From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id EDE3BA0350;
	Tue, 23 Jun 2020 06:35:02 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 4951B1D52B;
	Tue, 23 Jun 2020 06:35:02 +0200 (CEST)
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 (mail-eopbgr20043.outbound.protection.outlook.com [40.107.2.43])
 by dpdk.org (Postfix) with ESMTP id 6B6FB1D52A
 for <dev@dpdk.org>; Tue, 23 Jun 2020 06:35:01 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=5ZLZoJNOkZZlvZH+KRwdfadOb1pp5VyBk6oOJIs1Pq8=;
 b=JXQE6sPRLjQPKYhyMDexUQyL7/F2DiJ10i9RHPhWNbEsATMC+Zu17MId4E5XZ7RYbxl9yQODX3SvQK5uicpNZp1URBcrwsEe1lSDB4CsqQcogwoSc/q1v7cr94ni6tWNXDN88F5gUQvkI9QtonMh6xbstLHMetNW7XT7ty3bMdI=
Received: from AM5PR1001CA0020.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::33)
 by VE1PR08MB4911.eurprd08.prod.outlook.com (2603:10a6:802:af::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21; Tue, 23 Jun
 2020 04:35:00 +0000
Received: from VE1EUR03FT035.eop-EUR03.prod.protection.outlook.com
 (2603:10a6:206:2:cafe::69) by AM5PR1001CA0020.outlook.office365.com
 (2603:10a6:206:2::33) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22 via Frontend
 Transport; Tue, 23 Jun 2020 04:34:59 +0000
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; dpdk.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;dpdk.org; dmarc=bestguesspass action=none
 header.from=arm.com;
Received-SPF: Pass (protection.outlook.com: domain of arm.com designates
 63.35.35.123 as permitted sender) receiver=protection.outlook.com;
 client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com;
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT035.mail.protection.outlook.com (10.152.18.110) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.3109.22 via Frontend Transport; Tue, 23 Jun 2020 04:34:59 +0000
Received: ("Tessian outbound 839770a6d413:v59");
 Tue, 23 Jun 2020 04:34:59 +0000
X-CR-MTA-TID: 64aa7808
Received: from ca5ca08d442a.1
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 548C860A-F917-4C5C-B1AD-D7D59A4637D3.1; 
 Tue, 23 Jun 2020 04:34:54 +0000
Received: from EUR05-DB8-obe.outbound.protection.outlook.com
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ca5ca08d442a.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 23 Jun 2020 04:34:54 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KwVUHb2ubXSBToF/5xkCCSZwqPXwj1PaqLz/kO0DTw1iP9/ULCesEwT3oQxwE/+M6VKddtqq5nVkp99rBB36WxrFymdT2MROwu3jBvEY/41SMVGumeWrLWJiY7GxH7vlqE2WpS0WnhIDjdjm81QwImRk2JQ26nAy/Xwx4xFBx0GoJD6d7OtfsIS40hcT8Vahkp7hrGgncVCdPlopGBOrdJUahQbjHfiUppyvuI0smWodSwJ0+TC4XT83kit6g70LJ/eXqe9wp2I02laqI2tWSMKmiZGZY8HFoX0uwojUnCLlsqHuJ5UL6MZHYJilljalyK2Notg9DXuMODJUbIyuGw==
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-SenderADCheck;
 bh=5ZLZoJNOkZZlvZH+KRwdfadOb1pp5VyBk6oOJIs1Pq8=;
 b=UhGNCEsrCFZXNRHStOg2cydJ8w9q5B/NiUvdJYMH5GwpQAIXIt9UuFwGMUqYbSst1i4tVBWh+pGjYwpeVzddizZv+ncEthBN+MnwYIq62sP+KgFnVrYJlX+Yl3OX52KPULTlJyS1flv0dNNlYqNqaUwYs0JxyBYpfQt7ggFmXq3MefzX0jI42JiXHYzwMu6tUCkSVYnC0Xhq7oGoBnmZIhN/IL1z37/yrkSFtBB0CmUiiW7Dy9plIbGh/uCS2Z+GxdzhY+2sN/knSYvspBBguPcQ5lnFZrHGjFvOJFvgeZT/vio7Zl6tiLnktX37qfsfjCijLZnaCKt4XcBqrZBdrg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=5ZLZoJNOkZZlvZH+KRwdfadOb1pp5VyBk6oOJIs1Pq8=;
 b=JXQE6sPRLjQPKYhyMDexUQyL7/F2DiJ10i9RHPhWNbEsATMC+Zu17MId4E5XZ7RYbxl9yQODX3SvQK5uicpNZp1URBcrwsEe1lSDB4CsqQcogwoSc/q1v7cr94ni6tWNXDN88F5gUQvkI9QtonMh6xbstLHMetNW7XT7ty3bMdI=
Received: from DB6PR0802MB2216.eurprd08.prod.outlook.com (2603:10a6:4:85::9)
 by DB6PR0802MB2375.eurprd08.prod.outlook.com (2603:10a6:4:87::14) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21; Tue, 23 Jun
 2020 04:34:53 +0000
Received: from DB6PR0802MB2216.eurprd08.prod.outlook.com
 ([fe80::1128:b7e7:e832:310f]) by DB6PR0802MB2216.eurprd08.prod.outlook.com
 ([fe80::1128:b7e7:e832:310f%9]) with mapi id 15.20.3109.027; Tue, 23 Jun 2020
 04:34:53 +0000
From: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
To: Ruifeng Wang <Ruifeng.Wang@arm.com>, "Medvedkin, Vladimir"
 <vladimir.medvedkin@intel.com>, Bruce Richardson
 <bruce.richardson@intel.com>, John McNamara <john.mcnamara@intel.com>, Marko
 Kovacevic <marko.kovacevic@intel.com>, Ray Kinsella <mdr@ashroe.eu>, Neil
 Horman <nhorman@tuxdriver.com>
CC: "dev@dpdk.org" <dev@dpdk.org>, "konstantin.ananyev@intel.com"
 <konstantin.ananyev@intel.com>, nd <nd@arm.com>, Honnappa Nagarahalli
 <Honnappa.Nagarahalli@arm.com>, nd <nd@arm.com>
Thread-Topic: [PATCH v4 1/3] lib/lpm: integrate RCU QSBR
Thread-Index: AQHWRZUCZmygZwE2i0GT1Eehun6+6qjkJb2AgAF60uA=
Date: Tue, 23 Jun 2020 04:34:52 +0000
Message-ID: <DB6PR0802MB2216AC7B9A06F1D466C415F198940@DB6PR0802MB2216.eurprd08.prod.outlook.com>
References: <20190906094534.36060-1-ruifeng.wang@arm.com>
 <20200608051658.144417-1-ruifeng.wang@arm.com>
 <20200608051658.144417-2-ruifeng.wang@arm.com>
 <1307ba36-7b4a-e465-d055-b4ad976adea1@intel.com>
 <HE1PR0801MB20250B937AB94A11E65B40D59E970@HE1PR0801MB2025.eurprd08.prod.outlook.com>
In-Reply-To: <HE1PR0801MB20250B937AB94A11E65B40D59E970@HE1PR0801MB2025.eurprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 4f5fb520-d95c-47f4-825b-c7c6e283d8cb.0
x-checkrecipientchecked: true
Authentication-Results-Original: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
x-originating-ip: [70.113.25.165]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-HT: Tenant
X-MS-Office365-Filtering-Correlation-Id: 3b3347de-d1e8-4516-ab1c-08d8172ec9f1
x-ms-traffictypediagnostic: DB6PR0802MB2375:|VE1PR08MB4911:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <VE1PR08MB491125EB5BD192B5477AE12A98940@VE1PR08MB4911.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
nodisclaimer: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
x-forefront-prvs: 04433051BF
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original: 7l7ghebOFe9Fj1CJ1/q3plwAJtK4O7nq3DZ2mLTQJDAUnbxV+u1Ze0uwdVcsTU6yT8tzoi3w6GpbS5agGRLVHortXbvdF6BthRXJs+0DGr5AEpvlrBPLiLJMT4V8780POaDYsOxOtxIi2tOZDtLqYxe5jZRkwdtHGstHiERVC67HzWYbOhj5fkx1HMBweYaabvUasgHJtx6S5ehAKaEvdZ3iPNozdjxn2P8U9IMDKrmMWzhMrIPVTZGkAS8MOajvTvLycOMHzkSpjCTRKtVJp8Cj40aYDKp934Z94Zsi6U/YwZz8A/YS3+4VZOhhp8FbkhYcYfnR39k7KsynbuxiBAsgKUvwyNhB4rmPzc+wXu/tKgcSFnWV4n7t0JzrWRN/
X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en;
 SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB6PR0802MB2216.eurprd08.prod.outlook.com;
 PTR:; CAT:NONE; SFTY:;
 SFS:(4636009)(39860400002)(366004)(396003)(136003)(376002)(346002)(55016002)(54906003)(110136005)(7696005)(9686003)(478600001)(186003)(53546011)(6506007)(33656002)(316002)(26005)(66556008)(86362001)(2906002)(30864003)(83380400001)(66446008)(66946007)(66476007)(64756008)(52536014)(5660300002)(8936002)(8676002)(71200400001)(76116006)(4326008)(21314003);
 DIR:OUT; SFP:1101; 
x-ms-exchange-antispam-messagedata: +64aNAa7UE08Hw4G0CI1PZue6s/5POgx4BLd6i5RHQgFmH+WAdKwyCnYEt8JZJWXPhD+MefxgQyXx48/mRk49yzVgDqAfVhj4al+9VSPj+zUZf3GoBM3VxZh+l3eLkmNsDypXw6WRzt9ebjDbdIY9tiEnlN8/zu8eeocE1E+igeEPS49eMgDE8QVawSPvVt/s6rw3Jq/SYiBSpPTNh4+6N5ihWQtA8D4hfcYhTAGLVHHmx7dXKGAYpQomFyReGHhMAAHrIeI/wHS6lzDmveGhqrAEZ7ITn3qoqaEciqyspnPvrAJyEjwCJLMwYj9icUPu/92MwGeBZHE24pTGQBC+ysadCwkiV+7aLbPe9nDzRtZAUvBJeof6sFJXoRdzy0UXKJnvblJlAgFfD5NVCNZ4ju8A0ERQIQaLitDZYufekA799YzzOtWU4x6kr/3TXNo1RknTdnVJh5dSvykSUVonzA8Ud42MoiO+WAFFw7SbA7Q8vfqkYirepeDaD7nPG5P
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2375
Original-Authentication-Results: arm.com; dkim=none (message not signed)
 header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT035.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:;
 IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFTY:;
 SFS:(4636009)(376002)(346002)(396003)(136003)(39860400002)(46966005)(82740400003)(86362001)(8936002)(7696005)(52536014)(8676002)(47076004)(33656002)(5660300002)(2906002)(478600001)(336012)(55016002)(26005)(83380400001)(9686003)(54906003)(110136005)(186003)(6506007)(356005)(4326008)(36906005)(316002)(53546011)(81166007)(30864003)(82310400002)(70206006)(70586007)(21314003);
 DIR:OUT; SFP:1101; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: bd5afe9c-84d6-47a8-97af-08d8172ec5f8
X-Forefront-PRVS: 04433051BF
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 5aQhCnSLW6xgKGjaJlNxoMsLKsZ8tLi0zD7i5tqSfSX8P6qjSS0Y6JiY5r9N9vWSe88GLBAI4GZBf+FeHkV+ZNk20mHaqsNgLN9cQKwcDd3JXvy7VTTumlZr1xqCMSyFBYgcEHUMj1Bk6ODTs/8hY5oiUFo9LIWa2PKrOSo6z8+NlvzEa5bDIC92VH2UezCUvlk4tUugadk9MlDSnGLZjJ98YaZrT1s8lxw8nH2KRar7TMLrZlZNLJuZUaPQeNFlsGoyv6lavZwGv1RxMZxMcbxuSrjqxZ5dc0Z3UfPMKcRRPSC6wmCx2pPDRhgAVBTeL8XesNe9fncdAqeElLtGj7LCacvobBUTdnaBIm8N5RyXeRa+ewsmnwfGCCoUEz63E+I/DL9+wgG1VWGFnMuFtRn0PiRwqkej2mf9p69StHI=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2020 04:34:59.5455 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 3b3347de-d1e8-4516-ab1c-08d8172ec9f1
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4911
Subject: Re: [dpdk-dev] [PATCH v4 1/3] lib/lpm: integrate RCU QSBR
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
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
Sender: "dev" <dev-bounces@dpdk.org>

PHNuaXA+DQoNCj4gPg0KPiA+DQo+ID4gT24gMDgvMDYvMjAyMCAwNjoxNiwgUnVpZmVuZyBXYW5n
IHdyb3RlOg0KPiA+ID4gQ3VycmVudGx5LCB0aGUgdGJsOCBncm91cCBpcyBmcmVlZCBldmVuIHRo
b3VnaCB0aGUgcmVhZGVycyBtaWdodCBiZQ0KPiA+ID4gdXNpbmcgdGhlIHRibDggZ3JvdXAgZW50
cmllcy4gVGhlIGZyZWVkIHRibDggZ3JvdXAgY2FuIGJlDQo+ID4gPiByZWFsbG9jYXRlZCBxdWlj
a2x5LiBUaGlzIHJlc3VsdHMgaW4gaW5jb3JyZWN0IGxvb2t1cCByZXN1bHRzLg0KPiA+ID4NCj4g
PiA+IFJDVSBRU0JSIHByb2Nlc3MgaXMgaW50ZWdyYXRlZCBmb3Igc2FmZSB0Ymw4IGdyb3VwIHJl
Y2xhaW0uDQo+ID4gPiBSZWZlciB0byBSQ1UgZG9jdW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHZh
cmlvdXMgYXNwZWN0cyBvZg0KPiA+ID4gaW50ZWdyYXRpbmcgUkNVIGxpYnJhcnkgaW50byBvdGhl
ciBsaWJyYXJpZXMuDQo+ID4gPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogUnVpZmVuZyBXYW5nIDxy
dWlmZW5nLndhbmdAYXJtLmNvbT4NCj4gPiA+IFJldmlld2VkLWJ5OiBIb25uYXBwYSBOYWdhcmFo
YWxsaSA8aG9ubmFwcGEubmFnYXJhaGFsbGlAYXJtLmNvbT4NCj4gPiA+IC0tLQ0KPiA+ID4gICBk
b2MvZ3VpZGVzL3Byb2dfZ3VpZGUvbHBtX2xpYi5yc3QgIHwgIDMyICsrKysrKysrDQo+ID4gPiAg
IGxpYi9saWJydGVfbHBtL01ha2VmaWxlICAgICAgICAgICAgfCAgIDIgKy0NCj4gPiA+ICAgbGli
L2xpYnJ0ZV9scG0vbWVzb24uYnVpbGQgICAgICAgICB8ICAgMSArDQo+ID4gPiAgIGxpYi9saWJy
dGVfbHBtL3J0ZV9scG0uYyAgICAgICAgICAgfCAxMjMgKysrKysrKysrKysrKysrKysrKysrKysr
KystLS0NCj4gPiA+ICAgbGliL2xpYnJ0ZV9scG0vcnRlX2xwbS5oICAgICAgICAgICB8ICA1OSAr
KysrKysrKysrKysrKw0KPiA+ID4gICBsaWIvbGlicnRlX2xwbS9ydGVfbHBtX3ZlcnNpb24ubWFw
IHwgICA2ICsrDQo+ID4gPiAgIDYgZmlsZXMgY2hhbmdlZCwgMjExIGluc2VydGlvbnMoKyksIDEy
IGRlbGV0aW9ucygtKQ0KPiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9kb2MvZ3VpZGVzL3Byb2df
Z3VpZGUvbHBtX2xpYi5yc3QNCj4gPiA+IGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL2xwbV9saWIu
cnN0DQo+ID4gPiBpbmRleCAxNjA5YTU3ZDAuLjdjYzk5MDQ0YSAxMDA2NDQNCj4gPiA+IC0tLSBh
L2RvYy9ndWlkZXMvcHJvZ19ndWlkZS9scG1fbGliLnJzdA0KPiA+ID4gKysrIGIvZG9jL2d1aWRl
cy9wcm9nX2d1aWRlL2xwbV9saWIucnN0DQo+ID4gPiBAQCAtMTQ1LDYgKzE0NSwzOCBAQCBkZXBl
bmRpbmcgb24gd2hldGhlciB3ZSBuZWVkIHRvIG1vdmUgdG8gdGhlDQo+ID4gbmV4dCB0YWJsZSBv
ciBub3QuDQo+ID4gPiAgIFByZWZpeCBleHBhbnNpb24gaXMgb25lIG9mIHRoZSBrZXlzIG9mIHRo
aXMgYWxnb3JpdGhtLA0KPiA+ID4gICBzaW5jZSBpdCBpbXByb3ZlcyB0aGUgc3BlZWQgZHJhbWF0
aWNhbGx5IGJ5IGFkZGluZyByZWR1bmRhbmN5Lg0KPiA+ID4NCj4gPiA+ICtEZWxldGlvbg0KPiA+
ID4gK35+fn5+fn5+DQo+ID4gPiArDQo+ID4gPiArV2hlbiBkZWxldGluZyBhIHJ1bGUsIGEgcmVw
bGFjZW1lbnQgcnVsZSBpcyBzZWFyY2hlZCBmb3IuDQo+ID4gPiArUmVwbGFjZW1lbnQgcnVsZSBp
cyBhbiBleGlzdGluZyBydWxlIHRoYXQgaGFzIHRoZSBsb25nZXN0IHByZWZpeA0KPiA+ID4gK21h
dGNoIHdpdGggdGhlIHJ1bGUgdG8gYmUNCj4gPiBkZWxldGVkLCBidXQgaGFzIHNtYWxsZXIgZGVw
dGguDQo+ID4gPiArDQo+ID4gPiArSWYgYSByZXBsYWNlbWVudCBydWxlIGlzIGZvdW5kLCB0YXJn
ZXQgdGJsMjQgYW5kIHRibDggZW50cmllcyBhcmUNCj4gPiA+ICt1cGRhdGVkIHRvIGhhdmUgdGhl
IHNhbWUgZGVwdGggYW5kIG5leHQgaG9wIHZhbHVlIHdpdGggdGhlDQo+ID4gcmVwbGFjZW1lbnQg
cnVsZS4NCj4gPiA+ICsNCj4gPiA+ICtJZiBubyByZXBsYWNlbWVudCBydWxlIGNhbiBiZSBmb3Vu
ZCwgdGFyZ2V0IHRibDI0IGFuZCB0Ymw4IGVudHJpZXMNCj4gPiA+ICt3aWxsIGJlDQo+ID4gY2xl
YXJlZC4NCj4gPiA+ICsNCj4gPiA+ICtQcmVmaXggZXhwYW5zaW9uIGlzIHBlcmZvcm1lZCBpZiB0
aGUgcnVsZSdzIGRlcHRoIGlzIG5vdCBleGFjdGx5IDI0DQo+ID4gPiArYml0cyBvcg0KPiA+IDMy
IGJpdHMuDQo+ID4gPiArDQo+ID4gPiArQWZ0ZXIgZGVsZXRpbmcgYSBydWxlLCBhIGdyb3VwIG9m
IHRibDhzIHRoYXQgYmVsb25ncyB0byB0aGUgc2FtZQ0KPiA+ID4gK3RibDI0IGVudHJ5DQo+ID4g
YXJlIGZyZWVkIGluIGZvbGxvd2luZyBjYXNlczoNCj4gPiA+ICsNCj4gPiA+ICsqICAgQWxsIHRi
bDhzIGluIHRoZSBncm91cCBhcmUgZW1wdHkgLg0KPiA+ID4gKw0KPiA+ID4gKyogICBBbGwgdGJs
OHMgaW4gdGhlIGdyb3VwIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFuZCB3aXRoIGRlcHRoIG5vDQo+
IGdyZWF0ZXINCj4gPiB0aGFuIDI0Lg0KPiA+ID4gKw0KPiA+ID4gK0ZyZWUgb2YgdGJsOHMgaGF2
ZSBkaWZmZXJlbnQgYmVoYXZpb3JzOg0KPiA+ID4gKw0KPiA+ID4gKyogICBJZiBSQ1UgaXMgbm90
IHVzZWQsIHRibDhzIGFyZSBjbGVhcmVkIGFuZCByZWNsYWltZWQgaW1tZWRpYXRlbHkuDQo+ID4g
PiArDQo+ID4gPiArKiAgIElmIFJDVSBpcyB1c2VkLCB0Ymw4cyBhcmUgcmVjbGFpbWVkIHdoZW4g
cmVhZGVycyBhcmUgaW4gcXVpZXNjZW50DQo+IHN0YXRlLg0KPiA+ID4gKw0KPiA+ID4gK1doZW4g
dGhlIExQTSBpcyBub3QgdXNpbmcgUkNVLCB0Ymw4IGdyb3VwIGNhbiBiZSBmcmVlZCBpbW1lZGlh
dGVseQ0KPiA+ID4gK2V2ZW4gdGhvdWdoIHRoZSByZWFkZXJzIG1pZ2h0IGJlIHVzaW5nIHRoZSB0
Ymw4IGdyb3VwIGVudHJpZXMuIFRoaXMNCj4gPiA+ICttaWdodA0KPiA+IHJlc3VsdCBpbiBpbmNv
cnJlY3QgbG9va3VwIHJlc3VsdHMuDQo+ID4gPiArDQo+ID4gPiArUkNVIFFTQlIgcHJvY2VzcyBp
cyBpbnRlZ3JhdGVkIGZvciBzYWZlIHRibDggZ3JvdXAgcmVjbGFpbWF0aW9uLg0KPiA+ID4gK0Fw
cGxpY2F0aW9uIGhhcyBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2hpbGUgdXNpbmcgdGhpcyBm
ZWF0dXJlLg0KPiA+ID4gK1BsZWFzZSByZWZlciB0byByZXNvdXJjZSByZWNsYWltYXRpb24gZnJh
bWV3b3JrIG9mIDpyZWY6YFJDVQ0KPiA+ID4gK2xpYnJhcnkNCj4gPiA8UkNVX0xpYnJhcnk+YCBm
b3IgbW9yZSBkZXRhaWxzLg0KPiA+ID4gKw0KPiA+ID4gICBMb29rdXANCj4gPiA+ICAgfn5+fn5+
DQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfbHBtL01ha2VmaWxlIGIvbGli
L2xpYnJ0ZV9scG0vTWFrZWZpbGUgaW5kZXgNCj4gPiA+IGQ2ODI3ODViNi4uNmYwNmM1YzAzIDEw
MDY0NA0KPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9scG0vTWFrZWZpbGUNCj4gPiA+ICsrKyBiL2xp
Yi9saWJydGVfbHBtL01ha2VmaWxlDQo+ID4gPiBAQCAtOCw3ICs4LDcgQEAgTElCID0gbGlicnRl
X2xwbS5hDQo+ID4gPg0KPiA+ID4gICBDRkxBR1MgKz0gLU8zDQo+ID4gPiAgIENGTEFHUyArPSAk
KFdFUlJPUl9GTEFHUykgLUkkKFNSQ0RJUikgLUxETElCUyArPSAtbHJ0ZV9lYWwNCj4gPiA+IC1s
cnRlX2hhc2gNCj4gPiA+ICtMRExJQlMgKz0gLWxydGVfZWFsIC1scnRlX2hhc2ggLWxydGVfcmN1
DQo+ID4gPg0KPiA+ID4gICBFWFBPUlRfTUFQIDo9IHJ0ZV9scG1fdmVyc2lvbi5tYXANCj4gPiA+
DQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9scG0vbWVzb24uYnVpbGQgYi9saWIvbGli
cnRlX2xwbS9tZXNvbi5idWlsZA0KPiA+ID4gaW5kZXggMDIxYWM2ZDhkLi42Y2ZjMDgzYzUgMTAw
NjQ0DQo+ID4gPiAtLS0gYS9saWIvbGlicnRlX2xwbS9tZXNvbi5idWlsZA0KPiA+ID4gKysrIGIv
bGliL2xpYnJ0ZV9scG0vbWVzb24uYnVpbGQNCj4gPiA+IEBAIC03LDMgKzcsNCBAQCBoZWFkZXJz
ID0gZmlsZXMoJ3J0ZV9scG0uaCcsICdydGVfbHBtNi5oJykNCj4gPiA+ICAgIyB3aXRob3V0IHdv
cnJ5aW5nIGFib3V0IHdoaWNoIGFyY2hpdGVjdHVyZSB3ZSBhY3R1YWxseSBuZWVkDQo+ID4gPiAg
IGhlYWRlcnMgKz0gZmlsZXMoJ3J0ZV9scG1fYWx0aXZlYy5oJywgJ3J0ZV9scG1fbmVvbi5oJywg
J3J0ZV9scG1fc3NlLmgnKQ0KPiA+ID4gICBkZXBzICs9IFsnaGFzaCddDQo+ID4gPiArZGVwcyAr
PSBbJ3JjdSddDQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9scG0vcnRlX2xwbS5jIGIv
bGliL2xpYnJ0ZV9scG0vcnRlX2xwbS5jDQo+ID4gPiBpbmRleA0KPiA+ID4gMzhhYjUxMmE0Li4z
MGY1NDExNzkgMTAwNjQ0DQo+ID4gPiAtLS0gYS9saWIvbGlicnRlX2xwbS9ydGVfbHBtLmMNCj4g
PiA+ICsrKyBiL2xpYi9saWJydGVfbHBtL3J0ZV9scG0uYw0KPiA+ID4gQEAgLTEsNSArMSw2IEBA
DQo+ID4gPiAgIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gPiA+
ICAgICogQ29weXJpZ2h0KGMpIDIwMTAtMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiA+ID4gKyAq
IENvcHlyaWdodChjKSAyMDIwIEFybSBMaW1pdGVkDQo+ID4gPiAgICAqLw0KPiA+ID4NCj4gPiA+
ICAgI2luY2x1ZGUgPHN0cmluZy5oPg0KPiA+ID4gQEAgLTI0NiwxMiArMjQ3LDg1IEBAIHJ0ZV9s
cG1fZnJlZShzdHJ1Y3QgcnRlX2xwbSAqbHBtKQ0KPiA+ID4NCj4gPiA+ICAgcnRlX21jZmdfdGFp
bHFfd3JpdGVfdW5sb2NrKCk7DQo+ID4gPg0KPiA+ID4gK2lmIChscG0tPmRxKQ0KPiA+ID4gK3J0
ZV9yY3VfcXNicl9kcV9kZWxldGUobHBtLT5kcSk7DQo+ID4gPiAgIHJ0ZV9mcmVlKGxwbS0+dGJs
OCk7DQo+ID4gPiAgIHJ0ZV9mcmVlKGxwbS0+cnVsZXNfdGJsKTsNCj4gPiA+ICAgcnRlX2ZyZWUo
bHBtKTsNCj4gPiA+ICAgcnRlX2ZyZWUodGUpOw0KPiA+ID4gICB9DQo+ID4gPg0KPiA+ID4gK3N0
YXRpYyB2b2lkDQo+ID4gPiArX19scG1fcmN1X3FzYnJfZnJlZV9yZXNvdXJjZSh2b2lkICpwLCB2
b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbikgew0KPiA+ID4gK3N0cnVjdCBydGVfbHBtX3RibF9l
bnRyeSB6ZXJvX3RibDhfZW50cnkgPSB7MH07IHVpbnQzMl90DQo+ID4gPiArdGJsOF9ncm91cF9p
bmRleCA9ICoodWludDMyX3QgKilkYXRhOyBzdHJ1Y3QgcnRlX2xwbV90YmxfZW50cnkNCj4gPiA+
ICsqdGJsOCA9IChzdHJ1Y3QgcnRlX2xwbV90YmxfZW50cnkgKilwOw0KPiA+ID4gKw0KPiA+ID4g
K1JURV9TRVRfVVNFRChuKTsNCj4gPiA+ICsvKiBTZXQgdGJsOCBncm91cCBpbnZhbGlkICovDQo+
ID4gPiArX19hdG9taWNfc3RvcmUoJnRibDhbdGJsOF9ncm91cF9pbmRleF0sICZ6ZXJvX3RibDhf
ZW50cnksDQo+ID4gPiArX19BVE9NSUNfUkVMQVhFRCk7IH0NCj4gPiA+ICsNCj4gPiA+ICsvKiBB
c3NvY2lhdGUgUVNCUiB2YXJpYWJsZSB3aXRoIGFuIExQTSBvYmplY3QuDQo+ID4gPiArICovDQo+
ID4gPiAraW50DQo+ID4gPiArcnRlX2xwbV9yY3VfcXNicl9hZGQoc3RydWN0IHJ0ZV9scG0gKmxw
bSwgc3RydWN0IHJ0ZV9scG1fcmN1X2NvbmZpZw0KPiA+ICpjZmcsDQo+ID4gPiArc3RydWN0IHJ0
ZV9yY3VfcXNicl9kcSAqKmRxKQ0KPiA+ID4gK3sNCj4gPiA+ICtjaGFyIHJjdV9kcV9uYW1lW1JU
RV9SQ1VfUVNCUl9EUV9OQU1FU0laRV07DQo+ID4gPiArc3RydWN0IHJ0ZV9yY3VfcXNicl9kcV9w
YXJhbWV0ZXJzIHBhcmFtcyA9IHswfTsNCj4gPiA+ICsNCj4gPiA+ICtpZiAoKGxwbSA9PSBOVUxM
KSB8fCAoY2ZnID09IE5VTEwpKSB7IHJ0ZV9lcnJubyA9IEVJTlZBTDsgcmV0dXJuIDE7DQo+ID4g
PiArfQ0KPiA+ID4gKw0KPiA+ID4gK2lmIChscG0tPnYpIHsNCj4gPiA+ICtydGVfZXJybm8gPSBF
RVhJU1Q7DQo+ID4gPiArcmV0dXJuIDE7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK2lmIChj
ZmctPm1vZGUgPT0gUlRFX0xQTV9RU0JSX01PREVfU1lOQykgew0KPiA+ID4gKy8qIE5vIG90aGVy
IHRoaW5ncyB0byBkby4gKi8NCj4gPiA+ICt9IGVsc2UgaWYgKGNmZy0+bW9kZSA9PSBSVEVfTFBN
X1FTQlJfTU9ERV9EUSkgew0KPiA+ID4gKy8qIEluaXQgUVNCUiBkZWZlciBxdWV1ZS4gKi8NCj4g
PiA+ICtzbnByaW50ZihyY3VfZHFfbmFtZSwgc2l6ZW9mKHJjdV9kcV9uYW1lKSwgIkxQTV9SQ1Vf
JXMiLA0KPiA+ID4gK2xwbS0+bmFtZSk7IHBhcmFtcy5uYW1lID0gcmN1X2RxX25hbWU7IHBhcmFt
cy5zaXplID0gY2ZnLT5kcV9zaXplOw0KPiA+ID4gK2lmIChwYXJhbXMuc2l6ZSA9PSAwKSBwYXJh
bXMuc2l6ZSA9IGxwbS0+bnVtYmVyX3RibDhzOw0KPiA+ID4gK3BhcmFtcy50cmlnZ2VyX3JlY2xh
aW1fbGltaXQgPSBjZmctPnJlY2xhaW1fdGhkOyBpZg0KPiA+ID4gKyhwYXJhbXMudHJpZ2dlcl9y
ZWNsYWltX2xpbWl0ID09IDApDQo+ID4NCj4gPg0KPiA+IFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJs
ZSBmb3IgYSB1c2VyIHRvIGNvbmZpZ3VyZSByZWNsYW1hdGlvbg0KPiA+IHRyaWdnZXJpbmcgd2l0
aCBldmVyeSBjYWxsLiBTaG91bGQgd2UgYWxsb3cgaXQ/DQo+IFllcywgdXNlIChyZWNsYWltX3Ro
ZCA9IDApIHRvIHRyaWdnZXIgcmVjbGFtYXRpb24gYXQgZWFjaCBkcSBlbnF1ZXVlIHNob3VsZA0K
PiBiZSBhIHZhbGlkIGNhc2UuDQo+IFdpbGwgcmVtb3ZlIHZhbHVlIG92ZXJyaWRpbmcgYW5kIHRh
a2UgaXQgYXMgaXMuDQo+ID4NCj4gPg0KPiA+ID4gK3BhcmFtcy50cmlnZ2VyX3JlY2xhaW1fbGlt
aXQgPQ0KPiA+ID4gK1JURV9MUE1fUkNVX0RRX1JFQ0xBSU1fVEhEOw0KPiA+ID4gK3BhcmFtcy5t
YXhfcmVjbGFpbV9zaXplID0gY2ZnLT5yZWNsYWltX21heDsgaWYNCj4gPiA+ICsocGFyYW1zLm1h
eF9yZWNsYWltX3NpemUgPT0gMCkgcGFyYW1zLm1heF9yZWNsYWltX3NpemUgPQ0KPiA+IFJURV9M
UE1fUkNVX0RRX1JFQ0xBSU1fTUFYOw0KPiA+ID4gK3BhcmFtcy5lc2l6ZSA9IHNpemVvZih1aW50
MzJfdCk7LyogdGJsOCBncm91cCBpbmRleCAqLw0KPiA+ID4gK3BhcmFtcy5mcmVlX2ZuID0gX19s
cG1fcmN1X3FzYnJfZnJlZV9yZXNvdXJjZTsgcGFyYW1zLnAgPQ0KPiA+ID4gK2xwbS0+dGJsODsN
Cj4gPg0KPiA+DQo+ID4gSSB0aGluayBpdCdzIGJldHRlciB0byBwYXNzIHRoZSBMUE0gcG9pbnRl
ciBoZXJlIHJhdGhlciB0aGFuIHRibDgsIGZvcg0KPiA+IGV4YW1wbGUsIGluIGNhc2Ugd2UgZGVj
aWRlIHRvIGFkZCBzb21lIGNvdW50ZXJzIGluIHRoZSBmdXR1cmUNCj4gVXNlIExQTSBwb2ludGVy
IGlzIG1vcmUgZXh0ZW5kYWJsZS4NCj4gV2lsbCBjaGFuZ2UgaW4gbmV4dCB2ZXJzaW9uLg0KPiA+
DQo+ID4NCj4gPiA+ICtwYXJhbXMudiA9IGNmZy0+djsNCj4gPiA+ICtscG0tPmRxID0gcnRlX3Jj
dV9xc2JyX2RxX2NyZWF0ZSgmcGFyYW1zKTsNCj4gPiA+ICtpZiAobHBtLT5kcSA9PSBOVUxMKSB7
DQo+ID4gPiArUlRFX0xPRyhFUlIsIExQTSwNCj4gPiA+ICsiTFBNIFFTIGRlZmVyIHF1ZXVlIGNy
ZWF0aW9uDQo+ID4gZmFpbGVkXG4iKTsNCj4gPiA+ICtyZXR1cm4gMTsNCj4gPiA+ICt9DQo+ID4g
PiAraWYgKGRxKQ0KPiA+ID4gKypkcSA9IGxwbS0+ZHE7DQo+ID4gPiArfSBlbHNlIHsNCj4gPiA+
ICtydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gPiArcmV0dXJuIDE7DQo+ID4gPiArfQ0KPiA+ID4g
K2xwbS0+cmN1X21vZGUgPSBjZmctPm1vZGU7DQo+ID4gPiArbHBtLT52ID0gY2ZnLT52Ow0KPiA+
ID4gKw0KPiA+ID4gK3JldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICAgLyoNCj4g
PiA+ICAgICogQWRkcyBhIHJ1bGUgdG8gdGhlIHJ1bGUgdGFibGUuDQo+ID4gPiAgICAqDQo+ID4g
PiBAQCAtMzk0LDE0ICs0NjgsMTUgQEAgcnVsZV9maW5kKHN0cnVjdCBydGVfbHBtICpscG0sIHVp
bnQzMl90DQo+ID4gaXBfbWFza2VkLCB1aW50OF90IGRlcHRoKQ0KPiA+ID4gICAgKiBGaW5kLCBj
bGVhbiBhbmQgYWxsb2NhdGUgYSB0Ymw4Lg0KPiA+ID4gICAgKi8NCj4gPiA+ICAgc3RhdGljIGlu
dDMyX3QNCj4gPiA+IC10Ymw4X2FsbG9jKHN0cnVjdCBydGVfbHBtX3RibF9lbnRyeSAqdGJsOCwg
dWludDMyX3QgbnVtYmVyX3RibDhzKQ0KPiA+ID4gK190Ymw4X2FsbG9jKHN0cnVjdCBydGVfbHBt
ICpscG0pDQo+ID4gPiAgIHsNCj4gPiA+ICAgdWludDMyX3QgZ3JvdXBfaWR4OyAvKiB0Ymw4IGdy
b3VwIGluZGV4LiAqLw0KPiA+ID4gICBzdHJ1Y3QgcnRlX2xwbV90YmxfZW50cnkgKnRibDhfZW50
cnk7DQo+ID4gPg0KPiA+ID4gICAvKiBTY2FuIHRocm91Z2ggdGJsOCB0byBmaW5kIGEgZnJlZSAo
aS5lLiBJTlZBTElEKSB0Ymw4IGdyb3VwLiAqLw0KPiA+ID4gLWZvciAoZ3JvdXBfaWR4ID0gMDsg
Z3JvdXBfaWR4IDwgbnVtYmVyX3RibDhzOyBncm91cF9pZHgrKykgew0KPiA+ID4gLXRibDhfZW50
cnkgPSAmdGJsOFtncm91cF9pZHggKg0KPiA+IFJURV9MUE1fVEJMOF9HUk9VUF9OVU1fRU5UUklF
U107DQo+ID4gPiArZm9yIChncm91cF9pZHggPSAwOyBncm91cF9pZHggPCBscG0tPm51bWJlcl90
Ymw4czsgZ3JvdXBfaWR4KyspIHsNCj4gPiA+ICt0Ymw4X2VudHJ5ID0gJmxwbS0+dGJsOFtncm91
cF9pZHggKg0KPiA+ID4gKw0KPiA+IFJURV9MUE1fVEJMOF9HUk9VUF9OVU1fRU5UUklFU107DQo+
ID4gPiAgIC8qIElmIGEgZnJlZSB0Ymw4IGdyb3VwIGlzIGZvdW5kIGNsZWFuIGl0IGFuZCBzZXQg
YXMgVkFMSUQuICovDQo+ID4gPiAgIGlmICghdGJsOF9lbnRyeS0+dmFsaWRfZ3JvdXApIHsNCj4g
PiA+ICAgc3RydWN0IHJ0ZV9scG1fdGJsX2VudHJ5IG5ld190Ymw4X2VudHJ5ID0geyBAQCAtNDI3
LDE0ICs1MDIsNDAgQEANCj4gPiA+IHRibDhfYWxsb2Moc3RydWN0IHJ0ZV9scG1fdGJsX2VudHJ5
ICp0Ymw4LA0KPiA+IHVpbnQzMl90IG51bWJlcl90Ymw4cykNCj4gPiA+ICAgcmV0dXJuIC1FTk9T
UEM7DQo+ID4gPiAgIH0NCj4gPiA+DQo+ID4gPiArc3RhdGljIGludDMyX3QNCj4gPiA+ICt0Ymw4
X2FsbG9jKHN0cnVjdCBydGVfbHBtICpscG0pDQo+ID4gPiArew0KPiA+ID4gK2ludDMyX3QgZ3Jv
dXBfaWR4OyAvKiB0Ymw4IGdyb3VwIGluZGV4LiAqLw0KPiA+ID4gKw0KPiA+ID4gK2dyb3VwX2lk
eCA9IF90Ymw4X2FsbG9jKGxwbSk7DQo+ID4gPiAraWYgKChncm91cF9pZHggPCAwKSAmJiAobHBt
LT5kcSAhPSBOVUxMKSkgew0KPiA+DQo+ID4NCj4gPiBJIHRoaW5rIChncm91cF9pZHggPT0gLUVO
T1NQQykgd2lsbCBiZSBzYWZlcg0KPiBXaWxsIGNoYW5nZSBpdCBpbiBuZXh0IHZlcnNpb24uDQo+
ID4NCj4gPg0KPiA+ID4gKy8qIElmIHRoZXJlIGFyZSBubyB0Ymw4IGdyb3VwcyB0cnkgdG8gcmVj
bGFpbSBvbmUuICovIGlmDQo+ID4gPiArKHJ0ZV9yY3VfcXNicl9kcV9yZWNsYWltKGxwbS0+ZHEs
IDEsIE5VTEwsIE5VTEwsIE5VTEwpDQo+ID4gPT0gMCkNCj4gPiA+ICtncm91cF9pZHggPSBfdGJs
OF9hbGxvYyhscG0pOw0KPiA+DQo+ID4NCj4gPiBJJ20gbm90IHJlYWxseSBoYXBweSB3aXRoIHRo
aXMgYXBwcm9hY2guIF90Ymw4X2FsbG9jKCkgcHJvZHVjZXMgbGluZWFyDQo+ID4gc2NhbiB0aHJv
dWdoIHRoZSBtZW1vcnkgdG8gZmluZCBhIGZyZWUgZ3JvdXBfaWR4IGFuZCBpdCBpcyB0aGUgc2xv
d2VzdA0KPiA+IHBhcnQgb2YgcnRlX2xwbV9hZGQoKS4NCj4gPiBIZXJlIGFmdGVyIHJlY2xhbWF0
aW9uIG9mIHNvbWUgZ3JvdXAgaW5kZXggd2UgbmVlZCB0byByZXNjYW4gYSBtZW1vcnkNCj4gPiBh
Z2FpbiB0byBmaW5kIGl0LiBJdCB3b3VsZCBiZSBncmVhdCBpZiB0aGVyZSB3aWxsIGJlIHNvbWUg
d2F5IHRvDQo+ID4gcmV0dXJuIHJlY2xhaW1lZCBlbGVtZW50cy4gT3IganVzdCB0byBkZXF1ZXVl
IGVsZW1lbnRzIGZyb20gZHEgYW5kDQo+ID4gcmVjbGFpbSB0aGVtIG1hbnVhbGx5Lg0KPiBJIHRo
aW5rIHRoZXJlIGlzIGxpdHRsZSBjaGFuY2UgYSByZXNjYW4gd2lsbCBiZSBuZWVkZWQuIElmIFJD
VSBRU0JSIGRlZmVyDQo+IHF1ZXVlIHRyaWdnZXJfcmVjbGFpbV9saW1pdCBpcyBjb25maWd1cmVk
IHdpdGggcmVhc29uYWJsZSB2YWx1ZSwgdGJsOCBncm91cHMNCj4gd2lsbCBiZSByZWNsYWltZWQg
cmVndWxhcmx5LiBTbyBkZWZlciBxdWV1ZSB3b24ndCBnZXQgdG9vIGxvbmcuDQo+IA0KPiBSZXR1
cm4gcmVjbGFpbWVkIGVsZW1lbnRzIG1ha2VzIEFQSSBjb21wbGV4LiBOb3Qgc3VyZSBpZiBpdCBp
cyB1c2VmdWwgZm9yDQo+IG90aGVyIHVzZSBjYXNlcy4NCj4gQEhvbm5hcHBhIE5hZ2FyYWhhbGxp
LCBhbnkgaWRlYT8NCkkgdGhpbmsgaXQgaXMgYSBwcm9ibGVtIHRoYXQgc2hvdWxkIGJlIHNvbHZl
ZCBpbiBMUE0uIEkgaGFkIGhhY2tlZCB1cCB0aGUgYWxsb2NhdGlvbiBzY2hlbWUgdG8gdXNlIGEg
cmluZyB3aGVuIEkgd2FzIGRvaW5nIHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nLiBJIGNhbiBzZW5k
IHRoYXQgb3V0IGlmIHJlcXVpcmVkLg0KDQo+ID4NCj4gPg0KPiA+ID4gK30NCj4gPiA+ICsNCj4g
PiA+ICtyZXR1cm4gZ3JvdXBfaWR4Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICAgc3RhdGlj
IHZvaWQNCj4gPiA+IC10Ymw4X2ZyZWUoc3RydWN0IHJ0ZV9scG1fdGJsX2VudHJ5ICp0Ymw4LCB1
aW50MzJfdA0KPiA+ID4gdGJsOF9ncm91cF9zdGFydCkNCj4gPiA+ICt0Ymw4X2ZyZWUoc3RydWN0
IHJ0ZV9scG0gKmxwbSwgdWludDMyX3QgdGJsOF9ncm91cF9zdGFydCkNCj4gPiA+ICAgew0KPiA+
ID4gLS8qIFNldCB0Ymw4IGdyb3VwIGludmFsaWQqLw0KPiA+ID4gICBzdHJ1Y3QgcnRlX2xwbV90
YmxfZW50cnkgemVyb190Ymw4X2VudHJ5ID0gezB9Ow0KPiA+ID4NCj4gPiA+IC1fX2F0b21pY19z
dG9yZSgmdGJsOFt0Ymw4X2dyb3VwX3N0YXJ0XSwgJnplcm9fdGJsOF9lbnRyeSwNCj4gPiA+IC1f
X0FUT01JQ19SRUxBWEVEKTsNCj4gPiA+ICtpZiAoIWxwbS0+dikgew0KPiA+ID4gKy8qIFNldCB0
Ymw4IGdyb3VwIGludmFsaWQqLw0KPiA+ID4gK19fYXRvbWljX3N0b3JlKCZscG0tPnRibDhbdGJs
OF9ncm91cF9zdGFydF0sDQo+ID4gJnplcm9fdGJsOF9lbnRyeSwNCj4gPiA+ICtfX0FUT01JQ19S
RUxBWEVEKTsNCj4gPiA+ICt9IGVsc2UgaWYgKGxwbS0+cmN1X21vZGUgPT0gUlRFX0xQTV9RU0JS
X01PREVfU1lOQykgew0KPiA+ID4gKy8qIFdhaXQgZm9yIHF1aWVzY2VudCBzdGF0ZSBjaGFuZ2Uu
ICovDQo+ID4gPiArcnRlX3JjdV9xc2JyX3N5bmNocm9uaXplKGxwbS0+diwNCj4gPiBSVEVfUVNC
Ul9USFJJRF9JTlZBTElEKTsNCj4gPiA+ICsvKiBTZXQgdGJsOCBncm91cCBpbnZhbGlkKi8NCj4g
PiA+ICtfX2F0b21pY19zdG9yZSgmbHBtLT50Ymw4W3RibDhfZ3JvdXBfc3RhcnRdLA0KPiA+ICZ6
ZXJvX3RibDhfZW50cnksDQo+ID4gPiArX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gPiArfSBlbHNl
IGlmIChscG0tPnJjdV9tb2RlID09IFJURV9MUE1fUVNCUl9NT0RFX0RRKSB7DQo+ID4gPiArLyog
UHVzaCBpbnRvIFFTQlIgZGVmZXIgcXVldWUuICovDQo+ID4gPiArcnRlX3JjdV9xc2JyX2RxX2Vu
cXVldWUobHBtLT5kcSwgKHZvaWQNCj4gPiAqKSZ0Ymw4X2dyb3VwX3N0YXJ0KTsNCj4gPiA+ICt9
DQo+ID4gPiAgIH0NCj4gPiA+DQo+ID4gPiAgIHN0YXRpYyBfX3J0ZV9ub2lubGluZSBpbnQzMl90
DQo+ID4gPiBAQCAtNTIzLDcgKzYyNCw3IEBAIGFkZF9kZXB0aF9iaWcoc3RydWN0IHJ0ZV9scG0g
KmxwbSwgdWludDMyX3QNCj4gPiBpcF9tYXNrZWQsIHVpbnQ4X3QgZGVwdGgsDQo+ID4gPg0KPiA+
ID4gICBpZiAoIWxwbS0+dGJsMjRbdGJsMjRfaW5kZXhdLnZhbGlkKSB7DQo+ID4gPiAgIC8qIFNl
YXJjaCBmb3IgYSBmcmVlIHRibDggZ3JvdXAuICovICAtdGJsOF9ncm91cF9pbmRleCA9DQo+ID4g
PnRibDhfYWxsb2MobHBtLT50Ymw4LCBscG0tIG51bWJlcl90Ymw4cyk7DQo+ID4gPiArdGJsOF9n
cm91cF9pbmRleCA9IHRibDhfYWxsb2MobHBtKTsNCj4gPiA+DQo+ID4gPiAgIC8qIENoZWNrIHRi
bDggYWxsb2NhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4gKi8NCj4gPiA+ICAgaWYgKHRibDhfZ3JvdXBf
aW5kZXggPCAwKSB7DQo+ID4gPiBAQCAtNTY5LDcgKzY3MCw3IEBAIGFkZF9kZXB0aF9iaWcoc3Ry
dWN0IHJ0ZV9scG0gKmxwbSwgdWludDMyX3QNCj4gPiBpcF9tYXNrZWQsIHVpbnQ4X3QgZGVwdGgs
DQo+ID4gPiAgIH0gLyogSWYgdmFsaWQgZW50cnkgYnV0IG5vdCBleHRlbmRlZCBjYWxjdWxhdGUg
dGhlIGluZGV4IGludG8gVGFibGU4LiAqLw0KPiA+ID4gICBlbHNlIGlmIChscG0tPnRibDI0W3Ri
bDI0X2luZGV4XS52YWxpZF9ncm91cCA9PSAwKSB7DQo+ID4gPiAgIC8qIFNlYXJjaCBmb3IgZnJl
ZSB0Ymw4IGdyb3VwLiAqLw0KPiA+ID4gLXRibDhfZ3JvdXBfaW5kZXggPSB0Ymw4X2FsbG9jKGxw
bS0+dGJsOCwgbHBtLSBudW1iZXJfdGJsOHMpOw0KPiA+ID4gK3RibDhfZ3JvdXBfaW5kZXggPSB0
Ymw4X2FsbG9jKGxwbSk7DQo+ID4gPg0KPiA+ID4gICBpZiAodGJsOF9ncm91cF9pbmRleCA8IDAp
IHsNCj4gPiA+ICAgcmV0dXJuIHRibDhfZ3JvdXBfaW5kZXg7DQo+ID4gPiBAQCAtOTc3LDcgKzEw
NzgsNyBAQCBkZWxldGVfZGVwdGhfYmlnKHN0cnVjdCBydGVfbHBtICpscG0sIHVpbnQzMl90DQo+
ID4gaXBfbWFza2VkLA0KPiA+ID4gICAgKi8NCj4gPiA+ICAgbHBtLT50YmwyNFt0YmwyNF9pbmRl
eF0udmFsaWQgPSAwOw0KPiA+ID4gICBfX2F0b21pY190aHJlYWRfZmVuY2UoX19BVE9NSUNfUkVM
RUFTRSk7DQo+ID4gPiAtdGJsOF9mcmVlKGxwbS0+dGJsOCwgdGJsOF9ncm91cF9zdGFydCk7DQo+
ID4gPiArdGJsOF9mcmVlKGxwbSwgdGJsOF9ncm91cF9zdGFydCk7DQo+ID4gPiAgIH0gZWxzZSBp
ZiAodGJsOF9yZWN5Y2xlX2luZGV4ID4gLTEpIHsNCj4gPiA+ICAgLyogVXBkYXRlIHRibDI0IGVu
dHJ5LiAqLw0KPiA+ID4gICBzdHJ1Y3QgcnRlX2xwbV90YmxfZW50cnkgbmV3X3RibDI0X2VudHJ5
ID0geyBAQCAtOTkzLDcgKzEwOTQsNyBAQA0KPiA+ID4gZGVsZXRlX2RlcHRoX2JpZyhzdHJ1Y3Qg
cnRlX2xwbSAqbHBtLCB1aW50MzJfdA0KPiA+IGlwX21hc2tlZCwNCj4gPiA+ICAgX19hdG9taWNf
c3RvcmUoJmxwbS0+dGJsMjRbdGJsMjRfaW5kZXhdLA0KPiA+ICZuZXdfdGJsMjRfZW50cnksDQo+
ID4gPiAgIF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4gICBfX2F0b21pY190aHJlYWRfZmVuY2Uo
X19BVE9NSUNfUkVMRUFTRSk7DQo+ID4gPiAtdGJsOF9mcmVlKGxwbS0+dGJsOCwgdGJsOF9ncm91
cF9zdGFydCk7DQo+ID4gPiArdGJsOF9mcmVlKGxwbSwgdGJsOF9ncm91cF9zdGFydCk7DQo+ID4g
PiAgIH0NCj4gPiA+ICAgI3VuZGVmIGdyb3VwX2lkeA0KPiA+ID4gICByZXR1cm4gMDsNCj4gPiA+
IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2xwbS9ydGVfbHBtLmggYi9saWIvbGlicnRlX2xwbS9y
dGVfbHBtLmgNCj4gPiA+IGluZGV4IGI5ZDQ5YWM4Ny4uOGMwNTQ1MDlhIDEwMDY0NA0KPiA+ID4g
LS0tIGEvbGliL2xpYnJ0ZV9scG0vcnRlX2xwbS5oDQo+ID4gPiArKysgYi9saWIvbGlicnRlX2xw
bS9ydGVfbHBtLmgNCj4gPiA+IEBAIC0xLDUgKzEsNiBAQA0KPiA+ID4gICAvKiBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gPiAgICAqIENvcHlyaWdodChjKSAyMDEw
LTIwMTQgSW50ZWwgQ29ycG9yYXRpb24NCj4gPiA+ICsgKiBDb3B5cmlnaHQoYykgMjAyMCBBcm0g
TGltaXRlZA0KPiA+ID4gICAgKi8NCj4gPiA+DQo+ID4gPiAgICNpZm5kZWYgX1JURV9MUE1fSF8N
Cj4gPiA+IEBAIC0yMCw2ICsyMSw3IEBADQo+ID4gPiAgICNpbmNsdWRlIDxydGVfbWVtb3J5Lmg+
DQo+ID4gPiAgICNpbmNsdWRlIDxydGVfY29tbW9uLmg+DQo+ID4gPiAgICNpbmNsdWRlIDxydGVf
dmVjdC5oPg0KPiA+ID4gKyNpbmNsdWRlIDxydGVfcmN1X3FzYnIuaD4NCj4gPiA+DQo+ID4gPiAg
ICNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ID4gICBleHRlcm4gIkMiIHsNCj4gPiA+IEBAIC02Miw2
ICs2NCwxNyBAQCBleHRlcm4gIkMiIHsNCj4gPiA+ICAgLyoqIEJpdG1hc2sgdXNlZCB0byBpbmRp
Y2F0ZSBzdWNjZXNzZnVsIGxvb2t1cCAqLw0KPiA+ID4gICAjZGVmaW5lIFJURV9MUE1fTE9PS1VQ
X1NVQ0NFU1MgICAgICAgICAgMHgwMTAwMDAwMA0KPiA+ID4NCj4gPiA+ICsvKiogQGludGVybmFs
IERlZmF1bHQgdGhyZXNob2xkIHRvIHRyaWdnZXIgUkNVIGRlZmVyIHF1ZXVlDQo+IHJlY2xhaW1h
dGlvbi4NCj4gPiAqLw0KPiA+ID4gKyNkZWZpbmUgUlRFX0xQTV9SQ1VfRFFfUkVDTEFJTV9USEQz
Mg0KPiA+ID4gKw0KPiA+ID4gKy8qKiBAaW50ZXJuYWwgRGVmYXVsdCBSQ1UgZGVmZXIgcXVldWUg
ZW50cmllcyB0byByZWNsYWltIGluIG9uZSBnby4NCj4gPiA+ICsqLyAjZGVmaW5lIFJURV9MUE1f
UkNVX0RRX1JFQ0xBSU1fTUFYMTYNCj4gPiA+ICsNCj4gPiA+ICsvKiBDcmVhdGUgZGVmZXIgcXVl
dWUgZm9yIHJlY2xhaW0uICovICNkZWZpbmUNCj4gUlRFX0xQTV9RU0JSX01PREVfRFEwDQo+ID4g
PiArLyogVXNlIGJsb2NraW5nIG1vZGUgcmVjbGFpbS4gTm8gZGVmZXIgcXVldWUgY3JlYXRlZC4g
Ki8gI2RlZmluZQ0KPiA+ID4gK1JURV9MUE1fUVNCUl9NT0RFX1NZTkMweDAxDQo+ID4NCj4gPg0K
PiA+IHVzaW5nIGVudW1zIGluc3RlYWQgb2YgZGVmaW5lcz8NCj4gV2lsbCBjb252ZXJ0IHRvIGVu
dW1zIGluIG5leHQgdmVyc2lvbi4NCj4gPg0KPiA+DQo+ID4gPiArDQo+ID4gPiAgICNpZiBSVEVf
QllURV9PUkRFUiA9PSBSVEVfTElUVExFX0VORElBTg0KPiA+ID4gICAvKiogQGludGVybmFsIFRi
bDI0IGVudHJ5IHN0cnVjdHVyZS4gKi8NCj4gPiA+ICAgX19leHRlbnNpb25fXw0KPiA+ID4gQEAg
LTEzMCw2ICsxNDMsMjggQEAgc3RydWN0IHJ0ZV9scG0gew0KPiA+ID4gICBfX3J0ZV9jYWNoZV9h
bGlnbmVkOyAvKio8IExQTSB0YmwyNCB0YWJsZS4gKi8NCj4gPiA+ICAgc3RydWN0IHJ0ZV9scG1f
dGJsX2VudHJ5ICp0Ymw4OyAvKio8IExQTSB0Ymw4IHRhYmxlLiAqLw0KPiA+ID4gICBzdHJ1Y3Qg
cnRlX2xwbV9ydWxlICpydWxlc190Ymw7IC8qKjwgTFBNIHJ1bGVzLiAqLw0KPiA+ID4gKw0KPiA+
ID4gKy8qIFJDVSBjb25maWcuICovDQo+ID4gPiArc3RydWN0IHJ0ZV9yY3VfcXNiciAqdjsvKiBS
Q1UgUVNCUiB2YXJpYWJsZS4gKi8gdWludDMyX3QNCj4gPiA+ICtyY3VfbW9kZTsvKiBCbG9ja2lu
ZywgZGVmZXIgcXVldWUuICovIHN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxOy8qDQo+ID4gPiAr
UkNVIFFTQlIgZGVmZXIgcXVldWUuICovIH07DQo+ID4gPiArDQo+ID4gPiArLyoqIExQTSBSQ1Ug
UVNCUiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gKi8gc3RydWN0DQo+ID4gPiArcnRlX2xwbV9y
Y3VfY29uZmlnIHsgc3RydWN0IHJ0ZV9yY3VfcXNiciAqdjsvKiBSQ1UgUVNCUiB2YXJpYWJsZS4N
Cj4gPiA+ICsqLw0KPiA+ID4gKy8qIE1vZGUgb2YgUkNVIFFTQlIuIFJURV9MUE1fUVNCUl9NT0RF
X3h4eA0KPiA+ID4gKyAqICcwJyBmb3IgZGVmYXVsdDogY3JlYXRlIGRlZmVyIHF1ZXVlIGZvciBy
ZWNsYWltLg0KPiA+ID4gKyAqLw0KPiA+ID4gK3VpbnQzMl90IG1vZGU7DQo+ID4gPiArLyogUkNV
IGRlZmVyIHF1ZXVlIHNpemUuIGRlZmF1bHQ6IGxwbS0+bnVtYmVyX3RibDhzLiAqLyB1aW50MzJf
dA0KPiA+ID4gK2RxX3NpemU7IHVpbnQzMl90IHJlY2xhaW1fdGhkOy8qIFRocmVzaG9sZCB0byB0
cmlnZ2VyIGF1dG8gcmVjbGFpbS4NCj4gPiA+ICsgKiBkZWZhdWx0Og0KPiA+IFJURV9MUE1fUkNV
X0RRX1JFQ0xBSU1fVFJIRC4NCj4gPiA+ICsgKi8NCj4gPiA+ICt1aW50MzJfdCByZWNsYWltX21h
eDsvKiBNYXggZW50cmllcyB0byByZWNsYWltIGluIG9uZSBnby4NCj4gPiA+ICsgKiBkZWZhdWx0
Og0KPiA+IFJURV9MUE1fUkNVX0RRX1JFQ0xBSU1fTUFYLg0KPiA+ID4gKyAqLw0KPiA+ID4gICB9
Ow0KPiA+ID4NCj4gPiA+ICAgLyoqDQo+ID4gPiBAQCAtMTc5LDYgKzIxNCwzMCBAQCBydGVfbHBt
X2ZpbmRfZXhpc3RpbmcoY29uc3QgY2hhciAqbmFtZSk7DQo+ID4gPiAgIHZvaWQNCj4gPiA+ICAg
cnRlX2xwbV9mcmVlKHN0cnVjdCBydGVfbHBtICpscG0pOw0KPiA+ID4NCj4gPiA+ICsvKioNCj4g
PiA+ICsgKiBAd2FybmluZw0KPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5
IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ID4gKyAqDQo+ID4gPiArICogQXNzb2Np
YXRlIFJDVSBRU0JSIHZhcmlhYmxlIHdpdGggYW4gTFBNIG9iamVjdC4NCj4gPiA+ICsgKg0KPiA+
ID4gKyAqIEBwYXJhbSBscG0NCj4gPiA+ICsgKiAgIHRoZSBscG0gb2JqZWN0IHRvIGFkZCBSQ1Ug
UVNCUg0KPiA+ID4gKyAqIEBwYXJhbSBjZmcNCj4gPiA+ICsgKiAgIFJDVSBRU0JSIGNvbmZpZ3Vy
YXRpb24NCj4gPiA+ICsgKiBAcGFyYW0gZHENCj4gPiA+ICsgKiAgIGhhbmRsZXIgb2YgY3JlYXRl
ZCBSQ1UgUVNCUiBkZWZlciBxdWV1ZQ0KPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ICsgKiAgIE9u
IHN1Y2Nlc3MgLSAwDQo+ID4gPiArICogICBPbiBlcnJvciAtIDEgd2l0aCBlcnJvciBjb2RlIHNl
dCBpbiBydGVfZXJybm8uDQo+ID4gPiArICogICBQb3NzaWJsZSBydGVfZXJybm8gY29kZXMgYXJl
Og0KPiA+ID4gKyAqICAgLSBFSU5WQUwgLSBpbnZhbGlkIHBvaW50ZXINCj4gPiA+ICsgKiAgIC0g
RUVYSVNUIC0gYWxyZWFkeSBhZGRlZCBRU0JSDQo+ID4gPiArICogICAtIEVOT01FTSAtIG1lbW9y
eSBhbGxvY2F0aW9uIGZhaWx1cmUNCj4gPiA+ICsgKi8NCj4gPiA+ICtfX3J0ZV9leHBlcmltZW50
YWwNCj4gPiA+ICtpbnQgcnRlX2xwbV9yY3VfcXNicl9hZGQoc3RydWN0IHJ0ZV9scG0gKmxwbSwg
c3RydWN0DQo+ID4gcnRlX2xwbV9yY3VfY29uZmlnICpjZmcsDQo+ID4gPiArc3RydWN0IHJ0ZV9y
Y3VfcXNicl9kcSAqKmRxKTsNCj4gPiA+ICsNCj4gPiA+ICAgLyoqDQo+ID4gPiAgICAqIEFkZCBh
IHJ1bGUgdG8gdGhlIExQTSB0YWJsZS4NCj4gPiA+ICAgICoNCj4gPiA+IGRpZmYgLS1naXQgYS9s
aWIvbGlicnRlX2xwbS9ydGVfbHBtX3ZlcnNpb24ubWFwDQo+ID4gYi9saWIvbGlicnRlX2xwbS9y
dGVfbHBtX3ZlcnNpb24ubWFwDQo+ID4gPiBpbmRleCA1MDBmNThiODAuLmJmY2NkN2VhYyAxMDA2
NDQNCj4gPiA+IC0tLSBhL2xpYi9saWJydGVfbHBtL3J0ZV9scG1fdmVyc2lvbi5tYXANCj4gPiA+
ICsrKyBiL2xpYi9saWJydGVfbHBtL3J0ZV9scG1fdmVyc2lvbi5tYXANCj4gPiA+IEBAIC0yMSwz
ICsyMSw5IEBAIERQREtfMjAuMCB7DQo+ID4gPg0KPiA+ID4gICBsb2NhbDogKjsNCj4gPiA+ICAg
fTsNCj4gPiA+ICsNCj4gPiA+ICtFWFBFUklNRU5UQUwgew0KPiA+ID4gK2dsb2JhbDoNCj4gPiA+
ICsNCj4gPiA+ICtydGVfbHBtX3JjdV9xc2JyX2FkZDsNCj4gPiA+ICt9Ow0KPiA+DQo+ID4gLS0N
Cj4gPiBSZWdhcmRzLA0KPiA+IFZsYWRpbWlyDQo+IA0KDQo=