From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 467C1C83F03 for ; Wed, 9 Jul 2025 11:51:15 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uZTJc-0007o7-EK; Wed, 09 Jul 2025 07:50:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uZTIu-00076p-Dj for grub-devel@gnu.org; Wed, 09 Jul 2025 07:49:39 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uZTIp-000714-GU for grub-devel@gnu.org; Wed, 09 Jul 2025 07:49:36 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5698Rplj020492; Wed, 9 Jul 2025 11:49:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=gBdYRX70eHefodRpO Zjdw9uxqHgePBKSFrwPiqATxzk=; b=W9MqqjBaXLP5BcG1WqtprwUqhqI7GLp3c jgswQZ6LxCMVQFmTNxj0+q4mXjgPknY6swAUmF6jQdyfJwPLh8BWsoQ/jIGWkL23 6eY694JgGxoksGwZS/Aw3+0nerrC79nXg25GhEED1GjrpjWbtIpJXO2y6WC/MUYx 8itXVuyJh8i1pvLeNGwCmlfwnSeAq/61/RbSvM1dPhE0QDE2dxk7YxEOZmY2N7d+ 7wOI5x/wU3GifuQNzsb5Q8nShPdFGnL4TtnYJ/xO7Y6p8eG6aeliyIFDGSK9rCZD 2cBZEfWgadTrGWMTeSLFC4JZgHTs0LlxfSiU0wjMaBr1BVQBHlHBA== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 47puss61rd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Jul 2025 11:49:27 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 5698O15S024277; Wed, 9 Jul 2025 11:49:26 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 47qh32fnxg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Jul 2025 11:49:26 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 569BnMUl32637592 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 9 Jul 2025 11:49:22 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6B41C20040; Wed, 9 Jul 2025 11:49:22 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 012202004B; Wed, 9 Jul 2025 11:49:20 +0000 (GMT) Received: from localhost.localdomain (unknown [9.39.27.9]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 9 Jul 2025 11:49:19 +0000 (GMT) From: Sudhakar Kuppusamy To: grub-devel@gnu.org Cc: jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com, nayna@linux.ibm.com, ltcgcw@linux.vnet.ibm.com, ssrish@linux.ibm.com, stefanb@linux.ibm.com, avnish@linux.ibm.com, Sudhakar Kuppusamy , dja@axtens.net Subject: [PATCH v4 21/23] appendedsig: Introduce GRUB commands to access db and dbx Date: Wed, 9 Jul 2025 17:15:38 +0530 Message-Id: <20250709114540.58608-22-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250709114540.58608-1-sudhakar@linux.ibm.com> References: <20250709114540.58608-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=Vaj3PEp9 c=1 sm=1 tr=0 ts=686e5747 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Wb1JkmetP80A:10 a=VnNF1IyMAAAA:8 a=_TPtFlIsTPKlr-B74K4A:9 X-Proofpoint-GUID: y8F153u4ljS1-7nCdyx2Crk5nXiab7Km X-Proofpoint-ORIG-GUID: y8F153u4ljS1-7nCdyx2Crk5nXiab7Km X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzA5MDEwNiBTYWx0ZWRfX/aRIO55Uu+xb HWncJk29iorMPmn0tUEtAvKP6vOSgWBLFrYuDryLytvJKhUUlRK7aTLwZmJJLnDmke2Spy6TATE Bqf260t6Y66n2e0S70zHUBdZxbxztHnuTf9SCIo7Fjt4LxIJWjgoT6A1kxKNIDwELvG7GJlq7sn sF45LRJi5Hc4/xLQUGNt7NNzqPZ/D4Vq+jd3UZpLfac0rkdNrakBH54RrqOWXcLMxEUdB2jKXze NQgHhMhkHIbsHg5evZfAI336C1GEfk1qKTG3VX2TgTBtasKEyfd9wRK8hstESnUDin4NjipXHO8 RDT+LNiqoBjLIpxF+RGFu/DR1dc9weWYP3B59QwbR+E3S2eSKbND6fZHfU53nHfQeZX+3F/ca0G XNxkI+wG2b2sVD+BBBRsCM7wNs6qBhHVMydvxtwekjTp5xvcLxvUL6KfdCTgnAkw2Ta767kd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-09_02,2025-07-08_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 mlxlogscore=999 suspectscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 bulkscore=0 mlxscore=0 spamscore=0 phishscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507090106 Received-SPF: pass client-ip=148.163.156.1; envelope-from=sudhakar@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org SW50cm9kdWNpbmcgdGhlIGZvbGxvd2luZyBkYiBhbmQgZGJ4IGNvbW1hbmRzCgogIDEuIGFwcGVu ZF9saXN0X2RiOgogICAgICBJdCB3aWxsIHNob3cgdGhlIGxpc3Qgb2YgdHJ1c3RlZCBjZXJ0aWZp Y2F0ZXMgYW5kIGJpbmFyeSBoYXNoZXMKICAyLiBhcHBlbmRfbGlzdF9kYng6CiAgICAgIEl0IHdp bGwgc2hvdyB0aGUgbGlzdCBvZiBkaXN0cnVzdGVkIGNlcnRpZmljYXRlcyBhbmQgYmluYXJ5L2Nl cnRpZmljYXRlIGhhc2hlcwogIDMuIGFwcGVuZF9hZGRfZGJfY2VydDoKICAgICAgSXQgd2lsbCBh ZGQgdGhlIHRydXN0ZWQgY2VydGlmaWNhdGUgdG8gdGhlIGRiIGxpc3QKICA0LiBhcHBlbmRfYWRk X2RiX3NpZzoKICAgICAgSXQgd2lsbCBhZGQgdGhlIGNlcnRpZmljYXRlL2JpbmFyeSBoYXNoIHRv IHRoZSBkYiBsaXN0CiAgNS4gYXBwZW5kX3JtX2RieF9jZXJ0OgogICAgICBJdCB3aWxsIHJlbW92 ZSB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBkYiBsaXN0CiAgNi4gYXBwZW5kX2Fk ZF9kYnhfc2lnOgogICAgICBJdCB3aWxsIGFkZCB0aGUgY2VydGlmaWNhdGUvYmluYXJ5IGhhc2gg dG8gdGhlIGRieCBsaXN0CgpOb3RlOi0KICAgVGhlIGFkZGl0aW9uL2RlbGV0aW9uIG9mIHRydXN0 ZWQgY2VydGlmaWNhdGVzIGFuZCBiaW5hcnkgaGFzaGVzCmFyZSBub3QgYWxsb3dlZCBpbiBHUlVC IGNvbW1hbmQgcHJvbXB0IHdoaWxlIHNlY3VyZSBib290IGlzIGVuYWJsZWQuCgpTaWduZWQtb2Zm LWJ5OiBTdWRoYWthciBLdXBwdXNhbXkgPHN1ZGhha2FyQGxpbnV4LmlibS5jb20+ClJldmlld2Vk LWJ5OiBBdm5pc2ggQ2hvdWhhbiA8YXZuaXNoQGxpbnV4LmlibS5jb20+Ci0tLQogZ3J1Yi1jb3Jl L2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMgfCA0MTYgKysrKysrKysrKysrKysr LS0tLQogMSBmaWxlIGNoYW5nZWQsIDMzNyBpbnNlcnRpb25zKCspLCA3OSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcu YyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCmluZGV4IDcz M2NiMzJkYi4uYzliNzMzMzUwIDEwMDY0NAotLS0gYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5k ZWRzaWcvYXBwZW5kZWRzaWcuYworKysgYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcv YXBwZW5kZWRzaWcuYwpAQCAtMTAzLDYgKzEwMywzOCBAQCBzdGF0aWMgZW51bQogICBDSEVDS19T SUdTX0ZPUkNFRCA9IDIKIH0gY2hlY2tfc2lncyA9IENIRUNLX1NJR1NfTk87CiAKK2VudW0KK3sK KyAgT1BUSU9OX0JJTkFSWV9IQVNIID0gMCwKKyAgT1BUSU9OX0NFUlRfSEFTSCA9IDEKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ3J1Yl9hcmdfb3B0aW9uIG9wdGlvbnNbXSA9Cit7CisgIHsi YmluYXJ5LWhhc2giLCAnYicsIDAsIE5fKCJoYXNoIGZpbGUgb2YgdGhlIGJpbmFyeS4iKSwgMCwg QVJHX1RZUEVfTk9ORX0sCisgIHsiY2VydC1oYXNoIiwgJ2MnLCAxLCBOXygiaGFzaCBmaWxlIG9m IHRoZSBjZXJ0aWZpY2F0ZS4iKSwgMCwgQVJHX1RZUEVfTk9ORX0sCisgIHswLCAwLCAwLCAwLCAw LCAwfQorfTsKKworc3RhdGljIHZvaWQKK3ByaW50X2hleCAoY29uc3QgZ3J1Yl91aW50OF90ICpk YXRhLCBjb25zdCBncnViX3NpemVfdCBsZW5ndGgpCit7CisgIGdydWJfc2l6ZV90IGksIGNvdW50 ID0gMDsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoLTE7IGkrKykKKyAgICB7CisgICAgICBn cnViX3ByaW50ZiAoIiUwMng6IiwgZGF0YVtpXSk7CisgICAgICBjb3VudCsrOworICAgICAgaWYg KGNvdW50ID09IDE2KQorICAgICAgICB7CisgICAgICAgICAgZ3J1Yl9wcmludGYgKCJcblx0ICAg ICAgIik7CisgICAgICAgICAgY291bnQgPSAwOworICAgICAgICB9CisgICAgfQorCisgIGdydWJf cHJpbnRmICgiJTAyeFxuIiwgZGF0YVtpXSk7Cit9CisKIC8qCiAgKiBHVUlEIGNhbiBiZSB1c2Vk IHRvIGRldGVybWluZSB0aGUgaGFzaGluZyBmdW5jdGlvbiBhbmQKICAqIGdlbmVyYXRlIHRoZSBo YXNoIHVzaW5nIGRldGVybWluZWQgaGFzaGluZyBmdW5jdGlvbi4KQEAgLTYxNiwxMzIgKzY0OCwz NDIgQEAgc3RhdGljIGdydWJfZXJyX3QKIGdydWJfY21kX3ZlcmlmeV9zaWduYXR1cmUgKGdydWJf Y29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCBhcmdjLCBjaGFyICoq YXJncykKIHsKICAgZ3J1Yl9maWxlX3Qgc2lnbmVkX2ZpbGU7Ci0gIGdydWJfZXJyX3QgZXJyID0g R1JVQl9FUlJfTk9ORTsKLSAgZ3J1Yl91aW50OF90ICpkYXRhOwotICBncnViX3NpemVfdCBmaWxl X3NpemU7CisgIGdydWJfZXJyX3QgZXJyOworICBncnViX3VpbnQ4X3QgKnNpZ25lZF9kYXRhOwor ICBncnViX3NpemVfdCBzaWduZWRfZGF0YV9zaXplOwogCiAgIGlmIChhcmdjICE9IDEpCi0gICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgIm9uZSBhcmd1bWVudCBl eHBlY3RlZC4iKTsKKyAgICB7CisgICAgICBncnViX3ByaW50ZiAoImEgc2lnbmVkIGZpbGUgaXMg ZXhwZWN0ZWQuXG4iCisgICAgICAgICAgICAgICAgICAgIkV4YW1wbGU6XG5cdGFwcGVuZF92ZXJp ZnkgPFNJR05FRCBGSUxFPlxuIik7CisgICAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5U OworICAgIH0KIAogICBncnViX2RwcmludGYgKCJhcHBlbmRlZHNpZyIsICJ2ZXJpZnlpbmcgJXNc biIsIGFyZ3NbMF0pOwogCiAgIHNpZ25lZF9maWxlID0gZ3J1Yl9maWxlX29wZW4gKGFyZ3NbMF0s IEdSVUJfRklMRV9UWVBFX1ZFUklGWV9TSUdOQVRVUkUpOwogICBpZiAoc2lnbmVkX2ZpbGUgPT0g TlVMTCkKLSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImNv dWxkIG5vdCBvcGVuICVzIGZpbGUuIiwgYXJnc1swXSk7CisgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX0ZJTEVfTk9UX0ZPVU5ELCAiY291bGQgbm90IG9wZW4gJXMgZmlsZS4iLCBhcmdz WzBdKTsKIAotICBlcnIgPSBmaWxlX3JlYWRfYWxsIChzaWduZWRfZmlsZSwgJmRhdGEsICZmaWxl X3NpemUpOworICBlcnIgPSBmaWxlX3JlYWRfYWxsIChzaWduZWRfZmlsZSwgJnNpZ25lZF9kYXRh LCAmc2lnbmVkX2RhdGFfc2l6ZSk7CiAgIGlmIChlcnIgPT0gR1JVQl9FUlJfTk9ORSkKLSAgICBl cnIgPSBncnViX3ZlcmlmeV9hcHBlbmRlZF9zaWduYXR1cmUgKGRhdGEsIGZpbGVfc2l6ZSk7Cisg ICAgZXJyID0gZ3J1Yl92ZXJpZnlfYXBwZW5kZWRfc2lnbmF0dXJlIChzaWduZWRfZGF0YSwgc2ln bmVkX2RhdGFfc2l6ZSk7CiAKICAgZ3J1Yl9maWxlX2Nsb3NlIChzaWduZWRfZmlsZSk7Ci0gIGdy dWJfZnJlZSAoZGF0YSk7CisgIGdydWJfZnJlZSAoc2lnbmVkX2RhdGEpOwogCiAgIHJldHVybiBl cnI7CiB9CiAKIHN0YXRpYyBncnViX2Vycl90Ci1ncnViX2NtZF9kYnggKGdydWJfY29tbWFuZF90 IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCBhcmdjLCBjaGFyICoqYXJncykKK2dy dWJfY21kX2xpc3RfZGIgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQp KSwKKyAgICAgICAgICAgICAgICAgIGludCBhcmdjIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLCBj aGFyICoqYXJncyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKyAgc3RydWN0IHg1MDlfY2Vy dGlmaWNhdGUgKmNlcnQ7CisgIGdydWJfc2l6ZV90IGksIGNlcnRfbnVtID0gMTsKKworICBmb3Ig KGNlcnQgPSBkYi5jZXJ0czsgY2VydDsgY2VydCA9IGNlcnQtPm5leHQpCisgICAgeworICAgICAg Z3J1Yl9wcmludGYgKCJ0cnVzdGVkIGNlcnRpZmljYXRlICUiIFBSSXVHUlVCX1NJWkUgIjpcbiIs IGNlcnRfbnVtKTsKKyAgICAgIGdydWJfcHJpbnRmICgiXHRzZXJpYWw6ICIpOworCisgICAgICBm b3IgKGkgPSAwOyBpIDwgY2VydC0+c2VyaWFsX2xlbiAtIDE7IGkrKykKKyAgICAgICAgZ3J1Yl9w cmludGYgKCIlMDJ4OiIsIGNlcnQtPnNlcmlhbFtpXSk7CisKKyAgICAgIGdydWJfcHJpbnRmICgi JTAyeFxuIiwgY2VydC0+c2VyaWFsW2NlcnQtPnNlcmlhbF9sZW4gLSAxXSk7CisgICAgICBncnVi X3ByaW50ZiAoIlx0Q046ICVzXG5cbiIsIGNlcnQtPnN1YmplY3QpOworICAgICAgY2VydF9udW0r KzsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgaSA8IGRiLnNpZ25hdHVyZV9lbnRyaWVzOyBpKysp CisgICAgeworICAgICAgZ3J1Yl9wcmludGYgKCJ0cnVzdGVkIGJpbmFyeSBoYXNoICUiIFBSSXVH UlVCX1NJWkUgIjpcbiIsIGkgKyAxKTsKKyAgICAgIGdydWJfcHJpbnRmICgiXHRoYXNoOiAiKTsK KyAgICAgIHByaW50X2hleCAoZGIuc2lnbmF0dXJlc1tpXSwgZGIuc2lnbmF0dXJlX3NpemVbaV0p OworICAgIH0KKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworc3RhdGljIGdydWJfZXJy X3QKK2dydWJfY21kX2xpc3RfZGJ4IChncnViX2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXygo dW51c2VkKSksCisgICAgICAgICAgICAgICAgICAgaW50IGFyZ2MgX19hdHRyaWJ1dGVfXygodW51 c2VkKSksIGNoYXIgKiphcmdzIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQogewotICB1bnNpZ25l ZCBsb25nIGNlcnRfbnVtLCBpID0gMDsKLSAgY29uc3QgY2hhciAqZW5kOwotICBzdHJ1Y3QgeDUw OV9jZXJ0aWZpY2F0ZSAqY2VydCwgKnByZXZfY2VydDsKKyAgc3RydWN0IHg1MDlfY2VydGlmaWNh dGUgKmNlcnQ7CisgIGdydWJfc2l6ZV90IGksIGNlcnRfbnVtID0gMTsKKworICBmb3IgKGNlcnQg PSBkYnguY2VydHM7IGNlcnQ7IGNlcnQgPSBjZXJ0LT5uZXh0KQorICAgIHsKKyAgICAgIGdydWJf cHJpbnRmICgiZGlzdHJ1c3RlZCBjZXJ0aWZpY2F0ZSAlIiBQUkl1R1JVQl9TSVpFICI6XG4iLCBj ZXJ0X251bSk7CisgICAgICBncnViX3ByaW50ZiAoIlx0c2VyaWFsOiAiKTsKKworICAgICAgZm9y IChpID0gMDsgaSA8IGNlcnQtPnNlcmlhbF9sZW4gLSAxOyBpKyspCisgICAgICAgIGdydWJfcHJp bnRmICgiJTAyeDoiLCBjZXJ0LT5zZXJpYWxbaV0pOworCisgICAgICBncnViX3ByaW50ZiAoIiUw MnhcbiIsIGNlcnQtPnNlcmlhbFtjZXJ0LT5zZXJpYWxfbGVuIC0gMV0pOworICAgICAgZ3J1Yl9w cmludGYgKCJcdENOOiAlc1xuXG4iLCBjZXJ0LT5zdWJqZWN0KTsKKyAgICAgIGNlcnRfbnVtKys7 CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBkYnguc2lnbmF0dXJlX2VudHJpZXM7IGkrKykK KyAgICB7CisgICAgICBncnViX3ByaW50ZiAoImRpc3RydXN0ZWQgY2VydGlmaWNhdGUvYmluYXJ5 IGhhc2ggJSIgUFJJdUdSVUJfU0laRSAiOlxuIiwgaSArIDEpOworICAgICAgZ3J1Yl9wcmludGYg KCJcdGhhc2g6ICIpOworICAgICAgcHJpbnRfaGV4IChkYnguc2lnbmF0dXJlc1tpXSwgZGJ4LnNp Z25hdHVyZV9zaXplW2ldKTsKKyAgICB9CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisK K3N0YXRpYyBncnViX2Vycl90CitncnViX2NtZF9kYl9jZXJ0IChncnViX2NvbW1hbmRfdCBjbWQg X19hdHRyaWJ1dGVfXygodW51c2VkKSksIGludCBhcmdjLCBjaGFyICoqYXJncykKK3sKKyAgZ3J1 Yl9lcnJfdCBlcnI7CisgIGdydWJfZmlsZV90IGNlcnRfZmlsZTsKKyAgZ3J1Yl91aW50OF90ICpj ZXJ0X2RhdGEgPSBOVUxMOworICBncnViX3NpemVfdCBjZXJ0X2RhdGFfc2l6ZSA9IDA7CiAKICAg aWYgKGFyZ2MgIT0gMSkKLSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VN RU5ULCAib25lIGFyZ3VtZW50IGV4cGVjdGVkLiIpOworICAgIHsKKyAgICAgIGdydWJfcHJpbnRm ICgiYSB0cnVzdGVkIFguNTA5IGNlcnRpZmljYXRlIGZpbGUgaXMgZXhwZWN0ZWQgaW4gREVSIGZv cm1hdC5cbiIKKyAgICAgICAgICAgICAgICAgICAiRXhhbXBsZTpcblx0YXBwZW5kX2FkZF9kYl9j ZXJ0IDxDRVJUIEZJTEU+XG4iKTsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7 CisgICAgfQogCi0gIGNlcnRfbnVtID0gZ3J1Yl9zdHJ0b3VsIChhcmdzWzBdLCAmZW5kLCAxMCk7 Ci0gIGlmICgqKGFyZ3NbMF0pID09ICdcMCcgfHwgKmVuZCAhPSAnXDAnKQotICAgIHJldHVybiBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsCi0gICAgICAgICAgICAgICAgICAgICAg ICJub24tbnVtZXJpYyBvciBjZXJ0aWZpY2F0ZSBudW1iZXIgaXMgaW52YWxpZCAlcyIsIGFyZ3Nb MF0pOwotICBlbHNlIGlmIChjZXJ0X251bSA9PSAwKQotICAgIHJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9PVVRfT0ZfUkFOR0UsICJjZXJ0aWZpY2F0ZSBudW1iZXJzIHN0YXJ0IGF0IDEuIik7 CisgIGlmIChjaGVja19zaWdzID09IENIRUNLX1NJR1NfRk9SQ0VEKQorICAgIHsKKyAgICAgIGdy dWJfcHJpbnRmICgiV2FybmluZzogc2luY2Ugc2VjdXJlIGJvb3QgaXMgZW5hYmxlZCwgIgorICAg ICAgICAgICAgICAgICAgICJhZGRpbmcgb2YgdHJ1c3RlZCBYLjUwOSBjZXJ0aWZpY2F0ZSBpcyBu b3QgcGVybWl0dGVkIVxuIik7CisgICAgICByZXR1cm4gR1JVQl9FUlJfQUNDRVNTX0RFTklFRDsK KyAgICB9CiAKLSAgZm9yIChjZXJ0ID0gcHJldl9jZXJ0ID0gZGIuY2VydHM7IGNlcnQgIT0gTlVM TDsgY2VydCA9IGNlcnQtPm5leHQpCisgIGlmIChncnViX3N0cmxlbiAoYXJnc1swXSkgPT0gMCkK KyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVOQU1FLCAibWlzc2luZyB0 cnVzdGVkIFguNTA5IGNlcnRpZmljYXRlIGZpbGUuIik7CisKKyAgY2VydF9maWxlID0gZ3J1Yl9m aWxlX29wZW4gKGFyZ3NbMF0sIEdSVUJfRklMRV9UWVBFX0NFUlRJRklDQVRFX1RSVVNUIHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSVUJfRklMRV9UWVBFX05PX0RFQ09NUFJFU1Mp OworICBpZiAoY2VydF9maWxlID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX0ZJTEVfTk9UX0ZPVU5ELCAidW5hYmxlIHRvIG9wZW4gdGhlIHRydXN0ZWQgWC41MDkgY2Vy dGlmaWNhdGUgZmlsZS4iKTsKKworICBlcnIgPSBmaWxlX3JlYWRfYWxsIChjZXJ0X2ZpbGUsICZj ZXJ0X2RhdGEsICZjZXJ0X2RhdGFfc2l6ZSk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkK KyAgICBnb3RvIGNsZWFudXA7CisKKyAgZXJyID0gYWRkX2NlcnRpZmljYXRlIChjZXJ0X2RhdGEs IGNlcnRfZGF0YV9zaXplLCAmZGIsIHRydWUpOworICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUp CiAgICAgewotICAgICAgaWYgKGNlcnRfbnVtID09IDEpIC8qIE1hdGNoIHdpdGggZmlyc3QgY2Vy dGlmaWNhdGUgaW4gdGhlIGRiLiAqLwotICAgICAgICB7Ci0gICAgICAgICAgZGIuY2VydHMgPSBj ZXJ0LT5uZXh0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBlbHNlIGlmIChj ZXJ0X251bSA9PSBpKQotICAgICAgICB7Ci0gICAgICAgICAgcHJldl9jZXJ0LT5uZXh0ID0gY2Vy dC0+bmV4dDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgZnJlZV9kYl9saXN0 ICgpOworICAgICAgZnJlZV9kYnhfbGlzdCAoKTsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKGVy ciwgImFkZGluZyBvZiB0cnVzdGVkIGNlcnRpZmljYXRlIGZhaWxlZC4iKTsKKyAgICB9CisKKyBj bGVhbnVwOgorICBncnViX2ZpbGVfY2xvc2UgKGNlcnRfZmlsZSk7CisgIGdydWJfZnJlZSAoY2Vy dF9kYXRhKTsKIAotICAgICAgcHJldl9jZXJ0ID0gY2VydDsKLSAgICAgIGkrKzsKKyAgcmV0dXJu IGVycjsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfY21kX2RiX3NpZyAoZ3J1Yl9jb21t YW5kX3QgY21kIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLCBpbnQgYXJnYywgY2hhcioqYXJncykK K3sKKyAgZ3J1Yl9lcnJfdCByYzsKKyAgZ3J1Yl9maWxlX3QgaGFzaF9maWxlOworICBncnViX3Vp bnQ4X3QgKmhhc2hfZGF0YSA9IE5VTEw7CisgIGdydWJfc2l6ZV90IGhhc2hfZGF0YV9zaXplID0g MDsKKworICBpZiAoYXJnYyAhPSAxKQorICAgIHsKKyAgICAgIGdydWJfcHJpbnRmICgiYSB0cnVz dGVkIGJpbmFyeSBoYXNoIGZpbGUgaXMgZXhwZWN0ZWQuXG4iCisgICAgICAgICAgICAgICAgICAg IkV4YW1wbGU6XG5cdGFwcGVuZF9hZGRfZGJfc2lnIDxCSU5BUlkgSEFTSCBGSUxFPlxuIik7Cisg ICAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOwogICAgIH0KIAotICBpZiAoY2VydCAh PSBOVUxMKQorICBpZiAoY2hlY2tfc2lncyA9PSBDSEVDS19TSUdTX0ZPUkNFRCkKICAgICB7Ci0g ICAgICBkYi5jZXJ0X2VudHJpZXMtLTsKLSAgICAgIGNlcnRpZmljYXRlX3JlbGVhc2UgKGNlcnQp OwotICAgICAgZ3J1Yl9mcmVlIChjZXJ0KTsKLSAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwor ICAgICAgZ3J1Yl9wcmludGYgKCJXYXJuaW5nOiBzaW5jZSBzZWN1cmUgYm9vdCBpcyBlbmFibGVk LCAiCisgICAgICAgICAgICAgICAgICAgImFkZGluZyBvZiB0cnVzdGVkIGJpbmFyeSBoYXNoIGlz IG5vdCBwZXJtaXR0ZWQhXG4iKTsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9BQ0NFU1NfREVOSUVE OwogICAgIH0KIAotICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULAot ICAgICAgICAgICAgICAgICAgICAgIm5vdCBmb3VuZCBjZXJ0aWZpY2F0ZSBudW1iZXIgJWx1IGlu IHRoZSBkYi4iLCBjZXJ0X251bSk7CisgIGlmIChncnViX3N0cmxlbiAoYXJnc1swXSkgPT0gMCkK KyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVOQU1FLCAibWlzc2luZyB0 cnVzdGVkIGJpbmFyeSBoYXNoIGZpbGUiKTsKKworICBoYXNoX2ZpbGUgPSBncnViX2ZpbGVfb3Bl biAoYXJnc1swXSwgR1JVQl9GSUxFX1RZUEVfVE9fSEFTSCB8IEdSVUJfRklMRV9UWVBFX05PX0RF Q09NUFJFU1MpOworICBpZiAoaGFzaF9maWxlID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0ZJTEVfTk9UX0ZPVU5ELCAidW5hYmxlIHRvIG9wZW4gdGhlIHRydXN0ZWQg YmluYXJ5IGhhc2ggZmlsZSIpOworCisgIHJjID0gZmlsZV9yZWFkX2FsbCAoaGFzaF9maWxlLCAm aGFzaF9kYXRhLCAmaGFzaF9kYXRhX3NpemUpOworICBpZiAocmMgIT0gR1JVQl9FUlJfTk9ORSkK KyAgICBnb3RvIGNsZWFudXA7CisKKyAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAiYWRk aW5nIGEgdHJ1c3RlZCBiaW5hcnkgaGFzaCAlc1xuIHdpdGggc2l6ZSBvZiAlIiBQUkl1R1JVQl9T SVpFICJcbiIsCisgICAgICAgICAgICAgICAgaGFzaF9kYXRhLCBoYXNoX2RhdGFfc2l6ZSk7CisK KyAgLyogT25seSBhY2NlcHQgU0hBMjU2LCBTSEEzODQgYW5kIFNIQTUxMiBiaW5hcnkgaGFzaCAq LworICBpZiAoaGFzaF9kYXRhX3NpemUgIT0gMzIgJiYgaGFzaF9kYXRhX3NpemUgIT0gNDggJiYg aGFzaF9kYXRhX3NpemUgIT0gNjQpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9TSUdOQVRVUkUsICJ1bmFjY2VwdGFibGUgdHJ1c3RlZCBiaW5hcnkgaGFzaCB0eXBlLiIpOwor CisgIHJjID0gYWRkX2hhc2ggKChjb25zdCBncnViX3VpbnQ4X3QgKiopICZoYXNoX2RhdGEsIGhh c2hfZGF0YV9zaXplLCAmZGIuc2lnbmF0dXJlcywKKyAgICAgICAgICAgICAgICAgJmRiLnNpZ25h dHVyZV9zaXplLCAmZGIuc2lnbmF0dXJlX2VudHJpZXMpOworICBpZiAocmMgIT0gR1JVQl9FUlJf Tk9ORSkKKyAgICB7CisgICAgICBmcmVlX2RiX2xpc3QgKCk7CisgICAgICBmcmVlX2RieF9saXN0 ICgpOworICAgICAgcmMgPSBncnViX2Vycm9yIChyYywgImFkZGluZyBvZiB0cnVzdGVkIGJpbmFy eSBoYXNoIGZhaWxlZC4iKTsKKyAgICB9CisKKyBjbGVhbnVwOgorICBncnViX2ZpbGVfY2xvc2Ug KGhhc2hfZmlsZSk7CisgIGdydWJfZnJlZSAoaGFzaF9kYXRhKTsKKworICByZXR1cm4gcmM7CiB9 CiAKIHN0YXRpYyBncnViX2Vycl90Ci1ncnViX2NtZF9kYiAoZ3J1Yl9jb21tYW5kX3QgY21kIF9f YXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IGFyZ2MsIGNoYXIgKiphcmdzKQorZ3J1Yl9jbWRf ZGJ4X2NlcnQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGlu dCBhcmdjLCBjaGFyICoqYXJncykKIHsKLSAgZ3J1Yl9maWxlX3QgY2VydGY7Ci0gIHN0cnVjdCB4 NTA5X2NlcnRpZmljYXRlICpjZXJ0ID0gTlVMTDsKKyAgZ3J1Yl9zaXplX3QgaTsKICAgZ3J1Yl9l cnJfdCBlcnI7CisgIGdydWJfZmlsZV90IGNlcnRfZmlsZTsKKyAgc3RydWN0IHg1MDlfY2VydGlm aWNhdGUgKmN1cnJlbnRfY2VydCA9IGRiLmNlcnRzOworICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0 ZSAqcHJldmlvdXNfY2VydCA9IE5VTEw7CisgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0 ID0gTlVMTDsKKyAgYm9vbCBpc19jZXJ0X2ZvdW5kID0gZmFsc2U7CiAKICAgaWYgKGFyZ2MgIT0g MSkKLSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAib25lIGFy Z3VtZW50IGV4cGVjdGVkLiIpOworICAgIHsKKyAgICAgIGdydWJfcHJpbnRmICgiYSBkaXN0cnVz dGVkIFguNTA5IGNlcnRpZmljYXRlIGZpbGUgaXMgZXhwZWN0ZWQgaW4gREVSIGZvcm1hdC5cbiIK KyAgICAgICAgICAgICAgICAgICAiRXhhbXBsZTpcblx0YXBwZW5kX3JtX2RieF9jZXJ0IDxDRVJU IEZJTEU+XG4iKTsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7CisgICAgfQor CisgIGlmIChjaGVja19zaWdzID09IENIRUNLX1NJR1NfRk9SQ0VEKQorICAgIHsKKyAgICAgIGdy dWJfcHJpbnRmICgiV2FybmluZzogc2luY2Ugc2VjdXJlIGJvb3QgaXMgZW5hYmxlZCwgIgorICAg ICAgICAgICAgICAgICAgICJhZGRpbmcgb2YgZGlzdHJ1c3RlZCBYLjUwOSBjZXJ0aWZpY2F0ZSBp cyBub3QgcGVybWl0dGVkIVxuIik7CisgICAgICByZXR1cm4gR1JVQl9FUlJfQUNDRVNTX0RFTklF RDsKKyAgICB9CiAKLSAgY2VydGYgPSBncnViX2ZpbGVfb3BlbiAoYXJnc1swXSwgR1JVQl9GSUxF X1RZUEVfQ0VSVElGSUNBVEVfVFJVU1QgfCBHUlVCX0ZJTEVfVFlQRV9OT19ERUNPTVBSRVNTKTsK LSAgaWYgKGNlcnRmID09IE5VTEwpCi0gICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9GSUxFX1RZUEUsICJjb3VsZCBub3Qgb3BlbiAlcyBmaWxlLiIsIGFyZ3NbMF0pOworICBpZiAo Z3J1Yl9zdHJsZW4gKGFyZ3NbMF0pID09IDApCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GSUxFTkFNRSwgIm1pc3NpbmcgZGlzdHJ1c3RlZCBYLjUwOSBjZXJ0aWZpY2F0ZSBm aWxlLiIpOworCisgIGNlcnRfZmlsZSA9IGdydWJfZmlsZV9vcGVuIChhcmdzWzBdLCBHUlVCX0ZJ TEVfVFlQRV9DRVJUSUZJQ0FURV9UUlVTVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHUlVCX0ZJTEVfVFlQRV9OT19ERUNPTVBSRVNTKTsKKyAgaWYgKGNlcnRfZmlsZSA9PSBOVUxM KQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9GSUxFX05PVF9GT1VORCwgInVuYWJs ZSB0byBvcGVuIHRoZSBkaXN0cnVzdGVkIFguNTA5IGNlcnRpZmljYXRlIGZpbGUuIik7CiAKICAg Y2VydCA9IGdydWJfemFsbG9jIChzaXplb2YgKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlKSk7CiAg IGlmIChjZXJ0ID09IE5VTEwpCiAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9P Rl9NRU1PUlksICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjZXJ0aWZpY2F0ZS4iKTsK IAotICBlcnIgPSByZWFkX2NlcnRfZnJvbV9maWxlIChjZXJ0ZiwgY2VydCk7Ci0gIGdydWJfZmls ZV9jbG9zZSAoY2VydGYpOworICBlcnIgPSByZWFkX2NlcnRfZnJvbV9maWxlIChjZXJ0X2ZpbGUs IGNlcnQpOworICBncnViX2ZpbGVfY2xvc2UgKGNlcnRfZmlsZSk7CiAgIGlmIChlcnIgIT0gR1JV Ql9FUlJfTk9ORSkKICAgICB7CiAgICAgICBncnViX2ZyZWUgKGNlcnQpOwogICAgICAgcmV0dXJu IGVycjsKICAgICB9CiAKLSAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAibG9hZGVkIGNl cnRpZmljYXRlIHdpdGggQ046ICVzXG4iLCBjZXJ0LT5zdWJqZWN0KTsKKyAgZm9yIChpID0gMDsg aSA8PSBkYi5jZXJ0X2VudHJpZXM7IGkrKykKKyAgICB7CisgICAgICBpZiAoaXNfY2VydF9tYXRj aCAoY3VycmVudF9jZXJ0LCBjZXJ0KSA9PSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgaWYg KGkgPT0gMCkgLyogTWF0Y2ggd2l0aCBmaXJzdCBjZXJ0aWZpY2F0ZSBpbiB0aGUgZGIgbGlzdC4g Ki8KKyAgICAgICAgICAgIGRiLmNlcnRzID0gY3VycmVudF9jZXJ0LT5uZXh0OworICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgIHByZXZpb3VzX2NlcnQtPm5leHQgPSBjdXJyZW50X2NlcnQtPm5l eHQ7CiAKLSAgY2VydC0+bmV4dCA9IGRiLmNlcnRzOwotICBkYi5jZXJ0cyA9IGNlcnQ7Ci0gIGRi LmNlcnRfZW50cmllcysrOworICAgICAgICAgIGN1cnJlbnRfY2VydC0+bmV4dCA9IE5VTEw7Cisg ICAgICAgICAgY2VydGlmaWNhdGVfcmVsZWFzZSAoY3VycmVudF9jZXJ0KTsKKyAgICAgICAgICBn cnViX2ZyZWUgKGN1cnJlbnRfY2VydCk7CisgICAgICAgICAgZGIuY2VydF9lbnRyaWVzLS07Cisg ICAgICAgICAgaXNfY2VydF9mb3VuZCA9IHRydWU7CisgICAgICAgICAgYnJlYWs7CisJfQorICAg ICAgZWxzZQorICAgICAgeworICAgICAgICBwcmV2aW91c19jZXJ0ID0gY3VycmVudF9jZXJ0Owor ICAgICAgICBjdXJyZW50X2NlcnQgPSBjdXJyZW50X2NlcnQtPm5leHQ7CisgICAgICB9CisgICAg fQogCi0gIHJldHVybiBHUlVCX0VSUl9OT05FOworICBpZiAoaXNfY2VydF9mb3VuZCA9PSBmYWxz ZSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfVU5LTk9XTl9DT01NQU5ELAorICAg ICAgICAgICAgICAgICAgICAgICAibm90IGZvdW5kIGNlcnRpZmljYXRlIENOPSVzIGluIHRoZSBk YiBsaXN0LiIsIGNlcnQtPnN1YmplY3QpOworCisgIHJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBn cnViX2Vycl90Ci1ncnViX2NtZF9saXN0IChncnViX2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVf XyAoKHVudXNlZCkpLCBpbnQgYXJnYyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCi0gICAgICAg ICAgICAgICBjaGFyICoqYXJncyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCitncnViX2NtZF9k Ynhfc2lnIChncnViX2V4dGNtZF9jb250ZXh0X3QgY3R4dCwgaW50IGFyZ2MsIGNoYXIgKiphcmdz KQogewotICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2VydDsKLSAgaW50IGNlcnRfbnVtID0g MTsKLSAgZ3J1Yl9zaXplX3QgaTsKKyAgZ3J1Yl9lcnJfdCByYzsKKyAgZ3J1Yl9maWxlX3QgaGFz aF9maWxlID0gTlVMTDsKKyAgZ3J1Yl91aW50OF90ICpoYXNoX2RhdGEgPSBOVUxMOworICBncnVi X3NpemVfdCBoYXNoX2RhdGFfc2l6ZSA9IDA7CiAKLSAgZm9yIChjZXJ0ID0gZGIuY2VydHM7IGNl cnQgIT0gTlVMTDsgY2VydCA9IGNlcnQtPm5leHQpCisgIGlmIChhcmdjICE9IDIpCiAgICAgewot ICAgICAgZ3J1Yl9wcmludGYgKCJDZXJ0aWZpY2F0ZSAlZDpcbiIsIGNlcnRfbnVtKTsKLSAgICAg IGdydWJfcHJpbnRmICgiXHRTZXJpYWw6ICIpOworICAgICAgZ3J1Yl9wcmludGYgKCJhIGRpc3Ry dXN0ZWQgY2VydGlmaWNhdGUvYmluYXJ5IGhhc2ggZmlsZSBpcyBleHBlY3RlZFxuIgorICAgICAg ICAgICAgICAgICAgICJFeGFtcGxlOlxuXHRhcHBlbmRfcm1fZGJ4X3NpZyBbb3B0aW9uXSA8RklM RT5cbiIKKyAgICAgICAgICAgICAgICAgICAib3B0aW9uOlxuWy1ifC0tYmluYXJ5LWhhc2hdIEZJ TEUgW0JJTkFSWSBIQVNIIEZJTEVdXG4iCisgICAgICAgICAgICAgICAgICAgIlstY3wtLWNlcnQt aGFzaF0gRklMRSBbQ0VSVEZJQ0FURSBIQVNIIEZJTEVdXG4iKTsKKyAgICAgIHJldHVybiBHUlVC X0VSUl9CQURfQVJHVU1FTlQ7CisgICAgfQogCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgY2VydC0+ c2VyaWFsX2xlbiAtIDE7IGkrKykKLSAgICAgICAgZ3J1Yl9wcmludGYgKCIlMDJ4OiIsIGNlcnQt PnNlcmlhbFtpXSk7CisgIGlmIChjaGVja19zaWdzID09IENIRUNLX1NJR1NfRk9SQ0VEKQorICAg IHsKKyAgICAgIGdydWJfcHJpbnRmICgiV2FybmluZzogc2luY2Ugc2VjdXJlIGJvb3QgaXMgZW5h YmxlZCwgIgorICAgICAgICAgICAgICAgICAgICJhZGRpbmcgb2YgZGlzdHJ1c3RlZCBjZXJ0aWZp Y2F0ZS9iaW5hcnkgaGFzaCBpcyBub3QgcGVybWl0dGVkIVxuIik7CisgICAgICByZXR1cm4gR1JV Ql9FUlJfQUNDRVNTX0RFTklFRDsKKyAgICB9CiAKLSAgICAgIGdydWJfcHJpbnRmICgiJTAyeFxu IiwgY2VydC0+c2VyaWFsW2NlcnQtPnNlcmlhbF9sZW4gLSAxXSk7Ci0gICAgICBncnViX3ByaW50 ZiAoIlx0Q046ICVzXG5cbiIsIGNlcnQtPnN1YmplY3QpOwotICAgICAgY2VydF9udW0rKzsKKyAg aWYgKCFjdHh0LT5zdGF0ZVtPUFRJT05fQklOQVJZX0hBU0hdLnNldCAmJiAhY3R4dC0+c3RhdGVb T1BUSU9OX0NFUlRfSEFTSF0uc2V0KQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfQVJHVU1FTlQsICJtaXNzaW5nIG9wdGlvbnMgYW5kIHVzZSAtLWhlbHAgdG8ga29udy4iKTsK KworICBpZiAoZ3J1Yl9zdHJsZW4gKGFyZ3NbMV0pID09IDApCisgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9GSUxFTkFNRSwgIm1pc3NpbmcgZGlzdHJ1c3RlZCBjZXJ0aWZpY2F0 ZS9iaW5hcnkgaGFzaCBmaWxlLiIpOworCisgIGhhc2hfZmlsZSA9IGdydWJfZmlsZV9vcGVuIChh cmdzWzFdLCBHUlVCX0ZJTEVfVFlQRV9UT19IQVNIIHwgR1JVQl9GSUxFX1RZUEVfTk9fREVDT01Q UkVTUyk7CisgIGlmIChoYXNoX2ZpbGUgPT0gTlVMTCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfRklMRV9OT1RfRk9VTkQsCisgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUg dG8gb3BlbiB0aGUgZGlzdHJ1c3RlZCBjZXJ0aWZpY2F0ZS9iaW5hcnkgaGFzaCBmaWxlLiIpOwor CisgIHJjID0gZmlsZV9yZWFkX2FsbCAoaGFzaF9maWxlLCAmaGFzaF9kYXRhLCAmaGFzaF9kYXRh X3NpemUpOworICBpZiAocmMgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGNsZWFudXA7CisK KyAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAiYWRkaW5nIGEgZGlzdHJ1c3RlZCBjZXJ0 aWZpY2F0ZS9iaW5hcnkgaGFzaCAlc1xuIgorICAgICAgICAgICAgICAgICIgd2l0aCBzaXplIG9m ICUiIFBSSXVHUlVCX1NJWkUgIlxuIiwgaGFzaF9kYXRhLCBoYXNoX2RhdGFfc2l6ZSk7CisKKyAg aWYgKGN0eHQtPnN0YXRlW09QVElPTl9CSU5BUllfSEFTSF0uc2V0KQorICAgIHsKKyAgICAgIC8q IE9ubHkgYWNjZXB0IFNIQTI1NiwgU0hBMzg0IGFuZCBTSEE1MTIgYmluYXJ5IGhhc2ggKi8KKyAg ICAgIGlmIChoYXNoX2RhdGFfc2l6ZSAhPSAzMiAmJiBoYXNoX2RhdGFfc2l6ZSAhPSA0OCAmJiBo YXNoX2RhdGFfc2l6ZSAhPSA2NCkKKyAgICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9TSUdOQVRVUkUsICJ1bmFjY2VwdGFibGUgZGlzdHJ1c3RlZCBiaW5hcnkgaGFzaCB0eXBl LiIpOworICAgIH0KKyAgZWxzZSBpZiAoY3R4dC0+c3RhdGVbT1BUSU9OX0NFUlRfSEFTSF0uc2V0 KQorICAgIHsKKyAgICAgIC8qIE9ubHkgYWNjZXB0IFNIQTI1NiwgU0hBMzg0IGFuZCBTSEE1MTIg Y2VydGlmaWNhdGUgaGFzaCAqLworICAgICAgaWYgKGhhc2hfZGF0YV9zaXplICE9IDMyICYmIGhh c2hfZGF0YV9zaXplICE9IDQ4ICYmIGhhc2hfZGF0YV9zaXplICE9IDY0KQorICAgICAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgInVuYWNjZXB0YWJsZSBkaXN0 cnVzdGVkIGNlcnRpZmljYXRlIGhhc2ggdHlwZS4iKTsKICAgICB9CiAKLSAgcmV0dXJuIEdSVUJf RVJSX05PTkU7CisgIHJjID0gYWRkX2hhc2ggKChjb25zdCBncnViX3VpbnQ4X3QgKiopICZoYXNo X2RhdGEsIGhhc2hfZGF0YV9zaXplLCAmZGJ4LnNpZ25hdHVyZXMsCisgICAgICAgICAgICAgICAg ICZkYnguc2lnbmF0dXJlX3NpemUsICZkYnguc2lnbmF0dXJlX2VudHJpZXMpOworICBpZiAocmMg IT0gR1JVQl9FUlJfTk9ORSkKKyAgICB7CisgICAgICBmcmVlX2RiX2xpc3QgKCk7CisgICAgICBm cmVlX2RieF9saXN0ICgpOworICAgICAgcmMgPSBncnViX2Vycm9yIChyYywgImFkZGluZyBvZiBk aXN0cnVzdGVkIGJpbmFyeS9jZXJ0aWZpY2F0ZSBoYXNoIGZhaWxlZC4iKTsKKyAgICB9CisKKyBj bGVhbnVwOgorICBncnViX2ZpbGVfY2xvc2UgKGhhc2hfZmlsZSk7CisgIGdydWJfZnJlZSAoaGFz aF9kYXRhKTsKKworICByZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBncnViX2Vycl90CkBAIC04MTcs OCArMTA1OSw2IEBAIHN0YXRpYyBzdHJ1Y3QgZ3J1Yl9mcyBwc2V1ZG9fZnMgPSB7CiAgIC5mc19y ZWFkID0gcHNldWRvX3JlYWQKIH07CiAKLXN0YXRpYyBncnViX2NvbW1hbmRfdCBjbWRfdmVyaWZ5 LCBjbWRfbGlzdCwgY21kX2RieCwgY21kX2RiOwotCiAvKiBDaGVjayB0aGUgY2VydGlmaWNhdGUg aGFzaCBwcmVzZW5jZSBpbiB0aGUgZGJ4IGxpc3QuICovCiBzdGF0aWMgYm9vbAogaXNfZGJ4X2Nl cnRfaGFzaCAoY29uc3QgZ3J1Yl91aW50OF90ICpkYXRhLCBjb25zdCBncnViX3NpemVfdCBkYXRh X3NpemUpCkBAIC0xMDg1LDYgKzEzMjUsMTAgQEAgbG9hZF9zdGF0aWNfa2V5cyAoY29uc3Qgc3Ry dWN0IGdydWJfbW9kdWxlX2hlYWRlciAqaGVhZGVyLCBjb25zdCBib29sIGlzX3BrcykKICAgcmV0 dXJuIHJjOwogfQogCitzdGF0aWMgZ3J1Yl9leHRjbWRfdCBjbWRfZGJ4X3NpZzsKK3N0YXRpYyBn cnViX2NvbW1hbmRfdCBjbWRfdmVyaWZ5LCBjbWRfbGlzdF9kYiwgY21kX2RiX2NlcnQsIGNtZF9k Yl9zaWcsCisgICAgICAgICAgICAgICAgICAgICAgY21kX2xpc3RfZGJ4LCBjbWRfZGJ4X2NlcnQ7 CisKIEdSVUJfTU9EX0lOSVQgKGFwcGVuZGVkc2lnKQogewogICBpbnQgcmM7CkBAIC0xMTQ3LDE0 ICsxMzkxLDI1IEBAIEdSVUJfTU9EX0lOSVQgKGFwcGVuZGVkc2lnKQogICAgICAgZ3J1Yl9wa3Nf ZnJlZV9rZXlzdG9yZSAoKTsKICAgICB9CiAKLSAgY21kX2RiID0gZ3J1Yl9yZWdpc3Rlcl9jb21t YW5kICgiYXBwZW5kX2FkZF9kYl9jZXJ0IiwgZ3J1Yl9jbWRfZGIsIE5fKCJYNTA5X0NFUlRJRklD QVRFIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTl8oIkFkZCB0cnVzdGVk IFg1MDlfQ0VSVElGSUNBVEUgdG8gdGhlIGRiIikpOwotICBjbWRfbGlzdCA9IGdydWJfcmVnaXN0 ZXJfY29tbWFuZCAoImFwcGVuZF9saXN0X2RiIiwgZ3J1Yl9jbWRfbGlzdCwgMCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5fKCJTaG93IHRoZSBsaXN0IG9mIHRydXN0ZWQg WC41MDkgY2VydGlmaWNhdGVzIGZyb20gdGhlIGRiIikpOworICBjbWRfZGJfY2VydCA9IGdydWJf cmVnaXN0ZXJfY29tbWFuZCAoImFwcGVuZF9hZGRfZGJfY2VydCIsIGdydWJfY21kX2RiX2NlcnQs IE5fKCJYNTA5X0NFUlRJRklDQVRFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOXygiQWRkIFg1MDlfQ0VSVElGSUNBVEUgdG8gdGhlIGRiIGxpc3QuIikpOworICBj bWRfZGJfc2lnID0gZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kICgiYXBwZW5kX2FkZF9kYl9zaWciLCBn cnViX2NtZF9kYl9zaWcsIE5fKCJCSU5BUlkgSEFTSCBGSUxFIiksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5fKCJBZGQgdHJ1c3RlZCBCSU5BUlkgSEFTSCB0byB0aGUg ZGIgbGlzdC4iKSk7CisgIGNtZF9kYnhfY2VydCA9IGdydWJfcmVnaXN0ZXJfY29tbWFuZCAoImFw cGVuZF9ybV9kYnhfY2VydCIsIGdydWJfY21kX2RieF9jZXJ0LCBOXygiWDUwOV9DRVJUSUZJQ0FU RSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5fKCJSZW1vdmUg WDUwOV9DRVJUSUZJQ0FURSBmcm9tIHRoZSBkYiBsaXN0LiIpKTsKKyAgY21kX2RieF9zaWcgPSBn cnViX3JlZ2lzdGVyX2V4dGNtZCAoImFwcGVuZF9hZGRfZGJ4X3NpZyIsIGdydWJfY21kX2RieF9z aWcsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5fKCJbLWJ8LS1i aW5hcnktaGFzaF0gRklMRSBbQklOQVJZIEhBU0ggRklMRV1cbiIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlstY3wtLWNlcnQtaGFzaF0gRklMRSBbQ0VSVEZJQ0FU RSBIQVNIIEZJTEVdIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5f KCJBZGQgZGlzdHJ1c3RlZCBDRVJURklDQVRFL0JJTkFSWSBIQVNIIHRvIHRoZSBkYiBsaXN0LiIp LCBvcHRpb25zKTsKKyAgY21kX2xpc3RfZGIgPSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJhcHBl bmRfbGlzdF9kYiIsIGdydWJfY21kX2xpc3RfZGIsIDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOXygiU2hvdyB0aGUgbGlzdCBvZiB0cnVzdGVkIHg1MDkgY2VydGlm aWNhdGVzIGFuZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg dHJ1c3RlZCBiaW5hcnkgaGFzaGVzIGZyb20gdGhlIGRiIGxpc3QuIikpOworICBjbWRfbGlzdF9k YnggPSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJhcHBlbmRfbGlzdF9kYngiLCBncnViX2NtZF9s aXN0X2RieCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygi U2hvdyB0aGUgbGlzdCBvZiBkaXN0cnVzdGVkIGNlcnRpZmljYXRlcyBhbmQiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjZXJ0aWZpY2F0ZS9iaW5hcnkgaGFz aGVzIGZyb20gdGhlIGRieCBsaXN0IikpOwogICBjbWRfdmVyaWZ5ID0gZ3J1Yl9yZWdpc3Rlcl9j b21tYW5kICgiYXBwZW5kX3ZlcmlmeSIsIGdydWJfY21kX3ZlcmlmeV9zaWduYXR1cmUsIE5fKCJG SUxFIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5fKCJWZXJpZnkg RklMRSBhZ2FpbnN0IHRoZSB0cnVzdGVkIFguNTA5IGNlcnRpZmljYXRlcyBpbiB0aGUgZGIiKSk7 Ci0gIGNtZF9kYnggPSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJhcHBlbmRfcm1fZGJ4X2NlcnQi LCBncnViX2NtZF9kYngsIE5fKCJDRVJUX05VTUJFUiIpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOXygiUmVtb3ZlIENFUlRfTlVNQkVSIChhcyBsaXN0ZWQgYnkgYXBwZW5k X2xpc3RfZGIpIGZyb20gdGhlIGRiIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOXygiVmVyaWZ5IEZJTEUgYWdhaW5zdCB0aGUgdHJ1c3RlZCB4NTA5IGNlcnRpZmlj YXRlcy8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cnVzdGVk IGJpbmFyeSBoYXNoZXMuIikpOwogCiAgIGdydWJfdmVyaWZpZXJfcmVnaXN0ZXIgKCZncnViX2Fw cGVuZGVkc2lnX3ZlcmlmaWVyKTsKICAgZ3J1Yl9kbF9zZXRfcGVyc2lzdGVudCAobW9kKTsKQEAg LTExNjgsNyArMTQyMywxMCBAQCBHUlVCX01PRF9GSU5JIChhcHBlbmRlZHNpZykKICAgICovCiAg IGdydWJfdmVyaWZpZXJfdW5yZWdpc3RlciAoJmdydWJfYXBwZW5kZWRzaWdfdmVyaWZpZXIpOwog ICBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21kX3ZlcmlmeSk7Ci0gIGdydWJfdW5yZWdpc3Rl cl9jb21tYW5kIChjbWRfbGlzdCk7Ci0gIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kIChjbWRfZGIp OwotICBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21kX2RieCk7CisgIGdydWJfdW5yZWdpc3Rl cl9jb21tYW5kIChjbWRfbGlzdF9kYik7CisgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kIChjbWRf bGlzdF9kYngpOworICBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21kX2RiX2NlcnQpOworICBn cnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21kX2RiX3NpZyk7CisgIGdydWJfdW5yZWdpc3Rlcl9j b21tYW5kIChjbWRfZGJ4X2NlcnQpOworICBncnViX3VucmVnaXN0ZXJfZXh0Y21kIChjbWRfZGJ4 X3NpZyk7CiB9Ci0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBtYWlsaW5nIGxpc3QKR3J1 Yi1kZXZlbEBnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dy dWItZGV2ZWwK