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 E100CA034F;
	Mon,  7 Feb 2022 02:35:01 +0100 (CET)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id A04DD4069D;
	Mon,  7 Feb 2022 02:35:01 +0100 (CET)
Received: from mga03.intel.com (mga03.intel.com [134.134.136.65])
 by mails.dpdk.org (Postfix) with ESMTP id 80AA340685
 for <dev@dpdk.org>; Mon,  7 Feb 2022 02:34:59 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
 d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
 t=1644197699; x=1675733699;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-transfer-encoding:mime-version;
 bh=/4rtStKJ5rcTd8ds5uUGDuVOKu1MbdaqCNeLGFwr7yY=;
 b=KQp5uzdN50GNwaZ3IyMNS7D5SjzOxu4+TGLlJbJ1oW1org3E0Hl2L/Bf
 Pa8O4O1lfe4bIrB/b/Fm3XYaZk1YGugz/O1Fn7X2OUbmk4L9TuEI/vB7O
 ghLFDPut5pWsleM+zhTwYAaPpwnL28Bb9RyccDfo0s6oFmiJdBS5OnYFc
 +XnGNtXERbeJFImsDupO/lWnFzDUcqEWAKN4tPqI5V+3ctZMyPx7PN6xc
 fRWorO8/IvIPtP57e0BEFScc3Pb1oAbMuFJlLahXk4QG0w9vrJK+2gONl
 UoODef0iVXV08jvGnLN0W6LW7TkAD8EC7zk6hRy+2Ssba/r2uFewlz70z w==;
X-IronPort-AV: E=McAfee;i="6200,9189,10250"; a="248571764"
X-IronPort-AV: E=Sophos;i="5.88,348,1635231600"; d="scan'208";a="248571764"
Received: from orsmga001.jf.intel.com ([10.7.209.18])
 by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 06 Feb 2022 17:34:58 -0800
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.88,348,1635231600"; d="scan'208";a="567313716"
Received: from irsmsx606.ger.corp.intel.com ([163.33.146.139])
 by orsmga001.jf.intel.com with ESMTP; 06 Feb 2022 17:34:57 -0800
Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by
 IRSMSX606.ger.corp.intel.com (163.33.146.139) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2308.20; Mon, 7 Feb 2022 01:34:55 +0000
Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by
 SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.2308.020;
 Mon, 7 Feb 2022 09:34:52 +0800
From: "Hu, Jiayu" <jiayu.hu@intel.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>, "dev@dpdk.org" <dev@dpdk.org>
CC: "i.maximets@ovn.org" <i.maximets@ovn.org>, "Xia, Chenbo"
 <chenbo.xia@intel.com>, "Richardson, Bruce" <bruce.richardson@intel.com>,
 "Van Haaren, Harry" <harry.van.haaren@intel.com>, "Pai G, Sunil"
 <sunil.pai.g@intel.com>, "Mcnamara, John" <john.mcnamara@intel.com>, "Ding,
 Xuan" <xuan.ding@intel.com>, "Jiang, Cheng1" <cheng1.jiang@intel.com>,
 "liangma@liangbit.com" <liangma@liangbit.com>
Subject: RE: [PATCH v2 1/1] vhost: integrate dmadev in asynchronous datapath
Thread-Topic: [PATCH v2 1/1] vhost: integrate dmadev in asynchronous datapath
Thread-Index: AQHYEP2QariglXSj20a2UbkpOtnDqKyBVQ6AgAX5e/A=
Date: Mon, 7 Feb 2022 01:34:52 +0000
Message-ID: <74b39fe943e740bea4e8d5a6358b99b2@intel.com>
References: <20211230215505.329674-1-jiayu.hu@intel.com>
 <20220124164011.1402593-1-jiayu.hu@intel.com>
 <20220124164011.1402593-2-jiayu.hu@intel.com>
 <42a88a85-f4cd-d6e0-f5d2-411db1879380@redhat.com>
In-Reply-To: <42a88a85-f4cd-d6e0-f5d2-411db1879380@redhat.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
dlp-reaction: no-action
dlp-version: 11.6.200.16
dlp-product: dlpe-windows
x-originating-ip: [10.239.127.36]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
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

SGkgTWF4aW1lLA0KDQpUaGFua3MgZm9yIHlvdXIgY29tbWVudHMuIFBsZWFzZSBzZWUgcmVwbGll
cyBpbmxpbmUuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF4aW1l
IENvcXVlbGluIDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gU2VudDogVGh1cnNkYXks
IEZlYnJ1YXJ5IDMsIDIwMjIgOTowNCBQTQ0KPiBUbzogSHUsIEppYXl1IDxqaWF5dS5odUBpbnRl
bC5jb20+OyBkZXZAZHBkay5vcmcNCj4gQ2M6IGkubWF4aW1ldHNAb3ZuLm9yZzsgWGlhLCBDaGVu
Ym8gPGNoZW5iby54aWFAaW50ZWwuY29tPjsgUmljaGFyZHNvbiwNCj4gQnJ1Y2UgPGJydWNlLnJp
Y2hhcmRzb25AaW50ZWwuY29tPjsgVmFuIEhhYXJlbiwgSGFycnkNCj4gPGhhcnJ5LnZhbi5oYWFy
ZW5AaW50ZWwuY29tPjsgUGFpIEcsIFN1bmlsIDxzdW5pbC5wYWkuZ0BpbnRlbC5jb20+Ow0KPiBN
Y25hbWFyYSwgSm9obiA8am9obi5tY25hbWFyYUBpbnRlbC5jb20+OyBEaW5nLCBYdWFuDQo+IDx4
dWFuLmRpbmdAaW50ZWwuY29tPjsgSmlhbmcsIENoZW5nMSA8Y2hlbmcxLmppYW5nQGludGVsLmNv
bT47DQo+IGxpYW5nbWFAbGlhbmdiaXQuY29tDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgMS8x
XSB2aG9zdDogaW50ZWdyYXRlIGRtYWRldiBpbiBhc3luY2hyb25vdXMNCj4gZGF0YXBhdGgNCj4g
DQo+IEhpIEppYXl1LA0KPiANCj4gT24gMS8yNC8yMiAxNzo0MCwgSmlheXUgSHUgd3JvdGU6DQo+
ID4gU2luY2UgZG1hZGV2IGlzIGludHJvZHVjZWQgaW4gMjEuMTEsIHRvIGF2b2lkIHRoZSBvdmVy
aGVhZCBvZiB2aG9zdA0KPiA+IERNQSBhYnN0cmFjdGlvbiBsYXllciBhbmQgc2ltcGxpZnkgYXBw
bGljYXRpb24gbG9naWNzLCB0aGlzIHBhdGNoDQo+ID4gaW50ZWdyYXRlcyBkbWFkZXYgaW4gYXN5
bmNocm9ub3VzIGRhdGEgcGF0aC4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEppYXl1IEh1IDxq
aWF5dS5odUBpbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogU3VuaWwgUGFpIEcgPHN1bmls
LnBhaS5nQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgIGRvYy9ndWlkZXMvcHJvZ19ndWlkZS92
aG9zdF9saWIucnN0IHwgIDk1ICsrKystLS0tLQ0KPiA+ICAgZXhhbXBsZXMvdmhvc3QvTWFrZWZp
bGUgICAgICAgICAgICAgfCAgIDIgKy0NCj4gPiAgIGV4YW1wbGVzL3Zob3N0L2lvYXQuYyAgICAg
ICAgICAgICAgIHwgMjE4IC0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gICBleGFtcGxlcy92aG9z
dC9pb2F0LmggICAgICAgICAgICAgICB8ICA2MyAtLS0tLS0NCj4gPiAgIGV4YW1wbGVzL3Zob3N0
L21haW4uYyAgICAgICAgICAgICAgIHwgMjU1ICsrKysrKysrKysrKysrKysrKy0tLS0tDQo+ID4g
ICBleGFtcGxlcy92aG9zdC9tYWluLmggICAgICAgICAgICAgICB8ICAxMSArDQo+ID4gICBleGFt
cGxlcy92aG9zdC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgNiArLQ0KPiA+ICAgbGliL3Zob3N0
L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgfCAgIDIgKy0NCj4gPiAgIGxpYi92aG9zdC9ydGVf
dmhvc3QuaCAgICAgICAgICAgICAgIHwgICAyICsNCj4gPiAgIGxpYi92aG9zdC9ydGVfdmhvc3Rf
YXN5bmMuaCAgICAgICAgIHwgMTMyICsrKysrLS0tLS0tLQ0KPiA+ICAgbGliL3Zob3N0L3ZlcnNp
b24ubWFwICAgICAgICAgICAgICAgfCAgIDMgKw0KPiA+ICAgbGliL3Zob3N0L3Zob3N0LmMgICAg
ICAgICAgICAgICAgICAgfCAxNDggKysrKysrKysrKy0tLS0NCj4gPiAgIGxpYi92aG9zdC92aG9z
dC5oICAgICAgICAgICAgICAgICAgIHwgIDY0ICsrKysrLQ0KPiA+ICAgbGliL3Zob3N0L3Zob3N0
X3VzZXIuYyAgICAgICAgICAgICAgfCAgIDIgKw0KPiA+ICAgbGliL3Zob3N0L3ZpcnRpb19uZXQu
YyAgICAgICAgICAgICAgfCAzMDUgKysrKysrKysrKysrKysrKysrKysrKystLS0tLQ0KPiA+ICAg
MTUgZmlsZXMgY2hhbmdlZCwgNzQ0IGluc2VydGlvbnMoKyksIDU2NCBkZWxldGlvbnMoLSkNCj4g
PiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy92aG9zdC9pb2F0LmMNCj4gPiAgIGRlbGV0
ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy92aG9zdC9pb2F0LmgNCj4gPg0KPiANCj4gV2hlbiB5b3Ug
cmViYXNlIHRvIHRoZSBuZXh0IHZlcnNpb24sIHBsZWFzZSBlbnN1cmUgdG8gcmV3b3JrIGFsbCB0
aGUgbG9ncyB0bw0KPiBmb2xsb3cgdGhlIG5ldyBzdGFuZGFyZDoNCj4gVkhPU1RfTE9HX0NPTkZJ
RyhFUlIsIiglcykgLi4uLi4iLCBkZXYtPmlmbmFtZSwgLi4uKTsNCg0KU3VyZSwgd2lsbCBkby4N
Cg0KPiANCj4gPiBnaXQgYS9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5jLmggYi9saWIvdmhvc3Qv
cnRlX3Zob3N0X2FzeW5jLmggaW5kZXgNCj4gPiBhODdlYTZiYTM3Li43NThhODBmNDAzIDEwMDY0
NA0KPiA+IC0tLSBhL2xpYi92aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiA+ICsrKyBiL2xpYi92
aG9zdC9ydGVfdmhvc3RfYXN5bmMuaA0KPiA+IEBAIC0yNiw3MyArMjYsNiBAQCBzdHJ1Y3QgcnRl
X3Zob3N0X2lvdl9pdGVyIHsNCj4gPiAgIAl1bnNpZ25lZCBsb25nIG5yX3NlZ3M7DQo+ID4gICB9
Ow0KPiA+DQo+ID4gLS8qKg0KPiA+IC0gKiBkbWEgdHJhbnNmZXIgc3RhdHVzDQo+ID4gLSAqLw0K
PiA+IC1zdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX3N0YXR1cyB7DQo+ID4gLQkvKiogQW4gYXJyYXkg
b2YgYXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSBmb3Igc291cmNlIG1lbW9yeSAqLw0KPiA+IC0J
dWludHB0cl90ICpzcmNfb3BhcXVlX2RhdGE7DQo+ID4gLQkvKiogQW4gYXJyYXkgb2YgYXBwbGlj
YXRpb24gc3BlY2lmaWMgZGF0YSBmb3IgZGVzdGluYXRpb24gbWVtb3J5ICovDQo+ID4gLQl1aW50
cHRyX3QgKmRzdF9vcGFxdWVfZGF0YTsNCj4gPiAtfTsNCj4gPiAtDQo+ID4gLS8qKg0KPiA+IC0g
KiBkbWEgb3BlcmF0aW9uIGNhbGxiYWNrcyB0byBiZSBpbXBsZW1lbnRlZCBieSBhcHBsaWNhdGlv
bnMNCj4gPiAtICovDQo+ID4gLXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMgew0K
PiA+IC0JLyoqDQo+ID4gLQkgKiBpbnN0cnVjdCBhc3luYyBlbmdpbmVzIHRvIHBlcmZvcm0gY29w
aWVzIGZvciBhIGJhdGNoIG9mIHBhY2tldHMNCj4gPiAtCSAqDQo+ID4gLQkgKiBAcGFyYW0gdmlk
DQo+ID4gLQkgKiAgaWQgb2Ygdmhvc3QgZGV2aWNlIHRvIHBlcmZvcm0gZGF0YSBjb3BpZXMNCj4g
PiAtCSAqIEBwYXJhbSBxdWV1ZV9pZA0KPiA+IC0JICogIHF1ZXVlIGlkIHRvIHBlcmZvcm0gZGF0
YSBjb3BpZXMNCj4gPiAtCSAqIEBwYXJhbSBpb3ZfaXRlcg0KPiA+IC0JICogIGFuIGFycmF5IG9m
IElPViBpdGVyYXRvcnMNCj4gPiAtCSAqIEBwYXJhbSBvcGFxdWVfZGF0YQ0KPiA+IC0JICogIG9w
YXF1ZSBkYXRhIHBhaXIgc2VuZGluZyB0byBETUEgZW5naW5lDQo+ID4gLQkgKiBAcGFyYW0gY291
bnQNCj4gPiAtCSAqICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICJkZXNjcyIgYXJyYXkNCj4g
PiAtCSAqIEByZXR1cm4NCj4gPiAtCSAqICBudW1iZXIgb2YgSU9WIGl0ZXJhdG9ycyBwcm9jZXNz
ZWQsIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIGVycm9yDQo+ID4gLQkgKi8NCj4gPiAtCWludDMyX3Qg
KCp0cmFuc2Zlcl9kYXRhKShpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiAtCQlzdHJ1
Y3QgcnRlX3Zob3N0X2lvdl9pdGVyICppb3ZfaXRlciwNCj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0
X2FzeW5jX3N0YXR1cyAqb3BhcXVlX2RhdGEsDQo+ID4gLQkJdWludDE2X3QgY291bnQpOw0KPiA+
IC0JLyoqDQo+ID4gLQkgKiBjaGVjayBjb3B5LWNvbXBsZXRlZCBwYWNrZXRzIGZyb20gdGhlIGFz
eW5jIGVuZ2luZQ0KPiA+IC0JICogQHBhcmFtIHZpZA0KPiA+IC0JICogIGlkIG9mIHZob3N0IGRl
dmljZSB0byBjaGVjayBjb3B5IGNvbXBsZXRpb24NCj4gPiAtCSAqIEBwYXJhbSBxdWV1ZV9pZA0K
PiA+IC0JICogIHF1ZXVlIGlkIHRvIGNoZWNrIGNvcHkgY29tcGxldGlvbg0KPiA+IC0JICogQHBh
cmFtIG9wYXF1ZV9kYXRhDQo+ID4gLQkgKiAgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIG9wYXF1ZSBk
YXRhIHBhaXIgZnJvbSBETUEgZW5naW5lDQo+ID4gLQkgKiBAcGFyYW0gbWF4X3BhY2tldHMNCj4g
PiAtCSAqICBtYXggbnVtYmVyIG9mIHBhY2tldHMgY291bGQgYmUgY29tcGxldGVkDQo+ID4gLQkg
KiBAcmV0dXJuDQo+ID4gLQkgKiAgbnVtYmVyIG9mIGFzeW5jIGRlc2NzIGNvbXBsZXRlZCwgbmVn
YXRpdmUgdmFsdWUgbWVhbnMgZXJyb3INCj4gPiAtCSAqLw0KPiA+IC0JaW50MzJfdCAoKmNoZWNr
X2NvbXBsZXRlZF9jb3BpZXMpKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+IC0JCXN0
cnVjdCBydGVfdmhvc3RfYXN5bmNfc3RhdHVzICpvcGFxdWVfZGF0YSwNCj4gPiAtCQl1aW50MTZf
dCBtYXhfcGFja2V0cyk7DQo+ID4gLX07DQo+ID4gLQ0KPiA+IC0vKioNCj4gPiAtICogIGFzeW5j
IGNoYW5uZWwgZmVhdHVyZXMNCj4gPiAtICovDQo+ID4gLWVudW0gew0KPiA+IC0JUlRFX1ZIT1NU
X0FTWU5DX0lOT1JERVIgPSAxVSA8PCAwLA0KPiA+IC19Ow0KPiA+IC0NCj4gPiAtLyoqDQo+ID4g
LSAqICBhc3luYyBjaGFubmVsIGNvbmZpZ3VyYXRpb24NCj4gPiAtICovDQo+ID4gLXN0cnVjdCBy
dGVfdmhvc3RfYXN5bmNfY29uZmlnIHsNCj4gPiAtCXVpbnQzMl90IGZlYXR1cmVzOw0KPiA+IC0J
dWludDMyX3QgcnN2ZFsyXTsNCj4gPiAtfTsNCj4gPiAtDQo+ID4gICAvKioNCj4gPiAgICAqIFJl
Z2lzdGVyIGFuIGFzeW5jIGNoYW5uZWwgZm9yIGEgdmhvc3QgcXVldWUNCj4gPiAgICAqDQo+ID4g
QEAgLTEwMCwxNyArMzMsMTEgQEAgc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgew0KPiA+
ICAgICogIHZob3N0IGRldmljZSBpZCBhc3luYyBjaGFubmVsIHRvIGJlIGF0dGFjaGVkIHRvDQo+
ID4gICAgKiBAcGFyYW0gcXVldWVfaWQNCj4gPiAgICAqICB2aG9zdCBxdWV1ZSBpZCBhc3luYyBj
aGFubmVsIHRvIGJlIGF0dGFjaGVkIHRvDQo+ID4gLSAqIEBwYXJhbSBjb25maWcNCj4gPiAtICog
IEFzeW5jIGNoYW5uZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUNCj4gPiAtICogQHBhcmFtIG9w
cw0KPiA+IC0gKiAgQXN5bmMgY2hhbm5lbCBvcGVyYXRpb24gY2FsbGJhY2tzDQo+ID4gICAgKiBA
cmV0dXJuDQo+ID4gICAgKiAgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlcw0KPiA+ICAgICov
DQo+ID4gICBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAtaW50IHJ0ZV92aG9zdF9hc3luY19jaGFu
bmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+IC0Jc3RydWN0IHJ0
ZV92aG9zdF9hc3luY19jb25maWcgY29uZmlnLA0KPiA+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3lu
Y19jaGFubmVsX29wcyAqb3BzKTsNCj4gPiAraW50IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3Jl
Z2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkKTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4g
ICAgKiBVbnJlZ2lzdGVyIGFuIGFzeW5jIGNoYW5uZWwgZm9yIGEgdmhvc3QgcXVldWUgQEAgLTEz
NiwxNyArNjMsMTENCj4gPiBAQCBpbnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfdW5yZWdpc3Rl
cihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCk7DQo+ID4gICAgKiAgdmhvc3QgZGV2aWNlIGlk
IGFzeW5jIGNoYW5uZWwgdG8gYmUgYXR0YWNoZWQgdG8NCj4gPiAgICAqIEBwYXJhbSBxdWV1ZV9p
ZA0KPiA+ICAgICogIHZob3N0IHF1ZXVlIGlkIGFzeW5jIGNoYW5uZWwgdG8gYmUgYXR0YWNoZWQg
dG8NCj4gPiAtICogQHBhcmFtIGNvbmZpZw0KPiA+IC0gKiAgQXN5bmMgY2hhbm5lbCBjb25maWd1
cmF0aW9uDQo+ID4gLSAqIEBwYXJhbSBvcHMNCj4gPiAtICogIEFzeW5jIGNoYW5uZWwgb3BlcmF0
aW9uIGNhbGxiYWNrcw0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogIDAgb24gc3VjY2Vzcywg
LTEgb24gZmFpbHVyZXMNCj4gPiAgICAqLw0KPiA+ICAgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4g
LWludCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2
aWQsIHVpbnQxNl90DQo+IHF1ZXVlX2lkLA0KPiA+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3luY19j
b25maWcgY29uZmlnLA0KPiA+IC0Jc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyAq
b3BzKTsNCj4gPiAraW50IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3RocmVhZF91
bnNhZmUoaW50IHZpZCwgdWludDE2X3QNCj4gPiArcXVldWVfaWQpOw0KPiA+DQo+ID4gICAvKioN
Cj4gPiAgICAqIFVucmVnaXN0ZXIgYW4gYXN5bmMgY2hhbm5lbCBmb3IgYSB2aG9zdCBxdWV1ZSB3
aXRob3V0IHBlcmZvcm1pbmcNCj4gPiBhbnkgQEAgLTE3OSwxMiArMTAwLDE3IEBAIGludA0KPiBy
dGVfdmhvc3RfYXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVyX3RocmVhZF91bnNhZmUoaW50IHZpZCwN
Cj4gPiAgICAqICBhcnJheSBvZiBwYWNrZXRzIHRvIGJlIGVucXVldWVkDQo+ID4gICAgKiBAcGFy
YW0gY291bnQNCj4gPiAgICAqICBwYWNrZXRzIG51bSB0byBiZSBlbnF1ZXVlZA0KPiA+ICsgKiBA
cGFyYW0gZG1hX2lkDQo+ID4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB0aGUgRE1BIGRldmljZQ0K
PiA+ICsgKiBAcGFyYW0gdmNoYW5faWQNCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHZpcnR1
YWwgRE1BIGNoYW5uZWwNCj4gPiAgICAqIEByZXR1cm4NCj4gPiAgICAqICBudW0gb2YgcGFja2V0
cyBlbnF1ZXVlZA0KPiA+ICAgICovDQo+ID4gICBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAgIHVp
bnQxNl90IHJ0ZV92aG9zdF9zdWJtaXRfZW5xdWV1ZV9idXJzdChpbnQgdmlkLCB1aW50MTZfdCBx
dWV1ZV9pZCwNCj4gPiAtCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCk7
DQo+ID4gKwkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291bnQsIGludDE2X3Qg
ZG1hX2lkLA0KPiA+ICsJCXVpbnQxNl90IHZjaGFuX2lkKTsNCj4gPg0KPiA+ICAgLyoqDQo+ID4g
ICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBhc3luYyBjb21wbGV0aW9uIHN0YXR1cyBmb3IgYSBz
cGVjaWZpYyB2aG9zdA0KPiA+IEBAIC0xOTksMTIgKzEyNSwxNyBAQCB1aW50MTZfdCBydGVfdmhv
c3Rfc3VibWl0X2VucXVldWVfYnVyc3QoaW50DQo+IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+
ID4gICAgKiAgYmxhbmsgYXJyYXkgdG8gZ2V0IHJldHVybiBwYWNrZXQgcG9pbnRlcg0KPiA+ICAg
ICogQHBhcmFtIGNvdW50DQo+ID4gICAgKiAgc2l6ZSBvZiB0aGUgcGFja2V0IGFycmF5DQo+ID4g
KyAqIEBwYXJhbSBkbWFfaWQNCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBETUEgZGV2
aWNlDQo+ID4gKyAqIEBwYXJhbSB2Y2hhbl9pZA0KPiA+ICsgKiAgdGhlIGlkZW50aWZpZXIgb2Yg
dmlydHVhbCBETUEgY2hhbm5lbA0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogIG51bSBvZiBw
YWNrZXRzIHJldHVybmVkDQo+ID4gICAgKi8NCj4gPiAgIF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+
ICAgdWludDE2X3QgcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoaW50IHZpZCwgdWlu
dDE2X3QgcXVldWVfaWQsDQo+ID4gLQkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3Qg
Y291bnQpOw0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50LCBp
bnQxNl90IGRtYV9pZCwNCj4gPiArCQl1aW50MTZfdCB2Y2hhbl9pZCk7DQo+ID4NCj4gPiAgIC8q
Kg0KPiA+ICAgICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgaW4tZmxpZ2h0
IHBhY2tldHMgZm9yIHRoZQ0KPiA+IHZob3N0IEBAIC0yMzUsMTEgKzE2Niw0NCBAQCBpbnQgcnRl
X3Zob3N0X2FzeW5jX2dldF9pbmZsaWdodChpbnQgdmlkLA0KPiB1aW50MTZfdCBxdWV1ZV9pZCk7
DQo+ID4gICAgKiAgQmxhbmsgYXJyYXkgdG8gZ2V0IHJldHVybiBwYWNrZXQgcG9pbnRlcg0KPiA+
ICAgICogQHBhcmFtIGNvdW50DQo+ID4gICAgKiAgU2l6ZSBvZiB0aGUgcGFja2V0IGFycmF5DQo+
ID4gKyAqIEBwYXJhbSBkbWFfaWQNCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBETUEg
ZGV2aWNlDQo+ID4gKyAqIEBwYXJhbSB2Y2hhbl9pZA0KPiA+ICsgKiAgdGhlIGlkZW50aWZpZXIg
b2YgdmlydHVhbCBETUEgY2hhbm5lbA0KPiA+ICAgICogQHJldHVybg0KPiA+ICAgICogIE51bWJl
ciBvZiBwYWNrZXRzIHJldHVybmVkDQo+ID4gICAgKi8NCj4gPiAgIF9fcnRlX2V4cGVyaW1lbnRh
bA0KPiA+ICAgdWludDE2X3QgcnRlX3Zob3N0X2NsZWFyX3F1ZXVlX3RocmVhZF91bnNhZmUoaW50
IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gLQkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywg
dWludDE2X3QgY291bnQpOw0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90
IGNvdW50LCBpbnQxNl90IGRtYV9pZCwNCj4gPiArCQl1aW50MTZfdCB2Y2hhbl9pZCk7DQo+ID4g
Ky8qKg0KPiA+ICsgKiBUaGUgRE1BIHZDaGFubmVscyB1c2VkIGluIGFzeW5jaHJvbm91cyBkYXRh
IHBhdGggbXVzdCBiZQ0KPiA+ICtjb25maWd1cmVkDQo+ID4gKyAqIGZpcnN0LiBTbyB0aGlzIGZ1
bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgZW5hYmxpbmcgRE1BDQo+ID4gKyAqIGFj
Y2VsZXJhdGlvbiBmb3IgdnJpbmcuIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGFzeW5jaHJvbm91
cyBkYXRhDQo+ID4gK3BhdGgNCj4gPiArICogY2Fubm90IGJlIGVuYWJsZWQgZm9yIGFueSB2cmlu
ZyBmdXJ0aGVyLg0KPiA+ICsgKg0KPiA+ICsgKiBETUEgZGV2aWNlcyB1c2VkIGluIGRhdGEtcGF0
aCBtdXN0IGJlbG9uZyB0byBETUEgZGV2aWNlcyBnaXZlbiBpbg0KPiA+ICt0aGlzDQo+ID4gKyAq
IGZ1bmN0aW9uLiBCdXQgdXNlcnMgYXJlIGZyZWUgdG8gdXNlIERNQSBkZXZpY2VzIGdpdmVuIGlu
IHRoZQ0KPiA+ICtmdW5jdGlvbg0KPiA+ICsgKiBpbiBub24tdmhvc3Qgc2NlbmFyaW9zLCBvbmx5
IGlmIGd1YXJhbnRlZSBubyBjb3BpZXMgaW4gdmhvc3QgYXJlDQo+ID4gKyAqIG9mZmxvYWRlZCB0
byB0aGVtIGF0IHRoZSBzYW1lIHRpbWUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBkbWFzX2lk
DQo+ID4gKyAqICBETUEgSUQgYXJyYXkNCj4gPiArICogQHBhcmFtIGNvdW50DQo+ID4gKyAqICBF
bGVtZW50IG51bWJlciBvZiAnZG1hc19pZCcNCj4gPiArICogQHBhcmFtIHBvbGxfZmFjdG9yDQo+
ID4gKyAqICBGb3IgbGFyZ2Ugb3Igc2NhdHRlci1nYXRoZXIgcGFja2V0cywgb25lIHBhY2tldCB3
b3VsZCBjb25zaXN0IG9mDQo+ID4gKyAqICBzbWFsbCBidWZmZXJzLiBJbiB0aGlzIGNhc2UsIHZo
b3N0IHdpbGwgaXNzdWUgc2V2ZXJhbCBETUEgY29weQ0KPiA+ICsgKiAgb3BlcmF0aW9ucyBmb3Ig
dGhlIHBhY2tldC4gVGhlcmVmb3JlLCB0aGUgbnVtYmVyIG9mIGNvcGllcyB0bw0KPiA+ICsgKiAg
Y2hlY2sgYnkgcnRlX2RtYV9jb21wbGV0ZWQoKSBpcyBjYWxjdWxhdGVkIGJ5ICJuYl9wa3RzX3Rv
X3BvbGwgKg0KPiA+ICsgKiAgcG9sbF9mYWN0b3IiIGFuZHVzZWQgaW4gcnRlX3Zob3N0X3BvbGxf
ZW5xdWV1ZV9jb21wbGV0ZWQoKS4gVGhlDQo+ID4gKyAqICBkZWZhdWx0IHZhbHVlIG9mICJwb2xs
X2ZhY3RvciIgaXMgMS4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgMCBvbiBzdWNjZXNzLCBh
bmQgLTEgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4g
K2ludCBydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZShpbnQxNl90ICpkbWFzX2lkLCB1aW50
MTZfdCBjb3VudCwNCj4gPiArCQl1aW50MTZfdCBwb2xsX2ZhY3Rvcik7DQo+ID4NCj4gPiAgICNl
bmRpZiAvKiBfUlRFX1ZIT1NUX0FTWU5DX0hfICovDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi92aG9z
dC92ZXJzaW9uLm1hcCBiL2xpYi92aG9zdC92ZXJzaW9uLm1hcCBpbmRleA0KPiA+IGE3ZWY3ZjE5
NzYuLjEyMDJiYTljMWEgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL3Zob3N0L3ZlcnNpb24ubWFwDQo+
ID4gKysrIGIvbGliL3Zob3N0L3ZlcnNpb24ubWFwDQo+ID4gQEAgLTg0LDYgKzg0LDkgQEAgRVhQ
RVJJTUVOVEFMIHsNCj4gPg0KPiA+ICAgCSMgYWRkZWQgaW4gMjEuMTENCj4gPiAgIAlydGVfdmhv
c3RfZ2V0X21vbml0b3JfYWRkcjsNCj4gPiArDQo+ID4gKwkjIGFkZGVkIGluIDIyLjAzDQo+ID4g
KwlydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZTsNCj4gPiAgIH07DQo+ID4NCj4gPiAgIElO
VEVSTkFMIHsNCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3Zob3N0LmMgYi9saWIvdmhvc3Qv
dmhvc3QuYyBpbmRleA0KPiA+IDEzYTliYjlkZDEuLmM0MDhjZWU2M2UgMTAwNjQ0DQo+ID4gLS0t
IGEvbGliL3Zob3N0L3Zob3N0LmMNCj4gPiArKysgYi9saWIvdmhvc3Qvdmhvc3QuYw0KPiA+IEBA
IC0yNSw3ICsyNSw3IEBADQo+ID4gICAjaW5jbHVkZSAidmhvc3QuaCINCj4gPiAgICNpbmNsdWRl
ICJ2aG9zdF91c2VyLmgiDQo+ID4NCj4gPiAtc3RydWN0IHZpcnRpb19uZXQgKnZob3N0X2Rldmlj
ZXNbTUFYX1ZIT1NUX0RFVklDRV07DQo+ID4gK3N0cnVjdCB2aXJ0aW9fbmV0ICp2aG9zdF9kZXZp
Y2VzW1JURV9NQVhfVkhPU1RfREVWSUNFXTsNCj4gPiAgIHB0aHJlYWRfbXV0ZXhfdCB2aG9zdF9k
ZXZfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7DQo+ID4NCj4gPiAgIC8qIENhbGxl
ZCB3aXRoIGlvdGxiX2xvY2sgcmVhZC1sb2NrZWQgKi8gQEAgLTM0NCw2ICszNDQsNyBAQA0KPiA+
IHZob3N0X2ZyZWVfYXN5bmNfbWVtKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQ0KPiA+ICAg
CQlyZXR1cm47DQo+ID4NCj4gPiAgIAlydGVfZnJlZSh2cS0+YXN5bmMtPnBrdHNfaW5mbyk7DQo+
ID4gKwlydGVfZnJlZSh2cS0+YXN5bmMtPnBrdHNfY21wbF9mbGFnKTsNCj4gPg0KPiA+ICAgCXJ0
ZV9mcmVlKHZxLT5hc3luYy0+YnVmZmVyc19wYWNrZWQpOw0KPiA+ICAgCXZxLT5hc3luYy0+YnVm
ZmVyc19wYWNrZWQgPSBOVUxMOw0KPiA+IEBAIC02NjcsMTIgKzY2OCwxMiBAQCB2aG9zdF9uZXdf
ZGV2aWNlKHZvaWQpDQo+ID4gICAJaW50IGk7DQo+ID4NCj4gPiAgIAlwdGhyZWFkX211dGV4X2xv
Y2soJnZob3N0X2Rldl9sb2NrKTsNCj4gPiAtCWZvciAoaSA9IDA7IGkgPCBNQVhfVkhPU1RfREVW
SUNFOyBpKyspIHsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfTUFYX1ZIT1NUX0RFVklDRTsg
aSsrKSB7DQo+ID4gICAJCWlmICh2aG9zdF9kZXZpY2VzW2ldID09IE5VTEwpDQo+ID4gICAJCQli
cmVhazsNCj4gPiAgIAl9DQo+ID4NCj4gPiAtCWlmIChpID09IE1BWF9WSE9TVF9ERVZJQ0UpIHsN
Cj4gPiArCWlmIChpID09IFJURV9NQVhfVkhPU1RfREVWSUNFKSB7DQo+ID4gICAJCVZIT1NUX0xP
R19DT05GSUcoRVJSLA0KPiA+ICAgCQkJIkZhaWxlZCB0byBmaW5kIGEgZnJlZSBzbG90IGZvciBu
ZXcgZGV2aWNlLlxuIik7DQo+ID4gICAJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ2aG9zdF9kZXZf
bG9jayk7DQo+ID4gQEAgLTE2MjYsOCArMTYyNyw3IEBAIHJ0ZV92aG9zdF9leHRlcm5fY2FsbGJh
Y2tfcmVnaXN0ZXIoaW50IHZpZCwNCj4gPiAgIH0NCj4gPg0KPiA+ICAgc3RhdGljIF9fcnRlX2Fs
d2F5c19pbmxpbmUgaW50DQo+ID4gLWFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWlu
dDE2X3QgcXVldWVfaWQsDQo+ID4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29w
cyAqb3BzKQ0KPiA+ICthc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1
ZXVlX2lkKQ0KPiA+ICAgew0KPiA+ICAgCXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYgPSBnZXRfZGV2
aWNlKHZpZCk7DQo+ID4gICAJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkZXYtPnZpcnRx
dWV1ZVtxdWV1ZV9pZF07IEBAIC0xNjU2LDYNCj4gPiArMTY1NiwxNCBAQCBhc3luY19jaGFubmVs
X3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ICAgCQlnb3RvIG91dF9m
cmVlX2FzeW5jOw0KPiA+ICAgCX0NCj4gPg0KPiA+ICsJYXN5bmMtPnBrdHNfY21wbF9mbGFnID0g
cnRlX3ptYWxsb2Nfc29ja2V0KE5VTEwsIHZxLT5zaXplICoNCj4gc2l6ZW9mKGJvb2wpLA0KPiA+
ICsJCQlSVEVfQ0FDSEVfTElORV9TSVpFLCBub2RlKTsNCj4gPiArCWlmICghYXN5bmMtPnBrdHNf
Y21wbF9mbGFnKSB7DQo+ID4gKwkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJmYWlsZWQgdG8gYWxs
b2NhdGUgYXN5bmMNCj4gcGt0c19jbXBsX2ZsYWcgKHZpZCAlZCwgcWlkOiAlZClcbiIsDQo+ID4g
KwkJCQl2aWQsIHF1ZXVlX2lkKTsNCj4gPiArCQlnb3RvIG91dF9mcmVlX2FzeW5jOw0KPiA+ICsJ
fQ0KPiA+ICsNCj4gPiAgIAlpZiAodnFfaXNfcGFja2VkKGRldikpIHsNCj4gPiAgIAkJYXN5bmMt
PmJ1ZmZlcnNfcGFja2VkID0gcnRlX21hbGxvY19zb2NrZXQoTlVMTCwNCj4gPiAgIAkJCQl2cS0+
c2l6ZSAqIHNpemVvZihzdHJ1Y3QNCj4gdnJpbmdfdXNlZF9lbGVtX3BhY2tlZCksIEBAIC0xNjc2
LDkNCj4gPiArMTY4NCw2IEBAIGFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2
X3QgcXVldWVfaWQsDQo+ID4gICAJCX0NCj4gPiAgIAl9DQo+ID4NCj4gPiAtCWFzeW5jLT5vcHMu
Y2hlY2tfY29tcGxldGVkX2NvcGllcyA9IG9wcy0NCj4gPmNoZWNrX2NvbXBsZXRlZF9jb3BpZXM7
DQo+ID4gLQlhc3luYy0+b3BzLnRyYW5zZmVyX2RhdGEgPSBvcHMtPnRyYW5zZmVyX2RhdGE7DQo+
ID4gLQ0KPiA+ICAgCXZxLT5hc3luYyA9IGFzeW5jOw0KPiA+DQo+ID4gICAJcmV0dXJuIDA7DQo+
ID4gQEAgLTE2OTEsMTUgKzE2OTYsMTMgQEAgYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlk
LCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwNCj4gPiAgIH0NCj4gPg0KPiA+ICAgaW50DQo+ID4gLXJ0
ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lk
LA0KPiA+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY29uZmlnIGNvbmZpZywNCj4gPiAtCQlz
dHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzICpvcHMpDQo+ID4gK3J0ZV92aG9zdF9h
c3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkKQ0KPiA+ICAg
ew0KPiA+ICAgCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiA+ICAgCXN0cnVjdCB2aXJ0
aW9fbmV0ICpkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ID4gICAJaW50IHJldDsNCj4gPg0KPiA+
IC0JaWYgKGRldiA9PSBOVUxMIHx8IG9wcyA9PSBOVUxMKQ0KPiA+ICsJaWYgKGRldiA9PSBOVUxM
KQ0KPiA+ICAgCQlyZXR1cm4gLTE7DQo+ID4NCj4gPiAgIAlpZiAocXVldWVfaWQgPj0gVkhPU1Rf
TUFYX1ZSSU5HKQ0KPiA+IEBAIC0xNzEwLDMzICsxNzEzLDIwIEBAIHJ0ZV92aG9zdF9hc3luY19j
aGFubmVsX3JlZ2lzdGVyKGludCB2aWQsDQo+IHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ICAgCWlm
ICh1bmxpa2VseSh2cSA9PSBOVUxMIHx8ICFkZXYtPmFzeW5jX2NvcHkpKQ0KPiA+ICAgCQlyZXR1
cm4gLTE7DQo+ID4NCj4gPiAtCWlmICh1bmxpa2VseSghKGNvbmZpZy5mZWF0dXJlcyAmIFJURV9W
SE9TVF9BU1lOQ19JTk9SREVSKSkpIHsNCj4gPiAtCQlWSE9TVF9MT0dfQ09ORklHKEVSUiwNCj4g
PiAtCQkJImFzeW5jIGNvcHkgaXMgbm90IHN1cHBvcnRlZCBvbiBub24taW5vcmRlciBtb2RlICIN
Cj4gPiAtCQkJIih2aWQgJWQsIHFpZDogJWQpXG4iLCB2aWQsIHF1ZXVlX2lkKTsNCj4gPiAtCQly
ZXR1cm4gLTE7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKHVubGlrZWx5KG9wcy0+Y2hlY2tf
Y29tcGxldGVkX2NvcGllcyA9PSBOVUxMIHx8DQo+ID4gLQkJb3BzLT50cmFuc2Zlcl9kYXRhID09
IE5VTEwpKQ0KPiA+IC0JCXJldHVybiAtMTsNCj4gPiAtDQo+ID4gICAJcnRlX3NwaW5sb2NrX2xv
Y2soJnZxLT5hY2Nlc3NfbG9jayk7DQo+ID4gLQlyZXQgPSBhc3luY19jaGFubmVsX3JlZ2lzdGVy
KHZpZCwgcXVldWVfaWQsIG9wcyk7DQo+ID4gKwlyZXQgPSBhc3luY19jaGFubmVsX3JlZ2lzdGVy
KHZpZCwgcXVldWVfaWQpOw0KPiA+ICAgCXJ0ZV9zcGlubG9ja191bmxvY2soJnZxLT5hY2Nlc3Nf
bG9jayk7DQo+ID4NCj4gPiAgIAlyZXR1cm4gcmV0Ow0KPiA+ICAgfQ0KPiA+DQo+ID4gICBpbnQN
Cj4gPiAtcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXJfdGhyZWFkX3Vuc2FmZShpbnQg
dmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwNCj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5j
X2NvbmZpZyBjb25maWcsDQo+ID4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29w
cyAqb3BzKQ0KPiA+ICtydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5z
YWZlKGludCB2aWQsIHVpbnQxNl90DQo+ID4gK3F1ZXVlX2lkKQ0KPiA+ICAgew0KPiA+ICAgCXN0
cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOw0KPiA+ICAgCXN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYg
PSBnZXRfZGV2aWNlKHZpZCk7DQo+ID4NCj4gPiAtCWlmIChkZXYgPT0gTlVMTCB8fCBvcHMgPT0g
TlVMTCkNCj4gPiArCWlmIChkZXYgPT0gTlVMTCkNCj4gPiAgIAkJcmV0dXJuIC0xOw0KPiA+DQo+
ID4gICAJaWYgKHF1ZXVlX2lkID49IFZIT1NUX01BWF9WUklORykNCj4gPiBAQCAtMTc0NywxOCAr
MTczNyw3IEBADQo+IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3RocmVhZF91bnNh
ZmUoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gICAJaWYgKHVubGlrZWx5KHZxID09
IE5VTEwgfHwgIWRldi0+YXN5bmNfY29weSkpDQo+ID4gICAJCXJldHVybiAtMTsNCj4gPg0KPiA+
IC0JaWYgKHVubGlrZWx5KCEoY29uZmlnLmZlYXR1cmVzICYgUlRFX1ZIT1NUX0FTWU5DX0lOT1JE
RVIpKSkgew0KPiA+IC0JCVZIT1NUX0xPR19DT05GSUcoRVJSLA0KPiA+IC0JCQkiYXN5bmMgY29w
eSBpcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1pbm9yZGVyIG1vZGUgIg0KPiA+IC0JCQkiKHZpZCAl
ZCwgcWlkOiAlZClcbiIsIHZpZCwgcXVldWVfaWQpOw0KPiA+IC0JCXJldHVybiAtMTsNCj4gPiAt
CX0NCj4gPiAtDQo+ID4gLQlpZiAodW5saWtlbHkob3BzLT5jaGVja19jb21wbGV0ZWRfY29waWVz
ID09IE5VTEwgfHwNCj4gPiAtCQlvcHMtPnRyYW5zZmVyX2RhdGEgPT0gTlVMTCkpDQo+ID4gLQkJ
cmV0dXJuIC0xOw0KPiA+IC0NCj4gPiAtCXJldHVybiBhc3luY19jaGFubmVsX3JlZ2lzdGVyKHZp
ZCwgcXVldWVfaWQsIG9wcyk7DQo+ID4gKwlyZXR1cm4gYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcih2
aWQsIHF1ZXVlX2lkKTsNCj4gPiAgIH0NCj4gPg0KPiA+ICAgaW50DQo+ID4gQEAgLTE4MzUsNiAr
MTgxNCw5NSBAQA0KPiBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVyX3RocmVhZF91
bnNhZmUoaW50IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQpDQo+ID4gICAJcmV0dXJuIDA7DQo+
ID4gICB9DQo+ID4NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ICt2
aG9zdF9mcmVlX2FzeW5jX2RtYV9tZW0odm9pZCkNCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsN
Cj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgUlRFX0RNQURFVl9ERUZBVUxUX01BWDsgaSsr
KSB7DQo+ID4gKwkJc3RydWN0IGFzeW5jX2RtYV9pbmZvICpkbWEgPSAmZG1hX2NvcHlfdHJhY2tb
aV07DQo+ID4gKwkJaW50MTZfdCBqOw0KPiA+ICsNCj4gPiArCQlpZiAoZG1hLT5tYXhfdmNoYW5z
ID09IDApDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsNCj4gPiArCQlmb3IgKGogPSAwOyBqIDwg
ZG1hLT5tYXhfdmNoYW5zOyBqKyspDQo+ID4gKwkJCXJ0ZV9mcmVlKGRtYS0+dmNoYW5zW2pdLnBr
dHNfY29tcGxldGVkX2ZsYWcpOw0KPiA+ICsNCj4gPiArCQlydGVfZnJlZShkbWEtPnZjaGFucyk7
DQo+ID4gKwkJZG1hLT52Y2hhbnMgPSBOVUxMOw0KPiA+ICsJCWRtYS0+bWF4X3ZjaGFucyA9IDA7
DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludA0KPiA+ICtydGVfdmhvc3RfYXN5bmNf
ZG1hX2NvbmZpZ3VyZShpbnQxNl90ICpkbWFzX2lkLCB1aW50MTZfdCBjb3VudCwNCj4gPiArdWlu
dDE2X3QgcG9sbF9mYWN0b3IpDQo+IA0KPiBJJ20gbm90IGZhbiBvZiB0aGUgcG9sbF9mYWN0b3Is
IEkgdGhpbmsgaXQgaXMgdG9vIGNvbXBsZXggZm9yIHRoZSB1c2VyIHRvIGtub3cNCj4gd2hhdCB2
YWx1ZSBoZSBzaG91bGQgc2V0Lg0KDQpJdCBzZWVtcyBzbywgYW5kIHVzZXJzIG5lZWQgdG8ga25v
dyBETUEgb2ZmbG9hZGluZyBkZXRhaWxzIGJlZm9yZSBzZXR0aW5nIGl0Lg0KVGhlIHNpbXBsZSB3
YXkgaXMgc2V0dGluZyB0aGUgbWF4IGNvcGllcyB0byBjaGVjayBieSBydGVfZG1hX2NvbXBsZXRl
ZCB0bw0KOTcyOC8yMDQ4KjMyLCB3aGVyZSA5NzI4IGlzIGVxdWFsIHRvIFZJUlRJT19NQVhfUlhf
UEtUTEVOIGFuZCAzMiBpcw0KTUFYX1BLVF9CVVJTVC4gSXQgc2hvdWxkIGJlIGFibGUgdG8gY292
ZXIgbW9zdCBvZiBjYXNlcy4NCg0KPiANCj4gQWxzbywgSSB3b3VsZCBsaWtlIHRoYXQgdGhlIEFQ
SSBvbmx5IHJlZ2lzdGVycyBvbmUgRE1BIGNoYW5uZWwgYXQgYSB0aW1lIGFuZA0KPiBsZXQgdGhl
IGFwcGxpY2F0aW9uIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMuIERvbmcgdGhhdCwgdXNlciBjYW4g
c3RpbGwgdXNlIHRoZSBETUENCj4gY2hhbm5lbHMgdGhhdCBjb3VsZCBiZSByZWdpc3RlcmVkLg0K
DQpTdXJlLCBJIHdpbGwgY2hhbmdlIGl0Lg0KPiANCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsN
Cj4gPiArDQo+ID4gKwlpZiAoIWRtYXNfaWQpIHsNCj4gPiArCQlWSE9TVF9MT0dfQ09ORklHKEVS
UiwgIkludmFsaWQgRE1BIGNvbmZpZ3VyYXRpb24NCj4gcGFyYW1ldGVyLlxuIik7DQo+ID4gKwkJ
cmV0dXJuIC0xOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChwb2xsX2ZhY3RvciA9PSAwKSB7
DQo+ID4gKwkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJJbnZhbGlkIERNQSBwb2xsIGZhY3RvciAl
dVxuIiwNCj4gcG9sbF9mYWN0b3IpOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0NCj4gPiAr
CWRtYV9wb2xsX2ZhY3RvciA9IHBvbGxfZmFjdG9yOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7
IGkgPCBjb3VudDsgaSsrKSB7DQo+ID4gKwkJc3RydWN0IGFzeW5jX2RtYV92Y2hhbl9pbmZvICp2
Y2hhbnM7DQo+ID4gKwkJc3RydWN0IHJ0ZV9kbWFfaW5mbyBpbmZvOw0KPiA+ICsJCXVpbnQxNl90
IG1heF92Y2hhbnM7DQo+ID4gKwkJdWludDE2X3QgbWF4X2Rlc2M7DQo+ID4gKwkJdWludDE2X3Qg
ajsNCj4gPiArDQo+ID4gKwkJaWYgKCFydGVfZG1hX2lzX3ZhbGlkKGRtYXNfaWRbaV0pKSB7DQo+
ID4gKwkJCVZIT1NUX0xPR19DT05GSUcoRVJSLCAiRE1BICVkIGlzIG5vdCBmb3VuZC4NCj4gQ2Fu
bm90IGVuYWJsZSBhc3luYyINCj4gPiArCQkJCSAgICAgICAiIGRhdGEtcGF0aFxuLiIsIGRtYXNf
aWRbaV0pOw0KPiA+ICsJCQl2aG9zdF9mcmVlX2FzeW5jX2RtYV9tZW0oKTsNCj4gPiArCQkJcmV0
dXJuIC0xOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJcnRlX2RtYV9pbmZvX2dldChkbWFzX2lk
W2ldLCAmaW5mbyk7DQo+ID4gKw0KPiA+ICsJCW1heF92Y2hhbnMgPSBpbmZvLm1heF92Y2hhbnM7
DQo+ID4gKwkJbWF4X2Rlc2MgPSBpbmZvLm1heF9kZXNjOw0KPiA+ICsNCj4gPiArCQlpZiAoIXJ0
ZV9pc19wb3dlcl9vZl8yKG1heF9kZXNjKSkNCj4gPiArCQkJbWF4X2Rlc2MgPSBydGVfYWxpZ24z
MnBvdzIobWF4X2Rlc2MpOw0KPiA+ICsNCj4gPiArCQl2Y2hhbnMgPSBydGVfem1hbGxvYyhOVUxM
LCBzaXplb2Yoc3RydWN0DQo+IGFzeW5jX2RtYV92Y2hhbl9pbmZvKSAqIG1heF92Y2hhbnMsDQo+
ID4gKwkJCQlSVEVfQ0FDSEVfTElORV9TSVpFKTsNCj4gPiArCQlpZiAodmNoYW5zID09IE5VTEwp
IHsNCj4gPiArCQkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgdmNo
YW5zDQo+IGZvciBkbWEtJWQuIg0KPiA+ICsJCQkJCSIgQ2Fubm90IGVuYWJsZSBhc3luYyBkYXRh
LXBhdGguXG4iLA0KPiBkbWFzX2lkW2ldKTsNCj4gPiArCQkJdmhvc3RfZnJlZV9hc3luY19kbWFf
bWVtKCk7DQo+ID4gKwkJCXJldHVybiAtMTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWZvciAo
aiA9IDA7IGogPCBtYXhfdmNoYW5zOyBqKyspIHsNCj4gPiArCQkJdmNoYW5zW2pdLnBrdHNfY29t
cGxldGVkX2ZsYWcgPSBydGVfem1hbGxvYyhOVUxMLA0KPiBzaXplb2YoYm9vbCAqKSAqIG1heF9k
ZXNjLA0KPiA+ICsJCQkJCVJURV9DQUNIRV9MSU5FX1NJWkUpOw0KPiA+ICsJCQlpZiAoIXZjaGFu
c1tqXS5wa3RzX2NvbXBsZXRlZF9mbGFnKSB7DQo+ID4gKwkJCQlWSE9TVF9MT0dfQ09ORklHKEVS
UiwgIkZhaWxlZCB0byBhbGxvY2F0ZQ0KPiBwa3RzX2NvbXBsZXRlZF9mbGFnIGZvciAiDQo+ID4g
KwkJCQkJCSJkbWEtJWQgdmNoYW4tJXVcbiIsDQo+IGRtYXNfaWRbaV0sIGopOw0KPiA+ICsJCQkJ
dmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKCk7DQo+ID4gKwkJCQlyZXR1cm4gLTE7DQo+ID4gKwkJ
CX0NCj4gPiArDQo+ID4gKwkJCXZjaGFuc1tqXS5yaW5nX3NpemUgPSBtYXhfZGVzYzsNCj4gPiAr
CQkJdmNoYW5zW2pdLnJpbmdfbWFzayA9IG1heF9kZXNjIC0gMTsNCj4gPiArCQl9DQo+ID4gKw0K
PiA+ICsJCWRtYV9jb3B5X3RyYWNrW2RtYXNfaWRbaV1dLnZjaGFucyA9IHZjaGFuczsNCj4gPiAr
CQlkbWFfY29weV90cmFja1tkbWFzX2lkW2ldXS5tYXhfdmNoYW5zID0gbWF4X3ZjaGFuczsNCj4g
PiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIGludA0K
PiA+ICAgcnRlX3Zob3N0X2FzeW5jX2dldF9pbmZsaWdodChpbnQgdmlkLCB1aW50MTZfdCBxdWV1
ZV9pZCkNCj4gPiAgIHsNCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3Zob3N0LmggYi9saWIv
dmhvc3Qvdmhvc3QuaCBpbmRleA0KPiA+IDcwODVlMDg4NWMuLjQ3NTg0M2ZlYzAgMTAwNjQ0DQo+
ID4gLS0tIGEvbGliL3Zob3N0L3Zob3N0LmgNCj4gPiArKysgYi9saWIvdmhvc3Qvdmhvc3QuaA0K
PiA+IEBAIC0xOSw2ICsxOSw3IEBADQo+ID4gICAjaW5jbHVkZSA8cnRlX2V0aGVyLmg+DQo+ID4g
ICAjaW5jbHVkZSA8cnRlX3J3bG9jay5oPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV9tYWxsb2MuaD4N
Cj4gPiArI2luY2x1ZGUgPHJ0ZV9kbWFkZXYuaD4NCj4gPg0KPiA+ICAgI2luY2x1ZGUgInJ0ZV92
aG9zdC5oIg0KPiA+ICAgI2luY2x1ZGUgInJ0ZV92ZHBhLmgiDQo+ID4gQEAgLTUwLDYgKzUxLDcg
QEANCj4gPg0KPiA+ICAgI2RlZmluZSBWSE9TVF9NQVhfQVNZTkNfSVQgKE1BWF9QS1RfQlVSU1Qp
DQo+ID4gICAjZGVmaW5lIFZIT1NUX01BWF9BU1lOQ19WRUMgMjA0OA0KPiA+ICsjZGVmaW5lIFZI
T1NUX0FTWU5DX0RNQV9CQVRDSElOR19TSVpFIDMyDQo+ID4NCj4gPiAgICNkZWZpbmUgUEFDS0VE
X0RFU0NfRU5RVUVVRV9VU0VEX0ZMQUcodykJXA0KPiA+ICAgCSgodykgPyAoVlJJTkdfREVTQ19G
X0FWQUlMIHwgVlJJTkdfREVTQ19GX1VTRUQgfA0KPiA+IFZSSU5HX0RFU0NfRl9XUklURSkgOiBc
IEBAIC0xMTksNiArMTIxLDQyIEBAIHN0cnVjdA0KPiB2cmluZ191c2VkX2VsZW1fcGFja2VkIHsN
Cj4gPiAgIAl1aW50MzJfdCBjb3VudDsNCj4gPiAgIH07DQo+ID4NCj4gPiArc3RydWN0IGFzeW5j
X2RtYV92Y2hhbl9pbmZvIHsNCj4gPiArCS8qIGNpcmN1bGFyIGFycmF5IHRvIHRyYWNrIGlmIHBh
Y2tldCBjb3B5IGNvbXBsZXRlcyAqLw0KPiA+ICsJYm9vbCAqKnBrdHNfY29tcGxldGVkX2ZsYWc7
DQo+ID4gKw0KPiA+ICsJLyogbWF4IGVsZW1lbnRzIGluICdtZXRhZGF0YScgKi8NCj4gPiArCXVp
bnQxNl90IHJpbmdfc2l6ZTsNCj4gPiArCS8qIHJpbmcgaW5kZXggbWFzayBmb3IgJ21ldGFkYXRh
JyAqLw0KPiA+ICsJdWludDE2X3QgcmluZ19tYXNrOw0KPiA+ICsNCj4gPiArCS8qIGJhdGNoaW5n
IGNvcGllcyBiZWZvcmUgYSBETUEgZG9vcmJlbGwgKi8NCj4gPiArCXVpbnQxNl90IG5yX2JhdGNo
aW5nOw0KPiA+ICsNCj4gPiArCS8qKg0KPiA+ICsJICogRE1BIHZpcnR1YWwgY2hhbm5lbCBsb2Nr
LiBBbHRob3VnaCBpdCBpcyBhYmxlIHRvIGJpbmQgRE1BDQo+ID4gKwkgKiB2aXJ0dWFsIGNoYW5u
ZWxzIHRvIGRhdGEgcGxhbmUgdGhyZWFkcywgdmhvc3QgY29udHJvbCBwbGFuZQ0KPiA+ICsJICog
dGhyZWFkIGNvdWxkIGNhbGwgZGF0YSBwbGFuZSBmdW5jdGlvbnMgdG9vLCB0aHVzIGNhdXNpbmcN
Cj4gPiArCSAqIERNQSBkZXZpY2UgY29udGVudGlvbi4NCj4gPiArCSAqDQo+ID4gKwkgKiBGb3Ig
ZXhhbXBsZSwgaW4gVk0gZXhpdCBjYXNlLCB2aG9zdCBjb250cm9sIHBsYW5lIHRocmVhZCBuZWVk
cw0KPiA+ICsJICogdG8gY2xlYXIgaW4tZmxpZ2h0IHBhY2tldHMgYmVmb3JlIGRpc2FibGUgdnJp
bmcsIGJ1dCB0aGVyZSBjb3VsZA0KPiA+ICsJICogYmUgYW5vdHRoZXIgZGF0YSBwbGFuZSB0aHJl
YWQgaXMgZW5xdWV1aW5nIHBhY2tldHMgdG8gdGhlIHNhbWUNCj4gPiArCSAqIHZyaW5nIHdpdGgg
dGhlIHNhbWUgRE1BIHZpcnR1YWwgY2hhbm5lbC4gQnV0IGRtYWRldiBQTUQNCj4gZnVuY3Rpb25z
DQo+ID4gKwkgKiBhcmUgbG9jay1mcmVlLCBzbyB0aGUgY29udHJvbCBwbGFuZSBhbmQgZGF0YSBw
bGFuZSB0aHJlYWRzDQo+ID4gKwkgKiBjb3VsZCBvcGVyYXRlIHRoZSBzYW1lIERNQSB2aXJ0dWFs
IGNoYW5uZWwgYXQgdGhlIHNhbWUgdGltZS4NCj4gPiArCSAqLw0KPiA+ICsJcnRlX3NwaW5sb2Nr
X3QgZG1hX2xvY2s7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYXN5bmNfZG1hX2luZm8g
ew0KPiA+ICsJdWludDE2X3QgbWF4X3ZjaGFuczsNCj4gPiArCXN0cnVjdCBhc3luY19kbWFfdmNo
YW5faW5mbyAqdmNoYW5zOyB9Ow0KPiA+ICsNCj4gPiArZXh0ZXJuIHN0cnVjdCBhc3luY19kbWFf
aW5mbw0KPiBkbWFfY29weV90cmFja1tSVEVfRE1BREVWX0RFRkFVTFRfTUFYXTsNCj4gPiArZXh0
ZXJuIHVpbnQxNl90IGRtYV9wb2xsX2ZhY3RvcjsNCj4gPiArDQo+ID4gICAvKioNCj4gPiAgICAq
IGluZmxpZ2h0IGFzeW5jIHBhY2tldCBpbmZvcm1hdGlvbg0KPiA+ICAgICovDQo+ID4gQEAgLTEy
OSw5ICsxNjcsNiBAQCBzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyB7DQo+ID4gICB9Ow0KPiA+
DQo+ID4gICBzdHJ1Y3Qgdmhvc3RfYXN5bmMgew0KPiA+IC0JLyogb3BlcmF0aW9uIGNhbGxiYWNr
cyBmb3IgRE1BICovDQo+ID4gLQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzIG9w
czsNCj4gPiAtDQo+ID4gICAJc3RydWN0IHJ0ZV92aG9zdF9pb3ZfaXRlciBpb3ZfaXRlcltWSE9T
VF9NQVhfQVNZTkNfSVRdOw0KPiA+ICAgCXN0cnVjdCBydGVfdmhvc3RfaW92ZWMgaW92ZWNbVkhP
U1RfTUFYX0FTWU5DX1ZFQ107DQo+ID4gICAJdWludDE2X3QgaXRlcl9pZHg7DQo+ID4gQEAgLTEz
OSw2ICsxNzQsMjUgQEAgc3RydWN0IHZob3N0X2FzeW5jIHsNCj4gPg0KPiA+ICAgCS8qIGRhdGEg
dHJhbnNmZXIgc3RhdHVzICovDQo+ID4gICAJc3RydWN0IGFzeW5jX2luZmxpZ2h0X2luZm8gKnBr
dHNfaW5mbzsNCj4gPiArCS8qKg0KPiA+ICsJICogUGFja2V0IHJlb3JkZXIgYXJyYXkuICJ0cnVl
IiBpbmRpY2F0ZXMgdGhhdCBETUEgZGV2aWNlDQo+ID4gKwkgKiBjb21wbGV0ZXMgYWxsIGNvcGll
cyBmb3IgdGhlIHBhY2tldC4NCj4gPiArCSAqDQo+ID4gKwkgKiBOb3RlIHRoYXQgdGhpcyBhcnJh
eSBjb3VsZCBiZSB3cml0dGVuIGJ5IG11bHRpcGxlIHRocmVhZHMNCj4gPiArCSAqIHNpbXVsdGFu
ZW91c2x5LiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgdGhyZWFkMCBhbmQNCj4gPiArCSAq
IHRocmVhZDEgUlggcGFja2V0cyBmcm9tIE5JQyBhbmQgdGhlbiBlbnF1ZXVlIHBhY2tldHMgdG8N
Cj4gPiArCSAqIHZyaW5nMCBhbmQgdnJpbmcxIHdpdGggb3duIERNQSBkZXZpY2UgRE1BMCBhbmQg
RE1BMSwgaXQncw0KPiA+ICsJICogcG9zc2libGUgZm9yIHRocmVhZDAgdG8gZ2V0IGNvbXBsZXRl
ZCBjb3BpZXMgYmVsb25naW5nIHRvDQo+ID4gKwkgKiB2cmluZzEgZnJvbSBETUEwLCB3aGlsZSB0
aHJlYWQwIGlzIGNhbGxpbmcgcnRlX3Zob3N0X3BvbGwNCj4gPiArCSAqIF9lbnF1ZXVlX2NvbXBs
ZXRlZCgpIGZvciB2cmluZzAgYW5kIHRocmVhZDEgaXMgY2FsbGluZw0KPiA+ICsJICogcnRlX3Zo
b3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KCkgZm9yIHZyaW5nMS4gSW4gdGhpcyBjYXNlLA0KPiA+
ICsJICogdnEtPmFjY2Vzc19sb2NrIGNhbm5vdCBwcm90ZWN0IHBrdHNfY21wbF9mbGFnIG9mIHZy
aW5nMS4NCj4gPiArCSAqDQo+ID4gKwkgKiBIb3dldmVyLCBzaW5jZSBvZmZsb2FkaW5nIGlzIHBl
ci1wYWNrZXQgYmFzaXMsIGVhY2ggcGFja2V0DQo+ID4gKwkgKiBmbGFnIHdpbGwgb25seSBiZSB3
cml0dGVuIGJ5IG9uZSB0aHJlYWQuIEFuZCBzaW5nbGUgYnl0ZQ0KPiA+ICsJICogd3JpdGUgaXMg
YXRvbWljLCBzbyBubyBsb2NrIGZvciBwa3RzX2NtcGxfZmxhZyBpcyBuZWVkZWQuDQo+ID4gKwkg
Ki8NCj4gPiArCWJvb2wgKnBrdHNfY21wbF9mbGFnOw0KPiA+ICAgCXVpbnQxNl90IHBrdHNfaWR4
Ow0KPiA+ICAgCXVpbnQxNl90IHBrdHNfaW5mbGlnaHRfbjsNCj4gPiAgIAl1bmlvbiB7DQo+ID4g
QEAgLTE5OCw2ICsyNTIsNyBAQCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHsNCj4gPiAgIAkvKiBS
ZWNvcmQgcGFja2VkIHJpbmcgZmlyc3QgZGVxdWV1ZSBkZXNjIGluZGV4ICovDQo+ID4gICAJdWlu
dDE2X3QJCXNoYWRvd19sYXN0X3VzZWRfaWR4Ow0KPiA+DQo+ID4gKwl1aW50MTZfdAkJYmF0Y2hf
Y29weV9tYXhfZWxlbXM7DQo+ID4gICAJdWludDE2X3QJCWJhdGNoX2NvcHlfbmJfZWxlbXM7DQo+
ID4gICAJc3RydWN0IGJhdGNoX2NvcHlfZWxlbQkqYmF0Y2hfY29weV9lbGVtczsNCj4gPiAgIAlp
bnQJCQludW1hX25vZGU7DQo+ID4gQEAgLTU2OCw4ICs2MjMsNyBAQCBleHRlcm4gaW50IHZob3N0
X2RhdGFfbG9nX2xldmVsOw0KPiA+ICAgI2RlZmluZSBQUklOVF9QQUNLRVQoZGV2aWNlLCBhZGRy
LCBzaXplLCBoZWFkZXIpIGRvIHt9IHdoaWxlICgwKQ0KPiA+ICAgI2VuZGlmDQo+ID4NCj4gPiAt
I2RlZmluZSBNQVhfVkhPU1RfREVWSUNFCTEwMjQNCj4gPiAtZXh0ZXJuIHN0cnVjdCB2aXJ0aW9f
bmV0ICp2aG9zdF9kZXZpY2VzW01BWF9WSE9TVF9ERVZJQ0VdOw0KPiA+ICtleHRlcm4gc3RydWN0
IHZpcnRpb19uZXQgKnZob3N0X2RldmljZXNbUlRFX01BWF9WSE9TVF9ERVZJQ0VdOw0KPiA+DQo+
ID4gICAjZGVmaW5lIFZIT1NUX0JJTkFSWV9TRUFSQ0hfVEhSRVNIIDI1Ng0KPiA+DQo+ID4gZGlm
ZiAtLWdpdCBhL2xpYi92aG9zdC92aG9zdF91c2VyLmMgYi9saWIvdmhvc3Qvdmhvc3RfdXNlci5j
IGluZGV4DQo+ID4gNWViMWRkNjgxMi4uMzE0N2U3MmYwNCAxMDA2NDQNCj4gPiAtLS0gYS9saWIv
dmhvc3Qvdmhvc3RfdXNlci5jDQo+ID4gKysrIGIvbGliL3Zob3N0L3Zob3N0X3VzZXIuYw0KPiA+
IEBAIC01MjcsNiArNTI3LDggQEAgdmhvc3RfdXNlcl9zZXRfdnJpbmdfbnVtKHN0cnVjdCB2aXJ0
aW9fbmV0DQo+ICoqcGRldiwNCj4gPiAgIAkJcmV0dXJuIFJURV9WSE9TVF9NU0dfUkVTVUxUX0VS
UjsNCj4gPiAgIAl9DQo+ID4NCj4gPiArCXZxLT5iYXRjaF9jb3B5X21heF9lbGVtcyA9IHZxLT5z
aXplOw0KPiA+ICsNCj4gDQo+IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgcG9pbnQgb2YgdGhpcyBu
ZXcgZmllbGQuIEJ1dCBpdCBjYW4gYmUgcmVtb3ZlZCBhbnl3YXkNCj4gaWYgd2UgYWdyZWUgdG8g
ZHJvcCB0aGUgU1cgZmFsbGJhY2suDQoNClRoaXMgaXMgZm9yIGhhbmRsaW5nIGxhY2tpbmcgb2Yg
YmF0Y2hfY29weSBlbGVtZW50cyBpbiBTVyBmYWxsYmFjay4NCg0KPiANCj4gPiAgIAlyZXR1cm4g
UlRFX1ZIT1NUX01TR19SRVNVTFRfT0s7DQo+ID4gICB9DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEv
bGliL3Zob3N0L3ZpcnRpb19uZXQuYyBiL2xpYi92aG9zdC92aXJ0aW9fbmV0LmMgaW5kZXgNCj4g
PiBiM2Q5NTRhYWI0Li4zMDVmNmNkNTYyIDEwMDY0NA0KPiA+IC0tLSBhL2xpYi92aG9zdC92aXJ0
aW9fbmV0LmMNCj4gPiArKysgYi9saWIvdmhvc3QvdmlydGlvX25ldC5jDQo+ID4gQEAgLTExLDYg
KzExLDcgQEANCj4gPiAgICNpbmNsdWRlIDxydGVfbmV0Lmg+DQo+ID4gICAjaW5jbHVkZSA8cnRl
X2V0aGVyLmg+DQo+ID4gICAjaW5jbHVkZSA8cnRlX2lwLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVf
ZG1hZGV2Lmg+DQo+ID4gICAjaW5jbHVkZSA8cnRlX3Zob3N0Lmg+DQo+ID4gICAjaW5jbHVkZSA8
cnRlX3RjcC5oPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV91ZHAuaD4NCj4gPiBAQCAtMjUsNiArMjYs
MTAgQEANCj4gPg0KPiA+ICAgI2RlZmluZSBNQVhfQkFUQ0hfTEVOIDI1Ng0KPiA+DQo+ID4gKy8q
IERNQSBkZXZpY2UgY29weSBvcGVyYXRpb24gdHJhY2tpbmcgYXJyYXkuICovIHN0cnVjdCBhc3lu
Y19kbWFfaW5mbw0KPiA+ICtkbWFfY29weV90cmFja1tSVEVfRE1BREVWX0RFRkFVTFRfTUFYXTsN
Cj4gPiArdWludDE2X3QgZG1hX3BvbGxfZmFjdG9yID0gMTsNCj4gPiArDQo+ID4gICBzdGF0aWMg
IF9fcnRlX2Fsd2F5c19pbmxpbmUgYm9vbA0KPiA+ICAgcnh2cV9pc19tZXJnZWFibGUoc3RydWN0
IHZpcnRpb19uZXQgKmRldikNCj4gPiAgIHsNCj4gPiBAQCAtNDMsNiArNDgsMTQwIEBAIGlzX3Zh
bGlkX3ZpcnRfcXVldWVfaWR4KHVpbnQzMl90IGlkeCwgaW50IGlzX3R4LA0KPiB1aW50MzJfdCBu
cl92cmluZykNCj4gPiAgIAlyZXR1cm4gKGlzX3R4IF4gKGlkeCAmIDEpKSA9PSAwICYmIGlkeCA8
IG5yX3ZyaW5nOw0KPiA+ICAgfQ0KPiA+DQo+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l
IHVpbnQxNl90DQo+ID4gK3Zob3N0X2FzeW5jX2RtYV90cmFuc2ZlcihzdHJ1Y3Qgdmhvc3Rfdmly
dHF1ZXVlICp2cSwgaW50MTZfdCBkbWFfaWQsDQo+ID4gKwkJdWludDE2X3QgdmNoYW5faWQsIHVp
bnQxNl90IGhlYWRfaWR4LA0KPiA+ICsJCXN0cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgKnBrdHMs
IHVpbnQxNl90IG5yX3BrdHMpIHsNCj4gPiArCXN0cnVjdCBhc3luY19kbWFfdmNoYW5faW5mbyAq
ZG1hX2luZm8gPQ0KPiAmZG1hX2NvcHlfdHJhY2tbZG1hX2lkXS52Y2hhbnNbdmNoYW5faWRdOw0K
PiA+ICsJdWludDE2X3QgcmluZ19tYXNrID0gZG1hX2luZm8tPnJpbmdfbWFzazsNCj4gPiArCXVp
bnQxNl90IHBrdF9pZHgsIGJjZV9pZHggPSAwOw0KPiA+ICsNCj4gPiArCXJ0ZV9zcGlubG9ja19s
b2NrKCZkbWFfaW5mby0+ZG1hX2xvY2spOw0KPiA+ICsNCj4gPiArCWZvciAocGt0X2lkeCA9IDA7
IHBrdF9pZHggPCBucl9wa3RzOyBwa3RfaWR4KyspIHsNCj4gPiArCQlzdHJ1Y3QgcnRlX3Zob3N0
X2lvdmVjICppb3YgPSBwa3RzW3BrdF9pZHhdLmlvdjsNCj4gPiArCQlpbnQgY29weV9pZHgsIGxh
c3RfY29weV9pZHggPSAwOw0KPiA+ICsJCXVpbnQxNl90IG5yX3NlZ3MgPSBwa3RzW3BrdF9pZHhd
Lm5yX3NlZ3M7DQo+ID4gKwkJdWludDE2X3QgbnJfc3dfY29weSA9IDA7DQo+ID4gKwkJdWludDE2
X3QgaTsNCj4gPiArDQo+ID4gKwkJaWYgKHJ0ZV9kbWFfYnVyc3RfY2FwYWNpdHkoZG1hX2lkLCB2
Y2hhbl9pZCkgPCBucl9zZWdzKQ0KPiA+ICsJCQlnb3RvIG91dDsNCj4gDQo+IEkgd291bGQgY29u
c2lkZXIgaW50cm9kdWNpbmcgYSB2aG9zdF9hc3luY19kbWFfdHJhbnNmZXJfb25lIGZ1bmN0aW9u
IHRvDQo+IGF2b2lkIG5lc3RpbmcgdG9vIG11Y2ggbG9vcHMgYW5kIG1ha2UgdGhlIGNvZGUgY2xl
YW5lci4NCg0KU3VyZSwgSSB3aWxsIGFkZCBpdC4NCg0KPiANCj4gPiArCQlmb3IgKGkgPSAwOyBp
IDwgbnJfc2VnczsgaSsrKSB7DQo+ID4gKwkJCS8qIEZhbGxiYWNrIHRvIFNXIGNvcHkgaWYgZXJy
b3IgaGFwcGVucyAqLw0KPiA+ICsJCQljb3B5X2lkeCA9IHJ0ZV9kbWFfY29weShkbWFfaWQsIHZj
aGFuX2lkLA0KPiAocnRlX2lvdmFfdClpb3ZbaV0uc3JjX2FkZHIsDQo+ID4gKwkJCQkJKHJ0ZV9p
b3ZhX3QpaW92W2ldLmRzdF9hZGRyLCBpb3ZbaV0ubGVuLA0KPiA+ICsJCQkJCVJURV9ETUFfT1Bf
RkxBR19MTEMpOw0KPiA+ICsJCQlpZiAodW5saWtlbHkoY29weV9pZHggPCAwKSkgew0KPiANCj4g
VGhlIERNQSBjaGFubmVsIGlzIHByb3RlY3RlZCBieSBhIGxvY2ssIGFuZCB3ZSBjaGVjayB0aGUg
Y2FwYWNpdHkgYmVmb3JlDQo+IGluaXRpYXRpbmcgdGhlIGNvcHkuDQo+IFNvIEkgZG9uJ3QgZXhw
ZWN0IHJ0ZV9kbWFfY29weSgpIHRvIGZhaWwgYmVjYXVzZSBvZiBsYWNrIG9mIGNhcGFjaXR5LiBJ
ZiBhbg0KPiBlcnJvciBoYXBwZW5zLCB0aGF0IGlzIGEgc2VyaW91cyBvbmUuDQo+IA0KPiBTbywg
SSB3b25kZXIgd2hldGhlciBoYXZpbmcgYSBTVyBmYWxsYmFjayBtYWtlcyBzZW5zZS4gQ29kZSB3
b3VsZCBiZQ0KPiBtdWNoIHNpbXBsZXIgaWYgd2UganVzdCBleGl0IGVhcmx5IGlmIGFuIGVycm9y
IGhhcHBlbnMuIExvZ2dpbmcgYW4gZXJyb3INCj4gbWVzc2FnZSBpbnN0ZWFkIHdvdWxkIGhlbHAg
ZGVidWdnaW5nLiBDZXJ0YWlubHkgd2l0aCByYXRlIGxpbWl0aW5nIG5vdCB0bw0KPiBmbG9vZCB0
aGUgbG9nIGZpbGUuDQoNClRoYXQncyBjb3JyZWN0LiBJZiBlcnJvciByZWFsbHkgaGFwcGVucyBp
biB0aGlzIGNhc2UsIGl0IG1lYW5zIERNQSBkZWZpbml0ZWx5DQpoYXMgc29tZXRoaW5nIHdyb25n
LiBCZXR0ZXIgdG8gc3RvcCBhc3luYyBkYXRhLXBhdGggYW5kIGRlYnVnLiBTVyBmYWxsYmFjaw0K
bWF5IGhpZGUgdGhpcyBzZXJpb3VzIGlzc3VlLg0KDQpJZiBubyBvYmplY3Rpb25zLCBJIHdpbGwg
cmVtb3ZlIFNXIGZhbGxiYWNrIGJ1dCBhZGRpbmcgYW4gZXJyb3IgbG9nLg0KDQo+IA0KPiA+ICsJ
CQkJLyogRmluZCBjb3JyZXNwb25kaW5nIFZBIHBhaXIgYW5kIGRvIFNXDQo+IGNvcHkgKi8NCj4g
PiArCQkJCXJ0ZV9tZW1jcHkodnEtDQo+ID5iYXRjaF9jb3B5X2VsZW1zW2JjZV9pZHhdLmRzdCwN
Cj4gPiArCQkJCQkJdnEtDQo+ID5iYXRjaF9jb3B5X2VsZW1zW2JjZV9pZHhdLnNyYywNCj4gPiAr
CQkJCQkJdnEtDQo+ID5iYXRjaF9jb3B5X2VsZW1zW2JjZV9pZHhdLmxlbik7DQo+ID4gKwkJCQlu
cl9zd19jb3B5Kys7DQo+ID4gKw0KPiA+ICsJCQkJLyoqDQo+ID4gKwkJCQkgKiBBbGwgY29waWVz
IG9mIHRoZSBwYWNrZXQgYXJlIHBlcmZvcm1lZA0KPiA+ICsJCQkJICogYnkgdGhlIENQVSwgc2V0
IHRoZSBwYWNrZXQgY29tcGxldGlvbiBmbGFnDQo+ID4gKwkJCQkgKiB0byB0cnVlLCBhcyBhbGwg
Y29waWVzIGFyZSBkb25lLg0KPiA+ICsJCQkJICovDQo+IA0KPiBJIHRoaW5rIGl0IHdvdWxkIGJl
dHRlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGxvb3AgdG8gYXZvaWQgZG9pbmcgdGhlIGNoZWNrIGZv
cg0KPiBldmVyeSBzZWdtZW50IHdoaWxlIG9ubHkgdGhlIGxhc3Qgb25lIGhhcyBhIGNoYW5jZSB0
byBtYXRjaC4NCg0KSSBkaWRuJ3QgZ2V0IHRoZSBwb2ludC4gSG93IHRvIGdldCByaWQgb2YgdGhl
IGxvb3A/IERvIHlvdSBzdWdnZXN0IHRvIGRvIFNXIGNvcHkNCmZvciBhbGwgbGVmdCBjb3BpZXMg
b25jZSBvbmUgRE1BIGVycm9yIGhhcHBlbnMgKGlmIFNXIGNvcHkgaXMga2VwdCk/DQoNCj4gDQo+
ID4gKwkJCQlpZiAobnJfc3dfY29weSA9PSBucl9zZWdzKSB7DQo+ID4gKwkJCQkJdnEtPmFzeW5j
LT5wa3RzX2NtcGxfZmxhZ1toZWFkX2lkeCAlDQo+IHZxLT5zaXplXSA9IHRydWU7DQo+ID4gKwkJ
CQkJYnJlYWs7DQo+ID4gKwkJCQl9IGVsc2UgaWYgKGkgPT0gKG5yX3NlZ3MgLSAxKSkgew0KPiA+
ICsJCQkJCS8qKg0KPiA+ICsJCQkJCSAqIEEgcGFydCBvZiBjb3BpZXMgb2YgY3VycmVudCBwYWNr
ZXQNCj4gPiArCQkJCQkgKiBhcmUgZW5xdWV1ZWQgdG8gdGhlIERNQQ0KPiBzdWNjZXNzZnVsbHkN
Cj4gPiArCQkJCQkgKiBidXQgdGhlIGxhc3QgY29weSBmYWlscywgc3RvcmUgdGhlDQo+ID4gKwkJ
CQkJICogcGFja2V0IGNvbXBsZXRpb24gZmxhZyBhZGRyZXNzDQo+ID4gKwkJCQkJICogaW4gdGhl
IGxhc3QgRE1BIGNvcHkgc2xvdC4NCj4gPiArCQkJCQkgKi8NCj4gPiArCQkJCQlkbWFfaW5mby0N
Cj4gPnBrdHNfY29tcGxldGVkX2ZsYWdbbGFzdF9jb3B5X2lkeCAmIHJpbmdfbWFza10gPQ0KPiA+
ICsJCQkJCQkmdnEtPmFzeW5jLQ0KPiA+cGt0c19jbXBsX2ZsYWdbaGVhZF9pZHggJSB2cS0+c2l6
ZV07DQo+ID4gKwkJCQkJYnJlYWs7DQo+ID4gKwkJCQl9DQo+ID4gKwkJCX0gZWxzZQ0KPiA+ICsJ
CQkJbGFzdF9jb3B5X2lkeCA9IGNvcHlfaWR4Ow0KPiANCj4gQnJhY2VzIG9uIHRoZSBlbHNlIGFz
IHlvdSBoYXZlIGJyYWNlcyBmb3IgdGhlIGlmIHN0YXRlbWVudC4NCj4gDQo+ID4gKw0KPiA+ICsJ
CQliY2VfaWR4Kys7DQo+ID4gKw0KPiA+ICsJCQkvKioNCj4gPiArCQkJICogT25seSBzdG9yZSBw
YWNrZXQgY29tcGxldGlvbiBmbGFnIGFkZHJlc3MgaW4gdGhlDQo+IGxhc3QgY29weSdzDQo+ID4g
KwkJCSAqIHNsb3QsIGFuZCBvdGhlciBzbG90cyBhcmUgc2V0IHRvIE5VTEwuDQo+ID4gKwkJCSAq
Lw0KPiA+ICsJCQlpZiAoaSA9PSAobnJfc2VncyAtIDEpKSB7DQo+ID4gKwkJCQlkbWFfaW5mby0+
cGt0c19jb21wbGV0ZWRfZmxhZ1tjb3B5X2lkeCAmDQo+IHJpbmdfbWFza10gPQ0KPiA+ICsJCQkJ
CSZ2cS0+YXN5bmMtDQo+ID5wa3RzX2NtcGxfZmxhZ1toZWFkX2lkeCAlIHZxLT5zaXplXTsNCj4g
PiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJZG1hX2luZm8tPm5yX2JhdGNoaW5nICs9
IG5yX3NlZ3M7DQo+ID4gKwkJaWYgKHVubGlrZWx5KGRtYV9pbmZvLT5ucl9iYXRjaGluZyA+PQ0K
PiBWSE9TVF9BU1lOQ19ETUFfQkFUQ0hJTkdfU0laRSkpIHsNCj4gPiArCQkJcnRlX2RtYV9zdWJt
aXQoZG1hX2lkLCB2Y2hhbl9pZCk7DQo+ID4gKwkJCWRtYV9pbmZvLT5ucl9iYXRjaGluZyA9IDA7
DQo+ID4gKwkJfQ0KPiANCj4gSSB3b25kZXIgd2hldGhlciB3ZSBjb3VsZCBqdXN0IHJlbW92ZSB0
aGlzIHN1Ym1pdC4NCj4gSSBkb24ndCBleHBlY3QgY29tcGxldGlvbnMgdG8gaGFwcGVuIGJldHdl
ZW4gdHdvIHBhY2tldHMgYXMgdGhlIERNQQ0KPiBjaGFubmVsIGlzIHByb3RlY3RlZCBieSBhIGxv
Y2ssIHNvIG15IHVuZGVyc3RhbmRpbmcgaXMgb25jZSB0aGUgRE1BIHJpbmcgaXMNCj4gZnVsbCwg
d2UganVzdCBlbmQtdXAgZXhpdGluZyBlYXJseSBiZWNhdXNlIERNQSBjaGFubmVsIGNhcGFjaXR5
IGlzIGNoZWNrZWQNCj4gZm9yIGV2ZXJ5IHBhY2tldC4NCj4gDQo+IFJlbW92aW5nIGl0IHdpbGwg
bWF5YmUgaW1wcm92ZSBwZXJmb3JtYW5jZSBhICh2ZXJ5KSBsaXR0bGUgYml0LCBidXQgd2lsbA0K
PiBjZXJ0YWlubHkgbWFrZSB0aGUgY29kZSBzaW1wbGVyIHRvIGZvbGxvdy4NCg0KR29vZCBzdWdn
ZXN0aW9uLiBJIHdpbGwgcmVtb3ZlIGl0Lg0KDQo+IA0KPiA+ICsNCj4gPiArCQloZWFkX2lkeCsr
Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsJaWYgKGRtYV9pbmZvLT5ucl9iYXRj
aGluZyA+IDApIHsNCj4gDQo+IGlmIChsaWtlbHkoLi4uKSkNCg0KU3VyZSwgSSB3aWxsIGFkZCBs
YXRlci4NCg0KPiANCj4gPiArCQlydGVfZG1hX3N1Ym1pdChkbWFfaWQsIHZjaGFuX2lkKTsNCj4g
PiArCQlkbWFfaW5mby0+bnJfYmF0Y2hpbmcgPSAwOw0KPiA+ICsJfQ0KPiA+ICsJcnRlX3NwaW5s
b2NrX3VubG9jaygmZG1hX2luZm8tPmRtYV9sb2NrKTsNCj4gPiArCXZxLT5iYXRjaF9jb3B5X25i
X2VsZW1zID0gMDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcGt0X2lkeDsNCj4gPiArfQ0KPiA+ICsN
Cj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDE2X3QNCj4gPiArdmhvc3RfYXN5
bmNfZG1hX2NoZWNrX2NvbXBsZXRlZChpbnQxNl90IGRtYV9pZCwgdWludDE2X3QgdmNoYW5faWQs
DQo+ID4gK3VpbnQxNl90IG1heF9wa3RzKSB7DQo+ID4gKwlzdHJ1Y3QgYXN5bmNfZG1hX3ZjaGFu
X2luZm8gKmRtYV9pbmZvID0NCj4gJmRtYV9jb3B5X3RyYWNrW2RtYV9pZF0udmNoYW5zW3ZjaGFu
X2lkXTsNCj4gPiArCXVpbnQxNl90IHJpbmdfbWFzayA9IGRtYV9pbmZvLT5yaW5nX21hc2s7DQo+
ID4gKwl1aW50MTZfdCBsYXN0X2lkeCA9IDA7DQo+ID4gKwl1aW50MTZfdCBucl9jb3BpZXM7DQo+
ID4gKwl1aW50MTZfdCBjb3B5X2lkeDsNCj4gPiArCXVpbnQxNl90IGk7DQo+ID4gKwlib29sIGhh
c19lcnJvciA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCXJ0ZV9zcGlubG9ja19sb2NrKCZkbWFfaW5m
by0+ZG1hX2xvY2spOw0KPiA+ICsNCj4gPiArCS8qKg0KPiA+ICsJICogUHJpbnQgZXJyb3IgbG9n
IGZvciBkZWJ1Z2dpbmcsIGlmIERNQSByZXBvcnRzIGVycm9yIGR1cmluZw0KPiA+ICsJICogRE1B
IHRyYW5zZmVyLiBXZSBkbyBub3QgaGFuZGxlIGVycm9yIGluIHZob3N0IGxldmVsLg0KPiA+ICsJ
ICovDQo+ID4gKwlucl9jb3BpZXMgPSBydGVfZG1hX2NvbXBsZXRlZChkbWFfaWQsIHZjaGFuX2lk
LCBtYXhfcGt0cywNCj4gJmxhc3RfaWR4LCAmaGFzX2Vycm9yKTsNCj4gPiArCWlmICh1bmxpa2Vs
eShoYXNfZXJyb3IpKSB7DQo+ID4gKwkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiZG1hICVkIHZjaGFu
bmVsICV1IHJlcG9ydHMgZXJyb3INCj4gaW4gcnRlX2RtYV9jb21wbGV0ZWQoKVxuIiwNCj4gPiAr
CQkJCWRtYV9pZCwgdmNoYW5faWQpOw0KPiANCj4gSSB3b25kZXIgaWYgcmF0ZSBsaW1pdGluZyB3
b3VsZA0KDQpTdXJlLCBJIHdpbGwgYXZvaWQgbG9nIGZsb29kaW5nLg0KDQo+IA0KPiA+ICsJfSBl
bHNlIGlmIChucl9jb3BpZXMgPT0gMCkNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArDQo+ID4gKwlj
b3B5X2lkeCA9IGxhc3RfaWR4IC0gbnJfY29waWVzICsgMTsNCj4gPiArCWZvciAoaSA9IDA7IGkg
PCBucl9jb3BpZXM7IGkrKykgew0KPiA+ICsJCWJvb2wgKmZsYWc7DQo+ID4gKw0KPiA+ICsJCWZs
YWcgPSBkbWFfaW5mby0+cGt0c19jb21wbGV0ZWRfZmxhZ1tjb3B5X2lkeCAmDQo+IHJpbmdfbWFz
a107DQo+ID4gKwkJaWYgKGZsYWcpIHsNCj4gPiArCQkJLyoqDQo+ID4gKwkJCSAqIE1hcmsgdGhl
IHBhY2tldCBmbGFnIGFzIHJlY2VpdmVkLiBUaGUgZmxhZw0KPiA+ICsJCQkgKiBjb3VsZCBiZWxv
bmcgdG8gYW5vdGhlciB2aXJ0cXVldWUgYnV0IHdyaXRlDQo+ID4gKwkJCSAqIGlzIGF0b21pYy4N
Cj4gPiArCQkJICovDQo+ID4gKwkJCSpmbGFnID0gdHJ1ZTsNCj4gPiArCQkJZG1hX2luZm8tPnBr
dHNfY29tcGxldGVkX2ZsYWdbY29weV9pZHggJg0KPiByaW5nX21hc2tdID0gTlVMTDsNCj4gPiAr
CQl9DQo+ID4gKwkJY29weV9pZHgrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gK291dDoNCj4gPiAr
CXJ0ZV9zcGlubG9ja191bmxvY2soJmRtYV9pbmZvLT5kbWFfbG9jayk7DQo+ID4gKwlyZXR1cm4g
bnJfY29waWVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAgc3RhdGljIGlubGluZSB2b2lkDQo+ID4g
ICBkb19kYXRhX2NvcHlfZW5xdWV1ZShzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LCBzdHJ1Y3Qgdmhv
c3RfdmlydHF1ZXVlICp2cSkNCj4gPiAgIHsNCj4gPiBAQCAtODY1LDEyICsxMDA0LDEzIEBAIGFz
eW5jX2l0ZXJfcmVzZXQoc3RydWN0IHZob3N0X2FzeW5jICphc3luYykNCj4gPiAgIHN0YXRpYyBf
X3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ICAgYXN5bmNfbWJ1Zl90b19kZXNjX3NlZyhzdHJ1
Y3QgdmlydGlvX25ldCAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlDQo+ICp2cSwNCj4gPiAg
IAkJc3RydWN0IHJ0ZV9tYnVmICptLCB1aW50MzJfdCBtYnVmX29mZnNldCwNCj4gPiAtCQl1aW50
NjRfdCBidWZfaW92YSwgdWludDMyX3QgY3B5X2xlbikNCj4gPiArCQl1aW50NjRfdCBidWZfYWRk
ciwgdWludDY0X3QgYnVmX2lvdmEsIHVpbnQzMl90IGNweV9sZW4pDQo+ID4gICB7DQo+ID4gICAJ
c3RydWN0IHZob3N0X2FzeW5jICphc3luYyA9IHZxLT5hc3luYzsNCj4gPiAgIAl1aW50NjRfdCBt
YXBwZWRfbGVuOw0KPiA+ICAgCXVpbnQzMl90IGJ1Zl9vZmZzZXQgPSAwOw0KPiA+ICAgCXZvaWQg
KmhwYTsNCj4gPiArCXN0cnVjdCBiYXRjaF9jb3B5X2VsZW0gKmJjZSA9IHZxLT5iYXRjaF9jb3B5
X2VsZW1zOw0KPiA+DQo+ID4gICAJd2hpbGUgKGNweV9sZW4pIHsNCj4gPiAgIAkJaHBhID0gKHZv
aWQgKikodWludHB0cl90KWdwYV90b19maXJzdF9ocGEoZGV2LA0KPiA+IEBAIC04ODYsNiArMTAy
NiwzMSBAQCBhc3luY19tYnVmX3RvX2Rlc2Nfc2VnKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsDQo+
IHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+ICAgCQkJCQkJaHBhLCAoc2l6ZV90KW1h
cHBlZF9sZW4pKSkNCj4gPiAgIAkJCXJldHVybiAtMTsNCj4gPg0KPiA+ICsJCS8qKg0KPiA+ICsJ
CSAqIEtlZXAgVkEgZm9yIGFsbCBJT1ZBIHNlZ21lbnRzIGZvciBmYWxsaW5nIGJhY2sgdG8gU1cN
Cj4gPiArCQkgKiBjb3B5IGluIGNhc2Ugb2YgcnRlX2RtYV9jb3B5KCkgZXJyb3IuDQo+ID4gKwkJ
ICovDQo+IA0KPiBBcyBzYWlkIGJlbG93LCBJIHRoaW5rIHdlIGNvdWxkIGdldCByaWQgb2ZmIHRo
ZSBTVyBmYWxsYmFjay4NCg0KTGlrZSB0aGUgcmVwbGllcyBhYm92ZSwgYSBiZXR0ZXIgd2F5IGZv
ciBtZSBpcyB0byByZW1vdmUgU1cgZmFsbGJhY2suDQoNCj4gQnV0IGluIGNhc2Ugd2UgZGlkbid0
LCBJIHRoaW5rIGl0IHdvdWxkIGJlIHByZWZmZXJhYmxlIHRvIGNoYW5nZSB0aGUNCj4gcnRlX3Zo
b3N0X2lvdmVjIHN0cnVjdCB0byBoYXZlIGJvdGggdGhlIGlvdmEgYW5kIHRoZSBWQSwgdGhhdCB3
b3VsZCBtYWtlDQo+IHRoZSBjb2RlIHNpbXBsZXIuDQo+IA0KPiBBbHNvLCB3aGlsZSBsb29raW5n
IGF0IHRoaXMsIEkgbm90aWNlIHRoZSBzdHJ1Y3RzIHJ0ZV92aG9zdF9pb3ZfaXRlciBhbmQNCj4g
cnRlX3Zob3N0X2lvdmVjIGFyZSBzdGlsbCBwYXJ0IG9mIHRoZSBWaG9zdCBBUEksIGJ1dCBpdCBz
aG91bGQgbm90IGJlIG5lY2Vzc2FyeQ0KPiBub3cgc2luY2UgYXBwbGljYXRpb24gbm8gbW9yZSBu
ZWVkIHRvIGtub3cgYWJvdXQgaXQuDQoNCkdvb2QgY2F0Y2gsIGFuZCBJIHdpbGwgY2hhbmdlIGl0
IGxhdGVyLg0KDQo+IA0KPiA+ICsJCWlmICh1bmxpa2VseSh2cS0+YmF0Y2hfY29weV9uYl9lbGVt
cyA+PSB2cS0NCj4gPmJhdGNoX2NvcHlfbWF4X2VsZW1zKSkgew0KPiA+ICsJCQlzdHJ1Y3QgYmF0
Y2hfY29weV9lbGVtICp0bXA7DQo+ID4gKwkJCXVpbnQxNl90IG5iX2VsZW1zID0gMiAqIHZxLT5i
YXRjaF9jb3B5X21heF9lbGVtczsNCj4gPiArDQo+ID4gKwkJCVZIT1NUX0xPR19EQVRBKERFQlVH
LCAiKCVkKSAlczogcnVuIG91dCBvZg0KPiBiYXRjaF9jb3B5X2VsZW1zLCAiDQo+ID4gKwkJCQkJ
ImFuZCByZWFsbG9jIGRvdWJsZSBlbGVtZW50cy5cbiIsDQo+IGRldi0+dmlkLCBfX2Z1bmNfXyk7
DQo+ID4gKwkJCXRtcCA9IHJ0ZV9yZWFsbG9jX3NvY2tldCh2cS0+YmF0Y2hfY29weV9lbGVtcywN
Cj4gbmJfZWxlbXMgKiBzaXplb2YoKnRtcCksDQo+ID4gKwkJCQkJUlRFX0NBQ0hFX0xJTkVfU0la
RSwgdnEtDQo+ID5udW1hX25vZGUpOw0KPiA+ICsJCQlpZiAoIXRtcCkgew0KPiA+ICsJCQkJVkhP
U1RfTE9HX0RBVEEoRVJSLCAiRmFpbGVkIHRvIHJlLWFsbG9jDQo+IGJhdGNoX2NvcHlfZWxlbXNc
biIpOw0KPiA+ICsJCQkJcmV0dXJuIC0xOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQl2cS0+
YmF0Y2hfY29weV9tYXhfZWxlbXMgPSBuYl9lbGVtczsNCj4gPiArCQkJdnEtPmJhdGNoX2NvcHlf
ZWxlbXMgPSB0bXA7DQo+ID4gKwkJCWJjZSA9IHRtcDsNCj4gPiArCQl9DQo+ID4gKwkJYmNlW3Zx
LT5iYXRjaF9jb3B5X25iX2VsZW1zXS5kc3QgPSAodm9pZA0KPiAqKSgodWludHB0cl90KShidWZf
YWRkciArIGJ1Zl9vZmZzZXQpKTsNCj4gPiArCQliY2VbdnEtPmJhdGNoX2NvcHlfbmJfZWxlbXNd
LnNyYyA9DQo+IHJ0ZV9wa3RtYnVmX210b2Rfb2Zmc2V0KG0sIHZvaWQgKiwgbWJ1Zl9vZmZzZXQp
Ow0KPiA+ICsJCWJjZVt2cS0+YmF0Y2hfY29weV9uYl9lbGVtcysrXS5sZW4gPSBtYXBwZWRfbGVu
Ow0KPiA+ICsNCj4gPiAgIAkJY3B5X2xlbiAtPSAodWludDMyX3QpbWFwcGVkX2xlbjsNCj4gPiAg
IAkJbWJ1Zl9vZmZzZXQgKz0gKHVpbnQzMl90KW1hcHBlZF9sZW47DQo+ID4gICAJCWJ1Zl9vZmZz
ZXQgKz0gKHVpbnQzMl90KW1hcHBlZF9sZW47IEBAIC05MDEsNyArMTA2Niw4DQo+IEBADQo+ID4g
c3luY19tYnVmX3RvX2Rlc2Nfc2VnKHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsIHN0cnVjdCB2aG9z
dF92aXJ0cXVldWUgKnZxLA0KPiA+ICAgew0KPiA+ICAgCXN0cnVjdCBiYXRjaF9jb3B5X2VsZW0g
KmJhdGNoX2NvcHkgPSB2cS0+YmF0Y2hfY29weV9lbGVtczsNCj4gPg0KPiA+IC0JaWYgKGxpa2Vs
eShjcHlfbGVuID4gTUFYX0JBVENIX0xFTiB8fCB2cS0+YmF0Y2hfY29weV9uYl9lbGVtcyA+PQ0K
PiB2cS0+c2l6ZSkpIHsNCj4gPiArCWlmIChsaWtlbHkoY3B5X2xlbiA+IE1BWF9CQVRDSF9MRU4g
fHwNCj4gPiArCQkJCXZxLT5iYXRjaF9jb3B5X25iX2VsZW1zID49IHZxLQ0KPiA+YmF0Y2hfY29w
eV9tYXhfZWxlbXMpKSB7DQo+ID4gICAJCXJ0ZV9tZW1jcHkoKHZvaWQgKikoKHVpbnRwdHJfdCko
YnVmX2FkZHIpKSwNCj4gPiAgIAkJCQlydGVfcGt0bWJ1Zl9tdG9kX29mZnNldChtLCB2b2lkICos
DQo+IG1idWZfb2Zmc2V0KSwNCj4gPiAgIAkJCQljcHlfbGVuKTsNCj4gPiBAQCAtMTAyMCw4ICsx
MTg2LDEwIEBAIG1idWZfdG9fZGVzYyhzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LCBzdHJ1Y3QNCj4g
PiB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+DQo+ID4gICAJCWlmIChpc19hc3luYykgew0KPiA+
ICAgCQkJaWYgKGFzeW5jX21idWZfdG9fZGVzY19zZWcoZGV2LCB2cSwgbSwgbWJ1Zl9vZmZzZXQs
DQo+ID4gKwkJCQkJCWJ1Zl9hZGRyICsgYnVmX29mZnNldCwNCj4gPiAgIAkJCQkJCWJ1Zl9pb3Zh
ICsgYnVmX29mZnNldCwNCj4gY3B5X2xlbikgPCAwKQ0KPiA+ICAgCQkJCWdvdG8gZXJyb3I7DQo+
ID4gKw0KPiANCj4gUmVtb3ZlIG5ldyBsaW5lLg0KDQpJIHdpbGwgcmVtb3ZlIGl0IGxhdGVyLg0K
DQpUaGFua3MsDQpKaWF5dQ0K