Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whZ49-000IcW-1M for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 20:40:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whZ47-009D0O-34 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 20:40:20 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whZ47-009D0E-11 for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 20:40:20 +0000 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whZ44-00000000DDN-32ns for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 20:40:18 +0000 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-493c00f74baso7875445e9.0 for ; Wed, 08 Jul 2026 13:40:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783543210; cv=none; d=google.com; s=arc-20260327; b=lfKp81ITzg74Xka40tCxHPmNfYNuid48XJMsIu3McFMAvIDIC0lb70OIp0SfjTmtQ+ Ez1JNTpJzfDi4e4dc/Wxtg+q1WLq1BcyIPZMHGENIpOwZqEMOO8GP81kO3PU5oybUG5T TtPjQigITWRakRSlqJqK4TyoLKknMb6944FufSV69UupmthVVLcH4pVPqRVl6GzMAgv2 EEdiR861al5r0u4OKMVP9e3WdQIUFEWMTKVcaW8b9p2yNU3jlG0FVqg45SZNLimY/CZm q45Y38mV3YENPdgaXbnE/5N9dcnResw9Q+QzuFdsvtgKOv+q8gkwU/l1cVnPRlK1vwGF mZ+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=/4Rn7zDjG1wH7huWI4VMcT2QrOKHIozkY6/rbB51uno=; fh=gT1B378Xj6HSm3pXwKPWJI3iYmRefq/irH4GHQlvMxI=; b=Vzo3KFNxssdTfmN5/O18v0Vrkr/VnFcSMwwl0iQKDITnVZHQqI768SE1wd0kgGFOI5 m2WH79vGxPkOSWmGVy45t9UdUrvomyYX5t1gcXmnJcHgiDplSvZt3X/GdwQBLHXxySpZ LqLrqlA3IBa7nOXaFzysx7KjOAKWV0rDCq885NFt02nqqBo8v55vhivCX4u/fns5MBVw 9Csae83s2GLymIbFiDdF7KBBqzMQPECz6uu8L3IijBmK5uJA4OjuefYKXFvGOcwZm7GZ cFcl2nImtaiQFJ4jbKksR+rfcXobBBVhd6+6xJOBY5jZjlJG5YHMIzZ66cry3zGWsmUq aZ4A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20251104.gappssmtp.com; s=20251104; t=1783543210; x=1784148010; darn=lists.postgresql.org; h=content-type:cc:to:subject:message-id:date:from:mime-version:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/4Rn7zDjG1wH7huWI4VMcT2QrOKHIozkY6/rbB51uno=; b=VfdR3WwDDTTnSNKo+XV4t4vVfB6+KeRag7+Cz2vQ4CYi2Xd/i2P4Gc2x4Ho3KiZNHK XUQ4ILJuI/9gqBxlxO+O1wJtUtXDfX8xE2+MVF8zrpBPFW97fnEU/wRoXTnKKKrjWiNt 3UCrh4bXMsOqt6K8JPqXGUm13zy/pxIrQFc4TC2q5CHt54LQs1EDX6C4aSyQIJACW0ez VNHRefb709rjRMtvoGoX6/Nb+WsrRNtzKE4P1GezmVBCTz5stpJVHYZHTsAVBQt9wHiL uIE+8Jh9esm9EG4NlrXdpfCRvPZzYcLh8jrzeB2M77ZG8ZYFjidtndhqS40cckAKf+2T N5dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783543210; x=1784148010; h=content-type:cc:to:subject:message-id:date:from:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to:content-type; bh=/4Rn7zDjG1wH7huWI4VMcT2QrOKHIozkY6/rbB51uno=; b=hleb86v+cRtkKnLePd4oePY9QRJozin2sAnb1BB7qREpLXPU2fqlHrrXs8Io6lJ/cz 7dwLQycYbXhKpyv4rKuaEBSWcOC/TStqvAMSH5Kk+xpoQ7gLa6emktPlo/M5M36cMegq 4baehM/ClNJGcyXvQr4g0xNw8J2P/gcfEhszdjojwd4LtFjRiaYJyZXP7IUAGkhKQckw E/rWL2zJ8it63dkGDlbqxVio8QefpMVMt5MJw0Ira0nxCBBIOZLLbEAwGA+Wev9Um2LU 4oZuksPC48SndT/wS/VYNNbPAhsgSvpO0hoGy5bgoT4C1mTHKLCRJuQjXnuO+RGdUs2y 0/4g== X-Gm-Message-State: AOJu0YzWj3zpyATsBN2zSAsIsX4jXStpLB6U9hNv+1jKQvRjESd1CxWw J0Gd+XI/FFQPEHOwRZXpxJS/p3GlWBzL/yDGTolell0iieir9Y2Vp29Blq3MPDXHlPod4JHaAwO jm5r8iXSbqxASKMKmhE5hddiPLaZqf/M8eOldl+d7YkDbJrOH5apBPpbQeQ== X-Gm-Gg: AfdE7ck8JPrGR+hCAqypK+ZvwmB7Jm1zw1KCwwNF17hCI2Q6B5UoFRHxrYSw8DUp81z NsYhysHHDolO8xMxolATJUWS6/jDRo/p3HFIAowLR5TrAtOiyyXTx3tP06WC1VopZiPZ+UrJmDL omxGnAPrjI4rH1Vt03gkTXTFq9/qEvAWgiTeolWp2FffI8xg9UIsn9a4+ka2bS8kd0i8NXX6joO +HTUILlG1NnMWRKa/z4GFNyCvwfAANVVhbAuwAmFIrcvvcYifbdkO35ahMOcYkjc7Fu0Lwtw1vY hF7NZmskOVYE+1QAnKAxkrXv9/BKuRcw0QRJbYJXr/8= X-Received: by 2002:a05:6000:2c04:b0:474:4525:eb55 with SMTP id ffacd0b85a97d-47df0797877mr4199069f8f.47.1783543210013; Wed, 08 Jul 2026 13:40:10 -0700 (PDT) MIME-Version: 1.0 From: Peter Geoghegan Date: Wed, 8 Jul 2026 16:39:42 -0400 X-Gm-Features: AUfX_mz8NKnDD2MyqsmGkXnMPVs_oyRMahvRTMSYfFlySLwbQIuYNBr4X6wwjvM Message-ID: Subject: Hash index bucket split bug To: PostgreSQL Hackers Cc: Amit Kapila , Robert Haas Content-Type: multipart/mixed; boundary="00000000000079a7a906561f83b0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000079a7a906561f83b0 Content-Type: text/plain; charset="UTF-8" There's a bug in the logic for hash index scans: we fail to fully account for concurrent bucket splits. This can lead to incorrect results, as an affected scan may fail to return all matching rows. This is due to an oversight in commit 7c75ef57, so all stable branches are affected. The underlying problem is that _hash_next fails to step from one bucket of an in-progress to the other. In other words, it lacks the required transition logic that _hash_readnext already has (and _hash_readprev along with it). Note that the transition ordinarily happens anyway, inside _hash_readpage's no-matches loop, which is why this went unnoticed for so long: _hash_next only fails to make the transition when the last page it reads in the first bucket contains at least one matching tuple. In practice that means a tuple inserted into the bucket being populated after the split began. The attached bug fix patch v1-0001-* simply adds the missing handling to _hash_next (copied from _hash_readnext and _hash_readprev). I stumbled upon this bug when I asked Claude code to review a patch of mine that adds support for the new amgetbatch interface to the hash index AM (allowing hash indexes to perform I/O prefetching of heap blocks). I had Claude rewrite its original reproducer into a regression test and an isolation test, both of which appear in the second patch. Both tests are useful in their own way. The regression test runs quickly and so might be worth committing alongside the fix -- but it depends on leaving behind an incomplete split. The isolation test demonstrates that the bug doesn't hinge upon an incomplete split. The incomplete split case is particularly nasty, though, because the potential for wrong answers persists until an inserter completes the split. -- Peter Geoghegan --00000000000079a7a906561f83b0 Content-Type: application/octet-stream; name="v1-0001-Fix-hash-index-scans-concurrent-with-bucket-split.patch" Content-Disposition: attachment; filename="v1-0001-Fix-hash-index-scans-concurrent-with-bucket-split.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrcjcxae0 RnJvbSBhMjVhYzEwMTQ1ODdiYzI5YzllZTRmMmQ2NDA2ZDI1YWZiZjc1OWVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgOCBKdWwgMjAyNiAxNDoxODowNSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMS8yXSBGaXgg aGFzaCBpbmRleCBzY2FucyBjb25jdXJyZW50IHdpdGggYnVja2V0IHNwbGl0cy4KCk92ZXJzaWdo dCBpbiBjb21taXQgN2M3NWVmNTcsIHdoaWNoIGludHJvZHVjZWQgcGFnZS1hdC1hLXRpbWUgcHJv Y2Vzc2luZwpvZiBoYXNoIGluZGV4IHNjYW5zLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hzZWFyY2guYyB8IDU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBj aGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5j CmluZGV4IDg5ZDFjNWJjNi4uNzg4MmE1MzFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNl YXJjaC5jCkBAIC03NSw2ICs3NSwyOCBAQCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBk aXIpKQogCQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7CiAJCQl9CisJCQllbHNlIGlmIChzby0+aGFz aHNvX2J1Y19wb3B1bGF0ZWQgJiYgIXNvLT5oYXNoc29fYnVjX3NwbGl0KQorCQkJeworCQkJCS8q CisJCQkJICogZW5kIG9mIGJ1Y2tldCBiZWluZyBwb3B1bGF0ZWQ6IGNvbnRpbnVlIHRoZSBzY2Fu IGluIHRoZQorCQkJCSAqIGJ1Y2tldCBiZWluZyBzcGxpdCwgb24gd2hvc2UgcHJpbWFyeSBwYWdl IHdlIGhhdmUgaGVsZCBhCisJCQkJICogcGluIHNpbmNlIF9oYXNoX2ZpcnN0CisJCQkJICovCisJ CQkJYnVmID0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmOworCQkJCUFzc2VydChCdWZmZXJJ c1ZhbGlkKGJ1ZikpOworCQkJCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJ CQkJUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpLAorCQkJ CQkJCQkgIHNjYW4tPnhzX3NuYXBzaG90KTsKKworCQkJCS8qCisJCQkJICogc2V0dGluZyBoYXNo c29fYnVjX3NwbGl0IHRvIHRydWUgaW5kaWNhdGVzIHRoYXQgd2UgYXJlCisJCQkJICogc2Nhbm5p bmcgYnVja2V0IGJlaW5nIHNwbGl0LgorCQkJCSAqLworCQkJCXNvLT5oYXNoc29fYnVjX3NwbGl0 ID0gdHJ1ZTsKKworCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKKwkJ CQkJZW5kX29mX3NjYW4gPSB0cnVlOworCQkJfQogCQkJZWxzZQogCQkJCWVuZF9vZl9zY2FuID0g dHJ1ZTsKIAkJfQpAQCAtMTA0LDYgKzEyNiwzOCBAQCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAm YnVmLCBkaXIpKQogCQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7CiAJCQl9CisJCQllbHNlIGlmIChz by0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgJiYgc28tPmhhc2hzb19idWNfc3BsaXQpCisJCQl7CisJ CQkJUGFnZQkJcGFnZTsKKwkJCQlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CisKKwkJCQkvKgorCQkJ CSAqIHN0YXJ0IG9mIGJ1Y2tldCBiZWluZyBzcGxpdDogY29udGludWUgdGhlIHNjYW4gZnJvbSB0 aGUKKwkJCQkgKiBsYXN0IHBhZ2UgaW4gdGhlIGNoYWluIG9mIHRoZSBidWNrZXQgYmVpbmcgcG9w dWxhdGVkLCBvbgorCQkJCSAqIHdob3NlIHByaW1hcnkgcGFnZSB3ZSBoYXZlIGhlbGQgYSBwaW4g c2luY2UgX2hhc2hfZmlyc3QKKwkJCQkgKi8KKwkJCQlidWYgPSBzby0+aGFzaHNvX2J1Y2tldF9i dWY7CisJCQkJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYnVmKSk7CisJCQkJTG9ja0J1ZmZlcihidWYs IEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCQkJ CW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBhZ2UpOworCisJCQkJLyogbW92ZSB0byB0aGUg ZW5kIG9mIGJ1Y2tldCBjaGFpbiAqLworCQkJCXdoaWxlIChCbG9ja051bWJlcklzVmFsaWQob3Bh cXVlLT5oYXNob19uZXh0Ymxrbm8pKQorCQkJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAm cGFnZSwgJm9wYXF1ZSk7CisKKwkJCQkvKgorCQkJCSAqIHNldHRpbmcgaGFzaHNvX2J1Y19zcGxp dCB0byBmYWxzZSBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUKKwkJCQkgKiBzY2FubmluZyB0aGUgYnVj a2V0IGJlaW5nIHBvcHVsYXRlZC4gIE9ubHkgc2V0IGl0IGFmdGVyCisJCQkJICogdGhlIGNoYWlu IHdhbGsgYWJvdmU7IG90aGVyd2lzZSBfaGFzaF9yZWFkbmV4dCB3b3VsZAorCQkJCSAqIGFkdmFu Y2UgdG8gdGhlIGJ1Y2tldCBiZWluZyBzcGxpdCBvbiByZWFjaGluZyB0aGUgZW5kIG9mCisJCQkJ ICogdGhlIGNoYWluLCBpbnN0ZWFkIG9mIHN0b3BwaW5nIHRoZXJlLgorCQkJCSAqLworCQkJCXNv LT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CisKKwkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNj YW4sICZidWYsIGRpcikpCisJCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKKwkJCX0KIAkJCWVsc2UK IAkJCQllbmRfb2Zfc2NhbiA9IHRydWU7CiAJCX0KLS0gCjIuNTMuMAoK --00000000000079a7a906561f83b0 Content-Type: application/octet-stream; name="v1-0002-Add-tests-for-hash-index-scans-concurrent-with-bu.patch" Content-Disposition: attachment; filename="v1-0002-Add-tests-for-hash-index-scans-concurrent-with-bu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrcjcxas1 RnJvbSAzMTMxYTY5YmQ4YjdmZmZhNDUwNzk1ZmFlNTczZWUyZmI4YzQ3Mjg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgOCBKdWwgMjAyNiAxNToxODowNiAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMi8yXSBBZGQg dGVzdHMgZm9yIGhhc2ggaW5kZXggc2NhbnMgY29uY3VycmVudCB3aXRoIGJ1Y2tldAogc3BsaXRz LgoKVGVzdCB0aGUgYnVnIGZpeGVkIGJ5IHRoZSBwcmVjZWRpbmcgY29tbWl0IGF0IHR3byBsZXZl bHMsIHVzaW5nIHR3byBuZXcKaW5qZWN0aW9uIHBvaW50cyBpbiBfaGFzaF9zcGxpdGJ1Y2tldDog YW4gZXJyb3ItbW9kZSBwb2ludCBwbGFjZWQKYmVmb3JlIHR1cGxlIHJlbG9jYXRpb24gYmVnaW5z ICh3aGVyZSBleGlzdGluZyBjb2RlIGNhbiBmYWlsIGFueXdheSksCmFuZCBhIHdhaXQtbW9kZSBw b2ludCBwbGFjZWQgYWZ0ZXIgdHVwbGUgcmVsb2NhdGlvbiwgd2hlcmUgdGhlIHNwbGl0dGVyCmhv bGRzIG5vIGJ1ZmZlciBjb250ZW50IGxvY2tzLgoKQSByZWdyZXNzIHRlc3QgdXNlcyB0aGUgZXJy b3ItbW9kZSBwb2ludCB0byBpbnRlcnJ1cHQgYSBzcGxpdCBwYXJ0d2F5CnRocm91Z2gsIHRoZW4g dmVyaWZpZXMgdGhhdCBmb3J3YXJkLCBiYWNrd2FyZCwgYW5kIGJpdG1hcCBzY2FucyBvZiB0aGUK YWZmZWN0ZWQgYnVja2V0IHBhaXIgYWxsIGFncmVlIHdpdGggYSBzZXFzY2FuLiAgVGhlIGJ1ZyBp c24ndCBzcGVjaWZpYwp0byBpbnRlcnJ1cHRlZCBzcGxpdHM6IGludGVycnVwdGluZyBhIHNwbGl0 IGlzIGp1c3QgdGhlIG1vc3QgY29udmVuaWVudAp3YXkgdG8gaG9sZCB0aGUgYnVja2V0IHBhaXIg aW4gdGhlIHNhbWUgc3RhdGUgdGhhdCBzY2FucyBvYnNlcnZlIHdoaWxlCmFueSBzcGxpdCBpcyBp biBwcm9ncmVzcywgbWFraW5nIHRoZSB0ZXN0IGRldGVybWluaXN0aWMgd2l0aG91dCBhCnNlY29u ZCBzZXNzaW9uLgoKQW4gaXNvbGF0aW9uIHRlc3QgcHJvdmVzIHRoYXQgY2xhaW0gZGlyZWN0bHk6 IGl0IHBhdXNlcyBhIHNwbGl0dGVyIG9uCnRoZSB3YWl0LW1vZGUgcG9pbnQgYW5kIHJ1bnMgdGhl IHNhbWUgc2NhbnMgZnJvbSBhIHNlY29uZCBzZXNzaW9uIHdoaWxlCnRoZSBzcGxpdCByZW1haW5z IGdlbnVpbmVseSBpbiBwcm9ncmVzcywgdGhlbiBsZXRzIHRoZSBzcGxpdCBmaW5pc2ggYW5kCnNj YW5zIG9uY2UgbW9yZS4KCkNvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgRmFibGUgNSA8bm9yZXBseUBh bnRocm9waWMuY29tPgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgICAg ICAgICAgICB8ICAgNSArCiBzcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvTWFrZWZp bGUgICAgfCAgIDMgKy0KIC4uLi9pbmplY3Rpb25fcG9pbnRzL2V4cGVjdGVkL2hhc2gtc3BsaXQu b3V0ICB8ICA3MCArKysrKysrKysrCiAuLi4vaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9oYXNo X3NwbGl0Lm91dCAgfCAxMzEgKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQgfCAgIDIgKwogLi4uL2luamVjdGlvbl9wb2ludHMv c3BlY3MvaGFzaC1zcGxpdC5zcGVjICAgIHwgIDgxICsrKysrKysrKysrCiAuLi4vaW5qZWN0aW9u X3BvaW50cy9zcWwvaGFzaF9zcGxpdC5zcWwgICAgICAgfCAgODAgKysrKysrKysrKysKIDcgZmls ZXMgY2hhbmdlZCwgMzcxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvZXhwZWN0ZWQvaGFzaC1z cGxpdC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9w b2ludHMvZXhwZWN0ZWQvaGFzaF9zcGxpdC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvc3BlY3MvaGFzaC1zcGxpdC5zcGVjCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3NxbC9oYXNoX3Nw bGl0LnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDgwOTliMGQwMi4uYzJl NzIxM2M0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTM1LDYgKzM1LDcgQEAK ICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rp b25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogc3RhdGljIGJvb2wgX2hhc2hf YWxsb2NfYnVja2V0cyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGZpcnN0YmxvY2ssCkBAIC0x MTA0LDYgKzExMDUsOCBAQCBfaGFzaF9zcGxpdGJ1Y2tldChSZWxhdGlvbiByZWwsCiAJbnBhZ2Ug PSBCdWZmZXJHZXRQYWdlKG5idWYpOwogCW5vcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShucGFn ZSk7CiAKKwlJTkpFQ1RJT05fUE9JTlQoImhhc2gtc3BsaXQtYmVmb3JlLXJlbG9jYXRpb24iLCBO VUxMKTsKKwogCS8qIENvcHkgdGhlIHByZWRpY2F0ZSBsb2NrcyBmcm9tIG9sZCBidWNrZXQgdG8g bmV3IGJ1Y2tldC4gKi8KIAlQcmVkaWNhdGVMb2NrUGFnZVNwbGl0KHJlbCwKIAkJCQkJCSAgIEJ1 ZmZlckdldEJsb2NrTnVtYmVyKGJ1Y2tldF9vYnVmKSwKQEAgLTEyNTIsNiArMTI1NSw4IEBAIF9o YXNoX3NwbGl0YnVja2V0KFJlbGF0aW9uIHJlbCwKIAkJCS8qIGJlIHRpZHkgKi8KIAkJCWZvciAo aSA9IDA7IGkgPCBuaXR1cHM7IGkrKykKIAkJCQlwZnJlZShpdHVwc1tpXSk7CisKKwkJCUlOSkVD VElPTl9QT0lOVCgiaGFzaC1zcGxpdC1hZnRlci1yZWxvY2F0aW9uIiwgTlVMTCk7CiAJCQlicmVh azsKIAkJfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMv TWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvTWFrZWZpbGUKaW5k ZXggYzAxZDJmYjA5Li4yM2UwMDIwN2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9w b2ludHMvTWFrZWZpbGUKQEAgLTksMTAgKzksMTEgQEAgRVhURU5TSU9OID0gaW5qZWN0aW9uX3Bv aW50cwogREFUQSA9IGluamVjdGlvbl9wb2ludHMtLTEuMC5zcWwKIFBHRklMRURFU0MgPSAiaW5q ZWN0aW9uX3BvaW50cyAtIGZhY2lsaXR5IGZvciBpbmplY3Rpb24gcG9pbnRzIgogCi1SRUdSRVNT ID0gaW5qZWN0aW9uX3BvaW50cyBoYXNoYWdnIHJlaW5kZXhfY29uYyB2YWN1dW0KK1JFR1JFU1Mg PSBpbmplY3Rpb25fcG9pbnRzIGhhc2hhZ2cgcmVpbmRleF9jb25jIHZhY3V1bSBoYXNoX3NwbGl0 CiBSRUdSRVNTX09QVFMgPSAtLWRscGF0aD0kKHRvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVz cwogCiBJU09MQVRJT04gPSBiYXNpYyBcCisJICAgIGhhc2gtc3BsaXQgXAogCSAgICBpbnBsYWNl IFwKIAkgICAgcmVwYWNrIFwKIAkgICAgcmVwYWNrX3RlbXBvcmFsIFwKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9oYXNoLXNwbGl0Lm91dCBi L3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9oYXNoLXNwbGl0Lm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmQwODdhMmM2OQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9o YXNoLXNwbGl0Lm91dApAQCAtMCwwICsxLDcwIEBACitQYXJzZWQgdGVzdCBzcGVjIHdpdGggMiBz ZXNzaW9ucworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczFfc3BsaXQgczJfaW5zZXJ0IHMyX3Nj YW4gczJfYmFjayBzMl9kZXRhY2ggczJfd2FrZXVwIHMyX3NjYW4KK2luamVjdGlvbl9wb2ludHNf YXR0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAK KygxIHJvdykKKworc3RlcCBzMV9zcGxpdDogCisgICAgSU5TRVJUIElOVE8gaGFzaF9zcGxpdF90 ZXN0CisgICAgICBTRUxFQ1QgMTAwMDAwMCArIGcgRlJPTSBoYXNoX3NwbGl0X2dlb20sIGdlbmVy YXRlX3NlcmllcygxLCAzMjAgKiBuYnVja2V0cykgZzsKKyA8d2FpdGluZyAuLi4+CitzdGVwIHMy X2luc2VydDogCisgICAgSU5TRVJUIElOVE8gaGFzaF9zcGxpdF90ZXN0IFNFTEVDVCBrIEZST00g aGFzaF9zcGxpdF9rZXk7CisKK3N0ZXAgczJfc2NhbjogCisgICAgU0VMRUNUIGNvdW50KCopIEZS T00gaGFzaF9zcGxpdF90ZXN0CisgICAgIFdIRVJFIHYgPSAoU0VMRUNUIGsgRlJPTSBoYXNoX3Nw bGl0X2tleSk7CisKK2NvdW50CistLS0tLQorICAgMTEKKygxIHJvdykKKworc3RlcCBzMl9iYWNr OiAKKyAgICBCRUdJTjsKKyAgICBERUNMQVJFIGMgU0NST0xMIENVUlNPUiBGT1IKKyAgICAgIFNF TEVDVCB2ID0gKFNFTEVDVCBrIEZST00gaGFzaF9zcGxpdF9rZXkpIEZST00gaGFzaF9zcGxpdF90 ZXN0CisgICAgICAgV0hFUkUgdiA9IChTRUxFQ1QgayBGUk9NIGhhc2hfc3BsaXRfa2V5KTsKKyAg ICBNT1ZFIEZPUldBUkQgQUxMIElOIGM7CisgICAgRkVUQ0ggQkFDS1dBUkQgQUxMIEZST00gYzsK KyAgICBDT01NSVQ7CisKKz9jb2x1bW4/CistLS0tLS0tLQordCAgICAgICAKK3QgICAgICAgCit0 ICAgICAgIAordCAgICAgICAKK3QgICAgICAgCit0ICAgICAgIAordCAgICAgICAKK3QgICAgICAg Cit0ICAgICAgIAordCAgICAgICAKK3QgICAgICAgCisoMTEgcm93cykKKworc3RlcCBzMl9kZXRh Y2g6IFNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgnaGFzaC1zcGxpdC1hZnRlci1yZWxv Y2F0aW9uJyk7CitpbmplY3Rpb25fcG9pbnRzX2RldGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKK3N0ZXAgczJfd2FrZXVwOiBT RUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ2hhc2gtc3BsaXQtYWZ0ZXItcmVsb2NhdGlv bicpOworaW5qZWN0aW9uX3BvaW50c193YWtldXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg ICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitzdGVwIHMxX3NwbGl0OiA8Li4uIGNv bXBsZXRlZD4KK3N0ZXAgczJfc2NhbjogCisgICAgU0VMRUNUIGNvdW50KCopIEZST00gaGFzaF9z cGxpdF90ZXN0CisgICAgIFdIRVJFIHYgPSAoU0VMRUNUIGsgRlJPTSBoYXNoX3NwbGl0X2tleSk7 CisKK2NvdW50CistLS0tLQorICAgMTEKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2V4cGVjdGVkL2hhc2hfc3BsaXQub3V0IGIvc3JjL3Rl c3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2V4cGVjdGVkL2hhc2hfc3BsaXQub3V0Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMDc1NDYxOGMyCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2V4cGVjdGVkL2hhc2hfc3Bs aXQub3V0CkBAIC0wLDAgKzEsMTMxIEBACistLSBUZXN0IGhhc2ggaW5kZXggc2NhbnMgb2YgYSBi dWNrZXQgcGFpciB3aG9zZSBzcGxpdCBpcyBpbmNvbXBsZXRlCistLQorLS0gVGhlIGJlaGF2aW9y IHRlc3RlZCBoZXJlIGlzIG5vdCBzcGVjaWZpYyB0byBpbmNvbXBsZXRlIHNwbGl0czogaXQKKy0t IGFwcGxpZXMgdG8gYW55IHNjYW4gdGhhdCBydW5zIHdoaWxlIHRoZSBidWNrZXQgcGFpcidzIHNw bGl0LWluLXByb2dyZXNzCistLSBmbGFncyBhcmUgc2V0LCB3aGljaCBpcyB0aGUgY2FzZSBmb3Ig dGhlIGR1cmF0aW9uIG9mIGV2ZXJ5IHNwbGl0LgorLS0gSW50ZXJydXB0aW5nIGEgc3BsaXQgaXMg bWVyZWx5IHRoZSBtb3N0IGNvbnZlbmllbnQgd2F5IHRvIGhvbGQgdGhlCistLSBidWNrZXQgcGFp ciBpbiB0aGF0IHN0YXRlOiBpdCBtYWtlcyB0aGUgdGVzdHMgYmVsb3cgZGV0ZXJtaW5pc3RpYywK Ky0tIHdpdGhvdXQgYW55IG5lZWQgZm9yIGEgc2Vjb25kIHNlc3Npb24uICBUaGUgaGFzaC1zcGxp dCBpc29sYXRpb24gdGVzdAorLS0gcHJvdmlkZXMgZXF1aXZhbGVudCBjb3ZlcmFnZSBmb3Igc2Nh bnMgdGhhdCBydW4gZHVyaW5nIGEgbGl2ZSBzcGxpdC4KK0NSRUFURSBFWFRFTlNJT04gaW5qZWN0 aW9uX3BvaW50czsKK1NFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3NldF9sb2NhbCgpOworIGluamVj dGlvbl9wb2ludHNfc2V0X2xvY2FsIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitDUkVBVEUgVEFCTEUgaGFzaF9zcGxpdF90ZXN0ICh2IGludDQpIFdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBJTkRFWCBoYXNoX3NwbGl0X2luZGV4 IE9OIGhhc2hfc3BsaXRfdGVzdCBVU0lORyBoYXNoICh2KTsKKy0tIERldGVybWluZSB0aGUgbGF5 b3V0IG9mIHRoZSAobmV2ZXItc3BsaXQpIGluZGV4OiBvbmUgbWV0YXBhZ2UsIG5idWNrZXRzCist LSBidWNrZXQgcGFnZXMsIGFuZCBvbmUgYml0bWFwIHBhZ2UuICBUaGUgaW5kZXgncyBmaXJzdCBi dWNrZXQgc3BsaXQgd2lsbAorLS0gc3BsaXQgYnVja2V0IDAsIGNyZWF0aW5nIGJ1Y2tldCBuYnVj a2V0cy4KK0NSRUFURSBURU1QIFRBQkxFIGhhc2hfc3BsaXRfZ2VvbSBBUworICBTRUxFQ1QgcGdf cmVsYXRpb25fc2l6ZSgnaGFzaF9zcGxpdF9pbmRleCcpIC8KKyAgICAgICAgIGN1cnJlbnRfc2V0 dGluZygnYmxvY2tfc2l6ZScpOjpiaWdpbnQgLSAyIEFTIG5idWNrZXRzOworLS0gc2FuaXR5OiBp bml0aWFsIGJ1Y2tldCBjb3VudHMgYXJlIGFsd2F5cyBwb3dlcnMgb2YgdHdvCitTRUxFQ1QgbmJ1 Y2tldHMgPiAwIEFORCAobmJ1Y2tldHMgJiAobmJ1Y2tldHMgLSAxKSkgPSAwIEFTIG5idWNrZXRz X29rCisgIEZST00gaGFzaF9zcGxpdF9nZW9tOworIG5idWNrZXRzX29rIAorLS0tLS0tLS0tLS0t LQorIHQKKygxIHJvdykKKworLS0gQ2hvb3NlIGEgdmFsdWUgdGhhdCBtYXBzIHRvIGJ1Y2tldCAw IGJlZm9yZSB0aGUgc3BsaXQgYW5kIHRvIHRoZSBuZXcKKy0tIGJ1Y2tldCBhZnRlcndhcmRzCitD UkVBVEUgVEVNUCBUQUJMRSBoYXNoX3NwbGl0X2tleSBBUworICBTRUxFQ1QgbWluKHYpOjppbnQ0 IEFTIGsKKyAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgdiwgaGFzaF9zcGxpdF9n ZW9tCisgICBXSEVSRSAoaGFzaGludDQodjo6aW50NCkgJiAoMiAqIG5idWNrZXRzIC0gMSkpID0g bmJ1Y2tldHM7CitJTlNFUlQgSU5UTyBoYXNoX3NwbGl0X3Rlc3QKKyAgU0VMRUNUIGsgRlJPTSBo YXNoX3NwbGl0X2tleSwgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKTsKKy0tIEVycm9yIG91dCBkdXJp bmcgdGhlIGZpcnN0IGJ1Y2tldCBzcGxpdCwgbGVhdmluZyBpdCBpbmNvbXBsZXRlCitTRUxFQ1Qg aW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2hhc2gtc3BsaXQtYmVmb3JlLXJlbG9jYXRpb24nLCAn ZXJyb3InKTsKKyBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworSU5TRVJUIElOVE8gaGFzaF9zcGxpdF90ZXN0CisgIFNFTEVD VCAxMDAwMDAwICsgZyBGUk9NIGhhc2hfc3BsaXRfZ2VvbSwgZ2VuZXJhdGVfc2VyaWVzKDEsIDM1 MCAqIG5idWNrZXRzKSBnOworRVJST1I6ICBlcnJvciB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBw b2ludCBoYXNoLXNwbGl0LWJlZm9yZS1yZWxvY2F0aW9uCitTRUxFQ1QgaW5qZWN0aW9uX3BvaW50 c19kZXRhY2goJ2hhc2gtc3BsaXQtYmVmb3JlLXJlbG9jYXRpb24nKTsKKyBpbmplY3Rpb25fcG9p bnRzX2RldGFjaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0g VGhpcyBpbnNlcnRpb24gZ29lcyB0byB0aGUgbmV3IGJ1Y2tldCwgd2hpY2ggaXMgc3RpbGwgZmxh Z2dlZCBhcyBiZWluZworLS0gcG9wdWxhdGVkIGJ5IHRoZSBpbmNvbXBsZXRlIHNwbGl0CitJTlNF UlQgSU5UTyBoYXNoX3NwbGl0X3Rlc3QgU0VMRUNUIGsgRlJPTSBoYXNoX3NwbGl0X2tleTsKKy0t IFNjYW5zIG9mIHRoYXQgYnVja2V0IG11c3QgdmlzaXQgYm90aCBidWNrZXRzIG9mIHRoZSBpbmNv bXBsZXRlIHNwbGl0OgorLS0gdGhlIGZyZXNoIHJvdyBmcm9tIHRoZSBuZXcgYnVja2V0LCBwbHVz IHRoZSAxMCBvbGRlciByb3dzIHRoYXQgcmVtYWluCistLSBpbiBidWNrZXQgMAorU0VUIGVuYWJs ZV9zZXFzY2FuID0gb2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gb2ZmOworRVhQTEFJTiAo Q09TVFMgT0ZGKQorICBTRUxFQ1QgY291bnQoKikgRlJPTSBoYXNoX3NwbGl0X3Rlc3QKKyAgIFdI RVJFIHYgPSAoU0VMRUNUIGsgRlJPTSBoYXNoX3NwbGl0X2tleSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3Jl Z2F0ZQorICAgSW5pdFBsYW4gZXhwcl8xCisgICAgIC0+ICBTZXEgU2NhbiBvbiBoYXNoX3NwbGl0 X2tleQorICAgICAgICAgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg aGFzaF9zcGxpdF9pbmRleCBvbiBoYXNoX3NwbGl0X3Rlc3QKKyAgICAgICAgIEluZGV4IENvbmQ6 ICh2ID0gKEluaXRQbGFuIGV4cHJfMSkuY29sMSkKKyg2IHJvd3MpCisKK1NFTEVDVCBjb3VudCgq KSBGUk9NIGhhc2hfc3BsaXRfdGVzdAorIFdIRVJFIHYgPSAoU0VMRUNUIGsgRlJPTSBoYXNoX3Nw bGl0X2tleSk7CisgY291bnQgCistLS0tLS0tCisgICAgMTEKKygxIHJvdykKKworLS0gQmFja3dh cmQgc2NhbnMgbXVzdCB2aXNpdCBib3RoIGJ1Y2tldHMgdG9vLCBpbiB0aGUgb3Bwb3NpdGUgb3Jk ZXIKK0JFR0lOOworREVDTEFSRSBjIFNDUk9MTCBDVVJTT1IgRk9SCisgIFNFTEVDVCB2ID0gKFNF TEVDVCBrIEZST00gaGFzaF9zcGxpdF9rZXkpIEZST00gaGFzaF9zcGxpdF90ZXN0CisgICBXSEVS RSB2ID0gKFNFTEVDVCBrIEZST00gaGFzaF9zcGxpdF9rZXkpOworTU9WRSBGT1JXQVJEIEFMTCBJ TiBjOworRkVUQ0ggQkFDS1dBUkQgQUxMIEZST00gYzsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0K KyB0CisgdAorIHQKKyB0CisgdAorIHQKKyB0CisgdAorIHQKKyB0CisgdAorKDExIHJvd3MpCisK K0NPTU1JVDsKKy0tIFNhbWUgY291bnQgdmlhIGEgYml0bWFwIHNjYW4sIHdoaWNoIHNoYXJlcyB0 aGUgdW5kZXJseWluZyBzY2FuIGNvZGUKK1NFVCBlbmFibGVfaW5kZXhzY2FuID0gb2ZmOworU0VU IGVuYWJsZV9iaXRtYXBzY2FuID0gb247CitTRUxFQ1QgY291bnQoKikgRlJPTSBoYXNoX3NwbGl0 X3Rlc3QKKyBXSEVSRSB2ID0gKFNFTEVDVCBrIEZST00gaGFzaF9zcGxpdF9rZXkpOworIGNvdW50 IAorLS0tLS0tLQorICAgIDExCisoMSByb3cpCisKKy0tIEFuZCB0aGUgZ3JvdW5kIHRydXRoLCB2 aWEgdGhlIGhlYXAKK1NFVCBlbmFibGVfYml0bWFwc2NhbiA9IG9mZjsKK1JFU0VUIGVuYWJsZV9z ZXFzY2FuOworU0VMRUNUIGNvdW50KCopIEZST00gaGFzaF9zcGxpdF90ZXN0CisgV0hFUkUgdiA9 IChTRUxFQ1QgayBGUk9NIGhhc2hfc3BsaXRfa2V5KTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAx MQorKDEgcm93KQorCitSRVNFVCBlbmFibGVfaW5kZXhzY2FuOworUkVTRVQgZW5hYmxlX2JpdG1h cHNjYW47CitEUk9QIFRBQkxFIGhhc2hfc3BsaXRfdGVzdDsKK0RST1AgRVhURU5TSU9OIGluamVj dGlvbl9wb2ludHM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2lu dHMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24u YnVpbGQKaW5kZXggNTlkYmExY2IwLi5hMGIwYzQ4MjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21v ZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQKQEAgLTM2LDYgKzM2LDcgQEAgdGVzdHMgKz0g ewogICAgICAgJ2hhc2hhZ2cnLAogICAgICAgJ3JlaW5kZXhfY29uYycsCiAgICAgICAndmFjdXVt JywKKyAgICAgICdoYXNoX3NwbGl0JywKICAgICBdLAogICAgICdyZWdyZXNzX2FyZ3MnOiBbJy0t ZGxwYXRoJywgbWVzb24ucHJvamVjdF9idWlsZF9yb290KCkgLyAnc3JjL3Rlc3QvcmVncmVzcydd LAogICAgICMgVGhlIGluamVjdGlvbiBwb2ludHMgYXJlIGNsdXN0ZXItd2lkZSwgc28gZGlzYWJs ZSBpbnN0YWxsY2hlY2sKQEAgLTQ0LDYgKzQ1LDcgQEAgdGVzdHMgKz0gewogICAnaXNvbGF0aW9u JzogewogICAgICdzcGVjcyc6IFsKICAgICAgICdiYXNpYycsCisgICAgICAnaGFzaC1zcGxpdCcs CiAgICAgICAnaW5wbGFjZScsCiAgICAgICAncmVwYWNrJywKICAgICAgICdyZXBhY2tfdGVtcG9y YWwnLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3NwZWNz L2hhc2gtc3BsaXQuc3BlYyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVj cy9oYXNoLXNwbGl0LnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5j ZmRjMGQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9w b2ludHMvc3BlY3MvaGFzaC1zcGxpdC5zcGVjCkBAIC0wLDAgKzEsODEgQEAKKyMgVGVzdCBoYXNo IGluZGV4IHNjYW5zIHRoYXQgcnVuIHdoaWxlIGEgYnVja2V0IHNwbGl0IGlzIGluIHByb2dyZXNz LgorIworIyBUaGUgaW50ZXJlc3Rpbmcgd2luZG93IG9wZW5zIG9uY2UgdGhlIHNwbGl0IGhhcyBy ZWxvY2F0ZWQgdHVwbGVzIHRvIHRoZQorIyBuZXcgYnVja2V0LCBiZWZvcmUgdGhlIGJ1Y2tldHMn IHNwbGl0LWluLXByb2dyZXNzIGZsYWdzIGFyZSBjbGVhcmVkLiAgQQorIyBjb25jdXJyZW50IHNj YW4gd2hvc2UgdmFsdWUgYmVsb25ncyB0byB0aGUgbmV3IGJ1Y2tldCBtdXN0IHZpc2l0IGJvdGgK KyMgYnVja2V0cyBvZiB0aGUgcGFpcjogaXQgc2tpcHMgdGhlIG1vdmVkLWJ5LXNwbGl0IHR1cGxl cyBpbiB0aGUgbmV3CisjIGJ1Y2tldCwgc28gaXQgaGFzIHRvIHJlYWQgdGhlaXIgYXV0aG9yaXRh dGl2ZSBjb3BpZXMgZnJvbSB0aGUgb2xkCisjIGJ1Y2tldCwgcGx1cyBhbnkgdHVwbGVzIGluc2Vy dGVkIGludG8gdGhlIG5ldyBidWNrZXQgYWZ0ZXIgdGhlIHNwbGl0CisjIGJlZ2FuLgorIworIyBz MSBwZXJmb3JtcyB0aGUgc3BsaXQsIHBhdXNpbmcgaW5zaWRlIHRoYXQgd2luZG93IG9uIGEgd2Fp dCBpbmplY3Rpb24KKyMgcG9pbnQgKHBsYWNlZCB3aGVyZSB0aGUgc3BsaXR0ZXIgaG9sZHMgbm8g YnVmZmVyIGNvbnRlbnQgbG9ja3MpLiAgczIKKyMgdGhlbiBpbnNlcnRzIGEgbWF0Y2hpbmcgcm93 ICh3aGljaCBnb2VzIHRvIHRoZSBuZXcgYnVja2V0KSBhbmQgc2NhbnMsCisjIGJvdGggZm9yd2Fy ZHMgYW5kIGJhY2t3YXJkcy4KKworc2V0dXAKK3sKKyAgICBDUkVBVEUgRVhURU5TSU9OIGluamVj dGlvbl9wb2ludHM7CisgICAgQ1JFQVRFIFRBQkxFIGhhc2hfc3BsaXRfdGVzdCAodiBpbnQ0KSBX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CisgICAgQ1JFQVRFIElOREVYIGhhc2hf c3BsaXRfaW5kZXggT04gaGFzaF9zcGxpdF90ZXN0IFVTSU5HIGhhc2ggKHYpOworICAgIENSRUFU RSBUQUJMRSBoYXNoX3NwbGl0X2dlb20gQVMKKyAgICAgIFNFTEVDVCBwZ19yZWxhdGlvbl9zaXpl KCdoYXNoX3NwbGl0X2luZGV4JykgLworICAgICAgICAgICAgIGN1cnJlbnRfc2V0dGluZygnYmxv Y2tfc2l6ZScpOjpiaWdpbnQgLSAyIEFTIG5idWNrZXRzOworICAgIENSRUFURSBUQUJMRSBoYXNo X3NwbGl0X2tleSBBUworICAgICAgU0VMRUNUIG1pbih2KTo6aW50NCBBUyBrCisgICAgICAgIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKSB2LCBoYXNoX3NwbGl0X2dlb20KKyAgICAgICBX SEVSRSAoaGFzaGludDQodjo6aW50NCkgJiAoMiAqIG5idWNrZXRzIC0gMSkpID0gbmJ1Y2tldHM7 CisgICAgSU5TRVJUIElOVE8gaGFzaF9zcGxpdF90ZXN0CisgICAgICBTRUxFQ1QgayBGUk9NIGhh c2hfc3BsaXRfa2V5LCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApOworfQorCit0ZWFyZG93bgorewor ICAgIERST1AgVEFCTEUgaGFzaF9zcGxpdF90ZXN0LCBoYXNoX3NwbGl0X2dlb20sIGhhc2hfc3Bs aXRfa2V5OworICAgIERST1AgRVhURU5TSU9OIGluamVjdGlvbl9wb2ludHM7Cit9CisKK3Nlc3Np b24gczEKK3NldHVwCit7CisgICAgU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc2V0X2xvY2FsKCk7 CisgICAgU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdoYXNoLXNwbGl0LWFmdGVyLXJl bG9jYXRpb24nLCAnd2FpdCcpOworfQorc3RlcCBzMV9zcGxpdAoreworICAgIElOU0VSVCBJTlRP IGhhc2hfc3BsaXRfdGVzdAorICAgICAgU0VMRUNUIDEwMDAwMDAgKyBnIEZST00gaGFzaF9zcGxp dF9nZW9tLCBnZW5lcmF0ZV9zZXJpZXMoMSwgMzIwICogbmJ1Y2tldHMpIGc7Cit9CisKK3Nlc3Np b24gczIKK3NldHVwCit7CisgICAgU0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOworICAgIFNFVCBl bmFibGVfYml0bWFwc2NhbiA9IG9mZjsKK30KK3N0ZXAgczJfaW5zZXJ0Cit7CisgICAgSU5TRVJU IElOVE8gaGFzaF9zcGxpdF90ZXN0IFNFTEVDVCBrIEZST00gaGFzaF9zcGxpdF9rZXk7Cit9Citz dGVwIHMyX3NjYW4KK3sKKyAgICBTRUxFQ1QgY291bnQoKikgRlJPTSBoYXNoX3NwbGl0X3Rlc3QK KyAgICAgV0hFUkUgdiA9IChTRUxFQ1QgayBGUk9NIGhhc2hfc3BsaXRfa2V5KTsKK30KK3N0ZXAg czJfYmFjaworeworICAgIEJFR0lOOworICAgIERFQ0xBUkUgYyBTQ1JPTEwgQ1VSU09SIEZPUgor ICAgICAgU0VMRUNUIHYgPSAoU0VMRUNUIGsgRlJPTSBoYXNoX3NwbGl0X2tleSkgRlJPTSBoYXNo X3NwbGl0X3Rlc3QKKyAgICAgICBXSEVSRSB2ID0gKFNFTEVDVCBrIEZST00gaGFzaF9zcGxpdF9r ZXkpOworICAgIE1PVkUgRk9SV0FSRCBBTEwgSU4gYzsKKyAgICBGRVRDSCBCQUNLV0FSRCBBTEwg RlJPTSBjOworICAgIENPTU1JVDsKK30KK3N0ZXAgczJfZGV0YWNoIHsgU0VMRUNUIGluamVjdGlv bl9wb2ludHNfZGV0YWNoKCdoYXNoLXNwbGl0LWFmdGVyLXJlbG9jYXRpb24nKTsgfQorc3RlcCBz Ml93YWtldXAgeyBTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ2hhc2gtc3BsaXQtYWZ0 ZXItcmVsb2NhdGlvbicpOyB9CisKKyMgU2NhbiBkdXJpbmcgdGhlIHBhdXNlZCBzcGxpdCwgdGhl biBsZXQgdGhlIHNwbGl0IGZpbmlzaCBhbmQgc2NhbiBhZ2Fpbi4KKyMgVGhlIGRldGFjaCBtdXN0 IGhhcHBlbiBiZWZvcmUgdGhlIHdha2V1cDogdGhlIHNhbWUgSU5TRVJUIGNhbiB0cmlnZ2VyCisj IGFub3RoZXIgc3BsaXQsIHdoaWNoIG11c3Qgbm90IGhpdCB0aGUgaW5qZWN0aW9uIHBvaW50IGFn YWluLgorcGVybXV0YXRpb24gczFfc3BsaXQgczJfaW5zZXJ0IHMyX3NjYW4gczJfYmFjayBzMl9k ZXRhY2ggczJfd2FrZXVwIHMyX3NjYW4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9zcWwvaGFzaF9zcGxpdC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVj dGlvbl9wb2ludHMvc3FsL2hhc2hfc3BsaXQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMC4uMDEwYjY1ODgyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy9pbmplY3Rpb25fcG9pbnRzL3NxbC9oYXNoX3NwbGl0LnNxbApAQCAtMCwwICsxLDgwIEBACist LSBUZXN0IGhhc2ggaW5kZXggc2NhbnMgb2YgYSBidWNrZXQgcGFpciB3aG9zZSBzcGxpdCBpcyBp bmNvbXBsZXRlCistLQorLS0gVGhlIGJlaGF2aW9yIHRlc3RlZCBoZXJlIGlzIG5vdCBzcGVjaWZp YyB0byBpbmNvbXBsZXRlIHNwbGl0czogaXQKKy0tIGFwcGxpZXMgdG8gYW55IHNjYW4gdGhhdCBy dW5zIHdoaWxlIHRoZSBidWNrZXQgcGFpcidzIHNwbGl0LWluLXByb2dyZXNzCistLSBmbGFncyBh cmUgc2V0LCB3aGljaCBpcyB0aGUgY2FzZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGV2ZXJ5IHNwbGl0 LgorLS0gSW50ZXJydXB0aW5nIGEgc3BsaXQgaXMgbWVyZWx5IHRoZSBtb3N0IGNvbnZlbmllbnQg d2F5IHRvIGhvbGQgdGhlCistLSBidWNrZXQgcGFpciBpbiB0aGF0IHN0YXRlOiBpdCBtYWtlcyB0 aGUgdGVzdHMgYmVsb3cgZGV0ZXJtaW5pc3RpYywKKy0tIHdpdGhvdXQgYW55IG5lZWQgZm9yIGEg c2Vjb25kIHNlc3Npb24uICBUaGUgaGFzaC1zcGxpdCBpc29sYXRpb24gdGVzdAorLS0gcHJvdmlk ZXMgZXF1aXZhbGVudCBjb3ZlcmFnZSBmb3Igc2NhbnMgdGhhdCBydW4gZHVyaW5nIGEgbGl2ZSBz cGxpdC4KK0NSRUFURSBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsKK1NFTEVDVCBpbmplY3Rp b25fcG9pbnRzX3NldF9sb2NhbCgpOworCitDUkVBVEUgVEFCTEUgaGFzaF9zcGxpdF90ZXN0ICh2 IGludDQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBJTkRFWCBo YXNoX3NwbGl0X2luZGV4IE9OIGhhc2hfc3BsaXRfdGVzdCBVU0lORyBoYXNoICh2KTsKKworLS0g RGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgdGhlIChuZXZlci1zcGxpdCkgaW5kZXg6IG9uZSBtZXRh cGFnZSwgbmJ1Y2tldHMKKy0tIGJ1Y2tldCBwYWdlcywgYW5kIG9uZSBiaXRtYXAgcGFnZS4gIFRo ZSBpbmRleCdzIGZpcnN0IGJ1Y2tldCBzcGxpdCB3aWxsCistLSBzcGxpdCBidWNrZXQgMCwgY3Jl YXRpbmcgYnVja2V0IG5idWNrZXRzLgorQ1JFQVRFIFRFTVAgVEFCTEUgaGFzaF9zcGxpdF9nZW9t IEFTCisgIFNFTEVDVCBwZ19yZWxhdGlvbl9zaXplKCdoYXNoX3NwbGl0X2luZGV4JykgLworICAg ICAgICAgY3VycmVudF9zZXR0aW5nKCdibG9ja19zaXplJyk6OmJpZ2ludCAtIDIgQVMgbmJ1Y2tl dHM7CistLSBzYW5pdHk6IGluaXRpYWwgYnVja2V0IGNvdW50cyBhcmUgYWx3YXlzIHBvd2VycyBv ZiB0d28KK1NFTEVDVCBuYnVja2V0cyA+IDAgQU5EIChuYnVja2V0cyAmIChuYnVja2V0cyAtIDEp KSA9IDAgQVMgbmJ1Y2tldHNfb2sKKyAgRlJPTSBoYXNoX3NwbGl0X2dlb207CisKKy0tIENob29z ZSBhIHZhbHVlIHRoYXQgbWFwcyB0byBidWNrZXQgMCBiZWZvcmUgdGhlIHNwbGl0IGFuZCB0byB0 aGUgbmV3CistLSBidWNrZXQgYWZ0ZXJ3YXJkcworQ1JFQVRFIFRFTVAgVEFCTEUgaGFzaF9zcGxp dF9rZXkgQVMKKyAgU0VMRUNUIG1pbih2KTo6aW50NCBBUyBrCisgICAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwMDApIHYsIGhhc2hfc3BsaXRfZ2VvbQorICAgV0hFUkUgKGhhc2hpbnQ0KHY6 OmludDQpICYgKDIgKiBuYnVja2V0cyAtIDEpKSA9IG5idWNrZXRzOworCitJTlNFUlQgSU5UTyBo YXNoX3NwbGl0X3Rlc3QKKyAgU0VMRUNUIGsgRlJPTSBoYXNoX3NwbGl0X2tleSwgZ2VuZXJhdGVf c2VyaWVzKDEsIDEwKTsKKworLS0gRXJyb3Igb3V0IGR1cmluZyB0aGUgZmlyc3QgYnVja2V0IHNw bGl0LCBsZWF2aW5nIGl0IGluY29tcGxldGUKK1NFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFj aCgnaGFzaC1zcGxpdC1iZWZvcmUtcmVsb2NhdGlvbicsICdlcnJvcicpOworSU5TRVJUIElOVE8g aGFzaF9zcGxpdF90ZXN0CisgIFNFTEVDVCAxMDAwMDAwICsgZyBGUk9NIGhhc2hfc3BsaXRfZ2Vv bSwgZ2VuZXJhdGVfc2VyaWVzKDEsIDM1MCAqIG5idWNrZXRzKSBnOworU0VMRUNUIGluamVjdGlv bl9wb2ludHNfZGV0YWNoKCdoYXNoLXNwbGl0LWJlZm9yZS1yZWxvY2F0aW9uJyk7CisKKy0tIFRo aXMgaW5zZXJ0aW9uIGdvZXMgdG8gdGhlIG5ldyBidWNrZXQsIHdoaWNoIGlzIHN0aWxsIGZsYWdn ZWQgYXMgYmVpbmcKKy0tIHBvcHVsYXRlZCBieSB0aGUgaW5jb21wbGV0ZSBzcGxpdAorSU5TRVJU IElOVE8gaGFzaF9zcGxpdF90ZXN0IFNFTEVDVCBrIEZST00gaGFzaF9zcGxpdF9rZXk7CisKKy0t IFNjYW5zIG9mIHRoYXQgYnVja2V0IG11c3QgdmlzaXQgYm90aCBidWNrZXRzIG9mIHRoZSBpbmNv bXBsZXRlIHNwbGl0OgorLS0gdGhlIGZyZXNoIHJvdyBmcm9tIHRoZSBuZXcgYnVja2V0LCBwbHVz IHRoZSAxMCBvbGRlciByb3dzIHRoYXQgcmVtYWluCistLSBpbiBidWNrZXQgMAorU0VUIGVuYWJs ZV9zZXFzY2FuID0gb2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gb2ZmOworRVhQTEFJTiAo Q09TVFMgT0ZGKQorICBTRUxFQ1QgY291bnQoKikgRlJPTSBoYXNoX3NwbGl0X3Rlc3QKKyAgIFdI RVJFIHYgPSAoU0VMRUNUIGsgRlJPTSBoYXNoX3NwbGl0X2tleSk7CitTRUxFQ1QgY291bnQoKikg RlJPTSBoYXNoX3NwbGl0X3Rlc3QKKyBXSEVSRSB2ID0gKFNFTEVDVCBrIEZST00gaGFzaF9zcGxp dF9rZXkpOworCistLSBCYWNrd2FyZCBzY2FucyBtdXN0IHZpc2l0IGJvdGggYnVja2V0cyB0b28s IGluIHRoZSBvcHBvc2l0ZSBvcmRlcgorQkVHSU47CitERUNMQVJFIGMgU0NST0xMIENVUlNPUiBG T1IKKyAgU0VMRUNUIHYgPSAoU0VMRUNUIGsgRlJPTSBoYXNoX3NwbGl0X2tleSkgRlJPTSBoYXNo X3NwbGl0X3Rlc3QKKyAgIFdIRVJFIHYgPSAoU0VMRUNUIGsgRlJPTSBoYXNoX3NwbGl0X2tleSk7 CitNT1ZFIEZPUldBUkQgQUxMIElOIGM7CitGRVRDSCBCQUNLV0FSRCBBTEwgRlJPTSBjOworQ09N TUlUOworCistLSBTYW1lIGNvdW50IHZpYSBhIGJpdG1hcCBzY2FuLCB3aGljaCBzaGFyZXMgdGhl IHVuZGVybHlpbmcgc2NhbiBjb2RlCitTRVQgZW5hYmxlX2luZGV4c2NhbiA9IG9mZjsKK1NFVCBl bmFibGVfYml0bWFwc2NhbiA9IG9uOworU0VMRUNUIGNvdW50KCopIEZST00gaGFzaF9zcGxpdF90 ZXN0CisgV0hFUkUgdiA9IChTRUxFQ1QgayBGUk9NIGhhc2hfc3BsaXRfa2V5KTsKKy0tIEFuZCB0 aGUgZ3JvdW5kIHRydXRoLCB2aWEgdGhlIGhlYXAKK1NFVCBlbmFibGVfYml0bWFwc2NhbiA9IG9m ZjsKK1JFU0VUIGVuYWJsZV9zZXFzY2FuOworU0VMRUNUIGNvdW50KCopIEZST00gaGFzaF9zcGxp dF90ZXN0CisgV0hFUkUgdiA9IChTRUxFQ1QgayBGUk9NIGhhc2hfc3BsaXRfa2V5KTsKK1JFU0VU IGVuYWJsZV9pbmRleHNjYW47CitSRVNFVCBlbmFibGVfYml0bWFwc2NhbjsKKworRFJPUCBUQUJM RSBoYXNoX3NwbGl0X3Rlc3Q7CitEUk9QIEVYVEVOU0lPTiBpbmplY3Rpb25fcG9pbnRzOwotLSAK Mi41My4wCgo= --00000000000079a7a906561f83b0--