From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id mmKDBmZ3KWqFyT8AWB0awg (envelope-from ) for ; Wed, 10 Jun 2026 10:40:38 -0400 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=VmIpGL1I; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 082821E070; Wed, 10 Jun 2026 10:40:38 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-6.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 autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::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 A61591E070 for ; Wed, 10 Jun 2026 10:40:34 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9BAC34BA2E09 for ; Wed, 10 Jun 2026 14:40:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9BAC34BA2E09 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=VmIpGL1I Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) by sourceware.org (Postfix) with ESMTPS id A52E64BA5436 for ; Wed, 10 Jun 2026 14:39:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A52E64BA5436 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 A52E64BA5436 Authentication-Results: sourceware.org; arc=fail smtp.remote-ip=192.198.163.10 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1781102399; cv=fail; b=F4x2ewXFMxnvNvNrkHE/lhdMuKsHd00ESdYArwOWPIc/vcyCS9rpB2d7bi0tlLU6AfQeMwPl6gMguSnuTZASn7SBHVpAhKTm5nRykjhUcMRGnPfsBF1PRkF0i1NqCDNou/76EJ6Qz0/+wgGinSoNVWg/jNdJfcJjgLe1q84TQoo= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1781102399; c=relaxed/simple; bh=zdg4177VBUPt1h1yS85s4yMnCUGzr0moLFpZgGgWt98=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Ka+oEjGS94QHlbCnsgW2/HB2nI+NJLephXtcx7Y+Oc7TOjKnyoNvv9mofrWnBFdxYSNtGA8W/iHETJK45ZlgMqfTKS2k9p73NayQ4JHM/oWWx4iLc/8jSad7nAYpcfGFOiuDHTm1zPqTZlHPCZC2MMkkZox+orcg4pN8ruTG240= ARC-Authentication-Results: i=2; 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=VmIpGL1I DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A52E64BA5436 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1781102399; x=1812638399; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version:content-transfer-encoding; bh=zdg4177VBUPt1h1yS85s4yMnCUGzr0moLFpZgGgWt98=; b=VmIpGL1IKQh4L08nH8Q7FGe2OVovFQsQZmnuTEXfpCUCBdfXEu9ermMJ Qmi8Qpc2pO5e4jPMdLn6b16oPZcolby15MDWo0uZCDZyVPGB06ksBKN8a lR4tyW5kl8NdKyVqIjxjkqoR9vuhyTvYP9v0mUBGMJus2eIyynv9NHSr2 Nn/qHG8iQiTEfBU7mMiM5/iESMVQts5LWWmXnzqldXJz+Iakdl01yFyUg mCBGcTfU5OWc7WUHHQzhnOqIwrIIYzQUQd69TJsSPwPFeOqnOn3VWHjJU uB1u3m8+LFjn8Fjs5r8EqaC+yuTQJup2h9JafnGcT3U2P98WAGUE1RZU/ A==; X-CSE-ConnectionGUID: rpTG5JPNSMGDOzNLmyy6Ww== X-CSE-MsgGUID: CGCUbNjbSs2o54HtmwEYtg== X-IronPort-AV: E=McAfee;i="6800,10657,11812"; a="93285493" X-IronPort-AV: E=Sophos;i="6.24,197,1774335600"; d="scan'208";a="93285493" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jun 2026 07:39:57 -0700 X-CSE-ConnectionGUID: OaF4Gq77QJWYLqB7gT9C0Q== X-CSE-MsgGUID: nTaQzFKbRxC/OPZGCoPKzA== X-ExtLoop1: 1 Received: from fmsmsx903.amr.corp.intel.com ([10.18.126.92]) by fmviesa003.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jun 2026 07:39:57 -0700 Received: from FMSMSX901.amr.corp.intel.com (10.18.126.90) by fmsmsx903.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Wed, 10 Jun 2026 07:39:56 -0700 Received: from fmsedg902.ED.cps.intel.com (10.1.192.144) 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.37 via Frontend Transport; Wed, 10 Jun 2026 07:39:56 -0700 Received: from CY3PR05CU001.outbound.protection.outlook.com (40.93.201.70) by edgegateway.intel.com (192.55.55.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Wed, 10 Jun 2026 07:39:56 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CkZbRAVS5QvPre8Tt3bXMzLY47s42577T/H3EzPkG7GdvItfigKojqe84x+p4GdFu9m/eAvdhY6xsOOtpVKQHMmQW/mH4iVPuralHfbj/DjID5SyaaaqKK6Rv64dvwHHFuGJ2uAK479ce3hvKmgooa3w98cgQc28QOxIgrLQL8Tp5Ph3VAHlTSyoDmY6UNs58gfGCEL301JuHARVzzIiqfzqeX0F+K7cIHA8IM8/lJAfZygk6VcRoM1PD/3C8i8p+prBVcNNsp4xIlRy8R27NZwjc38qptBRk7Bjf5aNkPyTT3nY/T3j7CR3xdScYO+k6a24KJISoAaBaZMB1YN7YQ== 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=VGydKAGLQXFvGwaNvb0A+pFBUW2ZGQ/rH+l79+M48o4=; b=cOuCJnqnPfE0S56i9aFnCOKyzDABICYk5DQdTJ1N3jbdHzja0/QMRExQfBIpF+G5abAaa/DJLP7jF26i+FT1V1KSYviCb3z2hlBBIZkNuqhgyc3ke54HkOuHo0CMIvLUCOK07MGhRgWeAAbyojkSXuyCBZ1QxtiHUS82Oe4v596wmW20KosSP+oLpkamhNEGZdnTocTvUkVHXwfhXrakJbhYrm7nixsjrznjh3Aymsvg50Rh+DkEnRF2sWqafnptCJrtJVuI8XNz+mkfdSsiSLWmfiubHqQLY2D9PbqPdxDYHs6aFEl4oAXU1MKnfvdbO0DZHF0T/L3dk5oqJ56hGw== 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 SA1PR11MB5921.namprd11.prod.outlook.com (2603:10b6:806:22a::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Wed, 10 Jun 2026 14:39:52 +0000 Received: from SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::7a35:98d:f02c:b011]) by SN7PR11MB7638.namprd11.prod.outlook.com ([fe80::7a35:98d:f02c:b011%3]) with mapi id 15.21.0092.006; Wed, 10 Jun 2026 14:39:52 +0000 From: "Schimpe, Christina" To: Guinevere Larsen , "gdb-patches@sourceware.org" CC: Thiago Jung Bauermann Subject: RE: [PATCH v4 1/8] gdb/record: Refactor record history Thread-Topic: [PATCH v4 1/8] gdb/record: Refactor record history Thread-Index: AQHc8p1lgJF7J2jqaU6y8X0HXatHo7Y3yvIA Date: Wed, 10 Jun 2026 14:39:52 +0000 Message-ID: References: <20260602143342.12245-1-guinevere@redhat.com> <20260602143342.12245-2-guinevere@redhat.com> In-Reply-To: <20260602143342.12245-2-guinevere@redhat.com> 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_|SA1PR11MB5921:EE_ x-ms-office365-filtering-correlation-id: 0835411a-30ee-478c-10e2-08dec6fe21a9 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|23010399003|376014|38070700021|17096099006|18002099003|6133799003|3023799007|22082099003|56012099006|4143699003|5023799004|11063799006|18096099006; x-microsoft-antispam-message-info: 37OogEG3MdY2MvbSKOET96LmHwycn+YFuSakzRm2wL3Wrc3xlVkR0rjXfzpdWD0gM7sSJVqzbTJfjJmjuNVrt++eSJG+WcnGAFCIrTUbdIWbdD0kvi2D/WIun0+F9rQJoRu3IznRD3+1vLknama6cYRuZC8Tnw+/zqZkxvjmFHUm9Kf+OqJpovGNJHGmeR+WPXFEzfDpP2MeWHmU5YD/3GPSh9RJqxPdR7ALpkiKalqcbkSoLU68LujIClQn1Da54MxRiRkgoD3YgjKy9Y7mjmHmg52F7vCJs0hpK1gyVG/FqbyOzGFQ2+Avq7zdftt/Cgmvy3GOJzJkxF8PcWChz0fgzOfHaT1oBqOqgeZea9VDIOnDqtgQRdjMzvINNYVxfWOd9LCkSUIYQXkrGlJjVq2/hEcdfswoJQJ7uuAHoUe4JTc4gUpQm86MJLcRdtaUbl7Yx+W5nnrxCIkipEISSVoCqqYB6RqwCXrbrXA+AzeCvQXstqA3QlJ/YBNcFjqN3LQbJ8C9iBeUUFvngDZoKYpnoiBxZQbxsCU0ZgxOVSkQFUp3qvKPWvJvVTv5Rrkv+kE9Bgw6l5XCJGPjoj5Z3C4pLN+aB2iMU9QZlUWik6JCNRhnYwDA3QkxonXwN9XGKKamGx7JXITyDHF0pjRNZuyz6NgCONb5yjtrzz4UiKUZxo1VGeJjMHPGIo0Y8mB+Mt+JOzTv1Sr6U0v9JpcryILpUc+6V0f7T9XWBpt5llON3y1KtcDn0yjbt7asRAvR 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)(1800799024)(366016)(23010399003)(376014)(38070700021)(17096099006)(18002099003)(6133799003)(3023799007)(22082099003)(56012099006)(4143699003)(5023799004)(11063799006)(18096099006); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SDhscFBIc3BpemJIT2R5eWM1QkRGRE1xRThQcTc0TkNUTFloK2dLcW9WSGZJ?= =?utf-8?B?UjZ3djhFb0UxNTlEOGIxR203MWE2bU9xYkpMVWpkS1VKYlU5eENJTW4xYzUy?= =?utf-8?B?UnVBQi9nS29vdlhPS3gxZW9mcWRTN0Z2bHBDN2pabXVvV2VralNab3BGRkYw?= =?utf-8?B?L25kZi85bXhlZjdialJkQjBxOEd2VVpHTU1mb2F4YkxqYXdvc2t2RHlDQ3pP?= =?utf-8?B?Nlg0ZDRKMEFhQkZlTG45SnBNOUFXQ0ROVG9YeHd5a2d0TEF0cTdrV3Uva3Jh?= =?utf-8?B?cnJYbHRSOERZVEllbjN3U0dEWnlPeGszbVBLakVVeVVsN0tidTRDbkVhRVM2?= =?utf-8?B?SGtDN2J6U1R1UXRHYk42TTZRSlQyM2dNQlEyNFozUDJlUjNvN05BSUtRWmtE?= =?utf-8?B?RnhMNFpUQnBIeWZOa0FuQkRyd3ovYlFCazVVWkYyWW9jU0tmZjFoNDRTSUhD?= =?utf-8?B?YVRXWHRaQnk0VjFraUl3RU9tZURhWlU5ZU5HR3ZIYmlYQTl5T0o4VEdZR1JC?= =?utf-8?B?ajg4UGsyTnlSSkhQbzA5L0ZveFBYNncxWE94S2x1b2JSd0lkd0lKTE9sSXU2?= =?utf-8?B?STZUVzhWWFJXYmZ5akx2czFvNkZ0dHc2WENlcUhwNmNzNjJoY1VOTVV2VXND?= =?utf-8?B?Y2FEaEQ3V3ptNi9JYUl2ZDA2UW5XaDVzUmZZeXJWNEQxam12VnpXSWUrMWNs?= =?utf-8?B?MTF0WTh4bFFKblYzd2pZSlZyVWR4R2owQ0t0b1JLa0pOZk81TElkb2pGWnVB?= =?utf-8?B?bzZNSElxWlZ5emVlME13dDZJaGlNbHk0QklwUkhiMGcwbVdUYjFBaDZWekVr?= =?utf-8?B?NkR0L0lqUHRZb00vRFN0Rkl4MHZYcmozWFZwQ0Y4MlVTc0RDblZmdlM3YzVh?= =?utf-8?B?ZGxYUkZyRlJSWkljd1pDOE5ZUktpcWdVc0YrUDMvdThPSnhsaXRiVkhybHZh?= =?utf-8?B?NGJnNDd1c0xZSXprbzYzdGZFeUsvMEE5bXBtYVJ0cFAvb2QzWXUwNnExQnEr?= =?utf-8?B?VTBQWUx4ZE9iaUdnb0dFS013MU9Ndmtna2V4UDhnSktJcHlLZnZMcktaclJG?= =?utf-8?B?Mi80S3BFTjJnbXByTlM3Ym11UEhvZzQ2TFRDRHRmeFJxQTBLazZzRGNRTFdS?= =?utf-8?B?ZmI0WENTL3FFbW9TV2x6TGpva1djclFsUTBNQmtrNmE5eElxYThOUkZ3M0hh?= =?utf-8?B?Zit5bmVGTWdpaVFGOVhaZkQ1WFU2RWYwcHRqSEhodDh3OWdrMndNS09uYlBL?= =?utf-8?B?TjlWKzFMNFNhL2tmc0JWZmFjLzl0ZHNKMzBYQ3MrSnlQZm44aDlLV3VBSFpn?= =?utf-8?B?clpKOXZpSlFtMUV0bW1IQTZNcUlwRlJQNWhaY3FrQjVndE9yc0hWY1R4cmVp?= =?utf-8?B?VkdXSlVsTXZtVy8wOFhDeGNUUjFWbEdsVzNDU2xNUVR0WjZMZXRyeU0rL2pQ?= =?utf-8?B?RXh1NmlXcjVjMndPTVdtUnl4QUFqdUFSaUFwYmh1WWFFSHkwMDRyYVJPc29M?= =?utf-8?B?Y1lkbWc1ZG1MNGd6aG5aN3NSczc3MlhOVVlBck9pZDNzZHFOZmxxMGJrc3RG?= =?utf-8?B?VzhsZ0I3UnRWV2RTMjJPMXFEWURpV1p6cld6Z3Y5V1VXWWRGSEFsQmpBdjBx?= =?utf-8?B?WmpKczlKMWZoUXZOc1lsMlp5VXQ1UDQ0VStyallEYU1yelNpcUpZWXlmcDNz?= =?utf-8?B?b290TW1tckZtUkhmZk9GdnZBd3FINmhLdG9sZWFDM2U0SENDN25rVEFNTzVo?= =?utf-8?B?Q0hTTVhEMXBteHl4WG44V2EzRjBlS0VZT2l1U05obitsbXNjUXBNd25ETE1U?= =?utf-8?B?ZkxQaWV2WGw4SXV2Lzhmdk1BZTN2T1MvWnB3c0hMUkw2dEFKMWdkUC9GT28y?= =?utf-8?B?WTIzVFNzK2k0d2ZVUzBiZ1BPRVNFOUs0eFNzS0trU0xQYWtuaUVBbGdEakJi?= =?utf-8?B?UEZqSFA4UDI2MnBhZkxzOS9EQUNuU05sODVac1ZXVVlnVUpMMUlhMTBKK0pG?= =?utf-8?B?MDNtOC9xOXBzdDUyTnc1bngvV0RrL25YTXluWVNzNEZHNmJpMk1RblFtaXIv?= =?utf-8?B?eTc4WldvdEFpSmNhVDZVYVd1a1lma252cmdCRXBQUzg1WWxkTkJ3dlcwK3h6?= =?utf-8?B?bERTOEp1aVkwaUdXck1pK2hYRmd6c2lRdHVxR2RVQ0RIS3BKQnZqY2ZHaDM4?= =?utf-8?B?MmpuUDI4ZW1vNHFxcm9OWml6S2oxaVorV2tKKzdVUVJYUmhReXhuaEduRVVO?= =?utf-8?B?L3MvaXBLdWQxWjdQdzlJcjlaU1l6cmkxbWQ4eXR1MVJaUnBMV3dUcXBKUGtu?= =?utf-8?B?WDM1b0Qwb1poU21EYUlYTy9BQ0R6d08xK1BOR01uYm5FL1VoelU0VlA5Lytt?= =?utf-8?Q?KUEU2C5h4kmT69/o=3D?= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: Plh4sKIBrNpwh99/8IvKQP6MbD6IXhABiMX2MN90hT0LAY3b49atU0E2ZhoyeDz2sL7AB3QfmVBfb7HNZAr5Y4oBpnq4K20Q0Jiivxca/fa/RaqaLOXDsChBuBM+c8DHK0ZoqQ1cOWh5U9sUMCW+pJ84nq9pNvDo/SINwEZiZ1rS88IyIx+dwhwl1/G7sVx65Ats+lKyuTbuj2dLB82OnC7V1IO8y5hWOAbRnx72m323/8TQMOzGFGE6Mtm/W3FlJKq9jShHJqNQCwJWeb5mbIyBcFqnC8CaUP83uj7ozPhqpVQtExSAUrg14lEuqy9a+ORGl4wOYRo8i48omfzbew== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN7PR11MB7638.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0835411a-30ee-478c-10e2-08dec6fe21a9 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Jun 2026 14:39:52.1349 (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: VNiuoIzAYlUVgh2b82gPfTaa0pelZRWwrO9rYbgMpJAWCvP6X39EOjDS9FTcop0dx11eu7E1JdNkKZ/iSirqGav2Mb+uEJIlIkcIlWn0t1M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB5921 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 SGkgR3VpbmV2ZXJlLA0KDQpJIG9ubHkgaGF2ZSBvbmUgZnVydGhlciBjb21tZW50IGFuZCBmb3Vu ZCBvbmUgbml0LiBQbGVhc2Ugc2VlIGJlbG93Lg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+IEZyb206IEd1aW5ldmVyZSBMYXJzZW4gPGd1aW5ldmVyZUByZWRoYXQuY29tPg0KPiBT ZW50OiBEaWVuc3RhZywgMi4gSnVuaSAyMDI2IDE2OjM0DQo+IFRvOiBnZGItcGF0Y2hlc0Bzb3Vy Y2V3YXJlLm9yZw0KPiBDYzogR3VpbmV2ZXJlIExhcnNlbiA8Z3VpbmV2ZXJlQHJlZGhhdC5jb20+ OyBUaGlhZ28gSnVuZyBCYXVlcm1hbm4NCj4gPHRoaWFnby5iYXVlcm1hbm5AbGluYXJvLm9yZz4N Cj4gU3ViamVjdDogW1BBVENIIHY0IDEvOF0gZ2RiL3JlY29yZDogUmVmYWN0b3IgcmVjb3JkIGhp c3RvcnkNCj4gDQo+IFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gYSBsYXJnZSByZWZhY3RvciBp biBob3cgR0RCIGtlZXBzIGV4ZWN1dGlvbg0KPiBoaXN0b3J5LiAgUmF0aGVyIHRoYW4gdXNpbmcg YSBsaW5rZWQgbGlzdCB3aGVyZSBtdWx0aXBsZSBlbnRyaWVzIGNhbg0KPiBkZXNjcmliZSBhIHNp bmdsZSBpbnN0cnVjdGlvbiwgdGhlIGhpc3Rvcnkgd2lsbCBub3cgYmUgc3RvcmVkIGluIGFuDQo+ IHN0ZDo6ZGVxdWUsIGVhY2ggaW5zdHJ1Y3Rpb24gYmVpbmcgb25lIGVudHJ5IGluIHRoZSBkZXF1 ZS4NCj4gDQo+IFRoZSBjaG9pY2Ugd2FzIGluaXRpYWxseSB0byB1c2UgYW4gc3RkOjp2ZWN0b3Is IGJ1dCBpdCB3b3VsZCBiZWNvbWUNCj4gdW53aWVsZHkgYmVjYXVzZSBpdCBuZWVkcyBhbGwgdGhl IG1lbW9yeSB0byBiZSBjb25zZWN1dGl2ZSwgd2hpY2ggaXMNCj4gaGFyZCBmb3IgMjAwIHRob3Vz YW5kIGVudHJpZXMuIERlcXVlIHdhcyBwaWNrZWQgYmVjYXVzZSBpdCB3YXMgYSBuaWNlDQo+IG1p ZHBvaW50IGJldHdlZW4gdmVjdG9yIChtYXhpbXVtIGNhY2hlIGNvaGVzaW9uKSBhbmQgbGlua2Vk IGxpc3QNCj4gKG1heGltdW0gZWFzZSBvZiBmaW5kaW5nIHNwYWNlIHRvIHN0b3JlIG1vcmUpLg0K PiANCj4gRWFjaCBpbnN0cnVjdGlvbiBpbiBtZW1vcnkgd2lsbCBiZSBub3cgb25lIHJlY29yZF9m dWxsX2luc3RydWN0aW9uDQo+IGVudHJ5LCB3aGljaCBmb3IgdGhpcyBjb21taXQganVzdCBjb250 YWlucyBhIHZlY3RvciBvZg0KPiByZWNvcmRfZnVsbF9lbnRyeSBmb3IgdGhlIGVmZmVjdHMgb2Yg dGhlIGluc3RydWN0aW9uLCBhbmQgdGhlIGRhdGEgdGhhdA0KPiB3YXMgc3RvcmVkIGluIHRoZSBy ZWNvcmRfZnVsbF9lbmQgZW50cnkgKHRoYXQgaXMsIHRoZSBpbnN0cnVjdGlvbiBudW1iZXINCj4g YW5kIHRoZSBzaWduYWwsIGlmIGFueSkuDQo+IA0KPiBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VkIGEg bWluaW1hbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCAod2hhdCdzDQo+IGltcG9ydGFudCBpcyB0 aGF0IGl0IGlzbid0IGEgZGVncmFkYXRpb24pIGFuZCBhICByZWR1Y3Rpb24gaW4gdGhlIHRvdGFs DQo+IG1lbW9yeSBmb290cHJpbnQgb2Ygcm91Z2hseSAyMCUgaWYgdGhlIGVudGlyZSBoaXN0b3J5 IGlzIHVzZWQuDQo+IA0KPiBSZXZpZXdlZC1ieTogVGhpYWdvIEp1bmcgQmF1ZXJtYW5uIDx0aGlh Z28uYmF1ZXJtYW5uQGxpbmFyby5vcmc+DQo+IC0tLQ0KPiAgZ2RiL2FhcmNoNjQtdGRlcC5jICAg ICB8ICAgIDIgLQ0KPiAgZ2RiL2FtZDY0LWxpbnV4LXRkZXAuYyB8ICAgIDMgLQ0KPiAgZ2RiL2Fy bS10ZGVwLmMgICAgICAgICB8ICAgIDIgLQ0KPiAgZ2RiL2kzODYtbGludXgtdGRlcC5jICB8ICAg IDMgLQ0KPiAgZ2RiL2kzODYtdGRlcC5jICAgICAgICB8ICAgIDQgLQ0KPiAgZ2RiL2xvb25nYXJj aC10ZGVwLmMgICB8ICAgIDIgLQ0KPiAgZ2RiL21veGllLXRkZXAuYyAgICAgICB8ICAgIDIgLQ0K PiAgZ2RiL3BwYy1saW51eC10ZGVwLmMgICB8ICAgIDMgLQ0KPiAgZ2RiL3JlY29yZC1mdWxsLmMg ICAgICB8IDEwNjggKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAg Z2RiL3JlY29yZC1mdWxsLmggICAgICB8ICAgIDEgLQ0KPiAgZ2RiL3Jpc2N2LXRkZXAuYyAgICAg ICB8ICAgIDMgLQ0KPiAgZ2RiL3JzNjAwMC10ZGVwLmMgICAgICB8ICAgIDQgLQ0KPiAgZ2RiL3Mz OTAtbGludXgtdGRlcC5jICB8ICAgIDMgLQ0KPiAgZ2RiL3MzOTAtdGRlcC5jICAgICAgICB8ICAg IDIgLQ0KPiAgMTQgZmlsZXMgY2hhbmdlZCwgNDIyIGluc2VydGlvbnMoKyksIDY4MCBkZWxldGlv bnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9nZGIvYWFyY2g2NC10ZGVwLmMgYi9nZGIvYWFyY2g2 NC10ZGVwLmMNCj4gaW5kZXggNjczODE1YzI3NjMuLjJiNzY3NTY1YjJmIDEwMDY0NA0KPiAtLS0g YS9nZGIvYWFyY2g2NC10ZGVwLmMNCj4gKysrIGIvZ2RiL2FhcmNoNjQtdGRlcC5jDQo+IEBAIC02 MjMyLDggKzYyMzIsNiBAQCBhYXJjaDY0X3Byb2Nlc3NfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCwNCj4gc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gIAkgICAgICAgYWFyY2g2 NF9yZWNvcmQuYWFyY2g2NF9tZW1zW3JlY19ub10ubGVuKSkNCj4gIAkgICAgcmV0ID0gLTE7DQo+ IA0KPiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiAtCXJl dCA9IC0xOw0KPiAgICAgIH0NCj4gDQo+ICAgIGRlYWxsb2NhdGVfcmVnX21lbSAoJmFhcmNoNjRf cmVjb3JkKTsNCj4gZGlmZiAtLWdpdCBhL2dkYi9hbWQ2NC1saW51eC10ZGVwLmMgYi9nZGIvYW1k NjQtbGludXgtdGRlcC5jDQo+IGluZGV4IGE1YWMyNjY1NGNmLi45YjIzZGI3MmJiZSAxMDA2NDQN Cj4gLS0tIGEvZ2RiL2FtZDY0LWxpbnV4LXRkZXAuYw0KPiArKysgYi9nZGIvYW1kNjQtbGludXgt dGRlcC5jDQo+IEBAIC0xNTkxLDkgKzE1OTEsNiBAQCBhbWQ2NF9saW51eF9yZWNvcmRfc2lnbmFs IChzdHJ1Y3QgZ2RiYXJjaA0KPiAqZ2RiYXJjaCwNCj4gIAkJCQkgICAgICsgQU1ENjRfTElOVVhf ZnJhbWVfc2l6ZSkpDQo+ICAgICAgcmV0dXJuIC0xOw0KPiANCj4gLSAgaWYgKHJlY29yZF9mdWxs X2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiAtICAgIHJldHVybiAtMTsNCj4gLQ0KPiAgICByZXR1 cm4gMDsNCj4gIH0NCj4gDQo+IGRpZmYgLS1naXQgYS9nZGIvYXJtLXRkZXAuYyBiL2dkYi9hcm0t dGRlcC5jDQo+IGluZGV4IDA4Y2NlOWRiYWQ4Li4xY2UwOTI3ZjI2YiAxMDA2NDQNCj4gLS0tIGEv Z2RiL2FybS10ZGVwLmMNCj4gKysrIGIvZ2RiL2FybS10ZGVwLmMNCj4gQEAgLTE0OTExLDggKzE0 OTExLDYgQEAgYXJtX3Byb2Nlc3NfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwNCj4g c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gIAkgICAgfQ0KPiAgCX0NCj4gDQo+IC0gICAg ICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0JcmV0ID0gLTE7DQo+ ICAgICAgfQ0KPiANCj4gDQo+IGRpZmYgLS1naXQgYS9nZGIvaTM4Ni1saW51eC10ZGVwLmMgYi9n ZGIvaTM4Ni1saW51eC10ZGVwLmMNCj4gaW5kZXggMjNhZWNjYWM5ZmMuLjRmMzM3NjZmY2RkIDEw MDY0NA0KPiAtLS0gYS9nZGIvaTM4Ni1saW51eC10ZGVwLmMNCj4gKysrIGIvZ2RiL2kzODYtbGlu dXgtdGRlcC5jDQo+IEBAIC05NDksOSArOTQ5LDYgQEAgaTM4Nl9saW51eF9yZWNvcmRfc2lnbmFs IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwNCj4gIAkJCQkgICAgIEkzODZfTElOVVhfeHN0YXRl ICsNCj4gSTM4Nl9MSU5VWF9mcmFtZV9zaXplKSkNCj4gICAgICByZXR1cm4gLTE7DQo+IA0KPiAt ICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0gICAgcmV0dXJuIC0x Ow0KPiAtDQo+ICAgIHJldHVybiAwOw0KPiAgfQ0KPiAgDQoNCj4gDQo+IGRpZmYgLS1naXQgYS9n ZGIvaTM4Ni10ZGVwLmMgYi9nZGIvaTM4Ni10ZGVwLmMNCj4gaW5kZXggZmE5MzViNWZjZGIuLmZl ZTM2YjQ2YTczIDEwMDY0NA0KPiAtLS0gYS9nZGIvaTM4Ni10ZGVwLmMNCj4gKysrIGIvZ2RiL2kz ODYtdGRlcC5jDQo+IEBAIC01MjAxLDggKzUyMDEsNiBAQCBpMzg2X3JlY29yZF92ZXggKHN0cnVj dCBpMzg2X3JlY29yZF9zICppciwgdWludDhfdA0KPiB2ZXhfdywgdWludDhfdCB2ZXhfciwNCj4g ICAgICB9DQo+IA0KPiAgICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX3JlZyAoaXItPnJlZ2Nh Y2hlLCBpci0NCj4gPnJlZ21hcFtYODZfUkVDT1JEX1JFSVBfUkVHTlVNXSk7DQo+IC0gIGlmIChy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkNCj4gLSAgICByZXR1cm4gLTE7DQo+IA0K PiAgICByZXR1cm4gMDsNCj4gIH0NCj4gQEAgLTgzNTksOCArODM1Nyw2IEBAIERvIHlvdSB3YW50 IHRvIHN0b3AgdGhlIHByb2dyYW0/IiksDQo+IA0KPiAgICAvKiBJbiB0aGUgZnV0dXJlLCBtYXli ZSBzdGlsbCBuZWVkIHRvIGRlYWwgd2l0aCBuZWVkX2Rhc20uICAqLw0KPiAgICBJMzg2X1JFQ09S RF9GVUxMX0FSQ0hfTElTVF9BRERfUkVHIChYODZfUkVDT1JEX1JFSVBfUkVHTlVNKTsNCj4gLSAg aWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5kICgpKQ0KPiAtICAgIHJldHVybiAtMTsN Cj4gDQo+ICAgIHJldHVybiAwOw0KPiANCj4gZGlmZiAtLWdpdCBhL2dkYi9sb29uZ2FyY2gtdGRl cC5jIGIvZ2RiL2xvb25nYXJjaC10ZGVwLmMNCj4gaW5kZXggMjI1YjFhYmI3MDMuLjVlYzZiMmE0 OGQwIDEwMDY0NA0KPiAtLS0gYS9nZGIvbG9vbmdhcmNoLXRkZXAuYw0KPiArKysgYi9nZGIvbG9v bmdhcmNoLXRkZXAuYw0KPiBAQCAtMjc4OSw4ICsyNzg5LDYgQEAgbG9vbmdhcmNoX3Byb2Nlc3Nf cmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaA0KPiAqZ2RiYXJjaCwgc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwNCj4gIAkJCQkJIExPT05HQVJDSF9QQ19SRUdOVU0pKQ0KPiAgCXJldHVybiAtMTsNCj4g DQo+IC0gICAgICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0JcmV0 dXJuIC0xOw0KPiAgICAgIH0NCj4gDQo+ICAgIHJldHVybiByZXQ7DQo+IGRpZmYgLS1naXQgYS9n ZGIvbW94aWUtdGRlcC5jIGIvZ2RiL21veGllLXRkZXAuYw0KPiBpbmRleCBjOGEwNGQyMWY1OS4u MmY4ZjAxODY0ODggMTAwNjQ0DQo+IC0tLSBhL2dkYi9tb3hpZS10ZGVwLmMNCj4gKysrIGIvZ2Ri L21veGllLXRkZXAuYw0KPiBAQCAtMTA0MCw4ICsxMDQwLDYgQEAgbW94aWVfcHJvY2Vzc19yZWNv cmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLA0KPiBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hl LA0KPiANCj4gICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdjYWNoZSwg TU9YSUVfUENfUkVHTlVNKSkNCj4gICAgICByZXR1cm4gLTE7DQo+IC0gIGlmIChyZWNvcmRfZnVs bF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkNCj4gLSAgICByZXR1cm4gLTE7DQo+ICAgIHJldHVybiAw Ow0KPiAgfQ0KPiANCj4gZGlmZiAtLWdpdCBhL2dkYi9wcGMtbGludXgtdGRlcC5jIGIvZ2RiL3Bw Yy1saW51eC10ZGVwLmMNCj4gaW5kZXggMTk2OThlYWFjYmUuLmUyZjUzNTUxNzA5IDEwMDY0NA0K PiAtLS0gYS9nZGIvcHBjLWxpbnV4LXRkZXAuYw0KPiArKysgYi9nZGIvcHBjLWxpbnV4LXRkZXAu Yw0KPiBAQCAtMTU2NSw5ICsxNTY1LDYgQEAgcHBjX2xpbnV4X3JlY29yZF9zaWduYWwgKHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoLA0KPiBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiAgICBp ZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9tZW0gKHNwLCBTSUdOQUxfRlJBTUVTSVpFICsN Cj4gc2l6ZW9mX3J0X3NpZ2ZyYW1lKSkNCj4gICAgICByZXR1cm4gLTE7DQo+IA0KPiAtICBpZiAo cmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0gICAgcmV0dXJuIC0xOw0KPiAt DQo+ICAgIHJldHVybiAwOw0KPiAgfQ0KPiANCj4gZGlmZiAtLWdpdCBhL2dkYi9yZWNvcmQtZnVs bC5jIGIvZ2RiL3JlY29yZC1mdWxsLmMNCj4gaW5kZXggNjlkMmMxMDBlNTcuLmE2ZGZlY2Q3ZDFm IDEwMDY0NA0KPiAtLS0gYS9nZGIvcmVjb3JkLWZ1bGwuYw0KPiArKysgYi9nZGIvcmVjb3JkLWZ1 bGwuYw0KPiBAQCAtNDcsNiArNDcsOSBAQA0KPiAgI2luY2x1ZGUgImludGVycHMuaCINCj4gICNp bmNsdWRlICJjbGkvY2xpLXN0eWxlLmgiDQo+IA0KPiArI2luY2x1ZGUgPHZlY3Rvcj4NCj4gKyNp bmNsdWRlIDxvcHRpb25hbD4NCj4gKyNpbmNsdWRlIDxkZXF1ZT4NCj4gICNpbmNsdWRlIDxzaWdu YWwuaD4NCj4gDQo+ICAvKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzICJ0YXJnZXQgcmVjb3JkLWZ1 bGwiLCBhbHNvIGtub3duIGFzICJwcm9jZXNzDQo+IEBAIC03MiwyMCArNzUsMTcgQEANCj4gICNk ZWZpbmUgREVGQVVMVF9SRUNPUkRfRlVMTF9JTlNOX01BWF9OVU0JMjAwMDAwDQo+IA0KPiAgI2Rl ZmluZSBSRUNPUkRfRlVMTF9JU19SRVBMQVkgXA0KPiAtICAocmVjb3JkX2Z1bGxfbGlzdC0+bmV4 dCB8fCA6OmV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQ0KPiArICAoKHJlY29y ZF9mdWxsX25leHRfaW5zbiAhPSByZWNvcmRfZnVsbF9saXN0LnNpemUgKCkpIFwNCj4gKyAgICB8 fCA6OmV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQ0KPiANCj4gICNkZWZpbmUg UkVDT1JEX0ZVTExfRklMRV9NQUdJQwluZXRvcmRlcjMyKDB4MjAwOTEwMTYpDQo+IA0KPiAgLyog VGhlc2UgYXJlIHRoZSBjb3JlIHN0cnVjdHMgb2YgdGhlIHByb2Nlc3MgcmVjb3JkIGZ1bmN0aW9u YWxpdHkuDQo+IA0KPiAgICAgQSByZWNvcmRfZnVsbF9lbnRyeSBpcyBhIHJlY29yZCBvZiB0aGUg dmFsdWUgY2hhbmdlIG9mIGEgcmVnaXN0ZXINCj4gLSAgICgicmVjb3JkX2Z1bGxfcmVnIikgb3Ig YSBwYXJ0IG9mIG1lbW9yeSAoInJlY29yZF9mdWxsX21lbSIpLiAgQW5kIGVhY2gNCj4gLSAgIGlu c3RydWN0aW9uIG11c3QgaGF2ZSBhIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAoInJlY29yZF9m dWxsX2VuZCIpDQo+IC0gICB0aGF0IGluZGljYXRlcyB0aGF0IHRoaXMgaXMgdGhlIGxhc3Qgc3Ry dWN0IHJlY29yZF9mdWxsX2VudHJ5IG9mIHRoaXMNCj4gLSAgIGluc3RydWN0aW9uLg0KPiAtDQo+ IC0gICBFYWNoIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSBpcyBsaW5rZWQgdG8gInJlY29yZF9m dWxsX2xpc3QiIGJ5ICJwcmV2Ig0KPiAtICAgYW5kICJuZXh0IiBwb2ludGVycy4gICovDQo+ICsg ICAoInJlY29yZF9mdWxsX3JlZyIpIG9yIGEgcGFydCBvZiBtZW1vcnkgKCJyZWNvcmRfZnVsbF9t ZW0iKS4NCj4gKyAgIFRoZXNlIGFyZSBzYXZlZCBvbiB0aGUgcmVjb3JkX2Z1bGxfaW5zdHJ1Y3Rp b24gc3RydWN0LCB3aGljaCBhbHNvDQo+ICsgICBjb250YWlucyBzb21lIGV4dHJhIGluZm9ybWF0 aW9uLCBzdWNoIGFzIGRlbGl2ZXJlZCBzaWduYWxzLiAgKi8NCj4gDQo+ICBzdHJ1Y3QgcmVjb3Jk X2Z1bGxfbWVtX2VudHJ5DQo+ICB7DQo+IEBAIC0xMTIsNDcgKzExMiwxNCBAQCBzdHJ1Y3QgcmVj b3JkX2Z1bGxfcmVnX2VudHJ5DQo+ICAgIH0gdTsNCj4gIH07DQo+IA0KPiAtc3RydWN0IHJlY29y ZF9mdWxsX2VuZF9lbnRyeQ0KPiAtew0KPiAtICBlbnVtIGdkYl9zaWduYWwgc2lndmFsOw0KPiAt ICBVTE9OR0VTVCBpbnNuX251bTsNCj4gLX07DQo+IC0NCj4gIGVudW0gcmVjb3JkX2Z1bGxfdHlw ZQ0KPiAgew0KPiAtICByZWNvcmRfZnVsbF9lbmQgPSAwLA0KPiAgICByZWNvcmRfZnVsbF9yZWcs DQo+ICAgIHJlY29yZF9mdWxsX21lbQ0KPiAgfTsNCj4gDQo+IC0vKiBUaGlzIGlzIHRoZSBkYXRh IHN0cnVjdHVyZSB0aGF0IG1ha2VzIHVwIHRoZSBleGVjdXRpb24gbG9nLg0KPiAtDQo+IC0gICBU aGUgZXhlY3V0aW9uIGxvZyBjb25zaXN0cyBvZiBhIHNpbmdsZSBsaW5rZWQgbGlzdCBvZiBlbnRy aWVzDQo+IC0gICBvZiB0eXBlICJzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkiLiAgSXQgaXMgZG91 Ymx5IGxpbmtlZCBzbyB0aGF0IGl0DQo+IC0gICBjYW4gYmUgdHJhdmVyc2VkIGluIGVpdGhlciBk aXJlY3Rpb24uDQo+IC0NCj4gLSAgIFRoZSBzdGFydCBvZiB0aGUgbGlzdCBpcyBhbmNob3JlZCBi eSBhIHN0cnVjdCBjYWxsZWQNCj4gLSAgICJyZWNvcmRfZnVsbF9maXJzdCIuICBUaGUgcG9pbnRl ciAicmVjb3JkX2Z1bGxfbGlzdCIgZWl0aGVyIHBvaW50cw0KPiAtICAgdG8gdGhlIGxhc3QgZW50 cnkgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIGxpc3QgKGluIHJlY29yZCBtb2RlKSwgb3IgdG8NCj4g LSAgIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBsaXN0IHRoYXQgd2lsbCBiZSBleGVjdXRlZCAoaW4g cmVwbGF5IG1vZGUpLg0KPiAtDQo+IC0gICBFYWNoIGxpc3QgZWxlbWVudCAoc3RydWN0IHJlY29y ZF9mdWxsX2VudHJ5KSwgaW4gYWRkaXRpb24gdG8gbmV4dA0KPiAtICAgYW5kIHByZXYgcG9pbnRl cnMsIGNvbnNpc3RzIG9mIGEgdW5pb24gb2YgdGhyZWUgZW50cnkgdHlwZXM6IG1lbSwNCj4gLSAg IHJlZywgYW5kIGVuZC4gIEEgZmllbGQgY2FsbGVkICJ0eXBlIiBkZXRlcm1pbmVzIHdoaWNoIGVu dHJ5IHR5cGUgaXMNCj4gLSAgIHJlcHJlc2VudGVkIGJ5IGEgZ2l2ZW4gbGlzdCBlbGVtZW50Lg0K PiAtDQo+IC0gICBFYWNoIGluc3RydWN0aW9uIHRoYXQgaXMgYWRkZWQgdG8gdGhlIGV4ZWN1dGlv biBsb2cgaXMgcmVwcmVzZW50ZWQNCj4gLSAgIGJ5IGEgdmFyaWFibGUgbnVtYmVyIG9mIGxpc3Qg ZWxlbWVudHMgKCdlbnRyaWVzJykuICBUaGUgaW5zdHJ1Y3Rpb24NCj4gLSAgIHdpbGwgaGF2ZSBv bmUgInJlZyIgZW50cnkgZm9yIGVhY2ggcmVnaXN0ZXIgdGhhdCBpcyBjaGFuZ2VkIGJ5DQo+IC0g ICBleGVjdXRpbmcgdGhlIGluc3RydWN0aW9uIChpbmNsdWRpbmcgdGhlIFBDIGluIGV2ZXJ5IGNh c2UpLiAgSXQNCj4gLSAgIHdpbGwgYWxzbyBoYXZlIG9uZSAibWVtIiBlbnRyeSBmb3IgZWFjaCBt ZW1vcnkgY2hhbmdlLiAgRmluYWxseSwNCj4gLSAgIGVhY2ggaW5zdHJ1Y3Rpb24gd2lsbCBoYXZl IGFuICJlbmQiIGVudHJ5IHRoYXQgc2VwYXJhdGVzIGl0IGZyb20NCj4gLSAgIHRoZSBjaGFuZ2Vz IGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV4dCBpbnN0cnVjdGlvbi4gICovDQo+IC0NCj4gIHN0cnVj dCByZWNvcmRfZnVsbF9lbnRyeQ0KPiAgew0KPiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkg KnByZXY7DQo+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqbmV4dDsNCj4gICAgZW51bSBy ZWNvcmRfZnVsbF90eXBlIHR5cGU7DQo+ICAgIHVuaW9uDQo+ICAgIHsNCj4gQEAgLTE2MCwxMSAr MTI3LDMxIEBAIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeQ0KPiAgICAgIHN0cnVjdCByZWNvcmRf ZnVsbF9yZWdfZW50cnkgcmVnOw0KPiAgICAgIC8qIG1lbSAqLw0KPiAgICAgIHN0cnVjdCByZWNv cmRfZnVsbF9tZW1fZW50cnkgbWVtOw0KPiAtICAgIC8qIGVuZCAqLw0KPiAtICAgIHN0cnVjdCBy ZWNvcmRfZnVsbF9lbmRfZW50cnkgZW5kOw0KPiAgICB9IHU7DQo+ICB9Ow0KPiANCj4gKy8qIFRo aXMgaXMgdGhlIG1haW4gc3RydWN0dXJlIHRoYXQgY29tcHJpc2VzIHRoZSBleGVjdXRpb24gbG9n Lg0KPiArICAgRWFjaCBpbnN0cnVjdGlvbiBpcyBjb21wcmlzZWQgb2Y6DQo+ICsgICAqIFRoZSBp bnN0cnVjdGlvbiBudW1iZXI6IEhvdyBtYW55IGluc3RydWN0aW9ucyB3ZXJlIHJlY29yZGVkIGJl Zm9yZQ0KPiArICAgICB0aGlzIG9uZTsNCj4gKyAgICogc2lndmFsOiBXaGV0aGVyIHRoZSBpbmZl cmlvciByZWNlaXZlZCBhIHNpZ25hbCB3aGlsZSB0aGUgZm9sbG93aW5nDQo+ICsgICAgIGluc3Ry dWN0aW9uIHdhcyBiZWluZyByZWNvcmRlZDsNCj4gKyAgICogZWZmZWN0czogQSBsaXN0IG9mIHJl Y29yZF9mdWxsX2VudHJ5IHN0cnVjdHVyZXMsIGVhY2ggb2Ygd2hpY2gNCj4gKyAgICAgZGVzY3Jp YmluZyBvbmUgZWZmZWN0IHRoYXQgdGhlIGluc3RydWN0aW9uIGhhcyBvbiB0aGUgaW5mZXJpb3Iu DQo+ICsNCj4gKyAgIE5vdGUsIHRoZSBzaWduYWwgaXMgc3RvcmVkIGluIHRoZSBwcmV2aW91cyBp bnN0cnVjdGlvbiBmb3IgaGlzdG9yaWNhbA0KPiArICAgcmVhc29ucy4gIFRoaXMgaXMgaG93IGl0 IHdhcyBmaXJzdCBpbXBsZW1lbnRlZCwgYW5kIG5vIG9uZSBoYXMgZ290dGVuDQo+ICsgICBhcm91 bmQgdG8gY2hhbmdpbmcgaXQgeWV0LiAgKi8NCj4gKw0KPiArc3RydWN0IHJlY29yZF9mdWxsX2lu c3RydWN0aW9uDQo+ICt7DQo+ICsgIC8qIFRoaXMgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gdGhl IGluZGV4IGlmDQo+ICsgICAgIHdlIGhhZCB0byByZW1vdmUgdGhlIGZpcnN0IGZldyBpbnN0cnVj dGlvbnMuICAqLw0KPiArICB1aW50MzJfdCBpbnNuX251bTsNCj4gKyAgc3RkOjpvcHRpb25hbDxn ZGJfc2lnbmFsPiBzaWd2YWw7DQo+ICsgIHN0ZDo6dmVjdG9yPHJlY29yZF9mdWxsX2VudHJ5PiBl ZmZlY3RzOw0KPiArfTsNCj4gKw0KPiAgLyogSWYgdHJ1ZSwgcXVlcnkgaWYgUFJFQyBjYW5ub3Qg cmVjb3JkIG1lbW9yeQ0KPiAgICAgY2hhbmdlIG9mIG5leHQgaW5zdHJ1Y3Rpb24uICAqLw0KPiAg Ym9vbCByZWNvcmRfZnVsbF9tZW1vcnlfcXVlcnkgPSBmYWxzZTsNCj4gQEAgLTE4MSwyNyArMTY4 LDI1IEBAIHN0YXRpYyBkZXRhY2hlZF9yZWdjYWNoZQ0KPiAqcmVjb3JkX2Z1bGxfY29yZV9yZWdi dWYgPSBOVUxMOw0KPiAgc3RhdGljIHN0ZDo6dmVjdG9yPHRhcmdldF9zZWN0aW9uPiByZWNvcmRf ZnVsbF9jb3JlX3NlY3Rpb25zOw0KPiAgc3RhdGljIHN0cnVjdCByZWNvcmRfZnVsbF9jb3JlX2J1 Zl9lbnRyeSAqcmVjb3JkX2Z1bGxfY29yZV9idWZfbGlzdCA9IE5VTEw7DQo+IA0KPiAtLyogVGhl IGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHVzZWQgZm9yIG1hbmFnaW5nIHRoZSBsaW5rZWQgbGlz dCB0aGF0DQo+IC0gICByZXByZXNlbnRzIHRoZSBleGVjdXRpb24gbG9nLg0KPiArLyogVGhlIGZv bGxvd2luZyB2YXJpYWJsZXMgYXJlIHVzZWQgZm9yIG1hbmFnaW5nIHRoZSBoaXN0b3J5IG9mIGV4 ZWN1dGVkDQo+ICsgICBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgaW5mZXJpb3IuDQo+IA0KPiAtICAg cmVjb3JkX2Z1bGxfZmlyc3QgaXMgdGhlIGFuY2hvciB0aGF0IGhvbGRzIGRvd24gdGhlIGJlZ2lu bmluZyBvZg0KPiAtICAgdGhlIGxpc3QuDQo+ICsgICByZWNvcmRfZnVsbF9saXN0IGNvbnRhaW5z IGFsbCBpbnN0cnVjdGlvbnMgdGhhdCB3ZXJlIGZ1bGx5IGV4ZWN1dGVkIGFuZA0KPiArICAgc2F2 ZWQgdG8gdGhlIGxvZywgc28gdGhhdCB3ZSBjYW4gcmVwbGF5IHRoZSBleGVjdXRpb24uDQo+IA0K PiAtICAgcmVjb3JkX2Z1bGxfbGlzdCBzZXJ2ZXMgdHdvIGZ1bmN0aW9uczoNCj4gLSAgICAgMSkg SW4gcmVjb3JkIG1vZGUsIGl0IGFuY2hvcnMgdGhlIGVuZCBvZiB0aGUgbGlzdC4NCj4gLSAgICAg MikgSW4gcmVwbGF5IG1vZGUsIGl0IHRyYXZlcnNlcyB0aGUgbGlzdCBhbmQgcG9pbnRzIHRvDQo+ IC0JdGhlIG5leHQgaW5zdHJ1Y3Rpb24gdGhhdCBtdXN0IGJlIGVtdWxhdGVkLg0KPiArICAgcmVj b3JkX2Z1bGxfbmV4dF9pbnNuIGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24g dGhhdCB3b3VsZA0KPiArICAgYmUgZXhlY3V0ZWQgaWYgdGhlIGluZmVyaW9yIGV4ZWN1dGVzIGZv cndhcmQuICBJbiB0aGUgc3BlY2lhbCBjYXNlIHdoZW4NCj4gKyAgIHRoZSBpbmZlcmlvciBpcyBu b3QgcmVwbGF5aW5nLCByZWNvcmRfZnVsbF9uZXh0X2luc24gcG9pbnRzIHBhc3QgdGhlDQo+ICsg ICBlbmQgb2YgdGhlIGhpc3RvcnkuDQo+IA0KPiAtICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hl YWQgYW5kIHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsIGFyZSB1c2VkDQo+IC0gICB0byBtYW5h Z2UgYSBzZXBhcmF0ZSBsaXN0LCB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHVwIHRoZSBjaGFuZ2UN Cj4gLSAgIGVsZW1lbnRzIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGluc3RydWN0aW9uIGR1 cmluZyByZWNvcmQgbW9kZS4NCj4gLSAgIFdoZW4gdGhpcyBpbnN0cnVjdGlvbiBoYXMgYmVlbiBj b21wbGV0ZWx5IGFubm90YXRlZCBpbiB0aGUgImFyY2gNCj4gLSAgIGxpc3QiLCBpdCB3aWxsIGJl IGFwcGVuZGVkIHRvIHRoZSBtYWluIGV4ZWN1dGlvbiBsb2cuICAqLw0KPiArICAgcmVjb3JkX2Z1 bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbiBob2xkcyBhIHBhcnRpYWwgaW5zdHJ1Y3Rpb24sIHdo aWxlDQo+ICsgICB0aGUgbG93ZXIgdGFyZ2V0IGlzIGRpc2Fzc2VtYmxpbmcgdGhlIGluc3RydWN0 aW9uLCBvciBhcyBwYXJ0aWFsIHhmZXJzIGFyZQ0KPiArICAgaGFwcGVuaW5nLiAgSXQgaXMgbWFu aXB1bGF0ZWQgYnkgdGhlICJhcmNoIGxpc3QiIGZ1bmN0aW9ucyBmb3IgaGlzdG9yaWNhbA0KPiAr ICAgcmVhc29ucy4gICovDQo+IA0KPiAtc3RhdGljIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSBy ZWNvcmRfZnVsbF9maXJzdDsNCj4gLXN0YXRpYyBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJl Y29yZF9mdWxsX2xpc3QgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7DQo+IC1zdGF0aWMgc3RydWN0IHJl Y29yZF9mdWxsX2VudHJ5ICpyZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7DQo+IC1z dGF0aWMgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFp bCA9IE5VTEw7DQo+ICtzdGF0aWMgc3RkOjpkZXF1ZTxyZWNvcmRfZnVsbF9pbnN0cnVjdGlvbj4g cmVjb3JkX2Z1bGxfbGlzdDsNCj4gK3N0YXRpYyByZWNvcmRfZnVsbF9pbnN0cnVjdGlvbiByZWNv cmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uOw0KPiArc3RhdGljIGludCByZWNvcmRfZnVs bF9uZXh0X2luc247DQo+IA0KPiAgLyogdHJ1ZSBhc2sgdXNlci4gZmFsc2UgYXV0byBkZWxldGUg dGhlIGxhc3Qgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5LiAgKi8NCj4gIHN0YXRpYyBib29sIHJl Y29yZF9mdWxsX3N0b3BfYXRfbGltaXQgPSB0cnVlOw0KPiBAQCAtMzYxLDYgKzM0NiwxNiBAQCBy ZWNvcmRfZnVsbF90YXJnZXQ6OmtpbGwgKCkNCj4gICAgcmVjb3JkX2tpbGwgKHRoaXMpOw0KPiAg fQ0KPiANCj4gKy8qIFJlc2V0IHRoZSBpbmNvbXBsZXRlIGluc3RydWN0aW9uLiAgKi8NCj4gKw0K PiArc3RhdGljIHZvaWQNCj4gK3JlY29yZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCkNCj4gK3sN Cj4gKyAgcmVjb3JkX2Z1bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbi5lZmZlY3RzLmNsZWFyICgp Ow0KPiArICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uLnNpZ3ZhbC5yZXNldCAo KTsNCj4gKyAgcmVjb3JkX2Z1bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbi5pbnNuX251bSA9IDA7 DQo+ICt9DQo+ICsNCj4gIC8qIFNlZSByZWNvcmQtZnVsbC5oLiAgKi8NCj4gDQo+ICBpbnQNCj4g QEAgLTM5MCwxNTYgKzM4NSwxMjYgQEAgc3RhdGljIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50DQo+ ICpzaG93X3JlY29yZF9mdWxsX2NtZGxpc3Q7DQo+ICAvKiBDb21tYW5kIGxpc3QgZm9yICJyZWNv cmQgZnVsbCIuICAqLw0KPiAgc3RhdGljIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpyZWNvcmRf ZnVsbF9jbWRsaXN0Ow0KPiANCj4gLXN0YXRpYyB2b2lkIHJlY29yZF9mdWxsX2dvdG9faW5zbiAo c3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICplbnRyeSwNCj4gK3N0YXRpYyB2b2lkIHJlY29yZF9m dWxsX2dvdG9faW5zbiAoc2l6ZV90IHRhcmdldF9pbnNuLA0KPiAgCQkJCSAgIGVudW0gZXhlY19k aXJlY3Rpb25fa2luZCBkaXIpOw0KPiANCj4gLS8qIEFsbG9jIGFuZCBmcmVlIGZ1bmN0aW9ucyBm b3IgcmVjb3JkX2Z1bGxfcmVnLCByZWNvcmRfZnVsbF9tZW0sIGFuZA0KPiAtICAgcmVjb3JkX2Z1 bGxfZW5kIGVudHJpZXMuICAqLw0KPiArLyogSW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgZnVu Y3Rpb25zIGZvciByZWNvcmRfZnVsbF9yZWcgYW5kDQo+ICsgICByZWNvcmRfZnVsbF9tZW0gZW50 cmllcy4gICovDQo+IA0KPiAtLyogQWxsb2MgYSByZWNvcmRfZnVsbF9yZWcgcmVjb3JkIGVudHJ5 LiAgKi8NCj4gKy8qIEluaXQgYSByZWNvcmRfZnVsbF9yZWcgcmVjb3JkIGVudHJ5LiAgKi8NCj4g DQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqDQo+IC1yZWNvcmRf ZnVsbF9yZWdfYWxsb2MgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdudW0pDQo+ ICtzdGF0aWMgaW5saW5lIHJlY29yZF9mdWxsX2VudHJ5DQo+ICtyZWNvcmRfZnVsbF9yZWdfaW5p dCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ251bSkNCj4gIHsNCj4gLSAgc3Ry dWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWM7DQo+ICsgIHJlY29yZF9mdWxsX2VudHJ5IHJlYzsN Cj4gICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSByZWdjYWNoZS0+YXJjaCAoKTsNCj4gDQo+ IC0gIHJlYyA9IFhDTkVXIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkpOw0KPiAtICByZWMtPnR5 cGUgPSByZWNvcmRfZnVsbF9yZWc7DQo+IC0gIHJlYy0+dS5yZWcubnVtID0gcmVnbnVtOw0KPiAt ICByZWMtPnUucmVnLmxlbiA9IHJlZ2lzdGVyX3NpemUgKGdkYmFyY2gsIHJlZ251bSk7DQo+IC0g IGlmIChyZWMtPnUucmVnLmxlbiA+IHNpemVvZiAocmVjLT51LnJlZy51LmJ1ZikpDQo+IC0gICAg cmVjLT51LnJlZy51LnB0ciA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChyZWMtPnUucmVnLmxlbik7 DQo+ICsgIHJlYy50eXBlID0gcmVjb3JkX2Z1bGxfcmVnOw0KPiArICByZWMudS5yZWcubnVtID0g cmVnbnVtOw0KPiArICByZWMudS5yZWcubGVuID0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVn bnVtKTsNCj4gKyAgaWYgKHJlYy51LnJlZy5sZW4gPiBzaXplb2YgKHJlYy51LnJlZy51LmJ1Zikp DQo+ICsgICAgcmVjLnUucmVnLnUucHRyID0gKGdkYl9ieXRlICopIHhtYWxsb2MgKHJlYy51LnJl Zy5sZW4pOw0KPiANCj4gICAgcmV0dXJuIHJlYzsNCj4gIH0NCj4gDQo+IC0vKiBGcmVlIGEgcmVj b3JkX2Z1bGxfcmVnIHJlY29yZCBlbnRyeS4gICovDQo+ICsvKiBDbGVhbnVwIGEgcmVjb3JkX2Z1 bGxfcmVnIHJlY29yZCBlbnRyeS4gICovDQo+IA0KPiAgc3RhdGljIGlubGluZSB2b2lkDQo+IC1y ZWNvcmRfZnVsbF9yZWdfcmVsZWFzZSAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWMpDQo+ ICtyZWNvcmRfZnVsbF9yZWdfY2xlYW51cCAocmVjb3JkX2Z1bGxfZW50cnkgcmVjKQ0KPiAgew0K PiAtICBnZGJfYXNzZXJ0IChyZWMtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfcmVnKTsNCj4gLSAgaWYg KHJlYy0+dS5yZWcubGVuID4gc2l6ZW9mIChyZWMtPnUucmVnLnUuYnVmKSkNCj4gLSAgICB4ZnJl ZSAocmVjLT51LnJlZy51LnB0cik7DQo+IC0gIHhmcmVlIChyZWMpOw0KPiArICBnZGJfYXNzZXJ0 IChyZWMudHlwZSA9PSByZWNvcmRfZnVsbF9yZWcpOw0KPiArICBpZiAocmVjLnUucmVnLmxlbiA+ IHNpemVvZiAocmVjLnUucmVnLnUuYnVmKSkNCj4gKyAgICB4ZnJlZSAocmVjLnUucmVnLnUucHRy KTsNCj4gIH0NCj4gDQo+IC0vKiBBbGxvYyBhIHJlY29yZF9mdWxsX21lbSByZWNvcmQgZW50cnku ICAqLw0KPiArLyogSW5pdCBhIHJlY29yZF9mdWxsX21lbSByZWNvcmQgZW50cnkuICAqLw0KPiAN Cj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICoNCj4gLXJlY29yZF9m dWxsX21lbV9hbGxvYyAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4pDQo+ICtzdGF0aWMgaW5saW5l IHJlY29yZF9mdWxsX2VudHJ5DQo+ICtyZWNvcmRfZnVsbF9tZW1faW5pdCAoQ09SRV9BRERSIGFk ZHIsIGludCBsZW4pDQo+ICB7DQo+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjOw0K PiArICByZWNvcmRfZnVsbF9lbnRyeSByZWM7DQo+IA0KPiAtICByZWMgPSBYQ05FVyAoc3RydWN0 IHJlY29yZF9mdWxsX2VudHJ5KTsNCj4gLSAgcmVjLT50eXBlID0gcmVjb3JkX2Z1bGxfbWVtOw0K PiAtICByZWMtPnUubWVtLmFkZHIgPSBhZGRyOw0KPiAtICByZWMtPnUubWVtLmxlbiA9IGxlbjsN Cj4gLSAgaWYgKHJlYy0+dS5tZW0ubGVuID4gc2l6ZW9mIChyZWMtPnUubWVtLnUuYnVmKSkNCj4g LSAgICByZWMtPnUubWVtLnUucHRyID0gKGdkYl9ieXRlICopIHhtYWxsb2MgKGxlbik7DQo+ICsg IHJlYy50eXBlID0gcmVjb3JkX2Z1bGxfbWVtOw0KPiArICByZWMudS5tZW0uYWRkciA9IGFkZHI7 DQo+ICsgIHJlYy51Lm1lbS5sZW4gPSBsZW47DQo+ICsgIGlmIChyZWMudS5tZW0ubGVuID4gc2l6 ZW9mIChyZWMudS5tZW0udS5idWYpKQ0KPiArICAgIHJlYy51Lm1lbS51LnB0ciA9IChnZGJfYnl0 ZSAqKSB4bWFsbG9jIChsZW4pOw0KPiArICByZWMudS5tZW0ubWVtX2VudHJ5X25vdF9hY2Nlc3Np YmxlID0gMDsNCj4gDQo+ICAgIHJldHVybiByZWM7DQo+ICB9DQo+IA0KPiAtLyogRnJlZSBhIHJl Y29yZF9mdWxsX21lbSByZWNvcmQgZW50cnkuICAqLw0KPiArLyogQ2xlYW51cCBhIHJlY29yZF9m dWxsX21lbSByZWNvcmQgZW50cnkuICAqLw0KPiANCj4gIHN0YXRpYyBpbmxpbmUgdm9pZA0KPiAt cmVjb3JkX2Z1bGxfbWVtX3JlbGVhc2UgKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjKQ0K PiArcmVjb3JkX2Z1bGxfbWVtX2NsZWFudXAgKHJlY29yZF9mdWxsX2VudHJ5IHJlYykNCj4gIHsN Cj4gLSAgZ2RiX2Fzc2VydCAocmVjLT50eXBlID09IHJlY29yZF9mdWxsX21lbSk7DQo+IC0gIGlm IChyZWMtPnUubWVtLmxlbiA+IHNpemVvZiAocmVjLT51Lm1lbS51LmJ1ZikpDQo+IC0gICAgeGZy ZWUgKHJlYy0+dS5tZW0udS5wdHIpOw0KPiAtICB4ZnJlZSAocmVjKTsNCj4gKyAgZ2RiX2Fzc2Vy dCAocmVjLnR5cGUgPT0gcmVjb3JkX2Z1bGxfbWVtKTsNCj4gKyAgaWYgKHJlYy51Lm1lbS5sZW4g PiBzaXplb2YgKHJlYy51Lm1lbS51LmJ1ZikpDQo+ICsgICAgeGZyZWUgKHJlYy51Lm1lbS51LnB0 cik7DQo+ICB9DQo+IA0KPiAtLyogQWxsb2MgYSByZWNvcmRfZnVsbF9lbmQgcmVjb3JkIGVudHJ5 LiAgKi8NCj4gLQ0KPiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKg0K PiAtcmVjb3JkX2Z1bGxfZW5kX2FsbG9jICh2b2lkKQ0KPiAtew0KPiAtICBzdHJ1Y3QgcmVjb3Jk X2Z1bGxfZW50cnkgKnJlYzsNCj4gLQ0KPiAtICByZWMgPSBYQ05FVyAoc3RydWN0IHJlY29yZF9m dWxsX2VudHJ5KTsNCj4gLSAgcmVjLT50eXBlID0gcmVjb3JkX2Z1bGxfZW5kOw0KPiAtDQo+IC0g IHJldHVybiByZWM7DQo+IC19DQo+IC0NCj4gLS8qIEZyZWUgYSByZWNvcmRfZnVsbF9lbmQgcmVj b3JkIGVudHJ5LiAgKi8NCj4gKy8qIEZyZWUgb25lIHJlY29yZCBlbnRyeSwgYW55IHR5cGUuICAq Lw0KPiANCj4gIHN0YXRpYyBpbmxpbmUgdm9pZA0KPiAtcmVjb3JkX2Z1bGxfZW5kX3JlbGVhc2Ug KHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjKQ0KPiAtew0KPiAtICB4ZnJlZSAocmVjKTsN Cj4gLX0NCj4gLQ0KPiAtLyogRnJlZSBvbmUgcmVjb3JkIGVudHJ5LCBhbnkgdHlwZS4NCj4gLSAg IFJldHVybiBlbnRyeS0+dHlwZSwgaW4gY2FzZSBjYWxsZXIgd2FudHMgdG8ga25vdy4gICovDQo+ IC0NCj4gLXN0YXRpYyBpbmxpbmUgZW51bSByZWNvcmRfZnVsbF90eXBlDQo+IC1yZWNvcmRfZnVs bF9lbnRyeV9yZWxlYXNlIChzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gK3JlY29y ZF9mdWxsX2VudHJ5X2NsZWFudXAgKHJlY29yZF9mdWxsX2VudHJ5IHJlYykNCj4gIHsNCj4gLSAg ZW51bSByZWNvcmRfZnVsbF90eXBlIHR5cGUgPSByZWMtPnR5cGU7DQo+IA0KPiAtICBzd2l0Y2gg KHR5cGUpIHsNCj4gKyAgc3dpdGNoIChyZWMudHlwZSkgew0KPiAgICBjYXNlIHJlY29yZF9mdWxs X3JlZzoNCj4gLSAgICByZWNvcmRfZnVsbF9yZWdfcmVsZWFzZSAocmVjKTsNCj4gKyAgICByZWNv cmRfZnVsbF9yZWdfY2xlYW51cCAocmVjKTsNCj4gICAgICBicmVhazsNCj4gICAgY2FzZSByZWNv cmRfZnVsbF9tZW06DQo+IC0gICAgcmVjb3JkX2Z1bGxfbWVtX3JlbGVhc2UgKHJlYyk7DQo+IC0g ICAgYnJlYWs7DQo+IC0gIGNhc2UgcmVjb3JkX2Z1bGxfZW5kOg0KPiAtICAgIHJlY29yZF9mdWxs X2VuZF9yZWxlYXNlIChyZWMpOw0KPiArICAgIHJlY29yZF9mdWxsX21lbV9jbGVhbnVwIChyZWMp Ow0KPiAgICAgIGJyZWFrOw0KPiAgICB9DQo+IC0gIHJldHVybiB0eXBlOw0KPiAgfQ0KPiANCj4g LS8qIEZyZWUgYWxsIHJlY29yZCBlbnRyaWVzIGluIGxpc3QgcG9pbnRlZCB0byBieSBSRUMuICAq Lw0KPiAtDQo+ICBzdGF0aWMgdm9pZA0KPiAtcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlIChzdHJ1 Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gK3JlY29yZF9mdWxsX3Jlc2V0X2hpc3Rvcnkg KCkNCj4gIHsNCj4gLSAgaWYgKCFyZWMpDQo+IC0gICAgcmV0dXJuOw0KPiAtDQo+IC0gIHdoaWxl IChyZWMtPm5leHQpDQo+IC0gICAgcmVjID0gcmVjLT5uZXh0Ow0KPiArICByZWNvcmRfZnVsbF9p bnNuX251bSA9IDA7DQo+ICsgIHJlY29yZF9mdWxsX2luc25fY291bnQgPSAwOw0KPiArICByZWNv cmRfZnVsbF9uZXh0X2luc24gPSAwOw0KPiANCj4gLSAgd2hpbGUgKHJlYy0+cHJldikNCj4gKyAg Zm9yIChhdXRvICZpbnNuIDogcmVjb3JkX2Z1bGxfbGlzdCkNCj4gICAgICB7DQo+IC0gICAgICBy ZWMgPSByZWMtPnByZXY7DQo+IC0gICAgICByZWNvcmRfZnVsbF9lbnRyeV9yZWxlYXNlIChyZWMt Pm5leHQpOw0KPiArICAgICAgZm9yIChhdXRvICZlbnRyeSA6IGluc24uZWZmZWN0cykNCj4gKwly ZWNvcmRfZnVsbF9lbnRyeV9jbGVhbnVwIChlbnRyeSk7DQo+ICAgICAgfQ0KPiANCj4gLSAgaWYg KHJlYyA9PSAmcmVjb3JkX2Z1bGxfZmlyc3QpDQo+ICsgIHJlY29yZF9mdWxsX2xpc3QuY2xlYXIg KCk7DQo+ICt9DQo+ICsNCj4gKy8qIFJlbGVhc2UgYWxsIHJlY29yZCBlbnRyaWVzIGFmdGVyIHRo ZSBJTkRFWHRoIGVudHJ5IGluIHRoZSBsb2cuICAqLw0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr cmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAoaW50IGluZGV4KQ0KPiArew0KPiAr ICBmb3IgKGludCBpID0gcmVjb3JkX2Z1bGxfbGlzdC5zaXplICgpIC0gMTsgaSA+IGluZGV4OyBp LS0pDQoNCkNhbiB3ZSBnZXQgaGVyZSB3aXRoIGFuIGVtcHR5IGxpc3QgPyBUaGVuIHdlIHNob3Vs ZCBhZGQgYSBndWFyZCBoZXJlLCB0b28uDQpPdGhlcndpc2UsIGlmIHRoYXQgc2hvdWxkbid0IGhh cHBlbiBtYXliZSBhbiBhc3NlcnQgd291bGQgbWFrZSBzZW5zZT8NCg0KPiAgICAgIHsNCj4gLSAg ICAgIHJlY29yZF9mdWxsX2luc25fbnVtID0gMDsNCj4gLSAgICAgIHJlY29yZF9mdWxsX2ZpcnN0 Lm5leHQgPSBOVUxMOw0KPiArICAgICAgZm9yIChhdXRvICZlbnRyeSA6IHJlY29yZF9mdWxsX2xp c3RbaV0uZWZmZWN0cykNCj4gKwlyZWNvcmRfZnVsbF9lbnRyeV9jbGVhbnVwIChlbnRyeSk7DQo+ ICsgICAgICByZWNvcmRfZnVsbF9saXN0LnBvcF9iYWNrICgpOw0KPiAgICAgIH0NCj4gLSAgZWxz ZQ0KPiAtICAgIHJlY29yZF9mdWxsX2VudHJ5X3JlbGVhc2UgKHJlYyk7DQo+ICsgIC8qIFNldCB0 aGUgbmV4dCBpbnN0cnVjdGlvbiB0byBiZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGxvZyBzbyB3ZQ0K PiArICAgICBzdGFydCByZWNvcmRpbmcgaWYgdGhlIHVzZXIgbW92ZXMgZm9yd2FyZCBhZ2Fpbi4g ICovDQo+ICsgIHJlY29yZF9mdWxsX25leHRfaW5zbiA9IGluZGV4Ow0KPiAgfQ0KPiANCj4gLS8q IEZyZWUgYWxsIHJlY29yZCBlbnRyaWVzIGZvcndhcmQgb2YgdGhlIGdpdmVuIGxpc3QgcG9zaXRp b24uICAqLw0KPiArLyogU2F2ZSB0aGUgaW5jb21wbGV0ZSBpbnN0cnVjdGlvbiBpbiB0aGUgbG9n LiAgKi8NCj4gDQo+ICBzdGF0aWMgdm9pZA0KPiAtcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2Zv bGxvd2luZyAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWMpDQo+ICtyZWNvcmRfZnVsbF9z YXZlX2luc3RydWN0aW9uICgpDQo+ICB7DQo+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAq dG1wID0gcmVjLT5uZXh0Ow0KPiArICArK3JlY29yZF9mdWxsX2luc25fY291bnQ7DQo+ICsgIHJl Y29yZF9mdWxsX2luY29tcGxldGVfaW5zdHJ1Y3Rpb24uaW5zbl9udW0gPSByZWNvcmRfZnVsbF9p bnNuX2NvdW50Ow0KPiArICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uLmVmZmVj dHMuc2hyaW5rX3RvX2ZpdCAoKTsNCj4gKyAgcmVjb3JkX2Z1bGxfbGlzdC5wdXNoX2JhY2sgKHN0 ZDo6bW92ZSAocmVjb3JkX2Z1bGxfaW5jb21wbGV0ZV9pbnN0cnVjdGlvbikpOw0KPiArICByZWNv cmRfZnVsbF9uZXh0X2luc24rKzsNCj4gDQo+IC0gIHJlYy0+bmV4dCA9IE5VTEw7DQo+IC0gIHdo aWxlICh0bXApDQo+IC0gICAgew0KPiAtICAgICAgcmVjID0gdG1wLT5uZXh0Ow0KPiAtICAgICAg aWYgKHJlY29yZF9mdWxsX2VudHJ5X3JlbGVhc2UgKHRtcCkgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0K PiAtCXsNCj4gLQkgIHJlY29yZF9mdWxsX2luc25fbnVtLS07DQo+IC0JICByZWNvcmRfZnVsbF9p bnNuX2NvdW50LS07DQo+IC0JfQ0KPiAtICAgICAgdG1wID0gcmVjOw0KPiAtICAgIH0NCj4gKyAg cmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAoKTsNCj4gIH0NCj4gDQo+ICAvKiBEZWxldGUg dGhlIGZpcnN0IGluc3RydWN0aW9uIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9nLCB0byBt YWtlDQo+IEBAIC01NTAsNTIgKzUxNSwyMiBAQCByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2VfZm9s bG93aW5nIChzdHJ1Y3QNCj4gcmVjb3JkX2Z1bGxfZW50cnkgKnJlYykNCj4gIHN0YXRpYyB2b2lk DQo+ICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2VfZmlyc3QgKHZvaWQpDQo+ICB7DQo+IC0gIHN0 cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqdG1wOw0KPiAtDQo+IC0gIGlmICghcmVjb3JkX2Z1bGxf Zmlyc3QubmV4dCkNCj4gKyAgaWYgKHJlY29yZF9mdWxsX2xpc3QuZW1wdHkgKCkpDQo+ICAgICAg cmV0dXJuOw0KPiANCj4gLSAgLyogTG9vcCB1bnRpbCBhIHJlY29yZF9mdWxsX2VuZC4gICovDQo+ IC0gIHdoaWxlICgxKQ0KPiAtICAgIHsNCj4gLSAgICAgIC8qIEN1dCByZWNvcmRfZnVsbF9maXJz dC5uZXh0IG91dCBvZiB0aGUgbGlua2VkIGxpc3QuICAqLw0KPiAtICAgICAgdG1wID0gcmVjb3Jk X2Z1bGxfZmlyc3QubmV4dDsNCj4gLSAgICAgIHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQgPSB0bXAt Pm5leHQ7DQo+IC0gICAgICB0bXAtPm5leHQtPnByZXYgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7DQo+ IC0NCj4gLSAgICAgIC8qIHRtcCBpcyBub3cgaXNvbGF0ZWQsIGFuZCBjYW4gYmUgZGVsZXRlZC4g ICovDQo+IC0gICAgICBpZiAocmVjb3JkX2Z1bGxfZW50cnlfcmVsZWFzZSAodG1wKSA9PSByZWNv cmRfZnVsbF9lbmQpDQo+IC0JYnJlYWs7CS8qIEVuZCBsb29wIGF0IGZpcnN0IHJlY29yZF9mdWxs X2VuZC4gICovDQo+ICsgIGZvciAoYXV0byAmZW50cnkgOiByZWNvcmRfZnVsbF9saXN0WzBdLmVm ZmVjdHMpDQo+ICsgICAgcmVjb3JkX2Z1bGxfZW50cnlfY2xlYW51cCAoZW50cnkpOw0KPiANCj4g LSAgICAgIGlmICghcmVjb3JkX2Z1bGxfZmlyc3QubmV4dCkNCj4gLQl7DQo+IC0JICBnZGJfYXNz ZXJ0IChyZWNvcmRfZnVsbF9pbnNuX251bSA9PSAxKTsNCj4gLQkgIGJyZWFrOwkvKiBFbmQgbG9v cCB3aGVuIGxpc3QgaXMgZW1wdHkuICAqLw0KPiAtCX0NCj4gLSAgICB9DQo+ICsgIHJlY29yZF9m dWxsX2xpc3QucG9wX2Zyb250ICgpOw0KPiArICAtLXJlY29yZF9mdWxsX25leHRfaW5zbjsNCj4g IH0NCj4gDQo+ICAvKiBBZGQgYSBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgdG8gcmVjb3JkX2Z1 bGxfYXJjaF9saXN0LiAgKi8NCj4gDQo+ICBzdGF0aWMgdm9pZA0KPiAtcmVjb3JkX2Z1bGxfYXJj aF9saXN0X2FkZCAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWMpDQo+ICtyZWNvcmRfZnVs bF9hcmNoX2xpc3RfYWRkIChyZWNvcmRfZnVsbF9lbnRyeSAmcmVjKQ0KPiAgew0KPiAtICBpZiAo cmVjb3JkX2RlYnVnID4gMSkNCj4gLSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiAtCQki UHJvY2VzcyByZWNvcmQ6IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGQgJXMuXG4iLA0KPiAtCQlo b3N0X2FkZHJlc3NfdG9fc3RyaW5nIChyZWMpKTsNCj4gLQ0KPiAtICBpZiAocmVjb3JkX2Z1bGxf YXJjaF9saXN0X3RhaWwpDQo+IC0gICAgew0KPiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0 X3RhaWwtPm5leHQgPSByZWM7DQo+IC0gICAgICByZWMtPnByZXYgPSByZWNvcmRfZnVsbF9hcmNo X2xpc3RfdGFpbDsNCj4gLSAgICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsID0gcmVjOw0K PiAtICAgIH0NCj4gLSAgZWxzZQ0KPiAtICAgIHsNCj4gLSAgICAgIHJlY29yZF9mdWxsX2FyY2hf bGlzdF9oZWFkID0gcmVjOw0KPiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwgPSBy ZWM7DQo+IC0gICAgfQ0KPiArICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3RydWN0aW9uLmVm ZmVjdHMucHVzaF9iYWNrIChyZWMpOw0KPiAgfQ0KPiANCj4gIC8qIFJldHVybiB0aGUgdmFsdWUg c3RvcmFnZSBsb2NhdGlvbiBvZiBhIHJlY29yZCBlbnRyeS4gICovDQo+IEBAIC02MTMsNyArNTQ4 LDYgQEAgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWMp DQo+ICAgICAgICByZXR1cm4gcmVjLT51LnJlZy51LnB0cjsNCj4gICAgICBlbHNlDQo+ICAgICAg ICByZXR1cm4gcmVjLT51LnJlZy51LmJ1ZjsNCj4gLSAgY2FzZSByZWNvcmRfZnVsbF9lbmQ6DQo+ ICAgIGRlZmF1bHQ6DQo+ICAgICAgZ2RiX2Fzc2VydF9ub3RfcmVhY2hlZCAoInVuZXhwZWN0ZWQg cmVjb3JkX2Z1bGxfZW50cnkgdHlwZSIpOw0KPiAgICAgIHJldHVybiBOVUxMOw0KPiBAQCAtNjI1 LDcgKzU1OSw3IEBAIHJlY29yZF9mdWxsX2dldF9sb2MgKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRy eSAqcmVjKQ0KPiAgaW50DQo+ICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX3JlZyAoc3RydWN0 IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ251bSkNCj4gIHsNCj4gLSAgc3RydWN0IHJlY29y ZF9mdWxsX2VudHJ5ICpyZWM7DQo+ICsgIHJlY29yZF9mdWxsX2VudHJ5IHJlYzsNCj4gDQo+ICAg IGlmIChyZWNvcmRfZGVidWcgPiAxKQ0KPiAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ IEBAIC02MzMsOSArNTY3LDkgQEAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9yZWcgKHN0cnVj dCByZWdjYWNoZQ0KPiAqcmVnY2FjaGUsIGludCByZWdudW0pDQo+ICAJCSJyZWNvcmQgbGlzdC5c biIsDQo+ICAJCXJlZ251bSk7DQo+IA0KPiAtICByZWMgPSByZWNvcmRfZnVsbF9yZWdfYWxsb2Mg KHJlZ2NhY2hlLCByZWdudW0pOw0KPiArICByZWMgPSByZWNvcmRfZnVsbF9yZWdfaW5pdCAocmVn Y2FjaGUsIHJlZ251bSk7DQo+IA0KPiAtICByZWdjYWNoZS0+Y29va2VkX3JlYWQgKHJlZ251bSwg cmVjb3JkX2Z1bGxfZ2V0X2xvYyAocmVjKSk7DQo+ICsgIHJlZ2NhY2hlLT5jb29rZWRfcmVhZCAo cmVnbnVtLCByZWNvcmRfZnVsbF9nZXRfbG9jICgmcmVjKSk7DQo+IA0KPiAgICByZWNvcmRfZnVs bF9hcmNoX2xpc3RfYWRkIChyZWMpOw0KPiANCj4gQEAgLTY0OCw3ICs1ODIsNyBAQCByZWNvcmRf ZnVsbF9hcmNoX2xpc3RfYWRkX3JlZyAoc3RydWN0IHJlZ2NhY2hlDQo+ICpyZWdjYWNoZSwgaW50 IHJlZ251bSkNCj4gIGludA0KPiAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9tZW0gKENPUkVf QUREUiBhZGRyLCBpbnQgbGVuKQ0KPiAgew0KPiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkg KnJlYzsNCj4gKyAgcmVjb3JkX2Z1bGxfZW50cnkgcmVjOw0KPiANCj4gICAgaWYgKHJlY29yZF9k ZWJ1ZyA+IDEpDQo+ICAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gQEAgLTY1OSwxMiAr NTkzLDEyIEBAIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwN Cj4gaW50IGxlbikNCj4gICAgaWYgKCFhZGRyKQkvKiBGSVhNRTogV2h5PyAgU29tZSBhcmNoIG11 c3QgcGVybWl0IGl0Li4uICAqLw0KPiAgICAgIHJldHVybiAwOw0KPiANCj4gLSAgcmVjID0gcmVj b3JkX2Z1bGxfbWVtX2FsbG9jIChhZGRyLCBsZW4pOw0KPiArICByZWMgPSByZWNvcmRfZnVsbF9t ZW1faW5pdCAoYWRkciwgbGVuKTsNCj4gDQo+ICAgIGlmIChyZWNvcmRfcmVhZF9tZW1vcnkgKGN1 cnJlbnRfaW5mZXJpb3IgKCktPmFyY2ggKCksIGFkZHIsDQo+IC0JCQkgIHJlY29yZF9mdWxsX2dl dF9sb2MgKHJlYyksIGxlbikpDQo+ICsJCQkgIHJlY29yZF9mdWxsX2dldF9sb2MgKCZyZWMpLCBs ZW4pKQ0KPiAgICAgIHsNCj4gLSAgICAgIHJlY29yZF9mdWxsX21lbV9yZWxlYXNlIChyZWMpOw0K PiArICAgICAgcmVjb3JkX2Z1bGxfbWVtX2NsZWFudXAgKHJlYyk7DQo+ICAgICAgICByZXR1cm4g LTE7DQo+ICAgICAgfQ0KPiANCj4gQEAgLTY3MywyNyArNjA3LDYgQEAgcmVjb3JkX2Z1bGxfYXJj aF9saXN0X2FkZF9tZW0gKENPUkVfQUREUiBhZGRyLA0KPiBpbnQgbGVuKQ0KPiAgICByZXR1cm4g MDsNCj4gIH0NCj4gDQo+IC0vKiBBZGQgYSByZWNvcmRfZnVsbF9lbmQgdHlwZSBzdHJ1Y3QgcmVj b3JkX2Z1bGxfZW50cnkgdG8NCj4gLSAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdC4gICovDQo+IC0N Cj4gLWludA0KPiAtcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKHZvaWQpDQo+IC17DQo+ IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcmVjOw0KPiAtDQo+IC0gIGlmIChyZWNvcmRf ZGVidWcgPiAxKQ0KPiAtICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0JCSJQcm9jZXNz IHJlY29yZDogYWRkIGVuZCB0byBhcmNoIGxpc3QuXG4iKTsNCj4gLQ0KPiAtICByZWMgPSByZWNv cmRfZnVsbF9lbmRfYWxsb2MgKCk7DQo+IC0gIHJlYy0+dS5lbmQuc2lndmFsID0gR0RCX1NJR05B TF8wOw0KPiAtICByZWMtPnUuZW5kLmluc25fbnVtID0gKytyZWNvcmRfZnVsbF9pbnNuX2NvdW50 Ow0KPiAtDQo+IC0gIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGQgKHJlYyk7DQo+IC0NCj4gLSAg cmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyB2b2lkDQo+ICByZWNvcmRfZnVsbF9jaGVj a19pbnNuX251bSAodm9pZCkNCj4gIHsNCj4gQEAgLTcyNSw4ICs2MzgsNyBAQCByZWNvcmRfZnVs bF9tZXNzYWdlIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiBlbnVtIGdkYl9zaWduYWwg c2lnbmFsKQ0KPiANCj4gICAgdHJ5DQo+ICAgICAgew0KPiAtICAgICAgcmVjb3JkX2Z1bGxfYXJj aF9saXN0X2hlYWQgPSBOVUxMOw0KPiAtICAgICAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X3RhaWwg PSBOVUxMOw0KPiArICAgICAgcmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAoKTsNCj4gDQo+ ICAgICAgICAvKiBDaGVjayByZWNvcmRfZnVsbF9pbnNuX251bS4gICovDQo+ICAgICAgICByZWNv cmRfZnVsbF9jaGVja19pbnNuX251bSAoKTsNCj4gQEAgLTc0NiwyMCArNjU4LDE2IEBAIHJlY29y ZF9mdWxsX21lc3NhZ2UgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsDQo+IGVudW0gZ2RiX3Np Z25hbCBzaWduYWwpDQo+ICAJIHRoZSB1c2VyIHNheXMgc29tZXRoaW5nIGRpZmZlcmVudCwgbGlr ZSAiZGVsaXZlciB0aGlzIHNpZ25hbCINCj4gIAkgZHVyaW5nIHRoZSByZXBsYXkgbW9kZSkuDQo+ IA0KPiAtCSBVc2VyIHNob3VsZCB1bmRlcnN0YW5kIHRoYXQgbm90aGluZyBoZSBkb2VzIGR1cmlu ZyB0aGUgcmVwbGF5DQo+IC0JIG1vZGUgd2lsbCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBj aGlsZC4gIElmIGhlIHRyaWVzLA0KPiArCSBVc2VyIHNob3VsZCB1bmRlcnN0YW5kIHRoYXQgbm90 aGluZyB0aGV5IGRvIGR1cmluZyB0aGUgcmVwbGF5DQo+ICsJIG1vZGUgd2lsbCBjaGFuZ2UgdGhl IGJlaGF2aW9yIG9mIHRoZSBjaGlsZC4gIElmIHRoZXkgdHJ5LA0KPiAgCSB0aGVuIHRoYXQgaXMg YSB1c2VyIGVycm9yLg0KPiANCj4gIAkgQnV0IHdlIHNob3VsZCBzdGlsbCBkZWxpdmVyIHRoZSBz aWduYWwgdG8gZ2RiIGR1cmluZyB0aGUgcmVwbGF5LA0KPiAgCSBpZiB3ZSBkZWxpdmVyZWQgaXQg ZHVyaW5nIHRoZSByZWNvcmRpbmcuICBUaGVyZWZvcmUgd2Ugc2hvdWxkDQo+ICAJIHJlY29yZCB0 aGUgc2lnbmFsIGR1cmluZyByZWNvcmRfZnVsbF93YWl0LCBub3QNCj4gIAkgcmVjb3JkX2Z1bGxf cmVzdW1lLiAgKi8NCj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0ICE9ICZyZWNvcmRfZnVs bF9maXJzdCkgIC8qIEZJWE1FIGJldHRlciB3YXkNCj4gLQkJCQkJCSAgICAgIHRvIGNoZWNrICov DQo+IC0Jew0KPiAtCSAgZ2RiX2Fzc2VydCAocmVjb3JkX2Z1bGxfbGlzdC0+dHlwZSA9PSByZWNv cmRfZnVsbF9lbmQpOw0KPiAtCSAgcmVjb3JkX2Z1bGxfbGlzdC0+dS5lbmQuc2lndmFsID0gc2ln bmFsOw0KPiAtCX0NCj4gKyAgICAgIGlmIChzaWduYWwgIT0gR0RCX1NJR05BTF8wICYmICFyZWNv cmRfZnVsbF9saXN0LmVtcHR5ICgpKQ0KPiArCXJlY29yZF9mdWxsX2xpc3RbcmVjb3JkX2Z1bGxf bmV4dF9pbnNuIC0gMV0uc2lndmFsID0gc2lnbmFsOw0KPiANCj4gICAgICAgIGlmIChzaWduYWwg PT0gR0RCX1NJR05BTF8wDQo+ICAJICB8fCAhZ2RiYXJjaF9wcm9jZXNzX3JlY29yZF9zaWduYWxf cCAoZ2RiYXJjaCkpDQo+IEBAIC03NzgsMTMgKzY4NiwxMSBAQCByZWNvcmRfZnVsbF9tZXNzYWdl IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiBlbnVtIGdkYl9zaWduYWwgc2lnbmFsKQ0K PiAgICAgIH0NCj4gICAgY2F0Y2ggKGNvbnN0IGdkYl9leGNlcHRpb24gJmV4KQ0KPiAgICAgIHsN Cj4gLSAgICAgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZSAocmVjb3JkX2Z1bGxfYXJjaF9saXN0 X3RhaWwpOw0KPiArICAgICAgcmVjb3JkX2Z1bGxfcmVzZXRfaW5jb21wbGV0ZSAoKTsNCj4gICAg ICAgIHRocm93Ow0KPiAgICAgIH0NCj4gDQo+IC0gIHJlY29yZF9mdWxsX2xpc3QtPm5leHQgPSBy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZDsNCj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hl YWQtPnByZXYgPSByZWNvcmRfZnVsbF9saXN0Ow0KPiAtICByZWNvcmRfZnVsbF9saXN0ID0gcmVj b3JkX2Z1bGxfYXJjaF9saXN0X3RhaWw7DQo+ICsgIHJlY29yZF9mdWxsX3NhdmVfaW5zdHJ1Y3Rp b24gKCk7DQo+IA0KPiAgICBpZiAocmVjb3JkX2Z1bGxfaW5zbl9udW0gPT0gcmVjb3JkX2Z1bGxf aW5zbl9tYXhfbnVtKQ0KPiAgICAgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZV9maXJzdCAoKTsN Cj4gQEAgLTgyOSw5ICs3MzUsOSBAQCBzdGF0aWMgZW51bSB0YXJnZXRfc3RvcF9yZWFzb24NCj4g cmVjb3JkX2Z1bGxfc3RvcF9yZWFzb24NCj4gICAgIGVudHJpZXMgYW5kIG1lbW9yeSBlbnRyaWVz LCBmb2xsb3dlZCBieSBhbiAnZW5kJyBlbnRyeS4gICovDQo+IA0KPiAgc3RhdGljIGlubGluZSB2 b2lkDQo+IC1yZWNvcmRfZnVsbF9leGVjX2luc24gKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUs DQo+IC0JCSAgICAgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwNCj4gLQkJICAgICAgIHN0cnVj dCByZWNvcmRfZnVsbF9lbnRyeSAqZW50cnkpDQo+ICtyZWNvcmRfZnVsbF9leGVjX2VudHJ5IChy ZWdjYWNoZSAqcmVnY2FjaGUsDQo+ICsJCQlnZGJhcmNoICpnZGJhcmNoLA0KPiArCQkJcmVjb3Jk X2Z1bGxfZW50cnkgKmVudHJ5KQ0KPiAgew0KPiAgICBzd2l0Y2ggKGVudHJ5LT50eXBlKQ0KPiAg ICAgIHsNCj4gQEAgLTkwOSw2ICs4MTUsMTcgQEAgcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiAgICAgIH0NCj4gIH0NCj4gDQo+ICsvKiBFeGVjdXRl IG9uZSBlbnRyeSBpbiB0aGUgbG9nIGJ5IGV4ZWN1dGluZyBhbGwgdGhlIGVmZmVjdHMuICAqLw0K PiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gK3JlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVn Y2FjaGUgKnJlZ2NhY2hlLA0KPiArCQkgICAgICAgZ2RiYXJjaCAqZ2RiYXJjaCwNCj4gKwkJICAg ICAgIHJlY29yZF9mdWxsX2luc3RydWN0aW9uICZpbnNuKQ0KPiArew0KPiArICBmb3IgKGF1dG8g JmVudHJ5IDogaW5zbi5lZmZlY3RzKQ0KPiArICAgIHJlY29yZF9mdWxsX2V4ZWNfZW50cnkgKHJl Z2NhY2hlLCBnZGJhcmNoLCAmZW50cnkpOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMgdm9pZCByZWNv cmRfZnVsbF9yZXN0b3JlIChzdHJ1Y3QgYmZkICZjYmZkKTsNCj4gDQo+ICAvKiBBc3luY2hyb25v dXMgc2lnbmFsIGhhbmRsZSByZWdpc3RlcmVkIGFzIGV2ZW50IGxvb3Agc291cmNlIGZvciB3aGVu DQo+IEBAIC05ODMsMTAgKzkwMCw3IEBAIHJlY29yZF9mdWxsX29wZW4gKGNvbnN0IGNoYXIgKmFy Z3MsIGludCBmcm9tX3R0eSkNCj4gICAgcmVjb3JkX3ByZW9wZW4gKCk7DQo+IA0KPiAgICAvKiBS ZXNldCAqLw0KPiAtICByZWNvcmRfZnVsbF9pbnNuX251bSA9IDA7DQo+IC0gIHJlY29yZF9mdWxs X2luc25fY291bnQgPSAwOw0KPiAtICByZWNvcmRfZnVsbF9saXN0ID0gJnJlY29yZF9mdWxsX2Zp cnN0Ow0KPiAtICByZWNvcmRfZnVsbF9saXN0LT5uZXh0ID0gTlVMTDsNCj4gKyAgcmVjb3JkX2Z1 bGxfcmVzZXRfaGlzdG9yeSAoKTsNCj4gDQo+ICAgIGJmZCAqY2JmZCA9IGdldF9pbmZlcmlvcl9j b3JlX2JmZCAoY3VycmVudF9pbmZlcmlvciAoKSk7DQo+ICAgIGlmIChjYmZkICE9IG51bGxwdHIp DQo+IEBAIC0xMDE0LDcgKzkyOCw3IEBAIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0OjpjbG9zZSAo KQ0KPiAgICBpZiAocmVjb3JkX2RlYnVnKQ0KPiAgICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2cs ICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2Z1bGxfY2xvc2VcbiIpOw0KPiANCj4gLSAgcmVjb3Jk X2Z1bGxfbGlzdF9yZWxlYXNlIChyZWNvcmRfZnVsbF9saXN0KTsNCj4gKyAgcmVjb3JkX2Z1bGxf cmVzZXRfaGlzdG9yeSAoKTsNCj4gDQo+ICAgIC8qIFJlbGVhc2UgcmVjb3JkX2Z1bGxfY29yZV9y ZWdidWYuICAqLw0KPiAgICBpZiAocmVjb3JkX2Z1bGxfY29yZV9yZWdidWYpDQo+IEBAIC0xMzEz LDcgKzEyMjcsNiBAQCByZWNvcmRfZnVsbF93YWl0XzEgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMs DQo+ICAgICAgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOw0K PiAgICAgICAgY29uc3QgYWRkcmVzc19zcGFjZSAqYXNwYWNlID0gY3VycmVudF9pbmZlcmlvciAo KS0+YXNwYWNlLmdldCAoKTsNCj4gICAgICAgIGludCBjb250aW51ZV9mbGFnID0gMTsNCj4gLSAg ICAgIGludCBmaXJzdF9yZWNvcmRfZnVsbF9lbmQgPSAxOw0KPiANCj4gICAgICAgIHRyeQ0KPiAg CXsNCj4gQEAgLTEzMjIsNyArMTIzNSw2IEBAIHJlY29yZF9mdWxsX3dhaXRfMSAoc3RydWN0IHRh cmdldF9vcHMgKm9wcywNCj4gIAkgIHJlY29yZF9mdWxsX3N0b3BfcmVhc29uID0gVEFSR0VUX1NU T1BQRURfQllfTk9fUkVBU09OOw0KPiAgCSAgc3RhdHVzLT5zZXRfc3RvcHBlZCAoR0RCX1NJR05B TF8wKTsNCj4gDQo+IC0JICAvKiBDaGVjayBicmVha3BvaW50IHdoZW4gZm9yd2FyZCBleGVjdXRl LiAgKi8NCj4gIAkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FSRCkNCj4g IAkgICAgew0KPiAgCSAgICAgIHRtcF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKTsN Cj4gQEAgLTEzNDQsMTAgKzEyNTYsMTAgQEAgcmVjb3JkX2Z1bGxfd2FpdF8xIChzdHJ1Y3QgdGFy Z2V0X29wcyAqb3BzLA0KPiAgCSAgICAgdGhlIHNpZ25hbC4gICovDQo+ICAJICB0YXJnZXRfdGVy bWluYWw6Om91cnMgKCk7DQo+IA0KPiAtCSAgLyogSW4gRVhFQ19GT1JXQVJEIG1vZGUsIHJlY29y ZF9mdWxsX2xpc3QgcG9pbnRzIHRvIHRoZSB0YWlsIG9mIHByZXYNCj4gLQkgICAgIGluc3RydWN0 aW9uLiAgKi8NCj4gLQkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FSRCAm JiByZWNvcmRfZnVsbF9saXN0LT5uZXh0KQ0KPiAtCSAgICByZWNvcmRfZnVsbF9saXN0ID0gcmVj b3JkX2Z1bGxfbGlzdC0+bmV4dDsNCj4gKwkgIC8qIEluIEVYRUNfRk9SV0FSRCBtb2RlLCByZWNv cmRfZnVsbF9uZXh0X2luc24gaXMgdGhlIG5leHQNCj4gKwkgICAgIGluc3RydWN0aW9uIHRvIGJl IGV4ZWN1dGVkLiAgKi8NCj4gKwkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVW RVJTRSkNCj4gKwkgICAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuLS07DQo+IA0KPiAgCSAgLyogTG9v cCBvdmVyIHRoZSByZWNvcmRfZnVsbF9saXN0LCBsb29raW5nIGZvciB0aGUgbmV4dCBwbGFjZSB0 bw0KPiAgCSAgICAgc3RvcC4gICovDQo+IEBAIC0xMzU1LDEwOCArMTI2Nyw5MiBAQCByZWNvcmRf ZnVsbF93YWl0XzEgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsDQo+ICAJICAgIHsNCj4gIAkgICAg ICAvKiBDaGVjayBmb3IgYmVnaW5uaW5nIGFuZCBlbmQgb2YgbG9nLiAgKi8NCj4gIAkgICAgICBp ZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UNCj4gLQkJICAmJiByZWNvcmRf ZnVsbF9saXN0ID09ICZyZWNvcmRfZnVsbF9maXJzdCkNCj4gKwkJICAmJiByZWNvcmRfZnVsbF9u ZXh0X2luc24gPCAwKQ0KPiAgCQl7DQo+ICAJCSAgLyogSGl0IGJlZ2lubmluZyBvZiByZWNvcmQg bG9nIGluIHJldmVyc2UuICAqLw0KPiAgCQkgIHN0YXR1cy0+c2V0X25vX2hpc3RvcnkgKCk7DQo+ ICsJCSAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuID0gMDsNCj4gIAkJICBicmVhazsNCj4gIAkJfQ0K PiAgCSAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uICE9IEVYRUNfUkVWRVJTRQ0KPiAtCQkg ICYmICFyZWNvcmRfZnVsbF9saXN0LT5uZXh0KQ0KPiArCQkgICYmIHJlY29yZF9mdWxsX25leHRf aW5zbiA9PSByZWNvcmRfZnVsbF9saXN0LnNpemUgKCkpDQo+ICAJCXsNCj4gIAkJICAvKiBIaXQg ZW5kIG9mIHJlY29yZCBsb2cgZ29pbmcgZm9yd2FyZC4gICovDQo+ICAJCSAgc3RhdHVzLT5zZXRf bm9faGlzdG9yeSAoKTsNCj4gIAkJICBicmVhazsNCj4gIAkJfQ0KPiANCj4gLQkgICAgICByZWNv cmRfZnVsbF9leGVjX2luc24gKHJlZ2NhY2hlLCBnZGJhcmNoLCByZWNvcmRfZnVsbF9saXN0KTsN Cj4gKwkgICAgICByZWNvcmRfZnVsbF9leGVjX2luc24NCj4gKwkJKHJlZ2NhY2hlLCBnZGJhcmNo LA0KPiArCQkgcmVjb3JkX2Z1bGxfbGlzdFtyZWNvcmRfZnVsbF9uZXh0X2luc25dKTsNCj4gDQo+ IC0JICAgICAgaWYgKHJlY29yZF9mdWxsX2xpc3QtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0K PiArCSAgICAgIC8qIHN0ZXAgKi8NCj4gKwkgICAgICBpZiAocmVjb3JkX2Z1bGxfcmVzdW1lX3N0 ZXApDQo+ICAJCXsNCj4gIAkJICBpZiAocmVjb3JkX2RlYnVnID4gMSkNCj4gLQkJICAgIGdkYl9w cmludGYNCj4gLQkJICAgICAgKGdkYl9zdGRsb2csDQo+IC0JCSAgICAgICAiUHJvY2VzcyByZWNv cmQ6IHJlY29yZF9mdWxsX2VuZCAlcyB0byAiDQo+IC0JCSAgICAgICAiaW5mZXJpb3IuXG4iLA0K PiAtCQkgICAgICAgaG9zdF9hZGRyZXNzX3RvX3N0cmluZyAocmVjb3JkX2Z1bGxfbGlzdCkpOw0K PiAtDQo+IC0JCSAgaWYgKGZpcnN0X3JlY29yZF9mdWxsX2VuZA0KPiAtCQkgICAgICAmJiBleGVj dXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkNCj4gLQkJICAgIHsNCj4gLQkJICAgICAg LyogV2hlbiByZXZlcnNlIGV4ZWN1dGUsIHRoZSBmaXJzdA0KPiAtCQkJIHJlY29yZF9mdWxsX2Vu ZCBpcyB0aGUgcGFydCBvZiBjdXJyZW50DQo+IC0JCQkgaW5zdHJ1Y3Rpb24uICAqLw0KPiAtCQkg ICAgICBmaXJzdF9yZWNvcmRfZnVsbF9lbmQgPSAwOw0KPiAtCQkgICAgfQ0KPiAtCQkgIGVsc2UN Cj4gLQkJICAgIHsNCj4gLQkJICAgICAgLyogSW4gRVhFQ19SRVZFUlNFIG1vZGUsIHRoaXMgaXMg dGhlDQo+IC0JCQkgcmVjb3JkX2Z1bGxfZW5kIG9mIHByZXYgaW5zdHJ1Y3Rpb24uICBJbg0KPiAt CQkJIEVYRUNfRk9SV0FSRCBtb2RlLCB0aGlzIGlzIHRoZQ0KPiAtCQkJIHJlY29yZF9mdWxsX2Vu ZCBvZiBjdXJyZW50IGluc3RydWN0aW9uLiAgKi8NCj4gLQkJICAgICAgLyogc3RlcCAqLw0KPiAt CQkgICAgICBpZiAocmVjb3JkX2Z1bGxfcmVzdW1lX3N0ZXApDQo+IC0JCQl7DQo+IC0JCQkgIGlm IChyZWNvcmRfZGVidWcgPiAxKQ0KPiAtCQkJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ IC0JCQkJCSJQcm9jZXNzIHJlY29yZDogc3RlcC5cbiIpOw0KPiAtCQkJICBjb250aW51ZV9mbGFn ID0gMDsNCj4gLQkJCX0NCj4gLQ0KPiAtCQkgICAgICAvKiBjaGVjayBicmVha3BvaW50ICovDQo+ IC0JCSAgICAgIHRtcF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKTsNCj4gLQkJICAg ICAgaWYgKHJlY29yZF9jaGVja19zdG9wcGVkX2J5X2JyZWFrcG9pbnQNCj4gLQkJCSAgKGFzcGFj ZSwgdG1wX3BjLCAmcmVjb3JkX2Z1bGxfc3RvcF9yZWFzb24pKQ0KPiAtCQkJew0KPiAtCQkJICBp ZiAocmVjb3JkX2RlYnVnKQ0KPiAtCQkJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0J CQkJCSJQcm9jZXNzIHJlY29yZDogYnJlYWsgIg0KPiAtCQkJCQkiYXQgJXMuXG4iLA0KPiAtCQkJ CQlwYWRkcmVzcyAoZ2RiYXJjaCwgdG1wX3BjKSk7DQo+ICsJCSAgICBnZGJfcHJpbnRmIChnZGJf c3RkbG9nLA0KPiArCQkJCSJQcm9jZXNzIHJlY29yZDogc3RlcC5cbiIpOw0KPiArCQkgIGNvbnRp bnVlX2ZsYWcgPSAwOw0KPiArCQl9DQo+IA0KPiAtCQkJICBjb250aW51ZV9mbGFnID0gMDsNCj4g LQkJCX0NCj4gKwkgICAgICAvKiBjaGVjayBicmVha3BvaW50ICovDQo+ICsJICAgICAgdG1wX3Bj ID0gcmVnY2FjaGVfcmVhZF9wYyAocmVnY2FjaGUpOw0KPiArCSAgICAgIGlmIChyZWNvcmRfY2hl Y2tfc3RvcHBlZF9ieV9icmVha3BvaW50DQo+ICsJCSAgKGFzcGFjZSwgdG1wX3BjLCAmcmVjb3Jk X2Z1bGxfc3RvcF9yZWFzb24pKQ0KPiArCQl7DQo+ICsJCSAgaWYgKHJlY29yZF9kZWJ1ZykNCj4g KwkJICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ICsJCQkJIlByb2Nlc3MgcmVjb3JkOiBi cmVhayAiDQo+ICsJCQkJImF0ICVzLlxuIiwNCj4gKwkJCQlwYWRkcmVzcyAoZ2RiYXJjaCwgdG1w X3BjKSk7DQo+IA0KPiAtCQkgICAgICBpZiAocmVjb3JkX2Z1bGxfc3RvcF9yZWFzb24NCj4gLQkJ CSAgPT0gVEFSR0VUX1NUT1BQRURfQllfV0FUQ0hQT0lOVCkNCj4gLQkJCXsNCj4gLQkJCSAgaWYg KHJlY29yZF9kZWJ1ZykNCj4gLQkJCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiAtCQkJ CQkiUHJvY2VzcyByZWNvcmQ6IGhpdCBodyAiDQo+IC0JCQkJCSJ3YXRjaHBvaW50LlxuIik7DQo+ IC0JCQkgIGNvbnRpbnVlX2ZsYWcgPSAwOw0KPiAtCQkJfQ0KPiAtCQkgICAgICAvKiBDaGVjayB0 YXJnZXQgc2lnbmFsICovDQo+IC0JCSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0LT51LmVuZC5z aWd2YWwgIT0gR0RCX1NJR05BTF8wKQ0KPiAtCQkJLyogRklYTUU6IGJldHRlciB3YXkgdG8gY2hl Y2sgKi8NCj4gLQkJCWNvbnRpbnVlX2ZsYWcgPSAwOw0KPiAtCQkgICAgfQ0KPiArCQkgIGNvbnRp bnVlX2ZsYWcgPSAwOw0KPiAgCQl9DQo+IA0KPiAtCSAgICAgIGlmIChjb250aW51ZV9mbGFnKQ0K PiArCSAgICAgIGlmIChyZWNvcmRfZnVsbF9zdG9wX3JlYXNvbg0KPiArCQkgID09IFRBUkdFVF9T VE9QUEVEX0JZX1dBVENIUE9JTlQpDQo+ICAJCXsNCj4gLQkJICBpZiAoZXhlY3V0aW9uX2RpcmVj dGlvbiA9PSBFWEVDX1JFVkVSU0UpDQo+IC0JCSAgICB7DQo+IC0JCSAgICAgIGlmIChyZWNvcmRf ZnVsbF9saXN0LT5wcmV2KQ0KPiAtCQkJcmVjb3JkX2Z1bGxfbGlzdCA9IHJlY29yZF9mdWxsX2xp c3QtPnByZXY7DQo+IC0JCSAgICB9DQo+IC0JCSAgZWxzZQ0KPiAtCQkgICAgew0KPiAtCQkgICAg ICBpZiAocmVjb3JkX2Z1bGxfbGlzdC0+bmV4dCkNCj4gLQkJCXJlY29yZF9mdWxsX2xpc3QgPSBy ZWNvcmRfZnVsbF9saXN0LT5uZXh0Ow0KPiAtCQkgICAgfQ0KPiArCQkgIGlmIChyZWNvcmRfZGVi dWcpDQo+ICsJCSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiArCQkJCSJQcm9jZXNzIHJl Y29yZDogaGl0IGh3ICINCj4gKwkJCQkid2F0Y2hwb2ludC5cbiIpOw0KPiArCQkgIGNvbnRpbnVl X2ZsYWcgPSAwOw0KPiAgCQl9DQo+ICsJICAgICAgaWYgKHJlY29yZF9mdWxsX2xpc3RbcmVjb3Jk X2Z1bGxfbmV4dF9pbnNuXS5zaWd2YWwuaGFzX3ZhbHVlICgpKQ0KPiArCQljb250aW51ZV9mbGFn ID0gMDsNCj4gKw0KPiArCSAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVW RVJTRSkNCj4gKwkJcmVjb3JkX2Z1bGxfbmV4dF9pbnNuLS07DQo+ICsJICAgICAgZWxzZQ0KPiAr CQlyZWNvcmRfZnVsbF9uZXh0X2luc24rKzsNCj4gIAkgICAgfQ0KPiAgCSAgd2hpbGUgKGNvbnRp bnVlX2ZsYWcpOw0KPiANCj4gKwkgIGlmIChyZWNvcmRfZnVsbF9uZXh0X2luc24gPCAwKQ0KPiAr CSAgICB7DQo+ICsJICAgICAgZ2RiX2Fzc2VydCAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVD X1JFVkVSU0UpOw0KPiArCSAgICAgIHJlY29yZF9mdWxsX25leHRfaW5zbiA9IDA7DQo+ICsJICAg IH0NCj4gKwkgIGVsc2UgaWYgKHJlY29yZF9mdWxsX25leHRfaW5zbiA+IHJlY29yZF9mdWxsX2xp c3Quc2l6ZSAoKSkNCj4gKwkgICAgew0KPiArCSAgICAgIGdkYl9hc3NlcnQgKGV4ZWN1dGlvbl9k aXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEKTsNCj4gKwkgICAgICByZWNvcmRfZnVsbF9uZXh0X2lu c24gPSByZWNvcmRfZnVsbF9saXN0LnNpemUgKCk7DQo+ICsJICAgIH0NCj4gKwkgIC8qIFJlc2V0 IHRoZSBjdXJyZW50IGluc3RydWN0aW9uIHRvIHBvaW50IHRvIHRoZSBvbmUgdG8gYmUgcmVwbGF5 ZWQNCj4gKwkgICAgIG1vdmluZyBmb3J3YXJkLiAgKi8NCj4gKwkgIGVsc2UgaWYgKGV4ZWN1dGlv bl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQ0KPiArCSAgICByZWNvcmRfZnVsbF9uZXh0X2lu c24rKzsNCj4gKw0KPiAgCXJlcGxheV9vdXQ6DQo+ICAJICBpZiAoc3RhdHVzLT5raW5kICgpID09 IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVEKQ0KPiAgCSAgICB7DQo+ICsJICAgICAgaW50IGluc24g PSAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQpDQo+ICsJCQkgPyByZWNvcmRf ZnVsbF9uZXh0X2luc24gLSAxIDogcmVjb3JkX2Z1bGxfbmV4dF9pbnNuOw0KPiAgCSAgICAgIGlm IChyZWNvcmRfZnVsbF9nZXRfc2lnKQ0KPiAgCQlzdGF0dXMtPnNldF9zdG9wcGVkIChHREJfU0lH TkFMX0lOVCk7DQo+IC0JICAgICAgZWxzZSBpZiAocmVjb3JkX2Z1bGxfbGlzdC0+dS5lbmQuc2ln dmFsICE9IEdEQl9TSUdOQUxfMCkNCj4gLQkJLyogRklYTUU6IGJldHRlciB3YXkgdG8gY2hlY2sg Ki8NCj4gLQkJc3RhdHVzLT5zZXRfc3RvcHBlZCAocmVjb3JkX2Z1bGxfbGlzdC0+dS5lbmQuc2ln dmFsKTsNCj4gKwkgICAgICBlbHNlIGlmIChyZWNvcmRfZnVsbF9saXN0W2luc25dLnNpZ3ZhbC5o YXNfdmFsdWUgKCkpDQo+ICsJCXN0YXR1cy0+c2V0X3N0b3BwZWQNCj4gKwkJICAocmVjb3JkX2Z1 bGxfbGlzdFtpbnNuXS5zaWd2YWwudmFsdWUgKCkpOw0KPiAgCSAgICAgIGVsc2UNCj4gIAkJc3Rh dHVzLT5zZXRfc3RvcHBlZCAoR0RCX1NJR05BTF9UUkFQKTsNCj4gIAkgICAgfQ0KPiBAQCAtMTQ2 NCwxMiArMTM2MCw5IEBAIHJlY29yZF9mdWxsX3dhaXRfMSAoc3RydWN0IHRhcmdldF9vcHMgKm9w cywNCj4gICAgICAgIGNhdGNoIChjb25zdCBnZGJfZXhjZXB0aW9uICZleCkNCj4gIAl7DQo+ICAJ ICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpDQo+IC0JICAgIHsNCj4g LQkgICAgICBpZiAocmVjb3JkX2Z1bGxfbGlzdC0+bmV4dCkNCj4gLQkJcmVjb3JkX2Z1bGxfbGlz dCA9IHJlY29yZF9mdWxsX2xpc3QtPm5leHQ7DQo+IC0JICAgIH0NCj4gKwkgICAgcmVjb3JkX2Z1 bGxfbmV4dF9pbnNuKys7DQo+ICAJICBlbHNlDQo+IC0JICAgIHJlY29yZF9mdWxsX2xpc3QgPSBy ZWNvcmRfZnVsbF9saXN0LT5wcmV2Ow0KPiArCSAgICByZWNvcmRfZnVsbF9uZXh0X2luc24tLTsN Cj4gDQo+ICAJICB0aHJvdzsNCj4gIAl9DQo+IEBAIC0xNTU3LDggKzE0NTAsNyBAQCByZWNvcmRf ZnVsbF9yZWdpc3RlcnNfY2hhbmdlIChzdHJ1Y3QgcmVnY2FjaGUNCj4gKnJlZ2NhY2hlLCBpbnQg cmVnbnVtKQ0KPiAgICAvKiBDaGVjayByZWNvcmRfZnVsbF9pbnNuX251bS4gICovDQo+ICAgIHJl Y29yZF9mdWxsX2NoZWNrX2luc25fbnVtICgpOw0KPiANCj4gLSAgcmVjb3JkX2Z1bGxfYXJjaF9s aXN0X2hlYWQgPSBOVUxMOw0KPiAtICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7 DQo+ICsgIHJlY29yZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+IA0KPiAgICBpZiAocmVn bnVtIDwgMCkNCj4gICAgICB7DQo+IEBAIC0xNTY4LDcgKzE0NjAsNyBAQCByZWNvcmRfZnVsbF9y ZWdpc3RlcnNfY2hhbmdlIChzdHJ1Y3QgcmVnY2FjaGUNCj4gKnJlZ2NhY2hlLCBpbnQgcmVnbnVt KQ0KPiAgCXsNCj4gIAkgIGlmIChyZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnY2Fj aGUsIGkpKQ0KPiAgCSAgICB7DQo+IC0JICAgICAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlIChy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCk7DQo+ICsJICAgICAgcmVjb3JkX2Z1bGxfcmVzZXRf aW5jb21wbGV0ZSAoKTsNCj4gIAkgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxl ZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7DQo+ICAJICAgIH0NCj4gIAl9DQo+IEBAIC0x NTc3LDE4ICsxNDY5LDExIEBAIHJlY29yZF9mdWxsX3JlZ2lzdGVyc19jaGFuZ2UgKHN0cnVjdCBy ZWdjYWNoZQ0KPiAqcmVnY2FjaGUsIGludCByZWdudW0pDQo+ICAgICAgew0KPiAgICAgICAgaWYg KHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdjYWNoZSwgcmVnbnVtKSkNCj4gIAl7 DQo+IC0JICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2UgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF90 YWlsKTsNCj4gKwkgIHJlY29yZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+ICAJICBlcnJv ciAoXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7 DQo+ICAJfQ0KPiAgICAgIH0NCj4gLSAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5k ICgpKQ0KPiAtICAgIHsNCj4gLSAgICAgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZSAocmVjb3Jk X2Z1bGxfYXJjaF9saXN0X3RhaWwpOw0KPiAtICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3Jk OiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikpOw0KPiAtICAgIH0NCj4gLSAgcmVj b3JkX2Z1bGxfbGlzdC0+bmV4dCA9IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkOw0KPiAtICBy ZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZC0+cHJldiA9IHJlY29yZF9mdWxsX2xpc3Q7DQo+IC0g IHJlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbDsNCj4gKyAgcmVj b3JkX2Z1bGxfc2F2ZV9pbnN0cnVjdGlvbiAoKTsNCj4gDQo+ICAgIGlmIChyZWNvcmRfZnVsbF9p bnNuX251bSA9PSByZWNvcmRfZnVsbF9pbnNuX21heF9udW0pDQo+ICAgICAgcmVjb3JkX2Z1bGxf bGlzdF9yZWxlYXNlX2ZpcnN0ICgpOw0KPiBAQCAtMTYwNyw3ICsxNDkyLDcgQEAgcmVjb3JkX2Z1 bGxfdGFyZ2V0OjpzdG9yZV9yZWdpc3RlcnMgKHN0cnVjdA0KPiByZWdjYWNoZSAqcmVnY2FjaGUs IGludCByZWdubykNCj4gIAl7DQo+ICAJICBpbnQgbjsNCj4gDQo+IC0JICAvKiBMZXQgdXNlciBj aG9vc2UgaWYgaGUgd2FudHMgdG8gd3JpdGUgcmVnaXN0ZXIgb3Igbm90LiAgKi8NCj4gKwkgIC8q IExldCB1c2VyIGNob29zZSBpZiB0aGV5IHdhbnQgdG8gd3JpdGUgcmVnaXN0ZXIgb3Igbm90LiAg Ki8NCj4gIAkgIGlmIChyZWdubyA8IDApDQo+ICAJICAgIG4gPQ0KPiAgCSAgICAgIHF1ZXJ5IChf KCJCZWNhdXNlIEdEQiBpcyBpbiByZXBsYXkgbW9kZSwgY2hhbmdpbmcgdGhlICINCj4gQEAgLTE2 NDIsNyArMTUyNyw3IEBAIHJlY29yZF9mdWxsX3RhcmdldDo6c3RvcmVfcmVnaXN0ZXJzIChzdHJ1 Y3QNCj4gcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pDQo+ICAJICAgIH0NCj4gDQo+ICAJ ICAvKiBEZXN0cm95IHRoZSByZWNvcmQgZnJvbSBoZXJlIGZvcndhcmQuICAqLw0KPiAtCSAgcmVj b3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAocmVjb3JkX2Z1bGxfbGlzdCk7DQo+ICsJ ICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2VfZm9sbG93aW5nIChyZWNvcmRfZnVsbF9uZXh0X2lu c24pOw0KPiAgCX0NCj4gDQo+ICAgICAgICByZWNvcmRfZnVsbF9yZWdpc3RlcnNfY2hhbmdlIChy ZWdjYWNoZSwgcmVnbm8pOw0KPiBAQCAtMTY3NSwzNiArMTU2MCwyNCBAQCByZWNvcmRfZnVsbF90 YXJnZXQ6OnhmZXJfcGFydGlhbCAoZW51bQ0KPiB0YXJnZXRfb2JqZWN0IG9iamVjdCwNCj4gIAkg ICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIGNhbmNlbGVkIHRoZSBvcGVyYXRpb24uIikpOw0K PiANCj4gIAkgIC8qIERlc3Ryb3kgdGhlIHJlY29yZCBmcm9tIGhlcmUgZm9yd2FyZC4gICovDQo+ IC0JICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2VfZm9sbG93aW5nIChyZWNvcmRfZnVsbF9saXN0 KTsNCj4gKwkgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcgKHJlY29yZF9mdWxs X25leHRfaW5zbik7DQo+ICAJfQ0KPiANCj4gICAgICAgIC8qIENoZWNrIHJlY29yZF9mdWxsX2lu c25fbnVtICovDQo+ICAgICAgICByZWNvcmRfZnVsbF9jaGVja19pbnNuX251bSAoKTsNCj4gDQo+ ICAgICAgICAvKiBSZWNvcmQgcmVnaXN0ZXJzIGNoYW5nZSB0byBsaXN0IGFzIGFuIGluc3RydWN0 aW9uLiAgKi8NCj4gLSAgICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsNCj4g LSAgICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsID0gTlVMTDsNCj4gKyAgICAgIHJlY29y ZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+ICAgICAgICBpZiAocmVjb3JkX2Z1bGxfYXJj aF9saXN0X2FkZF9tZW0gKG9mZnNldCwgbGVuKSkNCj4gIAl7DQo+IC0JICByZWNvcmRfZnVsbF9s aXN0X3JlbGVhc2UgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsKTsNCj4gKwkgIHJlY29yZF9m dWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+ICAJICBpZiAocmVjb3JkX2RlYnVnKQ0KPiAgCSAg ICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiAgCQkJIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQg dG8gcmVjb3JkICINCj4gIAkJCSJleGVjdXRpb24gbG9nLiIpOw0KPiAgCSAgcmV0dXJuIFRBUkdF VF9YRkVSX0VfSU87DQo+ICAJfQ0KPiAtICAgICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9h ZGRfZW5kICgpKQ0KPiAtCXsNCj4gLQkgIHJlY29yZF9mdWxsX2xpc3RfcmVsZWFzZSAocmVjb3Jk X2Z1bGxfYXJjaF9saXN0X3RhaWwpOw0KPiAtCSAgaWYgKHJlY29yZF9kZWJ1ZykNCj4gLQkgICAg Z2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywNCj4gLQkJCSJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRv IHJlY29yZCAiDQo+IC0JCQkiZXhlY3V0aW9uIGxvZy4iKTsNCj4gLQkgIHJldHVybiBUQVJHRVRf WEZFUl9FX0lPOw0KPiAtCX0NCj4gLSAgICAgIHJlY29yZF9mdWxsX2xpc3QtPm5leHQgPSByZWNv cmRfZnVsbF9hcmNoX2xpc3RfaGVhZDsNCj4gLSAgICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF9o ZWFkLT5wcmV2ID0gcmVjb3JkX2Z1bGxfbGlzdDsNCj4gLSAgICAgIHJlY29yZF9mdWxsX2xpc3Qg PSByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbDsNCj4gKyAgICAgIHJlY29yZF9mdWxsX3NhdmVf aW5zdHJ1Y3Rpb24gKCk7DQo+IA0KPiAgICAgICAgaWYgKHJlY29yZF9mdWxsX2luc25fbnVtID09 IHJlY29yZF9mdWxsX2luc25fbWF4X251bSkNCj4gIAlyZWNvcmRfZnVsbF9saXN0X3JlbGVhc2Vf Zmlyc3QgKCk7DQo+IEBAIC0xODY1LDkgKzE3MzgsMTEgQEAgcmVjb3JkX2Z1bGxfYmFzZV90YXJn ZXQ6OmdldF9ib29rbWFyayAoY29uc3QNCj4gY2hhciAqYXJncywgaW50IGZyb21fdHR5KQ0KPiAg ew0KPiAgICBjaGFyICpyZXQgPSBOVUxMOw0KPiANCj4gKyAgaWYgKHJlY29yZF9mdWxsX2xpc3Qu ZW1wdHkgKCkpDQo+ICsgICAgcmV0dXJuIChnZGJfYnl0ZSAqKSByZXQ7DQo+ICsNCj4gICAgLyog UmV0dXJuIHN0cmluZ2lmaWVkIGZvcm0gb2YgaW5zdHJ1Y3Rpb24gY291bnQuICAqLw0KPiAtICBp ZiAocmVjb3JkX2Z1bGxfbGlzdCAmJiByZWNvcmRfZnVsbF9saXN0LT50eXBlID09IHJlY29yZF9m dWxsX2VuZCkNCj4gLSAgICByZXQgPSB4c3RyZHVwIChwdWxvbmdlc3QgKHJlY29yZF9mdWxsX2xp c3QtPnUuZW5kLmluc25fbnVtKSk7DQo+ICsgIHJldCA9IHhzdHJkdXAgKHB1bG9uZ2VzdCAocmVj b3JkX2Z1bGxfbGlzdFtyZWNvcmRfZnVsbF9uZXh0X2luc25dLmluc25fbnVtKSk7DQo+IA0KPiAg ICBpZiAocmVjb3JkX2RlYnVnKQ0KPiAgICAgIHsNCj4gQEAgLTE5MjMsMzAgKzE3OTgsMjIgQEAg cmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OnJlY29yZF9tZXRob2QgKHB0aWRfdA0KPiBwdGlkKQ0K PiAgdm9pZA0KPiAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OmluZm9fcmVjb3JkICgpDQo+ICB7 DQo+IC0gIHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeSAqcDsNCj4gLQ0KPiAgICBpZiAoUkVDT1JE X0ZVTExfSVNfUkVQTEFZKQ0KPiAgICAgIGdkYl9wcmludGYgKF8oIlJlcGxheSBtb2RlOlxuIikp Ow0KPiAgICBlbHNlDQo+ICAgICAgZ2RiX3ByaW50ZiAoXygiUmVjb3JkIG1vZGU6XG4iKSk7DQo+ IA0KPiAtICAvKiBGaW5kIGVudHJ5IGZvciBmaXJzdCBhY3R1YWwgaW5zdHJ1Y3Rpb24gaW4gdGhl IGxvZy4gICovDQo+IC0gIGZvciAocCA9IHJlY29yZF9mdWxsX2ZpcnN0Lm5leHQ7DQo+IC0gICAg ICAgcCAhPSBOVUxMICYmIHAtPnR5cGUgIT0gcmVjb3JkX2Z1bGxfZW5kOw0KPiAtICAgICAgIHAg PSBwLT5uZXh0KQ0KPiAtICAgIDsNCj4gLQ0KPiAgICAvKiBEbyB3ZSBoYXZlIGEgbG9nIGF0IGFs bD8gICovDQo+IC0gIGlmIChwICE9IE5VTEwgJiYgcC0+dHlwZSA9PSByZWNvcmRfZnVsbF9lbmQp DQo+ICsgIGlmICghcmVjb3JkX2Z1bGxfbGlzdC5lbXB0eSAoKSkNCj4gICAgICB7DQo+ICAgICAg ICAvKiBEaXNwbGF5IGluc3RydWN0aW9uIG51bWJlciBmb3IgZmlyc3QgaW5zdHJ1Y3Rpb24gaW4g dGhlIGxvZy4gICovDQo+IC0gICAgICBnZGJfcHJpbnRmIChfKCJMb3dlc3QgcmVjb3JkZWQgaW5z dHJ1Y3Rpb24gbnVtYmVyIGlzICVzLlxuIiksDQo+IC0JCSAgcHVsb25nZXN0IChwLT51LmVuZC5p bnNuX251bSkpOw0KPiArICAgICAgZ2RiX3ByaW50ZiAoXygiTG93ZXN0IHJlY29yZGVkIGluc3Ry dWN0aW9uIG51bWJlciBpcyAldS5cbiIpLA0KPiArCQkgIHJlY29yZF9mdWxsX2xpc3RbMF0uaW5z bl9udW0pOw0KPiANCj4gICAgICAgIC8qIElmIGluIHJlcGxheSBtb2RlLCBkaXNwbGF5IHdoZXJl IHdlIGFyZSBpbiB0aGUgbG9nLiAgKi8NCj4gICAgICAgIGlmIChSRUNPUkRfRlVMTF9JU19SRVBM QVkpDQo+IC0JZ2RiX3ByaW50ZiAoXygiQ3VycmVudCBpbnN0cnVjdGlvbiBudW1iZXIgaXMgJXMu XG4iKSwNCj4gLQkJICAgIHB1bG9uZ2VzdCAocmVjb3JkX2Z1bGxfbGlzdC0+dS5lbmQuaW5zbl9u dW0pKTsNCj4gKwlnZGJfcHJpbnRmIChfKCJDdXJyZW50IGluc3RydWN0aW9uIG51bWJlciBpcyAl dS5cbiIpLA0KPiArCQkgICAgcmVjb3JkX2Z1bGxfbGlzdFtyZWNvcmRfZnVsbF9uZXh0X2luc25d Lmluc25fbnVtKTsNCj4gDQo+ICAgICAgICAvKiBEaXNwbGF5IGluc3RydWN0aW9uIG51bWJlciBm b3IgbGFzdCBpbnN0cnVjdGlvbiBpbiB0aGUgbG9nLiAgKi8NCj4gICAgICAgIGdkYl9wcmludGYg KF8oIkhpZ2hlc3QgcmVjb3JkZWQgaW5zdHJ1Y3Rpb24gbnVtYmVyIGlzICVzLlxuIiksDQo+IEBA IC0xOTc1LDcgKzE4NDIsNyBAQCByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6c3VwcG9ydHNfZGVs ZXRlX3JlY29yZCAoKQ0KPiAgdm9pZA0KPiAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6OmRlbGV0 ZV9yZWNvcmQgKCkNCj4gIHsNCj4gLSAgcmVjb3JkX2Z1bGxfbGlzdF9yZWxlYXNlX2ZvbGxvd2lu ZyAocmVjb3JkX2Z1bGxfbGlzdCk7DQo+ICsgIHJlY29yZF9mdWxsX3Jlc2V0X2hpc3RvcnkgKCk7 DQo+ICB9DQo+IA0KPiAgLyogVGhlICJyZWNvcmRfaXNfcmVwbGF5aW5nIiB0YXJnZXQgbWV0aG9k LiAgKi8NCj4gQEAgLTIwMDEsMjMgKzE4NjgsMjMgQEAgcmVjb3JkX2Z1bGxfYmFzZV90YXJnZXQ6 OnJlY29yZF93aWxsX3JlcGxheQ0KPiAocHRpZF90IHB0aWQsIGludCBkaXIpDQo+ICAvKiBHbyB0 byBhIHNwZWNpZmljIGVudHJ5LiAgKi8NCj4gDQo+ICBzdGF0aWMgdm9pZA0KPiAtcmVjb3JkX2Z1 bGxfZ290b19lbnRyeSAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpwKQ0KPiArcmVjb3JkX2Z1 bGxfZ290b19lbnRyeSAoc2l6ZV90IHRhcmdldF9pbnNuKQ0KPiAgew0KPiAtICBpZiAocCA9PSBO VUxMKQ0KPiArICBpZiAodGFyZ2V0X2luc24gPj0gcmVjb3JkX2Z1bGxfbGlzdC5zaXplICgpKQ0K PiAgICAgIGVycm9yIChfKCJUYXJnZXQgaW5zbiBub3QgZm91bmQuIikpOw0KPiAtICBlbHNlIGlm IChwID09IHJlY29yZF9mdWxsX2xpc3QpDQo+ICsgIGVsc2UgaWYgKHRhcmdldF9pbnNuID09IHJl Y29yZF9mdWxsX25leHRfaW5zbikNCj4gICAgICBlcnJvciAoXygiQWxyZWFkeSBhdCB0YXJnZXQg aW5zbi4iKSk7DQo+IC0gIGVsc2UgaWYgKHAtPnUuZW5kLmluc25fbnVtID4gcmVjb3JkX2Z1bGxf bGlzdC0+dS5lbmQuaW5zbl9udW0pDQo+ICsgIGVsc2UgaWYgKHRhcmdldF9pbnNuID4gcmVjb3Jk X2Z1bGxfbmV4dF9pbnNuKQ0KPiAgICAgIHsNCj4gICAgICAgIGdkYl9wcmludGYgKF8oIkdvIGZv cndhcmQgdG8gaW5zbiBudW1iZXIgJXNcbiIpLA0KPiAtCQkgIHB1bG9uZ2VzdCAocC0+dS5lbmQu aW5zbl9udW0pKTsNCj4gLSAgICAgIHJlY29yZF9mdWxsX2dvdG9faW5zbiAocCwgRVhFQ19GT1JX QVJEKTsNCj4gKwkJICBwdWxvbmdlc3QgKHJlY29yZF9mdWxsX2xpc3RbdGFyZ2V0X2luc25dLmlu c25fbnVtKSk7DQo+ICsgICAgICByZWNvcmRfZnVsbF9nb3RvX2luc24gKHRhcmdldF9pbnNuLCBF WEVDX0ZPUldBUkQpOw0KPiAgICAgIH0NCj4gICAgZWxzZQ0KPiAgICAgIHsNCj4gICAgICAgIGdk Yl9wcmludGYgKF8oIkdvIGJhY2t3YXJkIHRvIGluc24gbnVtYmVyICVzXG4iKSwNCj4gLQkJICBw dWxvbmdlc3QgKHAtPnUuZW5kLmluc25fbnVtKSk7DQo+IC0gICAgICByZWNvcmRfZnVsbF9nb3Rv X2luc24gKHAsIEVYRUNfUkVWRVJTRSk7DQo+ICsJCSAgcHVsb25nZXN0ICh0YXJnZXRfaW5zbikp Ow0KPiArICAgICAgcmVjb3JkX2Z1bGxfZ290b19pbnNuICh0YXJnZXRfaW5zbiwgRVhFQ19SRVZF UlNFKTsNCj4gICAgICB9DQo+IA0KPiAgICByZWdpc3RlcnNfY2hhbmdlZCAoKTsNCj4gQEAgLTIw MzMsMTMgKzE5MDAsNyBAQCByZWNvcmRfZnVsbF9nb3RvX2VudHJ5IChzdHJ1Y3QgcmVjb3JkX2Z1 bGxfZW50cnkNCj4gKnApDQo+ICB2b2lkDQo+ICByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6Z290 b19yZWNvcmRfYmVnaW4gKCkNCj4gIHsNCj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpw ID0gTlVMTDsNCj4gLQ0KPiAtICBmb3IgKHAgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7IHAgIT0gTlVM TDsgcCA9IHAtPm5leHQpDQo+IC0gICAgaWYgKHAtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kKQ0K PiAtICAgICAgYnJlYWs7DQo+IC0NCj4gLSAgcmVjb3JkX2Z1bGxfZ290b19lbnRyeSAocCk7DQo+ ICsgIHJlY29yZF9mdWxsX2dvdG9fZW50cnkgKDApOw0KPiAgfQ0KPiANCj4gIC8qIFRoZSAiZ290 b19yZWNvcmRfZW5kIiB0YXJnZXQgbWV0aG9kLiAgKi8NCj4gQEAgLTIwNDcsMTUgKzE5MDgsNyBA QCByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6Z290b19yZWNvcmRfYmVnaW4gKCkNCj4gIHZvaWQN Cj4gIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0Ojpnb3RvX3JlY29yZF9lbmQgKCkNCj4gIHsNCj4g LSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpwID0gTlVMTDsNCj4gLQ0KPiAtICBmb3IgKHAg PSByZWNvcmRfZnVsbF9saXN0OyBwLT5uZXh0ICE9IE5VTEw7IHAgPSBwLT5uZXh0KQ0KPiAtICAg IDsNCj4gLSAgZm9yICg7IHAhPSBOVUxMOyBwID0gcC0+cHJldikNCj4gLSAgICBpZiAocC0+dHlw ZSA9PSByZWNvcmRfZnVsbF9lbmQpDQo+IC0gICAgICBicmVhazsNCj4gLQ0KPiAtICByZWNvcmRf ZnVsbF9nb3RvX2VudHJ5IChwKTsNCj4gKyAgcmVjb3JkX2Z1bGxfZ290b19lbnRyeSAocmVjb3Jk X2Z1bGxfbGlzdC5zaXplICgpIC0gMSk7DQo+ICB9DQo+IA0KPiAgLyogVGhlICJnb3RvX3JlY29y ZCIgdGFyZ2V0IG1ldGhvZC4gICovDQo+IEBAIC0yMDYzLDEzICsxOTE2LDcgQEAgcmVjb3JkX2Z1 bGxfYmFzZV90YXJnZXQ6OmdvdG9fcmVjb3JkX2VuZCAoKQ0KPiAgdm9pZA0KPiAgcmVjb3JkX2Z1 bGxfYmFzZV90YXJnZXQ6OmdvdG9fcmVjb3JkIChVTE9OR0VTVCB0YXJnZXRfaW5zbikNCj4gIHsN Cj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpwID0gTlVMTDsNCj4gLQ0KPiAtICBmb3Ig KHAgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpDQo+IC0gICAg aWYgKHAtPnR5cGUgPT0gcmVjb3JkX2Z1bGxfZW5kICYmIHAtPnUuZW5kLmluc25fbnVtID09IHRh cmdldF9pbnNuKQ0KPiAtICAgICAgYnJlYWs7DQo+IC0NCj4gLSAgcmVjb3JkX2Z1bGxfZ290b19l bnRyeSAocCk7DQo+ICsgIHJlY29yZF9mdWxsX2dvdG9fZW50cnkgKHRhcmdldF9pbnNuKTsNCj4g IH0NCj4gDQo+ICAvKiBUaGUgInJlY29yZF9zdG9wX3JlcGxheWluZyIgdGFyZ2V0IG1ldGhvZC4g ICovDQo+IEBAIC0yMzQ1LDEzICsyMTkyLDEyIEBAIHN0YXRpYyB2b2lkDQo+ICByZWNvcmRfZnVs bF9yZXN0b3JlIChzdHJ1Y3QgYmZkICZjYmZkKQ0KPiAgew0KPiAgICB1aW50MzJfdCBtYWdpYzsN Cj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICpyZWM7DQo+ICAgIGFzZWN0aW9uICpvc2Vj Ow0KPiAgICB1aW50MzJfdCBvc2VjX3NpemU7DQo+ICAgIGludCBiZmRfb2Zmc2V0ID0gMDsNCj4g DQo+ICAgIC8qICJyZWNvcmRfZnVsbF9yZXN0b3JlIiBjYW4gb25seSBiZSBjYWxsZWQgd2hlbiBy ZWNvcmQgbGlzdCBpcyBlbXB0eS4gICovDQo+IC0gIGdkYl9hc3NlcnQgKHJlY29yZF9mdWxsX2Zp cnN0Lm5leHQgPT0gTlVMTCk7DQo+ICsgIGdkYl9hc3NlcnQgKHJlY29yZF9mdWxsX2xpc3QuZW1w dHkgKCkpOw0KPiANCj4gICAgaWYgKHJlY29yZF9kZWJ1ZykNCj4gICAgICBnZGJfcHJpbnRmIChn ZGJfc3RkbG9nLCAiUmVzdG9yaW5nIHJlY29yZGluZyBmcm9tIGNvcmUgZmlsZS5cbiIpOw0KPiBA QCAtMjM3OSwxMjQgKzIyMjUsMTE4IEBAIHJlY29yZF9mdWxsX3Jlc3RvcmUgKHN0cnVjdCBiZmQg JmNiZmQpDQo+ICAJCSJSRUNPUkRfRlVMTF9GSUxFX01BR0lDICgweCVzKVxuIiwNCj4gIAkJcGhl eF9ueiAobmV0b3JkZXIzMiAobWFnaWMpLCA0KSk7DQo+IA0KPiAtICAvKiBSZXN0b3JlIHRoZSBl bnRyaWVzIGluIHJlY2ZkIGludG8gcmVjb3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQgYW5kDQo+IC0g ICAgIHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsLiAgKi8NCj4gLSAgcmVjb3JkX2Z1bGxfYXJj aF9saXN0X2hlYWQgPSBOVUxMOw0KPiAtICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfdGFpbCA9IE5V TEw7DQo+ICAgIHJlY29yZF9mdWxsX2luc25fbnVtID0gMDsNCj4gDQo+ICAgIHRyeQ0KPiAgICAg IHsNCj4gICAgICAgIHJlZ2NhY2hlICpyZWdjYWNoZSA9IGdldF90aHJlYWRfcmVnY2FjaGUgKGlu ZmVyaW9yX3RocmVhZCAoKSk7DQo+IA0KPiAtICAgICAgd2hpbGUgKDEpDQo+ICsgICAgICB3aGls ZSAoYmZkX29mZnNldCA8IG9zZWNfc2l6ZSkNCj4gIAl7DQo+IC0JICB1aW50OF90IHJlY3R5cGU7 DQo+IC0JICB1aW50MzJfdCByZWdudW0sIGxlbiwgc2lnbmFsLCBjb3VudDsNCj4gKwkgIHVpbnQ4 X3QgcmVjdHlwZSwgc2lndmFsOw0KPiArCSAgdWludDMyX3QgcmVnbnVtLCBsZW4sIGVmZl9jb3Vu dCwgaW5zbl9udW07DQo+ICAJICB1aW50NjRfdCBhZGRyOw0KPiANCj4gLQkgIC8qIFdlIGFyZSBm aW5pc2hlZCB3aGVuIG9mZnNldCByZWFjaGVzIG9zZWNfc2l6ZS4gICovDQo+IC0JICBpZiAoYmZk X29mZnNldCA+PSBvc2VjX3NpemUpDQo+IC0JICAgIGJyZWFrOw0KPiAtCSAgYmZkY29yZV9yZWFk ICgmY2JmZCwgb3NlYywgJnJlY3R5cGUsIHNpemVvZiAocmVjdHlwZSksICZiZmRfb2Zmc2V0KTsN Cj4gKwkgIHJlY29yZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCk7DQo+ICsNCj4gKwkgIC8qIEZy c3QgcmVhZCB0aGUgZ2VuZXJpYyBpbmZvcm1hdGlvbiBmb3IgYW4gaW5zdHJ1Y3Rpb24uICAqLw0K PiArCSAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJnNpZ3ZhbCwgc2l6ZW9mICh1aW50OF90 KSwgJmJmZF9vZmZzZXQpOw0KPiArCSAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJmVmZl9j b3VudCwgc2l6ZW9mICh1aW50MzJfdCksDQo+ICsJCQkmYmZkX29mZnNldCk7DQo+ICsJICBiZmRj b3JlX3JlYWQgKCZjYmZkLCBvc2VjLCAmaW5zbl9udW0sIHNpemVvZiAodWludDMyX3QpLA0KPiAr CQkJJmJmZF9vZmZzZXQpOw0KPiArDQo+ICsJICByZWNvcmRfZnVsbF9pbmNvbXBsZXRlX2luc3Ry dWN0aW9uLmluc25fbnVtID0gbmV0b3JkZXIzMg0KPiAoaW5zbl9udW0pOw0KPiArCSAgaWYgKHNp Z3ZhbCAhPSBHREJfU0lHTkFMXzApDQo+ICsJICAgIHJlY29yZF9mdWxsX2luY29tcGxldGVfaW5z dHJ1Y3Rpb24uc2lndmFsID0gKGdkYl9zaWduYWwpIHNpZ3ZhbDsNCj4gKwkgIGVmZl9jb3VudCA9 IG5ldG9yZGVyMzIgKGVmZl9jb3VudCk7DQo+IA0KPiAtCSAgc3dpdGNoIChyZWN0eXBlKQ0KPiAr CSAgLyogVGhpcyBkZWFscyB3aXRoIGFsbCB0aGUgc2lkZSBlZmZlY3RzLiAgKi8NCj4gKwkgIHdo aWxlIChlZmZfY291bnQgPiAwKQ0KPiAgCSAgICB7DQo+IC0JICAgIGNhc2UgcmVjb3JkX2Z1bGxf cmVnOiAvKiByZWcgKi8NCj4gLQkgICAgICAvKiBHZXQgcmVnaXN0ZXIgbnVtYmVyIHRvIHJlZ251 bS4gICovDQo+IC0JICAgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJnJlZ251bSwgc2l6 ZW9mIChyZWdudW0pLA0KPiAtCQkJICAgICZiZmRfb2Zmc2V0KTsNCj4gLQkgICAgICByZWdudW0g PSBuZXRvcmRlcjMyIChyZWdudW0pOw0KPiArCSAgICAgIGVmZl9jb3VudC0tOw0KPiANCj4gLQkg ICAgICByZWMgPSByZWNvcmRfZnVsbF9yZWdfYWxsb2MgKHJlZ2NhY2hlLCByZWdudW0pOw0KPiAr CSAgICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsICZyZWN0eXBlLCBzaXplb2YgKHJlY3R5 cGUpLA0KPiAmYmZkX29mZnNldCk7DQo+IA0KPiAtCSAgICAgIC8qIEdldCB2YWwuICAqLw0KPiAt CSAgICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsIHJlY29yZF9mdWxsX2dldF9sb2MgKHJl YyksDQo+IC0JCQkgICAgcmVjLT51LnJlZy5sZW4sICZiZmRfb2Zmc2V0KTsNCj4gKwkgICAgICBz d2l0Y2ggKHJlY3R5cGUpDQo+ICsJCXsNCj4gKwkJY2FzZSByZWNvcmRfZnVsbF9yZWc6IC8qIHJl ZyAqLw0KPiArCQkgIHsNCj4gKwkJICAgIC8qIEdldCByZWdpc3RlciBudW1iZXIgdG8gcmVnbnVt LiAgKi8NCj4gKwkJICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsICZyZWdudW0sIHNpemVv ZiAocmVnbnVtKSwNCj4gKwkJCQkgICZiZmRfb2Zmc2V0KTsNCj4gKwkJICAgIHJlZ251bSA9IG5l dG9yZGVyMzIgKHJlZ251bSk7DQo+IA0KPiAtCSAgICAgIGlmIChyZWNvcmRfZGVidWcpDQo+IC0J CWdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0JCQkgICAgIiAgUmVhZGluZyByZWdpc3RlciAl ZCAoMSAiDQo+IC0JCQkgICAgInBsdXMgJWx1IHBsdXMgJWQgYnl0ZXMpXG4iLA0KPiAtCQkJICAg IHJlYy0+dS5yZWcubnVtLA0KPiAtCQkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKHJlZ251 bSksDQo+IC0JCQkgICAgcmVjLT51LnJlZy5sZW4pOw0KPiAtCSAgICAgIGJyZWFrOw0KPiArCQkg ICAgcmVjb3JkX2Z1bGxfZW50cnkgcmVjOw0KPiANCj4gLQkgICAgY2FzZSByZWNvcmRfZnVsbF9t ZW06IC8qIG1lbSAqLw0KPiAtCSAgICAgIC8qIEdldCBsZW4uICAqLw0KPiAtCSAgICAgIGJmZGNv cmVfcmVhZCAoJmNiZmQsIG9zZWMsICZsZW4sIHNpemVvZiAobGVuKSwgJmJmZF9vZmZzZXQpOw0K PiAtCSAgICAgIGxlbiA9IG5ldG9yZGVyMzIgKGxlbik7DQo+ICsJCSAgICByZWMgPSByZWNvcmRf ZnVsbF9yZWdfaW5pdCAocmVnY2FjaGUsIHJlZ251bSk7DQo+IA0KPiAtCSAgICAgIC8qIEdldCBh ZGRyLiAgKi8NCj4gLQkgICAgICBiZmRjb3JlX3JlYWQgKCZjYmZkLCBvc2VjLCAmYWRkciwgc2l6 ZW9mIChhZGRyKSwgJmJmZF9vZmZzZXQpOw0KPiAtCSAgICAgIGFkZHIgPSBuZXRvcmRlcjY0IChh ZGRyKTsNCj4gKwkJICAgIC8qIEdldCB2YWwuICAqLw0KPiArCQkgICAgYmZkY29yZV9yZWFkICgm Y2JmZCwgb3NlYywgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAoJnJlYyksDQo+ICsJCQkJICByZWMudS5y ZWcubGVuLCAmYmZkX29mZnNldCk7DQo+IA0KPiAtCSAgICAgIHJlYyA9IHJlY29yZF9mdWxsX21l bV9hbGxvYyAoYWRkciwgbGVuKTsNCj4gKwkJICAgIGlmIChyZWNvcmRfZGVidWcpDQo+ICsJCSAg ICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ICsJCQkJICAiICBSZWFkaW5nIHJlZ2lzdGVy ICVkICgxICINCj4gKwkJCQkgICJwbHVzICVsdSBwbHVzICVkIGJ5dGVzKVxuIiwNCj4gKwkJCQkg IHJlYy51LnJlZy5udW0sDQo+ICsJCQkJICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChyZWdudW0p LA0KPiArCQkJCSAgcmVjLnUucmVnLmxlbik7DQo+ICsNCj4gKwkJICAgIHJlY29yZF9mdWxsX2Fy Y2hfbGlzdF9hZGQgKHJlYyk7DQo+ICsJCSAgICBicmVhazsNCj4gKwkJICB9DQo+IA0KPiAtCSAg ICAgIC8qIEdldCB2YWwuICAqLw0KPiAtCSAgICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMs IHJlY29yZF9mdWxsX2dldF9sb2MgKHJlYyksDQo+IC0JCQkgICAgcmVjLT51Lm1lbS5sZW4sICZi ZmRfb2Zmc2V0KTsNCj4gKwkJY2FzZSByZWNvcmRfZnVsbF9tZW06IC8qIG1lbSAqLw0KPiArCQkg IHsNCj4gKwkJICAvKiBHZXQgbGVuLiAgKi8NCj4gKwkJICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQs IG9zZWMsICZsZW4sIHNpemVvZiAobGVuKSwNCj4gKwkJCQkgICZiZmRfb2Zmc2V0KTsNCj4gKwkJ ICAgIGxlbiA9IG5ldG9yZGVyMzIgKGxlbik7DQo+IA0KPiAtCSAgICAgIGlmIChyZWNvcmRfZGVi dWcpDQo+IC0JCWdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0JCQkgICAgIiAgUmVhZGluZyBt ZW1vcnkgJXMgKDEgcGx1cyAiDQo+IC0JCQkgICAgIiVsdSBwbHVzICVsdSBwbHVzICVkIGJ5dGVz KVxuIiwNCj4gLQkJCSAgICBwYWRkcmVzcyAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwNCj4gLQkJCQkg ICAgICByZWMtPnUubWVtLmFkZHIpLA0KPiAtCQkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2Yg KGFkZHIpLA0KPiAtCQkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKGxlbiksDQo+IC0JCQkg ICAgcmVjLT51Lm1lbS5sZW4pOw0KPiAtCSAgICAgIGJyZWFrOw0KPiArCQkgICAgLyogR2V0IGFk ZHIuICAqLw0KPiArCQkgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJmFkZHIsIHNpemVv ZiAoYWRkciksDQo+ICsJCQkJICAmYmZkX29mZnNldCk7DQo+ICsJCSAgICBhZGRyID0gbmV0b3Jk ZXI2NCAoYWRkcik7DQo+IA0KPiAtCSAgICBjYXNlIHJlY29yZF9mdWxsX2VuZDogLyogZW5kICov DQo+IC0JICAgICAgcmVjID0gcmVjb3JkX2Z1bGxfZW5kX2FsbG9jICgpOw0KPiAtCSAgICAgIHJl Y29yZF9mdWxsX2luc25fbnVtICsrOw0KPiAtDQo+IC0JICAgICAgLyogR2V0IHNpZ25hbCB2YWx1 ZS4gICovDQo+IC0JICAgICAgYmZkY29yZV9yZWFkICgmY2JmZCwgb3NlYywgJnNpZ25hbCwgc2l6 ZW9mIChzaWduYWwpLA0KPiAtCQkJICAgICZiZmRfb2Zmc2V0KTsNCj4gLQkgICAgICBzaWduYWwg PSBuZXRvcmRlcjMyIChzaWduYWwpOw0KPiAtCSAgICAgIHJlYy0+dS5lbmQuc2lndmFsID0gKGVu dW0gZ2RiX3NpZ25hbCkgc2lnbmFsOw0KPiAtDQo+IC0JICAgICAgLyogR2V0IGluc24gY291bnQu ICAqLw0KPiAtCSAgICAgIGJmZGNvcmVfcmVhZCAoJmNiZmQsIG9zZWMsICZjb3VudCwgc2l6ZW9m IChjb3VudCksICZiZmRfb2Zmc2V0KTsNCj4gLQkgICAgICBjb3VudCA9IG5ldG9yZGVyMzIgKGNv dW50KTsNCj4gLQkgICAgICByZWMtPnUuZW5kLmluc25fbnVtID0gY291bnQ7DQo+IC0JICAgICAg cmVjb3JkX2Z1bGxfaW5zbl9jb3VudCA9IGNvdW50ICsgMTsNCj4gLQkgICAgICBpZiAocmVjb3Jk X2RlYnVnKQ0KPiAtCQlnZGJfcHJpbnRmIChnZGJfc3RkbG9nLA0KPiAtCQkJICAgICIgIFJlYWRp bmcgcmVjb3JkX2Z1bGxfZW5kICgxICsgIg0KPiAtCQkJICAgICIlbHUgKyAlbHUgYnl0ZXMpLCBv ZmZzZXQgPT0gJXNcbiIsDQo+IC0JCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoc2lnbmFs KSwNCj4gLQkJCSAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChjb3VudCksDQo+IC0JCQkgICAg cGFkZHJlc3MgKGdldF9jdXJyZW50X2FyY2ggKCksDQo+IC0JCQkJICAgICAgYmZkX29mZnNldCkp Ow0KPiAtCSAgICAgIGJyZWFrOw0KPiArCQkgICAgcmVjb3JkX2Z1bGxfZW50cnkgcmVjOw0KPiAr CQkgICAgcmVjID0gcmVjb3JkX2Z1bGxfbWVtX2luaXQgKGFkZHIsIGxlbik7DQo+IA0KPiAtCSAg ICBkZWZhdWx0Og0KPiAtCSAgICAgIGVycm9yIChfKCJCYWQgZW50cnkgdHlwZSBpbiBjb3JlIGZp bGUgJXBzLiIpLA0KPiAtCQkgICAgIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHls ZSAoKSwNCj4gLQkJCQkgICAgYmZkX2dldF9maWxlbmFtZSAoJmNiZmQpKSk7DQo+IC0JICAgICAg YnJlYWs7DQo+ICsJCSAgICAvKiBHZXQgdmFsLiAgKi8NCj4gKwkJICAgIGJmZGNvcmVfcmVhZCAo JmNiZmQsIG9zZWMsIHJlY29yZF9mdWxsX2dldF9sb2MgKCZyZWMpLA0KPiArCQkJCSAgbGVuLCAm YmZkX29mZnNldCk7DQo+ICsNCj4gKwkJICAgIGlmIChyZWNvcmRfZGVidWcpDQo+ICsJCSAgICAg IGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+ICsJCQkJICAiICBSZWFkaW5nIG1lbW9yeSAlcyAo MSBwbHVzICINCj4gKwkJCQkgICIlbHUgcGx1cyAlbHUgcGx1cyAlZCBieXRlcylcbiIsDQo+ICsJ CQkJICBwYWRkcmVzcyAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwNCj4gKwkJCQkJICAgIHJlYy51Lm1l bS5hZGRyKSwNCj4gKwkJCQkgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKGFkZHIpLA0KPiArCQkJ CSAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAobGVuKSwNCj4gKwkJCQkgIHJlYy51Lm1lbS5sZW4p Ow0KPiArDQo+ICsJCSAgICByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkIChyZWMpOw0KPiArCQkg ICAgYnJlYWs7DQo+ICsJCSAgfQ0KPiArDQo+ICsJCWRlZmF1bHQ6DQo+ICsJCSAgZXJyb3IgKF8o IkJhZCBlbnRyeSB0eXBlIGluIGNvcmUgZmlsZSAlcHMuIiksDQo+ICsJCQkgc3R5bGVkX3N0cmlu ZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLA0KPiArCQkJCQliZmRfZ2V0X2ZpbGVuYW1lICgm Y2JmZCkpKTsNCj4gKwkJICBicmVhazsNCj4gKwkJfQ0KPiAgCSAgICB9DQo+IA0KPiAtCSAgLyog QWRkIHJlYyB0byByZWNvcmQgYXJjaCBsaXN0LiAgKi8NCj4gLQkgIHJlY29yZF9mdWxsX2FyY2hf bGlzdF9hZGQgKHJlYyk7DQo+ICsJICByZWNvcmRfZnVsbF9zYXZlX2luc3RydWN0aW9uICgpOw0K PiAgCX0NCj4gICAgICB9DQo+ICAgIGNhdGNoIChjb25zdCBnZGJfZXhjZXB0aW9uICZleCkNCj4g ICAgICB7DQo+IC0gICAgICByZWNvcmRfZnVsbF9saXN0X3JlbGVhc2UgKHJlY29yZF9mdWxsX2Fy Y2hfbGlzdF90YWlsKTsNCj4gKyAgICAgIHJlY29yZF9mdWxsX3Jlc2V0X2luY29tcGxldGUgKCk7 DQo+ICAgICAgICB0aHJvdzsNCj4gICAgICB9DQo+IA0KPiAtICAvKiBBZGQgcmVjb3JkX2Z1bGxf YXJjaF9saXN0X2hlYWQgdG8gdGhlIGVuZCBvZiByZWNvcmQgbGlzdC4gICovDQo+IC0gIHJlY29y ZF9mdWxsX2ZpcnN0Lm5leHQgPSByZWNvcmRfZnVsbF9hcmNoX2xpc3RfaGVhZDsNCj4gLSAgcmVj b3JkX2Z1bGxfYXJjaF9saXN0X2hlYWQtPnByZXYgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7DQo+IC0g IHJlY29yZF9mdWxsX2FyY2hfbGlzdF90YWlsLT5uZXh0ID0gTlVMTDsNCj4gLSAgcmVjb3JkX2Z1 bGxfbGlzdCA9ICZyZWNvcmRfZnVsbF9maXJzdDsNCj4gLQ0KPiAgICAvKiBVcGRhdGUgcmVjb3Jk X2Z1bGxfaW5zbl9tYXhfbnVtLiAgKi8NCj4gICAgaWYgKHJlY29yZF9mdWxsX2luc25fbnVtID4g cmVjb3JkX2Z1bGxfaW5zbl9tYXhfbnVtKQ0KPiAgICAgIHsNCj4gQEAgLTI1MDUsNiArMjM0NSwx MCBAQCByZWNvcmRfZnVsbF9yZXN0b3JlIChzdHJ1Y3QgYmZkICZjYmZkKQ0KPiAgCSAgICAgICBy ZWNvcmRfZnVsbF9pbnNuX21heF9udW0pOw0KPiAgICAgIH0NCj4gDQo+ICsgIC8qIFdoZW4gbG9h ZGluZyBhIHJlY29yZGluZywgd2UnbGwgYWx3YXlzIHN0YXJ0IGF0IHRoZSBvbGRlc3QgcG9zc2li bGUNCj4gKyAgICAgaW5zdHJ1Y3Rpb24sIG5vIG1hdHRlciB3aGVyZSB0aGUgb3JpZ2luYWwgcmVj b3JkaW5nIHdhcyBzdG9wcGVkLiAgKi8NCj4gKyAgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuID0gMDsN Cj4gKw0KPiAgICAvKiBTdWNjZWVkZWQuICAqLw0KPiAgICBnZGJfcHJpbnRmIChfKCJSZXN0b3Jl ZCByZWNvcmRzIGZyb20gY29yZSBmaWxlICVzLlxuIiksDQo+ICAJICAgICAgYmZkX2dldF9maWxl bmFtZSAoJmNiZmQpKTsNCj4gQEAgLTI1NDQsNyArMjM4OCw2IEBAIGNtZF9yZWNvcmRfZnVsbF9y ZXN0b3JlIChjb25zdCBjaGFyICphcmdzLCBpbnQNCj4gZnJvbV90dHkpDQo+ICB2b2lkDQo+ICBy ZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6c2F2ZV9yZWNvcmQgKGNvbnN0IGNoYXIgKnJlY2ZpbGVu YW1lKQ0KPiAgew0KPiAtICBzdHJ1Y3QgcmVjb3JkX2Z1bGxfZW50cnkgKmN1cl9yZWNvcmRfZnVs bF9saXN0Ow0KPiAgICB1aW50MzJfdCBtYWdpYzsNCj4gICAgc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2g7DQo+ICAgIGludCBzYXZlX3NpemUgPSAwOw0KPiBAQCAtMjU2Miw5ICsyNDA1LDYgQEAgcmVj b3JkX2Z1bGxfYmFzZV90YXJnZXQ6OnNhdmVfcmVjb3JkIChjb25zdCBjaGFyDQo+ICpyZWNmaWxl bmFtZSkNCj4gICAgLyogQXJyYW5nZSB0byByZW1vdmUgdGhlIG91dHB1dCBmaWxlIG9uIGZhaWx1 cmUuICAqLw0KPiAgICBnZGI6OnVubGlua2VyIHVubGlua19maWxlIChyZWNmaWxlbmFtZSk7DQo+ IA0KPiAtICAvKiBTYXZlIHRoZSBjdXJyZW50IHJlY29yZCBlbnRyeSB0byAiY3VyX3JlY29yZF9m dWxsX2xpc3QiLiAgKi8NCj4gLSAgY3VyX3JlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9s aXN0Ow0KPiAtDQo+ICAgIC8qIEdldCB0aGUgdmFsdWVzIG9mIHJlZ2NhY2hlIGFuZCBnZGJhcmNo LiAgKi8NCj4gICAgcmVnY2FjaGUgKnJlZ2NhY2hlID0gZ2V0X3RocmVhZF9yZWdjYWNoZSAoaW5m ZXJpb3JfdGhyZWFkICgpKTsNCj4gICAgZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOw0KPiBA QCAtMjU3NCwzNCArMjQxNCwyNyBAQCByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6c2F2ZV9yZWNv cmQgKGNvbnN0DQo+IGNoYXIgKnJlY2ZpbGVuYW1lKQ0KPiAgICAgID0gcmVjb3JkX2Z1bGxfZ2Ri X29wZXJhdGlvbl9kaXNhYmxlX3NldCAoKTsNCj4gDQo+ICAgIC8qIFJldmVyc2UgZXhlY3V0ZSB0 byB0aGUgYmVnaW4gb2YgcmVjb3JkIGxpc3QuICAqLw0KPiAtICB3aGlsZSAoMSkNCj4gLSAgICB7 DQo+IC0gICAgICAvKiBDaGVjayBmb3IgYmVnaW5uaW5nIGFuZCBlbmQgb2YgbG9nLiAgKi8NCj4g LSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0ID09ICZyZWNvcmRfZnVsbF9maXJzdCkNCj4gLQli cmVhazsNCj4gLQ0KPiAtICAgICAgcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChyZWdjYWNoZSwgZ2Ri YXJjaCwgcmVjb3JkX2Z1bGxfbGlzdCk7DQo+IC0NCj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9s aXN0LT5wcmV2KQ0KPiAtCXJlY29yZF9mdWxsX2xpc3QgPSByZWNvcmRfZnVsbF9saXN0LT5wcmV2 Ow0KPiAtICAgIH0NCj4gKyAgZm9yIChpbnQgaSA9IHJlY29yZF9mdWxsX25leHRfaW5zbiAtIDE7 IGkgPj0gMDsgaS0tKQ0KPiArICAgIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVnY2FjaGUsIGdk YmFyY2gsDQo+ICsJCQkgICByZWNvcmRfZnVsbF9saXN0W2ldKTsNCj4gDQo+ICAgIC8qIENvbXB1 dGUgdGhlIHNpemUgbmVlZGVkIGZvciB0aGUgZXh0cmEgYmZkIHNlY3Rpb24uICAqLw0KPiAgICBz YXZlX3NpemUgPSA0OwkvKiBtYWdpYyBjb29raWUgKi8NCj4gLSAgZm9yIChyZWNvcmRfZnVsbF9s aXN0ID0gcmVjb3JkX2Z1bGxfZmlyc3QubmV4dDsgcmVjb3JkX2Z1bGxfbGlzdDsNCj4gLSAgICAg ICByZWNvcmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlzdC0+bmV4dCkNCj4gLSAgICBzd2l0 Y2ggKHJlY29yZF9mdWxsX2xpc3QtPnR5cGUpDQo+IC0gICAgICB7DQo+IC0gICAgICBjYXNlIHJl Y29yZF9mdWxsX2VuZDoNCj4gLQlzYXZlX3NpemUgKz0gMSArIDQgKyA0Ow0KPiAtCWJyZWFrOw0K PiAtICAgICAgY2FzZSByZWNvcmRfZnVsbF9yZWc6DQo+IC0Jc2F2ZV9zaXplICs9IDEgKyA0ICsg cmVjb3JkX2Z1bGxfbGlzdC0+dS5yZWcubGVuOw0KPiAtCWJyZWFrOw0KPiAtICAgICAgY2FzZSBy ZWNvcmRfZnVsbF9tZW06DQo+IC0Jc2F2ZV9zaXplICs9IDEgKyA0ICsgOCArIHJlY29yZF9mdWxs X2xpc3QtPnUubWVtLmxlbjsNCj4gLQlicmVhazsNCj4gLSAgICAgIH0NCj4gKyAgZm9yIChpbnQg aSA9IHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAoKSAtIDE7IGkgPj0gMDsgaS0tKQ0KPiArICAgIHsN Cj4gKyAgICAgIC8qIE51bWJlciBvZiBlZmZlY3RzIG9mIGFuIGluc3RydWN0aW9uLiAgKi8NCj4g KyAgICAgIHNhdmVfc2l6ZSArPSBzaXplb2YgKHVpbnQzMl90KSArIHNpemVvZiAodWludDhfdCkg KyBzaXplb2YgKHVpbnQzMl90KTsNCj4gKyAgICAgIGZvciAoYXV0byAmZW50cnkgOiByZWNvcmRf ZnVsbF9saXN0W2ldLmVmZmVjdHMpDQo+ICsJc3dpdGNoIChlbnRyeS50eXBlKQ0KPiArCSAgew0K PiArCSAgY2FzZSByZWNvcmRfZnVsbF9yZWc6DQo+ICsJICAgIHNhdmVfc2l6ZSArPSAxICsgNCAr IGVudHJ5LnUucmVnLmxlbjsNCj4gKwkgICAgYnJlYWs7DQo+ICsJICBjYXNlIHJlY29yZF9mdWxs X21lbToNCj4gKwkgICAgc2F2ZV9zaXplICs9IDEgKyA0ICsgOCArIGVudHJ5LnUubWVtLmxlbjsN Cj4gKwkgICAgYnJlYWs7DQo+ICsJICB9DQo+ICsgICAgfQ0KPiANCj4gICAgLyogTWFrZSB0aGUg bmV3IGJmZCBzZWN0aW9uLiAgKi8NCj4gICAgb3NlYyA9IGJmZF9tYWtlX3NlY3Rpb25fYW55d2F5 X3dpdGhfZmxhZ3MgKG9iZmQuZ2V0ICgpLCAicHJlY29yZCIsDQo+IEBAIC0yNjMwLDM5ICsyNDYz LDU0IEBAIHJlY29yZF9mdWxsX2Jhc2VfdGFyZ2V0OjpzYXZlX3JlY29yZCAoY29uc3QNCj4gY2hh ciAqcmVjZmlsZW5hbWUpDQo+IA0KPiAgICAvKiBTYXZlIHRoZSBlbnRyaWVzIHRvIHJlY2ZkIGFu ZCBmb3J3YXJkIGV4ZWN1dGUgdG8gdGhlIGVuZCBvZg0KPiAgICAgICByZWNvcmQgbGlzdC4gICov DQo+IC0gIHJlY29yZF9mdWxsX2xpc3QgPSAmcmVjb3JkX2Z1bGxfZmlyc3Q7DQo+IC0gIHdoaWxl ICgxKQ0KPiArICBmb3IgKGludCBpID0gMDsgaSA8IHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAoKTsg aSsrKQ0KPiAgICAgIHsNCj4gLSAgICAgIC8qIFNhdmUgZW50cnkuICAqLw0KPiAtICAgICAgaWYg KHJlY29yZF9mdWxsX2xpc3QgIT0gJnJlY29yZF9mdWxsX2ZpcnN0KQ0KPiArICAgICAgdWludDMy X3QgZWZmX2NvdW50ID0gKHVpbnQzMl90KSByZWNvcmRfZnVsbF9saXN0W2ldLmVmZmVjdHMuc2l6 ZSAoKTsNCj4gKyAgICAgIHVpbnQzMl90IGluc25fbnVtID0gcmVjb3JkX2Z1bGxfbGlzdFtpXS5p bnNuX251bTsNCj4gKyAgICAgIHVpbnQ4X3Qgc2lndmFsID0gKHJlY29yZF9mdWxsX2xpc3RbaV0u c2lndmFsLmhhc192YWx1ZSAoKSkNCj4gKwkJCT8gcmVjb3JkX2Z1bGxfbGlzdFtpXS5zaWd2YWwu dmFsdWUgKCkNCj4gKwkJCTogR0RCX1NJR05BTF8wOw0KPiArDQo+ICsgICAgICAvKiBTaWduYWwu ICAqLw0KPiArICAgICAgYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZzaWd2YWws IHNpemVvZiAoc2lndmFsKSwgJmJmZF9vZmZzZXQpOw0KPiArICAgICAgLyogTnVtYmVyIG9mIGVm ZmVjdHMuICAqLw0KPiArICAgICAgZWZmX2NvdW50ID0gbmV0b3JkZXIzMiAoZWZmX2NvdW50KTsN Cj4gKyAgICAgIGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCAmZWZmX2NvdW50LCBz aXplb2YgKGVmZl9jb3VudCksDQo+ICsJCSAgICAgJmJmZF9vZmZzZXQpOw0KPiArICAgICAgLyog SW5zdHJ1Y3RpbyBudW1iZXIuICAqLw0KDQpOaXQ6IHRoZXJlIGlzIGFuIG4gbWlzc2luZy4NCg0K PiArICAgICAgYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZpbnNuX251bSwgc2l6 ZW9mIChpbnNuX251bSksDQo+ICsJCSAgICAgJmJmZF9vZmZzZXQpOw0KPiArDQo+ICsgICAgICBm b3IgKGF1dG8gJmVudHJ5IDogcmVjb3JkX2Z1bGxfbGlzdFtpXS5lZmZlY3RzKQ0KPiAgCXsNCj4g KwkgIC8qIFNhdmUgZW50cnkuICAqLw0KPiAgCSAgdWludDhfdCB0eXBlOw0KPiAtCSAgdWludDMy X3QgcmVnbnVtLCBsZW4sIHNpZ25hbCwgY291bnQ7DQo+ICsJICB1aW50MzJfdCByZWdudW0sIGxl bjsNCj4gIAkgIHVpbnQ2NF90IGFkZHI7DQo+IA0KPiAtCSAgdHlwZSA9IHJlY29yZF9mdWxsX2xp c3QtPnR5cGU7DQo+ICsJICB0eXBlID0gZW50cnkudHlwZTsNCj4gIAkgIGJmZGNvcmVfd3JpdGUg KG9iZmQuZ2V0ICgpLCBvc2VjLCAmdHlwZSwgc2l6ZW9mICh0eXBlKSwgJmJmZF9vZmZzZXQpOw0K PiANCj4gLQkgIHN3aXRjaCAocmVjb3JkX2Z1bGxfbGlzdC0+dHlwZSkNCj4gKwkgIHN3aXRjaCAo ZW50cnkudHlwZSkNCj4gIAkgICAgew0KPiAgCSAgICBjYXNlIHJlY29yZF9mdWxsX3JlZzogLyog cmVnICovDQo+ICAJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykNCj4gIAkJZ2RiX3ByaW50ZiAoZ2Ri X3N0ZGxvZywNCj4gIAkJCSAgICAiICBXcml0aW5nIHJlZ2lzdGVyICVkICgxICINCj4gIAkJCSAg ICAicGx1cyAlbHUgcGx1cyAlZCBieXRlcylcbiIsDQo+IC0JCQkgICAgcmVjb3JkX2Z1bGxfbGlz dC0+dS5yZWcubnVtLA0KPiArCQkJICAgIGVudHJ5LnUucmVnLm51bSwNCj4gIAkJCSAgICAodW5z aWduZWQgbG9uZykgc2l6ZW9mIChyZWdudW0pLA0KPiAtCQkJICAgIHJlY29yZF9mdWxsX2xpc3Qt PnUucmVnLmxlbik7DQo+ICsJCQkgICAgZW50cnkudS5yZWcubGVuKTsNCj4gDQo+ICAJICAgICAg LyogV3JpdGUgcmVnbnVtLiAgKi8NCj4gLQkgICAgICByZWdudW0gPSBuZXRvcmRlcjMyIChyZWNv cmRfZnVsbF9saXN0LT51LnJlZy5udW0pOw0KPiArCSAgICAgIHJlZ251bSA9IG5ldG9yZGVyMzIg KGVudHJ5LnUucmVnLm51bSk7DQo+ICAJICAgICAgYmZkY29yZV93cml0ZSAob2JmZC5nZXQgKCks IG9zZWMsICZyZWdudW0sDQo+ICAJCQkgICAgIHNpemVvZiAocmVnbnVtKSwgJmJmZF9vZmZzZXQp Ow0KPiANCj4gIAkgICAgICAvKiBXcml0ZSByZWd2YWwuICAqLw0KPiAgCSAgICAgIGJmZGNvcmVf d3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLA0KPiAtCQkJICAgICByZWNvcmRfZnVsbF9nZXRfbG9j IChyZWNvcmRfZnVsbF9saXN0KSwNCj4gLQkJCSAgICAgcmVjb3JkX2Z1bGxfbGlzdC0+dS5yZWcu bGVuLCAmYmZkX29mZnNldCk7DQo+ICsJCQkgICAgIHJlY29yZF9mdWxsX2dldF9sb2MgKCZlbnRy eSksDQo+ICsJCQkgICAgIGVudHJ5LnUucmVnLmxlbiwgJmJmZF9vZmZzZXQpOw0KPiAgCSAgICAg IGJyZWFrOw0KPiANCj4gIAkgICAgY2FzZSByZWNvcmRfZnVsbF9tZW06IC8qIG1lbSAqLw0KPiBA QCAtMjY3MSw2NyArMjUxOSwzMSBAQCByZWNvcmRfZnVsbF9iYXNlX3RhcmdldDo6c2F2ZV9yZWNv cmQgKGNvbnN0DQo+IGNoYXIgKnJlY2ZpbGVuYW1lKQ0KPiAgCQkJICAgICIgIFdyaXRpbmcgbWVt b3J5ICVzICgxIHBsdXMgIg0KPiAgCQkJICAgICIlbHUgcGx1cyAlbHUgcGx1cyAlZCBieXRlcylc biIsDQo+ICAJCQkgICAgcGFkZHJlc3MgKGdkYmFyY2gsDQo+IC0JCQkJICAgICAgcmVjb3JkX2Z1 bGxfbGlzdC0+dS5tZW0uYWRkciksDQo+ICsJCQkJICAgICAgZW50cnkudS5tZW0uYWRkciksDQo+ ICAJCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoYWRkciksDQo+ICAJCQkgICAgKHVuc2ln bmVkIGxvbmcpIHNpemVvZiAobGVuKSwNCj4gLQkJCSAgICByZWNvcmRfZnVsbF9saXN0LT51Lm1l bS5sZW4pOw0KPiArCQkJICAgIGVudHJ5LnUubWVtLmxlbik7DQo+IA0KPiAgCSAgICAgIC8qIFdy aXRlIG1lbWxlbi4gICovDQo+IC0JICAgICAgbGVuID0gbmV0b3JkZXIzMiAocmVjb3JkX2Z1bGxf bGlzdC0+dS5tZW0ubGVuKTsNCj4gKwkgICAgICBsZW4gPSBuZXRvcmRlcjMyIChlbnRyeS51Lm1l bS5sZW4pOw0KPiAgCSAgICAgIGJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBvc2VjLCAmbGVu LCBzaXplb2YgKGxlbiksDQo+ICAJCQkgICAgICZiZmRfb2Zmc2V0KTsNCj4gDQo+ICAJICAgICAg LyogV3JpdGUgbWVtYWRkci4gICovDQo+IC0JICAgICAgYWRkciA9IG5ldG9yZGVyNjQgKHJlY29y ZF9mdWxsX2xpc3QtPnUubWVtLmFkZHIpOw0KPiArCSAgICAgIGFkZHIgPSBuZXRvcmRlcjY0IChl bnRyeS51Lm1lbS5hZGRyKTsNCj4gIAkgICAgICBiZmRjb3JlX3dyaXRlIChvYmZkLmdldCAoKSwg b3NlYywgJmFkZHIsDQo+ICAJCQkgICAgIHNpemVvZiAoYWRkciksICZiZmRfb2Zmc2V0KTsNCj4g DQo+ICAJICAgICAgLyogV3JpdGUgbWVtdmFsLiAgKi8NCj4gIAkgICAgICBiZmRjb3JlX3dyaXRl IChvYmZkLmdldCAoKSwgb3NlYywNCj4gLQkJCSAgICAgcmVjb3JkX2Z1bGxfZ2V0X2xvYyAocmVj b3JkX2Z1bGxfbGlzdCksDQo+IC0JCQkgICAgIHJlY29yZF9mdWxsX2xpc3QtPnUubWVtLmxlbiwg JmJmZF9vZmZzZXQpOw0KPiArCQkJICAgICByZWNvcmRfZnVsbF9nZXRfbG9jICgmZW50cnkpLA0K PiArCQkJICAgICBlbnRyeS51Lm1lbS5sZW4sICZiZmRfb2Zmc2V0KTsNCj4gIAkgICAgICBicmVh azsNCj4gLQ0KPiAtCSAgICAgIGNhc2UgcmVjb3JkX2Z1bGxfZW5kOg0KPiAtCQlpZiAocmVjb3Jk X2RlYnVnKQ0KPiAtCQkgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csDQo+IC0JCQkgICAgICAiICBX cml0aW5nIHJlY29yZF9mdWxsX2VuZCAoMSArICINCj4gLQkJCSAgICAgICIlbHUgKyAlbHUgYnl0 ZXMpXG4iLA0KPiAtCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoc2lnbmFsKSwNCj4g LQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKGNvdW50KSk7DQo+IC0JCS8qIFdyaXRl IHNpZ25hbCB2YWx1ZS4gICovDQo+IC0JCXNpZ25hbCA9IG5ldG9yZGVyMzIgKHJlY29yZF9mdWxs X2xpc3QtPnUuZW5kLnNpZ3ZhbCk7DQo+IC0JCWJmZGNvcmVfd3JpdGUgKG9iZmQuZ2V0ICgpLCBv c2VjLCAmc2lnbmFsLA0KPiAtCQkJICAgICAgIHNpemVvZiAoc2lnbmFsKSwgJmJmZF9vZmZzZXQp Ow0KPiAtDQo+IC0JCS8qIFdyaXRlIGluc24gY291bnQuICAqLw0KPiAtCQljb3VudCA9IG5ldG9y ZGVyMzIgKHJlY29yZF9mdWxsX2xpc3QtPnUuZW5kLmluc25fbnVtKTsNCj4gLQkJYmZkY29yZV93 cml0ZSAob2JmZC5nZXQgKCksIG9zZWMsICZjb3VudCwNCj4gLQkJCSAgICAgICBzaXplb2YgKGNv dW50KSwgJmJmZF9vZmZzZXQpOw0KPiAtCQlicmVhazsNCj4gIAkgICAgfQ0KPiAgCX0NCj4gDQo+ IC0gICAgICAvKiBFeGVjdXRlIGVudHJ5LiAgKi8NCj4gLSAgICAgIHJlY29yZF9mdWxsX2V4ZWNf aW5zbiAocmVnY2FjaGUsIGdkYmFyY2gsIHJlY29yZF9mdWxsX2xpc3QpOw0KPiAtDQo+IC0gICAg ICBpZiAocmVjb3JkX2Z1bGxfbGlzdC0+bmV4dCkNCj4gLQlyZWNvcmRfZnVsbF9saXN0ID0gcmVj b3JkX2Z1bGxfbGlzdC0+bmV4dDsNCj4gLSAgICAgIGVsc2UNCj4gLQlicmVhazsNCj4gLSAgICB9 DQo+IC0NCj4gLSAgLyogUmV2ZXJzZSBleGVjdXRlIHRvIGN1cl9yZWNvcmRfZnVsbF9saXN0LiAg Ki8NCj4gLSAgd2hpbGUgKDEpDQo+IC0gICAgew0KPiAtICAgICAgLyogQ2hlY2sgZm9yIGJlZ2lu bmluZyBhbmQgZW5kIG9mIGxvZy4gICovDQo+IC0gICAgICBpZiAocmVjb3JkX2Z1bGxfbGlzdCA9 PSBjdXJfcmVjb3JkX2Z1bGxfbGlzdCkNCj4gLQlicmVhazsNCj4gLQ0KPiAtICAgICAgcmVjb3Jk X2Z1bGxfZXhlY19pbnNuIChyZWdjYWNoZSwgZ2RiYXJjaCwgcmVjb3JkX2Z1bGxfbGlzdCk7DQo+ IC0NCj4gLSAgICAgIGlmIChyZWNvcmRfZnVsbF9saXN0LT5wcmV2KQ0KPiAtCXJlY29yZF9mdWxs X2xpc3QgPSByZWNvcmRfZnVsbF9saXN0LT5wcmV2Ow0KPiArICAgICAgaWYgKGkgPCByZWNvcmRf ZnVsbF9uZXh0X2luc24pDQo+ICsJcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChyZWdjYWNoZSwgZ2Ri YXJjaCwgcmVjb3JkX2Z1bGxfbGlzdFtpXSk7DQo+ICAgICAgfQ0KPiANCj4gICAgdW5saW5rX2Zp bGUua2VlcCAoKTsNCj4gQEAgLTI3NDIsMTEgKzI1NTQsMTEgQEAgcmVjb3JkX2Z1bGxfYmFzZV90 YXJnZXQ6OnNhdmVfcmVjb3JkIChjb25zdA0KPiBjaGFyICpyZWNmaWxlbmFtZSkNCj4gIH0NCj4g DQo+ICAvKiByZWNvcmRfZnVsbF9nb3RvX2luc24gLS0gcmV3aW5kIHRoZSByZWNvcmQgbG9nIChm b3J3YXJkIG9yIGJhY2t3YXJkLA0KPiAtICAgZGVwZW5kaW5nIG9uIERJUikgdG8gdGhlIGdpdmVu IGVudHJ5LCBjaGFuZ2luZyB0aGUgcHJvZ3JhbSBzdGF0ZQ0KPiAtICAgY29ycmVzcG9uZGluZ2x5 LiAgKi8NCj4gKyAgIGRlcGVuZGluZyBvbiBESVIpIHRvIHRoZSBlbnRyeSBpbiBwb3NpdGlvbiBU QVJHRVRfSU5TTiBpbiB0aGUgaGlzdG9yeSwNCj4gKyAgIGNoYW5naW5nIHRoZSBwcm9ncmFtIHN0 YXRlIGNvcnJlc3BvbmRpbmdseS4gICovDQo+IA0KPiAgc3RhdGljIHZvaWQNCj4gLXJlY29yZF9m dWxsX2dvdG9faW5zbiAoc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICplbnRyeSwNCj4gK3JlY29y ZF9mdWxsX2dvdG9faW5zbiAoc2l6ZV90IHRhcmdldF9pbnNuLA0KPiAgCQkgICAgICAgZW51bSBl eGVjX2RpcmVjdGlvbl9raW5kIGRpcikNCj4gIHsNCj4gICAgc2NvcGVkX3Jlc3RvcmUgcmVzdG9y ZV9vcGVyYXRpb25fZGlzYWJsZQ0KPiBAQCAtMjc1NywxNyArMjU2OSwxMiBAQCByZWNvcmRfZnVs bF9nb3RvX2luc24gKHN0cnVjdCByZWNvcmRfZnVsbF9lbnRyeQ0KPiAqZW50cnksDQo+ICAgIC8q IEFzc3VtZSBldmVyeXRoaW5nIGlzIHZhbGlkOiB3ZSB3aWxsIGhpdCB0aGUgZW50cnksDQo+ICAg ICAgIGFuZCB3ZSB3aWxsIG5vdCBoaXQgdGhlIGVuZCBvZiB0aGUgcmVjb3JkaW5nLiAgKi8NCj4g DQo+IC0gIGlmIChkaXIgPT0gRVhFQ19GT1JXQVJEKQ0KPiAtICAgIHJlY29yZF9mdWxsX2xpc3Qg PSByZWNvcmRfZnVsbF9saXN0LT5uZXh0Ow0KPiAtDQo+IC0gIGRvDQo+IC0gICAgew0KPiAtICAg ICAgcmVjb3JkX2Z1bGxfZXhlY19pbnNuIChyZWdjYWNoZSwgZ2RiYXJjaCwgcmVjb3JkX2Z1bGxf bGlzdCk7DQo+IC0gICAgICBpZiAoZGlyID09IEVYRUNfUkVWRVJTRSkNCj4gLQlyZWNvcmRfZnVs bF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlzdC0+cHJldjsNCj4gLSAgICAgIGVsc2UNCj4gLQlyZWNv cmRfZnVsbF9saXN0ID0gcmVjb3JkX2Z1bGxfbGlzdC0+bmV4dDsNCj4gLSAgICB9IHdoaWxlIChy ZWNvcmRfZnVsbF9saXN0ICE9IGVudHJ5KTsNCj4gKyAgaWYgKGRpciA9PSBFWEVDX1JFVkVSU0Up DQo+ICsgICAgZm9yIChpbnQgaSA9IHJlY29yZF9mdWxsX25leHRfaW5zbjsgaSA+IHRhcmdldF9p bnNuOyBpLS0pDQo+ICsgICAgICByZWNvcmRfZnVsbF9leGVjX2luc24gKHJlZ2NhY2hlLCBnZGJh cmNoLCByZWNvcmRfZnVsbF9saXN0W2kgLSAxXSk7DQo+ICsgIGVsc2UNCj4gKyAgICBmb3IgKGlu dCBpID0gcmVjb3JkX2Z1bGxfbmV4dF9pbnNuOyBpIDwgdGFyZ2V0X2luc247IGkrKykNCj4gKyAg ICAgIHJlY29yZF9mdWxsX2V4ZWNfaW5zbiAocmVnY2FjaGUsIGdkYmFyY2gsIHJlY29yZF9mdWxs X2xpc3RbaV0pOw0KPiAgfQ0KPiANCj4gIC8qIEFsaWFzIGZvciAidGFyZ2V0IHJlY29yZC1mdWxs Ii4gICovDQo+IEBAIC0yNzk4LDYxICsyNjA1LDM2IEBAIHNldF9yZWNvcmRfZnVsbF9pbnNuX21h eF9udW0gKGNvbnN0IGNoYXINCj4gKmFyZ3MsIGludCBmcm9tX3R0eSwNCj4gIHN0YXRpYyB2b2lk DQo+ICBtYWludGVuYW5jZV9wcmludF9yZWNvcmRfaW5zdHJ1Y3Rpb24gKGNvbnN0IGNoYXIgKmFy Z3MsIGludCBmcm9tX3R0eSkNCj4gIHsNCj4gLSAgc3RydWN0IHJlY29yZF9mdWxsX2VudHJ5ICp0 b19wcmludCA9IHJlY29yZF9mdWxsX2xpc3Q7DQo+ICsgIGlmIChyZWNvcmRfZnVsbF9saXN0LmVt cHR5ICgpKQ0KPiArICAgIGVycm9yIChfKCJOb3QgZW5vdWdoIHJlY29yZGVkIGhpc3RvcnkiKSk7 DQo+IA0KPiArICBpbnQgb2Zmc2V0ID0gcmVjb3JkX2Z1bGxfbmV4dF9pbnNuIC0gMTsNCj4gKyAg LyogUmVkdWNlIHRoZSBvZmZzZXQgYnkgMSBpZiB0aGUgcmVjb3JkX2Z1bGxfbmV4dF9pbnNuIGlz IGFmdGVyIHRoZSBlbmQNCj4gKyAgICAgc28gdGhhdCB3ZSBzaG93IHRoZSBsYXN0IHJlY29yZGVk IGluc3RydWN0aW9uIGluc3RlYWQgb2YgY3Jhc2hpbmcuICAqLw0KPiArICBpZiAob2Zmc2V0ID09 IHJlY29yZF9mdWxsX2xpc3Quc2l6ZSAoKSkNCj4gKyAgICBvZmZzZXQtLTsNCj4gICAgaWYgKGFy Z3MgIT0gbnVsbHB0cikNCj4gICAgICB7DQo+IC0gICAgICBpbnQgb2Zmc2V0ID0gdmFsdWVfYXNf bG9uZyAocGFyc2VfYW5kX2V2YWwgKGFyZ3MpKTsNCj4gLSAgICAgIGlmIChvZmZzZXQgPiAwKQ0K PiAtCXsNCj4gLQkgIC8qIE1vdmUgZm9yd2FyZCBPRkZTRVQgaW5zdHJ1Y3Rpb25zLiAgV2Uga25v dyB3ZSBmb3VuZCB0aGUNCj4gLQkgICAgIGVuZCBvZiBhbiBpbnN0cnVjdGlvbiB3aGVuIHRvX3By aW50LT50eXBlIGlzIHJlY29yZF9mdWxsX2VuZC4gICovDQo+IC0JICB3aGlsZSAodG9fcHJpbnQt Pm5leHQgIT0gbnVsbHB0ciAmJiBvZmZzZXQgPiAwKQ0KPiAtCSAgICB7DQo+IC0JICAgICAgdG9f cHJpbnQgPSB0b19wcmludC0+bmV4dDsNCj4gLQkgICAgICBpZiAodG9fcHJpbnQtPnR5cGUgPT0g cmVjb3JkX2Z1bGxfZW5kKQ0KPiAtCQlvZmZzZXQtLTsNCj4gLQkgICAgfQ0KPiAtCSAgaWYgKG9m ZnNldCAhPSAwKQ0KPiAtCSAgICBlcnJvciAoXygiTm90IGVub3VnaCByZWNvcmRlZCBoaXN0b3J5 IikpOw0KPiAtCX0NCj4gLSAgICAgIGVsc2UNCj4gLQl7DQo+IC0JICB3aGlsZSAodG9fcHJpbnQt PnByZXYgIT0gbnVsbHB0ciAmJiBvZmZzZXQgPCAwKQ0KPiAtCSAgICB7DQo+IC0JICAgICAgdG9f cHJpbnQgPSB0b19wcmludC0+cHJldjsNCj4gLQkgICAgICBpZiAodG9fcHJpbnQtPnR5cGUgPT0g cmVjb3JkX2Z1bGxfZW5kKQ0KPiAtCQlvZmZzZXQrKzsNCj4gLQkgICAgfQ0KPiAtCSAgaWYgKG9m ZnNldCAhPSAwKQ0KPiAtCSAgICBlcnJvciAoXygiTm90IGVub3VnaCByZWNvcmRlZCBoaXN0b3J5 IikpOw0KPiAtCX0NCj4gKyAgICAgIG9mZnNldCArPSB2YWx1ZV9hc19sb25nIChwYXJzZV9hbmRf ZXZhbCAoYXJncykpOw0KPiArICAgICAgaWYgKG9mZnNldCA+PSByZWNvcmRfZnVsbF9saXN0LnNp emUgKCkgfHwgb2Zmc2V0IDwgMCkNCj4gKwllcnJvciAoXygiTm90IGVub3VnaCByZWNvcmRlZCBo aXN0b3J5IikpOw0KPiAgICAgIH0NCj4gLSAgZ2RiX2Fzc2VydCAodG9fcHJpbnQgIT0gbnVsbHB0 cik7DQo+ICsgIGF1dG8gdG9fcHJpbnQgPSByZWNvcmRfZnVsbF9saXN0LmJlZ2luICgpICsgb2Zm c2V0Ow0KPiANCj4gICAgZ2RiYXJjaCAqYXJjaCA9IGN1cnJlbnRfaW5mZXJpb3IgKCktPmFyY2gg KCk7DQo+IA0KPiAtICAvKiBHbyBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24u ICAqLw0KPiAtICB3aGlsZSAodG9fcHJpbnQtPnByZXYgIT0gbnVsbHB0ciAmJiB0b19wcmludC0+ cHJldi0+dHlwZSAhPSByZWNvcmRfZnVsbF9lbmQpDQo+IC0gICAgdG9fcHJpbnQgPSB0b19wcmlu dC0+cHJldjsNCj4gLQ0KPiAtICAvKiBpZiB3ZSdyZSBpbiB0aGUgZmlyc3QgcmVjb3JkLCB0aGVy ZSBhcmUgbm8gYWN0dWFsIGluc3RydWN0aW9ucw0KPiAtICAgICByZWNvcmRlZC4gIFdhcm4gdGhl IHVzZXIgYW5kIGxlYXZlLiAgKi8NCj4gLSAgaWYgKHRvX3ByaW50ID09ICZyZWNvcmRfZnVsbF9m aXJzdCkNCj4gLSAgICBlcnJvciAoXygiTm90IGVub3VnaCByZWNvcmRlZCBoaXN0b3J5IikpOw0K PiAtDQo+IC0gIHdoaWxlICh0b19wcmludC0+dHlwZSAhPSByZWNvcmRfZnVsbF9lbmQpDQo+ICsg IGZvciAoYXV0byBlbnRyeSA6IHRvX3ByaW50LT5lZmZlY3RzKQ0KPiAgICAgIHsNCj4gLSAgICAg IHN3aXRjaCAodG9fcHJpbnQtPnR5cGUpDQo+ICsgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUpDQo+ ICAJew0KPiAgCSAgY2FzZSByZWNvcmRfZnVsbF9yZWc6DQo+ICAJICAgIHsNCj4gLQkgICAgICB0 eXBlICpyZWd0eXBlID0gZ2RiYXJjaF9yZWdpc3Rlcl90eXBlIChhcmNoLCB0b19wcmludC0NCj4g PnUucmVnLm51bSk7DQo+ICsJICAgICAgdHlwZSAqcmVndHlwZSA9IGdkYmFyY2hfcmVnaXN0ZXJf dHlwZSAoYXJjaCwgZW50cnkudS5yZWcubnVtKTsNCj4gIAkgICAgICB2YWx1ZSAqdmFsDQo+ICAJ CSAgPSB2YWx1ZV9mcm9tX2NvbnRlbnRzIChyZWd0eXBlLA0KPiAtCQkJCQkgcmVjb3JkX2Z1bGxf Z2V0X2xvYyAodG9fcHJpbnQpKTsNCj4gKwkJCQkJIHJlY29yZF9mdWxsX2dldF9sb2MgKCZlbnRy eSkpOw0KPiAgCSAgICAgIGdkYl9wcmludGYgKCJSZWdpc3RlciAlcyBjaGFuZ2VkOiAiLA0KPiAt CQkJICBnZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGFyY2gsIHRvX3ByaW50LQ0KPiA+dS5yZWcubnVt KSk7DQo+ICsJCQkgIGdkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoYXJjaCwgZW50cnkudS5yZWcubnVt KSk7DQo+ICAJICAgICAgc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnMgb3B0czsNCj4gIAkgICAg ICBnZXRfdXNlcl9wcmludF9vcHRpb25zICgmb3B0cyk7DQo+ICAJICAgICAgb3B0cy5yYXcgPSB0 cnVlOw0KPiBAQCAtMjg2MiwxNyArMjY0NCwxNiBAQCBtYWludGVuYW5jZV9wcmludF9yZWNvcmRf aW5zdHJ1Y3Rpb24gKGNvbnN0DQo+IGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkNCj4gIAkgICAg fQ0KPiAgCSAgY2FzZSByZWNvcmRfZnVsbF9tZW06DQo+ICAJICAgIHsNCj4gLQkgICAgICBnZGJf Ynl0ZSAqYiA9IHJlY29yZF9mdWxsX2dldF9sb2MgKHRvX3ByaW50KTsNCj4gKwkgICAgICBnZGJf Ynl0ZSAqYiA9IHJlY29yZF9mdWxsX2dldF9sb2MgKCZlbnRyeSk7DQo+ICAJICAgICAgZ2RiX3By aW50ZiAoIiVkIGJ5dGVzIG9mIG1lbW9yeSBhdCBhZGRyZXNzICVzIGNoYW5nZWQgZnJvbToiLA0K PiAtCQkJICB0b19wcmludC0+dS5tZW0ubGVuLA0KPiAtCQkJICBwcmludF9jb3JlX2FkZHJlc3Mg KGFyY2gsIHRvX3ByaW50LT51Lm1lbS5hZGRyKSk7DQo+IC0JICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCB0b19wcmludC0+dS5tZW0ubGVuOyBpKyspDQo+ICsJCQkgIGVudHJ5LnUubWVtLmxlbiwN Cj4gKwkJCSAgcHJpbnRfY29yZV9hZGRyZXNzIChhcmNoLCBlbnRyeS51Lm1lbS5hZGRyKSk7DQo+ ICsJICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyeS51Lm1lbS5sZW47IGkrKykNCj4gIAkJ Z2RiX3ByaW50ZiAoIiAlMDJ4IiwgYltpXSk7DQo+ICAJICAgICAgZ2RiX3ByaW50ZiAoIlxuIik7 DQo+ICAJICAgICAgYnJlYWs7DQo+ICAJICAgIH0NCj4gIAl9DQo+IC0gICAgICB0b19wcmludCA9 IHRvX3ByaW50LT5uZXh0Ow0KPiAgICAgIH0NCj4gIH0NCj4gDQo+IEBAIC0yODgwLDExICsyNjYx LDYgQEAgSU5JVF9HREJfRklMRSAocmVjb3JkX2Z1bGwpDQo+ICB7DQo+ICAgIHN0cnVjdCBjbWRf bGlzdF9lbGVtZW50ICpjOw0KPiANCj4gLSAgLyogSW5pdCByZWNvcmRfZnVsbF9maXJzdC4gICov DQo+IC0gIHJlY29yZF9mdWxsX2ZpcnN0LnByZXYgPSBOVUxMOw0KPiAtICByZWNvcmRfZnVsbF9m aXJzdC5uZXh0ID0gTlVMTDsNCj4gLSAgcmVjb3JkX2Z1bGxfZmlyc3QudHlwZSA9IHJlY29yZF9m dWxsX2VuZDsNCj4gLQ0KPiAgICBhZGRfdGFyZ2V0IChyZWNvcmRfZnVsbF90YXJnZXRfaW5mbywg cmVjb3JkX2Z1bGxfb3Blbik7DQo+ICAgIGFkZF9kZXByZWNhdGVkX3RhcmdldF9hbGlhcyAocmVj b3JkX2Z1bGxfdGFyZ2V0X2luZm8sICJyZWNvcmQiKTsNCj4gICAgYWRkX3RhcmdldCAocmVjb3Jk X2Z1bGxfY29yZV90YXJnZXRfaW5mbywgcmVjb3JkX2Z1bGxfb3Blbik7DQo+IGRpZmYgLS1naXQg YS9nZGIvcmVjb3JkLWZ1bGwuaCBiL2dkYi9yZWNvcmQtZnVsbC5oDQo+IGluZGV4IDUxZWZmZTc0 NTYwLi5jMzI3ZDg3OWE4YSAxMDA2NDQNCj4gLS0tIGEvZ2RiL3JlY29yZC1mdWxsLmgNCj4gKysr IGIvZ2RiL3JlY29yZC1mdWxsLmgNCj4gQEAgLTQxLDcgKzQxLDYgQEAgZW51bSByZWNvcmRfcmVz dWx0DQo+IA0KPiAgZXh0ZXJuIGludCByZWNvcmRfZnVsbF9hcmNoX2xpc3RfYWRkX3JlZyAoc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50DQo+IG51bSk7DQo+ICBleHRlcm4gaW50IHJlY29y ZF9mdWxsX2FyY2hfbGlzdF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwgaW50IGxlbik7DQo+IC1l eHRlcm4gaW50IHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfZW5kICh2b2lkKTsNCj4gDQo+ICAv KiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb2Nlc3MgcmVjb3JkIHRhcmdldCBpcyBvcGVuLiAgKi8N Cj4gIGV4dGVybiBpbnQgcmVjb3JkX2Z1bGxfaXNfdXNlZCAodm9pZCk7DQo+IGRpZmYgLS1naXQg YS9nZGIvcmlzY3YtdGRlcC5jIGIvZ2RiL3Jpc2N2LXRkZXAuYw0KPiBpbmRleCA2YjVjOWMwMmQ0 Ni4uZjViMWY2Njg0NGMgMTAwNjQ0DQo+IC0tLSBhL2dkYi9yaXNjdi10ZGVwLmMNCj4gKysrIGIv Z2RiL3Jpc2N2LXRkZXAuYw0KPiBAQCAtNTQ2Niw4ICs1NDY2LDUgQEAgcmlzY3ZfcHJvY2Vzc19y ZWNvcmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLA0KPiBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlLA0KPiAgICBpZiAocmVzICE9IFJFQ09SRF9TVUNDRVNTKQ0KPiAgICAgIHJldHVybiByZXM7 DQo+IA0KPiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0gICAg cmV0dXJuIC0xOw0KPiAtDQo+ICAgIHJldHVybiAwOw0KPiAgfQ0KPiBkaWZmIC0tZ2l0IGEvZ2Ri L3JzNjAwMC10ZGVwLmMgYi9nZGIvcnM2MDAwLXRkZXAuYw0KPiBpbmRleCBlMTM1ZGY5NGE0MC4u Zjk2NDg4OWE0OWYgMTAwNjQ0DQo+IC0tLSBhL2dkYi9yczYwMDAtdGRlcC5jDQo+ICsrKyBiL2dk Yi9yczYwMDAtdGRlcC5jDQo+IEBAIC03MTM4LDggKzcxMzgsNiBAQCBwcGNfcHJvY2Vzc19wcmVm aXhfaW5zdHJ1Y3Rpb24gKGludCBpbnNuX3ByZWZpeCwgaW50DQo+IGluc25fc3VmZml4LA0KPiAg ICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9yZWcgKHJlZ2NhY2hlLCBQUENfUENfUkVH TlVNKSkNCj4gICAgICByZXR1cm4gLTE7DQo+IA0KPiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9s aXN0X2FkZF9lbmQgKCkpDQo+IC0gICAgcmV0dXJuIC0xOw0KPiAgICByZXR1cm4gMDsNCj4gIH0N Cj4gDQo+IEBAIC03NDQ3LDggKzc0NDUsNiBAQCBwcGNfcHJvY2Vzc19yZWNvcmQgKHN0cnVjdCBn ZGJhcmNoICpnZGJhcmNoLA0KPiBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KPiANCj4gICAg aWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdjYWNoZSwgUFBDX1BDX1JFR05V TSkpDQo+ICAgICAgcmV0dXJuIC0xOw0KPiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2Fk ZF9lbmQgKCkpDQo+IC0gICAgcmV0dXJuIC0xOw0KPiAgICByZXR1cm4gMDsNCj4gIH0NCj4gDQo+ IGRpZmYgLS1naXQgYS9nZGIvczM5MC1saW51eC10ZGVwLmMgYi9nZGIvczM5MC1saW51eC10ZGVw LmMNCj4gaW5kZXggM2NkNmIzNTlkMTMuLjZiZWEzMGYwOGRjIDEwMDY0NA0KPiAtLS0gYS9nZGIv czM5MC1saW51eC10ZGVwLmMNCj4gKysrIGIvZ2RiL3MzOTAtbGludXgtdGRlcC5jDQo+IEBAIC05 MTAsOSArOTEwLDYgQEAgczM5MF9saW51eF9yZWNvcmRfc2lnbmFsIChzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCwNCj4gc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwNCj4gICAgaWYgKHJlY29yZF9m dWxsX2FyY2hfbGlzdF9hZGRfbWVtIChzcCwgc2l6ZW9mX3J0X3NpZ2ZyYW1lKSkNCj4gICAgICBy ZXR1cm4gLTE7DQo+IA0KPiAtICBpZiAocmVjb3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkp DQo+IC0gICAgcmV0dXJuIC0xOw0KPiAtDQo+ICAgIHJldHVybiAwOw0KPiAgfQ0KPiANCj4gZGlm ZiAtLWdpdCBhL2dkYi9zMzkwLXRkZXAuYyBiL2dkYi9zMzkwLXRkZXAuYw0KPiBpbmRleCBmOWQ3 YmRkMDRlNC4uMzZjZTY1OWVhMTUgMTAwNjQ0DQo+IC0tLSBhL2dkYi9zMzkwLXRkZXAuYw0KPiAr KysgYi9nZGIvczM5MC10ZGVwLmMNCj4gQEAgLTcwMTksOCArNzAxOSw2IEBAIHMzOTBfcHJvY2Vz c19yZWNvcmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLA0KPiBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLA0KPiANCj4gICAgaWYgKHJlY29yZF9mdWxsX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdj YWNoZSwgUzM5MF9QU1dBX1JFR05VTSkpDQo+ICAgICAgcmV0dXJuIC0xOw0KPiAtICBpZiAocmVj b3JkX2Z1bGxfYXJjaF9saXN0X2FkZF9lbmQgKCkpDQo+IC0gICAgcmV0dXJuIC0xOw0KPiAgICBy ZXR1cm4gMDsNCj4gIH0NCj4gDQo+IC0tDQo+IDIuNTQuMA0KPiANCg0KVGhlcmUgYXJlIHN0aWxs IHNvbWUgY29kZSBhcmVhcyB0aGF0IEkgY291bGQgbm90IGZvbGxvdyBjb21wbGV0ZWx5IGJ1dCBJ IGRvbuKAmXQgdGhpbmsgSeKAmWxsIGdldCB0aGVyZQ0KYW55dGltZSBzb29uLjopDQoNClNvIHBs ZWFzZSB0YWtlIG15IHJldmlldyB3aXRoIGEgZ3JhaW4gb2Ygc2FsdC4NCg0KUmV2aWV3ZWQtQnk6 IENocmlzdGluYSBTY2hpbXBlIDxjaHJpc3RpbmEuc2NoaW1wZUBpbnRlbC5jb20+DQoNCkNocmlz dGluYQ0KSW50ZWwgRGV1dHNjaGxhbmQgR21iSAoKUmVnaXN0ZXJlZCBBZGRyZXNzOiBEb3JuYWNo ZXIgU3RyYXNzZSAxLCA4NTYyMiBGZWxka2lyY2hlbiwgR2VybWFueQpUZWw6ICs0OSA4OSA5OTEg NDMwLCB3d3cuaW50ZWwuZGUKTWFuYWdpbmcgRGlyZWN0b3JzOiBIYXJyeSBEZW1hcywgSmVmZnJl eSBTY2huZWlkZXJtYW4sIFlpbiBDaG9uZyBTb3JyZWxsCkNoYWlycGVyc29uIG9mIHRoZSBTdXBl cnZpc29yeSBCb2FyZDogTmljb2xlIExhdQpSZWdpc3RlcmVkIFNlYXQ6IE11bmljaApDb21tZXJj aWFsIFJlZ2lzdGVyOiBBbXRzZ2VyaWNodCBNdWVuY2hlbiBIUkIgMTg2OTI4Cg==