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 1uyayu-00A6Y6-Gy for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Sep 2025 19:04:49 +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 1uyays-0022RA-F8 for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Sep 2025 19:04:47 +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 1uyayr-0022Qy-Qy for pgsql-hackers@lists.postgresql.org; Tue, 16 Sep 2025 19:04:46 +0000 Received: from fout-a5-smtp.messagingengine.com ([103.168.172.148]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uyayn-001B7o-2f for pgsql-hackers@lists.postgresql.org; Tue, 16 Sep 2025 19:04:46 +0000 Received: from phl-compute-08.internal (phl-compute-08.internal [10.202.2.48]) by mailfout.phl.internal (Postfix) with ESMTP id AB61AEC00D8; Tue, 16 Sep 2025 15:04:40 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-08.internal (MEProxy); Tue, 16 Sep 2025 15:04:40 -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=fm1; t=1758049480; x=1758135880; bh=aY1koeZotf qgA4W7bgtlm9iygnnPtzFiAS48jctsGQo=; b=s9AnDBVmIfElDosWn4KelOj5Mr 11WnZSQZwtyeSPLKOUFGkqwOaBdvUDjtdWsqcwZDr84/geXptqBuvtLTbKpM7MW7 GRKqTil39656evcpZ3Pj1brYmIaKMVstA+2j1JwKtTn+5MfrgyBYa8/Plj2GcpD4 oO/nFTgsdM66ijuqK4XghAbty5sS5saBqyaOEuSE5m4lfOXj9UQ69D2JMrnl56pF RNncFbK+BpwNaQyHWs2h/zlg8vMJyi8rjQ/y6wPdN6CZ4ATXRxLRZHLQui/5MsKx d4Vs9I5AFpCGH+Bucabt6LLRBgfQkDdHVeQLfy4Hs9I9UaGI2acOLXhMUvaA== 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=fm1; t= 1758049480; x=1758135880; bh=aY1koeZotfqgA4W7bgtlm9iygnnPtzFiAS4 8jctsGQo=; b=m8fzXF+WBBK+gBps8450hB1ReYwAFcXT5y13/Kup2AsPM7/Jqqv VyPkP0PvTSPv5AaTeuDuFXxKDxQ+/OoBbxXtoxYF+IM/zloyxZdUEwEbzhzNQDpr flTqcCc4Q7Ti1FT5RUt/CkjfnagY3znnRHI1rppAtKULpCkaHC7iP7s/CLPRfJSl nW7esoQ2+QltH6bsDnHSv2GZVmf5mXCVOdaSfhRCOofpAwfrNtQmReeEFsgak0oy hgOMu3FxTY+10PhfndpvUAFJFxKWBTfz0udBI4f51YOH6srQ4owaVgKSlmaODMnB tQnmNv54+hrjmjXD5/UZDyO4CkC3KfQo1LA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdegudefiecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpeffhffvvefkjghfuffogggtsehmtdhmreertdejnecuhfhrohhmpefirhgvghcuuehu rhguuceoghhrvghgsegsuhhrugdrmhgvqeenucggtffrrghtthgvrhhnpeefvdfhudelud evveegheeuhfdtuedvueeiveegieejkefggfevhfekkefhtdekheenucevlhhushhtvghr ufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehgrhgvghessghurhgurdhmvg dpnhgspghrtghpthhtohephedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepphhg shhqlhdqhhgrtghkvghrsheslhhishhtshdrphhoshhtghhrvghsqhhlrdhorhhgpdhrtg hpthhtohepnhgrthhhrghnuggsohhsshgrrhhtsehgmhgrihhlrdgtohhmpdhrtghpthht ohepshgrfigruggrrdhmshhhkhesghhmrghilhdrtghomhdprhgtphhtthhopehmihgthh grvghlsehprghquhhivghrrdighiiipdhrtghpthhtoheprhhosggvrhhtmhhhrggrshes ghhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 16 Sep 2025 15:04:40 -0400 (EDT) Date: Tue, 16 Sep 2025 15:04:39 -0400 From: Greg Burd To: PostgreSQL Hackers Cc: Nathan Bossart , Masahiko Sawada , Michael Paquier , Robert Haas Message-ID: <36B1B121-A962-4CB3-B22C-23BA4F13F8D1@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="68c9b4c7_2dbf4bf6_6415" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --68c9b4c7_2dbf4bf6_6415 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline I've re-written the set of tests as suggested (I hope!). I've not re-run the coverage report (yet) to ensure we're at least as well covered as v3, but attached is v4 for your inspection (amusement?). I've tried to author the SQL tests such that failures clearly indicate what's at gone wrong. This exercise turned into a lot more LOC than I'd expected, I hope it provides some value to the community for testing this important data structure and helps to codify the API clearly. best. -greg --68c9b4c7_2dbf4bf6_6415 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v4-0001-Add-a-module-that-tests-Bitmapset.patch" RnJvbSBjYTA0NjFkN2YwOGU5YzQzMWQ3MmNkNWY1MDE4YzNhMGFjYjllMDlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogV2VkLCAx MyBBdWcgMjAyNSAxNTo0MDozMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjRdIEFkZCBhIG1vZHVs ZSB0aGF0IHRlc3RzIEJpdG1hcHNldAoKQmFzaWMgdGVzdHMgZm9yIEJpdG1hcHNldCB0byBlbnN1 cmUgZnVuY3Rpb25hbGl0eSBhbmQgaGVscCBwcmV2ZW50CnVuaW50ZW50aW9uYWwgYnJlYWtpbmcg Y2hhbmdlcyBpbiB0aGUgZnV0dXJlLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAg ICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0 Ly5naXRpZ25vcmUgICAgfCAgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv TWFrZWZpbGUgICAgICB8ICAgMjMgKwogLi4uL2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0Lm91dCAg ICAgICAgICAgICAgIHwgIDYzNSArKysrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRt YXBzZXQvbWVzb24uYnVpbGQgICB8ICAgMzMgKwogLi4uL3Rlc3RfYml0bWFwc2V0L3NxbC90ZXN0 X2JpdG1hcHNldC5zcWwgICAgIHwgIDQwMiArKysrKysKIC4uLi90ZXN0X2JpdG1hcHNldC90ZXN0 X2JpdG1hcHNldC0tMS4wLnNxbCAgICB8ICAxNTEgKysrCiAuLi4vbW9kdWxlcy90ZXN0X2JpdG1h cHNldC90ZXN0X2JpdG1hcHNldC5jICAgfCAxMjA0ICsrKysrKysrKysrKysrKysrCiAuLi4vdGVz dF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuY29udHJvbCAgICAgfCAgICA0ICsKIDEwIGZpbGVz IGNoYW5nZWQsIDI0NTggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0 Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv bWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0 bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNldC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LS0xLjAuc3FsCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNl dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90 ZXN0X2JpdG1hcHNldC5jb250cm9sCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggOTAzYThhYzE1MWEuLjk0MDcx ZWMwZTE2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgU1VCRElSUyA9IFwKIAkJICBz cGdpc3RfbmFtZV9vcHMgXAogCQkgIHRlc3RfYWlvIFwKIAkJICB0ZXN0X2JpbmFyeWhlYXAgXAor CQkgIHRlc3RfYml0bWFwc2V0IFwKIAkJICB0ZXN0X2Jsb29tZmlsdGVyIFwKIAkJICB0ZXN0X2Nv cHlfY2FsbGJhY2tzIFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdycyBcCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApp bmRleCA5M2JlMGY1NzI4OS4uZDhmNWM5Yzc0OTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMTUs NiArMTUsNyBAQCBzdWJkaXIoJ3NwZ2lzdF9uYW1lX29wcycpCiBzdWJkaXIoJ3NzbF9wYXNzcGhy YXNlX2NhbGxiYWNrJykKIHN1YmRpcigndGVzdF9haW8nKQogc3ViZGlyKCd0ZXN0X2JpbmFyeWhl YXAnKQorc3ViZGlyKCd0ZXN0X2JpdG1hcHNldCcpCiBzdWJkaXIoJ3Rlc3RfYmxvb21maWx0ZXIn KQogc3ViZGlyKCd0ZXN0X2NvcHlfY2FsbGJhY2tzJykKIHN1YmRpcigndGVzdF9jdXN0b21fcm1n cnMnKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC8uZ2l0aWdu b3JlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC8uZ2l0aWdub3JlCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZGNiM2ZmOTcyMwotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvLmdpdGlnbm9yZQpAQCAtMCww ICsxLDQgQEAKKyMgR2VuZXJhdGVkIHN1YmRpcmVjdG9yaWVzCisvbG9nLworL3Jlc3VsdHMvCisv dG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9N YWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3MTk5ZDQwZDczCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9NYWtlZmlsZQpAQCAtMCww ICsxLDIzIEBACisjIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFrZWZpbGUKKwor TU9EVUxFX2JpZyA9IHRlc3RfYml0bWFwc2V0CitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0 ZXN0X2JpdG1hcHNldC5vCitQR0ZJTEVERVNDID0gInRlc3RfYml0bWFwc2V0IC0gdGVzdCBjb2Rl IGZvciBzcmMvaW5jbHVkZS9ub2Rlcy9iaXRtYXBzZXQuaCIKKworRVhURU5TSU9OID0gdGVzdF9i aXRtYXBzZXQKK0RBVEEgPSB0ZXN0X2JpdG1hcHNldC0tMS4wLnNxbAorCitSRUdSRVNTID0gdGVz dF9iaXRtYXBzZXQKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdY UyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UK K3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQKK3RvcF9idWlsZGRpciA9 IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFs CitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvZXhwZWN0ZWQvdGVz dF9iaXRtYXBzZXQub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3Rl ZC90ZXN0X2JpdG1hcHNldC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjU0OWMyODg5NWExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0X2JpdG1hcHNldC5vdXQKQEAgLTAsMCArMSw2MzUgQEAK K0NSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyB0ZXN0X2JpdG1hcHNldDsKKy0tIEJBU0lD IEZVTkNUSU9OQUxJVFkgVEVTVFMKKy0tIFRlc3QgMTogQmFzaWMgdXRpbGl0eSBmdW5jdGlvbnMK K1NFTEVDVCAnTlVMTCBpbnB1dCB0byBmcm9tX2FycmF5JyBhcyB0ZXN0LCB0ZXN0X2Jtc19mcm9t X2FycmF5KE5VTEwpIElTIE5VTEwgYXMgcmVzdWx0OworICAgICAgICAgICB0ZXN0ICAgICAgICAg ICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgTlVMTCBp bnB1dCB0byBmcm9tX2FycmF5IHwgdAorKDEgcm93KQorCitTRUxFQ1QgJ0VtcHR5IGFycmF5IHRv IGZyb21fYXJyYXknIGFzIHRlc3QsIHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbXTo6aW50ZWdl cltdKSBJUyBOVUxMIGFzIHJlc3VsdDsKKyAgICAgICAgICAgdGVzdCAgICAgICAgICAgIHwgcmVz dWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgRW1wdHkgYXJyYXkg dG8gZnJvbV9hcnJheSB8IHQKKygxIHJvdykKKworU0VMRUNUICdOVUxMIGlucHV0IHRvIHRvX2Fy cmF5JyBhcyB0ZXN0LCB0ZXN0X2Jtc190b19hcnJheShOVUxMKSBJUyBOVUxMIGFzIHJlc3VsdDsK KyAgICAgICAgICB0ZXN0ICAgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tCisgTlVMTCBpbnB1dCB0byB0b19hcnJheSB8IHQKKygxIHJvdykKKworLS0g VGVzdCAyOiBTaW5nbGV0b24gb3BlcmF0aW9ucworU0VMRUNUICdtYWtlX3NpbmdsZXRvbig0Mikn IGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKDQyKSkg PSBBUlJBWVs0Ml0gYXMgcmVzdWx0OworICAgICAgICB0ZXN0ICAgICAgICB8IHJlc3VsdCAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgbWFrZV9zaW5nbGV0b24oNDIpIHwgdAorKDEg cm93KQorCitTRUxFQ1QgJ21ha2Vfc2luZ2xldG9uKDApJyBhcyB0ZXN0LCB0ZXN0X2Jtc190b19h cnJheSh0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigwKSkgPSBBUlJBWVswXSBhcyByZXN1bHQ7Cisg ICAgICAgdGVzdCAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t CisgbWFrZV9zaW5nbGV0b24oMCkgfCB0CisoMSByb3cpCisKK1NFTEVDVCAnbWFrZV9zaW5nbGV0 b24oMTAwMCknIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX21ha2Vfc2luZ2xl dG9uKDEwMDApKSA9IEFSUkFZWzEwMDBdIGFzIHJlc3VsdDsKKyAgICAgICAgIHRlc3QgICAgICAg ICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBtYWtlX3Npbmds ZXRvbigxMDAwKSB8IHQKKygxIHJvdykKKworLS0gVGVzdCAzOiBBZGQgbWVtYmVyIG9wZXJhdGlv bnMKK1NFTEVDVCAnYWRkX21lbWJlcihOVUxMLCAxMCknIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2Fy cmF5KHRlc3RfYm1zX2FkZF9tZW1iZXIoTlVMTCwgMTApKSA9IEFSUkFZWzEwXSBhcyByZXN1bHQ7 CisgICAgICAgICB0ZXN0ICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tCisgYWRkX21lbWJlcihOVUxMLCAxMCkgfCB0CisoMSByb3cpCisKK1NFTEVDVCAn YWRkX21lbWJlciBjb25zaXN0ZW5jeScgYXMgdGVzdCwgdGVzdF9ibXNfYWRkX21lbWJlcihOVUxM LCAxMCkgPSB0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigxMCkgYXMgcmVzdWx0OworICAgICAgICAg IHRlc3QgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0KKyBhZGRfbWVtYmVyIGNvbnNpc3RlbmN5IHwgdAorKDEgcm93KQorCitTRUxFQ1QgJ2FkZF9t ZW1iZXIgdG8gZXhpc3RpbmcnIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2Fk ZF9tZW1iZXIodGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oNSksIDEwKSkgPSBBUlJBWVs1LDEwXSBh cyByZXN1bHQ7CisgICAgICAgICAgdGVzdCAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGFkZF9tZW1iZXIgdG8gZXhpc3RpbmcgfCB0CisoMSBy b3cpCisKK1NFTEVDVCAnYWRkX21lbWJlciBzb3J0ZWQnIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2Fy cmF5KHRlc3RfYm1zX2FkZF9tZW1iZXIodGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oMTApLCA1KSkg PSBBUlJBWVs1LDEwXSBhcyByZXN1bHQ7CisgICAgICAgdGVzdCAgICAgICAgfCByZXN1bHQgCist LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgYWRkX21lbWJlciBzb3J0ZWQgfCB0CisoMSBy b3cpCisKK1NFTEVDVCAnYWRkX21lbWJlciBpZGVtcG90ZW50JyBhcyB0ZXN0LCB0ZXN0X2Jtc19h ZGRfbWVtYmVyKHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKDEwKSwgMTApID0gdGVzdF9ibXNfbWFr ZV9zaW5nbGV0b24oMTApIGFzIHJlc3VsdDsKKyAgICAgICAgIHRlc3QgICAgICAgICAgfCByZXN1 bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGFkZF9tZW1iZXIgaWRlbXBv dGVudCB8IHQKKygxIHJvdykKKworLS0gVGVzdCA0OiBEZWxldGUgbWVtYmVyIG9wZXJhdGlvbnMK K1NFTEVDVCAnZGVsX21lbWJlciBmcm9tIE5VTEwnIGFzIHRlc3QsIHRlc3RfYm1zX2RlbF9tZW1i ZXIoTlVMTCwgMTApIElTIE5VTEwgYXMgcmVzdWx0OworICAgICAgICAgdGVzdCAgICAgICAgIHwg cmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGRlbF9tZW1iZXIgZnJv bSBOVUxMIHwgdAorKDEgcm93KQorCitTRUxFQ1QgJ2RlbF9tZW1iZXIgc2luZ2xldG9uIGJlY29t ZXMgZW1wdHknIGFzIHRlc3QsIHRlc3RfYm1zX2RlbF9tZW1iZXIodGVzdF9ibXNfbWFrZV9zaW5n bGV0b24oMTApLCAxMCkgSVMgTlVMTCBhcyByZXN1bHQ7CisgICAgICAgICAgICAgICAgdGVzdCAg ICAgICAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLQorIGRlbF9tZW1iZXIgc2luZ2xldG9uIGJlY29tZXMgZW1wdHkgfCB0Ciso MSByb3cpCisKK1NFTEVDVCAnZGVsX21lbWJlciBubyBjaGFuZ2UnIGFzIHRlc3QsIHRlc3RfYm1z X2RlbF9tZW1iZXIodGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oMTApLCA1KSA9IHRlc3RfYm1zX21h a2Vfc2luZ2xldG9uKDEwKSBhcyByZXN1bHQ7CisgICAgICAgICB0ZXN0ICAgICAgICAgfCByZXN1 bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgZGVsX21lbWJlciBubyBjaGFu Z2UgfCB0CisoMSByb3cpCisKK1NFTEVDVCAnZGVsX21lbWJlciBmcm9tIG1pZGRsZScgYXMgdGVz dCwgdGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfZGVsX21lbWJlcih0ZXN0X2Jtc19mcm9tX2Fy cmF5KEFSUkFZWzEsMiwzXSksIDIpKSA9IEFSUkFZWzEsM10gYXMgcmVzdWx0OworICAgICAgICAg IHRlc3QgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0KKyBkZWxfbWVtYmVyIGZyb20gbWlkZGxlIHwgdAorKDEgcm93KQorCistLSBTRVQgT1BFUkFU SU9OUyBURVNUUworLS0gVGVzdCA1OiBVbmlvbiBvcGVyYXRpb25zCitXSVRIIHRlc3Rfc2V0cyBB UyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNl dF8xMzUsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVszLDUsN10pIEFTIHNldF8zNTcsCisJ dGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pIEFTIHNldF8yNDYKKykKK1NFTEVDVCAn dW5pb24gb3ZlcmxhcHBpbmcgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc190b19hcnJh eSh0ZXN0X2Jtc191bmlvbihzZXRfMTM1LCBzZXRfMzU3KSkgPSBBUlJBWVsxLDMsNSw3XSBhcyBy ZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAndW5pb24gd2l0aCBOVUxM JyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX3VuaW9uKHNldF8x MzUsIE5VTEwpKSA9IEFSUkFZWzEsMyw1XSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklP TiBBTEwKK1NFTEVDVCAndW5pb24gTlVMTCB3aXRoIE5VTEwnIGFzIHRlc3QsCisgICAgICAgdGVz dF9ibXNfdW5pb24oTlVMTCwgTlVMTCkgSVMgTlVMTCBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRz OworICAgICAgICAgIHRlc3QgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0KKyB1bmlvbiBvdmVybGFwcGluZyBzZXRzIHwgdAorIHVuaW9uIHdpdGgg TlVMTCAgICAgICAgfCB0CisgdW5pb24gTlVMTCB3aXRoIE5VTEwgICB8IHQKKygzIHJvd3MpCisK Ky0tIFRlc3QgNjogSW50ZXJzZWN0aW9uIG9wZXJhdGlvbnMKK1dJVEggdGVzdF9zZXRzIEFTICgK KyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEz NSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzMsNSw3XSkgQVMgc2V0XzM1NywKKwl0ZXN0 X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkgQVMgc2V0XzI0NgorKQorU0VMRUNUICdpbnRl cnNlY3Qgb3ZlcmxhcHBpbmcgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc190b19hcnJh eSh0ZXN0X2Jtc19pbnRlcnNlY3Qoc2V0XzEzNSwgc2V0XzM1NykpID0gQVJSQVlbMyw1XSBhcyBy ZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnaW50ZXJzZWN0IGRpc2pv aW50IHNldHMnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfaW50ZXJzZWN0KHNldF8xMzUsIHNl dF8yNDYpIElTIE5VTEwgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxF Q1QgJ2ludGVyc2VjdCB3aXRoIE5VTEwnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfaW50ZXJz ZWN0KHNldF8xMzUsIE5VTEwpIElTIE5VTEwgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0czsKKyAg ICAgICAgICAgIHRlc3QgICAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0KKyBpbnRlcnNlY3Qgb3ZlcmxhcHBpbmcgc2V0cyB8IHQKKyBpbnRl cnNlY3QgZGlzam9pbnQgc2V0cyAgICB8IHQKKyBpbnRlcnNlY3Qgd2l0aCBOVUxMICAgICAgICB8 IHQKKygzIHJvd3MpCisKKy0tIFRlc3QgNzogRGlmZmVyZW5jZSBvcGVyYXRpb25zCitXSVRIIHRl c3Rfc2V0cyBBUyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMs NV0pIEFTIHNldF8xMzUsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVszLDUsN10pIEFTIHNl dF8zNTcsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pIEFTIHNldF8yNDYKKykK K1NFTEVDVCAnZGlmZmVyZW5jZSBvdmVybGFwcGluZyBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRl c3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2RpZmZlcmVuY2Uoc2V0XzEzNSwgc2V0XzM1NykpID0g QVJSQVlbMV0gYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2Rp ZmZlcmVuY2UgZGlzam9pbnQgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc190b19hcnJh eSh0ZXN0X2Jtc19kaWZmZXJlbmNlKHNldF8xMzUsIHNldF8yNDYpKSA9IEFSUkFZWzEsMyw1XSBh cyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnZGlmZmVyZW5jZSBp ZGVudGljYWwgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19kaWZmZXJlbmNlKHNldF8x MzUsIHNldF8xMzUpIElTIE5VTEwgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0czsKKyAgICAgICAg ICAgIHRlc3QgICAgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLQorIGRpZmZlcmVuY2Ugb3ZlcmxhcHBpbmcgc2V0cyB8IHQKKyBkaWZmZXJl bmNlIGRpc2pvaW50IHNldHMgICAgfCB0CisgZGlmZmVyZW5jZSBpZGVudGljYWwgc2V0cyAgIHwg dAorKDMgcm93cykKKworLS0gTUVNQkVSU0hJUCBBTkQgQ09NUEFSSVNPTiBURVNUUworLS0gVGVz dCA4OiBNZW1iZXJzaGlwIHRlc3RzCitXSVRIIHRlc3Rfc2V0IEFTIChTRUxFQ1QgdGVzdF9ibXNf ZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNldF8xMzUpCitTRUxFQ1QgJ2lzX21lbWJlciBl eGlzdGluZycgYXMgdGVzdCwgdGVzdF9ibXNfaXNfbWVtYmVyKHNldF8xMzUsIDEpID0gdHJ1ZSBh cyByZXN1bHQgRlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ2lzX21lbWJlciBtaXNz aW5nJyBhcyB0ZXN0LCB0ZXN0X2Jtc19pc19tZW1iZXIoc2V0XzEzNSwgMikgPSBmYWxzZSBhcyBy ZXN1bHQgRlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ2lzX21lbWJlciBleGlzdGlu ZyBtaWRkbGUnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX21lbWJlcihzZXRfMTM1LCAzKSA9IHRydWUg YXMgcmVzdWx0IEZST00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICdpc19tZW1iZXIgTlVM TCBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX21lbWJlcihOVUxMLCAxKSA9IGZhbHNlIGFzIHJl c3VsdCBGUk9NIHRlc3Rfc2V0OworICAgICAgICAgICB0ZXN0ICAgICAgICAgICAgfCByZXN1bHQg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBpc19tZW1iZXIgZXhpc3Rp bmcgICAgICAgIHwgdAorIGlzX21lbWJlciBtaXNzaW5nICAgICAgICAgfCB0CisgaXNfbWVtYmVy IGV4aXN0aW5nIG1pZGRsZSB8IHQKKyBpc19tZW1iZXIgTlVMTCBzZXQgICAgICAgIHwgdAorKDQg cm93cykKKworLS0gVGVzdCA5OiBTZXQgY2FyZGluYWxpdHkKK1NFTEVDVCAnbnVtX21lbWJlcnMg TlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNfbnVtX21lbWJlcnMoTlVMTCkgPSAwIGFzIHJlc3VsdDsK KyAgICAgICB0ZXN0ICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t CisgbnVtX21lbWJlcnMgTlVMTCB8IHQKKygxIHJvdykKKworU0VMRUNUICdudW1fbWVtYmVycyBz bWFsbCBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX251bV9tZW1iZXJzKHRlc3RfYm1zX2Zyb21fYXJy YXkoQVJSQVlbMSwzLDVdKSkgPSAzIGFzIHJlc3VsdDsKKyAgICAgICAgIHRlc3QgICAgICAgICAg fCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIG51bV9tZW1iZXJz IHNtYWxsIHNldCB8IHQKKygxIHJvdykKKworU0VMRUNUICdudW1fbWVtYmVycyBsYXJnZXIgc2V0 JyBhcyB0ZXN0LCB0ZXN0X2Jtc19udW1fbWVtYmVycyh0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZ WzIsNCw2LDgsMTBdKSkgPSA1IGFzIHJlc3VsdDsKKyAgICAgICAgICB0ZXN0ICAgICAgICAgIHwg cmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgbnVtX21lbWJlcnMg bGFyZ2VyIHNldCB8IHQKKygxIHJvdykKKworLS0gVGVzdCAxMDogU2V0IGVxdWFsaXR5IGFuZCBj b21wYXJpc29uCitXSVRIIHRlc3Rfc2V0cyBBUyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJv bV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNldF8xMzVfYSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5 KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9iLAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlb Miw0LDZdKSBBUyBzZXRfMjQ2LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzXSkgQVMg c2V0XzEzCispCitTRUxFQ1QgJ2VxdWFsIE5VTEwgTlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNfZXF1 YWwoTlVMTCwgTlVMTCkgPSB0cnVlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxM CitTRUxFQ1QgJ2VxdWFsIE5VTEwgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChOVUxMLCBz ZXRfMTM1X2EpID0gZmFsc2UgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NF TEVDVCAnZXF1YWwgc2V0IE5VTEwnIGFzIHRlc3QsIHRlc3RfYm1zX2VxdWFsKHNldF8xMzVfYSwg TlVMTCkgPSBmYWxzZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNU ICdlcXVhbCBpZGVudGljYWwgc2V0cycgYXMgdGVzdCwgdGVzdF9ibXNfZXF1YWwoc2V0XzEzNV9h LCBzZXRfMTM1X2IpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAor U0VMRUNUICdlcXVhbCBkaWZmZXJlbnQgc2V0cycgYXMgdGVzdCwgdGVzdF9ibXNfZXF1YWwoc2V0 XzEzNV9hLCBzZXRfMjQ2KSA9IGZhbHNlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04g QUxMCitTRUxFQ1QgJ2NvbXBhcmUgTlVMTCBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19jb21wYXJl KE5VTEwsIE5VTEwpID0gMCBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VM RUNUICdjb21wYXJlIE5VTEwgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19jb21wYXJlKE5VTEwsIHNl dF8xMykgPSAtMSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdj b21wYXJlIHNldCBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19jb21wYXJlKHNldF8xMywgTlVMTCkg PSAxIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUg ZXF1YWwgc2V0cycgYXMgdGVzdCwgdGVzdF9ibXNfY29tcGFyZShzZXRfMTMsIHNldF8xMykgPSAw IGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUgc3Vi c2V0IHN1cGVyc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19jb21wYXJlKHNldF8xMywgc2V0XzEzNV9h KSA9IC0xIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBh cmUgc3VwZXJzZXQgc3Vic2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19jb21wYXJlKHNldF8xMzVfYSwg c2V0XzEzKSA9IDEgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzOworICAgICAgICAgIHRlc3QgICAg ICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGVx dWFsIE5VTEwgTlVMTCAgICAgICAgIHwgdAorIGVxdWFsIE5VTEwgc2V0ICAgICAgICAgIHwgdAor IGVxdWFsIHNldCBOVUxMICAgICAgICAgIHwgdAorIGVxdWFsIGlkZW50aWNhbCBzZXRzICAgIHwg dAorIGVxdWFsIGRpZmZlcmVudCBzZXRzICAgIHwgdAorIGNvbXBhcmUgTlVMTCBOVUxMICAgICAg IHwgdAorIGNvbXBhcmUgTlVMTCBzZXQgICAgICAgIHwgdAorIGNvbXBhcmUgc2V0IE5VTEwgICAg ICAgIHwgdAorIGNvbXBhcmUgZXF1YWwgc2V0cyAgICAgIHwgdAorIGNvbXBhcmUgc3Vic2V0IHN1 cGVyc2V0IHwgdAorIGNvbXBhcmUgc3VwZXJzZXQgc3Vic2V0IHwgdAorKDExIHJvd3MpCisKKy0t IEFEVkFOQ0VEIE9QRVJBVElPTlMgVEVTVFMKKy0tIFRlc3QgMTE6IFJhbmdlIG9wZXJhdGlvbnMK K1NFTEVDVCAnYWRkX3JhbmdlIGJhc2ljJyBhcyB0ZXN0LCB0ZXN0X2Jtc190b19hcnJheSh0ZXN0 X2Jtc19hZGRfcmFuZ2UoTlVMTCwgNSwgNykpID0gQVJSQVlbNSw2LDddIGFzIHJlc3VsdDsKKyAg ICAgIHRlc3QgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGFk ZF9yYW5nZSBiYXNpYyB8IHQKKygxIHJvdykKKworU0VMRUNUICdhZGRfcmFuZ2Ugc2luZ2xlIGVs ZW1lbnQnIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2FkZF9yYW5nZShOVUxM LCA1LCA1KSkgPSBBUlJBWVs1XSBhcyByZXN1bHQ7CisgICAgICAgICAgIHRlc3QgICAgICAgICAg IHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBhZGRfcmFu Z2Ugc2luZ2xlIGVsZW1lbnQgfCB0CisoMSByb3cpCisKK1NFTEVDVCAnYWRkX3JhbmdlIHRvIGV4 aXN0aW5nJyBhcyB0ZXN0LCB0ZXN0X2Jtc190b19hcnJheSh0ZXN0X2Jtc19hZGRfcmFuZ2UodGVz dF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDEwXSksIDUsIDcpKSA9IEFSUkFZWzEsNSw2LDcsMTBd IGFzIHJlc3VsdDsKKyAgICAgICAgIHRlc3QgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGFkZF9yYW5nZSB0byBleGlzdGluZyB8IHQKKygxIHJv dykKKworLS0gVGVzdCAxMjogTWVtYmVyc2hpcCB0eXBlcworU0VMRUNUICdtZW1iZXJzaGlwIGVt cHR5JyBhcyB0ZXN0LCB0ZXN0X2Jtc19tZW1iZXJzaGlwKE5VTEwpID0gMCBhcyByZXN1bHQ7Cisg ICAgICAgdGVzdCAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQor IG1lbWJlcnNoaXAgZW1wdHkgfCB0CisoMSByb3cpCisKK1NFTEVDVCAnbWVtYmVyc2hpcCBzaW5n bGV0b24nIGFzIHRlc3QsIHRlc3RfYm1zX21lbWJlcnNoaXAodGVzdF9ibXNfZnJvbV9hcnJheShB UlJBWVs0Ml0pKSA9IDEgYXMgcmVzdWx0OworICAgICAgICAgdGVzdCAgICAgICAgIHwgcmVzdWx0 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIG1lbWJlcnNoaXAgc2luZ2xldG9u IHwgdAorKDEgcm93KQorCitTRUxFQ1QgJ21lbWJlcnNoaXAgbXVsdGlwbGUnIGFzIHRlc3QsIHRl c3RfYm1zX21lbWJlcnNoaXAodGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDIsM10pKSA9IDIg YXMgcmVzdWx0OworICAgICAgICB0ZXN0ICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0KKyBtZW1iZXJzaGlwIG11bHRpcGxlIHwgdAorKDEgcm93KQorCist LSBUZXN0IDEzOiBTaW5nbGV0b24gbWVtYmVyIGV4dHJhY3Rpb24KK1NFTEVDVCAnc2luZ2xldG9u X21lbWJlciB2YWxpZCcgYXMgdGVzdCwgdGVzdF9ibXNfc2luZ2xldG9uX21lbWJlcih0ZXN0X2Jt c19mcm9tX2FycmF5KEFSUkFZWzQyXSkpID0gNDIgYXMgcmVzdWx0OworICAgICAgICAgIHRlc3Qg ICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBz aW5nbGV0b25fbWVtYmVyIHZhbGlkIHwgdAorKDEgcm93KQorCistLSBUZXN0IDE0OiBTZXQgaXRl cmF0aW9uCitXSVRIIHRlc3Rfc2V0IEFTIChTRUxFQ1QgdGVzdF9ibXNfZnJvbV9hcnJheShBUlJB WVs1LDEwLDE1LDIwXSkgQVMgc2V0X251bWJlcnMpCitTRUxFQ1QgJ25leHRfbWVtYmVyIGZpcnN0 JyBhcyB0ZXN0LCB0ZXN0X2Jtc19uZXh0X21lbWJlcihzZXRfbnVtYmVycywgLTEpID0gNSBhcyBy ZXN1bHQgRlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ25leHRfbWVtYmVyIHNlY29u ZCcgYXMgdGVzdCwgdGVzdF9ibXNfbmV4dF9tZW1iZXIoc2V0X251bWJlcnMsIDUpID0gMTAgYXMg cmVzdWx0IEZST00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICduZXh0X21lbWJlciBwYXN0 IGVuZCcgYXMgdGVzdCwgdGVzdF9ibXNfbmV4dF9tZW1iZXIoc2V0X251bWJlcnMsIDIwKSA9IC0y IGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAnbmV4dF9tZW1iZXIg ZW1wdHkgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19uZXh0X21lbWJlcihOVUxMLCAtMSkgPSAtMiBh cyByZXN1bHQgRlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ3ByZXZfbWVtYmVyIGxh c3QnIGFzIHRlc3QsIHRlc3RfYm1zX3ByZXZfbWVtYmVyKHNldF9udW1iZXJzLCAyMSkgPSAyMCBh cyByZXN1bHQgRlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ3ByZXZfbWVtYmVyIHBl bnVsdGltYXRlJyBhcyB0ZXN0LCB0ZXN0X2Jtc19wcmV2X21lbWJlcihzZXRfbnVtYmVycywgMjAp ID0gMTUgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICdwcmV2X21l bWJlciBwYXN0IGJlZ2lubmluZycgYXMgdGVzdCwgdGVzdF9ibXNfcHJldl9tZW1iZXIoc2V0X251 bWJlcnMsIDUpID0gLTIgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNU ICdwcmV2X21lbWJlciBlbXB0eSBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX3ByZXZfbWVtYmVyKE5V TEwsIDEwMCkgPSAtMiBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldDsKKyAgICAgICAgICAgIHRlc3Qg ICAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0KKyBuZXh0X21lbWJlciBmaXJzdCAgICAgICAgICB8IHQKKyBuZXh0X21lbWJlciBzZWNvbmQg ICAgICAgICB8IHQKKyBuZXh0X21lbWJlciBwYXN0IGVuZCAgICAgICB8IHQKKyBuZXh0X21lbWJl ciBlbXB0eSBzZXQgICAgICB8IHQKKyBwcmV2X21lbWJlciBsYXN0ICAgICAgICAgICB8IHQKKyBw cmV2X21lbWJlciBwZW51bHRpbWF0ZSAgICB8IHQKKyBwcmV2X21lbWJlciBwYXN0IGJlZ2lubmlu ZyB8IHQKKyBwcmV2X21lbWJlciBlbXB0eSBzZXQgICAgICB8IHQKKyg4IHJvd3MpCisKKy0tIFRl c3QgMTU6IEhhc2ggZnVuY3Rpb25zCitXSVRIIHRlc3Rfc2V0cyBBUyAoCisgICAgU0VMRUNUCisJ dGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNldF9hLAorCXRlc3RfYm1zX2Zy b21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfYiwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFS UkFZWzIsNCw2XSkgQVMgc2V0X2MKKykKK1NFTEVDVCAnaGFzaCBOVUxMJyBhcyB0ZXN0LCB0ZXN0 X2Jtc19oYXNoX3ZhbHVlKE5VTEwpID0gMCBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9O IEFMTAorU0VMRUNUICdoYXNoIGNvbnNpc3RlbmN5JyBhcyB0ZXN0LCB0ZXN0X2Jtc19oYXNoX3Zh bHVlKHNldF9hKSA9IHRlc3RfYm1zX2hhc2hfdmFsdWUoc2V0X2IpIGFzIHJlc3VsdCBGUk9NIHRl c3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2hhc2ggZGlmZmVyZW50IHNldHMnIGFzIHRlc3Qs IHRlc3RfYm1zX2hhc2hfdmFsdWUoc2V0X2EpICE9IHRlc3RfYm1zX2hhc2hfdmFsdWUoc2V0X2Mp IGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0czsKKyAgICAgICAgdGVzdCAgICAgICAgIHwgcmVzdWx0 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgaGFzaCBOVUxMICAgICAgICAgICB8 IHQKKyBoYXNoIGNvbnNpc3RlbmN5ICAgIHwgdAorIGhhc2ggZGlmZmVyZW50IHNldHMgfCB0Ciso MyByb3dzKQorCistLSBUZXN0IDE2OiBTZXQgb3ZlcmxhcAorV0lUSCB0ZXN0X3NldHMgQVMgKAor ICAgIFNFTEVDVAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1 LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMyw1LDddKSBBUyBzZXRfMzU3LAorCXRlc3Rf Ym1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0LDZdKSBBUyBzZXRfMjQ2CispCitTRUxFQ1QgJ292ZXJs YXAgZXhpc3RpbmcnIGFzIHRlc3QsIHRlc3RfYm1zX292ZXJsYXAoc2V0XzEzNSwgc2V0XzM1Nykg PSB0cnVlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ292ZXJs YXAgbm9uZScgYXMgdGVzdCwgdGVzdF9ibXNfb3ZlcmxhcChzZXRfMTM1LCBzZXRfMjQ2KSA9IGZh bHNlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ292ZXJsYXAg d2l0aCBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19vdmVybGFwKE5VTEwsIHNldF8xMzUpID0gZmFs c2UgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzOworICAgICAgIHRlc3QgICAgICAgIHwgcmVzdWx0 IAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIG92ZXJsYXAgZXhpc3RpbmcgIHwgdAor IG92ZXJsYXAgbm9uZSAgICAgIHwgdAorIG92ZXJsYXAgd2l0aCBOVUxMIHwgdAorKDMgcm93cykK KworLS0gVGVzdCAxNzogU3Vic2V0IHJlbGF0aW9ucworV0lUSCB0ZXN0X3NldHMgQVMgKAorICAg IFNFTEVDVAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzXSkgQVMgc2V0XzEzLAorCXRl c3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1LAorCXRlc3RfYm1zX2Zy b21fYXJyYXkoQVJSQVlbMiw0XSkgQVMgc2V0XzI0CispCitTRUxFQ1QgJ3N1YnNldCBOVUxMIGlz IHN1YnNldCBvZiBhbGwnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX3N1YnNldChOVUxMLCBzZXRfMTM1 KSA9IHRydWUgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnc3Vi c2V0IHByb3BlciBzdWJzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX3N1YnNldChzZXRfMTMsIHNl dF8xMzUpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNU ICdzdWJzZXQgaW1wcm9wZXIgc3Vic2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19pc19zdWJzZXQoc2V0 XzEzNSwgc2V0XzEzKSA9IGZhbHNlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxM CitTRUxFQ1QgJ3N1YnNldCBkaXNqb2ludCBzZXRzJyBhcyB0ZXN0LCB0ZXN0X2Jtc19pc19zdWJz ZXQoc2V0XzEzLCBzZXRfMjQpID0gZmFsc2UgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzOworICAg ICAgICAgICAgIHRlc3QgICAgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBzdWJzZXQgTlVMTCBpcyBzdWJzZXQgb2YgYWxsIHwgdAor IHN1YnNldCBwcm9wZXIgc3Vic2V0ICAgICAgICAgfCB0Cisgc3Vic2V0IGltcHJvcGVyIHN1YnNl dCAgICAgICB8IHQKKyBzdWJzZXQgZGlzam9pbnQgc2V0cyAgICAgICAgIHwgdAorKDQgcm93cykK KworLS0gVGVzdCAxODogQ29weSBvcGVyYXRpb25zCitXSVRIIHRlc3Rfc2V0IEFTIChTRUxFQ1Qg dGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNSw3XSkgQVMgb3JpZ2luYWwpCitTRUxFQ1Qg J2NvcHkgTlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNfY29weShOVUxMKSBJUyBOVUxMIGFzIHJlc3Vs dCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAnY29weSBlcXVhbGl0eScgYXMgdGVz dCwgdGVzdF9ibXNfZXF1YWwob3JpZ2luYWwsIHRlc3RfYm1zX2NvcHkob3JpZ2luYWwpKSA9IHRy dWUgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQ7CisgICAgIHRlc3QgICAgICB8IHJlc3VsdCAKKy0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGNvcHkgTlVMTCAgICAgfCB0CisgY29weSBlcXVhbGl0 eSB8IHQKKygyIHJvd3MpCisKKy0tIFRlc3QgMTk6IEFkZCBtZW1iZXJzIG9wZXJhdGlvbgorV0lU SCBiYXNlX3NldHMgQVMgKAorICAgIFNFTEVDVAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlb MSwzXSkgQVMgc2V0XzEzLAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbNSw3XSkgQVMgc2V0 XzU3CispCitTRUxFQ1QgJ2FkZF9tZW1iZXJzIG9wZXJhdGlvbicgYXMgdGVzdCwKKyAgICAgICB0 ZXN0X2Jtc190b19hcnJheSh0ZXN0X2Jtc19hZGRfbWVtYmVycyhzZXRfMTMsIHNldF81NykpID0g QVJSQVlbMSwzLDUsN10gYXMgcmVzdWx0CitGUk9NIGJhc2Vfc2V0czsKKyAgICAgICAgIHRlc3Qg ICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGFk ZF9tZW1iZXJzIG9wZXJhdGlvbiB8IAorKDEgcm93KQorCistLSBUZXN0IDIwOiBUZXN0IGhhc2gg Y29uc2lzdGVuY3kKK1dJVEggdGVzdF9zZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19m cm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9hLAorCXRlc3RfYm1zX2Zyb21fYXJy YXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1X2IsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJB WVsyLDQsNl0pIEFTIHNldF8yNDYKKykKK1NFTEVDVCAnYml0bWFwX2hhc2ggTlVMTCcgYXMgdGVz dCwKKyAgICAgICB0ZXN0X2JpdG1hcF9oYXNoKE5VTEwpID0gMCBhcyByZXN1bHQKK1VOSU9OIEFM TAorU0VMRUNUICdiaXRtYXBfaGFzaCBjb25zaXN0ZW5jeScgYXMgdGVzdCwKKyAgICAgICB0ZXN0 X2JpdG1hcF9oYXNoKHNldF8xMzVfYSkgPSB0ZXN0X2JpdG1hcF9oYXNoKHNldF8xMzVfYikgYXMg cmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9oYXNoIHZz IGJtc19oYXNoX3ZhbHVlJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX2hhc2goc2V0XzEz NV9hKSA9IHRlc3RfYm1zX2hhc2hfdmFsdWUoc2V0XzEzNV9hKSBhcyByZXN1bHQKK0ZST00gdGVz dF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX2hhc2ggZGlmZmVyZW50IHNldHMnIGFz IHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaChzZXRfMTM1X2EpICE9IHRlc3RfYml0bWFw X2hhc2goc2V0XzI0NikgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0czsKKyAgICAgICAgICAgICB0 ZXN0ICAgICAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0KKyBiaXRtYXBfaGFzaCBOVUxMICAgICAgICAgICAgICB8IHQKKyBiaXRtYXBf aGFzaCBjb25zaXN0ZW5jeSAgICAgICB8IHQKKyBiaXRtYXBfaGFzaCB2cyBibXNfaGFzaF92YWx1 ZSB8IHQKKyBiaXRtYXBfaGFzaCBkaWZmZXJlbnQgc2V0cyAgICB8IHQKKyg0IHJvd3MpCisKK1NF TEVDVCAnYml0bWFwX2hhc2ggWzEsMyw1XScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1hcF9o YXNoKHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSkgYXMgaGFzaF92YWx1ZTsKKyAg ICAgICAgdGVzdCAgICAgICAgIHwgaGFzaF92YWx1ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0KKyBiaXRtYXBfaGFzaCBbMSwzLDVdIHwgICA0OTg3MDc3OAorKDEgcm93KQor CitTRUxFQ1QgJ2JpdG1hcF9oYXNoIFsyLDQsNl0nIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRt YXBfaGFzaCh0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkpIGFzIGhhc2hfdmFsdWU7 CisgICAgICAgIHRlc3QgICAgICAgICB8IGhhc2hfdmFsdWUgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tCisgYml0bWFwX2hhc2ggWzIsNCw2XSB8IC0zMDM5MjE2MDYKKygxIHJv dykKKworLS0gVGVzdCAyMTogYml0bWFwX21hdGNoIGZ1bmN0aW9uCitXSVRIIHRlc3Rfc2V0cyBB UyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNl dF8xMzVfYSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9i LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0LDZdKSBBUyBzZXRfMjQ2LAorCXRlc3Rf Ym1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzXSkgQVMgc2V0XzEzCispCitTRUxFQ1QgJ2JpdG1hcF9t YXRjaCBOVUxMIE5VTEwgKHNob3VsZCBiZSAwKScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1h cF9tYXRjaChOVUxMLCBOVUxMKSA9IDAgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnYml0 bWFwX21hdGNoIE5VTEwgc2V0IChzaG91bGQgYmUgMSknIGFzIHRlc3QsCisgICAgICAgdGVzdF9i aXRtYXBfbWF0Y2goTlVMTCwgc2V0XzEzNV9hKSA9IDEgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0 cworVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBzZXQgTlVMTCAoc2hvdWxkIGJlIDEp JyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKHNldF8xMzVfYSwgTlVMTCkgPSAx IGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdiaXRtYXBfbWF0 Y2ggaWRlbnRpY2FsIHNldHMgKHNob3VsZCBiZSAwKScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jp dG1hcF9tYXRjaChzZXRfMTM1X2EsIHNldF8xMzVfYikgPSAwIGFzIHJlc3VsdAorRlJPTSB0ZXN0 X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdiaXRtYXBfbWF0Y2ggZGlmZmVyZW50IHNldHMgKHNo b3VsZCBiZSAxKScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1hcF9tYXRjaChzZXRfMTM1X2Es IHNldF8yNDYpID0gMSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVD VCAnYml0bWFwX21hdGNoIHN1YnNldC9zdXBlcnNldCAoc2hvdWxkIGJlIDEpJyBhcyB0ZXN0LAor ICAgICAgIHRlc3RfYml0bWFwX21hdGNoKHNldF8xMywgc2V0XzEzNV9hKSA9IDEgYXMgcmVzdWx0 CitGUk9NIHRlc3Rfc2V0czsKKyAgICAgICAgICAgICAgICAgICAgdGVzdCAgICAgICAgICAgICAg ICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLQorIGJpdG1hcF9tYXRjaCBOVUxMIE5VTEwgKHNob3VsZCBiZSAwKSAgICAg ICB8IHQKKyBiaXRtYXBfbWF0Y2ggTlVMTCBzZXQgKHNob3VsZCBiZSAxKSAgICAgICAgfCB0Cisg Yml0bWFwX21hdGNoIHNldCBOVUxMIChzaG91bGQgYmUgMSkgICAgICAgIHwgdAorIGJpdG1hcF9t YXRjaCBpZGVudGljYWwgc2V0cyAoc2hvdWxkIGJlIDApICB8IHQKKyBiaXRtYXBfbWF0Y2ggZGlm ZmVyZW50IHNldHMgKHNob3VsZCBiZSAxKSAgfCB0CisgYml0bWFwX21hdGNoIHN1YnNldC9zdXBl cnNldCAoc2hvdWxkIGJlIDEpIHwgdAorKDYgcm93cykKKworLS0gVGVzdCByZWxhdGlvbnNoaXAg d2l0aCBibXNfZXF1YWwKK1dJVEggdGVzdF9zZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jt c19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9hLAorCXRlc3RfYm1zX2Zyb21f YXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1X2IsCisJdGVzdF9ibXNfZnJvbV9hcnJheShB UlJBWVsyLDQsNl0pIEFTIHNldF8yNDYKKykKK1NFTEVDVCAnYml0bWFwX21hdGNoIHZzIGJtc19l cXVhbCAoZXF1YWwgc2V0cyknIGFzIHRlc3QsCisgICAgICAgKHRlc3RfYml0bWFwX21hdGNoKHNl dF8xMzVfYSwgc2V0XzEzNV9iKSA9IDApID0gdGVzdF9ibXNfZXF1YWwoc2V0XzEzNV9hLCBzZXRf MTM1X2IpIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdiaXRt YXBfbWF0Y2ggdnMgYm1zX2VxdWFsIChkaWZmZXJlbnQgc2V0cyknIGFzIHRlc3QsCisgICAgICAg KHRlc3RfYml0bWFwX21hdGNoKHNldF8xMzVfYSwgc2V0XzI0NikgPSAwKSA9IHRlc3RfYm1zX2Vx dWFsKHNldF8xMzVfYSwgc2V0XzI0NikgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04g QUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCB2cyBibXNfZXF1YWwgKE5VTEwgY2FzZXMpJyBhcyB0 ZXN0LAorICAgICAgICh0ZXN0X2JpdG1hcF9tYXRjaChOVUxMLCBOVUxMKSA9IDApID0gdGVzdF9i bXNfZXF1YWwoTlVMTCwgTlVMTCkgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0czsKKyAgICAgICAg ICAgICAgICAgICAgdGVzdCAgICAgICAgICAgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGJpdG1hcF9tYXRj aCB2cyBibXNfZXF1YWwgKGVxdWFsIHNldHMpICAgICB8IHQKKyBiaXRtYXBfbWF0Y2ggdnMgYm1z X2VxdWFsIChkaWZmZXJlbnQgc2V0cykgfCB0CisgYml0bWFwX21hdGNoIHZzIGJtc19lcXVhbCAo TlVMTCBjYXNlcykgICAgIHwgdAorKDMgcm93cykKKworLS0gVGVzdCBzcGVjaWZpYyBtYXRjaCB2 YWx1ZXMgZm9yIGRlYnVnZ2luZworU0VMRUNUICdiaXRtYXBfbWF0Y2ggWzEsMyw1XSB2cyBbMSwz LDVdJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKHRlc3RfYm1zX2Zyb21fYXJy YXkoQVJSQVlbMSwzLDVdKSwgdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pKSBhcyBt YXRjaF92YWx1ZTsKKyAgICAgICAgICAgICAgdGVzdCAgICAgICAgICAgICAgIHwgbWF0Y2hfdmFs dWUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGJp dG1hcF9tYXRjaCBbMSwzLDVdIHZzIFsxLDMsNV0gfCAgICAgICAgICAgMAorKDEgcm93KQorCitT RUxFQ1QgJ2JpdG1hcF9tYXRjaCBbMSwzLDVdIHZzIFsyLDQsNl0nIGFzIHRlc3QsCisgICAgICAg dGVzdF9iaXRtYXBfbWF0Y2godGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pLCB0ZXN0 X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkpIGFzIG1hdGNoX3ZhbHVlOworICAgICAgICAg ICAgICB0ZXN0ICAgICAgICAgICAgICAgfCBtYXRjaF92YWx1ZSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgYml0bWFwX21hdGNoIFsxLDMsNV0gdnMg WzIsNCw2XSB8ICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIFRlc3QgZWRnZSBjYXNlcworU0VM RUNUICdiaXRtYXBfbWF0Y2ggZW1wdHkgYXJyYXlzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0 bWFwX21hdGNoKHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbXTo6aW50ZWdlcltdKSwgdGVzdF9i bXNfZnJvbV9hcnJheShBUlJBWVtdOjppbnRlZ2VyW10pKSA9IDAgYXMgcmVzdWx0OworICAgICAg ICAgICB0ZXN0ICAgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0KKyBiaXRtYXBfbWF0Y2ggZW1wdHkgYXJyYXlzIHwgdAorKDEgcm93KQorCist LSBUZXN0IDIyOiBSYW5kb20gb3BlcmF0aW9ucyBzdHJlc3MgdGVzdAorU0VMRUNUICdyYW5kb20g b3BlcmF0aW9ucycgYXMgdGVzdCwgdGVzdF9yYW5kb21fb3BlcmF0aW9ucygxMjM0NSwgMTAwMCkg PiAwIGFzIHJlc3VsdDsKKyAgICAgICB0ZXN0ICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0KKyByYW5kb20gb3BlcmF0aW9ucyB8IHQKKygxIHJvdykKKworLS0g RVJST1IgQ09ORElUSU9OIFRFU1RTCistLSBUZXN0IDIzOiBFcnJvciBjb25kaXRpb25zICh0aGVz ZSBzaG91bGQgcHJvZHVjZSBFUlJPUnMpCistLSBOZWdhdGl2ZSBtZW1iZXIgdGVzdHMKK0RPICQk CitCRUdJTgorICAgIEJFR0lOCisJUEVSRk9STSB0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigtMSk7 CisJUkFJU0UgTk9USUNFICdFUlJPUjogbWFrZV9zaW5nbGV0b24oLTEpIHNob3VsZCBoYXZlIGZh aWxlZCEnOworICAgIEVYQ0VQVElPTgorCVdIRU4gT1RIRVJTIFRIRU4KKwkgICAgUkFJU0UgTk9U SUNFICdTVUNDRVNTOiBtYWtlX3NpbmdsZXRvbigtMSkgY29ycmVjdGx5IGVycm9yZWQ6ICUnLCBT UUxFUlJNOworICAgIEVORDsKK0VORCAkJDsKK05PVElDRTogIFNVQ0NFU1M6IG1ha2Vfc2luZ2xl dG9uKC0xKSBjb3JyZWN0bHkgZXJyb3JlZDogbmVnYXRpdmUgYml0bWFwc2V0IG1lbWJlciBub3Qg YWxsb3dlZAorRE8gJCQKK0JFR0lOCisgICAgQkVHSU4KKwlQRVJGT1JNIHRlc3RfYm1zX2lzX21l bWJlcihOVUxMLCAtNSk7CisJUkFJU0UgTk9USUNFICdFUlJPUjogaXNfbWVtYmVyKE5VTEwsIC01 KSBzaG91bGQgaGF2ZSBmYWlsZWQhJzsKKyAgICBFWENFUFRJT04KKwlXSEVOIE9USEVSUyBUSEVO CisJICAgIFJBSVNFIE5PVElDRSAnU1VDQ0VTUzogaXNfbWVtYmVyKE5VTEwsIC01KSBjb3JyZWN0 bHkgZXJyb3JlZDogJScsIFNRTEVSUk07CisgICAgRU5EOworRU5EICQkOworTk9USUNFOiAgU1VD Q0VTUzogaXNfbWVtYmVyKE5VTEwsIC01KSBjb3JyZWN0bHkgZXJyb3JlZDogbmVnYXRpdmUgYml0 bWFwc2V0IG1lbWJlciBub3QgYWxsb3dlZAorRE8gJCQKK0JFR0lOCisgICAgQkVHSU4KKwlQRVJG T1JNIHRlc3RfYm1zX2FkZF9tZW1iZXIoTlVMTCwgLTEwKTsKKwlSQUlTRSBOT1RJQ0UgJ0VSUk9S OiBhZGRfbWVtYmVyKE5VTEwsIC0xMCkgc2hvdWxkIGhhdmUgZmFpbGVkISc7CisgICAgRVhDRVBU SU9OCisJV0hFTiBPVEhFUlMgVEhFTgorCSAgICBSQUlTRSBOT1RJQ0UgJ1NVQ0NFU1M6IGFkZF9t ZW1iZXIoTlVMTCwgLTEwKSBjb3JyZWN0bHkgZXJyb3JlZDogJScsIFNRTEVSUk07CisgICAgRU5E OworRU5EICQkOworTk9USUNFOiAgU1VDQ0VTUzogYWRkX21lbWJlcihOVUxMLCAtMTApIGNvcnJl Y3RseSBlcnJvcmVkOiBuZWdhdGl2ZSBiaXRtYXBzZXQgbWVtYmVyIG5vdCBhbGxvd2VkCitETyAk JAorQkVHSU4KKyAgICBCRUdJTgorCVBFUkZPUk0gdGVzdF9ibXNfZGVsX21lbWJlcihOVUxMLCAt MjApOworCVJBSVNFIE5PVElDRSAnRVJST1I6IGRlbF9tZW1iZXIoTlVMTCwgLTIwKSBzaG91bGQg aGF2ZSBmYWlsZWQhJzsKKyAgICBFWENFUFRJT04KKwlXSEVOIE9USEVSUyBUSEVOCisJICAgIFJB SVNFIE5PVElDRSAnU1VDQ0VTUzogZGVsX21lbWJlcihOVUxMLCAtMjApIGNvcnJlY3RseSBlcnJv cmVkOiAlJywgU1FMRVJSTTsKKyAgICBFTkQ7CitFTkQgJCQ7CitOT1RJQ0U6ICBTVUNDRVNTOiBk ZWxfbWVtYmVyKE5VTEwsIC0yMCkgY29ycmVjdGx5IGVycm9yZWQ6IG5lZ2F0aXZlIGJpdG1hcHNl dCBtZW1iZXIgbm90IGFsbG93ZWQKK0RPICQkCitCRUdJTgorICAgIEJFR0lOCisJUEVSRk9STSB0 ZXN0X2Jtc19hZGRfcmFuZ2UoTlVMTCwgLTUsIDEwKTsKKwlSQUlTRSBOT1RJQ0UgJ0VSUk9SOiBh ZGRfcmFuZ2UoTlVMTCwgLTUsIDEwKSBzaG91bGQgaGF2ZSBmYWlsZWQhJzsKKyAgICBFWENFUFRJ T04KKwlXSEVOIE9USEVSUyBUSEVOCisJICAgIFJBSVNFIE5PVElDRSAnU1VDQ0VTUzogYWRkX3Jh bmdlKE5VTEwsIC01LCAxMCkgY29ycmVjdGx5IGVycm9yZWQ6ICUnLCBTUUxFUlJNOworICAgIEVO RDsKK0VORCAkJDsKK05PVElDRTogIFNVQ0NFU1M6IGFkZF9yYW5nZShOVUxMLCAtNSwgMTApIGNv cnJlY3RseSBlcnJvcmVkOiBuZWdhdGl2ZSBiaXRtYXBzZXQgbWVtYmVyIG5vdCBhbGxvd2VkCist LSBTaW5nbGV0b24gbWVtYmVyIGVycm9ycworRE8gJCQKK0JFR0lOCisgICAgQkVHSU4KKwlQRVJG T1JNIHRlc3RfYm1zX3NpbmdsZXRvbl9tZW1iZXIoTlVMTCk7CisJUkFJU0UgTk9USUNFICdFUlJP Ujogc2luZ2xldG9uX21lbWJlcihOVUxMKSBzaG91bGQgaGF2ZSBmYWlsZWQhJzsKKyAgICBFWENF UFRJT04KKwlXSEVOIE9USEVSUyBUSEVOCisJICAgIFJBSVNFIE5PVElDRSAnU1VDQ0VTUzogc2lu Z2xldG9uX21lbWJlcihOVUxMKSBjb3JyZWN0bHkgZXJyb3JlZDogJScsIFNRTEVSUk07CisgICAg RU5EOworRU5EICQkOworTk9USUNFOiAgRVJST1I6IHNpbmdsZXRvbl9tZW1iZXIoTlVMTCkgc2hv dWxkIGhhdmUgZmFpbGVkIQorRE8gJCQKK0JFR0lOCisgICAgQkVHSU4KKwlQRVJGT1JNIHRlc3Rf Ym1zX3NpbmdsZXRvbl9tZW1iZXIodGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDJdKSk7CisJ UkFJU0UgTk9USUNFICdFUlJPUjogc2luZ2xldG9uX21lbWJlcihbMSwyXSkgc2hvdWxkIGhhdmUg ZmFpbGVkISc7CisgICAgRVhDRVBUSU9OCisJV0hFTiBPVEhFUlMgVEhFTgorCSAgICBSQUlTRSBO T1RJQ0UgJ1NVQ0NFU1M6IHNpbmdsZXRvbl9tZW1iZXIoWzEsMl0pIGNvcnJlY3RseSBlcnJvcmVk OiAlJywgU1FMRVJSTTsKKyAgICBFTkQ7CitFTkQgJCQ7CitOT1RJQ0U6ICBTVUNDRVNTOiBzaW5n bGV0b25fbWVtYmVyKFsxLDJdKSBjb3JyZWN0bHkgZXJyb3JlZDogYml0bWFwc2V0IGhhcyBtdWx0 aXBsZSBtZW1iZXJzCistLSBMb29rIGZvciAicmVzdWx0IHwgZiIgZW50cmllcyB3aGljaCBpbmRp Y2F0ZSB0ZXN0IGZhaWx1cmVzLgorLS0gRXJyb3IgY29uZGl0aW9uIHRlc3RzIHNob3VsZCBzaG93 ICJTVUNDRVNTOiIgbWVzc2FnZXMuCitEUk9QIEVYVEVOU0lPTiB0ZXN0X2JpdG1hcHNldDsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvbWVzb24uYnVpbGQgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NDhmN2E0NGViOQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwz MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKwordGVzdF9iaXRtYXBzZXRfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9i aXRtYXBzZXQuYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X2Jp dG1hcHNldF9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFf YXJnczogWworICAgICctLU5BTUUnLCAndGVzdF9iaXRtYXBzZXQnLAorICAgICctLUZJTEVERVND JywgJ3Rlc3RfYml0bWFwc2V0IC0gdGVzdCBjb2RlIGZvciBzcmMvaW5jbHVkZS9ub2Rlcy9iaXRt YXBzZXQuaCcsXSkKK2VuZGlmCisKK3Rlc3RfYml0bWFwc2V0ID0gc2hhcmVkX21vZHVsZSgndGVz dF9iaXRtYXBzZXQnLAorICB0ZXN0X2JpdG1hcHNldF9zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rl c3RfbW9kX2FyZ3MsCispCit0ZXN0X2luc3RhbGxfbGlicyArPSB0ZXN0X2JpdG1hcHNldAorCit0 ZXN0X2luc3RhbGxfZGF0YSArPSBmaWxlcygKKyAgJ3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wnLAor ICAndGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwnLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzog J3Rlc3RfYml0bWFwc2V0JywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisg ICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdz cWwnOiBbCisgICAgICAndGVzdF9iaXRtYXBzZXQnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNldC5z cWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNldC5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiMGIwY2ExYjRhCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9zcWwvdGVz dF9iaXRtYXBzZXQuc3FsCkBAIC0wLDAgKzEsNDAyIEBACitDUkVBVEUgRVhURU5TSU9OIElGIE5P VCBFWElTVFMgdGVzdF9iaXRtYXBzZXQ7CisKKy0tIEJBU0lDIEZVTkNUSU9OQUxJVFkgVEVTVFMK KworLS0gVGVzdCAxOiBCYXNpYyB1dGlsaXR5IGZ1bmN0aW9ucworU0VMRUNUICdOVUxMIGlucHV0 IHRvIGZyb21fYXJyYXknIGFzIHRlc3QsIHRlc3RfYm1zX2Zyb21fYXJyYXkoTlVMTCkgSVMgTlVM TCBhcyByZXN1bHQ7CitTRUxFQ1QgJ0VtcHR5IGFycmF5IHRvIGZyb21fYXJyYXknIGFzIHRlc3Qs IHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbXTo6aW50ZWdlcltdKSBJUyBOVUxMIGFzIHJlc3Vs dDsKK1NFTEVDVCAnTlVMTCBpbnB1dCB0byB0b19hcnJheScgYXMgdGVzdCwgdGVzdF9ibXNfdG9f YXJyYXkoTlVMTCkgSVMgTlVMTCBhcyByZXN1bHQ7CisKKy0tIFRlc3QgMjogU2luZ2xldG9uIG9w ZXJhdGlvbnMKK1NFTEVDVCAnbWFrZV9zaW5nbGV0b24oNDIpJyBhcyB0ZXN0LCB0ZXN0X2Jtc190 b19hcnJheSh0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbig0MikpID0gQVJSQVlbNDJdIGFzIHJlc3Vs dDsKK1NFTEVDVCAnbWFrZV9zaW5nbGV0b24oMCknIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5 KHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKDApKSA9IEFSUkFZWzBdIGFzIHJlc3VsdDsKK1NFTEVD VCAnbWFrZV9zaW5nbGV0b24oMTAwMCknIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3Rf Ym1zX21ha2Vfc2luZ2xldG9uKDEwMDApKSA9IEFSUkFZWzEwMDBdIGFzIHJlc3VsdDsKKworLS0g VGVzdCAzOiBBZGQgbWVtYmVyIG9wZXJhdGlvbnMKK1NFTEVDVCAnYWRkX21lbWJlcihOVUxMLCAx MCknIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2FkZF9tZW1iZXIoTlVMTCwg MTApKSA9IEFSUkFZWzEwXSBhcyByZXN1bHQ7CitTRUxFQ1QgJ2FkZF9tZW1iZXIgY29uc2lzdGVu Y3knIGFzIHRlc3QsIHRlc3RfYm1zX2FkZF9tZW1iZXIoTlVMTCwgMTApID0gdGVzdF9ibXNfbWFr ZV9zaW5nbGV0b24oMTApIGFzIHJlc3VsdDsKK1NFTEVDVCAnYWRkX21lbWJlciB0byBleGlzdGlu ZycgYXMgdGVzdCwgdGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfYWRkX21lbWJlcih0ZXN0X2Jt c19tYWtlX3NpbmdsZXRvbig1KSwgMTApKSA9IEFSUkFZWzUsMTBdIGFzIHJlc3VsdDsKK1NFTEVD VCAnYWRkX21lbWJlciBzb3J0ZWQnIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1z X2FkZF9tZW1iZXIodGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oMTApLCA1KSkgPSBBUlJBWVs1LDEw XSBhcyByZXN1bHQ7CitTRUxFQ1QgJ2FkZF9tZW1iZXIgaWRlbXBvdGVudCcgYXMgdGVzdCwgdGVz dF9ibXNfYWRkX21lbWJlcih0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigxMCksIDEwKSA9IHRlc3Rf Ym1zX21ha2Vfc2luZ2xldG9uKDEwKSBhcyByZXN1bHQ7CisKKy0tIFRlc3QgNDogRGVsZXRlIG1l bWJlciBvcGVyYXRpb25zCitTRUxFQ1QgJ2RlbF9tZW1iZXIgZnJvbSBOVUxMJyBhcyB0ZXN0LCB0 ZXN0X2Jtc19kZWxfbWVtYmVyKE5VTEwsIDEwKSBJUyBOVUxMIGFzIHJlc3VsdDsKK1NFTEVDVCAn ZGVsX21lbWJlciBzaW5nbGV0b24gYmVjb21lcyBlbXB0eScgYXMgdGVzdCwgdGVzdF9ibXNfZGVs X21lbWJlcih0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigxMCksIDEwKSBJUyBOVUxMIGFzIHJlc3Vs dDsKK1NFTEVDVCAnZGVsX21lbWJlciBubyBjaGFuZ2UnIGFzIHRlc3QsIHRlc3RfYm1zX2RlbF9t ZW1iZXIodGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oMTApLCA1KSA9IHRlc3RfYm1zX21ha2Vfc2lu Z2xldG9uKDEwKSBhcyByZXN1bHQ7CitTRUxFQ1QgJ2RlbF9tZW1iZXIgZnJvbSBtaWRkbGUnIGFz IHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2RlbF9tZW1iZXIodGVzdF9ibXNfZnJv bV9hcnJheShBUlJBWVsxLDIsM10pLCAyKSkgPSBBUlJBWVsxLDNdIGFzIHJlc3VsdDsKKworLS0g U0VUIE9QRVJBVElPTlMgVEVTVFMKKworLS0gVGVzdCA1OiBVbmlvbiBvcGVyYXRpb25zCitXSVRI IHRlc3Rfc2V0cyBBUyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsx LDMsNV0pIEFTIHNldF8xMzUsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVszLDUsN10pIEFT IHNldF8zNTcsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pIEFTIHNldF8yNDYK KykKK1NFTEVDVCAndW5pb24gb3ZlcmxhcHBpbmcgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0 X2Jtc190b19hcnJheSh0ZXN0X2Jtc191bmlvbihzZXRfMTM1LCBzZXRfMzU3KSkgPSBBUlJBWVsx LDMsNSw3XSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAndW5p b24gd2l0aCBOVUxMJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1z X3VuaW9uKHNldF8xMzUsIE5VTEwpKSA9IEFSUkFZWzEsMyw1XSBhcyByZXN1bHQKK0ZST00gdGVz dF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAndW5pb24gTlVMTCB3aXRoIE5VTEwnIGFzIHRlc3Qs CisgICAgICAgdGVzdF9ibXNfdW5pb24oTlVMTCwgTlVMTCkgSVMgTlVMTCBhcyByZXN1bHQKK0ZS T00gdGVzdF9zZXRzOworCistLSBUZXN0IDY6IEludGVyc2VjdGlvbiBvcGVyYXRpb25zCitXSVRI IHRlc3Rfc2V0cyBBUyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsx LDMsNV0pIEFTIHNldF8xMzUsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVszLDUsN10pIEFT IHNldF8zNTcsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pIEFTIHNldF8yNDYK KykKK1NFTEVDVCAnaW50ZXJzZWN0IG92ZXJsYXBwaW5nIHNldHMnIGFzIHRlc3QsCisgICAgICAg dGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfaW50ZXJzZWN0KHNldF8xMzUsIHNldF8zNTcpKSA9 IEFSUkFZWzMsNV0gYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1Qg J2ludGVyc2VjdCBkaXNqb2ludCBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX2ludGVy c2VjdChzZXRfMTM1LCBzZXRfMjQ2KSBJUyBOVUxMIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMK K1VOSU9OIEFMTAorU0VMRUNUICdpbnRlcnNlY3Qgd2l0aCBOVUxMJyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYm1zX2ludGVyc2VjdChzZXRfMTM1LCBOVUxMKSBJUyBOVUxMIGFzIHJlc3VsdAorRlJP TSB0ZXN0X3NldHM7CisKKy0tIFRlc3QgNzogRGlmZmVyZW5jZSBvcGVyYXRpb25zCitXSVRIIHRl c3Rfc2V0cyBBUyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMs NV0pIEFTIHNldF8xMzUsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVszLDUsN10pIEFTIHNl dF8zNTcsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pIEFTIHNldF8yNDYKKykK K1NFTEVDVCAnZGlmZmVyZW5jZSBvdmVybGFwcGluZyBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRl c3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2RpZmZlcmVuY2Uoc2V0XzEzNSwgc2V0XzM1NykpID0g QVJSQVlbMV0gYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2Rp ZmZlcmVuY2UgZGlzam9pbnQgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc190b19hcnJh eSh0ZXN0X2Jtc19kaWZmZXJlbmNlKHNldF8xMzUsIHNldF8yNDYpKSA9IEFSUkFZWzEsMyw1XSBh cyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnZGlmZmVyZW5jZSBp ZGVudGljYWwgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19kaWZmZXJlbmNlKHNldF8x MzUsIHNldF8xMzUpIElTIE5VTEwgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0czsKKworLS0gTUVN QkVSU0hJUCBBTkQgQ09NUEFSSVNPTiBURVNUUworCistLSBUZXN0IDg6IE1lbWJlcnNoaXAgdGVz dHMKK1dJVEggdGVzdF9zZXQgQVMgKFNFTEVDVCB0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEs Myw1XSkgQVMgc2V0XzEzNSkKK1NFTEVDVCAnaXNfbWVtYmVyIGV4aXN0aW5nJyBhcyB0ZXN0LCB0 ZXN0X2Jtc19pc19tZW1iZXIoc2V0XzEzNSwgMSkgPSB0cnVlIGFzIHJlc3VsdCBGUk9NIHRlc3Rf c2V0CitVTklPTiBBTEwKK1NFTEVDVCAnaXNfbWVtYmVyIG1pc3NpbmcnIGFzIHRlc3QsIHRlc3Rf Ym1zX2lzX21lbWJlcihzZXRfMTM1LCAyKSA9IGZhbHNlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0 CitVTklPTiBBTEwKK1NFTEVDVCAnaXNfbWVtYmVyIGV4aXN0aW5nIG1pZGRsZScgYXMgdGVzdCwg dGVzdF9ibXNfaXNfbWVtYmVyKHNldF8xMzUsIDMpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0ZXN0 X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ2lzX21lbWJlciBOVUxMIHNldCcgYXMgdGVzdCwgdGVz dF9ibXNfaXNfbWVtYmVyKE5VTEwsIDEpID0gZmFsc2UgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQ7 CisKKy0tIFRlc3QgOTogU2V0IGNhcmRpbmFsaXR5CitTRUxFQ1QgJ251bV9tZW1iZXJzIE5VTEwn IGFzIHRlc3QsIHRlc3RfYm1zX251bV9tZW1iZXJzKE5VTEwpID0gMCBhcyByZXN1bHQ7CitTRUxF Q1QgJ251bV9tZW1iZXJzIHNtYWxsIHNldCcgYXMgdGVzdCwgdGVzdF9ibXNfbnVtX21lbWJlcnMo dGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pKSA9IDMgYXMgcmVzdWx0OworU0VMRUNU ICdudW1fbWVtYmVycyBsYXJnZXIgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19udW1fbWVtYmVycyh0 ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2LDgsMTBdKSkgPSA1IGFzIHJlc3VsdDsKKwor LS0gVGVzdCAxMDogU2V0IGVxdWFsaXR5IGFuZCBjb21wYXJpc29uCitXSVRIIHRlc3Rfc2V0cyBB UyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNl dF8xMzVfYSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9i LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0LDZdKSBBUyBzZXRfMjQ2LAorCXRlc3Rf Ym1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzXSkgQVMgc2V0XzEzCispCitTRUxFQ1QgJ2VxdWFsIE5V TEwgTlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNfZXF1YWwoTlVMTCwgTlVMTCkgPSB0cnVlIGFzIHJl c3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2VxdWFsIE5VTEwgc2V0JyBh cyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChOVUxMLCBzZXRfMTM1X2EpID0gZmFsc2UgYXMgcmVzdWx0 IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnZXF1YWwgc2V0IE5VTEwnIGFzIHRl c3QsIHRlc3RfYm1zX2VxdWFsKHNldF8xMzVfYSwgTlVMTCkgPSBmYWxzZSBhcyByZXN1bHQgRlJP TSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdlcXVhbCBpZGVudGljYWwgc2V0cycgYXMg dGVzdCwgdGVzdF9ibXNfZXF1YWwoc2V0XzEzNV9hLCBzZXRfMTM1X2IpID0gdHJ1ZSBhcyByZXN1 bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdlcXVhbCBkaWZmZXJlbnQgc2V0 cycgYXMgdGVzdCwgdGVzdF9ibXNfZXF1YWwoc2V0XzEzNV9hLCBzZXRfMjQ2KSA9IGZhbHNlIGFz IHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUgTlVMTCBO VUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19jb21wYXJlKE5VTEwsIE5VTEwpID0gMCBhcyByZXN1bHQg RlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdjb21wYXJlIE5VTEwgc2V0JyBhcyB0 ZXN0LCB0ZXN0X2Jtc19jb21wYXJlKE5VTEwsIHNldF8xMykgPSAtMSBhcyByZXN1bHQgRlJPTSB0 ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdjb21wYXJlIHNldCBOVUxMJyBhcyB0ZXN0LCB0 ZXN0X2Jtc19jb21wYXJlKHNldF8xMywgTlVMTCkgPSAxIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0 cworVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUgZXF1YWwgc2V0cycgYXMgdGVzdCwgdGVzdF9i bXNfY29tcGFyZShzZXRfMTMsIHNldF8xMykgPSAwIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cwor VU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUgc3Vic2V0IHN1cGVyc2V0JyBhcyB0ZXN0LCB0ZXN0 X2Jtc19jb21wYXJlKHNldF8xMywgc2V0XzEzNV9hKSA9IC0xIGFzIHJlc3VsdCBGUk9NIHRlc3Rf c2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUgc3VwZXJzZXQgc3Vic2V0JyBhcyB0ZXN0 LCB0ZXN0X2Jtc19jb21wYXJlKHNldF8xMzVfYSwgc2V0XzEzKSA9IDEgYXMgcmVzdWx0IEZST00g dGVzdF9zZXRzOworCistLSBBRFZBTkNFRCBPUEVSQVRJT05TIFRFU1RTCisKKy0tIFRlc3QgMTE6 IFJhbmdlIG9wZXJhdGlvbnMKK1NFTEVDVCAnYWRkX3JhbmdlIGJhc2ljJyBhcyB0ZXN0LCB0ZXN0 X2Jtc190b19hcnJheSh0ZXN0X2Jtc19hZGRfcmFuZ2UoTlVMTCwgNSwgNykpID0gQVJSQVlbNSw2 LDddIGFzIHJlc3VsdDsKK1NFTEVDVCAnYWRkX3JhbmdlIHNpbmdsZSBlbGVtZW50JyBhcyB0ZXN0 LCB0ZXN0X2Jtc190b19hcnJheSh0ZXN0X2Jtc19hZGRfcmFuZ2UoTlVMTCwgNSwgNSkpID0gQVJS QVlbNV0gYXMgcmVzdWx0OworU0VMRUNUICdhZGRfcmFuZ2UgdG8gZXhpc3RpbmcnIGFzIHRlc3Qs IHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2FkZF9yYW5nZSh0ZXN0X2Jtc19mcm9tX2FycmF5 KEFSUkFZWzEsMTBdKSwgNSwgNykpID0gQVJSQVlbMSw1LDYsNywxMF0gYXMgcmVzdWx0OworCist LSBUZXN0IDEyOiBNZW1iZXJzaGlwIHR5cGVzCitTRUxFQ1QgJ21lbWJlcnNoaXAgZW1wdHknIGFz IHRlc3QsIHRlc3RfYm1zX21lbWJlcnNoaXAoTlVMTCkgPSAwIGFzIHJlc3VsdDsKK1NFTEVDVCAn bWVtYmVyc2hpcCBzaW5nbGV0b24nIGFzIHRlc3QsIHRlc3RfYm1zX21lbWJlcnNoaXAodGVzdF9i bXNfZnJvbV9hcnJheShBUlJBWVs0Ml0pKSA9IDEgYXMgcmVzdWx0OworU0VMRUNUICdtZW1iZXJz aGlwIG11bHRpcGxlJyBhcyB0ZXN0LCB0ZXN0X2Jtc19tZW1iZXJzaGlwKHRlc3RfYm1zX2Zyb21f YXJyYXkoQVJSQVlbMSwyLDNdKSkgPSAyIGFzIHJlc3VsdDsKKworLS0gVGVzdCAxMzogU2luZ2xl dG9uIG1lbWJlciBleHRyYWN0aW9uCitTRUxFQ1QgJ3NpbmdsZXRvbl9tZW1iZXIgdmFsaWQnIGFz IHRlc3QsIHRlc3RfYm1zX3NpbmdsZXRvbl9tZW1iZXIodGVzdF9ibXNfZnJvbV9hcnJheShBUlJB WVs0Ml0pKSA9IDQyIGFzIHJlc3VsdDsKKworLS0gVGVzdCAxNDogU2V0IGl0ZXJhdGlvbgorV0lU SCB0ZXN0X3NldCBBUyAoU0VMRUNUIHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbNSwxMCwxNSwy MF0pIEFTIHNldF9udW1iZXJzKQorU0VMRUNUICduZXh0X21lbWJlciBmaXJzdCcgYXMgdGVzdCwg dGVzdF9ibXNfbmV4dF9tZW1iZXIoc2V0X251bWJlcnMsIC0xKSA9IDUgYXMgcmVzdWx0IEZST00g dGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICduZXh0X21lbWJlciBzZWNvbmQnIGFzIHRlc3Qs IHRlc3RfYm1zX25leHRfbWVtYmVyKHNldF9udW1iZXJzLCA1KSA9IDEwIGFzIHJlc3VsdCBGUk9N IHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAnbmV4dF9tZW1iZXIgcGFzdCBlbmQnIGFzIHRl c3QsIHRlc3RfYm1zX25leHRfbWVtYmVyKHNldF9udW1iZXJzLCAyMCkgPSAtMiBhcyByZXN1bHQg RlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ25leHRfbWVtYmVyIGVtcHR5IHNldCcg YXMgdGVzdCwgdGVzdF9ibXNfbmV4dF9tZW1iZXIoTlVMTCwgLTEpID0gLTIgYXMgcmVzdWx0IEZS T00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICdwcmV2X21lbWJlciBsYXN0JyBhcyB0ZXN0 LCB0ZXN0X2Jtc19wcmV2X21lbWJlcihzZXRfbnVtYmVycywgMjEpID0gMjAgYXMgcmVzdWx0IEZS T00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICdwcmV2X21lbWJlciBwZW51bHRpbWF0ZScg YXMgdGVzdCwgdGVzdF9ibXNfcHJldl9tZW1iZXIoc2V0X251bWJlcnMsIDIwKSA9IDE1IGFzIHJl c3VsdCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAncHJldl9tZW1iZXIgcGFzdCBi ZWdpbm5pbmcnIGFzIHRlc3QsIHRlc3RfYm1zX3ByZXZfbWVtYmVyKHNldF9udW1iZXJzLCA1KSA9 IC0yIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAncHJldl9tZW1i ZXIgZW1wdHkgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19wcmV2X21lbWJlcihOVUxMLCAxMDApID0g LTIgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQ7CisKKy0tIFRlc3QgMTU6IEhhc2ggZnVuY3Rpb25z CitXSVRIIHRlc3Rfc2V0cyBBUyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShB UlJBWVsxLDMsNV0pIEFTIHNldF9hLAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVd KSBBUyBzZXRfYiwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkgQVMgc2V0X2MK KykKK1NFTEVDVCAnaGFzaCBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19oYXNoX3ZhbHVlKE5VTEwp ID0gMCBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdoYXNoIGNv bnNpc3RlbmN5JyBhcyB0ZXN0LCB0ZXN0X2Jtc19oYXNoX3ZhbHVlKHNldF9hKSA9IHRlc3RfYm1z X2hhc2hfdmFsdWUoc2V0X2IpIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitT RUxFQ1QgJ2hhc2ggZGlmZmVyZW50IHNldHMnIGFzIHRlc3QsIHRlc3RfYm1zX2hhc2hfdmFsdWUo c2V0X2EpICE9IHRlc3RfYm1zX2hhc2hfdmFsdWUoc2V0X2MpIGFzIHJlc3VsdCBGUk9NIHRlc3Rf c2V0czsKKworLS0gVGVzdCAxNjogU2V0IG92ZXJsYXAKK1dJVEggdGVzdF9zZXRzIEFTICgKKyAg ICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNSwK Kwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzMsNSw3XSkgQVMgc2V0XzM1NywKKwl0ZXN0X2Jt c19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkgQVMgc2V0XzI0NgorKQorU0VMRUNUICdvdmVybGFw IGV4aXN0aW5nJyBhcyB0ZXN0LCB0ZXN0X2Jtc19vdmVybGFwKHNldF8xMzUsIHNldF8zNTcpID0g dHJ1ZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdvdmVybGFw IG5vbmUnIGFzIHRlc3QsIHRlc3RfYm1zX292ZXJsYXAoc2V0XzEzNSwgc2V0XzI0NikgPSBmYWxz ZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdvdmVybGFwIHdp dGggTlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNfb3ZlcmxhcChOVUxMLCBzZXRfMTM1KSA9IGZhbHNl IGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0czsKKworLS0gVGVzdCAxNzogU3Vic2V0IHJlbGF0aW9u cworV0lUSCB0ZXN0X3NldHMgQVMgKAorICAgIFNFTEVDVAorCXRlc3RfYm1zX2Zyb21fYXJyYXko QVJSQVlbMSwzXSkgQVMgc2V0XzEzLAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVd KSBBUyBzZXRfMTM1LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0XSkgQVMgc2V0XzI0 CispCitTRUxFQ1QgJ3N1YnNldCBOVUxMIGlzIHN1YnNldCBvZiBhbGwnIGFzIHRlc3QsIHRlc3Rf Ym1zX2lzX3N1YnNldChOVUxMLCBzZXRfMTM1KSA9IHRydWUgYXMgcmVzdWx0IEZST00gdGVzdF9z ZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnc3Vic2V0IHByb3BlciBzdWJzZXQnIGFzIHRlc3QsIHRl c3RfYm1zX2lzX3N1YnNldChzZXRfMTMsIHNldF8xMzUpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0 ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdzdWJzZXQgaW1wcm9wZXIgc3Vic2V0JyBhcyB0 ZXN0LCB0ZXN0X2Jtc19pc19zdWJzZXQoc2V0XzEzNSwgc2V0XzEzKSA9IGZhbHNlIGFzIHJlc3Vs dCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ3N1YnNldCBkaXNqb2ludCBzZXRz JyBhcyB0ZXN0LCB0ZXN0X2Jtc19pc19zdWJzZXQoc2V0XzEzLCBzZXRfMjQpID0gZmFsc2UgYXMg cmVzdWx0IEZST00gdGVzdF9zZXRzOworCistLSBUZXN0IDE4OiBDb3B5IG9wZXJhdGlvbnMKK1dJ VEggdGVzdF9zZXQgQVMgKFNFTEVDVCB0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1LDdd KSBBUyBvcmlnaW5hbCkKK1NFTEVDVCAnY29weSBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19jb3B5 KE5VTEwpIElTIE5VTEwgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNU ICdjb3B5IGVxdWFsaXR5JyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChvcmlnaW5hbCwgdGVzdF9i bXNfY29weShvcmlnaW5hbCkpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldDsKKworLS0g VGVzdCAxOTogQWRkIG1lbWJlcnMgb3BlcmF0aW9uCitXSVRIIGJhc2Vfc2V0cyBBUyAoCisgICAg U0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDNdKSBBUyBzZXRfMTMsCisJdGVz dF9ibXNfZnJvbV9hcnJheShBUlJBWVs1LDddKSBBUyBzZXRfNTcKKykKK1NFTEVDVCAnYWRkX21l bWJlcnMgb3BlcmF0aW9uJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX3RvX2FycmF5KHRlc3Rf Ym1zX2FkZF9tZW1iZXJzKHNldF8xMywgc2V0XzU3KSkgPSBBUlJBWVsxLDMsNSw3XSBhcyByZXN1 bHQKK0ZST00gYmFzZV9zZXRzOworCistLSBUZXN0IDIwOiBUZXN0IGhhc2ggY29uc2lzdGVuY3kK KworV0lUSCB0ZXN0X3NldHMgQVMgKAorICAgIFNFTEVDVAorCXRlc3RfYm1zX2Zyb21fYXJyYXko QVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1X2EsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsx LDMsNV0pIEFTIHNldF8xMzVfYiwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkg QVMgc2V0XzI0NgorKQorU0VMRUNUICdiaXRtYXBfaGFzaCBOVUxMJyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYml0bWFwX2hhc2goTlVMTCkgPSAwIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1Qg J2JpdG1hcF9oYXNoIGNvbnNpc3RlbmN5JyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX2hh c2goc2V0XzEzNV9hKSA9IHRlc3RfYml0bWFwX2hhc2goc2V0XzEzNV9iKSBhcyByZXN1bHQKK0ZS T00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX2hhc2ggdnMgYm1zX2hhc2hf dmFsdWUnIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaChzZXRfMTM1X2EpID0gdGVz dF9ibXNfaGFzaF92YWx1ZShzZXRfMTM1X2EpIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VO SU9OIEFMTAorU0VMRUNUICdiaXRtYXBfaGFzaCBkaWZmZXJlbnQgc2V0cycgYXMgdGVzdCwKKyAg ICAgICB0ZXN0X2JpdG1hcF9oYXNoKHNldF8xMzVfYSkgIT0gdGVzdF9iaXRtYXBfaGFzaChzZXRf MjQ2KSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzOworCitTRUxFQ1QgJ2JpdG1hcF9oYXNoIFsx LDMsNV0nIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaCh0ZXN0X2Jtc19mcm9tX2Fy cmF5KEFSUkFZWzEsMyw1XSkpIGFzIGhhc2hfdmFsdWU7CitTRUxFQ1QgJ2JpdG1hcF9oYXNoIFsy LDQsNl0nIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaCh0ZXN0X2Jtc19mcm9tX2Fy cmF5KEFSUkFZWzIsNCw2XSkpIGFzIGhhc2hfdmFsdWU7CisKKy0tIFRlc3QgMjE6IGJpdG1hcF9t YXRjaCBmdW5jdGlvbgorCitXSVRIIHRlc3Rfc2V0cyBBUyAoCisgICAgU0VMRUNUCisJdGVzdF9i bXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNldF8xMzVfYSwKKwl0ZXN0X2Jtc19mcm9t X2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9iLAorCXRlc3RfYm1zX2Zyb21fYXJyYXko QVJSQVlbMiw0LDZdKSBBUyBzZXRfMjQ2LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwz XSkgQVMgc2V0XzEzCispCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBOVUxMIE5VTEwgKHNob3VsZCBi ZSAwKScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1hcF9tYXRjaChOVUxMLCBOVUxMKSA9IDAg YXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX21hdGNoIE5VTEwgc2V0IChzaG91 bGQgYmUgMSknIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfbWF0Y2goTlVMTCwgc2V0XzEz NV9hKSA9IDEgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2Jp dG1hcF9tYXRjaCBzZXQgTlVMTCAoc2hvdWxkIGJlIDEpJyBhcyB0ZXN0LAorICAgICAgIHRlc3Rf Yml0bWFwX21hdGNoKHNldF8xMzVfYSwgTlVMTCkgPSAxIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3Nl dHMKK1VOSU9OIEFMTAorU0VMRUNUICdiaXRtYXBfbWF0Y2ggaWRlbnRpY2FsIHNldHMgKHNob3Vs ZCBiZSAwKScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1hcF9tYXRjaChzZXRfMTM1X2EsIHNl dF8xMzVfYikgPSAwIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNU ICdiaXRtYXBfbWF0Y2ggZGlmZmVyZW50IHNldHMgKHNob3VsZCBiZSAxKScgYXMgdGVzdCwKKyAg ICAgICB0ZXN0X2JpdG1hcF9tYXRjaChzZXRfMTM1X2EsIHNldF8yNDYpID0gMSBhcyByZXN1bHQK K0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX21hdGNoIHN1YnNldC9z dXBlcnNldCAoc2hvdWxkIGJlIDEpJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNo KHNldF8xMywgc2V0XzEzNV9hKSA9IDEgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0czsKKworLS0g VGVzdCByZWxhdGlvbnNoaXAgd2l0aCBibXNfZXF1YWwKK1dJVEggdGVzdF9zZXRzIEFTICgKKyAg ICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9h LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1X2IsCisJdGVz dF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pIEFTIHNldF8yNDYKKykKK1NFTEVDVCAnYml0 bWFwX21hdGNoIHZzIGJtc19lcXVhbCAoZXF1YWwgc2V0cyknIGFzIHRlc3QsCisgICAgICAgKHRl c3RfYml0bWFwX21hdGNoKHNldF8xMzVfYSwgc2V0XzEzNV9iKSA9IDApID0gdGVzdF9ibXNfZXF1 YWwoc2V0XzEzNV9hLCBzZXRfMTM1X2IpIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9O IEFMTAorU0VMRUNUICdiaXRtYXBfbWF0Y2ggdnMgYm1zX2VxdWFsIChkaWZmZXJlbnQgc2V0cykn IGFzIHRlc3QsCisgICAgICAgKHRlc3RfYml0bWFwX21hdGNoKHNldF8xMzVfYSwgc2V0XzI0Nikg PSAwKSA9IHRlc3RfYm1zX2VxdWFsKHNldF8xMzVfYSwgc2V0XzI0NikgYXMgcmVzdWx0CitGUk9N IHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCB2cyBibXNfZXF1YWwg KE5VTEwgY2FzZXMpJyBhcyB0ZXN0LAorICAgICAgICh0ZXN0X2JpdG1hcF9tYXRjaChOVUxMLCBO VUxMKSA9IDApID0gdGVzdF9ibXNfZXF1YWwoTlVMTCwgTlVMTCkgYXMgcmVzdWx0CitGUk9NIHRl c3Rfc2V0czsKKworLS0gVGVzdCBzcGVjaWZpYyBtYXRjaCB2YWx1ZXMgZm9yIGRlYnVnZ2luZwor U0VMRUNUICdiaXRtYXBfbWF0Y2ggWzEsMyw1XSB2cyBbMSwzLDVdJyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYml0bWFwX21hdGNoKHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSwgdGVz dF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pKSBhcyBtYXRjaF92YWx1ZTsKK1NFTEVDVCAn Yml0bWFwX21hdGNoIFsxLDMsNV0gdnMgWzIsNCw2XScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jp dG1hcF9tYXRjaCh0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSksIHRlc3RfYm1zX2Zy b21fYXJyYXkoQVJSQVlbMiw0LDZdKSkgYXMgbWF0Y2hfdmFsdWU7CisKKy0tIFRlc3QgZWRnZSBj YXNlcworU0VMRUNUICdiaXRtYXBfbWF0Y2ggZW1wdHkgYXJyYXlzJyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYml0bWFwX21hdGNoKHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbXTo6aW50ZWdlcltd KSwgdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVtdOjppbnRlZ2VyW10pKSA9IDAgYXMgcmVzdWx0 OworCistLSBUZXN0IDIyOiBSYW5kb20gb3BlcmF0aW9ucyBzdHJlc3MgdGVzdAorU0VMRUNUICdy YW5kb20gb3BlcmF0aW9ucycgYXMgdGVzdCwgdGVzdF9yYW5kb21fb3BlcmF0aW9ucygxMjM0NSwg MTAwMCkgPiAwIGFzIHJlc3VsdDsKKworLS0gRVJST1IgQ09ORElUSU9OIFRFU1RTCisKKy0tIFRl c3QgMjM6IEVycm9yIGNvbmRpdGlvbnMgKHRoZXNlIHNob3VsZCBwcm9kdWNlIEVSUk9ScykKKwor LS0gTmVnYXRpdmUgbWVtYmVyIHRlc3RzCitETyAkJAorQkVHSU4KKyAgICBCRUdJTgorCVBFUkZP Uk0gdGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oLTEpOworCVJBSVNFIE5PVElDRSAnRVJST1I6IG1h a2Vfc2luZ2xldG9uKC0xKSBzaG91bGQgaGF2ZSBmYWlsZWQhJzsKKyAgICBFWENFUFRJT04KKwlX SEVOIE9USEVSUyBUSEVOCisJICAgIFJBSVNFIE5PVElDRSAnU1VDQ0VTUzogbWFrZV9zaW5nbGV0 b24oLTEpIGNvcnJlY3RseSBlcnJvcmVkOiAlJywgU1FMRVJSTTsKKyAgICBFTkQ7CitFTkQgJCQ7 CisKK0RPICQkCitCRUdJTgorICAgIEJFR0lOCisJUEVSRk9STSB0ZXN0X2Jtc19pc19tZW1iZXIo TlVMTCwgLTUpOworCVJBSVNFIE5PVElDRSAnRVJST1I6IGlzX21lbWJlcihOVUxMLCAtNSkgc2hv dWxkIGhhdmUgZmFpbGVkISc7CisgICAgRVhDRVBUSU9OCisJV0hFTiBPVEhFUlMgVEhFTgorCSAg ICBSQUlTRSBOT1RJQ0UgJ1NVQ0NFU1M6IGlzX21lbWJlcihOVUxMLCAtNSkgY29ycmVjdGx5IGVy cm9yZWQ6ICUnLCBTUUxFUlJNOworICAgIEVORDsKK0VORCAkJDsKKworRE8gJCQKK0JFR0lOCisg ICAgQkVHSU4KKwlQRVJGT1JNIHRlc3RfYm1zX2FkZF9tZW1iZXIoTlVMTCwgLTEwKTsKKwlSQUlT RSBOT1RJQ0UgJ0VSUk9SOiBhZGRfbWVtYmVyKE5VTEwsIC0xMCkgc2hvdWxkIGhhdmUgZmFpbGVk ISc7CisgICAgRVhDRVBUSU9OCisJV0hFTiBPVEhFUlMgVEhFTgorCSAgICBSQUlTRSBOT1RJQ0Ug J1NVQ0NFU1M6IGFkZF9tZW1iZXIoTlVMTCwgLTEwKSBjb3JyZWN0bHkgZXJyb3JlZDogJScsIFNR TEVSUk07CisgICAgRU5EOworRU5EICQkOworCitETyAkJAorQkVHSU4KKyAgICBCRUdJTgorCVBF UkZPUk0gdGVzdF9ibXNfZGVsX21lbWJlcihOVUxMLCAtMjApOworCVJBSVNFIE5PVElDRSAnRVJS T1I6IGRlbF9tZW1iZXIoTlVMTCwgLTIwKSBzaG91bGQgaGF2ZSBmYWlsZWQhJzsKKyAgICBFWENF UFRJT04KKwlXSEVOIE9USEVSUyBUSEVOCisJICAgIFJBSVNFIE5PVElDRSAnU1VDQ0VTUzogZGVs X21lbWJlcihOVUxMLCAtMjApIGNvcnJlY3RseSBlcnJvcmVkOiAlJywgU1FMRVJSTTsKKyAgICBF TkQ7CitFTkQgJCQ7CisKK0RPICQkCitCRUdJTgorICAgIEJFR0lOCisJUEVSRk9STSB0ZXN0X2Jt c19hZGRfcmFuZ2UoTlVMTCwgLTUsIDEwKTsKKwlSQUlTRSBOT1RJQ0UgJ0VSUk9SOiBhZGRfcmFu Z2UoTlVMTCwgLTUsIDEwKSBzaG91bGQgaGF2ZSBmYWlsZWQhJzsKKyAgICBFWENFUFRJT04KKwlX SEVOIE9USEVSUyBUSEVOCisJICAgIFJBSVNFIE5PVElDRSAnU1VDQ0VTUzogYWRkX3JhbmdlKE5V TEwsIC01LCAxMCkgY29ycmVjdGx5IGVycm9yZWQ6ICUnLCBTUUxFUlJNOworICAgIEVORDsKK0VO RCAkJDsKKworLS0gU2luZ2xldG9uIG1lbWJlciBlcnJvcnMKK0RPICQkCitCRUdJTgorICAgIEJF R0lOCisJUEVSRk9STSB0ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyKE5VTEwpOworCVJBSVNFIE5P VElDRSAnRVJST1I6IHNpbmdsZXRvbl9tZW1iZXIoTlVMTCkgc2hvdWxkIGhhdmUgZmFpbGVkISc7 CisgICAgRVhDRVBUSU9OCisJV0hFTiBPVEhFUlMgVEhFTgorCSAgICBSQUlTRSBOT1RJQ0UgJ1NV Q0NFU1M6IHNpbmdsZXRvbl9tZW1iZXIoTlVMTCkgY29ycmVjdGx5IGVycm9yZWQ6ICUnLCBTUUxF UlJNOworICAgIEVORDsKK0VORCAkJDsKKworRE8gJCQKK0JFR0lOCisgICAgQkVHSU4KKwlQRVJG T1JNIHRlc3RfYm1zX3NpbmdsZXRvbl9tZW1iZXIodGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsx LDJdKSk7CisJUkFJU0UgTk9USUNFICdFUlJPUjogc2luZ2xldG9uX21lbWJlcihbMSwyXSkgc2hv dWxkIGhhdmUgZmFpbGVkISc7CisgICAgRVhDRVBUSU9OCisJV0hFTiBPVEhFUlMgVEhFTgorCSAg ICBSQUlTRSBOT1RJQ0UgJ1NVQ0NFU1M6IHNpbmdsZXRvbl9tZW1iZXIoWzEsMl0pIGNvcnJlY3Rs eSBlcnJvcmVkOiAlJywgU1FMRVJSTTsKKyAgICBFTkQ7CitFTkQgJCQ7CisKKy0tIExvb2sgZm9y ICJyZXN1bHQgfCBmIiBlbnRyaWVzIHdoaWNoIGluZGljYXRlIHRlc3QgZmFpbHVyZXMuCistLSBF cnJvciBjb25kaXRpb24gdGVzdHMgc2hvdWxkIHNob3cgIlNVQ0NFU1M6IiBtZXNzYWdlcy4KKwor RFJPUCBFWFRFTlNJT04gdGVzdF9iaXRtYXBzZXQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC0tMS4wLnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzgxOGIwNzg0ZmUKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LS0xLjAuc3Fs CkBAIC0wLDAgKzEsMTUxIEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rl c3RfYml0bWFwc2V0LS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3Vy Y2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2Ug IkNSRUFURSBFWFRFTlNJT04gdGVzdF9iaXRtYXBzZXQiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVp dAorCistLSBVdGlsaXR5IGZ1bmN0aW9ucworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2Zyb21f YXJyYXkoaW50ZWdlcltdKQorUkVUVVJOUyBieXRlYQorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFO R1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX3RvX2FycmF5KGJ5dGVhKQorUkVU VVJOUyBpbnRlZ2VyW10KK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKKy0tIEJp dG1hcHNldCBBUEkgZnVuY3Rpb25zCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfbWFrZV9zaW5n bGV0b24oaW50ZWdlcikKK1JFVFVSTlMgYnl0ZWEgU1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1F JyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfYWRkX21lbWJlcihieXRl YSwgaW50ZWdlcikKK1JFVFVSTlMgYnl0ZWEKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdF IEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19kZWxfbWVtYmVyKGJ5dGVhLCBpbnRlZ2Vy KQorUkVUVVJOUyBieXRlYQorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JF QVRFIEZVTkNUSU9OIHRlc3RfYm1zX2lzX21lbWJlcihieXRlYSwgaW50ZWdlcikKK1JFVFVSTlMg Ym9vbGVhbgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNU SU9OIHRlc3RfYm1zX251bV9tZW1iZXJzKGJ5dGVhKQorUkVUVVJOUyBpbnRlZ2VyCitBUyAnTU9E VUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfY29w eShieXRlYSkKK1JFVFVSTlMgYnl0ZWEKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7 CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19lcXVhbChieXRlYSwgYnl0ZWEpCitSRVRVUk5T IGJvb2xlYW4KK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5D VElPTiB0ZXN0X2Jtc19jb21wYXJlKGJ5dGVhLCBieXRlYSkKK1JFVFVSTlMgaW50ZWdlcgorQVMg J01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1z X2lzX3N1YnNldChieXRlYSwgYnl0ZWEpCitSRVRVUk5TIGJvb2xlYW4KK0FTICdNT0RVTEVfUEFU SE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19zdWJzZXRfY29t cGFyZShieXRlYSwgYnl0ZWEpCitSRVRVUk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc191bmlvbihieXRlYSwgYnl0 ZWEpCitSRVRVUk5TIGJ5dGVhCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitD UkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfaW50ZXJzZWN0KGJ5dGVhLCBieXRlYSkKK1JFVFVSTlMg Ynl0ZWEKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElP TiB0ZXN0X2Jtc19kaWZmZXJlbmNlKGJ5dGVhLCBieXRlYSkKK1JFVFVSTlMgYnl0ZWEKK0FTICdN T0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19p c19lbXB0eShieXRlYSkKK1JFVFVSTlMgYm9vbGVhbgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFO R1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX21lbWJlcnNoaXAoYnl0ZWEpCitS RVRVUk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFU RSBGVU5DVElPTiB0ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyKGJ5dGVhKQorUkVUVVJOUyBpbnRl Z2VyIFNUUklDVAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZV TkNUSU9OIHRlc3RfYm1zX2dldF9zaW5nbGV0b25fbWVtYmVyKGJ5dGVhLCBpbnRlZ2VyKQorUkVU VVJOUyBpbnRlZ2VyCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUg RlVOQ1RJT04gdGVzdF9ibXNfbmV4dF9tZW1iZXIoYnl0ZWEsIGludGVnZXIpCitSRVRVUk5TIGlu dGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElP TiB0ZXN0X2Jtc19wcmV2X21lbWJlcihieXRlYSwgaW50ZWdlcikKK1JFVFVSTlMgaW50ZWdlcgor QVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf Ym1zX2hhc2hfdmFsdWUoYnl0ZWEpCitSRVRVUk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5B TUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19vdmVybGFwKGJ5dGVh LCBieXRlYSkKK1JFVFVSTlMgYm9vbGVhbgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0Ug QzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX292ZXJsYXBfbGlzdChieXRlYSwgYnl0ZWFb XSkKK1JFVFVSTlMgYm9vbGVhbgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKwor Q1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX25vbmVtcHR5X2RpZmZlcmVuY2UoYnl0ZWEsIGJ5dGVh KQorUkVUVVJOUyBib29sZWFuCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitD UkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfbWVtYmVyX2luZGV4KGJ5dGVhLCBpbnRlZ2VyKQorUkVU VVJOUyBpbnRlZ2VyCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUg RlVOQ1RJT04gdGVzdF9ibXNfYWRkX3JhbmdlKGJ5dGVhLCBpbnRlZ2VyLCBpbnRlZ2VyKQorUkVU VVJOUyBieXRlYQorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZV TkNUSU9OIHRlc3RfYm1zX2FkZF9tZW1iZXJzKGJ5dGVhLCBieXRlYSkKK1JFVFVSTlMgYnl0ZWEK K0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0 X2Jtc19yZXBsYWNlX21lbWJlcnMoYnl0ZWEsIGJ5dGVhKQorUkVUVVJOUyBieXRlYQorQVMgJ01P RFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2pv aW4oYnl0ZWEsIGJ5dGVhKQorUkVUVVJOUyBieXRlYQorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFO R1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYml0bWFwX2hhc2goYnl0ZWEpCitSRVRV Uk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBG VU5DVElPTiB0ZXN0X2JpdG1hcF9tYXRjaChieXRlYSwgYnl0ZWEpCitSRVRVUk5TIGludAorQVMg J01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworLS0gVGVzdCB1dGlsaXR5IGZ1bmN0aW9u cworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfcmFuZG9tX29wZXJhdGlvbnMoaW50ZWdlciwgaW50ZWdl cikKK1JFVFVSTlMgaW50ZWdlciBTVFJJQ1QKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdF IEM7CisKK0NSRUFURSBGVU5DVElPTiBjcmVhdGVfdGVzdF9iaXRtYXBzZXQobWVtYmVycyBpbnRl Z2VyW10pCitSRVRVUk5TIGJ5dGVhCitMQU5HVUFHRSBTUUwKK0FTICQkCisgICAgU0VMRUNUIENB U0UgV0hFTiAkMSBJUyBOVUxMIE9SIGFycmF5X2xlbmd0aCgkMSwgMSkgPSAwCisJICAgVEhFTiBO VUxMOjpieXRlYQorCSAgIEVMU0UgYml0bWFwc2V0X3RvX2J5dGVhKCQxKQorCSAgIEVORDsKKyQk OworCitDT01NRU5UIE9OIEVYVEVOU0lPTiB0ZXN0X2JpdG1hcHNldCBJUyAnVGVzdCBjb2RlIGZv ciBCaXRtYXBzZXQnOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNl dC90ZXN0X2JpdG1hcHNldC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0 X2JpdG1hcHNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMWRj MTUzOTJkNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBz ZXQvdGVzdF9iaXRtYXBzZXQuYwpAQCAtMCwwICsxLDEyMDQgQEAKKy8qCisgKiB0ZXN0X2JpdG1h cHNldC5jCisgKiAgICAgIFRlc3QgbW9kdWxlIGZvciBiaXRtYXBzZXQgZGF0YSBzdHJ1Y3R1cmUK KyAqCisgKiBUaGlzIG1vZHVsZSB0ZXN0cyB0aGUgYml0bWFwc2V0IGltcGxlbWVudGF0aW9uIGlu IFBvc3RncmVTUUwsCisgKiBjb3ZlcmluZyBhbGwgcHVibGljIEFQSSBmdW5jdGlvbnMsIGVkZ2Ug Y2FzZXMsIGFuZCBtZW1vcnkgdXNhZ2UuCisgKgorICogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Jp dG1hcHNldC90ZXN0X2JpdG1hcHNldC5jCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNh dGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCisjaW5jbHVkZSAi dXRpbHMvYXJyYXkuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlz dC5oIgorI2luY2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgorI2luY2x1ZGUgInZhcmF0dC5oIgor CitQR19NT0RVTEVfTUFHSUM7CisKKy8qIFV0aWxpdHkgZnVuY3Rpb25zICovCitQR19GVU5DVElP Tl9JTkZPX1YxKHRlc3RfYm1zX2Zyb21fYXJyYXkpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0 X2Jtc190b19hcnJheSk7CisKKy8qIEJpdG1hcHNldCBBUEkgZnVuY3Rpb25zIGluIG9yZGVyIG9m IGFwcGVhcmFuY2UgaW4gYml0bWFwc2V0LmMgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9i bXNfbWFrZV9zaW5nbGV0b24pOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19hZGRfbWVt YmVyKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfZGVsX21lbWJlcik7CitQR19GVU5D VElPTl9JTkZPX1YxKHRlc3RfYm1zX2lzX21lbWJlcik7CitQR19GVU5DVElPTl9JTkZPX1YxKHRl c3RfYm1zX251bV9tZW1iZXJzKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfY29weSk7 CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX2VxdWFsKTsKK1BHX0ZVTkNUSU9OX0lORk9f VjEodGVzdF9ibXNfY29tcGFyZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX2lzX3N1 YnNldCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX3N1YnNldF9jb21wYXJlKTsKK1BH X0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfdW5pb24pOworUEdfRlVOQ1RJT05fSU5GT19WMSh0 ZXN0X2Jtc19pbnRlcnNlY3QpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19kaWZmZXJl bmNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfaXNfZW1wdHkpOworUEdfRlVOQ1RJ T05fSU5GT19WMSh0ZXN0X2Jtc19tZW1iZXJzaGlwKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVz dF9ibXNfc2luZ2xldG9uX21lbWJlcik7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX2dl dF9zaW5nbGV0b25fbWVtYmVyKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfbmV4dF9t ZW1iZXIpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19wcmV2X21lbWJlcik7CitQR19G VU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX2hhc2hfdmFsdWUpOworUEdfRlVOQ1RJT05fSU5GT19W MSh0ZXN0X2Jtc19vdmVybGFwKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfb3Zlcmxh cF9saXN0KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfbm9uZW1wdHlfZGlmZmVyZW5j ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX21lbWJlcl9pbmRleCk7CitQR19GVU5D VElPTl9JTkZPX1YxKHRlc3RfYm1zX2FkZF9yYW5nZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRl c3RfYm1zX2FkZF9tZW1iZXJzKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfcmVwbGFj ZV9tZW1iZXJzKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfam9pbik7CitQR19GVU5D VElPTl9JTkZPX1YxKHRlc3RfYml0bWFwX2hhc2gpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0 X2JpdG1hcF9tYXRjaCk7CisKKy8qIFRlc3QgdXRpbGl0eSBmdW5jdGlvbnMgKi8KK1BHX0ZVTkNU SU9OX0lORk9fVjEodGVzdF9yYW5kb21fb3BlcmF0aW9ucyk7CisKKyNpZmRlZiBERUJVRworCitz dGF0aWMgdm9pZAorZWxvZ19iaXRtYXBzZXQoaW50IGVsZXZlbCwgY29uc3QgY2hhciAqbGFiZWws IGNvbnN0IEJpdG1hcHNldCAqYm1zKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlpbnQJCQlt ZW1iZXI7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisK KwlpZiAobGFiZWwpCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzOiAiLCBsYWJlbCk7CisK KwlpZiAoIWJtc19pc19lbXB0eShibXMpKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1 ZiwgJ3snKTsKKwkJbWVtYmVyID0gLTE7CisJCXdoaWxlICgobWVtYmVyID0gYm1zX25leHRfbWVt YmVyKGJtcywgbWVtYmVyKSkgPj0gMCkKKwkJeworCQkJaWYgKCFmaXJzdCkKKwkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZidWYsICIsICIpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAi JWQiLCBtZW1iZXIpOworCQkJZmlyc3QgPSBmYWxzZTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcigmYnVmLCAnfScpOworCX0KKwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1 ZiwgIkVNUFRZIik7CisKKwllbG9nKGVsZXZlbCwgIiVzIiwgYnVmLmRhdGEpOworCXBmcmVlKGJ1 Zi5kYXRhKTsKK30KKworI2VuZGlmCisKKy8qCisgKiBVdGlsaXR5IGZ1bmN0aW9ucyB0byBjb252 ZXJ0IGJldHdlZW4gQml0bWFwc2V0IGFuZCBieXRlYQorICogZm9yIHBhc3NpbmcgZGF0YSBiZXR3 ZWVuIFNRTCBhbmQgQyBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgYnl0ZWEgKgorZW5jb2RlX2Jt c190b19ieXRlYShCaXRtYXBzZXQgKmJtcykKK3sKKwlieXRlYQkgICAqcmVzdWx0OworCWludAkJ CWJtc19zaXplOworCisJaWYgKGJtcyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworI2lmZGVm IERFQlVHCisJZWxvZyhOT1RJQ0UsICJTZXJpYWxpemluZyBiaXRtYXBzZXQ6IG53b3Jkcz0lZCwg c2l6ZW9mKGJpdG1hcHdvcmQpPSV6dSIsCisJCSBibXMtPm53b3Jkcywgc2l6ZW9mKGJpdG1hcHdv cmQpKTsKKyNlbmRpZgorCisJYm1zX3NpemUgPSBvZmZzZXRvZihCaXRtYXBzZXQsIHdvcmRzKSAr IGJtcy0+bndvcmRzICogc2l6ZW9mKGJpdG1hcHdvcmQpOworCisjaWZkZWYgREVCVUcKKwllbG9n KE5PVElDRSwgIkNhbGN1bGF0ZWQgYm1zX3NpemU9JWQsIG9mZnNldG9mKEJpdG1hcHNldCx3b3Jk cyk9JXp1IiwKKwkJIGJtc19zaXplLCBvZmZzZXRvZihCaXRtYXBzZXQsIHdvcmRzKSk7CisjZW5k aWYKKworCXJlc3VsdCA9IChieXRlYSAqKSBwYWxsb2MwKFZBUkhEUlNaICsgYm1zX3NpemUpOwor CW1lbWNweShWQVJEQVRBKHJlc3VsdCksIGJtcywgYm1zX3NpemUpOworCVNFVF9WQVJTSVpFKHJl c3VsdCwgVkFSSERSU1ogKyBibXNfc2l6ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0 aWMgQml0bWFwc2V0ICoKK2RlY29kZV9ieXRlYV90b19ibXMoYnl0ZWEgKmRhdGEpCit7CisJQml0 bWFwc2V0ICAqYm1zOworCWludAkJCWJtc19zaXplOworCisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJ cmV0dXJuIE5VTEw7CisKKwlibXNfc2l6ZSA9IFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpOworCisJ aWYgKGJtc19zaXplIDwgb2Zmc2V0b2YoQml0bWFwc2V0LCB3b3JkcykpCisJCXJldHVybiBOVUxM OworCisJYm1zID0gKEJpdG1hcHNldCAqKSBwYWxsb2MoYm1zX3NpemUpOworCW1lbWNweShibXMs IFZBUkRBVEFfQU5ZKGRhdGEpLCBibXNfc2l6ZSk7CisKKwlpZiAoYm1zLT5ud29yZHMgPCAwIHx8 CisJCWJtcy0+bndvcmRzID4gKGJtc19zaXplIC0gb2Zmc2V0b2YoQml0bWFwc2V0LCB3b3Jkcykp IC8gc2l6ZW9mKGJpdG1hcHdvcmQpKQorCXsKKwkJcGZyZWUoYm1zKTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJcmV0dXJuIGJtczsKK30KKworLyoKKyAqIEluZGl2aWR1YWwgdGVzdCBmdW5jdGlv bnMgZm9yIGVhY2ggYml0bWFwc2V0IEFQSSBmdW5jdGlvbgorICovCisKK0RhdHVtCit0ZXN0X2Jt c19hZGRfbWVtYmVyKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYnl0ZWEJICAgKmJtc19kYXRhOwor CWludAkJCW1lbWJlcjsKKwlCaXRtYXBzZXQgICpibXM7CisJQml0bWFwc2V0ICAqcmVzdWx0X2Jt czsKKwlieXRlYQkgICAqcmVzdWx0OworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zID0g TlVMTDsKKwllbHNlCisJeworCQlibXNfZGF0YSA9IFBHX0dFVEFSR19CWVRFQV9QUCgwKTsKKwkJ Ym1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhibXNfZGF0YSk7CisJfQorCisJbWVtYmVyID0gUEdf R0VUQVJHX0lOVDMyKDEpOworCisJcmVzdWx0X2JtcyA9IGJtc19hZGRfbWVtYmVyKGJtcywgbWVt YmVyKTsKKworCXJlc3VsdCA9IGVuY29kZV9ibXNfdG9fYnl0ZWEocmVzdWx0X2Jtcyk7CisKKwlp ZiAoYm1zICYmIGJtcyAhPSByZXN1bHRfYm1zKQorCQlibXNfZnJlZShibXMpOworCWlmIChyZXN1 bHRfYm1zKQorCQlibXNfZnJlZShyZXN1bHRfYm1zKTsKKworCWlmIChyZXN1bHQgPT0gTlVMTCkK KwkJUEdfUkVUVVJOX05VTEwoKTsKKworCVBHX1JFVFVSTl9CWVRFQV9QKHJlc3VsdCk7Cit9CisK K0RhdHVtCit0ZXN0X2Jtc19hZGRfbWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQoreworCWJ5dGVh CSAgICpibXMxX2RhdGEsCisJCQkgICAqYm1zMl9kYXRhOworCUJpdG1hcHNldCAgKmJtczEgPSBO VUxMLAorCQkJICAgKmJtczIgPSBOVUxMOworCUJpdG1hcHNldCAgKnJlc3VsdF9ibXM7CisJYnl0 ZWEJICAgKnJlc3VsdDsKKwljaGFyCSAgICpkYXRhOworCisJaWYgKCFQR19BUkdJU05VTEwoMCkp CisJeworCQlibXMxX2RhdGEgPSBQR19HRVRBUkdfQllURUFfUFAoMCk7CisJCWlmIChWQVJTSVpF X0FOWV9FWEhEUihibXMxX2RhdGEpID4gMCkKKwkJeworCQkJYm1zMSA9IChCaXRtYXBzZXQgKikg cGFsbG9jKFZBUlNJWkVfQU5ZX0VYSERSKGJtczFfZGF0YSkpOworCQkJbWVtY3B5KGJtczEsIFZB UkRBVEFfQU5ZKGJtczFfZGF0YSksIFZBUlNJWkVfQU5ZX0VYSERSKGJtczFfZGF0YSkpOworCQl9 CisJfQorCisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJeworCQlibXMyX2RhdGEgPSBQR19HRVRB UkdfQllURUFfUFAoMSk7CisJCWlmIChWQVJTSVpFX0FOWV9FWEhEUihibXMyX2RhdGEpID4gMCkK KwkJeworCQkJYm1zMiA9IChCaXRtYXBzZXQgKikgcGFsbG9jKFZBUlNJWkVfQU5ZX0VYSERSKGJt czJfZGF0YSkpOworCQkJbWVtY3B5KGJtczIsIFZBUkRBVEFfQU5ZKGJtczJfZGF0YSksIFZBUlNJ WkVfQU5ZX0VYSERSKGJtczJfZGF0YSkpOworCQl9CisJfQorCisJLyogSU1QT1JUQU5UOiBibXNf YWRkX21lbWJlcnMgbW9kaWZpZXMvZnJlZXMgdGhlIGZpcnN0IGFyZ3VtZW50ICovCisJcmVzdWx0 X2JtcyA9IGJtc19hZGRfbWVtYmVycyhibXMxLCBibXMyKTsKKwkvKiBibXMxIGlzIG5vdyBpbnZh bGlkISBEb24ndCBmcmVlIGl0ICovCisKKwlpZiAoYm1zMikKKwkJYm1zX2ZyZWUoYm1zMik7CisK KwlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJcmVzdWx0 ID0gKGJ5dGVhICopIHBhbGxvYyhWQVJIRFJTWiArIHNpemVvZihCaXRtYXBzZXQpICsKKwkJCQkJ CQkgIChyZXN1bHRfYm1zLT5ud29yZHMgLSAxKSAqIHNpemVvZihiaXRtYXB3b3JkKSk7CisJZGF0 YSA9IFZBUkRBVEEocmVzdWx0KTsKKwltZW1jcHkoZGF0YSwgcmVzdWx0X2Jtcywgc2l6ZW9mKEJp dG1hcHNldCkgKworCQkgICAocmVzdWx0X2Jtcy0+bndvcmRzIC0gMSkgKiBzaXplb2YoYml0bWFw d29yZCkpOworCVNFVF9WQVJTSVpFKHJlc3VsdCwgVkFSSERSU1ogKyBzaXplb2YoQml0bWFwc2V0 KSArCisJCQkJKHJlc3VsdF9ibXMtPm53b3JkcyAtIDEpICogc2l6ZW9mKGJpdG1hcHdvcmQpKTsK KwlibXNfZnJlZShyZXN1bHRfYm1zKTsKKworCVBHX1JFVFVSTl9CWVRFQV9QKHJlc3VsdCk7Cit9 CisKK0RhdHVtCit0ZXN0X2Jtc19kZWxfbWVtYmVyKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYnl0 ZWEJICAgKmJtc19kYXRhOworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJaW50MzIJCW1lbWJl cjsKKwlieXRlYQkgICAqcmVzdWx0OworCWNoYXIJICAgKmRhdGE7CisKKwlpZiAoIVBHX0FSR0lT TlVMTCgwKSkKKwl7CisJCWJtc19kYXRhID0gUEdfR0VUQVJHX0JZVEVBX1BQKDApOworCQlpZiAo VkFSU0laRV9BTllfRVhIRFIoYm1zX2RhdGEpID4gMCkKKwkJeworCQkJYm1zID0gKEJpdG1hcHNl dCAqKSBwYWxsb2MoVkFSU0laRV9BTllfRVhIRFIoYm1zX2RhdGEpKTsKKwkJCW1lbWNweShibXMs IFZBUkRBVEFfQU5ZKGJtc19kYXRhKSwgVkFSU0laRV9BTllfRVhIRFIoYm1zX2RhdGEpKTsKKwkJ fQorCX0KKworCW1lbWJlciA9IFBHX0dFVEFSR19JTlQzMigxKTsKKwlibXMgPSBibXNfZGVsX21l bWJlcihibXMsIG1lbWJlcik7CisKKwlpZiAoYm1zID09IE5VTEwgfHwgYm1zX2lzX2VtcHR5KGJt cykpCisJeworCQlpZiAoYm1zKQorCQkJYm1zX2ZyZWUoYm1zKTsKKwkJUEdfUkVUVVJOX05VTEwo KTsKKwl9CisKKwlyZXN1bHQgPSAoYnl0ZWEgKikgcGFsbG9jKFZBUkhEUlNaICsgc2l6ZW9mKEJp dG1hcHNldCkgKworCQkJCQkJCSAgYm1zLT5ud29yZHMgKiBzaXplb2YoYml0bWFwd29yZCkpOwor CWRhdGEgPSBWQVJEQVRBKHJlc3VsdCk7CisJbWVtY3B5KGRhdGEsIGJtcywgc2l6ZW9mKEJpdG1h cHNldCkgKyBibXMtPm53b3JkcyAqIHNpemVvZihiaXRtYXB3b3JkKSk7CisJU0VUX1ZBUlNJWkUo cmVzdWx0LCBWQVJIRFJTWiArIHNpemVvZihCaXRtYXBzZXQpICsKKwkJCQlibXMtPm53b3JkcyAq IHNpemVvZihiaXRtYXB3b3JkKSk7CisJYm1zX2ZyZWUoYm1zKTsKKworCVBHX1JFVFVSTl9CWVRF QV9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19pc19tZW1iZXIoUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlieXRlYQkgICAqYm1zX2RhdGE7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsK KwlpbnQzMgkJbWVtYmVyOworCWJvb2wJCXJlc3VsdDsKKworCWlmICghUEdfQVJHSVNOVUxMKDAp KQorCXsKKwkJYm1zX2RhdGEgPSBQR19HRVRBUkdfQllURUFfUFAoMCk7CisJCWlmIChWQVJTSVpF X0FOWV9FWEhEUihibXNfZGF0YSkgPiAwKQorCQl7CisJCQlibXMgPSAoQml0bWFwc2V0ICopIHBh bGxvYyhWQVJTSVpFX0FOWV9FWEhEUihibXNfZGF0YSkpOworCQkJbWVtY3B5KGJtcywgVkFSREFU QV9BTlkoYm1zX2RhdGEpLCBWQVJTSVpFX0FOWV9FWEhEUihibXNfZGF0YSkpOworCQl9CisJfQor CisJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCXJlc3VsdCA9IGJtc19pc19tZW1iZXIo bWVtYmVyLCBibXMpOworCisJaWYgKGJtcykKKwkJYm1zX2ZyZWUoYm1zKTsKKworCVBHX1JFVFVS Tl9CT09MKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19udW1fbWVtYmVycyhQR19GVU5D VElPTl9BUkdTKQoreworCWJ5dGVhCSAgICpibXNfZGF0YTsKKwlCaXRtYXBzZXQgICpibXMgPSBO VUxMOworCWludAkJCXJlc3VsdDsKKworCWlmIChQR19BUkdJU05VTEwoMCkpCisJCVBHX1JFVFVS Tl9JTlQzMigwKTsKKworCWJtc19kYXRhID0gUEdfR0VUQVJHX0JZVEVBX1BQKDApOworCWlmIChW QVJTSVpFX0FOWV9FWEhEUihibXNfZGF0YSkgPiAwKQorCXsKKwkJYm1zID0gKEJpdG1hcHNldCAq KSBwYWxsb2MoVkFSU0laRV9BTllfRVhIRFIoYm1zX2RhdGEpKTsKKwkJbWVtY3B5KGJtcywgVkFS REFUQV9BTlkoYm1zX2RhdGEpLCBWQVJTSVpFX0FOWV9FWEhEUihibXNfZGF0YSkpOworCX0KKwor CXJlc3VsdCA9IGJtc19udW1fbWVtYmVycyhibXMpOworCisJaWYgKGJtcykKKwkJYm1zX2ZyZWUo Ym1zKTsKKworCVBHX1JFVFVSTl9JTlQzMihyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNf bWFrZV9zaW5nbGV0b24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQzMgkJbWVtYmVyOworCUJp dG1hcHNldCAgKmJtczsKKwlieXRlYQkgICAqcmVzdWx0OworCisJbWVtYmVyID0gUEdfR0VUQVJH X0lOVDMyKDApOworCWJtcyA9IGJtc19tYWtlX3NpbmdsZXRvbihtZW1iZXIpOworCisJcmVzdWx0 ID0gZW5jb2RlX2Jtc190b19ieXRlYShibXMpOworCWJtc19mcmVlKGJtcyk7CisKKwlQR19SRVRV Uk5fQllURUFfUChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfY29weShQR19GVU5DVElP Tl9BUkdTKQoreworCWJ5dGVhCSAgICpibXNfZGF0YTsKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxM OworCUJpdG1hcHNldCAgKmNvcHlfYm1zOworCWJ5dGVhCSAgICpyZXN1bHQ7CisKKwlpZiAoUEdf QVJHSVNOVUxMKDApKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJYm1zX2RhdGEgPSBQR19HRVRB UkdfQllURUFfUFAoMCk7CisJYm1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhibXNfZGF0YSk7CisK Kwljb3B5X2JtcyA9IGJtc19jb3B5KGJtcyk7CisKKwlpZiAoYm1zKQorCQlibXNfZnJlZShibXMp OworCisJcmVzdWx0ID0gZW5jb2RlX2Jtc190b19ieXRlYShjb3B5X2Jtcyk7CisJaWYgKGNvcHlf Ym1zKQorCQlibXNfZnJlZShjb3B5X2Jtcyk7CisKKwlQR19SRVRVUk5fQllURUFfUChyZXN1bHQp OworfQorCitEYXR1bQordGVzdF9ibXNfZXF1YWwoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlieXRl YQkgICAqYm1zMV9kYXRhLAorCQkJICAgKmJtczJfZGF0YTsKKwlCaXRtYXBzZXQgICpibXMxID0g TlVMTCwKKwkJCSAgICpibXMyID0gTlVMTDsKKwlib29sCQlyZXN1bHQ7CisKKwlpZiAoIVBHX0FS R0lTTlVMTCgwKSkKKwl7CisJCWJtczFfZGF0YSA9IFBHX0dFVEFSR19CWVRFQV9QUCgwKTsKKwkJ aWYgKFZBUlNJWkVfQU5ZX0VYSERSKGJtczFfZGF0YSkgPiAwKQorCQl7CisJCQlibXMxID0gKEJp dG1hcHNldCAqKSBwYWxsb2MoVkFSU0laRV9BTllfRVhIRFIoYm1zMV9kYXRhKSk7CisJCQltZW1j cHkoYm1zMSwgVkFSREFUQV9BTlkoYm1zMV9kYXRhKSwgVkFSU0laRV9BTllfRVhIRFIoYm1zMV9k YXRhKSk7CisJCX0KKwl9CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwl7CisJCWJtczJfZGF0 YSA9IFBHX0dFVEFSR19CWVRFQV9QUCgxKTsKKwkJaWYgKFZBUlNJWkVfQU5ZX0VYSERSKGJtczJf ZGF0YSkgPiAwKQorCQl7CisJCQlibXMyID0gKEJpdG1hcHNldCAqKSBwYWxsb2MoVkFSU0laRV9B TllfRVhIRFIoYm1zMl9kYXRhKSk7CisJCQltZW1jcHkoYm1zMiwgVkFSREFUQV9BTlkoYm1zMl9k YXRhKSwgVkFSU0laRV9BTllfRVhIRFIoYm1zMl9kYXRhKSk7CisJCX0KKwl9CisKKwlyZXN1bHQg PSBibXNfZXF1YWwoYm1zMSwgYm1zMik7CisKKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1zMSk7 CisJaWYgKGJtczIpCisJCWJtc19mcmVlKGJtczIpOworCisJUEdfUkVUVVJOX0JPT0wocmVzdWx0 KTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX3VuaW9uKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYnl0 ZWEJICAgKmJtczFfZGF0YSwKKwkJCSAgICpibXMyX2RhdGE7CisJQml0bWFwc2V0ICAqYm1zMSA9 IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJQml0bWFwc2V0ICAqcmVzdWx0X2JtczsKKwli eXRlYQkgICAqcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJeworCQlibXMxX2Rh dGEgPSBQR19HRVRBUkdfQllURUFfUFAoMCk7CisJCWJtczEgPSBkZWNvZGVfYnl0ZWFfdG9fYm1z KGJtczFfZGF0YSk7CisJfQorCisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJeworCQlibXMyX2Rh dGEgPSBQR19HRVRBUkdfQllURUFfUFAoMSk7CisJCWJtczIgPSBkZWNvZGVfYnl0ZWFfdG9fYm1z KGJtczJfZGF0YSk7CisJfQorCisJcmVzdWx0X2JtcyA9IGJtc191bmlvbihibXMxLCBibXMyKTsK KworCWlmIChibXMxKQorCQlibXNfZnJlZShibXMxKTsKKwlpZiAoYm1zMikKKwkJYm1zX2ZyZWUo Ym1zMik7CisKKwlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOwor CisJcmVzdWx0ID0gZW5jb2RlX2Jtc190b19ieXRlYShyZXN1bHRfYm1zKTsKKwlibXNfZnJlZShy ZXN1bHRfYm1zKTsKKworCVBHX1JFVFVSTl9CWVRFQV9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0 ZXN0X2Jtc19tZW1iZXJzaGlwKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYnl0ZWEJICAgKmJtc19k YXRhOworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQk1TX01lbWJlcnNoaXAgcmVzdWx0Owor CisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJUEdfUkVUVVJOX0lOVDMyKEJNU19FTVBUWV9TRVQp OworCisJYm1zX2RhdGEgPSBQR19HRVRBUkdfQllURUFfUFAoMCk7CisJaWYgKFZBUlNJWkVfQU5Z X0VYSERSKGJtc19kYXRhKSA+IDApCisJeworCQlibXMgPSAoQml0bWFwc2V0ICopIHBhbGxvYyhW QVJTSVpFX0FOWV9FWEhEUihibXNfZGF0YSkpOworCQltZW1jcHkoYm1zLCBWQVJEQVRBX0FOWShi bXNfZGF0YSksIFZBUlNJWkVfQU5ZX0VYSERSKGJtc19kYXRhKSk7CisJfQorCisJcmVzdWx0ID0g Ym1zX21lbWJlcnNoaXAoYm1zKTsKKworCWlmIChibXMpCisJCWJtc19mcmVlKGJtcyk7CisKKwlQ R19SRVRVUk5fSU5UMzIoKGludDMyKSByZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfbmV4 dF9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlieXRlYQkgICAqYm1zX2RhdGE7CisJQml0 bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlpbnQzMgkJcHJldm1lbWJlcjsKKwlpbnQJCQlyZXN1bHQ7 CisKKwlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQlQR19SRVRVUk5fSU5UMzIoLTIpOworCisJYm1z X2RhdGEgPSBQR19HRVRBUkdfQllURUFfUFAoMCk7CisJcHJldm1lbWJlciA9IFBHX0dFVEFSR19J TlQzMigxKTsKKworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihibXNfZGF0YSkgPiAwKQorCXsKKwkJ Ym1zID0gKEJpdG1hcHNldCAqKSBwYWxsb2MoVkFSU0laRV9BTllfRVhIRFIoYm1zX2RhdGEpKTsK KwkJbWVtY3B5KGJtcywgVkFSREFUQV9BTlkoYm1zX2RhdGEpLCBWQVJTSVpFX0FOWV9FWEhEUihi bXNfZGF0YSkpOworCX0KKworCXJlc3VsdCA9IGJtc19uZXh0X21lbWJlcihibXMsIHByZXZtZW1i ZXIpOworCisJaWYgKGJtcykKKwkJYm1zX2ZyZWUoYm1zKTsKKworCVBHX1JFVFVSTl9JTlQzMihy ZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfZnJvbV9hcnJheShQR19GVU5DVElPTl9BUkdT KQoreworCUFycmF5VHlwZSAgKmFycmF5OworCWludAkJICAgKm1lbWJlcnM7CisJaW50CQkJbm1l bWJlcnM7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlieXRlYQkgICAqcmVzdWx0OworCWlu dAkJCWk7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJ YXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMCk7CisKKwkvKiBDaGVjayBlbGVtZW50IHR5 cGUgZmlyc3QgKi8KKwlpZiAoQVJSX0VMRU1UWVBFKGFycmF5KSAhPSBJTlQ0T0lEKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfQVJSQVlfU1VCU0NSSVBUX0VSUk9SKSwK KwkJCQkgZXJybXNnKCJpbnRlZ2VyIGFycmF5IGV4cGVjdGVkIikpKTsKKworCS8qIEhhbmRsZSBl bXB0eSBhcnJheXMgLSBBUlJfTkRJTSBjYW4gYmUgMCBmb3IgZW1wdHkgYXJyYXlzICovCisJaWYg KEFSUl9ORElNKGFycmF5KSA9PSAwKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJLyogTm93IGNo ZWNrIGRpbWVuc2lvbnMgKi8KKwlpZiAoQVJSX05ESU0oYXJyYXkpICE9IDEpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9BUlJBWV9TVUJTQ1JJUFRfRVJST1IpLAorCQkJ CSBlcnJtc2coImludGVnZXIgYXJyYXkgZXhwZWN0ZWQiKSkpOworCisJbm1lbWJlcnMgPSBBUlJf RElNUyhhcnJheSlbMF07CisKKwkvKiBEb3VibGUtY2hlY2sgZm9yIGVtcHR5ICovCisJaWYgKG5t ZW1iZXJzID09IDApCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlpZiAoQVJSX0hBU05VTEwoYXJy YXkpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfQVJSQVlfU1VCU0NS SVBUX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJpbnRlZ2VyIGFycmF5IGV4cGVjdGVkIikpKTsKKwor CW1lbWJlcnMgPSAoaW50ICopIEFSUl9EQVRBX1BUUihhcnJheSk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbm1lbWJlcnM7IGkrKykKKwkJYm1zID0gYm1zX2FkZF9tZW1iZXIoYm1zLCBtZW1iZXJzW2ld KTsKKworCXJlc3VsdCA9IGVuY29kZV9ibXNfdG9fYnl0ZWEoYm1zKTsKKwlibXNfZnJlZShibXMp OworCisJUEdfUkVUVVJOX0JZVEVBX1AocmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX3Rv X2FycmF5KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYnl0ZWEJICAgKmJtc19kYXRhOworCUJpdG1h cHNldCAgKmJtcyA9IE5VTEw7CisJQXJyYXlUeXBlICAqcmVzdWx0OworCURhdHVtCSAgICpkYXR1 bXM7CisJaW50CQkJbm1lbWJlcnM7CisJaW50CQkJbWVtYmVyID0gLTE7CisJaW50CQkJaSA9IDA7 CisKKwlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJYm1zX2Rh dGEgPSBQR19HRVRBUkdfQllURUFfUFAoMCk7CisJYm1zID0gZGVjb2RlX2J5dGVhX3RvX2Jtcyhi bXNfZGF0YSk7CisKKwlpZiAoYm1zID09IE5VTEwgfHwgYm1zX2lzX2VtcHR5KGJtcykpCisJewor CQlpZiAoYm1zKQorCQkJYm1zX2ZyZWUoYm1zKTsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9CisK KwlubWVtYmVycyA9IGJtc19udW1fbWVtYmVycyhibXMpOworCWRhdHVtcyA9IChEYXR1bSAqKSBw YWxsb2Mobm1lbWJlcnMgKiBzaXplb2YoRGF0dW0pKTsKKworCXdoaWxlICgobWVtYmVyID0gYm1z X25leHRfbWVtYmVyKGJtcywgbWVtYmVyKSkgPj0gMCkKKwkJZGF0dW1zW2krK10gPSBJbnQzMkdl dERhdHVtKG1lbWJlcik7CisKKwlibXNfZnJlZShibXMpOworCisJcmVzdWx0ID0gY29uc3RydWN0 X2FycmF5KGRhdHVtcywgbm1lbWJlcnMsCisJCQkJCQkJIElOVDRPSUQsIHNpemVvZihpbnQzMiks IHRydWUsICdpJyk7CisKKwlwZnJlZShkYXR1bXMpOworCVBHX1JFVFVSTl9BUlJBWVRZUEVfUChy ZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfaW50ZXJzZWN0KFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJQml0 bWFwc2V0ICAqcmVzdWx0X2JtczsKKwlieXRlYQkgICAqcmVzdWx0OworCisJaWYgKCFQR19BUkdJ U05VTEwoMCkpCisJCWJtczEgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9Q UCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJYm1zMiA9IGRlY29kZV9ieXRlYV90 b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDEpKTsKKworCXJlc3VsdF9ibXMgPSBibXNfaW50ZXJz ZWN0KGJtczEsIGJtczIpOworCisJaWYgKGJtczEpCisJCWJtc19mcmVlKGJtczEpOworCWlmIChi bXMyKQorCQlibXNfZnJlZShibXMyKTsKKworCWlmIChyZXN1bHRfYm1zID09IE5VTEwpCisJCVBH X1JFVFVSTl9OVUxMKCk7CisKKwlyZXN1bHQgPSBlbmNvZGVfYm1zX3RvX2J5dGVhKHJlc3VsdF9i bXMpOworCWJtc19mcmVlKHJlc3VsdF9ibXMpOworCisJUEdfUkVUVVJOX0JZVEVBX1AocmVzdWx0 KTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX2RpZmZlcmVuY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAgICpibXMyID0gTlVMTDsKKwlCaXRtYXBz ZXQgICpyZXN1bHRfYm1zOworCWJ5dGVhCSAgICpyZXN1bHQ7CisKKwlpZiAoIVBHX0FSR0lTTlVM TCgwKSkKKwkJYm1zMSA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDAp KTsKKworCWlmICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMyID0gZGVjb2RlX2J5dGVhX3RvX2Jt cyhQR19HRVRBUkdfQllURUFfUFAoMSkpOworCisJcmVzdWx0X2JtcyA9IGJtc19kaWZmZXJlbmNl KGJtczEsIGJtczIpOworCisJaWYgKGJtczEpCisJCWJtc19mcmVlKGJtczEpOworCWlmIChibXMy KQorCQlibXNfZnJlZShibXMyKTsKKworCWlmIChyZXN1bHRfYm1zID09IE5VTEwpCisJCVBHX1JF VFVSTl9OVUxMKCk7CisKKwlyZXN1bHQgPSBlbmNvZGVfYm1zX3RvX2J5dGVhKHJlc3VsdF9ibXMp OworCWJtc19mcmVlKHJlc3VsdF9ibXMpOworCisJUEdfUkVUVVJOX0JZVEVBX1AocmVzdWx0KTsK K30KKworRGF0dW0KK3Rlc3RfYm1zX2NvbXBhcmUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRt YXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAgICpibXMyID0gTlVMTDsKKwlpbnQJCQlyZXN1bHQ7 CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9IGRlY29kZV9ieXRlYV90b19ibXMo UEdfR0VUQVJHX0JZVEVBX1BQKDApKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMy ID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMSkpOworCisJcmVzdWx0 ID0gYm1zX2NvbXBhcmUoYm1zMSwgYm1zMik7CisKKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1z MSk7CisJaWYgKGJtczIpCisJCWJtc19mcmVlKGJtczIpOworCisJUEdfUkVUVVJOX0lOVDMyKHJl c3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19pc19lbXB0eShQR19GVU5DVElPTl9BUkdTKQor eworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJYm9vbAkJcmVzdWx0OworCisJaWYgKCFQR19B UkdJU05VTEwoMCkpCisJCWJtcyA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVB X1BQKDApKTsKKworCXJlc3VsdCA9IGJtc19pc19lbXB0eShibXMpOworCisJaWYgKGJtcykKKwkJ Ym1zX2ZyZWUoYm1zKTsKKworCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0 ZXN0X2Jtc19pc19zdWJzZXQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMx ID0gTlVMTCwKKwkJCSAgICpibXMyID0gTlVMTDsKKwlib29sCQlyZXN1bHQ7CisKKwlpZiAoIVBH X0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZ VEVBX1BQKDApKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMyID0gZGVjb2RlX2J5 dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMSkpOworCisJcmVzdWx0ID0gYm1zX2lzX3N1 YnNldChibXMxLCBibXMyKTsKKworCWlmIChibXMxKQorCQlibXNfZnJlZShibXMxKTsKKwlpZiAo Ym1zMikKKwkJYm1zX2ZyZWUoYm1zMik7CisKKwlQR19SRVRVUk5fQk9PTChyZXN1bHQpOworfQor CitEYXR1bQordGVzdF9ibXNfc3Vic2V0X2NvbXBhcmUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlC aXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAgICpibXMyID0gTlVMTDsKKwlCTVNfQ29tcGFy aXNvbiByZXN1bHQ7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9IGRlY29kZV9i eXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDApKTsKKworCWlmICghUEdfQVJHSVNOVUxM KDEpKQorCQlibXMyID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMSkp OworCisJcmVzdWx0ID0gYm1zX3N1YnNldF9jb21wYXJlKGJtczEsIGJtczIpOworCisJaWYgKGJt czEpCisJCWJtc19mcmVlKGJtczEpOworCWlmIChibXMyKQorCQlibXNfZnJlZShibXMyKTsKKwor CVBHX1JFVFVSTl9JTlQzMigoaW50MzIpIHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19z aW5nbGV0b25fbWVtYmVyKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zOwor CWludAkJCXJlc3VsdDsKKworCWlmIChQR19BUkdJU05VTEwoMCkpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygiYml0bWFwc2V0IGlzIGVtcHR5IikpKTsKKworCWJtcyA9IGRlY29kZV9ieXRlYV90b19i bXMoUEdfR0VUQVJHX0JZVEVBX1BQKDApKTsKKworCWlmIChibXMgPT0gTlVMTCkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkgZXJybXNnKCJiaXRtYXBzZXQgaXMgZW1wdHkiKSkpOworCisJcmVzdWx0ID0gYm1zX3Np bmdsZXRvbl9tZW1iZXIoYm1zKTsKKwlibXNfZnJlZShibXMpOworCisJUEdfUkVUVVJOX0lOVDMy KHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19nZXRfc2luZ2xldG9uX21lbWJlcihQR19G VU5DVElPTl9BUkdTKQoreworCWJ5dGVhCSAgICpibXNfZGF0YTsKKwlCaXRtYXBzZXQgICpibXMg PSBOVUxMOworCWludDMyCQlkZWZhdWx0X21lbWJlcjsKKwlpbnQJCQltZW1iZXI7CisJYm9vbAkJ c3VjY2VzczsKKworCWlmIChQR19BUkdJU05VTEwoMCkpCisJeworCQlkZWZhdWx0X21lbWJlciA9 IFBHX0dFVEFSR19JTlQzMigxKTsKKwkJUEdfUkVUVVJOX0lOVDMyKGRlZmF1bHRfbWVtYmVyKTsK Kwl9CisKKwlibXNfZGF0YSA9IFBHX0dFVEFSR19CWVRFQV9QUCgwKTsKKwlkZWZhdWx0X21lbWJl ciA9IFBHX0dFVEFSR19JTlQzMigxKTsKKworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihibXNfZGF0 YSkgPT0gMCkKKwkJUEdfUkVUVVJOX0lOVDMyKGRlZmF1bHRfbWVtYmVyKTsKKworCWJtcyA9IGRl Y29kZV9ieXRlYV90b19ibXMoYm1zX2RhdGEpOworCisJLyoKKwkgKiBibXNfZ2V0X3NpbmdsZXRv bl9tZW1iZXIgcmV0dXJucyBib29sIGFuZCBzdG9yZXMgcmVzdWx0IGluIG1lbWJlcgorCSAqIHBv aW50ZXIKKwkgKi8KKwlzdWNjZXNzID0gYm1zX2dldF9zaW5nbGV0b25fbWVtYmVyKGJtcywgJm1l bWJlcik7CisJYm1zX2ZyZWUoYm1zKTsKKworCWlmIChzdWNjZXNzKQorCQlQR19SRVRVUk5fSU5U MzIobWVtYmVyKTsKKwllbHNlCisJCVBHX1JFVFVSTl9JTlQzMihkZWZhdWx0X21lbWJlcik7Cit9 CisKK0RhdHVtCit0ZXN0X2Jtc19wcmV2X21lbWJlcihQR19GVU5DVElPTl9BUkdTKQoreworCWJ5 dGVhCSAgICpibXNfZGF0YTsKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCWludDMyCQlwcmV2 bWVtYmVyOworCWludAkJCXJlc3VsdDsKKworCWlmIChQR19BUkdJU05VTEwoMCkpCisJCVBHX1JF VFVSTl9JTlQzMigtMik7CisKKwlibXNfZGF0YSA9IFBHX0dFVEFSR19CWVRFQV9QUCgwKTsKKwlw cmV2bWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCisJaWYgKFZBUlNJWkVfQU5ZX0VYSERS KGJtc19kYXRhKSA9PSAwKQorCQlQR19SRVRVUk5fSU5UMzIoLTIpOworCisJYm1zID0gZGVjb2Rl X2J5dGVhX3RvX2JtcyhibXNfZGF0YSk7CisKKwlyZXN1bHQgPSBibXNfcHJldl9tZW1iZXIoYm1z LCBwcmV2bWVtYmVyKTsKKwlibXNfZnJlZShibXMpOworCisJUEdfUkVUVVJOX0lOVDMyKHJlc3Vs dCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19vdmVybGFwKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ Qml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJYm9vbAkJcmVz dWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtczEgPSBkZWNvZGVfYnl0ZWFfdG9f Ym1zKFBHX0dFVEFSR19CWVRFQV9QUCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJ Ym1zMiA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDEpKTsKKworCXJl c3VsdCA9IGJtc19vdmVybGFwKGJtczEsIGJtczIpOworCisJaWYgKGJtczEpCisJCWJtc19mcmVl KGJtczEpOworCWlmIChibXMyKQorCQlibXNfZnJlZShibXMyKTsKKworCVBHX1JFVFVSTl9CT09M KHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19vdmVybGFwX2xpc3QoUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCUFycmF5VHlwZSAgKmFycmF5Owor CUxpc3QJICAgKmJpdG1hcHNldF9saXN0ID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCWJvb2wJ CXJlc3VsdDsKKwlEYXR1bQkgICAqZWxlbV9kYXR1bXM7CisJYm9vbAkgICAqZWxlbV9udWxsczsK KwlpbnQJCQllbGVtX2NvdW50OworCWludAkJCWk7CisKKwkvKiBIYW5kbGUgZmlyc3QgYXJndW1l bnQgKHRoZSBiaXRtYXBzZXQpICovCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJUEdfUkVUVVJO X0JPT0woZmFsc2UpOworCisJYm1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllU RUFfUFAoMCkpOworCisJLyogSGFuZGxlIHNlY29uZCBhcmd1bWVudCAoYXJyYXkgb2YgYml0bWFw c2V0cykgKi8KKwlpZiAoUEdfQVJHSVNOVUxMKDEpKQorCXsKKwkJaWYgKGJtcykKKwkJCWJtc19m cmVlKGJtcyk7CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwlhcnJheSA9IFBHX0dF VEFSR19BUlJBWVRZUEVfUCgxKTsKKworCS8qIFZhbGlkYXRlIGFycmF5ICovCisJaWYgKEFSUl9O RElNKGFycmF5KSAhPSAxKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf QVJSQVlfU1VCU0NSSVBUX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJvbmUtZGltZW5zaW9uYWwgYXJy YXkgZXhwZWN0ZWQiKSkpOworCisJaWYgKEFSUl9FTEVNVFlQRShhcnJheSkgIT0gQllURUFPSUQp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRD SCksCisJCQkJIGVycm1zZygiYnl0ZWEgYXJyYXkgZXhwZWN0ZWQiKSkpOworCisJLyogRGVjb25z dHJ1Y3QgdGhlIGFycmF5ICovCisJZGVjb25zdHJ1Y3RfYXJyYXkoYXJyYXksCisJCQkJCSAgQllU RUFPSUQsIC0xLCBmYWxzZSwgJ2knLAorCQkJCQkgICZlbGVtX2RhdHVtcywgJmVsZW1fbnVsbHMs ICZlbGVtX2NvdW50KTsKKworCS8qIENvbnZlcnQgZWFjaCBieXRlYSBlbGVtZW50IHRvIGEgQml0 bWFwc2V0IGFuZCBhZGQgdG8gbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBlbGVtX2NvdW50OyBp KyspCisJeworCQlCaXRtYXBzZXQgICpsaXN0X2JtcyA9IE5VTEw7CisKKwkJaWYgKCFlbGVtX251 bGxzW2ldKQorCQl7CisJCQlieXRlYQkgICAqZWxlbV9ieXRlYSA9IERhdHVtR2V0Qnl0ZWFQKGVs ZW1fZGF0dW1zW2ldKTsKKworCQkJbGlzdF9ibXMgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKGVsZW1f Ynl0ZWEpOworCQl9CisKKwkJLyogQWRkIHRvIGxpc3QgKGV2ZW4gaWYgTlVMTCkgKi8KKwkJYml0 bWFwc2V0X2xpc3QgPSBsYXBwZW5kKGJpdG1hcHNldF9saXN0LCBsaXN0X2Jtcyk7CisJfQorCisJ LyogQ2FsbCB0aGUgYWN0dWFsIGJtc19vdmVybGFwX2xpc3QgZnVuY3Rpb24gKi8KKwlyZXN1bHQg PSBibXNfb3ZlcmxhcF9saXN0KGJtcywgYml0bWFwc2V0X2xpc3QpOworCisJLyogQ2xlYW4gdXAg Ki8KKwlpZiAoYm1zKQorCQlibXNfZnJlZShibXMpOworCisJLyogRnJlZSBhbGwgYml0bWFwc2V0 cyBpbiB0aGUgbGlzdCAqLworCWZvcmVhY2gobGMsIGJpdG1hcHNldF9saXN0KQorCXsKKwkJQml0 bWFwc2V0ICAqbGlzdF9ibXMgPSAoQml0bWFwc2V0ICopIGxmaXJzdChsYyk7CisKKwkJaWYgKGxp c3RfYm1zKQorCQkJYm1zX2ZyZWUobGlzdF9ibXMpOworCX0KKwlsaXN0X2ZyZWUoYml0bWFwc2V0 X2xpc3QpOworCisJLyogRnJlZSBhcnJheSBkZWNvbnN0cnVjdGlvbiByZXN1bHRzICovCisJcGZy ZWUoZWxlbV9kYXR1bXMpOworCXBmcmVlKGVsZW1fbnVsbHMpOworCisJUEdfUkVUVVJOX0JPT0wo cmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX25vbmVtcHR5X2RpZmZlcmVuY2UoUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAgICpibXMyID0g TlVMTDsKKwlib29sCQlyZXN1bHQ7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9 IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDApKTsKKworCWlmICghUEdf QVJHSVNOVUxMKDEpKQorCQlibXMyID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllU RUFfUFAoMSkpOworCisJcmVzdWx0ID0gYm1zX25vbmVtcHR5X2RpZmZlcmVuY2UoYm1zMSwgYm1z Mik7CisKKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1zMSk7CisJaWYgKGJtczIpCisJCWJtc19m cmVlKGJtczIpOworCisJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3Rf Ym1zX21lbWJlcl9pbmRleChQR19GVU5DVElPTl9BUkdTKQoreworCWJ5dGVhCSAgICpibXNfZGF0 YTsKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCWludDMyCQltZW1iZXI7CisJaW50CQkJcmVz dWx0OworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJUEdfUkVUVVJOX0lOVDMyKC0xKTsKKwor CWJtc19kYXRhID0gUEdfR0VUQVJHX0JZVEVBX1BQKDApOworCW1lbWJlciA9IFBHX0dFVEFSR19J TlQzMigxKTsKKworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihibXNfZGF0YSkgPT0gMCkKKwkJUEdf UkVUVVJOX0lOVDMyKC0xKTsKKworCWJtcyA9IGRlY29kZV9ieXRlYV90b19ibXMoYm1zX2RhdGEp OworCisJcmVzdWx0ID0gYm1zX21lbWJlcl9pbmRleChibXMsIG1lbWJlcik7CisJYm1zX2ZyZWUo Ym1zKTsKKworCVBHX1JFVFVSTl9JTlQzMihyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNf YWRkX3JhbmdlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsK KwlpbnQzMgkJbG93ZXIsCisJCQkJdXBwZXI7CisJYnl0ZWEJICAgKnJlc3VsdDsKKworCWlmICgh UEdfQVJHSVNOVUxMKDApKQorCQlibXMgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19C WVRFQV9QUCgwKSk7CisKKwlsb3dlciA9IFBHX0dFVEFSR19JTlQzMigxKTsKKwl1cHBlciA9IFBH X0dFVEFSR19JTlQzMigyKTsKKworCS8qIENoZWNrIGZvciBpbnZhbGlkIHJhbmdlICovCisJaWYg KHVwcGVyIDwgbG93ZXIpCisJeworCQlpZiAoYm1zKQorCQkJYm1zX2ZyZWUoYm1zKTsKKwkJUEdf UkVUVVJOX05VTEwoKTsKKwl9CisKKwlibXMgPSBibXNfYWRkX3JhbmdlKGJtcywgbG93ZXIsIHVw cGVyKTsKKworCXJlc3VsdCA9IGVuY29kZV9ibXNfdG9fYnl0ZWEoYm1zKTsKKwlpZiAoYm1zKQor CQlibXNfZnJlZShibXMpOworCisJUEdfUkVUVVJOX0JZVEVBX1AocmVzdWx0KTsKK30KKworRGF0 dW0KK3Rlc3RfYm1zX3JlcGxhY2VfbWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQoreworCUJpdG1h cHNldCAgKmJtczEgPSBOVUxMLAorCQkJICAgKmJtczIgPSBOVUxMOworCUJpdG1hcHNldCAgKnJl c3VsdF9ibXM7CisJYnl0ZWEJICAgKnJlc3VsdDsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQor CQlibXMxID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMCkpOworCisJ aWYgKCFQR19BUkdJU05VTEwoMSkpCisJCWJtczIgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dF VEFSR19CWVRFQV9QUCgxKSk7CisKKwkvKiBJTVBPUlRBTlQ6IGJtc19yZXBsYWNlX21lbWJlcnMg bW9kaWZpZXMvZnJlZXMgdGhlIGZpcnN0IGFyZ3VtZW50ICovCisJcmVzdWx0X2JtcyA9IGJtc19y ZXBsYWNlX21lbWJlcnMoYm1zMSwgYm1zMik7CisJLyogYm1zMSBpcyBub3cgaW52YWxpZCwgZG9u J3QgZnJlZSBpdCAqLworCisJaWYgKGJtczIpCisJCWJtc19mcmVlKGJtczIpOworCisJaWYgKHJl c3VsdF9ibXMgPT0gTlVMTCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCXJlc3VsdCA9IGVuY29k ZV9ibXNfdG9fYnl0ZWEocmVzdWx0X2Jtcyk7CisJYm1zX2ZyZWUocmVzdWx0X2Jtcyk7CisKKwlQ R19SRVRVUk5fQllURUFfUChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfam9pbihQR19G VU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAorCQkJICAgKmJtczIg PSBOVUxMOworCUJpdG1hcHNldCAgKnJlc3VsdF9ibXM7CisJYnl0ZWEJICAgKnJlc3VsdDsKKwor CWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMxID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19H RVRBUkdfQllURUFfUFAoMCkpOworCisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJCWJtczIgPSBk ZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgxKSk7CisKKwkvKiBJTVBPUlRB TlQ6IGJtc19qb2luIG1vZGlmaWVzL2ZyZWVzIHRoZSBmaXJzdCBhcmd1bWVudCAqLworCXJlc3Vs dF9ibXMgPSBibXNfam9pbihibXMxLCBibXMyKTsKKwkvKiBibXMxIGlzIG5vdyBpbnZhbGlkISBE b24ndCBmcmVlIGl0ICovCisKKwlpZiAoYm1zMikKKwkJYm1zX2ZyZWUoYm1zMik7CisKKwlpZiAo cmVzdWx0X2JtcyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJcmVzdWx0ID0gZW5j b2RlX2Jtc190b19ieXRlYShyZXN1bHRfYm1zKTsKKwlibXNfZnJlZShyZXN1bHRfYm1zKTsKKwor CVBHX1JFVFVSTl9CWVRFQV9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19oYXNoX3Zh bHVlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwl1aW50 MzIJCWhhc2hfcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtcyA9IGRlY29k ZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDApKTsKKworCWhhc2hfcmVzdWx0ID0g Ym1zX2hhc2hfdmFsdWUoYm1zKTsKKworCWlmIChibXMpCisJCWJtc19mcmVlKGJtcyk7CisKKwlQ R19SRVRVUk5fSU5UMzIoaGFzaF9yZXN1bHQpOworfQorCitEYXR1bQordGVzdF9iaXRtYXBfaGFz aChQR19GVU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQml0bWFw c2V0ICAqYm1zX3B0cjsKKwl1aW50MzIJCWhhc2hfcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05V TEwoMCkpCisJCWJtcyA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDAp KTsKKworCWJtc19wdHIgPSBibXM7CisKKwkvKiBDYWxsIGJpdG1hcF9oYXNoICovCisJaGFzaF9y ZXN1bHQgPSBiaXRtYXBfaGFzaCgmYm1zX3B0ciwgc2l6ZW9mKEJpdG1hcHNldCAqKSk7CisKKwkv KiBDbGVhbiB1cCAqLworCWlmICghUEdfQVJHSVNOVUxMKDApICYmIGJtc19wdHIpCisJCWJtc19m cmVlKGJtc19wdHIpOworCisJUEdfUkVUVVJOX0lOVDMyKGhhc2hfcmVzdWx0KTsKK30KKworRGF0 dW0KK3Rlc3RfYml0bWFwX21hdGNoKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAq Ym1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJQml0bWFwc2V0ICAqYm1zX3B0cjEs CisJCQkgICAqYm1zX3B0cjI7CisJaW50CQkJbWF0Y2hfcmVzdWx0OworCisJaWYgKCFQR19BUkdJ U05VTEwoMCkpCisJCWJtczEgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9Q UCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJYm1zMiA9IGRlY29kZV9ieXRlYV90 b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDEpKTsKKworCS8qIFNldCB1cCBwb2ludGVycyB0byB0 aGUgQml0bWFwc2V0cyAqLworCWJtc19wdHIxID0gYm1zMTsKKwlibXNfcHRyMiA9IGJtczI7CisK KwkvKiBDYWxsIGJpdG1hcF9tYXRjaCB3aXRoIGFkZHJlc3NlcyBvZiB0aGUgQml0bWFwc2V0IHBv aW50ZXJzICovCisJbWF0Y2hfcmVzdWx0ID0gYml0bWFwX21hdGNoKCZibXNfcHRyMSwgJmJtc19w dHIyLCBzaXplb2YoQml0bWFwc2V0ICopKTsKKworCS8qIENsZWFuIHVwICovCisJaWYgKGJtczEp CisJCWJtc19mcmVlKGJtczEpOworCWlmIChibXMyKQorCQlibXNfZnJlZShibXMyKTsKKworCVBH X1JFVFVSTl9JTlQzMihtYXRjaF9yZXN1bHQpOworfQorCitEYXR1bQordGVzdF9yYW5kb21fb3Bl cmF0aW9ucyhQR19GVU5DVElPTl9BUkdTKQoreworCXBnX3Bybmdfc3RhdGUgc3RhdGU7CisJaW50 MzIJCXNlZWQ7CisJaW50MzIJCW51bV9vcHM7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlp bnQJCQlvcCwKKwkJCQltZW1iZXI7CisJaW50CQkJdG90YWxfb3BzID0gMDsKKworCXNlZWQgPSBQ R19HRVRBUkdfSU5UMzIoMCk7CisJbnVtX29wcyA9IFBHX0dFVEFSR19JTlQzMigxKTsKKworCXBn X3Bybmdfc2VlZCgmc3RhdGUsICh1aW50NjQpIHNlZWQpOworCisJZm9yIChpbnQgaSA9IDA7IGkg PCBudW1fb3BzOyBpKyspCisJeworCQlvcCA9IHBnX3BybmdfdWludDMyKCZzdGF0ZSkgJSAzOwkv KiAwPWFkZCwgMT1kZWxldGUsIDI9dGVzdCAqLworCQltZW1iZXIgPSBwZ19wcm5nX3VpbnQzMigm c3RhdGUpICUgMTAwMDsKKworCQlzd2l0Y2ggKG9wKQorCQl7CisJCQljYXNlIDA6CQkJCS8qIGFk ZCAqLworCQkJCWJtcyA9IGJtc19hZGRfbWVtYmVyKGJtcywgbWVtYmVyKTsKKwkJCQl0b3RhbF9v cHMrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToJCQkJLyogZGVsZXRlICovCisJCQkJaWYgKGJt cyAhPSBOVUxMKQorCQkJCXsKKwkJCQkJYm1zID0gYm1zX2RlbF9tZW1iZXIoYm1zLCBtZW1iZXIp OworCQkJCQl0b3RhbF9vcHMrKzsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CQkJCS8q IHRlc3QgbWVtYmVyc2hpcCAqLworCQkJCWlmIChibXMgIT0gTlVMTCkKKwkJCQl7CisJCQkJCWJt c19pc19tZW1iZXIobWVtYmVyLCBibXMpOworCQkJCQl0b3RhbF9vcHMrKzsKKwkJCQl9CisJCQkJ YnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYm1zKQorCQlibXNfZnJlZShibXMpOworCisJUEdfUkVU VVJOX0lOVDMyKHRvdGFsX29wcyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjhkMDJlYzhiZjBhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5jb250cm9sCkBAIC0wLDAg KzEsNCBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIEJpdG1hcHNldCcKK2RlZmF1bHRfdmVy c2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0X2JpdG1hcHNldCcK K3JlbG9jYXRhYmxlID0gdHJ1ZQotLSAKMi40OS4wCgo= --68c9b4c7_2dbf4bf6_6415--