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 dpdk.space (Postfix) with ESMTP id D79EDA0096
	for <public@inbox.dpdk.org>; Fri, 12 Apr 2019 22:21:46 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id A34C01B3E0;
	Fri, 12 Apr 2019 22:21:15 +0200 (CEST)
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 (mail-eopbgr40044.outbound.protection.outlook.com [40.107.4.44])
 by dpdk.org (Postfix) with ESMTP id BC9331B3D7
 for <dev@dpdk.org>; Fri, 12 Apr 2019 22:21:10 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector1-arm-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PSObT+URMHZAybBNp/rLxVu+r/5/qMEHCJKIBl/6/90=;
 b=ObpBIxOkQx8/8VImlfzWoVjA8H+i0thkICxJa85dvxNRI/k4H5AcZyhQHZ9xjhhpKZTirI39SrFVYb1yZcrtGvMXSsYg+ul/iCXnFIcwTLn+6Cc8LI52k8yXyojnePC+ova3DwPuHqAJKB2GXlk6Tc05ESFLA+I0enxjOWEnyDc=
Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.152) by
 VE1PR08MB4701.eurprd08.prod.outlook.com (10.255.114.143) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.1771.18; Fri, 12 Apr 2019 20:21:08 +0000
Received: from VE1PR08MB5149.eurprd08.prod.outlook.com
 ([fe80::e0ae:ecad:ec5:8177]) by VE1PR08MB5149.eurprd08.prod.outlook.com
 ([fe80::e0ae:ecad:ec5:8177%2]) with mapi id 15.20.1792.016; Fri, 12 Apr 2019
 20:21:08 +0000
From: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
To: "paulmck@linux.ibm.com" <paulmck@linux.ibm.com>
CC: "konstantin.ananyev@intel.com" <konstantin.ananyev@intel.com>,
 "stephen@networkplumber.org" <stephen@networkplumber.org>,
 "marko.kovacevic@intel.com" <marko.kovacevic@intel.com>, "dev@dpdk.org"
 <dev@dpdk.org>, "Gavin Hu (Arm Technology China)" <Gavin.Hu@arm.com>, Dharmik
 Thakkar <Dharmik.Thakkar@arm.com>, Malvika Gupta <Malvika.Gupta@arm.com>, nd
 <nd@arm.com>, nd <nd@arm.com>
Thread-Topic: [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism
Thread-Index: AQHU78lDsy4W0sThdUi8p6MItiPVFqY2RtWAgADPY4CAANKj8A==
Date: Fri, 12 Apr 2019 20:21:08 +0000
Message-ID:
 <VE1PR08MB514982FC1C3359449CC3E44C98280@VE1PR08MB5149.eurprd08.prod.outlook.com>
References: <20181122033055.3431-1-honnappa.nagarahalli@arm.com>
 <20190410112006.21644-1-honnappa.nagarahalli@arm.com>
 <20190410112006.21644-2-honnappa.nagarahalli@arm.com>
 <20190410181432.GO14111@linux.ibm.com>
 <VE1PR08MB514913D38027329012FD4B9C982F0@VE1PR08MB5149.eurprd08.prod.outlook.com>
 <20190411152613.GZ14111@linux.ibm.com>
In-Reply-To: <20190411152613.GZ14111@linux.ibm.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=Honnappa.Nagarahalli@arm.com; 
x-originating-ip: [217.140.111.135]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 1da5ed42-b893-4a3e-0bfa-08d6bf84661c
x-ms-office365-filtering-ht: Tenant
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600139)(711020)(4605104)(4618075)(2017052603328)(7193020);
 SRVR:VE1PR08MB4701; 
x-ms-traffictypediagnostic: VE1PR08MB4701:
nodisclaimer: True
x-microsoft-antispam-prvs: <VE1PR08MB47015884CD99E415CAF9A7DD98280@VE1PR08MB4701.eurprd08.prod.outlook.com>
x-forefront-prvs: 0005B05917
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(346002)(366004)(376002)(39860400002)(136003)(189003)(199004)(229853002)(11346002)(106356001)(446003)(26005)(7696005)(3846002)(97736004)(186003)(305945005)(81156014)(68736007)(486006)(81166006)(86362001)(476003)(2351001)(76176011)(6506007)(71200400001)(71190400001)(105586002)(1730700003)(93886005)(72206003)(256004)(8676002)(478600001)(102836004)(14454004)(6436002)(5640700003)(5660300002)(33656002)(14444005)(7736002)(74316002)(316002)(6916009)(6246003)(4326008)(55016002)(2906002)(66066001)(2501003)(30864003)(8936002)(54906003)(6116002)(99286004)(53936002)(53946003)(9686003)(52536014)(25786009)(579004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB4701;
 H:VE1PR08MB5149.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: Zn3L6oPKogdeMaaRzYOIjrLAwsqbbLUsvL1sTpD00MrB/evMYMIjRIqjq5sroc9EIIj0Uzn+gIZipOTtDq5yQae4oSZG26HdlGnIsi+n9O2QQEuzZJ901g1/+SwOB3UgJPXo8EJ4BTp2K7d1OL5KIAde4JZs0OH3E/Zpth/HpPEhytKhGZzmI/oMsPau4ppafGA3HGQGGaDK1IXxcr6RW2848keUGwA5fS49n3GZ9dR9+kCTYj9VHjoYoTIMC6AETmvWf3QwdQ9xuCLzU64J4ocJ0DjtI1L4y+YpcOJ3eE5gySBwty0uRRp0zRzqTW00fndrei0NdkfhZQyUZ2jq3QNA7/80PrlcdrsuruPjLsRGBHdUiSbZao+pAD0qgoGj3/6nGFS/JXeRqFuNH6NeCMQQLVb8hcvBHXI+ORXGjDE=
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 1da5ed42-b893-4a3e-0bfa-08d6bf84661c
X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Apr 2019 20:21:08.7875 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4701
Subject: Re: [dpdk-dev] [PATCH v4 1/3] rcu: add RCU library supporting QSBR
	mechanism
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>
Message-ID: <20190412202108.1l1cURvOaRe8KVGoiVnP-vAOe5HPF4rKdXZHj2JGnBw@z>

PHNuaXA+DQoNCj4gPiA+DQo+ID4gPiBPbiBXZWQsIEFwciAxMCwgMjAxOSBhdCAwNjoyMDowNEFN
IC0wNTAwLCBIb25uYXBwYSBOYWdhcmFoYWxsaQ0KPiB3cm90ZToNCj4gPiA+ID4gQWRkIFJDVSBs
aWJyYXJ5IHN1cHBvcnRpbmcgcXVpZXNjZW50IHN0YXRlIGJhc2VkIG1lbW9yeQ0KPiA+ID4gPiBy
ZWNsYW1hdGlvbg0KPiA+ID4gbWV0aG9kLg0KPiA+ID4gPiBUaGlzIGxpYnJhcnkgaGVscHMgaWRl
bnRpZnkgdGhlIHF1aWVzY2VudCBzdGF0ZSBvZiB0aGUgcmVhZGVyDQo+ID4gPiA+IHRocmVhZHMg
c28gdGhhdCB0aGUgd3JpdGVycyBjYW4gZnJlZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aA0K
PiA+ID4gPiB0aGUgbG9jayBsZXNzIGRhdGEgc3RydWN0dXJlcy4NCj4gPiA+DQo+ID4gPiBJIGRv
bid0IHNlZSBhbnkgc2lnbiBvZiByZWFkLXNpZGUgbWFya2VycyAocmN1X3JlYWRfbG9jaygpIGFu
ZA0KPiA+ID4gcmN1X3JlYWRfdW5sb2NrKCkgaW4gdGhlIExpbnV4IGtlcm5lbCwgdXNlcnNwYWNl
IFJDVSwgZXRjLikuDQo+ID4gPg0KPiA+ID4gWWVzLCBzdHJpY3RseSBzcGVha2luZywgdGhlc2Ug
YXJlIG5vdCBuZWVkZWQgZm9yIFFTQlIgdG8gb3BlcmF0ZSwNCj4gPiA+IGJ1dCB0aGV5DQo+ID4g
VGhlc2UgQVBJcyB3b3VsZCBiZSBlbXB0eSBmb3IgUVNCUi4NCj4gPg0KPiA+ID4gbWFrZSBpdCB3
YXkgZWFzaWVyIHRvIG1haW50YWluIGFuZCBkZWJ1ZyBjb2RlIHVzaW5nIFJDVS4gIEZvcg0KPiA+
ID4gZXhhbXBsZSwgZ2l2ZW4gdGhlIHJlYWQtc2lkZSBtYXJrZXJzLCB5b3UgY2FuIGNoZWNrIGZv
ciBlcnJvcnMgbGlrZQ0KPiA+ID4gaGF2aW5nIGEgY2FsbCB0bw0KPiA+ID4gcnRlX3JjdV9xc2Jy
X3F1aWVzY2VudCgpIGluIHRoZSBtaWRkbGUgb2YgYSByZWFkZXIgcXVpdGUgZWFzaWx5Lg0KPiA+
ID4gV2l0aG91dCB0aG9zZSByZWFkLXNpZGUgbWFya2VycywgbGlmZSBjYW4gYmUgcXVpdGUgaGFy
ZCBhbmQgeW91IHdpbGwNCj4gPiA+IHJlYWxseSBoYXRlIHlvdXJzZWxmIGZvciBmYWlsaW5nIHRv
IGhhdmUgcHJvdmlkZWQgdGhlbS4NCj4gPg0KPiA+IFdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJz
dG9vZCB0aGlzLCBkbyB5b3UgbWVhbiB0aGUgYXBwbGljYXRpb24NCj4gd291bGQgbWFyayBiZWZv
cmUgYW5kIGFmdGVyIGFjY2Vzc2luZyB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJlIG9uIHRoZQ0K
PiByZWFkZXIgc2lkZT8NCj4gPg0KPiA+IHJ0ZV9yY3VfcXNicl9sb2NrKCkNCj4gPiA8YmVnaW4g
YWNjZXNzIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT4NCj4gPiAuLi4NCj4gPiAuLi4NCj4gPiA8ZW5k
IGFjY2VzcyBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmU+DQo+ID4gcnRlX3JjdV9xc2JyX3VubG9jaygp
DQo+IA0KPiBZZXMsIHRoYXQgaXMgdGhlIGlkZWEuDQo+IA0KPiA+IElmIHNvbWVvbmUgaXMgZGVi
dWdnaW5nIHRoaXMgY29kZSwgdGhleSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzDQo+
IGFuIHVubG9jayBmb3IgZXZlcnkgbG9jayBhbmQgdGhlcmUgaXMgbm8gY2FsbCB0byBydGVfcmN1
X3FzYnJfcXVpZXNjZW50IGluDQo+IGJldHdlZW4uDQo+ID4gSXQgc291bmRzIGdvb2QgdG8gbWUu
IE9idmlvdXNseSwgdGhleSB3aWxsIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwgY3ljbGVzDQo+IGFz
IHdlbGwuDQo+ID4gUGxlYXNlIGxldCBtZSBrbm93IGlmIG15IHVuZGVyc3RhbmRpbmcgaXMgY29y
cmVjdC4NCj4gDQo+IFllcy4gIEFuZCBpbiBzb21lIHNvcnQgb2YgZGVidWcgbW9kZSwgeW91IGNv
dWxkIGNhcHR1cmUgdGhlIGNvdW50ZXIgYXQNCj4gcnRlX3JjdV9xc2JyX2xvY2soKSB0aW1lIGFu
ZCBjaGVjayBpdCBhdCBydGVfcmN1X3FzYnJfdW5sb2NrKCkgdGltZS4gIElmIHRoZQ0KPiBjb3Vu
dGVyIGhhcyBhZHZhbmNlZCB0b28gZmFyIChtb3JlIHRoYW4gb25lLCBpZiBJIGFtIG5vdCB0b28g
Y29uZnVzZWQpDQo+IHRoZXJlIGlzIGEgYnVnLiAgQWxzbyBpbiBkZWJ1ZyBtb2RlLCB5b3UgY291
bGQgaGF2ZSBydGVfcmN1X3FzYnJfbG9jaygpDQo+IGluY3JlbWVudCBhIHBlci10aHJlYWQgY291
bnRlciBhbmQgcnRlX3JjdV9xc2JyX3VubG9jaygpIGRlY3JlbWVudCBpdC4NCj4gSWYgdGhlIGNv
dW50ZXIgaXMgbm9uLXplcm8gYXQgYSBxdWllc2NlbnQgc3RhdGUsIHRoZXJlIGlzIGEgYnVnLg0K
PiBBbmQgc28gb24uDQo+IA0KQWRkZWQgdGhpcyBpbiBWNQ0KDQo8c25pcD4NCg0KPiA+ID4gPiAr
DQo+ID4gPiA+ICsvKiBHZXQgdGhlIG1lbW9yeSBzaXplIG9mIFFTQlIgdmFyaWFibGUgKi8gc2l6
ZV90DQo+ID4gPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgcnRlX3JjdV9xc2JyX2dldF9tZW1zaXpl
KHVpbnQzMl90DQo+IG1heF90aHJlYWRzKSB7DQo+ID4gPiA+ICsJc2l6ZV90IHN6Ow0KPiA+ID4g
PiArDQo+ID4gPiA+ICsJaWYgKG1heF90aHJlYWRzID09IDApIHsNCj4gPiA+ID4gKwkJcnRlX2xv
ZyhSVEVfTE9HX0VSUiwgcmN1X2xvZ190eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IEludmFsaWQg
bWF4X3RocmVhZHMgJXVcbiIsDQo+ID4gPiA+ICsJCQlfX2Z1bmNfXywgbWF4X3RocmVhZHMpOw0K
PiA+ID4gPiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmV0
dXJuIDE7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJc3ogPSBzaXplb2Yoc3Ry
dWN0IHJ0ZV9yY3VfcXNicik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBBZGQgdGhlIHNpemUg
b2YgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgYXJyYXkgKi8NCj4gPiA+ID4gKwlzeiArPSBzaXpl
b2Yoc3RydWN0IHJ0ZV9yY3VfcXNicl9jbnQpICogbWF4X3RocmVhZHM7DQo+ID4gPiA+ICsNCj4g
PiA+ID4gKwkvKiBBZGQgdGhlIHNpemUgb2YgdGhlIHJlZ2lzdGVyZWQgdGhyZWFkIElEIGJpdG1h
cCBhcnJheSAqLw0KPiA+ID4gPiArCXN6ICs9IFJURV9RU0JSX1RIUklEX0FSUkFZX1NJWkUobWF4
X3RocmVhZHMpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIFJURV9BTElHTihzeiwgUlRF
X0NBQ0hFX0xJTkVfU0laRSk7DQo+ID4gPg0KPiA+ID4gR2l2ZW4gdGhhdCB5b3UgYWxpZ24gaGVy
ZSwgc2hvdWxkIHlvdSBhbHNvIGFsaWduIGluIHRoZSBlYXJsaWVyDQo+ID4gPiBzdGVwcyBpbiB0
aGUgY29tcHV0YXRpb24gb2Ygc3o/DQo+ID4NCj4gPiBBZ3JlZS4gSSB3aWxsIHJlbW92ZSB0aGUg
YWxpZ24gaGVyZSBhbmQga2VlcCB0aGUgZWFybGllciBvbmUgYXMgdGhlIGludGVudA0KPiBpcyB0
byBhbGlnbiB0aGUgdGhyZWFkIElEIGFycmF5Lg0KPiANCj4gU291bmRzIGdvb2QhDQpBZGRlZCB0
aGlzIGluIFY1DQoNCj4gDQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIEluaXRp
YWxpemUgYSBxdWllc2NlbnQgc3RhdGUgdmFyaWFibGUgKi8gaW50DQo+ID4gPiA+ICtfX3J0ZV9l
eHBlcmltZW50YWwgcnRlX3JjdV9xc2JyX2luaXQoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwNCj4g
dWludDMyX3QgbWF4X3RocmVhZHMpIHsNCj4gPiA+ID4gKwlzaXplX3Qgc3o7DQo+ID4gPiA+ICsN
Cj4gPiA+ID4gKwlpZiAodiA9PSBOVUxMKSB7DQo+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19F
UlIsIHJjdV9sb2dfdHlwZSwNCj4gPiA+ID4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFt
ZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ID4gPiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4g
PiA+ICsNCj4gPiA+ID4gKwkJcmV0dXJuIDE7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4g
PiA+ICsJc3ogPSBydGVfcmN1X3FzYnJfZ2V0X21lbXNpemUobWF4X3RocmVhZHMpOw0KPiA+ID4g
PiArCWlmIChzeiA9PSAxKQ0KPiA+ID4gPiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gKw0KPiA+ID4g
PiArCS8qIFNldCBhbGwgdGhlIHRocmVhZHMgdG8gb2ZmbGluZSAqLw0KPiA+ID4gPiArCW1lbXNl
dCh2LCAwLCBzeik7DQo+ID4gPg0KPiA+ID4gV2UgY2FsY3VsYXRlIHN6IGhlcmUsIGJ1dCBpdCBs
b29rcyBsaWtlIHRoZSBjYWxsZXIgbXVzdCBhbHNvDQo+ID4gPiBjYWxjdWxhdGUgaXQgaW4gb3Jk
ZXIgdG8gY29ycmVjdGx5IGFsbG9jYXRlIHRoZSBtZW1vcnkgcmVmZXJlbmNlZCBieQ0KPiA+ID4g
dGhlICJ2IiBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uLCB3aXRoIGJhZCB0aGluZ3MgaGFwcGVu
aW5nIGlmIHRoZQ0KPiA+ID4gdHdvIGNhbGN1bGF0aW9ucyBnZXQgZGlmZmVyZW50IHJlc3VsdHMu
ICBTaG91bGQgInYiIGluc3RlYWQgYmUNCj4gPiA+IGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBmdW5j
dGlvbiB0byBhdm9pZCB0aGlzIHNvcnQgb2YgcHJvYmxlbT8NCj4gPg0KPiA+IEVhcmxpZXIgdmVy
c2lvbiBhbGxvY2F0ZWQgdGhlIG1lbW9yeSB3aXRoLWluIHRoaXMgbGlicmFyeS4gSG93ZXZlciwg
aXQgd2FzDQo+IGRlY2lkZWQgdG8gZ28gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBh
cyBpdCBwcm92aWRlcyBmbGV4aWJpbGl0eSBmb3INCj4gdGhlIGFwcGxpY2F0aW9uIHRvIG1hbmFn
ZSB0aGUgbWVtb3J5IGFzIGl0IHNlZXMgZml0LiBGb3IgZXg6IGl0IGNvdWxkDQo+IGFsbG9jYXRl
IHRoaXMgYXMgcGFydCBvZiBhbm90aGVyIHN0cnVjdHVyZSBpbiBhIHNpbmdsZSBhbGxvY2F0aW9u
LiBUaGlzIGFsc28NCj4gZmFsbHMgaW5saW5lIHdpdGggc2ltaWxhciBhcHByb2FjaCB0YWtlbiBp
biBvdGhlciBsaWJyYXJpZXMuDQo+IA0KPiBTbyB0aGUgYWxsb2NhdG9yIEFQSXMgdmFyeSB0b28g
bXVjaCB0byBhbGxvdyBhIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQNCj4gYWxsb2NhdG9yIGZ1bmN0
aW9uIHRvIGJlIHBhc3NlZCBpbj8gIE9yIGRvIHlvdSBhbHNvIHdhbnQgdG8gYWxsb3cgc3RhdGlj
DQo+IGFsbG9jYXRpb24/ICBJZiB0aGUgbGF0dGVyLCB3b3VsZCBhIERFRklORV9SVEVfUkNVX1FT
QlIoKSBiZSBvZiB1c2U/DQo+IA0KVGhpcyBpcyBkb25lIHRvIGFsbG93IGZvciBhbGxvY2F0aW9u
IG9mIG1lbW9yeSBmb3IgUVMgdmFyaWFibGUgYXMgcGFydCBvZiBhIGFub3RoZXIgYmlnZ2VyIGRh
dGEgc3RydWN0dXJlLiBUaGlzIHdpbGwgaGVscCBpbiBub3QgZnJhZ21lbnRpbmcgdGhlIG1lbW9y
eS4gRm9yIGV4Og0KDQpzdHJ1Y3QgeHl6IHsNCiAgICBydGVfcmluZyAqcmluZzsNCiAgICBydGVf
cmN1X3FzYnIgKnY7DQogICAgYWJjICp0Ow0KfTsNCnN0cnVjdCB4eXogYzsNCg0KTWVtb3J5IGZv
ciB0aGUgYWJvdmUgc3RydWN0dXJlIGNhbiBiZSBhbGxvY2F0ZWQgaW4gb25lIGNodW5rIGJ5IGNh
bGN1bGF0aW5nIHRoZSBzaXplIHJlcXVpcmVkLg0KDQpJbiBzb21lIHVzZSBjYXNlcyBzdGF0aWMg
YWxsb2NhdGlvbiBtaWdodCBiZSBlbm91Z2ggYXMgJ21heF90aHJlYWRzJyBtaWdodCBiZSBhIGNv
bXBpbGUgdGltZSBjb25zdGFudC4gSSBhbSBub3Qgc3VyZSBvbiBob3cgdG8gc3VwcG9ydCBib3Ro
IGR5bmFtaWMgYW5kIHN0YXRpYyAnbWF4X3RocmVhZHMnLg0KDQo+ID4gPiA+ICsJdi0+bWF4X3Ro
cmVhZHMgPSBtYXhfdGhyZWFkczsNCj4gPiA+ID4gKwl2LT5udW1fZWxlbXMgPSBSVEVfQUxJR05f
TVVMX0NFSUwobWF4X3RocmVhZHMsDQo+ID4gPiA+ICsJCQlSVEVfUVNCUl9USFJJRF9BUlJBWV9F
TE1fU0laRSkgLw0KPiA+ID4gPiArCQkJUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNX1NJWkU7DQo+
ID4gPiA+ICsJdi0+dG9rZW4gPSBSVEVfUVNCUl9DTlRfSU5JVDsNCj4gPiA+ID4gKw0KPiA+ID4g
PiArCXJldHVybiAwOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiBSZWdpc3Rl
ciBhIHJlYWRlciB0aHJlYWQgdG8gcmVwb3J0IGl0cyBxdWllc2NlbnQgc3RhdGUNCj4gPiA+ID4g
KyAqIG9uIGEgUVMgdmFyaWFibGUuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK2ludCBfX3J0ZV9l
eHBlcmltZW50YWwNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl90aHJlYWRfcmVnaXN0ZXIoc3RydWN0
IHJ0ZV9yY3VfcXNiciAqdiwgdW5zaWduZWQgaW50DQo+ID4gPiA+ICt0aHJlYWRfaWQpIHsNCj4g
PiA+ID4gKwl1bnNpZ25lZCBpbnQgaSwgaWQsIHN1Y2Nlc3M7DQo+ID4gPiA+ICsJdWludDY0X3Qg
b2xkX2JtYXAsIG5ld19ibWFwOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKHYgPT0gTlVMTCB8
fCB0aHJlYWRfaWQgPj0gdi0+bWF4X3RocmVhZHMpIHsNCj4gPiA+ID4gKwkJcnRlX2xvZyhSVEVf
TE9HX0VSUiwgcmN1X2xvZ190eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IEludmFsaWQgaW5wdXQg
cGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsN
Cj4gPiA+ID4gKw0KPiA+ID4gPiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsN
Cj4gPiA+ID4gKwlpZCA9IHRocmVhZF9pZCAmIFJURV9RU0JSX1RIUklEX01BU0s7DQo+ID4gPiA+
ICsJaSA9IHRocmVhZF9pZCA+PiBSVEVfUVNCUl9USFJJRF9JTkRFWF9TSElGVDsNCj4gPiA+ID4g
Kw0KPiA+ID4gPiArCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb3VudGVyIGZvciByZWdpc3RlcmVk
IHRocmVhZHMgZG9lcyBub3QNCj4gPiA+ID4gKwkgKiBnbyBvdXQgb2Ygc3luYy4gSGVuY2UsIGFk
ZGl0aW9uYWwgY2hlY2tzIGFyZSByZXF1aXJlZC4NCj4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gKwkv
KiBDaGVjayBpZiB0aGUgdGhyZWFkIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAqLw0KPiA+ID4gPiAr
CW9sZF9ibWFwID0gX19hdG9taWNfbG9hZF9uKFJURV9RU0JSX1RIUklEX0FSUkFZX0VMTSh2LCBp
KSwNCj4gPiA+ID4gKwkJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gPiA+ICsJaWYgKG9sZF9i
bWFwICYgMVVMIDw8IGlkKQ0KPiA+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+ID4gKw0KPiA+ID4g
PiArCWRvIHsNCj4gPiA+ID4gKwkJbmV3X2JtYXAgPSBvbGRfYm1hcCB8ICgxVUwgPDwgaWQpOw0K
PiA+ID4gPiArCQlzdWNjZXNzID0gX19hdG9taWNfY29tcGFyZV9leGNoYW5nZSgNCj4gPiA+ID4g
KwkJCQkJUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNKHYsIGkpLA0KPiA+ID4gPiArCQkJCQkmb2xk
X2JtYXAsICZuZXdfYm1hcCwgMCwNCj4gPiA+ID4gKwkJCQkJX19BVE9NSUNfUkVMRUFTRSwNCj4g
PiA+IF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWlmIChzdWNjZXNz
KQ0KPiA+ID4gPiArCQkJX19hdG9taWNfZmV0Y2hfYWRkKCZ2LT5udW1fdGhyZWFkcywNCj4gPiA+
ID4gKwkJCQkJCTEsIF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4gPiArCQllbHNlIGlmIChvbGRf
Ym1hcCAmICgxVUwgPDwgaWQpKQ0KPiA+ID4gPiArCQkJLyogU29tZW9uZSBlbHNlIHJlZ2lzdGVy
ZWQgdGhpcyB0aHJlYWQuDQo+ID4gPiA+ICsJCQkgKiBDb3VudGVyIHNob3VsZCBub3QgYmUgaW5j
cmVtZW50ZWQuDQo+ID4gPiA+ICsJCQkgKi8NCj4gPiA+ID4gKwkJCXJldHVybiAwOw0KPiA+ID4g
PiArCX0gd2hpbGUgKHN1Y2Nlc3MgPT0gMCk7DQo+ID4gPg0KPiA+ID4gVGhpcyB3b3VsZCBiZSBz
aW1wbGVyIGlmIHRocmVhZHMgd2VyZSByZXF1aXJlZCB0byByZWdpc3RlciB0aGVtc2VsdmVzLg0K
PiA+ID4gTWF5YmUgeW91IGhhdmUgdXNlIGNhc2VzIHJlcXVpcmluZyByZWdpc3RyYXRpb24gb2Yg
b3RoZXIgdGhyZWFkcywNCj4gPiA+IGJ1dCB0aGlzIGNhcGFiaWxpdHkgaXMgYWRkaW5nIHNpZ25p
ZmljYW50IGNvbXBsZXhpdHksIHNvIGl0IG1pZ2h0IGJlDQo+ID4gPiB3b3J0aCBzb21lIHRob3Vn
aHQuDQo+ID4gPg0KPiA+IEl0IHdhcyBzaW1wbGUgZWFybGllciAoX19hdG9taWNfZmV0Y2hfb3Ip
LiBUaGUgY29tcGxleGl0eSBpcyBhZGRlZCBhcw0KPiAnbnVtX3RocmVhZHMnIHNob3VsZCBub3Qg
Z28gb3V0IG9mIHN5bmMuDQo+IA0KPiBIbW1tLi4uDQo+IA0KPiBTbyB0aHJlYWRzIGFyZSBhbGxv
d2VkIHRvIHJlZ2lzdGVyIG90aGVyIHRocmVhZHM/ICBPciBpcyB0aGVyZSBzb21lIG90aGVyDQo+
IHJlYXNvbiB0aGF0IGNvbmN1cnJlbnQgcmVnaXN0cmF0aW9uIGlzIHJlcXVpcmVkPw0KPiANClll
cywgY29udHJvbCBwbGFuZSB0aHJlYWRzIGNhbiByZWdpc3RlciB0aGUgZmFzdCBwYXRoIHRocmVh
ZHMuIFRob3VnaCwgSSBhbSBub3Qgc3VyZSBob3cgdXNlZnVsIGl0IGlzLiBJIGRpZCBub3Qgd2Fu
dCB0byBhZGQgdGhlIHJlc3RyaWN0aW9uLiBJIGV4cGVjdCB0aGF0IHJlYWRlciB0aHJlYWRzIHdp
bGwgcmVnaXN0ZXIgdGhlbXNlbHZlcy4gVGhlIHJlYWRlciB0aHJlYWRzIHJlcXVpcmUgY29uY3Vy
cmVudCByZWdpc3RyYXRpb24gYXMgdGhleSBhbGwgd2lsbCBiZSBydW5uaW5nIGluIHBhcmFsbGVs
Lg0KSWYgdGhlIHJlcXVpcmVtZW50IG9mIGtlZXBpbmcgdHJhY2sgb2YgdGhlIG51bWJlciBvZiB0
aHJlYWRzIHJlZ2lzdGVyZWQgY3VycmVudGx5IGdvZXMgYXdheSwgdGhlbiB0aGlzIGZ1bmN0aW9u
IHdpbGwgYmUgc2ltcGxlLg0KDQo8c25pcD4NCg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xp
YnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiA+ID4gYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1
X3FzYnIuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+ID4gPiAwMDAwMDAwMDAuLmZm
Njk2YWVhYg0KPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL2xpYi9saWJydGVf
cmN1L3J0ZV9yY3VfcXNici5oDQo+ID4gPiA+IEBAIC0wLDAgKzEsNTU0IEBADQo+ID4gPiA+ICsv
KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gPiA+ICsgKiBDb3B5
cmlnaHQgKGMpIDIwMTggQXJtIExpbWl0ZWQgICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpZm5k
ZWYgX1JURV9SQ1VfUVNCUl9IXw0KPiA+ID4gPiArI2RlZmluZSBfUlRFX1JDVV9RU0JSX0hfDQo+
ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQGZpbGUNCj4gPiA+ID4gKyAqIFJU
RSBRdWllc2NlbnQgU3RhdGUgQmFzZWQgUmVjbGFtYXRpb24gKFFTQlIpDQo+ID4gPiA+ICsgKg0K
PiA+ID4gPiArICogUXVpZXNjZW50IFN0YXRlIChRUykgaXMgYW55IHBvaW50IGluIHRoZSB0aHJl
YWQgZXhlY3V0aW9uDQo+ID4gPiA+ICsgKiB3aGVyZSB0aGUgdGhyZWFkIGRvZXMgbm90IGhvbGQg
YSByZWZlcmVuY2UgdG8gYSBkYXRhIHN0cnVjdHVyZQ0KPiA+ID4gPiArICogaW4gc2hhcmVkIG1l
bW9yeS4gV2hpbGUgdXNpbmcgbG9jay1sZXNzIGRhdGEgc3RydWN0dXJlcywgdGhlDQo+ID4gPiA+
ICt3cml0ZXINCj4gPiA+ID4gKyAqIGNhbiBzYWZlbHkgZnJlZSBtZW1vcnkgb25jZSBhbGwgdGhl
IHJlYWRlciB0aHJlYWRzIGhhdmUNCj4gPiA+ID4gK2VudGVyZWQNCj4gPiA+ID4gKyAqIHF1aWVz
Y2VudCBzdGF0ZS4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGlzIGxpYnJhcnkgcHJvdmlk
ZXMgdGhlIGFiaWxpdHkgZm9yIHRoZSByZWFkZXJzIHRvIHJlcG9ydA0KPiA+ID4gPiArcXVpZXNj
ZW50DQo+ID4gPiA+ICsgKiBzdGF0ZSBhbmQgZm9yIHRoZSB3cml0ZXJzIHRvIGlkZW50aWZ5IHdo
ZW4gYWxsIHRoZSByZWFkZXJzDQo+ID4gPiA+ICtoYXZlDQo+ID4gPiA+ICsgKiBlbnRlcmVkIHF1
aWVzY2VudCBzdGF0ZS4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaWZkZWYg
X19jcGx1c3BsdXMNCj4gPiA+ID4gK2V4dGVybiAiQyIgew0KPiA+ID4gPiArI2VuZGlmDQo+ID4g
PiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPHN0
ZGludC5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGVycm5vLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8
cnRlX2NvbW1vbi5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPHJ0ZV9tZW1vcnkuaD4NCj4gPiA+ID4g
KyNpbmNsdWRlIDxydGVfbGNvcmUuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxydGVfZGVidWcuaD4N
Cj4gPiA+ID4gKyNpbmNsdWRlIDxydGVfYXRvbWljLmg+DQo+ID4gPiA+ICsNCj4gPiA+ID4gK2V4
dGVybiBpbnQgcmN1X2xvZ190eXBlOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaWYgUlRFX0xPR19E
UF9MRVZFTCA+PSBSVEVfTE9HX0RFQlVHICNkZWZpbmUNCj4gUkNVX0RQX0xPRyhsZXZlbCwNCj4g
PiA+IGZtdCwNCj4gPiA+ID4gK2FyZ3MuLi4pIFwNCj4gPiA+ID4gKwlydGVfbG9nKFJURV9MT0df
ICMjIGxldmVsLCByY3VfbG9nX3R5cGUsIFwNCj4gPiA+ID4gKwkJIiVzKCk6ICIgZm10ICJcbiIs
IF9fZnVuY19fLCAjIyBhcmdzKSAjZWxzZSAjZGVmaW5lDQo+ID4gPiA+ICtSQ1VfRFBfTE9HKGxl
dmVsLCBmbXQsIGFyZ3MuLi4pICNlbmRpZg0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiBSZWdpc3Rl
cmVkIHRocmVhZCBJRHMgYXJlIHN0b3JlZCBhcyBhIGJpdG1hcCBvZiA2NGIgZWxlbWVudA0KPiBh
cnJheS4NCj4gPiA+ID4gKyAqIEdpdmVuIHRocmVhZCBpZCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQg
dG8gaW5kZXggaW50byB0aGUgYXJyYXkNCj4gPiA+ID4gK2FuZA0KPiA+ID4gPiArICogdGhlIGlk
IHdpdGhpbiB0aGUgYXJyYXkgZWxlbWVudC4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArI2RlZmlu
ZSBSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE1fU0laRSAoc2l6ZW9mKHVpbnQ2NF90KSAqIDgpDQo+
ID4gPiAjZGVmaW5lDQo+ID4gPiA+ICtSVEVfUVNCUl9USFJJRF9BUlJBWV9TSVpFKG1heF90aHJl
YWRzKSBcDQo+ID4gPiA+ICsJUlRFX0FMSUdOKFJURV9BTElHTl9NVUxfQ0VJTChtYXhfdGhyZWFk
cywgXA0KPiA+ID4gPiArCQlSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE1fU0laRSkgPj4gMywNCj4g
PiA+IFJURV9DQUNIRV9MSU5FX1NJWkUpICNkZWZpbmUNCj4gPiA+ID4gK1JURV9RU0JSX1RIUklE
X0FSUkFZX0VMTSh2LCBpKSAoKHVpbnQ2NF90ICopIFwNCj4gPiA+ID4gKwkoKHN0cnVjdCBydGVf
cmN1X3FzYnJfY250ICopKHYgKyAxKSArIHYtPm1heF90aHJlYWRzKSArIGkpDQo+ID4gPiA+ICsj
ZGVmaW5lIFJURV9RU0JSX1RIUklEX0lOREVYX1NISUZUIDYgI2RlZmluZQ0KPiBSVEVfUVNCUl9U
SFJJRF9NQVNLDQo+ID4gPiA+ICsweDNmDQo+ID4gPiAjZGVmaW5lDQo+ID4gPiA+ICtSVEVfUVNC
Ul9USFJJRF9JTlZBTElEIDB4ZmZmZmZmZmYNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogV29ya2Vy
IHRocmVhZCBjb3VudGVyICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCB7DQo+
ID4gPiA+ICsJdWludDY0X3QgY250Ow0KPiA+ID4gPiArCS8qKjwgUXVpZXNjZW50IHN0YXRlIGNv
dW50ZXIuIFZhbHVlIDAgaW5kaWNhdGVzIHRoZSB0aHJlYWQgaXMNCj4gPiA+ID4gK29mZmxpbmUg
Ki8gfSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFJU
RV9RU0JSX0NOVF9USFJfT0ZGTElORSAwICNkZWZpbmUNCj4gUlRFX1FTQlJfQ05UX0lOSVQgMQ0K
PiA+ID4gPiArDQo+ID4gPiA+ICsvKiBSVEUgUXVpZXNjZW50IFN0YXRlIHZhcmlhYmxlIHN0cnVj
dHVyZS4NCj4gPiA+ID4gKyAqIFRoaXMgc3RydWN0dXJlIGhhcyB0d28gZWxlbWVudHMgdGhhdCB2
YXJ5IGluIHNpemUgYmFzZWQgb24gdGhlDQo+ID4gPiA+ICsgKiAnbWF4X3RocmVhZHMnIHBhcmFt
ZXRlci4NCj4gPiA+ID4gKyAqIDEpIFF1aWVzY2VudCBzdGF0ZSBjb3VudGVyIGFycmF5DQo+ID4g
PiA+ICsgKiAyKSBSZWdpc3RlciB0aHJlYWQgSUQgYXJyYXkNCj4gPiA+ID4gKyAqLw0KPiA+ID4g
PiArc3RydWN0IHJ0ZV9yY3VfcXNiciB7DQo+ID4gPiA+ICsJdWludDY0X3QgdG9rZW4gX19ydGVf
Y2FjaGVfYWxpZ25lZDsNCj4gPiA+ID4gKwkvKio8IENvdW50ZXIgdG8gYWxsb3cgZm9yIG11bHRp
cGxlIGNvbmN1cnJlbnQgcXVpZXNjZW50IHN0YXRlDQo+ID4gPiA+ICtxdWVyaWVzICovDQo+ID4g
PiA+ICsNCj4gPiA+ID4gKwl1aW50MzJfdCBudW1fZWxlbXMgX19ydGVfY2FjaGVfYWxpZ25lZDsN
Cj4gPiA+ID4gKwkvKio8IE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdGhyZWFkIElEIGFycmF5
ICovDQo+ID4gPiA+ICsJdWludDMyX3QgbnVtX3RocmVhZHM7DQo+ID4gPiA+ICsJLyoqPCBOdW1i
ZXIgb2YgdGhyZWFkcyBjdXJyZW50bHkgdXNpbmcgdGhpcyBRUyB2YXJpYWJsZSAqLw0KPiA+ID4g
PiArCXVpbnQzMl90IG1heF90aHJlYWRzOw0KPiA+ID4gPiArCS8qKjwgTWF4aW11bSBudW1iZXIg
b2YgdGhyZWFkcyB1c2luZyB0aGlzIFFTIHZhcmlhYmxlICovDQo+ID4gPiA+ICsNCj4gPiA+ID4g
KwlzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCBxc2JyX2NudFswXSBfX3J0ZV9jYWNoZV9hbGlnbmVk
Ow0KPiA+ID4gPiArCS8qKjwgUXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgYXJyYXkgb2YgJ21heF90
aHJlYWRzJyBlbGVtZW50cyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyoqPCBSZWdpc3RlcmVk
IHRocmVhZCBJRHMgYXJlIHN0b3JlZCBpbiBhIGJpdG1hcCBhcnJheSwNCj4gPiA+ID4gKwkgKiAg
IGFmdGVyIHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheS4NCj4gPiA+ID4gKwkgKi8N
Cj4gPiA+ID4gK30gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gPiA+ID4gKw0KDQo8c25pcD4NCg0K
PiA+ID4gPiArDQo+ID4gPiA+ICsvKiBDaGVjayB0aGUgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIg
Zm9yIHJlZ2lzdGVyZWQgdGhyZWFkcyBvbmx5LA0KPiA+ID4gPiArYXNzdW1pbmcNCj4gPiA+ID4g
KyAqIHRoYXQgbm90IGFsbCB0aHJlYWRzIGhhdmUgcmVnaXN0ZXJlZC4NCj4gPiA+ID4gKyAqLw0K
PiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50DQo+ID4gPiA+ICtfX3JjdV9x
c2JyX2NoZWNrX3NlbGVjdGl2ZShzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1aW50NjRfdCB0LA0K
PiA+ID4gPiArYm9vbA0KPiA+ID4gPiArd2FpdCkgew0KPiA+ID4gPiArCXVpbnQzMl90IGksIGos
IGlkOw0KPiA+ID4gPiArCXVpbnQ2NF90IGJtYXA7DQo+ID4gPiA+ICsJdWludDY0X3QgYzsNCj4g
PiA+ID4gKwl1aW50NjRfdCAqcmVnX3RocmVhZF9pZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWZv
ciAoaSA9IDAsIHJlZ190aHJlYWRfaWQgPSBSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE0odiwgMCk7
DQo+ID4gPiA+ICsJCWkgPCB2LT5udW1fZWxlbXM7DQo+ID4gPiA+ICsJCWkrKywgcmVnX3RocmVh
ZF9pZCsrKSB7DQo+ID4gPiA+ICsJCS8qIExvYWQgdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCB0aHJl
YWQgYml0IG1hcCBiZWZvcmUNCj4gPiA+ID4gKwkJICogbG9hZGluZyB0aGUgcmVhZGVyIHRocmVh
ZCBxdWllc2NlbnQgc3RhdGUgY291bnRlcnMuDQo+ID4gPiA+ICsJCSAqLw0KPiA+ID4gPiArCQli
bWFwID0gX19hdG9taWNfbG9hZF9uKHJlZ190aHJlYWRfaWQsDQo+ID4gPiBfX0FUT01JQ19BQ1FV
SVJFKTsNCj4gPiA+ID4gKwkJaWQgPSBpIDw8IFJURV9RU0JSX1RIUklEX0lOREVYX1NISUZUOw0K
PiA+ID4gPiArDQo+ID4gPiA+ICsJCXdoaWxlIChibWFwKSB7DQo+ID4gPiA+ICsJCQlqID0gX19i
dWlsdGluX2N0emwoYm1hcCk7DQo+ID4gPiA+ICsJCQlSQ1VfRFBfTE9HKERFQlVHLA0KPiA+ID4g
PiArCQkJCSIlczogY2hlY2s6IHRva2VuID0gJWx1LCB3YWl0ID0gJWQsIEJpdCBNYXANCj4gPiA+
ID0gMHglbHgsIFRocmVhZCBJRCA9ICVkIiwNCj4gPiA+ID4gKwkJCQlfX2Z1bmNfXywgdCwgd2Fp
dCwgYm1hcCwgaWQgKyBqKTsNCj4gPiA+ID4gKwkJCWMgPSBfX2F0b21pY19sb2FkX24oDQo+ID4g
PiA+ICsJCQkJCSZ2LT5xc2JyX2NudFtpZCArIGpdLmNudCwNCj4gPiA+ID4gKwkJCQkJX19BVE9N
SUNfQUNRVUlSRSk7DQo+ID4gPiA+ICsJCQlSQ1VfRFBfTE9HKERFQlVHLA0KPiA+ID4gPiArCQkJ
CSIlczogc3RhdHVzOiB0b2tlbiA9ICVsdSwgd2FpdCA9ICVkLCBUaHJlYWQNCj4gPiA+IFFTIGNu
dCA9ICVsdSwgVGhyZWFkIElEID0gJWQiLA0KPiA+ID4gPiArCQkJCV9fZnVuY19fLCB0LCB3YWl0
LCBjLCBpZCtqKTsNCj4gPiA+ID4gKwkJCS8qIENvdW50ZXIgaXMgbm90IGNoZWNrZWQgZm9yIHdy
YXAtYXJvdW5kDQo+ID4gPiBjb25kaXRpb24NCj4gPiA+ID4gKwkJCSAqIGFzIGl0IGlzIGEgNjRi
IGNvdW50ZXIuDQo+ID4gPiA+ICsJCQkgKi8NCj4gPiA+ID4gKwkJCWlmICh1bmxpa2VseShjICE9
IFJURV9RU0JSX0NOVF9USFJfT0ZGTElORSAmJiBjDQo+ID4gPiA8IHQpKSB7DQo+ID4gPg0KPiA+
ID4gVGhpcyBhc3N1bWVzIHRoYXQgYSA2NC1iaXQgY291bnRlciB3b24ndCBvdmVyZmxvdywgd2hp
Y2ggaXMgY2xvc2UNCj4gPiA+IGVub3VnaCB0byB0cnVlIGdpdmVuIGN1cnJlbnQgQ1BVIGNsb2Nr
IGZyZXF1ZW5jaWVzLiAgOy0pDQo+ID4gPg0KPiA+ID4gPiArCQkJCS8qIFRoaXMgdGhyZWFkIGlz
IG5vdCBpbiBxdWllc2NlbnQgc3RhdGUgKi8NCj4gPiA+ID4gKwkJCQlpZiAoIXdhaXQpDQo+ID4g
PiA+ICsJCQkJCXJldHVybiAwOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCQkJcnRlX3BhdXNlKCk7
DQo+ID4gPiA+ICsJCQkJLyogVGhpcyB0aHJlYWQgbWlnaHQgaGF2ZSB1bnJlZ2lzdGVyZWQuDQo+
ID4gPiA+ICsJCQkJICogUmUtcmVhZCB0aGUgYml0bWFwLg0KPiA+ID4gPiArCQkJCSAqLw0KPiA+
ID4gPiArCQkJCWJtYXAgPSBfX2F0b21pY19sb2FkX24ocmVnX3RocmVhZF9pZCwNCj4gPiA+ID4g
KwkJCQkJCV9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCQkJY29udGlu
dWU7DQo+ID4gPiA+ICsJCQl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJCWJtYXAgJj0gfigxVUwg
PDwgaik7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwly
ZXR1cm4gMTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogQ2hlY2sgdGhlIHF1
aWVzY2VudCBzdGF0ZSBjb3VudGVyIGZvciBhbGwgdGhyZWFkcywgYXNzdW1pbmcNCj4gPiA+ID4g
K3RoYXQNCj4gPiA+ID4gKyAqIGFsbCB0aGUgdGhyZWFkcyBoYXZlIHJlZ2lzdGVyZWQuDQo+ID4g
PiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ID4g
PiArX19yY3VfcXNicl9jaGVja19hbGwoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDY0X3Qg
dCwgYm9vbA0KPiA+ID4gPiArd2FpdCkNCj4gPiA+DQo+ID4gPiBEb2VzIGNoZWNraW5nIHRoZSBi
aXRtYXAgcmVhbGx5IHRha2UgbG9uZyBlbm91Z2ggdG8gbWFrZSB0aGlzDQo+ID4gPiB3b3J0aHdo
aWxlIGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24/ICBJIHdvdWxkIHRoaW5rIHRoYXQgdGhlDQo+ID4g
PiBiaXRtYXAtY2hlY2tpbmcgdGltZSB3b3VsZCBiZSBsb3N0IGluIHRoZSBub2lzZSBvZiBjYWNo
ZSBtaXNzZXMgZnJvbQ0KPiB0aGUgLT5jbnQgbG9hZHMuDQo+ID4NCj4gPiBJdCBhdm9pZHMgYWNj
ZXNzaW5nIG9uZSBjYWNoZSBsaW5lLiBJIHRoaW5rIHRoaXMgaXMgd2hlcmUgdGhlIHNhdmluZ3Mg
YXJlDQo+IChtYXkgYmUgaW4gdGhlb3J5KS4gVGhpcyBpcyB0aGUgbW9zdCBwcm9iYWJsZSB1c2Ug
Y2FzZS4NCj4gPiBPbiB0aGUgb3RoZXIgaGFuZCwgX19yY3VfcXNicl9jaGVja19zZWxlY3RpdmUo
KSB3aWxsIHJlc3VsdCBpbiBzYXZpbmdzDQo+IChkZXBlbmRpbmcgb24gaG93IG1hbnkgdGhyZWFk
cyBhcmUgY3VycmVudGx5IHJlZ2lzdGVyZWQpIGJ5IGF2b2lkaW5nDQo+IGFjY2Vzc2luZyB1bndh
bnRlZCBjb3VudGVycy4NCj4gDQo+IERvIHlvdSByZWFsbHkgZXhwZWN0IHRvIGJlIGNhbGxpbmcg
dGhpcyBmdW5jdGlvbiBvbiBhbnkga2luZCBvZiBmYXN0cGF0aD8NCg0KWWVzLiBGb3Igc29tZSBv
ZiB0aGUgbGlicmFyaWVzIChydGVfaGFzaCksIHRoZSB3cml0ZXIgaXMgb24gdGhlIGZhc3QgcGF0
aC4NCg0KPiANCj4gPiA+IFN1cmUsIGlmIHlvdSBpbnZva2UgX19yY3VfcXNicl9jaGVja19zZWxl
Y3RpdmUoKSBpbiBhIHRpZ2h0IGxvb3AgaW4NCj4gPiA+IHRoZSBhYnNlbmNlIG9mIHJlYWRlcnMs
IHlvdSBtaWdodCBzZWUgX19yY3VfcXNicl9jaGVja19hbGwoKSBiZWluZyBhDQo+ID4gPiBiaXQg
ZmFzdGVyLiAgQnV0IGlzIHRoYXQgcmVhbGx5IHdoYXQgRFBESyBkb2VzPw0KPiA+IEkgc2VlIGlt
cHJvdmVtZW50cyBpbiB0aGUgc3ludGhldGljIHRlc3QgY2FzZSAoc2ltaWxhciB0byB0aGUgb25l
IHlvdQ0KPiBoYXZlIGRlc2NyaWJlZCwgYXJvdW5kIDI3JSkuIEhvd2V2ZXIsIGluIHRoZSBtb3Jl
IHByYWN0aWNhbCB0ZXN0IGNhc2VzIEkNCj4gZG8gbm90IHNlZSBhbnkgZGlmZmVyZW5jZS4NCj4g
DQo+IElmIHRoZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvbmx5IG9jY3VycyBpbiBhIHN5bnRo
ZXRpYyB0ZXN0IGNhc2UsIGRvZXMNCj4gaXQgcmVhbGx5IG1ha2Ugc2Vuc2UgdG8gb3B0aW1pemUg
Zm9yIGl0Pw0KSSBoYWQgdG8gZml4IGZldyBpc3N1ZXMgaW4gdGhlIHBlcmZvcm1hbmNlIHRlc3Qg
Y2FzZXMgYW5kIGFkZGVkIG1vcmUgdG8gZG8gdGhlIGNvbXBhcmlzb24uIFRoZXNlIGNoYW5nZXMg
YXJlIGluIHY1Lg0KVGhlcmUgYXJlIDQgcGVyZm9ybWFuY2UgdGVzdHMgaW52b2x2aW5nIHRoaXMg
QVBJLg0KMSkgMSBXcml0ZXIsICdOJyByZWFkZXJzDQogICAgIFdyaXRlcjogcXNicl9zdGFydCwg
cXNicl9jaGVjayh3YWl0ID0gdHJ1ZSkNCiAgICAgUmVhZGVyczogcXNicl9xdWllc2NlbnQNCjIp
ICdOJyB3cml0ZXJzDQogICAgIFdyaXRlcnM6IHFzYnJfc3RhcnQsIHFzYnJfY2hlY2sod2FpdCA9
PSBmYWxzZSkNCjMpIDEgV3JpdGVyLCAnTicgcmVhZGVycyAodGhpcyB0ZXN0IHVzZXMgdGhlIGxv
Y2stZnJlZSBydGVfaGFzaCBkYXRhIHN0cnVjdHVyZSkNCiAgICAgV3JpdGVyOiBoYXNoX2RlbCwg
cXNicl9zdGFydCwgcXNicl9jaGVjayh3YWl0ID0gdHJ1ZSksIHZhbGlkYXRlIHRoYXQgdGhlIHJl
YWRlciB3YXMgYWJsZSB0byBjb21wbGV0ZSBpdHMgd29yayBzdWNjZXNzZnVsbHkNCiAgICAgUmVh
ZGVyczogdGhyZWFkX29ubGluZSwgaGFzaF9sb29rdXAsIGFjY2VzcyB0aGUgcG9pbnRlciAtIGRv
IHNvbWUgd29yayBvbiBpdCwgcXNicl9xdWllc2NlbnQsIHRocmVhZF9vZmZsaW5lDQo0KSBTYW1l
IGFzIHRlc3QgMykgYnV0IHFzYnJfY2hlY2sgKHdhaXQgPT0gZmFsc2UpDQoNClRoZXJlIGFyZSAy
IHNldHMgb2YgdGhlc2UgdGVzdHMuDQphKSBRUyB2YXJpYWJsZSBpcyBjcmVhdGVkIHdpdGggbnVt
YmVyIG9mIHRocmVhZHMgc2FtZSBhcyBudW1iZXIgb2YgcmVhZGVycyAtIHRoaXMgd2lsbCBleGVy
Y2lzZSBfX3JjdV9xc2JyX2NoZWNrX2FsbA0KYikgUVMgdmFyaWFibGUgaXMgY3JlYXRlZCB3aXRo
IDEyOCB0aHJlYWRzLCBudW1iZXIgb2YgcmVnaXN0ZXJlZCB0aHJlYWRzIGlzIHNhbWUgYXMgaW4g
YSkgLSB0aGlzIHdpbGwgZXhlcmNpc2UgX19yY3VfcXNicl9jaGVja19zZWxlY3RpdmUNCg0KRm9s
bG93aW5nIGFyZSB0aGUgcmVzdWx0cyBvbiB4ODYgKEU1LTI2NjAgdjQgQCAyLjAwR0h6KSBjb21w
YXJpbmcgZnJvbSBhKSB0byBiKSAob24geDg2IGluIG15IHNldHVwLCB0aGUgcmVzdWx0cyBhcmUg
bm90IHZlcnkgc3RhYmxlIGJldHdlZW4gcnVucykNCjEpIDI1JQ0KMikgLTMlDQozKSAtMC40JQ0K
NCkgMS4zOCUNCg0KRm9sbG93aW5nIGFyZSB0aGUgcmVzdWx0cyBvbiBhbiBBcm0gc3lzdGVtIGNv
bXBhcmluZyBmcm9tIGEpIHRvIGIpIChyZXN1bHRzIGFyZSBub3QgcHJldHR5IHN0YWJsZSBiZXR3
ZWVuIHJ1bnMpDQoxKSAtMy40NSUNCjIpIDAlDQozKSAtMC4wMyUNCjQpIC0wLjA0JQ0KDQpLb25z
dGFudGluLCBpcyBpdCBwb3NzaWJsZSB0byBydW4gdGhlIHRlc3RzIG9uIHlvdXIgc2V0dXAgYW5k
IGxvb2sgYXQgdGhlIHJlc3VsdHM/DQoNCj4gDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJdWludDMy
X3QgaTsNCj4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCAqY250Ow0KPiA+ID4gPiAr
CXVpbnQ2NF90IGM7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlmb3IgKGkgPSAwLCBjbnQgPSB2LT5x
c2JyX2NudDsgaSA8IHYtPm1heF90aHJlYWRzOyBpKyssIGNudCsrKSB7DQo+ID4gPiA+ICsJCVJD
VV9EUF9MT0coREVCVUcsDQo+ID4gPiA+ICsJCQkiJXM6IGNoZWNrOiB0b2tlbiA9ICVsdSwgd2Fp
dCA9ICVkLCBUaHJlYWQgSUQgPSAlZCIsDQo+ID4gPiA+ICsJCQlfX2Z1bmNfXywgdCwgd2FpdCwg
aSk7DQo+ID4gPiA+ICsJCXdoaWxlICgxKSB7DQo+ID4gPiA+ICsJCQljID0gX19hdG9taWNfbG9h
ZF9uKCZjbnQtPmNudCwNCj4gPiA+IF9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ID4gPiArCQkJUkNV
X0RQX0xPRyhERUJVRywNCj4gPiA+ID4gKwkJCQkiJXM6IHN0YXR1czogdG9rZW4gPSAlbHUsIHdh
aXQgPSAlZCwgVGhyZWFkDQo+ID4gPiBRUyBjbnQgPSAlbHUsIFRocmVhZCBJRCA9ICVkIiwNCj4g
PiA+ID4gKwkJCQlfX2Z1bmNfXywgdCwgd2FpdCwgYywgaSk7DQo+ID4gPiA+ICsJCQkvKiBDb3Vu
dGVyIGlzIG5vdCBjaGVja2VkIGZvciB3cmFwLWFyb3VuZA0KPiA+ID4gY29uZGl0aW9uDQo+ID4g
PiA+ICsJCQkgKiBhcyBpdCBpcyBhIDY0YiBjb3VudGVyLg0KPiA+ID4gPiArCQkJICovDQo+ID4g
PiA+ICsJCQlpZiAobGlrZWx5KGMgPT0gUlRFX1FTQlJfQ05UX1RIUl9PRkZMSU5FIHx8IGMgPj0N
Cj4gPiA+IHQpKQ0KPiA+ID4gPiArCQkJCWJyZWFrOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCQkv
KiBUaGlzIHRocmVhZCBpcyBub3QgaW4gcXVpZXNjZW50IHN0YXRlICovDQo+ID4gPiA+ICsJCQlp
ZiAoIXdhaXQpDQo+ID4gPiA+ICsJCQkJcmV0dXJuIDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJ
CXJ0ZV9wYXVzZSgpOw0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4g
PiA+ICsJcmV0dXJuIDE7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+
ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkg
bWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAq
IENoZWNrcyBpZiBhbGwgdGhlIHJlYWRlciB0aHJlYWRzIGhhdmUgZW50ZXJlZCB0aGUgcXVpZXNj
ZW50DQo+ID4gPiA+ICtzdGF0ZQ0KPiA+ID4gPiArICogcmVmZXJlbmNlZCBieSB0b2tlbi4NCj4g
PiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbG9jay1mcmVl
IGZ1bmN0aW9uLiBJdCBpcw0KPiA+ID4gPiArbXVsdGktdGhyZWFkDQo+ID4gPiA+ICsgKiBzYWZl
IGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIHdvcmtlciB0aHJlYWRzIGFzIHdlbGwuDQo+ID4g
PiA+ICsgKg0KPiA+ID4gPiArICogSWYgdGhpcyBBUEkgaXMgY2FsbGVkIHdpdGggJ3dhaXQnIHNl
dCB0byB0cnVlLCB0aGUgZm9sbG93aW5nDQo+ID4gPiA+ICsgKiBmYWN0b3JzIG11c3QgYmUgY29u
c2lkZXJlZDoNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiAxKSBJZiB0aGUgY2FsbGluZyB0aHJl
YWQgaXMgYWxzbyByZXBvcnRpbmcgdGhlIHN0YXR1cyBvbiB0aGUNCj4gPiA+ID4gKyAqIHNhbWUg
UVMgdmFyaWFibGUsIGl0IG11c3QgdXBkYXRlIHRoZSBxdWllc2NlbnQgc3RhdGUgc3RhdHVzLA0K
PiA+ID4gPiArYmVmb3JlDQo+ID4gPiA+ICsgKiBjYWxsaW5nIHRoaXMgQVBJLg0KPiA+ID4gPiAr
ICoNCj4gPiA+ID4gKyAqIDIpIEluIGFkZGl0aW9uLCB3aGlsZSBjYWxsaW5nIGZyb20gbXVsdGlw
bGUgdGhyZWFkcywgb25seQ0KPiA+ID4gPiArICogb25lIG9mIHRob3NlIHRocmVhZHMgY2FuIGJl
IHJlcG9ydGluZyB0aGUgcXVpZXNjZW50IHN0YXRlDQo+ID4gPiA+ICtzdGF0dXMNCj4gPiA+ID4g
KyAqIG9uIGEgZ2l2ZW4gUVMgdmFyaWFibGUuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBh
cmFtIHYNCj4gPiA+ID4gKyAqICAgUVMgdmFyaWFibGUNCj4gPiA+ID4gKyAqIEBwYXJhbSB0DQo+
ID4gPiA+ICsgKiAgIFRva2VuIHJldHVybmVkIGJ5IHJ0ZV9yY3VfcXNicl9zdGFydCBBUEkNCj4g
PiA+ID4gKyAqIEBwYXJhbSB3YWl0DQo+ID4gPiA+ICsgKiAgIElmIHRydWUsIGJsb2NrIHRpbGwg
YWxsIHRoZSByZWFkZXIgdGhyZWFkcyBoYXZlIGNvbXBsZXRlZCBlbnRlcmluZw0KPiA+ID4gPiAr
ICogICB0aGUgcXVpZXNjZW50IHN0YXRlIHJlZmVyZW5jZWQgYnkgdG9rZW4gJ3QnLg0KPiA+ID4g
PiArICogQHJldHVybg0KPiA+ID4gPiArICogICAtIDAgaWYgYWxsIHJlYWRlciB0aHJlYWRzIGhh
dmUgTk9UIHBhc3NlZCB0aHJvdWdoIHNwZWNpZmllZA0KPiBudW1iZXINCj4gPiA+ID4gKyAqICAg
ICBvZiBxdWllc2NlbnQgc3RhdGVzLg0KPiA+ID4gPiArICogICAtIDEgaWYgYWxsIHJlYWRlciB0
aHJlYWRzIGhhdmUgcGFzc2VkIHRocm91Z2ggc3BlY2lmaWVkIG51bWJlcg0KPiA+ID4gPiArICog
ICAgIG9mIHF1aWVzY2VudCBzdGF0ZXMuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBf
X3J0ZV9hbHdheXNfaW5saW5lIGludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+ID4gK3J0ZV9y
Y3VfcXNicl9jaGVjayhzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1aW50NjRfdCB0LCBib29sIHdh
aXQpIHsNCj4gPiA+ID4gKwlSVEVfQVNTRVJUKHYgIT0gTlVMTCk7DQo+ID4gPiA+ICsNCj4gPiA+
ID4gKwlpZiAobGlrZWx5KHYtPm51bV90aHJlYWRzID09IHYtPm1heF90aHJlYWRzKSkNCj4gPiA+
ID4gKwkJcmV0dXJuIF9fcmN1X3FzYnJfY2hlY2tfYWxsKHYsIHQsIHdhaXQpOw0KPiA+ID4gPiAr
CWVsc2UNCj4gPiA+ID4gKwkJcmV0dXJuIF9fcmN1X3FzYnJfY2hlY2tfc2VsZWN0aXZlKHYsIHQs
IHdhaXQpOyB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQHdhcm5pbmcN
Cj4gPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0
IHByaW9yIG5vdGljZQ0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFdhaXQgdGlsbCB0aGUgcmVh
ZGVyIHRocmVhZHMgaGF2ZSBlbnRlcmVkIHF1aWVzY2VudCBzdGF0ZS4NCj4gPiA+ID4gKyAqDQo+
ID4gPiA+ICsgKiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbG9jay1mcmVlIGZ1bmN0aW9uLiBJ
dCBpcyBtdWx0aS10aHJlYWQgc2FmZS4NCj4gPiA+ID4gKyAqIFRoaXMgQVBJIGNhbiBiZSB0aG91
Z2h0IG9mIGFzIGEgd3JhcHBlciBhcm91bmQNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl9zdGFydCBh
bmQNCj4gPiA+ID4gKyAqIHJ0ZV9yY3VfcXNicl9jaGVjayBBUElzLg0KPiA+ID4gPiArICoNCj4g
PiA+ID4gKyAqIElmIHRoaXMgQVBJIGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMsIG9u
bHkgb25lIG9mDQo+ID4gPiA+ICsgKiB0aG9zZSB0aHJlYWRzIGNhbiBiZSByZXBvcnRpbmcgdGhl
IHF1aWVzY2VudCBzdGF0ZSBzdGF0dXMgb24gYQ0KPiA+ID4gPiArICogZ2l2ZW4gUVMgdmFyaWFi
bGUuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFtIHYNCj4gPiA+ID4gKyAqICAgUVMg
dmFyaWFibGUNCj4gPiA+ID4gKyAqIEBwYXJhbSB0aHJlYWRfaWQNCj4gPiA+ID4gKyAqICAgVGhy
ZWFkIElEIG9mIHRoZSBjYWxsZXIgaWYgaXQgaXMgcmVnaXN0ZXJlZCB0byByZXBvcnQgcXVpZXNj
ZW50IHN0YXRlDQo+ID4gPiA+ICsgKiAgIG9uIHRoaXMgUVMgdmFyaWFibGUgKGkuZS4gdGhlIGNh
bGxpbmcgdGhyZWFkIGlzIGFsc28gcGFydCBvZiB0aGUNCj4gPiA+ID4gKyAqICAgcmVhZHNpZGUg
Y3JpdGljYWwgc2VjdGlvbikuIElmIG5vdCwgcGFzcyBSVEVfUVNCUl9USFJJRF9JTlZBTElELg0K
PiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkIF9f
cnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4gPiArcnRlX3JjdV9xc2JyX3N5bmNocm9uaXplKHN0cnVj
dCBydGVfcmN1X3FzYnIgKnYsIHVuc2lnbmVkIGludA0KPiA+ID4gPiArdGhyZWFkX2lkKSB7DQo+
ID4gPiA+ICsJdWludDY0X3QgdDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCVJURV9BU1NFUlQodiAh
PSBOVUxMKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXQgPSBydGVfcmN1X3FzYnJfc3RhcnQodik7
DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBJZiB0aGUgY3VycmVudCB0aHJlYWQgaGFzIHJlYWRz
aWRlIGNyaXRpY2FsIHNlY3Rpb24sDQo+ID4gPiA+ICsJICogdXBkYXRlIGl0cyBxdWllc2NlbnQg
c3RhdGUgc3RhdHVzLg0KPiA+ID4gPiArCSAqLw0KPiA+ID4gPiArCWlmICh0aHJlYWRfaWQgIT0g
UlRFX1FTQlJfVEhSSURfSU5WQUxJRCkNCj4gPiA+ID4gKwkJcnRlX3JjdV9xc2JyX3F1aWVzY2Vu
dCh2LCB0aHJlYWRfaWQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogV2FpdCBmb3Igb3RoZXIg
cmVhZGVycyB0byBlbnRlciBxdWllc2NlbnQgc3RhdGUgKi8NCj4gPiA+ID4gKwlydGVfcmN1X3Fz
YnJfY2hlY2sodiwgdCwgdHJ1ZSk7DQo+ID4gPg0KPiA+ID4gQW5kIHlvdSBhcmUgcHJlc3VtYWJs
eSByZWx5aW5nIG9uIDY0LWJpdCBjb3VudGVycyB0byBhdm9pZCB0aGUgbmVlZA0KPiA+ID4gdG8g
ZXhlY3V0ZSB0aGUgYWJvdmUgY29kZSB0d2ljZSBpbiBzdWNjZXNzaW9uLiAgV2hpY2ggYWdhaW4g
d29ya3MNCj4gPiA+IGdpdmVuIGN1cnJlbnQgQ1BVIGNsb2NrIHJhdGVzIGNvbWJpbmVkIHdpdGgg
c3lzdGVtIGFuZCBodW1hbg0KPiBsaWZlc3BhbnMuDQo+ID4gPiBPdGhlcndpc2UsIHRoZXJlIGFy
ZSBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMgdGhhdCBjYW4gaGFwcGVuLCBzbw0KPiA+ID4g
ZG9uJ3QgdHJ5IHRoaXMgd2l0aCBhIDMyLWJpdCBjb3VudGVyISEhDQo+ID4NCj4gPiBZZXMuIEkg
YW0gcmVseWluZyBvbiA2NC1iaXQgY291bnRlcnMgdG8gYXZvaWQgaGF2aW5nIHRvIHNwZW5kIGN5
Y2xlcyAoYW5kDQo+IHRpbWUpLg0KPiA+DQo+ID4gPiAoQnV0IHRoaW5rIG9mIHRoZSBncmVhdF5O
IGdyYW5kY2hpbGRyZW4hISEpDQo+ID4NCj4gPiAoSXQgaXMgYW4gaW50ZXJlc3RpbmcgdGhvdWdo
dC4gSSB3b25kZXIgd2hhdCB3b3VsZCBoYXBwZW4gdG8gYWxsIHRoZQ0KPiA+IGNvZGUgd2UgYXJl
IHdyaXRpbmcgdG9kYXkg8J+YiikNCj4gDQo+IEkgc3VzcGVjdCB0aGF0IG1vc3Qgc3lzdGVtcyB3
aWxsIGJlIHJlYm9vdGVkIG1vcmUgdGhhbiBvbmNlIHBlciBkZWNhZGUsDQo+IHNvIHVubGVzcyBD
UFUgY29yZSBjbG9jayByYXRlcyBtYW5hZ2UgdG8gZ28gdXAgYW5vdGhlciBvcmRlciBvZg0KPiBt
YWduaXR1ZGUsIHdlIHNob3VsZCBiZSBqdXN0IGZpbmUuDQo+IA0KPiBGYW1vdXMgbGFzdCB3b3Jk
cyEgIDstKQ0KPiANCj4gPiA+IE1vcmUgc2VyaW91c2x5LCBhIGNvbW1lbnQgd2FybmluZyBwZW9w
bGUgbm90IHRvIG1ha2UgdGhlIGNvdW50ZXINCj4gYmUNCj4gPiA+IDMyIGJpdHMgaXMgaW4gb3Jk
ZXIuDQo+ID4gQWdyZWUsIEkgd2lsbCBhZGQgaXQgaW4gdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9u
Lg0KPiANCj4gU291bmRzIGdvb2QhDQpEb25lIGluIFY1DQoNCjxzbmlwPg0KDQo=