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 62FE6A034C;
	Mon,  8 Aug 2022 13:56:30 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 139314067B;
	Mon,  8 Aug 2022 13:56:30 +0200 (CEST)
Received: from NAM02-DM3-obe.outbound.protection.outlook.com
 (mail-dm3nam02on2100.outbound.protection.outlook.com [40.107.95.100])
 by mails.dpdk.org (Postfix) with ESMTP id C43F84014F
 for <dev@dpdk.org>; Mon,  8 Aug 2022 13:56:26 +0200 (CEST)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Gc8KvMv6052mrWzqARZ2blNJ4loOdrkVdEMrdnG9Qzoe8SOruzBkIRgvKNHmNRtQzX3CHPoIHGiGopeG3C85IOV1t3xw6DnNcvtVAOMeO8Nx8Th9THCi23NQAf4mKsImQjW/D4cVAzeTt+HyJXpN8qgl6Xs/ZDaYIktTkLe+XKeHeKvl8A7A2zURxJdjh894ydlim5VMRJ3hRIXLpPr1J1O5i5ITVCppCev3vYfsyk2sFKXE34RHVNbL4wVPdTQG5LsuAy/Md4giRSIJz6dtaojNw+8g5XbQ/qgAfPjdSFoJbCadduZIpTB45pcBdrYU32Tct3qWVQZcTG8HX8ltsQ==
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=KMKEbvEBr9eTGoBk//jsjUCgynZ1n3UGpNBCSKFOQww=;
 b=QqK0DzQdwuk8rIClQxe8vFuNlpJFDjk/mtKfGjTZeNCw1MjhMv9GT3JYK7WGv+3ZLebBRGcb7kk1g7AFQ7EA660D9HQv2sP6ZXRWSkNV05+7J/fK1A4t2EPU07/Jkn3wIjqVtUmZgiAyGWYn4w+7tJOM78XQyqhYw6jYYr/6C/l8k9Z7Jg2BK4Oin4D34r05jMFJk0GrAJyXgA29P2B7zS/eRjYPilEQ8ysAVujK4Xv0ke22e0oBzCZB8WigBl3W6mqpZTIxzhcxdZGBuptC3p8DKL+G6pgX4Kg4CuiDI4fvxZkaM6mCms0NkuaGUBvqYYdJrfzAXD85d9L+EyAoHw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com;
 dkim=pass header.d=corigine.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=KMKEbvEBr9eTGoBk//jsjUCgynZ1n3UGpNBCSKFOQww=;
 b=gECOmnuEym+5FB4bwrgP80iNTSjBzBNu2eekqa0QfqIisAP3TdbDuxxKiOqpRhoZbTpANRLLmX8eU0SoSYi7zz6yu+IcIXeM8rMr1ZxqMX+XABjJOpE8/8d5ZS3JaGEHRqGBcU2rnci12MNmsMQcureFgQb8wRbtSoeEmtkvLOI=
Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)
 by BY5PR13MB4454.namprd13.prod.outlook.com (2603:10b6:a03:1db::19)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.8; Mon, 8 Aug
 2022 11:56:24 +0000
Received: from SJ0PR13MB5545.namprd13.prod.outlook.com
 ([fe80::402d:6abc:83a8:2431]) by SJ0PR13MB5545.namprd13.prod.outlook.com
 ([fe80::402d:6abc:83a8:2431%5]) with mapi id 15.20.5525.009; Mon, 8 Aug 2022
 11:56:24 +0000
From: Chaoyong He <chaoyong.he@corigine.com>
To: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>, "dev@dpdk.org"
 <dev@dpdk.org>
CC: Niklas Soderlund <niklas.soderlund@corigine.com>
Subject: RE: [PATCH v5 10/12] net/nfp: add flower representor framework
Thread-Topic: [PATCH v5 10/12] net/nfp: add flower representor framework
Thread-Index: AQHYqJVBndaiaZazqkeSKnLAQS0fna2gXLqAgASHNKA=
Date: Mon, 8 Aug 2022 11:56:24 +0000
Message-ID: <SJ0PR13MB55453CD5968D5B22EC34B2CC9E639@SJ0PR13MB5545.namprd13.prod.outlook.com>
References: <1659681155-16525-1-git-send-email-chaoyong.he@corigine.com>
 <1659681155-16525-11-git-send-email-chaoyong.he@corigine.com>
 <774388da-8f93-ac8a-60a9-9f4372dcc293@oktetlabs.ru>
In-Reply-To: <774388da-8f93-ac8a-60a9-9f4372dcc293@oktetlabs.ru>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=corigine.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 0448b03b-885a-45d1-7770-08da7935047d
x-ms-traffictypediagnostic: BY5PR13MB4454:EE_
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: umwEgsBpE8DoRRc1Wnfb0gBh3zkLbaEz+30rTyDPFkljy5aE++Zh/6iyqVfSjGYjV7NR7dn20InZiQxddGAsqelcre8Jb0dh6gYIODMHih2yn5MsTS88zE3mDdoR3ptgO94PuRunSBQwkp+O3/p9ffrp6KV0YT4h6PDF4qSLCs2R7XSxrhytT5l5aGWy9+nYKK0atq+esLmTHQyxYPvyWoStzhlq4LHnsLatMxnsjVdvq23a2rba/FCzJs3wWiM9YpSd72sRbxbf/Wdth9EMsscq6r7fdCgvVyWXIrxtZRtwpAKqiDtFxQLU8qzG9CO6ZguAGAVjGTe4rOw6t3tHNtGmEGYuBfpggIYo1ANpcRIEIFHGwXf56DgeDyfINS2uAW9sv2Td/9eCQrsGonJ1ervz212BUvyaAzpf+6lNvBD1j/xFcjquIU28G7+qzTjLgHPXXhMW6JpMhQzw0x1RWTePWw/C9D7Kcbda4gBJ8uhRzuqgW1HQL72QtrGk8eIGI/VWsA0vvKdP8XSrzfETBUpahjjbAq39DZAnQiJVI3HoNBU+qiTigDP9kKwQ6NMowz0jdIRICWx3n7z3B9f5551M8SSdE6xBwFsyZfFglmX/vSCobjgPY+oIaNdcKTsYUqqBPaPWK2aS6/ADFArtWulYyGqgjSxdOF6insDgs2TWmd4lq3BTmJndiypdFAxYdPU2rlaKxl7rXnnevPMkUnaHMBFQh4ZHfEVCkLrl/4CkAiDQ5i4sFZy8lLx+IkNLbMeTnGvIugtKEVd2Wwide7uB/8AQnayLD934NMAUqere4YT9eZMMIcXaYAgU1nkFag4OcIa7HufTNcxcz8Ei0tGoS3SfP1BQxoiSf4IpFzg=
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE;
 SFS:(13230016)(4636009)(39830400003)(396003)(136003)(366004)(346002)(376002)(66476007)(66446008)(38100700002)(64756008)(66556008)(44832011)(122000001)(71200400001)(30864003)(66946007)(478600001)(8676002)(38070700005)(8936002)(55016003)(52536014)(5660300002)(110136005)(86362001)(4326008)(76116006)(33656002)(316002)(9686003)(26005)(83380400001)(186003)(107886003)(66574015)(6506007)(41300700001)(53546011)(2906002)(7696005)(559001)(579004);
 DIR:OUT; SFP:1102; 
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WC83V01sYUdBTHZiRWM0d0sxNWc2em1rU1JwVlI0UnptekpnUGRjSkFEbCth?=
 =?utf-8?B?UWdGSnZrMTNuZkpaa0xKNEExTklEbk45V1NhYmpQRTZRbSsvOHNmbWFhaHpG?=
 =?utf-8?B?QklVU1JHZGtqOEtCMlNOU01RMStEWFlwamU0QVROa2wxcG5PY3hvR25MYng3?=
 =?utf-8?B?UDNBNWRDcGpwMGFzcFQzQ1NDSHBtOXFBcXUzOEdVN3MvcmVjUHkvOWVTT28r?=
 =?utf-8?B?c1Mrc2xWUy9oMHFuZUFFdGV5bUh0L1c3VmxKMStsNFZXcGZta3BxU3RHUE5K?=
 =?utf-8?B?Vk5qTG8vV1JBazkxbHYrMkZPcnFHdUJ1cThHVmFYUGJ3K3ZValMzTFJGcnV3?=
 =?utf-8?B?TS9rMWNjZTErS3dLUmVCb2xldlJuSFgvaG9DWFg2OGFrYm0yYUNvQnFUQ2dz?=
 =?utf-8?B?MnpkMlhwUElXc0xVUUtZbXBSbHhJUkJNN3RrenpLVnhXdjJSaVU1RTRvWTRo?=
 =?utf-8?B?T0dYUG03YXJmV3F5QzA0cXBSKzl0OG1ud1VIbU9QdnR3Sk1zZDduK0FHQjBo?=
 =?utf-8?B?RWE5L0tVcGZKaTJ0MUlZZzFLMk4xWlZTVWRDeHR3UERZaDhVbFY4ZERwTTBW?=
 =?utf-8?B?UGxBY2E4UnE3SlljTStpU1FoeTBzOExGUjhLOXEvVStWK1ZCUDNkNFNpTWxN?=
 =?utf-8?B?ZmFSdW1kYll5MTRnOVkzRU5BOVY3WDlKOVRMVFUvV0RBUGo5aUFBV0FFTEgr?=
 =?utf-8?B?dXRZcnl0MG1kOUwveXZnMUlXWVdNUHpKRXVLNkFuMVd1Q0FlTGhtanNkalJi?=
 =?utf-8?B?VnRSSVBvdzVZc3ExZTBvU0h3eHh4L2JRejFwRmhrUnRvUWdMdVZvVm1WTWRW?=
 =?utf-8?B?OHgzbWw3aGRVMjdTUU8yNGZkVW5TcXIxNHdLdG8rRGhsaVl6bjdVK0o5WXZy?=
 =?utf-8?B?UFM0WVhwTDN4NFFUVC8zeGo5TUVESHM1WmJlanY3THFpYkV3dmcrMzF4aHFs?=
 =?utf-8?B?NGJKZXlFTHF6Vk9uM3JUVFo3VXdRSGZPU3NpTkpKYUhLQmNJOE5MOGtMRWJ4?=
 =?utf-8?B?QzZSMFRvdWVaYnlWMHZ0S2RNZXRXWVNWRVAwZUZlckFzNmNtbmpoZFExYlRj?=
 =?utf-8?B?Zkxrc3pBQXkwQ3ErNFIwamMwT0U2MW51RWRyRURWQU94Z2xzeHYrT1ByNmh2?=
 =?utf-8?B?WHpaT09QMGFYSWRwQy9vV2s2YVdrbkZxVW5lK2NYRWVXT3R6KzFTMmJBaGwx?=
 =?utf-8?B?RmlmZ0N6V1p6aCtSbSs3RGErRzRRMy9hZHppS0dnNDB6NXlhT3JWRXNtanpm?=
 =?utf-8?B?cER2Qm5lTzMxamVqayt1KytsUnljai8zMWYwR3VTQ2EvZWpRMG16ZTNKYVF1?=
 =?utf-8?B?cFVrb09vTGE5a2ZCY0hTejB1L3IyNzFUcVdlb2pXMGhraVlHUXMvRW1GNStj?=
 =?utf-8?B?WXQvdVVYVzNqa1FFdjBXTG13SjNRQnNuTXpjWVl6SDJLcEJ3OFZIUFltcU1U?=
 =?utf-8?B?ODU4ZGE1dUMwYVNIVDN5U1BaUGQ4dElCeUNKSDE0M0lNQjRoUVVxdUtRb1Nl?=
 =?utf-8?B?TzdJMWd4ZC83eWVVTnRvSFdQbytiU0VoNXFSWnJ5SkExRmxDM1JGdWlvZE52?=
 =?utf-8?B?UWtoZ2JDZTBERkJNUzYyazloa2oxb1dydENtZVRNYTg0SGk2eGMydUdlcXYz?=
 =?utf-8?B?VnA4TEdkRUlycU5UeDZkdlhiMUJBUGlwWFdMa080R3BiVUpZNHdrcUZtWjR6?=
 =?utf-8?B?cHlPbnVVWS9mTVY4Qzd4WVdjQ2dOcWwxdThZWkh5VGtUeTdQcFE1T1dpOTJm?=
 =?utf-8?B?eTM3ekJEYm8xcVdNK211UTZrVXltSTEzNUtIUkg0K0kvc2s3b3l6RkVhU0xZ?=
 =?utf-8?B?dVRZRHdaeGxBY3NKa2hZRjVtVXM5Ti9RUEZWS1Q2QzMzdDlRL1gzWFE2eVl1?=
 =?utf-8?B?c1o5cS9lbGpFc3poSTBCK2NkL1RhNEtTdXp3akRWS1pPVW93bm45Q3J5c3lp?=
 =?utf-8?B?YUV1bEtQRnpLOTVGUWZGTlNrVnM4ZG1YdXdFSDk1ZzhEd3pWdnc5K0pGbVQv?=
 =?utf-8?B?blhJbzNqck03RG9kK28yVGNZSHVkaXRrME1vMGxTZEFmUlcyOXRuSGNVOS9I?=
 =?utf-8?B?R0c2QzdQUVNQc1NEY2V3SWhUa0daRFJpczdydVBnTEEwcjVTQnB5R3IvSXJV?=
 =?utf-8?Q?M00t09oMa5TwfJorKVDD1FbJt?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: corigine.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0448b03b-885a-45d1-7770-08da7935047d
X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Aug 2022 11:56:24.1749 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: fe128f2c-073b-4c20-818e-7246a585940c
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Jcn34zqpxJQcCGUQA+PJNHehQdm/5ffYwMMHlhs1GcelbzD+Xmni91uFSuWRbxQfa8EZ8f49XkP1f/VIL6qI8oc7IsXfExyii0BGpOWJQ8M=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR13MB4454
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

PiBPbiA4LzUvMjIgMDk6MzIsIENoYW95b25nIEhlIHdyb3RlOg0KPiA+IFRoaXMgY29tbWl0IGFk
ZHMgdGhlIGZyYW1ld29yayB0byBzdXBwb3J0IGZsb3dlciByZXByZXNlbnRvcnMuDQo+IA0KPiAi
VGhpcyBjb21taXQgYWRkcyIgLT4gIkFkZCINCj4gDQo+ID4gVGhlIG51bWJlciBvZiBWRiByZXBy
ZXNlbnRvcnMgYXJlIHBhcnNlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIEZvcg0KPiA+IHBoeXNp
Y2FsIHBvcnQgcmVwcmVzZW50b3JzIHRoZSBjdXJyZW50IGxvZ2ljIGFpbXMgdG8gY3JlYXRlIGEN
Cj4gPiByZXByZXNlbnRvciBmb3IgZWFjaCBwaHlzaWNhbCBwb3J0IHByZXNlbnQgb24gdGhlIGhh
cmR3YXJlLg0KPiA+DQo+ID4gQSBldGhfZGV2IGlzIGNyZWF0ZWQgZm9yIGVhY2ggcGh5cG9ydCBh
bmQgVkYsIGFuZCBmbG93ZXIgZmlybXdhcmUNCj4gDQo+IEEgLT4gQW4sIHBoeXBvcnQgLT4gcGh5
c2ljYWwgcG9ydA0KPiANCj4gPiByZXF1aXJlcyBhIE1BQyByZXByIGNtc2cgdG8gYmUgdHJhbnNt
aXR0ZWQgdG8gZmlybXdhcmUgd2l0aCBpbmZvIGFib3V0DQo+ID4gdGhlIG51bWJlciBvZiBwaHlz
aWNhbCBwb3J0cyBjb25maWd1cmVkLg0KPiA+DQo+ID4gUmVpZnkgbWVzc2FnZXMgYXJlIHNlbnQg
dG8gaGFyZHdhcmUgZm9yIGVhY2ggcGh5cG9ydCByZXByZXNlbnRvci4NCj4gPiBBIHJ0ZV9yaW5n
IGlzIGFsc28gY3JlYXRlZCBwZXIgcmVwcmVzZW50b3Igc28gdGhhdCB0cmFmZmljIGNhbiBiZQ0K
PiANCj4gQSAtPiBBbg0KPiANCj4gPiBwdXNoZWQgYW5kIHB1bGxlZCB0byB0aGlzIGludGVyZmFj
ZS4NCj4gPg0KPiA+IFRvIHVwIGFuZCBkb3duIHRoZSByZWFsIGRldmljZSByZXByZXNlbnRlZCBi
eSBhIGZsb3dlciByZXByZXNlbnRvcg0KPiA+IHBvcnQgYSBwb3J0IG1vZCBtZXNzYWdlIGlzIHVz
ZWQgdG8gY29udmV5IHRoYXQgaW5mbyB0byB0aGUgZmlybXdhcmUuDQo+ID4gVGhpcyBtZXNzYWdl
IHdpbGwgYmUgdXNlZCBpbiB0aGUgZGV2X29wcyBjYWxsYmFja3Mgb2YgZmxvd2VyIHJlcHJlc2Vu
dG9ycy4NCj4gPg0KPiA+IEVhY2ggY21zZyBnZW5lcmF0ZWQgYnkgdGhlIGRyaXZlciBpcyBwcmVw
ZW5kZWQgd2l0aCBhIGNtc2cgaGVhZGVyLg0KPiA+IFRoaXMgY29tbWl0IGFsc28gYWRkcyB0aGUg
bG9naWMgdG8gZmlsbCBpbiB0aGUgaGVhZGVyIG9mIGNtc2dzLg0KPiA+DQo+ID4gVGhpcyBjb21t
aXQgYWxzbyBhZGRzIHRoZSBSeCBhbmQgVHggcGF0aCBmb3IgZmxvd2VyIHJlcHJlc2VudG9ycy4g
Rm9yDQo+IA0KPiAiVGhpcyBjb21taXQgYWxzbyBhZGRzIiAtPiAiQWxzbyBhZGQiDQo+IA0KPiA+
IFJ4IHBhY2tldHMgYXJlIGRlcXVldWVkIGZyb20gdGhlIHJlcHJlc2VudG9yIHJpbmcgYW5kIHBh
c3NlZCB0byB0aGUNCj4gPiBldGhfZGV2LiBGb3IgVHggdGhlIGZpcnN0IHF1ZXVlIG9mIHRoZSBQ
RiB2TklDIGlzIHVzZWQuIE1ldGFkYXRhIGFib3V0DQo+ID4gdGhlIHJlcHJlc2VudG9yIGlzIGFk
ZGVkIGJlZm9yZSB0aGUgcGFja2V0IGlzIHNlbnQgZG93biB0byBmaXJtd2FyZS4NCj4gPg0KPiA+
IFNpZ25lZC1vZmYtYnk6IENoYW95b25nIEhlIDxjaGFveW9uZy5oZUBjb3JpZ2luZS5jb20+DQo+
ID4gUmV2aWV3ZWQtYnk6IE5pa2xhcyBTw7ZkZXJsdW5kIDxuaWtsYXMuc29kZXJsdW5kQGNvcmln
aW5lLmNvbT4NCj4gPiAtLS0NCj4gPiAgIGRyaXZlcnMvbmV0L25mcC9mbG93ZXIvbmZwX2Zsb3dl
ci5jICAgICAgICAgICAgIHwgIDU5ICsrKw0KPiA+ICAgZHJpdmVycy9uZXQvbmZwL2Zsb3dlci9u
ZnBfZmxvd2VyLmggICAgICAgICAgICAgfCAgMTggKw0KPiA+ICAgZHJpdmVycy9uZXQvbmZwL2Zs
b3dlci9uZnBfZmxvd2VyX2Ntc2cuYyAgICAgICAgfCAxODYgKysrKysrKysrDQo+ID4gICBkcml2
ZXJzL25ldC9uZnAvZmxvd2VyL25mcF9mbG93ZXJfY21zZy5oICAgICAgICB8IDE3MyArKysrKysr
Kw0KPiA+ICAgZHJpdmVycy9uZXQvbmZwL2Zsb3dlci9uZnBfZmxvd2VyX3JlcHJlc2VudG9yLmMg
fCA1MDgNCj4gKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gICBkcml2ZXJzL25ldC9uZnAv
Zmxvd2VyL25mcF9mbG93ZXJfcmVwcmVzZW50b3IuaCB8ICAzOSArKw0KPiA+ICAgZHJpdmVycy9u
ZXQvbmZwL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKw0KPiA+ICAgZHJp
dmVycy9uZXQvbmZwL25mcGNvcmUvbmZwX2NwcF9wY2llX29wcy5jICAgICAgfCAgMzEgKy0NCj4g
PiAgIDggZmlsZXMgY2hhbmdlZCwgMTAwNCBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkN
Cj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9uZnAvZmxvd2VyL25mcF9mbG93
ZXJfY21zZy5jDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvbmZwL2Zsb3dl
ci9uZnBfZmxvd2VyX2Ntc2cuaA0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0
L25mcC9mbG93ZXIvbmZwX2Zsb3dlcl9yZXByZXNlbnRvci5jDQo+ID4gICBjcmVhdGUgbW9kZSAx
MDA2NDQgZHJpdmVycy9uZXQvbmZwL2Zsb3dlci9uZnBfZmxvd2VyX3JlcHJlc2VudG9yLmgNCj4g
Pg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZnAvZmxvd2VyL25mcF9mbG93ZXIuYw0K
PiA+IGIvZHJpdmVycy9uZXQvbmZwL2Zsb3dlci9uZnBfZmxvd2VyLmMNCj4gPiBpbmRleCA1ZTlj
NGVmLi5kNzc3MmQ2IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L25mcC9mbG93ZXIvbmZw
X2Zsb3dlci5jDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvbmZwL2Zsb3dlci9uZnBfZmxvd2VyLmMN
Cj4gPiBAQCAtMjIsNiArMjIsNyBAQA0KPiA+ICAgI2luY2x1ZGUgIm5mcF9mbG93ZXIuaCINCj4g
PiAgICNpbmNsdWRlICJuZnBfZmxvd2VyX292c19jb21wYXQuaCINCj4gPiAgICNpbmNsdWRlICJu
ZnBfZmxvd2VyX2N0cmwuaCINCj4gPiArI2luY2x1ZGUgIm5mcF9mbG93ZXJfcmVwcmVzZW50b3Iu
aCINCj4gPg0KPiA+ICAgI2RlZmluZSBNQVhfUEtUX0JVUlNUIDMyDQo+ID4gICAjZGVmaW5lIE1F
TVBPT0xfQ0FDSEVfU0laRSA1MTINCj4gPiBAQCAtOTI3LDggKzkyOCwxMyBAQA0KPiA+ICAgCXVu
c2lnbmVkIGludCBudW1hX25vZGU7DQo+ID4gICAJc3RydWN0IG5mcF9uZXRfaHcgKnBmX2h3Ow0K
PiA+ICAgCXN0cnVjdCBuZnBfbmV0X2h3ICpjdHJsX2h3Ow0KPiA+ICsJc3RydWN0IHJ0ZV9wY2lf
ZGV2aWNlICpwY2lfZGV2Ow0KPiA+ICAgCXN0cnVjdCBuZnBfYXBwX2Zsb3dlciAqYXBwX2Zsb3dl
cjsNCj4gPiArCXN0cnVjdCBydGVfZXRoX2RldmFyZ3MgZXRoX2RhID0gew0KPiA+ICsJCS5uYl9y
ZXByZXNlbnRvcl9wb3J0cyA9IDANCj4gPiArCX07DQo+ID4NCj4gPiArCXBjaV9kZXYgPSBwZl9k
ZXYtPnBjaV9kZXY7DQo+ID4gICAJbnVtYV9ub2RlID0gcnRlX3NvY2tldF9pZCgpOw0KPiA+DQo+
ID4gICAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgRmxvd2VyIGFwcCAqLyBAQCAtMTAyMSw2
ICsxMDI3LDU5IEBADQo+ID4gICAJCWdvdG8gY3RybF92bmljX2NsZWFudXA7DQo+ID4gICAJfQ0K
PiA+DQo+ID4gKwkvKiBBbGxvY2F0ZSBhIHN3aXRjaCBkb21haW4gZm9yIHRoZSBmbG93ZXIgYXBw
ICovDQo+ID4gKwlpZiAoYXBwX2Zsb3dlci0+c3dpdGNoX2RvbWFpbl9pZCA9PQ0KPiBSVEVfRVRI
X0RFVl9TV0lUQ0hfRE9NQUlOX0lEX0lOVkFMSUQgJiYNCj4gPiArCQkJcnRlX2V0aF9zd2l0Y2hf
ZG9tYWluX2FsbG9jKCZhcHBfZmxvd2VyLQ0KPiA+c3dpdGNoX2RvbWFpbl9pZCkpIHsNCj4gPiAr
CQlQTURfSU5JVF9MT0coV0FSTklORywNCj4gPiArCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgc3dp
dGNoIGRvbWFpbiBmb3IgZGV2aWNlIik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogTm93IHBh
cnNlIFBDSSBkZXZpY2UgYXJncyBwYXNzZWQgZm9yIHJlcHJlc2VudG9yIGluZm8gKi8NCj4gPiAr
CWlmIChwY2lfZGV2LT5kZXZpY2UuZGV2YXJncykgew0KPiANCj4gQ29tcGFyZSB2cyBOVUxMDQo+
IA0KPiA+ICsJCXJldCA9IHJ0ZV9ldGhfZGV2YXJnc19wYXJzZShwY2lfZGV2LT5kZXZpY2UuZGV2
YXJncy0+YXJncywNCj4gPiArCQkJCSZldGhfZGEpOw0KPiA+ICsJCWlmIChyZXQpIHsNCj4gDQo+
IENvbXBhcmUgdnMgMA0KPiANCj4gPiArCQkJUE1EX0lOSVRfTE9HKEVSUiwgImRldmFyZyBwYXJz
ZSBmYWlsZWQiKTsNCj4gPiArCQkJZ290byBjdHJsX3ZuaWNfY2xlYW51cDsNCj4gPiArCQl9DQo+
ID4gKwl9DQo+ID4gKw0KPiANCj4gSSBzZWUgbm8gcmVwcmVzZW50b3JfaW5mb19nZXQgaW1wbGVt
ZW50YXRpb24uIEhvdyBpcyBhcHBsaWNhdGlvbiBzdXBwb3JzZWQNCj4gdG8gZmluZCBvdXQgd2hp
Y2ggcmVwcmVzZW50b3JzIGNhbiBiZSBpbnN0YW50aWF0ZWQ/DQo+IA0KPiA+ICsJaWYgKGV0aF9k
YS5uYl9yZXByZXNlbnRvcl9wb3J0cyA9PSAwKSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKERFQlVH
LCAiTm8gcmVwcmVzZW50b3IgcG9ydCBuZWVkIHRvDQo+IGNyZWF0ZS4iKTsNCj4gPiArCQlyZXQg
PSAwOw0KPiA+ICsJCWdvdG8gZG9uZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBUaGVyZSBh
bHdheXMgZXhpc3QgcGh5IHJlcHIgKi8NCj4gPiArCWlmIChldGhfZGEubmJfcmVwcmVzZW50b3Jf
cG9ydHMgPCBhcHBfZmxvd2VyLT5uZnBfZXRoX3RhYmxlLQ0KPiA+Y291bnQpDQo+ID4gK3sNCj4g
DQo+IEl0IGlzIHJlYWxseSBzdHJhbmdlIGNoZWNrLiBGaXJzdCBvZiBhbGwgSSdkIHNheSB0aGF0
IGl0IGlzIHZlcnkgaW5jb252aW5pZW50IHRvDQo+IG9ibGlkZ2UgdXNlciB0byBjcmVhdGUgc29t
ZSByZXByZXNlbnRvcnMuDQo+IFNlY29uZCwgd2hvIHNhaWQgdGhhdCB0aGVzZSByZXByZXNlbnRv
cnMgYXJlIHBoeXNpY2FsIHBvcnQgcmVwcmVzZW50b3JzPw0KPiBNYXkgYmUgbnVtYmVyIG9mIHJl
cHJlc2VudG9ycyBpcyBPSywgYnV0IGl0IGlzIGRpZmZlcmVudCByZXByZXNlbnRvcnMuLi4NCj4g
DQo+ID4gKwkJUE1EX0lOSVRfTE9HKERFQlVHLCAiU2hvdWxkIGFsc28gY3JlYXRlIHBoeSByZXBy
ZXNlbnRvcg0KPiBwb3J0LiIpOw0KPiA+ICsJCXJldCA9IC1FUkFOR0U7DQo+ID4gKwkJZ290byBj
dHJsX3ZuaWNfY2xlYW51cDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBPbmx5IHN1cHBvcnQg
VkYgcmVwcmVzZW50b3IgY3JlYXRpb24gdmlhIHRoZSBjb21tYW5kIGxpbmUgKi8NCj4gPiArCWlm
IChldGhfZGEudHlwZSAhPSBSVEVfRVRIX1JFUFJFU0VOVE9SX1ZGKSB7DQo+IA0KPiBJJ20gY29u
ZnVzZWQuIEFib3ZlIHlvdSdyZSB0YWxraW5nIGFib3V0IHBoeSByZXByZXNlbnRvcnMsIGJ1dCBo
ZXJlIFZGcy4uLg0KDQpJdCdzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIHRvIGV4cGxhaW4gYWJvdXQg
aGVyZSBhbmQgdGhlIHByb2JsZW0gYWJvdmU6DQpPdXIgbmZwIGNhcmQgaGFzIHR3byBwaHlzaWNh
bCBwb3J0cywgYnV0IG9ubHkgd2l0aCBvbmUgUEYuIEl0IGFsc28gc3VwcG9ydHMgVkZzLg0KVG8g
b2ZmbG9hZCBydGVfZmxvdyB3aXRoIG92cy1kcGRrLCB3aGF0IHdlIHJlYWxseSBuZWVkIGFyZSB0
aGUgcmVwcmVzZW50b3Igb2YNCnBoeXNpY2FsIHBvcnQgYW5kIFZGLg0KDQpCdXQgdGhlIHByb2Js
ZW0gaXMsIHRoZSByZXByZXNlbnRvciBvZiBwaHlzaWNhbCBwb3J0IGhhcyBub3Qgc3VwcG9ydGVk
IGJ5IERQREsNCmZvciBub3cuDQpTbywgd2UgZG8gYSBsaXR0bGUgdHJpY2sgaGVyZToNCjEuIElm
IHRoZSB1c2VyIHdhbnRzIHRvIGNyZWF0ZSBhbnkgcmVwcmVzZW50b3Igb2YgVkYsIHR3byByZXBy
ZXNlbnRvcnMgb2YgcGh5c2ljYWwgcG9ydA0Kc2hvdWxkIGJlIGNyZWF0ZWQgYWxzby4NCjIuIFdl
IHByZXRlbmQgdGhlIHR5cGUgb2YgdGhlc2UgdHdvIHJlcHJlc2VudG9ycyBvZiBwaHlzaWNhbCBw
b3J0IGFyZSAnUlRFX0VUSF9SRVBSRVNFTlRPUl9WRicuDQoNClRoaXMgaXMgdGhlIHJlYXNvbiBm
b3IgdGhlc2UgJ3N0cmFuZ2UnIGxvZ2ljcywgYW5kIHdlIHdpbGwgaW1tZWRpYXRlbHkgdXBkYXRl
IGl0IG9uY2UgRFBESyBzdXBwb3J0DQp0aGUgcmVwcmVzZW50b3Igb2YgcGh5c2ljYWwgcG9ydC4N
Cg0KPiANCj4gPiArCQlQTURfRFJWX0xPRyhFUlIsICJ1bnN1cHBvcnRlZCByZXByZXNlbnRvciB0
eXBlOiAlc1xuIiwNCj4gDQo+IFRoZSBtYWNybyBhbHJlYWR5IGFkZHMgXG4uIFNvLCB5b3UgZG9u
J3QgbmVlZCBpdCBoZXJlLg0KPiANCj4gPiArCQkJCXBjaV9kZXYtPmRldmljZS5kZXZhcmdzLT5h
cmdzKTsNCj4gPiArCQlyZXQgPSAtRU5PVFNVUDsNCj4gPiArCQlnb3RvIGN0cmxfdm5pY19jbGVh
bnVwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEZpbGwgaW4gZmxvd2VyIGFwcCB3aXRoIHJl
cHIgY291bnRzICovDQo+ID4gKwlhcHBfZmxvd2VyLT5udW1fcGh5cG9ydF9yZXBycyA9ICh1aW50
OF90KWFwcF9mbG93ZXItDQo+ID5uZnBfZXRoX3RhYmxlLT5jb3VudDsNCj4gPiArCWFwcF9mbG93
ZXItPm51bV92Zl9yZXBycyA9IGV0aF9kYS5uYl9yZXByZXNlbnRvcl9wb3J0cyAtDQo+ID4gKwkJ
CWFwcF9mbG93ZXItPm5mcF9ldGhfdGFibGUtPmNvdW50Ow0KPiA+ICsNCj4gPiArCVBNRF9JTklU
X0xPRyhJTkZPLCAiJWQgbnVtYmVyIG9mIFZGIHJlcHJzIiwgYXBwX2Zsb3dlci0NCj4gPm51bV92
Zl9yZXBycyk7DQo+ID4gKwlQTURfSU5JVF9MT0coSU5GTywgIiVkIG51bWJlciBvZiBwaHlwb3J0
IHJlcHJzIiwNCj4gPiArYXBwX2Zsb3dlci0+bnVtX3BoeXBvcnRfcmVwcnMpOw0KPiA+ICsNCj4g
PiArCXJldCA9IG5mcF9mbG93ZXJfcmVwcl9hbGxvYyhhcHBfZmxvd2VyKTsNCj4gPiArCWlmIChy
ZXQpIHsNCj4gDQo+IENvbXBhcmUgdnMgMA0KPiANCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLA0K
PiA+ICsJCQkicmVwcmVzZW50b3JzIGFsbG9jYXRpb24gZm9yIE5GUF9SRVBSX1RZUEVfVkYNCj4g
ZXJyb3IiKTsNCj4gPiArCQlnb3RvIGN0cmxfdm5pY19jbGVhbnVwOw0KPiA+ICsJfQ0KPiA+ICsN
Cj4gPiAgIAlyZXR1cm4gMDsNCj4gPg0KPiA+ICAgY3RybF92bmljX2NsZWFudXA6DQo+ID4gZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25mcC9mbG93ZXIvbmZwX2Zsb3dlci5oDQo+ID4gYi9kcml2
ZXJzL25ldC9uZnAvZmxvd2VyL25mcF9mbG93ZXIuaA0KPiA+IGluZGV4IGJkYzY0ZTMuLjI0ZmNl
ZDMgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvbmZwL2Zsb3dlci9uZnBfZmxvd2VyLmgN
Cj4gPiArKysgYi9kcml2ZXJzL25ldC9uZnAvZmxvd2VyL25mcF9mbG93ZXIuaA0KPiA+IEBAIC0x
OSw4ICsxOSwyMCBAQCBlbnVtIG5mcF9mbG93ZXJfc2VydmljZSB7DQo+ID4gICAgKi8NCj4gPiAg
ICNkZWZpbmUgRkxPV0VSX1BLVF9EQVRBX09GRlNFVCA4DQo+ID4NCj4gPiArI2RlZmluZSBNQVhf
RkxPV0VSX1BIWVBPUlRTIDgNCj4gPiArI2RlZmluZSBNQVhfRkxPV0VSX1ZGUyA2NA0KPiA+ICsN
Cj4gPiAgIC8qIFRoZSBmbG93ZXIgYXBwbGljYXRpb24ncyBwcml2YXRlIHN0cnVjdHVyZSAqLw0K
PiA+ICAgc3RydWN0IG5mcF9hcHBfZmxvd2VyIHsNCj4gPiArCS8qIHN3aXRjaCBkb21haW4gZm9y
IHRoaXMgYXBwICovDQo+ID4gKwl1aW50MTZfdCBzd2l0Y2hfZG9tYWluX2lkOw0KPiA+ICsNCj4g
PiArCS8qIE51bWJlciBvZiBWRiByZXByZXNlbnRvcnMgKi8NCj4gPiArCXVpbnQ4X3QgbnVtX3Zm
X3JlcHJzOw0KPiA+ICsNCj4gPiArCS8qIE51bWJlciBvZiBwaHlwb3J0IHJlcHJlc2VudG9ycyAq
Lw0KPiA+ICsJdWludDhfdCBudW1fcGh5cG9ydF9yZXByczsNCj4gPiArDQo+ID4gICAJLyogTGlz
dCBvZiBydGVfc2VydmljZSBJRCdzIGZvciB0aGUgZmxvd2VyIGFwcCAqLw0KPiA+ICAgCXVpbnQz
Ml90IGZsb3dlcl9zZXJ2aWNlc19pZHNbTkZQX0ZMT1dFUl9TRVJWSUNFX01BWF07DQo+ID4NCj4g
PiBAQCAtNDQsNiArNTYsMTIgQEAgc3RydWN0IG5mcF9hcHBfZmxvd2VyIHsNCj4gPg0KPiA+ICAg
CS8qIEN0cmwgdk5JQyBUeCBjb3VudGVyICovDQo+ID4gICAJdWludDY0X3QgY3RybF92bmljX3R4
X2NvdW50Ow0KPiA+ICsNCj4gPiArCS8qIEFycmF5IG9mIHBoeXBvcnQgcmVwcmVzZW50b3JzICov
DQo+ID4gKwlzdHJ1Y3QgbmZwX2Zsb3dlcl9yZXByZXNlbnRvcg0KPiAqcGh5X3JlcHJzW01BWF9G
TE9XRVJfUEhZUE9SVFNdOw0KPiA+ICsNCj4gPiArCS8qIEFycmF5IG9mIFZGIHJlcHJlc2VudG9y
cyAqLw0KPiA+ICsJc3RydWN0IG5mcF9mbG93ZXJfcmVwcmVzZW50b3IgKnZmX3JlcHJzW01BWF9G
TE9XRVJfVkZTXTsNCj4gPiAgIH07DQo+ID4NCj4gPiAgIGludCBuZnBfaW5pdF9hcHBfZmxvd2Vy
KHN0cnVjdCBuZnBfcGZfZGV2ICpwZl9kZXYpOyBkaWZmIC0tZ2l0DQo+ID4gYS9kcml2ZXJzL25l
dC9uZnAvZmxvd2VyL25mcF9mbG93ZXJfY21zZy5jDQo+ID4gYi9kcml2ZXJzL25ldC9uZnAvZmxv
d2VyL25mcF9mbG93ZXJfY21zZy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRl
eCAwMDAwMDAwLi41Y2U1NDdjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMv
bmV0L25mcC9mbG93ZXIvbmZwX2Zsb3dlcl9jbXNnLmMNCj4gPiBAQCAtMCwwICsxLDE4NiBAQA0K
PiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gKyAqIENv
cHlyaWdodChjKSAyMDIyIENvcmlnaW5lLCBJbmMuDQo+ID4gKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIi4uL25mcGNvcmUvbmZwX25zcC5o
Ig0KPiA+ICsjaW5jbHVkZSAiLi4vbmZwX2xvZ3MuaCINCj4gPiArI2luY2x1ZGUgIi4uL25mcF9j
b21tb24uaCINCj4gPiArI2luY2x1ZGUgIm5mcF9mbG93ZXIuaCINCj4gPiArI2luY2x1ZGUgIm5m
cF9mbG93ZXJfY21zZy5oIg0KPiA+ICsjaW5jbHVkZSAibmZwX2Zsb3dlcl9jdHJsLmgiDQo+ID4g
KyNpbmNsdWRlICJuZnBfZmxvd2VyX3JlcHJlc2VudG9yLmgiDQo+ID4gKw0KPiA+ICtzdGF0aWMg
dm9pZCAqDQo+ID4gK25mcF9mbG93ZXJfY21zZ19pbml0KHN0cnVjdCBydGVfbWJ1ZiAqbSwNCj4g
PiArCQllbnVtIG5mcF9mbG93ZXJfY21zZ190eXBlIHR5cGUsDQo+ID4gKwkJdWludDMyX3Qgc2l6
ZSkNCj4gPiArew0KPiA+ICsJY2hhciAqcGt0Ow0KPiA+ICsJdWludDMyX3QgZGF0YTsNCj4gPiAr
CXVpbnQzMl90IG5ld19zaXplID0gc2l6ZTsNCj4gPiArCXN0cnVjdCBuZnBfZmxvd2VyX2Ntc2df
aGRyICpoZHI7DQo+ID4gKw0KPiA+ICsJcGt0ID0gcnRlX3BrdG1idWZfbXRvZChtLCBjaGFyICop
Ow0KPiA+ICsJUE1EX0RSVl9MT0coREVCVUcsICJmbG93ZXJfY21zZ19pbml0IHVzaW5nIHBrdCBh
dCAlcCIsIHBrdCk7DQo+ID4gKw0KPiA+ICsJZGF0YSA9IHJ0ZV9jcHVfdG9fYmVfMzIoTkZQX05F
VF9NRVRBX1BPUlRJRCk7DQo+ID4gKwlydGVfbWVtY3B5KHBrdCwgJmRhdGEsIDQpOw0KPiA+ICsJ
cGt0ICs9IDQ7DQo+ID4gKwluZXdfc2l6ZSArPSA0Ow0KPiA+ICsNCj4gPiArCS8qIEZpcnN0IHRo
ZSBtZXRhZGF0YSBhcyBmbG93ZXIgcmVxdWlyZXMgaXQgKi8NCj4gPiArCWRhdGEgPSBydGVfY3B1
X3RvX2JlXzMyKE5GUF9NRVRBX1BPUlRfSURfQ1RSTCk7DQo+ID4gKwlydGVfbWVtY3B5KHBrdCwg
JmRhdGEsIDQpOw0KPiA+ICsJcGt0ICs9IDQ7DQo+ID4gKwluZXdfc2l6ZSArPSA0Ow0KPiA+ICsN
Cj4gPiArCS8qIE5vdyB0aGUgY3RybCBoZWFkZXIgKi8NCj4gPiArCWhkciA9IChzdHJ1Y3QgbmZw
X2Zsb3dlcl9jbXNnX2hkciAqKXBrdDsNCj4gPiArCWhkci0+cGFkICAgICA9IDA7DQo+ID4gKwlo
ZHItPnR5cGUgICAgPSB0eXBlOw0KPiA+ICsJaGRyLT52ZXJzaW9uID0gTkZQX0ZMT1dFUl9DTVNH
X1ZFUjE7DQo+ID4gKw0KPiA+ICsJcGt0ID0gKGNoYXIgKiloZHIgKyBORlBfRkxPV0VSX0NNU0df
SExFTjsNCj4gPiArCW5ld19zaXplICs9IE5GUF9GTE9XRVJfQ01TR19ITEVOOw0KPiA+ICsNCj4g
PiArCW0tPnBrdF9sZW4gPSBuZXdfc2l6ZTsNCj4gPiArCW0tPmRhdGFfbGVuID0gbS0+cGt0X2xl
bjsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcGt0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg
dm9pZA0KPiA+ICtuZnBfZmxvd2VyX2Ntc2dfbWFjX3JlcHJfaW5pdChzdHJ1Y3QgcnRlX21idWYg
Km0sIGludCBudW1fcG9ydHMpIHsNCj4gPiArCXVpbnQzMl90IHNpemU7DQo+ID4gKwlzdHJ1Y3Qg
bmZwX2Zsb3dlcl9jbXNnX21hY19yZXByICptc2c7DQo+ID4gKwllbnVtIG5mcF9mbG93ZXJfY21z
Z190eXBlIHR5cGUgPQ0KPiBORlBfRkxPV0VSX0NNU0dfVFlQRV9NQUNfUkVQUjsNCj4gPiArDQo+
ID4gKwlzaXplID0gc2l6ZW9mKCptc2cpICsgKG51bV9wb3J0cyAqIHNpemVvZihtc2ctPnBvcnRz
WzBdKSk7DQo+ID4gKwlQTURfRFJWX0xPRyhERUJVRywgIm1hYyByZXByIGNtc2cgaW5pdCB3aXRo
IHNpemU6ICV1Iiwgc2l6ZSk7DQo+ID4gKwltc2cgPSAoc3RydWN0IG5mcF9mbG93ZXJfY21zZ19t
YWNfcmVwcg0KPiAqKW5mcF9mbG93ZXJfY21zZ19pbml0KG0sDQo+ID4gKwkJCXR5cGUsIHNpemUp
Ow0KPiA+ICsNCj4gPiArCW1lbXNldChtc2ctPnJlc2VydmVkLCAwLCBzaXplb2YobXNnLT5yZXNl
cnZlZCkpOw0KPiA+ICsJbXNnLT5udW1fcG9ydHMgPSBudW1fcG9ydHM7DQo+ID4gK30NCj4gPiAr
DQo+ID4gK3N0YXRpYyB2b2lkDQo+ID4gK25mcF9mbG93ZXJfY21zZ19tYWNfcmVwcl9maWxsKHN0
cnVjdCBydGVfbWJ1ZiAqbSwNCj4gPiArCQl1bnNpZ25lZCBpbnQgaWR4LA0KPiA+ICsJCXVuc2ln
bmVkIGludCBuYmksDQo+ID4gKwkJdW5zaWduZWQgaW50IG5iaV9wb3J0LA0KPiA+ICsJCXVuc2ln
bmVkIGludCBwaHlzX3BvcnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBuZnBfZmxvd2VyX2Ntc2df
bWFjX3JlcHIgKm1zZzsNCj4gPiArDQo+ID4gKwltc2cgPSAoc3RydWN0IG5mcF9mbG93ZXJfY21z
Z19tYWNfcmVwcg0KPiAqKW5mcF9mbG93ZXJfY21zZ19nZXRfZGF0YShtKTsNCj4gPiArCW1zZy0+
cG9ydHNbaWR4XS5pZHggICAgICAgPSBpZHg7DQo+ID4gKwltc2ctPnBvcnRzW2lkeF0uaW5mbyAg
ICAgID0gbmJpICYNCj4gTkZQX0ZMT1dFUl9DTVNHX01BQ19SRVBSX05CSTsNCj4gPiArCW1zZy0+
cG9ydHNbaWR4XS5uYmlfcG9ydCAgPSBuYmlfcG9ydDsNCj4gPiArCW1zZy0+cG9ydHNbaWR4XS5w
aHlzX3BvcnQgPSBwaHlzX3BvcnQ7IH0NCj4gPiArDQo+ID4gK2ludA0KPiA+ICtuZnBfZmxvd2Vy
X2Ntc2dfbWFjX3JlcHIoc3RydWN0IG5mcF9hcHBfZmxvd2VyICphcHBfZmxvd2VyKSB7DQo+ID4g
KwlpbnQgaTsNCj4gPiArCXVpbnQxNl90IGNudDsNCj4gPiArCXVuc2lnbmVkIGludCBuYmk7DQo+
ID4gKwl1bnNpZ25lZCBpbnQgbmJpX3BvcnQ7DQo+ID4gKwl1bnNpZ25lZCBpbnQgcGh5c19wb3J0
Ow0KPiA+ICsJc3RydWN0IHJ0ZV9tYnVmICptYnVmOw0KPiA+ICsJc3RydWN0IG5mcF9ldGhfdGFi
bGUgKm5mcF9ldGhfdGFibGU7DQo+ID4gKw0KPiA+ICsJbWJ1ZiA9IHJ0ZV9wa3RtYnVmX2FsbG9j
KGFwcF9mbG93ZXItPmN0cmxfcGt0bWJ1Zl9wb29sKTsNCj4gPiArCWlmIChtYnVmID09IE5VTEwp
IHsNCj4gPiArCQlQTURfRFJWX0xPRyhFUlIsICJDb3VsZCBub3QgYWxsb2NhdGUgbWFjIHJlcHIg
Y21zZyIpOw0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW5m
cF9mbG93ZXJfY21zZ19tYWNfcmVwcl9pbml0KG1idWYsIGFwcF9mbG93ZXItDQo+ID5udW1fcGh5
cG9ydF9yZXBycyk7DQo+ID4gKw0KPiA+ICsJLyogRmlsbCBpbiB0aGUgbWFjIHJlcHIgY21zZyAq
Lw0KPiA+ICsJbmZwX2V0aF90YWJsZSA9IGFwcF9mbG93ZXItPm5mcF9ldGhfdGFibGU7DQo+ID4g
Kwlmb3IgKGkgPSAwOyBpIDwgYXBwX2Zsb3dlci0+bnVtX3BoeXBvcnRfcmVwcnM7IGkrKykgew0K
PiA+ICsJCW5iaSA9IG5mcF9ldGhfdGFibGUtPnBvcnRzW2ldLm5iaTsNCj4gPiArCQluYmlfcG9y
dCA9IG5mcF9ldGhfdGFibGUtPnBvcnRzW2ldLmJhc2U7DQo+ID4gKwkJcGh5c19wb3J0ID0gbmZw
X2V0aF90YWJsZS0+cG9ydHNbaV0uaW5kZXg7DQo+ID4gKw0KPiA+ICsJCW5mcF9mbG93ZXJfY21z
Z19tYWNfcmVwcl9maWxsKG1idWYsIGksIG5iaSwgbmJpX3BvcnQsDQo+IHBoeXNfcG9ydCk7DQo+
ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogU2VuZCB0aGUgY21zZyB2aWEgdGhlIGN0cmwgdk5JQyAq
Lw0KPiA+ICsJY250ID0gbmZwX2Zsb3dlcl9jdHJsX3ZuaWNfeG1pdChhcHBfZmxvd2VyLCBtYnVm
KTsNCj4gPiArCWlmIChjbnQgPT0gMCkgew0KPiA+ICsJCVBNRF9EUlZfTE9HKEVSUiwgIlNlbmQg
Y21zZyB0aHJvdWdoIGN0cmwgdm5pYyBmYWlsZWQuIik7DQo+ID4gKwkJcnRlX3BrdG1idWZfZnJl
ZShtYnVmKTsNCj4gPiArCQlyZXR1cm4gLUVJTzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1
cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50DQo+ID4gK25mcF9mbG93ZXJfY21zZ19yZXBy
X3JlaWZ5KHN0cnVjdCBuZnBfYXBwX2Zsb3dlciAqYXBwX2Zsb3dlciwNCj4gPiArCQlzdHJ1Y3Qg
bmZwX2Zsb3dlcl9yZXByZXNlbnRvciAqcmVwcikgew0KPiA+ICsJdWludDE2X3QgY250Ow0KPiA+
ICsJc3RydWN0IHJ0ZV9tYnVmICptYnVmOw0KPiA+ICsJc3RydWN0IG5mcF9mbG93ZXJfY21zZ19w
b3J0X3JlaWZ5ICptc2c7DQo+ID4gKw0KPiA+ICsJbWJ1ZiA9IHJ0ZV9wa3RtYnVmX2FsbG9jKGFw
cF9mbG93ZXItPmN0cmxfcGt0bWJ1Zl9wb29sKTsNCj4gPiArCWlmIChtYnVmID09IE5VTEwpIHsN
Cj4gPiArCQlQTURfRFJWX0xPRyhERUJVRywgImFsbG9jIG1idWYgZm9yIHJlcHIgcmVpZnkgZmFp
bGVkIik7DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXNn
ID0gKHN0cnVjdCBuZnBfZmxvd2VyX2Ntc2dfcG9ydF9yZWlmeQ0KPiAqKW5mcF9mbG93ZXJfY21z
Z19pbml0KG1idWYsDQo+ID4gKwkJCU5GUF9GTE9XRVJfQ01TR19UWVBFX1BPUlRfUkVJRlksDQo+
IHNpemVvZigqbXNnKSk7DQo+ID4gKw0KPiA+ICsJbXNnLT5wb3J0bnVtICA9IHJ0ZV9jcHVfdG9f
YmVfMzIocmVwci0+cG9ydF9pZCk7DQo+ID4gKwltc2ctPnJlc2VydmVkID0gMDsNCj4gPiArCW1z
Zy0+aW5mbyAgICAgPSBydGVfY3B1X3RvX2JlXzE2KDEpOw0KPiA+ICsNCj4gPiArCWNudCA9IG5m
cF9mbG93ZXJfY3RybF92bmljX3htaXQoYXBwX2Zsb3dlciwgbWJ1Zik7DQo+ID4gKwlpZiAoY250
ID09IDApIHsNCj4gPiArCQlQTURfRFJWX0xPRyhFUlIsICJTZW5kIGNtc2cgdGhyb3VnaCBjdHJs
IHZuaWMgZmFpbGVkLiIpOw0KPiA+ICsJCXJ0ZV9wa3RtYnVmX2ZyZWUobWJ1Zik7DQo+ID4gKwkJ
cmV0dXJuIC1FSU87DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g
PiArDQo+ID4gK2ludA0KPiA+ICtuZnBfZmxvd2VyX2Ntc2dfcG9ydF9tb2Qoc3RydWN0IG5mcF9h
cHBfZmxvd2VyICphcHBfZmxvd2VyLA0KPiA+ICsJCXVpbnQzMl90IHBvcnRfaWQsIGJvb2wgY2Fy
cmllcl9vaykNCj4gPiArew0KPiA+ICsJdWludDE2X3QgY250Ow0KPiA+ICsJc3RydWN0IHJ0ZV9t
YnVmICptYnVmOw0KPiA+ICsJc3RydWN0IG5mcF9mbG93ZXJfY21zZ19wb3J0X21vZCAqbXNnOw0K
PiA+ICsNCj4gPiArCW1idWYgPSBydGVfcGt0bWJ1Zl9hbGxvYyhhcHBfZmxvd2VyLT5jdHJsX3Br
dG1idWZfcG9vbCk7DQo+ID4gKwlpZiAobWJ1ZiA9PSBOVUxMKSB7DQo+ID4gKwkJUE1EX0RSVl9M
T0coREVCVUcsICJhbGxvYyBtYnVmIGZvciByZXByIHBvcnRtb2QNCj4gZmFpbGVkIik7DQo+ID4g
KwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXNnID0gKHN0cnVjdCBu
ZnBfZmxvd2VyX2Ntc2dfcG9ydF9tb2QNCj4gKiluZnBfZmxvd2VyX2Ntc2dfaW5pdChtYnVmLA0K
PiA+ICsJCQlORlBfRkxPV0VSX0NNU0dfVFlQRV9QT1JUX01PRCwNCj4gc2l6ZW9mKCptc2cpKTsN
Cj4gPiArDQo+ID4gKwltc2ctPnBvcnRudW0gID0gcnRlX2NwdV90b19iZV8zMihwb3J0X2lkKTsN
Cj4gPiArCW1zZy0+cmVzZXJ2ZWQgPSAwOw0KPiA+ICsJbXNnLT5pbmZvICAgICA9IGNhcnJpZXJf
b2s7DQo+ID4gKwltc2ctPm10dSAgICAgID0gOTAwMDsNCj4gPiArDQo+ID4gKwljbnQgPSBuZnBf
Zmxvd2VyX2N0cmxfdm5pY194bWl0KGFwcF9mbG93ZXIsIG1idWYpOw0KPiA+ICsJaWYgKGNudCA9
PSAwKSB7DQo+ID4gKwkJUE1EX0RSVl9MT0coRVJSLCAiU2VuZCBjbXNnIHRocm91Z2ggY3RybCB2
bmljIGZhaWxlZC4iKTsNCj4gPiArCQlydGVfcGt0bWJ1Zl9mcmVlKG1idWYpOw0KPiA+ICsJCXJl
dHVybiAtRUlPOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25mcC9mbG93ZXIvbmZwX2Zsb3dlcl9jbXNnLmgNCj4g
PiBiL2RyaXZlcnMvbmV0L25mcC9mbG93ZXIvbmZwX2Zsb3dlcl9jbXNnLmgNCj4gPiBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLmZjZTUxNjMNCj4gPiAtLS0gL2Rldi9u
dWxsDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvbmZwL2Zsb3dlci9uZnBfZmxvd2VyX2Ntc2cuaA0K
PiA+IEBAIC0wLDAgKzEsMTczIEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC
U0QtMy1DbGF1c2UNCj4gPiArICogQ29weXJpZ2h0KGMpIDIwMjIgQ29yaWdpbmUsIEluYy4NCj4g
PiArICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZuZGVm
IF9ORlBfQ01TR19IXw0KPiA+ICsjZGVmaW5lIF9ORlBfQ01TR19IXw0KPiA+ICsNCj4gPiArI2lu
Y2x1ZGUgPHJ0ZV9ieXRlb3JkZXIuaD4NCj4gPiArI2luY2x1ZGUgPHJ0ZV9ldGhlci5oPg0KPiA+
ICsNCj4gPiArc3RydWN0IG5mcF9mbG93ZXJfY21zZ19oZHIgew0KPiA+ICsJcnRlX2JlMTZfdCBw
YWQ7DQo+ID4gKwl1aW50OF90IHR5cGU7DQo+ID4gKwl1aW50OF90IHZlcnNpb247DQo+ID4gK307
DQo+ID4gKw0KPiA+ICsvKiBUeXBlcyBkZWZpbmVkIGZvciBjb250cm9sIG1lc3NhZ2VzICovIGVu
dW0gbmZwX2Zsb3dlcl9jbXNnX3R5cGUgew0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVfRkxP
V19BREQgICAgICAgPSAwLA0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVfRkxPV19NT0QgICAg
ICAgPSAxLA0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVfRkxPV19ERUwgICAgICAgPSAyLA0K
PiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVfTEFHX0NPTkZJRyAgICAgPSA0LA0KPiA+ICsJTkZQ
X0ZMT1dFUl9DTVNHX1RZUEVfUE9SVF9SRUlGWSAgICAgPSA2LA0KPiA+ICsJTkZQX0ZMT1dFUl9D
TVNHX1RZUEVfTUFDX1JFUFIgICAgICAgPSA3LA0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVf
UE9SVF9NT0QgICAgICAgPSA4LA0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVfTUVSR0VfSElO
VCAgICAgPSA5LA0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVfTk9fTkVJR0ggICAgICAgPSAx
MCwNCj4gPiArCU5GUF9GTE9XRVJfQ01TR19UWVBFX1RVTl9NQUMgICAgICAgID0gMTEsDQo+ID4g
KwlORlBfRkxPV0VSX0NNU0dfVFlQRV9BQ1RJVkVfVFVOUyAgICA9IDEyLA0KPiA+ICsJTkZQX0ZM
T1dFUl9DTVNHX1RZUEVfVFVOX05FSUdIICAgICAgPSAxMywNCj4gPiArCU5GUF9GTE9XRVJfQ01T
R19UWVBFX1RVTl9JUFMgICAgICAgID0gMTQsDQo+ID4gKwlORlBfRkxPV0VSX0NNU0dfVFlQRV9G
TE9XX1NUQVRTICAgICA9IDE1LA0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVfUE9SVF9FQ0hP
ICAgICAgPSAxNiwNCj4gPiArCU5GUF9GTE9XRVJfQ01TR19UWVBFX1FPU19NT0QgICAgICAgID0g
MTgsDQo+ID4gKwlORlBfRkxPV0VSX0NNU0dfVFlQRV9RT1NfREVMICAgICAgICA9IDE5LA0KPiA+
ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVfUU9TX1NUQVRTICAgICAgPSAyMCwNCj4gPiArCU5GUF9G
TE9XRVJfQ01TR19UWVBFX1BSRV9UVU5fUlVMRSAgID0gMjEsDQo+ID4gKwlORlBfRkxPV0VSX0NN
U0dfVFlQRV9UVU5fSVBTX1Y2ICAgICA9IDIyLA0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVf
Tk9fTkVJR0hfVjYgICAgPSAyMywNCj4gPiArCU5GUF9GTE9XRVJfQ01TR19UWVBFX1RVTl9ORUlH
SF9WNiAgID0gMjQsDQo+ID4gKwlORlBfRkxPV0VSX0NNU0dfVFlQRV9BQ1RJVkVfVFVOU19WNiA9
IDI1LA0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1RZUEVfTUFYICAgICAgICAgICAgPSAzMiwNCj4g
PiArfTsNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIE5GUF9GTE9XRVJfQ01TR19UWVBFX01BQ19S
RVBSDQo+ID4gKyAqICAgIEJpdCAgICAzIDMgMiAyIDIgMiAyIDIgMiAyIDIgMiAxIDEgMSAxIDEg
MSAxIDEgMSAxIDAgMCAwIDAgMCAwIDAgMCAwIDANCj4gPiArICogICAgLS0tLS1cIDEgMCA5IDgg
NyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAgOSA4IDcgNiA1IDQgMyAyIDEgMA0K
PiA+ICsgKiAgICAgV29yZCArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLSstLS0tLS0t
LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKw0KPiA+ICsgKiAgICAgICAwICB8ICAgICAgICAgICAg
ICAgICAgc3BhcmUgICAgICAgICAgICAgICAgICAgICAgICB8TnVtYmVyIG9mIHBvcnRzfA0KPiA+
ICsgKiAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLSstLS0tLS0tLS0t
LS0tLS0rLS0tLS0tLS0tLS0tLS0tKw0KPiA+ICsgKiAgICAgICAxICB8ICAgIEluZGV4ICAgICAg
fCAgIHNwYXJlICAgfE5CSXwgIFBvcnQgb24gTkJJICB8IENoaXAtd2lkZSBwb3J0fA0KPiA+ICsg
KiAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLSstLS0tLS0tLS0tLS0t
LS0rLS0tLS0tLS0tLS0tLS0tKw0KPiA+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuLi4uDQo+ID4gKyAqICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0t
LS0tLS0rLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rDQo+ID4gKyAqICAgICBO
LTEgIHwgICAgSW5kZXggICAgICB8ICAgc3BhcmUgICB8TkJJfCAgUG9ydCBvbiBOQkkgIHwgQ2hp
cC13aWRlIHBvcnR8DQo+ID4gKyAqICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t
LS0rLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rDQo+ID4gKyAqICAgICBOICAg
IHwgICAgSW5kZXggICAgICB8ICAgc3BhcmUgICB8TkJJfCAgUG9ydCBvbiBOQkkgIHwgQ2hpcC13
aWRlIHBvcnR8DQo+ID4gKyAqICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0r
LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rDQo+ID4gKyAqDQo+ID4gKyAqICAg
ICAgICAgIEluZGV4OiBpbmRleCBpbnRvIHRoZSBldGggdGFibGUNCj4gPiArICogICAgICAgICAg
TkJJIChiaXRzIDE3LTE2KTogTkJJIG51bWJlciAoMC0zKQ0KPiA+ICsgKiAgICAgICAgICBQb3J0
IG9uIE5CSSAoYml0cyAxNS04KTog4oCcYmFzZeKAnSBpbiB0aGUgZHJpdmVyDQo+ID4gKyAqICAg
ICAgICAgICAgdGhpcyBmb3JtcyBOQklYLlBvcnRZIG5vdGF0aW9uIGFzIHRoZSBOU1AgZXRoIHRh
YmxlLg0KPiA+ICsgKiAgICAgICAgICAiQ2hpcC13aWRlIiBwb3J0IChiaXRzIDctMCk6DQo+ID4g
KyAqLw0KPiA+ICtzdHJ1Y3QgbmZwX2Zsb3dlcl9jbXNnX21hY19yZXByIHsNCj4gPiArCXVpbnQ4
X3QgcmVzZXJ2ZWRbM107DQo+ID4gKwl1aW50OF90IG51bV9wb3J0czsNCj4gPiArCXN0cnVjdCB7
DQo+ID4gKwkJdWludDhfdCBpZHg7DQo+ID4gKwkJdWludDhfdCBpbmZvOw0KPiA+ICsJCXVpbnQ4
X3QgbmJpX3BvcnQ7DQo+ID4gKwkJdWludDhfdCBwaHlzX3BvcnQ7DQo+ID4gKwl9IHBvcnRzWzBd
Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogTkZQX0ZMT1dFUl9DTVNHX1RZUEVf
UE9SVF9SRUlGWQ0KPiA+ICsgKiAgICBCaXQgICAgMyAzIDIgMiAyIDIgMiAyIDIgMiAyIDIgMSAx
IDEgMSAxIDEgMSAxIDEgMSAwIDAgMCAwIDAgMCAwIDAgMCAwDQo+ID4gKyAqICAgIC0tLS0tXCAx
IDAgOSA4IDcgNiA1IDQgMyAyIDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMg
MiAxIDANCj4gPiArICogICAgV29yZCAgKy0tLS0tLS0rLS0tLS0tLSstLS0rLS0tKy0tLS0tLS0r
LS0tKy0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsNCj4gPiArICogICAgICAgMCAgfFBvcnQg
VHl8U3lzIElEIHxOSUN8UnN2fCBTcGFyZSB8UENJfHR5cHwgICAgdk5JQyAgIHwgIHF1ZXVlICAg
IHwNCj4gPiArICogICAgICAgICAgKy0tLS0tLS0rLS0tLS0rLSstLS0rLS0tKy0tLS0tLS0rLS0t
Ky0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLSsNCj4gPiArICogICAgICAgMSAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3BhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB8RXwN
Cj4gPiArICogICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSsNCj4gPiArICogICAgICAgICAgRTogMSA9IFJlcHJl
c2VudG9yIGV4aXN0cywgMCA9IFJlcHJlc2VudG9yIGRvZXMgbm90IGV4aXN0DQo+ID4gKyAqLw0K
PiA+ICtzdHJ1Y3QgbmZwX2Zsb3dlcl9jbXNnX3BvcnRfcmVpZnkgew0KPiA+ICsJcnRlX2JlMzJf
dCBwb3J0bnVtOw0KPiA+ICsJcnRlX2JlMTZfdCByZXNlcnZlZDsNCj4gPiArCXJ0ZV9iZTE2X3Qg
aW5mbzsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIE5GUF9GTE9XRVJfQ01TR19U
WVBFX1BPUlRfTU9EDQo+ID4gKyAqICAgIEJpdCAgICAzIDMgMiAyIDIgMiAyIDIgMiAyIDIgMiAx
IDEgMSAxIDEgMSAxIDEgMSAxIDAgMCAwIDAgMCAwIDAgMCAwIDANCj4gPiArICogICAgLS0tLS1c
IDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAgOSA4IDcgNiA1IDQg
MyAyIDEgMA0KPiA+ICsgKiAgICBXb3JkICArLS0tLS0tLSstLS0tLS0tKy0tLSstLS0rLS0tLS0t
LSstLS0rLS0tKy0tLS0tLS0rLS0tKy0tLS0tLS0tLS0tKw0KPiA+ICsgKiAgICAgICAwICB8UG9y
dCBUeXxTeXMgSUQgfE5JQ3xSc3Z8ICAgICAgIFJlc2VydmVkICAgICAgICB8ICAgIFBvcnQgICAg
ICAgfA0KPiA+ICsgKiAgICAgICAgICArLS0tLS0tLSstLS0tLS0tKy0tLSstLS0rLS0tLS0rLSst
LS0rLS0tKy0tLS0tLS0rLS0tKy0tLS0tLS0tLS0tKw0KPiA+ICsgKiAgICAgICAxICB8ICAgICAg
ICAgICAgU3BhcmUgICAgICAgICAgICB8THwgICAgICAgICAgICAgIE1UVSAgICAgICAgICAgICAg
fA0KPiA+ICsgKiAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ICsgKiAgICAgICAgTDogTGluayBvciBB
ZG1pbiBzdGF0ZSBiaXQuIFdoZW4gbWVzc2FnZSBpcyBnZW5lcmF0ZWQgYnkgaG9zdCwgdGhpcw0K
PiA+ICsgKiAgICAgICAgICAgYml0IGluZGljYXRlcyB0aGUgYWRtaW4gc3RhdGUgKDA9ZG93biwg
MT11cCkuIFdoZW4gZ2VuZXJhdGVkIGJ5DQo+ID4gKyAqICAgICAgICAgICBORlAsIGl0IGluZGlj
YXRlcyB0aGUgbGluayBzdGF0ZSAoMD1kb3duLCAxPXVwKQ0KPiA+ICsgKg0KPiA+ICsgKiAgICAg
ICAgUG9ydCBUeXBlICh3b3JkIDEsIGJpdHMgMzEgdG8gMjgpID0gMSAoUGh5c2ljYWwgTmV0d29y
aykNCj4gPiArICogICAgICAgIFBvcnQ6IOKAnENoaXAtd2lkZSBudW1iZXLigJ0gYXMgYXNzaWdu
ZWQgYnkgQlNQDQo+ID4gKyAqDQo+ID4gKyAqICAgIEJpdCAgICAzIDMgMiAyIDIgMiAyIDIgMiAy
IDIgMiAxIDEgMSAxIDEgMSAxIDEgMSAxIDAgMCAwIDAgMCAwIDAgMCAwIDANCj4gPiArICogICAg
LS0tLS1cIDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAgOSA4IDcg
NiA1IDQgMyAyIDEgMA0KPiA+ICsgKiAgICBXb3JkICArLS0tLS0tLSstLS0tLS0tKy0tLSstLS0r
LS0tLS0tLSstLS0rLS0tKy0tLS0tLS0rLS0tKy0tLS0tLS0tLS0tKw0KPiA+ICsgKiAgICAgICAw
ICB8UG9ydCBUeXxTeXMgSUQgfE5JQ3xSc3Z8IFNwYXJlIHxQQ0l8dHlwfCAgICB2TklDICAgfCAg
cXVldWUgICAgfA0KPiA+ICsgKiAgICAgICAgICArLS0tLS0tLSstLS0tLSstKy0tLSstLS0rLS0t
Ky0rLSstLS0rLS0tKy0tLS0tLS0rLS0tKy0tLS0tLS0tLS0tKw0KPiA+ICsgKiAgICAgICAxICB8
ICAgICAgICAgICAgU3BhcmUgICAgICAgICAgICB8THwgICAgICAgICAgICAgIE1UVSAgICAgICAg
ICAgICAgfA0KPiA+ICsgKiAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r
LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ICsgKiAgICAgICAgTDogTGlu
ayBvciBBZG1pbiBzdGF0ZSBiaXQuIFdoZW4gbWVzc2FnZSBpcyBnZW5lcmF0ZWQgYnkgaG9zdCwg
dGhpcw0KPiA+ICsgKiAgICAgICAgICAgYml0IGluZGljYXRlcyB0aGUgYWRtaW4gc3RhdGUgKDA9
ZG93biwgMT11cCkuIFdoZW4gZ2VuZXJhdGVkIGJ5DQo+ID4gKyAqICAgICAgICAgICBORlAsIGl0
IGluZGljYXRlcyB0aGUgbGluayBzdGF0ZSAoMD1kb3duLCAxPXVwKQ0KPiA+ICsgKg0KPiA+ICsg
KiAgICAgICAgUG9ydCBUeXBlICh3b3JkIDEsIGJpdHMgMzEgdG8gMjgpID0gMiAoUENJRSkNCj4g
PiArICovDQo+ID4gK3N0cnVjdCBuZnBfZmxvd2VyX2Ntc2dfcG9ydF9tb2Qgew0KPiA+ICsJcnRl
X2JlMzJfdCBwb3J0bnVtOw0KPiA+ICsJdWludDhfdCByZXNlcnZlZDsNCj4gPiArCXVpbnQ4X3Qg
aW5mbzsNCj4gPiArCXJ0ZV9iZTE2X3QgbXR1Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51bSBu
ZnBfZmxvd2VyX2Ntc2dfcG9ydF90eXBlIHsNCj4gPiArCU5GUF9GTE9XRVJfQ01TR19QT1JUX1RZ
UEVfVU5TUEVDLA0KPiA+ICsJTkZQX0ZMT1dFUl9DTVNHX1BPUlRfVFlQRV9QSFlTX1BPUlQsDQo+
ID4gKwlORlBfRkxPV0VSX0NNU0dfUE9SVF9UWVBFX1BDSUVfUE9SVCwNCj4gPiArCU5GUF9GTE9X
RVJfQ01TR19QT1JUX1RZUEVfT1RIRVJfUE9SVCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0g
bmZwX2Zsb3dlcl9jbXNnX3BvcnRfdm5pY190eXBlIHsNCj4gPiArCU5GUF9GTE9XRVJfQ01TR19Q
T1JUX1ZOSUNfVFlQRV9WRiwNCj4gPiArCU5GUF9GTE9XRVJfQ01TR19QT1JUX1ZOSUNfVFlQRV9Q
RiwNCj4gPiArCU5GUF9GTE9XRVJfQ01TR19QT1JUX1ZOSUNfVFlQRV9DVFJMLA0KPiA+ICt9Ow0K
PiA+ICsNCj4gPiArI2RlZmluZSBORlBfRkxPV0VSX0NNU0dfTUFDX1JFUFJfTkJJICAgICAgICAg
ICAgKDB4MykNCj4gPiArDQo+ID4gKyNkZWZpbmUgTkZQX0ZMT1dFUl9DTVNHX0hMRU4gICAgICAg
ICAgICBzaXplb2Yoc3RydWN0DQo+IG5mcF9mbG93ZXJfY21zZ19oZHIpDQo+ID4gKyNkZWZpbmUg
TkZQX0ZMT1dFUl9DTVNHX1ZFUjEgICAgICAgICAgICAxDQo+ID4gKyNkZWZpbmUgTkZQX05FVF9N
RVRBX1BPUlRJRCAgICAgICAgICAgICA1DQo+ID4gKyNkZWZpbmUgTkZQX01FVEFfUE9SVF9JRF9D
VFJMICAgICAgICAgICB+MFUNCj4gPiArDQo+ID4gKyNkZWZpbmUgTkZQX0ZMT1dFUl9DTVNHX1BP
UlRfVFlQRSh4KSAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4ZikgIC8qDQo+IFszMSwyOF0g
Ki8NCj4gPiArI2RlZmluZSBORlBfRkxPV0VSX0NNU0dfUE9SVF9TWVNfSUQoeCkgICAgICAgICAg
KCgoeCkgPj4gMjQpICYgMHhmKSAgLyoNCj4gWzI0LDI3XSAqLw0KPiA+ICsjZGVmaW5lIE5GUF9G
TE9XRVJfQ01TR19QT1JUX05GUF9JRCh4KSAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDMpDQo+
IC8qIFsyMiwyM10gKi8NCj4gPiArI2RlZmluZSBORlBfRkxPV0VSX0NNU0dfUE9SVF9QQ0koeCkg
ICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgzKSAgLyoNCj4gWzE0LDE1XSAqLw0KPiA+ICsj
ZGVmaW5lIE5GUF9GTE9XRVJfQ01TR19QT1JUX1ZOSUNfVFlQRSh4KSAgICAgICAoKCh4KSA+PiAx
MikgJiAweDMpDQo+IC8qIFsxMiwxM10gKi8NCj4gPiArI2RlZmluZSBORlBfRkxPV0VSX0NNU0df
UE9SVF9WTklDKHgpICAgICAgICAgICAgKCgoeCkgPj4gNikgJiAweDNmKSAgLyoNCj4gWzYsMTFd
ICovDQo+ID4gKyNkZWZpbmUgTkZQX0ZMT1dFUl9DTVNHX1BPUlRfUENJRV9RKHgpICAgICAgICAg
ICgoeCkgJiAweDNmKSAgICAgICAgIC8qDQo+IFswLDVdICovDQo+ID4gKyNkZWZpbmUgTkZQX0ZM
T1dFUl9DTVNHX1BPUlRfUEhZU19QT1JUX05VTSh4KSAgICgoeCkgJiAweGZmKQ0KPiAvKiBbMCw3
XSAqLw0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBjaGFyKg0KPiA+ICtuZnBfZmxvd2VyX2Nt
c2dfZ2V0X2RhdGEoc3RydWN0IHJ0ZV9tYnVmICptKSB7DQo+ID4gKwlyZXR1cm4gcnRlX3BrdG1i
dWZfbXRvZChtLCBjaGFyICopICsgNCArIDQgKw0KPiBORlBfRkxPV0VSX0NNU0dfSExFTjsgfQ0K
PiA+ICsNCj4gPiAraW50IG5mcF9mbG93ZXJfY21zZ19tYWNfcmVwcihzdHJ1Y3QgbmZwX2FwcF9m
bG93ZXIgKmFwcF9mbG93ZXIpOyBpbnQNCj4gPiArbmZwX2Zsb3dlcl9jbXNnX3JlcHJfcmVpZnko
c3RydWN0IG5mcF9hcHBfZmxvd2VyICphcHBfZmxvd2VyLA0KPiA+ICsJCXN0cnVjdCBuZnBfZmxv
d2VyX3JlcHJlc2VudG9yICpyZXByKTsgaW50DQo+ID4gK25mcF9mbG93ZXJfY21zZ19wb3J0X21v
ZChzdHJ1Y3QgbmZwX2FwcF9mbG93ZXIgKmFwcF9mbG93ZXIsDQo+ID4gKwkJdWludDMyX3QgcG9y
dF9pZCwgYm9vbCBjYXJyaWVyX29rKTsNCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBfTkZQX0NNU0df
SF8gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmZwL2Zsb3dlci9uZnBfZmxvd2Vy
X3JlcHJlc2VudG9yLmMNCj4gPiBiL2RyaXZlcnMvbmV0L25mcC9mbG93ZXIvbmZwX2Zsb3dlcl9y
ZXByZXNlbnRvci5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAw
Li45ZjIzYTIzDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L25mcC9m
bG93ZXIvbmZwX2Zsb3dlcl9yZXByZXNlbnRvci5jDQo+ID4gQEAgLTAsMCArMSw1MDggQEANCj4g
PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ICsgKiBDb3B5
cmlnaHQgKGMpIDIwMjIgQ29yaWdpbmUsIEluYy4NCj4gPiArICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8cnRlX2NvbW1vbi5oPg0KPiA+ICsj
aW5jbHVkZSA8ZXRoZGV2X3BjaS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIi4uL25mcF9jb21t
b24uaCINCj4gPiArI2luY2x1ZGUgIi4uL25mcF9sb2dzLmgiDQo+ID4gKyNpbmNsdWRlICIuLi9u
ZnBfY3RybC5oIg0KPiA+ICsjaW5jbHVkZSAiLi4vbmZwX3J4dHguaCINCj4gPiArI2luY2x1ZGUg
Ii4uL25mcGNvcmUvbmZwX21pcC5oIg0KPiA+ICsjaW5jbHVkZSAiLi4vbmZwY29yZS9uZnBfcnRz
eW0uaCINCj4gPiArI2luY2x1ZGUgIi4uL25mcGNvcmUvbmZwX25zcC5oIg0KPiA+ICsjaW5jbHVk
ZSAibmZwX2Zsb3dlci5oIg0KPiA+ICsjaW5jbHVkZSAibmZwX2Zsb3dlcl9yZXByZXNlbnRvci5o
Ig0KPiA+ICsjaW5jbHVkZSAibmZwX2Zsb3dlcl9jdHJsLmgiDQo+ID4gKyNpbmNsdWRlICJuZnBf
Zmxvd2VyX2Ntc2cuaCINCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiArbmZwX2Zsb3dlcl9y
ZXByX2xpbmtfdXBkYXRlKF9fcnRlX3VudXNlZCBzdHJ1Y3QgcnRlX2V0aF9kZXYgKmV0aGRldiwN
Cj4gPiArCQlfX3J0ZV91bnVzZWQgaW50IHdhaXRfdG9fY29tcGxldGUpDQo+ID4gK3sNCj4gDQo+
IFdoeSBpcyBkdW1teSBpbXBsZW1lbmF0aW9uIE9LPw0KPiANCj4gPiArCXJldHVybiAwOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK25mcF9mbG93ZXJfcmVwcl9kZXZfaW5m
b3NfZ2V0KF9fcnRlX3VudXNlZCBzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gPiArCQlzdHJ1
Y3QgcnRlX2V0aF9kZXZfaW5mbyAqZGV2X2luZm8pDQo+ID4gK3sNCj4gPiArCS8qIEhhcmRjb2Rl
ZCBwa3RsZW4gYW5kIHF1ZXVlcyBmb3Igbm93ICovDQo+ID4gKwlkZXZfaW5mby0+bWF4X3J4X3F1
ZXVlcyA9IDE7DQo+ID4gKwlkZXZfaW5mby0+bWF4X3R4X3F1ZXVlcyA9IDE7DQo+ID4gKwlkZXZf
aW5mby0+bWluX3J4X2J1ZnNpemUgPSBSVEVfRVRIRVJfTUlOX01UVTsNCj4gPiArCWRldl9pbmZv
LT5tYXhfcnhfcGt0bGVuID0gOTAwMDsNCj4gPiArDQo+ID4gKwlkZXZfaW5mby0+cnhfb2ZmbG9h
ZF9jYXBhID0gUlRFX0VUSF9SWF9PRkZMT0FEX1ZMQU5fU1RSSVA7DQo+ID4gKwlkZXZfaW5mby0+
cnhfb2ZmbG9hZF9jYXBhIHw9IFJURV9FVEhfUlhfT0ZGTE9BRF9JUFY0X0NLU1VNDQo+IHwNCj4g
PiArCQkJUlRFX0VUSF9SWF9PRkZMT0FEX1VEUF9DS1NVTSB8DQo+ID4gKwkJCVJURV9FVEhfUlhf
T0ZGTE9BRF9UQ1BfQ0tTVU07DQo+ID4gKw0KPiA+ICsJZGV2X2luZm8tPnR4X29mZmxvYWRfY2Fw
YSA9IFJURV9FVEhfVFhfT0ZGTE9BRF9WTEFOX0lOU0VSVDsNCj4gPiArCWRldl9pbmZvLT50eF9v
ZmZsb2FkX2NhcGEgfD0gUlRFX0VUSF9UWF9PRkZMT0FEX0lQVjRfQ0tTVU0NCj4gfA0KPiA+ICsJ
CQlSVEVfRVRIX1RYX09GRkxPQURfVURQX0NLU1VNIHwNCj4gPiArCQkJUlRFX0VUSF9UWF9PRkZM
T0FEX1RDUF9DS1NVTTsNCj4gPiArCWRldl9pbmZvLT50eF9vZmZsb2FkX2NhcGEgfD0gUlRFX0VU
SF9UWF9PRkZMT0FEX1RDUF9UU087DQo+ID4gKwlkZXZfaW5mby0+dHhfb2ZmbG9hZF9jYXBhIHw9
IFJURV9FVEhfVFhfT0ZGTE9BRF9NVUxUSV9TRUdTOw0KPiA+ICsNCj4gPiArCWRldl9pbmZvLT5t
YXhfbWFjX2FkZHJzID0gMTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN
Cj4gPiArc3RhdGljIGludA0KPiA+ICtuZnBfZmxvd2VyX3JlcHJfZGV2X2NvbmZpZ3VyZShfX3J0
ZV91bnVzZWQgc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpDQo+IHsNCj4gPiArCXJldHVybiAwOw0K
PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK25mcF9mbG93ZXJfcmVwcl9kZXZf
c3RhcnQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpIHsNCj4gPiArCXN0cnVjdCBuZnBfYXBwX2Zs
b3dlciAqYXBwX2Zsb3dlcjsNCj4gPiArCXN0cnVjdCBuZnBfZmxvd2VyX3JlcHJlc2VudG9yICpy
ZXByOw0KPiA+ICsNCj4gPiArCXJlcHIgPSAoc3RydWN0IG5mcF9mbG93ZXJfcmVwcmVzZW50b3Ig
KilkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiA+ICsJYXBwX2Zsb3dlciA9IHJlcHItPmFwcF9m
bG93ZXI7DQo+ID4gKw0KPiA+ICsJaWYgKHJlcHItPnJlcHJfdHlwZSA9PSBORlBfUkVQUl9UWVBF
X1BIWVNfUE9SVCkNCj4gPiArCQluZnBfZXRoX3NldF9jb25maWd1cmVkKGFwcF9mbG93ZXItPnBm
X2h3LT5wZl9kZXYtPmNwcCwNCj4gPiArCQkJCXJlcHItPm5mcF9pZHgsIDEpOw0KPiA+ICsNCj4g
PiArCW5mcF9mbG93ZXJfY21zZ19wb3J0X21vZChhcHBfZmxvd2VyLCByZXByLT5wb3J0X2lkLCB0
cnVlKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj
IGludA0KPiA+ICtuZnBfZmxvd2VyX3JlcHJfZGV2X3N0b3Aoc3RydWN0IHJ0ZV9ldGhfZGV2ICpk
ZXYpIHsNCj4gPiArCXN0cnVjdCBuZnBfYXBwX2Zsb3dlciAqYXBwX2Zsb3dlcjsNCj4gPiArCXN0
cnVjdCBuZnBfZmxvd2VyX3JlcHJlc2VudG9yICpyZXByOw0KPiA+ICsNCj4gPiArCXJlcHIgPSAo
c3RydWN0IG5mcF9mbG93ZXJfcmVwcmVzZW50b3IgKilkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0K
PiA+ICsJYXBwX2Zsb3dlciA9IHJlcHItPmFwcF9mbG93ZXI7DQo+ID4gKw0KPiA+ICsJbmZwX2Zs
b3dlcl9jbXNnX3BvcnRfbW9kKGFwcF9mbG93ZXIsIHJlcHItPnBvcnRfaWQsIGZhbHNlKTsNCj4g
PiArDQo+ID4gKwlpZiAocmVwci0+cmVwcl90eXBlID09IE5GUF9SRVBSX1RZUEVfUEhZU19QT1JU
KQ0KPiA+ICsJCW5mcF9ldGhfc2V0X2NvbmZpZ3VyZWQoYXBwX2Zsb3dlci0+cGZfaHctPnBmX2Rl
di0+Y3BwLA0KPiA+ICsJCQkJcmVwci0+bmZwX2lkeCwgMCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJu
IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiArbmZwX2Zsb3dlcl9yZXBy
X3J4X3F1ZXVlX3NldHVwKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiA+ICsJCXVpbnQxNl90
IHJ4X3F1ZXVlX2lkLA0KPiA+ICsJCV9fcnRlX3VudXNlZCB1aW50MTZfdCBuYl9yeF9kZXNjLA0K
PiA+ICsJCXVuc2lnbmVkIGludCBzb2NrZXRfaWQsDQo+ID4gKwkJX19ydGVfdW51c2VkIGNvbnN0
IHN0cnVjdCBydGVfZXRoX3J4Y29uZiAqcnhfY29uZiwNCj4gPiArCQlfX3J0ZV91bnVzZWQgc3Ry
dWN0IHJ0ZV9tZW1wb29sICptYl9wb29sKSB7DQo+ID4gKwlzdHJ1Y3QgbmZwX25ldF9yeHEgKnJ4
cTsNCj4gPiArCXN0cnVjdCBuZnBfbmV0X2h3ICpwZl9odzsNCj4gPiArCXN0cnVjdCBuZnBfZmxv
d2VyX3JlcHJlc2VudG9yICpyZXByOw0KPiA+ICsNCj4gPiArCXJlcHIgPSAoc3RydWN0IG5mcF9m
bG93ZXJfcmVwcmVzZW50b3IgKilkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiA+ICsJcGZfaHcg
PSByZXByLT5hcHBfZmxvd2VyLT5wZl9odzsNCj4gPiArDQo+ID4gKwkvKiBBbGxvY2F0aW5nIHJ4
IHF1ZXVlIGRhdGEgc3RydWN0dXJlICovDQo+ID4gKwlyeHEgPSBydGVfem1hbGxvY19zb2NrZXQo
ImV0aGRldiBSWCBxdWV1ZSIsIHNpemVvZihzdHJ1Y3QNCj4gbmZwX25ldF9yeHEpLA0KPiA+ICsJ
CQlSVEVfQ0FDSEVfTElORV9TSVpFLCBzb2NrZXRfaWQpOw0KPiA+ICsJaWYgKHJ4cSA9PSBOVUxM
KQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCXJ4cS0+aHcgPSBwZl9odzsN
Cj4gPiArCXJ4cS0+cWlkeCA9IHJ4X3F1ZXVlX2lkOw0KPiA+ICsJcnhxLT5wb3J0X2lkID0gZGV2
LT5kYXRhLT5wb3J0X2lkOw0KPiA+ICsJZGV2LT5kYXRhLT5yeF9xdWV1ZXNbcnhfcXVldWVfaWRd
ID0gcnhxOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0
aWMgaW50DQo+ID4gK25mcF9mbG93ZXJfcmVwcl90eF9xdWV1ZV9zZXR1cChzdHJ1Y3QgcnRlX2V0
aF9kZXYgKmRldiwNCj4gPiArCQl1aW50MTZfdCB0eF9xdWV1ZV9pZCwNCj4gPiArCQlfX3J0ZV91
bnVzZWQgdWludDE2X3QgbmJfdHhfZGVzYywNCj4gPiArCQl1bnNpZ25lZCBpbnQgc29ja2V0X2lk
LA0KPiA+ICsJCV9fcnRlX3VudXNlZCBjb25zdCBzdHJ1Y3QgcnRlX2V0aF90eGNvbmYgKnR4X2Nv
bmYpIHsNCj4gPiArCXN0cnVjdCBuZnBfbmV0X3R4cSAqdHhxOw0KPiA+ICsJc3RydWN0IG5mcF9u
ZXRfaHcgKnBmX2h3Ow0KPiA+ICsJc3RydWN0IG5mcF9mbG93ZXJfcmVwcmVzZW50b3IgKnJlcHI7
DQo+ID4gKw0KPiA+ICsJcmVwciA9IChzdHJ1Y3QgbmZwX2Zsb3dlcl9yZXByZXNlbnRvciAqKWRl
di0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ID4gKwlwZl9odyA9IHJlcHItPmFwcF9mbG93ZXItPnBm
X2h3Ow0KPiA+ICsNCj4gPiArCS8qIEFsbG9jYXRpbmcgdHggcXVldWUgZGF0YSBzdHJ1Y3R1cmUg
Ki8NCj4gPiArCXR4cSA9IHJ0ZV96bWFsbG9jX3NvY2tldCgiZXRoZGV2IFRYIHF1ZXVlIiwgc2l6
ZW9mKHN0cnVjdA0KPiBuZnBfbmV0X3R4cSksDQo+ID4gKwkJCVJURV9DQUNIRV9MSU5FX1NJWkUs
IHNvY2tldF9pZCk7DQo+ID4gKwlpZiAodHhxID09IE5VTEwpDQo+ID4gKwkJcmV0dXJuIC1FTk9N
RU07DQo+ID4gKw0KPiA+ICsJdHhxLT5odyA9IHBmX2h3Ow0KPiA+ICsJdHhxLT5xaWR4ID0gdHhf
cXVldWVfaWQ7DQo+ID4gKwl0eHEtPnBvcnRfaWQgPSBkZXYtPmRhdGEtPnBvcnRfaWQ7DQo+ID4g
KwlkZXYtPmRhdGEtPnR4X3F1ZXVlc1t0eF9xdWV1ZV9pZF0gPSB0eHE7DQo+ID4gKw0KPiA+ICsJ
cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiArbmZwX2Zsb3dl
cl9yZXByX3N0YXRzX2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmV0aGRldiwNCj4gPiArCQlzdHJ1
Y3QgcnRlX2V0aF9zdGF0cyAqc3RhdHMpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBuZnBfZmxvd2Vy
X3JlcHJlc2VudG9yICpyZXByOw0KPiA+ICsNCj4gPiArCXJlcHIgPSAoc3RydWN0IG5mcF9mbG93
ZXJfcmVwcmVzZW50b3IgKilldGhkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiA+ICsJcnRlX21l
bWNweShzdGF0cywgJnJlcHItPnJlcHJfc3RhdHMsIHNpemVvZihzdHJ1Y3QgcnRlX2V0aF9zdGF0
cykpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg
aW50DQo+ID4gK25mcF9mbG93ZXJfcmVwcl9zdGF0c19yZXNldChfX3J0ZV91bnVzZWQgc3RydWN0
IHJ0ZV9ldGhfZGV2ICpldGhkZXYpDQo+ID4gK3sNCj4gDQo+IFdoeSBpcyBpdCBPSyB0byBoYXZl
IGR1bW15IGltcGxlbWVuYXRpb24gb2YgdGhlIHJlc2V0Pw0KPiANCj4gPiArCXJldHVybiAwOw0K
PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK25mcF9mbG93ZXJfcmVwcl9wcm9t
aXNjdW91c19lbmFibGUoX19ydGVfdW51c2VkIHN0cnVjdCBydGVfZXRoX2Rldg0KPiA+ICsqZXRo
ZGV2KSB7DQo+IA0KPiBXaHkgaXMgaXQgT0sgdG8gaGF2ZSBkdW1teSBpbXBsZW1lbnRhdGlvbj8g
U2FtZSBxdWVzdGlvbiBmb3IgYWxsIGR1bW15DQo+IGNhbGxiYWNrcyBiZWxvdy4NCj4gDQo+ID4g
KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtuZnBfZmxv
d2VyX3JlcHJfcHJvbWlzY3VvdXNfZGlzYWJsZShfX3J0ZV91bnVzZWQgc3RydWN0DQo+IHJ0ZV9l
dGhfZGV2DQo+ID4gKypldGhkZXYpIHsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K
PiA+ICtzdGF0aWMgdm9pZA0KPiA+ICtuZnBfZmxvd2VyX3JlcHJfbWFjX2FkZHJfcmVtb3ZlKF9f
cnRlX3VudXNlZCBzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gKmV0aGRldiwNCj4gPiArCQlfX3J0ZV91
bnVzZWQgdWludDMyX3QgaW5kZXgpDQo+ID4gK3sNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj
IGludA0KPiA+ICtuZnBfZmxvd2VyX3JlcHJfbWFjX2FkZHJfc2V0KF9fcnRlX3VudXNlZCBzdHJ1
Y3QgcnRlX2V0aF9kZXYNCj4gKmV0aGRldiwNCj4gPiArCQlfX3J0ZV91bnVzZWQgc3RydWN0IHJ0
ZV9ldGhlcl9hZGRyICptYWNfYWRkcikgew0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr
DQo+ID4gK3N0YXRpYyB1aW50MTZfdA0KPiA+ICtuZnBfZmxvd2VyX3JlcHJfcnhfYnVyc3Qodm9p
ZCAqcnhfcXVldWUsDQo+ID4gKwkJc3RydWN0IHJ0ZV9tYnVmICoqcnhfcGt0cywNCj4gPiArCQl1
aW50MTZfdCBuYl9wa3RzKQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBpbnQgYXZhaWxhYmxlID0g
MDsNCj4gPiArCXVuc2lnbmVkIGludCB0b3RhbF9kZXF1ZXVlOw0KPiA+ICsJc3RydWN0IG5mcF9u
ZXRfcnhxICpyeHE7DQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldjsNCj4gPiArCXN0cnVj
dCBuZnBfZmxvd2VyX3JlcHJlc2VudG9yICpyZXByOw0KPiA+ICsNCj4gPiArCXJ4cSA9IHJ4X3F1
ZXVlOw0KPiA+ICsJaWYgKHVubGlrZWx5KHJ4cSA9PSBOVUxMKSkgew0KPiA+ICsJCVBNRF9SWF9M
T0coRVJSLCAiUlggQmFkIHF1ZXVlIik7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4g
Kw0KPiA+ICsJZGV2ID0gJnJ0ZV9ldGhfZGV2aWNlc1tyeHEtPnBvcnRfaWRdOw0KPiA+ICsJcmVw
ciA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ID4gKwlpZiAodW5saWtlbHkocmVwci0+cmlu
ZyA9PSBOVUxMKSkgew0KPiA+ICsJCVBNRF9SWF9MT0coRVJSLCAicmVwcmVzZW50b3IgJXMgaGFz
IG5vIHJpbmcgY29uZmlndXJlZCEiLA0KPiA+ICsJCQkJcmVwci0+bmFtZSk7DQo+ID4gKwkJcmV0
dXJuIDA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdG90YWxfZGVxdWV1ZSA9IHJ0ZV9yaW5nX2Rl
cXVldWVfYnVyc3QocmVwci0+cmluZywgKHZvaWQNCj4gKilyeF9wa3RzLA0KPiA+ICsJCQluYl9w
a3RzLCAmYXZhaWxhYmxlKTsNCj4gPiArCWlmICh0b3RhbF9kZXF1ZXVlKSB7DQo+IA0KPiBDb21w
YXJlIHZzIDANCj4gDQo+ID4gKwkJUE1EX1JYX0xPRyhERUJVRywgIlJlcHJlc2VudG9yIFJ4IGJ1
cnN0IGZvciAlcywgcG9ydF9pZDoNCj4gMHgleCwgIg0KPiA+ICsJCQkJInJlY2VpdmVkOiAldSwg
YXZhaWxhYmxlOiAldSIsIHJlcHItPm5hbWUsDQo+ID4gKwkJCQlyZXByLT5wb3J0X2lkLCB0b3Rh
bF9kZXF1ZXVlLCBhdmFpbGFibGUpOw0KPiA+ICsNCj4gPiArCQlyZXByLT5yZXByX3N0YXRzLmlw
YWNrZXRzICs9IHRvdGFsX2RlcXVldWU7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRv
dGFsX2RlcXVldWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1aW50MTZfdA0KPiA+ICtu
ZnBfZmxvd2VyX3JlcHJfdHhfYnVyc3Qodm9pZCAqdHhfcXVldWUsDQo+ID4gKwkJc3RydWN0IHJ0
ZV9tYnVmICoqdHhfcGt0cywNCj4gPiArCQl1aW50MTZfdCBuYl9wa3RzKQ0KPiA+ICt7DQo+ID4g
Kwl1aW50MTZfdCBpOw0KPiA+ICsJdWludDE2X3Qgc2VudDsNCj4gPiArCWNoYXIgKm1ldGFfb2Zm
c2V0Ow0KPiA+ICsJc3RydWN0IG5mcF9uZXRfdHhxICp0eHE7DQo+ID4gKwlzdHJ1Y3QgbmZwX25l
dF9odyAqcGZfaHc7DQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldjsNCj4gPiArCXN0cnVj
dCBydGVfZXRoX2RldiAqcmVwcl9kZXY7DQo+ID4gKwlzdHJ1Y3QgbmZwX2Zsb3dlcl9yZXByZXNl
bnRvciAqcmVwcjsNCj4gPiArDQo+ID4gKwl0eHEgPSB0eF9xdWV1ZTsNCj4gPiArCWlmICh1bmxp
a2VseSh0eHEgPT0gTlVMTCkpIHsNCj4gPiArCQlQTURfUlhfTE9HKEVSUiwgIlRYIEJhZCBxdWV1
ZSIpOw0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFRoaXMgcG9p
bnRzIHRvIHRoZSBQRiB2TklDIHRoYXQgb3ducyB0aGlzIHJlcHJlc2VudG9yICovDQo+ID4gKwlw
Zl9odyA9IHR4cS0+aHc7DQo+ID4gKwlkZXYgPSBwZl9ody0+ZXRoX2RldjsNCj4gPiArDQo+ID4g
KwkvKiBHcmFiIGEgaGFuZGxlIHRvIHRoZSByZXByZXNlbnRvciBzdHJ1Y3QgKi8NCj4gPiArCXJl
cHJfZGV2ID0gJnJ0ZV9ldGhfZGV2aWNlc1t0eHEtPnBvcnRfaWRdOw0KPiA+ICsJcmVwciA9IHJl
cHJfZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwg
bmJfcGt0czsgaSsrKSB7DQo+ID4gKwkJbWV0YV9vZmZzZXQgPSBydGVfcGt0bWJ1Zl9wcmVwZW5k
KHR4X3BrdHNbaV0sDQo+IEZMT1dFUl9QS1RfREFUQV9PRkZTRVQpOw0KPiA+ICsJCSoodWludDMy
X3QgKiltZXRhX29mZnNldCA9DQo+IHJ0ZV9jcHVfdG9fYmVfMzIoTkZQX05FVF9NRVRBX1BPUlRJ
RCk7DQo+ID4gKwkJbWV0YV9vZmZzZXQgKz0gNDsNCj4gPiArCQkqKHVpbnQzMl90ICopbWV0YV9v
ZmZzZXQgPSBydGVfY3B1X3RvX2JlXzMyKHJlcHItDQo+ID5wb3J0X2lkKTsNCj4gPiArCX0NCj4g
PiArDQo+ID4gKwkvKiBPbmx5IHVzaW5nIFR4IHF1ZXVlIDAgZm9yIG5vdy4gKi8NCj4gPiArCXNl
bnQgPSBydGVfZXRoX3R4X2J1cnN0KGRldi0+ZGF0YS0+cG9ydF9pZCwgMCwgdHhfcGt0cywgbmJf
cGt0cyk7DQo+ID4gKwlpZiAoc2VudCkgew0KPiANCj4gQ29tcGFyZSB2cyAwDQo+IA0KPiA+ICsJ
CVBNRF9UWF9MT0coREVCVUcsICJSZXByZXNlbnRvciBUeCBidXJzdCBmb3IgJXMsIHBvcnRfaWQ6
DQo+IDB4JXggIg0KPiA+ICsJCQkidHJhbnNtaXR0ZWQ6ICV1XG4iLCByZXByLT5uYW1lLCByZXBy
LT5wb3J0X2lkLA0KPiBzZW50KTsNCj4gPiArCQlyZXByLT5yZXByX3N0YXRzLm9wYWNrZXRzICs9
IHNlbnQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHNlbnQ7DQo+ID4gK30NCj4gPiAr
DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRoX2Rldl9vcHMgbmZwX2Zsb3dlcl9yZXByX2Rl
dl9vcHMgPSB7DQo+ID4gKwkuZGV2X2luZm9zX2dldCAgICAgICAgPSBuZnBfZmxvd2VyX3JlcHJf
ZGV2X2luZm9zX2dldCwNCj4gPiArDQo+ID4gKwkuZGV2X3N0YXJ0ICAgICAgICAgICAgPSBuZnBf
Zmxvd2VyX3JlcHJfZGV2X3N0YXJ0LA0KPiA+ICsJLmRldl9jb25maWd1cmUgICAgICAgID0gbmZw
X2Zsb3dlcl9yZXByX2Rldl9jb25maWd1cmUsDQo+ID4gKwkuZGV2X3N0b3AgICAgICAgICAgICAg
PSBuZnBfZmxvd2VyX3JlcHJfZGV2X3N0b3AsDQo+ID4gKw0KPiA+ICsJLnJ4X3F1ZXVlX3NldHVw
ICAgICAgID0gbmZwX2Zsb3dlcl9yZXByX3J4X3F1ZXVlX3NldHVwLA0KPiA+ICsJLnR4X3F1ZXVl
X3NldHVwICAgICAgID0gbmZwX2Zsb3dlcl9yZXByX3R4X3F1ZXVlX3NldHVwLA0KPiA+ICsNCj4g
PiArCS5saW5rX3VwZGF0ZSAgICAgICAgICA9IG5mcF9mbG93ZXJfcmVwcl9saW5rX3VwZGF0ZSwN
Cj4gPiArDQo+ID4gKwkuc3RhdHNfZ2V0ICAgICAgICAgICAgPSBuZnBfZmxvd2VyX3JlcHJfc3Rh
dHNfZ2V0LA0KPiA+ICsJLnN0YXRzX3Jlc2V0ICAgICAgICAgID0gbmZwX2Zsb3dlcl9yZXByX3N0
YXRzX3Jlc2V0LA0KPiA+ICsNCj4gPiArCS5wcm9taXNjdW91c19lbmFibGUgICA9IG5mcF9mbG93
ZXJfcmVwcl9wcm9taXNjdW91c19lbmFibGUsDQo+ID4gKwkucHJvbWlzY3VvdXNfZGlzYWJsZSAg
PSBuZnBfZmxvd2VyX3JlcHJfcHJvbWlzY3VvdXNfZGlzYWJsZSwNCj4gPiArDQo+ID4gKwkubWFj
X2FkZHJfcmVtb3ZlICAgICAgPSBuZnBfZmxvd2VyX3JlcHJfbWFjX2FkZHJfcmVtb3ZlLA0KPiA+
ICsJLm1hY19hZGRyX3NldCAgICAgICAgID0gbmZwX2Zsb3dlcl9yZXByX21hY19hZGRyX3NldCwN
Cj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB1aW50MzJfdA0KPiA+ICtuZnBfZmxvd2VyX2dl
dF9waHlzX3BvcnRfaWQodWludDhfdCBwb3J0KSB7DQo+ID4gKwlyZXR1cm4gKE5GUF9GTE9XRVJf
Q01TR19QT1JUX1RZUEVfUEhZU19QT1JUIDw8IDI4KSB8IHBvcnQ7IH0NCj4gPiArDQo+ID4gK3N0
YXRpYyB1aW50MzJfdA0KPiA+ICtuZnBfZ2V0X3BjaWVfcG9ydF9pZChzdHJ1Y3QgbmZwX2NwcCAq
Y3BwLA0KPiA+ICsJCWludCB0eXBlLA0KPiA+ICsJCXVpbnQ4X3Qgdm5pYywNCj4gPiArCQl1aW50
OF90IHF1ZXVlKQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90IG5mcF9wY2llOw0KPiA+ICsJdWludDMy
X3QgcG9ydF9pZDsNCj4gPiArDQo+ID4gKwluZnBfcGNpZSA9IE5GUF9DUFBfSU5URVJGQUNFX1VO
SVRfb2YobmZwX2NwcF9pbnRlcmZhY2UoY3BwKSk7DQo+ID4gKwlwb3J0X2lkID0gKChuZnBfcGNp
ZSAmIDB4MykgPDwgMTQpIHwNCj4gPiArCQkgICgodHlwZSAmIDB4MykgPDwgMTIpIHwNCj4gPiAr
CQkgICgodm5pYyAmIDB4M2YpIDw8IDYpIHwNCj4gPiArCQkgIChxdWV1ZSAmIDB4M2YpIHwNCj4g
PiArCQkgICgoTkZQX0ZMT1dFUl9DTVNHX1BPUlRfVFlQRV9QQ0lFX1BPUlQgJiAweGYpIDw8DQo+
IDI4KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcG9ydF9pZDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr
c3RhdGljIGludA0KPiA+ICtuZnBfZmxvd2VyX3JlcHJfaW5pdChzdHJ1Y3QgcnRlX2V0aF9kZXYg
KmV0aF9kZXYsDQo+ID4gKwkJdm9pZCAqaW5pdF9wYXJhbXMpDQo+ID4gK3sNCj4gPiArCWludCBy
ZXQ7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbnVtYV9ub2RlOw0KPiA+ICsJY2hhciByaW5nX25hbWVb
UlRFX0VUSF9OQU1FX01BWF9MRU5dOw0KPiA+ICsJc3RydWN0IG5mcF9hcHBfZmxvd2VyICphcHBf
Zmxvd2VyOw0KPiA+ICsJc3RydWN0IG5mcF9mbG93ZXJfcmVwcmVzZW50b3IgKnJlcHI7DQo+ID4g
KwlzdHJ1Y3QgbmZwX2Zsb3dlcl9yZXByZXNlbnRvciAqaW5pdF9yZXByX2RhdGE7DQo+ID4gKw0K
PiA+ICsJLyogQ2FzdCB0aGUgaW5wdXQgcmVwcmVzZW50b3IgZGF0YSB0byB0aGUgY29ycmVjdCBz
dHJ1Y3QgaGVyZSAqLw0KPiA+ICsJaW5pdF9yZXByX2RhdGEgPSAoc3RydWN0IG5mcF9mbG93ZXJf
cmVwcmVzZW50b3IgKilpbml0X3BhcmFtczsNCj4gPiArDQo+ID4gKwlhcHBfZmxvd2VyID0gaW5p
dF9yZXByX2RhdGEtPmFwcF9mbG93ZXI7DQo+ID4gKw0KPiA+ICsJLyogTWVtb3J5IGhhcyBiZWVu
IGFsbG9jYXRlZCBpbiB0aGUgZXRoX2Rldl9jcmVhdGUoKSBmdW5jdGlvbiAqLw0KPiA+ICsJcmVw
ciA9IGV0aF9kZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkg
KiBXZSBuZWVkIG11bHRpcHJvZHVjZSByaW5ncyBhcyB3ZSBjYW4gaGF2ZSBtdWx0aXBsZSBQRiBw
b3J0cy4NCj4gPiArCSAqIE9uIHRoZSBvdGhlciBoYW5kLCB3ZSBuZWVkIHNpbmdsZSBjb25zdW1l
ciByaW5ncywgYXMganVzdCBvbmUNCj4gPiArCSAqIHJlcHJlc2VudG9yIFBNRCB3aWxsIHRyeSB0
byByZWFkIGZyb20gdGhlIHJpbmcuDQo+ID4gKwkgKi8NCj4gPiArCXNucHJpbnRmKHJpbmdfbmFt
ZSwgc2l6ZW9mKHJpbmdfbmFtZSksICIlc18lcyIsDQo+ID4gKwkJaW5pdF9yZXByX2RhdGEtPm5h
bWUsICJyaW5nIik7DQo+ID4gKwludW1hX25vZGUgPSBydGVfc29ja2V0X2lkKCk7DQo+ID4gKwly
ZXByLT5yaW5nID0gcnRlX3JpbmdfY3JlYXRlKHJpbmdfbmFtZSwgMjU2LCBudW1hX25vZGUsDQo+
IFJJTkdfRl9TQ19ERVEpOw0KPiA+ICsJaWYgKHJlcHItPnJpbmcgPT0gTlVMTCkgew0KPiA+ICsJ
CVBNRF9JTklUX0xPRyhFUlIsICJydGVfcmluZ19jcmVhdGUgZmFpbGVkIGZvciAlc1xuIiwNCj4g
cmluZ19uYW1lKTsNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArCX0NCj4gPiArDQo+ID4g
KwkvKiBDb3B5IGRhdGEgaGVyZSBmcm9tIHRoZSBpbnB1dCByZXByZXNlbnRvciB0ZW1wbGF0ZSov
DQo+ID4gKwlyZXByLT52Zl9pZCAgICAgICAgICAgID0gaW5pdF9yZXByX2RhdGEtPnZmX2lkOw0K
PiA+ICsJcmVwci0+c3dpdGNoX2RvbWFpbl9pZCA9IGluaXRfcmVwcl9kYXRhLT5zd2l0Y2hfZG9t
YWluX2lkOw0KPiA+ICsJcmVwci0+cG9ydF9pZCAgICAgICAgICA9IGluaXRfcmVwcl9kYXRhLT5w
b3J0X2lkOw0KPiA+ICsJcmVwci0+bmZwX2lkeCAgICAgICAgICA9IGluaXRfcmVwcl9kYXRhLT5u
ZnBfaWR4Ow0KPiA+ICsJcmVwci0+cmVwcl90eXBlICAgICAgICA9IGluaXRfcmVwcl9kYXRhLT5y
ZXByX3R5cGU7DQo+ID4gKwlyZXByLT5hcHBfZmxvd2VyICAgICAgID0gaW5pdF9yZXByX2RhdGEt
PmFwcF9mbG93ZXI7DQo+ID4gKw0KPiA+ICsJc25wcmludGYocmVwci0+bmFtZSwgc2l6ZW9mKHJl
cHItPm5hbWUpLCAiJXMiLA0KPiA+ICtpbml0X3JlcHJfZGF0YS0+bmFtZSk7DQo+ID4gKw0KPiA+
ICsJZXRoX2Rldi0+ZGV2X29wcyA9ICZuZnBfZmxvd2VyX3JlcHJfZGV2X29wczsNCj4gPiArDQo+
ID4gKwlldGhfZGV2LT5yeF9wa3RfYnVyc3QgPSBuZnBfZmxvd2VyX3JlcHJfcnhfYnVyc3Q7DQo+
ID4gKwlldGhfZGV2LT50eF9wa3RfYnVyc3QgPSBuZnBfZmxvd2VyX3JlcHJfdHhfYnVyc3Q7DQo+
ID4gKw0KPiA+ICsJZXRoX2Rldi0+ZGF0YS0+ZGV2X2ZsYWdzIHw9IFJURV9FVEhfREVWX1JFUFJF
U0VOVE9SOw0KPiA+ICsNCj4gPiArCWlmIChyZXByLT5yZXByX3R5cGUgPT0gTkZQX1JFUFJfVFlQ
RV9QSFlTX1BPUlQpDQo+ID4gKwkJZXRoX2Rldi0+ZGF0YS0+cmVwcmVzZW50b3JfaWQgPSByZXBy
LT52Zl9pZDsNCj4gPiArCWVsc2UNCj4gPiArCQlldGhfZGV2LT5kYXRhLT5yZXByZXNlbnRvcl9p
ZCA9IHJlcHItPnZmX2lkICsNCj4gPiArCQkJCWFwcF9mbG93ZXItPm51bV9waHlwb3J0X3JlcHJz
Ow0KPiA+ICsNCj4gPiArCS8qIFRoaXMgYmFja2VyIHBvcnQgaXMgdGhhdCBvZiB0aGUgZXRoX2Rl
dmljZSBjcmVhdGVkIGZvciB0aGUgUEYgdk5JQw0KPiAqLw0KPiA+ICsJZXRoX2Rldi0+ZGF0YS0+
YmFja2VyX3BvcnRfaWQgPQ0KPiA+ICthcHBfZmxvd2VyLT5wZl9ody0+ZXRoX2Rldi0+ZGF0YS0+
cG9ydF9pZDsNCj4gPiArDQo+ID4gKwkvKiBPbmx5IHNpbmdsZSBxdWV1ZXMgZm9yIHJlcHJlc2Vu
dG9yIGRldmljZXMgKi8NCj4gPiArCWV0aF9kZXYtPmRhdGEtPm5iX3J4X3F1ZXVlcyA9IDE7DQo+
ID4gKwlldGhfZGV2LT5kYXRhLT5uYl90eF9xdWV1ZXMgPSAxOw0KPiA+ICsNCj4gPiArCS8qIEFs
bG9jYXRpbmcgbWVtb3J5IGZvciBtYWMgYWRkciAqLw0KPiA+ICsJZXRoX2Rldi0+ZGF0YS0+bWFj
X2FkZHJzID0gcnRlX3ptYWxsb2MoIm1hY19hZGRyIiwNCj4gPiArCQlSVEVfRVRIRVJfQUREUl9M
RU4sIDApOw0KPiA+ICsJaWYgKGV0aF9kZXYtPmRhdGEtPm1hY19hZGRycyA9PSBOVUxMKSB7DQo+
ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJl
cHINCj4gTUFDIik7DQo+ID4gKwkJcmV0ID0gLUVOT01FTTsNCj4gPiArCQlnb3RvIHJpbmdfY2xl
YW51cDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlydGVfZXRoZXJfYWRkcl9jb3B5KCZpbml0X3Jl
cHJfZGF0YS0+bWFjX2FkZHIsICZyZXByLQ0KPiA+bWFjX2FkZHIpOw0KPiA+ICsJcnRlX2V0aGVy
X2FkZHJfY29weSgmaW5pdF9yZXByX2RhdGEtPm1hY19hZGRyLA0KPiA+ICtldGhfZGV2LT5kYXRh
LT5tYWNfYWRkcnMpOw0KPiA+ICsNCj4gPiArCS8qIFNlbmQgcmVpZnkgbWVzc2FnZSB0byBoYXJk
d2FyZSB0byBpbmZvcm0gaXQgYWJvdXQgdGhlIG5ldyByZXByDQo+ICovDQo+ID4gKwlyZXQgPSBu
ZnBfZmxvd2VyX2Ntc2dfcmVwcl9yZWlmeShhcHBfZmxvd2VyLCByZXByKTsNCj4gPiArCWlmIChy
ZXQpIHsNCj4gDQo+IENvbXBhcmUgdnMgMA0KPiANCj4gPiArCQlQTURfSU5JVF9MT0coV0FSTklO
RywgIkZhaWxlZCB0byBzZW5kIHJlcHIgcmVpZnkNCj4gbWVzc2FnZSIpOw0KPiA+ICsJCWdvdG8g
bWFjX2NsZWFudXA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogQWRkIHJlcHIgdG8gY29ycmVj
dCBhcnJheSAqLw0KPiA+ICsJaWYgKHJlcHItPnJlcHJfdHlwZSA9PSBORlBfUkVQUl9UWVBFX1BI
WVNfUE9SVCkNCj4gPiArCQlhcHBfZmxvd2VyLT5waHlfcmVwcnNbcmVwci0+bmZwX2lkeF0gPSBy
ZXByOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCWFwcF9mbG93ZXItPnZmX3JlcHJzW3JlcHItPnZmX2lk
XSA9IHJlcHI7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICttYWNfY2xlYW51
cDoNCj4gPiArCXJ0ZV9mcmVlKGV0aF9kZXYtPmRhdGEtPm1hY19hZGRycyk7DQo+ID4gK3Jpbmdf
Y2xlYW51cDoNCj4gPiArCXJ0ZV9yaW5nX2ZyZWUocmVwci0+cmluZyk7DQo+ID4gKw0KPiA+ICsJ
cmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50DQo+ID4gK25mcF9mbG93ZXJfcmVw
cl9hbGxvYyhzdHJ1Y3QgbmZwX2FwcF9mbG93ZXIgKmFwcF9mbG93ZXIpIHsNCj4gPiArCWludCBp
Ow0KPiA+ICsJaW50IHJldDsNCj4gPiArCXN0cnVjdCBydGVfZXRoX2RldiAqZXRoX2RldjsNCj4g
PiArCXN0cnVjdCBuZnBfZXRoX3RhYmxlICpuZnBfZXRoX3RhYmxlOw0KPiA+ICsJc3RydWN0IG5m
cF9ldGhfdGFibGVfcG9ydCAqZXRoX3BvcnQ7DQo+ID4gKwlzdHJ1Y3QgbmZwX2Zsb3dlcl9yZXBy
ZXNlbnRvciBmbG93ZXJfcmVwciA9IHsNCj4gPiArCQkuc3dpdGNoX2RvbWFpbl9pZCA9IGFwcF9m
bG93ZXItPnN3aXRjaF9kb21haW5faWQsDQo+ID4gKwkJLmFwcF9mbG93ZXIgICAgICAgPSBhcHBf
Zmxvd2VyLA0KPiA+ICsJfTsNCj4gPiArDQo+ID4gKwluZnBfZXRoX3RhYmxlID0gYXBwX2Zsb3dl
ci0+bmZwX2V0aF90YWJsZTsNCj4gPiArCWV0aF9kZXYgPSBhcHBfZmxvd2VyLT5wZl9ody0+ZXRo
X2RldjsNCj4gPiArDQo+ID4gKwkvKiBTZW5kIGEgTkZQX0ZMT1dFUl9DTVNHX1RZUEVfTUFDX1JF
UFIgY21zZyB0bw0KPiBoYXJkd2FyZSovDQo+ID4gKwlyZXQgPSBuZnBfZmxvd2VyX2Ntc2dfbWFj
X3JlcHIoYXBwX2Zsb3dlcik7DQo+ID4gKwlpZiAocmV0KSB7DQo+IA0KPiBDb21wYXJlIHZzIDAN
Cj4gDQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgIkNsb3VkIG5vdCBzZW5kIG1hYyByZXByIGNt
c2dzIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBDcmVh
dGUgYSBydGVfZXRoX2RldiBmb3IgZXZlcnkgcGh5cG9ydCByZXByZXNlbnRvciAqLw0KPiA+ICsJ
Zm9yIChpID0gMDsgaSA8IGFwcF9mbG93ZXItPm51bV9waHlwb3J0X3JlcHJzOyBpKyspIHsNCj4g
PiArCQlldGhfcG9ydCA9ICZuZnBfZXRoX3RhYmxlLT5wb3J0c1tpXTsNCj4gPiArCQlmbG93ZXJf
cmVwci5yZXByX3R5cGUgPSBORlBfUkVQUl9UWVBFX1BIWVNfUE9SVDsNCj4gPiArCQlmbG93ZXJf
cmVwci5wb3J0X2lkID0NCj4gbmZwX2Zsb3dlcl9nZXRfcGh5c19wb3J0X2lkKGV0aF9wb3J0LT5p
bmRleCk7DQo+ID4gKwkJZmxvd2VyX3JlcHIubmZwX2lkeCA9IGV0aF9wb3J0LT5ldGhfaW5kZXg7
DQo+ID4gKwkJZmxvd2VyX3JlcHIudmZfaWQgPSBpOw0KPiA+ICsNCj4gPiArCQkvKiBDb3B5IHRo
ZSByZWFsIG1hYyBvZiB0aGUgaW50ZXJmYWNlIHRvIHRoZSByZXByZXNlbnRvcg0KPiBzdHJ1Y3Qg
Ki8NCj4gPiArCQlydGVfZXRoZXJfYWRkcl9jb3B5KChzdHJ1Y3QgcnRlX2V0aGVyX2FkZHIgKill
dGhfcG9ydC0NCj4gPm1hY19hZGRyLA0KPiA+ICsJCQkJJmZsb3dlcl9yZXByLm1hY19hZGRyKTsN
Cj4gPiArCQlzcHJpbnRmKGZsb3dlcl9yZXByLm5hbWUsICJmbG93ZXJfcmVwcl9wJWQiLCBpKTsN
Cj4gPiArDQo+ID4gKwkJLyoNCj4gPiArCQkgKiBDcmVhdGUgYSBldGhfZGV2IGZvciB0aGlzIHJl
cHJlc2VudG9yDQo+ID4gKwkJICogVGhpcyB3aWxsIGFsc28gYWxsb2NhdGUgcHJpdmF0ZSBtZW1v
cnkgZm9yIHRoZSBkZXZpY2UNCj4gPiArCQkgKi8NCj4gPiArCQlyZXQgPSBydGVfZXRoX2Rldl9j
cmVhdGUoZXRoX2Rldi0+ZGV2aWNlLA0KPiBmbG93ZXJfcmVwci5uYW1lLA0KPiA+ICsJCQkJc2l6
ZW9mKHN0cnVjdCBuZnBfZmxvd2VyX3JlcHJlc2VudG9yKSwNCj4gPiArCQkJCU5VTEwsIE5VTEws
IG5mcF9mbG93ZXJfcmVwcl9pbml0LA0KPiAmZmxvd2VyX3JlcHIpOw0KPiA+ICsJCWlmIChyZXQp
IHsNCj4gDQo+IENvbXBhcmUgdnMgMA0KPiANCj4gPiArCQkJUE1EX0lOSVRfTE9HKEVSUiwgIkNs
b3VkIG5vdCBjcmVhdGUgZXRoX2RldiBmb3INCj4gcmVwciIpOw0KPiA+ICsJCQlicmVhazsNCj4g
PiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGkgPCBhcHBfZmxvd2VyLT5udW1fcGh5
cG9ydF9yZXBycykNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkg
KiBOb3cgYWxsb2NhdGUgZXRoX2RldidzIGZvciBWRiByZXByZXNlbnRvcnMuDQo+ID4gKwkgKiBB
bHNvIHNlbmQgcmVpZnkgbWVzc2FnZXMNCj4gPiArCSAqLw0KPiA+ICsJZm9yIChpID0gMDsgaSA8
IGFwcF9mbG93ZXItPm51bV92Zl9yZXByczsgaSsrKSB7DQo+ID4gKwkJZmxvd2VyX3JlcHIucmVw
cl90eXBlID0gTkZQX1JFUFJfVFlQRV9WRjsNCj4gPiArCQlmbG93ZXJfcmVwci5wb3J0X2lkID0g
bmZwX2dldF9wY2llX3BvcnRfaWQoYXBwX2Zsb3dlci0NCj4gPnBmX2h3LT5jcHAsDQo+ID4gKwkJ
CQlORlBfRkxPV0VSX0NNU0dfUE9SVF9WTklDX1RZUEVfVkYsDQo+IGksIDApOw0KPiA+ICsJCWZs
b3dlcl9yZXByLm5mcF9pZHggPSAwOw0KPiA+ICsJCWZsb3dlcl9yZXByLnZmX2lkID0gaTsNCj4g
PiArDQo+ID4gKwkJLyogVkYgcmVwcnMgZ2V0IGEgcmFuZG9tIE1BQyBhZGRyZXNzICovDQo+ID4g
KwkJcnRlX2V0aF9yYW5kb21fYWRkcihmbG93ZXJfcmVwci5tYWNfYWRkci5hZGRyX2J5dGVzKTsN
Cj4gPiArDQo+ID4gKwkJc3ByaW50ZihmbG93ZXJfcmVwci5uYW1lLCAiZmxvd2VyX3JlcHJfdmYl
ZCIsIGkpOw0KPiA+ICsNCj4gPiArCQkgLyogVGhpcyB3aWxsIGFsc28gYWxsb2NhdGUgcHJpdmF0
ZSBtZW1vcnkgZm9yIHRoZSBkZXZpY2UqLw0KPiA+ICsJCXJldCA9IHJ0ZV9ldGhfZGV2X2NyZWF0
ZShldGhfZGV2LT5kZXZpY2UsDQo+IGZsb3dlcl9yZXByLm5hbWUsDQo+ID4gKwkJCQlzaXplb2Yo
c3RydWN0IG5mcF9mbG93ZXJfcmVwcmVzZW50b3IpLA0KPiA+ICsJCQkJTlVMTCwgTlVMTCwgbmZw
X2Zsb3dlcl9yZXByX2luaXQsDQo+ICZmbG93ZXJfcmVwcik7DQo+ID4gKwkJaWYgKHJldCkgew0K
PiANCj4gQ29tcGFyZSB2cyAwDQo+IA0KPiA+ICsJCQlQTURfSU5JVF9MT0coRVJSLCAiQ2xvdWQg
bm90IGNyZWF0ZSBldGhfZGV2IGZvcg0KPiByZXByIik7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJ
CX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoaSA8IGFwcF9mbG93ZXItPm51bV92Zl9yZXBy
cykNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+
ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25mcC9mbG93ZXIvbmZwX2Zsb3dlcl9yZXByZXNl
bnRvci5oDQo+ID4gYi9kcml2ZXJzL25ldC9uZnAvZmxvd2VyL25mcF9mbG93ZXJfcmVwcmVzZW50
b3IuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uNmVlNTRm
MQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC9uZnAvZmxvd2VyL25m
cF9mbG93ZXJfcmVwcmVzZW50b3IuaA0KPiA+IEBAIC0wLDAgKzEsMzkgQEANCj4gPiArLyogU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ICsgKiBDb3B5cmlnaHQoYykg
MjAyMiBDb3JpZ2luZSwgSW5jLg0KPiA+ICsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsg
Ki8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX05GUF9GTE9XRVJfUkVQUkVTRU5UT1JfSF8NCj4gPiAr
I2RlZmluZSBfTkZQX0ZMT1dFUl9SRVBSRVNFTlRPUl9IXw0KPiA+ICsNCj4gPiArLyoNCj4gPiAr
ICogZW51bSBuZnBfcmVwcl90eXBlIC0gdHlwZSBvZiByZXByZXNlbnRvcg0KPiA+ICsgKiBATkZQ
X1JFUFJfVFlQRV9QSFlTX1BPUlQ6ICAgZXh0ZXJuYWwgTklDIHBvcnQNCj4gPiArICogQE5GUF9S
RVBSX1RZUEVfUEY6ICAgICAgICAgIHBoeXNpY2FsIGZ1bmN0aW9uDQo+ID4gKyAqIEBORlBfUkVQ
Ul9UWVBFX1ZGOiAgICAgICAgICB2aXJ0dWFsIGZ1bmN0aW9uDQo+ID4gKyAqIEBORlBfUkVQUl9U
WVBFX01BWDogICAgICAgICBudW1iZXIgb2YgcmVwcmVzZW50b3IgdHlwZXMNCj4gPiArICovDQo+
ID4gK2VudW0gbmZwX3JlcHJfdHlwZSB7DQo+ID4gKwlORlBfUkVQUl9UWVBFX1BIWVNfUE9SVCA9
IDAsDQo+ID4gKwlORlBfUkVQUl9UWVBFX1BGLA0KPiA+ICsJTkZQX1JFUFJfVFlQRV9WRiwNCj4g
PiArCU5GUF9SRVBSX1RZUEVfTUFYLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IG5mcF9m
bG93ZXJfcmVwcmVzZW50b3Igew0KPiA+ICsJdWludDE2X3QgdmZfaWQ7DQo+ID4gKwl1aW50MTZf
dCBzd2l0Y2hfZG9tYWluX2lkOw0KPiA+ICsJdWludDMyX3QgcmVwcl90eXBlOw0KPiA+ICsJdWlu
dDMyX3QgcG9ydF9pZDsNCj4gPiArCXVpbnQzMl90IG5mcF9pZHg7ICAgIC8qIG9ubHkgdmFsaWQg
Zm9yIHRoZSByZXByIG9mIHBoeXNpY2FsIHBvcnQgKi8NCj4gPiArCWNoYXIgbmFtZVtSVEVfRVRI
X05BTUVfTUFYX0xFTl07DQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aGVyX2FkZHIgbWFjX2FkZHI7DQo+
ID4gKwlzdHJ1Y3QgbmZwX2FwcF9mbG93ZXIgKmFwcF9mbG93ZXI7DQo+ID4gKwlzdHJ1Y3QgcnRl
X3JpbmcgKnJpbmc7DQo+ID4gKwlzdHJ1Y3QgcnRlX2V0aF9saW5rICpsaW5rOw0KPiA+ICsJc3Ry
dWN0IHJ0ZV9ldGhfc3RhdHMgcmVwcl9zdGF0czsNCj4gPiArfTsNCj4gPiArDQo+ID4gK2ludCBu
ZnBfZmxvd2VyX3JlcHJfYWxsb2Moc3RydWN0IG5mcF9hcHBfZmxvd2VyICphcHBfZmxvd2VyKTsN
Cj4gPiArDQo+ID4gKyNlbmRpZiAvKiBfTkZQX0ZMT1dFUl9SRVBSRVNFTlRPUl9IXyAqLw0KPiA+
IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZnAvbWVzb24uYnVpbGQgYi9kcml2ZXJzL25ldC9u
ZnAvbWVzb24uYnVpbGQNCj4gPiBpbmRleCA4NzEwMjEzLi44YTYzOTc5IDEwMDY0NA0KPiA+IC0t
LSBhL2RyaXZlcnMvbmV0L25mcC9tZXNvbi5idWlsZA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L25m
cC9tZXNvbi5idWlsZA0KPiA+IEBAIC03LDcgKzcsOSBAQCBpZiBub3QgaXNfbGludXggb3Igbm90
IGRwZGtfY29uZi5nZXQoJ1JURV9BUkNIXzY0JykNCj4gPiAgIGVuZGlmDQo+ID4gICBzb3VyY2Vz
ID0gZmlsZXMoDQo+ID4gICAgICAgICAgICdmbG93ZXIvbmZwX2Zsb3dlci5jJywNCj4gPiArICAg
ICAgICAnZmxvd2VyL25mcF9mbG93ZXJfY21zZy5jJywNCj4gPiAgICAgICAgICAgJ2Zsb3dlci9u
ZnBfZmxvd2VyX2N0cmwuYycsDQo+ID4gKyAgICAgICAgJ2Zsb3dlci9uZnBfZmxvd2VyX3JlcHJl
c2VudG9yLmMnLA0KPiA+ICAgICAgICAgICAnbmZwY29yZS9uZnBfY3BwX3BjaWVfb3BzLmMnLA0K
PiA+ICAgICAgICAgICAnbmZwY29yZS9uZnBfbnNwLmMnLA0KPiA+ICAgICAgICAgICAnbmZwY29y
ZS9uZnBfY3BwY29yZS5jJywNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmZwL25mcGNv
cmUvbmZwX2NwcF9wY2llX29wcy5jDQo+ID4gYi9kcml2ZXJzL25ldC9uZnAvbmZwY29yZS9uZnBf
Y3BwX3BjaWVfb3BzLmMNCj4gPiBpbmRleCAwOGJjNGU4Li4yMmM4YmM0IDEwMDY0NA0KPiA+IC0t
LSBhL2RyaXZlcnMvbmV0L25mcC9uZnBjb3JlL25mcF9jcHBfcGNpZV9vcHMuYw0KPiA+ICsrKyBi
L2RyaXZlcnMvbmV0L25mcC9uZnBjb3JlL25mcF9jcHBfcGNpZV9vcHMuYw0KPiA+IEBAIC05MSw3
ICs5MSwxMCBAQA0KPiA+ICAgICogQHJlZmNudDoJbnVtYmVyIG9mIGN1cnJlbnQgdXNlcnMNCj4g
PiAgICAqIEBpb21lbToJbWFwcGVkIElPIG1lbW9yeQ0KPiA+ICAgICovDQo+ID4gKyNkZWZpbmUg
TkZQX0JBUl9NSU4gMQ0KPiA+ICsjZGVmaW5lIE5GUF9CQVJfTUlEIDUNCj4gPiAgICNkZWZpbmUg
TkZQX0JBUl9NQVggNw0KPiA+ICsNCj4gPiAgIHN0cnVjdCBuZnBfYmFyIHsNCj4gPiAgIAlzdHJ1
Y3QgbmZwX3BjaWVfdXNlciAqbmZwOw0KPiA+ICAgCXVpbnQzMl90IGJhcmNmZzsNCj4gPiBAQCAt
MjkyLDYgKzI5NSw3IEBAIHN0cnVjdCBuZnBfcGNpZV91c2VyIHsNCj4gPiAgICAqIEJBUjAuMDog
UmVzZXJ2ZWQgZm9yIEdlbmVyYWwgTWFwcGluZyAoZm9yIE1TSS1YIGFjY2VzcyB0byBQQ0llIFNS
QU0pDQo+ID4gICAgKg0KPiA+ICAgICogICAgICAgICBIYWx2aW5nIFBDSXRvQ1BQQmFycyBmb3Ig
cHJpbWFyeSBhbmQgc2Vjb25kYXJ5IHByb2Nlc3Nlcy4NCj4gPiArICogICAgICAgICBGb3IgQ29y
ZU5JQyBmaXJtd2FyZToNCj4gPiAgICAqICAgICAgICAgTkZQIFBNRCBqdXN0IHJlcXVpcmVzIHR3
byBmaXhlZCBzbG90cywgb25lIGZvciBjb25maWd1cmF0aW9uIEJBUiwNCj4gPiAgICAqICAgICAg
ICAgYW5kIGFub3RoZXIgZm9yIGFjY2Vzc2luZyB0aGUgaHcgcXVldWVzLiBBbm90aGVyIHNsb3Qg
aXMgbmVlZGVkDQo+ID4gICAgKiAgICAgICAgIGZvciBzZXR0aW5nIHRoZSBsaW5rIHVwIG9yIGRv
d24uIFNlY29uZGFyeSBwcm9jZXNzZXMgZG8gbm90IG5lZWQNCj4gPiBAQCAtMzAxLDYgKzMwNSw5
IEBAIHN0cnVjdCBuZnBfcGNpZV91c2VyIHsNCj4gPiAgICAqICAgICAgICAgc3VwcG9ydGVkLiBE
dWUgdG8gdGhpcyByZXF1aXJlbWVudCBhbmQgZnV0dXJlIGV4dGVuc2lvbnMgcmVxdWlyaW5nDQo+
ID4gICAgKiAgICAgICAgIG5ldyBzbG90cyBwZXIgcHJvY2Vzcywgb25seSBvbmUgc2Vjb25kYXJ5
IHByb2Nlc3MgaXMgc3VwcG9ydGVkIGJ5DQo+ID4gICAgKiAgICAgICAgIG5vdy4NCj4gPiArICog
ICAgICAgICBGb3IgRmxvd2VyIGZpcm13YXJlOg0KPiA+ICsgKiAgICAgICAgIE5GUCBQTUQgbmVl
ZCBhbm90aGVyIGZpeGVkIHNsb3RzLCB1c2VkIGFzIHRoZSBjb25maWd1cmVhdGlvbiBCQVINCj4g
PiArICogICAgICAgICBmb3IgY3RybCB2TklDLg0KPiA+ICAgICovDQo+ID4gICBzdGF0aWMgaW50
DQo+ID4gICBuZnBfZW5hYmxlX2JhcnMoc3RydWN0IG5mcF9wY2llX3VzZXIgKm5mcCkgQEAgLTMw
OSwxMSArMzE2LDExIEBADQo+ID4gc3RydWN0IG5mcF9wY2llX3VzZXIgew0KPiA+ICAgCWludCB4
LCBzdGFydCwgZW5kOw0KPiA+DQo+ID4gICAJaWYgKHJ0ZV9lYWxfcHJvY2Vzc190eXBlKCkgPT0g
UlRFX1BST0NfUFJJTUFSWSkgew0KPiA+IC0JCXN0YXJ0ID0gNDsNCj4gPiAtCQllbmQgPSAxOw0K
PiA+ICsJCXN0YXJ0ID0gTkZQX0JBUl9NSUQ7DQo+ID4gKwkJZW5kID0gTkZQX0JBUl9NSU47DQo+
IA0KPiBUaGVzZSBhbmQgc2ltaWxhciBjaGFuZ2VzIGJlbG93IGxvb2sgdW5yZWxhdGVkIHRvIHRo
ZSBwYXRjaC4NCj4gDQo+ID4gICAJfSBlbHNlIHsNCj4gPiAtCQlzdGFydCA9IDc7DQo+ID4gLQkJ
ZW5kID0gNDsNCj4gPiArCQlzdGFydCA9IE5GUF9CQVJfTUFYOw0KPiA+ICsJCWVuZCA9IE5GUF9C
QVJfTUlEOw0KPiA+ICAgCX0NCj4gPiAgIAlmb3IgKHggPSBzdGFydDsgeCA+IGVuZDsgeC0tKSB7
DQo+ID4gICAJCWJhciA9ICZuZnAtPmJhclt4IC0gMV07DQo+ID4gQEAgLTM0MSwxMSArMzQ4LDEx
IEBAIHN0cnVjdCBuZnBfcGNpZV91c2VyIHsNCj4gPiAgIAlpbnQgeCwgc3RhcnQsIGVuZDsNCj4g
Pg0KPiA+ICAgCWlmIChydGVfZWFsX3Byb2Nlc3NfdHlwZSgpID09IFJURV9QUk9DX1BSSU1BUlkp
IHsNCj4gPiAtCQlzdGFydCA9IDQ7DQo+ID4gLQkJZW5kID0gMTsNCj4gPiArCQlzdGFydCA9IE5G
UF9CQVJfTUlEOw0KPiA+ICsJCWVuZCA9IE5GUF9CQVJfTUlOOw0KPiA+ICAgCX0gZWxzZSB7DQo+
ID4gLQkJc3RhcnQgPSA3Ow0KPiA+IC0JCWVuZCA9IDQ7DQo+ID4gKwkJc3RhcnQgPSBORlBfQkFS
X01BWDsNCj4gPiArCQllbmQgPSBORlBfQkFSX01JRDsNCj4gPiAgIAl9DQo+ID4gICAJZm9yICh4
ID0gc3RhcnQ7IHggPiBlbmQ7IHgtLSkgew0KPiA+ICAgCQliYXIgPSAmbmZwLT5iYXJbeCAtIDFd
Ow0KPiA+IEBAIC0zNjQsMTEgKzM3MSwxMSBAQCBzdHJ1Y3QgbmZwX3BjaWVfdXNlciB7DQo+ID4g
ICAJaW50IHgsIHN0YXJ0LCBlbmQ7DQo+ID4NCj4gPiAgIAlpZiAocnRlX2VhbF9wcm9jZXNzX3R5
cGUoKSA9PSBSVEVfUFJPQ19QUklNQVJZKSB7DQo+ID4gLQkJc3RhcnQgPSA0Ow0KPiA+IC0JCWVu
ZCA9IDE7DQo+ID4gKwkJc3RhcnQgPSBORlBfQkFSX01JRDsNCj4gPiArCQllbmQgPSBORlBfQkFS
X01JTjsNCj4gPiAgIAl9IGVsc2Ugew0KPiA+IC0JCXN0YXJ0ID0gNzsNCj4gPiAtCQllbmQgPSA0
Ow0KPiA+ICsJCXN0YXJ0ID0gTkZQX0JBUl9NQVg7DQo+ID4gKwkJZW5kID0gTkZQX0JBUl9NSUQ7
DQo+ID4gICAJfQ0KPiA+DQo+ID4gICAJZm9yICh4ID0gc3RhcnQ7IHggPiBlbmQ7IHgtLSkgew0K
DQo=