Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tTJoJ-004iii-Uz for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jan 2025 11:56:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tTJoJ-00Enn3-Bi for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jan 2025 11:56:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tTFWA-00CgtZ-RD for pgsql-hackers@lists.postgresql.org; Thu, 02 Jan 2025 07:21:19 +0000 Received: from mgamail.intel.com ([198.175.65.12]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tTFW5-002n0S-IL for pgsql-hackers@lists.postgresql.org; Thu, 02 Jan 2025 07:21:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1735802474; x=1767338474; h=from:to:subject:date:message-id:references:in-reply-to: mime-version; bh=7Dix+RZSRvjM5oGIgRS65/3w6exVdz2Jfu7DhKKhfrw=; b=UkNcDadDKq4n8oRIBojFrdvZQliePXHab+XYFHkTZpsFYam++nBbCtLc N4q0UW5hDA2D19mf+3IQ+0F5oWWd8c3xH87aE0JzZ3GO+T93jbt9UGgfC Jjd3MHmWKE7wABdhUfIjTuF7duFfzkfeQmNUlpyOrJZksLdEsmAyhrZv9 psszX7SPAvPdNvHMJ1eqQZTobXHQBeGRAlQ01uwpVEIMmSPnTGNk12Jlo n9iubgSqaW/uuisWysz6M7SH/mrbEY0G9h77qNTdYo2mDMh50lZj2YjEa KWxCjKZ40VJ6YoopIdiiK4GyaIXACkIpiRqb3fK2LPaK95e7lTuHgbIvf A==; X-CSE-ConnectionGUID: OiLBjVDRRhikQUFH0gGosw== X-CSE-MsgGUID: vJOB0eciQRGDq07QpqZm1g== X-IronPort-AV: E=McAfee;i="6700,10204,11302"; a="47392967" X-IronPort-AV: E=Sophos;i="6.12,284,1728975600"; d="scan'208,223";a="47392967" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jan 2025 23:21:09 -0800 X-CSE-ConnectionGUID: H1DUFhVkTQyNCJ03s+QmTA== X-CSE-MsgGUID: M3xM2MwORJ+/fXVky6u8Fg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,284,1728975600"; d="scan'208,223";a="132284486" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orviesa002.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 01 Jan 2025 23:21:09 -0800 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44; Wed, 1 Jan 2025 23:21:08 -0800 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44 via Frontend Transport; Wed, 1 Jan 2025 23:21:08 -0800 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (104.47.73.171) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Wed, 1 Jan 2025 23:21:08 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KAghoOn6yIFs5zBN5cPGdxJlxA69/eFiqfYTYm0HieT4xuCB7YlRCS7cno6gejMFz5VIXEiIKp+gK96ua0pkmjJt7X7wTguk9LDiDd9TTtM5c9lOIXcons9bP2RIQHvRh/WT92/Ke/UIvNFo2CnfHFdVTubMEOcQ+WIYvQWTZoVYIbxmII2+wcX/FfJ5QS1o3L+m97aKMf9NpT+BvwWNXBauDok6UI8EO8s/Sqf5mPgyaAiPxleuDDoNkL7nCymZNhpSGrU2BeCZ5YmKDfbAjWHI5b8NiAx7ChLTG02aEXSjzJZtRnp0VG1irTbYNMK1mvKEduw8w/Ha5iA+QToCFQ== 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=ci29+tk8lFHAW0EOnODceUsqwZHWT7w1u7UJrO+bpIo=; b=WU60te5V7WUz4KyTXn5aPMwuWhmN9+TTKQdXhbVb7sTko5iDuC2Oq1smVmmXYhNFwd7TGkSrkaxeLhXvJQY14fnjWR4TIVU1M1OteXO4DibJZ2iFQGoiCJnw8ac5uWziJl/0eZNHzF/Hnp0j/RVy4LDa41u8gK9qXBITMlmNIDkKs4az0o6q7fhrGIjfMiYR2YU/4U3JTM49UIKlXy1C1KKqRB+u7wdd0ezDwhya7SOlvIzLFxMAI0UALa/Mclw6D8rmuB/Bcr/ErGsr7F9pAJipWu70KXnkWlvyGpoEmct5X4Y4KrDGaNt/D0idTP5E2pjgmAyk3n6kAn1IyMGWtA== 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 PH7PR11MB5796.namprd11.prod.outlook.com (2603:10b6:510:13b::13) by MN0PR11MB6135.namprd11.prod.outlook.com (2603:10b6:208:3c9::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8293.19; Thu, 2 Jan 2025 07:20:22 +0000 Received: from PH7PR11MB5796.namprd11.prod.outlook.com ([fe80::3df7:b9c0:960:78fa]) by PH7PR11MB5796.namprd11.prod.outlook.com ([fe80::3df7:b9c0:960:78fa%5]) with mapi id 15.20.8314.012; Thu, 2 Jan 2025 07:20:22 +0000 From: "Zhou, Zhiguo" To: "pgsql-hackers@lists.postgresql.org" Subject: [RFC] Lock-free XLog Reservation from WAL Thread-Topic: [RFC] Lock-free XLog Reservation from WAL Thread-Index: Adtc3uLAEBNybGVoQLmmm0niiHPVuAAB7Vag Date: Thu, 2 Jan 2025 07:20:22 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes 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: PH7PR11MB5796:EE_|MN0PR11MB6135:EE_ x-ms-office365-filtering-correlation-id: c80853f8-21c1-4d32-30d4-08dd2afdeb9c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|376014|366016|38070700018; x-microsoft-antispam-message-info: =?us-ascii?Q?cn+hAL16FrKrLv90WhoLOyL58Y2LbuiiXYwKtFrrNRtLDkQa7TudEzf4Ywg9?= =?us-ascii?Q?LeyGHtCPzf6K5k2eCzhrU1DzCAckRpNSeo2dx00jibLvLIyPy+aLm02UEl2Z?= =?us-ascii?Q?wezbBujlnI5BUPFkKdrqfULjG0+m93YfCG8wQ5oW5ATkdWU8EyrPl+/4bQUN?= =?us-ascii?Q?baNqLwiaLmszxjlltjHxHL4tSCk39ugBtue+2tpDRXjYGQX5mUufgh7LUj8B?= =?us-ascii?Q?e9WQNIIer6PWFLTdHn8ZnOmSTMwPmyoO2PWnKUz/3kV58bzJKe7ycS3iviI9?= =?us-ascii?Q?TuX+Fct47xlerm/hq91rCKRt2m0IS0Vfq+/9Sue59BcciDtyvz0qxtWccj1M?= =?us-ascii?Q?CfjcwYgnJaLzLERDTCabx6DMoy9/oNc+4DSmIM7LufKwV4suFog/W3r/ogUi?= =?us-ascii?Q?Q+e7s+ROLrNMdGz4krkxxssIz3fVIMpXBWlFTSIlB+/+kWuqmCqseDSWU0DH?= =?us-ascii?Q?v9vjiYwgHq5j/W83uGllcey8d8pAcuUsxKPk2xZzc06kHNxP4m6m+RQZxzfD?= =?us-ascii?Q?tWeF6b7rINWnJLBpuNS3RSudJF/g/bXSADXPAqXwzLpRsz5Y/fNZ8hMtJiPh?= =?us-ascii?Q?FzQI6JbrhaKs3zSHxbvgNQTIx9pv/pVxuta7FEZv7b//hPPpiz2WGV/MTOhH?= =?us-ascii?Q?iEn2qnLQTbn+vIZn7l2g/784mUIainRnvauugYNNPvScuCtneDV7u3WplCi+?= =?us-ascii?Q?fiWE3JniCO/Ela8c0HSfqAdSj5Kxcaf9YEGYZnh/tRfJzopfyXzCC/JD/KEQ?= =?us-ascii?Q?vqvyGtHnOzdVPTcWGx4rdV2GZtbrbY5rEMiM2pRr7gUF8Rj62m95SJUa4iIB?= =?us-ascii?Q?uSR8Q2RUtg0ZsHJpD9N1KLmflfB2aaHHpLLOWVKnS7xugG8htY7nbiGg5wKQ?= =?us-ascii?Q?xhXZmxD0ytZXDbd6xBXRfzxGm3iMK8051eUuo5po9ZuWnx/FrOpQMkpo8dBo?= =?us-ascii?Q?Pr2oGn/vKE+yeh1Vdwv/V29draJv03/fqNj61xs16la83S+V8xOdDpg+TWXw?= =?us-ascii?Q?ZiDcfN2eHZkMACg/e6/sGZbF62s08d5zeXQ3nrAH8BOAPgznJyBIYbDcTKXV?= =?us-ascii?Q?gQT/pAqaoI19QjKvFKYKOtKR3wdv1NvtpEjggW4YMmWln9LCSnv3uX9TPDzA?= =?us-ascii?Q?DYLSR1WuOIhUVeup5YkUdbK2u4hmxK7MSM4U7ZoxtVnXwzgXvX4StHzvBgo3?= =?us-ascii?Q?ZvgQNBAn6DmzSfKqHRlfW/naibQQGtwCVPCZ0+MLH2gPJ+9EtCCg+vYi7A4P?= =?us-ascii?Q?GKfygkMEZgnLxHEhENcND9jbpicp+Dmj+iBc5po2QwAq8wPfnnRLTj9SIs4H?= =?us-ascii?Q?iQlQE92IBpMgGWqsFeulgICq5MtHVSRrkf2BXET8mvoNPO9m9nB/1iA5WHkS?= =?us-ascii?Q?Ze/udsm1SYGqa9GGhXdX64NCHJeumqSrNwLvQNUbm5NCCJlvE/UYNNq8ROQm?= =?us-ascii?Q?teNWympslqNrT1buDA9d86guBKkXSQ5F?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR11MB5796.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?Z1DRWgiw3JbZEoqnIZv3rnmZwe9isvqC4BVWzPACPJTAFMGwYHN/vXbbsdkA?= =?us-ascii?Q?TYbR4nO4S76d69xD+FLvrNv/XZVUDE80CTCBFcORCT6E0s0qRDPh+G4bAeze?= =?us-ascii?Q?3vM7u0Dlu+yBCFPXkxCcvzTil+O6Ad30yrhIGGaIkYXR+txDA8fdXcu0T6at?= =?us-ascii?Q?RcDlkapZ7bn8M58uLas6PJ8UvlfidJJQ/dkEcVR8Au9C43cjWgpNCJx1LuYP?= =?us-ascii?Q?jYgwCAlPSWXgX8BvOFMQAlAm02udZA8lK4lrsdrXklqyz+wcpemlmFyyQXwu?= =?us-ascii?Q?pqEC/o01dp2OklsSPEIAmKAipHzmctuN2Mcyyk+rVN85hLnMG7A6DbGZaQQi?= =?us-ascii?Q?te2i7Tg57T7RiK9ESeVJc7K/kA5f103oBNrZmjod/6+KiiQkOAYA5Xjd0Ozi?= =?us-ascii?Q?OOffZaAGeKyOk/QU4HR5miL68nxtyzPUqR8MabiRUH3jzM2bTRGqv/fjTOHV?= =?us-ascii?Q?k72JYpBDGTX4YkbByvoUXpvniSNzhTLWAcwm+HIHihSfTWVCFgOTMW6y/9Zd?= =?us-ascii?Q?lvlzJcdLTw4FGhvUw7uSLc3xU7Z0sWUnRG+sPJS6shtoH2t6UaTq2U5swR6z?= =?us-ascii?Q?nFI3r0LqdNdSnX9Xt1pNnmCjjCi8ptbdlZ0/jSsSeHIXpM+KFDOId3xXdqM5?= =?us-ascii?Q?R8itKAkthlxQscn/MU1DZg7GivDDt+ziMLYJqU3iAu3ClloUW0LoZ2nM4y/N?= =?us-ascii?Q?Ph6TJM0wkh/HOUKWZuX+ZMsyQwTrZozOpshRkWL5t5zM1UcdPzs7pAQdZ5+/?= =?us-ascii?Q?Xf37pqqqIfkKaShnhTIqPFT8EGOHVXkWq3YmHzgjkZz7mHH+F+JnZpSPDeJJ?= =?us-ascii?Q?EAMlUpLz+3BF52V0UzKDhLUqq5ZyYKgWVux2xr+LuMtc90O04oc6OIEW54HO?= =?us-ascii?Q?tJvpslz3969JzSqN6ZGxsbFGJpMXU1j6wMFHUasbfJ5qAEnqHao4V4y+NxgP?= =?us-ascii?Q?dhIfeRDps1VHOHwOpujTAtcIC5F/RAB+JA2PhHfUtmKnUKbx6GfaVufwMkcY?= =?us-ascii?Q?sCZhtXvzTVdmKqIfMq3TsMefi+hWitiZCyUEn2iynaI4Bi+7oKuJD/Qkdm/M?= =?us-ascii?Q?yfxBpAtokORrb2iLaoVjKuRSe17IbGTRofkd3tbopfvakq3h8PwRFT/5+QUg?= =?us-ascii?Q?hTZmKCyJi5Y8UURuo9EWo9YHBDY5SO70gCdPVaQXgRTVtW5s+J1DZpDp3QCW?= =?us-ascii?Q?eAhbCvwveUxUtpfzITYkY9usRU22Ss0F18n4cLdShqZJZq39O3X4/woBL4S0?= =?us-ascii?Q?tBzzsQkaD/8WNELVsqrK9Z/pUlDo8wFf/HP0fu90vMtduE/4oRzrS4R4kfYY?= =?us-ascii?Q?GB3lAuJVapwmYS0e40bOkFS4uXCYWqaXuu4ZVyIyVnvVuulpeDn+MEbOuBRR?= =?us-ascii?Q?afXy6eRFY+xGtInsLeSzx85GGjC96Zf4aWYQB2xrw7LeM+KGwmYe0498X4Wu?= =?us-ascii?Q?BBkrjjFnVTw794XJIcd6jm4YP8O4NAz8mnajY25l8R+ocKgxbEx/s0TLiEDd?= =?us-ascii?Q?WaxBBdclksRKrMuPZyqDfrI4TxMnnZ7lNTFsoFq7sNRiJ9gNerVTAk35UF6J?= =?us-ascii?Q?JrhqCnLQecgI9wf/4rSBApyjcnzOaj8guHscqBcT?= Content-Type: multipart/mixed; boundary="_002_PH7PR11MB579612D1E9EFB02A3DB60777EF142PH7PR11MB5796namp_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH7PR11MB5796.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c80853f8-21c1-4d32-30d4-08dd2afdeb9c X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jan 2025 07:20:22.4104 (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: C7Wf6YyMIctCYY3TKNlYDrflWb1lRTj5UD13TpBU3a13Rxb2dREpxm/tYOEuw3nSYcQZT/RUszaU3Z9JxYC6bw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR11MB6135 X-OriginatorOrg: intel.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_PH7PR11MB579612D1E9EFB02A3DB60777EF142PH7PR11MB5796namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi all, I am reaching out to solicit your insights and comments on a recent proposa= l regarding the "Lock-free XLog Reservation from WAL." We have identified s= ome challenges with the current WAL insertions, which require space reserva= tions in the WAL buffer which involve updating two shared-memory statuses i= n XLogCtlInsert: CurrBytePos (the start position of the current XLog) and P= revBytePos (the prev-link to the previous XLog). Currently, the use of XLog= CtlInsert.insertpos_lck ensures consistency but introduces lock contention,= hindering the parallelism of XLog insertions. To address this issue, we propose the following changes: 1. Removal of PrevBytePos: This will allow increments of the CurrBytePos (a= single uint64 field) to be implemented with an atomic operation (fetch_add= ). 2. Updating Prev-Link of next XLog: Based on the fact that the prev-link of= the next XLog always points to the head of the current Xlog,we will slight= ly exceed the reserved memory range of the current XLog to update the prev-= link of the next XLog, regardless of which backend acquires the next memory= space. The next XLog inserter will wait until its prev-link is updated for= CRC calculation before starting its own XLog copy into the WAL. 3. Breaking Sequential Write Convention: Each backend will update the prev-= link of its next XLog first, then return to the header position for the cur= rent log insertion. This change will reduce the dependency of XLog writes o= n previous ones (compared with the sequential writes). 4. Revised GetXLogBuffer: To support #3, we need update this function to se= parate the LSN it intends to access from the LSN it expects to update in th= e insertingAt field. 5. Increase NUM_XLOGINSERT_LOCKS: With the above changes, increasing NUM_XL= OGINSERT_LOCKS, for example to 128, could effectively enhance the paralleli= sm. The attached patch could pass the regression tests (make check, make check-= world), and in the performance test of this POC on SPR (480 vCPU) shows tha= t this optimization could help the TPCC benchmark better scale with the cor= e count and as a result the performance with full cores enabled could be im= proved by 2.04x. Before we proceed with further patch validation and refinement work, we are= eager to hear the community's thoughts and comments on this optimization s= o that we can confirm our current work aligns with expectations. --_002_PH7PR11MB579612D1E9EFB02A3DB60777EF142PH7PR11MB5796namp_ Content-Type: application/octet-stream; name="0001-Lock-free-XLog-Reservation-from-WAL.patch" Content-Description: 0001-Lock-free-XLog-Reservation-from-WAL.patch Content-Disposition: attachment; filename="0001-Lock-free-XLog-Reservation-from-WAL.patch"; size=14630; creation-date="Thu, 02 Jan 2025 07:20:09 GMT"; modification-date="Thu, 02 Jan 2025 07:20:21 GMT" Content-Transfer-Encoding: base64 RnJvbSAyZjRhMzJiMWQwOTQxOTE2N2ZlNTA0MDQ2NWM4YTM0NjQwMTBlMDEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlndW8gWmhvdSA8emhpZ3VvLnpob3VAaW50ZWwuY29tPgpE YXRlOiBUaHUsIDIgSmFuIDIwMjUgMTI6MDQ6MDIgKzA4MDAKU3ViamVjdDogW1BBVENIXSBMb2Nr LWZyZWUgWExvZyBSZXNlcnZhdGlvbiBmcm9tIFdBTAoKUmVtb3ZlZCBQcmV2Qnl0ZVBvcyB0byBl bGltaW5hdGUgbG9jayBjb250ZW50aW9uLCBhbGxvd2luZyBhdG9taWMgdXBkYXRlcwp0byBDdXJy Qnl0ZVBvcy4gQWRqdXN0ZWQgWExvZyByZXNlcnZhdGlvbiB0byBleGNlZWQgY3VycmVudCBYTG9n IG1lbW9yeQpzbGlnaHRseSwgZW5hYmxpbmcgdGhlIG5leHQgWExvZydzIHByZXYtbGluayB1cGRh dGUgd2l0aG91dCB3YWl0aW5nIGZvcgp0aGUgY3VycmVudCBYTG9nLiBCYWNrZW5kcyBub3cgdXBk YXRlIG5leHQgWExvZydzIHByZXYtbGluayBiZWZvcmUKaW5zZXJ0aW5nIGN1cnJlbnQgbG9nLCBi cmVha2luZyBzZXF1ZW50aWFsIHdyaXRlIGNvbnZlbnRpb24uIFVwZGF0ZWQKR2V0WExvZ0J1ZmZl ciB0byBoYW5kbGUgc2VwYXJhdGUgYWNjZXNzIGFuZCB1cGRhdGUgTFNOcy4gSW5jcmVhc2VkCk5V TV9YTE9HSU5TRVJUX0xPQ0tTLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YyB8IDE4NiArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAx MzEgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Zy5jCmluZGV4IDZmNTg0MTJiY2EuLjYyMTVlYTY5NzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQCBpbnQJCQl3YWxfc2VnbWVudF9zaXplID0gREVGQVVM VF9YTE9HX1NFR19TSVpFOwogICogdG8gaGFwcGVuIGNvbmN1cnJlbnRseSwgYnV0IGFkZHMgc29t ZSBDUFUgb3ZlcmhlYWQgdG8gZmx1c2hpbmcgdGhlIFdBTCwKICAqIHdoaWNoIG5lZWRzIHRvIGl0 ZXJhdGUgYWxsIHRoZSBsb2Nrcy4KICAqLwotI2RlZmluZSBOVU1fWExPR0lOU0VSVF9MT0NLUyAg OAorI2RlZmluZSBOVU1fWExPR0lOU0VSVF9MT0NLUyAgMTI4CiAKIC8qCiAgKiBNYXggZGlzdGFu Y2UgZnJvbSBsYXN0IGNoZWNrcG9pbnQsIGJlZm9yZSB0cmlnZ2VyaW5nIGEgbmV3IHhsb2ctYmFz ZWQKQEAgLTQwNCw4ICs0MDQsNyBAQCB0eXBlZGVmIHN0cnVjdCBYTG9nQ3RsSW5zZXJ0CiAJICog cHJldi1saW5rIG9mIHRoZSBuZXh0IHJlY29yZC4gVGhlc2UgYXJlIHN0b3JlZCBhcyAidXNhYmxl IGJ5dGUKIAkgKiBwb3NpdGlvbnMiIHJhdGhlciB0aGFuIFhMb2dSZWNQdHJzIChzZWUgWExvZ0J5 dGVQb3NUb1JlY1B0cigpKS4KIAkgKi8KLQl1aW50NjQJCUN1cnJCeXRlUG9zOwotCXVpbnQ2NAkJ UHJldkJ5dGVQb3M7CisJcGdfYXRvbWljX3VpbnQ2NAkJQ3VyckJ5dGVQb3M7CiAKIAkvKgogCSAq IE1ha2Ugc3VyZSB0aGUgYWJvdmUgaGVhdmlseS1jb250ZW5kZWQgc3BpbmxvY2sgYW5kIGJ5dGUg cG9zaXRpb25zIGFyZQpAQCAtNzAwLDEyICs2OTksMTQgQEAgc3RhdGljIHZvaWQgQ29weVhMb2dS ZWNvcmRUb1dBTChpbnQgd3JpdGVfbGVuLCBib29sIGlzTG9nU3dpdGNoLAogCQkJCQkJCQlYTG9n UmVjRGF0YSAqcmRhdGEsCiAJCQkJCQkJCVhMb2dSZWNQdHIgU3RhcnRQb3MsIFhMb2dSZWNQdHIg RW5kUG9zLAogCQkJCQkJCQlUaW1lTGluZUlEIHRsaSk7CitzdGF0aWMgWExvZ1JlY1B0ciBHZXRQ cmV2UmVjUHRyKFhMb2dSZWNQdHIgaGRyLCBUaW1lTGluZUlEIHRsaSk7CitzdGF0aWMgdm9pZCBT ZXRQcmV2UmVjUHRyKFhMb2dSZWNQdHIgaGRyLCBYTG9nUmVjUHRyIFByZXZQb3MsCisJCQkJCQkg IFRpbWVMaW5lSUQgdGxpLCBib29sIGluX29yZGVyKTsKIHN0YXRpYyB2b2lkIFJlc2VydmVYTG9n SW5zZXJ0TG9jYXRpb24oaW50IHNpemUsIFhMb2dSZWNQdHIgKlN0YXJ0UG9zLAotCQkJCQkJCQkJ ICBYTG9nUmVjUHRyICpFbmRQb3MsIFhMb2dSZWNQdHIgKlByZXZQdHIpOwotc3RhdGljIGJvb2wg UmVzZXJ2ZVhMb2dTd2l0Y2goWExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBv cywKLQkJCQkJCQkgIFhMb2dSZWNQdHIgKlByZXZQdHIpOworCQkJCQkJCQkJICBYTG9nUmVjUHRy ICpFbmRQb3MpOworc3RhdGljIGJvb2wgUmVzZXJ2ZVhMb2dTd2l0Y2goWExvZ1JlY1B0ciAqU3Rh cnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBvcyk7CiBzdGF0aWMgWExvZ1JlY1B0ciBXYWl0WExvZ0lu c2VydGlvbnNUb0ZpbmlzaChYTG9nUmVjUHRyIHVwdG8pOwotc3RhdGljIGNoYXIgKkdldFhMb2dC dWZmZXIoWExvZ1JlY1B0ciBwdHIsIFRpbWVMaW5lSUQgdGxpKTsKK3N0YXRpYyBjaGFyICpHZXRY TG9nQnVmZmVyKFhMb2dSZWNQdHIgcHRyLCBYTG9nUmVjUHRyIHVwdG8sIFRpbWVMaW5lSUQgdGxp KTsKIHN0YXRpYyBYTG9nUmVjUHRyIFhMb2dCeXRlUG9zVG9SZWNQdHIodWludDY0IGJ5dGVwb3Mp Owogc3RhdGljIFhMb2dSZWNQdHIgWExvZ0J5dGVQb3NUb0VuZFJlY1B0cih1aW50NjQgYnl0ZXBv cyk7CiBzdGF0aWMgdWludDY0IFhMb2dSZWNQdHJUb0J5dGVQb3MoWExvZ1JlY1B0ciBwdHIpOwpA QCAtODYyLDggKzg2Myw3IEBAIFhMb2dJbnNlcnRSZWNvcmQoWExvZ1JlY0RhdGEgKnJkYXRhLAog CQkgKiBSZXNlcnZlIHNwYWNlIGZvciB0aGUgcmVjb3JkIGluIHRoZSBXQUwuIFRoaXMgYWxzbyBz ZXRzIHRoZSB4bF9wcmV2CiAJCSAqIHBvaW50ZXIuCiAJCSAqLwotCQlSZXNlcnZlWExvZ0luc2Vy dExvY2F0aW9uKHJlY2hkci0+eGxfdG90X2xlbiwgJlN0YXJ0UG9zLCAmRW5kUG9zLAotCQkJCQkJ CQkgICZyZWNoZHItPnhsX3ByZXYpOworCQlSZXNlcnZlWExvZ0luc2VydExvY2F0aW9uKHJlY2hk ci0+eGxfdG90X2xlbiwgJlN0YXJ0UG9zLCAmRW5kUG9zKTsKIAogCQkvKiBOb3JtYWwgcmVjb3Jk cyBhcmUgYWx3YXlzIGluc2VydGVkLiAqLwogCQlpbnNlcnRlZCA9IHRydWU7CkBAIC04ODMsNyAr ODgzLDcgQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJCSAqLwogCQlB c3NlcnQoZnB3X2xzbiA9PSBJbnZhbGlkWExvZ1JlY1B0cik7CiAJCVdBTEluc2VydExvY2tBY3F1 aXJlRXhjbHVzaXZlKCk7Ci0JCWluc2VydGVkID0gUmVzZXJ2ZVhMb2dTd2l0Y2goJlN0YXJ0UG9z LCAmRW5kUG9zLCAmcmVjaGRyLT54bF9wcmV2KTsKKwkJaW5zZXJ0ZWQgPSBSZXNlcnZlWExvZ1N3 aXRjaCgmU3RhcnRQb3MsICZFbmRQb3MpOwogCX0KIAllbHNlCiAJewpAQCAtODk4LDE0ICs4OTgs MjIgQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJCSAqLwogCQlBc3Nl cnQoZnB3X2xzbiA9PSBJbnZhbGlkWExvZ1JlY1B0cik7CiAJCVdBTEluc2VydExvY2tBY3F1aXJl RXhjbHVzaXZlKCk7Ci0JCVJlc2VydmVYTG9nSW5zZXJ0TG9jYXRpb24ocmVjaGRyLT54bF90b3Rf bGVuLCAmU3RhcnRQb3MsICZFbmRQb3MsCi0JCQkJCQkJCSAgJnJlY2hkci0+eGxfcHJldik7CisJ CVJlc2VydmVYTG9nSW5zZXJ0TG9jYXRpb24ocmVjaGRyLT54bF90b3RfbGVuLCAmU3RhcnRQb3Ms ICZFbmRQb3MpOwogCQlSZWRvUmVjUHRyID0gSW5zZXJ0LT5SZWRvUmVjUHRyID0gU3RhcnRQb3M7 CiAJCWluc2VydGVkID0gdHJ1ZTsKIAl9CiAKIAlpZiAoaW5zZXJ0ZWQpCiAJeworCQlib29sCQlp c2xhcmdlcmVjb3JkOworCisJCWlzbGFyZ2VyZWNvcmQgPSBFbmRQb3MgLSBTdGFydFBvcyA+PSAo U2l6ZSkgWExPR2J1ZmZlcnMgKiBYTE9HX0JMQ0tTWjsKKwkJaWYgKCFpc2xhcmdlcmVjb3JkKQor CQl7CisJCQlTZXRQcmV2UmVjUHRyKEVuZFBvcywgU3RhcnRQb3MsIGluc2VydFRMSSwgZmFsc2Up OworCQl9CisJCXdoaWxlICghKHJlY2hkci0+eGxfcHJldiA9IEdldFByZXZSZWNQdHIoU3RhcnRQ b3MsIGluc2VydFRMSSkpKTsKKwogCQkvKgogCQkgKiBOb3cgdGhhdCB4bF9wcmV2IGhhcyBiZWVu IGZpbGxlZCBpbiwgY2FsY3VsYXRlIENSQyBvZiB0aGUgcmVjb3JkCiAJCSAqIGhlYWRlci4KQEAg LTkyMyw2ICs5MzEsMTEgQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJ CQkJCQkJY2xhc3MgPT0gV0FMSU5TRVJUX1NQRUNJQUxfU1dJVENILCByZGF0YSwKIAkJCQkJCQlT dGFydFBvcywgRW5kUG9zLCBpbnNlcnRUTEkpOwogCisJCWlmIChpc2xhcmdlcmVjb3JkKQorCQl7 CisJCQlTZXRQcmV2UmVjUHRyKEVuZFBvcywgU3RhcnRQb3MsIGluc2VydFRMSSwgdHJ1ZSk7CisJ CX0KKwogCQkvKgogCQkgKiBVbmxlc3MgcmVjb3JkIGlzIGZsYWdnZWQgYXMgbm90IGltcG9ydGFu dCwgdXBkYXRlIExTTiBvZiBsYXN0CiAJCSAqIGltcG9ydGFudCByZWNvcmQgaW4gdGhlIGN1cnJl bnQgc2xvdC4gV2hlbiBob2xkaW5nIGFsbCBsb2NrcywganVzdApAQCAtMTEwNSwxMyArMTExOCwx MSBAQCBYTG9nSW5zZXJ0UmVjb3JkKFhMb2dSZWNEYXRhICpyZGF0YSwKICAqIGlubGluZS4gV2Ug dXNlIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGhlcmUgdG8gdHJ5IHRvIGNvbnZpbmNlIGl0 LgogICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAotUmVzZXJ2ZVhM b2dJbnNlcnRMb2NhdGlvbihpbnQgc2l6ZSwgWExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQ dHIgKkVuZFBvcywKLQkJCQkJCSAgWExvZ1JlY1B0ciAqUHJldlB0cikKK1Jlc2VydmVYTG9nSW5z ZXJ0TG9jYXRpb24oaW50IHNpemUsIFhMb2dSZWNQdHIgKlN0YXJ0UG9zLCBYTG9nUmVjUHRyICpF bmRQb3MpCiB7CiAJWExvZ0N0bEluc2VydCAqSW5zZXJ0ID0gJlhMb2dDdGwtPkluc2VydDsKIAl1 aW50NjQJCXN0YXJ0Ynl0ZXBvczsKIAl1aW50NjQJCWVuZGJ5dGVwb3M7Ci0JdWludDY0CQlwcmV2 Ynl0ZXBvczsKIAogCXNpemUgPSBNQVhBTElHTihzaXplKTsKIApAQCAtMTEyOCwxOSArMTEzOSwx MSBAQCBSZXNlcnZlWExvZ0luc2VydExvY2F0aW9uKGludCBzaXplLCBYTG9nUmVjUHRyICpTdGFy dFBvcywgWExvZ1JlY1B0ciAqRW5kUG9zLAogCSAqIGJlY2F1c2UgdGhlIHVzYWJsZSBieXRlIHBv c2l0aW9uIGRvZXNuJ3QgaW5jbHVkZSBhbnkgaGVhZGVycywgcmVzZXJ2aW5nCiAJICogWCBieXRl cyBmcm9tIFdBTCBpcyBhbG1vc3QgYXMgc2ltcGxlIGFzICJDdXJyQnl0ZVBvcyArPSBYIi4KIAkg Ki8KLQlTcGluTG9ja0FjcXVpcmUoJkluc2VydC0+aW5zZXJ0cG9zX2xjayk7Ci0KLQlzdGFydGJ5 dGVwb3MgPSBJbnNlcnQtPkN1cnJCeXRlUG9zOworCXN0YXJ0Ynl0ZXBvcyA9IHBnX2F0b21pY19m ZXRjaF9hZGRfdTY0KCZJbnNlcnQtPkN1cnJCeXRlUG9zLCBzaXplKTsKIAllbmRieXRlcG9zID0g c3RhcnRieXRlcG9zICsgc2l6ZTsKLQlwcmV2Ynl0ZXBvcyA9IEluc2VydC0+UHJldkJ5dGVQb3M7 Ci0JSW5zZXJ0LT5DdXJyQnl0ZVBvcyA9IGVuZGJ5dGVwb3M7Ci0JSW5zZXJ0LT5QcmV2Qnl0ZVBv cyA9IHN0YXJ0Ynl0ZXBvczsKLQotCVNwaW5Mb2NrUmVsZWFzZSgmSW5zZXJ0LT5pbnNlcnRwb3Nf bGNrKTsKIAogCSpTdGFydFBvcyA9IFhMb2dCeXRlUG9zVG9SZWNQdHIoc3RhcnRieXRlcG9zKTsK IAkqRW5kUG9zID0gWExvZ0J5dGVQb3NUb0VuZFJlY1B0cihlbmRieXRlcG9zKTsKLQkqUHJldlB0 ciA9IFhMb2dCeXRlUG9zVG9SZWNQdHIocHJldmJ5dGVwb3MpOwogCiAJLyoKIAkgKiBDaGVjayB0 aGF0IHRoZSBjb252ZXJzaW9ucyBiZXR3ZWVuICJ1c2FibGUgYnl0ZSBwb3NpdGlvbnMiIGFuZApA QCAtMTE0OCw3ICsxMTUxLDYgQEAgUmVzZXJ2ZVhMb2dJbnNlcnRMb2NhdGlvbihpbnQgc2l6ZSwg WExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBvcywKIAkgKi8KIAlBc3NlcnQo WExvZ1JlY1B0clRvQnl0ZVBvcygqU3RhcnRQb3MpID09IHN0YXJ0Ynl0ZXBvcyk7CiAJQXNzZXJ0 KFhMb2dSZWNQdHJUb0J5dGVQb3MoKkVuZFBvcykgPT0gZW5kYnl0ZXBvcyk7Ci0JQXNzZXJ0KFhM b2dSZWNQdHJUb0J5dGVQb3MoKlByZXZQdHIpID09IHByZXZieXRlcG9zKTsKIH0KIAogLyoKQEAg LTExNjEsMTIgKzExNjMsMTEgQEAgUmVzZXJ2ZVhMb2dJbnNlcnRMb2NhdGlvbihpbnQgc2l6ZSwg WExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBvcywKICAqIHJlc2VydmluZyBh bnkgc3BhY2UsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KICovCiBzdGF0aWMgYm9v bAotUmVzZXJ2ZVhMb2dTd2l0Y2goWExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVu ZFBvcywgWExvZ1JlY1B0ciAqUHJldlB0cikKK1Jlc2VydmVYTG9nU3dpdGNoKFhMb2dSZWNQdHIg KlN0YXJ0UG9zLCBYTG9nUmVjUHRyICpFbmRQb3MpCiB7CiAJWExvZ0N0bEluc2VydCAqSW5zZXJ0 ID0gJlhMb2dDdGwtPkluc2VydDsKIAl1aW50NjQJCXN0YXJ0Ynl0ZXBvczsKIAl1aW50NjQJCWVu ZGJ5dGVwb3M7Ci0JdWludDY0CQlwcmV2Ynl0ZXBvczsKIAl1aW50MzIJCXNpemUgPSBNQVhBTElH TihTaXplT2ZYTG9nUmVjb3JkKTsKIAlYTG9nUmVjUHRyCXB0cjsKIAl1aW50MzIJCXNlZ2xlZnQ7 CkBAIC0xMTc5LDcgKzExODAsNyBAQCBSZXNlcnZlWExvZ1N3aXRjaChYTG9nUmVjUHRyICpTdGFy dFBvcywgWExvZ1JlY1B0ciAqRW5kUG9zLCBYTG9nUmVjUHRyICpQcmV2UHRyKQogCSAqLwogCVNw aW5Mb2NrQWNxdWlyZSgmSW5zZXJ0LT5pbnNlcnRwb3NfbGNrKTsKIAotCXN0YXJ0Ynl0ZXBvcyA9 IEluc2VydC0+Q3VyckJ5dGVQb3M7CisJc3RhcnRieXRlcG9zID0gcGdfYXRvbWljX3JlYWRfdTY0 KCZJbnNlcnQtPkN1cnJCeXRlUG9zKTsKIAogCXB0ciA9IFhMb2dCeXRlUG9zVG9FbmRSZWNQdHIo c3RhcnRieXRlcG9zKTsKIAlpZiAoWExvZ1NlZ21lbnRPZmZzZXQocHRyLCB3YWxfc2VnbWVudF9z aXplKSA9PSAwKQpAQCAtMTE5MCw3ICsxMTkxLDYgQEAgUmVzZXJ2ZVhMb2dTd2l0Y2goWExvZ1Jl Y1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBvcywgWExvZ1JlY1B0ciAqUHJldlB0cikK IAl9CiAKIAllbmRieXRlcG9zID0gc3RhcnRieXRlcG9zICsgc2l6ZTsKLQlwcmV2Ynl0ZXBvcyA9 IEluc2VydC0+UHJldkJ5dGVQb3M7CiAKIAkqU3RhcnRQb3MgPSBYTG9nQnl0ZVBvc1RvUmVjUHRy KHN0YXJ0Ynl0ZXBvcyk7CiAJKkVuZFBvcyA9IFhMb2dCeXRlUG9zVG9FbmRSZWNQdHIoZW5kYnl0 ZXBvcyk7CkBAIC0xMjAyLDE3ICsxMjAyLDEzIEBAIFJlc2VydmVYTG9nU3dpdGNoKFhMb2dSZWNQ dHIgKlN0YXJ0UG9zLCBYTG9nUmVjUHRyICpFbmRQb3MsIFhMb2dSZWNQdHIgKlByZXZQdHIpCiAJ CSpFbmRQb3MgKz0gc2VnbGVmdDsKIAkJZW5kYnl0ZXBvcyA9IFhMb2dSZWNQdHJUb0J5dGVQb3Mo KkVuZFBvcyk7CiAJfQotCUluc2VydC0+Q3VyckJ5dGVQb3MgPSBlbmRieXRlcG9zOwotCUluc2Vy dC0+UHJldkJ5dGVQb3MgPSBzdGFydGJ5dGVwb3M7CisJcGdfYXRvbWljX3dyaXRlX3U2NCgmSW5z ZXJ0LT5DdXJyQnl0ZVBvcywgZW5kYnl0ZXBvcyk7CiAKIAlTcGluTG9ja1JlbGVhc2UoJkluc2Vy dC0+aW5zZXJ0cG9zX2xjayk7CiAKLQkqUHJldlB0ciA9IFhMb2dCeXRlUG9zVG9SZWNQdHIocHJl dmJ5dGVwb3MpOwotCiAJQXNzZXJ0KFhMb2dTZWdtZW50T2Zmc2V0KCpFbmRQb3MsIHdhbF9zZWdt ZW50X3NpemUpID09IDApOwogCUFzc2VydChYTG9nUmVjUHRyVG9CeXRlUG9zKCpFbmRQb3MpID09 IGVuZGJ5dGVwb3MpOwogCUFzc2VydChYTG9nUmVjUHRyVG9CeXRlUG9zKCpTdGFydFBvcykgPT0g c3RhcnRieXRlcG9zKTsKLQlBc3NlcnQoWExvZ1JlY1B0clRvQnl0ZVBvcygqUHJldlB0cikgPT0g cHJldmJ5dGVwb3MpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMjM2LDcgKzEyMzIsNyBAQCBD b3B5WExvZ1JlY29yZFRvV0FMKGludCB3cml0ZV9sZW4sIGJvb2wgaXNMb2dTd2l0Y2gsIFhMb2dS ZWNEYXRhICpyZGF0YSwKIAkgKiBpbnNlcnRpbmcgdG8uCiAJICovCiAJQ3VyclBvcyA9IFN0YXJ0 UG9zOwotCWN1cnJwb3MgPSBHZXRYTG9nQnVmZmVyKEN1cnJQb3MsIHRsaSk7CisJY3VycnBvcyA9 IEdldFhMb2dCdWZmZXIoQ3VyclBvcywgQ3VyclBvcywgdGxpKTsKIAlmcmVlc3BhY2UgPSBJTlNF UlRfRlJFRVNQQUNFKEN1cnJQb3MpOwogCiAJLyoKQEAgLTEyNzMsNyArMTI2OSw3IEBAIENvcHlY TG9nUmVjb3JkVG9XQUwoaW50IHdyaXRlX2xlbiwgYm9vbCBpc0xvZ1N3aXRjaCwgWExvZ1JlY0Rh dGEgKnJkYXRhLAogCQkJICogcGFnZSB3YXMgaW5pdGlhbGl6ZWQsIGluIEFkdmFuY2VYTEluc2Vy dEJ1ZmZlciwgYW5kIHdlJ3JlIHRoZQogCQkJICogb25seSBiYWNrZW5kIHRoYXQgbmVlZHMgdG8g c2V0IHRoZSBjb250cmVjb3JkIGZsYWcuCiAJCQkgKi8KLQkJCWN1cnJwb3MgPSBHZXRYTG9nQnVm ZmVyKEN1cnJQb3MsIHRsaSk7CisJCQljdXJycG9zID0gR2V0WExvZ0J1ZmZlcihDdXJyUG9zLCBD dXJyUG9zLCB0bGkpOwogCQkJcGFnZWhkciA9IChYTG9nUGFnZUhlYWRlcikgY3VycnBvczsKIAkJ CXBhZ2VoZHItPnhscF9yZW1fbGVuID0gd3JpdGVfbGVuIC0gd3JpdHRlbjsKIAkJCXBhZ2VoZHIt PnhscF9pbmZvIHw9IFhMUF9GSVJTVF9JU19DT05UUkVDT1JEOwpAQCAtMTM0Niw3ICsxMzQyLDcg QEAgQ29weVhMb2dSZWNvcmRUb1dBTChpbnQgd3JpdGVfbGVuLCBib29sIGlzTG9nU3dpdGNoLCBY TG9nUmVjRGF0YSAqcmRhdGEsCiAJCQkgKiAod2hpY2ggaXRzZWxmIGNhbGxzIHRoZSB0d28gbWV0 aG9kcyB3ZSBuZWVkKSB0byBnZXQgdGhlIHBvaW50ZXIKIAkJCSAqIGFuZCB6ZXJvIG1vc3Qgb2Yg dGhlIHBhZ2UuICBUaGVuIHdlIGp1c3QgemVybyB0aGUgcGFnZSBoZWFkZXIuCiAJCQkgKi8KLQkJ CWN1cnJwb3MgPSBHZXRYTG9nQnVmZmVyKEN1cnJQb3MsIHRsaSk7CisJCQljdXJycG9zID0gR2V0 WExvZ0J1ZmZlcihDdXJyUG9zLCBDdXJyUG9zLCB0bGkpOwogCQkJTWVtU2V0KGN1cnJwb3MsIDAs IFNpemVPZlhMb2dTaG9ydFBIRCk7CiAKIAkJCUN1cnJQb3MgKz0gWExPR19CTENLU1o7CkBAIC0x MzY0LDYgKzEzNjAsOTAgQEAgQ29weVhMb2dSZWNvcmRUb1dBTChpbnQgd3JpdGVfbGVuLCBib29s IGlzTG9nU3dpdGNoLCBYTG9nUmVjRGF0YSAqcmRhdGEsCiAJCQkJZXJybXNnX2ludGVybmFsKCJz cGFjZSByZXNlcnZlZCBmb3IgV0FMIHJlY29yZCBkb2VzIG5vdCBtYXRjaCB3aGF0IHdhcyB3cml0 dGVuIikpOwogfQogCitzdGF0aWMgWExvZ1JlY1B0cgorR2V0UHJldlJlY1B0cihYTG9nUmVjUHRy IGhkciwgVGltZUxpbmVJRCB0bGkpCit7CisJdWludDY0CQl4bHByZXZieXRlcG9zOworCWNoYXIJ CSp4bF9wcmV2X3BvczsKKwlpbnQJCQlmcmVlc3BhY2U7CisKKwlYTG9nUmVjUHRyCXJlczsKKwlY TG9nUmVjUHRyCXhsX3ByZXZfcHRyOworCisJeGxwcmV2Ynl0ZXBvcyA9IFhMb2dSZWNQdHJUb0J5 dGVQb3MoaGRyKSArIG9mZnNldG9mKFhMb2dSZWNvcmQsIHhsX3ByZXYpOworCXhsX3ByZXZfcHRy ID0gWExvZ0J5dGVQb3NUb1JlY1B0cih4bHByZXZieXRlcG9zKTsKKwl4bF9wcmV2X3BvcyA9IEdl dFhMb2dCdWZmZXIoeGxfcHJldl9wdHIsIGhkciwgdGxpKTsKKwlmcmVlc3BhY2UgPSBJTlNFUlRf RlJFRVNQQUNFKHhsX3ByZXZfcHRyKTsKKworCWlmIChmcmVlc3BhY2UgPj0gc2l6ZW9mKFhMb2dS ZWNQdHIpKQorCXsKKwkJcmVzID0gKigoWExvZ1JlY1B0ciAqKSB4bF9wcmV2X3Bvcyk7CisJfQor CWVsc2UKKwl7CisJCWNoYXIJKnJlc19kYXRhOworCisJCXJlc19kYXRhID0gKGNoYXIgKikgJnJl czsKKwkJbWVtY3B5KHJlc19kYXRhLCB4bF9wcmV2X3BvcywgZnJlZXNwYWNlKTsKKworCQlpZiAo WExvZ1NlZ21lbnRPZmZzZXQoeGxfcHJldl9wdHIgKyBmcmVlc3BhY2UsIHdhbF9zZWdtZW50X3Np emUpID09IDApCisJCXsKKwkJCXhsX3ByZXZfcG9zICs9IFNpemVPZlhMb2dMb25nUEhEOworCQl9 CisJCWVsc2UKKwkJeworCQkJeGxfcHJldl9wb3MgKz0gU2l6ZU9mWExvZ1Nob3J0UEhEOworCQl9 CisKKwkJbWVtY3B5KHJlc19kYXRhICsgZnJlZXNwYWNlLCB4bF9wcmV2X3Bvcywgc2l6ZW9mKFhM b2dSZWNQdHIpIC0gZnJlZXNwYWNlKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMg dm9pZAorU2V0UHJldlJlY1B0cihYTG9nUmVjUHRyIGhkciwgWExvZ1JlY1B0ciB4bF9wcmV2X3Rv X2luc2VydCwgVGltZUxpbmVJRCB0bGksIGJvb2wgaW5fb3JkZXIpCit7CisJdWludDY0CQl4bHBy ZXZieXRlcG9zOworCWNoYXIJCSp4bF9wcmV2X3BvczsKKwlpbnQJCQlmcmVlc3BhY2U7CisKKwlY TG9nUmVjUHRyCXhsX3ByZXZfcHRyOworCisJeGxwcmV2Ynl0ZXBvcyA9IFhMb2dSZWNQdHJUb0J5 dGVQb3MoaGRyKSArIG9mZnNldG9mKFhMb2dSZWNvcmQsIHhsX3ByZXYpOworCXhsX3ByZXZfcHRy ID0gWExvZ0J5dGVQb3NUb1JlY1B0cih4bHByZXZieXRlcG9zKTsKKworCWlmIChpbl9vcmRlcikK KwkJeGxfcHJldl9wb3MgPSBHZXRYTG9nQnVmZmVyKHhsX3ByZXZfcHRyLCB4bF9wcmV2X3B0ciwg dGxpKTsKKwllbHNlCisJCXhsX3ByZXZfcG9zID0gR2V0WExvZ0J1ZmZlcih4bF9wcmV2X3B0ciwg eGxfcHJldl90b19pbnNlcnQsIHRsaSk7CisKKwlmcmVlc3BhY2UgPSBJTlNFUlRfRlJFRVNQQUNF KHhsX3ByZXZfcHRyKTsKKworCWlmIChmcmVlc3BhY2UgPj0gc2l6ZW9mKFhMb2dSZWNQdHIpKQor CXsKKwkJKigoWExvZ1JlY1B0ciAqKSB4bF9wcmV2X3BvcykgPSB4bF9wcmV2X3RvX2luc2VydDsK Kwl9CisJZWxzZQorCXsKKwkJY2hhcgkqeGxfcHJldl90b19pbnNlcnRfZGF0YTsKKworCQl4bF9w cmV2X3RvX2luc2VydF9kYXRhID0gKGNoYXIgKikgJnhsX3ByZXZfdG9faW5zZXJ0OworCQltZW1j cHkoeGxfcHJldl9wb3MsIHhsX3ByZXZfdG9faW5zZXJ0X2RhdGEsIGZyZWVzcGFjZSk7CisKKwkJ aWYgKFhMb2dTZWdtZW50T2Zmc2V0KHhsX3ByZXZfcHRyICsgZnJlZXNwYWNlLCB3YWxfc2VnbWVu dF9zaXplKSA9PSAwKQorCQl7CisJCQl4bF9wcmV2X3BvcyArPSBTaXplT2ZYTG9nTG9uZ1BIRDsK KwkJfQorCQllbHNlCisJCXsKKwkJCXhsX3ByZXZfcG9zICs9IFNpemVPZlhMb2dTaG9ydFBIRDsK KwkJfQorCisJCW1lbWNweSh4bF9wcmV2X3BvcywgeGxfcHJldl90b19pbnNlcnRfZGF0YSArIGZy ZWVzcGFjZSwgc2l6ZW9mKFhMb2dSZWNQdHIpIC0gZnJlZXNwYWNlKTsKKwl9Cit9CisKIC8qCiAg KiBBY3F1aXJlIGEgV0FMIGluc2VydGlvbiBsb2NrLCBmb3IgaW5zZXJ0aW5nIHRvIFdBTC4KICAq LwpAQCAtMTUyMiw5ICsxNjAyLDcgQEAgV2FpdFhMb2dJbnNlcnRpb25zVG9GaW5pc2goWExvZ1Jl Y1B0ciB1cHRvKQogCQlyZXR1cm4gaW5zZXJ0ZWQ7CiAKIAkvKiBSZWFkIHRoZSBjdXJyZW50IGlu c2VydCBwb3NpdGlvbiAqLwotCVNwaW5Mb2NrQWNxdWlyZSgmSW5zZXJ0LT5pbnNlcnRwb3NfbGNr KTsKLQlieXRlcG9zID0gSW5zZXJ0LT5DdXJyQnl0ZVBvczsKLQlTcGluTG9ja1JlbGVhc2UoJklu c2VydC0+aW5zZXJ0cG9zX2xjayk7CisJYnl0ZXBvcyA9IHBnX2F0b21pY19yZWFkX3U2NCgmSW5z ZXJ0LT5DdXJyQnl0ZVBvcyk7CiAJcmVzZXJ2ZWRVcHRvID0gWExvZ0J5dGVQb3NUb0VuZFJlY1B0 cihieXRlcG9zKTsKIAogCS8qCkBAIC0xNjI5LDcgKzE3MDcsNyBAQCBXYWl0WExvZ0luc2VydGlv bnNUb0ZpbmlzaChYTG9nUmVjUHRyIHVwdG8pCiAgKiBsYXRlciwgYmVjYXVzZSBvbGRlciBidWZm ZXJzIG1pZ2h0IGJlIHJlY3ljbGVkIGFscmVhZHkpCiAgKi8KIHN0YXRpYyBjaGFyICoKLUdldFhM b2dCdWZmZXIoWExvZ1JlY1B0ciBwdHIsIFRpbWVMaW5lSUQgdGxpKQorR2V0WExvZ0J1ZmZlcihY TG9nUmVjUHRyIHB0ciwgWExvZ1JlY1B0ciB1cHRvLCBUaW1lTGluZUlEIHRsaSkKIHsKIAlpbnQJ CQlpZHg7CiAJWExvZ1JlY1B0cgllbmRwdHI7CkBAIC0xNjkwLDE0ICsxNzY4LDE0IEBAIEdldFhM b2dCdWZmZXIoWExvZ1JlY1B0ciBwdHIsIFRpbWVMaW5lSUQgdGxpKQogCQkgKiBzdXJlIHRoYXQg aXQncyBpbml0aWFsaXplZCwgYmVmb3JlIHdlIGxldCBpbnNlcnRpbmdBdCB0byBtb3ZlIHBhc3QK IAkJICogdGhlIHBhZ2UgaGVhZGVyLgogCQkgKi8KLQkJaWYgKHB0ciAlIFhMT0dfQkxDS1NaID09 IFNpemVPZlhMb2dTaG9ydFBIRCAmJgotCQkJWExvZ1NlZ21lbnRPZmZzZXQocHRyLCB3YWxfc2Vn bWVudF9zaXplKSA+IFhMT0dfQkxDS1NaKQotCQkJaW5pdGlhbGl6ZWRVcHRvID0gcHRyIC0gU2l6 ZU9mWExvZ1Nob3J0UEhEOwotCQllbHNlIGlmIChwdHIgJSBYTE9HX0JMQ0tTWiA9PSBTaXplT2ZY TG9nTG9uZ1BIRCAmJgotCQkJCSBYTG9nU2VnbWVudE9mZnNldChwdHIsIHdhbF9zZWdtZW50X3Np emUpIDwgWExPR19CTENLU1opCi0JCQlpbml0aWFsaXplZFVwdG8gPSBwdHIgLSBTaXplT2ZYTG9n TG9uZ1BIRDsKKwkJaWYgKHVwdG8gJSBYTE9HX0JMQ0tTWiA9PSBTaXplT2ZYTG9nU2hvcnRQSEQg JiYKKwkJCVhMb2dTZWdtZW50T2Zmc2V0KHVwdG8sIHdhbF9zZWdtZW50X3NpemUpID4gWExPR19C TENLU1opCisJCQlpbml0aWFsaXplZFVwdG8gPSB1cHRvIC0gU2l6ZU9mWExvZ1Nob3J0UEhEOwor CQllbHNlIGlmICh1cHRvICUgWExPR19CTENLU1ogPT0gU2l6ZU9mWExvZ0xvbmdQSEQgJiYKKwkJ CQkgWExvZ1NlZ21lbnRPZmZzZXQodXB0bywgd2FsX3NlZ21lbnRfc2l6ZSkgPCBYTE9HX0JMQ0tT WikKKwkJCWluaXRpYWxpemVkVXB0byA9IHVwdG8gLSBTaXplT2ZYTG9nTG9uZ1BIRDsKIAkJZWxz ZQotCQkJaW5pdGlhbGl6ZWRVcHRvID0gcHRyOworCQkJaW5pdGlhbGl6ZWRVcHRvID0gdXB0bzsK IAogCQlXQUxJbnNlcnRMb2NrVXBkYXRlSW5zZXJ0aW5nQXQoaW5pdGlhbGl6ZWRVcHRvKTsKIApA QCAtNjAxOCw4ICs2MDk2LDcgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkgKiBwcmV2aW91cyBpbmNh cm5hdGlvbi4KIAkgKi8KIAlJbnNlcnQgPSAmWExvZ0N0bC0+SW5zZXJ0OwotCUluc2VydC0+UHJl dkJ5dGVQb3MgPSBYTG9nUmVjUHRyVG9CeXRlUG9zKGVuZE9mUmVjb3ZlcnlJbmZvLT5sYXN0UmVj KTsKLQlJbnNlcnQtPkN1cnJCeXRlUG9zID0gWExvZ1JlY1B0clRvQnl0ZVBvcyhFbmRPZkxvZyk7 CisJcGdfYXRvbWljX3dyaXRlX3U2NCgmSW5zZXJ0LT5DdXJyQnl0ZVBvcywgWExvZ1JlY1B0clRv Qnl0ZVBvcyhFbmRPZkxvZykpOwogCiAJLyoKIAkgKiBUcmlja3kgcG9pbnQgaGVyZTogbGFzdFBh Z2UgY29udGFpbnMgdGhlICpsYXN0KiBibG9jayB0aGF0IHRoZSBMYXN0UmVjCkBAIC02MDUzLDYg KzYxMzAsNyBAQCBTdGFydHVwWExPRyh2b2lkKQogCQkgKi8KIAkJWExvZ0N0bC0+SW5pdGlhbGl6 ZWRVcFRvID0gRW5kT2ZMb2c7CiAJfQorCVNldFByZXZSZWNQdHIoRW5kT2ZMb2csIGVuZE9mUmVj b3ZlcnlJbmZvLT5sYXN0UmVjLCBuZXdUTEksIHRydWUpOwogCiAJLyoKIAkgKiBVcGRhdGUgbG9j YWwgYW5kIHNoYXJlZCBzdGF0dXMuICBUaGlzIGlzIE9LIHRvIGRvIHdpdGhvdXQgYW55IGxvY2tz CkBAIC03MDA1LDcgKzcwODMsNyBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAogCWlm IChzaHV0ZG93bikKIAl7Ci0JCVhMb2dSZWNQdHIJY3VySW5zZXJ0ID0gWExvZ0J5dGVQb3NUb1Jl Y1B0cihJbnNlcnQtPkN1cnJCeXRlUG9zKTsKKwkJWExvZ1JlY1B0cgljdXJJbnNlcnQgPSBYTG9n Qnl0ZVBvc1RvUmVjUHRyKHBnX2F0b21pY19yZWFkX3U2NCgmSW5zZXJ0LT5DdXJyQnl0ZVBvcykp OwogCiAJCS8qCiAJCSAqIENvbXB1dGUgbmV3IFJFRE8gcmVjb3JkIHB0ciA9IGxvY2F0aW9uIG9m IG5leHQgWExPRyByZWNvcmQuCkBAIC03NDczLDcgKzc1NTEsNyBAQCBDcmVhdGVPdmVyd3JpdGVD b250cmVjb3JkUmVjb3JkKFhMb2dSZWNQdHIgYWJvcnRlZF9sc24sIFhMb2dSZWNQdHIgcGFnZVB0 ciwKIAkgKiBpbnNlcnRpb24gbG9jayBpcyBqdXN0IHBybyBmb3JtYS4KIAkgKi8KIAlXQUxJbnNl cnRMb2NrQWNxdWlyZSgpOwotCXBhZ2VoZHIgPSAoWExvZ1BhZ2VIZWFkZXIpIEdldFhMb2dCdWZm ZXIocGFnZVB0ciwgbmV3VExJKTsKKwlwYWdlaGRyID0gKFhMb2dQYWdlSGVhZGVyKSBHZXRYTG9n QnVmZmVyKHBhZ2VQdHIsIHBhZ2VQdHIsIG5ld1RMSSk7CiAJcGFnZWhkci0+eGxwX2luZm8gfD0g WExQX0ZJUlNUX0lTX09WRVJXUklURV9DT05UUkVDT1JEOwogCVdBTEluc2VydExvY2tSZWxlYXNl KCk7CiAKQEAgLTk0MzcsOSArOTUxNSw3IEBAIEdldFhMb2dJbnNlcnRSZWNQdHIodm9pZCkKIAlY TG9nQ3RsSW5zZXJ0ICpJbnNlcnQgPSAmWExvZ0N0bC0+SW5zZXJ0OwogCXVpbnQ2NAkJY3VycmVu dF9ieXRlcG9zOwogCi0JU3BpbkxvY2tBY3F1aXJlKCZJbnNlcnQtPmluc2VydHBvc19sY2spOwot CWN1cnJlbnRfYnl0ZXBvcyA9IEluc2VydC0+Q3VyckJ5dGVQb3M7Ci0JU3BpbkxvY2tSZWxlYXNl KCZJbnNlcnQtPmluc2VydHBvc19sY2spOworCWN1cnJlbnRfYnl0ZXBvcyA9IHBnX2F0b21pY19y ZWFkX3U2NCgmSW5zZXJ0LT5DdXJyQnl0ZVBvcyk7CiAKIAlyZXR1cm4gWExvZ0J5dGVQb3NUb1Jl Y1B0cihjdXJyZW50X2J5dGVwb3MpOwogfQotLSAKMi40My4wCgo= --_002_PH7PR11MB579612D1E9EFB02A3DB60777EF142PH7PR11MB5796namp_--