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=-17.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=unavailable 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 56262C4332F for ; Wed, 22 Sep 2021 08:32:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 270D6611B0 for ; Wed, 22 Sep 2021 08:32:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233840AbhIVIde (ORCPT ); Wed, 22 Sep 2021 04:33:34 -0400 Received: from Mailgw01.mediatek.com ([1.203.163.78]:33114 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S233437AbhIVId3 (ORCPT ); Wed, 22 Sep 2021 04:33:29 -0400 X-UUID: fffbad765ce7498c9c6f13803614d7f9-20210922 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=iSpxL17+oBt4e1FnMRLvchktitz1glyp/1ZGZu5PEzY=; b=sgxr+eEO0LkBrrNQUFeBSN0dAlnn0WvLnq+ukI/HY0nhtMxclHhVKR5ka7X4zwxwpxhHc2x5bf2///IFIKo3AnJIIao361m7KvilyuwE9e7zTMrIKTviANdtFTs3yNSArhbmRm/izE6oMIkZ9nxdHE+96vdBE+w0sw49vFZ4S40=; X-UUID: fffbad765ce7498c9c6f13803614d7f9-20210922 Received: from mtkcas35.mediatek.inc [(172.27.6.253)] by mailgw01.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1229007706; Wed, 22 Sep 2021 16:31:54 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS33N2.mediatek.inc (172.27.4.76) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 22 Sep 2021 16:31:50 +0800 Received: from mhfsdcap04 (10.17.3.154) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 22 Sep 2021 16:31:50 +0800 Message-ID: Subject: Re: [PATCH 2/4] drm/mediatek: add mt8195 hdmi TX support From: Chunfeng Yun To: Guillaume Ranquet CC: Chun-Kuang Hu , Philipp Zabel , David Airlie , Daniel Vetter , Rob Herring , Matthias Brugger , Kishon Vijay Abraham I , "Vinod Koul" , CK Hu , Jitao shi , , , , , , Date: Wed, 22 Sep 2021 16:31:52 +0800 In-Reply-To: <20210907083723.7725-3-granquet@baylibre.com> References: <20210907083723.7725-1-granquet@baylibre.com> <20210907083723.7725-3-granquet@baylibre.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 34CEA2B28D7B3713DF89BD2DAC59E6D989E1B0606DE6034AF215F8BFE7AF9A4B2000:8 X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gVHVlLCAyMDIxLTA5LTA3IGF0IDEwOjM3ICswMjAwLCBHdWlsbGF1bWUgUmFucXVldCB3cm90 ZToNCj4gQWRkIGJhc2ljIGhkbWkgVFggc3VwcG9ydCBmb3IgdGhlIG1lZGlhdGVrIG10ODE5NSBT b0NzDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBHdWlsbGF1bWUgUmFucXVldCA8Z3JhbnF1ZXRAYmF5 bGlicmUuY29tPg0KPiAtLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnICAg ICAgICAgICAgICB8ICAgMTAgKw0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxl ICAgICAgICAgICAgIHwgICAgNCArLQ0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19t dDgxOTVfaGRtaS5jICAgIHwgMjQxMw0KPiArKysrKysrKysrKysrKysrKw0KPiAgZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19tdDgxOTVfaGRtaS5oICAgIHwgIDE0NyArDQo+ICAuLi4vZ3B1 L2RybS9tZWRpYXRlay9tdGtfbXQ4MTk1X2hkbWlfZGRjLmMgICAgfCAgNTQxICsrKysNCj4gIC4u Li9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxOTVfaGRtaV9kZGMuaCAgICB8ICAgMjAgKw0KPiAg Li4uL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE5NV9oZG1pX3JlZ3MuaCAgIHwgIDI3NiArKw0K PiAgNyBmaWxlcyBjaGFuZ2VkLCAzNDEwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE5NV9o ZG1pLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X210ODE5NV9oZG1pLmgNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX210ODE5NV9oZG1pX2RkYy5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxOTVfaGRtaV9kZGMuaA0KPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTk1X2hkbWlfcmVncy5oDQo+ IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcNCj4gYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZw0KPiBpbmRleCAyOTc2ZDIxZTlhMzQuLmNk YTQ2NzJkMjlhNyAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25m aWcNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcNCj4gQEAgLTI4LDMg KzI4LDEzIEBAIGNvbmZpZyBEUk1fTUVESUFURUtfSERNSQ0KPiAgCXNlbGVjdCBQSFlfTVRLX0hE TUkNCj4gIAloZWxwDQo+ICAJICBEUk0vS01TIEhETUkgZHJpdmVyIGZvciBNZWRpYXRlayBTb0Nz DQo+ICsNCj4gK2NvbmZpZyBEUk1fTUVESUFURUtfSERNSV9TVVNQRU5EX0xPV19QT1dFUg0KPiAr CXRyaXN0YXRlICJEUk0gSERNSSBTVVNQRU5EIExPVyBQT1dFUiBTdXBwb3J0IGZvciBNZWRpYXRl ayBTb0NzIg0KPiArCWRlcGVuZHMgb24gRFJNX01FRElBVEVLX0hETUkNCj4gKwloZWxwDQo+ICsJ ICBEUk0vS01TIEhETUkgU1VTUEVORF9MT1dfUE9XRVIgZm9yIE1lZGlhdGVrIFNvQ3MuDQo+ICsJ ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZGlzYWJsZS9lbmFibGUNCj4gKwkg IGNsb2NrIGFuZCBwb3dlciBkb21haW4gd2hlbiBwbGF0Zm9ybSBlbnRlciBzdXNwZW5kLA0KPiAr CSAgYW5kIHRoaXMgY29uZmlnIGRlcGVuZHMgb24gRFJNX01FRElBVEVLX0hETUkuDQo+ICsNCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQ0KPiBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQ0KPiBpbmRleCAzYWJkMjdkN2M5MWQuLmI4NmM4 NjAxNjFiYSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxl DQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQ0KPiBAQCAtMjIsNiAr MjIsOCBAQCBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay1kcm0ubw0KPiAg DQo+ICBtZWRpYXRlay1kcm0taGRtaS1vYmpzIDo9IG10a19jZWMubyBcDQo+ICAJCQkgIG10a19o ZG1pLm8gXA0KPiAtCQkJICBtdGtfaGRtaV9kZGMubw0KPiArCQkJICBtdGtfaGRtaV9kZGMubyBc DQo+ICsJCQkgIG10a19tdDgxOTVfaGRtaS5vIFwNCj4gKwkJCSAgbXRrX210ODE5NV9oZG1pX2Rk Yy5vIFwNCj4gIA0KPiAgb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFS19IRE1JKSArPSBtZWRpYXRl ay1kcm0taGRtaS5vDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X210ODE5NV9oZG1pLmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE5NV9o ZG1pLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wZGMx Yjc2NzAxODYNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX210ODE5NV9oZG1pLmMNCj4gQEAgLTAsMCArMSwyNDEzIEBADQo+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAoYykgMjAx OSBNZWRpYVRlayBJbmMuDQoyMDIxPw0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9h cm0tc21jY2MuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L2Nsay5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L2lvLmg+DQo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ICsjaW5jbHVk ZSA8bGludXgvbWZkL3N5c2Nvbi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3Jh cGguaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgv a3RocmVhZC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvcG1fd2FrZXVwLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3NjZGNfaGVscGVyLmg+ DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kaXNwbGF5aWQuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJt X3Byb2JlX2hlbHBlci5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPg0KPiArDQo+ICsj aW5jbHVkZSAibXRrX2RybV9jcnRjLmgiDQo+ICsjaW5jbHVkZSAibXRrX210ODE5NV9oZG1pX2Rk Yy5oIg0KPiArI2luY2x1ZGUgIm10a19tdDgxOTVfaGRtaS5oIg0KPiArI2luY2x1ZGUgIm10a19t dDgxOTVfaGRtaV9yZWdzLmgiDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+DQo+ ICsNCj4gK2VudW0gaGRtaV9hdWRfaW5wdXRfdHlwZSB7DQo+ICsJSERNSV9BVURfSU5QVVRfSTJT ID0gMCwNCj4gKwlIRE1JX0FVRF9JTlBVVF9TUERJRiwNCj4gK307DQo+ICsNCj4gK2VudW0gaGRt aV9hdWRfaTJzX2ZtdCB7DQo+ICsJSERNSV9JMlNfTU9ERV9SSlRfMjRCSVQgPSAwLA0KPiArCUhE TUlfSTJTX01PREVfUkpUXzE2QklULA0KPiArCUhETUlfSTJTX01PREVfTEpUXzI0QklULA0KPiAr CUhETUlfSTJTX01PREVfTEpUXzE2QklULA0KPiArCUhETUlfSTJTX01PREVfSTJTXzI0QklULA0K PiArCUhETUlfSTJTX01PREVfSTJTXzE2QklUDQo+ICt9Ow0KPiArDQo+ICtlbnVtIGhkbWlfYXVk X21jbGsgew0KPiArCUhETUlfQVVEX01DTEtfMTI4RlMsDQo+ICsJSERNSV9BVURfTUNMS18xOTJG UywNCj4gKwlIRE1JX0FVRF9NQ0xLXzI1NkZTLA0KPiArCUhETUlfQVVEX01DTEtfMzg0RlMsDQo+ ICsJSERNSV9BVURfTUNMS181MTJGUywNCj4gKwlIRE1JX0FVRF9NQ0xLXzc2OEZTLA0KPiArCUhE TUlfQVVEX01DTEtfMTE1MkZTLA0KPiArfTsNCj4gKw0KPiArZW51bSBoZG1pX2F1ZF9jaGFubmVs X3R5cGUgew0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV8xXzAgPSAwLA0KPiArCUhETUlfQVVEX0NI QU5fVFlQRV8xXzEsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzJfMCwNCj4gKwlIRE1JX0FVRF9D SEFOX1RZUEVfMl8xLA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV8zXzAsDQo+ICsJSERNSV9BVURf Q0hBTl9UWVBFXzNfMSwNCj4gKwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8wLA0KPiArCUhETUlfQVVE X0NIQU5fVFlQRV80XzEsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzVfMCwNCj4gKwlIRE1JX0FV RF9DSEFOX1RZUEVfNV8xLA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV82XzAsDQo+ICsJSERNSV9B VURfQ0hBTl9UWVBFXzZfMSwNCj4gKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wLA0KPiArCUhETUlf QVVEX0NIQU5fVFlQRV83XzEsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzNfMF9MUlMsDQo+ICsJ SERNSV9BVURfQ0hBTl9UWVBFXzNfMV9MUlMsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzRfMF9D TFJTLA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV80XzFfQ0xSUywNCj4gKwlIRE1JX0FVRF9DSEFO X1RZUEVfNl8xX0NTLA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0gsDQo+ICsJSERNSV9B VURfQ0hBTl9UWVBFXzZfMV9PSCwNCj4gKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NIUiwNCj4g KwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JILA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV83 XzFfTFNSX1JTUiwNCj4gKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xDX1JDLA0KPiArCUhETUlf QVVEX0NIQU5fVFlQRV83XzFfTFdfUlcsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU0Rf UlNELA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTUywNCj4gKwlIRE1JX0FVRF9D SEFOX1RZUEVfN18xX0xIU19SSFMsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19DSCwN Cj4gKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NTX09ILA0KPiArCUhETUlfQVVEX0NIQU5fVFlQ RV83XzFfQ1NfQ0hSLA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ0hfT0gsDQo+ICsJSERN SV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9DSFIsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9P SF9DSFIsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1NfUlNTX0xTUl9SU1IsDQo+ICsJ SERNSV9BVURfQ0hBTl9UWVBFXzZfMF9DUywNCj4gKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NI LA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0gsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBF XzZfMF9DSFIsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSCwNCj4gKwlIRE1JX0FV RF9DSEFOX1RZUEVfN18wX0xTUl9SU1IsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MQ19S QywNCj4gKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXLA0KPiArCUhETUlfQVVEX0NIQU5f VFlQRV83XzBfTFNEX1JTRCwNCj4gKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1MsDQo+ ICsJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSFNfUkhTLA0KPiArCUhETUlfQVVEX0NIQU5fVFlQ RV83XzBfQ1NfQ0gsDQo+ICsJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DU19PSCwNCj4gKwlIRE1J X0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIUiwNCj4gKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NI X09ILA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ0hfQ0hSLA0KPiArCUhETUlfQVVEX0NI QU5fVFlQRV83XzBfT0hfQ0hSLA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNTX1JTU19M U1JfUlNSLA0KPiArCUhETUlfQVVEX0NIQU5fVFlQRV84XzBfTEhfUkhfQ1MsDQo+ICsJSERNSV9B VURfQ0hBTl9UWVBFX1VOS05PV04gPSAweEZGDQo+ICt9Ow0KPiArDQo+ICtlbnVtIGhkbWlfYXVk X2NoYW5uZWxfc3dhcF90eXBlIHsNCj4gKwlIRE1JX0FVRF9TV0FQX0xSLA0KPiArCUhETUlfQVVE X1NXQVBfTEZFX0NDLA0KPiArCUhETUlfQVVEX1NXQVBfTFNSUywNCj4gKwlIRE1JX0FVRF9TV0FQ X1JMU19SUlMsDQo+ICsJSERNSV9BVURfU1dBUF9MUl9TVEFUVVMsDQo+ICt9Ow0KPiArDQo+ICtz dHJ1Y3QgaGRtaV9hdWRpb19wYXJhbSB7DQo+ICsJZW51bSBoZG1pX2F1ZGlvX2NvZGluZ190eXBl IGF1ZF9jb2RlYzsNCj4gKwllbnVtIGhkbWlfYXVkaW9fc2FtcGxlX3NpemUgYXVkX3NhbXBlX3Np emU7DQo+ICsJZW51bSBoZG1pX2F1ZF9pbnB1dF90eXBlIGF1ZF9pbnB1dF90eXBlOw0KPiArCWVu dW0gaGRtaV9hdWRfaTJzX2ZtdCBhdWRfaTJzX2ZtdDsNCj4gKwllbnVtIGhkbWlfYXVkX21jbGsg YXVkX21jbGs7DQo+ICsJZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgYXVkX2lucHV0X2NoYW5f dHlwZTsNCj4gKwlzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMgY29kZWNfcGFyYW1zOw0KPiArfTsN Cj4gKw0KPiArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG10a19oZG1pX2Nsa19uYW1lc1tNVEtf SERNSV9DTEtfQ09VTlRdID0gew0KPiArCVtNVEtfSERNSV9DTEtfVU5JVlBMTF9ENkQ0XSA9ICJ1 bml2cGxsX2Q2X2Q0IiwNCj4gKwlbTVRLX0hETUlfQ0xLX01TRENQTExfRDJdID0gIm1zZGNwbGxf ZDIiLA0KPiArCVtNVEtfSERNSV9DTEtfSERNSV9BUEJfU0VMXSA9ICJoZG1pX2FwYl9zZWwiLA0K PiArCVtNVEtfSERNSV9VTklWUExMX0Q0RDhdID0gInVuaXZwbGxfZDRfZDgiLA0KPiArCVtNVEtf SERJTV9IRENQX1NFTF0gPSAiaGRjcF9zZWwiLA0KPiArCVtNVEtfSERNSV9IRENQXzI0TV9TRUxd ID0gImhkY3AyNF9zZWwiLA0KPiArCVtNVEtfSERNSV9WUFBfU1BMSVRfSERNSV0gPSAic3BsaXRf aGRtaSIsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRt aV9jdHhfZnJvbV9icmlkZ2Uoc3RydWN0DQo+IGRybV9icmlkZ2UgKmIpDQo+ICt7DQo+ICsJcmV0 dXJuIGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgbXRrX2hkbWksIGJyaWRnZSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19oZG1pICpoZG1pX2N0eF9mcm9tX2Nvbm4oc3Ry dWN0DQo+IGRybV9jb25uZWN0b3IgKmMpDQo+ICt7DQo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihj LCBzdHJ1Y3QgbXRrX2hkbWksIGNvbm4pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IG10 a19oZG1pX2RkYyAqaGRtaV9kZGNfY3R4X2Zyb21fbXRrX2hkbWkoc3RydWN0DQo+IG10a19oZG1p ICpoZG1pKQ0KPiArew0KPiArCXJldHVybiBjb250YWluZXJfb2YoaGRtaS0+ZGRjX2FkcHQsIHN0 cnVjdCBtdGtfaGRtaV9kZGMsIGFkYXApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTMyIG10a19o ZG1pX3JlYWQoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0KQ0KPiArew0KPiArCXJl dHVybiByZWFkbChoZG1pLT5yZWdzICsgb2Zmc2V0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgbXRrX2hkbWlfd3JpdGUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0LCB1MzIN Cj4gdmFsKQ0KPiArew0KPiArCXdyaXRlbCh2YWwsIGhkbWktPnJlZ3MgKyBvZmZzZXQpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfY2xlYXJfYml0cyhzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWksIHUzMg0KPiBvZmZzZXQsDQo+ICsJCQkJICAgICAgIHUzMiBiaXRzKQ0K PiArew0KPiArCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaS0+cmVncyArIG9mZnNldDsNCj4gKwl1 MzIgdG1wOw0KPiArDQo+ICsJdG1wID0gcmVhZGwocmVnKTsNCj4gKwl0bXAgJj0gfmJpdHM7DQo+ ICsJd3JpdGVsKHRtcCwgcmVnKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG10 a19oZG1pX3NldF9iaXRzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyDQo+IG9mZnNldCwNCj4g KwkJCQkgICAgIHUzMiBiaXRzKQ0KPiArew0KPiArCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaS0+ cmVncyArIG9mZnNldDsNCj4gKwl1MzIgdG1wOw0KPiArDQo+ICsJdG1wID0gcmVhZGwocmVnKTsN Cj4gKwl0bXAgfD0gYml0czsNCj4gKwl3cml0ZWwodG1wLCByZWcpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBtdGtfaGRtaV9tYXNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNl dCwgdTMyDQo+IHZhbCwgdTMyIG1hc2spDQo+ICt7DQo+ICsJdm9pZCBfX2lvbWVtICpyZWcgPSBo ZG1pLT5yZWdzICsgb2Zmc2V0Ow0KPiArCXUzMiB0bXA7DQo+ICsNCj4gKwl0bXAgPSByZWFkbChy ZWcpOw0KPiArCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7DQo+ICsJd3JpdGVs KHRtcCwgcmVnKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG10a19oZG1pX2Ns cl9hbGxfaW50X3N0YXR1cyhzdHJ1Y3QgbXRrX2hkbWkNCj4gKmhkbWkpDQo+ICt7DQo+ICsJLypj bGVhciBhbGwgdHggaXJxKi8NCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBUT1BfSU5UX0NMUjAw LCAweGZmZmZmZmZmKTsNCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBUT1BfSU5UX0NMUjAwLCAw eDAwMDAwMDAwKTsNCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBUT1BfSU5UX0NMUjAxLCAweGZm ZmZmZmZmKTsNCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBUT1BfSU5UX0NMUjAxLCAweDAwMDAw MDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG10a19oZG1pX2Rpc2FibGVf YWxsX2ludChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsJLypkaXNhYmxlIGFsbCB0 eCBpcnEqLw0KPiArCW10a19oZG1pX3dyaXRlKGhkbWksIFRPUF9JTlRfTUFTSzAwLCAweDAwMDAw MDAwKTsNCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBUT1BfSU5UX01BU0swMSwgMHgwMDAwMDAw MCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfaGRtaV9lbl9oZGNwX3Jl YXV0aF9pbnQoc3RydWN0IG10a19oZG1pDQo+ICpoZG1pLA0KPiArCQkJCQkgICAgICAgYm9vbCBl bmFibGUpDQo+ICt7DQo+ICsJaWYgKGVuYWJsZSkNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBU T1BfSU5UX01BU0swMCwNCj4gKwkJCSAgICAgIEhEQ1AyWF9SWF9SRUFVVEhfUkVRX0REQ01fSU5U X1VOTUFTSywNCj4gKwkJCSAgICAgIEhEQ1AyWF9SWF9SRUFVVEhfUkVRX0REQ01fSU5UX1VOTUFT Syk7DQo+ICsJZWxzZQ0KPiArCQltdGtfaGRtaV9tYXNrKGhkbWksIFRPUF9JTlRfTUFTSzAwLA0K PiArCQkJICAgICAgSERDUDJYX1JYX1JFQVVUSF9SRVFfRERDTV9JTlRfTUFTSywNCj4gKwkJCSAg ICAgIEhEQ1AyWF9SWF9SRUFVVEhfUkVRX0REQ01fSU5UX1VOTUFTSyk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfaGRtaV9lbmFibGVfaHBkX3BvcmRfaXJxKHN0cnVjdCBt dGtfaGRtaQ0KPiAqaGRtaSwNCj4gKwkJCQkJCWJvb2wgZW5hYmxlKQ0KPiArew0KPiArCWlmIChl bmFibGUpDQo+ICsJCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0lOVF9NQVNLMDAsIDB4MDAwMDAw MGYsDQo+IDB4MDAwMDAwMGYpOw0KPiArCWVsc2UNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBU T1BfSU5UX01BU0swMCwgMHgwMDAwMDAwMCwNCj4gMHgwMDAwMDAwZik7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfaGRtaV9jbHJfaHRwbGdfcG9yZF9pcnEoc3RydWN0IG10 a19oZG1pDQo+ICpoZG1pKQ0KPiArew0KPiArCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0lOVF9D TFIwMCwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZik7DQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBU T1BfSU5UX0NMUjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDBmKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGlubGluZSB2b2lkIG10a19oZG1pX3NldF9zd19ocGQoc3RydWN0IG10a19oZG1pICpoZG1p LCBib29sDQo+IGhpZ2gpDQo+ICt7DQo+ICsJaWYgKGhpZ2gpDQo+ICsJCW10a19oZG1pX21hc2so aGRtaSwgSERNSVRYX0NPTkZJRywgMHgxIDw8DQo+IEhETUlUWF9TV19IUERfU0hJRlQsDQo+ICsJ CQkgICAgICBIRE1JVFhfU1dfSFBEKTsNCj4gKwllbHNlDQo+ICsJCW10a19oZG1pX21hc2soaGRt aSwgSERNSVRYX0NPTkZJRywgMHgwIDw8DQo+IEhETUlUWF9TV19IUERfU0hJRlQsDQo+ICsJCQkg ICAgICBIRE1JVFhfU1dfSFBEKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG10 a19oZG1pX2ZvcmNlX2hkY3BfaHBkKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkNCj4gK3sNCj4gKwkv KiBmb3JjZSBIRENQIEhQRCB0byAxKi8NCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIEhEQ1AyWF9D VFJMXzAsIEhEQ1AyWF9IUERfT1ZSLA0KPiBIRENQMlhfSFBEX09WUik7DQo+ICsJbXRrX2hkbWlf bWFzayhoZG1pLCBIRENQMlhfQ1RSTF8wLCBIRENQMlhfSFBEX1NXLA0KPiBIRENQMlhfSFBEX1NX KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfZGlzYWJsZV9oZGNwX2VuY3J5 cHQoc3RydWN0IG10a19oZG1pICpoZG1pKQ0KPiArew0KPiArCW10a19oZG1pX21hc2soaGRtaSwg SERDUDJYX0NUUkxfMCwgMHgwIDw8DQo+IEhEQ1AyWF9FTkNSWVBUX0VOX1NISUZULA0KPiArCQkg ICAgICBIRENQMlhfRU5DUllQVF9FTik7DQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBIRENQMVhf Q1RSTCwgMHgwIDw8IEhEQ1AxWF9FTkNfRU5fU0hJRlQsDQo+ICsJCSAgICAgIEhEQ1AxWF9FTkNf RU4pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV95dXY0MjBfZG93bnNhbXBs ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wNCj4gZW5hYmxlKQ0KPiArew0KPiArCWlmIChl bmFibGUpIHsNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBIRE1JVFhfQ09ORklHLA0KPiArCQkJ ICAgICAgSERNSV9ZVVY0MjBfTU9ERSB8IEhETUlUWF9TV19IUEQsDQo+ICsJCQkgICAgICBIRE1J X1lVVjQyMF9NT0RFIHwgSERNSVRYX1NXX0hQRCk7DQo+ICsJCW10a19oZG1pX21hc2soaGRtaSwg VklEX0RPV05TQU1QTEVfQ09ORklHLA0KPiArCQkJICAgICAgQzQ0NF9DNDIyX0NPTkZJR19FTkFC TEUsDQo+IEM0NDRfQzQyMl9DT05GSUdfRU5BQkxFKTsNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1p LCBWSURfRE9XTlNBTVBMRV9DT05GSUcsDQo+ICsJCQkgICAgICBDNDIyX0M0MjBfQ09ORklHX0VO QUJMRSwNCj4gQzQyMl9DNDIwX0NPTkZJR19FTkFCTEUpOw0KPiArCQltdGtfaGRtaV9tYXNrKGhk bWksIFZJRF9ET1dOU0FNUExFX0NPTkZJRywgMCwNCj4gKwkJCSAgICAgIEM0MjJfQzQyMF9DT05G SUdfQllQQVNTKTsNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBWSURfRE9XTlNBTVBMRV9DT05G SUcsDQo+ICsJCQkgICAgICBDNDIyX0M0MjBfQ09ORklHX09VVF9DQl9PUl9DUiwNCj4gKwkJCSAg ICAgIEM0MjJfQzQyMF9DT05GSUdfT1VUX0NCX09SX0NSKTsNCj4gKwkJbXRrX2hkbWlfbWFzayho ZG1pLCBWSURfT1VUX0ZPUk1BVCwNCj4gKwkJCSAgICAgIE9VVFBVVF9GT1JNQVRfREVNVVhfNDIw X0VOQUJMRSwNCj4gKwkJCSAgICAgIE9VVFBVVF9GT1JNQVRfREVNVVhfNDIwX0VOQUJMRSk7DQo+ ICsJfSBlbHNlIHsNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBIRE1JVFhfQ09ORklHLCAwIHwg SERNSVRYX1NXX0hQRCwNCj4gKwkJCSAgICAgIEhETUlfWVVWNDIwX01PREUgfCBIRE1JVFhfU1df SFBEKTsNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBWSURfRE9XTlNBTVBMRV9DT05GSUcsIDAs DQo+ICsJCQkgICAgICBDNDQ0X0M0MjJfQ09ORklHX0VOQUJMRSk7DQo+ICsJCW10a19oZG1pX21h c2soaGRtaSwgVklEX0RPV05TQU1QTEVfQ09ORklHLCAwLA0KPiArCQkJICAgICAgQzQyMl9DNDIw X0NPTkZJR19FTkFCTEUpOw0KPiArCQltdGtfaGRtaV9tYXNrKGhkbWksIFZJRF9ET1dOU0FNUExF X0NPTkZJRywNCj4gKwkJCSAgICAgIEM0MjJfQzQyMF9DT05GSUdfQllQQVNTLA0KPiBDNDIyX0M0 MjBfQ09ORklHX0JZUEFTUyk7DQo+ICsJCW10a19oZG1pX21hc2soaGRtaSwgVklEX0RPV05TQU1Q TEVfQ09ORklHLCAwLA0KPiArCQkJICAgICAgQzQyMl9DNDIwX0NPTkZJR19PVVRfQ0JfT1JfQ1Ip Ow0KPiArCQltdGtfaGRtaV9tYXNrKGhkbWksIFZJRF9PVVRfRk9STUFULCAwLA0KPiArCQkJICAg ICAgT1VUUFVUX0ZPUk1BVF9ERU1VWF80MjBfRU5BQkxFKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBib29sIG10a19oZG1pX3RtZHNfb3Zlcl8zNDBNKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSkNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIHBpeGVsX2NsaywgdG1kc19jbGs7DQo+ICsNCj4g KwlwaXhlbF9jbGsgPSBoZG1pLT5tb2RlLmNsb2NrICogMTAwMDsgLy9pbiBIWg0KPiArDQo+ICsJ LyogVE1EUyBjbGsgZnJlcXVlbmN5ICovDQo+ICsJaWYgKGhkbWktPmNvbG9yX2RlcHRoID09IEhE TUlfOF9CSVQpDQo+ICsJCXRtZHNfY2xrID0gcGl4ZWxfY2xrOw0KPiArCWVsc2UgaWYgKGhkbWkt PmNvbG9yX2RlcHRoID09IEhETUlfMTBfQklUKQ0KPiArCQl0bWRzX2NsayA9IHBpeGVsX2NsayAq IDUgLyA0OyAvLyAqMS4yNQ0KPiArCWVsc2UgaWYgKGhkbWktPmNvbG9yX2RlcHRoID09IEhETUlf MTJfQklUKQ0KPiArCQl0bWRzX2NsayA9IHBpeGVsX2NsayAqIDMgLyAyOyAvLyAqMS41DQo+ICsJ ZWxzZSBpZiAoaGRtaS0+Y29sb3JfZGVwdGggPT0gSERNSV8xNl9CSVQpDQo+ICsJCXRtZHNfY2xr ID0gcGl4ZWxfY2xrICogMjsgLy8gKjINCj4gKwllbHNlDQo+ICsJCXJldHVybiAtRUlOVkFMOw0K PiArDQo+ICsJaWYgKCh0bWRzX2NsayA+PSAzNDAwMDAwMDApICYmIChoZG1pLT5jc3AgIT0NCj4g SERNSV9DT0xPUlNQQUNFX1lVVjQyMCkpDQo+ICsJCXJldHVybiB0cnVlOw0KPiArDQo+ICsJcmV0 dXJuIGZhbHNlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfZW5h YmxlX3NjcmFtYmxpbmcoc3RydWN0IG10a19oZG1pICpoZG1pLA0KPiArCQkJCQkgICAgICBib29s IGVuYWJsZSkNCj4gK3sNCj4gKwl1ZGVsYXkoMTAwKTsNCj4gKw0KPiArCWlmIChlbmFibGUpDQo+ ICsJCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0NGRzAwLCBTQ1JfT04gfCBIRE1JMl9PTiwNCj4g KwkJCSAgICAgIFNDUl9PTiB8IEhETUkyX09OKTsNCj4gKwllbHNlDQo+ICsJCW10a19oZG1pX21h c2soaGRtaSwgVE9QX0NGRzAwLCBTQ1JfT0ZGIHwgSERNSTJfT0ZGLA0KPiArCQkJICAgICAgU0NS X09OIHwgSERNSTJfT04pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2hk bWlfaGlnaF90bWRzX2Nsb2NrX3JhdGlvKHN0cnVjdCBtdGtfaGRtaQ0KPiAqaGRtaSwNCj4gKwkJ CQkJCSAgYm9vbCBlbmFibGUpDQo+ICt7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19o ZG1pXzQ4MHBfNTc2cF9zZXR0aW5nKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkNCj4gK3sNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfdmlkX2JsYWNrKHN0cnVjdCBtdGtfaGRt aSAqaGRtaSwgYm9vbCBibGFjaykNCj4gK3sNCj4gKwlpZiAoYmxhY2spDQo+ICsJCW10a19oZG1p X21hc2soaGRtaSwgVE9QX1ZNVVRFX0NGRzEsIFJFR19WTVVURV9FTiwNCj4gUkVHX1ZNVVRFX0VO KTsNCj4gKwllbHNlDQo+ICsJCW10a19oZG1pX21hc2soaGRtaSwgVE9QX1ZNVVRFX0NGRzEsIDAs IFJFR19WTVVURV9FTik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1 ZF9tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkNCj4gK3sNCj4gKwlpZiAobXRrX2hkbWlfcmVh ZChoZG1pLCBBSVBfQ1RSTCkgJiBEU0RfRU4pDQo+ICsJCW10a19oZG1pX21hc2soaGRtaSwgQUlQ X1RYQ1RSTCwNCj4gKwkJCSAgICAgIERTRF9NVVRFX0RBVEEgfCBBVURfTVVURV9GSUZPX0VOLA0K PiArCQkJICAgICAgRFNEX01VVEVfREFUQSB8IEFVRF9NVVRFX0ZJRk9fRU4pOw0KPiArCWVsc2UN Cj4gKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBBSVBfVFhDVFJMLCBBVURfTVVURV9GSUZPX0VOLA0K PiArCQkJICAgICAgQVVEX01VVEVfRklGT19FTik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IG10a19oZG1pX2h3X2F1ZF91bm11dGUoc3RydWN0IG10a19oZG1pICpoZG1pKQ0KPiArew0KPiAr CW10a19oZG1pX21hc2soaGRtaSwgQUlQX1RYQ1RSTCwgQVVEX01VVEVfRElTLA0KPiBBVURfTVVU RV9GSUZPX0VOKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfcmVzZXQo c3RydWN0IG10a19oZG1pICpoZG1pKQ0KPiArew0KPiArCW10a19oZG1pX21hc2soaGRtaSwgSERN SVRYX0NPTkZJRywgMHgwIDw8IEhETUlUWF9TV19SU1RCX1NISUZULA0KPiArCQkgICAgICBIRE1J VFhfU1dfUlNUQik7DQo+ICsJdWRlbGF5KDEpOw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgSERN SVRYX0NPTkZJRywgMHgxIDw8IEhETUlUWF9TV19SU1RCX1NISUZULA0KPiArCQkgICAgICBIRE1J VFhfU1dfUlNUQik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2VuYWJsZV9o ZG1pX21vZGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sDQo+IGVuYWJsZSkNCj4gK3sNCj4g KwlpZiAoZW5hYmxlKQ0KPiArCQltdGtfaGRtaV9tYXNrKGhkbWksIFRPUF9DRkcwMCwgSERNSV9N T0RFX0hETUksDQo+IEhETUlfTU9ERV9IRE1JKTsNCj4gKwllbHNlDQo+ICsJCW10a19oZG1pX21h c2soaGRtaSwgVE9QX0NGRzAwLCBIRE1JX01PREVfRFZJLA0KPiBIRE1JX01PREVfSERNSSk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIG10a19oZG1pX3NpbmtfaXNfaGRtaV9kZXZpY2Uoc3Ry dWN0IG10a19oZG1pICpoZG1pKQ0KPiArew0KPiArCWlmIChoZG1pLT5kdmlfbW9kZSkNCj4gKwkJ cmV0dXJuIGZhbHNlOw0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkIG10a19oZG1pX3NldF9kZWVwX2NvbG9yKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSwgYm9vbA0KPiBpc19oZG1pX3NpbmspDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGRlZXBfY29s b3IgPSAwOw0KPiArDQo+ICsJLy95Y2JjcjQyMiAxMmJpdCBub3QgZGVlcCBjb2xvcg0KdXNlIC8q Ki8NCj4gKwlpZiAoaGRtaS0+Y3NwID09IEhETUlfQ09MT1JTUEFDRV9ZVVY0MjIpDQo+ICsJCWRl ZXBfY29sb3IgPSBERUVQQ09MT1JfTU9ERV84QklUOw0KPiArCWVsc2UNCmFkZCB7fQ0KPiArCQlp ZiAoaGRtaS0+Y29sb3JfZGVwdGggPT0gSERNSV84X0JJVCkNCj4gKwkJCWRlZXBfY29sb3IgPSBE RUVQQ09MT1JfTU9ERV84QklUOw0KPiArCQllbHNlIGlmIChoZG1pLT5jb2xvcl9kZXB0aCA9PSBI RE1JXzEwX0JJVCkNCj4gKwkJCWRlZXBfY29sb3IgPSBERUVQQ09MT1JfTU9ERV8xMEJJVDsNCj4g KwkJZWxzZSBpZiAoaGRtaS0+Y29sb3JfZGVwdGggPT0gSERNSV8xMl9CSVQpDQo+ICsJCQlkZWVw X2NvbG9yID0gREVFUENPTE9SX01PREVfMTJCSVQ7DQo+ICsJCWVsc2UgaWYgKGhkbWktPmNvbG9y X2RlcHRoID09IEhETUlfMTZfQklUKQ0KPiArCQkJZGVlcF9jb2xvciA9IERFRVBDT0xPUl9NT0RF XzE2QklUOw0KPiArCQllbHNlDQo+ICsJCQlXQVJOX09OKDEpOw0KPiArDQo+ICsJbXRrX2hkbWlf bWFzayhoZG1pLCBUT1BfQ0ZHMDAsIGRlZXBfY29sb3IsDQo+IERFRVBDT0xPUl9NT0RFX01BU0tC SVQpOw0KPiArDQo+ICsJLyogR0NQICovDQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBUT1BfQ0ZH MDAsIDAsIERFRVBDT0xPUl9QQVRfRU4pOw0KPiArCWlmICgoaXNfaGRtaV9zaW5rKSAmJiAoZGVl cF9jb2xvciAhPSBERUVQQ09MT1JfTU9ERV84QklUKSkNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1p LCBUT1BfTUlTQ19DVExSLCBERUVQX0NPTE9SX0FERCwNCj4gKwkJCSAgICAgIERFRVBfQ09MT1Jf QUREKTsNCj4gKwllbHNlDQo+ICsJCW10a19oZG1pX21hc2soaGRtaSwgVE9QX01JU0NfQ1RMUiwg MCwgREVFUF9DT0xPUl9BREQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV9o d19hdWRpb19pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1OA0KPiAqYnVmZmVyLA0K PiArCQkJCQl1OCBsZW4pDQo+ICt7DQo+ICsJZW51bSBoZG1pX2luZm9mcmFtZV90eXBlIGZyYW1l X3R5cGU7DQo+ICsJdTggZnJhbWVfdmVyOw0KPiArCXU4IGZyYW1lX2xlbjsNCj4gKwl1OCBjaGVj a3N1bTsNCj4gKw0KPiArCWZyYW1lX3R5cGUgPSBidWZmZXJbMF07DQo+ICsJZnJhbWVfdmVyID0g YnVmZmVyWzFdOw0KPiArCWZyYW1lX2xlbiA9IGJ1ZmZlclsyXTsNCj4gKwljaGVja3N1bSA9IGJ1 ZmZlclszXTsNCj4gKw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0lORk9fRU4sIEFVRF9E SVNfV1IgfCBBVURfRElTLA0KPiArCQkgICAgICBBVURfRU5fV1IgfCBBVURfRU4pOw0KPiArCW10 a19oZG1pX21hc2soaGRtaSwgVE9QX0lORk9fUlBULCBBVURfUlBUX0RJUywgQVVEX1JQVF9FTik7 DQo+ICsNCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBUT1BfQUlGX0hFQURFUiwNCj4gKwkJICAg ICAgIChmcmFtZV9sZW4gPDwgMTYpICsgKGZyYW1lX3ZlciA8PCA4KSArDQo+ICsJCQkgICAgICAg KGZyYW1lX3R5cGUgPDwgMCkpOw0KSG93IGFib3V0IHVzaW5nIG1hY3JvIHRvIGNvbnZlcnQgYnl0 ZXMgaW50byBhbiB1aW50MzIgdmFsdWU/DQoNCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBUT1Bf QUlGX1BLVDAwLA0KPiArCQkgICAgICAgKGJ1ZmZlcls2XSA8PCAyNCkgKyAoYnVmZmVyWzVdIDw8 IDE2KSArDQo+ICsJCQkgICAgICAgKGJ1ZmZlcls0XSA8PCA4KSArIChidWZmZXJbM10gPDwgMCkp Ow0KPiArCW10a19oZG1pX3dyaXRlKGhkbWksIFRPUF9BSUZfUEtUMDEsDQo+ICsJCSAgICAgICAo YnVmZmVyWzhdIDw8IDgpICsgKGJ1ZmZlcls3XSA8PCAwKSk7DQo+ICsJbXRrX2hkbWlfd3JpdGUo aGRtaSwgVE9QX0FJRl9QS1QwMiwgMCk7DQo+ICsJbXRrX2hkbWlfd3JpdGUoaGRtaSwgVE9QX0FJ Rl9QS1QwMywgMCk7DQo+ICsNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIFRPUF9JTkZPX1JQVCwg QVVEX1JQVF9FTiwgQVVEX1JQVF9FTik7DQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBUT1BfSU5G T19FTiwgQVVEX0VOX1dSIHwgQVVEX0VOLA0KPiArCQkgICAgICBBVURfRU5fV1IgfCBBVURfRU4p Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdmlfaW5mb2ZyYW1lKHN0 cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTgNCj4gKmJ1ZmZlciwgdTggbGVuKQ0KPiArew0KPiArCW10 a19oZG1pX21hc2soaGRtaSwgVE9QX0lORk9fRU4sIEFWSV9ESVNfV1IgfCBBVklfRElTLA0KPiAr CQkgICAgICBBVklfRU5fV1IgfCBBVklfRU4pOw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgVE9Q X0lORk9fUlBULCBBVklfUlBUX0RJUywgQVZJX1JQVF9FTik7DQo+ICsNCj4gKwltdGtfaGRtaV93 cml0ZShoZG1pLCBUT1BfQVZJX0hFQURFUiwNCj4gKwkJICAgICAgIChidWZmZXJbMl0gPDwgMTYp ICsgKGJ1ZmZlclsxXSA8PCA4KSArDQo+IChidWZmZXJbMF0gPDwgMCkpOw0KPiArDQo+ICsJbXRr X2hkbWlfd3JpdGUoaGRtaSwgVE9QX0FWSV9QS1QwMCwNCj4gKwkJICAgICAgIChidWZmZXJbNl0g PDwgMjQpICsgKGJ1ZmZlcls1XSA8PCAxNikgKw0KPiArCQkJICAgICAgIChidWZmZXJbNF0gPDwg OCkgKyAoYnVmZmVyWzNdIDw8IDApKTsNCj4gKw0KPiArCW10a19oZG1pX3dyaXRlKGhkbWksIFRP UF9BVklfUEtUMDEsDQo+ICsJCSAgICAgICAoYnVmZmVyWzldIDw8IDE2KSArIChidWZmZXJbOF0g PDwgOCkgKw0KPiAoYnVmZmVyWzddIDw8IDApKTsNCj4gKw0KPiArCW10a19oZG1pX3dyaXRlKGhk bWksIFRPUF9BVklfUEtUMDIsDQo+ICsJCSAgICAgICAoYnVmZmVyWzEzXSA8PCAyNCkgKyAoYnVm ZmVyWzEyXSA8PCAxNikgKw0KPiArCQkJICAgICAgIChidWZmZXJbMTFdIDw8IDgpICsgKGJ1ZmZl clsxMF0gPDwgMCkpOw0KPiArDQo+ICsJbXRrX2hkbWlfd3JpdGUoaGRtaSwgVE9QX0FWSV9QS1Qw MywNCj4gKwkJICAgICAgIChidWZmZXJbMTZdIDw8IDE2KSArIChidWZmZXJbMTVdIDw8IDgpICsN Cj4gKwkJCSAgICAgICAoYnVmZmVyWzE0XSA8PCAwKSk7DQo+ICsNCj4gKwltdGtfaGRtaV93cml0 ZShoZG1pLCBUT1BfQVZJX1BLVDA0LCAwKTsNCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBUT1Bf QVZJX1BLVDA1LCAwKTsNCj4gKw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0lORk9fUlBU LCBBVklfUlBUX0VOLCBBVklfUlBUX0VOKTsNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIFRPUF9J TkZPX0VOLCBBVklfRU5fV1IgfCBBVklfRU4sDQo+ICsJCSAgICAgIEFWSV9FTl9XUiB8IEFWSV9F Tik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3NwZF9pbmZvZnJhbWUo c3RydWN0IG10a19oZG1pICpoZG1pLCB1OA0KPiAqYnVmZmVyLCB1OCBsZW4pDQo+ICt7DQo+ICsJ bXRrX2hkbWlfbWFzayhoZG1pLCBUT1BfSU5GT19FTiwgU1BEX0RJU19XUiB8IFNQRF9ESVMsDQo+ ICsJCSAgICAgIFNQRF9FTl9XUiB8IFNQRF9FTik7DQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBU T1BfSU5GT19SUFQsIFNQRF9SUFRfRElTLCBTUERfUlBUX0VOKTsNCj4gKw0KPiArCW10a19oZG1p X3dyaXRlKGhkbWksIFRPUF9TUERJRl9IRUFERVIsDQo+ICsJCSAgICAgICAoYnVmZmVyWzJdIDw8 IDE2KSArIChidWZmZXJbMV0gPDwgOCkgKw0KPiAoYnVmZmVyWzBdIDw8IDApKTsNCj4gKw0KPiAr CW10a19oZG1pX3dyaXRlKGhkbWksIFRPUF9TUERJRl9QS1QwMCwNCj4gKwkJICAgICAgIChidWZm ZXJbNl0gPDwgMjQpICsgKGJ1ZmZlcls1XSA8PCAxNikgKw0KPiArCQkJICAgICAgIChidWZmZXJb NF0gPDwgOCkgKyAoYnVmZmVyWzNdIDw8IDApKTsNCj4gKw0KPiArCW10a19oZG1pX3dyaXRlKGhk bWksIFRPUF9TUERJRl9QS1QwMSwNCj4gKwkJICAgICAgIChidWZmZXJbOV0gPDwgMTYpICsgKGJ1 ZmZlcls4XSA8PCA4KSArDQo+IChidWZmZXJbN10gPDwgMCkpOw0KPiArDQo+ICsJbXRrX2hkbWlf d3JpdGUoaGRtaSwgVE9QX1NQRElGX1BLVDAyLA0KPiArCQkgICAgICAgKGJ1ZmZlclsxM10gPDwg MjQpICsgKGJ1ZmZlclsxMl0gPDwgMTYpICsNCj4gKwkJCSAgICAgICAoYnVmZmVyWzExXSA8PCA4 KSArIChidWZmZXJbMTBdIDw8IDApKTsNCj4gKw0KPiArCW10a19oZG1pX3dyaXRlKGhkbWksIFRP UF9TUERJRl9QS1QwMywNCj4gKwkJICAgICAgIChidWZmZXJbMTZdIDw8IDE2KSArIChidWZmZXJb MTVdIDw8IDgpICsNCj4gKwkJCSAgICAgICAoYnVmZmVyWzE0XSA8PCAwKSk7DQo+ICsNCj4gKwlt dGtfaGRtaV93cml0ZShoZG1pLCBUT1BfU1BESUZfUEtUMDQsDQo+ICsJCSAgICAgICAoYnVmZmVy WzIwXSA8PCAyNCkgKyAoYnVmZmVyWzE5XSA8PCAxNikgKw0KPiArCQkJICAgICAgIChidWZmZXJb MThdIDw8IDgpICsgKGJ1ZmZlclsxN10gPDwgMCkpOw0KPiArDQo+ICsJbXRrX2hkbWlfd3JpdGUo aGRtaSwgVE9QX1NQRElGX1BLVDA1LA0KPiArCQkgICAgICAgKGJ1ZmZlclsyM10gPDwgMTYpICsg KGJ1ZmZlclsyMl0gPDwgOCkgKw0KPiArCQkJICAgICAgIChidWZmZXJbMjFdIDw8IDApKTsNCj4g Kw0KPiArCW10a19oZG1pX3dyaXRlKGhkbWksIFRPUF9TUERJRl9QS1QwNiwNCj4gKwkJICAgICAg IChidWZmZXJbMjddIDw8IDI0KSArIChidWZmZXJbMjZdIDw8IDE2KSArDQo+ICsJCQkgICAgICAg KGJ1ZmZlclsyNV0gPDwgOCkgKyAoYnVmZmVyWzI0XSA8PCAwKSk7DQo+ICsNCj4gKwltdGtfaGRt aV93cml0ZShoZG1pLCBUT1BfU1BESUZfUEtUMDcsDQo+ICsJCSAgICAgICAoYnVmZmVyWzMwXSA8 PCAxNikgKyAoYnVmZmVyWzI5XSA8PCA4KSArDQo+ICsJCQkgICAgICAgKGJ1ZmZlclsyOF0gPDwg MCkpOw0KPiArDQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBUT1BfSU5GT19SUFQsIFNQRF9SUFRf RU4sIFNQRF9SUFRfRU4pOw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0lORk9fRU4sIFNQ RF9FTl9XUiB8IFNQRF9FTiwNCj4gKwkJICAgICAgU1BEX0VOX1dSIHwgU1BEX0VOKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoc3RydWN0 IG10a19oZG1pICpoZG1pKQ0KPiArew0KPiArCXN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyAqcGFy YW1zID0gJmhkbWktPmF1ZF9wYXJhbS0NCj4gPmNvZGVjX3BhcmFtczsNCj4gKwlzdHJ1Y3QgaGRt aV9hdWRpb19pbmZvZnJhbWUgZnJhbWU7DQo+ICsJdTggYnVmZmVyWzE0XTsNCj4gKwlzc2l6ZV90 IGVycjsNCj4gKw0KdXNlIGRldl9kYmcoKT8NCj4gKwlwcl9pbmZvKCJIRE1JX0NPREVDX1BBUkFN UzogYXVkaW8gaW5mb2ZyYW1lXG4iKTsNCj4gKwlwcl9pbmZvKCJ0eXBlICVkXG4iLCBwYXJhbXMt PmNlYS50eXBlKTsNCj4gKwlwcl9pbmZvKCJ2ZXJzaW9uICVkXG4iLCBwYXJhbXMtPmNlYS52ZXJz aW9uKTsNCj4gKwlwcl9pbmZvKCJsZW5ndGggJWRcbiIsIHBhcmFtcy0+Y2VhLmxlbmd0aCk7DQo+ ICsJcHJfaW5mbygiY2hhbm5lbHMgJWRcbiIsIHBhcmFtcy0+Y2VhLmNoYW5uZWxzKTsNCj4gKwlw cl9pbmZvKCJjb2RpbmdfdHlwZSAlZFxuIiwgcGFyYW1zLT5jZWEuY29kaW5nX3R5cGUpOw0KPiAr CXByX2luZm8oInNhbXBsZV9zaXplICVkXG4iLCBwYXJhbXMtPmNlYS5zYW1wbGVfc2l6ZSk7DQo+ ICsJcHJfaW5mbygic2FtcGxlX2ZyZXF1ZW5jeSAlZFxuIiwgcGFyYW1zLT5jZWEuc2FtcGxlX2Zy ZXF1ZW5jeSk7DQo+ICsJcHJfaW5mbygiY29kaW5nX3R5cGVfZXh0ICVkXG4iLCBwYXJhbXMtPmNl YS5jb2RpbmdfdHlwZV9leHQpOw0KPiArCXByX2luZm8oImNoYW5uZWxfYWxsb2NhdGlvbiAlZFxu IiwgcGFyYW1zLQ0KPiA+Y2VhLmNoYW5uZWxfYWxsb2NhdGlvbik7DQo+ICsNCj4gKwltZW1jcHko JmZyYW1lLCAmcGFyYW1zLT5jZWEsIHNpemVvZihzdHJ1Y3QNCj4gaGRtaV9hdWRpb19pbmZvZnJh bWUpKTsNCj4gKw0KPiArCWVyciA9IGhkbWlfYXVkaW9faW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBi dWZmZXIsDQo+IHNpemVvZihidWZmZXIpKTsNCj4gKwlpZiAoZXJyIDwgMCkNCj4gKwkJcmV0dXJu IGVycjsNCj4gKw0KPiArCW10a19oZG1pX2h3X2F1ZGlvX2luZm9mcmFtZShoZG1pLCBidWZmZXIs IHNpemVvZihidWZmZXIpKTsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgbXRrX2hkbWlfaHdfc2VuZF9hdWRfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9v bA0KPiBlbmFibGUpDQo+ICt7DQo+ICsJaWYgKCFlbmFibGUpDQo+ICsJCW10a19oZG1pX21hc2so aGRtaSwgQUlQX1RYQ1RSTCwgQVVEX1BBQ0tFVF9EUk9QLA0KPiArCQkJICAgICAgQVVEX1BBQ0tF VF9EUk9QKTsNCj4gKwllbHNlDQo+ICsJCW10a19oZG1pX21hc2soaGRtaSwgQUlQX1RYQ1RSTCwg MCwgQVVEX1BBQ0tFVF9EUk9QKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG10 a19oZG1pX2h3X3NlbmRfYXZfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsJ LypHQ1AgcGFja2V0ICovDQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBUT1BfQ0ZHMDEsIDAsIENQ X0NMUl9NVVRFX0VOKTsNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIFRPUF9DRkcwMSwgMCwgQ1Bf U0VUX01VVEVfRU4pOw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0lORk9fUlBULCAwLCBD UF9SUFRfRU4pOw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0lORk9fRU4sIDAsIENQX0VO IHwgQ1BfRU5fV1IpOw0KPiArDQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBUT1BfQ0ZHMDEsIDAs IENQX0NMUl9NVVRFX0VOKTsNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIFRPUF9DRkcwMSwgQ1Bf U0VUX01VVEVfRU4sIENQX1NFVF9NVVRFX0VOKTsNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIFRP UF9JTkZPX1JQVCwgQ1BfUlBUX0VOLCBDUF9SUFRfRU4pOw0KPiArCW10a19oZG1pX21hc2soaGRt aSwgVE9QX0lORk9fRU4sIENQX0VOIHwgQ1BfRU5fV1IsIENQX0VOIHwNCj4gQ1BfRU5fV1IpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl91bm11 dGUoc3RydWN0IG10a19oZG1pICpoZG1pKQ0KPiArew0KPiArCS8qR0NQIHBhY2tldCAqLw0KPiAr CW10a19oZG1pX21hc2soaGRtaSwgVE9QX0NGRzAxLCAwLCBDUF9DTFJfTVVURV9FTik7DQo+ICsJ bXRrX2hkbWlfbWFzayhoZG1pLCBUT1BfQ0ZHMDEsIDAsIENQX1NFVF9NVVRFX0VOKTsNCj4gKwlt dGtfaGRtaV9tYXNrKGhkbWksIFRPUF9JTkZPX1JQVCwgMCwgQ1BfUlBUX0VOKTsNCj4gKwltdGtf aGRtaV9tYXNrKGhkbWksIFRPUF9JTkZPX0VOLCAwLCBDUF9FTiB8IENQX0VOX1dSKTsNCj4gKw0K PiArCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0NGRzAxLCBDUF9DTFJfTVVURV9FTiwgQ1BfQ0xS X01VVEVfRU4pOw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0NGRzAxLCAwLCBDUF9TRVRf TVVURV9ESVMpOw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgVE9QX0lORk9fUlBULCBDUF9SUFRf RU4sIENQX1JQVF9FTik7DQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBUT1BfSU5GT19FTiwgQ1Bf RU4gfCBDUF9FTl9XUiwgQ1BfRU4gfA0KPiBDUF9FTl9XUik7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIG10a19oZG1pX2h3X25jdHNfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9v bA0KPiBlbmFibGUpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGRhdGE7DQo+ICsNCj4gKwlkYXRh ID0gbXRrX2hkbWlfcmVhZChoZG1pLCBBSVBfQ1RSTCk7DQo+ICsNCj4gKwlpZiAoZW5hYmxlKQ0K PiArCQlkYXRhIHw9IENUU19TV19TRUw7DQo+ICsJZWxzZQ0KPiArCQlkYXRhICY9IH5DVFNfU1df U0VMOw0KPiArDQo+ICsJbXRrX2hkbWlfd3JpdGUoaGRtaSwgQUlQX0NUUkwsIGRhdGEpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3RhdHVz KHN0cnVjdCBtdGtfaGRtaQ0KPiAqaGRtaSwNCj4gKwkJCQkJICAgICAgIHU4ICpjaGFubmVsX3N0 YXR1cykNCj4gK3sNCj4gKwkvKiBhY3R1YWxseSwgb25seSB0aGUgZmlyc3QgNSBvciA3IGJ5dGVz IG9mIENoYW5uZWwgU3RhdHVzDQo+ICsJICogY29udGFpbiB1c2VmdWwgaW5mb3JtYXRpb24NCj4g KwkgKi8NCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBBSVBfSTJTX0NIU1QwLA0KPiArCQkgICAg ICAgKGNoYW5uZWxfc3RhdHVzWzNdIDw8IDI0KSArIChjaGFubmVsX3N0YXR1c1syXQ0KPiA8PCAx NikgKw0KPiArCQkJICAgICAgIChjaGFubmVsX3N0YXR1c1sxXSA8PCA4KSArDQo+ICsJCQkgICAg ICAgKGNoYW5uZWxfc3RhdHVzWzBdIDw8IDApKTsNCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBB SVBfSTJTX0NIU1QxLA0KPiArCQkgICAgICAgKGNoYW5uZWxfc3RhdHVzWzZdIDw8IDE2KSArIChj aGFubmVsX3N0YXR1c1s1XQ0KPiA8PCA4KSArDQo+ICsJCQkgICAgICAgKGNoYW5uZWxfc3RhdHVz WzRdIDw8IDApKTsNCj4gK30NCj4gKw0KPiArc3RydWN0IGhkbWlfYWNyX24gew0KPiArCXVuc2ln bmVkIGludCBjbG9jazsNCj4gKwl1bnNpZ25lZCBpbnQgblszXTsNCj4gK307DQo+ICsNCj4gKy8q IFJlY29tbWVuZGVkIE4gdmFsdWVzIGZyb20gSERNSSBzcGVjaWZpY2F0aW9uLCB0YWJsZXMgNy0x IHRvIDctMw0KPiAqLw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBoZG1pX2Fjcl9uIGhkbWlfcmVj X25fdGFibGVbXSA9IHsNCj4gKwkvKiBDbG9jaywgTjogMzJrSHogNDQuMWtIeiA0OGtIeiAqLw0K PiArCXsgMjUxNzUsIHsgNDU3NiwgNzAwNywgNjg2NCB9IH0sDQo+ICsJeyA3NDE3NiwgeyAxMTY0 OCwgMTc4MzYsIDExNjQ4IH0gfSwNCj4gKwl7IDE0ODM1MiwgeyAxMTY0OCwgODkxOCwgNTgyNCB9 IH0sDQo+ICsJeyAyOTY3MDMsIHsgNTgyNCwgNDQ1OSwgNTgyNCB9IH0sDQo+ICsJeyAyOTcwMDAs IHsgMzA3MiwgNDcwNCwgNTEyMCB9IH0sDQo+ICsJeyAwLCB7IDQwOTYsIDYyNzIsIDYxNDQgfSB9 LCAvKiBhbGwgb3RoZXIgVE1EUyBjbG9ja3MgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICog aGRtaV9yZWNvbW1lbmRlZF9uKCkgLSBSZXR1cm4gTiB2YWx1ZSByZWNvbW1lbmRlZCBieSBIRE1J DQo+IHNwZWNpZmljYXRpb24NCj4gKyAqIEBmcmVxOiBhdWRpbyBzYW1wbGUgcmF0ZSBpbiBIeg0K PiArICogQGNsb2NrOiByb3VuZGVkIFRNRFMgY2xvY2sgaW4ga0h6DQo+ICsgKi8NCj4gK3N0YXRp YyB1bnNpZ25lZCBpbnQgaGRtaV9yZWNvbW1lbmRlZF9uKHVuc2lnbmVkIGludCBmcmVxLCB1bnNp Z25lZA0KPiBpbnQgY2xvY2spDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGhkbWlfYWNyX24gKnJl Y29tbWVuZGVkOw0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoaGRtaV9yZWNfbl90YWJsZSkgLSAxOyBpKyspIHsNCj4gKwkJaWYgKGNsb2Nr ID09IGhkbWlfcmVjX25fdGFibGVbaV0uY2xvY2spDQo+ICsJCQlicmVhazsNCj4gKwl9DQo+ICsJ cmVjb21tZW5kZWQgPSBoZG1pX3JlY19uX3RhYmxlICsgaTsNCj4gKw0KPiArCXN3aXRjaCAoZnJl cSkgew0KPiArCWNhc2UgMzIwMDA6DQo+ICsJCXJldHVybiByZWNvbW1lbmRlZC0+blswXTsNCj4g KwljYXNlIDQ0MTAwOg0KPiArCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMV07DQo+ICsJY2FzZSA0 ODAwMDoNCj4gKwkJcmV0dXJuIHJlY29tbWVuZGVkLT5uWzJdOw0KPiArCWNhc2UgODgyMDA6DQo+ ICsJCXJldHVybiByZWNvbW1lbmRlZC0+blsxXSAqIDI7DQo+ICsJY2FzZSA5NjAwMDoNCj4gKwkJ cmV0dXJuIHJlY29tbWVuZGVkLT5uWzJdICogMjsNCj4gKwljYXNlIDE3NjQwMDoNCj4gKwkJcmV0 dXJuIHJlY29tbWVuZGVkLT5uWzFdICogNDsNCj4gKwljYXNlIDE5MjAwMDoNCj4gKwkJcmV0dXJu IHJlY29tbWVuZGVkLT5uWzJdICogNDsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gKDEyOCAq IGZyZXEpIC8gMTAwMDsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQg aGRtaV9tb2RlX2Nsb2NrX3RvX2h6KHVuc2lnbmVkIGludCBjbG9jaykNCj4gK3sNCj4gKwlzd2l0 Y2ggKGNsb2NrKSB7DQo+ICsJY2FzZSAyNTE3NToNCj4gKwkJcmV0dXJuIDI1MTc0ODI1OyAvKiAy NS4yLzEuMDAxIE1IeiAqLw0KPiArCWNhc2UgNzQxNzY6DQo+ICsJCXJldHVybiA3NDE3NTgyNDsg LyogNzQuMjUvMS4wMDEgTUh6ICovDQo+ICsJY2FzZSAxNDgzNTI6DQo+ICsJCXJldHVybiAxNDgz NTE2NDg7IC8qIDE0OC41LzEuMDAxIE1IeiAqLw0KPiArCWNhc2UgMjk2NzAzOg0KPiArCQlyZXR1 cm4gMjk2NzAzMjk3OyAvKiAyOTcvMS4wMDEgTUh6ICovDQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0 dXJuIGNsb2NrICogMTAwMDsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25lZCBp bnQgaGRtaV9leHBlY3RlZF9jdHModW5zaWduZWQgaW50DQo+IGF1ZGlvX3NhbXBsZV9yYXRlLA0K PiArCQkJCSAgICAgIHVuc2lnbmVkIGludCB0bWRzX2Nsb2NrLCB1bnNpZ25lZA0KPiBpbnQgbikN Cj4gK3sNCj4gKwlyZXR1cm4NCj4gRElWX1JPVU5EX0NMT1NFU1RfVUxMKCh1NjQpaGRtaV9tb2Rl X2Nsb2NrX3RvX2h6KHRtZHNfY2xvY2spICogbiwNCj4gKwkJCQkgICAgIDEyOCAqIGF1ZGlvX3Nh bXBsZV9yYXRlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3Nl dF9uY3RzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwNCj4gKwkJCQkgICAgIHVuc2lnbmVkIGludCBz YW1wbGVfcmF0ZSwNCj4gKwkJCQkgICAgIHVuc2lnbmVkIGludCBjbG9jaykNCj4gK3sNCj4gKwl1 bnNpZ25lZCBpbnQgbiwgbmN0czsNCj4gKw0KPiArCW4gPSBoZG1pX3JlY29tbWVuZGVkX24oc2Ft cGxlX3JhdGUsIGNsb2NrKTsNCj4gKwluY3RzID0gaGRtaV9leHBlY3RlZF9jdHMoc2FtcGxlX3Jh dGUsIGNsb2NrLCBuKTsNCj4gKwltdGtfaGRtaV93cml0ZShoZG1pLCBBSVBfTl9WQUwsIG4pOw0K PiArCW10a19oZG1pX3dyaXRlKGhkbWksIEFJUF9DVFNfU1ZBTCwgbmN0cyk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX2VuYWJsZV9wYWNrZXQoc3RydWN0IG10a19oZG1p ICpoZG1pLCBib29sDQo+IGVuYWJsZSkNCj4gK3sNCj4gKwltdGtfaGRtaV9od19zZW5kX2F1ZF9w YWNrZXQoaGRtaSwgZW5hYmxlKTsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBtdGtfaGRtaV9hdWRfb25fb2ZmX2h3X25jdHMoc3RydWN0IG10a19oZG1pICpoZG1pLCBi b29sDQo+IG9uKQ0KPiArew0KPiArCW10a19oZG1pX2h3X25jdHNfZW5hYmxlKGhkbWksIG9uKTsN Cj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfYXVkaW9f ZHNkX2NvbmZpZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksDQo+ICsJCQkJICAgICAgdW5zaWduZWQg Y2hhciBjaE51bSwgYm9vbA0KPiBkc2RfYnlwYXNzKQ0KPiArew0KPiArCW10a19oZG1pX21hc2so aGRtaSwgQUlQX0NUUkwsIERTRF9FTiwgU1BESUZfRU4gfCBEU0RfRU4gfA0KPiBIQlJBX09OKTsN Cj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIEFJUF9UWENUUkwsIERTRF9NVVRFX0RBVEEsIERTRF9N VVRFX0RBVEEpOw0KPiArCWlmIChkc2RfYnlwYXNzKQ0KPiArCQltdGtfaGRtaV93cml0ZShoZG1p LCBUT1BfQVVEX01BUCwgMHg3NTMxNjQyMCk7DQo+ICsJLyogMHgxMzU3MDI0NiAqLw0KPiArCWVs c2UNCj4gKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgVE9QX0FVRF9NQVAsIDB4MDQyMzAxNTApOw0K PiArCS8qIDAgRkw7MSBTTDsyIENFTlQ7MyBGUjs0IFNSOzUgTEZFIDB4MzI0MDA1MTAgKi8NCj4g Kw0KPiArCS8qIHJ4dHggYnlwYXNzICovDQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBBSVBfU1BE SUZfQ1RSTCwgMCwgSTJTMkRTRF9FTik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBtdGtfaGRtaV9od19pMnNfZmlmb19tYXAoc3RydWN0IG10a19oZG1pICpoZG1pLA0KPiArCQkJ CQkgICAgdW5zaWduZWQgaW50IGZpZm9fbWFwcGluZykNCj4gK3sNCj4gKwltdGtfaGRtaV9tYXNr KGhkbWksIEFJUF9JMlNfQ1RSTCwgZmlmb19tYXBwaW5nLA0KPiArCQkgICAgICBGSUZPM19NQVAg fCBGSUZPMl9NQVAgfCBGSUZPMV9NQVAgfCBGSUZPMF9NQVApOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfaHdfaTJzX2NoX251bWJlcihzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksDQo+ICsJCQkJCSAgICAgdW5zaWduZWQgaW50IGNoTnVtKQ0KPiArew0KPiArCW10a19o ZG1pX21hc2soaGRtaSwgQUlQX0NUUkwsIGNoTnVtIDw8IEkyU19FTl9TSElGVCwgSTJTX0VOKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfaTJzX2NoX21hcHBpbmcoc3Ry dWN0IG10a19oZG1pICpoZG1pLA0KPiArCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGNoTnVtLA0K PiArCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG1hcHBpbmcpDQo+ICt7DQo+ICsJdW5zaWduZWQg aW50IGJEYXRhLCBiRGF0YTEsIGJEYXRhMiwgYkRhdGEzOw0KQXZvaWQgY2FtZWwgY2FzZSBzdHls ZSBpZiBub3QgZGVmaW5lZCBpbiBzcGVjLCBjaGVjayBvdGhlcnMNCg0KPiArDQo+ICsJaWYgKGNo TnVtID09IDIpIHsgLyogSTJTIDJjaCAqLw0KPiArCQliRGF0YSA9IDB4MTsgLyogMmNoIGRhdGEg Ki8NCj4gKwkJYkRhdGExID0gMHg1MDsgLyogZGF0YTAgKi8NCj4gKw0KPiArCX0gZWxzZSBpZiAo KGNoTnVtID09IDMpIHx8IChjaE51bSA9PSA0KSkgeyAvKiBJMlMgMmNoICovDQo+ICsJCWlmICgo Y2hOdW0gPT0gNCkgJiYgKG1hcHBpbmcgPT0gMHgwOCkpDQo+ICsJCQliRGF0YSA9IDB4MzsgLyog NGNoIGRhdGEgKi8NCj4gKwkJZWxzZQ0KPiArCQkJYkRhdGEgPSAweDAzOyAvKiA0Y2ggZGF0YSAq Lw0KdGhleSBhcmUgdGhlIHNhbWUgdmFsdWU/IGlmIHNvLCBubyBuZWVkICdpZiBzZWxzZScNCg0K PiArDQo+ICsJCWJEYXRhMSA9IDB4NTA7IC8qIGRhdGEwICovDQo+ICsNCj4gKwl9IGVsc2UgaWYg KChjaE51bSA9PSA2KSB8fCAoY2hOdW0gPT0gNSkpIHsgLyogSTJTIDUuMWNoICovDQo+ICsJCWlm ICgoY2hOdW0gPT0gNikgJiYgKG1hcHBpbmcgPT0gMHgwRSkpIHsNCj4gKwkJCWJEYXRhID0gMHhm OyAvKiA2LjAgY2ggZGF0YSAqLw0KPiArCQkJYkRhdGExID0gMHg1MDsgLyogZGF0YTAgKi8NCj4g KwkJfSBlbHNlIHsNCj4gKwkJCWJEYXRhID0gMHg3OyAvKiA1LjFjaCBkYXRhLCA1LzBjaCAqLw0K PiArCQkJYkRhdGExID0gMHg1MDsgLyogZGF0YTAgKi8NCj4gKwkJfQ0KPiArDQo+ICsJfSBlbHNl IGlmIChjaE51bSA9PSA4KSB7IC8qIEkyUyA1LjFjaCAqLw0KPiArCQliRGF0YSA9IDB4ZjsgLyog Ny4xY2ggZGF0YSAqLw0KPiArCQliRGF0YTEgPSAweDUwOyAvKiBkYXRhMCAqLw0KPiArCX0gZWxz ZSBpZiAoY2hOdW0gPT0gNykgeyAvKiBJMlMgNi4xY2ggKi8NCj4gKwkJYkRhdGEgPSAweGY7IC8q IDYuMWNoIGRhdGEgKi8NCj4gKwkJYkRhdGExID0gMHg1MDsgLyogZGF0YTAgKi8NCj4gKwl9IGVs c2Ugew0KPiArCQliRGF0YSA9IDB4MDE7IC8qIDJjaCBkYXRhICovDQo+ICsJCWJEYXRhMSA9IDB4 NTA7IC8qIGRhdGEwICovDQo+ICsJfQ0KYkRhdGExIGlzIGFsd2F5cyAweDUwPyBkbyBpdCBsaWtl IGJEYXRhMj8NCg0KPiArDQo+ICsJYkRhdGEyID0gMHhjNjsNCj4gKwliRGF0YTMgPSAweGZhOw0K PiArDQo+ICsJbXRrX2hkbWlfaHdfaTJzX2ZpZm9fbWFwKGhkbWksIChNQVBfU0QzIDw8IDYpIHwg KE1BUF9TRDIgPDwgNCkNCj4gfA0KPiArCQkJCQkgICAgICAgKE1BUF9TRDEgPDwgMikgfA0KPiAo TUFQX1NEMCA8PCAwKSk7DQo+ICsJbXRrX2hkbWlfaHdfaTJzX2NoX251bWJlcihoZG1pLCBiRGF0 YSk7DQo+ICsNCj4gKwlpZiAoY2hOdW0gPT0gMikNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBB SVBfVFhDVFJMLCBMQVlPVVQwLCBMQVlPVVQxKTsNCj4gKwllbHNlDQo+ICsJCW10a19oZG1pX21h c2soaGRtaSwgQUlQX1RYQ1RSTCwgTEFZT1VUMSwgTEFZT1VUMSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIG10a19oZG1pX2kyc19kYXRhX2ZtdChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVu c2lnbmVkDQo+IGNoYXIgZm10KQ0KPiArew0KPiArCXVuc2lnbmVkIGludCB1NERhdGE7DQo+ICsN Cj4gKwl1NERhdGEgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEFJUF9JMlNfQ1RSTCk7DQo+ICsJdTRE YXRhICY9IH4oV1NfSElHSCB8IEkyU18xU1RfQklUX05PU0hJRlQgfCBKVVNUSUZZX1JJR0hUKTsN Cj4gKw0KPiArCXN3aXRjaCAoZm10KSB7DQo+ICsJY2FzZSBIRE1JX0kyU19NT0RFX1JKVF8yNEJJ VDoNCj4gKwkJdTREYXRhIHw9IChXU19ISUdIIHwgSTJTXzFTVF9CSVRfTk9TSElGVCB8DQo+IEpV U1RJRllfUklHSFQpOw0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgSERNSV9JMlNfTU9ERV9S SlRfMTZCSVQ6DQo+ICsJCXU0RGF0YSB8PSAoV1NfSElHSCB8IEkyU18xU1RfQklUX05PU0hJRlQg fA0KPiBKVVNUSUZZX1JJR0hUKTsNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIEhETUlfSTJT X01PREVfTEpUXzI0QklUOg0KPiArCQl1NERhdGEgfD0gKFdTX0hJR0ggfCBJMlNfMVNUX0JJVF9O T1NISUZUKTsNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzE2 QklUOg0KPiArCQl1NERhdGEgfD0gKFdTX0hJR0ggfCBJMlNfMVNUX0JJVF9OT1NISUZUKTsNCj4g KwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIEhETUlfSTJTX01PREVfSTJTXzI0QklUOg0KPiArCQli cmVhazsNCj4gKw0KPiArCWNhc2UgSERNSV9JMlNfTU9ERV9JMlNfMTZCSVQ6DQo+ICsJCWJyZWFr Ow0KPiArDQo+ICsJZGVmYXVsdDoNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArCW10a19oZG1pX3dy aXRlKGhkbWksIEFJUF9JMlNfQ1RSTCwgdTREYXRhKTsNCj4gKw0KPiArCXU0RGF0YSA9IG10a19o ZG1pX3JlYWQoaGRtaSwgQUlQX0kyU19DVFJMKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGlu ZSB2b2lkIG10a19oZG1pX2kyc19zY2tfZWRnZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksDQo+ICsJ CQkJCSB1bnNpZ25lZCBpbnQgZWRnZSkNCj4gK3sNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIEFJ UF9JMlNfQ1RSTCwgZWRnZSwgU0NLX0VER0VfUklTRSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bmxpbmUgdm9pZCBtdGtfaGRtaV9pMnNfY2JpdF9vcmRlcihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks DQo+ICsJCQkJCSAgIHVuc2lnbmVkIGludCBjYml0KQ0KPiArew0KPiArCW10a19oZG1pX21hc2so aGRtaSwgQUlQX0kyU19DVFJMLCBjYml0LCBDQklUX09SREVSX1NBTUUpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfaTJzX3ZiaXQoc3RydWN0IG10a19oZG1pICpo ZG1pLCB1bnNpZ25lZA0KPiBpbnQgdmJpdCkNCj4gK3sNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWks IEFJUF9JMlNfQ1RSTCwgdmJpdCwgVkJJVF9DT00pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgbXRrX2hkbWlfaTJzX2RhdGFfZGlyZWN0aW9uKHN0cnVjdCBtdGtfaGRtaQ0KPiAq aGRtaSwNCj4gKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhX2RpcikNCj4gK3sNCj4gKwlt dGtfaGRtaV9tYXNrKGhkbWksIEFJUF9JMlNfQ1RSTCwgZGF0YV9kaXIsIERBVEFfRElSX0xTQik7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfaGRtaV9od19hdWRpb190eXBl KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwNCj4gKwkJCQkJICB1bnNpZ25lZCBpbnQgc3BkaWZfaTJz KQ0KPiArew0KPiArCW10a19oZG1pX21hc2soaGRtaSwgQUlQX0NUUkwsIHNwZGlmX2kycyA8PCBT UERJRl9FTl9TSElGVCwNCj4gU1BESUZfRU4pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdW5zaWdu ZWQgY2hhciBtdGtfaGRtaV9nZXRfaTJzX2NoX21hcHBpbmcoc3RydWN0IG10a19oZG1pDQo+ICpo ZG1pLA0KPiArCQkJCQkJIHVuc2lnbmVkIGNoYXINCj4gY2hhbm5lbF90eXBlKQ0KPiArew0KPiAr CXVuc2lnbmVkIGNoYXIgRlIsIEZMLCBGQywgTEZFLCBSUiwgUkwsIFJSQywgUkxDLCBSQzsNCj4g Kwl1bnNpZ25lZCBjaGFyIGNoX251bWJlciA9IDA7DQo+ICsJdW5zaWduZWQgY2hhciBDaGFubmVs TWFwID0gMHgwMDsNCj4gKw0KPiArCXN3aXRjaCAoY2hhbm5lbF90eXBlKSB7DQo+ICsJY2FzZSBI RE1JX0FVRF9DSEFOX1RZUEVfMV8wOg0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzJfMDoN Cj4gKwkJRlIgPSAxOw0KPiArCQlGTCA9IDE7DQpGUi9GTCBhcmUgYWx3YXlzIDEsIG5vIG5lZWQg cHV0IHRoZW0gaGVyZS4NCj4gKwkJTEZFID0gMDsNCj4gKwkJY2hfbnVtYmVyID0gMjsNCj4gKwkJ YnJlYWs7DQo+ICsNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8xXzE6DQo+ICsJY2FzZSBI RE1JX0FVRF9DSEFOX1RZUEVfMl8xOg0KPiArCQlGUiA9IDE7DQo+ICsJCUZMID0gMTsNCj4gKwkJ TEZFID0gMTsNCj4gKwkJY2hfbnVtYmVyID0gMzsNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNl IEhETUlfQVVEX0NIQU5fVFlQRV8zXzA6DQo+ICsJCUZSID0gMTsNCj4gKwkJRkwgPSAxOw0KPiAr CQlGQyA9IDE7DQo+ICsJCUxGRSA9IDA7DQo+ICsJCWNoX251bWJlciA9IDM7DQo+ICsJCWJyZWFr Ow0KPiArDQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfM18wX0xSUzoNCj4gKwkJRlIgPSAx Ow0KPiArCQlGTCA9IDE7DQo+ICsJCVJSID0gMTsNCj4gKwkJUkwgPSAxOw0KPiArCQlMRkUgPSAw Ow0KPiArCQljaF9udW1iZXIgPSA0Ow0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgSERNSV9B VURfQ0hBTl9UWVBFXzNfMV9MUlM6DQo+ICsJCUZSID0gMTsNCj4gKwkJRkwgPSAxOw0KPiArCQlG QyA9IDA7DQo+ICsJCUxGRSA9IDE7DQo+ICsJCVJSID0gMTsNCj4gKwkJUkwgPSAxOw0KPiArCQlj aF9udW1iZXIgPSA1Ow0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzRfMF9DTFJTOg0KPiArCQlGUiA9IDE7DQo+ICsJCUZMID0gMTsNCj4gKwkJRkMgPSAxOw0K PiArCQlMRkUgPSAwOw0KPiArCQlSUiA9IDE7DQo+ICsJCVJMID0gMTsNCj4gKwkJY2hfbnVtYmVy ID0gNTsNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV80XzFf Q0xSUzoNCj4gKwkJRlIgPSAxOw0KPiArCQlGTCA9IDE7DQo+ICsJCUZDID0gMTsNCj4gKwkJTEZF ID0gMTsNCj4gKwkJUlIgPSAxOw0KPiArCQlSTCA9IDE7DQo+ICsJCWNoX251bWJlciA9IDY7DQo+ ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfM18xOg0KPiArCQlG UiA9IDE7DQo+ICsJCUZMID0gMTsNCj4gKwkJRkMgPSAxOw0KPiArCQlMRkUgPSAxOw0KPiArCQlj aF9udW1iZXIgPSA0Ow0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzRfMDoNCj4gKwkJRlIgPSAxOw0KPiArCQlGTCA9IDE7DQo+ICsJCVJSID0gMTsNCj4gKwkJ UkwgPSAxOw0KPiArCQlMRkUgPSAwOw0KPiArCQljaF9udW1iZXIgPSA0Ow0KPiArCQlicmVhazsN Cj4gKw0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMToNCj4gKwkJRlIgPSAxOw0KPiAr CQlGTCA9IDE7DQo+ICsJCVJSID0gMTsNCj4gKwkJUkwgPSAxOw0KPiArCQlMRkUgPSAxOw0KPiAr CQljaF9udW1iZXIgPSA1Ow0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgSERNSV9BVURfQ0hB Tl9UWVBFXzVfMDoNCj4gKwkJRlIgPSAxOw0KPiArCQlGTCA9IDE7DQo+ICsJCUZDID0gMTsNCj4g KwkJTEZFID0gMDsNCj4gKwkJUlIgPSAxOw0KPiArCQlSTCA9IDE7DQo+ICsJCWNoX251bWJlciA9 IDU7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8xOg0K PiArCQlGUiA9IDE7DQo+ICsJCUZMID0gMTsNCj4gKwkJRkMgPSAxOw0KPiArCQlMRkUgPSAxOw0K PiArCQlSUiA9IDE7DQo+ICsJCVJMID0gMTsNCj4gKwkJY2hfbnVtYmVyID0gNjsNCj4gKwkJYnJl YWs7DQo+ICsNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzA6DQo+ICsJY2FzZSBIRE1J X0FVRF9DSEFOX1RZUEVfNl8wX0NTOg0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9D SDoNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0g6DQo+ICsJY2FzZSBIRE1JX0FV RF9DSEFOX1RZUEVfNl8wX0NIUjoNCj4gKwkJRlIgPSAxOw0KPiArCQlGTCA9IDE7DQo+ICsJCUZD ID0gMTsNCj4gKwkJTEZFID0gMDsNCj4gKwkJUlIgPSAxOw0KPiArCQlSTCA9IDE7DQo+ICsJCVJD ID0gMTsNCj4gKwkJY2hfbnVtYmVyID0gNjsNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIEhE TUlfQVVEX0NIQU5fVFlQRV82XzE6DQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NT Og0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSDoNCj4gKwljYXNlIEhETUlfQVVE X0NIQU5fVFlQRV82XzFfT0g6DQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NIUjoN Cj4gKwkJRlIgPSAxOw0KPiArCQlGTCA9IDE7DQo+ICsJCUZDID0gMTsNCj4gKwkJTEZFID0gMTsN Cj4gKwkJUlIgPSAxOw0KPiArCQlSTCA9IDE7DQo+ICsJCVJDID0gMTsNCj4gKwkJY2hfbnVtYmVy ID0gNzsNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzA6 DQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIX1JIOg0KPiArCWNhc2UgSERNSV9B VURfQ0hBTl9UWVBFXzdfMF9MU1JfUlNSOg0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdf MF9MQ19SQzoNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFdfUlc6DQo+ICsJY2Fz ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTRF9SU0Q6DQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFO X1RZUEVfN18wX0xTU19SU1M6DQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIU19S SFM6DQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIOg0KPiArCWNhc2UgSERN SV9BVURfQ0hBTl9UWVBFXzdfMF9DU19PSDoNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83 XzBfQ1NfQ0hSOg0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9PSDoNCj4gKwlj YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ0hfQ0hSOg0KPiArCWNhc2UgSERNSV9BVURfQ0hB Tl9UWVBFXzdfMF9PSF9DSFI6DQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19S U1NfTFNSX1JTUjoNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV84XzBfTEhfUkhfQ1M6DQo+ ICsJCUZSID0gMTsNCj4gKwkJRkwgPSAxOw0KPiArCQlGQyA9IDE7DQo+ICsJCUxGRSA9IDA7DQo+ ICsJCVJSID0gMTsNCj4gKwkJUkwgPSAxOw0KPiArCQlSUkMgPSAxOw0KPiArCQlSTEMgPSAxOw0K PiArCQljaF9udW1iZXIgPSA3Ow0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgSERNSV9BVURf Q0hBTl9UWVBFXzdfMToNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhfUkg6DQo+ ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTUl9SU1I6DQo+ICsJY2FzZSBIRE1JX0FV RF9DSEFOX1RZUEVfN18xX0xDX1JDOg0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9M V19SVzoNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNEX1JTRDoNCj4gKwljYXNl IEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTUzoNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV83XzFfTEhTX1JIUzoNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0g6 DQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NTX09IOg0KPiArCWNhc2UgSERNSV9B VURfQ0hBTl9UWVBFXzdfMV9DU19DSFI6DQo+ICsJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18x X0NIX09IOg0KPiArCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9DSFI6DQo+ICsJY2Fz ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX09IX0NIUjoNCj4gKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV83XzFfTFNTX1JTU19MU1JfUlNSOg0KPiArCQlGUiA9IDE7DQo+ICsJCUZMID0gMTsNCj4g KwkJRkMgPSAxOw0KPiArCQlMRkUgPSAxOw0KPiArCQlSUiA9IDE7DQo+ICsJCVJMID0gMTsNCj4g KwkJUlJDID0gMTsNCj4gKwkJUkxDID0gMTsNCj4gKwkJY2hfbnVtYmVyID0gODsNCj4gKwkJYnJl YWs7DQo+ICsNCj4gKwlkZWZhdWx0Og0KPiArCQlGUiA9IDE7DQo+ICsJCUZMID0gMTsNCj4gKwkJ Y2hfbnVtYmVyID0gMjsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJc3dpdGNoIChjaF9u dW1iZXIpIHsNCj4gKwljYXNlIDg6DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSA3Og0KPiAr CQlicmVhazsNCj4gKw0KPiArCWNhc2UgNjoNCj4gKwkJaWYgKChGUiA9PSAxKSAmJiAoRkwgPT0g MSkgJiYgKEZDID09IDEpICYmIChSUiA9PSAxKSAmJg0KPiArCQkgICAgKFJMID09IDEpICYmIChS QyA9PSAxKSAmJiAoTEZFID09IDApKSB7DQo+ICsJCQkvKiA2LjAgKi8NCj4gKwkJCUNoYW5uZWxN YXAgPSAweDBFOw0KPiArCQl9IGVsc2UgaWYgKChGUiA9PSAxKSAmJiAoRkwgPT0gMSkgJiYgKEZD ID09IDEpICYmIChSUg0KPiA9PSAxKSAmJg0KPiArCQkJICAgKFJMID09IDEpICYmIChSQyA9PSAw KSAmJiAoTEZFID09IDEpKSB7DQo+ICsJCQkvKiA1LjEgKi8NCj4gKwkJCUNoYW5uZWxNYXAgPSAw eDBCOw0KPiArCQl9DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSA1Og0KPiArCQlicmVhazsN Cj4gKw0KPiArCWNhc2UgNDoNCj4gKwkJaWYgKChGUiA9PSAxKSAmJiAoRkwgPT0gMSkgJiYgKFJS ID09IDEpICYmIChSTCA9PSAxKSAmJg0KPiArCQkgICAgKExGRSA9PSAwKSkNCj4gKwkJCUNoYW5u ZWxNYXAgPSAweDA4Ow0KPiArCQllbHNlIGlmICgoRlIgPT0gMSkgJiYgKEZMID09IDEpICYmIChG QyA9PSAxKSAmJiAoTEZFID09DQo+IDEpKQ0KPiArCQkJQ2hhbm5lbE1hcCA9IDB4MDM7DQo+ICsJ CWJyZWFrOw0KPiArDQo+ICsJY2FzZSAzOg0KPiArCQlpZiAoKEZSID09IDEpICYmIChGTCA9PSAx KSAmJiAoRkMgPT0gMSkpDQo+ICsJCQlDaGFubmVsTWFwID0gMHgwMjsNCj4gKwkJZWxzZSBpZiAo KEZSID09IDEpICYmIChGTCA9PSAxKSAmJiAoTEZFID09IDEpKQ0KPiArCQkJQ2hhbm5lbE1hcCA9 IDB4MDE7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSAyOg0KPiArCQlpZiAoKEZSID09IDEp ICYmIChGTCA9PSAxKSkNCj4gKwkJCUNoYW5uZWxNYXAgPSAweDAwOw0KPiArCQlicmVhazsNCj4g Kw0KPiArCWRlZmF1bHQ6DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBDaGFu bmVsTWFwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfaHdfaTJz X2NoX3N3YXAoc3RydWN0IG10a19oZG1pICpoZG1pLA0KPiArCQkJCQkgICB1bnNpZ25lZCBjaGFy IFN3YXBCaXQpDQo+ICt7DQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBBSVBfU1BESUZfQ1RSTCwg U3dhcEJpdCA8PCAyMCwgMHgwRiA8PCAyMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10 a19oZG1pX2hicl9jb25maWcoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sDQo+IGRzZF9ieXBh c3MpDQo+ICt7DQo+ICsJaWYgKGRzZF9ieXBhc3MpIHsNCj4gKwkJbXRrX2hkbWlfbWFzayhoZG1p LCBBSVBfQ1RSTCwgSEJSQV9PTiwNCj4gKwkJCSAgICAgIFNQRElGX0VOIHwgRFNEX0VOIHwgSEJS QV9PTik7DQo+ICsJCW10a19oZG1pX21hc2soaGRtaSwgQUlQX0NUUkwsIEkyU19FTiwgSTJTX0VO KTsNCj4gKwl9IGVsc2Ugew0KPiArCQltdGtfaGRtaV9tYXNrKGhkbWksIEFJUF9DVFJMLCBTUERJ Rl9FTiwNCj4gKwkJCSAgICAgIFNQRElGX0VOIHwgRFNEX0VOIHwgSEJSQV9PTik7DQo+ICsJCW10 a19oZG1pX21hc2soaGRtaSwgQUlQX0NUUkwsIFNQRElGX0lOVEVSTkFMX01PRFVMRSwNCj4gKwkJ CSAgICAgIFNQRElGX0lOVEVSTkFMX01PRFVMRSk7DQo+ICsJCW10a19oZG1pX21hc2soaGRtaSwg QUlQX0NUUkwsIEhCUl9GUk9NX1NQRElGLA0KPiBIQlJfRlJPTV9TUERJRik7DQo+ICsJCW10a19o ZG1pX21hc2soaGRtaSwgQUlQX0NUUkwsIENUU19DQUxfTjQsIENUU19DQUxfTjQpOw0KPiArCX0N Cj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG10a19oZG1pX2h3X3NwZGlmX2NvbmZp ZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBB SVBfU1BESUZfQ1RSTCwgV1JfMVVJX1VOTE9DSywNCj4gV1JfMVVJX0xPQ0spOw0KPiArCW10a19o ZG1pX21hc2soaGRtaSwgQUlQX1NQRElGX0NUUkwsIEZTX1VOT1ZFUlJJREUsDQo+IEZTX09WRVJS SURFX1dSSVRFKTsNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIEFJUF9TUERJRl9DVFJMLCBXUl8y VUlfVU5MT0NLLA0KPiBXUl8yVUlfTE9DSyk7DQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBBSVBf U1BESUZfQ1RSTCwgMHg0IDw8IE1BWF8xVUlfV1JJVEVfU0hJRlQsDQo+ICsJCSAgICAgIE1BWF8x VUlfV1JJVEUpOw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgQUlQX1NQRElGX0NUUkwsIDB4OSA8 PCBNQVhfMlVJX1dSSVRFX1NISUZULA0KPiArCQkgICAgICBNQVhfMlVJX1dSSVRFKTsNCj4gKwlt dGtfaGRtaV9tYXNrKGhkbWksIEFJUF9TUERJRl9DVFJMLCAweDQgPDwNCj4gQVVEX0VSUl9USFJF U0hfU0hJRlQsDQo+ICsJCSAgICAgIEFVRF9FUlJfVEhSRVNIKTsNCj4gKwltdGtfaGRtaV9tYXNr KGhkbWksIEFJUF9TUERJRl9DVFJMLCBJMlMyRFNEX0VOLCBJMlMyRFNEX0VOKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBtdGtfaGRtaV9hdWRfc2V0X2lucHV0KHN0cnVjdCBtdGtfaGRtaSAq aGRtaSkNCj4gK3sNCj4gKwl1bnNpZ25lZCBjaGFyIENoTWFwcGluZzsNCj4gKw0KPiArCW10a19o ZG1pX3dyaXRlKGhkbWksIFRPUF9BVURfTUFQLA0KPiArCQkgICAgICAgQ19TRDcgKyBDX1NENiAr IENfU0Q1ICsgQ19TRDQgKyBDX1NEMyArIENfU0QyICsNCj4gQ19TRDEgKw0KPiArCQkJICAgICAg IENfU0QwKTsNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIEFJUF9TUERJRl9DVFJMLCAwLCAweDBG IDw8IDIwKTsNCj4gKwltdGtfaGRtaV9tYXNrKGhkbWksIEFJUF9DVFJMLCAwLA0KPiArCQkgICAg ICBTUERJRl9FTiB8IERTRF9FTiB8IEhCUkFfT04gfCBDVFNfQ0FMX040IHwNCj4gKwkJCSAgICAg IEhCUl9GUk9NX1NQRElGIHwgU1BESUZfSU5URVJOQUxfTU9EVUxFKTsNCj4gKwltdGtfaGRtaV9t YXNrKGhkbWksIEFJUF9UWENUUkwsIDAsIERTRF9NVVRFX0RBVEEgfCBMQVlPVVQxKTsNCj4gKw0K PiArCWlmIChoZG1pLT5hdWRfcGFyYW0tPmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVU X0kyUykgew0KPiArCQlpZiAoaGRtaS0+YXVkX3BhcmFtLT5hdWRfY29kZWMgPT0NCj4gSERNSV9B VURJT19DT0RJTkdfVFlQRV9EU0QpIHsNCj4gKwkJCW10a19oZG1pX2F1ZGlvX2RzZF9jb25maWco DQo+ICsJCQkJaGRtaSwgaGRtaS0+YXVkX3BhcmFtLQ0KPiA+Y29kZWNfcGFyYW1zLmNoYW5uZWxz LA0KPiArCQkJCTApOw0KPiArCQkJbXRrX2hkbWlfaHdfaTJzX2NoX21hcHBpbmcoDQo+ICsJCQkJ aGRtaSwgaGRtaS0+YXVkX3BhcmFtLQ0KPiA+Y29kZWNfcGFyYW1zLmNoYW5uZWxzLA0KPiArCQkJ CTEpOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJbXRrX2hkbWlfaTJzX2RhdGFfZm10KGhkbWksDQo+ ICsJCQkJCSAgICAgIGhkbWktPmF1ZF9wYXJhbS0NCj4gPmF1ZF9pMnNfZm10KTsNCj4gKwkJCW10 a19oZG1pX2kyc19zY2tfZWRnZShoZG1pLCBTQ0tfRURHRV9SSVNFKTsNCj4gKwkJCW10a19oZG1p X2kyc19jYml0X29yZGVyKGhkbWksIENCSVRfT1JERVJfU0FNRSk7DQo+ICsJCQltdGtfaGRtaV9p MnNfdmJpdChoZG1pLCBWQklUX1BDTSk7DQo+ICsJCQltdGtfaGRtaV9pMnNfZGF0YV9kaXJlY3Rp b24oaGRtaSwNCj4gREFUQV9ESVJfTVNCKTsNCj4gKwkJCW10a19oZG1pX2h3X2F1ZGlvX3R5cGUo aGRtaSwNCj4gSERNSV9BVURfSU5QVVRfSTJTKTsNCj4gKwkJCUNoTWFwcGluZyA9IG10a19oZG1p X2dldF9pMnNfY2hfbWFwcGluZygNCj4gKwkJCQloZG1pLCBoZG1pLT5hdWRfcGFyYW0tDQo+ID5h dWRfaW5wdXRfY2hhbl90eXBlKTsNCj4gKwkJCW10a19oZG1pX2h3X2kyc19jaF9tYXBwaW5nKA0K PiArCQkJCWhkbWksIGhkbWktPmF1ZF9wYXJhbS0NCj4gPmNvZGVjX3BhcmFtcy5jaGFubmVscywN Cj4gKwkJCQlDaE1hcHBpbmcpOw0KPiArCQkJbXRrX2hkbWlfaHdfaTJzX2NoX3N3YXAoaGRtaSwg TEZFX0NDX1NXQVApOw0KPiArCQl9DQo+ICsJfSBlbHNlIHsNCj4gKwkJaWYgKChoZG1pLT5hdWRf cGFyYW0tPmF1ZF9pbnB1dF90eXBlID09DQo+IEhETUlfQVVEX0lOUFVUX1NQRElGKSAmJg0KPiAr CQkgICAgKChoZG1pLT5hdWRfcGFyYW0tPmF1ZF9jb2RlYyA9PQ0KPiArCQkgICAgICBIRE1JX0FV RElPX0NPRElOR19UWVBFX0RUU19IRCkgfHwNCj4gKwkJICAgICAoaGRtaS0+YXVkX3BhcmFtLT5h dWRfY29kZWMgPT0NCj4gKwkJICAgICAgSERNSV9BVURJT19DT0RJTkdfVFlQRV9NTFApKSAmJg0K PiArCQkgICAgKGhkbWktPmF1ZF9wYXJhbS0+Y29kZWNfcGFyYW1zLnNhbXBsZV9yYXRlID09DQo+ IDc2ODAwMCkpIHsNCj4gKwkJCW10a19oZG1pX2hicl9jb25maWcoaGRtaSwgZmFsc2UpOw0KPiAr CQl9IGVsc2Ugew0KPiArCQkJbXRrX2hkbWlfaHdfc3BkaWZfY29uZmlnKGhkbWkpOw0KPiArCQkJ bXRrX2hkbWlfaHdfaTJzX2NoX21hcHBpbmcoaGRtaSwgMiwgMCk7DQo+ICsJCX0NCj4gKwl9DQo+ ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtdGtfaGRtaV9hdWRf c2V0X3N3X25jdHMoc3RydWN0IG10a19oZG1pICpoZG1pLA0KPiArCQkJCSAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZQ0KPiAqZGlzcGxheV9tb2RlKQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBz YW1wbGVfcmF0ZSA9IGhkbWktPmF1ZF9wYXJhbS0NCj4gPmNvZGVjX3BhcmFtcy5zYW1wbGVfcmF0 ZTsNCj4gKw0KPiArCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCBmYWxzZSk7DQo+ ICsNCj4gKwltdGtfaGRtaV9od19hdWRfc2V0X25jdHMoaGRtaSwgc2FtcGxlX3JhdGUsIGRpc3Bs YXlfbW9kZS0NCj4gPmNsb2NrKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfaHdfYXVkaW9faW5wdXRfZW5hYmxlKHN0cnVjdCBt dGtfaGRtaQ0KPiAqaGRtaSwNCj4gKwkJCQkJCSAgdW5zaWduZWQgaW50IGVuYWJsZSkNCj4gK3sN Cj4gKwlpZiAoZW5hYmxlKQ0KPiArCQltdGtfaGRtaV9tYXNrKGhkbWksIEFJUF9DVFJMLCBBVURf SU5fRU4sIEFVRF9JTl9FTik7DQo+ICsJZWxzZQ0KPiArCQltdGtfaGRtaV9tYXNrKGhkbWksIEFJ UF9DVFJMLCAweDAgPDwgQVVEX0lOX0VOX1NISUZULA0KPiArCQkJICAgICAgQVVEX0lOX0VOKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfYWlwX2N0cmxfaW5pdChzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsJbXRrX2hkbWlfbWFzayhoZG1pLCBBSVBfQ1RSTCwN Cj4gKwkJICAgICAgQVVEX1NFTF9PV1JUIHwgTk9fTUNMS19DVFNHRU5fU0VMIHwgQ1RTX1JFUV9F TiwNCj4gKwkJICAgICAgQVVEX1NFTF9PV1JUIHwgTk9fTUNMS19DVFNHRU5fU0VMIHwgTUNMS19F TiB8DQo+IENUU19SRVFfRU4pOw0KPiArCW10a19oZG1pX21hc2soaGRtaSwgQUlQX1RQSV9DVFJM LCBUUElfQVVESU9fTE9PS1VQX0RJUywNCj4gKwkJICAgICAgVFBJX0FVRElPX0xPT0tVUF9FTik7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2F1ZGlvX3Jlc2V0KHN0cnVjdCBt dGtfaGRtaSAqaGRtaSwgYm9vbCByc3QpDQo+ICt7DQo+ICsJaWYgKHJzdCkNCj4gKwkJbXRrX2hk bWlfbWFzayhoZG1pLCBBSVBfVFhDVFJMLA0KPiArCQkJICAgICAgUlNUNEFVRElPIHwgUlNUNEFV RElPX0ZJRk8gfA0KPiBSU1Q0QVVESU9fQUNSLA0KPiArCQkJICAgICAgUlNUNEFVRElPIHwgUlNU NEFVRElPX0ZJRk8gfA0KPiBSU1Q0QVVESU9fQUNSKTsNCj4gKwllbHNlDQo+ICsJCW10a19oZG1p X21hc2soaGRtaSwgQUlQX1RYQ1RSTCwgMCwNCj4gKwkJCSAgICAgIFJTVDRBVURJTyB8IFJTVDRB VURJT19GSUZPIHwNCj4gUlNUNEFVRElPX0FDUik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg bXRrX2hkbWlfYXVkX291dHB1dF9jb25maWcoc3RydWN0IG10a19oZG1pICpoZG1pLA0KPiArCQkJ CSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlDQo+ICpkaXNwbGF5X21vZGUpDQo+ICt7DQo+ ICsJbXRrX2hkbWlfaHdfYXVkX211dGUoaGRtaSk7DQo+ICsJbXRrX2hkbWlfYXVkX2VuYWJsZV9w YWNrZXQoaGRtaSwgZmFsc2UpOw0KPiArCW10a19oZG1pX2F1ZGlvX3Jlc2V0KGhkbWksIHRydWUp Ow0KPiArCW10a19oZG1pX2FpcF9jdHJsX2luaXQoaGRtaSk7DQo+ICsNCj4gKwltdGtfaGRtaV9h dWRfc2V0X2lucHV0KGhkbWkpOw0KPiArDQo+ICsJbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVs X3N0YXR1cygNCj4gKwkJaGRtaSwgaGRtaS0+YXVkX3BhcmFtLT5jb2RlY19wYXJhbXMuaWVjLnN0 YXR1cyk7DQo+ICsNCj4gKwltdGtfaGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoaGRtaSk7DQo+ ICsNCj4gKwltdGtfaGRtaV9od19hdWRpb19pbnB1dF9lbmFibGUoaGRtaSwgdHJ1ZSk7DQo+ICsN Cj4gKwltdGtfaGRtaV9hdWRpb19yZXNldChoZG1pLCBmYWxzZSk7DQo+ICsNCj4gKwltdGtfaGRt aV9hdWRfc2V0X3N3X25jdHMoaGRtaSwgZGlzcGxheV9tb2RlKTsNCj4gKw0KPiArCXVkZWxheSgy NSk7DQo+ICsJbXRrX2hkbWlfYXVkX29uX29mZl9od19uY3RzKGhkbWksIHRydWUpOw0KPiArDQo+ ICsJbXRrX2hkbWlfYXVkX2VuYWJsZV9wYWNrZXQoaGRtaSwgdHJ1ZSk7DQo+ICsJbXRrX2hkbWlf aHdfYXVkX3VubXV0ZShoZG1pKTsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBtdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwN Cj4gKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpDQo+ICt7DQo+ICsJc3RydWN0 IGhkbWlfYXZpX2luZm9mcmFtZSBmcmFtZTsNCj4gKwl1OCBidWZmZXJbMTddOw0KPiArCXNzaXpl X3QgZXJyOw0KPiArCWJvb2wgaXNfaGRtaTJ4X3NpbmsgPSBmYWxzZTsNCj4gKw0KPiArCWlmICho ZG1pLT5jb25uLmRpc3BsYXlfaW5mby5oZG1pLnNjZGMuc3VwcG9ydGVkKQ0KPiArCQlpc19oZG1p Mnhfc2luayA9DQo+ICsJCQl0cnVlOyAvL2lmIHN1cHBvcnQgc2NkYywgdGhlbiB0aGUgc2luayBz dXBwb3J0DQo+IEhETUkyLjANCj4gKw0KPiArCWVyciA9IGRybV9oZG1pX2F2aV9pbmZvZnJhbWVf ZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1lLCAmaGRtaS0NCj4gPmNvbm4sDQo+ICsJCQkJCQkgICAg ICAgbW9kZSk7DQo+ICsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlkZXZfZXJyKGhkbWktPmRl diwNCj4gKwkJCSJGYWlsZWQgdG8gZ2V0IEFWSSBpbmZvZnJhbWUgZnJvbSBtb2RlOiAlemRcbiIs DQo+IGVycik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZnJhbWUuY29sb3Jp bWV0cnkgPSBoZG1pLT5jb2xvcmltdGVyeTsNCj4gKwkvL25vIG5lZWQsIHNpbmNlIHdlIGNhbm5v dCBzdXBwb3J0IG90aGVyIGV4dGVuZGVkIGNvbG9yaW1ldHJ5Pw0KPiArCWlmIChmcmFtZS5jb2xv cmltZXRyeSA9PSBIRE1JX0NPTE9SSU1FVFJZX0VYVEVOREVEKQ0KPiArCQlmcmFtZS5leHRlbmRl ZF9jb2xvcmltZXRyeSA9IGhkbWktDQo+ID5leHRlbmRlZF9jb2xvcmltZXRyeTsNCj4gKw0KPiAr CS8qIHF1YW50aWF0aW9uIHJhbmdlOmxpbWl0ZWQgb3IgZnVsbCAqLw0KPiArCWlmIChmcmFtZS5j b2xvcnNwYWNlID09IEhETUlfQ09MT1JTUEFDRV9SR0IpDQo+ICsJCWZyYW1lLnF1YW50aXphdGlv bl9yYW5nZSA9IGhkbWktPnF1YW50aXphdGlvbl9yYW5nZTsNCj4gKwllbHNlDQo+ICsJCWZyYW1l LnljY19xdWFudGl6YXRpb25fcmFuZ2UgPSBoZG1pLQ0KPiA+eWNjX3F1YW50aXphdGlvbl9yYW5n ZTsNCj4gKwllcnIgPSBoZG1pX2F2aV9pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6 ZW9mKGJ1ZmZlcikpOw0KPiArDQo+ICsJaWYgKGVyciA8IDApIHsNCj4gKwkJZGV2X2VycihoZG1p LT5kZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1lOg0KPiAlemRcbiIsIGVycik7DQo+ ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJbXRrX2hkbWlfaHdfYXZpX2luZm9mcmFt ZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF9zcGRfaW5mb2ZyYW1lKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSwNCj4gKwkJCQkJY29uc3QgY2hhciAqdmVuZG9yLCBjb25zdCBjaGFyDQo+ICpw cm9kdWN0KQ0KPiArew0KPiArCXN0cnVjdCBoZG1pX3NwZF9pbmZvZnJhbWUgZnJhbWU7DQo+ICsJ dTggYnVmZmVyWzI5XTsNCj4gKwlzc2l6ZV90IGVycjsNCj4gKw0KPiArCWVyciA9IGhkbWlfc3Bk X2luZm9mcmFtZV9pbml0KCZmcmFtZSwgdmVuZG9yLCBwcm9kdWN0KTsNCj4gKwlpZiAoZXJyIDwg MCkgew0KPiArCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIFNQRCBp bmZvZnJhbWU6DQo+ICV6ZFxuIiwNCj4gKwkJCWVycik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJ fQ0KPiArDQo+ICsJZXJyID0gaGRtaV9zcGRfaW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIs IHNpemVvZihidWZmZXIpKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlkZXZfZXJyKGhkbWkt PmRldiwgIkZhaWxlZCB0byBwYWNrIFNEUCBpbmZvZnJhbWU6DQo+ICV6ZFxuIiwgZXJyKTsNCj4g KwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwltdGtfaGRtaV9od19zcGRfaW5mb2ZyYW1l KGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IG10a19oZG1pX291dHB1dF9pbml0KHN0cnVjdCBtdGtfaGRtaSAqaGRt aSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaGRtaV9hdWRpb19wYXJhbSAqYXVkX3BhcmFtID0gaGRtaS0+ YXVkX3BhcmFtOw0KPiArDQo+ICsJYXVkX3BhcmFtLT5hdWRfY29kZWMgPSBIRE1JX0FVRElPX0NP RElOR19UWVBFX1BDTTsNCj4gKwlhdWRfcGFyYW0tPmF1ZF9zYW1wZV9zaXplID0gSERNSV9BVURJ T19TQU1QTEVfU0laRV8xNjsNCj4gKwlhdWRfcGFyYW0tPmF1ZF9pbnB1dF90eXBlID0gSERNSV9B VURfSU5QVVRfSTJTOw0KPiArCWF1ZF9wYXJhbS0+YXVkX2kyc19mbXQgPSBIRE1JX0kyU19NT0RF X0kyU18yNEJJVDsNCj4gKwlhdWRfcGFyYW0tPmF1ZF9tY2xrID0gSERNSV9BVURfTUNMS18xMjhG UzsNCj4gKwlhdWRfcGFyYW0tPmF1ZF9pbnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFOX1RZ UEVfMl8wOw0KPiArDQo+ICsJaGRtaS0+aHBkID0gSERNSV9QTFVHX09VVDsNCj4gKwloZG1pLT5z ZXRfY3NwX2RlcHRoID0gUkdCNDQ0XzhiaXQ7DQo+ICsJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQ QUNFX1JHQjsNCj4gKwloZG1pLT5jb2xvcl9kZXB0aCA9IEhETUlfOF9CSVQ7DQo+ICsJaGRtaS0+ Y29sb3JpbXRlcnkgPSBIRE1JX0NPTE9SSU1FVFJZX05PTkU7DQo+ICsJaGRtaS0+ZXh0ZW5kZWRf Y29sb3JpbWV0cnkgPQ0KPiBIRE1JX0VYVEVOREVEX0NPTE9SSU1FVFJZX1JFU0VSVkVEOw0KPiAr CWhkbWktPnF1YW50aXphdGlvbl9yYW5nZSA9IEhETUlfUVVBTlRJWkFUSU9OX1JBTkdFX0RFRkFV TFQ7DQo+ICsJaGRtaS0+eWNjX3F1YW50aXphdGlvbl9yYW5nZSA9DQo+IEhETUlfWUNDX1FVQU5U SVpBVElPTl9SQU5HRV9MSU1JVEVEOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgbXRrX2hkbWlfcmVzZXRfY29sb3JzcGFjZV9zZXR0aW5nKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSkNCj4gK3sNCj4gKwloZG1pLT5zZXRfY3NwX2RlcHRoID0gUkdCNDQ0XzhiaXQ7 DQo+ICsJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1JHQjsNCj4gKwloZG1pLT5jb2xvcl9k ZXB0aCA9IEhETUlfOF9CSVQ7DQo+ICsJaGRtaS0+Y29sb3JpbXRlcnkgPSBIRE1JX0NPTE9SSU1F VFJZX05PTkU7DQo+ICsJaGRtaS0+ZXh0ZW5kZWRfY29sb3JpbWV0cnkgPQ0KPiBIRE1JX0VYVEVO REVEX0NPTE9SSU1FVFJZX1JFU0VSVkVEOw0KPiArCWhkbWktPnF1YW50aXphdGlvbl9yYW5nZSA9 IEhETUlfUVVBTlRJWkFUSU9OX1JBTkdFX0RFRkFVTFQ7DQo+ICsJaGRtaS0+eWNjX3F1YW50aXph dGlvbl9yYW5nZSA9DQo+IEhETUlfWUNDX1FVQU5USVpBVElPTl9SQU5HRV9MSU1JVEVEOw0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2F1ZGlv X2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsJbXRrX2hkbWlfYXVkX2Vu YWJsZV9wYWNrZXQoaGRtaSwgdHJ1ZSk7DQo+ICsJaGRtaS0+YXVkaW9fZW5hYmxlID0gdHJ1ZTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfYXVkaW9fZGlzYWJsZShzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsJbXRrX2hkbWlfYXVkX2VuYWJsZV9wYWNrZXQoaGRt aSwgZmFsc2UpOw0KPiArCWhkbWktPmF1ZGlvX2VuYWJsZSA9IGZhbHNlOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IG10a19oZG1pX2F1ZGlvX3NldF9wYXJhbShzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksDQo+ICsJCQkJICAgIHN0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtICpwYXJhbSkNCj4gK3sNCj4g KwlpZiAoIWhkbWktPmF1ZGlvX2VuYWJsZSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4g KwltZW1jcHkoaGRtaS0+YXVkX3BhcmFtLCBwYXJhbSwgc2l6ZW9mKCpwYXJhbSkpOw0KPiArCXJl dHVybiBtdGtfaGRtaV9hdWRfb3V0cHV0X2NvbmZpZyhoZG1pLCAmaGRtaS0+bW9kZSk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2NoYW5nZV92aWRlb19yZXNvbHV0aW9uKHN0 cnVjdCBtdGtfaGRtaSAqaGRtaSkNCj4gK3sNCj4gKwlib29sIGlzX292ZXJfMzQwTSA9IGZhbHNl Ow0KPiArCWJvb2wgaXNfaGRtaV9zaW5rID0gZmFsc2U7DQo+ICsNCj4gKwltdGtfaGRtaV9od19y ZXNldChoZG1pKTsNCj4gKwltdGtfaGRtaV9zZXRfc3dfaHBkKGhkbWksIHRydWUpOw0KPiArCXVk ZWxheSgyKTsNCj4gKw0KPiArCW10a19oZG1pX3dyaXRlKGhkbWksIEhEQ1BfVE9QX0NUUkwsIDB4 MCk7DQo+ICsJbXRrX2hkbWlfZW5faGRjcF9yZWF1dGhfaW50KGhkbWksIHRydWUpOw0KPiArCW10 a19oZG1pX2VuYWJsZV9ocGRfcG9yZF9pcnEoaGRtaSwgdHJ1ZSk7DQo+ICsJbXRrX2hkbWlfZm9y Y2VfaGRjcF9ocGQoaGRtaSk7DQo+ICsNCj4gKwlpc19oZG1pX3NpbmsgPSBtdGtfaGRtaV9zaW5r X2lzX2hkbWlfZGV2aWNlKGhkbWkpOw0KPiArCW10a19oZG1pX3NldF9kZWVwX2NvbG9yKGhkbWks IGlzX2hkbWlfc2luayk7DQo+ICsJbXRrX2hkbWlfZW5hYmxlX2hkbWlfbW9kZShoZG1pLCBpc19o ZG1pX3NpbmspOw0KPiArDQo+ICsJdWRlbGF5KDUpOw0KPiArCW10a19oZG1pX2h3X3ZpZF9ibGFj ayhoZG1pLCB0cnVlKTsNCj4gKwltdGtfaGRtaV9od19hdWRfbXV0ZShoZG1pKTsNCj4gKwltdGtf aGRtaV9od19zZW5kX2F2X3VubXV0ZShoZG1pKTsNCj4gKw0KPiArCW10a19oZG1pX21hc2soaGRt aSwgVE9QX0NGRzAxLCBOVUxMX1BLVF9WU1lOQ19ISUdIX0VOLA0KPiArCQkgICAgICBOVUxMX1BL VF9WU1lOQ19ISUdIX0VOIHwgTlVMTF9QS1RfRU4pOw0KPiArDQo+ICsJaXNfb3Zlcl8zNDBNID0g bXRrX2hkbWlfdG1kc19vdmVyXzM0ME0oaGRtaSk7DQo+ICsJbXRrX2hkbWlfZW5hYmxlX3NjcmFt YmxpbmcoaGRtaSwgaXNfb3Zlcl8zNDBNKTsNCj4gKwltdGtfaGRtaV9oaWdoX3RtZHNfY2xvY2tf cmF0aW8oaGRtaSwgaXNfb3Zlcl8zNDBNKTsNCj4gKw0KPiArCWlmIChoZG1pLT5jc3AgPT0gSERN SV9DT0xPUlNQQUNFX1lVVjQyMCkNCj4gKwkJbXRrX2hkbWlfeXV2NDIwX2Rvd25zYW1wbGUoaGRt aSwgdHJ1ZSk7DQo+ICsJZWxzZQ0KPiArCQltdGtfaGRtaV95dXY0MjBfZG93bnNhbXBsZShoZG1p LCBmYWxzZSk7DQo+ICsNCj4gKwltdGtfaGRtaV80ODBwXzU3NnBfc2V0dGluZyhoZG1pKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBtdGtfaGRtaV9vdXRwdXRfc2V0X2Rpc3BsYXlfbW9kZShz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksDQo+ICsJCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZQ0KPiAqbW9kZSkNCj4gK3sNCj4gKwltdGtfaGRtaV9jaGFuZ2VfdmlkZW9fcmVzb2x1dGlvbiho ZG1pKTsNCj4gKwltdGtfaGRtaV9hdWRfb3V0cHV0X2NvbmZpZyhoZG1pLCBtb2RlKTsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG10a19oZG1pX2dldF9hbGxf Y2xrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgc3RydWN0DQo+IGRldmljZV9ub2RlICpucCkNCj4g K3sNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19o ZG1pX2Nsa19uYW1lcyk7IGkrKykgew0KPiArCQloZG1pLT5jbGtbaV0gPQ0KPiArCQkJb2ZfY2xr X2dldF9ieV9uYW1lKG5wLCBtdGtfaGRtaV9jbGtfbmFtZXNbaV0pOw0KPiArDQo+ICsJCWlmIChJ U19FUlIoaGRtaS0+Y2xrW2ldKSkNCj4gKwkJCXJldHVybiBQVFJfRVJSKGhkbWktPmNsa1tpXSk7 DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10 a19oZG1pX2Nsa19lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pKQ0KPiArew0KPiArCWludCBp Ow0KPiArDQo+ICsJY2xrX3NldF9wYXJlbnQoaGRtaS0+Y2xrW01US19IRElNX0hEQ1BfU0VMXSwN Cj4gKwkJICAgICAgIGhkbWktPmNsa1tNVEtfSERNSV9VTklWUExMX0Q0RDhdKTsNCj4gKw0KPiAr CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19oZG1pX2Nsa19uYW1lcyk7IGkrKykgew0K PiArCQlpZiAoKGkgPT0gTVRLX0hETUlfVU5JVlBMTF9ENEQ4KSB8fA0KPiArCQkgICAgKGkgPT0g TVRLX0hETUlfQ0xLX1VOSVZQTExfRDZENCkgfHwNCj4gKwkJICAgIChpID09IE1US19IRE1JX0NM S19NU0RDUExMX0QyKSB8fA0KPiArCQkgICAgKGkgPT0gTVRLX0hETUlfQ0xLX0hETUlfQVBCX1NF TCkpDQo+ICsJCQljb250aW51ZTsNCj4gKwkJZWxzZQ0KPiArCQkJY2xrX3ByZXBhcmVfZW5hYmxl KGhkbWktPmNsa1tpXSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRt aV9jbGtfZGlzYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsJaW50IGk7DQo+ ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfaGRtaV9jbGtfbmFtZXMpOyBp KyspIHsNCj4gKwkJaWYgKChpID09IE1US19IRE1JX1VOSVZQTExfRDREOCkgfHwNCj4gKwkJICAg IChpID09IE1US19IRE1JX0NMS19VTklWUExMX0Q2RDQpIHx8DQo+ICsJCSAgICAoaSA9PSBNVEtf SERNSV9DTEtfTVNEQ1BMTF9EMikgfHwNCj4gKwkJICAgIChpID09IE1US19IRE1JX0NMS19IRE1J X0FQQl9TRUwpKQ0KPiArCQkJY29udGludWU7DQo+ICsJCWVsc2UNCj4gKwkJCWNsa19kaXNhYmxl X3VucHJlcGFyZShoZG1pLT5jbGtbaV0pOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgbXRrX2hkbWlfaHBkX2V2ZW50KGVudW0gSERNSV9IUERfU1RBVEUgaHBkLCBzdHJ1Y3QNCj4g ZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9k cnZkYXRhKGRldik7DQo+ICsNCj4gKwlpZiAoaGRtaSAmJiBoZG1pLT5icmlkZ2UuZW5jb2RlciAm JiBoZG1pLT5icmlkZ2UuZW5jb2Rlci0+ZGV2KQ0KPiArCQlkcm1faGVscGVyX2hwZF9pcnFfZXZl bnQoaGRtaS0+YnJpZGdlLmVuY29kZXItPmRldik7DQo+ICt9DQo+ICsNCj4gK2VudW0gSERNSV9I UERfU1RBVEUgbXRrX2hkbWlfaHBkX3BvcmRfc3RhdHVzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkN Cj4gK3sNCj4gKwl1bnNpZ25lZCBpbnQgaHBkX3N0YXR1czsNCj4gKwllbnVtIEhETUlfSFBEX1NU QVRFIGhwZDsNCj4gKw0KPiArCWhwZF9zdGF0dXMgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEhQRF9E RENfU1RBVFVTKTsNCj4gKwlpZiAoKGhwZF9zdGF0dXMgJiAoSFBEX1BJTl9TVEEgfCBQT1JEX1BJ Tl9TVEEpKSA9PQ0KPiArCSAgICAoSFBEX1BJTl9TVEEgfCBQT1JEX1BJTl9TVEEpKQ0KPiArCQlo cGQgPSBIRE1JX1BMVUdfSU5fQU5EX1NJTktfUE9XRVJfT047DQo+ICsJZWxzZSBpZiAoKGhwZF9z dGF0dXMgJiAoSFBEX1BJTl9TVEEgfCBQT1JEX1BJTl9TVEEpKSA9PQ0KPiBQT1JEX1BJTl9TVEEp DQo+ICsJCWhwZCA9IEhETUlfUExVR19JTl9PTkxZOw0KPiArCWVsc2UNCj4gKwkJaHBkID0gSERN SV9QTFVHX09VVDsNCj4gKw0KPiArCXJldHVybiBocGQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp cnFyZXR1cm5fdCBtdGtfaGRtaV9pc3IoaW50IGlycSwgdm9pZCAqYXJnKQ0KPiArew0KPiArCXN0 cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGFyZzsNCj4gKwl1bnNpZ25lZCBpbnQgaW50X3N0YXR1czsN Cj4gKw0KPiArCWludF9zdGF0dXMgPSBtdGtfaGRtaV9yZWFkKGhkbWksIFRPUF9JTlRfU1RBMDAp Ow0KPiArDQo+ICsJLyogaGFuZGxlIGhwZCBpbnRlcnJ1cHQgKi8NCj4gKwlpZiAoaW50X3N0YXR1 cyAmIChQT1JEX0ZfSU5UX1NUQSB8IFBPUkRfUl9JTlRfU1RBIHwNCj4gSFRQTEdfRl9JTlRfU1RB IHwNCj4gKwkJCSAgSFRQTEdfUl9JTlRfU1RBKSkgew0KPiArCQlxdWV1ZV9kZWxheWVkX3dvcmso aGRtaS0+aGRtaV93cSwgJmhkbWktPmhwZF93b3JrLA0KPiArCQkJCSAgIG1zZWNzX3RvX2ppZmZp ZXMoNDApKTsNCj4gKwkJbXRrX2hkbWlfZW5hYmxlX2hwZF9wb3JkX2lycShoZG1pLCBmYWxzZSk7 DQo+ICsJCW10a19oZG1pX2Nscl9odHBsZ19wb3JkX2lycShoZG1pKTsNCj4gKwl9DQo+ICsNCj4g KwkvKmNsZWFyIGFsbCB0eCBpcnEqLw0KPiArCW10a19oZG1pX2Nscl9hbGxfaW50X3N0YXR1cyho ZG1pKTsNCj4gKw0KPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArdm9pZCBt dGtfaGRtaV9ocGRfd29ya19oYW5kbGUoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQ0KPiArew0K PiArCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9DQo+ICsJCWNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1 Y3QgbXRrX2hkbWksIGhwZF93b3JrLndvcmspOw0KPiArCWVudW0gSERNSV9IUERfU1RBVEUgaHBk Ow0KPiArDQo+ICsJaHBkID0gbXRrX2hkbWlfaHBkX3BvcmRfc3RhdHVzKGhkbWkpOw0KPiArCWlm IChocGQgIT0gaGRtaS0+aHBkKSB7DQo+ICsJCWhkbWktPmhwZCA9IGhwZDsNCj4gKwkJbXRrX2hk bWlfaHBkX2V2ZW50KGhwZCwgaGRtaS0+ZGV2KTsNCj4gKwl9DQo+ICsNCj4gKwltdGtfaGRtaV9l bmFibGVfaHBkX3BvcmRfaXJxKGhkbWksIHRydWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IG10a19oZG1pX2luaXRfd29ya3F1ZXVlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkNCj4gK3sNCj4g KwloZG1pLT5oZG1pX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImhkbWl0eF93 cSIpOw0KPiArCWlmICghaGRtaS0+aGRtaV93cSkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsN Cj4gKwlJTklUX0RFTEFZRURfV09SSygmaGRtaS0+aHBkX3dvcmssIG10a19oZG1pX2hwZF93b3Jr X2hhbmRsZSk7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBlbnVtIGRybV9j b25uZWN0b3Jfc3RhdHVzIGhkbWlfY29ubl9kZXRlY3Qoc3RydWN0DQo+IGRybV9jb25uZWN0b3Ig KmNvbm4sDQo+ICsJCQkJCQkgIGJvb2wgZm9yY2UpDQo+ICt7DQo+ICsJc3RydWN0IG10a19oZG1p ICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25uKGNvbm4pOw0KPiArDQo+ICsJaWYgKGhkbWktPmhw ZCAhPSBIRE1JX1BMVUdfSU5fQU5EX1NJTktfUE9XRVJfT04gJiYNCj4gKwkgICAgaGRtaS0+aHBk ICE9IEhETUlfUExVR19JTl9PTkxZKSB7DQo+ICsJCWhkbWktPnN1cHBvcnRfY3NwX2RlcHRoID0g UkdCNDQ0XzhiaXQ7DQo+ICsJCWhkbWktPnNldF9jc3BfZGVwdGggPSBSR0I0NDRfOGJpdDsNCj4g KwkJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1JHQjsNCj4gKwkJaGRtaS0+Y29sb3JfZGVw dGggPSBIRE1JXzhfQklUOw0KPiArCQloZG1pLT5jb2xvcmltdGVyeSA9IEhETUlfQ09MT1JJTUVU UllfTk9ORTsNCj4gKwkJaGRtaS0+ZXh0ZW5kZWRfY29sb3JpbWV0cnkgPQ0KPiBIRE1JX0VYVEVO REVEX0NPTE9SSU1FVFJZX1JFU0VSVkVEOw0KPiArCQloZG1pLT5xdWFudGl6YXRpb25fcmFuZ2Ug PQ0KPiBIRE1JX1FVQU5USVpBVElPTl9SQU5HRV9ERUZBVUxUOw0KPiArCQloZG1pLT55Y2NfcXVh bnRpemF0aW9uX3JhbmdlID0NCj4gKwkJCUhETUlfWUNDX1FVQU5USVpBVElPTl9SQU5HRV9MSU1J VEVEOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAoaGRtaS0+aHBkICE9IEhETUlfUExVR19PVVQp ID8NCj4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOg0KPiArCQkJCQkJICAgIGNvbm5lY3Rv cl9zdGF0dXNfZGkNCj4gc2Nvbm5lY3RlZDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaGRt aV9jb25uX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4pDQo+ICt7DQo+ICsJZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm4pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGhkbWlf Y29ubl9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLA0KPiAr CQkJCQkgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUNCj4gKnN0YXRlLA0KPiArCQkJCQkgc3Ry dWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksDQo+ICsJCQkJCSB1aW50NjRfdCB2YWwpDQo+ICt7 DQo+ICsJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25uKGNvbm4pOw0K PiArDQo+ICsJc3Bpbl9sb2NrKCZoZG1pLT5wcm9wZXJ0eV9sb2NrKTsNCj4gKw0KPiArCWlmIChw cm9wZXJ0eSA9PSBoZG1pLT5jc3BfZGVwdGhfcHJvcCkgew0KPiArCQlpZiAodmFsICYgKGhkbWkt PnN1cHBvcnRfY3NwX2RlcHRoKSkNCj4gKwkJCWhkbWktPnNldF9jc3BfZGVwdGggPSB2YWw7DQo+ ICsJCWVsc2Ugew0KPiArCQkJc3Bpbl91bmxvY2soJmhkbWktPnByb3BlcnR5X2xvY2spOw0KPiAr CQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJCX0NCj4gKwl9IGVsc2Ugew0KPiArCQlzcGluX3VubG9j aygmaGRtaS0+cHJvcGVydHlfbG9jayk7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4g Kw0KPiArCXNwaW5fdW5sb2NrKCZoZG1pLT5wcm9wZXJ0eV9sb2NrKTsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiAraGRtaV9jb25uX2F0b21pY19nZXRfcHJvcGVy dHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sDQo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsDQo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX3Byb3Bl cnR5ICpwcm9wZXJ0eSwgdWludDY0X3QNCj4gKnZhbCkNCj4gK3sNCj4gKwlpbnQgcmV0ID0gLUVJ TlZBTDsNCj4gKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29u bik7DQo+ICsNCj4gKwlzcGluX2xvY2soJmhkbWktPnByb3BlcnR5X2xvY2spOw0KPiArDQo+ICsJ aWYgKHByb3BlcnR5ID09IGhkbWktPmNzcF9kZXB0aF9wcm9wKSB7DQo+ICsJCSp2YWwgPSBoZG1p LT5zdXBwb3J0X2NzcF9kZXB0aDsNCj4gKwkJcmV0ID0gMDsNCj4gKwl9DQo+ICsNCj4gKwlzcGlu X3VubG9jaygmaGRtaS0+cHJvcGVydHlfbG9jayk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4g Kw0KPiArdW5zaWduZWQgaW50IGdldF9oZG1pX2NvbG9yc3BhY2VfY29sb3JpbWV0cnkoDQo+ICsJ c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwgZW51bSBoZG1pX2NvbG9yc3BhY2UgKmNvbG9yc3Bh Y2UsDQo+ICsJZW51bSBoZG1pX2NvbG9yaW1ldHJ5ICpjb2xvcmltdGVyeSwNCj4gKwllbnVtIGhk bWlfZXh0ZW5kZWRfY29sb3JpbWV0cnkgKmV4dGVuZGVkX2NvbG9yaW1ldHJ5LA0KPiArCWVudW0g aGRtaV9xdWFudGl6YXRpb25fcmFuZ2UgKnF1YW50aXphdGlvbl9yYW5nZSwNCj4gKwllbnVtIGhk bWlfeWNjX3F1YW50aXphdGlvbl9yYW5nZSAqeWNjX3F1YW50aXphdGlvbl9yYW5nZSkNCj4gK3sN Cj4gKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2Up Ow0KPiArDQo+ICsJKmNvbG9yc3BhY2UgPSBoZG1pLT5jc3A7DQo+ICsJKmNvbG9yaW10ZXJ5ID0g aGRtaS0+Y29sb3JpbXRlcnk7DQo+ICsJKmV4dGVuZGVkX2NvbG9yaW1ldHJ5ID0gaGRtaS0+ZXh0 ZW5kZWRfY29sb3JpbWV0cnk7DQo+ICsJKnF1YW50aXphdGlvbl9yYW5nZSA9IGhkbWktPnF1YW50 aXphdGlvbl9yYW5nZTsNCj4gKwkqeWNjX3F1YW50aXphdGlvbl9yYW5nZSA9IGhkbWktPnljY19x dWFudGl6YXRpb25fcmFuZ2U7DQo+ICsJLy9EUEkgY2Fubm90IHN1cHBvcnQgQlQyMDIwIGNvbnZl cnNpb24sIHNvIG5vIG5lZWQNCj4gZXh0ZW5kZWRfY29sb3JpbWV0cnkgaW5mb3JtYXRpb24NCj4g KwlyZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZ2V0X2hkbWlfY29sb3JzcGFjZV9j b2xvcmltZXRyeSk7DQo+ICsNCj4gK3N0YXRpYyBpbnQgbXRrX2hkbWlfZW5hYmxlX2Rpc2FibGUo c3RydWN0IG10a19oZG1pICpoZG1pLCBib29sDQo+IGVuYWJsZSkNCj4gK3sNCj4gKwlpbnQgcmV0 Ow0KPiArDQo+ICsJaWYgKGVuYWJsZSAmJiAhaGRtaS0+aGRtaV9lbmFibGVkKSB7DQo+ICsJCWlm ICghaGRtaS0+cG93ZXJfY2xrX2VuYWJsZWQpIHsNCj4gKwkJCS8qIHBvd2VyIGRvbWFpbiBvbiAq Lw0KPiArCQkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhoZG1pLT5kZXYpOw0KPiArDQo+ICsJ CQkvKiBjbGsgb24gKi8NCj4gKwkJCW10a19oZG1pX2Nsa19lbmFibGUoaGRtaSk7DQo+ICsJCQlo ZG1pLT5wb3dlcl9jbGtfZW5hYmxlZCA9IHRydWU7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAoIWhk bWktPmlycV9yZWdpc3RlcmVkKSB7DQo+ICsJCQkvKiBkaXNhYmxlIGFsbCB0eCBpbnRlcnJ1cHRz ICovDQo+ICsJCQltdGtfaGRtaV9kaXNhYmxlX2FsbF9pbnQoaGRtaSk7DQo+ICsJCQkvKiByZXF1 ZXN0IGlycSAqLw0KPiArCQkJaGRtaS0+aGRtaV9pcnEgPQ0KPiArCQkJCWlycV9vZl9wYXJzZV9h bmRfbWFwKGhkbWktPmRldi0NCj4gPm9mX25vZGUsIDApOw0KPiArCQkJcmV0ID0gcmVxdWVzdF9p cnEoaGRtaS0+aGRtaV9pcnEsIG10a19oZG1pX2lzciwNCj4gKwkJCQkJICBJUlFGX1RSSUdHRVJf SElHSCwgImhkbWlpcnEiLA0KPiBoZG1pKTsNCj4gKwkJCWhkbWktPmlycV9yZWdpc3RlcmVkID0g dHJ1ZTsNCj4gKwkJCS8qIGVuYWJsZSBocGQgaW50ZXJydXB0ICovDQo+ICsJCQltdGtfaGRtaV9z ZXRfc3dfaHBkKGhkbWksIHRydWUpOw0KPiArCQkJbXRrX2hkbWlfZW5hYmxlX2hwZF9wb3JkX2ly cShoZG1pLCB0cnVlKTsNCj4gKwkJfQ0KPiArDQo+ICsJfSBlbHNlIGlmICghZW5hYmxlICYmIGhk bWktPmhkbWlfZW5hYmxlZCkgew0KPiArCQlpZiAoaGRtaS0+aXJxX3JlZ2lzdGVyZWQpIHsNCj4g KwkJCS8qIGZyZWUgaXJxICovDQo+ICsJCQlmcmVlX2lycShoZG1pLT5oZG1pX2lycSwgTlVMTCk7 DQo+ICsJCQloZG1pLT5pcnFfcmVnaXN0ZXJlZCA9IGZhbHNlOw0KPiArCQl9DQo+ICsNCj4gKwkJ aWYgKGhkbWktPnBvd2VyX2Nsa19lbmFibGVkKSB7DQo+ICsJCQkvKiBjbGsgZGlzYWJsZSAqLw0K PiArCQkJbXRrX2hkbWlfY2xrX2Rpc2FibGUoaGRtaSk7DQo+ICsJCQkvKiBwb3dlciBkb21haW4g b2ZmICovDQo+ICsJCQlyZXQgPSBwbV9ydW50aW1lX3B1dF9zeW5jKGhkbWktPmRldik7DQo+ICsJ CQloZG1pLT5wb3dlcl9jbGtfZW5hYmxlZCA9IGZhbHNlOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ ICsJaGRtaS0+aGRtaV9lbmFibGVkID0gZW5hYmxlOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGNzcF9kZXB0 aF9wcm9wc1tdID0gew0KPiArCXsgX19idWlsdGluX2ZmcyhSR0I0NDRfOGJpdCksICJSR0I0NDRf OGJpdCIgfSwNCj4gKwl7IF9fYnVpbHRpbl9mZnMoUkdCNDQ0XzEwYml0KSwgIlJHQjQ0NF8xMGJp dCIgfSwNCj4gKwl7IF9fYnVpbHRpbl9mZnMoUkdCNDQ0XzEyYml0KSwgIlJHQjQ0NF8xMGJpdCIg fSwNCj4gKwl7IF9fYnVpbHRpbl9mZnMoUkdCNDQ0XzE2Yml0KSwgIlJHQjQ0NF8xNmJpdCIgfSwN Cj4gKwl7IF9fYnVpbHRpbl9mZnMoWUNCQ1I0NDRfOGJpdCksICJZQ0JDUjQ0NF84Yml0IiB9LA0K PiArCXsgX19idWlsdGluX2ZmcyhZQ0JDUjQ0NF8xMGJpdCksICJZQ0JDUjQ0NF8xMGJpdCIgfSwN Cj4gKwl7IF9fYnVpbHRpbl9mZnMoWUNCQ1I0NDRfMTJiaXQpLCAiWUNCQ1I0NDRfMTJiaXQiIH0s DQo+ICsJeyBfX2J1aWx0aW5fZmZzKFlDQkNSNDQ0XzE2Yml0KSwgIllDQkNSNDQ0XzE2Yml0IiB9 LA0KPiArCXsgX19idWlsdGluX2ZmcyhZQ0JDUjQyMl84Yml0X05PX1NVUFBPUlQpLA0KPiAiWUNC Q1I0MjJfOGJpdF9OT19TVVBQT1JUIiB9LA0KPiArCXsgX19idWlsdGluX2ZmcyhZQ0JDUjQyMl8x MGJpdF9OT19TVVBQT1JUKSwNCj4gKwkgICJZQ0JDUjQyMl8xMGJpdF9OT19TVVBQT1JUIiB9LA0K PiArCXsgX19idWlsdGluX2ZmcyhZQ0JDUjQyMl8xMmJpdCksICJZQ0JDUjQyMl8xMmJpdCIgfSwN Cj4gKwl7IF9fYnVpbHRpbl9mZnMoWUNCQ1I0MjJfMTZiaXRfTk9fU1VQUE9SVCksDQo+ICsJICAi WUNCQ1I0MjJfMTZiaXRfTk9fU1VQUE9SVCIgfSwNCj4gKwl7IF9fYnVpbHRpbl9mZnMoWUNCQ1I0 MjBfOGJpdCksICJZQ0JDUjQyMF84Yml0IiB9LA0KPiArCXsgX19idWlsdGluX2ZmcyhZQ0JDUjQy MF8xMGJpdCksICJZQ0JDUjQyMF8xMGJpdCIgfSwNCj4gKwl7IF9fYnVpbHRpbl9mZnMoWUNCQ1I0 MjBfMTJiaXQpLCAiWUNCQ1I0MjBfMTJiaXQiIH0sDQo+ICsJeyBfX2J1aWx0aW5fZmZzKFlDQkNS NDIwXzE2Yml0KSwgIllDQkNSNDIwXzE2Yml0IiB9LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHZv aWQgbXRrX2hkbWlfY29ubmV0b3JfaW5pdF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2RldmljZQ0KPiAq ZHJtX2RldiwNCj4gKwkJCQkJICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQ0KPiArew0K PiArCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsNCj4g KwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOw0KPiArCS8qIHljYmNyNDIyIGNhbm5vdCBzdXBw b3J0IDgsMTAsMTZiaXQgKi8NCj4gKwl1bnNpZ25lZCBpbnQgc3VwcG9ydGVkX2NzcF9kZXB0aF9t YXNrID0NCj4gKwkJUkdCNDQ0XzhiaXQgfCBSR0I0NDRfMTBiaXQgfCBSR0I0NDRfMTJiaXQgfA0K PiBSR0I0NDRfMTZiaXQgfA0KPiArCQlZQ0JDUjQ0NF84Yml0IHwgWUNCQ1I0NDRfMTBiaXQgfCBZ Q0JDUjQ0NF8xMmJpdCB8DQo+ICsJCVlDQkNSNDQ0XzE2Yml0IHwgWUNCQ1I0MjJfMTJiaXQgfCBZ Q0JDUjQyMF84Yml0IHwNCj4gKwkJWUNCQ1I0MjBfMTBiaXQgfCBZQ0JDUjQyMF8xMmJpdCB8IFlD QkNSNDIwXzE2Yml0Ow0KPiArDQo+ICsJc3Bpbl9sb2NrX2luaXQoJmhkbWktPnByb3BlcnR5X2xv Y2spOw0KPiArDQo+ICsJLyogY3JlYXRlIGNvbG9yc3BhY2VfZGVwdGggYml0bWFzayBwcm9wZXJ0 eSAqLw0KPiArCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2JpdG1hc2soDQo+ICsJCWNvbm4t PmRldiwgMCwgImhkbWlfY29sb3JzcGFjZV9kZXB0aCIsIGNzcF9kZXB0aF9wcm9wcywNCj4gKwkJ QVJSQVlfU0laRShjc3BfZGVwdGhfcHJvcHMpLCBzdXBwb3J0ZWRfY3NwX2RlcHRoX21hc2spOw0K PiArDQo+ICsJaWYgKCFwcm9wKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwloZG1pLT5jc3BfZGVw dGhfcHJvcCA9IHByb3A7DQo+ICsJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNvbm4tPmJh c2UsIHByb3AsIDApOw0KPiArDQo+ICsJLyogY3JlYXRlIG10a19oZG1pX2Jsb2IgcHJvcGVydHks IGluY2x1ZGUgRURJRCBwYXJzZXIgaW5mbywNCj4gKwkgKiBzdWNoIGFzIG1heF90bWRzX2Nsb2Nr X3JhdGUsIG1heF90bWRzX2NoYXJhY3Rlcl9yYXRlLA0KPiBzdXBwb3J0IGRvbGJ5IHZpc2lvbg0K PiArCSAqLw0KPiArCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGNvbm4tPmRldiwNCj4gKwkJ CQkgICBEUk1fTU9ERV9QUk9QX0JMT0IgfA0KPiBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwNCj4g KwkJCQkgICAiSERNSV9JTkZPIiwgMCk7DQo+ICsJaWYgKCFwcm9wKQ0KPiArCQlyZXR1cm47DQo+ ICsNCj4gKwloZG1pLT5oZG1pX2luZm9fYmxvYiA9IHByb3A7DQo+ICsJaGRtaS0+aGRtaV9pbmZv X2Jsb2JfcHRyID0gTlVMTDsNCj4gKwlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmY29ubi0+ YmFzZSwgcHJvcCwgMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2NvbnZl cnRfY29sb3JzcGFjZV9kZXB0aChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsJc3dp dGNoIChoZG1pLT5zZXRfY3NwX2RlcHRoKSB7DQo+ICsJY2FzZSBSR0I0NDRfOGJpdDoNCj4gKwkJ aGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1JHQjsNCj4gKwkJaGRtaS0+Y29sb3JfZGVwdGgg PSBIRE1JXzhfQklUOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFJHQjQ0NF8xMGJpdDoNCj4gKwkJ aGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1JHQjsNCj4gKwkJaGRtaS0+Y29sb3JfZGVwdGgg PSBIRE1JXzEwX0JJVDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBSR0I0NDRfMTJiaXQ6DQo+ICsJ CWhkbWktPmNzcCA9IEhETUlfQ09MT1JTUEFDRV9SR0I7DQo+ICsJCWhkbWktPmNvbG9yX2RlcHRo ID0gSERNSV8xMl9CSVQ7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgUkdCNDQ0XzE2Yml0Og0KPiAr CQloZG1pLT5jc3AgPSBIRE1JX0NPTE9SU1BBQ0VfUkdCOw0KPiArCQloZG1pLT5jb2xvcl9kZXB0 aCA9IEhETUlfMTZfQklUOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFlDQkNSNDQ0XzhiaXQ6DQo+ ICsJCWhkbWktPmNzcCA9IEhETUlfQ09MT1JTUEFDRV9ZVVY0NDQ7DQo+ICsJCWhkbWktPmNvbG9y X2RlcHRoID0gSERNSV84X0JJVDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBZQ0JDUjQ0NF8xMGJp dDoNCj4gKwkJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1lVVjQ0NDsNCj4gKwkJaGRtaS0+ Y29sb3JfZGVwdGggPSBIRE1JXzEwX0JJVDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBZQ0JDUjQ0 NF8xMmJpdDoNCj4gKwkJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1lVVjQ0NDsNCj4gKwkJ aGRtaS0+Y29sb3JfZGVwdGggPSBIRE1JXzEyX0JJVDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBZ Q0JDUjQ0NF8xNmJpdDoNCj4gKwkJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1lVVjQ0NDsN Cj4gKwkJaGRtaS0+Y29sb3JfZGVwdGggPSBIRE1JXzE2X0JJVDsNCj4gKwkJYnJlYWs7DQo+ICsJ Y2FzZSBZQ0JDUjQyMl8xMmJpdDoNCj4gKwkJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1lV VjQyMjsNCj4gKwkJaGRtaS0+Y29sb3JfZGVwdGggPSBIRE1JXzEyX0JJVDsNCj4gKwkJYnJlYWs7 DQo+ICsJY2FzZSBZQ0JDUjQyMF84Yml0Og0KPiArCQloZG1pLT5jc3AgPSBIRE1JX0NPTE9SU1BB Q0VfWVVWNDIwOw0KPiArCQloZG1pLT5jb2xvcl9kZXB0aCA9IEhETUlfOF9CSVQ7DQo+ICsJCWJy ZWFrOw0KPiArCWNhc2UgWUNCQ1I0MjBfMTBiaXQ6DQo+ICsJCWhkbWktPmNzcCA9IEhETUlfQ09M T1JTUEFDRV9ZVVY0MjA7DQo+ICsJCWhkbWktPmNvbG9yX2RlcHRoID0gSERNSV8xMF9CSVQ7DQo+ ICsJCWJyZWFrOw0KPiArCWNhc2UgWUNCQ1I0MjBfMTJiaXQ6DQo+ICsJCWhkbWktPmNzcCA9IEhE TUlfQ09MT1JTUEFDRV9ZVVY0MjA7DQo+ICsJCWhkbWktPmNvbG9yX2RlcHRoID0gSERNSV8xMl9C SVQ7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgWUNCQ1I0MjBfMTZiaXQ6DQo+ICsJCWhkbWktPmNz cCA9IEhETUlfQ09MT1JTUEFDRV9ZVVY0MjA7DQo+ICsJCWhkbWktPmNvbG9yX2RlcHRoID0gSERN SV8xNl9CSVQ7DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsNCj4gKwkJaGRtaS0+Y3Nw ID0gSERNSV9DT0xPUlNQQUNFX1JHQjsNCj4gKwkJaGRtaS0+Y29sb3JfZGVwdGggPSBIRE1JXzhf QklUOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtdGtfaGRtaV9jb25uX2dldF9t b2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubikNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRrX2hk bWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7DQo+ICsJc3RydWN0IGVkaWQgKmVk aWQ7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmICghaGRtaS0+ZGRjX2FkcHQpDQo+ICsJCXJl dHVybiAtRU5PREVWOw0KPiArDQo+ICsJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uLCBoZG1pLT5k ZGNfYWRwdCk7DQo+ICsJaWYgKCFlZGlkKQ0KPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gKw0KPiAr CWhkbWktPmR2aV9tb2RlID0gIWRybV9kZXRlY3RfaGRtaV9tb25pdG9yKGVkaWQpOw0KPiArDQo+ ICsJZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uLCBlZGlkKTsNCj4gKw0K PiArCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uLCBlZGlkKTsNCj4gKw0KPiArCWtmcmVl KGVkaWQpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBt dGtfaGRtaV9jb25uX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sDQo+ICsJ CQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQ0KPiArew0KPiArCWlmIChtb2Rl LT5jbG9jayA8IDI3MDAwKQ0KPiArCQlyZXR1cm4gTU9ERV9DTE9DS19MT1c7DQo+ICsJaWYgKG1v ZGUtPmNsb2NrID4gNTk0MDAwKQ0KPiArCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOw0KPiArDQo+ ICsJcmV0dXJuIGRybV9tb2RlX3ZhbGlkYXRlX3NpemUobW9kZSwgMHgxZmZmLCAweDFmZmYpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICptdGtfaGRtaV9jb25uX2Jl c3RfZW5jKHN0cnVjdA0KPiBkcm1fY29ubmVjdG9yICpjb25uKQ0KPiArew0KPiArCXN0cnVjdCBt dGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsNCj4gKw0KPiArCXJldHVy biBoZG1pLT5icmlkZ2UuZW5jb2RlcjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fY29ubmVjdG9yX2Z1bmNzIG10a19oZG1pX2Nvbm5lY3Rvcl9mdW5jcyA9IHsNCj4gKwku ZGV0ZWN0ID0gaGRtaV9jb25uX2RldGVjdCwNCj4gKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJf cHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywNCj4gKwkuZGVzdHJveSA9IGhkbWlfY29ubl9k ZXN0cm95LA0KPiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwN Cj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9DQo+IGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9kdXBsaWNhdGVfc3RhdGUsDQo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0NCj4gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsDQo+ICsJLmF0b21pY19zZXRf cHJvcGVydHkgPSBoZG1pX2Nvbm5fYXRvbWljX3NldF9wcm9wZXJ0eSwNCj4gKwkuYXRvbWljX2dl dF9wcm9wZXJ0eSA9IGhkbWlfY29ubl9hdG9taWNfZ2V0X3Byb3BlcnR5LA0KPiArfTsNCj4gKw0K PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcw0KPiBtdGtf aGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gew0KPiArCS5nZXRfbW9kZXMgPSBtdGtfaGRt aV9jb25uX2dldF9tb2RlcywNCj4gKwkubW9kZV92YWxpZCA9IG10a19oZG1pX2Nvbm5fbW9kZV92 YWxpZCwNCj4gKwkuYmVzdF9lbmNvZGVyID0gbXRrX2hkbWlfY29ubl9iZXN0X2VuYywNCj4gK307 DQo+ICsNCj4gKy8qDQo+ICsgKiBCcmlkZ2UgY2FsbGJhY2tzDQo+ICsgKi8NCj4gKw0KPiArc3Rh dGljIGludCBtdGtfaGRtaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Us DQo+ICsJCQkJICBlbnVtIGRybV9icmlkZ2VfYXR0YWNoX2ZsYWdzIGZsYWdzKQ0KPiArew0KPiAr CXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7DQo+ ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmVu Y29kZXItPmRldiwgJmhkbWktPmNvbm4sDQo+ICsJCQkJICZtdGtfaGRtaV9jb25uZWN0b3JfZnVu Y3MsDQo+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSk7DQo+ICsJaWYgKHJldCkNCj4g KwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmaGRtaS0+ Y29ubiwNCj4gJm10a19oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOw0KPiArDQo+ICsJaGRt aS0+Y29ubi5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOw0KPiArCWhkbWktPmNvbm4u aW50ZXJsYWNlX2FsbG93ZWQgPSBmYWxzZTsNCj4gKwloZG1pLT5jb25uLmRvdWJsZXNjYW5fYWxs b3dlZCA9IGZhbHNlOw0KPiArCWhkbWktPmNvbm4ueWNiY3JfNDIwX2FsbG93ZWQgPSB0cnVlOw0K PiArDQo+ICsJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmaGRtaS0+Y29ubiwg YnJpZGdlLQ0KPiA+ZW5jb2Rlcik7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4g Kw0KPiArCW10a19oZG1pX2Nvbm5ldG9yX2luaXRfcHJvcGVydHkoYnJpZGdlLT5kZXYsICZoZG1p LT5jb25uKTsNCj4gKw0KPiArCXBtX3J1bnRpbWVfZW5hYmxlKGhkbWktPmRldik7DQo+ICsJbXRr X2hkbWlfZW5hYmxlX2Rpc2FibGUoaGRtaSwgdHJ1ZSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBlZGlkICptdGtfaGRtaV9icmlkZ2VfZ2V0X2VkaWQo c3RydWN0IGRybV9icmlkZ2UNCj4gKmJyaWRnZSwNCj4gKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcg0KPiAqY29ubmVjdG9yKQ0KPiArew0KPiArCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9 IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7DQo+ICsJc3RydWN0IGVkaWQgKmVkaWQ7DQo+ ICsNCj4gKwlpZiAoIWhkbWktPmRkY19hZHB0KQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwllZGlk ID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgaGRtaS0+ZGRjX2FkcHQpOw0KPiArCWlmICghZWRp ZCkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsJaGRtaS0+ZHZpX21vZGUgPSAhZHJtX2RldGVjdF9t b25pdG9yX2F1ZGlvKGVkaWQpOw0KPiArCXJldHVybiBlZGlkOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgYm9vbCBtdGtfaGRtaV9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlLA0KPiArCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZQ0KPiAqbW9k ZSwNCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUNCj4gKmFkanVzdGVkX21v ZGUpDQo+ICt7DQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10 a19oZG1pX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ICsJCQkJ CSAgIHN0cnVjdCBkcm1fYnJpZGdlX3N0YXRlDQo+ICpvbGRfYnJpZGdlX3N0YXRlKQ0KPiArew0K PiArCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7 DQo+ICsNCj4gKwlpZiAoIWhkbWktPmVuYWJsZWQpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCW10 a19oZG1pX2h3X3NlbmRfYXZfbXV0ZShoZG1pKTsNCj4gKwl1c2xlZXBfcmFuZ2UoNTAwMDAsIDUw MDUwKTsNCj4gKwltdGtfaGRtaV9od192aWRfYmxhY2soaGRtaSwgdHJ1ZSk7DQo+ICsJbXRrX2hk bWlfaHdfYXVkX211dGUoaGRtaSk7DQo+ICsJbXRrX2hkbWlfZGlzYWJsZV9oZGNwX2VuY3J5cHQo aGRtaSk7DQo+ICsJdXNsZWVwX3JhbmdlKDUwMDAwLCA1MDA1MCk7DQo+ICsNCj4gKwloZG1pLT5l bmFibGVkID0gZmFsc2U7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2hhbmRs ZV9wbHVnZ2VkX2NoYW5nZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksDQo+IGJvb2wgcGx1Z2dlZCkN Cj4gK3sNCj4gKwlpZiAoaGRtaS0+cGx1Z2dlZF9jYiAmJiBoZG1pLT5jb2RlY19kZXYpDQo+ICsJ CWhkbWktPnBsdWdnZWRfY2IoaGRtaS0+Y29kZWNfZGV2LCBwbHVnZ2VkKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlLA0KPiArCQkJCQkJc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUNCj4gKm9sZF9z dGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Jy aWRnZShicmlkZ2UpOw0KPiArDQo+ICsJaWYgKCFoZG1pLT5wb3dlcmVkKQ0KPiArCQlyZXR1cm47 DQo+ICsNCj4gKwlwaHlfcG93ZXJfb2ZmKGhkbWktPnBoeSk7DQo+ICsNCj4gKwloZG1pLT5wb3dl cmVkID0gZmFsc2U7DQo+ICsNCj4gKwltdGtfaGRtaV9yZXNldF9jb2xvcnNwYWNlX3NldHRpbmco aGRtaSk7DQo+ICsNCj4gKwkvKiBzaWduYWwgdGhlIGRpc2Nvbm5lY3QgZXZlbnQgdG8gYXVkaW8g Y29kZWMgKi8NCj4gKwltdGtfaGRtaV9oYW5kbGVfcGx1Z2dlZF9jaGFuZ2UoaGRtaSwgZmFsc2Up Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArbXRrX2hkbWlfYnJpZGdlX21vZGVfc2V0 KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ICsJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUsDQo+ICsJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFk anVzdGVkX21vZGUpDQo+ICt7DQo+ICsJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhf ZnJvbV9icmlkZ2UoYnJpZGdlKTsNCj4gKw0KPiArCWRybV9tb2RlX2NvcHkoJmhkbWktPm1vZGUs IGFkanVzdGVkX21vZGUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV9zZW5k X2luZm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksDQo+ICsJCQkJICAgIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQ0KPiArew0KPiArCW10a19oZG1pX3NldHVwX2F2aV9pbmZvZnJh bWUoaGRtaSwgbW9kZSk7DQo+ICsJbXRrX2hkbWlfc2V0dXBfc3BkX2luZm9mcmFtZShoZG1pLCAi bWVkaWF0ZWsiLCAiT24tY2hpcCBIRE1JIik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10 a19oZG1pX2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ICsJ CQkJCSAgICAgIHN0cnVjdCBkcm1fYnJpZGdlX3N0YXRlDQo+ICpvbGRfc3RhdGUpDQo+ICt7DQo+ ICsJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsN Cj4gKw0KPiArCW10a19oZG1pX2NvbnZlcnRfY29sb3JzcGFjZV9kZXB0aChoZG1pKTsNCj4gKwlt dGtfaGRtaV9vdXRwdXRfc2V0X2Rpc3BsYXlfbW9kZShoZG1pLCAmaGRtaS0+bW9kZSk7DQo+ICsJ bXRrX2hkbWlfc2VuZF9pbmZvZnJhbWUoaGRtaSwgJmhkbWktPm1vZGUpOw0KPiArDQo+ICsJaGRt aS0+cG93ZXJlZCA9IHRydWU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2Jy aWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCj4gKwkJCQkJICAgICAgc3Ry dWN0IGRybV9icmlkZ2Vfc3RhdGUNCj4gKm9sZF9zdGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRr X2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOw0KPiArDQo+ICsJcGh5 X3Bvd2VyX29uKGhkbWktPnBoeSk7DQo+ICsNCj4gKwltdGtfaGRtaV9od192aWRfYmxhY2soaGRt aSwgZmFsc2UpOw0KPiArCW10a19oZG1pX2h3X2F1ZF91bm11dGUoaGRtaSk7DQo+ICsNCj4gKwkv KiBzaWduYWwgdGhlIGNvbm5lY3QgZXZlbnQgdG8gYXVkaW8gY29kZWMgKi8NCj4gKwltdGtfaGRt aV9oYW5kbGVfcGx1Z2dlZF9jaGFuZ2UoaGRtaSwgdHJ1ZSk7DQo+ICsNCj4gKwloZG1pLT5lbmFi bGVkID0gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdl X2Z1bmNzIG10a19oZG1pX2JyaWRnZV9mdW5jcyA9IHsNCj4gKwkuYXR0YWNoID0gbXRrX2hkbWlf YnJpZGdlX2F0dGFjaCwNCj4gKwkubW9kZV9maXh1cCA9IG10a19oZG1pX2JyaWRnZV9tb2RlX2Zp eHVwLA0KPiArCS5hdG9taWNfZGlzYWJsZSA9IG10a19oZG1pX2JyaWRnZV9kaXNhYmxlLA0KPiAr CS5hdG9taWNfcG9zdF9kaXNhYmxlID0gbXRrX2hkbWlfYnJpZGdlX3Bvc3RfZGlzYWJsZSwNCj4g KwkubW9kZV9zZXQgPSBtdGtfaGRtaV9icmlkZ2VfbW9kZV9zZXQsDQo+ICsJLmF0b21pY19wcmVf ZW5hYmxlID0gbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFibGUsDQo+ICsJLmF0b21pY19lbmFibGUg PSBtdGtfaGRtaV9icmlkZ2VfZW5hYmxlLA0KPiArCS5nZXRfZWRpZCA9IG10a19oZG1pX2JyaWRn ZV9nZXRfZWRpZCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgbXRrX2hkbWlfZHRfcGFyc2Vf cGRhdGEoc3RydWN0IG10a19oZG1pICpoZG1pLA0KPiArCQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsN Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOw0KPiArCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqaTJjX25wOw0KPiArCXN0cnVjdCByZXNvdXJjZSAqbWVtOw0KPiArCWludCBy ZXQ7DQo+ICsJc3RydWN0IG10a19oZG1pX2RkYyAqZGRjOw0KPiArDQo+ICsJcmV0ID0gbXRrX2hk bWlfZ2V0X2FsbF9jbGsoaGRtaSwgbnApOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7 DQo+ICsNCj4gKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N RU0sIDApOw0KPiArCWhkbWktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0p Ow0KPiArCWlmIChJU19FUlIoaGRtaS0+cmVncykpDQo+ICsJCXJldHVybiBQVFJfRVJSKGhkbWkt PnJlZ3MpOw0KPiArDQo+ICsJaTJjX25wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LT5kZXYub2Zf bm9kZSwgImRkYy1pMmMtYnVzIiwgMCk7DQo+ICsJaWYgKCFpMmNfbnApIHsNCj4gKwkJb2Zfbm9k ZV9wdXQocGRldi0+ZGV2Lm9mX25vZGUpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ ICsJb2Zfbm9kZV9wdXQocGRldi0+ZGV2Lm9mX25vZGUpOw0KPiArDQo+ICsJaGRtaS0+ZGRjX2Fk cHQgPSBvZl9maW5kX2kyY19hZGFwdGVyX2J5X25vZGUoaTJjX25wKTsNCj4gKwlpZiAoIWhkbWkt PmRkY19hZHB0KQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWRkYyA9IGhkbWlfZGRj X2N0eF9mcm9tX210a19oZG1pKGhkbWkpOw0KPiArCWRkYy0+cmVncyA9IGhkbWktPnJlZ3M7DQo+ ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50IG10a19oZG1pX3NldF9wbHVnZ2Vk X2NiKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwNCj4gaGRtaV9jb2RlY19wbHVnZ2VkX2NiIGZuLA0K PiArCQkJICAgIHN0cnVjdCBkZXZpY2UgKmNvZGVjX2RldikNCj4gK3sNCj4gKwlib29sIHBsdWdn ZWQ7DQo+ICsNCj4gKwloZG1pLT5wbHVnZ2VkX2NiID0gZm47DQo+ICsJaGRtaS0+Y29kZWNfZGV2 ID0gY29kZWNfZGV2Ow0KPiArCXBsdWdnZWQgPSAoaGRtaS0+aHBkID09IEhETUlfUExVR19JTl9B TkRfU0lOS19QT1dFUl9PTikgPyB0cnVlDQo+IDogZmFsc2U7DQo+ICsJbXRrX2hkbWlfaGFuZGxl X3BsdWdnZWRfY2hhbmdlKGhkbWksIHBsdWdnZWQpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gKy8qDQo+ICsgKiBIRE1JIGF1ZGlvIGNvZGVjIGNhbGxiYWNrcw0KPiArICovDQo+ ICtzdGF0aWMgaW50IG10a19oZG1pX2F1ZGlvX2hvb2tfcGx1Z2dlZF9jYihzdHJ1Y3QgZGV2aWNl ICpkZXYsIHZvaWQNCj4gKmRhdGEsDQo+ICsJCQkJCSAgaGRtaV9jb2RlY19wbHVnZ2VkX2NiIGZu LA0KPiArCQkJCQkgIHN0cnVjdCBkZXZpY2UgKmNvZGVjX2RldikNCj4gK3sNCj4gKwlzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCWlmICghaGRt aSkNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsNCj4gKwlyZXR1cm4gbXRrX2hkbWlfc2V0X3Bs dWdnZWRfY2IoaGRtaSwgZm4sIGNvZGVjX2Rldik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg bXRrX2hkbWlfYXVkaW9faHdfcGFyYW1zKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwN Cj4gKwkJCQkgICAgc3RydWN0IGhkbWlfY29kZWNfZGFpZm10ICpkYWlmbXQsDQo+ICsJCQkJICAg IHN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyAqcGFyYW1zKQ0KPiArew0KPiArCXN0cnVjdCBtdGtf aGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArCXN0cnVjdCBoZG1pX2F1ZGlv X3BhcmFtIGhkbWlfcGFyYW1zOw0KPiArCXVuc2lnbmVkIGludCBjaGFuID0gcGFyYW1zLT5jZWEu Y2hhbm5lbHM7DQo+ICsNCj4gKwlpZiAoIWhkbWktPmJyaWRnZS5lbmNvZGVyKQ0KPiArCQlyZXR1 cm4gLUVOT0RFVjsNCj4gKw0KPiArCXN3aXRjaCAoY2hhbikgew0KPiArCWNhc2UgMjoNCj4gKwkJ aGRtaV9wYXJhbXMuYXVkX2lucHV0X2NoYW5fdHlwZSA9DQo+IEhETUlfQVVEX0NIQU5fVFlQRV8y XzA7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgNDoNCj4gKwkJaGRtaV9wYXJhbXMuYXVkX2lucHV0 X2NoYW5fdHlwZSA9DQo+IEhETUlfQVVEX0NIQU5fVFlQRV80XzA7DQo+ICsJCWJyZWFrOw0KPiAr CWNhc2UgNjoNCj4gKwkJaGRtaV9wYXJhbXMuYXVkX2lucHV0X2NoYW5fdHlwZSA9DQo+IEhETUlf QVVEX0NIQU5fVFlQRV81XzE7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgODoNCj4gKwkJaGRtaV9w YXJhbXMuYXVkX2lucHV0X2NoYW5fdHlwZSA9DQo+IEhETUlfQVVEX0NIQU5fVFlQRV83XzE7DQo+ ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4g Kw0KPiArCXN3aXRjaCAocGFyYW1zLT5zYW1wbGVfcmF0ZSkgew0KPiArCWNhc2UgMzIwMDA6DQo+ ICsJY2FzZSA0NDEwMDoNCj4gKwljYXNlIDQ4MDAwOg0KPiArCWNhc2UgODgyMDA6DQo+ICsJY2Fz ZSA5NjAwMDoNCj4gKwljYXNlIDE3NjQwMDoNCj4gKwljYXNlIDE5MjAwMDoNCj4gKwkJYnJlYWs7 DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJc3dp dGNoIChkYWlmbXQtPmZtdCkgew0KPiArCWNhc2UgSERNSV9JMlM6DQo+ICsJCWhkbWlfcGFyYW1z LmF1ZF9jb2RlYyA9IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfUENNOw0KPiArCQloZG1pX3BhcmFt cy5hdWRfc2FtcGVfc2l6ZSA9IEhETUlfQVVESU9fU0FNUExFX1NJWkVfMTY7DQo+ICsJCWhkbWlf cGFyYW1zLmF1ZF9pbnB1dF90eXBlID0gSERNSV9BVURfSU5QVVRfSTJTOw0KPiArCQloZG1pX3Bh cmFtcy5hdWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfSTJTXzI0QklUOw0KPiArCQloZG1pX3Bh cmFtcy5hdWRfbWNsayA9IEhETUlfQVVEX01DTEtfMTI4RlM7DQo+ICsJCWJyZWFrOw0KPiArCWRl ZmF1bHQ6DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCW1lbWNweSgmaGRt aV9wYXJhbXMuY29kZWNfcGFyYW1zLCBwYXJhbXMsDQo+ICsJICAgICAgIHNpemVvZihoZG1pX3Bh cmFtcy5jb2RlY19wYXJhbXMpKTsNCj4gKw0KPiArCW10a19oZG1pX2F1ZGlvX3NldF9wYXJhbSho ZG1pLCAmaGRtaV9wYXJhbXMpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgbXRrX2hkbWlfYXVkaW9fc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEpDQo+ICt7DQo+ICsJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRh KGRldik7DQo+ICsNCj4gKwltdGtfaGRtaV9hdWRpb19lbmFibGUoaGRtaSk7DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfYXVkaW9fc2h1dGRv d24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCBtdGtf aGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsJbXRrX2hkbWlfYXVk aW9fZGlzYWJsZShoZG1pKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtdGtfaGRtaV9hdWRp b19tdXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgYm9vbA0KPiBlbmFibGUsDQo+ ICsJCQkgICAgICAgaW50IGRpcmVjdGlvbikNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRrX2hkbWkgKmhk bWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCWlmIChkaXJlY3Rpb24gIT0gU05E UlZfUENNX1NUUkVBTV9QTEFZQkFDSykNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwlpZiAoZW5h YmxlKQ0KPiArCQltdGtfaGRtaV9od19hdWRfbXV0ZShoZG1pKTsNCj4gKwllbHNlDQo+ICsJCW10 a19oZG1pX2h3X2F1ZF91bm11dGUoaGRtaSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBtdGtfaGRtaV9hdWRpb19nZXRfZWxkKHN0cnVjdCBkZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwNCj4gdWludDhfdCAqYnVmLA0KPiArCQkJCSAgc2l6ZV90IGxlbikNCj4g K3sNCj4gKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4g KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiA9ICZoZG1pLT5jb25uOw0KPiArCXVuc2lnbmVk IGludCBpOw0KPiArDQo+ICsJZGV2X2RiZyhkZXYsICJFTEQgZGF0YSBzdGFydFxuIik7DQo+ICsJ Zm9yIChpID0gMDsgaSA8IDEyODsgaSArPSA4KSB7DQo+ICsJCWRldl9kYmcoZGV2LCAiJTJ4ICUy eCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeFxuIiwgY29ubi0NCj4gPmVsZFtpXSwNCj4gKwkJCWNv bm4tPmVsZFtpICsgMV0sIGNvbm4tPmVsZFtpICsgMl0sIGNvbm4tPmVsZFtpIA0KPiArIDNdLA0K PiArCQkJY29ubi0+ZWxkW2kgKyA0XSwgY29ubi0+ZWxkW2kgKyA1XSwgY29ubi0+ZWxkW2kgDQo+ ICsgNl0sDQo+ICsJCQljb25uLT5lbGRbaSArIDddKTsNCj4gKwl9DQo+ICsJZGV2X2RiZyhkZXYs ICJFTEQgZGF0YSBlbmRcbiIpOw0KPiArDQo+ICsJbWVtY3B5KGJ1ZiwgaGRtaS0+Y29ubi5lbGQs IG1pbihzaXplb2YoaGRtaS0+Y29ubi5lbGQpLCBsZW4pKTsNCj4gKw0KPiArCXJldHVybiAwOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGhkbWlfY29kZWNfb3BzIG10a19oZG1p X2F1ZGlvX2NvZGVjX29wcyA9IHsNCj4gKwkuaHdfcGFyYW1zID0gbXRrX2hkbWlfYXVkaW9faHdf cGFyYW1zLA0KPiArCS5hdWRpb19zdGFydHVwID0gbXRrX2hkbWlfYXVkaW9fc3RhcnR1cCwNCj4g KwkuYXVkaW9fc2h1dGRvd24gPSBtdGtfaGRtaV9hdWRpb19zaHV0ZG93biwNCj4gKwkubXV0ZV9z dHJlYW0gPSBtdGtfaGRtaV9hdWRpb19tdXRlLA0KPiArCS5nZXRfZWxkID0gbXRrX2hkbWlfYXVk aW9fZ2V0X2VsZCwNCj4gKwkuaG9va19wbHVnZ2VkX2NiID0gbXRrX2hkbWlfYXVkaW9faG9va19w bHVnZ2VkX2NiLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfcmVnaXN0ZXJf YXVkaW9fZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRrX2hk bWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKwlzdHJ1Y3QgaGRtaV9jb2RlY19w ZGF0YSBjb2RlY19kYXRhID0gew0KPiArCQkub3BzID0gJm10a19oZG1pX2F1ZGlvX2NvZGVjX29w cywNCj4gKwkJLm1heF9pMnNfY2hhbm5lbHMgPSA4LA0KPiArCQkuaTJzID0gMSwNCj4gKwkJLmRh dGEgPSBoZG1pLA0KPiArCX07DQo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsNCj4g Kw0KPiArCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShkZXYsIEhETUlfQ09E RUNfRFJWX05BTUUsDQo+ICsJCQkJCSAgICAgUExBVEZPUk1fREVWSURfQVVUTywNCj4gJmNvZGVj X2RhdGEsDQo+ICsJCQkJCSAgICAgc2l6ZW9mKGNvZGVjX2RhdGEpKTsNCj4gKwlpZiAoSVNfRVJS KHBkZXYpKQ0KPiArCQlyZXR1cm47DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbXRrX2RybV9o ZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0 IG10a19oZG1pICpoZG1pOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+ ICsJaW50IHJldDsNCj4gKw0KPiArCWhkbWkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhk bWkpLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWhkbWkpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0K PiArDQo+ICsJaGRtaS0+ZGV2ID0gZGV2Ow0KPiArDQo+ICsJaGRtaS0+YXVkX3BhcmFtID0NCj4g KwkJZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtKSwNCj4g R0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFoZG1pLT5hdWRfcGFyYW0pDQo+ICsJCXJldHVybiAtRU5P TUVNOw0KPiArDQo+ICsJaGRtaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgImhkbWkiKTsNCj4g KwlpZiAoSVNfRVJSKGhkbWktPnBoeSkpIHsNCj4gKwkJcmV0ID0gUFRSX0VSUihoZG1pLT5waHkp Ow0KPiArCQlyZXR1cm4gcmV0Ow0KcmV0dXJuIFBUUl9FUlIoaGRtaS0+cGh5KTsNCj4gKwl9DQo+ ICsNCj4gKwlyZXQgPSBtdGtfaGRtaV9kdF9wYXJzZV9wZGF0YShoZG1pLCBwZGV2KTsNCj4gKwlp ZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEo cGRldiwgaGRtaSk7DQo+ICsNCj4gKwlyZXQgPSBtdGtfaGRtaV9vdXRwdXRfaW5pdChoZG1pKTsN Cj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJbXRrX2hkbWlfcmVnaXN0 ZXJfYXVkaW9fZHJpdmVyKGRldik7DQo+ICsNCj4gKwltdGtfaGRtaV9pbml0X3dvcmtxdWV1ZSho ZG1pKTsNCj4gKw0KPiArCWhkbWktPmJyaWRnZS5mdW5jcyA9ICZtdGtfaGRtaV9icmlkZ2VfZnVu Y3M7DQo+ICsJaGRtaS0+YnJpZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsNCj4gKwlk cm1fYnJpZGdlX2FkZCgmaGRtaS0+YnJpZGdlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IG10a19kcm1faGRtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsNCj4gKw0KPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlk Z2UpOw0KPiArCW10a19oZG1pX2Nsa19kaXNhYmxlKGhkbWkpOw0KPiArDQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCnVzZSBfX21heWJlX3VudXNl ZA0KPiArc3RhdGljIGludCBtdGtfaGRtaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCj4g K3sNCj4gKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4g KyNpZmRlZiBDT05GSUdfRFJNX01FRElBVEVLX0hETUlfU1VTUEVORF9MT1dfUE9XRVINCj4gKw0K PiArCWlmIChoZG1pLT5wb3dlcl9jbGtfZW5hYmxlZCkgew0KPiArCQltdGtfaGRtaV9jbGtfZGlz YWJsZShoZG1pKTsNCj4gKwkJcG1fcnVudGltZV9wdXRfc3luYyhoZG1pLT5kZXYpOw0KPiArCQlo ZG1pLT5wb3dlcl9jbGtfZW5hYmxlZCA9IGZhbHNlOw0KPiArCX0NCj4gKw0KPiArCWRldl9kYmco ZGV2LCAiaGRtaSBzdXNwZW5kIHN1Y2Nlc3MhXG4iKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiAr DQo+ICsjZWxzZQ0KPiArDQo+ICsJZGV2aWNlX3NldF93YWtldXBfcGF0aChkZXYpOw0KPiArCWRl dl9kYmcoZGV2LCAiaGRtaSBzdXNwZW5kIHN1Y2Nlc3MhXG4iKTsNCj4gKw0KPiArCXJldHVybiAw Ow0KPiArI2VuZGlmDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbXRrX2hkbWlfcmVzdW1lKHN0 cnVjdCBkZXZpY2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsNCj4gKyNpZmRlZiBDT05GSUdfRFJNX01FRElBVEVLX0hETUlfU1VT UEVORF9MT1dfUE9XRVINCj4gKw0KPiArCWlmICghaGRtaS0+cG93ZXJfY2xrX2VuYWJsZWQpIHsN Cj4gKwkJcG1fcnVudGltZV9nZXRfc3luYyhoZG1pLT5kZXYpOw0KPiArDQo+ICsJCW10a19oZG1p X2Nsa19lbmFibGUoaGRtaSk7DQo+ICsJCWhkbWktPnBvd2VyX2Nsa19lbmFibGVkID0gdHJ1ZTsN Cj4gKwl9DQo+ICsNCj4gKwlkZXZfZGJnKGRldiwgImhkbWkgcmVzdW1lIHN1Y2Nlc3MhXG4iKTsN Cj4gKwlyZXR1cm4gMDsNCj4gKw0KPiArI2Vsc2UNCj4gKw0KPiArCW10a19oZG1pX2Nsa19lbmFi bGUoaGRtaSk7DQo+ICsNCj4gKwlkZXZfZGJnKGRldiwgImhkbWkgcmVzdW1lIHN1Y2Nlc3MhXG4i KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArI2VuZGlmDQo+ICt9DQo+ICsjZW5kaWYNCj4gK3N0 YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtdGtfaGRtaV9wbV9vcHMsIG10a19oZG1pX3N1c3BlbmQs DQo+IG10a19oZG1pX3Jlc3VtZSk7DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIG10a19kcm1faGRtaV9vZl9pZHNbXSA9IHsNCj4gKwl7DQo+ICsJCS5jb21wYXRpYmxl ID0gIm1lZGlhdGVrLG10ODE5NS1oZG1pIiwNCj4gKwl9LA0KPiArCXt9DQo+ICt9Ow0KPiArDQo+ ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9tdDgxOTVfZHJpdmVyID0g ew0KPiArCS5wcm9iZSA9IG10a19kcm1faGRtaV9wcm9iZSwNCj4gKwkucmVtb3ZlID0gbXRrX2Ry bV9oZG1pX3JlbW92ZSwNCj4gKwkuZHJpdmVyID0gew0KPiArCQkubmFtZSA9ICJtZWRpYXRlay1k cm0tbXQ4MTk1LWhkbWkiLA0KPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX2hkbWlfb2Zf aWRzLA0KPiArCQkucG0gPSAmbXRrX2hkbWlfcG1fb3BzLA0KPiArCX0sDQo+ICt9Ow0KPiArDQo+ ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqY29uc3QgbXRrX2hkbWlfZHJpdmVyc1td ID0gew0KPiArCSZtdGtfaGRtaV9tdDgxOTVfZGRjX2RyaXZlciwNCj4gKwkmbXRrX2hkbWlfbXQ4 MTk1X2RyaXZlciwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgX19pbml0IG10a19oZG1pdHhf aW5pdCh2b2lkKQ0KPiArew0KPiArCXJldHVybiBwbGF0Zm9ybV9yZWdpc3Rlcl9kcml2ZXJzKG10 a19oZG1pX2RyaXZlcnMsDQo+ICsJCQkJCSBBUlJBWV9TSVpFKG10a19oZG1pX2RyaXZlcnMpKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgX19leGl0IG10a19oZG1pdHhfZXhpdCh2b2lkKQ0K PiArew0KPiArCXBsYXRmb3JtX3VucmVnaXN0ZXJfZHJpdmVycyhtdGtfaGRtaV9kcml2ZXJzLA0K PiArCQkJCSAgICBBUlJBWV9TSVpFKG10a19oZG1pX2RyaXZlcnMpKTsNCj4gK30NCj4gKw0KPiAr bW9kdWxlX2luaXQobXRrX2hkbWl0eF9pbml0KTsNCj4gK21vZHVsZV9leGl0KG10a19oZG1pdHhf ZXhpdCk7DQo+ICsNCj4gK01PRFVMRV9BVVRIT1IoIkNhbiBaZW5nIDxjYW4uemVuZ0BtZWRpYXRl ay5jb20+Iik7DQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIEhETUkgRHJpdmVyIik7 DQo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX210ODE5NV9oZG1pLmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX210ODE5NV9oZG1pLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg MDAwMDAwMDAwMDAwLi43ZDg0MjdiNmFiZWQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE5NV9oZG1pLmgNCj4gQEAgLTAsMCArMSwxNDcg QEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQo+ICsvKg0KPiAr ICogQ29weXJpZ2h0IChjKSAyMDE5IE1lZGlhVGVrIEluYy4NCj4gKyAqLw0KPiArDQo+ICsjaWZu ZGVmIF9NVEtfSERNSV9DVFJMX0gNCj4gKyNkZWZpbmUgX01US19IRE1JX0NUUkxfSA0KPiArDQo+ ICsjaW5jbHVkZSA8bGludXgvaGRtaS5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+ DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJt L2RybV9jcnRjLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPg0KPiArI2lu Y2x1ZGUgPGRybS9kcm1fZWRpZC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj ZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KPiArI2luY2x1ZGUgPHNvdW5kL2hkbWkt Y29kZWMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9t dXRleC5oPg0KPiArDQo+ICsjZGVmaW5lIFJHQjQ0NF84Yml0IEJJVCgwKQ0KPiArI2RlZmluZSBS R0I0NDRfMTBiaXQgQklUKDEpDQo+ICsjZGVmaW5lIFJHQjQ0NF8xMmJpdCBCSVQoMikNCj4gKyNk ZWZpbmUgUkdCNDQ0XzE2Yml0IEJJVCgzKQ0KPiArI2RlZmluZSBZQ0JDUjQ0NF84Yml0IEJJVCg0 KQ0KPiArI2RlZmluZSBZQ0JDUjQ0NF8xMGJpdCBCSVQoNSkNCj4gKyNkZWZpbmUgWUNCQ1I0NDRf MTJiaXQgQklUKDYpDQo+ICsjZGVmaW5lIFlDQkNSNDQ0XzE2Yml0IEJJVCg3KQ0KPiArI2RlZmlu ZSBZQ0JDUjQyMl84Yml0X05PX1NVUFBPUlQgQklUKDgpDQo+ICsjZGVmaW5lIFlDQkNSNDIyXzEw Yml0X05PX1NVUFBPUlQgQklUKDkpDQo+ICsjZGVmaW5lIFlDQkNSNDIyXzEyYml0IEJJVCgxMCkN Cj4gKyNkZWZpbmUgWUNCQ1I0MjJfMTZiaXRfTk9fU1VQUE9SVCBCSVQoMTEpDQo+ICsjZGVmaW5l IFlDQkNSNDIwXzhiaXQgQklUKDEyKQ0KPiArI2RlZmluZSBZQ0JDUjQyMF8xMGJpdCBCSVQoMTMp DQo+ICsjZGVmaW5lIFlDQkNSNDIwXzEyYml0IEJJVCgxNCkNCj4gKyNkZWZpbmUgWUNCQ1I0MjBf MTZiaXQgQklUKDE1KQ0KPiArDQo+ICtlbnVtIGhkbWlfY29sb3JfZGVwdGggeyBIRE1JXzhfQklU LCBIRE1JXzEwX0JJVCwgSERNSV8xMl9CSVQsDQo+IEhETUlfMTZfQklUIH07DQo+ICsNCj4gK2Vu dW0gbXRrX2hkbWlfY2xrX2lkIHsNCj4gKwlNVEtfSERNSV9DTEtfVU5JVlBMTF9ENkQ0LA0KPiAr CU1US19IRE1JX0NMS19NU0RDUExMX0QyLA0KPiArCU1US19IRE1JX0NMS19IRE1JX0FQQl9TRUws DQo+ICsJTVRLX0hETUlfVU5JVlBMTF9ENEQ4LA0KPiArCU1US19IRElNX0hEQ1BfU0VMLA0KPiAr CU1US19IRE1JX0hEQ1BfMjRNX1NFTCwNCj4gKwlNVEtfSERNSV9WUFBfU1BMSVRfSERNSSwNCj4g KwlNVEtfSERNSV9DTEtfQ09VTlQsDQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgbXRrX2hkbWlfZWRp ZCB7DQo+ICsJdW5zaWduZWQgY2hhciBlZGlkW0VESURfTEVOR1RIICogNF07DQo+ICsJdW5zaWdu ZWQgY2hhciBibGtfbnVtOw0KPiArfTsNCj4gKw0KPiArZW51bSBIRE1JX0hQRF9TVEFURSB7DQo+ ICsJSERNSV9QTFVHX09VVCA9IDAsDQo+ICsJSERNSV9QTFVHX0lOX0FORF9TSU5LX1BPV0VSX09O LA0KPiArCUhETUlfUExVR19JTl9PTkxZLA0KPiArfTsNCj4gKw0KPiArc3RydWN0IGhkbWlfYXVk aW9fcGFyYW07DQo+ICsNCj4gK3N0cnVjdCBtdGtfaGRtaSB7DQo+ICsJc3RydWN0IGRybV9icmlk Z2UgYnJpZGdlOw0KPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm47DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2Ow0KPiArCXN0cnVjdCBwaHkgKnBoeTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpjZWNf ZGV2Ow0KPiArCXN0cnVjdCBjZWNfbm90aWZpZXIgKm5vdGlmaWVyOw0KPiArCXN0cnVjdCBpMmNf YWRhcHRlciAqZGRjX2FkcHQ7DQo+ICsJc3RydWN0IGNsayAqY2xrW01US19IRE1JX0NMS19DT1VO VF07DQo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsNCj4gKwlzdHJ1Y3QgbXRrX2Vk aWRfcGFyYW1zICplZGlkX3BhcmFtczsNCj4gKwlzdHJ1Y3QgbXRrX2hkbWlfc2lua19hdl9jYXAg KnNpbmtfYXZjYXA7DQo+ICsJYm9vbCBkdmlfbW9kZTsNCj4gKwl1MzIgbWF4X2hkaXNwbGF5Ow0K PiArCXUzMiBtYXhfdmRpc3BsYXk7DQo+ICsJdm9pZCBfX2lvbWVtICpyZWdzOw0KPiArCXNwaW5s b2NrX3QgcHJvcGVydHlfbG9jazsNCj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpoZG1pX2luZm9f YmxvYjsNCj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmhkbWlfaW5mb19ibG9iX3B0cjsN Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpjc3BfZGVwdGhfcHJvcDsNCj4gKwl1aW50NjRfdCBz dXBwb3J0X2NzcF9kZXB0aDsNCj4gKwl1aW50NjRfdCBzZXRfY3NwX2RlcHRoOw0KPiArCWVudW0g aGRtaV9jb2xvcnNwYWNlIGNzcDsNCj4gKwllbnVtIGhkbWlfY29sb3JfZGVwdGggY29sb3JfZGVw dGg7DQo+ICsJZW51bSBoZG1pX2NvbG9yaW1ldHJ5IGNvbG9yaW10ZXJ5Ow0KPiArCWVudW0gaGRt aV9leHRlbmRlZF9jb2xvcmltZXRyeSBleHRlbmRlZF9jb2xvcmltZXRyeTsNCj4gKwllbnVtIGhk bWlfcXVhbnRpemF0aW9uX3JhbmdlIHF1YW50aXphdGlvbl9yYW5nZTsNCj4gKwllbnVtIGhkbWlf eWNjX3F1YW50aXphdGlvbl9yYW5nZSB5Y2NfcXVhbnRpemF0aW9uX3JhbmdlOw0KPiArCXN0cnVj dCBtdGtfaGRtaV9lZGlkIHJhd19lZGlkOw0KPiArDQo+ICsJc3RydWN0IGhkbWlfYXVkaW9fcGFy YW0gKmF1ZF9wYXJhbTsNCj4gKwlib29sIGF1ZGlvX2VuYWJsZTsNCj4gKwlzdHJ1Y3QgZGV2aWNl ICpjb2RlY19kZXY7DQo+ICsJaGRtaV9jb2RlY19wbHVnZ2VkX2NiIHBsdWdnZWRfY2I7DQo+ICsN Cj4gKwlib29sIHBvd2VyZWQ7DQo+ICsJYm9vbCBlbmFibGVkOw0KPiArCXVuc2lnbmVkIGludCBo ZG1pX2lycTsNCj4gKwllbnVtIEhETUlfSFBEX1NUQVRFIGhwZDsNCj4gKwlzdHJ1Y3Qgd29ya3F1 ZXVlX3N0cnVjdCAqaGRtaV93cTsNCj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGhwZF93b3JrOw0K PiArCXN0cnVjdCBkZWxheWVkX3dvcmsgaGRyMTBfZGVsYXlfd29yazsNCj4gKwlzdHJ1Y3QgZGVs YXllZF93b3JrIGhkcjEwdnNpZl9kZWxheV93b3JrOw0KPiArCXN0cnVjdCBtdXRleCBoZHJfbXV0 ZXg7DQo+ICsNCj4gKwlib29sIGhkbWlfZW5hYmxlZDsNCj4gKwlib29sIHBvd2VyX2Nsa19lbmFi bGVkOw0KPiArCWJvb2wgaXJxX3JlZ2lzdGVyZWQ7DQo+ICt9Ow0KPiArDQo+ICtleHRlcm4gc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9tdDgxOTVfZGRjX2RyaXZlcjsNCj4gKw0KPiAr I2lmIGRlZmluZWQoQ09ORklHX0RSTV9NRURJQVRFS19IRE1JKQ0KPiB8fCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKwlkZWZpbmVkKENPTkZJR19EUk1fTUVESUFU RUtfSERNSV9NT0RVTEUpDQo+ICt1bnNpZ25lZCBpbnQgZ2V0X2hkbWlfY29sb3JzcGFjZV9jb2xv cmltZXRyeSgNCj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLCBlbnVtIGhkbWlfY29sb3Jz cGFjZSAqY29sb3JzcGFjZSwNCj4gKwllbnVtIGhkbWlfY29sb3JpbWV0cnkgKmNvbG9yaW10ZXJ5 LA0KPiArCWVudW0gaGRtaV9leHRlbmRlZF9jb2xvcmltZXRyeSAqZXh0ZW5kZWRfY29sb3JpbWV0 cnksDQo+ICsJZW51bSBoZG1pX3F1YW50aXphdGlvbl9yYW5nZSAqcXVhbnRpemF0aW9uX3Jhbmdl LA0KPiArCWVudW0gaGRtaV95Y2NfcXVhbnRpemF0aW9uX3JhbmdlICp5Y2NfcXVhbnRpemF0aW9u X3JhbmdlKTsNCj4gKyNlbHNlDQo+ICtpbmxpbmUgdW5zaWduZWQgaW50IGdldF9oZG1pX2NvbG9y c3BhY2VfY29sb3JpbWV0cnkoDQo+ICsJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwgZW51bSBo ZG1pX2NvbG9yc3BhY2UgKmNvbG9yc3BhY2UsDQo+ICsJZW51bSBoZG1pX2NvbG9yaW1ldHJ5ICpj b2xvcmltdGVyeSwNCj4gKwllbnVtIGhkbWlfZXh0ZW5kZWRfY29sb3JpbWV0cnkgKmV4dGVuZGVk X2NvbG9yaW1ldHJ5LA0KPiArCWVudW0gaGRtaV9xdWFudGl6YXRpb25fcmFuZ2UgKnF1YW50aXph dGlvbl9yYW5nZSwNCj4gKwllbnVtIGhkbWlfeWNjX3F1YW50aXphdGlvbl9yYW5nZSAqeWNjX3F1 YW50aXphdGlvbl9yYW5nZSkNCj4gK3sNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKyNlbmRpZg0K PiArDQo+ICsvKiBzdHJ1Y3QgbXRrX2hkbWlfaW5mbyBpcyB1c2VkIHRvIHByb3BhZ2F0ZSBibG9i IHByb3BlcnR5IHRvDQo+IHVzZXJzcGFjZSAqLw0KPiArc3RydWN0IG10a19oZG1pX2luZm8gew0K PiArCXVuc2lnbmVkIHNob3J0IGVkaWRfc2lua19jb2xvcmltZXRyeTsNCj4gKwl1bnNpZ25lZCBj aGFyIGVkaWRfc2lua19yZ2JfY29sb3JfYml0Ow0KPiArCXVuc2lnbmVkIGNoYXIgZWRpZF9zaW5r X3ljYmNyX2NvbG9yX2JpdDsNCj4gKwl1bnNpZ25lZCBjaGFyIHVpMV9zaW5rX2RjNDIwX2NvbG9y X2JpdDsNCj4gKwl1bnNpZ25lZCBzaG9ydCBlZGlkX3NpbmtfbWF4X3RtZHNfY2xvY2s7DQo+ICsJ dW5zaWduZWQgc2hvcnQgZWRpZF9zaW5rX21heF90bWRzX2NoYXJhY3Rlcl9yYXRlOw0KPiArCXVu c2lnbmVkIGNoYXIgZWRpZF9zaW5rX3N1cHBvcnRfZHluYW1pY19oZHI7DQo+ICt9Ow0KPiArDQo+ ICsjZW5kaWYgLyogX01US19IRE1JX0NUUkxfSCAqLw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19tdDgxOTVfaGRtaV9kZGMuYw0KPiBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfbXQ4MTk1X2hkbWlfZGRjLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lMDdmMWEwYWVlZTQNCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE5NV9oZG1pX2RkYy5jDQo+IEBA IC0wLDAgKzEsNTQxIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0K PiArLyoNCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBNZWRpYVRlayBJbmMuDQo+ICsgKi8NCj4g Kw0KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZXJy Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvc2xhYi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvaW9wb2xsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L29mX2lycS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJtdGtfbXQ4 MTk1X2hkbWlfZGRjLmgiDQo+ICsjaW5jbHVkZSAibXRrX210ODE5NV9oZG1pX3JlZ3MuaCINCj4g KyNpbmNsdWRlICJtdGtfbXQ4MTk1X2hkbWkuaCINCj4gKw0KPiArI2RlZmluZSBFRElEX0lEIDB4 NTANCj4gKyNkZWZpbmUgRERDMl9DTE9LIDU3MiAvKiBCSU09MjA4TS8odio0KSA9IDkwS2h6ICov DQo+ICsjZGVmaW5lIEREQzJfQ0xPS19FRElEIDgzMiAvKiBCSU09MjA4TS8odio0KSA9IDYyLjVL aHogKi8NCj4gKw0KPiArZW51bSBTSUZfQklUX1RfSERNSSB7DQo+ICsJU0lGXzhfQklUX0hETUks IC8qIC88IFs4IGJpdHMgZGF0YSBhZGRyZXNzLl0gKi8NCj4gKwlTSUZfMTZfQklUX0hETUksIC8q IC88IFsxNiBiaXRzIGRhdGEgYWRkcmVzcy5dICovDQo+ICt9Ow0KPiArDQo+ICtlbnVtIFNJRl9C SVRfVCB7DQo+ICsJU0lGXzhfQklULCAvKiAvPCBbOCBiaXRzIGRhdGEgYWRkcmVzcy5dICovDQo+ ICsJU0lGXzE2X0JJVCwgLyogLzwgWzE2IGJpdHMgZGF0YSBhZGRyZXNzLl0gKi8NCj4gK307DQo+ ICsNCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBtdGtfZGRjX3JlYWRiaXQoc3RydWN0IG10a19oZG1p X2RkYyAqZGRjLA0KPiB1bnNpZ25lZCBzaG9ydCByZWcsDQo+ICsJCQkJICAgdW5zaWduZWQgaW50 IG9mZnNldCkNCj4gK3sNCj4gKwlyZXR1cm4gKHJlYWRsKGRkYy0+cmVncyArIHJlZykgJiBvZmZz ZXQpID8gdHJ1ZSA6IGZhbHNlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGludCBtdGtfZGRjX3JlYWQoc3RydWN0IG10a19oZG1pX2RkYyAqZGRjLA0KPiArCQkJCQl1bnNp Z25lZCBzaG9ydCByZWcpDQo+ICt7DQo+ICsJcmV0dXJuIHJlYWRsKGRkYy0+cmVncyArIHJlZyk7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRjX3dyaXRlKHN0cnVjdCBt dGtfaGRtaV9kZGMgKmRkYywgdW5zaWduZWQNCj4gc2hvcnQgcmVnLA0KPiArCQkJCSB1bnNpZ25l ZCBpbnQgdmFsKQ0KPiArew0KPiArCXdyaXRlbCh2YWwsIGRkYy0+cmVncyArIHJlZyk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRjX21hc2soc3RydWN0IG10a19oZG1p X2RkYyAqZGRjLCB1bnNpZ25lZA0KPiBpbnQgcmVnLA0KPiArCQkJCXVuc2lnbmVkIGludCB2YWws IHVuc2lnbmVkIGludCBtYXNrKQ0KPiArew0KPiArCXVuc2lnbmVkIGludCB0bXA7DQo+ICsNCj4g Kwl0bXAgPSByZWFkbChkZGMtPnJlZ3MgKyByZWcpICYgfm1hc2s7DQo+ICsJdG1wIHw9ICh2YWwg JiBtYXNrKTsNCj4gKwl3cml0ZWwodG1wLCBkZGMtPnJlZ3MgKyByZWcpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBoZG1pX2RkY19yZXF1ZXN0KHN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYykN Cj4gK3sNCj4gKwltdGtfZGRjX21hc2soZGRjLCBIRENQMlhfUE9MX0NUUkwsIEhEQ1AyWF9ESVNf UE9MTF9FTiwNCj4gKwkJICAgICBIRENQMlhfRElTX1BPTExfRU4pOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBERENfV1JfT05FKHN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYywgdW5zaWduZWQg aW50DQo+IGFkZHJfaWQsDQo+ICsJCSAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0X2lkLCB1bnNp Z25lZCBjaGFyIHdyX2RhdGEpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGk7DQo+ICsNCj4gKwlp ZiAobXRrX2RkY19yZWFkKGRkYywgSERDUDJYX0REQ01fU1RBVFVTKSAmIEREQ19JMkNfQlVTX0xP Vykgew0KPiArCQltdGtfZGRjX21hc2soZGRjLCBERENfQ1RSTCwgKENMT0NLX1NDTCA8PA0KPiBE RENfQ01EX1NISUZUKSwNCj4gKwkJCSAgICAgRERDX0NNRCk7DQo+ICsJCXVkZWxheSgyNTApOw0K PiArCX0NCj4gKwltdGtfZGRjX21hc2soZGRjLCBIUERfRERDX0NUUkwsIEREQzJfQ0xPSyA8PA0K PiBERENfREVMQVlfQ05UX1NISUZULA0KPiArCQkgICAgIEREQ19ERUxBWV9DTlQpOw0KPiArCW10 a19kZGNfd3JpdGUoZGRjLCBTSTJDX0NUUkwsIFNJMkNfQUREUl9SRUFEIDw8DQo+IFNJMkNfQURE Ul9TSElGVCk7DQo+ICsJbXRrX2RkY19tYXNrKGRkYywgU0kyQ19DVFJMLCB3cl9kYXRhIDw8IFNJ MkNfV0RBVEFfU0hJRlQsDQo+IFNJMkNfV0RBVEEpOw0KPiArCW10a19kZGNfbWFzayhkZGMsIFNJ MkNfQ1RSTCwgU0kyQ19XUiwgU0kyQ19XUik7DQo+ICsNCj4gKwltdGtfZGRjX3dyaXRlKGRkYywg RERDX0NUUkwsDQo+ICsJCSAgICAgIChTRVFfV1JJVEVfUkVRX0FDSyA8PCBERENfQ01EX1NISUZU KSArDQo+ICsJCQkgICAgICAoMSA8PCBERENfRElOX0NOVF9TSElGVCkgKw0KPiArCQkJICAgICAg KG9mZnNldF9pZCA8PCBERENfT0ZGU0VUX1NISUZUKSArDQo+IChhZGRyX2lkIDw8IDEpKTsNCj4g Kw0KPiArCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspDQo+ICsJCXVkZWxheSgyMDApOw0KPiArDQo+ ICsJaWYgKChtdGtfZGRjX3JlYWQoZGRjLCBIRENQMlhfRERDTV9TVEFUVVMpICYNCj4gKwkgICAg IChERENfSTJDX05PX0FDSyB8IEREQ19JMkNfQlVTX0xPVykpKSB7DQo+ICsJCWlmIChtdGtfZGRj X3JlYWQoZGRjLCBIRENQMlhfRERDTV9TVEFUVVMpICYNCj4gRERDX0kyQ19CVVNfTE9XKSB7DQo+ ICsJCQltdGtfZGRjX21hc2soZGRjLCBERENfQ1RSTCwNCj4gKwkJCQkgICAgIChDTE9DS19TQ0wg PDwgRERDX0NNRF9TSElGVCksDQo+IEREQ19DTUQpOw0KPiArCQkJdWRlbGF5KDI1MCk7DQo+ICsJ CX0NCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25lZCBjaGFyDQo+ICtfRERDTVJl YWRfaGRtaShzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHVuc2lnbmVkIGNoYXINCj4gdWNDdXJB ZGRyTW9kZSwNCj4gKwkgICAgICAgdW5zaWduZWQgaW50IHU0Q2xrRGl2LCB1bnNpZ25lZCBjaGFy IHVjRGV2LCB1bnNpZ25lZCBpbnQNCj4gdTRBZGRyLA0KPiArCSAgICAgICBlbnVtIFNJRl9CSVRf VF9IRE1JIHVjQWRkclR5cGUsIHVuc2lnbmVkIGNoYXIgKnB1Y1ZhbHVlLA0KPiArCSAgICAgICB1 bnNpZ25lZCBpbnQgdTRDb3VudCkNCj4gK3sNCj4gKwl1bnNpZ25lZCBpbnQgaSwgdGVtcF9sZW5n dGgsIGxvb3BfY291bnRlciwgdGVtcF9rc3ZsaXN0LA0KPiBkZXZpY2VfbjsNCj4gKwl1bnNpZ25l ZCBpbnQgdWNSZWFkQ291bnQsIHVjSWR4Ow0KPiArCXVuc2lnbmVkIGxvbmcgRGRjU3RhcnRUaW1l LCBEZGNFbmRUaW1lLCBEZGNUaW1lT3V0Ow0KPiArDQo+ICsJaWYgKChwdWNWYWx1ZSA9PSBOVUxM KSB8fCAodTRDb3VudCA9PSAwKSB8fCAodTRDbGtEaXYgPT0gMCkpDQo+ICsJCXJldHVybiAwOw0K PiArDQo+ICsJdWNJZHggPSAwOw0KPiArCWlmIChtdGtfZGRjX3JlYWQoZGRjLCBIRENQMlhfRERD TV9TVEFUVVMpICYgRERDX0kyQ19CVVNfTE9XKSB7DQo+ICsJCW10a19kZGNfbWFzayhkZGMsIERE Q19DVFJMLCAoQ0xPQ0tfU0NMIDw8DQo+IEREQ19DTURfU0hJRlQpLA0KPiArCQkJICAgICBERENf Q01EKTsNCj4gKwkJdWRlbGF5KDI1MCk7DQo+ICsJfQ0KPiArDQo+ICsJbXRrX2RkY19tYXNrKGRk YywgRERDX0NUUkwsIChDTEVBUl9GSUZPIDw8IEREQ19DTURfU0hJRlQpLA0KPiBERENfQ01EKTsN Cj4gKw0KPiArCWlmICh1NEFkZHIgPT0gMHg0Mykgew0KPiArCQltdGtfZGRjX3dyaXRlKGRkYywg RERDX0NUUkwsDQo+ICsJCQkgICAgICAoU0VRX1JFQURfTk9fQUNLIDw8IEREQ19DTURfU0hJRlQp ICsNCj4gKwkJCQkgICAgICAodTRDb3VudCA8PCBERENfRElOX0NOVF9TSElGVCkgKw0KPiArCQkJ CSAgICAgICh1NEFkZHIgPDwgRERDX09GRlNFVF9TSElGVCkgKw0KPiArCQkJCSAgICAgICh1Y0Rl diA8PCAxKSk7DQo+ICsJCXVkZWxheSgyNTApOw0KPiArCQl1ZGVsYXkoMjUwKTsNCj4gKwkJdWRl bGF5KDIwMCk7DQp3aHkgdXNlIHRocmVlIHVkZWxheSgpPw0KPiArDQo+ICsJCWlmICh1NENvdW50 ID4gMTApDQo+ICsJCQl0ZW1wX2tzdmxpc3QgPSAxMDsNCj4gKwkJZWxzZQ0KPiArCQkJdGVtcF9r c3ZsaXN0ID0gdTRDb3VudDsNCj4gKw0KPiArCQlmb3IgKHVjSWR4ID0gMDsgdWNJZHggPCB0ZW1w X2tzdmxpc3Q7IHVjSWR4KyspIHsNCj4gKwkJCW10a19kZGNfd3JpdGUoZGRjLCBTSTJDX0NUUkws DQo+ICsJCQkJICAgICAgKFNJMkNfQUREUl9SRUFEIDw8DQo+IFNJMkNfQUREUl9TSElGVCkgKw0K PiArCQkJCQkgICAgICBTSTJDX1JEKTsNCj4gKwkJCW10a19kZGNfd3JpdGUoZGRjLCBTSTJDX0NU UkwsDQo+ICsJCQkJICAgICAgKFNJMkNfQUREUl9SRUFEIDw8DQo+IFNJMkNfQUREUl9TSElGVCkg Kw0KPiArCQkJCQkgICAgICBTSTJDX0NPTkZJUk1fUkVBRCk7DQo+ICsNCj4gKwkJCXB1Y1ZhbHVl W3VjSWR4XSA9IChtdGtfZGRjX3JlYWQoZGRjLA0KPiBIUERfRERDX1NUQVRVUykgJg0KPiArCQkJ CQkgICBERENfREFUQV9PVVQpID4+DQo+ICsJCQkJCSAgRERDX0RBVEFfT1VUX1NISUZUOw0KPiAr CQkJdWRlbGF5KDEwMCk7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAodTRDb3VudCA9PSB0ZW1wX2tz dmxpc3QpDQo+ICsJCQlyZXR1cm4gKHVjSWR4ICsgMSk7DQo+ICsNCj4gKwkJdWRlbGF5KDI1MCk7 DQo+ICsJCXVkZWxheSgyNTApOw0KPiArDQo+ICsJCWlmICh1NENvdW50IC8gNSA9PSAzKQ0KPiAr CQkJZGV2aWNlX24gPSA1Ow0KPiArCQllbHNlDQo+ICsJCQlkZXZpY2VfbiA9IDEwOw0KPiArDQo+ ICsJCWZvciAodWNJZHggPSAxMDsgdWNJZHggPCAoMTAgKyBkZXZpY2Vfbik7IHVjSWR4KyspIHsN Cj4gKwkJCW10a19kZGNfd3JpdGUoZGRjLCBTSTJDX0NUUkwsDQo+ICsJCQkJICAgICAgKFNJMkNf QUREUl9SRUFEIDw8DQo+IFNJMkNfQUREUl9TSElGVCkgKw0KPiArCQkJCQkgICAgICBTSTJDX1JE KTsNCj4gKwkJCW10a19kZGNfd3JpdGUoZGRjLCBTSTJDX0NUUkwsDQo+ICsJCQkJICAgICAgKFNJ MkNfQUREUl9SRUFEIDw8DQo+IFNJMkNfQUREUl9TSElGVCkgKw0KPiArCQkJCQkgICAgICBTSTJD X0NPTkZJUk1fUkVBRCk7DQo+ICsNCj4gKwkJCXB1Y1ZhbHVlW3VjSWR4XSA9IChtdGtfZGRjX3Jl YWQoZGRjLA0KPiBIUERfRERDX1NUQVRVUykgJg0KPiArCQkJCQkgICBERENfREFUQV9PVVQpID4+ DQo+ICsJCQkJCSAgRERDX0RBVEFfT1VUX1NISUZUOw0KPiArCQkJdWRlbGF5KDEwMCk7DQo+ICsJ CX0NCj4gKw0KPiArCQlpZiAodTRDb3VudCA9PSAoMTAgKyBkZXZpY2VfbikpDQo+ICsJCQlyZXR1 cm4gKHVjSWR4ICsgMSk7DQo+ICsNCj4gKwkJdWRlbGF5KDI1MCk7DQo+ICsJCXVkZWxheSgyNTAp Ow0KPiArDQo+ICsJCWlmICh1NENvdW50IC8gNSA9PSA1KQ0KPiArCQkJZGV2aWNlX24gPSA1Ow0K PiArCQllbHNlDQo+ICsJCQlkZXZpY2VfbiA9IDEwOw0KPiArDQo+ICsJCWZvciAodWNJZHggPSAy MDsgdWNJZHggPCAoMjAgKyBkZXZpY2Vfbik7IHVjSWR4KyspIHsNCj4gKwkJCW10a19kZGNfd3Jp dGUoZGRjLCBTSTJDX0NUUkwsDQo+ICsJCQkJICAgICAgKFNJMkNfQUREUl9SRUFEIDw8DQo+IFNJ MkNfQUREUl9TSElGVCkgKw0KPiArCQkJCQkgICAgICBTSTJDX1JEKTsNCj4gKwkJCW10a19kZGNf d3JpdGUoZGRjLCBTSTJDX0NUUkwsDQo+ICsJCQkJICAgICAgKFNJMkNfQUREUl9SRUFEIDw8DQo+ IFNJMkNfQUREUl9TSElGVCkgKw0KPiArCQkJCQkgICAgICBTSTJDX0NPTkZJUk1fUkVBRCk7DQo+ ICsNCj4gKwkJCXB1Y1ZhbHVlW3VjSWR4XSA9IChtdGtfZGRjX3JlYWQoZGRjLA0KPiBIUERfRERD X1NUQVRVUykgJg0KPiArCQkJCQkgICBERENfREFUQV9PVVQpID4+DQo+ICsJCQkJCSAgRERDX0RB VEFfT1VUX1NISUZUOw0KPiArCQkJdWRlbGF5KDEwMCk7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAo dTRDb3VudCA9PSAoMjAgKyBkZXZpY2VfbikpDQo+ICsJCQlyZXR1cm4gKHVjSWR4ICsgMSk7DQo+ ICsNCj4gKwkJdWRlbGF5KDI1MCk7DQo+ICsJCXVkZWxheSgyNTApOw0KPiArDQo+ICsJCWlmICh1 NENvdW50IC8gNSA9PSA3KQ0KPiArCQkJZGV2aWNlX24gPSA1Ow0KPiArCQllbHNlDQo+ICsJCQlk ZXZpY2VfbiA9IDEwOw0KPiArDQo+ICsJCWZvciAodWNJZHggPSAzMDsgdWNJZHggPCAoMzAgKyBk ZXZpY2Vfbik7IHVjSWR4KyspIHsNCj4gKwkJCW10a19kZGNfd3JpdGUoZGRjLCBTSTJDX0NUUkws DQo+ICsJCQkJICAgICAgKFNJMkNfQUREUl9SRUFEIDw8DQo+IFNJMkNfQUREUl9TSElGVCkgKw0K PiArCQkJCQkgICAgICBTSTJDX1JEKTsNCj4gKwkJCW10a19kZGNfd3JpdGUoZGRjLCBTSTJDX0NU UkwsDQo+ICsJCQkJICAgICAgKFNJMkNfQUREUl9SRUFEIDw8DQo+IFNJMkNfQUREUl9TSElGVCkg Kw0KPiArCQkJCQkgICAgICBTSTJDX0NPTkZJUk1fUkVBRCk7DQo+ICsNCj4gKwkJCXB1Y1ZhbHVl W3VjSWR4XSA9IChtdGtfZGRjX3JlYWQoZGRjLA0KPiBIUERfRERDX1NUQVRVUykgJg0KPiArCQkJ CQkgICBERENfREFUQV9PVVQpID4+DQo+ICsJCQkJCSAgRERDX0RBVEFfT1VUX1NISUZUOw0KPiAr CQkJdWRlbGF5KDEwMCk7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAodTRDb3VudCA9PSAoMzAgKyBk ZXZpY2VfbikpDQo+ICsJCQlyZXR1cm4gKHVjSWR4ICsgMSk7DQo+ICsNCj4gKwkJdWRlbGF5KDI1 MCk7DQo+ICsJCXVkZWxheSgyNTApOw0KPiArDQo+ICsJCWZvciAodWNJZHggPSA0MDsgdWNJZHgg PCAoNDAgKyA1KTsgdWNJZHgrKykgew0KPiArCQkJbXRrX2RkY193cml0ZShkZGMsIFNJMkNfQ1RS TCwNCj4gKwkJCQkgICAgICAoU0kyQ19BRERSX1JFQUQgPDwNCj4gU0kyQ19BRERSX1NISUZUKSAr DQo+ICsJCQkJCSAgICAgIFNJMkNfUkQpOw0KPiArCQkJbXRrX2RkY193cml0ZShkZGMsIFNJMkNf Q1RSTCwNCj4gKwkJCQkgICAgICAoU0kyQ19BRERSX1JFQUQgPDwNCj4gU0kyQ19BRERSX1NISUZU KSArDQo+ICsJCQkJCSAgICAgIFNJMkNfQ09ORklSTV9SRUFEKTsNCj4gKw0KPiArCQkJcHVjVmFs dWVbdWNJZHhdID0gKG10a19kZGNfcmVhZChkZGMsDQo+IEhQRF9ERENfU1RBVFVTKSAmDQo+ICsJ CQkJCSAgIEREQ19EQVRBX09VVCkgPj4NCj4gKwkJCQkJICBERENfREFUQV9PVVRfU0hJRlQ7DQo+ ICsJCQl1ZGVsYXkoMTAwKTsNCj4gKwkJfQ0KPiArDQo+ICsJCWlmICh1NENvdW50ID09IDQ1KQ0K PiArCQkJcmV0dXJuICh1Y0lkeCArIDEpOw0KPiArCX0gZWxzZSB7DQo+ICsJCWlmICh1NENvdW50 ID49IDE2KSB7DQo+ICsJCQl0ZW1wX2xlbmd0aCA9IDE2Ow0KPiArCQkJbG9vcF9jb3VudGVyID0N Cj4gKwkJCQl1NENvdW50IC8gMTYgKyAoKHU0Q291bnQgJSAxNiA9PSAwKSA/IDANCj4gOiAxKTsN Cj4gKwkJfSBlbHNlIHsNCj4gKwkJCXRlbXBfbGVuZ3RoID0gdTRDb3VudDsNCj4gKwkJCWxvb3Bf Y291bnRlciA9IDE7DQo+ICsJCX0NCj4gKwkJaWYgKHVjRGV2ID49IEVESURfSUQpIHsNCj4gKwkJ CWlmICh1NENsa0RpdiA8IEREQzJfQ0xPS19FRElEKQ0KPiArCQkJCXU0Q2xrRGl2ID0gRERDMl9D TE9LX0VESUQ7DQo+ICsJCX0NCj4gKwkJbXRrX2RkY19tYXNrKGRkYywgSFBEX0REQ19DVFJMLCB1 NENsa0RpdiA8PA0KPiBERENfREVMQVlfQ05UX1NISUZULA0KPiArCQkJICAgICBERENfREVMQVlf Q05UKTsNCj4gKwkJZm9yIChpID0gMDsgaSA8IGxvb3BfY291bnRlcjsgaSsrKSB7DQo+ICsJCQlp ZiAoKGkgPT0gKGxvb3BfY291bnRlciAtIDEpKSAmJiAoaSAhPSAwKSAmJg0KPiArCQkJICAgICh1 NENvdW50ICUgMTYpKQ0KPiArCQkJCXRlbXBfbGVuZ3RoID0gdTRDb3VudCAlIDE2Ow0KPiArDQo+ ICsJCQlpZiAodWNEZXYgPiBFRElEX0lEKSB7DQo+ICsJCQkJbXRrX2RkY19tYXNrKGRkYywgU0NE Q19DVFJMLA0KPiArCQkJCQkgICAgICh1Y0RldiAtIEVESURfSUQpDQo+ICsJCQkJCQkgICAgIDw8 DQo+IEREQ19TRUdNRU5UX1NISUZULA0KPiArCQkJCQkgICAgIEREQ19TRUdNRU5UKTsNCj4gKwkJ CQltdGtfZGRjX3dyaXRlKA0KPiArCQkJCQlkZGMsIEREQ19DVFJMLA0KPiArCQkJCQkoRU5IX1JF QURfTk9fQUNLIDw8DQo+IEREQ19DTURfU0hJRlQpICsNCj4gKwkJCQkJCSh0ZW1wX2xlbmd0aA0K PiArCQkJCQkJIDw8IEREQ19ESU5fQ05UX1NISUZUKQ0KPiArDQo+ICsJCQkJCQkoKHU0QWRkciAr IGkgKg0KPiB0ZW1wX2xlbmd0aCkNCj4gKwkJCQkJCSA8PCBERENfT0ZGU0VUX1NISUZUKSArDQo+ ICsJCQkJCQkoRURJRF9JRCA8PCAxKSk7DQo+ICsJCQl9IGVsc2Ugew0KPiArCQkJCW10a19kZGNf d3JpdGUoDQo+ICsJCQkJCWRkYywgRERDX0NUUkwsDQo+ICsJCQkJCShTRVFfUkVBRF9OT19BQ0sg PDwNCj4gRERDX0NNRF9TSElGVCkgKw0KPiArCQkJCQkJKHRlbXBfbGVuZ3RoDQo+ICsJCQkJCQkg PDwgRERDX0RJTl9DTlRfU0hJRlQpDQo+ICsNCj4gKwkJCQkJCSgodTRBZGRyICsgKCh1NEFkZHIg PT0NCj4gMHg0MykgPw0KPiArCQkJCQkJCQkJDQo+ICAgMCA6DQo+ICsJCQkJCQkJCQkNCj4gICAo aSAqIDE2KSkpDQo+ICsJCQkJCQkgPDwgRERDX09GRlNFVF9TSElGVCkgKw0KPiArCQkJCQkJKHVj RGV2IDw8IDEpKTsNCj4gKwkJCX0NCj4gKwkJCW1kZWxheSgyKTsNCj4gKwkJCURkY1N0YXJ0VGlt ZSA9IGppZmZpZXM7DQo+ICsJCQlEZGNUaW1lT3V0ID0gdGVtcF9sZW5ndGggKyA1Ow0KPiArCQkJ RGRjRW5kVGltZSA9IERkY1N0YXJ0VGltZSArIChEZGNUaW1lT3V0KSpIWiAvDQo+IDEwMDA7DQo+ ICsJCQl3aGlsZSAoMSkgew0KPiArCQkJCWlmICgobXRrX2RkY19yZWFkKGRkYywgSFBEX0REQ19T VEFUVVMpDQo+ICYNCj4gKwkJCQkgICAgIEREQ19JMkNfSU5fUFJPRykgPT0gMCkNCj4gKwkJCQkJ YnJlYWs7DQo+ICsNCj4gKwkJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBEZGNFbmRUaW1lKSkg ew0KPiArCQkJCQlwcl9pbmZvKCJbSERNSV1bRERDXSBlcnJvcjoNCj4gdGltZSBvdXRcbiIpOw0K PiArCQkJCQlyZXR1cm4gMDsNCj4gKwkJCQl9DQo+ICsJCQkJbWRlbGF5KDEpOw0KPiArCQkJfQ0K PiArCQkJaWYgKChtdGtfZGRjX3JlYWQoZGRjLCBIRENQMlhfRERDTV9TVEFUVVMpICYNCj4gKwkJ CSAgICAgKEREQ19JMkNfTk9fQUNLIHwgRERDX0kyQ19CVVNfTE9XKSkpIHsNCj4gKwkJCQlpZiAo bXRrX2RkY19yZWFkKGRkYywNCj4gSERDUDJYX0REQ01fU1RBVFVTKSAmDQo+ICsJCQkJICAgIERE Q19JMkNfQlVTX0xPVykgew0KPiArCQkJCQltdGtfZGRjX21hc2soZGRjLCBERENfQ1RSTCwNCj4g KwkJCQkJCSAgICAgKENMT0NLX1NDTA0KPiArCQkJCQkJICAgICAgPDwNCj4gRERDX0NNRF9TSElG VCksDQo+ICsJCQkJCQkgICAgIEREQ19DTUQpOw0KPiArCQkJCQl1ZGVsYXkoMjUwKTsNCj4gKwkJ CQl9DQo+ICsJCQkJcmV0dXJuIDA7DQo+ICsJCQl9DQo+ICsJCQlmb3IgKHVjSWR4ID0gMDsgdWNJ ZHggPCB0ZW1wX2xlbmd0aDsgdWNJZHgrKykgew0KPiArCQkJCW10a19kZGNfd3JpdGUoZGRjLCBT STJDX0NUUkwsDQo+ICsJCQkJCSAgICAgIChTSTJDX0FERFJfUkVBRA0KPiArCQkJCQkgICAgICAg PDwgU0kyQ19BRERSX1NISUZUKSArDQo+ICsJCQkJCQkgICAgICBTSTJDX1JEKTsNCj4gKwkJCQlt dGtfZGRjX3dyaXRlKGRkYywgU0kyQ19DVFJMLA0KPiArCQkJCQkgICAgICAoU0kyQ19BRERSX1JF QUQNCj4gKwkJCQkJICAgICAgIDw8IFNJMkNfQUREUl9TSElGVCkgKw0KPiArCQkJCQkJICAgICAg U0kyQ19DT05GSVJNX1JFQUQNCj4gKTsNCj4gKw0KPiArCQkJCXB1Y1ZhbHVlW2kgKiAxNiArIHVj SWR4XSA9DQo+ICsJCQkJCShtdGtfZGRjX3JlYWQoZGRjLA0KPiBIUERfRERDX1NUQVRVUykgJg0K PiArCQkJCQkgRERDX0RBVEFfT1VUKSA+Pg0KPiArCQkJCQlERENfREFUQV9PVVRfU0hJRlQ7DQo+ ICsJCQkJLyoNCj4gKwkJCQkgKiB3aGVuIHJlYWRpbmcgZWRpZCwgaWYgaGRtaSBtb2R1bGUNCj4g YmVlbiByZXNldCwNCj4gKwkJCQkgKiBkZGMgd2lsbCBmYWlsIGFuZCBpdCdzDQo+ICsJCQkJICpz cGVlZCB3aWxsIGJlIHNldCB0byA0MDAuDQo+ICsJCQkJICovDQo+ICsJCQkJaWYgKCgobXRrX2Rk Y19yZWFkKGRkYywgSFBEX0REQ19DVFJMKQ0KPiA+PiAxNikgJg0KPiArCQkJCSAgICAgMHhGRkZG KSA8IEREQzJfQ0xPSykNCj4gKwkJCQkJcmV0dXJuIDA7DQo+ICsNCj4gKwkJCQl1Y1JlYWRDb3Vu dCA9IGkgKiAxNiArIHVjSWR4ICsgMTsNCj4gKwkJCX0NCj4gKwkJfQ0KPiArCQlyZXR1cm4gdWNS ZWFkQ291bnQ7DQo+ICsJfQ0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdW5z aWduZWQgY2hhciB2RERDUmVhZChzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHVuc2lnbmVkIGlu dA0KPiB1NENsa0RpdiwNCj4gKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgdWNEZXYsIHVuc2lnbmVk IGludCB1NEFkZHIsDQo+ICsJCQkgICAgICBlbnVtIFNJRl9CSVRfVF9IRE1JIHVjQWRkclR5cGUs DQo+ICsJCQkgICAgICB1bnNpZ25lZCBjaGFyICpwdWNWYWx1ZSwgdW5zaWduZWQgaW50DQo+IHU0 Q291bnQpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IHU0UmVhZENvdW50ID0gMDsNCj4gKwl1bnNp Z25lZCBjaGFyIHVjUmV0dXJuVmF1bGUgPSAwOw0KPiArDQo+ICsJaWYgKChwdWNWYWx1ZSA9PSBO VUxMKSB8fCAodTRDb3VudCA9PSAwKSB8fCAodTRDbGtEaXYgPT0gMCkgfHwNCj4gKwkgICAgKHVj QWRkclR5cGUgPiBTSUZfMTZfQklUX0hETUkpIHx8DQo+ICsJICAgICgodWNBZGRyVHlwZSA9PSBT SUZfOF9CSVRfSERNSSkgJiYgKHU0QWRkciA+IDI1NSkpIHx8DQo+ICsJICAgICgodWNBZGRyVHlw ZSA9PSBTSUZfMTZfQklUX0hETUkpICYmICh1NEFkZHIgPiA2NTUzNSkpKSB7DQo+ICsJCXJldHVy biAwOw0KPiArCX0NCj4gKw0KPiArCWlmICh1Y0FkZHJUeXBlID09IFNJRl84X0JJVF9IRE1JKQ0K PiArCQl1NFJlYWRDb3VudCA9ICgoMjU1IC0gdTRBZGRyKSArIDEpOw0KPiArCWVsc2UgaWYgKHVj QWRkclR5cGUgPT0gU0lGXzE2X0JJVF9IRE1JKQ0KPiArCQl1NFJlYWRDb3VudCA9ICgoNjU1MzUg LSB1NEFkZHIpICsgMSk7DQo+ICsNCj4gKwl1NFJlYWRDb3VudCA9ICh1NFJlYWRDb3VudCA+IHU0 Q291bnQpID8gdTRDb3VudCA6IHU0UmVhZENvdW50Ow0KPiArCXVjUmV0dXJuVmF1bGUgPSBfRERD TVJlYWRfaGRtaShkZGMsIDAsIHU0Q2xrRGl2LCB1Y0RldiwgdTRBZGRyLA0KPiArCQkJCSAgICAg ICB1Y0FkZHJUeXBlLCBwdWNWYWx1ZSwNCj4gdTRSZWFkQ291bnQpOw0KPiArCXJldHVybiB1Y1Jl dHVyblZhdWxlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdW5zaWduZWQgY2hhciBmZ0REQ0RhdGFS ZWFkKHN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYywNCj4gdW5zaWduZWQgY2hhciBiRGV2aWNlLA0K PiArCQkJICAgIHVuc2lnbmVkIGNoYXIgYkRhdGFfQWRkciwgdW5zaWduZWQgY2hhcg0KPiBiRGF0 YUNvdW50LA0KPiArCQkJICAgIHVuc2lnbmVkIGNoYXIgKnByRGF0YSkNCj4gK3sNCj4gKwlib29s IGZsYWc7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZkZGMtPm10eCk7DQo+ICsNCj4gKwloZG1pX2Rk Y19yZXF1ZXN0KGRkYyk7DQo+ICsJaWYgKHZERENSZWFkKGRkYywgRERDMl9DTE9LLCAodW5zaWdu ZWQgY2hhciliRGV2aWNlLA0KPiArCQkgICAgICh1bnNpZ25lZCBpbnQpYkRhdGFfQWRkciwgU0lG XzhfQklUX0hETUksDQo+ICsJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilwckRhdGEsDQo+ICsJCSAg ICAgKHVuc2lnbmVkIGludCliRGF0YUNvdW50KSA9PSBiRGF0YUNvdW50KSB7DQo+ICsJCWZsYWcg PSB0cnVlOw0KPiArCX0gZWxzZSB7DQo+ICsJCWZsYWcgPSBmYWxzZTsNCj4gKwl9DQo+ICsNCj4g KwltdXRleF91bmxvY2soJmRkYy0+bXR4KTsNCj4gKwlyZXR1cm4gZmxhZzsNCj4gK30NCj4gKw0K PiArc3RhdGljIHVuc2lnbmVkIGNoYXIgZmdERENEYXRhV3JpdGUoc3RydWN0IG10a19oZG1pX2Rk YyAqZGRjLA0KPiArCQkJCSAgICB1bnNpZ25lZCBjaGFyIGJEZXZpY2UsDQo+ICsJCQkJICAgIHVu c2lnbmVkIGNoYXIgYkRhdGFfQWRkciwNCj4gKwkJCQkgICAgdW5zaWduZWQgY2hhciBiRGF0YUNv dW50LA0KPiArCQkJCSAgICB1bnNpZ25lZCBjaGFyICpwckRhdGEpDQo+ICt7DQo+ICsJdW5zaWdu ZWQgaW50IGk7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZkZGMtPm10eCk7DQo+ICsNCj4gKwloZG1p X2RkY19yZXF1ZXN0KGRkYyk7DQo+ICsJZm9yIChpID0gMDsgaSA8IGJEYXRhQ291bnQ7IGkrKykN Cj4gKwkJRERDX1dSX09ORShkZGMsIGJEZXZpY2UsIGJEYXRhX0FkZHIgKyBpLCAqKHByRGF0YSAr DQo+IGkpKTsNCj4gKw0KPiArCW11dGV4X3VubG9jaygmZGRjLT5tdHgpOw0KPiArCXJldHVybiAx Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG10a19oZG1pX2RkY194ZmVyKHN0cnVjdCBpMmNf YWRhcHRlciAqYWRhcHRlciwgc3RydWN0DQo+IGkyY19tc2cgKm1zZ3MsDQo+ICsJCQkgICAgIGlu dCBudW0pDQo+ICt7DQo+ICsJc3RydWN0IG10a19oZG1pX2RkYyAqZGRjID0gYWRhcHRlci0+YWxn b19kYXRhOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFkYXB0ZXItPmRldi5wYXJlbnQ7DQo+ ICsJaW50IHJldDsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWlmICghZGRjKQ0KPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgew0KPiArCQlzdHJ1 Y3QgaTJjX21zZyAqbXNnID0gJm1zZ3NbaV07DQo+ICsNCj4gKwkJaWYgKG1zZy0+ZmxhZ3MgJiBJ MkNfTV9SRCkNCj4gKwkJCXJldCA9IGZnRERDRGF0YVJlYWQoZGRjLCBtc2ctPmFkZHIsIG1zZy0N Cj4gPmJ1ZlswXSwNCj4gKwkJCQkJICAgIChtc2ctPmxlbiksICZtc2ctPmJ1ZlswXSk7DQo+ICsJ CWVsc2UNCj4gKwkJCXJldCA9IGZnRERDRGF0YVdyaXRlKGRkYywgbXNnLT5hZGRyLCBtc2ctDQo+ ID5idWZbMF0sDQo+ICsJCQkJCSAgICAgKG1zZy0+bGVuIC0gMSksICZtc2ctDQo+ID5idWZbMV0p Ow0KPiArDQo+ICsJCWlmIChyZXQgPD0gMCkNCj4gKwkJCWdvdG8geGZlcl9lbmQ7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIGk7DQo+ICsNCj4gK3hmZXJfZW5kOg0KPiArCWRldl9lcnIoZGV2LCAi ZGRjIGZhaWxlZCFcbiIpOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1 MzIgbXRrX2hkbWlfZGRjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQ0KPiArew0K PiArCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gbXRrX2hkbWlfZGRjX2FsZ29y aXRobSA9IHsNCj4gKwkubWFzdGVyX3hmZXIgPSBtdGtfaGRtaV9kZGNfeGZlciwNCj4gKwkuZnVu Y3Rpb25hbGl0eSA9IG10a19oZG1pX2RkY19mdW5jLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlu dCBtdGtfaGRtaV9kZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gK3sN Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiArCXN0cnVjdCBtdGtfaGRt aV9kZGMgKmRkYzsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJZGRjID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKHN0cnVjdCBtdGtfaGRtaV9kZGMpLA0KPiBHRlBfS0VSTkVMKTsNCj4gKwlpZiAo IWRkYykNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwlkZGMtPmNsayA9IGRldm1fY2xr X2dldChkZXYsICJkZGMtaTJjIik7DQo+ICsJaWYgKElTX0VSUihkZGMtPmNsaykpIHsNCj4gKwkJ ZGV2X2VycihkZXYsICJnZXQgZGRjX2NsayBmYWlsZWQ6ICVwICxcbiIsIGRkYy0+Y2xrKTsNCj4g KwkJcmV0dXJuIFBUUl9FUlIoZGRjLT5jbGspOw0KPiArCX0NCj4gKwlyZXQgPSBjbGtfcHJlcGFy ZV9lbmFibGUoZGRjLT5jbGspOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2VycihkZXYsICJl bmFibGUgZGRjIGNsayBmYWlsZWQhXG4iKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsN Cj4gKwltdXRleF9pbml0KCZkZGMtPm10eCk7DQo+ICsNCj4gKwlzdHJzY3B5KGRkYy0+YWRhcC5u YW1lLCAibWVkaWF0ZWstaGRtaS1kZGMiLCBzaXplb2YoZGRjLQ0KPiA+YWRhcC5uYW1lKSk7DQo+ ICsJZGRjLT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7DQo+ICsJZGRjLT5hZGFwLmNsYXNzID0g STJDX0NMQVNTX0REQzsNCj4gKwlkZGMtPmFkYXAuYWxnbyA9ICZtdGtfaGRtaV9kZGNfYWxnb3Jp dGhtOw0KPiArCWRkYy0+YWRhcC5yZXRyaWVzID0gMzsNCj4gKwlkZGMtPmFkYXAuZGV2Lm9mX25v ZGUgPSBkZXYtPm9mX25vZGU7DQo+ICsJZGRjLT5hZGFwLmFsZ29fZGF0YSA9IGRkYzsNCj4gKwlk ZGMtPmFkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7DQo+ICsNCj4gKwlyZXQgPSBpMmNfYWRk X2FkYXB0ZXIoJmRkYy0+YWRhcCk7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gYWRkIGJ1cyB0byBpMmMgY29yZVxuIik7DQo+ICsJCWdvdG8gZXJyX2Ns a19kaXNhYmxlOw0KPiArCX0NCj4gKw0KPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRk Yyk7DQo+ICsJcmV0dXJuIDA7DQo+ICsNCj4gK2Vycl9jbGtfZGlzYWJsZToNCj4gKwljbGtfZGlz YWJsZV91bnByZXBhcmUoZGRjLT5jbGspOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgbXRrX2hkbWlfZGRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQ0KPiArew0KPiArCXN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYyA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOw0KPiArDQo+ICsJbXV0ZXhfZGVzdHJveSgmZGRjLT5tdHgpOw0KPiArCWky Y19kZWxfYWRhcHRlcigmZGRjLT5hZGFwKTsNCj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRj LT5jbGspOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19oZG1pX2RkY19tYXRjaFtdID0gew0KPiArCXsNCj4gKwkJ LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTk1LWhkbWktZGRjIiwNCj4gKwl9LA0KPiArCXt9 LA0KPiArfTsNCj4gKw0KPiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9tdDgxOTVf ZGRjX2RyaXZlciA9IHsNCj4gKwkucHJvYmUgPSBtdGtfaGRtaV9kZGNfcHJvYmUsDQo+ICsJLnJl bW92ZSA9IG10a19oZG1pX2RkY19yZW1vdmUsDQo+ICsJLmRyaXZlciA9IHsNCj4gKwkJLm5hbWUg PSAibWVkaWF0ZWstaGRtaS1tdDgxOTUtZGRjIiwNCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gbXRr X2hkbWlfZGRjX21hdGNoLA0KPiArCX0sDQo+ICt9Ow0KPiArDQo+ICtNT0RVTEVfQVVUSE9SKCJD YW4gWmVuZyA8Y2FuLnplbmdAbWVkaWF0ZWsuY29tPiIpOw0KPiArTU9EVUxFX0RFU0NSSVBUSU9O KCJNZWRpYVRlayBIRE1JIEREQyBEcml2ZXIiKTsNCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTk1X2hk bWlfZGRjLmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE5NV9oZG1pX2Rk Yy5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNDAxMzkx MjA0MTFjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19tdDgxOTVfaGRtaV9kZGMuaA0KPiBAQCAtMCwwICsxLDIwIEBADQo+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAoYykg MjAxOSBNZWRpYVRlayBJbmMuDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfTVRLX0REQ19IDQo+ ICsjZGVmaW5lIF9NVEtfRERDX0gNCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQo+ICsN Cj4gK3N0cnVjdCBtdGtfaGRtaV9kZGMgew0KPiArCXN0cnVjdCBtdXRleCBtdHg7DQo+ICsJc3Ry dWN0IGkyY19hZGFwdGVyIGFkYXA7DQo+ICsJc3RydWN0IGNsayAqY2xrOw0KPiArCXZvaWQgX19p b21lbSAqcmVnczsNCj4gK307DQo+ICsNCj4gKyNlbmRpZiAvKiBfTVRLX0REQ19IICovDQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE5NV9oZG1pX3JlZ3Mu aA0KPiBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTk1X2hkbWlfcmVncy5oDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDMxZGQ1MDI0MmYz DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19t dDgxOTVfaGRtaV9yZWdzLmgNCj4gQEAgLTAsMCArMSwyNzYgQEANCj4gKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQo+ICsvKg0KPiArICogQ29weXJpZ2h0IChjKSAyMDE5 IE1lZGlhVGVrIEluYy4NCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9NVEtfSERNSV9SRUdTX0gN Cj4gKyNkZWZpbmUgX01US19IRE1JX1JFR1NfSA0KPiArDQo+ICsjZGVmaW5lIEFJRl9IRUFERVIg KDB4MDBGRkZGRkYgPDwgMCkNCj4gKyNkZWZpbmUgQUlGX1BLVDAwICgweEZGRkZGRkZGIDw8IDAp DQo+ICsjZGVmaW5lIEFJRl9QS1QwMSAoMHgwMEZGRkZGRiA8PCAwKQ0KPiArI2RlZmluZSBBSUZf UEtUMDIgKDB4RkZGRkZGRkYgPDwgMCkNCj4gKyNkZWZpbmUgQUlGX1BLVDAzICgweDAwRkZGRkZG IDw8IDApDQo+ICsjZGVmaW5lIEFJUF9DVFJMIDB4NDAwDQo+ICsjZGVmaW5lIEFJUF9DVFNfU1ZB TCAweDQwOA0KPiArI2RlZmluZSBBSVBfRE9XTlNBTVBMRV9DVFJMIDB4NDFDDQo+ICsjZGVmaW5l IEFJUF9JMlNfQ0hTVDAgMHg0MTQNCj4gKyNkZWZpbmUgQUlQX0kyU19DSFNUMSAweDQxOA0KPiAr I2RlZmluZSBBSVBfSTJTX0NUUkwgMHg0MTANCj4gKyNkZWZpbmUgQUlQX05fVkFMIDB4NDA0DQo+ ICsjZGVmaW5lIEFJUF9TUERJRl9DVFJMIDB4NDBDDQo+ICsjZGVmaW5lIEFJUF9UUElfQ1RSTCAw eDQyOA0KPiArI2RlZmluZSBBSVBfVFhDVFJMIDB4NDI0DQo+ICsjZGVmaW5lIEFVRF9ESVMgKDB4 MCA8PCAyKQ0KPiArI2RlZmluZSBBVURfRElTX1dSICgweDAgPDwgMTgpDQo+ICsjZGVmaW5lIEFV RF9FTiAoMHgxIDw8IDIpDQo+ICsjZGVmaW5lIEFVRF9FTl9XUiAoMHgxIDw8IDE4KQ0KPiArI2Rl ZmluZSBBVURfRVJSX1RIUkVTSCAoMHgzRiA8PCAyNCkNCj4gKyNkZWZpbmUgQVVEX0VSUl9USFJF U0hfU0hJRlQgMjQNCj4gKyNkZWZpbmUgQVVEX0lOX0VOICgxIDw8IDgpDQo+ICsjZGVmaW5lIEFV RF9JTl9FTl9TSElGVCA4DQo+ICsjZGVmaW5lIEFVRF9NVVRFX0RJUyAoMHgwIDw8IDUpDQo+ICsj ZGVmaW5lIEFVRF9NVVRFX0ZJRk9fRU4gKDB4MSA8PCA1KQ0KPiArI2RlZmluZSBBVURfUEFDS0VU X0RST1AgKDB4MSA8PCA2KQ0KPiArI2RlZmluZSBBVURfUlBUX0RJUyAoMHgwIDw8IDIpDQo+ICsj ZGVmaW5lIEFVRF9SUFRfRU4gKDB4MSA8PCAyKQ0KPiArI2RlZmluZSBBVURfU0VMX09XUlQgKDEg PDwgOSkNCj4gKyNkZWZpbmUgQVZJX0RJUyAoMHgwIDw8IDApDQo+ICsjZGVmaW5lIEFWSV9ESVNf V1IgKDB4MCA8PCAxNikNCj4gKyNkZWZpbmUgQVZJX0VOICgweDEgPDwgMCkNCj4gKyNkZWZpbmUg QVZJX0VOX1dSICgweDEgPDwgMTYpDQpVc2UgQklUKCkgYW5kIEdFTk1BU0soKQ0KPiArI2RlZmlu ZSBBVklfSEVBREVSICgweEZGRkZGRiA8PCAwKQ0KPiArI2RlZmluZSBBVklfUEtUMDAgKDB4RkZG RkZGRkYgPDwgMCkNCj4gKyNkZWZpbmUgQVZJX1BLVDAxICgweEZGRkZGRiA8PCAwKQ0KPiArI2Rl ZmluZSBBVklfUEtUMDIgKDB4RkZGRkZGRkYgPDwgMCkNCj4gKyNkZWZpbmUgQVZJX1BLVDAzICgw eEZGRkZGRiA8PCAwKQ0KPiArI2RlZmluZSBBVklfUEtUMDQgKDB4RkZGRkZGRkYgPDwgMCkNCj4g KyNkZWZpbmUgQVZJX1BLVDA1ICgweEZGRkZGRiA8PCAwKQ0KPiArI2RlZmluZSBBVklfUlBUX0RJ UyAoMHgwIDw8IDApDQo+ICsjZGVmaW5lIEFWSV9SUFRfRU4gKDB4MSA8PCAwKQ0KPiArI2RlZmlu ZSBDNDIyX0M0MjBfQ09ORklHX0JZUEFTUyAoMHgxIDw8IDUpDQo+ICsjZGVmaW5lIEM0MjJfQzQy MF9DT05GSUdfRU5BQkxFICgweDEgPDwgNCkNCj4gKyNkZWZpbmUgQzQyMl9DNDIwX0NPTkZJR19P VVRfQ0JfT1JfQ1IgKDB4MSA8PCA2KQ0KPiArI2RlZmluZSBDNDQ0X0M0MjJfQ09ORklHX0VOQUJM RSAoMHgxIDw8IDApDQo+ICsjZGVmaW5lIENCSVRfT1JERVJfU0FNRSAoMHgxIDw8IDEzKQ0KPiAr I2RlZmluZSBDRUFfQVVEX0VOICgxIDw8IDkpDQo+ICsjZGVmaW5lIENFQV9BVklfRU4gKDEgPDwg MTEpDQo+ICsjZGVmaW5lIENFQV9DUF9FTiAoMSA8PCA2KQ0KPiArI2RlZmluZSBDRUFfU1BEX0VO ICgxIDw8IDEwKQ0KPiArI2RlZmluZSBDTEVBUl9GSUZPIDB4OQ0KPiArI2RlZmluZSBDTE9DS19T Q0wgMHhBDQo+ICsjZGVmaW5lIENQX0NMUl9NVVRFX0VOICgxIDw8IDEpDQo+ICsjZGVmaW5lIENQ X0VOICgweDEgPDwgNSkNCj4gKyNkZWZpbmUgQ1BfRU5fV1IgKDB4MSA8PCAyMSkNCj4gKyNkZWZp bmUgQ1BfUlBUX0VOICgweDEgPDwgNSkNCj4gKyNkZWZpbmUgQ1BfU0VUX01VVEVfRElTICgwIDw8 IDApDQo+ICsjZGVmaW5lIENQX1NFVF9NVVRFX0VOICgxIDw8IDApDQo+ICsjZGVmaW5lIENUU19D QUxfTjQgKDEgPDwgMjMpDQo+ICsjZGVmaW5lIENUU19SRVFfRU4gKDEgPDwgMSkNCj4gKyNkZWZp bmUgQ1RTX1NXX1NFTCAoMSA8PCAwKQ0KPiArI2RlZmluZSBDX1NEMCAoMHgwIDw8IDApDQo+ICsj ZGVmaW5lIENfU0QxICgweDEgPDwgNCkNCj4gKyNkZWZpbmUgQ19TRDIgKDB4MiA8PCA4KQ0KPiAr I2RlZmluZSBDX1NEMyAoMHgzIDw8IDEyKQ0KPiArI2RlZmluZSBDX1NENCAoMHg0IDw8IDE2KQ0K PiArI2RlZmluZSBDX1NENSAoMHg1IDw8IDIwKQ0KPiArI2RlZmluZSBDX1NENiAoMHg2IDw8IDI0 KQ0KPiArI2RlZmluZSBDX1NENyAoMHg3IDw8IDI4KQ0KPiArI2RlZmluZSBEQVRBX0RJUl9MU0Ig KDB4MSA8PCA5KQ0KPiArI2RlZmluZSBEQVRBX0RJUl9NU0IgKDB4MCA8PCA5KQ0KPiArI2RlZmlu ZSBERENfQ01EICgweEYgPDwgMjgpDQo+ICsjZGVmaW5lIEREQ19DTURfU0hJRlQgKDI4KQ0KPiAr I2RlZmluZSBERENfQ1RSTCAweEMxMA0KPiArI2RlZmluZSBERENfREFUQV9PVVQgKDB4RkYgPDwg MTYpDQo+ICsjZGVmaW5lIEREQ19EQVRBX09VVF9DTlQgKDB4MUYgPDwgOCkNCj4gKyNkZWZpbmUg RERDX0RBVEFfT1VUX1NISUZUICgxNikNCj4gKyNkZWZpbmUgRERDX0RFTEFZX0NOVCAoMHhGRkZG IDw8IDE2KQ0KPiArI2RlZmluZSBERENfREVMQVlfQ05UX1NISUZUICgxNikNCj4gKyNkZWZpbmUg RERDX0RJTl9DTlQgKDB4M0ZGIDw8IDE2KQ0KPiArI2RlZmluZSBERENfRElOX0NOVF9TSElGVCAo MTYpDQo+ICsjZGVmaW5lIEREQ19JMkNfQlVTX0xPVyAoMHgxIDw8IDExKQ0KPiArI2RlZmluZSBE RENfSTJDX0lOX1BST0cgKDB4MSA8PCAxMykNCj4gKyNkZWZpbmUgRERDX0kyQ19JTl9QUk9HX0lO VF9DTFIgKDEgPDwgMjkpDQo+ICsjZGVmaW5lIEREQ19JMkNfSU5fUFJPR19JTlRfTUFTSyAoMCA8 PCAyOSkNCj4gKyNkZWZpbmUgRERDX0kyQ19JTl9QUk9HX0lOVF9TVEEgKDEgPDwgMjkpDQo+ICsj ZGVmaW5lIEREQ19JMkNfSU5fUFJPR19JTlRfVU5DTFIgKDAgPDwgMjkpDQo+ICsjZGVmaW5lIERE Q19JMkNfSU5fUFJPR19JTlRfVU5NQVNLICgxIDw8IDI5KQ0KPiArI2RlZmluZSBERENfSTJDX05P X0FDSyAoMHgxIDw8IDEwKQ0KPiArI2RlZmluZSBERENfT0ZGU0VUICgweEZGIDw8IDgpDQo+ICsj ZGVmaW5lIEREQ19PRkZTRVRfU0hJRlQgKDgpDQo+ICsjZGVmaW5lIEREQ19TRUdNRU5UICgweEZG IDw8IDgpDQo+ICsjZGVmaW5lIEREQ19TRUdNRU5UX1NISUZUICg4KQ0KPiArI2RlZmluZSBERUVQ Q09MT1JfTU9ERV8xMEJJVCAoMSA8PCA4KQ0KPiArI2RlZmluZSBERUVQQ09MT1JfTU9ERV8xMkJJ VCAoMiA8PCA4KQ0KPiArI2RlZmluZSBERUVQQ09MT1JfTU9ERV8xNkJJVCAoMyA8PCA4KQ0KPiAr I2RlZmluZSBERUVQQ09MT1JfTU9ERV84QklUICgwIDw8IDgpDQo+ICsjZGVmaW5lIERFRVBDT0xP Ul9NT0RFX01BU0tCSVQgKDMgPDwgOCkNCj4gKyNkZWZpbmUgREVFUENPTE9SX1BBVF9FTiAoMSA8 PCAxMikNCj4gKyNkZWZpbmUgREVFUF9DT0xPUl9BREQgKDB4MSA8PCA0KQ0KPiArI2RlZmluZSBE T1dOU0FNUExFIDB4Mg0KPiArI2RlZmluZSBEU0RfRU4gKDEgPDwgMTUpDQo+ICsjZGVmaW5lIERT RF9NVVRFX0RBVEEgKDB4MSA8PCA3KQ0KPiArI2RlZmluZSBFTkhfUkVBRF9OT19BQ0sgMHg0DQo+ ICsjZGVmaW5lIEZJRk8wX01BUCAoMHgzIDw8IDApDQo+ICsjZGVmaW5lIEZJRk8xX01BUCAoMHgz IDw8IDIpDQo+ICsjZGVmaW5lIEZJRk8yX01BUCAoMHgzIDw8IDQpDQo+ICsjZGVmaW5lIEZJRk8z X01BUCAoMHgzIDw8IDYpDQo+ICsjZGVmaW5lIEZTX09WRVJSSURFX1dSSVRFICgxIDw8IDEpDQo+ ICsjZGVmaW5lIEZTX1VOT1ZFUlJJREUgKDAgPDwgMSkNCj4gKyNkZWZpbmUgSEJSQV9PTiAoMSA8 PCAxNCkNCj4gKyNkZWZpbmUgSEJSX0ZST01fU1BESUYgKDEgPDwgMjApDQo+ICsjZGVmaW5lIEhE Q1AxWF9DVFJMIDB4Q0QwDQo+ICsjZGVmaW5lIEhEQ1AxWF9FTkNfRU4gKDB4MSA8PCA2KQ0KPiAr I2RlZmluZSBIRENQMVhfRU5DX0VOX1NISUZUICg2KQ0KPiArI2RlZmluZSBIRENQMlhfQ1RSTF8w IDB4QzIwDQo+ICsjZGVmaW5lIEhEQ1AyWF9ERENNX1NUQVRVUyAweEM2OA0KPiArI2RlZmluZSBI RENQMlhfRElTX1BPTExfRU4gKDB4MSA8PCAxNikNCj4gKyNkZWZpbmUgSERDUDJYX0VOICgweDEg PDwgMCkNCj4gKyNkZWZpbmUgSERDUDJYX0VOQ1JZUFRJTkdfT04gKDB4MSA8PCAxMCkNCj4gKyNk ZWZpbmUgSERDUDJYX0VOQ1JZUFRfRU4gKDB4MSA8PCA3KQ0KPiArI2RlZmluZSBIRENQMlhfRU5D UllQVF9FTl9TSElGVCAoNykNCj4gKyNkZWZpbmUgSERDUDJYX0hQRF9PVlIgKDB4MSA8PCAxMCkN Cj4gKyNkZWZpbmUgSERDUDJYX0hQRF9TVyAoMHgxIDw8IDExKQ0KPiArI2RlZmluZSBIRENQMlhf UE9MX0NUUkwgMHhDNTQNCj4gKyNkZWZpbmUgSERDUDJYX1JYX1JFQVVUSF9SRVFfRERDTV9JTlRf TUFTSyAoMCA8PCAyNSkNCj4gKyNkZWZpbmUgSERDUDJYX1JYX1JFQVVUSF9SRVFfRERDTV9JTlRf VU5NQVNLICgxIDw8IDI1KQ0KPiArI2RlZmluZSBIRENQX0VOQUJMRSAoMHgwIDw8IDApDQo+ICsj ZGVmaW5lIEhEQ1BfRU5DUllQVElOR19PTiAoMHgxIDw8IDI2KQ0KPiArI2RlZmluZSBIRENQX1RP UF9DVFJMIDB4QzAwDQo+ICsjZGVmaW5lIEhETUkyX09GRiAoMCA8PCAyKQ0KPiArI2RlZmluZSBI RE1JMl9PTiAoMSA8PCAyKQ0KPiArI2RlZmluZSBIRE1JVFhfQ09ORklHIDB4OTAwDQo+ICsjZGVm aW5lIEhETUlUWF9TV19IUEQgQklUKDI5KQ0KPiArI2RlZmluZSBIRE1JVFhfU1dfSFBEX1NISUZU ICgyOSkNCj4gKyNkZWZpbmUgSERNSVRYX1NXX1JTVEIgQklUKDMxKQ0KPiArI2RlZmluZSBIRE1J VFhfU1dfUlNUQl9TSElGVCAoMzEpDQo+ICsjZGVmaW5lIEhETUlfTU9ERV9EVkkgKDAgPDwgMykN Cj4gKyNkZWZpbmUgSERNSV9NT0RFX0hETUkgKDEgPDwgMykNCj4gKyNkZWZpbmUgSERNSV9ZVVY0 MjBfTU9ERSBCSVQoMTApDQo+ICsjZGVmaW5lIEhETUlfWVVWNDIwX01PREVfU0hJRlQgKDEwKQ0K PiArI2RlZmluZSBIUERfRERDX0NUUkwgMHhDMDgNCj4gKyNkZWZpbmUgSFBEX0REQ19TVEFUVVMg MHhDNjANCj4gKyNkZWZpbmUgSFBEX1BJTl9TVEEgKDB4MSA8PCA0KQ0KPiArI2RlZmluZSBIUERf U1RBVEUgKDB4MyA8PCAwKQ0KPiArI2RlZmluZSBIUERfU1RBVEVfQ09OTkVDVEVEICgyKQ0KPiAr I2RlZmluZSBIUERfU1RBVEVfRElTQ09OTkVDVEVEICgwKQ0KPiArI2RlZmluZSBIUERfU1RBVEVf U0hJRlQgKDApDQo+ICsjZGVmaW5lIEhUUExHX0ZfSU5UX1NUQSAoMSA8PCAxKQ0KPiArI2RlZmlu ZSBIVFBMR19SX0lOVF9TVEEgKDEgPDwgMCkNCj4gKyNkZWZpbmUgSTJTMkRTRF9FTiAoMSA8PCAz MCkNCj4gKyNkZWZpbmUgSTJTXzFTVF9CSVRfTk9TSElGVCAoMHgxIDw8IDgpDQo+ICsjZGVmaW5l IEkyU19FTiAoMHhGIDw8IDE2KQ0KPiArI2RlZmluZSBJMlNfRU5fU0hJRlQgMTYNCj4gKyNkZWZp bmUgSlVTVElGWV9SSUdIVCAoMHgxIDw8IDEwKQ0KPiArI2RlZmluZSBMQVlPVVQgKDB4MSA8PCAx OCkNCj4gKyNkZWZpbmUgTEFZT1VUMCAoMHgwIDw8IDQpDQo+ICsjZGVmaW5lIExBWU9VVDEgKDB4 MSA8PCA0KQ0KPiArI2RlZmluZSBMRkVfQ0NfU1dBUCAoMHgwMSA8PCAxKQ0KPiArI2RlZmluZSBN QVBfU0QwIDB4MA0KPiArI2RlZmluZSBNQVBfU0QxIDB4MQ0KPiArI2RlZmluZSBNQVBfU0QyIDB4 Mg0KPiArI2RlZmluZSBNQVBfU0QzIDB4Mw0KPiArI2RlZmluZSBNQVhfMVVJX1dSSVRFICgweEZG IDw8IDgpDQo+ICsjZGVmaW5lIE1BWF8xVUlfV1JJVEVfU0hJRlQgOA0KPiArI2RlZmluZSBNQVhf MlVJX1dSSVRFICgweEZGIDw8IDE2KQ0KPiArI2RlZmluZSBNQVhfMlVJX1dSSVRFX1NISUZUIDE2 DQo+ICsjZGVmaW5lIE1DTEtfMTE1MkZTIDB4Ng0KPiArI2RlZmluZSBNQ0xLXzEyOEZTIDB4MA0K PiArI2RlZmluZSBNQ0xLXzE5MkZTIDB4Nw0KPiArI2RlZmluZSBNQ0xLXzI1NkZTIDB4MQ0KPiAr I2RlZmluZSBNQ0xLXzM4NEZTIDB4Mg0KPiArI2RlZmluZSBNQ0xLXzUxMkZTIDB4Mw0KPiArI2Rl ZmluZSBNQ0xLXzc2OEZTIDB4NA0KPiArI2RlZmluZSBNQ0xLX0NUU0dFTl9TRUwgKDAgPDwgMykN Cj4gKyNkZWZpbmUgTUNMS19FTiAoMSA8PCAyKQ0KPiArI2RlZmluZSBOT19NQ0xLX0NUU0dFTl9T RUwgKDEgPDwgMykNCj4gKyNkZWZpbmUgTlVMTF9QS1RfRU4gKDEgPDwgMikNCj4gKyNkZWZpbmUg TlVMTF9QS1RfVlNZTkNfSElHSF9FTiAoMSA8PCAzKQ0KPiArI2RlZmluZSBPVVRQVVRfRk9STUFU X0RFTVVYXzQyMF9FTkFCTEUgKDB4MSA8PCAxMCkNCj4gKyNkZWZpbmUgUE9SRF9GX0lOVF9TVEEg KDEgPDwgMykNCj4gKyNkZWZpbmUgUE9SRF9QSU5fU1RBICgweDEgPDwgNSkNCj4gKyNkZWZpbmUg UE9SRF9SX0lOVF9TVEEgKDEgPDwgMikNCj4gKyNkZWZpbmUgUkVHX1ZNVVRFX0VOICgxIDw8IDE2 KQ0KPiArI2RlZmluZSBSU1Q0QVVESU8gKDB4MSA8PCAwKQ0KPiArI2RlZmluZSBSU1Q0QVVESU9f QUNSICgweDEgPDwgMikNCj4gKyNkZWZpbmUgUlNUNEFVRElPX0ZJRk8gKDB4MSA8PCAxKQ0KPiAr I2RlZmluZSBTQ0RDX0NUUkwgMHhDMTgNCj4gKyNkZWZpbmUgU0NLX0VER0VfUklTRSAoMHgxIDw8 IDE0KQ0KPiArI2RlZmluZSBTQ1JfT0ZGICgwIDw8IDQpDQo+ICsjZGVmaW5lIFNDUl9PTiAoMSA8 PCA0KQ0KPiArI2RlZmluZSBTRVFfUkVBRF9OT19BQ0sgMHgyDQo+ICsjZGVmaW5lIFNFUV9XUklU RV9SRVFfQUNLIDB4Nw0KPiArI2RlZmluZSBTSTJDX0FERFIgKDB4RkZGRiA8PCAxNikNCj4gKyNk ZWZpbmUgU0kyQ19BRERSX1JFQUQgKDB4RjQpDQo+ICsjZGVmaW5lIFNJMkNfQUREUl9TSElGVCAo MTYpDQo+ICsjZGVmaW5lIFNJMkNfQ09ORklSTV9SRUFEICgweDEgPDwgMikNCj4gKyNkZWZpbmUg U0kyQ19DVFJMIDB4Q0FDDQo+ICsjZGVmaW5lIFNJMkNfUkQgKDB4MSA8PCAxKQ0KPiArI2RlZmlu ZSBTSTJDX1dEQVRBICgweEZGIDw8IDgpDQo+ICsjZGVmaW5lIFNJMkNfV0RBVEFfU0hJRlQgKDgp DQo+ICsjZGVmaW5lIFNJMkNfV1IgKDB4MSA8PCAwKQ0KPiArI2RlZmluZSBTUERJRl9FTiAoMSA8 PCAxMykNCj4gKyNkZWZpbmUgU1BESUZfRU5fU0hJRlQgMTMNCj4gKyNkZWZpbmUgU1BESUZfSEVB REVSICgweDAwRkZGRkZGIDw8IDApDQo+ICsjZGVmaW5lIFNQRElGX0lOVEVSTkFMX01PRFVMRSAo MSA8PCAyNCkNCj4gKyNkZWZpbmUgU1BESUZfUEtUMDAgKDB4RkZGRkZGRkYgPDwgMCkNCj4gKyNk ZWZpbmUgU1BESUZfUEtUMDEgKDB4MDBGRkZGRkYgPDwgMCkNCj4gKyNkZWZpbmUgU1BESUZfUEtU MDIgKDB4RkZGRkZGRkYgPDwgMCkNCj4gKyNkZWZpbmUgU1BESUZfUEtUMDMgKDB4MDBGRkZGRkYg PDwgMCkNCj4gKyNkZWZpbmUgU1BESUZfUEtUMDQgKDB4RkZGRkZGRkYgPDwgMCkNCj4gKyNkZWZp bmUgU1BESUZfUEtUMDUgKDB4MDBGRkZGRkYgPDwgMCkNCj4gKyNkZWZpbmUgU1BESUZfUEtUMDYg KDB4RkZGRkZGRkYgPDwgMCkNCj4gKyNkZWZpbmUgU1BESUZfUEtUMDcgKDB4MDBGRkZGRkYgPDwg MCkNCj4gKyNkZWZpbmUgU1BEX0RJUyAoMHgwIDw8IDEpDQo+ICsjZGVmaW5lIFNQRF9ESVNfV1Ig KDB4MCA8PCAxNykNCj4gKyNkZWZpbmUgU1BEX0VOICgweDEgPDwgMSkNCj4gKyNkZWZpbmUgU1BE X0VOX1dSICgweDEgPDwgMTcpDQo+ICsjZGVmaW5lIFNQRF9SUFRfRElTICgweDAgPDwgMSkNCj4g KyNkZWZpbmUgU1BEX1JQVF9FTiAoMHgxIDw8IDEpDQo+ICsjZGVmaW5lIFRPUF9BSUZfSEVBREVS IDB4MDQwDQo+ICsjZGVmaW5lIFRPUF9BSUZfUEtUMDAgMHgwNDQNCj4gKyNkZWZpbmUgVE9QX0FJ Rl9QS1QwMSAweDA0OA0KPiArI2RlZmluZSBUT1BfQUlGX1BLVDAyIDB4MDRDDQo+ICsjZGVmaW5l IFRPUF9BSUZfUEtUMDMgMHgwNTANCj4gKyNkZWZpbmUgVE9QX0FVRF9NQVAgMHgwMEMNCj4gKyNk ZWZpbmUgVE9QX0FWSV9IRUFERVIgMHgwMjQNCj4gKyNkZWZpbmUgVE9QX0FWSV9QS1QwMCAweDAy OA0KPiArI2RlZmluZSBUT1BfQVZJX1BLVDAxIDB4MDJDDQo+ICsjZGVmaW5lIFRPUF9BVklfUEtU MDIgMHgwMzANCj4gKyNkZWZpbmUgVE9QX0FWSV9QS1QwMyAweDAzNA0KPiArI2RlZmluZSBUT1Bf QVZJX1BLVDA0IDB4MDM4DQo+ICsjZGVmaW5lIFRPUF9BVklfUEtUMDUgMHgwM0MNCj4gKyNkZWZp bmUgVE9QX0NGRzAwIDB4MDAwDQo+ICsjZGVmaW5lIFRPUF9DRkcwMSAweDAwNA0KPiArI2RlZmlu ZSBUT1BfSU5GT19FTiAweDAxQw0KPiArI2RlZmluZSBUT1BfSU5GT19FTl9FWFBBTkQgMHgzNjgN Cj4gKyNkZWZpbmUgVE9QX0lORk9fUlBUIDB4MDIwDQo+ICsjZGVmaW5lIFRPUF9JTlRfQ0xSMDAg MHgxQjgNCj4gKyNkZWZpbmUgVE9QX0lOVF9DTFIwMSAweDFCQw0KPiArI2RlZmluZSBUT1BfSU5U X01BU0swMCAweDFCMA0KPiArI2RlZmluZSBUT1BfSU5UX01BU0swMSAweDFCNA0KPiArI2RlZmlu ZSBUT1BfSU5UX1NUQTAwIDB4MUE4DQo+ICsjZGVmaW5lIFRPUF9NSVNDX0NUTFIgMHgxQTQNCj4g KyNkZWZpbmUgVE9QX1NQRElGX0hFQURFUiAweDA1NA0KPiArI2RlZmluZSBUT1BfU1BESUZfUEtU MDAgMHgwNTgNCj4gKyNkZWZpbmUgVE9QX1NQRElGX1BLVDAxIDB4MDVDDQo+ICsjZGVmaW5lIFRP UF9TUERJRl9QS1QwMiAweDA2MA0KPiArI2RlZmluZSBUT1BfU1BESUZfUEtUMDMgMHgwNjQNCj4g KyNkZWZpbmUgVE9QX1NQRElGX1BLVDA0IDB4MDY4DQo+ICsjZGVmaW5lIFRPUF9TUERJRl9QS1Qw NSAweDA2Qw0KPiArI2RlZmluZSBUT1BfU1BESUZfUEtUMDYgMHgwNzANCj4gKyNkZWZpbmUgVE9Q X1NQRElGX1BLVDA3IDB4MDc0DQo+ICsjZGVmaW5lIFRPUF9WTVVURV9DRkcxIDB4MUM4DQo+ICsj ZGVmaW5lIFRQSV9BVURJT19MT09LVVBfRElTICgweDAgPDwgMikNCj4gKyNkZWZpbmUgVFBJX0FV RElPX0xPT0tVUF9FTiAoMHgxIDw8IDIpDQo+ICsjZGVmaW5lIFZCSVRfQ09NICgweDEgPDwgMTIp DQo+ICsjZGVmaW5lIFZCSVRfUENNICgweDAgPDwgMTIpDQo+ICsjZGVmaW5lIFZJRF9ET1dOU0FN UExFX0NPTkZJRyAweDhGMA0KPiArI2RlZmluZSBWSURfT1VUX0ZPUk1BVCAweDhGQw0KPiArI2Rl ZmluZSBXUl8xVUlfTE9DSyAoMSA8PCAwKQ0KPiArI2RlZmluZSBXUl8xVUlfVU5MT0NLICgwIDw8 IDApDQo+ICsjZGVmaW5lIFdSXzJVSV9MT0NLICgxIDw8IDIpDQo+ICsjZGVmaW5lIFdSXzJVSV9V TkxPQ0sgKDAgPDwgMikNCj4gKyNkZWZpbmUgV1NfSElHSCAoMHgxIDw8IDExKQ0KPiArDQo+ICsj ZW5kaWYgLyogX01US19IRE1JX1JFR1NfSCAqLw0K