From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id QZfeK/RsGGpc/iIAWB0awg (envelope-from ) for ; Thu, 28 May 2026 12:27:32 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=Yz6dmbtd; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id AC9341E0A3; Thu, 28 May 2026 12:27:32 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id B5EA01E062 for ; Thu, 28 May 2026 12:27:29 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DB08A4BA901A for ; Thu, 28 May 2026 16:27:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DB08A4BA901A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1779985648; bh=/mmibm3ToYd/yZThSCcwAqiEqQnxoJd7gdtqinxN+8o=; h=Date:To:Cc:Subject:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=Yz6dmbtdfchWOKwJjHngh6v+G7tLACW26FMhWgx1SGkErpM+t784xnD/VNWFsNF8W xWEgUpaQZm0/b4D3LrAwapsNCHDUlcS9zY5qlJr5qIcxojOWUN+CNzevHgmq4wwDhz Tkb0AZjqrFJtt2BtEPhoZLyyWIVvytOqr325SCYI= Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazlp170130007.outbound.protection.outlook.com [IPv6:2a01:111:f403:c20f::7]) by sourceware.org (Postfix) with ESMTPS id 850CA4BA2E21 for ; Thu, 28 May 2026 16:26:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 850CA4BA2E21 ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 850CA4BA2E21 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1779985604; cv=pass; b=LidRhOAZ+GgKNu2JNNZ/W5mk9jr9OX6opoJzBFIMDowZ+tiHiuv3s+k8KfzEIvGFBMHkQMaBByqzfBKrBKJ9udzT+LKk3+gbV9AmSmfOTUQpgnGob+U7VSugtzkCRr9C7mhfgvJWW9t2hOcx7N3bZhhvcAsQ5ILZZfGX9T5pg14= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1779985604; c=relaxed/simple; bh=T6YLAa0ozUbeELluWTTfqSLEe2jqiw0iF1fL1Hz1TkY=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:To:From:Subject: MIME-Version; b=GRGl9+gJuDDF3I2Y1ozAOtkcR8Tcx79NGcsxGWa8CFQhs9tJlB0c0RrQb81kGkLtD6SbR5rfdkP2qOtnMuLvlSwHryJ/aej1Du/wpsdz9HvoYe2HvasRjHj4mBWcVfeJyYtAoKfEp1o6Q/SeNkN/sQoiDr2cbTBA/PqLF6Xs8GQ= ARC-Authentication-Results: i=3; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=LPsNK0vS; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=LPsNK0vS DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 850CA4BA2E21 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=PfzUftBy2obPYKXAuT3ZqXQoBsamCO3EAJ5xpgji5zyArtPMylHg5Qpmhid3Cs/WYvoc88lPcaLMokXbadVMUo9Kf0pwf6TW4iZcnCY6zPtmWCkxtuE60aPmBp7E0KrNynAiY/mZBKGgkZjC0/sy4kb2LlFykrEXjNgRPQCfh6ihus65j8i1itMl5GZBR4o0YnAY69xVinTTmo+lLqav4gBJTPhmpN3QSwj+ae6FQrZp5/xhUde97wxFdEfpiaQtGYlagtZJaI3vYvUGzEkuyg1Zl9APd6Ga/cb8vEmCQvuDLJqqNrINCszdaKxJDh82wqThpRY6JS07H7wcmchEkQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/mmibm3ToYd/yZThSCcwAqiEqQnxoJd7gdtqinxN+8o=; b=eIRxifqL2BBNpSR/bHBvWUN9PPh5YByGn+UDsZqxIZDiewWcojCp8BrVX9eWYzmlqs84xH6997qzVrJR8TQ1z+09+tnzR/iKZrZacaR2EO6wiTRL/WUVA4LivLNOelqdAbtBn94nx9YplL1IKTlMyjQqBb/xdBvNQWHENeExqtRV0UWHIS/FB+8u/R+WalKWCHTd3DRmNft9kYIaai3XnSB/reUy6aV1TKqBy7k3V8vAcsEr0ZQ8uWPoGkyx/KSlUFZGcwWEVt9ROLNnXeIsVVT65zKIGU7v2DmyEHYCFdAT9uGOqE66wogqXc5tM90J+fwNpPEbuRGB19gwW3VJDQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=tromey.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) Received: from DU7PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:10:50e::6) by AS8PR08MB10289.eurprd08.prod.outlook.com (2603:10a6:20b:636::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.13; Thu, 28 May 2026 16:26:24 +0000 Received: from DU2PEPF00028D06.eurprd03.prod.outlook.com (2603:10a6:10:50e:cafe::54) by DU7PR01CA0041.outlook.office365.com (2603:10a6:10:50e::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.71.14 via Frontend Transport; Thu, 28 May 2026 16:26:24 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DU2PEPF00028D06.mail.protection.outlook.com (10.167.242.166) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.71.7 via Frontend Transport; Thu, 28 May 2026 16:26:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tWvb2LgUGgJ3NIlvfDhOUToJwHcMwr49Q+CvAyPrU4jEXi6xIw+Zm1foxueI2P+fOaGITuxE9mTbc38aVm5+XKI0Sg2YVh1igw7ezXOmjA4egW+/JEJXD8DU5P4Kpz3EKFYQSGbv35RrHNiin4SlvmcbgPfsT7/HOBiUhoYIzxKixea38Z/M636NFU3Lan5yvU+v3Zf8CuHitBmTvIrGNtG3DOTPVG3uYq3pqwr95GT3+dN2iBfxH13lDVcuB62uaPbRNl45O/x8uAdefxcoHRZ+osUVtoeElRFUpDtbCBLO6mnH+CeMLEZyplNCw+jcaplHIOlAhKbBDZ4MdifGYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/mmibm3ToYd/yZThSCcwAqiEqQnxoJd7gdtqinxN+8o=; b=RbQbeV+k1jRWttIuwX0I9Iw0GuzCQkgxMIfFDVoTdRBtGi7rpoZPbqAIANGLIjdVrVb3YZC2CUnxYrOLKMd4ivXMh+miLoMwMJsYyJdhcY4Ki/lHGK7dJe833PkJtb+1sLJvFIx7BXE/BhCWdj97j1K4L5xs4nn0zvVQolbmpa+NYMCjADvH1RvBCFv4YOq/H55LLAusUUkaMzMilwZcbWRd4VNrbPuclII9OqIKKpNGbiBkMvgCAGJzYR/ECVPAYqF+T5YZ0Qv7fxFAZhWJLKE8GKyAeYWRDgWtDMHiCYeccULnZ1/DHbMDNuz0wrDD5iD6BK37YXkqroPdt0HivQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB8659.eurprd08.prod.outlook.com (2603:10a6:20b:563::10) by GVXPR08MB10761.eurprd08.prod.outlook.com (2603:10a6:150:151::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.12; Thu, 28 May 2026 16:25:17 +0000 Received: from AS8PR08MB8659.eurprd08.prod.outlook.com ([fe80::96bf:2de3:5eab:70ae]) by AS8PR08MB8659.eurprd08.prod.outlook.com ([fe80::96bf:2de3:5eab:70ae%7]) with mapi id 15.21.0071.011; Thu, 28 May 2026 16:25:17 +0000 Content-Type: multipart/mixed; boundary="------------cppodQLVXVysT6VYZf3htHxi" Message-ID: Date: Thu, 28 May 2026 17:25:16 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Tom Tromey , gdb@sourceware.org Cc: Andrew Burgess Subject: Prototype of C extension using Python limited API X-ClientProxiedBy: LO4P123CA0256.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:194::9) To AS8PR08MB8659.eurprd08.prod.outlook.com (2603:10a6:20b:563::10) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: AS8PR08MB8659:EE_|GVXPR08MB10761:EE_|DU2PEPF00028D06:EE_|AS8PR08MB10289:EE_ X-MS-Office365-Filtering-Correlation-Id: 68d3873d-6b3f-4f1a-7872-08debcd5dc46 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|366016|6049299003|376014|1800799024|11063799006|18002099003|3023799007|56012099006|4053099003; X-Microsoft-Antispam-Message-Info-Original: swpB83uGbzWdaPh+KVThOmY980cyKG7PUU0eFjNvLlxMGIhBV2RE12DSrhTlsfAt0Et2UnxKGwyb4QsvANuKE2rfuJim1J01oT5zKVc9KW7rxr8m79g2JOybAZO2UKIpSSj1qwHyX8PamiF5FPZG4vrwTf/EmNuGJSCtqKqA8pbqIJSfN8SHBokcC6bvIyiOBlkHKCv/yxV791bsuVLs0DQ5kVO4Fe+q0PFwhxNAtUUTJzA8E6CofdUGkqzLTwLyjQP2dz6m1yxsTYJp70jLawXCXCjpU939l7m3HhwSJp+XP0fmZFOePuIfJni8rq2IkZKI2ZToAaK6hlFvWlSy4QMc7JXTiITOKv5MKG1Nbm1hIRS8tffr1JDFvPcA11VFLBc1QBHpV7yIxtPiFMbQaJTjq+i7KyhQXT7HlftVLXJyt7F+E65U8f1MNAB7zNkm7cY2eEWsuzfG8634yqursEDTwaDcNamLdzugJ1tDTaXTJ44zHAlNMsmI11Ex1u/9czHj9fngrwuc1alXih44WKm8P6POnaCfXDTC5FfPGk7Mcd+KbAE72NdqmdMA8m19A5fLdD+FDcweiHU0b4t6NVYuT0MSAjbr+AouQ/u4r+n+9MgBqQmDvu8sWuGWC0ZVXYixSDDBa1gHQA9oAGJrgsgg1ksWbPguSOZFl5fVaVh7smAZPZX8NQP2JbxGbKL1 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB8659.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(6049299003)(376014)(1800799024)(11063799006)(18002099003)(3023799007)(56012099006)(4053099003); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: VF3G/q8YhHBonREYaBae/imX80jTTyK4KvyGp26e4IcPtIOJNLcCer1pLjnUCONaitn04iYvyqM9flbciR8/Dp3UAdNLxOeduvrLZrFvS6XQ7xutdLBGA12bM3s7T6xhIP5Bdkx2LUN3pfwMJ69hSuzKCRPQi5T6ZD7TOYD/fDmtzTPtHsVNjSU658C7g/UGNGueky648b786WJPRY7h2W4XmhXaDEHwGA4waVvwcKK1tT/mymI7nfhhWjdUFhjBnbiHVqieOZrgCNaxHtvqAX4yuZf0uQmO7hgSTUQzs7ejxMt3Fal7jc8ihn1MPZtaBZIOvz3PRSU6If95ZQlFug== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR08MB10761 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028D06.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 2e41c7e5-f7aa-4734-4322-08debcd5b42d X-Microsoft-Antispam: BCL:0; ARA:13230040|6049299003|1800799024|35042699022|82310400026|14060799003|376014|36860700016|18002099003|4053099003|3023799007|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: tV7dS1T/gR1wEyHrrs+SBCA0AVMb55QaNZBWXqtVVQmB0HDaFs3J0wH3miFpI6ObycW7FrGWrpu6mIwmFFmfzcX9A9RJGHgBhG7QcH90yMAmeOZzcf8/vRJz09DMUoCH4RH5naUzDps3DM9YyCG2LEPUCV6Gf/ZgJ6NngUHFvR6FWby1L2WxwIvq0s7vLCtRfMZTVlcX8pdBU3VuqP8fKHEWFgXTMpqY7tVQpMuO+iLZARl18333s62Ltc+HfuSX7AKd+Xn5C/G+t2ncEttjASy8oLCJoZq3sIEIS1CHV/HPaUT7tBv+H8jDnuurHJl4yEUuW5Y3xUMPR9Ep9+XSrhYdlCmcDGiQHfNjdlVg1L+nWrooIHLwri6guXHHgpBw1rColrWMoMLo5lTEKh8ZDsBinoGO1jmXyhIOg8l6pGKrSGr68lN0O+lNQR6VjePbzzsi55SZxRyP8b/XaRClMVoTqEjPT8K9/at5YIxdC2nmBhc2K50z5FIeVNgMzukQa4gGZE7Jwrr3EdxntLnK2jCpptQT6a9BvWC+TLh7n3PpJfOSqRbnJxH5orx10OC/KI5HHTDvfpX1XAbflVromZPsz9knHFG7d4qJEnk9eBGdez6sV+E8dEPzJEgkuSa3bwewLwSl61qOcEJn4LyuhsqkDyRmKsNZLRafGaC10qIzlN7yEK/WxtEtpJAQb6kc5NNseEJJqh3mMJVKmz6T7bmmGYS3cKnmCpoinrYIzBY= X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(6049299003)(1800799024)(35042699022)(82310400026)(14060799003)(376014)(36860700016)(18002099003)(4053099003)(3023799007)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: x7+240h3EJvf/qCeqClI+A4QwLUM50334a5h2yqdKLiB7oGzAZph3id+OBoMOJol/KL5xOW3ZjluII3OiQzKEZVzDNEmphV9DNKMbWgEBkQaxk51TbDhXa/eOdsE4SIde3ix4EifzGrBjxPYYTwyQQoeV2aes/ZT0jOquRvZD8UOCht5cFHLsK8HFyYY5Ce3hIsYWVw7PIOyEHJonRzTaqOCVLtnpcEepaysmuUWbq7ZI5wSVPg8pPpTtltwtGWKcrC2tohr12WyDpCT1eN7BQmeytQhbVGYeASqOsqp63csM0JvH7tmh5m4cyHwBko/gc0IxOtcONhGHNvf/RLewzpQRjfpM7QXriaiqAX5PO4J9MsqiYTCmCx1YSGLVjpYYwJj+nZ0svu17ePn2EhgkQqZa/GgNsqrjBDnou5TwoSA/LxvzGU77LRarPRZSglV X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2026 16:26:24.1744 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 68d3873d-6b3f-4f1a-7872-08debcd5dc46 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028D06.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB10289 X-BeenThere: gdb@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Matthieu Longo via Gdb Reply-To: Matthieu Longo Errors-To: gdb-bounces~public-inbox=simark.ca@sourceware.org Sender: "Gdb" --------------cppodQLVXVysT6VYZf3htHxi Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Tom, As I previously told you (at least, I believe so but I am not 100% sure), I finished migrating all the Python C extensions some time ago. I had discovered some issues with a case of inheritance causing unexpected crashes. To facilitate the debugging, I decided to implement a prototype outside of GDB, and managed to make it work. I finally got the prototype reviewed by Victor Stinner, a Python core developer, to double-check whether my design was working as expected. Please find attached my last iteration. I also provided an archive which should be more convenient for you if you want to compile and test it. Could you please review it so that we validate this new approach before I migrate all my previous patches to it ? PS: - a README is provided with all the needed instruction inside. - this patch contains code from outside GDB's repository, and should not be merged inside GDB's repository. Regards, Matthieu --------------cppodQLVXVysT6VYZf3htHxi Content-Type: text/plain; charset=UTF-8; name="prototype.patch" Content-Disposition: attachment; filename="prototype.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyMDAwMAotLS0gL2Rldi9udWxsCisrKyBiL0NNYWtl TGlzdHMudHh0CkBAIC0wLDAgKzEsNTUgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lP TiA0LjMpCitwcm9qZWN0KFB5dGhvbkNwcEV4dGVuc2lvbikKK3NldChDTUFLRV9DWFhfU1RBTkRB UkQgMTcpCitzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEX1JFUVVJUkVEIE9OKQorc2V0KENNQUtFX0NY WF9FWFRFTlNJT05TIE9GRikKKworZmluZF9wYWNrYWdlKFB5dGhvbjMgIjMuMTQiIENPTVBPTkVO VFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCisKK3NldCAoQ01BS0VfQ19GTEFHUyAiJHtDTUFL RV9DX0ZMQUdTfSAtZmRpYWdub3N0aWNzLWNvbG9yPWFsd2F5cyIpCitzZXQgKENNQUtFX0NYWF9G TEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1mZGlhZ25vc3RpY3MtY29sb3I9YWx3YXlzIikKKwor I3NldCAoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtZnNhbml0aXplPWFkZHJlc3Mg LWZzYW5pdGl6ZT1sZWFrIikKKyNzZXQgKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxB R1N9IC1mc2FuaXRpemU9YWRkcmVzcyAtZnNhbml0aXplPWxlYWsiKQorCitzZXQoU1JDUworICAg ICJzcmMvZ2RiLW90aGVycy5jcHAiCisgICAgInNyYy9weS1vYmotdHlwZS5jcHAiCisgICAgInNy Yy9weXRob24taW50ZXJuYWwuY3BwIgorICAgICJzcmMvbXlfcHlfbW9kdWxlLmNwcCIKKyAgICAi c3JjL0EuY3BwIgorICAgICJzcmMvQi5jcHAiCisgICAgInNyYy9PYmpXaXRoQWxsb2MuY3BwIikK K2FkZF9saWJyYXJ5KE15TW9kdWxlIFNIQVJFRCAke1NSQ1N9KQorc2V0X3RhcmdldF9wcm9wZXJ0 aWVzKAorICAgIE15TW9kdWxlCisgICAgUFJPUEVSVElFUworICAgICAgICBQUkVGSVggIiIKKyAg ICAgICAgT1VUUFVUX05BTUUgIk15TW9kdWxlIgorICAgICAgICBMSU5LRVJfTEFOR1VBR0UgQwor ICAgICAgICBMSU5LX0xJQlJBUklFUyBQeXRob24zOjpQeXRob24KKyAgICAgICAgSU5DTFVERV9E SVJFQ1RPUklFUyAiJHtQWVRIT05fSU5DTFVERV9ESVJ9OyR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf RElSfS9pbmNsdWRlOyR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zcmMiCisgICAgICAgIENP TVBJTEVfREVGSU5JVElPTlMgIlB5X0xJTUlURURfQVBJPTB4MDMwZTAwMDAiCisgICAgKQorCith ZGRfZXhlY3V0YWJsZShQeURlYnVnICJweWRiZy5jcHAiKQordGFyZ2V0X2xpbmtfbGlicmFyaWVz KFB5RGVidWcgJHtQWVRIT05fTElCUkFSSUVTfSkKK3NldF90YXJnZXRfcHJvcGVydGllcygKKyAg ICBQeURlYnVnCisgICAgUFJPUEVSVElFUworICAgICAgICBQUkVGSVggIiIKKyAgICAgICAgT1VU UFVUX05BTUUgIlB5RGVidWciCisgICAgICAgIExJTktFUl9MQU5HVUFHRSBDCisgICAgICAgIExJ TktfTElCUkFSSUVTIFB5dGhvbjM6OlB5dGhvbgorICAgICAgICBJTkNMVURFX0RJUkVDVE9SSUVT ICIke1BZVEhPTl9JTkNMVURFX0RJUn07JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IgorICAg ICkKKworYWRkX2N1c3RvbV90YXJnZXQodGVzdC1weWRlYnVnCisgICAgICAgICAgICAgICAgICBD T01NQU5EIGNtYWtlIC1FIGVudiBQWVRIT05QQVRIPSR7Q01BS0VfQklOQVJZX0RJUn0gJHtDTUFL RV9CSU5BUllfRElSfS9QeURlYnVnIDI+JjEKKyAgICAgICAgICAgICAgICAgIFZFUkJBVElNKQor YWRkX2RlcGVuZGVuY2llcyh0ZXN0LXB5ZGVidWcgUHlEZWJ1ZykKKworYWRkX2N1c3RvbV90YXJn ZXQodGVzdC1weQorICAgICAgICAgICAgICAgICAgQ09NTUFORCBjbWFrZSAtRSBlbnYgUFlUSE9O UEFUSD0ke0NNQUtFX0JJTkFSWV9ESVJ9IHB5dGhvbjMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E SVJ9L3Rlc3QucHkKKyAgICAgICAgICAgICAgICAgIFZFUkJBVElNKQorYWRkX2RlcGVuZGVuY2ll cyh0ZXN0LXB5IE15TW9kdWxlKQpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOWZhZmUKLS0tIC9kZXYvbnVsbAor KysgYi9SRUFETUUubWQKQEAgLTAsMCArMSw2NSBAQAorIyMgQnVpbGQKKworYGBgYmFzaAorY21h a2UgLUcgTmluamEgLURDTUFLRV9CVUlMRF9UWVBFPURlYnVnIC1CIGJ1aWxkLWRpcgorYGBgCisK KyMjIFRlc3RpbmcKKworYGBgYmFzaAorY2QgYnVpbGQtZGlyCituaW5qYSAmJiBuaW5qYSB0ZXN0 LXB5ZGVidWcKKyMgT1IgdG8gZ2V0IHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgaXMgc3dhbGxlZCBi eSBDTWFrZQorUFlUSE9OUEFUSD0kKHB3ZCkgLi9QeURlYnVnCitgYGAKKworIyMjIEV4cGVjdGVk IG91dHB1dAorCitgYGB0ZXh0CitbJ19fY2xhc3NfXycsICdfX2RlbGF0dHJfXycsICdfX2RpY3Rf XycsICdfX2Rpcl9fJywgJ19fZG9jX18nLCAnX19lcV9fJywgJ19fZmlyc3RsaW5lbm9fXycsICdf X2Zvcm1hdF9fJywgJ19fZ2VfXycsICdfX2dldGF0dHJpYnV0ZV9fJywgJ19fZ2V0c3RhdGVfXycs ICdfX2d0X18nLCAnX19oYXNoX18nLCAnX19pbml0X18nLCAnX19pbml0X3N1YmNsYXNzX18nLCAn X19sZV9fJywgJ19fbHRfXycsICdfX21vZHVsZV9fJywgJ19fbmVfXycsICdfX25ld19fJywgJ19f cmVkdWNlX18nLCAnX19yZWR1Y2VfZXhfXycsICdfX3JlcHJfXycsICdfX3NldGF0dHJfXycsICdf X3NpemVvZl9fJywgJ19fc3RhdGljX2F0dHJpYnV0ZXNfXycsICdfX3N0cl9fJywgJ19fc3ViY2xh c3Nob29rX18nLCAnX193ZWFrcmVmX18nLCAnX2N5Y2xlJywgJ2ZvbycsICdpYW1hJywgJ2lhbWIn LCAnbmFtZSddCitCIEhlbGxvIEkgYW0gQSBIZWxsbyBJIGFtIGJvdGggQSBhbmQgQgorQ2FsbGlu ZyBFOjp0cF90cmF2ZXJzZV9pbXBsCistLT4gQl90cmF2ZXJzZQorRTogY2FsbGluZyBNeU1vZHVs ZS5BOjp0cF90cmF2ZXJzZQorQ2FsbGluZyBFOjp0cF90cmF2ZXJzZV9pbXBsCistLT4gQV90cmF2 ZXJzZQordmlzaXRpbmcgX19kaWN0X18KK0U6IGNhbGxpbmcgUHlfVklTSVQgKFB5X1RZUEUgKHNl bGYpKQorRTogc2tpcHBpbmcgUHlfVklTSVQgKFB5X1RZUEUgKHNlbGYpKSwgd2lsbCBjYWxsIGl0 IGluIE15TW9kdWxlLkEKK0NhbGxpbmcgRTo6dHBfdHJhdmVyc2VfaW1wbAorLS0+IEJfdHJhdmVy c2UKK0U6IGNhbGxpbmcgTXlNb2R1bGUuQTo6dHBfdHJhdmVyc2UKK0NhbGxpbmcgRTo6dHBfdHJh dmVyc2VfaW1wbAorLS0+IEFfdHJhdmVyc2UKK3Zpc2l0aW5nIF9fZGljdF9fCitFOiBjYWxsaW5n IFB5X1ZJU0lUIChQeV9UWVBFIChzZWxmKSkKK0U6IHNraXBwaW5nIFB5X1ZJU0lUIChQeV9UWVBF IChzZWxmKSksIHdpbGwgY2FsbCBpdCBpbiBNeU1vZHVsZS5BCitDYWxsaW5nIChudWxsKTo6dHBf Y2xlYXJfaW1wbAorLS0+IEJfY2xlYXIKKyhudWxsKTogY2FsbGluZyBNeU1vZHVsZS5BOjp0cF9j bGVhcgorVW5leGNlcHRlZCBlcnJvciBvY2N1cnJlZCAoVE8gSU5WRVNUSUdBVEUpCitBdHRyaWJ1 dGVFcnJvcjogX19tb2R1bGVfXworQ2FsbGluZyAobnVsbCk6OnRwX2NsZWFyX2ltcGwKKy0tPiBB X2NsZWFyCitjbGVhcmluZyBfX2RpY3RfXworRXhjZXB0aW9uIGlnbm9yZWQgaW4gdHBfY2xlYXIg b2YgRToKK0F0dHJpYnV0ZUVycm9yOiBfX21vZHVsZV9fCitDYWxsaW5nIChudWxsKTo6dHBfZGVh bGxvYworVW5leGNlcHRlZCBlcnJvciBvY2N1cnJlZCAoVE8gSU5WRVNUSUdBVEUpCitBdHRyaWJ1 dGVFcnJvcjogX19tb2R1bGVfXworQ2FsbGluZyAobnVsbCk6OnRwX2NsZWFyX2ltcGwKKy0tPiBC X2NsZWFyCisobnVsbCk6IGNhbGxpbmcgTXlNb2R1bGUuQTo6dHBfY2xlYXIKK1VuZXhjZXB0ZWQg ZXJyb3Igb2NjdXJyZWQgKFRPIElOVkVTVElHQVRFKQorQXR0cmlidXRlRXJyb3I6IF9fbW9kdWxl X18KK0NhbGxpbmcgKG51bGwpOjp0cF9jbGVhcl9pbXBsCistLT4gQV9jbGVhcgorY2xlYXJpbmcg X19kaWN0X18KK0RlbGV0aW5nIHR5cGUgKG51bGwpCitgYGAKKworIyMjIElzc3VlcworCisxLiBO b3Qgc3VyZSB3aHkgQV9jbGVhciBhbmQgQl9jbGVhciBhcmUgY2FsbGVkIHR3aWNlLiBJcyBpdCBk dWUgdG8gdGhlIGN5Y2xlID8KKzIuIFRoZSB0eXBlIG5hbWUgaXMgYChudWxsKWAgYmVjYXVzZSBg UHlUeXBlX0dldEZ1bGx5UXVhbGlmaWVkTmFtZSgpYCByZXR1cm5zIGBOVUxMYCBmb3IgYW4gdW5r bm93biByZWFzb24uIFBsZWFzZSBjb3VsZCB5b3UgZXhwbGFpbiBtZSB3aHkgPworMy4gVGhlcmUg aXMgYW4gdW5leHBlY3RlZCBlcnJvciBgQXR0cmlidXRlRXJyb3I6IF9fbW9kdWxlX19gLiBJIGRv bid0IHVuZGVyc3RhbmQgd2hlcmUgaXQgY29tZXMgZnJvbS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUv Z2RiLW90aGVycy5ocHAgYi9pbmNsdWRlL2dkYi1vdGhlcnMuaHBwCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjM2Nzk4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2dk Yi1vdGhlcnMuaHBwCkBAIC0wLDAgKzEsNjQgQEAKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8 UHl0aG9uLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworZXh0ZXJuICJDIiB7CisKKyNkZWZpbmUg QVRUUklCVVRFX1VOVVNFRF9SRVNVTFQgX19hdHRyaWJ1dGVfXyAoKF9fd2Fybl91bnVzZWRfcmVz dWx0X18pKQorI2RlZmluZSBBVFRSSUJVVEVfVVNFRCBfX2F0dHJpYnV0ZV9fICgoX191c2VkX18p KQorI2RlZmluZSBBVFRSSUJVVEVfVU5VU0VEIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCisKKyNk ZWZpbmUgZ2RiX2Fzc2VydChleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgKCh2b2lkKSAoKGV4cHIpID8gMCA6ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAoZ2RiX2Fz c2VydF9mYWlsICgjZXhwciwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyksIDApKSkKKwor LyogVGhpcyBwcmludHMgYW4gIkFzc2VydGlvbiBmYWlsZWQiIG1lc3NhZ2UsIGFza2luZyB0aGUg dXNlciBpZiB0aGV5CisgICB3YW50IHRvIGNvbnRpbnVlLCBkdW1wIGNvcmUsIG9yIGp1c3QgZXhp dC4gICovCisjZGVmaW5lIGdkYl9hc3NlcnRfZmFpbChhc3NlcnRpb24sIGZpbGUsIGxpbmUsIGZ1 bmN0aW9uKSAgICAgICAgICAgICAgICAgICBcCisgIGludGVybmFsX2Vycm9yX2xvYyAoZmlsZSwg bGluZSwgIiVzOiBBc3NlcnRpb24gYCVzJyBmYWlsZWQuIiwgICAgICAgICAgICBcCisJCSAgICAg IGZ1bmN0aW9uLCBhc3NlcnRpb24pCisKKy8qIFRoZSBjYW5vbmljYWwgZm9ybSBvZiBnZGJfYXNz ZXJ0ICgwKS4KKyAgIE1FU1NBR0UgaXMgYSBzdHJpbmcgdG8gaW5jbHVkZSBpbiB0aGUgZXJyb3Ig bWVzc2FnZS4gICovCisKKyNkZWZpbmUgZ2RiX2Fzc2VydF9ub3RfcmVhY2hlZChtZXNzYWdlLCAu Li4pIFwKKyAgaW50ZXJuYWxfZXJyb3JfbG9jIChfX0ZJTEVfXywgX19MSU5FX18sIF8oIiVzOiAi IG1lc3NhZ2UpLCBfX2Z1bmNfXywgXAorCQkgICAgICAjI19fVkFfQVJHU19fKQorCitbW25vcmV0 dXJuXV0gZXh0ZXJuIHZvaWQgaW50ZXJuYWxfZXJyb3JfbG9jIChjb25zdCBjaGFyICpmaWxlLCBp bnQgbGluZSwKKwkJCQkJICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgX19hdHRyaWJ1dGVf XyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOzsKKworfQorCisKKy8qIFdyYXAgUHlHZXRTZXRE ZWYgdG8gYWxsb3cgY29udmVuaWVudCBjb25zdHJ1Y3Rpb24gd2l0aCBzdHJpbmcKKyAgIGxpdGVy YWxzLiAgVW5mb3J0dW5hdGVseSwgUHlHZXRTZXREZWYncyAnbmFtZScgYW5kICdkb2MnIG1lbWJl cnMKKyAgIGFyZSAnY2hhciAqJyBpbnN0ZWFkIG9mICdjb25zdCBjaGFyIConLCBtZWFuaW5nIHRo YXQgaW4gb3JkZXIgdG8KKyAgIGxpc3QtaW5pdGlhbGl6ZSBQeUdldFNldERlZiBhcnJheXMgd2l0 aCBzdHJpbmcgbGl0ZXJhbHMgKGFuZAorICAgd2l0aG91dCB0aGUgd3JhcHBpbmcgYmVsb3cpIHdv dWxkIHJlcXVpcmUgd3JpdGluZyBleHBsaWNpdCAnY2hhciAqJworICAgY2FzdHMuICBJbnN0ZWFk LCB3ZSBleHRlbmQgUHlHZXRTZXREZWYgYW5kIGFkZCBjb25zdGV4cHIKKyAgIGNvbnN0cnVjdG9y cyB0aGF0IGFjY2VwdCBjb25zdCAnbmFtZScgYW5kICdkb2MnLCBoaWRpbmcgdGhlIHVnbHkKKyAg IGNhc3RzIGhlcmUgaW4gYSBzaW5nbGUgcGxhY2UuICAqLworCitzdHJ1Y3QgZ2RiX1B5R2V0U2V0 RGVmIDogUHlHZXRTZXREZWYKK3sKKyAgY29uc3RleHByIGdkYl9QeUdldFNldERlZiAoY29uc3Qg Y2hhciAqbmFtZV8sIGdldHRlciBnZXRfLCBzZXR0ZXIgc2V0XywKKwkJCSAgICAgY29uc3QgY2hh ciAqZG9jXywgdm9pZCAqY2xvc3VyZV8pCisgICAgOiBQeUdldFNldERlZiB7Y29uc3RfY2FzdDxj aGFyICo+IChuYW1lXyksIGdldF8sIHNldF8sCisJCSAgIGNvbnN0X2Nhc3Q8Y2hhciAqPiAoZG9j XyksIGNsb3N1cmVffQorICB7fQorCisgIC8qIEFsdGVybmF0aXZlIGNvbnN0cnVjdG9yIHRoYXQg YWxsb3dzIG9taXR0aW5nIHRoZSBjbG9zdXJlIGluIGxpc3QKKyAgICAgaW5pdGlhbGl6YXRpb24u ICAqLworICBjb25zdGV4cHIgZ2RiX1B5R2V0U2V0RGVmIChjb25zdCBjaGFyICpuYW1lXywgZ2V0 dGVyIGdldF8sIHNldHRlciBzZXRfLAorCQkJICAgICBjb25zdCBjaGFyICpkb2NfKQorICAgIDog Z2RiX1B5R2V0U2V0RGVmIHtuYW1lXywgZ2V0Xywgc2V0XywgZG9jXywgTlVMTH0KKyAge30KKwor ICAvKiBDb25zdHJ1Y3RvciBmb3IgdGhlIHNlbnRpbmVsIGVudHJpZXMuICAqLworICBjb25zdGV4 cHIgZ2RiX1B5R2V0U2V0RGVmIChzdGQ6Om51bGxwdHJfdCkKKyAgICA6IGdkYl9QeUdldFNldERl ZiB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0KKyAge30KK307CmRpZmYgLS1naXQgYS9p bmNsdWRlL2dkYl9yZWZfcHRyLmhwcCBiL2luY2x1ZGUvZ2RiX3JlZl9wdHIuaHBwCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTg1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9p bmNsdWRlL2dkYl9yZWZfcHRyLmhwcApAQCAtMCwwICsxLDMwMSBAQAorLyogUmVmZXJlbmNlLWNv dW50ZWQgc21hcnQgcG9pbnRlciBjbGFzcworCisgICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyNiBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdEQlNVUFBP UlRfR0RCX1JFRl9QVFJfSAorI2RlZmluZSBHREJTVVBQT1JUX0dEQl9SRUZfUFRSX0gKKworI2lu Y2x1ZGUgPGNzdGRkZWY+CisKK3N0cnVjdCBnZGJweV9yZWZfcG9saWN5OworCituYW1lc3BhY2Ug Z2RiCit7CisKKy8qIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZWl0aGVyIGhvbGRzIGEgcmVm ZXJlbmNlIHRvIGEKKyAgIHJlZmVyZW5jZS1jb3VudGVkIG9iamVjdCBvciBpcyAiTlVMTCIuICBS ZWZlcmVuY2UgY291bnRpbmcgaXMKKyAgIGhhbmRsZWQgZXh0ZXJuYWxseSBieSBhIHBvbGljeSBj bGFzcy4gIElmIHRoZSBvYmplY3QgaG9sZHMgYQorICAgcmVmZXJlbmNlLCB0aGVuIHdoZW4gdGhl IG9iamVjdCBpcyBkZXN0cm95ZWQsIHRoZSByZWZlcmVuY2UgaXMKKyAgIGRlY3JlZidkLgorCisg ICBOb3JtYWxseSBhbiBpbnN0YW5jZSBpcyBjb25zdHJ1Y3RlZCB1c2luZyBhIHBvaW50ZXIuICBU aGlzIHNvcnQgb2YKKyAgIGluaXRpYWxpemF0aW9uIGxldHMgdGhpcyBjbGFzcyBtYW5hZ2UgdGhl IGxpZmV0aW1lIG9mIHRoYXQKKyAgIHJlZmVyZW5jZS4KKworICAgQXNzaWdubWVudCBhbmQgY29w eSBjb25zdHJ1Y3Rpb24gd2lsbCBtYWtlIGEgbmV3IHJlZmVyZW5jZSBhcworICAgYXBwcm9wcmlh dGUuICBBc3NpZ25tZW50IGZyb20gYSBwbGFpbiBwb2ludGVyIGlzIGRpc2FsbG93ZWQgdG8KKyAg IGF2b2lkIGNvbmZ1c2lvbiBhYm91dCB3aGV0aGVyIHRoaXMgYWNxdWlyZXMgYSBuZXcgcmVmZXJl bmNlOworICAgaW5zdGVhZCB1c2UgdGhlICJyZXNldCIgbWV0aG9kIC0tIHdoaWNoLCBsaWtlIHRo ZSBwb2ludGVyCisgICBjb25zdHJ1Y3RvciwgdHJhbnNmZXJzIG93bmVyc2hpcC4KKworICAgVGhl IHBvbGljeSBjbGFzcyBtdXN0IHByb3ZpZGUgdHdvIHN0YXRpYyBtZXRob2RzOgorICAgdm9pZCBp bmNyZWYgKFQgKik7CisgICB2b2lkIGRlY3JlZiAoVCAqKTsKKyovCit0ZW1wbGF0ZTx0eXBlbmFt ZSBULCB0eXBlbmFtZSBQb2xpY3k+CitjbGFzcyByZWZfcHRyCit7CitwdWJsaWM6CisKKyAgLyog QmVmcmllbmQgYWxsIGluc3RhbnRpYXRpb25zIG9mIHRoaXMgdGVtcGxhdGUsIHNvIHRoYXQgdGhl CisgICAgIHRlbXBsYXRlZCBjb3B5IGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRv cnMgY2FuIGFjY2VzcworICAgICB0aGUgZGF0YS4gICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIFgs IHR5cGVuYW1lIFk+IGZyaWVuZCBjbGFzcyByZWZfcHRyOworCisgIC8qIENyZWF0ZSBhIG5ldyBO VUxMIGluc3RhbmNlLiAgKi8KKyAgcmVmX3B0ciAoKSBub2V4Y2VwdAorICAgIDogbV9vYmogKE5V TEwpCisgIHsKKyAgfQorCisgIC8qIENyZWF0ZSBhIG5ldyBOVUxMIGluc3RhbmNlLiAgTm90ZSB0 aGF0IHRoaXMgaXMgbm90IGV4cGxpY2l0LiAgKi8KKyAgcmVmX3B0ciAoY29uc3Qgc3RkOjpudWxs cHRyX3QpIG5vZXhjZXB0CisgICAgOiBtX29iaiAoTlVMTCkKKyAgeworICB9CisKKyAgLyogQ3Jl YXRlIGEgbmV3IGluc3RhbmNlLiAgT0JKIGlzIGEgcmVmZXJlbmNlLCBtYW5hZ2VtZW50IG9mIHdo aWNoCisgICAgIGlzIG5vdyB0cmFuc2ZlcnJlZCB0byB0aGlzIGNsYXNzLiAgKi8KKyAgZXhwbGlj aXQgcmVmX3B0ciAoVCAqb2JqKSBub2V4Y2VwdAorICAgIDogbV9vYmogKG9iaikKKyAgeworICB9 CisKKyAgLyogQ29weSBhbm90aGVyIGluc3RhbmNlLiAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUg VSwKKwkgICB0eXBlbmFtZSA9IHN0ZDo6aXNfY29udmVydGlibGU8VSAqLCBUKj4+CisgIHJlZl9w dHIgKGNvbnN0IHJlZl9wdHI8VSwgUG9saWN5PiAmb3RoZXIpCisgICAgOiBtX29iaiAob3RoZXIu bV9vYmopCisgIHsKKyAgICBpZiAobV9vYmogIT0gTlVMTCkKKyAgICAgIFBvbGljeTo6aW5jcmVm IChtX29iaik7CisgIH0KKworICByZWZfcHRyIChjb25zdCByZWZfcHRyICZvdGhlcikKKyAgICA6 IG1fb2JqIChvdGhlci5tX29iaikKKyAgeworICAgIGlmIChtX29iaiAhPSBOVUxMKQorICAgICAg UG9saWN5OjppbmNyZWYgKG1fb2JqKTsKKyAgfQorCisgIC8qIFRyYW5zZmVyIG93bmVyc2hpcCBm cm9tIE9USEVSLiAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgVSwKKwkgICB0eXBlbmFtZSA9IHN0 ZDo6aXNfY29udmVydGlibGU8VSAqLCBUKj4+CisgIHJlZl9wdHIgKHJlZl9wdHI8VSwgUG9saWN5 PiAmJm90aGVyKSBub2V4Y2VwdAorICAgIDogbV9vYmogKG90aGVyLm1fb2JqKQorICB7CisgICAg b3RoZXIubV9vYmogPSBOVUxMOworICB9CisKKyAgcmVmX3B0ciAocmVmX3B0ciAmJm90aGVyKSBu b2V4Y2VwdAorICAgIDogbV9vYmogKG90aGVyLm1fb2JqKQorICB7CisgICAgb3RoZXIubV9vYmog PSBOVUxMOworICB9CisKKyAgLyogRGVzdHJveSB0aGlzIGluc3RhbmNlLiAgKi8KKyAgfnJlZl9w dHIgKCkKKyAgeworICAgIGlmIChtX29iaiAhPSBOVUxMKQorICAgICAgUG9saWN5OjpkZWNyZWYg KG1fb2JqKTsKKyAgfQorCisgIC8qIENvcHkgYW5vdGhlciBpbnN0YW5jZS4gICovCisgIHRlbXBs YXRlPHR5cGVuYW1lIFUsCisJICAgdHlwZW5hbWUgPSBzdGQ6OmlzX2NvbnZlcnRpYmxlPFUgKiwg VCo+PgorICByZWZfcHRyICZvcGVyYXRvcj0gKGNvbnN0IHJlZl9wdHI8VSwgUG9saWN5PiAmb3Ro ZXIpCisgIHsKKyAgICAvKiBOb3RlIHRoYXQgc2VsZi1hc3NpZ25tZW50IGlzIG5vdCBjaGVja2Vk IGhlcmUsIGFzIGl0IGlzbid0CisgICAgICAgcG9zc2libGU6IHNlbGYtYXNzaWdubWVudHMgd2ls bCBjaG9vc2UgdGhlIG5vbi10ZW1wbGF0ZQorICAgICAgIGZ1bmN0aW9uLiAgKi8KKyAgICByZXNl dCAob3RoZXIubV9vYmopOworICAgIGlmIChtX29iaiAhPSBOVUxMKQorICAgICAgUG9saWN5Ojpp bmNyZWYgKG1fb2JqKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICByZWZfcHRyICZvcGVy YXRvcj0gKGNvbnN0IHJlZl9wdHIgJm90aGVyKQorICB7CisgICAgLyogRG8gbm90aGluZyBvbiBz ZWxmLWFzc2lnbm1lbnQuICAqLworICAgIGlmICh0aGlzICE9ICZvdGhlcikKKyAgICAgIHsKKwly ZXNldCAob3RoZXIubV9vYmopOworCWlmIChtX29iaiAhPSBOVUxMKQorCSAgUG9saWN5OjppbmNy ZWYgKG1fb2JqKTsKKyAgICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvKiBUcmFu c2ZlciBvd25lcnNoaXAgZnJvbSBPVEhFUi4gICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIFUsCisJ ICAgdHlwZW5hbWUgPSBzdGQ6OmlzX2NvbnZlcnRpYmxlPFUgKiwgVCo+PgorICByZWZfcHRyICZv cGVyYXRvcj0gKHJlZl9wdHI8VSwgUG9saWN5PiAmJm90aGVyKQorICB7CisgICAgLyogTm90ZSB0 aGF0IHNlbGYtYXNzaWdubWVudCBpcyBub3QgY2hlY2tlZCBoZXJlLCBhcyBpdCBpc24ndAorICAg ICAgIHBvc3NpYmxlOiBzZWxmLWFzc2lnbm1lbnRzIHdpbGwgY2hvb3NlIHRoZSBub24tdGVtcGxh dGUKKyAgICAgICBmdW5jdGlvbi4gICovCisgICAgcmVzZXQgKG90aGVyLm1fb2JqKTsKKyAgICBv dGhlci5tX29iaiA9IE5VTEw7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgcmVmX3B0ciAm b3BlcmF0b3I9IChyZWZfcHRyICYmb3RoZXIpCisgIHsKKyAgICAvKiBEbyBub3RoaW5nIG9uIHNl bGYtYXNzaWdubWVudC4gICovCisgICAgaWYgKHRoaXMgIT0gJm90aGVyKQorICAgICAgeworCXJl c2V0IChvdGhlci5tX29iaik7CisJb3RoZXIubV9vYmogPSBOVUxMOworICAgICAgfQorICAgIHJl dHVybiAqdGhpczsKKyAgfQorCisgIC8qIENoYW5nZSB0aGlzIGluc3RhbmNlJ3MgcmVmZXJlbnQu ICBPQkogaXMgYSByZWZlcmVuY2UsIG1hbmFnZW1lbnQKKyAgICAgb2Ygd2hpY2ggaXMgbm93IHRy YW5zZmVycmVkIHRvIHRoaXMgY2xhc3MuICAqLworICB2b2lkIHJlc2V0IChUICpvYmopCisgIHsK KyAgICBpZiAobV9vYmogIT0gTlVMTCkKKyAgICAgIFBvbGljeTo6ZGVjcmVmIChtX29iaik7Cisg ICAgbV9vYmogPSBvYmo7CisgIH0KKworICBvcGVyYXRvciBib29sICgpIGNvbnN0IG5vZXhjZXB0 CisgIHsKKyAgICByZXR1cm4gbV9vYmogIT0gbnVsbHB0cjsKKyAgfQorCisgIC8qIFJldHVybiB0 aGlzIGluc3RhbmNlJ3MgcmVmZXJlbnQgd2l0aG91dCBjaGFuZ2luZyB0aGUgc3RhdGUgb2YKKyAg ICAgdGhpcyBjbGFzcy4gICovCisgIFQgKmdldCAoKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAg cmV0dXJuIG1fb2JqOworICB9CisKKyAgLyogUmV0dXJuIHRoaXMgaW5zdGFuY2UncyByZWZlcmVu dCwgYW5kIHN0b3AgbWFuYWdpbmcgdGhpcworICAgICByZWZlcmVuY2UuICBUaGUgY2FsbGVyIGlz IG5vdyByZXNwb25zaWJsZSBmb3IgdGhlIG93bmVyc2hpcCBvZgorICAgICB0aGUgcmVmZXJlbmNl LiAgKi8KKyAgQVRUUklCVVRFX1VOVVNFRF9SRVNVTFQgVCAqcmVsZWFzZSAoKSBub2V4Y2VwdAor ICB7CisgICAgVCAqcmVzdWx0ID0gbV9vYmo7CisKKyAgICBtX29iaiA9IE5VTEw7CisgICAgcmV0 dXJuIHJlc3VsdDsKKyAgfQorCisgIC8qIExldCB1c2VycyByZWZlciB0byBtZW1iZXJzIG9mIHRo ZSB1bmRlcmx5aW5nIHBvaW50ZXIuICAqLworICBUICpvcGVyYXRvci0+ICgpIGNvbnN0IG5vZXhj ZXB0CisgIHsKKyAgICByZXR1cm4gbV9vYmo7CisgIH0KKworICAvKiBBY3F1aXJlIGEgbmV3IHJl ZmVyZW5jZSBhbmQgcmV0dXJuIGEgcmVmX3B0ciB0aGF0IG93bnMgaXQuICAqLworICB0ZW1wbGF0 ZSA8Y2xhc3MgVE9iaj4KKyAgc3RhdGljIHJlZl9wdHI8VCwgUG9saWN5PiBuZXdfcmVmZXJlbmNl IChUT2JqICpvYmopCisgIHsKKyAgICBQb2xpY3k6OmluY3JlZiAob2JqKTsKKyAgICBpZiBjb25z dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZjxULCBUT2JqPjo6dmFsdWUKKwkJICB8fCBzdGQ6OmlzX2Jh c2Vfb2Y8VE9iaiwgVD46OnZhbHVlKQorICAgICAgcmV0dXJuIHJlZl9wdHI8VCwgUG9saWN5PiAo c3RhdGljX2Nhc3Q8VCAqPiAob2JqKSk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIHJlZl9wdHI8 VCwgUG9saWN5PiAob2JqKTsKKyAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIFAgPSBQb2xpY3ks IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDwKKwkgICBzdGQ6OmlzX3NhbWU8UCwgZ2RicHlf cmVmX3BvbGljeT46OnZhbHVlPj4KKyAgaW50IHZpc2l0ICh0eXBlbmFtZSBQOjp2aXNpdHByb2Mg dmlzaXQsIHZvaWQgKmFyZykgbm9leGNlcHQKKyAgeworICAgIHJldHVybiBQOjp2aXNpdCAobV9v YmosIHZpc2l0LCBhcmcpOworICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgUCA9IFBvbGljeSwg dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PAorCSAgIHN0ZDo6aXNfc2FtZTxQLCBnZGJweV9y ZWZfcG9saWN5Pjo6dmFsdWU+PgorICB2b2lkIGNsZWFyIChQICogPSBudWxscHRyKSBub2V4Y2Vw dAorICB7CisgICAgUDo6Y2xlYXIgKCZtX29iaik7CisgIH0KKworIHByaXZhdGU6CisKKyAgVCAq bV9vYmo7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBQ b2xpY3k+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09IChjb25zdCByZWZfcHRyPFQsIFBvbGljeT4g JmxocywKKwkJCWNvbnN0IHJlZl9wdHI8VSwgUG9saWN5PiAmcmhzKQoreworICByZXR1cm4gbGhz LmdldCAoKSA9PSByaHMuZ2V0ICgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt ZSBVLCB0eXBlbmFtZSBQb2xpY3k+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09IChjb25zdCByZWZf cHRyPFQsIFBvbGljeT4gJmxocywgY29uc3QgVSAqcmhzKQoreworICByZXR1cm4gbGhzLmdldCAo KSA9PSByaHM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFBvbGljeT4KK2lu bGluZSBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHJlZl9wdHI8VCwgUG9saWN5PiAmbGhzLCBjb25z dCBzdGQ6Om51bGxwdHJfdCkKK3sKKyAgcmV0dXJuIGxocy5nZXQgKCkgPT0gbnVsbHB0cjsKK30K KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgUG9saWN5PgoraW5s aW5lIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgVCAqbGhzLCBjb25zdCByZWZfcHRyPFUsIFBvbGlj eT4gJnJocykKK3sKKyAgcmV0dXJuIGxocyA9PSByaHMuZ2V0ICgpOworfQorCit0ZW1wbGF0ZTx0 eXBlbmFtZSBULCB0eXBlbmFtZSBQb2xpY3k+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09IChjb25z dCBzdGQ6Om51bGxwdHJfdCwgY29uc3QgcmVmX3B0cjxULCBQb2xpY3k+ICZyaHMpCit7CisgIHJl dHVybiBudWxscHRyID09IHJocy5nZXQgKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5 cGVuYW1lIFUsIHR5cGVuYW1lIFBvbGljeT4KK2lubGluZSBib29sIG9wZXJhdG9yIT0gKGNvbnN0 IHJlZl9wdHI8VCwgUG9saWN5PiAmbGhzLAorCQkJY29uc3QgcmVmX3B0cjxVLCBQb2xpY3k+ICZy aHMpCit7CisgIHJldHVybiBsaHMuZ2V0ICgpICE9IHJocy5nZXQgKCk7Cit9CisKK3RlbXBsYXRl PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFBvbGljeT4KK2lubGluZSBib29sIG9w ZXJhdG9yIT0gKGNvbnN0IHJlZl9wdHI8VCwgUG9saWN5PiAmbGhzLCBjb25zdCBVICpyaHMpCit7 CisgIHJldHVybiBsaHMuZ2V0ICgpICE9IHJoczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg dHlwZW5hbWUgUG9saWN5PgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgcmVmX3B0cjxU LCBQb2xpY3k+ICZsaHMsIGNvbnN0IHN0ZDo6bnVsbHB0cl90KQoreworICByZXR1cm4gbGhzLmdl dCAoKSAhPSBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0 eXBlbmFtZSBQb2xpY3k+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9IChjb25zdCBUICpsaHMsIGNv bnN0IHJlZl9wdHI8VSwgUG9saWN5PiAmcmhzKQoreworICByZXR1cm4gbGhzICE9IHJocy5nZXQg KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFBvbGljeT4KK2lubGluZSBi b29sIG9wZXJhdG9yIT0gKGNvbnN0IHN0ZDo6bnVsbHB0cl90LCBjb25zdCByZWZfcHRyPFQsIFBv bGljeT4gJnJocykKK3sKKyAgcmV0dXJuIG51bGxwdHIgIT0gcmhzLmdldCAoKTsKK30KKworfQor CisjZW5kaWYgLyogR0RCU1VQUE9SVF9HREJfUkVGX1BUUl9IICovCmRpZmYgLS1naXQgYS9pbmNs dWRlL3B5LW9iai1kaWN0LmhwcCBiL2luY2x1ZGUvcHktb2JqLWRpY3QuaHBwCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTU0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNs dWRlL3B5LW9iai1kaWN0LmhwcApAQCAtMCwwICsxLDE4OSBAQAorI3ByYWdtYSBvbmNlCisKKyNp bmNsdWRlICJweS1vYmotdHlwZS5ocHAiCisKKy8qIEhlbHBlcnMgZm9yIFB5dGhvbiBleHRlbnNp b24gb2JqZWN0cyB0aGF0IGhhdmUgYSBfX2RpY3RfXyBhdHRyaWJ1dGUuCisKKyAgIEFueSBQeXRo b24gQyBvYmplY3QgZXh0ZW5zaW9uIChmb3IgaW5zdGFuY2UsIGEgY2xhc3MgQSBpbmhlcml0aW5n IFB5T2JqZWN0KQorICAgbmVlZGluZyBfX2RpY3RfXyBzaG91bGQgb3duIGFuIGF0dHJpYnV0ZSBH REJQWU9CSkVDVF9ESUNUX0FUVFIgKEEpLgorCisgICBBY2Nlc3MgdG8gdGhlIGRpY3QgcmVxdWly ZXMgYSBjdXN0b20gZ2V0dGVyIGRlZmluZWQgdmlhIFB5R2V0U2V0RGVmLgorICAgICBnZGJfUHlH ZXRTZXREZWYgbXlfb2JqZWN0X2dldHNldFtdID0KKyAgICAgeworICAgICAgIGdkYnB5X2RpY3Rf YXR0cl9nZXR0ZXIgKEEsICJvYmplY3QiKSwKKyAgICAgICAuLi4KKyAgICAgICB7IG51bGxwdHIg fQorICAgICB9OworCisgICBJdCBpcyBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgX19kaWN0 X18gaXMgdXNlZCBkdXJpbmcgdGhlIGF0dHJpYnV0ZQorICAgbG9vay11cC4gU2luY2UgdGhpcyBk aWN0aW9uYXJ5IGlzIG5vdCBtYW5hZ2VkIGJ5IFB5dGhvbiBhbmQgaXMgbm90IGV4cG9zZWQKKyAg IHZpYSB0cF9kaWN0b2Zmc2V0LCBjdXN0b20gYXR0cmlidXRlIGdldHRlciAodHBfZ2V0YXR0cm8p IGFuZCBzZXR0ZXIKKyAgICh0cF9zZXRhdHRybykgYXJlIHJlcXVpcmVkIHRvIGNvcnJlY3RseSBy ZWRpcmVjdCBhdHRyaWJ1dGUgYWNjZXNzIHRvIHRoZQorICAgZGljdGlvbmFyeToKKyAgICAgUHlU eXBlX1Nsb3Qgb2JqZWN0X3R5cGVfc2xvdFtdID0geworICAgICAgIC4uLiwKKyAgICAgICBnZGJw eV9kaWN0X2F0dHJfUHlUeXBlX1Nsb3RzIChBKSwKKyAgICAgICAuLi4KKyAgICAgfTsKKworICAg RmluYWxseSwgaGVhcC1hbGxvY2F0ZWQgdHlwZXMgb3duaW5nIGEgX19kaWN0X18gc2hvdWxkIHZp c2l0IGFuZCBjbGVhciB0aGVpcgorICAgX19kaWN0X18uCisgICAgIHN0YXRpYyBpbnQKKyAgICAg QV90cF90cmF2ZXJzZSAoUHlPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJn KQorICAgICB7CisgICAgICAgYXV0byAqb2JqID0gKEEgKikgc2VsZjsKKyAgICAgICBnZGJweV9k aWN0X2F0dHJfUHlfVklTSVQgKG9iaik7CisgICAgICAgLi4uCisgICAgICAgcmV0dXJuIDA7Cisg ICAgIH0KKworICAgICBzdGF0aWMgdm9pZAorICAgICBBX3RwX2NsZWFyIChQeU9iamVjdCAqc2Vs ZikKKyAgICAgeworICAgICAgIGF1dG8gKm9iaiA9IChBICopIHNlbGY7CisgICAgICAgZ2RicHlf ZGljdF9hdHRyX1B5X0NMRUFSIChvYmopOworICAgICAgIC4uLgorICAgICB9CisgICAqLwordGVt cGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgZ2RicHlfZGljdF9oZWxwZXJzCit7Citwcml2YXRlOgor CisgIC8qIENvbXB1dGUgdGhlIGFkZHJlc3Mgb2YgdGhlIF9fZGljdF9fIGF0dHJpYnV0ZSBmb3Ig dGhlIGdpdmVuIFB5T2JqZWN0LiAgKi8KKyAgc3RhdGljIFB5T2JqZWN0ICoqY29tcHV0ZV9hZGRy IChQeU9iamVjdCAqc2VsZikKKyAgeworICAgIGF1dG8gKmRpY3Rfb3duZXIgPSByZWludGVycHJl dF9jYXN0PFQgKj4gKHNlbGYpOworICAgIHJldHVybiAmZGljdF9vd25lci0+ZGljdDsKKyAgfQor CitwdWJsaWM6CisKKyAgc3RhdGljIFB5T2JqZWN0ICoKKyAgYWxsb2NhdGUgKFB5T2JqZWN0ICpz ZWxmKQorICB7CisgICAgUHlPYmplY3QgKipweV9kaWN0X3B0ciA9IGdkYnB5X2RpY3RfaGVscGVy czo6Y29tcHV0ZV9hZGRyIChzZWxmKTsKKyAgICBQeU9iamVjdCAqcHlfZGljdCA9ICpweV9kaWN0 X3B0cjsKKyAgICBnZGJfYXNzZXJ0IChweV9kaWN0ID09IG51bGxwdHIpOworICAgICpweV9kaWN0 X3B0ciA9IFB5RGljdF9OZXcgKCk7CisgICAgcHlfZGljdCA9ICpweV9kaWN0X3B0cjsKKyAgICBy ZXR1cm4gcHlfZGljdDsKKyAgfQorCisKKyAgLyogR2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiB0 aGUgZ2V0dGVyIGZvciB0aGUgX19kaWN0X18gYXR0cmlidXRlIGZvciBvYmplY3RzCisgICBoYXZp bmcgYSBkaWN0aW9uYXJ5LiAgVGhlIENMT1NVUkUgYXJndW1lbnQgaXMgdW51c2VkLiAgKi8KKwor ICBzdGF0aWMgUHlPYmplY3QgKgorICBnZXR0ZXIgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9z dXJlIEFUVFJJQlVURV9VTlVTRUQpCisgIHsKKyAgICBQeU9iamVjdCAqKnB5X2RpY3RfcHRyID0g Z2RicHlfZGljdF9oZWxwZXJzOjpjb21wdXRlX2FkZHIgKHNlbGYpOworICAgIFB5T2JqZWN0ICpw eV9kaWN0ID0gKnB5X2RpY3RfcHRyOworICAgIGlmIChweV9kaWN0ID09IG51bGxwdHIpCisgICAg ICB7CisJUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKwkJCSAiVGhpcyBv YmplY3QgaGFzIG5vIF9fZGljdF9fIik7CisJcmV0dXJuIG51bGxwdHI7CisgICAgICB9CisgICAg Ly9pZiAocHlfZGljdCA9PSBudWxscHRyKQorICAgIC8vICBweV9kaWN0ID0gZ2RicHlfZGljdF9o ZWxwZXJzOjphbGxvY2F0ZSAoc2VsZiwgcHlfZGljdF9wdHIpOworICAgIHJldHVybiBQeV9OZXdS ZWYgKHB5X2RpY3QpOworICB9CisKKyAgLyogR2VuZXJpYyBhdHRyaWJ1dGUgZ2V0dGVyIGZ1bmN0 aW9uIHNpbWlsYXIgdG8gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIgKCkgYnV0CisgICAgIHRoYXQg c2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgb2JqZWN0IGhhcyBhIGRpY3Rpb25hcnkgX19kaWN0X18u ICAqLworICBzdGF0aWMgUHlPYmplY3QgKgorICBnZXRhdHRybyAoUHlPYmplY3QgKnNlbGYsIFB5 T2JqZWN0ICphdHRyKQorICB7CisgICAgUHlPYmplY3QgKnZhbHVlID0gUHlPYmplY3RfR2VuZXJp Y0dldEF0dHIgKHNlbGYsIGF0dHIpOworICAgIGlmICh2YWx1ZSAhPSBudWxscHRyKQorICAgICAg cmV0dXJuIHZhbHVlOworCisgICAgaWYgKCEgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyAoUHlFeGNf QXR0cmlidXRlRXJyb3IpKQorICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBnZGJweV9yZWY8 PiBkaWN0IChnZGJweV9kaWN0X2hlbHBlcnM6OmdldHRlciAoc2VsZiwgbnVsbHB0cikpOworICAg IGlmIChkaWN0ID09IG51bGxwdHIpCisgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8qIENs ZWFyIHByZXZpb3VzIEF0dHJpYnV0ZUVycm9yIHNldCBieSBQeU9iamVjdF9HZW5lcmljR2V0QXR0 ciB3aGVuIGl0CisgICAgICAgZGlkIG5vdCBmaW5kIHRoZSBhdHRyaWJ1dGUsIGFuZCB0cnkgdG8g Z2V0IHRoZSBhdHRyaWJ1dGUgZnJvbSBfX2RpY3RfXy4gICovCisgICAgUHlFcnJfQ2xlYXIoKTsK KworICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IgKGRpY3QuZ2V0ICgpLCBhdHRy KTsKKyAgICBpZiAodmFsdWUgIT0gbnVsbHB0cikKKyAgICAgIHJldHVybiBQeV9OZXdSZWYgKHZh bHVlKTsKKworICAgIC8qIElmIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKCkgcmV0dXJucyBOVUxM IGJlY2F1c2UgYW4gZXJyb3Igb2NjdXJyZWQsIGl0CisgICAgICAgc2V0cyBhbiBleGNlcHRpb24u ICBQcm9wYWdhdGUgaXQgYnkgcmV0dXJuaW5nIE5VTEwuICAqLworICAgIGlmIChQeUVycl9PY2N1 cnJlZCAoKSAhPSBudWxscHRyKQorICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvKiBJZiB0 aGUga2V5IGlzIG5vdCBmb3VuZCwgUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoKSByZXR1cm5zIE5V TEwgd2l0aG91dAorICAgICAgIHNldHRpbmcgYW4gZXhjZXB0aW9uLiAgRmFpbGluZyB0byBzZXQg b25lIGhlcmUgd291bGQgbGF0ZXIgcmVzdWx0IGluOgorCSA8Y2xhc3MgJ1N5c3RlbUVycm9yJz46 IGVycm9yIHJldHVybiB3aXRob3V0IGV4Y2VwdGlvbiBzZXQKKyAgICAgICBUaGVyZWZvcmUsIHdl IG11c3QgZXhwbGljaXRseSByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvciBpbiB0aGlzIGNhc2UuICAq LworICAgIFB5RXJyX0Zvcm1hdCAoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisJCSAgIiclcycgb2Jq ZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIsCisJCSAgZ2RicHlfcHlfb2JqX3RwX25hbWUgKHNl bGYpLAorCQkgIFB5VW5pY29kZV9Bc1VURjhBbmRTaXplIChhdHRyLCBudWxscHRyKSk7CisgICAg cmV0dXJuIG51bGxwdHI7CisgIH0KKworICAvKiBHZW5lcmljIGF0dHJpYnV0ZSBzZXR0ZXIgZnVu Y3Rpb24gc2ltaWxhciB0byBQeU9iamVjdF9HZW5lcmljU2V0QXR0ciAoKSBidXQKKyAgICAgdGhh dCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBvYmplY3QgaGFzIGEgZGljdGlvbmFyeSBfX2RpY3Rf Xy4gICovCisgIHN0YXRpYyBpbnQKKyAgc2V0YXR0cm8gKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXR0ciwgUHlPYmplY3QgKnZhbHVlKQorICB7CisgICAgaWYgKFB5T2JqZWN0X0dlbmVyaWNT ZXRBdHRyIChzZWxmLCBhdHRyLCB2YWx1ZSkgPT0gMCkKKyAgICAgIHJldHVybiAwOworCisgICAg aWYgKCEgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyAoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAg ICAgcmV0dXJuIC0xOworCisgICAgZ2RicHlfcmVmPD4gZGljdCAoZ2RicHlfZGljdF9oZWxwZXJz OjpnZXR0ZXIgKHNlbGYsIG51bGxwdHIpKTsKKyAgICBpZiAoZGljdCA9PSBudWxscHRyKQorICAg ICAgcmV0dXJuIC0xOworCisgICAgLyogQ2xlYXIgcHJldmlvdXMgQXR0cmlidXRlRXJyb3Igc2V0 IGJ5IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKCkgd2hlbiBpdAorICAgICAgIGRpZCBub3QgZmlu ZCB0aGUgYXR0cmlidXRlLCBhbmQgdHJ5IHRvIHNldCB0aGUgYXR0cmlidXRlIGludG8gX19kaWN0 X18uICAqLworICAgIFB5RXJyX0NsZWFyKCk7CisKKyAgICAvKiBTZXQgdGhlIG5ldyB2YWx1ZS4K KyAgICAgICBOb3RlOiB0aGUgb2xkIHZhbHVlIGlzIG1hbmFnZWQgYnkgUHlEaWN0X1NldEl0ZW0o KSwgc28gbm8gbmVlZCB0byBnZXQKKyAgICAgICBhIGJvcnJvd2VkIHJlZmVyZW5jZSBvbiBpdCBh bmQgZGVjcmVtZW50IGl0cyByZWZlcmVuY2UgY291bnRlciBiZWZvcmUKKyAgICAgICBzZXR0aW5n IGEgbmV3IHZhbHVlLiAgKi8KKyAgICByZXR1cm4gUHlEaWN0X1NldEl0ZW0gKGRpY3QuZ2V0ICgp LCBhdHRyLCB2YWx1ZSk7CisgIH0KK307CisKKyNkZWZpbmUgR0RCUFlPQkpFQ1RfRElDVF9BVFRS KE8pCQlcCisgIFB5T2JqZWN0ICpkaWN0OwkJCQlcCisgIHVzaW5nIGRpY3RfYXR0ciA9IGdkYnB5 X2RpY3RfaGVscGVyczxPPgorCisjZGVmaW5lIGdkYnB5X2RpY3RfYXR0cl9nZXR0ZXIoTywgb2Jq ZWN0X25hbWUpCQlcCisgIHsJCQkJCQkJXAorICAgICJfX2RpY3RfXyIsIC8qIG5hbWUgKi8JCQkJ XAorICAgIChnZXR0ZXIpIE86OmRpY3RfYXR0cjo6Z2V0dGVyLAkJCVwKKyAgICAoc2V0dGVyKSBu dWxscHRyLAkJCQkJXAorICAgICJUaGUgX19kaWN0X18gZm9yIHRoaXMgIiBvYmplY3RfbmFtZSAi LiIsIC8qIGRvYyAqLwlcCisgICAgbnVsbHB0ciwgLyogY2xvc3VyZSAqLwkJCQlcCisgIH0KKwor I2RlZmluZSBnZGJweV9kaWN0X2F0dHJfUHlUeXBlX1Nsb3RzKE8pCQkJCQlcCisgIHtQeV90cF9n ZXRhdHRybywgcmVpbnRlcnByZXRfY2FzdDx2b2lkICo+KE86OmRpY3RfYXR0cjo6Z2V0YXR0cm8p fSwJXAorICB7UHlfdHBfc2V0YXR0cm8sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPihPOjpkaWN0 X2F0dHI6OnNldGF0dHJvKX0KKworI2RlZmluZSBnZGJweV9kaWN0X2F0dHJfUHlfQUxMT0MoVCwg c2VsZilcCisgIGdkYnB5X2RpY3RfaGVscGVyczxUPjo6YWxsb2NhdGUgKHNlbGYpCisKKyNkZWZp bmUgZ2RicHlfZGljdF9hdHRyX1B5X1ZJU0lUKG9iaikJXAorICBwcmludGYgKCJ2aXNpdGluZyBf X2RpY3RfX1xuIik7CVwKKyAgUHlfVklTSVQgKG9iai0+ZGljdCkKKworI2RlZmluZSBnZGJweV9k aWN0X2F0dHJfUHlfQ0xFQVIob2JqKQlcCisgIHByaW50ZiAoImNsZWFyaW5nIF9fZGljdF9fXG4i KTsJXAorICBQeV9DTEVBUiAob2JqLT5kaWN0KQorCisjZGVmaW5lIGdkYnB5X2RpY3RfYXR0cl9Q eV9BTExPQyhULCBzZWxmKQlcCisgIGdkYnB5X2RpY3RfaGVscGVyczxUPjo6YWxsb2NhdGUgKHNl bGYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3B5LW9iai10eXBlLmhwcCBiL2luY2x1ZGUvcHktb2Jq LXR5cGUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjI1MTkKLS0t IC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3B5LW9iai10eXBlLmhwcApAQCAtMCwwICsxLDQyNCBA QAorLyogSGVscGVycyByZWxhdGVkIHRvIFB5dGhvbiBvYmplY3QgdHlwZQorCisgICBDb3B5cmln aHQgKEMpIDIwMjYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lm bmRlZiBHREJfUFlUSE9OX1BZX09CSl9UWVBFX0gKKyNkZWZpbmUgR0RCX1BZVEhPTl9QWV9PQkpf VFlQRV9ICisKKyNpbmNsdWRlICJweS1yZWYuaHBwIgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNs dWRlIDxzdHJpbmc+CisKKy8qIFJldHVybiB0aGUgdHlwZSdzIGZ1bGx5IHF1YWxpZmllZCBuYW1l IGZyb20gYSBQeVR5cGVPYmplY3QuICAqLworZXh0ZXJuIHN0ZDo6c3RyaW5nIGdkYl9weV90cF9u YW1lIChQeVR5cGVPYmplY3QgKnB5X3R5cGUpIG5vZXhjZXB0OworCisvKiBSZXR1cm4gdGhlIHR5 cGUncyBmdWxseSBxdWFsaWZpZWQgbmFtZSBmcm9tIGEgUHlPYmplY3QuICAqLworZXh0ZXJuIHN0 ZDo6c3RyaW5nIGdkYnB5X3B5X29ial90cF9uYW1lIChQeU9iamVjdCAqc2VsZikgbm9leGNlcHQ7 CisKK3VzaW5nIGdkYnB5X2JyZWZfcHl0eXBlID0gZ2RicHlfYm9ycm93ZWRfcmVmPFB5VHlwZU9i amVjdD47CisKK25hbWVzcGFjZSBnZGJweSB7CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBz dHJ1Y3QgaXNfcHlvYmplY3Rfd3JhcHBlcjogc3RkOjpmYWxzZV90eXBlIHt9OworCisgIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgaXNfcHlvYmplY3Rfd3JhcHBlcjxnZGJweV9yZWYg PFQ+Pjogc3RkOjp0cnVlX3R5cGUge307CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0 cnVjdCBpc19weW9iamVjdF93cmFwcGVyPGdkYnB5X2JvcnJvd2VkX3JlZiA8VD4+OiBzdGQ6OnRy dWVfdHlwZSB7fTsKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgY29uc3RleHByIGJvb2wg aXNfcHlvYmplY3Rfd3JhcHBlcl92ID0gaXNfcHlvYmplY3Rfd3JhcHBlcjxUPjo6dmFsdWU7Cit9 IC8vIG5hbWVzcGFjZSBnZGJweQorCit0ZW1wbGF0ZSA8Y2xhc3MgVHlwZVdyYXBwZXI+CitzdHJ1 Y3QgZ2RicHlfb2JqZWN0X3R5cGUKK3sKK3ByaXZhdGU6CisgIFB5VHlwZU9iamVjdCAqcHl0eXBl XyAoKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgcmV0dXJuICgoVHlwZVdyYXBwZXIgKikgdGhp cyktPnB5dHlwZSAoKTsKKyAgfQorCitwdWJsaWM6CisKKyAgb3BlcmF0b3IgUHlUeXBlT2JqZWN0 ICooKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgcmV0dXJuIHRoaXMtPnB5dHlwZV8gKCk7Cisg IH0KKworICBzdGQ6OnN0cmluZyB0cF9uYW1lICgpIGNvbnN0IG5vZXhjZXB0CisgIHsKKyAgICBy ZXR1cm4gZ2RiX3B5X3RwX25hbWUgKHRoaXMtPnB5dHlwZV8gKCkpOworICB9CisKKyAgYm9vbCBv cGVyYXRvcj09IChjb25zdCBUeXBlV3JhcHBlciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0CisgIHsK KyAgICByZXR1cm4gdGhpcy0+cHl0eXBlXyAoKSA9PSBvdGhlci5weXR5cGVfICgpOworICB9CisK KyAgYm9vbCBzYW1lX2FzIChQeVR5cGVPYmplY3QgKm9ianR5cGUpIGNvbnN0IG5vZXhjZXB0Cisg IHsKKyAgICByZXR1cm4gb2JqdHlwZSA9PSB0aGlzLT5weXR5cGVfICgpOworICB9CisKKyAgYm9v bCBzYW1lX2FzIChQeU9iamVjdCAqb2JqKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgLyogTm90 ZTogaWYgdGhlIHR5cGUgb2JqZWN0cyBhcmUgdGhlIHNhbWUsIHRoZWlyIGFkZHJlc3Mgc2hvdWxk IGJlCisgICAgICAgdGhlIHNhbWUgYmVjYXVzZSBHREIgbWFuYWdlcyBhbGwgdGhvc2UgdHlwZXMg YXMgc2luZ2xldG9ucy4gICovCisgICAgcmV0dXJuIChvYmogIT0gbnVsbHB0cgorCSAgICAmJiAo KFB5VHlwZV9DaGVjayAob2JqKSAhPSAwCisJCSAmJiB0aGlzLT5zYW1lX2FzIChyZWludGVycHJl dF9jYXN0IDxQeVR5cGVPYmplY3QgKj4gKG9iaikpKQorCQl8fCB0aGlzLT5zYW1lX2FzIChQeV9U WVBFIChvYmopKSkpCisJICAgfHwgdGhpcy0+cHl0eXBlXyAoKSA9PSBudWxscHRyOworICB9CisK KyAgYm9vbCBzYW1lX2FzIChzdGQ6Om51bGxwdHJfdCkgY29uc3Qgbm9leGNlcHQKKyAgeworICAg IHJldHVybiB0aGlzLT5weXR5cGVfICgpID09IG51bGxwdHI7CisgIH0KKworICBib29sIHNhbWVf YXMgKGNvbnN0IGdkYnB5X2JvcnJvd2VkX3JlZiA8UHlUeXBlT2JqZWN0PiAmd3JhcHBlcikgY29u c3Qgbm9leGNlcHQKKyAgeworICAgIHJldHVybiB0aGlzLT5weXR5cGVfICgpID09IHdyYXBwZXIu Z2V0ICgpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIGJvb2wgc2FtZV9hcyAo Y29uc3QgZ2RicHlfcmVmIDxUPiAmd3JhcHBlcikgY29uc3Qgbm9leGNlcHQKKyAgeworICAgIHJl dHVybiB0aGlzLT5zYW1lX2FzIChzdGF0aWNfY2FzdCA8UHlPYmplY3QgKj4gKHdyYXBwZXIuZ2V0 ICgpKSk7CisgIH0KKworICB2b2lkICpzbG90IChpbnQgc2xvdF9pZCkgY29uc3Qgbm9leGNlcHQK KyAgeworICAgIHJldHVybiBQeVR5cGVfR2V0U2xvdCAodGhpcy0+cHl0eXBlXyAoKSwgc2xvdF9p ZCk7CisgIH0KKworICBnZGJweV9ib3Jyb3dlZF9yZWYgPFB5VHlwZU9iamVjdD4gYmFzZV90eXBl ICgpIGNvbnN0IG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gZ2RicHlfYm9ycm93ZWRfcmVmIDxQ eVR5cGVPYmplY3Q+CisgICAgICAoKFB5VHlwZU9iamVjdCAqKSB0aGlzLT5zbG90IChQeV90cF9i YXNlKSk7CisgIH0KKworICBib29sIGhlYXBfdHlwZSAoKSBjb25zdCBub2V4Y2VwdAorICB7Cisg ICAgcmV0dXJuIFB5VHlwZV9HZXRGbGFncyAodGhpcy0+cHl0eXBlXyAoKSkgfCBQeV9UUEZMQUdT X0hFQVBUWVBFOworICB9Cit9OworCitzdHJ1Y3QgZ2RicHlfb2JqZWN0X3R5cGVfcmVmOgorICBw dWJsaWMgZ2RicHlfb2JqZWN0X3R5cGUgPGdkYnB5X29iamVjdF90eXBlX3JlZj4sCisgIHB1Ymxp YyBnZGJweV9yZWYgPD4KK3sKKyAgZ2RicHlfb2JqZWN0X3R5cGVfcmVmICgpIG5vZXhjZXB0ID0g ZGVmYXVsdDsKKyAgZ2RicHlfb2JqZWN0X3R5cGVfcmVmIChnZGJweV9vYmplY3RfdHlwZV9yZWYg JiZvdGhlcikgbm9leGNlcHQgPSBkZWZhdWx0OworICBnZGJweV9vYmplY3RfdHlwZV9yZWYmIG9w ZXJhdG9yPSAoZ2RicHlfb2JqZWN0X3R5cGVfcmVmICYmb3RoZXIpIG5vZXhjZXB0ID0gZGVmYXVs dDsKKworICBnZGJweV9vYmplY3RfdHlwZV9yZWYgKHN0ZDo6bnVsbHB0cl90KSBub2V4Y2VwdAor ICAgIDogZ2RicHlfcmVmPD4gKG51bGxwdHIpCisgIHsKKyAgfQorCisgIGdkYnB5X29iamVjdF90 eXBlX3JlZiAoZ2RicHlfcmVmIDw+ICYmb3RoZXIpIG5vZXhjZXB0CisgICAgOiBnZGJweV9yZWY8 PiAoc3RkOjptb3ZlKG90aGVyKSkKKyAgeworICAgIGdkYl9hc3NlcnQgKFB5VHlwZV9DaGVjayAo dGhpcy0+Z2V0ICgpKSAhPSAwKTsKKyAgfQorCisgIFB5VHlwZU9iamVjdCAqcHl0eXBlICgpIGNv bnN0IG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdCA8UHlUeXBlT2Jq ZWN0ICo+ICh0aGlzLT5nZXQgKCkpOworICB9Cit9OworCitzdHJ1Y3QgZ2RicHlfb2JqZWN0X3R5 cGVfYnJlZjoKKyAgcHVibGljIGdkYnB5X29iamVjdF90eXBlIDxnZGJweV9vYmplY3RfdHlwZV9i cmVmPiwKKyAgcHVibGljIGdkYnB5X2JvcnJvd2VkX3JlZiA8PgoreworICBnZGJweV9vYmplY3Rf dHlwZV9icmVmICgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgZ2RicHlfb2JqZWN0X3R5cGVfYnJl ZiAoY29uc3QgZ2RicHlfb2JqZWN0X3R5cGVfYnJlZiAmb3RoZXIpIG5vZXhjZXB0ID0gZGVmYXVs dDsKKyAgZ2RicHlfb2JqZWN0X3R5cGVfYnJlZiYgb3BlcmF0b3I9IChjb25zdCBnZGJweV9vYmpl Y3RfdHlwZV9icmVmICZvdGhlcikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIGdkYnB5X29iamVj dF90eXBlX2JyZWYgKGNvbnN0IGdkYnB5X29iamVjdF90eXBlX3JlZiYgb3RoZXIpIG5vZXhjZXB0 CisgICAgOiBnZGJweV9ib3Jyb3dlZF9yZWY8PiAob3RoZXIuZ2V0ICgpKQorICB7CisgIH0KKwor ICBnZGJweV9vYmplY3RfdHlwZV9icmVmIChzdGQ6Om51bGxwdHJfdCkgbm9leGNlcHQKKyAgICA6 IGdkYnB5X2JvcnJvd2VkX3JlZjw+IChudWxscHRyKQorICB7CisgIH0KKworICBQeVR5cGVPYmpl Y3QgKnB5dHlwZSAoKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgaWYgKHRoaXMtPmdldCAoKSA9 PSBudWxscHRyKQorICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0 X2Nhc3QgPFB5VHlwZU9iamVjdCAqPiAodGhpcy0+Z2V0ICgpKTsKKyAgfQorfTsKKworc3RydWN0 IGdkYnB5X3B5X29ial90eXBlX2JyZWY6CisgIHB1YmxpYyBnZGJweV9vYmplY3RfdHlwZSA8Z2Ri cHlfcHlfb2JqX3R5cGVfYnJlZj4sCisgIHB1YmxpYyBnZGJweV9ib3Jyb3dlZF9yZWYgPFB5VHlw ZU9iamVjdD4KK3sKKyAgZ2RicHlfcHlfb2JqX3R5cGVfYnJlZiAoKSBub2V4Y2VwdCA9IGRlZmF1 bHQ7CisgIGdkYnB5X3B5X29ial90eXBlX2JyZWYgKGNvbnN0IGdkYnB5X3B5X29ial90eXBlX2Jy ZWYgJm90aGVyKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGdkYnB5X3B5X29ial90eXBlX2JyZWYm IG9wZXJhdG9yPSAoZ2RicHlfcHlfb2JqX3R5cGVfYnJlZiAmJm90aGVyKSBub2V4Y2VwdCA9IGRl ZmF1bHQ7CisKKyAgZ2RicHlfcHlfb2JqX3R5cGVfYnJlZiAoY29uc3QgZ2RicHlfYm9ycm93ZWRf cmVmIDxQeVR5cGVPYmplY3Q+ICZweXR5cGUpIG5vZXhjZXB0CisgICAgOiBnZGJweV9ib3Jyb3dl ZF9yZWY8UHlUeXBlT2JqZWN0PiAocHl0eXBlKQorICB7CisgIH0KKworICBnZGJweV9weV9vYmpf dHlwZV9icmVmIChQeVR5cGVPYmplY3QgKnB5dHlwZSkgbm9leGNlcHQKKyAgICA6IGdkYnB5X2Jv cnJvd2VkX3JlZjxQeVR5cGVPYmplY3Q+IChweXR5cGUpCisgIHsKKyAgfQorCisgIFB5VHlwZU9i amVjdCAqcHl0eXBlICgpIGNvbnN0IG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gdGhpcy0+Z2V0 ICgpOworICB9Cit9OworCisvKiBXcmFwcGVyIGFyb3VuZCBQeU9iamVjdF9UeXBlQ2hlY2soKS4K KyAgIE5vdGU6IHRoaXMgd3JhcHBlciB3aWxsIGJlIGRlY29tbWlzc2lvbmVkIG9uY2UgYWxsIHRo ZSBQeXRob24gZXh0ZW5zaW9uCisgICB0eXBlcyB3aWxsIGhhdmUgYmVlbiBtaWdyYXRlZCB0byB0 aGUgUHl0aG9uIGxpbWl0ZWQgQVBJLiAgKi8KK2lubGluZSBib29sCitnZGJweV90eXBlX2NoZWNr IChQeU9iamVjdCAqb2JqLCBjb25zdCBQeVR5cGVPYmplY3QgJm9ial90eXBlKQoreworICByZXR1 cm4gUHlPYmplY3RfVHlwZUNoZWNrIChvYmosIGNvbnN0X2Nhc3Q8UHlUeXBlT2JqZWN0ICo+ICgm b2JqX3R5cGUpKTsKK30KKworLyogV3JhcHBlciBhcm91bmQgUHlPYmplY3RfVHlwZUNoZWNrKCkg dG8gY29tcGFyZSBhZ2FpbnN0IGFueSB3cmFwcGVyCisgICBjb252ZXJ0aWJsZSB0byAnUHlUeXBl T2JqZWN0IConLiAgKi8KK3RlbXBsYXRlIDxjbGFzcyBPVHlwZSwKKwkgIHR5cGVuYW1lID0gc3Rk Ojppc19jb252ZXJ0aWJsZTxPVHlwZSwgUHlUeXBlT2JqZWN0ICo+PgoraW5saW5lIGJvb2wKK2dk YnB5X3R5cGVfY2hlY2sgKFB5T2JqZWN0ICpvYmosIGNvbnN0IE9UeXBlICZvYmpfdHlwZSkKK3sK KyAgcmV0dXJuIFB5T2JqZWN0X1R5cGVDaGVjayAob2JqLCBvYmpfdHlwZS5weXR5cGUgKCkpOwor fQorCisvKiBXcmFwcGVyIGFyb3VuZCBQeU9iamVjdF9UeXBlQ2hlY2soKSBzaW1pbGFyIHRvIHRo ZSBwcmV2aW91cyBvbmUsIGJ1dAorICAgYWNjZXB0aW5nICdnZGJweV9yZWY8VD4nIGFuZCAnZ2Ri cHlfYm9ycm93ZWRfcmVmJyBpbnN0ZWFkIG9mIHJhdworICAgJ1B5T2JqZWN0IConLiAgKi8KK3Rl bXBsYXRlIDxjbGFzcyBXcmFwcGVyLAorCSAgY2xhc3MgT1R5cGUsCisJICB0eXBlbmFtZSA9IGdk YnB5Ojppc19weW9iamVjdF93cmFwcGVyPFdyYXBwZXI+LAorCSAgdHlwZW5hbWUgPSBzdGQ6Omlz X2NvbnZlcnRpYmxlPE9UeXBlLCBQeVR5cGVPYmplY3QgKj4+CitpbmxpbmUgYm9vbAorZ2RicHlf dHlwZV9jaGVjayAoY29uc3QgV3JhcHBlciAmb2JqLCBjb25zdCBPVHlwZSAmb2JqX3R5cGUpCit7 CisgIHJldHVybiBQeU9iamVjdF9UeXBlQ2hlY2sgKG9iai5nZXQgKCksIG9ial90eXBlLnB5dHlw ZSAoKSk7Cit9CisKK3N0cnVjdCBnZGJweV9oZWFwX3R5cGUKK3sKKyAgdXNpbmcgdHBfdHJhdmVy c2VfdCA9IGludCAoKikgKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFy Zyk7CisgIHVzaW5nIHRwX2NsZWFyX3QgPSB2b2lkICgqKSAoUHlPYmplY3QgKnNlbGYpOworCisg IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbG9uZworICB0cF9mbGFnc19kZWZhdWx0ICgpCisg IHsgcmV0dXJuIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQzsgfQorCisg IHN0YXRpYyBpbnQKKyAgdHBfdHJhdmVyc2UgKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2Mgdmlz aXQsIHZvaWQgKmFyZywKKwkgICAgICAgY29uc3QgZ2RicHlfb2JqZWN0X3R5cGVfYnJlZiAmYmFz ZV90eXBlLAorCSAgICAgICB0cF90cmF2ZXJzZV90IHRwX3RyYXZlcnNlX2ltcGwpCisgIHsKKyAg ICBpbnQgcmVzID0gMDsKKworICAgIC8qIFRyYXZlcnNlIHRoZSBvYmplY3QncyBhdHRyaWJ1dGVz LiAgKi8KKyAgICBpZiAodHBfdHJhdmVyc2VfaW1wbCAhPSBudWxscHRyKQorICAgICAgeworCWlm ICgocmVzID0gdHBfdHJhdmVyc2VfaW1wbCAoc2VsZiwgdmlzaXQsIGFyZykpICE9IDApCisJICBy ZXR1cm4gcmVzOworICAgICAgfQorCisgICAgLyogRG9uJ3QgZm9yZ2V0IHRvIGNhbGwgdHBfdHJh dmVyc2Ugb2YgdGhlIGJhc2UgY2xhc3MuICAqLworICAgIGlmIChiYXNlX3R5cGUgIT0gbnVsbHB0 cikKKyAgICAgIHsKKwlhdXRvIGJhc2VfdHBfdHJhdmVyc2UKKwkgID0gKGdkYnB5X2hlYXBfdHlw ZTo6dHBfdHJhdmVyc2VfdCkgYmFzZV90eXBlLnNsb3QgKFB5X3RwX3RyYXZlcnNlKTsKKwlpZiAo KHJlcyA9IGJhc2VfdHBfdHJhdmVyc2UgKHNlbGYsIHZpc2l0LCBhcmcpKSAhPSAwKQorCSAgcmV0 dXJuIHJlczsKKyAgICAgIH0KKworICAgIC8qIEZyb20gUHl0aG9uIDMuOSwgdHBfdHJhdmVyc2Ug bXVzdCB2aXNpdCB0aGUgdHlwZSBmb3IgaGVhcC1hbGxvY2F0ZWQKKyAgICAgICB0eXBlcy4gIE9s ZGVyIHZlcnNpb25zIG11c3Qgbm90IHZpc2l0IGl0LgorICAgICAgIE5vdGUgdGhhdCwgaW4gY2Fz ZSBvZiBpbmhlcml0YW5jZSwgdGhlIHR5cGUgc2hvdWxkIGJlIHZpc2l0ZWQgb25seQorICAgICAg IG9uY2UuICAqLworI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwOTAwMDAKKyAgICBpZiAoYmFz ZV90eXBlID09IG51bGxwdHIpCisgICAgICB7CisJcHJpbnRmICgiY2FsbGluZyBQeV9WSVNJVCAo UHlfVFlQRSAoc2VsZikpXG4iKTsKKwlQeV9WSVNJVCAoUHlfVFlQRSAoc2VsZikpOworICAgICAg fQorI2VuZGlmCisKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgc3RhdGljIHZvaWQKKyAgdHBf Y2xlYXIgKFB5T2JqZWN0ICpzZWxmLAorCSAgICBjb25zdCBnZGJweV9vYmplY3RfdHlwZV9icmVm ICZiYXNlX3R5cGUsCisJICAgIHRwX2NsZWFyX3QgdHBfY2xlYXJfaW1wbCkKKyAgeworICAgIC8q IENsZWFyIGFueSBmaWVsZHMgc3BlY2lmaWMgdG8gdGhlIHR5cGUuICAqLworICAgIGlmICh0cF9j bGVhcl9pbXBsICE9IG51bGxwdHIpCisgICAgICB0cF9jbGVhcl9pbXBsIChzZWxmKTsKKworICAg IC8qIERvbid0IGZvcmdldCB0byBjYWxsIHRwX2NsZWFyIG9mIHRoZSBiYXNlIGNsYXNzLiAgKi8K KyAgICBpZiAoYmFzZV90eXBlICE9IG51bGxwdHIpCisgICAgICB7CisJYXV0byBiYXNlX3RwX2Ns ZWFyCisJICA9IChnZGJweV9oZWFwX3R5cGU6OnRwX2NsZWFyX3QpIGJhc2VfdHlwZS5zbG90IChQ eV90cF9jbGVhcik7CisJYmFzZV90cF9jbGVhciAoc2VsZik7CisgICAgICB9CisgIH0KKworICBz dGF0aWMgdm9pZAorICB0cF9kZWFsbG9jIChQeU9iamVjdCAqc2VsZikKKyAgeworICAgIGF1dG8g KnRwID0gUHlfVFlQRSAoc2VsZik7CisKKyAgICAvKiBDYWxsIFB5T2JqZWN0X0dDX1VuVHJhY2so KSBiZWZvcmUgYW55IGZpZWxkcyBhcmUgaW52YWxpZGF0ZWQuICAqLworICAgIFB5T2JqZWN0X0dD X1VuVHJhY2sgKHNlbGYpOworCisgICAgLyogQ2xlYXIgdGhlIG9iamVjdCdzIGF0dHJpYnV0ZXMu ICAqLworICAgIGF1dG8gc2VsZl90cF9jbGVhciA9ICh0cF9jbGVhcl90KSBQeVR5cGVfR2V0U2xv dCAodHAsIFB5X3RwX2NsZWFyKTsKKyAgICBpZiAoc2VsZl90cF9jbGVhcikKKyAgICAgIHNlbGZf dHBfY2xlYXIgKHNlbGYpOworCisgICAgLyogRGVsZXRlIHRoZSBvYmplY3QuICAqLworICAgIFB5 T2JqZWN0X0dDX0RlbCAoc2VsZik7CisKKyAgICAvKiBEZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBj b3VudCBvZiB0aGUgdHlwZS4gICovCisgICAgcHJpbnRmICgiZGVjcmVtZW50IHJlZiBjb3VudCBv biBQeV9UWVBFIChzZWxmKVxuIik7CisgICAgUHlfREVDUkVGICh0cCk7CisgIH0KKworICAvKiBB IGNvbnZlbmllbnQgd3JhcHBlciBlbmZvcmNpbmcgdGhlIGNhbGwgdG8gUHlPYmplY3RfR0NfVHJh Y2soKSBvbiBhIG5ld2x5CisgICAgIGFsbG9jYXRlZCBQeXRob24gb2JqZWN0IGJlZm9yZSBpdCBn b2VzIG91dCBvZiBzY29wZS4gIElmIGEgZGV2ZWxvcGVyCisgICAgIGZvcmdldHMgdG8gY2FsbCB0 cmFjaygpLCB0aGUgZGVzdHJ1Y3RvciByYWlzZXMgYSBydW50aW1lIGFzc2VydGlvbiBpbiB0aGUK KyAgICAgZGVzdHJ1Y3Rvci4gICovCisgIHRlbXBsYXRlIDxjbGFzcyBUPgorICBzdHJ1Y3QgYXV0 b19nY190cmFjaworICAgIDogcHJpdmF0ZSBnZGJweV9yZWY8VD4KKyAgeworICAgIGF1dG9fZ2Nf dHJhY2sgKFQgKm9iaikKKyAgICAgIDogZ2RicHlfcmVmPFQ+IChvYmopCisgICAge30KKworICAg IGF1dG9fZ2NfdHJhY2sgKGF1dG9fZ2NfdHJhY2sgJiZvdGhlcikKKyAgICAgIDogZ2RicHlfcmVm PFQ+IChzdGQ6Om1vdmUgKG90aGVyKSkKKyAgICB7fQorCisgICAgYXV0b19nY190cmFjayAmb3Bl cmF0b3I9IChhdXRvX2djX3RyYWNrICYmb3RoZXIpCisgICAgeworICAgICAgaWYgKHRoaXMgIT0g b3RoZXIpCisJZ2RicHlfcmVmPFQ+OjpvcGVyYXRvcj0gKHN0ZDo6bW92ZSAob3RoZXIpKTsKKyAg ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBnZGJweV9ib3Jyb3dlZF9yZWY8VD4gYm9y cm93ZWRfcmVmICgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgcmV0dXJuIGdkYnB5X3Jl ZjxUPjo6Z2V0ICgpOworICAgIH0KKworICAgIGdkYnB5X3JlZjxUPiBzdHJvbmdfcmVmICgpIGNv bnN0IG5vZXhjZXB0CisgICAgeworICAgICAgcmV0dXJuIGdkYnB5X3JlZjxUPigqdGhpcyk7Cisg ICAgfQorCisgICAgLyogU3RhcnQgdHJhY2tpbmcgb2YgdGhlIG5ld2x5IGFsbG9jYXRlZCBvYmpl Y3Qgd2l0aCB0aGUgR0MuCisgICAgICAgUmV0dXJuIGdkYnB5X3JlZjxUPiBhcyB0aGUgZmluYWxp emVkIG9iamVjdC4gICovCisgICAgZ2RicHlfcmVmPFQ+IHRyYWNrICgpCisgICAgeworICAgICAg UHlPYmplY3RfR0NfVHJhY2sgKHRoaXMtPmdldCAoKSk7CisgICAgICByZXR1cm4gc3RkOjptb3Zl ICgqdGhpcyk7CisgICAgfQorCisgICAgLyogQmFpbCBvdXQsIGkuZS4gZnJlZSB0aGUgbmV3bHkg YWxsb2NhdGVkIG9iamVjdCBhbmQgcmV0dXJuIE5VTEwuICAqLworICAgIHN0ZDo6bnVsbHB0cl90 IGJhaWxvdXQgKCkKKyAgICB7CisgICAgICBhdXRvIG9iaiA9IHRoaXMtPnRyYWNrICgpOworICAg ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaW5saW5lIGV4cGxpY2l0IG9wZXJhdG9y IGJvb2wgKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAgICByZXR1cm4gZ2RicHlfcmVmPFQ+ OjpnZXQgKCkgIT0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09 IChjb25zdCBzdGQ6Om51bGxwdHJfdCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAgICByZXR1 cm4gZ2RicHlfcmVmPFQ+OjpnZXQgKCkgPT0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBUICpvcGVy YXRvci0+ICgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgcmV0dXJuIGdkYnB5X3JlZjxU Pjo6Z2V0ICgpOworICAgIH0KKworICAgIH5hdXRvX2djX3RyYWNrICgpCisgICAgeworICAgICAg LyogVGhlIG9iamVjdCBzaG91bGQgaGF2ZSBiZWVuIHRyYWNrZWQgYnkgdGhlIEdDLCBhbmQgcmVs ZWFzZWQgYmVmb3JlCisJIHRoaXMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQuICAqLworICAgICAgZ2Ri X2Fzc2VydCAoZ2RicHlfcmVmPFQ+OjpnZXQgKCkgPT0gbnVsbHB0cik7CisgICAgfQorICB9Owor CisgIC8qIENvbnZlbmllbnQgd3JhcHBlciB0byBQeU9iamVjdF9HQ19OZXcoKSByZXR1cm5pbmcg YW4gYXV0b19nY190cmFjazxUPgorICAgICBvYmplY3QsIHVzZWQgdG8gZW5mb3JjZSB0aGUgY2Fs bCB0byBQeU9iamVjdF9HQ19UcmFjaygpIG9uIHRoZSBuZXdseQorICAgICBhbGxvY2F0ZWQgUHl0 aG9uIG9iamVjdCBiZWZvcmUgYXV0b19nY190cmFjazxUPiBnb2VzIG91dCBvZiBzY29wZS4gICov CisgIHRlbXBsYXRlIDxjbGFzcyBUPgorICBzdGF0aWMgYXV0b19nY190cmFjazxUPgorICBtYWtl X3B5b2JqIChjb25zdCBnZGJweV9vYmplY3RfdHlwZV9icmVmICZvYmpfdHlwZSkKKyAgeworICAg IGF1dG9fZ2NfdHJhY2s8VD4gb2JqCisgICAgICAoc3RhdGljX2Nhc3Q8VCAqPiAoUHlPYmplY3Rf R0NfTmV3IChULCBvYmpfdHlwZS5weXR5cGUgKCkpKSk7CisgICAgcmV0dXJuIG9iajsKKyAgfQor fTsKKworLyogSGVscGVyIG1hY3JvIHRvIGluaXRpYWxpemUgbWFuZGF0b3J5IHNsb3QgSURzIChp LmUuIFB5X3RwX3RyYXZlcnNlLAorICAgUHlfdHBfY2xlYXIsIGFuZCBQeV90cF9kZWFsbG9jKSBm b3IgZ2FyYmFnZS1jb2xsZWN0ZWQgdHlwZXMsIHVzaW5nCisgICBkZWZhdWx0IG1ldGhvZHMuCisg ICBOb3RlOiB0aG9zZSBkZWZhdWx0cyBhcmUgaWRlYWwgZm9yIGNsYXNzZXMgY29udGFpbmluZyBu byBzdHJvbmcKKyAgIHJlZmVyZW5jZXMgb2YgUHl0aG9uIG9iamVjdHMgaW4gdGhlaXIgYXR0cmli dXRlcy4gICovCisKKy8qIEhlbHBlciBtYWNybyB0byBpbml0aWFsaXplIG1hbmRhdG9yeSBzbG90 IElEcyAoaS5lLiBQeV90cF90cmF2ZXJzZSwKKyAgIFB5X3RwX2NsZWFyLCBhbmQgUHlfdHBfZGVh bGxvYykgZm9yIGdhcmJhZ2UtY29sbGVjdGVkIHR5cGVzLCBwcm92aWRpbmcKKyAgIGN1c3RvbSBt ZXRob2RzIGZvciB0cF90cmF2ZXJzZSBhbmQgdHBfY2xlYXIuICAqLworI2RlZmluZSBnZGJweV9o ZWFwX3R5cGVfbWV0aG9kcyhmbl90cmF2ZXJzZSwgZm5fY2xlYXIpCVwKKyAge1B5X3RwX3RyYXZl cnNlLCAodm9pZCAqKSBmbl90cmF2ZXJzZX0sCQlcCisgIHtQeV90cF9jbGVhciwgICAgKHZvaWQg KikgZm5fY2xlYXJ9LAkJCVwKKyAge1B5X3RwX2RlYWxsb2MsICAodm9pZCAqKSBnZGJweV9oZWFw X3R5cGU6OnRwX2RlYWxsb2N9CisKKy8qIEhlbHBlciBtYWNybyBkZWNsYXJpbmcgJ3Zhcm5hbWUn LCBjcmVhdGluZyBhIG5ldyBoZWFwLWFsbG9jYXRlZCBvYmplY3Qgb2YKKyAgIHN0YXRpYyB0eXBl IE9CSlRZUEUsIGluaXRpYWxpemluZyBpdCBmb2xsb3dpbmcgc3BlY3MgZGVjbGFyZWQgaW4gcHlf b2JqdHlwZQorICAgKHRoZSBkeW5hbWljYWxseS1hbGxvY2F0ZWQgdHlwZSBjb3JyZXNwb25kaW5n IHRvIE9CSlRZUEUpLCBhbmQgdmFsaWRhdGluZworICAgaXRzIGNyZWF0aW9uIG9yIGJhaWxpbmcg b3V0LiAgKi8KKyNkZWZpbmUgZ2RicHlfaGVhcF90eXBlX2FsbG9jYXRlX29yX2JhaWxvdXQodmFy bmFtZSwgT0JKVFlQRSwgcHlfb2JqdHlwZSlcCisgIGF1dG8gdmFybmFtZSA9IGdkYnB5X2hlYXBf dHlwZTo6bWFrZV9weW9iajxPQkpUWVBFPiAocHlfb2JqdHlwZSk7CVwKKyAgaWYgKHZhcm5hbWUg PT0gbnVsbHB0cikJCQkJCQlcCisgICAgcmV0dXJuIG51bGxwdHIKKworI2VuZGlmIC8qIEdEQl9Q WVRIT05fUFlfT0JKX1RZUEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9weS1yZWYuaHBwIGIv aW5jbHVkZS9weS1yZWYuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4 ZWEzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3B5LXJlZi5ocHAKQEAgLTAsMCArMSwy MDQgQEAKKy8qIFB5dGhvbiByZWZlcmVuY2UtaG9sZGluZyBjbGFzcworCisgICBDb3B5cmlnaHQg KEMpIDIwMTYtMjAyNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisj aWZuZGVmIEdEQl9QWVRIT05fUFlfUkVGX0gKKyNkZWZpbmUgR0RCX1BZVEhPTl9QWV9SRUZfSAor CisjaW5jbHVkZSAiZ2RiX3JlZl9wdHIuaHBwIgorI2luY2x1ZGUgPFB5dGhvbi5oPgorI2luY2x1 ZGUgInB5dGhvbi10cmFpdHMuaHBwIgorCisvKiBBIHBvbGljeSBjbGFzcyBmb3IgZ2RiOjpyZWZf cHRyIGZvciBQeXRob24gcmVmZXJlbmNlIGNvdW50aW5nLiAgKi8KK3N0cnVjdCBnZGJweV9yZWZf cG9saWN5Cit7CisgIHN0YXRpYyB2b2lkIGluY3JlZiAoUHlPYmplY3QgKnB0cikKKyAgeworICAg IFB5X0lOQ1JFRiAocHRyKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIGRlY3JlZiAoUHlPYmplY3Qg KnB0cikKKyAgeworICAgIFB5X0RFQ1JFRiAocHRyKTsKKyAgfQorCisgIHVzaW5nIHZpc2l0cHJv YyA9IGludCAoKikoUHlPYmplY3QgKm9iamVjdCwgdm9pZCAqYXJnKTsKKworICBzdGF0aWMgaW50 IHZpc2l0IChQeU9iamVjdCAqcHRyLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykgbm9leGNl cHQKKyAgeworICAgIFB5X1ZJU0lUIChwdHIpOworICAgIHJldHVybiAwOworICB9CisKKyAgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0YXRpYyB2b2lkIGNsZWFyIChUICoqcHRyKSBub2V4Y2Vw dAorICB7CisgICAgUHlfQ0xFQVIgKCpwdHIpOworICB9Cit9OworCisvKiBIZWxwZXIgbWFjcm8g dG8gYWxsb2NhdGUgYW5kIGJ1aWxkIGEgbmV3IGdkYnB5X3JlZjxUPiBmcm9tIGEgcG9pbnRlcgor ICAgd2hpbGUgaW5jcmVtZW50aW5nIHRoZSByZWYgY291bnRlci4gICovCisjZGVmaW5lIGdkYnB5 X3JlZl9ORVdSRUYoVCwgcHRyX29iaikgXAorICBuZXcgZ2RicHlfcmVmPFQ+IChnZGJweV9yZWY8 VD46Om5ld19yZWZlcmVuY2UgKHB0cl9vYmopKQorCisvKiBDb3VzaW4gbWFjcm8gb2YgUHlfVklT SVQgc3BlY2lhbGl6ZWQgZm9yIGdkYnB5X3JlZjxUPi4KKyAgIE5vdGU6IHRoaXMgbWFjcm8gaGFz IHRvIGJlIHVzZWQgaW5zaWRlIHRoZSBjdXN0b20gdHBfdHJhdmVyc2UgZnVuY3Rpb24gZm9yCisg ICB0eXBlIFQgc28gdGhhdCBpdHMgcGFyYW1ldGVycyB2aXNpdCBhbmQgYXJnIGFyZSBrbm93bi4g ICovCisjZGVmaW5lIGdkYnB5X3JlZl9WSVNJVChwdHJfZ2RicHlfcmVmKQkJCVwKKyAgZG8JCQkJ CQkJXAorICAgIHsJCQkJCQkJXAorICAgICAgaWYgKHB0cl9nZGJweV9yZWYpCQkJCVwKKwl7CQkJ CQkJXAorCSAgaW50IHJldAkJCQkJXAorCSAgICA9IChwdHJfZ2RicHlfcmVmKS0+dmlzaXQgKHZp c2l0LCBhcmcpOwlcCisJICBpZiAocmV0KQkJCQkJXAorCSAgICByZXR1cm4gcmV0OwkJCQkJXAor CX0JCQkJCQlcCisgICAgfQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisvKiBDb3VzaW4gbWFjcm8g b2YgUHlfQ0xFQVIgc3BlY2lhbGl6ZWQgZm9yIGdkYnB5X3JlZjxUPi4gICovCisjZGVmaW5lIGdk YnB5X3JlZl9DTEVBUihvYmopCVwKKyAgZG8JCQkJXAorICAgIHsJCQkJXAorICAgICAgaWYgKG9i aikJCQlcCisJewkJCVwKKwkgIChvYmopLT5jbGVhciAoKTsJXAorCSAgZGVsZXRlIChvYmopOwkJ XAorCSAgKG9iaikgPSBudWxscHRyOwlcCisJfQkJCVwKKyAgICB9CQkJCVwKKyAgd2hpbGUgKDAp CisKKy8qIEEgZ2RiOjpyZWZfcHRyIHRoYXQgaGFzIGJlZW4gc3BlY2lhbGl6ZWQgZm9yIFB5dGhv biBvYmplY3RzIG9yCisgICB0aGVpciAic3ViY2xhc3NlcyIuICAqLwordGVtcGxhdGU8dHlwZW5h bWUgVCA9IFB5T2JqZWN0PiB1c2luZyBnZGJweV9yZWYKKyAgPSBnZGI6OnJlZl9wdHI8VCwgZ2Ri cHlfcmVmX3BvbGljeT47CisKKy8qIEEgY2xhc3MgcmVwcmVzZW50aW5nIGEgYm9ycm93ZWQgcmVm ZXJlbmNlLgorCisgICBUaGlzIGlzIGEgc2ltcGxlIHdyYXBwZXIgZm9yIGEgUHlPYmplY3QqLiAg QXNpZGUgZnJvbSBkb2N1bWVudGluZworICAgd2hhdCB0aGUgY29kZSBkb2VzLCB0aGUgbWFpbiBh ZHZhbnRhZ2Ugb2YgdXNpbmcgdGhpcyBpcyB0aGF0CisgICBjb252ZXJzaW9uIHRvIGEgZ2RicHlf cmVmPD4gaXMgZ3VhcmFudGVlZCB0byBtYWtlIGEgbmV3CisgICByZWZlcmVuY2UuICAqLwordGVt cGxhdGUgPGNsYXNzIFQgPSBQeU9iamVjdD4KK2NsYXNzIGdkYnB5X2JvcnJvd2VkX3JlZgorewor cHVibGljOgorCisgIGdkYnB5X2JvcnJvd2VkX3JlZiAoKSBub2V4Y2VwdAorICAgIDogbV9vYmog KG51bGxwdHIpCisgIHsKKyAgfQorCisgIGdkYnB5X2JvcnJvd2VkX3JlZiAoY29uc3Qgc3RkOjpu dWxscHRyX3QpIG5vZXhjZXB0CisgICAgOiBtX29iaiAobnVsbHB0cikKKyAgeworICB9CisKKyAg dGVtcGxhdGUgPHR5cGVuYW1lIFUsCisJICAgIHR5cGVuYW1lID0gc3RkOjppc19jb252ZXJ0aWJs ZTxVICosIFQqPj4KKyAgZ2RicHlfYm9ycm93ZWRfcmVmIChVICpvYmopIG5vZXhjZXB0CisgICAg OiBtX29iaiAob2JqKQorICB7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwKKwkgICAg dHlwZW5hbWUgPSBzdGQ6OmlzX2NvbnZlcnRpYmxlPFUgKiwgVCo+PgorICBnZGJweV9ib3Jyb3dl ZF9yZWYgKGNvbnN0IGdkYnB5X3JlZjxVPiAmcmVmKSBub2V4Y2VwdAorICAgIDogbV9vYmogKHJl Zi5nZXQgKCkpCisgIHsKKyAgfQorCisgIGdkYnB5X2JvcnJvd2VkX3JlZiAoY29uc3QgZ2RicHlf Ym9ycm93ZWRfcmVmICZvdGhlcikgbm9leGNlcHQKKyAgICA6IG1fb2JqIChvdGhlci5tX29iaikK KyAgeworICB9CisKKyAgZ2RicHlfYm9ycm93ZWRfcmVmICZvcGVyYXRvcj0gKGNvbnN0IGdkYnB5 X2JvcnJvd2VkX3JlZiAmb3RoZXIpCisgIHsKKyAgICBtX29iaiA9IG90aGVyLm1fb2JqOworICAg IHJldHVybiAqdGhpczsKKyAgfQorCisgIG9wZXJhdG9yIGJvb2wgKCkgY29uc3Qgbm9leGNlcHQK KyAgeworICAgIHJldHVybiBtX29iaiAhPSBudWxscHRyOworICB9CisKKyAgb3BlcmF0b3IgVCAq ICgpIGNvbnN0IG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbV9vYmo7CisgIH0KKworICAvKiBX aGVuIGNvbnZlcnRpbmcgYSBib3Jyb3dlZCByZWZlcmVuY2UgdG8gYSBnZGJweV9yZWY8PiwgYSBu ZXcKKyAgICAgcmVmZXJlbmNlIGlzIGFjcXVpcmVkLiAgKi8KKyAgdGVtcGxhdGUgPHR5cGVuYW1l IFRPYmosCisJICAgIHR5cGVuYW1lID0gc3RkOjppc19jb252ZXJ0aWJsZTxUT2JqICosIFQgKj4+ CisgIG9wZXJhdG9yIGdkYnB5X3JlZjxUT2JqPiAoKQorICB7CisgICAgZ2RiX2Fzc2VydCAobV9v YmogIT0gbnVsbHB0cik7CisgICAgcmV0dXJuIGdkYnB5X3JlZjxUT2JqPjo6bmV3X3JlZmVyZW5j ZSAobV9vYmopOworICB9CisKKyAgZ2RicHlfcmVmPFQ+IHN0cm9uZ19yZWYgKCkgY29uc3Qgbm9l eGNlcHQKKyAgeworICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZGJweV9yZWY8VD4+ICgqdGhpcyk7 CisgIH0KKworICAvKiBMZXQgdXNlcnMgcmVmZXIgdG8gbWVtYmVycyBvZiB0aGUgdW5kZXJseWlu ZyBwb2ludGVyLiAgKi8KKyAgVCAqb3BlcmF0b3ItPiAoKSBjb25zdCBub2V4Y2VwdAorICB7Cisg ICAgcmV0dXJuIG1fb2JqOworICB9CisKKyAgVCAqZ2V0ICgpIGNvbnN0IG5vZXhjZXB0CisgIHsK KyAgICByZXR1cm4gbV9vYmo7CisgIH0KKworcHJpdmF0ZToKKyAgVCAqbV9vYmo7Cit9OworCit0 ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgZ2RicHlf Ym9ycm93ZWRfcmVmPFQ+ICZsaHMsIGNvbnN0IHN0ZDo6bnVsbHB0cl90KQoreworICByZXR1cm4g bGhzLmdldCAoKSA9PSBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5l IGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgZ2RicHlfYm9ycm93ZWRfcmVmPFQ+ICZsaHMsIGNvbnN0 IHN0ZDo6bnVsbHB0cl90KQoreworICByZXR1cm4gbGhzLmdldCAoKSAhPSBudWxscHRyOworfQor Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PSAoY29uc3Qgc3Rk OjpudWxscHRyX3QsIGNvbnN0IGdkYnB5X2JvcnJvd2VkX3JlZjxUPiAmcmhzKQoreworICByZXR1 cm4gbnVsbHB0ciA9PSByaHMuZ2V0ICgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5s aW5lIGJvb2wgb3BlcmF0b3IhPSAoY29uc3Qgc3RkOjpudWxscHRyX3QsIGNvbnN0IGdkYnB5X2Jv cnJvd2VkX3JlZjxUPiAmcmhzKQoreworICByZXR1cm4gbnVsbHB0ciAhPSByaHMuZ2V0ICgpOwor fQorCisjZW5kaWYgLyogR0RCX1BZVEhPTl9QWV9SRUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9weXRob24taW50ZXJuYWwuaHBwIGIvaW5jbHVkZS9weXRob24taW50ZXJuYWwuaHBwCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MWFkNDcKLS0tIC9kZXYvbnVsbAorKysg Yi9pbmNsdWRlL3B5dGhvbi1pbnRlcm5hbC5ocHAKQEAgLTAsMCArMSwxNCBAQAorI3ByYWdtYSBv bmNlCisKKyNpbmNsdWRlIDxQeXRob24uaD4KKworI2luY2x1ZGUgImdkYi1vdGhlcnMuaHBwIgor I2luY2x1ZGUgInB5LXJlZi5ocHAiCisjaW5jbHVkZSAicHktb2JqLWRpY3QuaHBwIgorI2luY2x1 ZGUgInB5LW9iai10eXBlLmhwcCIKKworZXh0ZXJuIGdkYnB5X29iamVjdF90eXBlX3JlZgorZ2Ri cHlfdHlwZV9pbml0aWFsaXplIChnZGJweV9ib3Jyb3dlZF9yZWY8PiAmbW9kLAorCQkgICAgICAg UHlUeXBlX1NwZWMgKnNwZWMsCisJCSAgICAgICBQeU9iamVjdCAqYmFzZXMgPSBudWxscHRyLAor CQkgICAgICAgYm9vbCBkaXNhbGxvd19pbnN0YW50aWF0aW9uID0gZmFsc2UpOwpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9weXRob24tdHJhaXRzLmhwcCBiL2luY2x1ZGUvcHl0aG9uLXRyYWl0cy5ocHAK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkMzA1MwotLS0gL2Rldi9udWxs CisrKyBiL2luY2x1ZGUvcHl0aG9uLXRyYWl0cy5ocHAKQEAgLTAsMCArMSw5MyBAQAorLyogVHlw ZSB0cmFpdHMgcmVsYXRpbmcgdG8gR0RCJ3MgUHl0aG9uIGludGVncmF0aW9uLgorCisgICBDb3B5 cmlnaHQgKEMpIDIwMDgtMjAyNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworCisjaWZuZGVmIEdEQl9QWVRIT05fUFlUSE9OX1RSQUlUU19ICisjZGVmaW5lIEdEQl9QWVRI T05fUFlUSE9OX1RSQUlUU19ICisKK25hbWVzcGFjZSBnZGIKK3sKKy8qIEFsbCBvZiBvdXIgY3Vz dG9tIFB5dGhvbiB0eXBlcyBhcmUgY3JlYXRlZCBhcyBzdHJ1Y3RzLCBsaWtlIHRoaXM6CisKKyAg IHN0cnVjdCBzb21lX25ld190eXBlIDogcHVibGljIFB5T2JqZWN0CisgICB7CisgICAgIC4uLiB2 YXJpb3VzIGZpZWxkcyAuLi4KKyAgIH07CisKKyAgIFRoZW4gaW5zdGFuY2VzIG9mIHRoaXMgc3Ry dWN0IGFyZSBjcmVhdGVkIGJ5IGNhbGxpbmcgUHlPYmplY3RfTmV3LAorICAgZWl0aGVyIGRpcmVj dGx5IHdpdGhpbiBHREIncyBDKysgY29kZSwgb3Igd2l0aGluIFB5dGhvbiB3aGVuIGEgdXNlcidz CisgICBQeXRob24gc2NyaXB0IGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcy4KKwor ICAgVGhlIHByb2JsZW0gaXMgdGhhdCBQeXRob24gaXMgd3JpdHRlbiBpbiBDLCBhbmQgUHlPYmpl Y3RfTmV3IGRvZXNuJ3QKKyAgIGNhbGwgYW55IGNvbnN0cnVjdG9ycyBmb3IgYHNvbWVfbmV3X3R5 cGVgLCBub3IgZm9yIGFueSBvZiB0aGUgZmllbGRzCisgICB3aXRoaW4gYHNvbWVfbmV3X3R5cGVg LgorCisgICBJZiBgc29tZV9uZXdfdHlwZWAgaXMgUGxhaW4gT2xkIERhdGEgKFBPRCksIHRoZW4g dGhpcyBpcyBmaW5lLiAgT3IsIHRvCisgICBiZSBtb3JlIEMrKyBzcGVjaWZpYywgaWYgYHNvbWVf bmV3X3R5cGVgIGlzIHRyaXZpYWxseSBkZWZhdWx0CisgICBjb25zdHJ1Y3RhYmxlLCB0aGVuIHdl J3JlIGZpbmUuCisKKyAgIEJ1dCBpZiBhIGZpZWxkIHdpdGhpbiBgc29tZV9uZXdfdHlwZWAgaGFz IGEgbm9uLXRyaXZpYWwgY29uc3RydWN0b3IsCisgICB0aGVuIHdlJ3JlIGluIHRyb3VibGUgYXMg dGhhdCBjb25zdHJ1Y3RvciB3aWxsIG5ldmVyIGJlIHJ1bi4KKworICAgQW4gZXhhbXBsZSBvZiBh IHByb2JsZW1hdGljIGZpZWxkIHR5cGUgaXMgZnJhbWVfaW5mb19wdHIuICBUaGUKKyAgIGNvbnN0 cnVjdG9yIGZvciB0aGlzIHR5cGUgcmVnaXN0ZXJzIHRoZSBuZXcgb2JqZWN0IHdpdGggYSBjZW50 cmFsCisgICBtYW5hZ2VtZW50IG9iamVjdCwgcmVjb3JkaW5nIHRoZSBgdGhpc2AgcG9pbnRlciwg dXNpbmcgdGhpcyB0eXBlIHdpdGhpbgorICAgYHNvbWVfbmV3X3R5cGVgIHdpbGwgbm90IHdvcmsg YXMgZXhwZWN0ZWQ7IGZyYW1lIGludmFsaWRhdGlvbiB3aWxsIG5vdAorICAgc2hvdyB1cCB3aXRo aW4gdGhlIGZyYW1lX2luZm9fcHRyIGFzIHlvdSBtaWdodCBleHBlY3QuCisKKyAgIEFuZCBzbywg dGhpcyB0eXBlIHRyYWl0IGV4aXN0cy4gIFdoZW5ldmVyIGEgc3RydWN0IGlzIGNyZWF0ZWQgdG8g ZGVmaW5lCisgICBhIG5ldyBQeXRob24gdHlwZSB3ZSBzaG91bGQgYWRkIGEgbGluZSBsaWtlOgor CisgICAgIHN0YXRpY19hc3NlcnQgKGdkYjo6aXNfcHl0aG9uX2FsbG9jYXRhYmxlX3Y8c29tZV9u ZXdfdHlwZT4pOworCisgICBUaGlzIHdpbGwgZmFpbCBpZiBhbnkgZmllbGQgb2YgYHNvbWVfbmV3 X3R5cGVgIGlzIHVuc3VpdGFibGUgZm9yIHRoaXMKKyAgIHVzZS4KKworICAgV2UgZG9uJ3QgYWN0 dWFsbHkgY2hlY2sgaXNfdHJpdmlhbGx5X2RlZmF1bHRfY29uc3RydWN0aWJsZSBoZXJlLiAgU29t ZQorICAgdHlwZXMsIGUuZy4gdWlfZmlsZV9zdHlsZTo6Y29sb3IsIGhhdmUgbm9uLXRyaXZpYWwg KG9yIG5vIGRlZmF1bHQpCisgICBjb25zdHJ1Y3RvcnMsIGJ1dCBhcmUgc3RpbGwgc2FmZSB0byB1 c2Ugd2l0aGluIGBzb21lX25ld190eXBlYCBiZWNhdXNlCisgICB0aGVpciBjb25zdHJ1Y3RvcnMg anVzdCBpbml0aWFsaXNlIGRhdGEgZmllbGRzOyB0aGVyZSdzIG5vdGhpbmcKKyAgICJzcGVjaWFs IiB0aGF0IHRoZSBjb25zdHJ1Y3RvciBkb2VzIHRoYXQgY2Fubm90IGJlIGFjaGlldmVkIGJ5Cisg ICBhc3NpZ25pbmcgdGhlIGZpZWxkcyBhZnRlciBjcmVhdGlvbiB3aXRoIFB5T2JqZWN0X05ldy4K KworICAgV2hhdCBhY3R1YWxseSBtYXR0ZXJzIGlzIHRoYXQgdGhlIHR5cGUgaXMgdHJpdmlhbGx5 IGRlc3RydWN0aWJsZQorICAgKFB5dGhvbiB3b24ndCBjYWxsIEMrKyBkZXN0cnVjdG9ycywgc28g ZGVzdHJ1Y3RvcnMgd2l0aCBzaWRlIGVmZmVjdHMsCisgICBsaWtlIGRlcmVnaXN0ZXJpbmcgZnJv bSBhIGxpc3QsIHdvdWxkIGJlIHNraXBwZWQpIGFuZCB0cml2aWFsbHkKKyAgIGNvcHlhYmxlIChQ eXRob24gbWF5IGNvcHkgb2JqZWN0cyB3aXRoIG1lbWNweSkuICBUeXBlcyBsaWtlCisgICBmcmFt ZV9pbmZvX3B0ciwgd2hvc2UgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBoYXZlIHNpZGUg ZWZmZWN0cworICAgc3VjaCBhcyByZWdpc3RlcmluZyB3aXRoIGEgY2VudHJhbCBtYW5hZ2VtZW50 IG9iamVjdCwgd2lsbCBiZSBjYXVnaHQKKyAgIGJlY2F1c2UgdGhleSBhcmUgbmVpdGhlciB0cml2 aWFsbHkgZGVzdHJ1Y3RpYmxlIG5vciB0cml2aWFsbHkgY29weWFibGUuCisgICBUeXBlcyBsaWtl IHVpX2ZpbGVfc3R5bGUgYXJlIHRyaXZpYWxseSBkZXN0cnVjdGlibGUgYW5kIGNvcHlhYmxlLCBz bworICAgcGFzcyB0aGlzIHRyYWl0LiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVj dCBpc19weXRob25fYWxsb2NhdGFibGUKK3sKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl ID0KKyAgICBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGVfdjxUPgorICAgICYmIHN0ZDo6 aXNfdHJpdmlhbGx5X2NvcHlhYmxlX3Y8VD47Cit9OworCisvKiBIZWxwZXIgZm9yIHRoZSBhYm92 ZSB0cmFpdCB0byBtYWtlIGl0IG1vcmUgdXNhYmxlLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUg VD4KK2lubGluZSBjb25zdGV4cHIgYm9vbCBpc19weXRob25fYWxsb2NhdGFibGVfdgorICA9IGlz X3B5dGhvbl9hbGxvY2F0YWJsZTxUPjo6dmFsdWU7Cit9CisKKyNlbmRpZiAvKiBHREJfUFlUSE9O X1BZVEhPTl9UUkFJVFNfSCAqLwpkaWZmIC0tZ2l0IGEvcHlkYmcuY3BwIGIvcHlkYmcuY3BwCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZmFlMmUKLS0tIC9kZXYvbnVsbAor KysgYi9weWRiZy5jcHAKQEAgLTAsMCArMSw4MCBAQAorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5j bHVkZSA8aW9zdHJlYW0+CisKKyNpbmNsdWRlIDxQeXRob24uaD4KKworaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZW52cFtdKQoreworICAgIFB5X0luaXRpYWxpemUoKTsK KworICAgIFB5T2JqZWN0ICpwbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJNeU1vZHVs ZSIpOworICAgIGlmICghcG1vZHVsZSkgeworICAgICAgICBQeUVycl9QcmludCgpOworICAgICAg ICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byBpbXBvcnQgbW9kdWxlIE15TW9kdWxlIiA8PCBzdGQ6 OmVuZGw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBQeU9iamVjdCAqY2xhc3NB ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhwbW9kdWxlLCAiQSIpOworICAgIGlmICghY2xhc3NB KSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiVW5hYmxlIHRvIGdldCB0eXBlIEEgZnJvbSBNeU1v ZHVsZSIgPDwgc3RkOjplbmRsOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgUHlP YmplY3QgKmNsYXNzQiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcocG1vZHVsZSwgIkIiKTsKKyAg ICBpZiAoIWNsYXNzQikgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIlVuYWJsZSB0byBnZXQgdHlw ZSBCIGZyb20gTXlNb2R1bGUiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgcmV0dXJuIC0xOworICAg IH0KKworICAgIFB5T2JqZWN0ICpteUFJbnN0YW5jZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QoY2xh c3NBLCBOVUxMKTsKKyAgICBpZiAoIW15QUluc3RhbmNlKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8 PCAiSW5zdGFudGlvYXRpb24gb2YgTXlDbGFzcyBmYWlsZWQiIDw8IHN0ZDo6ZW5kbDsKKyAgICAg ICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQeV9ERUNSRUYobXlBSW5zdGFuY2UpOworCisgICAg UHlPYmplY3QgKnBHbG9iYWwgPSBQeURpY3RfTmV3KCk7CisgICAgUHlPYmplY3QgKnBWYWx1ZSA9 IFB5UnVuX1N0cmluZygKKyAgICAgICAgImltcG9ydCBNeU1vZHVsZSBhcyBNTVxuIgorICAgICAg ICAiYiA9IE1NLkIoKVxuIgorICAgICAgICAiYi5mb28gPSAxMjM0XG4iCisgICAgICAgICJwcmlu dChiLm5hbWUoKSwgYi5pYW1iKCkpXG4iCisgICAgICAgICJcbiIKKyAgICAgICAgImNsYXNzIEMo TU0uQik6XG4iCisgICAgICAgICIgIHBhc3NcbiIKKyAgICAgICAgImMgPSBDKClcbiIKKyAgICAg ICAgImMuZm9vID0gMTIzNFxuIgorICAgICAgICAicHJpbnQoZGlyKGMpKVxuIgorICAgICAgICAi cHJpbnQoYy5uYW1lKCksIGMuaWFtYigpKVxuIgorICAgICAgICAiXG4iCisgICAgICAgICJjbGFz cyBEKE1NLkEpOlxuIgorICAgICAgICAiICBkZWYgX19pbml0X18oc2VsZik6XG4iCisgICAgICAg ICIgICAgc3VwZXIoKS5fX2luaXRfXygpXG4iCisgICAgICAgICIgICAgc2VsZi5fY3ljbGUgPSBz ZWxmXG4iCisgICAgICAgICJcbiIKKyAgICAgICAgImQgPSBEKClcbiIKKyAgICAgICAgImQuZm9v ID0gMTIzNFxuIgorICAgICAgICAicHJpbnQoZGlyKGQpKVxuIgorICAgICAgICAicHJpbnQoZC5u YW1lKCksIGQuaWFtYSgpKVxuIgorICAgICAgICAiXG4iCisgICAgICAgICJjbGFzcyBFKE1NLkIp OlxuIgorICAgICAgICAiICBkZWYgX19pbml0X18oc2VsZik6XG4iCisgICAgICAgICIgICAgc3Vw ZXIoKS5fX2luaXRfXygpXG4iCisgICAgICAgICIgICAgc2VsZi5fY3ljbGUgPSBzZWxmXG4iCisg ICAgICAgICJcbiIKKyAgICAgICAgImUgPSBFKClcbiIKKyAgICAgICAgImUuZm9vID0gMTIzNFxu IgorICAgICAgICAicHJpbnQoZGlyKGUpKVxuIgorICAgICAgICAicHJpbnQoZS5uYW1lKCksIGUu aWFtYSgpLCBlLmlhbWIoKSlcbiIKKyAgICAgICAgIlxuIgorICAgICAgICAiZiA9IE1NLk9ialdp dGhBbGxvYygpXG4iCisgICAgICAgICJwcmludCgne30ge30nLmZvcm1hdChmLm5hbWUoKSwgZi53 aG9hbWkoKSkpXG4iCisgICAgICAgICJwcmludChmLnNwZWFrKCkpXG4iCisgICAgICAgICwgUHlf ZmlsZV9pbnB1dCwgcEdsb2JhbCwgcEdsb2JhbCk7CisgICAgUHlfWERFQ1JFRihwVmFsdWUpOwor ICAgIFB5X0RFQ1JFRihwR2xvYmFsKTsKKworICAgIFB5X0ZpbmFsaXplKCk7CisKKyAgICByZXR1 cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9BLmNwcCBiL3NyYy9BLmNwcApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjczOGE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL0Eu Y3BwCkBAIC0wLDAgKzEsMTEzIEBACisjaW5jbHVkZSAibXlfcHlfbW9kdWxlLmhwcCIKKworbmFt ZXNwYWNlIHsKKyAgZXh0ZXJuIFB5VHlwZV9TcGVjIEFfb2JqZWN0X3R5cGVfc3BlYzsKK30gLyog bmFtZXNwYWNlIGFub255bW91cyAqLworCituYW1lc3BhY2UgeworCitzdGF0aWMgaW50CitBX2lu aXQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7Cisg IGF1dG8qIG9iaiA9IChBICopIHNlbGY7CisgIGdkYnB5X2RpY3RfYXR0cl9QeV9BTExPQyAoQSwg c2VsZik7CisgIG9iai0+bV9hID0gUHlVbmljb2RlX0Zyb21TdHJpbmcgKCJBIik7CisgIHJldHVy biAwOworfQorCisvKiBUaGUgdHBfdHJhdmVyc2UgY2FsbGJhY2sgZm9yIHRoZSBBIHR5cGUuICAq Lworc3RhdGljIGludAorQV90cmF2ZXJzZV9pbXBsIChQeU9iamVjdCAqc2VsZiwgdmlzaXRwcm9j IHZpc2l0LCB2b2lkICphcmcpCit7CisgIGF1dG8gKm9iaiA9IChBICopIHNlbGY7CisgIHByaW50 ZiAoIi0tPiBBX3RyYXZlcnNlX2ltcGxcbiIpOworICBnZGJweV9kaWN0X2F0dHJfUHlfVklTSVQg KG9iaik7CisgIFB5X1ZJU0lUIChvYmotPm1fYSk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50CitBX3RyYXZlcnNlIChQeU9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICph cmcpCit7CisgIHJldHVybiBnZGJweV9oZWFwX3R5cGU6OnRwX3RyYXZlcnNlIChzZWxmLCB2aXNp dCwgYXJnLAorCQkJCSAgICAgICBudWxscHRyLCBBX3RyYXZlcnNlX2ltcGwpOworfQorCisvKiBU aGUgdHBfY2xlYXIgY2FsbGJhY2sgZm9yIHRoZSBBIHR5cGUuICAqLworCitzdGF0aWMgdm9pZAor QV9jbGVhcl9pbXBsIChQeU9iamVjdCAqc2VsZikKK3sKKyAgYXV0byAqb2JqID0gKEEgKikgc2Vs ZjsKKyAgcHJpbnRmICgiLS0+IEFfY2xlYXJfaW1wbFxuIik7CisgIGdkYnB5X2RpY3RfYXR0cl9Q eV9DTEVBUiAob2JqKTsKKyAgUHlfQ0xFQVIgKG9iai0+bV9hKTsKK30KKworc3RhdGljIHZvaWQK K0FfY2xlYXIgKFB5T2JqZWN0ICpzZWxmKQoreworICByZXR1cm4gZ2RicHlfaGVhcF90eXBlOjp0 cF9jbGVhciAoc2VsZiwgbnVsbHB0ciwgQV9jbGVhcl9pbXBsKTsKK30KKworUHlPYmplY3QgKgor QV9uYW1lIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgIGF1dG8gKm9iaiA9 IChBICopIHNlbGY7CisgIFB5X0lOQ1JFRiAob2JqLT5tX2EpOworICByZXR1cm4gb2JqLT5tX2E7 Cit9CisKK1B5T2JqZWN0ICoKK0FfaWFtYSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdz KQoreworICBhdXRvICpvYmogPSAoQSAqKSBzZWxmOworICByZXR1cm4gUHlVbmljb2RlX0Zyb21G b3JtYXQgKCJIZWxsbyBJIGFtICVVIiwgb2JqLT5tX2EpOworfQorCitnZGJfUHlHZXRTZXREZWYg QV9vYmplY3RfZ2V0c2V0W10gPQoreworICBnZGJweV9kaWN0X2F0dHJfZ2V0dGVyIChBLCAiQSIp LAorICB7IG51bGxwdHIgfSAvKiBTZW50aW5lbCAqLworfTsKKworUHlNZXRob2REZWYgQV9vYmpl Y3RfbWV0aG9kcyBbXSA9IHsKKyAgeyAibmFtZSIsIEFfbmFtZSwgTUVUSF9OT0FSR1MsCisgICAg Im5hbWUgKCkgLT4gU3RyaW5nLlxuXAorUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBhcyBh IHN0cmluZyB2YWx1ZS4iIH0sCisgIHsgImlhbWEiLCBBX2lhbWEsIE1FVEhfTk9BUkdTLAorICAg ICJpYW1hICgpIC0+IFN0cmluZy5cblwKK1JldHVybiB0aGUgb2JqZWN0J3MgZ3JlZXRpbmcgYXMg YSBzdHJpbmcgdmFsdWUuIiB9LAorICB7bnVsbHB0cn0gLyogU2VudGluZWwgKi8KK307CisKK1B5 VHlwZV9TbG90IEFfb2JqZWN0X3R5cGVfc2xvdFtdID0geworICB7UHlfdHBfZG9jLCAgICAgY29u c3RfY2FzdDxjaGFyICo+KCJBIG9iamVjdCIpfSwKKyAgZ2RicHlfaGVhcF90eXBlX21ldGhvZHMg KEFfdHJhdmVyc2UsIEFfY2xlYXIpLAorICBnZGJweV9kaWN0X2F0dHJfUHlUeXBlX1Nsb3RzIChB KSwKKyAge1B5X3RwX2luaXQsICh2b2lkKikgQV9pbml0fSwKKyAge1B5X3RwX21ldGhvZHMsIEFf b2JqZWN0X21ldGhvZHN9LAorICB7UHlfdHBfZ2V0c2V0LCAgQV9vYmplY3RfZ2V0c2V0fSwKKyAg ezAsIG51bGxwdHJ9LCAvKiBTZW50aW5lbCAqLworfTsKKworUHlUeXBlX1NwZWMgQV9vYmplY3Rf dHlwZV9zcGVjID0geworICAiTXlNb2R1bGUuQSIsIC8qIHRwX25hbWUgKi8KKyAgc2l6ZW9mIChB KSwgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgMCwgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAq LworICBnZGJweV9oZWFwX3R5cGU6OnRwX2ZsYWdzX2RlZmF1bHQgKCkKKyAgfCBQeV9UUEZMQUdT X0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLworICBBX29iamVjdF90eXBlX3Nsb3QsCit9OworCit9 IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKKworZ2RicHlfb2JqZWN0X3R5cGVfcmVmCitBOjpyZWNv cmRfY2xhc3MgKGdkYnB5X2JvcnJvd2VkX3JlZjw+IG1vZHVsZSwKKwkJIGdkYnB5X29iamVjdF90 eXBlX2JyZWYgYmFzZV9jbGFzcyBBVFRSSUJVVEVfVU5VU0VEKQoreworICBnZGJweV9vYmplY3Rf dHlwZV9yZWYgb2JqX3R5cGUKKyAgICA9IGdkYnB5X3R5cGVfaW5pdGlhbGl6ZSAobW9kdWxlLAor CQkJICAgICAmQV9vYmplY3RfdHlwZV9zcGVjKTsKKyAgcmV0dXJuIG9ial90eXBlOworfQpkaWZm IC0tZ2l0IGEvc3JjL0IuY3BwIGIvc3JjL0IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjRkZmQzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvQi5jcHAKQEAgLTAsMCAr MSwxMTYgQEAKKyNpbmNsdWRlICJteV9weV9tb2R1bGUuaHBwIgorCituYW1lc3BhY2UgeworICBl eHRlcm4gUHlUeXBlX1NwZWMgQl9vYmplY3RfdHlwZV9zcGVjOworICBnZGJweV9vYmplY3RfdHlw ZV9icmVmIEJfYmFzZV90eXBlID0gbnVsbHB0cjsKK30gLyogbmFtZXNwYWNlIGFub255bW91cyAq LworCituYW1lc3BhY2UgeworCitzdGF0aWMgaW50CitCX2luaXQoUHlPYmplY3QgKnNlbGYsIFB5 T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgYXV0byogb2JqID0gKEIgKikgc2Vs ZjsKKworICAvKiBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykgKi8KKyAgaW5pdHBy b2MgYmFzZV9mdW5jX2luaXQgPSAoaW5pdHByb2MpIEJfYmFzZV90eXBlLnNsb3QgKFB5X3RwX2lu aXQpOworICBnZGJfYXNzZXJ0IChiYXNlX2Z1bmNfaW5pdCAhPSBudWxscHRyKTsKKyAgaWYgKGJh c2VfZnVuY19pbml0IChzZWxmLCBhcmdzLCBrd2RzKSAhPSAwKQorICAgIHJldHVybiAtMTsKKwor ICBvYmotPm1fYiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nICgiQiIpOworICByZXR1cm4gMDsKK30K KworLyogVGhlIHRwX3RyYXZlcnNlIGNhbGxiYWNrIGZvciB0aGUgQSB0eXBlLiAgKi8KK3N0YXRp YyBpbnQKK0JfdHJhdmVyc2VfaW1wbCAoUHlPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwg dm9pZCAqYXJnKQoreworICBhdXRvICpvYmogPSAoQiAqKSBzZWxmOworICBwcmludGYgKCItLT4g Ql90cmF2ZXJzZV9pbXBsXG4iKTsKKyAgUHlfVklTSVQgKG9iai0+bV9iKTsKKyAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQKK0JfdHJhdmVyc2UoUHlPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2 aXNpdCwgdm9pZCAqYXJnKQoreworICByZXR1cm4gZ2RicHlfaGVhcF90eXBlOjp0cF90cmF2ZXJz ZShzZWxmLCB2aXNpdCwgYXJnLAorCQkJCSAgICAgIEJfYmFzZV90eXBlLCBCX3RyYXZlcnNlX2lt cGwpOworfQorCisvKiBUaGUgdHBfY2xlYXIgY2FsbGJhY2sgZm9yIHRoZSBBIHR5cGUuICAqLwor CitzdGF0aWMgdm9pZAorQl9jbGVhcl9pbXBsIChQeU9iamVjdCAqc2VsZikKK3sKKyAgYXV0byAq b2JqID0gKEIgKikgc2VsZjsKKyAgcHJpbnRmICgiLS0+IEJfY2xlYXJfaW1wbFxuIik7CisgIFB5 X0NMRUFSIChvYmotPm1fYik7Cit9CisKK3N0YXRpYyB2b2lkCitCX2NsZWFyIChQeU9iamVjdCAq c2VsZikKK3sKKyAgZ2RicHlfaGVhcF90eXBlOjp0cF9jbGVhcihzZWxmLCBCX2Jhc2VfdHlwZSwg Ql9jbGVhcl9pbXBsKTsKK30KKworUHlPYmplY3QgKgorQl9uYW1lIChQeU9iamVjdCAqc2VsZiwg UHlPYmplY3QgKmFyZ3MpCit7CisgIGF1dG8gKm9iaiA9IChCICopIHNlbGY7CisgIGdkYl9hc3Nl cnQgKG9iai0+bV9iICE9IG51bGxwdHIpOworICBQeV9JTkNSRUYgKG9iai0+bV9iKTsKKyAgcmV0 dXJuIG9iai0+bV9iOworfQorCitQeU9iamVjdCAqCitCX2lhbWIgKFB5T2JqZWN0ICpzZWxmLCBQ eU9iamVjdCAqYXJncykKK3sKKyAgYXV0byAqb2JqID0gKEIgKikgc2VsZjsKKyAgZ2RiX2Fzc2Vy dCAob2JqLT5tX2EgIT0gbnVsbHB0cik7CisgIGdkYl9hc3NlcnQgKG9iai0+bV9iICE9IG51bGxw dHIpOworICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQgKCJIZWxsbyBJIGFtIGJvdGggJVUg YW5kICVVIiwgb2JqLT5tX2EsIG9iai0+bV9iKTsKK30KKworUHlNZXRob2REZWYgQl9vYmplY3Rf bWV0aG9kcyBbXSA9IHsKKyAgeyAibmFtZSIsIEJfbmFtZSwgTUVUSF9OT0FSR1MsCisgICAgIm5h bWUgKCkgLT4gU3RyaW5nLlxuXAorUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBhcyBhIHN0 cmluZyB2YWx1ZS4iIH0sCisgIHsgImlhbWIiLCBCX2lhbWIsIE1FVEhfTk9BUkdTLAorICAgICJp YW1iICgpIC0+IFN0cmluZy5cblwKK1JldHVybiB0aGUgb2JqZWN0J3MgZ3JlZXRpbmcgYXMgYSBz dHJpbmcgdmFsdWUuIiB9LAorICB7bnVsbHB0cn0gLyogU2VudGluZWwgKi8KK307CisKK1B5VHlw ZV9TbG90IEJfb2JqZWN0X3R5cGVfc2xvdFtdID0geworICB7UHlfdHBfZG9jLCAgICAgY29uc3Rf Y2FzdDxjaGFyICo+KCJCIG9iamVjdCIpfSwKKyAgZ2RicHlfaGVhcF90eXBlX21ldGhvZHMgKEJf dHJhdmVyc2UsIEJfY2xlYXIpLAorICB7UHlfdHBfaW5pdCwgKHZvaWQqKSBCX2luaXR9LAorICB7 UHlfdHBfbWV0aG9kcywgQl9vYmplY3RfbWV0aG9kc30sCisgIHswLCBudWxscHRyfSwgLyogU2Vu dGluZWwgKi8KK307CisKK1B5VHlwZV9TcGVjIEJfb2JqZWN0X3R5cGVfc3BlYyA9IHsKKyAgIk15 TW9kdWxlLkIiLCAvKiB0cF9uYW1lICovCisgIHNpemVvZiAoQiksICAgLyogdHBfYmFzaWNzaXpl ICovCisgIDAsICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgZ2RicHlfaGVhcF90eXBl Ojp0cF9mbGFnc19kZWZhdWx0ICgpCisgIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyogdHBfZmxh Z3MgKi8KKyAgQl9vYmplY3RfdHlwZV9zbG90LAorfTsKKworfSAvLyBuYW1lc3BhY2UgYW5vbnlt b3VzCisKK2dkYnB5X29iamVjdF90eXBlX3JlZgorQjo6cmVjb3JkX2NsYXNzIChnZGJweV9ib3Jy b3dlZF9yZWY8PiBtb2R1bGUsCisJCSBnZGJweV9vYmplY3RfdHlwZV9icmVmIEFfYmFzZV9jbGFz cykKK3sKKyAgQl9iYXNlX3R5cGUgPSBBX2Jhc2VfY2xhc3M7CisKKyAgZ2RicHlfb2JqZWN0X3R5 cGVfcmVmIG9ial90eXBlCisgICAgPSBnZGJweV90eXBlX2luaXRpYWxpemUgKG1vZHVsZSwKKwkJ CSAgICAgJkJfb2JqZWN0X3R5cGVfc3BlYywKKwkJCSAgICAgQV9iYXNlX2NsYXNzLmdldCAoKSk7 CisgIHJldHVybiBvYmpfdHlwZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9PYmpXaXRoQWxsb2MuY3Bw IGIvc3JjL09ialdpdGhBbGxvYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZWQwYjM3NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9PYmpXaXRoQWxsb2MuY3BwCkBAIC0w LDAgKzEsMTQwIEBACisjaW5jbHVkZSAibXlfcHlfbW9kdWxlLmhwcCIKKworbmFtZXNwYWNlIHsK KyAgZXh0ZXJuIFB5VHlwZV9TcGVjIE9ialdpdGhBbGxvY19vYmplY3RfdHlwZV9zcGVjOworICBn ZGJweV9vYmplY3RfdHlwZV9icmVmIE9ialdpdGhBbGxvY19vYmplY3RfdHlwZTsKK30gLyogbmFt ZXNwYWNlIGFub255bW91cyAqLworCituYW1lc3BhY2UgeworCitzdGF0aWMgUHlPYmplY3QgKgor T2JqV2l0aEFsbG9jX2FsbG9jICgpCit7CisgIGdkYnB5X2hlYXBfdHlwZV9hbGxvY2F0ZV9vcl9i YWlsb3V0CisgICAgKG15X25ld19vYmosIE9ialdpdGhBbGxvYywgT2JqV2l0aEFsbG9jX29iamVj dF90eXBlKTsKKworICBteV9uZXdfb2JqLT5tc2cgPSBuZXcgc3RkOjpzdHJpbmcgKAorICAgICJO ZXF1ZSBwb3JybyBxdWlzcXVhbSBlc3QgcXVpIGRvbG9yZW0gaXBzdW0gcXVpYSBkb2xvciBzaXQg YW1ldCwgIgorICAgICJjb25zZWN0ZXR1ciwgYWRpcGlzY2kgdmVsaXQuLi4iKTsKKworICBteV9u ZXdfb2JqLT5tX25hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyAoIk9ialdpdGhBbGxvYyIpOwor CisgIG15X25ld19vYmotPnNlbGZfY3ljbGUgPSBteV9uZXdfb2JqLnN0cm9uZ19yZWYgKCkucmVs ZWFzZSAoKTsKKworICAvKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSB0byBpbGx1c3RyYXRlIHRo ZSB1c2FnZSBvZiBiYWlsb3V0KCkuICAqLworICBpZiAoKm15X25ld19vYmotPm1zZyA9PSAiaGVs bG8gd29ybGQgISIpCisgICAgeworICAgICAgZGVsZXRlIG15X25ld19vYmotPm1zZzsKKyAgICAg IFB5X1hERUNSRUYgKG15X25ld19vYmotPm1fbmFtZSk7CisgICAgICBQeV9YREVDUkVGIChteV9u ZXdfb2JqLT5zZWxmX2N5Y2xlKTsKKyAgICAgIHJldHVybiBteV9uZXdfb2JqLmJhaWxvdXQgKCk7 CisgICAgfQorICByZXR1cm4gbXlfbmV3X29iai50cmFjayAoKS5yZWxlYXNlICgpOworfQorCisv KiBUaGUgdHBfdHJhdmVyc2UgY2FsbGJhY2sgZm9yIHRoZSBBIHR5cGUuICAqLworc3RhdGljIGlu dAorT2JqV2l0aEFsbG9jX3RyYXZlcnNlX2ltcGwgKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2Mg dmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgYXV0byAqb2JqID0gKE9ialdpdGhBbGxvYyAqKSBzZWxm OworICBwcmludGYgKCItLT4gT2JqV2l0aEFsbG9jX3RyYXZlcnNlX2ltcGxcbiIpOworICBQeV9W SVNJVCAob2JqLT5tX25hbWUpOworICBQeV9WSVNJVCAob2JqLT5zZWxmX2N5Y2xlKTsKKyAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK09ialdpdGhBbGxvY190cmF2ZXJzZSAoUHlPYmplY3Qg KnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICByZXR1cm4gZ2RicHlfaGVh cF90eXBlOjp0cF90cmF2ZXJzZSAoc2VsZiwgdmlzaXQsIGFyZywKKwkJCQkgICAgICAgbnVsbHB0 ciwgT2JqV2l0aEFsbG9jX3RyYXZlcnNlX2ltcGwpOworfQorCisvKiBUaGUgdHBfY2xlYXIgY2Fs bGJhY2sgZm9yIHRoZSBBIHR5cGUuICAqLworCitzdGF0aWMgdm9pZAorT2JqV2l0aEFsbG9jX2Ns ZWFyX2ltcGwgKFB5T2JqZWN0ICpzZWxmKQoreworICBhdXRvICpvYmogPSAoT2JqV2l0aEFsbG9j ICopIHNlbGY7CisgIHByaW50ZiAoIi0tPiBPYmpXaXRoQWxsb2NfY2xlYXJfaW1wbFxuIik7Cisg IFB5X0NMRUFSIChvYmotPm1fbmFtZSk7CisgIFB5X0NMRUFSIChvYmotPnNlbGZfY3ljbGUpOwor ICBpZiAob2JqLT5tc2cgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICBkZWxldGUgb2JqLT5tc2c7 CisgICAgICBvYmotPm1zZyA9IG51bGxwdHI7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorT2Jq V2l0aEFsbG9jX2NsZWFyIChQeU9iamVjdCAqc2VsZikKK3sKKyAgcmV0dXJuIGdkYnB5X2hlYXBf dHlwZTo6dHBfY2xlYXIgKHNlbGYsIG51bGxwdHIsIE9ialdpdGhBbGxvY19jbGVhcl9pbXBsKTsK K30KKworUHlPYmplY3QgKgorT2JqV2l0aEFsbG9jX25hbWUgKFB5T2JqZWN0ICpzZWxmLCBQeU9i amVjdCAqYXJncykKK3sKKyAgYXV0byAqb2JqID0gKE9ialdpdGhBbGxvYyAqKSBzZWxmOworICBQ eV9JTkNSRUYgKG9iai0+bV9uYW1lKTsKKyAgcmV0dXJuIG9iai0+bV9uYW1lOworfQorCitQeU9i amVjdCAqCitPYmpXaXRoQWxsb2Nfd2hvYW1pIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFy Z3MpCit7CisgIGF1dG8gKm9iaiA9IChPYmpXaXRoQWxsb2MgKikgc2VsZjsKKyAgcmV0dXJuIFB5 VW5pY29kZV9Gcm9tRm9ybWF0ICgiSGVsbG8gSSBhbSAlVSIsIG9iai0+bV9uYW1lKTsKK30KKwor UHlPYmplY3QgKgorT2JqV2l0aEFsbG9jX3NwZWFrIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3Qg KmFyZ3MpCit7CisgIGF1dG8gKm9iaiA9IChPYmpXaXRoQWxsb2MgKikgc2VsZjsKKyAgcmV0dXJu IFB5VW5pY29kZV9Gcm9tRm9ybWF0ICgiSSwgJVUsICVzIiwgb2JqLT5tX25hbWUsIG9iai0+bXNn LT5jX3N0ciAoKSk7Cit9CisKK1B5TWV0aG9kRGVmIE9ialdpdGhBbGxvY19vYmplY3RfbWV0aG9k cyBbXSA9IHsKKyAgeyAibmFtZSIsIE9ialdpdGhBbGxvY19uYW1lLCBNRVRIX05PQVJHUywKKyAg ICAibmFtZSAoKSAtPiBTdHJpbmcuXG5cCitSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFz IGEgc3RyaW5nIHZhbHVlLiIgfSwKKyAgeyAid2hvYW1pIiwgT2JqV2l0aEFsbG9jX3dob2FtaSwg TUVUSF9OT0FSR1MsCisgICAgIndob2FtaSAoKSAtPiBTdHJpbmcuXG5cCitSZXR1cm4gdGhlIG9i amVjdCdzIGdyZWV0aW5nIGFzIGEgc3RyaW5nIHZhbHVlLiIgfSwKKyAgeyAic3BlYWsiLCBPYmpX aXRoQWxsb2Nfc3BlYWssIE1FVEhfTk9BUkdTLAorICAgICJzcGVhayAoKSAtPiBTdHJpbmcuXG5c CitSZXR1cm4gdGhlIG9iamVjdCdzIHNwZWVjaCBhcyBhIHN0cmluZyB2YWx1ZS4iIH0sCisgIHtu dWxscHRyfSAvKiBTZW50aW5lbCAqLworfTsKKworUHlUeXBlX1Nsb3QgT2JqV2l0aEFsbG9jX29i amVjdF90eXBlX3Nsb3RbXSA9IHsKKyAge1B5X3RwX2RvYywgICAgIGNvbnN0X2Nhc3Q8Y2hhciAq PigiT2JqV2l0aEFsbG9jIG9iamVjdCIpfSwKKyAgZ2RicHlfaGVhcF90eXBlX21ldGhvZHMgKE9i aldpdGhBbGxvY190cmF2ZXJzZSwgT2JqV2l0aEFsbG9jX2NsZWFyKSwKKyAge1B5X3RwX2FsbG9j LCAgICh2b2lkKikgT2JqV2l0aEFsbG9jX2FsbG9jfSwKKyAge1B5X3RwX21ldGhvZHMsIE9ialdp dGhBbGxvY19vYmplY3RfbWV0aG9kc30sCisgIHswLCBudWxscHRyfSwgLyogU2VudGluZWwgKi8K K307CisKK1B5VHlwZV9TcGVjIE9ialdpdGhBbGxvY19vYmplY3RfdHlwZV9zcGVjID0geworICAi TXlNb2R1bGUuT2JqV2l0aEFsbG9jIiwgLyogdHBfbmFtZSAqLworICBzaXplb2YgKE9ialdpdGhB bGxvYyksICAgLyogdHBfYmFzaWNzaXplICovCisgIDAsICAgICAgICAgICAgLyogdHBfaXRlbXNp emUgKi8KKyAgZ2RicHlfaGVhcF90eXBlOjp0cF9mbGFnc19kZWZhdWx0ICgpCisgIHwgUHlfVFBG TEFHU19CQVNFVFlQRSwgLyogdHBfZmxhZ3MgKi8KKyAgT2JqV2l0aEFsbG9jX29iamVjdF90eXBl X3Nsb3QsCit9OworCit9IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKKworZ2RicHlfb2JqZWN0X3R5 cGVfcmVmCitPYmpXaXRoQWxsb2M6OnJlY29yZF9jbGFzcworICAoZ2RicHlfYm9ycm93ZWRfcmVm PD4gbW9kdWxlLAorICAgZ2RicHlfb2JqZWN0X3R5cGVfYnJlZiBiYXNlX2NsYXNzIEFUVFJJQlVU RV9VTlVTRUQpCit7CisgIGdkYnB5X29iamVjdF90eXBlX3JlZiBvYmpfdHlwZQorICAgID0gZ2Ri cHlfdHlwZV9pbml0aWFsaXplIChtb2R1bGUsCisJCQkgICAgICZPYmpXaXRoQWxsb2Nfb2JqZWN0 X3R5cGVfc3BlYyk7CisKKyAgT2JqV2l0aEFsbG9jX29iamVjdF90eXBlID0gb2JqX3R5cGU7Cisg IHJldHVybiBvYmpfdHlwZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9nZGItb3RoZXJzLmNwcCBiL3Ny Yy9nZGItb3RoZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU1 MWQxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2dkYi1vdGhlcnMuY3BwCkBAIC0wLDAgKzEsMzEg QEAKKyNpbmNsdWRlICJnZGItb3RoZXJzLmhwcCIKKworI2RlZmluZSBUT09MTkFNRSAiR0RCIgor CisjaW5jbHVkZSA8Y3N0ZGFyZz4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdGRp bz4KKworZXh0ZXJuICJDIiB7CisKK1tbbm9yZXR1cm5dXSBzdGF0aWMgdm9pZAoraW50ZXJuYWxf dmVycm9yIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCB2YV9s aXN0IGFyZ3MpCit7CisgIGZwcmludGYgKHN0ZGVyciwgICJcCislczolZDogQSBwcm9ibGVtIGlu dGVybmFsIHRvICIgVE9PTE5BTUUgIiBoYXMgYmVlbiBkZXRlY3RlZC5cbiIsIGZpbGUsIGxpbmUp OworICB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworICBmcHJpbnRmIChzdGRlcnIsICJc biIpOworICBhYm9ydCAoKTsKK30KKwordm9pZAoraW50ZXJuYWxfZXJyb3JfbG9jIChjb25zdCBj aGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3Qg YXA7CisKKyAgdmFfc3RhcnQgKGFwLCBmbXQpOworICBpbnRlcm5hbF92ZXJyb3IgKGZpbGUsIGxp bmUsIGZtdCwgYXApOworICB2YV9lbmQgKGFwKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvc3JjL215 X3B5X21vZHVsZS5jcHAgYi9zcmMvbXlfcHlfbW9kdWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5lZGI2MmNjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL215X3B5X21v ZHVsZS5jcHAKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVk ZSAibXlfcHlfbW9kdWxlLmhwcCIKKworbmFtZXNwYWNlIHsKKworLy8gQSBzdHJ1Y3QgY29udGFp bnMgdGhlIGRlZmluaXRpb24gb2YgYSBtb2R1bGUKK1B5TW9kdWxlRGVmIG15X21vZHVsZSA9IHsK KyAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAiTXlNb2R1bGUiLAorICAiVGhpcyBpcyBNeU1v ZHVsZSdzIGRvY3N0cmluZyIsCisgIC0xLCAgIC8vIE9wdGlvbmFsIHNpemUgb2YgdGhlIG1vZHVs ZSBzdGF0ZSBtZW1vcnkKKyAgTlVMTCwgLy8gT3B0aW9uYWwgbW9kdWxlIG1ldGhvZHMKKyAgTlVM TCwgLy8gT3B0aW9uYWwgc2xvdCBkZWZpbml0aW9ucworICBOVUxMLCAvLyBPcHRpb25hbCB0cmF2 ZXJzYWwgZnVuY3Rpb24KKyAgTlVMTCwgLy8gT3B0aW9uYWwgY2xlYXIgZnVuY3Rpb24KKyAgTlVM TCAgLy8gT3B0aW9uYWwgbW9kdWxlIGRlYWxsb2NhdGlvbiBmdW5jdGlvbgorfTsKKworfSAvLyBu YW1lc3BhY2UgYW5vbnltb3VzCisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfTXlNb2R1bGUodm9p ZCkgeworICBnZGJweV9ib3Jyb3dlZF9yZWY8PiBtb2R1bGUgPSBQeU1vZHVsZV9DcmVhdGUoJm15 X21vZHVsZSk7CisgIGF1dG8gQV9vYmplY3RfdHlwZSA9IEE6OnJlY29yZF9jbGFzcyAobW9kdWxl KTsKKyAgYXV0byBCX29iamVjdF90eXBlID0gQjo6cmVjb3JkX2NsYXNzIChtb2R1bGUsIEFfb2Jq ZWN0X3R5cGUpOworICBhdXRvIE9ialdpdGhBbGxvY19vYmplY3RfdHlwZSA9IE9ialdpdGhBbGxv Yzo6cmVjb3JkX2NsYXNzIChtb2R1bGUpOworICByZXR1cm4gbW9kdWxlOworfQpkaWZmIC0tZ2l0 IGEvc3JjL215X3B5X21vZHVsZS5ocHAgYi9zcmMvbXlfcHlfbW9kdWxlLmhwcApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmMxNzNmCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L215X3B5X21vZHVsZS5ocHAKQEAgLTAsMCArMSw0NSBAQAorI3ByYWdtYSBvbmNlCisKKyNpbmNs dWRlICJweXRob24taW50ZXJuYWwuaHBwIgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUg PHN0cmluZ192aWV3PgorCitzdHJ1Y3QgQTogcHVibGljIFB5T2JqZWN0Cit7CisgIC8qIERpY3Rp b25hcnkgaG9sZGluZyB1c2VyLWFkZGVkIGF0dHJpYnV0ZXMuCisgICAgIFRoaXMgaXMgdGhlIF9f ZGljdF9fIGF0dHJpYnV0ZSBvZiB0aGUgb2JqZWN0LiAgKi8KKyAgR0RCUFlPQkpFQ1RfRElDVF9B VFRSIChBKTsKKworICBQeU9iamVjdCAqbV9hOworCisgIHN0YXRpYyBnZGJweV9vYmplY3RfdHlw ZV9yZWYKKyAgcmVjb3JkX2NsYXNzIChnZGJweV9ib3Jyb3dlZF9yZWY8PiBtb2R1bGUsCisgICAg ICAgICAgICAgICAgZ2RicHlfb2JqZWN0X3R5cGVfYnJlZiBiYXNlX2NsYXNzID0gbnVsbHB0cik7 Cit9OworCitzdGF0aWNfYXNzZXJ0IChnZGI6OmlzX3B5dGhvbl9hbGxvY2F0YWJsZV92PEE+KTsK Kworc3RydWN0IEI6IHB1YmxpYyBBCit7CisgIFB5T2JqZWN0ICptX2I7CisKKyAgc3RhdGljIGdk YnB5X29iamVjdF90eXBlX3JlZgorICByZWNvcmRfY2xhc3MgKGdkYnB5X2JvcnJvd2VkX3JlZjw+ IG1vZHVsZSwKKyAgICAgICAgICAgICAgICBnZGJweV9vYmplY3RfdHlwZV9icmVmIGJhc2VfY2xh c3MgPSBudWxscHRyKTsKK307CisKK3N0YXRpY19hc3NlcnQgKGdkYjo6aXNfcHl0aG9uX2FsbG9j YXRhYmxlX3Y8Qj4pOworCitzdHJ1Y3QgT2JqV2l0aEFsbG9jOiBwdWJsaWMgUHlPYmplY3QKK3sK KyAgY29uc3Qgc3RkOjpzdHJpbmcgKm1zZzsKKyAgUHlPYmplY3QgKm1fbmFtZTsKKyAgUHlPYmpl Y3QgKnNlbGZfY3ljbGU7CisKKyAgc3RhdGljIGdkYnB5X29iamVjdF90eXBlX3JlZgorICByZWNv cmRfY2xhc3MgKGdkYnB5X2JvcnJvd2VkX3JlZjw+IG1vZHVsZSwKKyAgICAgICAgICAgICAgICBn ZGJweV9vYmplY3RfdHlwZV9icmVmIGJhc2VfY2xhc3MgPSBudWxscHRyKTsKK307CisKK3N0YXRp Y19hc3NlcnQgKGdkYjo6aXNfcHl0aG9uX2FsbG9jYXRhYmxlX3Y8T2JqV2l0aEFsbG9jPik7CmRp ZmYgLS1naXQgYS9zcmMvcHktb2JqLXR5cGUuY3BwIGIvc3JjL3B5LW9iai10eXBlLmNwcApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWRkMTA4Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL3B5LW9iai10eXBlLmNwcApAQCAtMCwwICsxLDgwIEBACisvKiBIZWxwZXJzIHJlbGF0 ZWQgdG8gUHl0aG9uIG9iamVjdCB0eXBlCisKKyAgIENvcHlyaWdodCAoQykgMjAyNiBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAicHl0aG9uLWludGVy bmFsLmhwcCIKKyNpbmNsdWRlICJweS1vYmotdHlwZS5ocHAiCisKKy8qIFJldHVybiB0aGUgdHlw ZSdzIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGZyb20gYSBQeVR5cGVPYmplY3QuICAqLworc3RkOjpz dHJpbmcKK2dkYl9weV90cF9uYW1lIChQeVR5cGVPYmplY3QgKnB5X3R5cGUpIG5vZXhjZXB0Cit7 CisgIGF1dG8gcHlvYmpfdG9fc3RyID0gW10oUHlPYmplY3QgKm5hbWUpIC0+IHN0ZDo6c3RyaW5n CisgIHsKKyAgICBjb25zdCBjaGFyICpzID0gUHlVbmljb2RlX0FzVVRGOEFuZFNpemUgKG5hbWUs IG51bGxwdHIpOworICAgIHJldHVybiAocyA9PSBudWxscHRyKSA/ICIiIDogczsKKyAgfTsKKwor I2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwZDAwMDAKKyAgLyogTm90ZTogUHlUeXBlX0dldEZ1 bGx5UXVhbGlmaWVkTmFtZSgpIHdhcyBhZGRlZCBpbiB2ZXJzaW9uIDMuMTMsIGFuZCBpcworICAg ICBwYXJ0IG9mIHRoZSBzdGFibGUgQUJJIHNpbmNlIHZlcnNpb24gMy4xMy4gICovCisgIGdkYnB5 X3JlZjw+IGZ1bGx5X3F1YWxpZmllZF9uYW1lIChQeVR5cGVfR2V0RnVsbHlRdWFsaWZpZWROYW1l IChweV90eXBlKSk7CisgIGlmIChmdWxseV9xdWFsaWZpZWRfbmFtZSA9PSBudWxscHRyKQorICAg IHJldHVybiB7fTsKKworICByZXR1cm4gcHlvYmpfdG9fc3RyIChmdWxseV9xdWFsaWZpZWRfbmFt ZS5nZXQgKCkpOworCisjZWxzZSAvKiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwZDAwMDAgJiYgISBk ZWZpbmVkIChQeV9MSU1JVEVEX0FQSSkgICovCisgIC8qIEZvciBub24taGVhcCB0eXBlcywgdGhl IGZ1bGx5IHF1YWxpZmllZCBuYW1lIGNvcnJlc3BvbmRzIHRvIHRwX25hbWUuICAqLworICBpZiAo ISAoUHlUeXBlX0dldEZsYWdzIChweV90eXBlKSAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpKQorICAg IHJldHVybiBweV90eXBlLT50cF9uYW1lOworCisgIC8qIEluIHRoZSBhYnNlbmNlIG9mIFB5VHlw ZV9HZXRGdWxseVF1YWxpZmllZE5hbWUoKSwgd2UgZmFsbGJhY2sgdXNpbmcKKyAgICAgX19xdWFs bmFtZV9fIGluc3RlYWQuIEhvd2V2ZXIsIHRoZSByZXN1bHQgbWF5IGRpZmZlciBzbGlnaHRseSBp biBzb21lCisgICAgIGNhc2VzLCBlLmcuIHRoZSBtb2R1bGUgbmFtZSBtYXkgYmUgbWlzc2luZy4g ICovCisKKyMgaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzBiMDAwMAorICAvKiBOb3RlOiBQeVR5 cGVfR2V0UXVhbE5hbWUoKSB3YXMgYWRkZWQgaW4gdmVyc2lvbiAzLjExLiAgKi8KKyAgZ2RicHlf cmVmPD4gcXVhbG5hbWUgKFB5VHlwZV9HZXRRdWFsTmFtZSAocHlfdHlwZSkpOworICBpZiAocXVh bG5hbWUgPT0gbnVsbHB0cikKKyAgICByZXR1cm4ge307CisKKyAgcmV0dXJuIHB5b2JqX3RvX3N0 ciAocXVhbG5hbWUuZ2V0ICgpKTsKKworIyBlbHNlCisgIC8qIEluIHRoZSBhYnNlbmNlIG9mIFB5 VHlwZV9HZXRRdWFsTmFtZSgpLCBmYWxsYmFjayBvbiB1c2luZyBQeUhlYXBUeXBlT2JqZWN0Cisg ICAgIHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLgorICAgICBUZXN0ZWQgb24g My4xMCB3aGljaCBpcyB0aGUgb2xkZXN0IHN1cHBvcnRlZCB2ZXJzaW9uIGF0IHRoZSB0aW1lIG9m IHRoaXMKKyAgICAgd3JpdGluZywgaS5lLiBGZWJydWFyeSAyMDI2LiAgSG9wZWZ1bGx5LCB0aGlz IHdvcmthcm91bmQgc2hvdWxkIGdvIGF3YXkKKyAgICAgd2hlbiB0aGUgbWluaW11bSBzdXBwb3J0 ZWQgUHl0aG9uIHZlcnNpb24gaXMgaW5jcmVhc2VkIGFib3ZlIDMuMTAuICAqLworICBQeUhlYXBU eXBlT2JqZWN0ICpodCA9IChQeUhlYXBUeXBlT2JqZWN0ICopIHB5X3R5cGU7CisgIGlmIChodC0+ aHRfcXVhbG5hbWUgPT0gbnVsbHB0cikKKyAgICByZXR1cm4ge307CisKKyAgcmV0dXJuIHB5b2Jq X3RvX3N0ciAoaHQtPmh0X3F1YWxuYW1lKTsKKyMgZW5kaWYKKyNlbmRpZgorfQorCisvKiBSZXR1 cm4gdGhlIHR5cGUncyBmdWxseSBxdWFsaWZpZWQgbmFtZSBmcm9tIGEgUHlPYmplY3QuICAqLwor c3RkOjpzdHJpbmcKK2dkYnB5X3B5X29ial90cF9uYW1lIChQeU9iamVjdCAqc2VsZikgbm9leGNl cHQKK3sKKyAgLyogTm90ZTogUHlfVFlQRSAoKSBpcyBwYXJ0IG9mIHRoZSBzdGFibGUgQUJJIHNp bmNlIHZlcnNpb24gMy4xNC4gICovCisgIHJldHVybiBnZGJfcHlfdHBfbmFtZSAoUHlfVFlQRSAo c2VsZikpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3B5dGhvbi1pbnRlcm5hbC5jcHAgYi9zcmMvcHl0 aG9uLWludGVybmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjFh MjYyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3B5dGhvbi1pbnRlcm5hbC5jcHAKQEAgLTAsMCAr MSw4NyBAQAorI2luY2x1ZGUgInB5dGhvbi1pbnRlcm5hbC5ocHAiCisjaW5jbHVkZSA8Y3N0cmlu Zz4KKworbmFtZXNwYWNlIHsKKworLyogTGlrZSBQeU1vZHVsZV9BZGRPYmplY3QsIGJ1dCBkb2Vz IG5vdCBzdGVhbCBhIHJlZmVyZW5jZSB0bworICAgT0JKRUNULiAgKi8KKworYm9vbAorZ2RiX3B5 bW9kdWxlX2FkZG9iamVjdCAoUHlPYmplY3QgKm1vZCwgY29uc3QgY2hhciAqbmFtZSwgUHlPYmpl Y3QgKm9iamVjdCkKK3sKKyAgUHlfSU5DUkVGIChvYmplY3QpOworICBpbnQgcmVzdWx0ID0gUHlN b2R1bGVfQWRkT2JqZWN0IChtb2QsIG5hbWUsIG9iamVjdCk7CisgIGlmIChyZXN1bHQgPCAwKQor ICAgIFB5X0RFQ1JFRiAob2JqZWN0KTsKKyAgcmV0dXJuIHJlc3VsdCA9PSAwOworfQorCit9IC8v IG5hbWVzcGFjZSBhbm9ueW1vdXMKKworLyogQSB3cmFwcGVyIGZvciBhbGwgdGhlIGluaXRpYWxp emF0aW9uIGxvZ2ljIG9mIHRoZSBQeXRob24gdHlwZS4KKyAgIC0gUHlUeXBlX0Zyb21TcGVjIG9y IFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcyBpbml0aWFsaXplcyB0aGUgb3BhcXVlIHR5cGUKKyAg ICAgUHlUeXBlT2JqZWN0ICh3aGljaCBpcyBpdHNlbGYgYSBQeU9iamVjdCkgZnJvbSB0aGUgcHJv dmlkZWQgUHlUeXBlX1NwZWMuCisgICAtIGdkYl9weW1vZHVsZV9hZGRvYmplY3QgcmVnaXN0ZXJz IHRoZSB0eXBlIGluIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGUuCisgICBJZiBNT0QgaXMgc3VwcGxp ZWQsIHRoZW4gdGhlIHR5cGUgaXMgYWRkZWQgdG8gdGhhdCBtb2R1bGUuICBJZiBNT0QKKyAgIGlz IG5vdCBzdXBwbGllZCwgdGhlIHR5cGUgbmFtZSAoUHlUeXBlX1NwZWMubmFtZSBmaWVsZCkgbXVz dCBiZSBvZgorICAgdGhlIGZvcm0gImdkYi5NdW1ibGUiLCBhbmQgdGhlIHR5cGUgd2lsbCBiZSBh ZGRlZCB0byB0aGUgZ2RiIG1vZHVsZS4KKyAgIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxz ZSBvbiBlcnJvci4gICovCisKK2dkYnB5X29iamVjdF90eXBlX3JlZgorZ2RicHlfdHlwZV9pbml0 aWFsaXplIChnZGJweV9ib3Jyb3dlZF9yZWY8PiAmbW9kLAorCQkgICAgICAgUHlUeXBlX1NwZWMg KnNwZWMsCisJCSAgICAgICBQeU9iamVjdCAqYmFzZXMsCisJCSAgICAgICBib29sIGRpc2FsbG93 X2luc3RhbnRpYXRpb24pCit7CisgIGdkYnB5X3JlZjw+IHJlcyAoYmFzZXMgPT0gbnVsbHB0cgor CQkgICA/IFB5VHlwZV9Gcm9tU3BlYyAoc3BlYykKKwkJICAgOiBQeVR5cGVfRnJvbVNwZWNXaXRo QmFzZXMgKHNwZWMsIGJhc2VzKSk7CisgIGlmIChyZXMgPT0gbnVsbHB0cikKKyAgICByZXR1cm4g bnVsbHB0cjsKKworICBnZGJweV9vYmplY3RfdHlwZV9yZWYgb2JqZWN0X3R5cGUgKHN0ZDo6bW92 ZSAocmVzKSk7CisKKyAgaWYgKG9iamVjdF90eXBlLnNhbWVfYXMgKG51bGxwdHIpKQorICAgIHsK KyAgICAgIFB5RXJyX1ByaW50ICgpOworICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisj aWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMGEwMDAwCisgIC8qIFdoZW4gdXNpbmcgdGhlIFB5dGhv biB1bmxpbWl0ZWQgQVBJLCBkaXNhbGxvd2luZyB0aGUgY3JlYXRpb24gb2YgaW5zdGFuY2VzCisg ICAgIG9mIHRoZSB0eXBlIGluIFB5dGhvbiBpcyBkb25lIGJ5IHNldHRpbmcgdHBfZnJlZSB0byBO VUxMLgorICAgICBXaGVuIHVzaW5nIHRoZSBQeXRob24gbGltaXRlZCBBUEksIFB5VHlwZV9Gcm9t U3BlYyBhbmQgaXRzIHNpYmxpbmdzCisgICAgIGF1dG9tYXRpY2FsbHkgc2V0IHRwX25ldyB0byBQ eVR5cGVfR2VuZXJpY05ldygpLCB3aGljaCBoYXMgZm9yIGNvbnNlcXVlbmNlCisgICAgIG9mIGFs bG93aW5nIHRoZSBjcmVhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhlIHR5cGUgaW4gUHl0aG9uLgor ICAgICBUbyBkaXNhbGxvdyB0aGlzIGJlaGF2aW9yIHdpdGggdGhlIGxpbWl0ZWQgQVBJLCBhIG5l dyBmbGFnIHdhcyBpbnRyb2R1Y2VkCisgICAgIGluIFB5dGhvbiAzLjk6IFB5X1RQRkxBR1NfRElT QUxMT1dfSU5TVEFOVElBVElPTi4KKyAgICAgRm9yIFB5dGhvbiB2ZXJzaW9ucyBvbGRlciB0aGFu IDMuOSwgd2UgbmVlZCB0byBzZXQgZXhwbGljaXRseSB0cF9mcmVlIHRvCisgICAgIE5VTEwgb25j ZSB0aGUgdHlwZSBvYmplY3Qgd2FzIGNyZWF0ZWQuICBUaGlzIHdvcmthcm91bmQgaXMgb25seSBh dmFpbGFibGUKKyAgICAgd2hlbiB0aGUgbGltaXRlZCBBUEkgaXMgZGlzYWJsZWQuICAqLworI2lm IGRlZmluZWQgKFB5X0xJTUlURURfQVBJKQorICAjZXJyb3IgIlRoZSB2ZXJzaW9uIG9mIFB5dGhv biB5b3UgYXJlIHVzaW5nIGRvZXMgbm90IGV4cG9zZSAiIFwKKwkgIlB5X1RQRkxBR1NfRElTQUxM T1dfSU5TVEFOVElBVElPTiBhcyBhIHBhcnQgb2YgdGhlIGxpbWl0ZWQgQyBBUEkuIgorI2Vsc2UK KyAgaWYgKGRpc2FsbG93X2luc3RhbnRpYXRpb24pCisgICAgb2JqZWN0X3R5cGUucHl0eXBlICgp LT50cF9uZXcgPSBudWxscHRyOworCisgIC8qIFB5VHlwZV9SZWFkeSgpIGlzIGFscmVhZHkgY2Fs bGVkIGF0IHRoZSBlbmQgb2YgUHlUeXBlX0Zyb21NZXRhY2xhc3MoKQorICAgICAoY2FsbGVkIGJ5 IGJvdGggUHlUeXBlX0Zyb21TcGVjIGFuZCBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMpLCBzbyBu bworICAgICBuZWVkIHRvIGNhbGwgaXQgYWdhaW4gdW5sZXNzIHRoZSBQeXRob24gdmVyc2lvbiBk b2VzIG5vdCBoYXZlIHRoZSBmbGFnCisgICAgIFB5X1RQRkxBR1NfRElTQUxMT1dfSU5TVEFOVElB VElPTi4gIEluIHRoaXMgY2FzZSwgYSBzZWNvbmQgY2FsbCBhZnRlcgorICAgICBzZXR0aW5nIHRw X25ldyB0byBOVUxMIHdpbGwgZGlzYWxsb3cgdGhlIGluc3RhbnRpYXRpb24gZm9yIHRoZSB0eXBl IGFzCisgICAgIGl0IHVzZWQgdG8gYmUgdGhlIGNhc2Ugd2l0aCBub24taGVhcCB0eXBlcy4gICov CisgIGlmIChQeVR5cGVfUmVhZHkgKG9iamVjdF90eXBlKSA8IDApCisgICAgcmV0dXJuIG51bGxw dHI7CisjZW5kaWYKKyNlbHNlCisgICh2b2lkKSBkaXNhbGxvd19pbnN0YW50aWF0aW9uOworI2Vu ZGlmCisKKyAgY29uc3QgY2hhciAqZG90ID0gc3RycmNociAoc3BlYy0+bmFtZSwgJy4nKTsKKyAg Z2RiX2Fzc2VydCAoZG90ICE9IG51bGxwdHIpOworICBpZiAoZ2RiX3B5bW9kdWxlX2FkZG9iamVj dCAobW9kLmdldCAoKSwgZG90ICsgMSwgb2JqZWN0X3R5cGUuZ2V0ICgpKSA8IDApCisgICAgcmV0 dXJuIG51bGxwdHI7CisKKyAgcmV0dXJuIG9iamVjdF90eXBlOworfQorCg== --------------cppodQLVXVysT6VYZf3htHxi--