From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9B452C43603 for ; Fri, 6 Dec 2019 10:00:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3C7EE20659 for ; Fri, 6 Dec 2019 10:00:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="B7K9V1Xd" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726102AbfLFKAM (ORCPT ); Fri, 6 Dec 2019 05:00:12 -0500 Received: from mailgw02.mediatek.com ([210.61.82.184]:44330 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726070AbfLFKAM (ORCPT ); Fri, 6 Dec 2019 05:00:12 -0500 X-UUID: 5b48c038d0284b6b8173c9548073b793-20191206 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=iumZvvBRrVuzebxUXQfA27LRvHuUAEalNIsr9EDHfpQ=; b=B7K9V1XdQ3NpPe2PLXC293mnQYL05EVOGh09kmqzPbCK+7WLMg5yIjlnGWnRoDp9tgqoFM2i4JRAtDAQc3zHF0ugJoaeHugNqhD06l2dC78+S6LZOsYZxbvlfDYBooCWDO1LEhdo3HtS60ejvo7qI9W2qCfBYxEnrUlfr+oV0ig=; X-UUID: 5b48c038d0284b6b8173c9548073b793-20191206 Received: from mtkcas09.mediatek.inc [(172.21.101.178)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 387924200; Fri, 06 Dec 2019 17:59:47 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 6 Dec 2019 17:59:33 +0800 Received: from [10.17.3.153] (10.17.3.153) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Fri, 6 Dec 2019 17:59:08 +0800 Message-ID: <1575626384.17879.81.camel@mhfsdcap03> Subject: Re: [PATCH v4 5/5] media: platform: Add jpeg dec/enc feature From: Xia Jiang To: Tomasz Figa CC: Hans Verkuil , Mauro Carvalho Chehab , Rob Herring , "Matthias Brugger" , Rick Chang , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-mediatek@lists.infradead.org" , Marek Szyprowski , srv_heupstream Date: Fri, 6 Dec 2019 17:59:44 +0800 In-Reply-To: <20191023103945.GA41089@chromium.org> References: <20191017084033.28299-1-xia.jiang@mediatek.com> <20191017084033.28299-6-xia.jiang@mediatek.com> <20191023103945.GA41089@chromium.org> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org T24gV2VkLCAyMDE5LTEwLTIzIGF0IDE4OjM5ICswODAwLCBUb21hc3ogRmlnYSB3cm90ZToNCj4g SGkgWGlhLA0KPiANCj4gT24gVGh1LCBPY3QgMTcsIDIwMTkgYXQgMDQ6NDA6MzhQTSArMDgwMCwg WGlhIEppYW5nIHdyb3RlOg0KPiA+IEFkZCBtdGsganBlZyBlbmNvZGUgdjRsMiBkcml2ZXIgYmFz ZWQgb24ganBlZyBkZWNvZGUsIGJlY2F1c2UgdGhhdCBqcGVnDQo+ID4gZGVjb2RlIGFuZCBlbmNv ZGUgaGF2ZSBncmVhdCBzaW1pbGFyaXRpZXMgd2l0aCBmdW5jdGlvbiBvcGVyYXRpb24uDQo+ID4g DQo+ID4gU2lnbmVkLW9mZi1ieTogWGlhIEppYW5nIDx4aWEuamlhbmdAbWVkaWF0ZWsuY29tPg0K PiA+IC0tLQ0KPiA+IHY0OiBzcGxpdCBtdGtfanBlZ190cnlfZm10X21wbGFuZSgpIHRvIHR3byBm dW5jdGlvbnMsIG9uZSBmb3IgZW5jb2RlciwNCj4gPiAgICAgb25lIGZvciBkZWNvZGVyLg0KPiA+ ICAgICBzcGxpdCBtdGtfanBlZ19zZXRfZGVmYXVsdF9wYXJhbXMoKSB0byB0d28gZnVuY3Rpb25z LCBvbmUgZm9yDQo+ID4gICAgIGVuY29kZXIsIG9uZSBmb3IgZGVjb2Rlci4NCj4gPiAgICAgYWRk IGNyb3BwaW5nIHN1cHBvcnQgZm9yIGVuY29kZXIgaW4gZy9zX3NlbGVjdGlvbiBpb2N0bHMuDQo+ ID4gICAgIGNoYW5nZSBleGlmIG1vZGUgc3VwcG9ydCBieSB1c2luZyBWNEwyX0pQRUdfQUNUSVZF X01BUktFUl9BUFAxLg0KPiA+ICAgICBjaGFuZ2UgTVRLX0pQRUdfTUFYX1dJRFRIL01US19KUEVH X01BWF9IRUlHSCBmcm9tIDgxOTIgdG8gNjU1MzUgYnkNCj4gPiAgICAgc3BlY2lmaWNhdGlvbi4N Cj4gPiAgICAgbW92ZSB3aWR0aCBzaGlmdGluZyBvcGVyYXRpb24gYmVoaW5kIGFsaWduaW5nIG9w ZXJhdGlvbiBpbg0KPiA+ICAgICBtdGtfanBlZ190cnlfZW5jX2ZtdF9tcGxhbmUoKSBmb3IgYnVn IGZpeC4NCj4gPiAgICAgZml4IHVzZXIgYWJ1c2VpbmcgZGF0YV9vZmZzZXQgaXNzdWUgZm9yIERN QUJVRiBpbg0KPiA+ICAgICBtdGtfanBlZ19zZXRfZW5jX3NyYygpLg0KPiA+ICAgICBmaXgga2J1 aWxkIHdhcmluZ3M6IGNoYW5nZSBNVEtfSlBFR19NSU5fSEVJR0hUL01US19KUEVHX01BWF9IRUlH SFQNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgTVRLX0pQRUdfTUlOX1dJRFRIL01U S19KUEVHX01BWF9XSURUSCBmcm9tDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgJ2ludCcg dHlwZSB0byAndW5zaWduZWQgaW50JyB0eXBlLg0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAg IGZpeCBtc2xlYWRpbmdseSBpbmRlbnRlZCBvZiAnZWxzZScuDQo+ID4gDQo+ID4gdjM6IGRlbGV0 ZSBDaGFuZ2UtSWQuDQo+ID4gICAgIG9ubHkgdGVzdCBvbmNlIGhhbmRsZXItPmVycm9yIGFmdGVy IHRoZSBsYXN0IHY0bDJfY3RybF9uZXdfc3RkKCkuDQo+ID4gICAgIHNlcGVyYXRlIGNoYW5nZXMg b2YgdjRsMi1jdHJscy5jIGFuZCB2NGwyLWNvbnRyb2xzLmggdG8gbmV3IHBhdGNoLg0KPiA+IA0K PiA+IHYyOiBmaXggY29tcGxpYW5jZSB0ZXN0IGZhaWwsIGNoZWNrIGNyZWF0ZWQgYnVmZmVyIHNp emUgaW4gZHJpdmVyLg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1q cGVnL01ha2VmaWxlICAgICAgfCAgIDUgKy0NCj4gPiAgLi4uL21lZGlhL3BsYXRmb3JtL210ay1q cGVnL210a19qcGVnX2NvcmUuYyAgIHwgNzMxICsrKysrKysrKysrKysrKy0tLQ0KPiA+ICAuLi4v bWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfY29yZS5oICAgfCAxMjMgKystDQo+ID4g IC4uLi9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19kZWNfaHcuaCB8ICAgNyArLQ0K PiA+ICAuLi4vbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfZW5jX2h3LmMgfCAxNzUg KysrKysNCj4gPiAgLi4uL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2VuY19ody5o IHwgIDYwICsrDQo+ID4gIC4uLi9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19lbmNfcmVnLmgg ICAgICB8ICA0OSArKw0KPiA+ICA3IGZpbGVzIGNoYW5nZWQsIDEwMDQgaW5zZXJ0aW9ucygrKSwg MTQ2IGRlbGV0aW9ucygtKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19lbmNfaHcuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19lbmNfaHcuaA0KPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtf anBlZ19lbmNfcmVnLmgNCj4gPiANCj4gDQo+IEZpcnN0IG9mIGFsbCwgdGhhbmtzIGZvciB0aGUg cGF0Y2ghDQo+IA0KPiBQbGVhc2UgY2hlY2sgbXkgY29tbWVudHMgYmVsb3cuDQo+IA0KPiBNeSBn ZW5lcmFsIGZlZWxpbmcgYWJvdXQgdGhpcyBjb2RlIGlzIHRoYXQgdGhlIGVuY29kZXIgaGFyZHdh cmUgYmxvY2sgaXMNCj4gY29tcGxldGVseSBvcnRob2dvbmFsIGZyb20gdGhlIGRlY29kZXIgYmxv Y2sgYW5kIHRoZXJlIGlzIHZlcnkgbGl0dGxlIGNvZGUNCj4gcmV1c2UgZnJvbSB0aGUgb3JpZ2lu YWwgZGVjb2RlciBkcml2ZXIuIA0KPiANCj4gTW9yZW92ZXIsIGEgbG90IG9mIGV4aXN0aW5nIGNv ZGUgbm93IG5lZWRzIGlmIChkZWNvZGVyKSB7IC4uLiB9IGVsc2Ugey4uLiB9DQo+IHNlZ21lbnRz LCB3aGljaCBjb21wbGljYXRlcyB0aGUgY29kZS4NCj4gDQo+IFdvdWxkIGl0IHBlcmhhcHMgbWFr ZSBzZW5zZSB0byBpbnN0ZWFkIGNyZWF0ZSBhIHNlcGFyYXRlIG10ay1qcGVnLWVuYw0KPiBkcml2 ZXI/DQo+IA0KPiBJdCB3b3VsZCBhbHNvIGdpdmUgdXMgYSBmcmVzaCBzdGFydCBpbiB0ZXJtcyBv ZiBjb2RlIHF1YWxpdHksIGFzIHRoZQ0KPiBleGlzdGluZyBtdGstanBlZyBkcml2ZXIgaGFzIGEg bG90IG9mIHF1YWxpdHkgaXNzdWVzIHVuZm9ydHVuYXRlbHkuIChTb21lDQo+IG9mIG15IGNvbW1l bnRzIHRvIHRoaXMgcGF0Y2ggYWN0dWFsbHkgcmVsYXRlIHRvIHRoZSBpc3N1ZXMgd2l0aCB0aGUN Cj4gb3JpZ2luYWwgY29kZSwgbm90IGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYnV0IHdlIG5l ZWQgdG8gZml4IHRoZW0gaWYNCj4gY2hhbmdpbmcgdGhpcyBkcml2ZXIgYWxyZWFkeS4pDQo+IA0K RGVhciBUb21hc3osDQoNCkkgaGF2ZWQgZml4ZWQgdGhlIGRyaXZlciBieSBmb2xsb3dpbmcgeW91 ciBhZHZpY2UgaW4gZ2VuZXJhbC4NCg0KUGxlYXNlIGNoZWNrIG15IHJlcGx5IGJlbG93Lg0KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL01ha2VmaWxlIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9NYWtlZmlsZQ0KPiA+IGluZGV4IDQ4NTE2 ZGNmOTZlNi4uNzZjMzNhYWQwZjNmIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vbXRrLWpwZWcvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L210ay1qcGVnL01ha2VmaWxlDQo+ID4gQEAgLTEsMyArMSw2IEBADQo+ID4gICMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiA+IC1tdGtfanBlZy1vYmpzIDo9IG10a19q cGVnX2NvcmUubyBtdGtfanBlZ19kZWNfaHcubyBtdGtfanBlZ19kZWNfcGFyc2Uubw0KPiA+ICtt dGtfanBlZy1vYmpzIDo9IG10a19qcGVnX2NvcmUubyBcDQo+ID4gKwkJIG10a19qcGVnX2RlY19o dy5vIFwNCj4gPiArCQkgbXRrX2pwZWdfZGVjX3BhcnNlLm8gXA0KPiA+ICsJCSBtdGtfanBlZ19l bmNfaHcubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9fTUVESUFURUtfSlBFRykgKz0gbXRrX2pw ZWcubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210 a19qcGVnX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdf Y29yZS5jDQo+ID4gaW5kZXggYWJjNTA2YTU1MmMxLi4wODdiNjJiYjFkNWMgMTAwNjQ0DQo+ID4g LS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19jb3JlLmMNCj4g PiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2NvcmUuYw0K PiA+IEBAIC0zLDYgKzMsNyBAQA0KPiA+ICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgTWVkaWFUZWsg SW5jLg0KPiA+ICAgKiBBdXRob3I6IE1pbmcgSHNpdSBUc2FpIDxtaW5naHNpdS50c2FpQG1lZGlh dGVrLmNvbT4NCj4gPiAgICogICAgICAgICBSaWNrIENoYW5nIDxyaWNrLmNoYW5nQG1lZGlhdGVr LmNvbT4NCj4gPiArICogICAgICAgICBYaWEgSmlhbmcgPHhpYS5qaWFuZ0BtZWRpYXRlay5jb20+ DQo+ID4gICAqLw0KPiA+ICANCj4gPiAgI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+IEBAIC0y Myw2ICsyNCw3IEBADQo+ID4gICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5o Pg0KPiA+ICAjaW5jbHVkZSA8c29jL21lZGlhdGVrL3NtaS5oPg0KPiA+ICANCj4gPiArI2luY2x1 ZGUgIm10a19qcGVnX2VuY19ody5oIg0KPiA+ICAjaW5jbHVkZSAibXRrX2pwZWdfZGVjX2h3Lmgi DQo+ID4gICNpbmNsdWRlICJtdGtfanBlZ19jb3JlLmgiDQo+ID4gICNpbmNsdWRlICJtdGtfanBl Z19kZWNfcGFyc2UuaCINCj4gPiBAQCAtMzEsNyArMzMsOCBAQCBzdGF0aWMgc3RydWN0IG10a19q cGVnX2ZtdCBtdGtfanBlZ19mb3JtYXRzW10gPSB7DQo+ID4gIAl7DQo+ID4gIAkJLmZvdXJjYwkJ PSBWNEwyX1BJWF9GTVRfSlBFRywNCj4gPiAgCQkuY29scGxhbmVzCT0gMSwNCj4gPiAtCQkuZmxh Z3MJCT0gTVRLX0pQRUdfRk1UX0ZMQUdfREVDX09VVFBVVCwNCj4gPiArCQkuZmxhZ3MJCT0gTVRL X0pQRUdfRk1UX0ZMQUdfREVDX09VVFBVVCB8DQo+ID4gKwkJCQkgIE1US19KUEVHX0ZNVF9GTEFH X0VOQ19DQVBUVVJFLA0KPiA+ICAJfSwNCj4gPiAgCXsNCj4gPiAgCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9ZVVY0MjBNLA0KPiA+IEBAIC01MSw2ICs1NCw0MiBAQCBzdGF0aWMgc3RydWN0IG10 a19qcGVnX2ZtdCBtdGtfanBlZ19mb3JtYXRzW10gPSB7DQo+ID4gIAkJLnZfYWxpZ24JPSAzLA0K PiA+ICAJCS5mbGFncwkJPSBNVEtfSlBFR19GTVRfRkxBR19ERUNfQ0FQVFVSRSwNCj4gPiAgCX0s DQo+ID4gKwl7DQo+ID4gKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfTlYxMk0sDQo+ID4gKwkJ Lmhfc2FtcGxlCT0gezQsIDIsIDJ9LA0KPiA+ICsJCS52X3NhbXBsZQk9IHs0LCAyLCAyfSwNCj4g PiArCQkuY29scGxhbmVzCT0gMiwNCj4gPiArCQkuaF9hbGlnbgk9IDQsDQo+ID4gKwkJLnZfYWxp Z24JPSA0LA0KPiA+ICsJCS5mbGFncwkJPSBNVEtfSlBFR19GTVRfRkxBR19FTkNfT1VUUFVULA0K PiA+ICsJfSwNCj4gPiArCXsNCj4gPiArCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9OVjIxTSwN Cj4gPiArCQkuaF9zYW1wbGUJPSB7NCwgMiwgMn0sDQo+ID4gKwkJLnZfc2FtcGxlCT0gezQsIDIs IDJ9LA0KPiA+ICsJCS5jb2xwbGFuZXMJPSAyLA0KPiA+ICsJCS5oX2FsaWduCT0gNCwNCj4gPiAr CQkudl9hbGlnbgk9IDQsDQo+ID4gKwkJLmZsYWdzCQk9IE1US19KUEVHX0ZNVF9GTEFHX0VOQ19P VVRQVVQsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1U X1lVWVYsDQo+ID4gKwkJLmhfc2FtcGxlCT0gezQsIDIsIDJ9LA0KPiA+ICsJCS52X3NhbXBsZQk9 IHs0LCA0LCA0fSwNCj4gPiArCQkuY29scGxhbmVzCT0gMSwNCj4gPiArCQkuaF9hbGlnbgk9IDQs DQo+ID4gKwkJLnZfYWxpZ24JPSAzLA0KPiA+ICsJCS5mbGFncwkJPSBNVEtfSlBFR19GTVRfRkxB R19FTkNfT1VUUFVULA0KPiA+ICsJfSwNCj4gPiArCXsNCj4gPiArCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9ZVllVLA0KPiA+ICsJCS5oX3NhbXBsZQk9IHs0LCAyLCAyfSwNCj4gPiArCQkudl9z YW1wbGUJPSB7NCwgNCwgNH0sDQo+ID4gKwkJLmNvbHBsYW5lcwk9IDEsDQo+ID4gKwkJLmhfYWxp Z24JPSA0LA0KPiA+ICsJCS52X2FsaWduCT0gMywNCj4gPiArCQkuZmxhZ3MJCT0gTVRLX0pQRUdf Rk1UX0ZMQUdfRU5DX09VVFBVVCwNCj4gPiArCX0sDQo+ID4gIH07DQo+ID4gIA0KPiA+ICAjZGVm aW5lIE1US19KUEVHX05VTV9GT1JNQVRTIEFSUkFZX1NJWkUobXRrX2pwZWdfZm9ybWF0cykNCj4g PiBAQCAtNjUsMTEgKzEwNCwxOSBAQCBzdHJ1Y3QgbXRrX2pwZWdfc3JjX2J1ZiB7DQo+ID4gIAlz dHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQo+ID4gIAlpbnQgZmxhZ3M7DQo+ID4gIAlzdHJ1Y3QgbXRr X2pwZWdfZGVjX3BhcmFtIGRlY19wYXJhbTsNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19lbmNfcGFy YW0gZW5jX3BhcmFtOw0KPiA+ICB9Ow0KPiA+ICANCj4gPiArI2RlZmluZSBNVEtfTUFYX0NUUkxT X0hJTlQJMjANCj4gDQo+IEkgY2FuIHNlZSBvbmx5IDMgY29udHJvbHMgcmVnaXN0ZXJlZCBieSB0 aGlzIGRyaXZlci4gTW9yZW92ZXIsIHdvdWxkbid0IGl0DQo+IGJlIG1vcmUgcmVhZGFibGUgaWYg dGhlIHY0bDJfY3RybF9oYW5kbGVyX2luaXQoKSBjYWxsIGhhZCAiMyIgZGlyZWN0bHkNCj4gcGFz c2VkIHRvIGl0PyBUaGVuIHRoZSByZWFkZXIgY2FuIHNlZSB0aGF0IHRoZXJlIGFyZSAzIGNhbGxz IHRvDQo+IHY0bDJfY3RybF9uZXdfc3RkKCkganVzdCBiZWxvdyBpdCBhbmQgdGhlIG1lYW5pbmcg YmVoaW5kIHRoZSB2YWx1ZSBvZiAzIGlzDQo+IGNsZWFyLg0KZG9uZQ0KPiANCj4gPiArDQo+ID4g IHN0YXRpYyBpbnQgZGVidWc7DQo+ID4gIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsN Cj4gPiAgDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19qcGVnX2N0eCAqY3RybF90b19j dHgoc3RydWN0IHY0bDJfY3RybCAqY3RybCkNCj4gPiArew0KPiA+ICsJcmV0dXJuIGNvbnRhaW5l cl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgbXRrX2pwZWdfY3R4LCBjdHJsX2hkbCk7DQo+ID4g K30NCj4gPiArDQo+ID4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IG10a19qcGVnX2N0eCAqbXRrX2pw ZWdfZmhfdG9fY3R4KHN0cnVjdCB2NGwyX2ZoICpmaCkNCj4gPiAgew0KPiA+ICAJcmV0dXJuIGNv bnRhaW5lcl9vZihmaCwgc3RydWN0IG10a19qcGVnX2N0eCwgZmgpOw0KPiA+IEBAIC04NiwxNCAr MTMzLDc0IEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUs IHZvaWQgKnByaXYsDQo+ID4gIHsNCj4gPiAgCXN0cnVjdCBtdGtfanBlZ19kZXYgKmpwZWcgPSB2 aWRlb19kcnZkYXRhKGZpbGUpOw0KPiA+ICANCj4gPiAtCXN0cnNjcHkoY2FwLT5kcml2ZXIsIE1U S19KUEVHX05BTUUgIiBkZWNvZGVyIiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7DQo+ID4gLQlzdHJz Y3B5KGNhcC0+Y2FyZCwgTVRLX0pQRUdfTkFNRSAiIGRlY29kZXIiLCBzaXplb2YoY2FwLT5jYXJk KSk7DQo+ID4gKwlzdHJzY3B5KGNhcC0+ZHJpdmVyLCBNVEtfSlBFR19OQU1FLCBzaXplb2YoY2Fw LT5kcml2ZXIpKTsNCj4gPiArCWlmIChqcGVnLT5tb2RlID09ICBNVEtfSlBFR19FTkMpDQo+ID4g KwkJc3Ryc2NweShjYXAtPmNhcmQsIE1US19KUEVHX05BTUUgIiBlbmNvZGVyIiwgc2l6ZW9mKGNh cC0+Y2FyZCkpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXN0cnNjcHkoY2FwLT5jYXJkLCBNVEtfSlBF R19OQU1FICIgZGVjb2RlciIsIHNpemVvZihjYXAtPmNhcmQpKTsNCj4gPiAgCXNucHJpbnRmKGNh cC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwgInBsYXRmb3JtOiVzIiwNCj4gPiAg CQkgZGV2X25hbWUoanBlZy0+ZGV2KSk7DQo+ID4gIA0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0N Cj4gPiAgDQo+ID4gK3N0YXRpYyBpbnQgdmlkaW9jX2pwZWdfc19jdHJsKHN0cnVjdCB2NGwyX2N0 cmwgKmN0cmwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCA9IGN0cmxf dG9fY3R4KGN0cmwpOw0KPiA+ICsJc3RydWN0IGpwZWdfZW5jX3BhcmFtICpwID0gJmN0eC0+anBl Z19wYXJhbTsNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19kZXYgKmpwZWcgPSBjdHgtPmpwZWc7DQo+ ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQo+ID4g KwljYXNlIFY0TDJfQ0lEX0pQRUdfUkVTVEFSVF9JTlRFUlZBTDoNCj4gPiArCQlwLT5yZXN0YXJ0 X2ludGVydmFsID0gY3RybC0+dmFsOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX0NJ RF9KUEVHX0NPTVBSRVNTSU9OX1FVQUxJVFk6DQo+ID4gKwkJcC0+ZW5jX3F1YWxpdHkgPSBjdHJs LT52YWw7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfQ0lEX0pQRUdfQUNUSVZFX01B UktFUjoNCj4gPiArCQlwLT5lbmFibGVfZXhpZiA9IGN0cmwtPnZhbCAmIFY0TDJfSlBFR19BQ1RJ VkVfTUFSS0VSX0FQUDE7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdjRs Ml9kYmcoMiwgZGVidWcsICZqcGVnLT52NGwyX2RldiwgIiVzIHZhbCA9ICVkIiwNCj4gPiArCQkg djRsMl9jdHJsX2dldF9uYW1lKGN0cmwtPmlkKSwgY3RybC0+dmFsKTsNCj4gDQo+IEdlbmVyaWMg VjRMMiBsb2dzIGNhbiBhbHJlYWR5IGR1bXAgYWxsIFY0TDIgSU9DVEwgY2FsbHMsIHNvIHBlcmhh cHMgd2UNCj4gY291bGQgcmVtb3ZlIHRoaXM/DQpkb25lDQo+IA0KPiA+ICsNCj4gPiArCXJldHVy biByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJs X29wcyBtdGtfanBlZ19jdHJsX29wcyA9IHsNCj4gPiArCS5zX2N0cmwgPSB2aWRpb2NfanBlZ19z X2N0cmwsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtpbnQgbXRrX2pwZWdfY3RybHNfc2V0dXAoc3Ry dWN0IG10a19qcGVnX2N0eCAqY3R4KQ0KPiA+ICt7DQo+ID4gKwljb25zdCBzdHJ1Y3QgdjRsMl9j dHJsX29wcyAqb3BzID0gJm10a19qcGVnX2N0cmxfb3BzOw0KPiA+ICsJc3RydWN0IHY0bDJfY3Ry bF9oYW5kbGVyICpoYW5kbGVyID0gJmN0eC0+Y3RybF9oZGw7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pw ZWdfZGV2ICpqcGVnID0gY3R4LT5qcGVnOw0KPiA+ICsNCj4gPiArCXY0bDJfY3RybF9oYW5kbGVy X2luaXQoaGFuZGxlciwgTVRLX01BWF9DVFJMU19ISU5UKTsNCj4gPiArDQo+ID4gKwlpZiAoanBl Zy0+bW9kZSA9PSBNVEtfSlBFR19FTkMpIHsNCj4gPiArCQl2NGwyX2N0cmxfbmV3X3N0ZChoYW5k bGVyLCBvcHMsIFY0TDJfQ0lEX0pQRUdfUkVTVEFSVF9JTlRFUlZBTCwNCj4gPiArCQkJCSAgMCwg MTAwLCAxLCAwKTsNCj4gPiArCQl2NGwyX2N0cmxfbmV3X3N0ZChoYW5kbGVyLCBvcHMsDQo+ID4g KwkJCQkgIFY0TDJfQ0lEX0pQRUdfQ09NUFJFU1NJT05fUVVBTElUWSwgNDgsIDEwMCwgMSwNCj4g PiArCQkJCSAgOTApOw0KPiA+ICsJCXY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIG9wcywgVjRM Ml9DSURfSlBFR19BQ1RJVkVfTUFSS0VSLCAwLA0KPiA+ICsJCQkJICBWNEwyX0pQRUdfQUNUSVZF X01BUktFUl9BUFAxLCAwLCAwKTsNCj4gPiArDQo+ID4gKwkJaWYgKGhhbmRsZXItPmVycm9yKSB7 DQo+ID4gKwkJCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmN0eC0+Y3RybF9oZGwpOw0KPiA+ICsJ CQlyZXR1cm4gaGFuZGxlci0+ZXJyb3I7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXY0bDJfY3RybF9oYW5kbGVyX3NldHVwKCZjdHgtPmN0cmxfaGRsKTsNCj4gPiArDQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgc3RhdGljIGludCBtdGtfanBlZ19lbnVtX2Zt dChzdHJ1Y3QgbXRrX2pwZWdfZm10ICptdGtfanBlZ19mb3JtYXRzLCBpbnQgbiwNCj4gPiAgCQkJ ICAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmLCB1MzIgdHlwZSkNCj4gPiAgew0KPiA+IEBAIC0x MTgsMjMgKzIyNSwyOSBAQCBzdGF0aWMgaW50IG10a19qcGVnX2VudW1fZm10KHN0cnVjdCBtdGtf anBlZ19mbXQgKm10a19qcGVnX2Zvcm1hdHMsIGludCBuLA0KPiA+ICBzdGF0aWMgaW50IG10a19q cGVnX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+ID4g IAkJCQkgICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpDQo+ID4gIHsNCj4gPiArCXN0cnVjdCBt dGtfanBlZ19jdHggKmN0eCA9IG10a19qcGVnX2ZoX3RvX2N0eChwcml2KTsNCj4gPiArDQo+ID4g IAlyZXR1cm4gbXRrX2pwZWdfZW51bV9mbXQobXRrX2pwZWdfZm9ybWF0cywgTVRLX0pQRUdfTlVN X0ZPUk1BVFMsIGYsDQo+ID4gKwkJCQkgY3R4LT5qcGVnLT5tb2RlID09IE1US19KUEVHX0VOQyA/ DQo+ID4gKwkJCQkgTVRLX0pQRUdfRk1UX0ZMQUdfRU5DX0NBUFRVUkUgOg0KPiA+ICAJCQkJIE1U S19KUEVHX0ZNVF9GTEFHX0RFQ19DQVBUVVJFKTsNCj4gPiAgfQ0KPiA+ICANCj4gPiAgc3RhdGlj IGludCBtdGtfanBlZ19lbnVtX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpw cml2LA0KPiA+ICAJCQkJICAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQ0KPiA+ICB7DQo+ID4g KwlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHggPSBtdGtfanBlZ19maF90b19jdHgocHJpdik7DQo+ ID4gKw0KPiA+ICAJcmV0dXJuIG10a19qcGVnX2VudW1fZm10KG10a19qcGVnX2Zvcm1hdHMsIE1U S19KUEVHX05VTV9GT1JNQVRTLCBmLA0KPiA+ICsJCQkJIGN0eC0+anBlZy0+bW9kZSA9PSBNVEtf SlBFR19FTkMgPw0KPiA+ICsJCQkJIE1US19KUEVHX0ZNVF9GTEFHX0VOQ19PVVRQVVQgOg0KPiA+ ICAJCQkJIE1US19KUEVHX0ZNVF9GTEFHX0RFQ19PVVRQVVQpOw0KPiA+ICB9DQo+ID4gIA0KPiA+ IC1zdGF0aWMgc3RydWN0IG10a19qcGVnX3FfZGF0YSAqbXRrX2pwZWdfZ2V0X3FfZGF0YShzdHJ1 Y3QgbXRrX2pwZWdfY3R4ICpjdHgsDQo+ID4gLQkJCQkJCSAgIGVudW0gdjRsMl9idWZfdHlwZSB0 eXBlKQ0KPiA+ICtzdGF0aWMgc3RydWN0IG10a19qcGVnX3FfZGF0YSAqDQo+ID4gK210a19qcGVn X2dldF9xX2RhdGEoc3RydWN0IG10a19qcGVnX2N0eCAqY3R4LCBlbnVtIHY0bDJfYnVmX3R5cGUg dHlwZSkNCj4gPiAgew0KPiA+IC0JaWYgKFY0TDJfVFlQRV9JU19PVVRQVVQodHlwZSkpDQo+ID4g LQkJcmV0dXJuICZjdHgtPm91dF9xOw0KPiA+IC0JcmV0dXJuICZjdHgtPmNhcF9xOw0KPiA+ICsJ cmV0dXJuIFY0TDJfVFlQRV9JU19PVVRQVVQodHlwZSkgPyAmY3R4LT5vdXRfcSA6ICZjdHgtPmNh cF9xOw0KPiANCj4gSXMgdGhpcyBjaGFuZ2UgbmVjZXNzYXJ5Pw0KY2FuY2VsIHRoaXMgY2hhbmdl Lg0KPiANCj4gPiAgfQ0KPiA+ICANCj4gPiAgc3RhdGljIHN0cnVjdCBtdGtfanBlZ19mbXQgKm10 a19qcGVnX2ZpbmRfZm9ybWF0KHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCwNCj4gPiBAQCAtMTQz LDkgKzI1NiwxNCBAQCBzdGF0aWMgc3RydWN0IG10a19qcGVnX2ZtdCAqbXRrX2pwZWdfZmluZF9m b3JtYXQoc3RydWN0IG10a19qcGVnX2N0eCAqY3R4LA0KPiA+ICB7DQo+ID4gIAl1bnNpZ25lZCBp bnQgaywgZm10X2ZsYWc7DQo+ID4gIA0KPiA+IC0JZm10X2ZsYWcgPSAoZm10X3R5cGUgPT0gTVRL X0pQRUdfRk1UX1RZUEVfT1VUUFVUKSA/DQo+ID4gLQkJICAgTVRLX0pQRUdfRk1UX0ZMQUdfREVD X09VVFBVVCA6DQo+ID4gLQkJICAgTVRLX0pQRUdfRk1UX0ZMQUdfREVDX0NBUFRVUkU7DQo+ID4g KwlpZiAoY3R4LT5qcGVnLT5tb2RlID09ICBNVEtfSlBFR19FTkMpDQo+ID4gKwkJZm10X2ZsYWcg PSAoZm10X3R5cGUgPT0gTVRLX0pQRUdfRk1UX1RZUEVfT1VUUFVUKSA/DQo+ID4gKwkJCSAgIE1U S19KUEVHX0ZNVF9GTEFHX0VOQ19PVVRQVVQgOg0KPiA+ICsJCQkgICBNVEtfSlBFR19GTVRfRkxB R19FTkNfQ0FQVFVSRTsNCj4gPiArCWVsc2UNCj4gPiArCQlmbXRfZmxhZyA9IChmbXRfdHlwZSA9 PSBNVEtfSlBFR19GTVRfVFlQRV9PVVRQVVQpID8NCj4gPiArCQkJICAgTVRLX0pQRUdfRk1UX0ZM QUdfREVDX09VVFBVVCA6DQo+ID4gKwkJCSAgIE1US19KUEVHX0ZNVF9GTEFHX0RFQ19DQVBUVVJF Ow0KPiA+ICANCj4gPiAgCWZvciAoayA9IDA7IGsgPCBNVEtfSlBFR19OVU1fRk9STUFUUzsgaysr KSB7DQo+ID4gIAkJc3RydWN0IG10a19qcGVnX2ZtdCAqZm10ID0gJm10a19qcGVnX2Zvcm1hdHNb a107DQo+ID4gQEAgLTE5Niw5ICszMTQsOTkgQEAgc3RhdGljIHZvaWQgbXRrX2pwZWdfYWRqdXN0 X2ZtdF9tcGxhbmUoc3RydWN0IG10a19qcGVnX2N0eCAqY3R4LA0KPiA+ICAJfQ0KPiA+ICB9DQo+ ID4gIA0KPiA+IC1zdGF0aWMgaW50IG10a19qcGVnX3RyeV9mbXRfbXBsYW5lKHN0cnVjdCB2NGwy X2Zvcm1hdCAqZiwNCj4gPiAtCQkJCSAgIHN0cnVjdCBtdGtfanBlZ19mbXQgKmZtdCwNCj4gPiAt CQkJCSAgIHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCwgaW50IHFfdHlwZSkNCj4gPiArc3RhdGlj IGludCBtdGtfanBlZ190cnlfZW5jX2ZtdF9tcGxhbmUoc3RydWN0IHY0bDJfZm9ybWF0ICpmLA0K PiA+ICsJCQkJICAgICAgIHN0cnVjdCBtdGtfanBlZ19mbXQgKmZtdCwNCj4gPiArCQkJCSAgICAg ICBzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgsIGludCBxX3R5cGUpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXAgPSAmZi0+Zm10LnBpeF9tcDsNCj4g PiArCXN0cnVjdCBtdGtfanBlZ19kZXYgKmpwZWcgPSBjdHgtPmpwZWc7DQo+ID4gKwlpbnQgaSwg YWxpZ25fdywgYWxpZ25faDsNCj4gPiArDQo+ID4gKwltZW1zZXQocGl4X21wLT5yZXNlcnZlZCwg MCwgc2l6ZW9mKHBpeF9tcC0+cmVzZXJ2ZWQpKTsNCj4gDQo+IFRoZSBjb3JlIGFscmVhZHkgdGFr ZXMgY2FyZSBvZiB6ZXJvaW5nIHRoaXMuDQprZWVwIHRoaXMsIGNhbmNlbCBmb2xsb3dpbmcgemVy b2luZyBwaXhfbXAtPnJlc2VydmVkLg0KPiANCj4gPiArCXBpeF9tcC0+ZmllbGQgPSBWNEwyX0ZJ RUxEX05PTkU7DQo+ID4gKw0KPiA+ICsJaWYgKGN0eC0+c3RhdGUgIT0gTVRLX0pQRUdfSU5JVCkg ew0KPiA+ICsJCW10a19qcGVnX2FkanVzdF9mbXRfbXBsYW5lKGN0eCwgZik7DQo+ID4gKwkJZ290 byBlbmQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcGl4X21wLT5udW1fcGxhbmVzID0gZm10LT5j b2xwbGFuZXM7DQo+ID4gKwlwaXhfbXAtPnBpeGVsZm9ybWF0ID0gZm10LT5mb3VyY2M7DQo+ID4g Kw0KPiA+ICsJaWYgKHFfdHlwZSA9PSBNVEtfSlBFR19GTVRfVFlQRV9PVVRQVVQpIHsNCj4gDQo+ IFRoZXJlIGFyZSBzZXBhcmF0ZSBvcHMgZm9yIG91dF9tcGxhbmUgYW5kIGNhcF9tcGxhbmUuIFdv dWxkbid0IGl0IG1ha2UgbW9yZQ0KPiBzZW5zZSB0byBoYXZlIHRoZW0gaGFuZGxlZCBpbiBzZXBh cmF0ZSBmdW5jdGlvbnM/DQpkb24ndCBzZXBhcmF0ZSBvcHMgZm9yIG91dF9tcGxhbmUgYW5kIGNh cF9tcGxhbmUsIGJlY2F1c2UgdGhlIG1vZGlmaWVkDQpjb2RlIG9mIHRoaXMgZnVuY3Rpb24gYXMg eW91ciBmb2xsb3dpbmcgYWR2aWNlIGlzIGJyaWVmLg0KPiANCj4gPiArCQlwaXhfbXAtPmhlaWdo dCA9IGNsYW1wKHBpeF9tcC0+aGVpZ2h0LCBNVEtfSlBFR19NSU5fSEVJR0hULA0KPiA+ICsJCQkJ ICAgICAgIE1US19KUEVHX01BWF9IRUlHSFQpOw0KPiA+ICsJCXBpeF9tcC0+d2lkdGggPSBjbGFt cChwaXhfbXAtPndpZHRoLCBNVEtfSlBFR19NSU5fV0lEVEgsDQo+ID4gKwkJCQkgICAgICBNVEtf SlBFR19NQVhfV0lEVEgpOw0KPiA+ICsJCWFsaWduX3cgPSBwaXhfbXAtPndpZHRoOw0KPiA+ICsJ CWFsaWduX2ggPSBwaXhfbXAtPmhlaWdodDsNCj4gPiArCQlhbGlnbl93ID0gcm91bmRfdXAoYWxp Z25fdywgMik7DQo+ID4gKwkJaWYgKHBpeF9tcC0+bnVtX3BsYW5lcyA9PSAxVSkgew0KPiA+ICsJ CQltdGtfanBlZ19ib3VuZF9hbGlnbl9pbWFnZSgmYWxpZ25fdywNCj4gPiArCQkJCQkJICAgTVRL X0pQRUdfTUlOX1dJRFRILA0KPiA+ICsJCQkJCQkgICBNVEtfSlBFR19NQVhfV0lEVEgsIDUsDQo+ ID4gKwkJCQkJCSAgICZhbGlnbl9oLA0KPiA+ICsJCQkJCQkgICBNVEtfSlBFR19NSU5fSEVJR0hU LA0KPiA+ICsJCQkJCQkgICBNVEtfSlBFR19NQVhfSEVJR0hULCAzKTsNCj4gDQo+IEknZCBzdWdn ZXN0IHJlbW92aW5nIHRoZSBtdGtfanBlZ19ib3VuZF9hbGlnbl9pbWFnZSgpLCBhcyB3ZSBkb24n dCBuZWVkIHRoZQ0KPiBjb21wbGV4IGNvbXB1dGF0aW9uIHRoYXQncyBoYXBwZW5pbmcgdGhlcmUu IEFsbCB3ZSBuZWVkIGlzOg0KZG9uZQ0KPiANCj4gCXBpeF9tcC0+aGVpZ2h0ID0gY2xhbXAocm91 bmRfdXAocGl4X21wLT5oZWlnaHQsIDgpLCBNVEtfSlBFR19NSU5fSEVJR0hULA0KPiAJCQkgICAg ICAgTVRLX0pQRUdfTUFYX0hFSUdIVCk7DQo+IAlwaXhfbXAtPndpZHRoID0gY2xhbXAocm91bmRf dXAocGl4X21wLT53aWR0aCwgMzIpLCBNVEtfSlBFR19NSU5fV0lEVEgsDQo+IAkJCSAgICAgIE1U S19KUEVHX01BWF9XSURUSCk7DQo+IA0KPiBOb3RlIHRoYXQgY29udHJhcnkgdG8gdGhlIGV4aXN0 aW5nIGNvZGUsIHRoZSBhbGlnbmVkIHdpZHRoIGFuZCBoZWlnaHQNCj4gX211c3RfIGJlIHJldHVy bmVkIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIGFuZCBub3Qgb25seSBoaWRkZW4gaW5zaWRlDQo+ IGJ5dGVzcGVybGluZSBhbmQgc2l6ZWltYWdlLg0KZG9uZQ0KPiANCj4gPiArCQkJYWxpZ25fdyA9 IGFsaWduX3cgPDwgMTsNCj4gPiArCQkJcGl4X21wLT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5l ID0gYWxpZ25fdzsNCj4gPiArCQkJcGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlID0gYWxp Z25fdyAqIGFsaWduX2g7DQo+ID4gKwkJfSBlbHNlIGlmIChwaXhfbXAtPm51bV9wbGFuZXMgPT0g MlUpIHsNCj4gPiArCQkJbXRrX2pwZWdfYm91bmRfYWxpZ25faW1hZ2UoJmFsaWduX3csDQo+ID4g KwkJCQkJCSAgIE1US19KUEVHX01JTl9XSURUSCwNCj4gPiArCQkJCQkJICAgTVRLX0pQRUdfTUFY X1dJRFRILCA0LA0KPiA+ICsJCQkJCQkgICAmYWxpZ25faCwNCj4gPiArCQkJCQkJICAgTVRLX0pQ RUdfTUlOX0hFSUdIVCwNCj4gPiArCQkJCQkJICAgTVRLX0pQRUdfTUFYX0hFSUdIVCwgNCk7DQo+ ID4gKwkJCXBpeF9tcC0+cGxhbmVfZm10WzBdLmJ5dGVzcGVybGluZSA9IGFsaWduX3c7DQo+ID4g KwkJCXBpeF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZSA9IGFsaWduX3cgKiBhbGlnbl9oOw0K PiA+ICsJCQlwaXhfbXAtPnBsYW5lX2ZtdFsxXS5ieXRlc3BlcmxpbmUgPSBhbGlnbl93Ow0KPiA+ ICsJCQlwaXhfbXAtPnBsYW5lX2ZtdFsxXS5zaXplaW1hZ2UgPQ0KPiA+ICsJCQkJKGFsaWduX3cg KiBhbGlnbl9oKSAvIDI7DQo+IA0KPiBDb3VsZCB3ZSBwYXJhbWV0cml6ZSB0aGVzZSBjYWxjdWxh dGlvbnMgZnJvbSB0aGUgZm9ybWF0IGFycmF5IGFuZCB1c2UgYSBmb3INCj4gbG9vcCBvdmVyIHRo ZSBwbGFuZXMgaW5zdGVhZD8NCj4gDQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJdjRsMl9lcnIo JmpwZWctPnY0bDJfZGV2LA0KPiA+ICsJCQkJICJVbnN1cHBvcnQgbnVtIHBsYW5lcyA9ICVkXG4i LA0KPiA+ICsJCQkJIHBpeF9tcC0+bnVtX3BsYW5lcyk7DQo+IA0KPiBJc24ndCB0aGlzIGltcG9z c2libGU/DQp5ZXMsIGRlbGV0ZWQgaXQuDQo+IA0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ ID4gKwkJbXRrX2pwZWdfYm91bmRfYWxpZ25faW1hZ2UoJnBpeF9tcC0+d2lkdGgsIE1US19KUEVH X01JTl9XSURUSCwNCj4gPiArCQkJCQkgICBNVEtfSlBFR19NQVhfV0lEVEgsIDAsDQo+ID4gKwkJ CQkJICAgJnBpeF9tcC0+aGVpZ2h0LA0KPiA+ICsJCQkJCSAgIE1US19KUEVHX01JTl9IRUlHSFQs DQo+ID4gKwkJCQkJICAgTVRLX0pQRUdfTUFYX0hFSUdIVCwgMCk7DQo+IA0KPiBTYW1lIGhlcmUs IGNvdWxkIHdlIGp1c3QgdXNlIGNsYW1wKCkgZGlyZWN0bHk/DQpkb25lDQo+IA0KPiA+ICsNCj4g PiArCQlpZiAoZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX0pQRUcpIHsNCj4gDQo+IENhbiB3 ZSBoYXZlIGFueSBvdGhlciBmb3JtYXQgb24gdGhpcyBxdWV1ZT8NCmZvciBqcGVnIGVuYyAsb25s eSBWNEwyX1BJWF9GTVRfSlBFRyBmb3JtYXQNCj4gDQo+ID4gKwkJCXBpeF9tcC0+cGxhbmVfZm10 WzBdLmJ5dGVzcGVybGluZSA9IDA7DQo+ID4gKwkJCXBpeF9tcC0+cGxhbmVfZm10WzBdLnNpemVp bWFnZSA9DQo+ID4gKwkJCQltdGtfanBlZ19hbGlnbihwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXpl aW1hZ2UsDQo+ID4gKwkJCQkJICAgICAgIDEyOCk7DQo+IA0KPiBXaGF0J3MgbXRrX2pwZWdfYWxp Z24oKT8gV2h5IGNvdWxkbid0IHdlIGp1c3QgdXNlIHJvdW5kX3VwKCkgZGlyZWN0bHk/DQpkb25l DQo+IA0KPiA+ICsJCQlpZiAocGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlID09IDApDQo+ ID4gKwkJCQlwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPQ0KPiA+ICsJCQkJCU1US19K UEVHX0RFRkFVTFRfU0laRUlNQUdFOw0KPiANCj4gSSB0aGluayB0aGVyZSBpcyBzb21lIHJlYXNv bmFibGUgdXBwZXIgYm91bmQgb2YgdGhlIGNvbXByZXNzZWQgaW1hZ2Ugc2l6ZQ0KPiBnaXZlbiB0 aGUgcmVzb2x1dGlvbi4gQ291bGQgd2UgdXNlIHRoYXQgaGVyZSBpbnN0ZWFkPw0KPiANCj4gPiAr CQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGZtdC0+Y29scGxhbmVz OyBpKyspIHsNCj4gPiArCQlzdHJ1Y3QgdjRsMl9wbGFuZV9waXhfZm9ybWF0ICpwZm10ID0NCj4g PiArCQkJCSZwaXhfbXAtPnBsYW5lX2ZtdFtpXTsNCj4gPiArCQltZW1zZXQocGZtdC0+cmVzZXJ2 ZWQsIDAsIHNpemVvZihwZm10LT5yZXNlcnZlZCkpOw0KPiANCj4gVGhlIGNvcmUgYWxyZWFkeSB6 ZXJvZXMgdGhpcy4NCmNhbmNlbGVkIHRoaXMNCj4gDQo+ID4gKwl9DQo+ID4gK2VuZDoNCj4gPiAr CXY0bDJfZGJnKDIsIGRlYnVnLCAmanBlZy0+djRsMl9kZXYsICJ3eGg6JXV4JXVcbiIsDQo+ID4g KwkJIHBpeF9tcC0+d2lkdGgsIHBpeF9tcC0+aGVpZ2h0KTsNCj4gPiArCWZvciAoaSA9IDA7IGkg PCBwaXhfbXAtPm51bV9wbGFuZXM7IGkrKykgew0KPiA+ICsJCXY0bDJfZGJnKDIsIGRlYnVnLCAm anBlZy0+djRsMl9kZXYsDQo+ID4gKwkJCSAicGxhbmVbJWRdIGJwbD0ldSwgc2l6ZT0ldVxuIiwN Cj4gPiArCQkJIGksDQo+ID4gKwkJCSBwaXhfbXAtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUs DQo+ID4gKwkJCSBwaXhfbXAtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2UpOw0KPiA+ICsJfQ0KPiAN Cj4gR2VuZXJpYyBWNEwyIGRlYnVnIGxvZ3MgYWxyZWFkeSBwcmludCB0aGlzLg0KY2FuY2VsZWQg dGhpcw0KPiANCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IG10a19qcGVnX3RyeV9kZWNfZm10X21wbGFuZShzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYsDQo+ID4g KwkJCQkgICAgICAgc3RydWN0IG10a19qcGVnX2ZtdCAqZm10LA0KPiA+ICsJCQkJICAgICAgIHN0 cnVjdCBtdGtfanBlZ19jdHggKmN0eCwgaW50IHFfdHlwZSkNCj4gPiAgew0KPiA+ICAJc3RydWN0 IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeF9tcCA9ICZmLT5mbXQucGl4X21wOw0KPiA+ICAJ c3RydWN0IG10a19qcGVnX2RldiAqanBlZyA9IGN0eC0+anBlZzsNCj4gPiBAQCAtMjMzLDYgKzQ0 MSwxMCBAQCBzdGF0aWMgaW50IG10a19qcGVnX3RyeV9mbXRfbXBsYW5lKHN0cnVjdCB2NGwyX2Zv cm1hdCAqZiwNCj4gPiAgCX0NCj4gPiAgDQo+ID4gIAkvKiB0eXBlIGlzIE1US19KUEVHX0ZNVF9U WVBFX0NBUFRVUkUgKi8NCj4gPiArCXBpeF9tcC0+aGVpZ2h0ID0gY2xhbXAocGl4X21wLT5oZWln aHQsIE1US19KUEVHX01JTl9IRUlHSFQsDQo+ID4gKwkJCSAgICAgICBNVEtfSlBFR19NQVhfSEVJ R0hUKTsNCj4gPiArCXBpeF9tcC0+d2lkdGggPSBjbGFtcChwaXhfbXAtPndpZHRoLCBNVEtfSlBF R19NSU5fV0lEVEgsDQo+ID4gKwkJCSAgICAgIE1US19KUEVHX01BWF9XSURUSCk7DQo+IA0KPiBX aHkgaXMgdGhpcyBuZWVkZWQ/IERvZXNuJ3QgdGhlIGNhbGwgYmVsb3cgYWxyZWFkeSBpbmNsdWRl IHRoZXNlIGNsYW1wcz8NCmNhbmNlbCB0aGlzDQo+IA0KPiAoVGhhdCBzYWlkLCBpdCB3b3VsZCBi ZSBjbGVhbmVyIGlmIG10a19qcGVnX2JvdW5kX2FsaWduX2ltYWdlKCkgd2FzIHJlbW92ZWQNCj4g YW5kIHJlcGxhY2VkIHdpdGggY2xhbXAoKSBjYWxscyBkaXJlY3RseSwgYmVjYXVzZSBvZiB0aGUg Y29uZnVzaW5nIGJlaGF2aW9yDQo+IG9mIHY0bF9ib3VuZF9hbGlnbl9pbWFnZSgpLg0KZG9uZQ0K PiANCj4gPiAgCW10a19qcGVnX2JvdW5kX2FsaWduX2ltYWdlKCZwaXhfbXAtPndpZHRoLCBNVEtf SlBFR19NSU5fV0lEVEgsDQo+ID4gIAkJCQkgICBNVEtfSlBFR19NQVhfV0lEVEgsIGZtdC0+aF9h bGlnbiwNCj4gPiAgCQkJCSAgICZwaXhfbXAtPmhlaWdodCwgTVRLX0pQRUdfTUlOX0hFSUdIVCwN Cj4gPiBAQCAtMzE2LDYgKzUyOCw3IEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfdHJ5X2ZtdF92aWRf Y2FwX21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiAgew0KPiA+ICAJ c3RydWN0IG10a19qcGVnX2N0eCAqY3R4ID0gbXRrX2pwZWdfZmhfdG9fY3R4KHByaXYpOw0KPiA+ ICAJc3RydWN0IG10a19qcGVnX2ZtdCAqZm10Ow0KPiA+ICsJc3RydWN0IG10a19qcGVnX2RldiAq anBlZyA9IGN0eC0+anBlZzsNCj4gPiAgDQo+ID4gIAlmbXQgPSBtdGtfanBlZ19maW5kX2Zvcm1h dChjdHgsIGYtPmZtdC5waXhfbXAucGl4ZWxmb3JtYXQsDQo+ID4gIAkJCQkgICBNVEtfSlBFR19G TVRfVFlQRV9DQVBUVVJFKTsNCj4gPiBAQCAtMzI5LDcgKzU0MiwxMiBAQCBzdGF0aWMgaW50IG10 a19qcGVnX3RyeV9mbXRfdmlkX2NhcF9tcGxhbmUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnBy aXYsDQo+ID4gIAkJIChmbXQtPmZvdXJjYyA+PiAxNiAmIDB4ZmYpLA0KPiA+ICAJCSAoZm10LT5m b3VyY2MgPj4gMjQgJiAweGZmKSk7DQo+ID4gIA0KPiA+IC0JcmV0dXJuIG10a19qcGVnX3RyeV9m bXRfbXBsYW5lKGYsIGZtdCwgY3R4LCBNVEtfSlBFR19GTVRfVFlQRV9DQVBUVVJFKTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4ganBlZy0+bW9kZSA9PSBNVEtfSlBFR19FTkMgPw0KPiA+ICsJICAgICAg IG10a19qcGVnX3RyeV9lbmNfZm10X21wbGFuZShmLCBmbXQsIGN0eCwNCj4gPiArCQkJCQkgICBN VEtfSlBFR19GTVRfVFlQRV9DQVBUVVJFKSA6DQo+ID4gKwkgICAgICAgbXRrX2pwZWdfdHJ5X2Rl Y19mbXRfbXBsYW5lKGYsIGZtdCwgY3R4LA0KPiA+ICsJCQkJCSAgIE1US19KUEVHX0ZNVF9UWVBF X0NBUFRVUkUpOw0KPiANCj4gVGhlIHRlcm5hcnkgb3BlcmF0b3IgaXNuJ3QgYSB1bml2ZXJzYWwg cmVwbGFjZW1lbnQgZm9yIGlmL2Vsc2UuIEl0IHNob3VsZA0KPiBiZSBsaW1pdGVkIHRvIHNpbXBs ZSBleHByZXNzaW9ucyBvbmx5LiBGdW5jdGlvbiBjYWxscyBkb24ndCBjb3VudCBhcyBzaW1wbGUN Cj4gZXhwcmVzc2lvbnMuDQp1c2VkIGlmL2Vsc2UgdG8gcmVwbGFjZSB0aGlzDQo+IA0KPiA+ICB9 DQo+ID4gIA0KPiA+ICBzdGF0aWMgaW50IG10a19qcGVnX3RyeV9mbXRfdmlkX291dF9tcGxhbmUo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+ID4gQEAgLTMzNyw2ICs1NTUsNyBAQCBz dGF0aWMgaW50IG10a19qcGVnX3RyeV9mbXRfdmlkX291dF9tcGxhbmUoc3RydWN0IGZpbGUgKmZp bGUsIHZvaWQgKnByaXYsDQo+ID4gIHsNCj4gPiAgCXN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCA9 IG10a19qcGVnX2ZoX3RvX2N0eChwcml2KTsNCj4gPiAgCXN0cnVjdCBtdGtfanBlZ19mbXQgKmZt dDsNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19kZXYgKmpwZWcgPSBjdHgtPmpwZWc7DQo+ID4gIA0K PiA+ICAJZm10ID0gbXRrX2pwZWdfZmluZF9mb3JtYXQoY3R4LCBmLT5mbXQucGl4X21wLnBpeGVs Zm9ybWF0LA0KPiA+ICAJCQkJICAgTVRLX0pQRUdfRk1UX1RZUEVfT1VUUFVUKTsNCj4gPiBAQCAt MzUwLDcgKzU2OSwxMiBAQCBzdGF0aWMgaW50IG10a19qcGVnX3RyeV9mbXRfdmlkX291dF9tcGxh bmUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+ID4gIAkJIChmbXQtPmZvdXJjYyA+ PiAxNiAmIDB4ZmYpLA0KPiA+ICAJCSAoZm10LT5mb3VyY2MgPj4gMjQgJiAweGZmKSk7DQo+ID4g IA0KPiA+IC0JcmV0dXJuIG10a19qcGVnX3RyeV9mbXRfbXBsYW5lKGYsIGZtdCwgY3R4LCBNVEtf SlBFR19GTVRfVFlQRV9PVVRQVVQpOw0KPiA+ICsJcmV0dXJuIGpwZWctPm1vZGUgPT0gTVRLX0pQ RUdfRU5DID8NCj4gPiArCSAgICAgICBtdGtfanBlZ190cnlfZW5jX2ZtdF9tcGxhbmUoZiwgZm10 LCBjdHgsDQo+ID4gKwkJCQkJICAgTVRLX0pQRUdfRk1UX1RZUEVfT1VUUFVUKSA6DQo+ID4gKwkg ICAgICAgbXRrX2pwZWdfdHJ5X2RlY19mbXRfbXBsYW5lKGYsIGZtdCwgY3R4LA0KPiA+ICsJCQkJ CSAgIE1US19KUEVHX0ZNVF9UWVBFX09VVFBVVCk7DQo+IA0KPiBEaXR0by4NCmRvbmUNCj4gDQo+ ID4gKw0KPiANCj4gVW5uZWNlc3NhcnkgYmxhbmsgbGluZS4NCmRlbGV0ZWQNCj4gDQo+ID4gIH0N Cj4gPiAgDQo+ID4gIHN0YXRpYyBpbnQgbXRrX2pwZWdfc19mbXRfbXBsYW5lKHN0cnVjdCBtdGtf anBlZ19jdHggKmN0eCwNCj4gPiBAQCAtNDU1LDExICs2NzksMTkgQEAgc3RhdGljIGludCBtdGtf anBlZ19nX3NlbGVjdGlvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiAgCQkJ CXN0cnVjdCB2NGwyX3NlbGVjdGlvbiAqcykNCj4gPiAgew0KPiA+ICAJc3RydWN0IG10a19qcGVn X2N0eCAqY3R4ID0gbXRrX2pwZWdfZmhfdG9fY3R4KHByaXYpOw0KPiA+ICsJc3RydWN0IG10a19q cGVnX2RldiAqanBlZyA9IGN0eC0+anBlZzsNCj4gPiAgDQo+ID4gLQlpZiAocy0+dHlwZSAhPSBW NEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpDQo+ID4gKwlpZiAoanBlZy0+bW9kZSA9PSBNVEtf SlBFR19FTkMgJiYgcy0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkNCj4gPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlpZiAoanBlZy0+bW9kZSA9PSBNVEtfSlBF R19ERUMgJiYNCj4gPiArCSAgICBzLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVS RSkNCj4gPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiAgDQo+ID4gIAlzd2l0Y2ggKHMtPnRhcmdl dCkgew0KPiA+ICsJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUDoNCj4gPiArCWNhc2UgVjRMMl9TRUxf VEdUX0NST1BfQk9VTkRTOg0KPiA+ICsJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9ERUZBVUxUOg0K PiA+ICAJY2FzZSBWNEwyX1NFTF9UR1RfQ09NUE9TRToNCj4gPiAgCWNhc2UgVjRMMl9TRUxfVEdU X0NPTVBPU0VfREVGQVVMVDoNCj4gPiAgCQlzLT5yLndpZHRoID0gY3R4LT5vdXRfcS53Ow0KPiA+ IEBAIC00ODQsMTEgKzcxNiwxNyBAQCBzdGF0aWMgaW50IG10a19qcGVnX3Nfc2VsZWN0aW9uKHN0 cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPiA+ICAJCQkJc3RydWN0IHY0bDJfc2VsZWN0 aW9uICpzKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHggPSBtdGtfanBl Z19maF90b19jdHgocHJpdik7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpqcGVnID0gY3R4 LT5qcGVnOw0KPiA+ICANCj4gPiAtCWlmIChzLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9f Q0FQVFVSRSkNCj4gPiArCWlmIChqcGVnLT5tb2RlID09IE1US19KUEVHX0VOQyAmJiBzLT50eXBl ICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0K PiA+ICsNCj4gPiArCWlmIChqcGVnLT5tb2RlID09IE1US19KUEVHX0RFQyAmJg0KPiA+ICsJICAg IHMtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQ0KPiA+ICAJCXJldHVybiAt RUlOVkFMOw0KPiA+ICANCj4gPiAgCXN3aXRjaCAocy0+dGFyZ2V0KSB7DQo+ID4gKwljYXNlIFY0 TDJfU0VMX1RHVF9DUk9QOg0KPiA+ICAJY2FzZSBWNEwyX1NFTF9UR1RfQ09NUE9TRToNCj4gPiAg CQlzLT5yLmxlZnQgPSAwOw0KPiA+ICAJCXMtPnIudG9wID0gMDsNCj4gPiBAQCAtNjU4LDEwICs4 OTYsOTIgQEAgc3RhdGljIHZvaWQgbXRrX2pwZWdfc2V0X3F1ZXVlX2RhdGEoc3RydWN0IG10a19q cGVnX2N0eCAqY3R4LA0KPiA+ICAJCSBwYXJhbS0+ZGVjX3csIHBhcmFtLT5kZWNfaCk7DQo+ID4g IH0NCj4gPiAgDQo+ID4gK3N0YXRpYyB2b2lkIG10a19qcGVnX3NldF9wYXJhbShzdHJ1Y3QgbXRr X2pwZWdfY3R4ICpjdHgsDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgbXRrX2pwZWdfZW5jX3BhcmFt ICpwYXJhbSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19qcGVnX3FfZGF0YSAqcV9kYXRhX3Ny YyA9ICZjdHgtPm91dF9xOw0KPiA+ICsJc3RydWN0IGpwZWdfZW5jX3BhcmFtICpqcGVnX3BhcmFt cyA9ICZjdHgtPmpwZWdfcGFyYW07DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpqcGVnID0g Y3R4LT5qcGVnOw0KPiA+ICsJdTMyIHdpZHRoX2V2ZW47DQo+ID4gKwl1MzIgaXNfNDIwOw0KPiA+ ICsJdTMyIHBhZGRpbmdfd2lkdGg7DQo+ID4gKwl1MzIgcGFkZGluZ19oZWlnaHQ7DQo+ID4gKw0K PiA+ICsJc3dpdGNoIChxX2RhdGFfc3JjLT5mbXQtPmZvdXJjYykgew0KPiA+ICsJY2FzZSBWNEwy X1BJWF9GTVRfWVVZVjoNCj4gPiArCQlwYXJhbS0+ZW5jX2Zvcm1hdCA9IEpQRUdfWVVWX0ZPUk1B VF9ZVVlWOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX1BJWF9GTVRfWVZZVToNCj4g PiArCQlwYXJhbS0+ZW5jX2Zvcm1hdCA9IEpQRUdfWVVWX0ZPUk1BVF9ZVllVOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJY2FzZSBWNEwyX1BJWF9GTVRfTlYxMk06DQo+ID4gKwkJcGFyYW0tPmVuY19m b3JtYXQgPSBKUEVHX1lVVl9GT1JNQVRfTlYxMjsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2Ug VjRMMl9QSVhfRk1UX05WMjFNOg0KPiA+ICsJCXBhcmFtLT5lbmNfZm9ybWF0ID0gSlBFR19ZVVZf Rk9STUFUX05WMTI7DQo+ID4gKwkJYnJlYWs7DQo+IA0KPiBDb3VsZCB3ZSBpbmNsdWRlIGVuY19m b3JtYXQgaW4gdGhlIG10a19qcGVnX2ZtdCBzdHJ1Y3QgYW5kIHRha2UgaXQgZnJvbQ0KPiB0aGVy ZSwgZWxpbWluYXRpbmcgdGhlIG5lZWQgZm9yIGEgc3dpdGNoIG92ZXIgYWxsIHN1cHBvcnRlZCBm b3JtYXRzPw0KdGhlIGVuY19mb3JtYXQgaXMganVzdCBmb3IgZW5jb2RlciBodyxidXQgbXRrX2pw ZWdfZm10X3N0cnVjdCBpcyBmb3INCmVuY29kZXIgYW5kIGRlY29kZXIsc28gSSBkaWRuJ3QgbW9k aWZ5IHRoaXMsIGJ1dCBJIGNhbmNlbGVkIHRoaXMNCmZ1bmN0aW9uIGFzIHlvdXIgYWR2aWNlDQo+ IA0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQl2NGwyX2VycigmanBlZy0+djRsMl9kZXYsICJVbnN1 cHBvcnQgZm91cmNjID0lZFxuIiwNCj4gPiArCQkJIHFfZGF0YV9zcmMtPmZtdC0+Zm91cmNjKTsN Cj4gPiArCQlicmVhazsNCj4gDQo+IElzbid0IHRoaXMgaW1wb3NzaWJsZT8NCnllcw0KPiANCj4g PiArCX0NCj4gPiArCXBhcmFtLT5lbmNfdyA9IHFfZGF0YV9zcmMtPnc7DQo+ID4gKwlwYXJhbS0+ ZW5jX2ggPSBxX2RhdGFfc3JjLT5oOw0KPiA+ICsNCj4gPiArCWlmIChqcGVnX3BhcmFtcy0+ZW5j X3F1YWxpdHkgPj0gOTcpDQo+ID4gKwkJcGFyYW0tPmVuY19xdWFsaXR5ID0gSlBFR19FTkNPREVf UVVBTElUWV9ROTc7DQo+ID4gKwllbHNlIGlmIChqcGVnX3BhcmFtcy0+ZW5jX3F1YWxpdHkgPj0g OTUpDQo+ID4gKwkJcGFyYW0tPmVuY19xdWFsaXR5ID0gSlBFR19FTkNPREVfUVVBTElUWV9ROTU7 DQo+IA0KPiBJJ20gd29uZGVyaW5nIGlmIHRoZSBhcHBsaWNhdGlvbiByZXF1ZXN0cyA5NiwgaXQg ZG9lc24ndCBleHBlY3QgdGhlIHF1YWxpdHkgdG8NCj4gYmUgX2F0X2xlYXN0XyA5Ni4gDQpvdXIg anBlZyBlbmMgaHcgZG8gbm90IHN1cHBvcnQgcXVhbGl0eSA5Nixvbmx5IHN1cHBvcnQgMTUga2lu ZHMgb2YgcXVhbnQNCnRhYmxlIGxpc3RlZCBoZXJlLCBzbyBpZiB0aGUgYXBwbGljYXRpb24gcmVx dWVzdHMgOTYsYSBuZWFyZXN0IGFuZA0KaGlnaGVzdCBxdWFsaXR5IHdpbGwgYmUgZ2l2ZW4uDQo+ IA0KPiA+ICsJZWxzZSBpZiAoanBlZ19wYXJhbXMtPmVuY19xdWFsaXR5ID49IDkyKQ0KPiA+ICsJ CXBhcmFtLT5lbmNfcXVhbGl0eSA9IEpQRUdfRU5DT0RFX1FVQUxJVFlfUTkyOw0KPiA+ICsJZWxz ZSBpZiAoanBlZ19wYXJhbXMtPmVuY19xdWFsaXR5ID49IDkwKQ0KPiA+ICsJCXBhcmFtLT5lbmNf cXVhbGl0eSA9IEpQRUdfRU5DT0RFX1FVQUxJVFlfUTkwOw0KPiA+ICsJZWxzZSBpZiAoanBlZ19w YXJhbXMtPmVuY19xdWFsaXR5ID49IDg3KQ0KPiA+ICsJCXBhcmFtLT5lbmNfcXVhbGl0eSA9IEpQ RUdfRU5DT0RFX1FVQUxJVFlfUTg3Ow0KPiA+ICsJZWxzZSBpZiAoanBlZ19wYXJhbXMtPmVuY19x dWFsaXR5ID49IDg0KQ0KPiA+ICsJCXBhcmFtLT5lbmNfcXVhbGl0eSA9IEpQRUdfRU5DT0RFX1FV QUxJVFlfUTg0Ow0KPiA+ICsJZWxzZSBpZiAoanBlZ19wYXJhbXMtPmVuY19xdWFsaXR5ID49IDgw KQ0KPiA+ICsJCXBhcmFtLT5lbmNfcXVhbGl0eSA9IEpQRUdfRU5DT0RFX1FVQUxJVFlfUTgwOw0K PiA+ICsJZWxzZSBpZiAoanBlZ19wYXJhbXMtPmVuY19xdWFsaXR5ID49IDc0KQ0KPiA+ICsJCXBh cmFtLT5lbmNfcXVhbGl0eSA9IEpQRUdfRU5DT0RFX1FVQUxJVFlfUTc0Ow0KPiA+ICsJZWxzZSBp ZiAoanBlZ19wYXJhbXMtPmVuY19xdWFsaXR5ID49IDY0KQ0KPiA+ICsJCXBhcmFtLT5lbmNfcXVh bGl0eSA9IEpQRUdfRU5DT0RFX1FVQUxJVFlfUTY0Ow0KPiA+ICsJZWxzZSBpZiAoanBlZ19wYXJh bXMtPmVuY19xdWFsaXR5ID49IDYwKQ0KPiA+ICsJCXBhcmFtLT5lbmNfcXVhbGl0eSA9IEpQRUdf RU5DT0RFX1FVQUxJVFlfUTYwOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXBhcmFtLT5lbmNfcXVhbGl0 eSA9IEpQRUdfRU5DT0RFX1FVQUxJVFlfUTQ4Ow0KPiANCj4gV2UgY291bGQgcHV0IHRoaXMgaW4g YSBzb3J0ZWQgYXJyYXkgb2YgPHF1YWxpdHkgcGFyYW10ZXIsIGhhcmR3YXJlIHZhbHVlPg0KPiBw YWlycyBhbmQgdXNlIGEgc2ltcGxlIGZvciBsb29wIGluc3RlYWQuDQpkb25lDQo+IA0KPiA+ICsN Cj4gPiArCXBhcmFtLT5lbmFibGVfZXhpZiA9IGpwZWdfcGFyYW1zLT5lbmFibGVfZXhpZjsNCj4g PiArCXBhcmFtLT5yZXN0YXJ0X2ludGVydmFsID0ganBlZ19wYXJhbXMtPnJlc3RhcnRfaW50ZXJ2 YWw7DQo+ID4gKw0KPiA+ICsJd2lkdGhfZXZlbiA9ICgocGFyYW0tPmVuY193ICsgMSkgPj4gMSkg PDwgMTsNCj4gDQo+IElzbid0IHRoaXMgZXF1aXZhbGVudCB0byByb3VuZF91cChwYXJhbS0+ZW5j X3csIDIpPw0KeWVzDQo+IA0KPiA+ICsJaXNfNDIwID0gKHBhcmFtLT5lbmNfZm9ybWF0ID09IEpQ RUdfWVVWX0ZPUk1BVF9OVjEyIHx8DQo+ID4gKwkJICBwYXJhbS0+ZW5jX2Zvcm1hdCA9PSBKUEVH X1lVVl9GT1JNQVRfTlYxMikgPyAxIDogMDsNCj4gPiArCXBhZGRpbmdfd2lkdGggPSBtdGtfanBl Z19hbGlnbihwYXJhbS0+ZW5jX3csIDE2KTsNCj4gPiArCXBhZGRpbmdfaGVpZ2h0ID0gbXRrX2pw ZWdfYWxpZ24ocGFyYW0tPmVuY19oLCBpc180MjAgPyAxNiA6IDgpOw0KPiA+ICsJaWYgKCFpc180 MjApDQo+ID4gKwkJd2lkdGhfZXZlbiA9IHdpZHRoX2V2ZW4gPDwgMTsNCj4gPiArDQo+ID4gKwlw YXJhbS0+aW1nX3N0cmlkZSA9IG10a19qcGVnX2FsaWduKHdpZHRoX2V2ZW4sIChpc180MjAgPyAx NiA6IDMyKSk7DQo+IA0KPiBJc24ndCB0aGlzIHRoZSBzYW1lIGFzIGJ5dGVzcGVybGluZSBpbiB0 aGUgdjRsMl9waXhfZm10X21wbGFuZSBzdHJ1Y3Q/DQp5ZXMNCj4gDQo+ID4gKwlwYXJhbS0+bWVt X3N0cmlkZSA9IG10a19qcGVnX2FsaWduKHdpZHRoX2V2ZW4sIChpc180MjAgPyAxNiA6IDMyKSk7 DQo+IA0KPiBXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBpbWdfc3RyaWRlIGFuZCBtZW1f c3RyaWRlPw0KDQpJbiB0aGVvcnksIG1lbV9zdHJpZGUgbmVlZCA+PSBpbWdfc3RyaWRlLGJ1dCB3 ZSB1c2UgdGhlIHNhbWUgaXMgb2sNCj4gDQo+ID4gKwlwYXJhbS0+dG90YWxfZW5jZHUgPQ0KPiA+ ICsJCSgocGFkZGluZ193aWR0aCA+PiA0KSAqIChwYWRkaW5nX2hlaWdodCA+PiAoaXNfNDIwID8g NCA6IDMpKSAqDQo+ID4gKwkJKGlzXzQyMCA/IDYgOiA0KSkgLSAxOw0KPiANCj4gVGhlIGNvbW1l bnQgYWJvdmUgdGhlIHN0cnVjdCBzYXlzIHRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiA4eDgg YmxvY2tzLg0KPiBXaHkgd291bGQgaXQgZGVwZW5kIG9uIHdoZXRoZXIgdGhlIGZvcm1hdCBpcyBZ VVYgNDoyOjA/IFNpbmNlIHdlIHNob3VsZA0KPiBoYXZlIGFscmVhZHkgYWxpZ25lZCB0aGUgd2lk dGggYW5kIGhlaWdodCBpbiB0cnlfZm10LCB0aGlzIHNob3VsZCBiZSBhcw0KPiBzaW1wbGUgYXMg KHdpZHRoIC8gOCkgKiAoaGVpZ2h0IC8gOCkuDQpiZWN1YXNlIHRoZSBpbWFnZSBzaXplIGlzIHcq aCoxLjUgZm9yIHl1djQyMCBmb3JtYXQsIGJ1dCB3KmgqMiBmb3INCnl1djQyMixzbyBmb3IgeXV2 NDIwOiB3XzE2LzgqaF8xNi84KjEuNS0xKGJlY2F1c2UgdGhlIGh3IHdpbGwgc3RhcnQgYXQNCm51 bWJlciAwKSwgeXV2NDIyOiB3XzMyLzgqaF84LzgqMi0xLHRoaXMgbnVtYmVyIGlzIGVxdWFsIHRv IG15IGNvZGUuDQo+IA0KPiA+ICsNCj4gPiArCXY0bDJfZGJnKDAsIDIsICZqcGVnLT52NGwyX2Rl diwgImZtdCAlZCwgdyxoICVkLCVkLCBlbmFibGVfZXhpZiAlZCwiLA0KPiA+ICsJCSAiZW5jX3F1 YWxpdHkgJWQsIHJlc3RhcnRfaW50ZXJ2YWwgJWQsaW1nX3N0cmlkZSAlZCwiLA0KPiA+ICsJCSAi bWVtX3N0cmlkZSAlZCx0b3RhbEVuY0R1ICVkXG4iLA0KPiA+ICsJCSBwYXJhbS0+ZW5jX2Zvcm1h dCwgcGFyYW0tPmVuY193LCBwYXJhbS0+ZW5jX2gsDQo+ID4gKwkJIHBhcmFtLT5lbmFibGVfZXhp ZiwgcGFyYW0tPmVuY19xdWFsaXR5LA0KPiA+ICsJCSBwYXJhbS0+cmVzdGFydF9pbnRlcnZhbCwg cGFyYW0tPmltZ19zdHJpZGUsDQo+ID4gKwkJIHBhcmFtLT5tZW1fc3RyaWRlLCBwYXJhbS0+dG90 YWxfZW5jZHUpOw0KPiA+ICt9DQo+IA0KPiBEbyB3ZSBuZWVkIHRoaXMgaW50ZXJtZWRpYXRlIHN0 ZXAsIHdpdGggYW4gaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIG9mDQo+IHRoZSBwYXJhbWV0 ZXJzPyBDb3VsZG4ndCB3ZSBqdXN0IHByb2dyYW0gdGhlIHJlZ2lzdGVycyBkaXJlY3RseSBiYXNl ZCBvbg0KPiB0aGUgb3JpZ2luYWwgVjRMMiB2YWx1ZXMsIGFzIG90aGVyIGRyaXZlcnMgbm9ybWFs bHkgZG8/DQpjYW5jZWxlZCB0aGlzDQo+IA0KPiA+ICsNCj4gPiAgc3RhdGljIHZvaWQgbXRrX2pw ZWdfYnVmX3F1ZXVlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4gPiAgew0KPiA+ICAJc3RydWN0 IG10a19qcGVnX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsNCj4g PiAgCXN0cnVjdCBtdGtfanBlZ19kZWNfcGFyYW0gKnBhcmFtOw0KPiA+ICsJc3RydWN0IG10a19q cGVnX2VuY19wYXJhbSAqZW5jX3BhcmFtOw0KPiA+ICAJc3RydWN0IG10a19qcGVnX2RldiAqanBl ZyA9IGN0eC0+anBlZzsNCj4gPiAgCXN0cnVjdCBtdGtfanBlZ19zcmNfYnVmICpqcGVnX3NyY19i dWY7DQo+ID4gIAlib29sIGhlYWRlcl92YWxpZDsNCj4gPiBAQCAtNjczLDI5ICs5OTMsNDUgQEAg c3RhdGljIHZvaWQgbXRrX2pwZWdfYnVmX3F1ZXVlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4g PiAgCQlnb3RvIGVuZDsNCj4gPiAgDQo+ID4gIAlqcGVnX3NyY19idWYgPSBtdGtfanBlZ192YjJf dG9fc3JjYnVmKHZiKTsNCj4gPiAtCXBhcmFtID0gJmpwZWdfc3JjX2J1Zi0+ZGVjX3BhcmFtOw0K PiA+IC0JbWVtc2V0KHBhcmFtLCAwLCBzaXplb2YoKnBhcmFtKSk7DQo+ID4gLQ0KPiA+IC0JaWYg KGpwZWdfc3JjX2J1Zi0+ZmxhZ3MgJiBNVEtfSlBFR19CVUZfRkxBR1NfTEFTVF9GUkFNRSkgew0K PiA+IC0JCXY0bDJfZGJnKDEsIGRlYnVnLCAmanBlZy0+djRsMl9kZXYsICJHb3QgZW9zXG4iKTsN Cj4gPiAtCQlnb3RvIGVuZDsNCj4gPiAtCX0NCj4gPiAtCWhlYWRlcl92YWxpZCA9IG10a19qcGVn X3BhcnNlKHBhcmFtLCAodTggKil2YjJfcGxhbmVfdmFkZHIodmIsIDApLA0KPiA+IC0JCQkJICAg ICAgdmIyX2dldF9wbGFuZV9wYXlsb2FkKHZiLCAwKSk7DQo+ID4gLQlpZiAoIWhlYWRlcl92YWxp ZCkgew0KPiA+IC0JCXY0bDJfZXJyKCZqcGVnLT52NGwyX2RldiwgIkhlYWRlciBpbnZhbGlkLlxu Iik7DQo+ID4gLQkJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsNCj4g PiAtCQlyZXR1cm47DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKGN0eC0+c3RhdGUgPT0gTVRL X0pQRUdfSU5JVCkgew0KPiA+IC0JCXN0cnVjdCB2YjJfcXVldWUgKmRzdF92cSA9IHY0bDJfbTJt X2dldF92cSgNCj4gPiAtCQkJY3R4LT5maC5tMm1fY3R4LCBWNEwyX0JVRl9UWVBFX1ZJREVPX0NB UFRVUkVfTVBMQU5FKTsNCj4gPiArCWlmIChqcGVnLT5tb2RlID09ICBNVEtfSlBFR19FTkMpIHsN Cj4gDQo+IG5pdDogRG91YmxlIHNwYWNlIGFmdGVyID09Lg0KZGVsZXRlZCBpdA0KPiANCj4gPiAr CQllbmNfcGFyYW0gPSAmanBlZ19zcmNfYnVmLT5lbmNfcGFyYW07DQo+ID4gKwkJbWVtc2V0KGVu Y19wYXJhbSwgMCwgc2l6ZW9mKCplbmNfcGFyYW0pKTsNCj4gPiArCQltdGtfanBlZ19zZXRfcGFy YW0oY3R4LCBlbmNfcGFyYW0pOw0KPiA+ICsJCWlmIChqcGVnX3NyY19idWYtPmZsYWdzICYgTVRL X0pQRUdfQlVGX0ZMQUdTX0xBU1RfRlJBTUUpIHsNCj4gPiArCQkJdjRsMl9kYmcoMSwgZGVidWcs ICZqcGVnLT52NGwyX2RldiwgIkdvdCBlb3MiKTsNCj4gPiArCQkJZ290byBlbmQ7DQo+IA0KPiBT aG91bGRuJ3Qgd2Ugc3RpbGwgY2hhbmdlIHRoZSBzdGF0ZSB0byBSVU5OSU5HPyBUaGUgbGFzdCBm cmFtZSBzdGlsbCBuZWVkcw0KPiB0byBiZSBlbmNvZGVkIGFuZCB0aGUgY29uZGl0aW9uIGZvciBn ZXR0aW5nIGJhY2sgdG8gdGhlIElOSVQgc3RhdGUgaXMNCj4gc3RvcHBpbmcgdGhlIHN0cmVhbWlu Zy4NCmRvbmUNCj4gPiArCQl9DQo+ID4gKwkJaWYgKGN0eC0+c3RhdGUgPT0gTVRLX0pQRUdfSU5J VCkNCj4gPiArCQkJY3R4LT5zdGF0ZSA9IE1US19KUEVHX1JVTk5JTkc7DQo+ID4gKwl9IGVsc2Ug ew0KPiA+ICsJCXBhcmFtID0gJmpwZWdfc3JjX2J1Zi0+ZGVjX3BhcmFtOw0KPiA+ICsJCW1lbXNl dChwYXJhbSwgMCwgc2l6ZW9mKCpwYXJhbSkpOw0KPiA+ICsNCj4gPiArCQlpZiAoanBlZ19zcmNf YnVmLT5mbGFncyAmIE1US19KUEVHX0JVRl9GTEFHU19MQVNUX0ZSQU1FKSB7DQo+ID4gKwkJCXY0 bDJfZGJnKDEsIGRlYnVnLCAmanBlZy0+djRsMl9kZXYsICJHb3QgZW9zXG4iKTsNCj4gPiArCQkJ Z290byBlbmQ7DQo+ID4gKwkJfQ0KPiA+ICsJCWhlYWRlcl92YWxpZCA9IG10a19qcGVnX3BhcnNl KHBhcmFtLA0KPiA+ICsJCQkJCSAgICAgICh1OCAqKXZiMl9wbGFuZV92YWRkcih2YiwgMCksDQo+ ID4gKwkJCQkJICAgICAgdmIyX2dldF9wbGFuZV9wYXlsb2FkKHZiLCAwKSk7DQo+ID4gKwkJaWYg KCFoZWFkZXJfdmFsaWQpIHsNCj4gPiArCQkJdjRsMl9lcnIoJmpwZWctPnY0bDJfZGV2LCAiSGVh ZGVyIGludmFsaWQuXG4iKTsNCj4gPiArCQkJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NU QVRFX0VSUk9SKTsNCj4gPiArCQkJcmV0dXJuOw0KPiA+ICsJCX0NCj4gPiAgDQo+ID4gLQkJbXRr X2pwZWdfcXVldWVfc3JjX2NoZ19ldmVudChjdHgpOw0KPiA+IC0JCW10a19qcGVnX3NldF9xdWV1 ZV9kYXRhKGN0eCwgcGFyYW0pOw0KPiA+IC0JCWN0eC0+c3RhdGUgPSB2YjJfaXNfc3RyZWFtaW5n KGRzdF92cSkgPw0KPiA+IC0JCQkJTVRLX0pQRUdfU09VUkNFX0NIQU5HRSA6IE1US19KUEVHX1JV Tk5JTkc7DQo+ID4gKwkJaWYgKGN0eC0+c3RhdGUgPT0gTVRLX0pQRUdfSU5JVCkgew0KPiA+ICsJ CQlzdHJ1Y3QgdmIyX3F1ZXVlICpkc3RfdnE7DQo+ID4gKw0KPiA+ICsJCQlkc3RfdnEgPSB2NGwy X20ybV9nZXRfdnENCj4gPiArCQkJCQkoY3R4LT5maC5tMm1fY3R4LA0KPiA+ICsJCQkJCSBWNEwy X0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKTsNCj4gPiArCQkJbXRrX2pwZWdfcXVldWVf c3JjX2NoZ19ldmVudChjdHgpOw0KPiA+ICsJCQltdGtfanBlZ19zZXRfcXVldWVfZGF0YShjdHgs IHBhcmFtKTsNCj4gPiArCQkJY3R4LT5zdGF0ZSA9IHZiMl9pc19zdHJlYW1pbmcoZHN0X3ZxKSA/ DQo+ID4gKwkJCQkJTVRLX0pQRUdfU09VUkNFX0NIQU5HRSA6DQo+ID4gKwkJCQkJTVRLX0pQRUdf UlVOTklORzsNCj4gPiArCQl9DQo+ID4gIAl9DQo+ID4gIGVuZDoNCj4gPiAgCXY0bDJfbTJtX2J1 Zl9xdWV1ZShjdHgtPmZoLm0ybV9jdHgsIHRvX3ZiMl92NGwyX2J1ZmZlcih2YikpOw0KPiA+IEBA IC03MzgsMTYgKzEwNzQsMTYgQEAgc3RhdGljIHZvaWQgbXRrX2pwZWdfc3RvcF9zdHJlYW1pbmco c3RydWN0IHZiMl9xdWV1ZSAqcSkNCj4gPiAgCSAqIHN1YnNhbXBsaW5nLiBVcGRhdGUgY2FwdHVy ZSBxdWV1ZSB3aGVuIHRoZSBzdHJlYW0gaXMgb2ZmLg0KPiA+ICAJICovDQo+ID4gIAlpZiAoY3R4 LT5zdGF0ZSA9PSBNVEtfSlBFR19TT1VSQ0VfQ0hBTkdFICYmDQo+ID4gLQkgICAgIVY0TDJfVFlQ RV9JU19PVVRQVVQocS0+dHlwZSkpIHsNCj4gPiArCSAgICAhVjRMMl9UWVBFX0lTX09VVFBVVChx LT50eXBlKSAmJg0KPiA+ICsJICAgIGN0eC0+anBlZy0+bW9kZSA9PSBNVEtfSlBFR19ERUMpIHsN Cj4gPiAgCQlzdHJ1Y3QgbXRrX2pwZWdfc3JjX2J1ZiAqc3JjX2J1ZjsNCj4gPiAgDQo+ID4gIAkJ dmIgPSB2NGwyX20ybV9uZXh0X3NyY19idWYoY3R4LT5maC5tMm1fY3R4KTsNCj4gPiAgCQlzcmNf YnVmID0gbXRrX2pwZWdfdmIyX3RvX3NyY2J1ZigmdmItPnZiMl9idWYpOw0KPiA+ICAJCW10a19q cGVnX3NldF9xdWV1ZV9kYXRhKGN0eCwgJnNyY19idWYtPmRlY19wYXJhbSk7DQo+ID4gIAkJY3R4 LT5zdGF0ZSA9IE1US19KUEVHX1JVTk5JTkc7DQo+ID4gLQl9IGVsc2UgaWYgKFY0TDJfVFlQRV9J U19PVVRQVVQocS0+dHlwZSkpIHsNCj4gPiArCX0gZWxzZSBpZiAoVjRMMl9UWVBFX0lTX09VVFBV VChxLT50eXBlKSkNCj4gPiAgCQljdHgtPnN0YXRlID0gTVRLX0pQRUdfSU5JVDsNCj4gPiAtCX0N Cj4gPiAgDQo+ID4gIAl3aGlsZSAoKHZiID0gbXRrX2pwZWdfYnVmX3JlbW92ZShjdHgsIHEtPnR5 cGUpKSkNCj4gPiAgCQl2NGwyX20ybV9idWZfZG9uZSh2YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7 DQo+ID4gQEAgLTgwMiw2ICsxMTM4LDM0IEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfc2V0X2RlY19k c3Qoc3RydWN0IG10a19qcGVnX2N0eCAqY3R4LA0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4g PiAgDQo+ID4gK3N0YXRpYyB2b2lkIG10a19qcGVnX3NldF9lbmNfZHN0KHN0cnVjdCBtdGtfanBl Z19jdHggKmN0eCwNCj4gPiArCQkJCSBzdHJ1Y3QgdmIyX2J1ZmZlciAqZHN0X2J1ZiwNCj4gPiAr CQkJCSBzdHJ1Y3QgbXRrX2pwZWdfZW5jX2JzICpicykNCj4gPiArew0KPiA+ICsJc3RydWN0IGpw ZWdfZW5jX3BhcmFtICpwID0gJmN0eC0+anBlZ19wYXJhbTsNCj4gPiArDQo+ID4gKwlicy0+ZG1h X2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcihkc3RfYnVmLCAwKSAmDQo+ID4g KwkJICAgICAgKH5KUEVHX0VOQ19EU1RfQUREUl9PRkZTRVRfTUFTSyk7DQo+IA0KPiBXb3VsZG4n dCB0aGUgaGFyZHdhcmUgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIG1lbW9yeSBiZWZvcmUgdGhlIGJ1 ZmZlciBpbg0KPiB0aGlzIGNhc2U/IFRoaXMgaXMgYSByZWNpcGUgZm9yIGEgZGlzYXN0ZXIgKGUu Zy4gdGhlIGhhcmR3YXJlIG92ZXJ3cml0aW5nDQo+IHNvbWUgbWVtb3J5IGl0IHNob3VsZG4ndCB0 b3VjaCkuDQpoYXZlIGRlbGV0ZWQgdGhpcw0KPiANCj4gQ291bGQgd2UgaW5zdGVhZCBjaGVjayB0 aGUgYnVmZmVyIGFkZHJlc3MgYWxpZ25tZW50IGluIC5idWZfcHJlcGFyZSBhbmQgZmFpbCBpZg0K PiBpdCdzIG5vdCBiaWcgZW5vdWdoPw0KPiANCj4gPiArCWJzLT5kbWFfYWRkcl9vZmZzZXQgPSBw LT5lbmFibGVfZXhpZiA/IE1US19KUEVHX0RFRkFVTFRfRVhJRl9TSVpFIDogMDsNCj4gPiArCWJz LT5kbWFfYWRkcl9vZmZzZXRtYXNrID0gYnMtPmRtYV9hZGRyICYgSlBFR19FTkNfRFNUX0FERFJf T0ZGU0VUX01BU0s7DQo+IA0KPiBXaGF0IGlzIHRoZSBtZWFuaW5nIG9mIHRoaXMgb2Zmc2V0IG1h c2s/DQpvdXIgYWN0dWFsIGRlc3RpbmF0aW9uIGFkZHJlc3MgPSBkZXN0aW5hdGlvbiBhZGRyZXNz ICsgb2Zmc2V0IGFkZHJlc3MrDQpkZXN0aW5hdGlvbiBhZGRyZXNzIG9mZnNldCBtYXNrLlRoZSBt YXNrIDA6Tm8gb2Zmc2V0LDF+MTU6b2Zmc2V0IGJ5dGUNCmZyb20gdGhlIDE2LWJ5dGUgYWxpZ25l ZA0KPiANCj4gPiArCWJzLT5zaXplID0gbXRrX2pwZWdfYWxpZ24odmIyX3BsYW5lX3NpemUoZHN0 X2J1ZiwgMCksIDEyOCk7DQo+IA0KPiBXb3VsZG4ndCB0aGlzIGxldCB0aGUgaGFyZHdhcmUgd3Jp dGUgYmV5b25kIHRoZSBidWZmZXIgaWYgdGhlIG9yaWdpbmFsIHNpemUNCj4gd2FzIG5vdCBhIG11 bHRpcGxlIG9mIDEyOD8gU2hvdWxkbid0IHdlIHJvdW5kX2Rvd24oKSBpbnN0ZWQ/DQpkb25lDQo+ IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfanBlZ19zZXRfZW5jX3NyYyhz dHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgsDQo+ID4gKwkJCQkgc3RydWN0IHZiMl9idWZmZXIgKnNy Y19idWYsDQo+ID4gKwkJCQkgc3RydWN0IG10a19qcGVnX2VuY19mYiAqZmIpDQo+ID4gK3sNCj4g PiArCWludCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBzcmNfYnVmLT5udW1fcGxh bmVzOyBpKyspIHsNCj4gPiArCQlmYi0+ZmJfYWRkcltpXS5kbWFfYWRkciA9DQo+ID4gKwkJCXZi Ml9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKHNyY19idWYsIGkpICsNCj4gPiArCQkJc3JjX2J1 Zi0+cGxhbmVzW2ldLmRhdGFfb2Zmc2V0Ow0KPiA+ICsJCWZiLT5mYl9hZGRyW2ldLnNpemUgPSAo c2l6ZV90KXNyY19idWYtPnBsYW5lc1tpXS5sZW5ndGggLQ0KPiANCj4gVGhlIHByb3BlciB3YXkg dG8gYWNjZXNzIHBsYW5lIGxlbmd0aCBpcyB0byBjYWxsIHZiMl9wbGFuZV9zaXplKCkuDQpkb25l DQo+IA0KPiA+ICsJCQkJICAgICAgc3JjX2J1Zi0+cGxhbmVzW2ldLmRhdGFfb2Zmc2V0Ow0KPiA+ ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgdm9pZCBtdGtfanBlZ19kZXZpY2VfcnVu KHZvaWQgKnByaXYpDQo+ID4gIHsNCj4gPiAgCXN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCA9IHBy aXY7DQo+ID4gQEAgLTgxMiw2ICsxMTc2LDggQEAgc3RhdGljIHZvaWQgbXRrX2pwZWdfZGV2aWNl X3J1bih2b2lkICpwcml2KQ0KPiA+ICAJc3RydWN0IG10a19qcGVnX3NyY19idWYgKmpwZWdfc3Jj X2J1ZjsNCj4gPiAgCXN0cnVjdCBtdGtfanBlZ19icyBiczsNCj4gPiAgCXN0cnVjdCBtdGtfanBl Z19mYiBmYjsNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19lbmNfYnMgZW5jX2JzOw0KPiA+ICsJc3Ry dWN0IG10a19qcGVnX2VuY19mYiBlbmNfZmI7DQo+ID4gIAlpbnQgaTsNCj4gPiAgDQo+ID4gIAlz cmNfYnVmID0gdjRsMl9tMm1fbmV4dF9zcmNfYnVmKGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gQEAg LTgyMiwzMCArMTE4OCw0NSBAQCBzdGF0aWMgdm9pZCBtdGtfanBlZ19kZXZpY2VfcnVuKHZvaWQg KnByaXYpDQo+ID4gIAkJZm9yIChpID0gMDsgaSA8IGRzdF9idWYtPnZiMl9idWYubnVtX3BsYW5l czsgaSsrKQ0KPiA+ICAJCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQoJmRzdF9idWYtPnZiMl9idWYs IGksIDApOw0KPiA+ICAJCWJ1Zl9zdGF0ZSA9IFZCMl9CVUZfU1RBVEVfRE9ORTsNCj4gPiAtCQln b3RvIGRlY19lbmQ7DQo+ID4gKwkJZ290byBkZXZpY2VfcnVuX2VuZDsNCj4gPiAgCX0NCj4gPiAg DQo+ID4gLQlpZiAobXRrX2pwZWdfY2hlY2tfcmVzb2x1dGlvbl9jaGFuZ2UoY3R4LCAmanBlZ19z cmNfYnVmLT5kZWNfcGFyYW0pKSB7DQo+ID4gLQkJbXRrX2pwZWdfcXVldWVfc3JjX2NoZ19ldmVu dChjdHgpOw0KPiA+IC0JCWN0eC0+c3RhdGUgPSBNVEtfSlBFR19TT1VSQ0VfQ0hBTkdFOw0KPiA+ IC0JCXY0bDJfbTJtX2pvYl9maW5pc2goanBlZy0+bTJtX2RldiwgY3R4LT5maC5tMm1fY3R4KTsN Cj4gPiAtCQlyZXR1cm47DQo+ID4gLQl9DQo+ID4gKwlpZiAoanBlZy0+bW9kZSA9PSBNVEtfSlBF R19FTkMpIHsNCj4gPiArCQltdGtfanBlZ19zZXRfZW5jX2RzdChjdHgsICZkc3RfYnVmLT52YjJf YnVmLCAmZW5jX2JzKTsNCj4gPiArCQltdGtfanBlZ19zZXRfZW5jX3NyYyhjdHgsICZzcmNfYnVm LT52YjJfYnVmLCAmZW5jX2ZiKTsNCj4gPiArDQo+ID4gKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmpw ZWctPmh3X2xvY2ssIGZsYWdzKTsNCj4gDQo+IERvIHdlIGFjdHVhbGx5IG5lZWQgdGhpcyBsb2Nr PyBkZXZpY2VfcnVuIGNhbiBiZSBvbmx5IGNhbGxlZCBvbmNlIGFuZCBvbmx5DQo+IGFmdGVyIHRo ZSBoYXJkd2FyZSBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBjdXJyZW50IGpvYi4NCmNhbmNlbGVk IHRoaXMNCj4gDQo+ID4gKwkJbXRrX2pwZWdfZW5jX3Jlc2V0KGpwZWctPnJlZ19iYXNlKTsNCj4g PiArCQltdGtfanBlZ19lbmNfc2V0X2NvbmZpZyhqcGVnLT5yZWdfYmFzZSwNCj4gPiArCQkJCQkm anBlZ19zcmNfYnVmLT5lbmNfcGFyYW0sICZlbmNfYnMsDQo+ID4gKwkJCQkJJmVuY19mYik7DQo+ ID4gKw0KPiA+ICsJCW10a19qcGVnX2VuY19zdGFydChqcGVnLT5yZWdfYmFzZSk7DQo+ID4gKwl9 IGVsc2Ugew0KPiA+ICsJCWlmIChtdGtfanBlZ19jaGVja19yZXNvbHV0aW9uX2NoYW5nZQ0KPiA+ ICsJCQkoY3R4LCAmanBlZ19zcmNfYnVmLT5kZWNfcGFyYW0pKSB7DQo+ID4gKwkJCW10a19qcGVn X3F1ZXVlX3NyY19jaGdfZXZlbnQoY3R4KTsNCj4gPiArCQkJY3R4LT5zdGF0ZSA9IE1US19KUEVH X1NPVVJDRV9DSEFOR0U7DQo+ID4gKwkJCXY0bDJfbTJtX2pvYl9maW5pc2goanBlZy0+bTJtX2Rl diwgY3R4LT5maC5tMm1fY3R4KTsNCj4gPiArCQkJcmV0dXJuOw0KPiA+ICsJCX0NCj4gPiAgDQo+ ID4gLQltdGtfanBlZ19zZXRfZGVjX3NyYyhjdHgsICZzcmNfYnVmLT52YjJfYnVmLCAmYnMpOw0K PiA+IC0JaWYgKG10a19qcGVnX3NldF9kZWNfZHN0KGN0eCwgJmpwZWdfc3JjX2J1Zi0+ZGVjX3Bh cmFtLCAmZHN0X2J1Zi0+dmIyX2J1ZiwgJmZiKSkNCj4gPiAtCQlnb3RvIGRlY19lbmQ7DQo+ID4g KwkJbXRrX2pwZWdfc2V0X2RlY19zcmMoY3R4LCAmc3JjX2J1Zi0+dmIyX2J1ZiwgJmJzKTsNCj4g PiArCQlpZiAobXRrX2pwZWdfc2V0X2RlY19kc3QoY3R4LCAmanBlZ19zcmNfYnVmLT5kZWNfcGFy YW0sDQo+ID4gKwkJCQkJICZkc3RfYnVmLT52YjJfYnVmLCAmZmIpKQ0KPiA+ICsJCQlnb3RvIGRl dmljZV9ydW5fZW5kOw0KPiA+ICANCj4gPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZqcGVnLT5od19s b2NrLCBmbGFncyk7DQo+ID4gLQltdGtfanBlZ19kZWNfcmVzZXQoanBlZy0+ZGVjX3JlZ19iYXNl KTsNCj4gPiAtCW10a19qcGVnX2RlY19zZXRfY29uZmlnKGpwZWctPmRlY19yZWdfYmFzZSwNCj4g PiAtCQkJCSZqcGVnX3NyY19idWYtPmRlY19wYXJhbSwgJmJzLCAmZmIpOw0KPiA+ICsJCXNwaW5f bG9ja19pcnFzYXZlKCZqcGVnLT5od19sb2NrLCBmbGFncyk7DQo+ID4gKwkJbXRrX2pwZWdfZGVj X3Jlc2V0KGpwZWctPnJlZ19iYXNlKTsNCj4gPiArCQltdGtfanBlZ19kZWNfc2V0X2NvbmZpZyhq cGVnLT5yZWdfYmFzZSwNCj4gPiArCQkJCQkmanBlZ19zcmNfYnVmLT5kZWNfcGFyYW0sICZicywg JmZiKTsNCj4gPiAgDQo+ID4gLQltdGtfanBlZ19kZWNfc3RhcnQoanBlZy0+ZGVjX3JlZ19iYXNl KTsNCj4gPiArCQltdGtfanBlZ19kZWNfc3RhcnQoanBlZy0+cmVnX2Jhc2UpOw0KPiA+ICsJfQ0K PiA+ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmanBlZy0+aHdfbG9jaywgZmxhZ3MpOw0KPiAN Cj4gSXQgaXMgYSBnb29kIHByYWN0aWNlIGZvciBzcGluX2xvY2sgYW5kIHNwaW5fdW5sb2NrIHRv IGJlIGluIHRoZSBzYW1lDQo+IHNjb3BlLCBmb3IgcmVhZGFiaWxpdHkgcmVhc29ucy4NCj4gDQo+ ID4gIAlyZXR1cm47DQo+ID4gIA0KPiA+IC1kZWNfZW5kOg0KPiA+ICtkZXZpY2VfcnVuX2VuZDoN Cj4gPiAgCXY0bDJfbTJtX3NyY19idWZfcmVtb3ZlKGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gIAl2 NGwyX20ybV9kc3RfYnVmX3JlbW92ZShjdHgtPmZoLm0ybV9jdHgpOw0KPiA+ICAJdjRsMl9tMm1f YnVmX2RvbmUoc3JjX2J1ZiwgYnVmX3N0YXRlKTsNCj4gPiBAQCAtOTA1LDMwICsxMjg2LDMwIEBA IHN0YXRpYyB2b2lkIG10a19qcGVnX2Nsa19vbihzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpqcGVnKQ0K PiA+ICAJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChqcGVnLT5sYXJiKTsNCj4gPiAgCWlmIChyZXQp DQo+ID4gIAkJZGV2X2VycihqcGVnLT5kZXYsICJtdGtfc21pX2xhcmJfZ2V0IGxhcmJ2ZGVjIGZh aWwgJWRcbiIsIHJldCk7DQo+ID4gLQljbGtfcHJlcGFyZV9lbmFibGUoanBlZy0+Y2xrX2pkZWNf c21pKTsNCj4gPiAtCWNsa19wcmVwYXJlX2VuYWJsZShqcGVnLT5jbGtfamRlYyk7DQo+ID4gKwlp ZiAoanBlZy0+bW9kZSA9PSBNVEtfSlBFR19ERUMpDQo+ID4gKwkJY2xrX3ByZXBhcmVfZW5hYmxl KGpwZWctPmNsa19qcGVnX3NtaSk7DQo+ID4gKwljbGtfcHJlcGFyZV9lbmFibGUoanBlZy0+Y2xr X2pwZWcpOw0KPiA+ICB9DQo+ID4gIA0KPiA+ICBzdGF0aWMgdm9pZCBtdGtfanBlZ19jbGtfb2Zm KHN0cnVjdCBtdGtfanBlZ19kZXYgKmpwZWcpDQo+ID4gIHsNCj4gPiAtCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShqcGVnLT5jbGtfamRlYyk7DQo+ID4gLQljbGtfZGlzYWJsZV91bnByZXBhcmUoanBl Zy0+Y2xrX2pkZWNfc21pKTsNCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShqcGVnLT5jbGtf anBlZyk7DQo+ID4gKwlpZiAoanBlZy0+bW9kZSA9PSBNVEtfSlBFR19ERUMpDQo+ID4gKwkJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGpwZWctPmNsa19qcGVnX3NtaSk7DQo+ID4gIAltdGtfc21pX2xh cmJfcHV0KGpwZWctPmxhcmIpOw0KPiA+ICB9DQo+ID4gIA0KPiA+IC1zdGF0aWMgaXJxcmV0dXJu X3QgbXRrX2pwZWdfZGVjX2lycShpbnQgaXJxLCB2b2lkICpwcml2KQ0KPiA+ICtzdGF0aWMgaXJx cmV0dXJuX3QgbXRrX2pwZWdfaXJxKGludCBpcnEsIHZvaWQgKnByaXYpDQo+ID4gIHsNCj4gPiAg CXN0cnVjdCBtdGtfanBlZ19kZXYgKmpwZWcgPSBwcml2Ow0KPiA+ICAJc3RydWN0IG10a19qcGVn X2N0eCAqY3R4Ow0KPiA+ICAJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqc3JjX2J1ZiwgKmRzdF9i dWY7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfc3JjX2J1ZiAqanBlZ19zcmNfYnVmOw0KPiA+ICAJ ZW51bSB2YjJfYnVmZmVyX3N0YXRlIGJ1Zl9zdGF0ZSA9IFZCMl9CVUZfU1RBVEVfRVJST1I7DQo+ ID4gLQl1MzIJZGVjX2lycV9yZXQ7DQo+ID4gLQl1MzIgZGVjX3JldDsNCj4gPiArCXUzMglpcnFf cmV0Ow0KPiANCj4gSW4gdGhlIGtlcm5lbCBjb2Rpbmcgc3R5bGUsIHR5cGUgaXMgc2VwYXJhdGVk IGZyb20gdmFyaWFibGUgbmFtZSB3aXRoIGENCj4gc2luZ2xlIHNwYWNlLg0KZG9uZQ0KPiANCj4g PiArCXUzMiByZXQsIHJlc3VsdF9zaXplOw0KPiA+ICAJaW50IGk7DQo+ID4gIA0KPiA+IC0JZGVj X3JldCA9IG10a19qcGVnX2RlY19nZXRfaW50X3N0YXR1cyhqcGVnLT5kZWNfcmVnX2Jhc2UpOw0K PiA+IC0JZGVjX2lycV9yZXQgPSBtdGtfanBlZ19kZWNfZW51bV9yZXN1bHQoZGVjX3JldCk7DQo+ ID4gIAljdHggPSB2NGwyX20ybV9nZXRfY3Vycl9wcml2KGpwZWctPm0ybV9kZXYpOw0KPiA+ICAJ aWYgKCFjdHgpIHsNCj4gPiAgCQl2NGwyX2VycigmanBlZy0+djRsMl9kZXYsICJDb250ZXh0IGlz IE5VTExcbiIpOw0KPiA+IEBAIC05MzksMzkgKzEzMjAsMTA3IEBAIHN0YXRpYyBpcnFyZXR1cm5f dCBtdGtfanBlZ19kZWNfaXJxKGludCBpcnEsIHZvaWQgKnByaXYpDQo+ID4gIAlkc3RfYnVmID0g djRsMl9tMm1fZHN0X2J1Zl9yZW1vdmUoY3R4LT5maC5tMm1fY3R4KTsNCj4gPiAgCWpwZWdfc3Jj X2J1ZiA9IG10a19qcGVnX3ZiMl90b19zcmNidWYoJnNyY19idWYtPnZiMl9idWYpOw0KPiA+ICAN Cj4gPiAtCWlmIChkZWNfaXJxX3JldCA+PSBNVEtfSlBFR19ERUNfUkVTVUxUX1VOREVSRkxPVykN Cj4gPiAtCQltdGtfanBlZ19kZWNfcmVzZXQoanBlZy0+ZGVjX3JlZ19iYXNlKTsNCj4gPiArCWlm IChqcGVnLT5tb2RlID09IE1US19KUEVHX0VOQykgew0KPiA+ICsJCXJldCA9IG10a19qcGVnX2Vu Y19nZXRfaW50X3N0YXR1cyhqcGVnLT5yZWdfYmFzZSk7DQo+ID4gKwkJaXJxX3JldCA9IG10a19q cGVnX2VuY19lbnVtX3Jlc3VsdChqcGVnLT5yZWdfYmFzZSwgcmV0LA0KPiA+ICsJCQkJCQkgICAm cmVzdWx0X3NpemUpOw0KPiA+ICANCj4gPiAtCWlmIChkZWNfaXJxX3JldCAhPSBNVEtfSlBFR19E RUNfUkVTVUxUX0VPRl9ET05FKSB7DQo+ID4gLQkJZGV2X2VycihqcGVnLT5kZXYsICJkZWNvZGUg ZmFpbGVkXG4iKTsNCj4gPiAtCQlnb3RvIGRlY19lbmQ7DQo+ID4gLQl9DQo+ID4gKwkJaWYgKGly cV9yZXQgPj0gTVRLX0pQRUdfRU5DX1JFU1VMVF9TVEFMTCkNCj4gPiArCQkJbXRrX2pwZWdfZW5j X3Jlc2V0KGpwZWctPnJlZ19iYXNlKTsNCj4gPiArDQo+ID4gKwkJaWYgKGlycV9yZXQgIT0gTVRL X0pQRUdfRU5DX1JFU1VMVF9ET05FKSB7DQo+ID4gKwkJCWRldl9lcnIoanBlZy0+ZGV2LCAiZW5j b2RlIGZhaWxlZFxuIik7DQo+ID4gKwkJCWdvdG8gaXJxX2VuZDsNCj4gPiArCQl9DQo+ID4gKw0K PiA+ICsJCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCgmZHN0X2J1Zi0+dmIyX2J1ZiwgMCwNCj4gPiAr CQkJCSAgICAgIHJlc3VsdF9zaXplKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJcmV0ID0gbXRr X2pwZWdfZGVjX2dldF9pbnRfc3RhdHVzKGpwZWctPnJlZ19iYXNlKTsNCj4gPiArCQlpcnFfcmV0 ID0gbXRrX2pwZWdfZGVjX2VudW1fcmVzdWx0KHJldCk7DQo+ID4gIA0KPiA+IC0JZm9yIChpID0g MDsgaSA8IGRzdF9idWYtPnZiMl9idWYubnVtX3BsYW5lczsgaSsrKQ0KPiA+IC0JCXZiMl9zZXRf cGxhbmVfcGF5bG9hZCgmZHN0X2J1Zi0+dmIyX2J1ZiwgaSwNCj4gPiAtCQkJCSAgICAgIGpwZWdf c3JjX2J1Zi0+ZGVjX3BhcmFtLmNvbXBfc2l6ZVtpXSk7DQo+ID4gKwkJaWYgKGlycV9yZXQgPj0g TVRLX0pQRUdfREVDX1JFU1VMVF9VTkRFUkZMT1cpDQo+ID4gKwkJCW10a19qcGVnX2RlY19yZXNl dChqcGVnLT5yZWdfYmFzZSk7DQo+ID4gKw0KPiA+ICsJCWlmIChpcnFfcmV0ICE9IE1US19KUEVH X0RFQ19SRVNVTFRfRU9GX0RPTkUpIHsNCj4gPiArCQkJZGV2X2VycihqcGVnLT5kZXYsICJkZWNv ZGUgZmFpbGVkXG4iKTsNCj4gPiArCQkJZ290byBpcnFfZW5kOw0KPiA+ICsJCX0NCj4gPiArDQo+ ID4gKwkJZm9yIChpID0gMDsgaSA8IGRzdF9idWYtPnZiMl9idWYubnVtX3BsYW5lczsgaSsrKQ0K PiA+ICsJCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQNCj4gPiArCQkJCSgmZHN0X2J1Zi0+dmIyX2J1 ZiwgaSwNCj4gPiArCQkJCSBqcGVnX3NyY19idWYtPmRlY19wYXJhbS5jb21wX3NpemVbaV0pOw0K PiA+ICsJfQ0KPiA+ICANCj4gPiAgCWJ1Zl9zdGF0ZSA9IFZCMl9CVUZfU1RBVEVfRE9ORTsNCj4g PiAgDQo+ID4gLWRlY19lbmQ6DQo+ID4gK2lycV9lbmQ6DQo+ID4gIAl2NGwyX20ybV9idWZfZG9u ZShzcmNfYnVmLCBidWZfc3RhdGUpOw0KPiA+ICAJdjRsMl9tMm1fYnVmX2RvbmUoZHN0X2J1Ziwg YnVmX3N0YXRlKTsNCj4gPiAgCXY0bDJfbTJtX2pvYl9maW5pc2goanBlZy0+bTJtX2RldiwgY3R4 LT5maC5tMm1fY3R4KTsNCj4gPiAgCXJldHVybiBJUlFfSEFORExFRDsNCj4gPiAgfQ0KPiA+ICAN Cj4gPiAtc3RhdGljIHZvaWQgbXRrX2pwZWdfc2V0X2RlZmF1bHRfcGFyYW1zKHN0cnVjdCBtdGtf anBlZ19jdHggKmN0eCkNCj4gPiArc3RhdGljIHZvaWQgbXRrX2pwZWdfc2V0X2VuY19kZWZhdWx0 X3BhcmFtcyhzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBt dGtfanBlZ19xX2RhdGEgKnEgPSAmY3R4LT5vdXRfcTsNCj4gPiArCWludCBhbGlnbl93LCBhbGln bl9oOw0KPiA+ICsNCj4gPiArCWN0eC0+ZmguY3RybF9oYW5kbGVyID0gJmN0eC0+Y3RybF9oZGw7 DQo+ID4gKw0KPiA+ICsJY3R4LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsDQo+ ID4gKwljdHgtPnljYmNyX2VuYyA9IFY0TDJfWUNCQ1JfRU5DX0RFRkFVTFQ7DQo+ID4gKwljdHgt PnF1YW50aXphdGlvbiA9IFY0TDJfUVVBTlRJWkFUSU9OX0RFRkFVTFQ7DQo+ID4gKwljdHgtPnhm ZXJfZnVuYyA9IFY0TDJfWEZFUl9GVU5DX0RFRkFVTFQ7DQo+ID4gKw0KPiA+ICsJcS0+dyA9IE1U S19KUEVHX01JTl9XSURUSDsNCj4gPiArCXEtPmggPSBNVEtfSlBFR19NSU5fSEVJR0hUOw0KPiA+ ICsNCj4gPiArCXEtPmZtdCA9IG10a19qcGVnX2ZpbmRfZm9ybWF0KGN0eCwgVjRMMl9QSVhfRk1U X1lVWVYsDQo+ID4gKwkJCQkgICAgICBNVEtfSlBFR19GTVRfVFlQRV9PVVRQVVQpOw0KPiA+ICsN Cj4gPiArCWFsaWduX3cgPSBxLT53Ow0KPiA+ICsJYWxpZ25faCA9IHEtPmg7DQo+ID4gKwlhbGln bl93ID0gcm91bmRfdXAoYWxpZ25fdywgMik7DQo+ID4gKwl2NGxfYm91bmRfYWxpZ25faW1hZ2Uo JmFsaWduX3csIE1US19KUEVHX01JTl9XSURUSCwgTVRLX0pQRUdfTUFYX1dJRFRILA0KPiA+ICsJ CQkgICAgICA1LCAmYWxpZ25faCwgTVRLX0pQRUdfTUlOX0hFSUdIVCwNCj4gPiArCQkJICAgICAg TVRLX0pQRUdfTUFYX0hFSUdIVCwgMywgMCk7DQo+ID4gKwlhbGlnbl93ID0gYWxpZ25fdyA8PCAx Ow0KPiA+ICsNCj4gPiArCWlmIChhbGlnbl93IDwgTVRLX0pQRUdfTUlOX1dJRFRIICYmDQo+ID4g KwkgICAgKGFsaWduX3cgKyAzMikgPD0gTVRLX0pQRUdfTUFYX1dJRFRIKQ0KPiA+ICsJCWFsaWdu X3cgKz0gMzI7DQo+ID4gKwlpZiAoYWxpZ25faCA8IE1US19KUEVHX01JTl9IRUlHSFQgJiYNCj4g PiArCSAgICAoYWxpZ25faCArIDgpIDw9IE1US19KUEVHX01BWF9IRUlHSFQpDQo+ID4gKwkJYWxp Z25faCArPSA4Ow0KPiA+ICsNCj4gPiArCXEtPnNpemVpbWFnZVswXSA9IGFsaWduX3cgKiBhbGln bl9oOw0KPiA+ICsJcS0+Ynl0ZXNwZXJsaW5lWzBdID0gYWxpZ25fdzsNCj4gPiArDQo+ID4gKwlx ID0gJmN0eC0+Y2FwX3E7DQo+ID4gKwlxLT53ID0gTVRLX0pQRUdfTUlOX1dJRFRIOw0KPiA+ICsJ cS0+aCA9IE1US19KUEVHX01JTl9IRUlHSFQ7DQo+ID4gKwlxLT5mbXQgPSBtdGtfanBlZ19maW5k X2Zvcm1hdChjdHgsIFY0TDJfUElYX0ZNVF9KUEVHLA0KPiA+ICsJCQkJICAgICAgTVRLX0pQRUdf Rk1UX1RZUEVfQ0FQVFVSRSk7DQo+ID4gKwlxLT5ieXRlc3BlcmxpbmVbMF0gPSAwOw0KPiA+ICsJ cS0+c2l6ZWltYWdlWzBdID0gTVRLX0pQRUdfREVGQVVMVF9TSVpFSU1BR0U7DQo+ID4gK30NCj4g DQo+IENvdWxkIHdlIGp1c3QgY3JlYXRlIGFuIGFyYml0cmFyeSB2NGwyX3BpeF9mb3JtYXRfbXBs YW5lIHN0cnVjdCBhbmQgY2FsbA0KPiBzX2ZtdCBpbnN0ZWFkPyBJbiBnZW5lcmFsLCBhbGwgb2Yg dGhlIGNvbnN0YW50IHZhbHVlcyBhbmQgYWxpZ25tZW50cyBzaG91bGQNCj4gYmUgYWxyZWFkeSBl bnN1cmVkIGJ5IHRyeV9mbXQsIHNvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHJlZHVuZGFudC4N CmlmIGNhbmNlbCB0aGlzIGZ1bmN0aW9uLHRoZSB2NGwyLWNvbXBsaWFuY2UgdGVzdCB3aWxsIGZh aWwNCj4gDQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfanBlZ19zZXRfZGVjX2RlZmF1bHRf cGFyYW1zKHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCkNCj4gPiAgew0KPiA+ICAJc3RydWN0IG10 a19qcGVnX3FfZGF0YSAqcSA9ICZjdHgtPm91dF9xOw0KPiA+ICAJaW50IGk7DQo+ID4gIA0KPiA+ ICsJY3R4LT5maC5jdHJsX2hhbmRsZXIgPSAmY3R4LT5jdHJsX2hkbDsNCj4gPiArDQo+ID4gIAlj dHgtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywNCj4gPiAgCWN0eC0+eWNiY3Jf ZW5jID0gVjRMMl9ZQ0JDUl9FTkNfREVGQVVMVDsNCj4gPiAgCWN0eC0+cXVhbnRpemF0aW9uID0g VjRMMl9RVUFOVElaQVRJT05fREVGQVVMVDsNCj4gPiAgCWN0eC0+eGZlcl9mdW5jID0gVjRMMl9Y RkVSX0ZVTkNfREVGQVVMVDsNCj4gPiAgDQo+ID4gIAlxLT5mbXQgPSBtdGtfanBlZ19maW5kX2Zv cm1hdChjdHgsIFY0TDJfUElYX0ZNVF9KUEVHLA0KPiA+IC0JCQkJCSAgICAgIE1US19KUEVHX0ZN VF9UWVBFX09VVFBVVCk7DQo+ID4gKwkJCQkgICAgICBNVEtfSlBFR19GTVRfVFlQRV9PVVRQVVQp Ow0KPiA+ICAJcS0+dyA9IE1US19KUEVHX01JTl9XSURUSDsNCj4gPiAgCXEtPmggPSBNVEtfSlBF R19NSU5fSEVJR0hUOw0KPiA+ICAJcS0+Ynl0ZXNwZXJsaW5lWzBdID0gMDsNCj4gPiBAQCAtOTc5 LDcgKzE0MjgsNyBAQCBzdGF0aWMgdm9pZCBtdGtfanBlZ19zZXRfZGVmYXVsdF9wYXJhbXMoc3Ry dWN0IG10a19qcGVnX2N0eCAqY3R4KQ0KPiA+ICANCj4gPiAgCXEgPSAmY3R4LT5jYXBfcTsNCj4g PiAgCXEtPmZtdCA9IG10a19qcGVnX2ZpbmRfZm9ybWF0KGN0eCwgVjRMMl9QSVhfRk1UX1lVVjQy ME0sDQo+ID4gLQkJCQkJICAgICAgTVRLX0pQRUdfRk1UX1RZUEVfQ0FQVFVSRSk7DQo+ID4gKwkJ CQkgICAgICBNVEtfSlBFR19GTVRfVFlQRV9DQVBUVVJFKTsNCj4gPiAgCXEtPncgPSBNVEtfSlBF R19NSU5fV0lEVEg7DQo+ID4gIAlxLT5oID0gTVRLX0pQRUdfTUlOX0hFSUdIVDsNCj4gPiAgDQo+ ID4gQEAgLTEwMjAsNyArMTQ2OSwxNSBAQCBzdGF0aWMgaW50IG10a19qcGVnX29wZW4oc3RydWN0 IGZpbGUgKmZpbGUpDQo+ID4gIAkJZ290byBlcnJvcjsNCj4gPiAgCX0NCj4gPiAgDQo+ID4gLQlt dGtfanBlZ19zZXRfZGVmYXVsdF9wYXJhbXMoY3R4KTsNCj4gPiArCXJldCA9IG10a19qcGVnX2N0 cmxzX3NldHVwKGN0eCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJdjRsMl9lcnIoJmpwZWct PnY0bDJfZGV2LCAiRmFpbGVkIHRvIHNldHVwIGNvbnRyb2xzKCkgKCVkKVxuIiwNCj4gPiArCQkJ IHJldCk7DQo+ID4gKwkJZ290byBlcnJvcjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlqcGVnLT5t b2RlID09IE1US19KUEVHX0VOQyA/IG10a19qcGVnX3NldF9lbmNfZGVmYXVsdF9wYXJhbXMoY3R4 KSA6DQo+ID4gKwkJCQkgICAgIG10a19qcGVnX3NldF9kZWNfZGVmYXVsdF9wYXJhbXMoY3R4KTsN Cj4gDQo+IEFzIG1lbnRpb25lZCBiZWZvcmUsIHRoaXMga2luZCBvZiB1c2FnZSBvZiB0aGUgdGVy bmFyeSBvcGVyYXRvciBpcyBnZW5lcmFseQ0KPiBkaXNjb3VyYWdlZCwgYmVjYXVzZSBpdCBtYWtl cyB0aGUgY29kZSBkaWZmaWN1bHQgdG8gcmVhZC4NCmRvbmUNCj4gDQo+ID4gIAltdXRleF91bmxv Y2soJmpwZWctPmxvY2spOw0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIA0KPiA+IEBAIC0xMDQwLDYg KzE0OTcsNyBAQCBzdGF0aWMgaW50IG10a19qcGVnX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUp DQo+ID4gIA0KPiA+ICAJbXV0ZXhfbG9jaygmanBlZy0+bG9jayk7DQo+ID4gIAl2NGwyX20ybV9j dHhfcmVsZWFzZShjdHgtPmZoLm0ybV9jdHgpOw0KPiA+ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJl ZSgmY3R4LT5jdHJsX2hkbCk7DQo+ID4gIAl2NGwyX2ZoX2RlbCgmY3R4LT5maCk7DQo+ID4gIAl2 NGwyX2ZoX2V4aXQoJmN0eC0+ZmgpOw0KPiA+ICAJa2ZyZWUoY3R4KTsNCj4gPiBAQCAtMTA2NCw2 ICsxNTIyLDcgQEAgc3RhdGljIGludCBtdGtfanBlZ19jbGtfaW5pdChzdHJ1Y3QgbXRrX2pwZWdf ZGV2ICpqcGVnKQ0KPiA+ICAJbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUoanBlZy0+ZGV2LT5vZl9u b2RlLCAibWVkaWF0ZWssbGFyYiIsIDApOw0KPiA+ICAJaWYgKCFub2RlKQ0KPiA+ICAJCXJldHVy biAtRUlOVkFMOw0KPiA+ICsNCj4gDQo+IFVubmVjZXNzYXJ5IGNoYW5nZT8NCnllcw0KPiANCj4g PiAgCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5vZGUpOw0KPiA+ICAJaWYgKFdBUk5f T04oIXBkZXYpKSB7DQo+ID4gIAkJb2Zfbm9kZV9wdXQobm9kZSk7DQo+ID4gQEAgLTEwNzMsMTkg KzE1MzIsMjQgQEAgc3RhdGljIGludCBtdGtfanBlZ19jbGtfaW5pdChzdHJ1Y3QgbXRrX2pwZWdf ZGV2ICpqcGVnKQ0KPiA+ICANCj4gPiAgCWpwZWctPmxhcmIgPSAmcGRldi0+ZGV2Ow0KPiA+ICAN Cj4gPiAtCWpwZWctPmNsa19qZGVjID0gZGV2bV9jbGtfZ2V0KGpwZWctPmRldiwgImpwZ2RlYyIp Ow0KPiA+IC0JaWYgKElTX0VSUihqcGVnLT5jbGtfamRlYykpDQo+ID4gLQkJcmV0dXJuIFBUUl9F UlIoanBlZy0+Y2xrX2pkZWMpOw0KPiA+ICsJaWYgKGpwZWctPm1vZGUgPT0gTVRLX0pQRUdfRU5D KSB7DQo+ID4gKwkJanBlZy0+Y2xrX2pwZWcgPSBkZXZtX2Nsa19nZXQoanBlZy0+ZGV2LCAianBn ZW5jIik7DQo+ID4gKwkJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhqcGVnLT5jbGtfanBlZyk7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJanBlZy0+Y2xrX2pwZWcgPSBkZXZtX2Nsa19nZXQoanBlZy0+ ZGV2LCAianBnZGVjIik7DQo+ID4gKwlpZiAoSVNfRVJSKGpwZWctPmNsa19qcGVnKSkNCj4gPiAr CQlyZXR1cm4gUFRSX0VSUihqcGVnLT5jbGtfanBlZyk7DQo+ID4gIA0KPiA+IC0JanBlZy0+Y2xr X2pkZWNfc21pID0gZGV2bV9jbGtfZ2V0KGpwZWctPmRldiwgImpwZ2RlYy1zbWkiKTsNCj4gPiAt CXJldHVybiBQVFJfRVJSX09SX1pFUk8oanBlZy0+Y2xrX2pkZWNfc21pKTsNCj4gPiArCWpwZWct PmNsa19qcGVnX3NtaSA9IGRldm1fY2xrX2dldChqcGVnLT5kZXYsICJqcGdkZWMtc21pIik7DQo+ ID4gKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGpwZWctPmNsa19qcGVnX3NtaSk7DQo+ID4gIH0N Cj4gPiAgDQo+ID4gIHN0YXRpYyBpbnQgbXRrX2pwZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikNCj4gPiAgew0KPiA+ICAJc3RydWN0IG10a19qcGVnX2RldiAqanBlZzsNCj4g PiAgCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0KPiA+IC0JaW50IGRlY19pcnE7DQo+ID4gKwlpbnQg anBlZ19pcnE7DQo+ID4gIAlpbnQgcmV0Ow0KPiA+ICANCj4gPiAgCWpwZWcgPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpqcGVnKSwgR0ZQX0tFUk5FTCk7DQo+ID4gQEAgLTEwOTUs MjggKzE1NTksMjYgQEAgc3RhdGljIGludCBtdGtfanBlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQ0KPiA+ICAJbXV0ZXhfaW5pdCgmanBlZy0+bG9jayk7DQo+ID4gIAlzcGlu X2xvY2tfaW5pdCgmanBlZy0+aHdfbG9jayk7DQo+ID4gIAlqcGVnLT5kZXYgPSAmcGRldi0+ZGV2 Ow0KPiA+ICsJanBlZy0+bW9kZSA9IChlbnVtIG10a19qcGVnX21vZGUpb2ZfZGV2aWNlX2dldF9t YXRjaF9kYXRhKGpwZWctPmRldik7DQo+ID4gIA0KPiA+ICAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4gPiAtCWpwZWctPmRlY19yZWdfYmFz ZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOw0KPiA+IC0JaWYgKElT X0VSUihqcGVnLT5kZWNfcmVnX2Jhc2UpKSB7DQo+ID4gLQkJcmV0ID0gUFRSX0VSUihqcGVnLT5k ZWNfcmVnX2Jhc2UpOw0KPiA+ICsJanBlZy0+cmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3Vy Y2UoJnBkZXYtPmRldiwgcmVzKTsNCj4gPiArCWlmIChJU19FUlIoanBlZy0+cmVnX2Jhc2UpKSB7 DQo+ID4gKwkJcmV0ID0gUFRSX0VSUihqcGVnLT5yZWdfYmFzZSk7DQo+ID4gIAkJcmV0dXJuIHJl dDsNCj4gPiAgCX0NCj4gPiAgDQo+ID4gLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRl diwgSU9SRVNPVVJDRV9JUlEsIDApOw0KPiA+IC0JZGVjX2lycSA9IHBsYXRmb3JtX2dldF9pcnEo cGRldiwgMCk7DQo+ID4gLQlpZiAoIXJlcyB8fCBkZWNfaXJxIDwgMCkgew0KPiA+IC0JCWRldl9l cnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgZGVjX2lycSAlZC5cbiIsIGRlY19pcnEpOw0K PiA+IC0JCXJldCA9IC1FSU5WQUw7DQo+ID4gLQkJcmV0dXJuIHJldDsNCj4gPiArCWpwZWdfaXJx ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCj4gPiArCWlmIChqcGVnX2lycSA8IDApIHsN Cj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGpwZWdfaXJxICVkLlxu IiwganBlZ19pcnEpOw0KPiA+ICsJCXJldHVybiBqcGVnX2lycTsNCj4gPiAgCX0NCj4gPiAgDQo+ ID4gLQlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGRlY19pcnEsIG10a19qcGVn X2RlY19pcnEsIDAsDQo+ID4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGpw ZWdfaXJxLCBtdGtfanBlZ19pcnEsIDAsDQo+ID4gIAkJCSAgICAgICBwZGV2LT5uYW1lLCBqcGVn KTsNCj4gPiAgCWlmIChyZXQpIHsNCj4gPiAtCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQg dG8gcmVxdWVzdCBkZWNfaXJxICVkICglZClcbiIsDQo+ID4gLQkJCWRlY19pcnEsIHJldCk7DQo+ ID4gLQkJcmV0ID0gLUVJTlZBTDsNCj4gDQo+IFRoaXMgcmVtb3ZhbCBvZiByZXQgYXNzaWdubWVu dCBsb29rcyBsaWtlIGEgc2VwYXJhdGUgZml4IHRoYXQgc2hvdWxkIGJlDQo+IGRvbmUgaW4gaXRz IG93biBwYXRjaC4NCnRoaXMgY2hhbmdlIGlzIGJlY2F1c2Ugb2YgdGhlIGFkZGluZyBvZiBqcGVn IGVuYyBkcml2ZXIsbm90IHRoZSBvcmlnbmFsDQpkcml2ZXInIHF1ZXN0aW9uLCBzaG91bGQgSSBt b3ZlIGl0IHRvIHRoZSBvcmlnbmFsIGRyaXZlcidzIHBhdGNoPw0KPiANCj4gPiArCQlkZXZfZXJy KCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBqcGVnX2lycSAlZCAoJWQpXG4iLA0KPiA+ ICsJCQlqcGVnX2lycSwgcmV0KTsNCj4gPiAgCQlnb3RvIGVycl9yZXFfaXJxOw0KPiA+ICAJfQ0K PiA+ICANCj4gPiBAQCAtMTE0MCwzMyArMTYwMiwzNSBAQCBzdGF0aWMgaW50IG10a19qcGVnX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gIAkJZ290byBlcnJfbTJtX2lu aXQ7DQo+ID4gIAl9DQo+ID4gIA0KPiA+IC0JanBlZy0+ZGVjX3ZkZXYgPSB2aWRlb19kZXZpY2Vf YWxsb2MoKTsNCj4gPiAtCWlmICghanBlZy0+ZGVjX3ZkZXYpIHsNCj4gPiArCWpwZWctPnZmZF9q cGVnID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7DQo+ID4gKwlpZiAoIWpwZWctPnZmZF9qcGVnKSB7 DQo+ID4gIAkJcmV0ID0gLUVOT01FTTsNCj4gPiAtCQlnb3RvIGVycl9kZWNfdmRldl9hbGxvYzsN Cj4gPiArCQlnb3RvIGVycl92ZmRfanBlZ19hbGxvYzsNCj4gPiAgCX0NCj4gPiAtCXNucHJpbnRm KGpwZWctPmRlY192ZGV2LT5uYW1lLCBzaXplb2YoanBlZy0+ZGVjX3ZkZXYtPm5hbWUpLA0KPiA+ IC0JCSAiJXMtZGVjIiwgTVRLX0pQRUdfTkFNRSk7DQo+ID4gLQlqcGVnLT5kZWNfdmRldi0+Zm9w cyA9ICZtdGtfanBlZ19mb3BzOw0KPiA+IC0JanBlZy0+ZGVjX3ZkZXYtPmlvY3RsX29wcyA9ICZt dGtfanBlZ19pb2N0bF9vcHM7DQo+ID4gLQlqcGVnLT5kZWNfdmRldi0+bWlub3IgPSAtMTsNCj4g PiAtCWpwZWctPmRlY192ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7DQo+ID4g LQlqcGVnLT5kZWNfdmRldi0+bG9jayA9ICZqcGVnLT5sb2NrOw0KPiA+IC0JanBlZy0+ZGVjX3Zk ZXYtPnY0bDJfZGV2ID0gJmpwZWctPnY0bDJfZGV2Ow0KPiA+IC0JanBlZy0+ZGVjX3ZkZXYtPnZm bF9kaXIgPSBWRkxfRElSX00yTTsNCj4gPiAtCWpwZWctPmRlY192ZGV2LT5kZXZpY2VfY2FwcyA9 IFY0TDJfQ0FQX1NUUkVBTUlORyB8DQo+ID4gKwlzbnByaW50ZihqcGVnLT52ZmRfanBlZy0+bmFt ZSwgc2l6ZW9mKGpwZWctPnZmZF9qcGVnLT5uYW1lKSwNCj4gPiArCQkgIiVzLSVzIiwgTVRLX0pQ RUdfTkFNRSwNCj4gPiArCQkganBlZy0+bW9kZSA9PSBNVEtfSlBFR19FTkMgPyAiZW5jIiA6ICJk ZWMiKTsNCj4gPiArCWpwZWctPnZmZF9qcGVnLT5mb3BzID0gJm10a19qcGVnX2ZvcHM7DQo+ID4g KwlqcGVnLT52ZmRfanBlZy0+aW9jdGxfb3BzID0gJm10a19qcGVnX2lvY3RsX29wczsNCj4gPiAr CWpwZWctPnZmZF9qcGVnLT5taW5vciA9IC0xOw0KPiA+ICsJanBlZy0+dmZkX2pwZWctPnJlbGVh c2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsNCj4gPiArCWpwZWctPnZmZF9qcGVnLT5sb2NrID0g JmpwZWctPmxvY2s7DQo+ID4gKwlqcGVnLT52ZmRfanBlZy0+djRsMl9kZXYgPSAmanBlZy0+djRs Ml9kZXY7DQo+ID4gKwlqcGVnLT52ZmRfanBlZy0+dmZsX2RpciA9IFZGTF9ESVJfTTJNOw0KPiA+ ICsJanBlZy0+dmZkX2pwZWctPmRldmljZV9jYXBzID0gVjRMMl9DQVBfU1RSRUFNSU5HIHwNCj4g PiAgCQkJCSAgICAgIFY0TDJfQ0FQX1ZJREVPX00yTV9NUExBTkU7DQo+ID4gIA0KPiA+IC0JcmV0 ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGpwZWctPmRlY192ZGV2LCBWRkxfVFlQRV9HUkFCQkVS LCAzKTsNCj4gPiArCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShqcGVnLT52ZmRfanBlZywg VkZMX1RZUEVfR1JBQkJFUiwgLTEpOw0KPiANCj4gVGhlIGNoYW5nZSBmcm9tIDMgdG8gLTEgYWxz byBsb29rcyBsaWtlIHNvbWV0aGluZyBmb3IgYSBzZXBhcmF0ZSBwYXRjaC4NCnNhbWUgYXMgdGhl IGFib3ZlIHJlcGx5DQo+IA0KPiA+ICAJaWYgKHJldCkgew0KPiA+ICAJCXY0bDJfZXJyKCZqcGVn LT52NGwyX2RldiwgIkZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOw0KPiA+IC0J CWdvdG8gZXJyX2RlY192ZGV2X3JlZ2lzdGVyOw0KPiA+ICsJCWdvdG8gZXJyX3ZmZF9qcGVnX3Jl Z2lzdGVyOw0KPiA+ICAJfQ0KPiA+ICANCj4gPiAtCXZpZGVvX3NldF9kcnZkYXRhKGpwZWctPmRl Y192ZGV2LCBqcGVnKTsNCj4gPiArCXZpZGVvX3NldF9kcnZkYXRhKGpwZWctPnZmZF9qcGVnLCBq cGVnKTsNCj4gPiAgCXY0bDJfaW5mbygmanBlZy0+djRsMl9kZXYsDQo+ID4gLQkJICAiZGVjb2Rl ciBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQgKCVkLCVkKVxuIiwNCj4gPiAtCQkg IGpwZWctPmRlY192ZGV2LT5udW0sIFZJREVPX01BSk9SLCBqcGVnLT5kZWNfdmRldi0+bWlub3Ip Ow0KPiA+ICsJCSAgImpwZWcgZGV2aWNlICVkIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkICgl ZCwlZClcbiIsDQo+ID4gKwkJICBqcGVnLT5tb2RlLCBqcGVnLT52ZmRfanBlZy0+bnVtLCBWSURF T19NQUpPUiwNCj4gPiArCQkgIGpwZWctPnZmZF9qcGVnLT5taW5vcik7DQo+ID4gIA0KPiA+ICAJ cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwganBlZyk7DQo+ID4gIA0KPiA+IEBAIC0xMTc0LDEw ICsxNjM4LDEwIEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikNCj4gPiAgDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgDQo+ID4gLWVycl9kZWNf dmRldl9yZWdpc3RlcjoNCj4gPiAtCXZpZGVvX2RldmljZV9yZWxlYXNlKGpwZWctPmRlY192ZGV2 KTsNCj4gPiArZXJyX3ZmZF9qcGVnX3JlZ2lzdGVyOg0KPiA+ICsJdmlkZW9fZGV2aWNlX3JlbGVh c2UoanBlZy0+dmZkX2pwZWcpOw0KPiA+ICANCj4gPiAtZXJyX2RlY192ZGV2X2FsbG9jOg0KPiA+ ICtlcnJfdmZkX2pwZWdfYWxsb2M6DQo+ID4gIAl2NGwyX20ybV9yZWxlYXNlKGpwZWctPm0ybV9k ZXYpOw0KPiA+ICANCj4gPiAgZXJyX20ybV9pbml0Og0KPiA+IEBAIC0xMTk3LDggKzE2NjEsOCBA QCBzdGF0aWMgaW50IG10a19qcGVnX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQ0KPiA+ICAJc3RydWN0IG10a19qcGVnX2RldiAqanBlZyA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOw0KPiA+ICANCj4gPiAgCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCj4g PiAtCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGpwZWctPmRlY192ZGV2KTsNCj4gPiAtCXZpZGVv X2RldmljZV9yZWxlYXNlKGpwZWctPmRlY192ZGV2KTsNCj4gPiArCXZpZGVvX3VucmVnaXN0ZXJf ZGV2aWNlKGpwZWctPnZmZF9qcGVnKTsNCj4gPiArCXZpZGVvX2RldmljZV9yZWxlYXNlKGpwZWct PnZmZF9qcGVnKTsNCj4gPiAgCXY0bDJfbTJtX3JlbGVhc2UoanBlZy0+bTJtX2Rldik7DQo+ID4g IAl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZqcGVnLT52NGwyX2Rldik7DQo+ID4gIA0KPiA+IEBA IC0xMjA5LDcgKzE2NzMsMTEgQEAgc3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBtdGtfanBlZ19w bV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiAgew0KPiA+ICAJc3RydWN0IG10a19q cGVnX2RldiAqanBlZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICANCj4gPiAtCW10a19q cGVnX2RlY19yZXNldChqcGVnLT5kZWNfcmVnX2Jhc2UpOw0KPiA+ICsJaWYgKGpwZWctPm1vZGUg PT0gTVRLX0pQRUdfRU5DKQ0KPiA+ICsJCW10a19qcGVnX2VuY19yZXNldChqcGVnLT5yZWdfYmFz ZSk7DQo+ID4gKwllbHNlDQo+ID4gKwkJbXRrX2pwZWdfZGVjX3Jlc2V0KGpwZWctPnJlZ19iYXNl KTsNCj4gPiArDQo+ID4gIAltdGtfanBlZ19jbGtfb2ZmKGpwZWcpOw0KPiA+ICANCj4gPiAgCXJl dHVybiAwOw0KPiA+IEBAIC0xMjIwLDcgKzE2ODgsMTAgQEAgc3RhdGljIF9fbWF5YmVfdW51c2Vk IGludCBtdGtfanBlZ19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICAJc3RydWN0 IG10a19qcGVnX2RldiAqanBlZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICANCj4gPiAg CW10a19qcGVnX2Nsa19vbihqcGVnKTsNCj4gPiAtCW10a19qcGVnX2RlY19yZXNldChqcGVnLT5k ZWNfcmVnX2Jhc2UpOw0KPiA+ICsJaWYgKGpwZWctPm1vZGUgPT0gTVRLX0pQRUdfRU5DKQ0KPiA+ ICsJCW10a19qcGVnX2VuY19yZXNldChqcGVnLT5yZWdfYmFzZSk7DQo+ID4gKwllbHNlDQo+ID4g KwkJbXRrX2pwZWdfZGVjX3Jlc2V0KGpwZWctPnJlZ19iYXNlKTsNCj4gPiAgDQo+ID4gIAlyZXR1 cm4gMDsNCj4gPiAgfQ0KPiA+IEBAIC0xMjU2LDExICsxNzI3LDE1IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgZGV2X3BtX29wcyBtdGtfanBlZ19wbV9vcHMgPSB7DQo+ID4gIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19qcGVnX21hdGNoW10gPSB7DQo+ID4gIAl7DQo+ID4gIAkJ LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWpwZ2RlYyIsDQo+ID4gLQkJLmRhdGEgICAg ICAgPSBOVUxMLA0KPiA+ICsJCS5kYXRhICAgICAgID0gKHZvaWQgKilNVEtfSlBFR19ERUMsDQo+ ID4gIAl9LA0KPiA+ICAJew0KPiA+ICAJCS5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcwMS1q cGdkZWMiLA0KPiA+IC0JCS5kYXRhICAgICAgID0gTlVMTCwNCj4gPiArCQkuZGF0YSAgICAgICA9 ICh2b2lkICopTVRLX0pQRUdfREVDLA0KPiA+ICsJfSwNCj4gPiArCXsNCj4gPiArCQkuY29tcGF0 aWJsZSA9ICJtZWRpYXRlayxtdGstanBnZW5jIiwNCj4gPiArCQkuZGF0YSAgICAgICA9ICh2b2lk ICopTVRLX0pQRUdfRU5DLA0KPiA+ICAJfSwNCj4gPiAgCXt9LA0KPiA+ICB9Ow0KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2NvcmUuaCBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfY29yZS5oDQo+ID4gaW5k ZXggOTk5YmQxNDI3ODA5Li4zNWRkYzY0YWY1NTQgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19jb3JlLmgNCj4gPiArKysgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2NvcmUuaA0KPiA+IEBAIC0zLDYgKzMs NyBAQA0KPiA+ICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgTWVkaWFUZWsgSW5jLg0KPiA+ICAgKiBB dXRob3I6IE1pbmcgSHNpdSBUc2FpIDxtaW5naHNpdS50c2FpQG1lZGlhdGVrLmNvbT4NCj4gPiAg ICogICAgICAgICBSaWNrIENoYW5nIDxyaWNrLmNoYW5nQG1lZGlhdGVrLmNvbT4NCj4gPiArICog ICAgICAgICBYaWEgSmlhbmcgPHhpYS5qaWFuZ0BtZWRpYXRlay5jb20+DQo+ID4gICAqLw0KPiA+ ICANCj4gPiAgI2lmbmRlZiBfTVRLX0pQRUdfQ09SRV9IDQo+ID4gQEAgLTE3LDIzICsxOCw3NyBA QA0KPiA+ICANCj4gPiAgI2RlZmluZSBNVEtfSlBFR19GTVRfRkxBR19ERUNfT1VUUFVUCUJJVCgw KQ0KPiA+ICAjZGVmaW5lIE1US19KUEVHX0ZNVF9GTEFHX0RFQ19DQVBUVVJFCUJJVCgxKQ0KPiA+ ICsjZGVmaW5lIE1US19KUEVHX0ZNVF9GTEFHX0VOQ19PVVRQVVQJQklUKDIpDQo+ID4gKyNkZWZp bmUgTVRLX0pQRUdfRk1UX0ZMQUdfRU5DX0NBUFRVUkUJQklUKDMpDQo+ID4gIA0KPiA+ICAjZGVm aW5lIE1US19KUEVHX0ZNVF9UWVBFX09VVFBVVAkxDQo+ID4gICNkZWZpbmUgTVRLX0pQRUdfRk1U X1RZUEVfQ0FQVFVSRQkyDQo+ID4gIA0KPiA+IC0jZGVmaW5lIE1US19KUEVHX01JTl9XSURUSAkz Mg0KPiA+IC0jZGVmaW5lIE1US19KUEVHX01JTl9IRUlHSFQJMzINCj4gPiAtI2RlZmluZSBNVEtf SlBFR19NQVhfV0lEVEgJODE5Mg0KPiA+IC0jZGVmaW5lIE1US19KUEVHX01BWF9IRUlHSFQJODE5 Mg0KPiA+ICsjZGVmaW5lIE1US19KUEVHX01JTl9XSURUSAkzMlUNCj4gPiArI2RlZmluZSBNVEtf SlBFR19NSU5fSEVJR0hUCTMyVQ0KPiA+ICsjZGVmaW5lIE1US19KUEVHX01BWF9XSURUSAk2NTUz NVUNCj4gPiArI2RlZmluZSBNVEtfSlBFR19NQVhfSEVJR0hUCTY1NTM1VQ0KPiANCj4gV2h5IGlz IGl0IG9rYXkgdG8gY2hhbmdlIHRoaXMgZnJvbSA4MTkyIHRvIDY1NTM1Pw0Kb3VyIGh3IHN1cHBv cnQgbWF4IHdpZHRoL2hlaWdodCB0byA2NTUzNSANCj4gDQo+ID4gIA0KPiA+ICAjZGVmaW5lIE1U S19KUEVHX0RFRkFVTFRfU0laRUlNQUdFCSgxICogMTAyNCAqIDEwMjQpDQo+ID4gKyNkZWZpbmUg TVRLX0pQRUdfREVGQVVMVF9FWElGX1NJWkUJKDY0ICogMTAyNCkNCj4gPiAgDQo+ID4gKyNkZWZp bmUgTVRLX0pQRUdfRU5DT0RFCQkwDQo+ID4gKyNkZWZpbmUgTVRLX0pQRUdfREVDT0RFCQkxDQo+ IA0KPiBUaGVzZSB0d28gYXJlIHVudXNlZC4NCmRlbGV0ZWQgaXQNCj4gDQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogZW51bSBtdGtfanBlZ19jdHhfc3RhdGUgLSBjb250ZXggc3RhdGUgb2YganBl Zw0KPiA+ICsgKi8NCj4gPiAgZW51bSBtdGtfanBlZ19jdHhfc3RhdGUgew0KPiA+ICAJTVRLX0pQ RUdfSU5JVCA9IDAsDQo+ID4gIAlNVEtfSlBFR19SVU5OSU5HLA0KPiA+ICAJTVRLX0pQRUdfU09V UkNFX0NIQU5HRSwNCj4gPiAgfTsNCj4gPiAgDQo+ID4gKy8qKg0KPiA+ICsgKiBlbnVtIG10a19q cGVnX21vZGUgLSBtb2RlIG9mIGpwZWcNCj4gPiArICovDQo+ID4gK2VudW0gbXRrX2pwZWdfbW9k ZSB7DQo+ID4gKwlNVEtfSlBFR19FTkMsDQo+ID4gKwlNVEtfSlBFR19ERUMsDQo+ID4gK307DQo+ IA0KPiBQZXJoYXBzIHdlIGNvdWxkIGp1c3QgaGF2ZSBhIGJvb2wgaXNfZW5jb2Rlcj8NCj4gDQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogZW51bSBqcGVnX2VuY195dXZfZm10IC0geXV2IGZvcm1h dCBvZiBqcGVnIGVuYw0KPiA+ICsgKi8NCj4gPiArZW51bSBqcGVnX2VuY195dXZfZm10IHsNCj4g PiArCUpQRUdfWVVWX0ZPUk1BVF9ZVVlWID0gMCwNCj4gPiArCUpQRUdfWVVWX0ZPUk1BVF9ZVllV ID0gMSwNCj4gPiArCUpQRUdfWVVWX0ZPUk1BVF9OVjEyID0gMiwNCj4gPiArCUpFUEdfWVVWX0ZP Uk1BVF9OVjIxID0gMywNCj4gPiArfTsNCj4gDQo+ICNkZWZpbmUgbWFjcm9zIGFyZSB0eXBpY2Fs bHkgdXNlZCBmb3IgaGFyZHdhcmUgdmFsdWVzLg0KZG9uZQ0KPiANCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBlbnVtIEpQRUdfRU5DT0RFX1FVQUxJVFlfRU5VTSAtIG51bWJlciBvZiBqcGVnIGVu Y29kZXIgcXVhbGl0eQ0KPiA+ICsgKi8NCj4gPiArZW51bSBKUEVHX0VOQ09ERV9RVUFMSVRZX0VO VU0gew0KPiA+ICsJSlBFR19FTkNPREVfUVVBTElUWV9RNjAgPSAweDAsDQo+ID4gKwlKUEVHX0VO Q09ERV9RVUFMSVRZX1E4MCA9IDB4MSwNCj4gPiArCUpQRUdfRU5DT0RFX1FVQUxJVFlfUTkwID0g MHgyLA0KPiA+ICsJSlBFR19FTkNPREVfUVVBTElUWV9ROTUgPSAweDMsDQo+ID4gKw0KPiA+ICsJ SlBFR19FTkNPREVfUVVBTElUWV9RMzkgPSAweDQsDQo+ID4gKwlKUEVHX0VOQ09ERV9RVUFMSVRZ X1E2OCA9IDB4NSwNCj4gPiArCUpQRUdfRU5DT0RFX1FVQUxJVFlfUTg0ID0gMHg2LA0KPiA+ICsJ SlBFR19FTkNPREVfUVVBTElUWV9ROTIgPSAweDcsDQo+ID4gKw0KPiA+ICsJSlBFR19FTkNPREVf UVVBTElUWV9RNDggPSAweDgsDQo+IA0KPiBObyBlbnVtIGZvciAweDk/DQp5ZXMsIHRoZXNlIHZh bHVlcyBhcmUgZGVmaW5lZCBhY2NvcmRpbmcgYnkgaHcNCj4gDQo+ID4gKwlKUEVHX0VOQ09ERV9R VUFMSVRZX1E3NCA9IDB4QSwNCj4gPiArCUpQRUdfRU5DT0RFX1FVQUxJVFlfUTg3ID0gMHhCLA0K PiA+ICsNCj4gPiArCUpQRUdfRU5DT0RFX1FVQUxJVFlfUTM0ID0gMHhDLA0KPiANCj4gTm8gZW51 bSBmb3IgMHhkPw0KeWVzDQo+IA0KPiA+ICsJSlBFR19FTkNPREVfUVVBTElUWV9RNjQgPSAweEUs DQo+ID4gKwlKUEVHX0VOQ09ERV9RVUFMSVRZX1E4MiA9IDB4RiwNCj4gPiArDQo+ID4gKwlKUEVH X0VOQ09ERV9RVUFMSVRZX1E5NyA9IDB4MTAsDQo+ID4gKw0KPiA+ICsJSlBFR19FTkNPREVfUVVB TElUWV9BTEwgPSAweEZGRkZGRkZGDQo+IA0KPiBXaGF0IGlzIHRoZSBtZWFuaW5nIG9mIHRoaXMg dmFsdWU/DQptZWFucyB0aGUgcXVhbnRpemF0aW9uIHRhYmxlIHNldHRpbmcgZm9yIGZyYW1lDQo+ IA0KPiA+ICt9Ow0KPiANCj4gU2luY2UgdGhlc2UgYXJlIGhhcmR3YXJlIHJlZ2lzdGVyIHZhbHVl cywgI2RlZmluZSBtYWNyb3MgYXJlIHByZWZlcnJlZC4NCmRvbmUNCj4gDQo+ID4gKw0KPiA+ICAv KioNCj4gPiAgICogc3RydWN0IG10X2pwZWcgLSBKUEVHIElQIGFic3RyYWN0aW9uDQo+ID4gICAq IEBsb2NrOgkJdGhlIG11dGV4IHByb3RlY3RpbmcgdGhpcyBzdHJ1Y3R1cmUNCj4gPiBAQCAtNDMs MTEgKzk4LDEyIEBAIGVudW0gbXRrX2pwZWdfY3R4X3N0YXRlIHsNCj4gPiAgICogQHY0bDJfZGV2 OgkJdjRsMiBkZXZpY2UgZm9yIG1lbTJtZW0gbW9kZQ0KPiA+ICAgKiBAbTJtX2RldjoJCXY0bDIg bWVtMm1lbSBkZXZpY2UgZGF0YQ0KPiA+ICAgKiBAYWxsb2NfY3R4OgkJdmlkZW9idWYyIG1lbW9y eSBhbGxvY2F0b3IncyBjb250ZXh0DQo+ID4gLSAqIEBkZWNfdmRldjoJCXZpZGVvIGRldmljZSBu b2RlIGZvciBkZWNvZGVyIG1lbTJtZW0gbW9kZQ0KPiA+IC0gKiBAZGVjX3JlZ19iYXNlOglKUEVH IHJlZ2lzdGVycyBtYXBwaW5nDQo+ID4gLSAqIEBjbGtfamRlYzoJCUpQRUcgaHcgd29ya2luZyBj bG9jaw0KPiA+IC0gKiBAY2xrX2pkZWNfc21pOglKUEVHIFNNSSBidXMgY2xvY2sNCj4gPiArICog QHZmZF9qcGVnOgkJdmlkZW8gZGV2aWNlIG5vZGUgZm9yIGpwZWcgbWVtMm1lbSBtb2RlDQo+ID4g KyAqIEByZWdfYmFzZToJCUpQRUcgcmVnaXN0ZXJzIG1hcHBpbmcNCj4gPiArICogQGNsa19qcGVn OgkJSlBFRyBodyB3b3JraW5nIGNsb2NrDQo+ID4gKyAqIEBjbGtfanBlZ19zbWk6CUpQRUcgU01J IGJ1cyBjbG9jaw0KPiA+ICAgKiBAbGFyYjoJCVNNSSBkZXZpY2UNCj4gPiArICogQG1vZGU6CQlj b21wcmVzc2lvbiAoZW5jb2RlKSBvcGVyYXRpb24gb3IgZGVjb21wcmVzc2lvbiAoZGVjb2RlKQ0K PiA+ICAgKi8NCj4gPiAgc3RydWN0IG10a19qcGVnX2RldiB7DQo+ID4gIAlzdHJ1Y3QgbXV0ZXgJ CWxvY2s7DQo+ID4gQEAgLTU3LDExICsxMTMsMTIgQEAgc3RydWN0IG10a19qcGVnX2RldiB7DQo+ ID4gIAlzdHJ1Y3QgdjRsMl9kZXZpY2UJdjRsMl9kZXY7DQo+ID4gIAlzdHJ1Y3QgdjRsMl9tMm1f ZGV2CSptMm1fZGV2Ow0KPiA+ICAJdm9pZAkJCSphbGxvY19jdHg7DQo+ID4gLQlzdHJ1Y3Qgdmlk ZW9fZGV2aWNlCSpkZWNfdmRldjsNCj4gPiAtCXZvaWQgX19pb21lbQkJKmRlY19yZWdfYmFzZTsN Cj4gPiAtCXN0cnVjdCBjbGsJCSpjbGtfamRlYzsNCj4gPiAtCXN0cnVjdCBjbGsJCSpjbGtfamRl Y19zbWk7DQo+ID4gKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2ZmRfanBlZzsNCj4gPiArCXZvaWQg X19pb21lbQkJKnJlZ19iYXNlOw0KPiA+ICsJc3RydWN0IGNsawkJKmNsa19qcGVnOw0KPiA+ICsJ c3RydWN0IGNsawkJKmNsa19qcGVnX3NtaTsNCj4gPiAgCXN0cnVjdCBkZXZpY2UJCSpsYXJiOw0K PiA+ICsJZW51bSBtdGtfanBlZ19tb2RlCW1vZGU7DQo+ID4gIH07DQo+ID4gIA0KPiA+ICAvKioN Cj4gPiBAQCAtMTAxLDE1ICsxNTgsNTEgQEAgc3RydWN0IG10a19qcGVnX3FfZGF0YSB7DQo+ID4g IAl1MzIJCQlzaXplaW1hZ2VbVklERU9fTUFYX1BMQU5FU107DQo+ID4gIH07DQo+ID4gIA0KPiA+ ICsvKioNCj4gPiArICoganBlZ19lbmNfcGFyYW0gLSBwYXJhbWV0ZXJzIG9mIGpwZWcgZW5jb2Rl IGNvbnRyb2wNCj4gPiArICogQGVuYWJsZV9leGlmOglFWElGIGVuYWJsZSBmb3IganBlZyBlbmNv ZGUgbW9kZQ0KPiA+ICsgKiBAZW5jX3F1YWxpdHk6CWRlc3RpbmF0aW9uIGltYWdlIHF1YWxpdHkg aW4gZW5jb2RlIG1vZGUNCj4gPiArICogQHJlc3RhcnRfaW50ZXJ2YWw6CUpQRUcgcmVzdGFydCBp bnRlcnZhbCBmb3IgSlBFRyBlbmNvZGluZw0KPiA+ICsgKi8NCj4gPiArc3RydWN0IGpwZWdfZW5j X3BhcmFtIHsNCj4gPiArCXUzMiBlbmFibGVfZXhpZjsNCj4gDQo+IFNob3VsZG4ndCB0aGlzIGJl IGEgYm9vbD8NCnRoaXMgdmFsdWUgaXMgc2V0ZWQgYnkgVjRMMl9DSURfSlBFR19BQ1RJVkVfTUFS S0VSIGNvbnRyb2wsaXRzJyB2YWx1ZSBpcw0KVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQVBQMSgx PDwxKSxub3QgYSBib29sDQo+IA0KPiA+ICsJdTMyIGVuY19xdWFsaXR5Ow0KPiANCj4gVGhpcyBp cyBmcm9tIDAgdG8gMTAwLCBzbyBwZXJoYXBzIHVuc2lnbmVkIGNoYXI/DQp5ZXMsaGFzIG1vZGlm aWVkIGl0IHRvIHU4DQo+IA0KPiA+ICsJdTMyIHJlc3RhcnRfaW50ZXJ2YWw7DQo+IA0KPiBEaXR0 by4NCmRvbmUNCj4gDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogbXRrX2pwZWdf ZW5jX3BhcmFtOiAgR2VuZXJhbCBqcGVnIGVuY29kaW5nIHBhcmFtZXRlcnMNCj4gPiArICogQGVu Y193OgkJaW1hZ2Ugd2lkdGgNCj4gPiArICogQGVuY19oOgkJaW1hZ2UgaGVpZ2h0DQo+ID4gKyAq IEBlbmFibGVfZXhpZjoJRVhJRiBlbmFibGUgZm9yIGpwZWcgZW5jb2RlIG1vZGUNCj4gPiArICog QGVuY19xdWFsaXR5OglkZXN0aW5hdGlvbiBpbWFnZSBxdWFsaXR5IGluIGVuY29kZSBtb2RlDQo+ ID4gKyAqIEBlbmNfZm9ybWF0OgkJaW5wdXQgaW1hZ2UgZm9ybWF0DQo+ID4gKyAqIEByZXN0YXJ0 X2ludGVydmFsOglKUEVHIHJlc3RhcnQgaW50ZXJ2YWwgZm9yIEpQRUcgZW5jb2RpbmcNCj4gPiAr ICogQGltZ19zdHJpZGU6CQlqcGVnIGVuY29kZXIgaW1hZ2Ugc3RyaWRlDQo+ID4gKyAqIEBtZW1f c3RyaWRlOgkJanBlZyBlbmNvZGVyIG1lbW9yeSBzdHJpZGUNCj4gPiArICogQHRvdGFsX2VuY2R1 Ogl0b3RhbCA4eDggYmxvY2sgbnVtYmVyDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgbXRrX2pwZWdf ZW5jX3BhcmFtIHsNCj4gPiArCXUzMiBlbmNfdzsNCj4gPiArCXUzMiBlbmNfaDsNCj4gPiArCXUz MiBlbmFibGVfZXhpZjsNCj4gPiArCXUzMiBlbmNfcXVhbGl0eTsNCj4gPiArCXUzMiBlbmNfZm9y bWF0Ow0KPiA+ICsJdTMyIHJlc3RhcnRfaW50ZXJ2YWw7DQo+ID4gKwl1MzIgaW1nX3N0cmlkZTsN Cj4gPiArCXUzMiBtZW1fc3RyaWRlOw0KPiA+ICsJdTMyIHRvdGFsX2VuY2R1Ow0KPiA+ICt9Ow0K PiANCj4gQWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGhlcmUgYXJlIGFscmVhZHkgcmVwcmVzZW50ZWQg YnkgY29ycmVzcG9uZGluZyBnZW5lcmljDQo+IFY0TDIgc3RhdGUuIFdlIHNob3VsZCBiZSBhYmxl IHRvIGp1c3QgY29udmVydCB0aGVtIHRvIHRoZSBoYXJkd2FyZQ0KPiByZXByZXNlbnRhdGlvbiBh dCB0aGUgdGltZSBvZiBwcm9ncmFtaW5nIHRoZSByZWdpc3RlcnMsIHdpdGhvdXQgYSBuZWVkIHRv DQo+IHN0b3JlIHRoZW0gaW4gdGhpcyBpbnRlcm1lZGlhdGUgc3RydWN0Lg0KZGVsZXRlZCB0aGlz IHN0cnVjdHVyZQ0KPiANCj4gPiArDQo+ID4gIC8qKg0KPiA+ICAgKiBtdGtfanBlZ19jdHggLSB0 aGUgZGV2aWNlIGNvbnRleHQgZGF0YQ0KPiA+ICAgKiBAanBlZzoJCUpQRUcgSVAgZGV2aWNlIGZv ciB0aGlzIGNvbnRleHQNCj4gPiAgICogQG91dF9xOgkJc291cmNlIChvdXRwdXQpIHF1ZXVlIGlu Zm9ybWF0aW9uDQo+ID4gICAqIEBjYXBfcToJCWRlc3RpbmF0aW9uIChjYXB0dXJlKSBxdWV1ZSBx dWV1ZSBpbmZvcm1hdGlvbg0KPiA+ICAgKiBAZmg6CQkJVjRMMiBmaWxlIGhhbmRsZQ0KPiA+IC0g KiBAZGVjX3BhcmFtCQlwYXJhbWV0ZXJzIGZvciBIVyBkZWNvZGluZw0KPiA+ICAgKiBAc3RhdGU6 CQlzdGF0ZSBvZiB0aGUgY29udGV4dA0KPiA+IC0gKiBAaGVhZGVyX3ZhbGlkOglzZXQgaWYgaGVh ZGVyIGhhcyBiZWVuIHBhcnNlZCBhbmQgdmFsaWQNCj4gDQo+IFdoeSByZW1vdmluZyB0aGVzZSB0 d28/DQp0aGUgb3JpZ25hbCBzdHJ1Y3R1cmUgZGlkbid0IGhhdmUgdGhlc2UgdHdvIG1lbWJlciB2 YXJpYWJsZXMNCj4gDQo+ID4gKyAqIEBqcGVnX3BhcmFtOgkJanBlZyBlbmNvZGUgcGFyYW1ldGVy cw0KPiA+ICsgKiBAY3RybF9oZGw6CQljb250cm9scyBoYW5kbGVyDQo+ID4gICAqIEBjb2xvcnNw YWNlOiBlbnVtIHY0bDJfY29sb3JzcGFjZTsgc3VwcGxlbWVudGFsIHRvIHBpeGVsZm9ybWF0DQo+ ID4gICAqIEB5Y2Jjcl9lbmM6IGVudW0gdjRsMl95Y2Jjcl9lbmNvZGluZywgWSdDYkNyIGVuY29k aW5nDQo+ID4gICAqIEBxdWFudGl6YXRpb246IGVudW0gdjRsMl9xdWFudGl6YXRpb24sIGNvbG9y c3BhY2UgcXVhbnRpemF0aW9uDQo+ID4gQEAgLTEyMSw2ICsyMTQsOCBAQCBzdHJ1Y3QgbXRrX2pw ZWdfY3R4IHsNCj4gPiAgCXN0cnVjdCBtdGtfanBlZ19xX2RhdGEJCWNhcF9xOw0KPiA+ICAJc3Ry dWN0IHY0bDJfZmgJCQlmaDsNCj4gPiAgCWVudW0gbXRrX2pwZWdfY3R4X3N0YXRlCQlzdGF0ZTsN Cj4gPiArCXN0cnVjdCBqcGVnX2VuY19wYXJhbQkJanBlZ19wYXJhbTsNCj4gPiArCXN0cnVjdCB2 NGwyX2N0cmxfaGFuZGxlcgljdHJsX2hkbDsNCj4gPiAgDQo+ID4gIAllbnVtIHY0bDJfY29sb3Jz cGFjZSBjb2xvcnNwYWNlOw0KPiA+ICAJZW51bSB2NGwyX3ljYmNyX2VuY29kaW5nIHljYmNyX2Vu YzsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtf anBlZ19kZWNfaHcuaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdf ZGVjX2h3LmgNCj4gPiBpbmRleCBhMzdiZTFhNDg0MTUuLjM5ZDc0M2ZiNTcyZiAxMDA2NDQNCj4g PiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2RlY19ody5o DQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19kZWNf aHcuaA0KPiA+IEBAIC0zLDEwICszLDExIEBADQo+ID4gICAqIENvcHlyaWdodCAoYykgMjAxNiBN ZWRpYVRlayBJbmMuDQo+ID4gICAqIEF1dGhvcjogTWluZyBIc2l1IFRzYWkgPG1pbmdoc2l1LnRz YWlAbWVkaWF0ZWsuY29tPg0KPiA+ICAgKiAgICAgICAgIFJpY2sgQ2hhbmcgPHJpY2suY2hhbmdA bWVkaWF0ZWsuY29tPg0KPiA+ICsgKiAgICAgICAgIFhpYSBKaWFuZyA8eGlhLmppYW5nQG1lZGlh dGVrLmNvbT4NCj4gPiAgICovDQo+ID4gIA0KPiA+IC0jaWZuZGVmIF9NVEtfSlBFR19IV19IDQo+ ID4gLSNkZWZpbmUgX01US19KUEVHX0hXX0gNCj4gPiArI2lmbmRlZiBfTVRLX0pQRUdfREVDX0hX X0gNCj4gPiArI2RlZmluZSBfTVRLX0pQRUdfREVDX0hXX0gNCj4gPiAgDQo+ID4gICNpbmNsdWRl IDxtZWRpYS92aWRlb2J1ZjItY29yZS5oPg0KPiA+ICANCj4gPiBAQCAtODAsNCArODEsNCBAQCB2 b2lkIG10a19qcGVnX2RlY19zZXRfY29uZmlnKHZvaWQgX19pb21lbSAqYmFzZSwNCj4gPiAgdm9p ZCBtdGtfanBlZ19kZWNfcmVzZXQodm9pZCBfX2lvbWVtICpkZWNfcmVnX2Jhc2UpOw0KPiA+ICB2 b2lkIG10a19qcGVnX2RlY19zdGFydCh2b2lkIF9faW9tZW0gKmRlY19yZWdfYmFzZSk7DQo+ID4g IA0KPiA+IC0jZW5kaWYgLyogX01US19KUEVHX0hXX0ggKi8NCj4gPiArI2VuZGlmIC8qIF9NVEtf SlBFR19ERUNfSFdfSCAqLw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L210ay1qcGVnL210a19qcGVnX2VuY19ody5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGst anBlZy9tdGtfanBlZ19lbmNfaHcuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMDAwMDAwLi5hYzI3Nzc0Y2NmZWQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysr IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19lbmNfaHcuYw0KPiA+ IEBAIC0wLDAgKzEsMTc1IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9ubHkNCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE5IE1lZGlhVGVrIElu Yy4NCj4gPiArICogQXV0aG9yOiBYaWEgSmlhbmcgPHhpYS5qaWFuZ0BtZWRpYXRlay5jb20+DQo+ ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVm Mi1jb3JlLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAibXRrX2pwZWdfZW5jX2h3LmgiDQo+ID4g Kw0KPiA+ICt2b2lkIG10a19qcGVnX2VuY19yZXNldCh2b2lkIF9faW9tZW0gKmJhc2UpDQo+ID4g K3sNCj4gPiArCXdyaXRlbCgweDAwLCBiYXNlICsgSlBHRU5DX1JTVEIpOw0KPiA+ICsJd3JpdGVs KEpQRUdfRU5DX1JFU0VUX0JJVCwgYmFzZSArIEpQR0VOQ19SU1RCKTsNCj4gPiArCXdyaXRlbCgw eDAwLCBiYXNlICsgSlBHRU5DX0NPREVDX1NFTCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3UzMiBt dGtfanBlZ19lbmNfZ2V0X2ludF9zdGF0dXModm9pZCBfX2lvbWVtICpiYXNlKQ0KPiA+ICt7DQo+ ID4gKwl1MzIgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHJlYWRsKGJhc2UgKyBKUEdFTkNfSU5U X1NUUykgJg0KPiA+ICsJCSAgICBKUEVHX0RSVl9FTkNfSU5UX1NUQVRVU19NQVNLX0FMTElSUTsN Cj4gPiArCWlmIChyZXQpDQo+ID4gKwkJd3JpdGVsKDAsIGJhc2UgKyBKUEdFTkNfSU5UX1NUUyk7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdTMyIG10a19q cGVnX2VuY19nZXRfZmlsZV9zaXplKHZvaWQgX19pb21lbSAqYmFzZSkNCj4gPiArew0KPiA+ICsJ cmV0dXJuIHJlYWRsKGJhc2UgKyBKUEdFTkNfRE1BX0FERFIwKSAtIHJlYWRsKGJhc2UgKyBKUEdF TkNfRFNUX0FERFIwKTsNCj4gPiArfQ0KPiANCj4gVGhpcyBpcyBqdXN0IHVzZWQgaW4gdGhlIGZ1 bmN0aW9uIGJlbG93LCBzbyB0aGUgY29kZSBjb3VsZCBqdXN0IGJlIG1vdmVkDQo+IHRoZXJlLg0K PiANCj4gPiArDQo+ID4gK3UzMiBtdGtfanBlZ19lbmNfZW51bV9yZXN1bHQodm9pZCBfX2lvbWVt ICpiYXNlLCB1MzIgaXJxX3N0YXR1cywgdTMyICpmaWxlX3NpemUpDQo+ID4gK3sNCj4gPiArCSpm aWxlX3NpemUgPSBtdGtfanBlZ19lbmNfZ2V0X2ZpbGVfc2l6ZShiYXNlKTsNCj4gPiArCWlmIChp cnFfc3RhdHVzICYgSlBFR19EUlZfRU5DX0lOVF9TVEFUVVNfRE9ORSkNCj4gPiArCQlyZXR1cm4g TVRLX0pQRUdfRU5DX1JFU1VMVF9ET05FOw0KPiA+ICsJZWxzZSBpZiAoaXJxX3N0YXR1cyAmIEpQ RUdfRFJWX0VOQ19JTlRfU1RBVFVTX1NUQUxMKQ0KPiA+ICsJCXJldHVybiBNVEtfSlBFR19FTkNf UkVTVUxUX1NUQUxMOw0KPiA+ICsJZWxzZSBpZiAoaXJxX3N0YXR1cyAmIEpQRUdfRFJWX0VOQ19J TlRfU1RBVFVTX1ZDT0RFQ19JUlEpDQo+ID4gKwkJcmV0dXJuIE1US19KUEVHX0VOQ19SRVNVTFRf VkNPREVDX0lSUTsNCj4gPiArCXJldHVybiBNVEtfSlBFR19FTkNfUkVTVUxUX0VSUk9SX1VOS05P V047DQo+IA0KPiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGRvIHR3byB0aGluZ3MgYXQgYSB0aW1l LCB3aGljaCBpcyBjb25mdXNpbmcsIGdpdmVuDQo+IHRoYXQgdGhlIG5hbWUgb25seSByZWZlcnMg dG8gdGhlIHJlc3VsdCBhbmQgZG9lc24ndCBtZW50aW9uIHRoZSAiZmlsZQ0KPiBzaXplIi4NCj4g DQo+IFNvIGFuIGFsdGVybmF0aXZlIG9wdGlvbiB0byBteSBzdWdnZXN0aW9uIGFib3ZlIHdvdWxk IGJlIHJlbW92aW5nIHRoZSBmaWxlDQo+IHNpemUgaGFuZGxpbmcgZnJvbSB0aGlzIGZ1bmN0aW9u IGFuZCB1c2luZyB0aGUgZGVkaWNhdGVkIGZ1bmN0aW9uIGZvciBpdC4NCmRvbmUNCj4gDQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19qcGVnX2VuY19zZXRfYmxrX251bSh2b2lk IF9faW9tZW0gKmJhc2UsIHUzMiBibGtfbnVtKQ0KPiA+ICt7DQo+ID4gKwl3cml0ZWwoYmxrX251 bSwgYmFzZSArIEpQR0VOQ19CTEtfTlVNKTsNCj4gPiArfQ0KPiANCj4gSXMgdGhlcmUgYW55IGJl bmVmaXQgb2YgaGF2aW5nIGEgbG90IG9mIHN1Y2ggc21hbGwgZnVuY3Rpb25zIHJhdGhlciB0aGFu DQo+IGp1c3QgZG9pbmcgZXZlcnl0aGluZyBuZWVkZWQgaW4gb25lIGZ1bmN0aW9uPyBUaGlzIGhh cmR3YXJlIGRvZXNuJ3QgaGF2ZSBzbw0KPiBtYW55IHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIGFu ZCB0aGUgY2FsbGVyIHNpZGUgaXMgZ2VuZXJpYyBWNEwyIGFuZCB2YjIsDQo+IHNvIHRoZXJlIGlz IG5vIG5lZWQgZm9yIGFkZGl0aW9uYWwgbGF5ZXIgb2YgYWJzdHJhY3Rpb24uDQo+IA0KPiBIb3cg YWJvdXQgdGhlIGZvbGxvd2luZyBtb2RlbCwgYXMgdXNlZCBieSBtYW55IG90aGVyIGRyaXZlcnM6 DQo+IA0KPiBtdGtfanBlZ19lbmNfc2V0X3NyYygpDQo+IHsNCj4gCS8vIFNldCBhbnkgcmVnaXN0 ZXJzIHJlbGF0ZWQgdG8gc291cmNlIGZvcm1hdCBhbmQgYnVmZmVyDQo+IH0NCj4gDQo+IG10a19q cGVnX2VuY19zZXRfZHN0KCkNCj4gew0KPiAJLy8gU2V0IGFueSByZWdpc3RlcnMgcmVsYXRlZCB0 byBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIGJ1ZmZlcg0KPiB9DQo+IA0KPiBtdGtfanBlZ19lbmNf c2V0X3BhcmFtcygpDQo+IHsNCj4gCS8vIFNldCBhbnkgcmVnaXN0ZXJzIHJlbGF0ZWQgdG8gYWRk aXRpb25hbCBlbmNvZGluZyBwYXJhbWV0ZXJzDQo+IH0NCj4gDQo+IG10a19qcGVnX2VuY19kZXZp Y2VfcnVuKGVuYywgY3R4KQ0KPiB7DQo+IAltdGtfanBlZ19lbmNfc2V0X3NyYyhlbmMsIHNyY19i dWYsIHNyY19mbXQpOw0KPiAJbXRrX2pwZWdfZW5jX3NldF9kc3QoZW5jLCBkc3RfYnVmLCBkc3Rf Zm10KTsNCj4gCW10a19qcGVnX2VuY19zZXRfcGFyYW1zKGVuYywgY3R4KTsNCj4gCS8vIFRyaWdn ZXIgdGhlIGhhcmR3YXJlIHJ1bg0KPiB9DQpkb25lDQo+IA0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgbXRrX2pwZWdfZW5jX3NldF9lbmNGb3JtYXQodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgZW5j X2Zvcm1hdCkNCj4gPiArew0KPiA+ICsJdTMyIHZhbHVlOw0KPiA+ICsNCj4gPiArCXZhbHVlID0g cmVhZGwoYmFzZSArIEpQR0VOQ19DVFJMKTsNCj4gPiArCXZhbHVlICY9IH5KUEVHX0VOQ19DVFJM X1lVVl9CSVQ7DQo+ID4gKwl2YWx1ZSB8PSBKUEdFTkNfRk9STUFUKGVuY19mb3JtYXQpOw0KPiA+ ICsJd3JpdGVsKHZhbHVlLCBiYXNlICsgSlBHRU5DX0NUUkwpOw0KPiANCj4gVGhlIG1vZGVsIEkg c3VnZ2VzdGVkIGFib3ZlIGFsc28gYXZvaWRzIHRoaXMga2luZCBvZiByZWFkIG1vZGlmeSB3cml0 ZQ0KPiBvcGVyYXRpb25zLCB3aGljaCBqdXN0IHVubmVjZXNzYXJpbHkgYWRkIHN5bmNocm9ub3Vz IE1NSU8gcm91bmQgdHJpcHMsIHdoaWNoDQo+IG1lYW5zIG1vcmUgQ1BVIG92ZXJoZWFkLg0KPiAN Cj4gR2l2ZW4gdGhhdCB0aGUgZnVsbCBzdGF0ZSBpcyBhbHdheXMga25vd24gYnkgdGhlIGRyaXZl ciwgaXQgY2FuIGp1c3Qgd3JpdGUNCj4gYWxsIHRoZSByZWdpc3RlciB2YWx1ZXMgd2l0aG91dCB0 aGUgbmVlZCB0byByZWFkIHRoZW0gYmFjay4NCnRoZSBKUEdFTkNfQ1RSTCByZWdpc3RlciBoYXMg MzIgYml0cyxkaWZmZXJlbnQgYml0cyBoYXZlIGRpZmZlcmVudA0KbWVhbmluZ3MuIGVuY2Zvcm1h dCBpcyBiaXQgM340LHNvIHdlIG5lZWQgcmVhZHkgYmVmb3JlIHdyaXRlIHRvDQpndWFyYW50ZWUg b3RoZXIgYml0cycgdmFsdWUgbm90IGJlIGNoYW5nZWQNCj4gIA0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCBtdGtfanBlZ19lbmNfc2V0X2ltZ19zaXplKHZvaWQgX19pb21lbSAqYmFz ZSwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQ0KPiA+ICt7DQo+ID4gKwl1MzIgdmFsdWU7DQo+ID4g Kw0KPiA+ICsJdmFsdWUgPSBKUEdFTkNfV0lEVEhfSEVJR0hUKHdpZHRoLCBoZWlnaHQpOw0KPiA+ ICsJd3JpdGVsKHZhbHVlLCBiYXNlICsgSlBHRU5DX0lNR19TSVpFKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgbXRrX2pwZWdfZW5jX3NldF9zcmNfaW1nKHZvaWQgX19pb21lbSAq YmFzZSwgdTMyIHdpZHRoLA0KPiA+ICsJCQkJICAgICB1MzIgaGVpZ2h0LCB1MzIgeXV2X2Zvcm1h dCwNCj4gPiArCQkJCSAgICAgdTMyIHRvdGFsX2VuY2R1KQ0KPiA+ICt7DQo+ID4gKwltdGtfanBl Z19lbmNfc2V0X2ltZ19zaXplKGJhc2UsIHdpZHRoLCBoZWlnaHQpOw0KPiA+ICsJbXRrX2pwZWdf ZW5jX3NldF9lbmNGb3JtYXQoYmFzZSwgeXV2X2Zvcm1hdCk7DQo+ID4gKwltdGtfanBlZ19lbmNf c2V0X2Jsa19udW0oYmFzZSwgdG90YWxfZW5jZHUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCBtdGtfanBlZ19lbmNfc2V0X3NyY19idWYodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIg aW1nX3N0cmlkZSwNCj4gPiArCQkJCSAgICAgdTMyIG1lbV9zdHJpZGUsIHUzMiBzcmNfYWRkciwN Cj4gPiArCQkJCSAgICAgdTMyIHNyY19hZGRyX2MpDQo+ID4gK3sNCj4gPiArCXdyaXRlbChpbWdf c3RyaWRlLCBiYXNlICsgSlBHRU5DX0lNR19TVFJJREUpOw0KPiA+ICsJd3JpdGVsKG1lbV9zdHJp ZGUsIGJhc2UgKyBKUEdFTkNfU1RSSURFKTsNCj4gPiArCXdyaXRlbChzcmNfYWRkciwgYmFzZSAr IEpQR0VOQ19TUkNfTFVNQV9BRERSKTsNCj4gPiArCXdyaXRlbChzcmNfYWRkcl9jLCBiYXNlICsg SlBHRU5DX1NSQ19DSFJPTUFfQUREUik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IG10a19qcGVnX2VuY19zZXRfZHN0X2J1Zih2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBkc3RfYWRk ciwNCj4gPiArCQkJCSAgICAgdTMyIHN0YWxsX3NpemUsIHUzMiBpbml0X29mZnNldCwNCj4gPiAr CQkJCSAgICAgdTMyIG9mZnNldF9tYXNrKQ0KPiA+ICt7DQo+ID4gKwl3cml0ZWwoSlBHRU5DX0lO SVRfT0ZGU0VUKGluaXRfb2Zmc2V0KSwgYmFzZSArIEpQR0VOQ19PRkZTRVRfQUREUik7DQo+ID4g Kwl3cml0ZWwoSlBHRU5DX09GRlNFVF9NQVNLKG9mZnNldF9tYXNrKSwgYmFzZSArIEpQR0VOQ19C WVRFX09GRlNFVF9NQVNLKTsNCj4gPiArCXdyaXRlbChKUEdFTkNfRFNUX0FERFIoZHN0X2FkZHIp LCBiYXNlICsgSlBHRU5DX0RTVF9BRERSMCk7DQo+ID4gKwl3cml0ZWwoSlBHRU5DX1NUQUxMX0FE RFIoZHN0X2FkZHIsIHN0YWxsX3NpemUpLA0KPiA+ICsJICAgICAgIGJhc2UgKyBKUEdFTkNfU1RB TExfQUREUjApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfanBlZ19lbmNf c2V0X3F1YWxpdHkodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgcXVhbGl0eSkNCj4gPiArew0KPiA+ ICsJdTMyIHZhbHVlOw0KPiA+ICsNCj4gPiArCXZhbHVlID0gcmVhZGwoYmFzZSArIEpQR0VOQ19R VUFMSVRZKTsNCj4gPiArCXZhbHVlID0gSlBHRU5DX1NFVF9RVUFMSVRZKHZhbHVlLCBxdWFsaXR5 KTsNCj4gDQo+IFRoaXMgbWFjcm8gaXMgY29uZnVzaW5nLiBDb3VsZCB3ZSBqdXN0IGNsZWFyIHRo ZSBxdWFsaXR5IGJpdHMgZXhwbGljaXRseQ0KPiBhbmQgdGhlbiBiaXR3aXNlLU9SIHRoZSBuZXcg dmFsdWU/DQp5ZXMuZ3VhcmFudGVlIG90aGVyIGJpdHMgbm90IGJlIGNoYW5nZWQscXVhbGl0eSBi aXRzIGlzIG5ldyB2YWx1ZQ0KPiANCj4gPiArCXdyaXRlbCh2YWx1ZSwgYmFzZSArIEpQR0VOQ19R VUFMSVRZKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX2pwZWdfZW5jX3Nl dF9yZXN0YXJ0X2ludGVydmFsKHZvaWQgX19pb21lbSAqYmFzZSwNCj4gPiArCQkJCQkgICAgICB1 MzIgcmVzdGFydF9pbnRlcnZhbCkNCj4gPiArew0KPiA+ICsJdTMyIHZhbHVlOw0KPiA+ICsNCj4g PiArCXZhbHVlID0gcmVhZGwoYmFzZSArIEpQR0VOQ19DVFJMKTsNCj4gPiArCWlmIChyZXN0YXJ0 X2ludGVydmFsKQ0KPiA+ICsJCXZhbHVlIHw9IEpQRUdfRU5DX0NUUkxfUkVTVEFSVF9FTl9CSVQ7 DQo+ID4gKwllbHNlDQo+ID4gKwkJdmFsdWUgJj0gfkpQRUdfRU5DX0NUUkxfUkVTVEFSVF9FTl9C SVQ7DQo+ID4gKwl3cml0ZWwodmFsdWUsIGJhc2UgKyBKUEdFTkNfQ1RSTCk7DQo+ID4gKwl3cml0 ZWwocmVzdGFydF9pbnRlcnZhbCwgYmFzZSArIEpQR0VOQ19SU1RfTUNVX05VTSk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19qcGVnX2VuY19zZXRfZW5jb2RlX21vZGUodm9p ZCBfX2lvbWVtICpiYXNlLCB1MzIgZXhpZl9lbikNCj4gPiArew0KPiA+ICsJdTMyIHZhbHVlOw0K PiA+ICsNCj4gPiArCXZhbHVlID0gcmVhZGwoYmFzZSArIEpQR0VOQ19DVFJMKTsNCj4gPiArCXZh bHVlICY9IH5KUEVHX0VOQ19DVFJMX0ZJTEVfRk9STUFUX0JJVDsNCj4gPiArCXdyaXRlbCh2YWx1 ZSwgYmFzZSArIEpQR0VOQ19DVFJMKTsNCj4gPiArDQo+ID4gKwlpZiAoZXhpZl9lbikgew0KPiA+ ICsJCXZhbHVlID0gcmVhZGwoYmFzZSArIEpQR0VOQ19DVFJMKTsNCj4gPiArCQl2YWx1ZSB8PSBK UEVHX0VOQ19FTl9KRklGX0VYSUY7DQo+ID4gKwkJd3JpdGVsKHZhbHVlLCBiYXNlICsgSlBHRU5D X0NUUkwpOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfanBl Z19lbmNfc2V0X2N0cmxfY2ZnKHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGV4aWZfZW4sDQo+ID4g KwkJCQkgICAgICB1MzIgcXVhbGl0eSwgdTMyIHJlc3RhcnRfaW50ZXJ2YWwpDQo+ID4gK3sNCj4g PiArCW10a19qcGVnX2VuY19zZXRfcXVhbGl0eShiYXNlLCBxdWFsaXR5KTsNCj4gPiArDQo+ID4g KwltdGtfanBlZ19lbmNfc2V0X3Jlc3RhcnRfaW50ZXJ2YWwoYmFzZSwgcmVzdGFydF9pbnRlcnZh bCk7DQo+ID4gKw0KPiA+ICsJbXRrX2pwZWdfZW5jX3NldF9lbmNvZGVfbW9kZShiYXNlLCBleGlm X2VuKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBtdGtfanBlZ19lbmNfc3RhcnQodm9pZCBf X2lvbWVtICpiYXNlKQ0KPiA+ICt7DQo+ID4gKwl1MzIgdmFsdWU7DQo+ID4gKw0KPiA+ICsJdmFs dWUgPSByZWFkbChiYXNlICsgSlBHRU5DX0NUUkwpOw0KPiA+ICsJdmFsdWUgfD0gSlBFR19FTkNf Q1RSTF9JTlRfRU5fQklUIHwgSlBFR19FTkNfQ1RSTF9FTkFCTEVfQklUOw0KPiA+ICsJd3JpdGVs KHZhbHVlLCBiYXNlICsgSlBHRU5DX0NUUkwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG10 a19qcGVnX2VuY19zZXRfY29uZmlnKHZvaWQgX19pb21lbSAqYmFzZSwNCj4gPiArCQkJICAgICBz dHJ1Y3QgbXRrX2pwZWdfZW5jX3BhcmFtICpjb25maWcsDQo+ID4gKwkJCSAgICAgc3RydWN0IG10 a19qcGVnX2VuY19icyAqYnMsDQo+ID4gKwkJCSAgICAgc3RydWN0IG10a19qcGVnX2VuY19mYiAq ZmIpDQo+ID4gK3sNCj4gPiArCW10a19qcGVnX2VuY19zZXRfc3JjX2ltZyhiYXNlLCBjb25maWct PmVuY193LCBjb25maWctPmVuY19oLA0KPiA+ICsJCQkJIGNvbmZpZy0+ZW5jX2Zvcm1hdCwgY29u ZmlnLT50b3RhbF9lbmNkdSk7DQo+ID4gKwltdGtfanBlZ19lbmNfc2V0X3NyY19idWYoYmFzZSwg Y29uZmlnLT5pbWdfc3RyaWRlLCBjb25maWctPm1lbV9zdHJpZGUsDQo+ID4gKwkJCQkgZmItPmZi X2FkZHJbMF0uZG1hX2FkZHIsDQo+ID4gKwkJCQkgZmItPmZiX2FkZHJbMV0uZG1hX2FkZHIpOw0K PiA+ICsJbXRrX2pwZWdfZW5jX3NldF9kc3RfYnVmKGJhc2UsIGJzLT5kbWFfYWRkciwgYnMtPnNp emUsDQo+ID4gKwkJCQkgYnMtPmRtYV9hZGRyX29mZnNldCwgYnMtPmRtYV9hZGRyX29mZnNldG1h c2spOw0KPiA+ICsJbXRrX2pwZWdfZW5jX3NldF9jdHJsX2NmZyhiYXNlLCBjb25maWctPmVuYWJs ZV9leGlmLA0KPiA+ICsJCQkJICBjb25maWctPmVuY19xdWFsaXR5LA0KPiA+ICsJCQkJICBjb25m aWctPnJlc3RhcnRfaW50ZXJ2YWwpOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfZW5jX2h3LmggYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2VuY19ody5oDQo+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjcwODAyNDBmNmRhYw0KPiA+IC0tLSAvZGV2 L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVn X2VuY19ody5oDQo+ID4gQEAgLTAsMCArMSw2MCBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5ICovDQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAoYykg MjAxOSBNZWRpYVRlayBJbmMuDQo+ID4gKyAqIEF1dGhvcjogWGlhIEppYW5nIDx4aWEuamlhbmdA bWVkaWF0ZWsuY29tPg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX01U S19KUEVHX0VOQ19IV19IDQo+ID4gKyNkZWZpbmUgX01US19KUEVHX0VOQ19IV19IDQo+ID4gKw0K PiA+ICsjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWNvcmUuaD4NCj4gPiArDQo+ID4gKyNpbmNs dWRlICJtdGtfanBlZ19jb3JlLmgiDQo+ID4gKyNpbmNsdWRlICJtdGtfanBlZ19lbmNfcmVnLmgi DQo+ID4gKw0KPiA+ICsjZGVmaW5lIEpQRUdfRU5DX0RTVF9BRERSX09GRlNFVF9NQVNLIEdFTk1B U0soMywgMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgSlBFR19FTkNfQ1RSTF9ZVVZfQklUIDB4MTgN Cj4gDQo+IDB4MTggaXNuJ3QgYSBzaW5nbGUgYml0IGFzIHRoZSBfQklUIHN1ZmZpeCB3b3VsZCBz dWdnZXN0LiBQZXJoYXBzDQo+IEpQRUdfRU5DX0NUUkxfRk9STUFUX01BU0sgd291bGQgYmUgbW9y ZSBhcHByb3ByaWF0ZT8NCmRvbmUNCj4gDQo+ID4gKyNkZWZpbmUgSlBFR19FTkNfQ1RSTF9SRVNU QVJUX0VOX0JJVCAgICAgICAgICAgIEJJVCgxMCkNCj4gPiArI2RlZmluZSBKUEVHX0VOQ19DVFJM X0ZJTEVfRk9STUFUX0JJVCAgICAgICAgICAgQklUKDUpDQo+ID4gKyNkZWZpbmUgSlBFR19FTkNf RU5fSkZJRl9FWElGICAgICAgICAgICAgICAgICAgIEJJVCg1KQ0KPiA+ICsjZGVmaW5lIEpQRUdf RU5DX0NUUkxfSU5UX0VOX0JJVCAgICAgICAgICAgICAgICBCSVQoMikNCj4gPiArI2RlZmluZSBK UEVHX0VOQ19DVFJMX0VOQUJMRV9CSVQgICAgICAgICAgICAgICAgQklUKDApDQo+ID4gKyNkZWZp bmUgSlBFR19FTkNfUkVTRVRfQklUICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQ0KPiA+ICsN Cj4gPiArZW51bSB7DQo+ID4gKwlNVEtfSlBFR19FTkNfUkVTVUxUX0RPTkUJCT0gMCwNCj4gPiAr CU1US19KUEVHX0VOQ19SRVNVTFRfU1RBTEwsDQo+ID4gKwlNVEtfSlBFR19FTkNfUkVTVUxUX1ZD T0RFQ19JUlEsDQo+ID4gKwlNVEtfSlBFR19FTkNfUkVTVUxUX0VSUk9SX1VOS05PV04NCj4gPiAr fTsNCj4gDQo+IERvIHdlIG5lZWQgdGhlc2UgaW50ZXJtZWRpYXRlIGVycm9yIGNvZGVzPyBDb3Vs ZCB3ZSBqdXN0IHVzZSBlcnJubyB2YWx1ZXMNCj4gaW5zdGVhZD8NCndlIGNhbiBqdXN0IHVzZSBl cnJubyB2YWx1ZXMsYnV0IG91ciBpbnRlcnJ1cHQgc3RhdHVzIGhhdmUgdGhyZWUNCnN0YXRlLGRv bmUvc3RhbGwsdmNvZGVjIGlycSxtYXliZSBsaXN0aW5nIHRoZW0gaGVyZSBtYWtlcyBtb3JlIGNs YXJpdHkNCj4gDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbXRrX2pwZWdfZW5jX2JzIHsNCj4gPiArCWRt YV9hZGRyX3QJZG1hX2FkZHI7DQo+ID4gKwlzaXplX3QJCXNpemU7DQo+ID4gKwl1MzIJCQlkbWFf YWRkcl9vZmZzZXQ7DQo+ID4gKwl1MzIJCQlkbWFfYWRkcl9vZmZzZXRtYXNrOw0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RydWN0IG10a19qcGVnX21lbSB7DQo+ID4gKwlkbWFfYWRkcl90CWRtYV9h ZGRyOw0KPiA+ICsJc2l6ZV90CQlzaXplOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IG10 a19qcGVnX2VuY19mYiB7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfbWVtCWZiX2FkZHJbTVRLX0pQ RUdfQ09NUF9NQVhdOw0KPiA+ICsJdTMyCQkJbnVtX3BsYW5lczsNCj4gPiArfTsNCj4gDQo+IFBs ZWFzZSBhZGQga2VybmVsZG9jIGNvbW1lbnRzIHRvIHRoZSBzdHJ1Y3RzIGFib3ZlLg0KPiANCj4g bml0OiBTZXBhcmF0aW5nIHR5cGVzIGZyb20gbmFtZXMgd2l0aCBhIHNpbmdsZSBzcGFjZSBpcyBt b3JlIGZ1dHVyZS1wcm9vZiwNCj4gaW4gY2FzZSBzb21lb25lIG5lZWRzIHRvIGNoYW5nZSB0aGUg bGF5b3V0IG9mIHRoZSBzdHJ1Y3Qgb3IgcmVuYW1lIGZpZWxkcy4NCmRvbmUNCj4gDQo+ID4gKw0K PiA+ICt2b2lkIG10a19qcGVnX2VuY19yZXNldCh2b2lkIF9faW9tZW0gKmJhc2UpOw0KPiA+ICt1 MzIgbXRrX2pwZWdfZW5jX2dldF9pbnRfc3RhdHVzKHZvaWQgX19pb21lbSAqYmFzZSk7DQo+ID4g K3UzMiBtdGtfanBlZ19lbmNfZ2V0X2ZpbGVfc2l6ZSh2b2lkIF9faW9tZW0gKmJhc2UpOw0KPiA+ ICt1MzIgbXRrX2pwZWdfZW5jX2VudW1fcmVzdWx0KHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGly cV9zdGF0dXMsDQo+ID4gKwkJCSAgICAgdTMyICpmaWxlX3NpemUpOw0KPiA+ICt2b2lkIG10a19q cGVnX2VuY19zdGFydCh2b2lkIF9faW9tZW0gKmVuY19yZWdfYmFzZSk7DQo+ID4gK3ZvaWQgbXRr X2pwZWdfZW5jX3NldF9jb25maWcodm9pZCBfX2lvbWVtICpiYXNlLA0KPiA+ICsJCQkgICAgIHN0 cnVjdCBtdGtfanBlZ19lbmNfcGFyYW0gKmNvbmZpZywNCj4gPiArCQkJICAgICBzdHJ1Y3QgbXRr X2pwZWdfZW5jX2JzICpicywNCj4gPiArCQkJICAgICBzdHJ1Y3QgbXRrX2pwZWdfZW5jX2ZiICpm Yik7DQo+ID4gKyNlbmRpZiAvKiBfTVRLX0pQRUdfRU5DX0hXX0ggKi8NCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19lbmNfcmVnLmggYi9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2VuY19yZWcuaA0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5kNzg1NjIxY2I0YzYN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGst anBlZy9tdGtfanBlZ19lbmNfcmVnLmgNCj4gPiBAQCAtMCwwICsxLDQ5IEBADQo+ID4gKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8NCj4gPiArLyoNCj4gPiArICog Q29weXJpZ2h0IChjKSAyMDE5IE1lZGlhVGVrIEluYy4NCj4gPiArICogQXV0aG9yOiBYaWEgSmlh bmcgPHhpYS5qaWFuZ0BtZWRpYXRlay5jb20+DQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsjaWZu ZGVmIF9NVEtfSlBFR19FTkNfUkVHX0gNCj4gPiArI2RlZmluZSBfTVRLX0pQRUdfRU5DX1JFR19I DQo+ID4gKyNkZWZpbmUgTVRLX0pQRUdfQ09NUF9NQVgJCTMNCj4gDQo+IFRoaXMgZG9lc24ndCBs b29rIGxpa2UgYSByZWdpc3Rlci1zcGVjaWZpYyBkZWZpbml0aW9uLg0KbW92ZSBpdCB0byBtdGtf anBlZ19jb3JlLmggd2hpY2ggZGVjIGFsc28gdXNlcyBpdA0KPiANCj4gPiArDQo+ID4gKyNkZWZp bmUgSlBFR19EUlZfRU5DX0lOVF9TVEFUVVNfRE9ORQkJCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIEpQ RUdfRFJWX0VOQ19JTlRfU1RBVFVTX1NUQUxMCQkJQklUKDEpDQo+ID4gKyNkZWZpbmUgSlBFR19E UlZfRU5DX0lOVF9TVEFUVVNfVkNPREVDX0lSUQkJQklUKDQpDQo+ID4gKyNkZWZpbmUgSlBFR19E UlZfRU5DX0lOVF9TVEFUVVNfTUFTS19BTExJUlEJCTB4MTMNCj4gDQo+IENvdWxkIHdlIGRlZmlu ZSB0aGlzIGFzIGFuIHwgb2YgdGhlIHNwZWNpZmljIGJpdCBkZWZpbml0aW9ucyBhYm92ZSByYXRo ZXINCj4gdGhhbiBoYXJkY29kaW5nPw0KPiANCj4gPiArDQo+ID4gKyNkZWZpbmUgSlBHRU5DX1JT VEIJCQkJMHgxMDANCj4gDQo+IENvdWxkIHdlIGFncmVlIG9uIGEgY29uc2lzdGVudCBwcmVmaXgg Zm9yIG1hY3Jvcz8gU29tZSB1c2UgSlBFR19FTkMsIHNvbWUNCj4gSlBFR19EUlZfRU5DIGFuZCBz b21lIEpQR0VOQy4gSG93IGFib3V0IHVzaW5nIEpQRUdfRU5DIGV2ZXJ5d2hlcmU/DQpkb25lDQo+ IA0KPiA+ICsjZGVmaW5lIEpQR0VOQ19DVFJMCQkJCTB4MTA0DQo+ID4gKyNkZWZpbmUgSlBHRU5D X1FVQUxJVFkJCQkJMHgxMDgNCj4gPiArI2RlZmluZSBKUEdFTkNfQkxLX05VTQkJCQkweDEwQw0K PiANCj4gbml0OiBIZXggbnVtZXJhbHMgaW4gdGhlIGtlcm5lbCBhcmUgbG93ZXJjYXNlLg0KZG9u ZQ0KPiANCj4gPiArI2RlZmluZSBKUEdFTkNfQkxLX0NOVAkJCQkweDExMA0KPiA+ICsjZGVmaW5l IEpQR0VOQ19JTlRfU1RTCQkJCTB4MTFDDQo+ID4gKyNkZWZpbmUgSlBHRU5DX0RTVF9BRERSMAkJ CTB4MTIwDQo+ID4gKyNkZWZpbmUgSlBHRU5DX0RNQV9BRERSMAkJCTB4MTI0DQo+ID4gKyNkZWZp bmUgSlBHRU5DX1NUQUxMX0FERFIwCQkJMHgxMjgNCj4gPiArI2RlZmluZSBKUEdFTkNfT0ZGU0VU X0FERFIJCQkweDEzOA0KPiA+ICsjZGVmaW5lIEpQR0VOQ19SU1RfTUNVX05VTQkJCTB4MTUwDQo+ ID4gKyNkZWZpbmUgSlBHRU5DX0lNR19TSVpFCQkJCTB4MTU0DQo+ID4gKyNkZWZpbmUgSlBHRU5D X0RFQlVHX0lORk8wCQkJMHgxNjANCj4gPiArI2RlZmluZSBKUEdFTkNfREVCVUdfSU5GTzEJCQkw eDE2NA0KPiA+ICsjZGVmaW5lIEpQR0VOQ19UT1RBTF9DWUNMRQkJCTB4MTY4DQo+ID4gKyNkZWZp bmUgSlBHRU5DX0JZVEVfT0ZGU0VUX01BU0sJCQkweDE2Qw0KPiA+ICsjZGVmaW5lIEpQR0VOQ19T UkNfTFVNQV9BRERSCQkJMHgxNzANCj4gPiArI2RlZmluZSBKUEdFTkNfU1JDX0NIUk9NQV9BRERS CQkJMHgxNzQNCj4gPiArI2RlZmluZSBKUEdFTkNfU1RSSURFCQkJCTB4MTc4DQo+ID4gKyNkZWZp bmUgSlBHRU5DX0lNR19TVFJJREUJCQkweDE3Qw0KPiA+ICsjZGVmaW5lIEpQR0VOQ19EQ01fQ1RS TAkJCQkweDMwMA0KPiA+ICsjZGVmaW5lIEpQR0VOQ19DT0RFQ19TRUwJCQkweDMxNA0KPiA+ICsj ZGVmaW5lIEpQR0VOQ19VTFRSQV9USFJFUwkJCTB4MzE4DQo+ID4gKw0KPiA+ICsjZGVmaW5lIEpQ R0VOQ19GT1JNQVQoeCkJCSgoKHgpICYgMykgPDwgMykNCj4gPiArI2RlZmluZSBKUEdFTkNfV0lE VEhfSEVJR0hUKHcsIGgpCSgoKHcpIDw8IDE2KSB8IChoKSkNCj4gPiArI2RlZmluZSBKUEdFTkNf SU5JVF9PRkZTRVQoeCkJCSgoeCkgJiAofjB4RikpDQo+ID4gKyNkZWZpbmUgSlBHRU5DX09GRlNF VF9NQVNLKHgpCQkoKHgpICYgMHhGKQ0KPiA+ICsjZGVmaW5lIEpQR0VOQ19EU1RfQUREUih4KQkJ KCh4KSAmICh+MHhGKSkNCj4gPiArI2RlZmluZSBKUEdFTkNfU1RBTExfQUREUih4LCB5KQkJKCgo eCkgKyAoeSkpICYgKH4weEYpKQ0KPiA+ICsjZGVmaW5lIEpQR0VOQ19RVUFMSVRZX01BU0sJCTB4 RkZGRjAwMDANCj4gPiArI2RlZmluZSBKUEdFTkNfU0VUX1FVQUxJVFkoeCwgeSkJKCgoeCkgJiBK UEdFTkNfUVVBTElUWV9NQVNLKSB8ICh5KSkNCj4gDQo+IEpQR0VOQ19RVUFMSVRZX01BU0sgaXMg b25seSB1c2VkIGhlcmUsIHNvIDB4ZmZmZjAwMDAgY291bGQgYmUganVzdCB1c2VkDQo+IGRpcmVj dGx5Lg0KZG9uZQ0KPiANCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBfTVRLX0pQRUdfRU5DX1JFR19I ICovDQo+IA0KPiBJIGNhbiBzZWUgc29tZSBiaXRzIGRlZmluZWQgaW4gbXRrX2pwZWdfZW5jX2h3 LmggYXMgd2VsbC4gUGVyaGFwcyBhbGwgdGhlc2UNCj4gY291bGQgYmUgbW92ZWQgdGhlcmUgdG9v LCB3aGljaCB3b3VsZCBtYWtlIHVzIGhhdmUgMSBmaWxlIGxlc3M/DQptb3ZlZCBiaXRzIGRlZmlu ZWQgIGFuZCByZWdpc3RlciBkZWZpbmVkIHRvIG10a19qcGVnX2VuY19yZWcuaCwgYnV0IHRoZQ0K ZnVuY3Rpb25zIGRlY2xhcmF0aW9uIGFib3V0IGpwZWcgZW5jIGh3IHdlcmUgaW4gbXRrX2pwZWdf ZW5jX2h3LmgsIGlzDQp0aGF0IG9rPw0KPiANCj4gQmVzdCByZWdhcmRzLA0KPiBUb21hc3oNCj4g DQoNCg==