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 5F3E945B42;
	Tue, 15 Oct 2024 11:08:22 +0200 (CEST)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 27D2F4027D;
	Tue, 15 Oct 2024 11:08:22 +0200 (CEST)
Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com
 [67.231.148.174])
 by mails.dpdk.org (Postfix) with ESMTP id 084714027D
 for <dev@dpdk.org>; Tue, 15 Oct 2024 11:08:19 +0200 (CEST)
Received: from pps.filterd (m0431384.ppops.net [127.0.0.1])
 by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 49F63Bce030099;
 Tue, 15 Oct 2024 02:08:16 -0700
Received: from nam04-mw2-obe.outbound.protection.outlook.com
 (mail-mw2nam04lp2171.outbound.protection.outlook.com [104.47.73.171])
 by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 429jskrau6-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 Tue, 15 Oct 2024 02:08:15 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=R9KV7ZFkeuz0C9HFebv8Rd+S1pkXteewmwK13Bqrrebb5ocWQ9UN2DhNyVAHb6C6gqKXmmvS1P5DTrm0FW4D9ab3tY47LGvmL10dYhkF7daaGYrqNeogfHenVMgrOZMxrMadKtrqIY3ArSktfqvkJ4O4U53uylly5dL7xaIytZBdxhmGfasZ9JCCy1XnrWrPutV6mn13xol/RxMLev3h5wtDZsNWgWeR/fSS+r20htUayZSrM/B1nknHIrCIX7tN0tonIxmakquHht5FHdjZ7AXmbGHwvakG1IdTnAeZrbZXuuQ1pIJSbcitZDFb7r9INj2ygItt+yckerMfMa93wA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=1nk0yeE9i2eto/k9BwrFphY7UJi7as9RLANzEeWdFVE=;
 b=lu7nGvPjkJpXKCvVBH2F2R5frxtPloXeMP0Cp+zhaW3PF8DGgB+h7Gc5qaZSuDGRI8QvDK3nOFdK/kD6fydTaIEwLavon3nzzJ+cFaugGE59OBe1YuounIZ9s3nbJedLvi9SCoepUfL9bI2LbpQMgqPMOxISBC0/ewNYUQgbgy+tpbh4jFBnC8zGvAzNnDF+cayuWxEaBDt+6rKtLEDPEkjGRLdLzu26luKVZUZBVuBERihRv0kh5RDEHWTns5AazLjBk60QNk11Xopf4eSNN7HmgSTpPtLmz51RPyUETevqtTTQ2NTQMC+8bCU96sp9QWFfcCKfA9bMbjdsiVAqAQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com;
 dkim=pass header.d=marvell.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=1nk0yeE9i2eto/k9BwrFphY7UJi7as9RLANzEeWdFVE=;
 b=m/+PGdRtLQ5r8W7GyBHBoAwRuit8aDSKPhtY8gK0qNB3TsF7AP3l1/AEsPFFYW2UKd8MeDcxQTfTF66lSTI3p67o+LAKGDTqSlsn1NJmN6o1h5oPmpkYSyRqbnKGg9xnFuzG4w0s1I55kpm3uyEC7eRkNIVi0xG+b/4I0fstEDg=
Received: from DM4PR18MB4368.namprd18.prod.outlook.com (2603:10b6:5:39d::6) by
 PH7PR18MB5057.namprd18.prod.outlook.com (2603:10b6:510:15c::11) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8048.26; Tue, 15 Oct
 2024 09:08:10 +0000
Received: from DM4PR18MB4368.namprd18.prod.outlook.com
 ([fe80::1679:98:2091:7e98]) by DM4PR18MB4368.namprd18.prod.outlook.com
 ([fe80::1679:98:2091:7e98%7]) with mapi id 15.20.8048.020; Tue, 15 Oct 2024
 09:08:10 +0000
From: Tomasz Duszynski <tduszynski@marvell.com>
To: Konstantin Ananyev <konstantin.ananyev@huawei.com>, Thomas Monjalon
 <thomas@monjalon.net>
CC: "Ruifeng.Wang@arm.com" <Ruifeng.Wang@arm.com>,
 "bruce.richardson@intel.com" <bruce.richardson@intel.com>,
 "david.marchand@redhat.com" <david.marchand@redhat.com>, "dev@dpdk.org"
 <dev@dpdk.org>, Jerin Jacob <jerinj@marvell.com>,
 "konstantin.v.ananyev@yandex.ru" <konstantin.v.ananyev@yandex.ru>,
 "mattias.ronnblom@ericsson.com" <mattias.ronnblom@ericsson.com>,
 "mb@smartsharesystems.com" <mb@smartsharesystems.com>,
 "roretzla@linux.microsoft.com" <roretzla@linux.microsoft.com>,
 "zhoumin@loongson.cn" <zhoumin@loongson.cn>, "stephen@networkplumber.org"
 <stephen@networkplumber.org>
Subject: RE: [PATCH v14 1/4] lib: add generic support for reading PMU events
Thread-Topic: [PATCH v14 1/4] lib: add generic support for reading PMU events
Thread-Index: AQHbG8Lz18C3AnVickC0ZF6x2leNf7KBcZIAgASVqIA=
Date: Tue, 15 Oct 2024 09:08:10 +0000
Message-ID: <DM4PR18MB43689A39FA5C4ED9A295BE94D2452@DM4PR18MB4368.namprd18.prod.outlook.com>
References: <20241009112308.2973903-1-tduszynski@marvell.com>
 <20241011094944.3586051-1-tduszynski@marvell.com>
 <20241011094944.3586051-2-tduszynski@marvell.com>
 <660c6a2a24fd4cd785333881208fb659@huawei.com>
In-Reply-To: <660c6a2a24fd4cd785333881208fb659@huawei.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: DM4PR18MB4368:EE_|PH7PR18MB5057:EE_
x-ms-office365-filtering-correlation-id: edd404fd-9459-4742-2a7c-08dcecf8e40d
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
 ARA:13230040|1800799024|366016|7416014|376014|38070700018; 
x-microsoft-antispam-message-info: =?utf-8?B?Vm5iMys4N1B1aUNhZEpxYlp6WU1NeHI4MmNuT2h0Sk05eFREbTd3YTZWTXhC?=
 =?utf-8?B?MTJpaTNYV2ZCYUZ3eThjNTl0MDMxeDhyaW4wY0R5ZkZRNmxIcHdpRkZZR3Uw?=
 =?utf-8?B?T1k0SVFOQnZpam9FRTNVRWUyRHBrYkYzeGhqTUg2THh3cmk1OE5VbDZGUG4v?=
 =?utf-8?B?UjNvaWtjT01GeFRKRlVRN2wvL0ZYcEZMZjBZWHpTUEhIYndHL3ZSVFpiY3Zm?=
 =?utf-8?B?RmFnMmRwbUZ4MUxmbGpaUVlxeVh6dFFNNXVHdHlyOFFhbGVHemFYUElpSHVn?=
 =?utf-8?B?RmtZRHk5RkRvOFZEck96dWFRb0QrZ3I0bmpmVndPWkFaKzlJQVMvSUZRbzFx?=
 =?utf-8?B?MWVRYnQxVVkrYWlwWndCdko5dXoxSnMwTTAzNitXbG44N3dhbUFQb1FNT0sw?=
 =?utf-8?B?dUFSTk8ySzQ5K1RYcjZyREV1bVhLMmJqWEdKeSthbFA3Wk9HamUxVkRZVk1l?=
 =?utf-8?B?b1IvT1JXSGpVejR1ZTVCdFNtMHlmOGs3alJ3cjZQK2xhSXNoUlRtSS9oQlR5?=
 =?utf-8?B?WXY0SmpQRldRUVhWUlhqRmUvQ1psYThZTzFuOUJOeTYzcUFnVTVaTGdRckJz?=
 =?utf-8?B?R0RLZEt6SmliMGhsNlVIM0laUVJvM09hVnpmS2ZrTmhYSmVsUlNMdmNuRDdx?=
 =?utf-8?B?VmF3QVpYSmlIckZYUmUzUjlJalk4Skc1SVZzbFNRMTZRWjFZZnA1TTc4cWhD?=
 =?utf-8?B?aUQwTFdvRmk0a1pLbzhYc0NGVkVwdFhXLzdubHJaLzM4Z0ZVbjhaUEdmL3JV?=
 =?utf-8?B?bEVnMTNCNmFsTndtaTVOOG9IUTlkVXVINEtnMFFSQ2VqN2lJSGplUnJVRnkx?=
 =?utf-8?B?RjlNeFRKVlo5MGRmeEdWMWs4RzhvSmhXL1MzeExTRTcwUU5IUUkvZExMRFFC?=
 =?utf-8?B?ZHFGczBnZm9EVWNmWDVuYjFKR3BKS0tIY1pSSzFrVzdTT3pWZzFCNXpYTVdQ?=
 =?utf-8?B?TTVuWmxZUnZqTExOVGJDc3VnZHFEUy80M2R4NDNWbDdjUWVzWE9yYXAvYzEx?=
 =?utf-8?B?STNIYUlpOVFOTHFlTHYzTk5XMk9hOCtlRi95Zk5NNGVYdVhDYjFweVNZUGNH?=
 =?utf-8?B?cllHS1NHekdkbm5ML3o3NzNGcndIRjFDMGJ5OXJ1U241Y2ppMTBnNy9iMXps?=
 =?utf-8?B?OWh2c3ZBTTJKNy9mbzRocDEyT3ZZTmpsOTU4RFRWcmFCT1YweWw0K3EzZ05T?=
 =?utf-8?B?YkozRVc2SXR6VUxqL0RtL2U4NlJrUEVtdERCWEtUREp6QnRzUGRHRUdVUkxa?=
 =?utf-8?B?eVI4c0lVL09RT3A1Rjdvc1B6cGtpRFp2ZmJsNGt1NDBpbjJyaHBmSGMrbzFH?=
 =?utf-8?B?bk83aXdBYlNjaDYxaXBYTFlydnp5U3Roa2JGNjVFcnRzaEt5MW1QL2grNUJv?=
 =?utf-8?B?RmwxWEFZSEVQWGFJdmpHYjRtVC92bGtJcTBmMGdORUF6bEhhR0J0ZktPTTdr?=
 =?utf-8?B?U3RVSmdIQnc1RnVod0R2WmNnNWRMMkVYa3dhNDhOWk0rSVVMRldLT0xvVllS?=
 =?utf-8?B?cjVvQ1B4Um1nKzRiNjg1M3pLM1JRV3lBQVV1OVZ6NUxzQXg1S3h5NlJYNzRt?=
 =?utf-8?B?Skd6Zkt6TWJmdi9id3UvTUZQOFhmQU53NFJ3SzdGRDFKTHVpS2pvQXA5bUdU?=
 =?utf-8?B?MEdodHRSYWlVdzJLVmU2Wlh1MkN5eUx2aTFXT0dReWJmYkJWM3lFc2Z5Z0RL?=
 =?utf-8?B?UzJkemEzRWNDYjgycHJYeWx5UmNkSFRSTWNsc3o3OXRYK1RrZFJKQmw5cnVB?=
 =?utf-8?Q?IWbRqFx5YIM+1T8zuY=3D?=
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:DM4PR18MB4368.namprd18.prod.outlook.com; PTR:; CAT:NONE;
 SFS:(13230040)(1800799024)(366016)(7416014)(376014)(38070700018); DIR:OUT;
 SFP:1102; 
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Qmp4T3NmbTU3TWczU29EdHVIczFwMG5WY1l2UHVDMGdFUUVnUFlLSFZYRy8z?=
 =?utf-8?B?Z0RIVWdsMXVLTUtGM2tlbUdXOGxCc1FWdmpyc2x6M0ZsSFJ4eDFNZ1NqdW1V?=
 =?utf-8?B?N3llRXpyclhZeUpoL3RxTnRhSUc2S090b1dEMk5nR3kvWXNtZjExQ0pmVXk1?=
 =?utf-8?B?cG9oRnFSYTU2Nmt0QlYvNExVK3BIczR6VDB2NHpuQitNNHVERHZBWThVYkMv?=
 =?utf-8?B?a2xoVG9jQWFzVkQ0U2d0eXlDaTlQa0s1cUNYdjRDT2FpMmhvNmtSL1VhcERZ?=
 =?utf-8?B?cUZXbHR4d2NPYzMwZGkzKzNNZmpmd1RZTm9rcnNOc1E1WXo2M1pYNHFOZW0y?=
 =?utf-8?B?QUpQYVVoYkhpWXZVNkRpU1BTNFFFS3MvME5INTV4bHFFaUx1VVZNdy9CMzdk?=
 =?utf-8?B?NzZzYisyV0hwVXRTS1JRSTR1RGpCMnlDbnhJLzd6ZmxxYlJOOGxodU0wRFpD?=
 =?utf-8?B?OWhYUjlDdWFlZnh5Sk9UVkNKemgxVlNmS0ZwNVFWQjl6M2RYb1VDUHp5akR4?=
 =?utf-8?B?dUZ0UEFVeUhsc1BwZ1RRc2dqZXFkVUZwY3V0Wm9OS01BazF3Tjc0T3JtdG9y?=
 =?utf-8?B?djBZbXVZeEpxQ3lrZHNIVFJpbUZKTjNIQ2JEYTN3YWlGMWIwY2V6L044eVJT?=
 =?utf-8?B?UFVEdHRFWWRwWk03cDhpamFiSSs5d01IRWRyRVlxenI2cXBaa0NCenhSUVhK?=
 =?utf-8?B?WnJqYk5iOVl5d0NKdTlXaHpxU1g0ZHpSblVveVRTZnNpSm1TVnR1UmJqTzhi?=
 =?utf-8?B?NFkvNnd6bGg0UFM2UjM5RGZnbVVWcFFvdHZUcXo5YUdzMzBYdjR4SFloWlMy?=
 =?utf-8?B?TDNOakJmSzVqaFVXWDdGa1lGZllKN1lEZzFHYm9Kdy9mcE5NVGMzM0pDNHc4?=
 =?utf-8?B?S3ZPZ20zRW5rWjRuZkpadGZsVUxlUmVwQTdqV21jL1lSSGM3WWw2UFhVelNS?=
 =?utf-8?B?LzR6bmp3YnY4VGVYZHdXTi9DT09vaGMvNC95TXFucmI0V1BYOVhIRzFKRm1L?=
 =?utf-8?B?V0FxWGdramFsQjJzNW9GY3VteTlTRmpDVXREVjNDUkZyUm0yQXpjSk9LTlVV?=
 =?utf-8?B?VkwyUFFVRlcya2VlL1R2QStONlYyYkdZZVBpN1lSb1JSU0ZFZkU0d3FHRWVt?=
 =?utf-8?B?TUJiQWJ1TjZaWk1HVGhiNllxNnZhWnRoU09rbmRzclRXNVk1YW4zd2ZjeStZ?=
 =?utf-8?B?UmZEV21TcDVZR1Q0Y0ttY2pSNWp6MmUyT05sV1luK3grVVU5RVJvUzgxOGZ2?=
 =?utf-8?B?dnhZTWluS3YrcjdJaUFUdE4zVUhCaVgzVStVN2RWcXJYVmNwMzNHMlJwTFBJ?=
 =?utf-8?B?WWZvQ21kWGhPVUNzbHVjcDZPUkFXM01zMlAxN2h6RU03V3RUTC9Va1k2U0Rr?=
 =?utf-8?B?NStmWWRwRG94TUZFZzNSdklySEVDZWpmSTNWbTZPb1VnRjdZbFJRd2doc0Js?=
 =?utf-8?B?MGZaYVNpcmhMa1ErSkJoYVJVOTRHTWY1VklJeEZSeFM5dXBLdHFBejJHSk9M?=
 =?utf-8?B?UVpkbTVXWDZOSnRCUUViYWJ2TThmL29rbEE4VUk0OUl5b1hNNys0WFpOZFFS?=
 =?utf-8?B?a1JlMWdQWUdjVlFlUEdwMmlOZmNNUWRuRkNhZFI2WU5PMXR0bDhvTXBQOTBP?=
 =?utf-8?B?RC9wZjl0OUE0ZVFyY3BTMzh0L2tqQlNieUhCR3ZnQXFrVCs5QjZvK1NNUGtU?=
 =?utf-8?B?UjEzbDB3dFMwSnFLMHZ1d0RkS203bGMyQmF4eEdEa3I4ZlA1SjNxVGt2Tjgv?=
 =?utf-8?B?TDlzS3ByNHZTdWdmL0hWajJmSHNHVjlhalRjUjR1RlpIaEh3aEpUanhBcE9V?=
 =?utf-8?B?Q3RUcmZIMDVhVUdQeXR5SnZMQjFWM2ZEbHI5eHVVeHdONE1CS3NORERtKy90?=
 =?utf-8?B?Zm9ZelB0d1hFTWJKdGtlMjNIYjZEMnRCZnlxSDlTeEFudWo3SHJRTFQ3NUlP?=
 =?utf-8?B?WjNsUjIvM2YrandrdW9nS012WStkeUVwY2dadTc4MXZWbmJabXJnQk85R1lP?=
 =?utf-8?B?VnBJZk9aZ1NGQU1vUGxCOWdXcThzQ2ZuTWtrSHVPbDBJWWRhNnFQSjFpbTZQ?=
 =?utf-8?B?TkRKNHpOMDlESm5SSFNGWDNwRzJvNVdsTFRMRXU0ZmN5bkJSM2dyWVJ5bTZh?=
 =?utf-8?Q?OzfigjVydunWltjbVrkORu8WE?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: marvell.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: DM4PR18MB4368.namprd18.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: edd404fd-9459-4742-2a7c-08dcecf8e40d
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Oct 2024 09:08:10.1679 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: t0XB0fbpx4P5H82GoOuFgITCauypm0BY9o7hkWaGsCpxnUxQ/TCDhnIG08LWL2S/B2omuEMzk/A/3XBs0um+Bw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR18MB5057
X-Proofpoint-GUID: m1UR8lZDTscdW3Vi46n57GcAel5qbQxH
X-Proofpoint-ORIG-GUID: m1UR8lZDTscdW3Vi46n57GcAel5qbQxH
X-Proofpoint-Virus-Version: vendor=baseguard
 engine=ICAP:2.0.293,Aquarius:18.0.687,Hydra:6.0.235,FMLib:17.0.607.475
 definitions=2020-10-13_15,2020-10-13_02,2020-04-07_01
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

Pj4gQWRkIHN1cHBvcnQgZm9yIHByb2dyYW1taW5nIFBNVSBjb3VudGVycyBhbmQgcmVhZGluZyB0
aGVpciB2YWx1ZXMgaW4NCj4+IHJ1bnRpbWUgYnlwYXNzaW5nIGtlcm5lbCBjb21wbGV0ZWx5Lg0K
Pj4NCj4+IFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgQ1BVIGNvcmVz
IGFyZSBpc29sYXRlZCBpLmUNCj4+IHJ1biBkZWRpY2F0ZWQgdGFza3MuIEluIHN1Y2ggY2FzZXMg
b25lIGNhbm5vdCB1c2Ugc3RhbmRhcmQgcGVyZg0KPj4gdXRpbGl0eSB3aXRob3V0IHNhY3JpZmlj
aW5nIGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlLg0KPj4NCj4+IFNpZ25lZC1vZmYtYnk6IFRvbWFz
eiBEdXN6eW5za2kgPHRkdXN6eW5za2lAbWFydmVsbC5jb20+DQo+PiAtLS0NCj4+ICBNQUlOVEFJ
TkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArDQo+PiAgYXBwL3Rlc3QvbWVz
b24uYnVpbGQgICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPj4gIGFwcC90ZXN0L3Rlc3RfcG11
LmMgICAgICAgICAgICAgICAgICAgIHwgIDUzICsrKw0KPj4gIGRvYy9hcGkvZG94eS1hcGktaW5k
ZXgubWQgICAgICAgICAgICAgIHwgICAzICstDQo+PiAgZG9jL2FwaS9kb3h5LWFwaS5jb25mLmlu
ICAgICAgICAgICAgICAgfCAgIDEgKw0KPj4gIGRvYy9ndWlkZXMvcHJvZ19ndWlkZS9wcm9maWxl
X2FwcC5yc3QgIHwgIDI5ICsrDQo+PiAgZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yNF8x
MS5yc3QgfCAgIDcgKw0KPj4gIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxICsNCj4+ICBsaWIvcG11L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICB8ICAx
MiArDQo+PiAgbGliL3BtdS9wbXVfcHJpdmF0ZS5oICAgICAgICAgICAgICAgICAgfCAgMzIgKysN
Cj4+ICBsaWIvcG11L3J0ZV9wbXUuYyAgICAgICAgICAgICAgICAgICAgICB8IDQ2MyArKysrKysr
KysrKysrKysrKysrKysrKysrDQo+PiAgbGliL3BtdS9ydGVfcG11LmggICAgICAgICAgICAgICAg
ICAgICAgfCAyMjcgKysrKysrKysrKysrDQo+PiAgbGliL3BtdS92ZXJzaW9uLm1hcCAgICAgICAg
ICAgICAgICAgICAgfCAgMTQgKw0KPj4gIDEzIGZpbGVzIGNoYW5nZWQsIDg0NyBpbnNlcnRpb25z
KCspLCAxIGRlbGV0aW9uKC0pICBjcmVhdGUgbW9kZQ0KPj4gMTAwNjQ0IGFwcC90ZXN0L3Rlc3Rf
cG11LmMgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvcG11L21lc29uLmJ1aWxkDQo+PiBjcmVhdGUg
bW9kZSAxMDA2NDQgbGliL3BtdS9wbXVfcHJpdmF0ZS5oICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4+
IGxpYi9wbXUvcnRlX3BtdS5jICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3BtdS9ydGVfcG11Lmgg
IGNyZWF0ZSBtb2RlDQo+PiAxMDA2NDQgbGliL3BtdS92ZXJzaW9uLm1hcA0KPj4NCj4+IGRpZmYg
LS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTIGluZGV4IDdkMTcxZTNkNDUuLmZiZDQ2
OTA1YjYNCj4+IDEwMDY0NA0KPj4gLS0tIGEvTUFJTlRBSU5FUlMNCj4+ICsrKyBiL01BSU5UQUlO
RVJTDQo+PiBAQCAtMTgxMSw2ICsxODExLDExIEBAIE06IE5pdGhpbiBEYWJpbHB1cmFtIDxuZGFi
aWxwdXJhbUBtYXJ2ZWxsLmNvbT4NCj4+ICBNOiBQYXZhbiBOaWtoaWxlc2ggPHBiaGFnYXZhdHVs
YUBtYXJ2ZWxsLmNvbT4NCj4+ICBGOiBsaWIvbm9kZS8NCj4+DQo+PiArUE1VIC0gRVhQRVJJTUVO
VEFMDQo+PiArTTogVG9tYXN6IER1c3p5bnNraSA8dGR1c3p5bnNraUBtYXJ2ZWxsLmNvbT4NCj4+
ICtGOiBsaWIvcG11Lw0KPj4gK0Y6IGFwcC90ZXN0L3Rlc3RfcG11Kg0KPj4gKw0KPj4NCj4+ICBU
ZXN0IEFwcGxpY2F0aW9ucw0KPj4gIC0tLS0tLS0tLS0tLS0tLS0tDQo+PiBkaWZmIC0tZ2l0IGEv
YXBwL3Rlc3QvbWVzb24uYnVpbGQgYi9hcHAvdGVzdC9tZXNvbi5idWlsZCBpbmRleA0KPj4gZTI5
MjU4ZTZlYy4uNDVmNTZkOGFhZSAxMDA2NDQNCj4+IC0tLSBhL2FwcC90ZXN0L21lc29uLmJ1aWxk
DQo+PiArKysgYi9hcHAvdGVzdC9tZXNvbi5idWlsZA0KPj4gQEAgLTEzOSw2ICsxMzksNyBAQCBz
b3VyY2VfZmlsZV9kZXBzID0gew0KPj4gICAgICAndGVzdF9wbWRfcGVyZi5jJzogWydldGhkZXYn
LCAnbmV0J10gKyBwYWNrZXRfYnVyc3RfZ2VuZXJhdG9yX2RlcHMsDQo+PiAgICAgICd0ZXN0X3Bt
ZF9yaW5nLmMnOiBbJ25ldF9yaW5nJywgJ2V0aGRldicsICdidXNfdmRldiddLA0KPj4gICAgICAn
dGVzdF9wbWRfcmluZ19wZXJmLmMnOiBbJ2V0aGRldicsICduZXRfcmluZycsICdidXNfdmRldidd
LA0KPj4gKyAgICAndGVzdF9wbXUuYyc6IFsncG11J10sDQo+PiAgICAgICd0ZXN0X3Bvd2VyLmMn
OiBbJ3Bvd2VyJ10sDQo+PiAgICAgICd0ZXN0X3Bvd2VyX2NwdWZyZXEuYyc6IFsncG93ZXInXSwN
Cj4+ICAgICAgJ3Rlc3RfcG93ZXJfaW50ZWxfdW5jb3JlLmMnOiBbJ3Bvd2VyJ10sIGRpZmYgLS1n
aXQNCj4+IGEvYXBwL3Rlc3QvdGVzdF9wbXUuYyBiL2FwcC90ZXN0L3Rlc3RfcG11LmMgbmV3IGZp
bGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4+IDAwMDAwMDAwMDAuLjc5Mzc2ZWEyZTgNCj4+IC0tLSAv
ZGV2L251bGwNCj4+ICsrKyBiL2FwcC90ZXN0L3Rlc3RfcG11LmMNCj4+IEBAIC0wLDAgKzEsNTMg
QEANCj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+PiArICog
Q29weXJpZ2h0KEMpIDIwMjQgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4+ICsgKi8NCj4+
ICsNCj4+ICsjaW5jbHVkZSA8cnRlX3BtdS5oPg0KPj4gKw0KPj4gKyNpbmNsdWRlICJ0ZXN0Lmgi
DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK3Rlc3RfcG11X3JlYWQodm9pZCkNCj4+ICt7DQo+
PiArCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOw0KPj4gKwlpbnQgdHJpZXMgPSAxMCwgZXZlbnQ7
DQo+PiArCXVpbnQ2NF90IHZhbCA9IDA7DQo+PiArDQo+PiArCWlmIChuYW1lID09IE5VTEwpIHsN
Cj4+ICsJCXByaW50ZigiUE1VIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBhcmNoXG4iKTsNCj4+ICsJ
CXJldHVybiBURVNUX1NLSVBQRUQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKHJ0ZV9wbXVfaW5p
dCgpID09IC1FTk9UU1VQKSB7DQo+PiArCQlwcmludGYoInBtdV9hdXRvdGVzdCBvbmx5IHN1cHBv
cnRlZCBvbiBMaW51eCwgc2tpcHBpbmcgdGVzdFxuIik7DQo+PiArCQlyZXR1cm4gVEVTVF9TS0lQ
UEVEOw0KPj4gKwl9DQo+PiArCWlmIChydGVfcG11X2luaXQoKSA8IDApDQo+PiArCQlyZXR1cm4g
VEVTVF9TS0lQUEVEOw0KPj4gKw0KPj4gKwlldmVudCA9IHJ0ZV9wbXVfYWRkX2V2ZW50KG5hbWUp
Ow0KPj4gKwl3aGlsZSAodHJpZXMtLSkNCj4+ICsJCXZhbCArPSBydGVfcG11X3JlYWQoZXZlbnQp
Ow0KPj4gKw0KPj4gKwlydGVfcG11X2ZpbmkoKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHZhbCA/IFRF
U1RfU1VDQ0VTUyA6IFRFU1RfRkFJTEVEOyB9DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCB1bml0
X3Rlc3Rfc3VpdGUgcG11X3Rlc3RzID0gew0KPj4gKwkuc3VpdGVfbmFtZSA9ICJwbXUgYXV0b3Rl
c3QiLA0KPj4gKwkuc2V0dXAgPSBOVUxMLA0KPj4gKwkudGVhcmRvd24gPSBOVUxMLA0KPj4gKwku
dW5pdF90ZXN0X2Nhc2VzID0gew0KPj4gKwkJVEVTVF9DQVNFKHRlc3RfcG11X3JlYWQpLA0KPj4g
KwkJVEVTVF9DQVNFU19FTkQoKQ0KPj4gKwl9DQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaW50
DQo+PiArdGVzdF9wbXUodm9pZCkNCj4+ICt7DQo+PiArCXJldHVybiB1bml0X3Rlc3Rfc3VpdGVf
cnVubmVyKCZwbXVfdGVzdHMpOw0KPj4gK30NCj4+ICsNCj4+ICtSRUdJU1RFUl9GQVNUX1RFU1Qo
cG11X2F1dG90ZXN0LCB0cnVlLCB0cnVlLCB0ZXN0X3BtdSk7DQo+PiBkaWZmIC0tZ2l0IGEvZG9j
L2FwaS9kb3h5LWFwaS1pbmRleC5tZCBiL2RvYy9hcGkvZG94eS1hcGktaW5kZXgubWQNCj4+IGlu
ZGV4IGY5ZjAzMDAxMjYuLjgwNWVmYzY1MjAgMTAwNjQ0DQo+PiAtLS0gYS9kb2MvYXBpL2RveHkt
YXBpLWluZGV4Lm1kDQo+PiArKysgYi9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kDQo+PiBAQCAt
MjM3LDcgKzIzNyw4IEBAIFRoZSBwdWJsaWMgQVBJIGhlYWRlcnMgYXJlIGdyb3VwZWQgYnkgdG9w
aWNzOg0KPj4gICAgW2xvZ10oQHJlZiBydGVfbG9nLmgpLA0KPj4gICAgW2Vycm5vXShAcmVmIHJ0
ZV9lcnJuby5oKSwNCj4+ICAgIFt0cmFjZV0oQHJlZiBydGVfdHJhY2UuaCksDQo+PiAtICBbdHJh
Y2VfcG9pbnRdKEByZWYgcnRlX3RyYWNlX3BvaW50LmgpDQo+PiArICBbdHJhY2VfcG9pbnRdKEBy
ZWYgcnRlX3RyYWNlX3BvaW50LmgpLCAgW3BtdV0oQHJlZiBydGVfcG11LmgpDQo+Pg0KPj4gIC0g
KiptaXNjKio6DQo+PiAgICBbRUFMIGNvbmZpZ10oQHJlZiBydGVfZWFsLmgpLA0KPj4gZGlmZiAt
LWdpdCBhL2RvYy9hcGkvZG94eS1hcGkuY29uZi5pbiBiL2RvYy9hcGkvZG94eS1hcGkuY29uZi5p
biBpbmRleA0KPj4gYTg4MjNjMDQ2Zi4uNjU4NDkwYjZhMiAxMDA2NDQNCj4+IC0tLSBhL2RvYy9h
cGkvZG94eS1hcGkuY29uZi5pbg0KPj4gKysrIGIvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluDQo+
PiBAQCAtNjksNiArNjksNyBAQCBJTlBVVCAgICAgICAgICAgICAgICAgICA9IEBUT1BESVJAL2Rv
Yy9hcGkvZG94eS1hcGktaW5kZXgubWQgXA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QFRPUERJUkAvbGliL3BkY3AgXA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQFRPUERJ
UkAvbGliL3BkdW1wIFwNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xp
Yi9waXBlbGluZSBcDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBAVE9QRElSQC9saWIv
cG11IFwNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9wb3J0IFwN
Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9wb3dlciBcDQo+PiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBAVE9QRElSQC9saWIvcHRyX2NvbXByZXNzIFwgZGlm
ZiAtLWdpdA0KPj4gYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAucnN0DQo+PiBi
L2RvYy9ndWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2FwcC5yc3QNCj4+IGluZGV4IGE2YjVmYjRk
NWUuLjg1NGM1MTVhNjEgMTAwNjQ0DQo+PiAtLS0gYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJv
ZmlsZV9hcHAucnN0DQo+PiArKysgYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAu
cnN0DQo+PiBAQCAtNyw2ICs3LDM1IEBAIFByb2ZpbGUgWW91ciBBcHBsaWNhdGlvbiAgVGhlIGZv
bGxvd2luZyBzZWN0aW9ucw0KPj4gZGVzY3JpYmUgbWV0aG9kcyBvZiBwcm9maWxpbmcgRFBESyBh
cHBsaWNhdGlvbnMgb24gIGRpZmZlcmVudA0KPj4gYXJjaGl0ZWN0dXJlcy4NCj4+DQo+PiArUGVy
Zm9ybWFuY2UgY291bnRlciBiYXNlZCBwcm9maWxpbmcNCj4+ICstLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQ0KPj4gKw0KPj4gK01ham9yaXR5IG9mIGFyY2hpdGVjdHVyZXMgc3Vw
cG9ydCBzb21lIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAoUE1VKS4NCj4+ICtTdWNoIHVu
aXQgcHJvdmlkZXMgcHJvZ3JhbW1hYmxlIGNvdW50ZXJzIHRoYXQgbW9uaXRvciBzcGVjaWZpYyBl
dmVudHMuDQo+PiArDQo+PiArRGlmZmVyZW50IHRvb2xzIGdhdGhlciB0aGF0IGluZm9ybWF0aW9u
LCBsaWtlIGZvciBleGFtcGxlIHBlcmYuDQo+PiArSG93ZXZlciwgaW4gc29tZSBzY2VuYXJpb3Mg
d2hlbiBDUFUgY29yZXMgYXJlIGlzb2xhdGVkIGFuZCBydW4NCj4+ICtkZWRpY2F0ZWQgdGFza3Mg
aW50ZXJydXB0aW5nIHRob3NlIHRhc2tzIHdpdGggcGVyZiBtYXkgYmUgdW5kZXNpcmFibGUuDQo+
PiArDQo+PiArSW4gc3VjaCBjYXNlcywgYW4gYXBwbGljYXRpb24gY2FuIHVzZSB0aGUgUE1VIGxp
YnJhcnkgdG8gcmVhZCBzdWNoIGV2ZW50cyB2aWENCj5gYHJ0ZV9wbXVfcmVhZCgpYGAuDQo+PiAr
DQo+PiArQnkgZGVmYXVsdCwgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQg
dG8gYWNjZXNzIFBNVQ0KPj4gK2ludGVybmFscy4gVGhhdCBjYW4gYmUgY2hhbmdlZCBieSBzZXR0
aW5nDQo+PiArYGAvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkYGAgdG8gMiAodGhhdCBz
aG91bGQgYmUgYSBkZWZhdWx0DQo+PiArdmFsdWUgYW55d2F5KSBhbmQgYWRkaW5nIGBgQ0FQX1BF
UkZNT05gYCBjYXBhYmlsaXR5IHRvIERQREsNCj4+ICthcHBsaWNhdGlvbi4gUGxlYXNlIHJlZmVy
IHRvIGBgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wZXJmLXNlY3VyaXR5LnJzdGBgIHVuZGVy
IExpbnV4IHNvdXJjZXMNCj5mb3IgbW9yZSBpbmZvcm1hdGlvbi4gRmFpcmx5IHJlY2VudCBrZXJu
ZWwsIGkuZSA+PSA1LjksIGlzIGFkdmlzZWQgdG9vLg0KPj4gKw0KPj4gK0FzIG9mIG5vdyBpbXBs
ZW1lbnRhdGlvbiBpbXBvc2VzIGNlcnRhaW4gbGltaXRhdGlvbnM6DQo+PiArDQo+PiArKiBNYW5h
Z2VtZW50IEFQSXMgdGhhdCBub3JtYWxseSByZXR1cm4gYSBub24tbmVnYXRpdmUgdmFsdWUgd2ls
bA0KPj4gK3JldHVybiBlcnJvciAoYGAtRU5PVFNVUGBgKSB3aGlsZQ0KPj4gKyAgYGBydGVfcG11
X3JlYWQoKWBgIHdpbGwgcmV0dXJuIGBgVUlOVDY0X01BWGBgIGlmIHJ1bm5pbmcgdW5kZXIgdW5z
dXBwb3J0ZWQgb3BlcmF0aW5nIHN5c3RlbS4NCj4+ICsNCj4+ICsqIE9ubHkgRUFMIGxjb3JlcyBh
cmUgc3VwcG9ydGVkDQo+DQo+Tm90IHRoYXQgSSBhbSBhZ2FpbnN0IHRoYXQgbGltaXRhdGlvbiAt
IGl0IGlzIHF1aXRlIGNvbW1vbiB3aXRoaW4gRFBESy4uLg0KPmJ1dCByZWFkaW5nIHRocm91Z2gg
dGhlIGNvZGUsIG5vdCBzdXJlIHdoZXJlIGl0IGNvbWVzIGZyb20/DQo+DQoNCkl0IHdhcyB0ZXN0
ZWQgb25seSBvbiBsY29yZXMgKGxvb2sgVExTIGZvciBleGFtcGxlKS4gSSBkb24ndCBrbm93IGhv
dyBvdGhlciBjb25zdHJ1Y3RzIGJlaGF2ZSBhbmQgd2hhdCBhcmUgdGhlaXIgc3BlY2lmaWMgcmVx
dWlyZW1lbnRzLiANCg0KVGhpcyBsaWJyYXJ5IGhhcyBzb21lIHJvb20gZm9yIGltcHJvdmVtZW50
cyBzbyBJIHRoaW5rIGZ1dHVyZSBjaGFuZ2VzIHdpbGwgYWRkcmVzcyB0aGF0IGxpbWl0YXRpb25z
LiANCg0KPj4gKw0KPj4gKyogRUFMIGxjb3JlcyBtdXN0IG5vdCBzaGFyZSBhIGNwdQ0KPj4gKw0K
Pj4gKyogRWFjaCBFQUwgbGNvcmUgbWVhc3VyZXMgc2FtZSBncm91cCBvZiBldmVudHMNCj4+ICsN
Cj4+DQo+PiAgUHJvZmlsaW5nIG9uIHg4Ng0KPj4gIC0tLS0tLS0tLS0tLS0tLS0NCj4+IGRpZmYg
LS1naXQgYS9kb2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzI0XzExLnJzdA0KPj4gYi9kb2Mv
Z3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzI0XzExLnJzdA0KPj4gaW5kZXggNTNkODY2MTM2NS4u
MDZmYTI5NDc4NyAxMDA2NDQNCj4+IC0tLSBhL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2Vf
MjRfMTEucnN0DQo+PiArKysgYi9kb2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzI0XzExLnJz
dA0KPj4gQEAgLTE1MCw2ICsxNTAsMTMgQEAgTmV3IEZlYXR1cmVzDQo+Pg0KPj4gICAgKiBBZGRl
ZCBpbmRlcGVuZGVudCBlbnF1ZXVlIGZlYXR1cmUuDQo+Pg0KPj4gKyogKipBZGRlZCBQTVUgbGli
cmFyeS4qKg0KPj4gKw0KPj4gKyAgQWRkZWQgYSBuZXcgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1
bml0IChQTVUpIGxpYnJhcnkgd2hpY2ggYWxsb3dzDQo+PiArIGFwcGxpY2F0aW9ucyAgdG8gcGVy
Zm9ybSBzZWxmIG1vbml0b3JpbmcgYWN0aXZpdGllcyB3aXRob3V0IGRlcGVuZGluZyBvbiBleHRl
cm5hbCB1dGlsaXRpZXMNCj5saWtlIHBlcmYuDQo+PiArICBBZnRlciBpbnRlZ3JhdGlvbiB3aXRo
IDpkb2M6YC4uL3Byb2dfZ3VpZGUvdHJhY2VfbGliYCBkYXRhIGdhdGhlcmVkDQo+PiArIGZyb20g
aGFyZHdhcmUgY291bnRlcnMgIGNhbiBiZSBzdG9yZWQgaW4gQ1RGIGZvcm1hdCBmb3IgZnVydGhl
ciBhbmFseXNpcy4NCj4+ICsNCj4+DQo+PiAgUmVtb3ZlZCBJdGVtcw0KPj4gIC0tLS0tLS0tLS0t
LS0NCj4+IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQgaW5k
ZXgNCj4+IDE2MjI4Nzc1M2YuLmNjN2E0YmQ1MzUgMTAwNjQ0DQo+PiAtLS0gYS9saWIvbWVzb24u
YnVpbGQNCj4+ICsrKyBiL2xpYi9tZXNvbi5idWlsZA0KPj4gQEAgLTEzLDYgKzEzLDcgQEAgbGli
cmFyaWVzID0gWw0KPj4gICAgICAgICAgJ2t2YXJncycsICMgZWFsIGRlcGVuZHMgb24ga3Zhcmdz
DQo+PiAgICAgICAgICAnYXJncGFyc2UnLA0KPj4gICAgICAgICAgJ3RlbGVtZXRyeScsICMgYmFz
aWMgaW5mbyBxdWVyeWluZw0KPj4gKyAgICAgICAgJ3BtdScsDQo+PiAgICAgICAgICAnZWFsJywg
IyBldmVyeXRoaW5nIGRlcGVuZHMgb24gZWFsDQo+PiAgICAgICAgICAncHRyX2NvbXByZXNzJywN
Cj4+ICAgICAgICAgICdyaW5nJywNCj4+IGRpZmYgLS1naXQgYS9saWIvcG11L21lc29uLmJ1aWxk
IGIvbGliL3BtdS9tZXNvbi5idWlsZCBuZXcgZmlsZSBtb2RlDQo+PiAxMDA2NDQgaW5kZXggMDAw
MDAwMDAwMC4uMzg2MjMyZTVjNw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvbGliL3BtdS9t
ZXNvbi5idWlsZA0KPj4gQEAgLTAsMCArMSwxMiBAQA0KPj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEJTRC0zLUNsYXVzZSAjIENvcHlyaWdodChDKSAyMDI0IE1hcnZlbGwNCj4+ICtJbnRl
cm5hdGlvbmFsIEx0ZC4NCj4+ICsNCj4+ICtoZWFkZXJzID0gZmlsZXMoJ3J0ZV9wbXUuaCcpDQo+
PiArDQo+PiAraWYgbm90IGlzX2xpbnV4DQo+PiArICAgIHN1YmRpcl9kb25lKCkNCj4+ICtlbmRp
Zg0KPj4gKw0KPj4gK3NvdXJjZXMgPSBmaWxlcygncnRlX3BtdS5jJykNCj4+ICsNCj4+ICtkZXBz
ICs9IFsnbG9nJ10NCj4+IGRpZmYgLS1naXQgYS9saWIvcG11L3BtdV9wcml2YXRlLmggYi9saWIv
cG11L3BtdV9wcml2YXRlLmggbmV3IGZpbGUNCj4+IG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAw
MDAuLmQyYjE1NjE1YmYNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2xpYi9wbXUvcG11X3By
aXZhdGUuaA0KPj4gQEAgLTAsMCArMSwzMiBAQA0KPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBCU0QtMy1DbGF1c2UNCj4+ICsgKiBDb3B5cmlnaHQoYykgMjAyNCBNYXJ2ZWxsDQo+PiAr
ICovDQo+PiArDQo+PiArI2lmbmRlZiBfUE1VX1BSSVZBVEVfSF8NCj4+ICsjZGVmaW5lIF9QTVVf
UFJJVkFURV9IXw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBQ
TVUgaW5pdCBjYWxsYmFjay4NCj4+ICsgKg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIDAgaW4g
Y2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuDQo+PiArICovDQo+PiAr
aW50DQo+PiArcG11X2FyY2hfaW5pdCh2b2lkKTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBBcmNo
aXRlY3R1cmUgc3BlY2lmaWMgUE1VIGNsZWFudXAgY2FsbGJhY2suDQo+PiArICovDQo+PiArdm9p
ZA0KPj4gK3BtdV9hcmNoX2Zpbmkodm9pZCk7DQo+PiArDQo+PiArLyoqDQo+PiArICogQXBwbHkg
YXJjaGl0ZWN0dXJlIHNwZWNpZmljIHNldHRpbmdzIHRvIGNvbmZpZyBiZWZvcmUgcGFzc2luZyBp
dCB0byBzeXNjYWxsLg0KPj4gKyAqDQo+PiArICogQHBhcmFtIGNvbmZpZw0KPj4gKyAqICAgQXJj
aGl0ZWN0dXJlIHNwZWNpZmljIGV2ZW50IGNvbmZpZ3VyYXRpb24uIENvbnN1bHQga2VybmVsIHNv
dXJjZXMgZm9yIGF2YWlsYWJsZSBvcHRpb25zLg0KPj4gKyAqLw0KPj4gK3ZvaWQNCj4+ICtwbXVf
YXJjaF9maXh1cF9jb25maWcodWludDY0X3QgY29uZmlnWzNdKTsNCj4+ICsNCj4+ICsjZW5kaWYg
LyogX1BNVV9QUklWQVRFX0hfICovDQo+PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS9ydGVfcG11LmMg
Yi9saWIvcG11L3J0ZV9wbXUuYyBuZXcgZmlsZSBtb2RlDQo+PiAxMDA2NDQgaW5kZXggMDAwMDAw
MDAwMC4uM2E4NjFiY2E3MQ0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvbGliL3BtdS9ydGVf
cG11LmMNCj4+IEBAIC0wLDAgKzEsNDYzIEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEJTRC0zLUNsYXVzZQ0KPj4gKyAqIENvcHlyaWdodChDKSAyMDI0IE1hcnZlbGwgSW50ZXJu
YXRpb25hbCBMdGQuDQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGN0eXBlLmg+DQo+PiAr
I2luY2x1ZGUgPGRpcmVudC5oPg0KPj4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPj4gKyNpbmNsdWRl
IDxyZWdleC5oPg0KPj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4NCj4+ICsjaW5jbHVkZSA8c3RyaW5n
Lmg+DQo+PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPg0KPj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5o
Pg0KPj4gKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCj4+ICsjaW5jbHVkZSA8c3lzL3N5c2NhbGwu
aD4NCj4+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+PiArDQo+PiArI2luY2x1ZGUgPHJ0ZV9hdG9t
aWMuaD4NCj4+ICsjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9wZXJf
bGNvcmUuaD4NCj4+ICsjaW5jbHVkZSA8cnRlX3BtdS5oPg0KPj4gKyNpbmNsdWRlIDxydGVfc3Bp
bmxvY2suaD4NCj4+ICsjaW5jbHVkZSA8cnRlX3RhaWxxLmg+DQo+PiArDQo+PiArI2luY2x1ZGUg
InBtdV9wcml2YXRlLmgiDQo+PiArDQo+PiArI2RlZmluZSBFVkVOVF9TT1VSQ0VfREVWSUNFU19Q
QVRIICIvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcyINCj4+ICsNCj4+ICsjZGVmaW5lIEdF
Tk1BU0tfVUxMKGgsIGwpICgofjBVTEwgLSAoMVVMTCA8PCAobCkpICsgMSkgJiAofjBVTEwgPj4N
Cj4+ICsoKDY0IC0gMSAtIChoKSkpKSkNCj4NCj5Xb3VsZCBSVEVfR0VOTUFTSzY0KGhpZ2gsIGxv
dykgd29yayBmb3IgeW91IGhlcmU/DQoNCklmIHRoYXQgUlRFX0dFTk1BU0s2NCBnZW5lcmF0ZXMg
Y29udGludW91cyBtYXNrIG9mIDFzIHRoZW4gaXQgd291bGQgd29yay4gSSBkaWRuJ3QgcmVhbGl6
ZSBEUERLIGhhcyBpdC4gDQoNCj4NCj4+ICsjZGVmaW5lIEZJRUxEX1BSRVAobSwgdikgKCgodWlu
dDY0X3QpKHYpIDw8IChfX2J1aWx0aW5fZmZzbGwobSkgLSAxKSkNCj4+ICsmIChtKSkNCj4+ICsN
Cj4+ICsvKiBBIHN0cnVjdHVyZSBkZXNjcmliaW5nIGFuIGV2ZW50ICovIHN0cnVjdCBydGVfcG11
X2V2ZW50IHsNCj4+ICsJY2hhciAqbmFtZTsNCj4+ICsJdW5zaWduZWQgaW50IGluZGV4Ow0KPj4g
KwlUQUlMUV9FTlRSWShydGVfcG11X2V2ZW50KSBuZXh0Ow0KPj4gK307DQo+PiArDQo+PiArUlRF
X0RFRklORV9QRVJfTENPUkUoc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAsIF9ldmVudF9ncm91
cCk7DQo+PiArc3RydWN0IHJ0ZV9wbXUgcnRlX3BtdTsNCj4+ICsNCj4+ICsvKg0KPj4gKyAqIEZv
bGxvd2luZyBfX3J0ZV93ZWFrIGZ1bmN0aW9ucyBwcm92aWRlIGRlZmF1bHQgbm8tb3AuDQo+PiAr
QXJjaGl0ZWN0dXJlcyBzaG91bGQgb3ZlcnJpZGUgdGhlbSBpZg0KPj4gKyAqIG5lY2Vzc2FyeS4N
Cj4+ICsgKi8NCj4+ICsNCj4+ICtpbnQNCj4+ICtfX3J0ZV93ZWFrIHBtdV9hcmNoX2luaXQodm9p
ZCkNCj4+ICt7DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICt2b2lkDQo+PiArX19y
dGVfd2VhayBwbXVfYXJjaF9maW5pKHZvaWQpDQo+PiArew0KPj4gK30NCj4+ICsNCj4+ICt2b2lk
DQo+PiArX19ydGVfd2VhayBwbXVfYXJjaF9maXh1cF9jb25maWcodWludDY0X3QgX19ydGVfdW51
c2VkIGNvbmZpZ1szXSkgeyB9DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK2dldF90ZXJtX2Zv
cm1hdChjb25zdCBjaGFyICpuYW1lLCBpbnQgKm51bSwgdWludDY0X3QgKm1hc2spIHsNCj4+ICsJ
Y2hhciBwYXRoW1BBVEhfTUFYXTsNCj4+ICsJY2hhciAqY29uZmlnID0gTlVMTDsNCj4+ICsJaW50
IGhpZ2gsIGxvdywgcmV0Ow0KPj4gKwlGSUxFICpmcDsNCj4+ICsNCj4+ICsJKm51bSA9ICptYXNr
ID0gMDsNCj4+ICsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVW
SUNFU19QQVRIICIvJXMvZm9ybWF0LyVzIiwgcnRlX3BtdS5uYW1lLCBuYW1lKTsNCj4+ICsJZnAg
PSBmb3BlbihwYXRoLCAiciIpOw0KPj4gKwlpZiAoZnAgPT0gTlVMTCkNCj4+ICsJCXJldHVybiAt
ZXJybm87DQo+PiArDQo+PiArCWVycm5vID0gMDsNCj4+ICsJcmV0ID0gZnNjYW5mKGZwLCAiJW1b
XjpdOiVkLSVkIiwgJmNvbmZpZywgJmxvdywgJmhpZ2gpOw0KPj4gKwlpZiAocmV0IDwgMikgew0K
Pj4gKwkJcmV0ID0gLUVOT0RBVEE7DQo+PiArCQlnb3RvIG91dDsNCj4+ICsJfQ0KPj4gKwlpZiAo
ZXJybm8pIHsNCj4+ICsJCXJldCA9IC1lcnJubzsNCj4+ICsJCWdvdG8gb3V0Ow0KPj4gKwl9DQo+
PiArDQo+PiArCWlmIChyZXQgPT0gMikNCj4+ICsJCWhpZ2ggPSBsb3c7DQo+PiArDQo+PiArCSpt
YXNrID0gR0VOTUFTS19VTEwoaGlnaCwgbG93KTsNCj4+ICsJLyogTGFzdCBkaWdpdCBzaG91bGQg
YmUgWzAxMl0uIElmIGxhc3QgZGlnaXQgaXMgbWlzc2luZyAwIGlzIGltcGxpZWQuICovDQo+PiAr
CSpudW0gPSBjb25maWdbc3RybGVuKGNvbmZpZykgLSAxXTsNCj4+ICsJKm51bSA9IGlzZGlnaXQo
Km51bSkgPyAqbnVtIC0gJzAnIDogMDsNCj4+ICsNCj4+ICsJcmV0ID0gMDsNCj4+ICtvdXQ6DQo+
PiArCWZyZWUoY29uZmlnKTsNCj4+ICsJZmNsb3NlKGZwKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHJl
dDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK3BhcnNlX2V2ZW50KGNoYXIgKmJ1
ZiwgdWludDY0X3QgY29uZmlnWzNdKSB7DQo+PiArCWNoYXIgKnRva2VuLCAqdGVybTsNCj4+ICsJ
aW50IG51bSwgcmV0LCB2YWw7DQo+PiArCXVpbnQ2NF90IG1hc2s7DQo+PiArDQo+PiArCWNvbmZp
Z1swXSA9IGNvbmZpZ1sxXSA9IGNvbmZpZ1syXSA9IDA7DQo+PiArDQo+PiArCXRva2VuID0gc3Ry
dG9rKGJ1ZiwgIiwiKTsNCj4+ICsJd2hpbGUgKHRva2VuKSB7DQo+PiArCQllcnJubyA9IDA7DQo+
PiArCQkvKiA8dGVybT49PHZhbHVlPiAqLw0KPj4gKwkJcmV0ID0gc3NjYW5mKHRva2VuLCAiJW1b
Xj1dPSVpIiwgJnRlcm0sICZ2YWwpOw0KPj4gKwkJaWYgKHJldCA8IDEpDQo+PiArCQkJcmV0dXJu
IC1FTk9EQVRBOw0KPj4gKwkJaWYgKGVycm5vKQ0KPj4gKwkJCXJldHVybiAtZXJybm87DQo+PiAr
CQlpZiAocmV0ID09IDEpDQo+PiArCQkJdmFsID0gMTsNCj4+ICsNCj4+ICsJCXJldCA9IGdldF90
ZXJtX2Zvcm1hdCh0ZXJtLCAmbnVtLCAmbWFzayk7DQo+PiArCQlmcmVlKHRlcm0pOw0KPj4gKwkJ
aWYgKHJldCkNCj4+ICsJCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwkJY29uZmlnW251bV0gfD0g
RklFTERfUFJFUChtYXNrLCB2YWwpOw0KPj4gKwkJdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiwiKTsN
Cj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlu
dA0KPj4gK2dldF9ldmVudF9jb25maWcoY29uc3QgY2hhciAqbmFtZSwgdWludDY0X3QgY29uZmln
WzNdKSB7DQo+PiArCWNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZltCVUZTSVpdOw0KPj4gKwlGSUxF
ICpmcDsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBh
dGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZXZlbnRzLyVzIiwgcnRlX3BtdS5u
YW1lLCBuYW1lKTsNCj4+ICsJZnAgPSBmb3BlbihwYXRoLCAiciIpOw0KPj4gKwlpZiAoZnAgPT0g
TlVMTCkNCj4+ICsJCXJldHVybiAtZXJybm87DQo+PiArDQo+PiArCXJldCA9IGZyZWFkKGJ1Ziwg
MSwgc2l6ZW9mKGJ1ZiksIGZwKTsNCj4+ICsJaWYgKHJldCA9PSAwKSB7DQo+PiArCQlmY2xvc2Uo
ZnApOw0KPj4gKw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsJZmNsb3NlKGZw
KTsNCj4+ICsJYnVmW3JldF0gPSAnXDAnOw0KPj4gKw0KPj4gKwlyZXR1cm4gcGFyc2VfZXZlbnQo
YnVmLCBjb25maWcpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+PiArZG9fcGVyZl9l
dmVudF9vcGVuKHVpbnQ2NF90IGNvbmZpZ1szXSwgaW50IGdyb3VwX2ZkKSB7DQo+PiArCXN0cnVj
dCBwZXJmX2V2ZW50X2F0dHIgYXR0ciA9IHsNCj4+ICsJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBw
ZXJmX2V2ZW50X2F0dHIpLA0KPj4gKwkJLnR5cGUgPSBQRVJGX1RZUEVfUkFXLA0KPj4gKwkJLmV4
Y2x1ZGVfa2VybmVsID0gMSwNCj4+ICsJCS5leGNsdWRlX2h2ID0gMSwNCj4+ICsJCS5kaXNhYmxl
ZCA9IDEsDQo+PiArCQkucGlubmVkID0gZ3JvdXBfZmQgPT0gLTEsDQo+PiArCX07DQo+PiArDQo+
PiArCXBtdV9hcmNoX2ZpeHVwX2NvbmZpZyhjb25maWcpOw0KPj4gKw0KPj4gKwlhdHRyLmNvbmZp
ZyA9IGNvbmZpZ1swXTsNCj4+ICsJYXR0ci5jb25maWcxID0gY29uZmlnWzFdOw0KPj4gKwlhdHRy
LmNvbmZpZzIgPSBjb25maWdbMl07DQo+PiArDQo+PiArCXJldHVybiBzeXNjYWxsKFNZU19wZXJm
X2V2ZW50X29wZW4sICZhdHRyLCAwLCAtMSwgZ3JvdXBfZmQsIDApOyB9DQo+PiArDQo+PiArc3Rh
dGljIGludA0KPj4gK29wZW5fZXZlbnRzKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91
cCkgew0KPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+PiArCXVpbnQ2NF90IGNv
bmZpZ1szXTsNCj4+ICsJaW50IG51bSA9IDAsIHJldDsNCj4+ICsNCj4+ICsJLyogZ3JvdXAgbGVh
ZGVyIGdldHMgY3JlYXRlZCBmaXJzdCwgd2l0aCBmZCA9IC0xICovDQo+PiArCWdyb3VwLT5mZHNb
MF0gPSAtMTsNCj4+ICsNCj4+ICsJVEFJTFFfRk9SRUFDSChldmVudCwgJnJ0ZV9wbXUuZXZlbnRf
bGlzdCwgbmV4dCkgew0KPj4gKwkJcmV0ID0gZ2V0X2V2ZW50X2NvbmZpZyhldmVudC0+bmFtZSwg
Y29uZmlnKTsNCj4+ICsJCWlmIChyZXQpDQo+PiArCQkJY29udGludWU7DQo+PiArDQo+PiArCQly
ZXQgPSBkb19wZXJmX2V2ZW50X29wZW4oY29uZmlnLCBncm91cC0+ZmRzWzBdKTsNCj4+ICsJCWlm
IChyZXQgPT0gLTEpIHsNCj4+ICsJCQlyZXQgPSAtZXJybm87DQo+PiArCQkJZ290byBvdXQ7DQo+
PiArCQl9DQo+PiArDQo+PiArCQlncm91cC0+ZmRzW2V2ZW50LT5pbmRleF0gPSByZXQ7DQo+PiAr
CQludW0rKzsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICtvdXQ6DQo+PiArCWZv
ciAoLS1udW07IG51bSA+PSAwOyBudW0tLSkgew0KPj4gKwkJY2xvc2UoZ3JvdXAtPmZkc1tudW1d
KTsNCj4+ICsJCWdyb3VwLT5mZHNbbnVtXSA9IC0xOw0KPj4gKwl9DQo+PiArDQo+PiArDQo+PiAr
CXJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICttbWFwX2V2ZW50
cyhzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXApIHsNCj4+ICsJbG9uZyBwYWdlX3Np
emUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpOw0KPj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4+ICsJ
dm9pZCAqYWRkcjsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IHJ0
ZV9wbXUubnVtX2dyb3VwX2V2ZW50czsgaSsrKSB7DQo+PiArCQlhZGRyID0gbW1hcCgwLCBwYWdl
X3NpemUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZ3JvdXAtPmZkc1tpXSwgMCk7DQo+PiArCQlp
ZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7DQo+PiArCQkJcmV0ID0gLWVycm5vOw0KPj4gKwkJCWdv
dG8gb3V0Ow0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJZ3JvdXAtPm1tYXBfcGFnZXNbaV0gPSBhZGRy
Ow0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK291dDoNCj4+ICsJZm9yICg7IGk7
IGktLSkgew0KPj4gKwkJbXVubWFwKGdyb3VwLT5tbWFwX3BhZ2VzW2kgLSAxXSwgcGFnZV9zaXpl
KTsNCj4+ICsJCWdyb3VwLT5tbWFwX3BhZ2VzW2kgLSAxXSA9IE5VTEw7DQo+PiArCX0NCj4+ICsN
Cj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQNCj4+ICtjbGVh
bnVwX2V2ZW50cyhzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXApIHsNCj4+ICsJdW5z
aWduZWQgaW50IGk7DQo+PiArDQo+PiArCWlmIChncm91cC0+ZmRzWzBdICE9IC0xKQ0KPj4gKwkJ
aW9jdGwoZ3JvdXAtPmZkc1swXSwgUEVSRl9FVkVOVF9JT0NfRElTQUJMRSwgUEVSRl9JT0NfRkxB
R19HUk9VUCk7DQo+PiArDQo+PiArCWZvciAoaSA9IDA7IGkgPCBydGVfcG11Lm51bV9ncm91cF9l
dmVudHM7IGkrKykgew0KPj4gKwkJaWYgKGdyb3VwLT5tbWFwX3BhZ2VzW2ldKSB7DQo+PiArCQkJ
bXVubWFwKGdyb3VwLT5tbWFwX3BhZ2VzW2ldLCBzeXNjb25mKF9TQ19QQUdFX1NJWkUpKTsNCj4+
ICsJCQlncm91cC0+bW1hcF9wYWdlc1tpXSA9IE5VTEw7DQo+PiArCQl9DQo+PiArDQo+PiArCQlp
ZiAoZ3JvdXAtPmZkc1tpXSAhPSAtMSkgew0KPj4gKwkJCWNsb3NlKGdyb3VwLT5mZHNbaV0pOw0K
Pj4gKwkJCWdyb3VwLT5mZHNbaV0gPSAtMTsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwln
cm91cC0+ZW5hYmxlZCA9IGZhbHNlOw0KPj4gK30NCj4+ICsNCj4+ICtpbnQNCj4+ICtfX3J0ZV9w
bXVfZW5hYmxlX2dyb3VwKHZvaWQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudF9n
cm91cCAqZ3JvdXAgPSAmUlRFX1BFUl9MQ09SRShfZXZlbnRfZ3JvdXApOw0KPj4gKwlpbnQgcmV0
Ow0KPj4gKw0KPj4gKwlpZiAocnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzID09IDApDQo+PiArCQly
ZXR1cm4gLUVOT0RFVjsNCj4+ICsNCj4+ICsJcmV0ID0gb3Blbl9ldmVudHMoZ3JvdXApOw0KPj4g
KwlpZiAocmV0KQ0KPj4gKwkJZ290byBvdXQ7DQo+PiArDQo+PiArCXJldCA9IG1tYXBfZXZlbnRz
KGdyb3VwKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCWdvdG8gb3V0Ow0KPj4gKw0KPj4gKwlpZiAo
aW9jdGwoZ3JvdXAtPmZkc1swXSwgUEVSRl9FVkVOVF9JT0NfUkVTRVQsIFBFUkZfSU9DX0ZMQUdf
R1JPVVApID09IC0xKSB7DQo+PiArCQlyZXQgPSAtZXJybm87DQo+PiArCQlnb3RvIG91dDsNCj4+
ICsJfQ0KPj4gKw0KPj4gKwlpZiAoaW9jdGwoZ3JvdXAtPmZkc1swXSwgUEVSRl9FVkVOVF9JT0Nf
RU5BQkxFLCBQRVJGX0lPQ19GTEFHX0dST1VQKSA9PSAtMSkgew0KPj4gKwkJcmV0ID0gLWVycm5v
Ow0KPj4gKwkJZ290byBvdXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJcnRlX3NwaW5sb2NrX2xvY2so
JnJ0ZV9wbXUubG9jayk7DQo+PiArCVRBSUxRX0lOU0VSVF9UQUlMKCZydGVfcG11LmV2ZW50X2dy
b3VwX2xpc3QsIGdyb3VwLCBuZXh0KTsNCj4+ICsJcnRlX3NwaW5sb2NrX3VubG9jaygmcnRlX3Bt
dS5sb2NrKTsNCj4NCj5JIHRob3VnaHQgdGhhdCBhZnRlciBwcmV2aW91cyByb3VuZCBvZiByZXZp
ZXdzLCB3ZSBnb3QgYSBjb25zZW5zdXMgdGhhdCBpdCBpcyBhIGJhZCBpZGVhIHRvIGluc2VydA0K
PnBvaW50ZXIgb2YgVExTIHZhcmlhYmxlIGludG8gdGhlIGdsb2JhbCBsaXN0Og0KPmh0dHBzOi8v
dXJsZGVmZW5zZS5wcm9vZnBvaW50LmNvbS92Mi91cmw/dT1odHRwcy0NCj4zQV9fcGF0Y2h3b3Jr
LmRwZGsub3JnX3Byb2plY3RfZHBka19wYXRjaF8yMDIzMDIxNjE3NTUwMi4zMTY0ODIwLTJEMi0y
RHRkdXN6eW5za2ktDQo+NDBtYXJ2ZWxsLmNvbV8mZD1Ed0lGQWcmYz1uS2pXZWMyYjZSMG1PeVBh
ejd4dGZRJnI9UFpOWGdyYmpkbFh4VkVFR1lreEl4Um5keUVVd1dVX2FkNWNlMjJZSTZJcyZtPW9K
DQo+LQ0KPmVTbm1Kb0swcjF6VkZoS3JrV01uZmVsT2t4cXBqdFgyZkNyWGFHMlJkV2FnT3FBUTd2
Y0ZDSjBkT1dyVHQmcz1Udkd4cVFtVXpfVTN4TE9yb014T21zQ2lheGRxYk5MaTZHWg0KPnBISWVm
bml3JmU9DQoNCkkgZG9uJ3QgdGhpbmsgdGhlcmUgd2FzIGFueSBjb25zZW5zdXMuIEl0IHdhcyBy
YXRoZXIgeW91ciBwb2ludCBvZiB2aWV3IHNvbGVseS4gU28gSSBzdGlsbCBiZWxpZXZlDQp0aGF0
IGdpdmVuIGN1cnJlbnRseSB0aGF0IG9ubHkgcnVucyBvbiBsY29yZXMgYW5kIGxjb3JlcyBkbyBu
b3QgdGVybWluYXRlIGJlZm9yZSB0aGUgbWFpbiANCm9uZSBoZW5jZSBpdCdzIHNhZmUgdG8gYWNj
ZXNzIFRMUyBmcm9tIGEgbWFpbi4gDQoNCk9uY2Ugc3VwcG9ydCBmb3IgcnVubmluZyBvbiBhbnl0
aGluZyBvdGhlciB0aGFuIGxjb3JlIGdldHMgYWRkZWQgY3VycmVudCBtZWNoYW5pY3MgaXMgbGlr
ZWx5IHRvIGNoYW5nZS4NCg0KQW5kIGFzIHlvdSBwb2ludGVkIG91dCwgdGhlcmUgYXJlIHBsZW50
eSBvZiBvcHRpb25zIGF2YWlsYWJsZS4gDQoNCj5BcyBJIHNhaWQgYmVmb3JlIC0gSSBiZWxpZXZl
IGl0IGlzIGVycm9yIHByb25lLCBhbmQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkLg0KPlRoZXJlIGFy
ZSBwbGVudHkgb2Ygb3RoZXIgd2F5cyB0byBoYXZlIG9uZSBvYmplY3QgcGVyIGxjb3JlIChpZiB0
aGF0J3MgcmVhbGx5IG5lY2Vzc2FyeSk6DQo+YXJyYXkgb2YgUlRFX01BWF9MQ09SRSBpbmRleGVk
IGJ5IGxjb3JlX2lkLCBvciBuZXcgcnRlX2xjb3JlX3Zhci5oIEFQSSBpbnRyb2R1Y2VkIGJ5IE1h
dHRpYXMNCj5yZWNlbnRseSwgb3IgZXZlbiBzaW1wbGUgVExTIHBvaW50ZXIgd2l0aCBtYWxsb2Mo
KSBiZWhpbmQgd291bGQgYmUgYmV0dGVyLg0KPg0KPj4gKwlncm91cC0+ZW5hYmxlZCA9IHRydWU7
DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gKw0KPj4gK291dDoNCj4+ICsJY2xlYW51cF9ldmVu
dHMoZ3JvdXApOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0
aWMgaW50DQo+PiArc2Nhbl9wbXVzKHZvaWQpDQo+PiArew0KPj4gKwljaGFyIHBhdGhbUEFUSF9N
QVhdOw0KPj4gKwlzdHJ1Y3QgZGlyZW50ICpkZW50Ow0KPj4gKwljb25zdCBjaGFyICpuYW1lOw0K
Pj4gKwlESVIgKmRpcnA7DQo+PiArDQo+PiArCWRpcnAgPSBvcGVuZGlyKEVWRU5UX1NPVVJDRV9E
RVZJQ0VTX1BBVEgpOw0KPj4gKwlpZiAoZGlycCA9PSBOVUxMKQ0KPj4gKwkJcmV0dXJuIC1lcnJu
bzsNCj4+ICsNCj4+ICsJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXJwKSkpIHsNCj4+ICsJCW5h
bWUgPSBkZW50LT5kX25hbWU7DQo+PiArCQlpZiAobmFtZVswXSA9PSAnLicpDQo+PiArCQkJY29u
dGludWU7DQo+PiArDQo+PiArCQkvKiBzeXNmcyBlbnRyeSBzaG91bGQgZWl0aGVyIGNvbnRhaW4g
Y3B1cyBvciBiZSBhIGNwdSAqLw0KPj4gKwkJaWYgKCFzdHJjbXAobmFtZSwgImNwdSIpKQ0KPj4g
KwkJCWJyZWFrOw0KPj4gKw0KPj4gKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVO
VF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvY3B1cyIsIG5hbWUpOw0KPj4gKwkJaWYgKGFjY2Vz
cyhwYXRoLCBGX09LKSA9PSAwKQ0KPj4gKwkJCWJyZWFrOw0KPj4gKwl9DQo+PiArDQo+PiArCWlm
IChkZW50KSB7DQo+PiArCQlydGVfcG11Lm5hbWUgPSBzdHJkdXAobmFtZSk7DQo+PiArCQlpZiAo
cnRlX3BtdS5uYW1lID09IE5VTEwpIHsNCj4+ICsJCQljbG9zZWRpcihkaXJwKTsNCj4+ICsNCj4+
ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwljbG9zZWRp
cihkaXJwKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHJ0ZV9wbXUubmFtZSA/IDAgOiAtRU5PREVWOw0K
Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IHJ0ZV9wbXVfZXZlbnQgKg0KPj4gK25ld19l
dmVudChjb25zdCBjaGFyICpuYW1lKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnQg
KmV2ZW50Ow0KPj4gKw0KPj4gKwlldmVudCA9IGNhbGxvYygxLCBzaXplb2YoKmV2ZW50KSk7DQo+
PiArCWlmIChldmVudCA9PSBOVUxMKQ0KPj4gKwkJZ290byBvdXQ7DQo+PiArDQo+PiArCWV2ZW50
LT5uYW1lID0gc3RyZHVwKG5hbWUpOw0KPj4gKwlpZiAoZXZlbnQtPm5hbWUgPT0gTlVMTCkgew0K
Pj4gKwkJZnJlZShldmVudCk7DQo+PiArCQlldmVudCA9IE5VTEw7DQo+PiArCX0NCj4+ICsNCj4+
ICtvdXQ6DQo+PiArCXJldHVybiBldmVudDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQN
Cj4+ICtmcmVlX2V2ZW50KHN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudCkgew0KPj4gKwlmcmVl
KGV2ZW50LT5uYW1lKTsNCj4+ICsJZnJlZShldmVudCk7DQo+PiArfQ0KPj4gKw0KPj4gK2ludA0K
Pj4gK3J0ZV9wbXVfYWRkX2V2ZW50KGNvbnN0IGNoYXIgKm5hbWUpDQo+PiArew0KPj4gKwlzdHJ1
Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+PiArCWNoYXIgcGF0aFtQQVRIX01BWF07DQo+PiAr
DQo+PiArCWlmIChydGVfcG11Lm5hbWUgPT0gTlVMTCkNCj4+ICsJCXJldHVybiAtRU5PREVWOw0K
Pj4gKw0KPj4gKwlpZiAocnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzICsgMSA+PSBSVEVfTUFYX05V
TV9HUk9VUF9FVkVOVFMpDQo+PiArCQlyZXR1cm4gLUVOT1NQQzsNCj4+ICsNCj4+ICsJc25wcmlu
dGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZXZl
bnRzLyVzIiwgcnRlX3BtdS5uYW1lLCBuYW1lKTsNCj4+ICsJaWYgKGFjY2VzcyhwYXRoLCBSX09L
KSkNCj4+ICsJCXJldHVybiAtRU5PREVWOw0KPj4gKw0KPj4gKwlUQUlMUV9GT1JFQUNIKGV2ZW50
LCAmcnRlX3BtdS5ldmVudF9saXN0LCBuZXh0KSB7DQo+PiArCQlpZiAoIXN0cmNtcChldmVudC0+
bmFtZSwgbmFtZSkpDQo+PiArCQkJcmV0dXJuIGV2ZW50LT5pbmRleDsNCj4+ICsJCWNvbnRpbnVl
Ow0KPj4gKwl9DQo+PiArDQo+PiArCWV2ZW50ID0gbmV3X2V2ZW50KG5hbWUpOw0KPj4gKwlpZiAo
ZXZlbnQgPT0gTlVMTCkNCj4+ICsJCXJldHVybiAtRU5PTUVNOw0KPj4gKw0KPj4gKwlldmVudC0+
aW5kZXggPSBydGVfcG11Lm51bV9ncm91cF9ldmVudHMrKzsNCj4+ICsJVEFJTFFfSU5TRVJUX1RB
SUwoJnJ0ZV9wbXUuZXZlbnRfbGlzdCwgZXZlbnQsIG5leHQpOw0KPj4gKw0KPj4gKwlyZXR1cm4g
ZXZlbnQtPmluZGV4Ow0KPj4gK30NCj4+ICsNCj4+ICtpbnQNCj4+ICtydGVfcG11X2luaXQodm9p
ZCkNCj4+ICt7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCS8qIEFsbG93IGNhbGxpbmcgaW5p
dCBmcm9tIG11bHRpcGxlIGNvbnRleHRzIHdpdGhpbiBhIHNpbmdsZSB0aHJlYWQuIFRoaXMgc2lt
cGxpZmllcw0KPj4gKwkgKiByZXNvdXJjZSBtYW5hZ2VtZW50IGEgYml0IGUuZyBpbiBjYXNlIGZh
c3QtcGF0aCB0cmFjZXBvaW50IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZA0KPj4gKwkgKiB2aWEg
Y29tbWFuZCBsaW5lIGJ1dCBhcHBsaWNhdGlvbiBkb2Vzbid0IGNhcmUgZW5vdWdoIGFuZCBwZXJm
b3JtcyBpbml0L2ZpbmkgYWdhaW4uDQo+PiArCSAqLw0KPj4gKwlpZiAocnRlX2F0b21pY19mZXRj
aF9hZGRfZXhwbGljaXQoJnJ0ZV9wbXUuaW5pdGlhbGl6ZWQsIDEsIHJ0ZV9tZW1vcnlfb3JkZXJf
c2VxX2NzdCkgIT0gMCkNCj4+ICsJCXJldHVybiAwOw0KPg0KPk5vdCBzdXJlIEkgdW5kZXJzdGFu
ZCB0aGUgY29tbWVudCBhYm92ZTogcnRlX3BtdV9pbml0KCkgc3VwcG9zZWQgdG8gYmUgTVQgc2Fm
ZSBvciBub3Q/DQo+SWYgeWVzLCB0aGVuIHRoYXQgZnVuY3Rpb24gcHJvYmFibHkgbmVlZCB0byB3
YWl0IHRpbGwgaW5pdGlhbGl6YXRpb24gZmluaXNoZXMuDQo+DQoNCkl0J3Mgc3VwcG9zZWQgdG8g
YmUgTVQgc2FmZS4gR2VuZXJhbGx5IHRoZXJlIGFyZSB0d28gb3B0aW9ucyBoZXJlLg0KDQojIG9u
ZSB5b3UgcG9pbnRlZCBvdXQgaS5lIHNwaW5uaW5nIGluIGEgbG9vcCB1bnRpbCBldmVyeXRoaW5n
IGlzIHVwIGFuZCBydW5uaW5nIA0KIyBjaGVja2luZyBpZiB0cmFjaW5nIGlzIGluaXRpYWxpemVk
IGR1cmluZyBldmVudCByZWFkLW91dA0KDQpJbml0aWFsbHkgc2Vjb25kIG9wdGlvbiB3YXMgY2hv
c2VuIGFuZCBydGVfcG11X3JlYWQoKSBwZXJmb3JtcyBjaGVjayBwcmlvciB0byBkb2luZyBhbnl0
aGluZy4NClN0aWxsLCBJIHNlZSBhIHByb2JsZW0gdGhlcmUgc28gSSdtIGdsYWQgeW91IHJhaXNl
ZCB0aGF0LiANCg0KPj4gKw0KPj4gKwlyZXQgPSBzY2FuX3BtdXMoKTsNCj4+ICsJaWYgKHJldCkN
Cj4+ICsJCWdvdG8gb3V0Ow0KPj4gKw0KPj4gKwlyZXQgPSBwbXVfYXJjaF9pbml0KCk7DQo+PiAr
CWlmIChyZXQpDQo+PiArCQlnb3RvIG91dDsNCj4+ICsNCj4+ICsJVEFJTFFfSU5JVCgmcnRlX3Bt
dS5ldmVudF9saXN0KTsNCj4+ICsJVEFJTFFfSU5JVCgmcnRlX3BtdS5ldmVudF9ncm91cF9saXN0
KTsNCj4+ICsJcnRlX3NwaW5sb2NrX2luaXQoJnJ0ZV9wbXUubG9jayk7DQo+PiArDQo+PiArCXJl
dHVybiAwOw0KPj4gK291dDoNCj4+ICsJZnJlZShydGVfcG11Lm5hbWUpOw0KPj4gKwlydGVfcG11
Lm5hbWUgPSBOVUxMOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICt2
b2lkDQo+PiArcnRlX3BtdV9maW5pKHZvaWQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgcnRlX3BtdV9l
dmVudF9ncm91cCAqZ3JvdXAsICp0bXBfZ3JvdXA7DQo+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50
ICpldmVudCwgKnRtcF9ldmVudDsNCj4+ICsNCj4+ICsJLyogY2xlYW51cCBvbmNlIGluaXQgY291
bnQgZHJvcHMgdG8gemVybyAqLw0KPj4gKwlpZiAocnRlX2F0b21pY19mZXRjaF9zdWJfZXhwbGlj
aXQoJnJ0ZV9wbXUuaW5pdGlhbGl6ZWQsIDEsDQo+PiArCQkJCQkgIHJ0ZV9tZW1vcnlfb3JkZXJf
c2VxX2NzdCkgLSAxICE9IDApDQo+PiArCQlyZXR1cm47DQo+PiArDQo+PiArCVJURV9UQUlMUV9G
T1JFQUNIX1NBRkUoZXZlbnQsICZydGVfcG11LmV2ZW50X2xpc3QsIG5leHQsIHRtcF9ldmVudCkg
ew0KPj4gKwkJVEFJTFFfUkVNT1ZFKCZydGVfcG11LmV2ZW50X2xpc3QsIGV2ZW50LCBuZXh0KTsN
Cj4+ICsJCWZyZWVfZXZlbnQoZXZlbnQpOw0KPj4gKwl9DQo+PiArDQo+PiArCVJURV9UQUlMUV9G
T1JFQUNIX1NBRkUoZ3JvdXAsICZydGVfcG11LmV2ZW50X2dyb3VwX2xpc3QsIG5leHQsIHRtcF9n
cm91cCkgew0KPj4gKwkJVEFJTFFfUkVNT1ZFKCZydGVfcG11LmV2ZW50X2dyb3VwX2xpc3QsIGdy
b3VwLCBuZXh0KTsNCj4+ICsJCWNsZWFudXBfZXZlbnRzKGdyb3VwKTsNCj4+ICsJfQ0KPj4gKw0K
Pj4gKwlwbXVfYXJjaF9maW5pKCk7DQo+PiArCWZyZWUocnRlX3BtdS5uYW1lKTsNCj4+ICsJcnRl
X3BtdS5uYW1lID0gTlVMTDsNCj4+ICsJcnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzID0gMDsNCj4+
ICt9DQo+PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS9ydGVfcG11LmggYi9saWIvcG11L3J0ZV9wbXUu
aCBuZXcgZmlsZSBtb2RlDQo+PiAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMC4uMDkyMzhlZTMzZA0K
Pj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvbGliL3BtdS9ydGVfcG11LmgNCj4+IEBAIC0wLDAg
KzEsMjI3IEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0K
Pj4gKyAqIENvcHlyaWdodChjKSAyMDI0IE1hcnZlbGwNCj4+ICsgKi8NCj4+ICsNCj4+ICsjaWZu
ZGVmIF9SVEVfUE1VX0hfDQo+PiArI2RlZmluZSBfUlRFX1BNVV9IXw0KPj4gKw0KPj4gKy8qKg0K
Pj4gKyAqIEBmaWxlDQo+PiArICoNCj4+ICsgKiBQTVUgZXZlbnQgdHJhY2luZyBvcGVyYXRpb25z
DQo+PiArICoNCj4+ICsgKiBUaGlzIGZpbGUgZGVmaW5lcyBnZW5lcmljIEFQSSBhbmQgdHlwZXMg
bmVjZXNzYXJ5IHRvIHNldHVwIFBNVSBhbmQNCj4+ICsgKiByZWFkIHNlbGVjdGVkIGNvdW50ZXJz
IGluIHJ1bnRpbWUuDQo+PiArICovDQo+PiArDQo+PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+PiAr
ZXh0ZXJuICJDIiB7DQo+PiArI2VuZGlmDQo+PiArDQo+PiArI2luY2x1ZGUgPGVycm5vLmg+DQo+
PiArDQo+PiArI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4+ICsjaW5jbHVkZSA8cnRlX2NvbXBh
dC5oPg0KPj4gKw0KPj4gKyNpZmRlZiBSVEVfRVhFQ19FTlZfTElOVVgNCj4+ICsNCj4+ICsjaW5j
bHVkZSA8bGludXgvcGVyZl9ldmVudC5oPg0KPj4gKw0KPj4gKyNpbmNsdWRlIDxydGVfYXRvbWlj
Lmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9icmFuY2hfcHJlZGljdGlvbi5oPg0KPj4gKyNpbmNsdWRl
IDxydGVfc3BpbmxvY2suaD4NCj4+ICsNCj4+ICsvKiogTWF4aW11bSBudW1iZXIgb2YgZXZlbnRz
IGluIGEgZ3JvdXAgKi8gI2RlZmluZQ0KPj4gK1JURV9NQVhfTlVNX0dST1VQX0VWRU5UUyA4DQo+
PiArDQo+PiArLyoqDQo+PiArICogQSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIGdyb3VwIG9mIGV2
ZW50cy4NCj4+ICsgKi8NCj4+ICtzdHJ1Y3QgX19ydGVfY2FjaGVfYWxpZ25lZCBydGVfcG11X2V2
ZW50X2dyb3VwIHsNCj4+ICsJLyoqIGFycmF5IG9mIHVzZXIgcGFnZXMgKi8NCj4+ICsJc3RydWN0
IHBlcmZfZXZlbnRfbW1hcF9wYWdlICptbWFwX3BhZ2VzW1JURV9NQVhfTlVNX0dST1VQX0VWRU5U
U107DQo+PiArCWludCBmZHNbUlRFX01BWF9OVU1fR1JPVVBfRVZFTlRTXTsgLyoqPCBhcnJheSBv
ZiBldmVudCBkZXNjcmlwdG9ycyAqLw0KPj4gKwlib29sIGVuYWJsZWQ7IC8qKjwgdHJ1ZSBpZiBn
cm91cCB3YXMgZW5hYmxlZCBvbiBwYXJ0aWN1bGFyIGxjb3JlICovDQo+PiArCVRBSUxRX0VOVFJZ
KHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIG5leHQ7IC8qKjwgbGlzdCBlbnRyeSAqLyB9Ow0KPj4gKw0K
Pj4gKy8qKg0KPj4gKyAqIEEgUE1VIHN0YXRlIGNvbnRhaW5lci4NCj4+ICsgKi8NCj4+ICtzdHJ1
Y3QgcnRlX3BtdSB7DQo+PiArCWNoYXIgKm5hbWU7IC8qKjwgbmFtZSBvZiBjb3JlIFBNVSBsaXN0
ZWQgdW5kZXIgL3N5cy9idXMvZXZlbnRfc291cmNlL2RldmljZXMgKi8NCj4+ICsJcnRlX3NwaW5s
b2NrX3QgbG9jazsgLyoqPCBzZXJpYWxpemUgYWNjZXNzIHRvIGV2ZW50IGdyb3VwIGxpc3QgKi8N
Cj4+ICsJVEFJTFFfSEVBRCgsIHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIGV2ZW50X2dyb3VwX2xpc3Q7
IC8qKjwgbGlzdCBvZiBldmVudCBncm91cHMgKi8NCj4+ICsJdW5zaWduZWQgaW50IG51bV9ncm91
cF9ldmVudHM7IC8qKjwgbnVtYmVyIG9mIGV2ZW50cyBpbiBhIGdyb3VwICovDQo+PiArCVRBSUxR
X0hFQUQoLCBydGVfcG11X2V2ZW50KSBldmVudF9saXN0OyAvKio8IGxpc3Qgb2YgbWF0Y2hpbmcg
ZXZlbnRzICovDQo+PiArCXVuc2lnbmVkIGludCBpbml0aWFsaXplZDsgLyoqPCBpbml0aWFsaXph
dGlvbiBjb3VudGVyICovIH07DQo+PiArDQo+PiArLyoqIGxjb3JlIGV2ZW50IGdyb3VwICovDQo+
PiArUlRFX0RFQ0xBUkVfUEVSX0xDT1JFKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwLCBfZXZl
bnRfZ3JvdXApOw0KPj4gKw0KPj4gKy8qKiBQTVUgc3RhdGUgY29udGFpbmVyICovDQo+PiArZXh0
ZXJuIHN0cnVjdCBydGVfcG11IHJ0ZV9wbXU7DQo+PiArDQo+PiArLyoqIEVhY2ggYXJjaGl0ZWN0
dXJlIHN1cHBvcnRpbmcgUE1VIG5lZWRzIHRvIHByb3ZpZGUgaXRzIG93biB2ZXJzaW9uDQo+PiAr
Ki8gI2lmbmRlZiBydGVfcG11X3BtY19yZWFkICNkZWZpbmUgcnRlX3BtdV9wbWNfcmVhZChpbmRl
eCkgKHsNCj4+ICsodm9pZCkoaW5kZXgpOyAwOyB9KSAjZW5kaWYNCj4+ICsNCj4+ICsvKioNCj4+
ICsgKiBAd2FybmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5n
ZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPj4gKyAqDQo+PiArICogUmVhZCBQTVUgY291bnRlci4N
Cj4+ICsgKg0KPj4gKyAqIEB3YXJuaW5nIFRoaXMgc2hvdWxkIGJlIG5vdCBjYWxsZWQgZGlyZWN0
bHkuDQo+PiArICoNCj4+ICsgKiBAcGFyYW0gcGMNCj4+ICsgKiAgIFBvaW50ZXIgdG8gdGhlIG1t
YXBwZWQgdXNlciBwYWdlLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIENvdW50ZXIgdmFsdWUg
cmVhZCBmcm9tIGhhcmR3YXJlLg0KPj4gKyAqLw0KPg0KPkFzIEkgYWxyZWFkeSBhc2tlZCB5b3Ug
c2V2ZXJhbCB0aW1lcyBpbiBwcmV2aW91cyByZXZpZXcgcm91bmRzOg0KPmh0dHBzOi8vdXJsZGVm
ZW5zZS5wcm9vZnBvaW50LmNvbS92Mi91cmw/dT1odHRwcy0NCj4zQV9fcGF0Y2h3b3JrLmRwZGsu
b3JnX3Byb2plY3RfZHBka19wYXRjaF8yMDIzMDIxNjE3NTUwMi4zMTY0ODIwLTJEMi0yRHRkdXN6
eW5za2ktDQo+NDBtYXJ2ZWxsLmNvbV8mZD1Ed0lGQWcmYz1uS2pXZWMyYjZSMG1PeVBhejd4dGZR
JnI9UFpOWGdyYmpkbFh4VkVFR1lreEl4Um5keUVVd1dVX2FkNWNlMjJZSTZJcyZtPW9KDQo+LQ0K
PmVTbm1Kb0swcjF6VkZoS3JrV01uZmVsT2t4cXBqdFgyZkNyWGFHMlJkV2FnT3FBUTd2Y0ZDSjBk
T1dyVHQmcz1Udkd4cVFtVXpfVTN4TE9yb014T21zQ2lheGRxYk5MaTZHWg0KPnBISWVmbml3JmU9
DQo+cGxlYXNlIGFkZCBhIGRldGFpbGVkIGNvbW1lbnQgaGVyZToNCj5pLmUuIHRoYXQgZnVuY3Rp
b24gKGFuZCBydGVfcG11X3JlYWQoKSkgdG8gd29yayBwcm9wZXJseSBzdXBwb3NlZCB0byBiZSB1
c2VkIG9ubHkgb24NCj5hIHRocmVhZCB0aGF0ICphbHdheXMqIGJpbmRlZCB0byBqdXN0IG9uZSBj
cHUgY29yZS4NCj4NCg0KT2theSBJIHdpbGwgYWRkIGNvbW1lbnQgdW5kZXIgbGltaXRhdGlvbnMg
dGhhdCB3ZSB3YW50IG9uZSBsY29yZSBwZXIgY3B1IGNvcmUuIA0KDQo+PiArX19ydGVfZXhwZXJp
bWVudGFsDQo+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDY0X3QNCj4+ICtfX3J0
ZV9wbXVfcmVhZF91c2VycGFnZShzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKnBjKSB7ICNk
ZWZpbmUNCj4+ICtfX1JURV9QTVVfUkVBRF9PTkNFKHgpICgqKGNvbnN0IHZvbGF0aWxlIHR5cGVv
Zih4KSAqKSYoeCkpDQo+PiArCXVpbnQ2NF90IHdpZHRoLCBvZmZzZXQ7DQo+PiArCXVpbnQzMl90
IHNlcSwgaW5kZXg7DQo+PiArCWludDY0X3QgcG1jOw0KPj4gKw0KPj4gKwlmb3IgKDs7KSB7DQo+
PiArCQlzZXEgPSBfX1JURV9QTVVfUkVBRF9PTkNFKHBjLT5sb2NrKTsNCj4+ICsJCXJ0ZV9jb21w
aWxlcl9iYXJyaWVyKCk7DQo+PiArCQlpbmRleCA9IF9fUlRFX1BNVV9SRUFEX09OQ0UocGMtPmlu
ZGV4KTsNCj4+ICsJCW9mZnNldCA9IF9fUlRFX1BNVV9SRUFEX09OQ0UocGMtPm9mZnNldCk7DQo+
PiArCQl3aWR0aCA9IF9fUlRFX1BNVV9SRUFEX09OQ0UocGMtPnBtY193aWR0aCk7DQo+PiArDQo+
PiArCQkvKiBpbmRleCBzZXQgdG8gMCBtZWFucyB0aGF0IHBhcnRpY3VsYXIgY291bnRlciBjYW5u
b3QgYmUgdXNlZCAqLw0KPj4gKwkJaWYgKGxpa2VseShwYy0+Y2FwX3VzZXJfcmRwbWMgJiYgaW5k
ZXgpKSB7DQo+PiArCQkJcG1jID0gcnRlX3BtdV9wbWNfcmVhZChpbmRleCAtIDEpOw0KPj4gKwkJ
CXBtYyA8PD0gNjQgLSB3aWR0aDsNCj4+ICsJCQlwbWMgPj49IDY0IC0gd2lkdGg7DQo+PiArCQkJ
b2Zmc2V0ICs9IHBtYzsNCj4+ICsJCX0NCj4+ICsNCj4+ICsJCXJ0ZV9jb21waWxlcl9iYXJyaWVy
KCk7DQo+PiArDQo+PiArCQlpZiAobGlrZWx5KF9fUlRFX1BNVV9SRUFEX09OQ0UocGMtPmxvY2sp
ID09IHNlcSkpDQo+PiArCQkJcmV0dXJuIG9mZnNldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1
cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBAYiBF
WFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4+
ICsgKg0KPj4gKyAqIEVuYWJsZSBncm91cCBvZiBldmVudHMgb24gdGhlIGNhbGxpbmcgbGNvcmUu
DQo+PiArICoNCj4+ICsgKiBAd2FybmluZyBUaGlzIHNob3VsZCBiZSBub3QgY2FsbGVkIGRpcmVj
dGx5Lg0KPj4gKyAqDQo+PiArICogQHJldHVybg0KPj4gKyAqICAgMCBpbiBjYXNlIG9mIHN1Y2Nl
c3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4+ICsgKi8NCj4+ICtfX3J0ZV9leHBlcmlt
ZW50YWwNCj4+ICtpbnQNCj4+ICtfX3J0ZV9wbXVfZW5hYmxlX2dyb3VwKHZvaWQpOw0KPj4gKw0K
Pj4gKy8qKg0KPj4gKyAqIEB3YXJuaW5nDQo+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQ
SSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+PiArICoNCj4+ICsgKiBJbml0aWFs
aXplIFBNVSBsaWJyYXJ5Lg0KPj4gKyAqDQo+PiArICogQHdhcm5pbmcgVGhpcyBzaG91bGQgYmUg
bm90IGNhbGxlZCBkaXJlY3RseS4NCj4NCj5TYW1lIHF1ZXN0aW9ucyBhcyBiZWZvcmU6IGlmIGl0
IGlzIGludGVybmFsLCB0aGVuIHdoeToNCj5hKSBpdCBpcyBsb2NhdGVkIGluIHB1YmxpYyBBUEkg
LmggZmlsZQ0KPmIpIHdoeSBpdCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgdXNlci1jb2RlIGluIGFw
cC90ZXN0L3Rlc3RfcG11LmMgPw0KPg0KDQpTb21lIGZ1bmN0aW9ucyBhcmUgbG9jYXRlZCBpbiBw
dWJsaWMgQVBJIGZpbGUgb3V0IG9mIGNvbnZlbmllbmNlLiBUaGV5IGFyZSBlaXRoZXIgbWFjcm9z
IG9yIGlubGluZSBmdW5jdGlvbnMuIA0KRG9jdW1lbnRhdGlvbiBwb2ludHMgb3V0IHdoaWNoIGFy
ZSBzYWZlIHRvIGJlIGNhbGxlZCBkaXJlY3RseSB3aGljaCBhcmUgbm90IHNvIHVzZXItc3BhY2Ug
a25vd3MgdGhlIHJ1bGVzLiANCg0KPj4gKyAqDQo+PiArICogQHJldHVybg0KPj4gKyAqICAgMCBp
biBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4+ICsgKi8NCj4+
ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+ICtpbnQNCj4+ICtydGVfcG11X2luaXQodm9pZCk7DQo+
PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRo
aXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4+ICsgKg0KPj4gKyAqIEZp
bmFsaXplIFBNVSBsaWJyYXJ5LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgUE1VIGNvdW50
ZXJzIGFyZSBubyBsb25nZXIgYmVpbmcgcmVhZC4NCj4+ICsgKi8NCj4+ICtfX3J0ZV9leHBlcmlt
ZW50YWwNCj4+ICt2b2lkDQo+PiArcnRlX3BtdV9maW5pKHZvaWQpOw0KPg0KPkhtbS4uLiwgd2h5
IF9maW5pXygpIGlzIGFsbG93ZWQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IHdoaWxlIF9pbml0Xygp
IGRvZXNuJ3Q/DQo+DQoNClR5cG8uIEZ1bmN0aW9ucyB0aGF0IHNob3VsZCBub3QgYmUgY2FsbGVk
IGRpcmVjdGx5IGFyZSBwcmVmaXhlZCB3aXRoIGRvdWJsZSB1bmRlcnNjb3JlLiANCkknbGwgc2Nh
biB0aHJvdWdoIGhlYWRlciBmaWxlIG9uY2UgYWdhaW4gYW5kIHJlbW92ZSBpbnZhbGlkIGNvbW1l
bnRzLiBUaGFua3MgZm9yIA0KY2F0Y2hpbmcgdGhpcy4gDQoNCj4+ICsvKioNCj4+ICsgKiBAd2Fy
bmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0
IHByaW9yIG5vdGljZQ0KPj4gKyAqDQo+PiArICogQWRkIGV2ZW50IHRvIHRoZSBncm91cCBvZiBl
bmFibGVkIGV2ZW50cy4NCj4+ICsgKg0KPj4gKyAqIEBwYXJhbSBuYW1lDQo+PiArICogICBOYW1l
IG9mIGFuIGV2ZW50IGxpc3RlZCB1bmRlciAvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcy9w
bXUvZXZlbnRzLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIEV2ZW50IGluZGV4IGluIGNhc2Ug
b2Ygc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0KPj4gKyAqLw0KPj4gK19fcnRl
X2V4cGVyaW1lbnRhbA0KPj4gK2ludA0KPj4gK3J0ZV9wbXVfYWRkX2V2ZW50KGNvbnN0IGNoYXIg
Km5hbWUpOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEB3YXJuaW5nDQo+PiArICogQGIgRVhQRVJJ
TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+PiArICoN
Cj4+ICsgKiBSZWFkIGhhcmR3YXJlIGNvdW50ZXIgY29uZmlndXJlZCB0byBjb3VudCBvY2N1cnJl
bmNlcyBvZiBhbiBldmVudC4NCj4+ICsgKg0KPj4gKyAqIEBwYXJhbSBpbmRleA0KPj4gKyAqICAg
SW5kZXggb2YgYW4gZXZlbnQgdG8gYmUgcmVhZC4NCj4+ICsgKiBAcmV0dXJuDQo+PiArICogICBF
dmVudCB2YWx1ZSByZWFkIGZyb20gcmVnaXN0ZXIuIEluIGNhc2Ugb2YgZXJyb3JzIG9yIGxhY2sg
b2Ygc3VwcG9ydA0KPj4gKyAqICAgMCBpcyByZXR1cm5lZC4gSW4gb3RoZXIgd29yZHMsIHN0cmVh
bSBvZiB6ZXJvcyBpbiBhIHRyYWNlIGZpbGUNCj4+ICsgKiAgIGluZGljYXRlcyBwcm9ibGVtIHdp
dGggcmVhZGluZyBwYXJ0aWN1bGFyIFBNVSBldmVudCByZWdpc3Rlci4NCj4+ICsgKi8NCj4+ICtf
X3J0ZV9leHBlcmltZW50YWwNCj4+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50NjRf
dA0KPj4gK3J0ZV9wbXVfcmVhZCh1bnNpZ25lZCBpbnQgaW5kZXgpDQo+PiArew0KPj4gKwlzdHJ1
Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXAgPSAmUlRFX1BFUl9MQ09SRShfZXZlbnRfZ3Jv
dXApOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlpZiAodW5saWtlbHkoIXJ0ZV9wbXUuaW5p
dGlhbGl6ZWQpKQ0KPj4gKwkJcmV0dXJuIDA7DQo+PiArDQo+PiArCWlmICh1bmxpa2VseSghZ3Jv
dXAtPmVuYWJsZWQpKSB7DQo+PiArCQlyZXQgPSBfX3J0ZV9wbXVfZW5hYmxlX2dyb3VwKCk7DQo+
PiArCQlpZiAocmV0KQ0KPj4gKwkJCXJldHVybiAwOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmICh1
bmxpa2VseShpbmRleCA+PSBydGVfcG11Lm51bV9ncm91cF9ldmVudHMpKQ0KPj4gKwkJcmV0dXJu
IDA7DQo+PiArDQo+PiArCXJldHVybiBfX3J0ZV9wbXVfcmVhZF91c2VycGFnZShncm91cC0+bW1h
cF9wYWdlc1tpbmRleF0pOw0KPj4gK30NCj4+ICsNCj4+ICsjZWxzZSAvKiAhUlRFX0VYRUNfRU5W
X0xJTlVYICovDQo+PiArDQo+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiArc3RhdGljIGlubGlu
ZSBpbnQgcnRlX3BtdV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9UU1VQOyB9DQo+PiArDQo+PiAr
X19ydGVfZXhwZXJpbWVudGFsDQo+PiArc3RhdGljIGlubGluZSB2b2lkIHJ0ZV9wbXVfZmluaSh2
b2lkKSB7IH0NCj4+ICsNCj4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+ICtzdGF0aWMgaW5saW5l
IGludCBydGVfcG11X2FkZF9ldmVudChjb25zdCBjaGFyICpuYW1lIF9fcnRlX3VudXNlZCkgew0K
Pj4gK3JldHVybiAtRU5PVFNVUDsgfQ0KPj4gKw0KPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPj4g
K3N0YXRpYyBpbmxpbmUgdWludDY0X3QgcnRlX3BtdV9yZWFkKHVuc2lnbmVkIGludCBpbmRleCBf
X3J0ZV91bnVzZWQpDQo+PiAreyByZXR1cm4gVUlOVDY0X01BWDsgfQ0KPj4gKw0KPj4gKyNlbmRp
ZiAvKiBSVEVfRVhFQ19FTlZfTElOVVggKi8NCj4+ICsNCj4+ICsjaWZkZWYgX19jcGx1c3BsdXMN
Cj4+ICt9DQo+PiArI2VuZGlmDQo+PiArDQo+PiArI2VuZGlmIC8qIF9SVEVfUE1VX0hfICovDQo+
PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS92ZXJzaW9uLm1hcCBiL2xpYi9wbXUvdmVyc2lvbi5tYXAg
bmV3IGZpbGUgbW9kZQ0KPj4gMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLmQ3YzgwY2U0Y2UNCj4+
IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2xpYi9wbXUvdmVyc2lvbi5tYXANCj4+IEBAIC0wLDAg
KzEsMTQgQEANCj4+ICtFWFBFUklNRU5UQUwgew0KPj4gKwlnbG9iYWw6DQo+PiArDQo+PiArCSMg
YWRkZWQgaW4gMjQuMTENCj4+ICsJX19ydGVfcG11X2VuYWJsZV9ncm91cDsNCj4+ICsJcGVyX2xj
b3JlX19ldmVudF9ncm91cDsNCj4+ICsJcnRlX3BtdTsNCj4+ICsJcnRlX3BtdV9hZGRfZXZlbnQ7
DQo+PiArCXJ0ZV9wbXVfZmluaTsNCj4+ICsJcnRlX3BtdV9pbml0Ow0KPj4gKwlydGVfcG11X3Jl
YWQ7DQo+PiArDQo+PiArCWxvY2FsOiAqOw0KPj4gK307DQo+PiAtLQ0KPj4gMi4zNC4xDQoNCg==