From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id B334DA0093;
	Fri, 14 Jan 2022 07:31:02 +0100 (CET)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 4673442759;
	Fri, 14 Jan 2022 07:31:02 +0100 (CET)
Received: from mga05.intel.com (mga05.intel.com [192.55.52.43])
 by mails.dpdk.org (Postfix) with ESMTP id 73EC040DDD
 for <dev@dpdk.org>; Fri, 14 Jan 2022 07:31:00 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
 d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
 t=1642141860; x=1673677860;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-transfer-encoding:mime-version;
 bh=mJQ8+ARSVq3Tnpez83p96Z6aUa5IVMIh165PV8kpp6g=;
 b=L6R6fyAnxskoWlN4Iqwp+dzWBwMTcL7ogG9PgJeQ0sL/aNRZnG8oEkRt
 GdlUBnzOxjo+OWagY7a3O/hlwDFiKjodbQPEkLmprAG/lYTQOVo0H9FEr
 +6zdhAVizls8PcVjgxdwWhBpXA9SK1OZVM1xukjQHP1yMtmaKpXfvSrQg
 d5c7G0D2VbrFfoDSQlwbKa86fQxrE4IpMKnC36h0zEyNTouJYPcDre+4B
 Gu40Xymj9qdpp0me4LLMWwVE2AbaA1+uDRlPlfNTCxAfsMYg3pw3F2gEQ
 yUD0bsl3dSMWeq3/OcOg24V6K0aE5JVWvFK1BiercQ0vVH+yFp1r7uxKK A==;
X-IronPort-AV: E=McAfee;i="6200,9189,10226"; a="330541916"
X-IronPort-AV: E=Sophos;i="5.88,287,1635231600"; d="scan'208";a="330541916"
Received: from orsmga006.jf.intel.com ([10.7.209.51])
 by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 13 Jan 2022 22:30:59 -0800
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.88,287,1635231600"; d="scan'208";a="475669390"
Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82])
 by orsmga006.jf.intel.com with ESMTP; 13 Jan 2022 22:30:58 -0800
Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by
 fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2308.20; Thu, 13 Jan 2022 22:30:58 -0800
Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by
 fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2308.20; Thu, 13 Jan 2022 22:30:57 -0800
Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by
 fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2308.20 via Frontend Transport; Thu, 13 Jan 2022 22:30:54 -0800
Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.171)
 by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.1.2308.20; Thu, 13 Jan 2022 22:30:54 -0800
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=eT3HJiianUhQh+L577Ke8mkwCycnQVNm1i+l4DNBV0f/dSTOgvyIeaJ1FdbO2yMljUCwOQfFRQ7pvU5y1dQPpurw0wEGV9zU2smm0WumPu4g4lxBWKngNIWnQoQtPOAN8yLN1uYBuvMlHwqM+jyuJujXoAFPt0ux0yTqsz+HXpCPXhr9q3ygdA5GM5a42cVavllIXWic2GGaS+AuMHCJaGu8N31dnkjHtdxEsBZx+5Nb0CIFLeEKifRX4SueCTP0aqDcr/tLui/8ezwOF1KsHwy0GpRQzi6oJUHaPW+lsJRMJC+p2EoRFgeshHoAfaE9s10WvK91XGa/x9i8ezrPqQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector9901;
 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=mJQ8+ARSVq3Tnpez83p96Z6aUa5IVMIh165PV8kpp6g=;
 b=l36kjqewW8J5HV2mjuaRcwpdJfMPLRX6vFfnwBXvEKc1D7P47sJQsMr27h4GSAsoyWYRTxGruxHL7Hm+aC714tQmpVvocKp80BrlpCJwiH6FpoeJJN1hzS7wGsNUYrQY0OrKy8mWO0emnz8FHbujk33wvn9O8gnXuRSIQrptIucBtM/gnUbDp2rs6UxbI9ZmUW/RG21MfYfzNssxlcVqG/JOBA53l6qVWDMmyEdtIAKm2CBz8o3ArlrItwYU9PtiPn6oGhwq4xCKyXow2WZnMfI9wJU9BbyVj+vTEBDlsZpqiG0JJoubbW534pnNa30SYO7N9VNfCesK0+l8pYyU1Q==
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 SN6PR11MB3504.namprd11.prod.outlook.com (2603:10b6:805:d0::17)
 by MN2PR11MB4743.namprd11.prod.outlook.com (2603:10b6:208:260::8)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.10; Fri, 14 Jan
 2022 06:30:51 +0000
Received: from SN6PR11MB3504.namprd11.prod.outlook.com
 ([fe80::40a4:d129:6047:5515]) by SN6PR11MB3504.namprd11.prod.outlook.com
 ([fe80::40a4:d129:6047:5515%5]) with mapi id 15.20.4888.011; Fri, 14 Jan 2022
 06:30:51 +0000
From: "Xia, Chenbo" <chenbo.xia@intel.com>
To: "Hu, Jiayu" <jiayu.hu@intel.com>, "dev@dpdk.org" <dev@dpdk.org>
CC: "maxime.coquelin@redhat.com" <maxime.coquelin@redhat.com>,
 "i.maximets@ovn.org" <i.maximets@ovn.org>, "Richardson, Bruce"
 <bruce.richardson@intel.com>, "Van Haaren, Harry"
 <harry.van.haaren@intel.com>, "Pai G, Sunil" <sunil.pai.g@intel.com>,
 "Mcnamara, John" <john.mcnamara@intel.com>, "Ding, Xuan"
 <xuan.ding@intel.com>, "Jiang, Cheng1" <cheng1.jiang@intel.com>,
 "liangma@liangbit.com" <liangma@liangbit.com>
Subject: RE: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath
Thread-Topic: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath
Thread-Index: AQHX/YRN15fPMJSUO0G2iLHLXO4VhqxfD5/A
Date: Fri, 14 Jan 2022 06:30:51 +0000
Message-ID: <SN6PR11MB35046B0B3A185FAED5A441219C549@SN6PR11MB3504.namprd11.prod.outlook.com>
References: <20211122105437.3534231-1-jiayu.hu@intel.com>
 <20211230215505.329674-1-jiayu.hu@intel.com>
 <20211230215505.329674-2-jiayu.hu@intel.com>
In-Reply-To: <20211230215505.329674-2-jiayu.hu@intel.com>
Accept-Language: en-US, zh-CN
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-office365-filtering-correlation-id: 3ed5a2b8-2fb5-4d04-0aec-08d9d727690b
x-ms-traffictypediagnostic: MN2PR11MB4743:EE_
x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr
x-microsoft-antispam-prvs: <MN2PR11MB474363ED31BA053076AC2CD59C549@MN2PR11MB4743.namprd11.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:416;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: geAAGSJayNme51kHHHl6CydU8sB6k8YGb/nf8/6xiRt6pEo4FuVu7gXQzbkybZGCVnbdMSEONuVkasHVYKZZjdITLNhZwhnUD25AUb0jqzHzYyohT1D/j8ItvmFzxAoNpdVA6eHZxfUGO8/UzL6CoKX+H8Uv/f0uYRvA+OGxHZehaYaZJVhsUzX6C0/SRk1yhIqvIkoU9B/5gZrN0Q1ctxz9Y8pagXj/3QGTuhQvLVTug5k1i0tbzM2vEY2x84gZkxqiMpNXLuOVY9rbXg0AEqbuV8FMuV050xGBajnu8SEIwxJJD6wOE8Vo+iUwCOZBUFZq80VkXoNrjQI8PfIE7fSTwPd46+oXfu6/aQBFtgNVZZafZ9ToMrZ0qOWbKf6FaMteIDVYAIo9eH4rnx4//HDqXHUb2tTCtOyopCIgKTautxqiKtFovLQ96FB87skyMZU0PBiybWqiQIL4fXLeD2pV9lzOC6zLzfYiYvwQXCWccb16dLTjXnvcFALZCrXJGa3qcU1+fg47TgofifVViTRbUMmkCcq3IVkzTokCXsOpNLNjPSauyg3sSAkVxPra6xmW6BcXisoORF3Rq4E7bkWYUF6/PKTTQOOIc1B3yTF7Mzvn3Yc7/X+4ortieBmrDsL/3qlF4c8HycYyz+oaUxDZkCMk64ZdUkMux9laCXeOifomvHxOfcrSRFzar6L+lvr+S28alz7Pb2AepSz7cX2KeA2HLVI7+5QBUigKdcI=
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:SN6PR11MB3504.namprd11.prod.outlook.com; PTR:; CAT:NONE;
 SFS:(366004)(53546011)(30864003)(186003)(6506007)(33656002)(122000001)(7696005)(9686003)(38100700002)(2906002)(5660300002)(83380400001)(26005)(86362001)(38070700005)(508600001)(82960400001)(55016003)(8676002)(66946007)(66446008)(64756008)(66556008)(66476007)(4326008)(76116006)(8936002)(52536014)(110136005)(316002)(54906003)(71200400001)(21314003)(579004)(559001);
 DIR:OUT; SFP:1102; 
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?utf-8?B?OW5SSkZGZ0hLMVpuY3J0TnpkVkJHcFJGMW1EZG9IRDNKQVc4eWNpMlhGRXNZ?=
 =?utf-8?B?MDlHNWkyTmRiVy9lVUNGTXhZYlpwQmZVWERhaS8xd2QrR0tXeU15M20rc3Zs?=
 =?utf-8?B?bVlYbnJnNHFXT3dxWkVhVEprRnpPSjJmcTg2QlVBQnVncno0VHFlNWN6ZlZm?=
 =?utf-8?B?WWVGeGVWMUZMS2tRWFNrTEUyeXJqdmxtTE9vaWtkT0tKREhSbTRPeUpmT1Er?=
 =?utf-8?B?MlVQTTJqRDFqckU3aWtGc0gzLzk1dG1WallocHZLYkNGVHJ3QUtneHI1YWor?=
 =?utf-8?B?czYxNUs5cGlBVXVzTlJBSXNHSnAzTlI4eS9aMjRnTXc2a0M5cTEyenljOWdZ?=
 =?utf-8?B?U2t2bGV1b3plQnFqTHZHMHBrSWJZVnJlOEM1UldxdlpFbi8rN2R1SlhVL2lE?=
 =?utf-8?B?WkhYTGZFT2VrTWdhRzlSTFJMU2hTM0tYOGtrWGlZdWdETTBRM2dRaUs5Vit3?=
 =?utf-8?B?dkxZcUIva1NDTXB5VisrZDNNV0ZXWWpuVnFEQjRFZktNaE5SbFc5M0Fnckk2?=
 =?utf-8?B?ZnQ0emZJVTVNMTdKZTBZbXlyNjZkb1VKK01OK1NhOFd1alVpeEE2MzBNY2JP?=
 =?utf-8?B?eUpHRUlaZElnMS91UG9FeGhSN0swT0YxQUdXTTdLd3paTVBJTThFQzYzcEpx?=
 =?utf-8?B?Wjh3WXpVaGJvdnZUcUEzT1h0eVAyOHZsUER3cFQxK0JhVU05WHZuWnNMbmxk?=
 =?utf-8?B?Y2FpNEhzM1VZY2poYUFQNElneHdoWEhHRFAzdGxKOWdaSjRCRXlDV3hlY3dV?=
 =?utf-8?B?OGo0RGFONWwxVUhIYjY0bXRIQSszRDNNeW0vc0Y1bFhWME92WUlpWlZrVEFT?=
 =?utf-8?B?N2RZYW9PV1J6N0N2WGFxVUg2c2NEUjFHMmwraklXY09IdU92Q1kxNm12OCtp?=
 =?utf-8?B?alJNMUV5Ly9Sc2pTaWI4ZFJqdDBaT2FHT2Z6V0Z6WFovSXdDaXh1RHFRREF3?=
 =?utf-8?B?eXQ1YnI3S1dHYkVlNXRpTHlYUllxTVY3Y2FEMWkvWG41ZGlzOEVrdms4UEwv?=
 =?utf-8?B?V3E1UDZkMTZEYmQrUDFqTm5yL2dyUmNZbjh2Y1ozaFQ2b0VQeXdOOVpTck8w?=
 =?utf-8?B?dmdRa3VHYWN3RDhTcmgwcmJvQ1V4WDQzRFFvdjdOUzJwN091cTR1clZPUk1D?=
 =?utf-8?B?T3JGNEZWbkFHTlJzZmJDaVBJVUV3ZlFHZkJqdlFNTTFzYzcrTXRNdWNlYWJ5?=
 =?utf-8?B?aG9hRmlROC9wVERGemovdDRGVitoU2dDN05uNkRwQVNHWFFSKzdCZzZkbXR3?=
 =?utf-8?B?Qzcxb0pvSlpua3NoMVlTNlFFQ2hlT29Bd1FDTDFWV0VGd1N2YXRBVE12a0N0?=
 =?utf-8?B?TkNiYzBYb0Vsd0pLalQ1bkZiVDdobVMzRXZNNEFMWEdaZDU0ZFNoTXkzMFVq?=
 =?utf-8?B?V1pjTmxndjRFZGE5U0t4T0o2OFpuakhjNndld0YrOFBISkZLYS9pWWxVUVpN?=
 =?utf-8?B?b0szZmo4dXVMS3o5Z2xwL2xGYUdwemlrZzMzVEErUnBwcFR2c3pmODB5L2lu?=
 =?utf-8?B?eWthVmkrWVhndVp0SVVoVWZRSzRJZ0c1bm5vWkhMazJuazFjTHh3VzFONEVN?=
 =?utf-8?B?YW5jNThlblJZUXZOem9melpIRU5NNDB0eVZlNzFESkZHQ2JzNE4zRUc5Z1Nh?=
 =?utf-8?B?R01XZEJwRGo3MG9USHFMUnpuWUs4dzg4bHNOTk9YRUtsRlU1UmdOVVNJNm9a?=
 =?utf-8?B?TVpSdDYxUGFYWVc3VGtFWFJSaGVBOVN3RThHRUZ4UFNFdzVtWXFvMlVldXow?=
 =?utf-8?B?dTVZWmZWSXhlNUlWbEZuVWRpZWQ0WGMrdEcrazdnQ3pMVmNoUlFUUHQwTkQw?=
 =?utf-8?B?WjhyeUxDUmtTb3RNcGpTZ1djNDVjejdaakhDQWJ3bWVHQW9qTzM2Sys4by9P?=
 =?utf-8?B?Zk1nWnMrRmpsb3VWTUc0S1pDcTg2ZTRjYVRISFIvaHlBandQeWZDZlVYdWRM?=
 =?utf-8?B?VWI0dkoyM3VaaGJBMFJpa215NlFqdDFQMWFra2FuWGtYYlJZZDZ6QldQeDVP?=
 =?utf-8?B?bE1GdUJCalBuSVlvMUlkemsva0lPK2Z0UzNiVmNtWTZIN01JVytvQUIzMXM3?=
 =?utf-8?B?MWVBMFBsTkQwUjU0UkhTQjhlSWVFNDBLNVhmUmpTemNZSnhaRzdUNGRoOFRX?=
 =?utf-8?B?OXdkLzVVUGN6Y05jMVAxaXJLL3NOTkJYQ0h2MFdiUjB0TE9vamw1Sm5qYTZi?=
 =?utf-8?Q?H7ms7/vfTnUdmIgy1iG+VP0=3D?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB3504.namprd11.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3ed5a2b8-2fb5-4d04-0aec-08d9d727690b
X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jan 2022 06:30:51.4134 (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: xdnpKs7Ch/Akk0earN8K/Mi2Wn5D8xB5fzT4+aCFPXHII9+6UEl3fo+60pmstXRJYA/EOBP9zpm4vpX6VvPU5w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4743
X-OriginatorOrg: intel.com
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

SGkgSmlheXUsDQoNClRoaXMgaXMgZmlyc3Qgcm91bmQgb2YgcmV2aWV3LCBJJ2xsIHNwZW5kIHRp
bWUgb24gT1ZTIHBhdGNoZXMgbGF0ZXIgYW5kIGxvb2sgYmFjay4NCg0KPiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBIdSwgSmlheXUgPGppYXl1Lmh1QGludGVsLmNvbT4NCj4g
U2VudDogRnJpZGF5LCBEZWNlbWJlciAzMSwgMjAyMSA1OjU1IEFNDQo+IFRvOiBkZXZAZHBkay5v
cmcNCj4gQ2M6IG1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tOyBpLm1heGltZXRzQG92bi5vcmc7
IFhpYSwgQ2hlbmJvDQo+IDxjaGVuYm8ueGlhQGludGVsLmNvbT47IFJpY2hhcmRzb24sIEJydWNl
IDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IFZhbg0KPiBIYWFyZW4sIEhhcnJ5IDxoYXJy
eS52YW4uaGFhcmVuQGludGVsLmNvbT47IFBhaSBHLCBTdW5pbA0KPiA8c3VuaWwucGFpLmdAaW50
ZWwuY29tPjsgTWNuYW1hcmEsIEpvaG4gPGpvaG4ubWNuYW1hcmFAaW50ZWwuY29tPjsgRGluZywg
WHVhbg0KPiA8eHVhbi5kaW5nQGludGVsLmNvbT47IEppYW5nLCBDaGVuZzEgPGNoZW5nMS5qaWFu
Z0BpbnRlbC5jb20+Ow0KPiBsaWFuZ21hQGxpYW5nYml0LmNvbTsgSHUsIEppYXl1IDxqaWF5dS5o
dUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2MSAxLzFdIHZob3N0OiBpbnRlZ3JhdGUg
ZG1hZGV2IGluIGFzeW5jaHJvbm91cyBkYXRhcGF0aA0KPiANCj4gU2luY2UgZG1hZGV2IGlzIGlu
dHJvZHVjZWQgaW4gMjEuMTEsIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB2aG9zdCBETUENCj4g
YWJzdHJhY3Rpb24gbGF5ZXIgYW5kIHNpbXBsaWZ5IGFwcGxpY2F0aW9uIGxvZ2ljcywgdGhpcyBw
YXRjaCBpbnRlZ3JhdGVzDQo+IGRtYWRldiBpbiBhc3luY2hyb25vdXMgZGF0YSBwYXRoLg0KPiAN
Cj4gU2lnbmVkLW9mZi1ieTogSmlheXUgSHUgPGppYXl1Lmh1QGludGVsLmNvbT4NCj4gU2lnbmVk
LW9mZi1ieTogU3VuaWwgUGFpIEcgPHN1bmlsLnBhaS5nQGludGVsLmNvbT4NCj4gLS0tDQo+ICBk
b2MvZ3VpZGVzL3Byb2dfZ3VpZGUvdmhvc3RfbGliLnJzdCB8ICA3MCArKysrLS0tLS0NCj4gIGV4
YW1wbGVzL3Zob3N0L01ha2VmaWxlICAgICAgICAgICAgIHwgICAyICstDQo+ICBleGFtcGxlcy92
aG9zdC9pb2F0LmMgICAgICAgICAgICAgICB8IDIxOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KPiAgZXhhbXBsZXMvdmhvc3QvaW9hdC5oICAgICAgICAgICAgICAgfCAgNjMgLS0tLS0tLS0N
Cj4gIGV4YW1wbGVzL3Zob3N0L21haW4uYyAgICAgICAgICAgICAgIHwgMjMwICsrKysrKysrKysr
KysrKysrKysrKysrLS0tLS0NCj4gIGV4YW1wbGVzL3Zob3N0L21haW4uaCAgICAgICAgICAgICAg
IHwgIDExICsrDQo+ICBleGFtcGxlcy92aG9zdC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgNiAr
LQ0KPiAgbGliL3Zob3N0L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgfCAgIDMgKy0NCj4gIGxp
Yi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaCAgICAgICAgIHwgMTIxICsrKysrLS0tLS0tLS0tLQ0K
PiAgbGliL3Zob3N0L3ZlcnNpb24ubWFwICAgICAgICAgICAgICAgfCAgIDMgKw0KPiAgbGliL3Zo
b3N0L3Zob3N0LmMgICAgICAgICAgICAgICAgICAgfCAxMzAgKysrKysrKysrKystLS0tLQ0KPiAg
bGliL3Zob3N0L3Zob3N0LmggICAgICAgICAgICAgICAgICAgfCAgNTMgKysrKysrLQ0KPiAgbGli
L3Zob3N0L3ZpcnRpb19uZXQuYyAgICAgICAgICAgICAgfCAyMDYgKysrKysrKysrKysrKysrKysr
Ky0tLS0tLQ0KPiAgMTMgZmlsZXMgY2hhbmdlZCwgNTg3IGluc2VydGlvbnMoKyksIDUyOSBkZWxl
dGlvbnMoLSkNCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy92aG9zdC9pb2F0LmMNCj4g
IGRlbGV0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy92aG9zdC9pb2F0LmgNCj4gDQo+IGRpZmYgLS1n
aXQgYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvdmhvc3RfbGliLnJzdA0KPiBiL2RvYy9ndWlkZXMv
cHJvZ19ndWlkZS92aG9zdF9saWIucnN0DQo+IGluZGV4IDc2ZjVkMzAzYzkuLmJkY2U3Y2JmMDIg
MTAwNjQ0DQo+IC0tLSBhL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS92aG9zdF9saWIucnN0DQo+ICsr
KyBiL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS92aG9zdF9saWIucnN0DQo+IEBAIC0yMTgsMzggKzIx
OCwxMiBAQCBUaGUgZm9sbG93aW5nIGlzIGFuIG92ZXJ2aWV3IG9mIHNvbWUga2V5IFZob3N0IEFQ
SQ0KPiBmdW5jdGlvbnM6DQo+IA0KPiAgICBFbmFibGUgb3IgZGlzYWJsZSB6ZXJvIGNvcHkgZmVh
dHVyZSBvZiB0aGUgdmhvc3QgY3J5cHRvIGJhY2tlbmQuDQo+IA0KPiAtKiBgYHJ0ZV92aG9zdF9h
c3luY19jaGFubmVsX3JlZ2lzdGVyKHZpZCwgcXVldWVfaWQsIGNvbmZpZywgb3BzKWBgDQo+ICsq
IGBgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIodmlkLCBxdWV1ZV9pZClgYA0KPiAN
Cj4gICAgUmVnaXN0ZXIgYW4gYXN5bmMgY29weSBkZXZpY2UgY2hhbm5lbCBmb3IgYSB2aG9zdCBx
dWV1ZSBhZnRlciB2cmluZw0KDQpTaW5jZSBkbWFkZXYgaXMgaGVyZSwgbGV0J3MganVzdCB1c2Ug
J0RNQSBkZXZpY2UnIGluc3RlYWQgb2YgJ2NvcHkgZGV2aWNlJw0KDQo+IC0gIGlzIGVuYWJsZWQu
IEZvbGxvd2luZyBkZXZpY2UgYGBjb25maWdgYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlcg0K
PiAtICB3aXRoIHRoZSByZWdpc3RyYXRpb246DQo+ICsgIGlzIGVuYWJsZWQuDQo+IA0KPiAtICAq
IGBgZmVhdHVyZXNgYA0KPiAtDQo+IC0gICAgVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHNwZWNpZnkg
YXN5bmMgY29weSBkZXZpY2UgZmVhdHVyZXMuDQo+IC0NCj4gLSAgICBgYFJURV9WSE9TVF9BU1lO
Q19JTk9SREVSYGAgcmVwcmVzZW50cyB0aGUgYXN5bmMgY29weSBkZXZpY2UgY2FuDQo+IC0gICAg
Z3VhcmFudGVlIHRoZSBvcmRlciBvZiBjb3B5IGNvbXBsZXRpb24gaXMgdGhlIHNhbWUgYXMgdGhl
IG9yZGVyDQo+IC0gICAgb2YgY29weSBzdWJtaXNzaW9uLg0KPiAtDQo+IC0gICAgQ3VycmVudGx5
LCBvbmx5IGBgUlRFX1ZIT1NUX0FTWU5DX0lOT1JERVJgYCBjYXBhYmxlIGRldmljZSBpcw0KPiAt
ICAgIHN1cHBvcnRlZCBieSB2aG9zdC4NCj4gLQ0KPiAtICBBcHBsaWNhdGlvbnMgbXVzdCBwcm92
aWRlIGZvbGxvd2luZyBgYG9wc2BgIGNhbGxiYWNrcyBmb3Igdmhvc3QgbGliIHRvDQo+IC0gIHdv
cmsgd2l0aCB0aGUgYXN5bmMgY29weSBkZXZpY2VzOg0KPiAtDQo+IC0gICogYGB0cmFuc2Zlcl9k
YXRhKHZpZCwgcXVldWVfaWQsIGRlc2NzLCBvcGFxdWVfZGF0YSwgY291bnQpYGANCj4gLQ0KPiAt
ICAgIHZob3N0IGludm9rZXMgdGhpcyBmdW5jdGlvbiB0byBzdWJtaXQgY29weSBkYXRhIHRvIHRo
ZSBhc3luYyBkZXZpY2VzLg0KPiAtICAgIEZvciBub24tYXN5bmNfaW5vcmRlciBjYXBhYmxlIGRl
dmljZXMsIGBgb3BhcXVlX2RhdGFgYCBjb3VsZCBiZSB1c2VkDQo+IC0gICAgZm9yIGlkZW50aWZ5
aW5nIHRoZSBjb21wbGV0ZWQgcGFja2V0cy4NCj4gLQ0KPiAtICAqIGBgY2hlY2tfY29tcGxldGVk
X2NvcGllcyh2aWQsIHF1ZXVlX2lkLCBvcGFxdWVfZGF0YSwgbWF4X3BhY2tldHMpYGANCj4gLQ0K
PiAtICAgIHZob3N0IGludm9rZXMgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIGNvcHkgZGF0YSBj
b21wbGV0ZWQgYnkgYXN5bmMNCj4gLSAgICBkZXZpY2VzLg0KPiAtDQo+IC0qIGBgcnRlX3Zob3N0
X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXJfdGhyZWFkX3Vuc2FmZSh2aWQsIHF1ZXVlX2lkLCBjb25m
aWcsDQo+IG9wcylgYA0KPiArKiBgYHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3Ro
cmVhZF91bnNhZmUodmlkLCBxdWV1ZV9pZClgYA0KPiANCj4gICAgUmVnaXN0ZXIgYW4gYXN5bmMg
Y29weSBkZXZpY2UgY2hhbm5lbCBmb3IgYSB2aG9zdCBxdWV1ZSB3aXRob3V0DQo+ICAgIHBlcmZv
cm1pbmcgYW55IGxvY2tpbmcuDQo+IEBAIC0yNzcsMTggKzI1MSwxMyBAQCBUaGUgZm9sbG93aW5n
IGlzIGFuIG92ZXJ2aWV3IG9mIHNvbWUga2V5IFZob3N0IEFQSQ0KPiBmdW5jdGlvbnM6DQo+ICAg
IFRoaXMgZnVuY3Rpb24gaXMgb25seSBzYWZlIHRvIGNhbGwgaW4gdmhvc3QgY2FsbGJhY2sgZnVu
Y3Rpb25zDQo+ICAgIChpLmUuLCBzdHJ1Y3QgcnRlX3Zob3N0X2RldmljZV9vcHMpLg0KPiANCj4g
LSogYGBydGVfdmhvc3Rfc3VibWl0X2VucXVldWVfYnVyc3QodmlkLCBxdWV1ZV9pZCwgcGt0cywg
Y291bnQsIGNvbXBfcGt0cywNCj4gY29tcF9jb3VudClgYA0KPiArKiBgYHJ0ZV92aG9zdF9zdWJt
aXRfZW5xdWV1ZV9idXJzdCh2aWQsIHF1ZXVlX2lkLCBwa3RzLCBjb3VudCwgZG1hX2lkLA0KPiBk
bWFfdmNoYW4pYGANCj4gDQo+ICAgIFN1Ym1pdCBhbiBlbnF1ZXVlIHJlcXVlc3QgdG8gdHJhbnNt
aXQgYGBjb3VudGBgIHBhY2tldHMgZnJvbSBob3N0IHRvIGd1ZXN0DQo+IC0gIGJ5IGFzeW5jIGRh
dGEgcGF0aC4gU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHBhY2tldHMgY2FuIGJlIHRyYW5zZmVyIGNv
bXBsZXRlZA0KPiAtICBvciBiZWluZyBvY2N1cGllZCBieSBETUEgZW5naW5lczsgdHJhbnNmZXIg
Y29tcGxldGVkIHBhY2tldHMgYXJlIHJldHVybmVkDQo+IGluDQo+IC0gIGBgY29tcF9wa3RzYGAs
IGJ1dCBvdGhlcnMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGZpbmlzaCwgd2hlbiB0aGlzIEFQSQ0K
PiAtICBjYWxsIHJldHVybnMuDQo+ICsgIGJ5IGFzeW5jIGRhdGEgcGF0aC4gQXBwbGljYXRpb25z
IG11c3Qgbm90IGZyZWUgdGhlIHBhY2tldHMgc3VibWl0dGVkIGZvcg0KPiArICBlbnF1ZXVlIHVu
dGlsIHRoZSBwYWNrZXRzIGFyZSBjb21wbGV0ZWQuDQo+IA0KPiAtICBBcHBsaWNhdGlvbnMgbXVz
dCBub3QgZnJlZSB0aGUgcGFja2V0cyBzdWJtaXR0ZWQgZm9yIGVucXVldWUgdW50aWwgdGhlDQo+
IC0gIHBhY2tldHMgYXJlIGNvbXBsZXRlZC4NCj4gLQ0KPiAtKiBgYHJ0ZV92aG9zdF9wb2xsX2Vu
cXVldWVfY29tcGxldGVkKHZpZCwgcXVldWVfaWQsIHBrdHMsIGNvdW50KWBgDQo+ICsqIGBgcnRl
X3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQodmlkLCBxdWV1ZV9pZCwgcGt0cywgY291bnQs
IGRtYV9pZCwNCj4gZG1hX3ZjaGFuKWBgDQo+IA0KPiAgICBQb2xsIGVucXVldWUgY29tcGxldGlv
biBzdGF0dXMgZnJvbSBhc3luYyBkYXRhIHBhdGguIENvbXBsZXRlZCBwYWNrZXRzDQo+ICAgIGFy
ZSByZXR1cm5lZCB0byBhcHBsaWNhdGlvbnMgdGhyb3VnaCBgYHBrdHNgYC4NCj4gQEAgLTI5OCw3
ICsyNjcsNyBAQCBUaGUgZm9sbG93aW5nIGlzIGFuIG92ZXJ2aWV3IG9mIHNvbWUga2V5IFZob3N0
IEFQSQ0KPiBmdW5jdGlvbnM6DQo+ICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50
IG9mIGluLWZsaWdodCBwYWNrZXRzIGZvciB0aGUgdmhvc3QNCj4gICAgcXVldWUgdXNpbmcgYXN5
bmMgYWNjZWxlcmF0aW9uLg0KPiANCj4gLSogYGBydGVfdmhvc3RfY2xlYXJfcXVldWVfdGhyZWFk
X3Vuc2FmZSh2aWQsIHF1ZXVlX2lkLCAqKnBrdHMsIGNvdW50KWBgDQo+ICsqIGBgcnRlX3Zob3N0
X2NsZWFyX3F1ZXVlX3RocmVhZF91bnNhZmUodmlkLCBxdWV1ZV9pZCwgKipwa3RzLCBjb3VudCwg
ZG1hX2lkLA0KPiBkbWFfdmNoYW4pYGANCj4gDQo+ICAgIENsZWFyIGluZmxpZ2h0IHBhY2tldHMg
d2hpY2ggYXJlIHN1Ym1pdHRlZCB0byBETUEgZW5naW5lIGluIHZob3N0IGFzeW5jDQo+IGRhdGEN
Cj4gICAgcGF0aC4gQ29tcGxldGVkIHBhY2tldHMgYXJlIHJldHVybmVkIHRvIGFwcGxpY2F0aW9u
cyB0aHJvdWdoIGBgcGt0c2BgLg0KPiBAQCAtNDQyLDMgKzQxMSwyNiBAQCBGaW5hbGx5LCBhIHNl
dCBvZiBkZXZpY2Ugb3BzIGlzIGRlZmluZWQgZm9yIGRldmljZQ0KPiBzcGVjaWZpYyBvcGVyYXRp
b25zOg0KPiAgKiBgYGdldF9ub3RpZnlfYXJlYWBgDQo+IA0KPiAgICBDYWxsZWQgdG8gZ2V0IHRo
ZSBub3RpZnkgYXJlYSBpbmZvIG9mIHRoZSBxdWV1ZS4NCj4gKw0KPiArVmhvc3QgYXN5bmNocm9u
b3VzIGRhdGEgcGF0aA0KPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArDQo+ICtW
aG9zdCBhc3luY2hyb25vdXMgZGF0YSBwYXRoIGxldmVyYWdlcyBETUEgZGV2aWNlcyB0byBvZmZs
b2FkIG1lbW9yeQ0KPiArY29waWVzIGZyb20gdGhlIENQVSBhbmQgaXQgaXMgaW1wbGVtZW50ZWQg
aW4gYW4gYXN5bmNocm9ub3VzIHdheS4gSXQNCj4gK2VuYWJsZXMgYXBwbGNhdGlvbnMsIGxpa2Ug
T1ZTLCB0byBzYXZlIENQVSBjeWNsZXMgYW5kIGhpZGUgbWVtb3J5IGNvcHkNCj4gK292ZXJoZWFk
LCB0aHVzIGFjaGlldmluZyBoaWdoZXIgdGhyb3VnaHB1dC4NCj4gKw0KPiArVmhvc3QgZG9lc24n
dCBtYW5hZ2UgRE1BIGRldmljZXMgYW5kIGFwcGxpY2F0aW9ucywgbGlrZSBPVlMsIG5lZWQgdG8N
Cj4gK21hbmFnZSBhbmQgY29uZmlndXJlIERNQSBkZXZpY2VzLiBBcHBsaWNhdGlvbnMgbmVlZCB0
byB0ZWxsIHZob3N0IHdoYXQNCj4gK0RNQSBkZXZpY2VzIHRvIHVzZSBpbiBldmVyeSBkYXRhIHBh
dGggZnVuY3Rpb24gY2FsbC4gVGhpcyBkZXNpZ24gZW5hYmxlcw0KPiArdGhlIGZsZXhpYmlsaXR5
IGZvciBhcHBsaWNhdGlvbnMgdG8gZHluYW1pY2FsbHkgdXNlIERNQSBjaGFubmVscyBpbg0KPiAr
ZGlmZmVyZW50IGZ1bmN0aW9uIG1vZHVsZXMsIG5vdCBsaW1pdGVkIGluIHZob3N0Lg0KPiArDQo+
ICtJbiBhZGRpdGlvbiwgdmhvc3Qgc3VwcG9ydHMgTTpOIG1hcHBpbmcgYmV0d2VlbiB2cmluZ3Mg
YW5kIERNQSB2aXJ0dWFsDQo+ICtjaGFubmVscy4gU3BlY2lmaWNhbGx5LCBvbmUgdnJpbmcgY2Fu
IHVzZSBtdWx0aXBsZSBkaWZmZXJlbnQgRE1BIGNoYW5uZWxzDQo+ICthbmQgb25lIERNQSBjaGFu
bmVsIGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgdnJpbmdzIGF0IHRoZSBzYW1lIHRpbWUuDQo+
ICtUaGUgcmVhc29uIG9mIGVuYWJsaW5nIG9uZSB2cmluZyB0byB1c2UgbXVsdGlwbGUgRE1BIGNo
YW5uZWxzIGlzIHRoYXQNCj4gK2l0J3MgcG9zc2libGUgdGhhdCBtb3JlIHRoYW4gb25lIGRhdGFw
bGFuZSB0aHJlYWRzIGVucXVldWUgcGFja2V0cyB0bw0KPiArdGhlIHNhbWUgdnJpbmcgd2l0aCB0
aGVpciBvd24gRE1BIHZpcnR1YWwgY2hhbm5lbHMuIEJlc2lkZXMsIHRoZSBudW1iZXINCj4gK29m
IERNQSBkZXZpY2VzIGlzIGxpbWl0ZWQuIEZvciB0aGUgcHVycG9zZSBvZiBzY2FsaW5nLCBpdCdz
IG5lY2Vzc2FyeSB0bw0KPiArc3VwcG9ydCBzaGFyaW5nIERNQSBjaGFubmVscyBhbW9uZyB2cmlu
Z3MuDQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy92aG9zdC9NYWtlZmlsZSBiL2V4YW1wbGVzL3Zo
b3N0L01ha2VmaWxlDQo+IGluZGV4IDU4N2VhMmFiNDcuLjk3NWE1ZGZlNDAgMTAwNjQ0DQo+IC0t
LSBhL2V4YW1wbGVzL3Zob3N0L01ha2VmaWxlDQo+ICsrKyBiL2V4YW1wbGVzL3Zob3N0L01ha2Vm
aWxlDQo+IEBAIC01LDcgKzUsNyBAQA0KPiAgQVBQID0gdmhvc3Qtc3dpdGNoDQo+IA0KPiAgIyBh
bGwgc291cmNlIGFyZSBzdG9yZWQgaW4gU1JDUy15DQo+IC1TUkNTLXkgOj0gbWFpbi5jIHZpcnRp
b19uZXQuYyBpb2F0LmMNCj4gK1NSQ1MteSA6PSBtYWluLmMgdmlydGlvX25ldC5jDQo+IA0KPiAg
UEtHQ09ORiA/PSBwa2ctY29uZmlnDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvdmhvc3Qv
aW9hdC5jIGIvZXhhbXBsZXMvdmhvc3QvaW9hdC5jDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NA0KPiBpbmRleCA5YWVlYjEyZmQ5Li4wMDAwMDAwMDAwDQo+IC0tLSBhL2V4YW1wbGVzL3Zob3N0
L2lvYXQuYw0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDIxOCArMCwwIEBADQo+IC0vKiBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+IC0gKiBDb3B5cmlnaHQoYykgMjAx
MC0yMDIwIEludGVsIENvcnBvcmF0aW9uDQo+IC0gKi8NCj4gLQ0KPiAtI2luY2x1ZGUgPHN5cy91
aW8uaD4NCj4gLSNpZmRlZiBSVEVfUkFXX0lPQVQNCj4gLSNpbmNsdWRlIDxydGVfcmF3ZGV2Lmg+
DQo+IC0jaW5jbHVkZSA8cnRlX2lvYXRfcmF3ZGV2Lmg+DQo+IC0NCj4gLSNpbmNsdWRlICJpb2F0
LmgiDQo+IC0jaW5jbHVkZSAibWFpbi5oIg0KPiAtDQo+IC1zdHJ1Y3QgZG1hX2Zvcl92aG9zdCBk
bWFfYmluZFtNQVhfVkhPU1RfREVWSUNFXTsNCj4gLQ0KPiAtc3RydWN0IHBhY2tldF90cmFja2Vy
IHsNCj4gLQl1bnNpZ25lZCBzaG9ydCBzaXplX3RyYWNrW01BWF9FTlFVRVVFRF9TSVpFXTsNCj4g
LQl1bnNpZ25lZCBzaG9ydCBuZXh0X3JlYWQ7DQo+IC0JdW5zaWduZWQgc2hvcnQgbmV4dF93cml0
ZTsNCj4gLQl1bnNpZ25lZCBzaG9ydCBsYXN0X3JlbWFpbjsNCj4gLQl1bnNpZ25lZCBzaG9ydCBp
b2F0X3NwYWNlOw0KPiAtfTsNCj4gLQ0KPiAtc3RydWN0IHBhY2tldF90cmFja2VyIGNiX3RyYWNr
ZXJbTUFYX1ZIT1NUX0RFVklDRV07DQo+IC0NCj4gLWludA0KPiAtb3Blbl9pb2F0KGNvbnN0IGNo
YXIgKnZhbHVlKQ0KPiAtew0KPiAtCXN0cnVjdCBkbWFfZm9yX3Zob3N0ICpkbWFfaW5mbyA9IGRt
YV9iaW5kOw0KPiAtCWNoYXIgKmlucHV0ID0gc3RybmR1cCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAr
IDEpOw0KPiAtCWNoYXIgKmFkZHJzID0gaW5wdXQ7DQo+IC0JY2hhciAqcHRyc1syXTsNCj4gLQlj
aGFyICpzdGFydCwgKmVuZCwgKnN1YnN0cjsNCj4gLQlpbnQ2NF90IHZpZCwgdnJpbmdfaWQ7DQo+
IC0Jc3RydWN0IHJ0ZV9pb2F0X3Jhd2Rldl9jb25maWcgY29uZmlnOw0KPiAtCXN0cnVjdCBydGVf
cmF3ZGV2X2luZm8gaW5mbyA9IHsgLmRldl9wcml2YXRlID0gJmNvbmZpZyB9Ow0KPiAtCWNoYXIg
bmFtZVszMl07DQo+IC0JaW50IGRldl9pZDsNCj4gLQlpbnQgcmV0ID0gMDsNCj4gLQl1aW50MTZf
dCBpID0gMDsNCj4gLQljaGFyICpkbWFfYXJnW01BWF9WSE9TVF9ERVZJQ0VdOw0KPiAtCWludCBh
cmdzX25yOw0KPiAtDQo+IC0Jd2hpbGUgKGlzYmxhbmsoKmFkZHJzKSkNCj4gLQkJYWRkcnMrKzsN
Cj4gLQlpZiAoKmFkZHJzID09ICdcMCcpIHsNCj4gLQkJcmV0ID0gLTE7DQo+IC0JCWdvdG8gb3V0
Ow0KPiAtCX0NCj4gLQ0KPiAtCS8qIHByb2Nlc3MgRE1BIGRldmljZXMgd2l0aGluIGJyYWNrZXQu
ICovDQo+IC0JYWRkcnMrKzsNCj4gLQlzdWJzdHIgPSBzdHJ0b2soYWRkcnMsICI7XSIpOw0KPiAt
CWlmICghc3Vic3RyKSB7DQo+IC0JCXJldCA9IC0xOw0KPiAtCQlnb3RvIG91dDsNCj4gLQl9DQo+
IC0JYXJnc19uciA9IHJ0ZV9zdHJzcGxpdChzdWJzdHIsIHN0cmxlbihzdWJzdHIpLA0KPiAtCQkJ
ZG1hX2FyZywgTUFYX1ZIT1NUX0RFVklDRSwgJywnKTsNCj4gLQlpZiAoYXJnc19uciA8PSAwKSB7
DQo+IC0JCXJldCA9IC0xOw0KPiAtCQlnb3RvIG91dDsNCj4gLQl9DQo+IC0Jd2hpbGUgKGkgPCBh
cmdzX25yKSB7DQo+IC0JCWNoYXIgKmFyZ190ZW1wID0gZG1hX2FyZ1tpXTsNCj4gLQkJdWludDhf
dCBzdWJfbnI7DQo+IC0JCXN1Yl9uciA9IHJ0ZV9zdHJzcGxpdChhcmdfdGVtcCwgc3RybGVuKGFy
Z190ZW1wKSwgcHRycywgMiwgJ0AnKTsNCj4gLQkJaWYgKHN1Yl9uciAhPSAyKSB7DQo+IC0JCQly
ZXQgPSAtMTsNCj4gLQkJCWdvdG8gb3V0Ow0KPiAtCQl9DQo+IC0NCj4gLQkJc3RhcnQgPSBzdHJz
dHIocHRyc1swXSwgInR4ZCIpOw0KPiAtCQlpZiAoc3RhcnQgPT0gTlVMTCkgew0KPiAtCQkJcmV0
ID0gLTE7DQo+IC0JCQlnb3RvIG91dDsNCj4gLQkJfQ0KPiAtDQo+IC0JCXN0YXJ0ICs9IDM7DQo+
IC0JCXZpZCA9IHN0cnRvbChzdGFydCwgJmVuZCwgMCk7DQo+IC0JCWlmIChlbmQgPT0gc3RhcnQp
IHsNCj4gLQkJCXJldCA9IC0xOw0KPiAtCQkJZ290byBvdXQ7DQo+IC0JCX0NCj4gLQ0KPiAtCQl2
cmluZ19pZCA9IDAgKyBWSVJUSU9fUlhROw0KPiAtCQlpZiAocnRlX3BjaV9hZGRyX3BhcnNlKHB0
cnNbMV0sDQo+IC0JCQkJJihkbWFfaW5mbyArIHZpZCktPmRtYXNbdnJpbmdfaWRdLmFkZHIpIDwg
MCkgew0KPiAtCQkJcmV0ID0gLTE7DQo+IC0JCQlnb3RvIG91dDsNCj4gLQkJfQ0KPiAtDQo+IC0J
CXJ0ZV9wY2lfZGV2aWNlX25hbWUoJihkbWFfaW5mbyArIHZpZCktPmRtYXNbdnJpbmdfaWRdLmFk
ZHIsDQo+IC0JCQkJbmFtZSwgc2l6ZW9mKG5hbWUpKTsNCj4gLQkJZGV2X2lkID0gcnRlX3Jhd2Rl
dl9nZXRfZGV2X2lkKG5hbWUpOw0KPiAtCQlpZiAoZGV2X2lkID09ICh1aW50MTZfdCkoLUVOT0RF
VikgfHwNCj4gLQkJZGV2X2lkID09ICh1aW50MTZfdCkoLUVJTlZBTCkpIHsNCj4gLQkJCXJldCA9
IC0xOw0KPiAtCQkJZ290byBvdXQ7DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZiAocnRlX3Jhd2Rldl9p
bmZvX2dldChkZXZfaWQsICZpbmZvLCBzaXplb2YoY29uZmlnKSkgPCAwIHx8DQo+IC0JCXN0cnN0
cihpbmZvLmRyaXZlcl9uYW1lLCAiaW9hdCIpID09IE5VTEwpIHsNCj4gLQkJCXJldCA9IC0xOw0K
PiAtCQkJZ290byBvdXQ7DQo+IC0JCX0NCj4gLQ0KPiAtCQkoZG1hX2luZm8gKyB2aWQpLT5kbWFz
W3ZyaW5nX2lkXS5kZXZfaWQgPSBkZXZfaWQ7DQo+IC0JCShkbWFfaW5mbyArIHZpZCktPmRtYXNb
dnJpbmdfaWRdLmlzX3ZhbGlkID0gdHJ1ZTsNCj4gLQkJY29uZmlnLnJpbmdfc2l6ZSA9IElPQVRf
UklOR19TSVpFOw0KPiAtCQljb25maWcuaGRsc19kaXNhYmxlID0gdHJ1ZTsNCj4gLQkJaWYgKHJ0
ZV9yYXdkZXZfY29uZmlndXJlKGRldl9pZCwgJmluZm8sIHNpemVvZihjb25maWcpKSA8IDApIHsN
Cj4gLQkJCXJldCA9IC0xOw0KPiAtCQkJZ290byBvdXQ7DQo+IC0JCX0NCj4gLQkJcnRlX3Jhd2Rl
dl9zdGFydChkZXZfaWQpOw0KPiAtCQljYl90cmFja2VyW2Rldl9pZF0uaW9hdF9zcGFjZSA9IElP
QVRfUklOR19TSVpFIC0gMTsNCj4gLQkJZG1hX2luZm8tPm5yKys7DQo+IC0JCWkrKzsNCj4gLQl9
DQo+IC1vdXQ6DQo+IC0JZnJlZShpbnB1dCk7DQo+IC0JcmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0K
PiAtaW50MzJfdA0KPiAtaW9hdF90cmFuc2Zlcl9kYXRhX2NiKGludCB2aWQsIHVpbnQxNl90IHF1
ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICppb3ZfaXRlciwNCj4gLQkJ
c3RydWN0IHJ0ZV92aG9zdF9hc3luY19zdGF0dXMgKm9wYXF1ZV9kYXRhLCB1aW50MTZfdCBjb3Vu
dCkNCj4gLXsNCj4gLQl1aW50MzJfdCBpX2l0ZXI7DQo+IC0JdWludDE2X3QgZGV2X2lkID0gZG1h
X2JpbmRbdmlkXS5kbWFzW3F1ZXVlX2lkICogMiArIFZJUlRJT19SWFFdLmRldl9pZDsNCj4gLQlz
dHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICppdGVyID0gTlVMTDsNCj4gLQl1bnNpZ25lZCBsb25n
IGlfc2VnOw0KPiAtCXVuc2lnbmVkIHNob3J0IG1hc2sgPSBNQVhfRU5RVUVVRURfU0laRSAtIDE7
DQo+IC0JdW5zaWduZWQgc2hvcnQgd3JpdGUgPSBjYl90cmFja2VyW2Rldl9pZF0ubmV4dF93cml0
ZTsNCj4gLQ0KPiAtCWlmICghb3BhcXVlX2RhdGEpIHsNCj4gLQkJZm9yIChpX2l0ZXIgPSAwOyBp
X2l0ZXIgPCBjb3VudDsgaV9pdGVyKyspIHsNCj4gLQkJCWl0ZXIgPSBpb3ZfaXRlciArIGlfaXRl
cjsNCj4gLQkJCWlfc2VnID0gMDsNCj4gLQkJCWlmIChjYl90cmFja2VyW2Rldl9pZF0uaW9hdF9z
cGFjZSA8IGl0ZXItPm5yX3NlZ3MpDQo+IC0JCQkJYnJlYWs7DQo+IC0JCQl3aGlsZSAoaV9zZWcg
PCBpdGVyLT5ucl9zZWdzKSB7DQo+IC0JCQkJcnRlX2lvYXRfZW5xdWV1ZV9jb3B5KGRldl9pZCwN
Cj4gLQkJCQkJKHVpbnRwdHJfdCkoaXRlci0+aW92W2lfc2VnXS5zcmNfYWRkciksDQo+IC0JCQkJ
CSh1aW50cHRyX3QpKGl0ZXItPmlvdltpX3NlZ10uZHN0X2FkZHIpLA0KPiAtCQkJCQlpdGVyLT5p
b3ZbaV9zZWddLmxlbiwNCj4gLQkJCQkJMCwNCj4gLQkJCQkJMCk7DQo+IC0JCQkJaV9zZWcrKzsN
Cj4gLQkJCX0NCj4gLQkJCXdyaXRlICY9IG1hc2s7DQo+IC0JCQljYl90cmFja2VyW2Rldl9pZF0u
c2l6ZV90cmFja1t3cml0ZV0gPSBpdGVyLT5ucl9zZWdzOw0KPiAtCQkJY2JfdHJhY2tlcltkZXZf
aWRdLmlvYXRfc3BhY2UgLT0gaXRlci0+bnJfc2VnczsNCj4gLQkJCXdyaXRlKys7DQo+IC0JCX0N
Cj4gLQl9IGVsc2Ugew0KPiAtCQkvKiBPcGFxdWUgZGF0YSBpcyBub3Qgc3VwcG9ydGVkICovDQo+
IC0JCXJldHVybiAtMTsNCj4gLQl9DQo+IC0JLyogcmluZyB0aGUgZG9vcmJlbGwgKi8NCj4gLQly
dGVfaW9hdF9wZXJmb3JtX29wcyhkZXZfaWQpOw0KPiAtCWNiX3RyYWNrZXJbZGV2X2lkXS5uZXh0
X3dyaXRlID0gd3JpdGU7DQo+IC0JcmV0dXJuIGlfaXRlcjsNCj4gLX0NCj4gLQ0KPiAtaW50MzJf
dA0KPiAtaW9hdF9jaGVja19jb21wbGV0ZWRfY29waWVzX2NiKGludCB2aWQsIHVpbnQxNl90IHF1
ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyAqb3BhcXVlX2RhdGEs
DQo+IC0JCXVpbnQxNl90IG1heF9wYWNrZXRzKQ0KPiAtew0KPiAtCWlmICghb3BhcXVlX2RhdGEp
IHsNCj4gLQkJdWludHB0cl90IGR1bXBbMjU1XTsNCj4gLQkJaW50IG5fc2VnOw0KPiAtCQl1bnNp
Z25lZCBzaG9ydCByZWFkLCB3cml0ZTsNCj4gLQkJdW5zaWduZWQgc2hvcnQgbmJfcGFja2V0ID0g
MDsNCj4gLQkJdW5zaWduZWQgc2hvcnQgbWFzayA9IE1BWF9FTlFVRVVFRF9TSVpFIC0gMTsNCj4g
LQkJdW5zaWduZWQgc2hvcnQgaTsNCj4gLQ0KPiAtCQl1aW50MTZfdCBkZXZfaWQgPSBkbWFfYmlu
ZFt2aWRdLmRtYXNbcXVldWVfaWQgKiAyDQo+IC0JCQkJKyBWSVJUSU9fUlhRXS5kZXZfaWQ7DQo+
IC0JCW5fc2VnID0gcnRlX2lvYXRfY29tcGxldGVkX29wcyhkZXZfaWQsIDI1NSwgTlVMTCwgTlVM
TCwgZHVtcCwNCj4gZHVtcCk7DQo+IC0JCWlmIChuX3NlZyA8IDApIHsNCj4gLQkJCVJURV9MT0co
RVJSLA0KPiAtCQkJCVZIT1NUX0RBVEEsDQo+IC0JCQkJImZhaWwgdG8gcG9sbCBjb21wbGV0ZWQg
YnVmIG9uIElPQVQgZGV2aWNlICV1IiwNCj4gLQkJCQlkZXZfaWQpOw0KPiAtCQkJcmV0dXJuIDA7
DQo+IC0JCX0NCj4gLQkJaWYgKG5fc2VnID09IDApDQo+IC0JCQlyZXR1cm4gMDsNCj4gLQ0KPiAt
CQljYl90cmFja2VyW2Rldl9pZF0uaW9hdF9zcGFjZSArPSBuX3NlZzsNCj4gLQkJbl9zZWcgKz0g
Y2JfdHJhY2tlcltkZXZfaWRdLmxhc3RfcmVtYWluOw0KPiAtDQo+IC0JCXJlYWQgPSBjYl90cmFj
a2VyW2Rldl9pZF0ubmV4dF9yZWFkOw0KPiAtCQl3cml0ZSA9IGNiX3RyYWNrZXJbZGV2X2lkXS5u
ZXh0X3dyaXRlOw0KPiAtCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3BhY2tldHM7IGkrKykgew0KPiAt
CQkJcmVhZCAmPSBtYXNrOw0KPiAtCQkJaWYgKHJlYWQgPT0gd3JpdGUpDQo+IC0JCQkJYnJlYWs7
DQo+IC0JCQlpZiAobl9zZWcgPj0gY2JfdHJhY2tlcltkZXZfaWRdLnNpemVfdHJhY2tbcmVhZF0p
IHsNCj4gLQkJCQluX3NlZyAtPSBjYl90cmFja2VyW2Rldl9pZF0uc2l6ZV90cmFja1tyZWFkXTsN
Cj4gLQkJCQlyZWFkKys7DQo+IC0JCQkJbmJfcGFja2V0Kys7DQo+IC0JCQl9IGVsc2Ugew0KPiAt
CQkJCWJyZWFrOw0KPiAtCQkJfQ0KPiAtCQl9DQo+IC0JCWNiX3RyYWNrZXJbZGV2X2lkXS5uZXh0
X3JlYWQgPSByZWFkOw0KPiAtCQljYl90cmFja2VyW2Rldl9pZF0ubGFzdF9yZW1haW4gPSBuX3Nl
ZzsNCj4gLQkJcmV0dXJuIG5iX3BhY2tldDsNCj4gLQl9DQo+IC0JLyogT3BhcXVlIGRhdGEgaXMg
bm90IHN1cHBvcnRlZCAqLw0KPiAtCXJldHVybiAtMTsNCj4gLX0NCj4gLQ0KPiAtI2VuZGlmIC8q
IFJURV9SQVdfSU9BVCAqLw0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvdmhvc3QvaW9hdC5oIGIv
ZXhhbXBsZXMvdmhvc3QvaW9hdC5oDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl
eCBkOWJmNzE3ZThkLi4wMDAwMDAwMDAwDQo+IC0tLSBhL2V4YW1wbGVzL3Zob3N0L2lvYXQuaA0K
PiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDYzICswLDAgQEANCj4gLS8qIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gLSAqIENvcHlyaWdodChjKSAyMDEwLTIwMjAgSW50
ZWwgQ29ycG9yYXRpb24NCj4gLSAqLw0KPiAtDQo+IC0jaWZuZGVmIF9JT0FUX0hfDQo+IC0jZGVm
aW5lIF9JT0FUX0hfDQo+IC0NCj4gLSNpbmNsdWRlIDxydGVfdmhvc3QuaD4NCj4gLSNpbmNsdWRl
IDxydGVfcGNpLmg+DQo+IC0jaW5jbHVkZSA8cnRlX3Zob3N0X2FzeW5jLmg+DQo+IC0NCj4gLSNk
ZWZpbmUgTUFYX1ZIT1NUX0RFVklDRSAxMDI0DQo+IC0jZGVmaW5lIElPQVRfUklOR19TSVpFIDQw
OTYNCj4gLSNkZWZpbmUgTUFYX0VOUVVFVUVEX1NJWkUgNDA5Ng0KPiAtDQo+IC1zdHJ1Y3QgZG1h
X2luZm8gew0KPiAtCXN0cnVjdCBydGVfcGNpX2FkZHIgYWRkcjsNCj4gLQl1aW50MTZfdCBkZXZf
aWQ7DQo+IC0JYm9vbCBpc192YWxpZDsNCj4gLX07DQo+IC0NCj4gLXN0cnVjdCBkbWFfZm9yX3Zo
b3N0IHsNCj4gLQlzdHJ1Y3QgZG1hX2luZm8gZG1hc1tSVEVfTUFYX1FVRVVFU19QRVJfUE9SVCAq
IDJdOw0KPiAtCXVpbnQxNl90IG5yOw0KPiAtfTsNCj4gLQ0KPiAtI2lmZGVmIFJURV9SQVdfSU9B
VA0KPiAtaW50IG9wZW5faW9hdChjb25zdCBjaGFyICp2YWx1ZSk7DQo+IC0NCj4gLWludDMyX3QN
Cj4gLWlvYXRfdHJhbnNmZXJfZGF0YV9jYihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4g
LQkJc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciAqaW92X2l0ZXIsDQo+IC0JCXN0cnVjdCBydGVf
dmhvc3RfYXN5bmNfc3RhdHVzICpvcGFxdWVfZGF0YSwgdWludDE2X3QgY291bnQpOw0KPiAtDQo+
IC1pbnQzMl90DQo+IC1pb2F0X2NoZWNrX2NvbXBsZXRlZF9jb3BpZXNfY2IoaW50IHZpZCwgdWlu
dDE2X3QgcXVldWVfaWQsDQo+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfc3RhdHVzICpvcGFx
dWVfZGF0YSwNCj4gLQkJdWludDE2X3QgbWF4X3BhY2tldHMpOw0KPiAtI2Vsc2UNCj4gLXN0YXRp
YyBpbnQgb3Blbl9pb2F0KGNvbnN0IGNoYXIgKnZhbHVlIF9fcnRlX3VudXNlZCkNCj4gLXsNCj4g
LQlyZXR1cm4gLTE7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQzMl90DQo+IC1pb2F0X3RyYW5z
ZmVyX2RhdGFfY2IoaW50IHZpZCBfX3J0ZV91bnVzZWQsIHVpbnQxNl90IHF1ZXVlX2lkIF9fcnRl
X3VudXNlZCwNCj4gLQkJc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciAqaW92X2l0ZXIgX19ydGVf
dW51c2VkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyAqb3BhcXVlX2RhdGEg
X19ydGVfdW51c2VkLA0KPiAtCQl1aW50MTZfdCBjb3VudCBfX3J0ZV91bnVzZWQpDQo+IC17DQo+
IC0JcmV0dXJuIC0xOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50MzJfdA0KPiAtaW9hdF9jaGVj
a19jb21wbGV0ZWRfY29waWVzX2NiKGludCB2aWQgX19ydGVfdW51c2VkLA0KPiAtCQl1aW50MTZf
dCBxdWV1ZV9pZCBfX3J0ZV91bnVzZWQsDQo+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfc3Rh
dHVzICpvcGFxdWVfZGF0YSBfX3J0ZV91bnVzZWQsDQo+IC0JCXVpbnQxNl90IG1heF9wYWNrZXRz
IF9fcnRlX3VudXNlZCkNCj4gLXsNCj4gLQlyZXR1cm4gLTE7DQo+IC19DQo+IC0jZW5kaWYNCj4g
LSNlbmRpZiAvKiBfSU9BVF9IXyAqLw0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvdmhvc3QvbWFp
bi5jIGIvZXhhbXBsZXMvdmhvc3QvbWFpbi5jDQo+IGluZGV4IDMzZDAyM2FhMzkuLjQ0MDczNDk5
YmMgMTAwNjQ0DQo+IC0tLSBhL2V4YW1wbGVzL3Zob3N0L21haW4uYw0KPiArKysgYi9leGFtcGxl
cy92aG9zdC9tYWluLmMNCj4gQEAgLTI0LDggKzI0LDkgQEANCj4gICNpbmNsdWRlIDxydGVfaXAu
aD4NCj4gICNpbmNsdWRlIDxydGVfdGNwLmg+DQo+ICAjaW5jbHVkZSA8cnRlX3BhdXNlLmg+DQo+
ICsjaW5jbHVkZSA8cnRlX2RtYWRldi5oPg0KPiArI2luY2x1ZGUgPHJ0ZV92aG9zdF9hc3luYy5o
Pg0KPiANCj4gLSNpbmNsdWRlICJpb2F0LmgiDQo+ICAjaW5jbHVkZSAibWFpbi5oIg0KPiANCj4g
ICNpZm5kZWYgTUFYX1FVRVVFUw0KPiBAQCAtNTYsNiArNTcsMTQgQEANCj4gICNkZWZpbmUgUlRF
X1RFU1RfVFhfREVTQ19ERUZBVUxUIDUxMg0KPiANCj4gICNkZWZpbmUgSU5WQUxJRF9QT1JUX0lE
IDB4RkYNCj4gKyNkZWZpbmUgSU5WQUxJRF9ETUFfSUQgLTENCj4gKw0KPiArI2RlZmluZSBNQVhf
VkhPU1RfREVWSUNFIDEwMjQNCj4gKyNkZWZpbmUgRE1BX1JJTkdfU0laRSA0MDk2DQo+ICsNCj4g
K3N0cnVjdCBkbWFfZm9yX3Zob3N0IGRtYV9iaW5kW01BWF9WSE9TVF9ERVZJQ0VdOw0KPiArc3Ry
dWN0IHJ0ZV92aG9zdF9hc3luY19kbWFfaW5mbyBkbWFfY29uZmlnW1JURV9ETUFERVZfREVGQVVM
VF9NQVhdOw0KPiArc3RhdGljIGludCBkbWFfY291bnQ7DQo+IA0KPiAgLyogbWFzayBvZiBlbmFi
bGVkIHBvcnRzICovDQo+ICBzdGF0aWMgdWludDMyX3QgZW5hYmxlZF9wb3J0X21hc2sgPSAwOw0K
PiBAQCAtOTYsOCArMTA1LDYgQEAgc3RhdGljIGludCBidWlsdGluX25ldF9kcml2ZXI7DQo+IA0K
PiAgc3RhdGljIGludCBhc3luY192aG9zdF9kcml2ZXI7DQo+IA0KPiAtc3RhdGljIGNoYXIgKmRt
YV90eXBlOw0KPiAtDQo+ICAvKiBTcGVjaWZ5IHRpbWVvdXQgKGluIHVzZWNvbmRzKSBiZXR3ZWVu
IHJldHJpZXMgb24gUlguICovDQo+ICBzdGF0aWMgdWludDMyX3QgYnVyc3RfcnhfZGVsYXlfdGlt
ZSA9IEJVUlNUX1JYX1dBSVRfVVM7DQo+ICAvKiBTcGVjaWZ5IHRoZSBudW1iZXIgb2YgcmV0cmll
cyBvbiBSWC4gKi8NCj4gQEAgLTE5NiwxMyArMjAzLDEzNCBAQCBzdHJ1Y3Qgdmhvc3RfYnVmZnRh
YmxlICp2aG9zdF90eGJ1ZmZbUlRFX01BWF9MQ09SRSAqDQo+IE1BWF9WSE9TVF9ERVZJQ0VdOw0K
PiAgI2RlZmluZSBNQlVGX1RBQkxFX0RSQUlOX1RTQwkoKHJ0ZV9nZXRfdHNjX2h6KCkgKyBVU19Q
RVJfUyAtIDEpIFwNCj4gIAkJCQkgLyBVU19QRVJfUyAqIEJVUlNUX1RYX0RSQUlOX1VTKQ0KPiAN
Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbA0KPiAraXNfZG1hX2NvbmZpZ3VyZWQoaW50MTZfdCBkZXZf
aWQpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgZG1hX2NvdW50
OyBpKyspIHsNCj4gKwkJaWYgKGRtYV9jb25maWdbaV0uZGV2X2lkID09IGRldl9pZCkgew0KPiAr
CQkJcmV0dXJuIHRydWU7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmV0dXJuIGZhbHNlOw0KPiArfQ0K
PiArDQo+ICBzdGF0aWMgaW5saW5lIGludA0KPiAgb3Blbl9kbWEoY29uc3QgY2hhciAqdmFsdWUp
DQo+ICB7DQo+IC0JaWYgKGRtYV90eXBlICE9IE5VTEwgJiYgc3RybmNtcChkbWFfdHlwZSwgImlv
YXQiLCA0KSA9PSAwKQ0KPiAtCQlyZXR1cm4gb3Blbl9pb2F0KHZhbHVlKTsNCj4gKwlzdHJ1Y3Qg
ZG1hX2Zvcl92aG9zdCAqZG1hX2luZm8gPSBkbWFfYmluZDsNCj4gKwljaGFyICppbnB1dCA9IHN0
cm5kdXAodmFsdWUsIHN0cmxlbih2YWx1ZSkgKyAxKTsNCj4gKwljaGFyICphZGRycyA9IGlucHV0
Ow0KPiArCWNoYXIgKnB0cnNbMl07DQo+ICsJY2hhciAqc3RhcnQsICplbmQsICpzdWJzdHI7DQo+
ICsJaW50NjRfdCB2aWQsIHZyaW5nX2lkOw0KPiArDQo+ICsJc3RydWN0IHJ0ZV9kbWFfaW5mbyBp
bmZvOw0KPiArCXN0cnVjdCBydGVfZG1hX2NvbmYgZGV2X2NvbmZpZyA9IHsgLm5iX3ZjaGFucyA9
IDEgfTsNCj4gKwlzdHJ1Y3QgcnRlX2RtYV92Y2hhbl9jb25mIHFjb25mID0gew0KPiArCQkuZGly
ZWN0aW9uID0gUlRFX0RNQV9ESVJfTUVNX1RPX01FTSwNCj4gKwkJLm5iX2Rlc2MgPSBETUFfUklO
R19TSVpFDQo+ICsJfTsNCj4gKw0KPiArCWludCBkZXZfaWQ7DQo+ICsJaW50IHJldCA9IDA7DQo+
ICsJdWludDE2X3QgaSA9IDA7DQo+ICsJY2hhciAqZG1hX2FyZ1tNQVhfVkhPU1RfREVWSUNFXTsN
Cj4gKwlpbnQgYXJnc19ucjsNCj4gKw0KPiArCXdoaWxlIChpc2JsYW5rKCphZGRycykpDQo+ICsJ
CWFkZHJzKys7DQo+ICsJaWYgKCphZGRycyA9PSAnXDAnKSB7DQo+ICsJCXJldCA9IC0xOw0KPiAr
CQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBwcm9jZXNzIERNQSBkZXZpY2VzIHdpdGhp
biBicmFja2V0LiAqLw0KPiArCWFkZHJzKys7DQo+ICsJc3Vic3RyID0gc3RydG9rKGFkZHJzLCAi
O10iKTsNCj4gKwlpZiAoIXN1YnN0cikgew0KPiArCQlyZXQgPSAtMTsNCj4gKwkJZ290byBvdXQ7
DQo+ICsJfQ0KPiArDQo+ICsJYXJnc19uciA9IHJ0ZV9zdHJzcGxpdChzdWJzdHIsIHN0cmxlbihz
dWJzdHIpLA0KPiArCQkJZG1hX2FyZywgTUFYX1ZIT1NUX0RFVklDRSwgJywnKTsNCj4gKwlpZiAo
YXJnc19uciA8PSAwKSB7DQo+ICsJCXJldCA9IC0xOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+
ICsNCj4gKwl3aGlsZSAoaSA8IGFyZ3NfbnIpIHsNCj4gKwkJY2hhciAqYXJnX3RlbXAgPSBkbWFf
YXJnW2ldOw0KPiArCQl1aW50OF90IHN1Yl9ucjsNCj4gKw0KPiArCQlzdWJfbnIgPSBydGVfc3Ry
c3BsaXQoYXJnX3RlbXAsIHN0cmxlbihhcmdfdGVtcCksIHB0cnMsIDIsICdAJyk7DQo+ICsJCWlm
IChzdWJfbnIgIT0gMikgew0KPiArCQkJcmV0ID0gLTE7DQo+ICsJCQlnb3RvIG91dDsNCj4gKwkJ
fQ0KPiArDQo+ICsJCXN0YXJ0ID0gc3Ryc3RyKHB0cnNbMF0sICJ0eGQiKTsNCj4gKwkJaWYgKHN0
YXJ0ID09IE5VTEwpIHsNCj4gKwkJCXJldCA9IC0xOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0N
Cj4gKw0KPiArCQlzdGFydCArPSAzOw0KPiArCQl2aWQgPSBzdHJ0b2woc3RhcnQsICZlbmQsIDAp
Ow0KPiArCQlpZiAoZW5kID09IHN0YXJ0KSB7DQo+ICsJCQlyZXQgPSAtMTsNCj4gKwkJCWdvdG8g
b3V0Ow0KPiArCQl9DQo+ICsNCj4gKwkJdnJpbmdfaWQgPSAwICsgVklSVElPX1JYUTsNCg0KTm8g
bmVlZCB0byBpbnRyb2R1Y2UgdnJpbmdfaWQsIGl0J3MgYWx3YXlzIFZJUlRJT19SWFENCg0KPiAr
DQo+ICsJCWRldl9pZCA9IHJ0ZV9kbWFfZ2V0X2Rldl9pZF9ieV9uYW1lKHB0cnNbMV0pOw0KPiAr
CQlpZiAoZGV2X2lkIDwgMCkgew0KPiArCQkJUlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkZh
aWwgdG8gZmluZCBETUEgJXMuXG4iLA0KPiBwdHJzWzFdKTsNCj4gKwkJCXJldCA9IC0xOw0KPiAr
CQkJZ290byBvdXQ7DQo+ICsJCX0gZWxzZSBpZiAoaXNfZG1hX2NvbmZpZ3VyZWQoZGV2X2lkKSkg
ew0KPiArCQkJZ290byBkb25lOw0KPiArCQl9DQo+ICsNCg0KUGxlYXNlIGNhbGwgcnRlX2RtYV9p
bmZvX2dldCBiZWZvcmUgY29uZmlndXJlIHRvIG1ha2Ugc3VyZSBpbmZvLm1heF92Y2hhbnMgPj0x
DQoNCj4gKwkJaWYgKHJ0ZV9kbWFfY29uZmlndXJlKGRldl9pZCwgJmRldl9jb25maWcpICE9IDAp
IHsNCj4gKwkJCVJURV9MT0coRVJSLCBWSE9TVF9DT05GSUcsICJGYWlsIHRvIGNvbmZpZ3VyZSBE
TUEgJWQuXG4iLA0KPiBkZXZfaWQpOw0KPiArCQkJcmV0ID0gLTE7DQo+ICsJCQlnb3RvIG91dDsN
Cj4gKwkJfQ0KPiArDQo+ICsJCWlmIChydGVfZG1hX3ZjaGFuX3NldHVwKGRldl9pZCwgMCwgJnFj
b25mKSAhPSAwKSB7DQo+ICsJCQlSVEVfTE9HKEVSUiwgVkhPU1RfQ09ORklHLCAiRmFpbCB0byBz
ZXQgdXAgRE1BICVkLlxuIiwNCj4gZGV2X2lkKTsNCj4gKwkJCXJldCA9IC0xOw0KPiArCQkJZ290
byBvdXQ7DQo+ICsJCX0NCj4gDQo+IC0JcmV0dXJuIC0xOw0KPiArCQlydGVfZG1hX2luZm9fZ2V0
KGRldl9pZCwgJmluZm8pOw0KPiArCQlpZiAoaW5mby5uYl92Y2hhbnMgIT0gMSkgew0KPiArCQkJ
UlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkRNQSAlZCBoYXMgbm8gcXVldWVzLlxuIiwNCj4g
ZGV2X2lkKTsNCg0KVGhlbiB0aGUgYWJvdmUgbWVhbnMgdGhlIG51bWJlciBvZiB2Y2hhbiBpcyBu
b3QgY29uZmlndXJlZC4NCg0KPiArCQkJcmV0ID0gLTE7DQo+ICsJCQlnb3RvIG91dDsNCj4gKwkJ
fQ0KPiArDQo+ICsJCWlmIChydGVfZG1hX3N0YXJ0KGRldl9pZCkgIT0gMCkgew0KPiArCQkJUlRF
X0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkZhaWwgdG8gc3RhcnQgRE1BICV1LlxuIiwNCj4gZGV2
X2lkKTsNCj4gKwkJCXJldCA9IC0xOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0NCj4gKw0KPiAr
CQlkbWFfY29uZmlnW2RtYV9jb3VudF0uZGV2X2lkID0gZGV2X2lkOw0KPiArCQlkbWFfY29uZmln
W2RtYV9jb3VudF0ubWF4X3ZjaGFucyA9IDE7DQo+ICsJCWRtYV9jb25maWdbZG1hX2NvdW50Kytd
Lm1heF9kZXNjID0gRE1BX1JJTkdfU0laRTsNCj4gKw0KPiArZG9uZToNCj4gKwkJKGRtYV9pbmZv
ICsgdmlkKS0+ZG1hc1t2cmluZ19pZF0uZGV2X2lkID0gZGV2X2lkOw0KPiArCQlpKys7DQo+ICsJ
fQ0KPiArb3V0Og0KPiArCWZyZWUoaW5wdXQpOw0KPiArCXJldHVybiByZXQ7DQo+ICB9DQo+IA0K
PiAgLyoNCj4gQEAgLTUwMCw4ICs2MjgsNiBAQCBlbnVtIHsNCj4gIAlPUFRfQ0xJRU5UX05VTSwN
Cj4gICNkZWZpbmUgT1BUX0JVSUxUSU5fTkVUX0RSSVZFUiAgImJ1aWx0aW4tbmV0LWRyaXZlciIN
Cj4gIAlPUFRfQlVJTFRJTl9ORVRfRFJJVkVSX05VTSwNCj4gLSNkZWZpbmUgT1BUX0RNQV9UWVBF
ICAgICAgICAgICAgImRtYS10eXBlIg0KPiAtCU9QVF9ETUFfVFlQRV9OVU0sDQo+ICAjZGVmaW5l
IE9QVF9ETUFTICAgICAgICAgICAgICAgICJkbWFzIg0KPiAgCU9QVF9ETUFTX05VTSwNCj4gIH07
DQo+IEBAIC01MzksOCArNjY1LDYgQEAgdXNfdmhvc3RfcGFyc2VfYXJncyhpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpDQo+ICAJCQkJTlVMTCwgT1BUX0NMSUVOVF9OVU19LA0KPiAgCQl7T1BUX0JVSUxU
SU5fTkVUX0RSSVZFUiwgbm9fYXJndW1lbnQsDQo+ICAJCQkJTlVMTCwgT1BUX0JVSUxUSU5fTkVU
X0RSSVZFUl9OVU19LA0KPiAtCQl7T1BUX0RNQV9UWVBFLCByZXF1aXJlZF9hcmd1bWVudCwNCj4g
LQkJCQlOVUxMLCBPUFRfRE1BX1RZUEVfTlVNfSwNCj4gIAkJe09QVF9ETUFTLCByZXF1aXJlZF9h
cmd1bWVudCwNCj4gIAkJCQlOVUxMLCBPUFRfRE1BU19OVU19LA0KPiAgCQl7TlVMTCwgMCwgMCwg
MH0sDQo+IEBAIC02NjEsMTAgKzc4NSw2IEBAIHVzX3Zob3N0X3BhcnNlX2FyZ3MoaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KQ0KPiAgCQkJfQ0KPiAgCQkJYnJlYWs7DQo+IA0KPiAtCQljYXNlIE9QVF9E
TUFfVFlQRV9OVU06DQo+IC0JCQlkbWFfdHlwZSA9IG9wdGFyZzsNCj4gLQkJCWJyZWFrOw0KPiAt
DQo+ICAJCWNhc2UgT1BUX0RNQVNfTlVNOg0KPiAgCQkJaWYgKG9wZW5fZG1hKG9wdGFyZykgPT0g
LTEpIHsNCj4gIAkJCQlSVEVfTE9HKElORk8sIFZIT1NUX0NPTkZJRywNCj4gQEAgLTg0MSw5ICs5
NjEsMTAgQEAgY29tcGxldGVfYXN5bmNfcGt0cyhzdHJ1Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiAg
ew0KPiAgCXN0cnVjdCBydGVfbWJ1ZiAqcF9jcGxbTUFYX1BLVF9CVVJTVF07DQo+ICAJdWludDE2
X3QgY29tcGxldGVfY291bnQ7DQo+ICsJaW50MTZfdCBkbWFfaWQgPSBkbWFfYmluZFt2ZGV2LT52
aWRdLmRtYXNbVklSVElPX1JYUV0uZGV2X2lkOw0KPiANCj4gIAljb21wbGV0ZV9jb3VudCA9IHJ0
ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKHZkZXYtPnZpZCwNCj4gLQkJCQkJVklSVElP
X1JYUSwgcF9jcGwsIE1BWF9QS1RfQlVSU1QpOw0KPiArCQkJCQlWSVJUSU9fUlhRLCBwX2NwbCwg
TUFYX1BLVF9CVVJTVCwgZG1hX2lkLCAwKTsNCj4gIAlpZiAoY29tcGxldGVfY291bnQpIHsNCj4g
IAkJZnJlZV9wa3RzKHBfY3BsLCBjb21wbGV0ZV9jb3VudCk7DQo+ICAJCV9fYXRvbWljX3N1Yl9m
ZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwgY29tcGxldGVfY291bnQsDQo+IF9fQVRPTUlDX1NF
UV9DU1QpOw0KPiBAQCAtODgzLDExICsxMDA0LDEyIEBAIGRyYWluX3Zob3N0KHN0cnVjdCB2aG9z
dF9kZXYgKnZkZXYpDQo+IA0KPiAgCWlmIChidWlsdGluX25ldF9kcml2ZXIpIHsNCj4gIAkJcmV0
ID0gdnNfZW5xdWV1ZV9wa3RzKHZkZXYsIFZJUlRJT19SWFEsIG0sIG5yX3htaXQpOw0KPiAtCX0g
ZWxzZSBpZiAoYXN5bmNfdmhvc3RfZHJpdmVyKSB7DQo+ICsJfSBlbHNlIGlmIChkbWFfYmluZFt2
ZGV2LT52aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCkgew0KPiAgCQl1aW50MTZf
dCBlbnF1ZXVlX2ZhaWwgPSAwOw0KPiArCQlpbnQxNl90IGRtYV9pZCA9IGRtYV9iaW5kW3ZkZXYt
PnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQ7DQo+IA0KPiAgCQljb21wbGV0ZV9hc3luY19w
a3RzKHZkZXYpOw0KPiAtCQlyZXQgPSBydGVfdmhvc3Rfc3VibWl0X2VucXVldWVfYnVyc3QodmRl
di0+dmlkLCBWSVJUSU9fUlhRLCBtLA0KPiBucl94bWl0KTsNCj4gKwkJcmV0ID0gcnRlX3Zob3N0
X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHZkZXYtPnZpZCwgVklSVElPX1JYUSwgbSwNCj4gbnJfeG1p
dCwgZG1hX2lkLCAwKTsNCj4gIAkJX19hdG9taWNfYWRkX2ZldGNoKCZ2ZGV2LT5wa3RzX2luZmxp
Z2h0LCByZXQsIF9fQVRPTUlDX1NFUV9DU1QpOw0KPiANCj4gIAkJZW5xdWV1ZV9mYWlsID0gbnJf
eG1pdCAtIHJldDsNCj4gQEAgLTkwNSw3ICsxMDI3LDcgQEAgZHJhaW5fdmhvc3Qoc3RydWN0IHZo
b3N0X2RldiAqdmRldikNCj4gIAkJCQlfX0FUT01JQ19TRVFfQ1NUKTsNCj4gIAl9DQo+IA0KPiAt
CWlmICghYXN5bmNfdmhvc3RfZHJpdmVyKQ0KPiArCWlmICghZG1hX2JpbmRbdmRldi0+dmlkXS5k
bWFzW1ZJUlRJT19SWFFdLmFzeW5jX2VuYWJsZWQpDQo+ICAJCWZyZWVfcGt0cyhtLCBucl94bWl0
KTsNCj4gIH0NCj4gDQo+IEBAIC0xMjExLDEyICsxMzMzLDEzIEBAIGRyYWluX2V0aF9yeChzdHJ1
Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiAgCWlmIChidWlsdGluX25ldF9kcml2ZXIpIHsNCj4gIAkJ
ZW5xdWV1ZV9jb3VudCA9IHZzX2VucXVldWVfcGt0cyh2ZGV2LCBWSVJUSU9fUlhRLA0KPiAgCQkJ
CQkJcGt0cywgcnhfY291bnQpOw0KPiAtCX0gZWxzZSBpZiAoYXN5bmNfdmhvc3RfZHJpdmVyKSB7
DQo+ICsJfSBlbHNlIGlmIChkbWFfYmluZFt2ZGV2LT52aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5
bmNfZW5hYmxlZCkgew0KPiAgCQl1aW50MTZfdCBlbnF1ZXVlX2ZhaWwgPSAwOw0KPiArCQlpbnQx
Nl90IGRtYV9pZCA9IGRtYV9iaW5kW3ZkZXYtPnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQ7
DQo+IA0KPiAgCQljb21wbGV0ZV9hc3luY19wa3RzKHZkZXYpOw0KPiAgCQllbnF1ZXVlX2NvdW50
ID0gcnRlX3Zob3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHZkZXYtPnZpZCwNCj4gLQkJCQkJVklS
VElPX1JYUSwgcGt0cywgcnhfY291bnQpOw0KPiArCQkJCQlWSVJUSU9fUlhRLCBwa3RzLCByeF9j
b3VudCwgZG1hX2lkLCAwKTsNCj4gIAkJX19hdG9taWNfYWRkX2ZldGNoKCZ2ZGV2LT5wa3RzX2lu
ZmxpZ2h0LCBlbnF1ZXVlX2NvdW50LA0KPiBfX0FUT01JQ19TRVFfQ1NUKTsNCj4gDQo+ICAJCWVu
cXVldWVfZmFpbCA9IHJ4X2NvdW50IC0gZW5xdWV1ZV9jb3VudDsNCj4gQEAgLTEyMzUsNyArMTM1
OCw3IEBAIGRyYWluX2V0aF9yeChzdHJ1Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiAgCQkJCV9fQVRP
TUlDX1NFUV9DU1QpOw0KPiAgCX0NCj4gDQo+IC0JaWYgKCFhc3luY192aG9zdF9kcml2ZXIpDQo+
ICsJaWYgKCFkbWFfYmluZFt2ZGV2LT52aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxl
ZCkNCj4gIAkJZnJlZV9wa3RzKHBrdHMsIHJ4X2NvdW50KTsNCj4gIH0NCj4gDQo+IEBAIC0xMzg3
LDE4ICsxNTEwLDIwIEBAIGRlc3Ryb3lfZGV2aWNlKGludCB2aWQpDQo+ICAJCSIoJWQpIGRldmlj
ZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gZGF0YSBjb3JlXG4iLA0KPiAgCQl2ZGV2LT52aWQpOw0K
PiANCj4gLQlpZiAoYXN5bmNfdmhvc3RfZHJpdmVyKSB7DQo+ICsJaWYgKGRtYV9iaW5kW3ZpZF0u
ZG1hc1tWSVJUSU9fUlhRXS5hc3luY19lbmFibGVkKSB7DQo+ICAJCXVpbnQxNl90IG5fcGt0ID0g
MDsNCj4gKwkJaW50MTZfdCBkbWFfaWQgPSBkbWFfYmluZFt2aWRdLmRtYXNbVklSVElPX1JYUV0u
ZGV2X2lkOw0KPiAgCQlzdHJ1Y3QgcnRlX21idWYgKm1fY3BsW3ZkZXYtPnBrdHNfaW5mbGlnaHRd
Ow0KPiANCj4gIAkJd2hpbGUgKHZkZXYtPnBrdHNfaW5mbGlnaHQpIHsNCj4gIAkJCW5fcGt0ID0g
cnRlX3Zob3N0X2NsZWFyX3F1ZXVlX3RocmVhZF91bnNhZmUodmlkLCBWSVJUSU9fUlhRLA0KPiAt
CQkJCQkJbV9jcGwsIHZkZXYtPnBrdHNfaW5mbGlnaHQpOw0KPiArCQkJCQkJbV9jcGwsIHZkZXYt
PnBrdHNfaW5mbGlnaHQsIGRtYV9pZCwgMCk7DQo+ICAJCQlmcmVlX3BrdHMobV9jcGwsIG5fcGt0
KTsNCj4gIAkJCV9fYXRvbWljX3N1Yl9mZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwgbl9wa3Qs
DQo+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiAgCQl9DQo+IA0KPiAgCQlydGVfdmhvc3RfYXN5bmNf
Y2hhbm5lbF91bnJlZ2lzdGVyKHZpZCwgVklSVElPX1JYUSk7DQo+ICsJCWRtYV9iaW5kW3ZpZF0u
ZG1hc1tWSVJUSU9fUlhRXS5hc3luY19lbmFibGVkID0gZmFsc2U7DQo+ICAJfQ0KPiANCj4gIAly
dGVfZnJlZSh2ZGV2KTsNCj4gQEAgLTE0NjgsMjAgKzE1OTMsMTQgQEAgbmV3X2RldmljZShpbnQg
dmlkKQ0KPiAgCQkiKCVkKSBkZXZpY2UgaGFzIGJlZW4gYWRkZWQgdG8gZGF0YSBjb3JlICVkXG4i
LA0KPiAgCQl2aWQsIHZkZXYtPmNvcmVpZCk7DQo+IA0KPiAtCWlmIChhc3luY192aG9zdF9kcml2
ZXIpIHsNCj4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnID0gezB9Ow0K
PiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzIGNoYW5uZWxfb3BzOw0KPiAt
DQo+IC0JCWlmIChkbWFfdHlwZSAhPSBOVUxMICYmIHN0cm5jbXAoZG1hX3R5cGUsICJpb2F0Iiwg
NCkgPT0gMCkgew0KPiAtCQkJY2hhbm5lbF9vcHMudHJhbnNmZXJfZGF0YSA9IGlvYXRfdHJhbnNm
ZXJfZGF0YV9jYjsNCj4gLQkJCWNoYW5uZWxfb3BzLmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPQ0K
PiAtCQkJCWlvYXRfY2hlY2tfY29tcGxldGVkX2NvcGllc19jYjsNCj4gLQ0KPiAtCQkJY29uZmln
LmZlYXR1cmVzID0gUlRFX1ZIT1NUX0FTWU5DX0lOT1JERVI7DQo+ICsJaWYgKGRtYV9iaW5kW3Zp
ZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQgIT0gSU5WQUxJRF9ETUFfSUQpIHsNCj4gKwkJaW50
IHJldDsNCj4gDQo+IC0JCQlyZXR1cm4gcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIo
dmlkLCBWSVJUSU9fUlhRLA0KPiAtCQkJCWNvbmZpZywgJmNoYW5uZWxfb3BzKTsNCj4gKwkJcmV0
ID0gcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIodmlkLCBWSVJUSU9fUlhRKTsNCj4g
KwkJaWYgKHJldCA9PSAwKSB7DQo+ICsJCQlkbWFfYmluZFt2aWRdLmRtYXNbVklSVElPX1JYUV0u
YXN5bmNfZW5hYmxlZCA9IHRydWU7DQo+ICAJCX0NCj4gKwkJcmV0dXJuIHJldDsNCj4gIAl9DQo+
IA0KPiAgCXJldHVybiAwOw0KPiBAQCAtMTUwMiwxNCArMTYyMSwxNSBAQCB2cmluZ19zdGF0ZV9j
aGFuZ2VkKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLCBpbnQNCj4gZW5hYmxlKQ0KPiAgCWlm
IChxdWV1ZV9pZCAhPSBWSVJUSU9fUlhRKQ0KPiAgCQlyZXR1cm4gMDsNCj4gDQo+IC0JaWYgKGFz
eW5jX3Zob3N0X2RyaXZlcikgew0KPiArCWlmIChkbWFfYmluZFt2aWRdLmRtYXNbcXVldWVfaWRd
LmFzeW5jX2VuYWJsZWQpIHsNCj4gIAkJaWYgKCFlbmFibGUpIHsNCj4gIAkJCXVpbnQxNl90IG5f
cGt0ID0gMDsNCj4gKwkJCWludDE2X3QgZG1hX2lkID0gZG1hX2JpbmRbdmlkXS5kbWFzW1ZJUlRJ
T19SWFFdLmRldl9pZDsNCj4gIAkJCXN0cnVjdCBydGVfbWJ1ZiAqbV9jcGxbdmRldi0+cGt0c19p
bmZsaWdodF07DQo+IA0KPiAgCQkJd2hpbGUgKHZkZXYtPnBrdHNfaW5mbGlnaHQpIHsNCj4gIAkJ
CQluX3BrdCA9IHJ0ZV92aG9zdF9jbGVhcl9xdWV1ZV90aHJlYWRfdW5zYWZlKHZpZCwNCj4gcXVl
dWVfaWQsDQo+IC0JCQkJCQkJbV9jcGwsIHZkZXYtPnBrdHNfaW5mbGlnaHQpOw0KPiArCQkJCQkJ
CW1fY3BsLCB2ZGV2LT5wa3RzX2luZmxpZ2h0LCBkbWFfaWQsDQo+IDApOw0KPiAgCQkJCWZyZWVf
cGt0cyhtX2NwbCwgbl9wa3QpOw0KPiAgCQkJCV9fYXRvbWljX3N1Yl9mZXRjaCgmdmRldi0+cGt0
c19pbmZsaWdodCwgbl9wa3QsDQo+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiAgCQkJfQ0KPiBAQCAt
MTY1Nyw2ICsxNzc3LDI1IEBAIGNyZWF0ZV9tYnVmX3Bvb2wodWludDE2X3QgbnJfcG9ydCwgdWlu
dDMyX3QNCj4gbnJfc3dpdGNoX2NvcmUsIHVpbnQzMl90IG1idWZfc2l6ZSwNCj4gIAkJcnRlX2V4
aXQoRVhJVF9GQUlMVVJFLCAiQ2Fubm90IGNyZWF0ZSBtYnVmIHBvb2xcbiIpOw0KPiAgfQ0KPiAN
Cj4gK3N0YXRpYyB2b2lkDQo+ICtpbml0X2RtYSh2b2lkKQ0KPiArew0KPiArCWludCBpOw0KPiAr
DQo+ICsJZm9yIChpID0gMDsgaSA8IE1BWF9WSE9TVF9ERVZJQ0U7IGkrKykgew0KPiArCQlpbnQg
ajsNCj4gKw0KPiArCQlmb3IgKGogPSAwOyBqIDwgUlRFX01BWF9RVUVVRVNfUEVSX1BPUlQgKiAy
OyBqKyspIHsNCj4gKwkJCWRtYV9iaW5kW2ldLmRtYXNbal0uZGV2X2lkID0gSU5WQUxJRF9ETUFf
SUQ7DQo+ICsJCQlkbWFfYmluZFtpXS5kbWFzW2pdLmFzeW5jX2VuYWJsZWQgPSBmYWxzZTsNCj4g
KwkJfQ0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfRE1BREVWX0RFRkFVTFRf
TUFYOyBpKyspIHsNCj4gKwkJZG1hX2NvbmZpZ1tpXS5kZXZfaWQgPSBJTlZBTElEX0RNQV9JRDsN
Cj4gKwl9DQo+ICt9DQo+ICsNCj4gIC8qDQo+ICAgKiBNYWluIGZ1bmN0aW9uLCBkb2VzIGluaXRp
YWxpc2F0aW9uIGFuZCBjYWxscyB0aGUgcGVyLWxjb3JlIGZ1bmN0aW9ucy4NCj4gICAqLw0KPiBA
QCAtMTY3OSw2ICsxODE4LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPiAgCWFy
Z2MgLT0gcmV0Ow0KPiAgCWFyZ3YgKz0gcmV0Ow0KPiANCj4gKwkvKiBpbml0aWFsaXplIGRtYSBz
dHJ1Y3R1cmVzICovDQo+ICsJaW5pdF9kbWEoKTsNCj4gKw0KPiAgCS8qIHBhcnNlIGFwcCBhcmd1
bWVudHMgKi8NCj4gIAlyZXQgPSB1c192aG9zdF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpOw0KPiAg
CWlmIChyZXQgPCAwKQ0KPiBAQCAtMTc1NCw2ICsxODk2LDIwIEBAIG1haW4oaW50IGFyZ2MsIGNo
YXIgKmFyZ3ZbXSkNCj4gIAlpZiAoY2xpZW50X21vZGUpDQo+ICAJCWZsYWdzIHw9IFJURV9WSE9T
VF9VU0VSX0NMSUVOVDsNCj4gDQo+ICsJaWYgKGFzeW5jX3Zob3N0X2RyaXZlcikgew0KPiArCQlp
ZiAocnRlX3Zob3N0X2FzeW5jX2RtYV9jb25maWd1cmUoZG1hX2NvbmZpZywgZG1hX2NvdW50KSA8
IDApIHsNCj4gKwkJCVJURV9MT0coRVJSLCBWSE9TVF9QT1JULCAiRmFpbGVkIHRvIGNvbmZpZ3Vy
ZSBETUEgaW4NCj4gdmhvc3QuXG4iKTsNCj4gKwkJCWZvciAoaSA9IDA7IGkgPCBkbWFfY291bnQ7
IGkrKykgew0KPiArCQkJCWlmIChkbWFfY29uZmlnW2ldLmRldl9pZCAhPSBJTlZBTElEX0RNQV9J
RCkgew0KPiArCQkJCQlydGVfZG1hX3N0b3AoZG1hX2NvbmZpZ1tpXS5kZXZfaWQpOw0KPiArCQkJ
CQlkbWFfY29uZmlnW2ldLmRldl9pZCA9IElOVkFMSURfRE1BX0lEOw0KPiArCQkJCX0NCj4gKwkJ
CX0NCj4gKwkJCWRtYV9jb3VudCA9IDA7DQo+ICsJCQlhc3luY192aG9zdF9kcml2ZXIgPSBmYWxz
ZTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAgCS8qIFJlZ2lzdGVyIHZob3N0IHVzZXIgZHJpdmVy
IHRvIGhhbmRsZSB2aG9zdCBtZXNzYWdlcy4gKi8NCj4gIAlmb3IgKGkgPSAwOyBpIDwgbmJfc29j
a2V0czsgaSsrKSB7DQo+ICAJCWNoYXIgKmZpbGUgPSBzb2NrZXRfZmlsZXMgKyBpICogUEFUSF9N
QVg7DQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy92aG9zdC9tYWluLmggYi9leGFtcGxlcy92aG9z
dC9tYWluLmgNCj4gaW5kZXggZTdiMWFjNjBhNi4uYjRhNDUzZTc3ZSAxMDA2NDQNCj4gLS0tIGEv
ZXhhbXBsZXMvdmhvc3QvbWFpbi5oDQo+ICsrKyBiL2V4YW1wbGVzL3Zob3N0L21haW4uaA0KPiBA
QCAtOCw2ICs4LDcgQEANCj4gICNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCj4gDQo+ICAjaW5jbHVk
ZSA8cnRlX2V0aGVyLmg+DQo+ICsjaW5jbHVkZSA8cnRlX3BjaS5oPg0KPiANCj4gIC8qIE1hY3Jv
cyBmb3IgcHJpbnRpbmcgdXNpbmcgUlRFX0xPRyAqLw0KPiAgI2RlZmluZSBSVEVfTE9HVFlQRV9W
SE9TVF9DT05GSUcgUlRFX0xPR1RZUEVfVVNFUjENCj4gQEAgLTc5LDYgKzgwLDE2IEBAIHN0cnVj
dCBsY29yZV9pbmZvIHsNCj4gIAlzdHJ1Y3Qgdmhvc3RfZGV2X3RhaWxxX2xpc3QgdmRldl9saXN0
Ow0KPiAgfTsNCj4gDQo+ICtzdHJ1Y3QgZG1hX2luZm8gew0KPiArCXN0cnVjdCBydGVfcGNpX2Fk
ZHIgYWRkcjsNCj4gKwlpbnQxNl90IGRldl9pZDsNCj4gKwlib29sIGFzeW5jX2VuYWJsZWQ7DQo+
ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgZG1hX2Zvcl92aG9zdCB7DQo+ICsJc3RydWN0IGRtYV9pbmZv
IGRtYXNbUlRFX01BWF9RVUVVRVNfUEVSX1BPUlQgKiAyXTsNCj4gK307DQo+ICsNCj4gIC8qIHdl
IGltcGxlbWVudCBub24tZXh0cmEgdmlydGlvIG5ldCBmZWF0dXJlcyAqLw0KPiAgI2RlZmluZSBW
SVJUSU9fTkVUX0ZFQVRVUkVTCTANCj4gDQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy92aG9zdC9t
ZXNvbi5idWlsZCBiL2V4YW1wbGVzL3Zob3N0L21lc29uLmJ1aWxkDQo+IGluZGV4IDNlZmQ1ZTY1
NDAuLjg3YTYzN2Y4M2YgMTAwNjQ0DQo+IC0tLSBhL2V4YW1wbGVzL3Zob3N0L21lc29uLmJ1aWxk
DQo+ICsrKyBiL2V4YW1wbGVzL3Zob3N0L21lc29uLmJ1aWxkDQo+IEBAIC0xMiwxMyArMTIsOSBA
QCBpZiBub3QgaXNfbGludXgNCj4gIGVuZGlmDQo+IA0KPiAgZGVwcyArPSAndmhvc3QnDQo+ICtk
ZXBzICs9ICdkbWFkZXYnDQo+ICBhbGxvd19leHBlcmltZW50YWxfYXBpcyA9IHRydWUNCj4gIHNv
dXJjZXMgPSBmaWxlcygNCj4gICAgICAgICAgJ21haW4uYycsDQo+ICAgICAgICAgICd2aXJ0aW9f
bmV0LmMnLA0KPiAgKQ0KPiAtDQo+IC1pZiBkcGRrX2NvbmYuaGFzKCdSVEVfUkFXX0lPQVQnKQ0K
PiAtICAgIGRlcHMgKz0gJ3Jhd19pb2F0Jw0KPiAtICAgIHNvdXJjZXMgKz0gZmlsZXMoJ2lvYXQu
YycpDQo+IC1lbmRpZg0KPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L21lc29uLmJ1aWxkIGIvbGli
L3Zob3N0L21lc29uLmJ1aWxkDQo+IGluZGV4IGNkYjM3YTQ4MTQuLjgxMDczMjk0MDAgMTAwNjQ0
DQo+IC0tLSBhL2xpYi92aG9zdC9tZXNvbi5idWlsZA0KPiArKysgYi9saWIvdmhvc3QvbWVzb24u
YnVpbGQNCj4gQEAgLTMzLDcgKzMzLDggQEAgaGVhZGVycyA9IGZpbGVzKA0KPiAgICAgICAgICAn
cnRlX3Zob3N0X2FzeW5jLmgnLA0KPiAgICAgICAgICAncnRlX3Zob3N0X2NyeXB0by5oJywNCj4g
ICkNCj4gKw0KPiAgZHJpdmVyX3Nka19oZWFkZXJzID0gZmlsZXMoDQo+ICAgICAgICAgICd2ZHBh
X2RyaXZlci5oJywNCj4gICkNCj4gLWRlcHMgKz0gWydldGhkZXYnLCAnY3J5cHRvZGV2JywgJ2hh
c2gnLCAncGNpJ10NCj4gK2RlcHMgKz0gWydldGhkZXYnLCAnY3J5cHRvZGV2JywgJ2hhc2gnLCAn
cGNpJywgJ2RtYWRldiddDQo+IGRpZmYgLS1naXQgYS9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5j
LmggYi9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5jLmgNCj4gaW5kZXggYTg3ZWE2YmEzNy4uMjNh
N2EyZDhiMyAxMDA2NDQNCj4gLS0tIGEvbGliL3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oDQo+ICsr
KyBiL2xpYi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiBAQCAtMjcsNzAgKzI3LDEyIEBAIHN0
cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgew0KPiAgfTsNCj4gDQo+ICAvKioNCj4gLSAqIGRtYSB0
cmFuc2ZlciBzdGF0dXMNCj4gKyAqIERNQSBkZXZpY2UgaW5mb3JtYXRpb24NCj4gICAqLw0KPiAt
c3RydWN0IHJ0ZV92aG9zdF9hc3luY19zdGF0dXMgew0KPiAtCS8qKiBBbiBhcnJheSBvZiBhcHBs
aWNhdGlvbiBzcGVjaWZpYyBkYXRhIGZvciBzb3VyY2UgbWVtb3J5ICovDQo+IC0JdWludHB0cl90
ICpzcmNfb3BhcXVlX2RhdGE7DQo+IC0JLyoqIEFuIGFycmF5IG9mIGFwcGxpY2F0aW9uIHNwZWNp
ZmljIGRhdGEgZm9yIGRlc3RpbmF0aW9uIG1lbW9yeSAqLw0KPiAtCXVpbnRwdHJfdCAqZHN0X29w
YXF1ZV9kYXRhOw0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBkbWEgb3BlcmF0aW9uIGNhbGxi
YWNrcyB0byBiZSBpbXBsZW1lbnRlZCBieSBhcHBsaWNhdGlvbnMNCj4gLSAqLw0KPiAtc3RydWN0
IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyB7DQo+IC0JLyoqDQo+IC0JICogaW5zdHJ1Y3Qg
YXN5bmMgZW5naW5lcyB0byBwZXJmb3JtIGNvcGllcyBmb3IgYSBiYXRjaCBvZiBwYWNrZXRzDQo+
IC0JICoNCj4gLQkgKiBAcGFyYW0gdmlkDQo+IC0JICogIGlkIG9mIHZob3N0IGRldmljZSB0byBw
ZXJmb3JtIGRhdGEgY29waWVzDQo+IC0JICogQHBhcmFtIHF1ZXVlX2lkDQo+IC0JICogIHF1ZXVl
IGlkIHRvIHBlcmZvcm0gZGF0YSBjb3BpZXMNCj4gLQkgKiBAcGFyYW0gaW92X2l0ZXINCj4gLQkg
KiAgYW4gYXJyYXkgb2YgSU9WIGl0ZXJhdG9ycw0KPiAtCSAqIEBwYXJhbSBvcGFxdWVfZGF0YQ0K
PiAtCSAqICBvcGFxdWUgZGF0YSBwYWlyIHNlbmRpbmcgdG8gRE1BIGVuZ2luZQ0KPiAtCSAqIEBw
YXJhbSBjb3VudA0KPiAtCSAqICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICJkZXNjcyIgYXJy
YXkNCj4gLQkgKiBAcmV0dXJuDQo+IC0JICogIG51bWJlciBvZiBJT1YgaXRlcmF0b3JzIHByb2Nl
c3NlZCwgbmVnYXRpdmUgdmFsdWUgbWVhbnMgZXJyb3INCj4gLQkgKi8NCj4gLQlpbnQzMl90ICgq
dHJhbnNmZXJfZGF0YSkoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0JCXN0cnVjdCBy
dGVfdmhvc3RfaW92X2l0ZXIgKmlvdl9pdGVyLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5j
X3N0YXR1cyAqb3BhcXVlX2RhdGEsDQo+IC0JCXVpbnQxNl90IGNvdW50KTsNCj4gLQkvKioNCj4g
LQkgKiBjaGVjayBjb3B5LWNvbXBsZXRlZCBwYWNrZXRzIGZyb20gdGhlIGFzeW5jIGVuZ2luZQ0K
PiAtCSAqIEBwYXJhbSB2aWQNCj4gLQkgKiAgaWQgb2Ygdmhvc3QgZGV2aWNlIHRvIGNoZWNrIGNv
cHkgY29tcGxldGlvbg0KPiAtCSAqIEBwYXJhbSBxdWV1ZV9pZA0KPiAtCSAqICBxdWV1ZSBpZCB0
byBjaGVjayBjb3B5IGNvbXBsZXRpb24NCj4gLQkgKiBAcGFyYW0gb3BhcXVlX2RhdGENCj4gLQkg
KiAgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIG9wYXF1ZSBkYXRhIHBhaXIgZnJvbSBETUEgZW5naW5l
DQo+IC0JICogQHBhcmFtIG1heF9wYWNrZXRzDQo+IC0JICogIG1heCBudW1iZXIgb2YgcGFja2V0
cyBjb3VsZCBiZSBjb21wbGV0ZWQNCj4gLQkgKiBAcmV0dXJuDQo+IC0JICogIG51bWJlciBvZiBh
c3luYyBkZXNjcyBjb21wbGV0ZWQsIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIGVycm9yDQo+IC0JICov
DQo+IC0JaW50MzJfdCAoKmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMpKGludCB2aWQsIHVpbnQxNl90
IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyAqb3BhcXVlX2Rh
dGEsDQo+IC0JCXVpbnQxNl90IG1heF9wYWNrZXRzKTsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAt
ICogIGFzeW5jIGNoYW5uZWwgZmVhdHVyZXMNCj4gLSAqLw0KPiAtZW51bSB7DQo+IC0JUlRFX1ZI
T1NUX0FTWU5DX0lOT1JERVIgPSAxVSA8PCAwLA0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiAg
YXN5bmMgY2hhbm5lbCBjb25maWd1cmF0aW9uDQo+IC0gKi8NCj4gLXN0cnVjdCBydGVfdmhvc3Rf
YXN5bmNfY29uZmlnIHsNCj4gLQl1aW50MzJfdCBmZWF0dXJlczsNCj4gLQl1aW50MzJfdCByc3Zk
WzJdOw0KPiArc3RydWN0IHJ0ZV92aG9zdF9hc3luY19kbWFfaW5mbyB7DQo+ICsJaW50MTZfdCBk
ZXZfaWQ7CS8qIERNQSBkZXZpY2UgSUQgKi8NCj4gKwl1aW50MTZfdCBtYXhfdmNoYW5zOwkvKiBt
YXggbnVtYmVyIG9mIHZjaGFuICovDQo+ICsJdWludDE2X3QgbWF4X2Rlc2M7CS8qIG1heCBkZXNj
IG51bWJlciBvZiB2Y2hhbiAqLw0KPiAgfTsNCj4gDQo+ICAvKioNCj4gQEAgLTEwMCwxNyArNDIs
MTEgQEAgc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgew0KPiAgICogIHZob3N0IGRldmlj
ZSBpZCBhc3luYyBjaGFubmVsIHRvIGJlIGF0dGFjaGVkIHRvDQo+ICAgKiBAcGFyYW0gcXVldWVf
aWQNCj4gICAqICB2aG9zdCBxdWV1ZSBpZCBhc3luYyBjaGFubmVsIHRvIGJlIGF0dGFjaGVkIHRv
DQo+IC0gKiBAcGFyYW0gY29uZmlnDQo+IC0gKiAgQXN5bmMgY2hhbm5lbCBjb25maWd1cmF0aW9u
IHN0cnVjdHVyZQ0KPiAtICogQHBhcmFtIG9wcw0KPiAtICogIEFzeW5jIGNoYW5uZWwgb3BlcmF0
aW9uIGNhbGxiYWNrcw0KPiAgICogQHJldHVybg0KPiAgICogIDAgb24gc3VjY2VzcywgLTEgb24g
ZmFpbHVyZXMNCj4gICAqLw0KPiAgX19ydGVfZXhwZXJpbWVudGFsDQo+IC1pbnQgcnRlX3Zob3N0
X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0J
c3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnLA0KPiAtCXN0cnVjdCBydGVfdmhv
c3RfYXN5bmNfY2hhbm5lbF9vcHMgKm9wcyk7DQo+ICtpbnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5u
ZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQpOw0KPiANCj4gIC8qKg0KPiAg
ICogVW5yZWdpc3RlciBhbiBhc3luYyBjaGFubmVsIGZvciBhIHZob3N0IHF1ZXVlDQo+IEBAIC0x
MzYsMTcgKzcyLDExIEBAIGludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVyKGlu
dCB2aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkKTsNCj4gICAqICB2aG9zdCBkZXZpY2UgaWQgYXN5
bmMgY2hhbm5lbCB0byBiZSBhdHRhY2hlZCB0bw0KPiAgICogQHBhcmFtIHF1ZXVlX2lkDQo+ICAg
KiAgdmhvc3QgcXVldWUgaWQgYXN5bmMgY2hhbm5lbCB0byBiZSBhdHRhY2hlZCB0bw0KPiAtICog
QHBhcmFtIGNvbmZpZw0KPiAtICogIEFzeW5jIGNoYW5uZWwgY29uZmlndXJhdGlvbg0KPiAtICog
QHBhcmFtIG9wcw0KPiAtICogIEFzeW5jIGNoYW5uZWwgb3BlcmF0aW9uIGNhbGxiYWNrcw0KPiAg
ICogQHJldHVybg0KPiAgICogIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZXMNCj4gICAqLw0K
PiAgX19ydGVfZXhwZXJpbWVudGFsDQo+IC1pbnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVn
aXN0ZXJfdGhyZWFkX3Vuc2FmZShpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gLQlzdHJ1
Y3QgcnRlX3Zob3N0X2FzeW5jX2NvbmZpZyBjb25maWcsDQo+IC0Jc3RydWN0IHJ0ZV92aG9zdF9h
c3luY19jaGFubmVsX29wcyAqb3BzKTsNCj4gK2ludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9y
ZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkKTsNCj4g
DQo+ICAvKioNCj4gICAqIFVucmVnaXN0ZXIgYW4gYXN5bmMgY2hhbm5lbCBmb3IgYSB2aG9zdCBx
dWV1ZSB3aXRob3V0IHBlcmZvcm1pbmcgYW55DQo+IEBAIC0xNzksMTIgKzEwOSwxNyBAQCBpbnQg
cnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfdW5yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludA0KPiB2
aWQsDQo+ICAgKiAgYXJyYXkgb2YgcGFja2V0cyB0byBiZSBlbnF1ZXVlZA0KPiAgICogQHBhcmFt
IGNvdW50DQo+ICAgKiAgcGFja2V0cyBudW0gdG8gYmUgZW5xdWV1ZWQNCj4gKyAqIEBwYXJhbSBk
bWFfaWQNCj4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB0aGUgRE1BIGRldmljZQ0KPiArICogQHBh
cmFtIHZjaGFuDQo+ICsgKiAgdGhlIGlkZW50aWZpZXIgb2YgdmlydHVhbCBETUEgY2hhbm5lbA0K
PiAgICogQHJldHVybg0KPiAgICogIG51bSBvZiBwYWNrZXRzIGVucXVldWVkDQo+ICAgKi8NCj4g
IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiAgdWludDE2X3QgcnRlX3Zob3N0X3N1Ym1pdF9lbnF1ZXVl
X2J1cnN0KGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX21idWYg
Kipwa3RzLCB1aW50MTZfdCBjb3VudCk7DQo+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVp
bnQxNl90IGNvdW50LCBpbnQxNl90IGRtYV9pZCwNCj4gKwkJdWludDE2X3QgdmNoYW4pOw0KDQpB
bGwgZG1hX2lkIGluIHRoZSBBUEkgc2hvdWxkIGJlIHVpbnQxNl90LiBPdGhlcndpc2UgeW91IG5l
ZWQgdG8gY2hlY2sgaWYgdmFsaWQuDQoNCj4gDQo+ICAvKioNCj4gICAqIFRoaXMgZnVuY3Rpb24g
Y2hlY2tzIGFzeW5jIGNvbXBsZXRpb24gc3RhdHVzIGZvciBhIHNwZWNpZmljIHZob3N0DQo+IEBA
IC0xOTksMTIgKzEzNCwxNyBAQCB1aW50MTZfdCBydGVfdmhvc3Rfc3VibWl0X2VucXVldWVfYnVy
c3QoaW50IHZpZCwNCj4gdWludDE2X3QgcXVldWVfaWQsDQo+ICAgKiAgYmxhbmsgYXJyYXkgdG8g
Z2V0IHJldHVybiBwYWNrZXQgcG9pbnRlcg0KPiAgICogQHBhcmFtIGNvdW50DQo+ICAgKiAgc2l6
ZSBvZiB0aGUgcGFja2V0IGFycmF5DQo+ICsgKiBAcGFyYW0gZG1hX2lkDQo+ICsgKiAgdGhlIGlk
ZW50aWZpZXIgb2YgdGhlIERNQSBkZXZpY2UNCj4gKyAqIEBwYXJhbSB2Y2hhbg0KPiArICogIHRo
ZSBpZGVudGlmaWVyIG9mIHZpcnR1YWwgRE1BIGNoYW5uZWwNCj4gICAqIEByZXR1cm4NCj4gICAq
ICBudW0gb2YgcGFja2V0cyByZXR1cm5lZA0KPiAgICovDQo+ICBfX3J0ZV9leHBlcmltZW50YWwN
Cj4gIHVpbnQxNl90IHJ0ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKGludCB2aWQsIHVp
bnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBj
b3VudCk7DQo+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50LCBpbnQx
Nl90IGRtYV9pZCwNCj4gKwkJdWludDE2X3QgdmNoYW4pOw0KPiANCj4gIC8qKg0KPiAgICogVGhp
cyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgaW4tZmxpZ2h0IHBhY2tldHMgZm9yIHRo
ZSB2aG9zdA0KPiBAQCAtMjM1LDExICsxNzUsMzIgQEAgaW50IHJ0ZV92aG9zdF9hc3luY19nZXRf
aW5mbGlnaHQoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQpOw0KPiAgICogIEJsYW5rIGFy
cmF5IHRvIGdldCByZXR1cm4gcGFja2V0IHBvaW50ZXINCj4gICAqIEBwYXJhbSBjb3VudA0KPiAg
ICogIFNpemUgb2YgdGhlIHBhY2tldCBhcnJheQ0KPiArICogQHBhcmFtIGRtYV9pZA0KPiArICog
IHRoZSBpZGVudGlmaWVyIG9mIHRoZSBETUEgZGV2aWNlDQo+ICsgKiBAcGFyYW0gdmNoYW4NCj4g
KyAqICB0aGUgaWRlbnRpZmllciBvZiB2aXJ0dWFsIERNQSBjaGFubmVsDQo+ICAgKiBAcmV0dXJu
DQo+ICAgKiAgTnVtYmVyIG9mIHBhY2tldHMgcmV0dXJuZWQNCj4gICAqLw0KPiAgX19ydGVfZXhw
ZXJpbWVudGFsDQo+ICB1aW50MTZfdCBydGVfdmhvc3RfY2xlYXJfcXVldWVfdGhyZWFkX3Vuc2Fm
ZShpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gLQkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0
cywgdWludDE2X3QgY291bnQpOw0KPiArCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZf
dCBjb3VudCwgaW50MTZfdCBkbWFfaWQsDQo+ICsJCXVpbnQxNl90IHZjaGFuKTsNCj4gKy8qKg0K
PiArICogVGhlIERNQSB2Q2hhbm5lbHMgdXNlZCBpbiBhc3luY2hyb25vdXMgZGF0YSBwYXRoIG11
c3QgYmUgY29uZmlndXJlZA0KPiArICogZmlyc3QuIFNvIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8g
YmUgY2FsbGVkIGJlZm9yZSBlbmFibGluZyBETUENCj4gKyAqIGFjY2VsZXJhdGlvbiBmb3IgdnJp
bmcuIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGFzeW5jaHJvbm91cyBkYXRhIHBhdGgNCj4gKyAq
IGNhbm5vdCBiZSBlbmFibGVkIGZvciBhbnkgdnJpbmcgZnVydGhlci4NCj4gKyAqDQo+ICsgKiBA
cGFyYW0gZG1hcw0KPiArICogIERNQSBpbmZvcm1hdGlvbg0KPiArICogQHBhcmFtIGNvdW50DQo+
ICsgKiAgRWxlbWVudCBudW1iZXIgb2YgJ2RtYXMnDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgMCBv
biBzdWNjZXNzLCBhbmQgLTEgb24gZmFpbHVyZQ0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50
YWwNCj4gK2ludCBydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZShzdHJ1Y3QgcnRlX3Zob3N0
X2FzeW5jX2RtYV9pbmZvICpkbWFzLA0KPiArCQl1aW50MTZfdCBjb3VudCk7DQoNCkkgdGhpbmsg
YmFzZWQgb24gY3VycmVudCBkZXNpZ24sIHZob3N0IGNhbiB1c2UgZXZlcnkgdmNoYW4gaWYgdXNl
ciBhcHAgbGV0IGl0Lg0KU28gdGhlIG1heF9kZXNjIGFuZCBtYXhfdmNoYW5zIGNhbiBqdXN0IGJl
IGdvdCBmcm9tIGRtYWRldiBBUElzPyBUaGVuIHRoZXJlJ3MNCm5vIG5lZWQgdG8gaW50cm9kdWNl
IHRoZSBuZXcgQUJJIHN0cnVjdCBydGVfdmhvc3RfYXN5bmNfZG1hX2luZm8uDQoNCkFuZCBhYm91
dCBtYXhfZGVzYywgSSBzZWUgdGhlIGRtYWRldiBsaWIsIHlvdSBjYW4gZ2V0IHZjaGFuJ3MgbWF4
X2Rlc2MgYnV0IHlvdQ0KbWF5IHVzZSBhIG5iX2Rlc2MgKDw9IG1heF9kZXNjKSB0byBjb25maWd1
cmUgdmNoYW5sLiBBbmQgSUlVQywgdmhvc3Qgd2FudHMgdG8NCmtub3cgdGhlIG5iX2Rlc2MgaW5z
dGVhZCBvZiBtYXhfZGVzYz8NCg0KPiANCj4gICNlbmRpZiAvKiBfUlRFX1ZIT1NUX0FTWU5DX0hf
ICovDQo+IGRpZmYgLS1naXQgYS9saWIvdmhvc3QvdmVyc2lvbi5tYXAgYi9saWIvdmhvc3QvdmVy
c2lvbi5tYXANCj4gaW5kZXggYTdlZjdmMTk3Ni4uMTIwMmJhOWMxYSAxMDA2NDQNCj4gLS0tIGEv
bGliL3Zob3N0L3ZlcnNpb24ubWFwDQo+ICsrKyBiL2xpYi92aG9zdC92ZXJzaW9uLm1hcA0KPiBA
QCAtODQsNiArODQsOSBAQCBFWFBFUklNRU5UQUwgew0KPiANCj4gIAkjIGFkZGVkIGluIDIxLjEx
DQo+ICAJcnRlX3Zob3N0X2dldF9tb25pdG9yX2FkZHI7DQo+ICsNCj4gKwkjIGFkZGVkIGluIDIy
LjAzDQo+ICsJcnRlX3Zob3N0X2FzeW5jX2RtYV9jb25maWd1cmU7DQo+ICB9Ow0KPiANCj4gIElO
VEVSTkFMIHsNCj4gZGlmZiAtLWdpdCBhL2xpYi92aG9zdC92aG9zdC5jIGIvbGliL3Zob3N0L3Zo
b3N0LmMNCj4gaW5kZXggMTNhOWJiOWRkMS4uMzJmMzdmNDg1MSAxMDA2NDQNCj4gLS0tIGEvbGli
L3Zob3N0L3Zob3N0LmMNCj4gKysrIGIvbGliL3Zob3N0L3Zob3N0LmMNCj4gQEAgLTM0NCw2ICsz
NDQsNyBAQCB2aG9zdF9mcmVlX2FzeW5jX21lbShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkN
Cj4gIAkJcmV0dXJuOw0KPiANCj4gIAlydGVfZnJlZSh2cS0+YXN5bmMtPnBrdHNfaW5mbyk7DQo+
ICsJcnRlX2ZyZWUodnEtPmFzeW5jLT5wa3RzX2NtcGxfZmxhZyk7DQo+IA0KPiAgCXJ0ZV9mcmVl
KHZxLT5hc3luYy0+YnVmZmVyc19wYWNrZWQpOw0KPiAgCXZxLT5hc3luYy0+YnVmZmVyc19wYWNr
ZWQgPSBOVUxMOw0KPiBAQCAtMTYyNiw4ICsxNjI3LDcgQEAgcnRlX3Zob3N0X2V4dGVybl9jYWxs
YmFja19yZWdpc3RlcihpbnQgdmlkLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBfX3J0ZV9hbHdheXNf
aW5saW5lIGludA0KPiAtYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdCBx
dWV1ZV9pZCwNCj4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyAqb3BzKQ0K
PiArYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCkNCj4g
IHsNCj4gIAlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiAgCXN0
cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gZGV2LT52aXJ0cXVldWVbcXVldWVfaWRdOw0KPiBA
QCAtMTY1Niw2ICsxNjU2LDE0IEBAIGFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWlu
dDE2X3QgcXVldWVfaWQsDQo+ICAJCWdvdG8gb3V0X2ZyZWVfYXN5bmM7DQo+ICAJfQ0KPiANCj4g
Kwlhc3luYy0+cGt0c19jbXBsX2ZsYWcgPSBydGVfem1hbGxvY19zb2NrZXQoTlVMTCwgdnEtPnNp
emUgKiBzaXplb2YoYm9vbCksDQo+ICsJCQlSVEVfQ0FDSEVfTElORV9TSVpFLCBub2RlKTsNCj4g
KwlpZiAoIWFzeW5jLT5wa3RzX2NtcGxfZmxhZykgew0KPiArCQlWSE9TVF9MT0dfQ09ORklHKEVS
UiwgImZhaWxlZCB0byBhbGxvY2F0ZSBhc3luYyBwa3RzX2NtcGxfZmxhZw0KPiAodmlkICVkLCBx
aWQ6ICVkKVxuIiwNCj4gKwkJCQl2aWQsIHF1ZXVlX2lkKTsNCg0KcWlkOiAldQ0KDQo+ICsJCWdv
dG8gb3V0X2ZyZWVfYXN5bmM7DQo+ICsJfQ0KPiArDQo+ICAJaWYgKHZxX2lzX3BhY2tlZChkZXYp
KSB7DQo+ICAJCWFzeW5jLT5idWZmZXJzX3BhY2tlZCA9IHJ0ZV9tYWxsb2Nfc29ja2V0KE5VTEws
DQo+ICAJCQkJdnEtPnNpemUgKiBzaXplb2Yoc3RydWN0IHZyaW5nX3VzZWRfZWxlbV9wYWNrZWQp
LA0KPiBAQCAtMTY3Niw5ICsxNjg0LDYgQEAgYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlk
LCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gIAkJfQ0KPiAgCX0NCj4gDQo+IC0JYXN5bmMtPm9wcy5j
aGVja19jb21wbGV0ZWRfY29waWVzID0gb3BzLT5jaGVja19jb21wbGV0ZWRfY29waWVzOw0KPiAt
CWFzeW5jLT5vcHMudHJhbnNmZXJfZGF0YSA9IG9wcy0+dHJhbnNmZXJfZGF0YTsNCj4gLQ0KPiAg
CXZxLT5hc3luYyA9IGFzeW5jOw0KPiANCj4gIAlyZXR1cm4gMDsNCj4gQEAgLTE2OTEsMTUgKzE2
OTYsMTMgQEAgYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9p
ZCwNCj4gIH0NCj4gDQo+ICBpbnQNCj4gLXJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVy
KGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5j
X2NvbmZpZyBjb25maWcsDQo+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMg
Km9wcykNCj4gK3J0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQx
Nl90IHF1ZXVlX2lkKQ0KPiAgew0KPiAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiAg
CXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ICAJaW50IHJldDsN
Cj4gDQo+IC0JaWYgKGRldiA9PSBOVUxMIHx8IG9wcyA9PSBOVUxMKQ0KPiArCWlmIChkZXYgPT0g
TlVMTCkNCj4gIAkJcmV0dXJuIC0xOw0KPiANCj4gIAlpZiAocXVldWVfaWQgPj0gVkhPU1RfTUFY
X1ZSSU5HKQ0KPiBAQCAtMTcxMCwzMyArMTcxMywyMCBAQCBydGVfdmhvc3RfYXN5bmNfY2hhbm5l
bF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwNCj4gIAlpZiAodW5saWtl
bHkodnEgPT0gTlVMTCB8fCAhZGV2LT5hc3luY19jb3B5KSkNCj4gIAkJcmV0dXJuIC0xOw0KPiAN
Cj4gLQlpZiAodW5saWtlbHkoIShjb25maWcuZmVhdHVyZXMgJiBSVEVfVkhPU1RfQVNZTkNfSU5P
UkRFUikpKSB7DQo+IC0JCVZIT1NUX0xPR19DT05GSUcoRVJSLA0KPiAtCQkJImFzeW5jIGNvcHkg
aXMgbm90IHN1cHBvcnRlZCBvbiBub24taW5vcmRlciBtb2RlICINCj4gLQkJCSIodmlkICVkLCBx
aWQ6ICVkKVxuIiwgdmlkLCBxdWV1ZV9pZCk7DQo+IC0JCXJldHVybiAtMTsNCj4gLQl9DQo+IC0N
Cj4gLQlpZiAodW5saWtlbHkob3BzLT5jaGVja19jb21wbGV0ZWRfY29waWVzID09IE5VTEwgfHwN
Cj4gLQkJb3BzLT50cmFuc2Zlcl9kYXRhID09IE5VTEwpKQ0KPiAtCQlyZXR1cm4gLTE7DQo+IC0N
Cj4gIAlydGVfc3BpbmxvY2tfbG9jaygmdnEtPmFjY2Vzc19sb2NrKTsNCj4gLQlyZXQgPSBhc3lu
Y19jaGFubmVsX3JlZ2lzdGVyKHZpZCwgcXVldWVfaWQsIG9wcyk7DQo+ICsJcmV0ID0gYXN5bmNf
Y2hhbm5lbF9yZWdpc3Rlcih2aWQsIHF1ZXVlX2lkKTsNCj4gIAlydGVfc3BpbmxvY2tfdW5sb2Nr
KCZ2cS0+YWNjZXNzX2xvY2spOw0KPiANCj4gIAlyZXR1cm4gcmV0Ow0KPiAgfQ0KPiANCj4gIGlu
dA0KPiAtcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXJfdGhyZWFkX3Vuc2FmZShpbnQg
dmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25m
aWcgY29uZmlnLA0KPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzICpvcHMp
DQo+ICtydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2
aWQsIHVpbnQxNl90IHF1ZXVlX2lkKQ0KPiAgew0KPiAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUg
KnZxOw0KPiAgCXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+IA0K
PiAtCWlmIChkZXYgPT0gTlVMTCB8fCBvcHMgPT0gTlVMTCkNCj4gKwlpZiAoZGV2ID09IE5VTEwp
DQo+ICAJCXJldHVybiAtMTsNCj4gDQo+ICAJaWYgKHF1ZXVlX2lkID49IFZIT1NUX01BWF9WUklO
RykNCj4gQEAgLTE3NDcsMTggKzE3MzcsNyBAQCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdp
c3Rlcl90aHJlYWRfdW5zYWZlKGludCB2aWQsDQo+IHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAgCWlm
ICh1bmxpa2VseSh2cSA9PSBOVUxMIHx8ICFkZXYtPmFzeW5jX2NvcHkpKQ0KPiAgCQlyZXR1cm4g
LTE7DQo+IA0KPiAtCWlmICh1bmxpa2VseSghKGNvbmZpZy5mZWF0dXJlcyAmIFJURV9WSE9TVF9B
U1lOQ19JTk9SREVSKSkpIHsNCj4gLQkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsDQo+IC0JCQkiYXN5
bmMgY29weSBpcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1pbm9yZGVyIG1vZGUgIg0KPiAtCQkJIih2
aWQgJWQsIHFpZDogJWQpXG4iLCB2aWQsIHF1ZXVlX2lkKTsNCj4gLQkJcmV0dXJuIC0xOw0KPiAt
CX0NCj4gLQ0KPiAtCWlmICh1bmxpa2VseShvcHMtPmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPT0g
TlVMTCB8fA0KPiAtCQlvcHMtPnRyYW5zZmVyX2RhdGEgPT0gTlVMTCkpDQo+IC0JCXJldHVybiAt
MTsNCj4gLQ0KPiAtCXJldHVybiBhc3luY19jaGFubmVsX3JlZ2lzdGVyKHZpZCwgcXVldWVfaWQs
IG9wcyk7DQo+ICsJcmV0dXJuIGFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIodmlkLCBxdWV1ZV9pZCk7
DQo+ICB9DQo+IA0KPiAgaW50DQo+IEBAIC0xODM1LDYgKzE4MTQsODMgQEAgcnRlX3Zob3N0X2Fz
eW5jX2NoYW5uZWxfdW5yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludA0KPiB2aWQsIHVpbnQxNl90
IHF1ZXVlX2lkKQ0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiANCj4gK3N0YXRpYyBfX3J0ZV9hbHdh
eXNfaW5saW5lIHZvaWQNCj4gK3Zob3N0X2ZyZWVfYXN5bmNfZG1hX21lbSh2b2lkKQ0KPiArew0K
PiArCXVpbnQxNl90IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgUlRFX0RNQURFVl9ERUZB
VUxUX01BWDsgaSsrKSB7DQo+ICsJCXN0cnVjdCBhc3luY19kbWFfaW5mbyAqZG1hID0gJmRtYV9j
b3B5X3RyYWNrW2ldOw0KPiArCQlpbnQxNl90IGo7DQo+ICsNCj4gKwkJaWYgKGRtYS0+bWF4X3Zj
aGFucyA9PSAwKSB7DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfQ0KPiArDQo+ICsJCWZvciAoaiA9
IDA7IGogPCBkbWEtPm1heF92Y2hhbnM7IGorKykgew0KPiArCQkJcnRlX2ZyZWUoZG1hLT52Y2hh
bnNbal0ubWV0YWRhdGEpOw0KPiArCQl9DQo+ICsJCXJ0ZV9mcmVlKGRtYS0+dmNoYW5zKTsNCj4g
KwkJZG1hLT52Y2hhbnMgPSBOVUxMOw0KPiArCQlkbWEtPm1heF92Y2hhbnMgPSAwOw0KPiArCX0N
Cj4gK30NCj4gKw0KPiAraW50DQo+ICtydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZShzdHJ1
Y3QgcnRlX3Zob3N0X2FzeW5jX2RtYV9pbmZvICpkbWFzLCB1aW50MTZfdA0KPiBjb3VudCkNCj4g
K3sNCj4gKwl1aW50MTZfdCBpOw0KPiArDQo+ICsJaWYgKCFkbWFzKSB7DQo+ICsJCVZIT1NUX0xP
R19DT05GSUcoRVJSLCAiSW52YWxpZCBETUEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuXG4iKTsN
Cj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrKSB7DQo+ICsJCXN0cnVjdCBhc3luY19kbWFfdmNoYW5faW5mbyAqdmNoYW5zOw0KPiArCQlp
bnQxNl90IGRldl9pZDsNCj4gKwkJdWludDE2X3QgbWF4X3ZjaGFuczsNCj4gKwkJdWludDE2X3Qg
bWF4X2Rlc2M7DQo+ICsJCXVpbnQxNl90IGo7DQo+ICsNCj4gKwkJZGV2X2lkID0gZG1hc1tpXS5k
ZXZfaWQ7DQo+ICsJCW1heF92Y2hhbnMgPSBkbWFzW2ldLm1heF92Y2hhbnM7DQo+ICsJCW1heF9k
ZXNjID0gZG1hc1tpXS5tYXhfZGVzYzsNCj4gKw0KPiArCQlpZiAoIXJ0ZV9pc19wb3dlcl9vZl8y
KG1heF9kZXNjKSkgew0KPiArCQkJbWF4X2Rlc2MgPSBydGVfYWxpZ24zMnBvdzIobWF4X2Rlc2Mp
Ow0KPiArCQl9DQoNCkkgdGhpbmsgd2hlbiBhbGlnbmluZyB0byBwb3dlciBvZiAyLCBpdCBzaG91
bGQgZXhjZWVkIG5vdCBtYXhfZGVzYz8NCkFuZCBiYXNlZCBvbiBhYm92ZSBjb21tZW50LCBpZiB0
aGlzIG1heF9kZXNjIGlzIG5iX2Rlc2MgY29uZmlndXJlZCBmb3INCnZjaGFubCwgeW91IHNob3Vs
ZCBqdXN0IG1ha2Ugc3VyZSB0aGUgbmJfZGVzYyBiZSBwb3dlci1vZi0yLg0KDQo+ICsNCj4gKwkJ
dmNoYW5zID0gcnRlX3ptYWxsb2MoTlVMTCwgc2l6ZW9mKHN0cnVjdCBhc3luY19kbWFfdmNoYW5f
aW5mbykgKg0KPiBtYXhfdmNoYW5zLA0KPiArCQkJCVJURV9DQUNIRV9MSU5FX1NJWkUpOw0KPiAr
CQlpZiAodmNoYW5zID09IE5VTEwpIHsNCj4gKwkJCVZIT1NUX0xPR19DT05GSUcoRVJSLCAiRmFp
bGVkIHRvIGFsbG9jYXRlIHZjaGFucyBmb3IgZG1hLQ0KPiAlZC4iDQo+ICsJCQkJCSIgQ2Fubm90
IGVuYWJsZSBhc3luYyBkYXRhLXBhdGguXG4iLCBkZXZfaWQpOw0KPiArCQkJdmhvc3RfZnJlZV9h
c3luY19kbWFfbWVtKCk7DQo+ICsJCQlyZXR1cm4gLTE7DQo+ICsJCX0NCj4gKw0KPiArCQlmb3Ig
KGogPSAwOyBqIDwgbWF4X3ZjaGFuczsgaisrKSB7DQo+ICsJCQl2Y2hhbnNbal0ubWV0YWRhdGEg
PSBydGVfem1hbGxvYyhOVUxMLCBzaXplb2YoYm9vbCAqKSAqDQo+IG1heF9kZXNjLA0KPiArCQkJ
CQlSVEVfQ0FDSEVfTElORV9TSVpFKTsNCj4gKwkJCWlmICghdmNoYW5zW2pdLm1ldGFkYXRhKSB7
DQo+ICsJCQkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWV0YWRh
dGEgZm9yDQo+ICINCj4gKwkJCQkJCSJkbWEtJWQgdmNoYW4tJXVcbiIsIGRldl9pZCwgaik7DQo+
ICsJCQkJdmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKCk7DQo+ICsJCQkJcmV0dXJuIC0xOw0KPiAr
CQkJfQ0KPiArDQo+ICsJCQl2Y2hhbnNbal0ucmluZ19zaXplID0gbWF4X2Rlc2M7DQo+ICsJCQl2
Y2hhbnNbal0ucmluZ19tYXNrID0gbWF4X2Rlc2MgLSAxOw0KPiArCQl9DQo+ICsNCj4gKwkJZG1h
X2NvcHlfdHJhY2tbZGV2X2lkXS52Y2hhbnMgPSB2Y2hhbnM7DQo+ICsJCWRtYV9jb3B5X3RyYWNr
W2Rldl9pZF0ubWF4X3ZjaGFucyA9IG1heF92Y2hhbnM7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJu
IDA7DQo+ICt9DQo+ICsNCj4gIGludA0KPiAgcnRlX3Zob3N0X2FzeW5jX2dldF9pbmZsaWdodChp
bnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCkNCj4gIHsNCj4gZGlmZiAtLWdpdCBhL2xpYi92aG9z
dC92aG9zdC5oIGIvbGliL3Zob3N0L3Zob3N0LmgNCj4gaW5kZXggNzA4NWUwODg1Yy4uZDliZGEz
NGUxMSAxMDA2NDQNCj4gLS0tIGEvbGliL3Zob3N0L3Zob3N0LmgNCj4gKysrIGIvbGliL3Zob3N0
L3Zob3N0LmgNCj4gQEAgLTE5LDYgKzE5LDcgQEANCj4gICNpbmNsdWRlIDxydGVfZXRoZXIuaD4N
Cj4gICNpbmNsdWRlIDxydGVfcndsb2NrLmg+DQo+ICAjaW5jbHVkZSA8cnRlX21hbGxvYy5oPg0K
PiArI2luY2x1ZGUgPHJ0ZV9kbWFkZXYuaD4NCj4gDQo+ICAjaW5jbHVkZSAicnRlX3Zob3N0Lmgi
DQo+ICAjaW5jbHVkZSAicnRlX3ZkcGEuaCINCj4gQEAgLTUwLDYgKzUxLDcgQEANCj4gDQo+ICAj
ZGVmaW5lIFZIT1NUX01BWF9BU1lOQ19JVCAoTUFYX1BLVF9CVVJTVCkNCj4gICNkZWZpbmUgVkhP
U1RfTUFYX0FTWU5DX1ZFQyAyMDQ4DQo+ICsjZGVmaW5lIFZIT1NUX0FTWU5DX0RNQV9CQVRDSElO
R19TSVpFIDMyDQo+IA0KPiAgI2RlZmluZSBQQUNLRURfREVTQ19FTlFVRVVFX1VTRURfRkxBRyh3
KQlcDQo+ICAJKCh3KSA/IChWUklOR19ERVNDX0ZfQVZBSUwgfCBWUklOR19ERVNDX0ZfVVNFRCB8
IFZSSU5HX0RFU0NfRl9XUklURSkgOiBcDQo+IEBAIC0xMTksNiArMTIxLDQxIEBAIHN0cnVjdCB2
cmluZ191c2VkX2VsZW1fcGFja2VkIHsNCj4gIAl1aW50MzJfdCBjb3VudDsNCj4gIH07DQo+IA0K
PiArc3RydWN0IGFzeW5jX2RtYV92Y2hhbl9pbmZvIHsNCj4gKwkvKiBjaXJjdWxhciBhcnJheSB0
byB0cmFjayBjb3B5IG1ldGFkYXRhICovDQo+ICsJYm9vbCAqKm1ldGFkYXRhOw0KDQpJZiB0aGUg
bWV0YWRhdGEgd2lsbCBvbmx5IGJlIGZsYWdzLCBtYXliZSBqdXN0IHVzZSBzb21lDQpuYW1lIGNh
bGxlZCBYWFhfZmxhZw0KDQo+ICsNCj4gKwkvKiBtYXggZWxlbWVudHMgaW4gJ21ldGFkYXRhJyAq
Lw0KPiArCXVpbnQxNl90IHJpbmdfc2l6ZTsNCj4gKwkvKiByaW5nIGluZGV4IG1hc2sgZm9yICdt
ZXRhZGF0YScgKi8NCj4gKwl1aW50MTZfdCByaW5nX21hc2s7DQo+ICsNCj4gKwkvKiBiYXRjaGlu
ZyBjb3BpZXMgYmVmb3JlIGEgRE1BIGRvb3JiZWxsICovDQo+ICsJdWludDE2X3QgbnJfYmF0Y2hp
bmc7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBETUEgdmlydHVhbCBjaGFubmVsIGxvY2suIEFsdGhv
dWdoIGl0IGlzIGFibGUgdG8gYmluZCBETUENCj4gKwkgKiB2aXJ0dWFsIGNoYW5uZWxzIHRvIGRh
dGEgcGxhbmUgdGhyZWFkcywgdmhvc3QgY29udHJvbCBwbGFuZQ0KPiArCSAqIHRocmVhZCBjb3Vs
ZCBjYWxsIGRhdGEgcGxhbmUgZnVuY3Rpb25zIHRvbywgdGh1cyBjYXVzaW5nDQo+ICsJICogRE1B
IGRldmljZSBjb250ZW50aW9uLg0KPiArCSAqDQo+ICsJICogRm9yIGV4YW1wbGUsIGluIFZNIGV4
aXQgY2FzZSwgdmhvc3QgY29udHJvbCBwbGFuZSB0aHJlYWQgbmVlZHMNCj4gKwkgKiB0byBjbGVh
ciBpbi1mbGlnaHQgcGFja2V0cyBiZWZvcmUgZGlzYWJsZSB2cmluZywgYnV0IHRoZXJlIGNvdWxk
DQo+ICsJICogYmUgYW5vdHRoZXIgZGF0YSBwbGFuZSB0aHJlYWQgaXMgZW5xdWV1aW5nIHBhY2tl
dHMgdG8gdGhlIHNhbWUNCj4gKwkgKiB2cmluZyB3aXRoIHRoZSBzYW1lIERNQSB2aXJ0dWFsIGNo
YW5uZWwuIEJ1dCBkbWFkZXYgUE1EIGZ1bmN0aW9ucw0KPiArCSAqIGFyZSBsb2NrLWZyZWUsIHNv
IHRoZSBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lIHRocmVhZHMNCj4gKwkgKiBjb3VsZCBv
cGVyYXRlIHRoZSBzYW1lIERNQSB2aXJ0dWFsIGNoYW5uZWwgYXQgdGhlIHNhbWUgdGltZS4NCj4g
KwkgKi8NCj4gKwlydGVfc3BpbmxvY2tfdCBkbWFfbG9jazsNCj4gK307DQo+ICsNCj4gK3N0cnVj
dCBhc3luY19kbWFfaW5mbyB7DQo+ICsJdWludDE2X3QgbWF4X3ZjaGFuczsNCj4gKwlzdHJ1Y3Qg
YXN5bmNfZG1hX3ZjaGFuX2luZm8gKnZjaGFuczsNCj4gK307DQo+ICsNCj4gK2V4dGVybiBzdHJ1
Y3QgYXN5bmNfZG1hX2luZm8gZG1hX2NvcHlfdHJhY2tbUlRFX0RNQURFVl9ERUZBVUxUX01BWF07
DQo+ICsNCj4gIC8qKg0KPiAgICogaW5mbGlnaHQgYXN5bmMgcGFja2V0IGluZm9ybWF0aW9uDQo+
ICAgKi8NCj4gQEAgLTEyOSw5ICsxNjYsNiBAQCBzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyB7
DQo+ICB9Ow0KPiANCj4gIHN0cnVjdCB2aG9zdF9hc3luYyB7DQo+IC0JLyogb3BlcmF0aW9uIGNh
bGxiYWNrcyBmb3IgRE1BICovDQo+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29w
cyBvcHM7DQo+IC0NCj4gIAlzdHJ1Y3QgcnRlX3Zob3N0X2lvdl9pdGVyIGlvdl9pdGVyW1ZIT1NU
X01BWF9BU1lOQ19JVF07DQo+ICAJc3RydWN0IHJ0ZV92aG9zdF9pb3ZlYyBpb3ZlY1tWSE9TVF9N
QVhfQVNZTkNfVkVDXTsNCj4gIAl1aW50MTZfdCBpdGVyX2lkeDsNCj4gQEAgLTEzOSw2ICsxNzMs
MTkgQEAgc3RydWN0IHZob3N0X2FzeW5jIHsNCj4gDQo+ICAJLyogZGF0YSB0cmFuc2ZlciBzdGF0
dXMgKi8NCj4gIAlzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyAqcGt0c19pbmZvOw0KPiArCS8q
Kg0KPiArCSAqIHBhY2tldCByZW9yZGVyIGFycmF5LiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgRE1B
DQo+ICsJICogZGV2aWNlIGNvbXBsZXRlcyBhbGwgY29waWVzIGZvciB0aGUgcGFja2V0Lg0KPiAr
CSAqDQo+ICsJICogTm90ZSB0aGF0IHRoaXMgYXJyYXkgY291bGQgYmUgd3JpdHRlbiBieSBtdWx0
aXBsZQ0KPiArCSAqIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4gRm9yIGV4YW1wbGUsIHR3byB0
aHJlYWRzDQo+ICsJICogZW5xdWV1ZSBwYWNrZXRzIHRvIHRoZSBzYW1lIHZpcnRxdWV1ZSB3aXRo
IHRoZWlyDQo+ICsJICogb3duIERNQSBkZXZpY2VzLiBIb3dldmVyLCBzaW5jZSBvZmZsb2FkaW5n
IGlzDQo+ICsJICogcGVyLXBhY2tldCBiYXNpcywgZWFjaCBwYWNrZXQgZmxhZyB3aWxsIG9ubHkg
YmUNCj4gKwkgKiB3cml0dGVuIGJ5IG9uZSB0aHJlYWQuIEFuZCBzaW5nbGUgYnl0ZSB3cml0ZSBp
cw0KPiArCSAqIGF0b21pYywgc28gbm8gbG9jayBpcyBuZWVkZWQuDQo+ICsJICovDQo+ICsJYm9v
bCAqcGt0c19jbXBsX2ZsYWc7DQo+ICAJdWludDE2X3QgcGt0c19pZHg7DQo+ICAJdWludDE2X3Qg
cGt0c19pbmZsaWdodF9uOw0KPiAgCXVuaW9uIHsNCj4gZGlmZiAtLWdpdCBhL2xpYi92aG9zdC92
aXJ0aW9fbmV0LmMgYi9saWIvdmhvc3QvdmlydGlvX25ldC5jDQo+IGluZGV4IGIzZDk1NGFhYjQu
LjlmODFmYzk3MzMgMTAwNjQ0DQo+IC0tLSBhL2xpYi92aG9zdC92aXJ0aW9fbmV0LmMNCj4gKysr
IGIvbGliL3Zob3N0L3ZpcnRpb19uZXQuYw0KPiBAQCAtMTEsNiArMTEsNyBAQA0KPiAgI2luY2x1
ZGUgPHJ0ZV9uZXQuaD4NCj4gICNpbmNsdWRlIDxydGVfZXRoZXIuaD4NCj4gICNpbmNsdWRlIDxy
dGVfaXAuaD4NCj4gKyNpbmNsdWRlIDxydGVfZG1hZGV2Lmg+DQo+ICAjaW5jbHVkZSA8cnRlX3Zo
b3N0Lmg+DQo+ICAjaW5jbHVkZSA8cnRlX3RjcC5oPg0KPiAgI2luY2x1ZGUgPHJ0ZV91ZHAuaD4N
Cj4gQEAgLTI1LDYgKzI2LDkgQEANCj4gDQo+ICAjZGVmaW5lIE1BWF9CQVRDSF9MRU4gMjU2DQo+
IA0KPiArLyogRE1BIGRldmljZSBjb3B5IG9wZXJhdGlvbiB0cmFja2luZyBhcnJheS4gKi8NCj4g
K3N0cnVjdCBhc3luY19kbWFfaW5mbyBkbWFfY29weV90cmFja1tSVEVfRE1BREVWX0RFRkFVTFRf
TUFYXTsNCj4gKw0KPiAgc3RhdGljICBfX3J0ZV9hbHdheXNfaW5saW5lIGJvb2wNCj4gIHJ4dnFf
aXNfbWVyZ2VhYmxlKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYpDQo+ICB7DQo+IEBAIC00Myw2ICs0
NywxMDggQEAgaXNfdmFsaWRfdmlydF9xdWV1ZV9pZHgodWludDMyX3QgaWR4LCBpbnQgaXNfdHgs
IHVpbnQzMl90DQo+IG5yX3ZyaW5nKQ0KPiAgCXJldHVybiAoaXNfdHggXiAoaWR4ICYgMSkpID09
IDAgJiYgaWR4IDwgbnJfdnJpbmc7DQo+ICB9DQo+IA0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19p
bmxpbmUgdWludDE2X3QNCj4gK3Zob3N0X2FzeW5jX2RtYV90cmFuc2ZlcihzdHJ1Y3Qgdmhvc3Rf
dmlydHF1ZXVlICp2cSwgaW50MTZfdCBkbWFfaWQsDQo+ICsJCXVpbnQxNl90IHZjaGFuLCB1aW50
MTZfdCBoZWFkX2lkeCwNCj4gKwkJc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciAqcGt0cywgdWlu
dDE2X3QgbnJfcGt0cykNCj4gK3sNCj4gKwlzdHJ1Y3QgYXN5bmNfZG1hX3ZjaGFuX2luZm8gKmRt
YV9pbmZvID0NCj4gJmRtYV9jb3B5X3RyYWNrW2RtYV9pZF0udmNoYW5zW3ZjaGFuXTsNCj4gKwl1
aW50MTZfdCByaW5nX21hc2sgPSBkbWFfaW5mby0+cmluZ19tYXNrOw0KPiArCXVpbnQxNl90IHBr
dF9pZHg7DQo+ICsNCj4gKwlydGVfc3BpbmxvY2tfbG9jaygmZG1hX2luZm8tPmRtYV9sb2NrKTsN
Cj4gKw0KPiArCWZvciAocGt0X2lkeCA9IDA7IHBrdF9pZHggPCBucl9wa3RzOyBwa3RfaWR4Kysp
IHsNCj4gKwkJc3RydWN0IHJ0ZV92aG9zdF9pb3ZlYyAqaW92ID0gcGt0c1twa3RfaWR4XS5pb3Y7
DQo+ICsJCWludCBjb3B5X2lkeCA9IDA7DQo+ICsJCXVpbnQxNl90IG5yX3NlZ3MgPSBwa3RzW3Br
dF9pZHhdLm5yX3NlZ3M7DQo+ICsJCXVpbnQxNl90IGk7DQo+ICsNCj4gKwkJaWYgKHJ0ZV9kbWFf
YnVyc3RfY2FwYWNpdHkoZG1hX2lkLCB2Y2hhbikgPCBucl9zZWdzKSB7DQo+ICsJCQlnb3RvIG91
dDsNCj4gKwkJfQ0KPiArDQo+ICsJCWZvciAoaSA9IDA7IGkgPCBucl9zZWdzOyBpKyspIHsNCj4g
KwkJCS8qKg0KPiArCQkJICogV2UgaGF2ZSBjaGVja2VkIHRoZSBhdmFpbGFibGUgc3BhY2UgYmVm
b3JlIHN1Ym1pdCBjb3BpZXMNCj4gdG8gRE1BDQo+ICsJCQkgKiB2Q2hhbm5lbCwgc28gd2UgZG9u
J3QgaGFuZGxlIGVycm9yIGhlcmUuDQo+ICsJCQkgKi8NCj4gKwkJCWNvcHlfaWR4ID0gcnRlX2Rt
YV9jb3B5KGRtYV9pZCwgdmNoYW4sDQo+IChydGVfaW92YV90KWlvdltpXS5zcmNfYWRkciwNCj4g
KwkJCQkJKHJ0ZV9pb3ZhX3QpaW92W2ldLmRzdF9hZGRyLCBpb3ZbaV0ubGVuLA0KPiArCQkJCQlS
VEVfRE1BX09QX0ZMQUdfTExDKTsNCg0KVGhpcyBhc3N1bWVzIHJ0ZV9kbWFfY29weSB3aWxsIGFs
d2F5cyBzdWNjZWVkIGlmIHRoZXJlJ3MgYXZhaWxhYmxlIHNwYWNlLg0KDQpCdXQgdGhlIEFQSSBk
b3h5Z2VuIHNheXM6DQoNCiogQHJldHVybg0KICogICAtIDAuLlVJTlQxNl9NQVg6IGluZGV4IG9m
IGVucXVldWVkIGpvYi4NCiAqICAgLSAtRU5PU1BDOiBpZiBubyBzcGFjZSBsZWZ0IHRvIGVucXVl
dWUuDQogKiAgIC0gb3RoZXIgdmFsdWVzIDwgMCBvbiBmYWlsdXJlLg0KDQpTbyBpdCBzaG91bGQg
Y29uc2lkZXIgb3RoZXIgdmVuZG9yLXNwZWNpZmljIGVycm9ycy4gDQoNClRoYW5rcywNCkNoZW5i
bw0KDQo+ICsNCj4gKwkJCS8qKg0KPiArCQkJICogT25seSBzdG9yZSBwYWNrZXQgY29tcGxldGlv
biBmbGFnIGFkZHJlc3MgaW4gdGhlIGxhc3QNCj4gY29weSdzDQo+ICsJCQkgKiBzbG90LCBhbmQg
b3RoZXIgc2xvdHMgYXJlIHNldCB0byBOVUxMLg0KPiArCQkJICovDQo+ICsJCQlpZiAodW5saWtl
bHkoaSA9PSAobnJfc2VncyAtIDEpKSkgew0KPiArCQkJCWRtYV9pbmZvLT5tZXRhZGF0YVtjb3B5
X2lkeCAmIHJpbmdfbWFza10gPQ0KPiArCQkJCQkmdnEtPmFzeW5jLT5wa3RzX2NtcGxfZmxhZ1to
ZWFkX2lkeCAlIHZxLT5zaXplXTsNCj4gKwkJCX0NCj4gKwkJfQ0KPiArDQo+ICsJCWRtYV9pbmZv
LT5ucl9iYXRjaGluZyArPSBucl9zZWdzOw0KPiArCQlpZiAodW5saWtlbHkoZG1hX2luZm8tPm5y
X2JhdGNoaW5nID49DQo+IFZIT1NUX0FTWU5DX0RNQV9CQVRDSElOR19TSVpFKSkgew0KPiArCQkJ
cnRlX2RtYV9zdWJtaXQoZG1hX2lkLCB2Y2hhbik7DQo+ICsJCQlkbWFfaW5mby0+bnJfYmF0Y2hp
bmcgPSAwOw0KPiArCQl9DQo+ICsNCj4gKwkJaGVhZF9pZHgrKzsNCj4gKwl9DQo+ICsNCj4gK291
dDoNCj4gKwlpZiAoZG1hX2luZm8tPm5yX2JhdGNoaW5nID4gMCkgew0KPiArCQlydGVfZG1hX3N1
Ym1pdChkbWFfaWQsIHZjaGFuKTsNCj4gKwkJZG1hX2luZm8tPm5yX2JhdGNoaW5nID0gMDsNCj4g
Kwl9DQo+ICsJcnRlX3NwaW5sb2NrX3VubG9jaygmZG1hX2luZm8tPmRtYV9sb2NrKTsNCj4gKw0K
PiArCXJldHVybiBwa3RfaWR4Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lu
bGluZSB1aW50MTZfdA0KPiArdmhvc3RfYXN5bmNfZG1hX2NoZWNrX2NvbXBsZXRlZChpbnQxNl90
IGRtYV9pZCwgdWludDE2X3QgdmNoYW4sIHVpbnQxNl90DQo+IG1heF9wa3RzKQ0KPiArew0KPiAr
CXN0cnVjdCBhc3luY19kbWFfdmNoYW5faW5mbyAqZG1hX2luZm8gPQ0KPiAmZG1hX2NvcHlfdHJh
Y2tbZG1hX2lkXS52Y2hhbnNbdmNoYW5dOw0KPiArCXVpbnQxNl90IHJpbmdfbWFzayA9IGRtYV9p
bmZvLT5yaW5nX21hc2s7DQo+ICsJdWludDE2X3QgbGFzdF9pZHggPSAwOw0KPiArCXVpbnQxNl90
IG5yX2NvcGllczsNCj4gKwl1aW50MTZfdCBjb3B5X2lkeDsNCj4gKwl1aW50MTZfdCBpOw0KPiAr
DQo+ICsJcnRlX3NwaW5sb2NrX2xvY2soJmRtYV9pbmZvLT5kbWFfbG9jayk7DQo+ICsNCj4gKwkv
KioNCj4gKwkgKiBTaW5jZSBhbGwgbWVtb3J5IGlzIHBpbm5lZCBhbmQgYWRkcmVzc2VzIHNob3Vs
ZCBiZSB2YWxpZCwNCj4gKwkgKiB3ZSBkb24ndCBjaGVjayBlcnJvcnMuDQo+ICsJICovDQo+ICsJ
bnJfY29waWVzID0gcnRlX2RtYV9jb21wbGV0ZWQoZG1hX2lkLCB2Y2hhbiwgbWF4X3BrdHMsICZs
YXN0X2lkeCwgTlVMTCk7DQo+ICsJaWYgKG5yX2NvcGllcyA9PSAwKSB7DQo+ICsJCWdvdG8gb3V0
Ow0KPiArCX0NCj4gKw0KPiArCWNvcHlfaWR4ID0gbGFzdF9pZHggLSBucl9jb3BpZXMgKyAxOw0K
PiArCWZvciAoaSA9IDA7IGkgPCBucl9jb3BpZXM7IGkrKykgew0KPiArCQlib29sICpmbGFnOw0K
PiArDQo+ICsJCWZsYWcgPSBkbWFfaW5mby0+bWV0YWRhdGFbY29weV9pZHggJiByaW5nX21hc2td
Ow0KPiArCQlpZiAoZmxhZykgew0KPiArCQkJLyoqDQo+ICsJCQkgKiBNYXJrIHRoZSBwYWNrZXQg
ZmxhZyBhcyByZWNlaXZlZC4gVGhlIGZsYWcNCj4gKwkJCSAqIGNvdWxkIGJlbG9uZyB0byBhbm90
aGVyIHZpcnRxdWV1ZSBidXQgd3JpdGUNCj4gKwkJCSAqIGlzIGF0b21pYy4NCj4gKwkJCSAqLw0K
PiArCQkJKmZsYWcgPSB0cnVlOw0KPiArCQkJZG1hX2luZm8tPm1ldGFkYXRhW2NvcHlfaWR4ICYg
cmluZ19tYXNrXSA9IE5VTEw7DQo+ICsJCX0NCj4gKwkJY29weV9pZHgrKzsNCj4gKwl9DQo+ICsN
Cj4gK291dDoNCj4gKwlydGVfc3BpbmxvY2tfdW5sb2NrKCZkbWFfaW5mby0+ZG1hX2xvY2spOw0K
PiArCXJldHVybiBucl9jb3BpZXM7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBpbmxpbmUgdm9pZA0K
PiAgZG9fZGF0YV9jb3B5X2VucXVldWUoc3RydWN0IHZpcnRpb19uZXQgKmRldiwgc3RydWN0IHZo
b3N0X3ZpcnRxdWV1ZSAqdnEpDQo+ICB7DQo+IEBAIC0xNDQ5LDkgKzE1NTUsOSBAQCBzdG9yZV9k
bWFfZGVzY19pbmZvX3BhY2tlZChzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtX3BhY2tlZA0KPiAqc19y
aW5nLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBfX3J0ZV9ub2lubGluZSB1aW50MzJfdA0KPiAtdmly
dGlvX2Rldl9yeF9hc3luY19zdWJtaXRfc3BsaXQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4g
LQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0Jc3Ry
dWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDMyX3QgY291bnQpDQo+ICt2aXJ0aW9fZGV2X3J4X2Fz
eW5jX3N1Ym1pdF9zcGxpdChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LCBzdHJ1Y3QNCj4gdmhvc3Rf
dmlydHF1ZXVlICp2cSwNCj4gKwkJdWludDE2X3QgcXVldWVfaWQsIHN0cnVjdCBydGVfbWJ1ZiAq
KnBrdHMsIHVpbnQzMl90IGNvdW50LA0KPiArCQlpbnQxNl90IGRtYV9pZCwgdWludDE2X3QgdmNo
YW4pDQo+ICB7DQo+ICAJc3RydWN0IGJ1Zl92ZWN0b3IgYnVmX3ZlY1tCVUZfVkVDVE9SX01BWF07
DQo+ICAJdWludDMyX3QgcGt0X2lkeCA9IDA7DQo+IEBAIC0xNTAzLDE3ICsxNjA5LDE2IEBAIHZp
cnRpb19kZXZfcnhfYXN5bmNfc3VibWl0X3NwbGl0KHN0cnVjdCB2aXJ0aW9fbmV0DQo+ICpkZXYs
DQo+ICAJaWYgKHVubGlrZWx5KHBrdF9pZHggPT0gMCkpDQo+ICAJCXJldHVybiAwOw0KPiANCj4g
LQluX3hmZXIgPSBhc3luYy0+b3BzLnRyYW5zZmVyX2RhdGEoZGV2LT52aWQsIHF1ZXVlX2lkLCBh
c3luYy0+aW92X2l0ZXIsIDAsDQo+IHBrdF9pZHgpOw0KPiAtCWlmICh1bmxpa2VseShuX3hmZXIg
PCAwKSkgew0KPiAtCQlWSE9TVF9MT0dfREFUQShFUlIsICIoJWQpICVzOiBmYWlsZWQgdG8gdHJh
bnNmZXIgZGF0YSBmb3IgcXVldWUNCj4gaWQgJWQuXG4iLA0KPiAtCQkJCWRldi0+dmlkLCBfX2Z1
bmNfXywgcXVldWVfaWQpOw0KPiAtCQluX3hmZXIgPSAwOw0KPiAtCX0NCj4gKwluX3hmZXIgPSB2
aG9zdF9hc3luY19kbWFfdHJhbnNmZXIodnEsIGRtYV9pZCwgdmNoYW4sIGFzeW5jLT5wa3RzX2lk
eCwNCj4gYXN5bmMtPmlvdl9pdGVyLA0KPiArCQkJcGt0X2lkeCk7DQo+IA0KPiAgCXBrdF9lcnIg
PSBwa3RfaWR4IC0gbl94ZmVyOw0KPiAgCWlmICh1bmxpa2VseShwa3RfZXJyKSkgew0KPiAgCQl1
aW50MTZfdCBudW1fZGVzY3MgPSAwOw0KPiANCj4gKwkJVkhPU1RfTE9HX0RBVEEoREVCVUcsICIo
JWQpICVzOiBmYWlsZWQgdG8gdHJhbnNmZXIgJXUgcGFja2V0cyBmb3INCj4gcXVldWUgJXUuXG4i
LA0KPiArCQkJCWRldi0+dmlkLCBfX2Z1bmNfXywgcGt0X2VyciwgcXVldWVfaWQpOw0KPiArDQo+
ICAJCS8qIHVwZGF0ZSBudW1iZXIgb2YgY29tcGxldGVkIHBhY2tldHMgKi8NCj4gIAkJcGt0X2lk
eCA9IG5feGZlcjsNCj4gDQo+IEBAIC0xNjU2LDEzICsxNzYxLDEzIEBAIGRtYV9lcnJvcl9oYW5k
bGVyX3BhY2tlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gdWludDE2X3Qgc2xvdF9p
ZHgsDQo+ICB9DQo+IA0KPiAgc3RhdGljIF9fcnRlX25vaW5saW5lIHVpbnQzMl90DQo+IC12aXJ0
aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdF9wYWNrZWQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4g
LQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0Jc3Ry
dWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDMyX3QgY291bnQpDQo+ICt2aXJ0aW9fZGV2X3J4X2Fz
eW5jX3N1Ym1pdF9wYWNrZWQoc3RydWN0IHZpcnRpb19uZXQgKmRldiwgc3RydWN0DQo+IHZob3N0
X3ZpcnRxdWV1ZSAqdnEsDQo+ICsJCXVpbnQxNl90IHF1ZXVlX2lkLCBzdHJ1Y3QgcnRlX21idWYg
Kipwa3RzLCB1aW50MzJfdCBjb3VudCwNCj4gKwkJaW50MTZfdCBkbWFfaWQsIHVpbnQxNl90IHZj
aGFuKQ0KPiAgew0KPiAgCXVpbnQzMl90IHBrdF9pZHggPSAwOw0KPiAgCXVpbnQzMl90IHJlbWFp
bmVkID0gY291bnQ7DQo+IC0JaW50MzJfdCBuX3hmZXI7DQo+ICsJdWludDE2X3Qgbl94ZmVyOw0K
PiAgCXVpbnQxNl90IG51bV9idWZmZXJzOw0KPiAgCXVpbnQxNl90IG51bV9kZXNjczsNCj4gDQo+
IEBAIC0xNjcwLDYgKzE3NzUsNyBAQCB2aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdF9wYWNrZWQo
c3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4gIAlzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyAq
cGt0c19pbmZvID0gYXN5bmMtPnBrdHNfaW5mbzsNCj4gIAl1aW50MzJfdCBwa3RfZXJyID0gMDsN
Cj4gIAl1aW50MTZfdCBzbG90X2lkeCA9IDA7DQo+ICsJdWludDE2X3QgaGVhZF9pZHggPSBhc3lu
Yy0+cGt0c19pZHggJSB2cS0+c2l6ZTsNCj4gDQo+ICAJZG8gew0KPiAgCQlydGVfcHJlZmV0Y2gw
KCZ2cS0+ZGVzY19wYWNrZWRbdnEtPmxhc3RfYXZhaWxfaWR4XSk7DQo+IEBAIC0xNjk0LDE5ICsx
ODAwLDE3IEBAIHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0X3BhY2tlZChzdHJ1Y3QgdmlydGlv
X25ldA0KPiAqZGV2LA0KPiAgCWlmICh1bmxpa2VseShwa3RfaWR4ID09IDApKQ0KPiAgCQlyZXR1
cm4gMDsNCj4gDQo+IC0Jbl94ZmVyID0gYXN5bmMtPm9wcy50cmFuc2Zlcl9kYXRhKGRldi0+dmlk
LCBxdWV1ZV9pZCwgYXN5bmMtPmlvdl9pdGVyLCAwLA0KPiBwa3RfaWR4KTsNCj4gLQlpZiAodW5s
aWtlbHkobl94ZmVyIDwgMCkpIHsNCj4gLQkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiKCVkKSAlczog
ZmFpbGVkIHRvIHRyYW5zZmVyIGRhdGEgZm9yIHF1ZXVlDQo+IGlkICVkLlxuIiwNCj4gLQkJCQlk
ZXYtPnZpZCwgX19mdW5jX18sIHF1ZXVlX2lkKTsNCj4gLQkJbl94ZmVyID0gMDsNCj4gLQl9DQo+
IC0NCj4gLQlwa3RfZXJyID0gcGt0X2lkeCAtIG5feGZlcjsNCj4gKwluX3hmZXIgPSB2aG9zdF9h
c3luY19kbWFfdHJhbnNmZXIodnEsIGRtYV9pZCwgdmNoYW4sIGhlYWRfaWR4LA0KPiArCQkJYXN5
bmMtPmlvdl9pdGVyLCBwa3RfaWR4KTsNCj4gDQo+ICAJYXN5bmNfaXRlcl9yZXNldChhc3luYyk7
DQo+IA0KPiAtCWlmICh1bmxpa2VseShwa3RfZXJyKSkNCj4gKwlwa3RfZXJyID0gcGt0X2lkeCAt
IG5feGZlcjsNCj4gKwlpZiAodW5saWtlbHkocGt0X2VycikpIHsNCj4gKwkJVkhPU1RfTE9HX0RB
VEEoREVCVUcsICIoJWQpICVzOiBmYWlsZWQgdG8gdHJhbnNmZXIgJXUgcGFja2V0cyBmb3INCj4g
cXVldWUgJXUuXG4iLA0KPiArCQkJCWRldi0+dmlkLCBfX2Z1bmNfXywgcGt0X2VyciwgcXVldWVf
aWQpOw0KPiAgCQlkbWFfZXJyb3JfaGFuZGxlcl9wYWNrZWQodnEsIHNsb3RfaWR4LCBwa3RfZXJy
LCAmcGt0X2lkeCk7DQo+ICsJfQ0KPiANCj4gIAlpZiAobGlrZWx5KHZxLT5zaGFkb3dfdXNlZF9p
ZHgpKSB7DQo+ICAJCS8qIGtlZXAgdXNlZCBkZXNjcmlwdG9ycy4gKi8NCj4gQEAgLTE4MjYsMjgg
KzE5MzAsMzcgQEAgd3JpdGVfYmFja19jb21wbGV0ZWRfZGVzY3NfcGFja2VkKHN0cnVjdA0KPiB2
aG9zdF92aXJ0cXVldWUgKnZxLA0KPiANCj4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVp
bnQxNl90DQo+ICB2aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKHN0cnVjdCB2aXJ0aW9fbmV0
ICpkZXYsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1
aW50MTZfdCBjb3VudCkNCj4gKwkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291
bnQsIGludDE2X3QgZG1hX2lkLA0KPiArCQl1aW50MTZfdCB2Y2hhbikNCj4gIHsNCj4gIAlzdHJ1
Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGRldi0+dmlydHF1ZXVlW3F1ZXVlX2lkXTsNCj4gIAlz
dHJ1Y3Qgdmhvc3RfYXN5bmMgKmFzeW5jID0gdnEtPmFzeW5jOw0KPiAgCXN0cnVjdCBhc3luY19p
bmZsaWdodF9pbmZvICpwa3RzX2luZm8gPSBhc3luYy0+cGt0c19pbmZvOw0KPiAtCWludDMyX3Qg
bl9jcGw7DQo+ICsJdWludDE2X3QgbnJfY3BsX3BrdHMgPSAwOw0KPiAgCXVpbnQxNl90IG5fZGVz
Y3MgPSAwLCBuX2J1ZmZlcnMgPSAwOw0KPiAgCXVpbnQxNl90IHN0YXJ0X2lkeCwgZnJvbSwgaTsN
Cj4gDQo+IC0Jbl9jcGwgPSBhc3luYy0+b3BzLmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMoZGV2LT52
aWQsIHF1ZXVlX2lkLCAwLCBjb3VudCk7DQo+IC0JaWYgKHVubGlrZWx5KG5fY3BsIDwgMCkpIHsN
Cj4gLQkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiKCVkKSAlczogZmFpbGVkIHRvIGNoZWNrIGNvbXBs
ZXRlZCBjb3BpZXMgZm9yDQo+IHF1ZXVlIGlkICVkLlxuIiwNCj4gLQkJCQlkZXYtPnZpZCwgX19m
dW5jX18sIHF1ZXVlX2lkKTsNCj4gLQkJcmV0dXJuIDA7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKG5f
Y3BsID09IDApDQo+IC0JCXJldHVybiAwOw0KPiArCS8qIENoZWNrIGNvbXBsZXRlZCBjb3BpZXMg
Zm9yIHRoZSBnaXZlbiBETUEgdkNoYW5uZWwgKi8NCj4gKwl2aG9zdF9hc3luY19kbWFfY2hlY2tf
Y29tcGxldGVkKGRtYV9pZCwgdmNoYW4sIGNvdW50KTsNCj4gDQo+ICAJc3RhcnRfaWR4ID0gYXN5
bmNfZ2V0X2ZpcnN0X2luZmxpZ2h0X3BrdF9pZHgodnEpOw0KPiANCj4gLQlmb3IgKGkgPSAwOyBp
IDwgbl9jcGw7IGkrKykgew0KPiArCS8qKg0KPiArCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9m
IGNvcHkgY29tcGxldGVkIHBhY2tldHMuDQo+ICsJICogTm90ZSB0aGF0IHRoZXJlIG1heSBiZSBj
b21wbGV0ZWQgcGFja2V0cyBldmVuIGlmDQo+ICsJICogbm8gY29waWVzIGFyZSByZXBvcnRlZCBk
b25lIGJ5IHRoZSBnaXZlbiBETUEgdkNoYW5uZWwsDQo+ICsJICogYXMgRE1BIHZDaGFubmVscyBj
b3VsZCBiZSBzaGFyZWQgYnkgb3RoZXIgdGhyZWFkcy4NCj4gKwkgKi8NCj4gKwlmcm9tID0gc3Rh
cnRfaWR4Ow0KPiArCXdoaWxlICh2cS0+YXN5bmMtPnBrdHNfY21wbF9mbGFnW2Zyb21dICYmIGNv
dW50LS0pIHsNCj4gKwkJdnEtPmFzeW5jLT5wa3RzX2NtcGxfZmxhZ1tmcm9tXSA9IGZhbHNlOw0K
PiArCQlmcm9tKys7DQo+ICsJCWlmIChmcm9tID49IHZxLT5zaXplKQ0KPiArCQkJZnJvbSAtPSB2
cS0+c2l6ZTsNCj4gKwkJbnJfY3BsX3BrdHMrKzsNCj4gKwl9DQo+ICsNCj4gKwlmb3IgKGkgPSAw
OyBpIDwgbnJfY3BsX3BrdHM7IGkrKykgew0KPiAgCQlmcm9tID0gKHN0YXJ0X2lkeCArIGkpICUg
dnEtPnNpemU7DQo+ICAJCS8qIE9ubHkgdXNlZCB3aXRoIHBhY2tlZCByaW5nICovDQo+ICAJCW5f
YnVmZmVycyArPSBwa3RzX2luZm9bZnJvbV0ubnJfYnVmZmVyczsNCj4gQEAgLTE4NTYsNyArMTk2
OSw3IEBAIHZob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoc3RydWN0IHZpcnRpb19uZXQgKmRl
diwNCj4gdWludDE2X3QgcXVldWVfaWQsDQo+ICAJCXBrdHNbaV0gPSBwa3RzX2luZm9bZnJvbV0u
bWJ1ZjsNCj4gIAl9DQo+IA0KPiAtCWFzeW5jLT5wa3RzX2luZmxpZ2h0X24gLT0gbl9jcGw7DQo+
ICsJYXN5bmMtPnBrdHNfaW5mbGlnaHRfbiAtPSBucl9jcGxfcGt0czsNCj4gDQo+ICAJaWYgKGxp
a2VseSh2cS0+ZW5hYmxlZCAmJiB2cS0+YWNjZXNzX29rKSkgew0KPiAgCQlpZiAodnFfaXNfcGFj
a2VkKGRldikpIHsNCj4gQEAgLTE4NzcsMTIgKzE5OTAsMTMgQEAgdmhvc3RfcG9sbF9lbnF1ZXVl
X2NvbXBsZXRlZChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LA0KPiB1aW50MTZfdCBxdWV1ZV9pZCwN
Cj4gIAkJfQ0KPiAgCX0NCj4gDQo+IC0JcmV0dXJuIG5fY3BsOw0KPiArCXJldHVybiBucl9jcGxf
cGt0czsNCj4gIH0NCj4gDQo+ICB1aW50MTZfdA0KPiAgcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9j
b21wbGV0ZWQoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0JCXN0cnVjdCBydGVfbWJ1
ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50KQ0KPiArCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1
aW50MTZfdCBjb3VudCwgaW50MTZfdCBkbWFfaWQsDQo+ICsJCXVpbnQxNl90IHZjaGFuKQ0KPiAg
ew0KPiAgCXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ICAJc3Ry
dWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7DQo+IEBAIC0xOTA4LDcgKzIwMjIsNyBAQCBydGVfdmhv
c3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZChpbnQgdmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwN
Cj4gDQo+ICAJcnRlX3NwaW5sb2NrX2xvY2soJnZxLT5hY2Nlc3NfbG9jayk7DQo+IA0KPiAtCW5f
cGt0c19jcGwgPSB2aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKGRldiwgcXVldWVfaWQsIHBr
dHMsIGNvdW50KTsNCj4gKwluX3BrdHNfY3BsID0gdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRl
ZChkZXYsIHF1ZXVlX2lkLCBwa3RzLCBjb3VudCwNCj4gZG1hX2lkLCB2Y2hhbik7DQo+IA0KPiAg
CXJ0ZV9zcGlubG9ja191bmxvY2soJnZxLT5hY2Nlc3NfbG9jayk7DQo+IA0KPiBAQCAtMTkxNyw3
ICsyMDMxLDggQEAgcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoaW50IHZpZCwgdWlu
dDE2X3QNCj4gcXVldWVfaWQsDQo+IA0KPiAgdWludDE2X3QNCj4gIHJ0ZV92aG9zdF9jbGVhcl9x
dWV1ZV90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiAtCQlzdHJ1
Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCkNCj4gKwkJc3RydWN0IHJ0ZV9tYnVm
ICoqcGt0cywgdWludDE2X3QgY291bnQsIGludDE2X3QgZG1hX2lkLA0KPiArCQl1aW50MTZfdCB2
Y2hhbikNCj4gIHsNCj4gIAlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQp
Ow0KPiAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiBAQCAtMTk0MSwxNCArMjA1Niwx
NCBAQCBydGVfdmhvc3RfY2xlYXJfcXVldWVfdGhyZWFkX3Vuc2FmZShpbnQgdmlkLCB1aW50MTZf
dA0KPiBxdWV1ZV9pZCwNCj4gIAkJcmV0dXJuIDA7DQo+ICAJfQ0KPiANCj4gLQluX3BrdHNfY3Bs
ID0gdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZChkZXYsIHF1ZXVlX2lkLCBwa3RzLCBjb3Vu
dCk7DQo+ICsJbl9wa3RzX2NwbCA9IHZob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoZGV2LCBx
dWV1ZV9pZCwgcGt0cywgY291bnQsDQo+IGRtYV9pZCwgdmNoYW4pOw0KPiANCj4gIAlyZXR1cm4g
bl9wa3RzX2NwbDsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50
MzJfdA0KPiAgdmlydGlvX2Rldl9yeF9hc3luY19zdWJtaXQoc3RydWN0IHZpcnRpb19uZXQgKmRl
diwgdWludDE2X3QgcXVldWVfaWQsDQo+IC0Jc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDMy
X3QgY291bnQpDQo+ICsJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDMyX3QgY291bnQsIGlu
dDE2X3QgZG1hX2lkLCB1aW50MTZfdCB2Y2hhbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgdmhvc3Rfdmly
dHF1ZXVlICp2cTsNCj4gIAl1aW50MzJfdCBuYl90eCA9IDA7DQo+IEBAIC0xOTgwLDEwICsyMDk1
LDEwIEBAIHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0KHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYs
DQo+IHVpbnQxNl90IHF1ZXVlX2lkLA0KPiANCj4gIAlpZiAodnFfaXNfcGFja2VkKGRldikpDQo+
ICAJCW5iX3R4ID0gdmlydGlvX2Rldl9yeF9hc3luY19zdWJtaXRfcGFja2VkKGRldiwgdnEsIHF1
ZXVlX2lkLA0KPiAtCQkJCXBrdHMsIGNvdW50KTsNCj4gKwkJCQlwa3RzLCBjb3VudCwgZG1hX2lk
LCB2Y2hhbik7DQo+ICAJZWxzZQ0KPiAgCQluYl90eCA9IHZpcnRpb19kZXZfcnhfYXN5bmNfc3Vi
bWl0X3NwbGl0KGRldiwgdnEsIHF1ZXVlX2lkLA0KPiAtCQkJCXBrdHMsIGNvdW50KTsNCj4gKwkJ
CQlwa3RzLCBjb3VudCwgZG1hX2lkLCB2Y2hhbik7DQo+IA0KPiAgb3V0Og0KPiAgCWlmIChkZXYt
PmZlYXR1cmVzICYgKDFVTEwgPDwgVklSVElPX0ZfSU9NTVVfUExBVEZPUk0pKQ0KPiBAQCAtMTk5
Nyw3ICsyMTEyLDggQEAgdmlydGlvX2Rldl9yeF9hc3luY19zdWJtaXQoc3RydWN0IHZpcnRpb19u
ZXQgKmRldiwNCj4gdWludDE2X3QgcXVldWVfaWQsDQo+IA0KPiAgdWludDE2X3QNCj4gIHJ0ZV92
aG9zdF9zdWJtaXRfZW5xdWV1ZV9idXJzdChpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4g
LQkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291bnQpDQo+ICsJCXN0cnVjdCBy
dGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50LCBpbnQxNl90IGRtYV9pZCwNCj4gKwkJdWlu
dDE2X3QgdmNoYW4pDQo+ICB7DQo+ICAJc3RydWN0IHZpcnRpb19uZXQgKmRldiA9IGdldF9kZXZp
Y2UodmlkKTsNCj4gDQo+IEBAIC0yMDExLDcgKzIxMjcsNyBAQCBydGVfdmhvc3Rfc3VibWl0X2Vu
cXVldWVfYnVyc3QoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQsDQo+ICAJCXJldHVybiAw
Ow0KPiAgCX0NCj4gDQo+IC0JcmV0dXJuIHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0KGRldiwg
cXVldWVfaWQsIHBrdHMsIGNvdW50KTsNCj4gKwlyZXR1cm4gdmlydGlvX2Rldl9yeF9hc3luY19z
dWJtaXQoZGV2LCBxdWV1ZV9pZCwgcGt0cywgY291bnQsIGRtYV9pZCwNCj4gdmNoYW4pOw0KPiAg
fQ0KPiANCj4gIHN0YXRpYyBpbmxpbmUgYm9vbA0KPiAtLQ0KPiAyLjI1LjENCg0K