Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vSgc0-003b15-1E for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 19:09:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vSgbz-001Dfl-07 for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 19:09:31 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vSgby-001Dfc-10 for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 19:09:31 +0000 Received: from mail-oi1-x22f.google.com ([2607:f8b0:4864:20::22f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vSgbv-003nvn-2s for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 19:09:29 +0000 Received: by mail-oi1-x22f.google.com with SMTP id 5614622812f47-45090ef26c6so1361922b6e.2 for ; Mon, 08 Dec 2025 11:09:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765220968; x=1765825768; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=zMdRvMQ7RMc8w9PKWz2NsBEmNx9QJQtzyDtIEBE8Ty0=; b=Bq3KKlGjlV3h6lvIuZveM2CU1OahBIp2DWF0FEa9e8s8F52fKgEYRJpBS+zdk4GBSE ps+lFLP+5X1gZ+pKtgrN7K5Zmlts01LLTJhuOJP0lLIllfI/Zwiz7/jiskmz+/zGUY6z 5qUbJYSXRQoBR/hle84VYo2kdwQdIIvMsL5oaMu5QDCKBPaihNvmidpaBLPk2Xtev5Cm 2k85/VjZ1T37HkMJ177QDkYrtW1w53UfUc3MGcSl03KU5a5dnJy7/O2tWC0pm1oc+YOC N0G9JmsNdrU0y2+hCMPtyIWRdmOIg9dV2aIjIqgHa70SIKxnv/eit5mv4nI3cUcSqn8k Pl1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765220968; x=1765825768; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=zMdRvMQ7RMc8w9PKWz2NsBEmNx9QJQtzyDtIEBE8Ty0=; b=DKauahA6ZiXXu7QUzlvrBt2H4XqKiBy0Hqut125vHixSThBGr5wkhAuoYjuULp1d7Y rbZgIaQSm3Na/AGKTsfF8GMyDc6F//vkwLfe64HCxVHslKKiENzboiDpLBImpuIg5EHz aqCGibQewPfdwsQlksXzHz7B2nRnNbcM+UyS7GcswhGJSyxVIdAu0Qs2V+MXaG6Z8pGa D2FgHcezCN36ZYbwx7FtFRMqVgNHAvRbPxcggprrU3ciE/2ov03eRiMyfTjgan+5KqIW Femfml7tOGwjGbfvBEbu/HWphNCiOjXGJB4ppBcIPRlQC8pixjRHIdNLpM8GMOW0goGJ BObw== X-Forwarded-Encrypted: i=1; AJvYcCX2GbhOGQlkeDRLfcGNJxQyYfCQHZJpZhA7H/N11IYh4IN3hIP9uheYwcYqAD/INFLoYSdE2bgfNonnxYse@lists.postgresql.org X-Gm-Message-State: AOJu0YzYw6DxSvGy7D+Inu+91VCX0o1nMhQgkeApm66lDaq8vVNBTH4Z GV2yX9syZxvk1rvMrVzdMu5IraW6u2Moj8jofAKk329m3eTnGX+DAFv0AUC9lwLPgwWjW/WnBRx +UzsHKXJXTh3bM0sx3M0pg9uDtjLeBZQ= X-Gm-Gg: ASbGnctNWiBx5M7naJlbUo90CFotzy8pgAYNxWJLGN7Hg6Cg+qtJDMqtx+r7SRm+DAF Na8iUgu7B8BGDiRB0pbbEwbCdn10mjn8IZ7UqooxMELSxHTJ5uZg7aPZHuGjyfMk1XCYx8xZGPy r1mS20LLbyeAT5vzrOioDfcsA2T+1qQ/0V0HIQf7UmVcIqp2FQFHP4i31DcLAzCPuxI7quFxB9b EG7W2MbsMR7PFBXWZVgaboPI+z70YtWWX/WdoYN12OeNuCOmpVi3jd3+By4qUnXWcZg8zGeQyIl N22AAA== X-Google-Smtp-Source: AGHT+IGvMz31gj9rZlXe6Wv2GeWnDTwiBE7zf3NEIc594xgkyVG8j7/9oCwI3ieXi2ICu428u7+OrREu8hry+zPRpCk= X-Received: by 2002:a05:6808:219d:b0:450:4367:111 with SMTP id 5614622812f47-4539e0f3246mr2818468b6e.66.1765220967753; Mon, 08 Dec 2025 11:09:27 -0800 (PST) MIME-Version: 1.0 References: <4FEEC2B8-D9CF-4BD0-AA7E-44CE3E27ADD8@gmail.com> <5EC13E39-B41E-464A-B382-0ACEB18A15BB@gmail.com> In-Reply-To: From: Sami Imseih Date: Mon, 8 Dec 2025 13:09:14 -0600 X-Gm-Features: AQt7F2qIgy0HRPqPzVH8MUhzSymjCeQfVR_0BCwg87UMpwiVIBXtmMdZVSl_iYA Message-ID: Subject: Re: [Proposal] Adding callback support for custom statistics kinds To: Michael Paquier Cc: Chao Li , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000bbc2a5064575885f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bbc2a5064575885f Content-Type: text/plain; charset="UTF-8" > Yes, thanks. Structurally, this is better and more flexible than what > we had originally, and I have noticed that you have copied the > original files while adding more comments and renaming a bit things: > the structure of the functions was exactly the same. Anyway, I have > worked on that for a good portion of the day, splitting the module > drop and the new module into two commits, and applied the result after > tweaking quite a few things in terms of names and comments (no > pgstat_*, a bit more "Var" and "Fixed", etc.), applying a much more > consistent set of names across the board for the functions and the > structures. This cleanup part is moved out of the way now, so that > you ease the introduction of the next pieces you are proposing. Thanks for getting these committed! I rebased the custom callbacks patch in v5. One very minor thing from the earlier commits that I corrected here is the test for entry 2 after a clean restart. -is($result, "entry1|2", "variable-sized stats persist after clean restart"); +is($result, "entry1|2|Test entry 1", "variable-sized stats persist after clean restart"); + +$result = $node->safe_psql('postgres', q(select * from test_custom_stats_var_report('entry2'))); +is($result, "entry2|3|Test entry 2", "variable-sized stats persist after clean restart"); + -- Sami Imseih Amazon Web Services (AWS) --000000000000bbc2a5064575885f Content-Type: application/octet-stream; name="v5-0001-Allow-cumulative-statistics-to-serialize-auxiliar.patch" Content-Disposition: attachment; filename="v5-0001-Allow-cumulative-statistics-to-serialize-auxiliar.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mixiwtdz0 RnJvbSA1ZGY2YzJkMTFjYTFhMDVhMWE1YWFhM2NhZWNiNjYzODY2NGU0OGEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2ltc2VpaEBhbWF6b24uY29tPgpEYXRl OiBNb24sIDEwIE5vdiAyMDI1IDAwOjAzOjQxIC0wNjAwClN1YmplY3Q6IFtQQVRDSCB2NSAxLzFd IEFsbG93IGN1bXVsYXRpdmUgc3RhdGlzdGljcyB0byBzZXJpYWxpemUgYXV4aWxpYXJ5CiBkYXRh IHRvIGRpc2suCgpDdW11bGF0aXZlIFN0YXRpc3RpY3Mga2luZHMgY2FuIG5vdyB3cml0ZSBhZGRp dGlvbmFsIHBlci1lbnRyeSBkYXRhIHRvCnRoZSBzdGF0aXN0aWNzIGZpbGUgdGhhdCBkb2Vzbid0 IGZpdCBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWZ1bApmb3Igc3RhdGlzdGljcyB3aXRo IHZhcmlhYmxlLWxlbmd0aCBhdXhpbGlhcnkgZGF0YS4KClRocmVlIG5ldyBvcHRpb25hbCBjYWxs YmFja3MgYXJlIGFkZGVkIHRvIFBnU3RhdF9LaW5kSW5mbzoKCiogdG9fc2VyaWFsaXplZF9leHRy YV9zdGF0czogd3JpdGVzIGF1eGlsaWFyeSBkYXRhIGZvciBhbiBlbnRyeQoqIGZyb21fc2VyaWFs aXplZF9leHRyYV9zdGF0czogcmVhZHMgYXV4aWxpYXJ5IGRhdGEgZm9yIGFuIGVudHJ5CiogZW5k X2V4dHJhX3N0YXRzOiBwZXJmb3JtcyBjbGVhbnVwIGFmdGVyIHJlYWQvd3JpdGUvZGlzY2FyZCBv cGVyYXRpb25zCgpBbGwgdGhyZWUgY2FsbGJhY2tzIG11c3QgYmUgcHJvdmlkZWQgdG9nZXRoZXIg dG8gZW5zdXJlIHRoZSByZWFkZXIKY29uc3VtZXMgZXhhY3RseSB3aGF0IHRoZSB3cml0ZXIgcHJv ZHVjZXMuIFRoZSBlbmRfZXh0cmFfc3RhdHMgY2FsbGJhY2sKaXMgaW52b2tlZCBhZnRlciBwcm9j ZXNzaW5nIGFsbCBlbnRyaWVzIG9mIGEga2luZCwgYWxsb3dpbmcgZXh0ZW5zaW9ucwp0byBjbG9z ZSBmaWxlIGhhbmRsZXMgYW5kIGNsZWFuIHVwIHJlc291cmNlcy4KClRlc3RzIGFyZSBhbHNvIGFk ZGVkIHRvIHRlc3RfY3VzdG9tX3N0YXRzLnBsCgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0 Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0FBNVJaMHM5U0RPdStaNnZlb0pDSFdrK2tEZVRr dEF0Qy1LWTlmUTlaNkJKZERVaXJRQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvcGdzdGF0LmMgICAgICAgICAgIHwgIDg5ICsrKystCiBzcmMvaW5jbHVkZS91 dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCAgICAgICAgICAgfCAgMzcgKysKIC4uLi90ZXN0X2N1c3Rv bV9zdGF0cy90LzAwMV9jdXN0b21fc3RhdHMucGwgICB8ICAyNiArLQogLi4uL3Rlc3RfY3VzdG9t X3Zhcl9zdGF0cy0tMS4wLnNxbCAgICAgICAgICAgIHwgICA3ICstCiAuLi4vdGVzdF9jdXN0b21f c3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMgfCAzMjMgKysrKysrKysrKysrKysrKystCiA1 IGZpbGVzIGNoYW5nZWQsIDQ2MCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCmluZGV4IDg3MTNjN2EwNDgzLi4yZTBjMWJiYjA2MSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMKQEAgLTE5NCw2ICsxOTQsNyBAQCBzdGF0 aWMgdm9pZCBwZ3N0YXRfYnVpbGRfc25hcHNob3Qodm9pZCk7CiBzdGF0aWMgdm9pZCBwZ3N0YXRf YnVpbGRfc25hcHNob3RfZml4ZWQoUGdTdGF0X0tpbmQga2luZCk7CiAKIHN0YXRpYyBpbmxpbmUg Ym9vbCBwZ3N0YXRfaXNfa2luZF92YWxpZChQZ1N0YXRfS2luZCBraW5kKTsKK3N0YXRpYyBpbmxp bmUgYm9vbCBwZ3N0YXRfY2hlY2tfZXh0cmFfY2FsbGJhY2tzKFBnU3RhdF9LaW5kIGtpbmQpOwog CiAKIC8qIC0tLS0tLS0tLS0KQEAgLTUyMyw2ICs1MjQsNyBAQCBwZ3N0YXRfZGlzY2FyZF9zdGF0 cyh2b2lkKQogCiAJLyogTkI6IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGluIHNpbmdsZSB1 c2VyIG1vZGUgKi8KIAorCS8qIEZpcnN0LCBjbGVhbnVwIHRoZSBtYWluIHN0YXRzIGZpbGUsIFBH U1RBVF9TVEFUX1BFUk1BTkVOVF9GSUxFTkFNRSAqLwogCXJldCA9IHVubGluayhQR1NUQVRfU1RB VF9QRVJNQU5FTlRfRklMRU5BTUUpOwogCWlmIChyZXQgIT0gMCkKIAl7CkBAIC01NDQsNiArNTQ2 LDE1IEBAIHBnc3RhdF9kaXNjYXJkX3N0YXRzKHZvaWQpCiAJCQkJCQkJCSBQR1NUQVRfU1RBVF9Q RVJNQU5FTlRfRklMRU5BTUUpKSk7CiAJfQogCisJLyogTGV0IGVhY2ggc3RhdHMga2luZCBydW4g aXRzIGNsZWFudXAgY2FsbGJhY2ssIGlmIGl0IHByb3ZpZGVzIG9uZSAqLworCWZvciAoUGdTdGF0 X0tpbmQga2luZCA9IFBHU1RBVF9LSU5EX01JTjsga2luZCA8PSBQR1NUQVRfS0lORF9NQVg7IGtp bmQrKykKKwl7CisJCWNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvID0gcGdzdGF0X2dl dF9raW5kX2luZm8oa2luZCk7CisKKwkJaWYgKGtpbmRfaW5mbyAmJiBraW5kX2luZm8tPmVuZF9l eHRyYV9zdGF0cykKKwkJCWtpbmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRzKFNUQVRTX0RJU0NBUkQp OworCX0KKwogCS8qCiAJICogUmVzZXQgc3RhdHMgY29udGVudHMuIFRoaXMgd2lsbCBzZXQgcmVz ZXQgdGltZXN0YW1wcyBvZiBmaXhlZC1udW1iZXJlZAogCSAqIHN0YXRzIHRvIHRoZSBjdXJyZW50 IHRpbWUgKG5vIHZhcmlhYmxlIHN0YXRzIGV4aXN0KS4KQEAgLTY0NSw2ICs2NTYsMTMgQEAgcGdz dGF0X2luaXRpYWxpemUodm9pZCkKIAogCXBnc3RhdF9hdHRhY2hfc2htZW0oKTsKIAorCS8qIENo ZWNrIGEga2luZCdzIGV4dHJhLWRhdGEgY2FsbGJhY2sgc2V0dXAgKi8KKwlmb3IgKFBnU3RhdF9L aW5kIGtpbmQgPSBQR1NUQVRfS0lORF9CVUlMVElOX01JTjsga2luZCA8PSBQR1NUQVRfS0lORF9C VUlMVElOX01BWDsga2luZCsrKQorCQlpZiAoIXBnc3RhdF9jaGVja19leHRyYV9jYWxsYmFja3Mo a2luZCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJtc2coImluY29tcGxldGUgZXh0cmEg c2VyaWFsaXphdGlvbiBjYWxsYmFja3MgZm9yIHN0YXRzIGtpbmQgJWQiLAorCQkJCQkJICAga2lu ZCkpOworCiAJcGdzdGF0X2luaXRfc25hcHNob3RfZml4ZWQoKTsKIAogCS8qIEJhY2tlbmQgaW5p dGlhbGl6YXRpb24gY2FsbGJhY2tzICovCkBAIC0xNDMyLDYgKzE0NTAsMzMgQEAgcGdzdGF0X2lz X2tpbmRfdmFsaWQoUGdTdGF0X0tpbmQga2luZCkKIAlyZXR1cm4gcGdzdGF0X2lzX2tpbmRfYnVp bHRpbihraW5kKSB8fCBwZ3N0YXRfaXNfa2luZF9jdXN0b20oa2luZCk7CiB9CiAKKy8qCisgKiBW YWxpZGF0ZSB0aGF0IGV4dHJhIHN0YXRzIGNhbGxiYWNrcyBhcmUgYWxsIHByb3ZpZGVkIHRvZ2V0 aGVyIG9yIG5vdCBhdCBhbGwuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorcGdzdGF0X2NoZWNr X2V4dHJhX2NhbGxiYWNrcyhQZ1N0YXRfS2luZCBraW5kKQoreworCWNvbnN0IFBnU3RhdF9LaW5k SW5mbyAqa2luZF9pbmZvID0gcGdzdGF0X2dldF9raW5kX2luZm8oa2luZCk7CisJaW50CQkJY291 bnQgPSAwOworCisJLyogQ3VzdG9tIGtpbmQgbm90IHlldCByZWdpc3RlcmVkLCBza2lwIHZhbGlk YXRpb24gKi8KKwlpZiAoIWtpbmRfaW5mbykKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoa2luZF9p bmZvLT50b19zZXJpYWxpemVkX2V4dHJhX3N0YXRzKQorCQljb3VudCsrOworCWlmIChraW5kX2lu Zm8tPmZyb21fc2VyaWFsaXplZF9leHRyYV9zdGF0cykKKwkJY291bnQrKzsKKwlpZiAoa2luZF9p bmZvLT5lbmRfZXh0cmFfc3RhdHMpCisJCWNvdW50Kys7CisKKwkvKiBFaXRoZXIgYWxsIHRocmVl IGNhbGxiYWNrcyBtdXN0IGJlIHByb3ZpZGVkLCBvciBub25lICovCisJaWYgKGNvdW50ICE9IDAg JiYgY291bnQgIT0gMykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIGNv bnN0IFBnU3RhdF9LaW5kSW5mbyAqCiBwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhQZ1N0YXRfS2luZCBr aW5kKQogewpAQCAtMTUyNSw2ICsxNTcwLDEzIEBAIHBnc3RhdF9yZWdpc3Rlcl9raW5kKFBnU3Rh dF9LaW5kIGtpbmQsIGNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvKQogCQkJCQkgZXJy ZGV0YWlsKCJFeGlzdGluZyBjdW11bGF0aXZlIHN0YXRpc3RpY3Mgd2l0aCBJRCAldSBoYXMgdGhl IHNhbWUgbmFtZS4iLCBleGlzdGluZ19raW5kKSkpOwogCX0KIAorCS8qIENoZWNrIGEga2luZCdz IGV4dHJhLWRhdGEgY2FsbGJhY2sgc2V0dXAgKi8KKwlpZiAoIXBnc3RhdF9jaGVja19leHRyYV9j YWxsYmFja3Moa2luZCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiaW5jb21wbGV0 ZSBzZXJpYWxpemF0aW9uIGNhbGxiYWNrcyBmb3Igc3RhdGlzdGljcyBraW5kIFwiJXNcIiIsCisJ CQkJCQlraW5kX2luZm8tPm5hbWUpLAorCQkJCSBlcnJkZXRhaWwoImNhbGxiYWNrcyB0b19zZXJp YWxpemVkX2V4dHJhX3N0YXRzLCBmcm9tX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMsIGFuZCBlbmRf ZXh0cmFfc3RhdHMgbXVzdCBiZSBwcm92aWRlZCB0b2dldGhlci4iKSkpOworCiAJLyogUmVnaXN0 ZXIgaXQgKi8KIAlwZ3N0YXRfa2luZF9jdXN0b21faW5mb3NbaWR4XSA9IGtpbmRfaW5mbzsKIAll cmVwb3J0KExPRywKQEAgLTE3MDIsNiArMTc1NCw5IEBAIHBnc3RhdF93cml0ZV9zdGF0c2ZpbGUo dm9pZCkKIAkJcGdzdGF0X3dyaXRlX2NodW5rKGZwb3V0LAogCQkJCQkJICAgcGdzdGF0X2dldF9l bnRyeV9kYXRhKHBzLT5rZXkua2luZCwgc2hzdGF0cyksCiAJCQkJCQkgICBwZ3N0YXRfZ2V0X2Vu dHJ5X2xlbihwcy0+a2V5LmtpbmQpKTsKKworCQlpZiAoa2luZF9pbmZvLT50b19zZXJpYWxpemVk X2V4dHJhX3N0YXRzKQorCQkJa2luZF9pbmZvLT50b19zZXJpYWxpemVkX2V4dHJhX3N0YXRzKCZw cy0+a2V5LCBzaHN0YXRzLCBmcG91dCk7CiAJfQogCWRzaGFzaF9zZXFfdGVybSgmaHN0YXQpOwog CkBAIC0xNzM0LDYgKzE3ODksMTUgQEAgcGdzdGF0X3dyaXRlX3N0YXRzZmlsZSh2b2lkKQogCQkv KiBkdXJhYmxlX3JlbmFtZSBhbHJlYWR5IGVtaXR0ZWQgbG9nIG1lc3NhZ2UgKi8KIAkJdW5saW5r KHRtcGZpbGUpOwogCX0KKworCS8qIE5vdywgYWxsb3cga2luZHMgdG8gZmluYWxpemUgdGhlIHdy aXRlcyBmb3IgdGhlIGV4dHJhIGZpbGVzICovCisJZm9yIChQZ1N0YXRfS2luZCBraW5kID0gUEdT VEFUX0tJTkRfTUlOOyBraW5kIDw9IFBHU1RBVF9LSU5EX01BWDsga2luZCsrKQorCXsKKwkJY29u c3QgUGdTdGF0X0tpbmRJbmZvICpraW5kX2luZm8gPSBwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhraW5k KTsKKworCQlpZiAoa2luZF9pbmZvICYmIGtpbmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRzKQorCQkJ a2luZF9pbmZvLT5lbmRfZXh0cmFfc3RhdHMoU1RBVFNfV1JJVEUpOworCX0KIH0KIAogLyogaGVs cGVyIGZvciBwZ3N0YXRfcmVhZF9zdGF0c2ZpbGUoKSAqLwpAQCAtMTg3MSw2ICsxOTM1LDcgQEAg cGdzdGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJCQkJCVBnU3RhdF9IYXNoS2V5IGtleTsKIAkJ CQkJUGdTdGF0U2hhcmVkX0hhc2hFbnRyeSAqcDsKIAkJCQkJUGdTdGF0U2hhcmVkX0NvbW1vbiAq aGVhZGVyOworCQkJCQljb25zdCBQZ1N0YXRfS2luZEluZm8gKmtpbmRfaW5mbyA9IE5VTEw7CiAK IAkJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApAQCAtMTg5MSw3ICsxOTU2LDggQEAgcGdz dGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJCQkJCQkJZ290byBlcnJvcjsKIAkJCQkJCX0KIAot CQkJCQkJaWYgKCFwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhrZXkua2luZCkpCisJCQkJCQlraW5kX2lu Zm8gPSBwZ3N0YXRfZ2V0X2tpbmRfaW5mbyhrZXkua2luZCk7CisJCQkJCQlpZiAoIWtpbmRfaW5m bykKIAkJCQkJCXsKIAkJCQkJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3QgZmluZCBpbmZvcm1h dGlvbiBvZiBraW5kIGZvciBlbnRyeSAldS8ldS8lIiBQUkl1NjQgIiBvZiB0eXBlICVjIiwKIAkJ CQkJCQkJIGtleS5raW5kLCBrZXkuZGJvaWQsCkBAIC0xOTAyLDcgKzE5NjgsNiBAQCBwZ3N0YXRf cmVhZF9zdGF0c2ZpbGUodm9pZCkKIAkJCQkJZWxzZQogCQkJCQl7CiAJCQkJCQkvKiBzdGF0cyBl bnRyeSBpZGVudGlmaWVkIGJ5IG5hbWUgb24gZGlzayAoZS5nLiBzbG90cykgKi8KLQkJCQkJCWNv bnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvID0gTlVMTDsKIAkJCQkJCVBnU3RhdF9LaW5k IGtpbmQ7CiAJCQkJCQlOYW1lRGF0YQluYW1lOwogCkBAIC0xOTk2LDYgKzIwNjEsMTYgQEAgcGdz dGF0X3JlYWRfc3RhdHNmaWxlKHZvaWQpCiAJCQkJCQlnb3RvIGVycm9yOwogCQkJCQl9CiAKKwkJ CQkJaWYgKGtpbmRfaW5mby0+ZnJvbV9zZXJpYWxpemVkX2V4dHJhX3N0YXRzKQorCQkJCQl7CisJ CQkJCQlpZiAoIWtpbmRfaW5mby0+ZnJvbV9zZXJpYWxpemVkX2V4dHJhX3N0YXRzKCZrZXksIGhl YWRlciwgZnBpbikpCisJCQkJCQl7CisJCQkJCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IHJl YWQgZXh0cmEgc3RhdHMgZm9yIGVudHJ5ICV1LyV1LyUiIFBSSXU2NCwKKwkJCQkJCQkJIGtleS5r aW5kLCBrZXkuZGJvaWQsIGtleS5vYmppZCk7CisJCQkJCQkJZ290byBlcnJvcjsKKwkJCQkJCX0K KwkJCQkJfQorCiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCWNhc2UgUEdTVEFUX0ZJTEVfRU5UUllf RU5EOgpAQCAtMjAxOSwxMSArMjA5NCwyMSBAQCBwZ3N0YXRfcmVhZF9zdGF0c2ZpbGUodm9pZCkK IAl9CiAKIGRvbmU6CisJLyogRmlyc3QsIGNsZWFudXAgdGhlIG1haW4gc3RhdHMgZmlsZSwgUEdT VEFUX1NUQVRfUEVSTUFORU5UX0ZJTEVOQU1FICovCiAJRnJlZUZpbGUoZnBpbik7CiAKIAllbG9n KERFQlVHMiwgInJlbW92aW5nIHBlcm1hbmVudCBzdGF0cyBmaWxlIFwiJXNcIiIsIHN0YXRmaWxl KTsKIAl1bmxpbmsoc3RhdGZpbGUpOwogCisJLyogTGV0IGVhY2ggc3RhdHMga2luZCBydW4gaXRz IGNsZWFudXAgY2FsbGJhY2ssIGlmIGl0IHByb3ZpZGVzIG9uZSAqLworCWZvciAoUGdTdGF0X0tp bmQga2luZCA9IFBHU1RBVF9LSU5EX01JTjsga2luZCA8PSBQR1NUQVRfS0lORF9NQVg7IGtpbmQr KykKKwl7CisJCWNvbnN0IFBnU3RhdF9LaW5kSW5mbyAqa2luZF9pbmZvID0gcGdzdGF0X2dldF9r aW5kX2luZm8oa2luZCk7CisKKwkJaWYgKGtpbmRfaW5mbyAmJiBraW5kX2luZm8tPmVuZF9leHRy YV9zdGF0cykKKwkJCWtpbmRfaW5mby0+ZW5kX2V4dHJhX3N0YXRzKFNUQVRTX1JFQUQpOworCX0K KwogCXJldHVybjsKIAogZXJyb3I6CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wZ3N0 YXRfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oCmluZGV4 IGNhMWJhNjQyMGNhLi40OGI0MDgxNjU3MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMv cGdzdGF0X2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFs LmgKQEAgLTYzLDYgKzYzLDIwIEBAIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9IYXNoS2V5CiAJCQkJ CQkJCSAqIGlkZW50aWZpZXIuICovCiB9IFBnU3RhdF9IYXNoS2V5OwogCisvKgorICogVHJhY2tz IGlmIHRoZSBzdGF0cyBmaWxlIGlzIGJlaW5nIHJlYWQsIHdyaXR0ZW4gb3IgZGlzY2FyZGVkLgor ICoKKyAqIFRoZXNlIHN0YXRlcyBhbGxvdyBwbHVnaW5zIHRoYXQgY3JlYXRlIGV4dHJhIHN0YXRp c3RpY3MgZmlsZXMKKyAqIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBvcGVyYXRpb24gYW5kIHBl cmZvcm0gYW55IG5lY2Vzc2FyeQorICogZmlsZSBjbGVhbnVwLgorICovCit0eXBlZGVmIGVudW0g UGdTdGF0X1N0YXRzRmlsZU9wCit7CisJU1RBVFNfV1JJVEUsCisJU1RBVFNfUkVBRCwKKwlTVEFU U19ESVNDQVJELAorfQkJCVBnU3RhdF9TdGF0c0ZpbGVPcDsKKwogLyoKICAqIFBnU3RhdF9IYXNo S2V5IHNob3VsZCBub3QgaGF2ZSBhbnkgcGFkZGluZy4gIENoZWNraW5nIHRoYXQgdGhlIHN0cnVj dHVyZQogICogc2l6ZSBtYXRjaGVzIHdpdGggdGhlIHN1bSBvZiBlYWNoIGZpZWxkIGlzIGEgY2hl Y2sgc2ltcGxlIGVub3VnaCB0bwpAQCAtMzAzLDYgKzMxNywyOSBAQCB0eXBlZGVmIHN0cnVjdCBQ Z1N0YXRfS2luZEluZm8KIAkJCQkJCQkJCSAgIGNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhl YWRlciwgTmFtZURhdGEgKm5hbWUpOwogCWJvb2wJCSgqZnJvbV9zZXJpYWxpemVkX25hbWUpIChj b25zdCBOYW1lRGF0YSAqbmFtZSwgUGdTdGF0X0hhc2hLZXkgKmtleSk7CiAKKwkvKgorCSAqIE9w dGlvbmFsIGNhbGxiYWNrcyBmb3Iga2luZHMgdGhhdCB3cml0ZSBhZGRpdGlvbmFsIHBlci1lbnRy eSBkYXRhIHRvCisJICogdGhlIHN0YXRzIGZpbGUuICBJZiBhbnkgb2YgdGhlc2UgY2FsbGJhY2tz IGFyZSBwcm92aWRlZCwgYWxsIHRocmVlIG11c3QKKwkgKiBiZSBwcm92aWRlZCB0byBlbnN1cmUg dGhhdCB0aGUgcmVhZGVyIGNvbnN1bWVzIGV4YWN0bHkgdGhlIGRhdGEgd3JpdHRlbgorCSAqIGJ5 IHRoZSB3cml0ZXIuCisJICoKKwkgKiB0b19zZXJpYWxpemVkX2V4dHJhX3N0YXRzOiB3cml0ZSBl eHRyYSBkYXRhIGZvciBhbiBlbnRyeS4KKwkgKgorCSAqIGZyb21fc2VyaWFsaXplZF9leHRyYV9z dGF0czogcmVhZCB0aGUgZXh0cmEgZGF0YSBmb3IgYW4gZW50cnkuIFJldHVybnMKKwkgKiB0cnVl IG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIHJlYWQgZXJyb3IuCisJICoKKwkgKiBlbmRfZXh0cmFfc3Rh dHM6IGludm9rZWQgb25jZSBwZXIgb3BlcmF0aW9uIChyZWFkLCB3cml0ZSwgZGlzY2FyZCkKKwkg KiBhZnRlciBhbGwgZW50cmllcyBvZiB0aGlzIGtpbmQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KKwkg KgorCSAqIE5vdGU6IHN0YXRmaWxlIGlzIGEgcG9pbnRlciB0byB0aGUgbWFpbiBzdGF0cyBmaWxl LAorCSAqIFBHU1RBVF9TVEFUX1BFUk1BTkVOVF9GSUxFTkFNRS4KKwkgKi8KKwl2b2lkCQkoKnRv X3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMpIChjb25zdCBQZ1N0YXRfSGFzaEtleSAqa2V5LAorCQkJ CQkJCQkJCQkgIGNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRlciwgRklMRSAqc3RhdGZp bGUpOworCWJvb2wJCSgqZnJvbV9zZXJpYWxpemVkX2V4dHJhX3N0YXRzKSAoY29uc3QgUGdTdGF0 X0hhc2hLZXkgKmtleSwKKwkJCQkJCQkJCQkJCWNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhl YWRlciwgRklMRSAqc3RhdGZpbGUpOworCXZvaWQJCSgqZW5kX2V4dHJhX3N0YXRzKSAoUGdTdGF0 X1N0YXRzRmlsZU9wIHN0YXR1cyk7CisKIAkvKgogCSAqIEZvciBmaXhlZC1udW1iZXJlZCBzdGF0 aXN0aWNzOiBJbml0aWFsaXplIHNoYXJlZCBtZW1vcnkgc3RhdGUuCiAJICoKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdC8wMDFfY3VzdG9tX3N0YXRzLnBs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90LzAwMV9jdXN0b21fc3RhdHMu cGwKaW5kZXggZTUyODU5NWNmYjAuLmIzYjI1ODE5NDExIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3QvMDAxX2N1c3RvbV9zdGF0cy5wbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3QvMDAxX2N1c3RvbV9zdGF0cy5wbApAQCAt MjksMTMgKzI5LDEzIEBAICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShDUkVBVEUgRVhU RU5TSU9OIHRlc3RfY3VzdG9tX2ZpeGVkX3N0YXRzKSk7CiAKICMgQ3JlYXRlIGVudHJpZXMgZm9y IHZhcmlhYmxlLXNpemVkIHN0YXRzLgogJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCXEo c2VsZWN0IHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoJ2VudHJ5MScpKSk7CisJcShzZWxl Y3QgdGVzdF9jdXN0b21fc3RhdHNfdmFyX2NyZWF0ZSgnZW50cnkxJywgJ1Rlc3QgZW50cnkgMScp KSk7CiAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JcShzZWxlY3QgdGVzdF9jdXN0b21f c3RhdHNfdmFyX2NyZWF0ZSgnZW50cnkyJykpKTsKKwlxKHNlbGVjdCB0ZXN0X2N1c3RvbV9zdGF0 c192YXJfY3JlYXRlKCdlbnRyeTInLCAnVGVzdCBlbnRyeSAyJykpKTsKICRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKLQlxKHNlbGVjdCB0ZXN0X2N1c3RvbV9zdGF0c192YXJfY3JlYXRlKCdl bnRyeTMnKSkpOworCXEoc2VsZWN0IHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoJ2VudHJ5 MycsICdUZXN0IGVudHJ5IDMnKSkpOwogJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCXEo c2VsZWN0IHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoJ2VudHJ5NCcpKSk7CisJcShzZWxl Y3QgdGVzdF9jdXN0b21fc3RhdHNfdmFyX2NyZWF0ZSgnZW50cnk0JywgJ1Rlc3QgZW50cnkgNCcp KSk7CiAKICMgVXBkYXRlIGNvdW50ZXJzOiBlbnRyeTE9MiwgZW50cnkyPTMsIGVudHJ5Mz0yLCBl bnRyeTQ9MywgZml4ZWQ9MwogJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLApAQCAtNjUsMTYg KzY1LDIwIEBAICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShzZWxlY3QgdGVzdF9jdXN0 b21fc3RhdHNfZml4ZWRfdXBkYXRlKCkpKTsKICMgVGVzdCBkYXRhIHJlcG9ydHMuCiBteSAkcmVz dWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0 X2N1c3RvbV9zdGF0c192YXJfcmVwb3J0KCdlbnRyeTEnKSkpOwotaXMoJHJlc3VsdCwgImVudHJ5 MXwyIiwgInJlcG9ydCBmb3IgdmFyaWFibGUtc2l6ZWQgZGF0YSBvZiBlbnRyeTEiKTsKK2lzKCRy ZXN1bHQsICJlbnRyeTF8MnxUZXN0IGVudHJ5IDEiLCAicmVwb3J0IGZvciB2YXJpYWJsZS1zaXpl ZCBkYXRhIG9mIGVudHJ5MSIpOworCiAkcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1c3RvbV9zdGF0c192YXJfcmVwb3J0KCdlbnRy eTInKSkpOwotaXMoJHJlc3VsdCwgImVudHJ5MnwzIiwgInJlcG9ydCBmb3IgdmFyaWFibGUtc2l6 ZWQgZGF0YSBvZiBlbnRyeTIiKTsKK2lzKCRyZXN1bHQsICJlbnRyeTJ8M3xUZXN0IGVudHJ5IDIi LCAicmVwb3J0IGZvciB2YXJpYWJsZS1zaXplZCBkYXRhIG9mIGVudHJ5MiIpOworCiAkcmVzdWx0 ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1 c3RvbV9zdGF0c192YXJfcmVwb3J0KCdlbnRyeTMnKSkpOwotaXMoJHJlc3VsdCwgImVudHJ5M3wy IiwgInJlcG9ydCBmb3IgdmFyaWFibGUtc2l6ZWQgZGF0YSBvZiBlbnRyeTMiKTsKK2lzKCRyZXN1 bHQsICJlbnRyeTN8MnxUZXN0IGVudHJ5IDMiLCAicmVwb3J0IGZvciB2YXJpYWJsZS1zaXplZCBk YXRhIG9mIGVudHJ5MyIpOworCiAkcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1c3RvbV9zdGF0c192YXJfcmVwb3J0KCdlbnRyeTQn KSkpOwotaXMoJHJlc3VsdCwgImVudHJ5NHwzIiwgInJlcG9ydCBmb3IgdmFyaWFibGUtc2l6ZWQg ZGF0YSBvZiBlbnRyeTQiKTsKK2lzKCRyZXN1bHQsICJlbnRyeTR8M3xUZXN0IGVudHJ5IDQiLCAi cmVwb3J0IGZvciB2YXJpYWJsZS1zaXplZCBkYXRhIG9mIGVudHJ5NCIpOworCiAkcmVzdWx0ID0g JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCXEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1c3Rv bV9zdGF0c19maXhlZF9yZXBvcnQoKSkpOwogaXMoJHJlc3VsdCwgIjN8IiwgInJlcG9ydCBmb3Ig Zml4ZWQtc2l6ZWQgc3RhdHMiKTsKQEAgLTk3LDcgKzEwMSwxMSBAQCAkbm9kZS0+c3RhcnQoKTsK IAogJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAlxKHNlbGVjdCAqIGZy b20gdGVzdF9jdXN0b21fc3RhdHNfdmFyX3JlcG9ydCgnZW50cnkxJykpKTsKLWlzKCRyZXN1bHQs ICJlbnRyeTF8MiIsICJ2YXJpYWJsZS1zaXplZCBzdGF0cyBwZXJzaXN0IGFmdGVyIGNsZWFuIHJl c3RhcnQiKTsKK2lzKCRyZXN1bHQsICJlbnRyeTF8MnxUZXN0IGVudHJ5IDEiLCAidmFyaWFibGUt c2l6ZWQgc3RhdHMgcGVyc2lzdCBhZnRlciBjbGVhbiByZXN0YXJ0Iik7CisKKyRyZXN1bHQgPSAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoc2VsZWN0ICogZnJvbSB0ZXN0X2N1c3RvbV9z dGF0c192YXJfcmVwb3J0KCdlbnRyeTInKSkpOworaXMoJHJlc3VsdCwgImVudHJ5MnwzfFRlc3Qg ZW50cnkgMiIsICJ2YXJpYWJsZS1zaXplZCBzdGF0cyBwZXJzaXN0IGFmdGVyIGNsZWFuIHJlc3Rh cnQiKTsKKwogJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAlxKHNlbGVj dCAqIGZyb20gdGVzdF9jdXN0b21fc3RhdHNfZml4ZWRfcmVwb3J0KCkpKTsKIGlzKCRyZXN1bHQs ICIzfCIsICJmaXhlZC1zaXplZCBzdGF0cyBwZXJzaXN0IGFmdGVyIGNsZWFuIHJlc3RhcnQiKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0 b21fdmFyX3N0YXRzLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0 cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMtLTEuMC5zcWwKaW5kZXggZDVmODJiNWQ1NDYuLjVlZDhj ZmMyZGNmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rl c3RfY3VzdG9tX3Zhcl9zdGF0cy0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Y3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy0tMS4wLnNxbApAQCAtMyw3ICszLDcg QEAKIC0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFu IHZpYSBDUkVBVEUgRVhURU5TSU9OCiBcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9j dXN0b21fdmFyX3N0YXRzIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKIAotQ1JFQVRFIEZVTkNU SU9OIHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoSU4gbmFtZSBURVhUKQorQ1JFQVRFIEZV TkNUSU9OIHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUoSU4gbmFtZSBURVhULCBpbiBkZXNj cmlwdGlvbiBURVhUKQogUkVUVVJOUyB2b2lkCiBBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Rlc3Rf Y3VzdG9tX3N0YXRzX3Zhcl9jcmVhdGUnCiBMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBVTlNB RkU7CkBAIC0xOCw4ICsxOCw5IEBAIFJFVFVSTlMgdm9pZAogQVMgJ01PRFVMRV9QQVRITkFNRScs ICd0ZXN0X2N1c3RvbV9zdGF0c192YXJfZHJvcCcKIExBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVM IFVOU0FGRTsKIAotCi1DUkVBVEUgRlVOQ1RJT04gdGVzdF9jdXN0b21fc3RhdHNfdmFyX3JlcG9y dChJTk9VVCBuYW1lIFRFWFQsIE9VVCBjYWxscyBCSUdJTlQpCitDUkVBVEUgRlVOQ1RJT04gdGVz dF9jdXN0b21fc3RhdHNfdmFyX3JlcG9ydChJTk9VVCBuYW1lIFRFWFQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQgY2FsbHMgQklHSU5ULAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIGRlc2NyaXB0aW9uIFRF WFQpCiBSRVRVUk5TIFNFVE9GIHJlY29yZAogQVMgJ01PRFVMRV9QQVRITkFNRScsICd0ZXN0X2N1 c3RvbV9zdGF0c192YXJfcmVwb3J0JwogTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgVU5TQUZF OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1 c3RvbV92YXJfc3RhdHMuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVz dF9jdXN0b21fdmFyX3N0YXRzLmMKaW5kZXggZDQ5MDVhYjRlZTkuLjMzMmNjNzkyMjEzIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zh cl9zdGF0cy5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9j dXN0b21fdmFyX3N0YXRzLmMKQEAgLTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9o YXNoZm4uaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVn aXN0cnkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3Bn c3RhdF9pbnRlcm5hbC5oIgogCkBAIC0zMiw2ICszMyw5IEBAIFBHX01PRFVMRV9NQUdJQ19FWFQo CiAgKi8KICNkZWZpbmUgUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NUQVRTIDI1CiAKKy8q IEZpbGUgcGF0aHMgZm9yIGV4dHJhIHN0YXRpc3RpY3MgZGF0YSBzZXJpYWxpemF0aW9uICovCisj ZGVmaW5lIFRFU1RfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQyAicGdfc3RhdC90ZXN0X2N1c3RvbV92 YXJfc3RhdHNfZGVzYy5zdGF0cyIKKwogLyoKICAqIEhhc2ggc3RhdGlzdGljIG5hbWUgdG8gZ2Vu ZXJhdGUgZW50cnkgaW5kZXggZm9yIHBnc3RhdCBsb29rdXAuCiAgKi8KQEAgLTUzLDcgKzU3LDIy IEBAIHR5cGVkZWYgc3RydWN0IFBnU3RhdFNoYXJlZF9DdXN0b21WYXJFbnRyeQogewogCVBnU3Rh dFNoYXJlZF9Db21tb24gaGVhZGVyOyAvKiBzdGFuZGFyZCBwZ3N0YXQgZW50cnkgaGVhZGVyICov CiAJUGdTdGF0X1N0YXRDdXN0b21WYXJFbnRyeSBzdGF0czsJLyogY3VzdG9tIHN0YXRpc3RpY3Mg ZGF0YSAqLwotfSBQZ1N0YXRTaGFyZWRfQ3VzdG9tVmFyRW50cnk7CisJZHNhX3BvaW50ZXIgZGVz Y3JpcHRpb247CS8qIGV4dHJhIHN0YXRpc3RpY3MgZGF0YSAqLworfQkJCVBnU3RhdFNoYXJlZF9D dXN0b21WYXJFbnRyeTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogR2xvYmFsIFZhcmlhYmxl cworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIEZpbGUgaGFuZGxlIGZvciBleHRyYSBz dGF0aXN0aWNzIGRhdGEgc2VyaWFsaXphdGlvbiAqLworc3RhdGljIEZJTEUgKmZkX2Rlc2NyaXB0 aW9uID0gTlVMTDsKKworLyogQ3VycmVudCB3cml0ZSBvZmZzZXQgaW4gZmRfZGVzY3JpcHRpb24g ZmlsZSAqLworc3RhdGljIGxvbmcgZmRfZGVzY3JpcHRpb25fb2Zmc2V0ID0gMDsKKworLyogRFNB IGFyZWEgZm9yIHN0b3JpbmcgdmFyaWFibGUtbGVuZ3RoIGRlc2NyaXB0aW9uIHN0cmluZ3MgKi8K K2RzYV9hcmVhICAgKmN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EgPSBOVUxMOwogCiAvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzCkBAIC02NCw2ICs4MywxNyBA QCB0eXBlZGVmIHN0cnVjdCBQZ1N0YXRTaGFyZWRfQ3VzdG9tVmFyRW50cnkKIHN0YXRpYyBib29s IHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9mbHVzaF9wZW5kaW5nX2NiKFBnU3RhdF9FbnRyeVJlZiAq ZW50cnlfcmVmLAogCQkJCQkJCQkJCQkJICAgYm9vbCBub3dhaXQpOwogCisvKiBTZXJpYWxpemF0 aW9uIGNhbGxiYWNrOiBzZXJpYWxpemUgZXh0cmEgc3RhdGlzdGljcyBkYXRhICovCitzdGF0aWMg dm9pZCB0ZXN0X2N1c3RvbV92YXJfc3RhdHNfc2VyaWFsaXplKGNvbnN0IFBnU3RhdF9IYXNoS2V5 ICprZXksCisJCQkJCQkJCQkJCSAgY29uc3QgUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVhZGVyLCBG SUxFICpzdGF0ZmlsZSk7CisKKy8qIERlc2VyaWFsaXphdGlvbiBjYWxsYmFjazogZGVzZXJpYWxp emUgZXh0cmEgc3RhdGlzdGljcyBkYXRhICovCitzdGF0aWMgYm9vbCB0ZXN0X2N1c3RvbV92YXJf c3RhdHNfZGVzZXJpYWxpemUoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwKKwkJCQkJCQkJCQkJ CWNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRlciwgRklMRSAqc3RhdGZpbGUpOworCisv KiBDbGVhbnVwIGNhbGxiYWNrOiBlbmQgb2Ygc3RhdGlzdGljcyBmaWxlIG9wZXJhdGlvbnMgKi8K K3N0YXRpYyB2b2lkIHRlc3RfY3VzdG9tX3Zhcl9zdGF0c19maWxlX2NsZWFudXAoUGdTdGF0X1N0 YXRzRmlsZU9wIHN0YXR1cyk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEN1c3RvbSBraW5k IGNvbmZpZ3VyYXRpb24KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgwLDYgKzExMCw5IEBAIHN0 YXRpYyBjb25zdCBQZ1N0YXRfS2luZEluZm8gY3VzdG9tX3N0YXRzID0gewogCS5zaGFyZWRfZGF0 YV9sZW4gPSBzaXplb2YoKChQZ1N0YXRTaGFyZWRfQ3VzdG9tVmFyRW50cnkgKikgMCktPnN0YXRz KSwKIAkucGVuZGluZ19zaXplID0gc2l6ZW9mKFBnU3RhdF9TdGF0Q3VzdG9tVmFyRW50cnkpLAog CS5mbHVzaF9wZW5kaW5nX2NiID0gdGVzdF9jdXN0b21fc3RhdHNfdmFyX2ZsdXNoX3BlbmRpbmdf Y2IsCisJLnRvX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMgPSB0ZXN0X2N1c3RvbV92YXJfc3RhdHNf c2VyaWFsaXplLAorCS5mcm9tX3NlcmlhbGl6ZWRfZXh0cmFfc3RhdHMgPSB0ZXN0X2N1c3RvbV92 YXJfc3RhdHNfZGVzZXJpYWxpemUsCisJLmVuZF9leHRyYV9zdGF0cyA9IHRlc3RfY3VzdG9tX3Zh cl9zdGF0c19maWxlX2NsZWFudXAsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzIs NiArMTY1LDIzNCBAQCB0ZXN0X2N1c3RvbV9zdGF0c192YXJfZmx1c2hfcGVuZGluZ19jYihQZ1N0 YXRfRW50cnlSZWYgKmVudHJ5X3JlZiwgYm9vbCBub3dhaXQpCiAJcmV0dXJuIHRydWU7CiB9CiAK Ky8qCisgKiB0ZXN0X2N1c3RvbV92YXJfc3RhdHNfc2VyaWFsaXplKCkgLQorICoKKyAqIFNlcmlh bGl6ZSBleHRyYSBkYXRhIChkZXNjcmlwdGlvbnMpIGZvciBjdXN0b20gc3RhdGlzdGljcyBlbnRy aWVzIHRvCisgKiB0aGUgc3RhdGlzdGljcyBmaWxlLiBDYWxsZWQgZHVyaW5nIHN0YXRpc3RpY3Mg ZmlsZSB3cml0aW5nIHRvIHByZXNlcnZlCisgKiBkZXNjcmlwdGlvbiBzdHJpbmdzIGFjcm9zcyBy ZXN0YXJ0cy4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfY3VzdG9tX3Zhcl9zdGF0c19zZXJpYWxp emUoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwKKwkJCQkJCQkJICBjb25zdCBQZ1N0YXRTaGFy ZWRfQ29tbW9uICpoZWFkZXIsIEZJTEUgKnN0YXRmaWxlKQoreworCWNoYXIJICAgKmRlc2NyaXB0 aW9uOworCXNpemVfdAkJbGVuOworCWxvbmcJCW9mZnNldDsKKwlQZ1N0YXRTaGFyZWRfQ3VzdG9t VmFyRW50cnkgKmVudHJ5ID0gKFBnU3RhdFNoYXJlZF9DdXN0b21WYXJFbnRyeSAqKSBoZWFkZXI7 CisJYm9vbAkJZm91bmQ7CisKKwlpZiAoIWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EpCisJ CWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EgPSBHZXROYW1lZERTQSgidGVzdF9jdXN0b21f c3RhdF9kc2EiLCAmZm91bmQpOworCisJLyogT3BlbiBzdGF0aXN0aWNzIGZpbGUgZm9yIHdyaXRp bmcgaWYgbm90IGFscmVhZHkgb3BlbiAqLworCWlmICghZmRfZGVzY3JpcHRpb24pCisJeworCQlm ZF9kZXNjcmlwdGlvbiA9IEFsbG9jYXRlRmlsZShURVNUX0NVU1RPTV9FWFRSQV9EQVRBX0RFU0Ms IFBHX0JJTkFSWV9XKTsKKwkJaWYgKGZkX2Rlc2NyaXB0aW9uID09IE5VTEwpCisJCXsKKwkJCWVy ZXBvcnQoTE9HLAorCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1z ZygiY291bGQgbm90IG9wZW4gc3RhdGlzdGljcyBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZzogJW0i LAorCQkJCQkJCVRFU1RfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQykpKTsKKwkJCWxlbiA9IDA7CisJ CQlvZmZzZXQgPSAwOworCQkJZndyaXRlKCZsZW4sIHNpemVvZihsZW4pLCAxLCBzdGF0ZmlsZSk7 CisJCQlmd3JpdGUoJm9mZnNldCwgc2l6ZW9mKG9mZnNldCksIDEsIHN0YXRmaWxlKTsKKwkJCXJl dHVybjsKKwkJfQorCQlmZF9kZXNjcmlwdGlvbl9vZmZzZXQgPSAwOworCX0KKworCS8qIEhhbmRs ZSBlbnRyaWVzIHdpdGhvdXQgZGVzY3JpcHRpb25zICovCisJaWYgKCFEc2FQb2ludGVySXNWYWxp ZChlbnRyeS0+ZGVzY3JpcHRpb24pIHx8ICFjdXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhKQor CXsKKwkJbGVuID0gMDsKKwkJb2Zmc2V0ID0gMDsKKwkJZndyaXRlKCZsZW4sIHNpemVvZihsZW4p LCAxLCBzdGF0ZmlsZSk7CisJCWZ3cml0ZSgmb2Zmc2V0LCBzaXplb2Yob2Zmc2V0KSwgMSwgc3Rh dGZpbGUpOworCQlyZXR1cm47CisJfQorCisJLyogR2V0IGN1cnJlbnQgb2Zmc2V0IGluIGZkX2Rl c2NyaXB0aW9uICovCisJb2Zmc2V0ID0gZmRfZGVzY3JpcHRpb25fb2Zmc2V0OworCisJLyogUmV0 cmlldmUgZGVzY3JpcHRpb24gZnJvbSBEU0EgYW5kIHdyaXRlIHRvIGZkX2Rlc2NyaXB0aW9uICov CisJZGVzY3JpcHRpb24gPSBkc2FfZ2V0X2FkZHJlc3MoY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9u X2RzYSwgZW50cnktPmRlc2NyaXB0aW9uKTsKKwlsZW4gPSBzdHJsZW4oZGVzY3JpcHRpb24pICsg MTsKKwlmd3JpdGUoZGVzY3JpcHRpb24sIDEsIGxlbiwgZmRfZGVzY3JpcHRpb24pOworCWZkX2Rl c2NyaXB0aW9uX29mZnNldCArPSBsZW47CisKKwkvKiBXcml0ZSBsZW5ndGggYW5kIG9mZnNldCB0 byBzdGF0ZmlsZSAqLworCWZ3cml0ZSgmbGVuLCBzaXplb2YobGVuKSwgMSwgc3RhdGZpbGUpOwor CWZ3cml0ZSgmb2Zmc2V0LCBzaXplb2Yob2Zmc2V0KSwgMSwgc3RhdGZpbGUpOworfQorCisvKgor ICogdGVzdF9jdXN0b21fdmFyX3N0YXRzX2Rlc2VyaWFsaXplKCkgLQorICoKKyAqIERlc2VyaWFs aXplIGV4dHJhIGRhdGEgKGRlc2NyaXB0aW9ucykgZm9yIGN1c3RvbSBzdGF0aXN0aWNzIGVudHJp ZXMgZnJvbQorICogdGhlIHN0YXRpc3RpY3MgZmlsZS4gQ2FsbGVkIGR1cmluZyBzdGF0aXN0aWNz IGZpbGUgcmVhZGluZyB0byByZXN0b3JlCisgKiBkZXNjcmlwdGlvbiBzdHJpbmdzIGFmdGVyIGEg cmVzdGFydC4KKyAqLworc3RhdGljIGJvb2wKK3Rlc3RfY3VzdG9tX3Zhcl9zdGF0c19kZXNlcmlh bGl6ZShjb25zdCBQZ1N0YXRfSGFzaEtleSAqa2V5LAorCQkJCQkJCQkJY29uc3QgUGdTdGF0U2hh cmVkX0NvbW1vbiAqaGVhZGVyLCBGSUxFICpzdGF0ZmlsZSkKK3sKKwlQZ1N0YXRTaGFyZWRfQ3Vz dG9tVmFyRW50cnkgKmVudHJ5OworCWRzYV9wb2ludGVyIGRwOworCXNpemVfdAkJbGVuOworCWxv bmcJCW9mZnNldDsKKwljaGFyCSAgICpidWZmZXI7CisJYm9vbAkJZm91bmQ7CisKKwkvKiBSZWFk IGxlbmd0aCBhbmQgb2Zmc2V0IGZyb20gc3RhdGZpbGUgKi8KKwlpZiAoZnJlYWQoJmxlbiwgc2l6 ZW9mKGxlbiksIDEsIHN0YXRmaWxlKSAhPSAxIHx8CisJCWZyZWFkKCZvZmZzZXQsIHNpemVvZihv ZmZzZXQpLCAxLCBzdGF0ZmlsZSkgIT0gMSkKKwl7CisJCWVsb2coV0FSTklORywgImZhaWxlZCB0 byByZWFkIGRlc2NyaXB0aW9uIG1ldGFkYXRhIGZyb20gc3RhdGlzdGljcyBmaWxlIik7CisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwllbnRyeSA9IChQZ1N0YXRTaGFyZWRfQ3VzdG9tVmFyRW50cnkg KikgaGVhZGVyOworCisJLyogSGFuZGxlIGVtcHR5IGRlc2NyaXB0aW9ucyAqLworCWlmIChsZW4g PT0gMCkKKwl7CisJCWVudHJ5LT5kZXNjcmlwdGlvbiA9IEludmFsaWREc2FQb2ludGVyOworCQly ZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBJbml0aWFsaXplIERTQSBpZiBuZWVkZWQgKi8KKwlpZiAo IWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EpCisJCWN1c3RvbV9zdGF0c19kZXNjcmlwdGlv bl9kc2EgPSBHZXROYW1lZERTQSgidGVzdF9jdXN0b21fc3RhdF9kc2EiLCAmZm91bmQpOworCisJ aWYgKCFjdXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhKQorCXsKKwkJZWxvZyhXQVJOSU5HLCAi Y291bGQgbm90IGFjY2VzcyBEU0EgZm9yIGN1c3RvbSBzdGF0aXN0aWNzIGRlc2NyaXB0aW9ucyIp OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogT3BlbiBzdGF0aXN0aWNzIGZpbGUgZm9yIHJl YWRpbmcgaWYgbm90IGFscmVhZHkgb3BlbiAqLworCWlmICghZmRfZGVzY3JpcHRpb24pCisJewor CQlmZF9kZXNjcmlwdGlvbiA9IEFsbG9jYXRlRmlsZShURVNUX0NVU1RPTV9FWFRSQV9EQVRBX0RF U0MsIFBHX0JJTkFSWV9SKTsKKwkJaWYgKGZkX2Rlc2NyaXB0aW9uID09IE5VTEwpCisJCXsKKwkJ CWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQkJZXJlcG9ydChMT0csCisJCQkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIHN0YXRpc3Rp Y3MgZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmc6ICVtIiwKKwkJCQkJCQkJVEVTVF9DVVNUT01fRVhU UkFfREFUQV9ERVNDKSkpOworCQkJcGdzdGF0X3Jlc2V0X29mX2tpbmQoUEdTVEFUX0tJTkRfVEVT VF9DVVNUT01fVkFSX1NUQVRTKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qIFNl ZWsgdG8gdGhlIG9mZnNldCBhbmQgcmVhZCBkZXNjcmlwdGlvbiAqLworCWlmIChmc2VlayhmZF9k ZXNjcmlwdGlvbiwgb2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkKKwl7CisJCWVsb2coV0FSTklORywg ImZhaWxlZCB0byBzZWVrIHRvIG9mZnNldCAlbGQgaW4gZGVzY3JpcHRpb24gZmlsZSIsIG9mZnNl dCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlidWZmZXIgPSBwYWxsb2MobGVuKTsKKwlpZiAo ZnJlYWQoYnVmZmVyLCAxLCBsZW4sIGZkX2Rlc2NyaXB0aW9uKSAhPSBsZW4pCisJeworCQlwZnJl ZShidWZmZXIpOworCQllbG9nKFdBUk5JTkcsICJmYWlsZWQgdG8gcmVhZCBkZXNjcmlwdGlvbiBm cm9tIGZpbGUiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEFsbG9jYXRlIHNwYWNlIGlu IERTQSBhbmQgY29weSB0aGUgZGVzY3JpcHRpb24gKi8KKwlkcCA9IGRzYV9hbGxvY2F0ZShjdXN0 b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhLCBsZW4pOworCW1lbWNweShkc2FfZ2V0X2FkZHJlc3Mo Y3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSwgZHApLCBidWZmZXIsIGxlbik7CisJZW50cnkt PmRlc2NyaXB0aW9uID0gZHA7CisKKwlwZnJlZShidWZmZXIpOworCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiB0ZXN0X2N1c3RvbV92YXJfc3RhdHNfZmlsZV9jbGVhbnVwKCkgLQorICoKKyAq IENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBlbmQgb2Ygc3RhdGlzdGljcyBmaWxlIG9w ZXJhdGlvbnMuCisgKiBIYW5kbGVzIGNsb3NpbmcgZmlsZXMgYW5kIGNsZWFudXAgYmFzZWQgb24g dGhlIG9wZXJhdGlvbiB0eXBlLgorICovCitzdGF0aWMgdm9pZAordGVzdF9jdXN0b21fdmFyX3N0 YXRzX2ZpbGVfY2xlYW51cChQZ1N0YXRfU3RhdHNGaWxlT3Agc3RhdHVzKQoreworCXN3aXRjaCAo c3RhdHVzKQorCXsKKwkJY2FzZSBTVEFUU19XUklURToKKwkJCWlmICghZmRfZGVzY3JpcHRpb24p CisJCQkJcmV0dXJuOworCisJCQlmZF9kZXNjcmlwdGlvbl9vZmZzZXQgPSAwOworCisJCQkvKiBD aGVjayBmb3Igd3JpdGUgZXJyb3JzIGFuZCBjbGVhbnVwIGlmIG5lY2Vzc2FyeSAqLworCQkJaWYg KGZlcnJvcihmZF9kZXNjcmlwdGlvbikpCisJCQl7CisJCQkJZXJlcG9ydChMT0csCisJCQkJCQko ZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0 ZSBzdGF0aXN0aWNzIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQkJCVRFU1RfQ1VTVE9NX0VYVFJB X0RBVEFfREVTQykpKTsKKwkJCQlGcmVlRmlsZShmZF9kZXNjcmlwdGlvbik7CisJCQkJdW5saW5r KFRFU1RfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQyk7CisJCQl9CisJCQllbHNlIGlmIChGcmVlRmls ZShmZF9kZXNjcmlwdGlvbikgPCAwKQorCQkJeworCQkJCWVyZXBvcnQoTE9HLAorCQkJCQkJKGVy cmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2Ug c3RhdGlzdGljcyBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJCQlURVNUX0NVU1RPTV9FWFRSQV9E QVRBX0RFU0MpKSk7CisJCQkJdW5saW5rKFRFU1RfQ1VTVE9NX0VYVFJBX0RBVEFfREVTQyk7CisJ CQl9CisJCQlicmVhazsKKworCQljYXNlIFNUQVRTX1JFQUQ6CisJCQlpZiAoIWZkX2Rlc2NyaXB0 aW9uKQorCQkJCXJldHVybjsKKworCQkJRnJlZUZpbGUoZmRfZGVzY3JpcHRpb24pOworCisJCQkv KiBSZW1vdmUgdGhlIHRlbXBvcmFyeSBzdGF0aXN0aWNzIGZpbGUgYWZ0ZXIgcmVhZGluZyAqLwor CQkJZWxvZyhERUJVRzIsICJyZW1vdmluZyBzdGF0aXN0aWNzIGZpbGUgXCIlc1wiIiwgVEVTVF9D VVNUT01fRVhUUkFfREFUQV9ERVNDKTsKKwkJCXVubGluayhURVNUX0NVU1RPTV9FWFRSQV9EQVRB X0RFU0MpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFUU19ESVNDQVJEOgorCQkJeworCQkJCWlu dAkJCXJldDsKKworCQkJCS8qIEF0dGVtcHQgdG8gcmVtb3ZlIHRoZSBzdGF0aXN0aWNzIGZpbGUg Ki8KKwkJCQlyZXQgPSB1bmxpbmsoVEVTVF9DVVNUT01fRVhUUkFfREFUQV9ERVNDKTsKKwkJCQlp ZiAocmV0ICE9IDApCisJCQkJeworCQkJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCQkJZWxv ZyhMT0csCisJCQkJCQkJICJkaWRuJ3QgbmVlZCB0byB1bmxpbmsgcGVybWFuZW50IHN0YXRzIGZp bGUgXCIlc1wiIC0gZGlkbid0IGV4aXN0IiwKKwkJCQkJCQkgVEVTVF9DVVNUT01fRVhUUkFfREFU QV9ERVNDKTsKKwkJCQkJZWxzZQorCQkJCQkJZXJlcG9ydChMT0csCisJCQkJCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgdW5saW5rIHBl cm1hbmVudCBzdGF0aXN0aWNzIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQkJCQkJVEVTVF9DVVNU T01fRVhUUkFfREFUQV9ERVNDKSkpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQllcmVw b3J0KExPRywKKwkJCQkJCQkoZXJybXNnX2ludGVybmFsKCJ1bmxpbmtlZCBwZXJtYW5lbnQgc3Rh dGlzdGljcyBmaWxlIFwiJXNcIiIsCisJCQkJCQkJCQkJCSBURVNUX0NVU1RPTV9FWFRSQV9EQVRB X0RFU0MpKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJfQorCisJZmRfZGVzY3JpcHRpb24g PSBOVUxMOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBIZWxwZXIgZnVuY3Rpb25zCiAg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjIsOCArNDIzLDcgQEAgdGVzdF9jdXN0b21fc3RhdHNf dmFyX2ZldGNoX2VudHJ5KGNvbnN0IGNoYXIgKnN0YXRfbmFtZSkKICAqIHRlc3RfY3VzdG9tX3N0 YXRzX3Zhcl9jcmVhdGUKICAqCQlDcmVhdGUgbmV3IGN1c3RvbSBzdGF0aXN0aWMgZW50cnkKICAq Ci0gKiBJbml0aWFsaXplcyBhIHplcm8tdmFsdWVkIHN0YXRpc3RpY3MgZW50cnkgaW4gc2hhcmVk IG1lbW9yeS4KLSAqIFZhbGlkYXRlcyBuYW1lIGxlbmd0aCBhZ2FpbnN0IE5BTUVEQVRBTEVOIGxp bWl0LgorICogSW5pdGlhbGl6ZXMgYSBzdGF0aXN0aWNzIGVudHJ5IHdpdGggdGhlIGdpdmVuIG5h bWUgYW5kIGRlc2NyaXB0aW9uLgogICovCiBQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfY3VzdG9t X3N0YXRzX3Zhcl9jcmVhdGUpOwogRGF0dW0KQEAgLTE3Miw2ICs0MzIsOSBAQCB0ZXN0X2N1c3Rv bV9zdGF0c192YXJfY3JlYXRlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUGdTdGF0X0VudHJ5UmVmICpl bnRyeV9yZWY7CiAJUGdTdGF0U2hhcmVkX0N1c3RvbVZhckVudHJ5ICpzaGFyZWRfZW50cnk7CiAJ Y2hhcgkgICAqc3RhdF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDAp KTsKKwljaGFyCSAgICpkZXNjcmlwdGlvbiA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVY VF9QUCgxKSk7CisJZHNhX3BvaW50ZXIgZHAgPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwlib29sCQlm b3VuZDsKIAogCS8qIFZhbGlkYXRlIG5hbWUgbGVuZ3RoIGZpcnN0ICovCiAJaWYgKHN0cmxlbihz dGF0X25hbWUpID49IE5BTUVEQVRBTEVOKQpAQCAtMTgwLDYgKzQ0MywyMCBAQCB0ZXN0X2N1c3Rv bV9zdGF0c192YXJfY3JlYXRlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJIGVycm1zZygiY3VzdG9t IHN0YXRpc3RpYyBuYW1lIFwiJXNcIiBpcyB0b28gbG9uZyIsIHN0YXRfbmFtZSksCiAJCQkJIGVy cmRldGFpbCgiTmFtZSBtdXN0IGJlIGxlc3MgdGhhbiAlZCBjaGFyYWN0ZXJzLiIsIE5BTUVEQVRB TEVOKSkpOwogCisJLyogSW5pdGlhbGl6ZSBEU0EgYW5kIGRlc2NyaXB0aW9uIHByb3ZpZGVkICov CisJaWYgKCFjdXN0b21fc3RhdHNfZGVzY3JpcHRpb25fZHNhKQorCQljdXN0b21fc3RhdHNfZGVz Y3JpcHRpb25fZHNhID0gR2V0TmFtZWREU0EoInRlc3RfY3VzdG9tX3N0YXRfZHNhIiwgJmZvdW5k KTsKKworCWlmICghY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIERTQSBmb3IgY3VzdG9tIHN0YXRpc3Rp Y3MgZGVzY3JpcHRpb25zIikpKTsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGluIERTQSBhbmQgY29w eSBkZXNjcmlwdGlvbiAqLworCWRwID0gZHNhX2FsbG9jYXRlKGN1c3RvbV9zdGF0c19kZXNjcmlw dGlvbl9kc2EsIHN0cmxlbihkZXNjcmlwdGlvbikgKyAxKTsKKwltZW1jcHkoZHNhX2dldF9hZGRy ZXNzKGN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EsIGRwKSwKKwkJICAgZGVzY3JpcHRpb24s CisJCSAgIHN0cmxlbihkZXNjcmlwdGlvbikgKyAxKTsKKwogCS8qIENyZWF0ZSBvciBnZXQgZXhp c3RpbmcgZW50cnkgKi8KIAllbnRyeV9yZWYgPSBwZ3N0YXRfZ2V0X2VudHJ5X3JlZl9sb2NrZWQo UEdTVEFUX0tJTkRfVEVTVF9DVVNUT01fVkFSX1NUQVRTLCBJbnZhbGlkT2lkLAogCQkJCQkJCQkJ CQlQR1NUQVRfQ1VTVE9NX1ZBUl9TVEFUU19JRFgoc3RhdF9uYW1lKSwgdHJ1ZSk7CkBAIC0xOTIs NiArNDY5LDkgQEAgdGVzdF9jdXN0b21fc3RhdHNfdmFyX2NyZWF0ZShQR19GVU5DVElPTl9BUkdT KQogCS8qIFplcm8taW5pdGlhbGl6ZSBzdGF0aXN0aWNzICovCiAJbWVtc2V0KCZzaGFyZWRfZW50 cnktPnN0YXRzLCAwLCBzaXplb2Yoc2hhcmVkX2VudHJ5LT5zdGF0cykpOwogCisJLyogU3RvcmUg ZGVzY3JpcHRpb24gcG9pbnRlciAqLworCXNoYXJlZF9lbnRyeS0+ZGVzY3JpcHRpb24gPSBkcDsK KwogCXBnc3RhdF91bmxvY2tfZW50cnkoZW50cnlfcmVmKTsKIAogCVBHX1JFVFVSTl9WT0lEKCk7 CkBAIC0yMjYsOCArNTA2LDcgQEAgdGVzdF9jdXN0b21fc3RhdHNfdmFyX3VwZGF0ZShQR19GVU5D VElPTl9BUkdTKQogICogdGVzdF9jdXN0b21fc3RhdHNfdmFyX2Ryb3AKICAqCQlSZW1vdmUgY3Vz dG9tIHN0YXRpc3RpYyBlbnRyeQogICoKLSAqIERyb3BzIHRoZSBuYW1lZCBzdGF0aXN0aWMgZnJv bSBzaGFyZWQgbWVtb3J5IGFuZCByZXF1ZXN0cwotICogZ2FyYmFnZSBjb2xsZWN0aW9uIGlmIG5l ZWRlZC4KKyAqIERyb3BzIHRoZSBuYW1lZCBzdGF0aXN0aWMgZnJvbSBzaGFyZWQgbWVtb3J5Lgog ICovCiBQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9kcm9wKTsKIERh dHVtCkBAIC0yNDcsNyArNTI2LDcgQEAgdGVzdF9jdXN0b21fc3RhdHNfdmFyX2Ryb3AoUEdfRlVO Q1RJT05fQVJHUykKICAqIHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9yZXBvcnQKICAqCQlSZXRyaWV2 ZSBjdXN0b20gc3RhdGlzdGljIHZhbHVlcwogICoKLSAqIFJldHVybnMgc2luZ2xlIHJvdyB3aXRo IHN0YXRpc3RpYyBuYW1lIGFuZCBjYWxsIGNvdW50IGlmIHRoZQorICogUmV0dXJucyBzaW5nbGUg cm93IHdpdGggc3RhdGlzdGljIG5hbWUsIGNhbGwgY291bnQsIGFuZCBkZXNjcmlwdGlvbiBpZiB0 aGUKICAqIHN0YXRpc3RpYyBleGlzdHMsIG90aGVyd2lzZSByZXR1cm5zIG5vIHJvd3MuCiAgKi8K IFBHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9jdXN0b21fc3RhdHNfdmFyX3JlcG9ydCk7CkBAIC0y ODEsOSArNTYwLDEzIEBAIHRlc3RfY3VzdG9tX3N0YXRzX3Zhcl9yZXBvcnQoUEdfRlVOQ1RJT05f QVJHUykKIAogCWlmIChmdW5jY3R4LT5jYWxsX2NudHIgPCBmdW5jY3R4LT5tYXhfY2FsbHMpCiAJ ewotCQlEYXR1bQkJdmFsdWVzWzJdOwotCQlib29sCQludWxsc1syXSA9IHtmYWxzZSwgZmFsc2V9 OworCQlEYXR1bQkJdmFsdWVzWzNdOworCQlib29sCQludWxsc1szXSA9IHtmYWxzZSwgZmFsc2Us IGZhbHNlfTsKIAkJSGVhcFR1cGxlCXR1cGxlOworCQlQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3Jl ZjsKKwkJUGdTdGF0U2hhcmVkX0N1c3RvbVZhckVudHJ5ICpzaGFyZWRfZW50cnk7CisJCWNoYXIJ ICAgKmRlc2NyaXB0aW9uID0gTlVMTDsKKwkJYm9vbAkJZm91bmQ7CiAKIAkJc3RhdF9uYW1lID0g dGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKIAkJc3RhdF9lbnRyeSA9IHRl c3RfY3VzdG9tX3N0YXRzX3Zhcl9mZXRjaF9lbnRyeShzdGF0X25hbWUpOwpAQCAtMjkxLDkgKzU3 NCwzMyBAQCB0ZXN0X2N1c3RvbV9zdGF0c192YXJfcmVwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS8qIFJldHVybiByb3cgb25seSBpZiBlbnRyeSBleGlzdHMgKi8KIAkJaWYgKHN0YXRfZW50cnkp CiAJCXsKKwkJCS8qIEdldCBlbnRyeSByZWYgdG8gYWNjZXNzIHNoYXJlZCBlbnRyeSAqLworCQkJ ZW50cnlfcmVmID0gcGdzdGF0X2dldF9lbnRyeV9yZWYoUEdTVEFUX0tJTkRfVEVTVF9DVVNUT01f VkFSX1NUQVRTLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQkgUEdTVEFUX0NVU1RPTV9WQVJfU1RB VFNfSURYKHN0YXRfbmFtZSksIGZhbHNlLCBOVUxMKTsKKworCQkJaWYgKGVudHJ5X3JlZikKKwkJ CXsKKwkJCQlzaGFyZWRfZW50cnkgPSAoUGdTdGF0U2hhcmVkX0N1c3RvbVZhckVudHJ5ICopIGVu dHJ5X3JlZi0+c2hhcmVkX3N0YXRzOworCisJCQkJLyogR2V0IGRlc2NyaXB0aW9uIGZyb20gRFNB IGlmIGF2YWlsYWJsZSAqLworCQkJCWlmIChEc2FQb2ludGVySXNWYWxpZChzaGFyZWRfZW50cnkt PmRlc2NyaXB0aW9uKSkKKwkJCQl7CisJCQkJCWlmICghY3VzdG9tX3N0YXRzX2Rlc2NyaXB0aW9u X2RzYSkKKwkJCQkJCWN1c3RvbV9zdGF0c19kZXNjcmlwdGlvbl9kc2EgPSBHZXROYW1lZERTQSgi dGVzdF9jdXN0b21fc3RhdF9kc2EiLCAmZm91bmQpOworCisJCQkJCWlmIChjdXN0b21fc3RhdHNf ZGVzY3JpcHRpb25fZHNhKQorCQkJCQkJZGVzY3JpcHRpb24gPSBkc2FfZ2V0X2FkZHJlc3MoY3Vz dG9tX3N0YXRzX2Rlc2NyaXB0aW9uX2RzYSwgc2hhcmVkX2VudHJ5LT5kZXNjcmlwdGlvbik7CisJ CQkJfQorCQkJfQorCiAJCQl2YWx1ZXNbMF0gPSBQb2ludGVyR2V0RGF0dW0oY3N0cmluZ190b190 ZXh0KHN0YXRfbmFtZSkpOwogCQkJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShzdGF0X2VudHJ5 LT5udW1jYWxscyk7CiAKKwkJCWlmIChkZXNjcmlwdGlvbikKKwkJCQl2YWx1ZXNbMl0gPSBQb2lu dGVyR2V0RGF0dW0oY3N0cmluZ190b190ZXh0KGRlc2NyaXB0aW9uKSk7CisJCQllbHNlCisJCQkJ bnVsbHNbMl0gPSB0cnVlOworCiAJCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZShmdW5jY3R4LT50 dXBsZV9kZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAkJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBI ZWFwVHVwbGVHZXREYXR1bSh0dXBsZSkpOwogCQl9Ci0tIAoyLjQzLjAKCg== --000000000000bbc2a5064575885f--