From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 3/wxLRyFG2k6RA0AWB0awg (envelope-from ) for ; Mon, 17 Nov 2025 15:27:08 -0500 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=V+nwF80s; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id A73F71E048; Mon, 17 Nov 2025 15:27:08 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,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 server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (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 839011E048 for ; Mon, 17 Nov 2025 15:27:05 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F0FF53858023 for ; Mon, 17 Nov 2025 20:27:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F0FF53858023 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=V+nwF80s Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.14]) by sourceware.org (Postfix) with ESMTPS id 8555C385829B for ; Mon, 17 Nov 2025 20:15:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8555C385829B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8555C385829B Authentication-Results: server2.sourceware.org; arc=fail smtp.remote-ip=198.175.65.14 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1763410509; cv=fail; b=UZdFoNhhhtTdL6mwo6ELRKRDymMaUz8elZDftNNk2644cVNQXo9ektH42T+h8E9H3pNqnYLMESzg4yW8vSXUnJoXKzIl6X3McvXOxm1UCARf5CEMGOLOcavitniJLfRzDE3q/ChOQ5e/ZzfZYNsuN3t1B5f8KQvO5y/iFyqTSQ4= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1763410509; c=relaxed/simple; bh=5lSs+zMThj+agIvK5hTKq2g++poLUi7ERAofClOwSNA=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=jsXTBttaDeD0c6MCSnEReRdHzNmFGsfasf82b1haYBQTkX9Ne39f812bGnqLATOm77Nzqmu9f3vTW2l2SraLeLC3tJWwqezYjnA+cQA2KRzbgEcIy+MDEnxJ+CrTYLWw0D2JgkzgAaMNWm94WUNAZS7pwEaQOB9hPrt95Axm5RI= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8555C385829B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1763410504; x=1794946504; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version:content-transfer-encoding; bh=5lSs+zMThj+agIvK5hTKq2g++poLUi7ERAofClOwSNA=; b=V+nwF80sy0ZZ8PohbavXE/43LvHmLvZVFLBbdLEvyNLwjXSaKVED5SCx vDcwtNrLs1nJyJQkGfrLC0tmYBZrJ1f56wL2g84Y46IbQieYHZT4XDoSK zyuWGFaYRrqI05O62e+SQxvw+gpvxW3Uw59MgXSqW6Ju/naEmfz6j0kxh g2YAJ3Ae+IcXJJhRjQcRQlkhVEKvfSkE4ALp0aH81TSzPDLvG7UtoPFwN pHPb2X8Db02QoNA9/UyHE1eiWK8BpPzR8aUQA0E3QKiFgd0ArLnmxDLS3 Lj1wW3SoqawqfjjbT4gp3vdNOdTmSYxNJ+vK2eqNiElal0Rwt8lZyLpYj g==; X-CSE-ConnectionGUID: Ytia/al+TTCfcZ4f+WaddA== X-CSE-MsgGUID: ekFRS6hHT76r4QKB6IYQxw== X-IronPort-AV: E=McAfee;i="6800,10657,11616"; a="69272164" X-IronPort-AV: E=Sophos;i="6.19,312,1754982000"; d="scan'208";a="69272164" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Nov 2025 12:15:03 -0800 X-CSE-ConnectionGUID: wzejeUPGR7a6l61qXqamgg== X-CSE-MsgGUID: uh1BQSsQTmeRtyLnmgrXzA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,312,1754982000"; d="scan'208";a="213938778" Received: from fmsmsx901.amr.corp.intel.com ([10.18.126.90]) by fmviesa002.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Nov 2025 12:15:01 -0800 Received: from FMSMSX902.amr.corp.intel.com (10.18.126.91) by fmsmsx901.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.27; Mon, 17 Nov 2025 12:15:01 -0800 Received: from fmsedg903.ED.cps.intel.com (10.1.192.145) by FMSMSX902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.27 via Frontend Transport; Mon, 17 Nov 2025 12:15:01 -0800 Received: from CY3PR05CU001.outbound.protection.outlook.com (40.93.201.36) by edgegateway.intel.com (192.55.55.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.27; Mon, 17 Nov 2025 12:14:55 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GWbNOfg030Z3OsL/qXTt7crnaBwesf45W4jZSAMZXjfKopMsRa5ojgfVLcTX1aEmfvVDbA1MLe60F0cIADXjUGawqSfAWyTSE3laD6yrruMFJ3QN0Iwky0y2vAWyPTobvBA6Hw1KdYNMAJsCt4FvIMSG+WdWbRbfdDhl5w60EBaiUNHN9IvJ0O/gt2XXZ5ah+G8voupUa+dN+zAs5srwAZX/nUfaoZbWnDZrLJm4aZPxZjLCyAeWeRTUJ2KD3KSrQmb9FG6+KucSnFgPDbOJriWpqkxKUz/v9ZuLRe5R50FAC+QnrYWPBqMKuI75v80fMZucL3Zl9MtopK9iO0qDQA== 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=xY3PIfhOQFRmz0Lh0vzytaG2mBy2oe6B0KMYlV7ue2c=; b=EIurpw54CunyeSln09931+TWcHnNTx0t6hgmDQ0gY02eSJIb13wLXNRYnVWLZBwhBq8U5XFv3TYMl2zZVLP3DACIes/TynBPKUyuwFi3E6A5Rv9FltfLRlXaQZ/Ggxdoh/ithQiyxtDRm9IcSzRRXFT7Zte+0eRgKQDFN/vy2CIkZA9sICv4XvXmzc7d7PHlEyj8/uHr2RJi2Ulz1OjJ5VL9MNod9Ly9e0/B1d8GV9XK+fJ4skkwSfLAAZNKpX7GAa0urFVQjSbBkrhEoNzJDyOb/HYjAf+YPS4R21EAGaygbJ+985T1KYnFGjuTyqft+iUN+4qZ0HwGDWTb+TW+ug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SN7PR11MB7638.namprd11.prod.outlook.com (2603:10b6:806:34b::22) by MW4PR11MB6714.namprd11.prod.outlook.com (2603:10b6:303:20f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.22; Mon, 17 Nov 2025 20:14:52 +0000 Received: from SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::25b8:16dc:755e:34d1]) by SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::25b8:16dc:755e:34d1%5]) with mapi id 15.20.9320.021; Mon, 17 Nov 2025 20:14:52 +0000 From: "Schimpe, Christina" To: Thiago Jung Bauermann CC: "gdb-patches@sourceware.org" Subject: RE: [PATCH 6/9] gdb: Implement 'bt shadow' to print the shadow stack backtrace. Thread-Topic: [PATCH 6/9] gdb: Implement 'bt shadow' to print the shadow stack backtrace. Thread-Index: AQHcLHyk6BixCK9m9kO4uqiIeHhyW7Tb3WWkgBvHSJA= Date: Mon, 17 Nov 2025 20:14:52 +0000 Message-ID: References: <20250923111842.4091694-1-christina.schimpe@intel.com> <20250923111842.4091694-7-christina.schimpe@intel.com> <874irfsoqc.fsf@linaro.org> In-Reply-To: <874irfsoqc.fsf@linaro.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN7PR11MB7638:EE_|MW4PR11MB6714:EE_ x-ms-office365-filtering-correlation-id: 2c4acda4-b27b-4eae-ef4d-08de2615f78b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|1800799024|376014|38070700021; x-microsoft-antispam-message-info: =?utf-8?B?dFZwOVNXQkw2dVA0QWZWV2xMSEhOQ0JGYlZXN1h0bHBZenpzbVFxNE1xcUZq?= =?utf-8?B?NDc1dnAwa0t4bUwvRzYyVU1FOFBvUUtIZVBFZHNLRjVkMCtEWHM3QjFpS0pP?= =?utf-8?B?UExyb2g5WWkrMWxiOWNvNUZEWUpGNVprVE1UUzVVL0xSNWJ2WUcyZTlXejZP?= =?utf-8?B?YU9YL3pFdTRGUTQzZWp5SXJwWUNqUG9jZDBMUmdMVDNiM0VzaXBTOXFhaWdZ?= =?utf-8?B?OHJDTFVlRjdwdk5RVXp4V2lid1ZVVng3c3AzbXBNZlNlVk1RS1pHMHFxNFQv?= =?utf-8?B?OHFNRk9IKzVLYm9jTWJhdTczVHFtSlhkWWFrWE1qalRIL2RxdlhNNmc3RXJC?= =?utf-8?B?REpnVDR2cTRDR0V4QlE5ejVoRUJjTUJ3WGV3cDdnaXdmU1NUYUZ1bi9vSmhU?= =?utf-8?B?bXhHVG1XR0dMZXVBYUxCOGIxaUtJWUV6WVN0V3ZsNHhuSlpva2t2Y3dWS2xM?= =?utf-8?B?U3pPTUZOU29mcWIxVjl3NEdaNnJCOVRmd0UyY0Ywd3lxL21aZVBDWHh1VWRN?= =?utf-8?B?RmdBa0NRanh4UW1iOFpzQkFNVEdEMWFyejJoNkhmNjg0K0NMUW84NVhuUU5o?= =?utf-8?B?MG1RT21Ca2JkaHdjemhZdHV2Sm9lN29MVkYyT1RBUVBCcXJnYWVqYWU4U3Y4?= =?utf-8?B?dDZhN3c2TjZ2eWp3K3YyUGZFM0NJdm5nc0tnYStpT2pSVnFna2xhWHViR1ZN?= =?utf-8?B?RWpkdHZOZjNjWmZ3dUxZamVHcVpFeUlLQmZVUWZkaGRRUFlxbW1JemdLVkIz?= =?utf-8?B?M210TGxOWTNva2NKeGdQdDgvMGtoc3FGMVRoWFhwak1ZNlpON2xkVTcyRzd0?= =?utf-8?B?cTZpZU11RmYyNDNodU5Xa1BLdzh6NmdsZlZUbWtYRUc2K3VkamtiTmpPUGUx?= =?utf-8?B?emt1a2d3R29Xc2VueVhiU0JkTHlRZzZKSGRMNlpFbWY0czFza2xENmNESHZh?= =?utf-8?B?OGhra3psNTBaRFQvMmRoQUw4S1liTUQ4dXMwU211SDZid2VralUwQWR1QnJG?= =?utf-8?B?V2tVWDZiem5SdVJrUjk1THVsRlA1QzVYNnlSNjhaTjBLdnFzdUdXQm00UUpL?= =?utf-8?B?WTY0bGE4enZpd0p6YisrSnB5dnpzK1VwdC9NbVpYeWJZQmNkcHcxUlI1K0pz?= =?utf-8?B?d0VVelcrMjQwZFh2ZGJtZDlHSld2NGtoK0M1NEdSZERPSjl2cC9HZ21ZcFV3?= =?utf-8?B?M1V2aVFQMDJNYmhramNXcW82dUxlWFd3bUp4RmFRa2RSMktyS3J6L3RoTDZ5?= =?utf-8?B?VXBmWnNZUGtRZTc4QVpsQkcxWCtRc1JiSTVPSUZqWUpxMmJ3VnBLQUY3WTNU?= =?utf-8?B?TVI3d25EcCt1amswQlg5MjA5aUMrem40cXhLc3FWL1VuOUZCRHgrMHBFaHNn?= =?utf-8?B?dGE2Y2ovb0xmZlRFYjlOcDhZSzFEdzBwOGplb21SaldMblNVcXR3UG5zaFd2?= =?utf-8?B?UlR3YVpRb3Y2bUhPOXJDYm1kNEY0WUQrZXJ6dFBhY2tQejByRnZLQTZZS2Q1?= =?utf-8?B?YysxaC8wTExWMlRGZGs4RjlVd09nUzJwbXJnRVNuYStjZVBIRnc4RUx6MUZq?= =?utf-8?B?YzZhSG4wVHlieCtPdXhtZHdUT085N0FvSks5UEhkenFkSFkvektDeklOU1B6?= =?utf-8?B?RGlZZVlwMzgzQW9yNzNXdkNkNlNEdldrYW91WFVyNDNIQzhzbzhWR2NxMjdQ?= =?utf-8?B?VzNqQmJpcThGOWxkWTZWWklqR1QvaE94SDl6WW9wRENZcTRzQzRZOTV4N3I1?= =?utf-8?B?VDBTekNjRjJyS3BONXl6TEI0UUFRN2JyaWdFZFJhOGhjc2pvVHVBd2hvRWhk?= =?utf-8?B?Qm1ZS2U4VzVDRTVQS3hqWGR5V2taRDhNM2xhRStERHhxR2VUS0V5bFlLSkNH?= =?utf-8?B?QnpJVkNjSWVSUHpFN2tnT2s1OW0wSUg4YStnWDFocGUraG1ES3hBaUlNMDlt?= =?utf-8?B?VlhmTGNEYk1HK3lWQ2R5TzYrRG9xUkZrYXA2NmVMeEJmQnZqSlRVS09ZbnNl?= =?utf-8?B?VjlJeFJuVFBnPT0=?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN7PR11MB7638.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(38070700021); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?UHNQaDM0RktGY1lscmRkREZGSDc2bFFmTzl2VHUzankxeE9WWFBLRVI5ck8w?= =?utf-8?B?Tlg0dGhLSTczaHhQUm1vb1FDS0IwNDFZRUhKM2NmY3VJZGlHYnJ6L3ozeWVm?= =?utf-8?B?MkZORW5oR3JUSytzNWRybEgxU3pTZGloRHVsNlAyUUZ5VUVHRU0zMSt3RXdr?= =?utf-8?B?NXdoRFVidU5peDZPaGdzR1VOR0pzVDRTZkVSYVhMUThGNW80Q3lOdy9BK1dl?= =?utf-8?B?K3BSZjI2T2MwaVZ2QWNFb25kdHllKytEQ3ZwZ2VqM2ozblQzaHpvQlFNWEMy?= =?utf-8?B?S1lpNjF3MWdTL29rSFBiSlRLbUpleERvSjVOdFFYZmFuTm85Y0xZSVNyU2xw?= =?utf-8?B?TisrQ0N5N0RiWlVvTDhQSWVsZWlqWUJieFRzZXhJRTJiV004cEJCcXdTUzJt?= =?utf-8?B?Wm5HSk1DK3VjMmtCNkVKL0hPTkR1Tzk3L0lUcWM4Yy9mQUxsSGJiVDVSMkNO?= =?utf-8?B?S1RlblV0R0NRaEozWXd2aWtPd1N1dFFyUjFwb2ZtYkthRTVCNE1LR2p4VVlF?= =?utf-8?B?N1Bndm8xZjYzeTZTRVdwbThiSFArYkM4SVZ0UyszYjZHSk5vQjFWckc4VXg1?= =?utf-8?B?M1JCOTFPTElxQ3crVnRqOG5OYzJOdDd5ektqTGc5RlRkM2FsSU53MlJTK2Rk?= =?utf-8?B?TmdSNGc1Q2xhVWo2V1RBUW9TRDUxVFVBanNCNzBZeDVOWk9mNVhvaFpYSXZP?= =?utf-8?B?Mi9YbWNobWxSNXFOSnJqb0tOVzhpN21oSldHL1dIcjdwRXpQd0N0elcvZEcx?= =?utf-8?B?cHVMM2U1L0RCaXkrWGUzZm9UV3ZpN3JJVXR6ckV6NWtnMlk3MzdzQ1NHSUcx?= =?utf-8?B?S2M5dE14KzlFTnNmYkJ4d2ZwYjcvS2xUM0hOMWNGZ0svalVpYnlxeEFVUVIz?= =?utf-8?B?eVhhQVUxUjRUQ3oyOU15WFNMUG91M0o0Q2dYWjVldDlublZzbnB5RExJSUFa?= =?utf-8?B?VGVYUVNyaTI0TVdPSXdMVk9VdG0rR1RBWk9EVGJnUnlVSG9FVW5sWFBYV1RJ?= =?utf-8?B?TTdkQjNQZlJSN0FSNmxwdzRTeGZJTVBvdC81bFVQYlNxSnUycEpqV2JUNXZ1?= =?utf-8?B?aXpqQllqZHptc2J5djVKTFhRcmc4VkJMMWFzbG1tQUIzVmFQNWtiQUQ2cDNx?= =?utf-8?B?SEMwWDByTThuRDloWjJUQ2x6M2cvRnkxdlF2VFFMY3A5bkNZcW0rVWt3SzJT?= =?utf-8?B?VVNGZWtZV2dZSDRPUGozaUNGRGNOMUZ2ekFGb1E2b2k0dlNDT2RqVEdDNnVp?= =?utf-8?B?ckJoVk85NDgrVnJIc2dWa3RVR1Nic3FIZy8xTngyWDNpVEY4V1F0b3ArSkti?= =?utf-8?B?cnRsRmtObkFvZHdxc0hsY1JoQ0tzdng4S3Y0endGSFpYejhlWG9OSElhR0lq?= =?utf-8?B?THhrNVJjaUxrTlVIYjliMW9kTWZsb1ZNN2p4U0xoYk5PV0dESXJzVGliZnNS?= =?utf-8?B?R2dia0tLaGp4b1RlMnRuN2drbVBwQ08wVHI0dTlvQWUxK2ZDZk8rN2tDSmxT?= =?utf-8?B?TDhLVCtMUWtrTmUvTVZjeXZvWHJ4NFI3QVJGc3pvc0pqcTdDMWwrcDdrWkl6?= =?utf-8?B?cXBlckZWWGx6a2ltcHVsRFJ6SHg4S1d2cTBjT2ZLTVdtdTJ2THpVcjhNWVlt?= =?utf-8?B?bFU4cURBK3FGREIzbFpwbHRSTVYrdGdIRnJpa1hBazVuOUU3dEs0UmpiQlp6?= =?utf-8?B?MGxET3pCNUM0a010RG16Q1NtRnVIUUFxcHRLVUpnc3A0MWpLYkJ1VzZEODh5?= =?utf-8?B?U2I4bGM0NEFrWU5XMVd1VFlKL1Yvc3V0aWdwZnJJcHBKNXJENHJLVk5QREt6?= =?utf-8?B?QzNuS2tUa1hOQ0pMTHM5djBwN2o2TGRuK3JWMlFoQzZQUm5YQ1BsdjhxUjJM?= =?utf-8?B?VlpyMkVjYlIrWXc3VXNDNG1TZTJiVnBxN2dVWXc2NUtqSjVXcWtUR1Z6aEdo?= =?utf-8?B?bU52Q2o3MmJDYjFyTnRUY2ppQktveThXWXVaRmtPTG1zSHptV29VTmM4bFV4?= =?utf-8?B?UGUxWC9oYnRoZUFHSVc4UnRrbzE0dUQrWDcwb291emJlazRROWJJQUwyZHhu?= =?utf-8?B?NVphWHA2MkJieTBibFVvK2pUZGJlS2w0N2lPbGFpNStYUkxhT28vbG1Xdi9z?= =?utf-8?B?bmRuMWpIMnRKMzZkNnhQQWZJMjlCaXhRdXJ1Wk53V2E5YkhIRTVuMnhWRy9o?= =?utf-8?B?WEE9PQ==?= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN7PR11MB7638.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2c4acda4-b27b-4eae-ef4d-08de2615f78b X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Nov 2025 20:14:52.1920 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: eKMnUGTZrK4PJO4jPSlnIxeQscZie3hQeSTpFpk4Rv5uirLN6ajXmQQhURo4ZuDiWbSeCDaQAZsB77fDgtgg8jBwUPz2xpx4gfiVB/uzRjI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB6714 X-OriginatorOrg: intel.com Content-Transfer-Encoding: base64 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org SGkgVGhpYWdvLA0KDQpUaGFua3MgZm9yIHRha2luZyB0aGUgdGltZSB0byBwcm92aWRlIHRoaXMg cmV2aWV34oCUSSByZWFsbHkgYXBwcmVjaWF0ZSB5b3VyIGRldGFpbGVkIGlucHV0IQ0KDQpJ4oCZ dmUgaW1wbGVtZW50ZWQgcGFydCBvZiB5b3VyIGZlZWRiYWNrLCBhbmQgdGhlcmUgYXJlIHN0aWxs IGEgZmV3IG9wZW4gcG9pbnRzIEnigJlkIGxpa2UgdG8gY2xhcmlmeS4NCkkgaG9wZSBJIGRpZG7i gJl0IG1pc3MgYW55IG9mIHlvdXIgY29tbWVudHMsIGFzIHRoZSByZXZpZXcgaGFzIGJlY29tZSBx dWl0ZSBjb21wcmVoZW5zaXZlLg0KDQpQbGVhc2UgZmluZCBteSByZXNwb25zZXMgYW5kIG9wZW4g cXVlc3Rpb25zIGJlbG93LiBMb29raW5nIGZvcndhcmQgdG8geW91ciB0aG91Z2h0cyENCg0KPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBUaGlhZ28gSnVuZyBCYXVlcm1hbm4g PHRoaWFnby5iYXVlcm1hbm5AbGluYXJvLm9yZz4NCj4gU2VudDogRnJlaXRhZywgMzEuIE9rdG9i ZXIgMjAyNSAwNTowMg0KPiBUbzogU2NoaW1wZSwgQ2hyaXN0aW5hIDxjaHJpc3RpbmEuc2NoaW1w ZUBpbnRlbC5jb20+DQo+IENjOiBnZGItcGF0Y2hlc0Bzb3VyY2V3YXJlLm9yZw0KPiBTdWJqZWN0 OiBSZTogW1BBVENIIDYvOV0gZ2RiOiBJbXBsZW1lbnQgJ2J0IHNoYWRvdycgdG8gcHJpbnQgdGhl IHNoYWRvdw0KPiBzdGFjayBiYWNrdHJhY2UuDQo+IA0KPiBDaHJpc3RpbmEgU2NoaW1wZSA8Y2hy aXN0aW5hLnNjaGltcGVAaW50ZWwuY29tPiB3cml0ZXM6DQo+IA0KPiA+IEFkZCBhIHN1YmNvbW1h bmQgJ2J0IHNoYWRvdycgZm9yIHRoZSBvcmRpbmFyeSBiYWNrdHJhY2UgY29tbWFuZA0KPiB3aGlj aA0KPiA+IHByaW50cyB0aGUgc2hhZG93IHN0YWNrIGJhY2t0cmFjZS4NCj4gPiBTaW1pbGFyIHRv IHRoZSBvcmRpbmFyeSBiYWNrdHJhY2UgY29tbWFuZCAnYnQgc2hhZG93JyBjYW4gYmUNCj4gPiBj b25maWd1cmVkIHVzaW5nIENPVU5UIGFuZCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiAtZnJhbWUt aW5mby4NCj4gPiBIb3dldmVyLCB3ZSBhbHdheXMgcHJpbnQgdGhlIGFkZHJlc3MgYW5kIHRoZSBj b21tYW5kIGlzIG5vdCBhZmZlY3RlZA0KPiA+IGJ5IHRoZSBzZXR0aW5nICJwcmludCBhZGRyZXNz IiBhcyB3ZWxsIGFzIHRoZSBzZXR0aW5nICJwcmludCBmcmFtZS1pbmZvDQo+IGxvY2F0aW9uLWFu ZC1hZGRyZXNzIi4NCj4gPiBBbHNvIHdlIGRvIG5vdCBwcmludCB0aGUgZnJhbWUgYXJndW1lbnRz Lg0KPiA+DQo+ID4gVXNhZ2U6IGJhY2t0cmFjZXxidCBzaGFkb3cgW09QVElPTl0uLi4gW0NPVU5U IHwgLUNPVU5UXQ0KPiA+DQo+ID4gSGVscCBvdXRwdXQ6DQo+ID4gfn4NCj4gPiAoZ2RiKSBoZWxw IGJ0IHNoYWRvdw0KPiA+IFByaW50IGJhY2t0cmFjZSBvZiBhbGwgc2hhZG93IHN0YWNrIGZyYW1l cywgb3IgaW5uZXJtb3N0IENPVU5UIGZyYW1lcy4NCj4gPiBVc2FnZTogYmFja3RyYWNlIHNoYWRv dyBbT1BUSU9OXS4uLiBbQ09VTlQgfCAtQ09VTlRdDQo+ID4NCj4gPiBPcHRpb25zOg0KPiA+ICAg LWZyYW1lLWluZm8gYXV0b3xzb3VyY2UtbGluZXxsb2NhdGlvbnxzb3VyY2UtYW5kLWxvY2F0aW9u fGxvY2F0aW9uLWFuZC0NCj4gYWRkcmVzc3xzaG9ydC1sb2NhdGlvbg0KPiA+ICAgICBTZXQgcHJp bnRpbmcgb2Ygc2hhZG93IHN0YWNrIGZyYW1lIGluZm9ybWF0aW9uLg0KPiA+DQo+ID4gV2l0aCBh IG5lZ2F0aXZlIENPVU5ULCBwcmludCBvdXRlcm1vc3QgLUNPVU5UIGVsZW1lbnRzLg0KPiA+IH5+ DQo+IA0KPiBUaGVyZSdzIGFub3RoZXIgdGhyZWFkIGRpc2N1c3Npb24gd2hldGhlciB0byB1c2Ug ImJ0IC1zaGFkb3ciIGluc3RlYWQsDQo+IGFuZC9vciAic2hhZG93LXN0YWNrIGJhY2t0cmFjZSIg c28gSSB3b24ndCBjb21tZW50IG9uIHRoaXMgaGVyZS4NCg0KWWVzLCBJIHdpbGwgZ28gYWhlYWQg d2l0aCAiYnQgLXNoYWRvdyIgZm9yIHRoZSB2Mi4gDQoNCj4gPiBFeGFtcGxlIGZvciB0aGUgb3V0 cHV0IG9mICdidCBzaGFkb3cnIG9uIGFtZDY0IGxpbnV4Og0KPiA+IH5+DQo+ID4gKGdkYikgYnQg c2hhZG93DQo+ID4gLyMwICAweDAwMDAwMDAwMDA0MDExMWYgaW4gY2FsbDEgYXQgYW1kNjQtc2hh ZG93LXN0YWNrLmM6MTQNCj4gPiAvIzEgIDB4MDAwMDAwMDAwMDQwMTEyZiBpbiBtYWluIGF0IGFt ZDY0LXNoYWRvdy1zdGFjay5jOjIxDQo+ID4gLyMyICAweDAwMDA3ZmZmZjdjM2ZlNzAgaW4gX19s aWJjX3N0YXJ0X2NhbGxfbWFpbiBhdA0KPiA+IC4uL3N5c2RlcHMvbnB0bC9saWJjX3N0YXJ0X2Nh bGxfbWFpbi5oOjU4DQo+ID4gLyMzICAweDAwMDA3ZmZmZjdjM2ZmMjAgaW4gX19saWJjX3N0YXJ0 X21haW5faW1wbCBhdA0KPiA+IC4uL2NzdS9saWJjLXN0YXJ0LmM6MTI4DQo+ID4gLyM0ICAweDAw MDAwMDAwMDA0MDEwNDUgaW4gX3N0YXJ0DQo+ID4gfn4NCj4gDQo+IEhlcmUncyBhbiBleGFtcGxl IG91dHB1dCBpbiBteSBhYXJjaDY0LWxpbnV4IHRlc3QgVk06DQo+IA0KPiAoZ2RiKSBidCBzaGFk b3cNCj4gIzAgIDB4MDAwMGFhYWFhYWFhMDhhYyBpbiBjYWxsMiBhdCBhYXJjaDY0LWdjcy1yZXR1 cm4uYzo2NQ0KPiAjMSAgMHgwMDAwYWFhYWFhYWEwOGMwIGluIGNhbGwxIGF0IGFhcmNoNjQtZ2Nz LXJldHVybi5jOjcxDQo+ICMyICAweDAwMDBhYWFhYWFhYTA5ZDQgaW4gbWFpbiBhdCBhYXJjaDY0 LWdjcy1yZXR1cm4uYzoxMTANCj4gIzMgIDB4MDAwMDAwMDAwMDAwMDAwMCBpbiA/Pw0KPiANCj4g QW5kIGhlcmUgaXMgdGhlIHJlZ3VsYXIgYmFja3RyYWNlIGF0IHRoZSBzYW1lIHBvaW50Og0KPiAN Cj4gKGdkYikgYnQNCj4gIzAgIGNhbGwzICgpIGF0IGFhcmNoNjQtZ2NzLXJldHVybi5jOjU4DQo+ ICMxICAweDAwMDBhYWFhYWFhYTA4YWMgaW4gY2FsbDIgKCkgYXQgYWFyY2g2NC1nY3MtcmV0dXJu LmM6NjQNCj4gIzIgIDB4MDAwMGFhYWFhYWFhMDhjMCBpbiBjYWxsMSAoKSBhdCBhYXJjaDY0LWdj cy1yZXR1cm4uYzo3MA0KPiAjMyAgMHgwMDAwYWFhYWFhYWEwOWQ0IGluIG1haW4gKCkgYXQgYWFy Y2g2NC1nY3MtcmV0dXJuLmM6MTA3DQo+IA0KPiBJIGhhdmUgYSBmZXcgY29tbWVudHMgb24gdGhp cyBvdXRwdXQsIGF0IGxlYXN0IGFzIGl0IGlzIGFwcGVhcnMgZm9yIEdDUy4gSSdtDQo+IGFzc3Vt aW5nIHg4NiBzaGFkb3cgc3RhY2sgb3V0cHV0IGlzIHNpbWlsYXI6DQo+IA0KPiAxLiBUaGUgZmly c3QgdGhpbmcgdGhhdCBJIG5vdGljZSBpcyB0aGF0IHRoZSBudW1iZXIgb2YgdGhlIGZyYW1lcyBk b24ndCBtYXRjaA0KPiBiZXR3ZWVuIHRoZSByZWd1bGFyIHN0YWNrIGFuZCB0aGUgc2hhZG93IHN0 YWNrOiBmcmFtZSAwIGluIHRoZSByZWd1bGFyIHN0YWNrDQo+IGRvZXNuJ3QgZXhpc3QgaW4gdGhl IHNoYWRvdyBzdGFjaywgcmVndWxhciBmcmFtZSAxIGlzIHNoYWRvdyBmcmFtZSAwLCBhbmQgc28N Cj4gb24uDQo+IA0KPiBJIHRoaW5rIHRoaXMgaXMgY29uZnVzaW5nLiBJdCBtYWtlcyBzZW5zZSB0 aGF0IGZyYW1lIDAgZG9lc24ndCBhcHBlYXIgaW4gdGhlDQo+IHNoYWRvdyBzdGFjayBiYWNrdHJh Y2UgYmVjYXVzZSB0aGVyZSByZWFsbHkgaXNuJ3QgYW4gZW50cnkgZm9yIGl0IGluIHRoZQ0KPiBz aGFkb3cgc3RhY2ssIGJ1dCBJIHRoaW5rIHRoZSBzaGFkb3cgZW50cmllcyBzaG91bGQgc3RhcnQg d2l0aCBudW1iZXIgMSwgdG8NCj4gYmUgY29uc2lzdGVudC4NCg0KTWgsIGl0J3MgcHJvYmFibHkg YmV0dGVyIHRvIGFsaWduLCBJIGFncmVlLg0KSSdsbCBnbyB3aXRoIHN0YXJ0aW5nIGZyYW1lICMx IGluIHRoZSB2MiwgYW5kIGFkZCBhIGNvbW1lbnQgYWJvdXQgdGhhdCBpbiB0aGUNCmNvbW1pdCBt ZXNzYWdlLg0KDQo+IDIuIFRoZSBsaW5lIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byB0aGUgcmV0 dXJuIGFkZHJlc3NlcyBkb24ndCBtYXRjaA0KPiBiZXR3ZWVuIHRoZSByZWd1bGFyIGJhY2t0cmFj ZSBhbmQgdGhlIHNoYWRvdyBiYWNrdHJhY2UsIGV2ZW4gdGhvdWdoIHRoZQ0KPiByZXR1cm4gYWRk cmVzc2VzIGFyZSB0aGUgc2FtZS4gSSB3b3VsZCBzYXkgdGhpcyBpcyBhIGJ1Zy4gUGVyaGFwcyB0 aGVyZSBjYW4gYmUNCj4gYSB0ZXN0IG1ha2luZyBzdXJlIHRoZXkgbWF0Y2gsIGlmIGl0J3Mgbm90 IHRvbyBjb21wbGljYXRlZD8NCg0KVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyBleHBsYWluZWQgaW4g YSBjb21tZW50IGluIGRvX3ByaW50X3NoYWRvd19zdGFja19mcmFtZV9pbmZvOg0KDQogIC8qIElu IGNvbnRyYXN0IHRvIGZpbmRfZnJhbWVfc2FsIHdoaWNoIGlzIHVzZWQgZm9yIHRoZSBvcmRpbmFy eSBiYWNrdHJhY2UNCiAgICAgY29tbWFuZCwgd2UgYWx3YXlzIHdhbnQgdG8gcHJpbnQgdGhlIGxp bmUgdGhhdCBpcyBhY3R1YWxseSByZWZlcnJlZA0KICAgICB0byBieSB0aGUgYWRkcmVzcyBpbiB0 aGUgbGluZXRhYmxlLiAgVGhhdCdzIHdoeSB3ZSBhbHdheXMgcGFzcyAwIGhlcmUNCiAgICAgYXMg c2Vjb25kIGFyZ3VtZW50LiAgKi8NCg0KRG8geW91IHRoaW5rIHdlIHNob3VsZCBhbGlnbiB0aGlz IHdpdGggdGhlIGJlaGF2aW9yIG9mIHRoZSBvcmRpbmFyeSBiYWNrdHJhY2UgY29tbWFuZA0KaGVy ZSBhcyB3ZWxsPw0KSeKAmW0gbm90IGVudGlyZWx5IHN1cmUgaWYgdGhhdCBhcHByb2FjaCBtaWdo dCBiZSB0b28gc3RyYWlnaHRmb3J3YXJkLCBzaW5jZSB3ZSBjYW7igJl0IHNpbXBseQ0KY2FsbCB0 aGUgZ2V0X2ZyYW1lX2FkZHJlc3NfaW5fYmxvY2sgZnVuY3Rpb24gYXMgdGhlIG9yZGluYXJ5IGJ0 IGNvbW1hbmQgZG9lcyB3aGVuDQppbnZva2luZyBpdCBmcm9tIGZpbmRfZnJhbWVfc2FsLg0KDQo+ IDMuIE9uZSBkaWZmZXJlbmNlIGJldHdlZW4gbXkgR0NTIHRlc3QgcHJvZ3JhbXMgYW5kIHlvdXIg eDg2IHRlc3QgcHJvZ3JhbXMNCj4gaXMgdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzaGFkb3cgc3Rh Y2sgaXMgZW5hYmxlZC4gSW4geW91ciBjYXNlLCBpdCBhcHBlYXJzIHRvDQo+IGJlIGRvbmUgYnkg Z2xpYmMgb3IgdGhlIGR5bmFtaWMgbG9hZGVyLCB2ZXJ5IGVhcmx5IGluIHRoZSBwcm9jZXNzIGV4 ZWN1dGlvbi4NCj4gRm9yIHRoZSBBQXJjaDY0IHRlc3RjYXNlcyBJJ20gZG9pbmcgaXQgZXhwbGlj aXRseSBpbiBtYWluIGl0c2VsZiwgc28gdGhhdCB0aGUgdGVzdA0KPiBwcm9ncmFtcyBkb24ndCBo YXZlIHRvIGRlcGVuZCBvbiBhIHN1cHBvcnRlZCBnbGliYyBvciBsb2FkZXIuIEFsbCB0aGlzIHRv IHNheQ0KPiB0aGF0IHRoZXJlIGlzIG5vIEdDUyBlbnRyeSBiZWZvcmUgbWFpbiwgeWV0IG9uZSBh cHBlYXJzIGluIHRoZSBvdXRwdXQgYWJvdmUNCj4gd2l0aCBhIHplcm9lZCByZXR1cm4gYWRkcmVz cy4gSSB0aGluayB0aGlzIGNhbiBiZSBzb2x2ZWQgYnkgc3RvcHBpbmcgdGhlDQo+IGJhY2t0cmFj ZSBsb29wIGlmIGdkYmFyY2hfdG9wX2FkZHJfZW1wdHlfc2hhZG93X3N0YWNrIHJldHVybnMgdHJ1 ZSBpbg0KPiBiYWNrdHJhY2Vfc2hhZG93X2NvbW1hbmQuIEkgaGF2ZSBhIHN1Z2dlc3Rpb24gYWJv dXQgdGhpcyBmdXJ0aGVyIGRvd24uDQoNClllcywgdGhhdCBtYWtlcyBzZW5zZSB0byBtZS4NCg0K PiA+IGRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIudGV4aW5m byBpbmRleA0KPiA+IGU4NTE1ODgzODIwLi5lYmRhNDU0NmI1OCAxMDA2NDQNCj4gPiAtLS0gYS9n ZGIvZG9jL2dkYi50ZXhpbmZvDQo+ID4gKysrIGIvZ2RiL2RvYy9nZGIudGV4aW5mbw0KPiA+IEBA IC04ODQwLDYgKzg4NDAsNTMgQEAgRGlzcGxheSBhbiBhYnNvbHV0ZSBmaWxlbmFtZS4NCj4gPiAg U2hvdyB0aGUgY3VycmVudCB3YXkgdG8gZGlzcGxheSBmaWxlbmFtZXMuDQo+ID4gIEBlbmQgdGFi bGUNCj4gPg0KPiA+ICtAc3Vic2VjdGlvbiBTaGFkb3cgc3RhY2sgYmFja3RyYWNlDQo+ID4gK0B2 YWx1ZXtHREJOfSBwcm92aWRlcyBhIHN1YmNvbW1hbmQgb2YgdGhlIGJhY2t0cmFjZSBjb21tYW5k IHRvDQo+IHByaW50DQo+ID4gK3RoZSBzaGFkb3cgc3RhY2sgYmFja3RyYWNlLg0KPiA+ICsNCj4g PiArQGFuY2hvcntzaGFkb3dzdGFjay1iYWNrdHJhY2UtY29tbWFuZH0NCj4gPiArQGtpbmRleCBi YWNrdHJhY2Ugc2hhZG93DQo+ID4gK0BraW5kZXggYnQgc2hhZG93IEByeyhAY29kZXtiYWNrdHJh Y2Ugc2hhZG93fSl9IFRvIHByaW50IGEgYmFja3RyYWNlDQo+ID4gK29mIHRoZSBlbnRpcmUgc2hh ZG93IHN0YWNrLCB1c2UgdGhlIEBjb2Rle2JhY2t0cmFjZSBzaGFkb3d9IGNvbW1hbmQsDQo+ID4g K29yIGl0cyBhbGlhcyBAY29kZXtidCBzaGFkb3d9LiAgVGhpcyBjb21tYW5kIHdpbGwgcHJpbnQg b25lIGxpbmUgcGVyDQo+ID4gK2VsZW1lbnQgKHNvLWNhbGxlZCBzaGFkb3cgc3RhY2sgZnJhbWVz KSBvbiB0aGUgc2hhZG93IHN0YWNrLg0KPiA+ICsNCj4gPiArQSBzaGFkb3cgc3RhY2sgaXMgc3Vw cG9ydGVkLCBmb3IgaW5zdGFuY2UsIHdpdGggdGhlIEludGVsDQo+ID4gK0NvbnRyb2wtRmxvdyBF bmZvcmNlbWVudCBUZWNobm9sb2d5IChAeHJlZntDRVR9KSBvbiB4ODYuDQo+IA0KPiBDYW4geW91 IGFsc28gYWRkOg0KPiANCj4gLi4uIGFuZCB0aGUgR3VhcmRlZCBDb250cm9sIFN0YWNrIGZlYXR1 cmUgKEB4cmVme0dDU30pIG9uIEFBcmNoNjQuDQo+IA0KPiB3aGljaCB3b3VsZCBhbHNvIHJlcXVp cmUgYSBAbm9kZSBlbnRyeSBoZXJlOg0KDQpZZXMsIHdpbGwgYWRkLg0KDQo+IEBAIC0yNzExMiw2 ICsyNzExMyw3IEBAIGluZm9ybWF0aW9uIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgY29yZSBmaWxl LA0KPiBhbmQgd2lsbCBzaG93IG9uZSBvZiB0aGUgYWJvdmUgIG1lc3NhZ2VzIGRlcGVuZGluZyBv biB3aGV0aGVyIHRoZQ0KPiBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMgbW9kZSBpcyBzZWxl Y3RlZC4NCj4gIEB4cmVme01lbW9yeSBUYWdnaW5nfS4gQHhyZWZ7TWVtb3J5fS4NCj4gDQo+ICtA bm9kZSBHQ1MNCj4gIEBzdWJzdWJzZWN0aW9uIEFBcmNoNjQgR3VhcmRlZCBDb250cm9sIFN0YWNr ICBAY2luZGV4IEd1YXJkZWQgQ29udHJvbA0KPiBTdGFjaywgQUFyY2g2NCAgQGNpbmRleCBHQ1Ms IEFBcmNoNjQNCj4gDQo+IDxzbmlwPg0KPiANCj4gPiArLyogUmV0dXJuIHRydWUsIGlmIFBDIGlz IGluIHRoZSBtaWRkbGUgb2YgYSBzdGF0ZW1lbnQuICBOb3RlIHRoYXQgaW4gdGhlDQo+ID4gKyAg IG1pZGRsZSBvZiBhIHN0YXRlbWVudCBQQyByYW5nZSBpbmNsdWRlcyBzYWwuZW5kIChTQUwuUEMs IFNBTC5FTkRdLg0KPiA+ICsgICBSZXR1cm4gZmFsc2UsIGlmDQo+ID4gKyAgIC0gU0FMLklTX1NU TVQgaXMgZmFsc2UNCj4gPiArICAgLSB0aGVyZSBpcyBubyBsb2NhdGlvbiBpbmZvcm1hdGlvbiBh c3NvY2lhdGVkIHdpdGggdGhpcyBTQUwsIHdoaWNoDQo+ID4gKyAgIGNvdWxkIGhhcHBlbiBpbiBj YXNlIG9mIGlubGluZWQgZnVuY3Rpb25zDQo+ID4gKyAgIC0gUEMgaXMgbm90IGluIHRoZSByYW5n ZSAoU0FMLlBDLCBTQUwuRU5EXS4NCj4gPiArICAgVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRv IHN0YWNrLmM6ZnJhbWVfc2hvd19hZGRyZXNzIGJ1dCBpcyB1c2VkDQo+ID4gKyAgIHRvIGRldGVy bWluZSBpZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHN0YXRlbWVudCBvbmx5LCBub3QgdG8g ZGVjaWRlDQo+ID4gKyAgIGlmIHdlIHNob3VsZCBwcmludCBhIGZyYW1lJ3MgYWRkcmVzcy4gICov DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbA0KPiA+ICtwY19pbl9taWRkbGVfb2Zfc3RhdGVtZW50 IChDT1JFX0FERFIgcGMsIHN5bXRhYl9hbmRfbGluZSBzYWwpIHsNCj4gPiArICBpZiAoc2FsLmlz X3N0bXQgPT0gZmFsc2UpDQo+ID4gKyAgICByZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsgIC8q IElmIHRoZXJlIGlzIGEgbGluZSBudW1iZXIsIGJ1dCBubyBQQywgdGhlbiB0aGVyZSBpcyBubyBs b2NhdGlvbg0KPiA+ICsgICAgIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNhbC4g IFRoZSBvbmx5IHdheSB0aGF0IHNob3VsZA0KPiA+ICsgICAgIGhhcHBlbiBpcyBmb3IgdGhlIGNh bGwgc2l0ZXMgb2YgaW5saW5lZCBmdW5jdGlvbnMgKFNBTCBjb21lcyBmcm9tDQo+ID4gKyAgICAg ZmluZF9mcmFtZV9zYWwpLiAgT3RoZXJ3aXNlLCB3ZSB3b3VsZCBoYXZlIHNvbWUgUEMgcmFuZ2Ug aWYgdGhlDQo+IA0KPiBJbiB0aGUgY2FzZSBvZiBzdGFjay5jOmZyYW1lX3Nob3dfYWRkcmVzcywg U0FMIGNvbWVzIGZyb20gZmluZF9mcmFtZV9zYWwsDQo+IGJ1dCBpbiB0aGlzIGNhc2UgaXQgY29t ZXMgZnJvbSBmaW5kX3BjX2xpbmUsIHJpZ2h0Pw0KDQpZZXMsIGl0IGNvbWVzIGZyb20gZmluZF9z YWxfZm9yX3BjICh3aGVuIHJlYmFzZWQgb24gbGF0ZXN0IG1hc3RlciwgZmluZF9wY19saW5lIHdh cyByZW5hbWVkKS4NCg0KPiBEb2VzIHRoZSBjb21tZW50IHN0aWxsIGFwcGx5IGluIHRoaXMgY2Fz ZT8NCg0KR29vZCBxdWVzdGlvbiwgSSByZW1lbWJlciBJIHN0dW1ibGVkIG92ZXIgdGhpcyBhIGNv dXBsZSBvZiB0aW1lcyB3aGVuIGltcGxlbWVudGluZyB0aGlzLg0KSW4gYW55IGNhc2UsIHRoZSBj b21tZW50IG5lZWRzIHRvIGJlIGNvcnJlY3RlZCB0byAiKFNBTCBjb21lcyBmcm9tIGZpbmRfc2Fs X2Zvcl9wYykuIg0KSWYgd2UgbmVlZCB0aGlzIGNoZWNrLCBJIGFtIG5vdCBzdXJlLiBJbiBteSBl eHBlcmltZW50cyB3aXRoIGlubGluZWQgZnVuY3Rpb25zIEkgY291bGQNCm5vdCByZXByb2R1Y2Ug dGhhdCBzY2VuYXJpby4gQnV0IEkga2VwdCBpdCwgdG8gYmUgc2FmZS4NCg0KPiA+ICsgICAgIFNB TCBjYW1lIGZyb20gYSBsaW5lIHRhYmxlLiAgSG93ZXZlciwgYXMgd2UgZG9uJ3QgaGF2ZSBhIGZy YW1lIGZvcg0KPiA+ICsgICAgIHRoaXMgZnVuY3Rpb24gd2UgY2Fubm90IGFzc2VydCAoaW4gY29u dHJhc3QgdG8NCj4gPiArICAgICBmcmFtZV9zaG93X2FkZHJlc3MpLiAgKi8NCj4gPiArICBpZiAo c2FsLmxpbmUgIT0gMCAmJiBzYWwucGMgPT0gMCAmJiBzYWwuZW5kID09IDApDQo+ID4gKyAgICBy ZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBwYyA+IHNhbC5wYyAmJiBwYyA8PSBz YWwuZW5kOyB9DQo+ID4gKw0KPiA+ICtlbnVtIGNsYXNzIHNzcF91bndpbmRfc3RvcF9yZWFzb24N Cj4gPiArew0KPiA+ICsgIC8qIE5vIHBhcnRpY3VsYXIgcmVhc29uOyBlaXRoZXIgd2UgaGF2ZW4n dCB0cmllZCB1bndpbmRpbmcgeWV0LCBvciB3ZQ0KPiA+ICsgICAgIGRpZG4ndCBmYWlsLiAgKi8N Cj4gPiArICBub19lcnJvciA9IDAsDQo+ID4gKw0KPiA+ICsgIC8qIFdlIGNvdWxkIG5vdCByZWFk IHRoZSBtZW1vcnkgb2YgdGhlIHNoYWRvdyBzdGFjayBlbGVtZW50LiAgKi8NCj4gPiArICBtZW1v cnlfcmVhZF9lcnJvcg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogSW5mb3JtYXRpb24gb2YgYSBz aGFkb3cgc3RhY2sgZnJhbWUgYmVsb25naW5nIHRvIGEgc2hhZG93IHN0YWNrDQo+IGVsZW1lbnQN Cj4gPiArICAgYXQgc2hhZG93IHN0YWNrIHBvaW50ZXIgU1NQLiAgKi8NCj4gPiArDQo+ID4gK2Ns YXNzIHNoYWRvd19zdGFja19mcmFtZV9pbmZvDQo+ID4gK3sNCj4gPiArcHVibGljOg0KPiA+ICsg IC8qIElmIHBvc3NpYmxlLCB1bndpbmQgdGhlIHByZXZpb3VzIHNoYWRvdyBzdGFjayBmcmFtZSBp bmZvLiAgUkFOR0UgaXMNCj4gPiArICAgICB0aGUgc2hhZG93IHN0YWNrIG1lbW9yeSByYW5nZSBb c3RhcnRfYWRkcmVzcywgZW5kX2FkZHJlc3MpDQo+IGJlbG9uZ2luZw0KPiA+ICsgICAgIHRvIHRo aXMgZnJhbWUncyBzaGFkb3cgc3RhY2sgcG9pbnRlci4gIElmIHdlIGNhbm5vdCB1bndpbmQgdGhl DQo+ID4gKyAgICAgcHJldmlvdXMgZnJhbWUgaW5mbywgc2V0IHRoZSB1bndpbmRfc3RvcF9yZWFz b24gYXR0cmlidXRlLiAgSWYgd2UNCj4gPiArICAgICByZWFjaGVkIHRoZSBib3R0b20gb2YgdGhl IHNoYWRvdyBzdGFjayBqdXN0IGRvbid0IHJldHVybiBhDQo+ID4gK3ZhbHVlLiAgKi8NCj4gPiAr ICBzdGQ6Om9wdGlvbmFsPHNoYWRvd19zdGFja19mcmFtZV9pbmZvPg0KPiB1bndpbmRfcHJldl9z aGFkb3dfc3RhY2tfZnJhbWVfaW5mbw0KPiA+ICsgICAgKGdkYmFyY2ggKmdkYmFyY2gsIHN0ZDo6 cGFpcjxDT1JFX0FERFIsIENPUkVfQUREUj4gcmFuZ2UpOw0KPiA+ICsNCj4gPiArICAvKiBUaGUg c2hhZG93IHN0YWNrIHBvaW50ZXIuICAqLw0KPiA+ICsgIENPUkVfQUREUiBzc3A7DQo+IA0KPiBQ bGVhc2UgYWRkIGFuIGVtcHR5IGxpbmUgYmV0d2VlbiBlYWNoIG1lbWJlciB2YXJpYWJsZSBhbmQg dGhlIG5leHQNCj4gdmFyaWFibGUncyBkb2N1bWVudGF0aW9uIGNvbW1lbnQuDQoNCkZpeGVkLg0K DQo+ID4gKyAgLyogVGhlIHZhbHVlIG9mIHRoZSBzaGFkb3cgc3RhY2sgYXQgU1NQLiAgKi8NCj4g PiArICBDT1JFX0FERFIgdmFsdWU7DQo+ID4gKyAgLyogVGhlIGxldmVsIG9mIHRoZSBlbGVtZW50 IG9uIHRoZSBzaGFkb3cgc3RhY2suICAqLw0KPiA+ICsgIHVuc2lnbmVkIGxvbmcgbGV2ZWw7DQo+ ID4gKyAgLyogSWYgdW53aW5kaW5nIG9mIHRoZSBwcmV2aW91cyBmcmFtZSBpbmZvIGZhaWxzIGFz c2lnbiB0aGlzIHZhbHVlIHRvIGENCj4gPiArICAgICBtYXRjaGluZyBjb25kaXRpb24gc3NwX3Vu d2luZF9zdG9wX3JlYXNvbg0KPiA+ICsgICAgID4gc3NwX3Vud2luZF9zdG9wX3JlYXNvbjo6bm9f ZXJyb3IuICAqLw0KPiA+ICsgIHNzcF91bndpbmRfc3RvcF9yZWFzb24gdW53aW5kX3N0b3BfcmVh c29uDQo+ID4gKyAgICA9IHNzcF91bndpbmRfc3RvcF9yZWFzb246Om5vX2Vycm9yOyB9Ow0KPiA+ ICsNCj4gPiArc3RhdGljDQo+ID4gK2dkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IGZpbmRf cGNfZnVubmFtZSAoQ09SRV9BRERSIHBjKQ0KPiANCj4gVGhlIHJldHVybiB0eXBlIHNob3VsZCBi ZSB0b2dldGhlciB3aXRoIHRoZSBzdGF0aWMuDQo+IEFsc28sIHRoaXMgZnVuY3Rpb24gbmVlZHMg YSBkb2N1bWVudGF0aW9uIGNvbW1lbnQuDQoNCkZpeGVkLg0KDQo+ID4gK3sNCj4gPiArICBzeW1i b2wgKmZ1bmMgPSBmaW5kX3BjX2Z1bmN0aW9uIChwYyk7DQo+ID4gKyAgaWYgKGZ1bmMpDQo+ID4g KyAgICByZXR1cm4gZmluZF9zeW1ib2xfZnVubmFtZSAoZnVuYyk7DQo+ID4gKw0KPiA+ICsgIGdk Yjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IGZ1bm5hbWU7ICBib3VuZF9taW5pbWFsX3N5bWJv bA0KPiA+ICsgbXN5bWJvbCA9IGxvb2t1cF9taW5pbWFsX3N5bWJvbF9ieV9wYyAocGMpOyAgaWYg KG1zeW1ib2wubWluc3ltICE9DQo+ID4gKyBudWxscHRyKQ0KPiA+ICsgICAgZnVubmFtZS5yZXNl dCAoeHN0cmR1cCAobXN5bWJvbC5taW5zeW0tPnByaW50X25hbWUgKCkpKTsNCj4gDQo+IEp1c3Qg cmVwZWF0aW5nIFRvbSdzIGNvbW1lbnQgZnJvbSBwYXRjaCA0Og0KPiANCj4gVGhpcyBzaG91bGQg dXNlIG1ha2VfdW5pcXVlX3hzdHJkdXAgYW5kIHBsYWluIGFzc2lnbm1lbnQuDQoNCkZpeGVkLg0K DQo+ID4gKw0KPiA+ICsgIHJldHVybiBmdW5uYW1lOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBQ cmludCBpbmZvcm1hdGlvbiBvZiBzaGFkb3cgc3RhY2sgZnJhbWUgaW5mbyBGUkFNRS4gIFRoZSBv dXRwdXQgaXMNCj4gPiArICAgZm9ybWF0dGVkIGFjY29yZGluZyB0byBQUklOVF9XSEFULiAgRm9y IHRoZSBtZWFuaW5nIG9mIFBSSU5UX1dIQVQsDQo+IHNlZQ0KPiA+ICsgICBlbnVtIHByaW50X3do YXQgY29tbWVudHMgaW4gZnJhbWUuaC4gIE5vdGUgdGhhdCBQUklOVF9XSEFUIGlzDQo+IG92ZXJy aWRkZW4sDQo+ID4gKyAgIGlmIFBSSU5UX09QVElPTlMucHJpbnRfZnJhbWVfaW5mbyAhPSBwcmlu dF9mcmFtZV9pbmZvX2F1dG8uICAqLw0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQNCj4gPiArZG9f cHJpbnRfc2hhZG93X3N0YWNrX2ZyYW1lX2luZm8NCj4gPiArICAodWlfb3V0ICp1aW91dCwgZ2Ri YXJjaCAqZ2RiYXJjaCwNCj4gPiArICAgY29uc3Qgc2hhZG93X3N0YWNrX3ByaW50X29wdGlvbnMg JnByaW50X29wdGlvbnMsDQo+ID4gKyAgIGNvbnN0IHNoYWRvd19zdGFja19mcmFtZV9pbmZvICZm cmFtZSwgcHJpbnRfd2hhdCBwcmludF93aGF0KSB7DQo+ID4gKyAgaWYgKHByaW50X29wdGlvbnMu cHJpbnRfZnJhbWVfaW5mbyAhPSBwcmludF9mcmFtZV9pbmZvX2F1dG8pDQo+ID4gKyAgICB7DQo+ ID4gKyAgICAgIC8qIFVzZSB0aGUgc3BlY2lmaWMgZnJhbWUgaW5mb3JtYXRpb24gZGVzaXJlZCBi eSB0aGUgdXNlci4gICovDQo+ID4gKyAgICAgIHByaW50X3doYXQNCj4gPiArCT0gKnByaW50X2Zy YW1lX2luZm9fdG9fcHJpbnRfd2hhdCAocHJpbnRfb3B0aW9ucy5wcmludF9mcmFtZV9pbmZvKTsN Cj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgLyogSW4gY29udHJhc3QgdG8gZmluZF9mcmFtZV9z YWwgd2hpY2ggaXMgdXNlZCBmb3IgdGhlIG9yZGluYXJ5IGJhY2t0cmFjZQ0KPiA+ICsgICAgIGNv bW1hbmQsIHdlIGFsd2F5cyB3YW50IHRvIHByaW50IHRoZSBsaW5lIHRoYXQgaXMgYWN0dWFsbHkg cmVmZXJyZWQNCj4gPiArICAgICB0byBieSB0aGUgYWRkcmVzcyBpbiB0aGUgbGluZXRhYmxlLiAg VGhhdCdzIHdoeSB3ZSBhbHdheXMgcGFzcyAwIGhlcmUNCj4gPiArICAgICBhcyBzZWNvbmQgYXJn dW1lbnQuICAqLw0KPiA+ICsgIHN5bXRhYl9hbmRfbGluZSBzYWwgPSBmaW5kX3BjX2xpbmUgKGZy YW1lLnZhbHVlLCAwKTsNCj4gPiArDQo+ID4gKyAgaWYgKHNob3VsZF9wcmludF9sb2NhdGlvbiAo cHJpbnRfd2hhdCkgfHwgc2FsLnN5bXRhYiA9PSBudWxscHRyKQ0KPiA+ICsgICAgew0KPiA+ICsg ICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBmdW5uYW1lDQo+ID4gKwk9IGZpbmRf cGNfZnVubmFtZSAoZnJhbWUudmFsdWUpOw0KPiANCj4gVGhpcyBsaW5lIGZpdHMgaW4gODAgY29s dW1ucyBhbmQgZG9lc24ndCBuZWVkIHRvIGJlIGJyb2tlbi4NCg0KRXZlbiB0aG91Z2ggdGhlcmUg aXMgdGhpcyBzb2Z0IGxpbWl0IEkgYWdyZWUgaXQgbG9va3MgYmV0dGVyIHVuYnJva2VuLg0KSSBj aGFuZ2VkIHRoaXMuDQoNCj4gPiArICAgICAgeyAvKiBFeHRyYSBzY29wZSB0byBwcmludCBmcmFt ZSB0dXBsZS4gICovDQo+ID4gKwl1aV9vdXRfZW1pdF90dXBsZSB0dXBsZV9lbWl0dGVyICh1aW91 dCwgInNoYWRvdy1zdGFjay1mcmFtZSIpOw0KPiA+ICsNCj4gPiArCWFubm90YXRlX3NoYWRvd3N0 YWNrX2ZyYW1lX2JlZ2luIChmcmFtZS5sZXZlbCwgZ2RiYXJjaCwNCj4gPiArCQkJCQkgIGZyYW1l LnZhbHVlKTsNCj4gPiArDQo+ID4gKwl1aW91dC0+dGV4dCAoIiMiKTsNCj4gPiArCXVpb3V0LT5m aWVsZF9mbXRfc2lnbmVkICgyLCB1aV9sZWZ0LCAibGV2ZWwiLCBmcmFtZS5sZXZlbCk7DQo+ID4g Kw0KPiA+ICsJYW5ub3RhdGVfc2hhZG93c3RhY2tfZnJhbWVfYWRkcmVzcyAoKTsNCj4gPiArDQo+ ID4gKwkvKiBPbiB4ODYgdGhlcmUgY2FuIGJlIGEgc2hhZG93IHN0YWNrIHRva2VuIGF0IGJpdCA2 My4gIEZvciB4MzIsDQo+ID4gKwkgICB0aGUgYWRkcmVzcyBzaXplIGlzIG9ubHkgMzIgYml0LiAg VGh1cywgd2Ugc3RpbGwgbXVzdCB1c2UNCj4gPiArCSAgIGdkYmFyY2hfc2hhZG93X3N0YWNrX2Vs ZW1lbnRfc2l6ZV9hbGlnbmVkIChhbmQgbm90DQo+ID4gKwkgICBnZGJhcmNoX2FkZHJfYml0KSB0 byBkZXRlcm1pbmUgdGhlIHdpZHRoIG9mIHRoZSBhZGRyZXNzIHRvIGJlDQo+ID4gKwkgICBwcmlu dGVkLiAgKi8NCj4gPiArCWNvbnN0IGludCBlbGVtZW50X3NpemUNCj4gPiArCSA9IGdkYmFyY2hf c2hhZG93X3N0YWNrX2VsZW1lbnRfc2l6ZV9hbGlnbmVkIChnZGJhcmNoKTsNCj4gPiArDQo+ID4g Kwl1aW91dC0+ZmllbGRfc3RyaW5nDQo+ID4gKwkgICgiYWRkciIsIGhleF9zdHJpbmdfY3VzdG9t IChmcmFtZS52YWx1ZSwgZWxlbWVudF9zaXplICogMiksDQo+ID4gKwkgICBhZGRyZXNzX3N0eWxl LnN0eWxlICgpKTsNCj4gPiArDQo+ID4gKwlhbm5vdGF0ZV9zaGFkb3dzdGFja19mcmFtZV9hZGRy ZXNzX2VuZCAoKTsNCj4gPiArDQo+ID4gKwl1aW91dC0+dGV4dCAoIiBpbiAiKTsNCj4gPiArCXBy aW50X2Z1bm5hbWUgKHVpb3V0LCBmdW5uYW1lLCB0cnVlKTsNCj4gPiArDQo+ID4gKwlpZiAocHJp bnRfd2hhdCAhPSBTSE9SVF9MT0NBVElPTiAmJiBzYWwuc3ltdGFiICE9IG51bGxwdHIpDQo+ID4g KwkgIHByaW50X2ZpbGVuYW1lICh1aW91dCwgc2FsLCB0cnVlKTsNCj4gPiArDQo+ID4gKwlpZiAo cHJpbnRfd2hhdCAhPSBTSE9SVF9MT0NBVElPTg0KPiA+ICsJICAgICYmIChmdW5uYW1lID09IG51 bGxwdHIgfHwgc2FsLnN5bXRhYiA9PSBudWxscHRyKQ0KPiA+ICsJICAgICYmIHNhbC5wc3BhY2Ug IT0gbnVsbHB0cikNCj4gPiArCSAgew0KPiA+ICsJICAgIGNvbnN0IGNoYXIgKmxpYiA9IHNvbGli X25hbWVfZnJvbV9hZGRyZXNzIChzYWwucHNwYWNlLA0KPiA+ICsJCQkJCQkgICAgICAgZnJhbWUu dmFsdWUpOw0KPiANCj4gVGhpcyBsaW5lIGZpdHMgaW4gODAgY29sdW1ucyBhbmQgZG9lc24ndCBu ZWVkIHRvIGJlIGJyb2tlbi4NCg0KSSBjb3VudCA4MSBjaGFyYWN0ZXJzLg0KDQo+ID4gKwkgICAg aWYgKGxpYiAhPSBudWxscHRyKQ0KPiA+ICsJICAgICAgcHJpbnRfbGliICh1aW91dCwgbGliLCB0 cnVlKTsNCj4gPiArCSAgfQ0KPiA+ICsgICAgICB9IC8qIEV4dHJhIHNjb3BlIHRvIHByaW50IGZy YW1lIHR1cGxlLiAgKi8NCj4gPiArDQo+ID4gKyAgICAgIHVpb3V0LT50ZXh0ICgiXG4iKTsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgaWYgKHByaW50X3doYXQgPT0gU1JDX0xJTkUgfHwgcHJp bnRfd2hhdCA9PSBTUkNfQU5EX0xPQykNCj4gPiArICAgIHsNCj4gPiArICAgICAgaW50IG1pZF9z dGF0ZW1lbnQgPSBwY19pbl9taWRkbGVfb2Zfc3RhdGVtZW50IChmcmFtZS52YWx1ZSwNCj4gPiAr IHNhbCk7DQo+IA0KPiBtaWRfc3RhdGVtZW50IHNob3VsZCBiZSBhIGJvb2wuDQoNCkZpeGVkLg0K DQo+ID4gKw0KPiA+ICsgICAgICAvKiBXaGlsZSBmb3IgdGhlIG9yZGluYXJ5IGJhY2t0cmFjZSBw cmludGluZyBvZiBwYyBpcyBiYXNlZCBvbg0KPiA+ICsJIE1JRF9TVEFURU1FTlQgZGV0ZXJtaW5l ZCBieSBzdGFjay5jOmZyYW1lX3Nob3dfYWRkcmVzcyBhbmQNCj4gdGhlDQo+ID4gKwkgYW5kIHRo ZSBwcmludCBjb25maWd1cmF0aW9uLCBmb3Igc2hhZG93IHN0YWNrIGJhY2t0cmFjZSB3ZSBhbHdh eXMNCj4gPiArCSBwcmludCB0aGUgcGMvYWRkcmVzcyBvbiB0aGUgc2hhZG93IHN0YWNrLiAgKi8N Cj4gPiArICAgICAgYm9vbCBwcmludF9hZGRyZXNzID0gdHJ1ZTsNCj4gPiArICAgICAgcHJpbnRf c291cmNlICh1aW91dCwgZ2RiYXJjaCwgZnJhbWUudmFsdWUsIHNhbCwgcHJpbnRfYWRkcmVzcywN Cj4gPiArCQkgICAgbWlkX3N0YXRlbWVudCwgIiIpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAr ICBhbm5vdGF0ZV9zaGFkb3dzdGFja19mcmFtZV9lbmQgKCk7DQo+ID4gKyAgZ2RiX2ZsdXNoIChn ZGJfc3Rkb3V0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogUmVkaXJlY3Qgb3V0cHV0IHRvIGEg dGVtcG9yYXJ5IGJ1ZmZlciBmb3IgdGhlIGR1cmF0aW9uIG9mDQo+ID4gKyAgIGRvX3ByaW50X3No YWRvd19zdGFja19mcmFtZV9pbmZvLiAgKi8NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkDQo+ID4g K3ByaW50X3NoYWRvd19zdGFja19mcmFtZV9pbmZvDQo+ID4gKyAgKGdkYmFyY2ggKmdkYmFyY2gs IGNvbnN0IHNoYWRvd19zdGFja19wcmludF9vcHRpb25zICZwcmludF9vcHRpb25zLA0KPiA+ICsg ICBjb25zdCBzaGFkb3dfc3RhY2tfZnJhbWVfaW5mbyAmZnJhbWUsIHByaW50X3doYXQgcHJpbnRf d2hhdCkgew0KPiA+ICsgIGRvX3dpdGhfYnVmZmVyZWRfb3V0cHV0DQo+ID4gKyAgICAoZG9fcHJp bnRfc2hhZG93X3N0YWNrX2ZyYW1lX2luZm8sIGN1cnJlbnRfdWlvdXQsIGdkYmFyY2gsDQo+ID4g KyAgICAgcHJpbnRfb3B0aW9ucywgZnJhbWUsIHByaW50X3doYXQpOyB9DQo+ID4gKw0KPiA+ICsN Cj4gPiArLyogRXh0cmFjdCBhIGNoYXIgYXJyYXkgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHByaW50 aW5nIGEgcmVhc29uYWJsZQ0KPiA+ICsgICBlcnJvciBtZXNzYWdlIGZvciBSRUFTT04uICBOb3Rl IHRoYXQgaW4gY2FzZSBSRUFTT04gaGFzIHRoZSB2YWx1ZQ0KPiA+ICsgICBOT19FUlJPUiB0aGUg cmV0dXJuZWQgYXJyYXkgaXMgZW1wdHkuICAqLw0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IGNo YXIgKg0KPiA+ICtzc3BfdW53aW5kX3N0b3BfcmVhc29uX3RvX2Vycl9zdHJpbmcgKHNzcF91bndp bmRfc3RvcF9yZWFzb24gcmVhc29uKQ0KPiA+ICt7DQo+ID4gKyAgc3dpdGNoIChyZWFzb24pDQo+ ID4gKyAgICB7DQo+ID4gKyAgICBjYXNlIHNzcF91bndpbmRfc3RvcF9yZWFzb246Om5vX2Vycm9y Og0KPiA+ICsgICAgICByZXR1cm4gXygiIik7DQo+IA0KPiBUaGUgZW1wdHkgc3RyaW5nIGRvZXNu J3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkDQoNClRydWUuDQoNCj4gQWxsIGNhbGxlcnMgbWFrZSBz dXJlIHRoYXQgcmVhc29uIGlzbid0IG5vX2Vycm9yLCBzbyBwZXJoYXBzIGp1c3QgcmVtb3ZlIHRo aXMgY2FzZT8NCg0KSSBhbSBub3Qgc3VyZSwgaWYgSSBjYW4gZm9sbG93IGNvbXBsZXRlbHkuIFlv dSBtZWFuIEkgc2hvdWxkIHJlbW92ZSB0aGUgY2FzZSBhbmQgcmVwbGFjZQ0KICBnZGJfYXNzZXJ0 X25vdF9yZWFjaGVkICgiaW52YWxpZCByZWFzb24iKTsgd2l0aCByZXR1cm4gIiIgPw0KDQo+ID4g KyAgICBjYXNlIHNzcF91bndpbmRfc3RvcF9yZWFzb246Om1lbW9yeV9yZWFkX2Vycm9yOg0KPiA+ ICsgICAgICByZXR1cm4gXygic2hhZG93IHN0YWNrIG1lbW9yeSByZWFkIGZhaWx1cmUiKTsNCj4g PiArICAgIH0NCj4gPiArDQo+ID4gKyAgZ2RiX2Fzc2VydF9ub3RfcmVhY2hlZCAoImludmFsaWQg cmVhc29uIik7IH0NCj4gPiArDQo+ID4gKw0KPiA+ICsvKiBSZWFkIHRoZSBtZW1vcnkgYXQgc2hh ZG93IHN0YWNrIHBvaW50ZXIgU1NQIGFuZCBhc3NpZ24gaXQgdG8NCj4gPiArICAgUkVUVVJOX1ZB TFVFLiAgSW4gY2FzZSB3ZSBjYW5ub3QgcmVhZCB0aGUgbWVtb3J5LCBzZXQgUkVBU09OIHRvDQo+ ID4gKyAgIHNzcF91bndpbmRfc3RvcF9yZWFzb246Om1lbW9yeV9yZWFkX2Vycm9yIGFuZCByZXR1 cm4gZmFsc2UuICAqLw0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wNCj4gPiArcmVhZF9zaGFkb3df c3RhY2tfbWVtb3J5IChnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgc3NwLA0KPiA+ICsJCQkg IENPUkVfQUREUiAqcmV0dXJuX3ZhbHVlLA0KPiA+ICsJCQkgIHNzcF91bndpbmRfc3RvcF9yZWFz b24gKnJlYXNvbikNCj4gDQo+IElmIGEgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgcG9pbnRlciBp dCBnZXRzIGFzIGFyZ3VtZW50IGlzIG5vbi1udWxsIGFzIHRoaXMgb25lDQo+IGRvZXMgd2l0aCBy ZXR1cm5fdmFsdWUgYW5kIHJlYXNvbiwgdGhlbiBJTU8gaXQncyBiZXR0ZXIgdG8gZ2V0IGl0IGFz IGENCj4gcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLiBUaGVuIHRoZSBjb21waWxlciBt YWtlcyBzdXJlIHRoYXQgaXQgaXMgaW5kZWVkDQo+IG5vbi1udWxsLg0KDQpJIGFncmVlLCBJIGNo YW5nZWQgdGhhdC4NCg0KPiA+ICt7DQo+ID4gKyAgLyogT24geDg2IHRoZXJlIGNhbiBiZSBhIHNo YWRvdyBzdGFjayB0b2tlbiBhdCBiaXQgNjMuICBGb3IgeDMyLCB0aGUNCj4gPiArICAgICBhZGRy ZXNzIHNpemUgaXMgb25seSAzMiBiaXQuICBUaHVzLCB3ZSBzdGlsbCBtdXN0IHVzZQ0KPiA+ICsg ICAgIGdkYmFyY2hfc2hhZG93X3N0YWNrX2VsZW1lbnRfc2l6ZV9hbGlnbmVkIChhbmQgbm90DQo+ IGdkYmFyY2hfYWRkcl9iaXQpDQo+ID4gKyAgICAgdG8gcmVhZCB0aGUgZnVsbCBlbGVtZW50IGZv ciB4MzIgYXMgd2VsbC4gICovDQo+ID4gKyAgY29uc3QgaW50IGVsZW1lbnRfc2l6ZQ0KPiA+ICsg ICAgPSBnZGJhcmNoX3NoYWRvd19zdGFja19lbGVtZW50X3NpemVfYWxpZ25lZCAoZ2RiYXJjaCk7 DQo+ID4gKw0KPiA+ICsgIGNvbnN0IGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0 ZV9vcmRlciAoZ2RiYXJjaCk7DQo+ID4gKyAgaWYgKCFzYWZlX3JlYWRfbWVtb3J5X3Vuc2lnbmVk X2ludGVnZXIgKHNzcCwgZWxlbWVudF9zaXplLCBieXRlX29yZGVyLA0KPiA+ICsJCQkJCSAgcmV0 dXJuX3ZhbHVlKSkNCj4gPiArICAgIHsNCj4gPiArICAgICAgKnJlYXNvbiA9IHNzcF91bndpbmRf c3RvcF9yZWFzb246Om1lbW9yeV9yZWFkX2Vycm9yOw0KPiA+ICsgICAgICByZXR1cm4gZmFsc2U7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKiAgSWYgcG9zc2libGUsIHJldHVybiBhIHNoYWRvdyBzdGFjayBmcmFtZSBpbmZvIHdo aWNoIGlzIENPVU5UIGVsZW1lbnRzDQo+ID4gKyAgICBhYm92ZSB0aGUgYm90dG9tIG9mIHRoZSBz aGFkb3cgc3RhY2suICBGUkFNRSBzaG91bGQgcG9pbnQgdG8gdGhlIHRvcA0KPiA+ICsgICAgb2Yg dGhlIHNoYWRvdyBzdGFjay4gIFJBTkdFIGlzIHRoZSBzaGFkb3cgc3RhY2sgbWVtb3J5IHJhbmdl DQo+ID4gKyAgICBbc3RhcnRfYWRkcmVzcywgZW5kX2FkZHJlc3MpIGNvcnJlc3BvbmRpbmcgdG8g RlJBTUUncyBzaGFkb3cgc3RhY2sNCj4gPiArICAgIHBvaW50ZXIuICBJZiBDT1VOVCBpcyBiaWdn ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9uIHRoZSBzaGFkb3cNCj4gPiArICAgIHN0 YWNrLCByZXR1cm4gRlJBTUUuDQo+IA0KPiBIZXJlIGlzIGFub3RoZXIgcGxhY2Ugd2hlcmUgSSBm aW5kICJhYm92ZS9ib3R0b20vdG9wIiBjb25mdXNpbmcsIHNpbmNlDQo+IHN0YWNrcyBjYW4gZ3Jv dyB1cCBvciBncm93IGRvd24gKGFzIHBvaW50ZWQgb3V0IGluIHRoZSBuZXh0IGNvbW1lbnQgaW4g dGhpcw0KPiBmdW5jdGlvbiksIGFuZCB0aGVzZSB0ZXJtcyBtZWFuIGRpZmZlcmVudCB0aGluZ3Mg aW4gZWFjaCBjYXNlLg0KDQpZZXMsIHRoZSBjb21tZW50IGlzIG5vdyANCiIuLi5hYm92ZSB0aGUg b3V0ZXJtb3N0IChvbGRlc3QpIGVsZW1lbnQgb2YgdGhlIHNoYWRvdyBzdGFjay4iDQoNCkkgaG9w ZSB0aGlzIGlzIG1vcmUgc3RyYWlnaHQtZm9yd2FyZC4NCg0KPiA+ICsgICAgSW4gY2FzZSBvZiBm YWlsdXJlLCBhc3NpZ24gYW4gYXBwcm9wcmlhdGUgc3NwX3Vud2luZF9zdG9wX3JlYXNvbiBpbg0K PiA+ICsgICAgRlJBTUUtPlVOV0lORF9TVE9QX1JFQVNPTi4gICovDQo+ID4gKw0KPiA+ICtzdGF0 aWMgc3RkOjpvcHRpb25hbDxzaGFkb3dfc3RhY2tfZnJhbWVfaW5mbz4NCj4gPiArZ2V0X3RyYWls aW5nX291dGVybW9zdF9zaGFkb3dfc3RhY2tfZnJhbWVfaW5mbw0KPiA+ICsgIChnZGJhcmNoICpn ZGJhcmNoLCBjb25zdCBzdGQ6OnBhaXI8Q09SRV9BRERSLCBDT1JFX0FERFI+IHJhbmdlLA0KPiA+ ICsgICBjb25zdCBVTE9OR0VTVCBjb3VudCwgc2hhZG93X3N0YWNrX2ZyYW1lX2luZm8gJmZyYW1l KSB7DQo+ID4gKyAgLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9uIHRoZSBzaGFkb3cg c3RhY2ssIHN0YXJ0aW5nIGF0DQo+ID4gKyAgICAgRlJBTUUtPlNTUCwgd2hpY2ggZGVwZW5kcyBv biB0aGUgZGlyZWN0aW9uIHRoZSBzaGFkb3cgc3RhY2sNCj4gPiArICAgICBncm93cy4gICovDQo+ ID4gKyAgY29uc3QgaW50IGVsZW1lbnRfc2l6ZQ0KPiA+ICsgICAgPSBnZGJhcmNoX3NoYWRvd19z dGFja19lbGVtZW50X3NpemVfYWxpZ25lZCAoZ2RiYXJjaCk7DQo+ID4gKyAgY29uc3QgdW5zaWdu ZWQgbG9uZyBzaGFkb3dfc3RhY2tfYnl0ZXMNCj4gPiArICAgID0gKGdkYmFyY2hfc3RhY2tfZ3Jv d3NfZG93biAoZ2RiYXJjaCkpDQo+IA0KPiBUaGUgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBmdW5j dGlvbiBjYWxsIGFyZSBzdXBlcmZsdW91cy4NCg0KRml4ZWQuDQoNCj4gPiArICAgICAgID8gcmFu Z2Uuc2Vjb25kIC0gZnJhbWUuc3NwIDogZnJhbWUuc3NwIC0gcmFuZ2UuZmlyc3QgKw0KPiA+ICsg ZWxlbWVudF9zaXplOw0KPiA+ICsNCj4gPiArICBnZGJfYXNzZXJ0ICgoc2hhZG93X3N0YWNrX2J5 dGVzICUgZWxlbWVudF9zaXplKSA9PSAwKTsgIGNvbnN0DQo+ID4gKyB1bnNpZ25lZCBsb25nIHNo YWRvd19zdGFja19zaXplDQo+ID4gKyAgICA9IHNoYWRvd19zdGFja19ieXRlcyAvIGVsZW1lbnRf c2l6ZTsNCj4gDQo+IFRoaXMgbGluZSBmaXRzIDgwIGNvbHVtbnMgYW5kIGRvZXNuJ3QgbmVlZCB0 byBiZSBicm9rZW4uDQo+IA0KPiA+ICsgIGNvbnN0IGxvbmcgbGV2ZWwgPSBzaGFkb3dfc3RhY2tf c2l6ZSAtIGNvdW50Ow0KPiANCj4gSW4gYSBjb21tZW50IGZ1cnRoZXIgYmVsb3cgeW91IG1lbnRp b24gdGhhdCBsZXZlbCBpcyAwLWJhc2VkLCBidXQgZG9lc24ndA0KPiB0aGlzIGV4cHJlc3Npb24g bWVhbiB0aGF0IGl0J3MgMS1iYXNlZD8gUGVyaGFwcyBpdCdzIG1pc3NpbmcgYQ0KPiAiLSAxIiB0 ZXJtPw0KPiBBbHNvLCB0aGlzIGRvZXNuJ3Qgd29yayBmb3IgR0NTIGJlY2F1c2UgaXQgYXNzdW1l cyBhbGwgZWxlbWVudHMgaW4gdGhlIHN0YWNrDQo+IGFyZSByZXR1cm4gYWRkcmVzc2VzLiBJbiBH Q1MsIHRoZSBvbGRlc3QgZWxlbWVudCBpcyBhIDAgZW50cnkNCj4gVGhlIDAgZW50cnkgaXMgd2h5 IHRoaXMgcGF0Y2ggcmVxdWlyZXMgQUFyY2g2NCB0byBpbXBsZW1lbnQgaXRzIG93biBnZGJhcmNo DQo+IHRvcF9hZGRyX2VtcHR5X3NoYWRvd19zdGFjayBob29rLg0KDQpUaGVyZSBpcyBjbGVhcmx5 IGFuIGlzc3VlIHdpdGggdGhpcyBmdW5jdGlvbi4gIEJ1dCBJIGFtIG5vdCBzdXJlIGlmIEkgY2Fu IGZvbGxvdyBoZXJlLg0KU2hvdWxkbid0IHRoZSBpc3N1ZSBiZSBmaXhlZCB3aGVuIHBhc3Npbmcg TEVWRUwgaW5zdGVhZCBvZiBDT1VOVCwgYXMgcG9pbnRlZCBvdXQgYnkgeW91IGJlbG93Pw0KDQpB bmQgaWYgbm90LCBkbyB5b3UgaGF2ZSBhbiBpZGVhIGhvdyB3ZSBjYW4gZml4IHRoaXM/IA0KDQo+ IEZpbmFsbHksIG5vdCBhIGNvbmNlcm4gZm9yIHVzZXJzcGFjZSBzdXBwb3J0IChhbmQgdGh1cyB0 aGlzIHBhdGNoDQo+IHNlcmllcykgYnV0IGZvciBPUyBhbmQgaHlwZXJ2aXNvciBzb2Z0d2FyZSB0 aGVyZSdzIGFub3RoZXIga2luZCBvZiBHQ1MgZW50cnkNCj4gd2hpY2ggaXMgdGhlIGV4Y2VwdGlv biByZXR1cm4gcmVjb3JkIHRoYXQgaXMgcHV0IG9uIHRoZSBzdGFjayB3aGVuIGFuDQo+IGV4Y2Vw dGlvbiBpcyB0YWtlbi4gVGhhdCBlbnRyeSBpcyAzMiBieXRlcyBpbiBzaXplLiAgSSBtZW50aW9u IHRoaXMganVzdCB0bw0KPiBpbGx1c3RyYXRlIHRoYXQgY2FsY3VsYXRpbmcgdGhlIG51bWJlciBv ZiBlbnRyaWVzIGluIHRoZSBzdGFjayBjYW4gYmUgbm9uLQ0KPiB0cml2aWFsLg0KDQpPaCwgSSBz ZWUuIElzbid0IHRoYXQgYWxyZWFkeSBhIHByb2JsZW0gd2l0aCB0aGUgY3VycmVudCB1bndpbmRp bmcgb2YgdGhlIHNoYWRvdw0Kc3RhY2sgcG9pbnRlciBmb3IgR0NTPyBIb3cgd291bGQgeW91IGZp eCBpdCB0aGVyZSA/DQoNCj4gTm90IHN1cmUgaG93IHRvIGFjY291bnQgZm9yIHRoZXNlIHZhcmlh dGlvbnMgaW4gZ2VuZXJpYyBjb2RlLiBNYXliZSBhZGQgYQ0KPiBuZXcgZ2RiYXJjaCBtZXRob2Qg Zm9yIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNoYWRvdw0KPiBzdGFj az8NCg0KVG8gaW1wbGVtZW50IHRoaXMsIEkgYmVsaWV2ZSB3ZSBoYXZlIHR3byBwb3NzaWJsZSBh cHByb2FjaGVzOg0KDQooMSkgQXNzdW1lIHdlIGNhbiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBl bGVtZW50cyB3aXRob3V0IHVud2luZGluZyBlYWNoIGZyYW1lIChhcyBpdCBpcw0KY3VycmVudGx5 IHRoZSBjYXNlKS4gSW4gdGhpcyBzY2VuYXJpbywgd2UgY291bGQgaW50cm9kdWNlIGEgZ2VuZXJp YyBnZGJhcmNoIGhvb2sgdG8NCnJldHJpZXZlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgZm9yIGFy Y2hpdGVjdHVyZXMgdGhhdCByZXF1aXJlIGEgZGlmZmVyZW50IGNhbGN1bGF0aW9uLg0KDQooMikg VW53aW5kIGVhY2ggc2hhZG93IHN0YWNrIGZyYW1lIHRvIG9idGFpbiB0aGUgdHJhaWxpbmcgb3V0 ZXJtb3N0IGZyYW1lLCBzaW1pbGFyIHRvIGhvdyB0aGUNCm5vcm1hbCBiYWNrdHJhY2Ugd29ya3Mu DQoNCkRvIHlvdSBzZWUgYW55IGFkZGl0aW9uYWwgb3B0aW9ucz8NCg0KQWx0ZXJuYXRpdmVseSwg d2UgY291bGQga2VlcCB0aGUgY3VycmVudCBhcHByb2FjaCBmb3Igbm93ICh3aXRob3V0IHRoZSBn ZGJhcmNoIGhvb2ssIGJhc2VkIG9uDQp0aGUgZXhpc3RpbmcgY2FsY3VsYXRpb24pIGFuZCBvbmx5 IHJldmlzZSB0aGUgaW1wbGVtZW50YXRpb24gaWYgb3RoZXIgT1Mgb3IgaHlwZXJ2aXNvciBzb2Z0 d2FyZQ0KcmVxdWlyZSBkaWZmZXJlbnQgbG9naWPigJRvbmNlIHdlIGhhdmUgdGhlIGFiaWxpdHkg dG8gdGVzdCB0aG9zZSBjYXNlcyBwcm9wZXJseS4NCldoYXQgYXJlIHlvdXIgdGhvdWdodHM/DQoN Cj4gPiArDQo+ID4gKyAgLyogQ09VTlQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9u IHRoZSBzaGFkb3cgc3RhY2suICBSZXR1cm4NCj4gdGhlDQo+ID4gKyAgICAgc3RhcnRpbmcgc2hh ZG93IHN0YWNrIGZyYW1lIGluZm8gRlJBTUUuICAqLyAgaWYgKGxldmVsIDw9IDApDQo+ID4gKyAg ICByZXR1cm4gc3RkOjpvcHRpb25hbDxzaGFkb3dfc3RhY2tfZnJhbWVfaW5mbz4gKGZyYW1lKTsN Cj4gPiArDQo+ID4gKyAgQ09SRV9BRERSIG5ld19zc3AgPSB1cGRhdGVfc2hhZG93X3N0YWNrX3Bv aW50ZXINCj4gPiArICAgIChnZGJhcmNoLCBmcmFtZS5zc3AsIGNvdW50LCBzc3BfdXBkYXRlX2Rp cmVjdGlvbjo6Ym90dG9tKTsNCj4gDQo+IFNob3VsZG4ndCB1cGRhdGVfc2hhZG93X3N0YWNrX3Bv aW50ZXIgYmUgY2FsbGVkIHdpdGggJ2xldmVsJyByYXRoZXIgdGhhbg0KPiAnY291bnQnIGFzIGFy Z3VtZW50Pw0KDQpBaCwgeW914oCZcmUgYWJzb2x1dGVseSByaWdodC4gSeKAmW0gY2VydGFpbiB0 aGlzIHdvcmtlZCBhdCBzb21lIHBvaW50IGJlZm9yZSBJIHBvc3RlZCBpdC4NCknigJltIG5vdCBz dXJlIGhvdyB0aGlzIGlzc3VlIHNsaXBwZWQgaW7igJRhbmQgZXZlbiBtb3JlIGNvbmNlcm5pbmcg dGhhdCBteSB0ZXN0cyBkaWRu4oCZdCBjYXRjaCBpdC4NCg0KPiA+ICsgIGlmIChnZGJhcmNoX3N0 YWNrX2dyb3dzX2Rvd24gKGdkYmFyY2gpKQ0KPiA+ICsgICAgZ2RiX2Fzc2VydCAobmV3X3NzcCA8 IHJhbmdlLnNlY29uZCk7ICBlbHNlDQo+ID4gKyAgICBnZGJfYXNzZXJ0IChuZXdfc3NwID49IHJh bmdlLmZpcnN0KTsNCj4gPiArDQo+ID4gKyAgQ09SRV9BRERSIG5ld192YWx1ZTsNCj4gPiArICBp ZiAoIXJlYWRfc2hhZG93X3N0YWNrX21lbW9yeSAoZ2RiYXJjaCwgbmV3X3NzcCwgJm5ld192YWx1 ZSwNCj4gPiArCQkJCSAmZnJhbWUudW53aW5kX3N0b3BfcmVhc29uKSkNCj4gPiArICAgIHJldHVy biB7fTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8c2hhZG93X3N0YWNrX2Zy YW1lX2luZm8+DQo+ID4gKyAgICAoe25ld19zc3AsIG5ld192YWx1ZSwgKFVMT05HRVNUKSBsZXZl bCwNCj4gPiArICAgICAgc3NwX3Vud2luZF9zdG9wX3JlYXNvbjo6bm9fZXJyb3J9KTsNCj4gDQo+ IFRoaXMgbGluZSBjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvciBpbiBhcm0tbGludXgtZ251ZWFi aWhmLCBhbmQgSSBzdXBwb3NlDQo+IG90aGVyIDMyLWJpdCB0YXJnZXRzIGFzIHdlbGw6DQo+IA0K PiAvaG9tZS9iYXVlcm1hbm4vc3JjL2JpbnV0aWxzLWdkYi9nZGIvc2hhZG93LXN0YWNrLmM6NDcx OjI3OiBlcnJvcjoNCj4gbmFycm93aW5nIGNvbnZlcnNpb24gb2Yg4oCYKFVMT05HRVNUKSgobG9u ZyBpbnQpbGV2ZWwp4oCZIGZyb20g4oCYVUxPTkdFU1TigJkge2FrYQ0KPiDigJhsb25nIGxvbmcg dW5zaWduZWQgaW504oCZfSB0byDigJhsb25nIHVuc2lnbmVkIGludOKAmSBbLVdlcnJvcj1uYXJy b3dpbmddDQo+ICAgNDcxIHwgICAgICh7bmV3X3NzcCwgbmV3X3ZhbHVlLCAoVUxPTkdFU1QpIGxl dmVsLA0KPiBzc3BfdW53aW5kX3N0b3BfcmVhc29uOjpub19lcnJvcn0pOw0KPiAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fg0KPiANCj4gQWxzbywgaXQg Zml0cyA4MCBjb2x1bW5zIGFuZCBkb2Vzbid0IG5lZWQgdG8gYmUgYnJva2VuLg0KDQpUaGFua3Ms IGNhc3RpbmcgaXQgYXMgZm9sbG93czoNCih1bnNpZ25lZCBsb25nKSBsZXZlbA0Kc2hvdWxkIGhv cGVmdWxseSBmaXggdGhpcy4gQW5kIHRoZW4gSSB3aWxsIGhhdmUgbW9yZSB0aGFuIDgwIGNoYXJh Y3RlcnMuDQoNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RkOjpvcHRpb25hbDxzaGFkb3dfc3RhY2tf ZnJhbWVfaW5mbz4NCj4gPiArc2hhZG93X3N0YWNrX2ZyYW1lX2luZm86OnVud2luZF9wcmV2X3No YWRvd19zdGFja19mcmFtZV9pbmZvDQo+ID4gKyAgKGdkYmFyY2ggKmdkYmFyY2gsIHN0ZDo6cGFp cjxDT1JFX0FERFIsIENPUkVfQUREUj4gcmFuZ2UpIHsNCj4gPiArICAvKiBJZiB0aGUgdXNlcidz IGJhY2t0cmFjZSBsaW1pdCBoYXMgYmVlbiBleGNlZWRlZCwgc3RvcC4gIFdlIG11c3QNCj4gPiAr ICAgICBhZGQgdHdvIHRvIHRoZSBjdXJyZW50IGxldmVsOyBvbmUgb2YgdGhvc2UgYWNjb3VudHMg Zm9yDQo+ID4gKyAgICAgYmFja3RyYWNlX2xpbWl0IGJlaW5nIDEtYmFzZWQgYW5kIHRoZSBsZXZl bCBiZWluZyAwLWJhc2VkLCBhbmQgdGhlDQo+ID4gKyAgICAgb3RoZXIgYWNjb3VudHMgZm9yIHRo ZSBsZXZlbCBvZiB0aGUgbmV3IGZyYW1lIGluc3RlYWQgb2YgdGhlIGxldmVsDQo+ID4gKyAgICAg b2YgdGhlIGN1cnJlbnQgZnJhbWUuICAqLw0KPiA+ICsgIGlmICh0aGlzLT5sZXZlbCArIDIgPiB1 c2VyX3NldF9iYWNrdHJhY2Vfb3B0aW9ucy5iYWNrdHJhY2VfbGltaXQpDQo+ID4gKyAgICByZXR1 cm4ge307DQo+ID4gKw0KPiA+ICsgIENPUkVfQUREUiBuZXdfc3NwDQo+ID4gKyAgICA9IHVwZGF0 ZV9zaGFkb3dfc3RhY2tfcG9pbnRlciAoZ2RiYXJjaCwgdGhpcy0+c3NwLCAxLA0KPiA+ICsJCQkJ ICAgc3NwX3VwZGF0ZV9kaXJlY3Rpb246OmJvdHRvbSk7DQo+ID4gKw0KPiA+ICsgIGlmIChnZGJh cmNoX3N0YWNrX2dyb3dzX2Rvd24gKGdkYmFyY2gpKQ0KPiANCj4gVG8gbWFrZSB0aGlzIHdvcmsg Zm9yIEdDUywgSSBoYWQgdG8gYWRkIGFub3RoZXIgaWYgc3RhdGVtZW50IGJlZm9yZSB0aGUgb25l DQo+IGFib3ZlLCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbmV3X3NzcCBpcyBhdCB0aGUgaW5p dGlhbCAwIHZhbHVlOg0KPiANCj4gICBpZiAoZ2RiYXJjaF90b3BfYWRkcl9lbXB0eV9zaGFkb3df c3RhY2tfcCAoZ2RiYXJjaCkNCj4gICAgICAgJiYgZ2RiYXJjaF90b3BfYWRkcl9lbXB0eV9zaGFk b3dfc3RhY2sgKGdkYmFyY2gsIG5ld19zc3AsIHJhbmdlKSkNCj4gICAgIHJldHVybiB7fTsNCj4g ICBlbHNlIGlmIChnZGJhcmNoX3N0YWNrX2dyb3dzX2Rvd24gKGdkYmFyY2gpKQ0KPiAgICAg4ouu DQo+IA0KPiBPdGhlcndpc2UgImJ0IHNoYWRvdyIgd2lsbCBwcmludCB0aGUgMCBlbnRyeToNCj4g DQo+IChnZGIpIGJ0IHNoYWRvdw0KPiAjMCAgMHgwMDAwYWFhYWFhYWEwOGFjIGluIGNhbGwyIGF0 IGFhcmNoNjQtZ2NzLXJldHVybi5jOjY1DQo+ICMxICAweDAwMDBhYWFhYWFhYTA4YzAgaW4gY2Fs bDEgYXQgYWFyY2g2NC1nY3MtcmV0dXJuLmM6NzENCj4gIzIgIDB4MDAwMGFhYWFhYWFhMDlkNCBp biBtYWluIGF0IGFhcmNoNjQtZ2NzLXJldHVybi5jOjExMA0KPiAjMyAgMHgwMDAwMDAwMDAwMDAw MDAwIGluID8/DQoNClllcywgSSBtaXNzZWQgdGhhdC4gVGhhbmtzLg0KDQo+ID4gKyAgICB7DQo+ ID4gKyAgICAgIC8qIFRoZSBzaGFkb3cgc3RhY2sgZ3Jvd3MgZG93bndhcmRzLiAgKi8NCj4gPiAr ICAgICAgaWYgKG5ld19zc3AgPj0gcmFuZ2Uuc2Vjb25kKQ0KPiA+ICsJew0KPiA+ICsJICAvKiBX ZSByZWFjaGVkIHRoZSBib3R0b20gb2YgdGhlIHNoYWRvdyBzdGFjay4gICovDQo+IA0KPiBJbiB0 aGlzIGNhc2UsIHdlIHJlYWNoZWQgdGhlIHRvcCBhY3R1YWxseS4gVGhpcyBpcyB3aHkgSSBmaW5k IGl0IGNvbmZ1c2luZyB0byB1c2UNCj4gYm90dG9tL3RvcCBhcyBpZiBpdCB3aGVyZSBhZ25vc3Rp YyB0byB3aGV0aGVyIHRoZSBzdGFjayBncm93cyB1cCBvciBkb3duLi4uDQoNCkluIG15IHZpc2lv biB0aGlzIGlzIHRvICJib3R0b20iIGFjdHVhbGx5LCBpZiB5b3UgbG9vayBhdCB0aGlzIGZyb20g YSAic3RhY2siIHBlcnNwZWN0aXZlLg0KQnV0IEkgY2hhbmdlZCB0aGlzIHRvICJXZSByZWFjaGVk IHRoZSBvdXRlcm1vc3QgZWxlbWVudCIuDQoNCj4gPiArCSAgcmV0dXJuIHt9Ow0KPiA+ICsJfQ0K PiA+ICsgICAgICAvKiBXZSB1cGRhdGVkIG5ld19zc3AgdG93YXJkcyB0aGUgYm90dG9tIG9mIHRo ZSBzaGFkb3cgc3RhY2sNCj4gYmVmb3JlLA0KPiA+ICsJIGFuZCBuZXdfc3NwIG11c3QgYmUgcG9p bnRpbmcgdG8gc2hhZG93IHN0YWNrIG1lbW9yeS4gICovDQo+ID4gKyAgICAgIGdkYl9hc3NlcnQg KG5ld19zc3AgPiByYW5nZS5maXJzdCk7DQo+ID4gKyAgICB9DQo+ID4gKyAgZWxzZQ0KPiA+ICsg ICAgew0KPiA+ICsgICAgICAvKiBUaGUgc2hhZG93IHN0YWNrIGdyb3dzIHVwd2FyZHMuICAqLw0K PiA+ICsgICAgICBpZiAobmV3X3NzcCA8IHJhbmdlLmZpcnN0KQ0KPiA+ICsJew0KPiA+ICsJICAv KiBXZSByZWFjaGVkIHRoZSBib3R0b20gb2YgdGhlIHNoYWRvdyBzdGFjay4gICovDQo+ID4gKwkg IHJldHVybiB7fTsNCj4gPiArCX0NCj4gPiArICAgICAgLyogV2UgdXBkYXRlZCBuZXdfc3NwIHRv d2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2hhZG93IHN0YWNrDQo+IGJlZm9yZSwNCj4gPiArCSBh bmQgbmV3X3NzcCBtdXN0IGJlIHBvaW50aW5nIHRvIHNoYWRvdyBzdGFjayBtZW1vcnkuICAqLw0K PiA+ICsgICAgICBnZGJfYXNzZXJ0IChuZXdfc3NwIDw9IHJhbmdlLnNlY29uZCk7DQo+ID4gKyAg ICB9DQo+ID4gKw0KPiA+ICsgIENPUkVfQUREUiBuZXdfdmFsdWU7DQo+ID4gKyAgaWYgKCFyZWFk X3NoYWRvd19zdGFja19tZW1vcnkgKGdkYmFyY2gsIG5ld19zc3AsICZuZXdfdmFsdWUsDQo+ID4g KwkJCQkgJnRoaXMtPnVud2luZF9zdG9wX3JlYXNvbikpDQo+ID4gKyAgICByZXR1cm4ge307DQo+ ID4gKw0KPiA+ICsgIHJldHVybiBzdGQ6Om9wdGlvbmFsPHNoYWRvd19zdGFja19mcmFtZV9pbmZv Pg0KPiA+ICsgICAgKHtuZXdfc3NwLCBuZXdfdmFsdWUsIHRoaXMtPmxldmVsICsgMSwNCj4gPiAr ICAgICAgc3NwX3Vud2luZF9zdG9wX3JlYXNvbjo6bm9fZXJyb3J9KTsNCj4gDQo+IFRoaXMgbGlu ZSBmaXRzIDgwIGNvbHVtbnMgYW5kIGRvZXNuJ3QgbmVlZCB0byBiZSBicm9rZW4uDQoNCkV2ZW4g dGhvdWdoIHRoZXJlIGlzIHRoaXMgc29mdCBsaW1pdCwgSSB0aGluayBpdCBsb29rcyBuaWNlciB1 bmJyb2tlbiwgc28gSSBjaGFuZ2VkIHRoaXMuDQoNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogUHJp bnQgYWxsIGVsZW1lbnRzIG9uIHRoZSBzaGFkb3cgc3RhY2sgb3IganVzdCB0aGUgaW5uZXJtb3N0 DQo+IENPVU5UX0VYUA0KPiA+ICsgICBmcmFtZXMuICAqLw0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQNCj4gPiArYmFja3RyYWNlX3NoYWRvd19jb21tYW5kIChjb25zdCBzaGFkb3dfc3RhY2tfcHJp bnRfb3B0aW9ucw0KPiAmcHJpbnRfb3B0aW9ucywNCj4gPiArCQkJICBjb25zdCBjaGFyICpjb3Vu dF9leHAsIGludCBmcm9tX3R0eSkgew0KPiA+ICsgIGlmICghdGFyZ2V0X2hhc19zdGFjayAoKSkN Cj4gPiArICAgIGVycm9yIChfKCJObyBzaGFkb3cgc3RhY2suIikpOw0KPiA+ICsNCj4gPiArICBn ZGJhcmNoICpnZGJhcmNoID0gZ2V0X2N1cnJlbnRfYXJjaCAoKTsNCj4gPiArICBpZiAoIWdkYmFy Y2hfYWRkcmVzc19pbl9zaGFkb3dfc3RhY2tfbWVtb3J5X3JhbmdlX3AgKGdkYmFyY2gpKQ0KPiA+ ICsgICAgZXJyb3IgKF8oIlByaW50aW5nIG9mIHRoZSBzaGFkb3cgc3RhY2sgYmFja3RyYWNlIGlz IG5vdCBzdXBwb3J0ZWQgZm9yIg0KPiA+ICsJICAgICAiIHRoZSBjdXJyZW50IHRhcmdldC4iKSk7 DQo+ID4gKw0KPiA+ICsgIHJlZ2NhY2hlICpyZWdjYWNoZSA9IGdldF90aHJlYWRfcmVnY2FjaGUg KGluZmVyaW9yX3RocmVhZCAoKSk7DQo+ID4gKyBib29sIHNoYWRvd19zdGFja19lbmFibGVkID0g ZmFsc2U7DQo+ID4gKw0KPiA+ICsgIHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiBzdGFydF9zc3AN Cj4gPiArICAgID0gZ2RiYXJjaF9nZXRfc2hhZG93X3N0YWNrX3BvaW50ZXIgKGdkYmFyY2gsIHJl Z2NhY2hlLA0KPiA+ICsJCQkJCXNoYWRvd19zdGFja19lbmFibGVkKTsNCj4gPiArDQo+ID4gKyAg aWYgKCFzdGFydF9zc3AuaGFzX3ZhbHVlICgpIHx8ICFzaGFkb3dfc3RhY2tfZW5hYmxlZCkNCj4g PiArICAgIGVycm9yIChfKCJTaGFkb3cgc3RhY2sgaXMgbm90IGVuYWJsZWQgZm9yIHRoZSBjdXJy ZW50IHRhcmdldC4iKSk7DQo+IA0KPiBBdCBsZWFzdCBmb3IgQUFyY2g2NCwgR0NTIGNhbiBiZSBl bmFibGVkIG9yIGRpc2FibGVkIHBlci10aHJlYWQgc28gSSB3b3VsZA0KPiBzYXkgIm5vdCBlbmFi bGVkIGZvciB0aGUgY3VycmVudCB0aHJlYWQiIGhlcmUuDQoNCkkgYWdyZWUsIHRoYW5rcyENCg0K PiA+ICsgIC8qIENoZWNrIGlmIFNUQVJUX1NTUCBwb2ludHMgdG8gYSBzaGFkb3cgc3RhY2sgbWVt b3J5IHJhbmdlIGFuZCB1c2UNCj4gPiArICAgICB0aGUgcmV0dXJuZWQgcmFuZ2UgdG8gZGV0ZXJt aW5lIHdoZW4gdG8gc3RvcCB1bndpbmRpbmcuDQo+ID4gKyAgICAgTm90ZSB0aGF0IGEgc2hhZG93 IHN0YWNrIG1lbW9yeSByYW5nZSBjYW4gY2hhbmdlLCBkdWUgdG8gc2hhZG93DQo+IHN0YWNrDQo+ ID4gKyAgICAgc3dpdGNoZXMgZm9yIGluc3RhbmNlIG9uIHg4NiBmb3IgYW4gaW50ZXItcHJpdmls ZWdlIGZhciBjYWxsIG9yIHdoZW4NCj4gPiArICAgICBjYWxsaW5nIGFuIGludGVycnVwdC9leGNl cHRpb24gaGFuZGxlciBhdCBhIGhpZ2hlciBwcml2aWxlZ2UgbGV2ZWwuDQo+ID4gKyAgICAgU2hh ZG93IHN0YWNrIGZvciB1c2Vyc3BhY2UgaXMgc3VwcG9ydGVkIGZvciBhbWQ2NCBsaW51eCBzdGFy dGluZyB3aXRoDQo+ID4gKyAgICAgTGludXgga2VybmVsIHY2LjYuICBIb3dldmVyLCBzaGFkb3cg c3RhY2sgc3dpdGNoZXMgYXJlIG5vdCBzdXBwb3J0ZWQNCj4gPiArICAgICBkdWUgdG8gbWlzc2lu ZyBrZXJuZWwgc3BhY2Ugc3VwcG9ydC4gIFdlIHRoZXJlZm9yZSBpbXBsZW1lbnQgdGhpcw0KPiA+ ICsgICAgIGNvbW1hbmQgd2l0aG91dCBzdXBwb3J0IGZvciBzaGFkb3cgc3RhY2sgc3dpdGNoZXMg Zm9yIG5vdy4gICovDQo+IA0KPiBIbSwgSSdtIG5vdCBzdXJlIGlmIGFhcmNoNjQtbGludXggc3Vw cG9ydHMgR0NTIHN3aXRjaGluZy4gVGhlIGtlcm5lbCdzIGdjcy5yc3QNCj4gZG9jdW1lbnRhdGlv biBzYXlzOg0KPiANCj4gICAqIFRoZSBhcmNoaXRlY3R1cmUgcHJvdmlkZXMgaW5zdHJ1Y3Rpb25z IGZvciBzd2l0Y2hpbmcgYmV0d2VlbiBndWFyZGVkDQo+ICAgICBjb250cm9sIHN0YWNrcyB3aXRo IGNoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGUgbmV3IHN0YWNrIGlzIGEgdmFsaWQNCj4gICAgIHRh cmdldCBmb3Igc3dpdGNoaW5nLg0KPiANCj4gQW5kIGEgY29tbWVudCBpbiBBQXJjaDY0J3MgaW1w bGVtZW50YXRpb24gb2YgdGhlIG1hcF9zaGFkb3dfc3RhY2sNCj4gc3lzY2FsbCBzYXlzOg0KPiAN Cj4gICAvKg0KPiAgICAqIFB1dCBhIGNhcCB0b2tlbiBhdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0 ZWQgcmVnaW9uIHNvIGl0DQo+ICAgICogY2FuIGJlIHN3aXRjaGVkIHRvLg0KPiAgICAqLw0KPiAN Cj4gQnV0IEkgZG9uJ3Qgc2VlIGFueXRoaW5nIHBvc2l0aXZlbHkgbWVudGlvbiB0aGF0IGl0J3Mg c3VwcG9ydGVkLg0KPiBJIGFzc3VtZSBzbywgYnV0IEknbGwgaGF2ZSB0byBjb25maXJtLiBJZiB0 aGF0IGlzIHRoZSBjYXNlLCBsYXRlciBJIHdpbGwgc3VibWl0IGENCj4gcGF0Y2ggd2l0aCBhbnkg bmVjZXNzYXJ5IGNoYW5nZXMuDQoNCk9rLCBzbyBrZWVwaW5nIHRoZSBjdXJyZW50IGNvbW1lbnQg aXMgZmluZSBmb3IgeW91Pw0KDQo+ID4gKyAgc3RkOjpwYWlyPENPUkVfQUREUiwgQ09SRV9BRERS PiByYW5nZTsNCj4gPiArICBpZiAoIWdkYmFyY2hfYWRkcmVzc19pbl9zaGFkb3dfc3RhY2tfbWVt b3J5X3JhbmdlIChnZGJhcmNoLA0KPiAqc3RhcnRfc3NwLA0KPiA+ICsJCQkJCQkgICAgICZyYW5n ZSkpDQo+IA0KPiBTaG91bGRuJ3QgdGhpcyBpZiBjb25kaXRpb24gYWxzbyBjaGVjaw0KPiBnZGJh cmNoX3RvcF9hZGRyX2VtcHR5X3NoYWRvd19zdGFjaz8NCg0KRm9yIHg4NiB0aGlzIGxvZ2ljIGlz IGZpbmUsIGJ1dCBJIGFzc3VtZSBmb3IgR0NTIHRoaXMgZG9lcyBub3Qgd29yayBmb3IgZW1wdHkN CnNoYWRvdyBzdGFja3M/DQoNCj4gPiArICAgIHsNCj4gPiArICAgICAgLyogSWYgdGhlIGN1cnJl bnQgc2hhZG93IHN0YWNrIHBvaW50ZXIgZG9lcyBub3QgcG9pbnQgdG8gc2hhZG93DQo+ID4gKwkg c3RhY2sgbWVtb3J5LCB0aGUgc2hhZG93IHN0YWNrIGlzIGVtcHR5LiAgKi8NCj4gPiArICAgICAg Z2RiX3ByaW50ZiAoXygiVGhlIHNoYWRvdyBzdGFjayBpcyBlbXB0eS5cbiIpKTsNCj4gPiArICAg ICAgcmV0dXJuOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAvKiBFeHRyYWN0IHRoZSBmaXJz dCBzaGFkb3cgc3RhY2sgZnJhbWUgaW5mbyAobGV2ZWwgMCkuICAqLw0KPiA+ICsgIHNzcF91bndp bmRfc3RvcF9yZWFzb24gcmVhc29uID0gc3NwX3Vud2luZF9zdG9wX3JlYXNvbjo6bm9fZXJyb3I7 DQo+ID4gKyAgc3RkOjpvcHRpb25hbDxzaGFkb3dfc3RhY2tfZnJhbWVfaW5mbz4gY3VycmVudDsN Cj4gPiArICBDT1JFX0FERFIgbmV3X3ZhbHVlOw0KPiA+ICsgIGlmIChyZWFkX3NoYWRvd19zdGFj a19tZW1vcnkgKGdkYmFyY2gsICpzdGFydF9zc3AsICZuZXdfdmFsdWUsDQo+ICZyZWFzb24pKQ0K PiA+ICsgICAgY3VycmVudCA9IHsqc3RhcnRfc3NwLCBuZXdfdmFsdWUsIDAsDQo+ID4gKwkgICAg ICAgc3NwX3Vud2luZF9zdG9wX3JlYXNvbjo6bm9fZXJyb3J9Ow0KPiANCj4gVGhpcyBsaW5lIGZp dHMgaW4gODAgY29sdW1ucyBhbmQgZG9lc24ndCBuZWVkIHRvIGJlIGJyb2tlbi4NCg0KWWVzLCBJ IGNoYW5nZWQgdGhhdC4NCg0KPiA+ICsNCj4gPiArICBzdGQ6Om9wdGlvbmFsPHNoYWRvd19zdGFj a19mcmFtZV9pbmZvPiB0cmFpbGluZyA9IGN1cnJlbnQ7DQo+ID4gKw0KPiA+ICsgIExPTkdFU1Qg Y291bnQgPSAtMTsNCj4gPiArICBpZiAoY3VycmVudC5oYXNfdmFsdWUgKCkgJiYgY291bnRfZXhw ICE9IG51bGxwdHIpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIGNvdW50ID0gcGFyc2VfYW5kX2V2 YWxfbG9uZyAoY291bnRfZXhwKTsNCj4gPiArICAgICAgLyogSWYgY291bnQgaXMgbmVnYXRpdmUs IHVwZGF0ZSB0cmFpbGluZyB3aXRoIHRoZSBzaGFkb3cgc3RhY2sgZnJhbWUNCj4gPiArCSBpbmZv IGZyb20gd2hpY2ggd2Ugc2hvdWxkIHN0YXJ0IHByaW50aW5nLiAgKi8NCj4gDQo+IEFjdHVhbGx5 LCB0cmFpbGluZyB3aWxsIGJlIHRoZSBmcmFtZSBhYm92ZSB0aGUgb25lIGZyb20gd2hpY2ggd2Ug c2hvdWxkIHN0YXJ0DQo+IHByaW50aW5nLiBGb3IgZXhhbXBsZSwgaWYgY291bnQgaXMgLTMNCj4g Z2V0X3RyYWlsaW5nX291dGVybW9zdF9zaGFkb3dfc3RhY2tfZnJhbWVfaW5mbyB3aWxsIHJldHVy biB0aGUgZnJhbWUNCj4gIndoaWNoIGlzIENPVU5UIGVsZW1lbnRzIGFib3ZlIHRoZSBib3R0b20g b2YgdGhlIHNoYWRvdyBzdGFjayIsIHdoaWNoIGluDQo+IHRoaXMgY2FzZSBpcyB0aGUgNHRoIGZy YW1lIGNvdW50aW5nIGZyb20gdGhlIG9sZGVzdCBmcmFtZS4gQnV0IHdlIG5lZWQgdG8NCj4gc3Rh cnQgcHJpbnRpbmcgZnJvbSB0aGUgM3JkIG9sZGVzdCBmcmFtZSAuLi4NCg0KPiA+ICsgICAgICBp ZiAoY291bnQgPCAwKQ0KPiA+ICsJew0KPiA+ICsJICB0cmFpbGluZyA9IGdldF90cmFpbGluZ19v dXRlcm1vc3Rfc2hhZG93X3N0YWNrX2ZyYW1lX2luZm8NCj4gPiArCQkgICAgICAgKGdkYmFyY2gs IHJhbmdlLCBzdGQ6OmFicyAoY291bnQpLCAqY3VycmVudCk7DQo+IA0KPiAuLi4gc28gdGhpcyBj YWxsIHNob3VsZCBwYXNzIHN0ZDo6YWJzIChjb3VudCkgLSAxIGFzIGFyZ3VtZW50Lg0KDQpIbSwg SSBhbSBub3Qgc3VyZSBpZiBJIGNhbiBmb2xsb3cuIFdpdGggdGhlIGZpeCBmb3IgcGFzc2luZyBs ZXZlbCBpbnN0ZWFkDQpvZiBjb3VudCBteSBjdXJyZW50IG91dHB1dCBsb29rcyBhcyBmb2xsb3c6 DQogICAgICAgDQp+fn4NCkJyZWFrcG9pbnQgMSwgY2FsbDIgKCkgYXQgL3RtcC9hbWQ2NC1zaGFk b3ctc3RhY2suYzoyMQ0KMjEgICAgICAgIHJldHVybiA0MjsgLyogYnJlYWsgY2FsbDIuICAqLw0K KGdkYikgYnQgLXBhc3QtbWFpbg0KIzAgIGNhbGwyICgpIGF0IC90bXAgL2FtZDY0LXNoYWRvdy1z dGFjay5jOjIxDQojMSAgMHgwMDAwNTU1NTU1NTU1MTQyIGluIGNhbGwxICgpIGF0IC90bXAvYW1k NjQtc2hhZG93LXN0YWNrLmM6MjcNCiMyICAweDAwMDA1NTU1NTU1NTUxNTMgaW4gbWFpbiAoKSBh dCAvdG1wL2FtZDY0LXNoYWRvdy1zdGFjay5jOjM4DQojMyAgMHgwMDAwN2ZmZmY3YzJhMWNhIGlu IF9fbGliY19zdGFydF9jYWxsX21haW4gKFsuLi5dDQojNCAgMHgwMDAwN2ZmZmY3YzJhMjhiIGlu IF9fbGliY19zdGFydF9tYWluX2ltcGwgKFsuLi5dKSBhdCAuLi9jc3UvbGliYy1zdGFydC5jOjM2 MA0KIzUgIDB4MDAwMDU1NTU1NTU1NTA2NSBpbiBfc3RhcnQgKCkNCihnZGIpIGJ0IC1wYXN0LW1h aW4gLTMNCiMzICAweDAwMDA3ZmZmZjdjMmExY2EgaW4gX19saWJjX3N0YXJ0X2NhbGxfbWFpbiAo Wy4uLl0pIGF0IC4uL3N5c2RlcHMvbnB0bC9saWJjX3N0YXJ0X2NhbGxfbWFpbi5oOjU4DQojNCAg MHgwMDAwN2ZmZmY3YzJhMjhiIGluIF9fbGliY19zdGFydF9tYWluX2ltcGwgKFsuLi5dKSAgICBh dCAuLi9jc3UvbGliYy1zdGFydC5jOjM2MA0KIzUgIDB4MDAwMDU1NTU1NTU1NTA2NSBpbiBfc3Rh cnQgKCkNCihnZGIpIGJ0IHNoYWRvdyAtMw0KIzIgIDB4MDAwMDdmZmZmN2MyYTFjYSBpbiBfX2xp YmNfc3RhcnRfY2FsbF9tYWluIGF0IC4uL3N5c2RlcHMvbnB0bC9saWJjX3N0YXJ0X2NhbGxfbWFp bi5oOjc0DQojMyAgMHgwMDAwN2ZmZmY3YzJhMjhiIGluIF9fbGliY19zdGFydF9tYWluX2ltcGwg YXQgLi4vY3N1L2xpYmMtc3RhcnQuYzoxMjgNCiM0ICAweDAwMDA1NTU1NTU1NTUwNjUgaW4gX3N0 YXJ0DQooZ2RiKSBidCBzaGFkb3cNCiMwICAweDAwMDA1NTU1NTU1NTUxNDIgaW4gY2FsbDEgYXQg L3RtcC9hbWQ2NC1zaGFkb3ctc3RhY2suYzoyOA0KIzEgIDB4MDAwMDU1NTU1NTU1NTE1MyBpbiBt YWluIGF0IC90bXAvYW1kNjQtc2hhZG93LXN0YWNrLmM6MzkNCiMyICAweDAwMDA3ZmZmZjdjMmEx Y2EgaW4gX19saWJjX3N0YXJ0X2NhbGxfbWFpbiBhdCAuLi9zeXNkZXBzL25wdGwvbGliY19zdGFy dF9jYWxsX21haW4uaDo3NA0KIzMgIDB4MDAwMDdmZmZmN2MyYTI4YiBpbiBfX2xpYmNfc3RhcnRf bWFpbl9pbXBsIGF0IC4uL2NzdS9saWJjLXN0YXJ0LmM6MTI4DQojNCAgMHgwMDAwNTU1NTU1NTU1 MDY1IGluIF9zdGFydA0Kfn5+DQoNCldoaWNoIGlzIGNvcnJlY3QgZnJvbSBteSBwZXJzcGVjdGl2 ZSwgYnV0IG1heWJlIEkgYW0gbWlzc2luZyBzb21ldGhpbmcuIA0KSSB0aGluayBJIGxvc3QgdGhl IG92ZXJ2aWV3IGEgYml0LCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaXNzdWVzIGluIG15IGNvZGUg aGVyZSwgdW5mb3J0dW5hdGVseS4gOi8NCk5vdGUgdGhhdCBmb3IgdGhpcyBvdXRwdXQgSSBzdGls bCBwcmludCB0aGUgbGV2ZWwgc3RhcnRpbmcgYXQgMC4gV2lsbCBhcHBseSB0aGlzIGNoYW5nZSBv bmNlIHRoZSBvdGhlciBpc3N1ZXMgYXJlIGNsZWFyLg0KDQo+ID4gKwkgIGlmICghdHJhaWxpbmcu aGFzX3ZhbHVlICgpKQ0KPiA+ICsJICAgIHJlYXNvbiA9IGN1cnJlbnQtPnVud2luZF9zdG9wX3Jl YXNvbjsNCj4gPiArCX0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgaWYgKCF0cmFpbGluZy5o YXNfdmFsdWUgKCkpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIGlmIChyZWFzb24gPiBzc3BfdW53 aW5kX3N0b3BfcmVhc29uOjpub19lcnJvcikNCj4gPiArCWVycm9yIChfKCJDYW5ub3QgcHJpbnQg c2hhZG93IHN0YWNrIGJhY2t0cmFjZTogJXMuXG4iKSwNCj4gPiArCSAgICAgICBzc3BfdW53aW5k X3N0b3BfcmVhc29uX3RvX2Vycl9zdHJpbmcgKHJlYXNvbikpOw0KPiA+ICsgICAgICBlbHNlDQo+ ID4gKwlnZGJfYXNzZXJ0X25vdF9yZWFjaGVkICgiaW52YWxpZCByZWFzb24iKTsNCj4gPiArICAg IH0NCj4gDQo+IEl0J3MgY2xlYXJlciB0byB3cml0ZSB0aGlzIGFzOg0KPiANCj4gICBpZiAoIXRy YWlsaW5nLmhhc192YWx1ZSAoKSkNCj4gICAgIHsNCj4gICAgICAgZ2RiX2Fzc2VydCAocmVhc29u ICE9IHNzcF91bndpbmRfc3RvcF9yZWFzb246Om5vX2Vycm9yKTsNCj4gDQo+ICAgICAgIGVycm9y IChfKCJDYW5ub3QgcHJpbnQgc2hhZG93IHN0YWNrIGJhY2t0cmFjZTogJXMuXG4iKSwNCj4gCSAg ICAgc3NwX3Vud2luZF9zdG9wX3JlYXNvbl90b19lcnJfc3RyaW5nIChyZWFzb24pKTsNCj4gICAg IH0NCg0KSSBhZ3JlZSwgSSBjaGFuZ2VkIHRoYXQuDQoNCj4gPiArDQo+ID4gKyAgY3VycmVudCA9 IHRyYWlsaW5nOw0KPiA+ICsgIHdoaWxlIChjdXJyZW50Lmhhc192YWx1ZSAoKSAmJiBjb3VudC0t KQ0KPiANCj4gVGhlIEdEQiBDb2RpbmcgU3RhbmRhcmQgc2F5cyB0aGF0IGNvbXBhcmluZyBhIG51 bWJlciB0byB6ZXJvIHNob3VsZCBiZQ0KPiBleHBsaWNpdCwgc28gImNvdW50LS0gIT0gMCIgaGVy ZS4gSSBzZWUgdGhhdCBiYWNrdHJhY2VfY29tbWFuZF8xIGFscmVhZHkgaGFzDQo+IHRoZSBpbXBs aWNpdCBjb21wYXJpc29uLCBidXQgaXQncyBwcm9iYWJseSBhIG1pc3Rha2UgdGhlcmUgKG9yIGp1 c3Qgb2xkIGNvZGUpLg0KDQpZZXMsIGZpeGVkLiBUaGFua3MhDQoNCj4gDQo+IEFsc28sIGFub3Ro ZXIgd2F5IG9mIGV4cHJlc3NpbmcgdGhlIGFib3ZlIHdvdWxkIGJlOg0KPiANCj4gICBmb3IgKGN1 cnJlbnQgPSB0cmFpbGluZzsgY3VycmVudC5oYXNfdmFsdWUgKCkgJiYgY291bnQgIT0gMDsgY291 bnQtLSkNCj4gDQo+IEkgcGVyc29uYWxseSB0aGluayBpdCdzIGNsZWFyZXIgKGVzcGVjaWFsbHkg YmVjYXVzZSB0aGUgY29tcGFyaXNvbiBhbmQNCj4gZGVjcmVtZW50IGFyZSBzZXBhcmF0ZSksIGJ1 dCBpdCdzIG1vcmUgb2YgYSBwZXJzb25hbCBwcmVmZXJlbmNlIHNvIEkgZG9uJ3QNCj4gcmVhbGx5 IG1pbmQgZWl0aGVyIHdheS4NCg0KSSBhZ3JlZSwgYW5kIHRvb2sgeW91ciBzdWdnZXN0aW9uLCB0 aGFua3MgITopIA0KDQo+IA0KPiA+ICsgICAgew0KPiA+ICsgICAgICBRVUlUOw0KPiA+ICsNCj4g PiArICAgICAgcHJpbnRfc2hhZG93X3N0YWNrX2ZyYW1lX2luZm8gKGdkYmFyY2gsIHByaW50X29w dGlvbnMsICpjdXJyZW50LA0KPiA+ICsJCQkJICAgICBMT0NBVElPTik7DQo+ID4gKw0KPiA+ICsg ICAgICB0cmFpbGluZyA9IGN1cnJlbnQ7DQo+ID4gKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT51 bndpbmRfcHJldl9zaGFkb3dfc3RhY2tfZnJhbWVfaW5mbyAoZ2RiYXJjaCwNCj4gPiArCQkJCQkJ CSAgICAgIHJhbmdlKTsNCj4gDQo+IFRoaXMgbGluZSBmaXRzIGluIDgwIGNvbHVtbnMgYW5kIGRv ZXNuJ3QgbmVlZCB0byBiZSBicm9rZW4uDQoNCkhtLCB3ZWlyZCwgSSBhZ2FpbiBjb3VudCBtb3Jl IHRoYW4gODAgY29sdW1ucy4NCg0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAvKiBJZiB3ZSd2 ZSBzdG9wcGVkIGJlZm9yZSB0aGUgZW5kLCBtZW50aW9uIHRoYXQuICAqLyAgaWYgKGN1cnJlbnQN Cj4gPiArICYmIGZyb21fdHR5KQ0KPiANCj4gV2hpbGUgaXQncyBjb3JyZWN0IHRvIHVzZSBhbiBz dGQ6Om9wdGlvbmFsIGluIHRoaXMgd2F5IHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGENCj4gdmFs dWUsIElNSE8gaXQncyBjbGVhcmVyIHRvIGJlIG1vcmUgZXhwbGljaXQgYW5kIHVzZSB0aGUgaGFz X3ZhbHVlIG1ldGhvZC4NCj4gSXQncyBhbHNvIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0 aGUgY29kZSBpbiB0aGlzIGZ1bmN0aW9uLg0KDQpJIGFncmVlLiBJIGZpeGVkIHRoYXQuDQoNCj4g PiArICAgIGdkYl9wcmludGYgKF8oIihNb3JlIHNoYWRvdyBzdGFjayBmcmFtZXMgZm9sbG93Li4u KVxuIikpOw0KPiA+ICsNCj4gPiArICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIHNoYWRvdyBzdGFj ayBmcmFtZXMsIGFuZCB0aGUgcmVhc29uIGFwcGVhcnMgdG8NCj4gPiArICAgICBiZSBhbiBlcnJv ciBjb25kaXRpb24sIHByaW50IGl0LiAgKi8gIGlmICghY3VycmVudC5oYXNfdmFsdWUgKCkNCj4g PiArICYmIHRyYWlsaW5nLmhhc192YWx1ZSAoKQ0KPiANCj4gSWYgSSdtIG5vdCBtaXN0YWtlbiwg dHJhaWxpbmcuaGFzX3ZhbHVlICgpIGlzIGFsd2F5cyB0cnVlIGF0IHRoaXMgcG9pbnQuDQoNCkkg YWdyZWUsIHRoaXMgbG9naWMgaXMgZnJvbSBiYWNrdHJhY2VfY29tbWFuZF8xLiANCkkgdGhpbmsg YWRkaW5nIGFuIGFzc2VydCBoZXJlIHNob3VsZCBiZSBmaW5lIGluc3RlYWQsIHNvIEkgc3VnZ2Vz dCB0aGUgZm9sbG93aW5nOg0KDQp+fn4NClsuLi5dDQogIC8qIElmIHdlJ3ZlIHN0b3BwZWQgYmVm b3JlIHRoZSBlbmQsIG1lbnRpb24gdGhhdC4gICovDQogIGlmIChjdXJyZW50Lmhhc192YWx1ZSAo KSAmJiBmcm9tX3R0eSkNCiAgICBnZGJfcHJpbnRmIChfKCIoTW9yZSBzaGFkb3cgc3RhY2sgZnJh bWVzIGZvbGxvdy4uLilcbiIpKTsNCg0KICAvKiBEdWUgdG8gdGhlIGxvb3AgYWJvdmUsIHRyYWls aW5nIGFsd2F5cyBoYXMgYSB2YWx1ZSBhdCB0aGlzIHBvaW50LiAgKi8NCiAgZ2RiX2Fzc2VydCAo dHJhaWxpbmcuaGFzX3ZhbHVlICgpKTsNCg0KICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIHNoYWRv dyBzdGFjayBmcmFtZXMsIGFuZCB0aGUgcmVhc29uIGFwcGVhcnMgdG8NCiAgICAgYmUgYW4gZXJy b3IgY29uZGl0aW9uLCBwcmludCBpdC4gICovDQpbLi4uXQ0Kfn5+DQoNClBsZWFzZSBsZXQgbWUg a25vdyBpZiB5b3UgdGhpbmsgb3RoZXJ3aXNlLg0KDQo+ID4gKyAgICAgICYmICh0cmFpbGluZy0+ dW53aW5kX3N0b3BfcmVhc29uID4NCj4gc3NwX3Vud2luZF9zdG9wX3JlYXNvbjo6bm9fZXJyb3Ip KQ0KPiA+ICsgICAgZ2RiX3ByaW50ZiAoXygiU2hhZG93IHN0YWNrIGJhY2t0cmFjZSBzdG9wcGVk IGF0IHNoYWRvdyBzdGFjayAiIFwNCj4gPiArCQkgICJwb2ludGVyICVzIGR1ZSB0bzogJXMuXG4i KSwNCj4gPiArCQlwYWRkcmVzcyAoZ2RiYXJjaCwgdHJhaWxpbmctPnNzcCksDQo+ID4gKwkJc3Nw X3Vud2luZF9zdG9wX3JlYXNvbl90b19lcnJfc3RyaW5nDQo+ID4gKwkJICAodHJhaWxpbmctPnVu d2luZF9zdG9wX3JlYXNvbikpOw0KPiA+ICt9DQo+IA0KPiA8c25pcD4NCj4gDQo+ID4gZGlmZiAt LWdpdCBhL2dkYi9zdGFjay5jIGIvZ2RiL3N0YWNrLmMgaW5kZXggNDA3NTZmNzRhMDAuLjMwYTdk ODYyMWJlDQo+ID4gMTAwNjQ0DQo+ID4gLS0tIGEvZ2RiL3N0YWNrLmMNCj4gPiArKysgYi9nZGIv c3RhY2suYw0KPiA+IEBAIC01MCw2ICs1MCw3IEBADQo+ID4gICNpbmNsdWRlICJsaW5lc3BlYy5o Ig0KPiA+ICAjaW5jbHVkZSAiY2xpL2NsaS11dGlscy5oIg0KPiA+ICAjaW5jbHVkZSAib2JqZmls ZXMuaCINCj4gPiArI2luY2x1ZGUgInNoYWRvdy1zdGFjay5oIg0KPiA+DQo+ID4gICNpbmNsdWRl ICJzeW1maWxlLmgiDQo+ID4gICNpbmNsdWRlICJleHRlbnNpb24uaCINCj4gPiBAQCAtODYsNyAr ODcsNyBAQCBjb25zdCBjaGFyIHByaW50X2ZyYW1lX2luZm9fc291cmNlX2FuZF9sb2NhdGlvbltd ID0NCj4gPiAic291cmNlLWFuZC1sb2NhdGlvbiI7ICBjb25zdCBjaGFyDQo+ID4gcHJpbnRfZnJh bWVfaW5mb19sb2NhdGlvbl9hbmRfYWRkcmVzc1tdID0gImxvY2F0aW9uLWFuZC1hZGRyZXNzIjsN Cj4gPiBjb25zdCBjaGFyIHByaW50X2ZyYW1lX2luZm9fc2hvcnRfbG9jYXRpb25bXSA9ICJzaG9y dC1sb2NhdGlvbiI7DQo+ID4NCj4gPiAtc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHByaW50X2Zy YW1lX2luZm9fY2hvaWNlc1tdID0NCj4gPiArY29uc3QgY2hhciAqY29uc3QgcHJpbnRfZnJhbWVf aW5mb19jaG9pY2VzW10gPQ0KPiA+ICB7DQo+ID4gICAgcHJpbnRfZnJhbWVfaW5mb19hdXRvLA0K PiA+ICAgIHByaW50X2ZyYW1lX2luZm9fc291cmNlX2xpbmUsDQo+ID4gQEAgLTk2MiwxMSArOTYz LDkgQEAgZG9fZ2RiX2Rpc2Fzc2VtYmx5IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwNCj4gPiAg ICAgIH0NCj4gPiAgfQ0KPiA+DQo+ID4gLS8qIENvbnZlcnRzIHRoZSBQUklOVF9GUkFNRV9JTkZP IGNob2ljZSB0byBhbiBvcHRpb25hbCBlbnVtDQo+IHByaW50X3doYXQuDQo+ID4gLSAgIFZhbHVl IG5vdCBwcmVzZW50IGluZGljYXRlcyB0byB0aGUgY2FsbGVyIHRvIHVzZSBkZWZhdWx0IHZhbHVl cw0KPiA+IC0gICBzcGVjaWZpYyB0byB0aGUgY29tbWFuZCBiZWluZyBleGVjdXRlZC4gICovDQo+ ID4gKy8qIFNlZSBzdGFjay5oLiAgKi8NCj4gPg0KPiA+IC1zdGF0aWMgc3RkOjpvcHRpb25hbDxl bnVtIHByaW50X3doYXQ+DQo+ID4gK3N0ZDo6b3B0aW9uYWw8ZW51bSBwcmludF93aGF0Pg0KPiA+ ICBwcmludF9mcmFtZV9pbmZvX3RvX3ByaW50X3doYXQgKGNvbnN0IGNoYXIgKnByaW50X2ZyYW1l X2luZm8pICB7DQo+ID4gICAgZm9yIChpbnQgaSA9IDA7IHByaW50X2ZyYW1lX2luZm9fY2hvaWNl c1tpXSAhPSBOVUxMOyBpKyspIEBADQo+ID4gLTEwMTYsNyArMTAxNSw3IEBAIGdldF91c2VyX3By aW50X3doYXRfZnJhbWVfaW5mbw0KPiAoc3RkOjpvcHRpb25hbDxlbnVtDQo+ID4gcHJpbnRfd2hh dD4gKndoYXQpDQo+ID4gIC8qIFJldHVybiB0cnVlIGlmIFBSSU5UX1dIQVQgaXMgY29uZmlndXJl ZCB0byBwcmludCB0aGUgbG9jYXRpb24gb2YgYQ0KPiA+ICAgICBmcmFtZS4gICovDQo+IA0KPiBD aGFuZ2UgY29tbWVudCBoZXJlIHRvIC8qIFNlZSBzdGFjay5oLiAgKi8NCg0KRml4ZWQuDQoNCj4g DQo+ID4gLXN0YXRpYyBib29sDQo+ID4gK2Jvb2wNCj4gPiAgc2hvdWxkX3ByaW50X2xvY2F0aW9u IChwcmludF93aGF0IHByaW50X3doYXQpICB7DQo+ID4gICAgcmV0dXJuIChwcmludF93aGF0ID09 IExPQ0FUSU9ODQo+ID4gQEAgLTEwMjUsMTQgKzEwMjQsOSBAQCBzaG91bGRfcHJpbnRfbG9jYXRp b24gKHByaW50X3doYXQgcHJpbnRfd2hhdCkNCj4gPiAgCSAgfHwgcHJpbnRfd2hhdCA9PSBTSE9S VF9MT0NBVElPTik7DQo+ID4gIH0NCj4gPg0KPiA+IC0vKiBQcmludCB0aGUgc291cmNlIGluZm9y bWF0aW9uIGZvciBQQyBhbmQgU0FMIHRvIFVJT1VULiAgQmFzZWQgb24gdGhlDQo+ID4gLSAgIHVz ZXItZGVmaW5lZCBjb25maWd1cmF0aW9uIGRpc2Fzc2VtYmxlLW5leHQtbGluZSwgZGlzcGxheSBk aXNhc3NlbWJseQ0KPiA+IC0gICBvZiB0aGUgbmV4dCBzb3VyY2UgbGluZSwgaW4gYWRkaXRpb24g dG8gZGlzcGxheWluZyB0aGUgc291cmNlIGxpbmUNCj4gPiAtICAgaXRzZWxmLiAgUHJpbnQgYW5u b3RhdGlvbnMgZGVzY3JpYmluZyBzb3VyY2UgZmlsZSBhbmQgYW5kIGxpbmUgbnVtYmVyDQo+ID4g LSAgIGJhc2VkIG9uIE1JRF9TVEFURU1FTlQgaW5mb3JtYXRpb24uICBJZiBTSE9XX0FERFJFU1Mg aXMgdHJ1ZSwgcHJpbnQNCj4gdGhlDQo+ID4gLSAgIHByb2dyYW0gY291bnRlciBQQyBpbmNsdWRp bmcsIGlmIG5vbi1lbXB0eSwgUENfQUREUkVTU19GTEFHUy4gICovDQo+ID4gKy8qIFNlZSBzdGFj ay5oLiAgKi8NCj4gPg0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+ICt2b2lkDQo+ID4gIHByaW50X3Nv dXJjZSAodWlfb3V0ICp1aW91dCwgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9BRERSIHBjLA0KPiA+ ICAJICAgICAgc3ltdGFiX2FuZF9saW5lIHNhbCwgYm9vbCBzaG93X2FkZHJlc3MsIGludCBtaWRf c3RhdGVtZW50LA0KPiA+ICAJICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnBjX2FkZHJlc3NfZmxh Z3MpIEBAIC0xMjk4LDcgKzEyOTIsNyBAQA0KPiA+IGdldF9sYXN0X2Rpc3BsYXllZF9zYWwgKCkN Cj4gPg0KPiA+ICAvKiBGaW5kIHRoZSBmdW5jdGlvbiBuYW1lIGZvciB0aGUgc3ltYm9sIFNZTS4g ICovDQo+IA0KPiBDaGFuZ2UgY29tbWVudCBoZXJlIHRvIC8qIFNlZSBzdGFjay5oLiAgKi8NCg0K UmlnaHQsIGZpeGVkLg0KDQo+ID4NCj4gPiAtc3RhdGljIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRy PGNoYXI+DQo+ID4gK2dkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+DQo+ID4gIGZpbmRfc3lt Ym9sX2Z1bm5hbWUgKGNvbnN0IHN5bWJvbCAqc3ltKSAgew0KPiA+ICAgIGdkYjo6dW5pcXVlX3ht YWxsb2NfcHRyPGNoYXI+IGZ1bm5hbWU7DQo+IA0KPiA8c25pcD4NCj4gDQo+ID4gKy8qIENvbXBs ZXRlciBmb3IgdGhlICJiYWNrdHJhY2Ugc2hhZG93IiBzdWItY29tbWFuZC4gICovDQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZA0KPiA+ICtiYWNrdHJhY2Vfc2hhZG93X2NvbW1hbmRfY29tcGxldGVy IChzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudA0KPiAqaWdub3JlLA0KPiA+ICsJCQkJICAgIGNvbXBs ZXRpb25fdHJhY2tlciAmdHJhY2tlciwNCj4gPiArCQkJCSAgICBjb25zdCBjaGFyICp0ZXh0LCBj b25zdCBjaGFyICovKndvcmQqLykgew0KPiA+ICsgIGNvbnN0IGF1dG8gZ3JvdXANCj4gPiArICAg ID0gbWFrZV9iYWNrdHJhY2Vfc2hhZG93X29wdGlvbnNfZGVmX2dyb3VwIChudWxscHRyKTsNCj4g PiArICBpZiAoZ2RiOjpvcHRpb246OmNvbXBsZXRlX29wdGlvbnMNCj4gPiArICAgICAgKHRyYWNr ZXIsICZ0ZXh0LA0KPiBnZGI6Om9wdGlvbjo6UFJPQ0VTU19PUFRJT05TX1VOS05PV05fSVNfT1BF UkFORCwgZ3JvdXApKQ0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsNCj4gPiArICBjb25zdCBjaGFy ICp3b3JkID0gYWR2YW5jZV90b19leHByZXNzaW9uX2NvbXBsZXRlX3dvcmRfcG9pbnQNCj4gPiAr KHRyYWNrZXIsIHRleHQpOw0KPiA+ICsgIGV4cHJlc3Npb25fY29tcGxldGVyIChpZ25vcmUsIHRy YWNrZXIsIHRleHQsIHdvcmQpOyB9DQo+IA0KPiBJIHdvdWxkIHB1dCB0aGlzIGZ1bmN0aW9uIGlu IHNoYWRvdy1zdGFjay5jLg0KDQpZZXMsIEkgY291bGQgZG8gdGhhdC4gQnV0IEkgYmVsaWV2ZSBv bmNlIHdlIGNoYW5nZWQgImJ0IHNoYWRvdyIgdG8gImJ0IC1zaGFkb3ciLA0KV2UgZG9uJ3QgbmVl ZCB0aGlzIGFueW1vcmUuIEJ1dCBpZiB3ZSBkbywgSSdsbCBtb3ZlIGl0LiANCg0KPiANCj4gPHNu aXA+DQo+IA0KPiA+IGRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5hcmNoL2FtZDY0LXNo YWRvdy1zdGFjay1jbWRzLmV4cA0KPiA+IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXJjaC9hbWQ2NC1z aGFkb3ctc3RhY2stY21kcy5leHANCj4gPiBpbmRleCAwYWUxNzJkN2M0MS4uNDU2M2U0OWQ5ZTQg MTAwNjQ0DQo+ID4gLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXJjaC9hbWQ2NC1zaGFkb3ctc3Rh Y2stY21kcy5leHANCj4gPiArKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5hcmNoL2FtZDY0LXNoYWRv dy1zdGFjay1jbWRzLmV4cA0KPiA+IEBAIC0xMDksNiArMTA5LDk0IEBAIHNhdmVfdmFycyB7IDo6 ZW52KEdMSUJDX1RVTkFCTEVTKSB9IHsNCj4gPiAgCWdkYl90ZXN0ICJwcmludCAveCBcJHBsM19z c3AiICI9ICRzc3BfY2FsbDIiICJjaGVjayBwbDNfc3NwIG9mIGZyYW1lDQo+IDAiDQo+ID4gICAg ICB9DQo+ID4NCj4gPiArICAgIHNldCBmaWxsICJcW15cclxuXF0rIg0KPiA+ICsgICAgIyBCdWls ZCBzaGFkb3cgc3RhY2sgZnJhbWVzIHRvIHRlc3QgdGhlICdiYWNrdHJhY2Ugc2hhZG93JyBjb21t YW5kLg0KPiA+ICsgICAgc2V0IHNzcHZhbF9tYWluIFtnZXRfdmFsdWVvZiAiL3oiICIqKGxvbmcg bG9uZyBpbnQqKSRzc3BfbWFpbiIgIiJdDQo+ID4gKyAgICBzZXQgc3NwdmFsX2NhbGwxIFtnZXRf dmFsdWVvZiAiL3oiICIqKGxvbmcgbG9uZyBpbnQqKSRzc3BfY2FsbDEiICIiXQ0KPiA+ICsgICAg c2V0IHNzcHZhbF9jYWxsMiBbZ2V0X3ZhbHVlb2YgIi96IiAiKihsb25nIGxvbmcgaW50Kikkc3Nw X2NhbGwyIg0KPiA+ICsgIiJdDQo+IA0KPiBJIHN1Z2dlc3QgYWRkaW5nIGEgZGVzY3JpcHRpdmUg dGVzdCBuYW1lIHRvIHRoZSBnZXRfdmFsdWVvZiBjYWxscyBhYm92ZS4NCj4gUGVyaGFwcyAicmVh ZCBuZXdlc3Qgc2hhZG93IHN0YWNrIGVudHJ5IGF0IG1haW4vY2FsbDEvY2FsbDIiPw0KDQpPaywg YWRkZWQuDQoNCj4gDQo+ID4gKyAgICBzZXQgZnJhbWUwICIjMFxbIFx0XF0qJHNzcHZhbF9jYWxs MiBpbiBjYWxsMSRmaWxsIg0KPiA+ICsgICAgc2V0IGZyYW1lMSAiIzFcWyBcdFxdKiRzc3B2YWxf Y2FsbDEgaW4gbWFpbiRmaWxsIg0KPiA+ICsgICAgc2V0IGZyYW1lMiAiIzJcWyBcdFxdKiRzc3B2 YWxfbWFpbiRmaWxsIg0KPiA+ICsNCj4gPiArICAgICMgV2UgY2FuIG9ubHkgdGVzdCB0aGF0IHdl IHByaW50IHRoZSBmaXJzdCAzIGZyYW1lcyBjb3JyZWN0bHksIGFzIHRoZQ0KPiA+ICsgICAgIyBz aGFkb3cgc3RhY2sgZW5hYmxlbWVudCBtaWdodCBkZXBlbmQgb24gdGhlIHVuZGVybHlpbmcgT1Mu DQo+ID4gKyAgICBnZGJfdGVzdCAiYnQgc2hhZG93IiBcDQo+ID4gKwlbbXVsdGlfbGluZSBcDQo+ ID4gKwkgICAgIiRmcmFtZTAiIFwNCj4gPiArCSAgICAiJGZyYW1lMSIgXA0KPiA+ICsJICAgICIk ZnJhbWUyIiBcDQo+ID4gKwkgICAgIi4qIiBdIFwNCj4gPiArCSJ0ZXN0IHNoYWRvdyBzdGFjayBi YWNrdHJhY2UgdW50aWwgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suIg0KPiA+ICsNCj4gPiArICAg IGdkYl90ZXN0ICJidCBzaGFkb3cgMiIgXA0KPiA+ICsJW211bHRpX2xpbmUgXA0KPiA+ICsJICAg ICIkZnJhbWUwIiBcDQo+ID4gKwkgICAgIiRmcmFtZTEiIFwNCj4gPiArCSAgICAiXFwoTW9yZSBz aGFkb3cgc3RhY2sgZnJhbWVzIGZvbGxvdy4uLlxcKSIgXSBcDQo+ID4gKwkidGVzdCBzaGFkb3cg c3RhY2sgYmFja3RyYWNlIHdpdGggYSBwb3NpdGl2ZSB2YWx1ZSBmb3IgY291bnQiDQo+ID4gKw0K PiA+ICsgICAgIyBXZSBjYW4gb25seSB0ZXN0IHRoYXQgd2UgcHJpbnQgYSBzaW5nbGUgZnJhbWUs IGFzIHRoZSBzaGFkb3cgc3RhY2sNCj4gPiArICAgICMgZW5hYmxlbWVudCBtaWdodCBkZXBlbmQg b24gdGhlIHVuZGVybHlpbmcgT1MuDQo+ID4gKyAgICBnZGJfdGVzdCAiYnQgc2hhZG93IC0xIiAi IyRkZWNpbWFsXFsgXHRcXSokaGV4JGZpbGwiIFwNCj4gPiArCSJ0ZXN0IHNoYWRvdyBzdGFjayBi YWNrdHJhY2Ugd2l0aCBhIG5lZ2F0aXZlIHZhbHVlIGZvciBjb3VudCINCj4gDQo+IEluIG15IEdD UyB0ZXN0Y2FzZSB0aGlzIHRlc3QgaXMgcGFzc2luZywgZXZlbiB0aG91Z2ggdGhlIGNvbW1hbmQg aXMgcHJpbnRpbmcNCj4gbW9yZSB0aGFuIG9uZSBmcmFtZToNCj4gDQo+IGJ0IHNoYWRvdyAtMQ0K PiAjMyAgMHgwMDAwYWFhYWFhYWEwOGMwIGluIGNhbGwxIGF0IC9ob21lL2JhdWVybWFubi9zcmMv YmludXRpbHMtDQo+IGdkYi9nZGIvdGVzdHN1aXRlL2dkYi5hcmNoL2FhcmNoNjQtZ2NzLXJldHVy bi5jOjcxDQo+ICM0ICAweDAwMDBhYWFhYWFhYTA5ZDQgaW4gbWFpbiBhdCAvaG9tZS9iYXVlcm1h bm4vc3JjL2JpbnV0aWxzLQ0KPiBnZGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXJjaC9hYXJjaDY0LWdj cy1yZXR1cm4uYzoxMTANCj4gIzUgIDB4MDAwMDAwMDAwMDAwMDAwMCBpbiA/Pw0KPiAoZ2RiKSBQ QVNTOiBnZGIuYXJjaC9hYXJjaDY0LWdjcy1iYWNrdHJhY2UuZXhwOiB0ZXN0IHNoYWRvdyBzdGFj ayBiYWNrdHJhY2UNCj4gd2l0aCBhIG5lZ2F0aXZlIHZhbHVlIGZvciBjb3VudA0KPg0KPiBTbyB0 aGVyZSdzIG9uZSBidWcgaW4gR0RCLCBhbmQgb25lIGluIHRoZSB0ZXN0Y2FzZS4gVG8gZml4IHRo ZSB0ZXN0Y2FzZSBidWcsIEkNCj4gYmVsaWV2ZSB5b3UganVzdCBoYXZlIHRvIGFkZCAnXicgdG8g dGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0dGVybi4NCj4gVGhlIGJ1ZyBpbiBHREIgd2FzIGZpeGVk IGJ5IGNoYW5naW5nIHRoZSBleHByZXNzaW9uIHRvIGNhbGN1bGF0ZSAnbGV2ZWwnDQo+IGluIGdl dF90cmFpbGluZ19vdXRlcm1vc3Rfc2hhZG93X3N0YWNrX2ZyYW1lX2luZm8gYXMgSSBtZW50aW9u ZWQgYWJvdmUuDQo+IA0KPiAtLQ0KPiBUaGlhZ28NCg0KVGhhbmtzIGEgbG90IGZvciBzcG90dGlu ZyB0aGlzLiBJIGZpeGVkIHRoZSBHREIgYnVnIGJ5IHBhc3NpbmcgImxldmVsIiBpbnN0ZWFkIG9m IGNvdW50DQphbmQgYWRkZWQgdGhlICdeJyBpbiB0aGUgdGVzdGNhc2UsIGp1c3QgbGlrZSB5b3Ug c3VnZ2VzdGVkLg0KDQpDaHJpc3RpbmENCg0KSW50ZWwgRGV1dHNjaGxhbmQgR21iSA0KUmVnaXN0 ZXJlZCBBZGRyZXNzOiBEb3JuYWNoZXIgU3RyYcOfZSAxLCA4NTYyMiBGZWxka2lyY2hlbiwgR2Vy bWFueQ0KVGVsOiArNDkgODkgOTkxIDQzMCwgd3d3LmludGVsLmRlDQpNYW5hZ2luZyBEaXJlY3Rv cnM6IEhhcnJ5IERlbWFzLCBKZWZmcmV5IFNjaG5laWRlcm1hbiwgWWluIENob25nIFNvcnJlbGwN CkNoYWlycGVyc29uIG9mIHRoZSBTdXBlcnZpc29yeSBCb2FyZDogTmljb2xlIExhdQ0KUmVnaXN0 ZXJlZCBTZWF0OiBNdW5pY2gNCkNvbW1lcmNpYWwgUmVnaXN0ZXI6IEFtdHNnZXJpY2h0IE3DvG5j aGVuIEhSQiAxODY5MjgK