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 1v3ZdB-000b94-Hw for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Sep 2025 12:38:57 +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 1v3Zd9-009eA8-Iv for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Sep 2025 12:38:56 +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 1v3Zd8-009e9z-OC for pgsql-hackers@lists.postgresql.org; Tue, 30 Sep 2025 12:38:55 +0000 Received: from fhigh-b3-smtp.messagingengine.com ([202.12.124.154]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v3Zd6-000to6-0w for pgsql-hackers@lists.postgresql.org; Tue, 30 Sep 2025 12:38:55 +0000 Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailfhigh.stl.internal (Postfix) with ESMTP id 04C617A0101; Tue, 30 Sep 2025 08:38:49 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-06.internal (MEProxy); Tue, 30 Sep 2025 08:38:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm2; t=1759235929; x=1759322329; bh=If7soMo9vT T/t1QLaxwjiEqMA0k3eoaEPEqdx6vK12s=; b=eXj5X73Mu5u67rsCmhI5eHa6b/ RqRTUtgkfTtuZLpn4uj7sniumFxVI4VkSPyXhJJqcx1VMvY72TuAmNnUDDm+Aq73 5eFWNj8lIEuD56DcIDMuqENPsilsyaHkhqFlPNB88rqZdGH7l8KCDblSIQae2Oze qiTA06ARI+h31QZ7EyEQLWLcBwlOvKINqhG7HLcuqkpbeJi/ViORg7g1LL0aL2Wk ZE3mfQcA4VskFjy/hyuARWdXtOb4yE/X5bzZ2YDCZ58kur6bHpRmV6bZR3Rv2jjj WJu/3NOdMMB+RYtg7qQYdHWMBqxUQHEB5lJ0eE3zq/SrOc/2Y3knhFqLeq5w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1759235929; x=1759322329; bh=If7soMo9vTT/t1QLaxwjiEqMA0k3eoaEPEq dx6vK12s=; b=GoNmKvwBW5fzHITGGs3xEUYT7g/XRbEProDU4R3ACuAWVN7r3IU K+uPGXGujJYfHSKLxyaKLd0ueAaOpzGg3IlpIrlpES5KDfnhhmA/tdf3LM96ugPN eR6FElidSOENzqWYTSba+UyR7N8ECaS3ebdQ+/wvCMdAfSYt35Pj28W8bP1/nxpP xvMS/qtHeRWMDjfaRJPvo/0rdcPKn0abZenApHvw2GxmG4D6xWcBGButhro7W+6/ 8MsGHltdJYj/+Ckg+twlorlE5w0WGTGXC21YAlykbZy5quPUtTERkQJ7RHXSIv5F J6p01Iov7afDoCsuHbjMmJWgz9SFd/qjQwg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdektdeklecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpeffhffvvefkjghfuffogggtsehmtdhmreertdejnecuhfhrohhmpefirhgvghcuuehu rhguuceoghhrvghgsegsuhhrugdrmhgvqeenucggtffrrghtthgvrhhnpeefvdfhudelud evveegheeuhfdtuedvueeiveegieejkefggfevhfekkefhtdekheenucevlhhushhtvghr ufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehgrhgvghessghurhgurdhmvg dpnhgspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepughg rhhofihlvgihmhhlsehgmhgrihhlrdgtohhmpdhrtghpthhtohepmhhitghhrggvlhesph grqhhuihgvrhdrgiihiidprhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehlihhs thhsrdhpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 30 Sep 2025 08:38:49 -0400 (EDT) Date: Tue, 30 Sep 2025 08:38:48 -0400 From: Greg Burd To: David Rowley Cc: Michael Paquier , PostgreSQL Hackers Message-ID: <76DBEF5D-EA47-4C30-8D28-97B3B88E2E2D@greg.burd.me> In-Reply-To: References: Subject: Re: [PATCH] Add tests for Bitmapset X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="68dbcf58_49a65050_147c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --68dbcf58_49a65050_147c Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Sep 30 2025, at 6:29 am, David Rowley wrote: > On Tue, 30 Sept 2025 at 22:30, Greg Burd wrote: >> Thank you both, patch attached. > > Patch looks good to me. > > Just while reviewing, I was confused at the following code in > test_bms_add_range(). > > /* Check for invalid range */ > if (upper < lower) > { > bms_free(bms); > PG_RETURN_NULL(); > } > > That seems wrong. You should just return the input set in that case, > not NULL. Agreed, I should have caught this inconsistency earlier on. > This results in: > > postgres=# select test_bms_add_range('(b 1)', 2, 5); -- ok. > test_bms_add_range > -------------------- > (b 1 2 3 4 5) > (1 row) > > postgres=# select test_bms_add_range('(b 1)', 5, 2); -- wrong results > test_bms_add_range > -------------------- > > (1 row) > > I'd expect the last one to return '(b 1)', effectively the input set unmodified. > > If I remove the code quoted above, I also see something else unexpected: > > postgres=# select test_bms_add_range('(b)', 5, 2); > test_bms_add_range > -------------------- > <> > (1 row) > > Now, you might blame me for that as I see you've done things like: > > if (bms_is_empty(bms)) > PG_RETURN_NULL(); > > in other places, but it's not very consistent as I can get the <> in > other locations: > > postgres=# select test_bms_add_members('(b)', '(b)'); > test_bms_add_members > ---------------------- > <> > (1 row) > > It seems to me that you could save some code and all this > inconsistency by just making <> the standard way to represent an empty > Bitmapset. Or if you really want to keep the SQL NULLs, you could make > a helper macro that handles that consistently. nodeToString() will turn NULL into '<>' because it has no way to know that we're referring to a NULL/empty Bitmapset, but that's not what we'd ideally like to return in those cases because NULL Bitmapsets are in fact a thing. The standard/consistent representation for a NULL Bitmapset encoded by nodeToString() is '(b)' so I'll update to be more consistent across tests. > For me, I think stripping as much logic out of the test functions as > possible is a good way of doing things. I expect you really want to > witness the behaviour of bitmapset.c, not some anomaly of > test_bitmapset.c. You are 100% correct, I've stripped away as much as possible so as to push the responsibility for results down to the bitmapset.c code as it should be. > David v2 attached. best. -greg --68dbcf58_49a65050_147c Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v2-0001-Remove-NULL-check-and-other-defensive-code-in-Bit.patch" RnJvbSA4MTk5YzNlMDIwNWE3ZWI5NTYwNjFiZTg2YjQ3MmE4NmVkMjY2YWQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogVHVlLCAz MCBTZXAgMjAyNSAwNToxNTo0MCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIFJlbW92ZSBOVUxM IGNoZWNrIGFuZCBvdGhlciBkZWZlbnNpdmUgY29kZSBpbiBCaXRtYXBzZXQKIHRlc3RzCgpTb21l IHRlc3RzIG92ZXJzaGFkb3dlZCB0aGVpciBjYWxsZWUncyByZXNwb25zaWJsaXR5IHRvIGNoZWNr IGFyZ3VtZW50cwphbmQgYmUgZGVmZW5zaXZlIG9yIHJldHVybiBkZWZhdWx0IHZhbHVlcywgdGhp cyBpcyB1bm5lY2Vzc2FyeSBhbmQgY2FuCmhpZGUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBj b2RlLiAgSW4gYWRkaXRpb24sIHRoZSBibXNfZnJlZSgpCmZ1bmN0aW9uIHNhZmVseSBoYW5kbGVz IE5VTEwgaW5wdXQsIHNvIGNoZWNraW5nIGZvciBOVUxMIGJlZm9yZSBjYWxsaW5nCml0IGlzIHVu bmVjZXNzYXJ5IGFuZCBhZ2FpbiBoaWRlcyBhbiBpbXBvcnRhbnQgYXNwZWN0IG9mIHRoZSBBUEku IFNpbmNlCnRlc3RzIHNlcnZlIGFzIHJlZmVyZW5jZSBleGFtcGxlcyBmb3IgcHJvcGVyIEFQSSB1 c2FnZSwgdGhleSBzaG91bGQKZGVtb25zdHJhdGUgdGhlIGNvcnJlY3QgY2FsbGluZyBwYXR0ZXJu cyBhbmQgbm90IGR1cGxpY2F0ZSBlcnJvcgpjaGVja2luZyBpbiB0aGUgZnVuY3Rpb25zIHRoZXkg ZXhwb3NlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgoKQXV0aG9yOiBHcmVnIEJ1cmQgPGdyZWdAYnVy ZC5tZT4KUmVwb3J0ZWQtYnk6IERhdmlkIFJvd2xleTxkZ3Jvd2xleW1sQGdtYWlsLmNvbT4KUmV2 aWV3ZWQtYnk6IE1pY2hhZWwgUGFxdWllciA8bWljaGFlbEBwYXF1aWVyLnh5ej4KRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS83QkQxQUJEQi1CMDNBLTQ2NEEtOUJBOS1BNzNCNTVBRDhB MUZAZ2V0bWFpbHNwcmluZy5jb20KLS0tCiAuLi4vZXhwZWN0ZWQvdGVzdF9iaXRtYXBzZXQub3V0 ICAgICAgICAgICAgICAgfCAgNzggKystLS0KIC4uLi9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rl c3RfYml0bWFwc2V0LmMgICB8IDI4NSArKysrKystLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdl ZCwgMTM5IGluc2VydGlvbnMoKyksIDIyNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0Lm91dCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvZXhwZWN0ZWQvdGVzdF9iaXRtYXBzZXQu b3V0CmluZGV4IGJlN2I2Mzk5YzgyLi4yZTIwNGQ2ODdkZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0X2JpdG1hcHNldC5vdXQKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0X2JpdG1hcHNldC5v dXQKQEAgLTYzLDcgKzYzLDcgQEAgU0VMRUNUIHRlc3RfYm1zX2FkZF9tZW1iZXIoJyhiIDEwKScs IDEwKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfYWRkX21lbWJlcignKGIpJywgTlVMTCkg QVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIC0tIGJt c19yZXBsYWNlX21lbWJlcnMoKQpAQCAtNzYsNyArNzYsNyBAQCBTRUxFQ1QgdGVzdF9ibXNfcmVw bGFjZV9tZW1iZXJzKE5VTEwsICcoYiAxIDIgMyknKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9i bXNfcmVwbGFjZV9tZW1iZXJzKCcoYiAxIDIgMyknLCBOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0 IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX3JlcGxhY2Vf bWVtYmVycygnKGIgMSAyIDMpJywgJyhiIDMgNSA2KScpIEFTIHJlc3VsdDsKQEAgLTEwOCwxMyAr MTA4LDEzIEBAIFNFTEVDVCB0ZXN0X2Jtc19yZXBsYWNlX21lbWJlcnMoJyhiIDEgMiAzIDQgNSkn LCAnKGIgNTAwIDYwMCknKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfcmVwbGFjZV9tZW1i ZXJzKCcoYiAxIDIgMyknLCBOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAK KyAoYikKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX3JlcGxhY2VfbWVtYmVycygnKGIgNSkn LCBOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykK IAogU0VMRUNUIHRlc3RfYm1zX3JlcGxhY2VfbWVtYmVycyhOVUxMLCAnKGIgNSknKSBBUyByZXN1 bHQ7CkBAIC0xMjYsNyArMTI2LDcgQEAgU0VMRUNUIHRlc3RfYm1zX3JlcGxhY2VfbWVtYmVycyhO VUxMLCAnKGIgNSknKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfcmVwbGFjZV9tZW1iZXJz KE5VTEwsIE5VTEwpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEg cm93KQogCiAtLSBibXNfZGVsX21lbWJlcigpCkBAIC0xMzUsMTMgKzEzNSwxMyBAQCBFUlJPUjog IG5lZ2F0aXZlIGJpdG1hcHNldCBtZW1iZXIgbm90IGFsbG93ZWQKIFNFTEVDVCB0ZXN0X2Jtc19k ZWxfbWVtYmVyKCcoYiknLCAxMCkgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisg KGIpCiAoMSByb3cpCiAKIFNFTEVDVCB0ZXN0X2Jtc19kZWxfbWVtYmVyKCcoYiAxMCknLCAxMCkg QVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIFNFTEVD VCB0ZXN0X2Jtc19kZWxfbWVtYmVyKCcoYiAxMCknLCA1KSBBUyByZXN1bHQ7CkBAIC0xOTMsMjYg KzE5MywyNiBAQCBTRUxFQ1QgdGVzdF9ibXNfZGVsX21lbWJlcignKGIgMSA1MCAxMDAgMjAwKScs IDEwMCkgQVMgcmVzdWx0OwogU0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1iZXIoJyhiIDQyKScsIDQy KSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogU0VM RUNUIHRlc3RfYm1zX2RlbF9tZW1iZXIoJyhiIDUpJywgTlVMTCkgQVMgcmVzdWx0OwogIHJlc3Vs dCAKIC0tLS0tLS0tCi0gCisgKGIgNSkKICgxIHJvdykKIAogLS0gYm1zX2RlbF9tZW1iZXJzKCkK IFNFTEVDVCB0ZXN0X2Jtc19kZWxfbWVtYmVycygnKGIpJywgJyhiIDEwKScpIEFTIHJlc3VsdDsK ICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9ibXNf ZGVsX21lbWJlcnMoJyhiIDEwKScsICcoYiAxMCknKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0t LS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1iZXJzKCco YiAxMCknLCAnKGIgNSknKSBBUyByZXN1bHQ7CkBAIC0yNjIsNyArMjYyLDcgQEAgU0VMRUNUIHRl c3RfYm1zX2RlbF9tZW1iZXJzKCcoYiA1KScsIE5VTEwpIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0 X2Jtc19kZWxfbWVtYmVycyhOVUxMLCAnKGIgNSknKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0t LS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogLS0gYm1zX2pvaW4oKQpAQCAtMzE5LDcgKzMxOSw3 IEBAIFNFTEVDVCB0ZXN0X2Jtc19qb2luKE5VTEwsICcoYiA1KScpIEFTIHJlc3VsdDsKIFNFTEVD VCB0ZXN0X2Jtc19qb2luKE5VTEwsIE5VTEwpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0t LQotIAorIChiKQogKDEgcm93KQogCiAtLSBibXNfdW5pb24oKQpAQCAtMzQxLDcgKzM0MSw3IEBA IFNFTEVDVCB0ZXN0X2Jtc191bmlvbignKGIgMSAzIDUpJywgJyhiKScpIEFTIHJlc3VsdDsKIFNF TEVDVCB0ZXN0X2Jtc191bmlvbignKGIpJywgJyhiKScpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAt LS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiAtLSBPdmVybGFwcGluZyByYW5nZXMKQEAgLTM4 Myw3ICszODMsNyBAQCBTRUxFQ1QgdGVzdF9ibXNfdW5pb24oTlVMTCwgJyhiIDUpJykgQVMgcmVz dWx0OwogU0VMRUNUIHRlc3RfYm1zX3VuaW9uKE5VTEwsIE5VTEwpIEFTIHJlc3VsdDsKICByZXN1 bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiAtLSBibXNfaW50ZXJzZWN0KCkKQEAg LTM5OCwxNCArMzk4LDE0IEBAIFNFTEVDVCB0ZXN0X2Jtc19pbnRlcnNlY3QoJyhiIDEgMyA1KScs ICcoYiAzIDUgNyknKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfaW50ZXJzZWN0KCcoYiAx IDMgNSknLCAnKGIgMiA0IDYpJykgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisg KGIpCiAoMSByb3cpCiAKIC0tIEludGVyc2VjdCB3aXRoIGVtcHR5CiBTRUxFQ1QgdGVzdF9ibXNf aW50ZXJzZWN0KCcoYiAxIDMgNSknLCAnKGIpJykgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0t LS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIC0tIEludGVyc2VjdCB3aXRoIHZhcnJ5aW5nIHdvcmQg Y291bnRzCkBAIC00MjUsMjUgKzQyNSwyNSBAQCBTRUxFQ1QgdGVzdF9ibXNfaW50ZXJzZWN0KCco YiAxIDIgMyA0IDUpJywgJyhiIDEgMzAwKScpIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jtc19p bnRlcnNlY3QoJyhiIDEpJywgJyhiIDIpJykgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0t Ci0gCisgKGIpCiAoMSByb3cpCiAKIFNFTEVDVCB0ZXN0X2Jtc19pbnRlcnNlY3QoJyhiIDUpJywg TlVMTCkgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAK IFNFTEVDVCB0ZXN0X2Jtc19pbnRlcnNlY3QoTlVMTCwgJyhiIDUpJykgQVMgcmVzdWx0OwogIHJl c3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIFNFTEVDVCB0ZXN0X2Jtc19pbnRl cnNlY3QoTlVMTCwgTlVMTCkgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIp CiAoMSByb3cpCiAKIC0tIGJtc19pbnRfbWVtYmVycygpCkBAIC00NTgsMTQgKzQ1OCwxNCBAQCBT RUxFQ1QgdGVzdF9ibXNfaW50X21lbWJlcnMoJyhiIDEgMyA1KScsICcoYiAzIDUgNyknKSBBUyBy ZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfaW50X21lbWJlcnMoJyhiIDEgMyA1KScsICcoYiAyIDQg NiknKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAog LS0gSW50ZXJzZWN0IHdpdGggZW1wdHkKIFNFTEVDVCB0ZXN0X2Jtc19pbnRfbWVtYmVycygnKGIg MSAzIDUpJywgJyhiKScpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQog KDEgcm93KQogCiAtLSBNdWx0aXBsZSBtZW1iZXJzCkBAIC00NzksMjUgKzQ3OSwyNSBAQCBTRUxF Q1QgdGVzdF9ibXNfaW50X21lbWJlcnMoJyhiIDAgMzEgMzIgNjMgNjQpJywgJyhiIDMxIDMyIDY0 IDY1KScpIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jtc19pbnRfbWVtYmVycygnKGIgMSknLCAn KGIgMiknKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykK IAogU0VMRUNUIHRlc3RfYm1zX2ludF9tZW1iZXJzKCcoYiA1KScsIE5VTEwpIEFTIHJlc3VsdDsK ICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9ibXNf aW50X21lbWJlcnMoTlVMTCwgJyhiIDUpJykgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0t Ci0gCisgKGIpCiAoMSByb3cpCiAKIFNFTEVDVCB0ZXN0X2Jtc19pbnRfbWVtYmVycyhOVUxMLCBO VUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAog LS0gYm1zX2RpZmZlcmVuY2UoKQpAQCAtNTE5LDE0ICs1MTksMTQgQEAgU0VMRUNUIHRlc3RfYm1z X2RpZmZlcmVuY2UoJyhiIDEgMyA1KScsICcoYiAyIDQgNiknKSBBUyByZXN1bHQ7CiBTRUxFQ1Qg dGVzdF9ibXNfZGlmZmVyZW5jZSgnKGIgMSAzIDUpJywgJyhiIDEgMyA1KScpIEFTIHJlc3VsdDsK ICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiAtLSBTdWJzdHJhY3Rpb24g dG8gZW1wdHkKIFNFTEVDVCB0ZXN0X2Jtc19kaWZmZXJlbmNlKCcoYiA0MiknLCAnKGIgNDIpJykg QVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIC0tIFN1 YnRyYWN0aW9uIGVkZ2UgY2FzZQpAQCAtNTU2LDcgKzU1Niw3IEBAIFNFTEVDVCB0ZXN0X2Jtc19k aWZmZXJlbmNlKCcoYiAxIDIgMTAwIDIwMCknLCAnKGIgMSAyKScpIEFTIHJlc3VsdDsKIFNFTEVD VCB0ZXN0X2Jtc19kaWZmZXJlbmNlKCcoYiA1KScsICcoYiA1IDEwKScpIEFTIHJlc3VsdDsKICBy ZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9ibXNfZGlm ZmVyZW5jZSgnKGIgNSknLCBOVUxMKSBBUyByZXN1bHQ7CkBAIC01NjgsMTMgKzU2OCwxMyBAQCBT RUxFQ1QgdGVzdF9ibXNfZGlmZmVyZW5jZSgnKGIgNSknLCBOVUxMKSBBUyByZXN1bHQ7CiBTRUxF Q1QgdGVzdF9ibXNfZGlmZmVyZW5jZShOVUxMLCAnKGIgNSknKSBBUyByZXN1bHQ7CiAgcmVzdWx0 IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX2RpZmZlcmVu Y2UoTlVMTCwgTlVMTCkgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAo MSByb3cpCiAKIC0tIGJtc19pc19tZW1iZXIoKQpAQCAtODg3LDE5ICs4ODcsMTkgQEAgU0VMRUNU IGxlbmd0aCh0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhiIDEgMiknLCAyMDAsIDI1MCkpIEFTIHJlc3Vs dDsKIFNFTEVDVCB0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhiIDUpJywgNSwgTlVMTCkgQVMgcmVzdWx0 OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIgNSkKICgxIHJvdykKIAogU0VMRUNUIHRlc3Rf Ym1zX2FkZF9yYW5nZSgnKGIgNSknLCBOVUxMLCAxMCkgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0t LS0tLS0tCi0gCisgKGIgNSkKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX2FkZF9yYW5nZSgn KGIgNSknLCBOVUxMLCBOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAo YiA1KQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9ibXNfYWRkX3JhbmdlKE5VTEwsIDUsIDEwKSBB UyByZXN1bHQ7CkBAIC05MTEsMTMgKzkxMSwxMyBAQCBTRUxFQ1QgdGVzdF9ibXNfYWRkX3Jhbmdl KE5VTEwsIDUsIDEwKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfYWRkX3JhbmdlKE5VTEws IDEwLCA1KSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykK IAogU0VMRUNUIHRlc3RfYm1zX2FkZF9yYW5nZShOVUxMLCBOVUxMLCBOVUxMKSBBUyByZXN1bHQ7 CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogLS0gYm1zX21lbWJlcnNo aXAoKQpAQCAtMTQyMSw3ICsxNDIxLDcgQEAgU0VMRUNUIHRlc3RfYm1zX3N1YnNldF9jb21wYXJl KE5VTEwsIE5VTEwpIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jtc19jb3B5KE5VTEwpIEFTIHJl c3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiBTRUxFQ1QgdGVz dF9ibXNfY29weSgnKGIgMSAzIDUgNyknKSBBUyByZXN1bHQ7CkBAIC0xNDM0LDcgKzE0MzQsNyBA QCBTRUxFQ1QgdGVzdF9ibXNfY29weSgnKGIgMSAzIDUgNyknKSBBUyByZXN1bHQ7CiBTRUxFQ1Qg dGVzdF9ibXNfY29weShOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAo YikKICgxIHJvdykKIAogLS0gYm1zX2FkZF9tZW1iZXJzKCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuYyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuYwppbmRleCAyZTgyMTMyMDgzNi4uOTNk ODMxMDVjMmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVz dF9iaXRtYXBzZXQuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3Rf Yml0bWFwc2V0LmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0Lmgi CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAu aCIKLSNpbmNsdWRlICJ2YXJhdHQuaCIKIAogUEdfTU9EVUxFX01BR0lDOwogCkBAIC04NCw4ICs4 MywxMCBAQCBQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfcmFuZG9tX29wZXJhdGlvbnMpOwogCQkJ CSAjZXhwciwgX19GSUxFX18sIF9fTElORV9fKTsgXAogCX0gd2hpbGUgKDApCiAKK3N0YXRpYyBj b25zdCBjaGFyICplbXB0eSA9ICIoYikiOworCiAvKiBFbmNvZGUvRGVjb2RlIHRvL2Zyb20gVEVY VCBhbmQgQml0bWFwc2V0ICovCi0jZGVmaW5lIEJJVE1BUFNFVF9UT19URVhUKGJtcykgY3N0cmlu Z190b190ZXh0KG5vZGVUb1N0cmluZyhibXMpKQorI2RlZmluZSBCSVRNQVBTRVRfVE9fVEVYVChi bXMpIGNzdHJpbmdfdG9fdGV4dChibXMgPyBub2RlVG9TdHJpbmcoYm1zKSA6IGVtcHR5KQogI2Rl ZmluZSBURVhUX1RPX0JJVE1BUFNFVChzdHIpICgoQml0bWFwc2V0ICopIHN0cmluZ1RvTm9kZSh0 ZXh0X3RvX2NzdHJpbmcoc3RyKSkpCiAKIC8qCkBAIC0xMDAsNyArMTAxLDcgQEAgdGVzdF9ibXNf YWRkX21lbWJlcihQR19GVU5DVElPTl9BUkdTKQogCXRleHQJICAgKnJlc3VsdDsKIAogCWlmIChQ R19BUkdJU05VTEwoMSkpCi0JCVBHX1JFVFVSTl9OVUxMKCk7CisJCVBHX1JFVFVSTl9URVhUX1Ao UEdfR0VUQVJHX1RFWFRfUFAoMCkpOwogCiAJaWYgKCFQR19BUkdJU05VTEwoMCkpCiAJCWJtcyA9 IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKQEAgLTEwOSw4ICsxMTAs NyBAQCB0ZXN0X2Jtc19hZGRfbWVtYmVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYm1zID0gYm1zX2Fk ZF9tZW1iZXIoYm1zLCBtZW1iZXIpOwogCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19URVhUKGJtcyk7 CiAKLQlpZiAoYm1zKQotCQlibXNfZnJlZShibXMpOworCWJtc19mcmVlKGJtcyk7CiAKIAlQR19S RVRVUk5fVEVYVF9QKHJlc3VsdCk7CiB9CkBAIC0xMzEsOCArMTMxLDcgQEAgdGVzdF9ibXNfYWRk X21lbWJlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAkvKiBJTVBPUlRBTlQ6IGJtc19hZGRfbWVtYmVy cyBtb2RpZmllcy9mcmVlcyB0aGUgZmlyc3QgYXJndW1lbnQgKi8KIAlibXMxID0gYm1zX2FkZF9t ZW1iZXJzKGJtczEsIGJtczIpOwogCi0JaWYgKGJtczIpCi0JCWJtc19mcmVlKGJtczIpOworCWJt c19mcmVlKGJtczIpOwogCiAJcmVzdWx0ID0gQklUTUFQU0VUX1RPX1RFWFQoYm1zMSk7CiAJYm1z X2ZyZWUoYm1zMSk7CkBAIC0xNDgsNyArMTQ3LDcgQEAgdGVzdF9ibXNfZGVsX21lbWJlcihQR19G VU5DVElPTl9BUkdTKQogCXRleHQJICAgKnJlc3VsdDsKIAogCWlmIChQR19BUkdJU05VTEwoMSkp Ci0JCVBHX1JFVFVSTl9OVUxMKCk7CisJCVBHX1JFVFVSTl9URVhUX1AoUEdfR0VUQVJHX1RFWFRf UFAoMCkpOwogCiAJaWYgKCFQR19BUkdJU05VTEwoMCkpCiAJCWJtcyA9IFRFWFRfVE9fQklUTUFQ U0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKQEAgLTE1Niw5ICsxNTUsNiBAQCB0ZXN0X2Jtc19k ZWxfbWVtYmVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEp OwogCWJtcyA9IGJtc19kZWxfbWVtYmVyKGJtcywgbWVtYmVyKTsKIAotCWlmIChibXNfaXNfZW1w dHkoYm1zKSkKLQkJUEdfUkVUVVJOX05VTEwoKTsKLQogCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19U RVhUKGJtcyk7CiAJYm1zX2ZyZWUoYm1zKTsKIApAQCAtMTgxLDggKzE3Nyw3IEBAIHRlc3RfYm1z X2lzX21lbWJlcihQR19GVU5DVElPTl9BUkdTKQogCW1lbWJlciA9IFBHX0dFVEFSR19JTlQzMigx KTsKIAlyZXN1bHQgPSBibXNfaXNfbWVtYmVyKG1lbWJlciwgYm1zKTsKIAotCWlmIChibXMpCi0J CWJtc19mcmVlKGJtcyk7CisJYm1zX2ZyZWUoYm1zKTsKIAogCVBHX1JFVFVSTl9CT09MKHJlc3Vs dCk7CiB9CkBAIC0xOTgsOCArMTkzLDcgQEAgdGVzdF9ibXNfbnVtX21lbWJlcnMoUEdfRlVOQ1RJ T05fQVJHUykKIAogCXJlc3VsdCA9IGJtc19udW1fbWVtYmVycyhibXMpOwogCi0JaWYgKGJtcykK LQkJYm1zX2ZyZWUoYm1zKTsKKwlibXNfZnJlZShibXMpOwogCiAJUEdfUkVUVVJOX0lOVDMyKHJl c3VsdCk7CiB9CkBAIC0yMTIsNyArMjA2LDcgQEAgdGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oUEdf RlVOQ1RJT05fQVJHUykKIAl0ZXh0CSAgICpyZXN1bHQ7CiAKIAlpZiAoUEdfQVJHSVNOVUxMKDAp KQotCQlQR19SRVRVUk5fTlVMTCgpOworCQlQR19SRVRVUk5fVEVYVF9QKEJJVE1BUFNFVF9UT19U RVhUKE5VTEwpKTsKIAogCW1lbWJlciA9IFBHX0dFVEFSR19JTlQzMigwKTsKIAlibXMgPSBibXNf bWFrZV9zaW5nbGV0b24obWVtYmVyKTsKQEAgLTIyNiwyMyArMjIwLDE4IEBAIHRlc3RfYm1zX21h a2Vfc2luZ2xldG9uKFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1bQogdGVzdF9ibXNfY29weShQR19G VU5DVElPTl9BUkdTKQogewotCXRleHQJICAgKmJtc19kYXRhOwogCUJpdG1hcHNldCAgKmJtcyA9 IE5VTEw7CiAJQml0bWFwc2V0ICAqY29weV9ibXM7CiAJdGV4dAkgICAqcmVzdWx0OwogCi0JaWYg KFBHX0FSR0lTTlVMTCgwKSkKLQkJUEdfUkVUVVJOX05VTEwoKTsKKwlpZiAoIVBHX0FSR0lTTlVM TCgwKSkKKwkJYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwog Ci0JYm1zX2RhdGEgPSBQR19HRVRBUkdfVEVYVF9QUCgwKTsKLQlibXMgPSBURVhUX1RPX0JJVE1B UFNFVChibXNfZGF0YSk7CiAJY29weV9ibXMgPSBibXNfY29weShibXMpOwogCXJlc3VsdCA9IEJJ VE1BUFNFVF9UT19URVhUKGNvcHlfYm1zKTsKIAotCWlmIChibXMpCi0JCWJtc19mcmVlKGJtcyk7 Ci0JaWYgKGNvcHlfYm1zKQotCQlibXNfZnJlZShjb3B5X2Jtcyk7CisJYm1zX2ZyZWUoYm1zKTsK KwlibXNfZnJlZShjb3B5X2Jtcyk7CiAKIAlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7CiB9CkBA IC0yNjIsMTAgKzI1MSw4IEBAIHRlc3RfYm1zX2VxdWFsKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAly ZXN1bHQgPSBibXNfZXF1YWwoYm1zMSwgYm1zMik7CiAKLQlpZiAoYm1zMSkKLQkJYm1zX2ZyZWUo Ym1zMSk7Ci0JaWYgKGJtczIpCi0JCWJtc19mcmVlKGJtczIpOworCWJtc19mcmVlKGJtczEpOwor CWJtc19mcmVlKGJtczIpOwogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKIH0KQEAgLTI4Niwx MyArMjczLDggQEAgdGVzdF9ibXNfdW5pb24oUEdfRlVOQ1RJT05fQVJHUykKIAogCXJlc3VsdF9i bXMgPSBibXNfdW5pb24oYm1zMSwgYm1zMik7CiAKLQlpZiAoYm1zMSkKLQkJYm1zX2ZyZWUoYm1z MSk7Ci0JaWYgKGJtczIpCi0JCWJtc19mcmVlKGJtczIpOwotCi0JaWYgKHJlc3VsdF9ibXMgPT0g TlVMTCkKLQkJUEdfUkVUVVJOX05VTEwoKTsKKwlibXNfZnJlZShibXMxKTsKKwlibXNfZnJlZShi bXMyKTsKIAogCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19URVhUKHJlc3VsdF9ibXMpOwogCWJtc19m cmVlKHJlc3VsdF9ibXMpOwpAQCAtMzA2LDE0ICsyODgsMTIgQEAgdGVzdF9ibXNfbWVtYmVyc2hp cChQR19GVU5DVElPTl9BUkdTKQogCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CiAJQk1TX01lbWJl cnNoaXAgcmVzdWx0OwogCi0JaWYgKFBHX0FSR0lTTlVMTCgwKSkKLQkJUEdfUkVUVVJOX0lOVDMy KEJNU19FTVBUWV9TRVQpOworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMgPSBURVhUX1RP X0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CiAKLQlibXMgPSBURVhUX1RPX0JJVE1B UFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CiAJcmVzdWx0ID0gYm1zX21lbWJlcnNoaXAoYm1z KTsKIAotCWlmIChibXMpCi0JCWJtc19mcmVlKGJtcyk7CisJYm1zX2ZyZWUoYm1zKTsKIAogCVBH X1JFVFVSTl9JTlQzMigoaW50MzIpIHJlc3VsdCk7CiB9CkBAIC0zMjUsMTUgKzMwNSwxNyBAQCB0 ZXN0X2Jtc19uZXh0X21lbWJlcihQR19GVU5DVElPTl9BUkdTKQogCWludDMyCQlwcmV2bWVtYmVy OwogCWludAkJCXJlc3VsdDsKIAotCWlmIChQR19BUkdJU05VTEwoMCkgfHwgUEdfQVJHSVNOVUxM KDEpKQorCWlmIChQR19BUkdJU05VTEwoMSkpCiAJCVBHX1JFVFVSTl9JTlQzMigtMik7CiAKLQli bXMgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CiAJcHJldm1lbWJl ciA9IFBHX0dFVEFSR19JTlQzMigxKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMg PSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisKIAlyZXN1bHQgPSBi bXNfbmV4dF9tZW1iZXIoYm1zLCBwcmV2bWVtYmVyKTsKIAotCWlmIChibXMpCi0JCWJtc19mcmVl KGJtcyk7CisJYm1zX2ZyZWUoYm1zKTsKIAogCVBHX1JFVFVSTl9JTlQzMihyZXN1bHQpOwogfQpA QCAtMzU0LDEzICszMzYsOCBAQCB0ZXN0X2Jtc19pbnRlcnNlY3QoUEdfRlVOQ1RJT05fQVJHUykK IAogCXJlc3VsdF9ibXMgPSBibXNfaW50ZXJzZWN0KGJtczEsIGJtczIpOwogCi0JaWYgKGJtczEp Ci0JCWJtc19mcmVlKGJtczEpOwotCWlmIChibXMyKQotCQlibXNfZnJlZShibXMyKTsKLQotCWlm IChyZXN1bHRfYm1zID09IE5VTEwpCi0JCVBHX1JFVFVSTl9OVUxMKCk7CisJYm1zX2ZyZWUoYm1z MSk7CisJYm1zX2ZyZWUoYm1zMik7CiAKIAlyZXN1bHQgPSBCSVRNQVBTRVRfVE9fVEVYVChyZXN1 bHRfYm1zKTsKIAlibXNfZnJlZShyZXN1bHRfYm1zKTsKQEAgLTM4NCwxMyArMzYxLDggQEAgdGVz dF9ibXNfZGlmZmVyZW5jZShQR19GVU5DVElPTl9BUkdTKQogCiAJcmVzdWx0X2JtcyA9IGJtc19k aWZmZXJlbmNlKGJtczEsIGJtczIpOwogCi0JaWYgKGJtczEpCi0JCWJtc19mcmVlKGJtczEpOwot CWlmIChibXMyKQotCQlibXNfZnJlZShibXMyKTsKLQotCWlmIChyZXN1bHRfYm1zID09IE5VTEwp Ci0JCVBHX1JFVFVSTl9OVUxMKCk7CisJYm1zX2ZyZWUoYm1zMSk7CisJYm1zX2ZyZWUoYm1zMik7 CiAKIAlyZXN1bHQgPSBCSVRNQVBTRVRfVE9fVEVYVChyZXN1bHRfYm1zKTsKIAlibXNfZnJlZShy ZXN1bHRfYm1zKTsKQEAgLTQxMywxMCArMzg1LDggQEAgdGVzdF9ibXNfY29tcGFyZShQR19GVU5D VElPTl9BUkdTKQogCiAJcmVzdWx0ID0gYm1zX2NvbXBhcmUoYm1zMSwgYm1zMik7CiAKLQlpZiAo Ym1zMSkKLQkJYm1zX2ZyZWUoYm1zMSk7Ci0JaWYgKGJtczIpCi0JCWJtc19mcmVlKGJtczIpOwor CWJtc19mcmVlKGJtczEpOworCWJtc19mcmVlKGJtczIpOwogCiAJUEdfUkVUVVJOX0lOVDMyKHJl c3VsdCk7CiB9CkBAIC00MzIsOCArNDAyLDcgQEAgdGVzdF9ibXNfaXNfZW1wdHkoUEdfRlVOQ1RJ T05fQVJHUykKIAogCXJlc3VsdCA9IGJtc19pc19lbXB0eShibXMpOwogCi0JaWYgKGJtcykKLQkJ Ym1zX2ZyZWUoYm1zKTsKKwlibXNfZnJlZShibXMpOwogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0 KTsKIH0KQEAgLTQ1MywxMCArNDIyLDggQEAgdGVzdF9ibXNfaXNfc3Vic2V0KFBHX0ZVTkNUSU9O X0FSR1MpCiAKIAlyZXN1bHQgPSBibXNfaXNfc3Vic2V0KGJtczEsIGJtczIpOwogCi0JaWYgKGJt czEpCi0JCWJtc19mcmVlKGJtczEpOwotCWlmIChibXMyKQotCQlibXNfZnJlZShibXMyKTsKKwli bXNfZnJlZShibXMxKTsKKwlibXNfZnJlZShibXMyKTsKIAogCVBHX1JFVFVSTl9CT09MKHJlc3Vs dCk7CiB9CkBAIC00NzYsMTAgKzQ0Myw4IEBAIHRlc3RfYm1zX3N1YnNldF9jb21wYXJlKFBHX0ZV TkNUSU9OX0FSR1MpCiAKIAlyZXN1bHQgPSBibXNfc3Vic2V0X2NvbXBhcmUoYm1zMSwgYm1zMik7 CiAKLQlpZiAoYm1zMSkKLQkJYm1zX2ZyZWUoYm1zMSk7Ci0JaWYgKGJtczIpCi0JCWJtc19mcmVl KGJtczIpOworCWJtc19mcmVlKGJtczEpOworCWJtc19mcmVlKGJtczIpOwogCiAJUEdfUkVUVVJO X0lOVDMyKChpbnQzMikgcmVzdWx0KTsKIH0KQEAgLTQ5NSw4ICs0NjAsNyBAQCB0ZXN0X2Jtc19z aW5nbGV0b25fbWVtYmVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlyZXN1bHQgPSBibXNfc2luZ2xl dG9uX21lbWJlcihibXMpOwogCi0JaWYgKGJtcykKLQkJYm1zX2ZyZWUoYm1zKTsKKwlibXNfZnJl ZShibXMpOwogCiAJUEdfUkVUVVJOX0lOVDMyKHJlc3VsdCk7CiB9CkBAIC01MDUsNDYgKzQ2OSwz OCBAQCBEYXR1bQogdGVzdF9ibXNfZ2V0X3NpbmdsZXRvbl9tZW1iZXIoUEdfRlVOQ1RJT05fQVJH UykKIHsKIAlCaXRtYXBzZXQgICpibXMgPSBOVUxMOwotCWludDMyCQlkZWZhdWx0X21lbWJlciA9 IFBHX0dFVEFSR19JTlQzMigxKTsKLQlib29sCQlzdWNjZXNzOwogCWludAkJCW1lbWJlciA9IC0x OwogCi0JaWYgKFBHX0FSR0lTTlVMTCgwKSkKLQkJUEdfUkVUVVJOX0lOVDMyKGRlZmF1bHRfbWVt YmVyKTsKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMy KDEpOwogCi0JYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwor CWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRB UkdfVEVYVF9QUCgwKSk7CiAKIAkvKgogCSAqIGJtc19nZXRfc2luZ2xldG9uX21lbWJlciByZXR1 cm5zIGJvb2wgYW5kIHN0b3JlcyByZXN1bHQgaW4gbWVtYmVyCi0JICogcG9pbnRlcgorCSAqIHBv aW50ZXIsIHdlIGRvbid0IGNoYW5nZSB0aGUgdmFsdWUgb2YgbWVtYmVyIHdoZW4gc3VwcGxpZWQg c28gd2UgaWdub3JlCisJICogdGhlIHJldHVybiB2YWx1ZS4KIAkgKi8KLQlzdWNjZXNzID0gYm1z X2dldF9zaW5nbGV0b25fbWVtYmVyKGJtcywgJm1lbWJlcik7CisJKHZvaWQpIGJtc19nZXRfc2lu Z2xldG9uX21lbWJlcihibXMsICZtZW1iZXIpOwogCWJtc19mcmVlKGJtcyk7CiAKLQlpZiAoc3Vj Y2VzcykKLQkJUEdfUkVUVVJOX0lOVDMyKG1lbWJlcik7Ci0KLQlQR19SRVRVUk5fSU5UMzIoZGVm YXVsdF9tZW1iZXIpOworCVBHX1JFVFVSTl9JTlQzMihtZW1iZXIpOwogfQogCiBEYXR1bQogdGVz dF9ibXNfcHJldl9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQl0ZXh0CSAgICpibXNfZGF0 YTsKIAlCaXRtYXBzZXQgICpibXMgPSBOVUxMOwotCWludDMyCQlwcmV2bWVtYmVyOworCWludDMy CQlwcmV2bWVtYmVyID0gMDsKIAlpbnQJCQlyZXN1bHQ7CiAKLQlpZiAoUEdfQVJHSVNOVUxMKDAp KQotCQlQR19SRVRVUk5fSU5UMzIoLTIpOwotCi0JYm1zX2RhdGEgPSBQR19HRVRBUkdfVEVYVF9Q UCgwKTsKLQlwcmV2bWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCWlmICghUEdfQVJHSVNO VUxMKDApKQorCQlibXMgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7 CiAKLQlpZiAoVkFSU0laRV9BTllfRVhIRFIoYm1zX2RhdGEpID09IDApCi0JCVBHX1JFVFVSTl9J TlQzMigtMik7CisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJCXByZXZtZW1iZXIgPSBQR19HRVRB UkdfSU5UMzIoMSk7CiAKLQlibXMgPSBURVhUX1RPX0JJVE1BUFNFVChibXNfZGF0YSk7CiAJcmVz dWx0ID0gYm1zX3ByZXZfbWVtYmVyKGJtcywgcHJldm1lbWJlcik7CiAJYm1zX2ZyZWUoYm1zKTsK IApAQCAtNTY2LDEwICs1MjIsOCBAQCB0ZXN0X2Jtc19vdmVybGFwKFBHX0ZVTkNUSU9OX0FSR1Mp CiAKIAlyZXN1bHQgPSBibXNfb3ZlcmxhcChibXMxLCBibXMyKTsKIAotCWlmIChibXMxKQotCQli bXNfZnJlZShibXMxKTsKLQlpZiAoYm1zMikKLQkJYm1zX2ZyZWUoYm1zMik7CisJYm1zX2ZyZWUo Ym1zMSk7CisJYm1zX2ZyZWUoYm1zMik7CiAKIAlQR19SRVRVUk5fQk9PTChyZXN1bHQpOwogfQpA QCAtNTgxLDQ4ICs1MzUsNDQgQEAgdGVzdF9ibXNfb3ZlcmxhcF9saXN0KFBHX0ZVTkNUSU9OX0FS R1MpCiAJQXJyYXlUeXBlICAqYXJyYXk7CiAJTGlzdAkgICAqaW50X2xpc3QgPSBOSUw7CiAJYm9v bAkJcmVzdWx0OwotCURhdHVtCSAgICplbGVtX2RhdHVtczsKLQlib29sCSAgICplbGVtX251bGxz OworCURhdHVtCSAgICplbGVtX2RhdHVtcyA9IE5VTEw7CisJYm9vbAkgICAqZWxlbV9udWxscyA9 IE5VTEw7CiAJaW50CQkJZWxlbV9jb3VudDsKIAlpbnQJCQlpOwogCi0JaWYgKFBHX0FSR0lTTlVM TCgwKSkKLQkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwotCi0JYm1zID0gVEVYVF9UT19CSVRNQVBT RVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMg PSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CiAKLQlpZiAoUEdfQVJH SVNOVUxMKDEpKQorCWlmICghUEdfQVJHSVNOVUxMKDEpKQogCXsKLQkJaWYgKGJtcykKLQkJCWJt c19mcmVlKGJtcyk7Ci0JCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKLQl9Ci0KLQlhcnJheSA9IFBH X0dFVEFSR19BUlJBWVRZUEVfUCgxKTsKKwkJYXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1Ao MSk7CiAKLQlkZWNvbnN0cnVjdF9hcnJheShhcnJheSwKLQkJCQkJICBJTlQ0T0lELCBzaXplb2Yo aW50MzIpLCB0cnVlLCAnaScsCi0JCQkJCSAgJmVsZW1fZGF0dW1zLCAmZWxlbV9udWxscywgJmVs ZW1fY291bnQpOworCQlkZWNvbnN0cnVjdF9hcnJheShhcnJheSwKKwkJCQkJCSAgSU5UNE9JRCwg c2l6ZW9mKGludDMyKSwgdHJ1ZSwgJ2knLAorCQkJCQkJICAmZWxlbV9kYXR1bXMsICZlbGVtX251 bGxzLCAmZWxlbV9jb3VudCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZWxlbV9jb3VudDsgaSsrKQot CXsKLQkJaWYgKCFlbGVtX251bGxzW2ldKQorCQlmb3IgKGkgPSAwOyBpIDwgZWxlbV9jb3VudDsg aSsrKQogCQl7Ci0JCQlpbnQzMgkJbWVtYmVyID0gRGF0dW1HZXRJbnQzMihlbGVtX2RhdHVtc1tp XSk7CisJCQlpZiAoIWVsZW1fbnVsbHNbaV0pCisJCQl7CisJCQkJaW50MzIJCW1lbWJlciA9IERh dHVtR2V0SW50MzIoZWxlbV9kYXR1bXNbaV0pOwogCi0JCQlpbnRfbGlzdCA9IGxhcHBlbmRfaW50 KGludF9saXN0LCBtZW1iZXIpOworCQkJCWludF9saXN0ID0gbGFwcGVuZF9pbnQoaW50X2xpc3Qs IG1lbWJlcik7CisJCQl9CiAJCX0KIAl9CiAKIAlyZXN1bHQgPSBibXNfb3ZlcmxhcF9saXN0KGJt cywgaW50X2xpc3QpOwogCi0JaWYgKGJtcykKLQkJYm1zX2ZyZWUoYm1zKTsKKwlibXNfZnJlZShi bXMpOwogCiAJbGlzdF9mcmVlKGludF9saXN0KTsKIAotCXBmcmVlKGVsZW1fZGF0dW1zKTsKLQlw ZnJlZShlbGVtX251bGxzKTsKKwlpZiAoZWxlbV9kYXR1bXMpCisJCXBmcmVlKGVsZW1fZGF0dW1z KTsKKworCWlmIChlbGVtX251bGxzKQorCQlwZnJlZShlbGVtX251bGxzKTsKIAogCVBHX1JFVFVS Tl9CT09MKHJlc3VsdCk7CiB9CkBAIC02NDIsMTAgKzU5Miw4IEBAIHRlc3RfYm1zX25vbmVtcHR5 X2RpZmZlcmVuY2UoUEdfRlVOQ1RJT05fQVJHUykKIAogCXJlc3VsdCA9IGJtc19ub25lbXB0eV9k aWZmZXJlbmNlKGJtczEsIGJtczIpOwogCi0JaWYgKGJtczEpCi0JCWJtc19mcmVlKGJtczEpOwot CWlmIChibXMyKQotCQlibXNfZnJlZShibXMyKTsKKwlibXNfZnJlZShibXMxKTsKKwlibXNfZnJl ZShibXMyKTsKIAogCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7CiB9CkBAIC02NTMsMjEgKzYwMSwx NSBAQCB0ZXN0X2Jtc19ub25lbXB0eV9kaWZmZXJlbmNlKFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1 bQogdGVzdF9ibXNfbWVtYmVyX2luZGV4KFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JdGV4dAkgICAq Ym1zX2RhdGE7CiAJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKLQlpbnQzMgkJbWVtYmVyOworCWlu dDMyCQltZW1iZXIgPSAtMTsKIAlpbnQJCQlyZXN1bHQ7CiAKLQlpZiAoUEdfQVJHSVNOVUxMKDAp KQotCQlQR19SRVRVUk5fSU5UMzIoLTEpOwotCi0JYm1zX2RhdGEgPSBQR19HRVRBUkdfVEVYVF9Q UCgwKTsKLQltZW1iZXIgPSBQR19HRVRBUkdfSU5UMzIoMSk7Ci0KLQlpZiAoVkFSU0laRV9BTllf RVhIRFIoYm1zX2RhdGEpID09IDApCi0JCVBHX1JFVFVSTl9JTlQzMigtMSk7CisJaWYgKCFQR19B UkdJU05VTEwoMCkpCisJCWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQ KDApKTsKIAotCWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKGJtc19kYXRhKTsKKwlpZiAoIVBHX0FS R0lTTlVMTCgxKSkKKwkJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOwogCiAJcmVzdWx0ID0g Ym1zX21lbWJlcl9pbmRleChibXMsIG1lbWJlcik7CiAJYm1zX2ZyZWUoYm1zKTsKQEAgLTY4Mywy OCArNjI1LDIyIEBAIHRlc3RfYm1zX2FkZF9yYW5nZShQR19GVU5DVElPTl9BUkdTKQogCQkJCXVw cGVyOwogCXRleHQJICAgKnJlc3VsdDsKIAotCWlmIChQR19BUkdJU05VTEwoMSkgfHwgUEdfQVJH SVNOVUxMKDIpKQotCQlQR19SRVRVUk5fTlVMTCgpOworCWxvd2VyID0gdXBwZXIgPSAwOwogCi0J aWYgKCFQR19BUkdJU05VTEwoMCkpCi0JCWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFS R19URVhUX1BQKDApKTsKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJbG93ZXIgPSBQR19HRVRB UkdfSU5UMzIoMSk7CiAKLQlsb3dlciA9IFBHX0dFVEFSR19JTlQzMigxKTsKLQl1cHBlciA9IFBH X0dFVEFSR19JTlQzMigyKTsKKwlpZiAoIVBHX0FSR0lTTlVMTCgyKSkKKwkJdXBwZXIgPSBQR19H RVRBUkdfSU5UMzIoMik7CiAKLQkvKiBDaGVjayBmb3IgaW52YWxpZCByYW5nZSAqLwotCWlmICh1 cHBlciA8IGxvd2VyKQotCXsKLQkJaWYgKGJtcykKLQkJCWJtc19mcmVlKGJtcyk7Ci0JCVBHX1JF VFVSTl9OVUxMKCk7Ci0JfQorCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMgPSBURVhUX1RP X0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CiAKLQlibXMgPSBibXNfYWRkX3Jhbmdl KGJtcywgbG93ZXIsIHVwcGVyKTsKKwlpZiAoIShQR19BUkdJU05VTEwoMSkgfHwgUEdfQVJHSVNO VUxMKDIpKSkKKwkJYm1zID0gYm1zX2FkZF9yYW5nZShibXMsIGxvd2VyLCB1cHBlcik7CiAKIAly ZXN1bHQgPSBCSVRNQVBTRVRfVE9fVEVYVChibXMpOwotCWlmIChibXMpCi0JCWJtc19mcmVlKGJt cyk7CisJYm1zX2ZyZWUoYm1zKTsKIAogCVBHX1JFVFVSTl9URVhUX1AocmVzdWx0KTsKIH0KQEAg LTcyNCwxNiArNjYwLDExIEBAIHRlc3RfYm1zX2ludF9tZW1iZXJzKFBHX0ZVTkNUSU9OX0FSR1Mp CiAKIAlibXMxID0gYm1zX2ludF9tZW1iZXJzKGJtczEsIGJtczIpOwogCi0JaWYgKGJtczIpCi0J CWJtc19mcmVlKGJtczIpOwotCi0JaWYgKGJtczEgPT0gTlVMTCkKLQkJUEdfUkVUVVJOX05VTEwo KTsKKwlibXNfZnJlZShibXMyKTsKIAogCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19URVhUKGJtczEp OwogCi0JaWYgKGJtczEpCi0JCWJtc19mcmVlKGJtczEpOworCWJtc19mcmVlKGJtczEpOwogCiAJ UEdfUkVUVVJOX1RFWFRfUChyZXN1bHQpOwogfQpAQCAtNzU3LDExICs2ODgsNyBAQCB0ZXN0X2Jt c19kZWxfbWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQogCiAJLyogYm1zMSBpcyBub3cgaW52YWxp ZCwgZG8gbm90IGZyZWUgaXQgKi8KIAotCWlmIChibXMyKQotCQlibXNfZnJlZShibXMyKTsKLQot CWlmIChyZXN1bHRfYm1zID09IE5VTEwpCi0JCVBHX1JFVFVSTl9OVUxMKCk7CisJYm1zX2ZyZWUo Ym1zMik7CiAKIAlyZXN1bHQgPSBCSVRNQVBTRVRfVE9fVEVYVChyZXN1bHRfYm1zKTsKIAlibXNf ZnJlZShyZXN1bHRfYm1zKTsKQEAgLTc4OCwxMSArNzE1LDcgQEAgdGVzdF9ibXNfcmVwbGFjZV9t ZW1iZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkvKiBibXMxIGlzIG5vdyBpbnZhbGlkLCBkbyBu b3QgZnJlZSBpdCAqLwogCi0JaWYgKGJtczIpCi0JCWJtc19mcmVlKGJtczIpOwotCi0JaWYgKHJl c3VsdF9ibXMgPT0gTlVMTCkKLQkJUEdfUkVUVVJOX05VTEwoKTsKKwlibXNfZnJlZShibXMyKTsK IAogCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19URVhUKHJlc3VsdF9ibXMpOwogCWJtc19mcmVlKHJl c3VsdF9ibXMpOwpAQCAtODE5LDkgKzc0Miw2IEBAIHRlc3RfYm1zX2pvaW4oUEdfRlVOQ1RJT05f QVJHUykKIAogCS8qIGJtczEgYW5kIGJtczIgbWF5IGhhdmUgYmVlbiByZWN5Y2xlZCEgRG8gbm90 IGZyZWUgYW55IG9mIHRoZW0uICovCiAKLQlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQotCQlQR19S RVRVUk5fTlVMTCgpOwotCiAJcmVzdWx0ID0gQklUTUFQU0VUX1RPX1RFWFQocmVzdWx0X2Jtcyk7 CiAJYm1zX2ZyZWUocmVzdWx0X2Jtcyk7CiAKQEAgLTgzOSw4ICs3NTksNyBAQCB0ZXN0X2Jtc19o YXNoX3ZhbHVlKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAloYXNoX3Jlc3VsdCA9IGJtc19oYXNoX3Zh bHVlKGJtcyk7CiAKLQlpZiAoYm1zKQotCQlibXNfZnJlZShibXMpOworCWJtc19mcmVlKGJtcyk7 CiAKIAlQR19SRVRVUk5fSU5UMzIoaGFzaF9yZXN1bHQpOwogfQpAQCAtODg5LDExICs4MDgsOCBA QCB0ZXN0X2JpdG1hcF9tYXRjaChQR19GVU5DVElPTl9BUkdTKQogCS8qIENhbGwgYml0bWFwX21h dGNoIHdpdGggYWRkcmVzc2VzIG9mIHRoZSBCaXRtYXBzZXQgcG9pbnRlcnMgKi8KIAltYXRjaF9y ZXN1bHQgPSBiaXRtYXBfbWF0Y2goJmJtc19wdHIxLCAmYm1zX3B0cjIsIHNpemVvZihCaXRtYXBz ZXQgKikpOwogCi0JLyogQ2xlYW4gdXAgKi8KLQlpZiAoYm1zMSkKLQkJYm1zX2ZyZWUoYm1zMSk7 Ci0JaWYgKGJtczIpCi0JCWJtc19mcmVlKGJtczIpOworCWJtc19mcmVlKGJtczEpOworCWJtc19m cmVlKGJtczIpOwogCiAJUEdfUkVUVVJOX0lOVDMyKG1hdGNoX3Jlc3VsdCk7CiB9CkBAIC0xMDMx LDggKzk0Nyw3IEBAIHRlc3RfcmFuZG9tX29wZXJhdGlvbnMoUEdfRlVOQ1RJT05fQVJHUykKIAkJ dG90YWxfb3BzKys7CiAJfQogCi0JaWYgKGJtcykKLQkJYm1zX2ZyZWUoYm1zKTsKKwlibXNfZnJl ZShibXMpOwogCiAJUEdfUkVUVVJOX0lOVDMyKHRvdGFsX29wcyk7CiB9Ci0tIAoyLjQ5LjAKCg== --68dbcf58_49a65050_147c--