From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 33F9FD30CE5 for ; Tue, 13 Jan 2026 22:37:06 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E45B910E561; Tue, 13 Jan 2026 22:37:05 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="EcwACVeI"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.12]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1ACED10E561 for ; Tue, 13 Jan 2026 22:37:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1768343824; x=1799879824; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=2p9uuqxIetZq0LQwFkTfFU357vghynL23N36hGDB3Vc=; b=EcwACVeIVuxk3bJp4W26oE/civ1pZ+rQLhmBkvE1c8F1zVFKaKJG1IrN 3I1bhAUr8mDn+XBsDK9UsJNYO4Xs45hJO2XwAtQadnJJG2tNgB9erihHp tvnEL2yg58wGOUyJWvJMK9L7R1IY7yMrIwIAVPV02UIZIHVZY8S0KbnVN J8vtv8W2EXCPudBDY4PgRHMZotWCtfcHrrfsIoDtGAN13X1jWJqlrdwKY B3U55TA92v5DMvzuajgwIBCuyHgdm1Nd4TnT0S9iAUDeKxuo+S8xas0Ua 2ZaMk/a2zXitgFUvRHmdLkUeFeRcMu/l3mVgG9v7Rk91LIrRTxgZWPaQ2 w==; X-CSE-ConnectionGUID: gqM0hFFGR4qBcsg9lKljOw== X-CSE-MsgGUID: UC8zubuuSmyt+zx2jVoxkA== X-IronPort-AV: E=McAfee;i="6800,10657,11670"; a="73496955" X-IronPort-AV: E=Sophos;i="6.21,224,1763452800"; d="scan'208";a="73496955" Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by fmvoesa106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2026 14:37:04 -0800 X-CSE-ConnectionGUID: WD2fF9fcTmiAooUV8wu2KQ== X-CSE-MsgGUID: UDfBBaKZTZi0NIPvbL1ORQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,224,1763452800"; d="scan'208";a="205084920" Received: from orsmsx903.amr.corp.intel.com ([10.22.229.25]) by fmviesa010.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2026 14:37:03 -0800 Received: from ORSMSX902.amr.corp.intel.com (10.22.229.24) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Tue, 13 Jan 2026 14:37:03 -0800 Received: from ORSEDG901.ED.cps.intel.com (10.7.248.11) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29 via Frontend Transport; Tue, 13 Jan 2026 14:37:03 -0800 Received: from SN4PR2101CU001.outbound.protection.outlook.com (40.93.195.4) by edgegateway.intel.com (134.134.137.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Tue, 13 Jan 2026 14:37:02 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kTknMGUxMFhrYFloh+sVoRx3aEK/1eSPRjEqzRbMpZHMwyr/vMpu4J+70CBoTwSyhY3JwnuSI4ur1a1P7FNv6euIn1N5eXAmW6H4j6brl6ktzhkhG0nGgpwKmykDmOsstu6ac8RuiEEsA70RNaO7tU5iNFYcLWFjUTCVnZ3yWpMVY9ufPCmBG2Yt7GxihasSnnrIAcdeqHZIoIe9v7PdReTupKAslEvkAhxw1Dn3MCOv+M/BzLOaLPTtq04l1fOUXtfmiYPjEXVp/IULITTG0uBJALb0lh+5p6phDiFPunCoDHQjb4/UoB7M7/m7PGuKwGNyECbWAJnSXfSTj+1h8Q== 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=2p9uuqxIetZq0LQwFkTfFU357vghynL23N36hGDB3Vc=; b=i7NlqZt92rECKqWJwhSzI8yUy3OkjCb8GdVdOP0YR6NdsdWogGF3GSfZc86eEbuFUAw+/kq6HwDFbLNvfA9U3UQcOMo49uk9E9Wis/Ji6h6Al/IandXLP2xZESCnZemIdP9Nc6Vln0fX5cqiIrq4kxB07R9HUZswSp2/HMlUFnUxaG7IN8dcfTn7QSsiLz38t3pJVhb+zZneAqwZ0t6pkY5wFefwACpiCRaIvSRqyRIy8kM2zxRfMipkroJxy9+pBxHqppTq9wipJKVAWiL/GM7zF3B1CWpyp2W3r5pFDrB0uvF7AdGw3MXjyQiCZhNn/fKXN+uHqz9tQqLDnJJnCw== 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 DM8PR11MB5573.namprd11.prod.outlook.com (2603:10b6:8:3b::7) by IA1PR11MB6289.namprd11.prod.outlook.com (2603:10b6:208:3e7::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.7; Tue, 13 Jan 2026 22:36:59 +0000 Received: from DM8PR11MB5573.namprd11.prod.outlook.com ([fe80::6a14:6aa3:4339:4415]) by DM8PR11MB5573.namprd11.prod.outlook.com ([fe80::6a14:6aa3:4339:4415%4]) with mapi id 15.20.9520.005; Tue, 13 Jan 2026 22:36:59 +0000 From: "Summers, Stuart" To: "Brost, Matthew" CC: "intel-xe@lists.freedesktop.org" Subject: Re: [PATCH v3 10/11] drm/xe: Add context-based invalidation to GuC TLB invalidation backend Thread-Topic: [PATCH v3 10/11] drm/xe: Add context-based invalidation to GuC TLB invalidation backend Thread-Index: AQHchBsQ3tfQWorckEmnPX6cI++PVbVPT32AgAAB9ACAAWCYgA== Date: Tue, 13 Jan 2026 22:36:59 +0000 Message-ID: <976ce0e45b400122953ede51994d0d2a32782173.camel@intel.com> References: <20260112232730.3347414-1-matthew.brost@intel.com> <20260112232730.3347414-11-matthew.brost@intel.com> <14464929638a4c6d727af6cda9152720dda7c468.camel@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 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: DM8PR11MB5573:EE_|IA1PR11MB6289:EE_ x-ms-office365-filtering-correlation-id: 3a6af8a5-0491-472c-739f-08de52f44385 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|366016|38070700021; x-microsoft-antispam-message-info: =?utf-8?B?eUZKekk3dkNGWW9SNDFPOGRpbjNBRnJObnJ6Z3RwSXU1SS9oVVdkajJVdmRz?= =?utf-8?B?NTdYZ0hxWXg5ZDN2ZzFFUkFEYUhCMlRJTzNBc1RUYllHWEpEbmZhd1RrTi9m?= =?utf-8?B?eHdIVHB6NXBjQmFqaVhRSkxOb3hHdTNDYlZJLyt5bHJlVjc2aDhTVFBSMGQr?= =?utf-8?B?SkFudWowU3F5a2lMM1FFUnNZVUxHRnQvbWtOeUo0bGg2VFFvWndTQWx5WEU4?= =?utf-8?B?dS9xSEluSTNZbVQ3WThTTW83UGtZVlBaamhiR3VxSm5BQTBxS08xQjhqZEcv?= =?utf-8?B?NmdZTVNobXVWalZ1bkp6ZkZPYXNjOThhN0tVN3d1Y1lMOXZZR3NDcFowWktE?= =?utf-8?B?OTZYMDJXVWVmSXpPT2VVMm1IWHIwNXcvUk1SUVhiYjYzUEl1NVlVUE5keERU?= =?utf-8?B?ZTlLanp0Nm1nbUxJMUloekd3aUNjdkM1VDhSdlFOVkFTUmZMaEkwU3RVa29I?= =?utf-8?B?NVFHd242YTY0RWk0SzZURFlSWFdOeWYrdWtETURnV29ZcDdGZDltN0UwcklD?= =?utf-8?B?cWRqWHUrbGwwaFdPWk83NFZydUsydUtmcGVsVmtNdklWTm1tVmk2OTJ3cXpV?= =?utf-8?B?NTMzUDg0M25oNE5BcEtnRzk0b2RDOVR1WDIxWWpPc29WdHRtVGFKSkhGbGF5?= =?utf-8?B?SElTVjIrNmNGSHhsWVcvaG9tVG04OVZrZnd0dGd6elV2ZmszdUQ5dU5TNkNH?= =?utf-8?B?ZE1RcG5zN2VvbzJOZXpabFg5K2M0cEVkVUlUU29WRHVhVG50YmlHbWNwams0?= =?utf-8?B?SzZuUDh4TUoxZWh5ZjVTK3hUTDBqbm5YdXA0dU95bnprYS93dWZrYnJHSW52?= =?utf-8?B?dWFNWDR6azEwNXNHK3dSSUNGZjNWdk1sYkV5aDRORFpxZXlsa0VhM3B4WEVR?= =?utf-8?B?OUtCUURRQ0lWQlgyVnlzdXZYb1RrWm8xL1YvUTQzRlB3ZnVrUmo1S3lLcnQz?= =?utf-8?B?TnJ3WkRzY2sxaCtBZzlYWU5MSllMNmtUTnl4ZWdPYVpya2hvc2xsSUpMU3ZQ?= =?utf-8?B?T1k5MHZRYUQrc294MTJ3bUlUSWRHY05FejlOYTlOM0MyUzM5cWs2cEtpWnpJ?= =?utf-8?B?SllCc21yVzdoWlExL0xNZUNYS3JYc2VkOEdISWw3VkRWZWd5ZER3OVczVVR2?= =?utf-8?B?dENWV3lKSk9xN0kvRUErWlRrNHpzYnJxUDczRDVPTDBkMUpaUk9OWk5ZUTVT?= =?utf-8?B?ZTlUelQ0M05hZWxHbkora1dFSmJVcjhmMXd5c2pWanFUZWMrQUdQQUZFVXlR?= =?utf-8?B?SWpOd1E3VHhtWVNuUVp0Q0YvN2ZpRFRXUjVFaDBYendySFpHSTZYd2llU0ZT?= =?utf-8?B?UGlSQXkzQ3ArOGRaYXBiaTloM2ZwcnNZcGNKT1g4RFZlZmlLbWlaMFJuRlJy?= =?utf-8?B?ZWtRYVV2YmJudDZaNGhWR2RIeDdxZ09aejdmWTNQcVpEaUY0S3ljTHVkdFRt?= =?utf-8?B?MFl3ZkRGYURBZFFkRVNvbG8zVkp3SFFTYTZ3T1NOZmp6VjZEZktES2I2RFhO?= =?utf-8?B?bzZpZkZpdHV3bnVpL0R0RWFOVTlGbnFYbzloYkMxeGFZVXBiK1c1MGxzUnA5?= =?utf-8?B?VG5jTzNaOGo0VktTWEFXczZyMGNWYW5vNDRhQ0pWd0lVTGJKOVBsMEtTMk02?= =?utf-8?B?cDdydDgwTS85bVdUVHdIb2tVTHhmcThNNlFyZjVueFNWRy84ZlVsZEhzVXM4?= =?utf-8?B?dzlOc2hyZkNDWnhWUGFqVzlCek1vQ01WUEk4aTZYTEE3UExIeEFacUVjN2lV?= =?utf-8?B?K1hiL2taa1JmOFFieE1iaTBOaWFZdU54WWlaT25nbGptS1lyenRoWThiTi9s?= =?utf-8?B?SjZ2TmxhK1puYUxxTUdGRDMyVlNBamRDaWpWWXM0NUxSemY4Z04yQ2R1dkI2?= =?utf-8?B?c2daWmMyK1E5dkplWHdvUTFJd1pZeTNheUxVMURqSXQ0eWZHWFY3V01iU2Ev?= =?utf-8?B?Y3d1bDRUYzBzRWdaemtUajBYV3A2UjV0ZUVHemRtU1pWT2lXaFN3K1hrZVNC?= =?utf-8?B?OUVjZnZGUENOUFpPbWRFaEU0RTRIcGVnbTZwTmtTL2pEd0ZYY0VZMnJLcDho?= =?utf-8?Q?yoTcNf?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR11MB5573.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(38070700021); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?d0NGOHhyamU3d0d1QUZuUUJ0V3hBTTh5K0FuVzI5cjBoSjV4THcwQktXbTVM?= =?utf-8?B?VjVENFhEZFFmbml5SUNzejNVKy92VDhZRDdxY3dPRFdJdWllRVoyUHZ3bjI0?= =?utf-8?B?YVhST3U4NFNtNDdQUnJ5c0hpR0I5NjUvVjBCUkRhN01RdVB3N3k1WVJDVnE0?= =?utf-8?B?SGhiVGY5SldOZE9vRGdYS2EzWTBkVWdVQVVsRS9wZmVUNkpEVGNlQVNsR3hm?= =?utf-8?B?Qm0xVTd6TU9kU3BZQVFObFd4UjdNQkpSRCtnYllzTU5CSHdYeXhyZWRhKzM0?= =?utf-8?B?ck92dmc5TC82clFxZDV5emZaWWFLdTkxbWhjNmZWT000OEMzR002Yk4zUndI?= =?utf-8?B?QjBaNkVLS09xb083MWRjZzZDdXJyT3p3VktqK3BnK3JNRHdhdDNqRkQ0Qmgz?= =?utf-8?B?V3JrL2F4L0tlbTdLSXhZaHY0SHdiZDd3SS9Wc1BDSjRDb3ZEYlJWU3NobG1n?= =?utf-8?B?ZFgzbkJqdkRVdkxkNjhYdzhaditoVVVFSnVOc01BRnY1MUNubk83NGxzM2h2?= =?utf-8?B?Z3pGS0pSNU8rT25xTDRoVXMyb2YzREZIQk56bXpZV2NFWHJycThjbHp0VFRw?= =?utf-8?B?Sk9zaG1hQ0FoVzNnOXVkWXJuanJjenFGYWxQRUdPU1prRjBkbkROaUpGMU54?= =?utf-8?B?aUl4NCtVaklqWXdEelRpaU53bk0yK0RJMFZRS3FOVERhSTk1Z0owWUFlYUVj?= =?utf-8?B?c2xRUUJNUDR1U1NjdjJ2V0EzN1Raa0FYamorWFViVWlLOXBTa054cjkzajBt?= =?utf-8?B?UE9NcnJsMjlEZmJ4R080SkhBUTRsNDJsR0hqKzI0ZFBhVC85RmRaTSsxLzFJ?= =?utf-8?B?cGV4YWpHdzNXdE5oMHY4ZVp3V0xHRUs2b0U4cWVaSm1XVEQrMHZGcU9QYytR?= =?utf-8?B?Wmp1Zm02VVpvV1UvdFZMTWV5YU5RVkZ3N1IrVnJ6amlNT29WSE1sODYrdFVG?= =?utf-8?B?RW1odGZuMjArMG40TjdTTzBBU0piaDh1bWVJVTVVaDlOMEp0b0x4ZytsTTFo?= =?utf-8?B?b1VWcGxxWGw2NFYxSVFTbEZwdkFZaC80UldUaVJEc3R2K2JTTmRiQ3c2OTA5?= =?utf-8?B?M0dCczdiQ1JQNlU5UXdvWjRxYWtOd0xaMmVHZHYwMmxyQjVBUkRlb1krTldZ?= =?utf-8?B?NExSNHZlZm15eTM1SVREZFBOZ1U4bWNTOHlXN0FXMmFzTGNYanhqREh4Mm1n?= =?utf-8?B?VjMra29jeVkxVTRnMnlsdHIvUWdwQjhOaWRUaGJZbHFuWkZzUklGeUllMEFM?= =?utf-8?B?T0htVkZuV2RBWnVPUSs1c0poME0zYmhVZnVHK3NKZlR5TzNKbysyWDM5MkpC?= =?utf-8?B?bWVvRkE5VUw4UEd6QlhtTXFOUVI2WXpiWTQ2dER3eTJuWmdLK1JmdGgrc3hV?= =?utf-8?B?cVpWSEJhbGVTOFB0YWZTdlg5MnlTMUJGdEU5VUtjRkswdUlNdllGNVkwbmxj?= =?utf-8?B?VlB1NHNyVFBQbi9ZTTRBZlpXQSsvYWlMUkFmbFdndlErVlBMZW1IY0ZlK3Fn?= =?utf-8?B?dDdZSVBmM0RBYTFvR3JmZVNQMFBWMWlmN3prNjhnTVMyMzlZWlpSVnZnMVIv?= =?utf-8?B?azRIQzV4ZzdQbXpxRzNmTmp5aEtsNUUza0ErVEZ1T21DSHdDcDB4d1l5blls?= =?utf-8?B?dkdGTmtqcm1WdlhBa3dkMXFmY3FxaDZBMDMxbWthSmNaaDdnMU8xdUp4dG5R?= =?utf-8?B?S1lVNDBDcDJuYzdJNzliMzhlM3BaNk9WbFRSSTRZWkVIS2did1d5THpNb0Rh?= =?utf-8?B?MEhGZTVkRlRPZWJHZDl6L3Zyd1pmTFN0aFFEaFEzYVZRL2lQeGRGcEVsTjJU?= =?utf-8?B?RmVxRG9wZkdnWUhrbGNQdU83bWNYam1BZ0RxUGZIMlI5L3lac1dseXQ2NnFL?= =?utf-8?B?dldnbXhXdzVlbGQ2VjVHZGtFVGR0SWJxUDZqZ1dqOUdHOTlGTmswZEhIVVdU?= =?utf-8?B?WDRpeDRmclR2ckNBYXVaS1VoejlWZ01vdnh6UmRKTyt1UllUdmlSVmIrSFly?= =?utf-8?B?Mk0vcWtiN2phZkhkRXEzckV1OGEwamJUOUxwUzRhejJML0RvQlZkTU1KaU0w?= =?utf-8?B?UFdVZGM5S1pBSEtpNHlaQkcwNzZWVVlJOEFYUjY0b0lBUjNDQTJSa1p6S1pU?= =?utf-8?B?blYwY2V4aUFDY2xJTXVucndvVGZ1OXpJZkpWR3lFZUJsNkZRT1o0MUdCSXNa?= =?utf-8?B?S2dhbVVMSzdzVkpiNW9KdFFEVnBhT2F4d0k3U09FVkJGbU4xODBqOUIzNVlF?= =?utf-8?B?QjRrV0dub3B5WGd1NlBpSFh6N0N1ZFRzdngxNUpFbEVBOUczVm4vL0tlTlph?= =?utf-8?B?MFFBYWNDUWZvdDZndGFRUGxucnlCdFU2bGQrZGZEbmJKZU1xNEh0YUI1bWla?= =?utf-8?Q?hQmAa7rKx7PkTGYw=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR11MB5573.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a6af8a5-0491-472c-739f-08de52f44385 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jan 2026 22:36:59.1081 (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: XDddpXVcGon+sjFC/3ZD+2OqkpKNnpooaAYClxH/UCg0tXsMgVOIaB250/YIxRtJSjqL7xZpSM3kf3pv4F8f9vB+Ud8ZlmZTfPtVofc1ZXo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB6289 X-OriginatorOrg: intel.com X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" T24gTW9uLCAyMDI2LTAxLTEyIGF0IDE3OjM0IC0wODAwLCBNYXR0aGV3IEJyb3N0IHdyb3RlOgo+ IE9uIE1vbiwgSmFuIDEyLCAyMDI2IGF0IDA2OjI4OjAxUE0gLTA3MDAsIFN1bW1lcnMsIFN0dWFy dCB3cm90ZToKPiA+IE9uIE1vbiwgMjAyNi0wMS0xMiBhdCAxNToyNyAtMDgwMCwgTWF0dGhldyBC cm9zdCB3cm90ZToKPiA+ID4gSW50cm9kdWNlIGNvbnRleHQtYmFzZWQgaW52YWxpZGF0aW9uIHN1 cHBvcnQgdG8gdGhlIEd1QyBUTEIKPiA+ID4gaW52YWxpZGF0aW9uCj4gPiA+IGJhY2tlbmQuIFRo aXMgaXMgaW1wbGVtZW50ZWQgYnkgaXRlcmF0aW5nIG92ZXIgZWFjaCBleGVjIHF1ZXVlCj4gPiA+ IHBlciBHVAo+ID4gPiB3aXRoaW4gYSBWTSwgc2tpcHBpbmcgaW5hY3RpdmUgcXVldWVzLCBhbmQg aXNzdWluZyBhIGNvbnRleHQtCj4gPiA+IGJhc2VkCj4gPiA+IChHdUMKPiA+ID4gSUQpIEgyRyBU TEIgaW52YWxpZGF0aW9uLiBBbGwgSDJHIG1lc3NhZ2VzLCBleGNlcHQgdGhlIGZpbmFsIG9uZSwK PiA+ID4gYXJlCj4gPiA+IHNlbnQgd2l0aCBhbiBpbnZhbGlkIHNlcW5vLCB3aGljaCB0aGUgRzJI IGhhbmRsZXIgZHJvcHMgdG8gZW5zdXJlCj4gPiA+IHRoZQo+ID4gPiBUTEIgaW52YWxpZGF0aW9u IGZlbmNlIGlzIG9ubHkgc2lnbmFsZWQgb25jZSBhbGwgSDJHIG1lc3NhZ2VzIGFyZQo+ID4gPiBj b21wbGV0ZWQuCj4gPiA+IAo+ID4gPiBBIHdhdGVybWFyayBtZWNoYW5pc20gaXMgYWxzbyBhZGRl ZCB0byBzd2l0Y2ggYmV0d2VlbiBjb250ZXh0LQo+ID4gPiBiYXNlZAo+ID4gPiBUTEIKPiA+ID4g aW52YWxpZGF0aW9ucyBhbmQgZnVsbCBkZXZpY2Utd2lkZSBpbnZhbGlkYXRpb25zLCBhcyB0aGUg cmV0dXJuCj4gPiA+IG9uCj4gPiA+IGludmVzdG1lbnQgZm9yIGNvbnRleHQtYmFzZWQgaW52YWxp ZGF0aW9uIGRpbWluaXNoZXMgd2hlbiBtYW55Cj4gPiA+IGV4ZWMKPiA+ID4gcXVldWVzIGFyZSBt YXBwZWQuCj4gPiA+IAo+ID4gPiB2MjoKPiA+ID4gwqAtIEZpeCBjaGVja3BhdGNoIHdhcm5pbmdz Cj4gPiA+IHYzOgo+ID4gPiDCoC0gUmViYXNlIG9uIFBSTAo+ID4gPiDCoC0gVXNlIHJlZiBjb3Vu dGluZyB0byBhdm9pZCByYWNpbmcgd2l0aCBkZXJlZ2lzdGVycwo+ID4gPiAKPiA+ID4gU2lnbmVk LW9mZi1ieTogTWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5jb20+Cj4gPiA+IC0t LQo+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2VfdHlwZXMuaMKgIHzCoMKgIDIg Kwo+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfdGxiX2ludmFsLmMgfCAxNDUKPiA+ ID4gKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiA+ID4gwqBkcml2ZXJzL2dwdS9kcm0veGUv eGVfcGNpLmPCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiA+ID4gwqBkcml2ZXJzL2dw dS9kcm0veGUveGVfcGNpX3R5cGVzLmjCoMKgwqDCoCB8wqDCoCAxICsKPiA+ID4gwqA0IGZpbGVz IGNoYW5nZWQsIDE0NSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQo+ID4gPiAKPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2VfdHlwZXMuaAo+ID4gPiBi L2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZpY2VfdHlwZXMuaAo+ID4gPiBpbmRleCA4ZGI4NzBh YWEzODIuLmI1MWFjZmY0ZWRjZCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hl L3hlX2RldmljZV90eXBlcy5oCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZp Y2VfdHlwZXMuaAo+ID4gPiBAQCAtMzU4LDYgKzM1OCw4IEBAIHN0cnVjdCB4ZV9kZXZpY2Ugewo+ ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IGhhc19wcmVfcHJvZF93YTox Owo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKiBAaW5mby5oYXNfcHhw OiBEZXZpY2UgaGFzIFBYUCBzdXBwb3J0ICovCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdTggaGFzX3B4cDoxOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyoqIEBpbmZvLmhhc19jdHhfdGxiX2ludmFsOiBIYXMgY29udGV4dCBiYXNlZAo+ID4gPiBU TEIKPiA+ID4gaW52YWxpZGF0aW9ucyAqLwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdTggaGFzX2N0eF90bGJfaW52YWw6MTsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKiogQGluZm8uaGFzX3JhbmdlX3RsYl9pbnZhbDogSGFzIHJhbmdlIGJhc2Vk Cj4gPiA+IFRMQgo+ID4gPiBpbnZhbGlkYXRpb25zICovCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdTggaGFzX3JhbmdlX3RsYl9pbnZhbDoxOwo+ID4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKiBAaW5mby5oYXNfc29jX3JlbWFwcGVyX3N5c2N0cmw6 IEhhcyBTb0MKPiA+ID4gcmVtYXBwZXIKPiA+ID4gc3lzdGVtIGNvbnRyb2xsZXIgKi8KPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfdGxiX2ludmFsLmMKPiA+ID4g Yi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3RsYl9pbnZhbC5jCj4gPiA+IGluZGV4IDA3MGQy ZTJjYjdjOS4uMzI4ZWNlZDVmNjkyIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v eGUveGVfZ3VjX3RsYl9pbnZhbC5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9n dWNfdGxiX2ludmFsLmMKPiA+ID4gQEAgLTYsMTUgKzYsMTkgQEAKPiA+ID4gwqAjaW5jbHVkZSAi YWJpL2d1Y19hY3Rpb25zX2FiaS5oIgo+ID4gPiDCoAo+ID4gPiDCoCNpbmNsdWRlICJ4ZV9kZXZp Y2UuaCIKPiA+ID4gKyNpbmNsdWRlICJ4ZV9leGVjX3F1ZXVlLmgiCj4gPiA+ICsjaW5jbHVkZSAi eGVfZXhlY19xdWV1ZV90eXBlcy5oIgo+ID4gPiDCoCNpbmNsdWRlICJ4ZV9ndF9zdGF0cy5oIgo+ ID4gPiDCoCNpbmNsdWRlICJ4ZV9ndF90eXBlcy5oIgo+ID4gPiDCoCNpbmNsdWRlICJ4ZV9ndWMu aCIKPiA+ID4gwqAjaW5jbHVkZSAieGVfZ3VjX2N0LmgiCj4gPiA+ICsjaW5jbHVkZSAieGVfZ3Vj X2V4ZWNfcXVldWVfdHlwZXMuaCIKPiA+ID4gwqAjaW5jbHVkZSAieGVfZ3VjX3RsYl9pbnZhbC5o Igo+ID4gPiDCoCNpbmNsdWRlICJ4ZV9mb3JjZV93YWtlLmgiCj4gPiA+IMKgI2luY2x1ZGUgInhl X21taW8uaCIKPiA+ID4gwqAjaW5jbHVkZSAieGVfc2EuaCIKPiA+ID4gwqAjaW5jbHVkZSAieGVf dGxiX2ludmFsLmgiCj4gPiA+ICsjaW5jbHVkZSAieGVfdm0uaCIKPiA+ID4gwqAKPiA+ID4gwqAj aW5jbHVkZSAicmVncy94ZV9ndWNfcmVncy5oIgo+ID4gPiDCoAo+ID4gPiBAQCAtMTU2LDEwICsx NjAsMTYgQEAgc3RhdGljIGludCBzZW5kX3RsYl9pbnZhbF9wcGd0dChzdHJ1Y3QKPiA+ID4geGVf Z3VjCj4gPiA+ICpndWMsIHUzMiBzZXFubywgdTY0IHN0YXJ0LAo+ID4gPiDCoHsKPiA+ID4gwqAj ZGVmaW5lIE1BWF9UTEJfSU5WQUxJREFUSU9OX0xFTsKgwqDCoMKgwqDCoMKgNwo+ID4gPiDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IHhlX2d0ICpndCA9IGd1Y190b19ndChndWMpOwo+ID4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGd1Y190b194ZShndWMpOwo+ID4gPiDC oMKgwqDCoMKgwqDCoMKgdTMyIGFjdGlvbltNQVhfVExCX0lOVkFMSURBVElPTl9MRU5dOwo+ID4g PiDCoMKgwqDCoMKgwqDCoMKgdTY0IGxlbmd0aCA9IGVuZCAtIHN0YXJ0Owo+ID4gPiDCoMKgwqDC oMKgwqDCoMKgaW50IGxlbiA9IDAsIGVycjsKPiA+ID4gwqAKPiA+ID4gK8KgwqDCoMKgwqDCoMKg eGVfZ3RfYXNzZXJ0KGd0LCAodHlwZSA9PSBYRV9HVUNfVExCX0lOVkFMX1BBR0VfU0VMRUNUSVZF Cj4gPiA+ICYmCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIXhlLT5pbmZvLmhhc19jdHhfdGxiX2ludmFsKSB8fAo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHR5cGUgPT0gWEVfR1VDX1RMQl9JTlZBTF9Q QUdFX1NFTEVDVElWRV9DVFgKPiA+ID4gJiYKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgeGUtPmluZm8uaGFzX2N0eF90bGJfaW52YWwpKTsKPiA+ID4gKwo+ ID4gPiDCoMKgwqDCoMKgwqDCoMKgYWN0aW9uW2xlbisrXSA9IFhFX0dVQ19BQ1RJT05fVExCX0lO VkFMSURBVElPTjsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoGFjdGlvbltsZW4rK10gPSAhcHJsX3Nh ID8gc2Vxbm8gOgo+ID4gPiBUTEJfSU5WQUxJREFUSU9OX1NFUU5PX0lOVkFMSUQ7Cj4gPiA+IMKg wqDCoMKgwqDCoMKgwqBpZiAoIWd0X3RvX3hlKGd0KS0+aW5mby5oYXNfcmFuZ2VfdGxiX2ludmFs IHx8Cj4gPiA+IEBAIC0xNjgsOSArMTc4LDExIEBAIHN0YXRpYyBpbnQgc2VuZF90bGJfaW52YWxf cHBndHQoc3RydWN0Cj4gPiA+IHhlX2d1Ywo+ID4gPiAqZ3VjLCB1MzIgc2Vxbm8sIHU2NCBzdGFy dCwKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdTY0IG5vcm1hbGl6ZV9sZW4gPQo+ID4gPiBub3JtYWxpemVfaW52YWxp ZGF0aW9uX3JhbmdlKGd0LAo+ID4gPiAmc3RhcnQsCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiA+ ICZlbmQpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCBuZWVkX2Zs dXNoID0gIXBybF9zYSAmJgo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHNlcW5vICE9IFRMQl9JTlZBTElEQVRJT05fU0VRTk9fSU5WQUxJRDsKPiA+ ID4gwqAKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBGbHVzaCBvbiBO VUxMIGNhc2UsIE1lZGlhIGlzIG5vdCByZXF1aXJlZCB0bwo+ID4gPiBtb2RpZnkgZmx1c2ggZHVl IHRvIG5vIFBQQyBzbyBOT1AgKi8KPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGFjdGlvbltsZW4rK10gPSBNQUtFX0lOVkFMX09QX0ZMVVNIKHR5cGUsCj4gPiA+ICFwcmxfc2Ep Owo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWN0aW9uW2xlbisrXSA9IE1B S0VfSU5WQUxfT1BfRkxVU0godHlwZSwKPiA+ID4gbmVlZF9mbHVzaCk7Cj4gPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWN0aW9uW2xlbisrXSA9IGlkOwo+ID4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFjdGlvbltsZW4rK10gPSBsb3dlcl8zMl9iaXRzKHN0 YXJ0KTsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhY3Rpb25bbGVuKytd ID0gdXBwZXJfMzJfYml0cyhzdGFydCk7Cj4gPiA+IEBAIC0xODEsOCArMTkzLDEwIEBAIHN0YXRp YyBpbnQgc2VuZF90bGJfaW52YWxfcHBndHQoc3RydWN0Cj4gPiA+IHhlX2d1Ywo+ID4gPiAqZ3Vj LCB1MzIgc2Vxbm8sIHU2NCBzdGFydCwKPiA+ID4gwqAjdW5kZWYgTUFYX1RMQl9JTlZBTElEQVRJ T05fTEVOCj4gPiA+IMKgCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqBlcnIgPSBzZW5kX3RsYl9pbnZh bChndWMsIGFjdGlvbiwgbGVuKTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFlcnIgJiYgcHJs X3NhKQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWVyciAmJiBwcmxfc2EpIHsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX2d0X2Fzc2VydChndCwgc2Vxbm8gIT0KPiA+ ID4gVExCX0lOVkFMSURBVElPTl9TRVFOT19JTlZBTElEKTsKPiA+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBlcnIgPSBzZW5kX3BhZ2VfcmVjbGFpbShndWMsIHNlcW5vLAo+ID4g PiB4ZV9zYV9ib19ncHVfYWRkcihwcmxfc2EpKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4g PiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGVycjsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IEBA IC0yMDEsNiArMjE1LDExNCBAQCBzdGF0aWMgaW50IHNlbmRfdGxiX2ludmFsX2FzaWRfcHBndHQo c3RydWN0Cj4gPiA+IHhlX3RsYl9pbnZhbCAqdGxiX2ludmFsLCB1MzIgc2Vxbm8sCj4gPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAKPiA+ID4gWEVfR1VDX1RMQl9JTlZBTF9QQUdFX1NFTEVDVElWRSwKPiA+ID4g cHJsX3NhKTsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+ICtzdGF0aWMgYm9vbCBxdWV1ZV9tYXBw ZWRfaW5fZ3VjKHN0cnVjdCB4ZV9ndWMgKmd1Yywgc3RydWN0Cj4gPiA+IHhlX2V4ZWNfcXVldWUg KnEpCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBxLT5ndCA9PSBndWNfdG9f Z3QoZ3VjKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBzZW5kX3RsYl9pbnZh bF9jdHhfcHBndHQoc3RydWN0IHhlX3RsYl9pbnZhbAo+ID4gPiAqdGxiX2ludmFsLAo+ID4gPiB1 MzIgc2Vxbm8sCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgc3RhcnQsIHU2NCBlbmQsIHUzMiBhc2lk LAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9zdWJhbGxvYyAqcHJsX3NhKQo+ID4gPiAr ewo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZ3VjICpndWMgPSB0bGJfaW52YWwtPnBy aXZhdGU7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gZ3VjX3Rv X3hlKGd1Yyk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9leGVjX3F1ZXVlICpxLCAq bmV4dCwgKmxhc3RfcSA9IE5VTEw7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV92bSAq dm07Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoExJU1RfSEVBRCh0bGJfaW52YWxfbGlzdCk7Cj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGludCBlcnIgPSAwOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGxvY2tkZXBfYXNzZXJ0X2hlbGQoJnRsYl9pbnZhbC0+c2Vxbm9fbG9jayk7Cj4gPiA+ICsKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHhlLT5pbmZvLmZvcmNlX2V4ZWNsaXN0KQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FQ0FOQ0VMRUQ7Cj4gPiA+ICsKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgdm0gPSB4ZV9kZXZpY2VfYXNpZF90b192bSh4ZSwgYXNpZCk7Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIodm0pKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIodm0pOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDC oMKgwqDCoGRvd25fcmVhZCgmdm0tPmV4ZWNfcXVldWVzLmxvY2spOwo+ID4gPiArCj4gPiA+ICvC oMKgwqDCoMKgwqDCoC8qCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqIFhYWDogUmFuZG9tbHkgcGlj a2luZyBhIHRocmVzaG9sZCBmb3Igbm93LiBUaGlzIHdpbGwKPiA+ID4gbmVlZAo+ID4gPiB0byBi ZQo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiB0dW5lZCBiYXNlZCBvbiBleHBlY3RlZCBVTUQgcXVl dWUgY291bnRzIGFuZAo+ID4gPiBwZXJmb3JtYW5jZQo+ID4gPiBwcm9maWxpbmcuCj4gPiA+ICvC oMKgwqDCoMKgwqDCoCAqLwo+ID4gPiArI2RlZmluZSBFWEVDX1FVRVVFX0NPVU5UX0ZVTExfVEhS RVNIT0xEwqDCoMKgwqDCoMKgwqDCoDgKPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHZtLT5leGVj X3F1ZXVlcy5jb3VudFtndWNfdG9fZ3QoZ3VjKS0+aW5mby5pZF0gPj0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIEVYRUNfUVVFVUVfQ09VTlRfRlVMTF9USFJFU0hPTEQpIHsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBhY3Rpb25bXSA9IHsKPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBYRV9HVUNfQUNUSU9OX1RM Ql9JTlZBTElEQVRJT04sCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc2Vxbm8sCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgTUFLRV9JTlZBTF9PUChYRV9HVUNfVExCX0lOVkFMX0ZVTEwpLAo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsKPiA+ID4gKwo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gc2VuZF90bGJfaW52YWwoZ3VjLCBhY3Rpb24s Cj4gPiA+IEFSUkFZX1NJWkUoYWN0aW9uKSk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBnb3RvIGVycl91bmxvY2s7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gKyN1 bmRlZiBFWEVDX1FVRVVFX0NPVU5UX0ZVTExfVEhSRVNIT0xECj4gPiA+ICsKPiA+ID4gK8KgwqDC oMKgwqDCoMKgLyoKPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogTW92ZSBleGVjIHF1ZXVlcyB0byBh IHRlbXBvcmFyeSBsaXN0IHRvIGlzc3VlCj4gPiA+IGludmFsaWRhdGlvbnMuIFRoZSBleGVjCj4g PiA+ICvCoMKgwqDCoMKgwqDCoCAqIHF1ZXVlIG11c3QgYmUgbWFwcGVkIGluIHRoZSBjdXJyZW50 IEd1QywgYWN0aXZlLCBhbmQgYQo+ID4gPiByZWZlcmVuY2UgbXVzdAo+ID4gPiArwqDCoMKgwqDC oMKgwqAgKiBiZSB0YWtlbiB0byBwcmV2ZW50IGNvbmN1cnJlbnQgZGVyZWdpc3RyYXRpb25zLgo+ ID4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKHEsIG5leHQsICZ2bS0+ZXhlY19xdWV1ZXMubGlzdCwKPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHZtX2V4ZWNfcXVldWVfbGluaykKPiA+IAo+ID4gTml0cGljazogSSdkIHByZWZlciBicmFjZXMg YXJvdW5kIHRoZSB0aGUgaWYgaGVyZSBzbyB3ZSBhcmVuJ3QKPiA+IG5lc3RpbmcKPiA+IHRoZSBt dWx0aS1saW5lIGNvbmRpdGlvbiB3aXRoaW4gdGhpcyBsaXN0X2Zvcl9lYWNoIGxvb3AuCj4gPiAK PiAKPiBTdXJlLiBDSSBhbmQgbG9jYWwgdGVzdGluZyBpcyBzaG93aW5nIHRoaXMgbG9vcCBleHBs b2RlcyB0b28uIEknbQo+IHJlYXNpbmcgdHdvIEdUcyBhcmUgbW9kaWZ5aW5nIHRoZSBsaXN0IGF0 IHRoZSBzYW1lIHRpbWUgYXMgSSdtIGp1c3QKPiB1c2luZyBhIHJlYWQgbG9jayBoZXJlLiBJIHRo aW5rIHZtLT5leGVjX3F1ZXVlcy5saXN0IG5lZWRzIHRvIGJlIHBlcgo+IEdUCj4gYWN0dWFsbHkg b3IganVzdCB1c2UgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBsaXN0Lgo+IAo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHF1ZXVlX21hcHBlZF9pbl9ndWMoZ3VjLCBxKSAm JiBxLT5vcHMtCj4gPiA+ID5hY3RpdmUocSkKPiA+ID4gJiYKPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZV9leGVjX3F1ZXVlX2dldF91bmxlc3NfemVybyhxKSkg ewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxh c3RfcSA9IHE7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbGlzdF9tb3ZlX3RhaWwoJnEtPnZtX2V4ZWNfcXVldWVfbGluaywKPiA+ID4gJnRsYl9p bnZhbF9saXN0KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4g Kwo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWxhc3RfcSkgewo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqIFdlIGNhbid0IGJyZWFrIGZlbmNlIG9yZGVyaW5nIGZvciBUTEIKPiA+ID4gaW52YWxpZGF0 aW9uCj4gPiA+IGpvYnMsIGlmCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBUTEIgaW52YWxpZGF0aW9ucyBhcmUgaW5mbGlnaHQgaXNzdWUgYSBkdW1teQo+ID4gPiBpbnZh bGlkYXRpb24gdG8KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIG1haW50 YWluIG9yZGVyaW5nLiBOb3IgY2FuIHdlIG1vdmUgc2FmZWx5IHRoZQo+ID4gPiBzZXFub19yZWN2 IHdoZW4KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHJldHVybmluZyAt RUNBTkNFTEVEIGlmIFRMQiBpbnZhbGlkYXRpb25zIGFyZQo+ID4gPiBpbgo+ID4gPiBmbGlnaHQu IFVzZQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogR0dUVCBpbnZhbGlk YXRpb24gYXMgZHVtbXkgaW52YWxpZGF0aW9uIGdpdmVuCj4gPiA+IEFTSUQKPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGludmFsaWRhdGlvbnMgYXJlIHVuc3VwcG9ydGVk IGhlcmUuCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZV90bGJfaW52YWxfaWRsZSh0bGJfaW52 YWwpKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGVyciA9IC1FQ0FOQ0VMRUQ7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl bHNlCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZXJyID0gc2VuZF90bGJfaW52YWxfZ2d0dCh0bGJfaW52YWwsCj4gPiA+IHNlcW5vKTsKPiA+IAo+ ID4gQ2FuIHlvdSBnaXZlIGEgbGl0dGxlIG1vcmUgY29udGV4dCBvbiB0aGlzIGxpbmUgYWN0dWFs bHk/IFNvIHRoaXMKPiA+IGlzCj4gPiBnb2luZyB0byBzZW5kIGRvd24gYSAweDMgdHlwZSBpbnZh bGlkYXRpb24gdG8gR3VDIChUTEJfSU5WQUxfR1VDKS4KPiA+IEd1Qwo+ID4gaXMgc3RpbGwgZG9p bmcgYW4gaW52YWxpZGF0aW9uIHRvIGhhcmR3YXJlIHdoZW4gd2Ugd3JpdGUgdGhpcy4gSXMKPiA+ IHRoYXQKPiA+IHRoZSBleHBlY3RhdGlvbiB3aXRoIHRoaXM/Cj4gPiAKPiAKPiBZZXMsIEkgdGhp bmsgSSBleHBsYWluIHRoaXMgaW4gdGhlIGNvbW1lbnQgYWJvdmUuIFdlIGFyZSBpc3N1aW5nIGEK PiBkdW1teQo+IGludmFsaWRhdGlvbiB0byBtYWludGFpbiBvcmRlcmluZyB3aGVuIHJlcXVpcmVk LCB0aGlzIHdvdWxkIGJlIEd1Qwo+IFRMQnMuCj4gTm90IGlkZWFsIGJ1dCB3ZSBjYW4ndCBicmVh ayBkbWEtZmVuY2luZyBvcmRlcmluZyBhbmQgdGhpcyBjYXNlIHNvIGJlCj4gZXhjZWVkaW5nbHkg cmFyZS4KClllYWggdGhlIHJlYXNvbmluZyBpcyBjbGVhciB0byBtZS4gSXQganVzdCB3YXNuJ3Qg Y2xlYXIgd2hhdCB3b3VsZApoYXBwZW4gd2l0aCB0aGlzIEd1QyBpbnZhbGlkYXRpb24uIExvb2tp bmcgdGhyb3VnaCB0aGUgR3VDIHNvdXJjZSwgSQpzZWUgdGhpcyBpcyBzZW5kaW5nIHdpdGggR3Jh bnVsYXJpdHkgb2YgMHgxLiBUaGlzIGlzICJBbGwgbWFwcGluZ3MKd2l0aGluIEFTSUQgYW5kIFZG IiBhY2NvcmRpbmcgdG8gYnNwZWMuIFdlIGFyZW4ndCBhY3R1YWxseSBwYXNzaW5nIGFuCkFTSUQg aGVyZSBhbmQgaXQgbG9va3MgbGlrZSBHdUMgaXNuJ3QgcHJvZ3JhbW1pbmcgYW55dGhpbmcgaW50 byB0aGF0CmZpZWxkIGluIHRoZSBkZXNjcmlwdG9yLiBTbyB3ZSdkIGhhdmUgdG8gZ2V0IHVubHVj a3kgd2l0aCBhIDAgKEkKYmVsaWV2ZSAtIGNhbid0IGZpbmQgd2hlcmUgdGhleSdyZSBjbGVhcmlu ZyB0aGlzIGF0IGEgZ2xhbmNlKSBBU0lECndoaWNoIHNlZW1zIHVubGlrZWx5LgoKU28gZnJvbSB0 aGUgaGFyZHdhcmUgc2lkZSwgdGhlcmUgd2lsbCBiZSBhIGxvb2t1cCBhbmQgZmFpbHVyZSB0byBm aW5kCnRoZSBBU0lEIGFuZCB0aGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIGRyb3BwZWQuCgpJIHRo aW5rIG9uIGN1cnJlbnQgaGFyZHdhcmUgdGhpcyBpcyBvayBhbmQgdGhlIGludmFsaWRhdGlvbiBz dGlsbApjb21wbGV0ZXMgYXQgdGhlIEd1QyBsZXZlbCAoR3VDIHJlY2VpdmVzIHRoZSBhY2sgZnJv bSBoYXJkd2FyZSkgYW5kIHdlCnNob3VsZG4ndCBnZXQgYW4gaW52YWxpZGF0aW9uIHRpbWVvdXQg aW4gdGhlIEtNRC4gQnV0IHRoZXJlJ3MgYWx3YXlzIGEKY2hhbmNlIHRoaXMgY291bGQgY2hhbmdl IGluIHRoZSBmdXR1cmUuCgpDYW4geW91IGFkZCBhIGNvbW1lbnQgaGVyZSBpbmRpY2F0aW5nIHRo aXM/IEJhc2ljYWxseSBzb21ldGhpbmcgbGlrZToKRXhwZWN0YXRpb24gaXMgdGhhdCBoYXJkd2Fy ZSB3aWxsIGRyb3AgdGhpcyByZXF1ZXN0IHNpbmNlIEd1QyBzdWJtaXRzCmFuIEFTSUQgYmFzZWQg cmVxdWVzdCB3aXRob3V0IGFuIEFTSUQuCgpUaGFua3MsClN0dWFydAoKPiAKPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyX3VubG9jazsKPiA+ID4gK8KgwqDCoMKg wqDCoMKgfQo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZShxLCBuZXh0LCAmdGxiX2ludmFsX2xpc3QsCj4gPiA+IHZtX2V4ZWNfcXVldWVfbGluaykg ewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9zdWJhbGxv YyAqX19wcmxfc2EgPSBOVUxMOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aW50IF9fc2Vxbm8gPSBUTEJfSU5WQUxJREFUSU9OX1NFUU5PX0lOVkFMSUQ7Cj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgdHlwZSA9IFhFX0dVQ19UTEJfSU5WQUxfUEFH RV9TRUxFQ1RJVkVfQ1RYOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB4ZV9hc3NlcnQoeGUsIHEtPnZtID09IHZtKTsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycikKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHVucmVmOwo+ID4gPiArCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAobGFzdF9xID09IHEpIHsKPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3BybF9zYSA9IHBybF9z YTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBf X3NlcW5vID0gc2Vxbm87Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4g PiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IHNlbmRfdGxi X2ludmFsX3BwZ3R0KGd1YywgX19zZXFubywgc3RhcnQsCj4gPiA+IGVuZCwKPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcS0+Z3VjLT5pZCwgdHlwZSwKPiA+ID4gX19wcmxfc2EpOwo+ ID4gPiArCj4gPiA+ICt1bnJlZjoKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBNdXN0IGFsd2F5cyBy ZXR1cm4gZXhlYyBxdWV1ZSB0byBvcmlnaW5hbCBsaXN0Cj4gPiA+IC8KPiA+ID4gZHJvcAo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogcmVmZXJlbmNlCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHhlX2V4ZWNfcXVldWVfcHV0KHEpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbGlzdF9tb3ZlX3RhaWwoJnEtPnZtX2V4ZWNfcXVldWVfbGluaywgJnZtLQo+ ID4gPiA+IGV4ZWNfcXVldWVzLmxpc3QpOwo+ID4gCj4gPiBXaWxsIGdldCBiYWNrIG9uIHRoaXMg b25lLi4uIG5lZWQgdG8gc3BlbmQgYSBsaXR0bGUgbW9yZSB0aW1lIGFuZAo+ID4gZG8KPiA+IHNv bWUgdGVzdGluZy4KPiA+IAo+IAo+IEkgcHJvYmFibHkgc2hvdWxkIGZsaXAgdGhlIHB1dCBmb3Ig Y2xhcml0eSBidXQgdGhpcyBpcyBpbiBmYWN0IHNhZmUKPiBhcwo+IHF1ZXVlJ3MgbWVtb3J5IGNh bid0IGRpc2FwZWFyIGlmIHZtLT5leGVjX3F1ZXVlcy5sb2NrIGlzIGhlbGQuCj4gCj4gTWF0dAo+ IAo+ID4gVGhhbmtzLAo+ID4gU3R1YXJ0Cj4gPiAKPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4g PiArCj4gPiA+ICtlcnJfdW5sb2NrOgo+ID4gPiArwqDCoMKgwqDCoMKgwqB1cF9yZWFkKCZ2bS0+ ZXhlY19xdWV1ZXMubG9jayk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHhlX3ZtX3B1dCh2bSk7Cj4g PiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGVycjsKPiA+ID4gK30KPiA+ID4gKwo+ ID4gPiDCoHN0YXRpYyBib29sIHRsYl9pbnZhbF9pbml0aWFsaXplZChzdHJ1Y3QgeGVfdGxiX2lu dmFsCj4gPiA+ICp0bGJfaW52YWwpCj4gPiA+IMKgewo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IHhlX2d1YyAqZ3VjID0gdGxiX2ludmFsLT5wcml2YXRlOwo+ID4gPiBAQCAtMjI4LDcgKzM1 MCw3IEBAIHN0YXRpYyBsb25nIHRsYl9pbnZhbF90aW1lb3V0X2RlbGF5KHN0cnVjdAo+ID4gPiB4 ZV90bGJfaW52YWwgKnRsYl9pbnZhbCkKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBod190 bGJfdGltZW91dCArIDIgKiBkZWxheTsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IC1zdGF0aWMg Y29uc3Qgc3RydWN0IHhlX3RsYl9pbnZhbF9vcHMgZ3VjX3RsYl9pbnZhbF9vcHMgPSB7Cj4gPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHhlX3RsYl9pbnZhbF9vcHMgZ3VjX3RsYl9pbnZhbF9hc2lk X29wcyA9IHsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoC5hbGwgPSBzZW5kX3RsYl9pbnZhbF9hbGws Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqAuZ2d0dCA9IHNlbmRfdGxiX2ludmFsX2dndHQsCj4gPiA+ IMKgwqDCoMKgwqDCoMKgwqAucHBndHQgPSBzZW5kX3RsYl9pbnZhbF9hc2lkX3BwZ3R0LAo+ID4g PiBAQCAtMjM3LDYgKzM1OSwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHhlX3RsYl9pbnZhbF9v cHMKPiA+ID4gZ3VjX3RsYl9pbnZhbF9vcHMgPSB7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqAudGlt ZW91dF9kZWxheSA9IHRsYl9pbnZhbF90aW1lb3V0X2RlbGF5LAo+ID4gPiDCoH07Cj4gPiA+IMKg Cj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHhlX3RsYl9pbnZhbF9vcHMgZ3VjX3RsYl9pbnZh bF9jdHhfb3BzID0gewo+ID4gPiArwqDCoMKgwqDCoMKgwqAuZ2d0dCA9IHNlbmRfdGxiX2ludmFs X2dndHQsCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5hbGwgPSBzZW5kX3RsYl9pbnZhbF9hbGwsCj4g PiA+ICvCoMKgwqDCoMKgwqDCoC5wcGd0dCA9IHNlbmRfdGxiX2ludmFsX2N0eF9wcGd0dCwKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgLmluaXRpYWxpemVkID0gdGxiX2ludmFsX2luaXRpYWxpemVkLAo+ ID4gPiArwqDCoMKgwqDCoMKgwqAuZmx1c2ggPSB0bGJfaW52YWxfZmx1c2gsCj4gPiA+ICvCoMKg wqDCoMKgwqDCoC50aW1lb3V0X2RlbGF5ID0gdGxiX2ludmFsX3RpbWVvdXRfZGVsYXksCj4gPiA+ ICt9Owo+ID4gPiArCj4gPiA+IMKgLyoqCj4gPiA+IMKgICogeGVfZ3VjX3RsYl9pbnZhbF9pbml0 X2Vhcmx5KCkgLSBJbml0IEd1QyBUTEIgaW52YWxpZGF0aW9uCj4gPiA+IGVhcmx5Cj4gPiA+IMKg ICogQGd1YzogR3VDIG9iamVjdAo+ID4gPiBAQCAtMjQ4LDggKzM3OSwxNCBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IHhlX3RsYl9pbnZhbF9vcHMKPiA+ID4gZ3VjX3RsYl9pbnZhbF9vcHMgPSB7Cj4g PiA+IMKgdm9pZCB4ZV9ndWNfdGxiX2ludmFsX2luaXRfZWFybHkoc3RydWN0IHhlX2d1YyAqZ3Vj LAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZV90bGJfaW52YWwgKnRsYl9pbnZhbCkKPiA+ID4gwqB7 Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gZ3VjX3RvX3hlKGd1 Yyk7Cj4gPiA+ICsKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoHRsYl9pbnZhbC0+cHJpdmF0ZSA9IGd1 YzsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgdGxiX2ludmFsLT5vcHMgPSAmZ3VjX3RsYl9pbnZhbF9v cHM7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHhlLT5pbmZvLmhhc19jdHhfdGxi X2ludmFsKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGxiX2ludmFsLT5v cHMgPSAmZ3VjX3RsYl9pbnZhbF9jdHhfb3BzOwo+ID4gPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0bGJfaW52YWwtPm9wcyA9ICZndWNf dGxiX2ludmFsX2FzaWRfb3BzOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gwqAvKioKPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYwo+ID4gPiBiL2RyaXZlcnMv Z3B1L2RybS94ZS94ZV9wY2kuYwo+ID4gPiBpbmRleCA5MWUwNTUzYTgxNjMuLjZlYTExOTlmNzAz ZSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jCj4gPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYwo+ID4gPiBAQCAtODg5LDYgKzg4OSw3IEBA IHN0YXRpYyBpbnQgeGVfaW5mb19pbml0KHN0cnVjdCB4ZV9kZXZpY2UgKnhlLAo+ID4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlLT5pbmZvLmhhc19kZXZpY2VfYXRvbWljc19v bl9zbWVtID0gMTsKPiA+ID4gwqAKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoHhlLT5pbmZvLmhhc19y YW5nZV90bGJfaW52YWwgPSBncmFwaGljc19kZXNjLQo+ID4gPiA+IGhhc19yYW5nZV90bGJfaW52 YWw7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHhlLT5pbmZvLmhhc19jdHhfdGxiX2ludmFsID0gZ3Jh cGhpY3NfZGVzYy0KPiA+ID4gPiBoYXNfY3R4X3RsYl9pbnZhbDsKPiA+ID4gwqDCoMKgwqDCoMKg wqDCoHhlLT5pbmZvLmhhc191c20gPSBncmFwaGljc19kZXNjLT5oYXNfdXNtOwo+ID4gPiDCoMKg wqDCoMKgwqDCoMKgeGUtPmluZm8uaGFzXzY0Yml0X3RpbWVzdGFtcCA9IGdyYXBoaWNzX2Rlc2Mt Cj4gPiA+ID4gaGFzXzY0Yml0X3RpbWVzdGFtcDsKPiA+ID4gwqAKPiA+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfdHlwZXMuaAo+ID4gPiBiL2RyaXZlcnMvZ3B1L2Ry bS94ZS94ZV9wY2lfdHlwZXMuaAo+ID4gPiBpbmRleCA1ZjIwZjU2NTcxZDEuLjAwMGI1NGNiY2Qw ZSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV90eXBlcy5oCj4g PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfdHlwZXMuaAo+ID4gPiBAQCAtNzEs NiArNzEsNyBAQCBzdHJ1Y3QgeGVfZ3JhcGhpY3NfZGVzYyB7Cj4gPiA+IMKgwqDCoMKgwqDCoMKg wqB1OCBoYXNfYXRvbWljX2VuYWJsZV9wdGVfYml0OjE7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqB1 OCBoYXNfaW5kaXJlY3RfcmluZ19zdGF0ZToxOwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgdTggaGFz X3JhbmdlX3RsYl9pbnZhbDoxOwo+ID4gPiArwqDCoMKgwqDCoMKgwqB1OCBoYXNfY3R4X3RsYl9p bnZhbDoxOwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgdTggaGFzX3VzbToxOwo+ID4gPiDCoMKgwqDC oMKgwqDCoMKgdTggaGFzXzY0Yml0X3RpbWVzdGFtcDoxOwo+ID4gPiDCoH07Cj4gPiAKCg==