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 CC647C5B543 for ; Tue, 10 Jun 2025 16:22:37 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uP1jp-0004U2-1Y; Tue, 10 Jun 2025 12:22:13 -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 1uP1g7-0003zz-Qr for grub-devel@gnu.org; Tue, 10 Jun 2025 12:18:23 -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 1uP1g5-0002qp-3I for grub-devel@gnu.org; Tue, 10 Jun 2025 12:18:23 -0400 Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55AAtKKI027815; Tue, 10 Jun 2025 16:18:15 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=44K3Ml DWARXNrr+1ki4gxEK03PiqQkpfUkbzuAxDXBA=; b=N++WdUJy54S2f5zwCkye7s +n40Tn0CRJ1FD+567wNps9Z2wPvxP8Ky28mNoz+OYw0io5kU0Pwh6cSZ/MFdmETC o05Mh/FnB3XezPBcssqS0EBWo9VydYf/Fp9YiKsTgo0htQac1N1AqrQJg+QWXPbA S0YraejM/+BDOci7DvlEmO0Kfd1bmuEhvQpWXNXAdlAYBo7um9IobZJStKfeOd3x 9N8O/MH9s0+Al82J7EKbvHufr/2zr1kyk6K4+1oHwm9Er2oASwC2LlqXtPAwot5y xNIzZgGnklcaoQlN315nuRmfWz41+rbkoFmBz1gGiOoRsSnfa6KMAyiJfCvnci0g == Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 474cxj7hmn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 10 Jun 2025 16:18:15 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 55AE9MfD003405; Tue, 10 Jun 2025 16:18:14 GMT Received: from smtprelay03.dal12v.mail.ibm.com ([172.16.1.5]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4751ykk2m0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 10 Jun 2025 16:18:14 +0000 Received: from smtpav04.wdc07v.mail.ibm.com (smtpav04.wdc07v.mail.ibm.com [10.39.53.231]) by smtprelay03.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 55AGIDn030671372 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 10 Jun 2025 16:18:13 GMT Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7C3EB5805E; Tue, 10 Jun 2025 16:18:13 +0000 (GMT) Received: from smtpav04.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9179258045; Tue, 10 Jun 2025 16:18:12 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav04.wdc07v.mail.ibm.com (Postfix) with ESMTP; Tue, 10 Jun 2025 16:18:12 +0000 (GMT) MIME-Version: 1.0 Date: Tue, 10 Jun 2025 21:48:12 +0530 From: sudhakar To: Daniel Kiper Cc: grub-devel@gnu.org, dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com, stefanb@linux.ibm.com Subject: Re: [PATCH v2 10/21] appended signatures: support verifying appended signatures In-Reply-To: <20250528172009.mxvjccl4zhm5otzx@tomti.i.net-space.pl> References: <20250326193242.703506-1-sudhakar@linux.ibm.com> <20250326193242.703506-11-sudhakar@linux.ibm.com> <20250528172009.mxvjccl4zhm5otzx@tomti.i.net-space.pl> Message-ID: <18fb44c629e3aea4a22cd38619fa09ec@linux.ibm.com> X-Sender: sudhakar@linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: FA7n7bmsVnEOO3CtOWG5ftzBou5SJ7ea X-Proofpoint-GUID: FA7n7bmsVnEOO3CtOWG5ftzBou5SJ7ea X-Authority-Analysis: v=2.4 cv=fZWty1QF c=1 sm=1 tr=0 ts=68485ac7 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=kj9zAlcOel0A:10 a=6IFa9wvqVegA:10 a=mDV3o1hIAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=8VPVThA5hPnarvbSlfYA:9 a=CjuIK1q_8ugA:10 a=WlT8qwTXB_Kj6um4hl3b:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjEwMDEzMSBTYWx0ZWRfX6rfoPIp1P5t+ N6wHVQxkpgKAzIKTNzDScIUkpvjkTpUTCwwLxGJqDZB1lxqvUTKqO4fFmrmjXLM8WHUP/KDwTG8 SRNIZDE8bOftvAXg/ClWgA1OhLah/9mZmJKnPEUcrApzmRT8FUCp15HPTyDXfyToh9iz5NV+Dl3 T0PH9aTp9vX4s538UvGT3X6lJFpIGIjjhaJYdEgPnA1db1kd191HT82uwzhzQ9kELs0JbV8ljgj 2YYExIbesXd0cnrzrOTKPKaz8a42xslD5bKmQN9WzUs8avdxpSbrjjet0YV/3+MxgPQ6UVfZp9o 3FMeLEHd/gMHvpG/R9g/XBelPBbcIgcLpRLtWO7+RXgdkA7a58YIITdXDNGqeIKZsCHbJM8gsEX aC8asL5XdGc9pZaZ7wtgp4iLr1iTEmX4tzlY6Uymm8pZFUtfCgy8x7SUS7tw3fAxK+zqDp/r X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-10_07,2025-06-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1011 impostorscore=0 priorityscore=1501 spamscore=0 bulkscore=0 phishscore=0 suspectscore=0 adultscore=0 mlxscore=0 malwarescore=0 lowpriorityscore=0 mlxlogscore=999 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506100131 Received-SPF: pass client-ip=148.163.156.1; envelope-from=sudhakar@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org SGkgRGFuaWVsLAoKVGhhbmsgeW91IGZvciB5b3VyIHZhbHVhYmxlIHJldmlldy4KYWRkcmVzc2Vk IGFsbCB5b3VyIHJldmlldyBjb21tZW50cyBpbiB2My4KClRoYW5rcywKc3VkaGFrYXIgS3VwcHVz YW15CgpPbiAyMDI1LTA1LTI4IDIyOjUwLCBEYW5pZWwgS2lwZXIgd3JvdGU6Cj4gT24gVGh1LCBN YXIgMjcsIDIwMjUgYXQgMDE6MDI6MzFBTSArMDUzMCwgU3VkaGFrYXIgS3VwcHVzYW15IHdyb3Rl Ogo+PiBGcm9tOiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0ZW5zLm5ldD4KPj4gCj4+IEJ1aWxkaW5n IG9uIHRoZSBwYXJzZXJzIGFuZCB0aGUgYWJpbGl0eSB0byBlbWJlZCB4NTA5IGNlcnRpZmljYXRl cywgYXMKPj4gd2VsbCBhcyB0aGUgZXhpc3RpbmcgZ2NyeXB0IGZ1bmN0aW9uYWxpdHksIGFkZCBh IG1vZHVsZSBmb3IgdmVyaWZ5aW5nCj4+IGFwcGVuZGVkIHNpZ25hdHVyZXMuCj4+IAo+PiBUaGlz IGluY2x1ZGVzIGEgdmVyaWZpZXIgdGhhdCByZXF1aXJlcyB0aGF0IExpbnV4IGtlcm5lbHMgYW5k IGdydWIgCj4+IG1vZHVsZXMKPj4gaGF2ZSBhcHBlbmRlZCBzaWduYXR1cmVzLCBhbmQgY29tbWFu ZHMgdG8gbWFuYWdlIHRoZSBsaXN0IG9mIHRydXN0ZWQKPj4gY2VydGlmaWNhdGVzIGZvciB2ZXJp ZmljYXRpb24uCj4+IAo+PiBWZXJpZmljYXRpb24gbXVzdCBiZSBlbmFibGVkIGJ5IHNldHRpbmcg Y2hlY2tfYXBwZW5kZWRfc2lnbmF0dXJlcy4gSWYKPj4gR1JVQiBpcyBsb2NrZWQgZG93biB3aGVu IHRoZSBtb2R1bGUgaXMgbG9hZGVkLCB2ZXJpZmljYXRpb24gd2lsbCBiZQo+PiBlbmFibGVkIGFu ZCBsb2NrZWQgYXV0b21hdGljYWxseS4KPj4gCj4+IEFzIHdpdGggdGhlIFBHUCB2ZXJpZmllciwg aXQgaXMgbm90IGEgY29tcGxldGUgc2VjdXJlLWJvb3Qgc29sdXRpb246Cj4+IG90aGVyIG1lY2hh bmlzbXMsIHN1Y2ggYXMgYSBwYXNzd29yZCBvciBsb2NrZG93biwgbXVzdCBiZSB1c2VkIHRvIAo+ PiBlbnN1cmUKPj4gdGhhdCBhIHVzZXIgY2Fubm90IGRyb3AgdG8gdGhlIGdydWIgc2hlbGwgYW5k IGRpc2FibGUgdmVyaWZpY2F0aW9uLgo+PiAKPj4gU2lnbmVkLW9mZi1ieTogRGFuaWVsIEF4dGVu cyA8ZGphQGF4dGVucy5uZXQ+Cj4+IFNpZ25lZC1vZmYtYnk6IFN1ZGhha2FyIEt1cHB1c2FteSA8 c3VkaGFrYXJAbGludXguaWJtLmNvbT4KPj4gUmV2aWV3ZWQtYnk6IFN0ZWZhbiBCZXJnZXIgPHN0 ZWZhbmJAbGludXguaWJtLmNvbT4KPj4gUmV2aWV3ZWQtYnk6IEF2bmlzaCBDaG91aGFuIDxhdm5p c2hAbGludXguaWJtLmNvbT4KPj4gLS0tCj4+ICBncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYg ICAgICAgICAgICAgICAgICAgfCAgMTQgKwo+PiAgZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVk c2lnL2FwcGVuZGVkc2lnLmMgIHwgNjE4IAo+PiArKysrKysrKysrKysrKysrKysKPj4gIGdydWIt Y29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oICB8ICAgMiArLQo+PiAgZ3J1 Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FzbjF1dGlsLmMgICAgIHwgICAyICstCj4+ICAu Li4vY29tbWFuZHMvYXBwZW5kZWRzaWcvZ251dGxzX2FzbjFfdGFiLmMgICAgfCAgIDIgKy0KPj4g IC4uLi9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2l4X2FzbjFfdGFiLmMgICAgICB8ICAgMiArLQo+ PiAgZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDkuYyAgICAgICAgIHwgICAyICst Cj4gCj4gUGxlYXNlIHRha2UgaW50byBhY2NvdW50IEdhcnkncyBjb21tZW50Li4uCj4gCj4+ICBp bmNsdWRlL2dydWIvZmlsZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+PiAg OCBmaWxlcyBjaGFuZ2VkLCA2MzkgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKPj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRz aWcuYwo+PiAKPj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZiBiL2dy dWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgo+PiBpbmRleCA2MGRiMmFkYzUuLmQ2OTM5ODZjNiAx MDA2NDQKPj4gLS0tIGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCj4+ICsrKyBiL2dydWIt Y29yZS9NYWtlZmlsZS5jb3JlLmRlZgo+PiBAQCAtOTc5LDYgKzk3OSwyMCBAQCBtb2R1bGUgPSB7 Cj4+ICAgIGNwcGZsYWdzID0gJy1JJChzcmNkaXIpL2xpYi9wb3NpeF93cmFwJzsKPj4gIH07Cj4+ IAo+PiArbW9kdWxlID0gewo+PiArICBuYW1lID0gYXBwZW5kZWRzaWc7Cj4+ICsgIGNvbW1vbiA9 IGNvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmM7Cj4+ICsgIGNvbW1vbiA9IGNvbW1h bmRzL2FwcGVuZGVkc2lnL3g1MDkuYzsKPj4gKyAgY29tbW9uID0gY29tbWFuZHMvYXBwZW5kZWRz aWcvcGtjczcuYzsKPj4gKyAgY29tbW9uID0gY29tbWFuZHMvYXBwZW5kZWRzaWcvYXNuMXV0aWwu YzsKPj4gKyAgY29tbW9uID0gY29tbWFuZHMvYXBwZW5kZWRzaWcvZ251dGxzX2FzbjFfdGFiLmM7 Cj4+ICsgIGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL3BraXhfYXNuMV90YWIuYzsKPj4g Kwo+PiArICAvLyBwb3NpeCB3cmFwcGVyIHJlcXVpcmVkIGZvciBnY3J5IHRvIGdldCBzeXMvdHlw ZXMuaAo+PiArICBjZmxhZ3MgPSAnJChDRkxBR1NfUE9TSVgpJzsKPj4gKyAgY3BwZmxhZ3MgPSAn LUkkKHNyY2RpcikvbGliL3Bvc2l4X3dyYXAgCj4+IC1JJChzcmNkaXIpL2xpYi9saWJ0YXNuMS1n cnViJzsKPj4gK307Cj4+ICsKPj4gIG1vZHVsZSA9IHsKPj4gICAgbmFtZSA9IGhkcGFybTsKPj4g ICAgY29tbW9uID0gY29tbWFuZHMvaGRwYXJtLmM7Cj4+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUv Y29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuYyAKPj4gYi9ncnViLWNvcmUvY29tbWFu ZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBp bmRleCAwMDAwMDAwMDAuLmNiZDIyN2EzYwo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2dydWIt Y29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCj4+IEBAIC0wLDAgKzEsNjE4 IEBACj4+ICsvKgo+PiArICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKPj4g KyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEsIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCj4+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxLCAyMDIyIElCTSBDb3Jw b3JhdGlvbgo+PiArICoKPj4gKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCAKPj4gYnkKPj4gKyAq ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgo+PiArICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ ICsgKgo+PiArICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPj4gKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAqICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQo+PiArICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgo+ PiArI2luY2x1ZGUgPGdydWIvbWlzYy5oPgo+PiArI2luY2x1ZGUgPGdydWIvbW0uaD4KPj4gKyNp bmNsdWRlIDxncnViL2Vyci5oPgo+PiArI2luY2x1ZGUgPGdydWIvZGwuaD4KPj4gKyNpbmNsdWRl IDxncnViL2ZpbGUuaD4KPj4gKyNpbmNsdWRlIDxncnViL2NvbW1hbmQuaD4KPj4gKyNpbmNsdWRl IDxncnViL2NyeXB0by5oPgo+PiArI2luY2x1ZGUgPGdydWIvcGtjczFfdjE1Lmg+Cj4+ICsjaW5j bHVkZSA8Z3J1Yi9pMThuLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9nY3J5cHQvZ2NyeXB0Lmg+Cj4+ ICsjaW5jbHVkZSA8Z3J1Yi9rZXJuZWwuaD4KPj4gKyNpbmNsdWRlIDxncnViL2V4dGNtZC5oPgo+ PiArI2luY2x1ZGUgPGdydWIvdmVyaWZ5Lmg+Cj4+ICsjaW5jbHVkZSA8bGlidGFzbjEuaD4KPj4g KyNpbmNsdWRlIDxncnViL2Vudi5oPgo+PiArI2luY2x1ZGUgPGdydWIvbG9ja2Rvd24uaD4KPj4g Kwo+PiArI2luY2x1ZGUgImFwcGVuZGVkc2lnLmgiCj4+ICsKPj4gK0dSVUJfTU9EX0xJQ0VOU0Ug KCJHUEx2MysiKTsKPj4gKwo+PiArY29uc3QgY2hhciBtYWdpY1tdID0gIn5Nb2R1bGUgc2lnbmF0 dXJlIGFwcGVuZGVkflxuIjsKPiAKPiBzdGF0aWMgY29uc3QgY2hhciBtYWdpY1tdLi4uPwo+IAo+ PiArLyoKPj4gKyAqIFRoaXMgc3RydWN0dXJlIGlzIGV4dHJhY3RlZCBmcm9tIHNjcmlwdHMvc2ln bi1maWxlLmMgaW4gdGhlIGxpbnV4IAo+PiBrZXJuZWwKPj4gKyAqIHNvdXJjZS4gSXQgd2FzIGxp Y2Vuc2VkIGFzIExHUEx2Mi4xKywgd2hpY2ggaXMgR1BMdjMrIGNvbXBhdGlibGUuCj4+ICsgKi8K Pj4gK3N0cnVjdCBtb2R1bGVfc2lnbmF0dXJlCj4+ICt7Cj4+ICsgIGdydWJfdWludDhfdCBhbGdv OyAgICAgICAvKiBQdWJsaWMta2V5IGNyeXB0byBhbGdvcml0aG0gWzBdICovCj4+ICsgIGdydWJf dWludDhfdCBoYXNoOyAgICAgICAvKiBEaWdlc3QgYWxnb3JpdGhtIFswXSAqLwo+PiArICBncnVi X3VpbnQ4X3QgaWRfdHlwZTsgICAgLyogS2V5IGlkZW50aWZpZXIgdHlwZSBbUEtFWV9JRF9QS0NT N10gKi8KPj4gKyAgZ3J1Yl91aW50OF90IHNpZ25lcl9sZW47IC8qIExlbmd0aCBvZiBzaWduZXIn cyBuYW1lIFswXSAqLwo+PiArICBncnViX3VpbnQ4X3Qga2V5X2lkX2xlbjsgLyogTGVuZ3RoIG9m IGtleSBpZGVudGlmaWVyIFswXSAqLwo+PiArICBncnViX3VpbnQ4X3QgX19wYWRbM107Cj4+ICsg IGdydWJfdWludDMyX3Qgc2lnX2xlbjsgICAvKiBMZW5ndGggb2Ygc2lnbmF0dXJlIGRhdGEgKi8K Pj4gK30gR1JVQl9QQUNLRUQ7Cj4+ICsKPj4gKy8qIFRoaXMgcmVwcmVzZW50cyBhbiBlbnRpcmUs IHBhcnNlZCwgYXBwZW5kZWQgc2lnbmF0dXJlICovCj4+ICtzdHJ1Y3QgZ3J1Yl9hcHBlbmRlZF9z aWduYXR1cmUKPj4gK3sKPj4gKyAgZ3J1Yl9zaXplX3Qgc2lnbmF0dXJlX2xlbjsgICAgICAgICAg ICAvKiBMZW5ndGggb2YgUEtDUyM3IGRhdGEgKyAKPj4gbWV0YWRhdGEgKyBtYWdpYyAqLwo+PiAr ICBzdHJ1Y3QgbW9kdWxlX3NpZ25hdHVyZSBzaWdfbWV0YWRhdGE7IC8qIE1vZHVsZSBzaWduYXR1 cmUgbWV0YWRhdGEgCj4+ICovCj4+ICsgIHN0cnVjdCBwa2NzN19zaWduZWREYXRhIHBrY3M3OyAg ICAgICAgLyogUGFyc2VkIFBLQ1MjNyBkYXRhICovCj4+ICt9Owo+PiArCj4+ICsvKiBUcnVzdGVk IGNlcnRpZmljYXRlcyBmb3IgdmVyaWZ5aW5nIGFwcGVuZGVkIHNpZ25hdHVyZXMgKi8KPj4gK3N0 cnVjdCB4NTA5X2NlcnRpZmljYXRlICpncnViX3RydXN0ZWRfa2V5Owo+PiArCj4+ICsvKgo+PiAr ICogRm9yY2UgZ2NyeV9yc2EgdG8gYmUgYSBtb2R1bGUgZGVwZW5kZW5jeS4KPj4gKyAqCj4+ICsg KiBJZiB3ZSB1c2UgZ3J1Yl9jcnlwdG9fcGtfcnNhLCB0aGVuIHRoZW4gdGhlIGdjcnlfcnNhIG1v ZHVsZSB3b24ndCAKPj4gYmUgYnVpbHQKPj4gKyAqIGluIGlmIHlvdSBhZGQgJ2FwcGVuZGVkc2ln JyB0byBncnViLWluc3RhbGwgLS1tb2R1bGVzLiBZb3Ugd291bGQgCj4+IG5lZWQgdG8KPj4gKyAq IGFkZCAnZ2NyeV9yc2EnIHRvby4gVGhhdCdzIGNvbmZ1c2luZyBhbmQgc2VlbXMgc3Vib3B0aW1h bCwgCj4+IGVzcGVjaWFsbHkgd2hlbgo+PiArICogd2Ugb25seSBzdXBwb3J0IFJTQS4KPj4gKyAq Cj4+ICsgKiBEeW5hbWljIGxvYWRpbmcgYWxzbyBjYXVzZXMgc29tZSBjb25jZXJucy4gV2UgY2Fu J3QgbG9hZCBnY3J5X3JzYSAKPj4gZnJvbSB0aGUKPj4gKyAqIHRoZSBmaWxlc3lzdGVtIGFmdGVy IHdlIGluc3RhbGwgdGhlIHZlcmlmaWVyIC0gd2Ugd29uJ3QgYmUgYWJsZSB0byAKPj4gdmVyaWZ5 Cj4+ICsgKiBpdCB3aXRob3V0IGhhdmluZyBpdCBhbHJlYWR5IHByZXNlbnQuIFdlIGFsc28gc2hv dWxkbid0IGxvYWQgaXQgCj4+IGJlZm9yZSB3ZQo+PiArICogaW5zdGFsbCB0aGUgdmVyaWZpZXIs IGJlY2F1c2UgdGhhdCB3b3VsZCBtZWFuIGl0IHdvdWxkbid0IGJlIAo+PiB2ZXJpZmllZCAtIGFu Cj4+ICsgKiBhdHRhY2tlciBjb3VsZCBpbnNlcnQgYW55IGNvZGUgdGhleSB3YW50ZWQgaW50byB0 aGUgbW9kdWxlLgo+PiArICoKPj4gKyAqIFNvIGluc3RlYWQsIHJlZmVyZW5jZSB0aGUgaW50ZXJu YWwgc3ltYm9sIGZyb20gZ2NyeV9yc2EuIFRoYXQgCj4+IGNyZWF0ZXMgYQo+PiArICogZGlyZWN0 IGRlcGVuZGVuY3kgb24gZ2NyeV9yc2EsIHNvIGl0IHdpbGwgYmUgYnVpbHQgaW4gd2hlbiB0aGlz IAo+PiBtb2R1bGUKPj4gKyAqIGlzIGJ1aWx0IGluLiBCZWluZyBidWlsdCBpbiAoYXNzdW1pbmcg dGhlIGNvcmUgaW1hZ2UgaXMgaXRzZWxmIAo+PiBzaWduZWQhKQo+PiArICogYWxzbyByZXNvbHZl cyBvdXIgY29uY2VybnMgYWJvdXQgbG9hZGluZyBmcm9tIHRoZSBmaWxlc3lzdGVtLgo+PiArICov Cj4+ICtleHRlcm4gZ2NyeV9wa19zcGVjX3QgX2djcnlfcHVia2V5X3NwZWNfcnNhOwo+IAo+IFBs ZWFzZSB0YWtlIGEgbG9vayBhdCB0aGUgY29tbWl0IDY3NDQ4NDBiMSAoYnVpbGQ6IFRyYWNrIGV4 cGxpY2l0IAo+IG1vZHVsZQo+IGRlcGVuZGVuY2llcyBpbiBNYWtlZmlsZS5jb3JlLmRlZikgYW5k IHVzZSAiZGVwZW5kcyIgaW5zdGVhZC4KPiAKPiBJIHRoaW5rIEkgc2F3IHNpbWlsYXIgdGhpbmdz IGluIGVhcmxpZXIgcGF0Y2hlcy4gSWYgaXQgaXMgdGhlIHNhbWUgY2FzZQo+IHBsZWFzZSBmaXgg dGhlIG90aGVyIGlzc3VlcyBhcyBhYm92ZS4uLgo+IAo+PiArc3RhdGljIGVudW0KPj4gK3sKPj4g KyAgY2hlY2tfc2lnc19ubyA9IDAsCj4+ICsgIGNoZWNrX3NpZ3NfZW5mb3JjZSA9IDEsCj4+ICsg IGNoZWNrX3NpZ3NfZm9yY2VkID0gMgo+IAo+IFBsZWFzZSB1c2UgdXBwZXJjYXNlIGZvciBhbGwg dGhlc2UgY29uc3RhbnRzLgo+IAo+PiArfSBjaGVja19zaWdzID0gY2hlY2tfc2lnc19ubzsKPj4g Kwo+PiArc3RhdGljIGNvbnN0IGNoYXIgKgo+PiArZ3J1Yl9lbnZfcmVhZF9zZWMgKHN0cnVjdCBn cnViX2Vudl92YXIgKnZhciBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCj4+ICsgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqdmFsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKPj4gK3sK Pj4gKyAgaWYgKGNoZWNrX3NpZ3MgPT0gY2hlY2tfc2lnc19mb3JjZWQpCj4+ICsgICAgcmV0dXJu ICJmb3JjZWQiOwo+PiArICBlbHNlIGlmIChjaGVja19zaWdzID09IGNoZWNrX3NpZ3NfZW5mb3Jj ZSkKPj4gKyAgICByZXR1cm4gImVuZm9yY2UiOwo+PiArICBlbHNlCj4+ICsgICAgcmV0dXJuICJu byI7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjaGFyICoKPj4gK2dydWJfZW52X3dyaXRlX3NlYyAo c3RydWN0IGdydWJfZW52X3ZhciAqdmFyIF9fYXR0cmlidXRlX18gCj4+ICgodW51c2VkKSksIGNv bnN0IGNoYXIgKnZhbCkKPj4gK3sKPj4gKyAgLyogRG8gbm90IGFsbG93IHRoZSB2YWx1ZSB0byBi ZSBjaGFuZ2VkIGlmIHNldCB0byBmb3JjZWQgKi8KPj4gKyAgaWYgKGNoZWNrX3NpZ3MgPT0gY2hl Y2tfc2lnc19mb3JjZWQpCj4+ICsgICAgcmV0dXJuIGdydWJfc3RyZHVwICgiZm9yY2VkIik7Cj4g Cj4gZ3J1Yl9zdHJkdXAoKSBtYXkgZmFpbC4uLgo+IAo+PiArCj4+ICsgIGlmICgoKnZhbCA9PSAn MicpIHx8ICgqdmFsID09ICdmJykpCj4+ICsgICAgY2hlY2tfc2lncyA9IGNoZWNrX3NpZ3NfZm9y Y2VkOwo+PiArICBlbHNlIGlmICgoKnZhbCA9PSAnMScpIHx8ICgqdmFsID09ICdlJykpCj4+ICsg ICAgY2hlY2tfc2lncyA9IGNoZWNrX3NpZ3NfZW5mb3JjZTsKPj4gKyAgZWxzZSBpZiAoKCp2YWwg PT0gJzAnKSB8fCAoKnZhbCA9PSAnbicpKQo+PiArICAgIGNoZWNrX3NpZ3MgPSBjaGVja19zaWdz X25vOwo+PiArCj4+ICsgIHJldHVybiBncnViX3N0cmR1cCAoZ3J1Yl9lbnZfcmVhZF9zZWMgKE5V TEwsIE5VTEwpKTsKPiAKPiBEaXR0by4uLgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9l cnJfdAo+PiArZmlsZV9yZWFkX2FsbCAoZ3J1Yl9maWxlX3QgZmlsZSwgZ3J1Yl91aW50OF90ICoq YnVmLCBncnViX3NpemVfdCAKPj4gKmxlbikKPj4gK3sKPj4gKyAgZ3J1Yl9vZmZfdCBmdWxsX2Zp bGVfc2l6ZTsKPj4gKyAgZ3J1Yl9zaXplX3QgZmlsZV9zaXplLCB0b3RhbF9yZWFkX3NpemUgPSAw Owo+PiArICBncnViX3NzaXplX3QgcmVhZF9zaXplOwo+PiArCj4+ICsgIGZ1bGxfZmlsZV9zaXpl ID0gZ3J1Yl9maWxlX3NpemUgKGZpbGUpOwo+PiArICBpZiAoZnVsbF9maWxlX3NpemUgPT0gR1JV Ql9GSUxFX1NJWkVfVU5LTk9XTikKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0FSR1VNRU5ULAo+PiArICAgICAgICAgICAgICAgICAgICAgICBOXygiQ2Fubm90IHJlYWQg YSBmaWxlIG9mIHVua25vd24gc2l6ZSBpbnRvIGEgCj4+IGJ1ZmZlciIpKTsKPj4gKwo+PiArICBp ZiAoZnVsbF9maWxlX3NpemUgPiBHUlVCX1NJWkVfTUFYKQo+PiArICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIE5f KCJGaWxlIGlzIHRvbyBsYXJnZSB0byByZWFkOiAlIiAKPj4gUFJJdUdSVUJfVUlOVDY0X1QgIiBi eXRlcyIpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICBmdWxsX2ZpbGVfc2l6ZSk7Cj4+ICsK Pj4gKyAgZmlsZV9zaXplID0gKGdydWJfc2l6ZV90KSBmdWxsX2ZpbGVfc2l6ZTsKPj4gKwo+PiAr ICAqYnVmID0gZ3J1Yl9tYWxsb2MgKGZpbGVfc2l6ZSk7Cj4+ICsgIGlmICghKmJ1ZikKPj4gKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgTl8oIkNvdWxkIG5vdCBhbGxvY2F0ZSBmaWxlIGRhdGEgYnVmZmVyIHNp emUgCj4+ICUiIFBSSXVHUlVCX1NJWkUpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICBmaWxl X3NpemUpOwo+PiArCj4+ICsgIHdoaWxlICh0b3RhbF9yZWFkX3NpemUgPCBmaWxlX3NpemUpCj4+ ICsgICAgewo+PiArICAgICAgcmVhZF9zaXplID0gZ3J1Yl9maWxlX3JlYWQgKGZpbGUsICpidWYg KyB0b3RhbF9yZWFkX3NpemUsIAo+PiBmaWxlX3NpemUgLSB0b3RhbF9yZWFkX3NpemUpOwo+PiAr Cj4+ICsgICAgICBpZiAocmVhZF9zaXplIDwgMCkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAg IGdydWJfZnJlZSAoKmJ1Zik7Cj4+ICsgICAgICAgICAgcmV0dXJuIGdydWJfZXJybm87Cj4+ICsg ICAgICAgIH0KPj4gKyAgICAgIGVsc2UgaWYgKHJlYWRfc2l6ZSA9PSAwKQo+PiArICAgICAgICB7 Cj4+ICsgICAgICAgICAgZ3J1Yl9mcmVlICgqYnVmKTsKPj4gKyAgICAgICAgICByZXR1cm4gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfSU8sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5f KCJDb3VsZCBub3QgcmVhZCBmdWxsIGZpbGUgc2l6ZSAiCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIoJSIgUFJJdUdSVUJfU0laRSAiKSwgb25seSAlIiAKPj4gUFJJdUdSVUJf U0laRSAiIGJ5dGVzIHJlYWQiKSwKPiAKPiBCZSBjYXJlZnVsLCB5b3UgY2Fubm90IHVzZSBQUkl1 R1JVQl9TSVpFIGNvbnZlcnNpb25zIGluIE5fKCkuIFRob3VnaAo+IEkgd291bGQgc3VnZ2VzdCB0 byBkcm9wIE5fKCkgaGVyZSBhbmQgZnJvbSBjcnlwdGljIGVycm9yIG1lc3NhZ2VzIHdoaWNoCj4g c2hvdWxkIGJlIHRhcmdldGVkIG9ubHkgZm9yIGV4cGVydHMuIEFuZCBwcm9iYWJseSBpdCB3b3Vs ZCBiZSBiZXR0ZXIgdG8KPiBhZGQgZmlsZSBwYXRoIHRvIHRoaXMgZXJyb3IgbWVzc2FnZS4KPiAK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplLCB0b3RhbF9yZWFkX3Np emUpOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgIHRvdGFsX3JlYWRfc2l6ZSArPSByZWFk X3NpemU7Cj4+ICsgICAgfQo+PiArICAqbGVuID0gZmlsZV9zaXplOwo+PiArICByZXR1cm4gR1JV Ql9FUlJfTk9ORTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK3JlYWRfY2Vy dF9mcm9tX2ZpbGUgKGdydWJfZmlsZV90IGYsIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlIAo+PiAq Y2VydGlmaWNhdGUpCj4+ICt7Cj4+ICsgIGdydWJfZXJyX3QgZXJyOwo+PiArICBncnViX3VpbnQ4 X3QgKmJ1ZjsKPj4gKyAgZ3J1Yl9zaXplX3QgZmlsZV9zaXplOwo+PiArCj4+ICsgIGVyciA9IGZp bGVfcmVhZF9hbGwgKGYsICZidWYsICZmaWxlX3NpemUpOwo+PiArICBpZiAoZXJyICE9IEdSVUJf RVJSX05PTkUpCj4+ICsgICAgcmV0dXJuIGVycjsKPj4gKwo+PiArICBlcnIgPSBwYXJzZV94NTA5 X2NlcnRpZmljYXRlIChidWYsIGZpbGVfc2l6ZSwgY2VydGlmaWNhdGUpOwo+PiArICBncnViX2Zy ZWUgKGJ1Zik7Cj4+ICsKPj4gKyAgcmV0dXJuIGVycjsKPj4gK30KPj4gKwo+PiArc3RhdGljIGdy dWJfZXJyX3QKPj4gK2V4dHJhY3RfYXBwZW5kZWRfc2lnbmF0dXJlIChjb25zdCBncnViX3VpbnQ4 X3QgKmJ1ZiwgZ3J1Yl9zaXplX3QgCj4+IGJ1ZnNpemUsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGdydWJfYXBwZW5kZWRfc2lnbmF0dXJlICpzaWcpCj4+ICt7Cj4+ICsg IGdydWJfc2l6ZV90IHBrY3M3X3NpemU7Cj4+ICsgIGdydWJfc2l6ZV90IHJlbWFpbmluZ19sZW47 Cj4+ICsgIGNvbnN0IGdydWJfdWludDhfdCAqYXBwc2lnZGF0YSA9IGJ1ZiArIGJ1ZnNpemUgLSBn cnViX3N0cmxlbiAKPj4gKG1hZ2ljKTsKPj4gKwo+PiArICBpZiAoYnVmc2l6ZSA8IGdydWJfc3Ry bGVuIChtYWdpYykpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdO QVRVUkUsIE5fKCJGaWxlIHRvbyBzaG9ydCBmb3IgCj4+IHNpZ25hdHVyZSBtYWdpYyIpKTsKPj4g Kwo+PiArICBpZiAoZ3J1Yl9tZW1jbXAgKGFwcHNpZ2RhdGEsIChncnViX3VpbnQ4X3QgKikgbWFn aWMsIGdydWJfc3RybGVuIAo+PiAobWFnaWMpKSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgTl8oIk1pc3Npbmcgb3IgaW52YWxpZCAKPj4gc2lnbmF0 dXJlIG1hZ2ljIikpOwo+PiArCj4+ICsgIHJlbWFpbmluZ19sZW4gPSBidWZzaXplIC0gZ3J1Yl9z dHJsZW4gKG1hZ2ljKTsKPj4gKwo+PiArICBpZiAocmVtYWluaW5nX2xlbiA8IHNpemVvZiAoc3Ry dWN0IG1vZHVsZV9zaWduYXR1cmUpKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfU0lHTkFUVVJFLCBOXygiRmlsZSB0b28gc2hvcnQgZm9yIAo+PiBzaWduYXR1cmUgbWV0 YWRhdGEiKSk7Cj4+ICsKPj4gKyAgYXBwc2lnZGF0YSAtPSBzaXplb2YgKHN0cnVjdCBtb2R1bGVf c2lnbmF0dXJlKTsKPj4gKwo+PiArICAvKiBleHRyYWN0IHRoZSBtZXRhZGF0YSAqLwo+PiArICBn cnViX21lbWNweSAoJihzaWctPnNpZ19tZXRhZGF0YSksIGFwcHNpZ2RhdGEsIHNpemVvZiAoc3Ry dWN0IAo+PiBtb2R1bGVfc2lnbmF0dXJlKSk7Cj4+ICsKPj4gKyAgcmVtYWluaW5nX2xlbiAtPSBz aXplb2YgKHN0cnVjdCBtb2R1bGVfc2lnbmF0dXJlKTsKPj4gKwo+PiArICBpZiAoc2lnLT5zaWdf bWV0YWRhdGEuaWRfdHlwZSAhPSAyKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfU0lHTkFUVVJFLCBOXygiV3Jvbmcgc2lnbmF0dXJlIAo+PiB0eXBlIikpOwo+PiArCj4+ ICsgIHBrY3M3X3NpemUgPSBncnViX2JlX3RvX2NwdTMyIChzaWctPnNpZ19tZXRhZGF0YS5zaWdf bGVuKTsKPj4gKwo+PiArICBpZiAocGtjczdfc2l6ZSA+IHJlbWFpbmluZ19sZW4pCj4+ICsgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsIE5fKCJGaWxlIHRvbyBz aG9ydCBmb3IgCj4+IFBLQ1MjNyBtZXNzYWdlIikpOwo+PiArCj4+ICsgIGdydWJfZHByaW50ZiAo ImFwcGVuZGVkc2lnIiwgInNpZyBsZW4gJSIgUFJJdUdSVUJfU0laRSAiXG4iLCAKPj4gcGtjczdf c2l6ZSk7Cj4+ICsKPj4gKyAgc2lnLT5zaWduYXR1cmVfbGVuID0gZ3J1Yl9zdHJsZW4gKG1hZ2lj KSArIHNpemVvZiAoc3RydWN0IAo+PiBtb2R1bGVfc2lnbmF0dXJlKSArIHBrY3M3X3NpemU7Cj4+ ICsKPj4gKyAgLyogcmV3aW5kIHBvaW50ZXIgYW5kIHBhcnNlIHBrY3M3IGRhdGEgKi8KPj4gKyAg YXBwc2lnZGF0YSAtPSBwa2NzN19zaXplOwo+PiArCj4+ICsgIHJldHVybiBwYXJzZV9wa2NzN19z aWduZWREYXRhIChhcHBzaWdkYXRhLCBwa2NzN19zaXplLCAKPj4gJnNpZy0+cGtjczcpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArZ3J1Yl92ZXJpZnlfYXBwZW5kZWRfc2ln bmF0dXJlIChjb25zdCBncnViX3VpbnQ4X3QgKmJ1ZiwgZ3J1Yl9zaXplX3QgCj4+IGJ1ZnNpemUp Cj4+ICt7Cj4+ICsgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKPj4gKyAgZ3J1Yl9z aXplX3QgZGF0YXNpemU7Cj4+ICsgIHZvaWQgKmNvbnRleHQ7Cj4+ICsgIHVuc2lnbmVkIGNoYXIg Kmhhc2g7Cj4+ICsgIGdjcnlfbXBpX3QgaGFzaG1waTsKPj4gKyAgZ2NyeV9lcnJfY29kZV90IHJj Owo+PiArICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqcGs7Cj4+ICsgIHN0cnVjdCBncnViX2Fw cGVuZGVkX3NpZ25hdHVyZSBzaWc7Cj4+ICsgIHN0cnVjdCBwa2NzN19zaWduZXJJbmZvICpzaTsK Pj4gKyAgaW50IGk7Cj4+ICsKPj4gKyAgaWYgKCFncnViX3RydXN0ZWRfa2V5KQo+PiArICAgIHJl dHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCBOXygiTm8gdHJ1c3RlZCBr ZXlzIHRvIAo+PiB2ZXJpZnkgYWdhaW5zdCIpKTsKPj4gKwo+PiArICBlcnIgPSBleHRyYWN0X2Fw cGVuZGVkX3NpZ25hdHVyZSAoYnVmLCBidWZzaXplLCAmc2lnKTsKPj4gKyAgaWYgKGVyciAhPSBH UlVCX0VSUl9OT05FKQo+PiArICAgIHJldHVybiBlcnI7Cj4+ICsKPj4gKyAgZGF0YXNpemUgPSBi dWZzaXplIC0gc2lnLnNpZ25hdHVyZV9sZW47Cj4+ICsKPj4gKyAgZm9yIChpID0gMDsgaSA8IHNp Zy5wa2NzNy5zaWduZXJJbmZvX2NvdW50OyBpKyspCj4+ICsgICAgewo+PiArICAgICAgLyoKPj4g KyAgICAgICAqIFRoaXMgY291bGQgYmUgb3B0aW1pc2VkIGluIGEgY291cGxlIG9mIHdheXM6Cj4+ ICsgICAgICAgKiAtIHdlIGNvdWxkIG9ubHkgY29tcHV0ZSBoYXNoZXMgb25jZSBwZXIgaGFzaCB0 eXBlCj4+ICsgICAgICAgKiAtIHdlIGNvdWxkIHRyYWNrIHNpZ25lciBpbmZvcm1hdGlvbiBhbmQg b25seSB2ZXJpZnkgd2hlcmUgCj4+IElEcyBtYXRjaAo+PiArICAgICAgICogRm9yIG5vdyB3ZSBk byB0aGUgbmFpdmUgTyh0cnVzdGVkIGtleXMgKiBwa2NzNyBzaWduZXJzKSAKPj4gYXBwcm9hY2gu Cj4+ICsgICAgICAgKi8KPj4gKyAgICAgIHNpID0gJnNpZy5wa2NzNy5zaWduZXJJbmZvc1tpXTsK Pj4gKyAgICAgIGNvbnRleHQgPSBncnViX3phbGxvYyAoc2ktPmhhc2gtPmNvbnRleHRzaXplKTsK Pj4gKyAgICAgIGlmICghY29udGV4dCkKPj4gKyAgICAgICAgcmV0dXJuIGdydWJfZXJybm87Cj4+ ICsKPj4gKyAgICAgIHNpLT5oYXNoLT5pbml0IChjb250ZXh0KTsKPj4gKyAgICAgIHNpLT5oYXNo LT53cml0ZSAoY29udGV4dCwgYnVmLCBkYXRhc2l6ZSk7Cj4+ICsgICAgICBzaS0+aGFzaC0+Zmlu YWwgKGNvbnRleHQpOwo+PiArICAgICAgaGFzaCA9IHNpLT5oYXNoLT5yZWFkIChjb250ZXh0KTsK Pj4gKwo+PiArICAgICAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAiZGF0YSBzaXplICUi IFBSSXhHUlVCX1NJWkUgIiwgCj4+IHNpZ25lciAlZCBoYXNoICUwMnglMDJ4JTAyeCUwMnguLi5c biIsCj4+ICsgICAgICAgICAgICAgICAgICAgIGRhdGFzaXplLCBpLCBoYXNoWzBdLCBoYXNoWzFd LCBoYXNoWzJdLCBoYXNoWzNdKTsKPj4gKwo+PiArICAgICAgZXJyID0gR1JVQl9FUlJfQkFEX1NJ R05BVFVSRTsKPj4gKyAgICAgIGZvciAocGsgPSBncnViX3RydXN0ZWRfa2V5OyBwazsgcGsgPSBw ay0+bmV4dCkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIHJjID0gZ3J1Yl9jcnlwdG9fcnNh X3BhZCAoJmhhc2htcGksIGhhc2gsIHNpLT5oYXNoLCAKPj4gcGstPm1waXNbMF0pOwo+PiArICAg ICAgICAgIGlmIChyYykKPj4gKyAgICAgICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgZXJyID0g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTl8oIkVycm9yIHBhZGRpbmcgaGFzaCBmb3IgUlNBIAo+PiB2ZXJpZmlj YXRpb246ICVkIiksIHJjKTsKPiAKPiBJcyBnY3J5X2Vycl9jb2RlX3QgYWx3YXlzIGVxdWFsIGlu dCB0eXBlPyBFdmVuIGlmIHllcyBpdCB3b3VsZCBiZSBuaWNlCj4gdG8gY2FzdCByYyB0byBpbnQu IEFuZCBJIHdvdWxkIGRyb3AgTl8oKSBoZXJlLgo+IAo+PiArICAgICAgICAgICAgICBncnViX2Zy ZWUgKGNvbnRleHQpOwo+PiArICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7Cj4+ICsgICAgICAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICByYyA9IF9nY3J5X3B1YmtleV9zcGVjX3JzYS52ZXJp ZnkgKDAsIGhhc2htcGksIAo+PiAmc2ktPnNpZ19tcGksIHBrLT5tcGlzLCBOVUxMLCBOVUxMKTsK Pj4gKyAgICAgICAgICBnY3J5X21waV9yZWxlYXNlIChoYXNobXBpKTsKPj4gKwo+PiArICAgICAg ICAgIGlmIChyYyA9PSAwKQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICBncnVi X2RwcmludGYgKCJhcHBlbmRlZHNpZyIsICJ2ZXJpZnkgc2lnbmVyICVkIHdpdGgga2V5IAo+PiAn JXMnIHN1Y2NlZWRlZFxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBway0+ c3ViamVjdCk7Cj4+ICsgICAgICAgICAgICAgIGVyciA9IEdSVUJfRVJSX05PTkU7Cj4+ICsgICAg ICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICAgICAgfQo+PiArCj4+ICsgICAgICAgICAgZ3J1 Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAidmVyaWZ5IHNpZ25lciAlZCB3aXRoIGtleSAKPj4g JyVzJyBmYWlsZWQgd2l0aCAlZFxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGksIHBr LT5zdWJqZWN0LCByYyk7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgZ3J1Yl9mcmVlIChj b250ZXh0KTsKPj4gKwo+PiArICAgICAgaWYgKGVyciA9PSBHUlVCX0VSUl9OT05FKQo+PiArICAg ICAgICBicmVhazsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyogSWYgd2UgZGlkbid0IHZlcmlmeSwg cHJvdmlkZSBhIG5lYXQgbWVzc2FnZSAqLwo+PiArICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUp Cj4+ICsgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICBOXygiRmFpbGVkIHRvIHZlcmlmeSBzaWduYXR1cmUgYWdhaW5z dCBhIAo+PiB0cnVzdGVkIGtleSIpKTsKPj4gKwo+PiArY2xlYW51cDoKPiAKPiBNaXNzaW5nIHNw YWNlIGJlZm9yZSBsYWJlbC4KPiAKPj4gKyAgcGtjczdfc2lnbmVkRGF0YV9yZWxlYXNlICgmc2ln LnBrY3M3KTsKPj4gKwo+PiArICByZXR1cm4gZXJyOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZ3J1 Yl9lcnJfdAo+PiArZ3J1Yl9jbWRfdmVyaWZ5X3NpZ25hdHVyZSAoZ3J1Yl9jb21tYW5kX3QgY21k IF9fYXR0cmlidXRlX18gCj4+ICgodW51c2VkKSksIGludCBhcmdjLCBjaGFyICoqYXJncykKPj4g K3sKPj4gKyAgZ3J1Yl9maWxlX3QgZjsKPj4gKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9O T05FOwo+PiArICBncnViX3VpbnQ4X3QgKmRhdGE7Cj4+ICsgIGdydWJfc2l6ZV90IGZpbGVfc2l6 ZTsKPj4gKwo+PiArICBpZiAoYXJnYyA8IDEpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8oIm9uZSBhcmd1bWVudCAKPj4gZXhwZWN0ZWQiKSk7Cj4+ ICsKPj4gKyAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAidmVyaWZ5aW5nICVzXG4iLCBh cmdzWzBdKTsKPj4gKwo+PiArICBmID0gZ3J1Yl9maWxlX29wZW4gKGFyZ3NbMF0sIEdSVUJfRklM RV9UWVBFX1ZFUklGWV9TSUdOQVRVUkUpOwo+PiArICBpZiAoIWYpCj4+ICsgICAgewo+PiArICAg ICAgZXJyID0gZ3J1Yl9lcnJubzsKPj4gKyAgICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ ICsKPj4gKyAgZXJyID0gZmlsZV9yZWFkX2FsbCAoZiwgJmRhdGEsICZmaWxlX3NpemUpOwo+PiAr ICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgZ290byBjbGVhbnVwOwo+PiArCj4+ ICsgIGVyciA9IGdydWJfdmVyaWZ5X2FwcGVuZGVkX3NpZ25hdHVyZSAoZGF0YSwgZmlsZV9zaXpl KTsKPj4gKwo+PiArICBncnViX2ZyZWUgKGRhdGEpOwo+PiArCj4+ICtjbGVhbnVwOgo+IAo+IERp dHRvLi4uCj4gCj4+ICsgIGlmIChmKQo+PiArICAgIGdydWJfZmlsZV9jbG9zZSAoZik7Cj4+ICsg IHJldHVybiBlcnI7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICtncnViX2Nt ZF9kaXN0cnVzdCAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwg aW50IAo+PiBhcmdjLCBjaGFyICoqYXJncykKPj4gK3sKPj4gKyAgdW5zaWduZWQgbG9uZyBjZXJ0 X251bSwgaTsKPj4gKyAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmNlcnQsICpwcmV2Owo+PiAr Cj4+ICsgIGlmIChhcmdjICE9IDEpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9BUkdVTUVOVCwgTl8oIk9uZSBhcmd1bWVudCAKPj4gZXhwZWN0ZWQiKSk7Cj4+ICsKPj4g KyAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkU7Cj4+ICsgIGNlcnRfbnVtID0gZ3J1Yl9zdHJ0 b3VsIChhcmdzWzBdLCBOVUxMLCAxMCk7Cj4+ICsgIGlmIChncnViX2Vycm5vICE9IEdSVUJfRVJS X05PTkUpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJybm87Cj4gCj4gVGhpcyBjaGVjayBpcyB1bnJl bGlhYmxlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgY29tbWl0IGFjOGEzN2RkYQo+IChuZXQvaHR0 cDogQWxsb3cgdXNlIG9mIG5vbi1zdGFuZGFyZCBUQ1AvSVAgcG9ydHMpIGFuZCBmaXggY2hlY2tz Cj4gZm9yIGFsbCBncnViX3N0cnRvdWwoKSBldCBjb25zb3J0ZXMgY2FsbHMuCj4gCj4gRGFuaWVs CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpHcnViLWRl dmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVsQGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3Jn L21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZlbAo=