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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 02E59C433DB for ; Mon, 28 Dec 2020 11:22:28 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9B5FA22583 for ; Mon, 28 Dec 2020 11:22:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9B5FA22583 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CB39E894B7; Mon, 28 Dec 2020 11:22:26 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D34F894B7 for ; Mon, 28 Dec 2020 11:22:26 +0000 (UTC) IronPort-SDR: 2MvbDCm8eyBU92bmSxs9ZzSQK1W/YKmf2lJFH9DBtuN4d6cc1qpN3Cnj5mrXc4blh98dcMuOtV NbcHl3L6pTCA== X-IronPort-AV: E=McAfee;i="6000,8403,9847"; a="175596637" X-IronPort-AV: E=Sophos;i="5.78,455,1599548400"; d="scan'208";a="175596637" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Dec 2020 03:22:25 -0800 IronPort-SDR: Mrr452HSLW7Df3SACjw+BdNgJ4hN826r21gnd8OSTPtC9uKbxp2n4CfR59BoNoJwdIBznHih6H hUVkpsjccu0A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,455,1599548400"; d="scan'208";a="347563408" Received: from irsmsx606.ger.corp.intel.com ([163.33.146.139]) by orsmga006.jf.intel.com with ESMTP; 28 Dec 2020 03:22:23 -0800 Received: from bgsmsx604.gar.corp.intel.com (10.67.234.6) by IRSMSX606.ger.corp.intel.com (163.33.146.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 28 Dec 2020 11:22:22 +0000 Received: from bgsmsx604.gar.corp.intel.com ([10.67.234.6]) by BGSMSX604.gar.corp.intel.com ([10.67.234.6]) with mapi id 15.01.1713.004; Mon, 28 Dec 2020 16:52:20 +0530 From: "Gupta, Anshuman" To: "Nikula, Jani" , "intel-gfx@lists.freedesktop.org" Thread-Topic: [Intel-gfx] [PATCH 01/13] drm/i915/pps: abstract panel power sequencer from intel_dp.c Thread-Index: AQHW2HH9Qe1iIXBWRUK3XBtLKdWxfqoMYz6w Date: Mon, 28 Dec 2020 11:22:20 +0000 Message-ID: <9c7ba12c5b764d8a93f1d7afd79bfa53@intel.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.5.1.3 dlp-reaction: no-action x-originating-ip: [10.223.10.1] MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 01/13] drm/i915/pps: abstract panel power sequencer from intel_dp.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Nikula, Jani" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSW50ZWwtZ2Z4IDxpbnRl bC1nZngtYm91bmNlc0BsaXN0cy5mcmVlZGVza3RvcC5vcmc+IE9uIEJlaGFsZiBPZiBKYW5pDQo+ IE5pa3VsYQ0KPiBTZW50OiBUdWVzZGF5LCBEZWNlbWJlciAyMiwgMjAyMCA4OjIwIFBNDQo+IFRv OiBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+IENjOiBOaWt1bGEsIEphbmkgPGph bmkubmlrdWxhQGludGVsLmNvbT4NCj4gU3ViamVjdDogW0ludGVsLWdmeF0gW1BBVENIIDAxLzEz XSBkcm0vaTkxNS9wcHM6IGFic3RyYWN0IHBhbmVsIHBvd2VyDQo+IHNlcXVlbmNlciBmcm9tIGlu dGVsX2RwLmMNCj4gDQo+IEluIGEgbG9uZyBvdmVyZHVlIHJlZmFjdG9yaW5nLCBzcGxpdCBvdXQg YWxsIHBhbmVsIHNlcXVlbmNlciBjb2RlIGZyb20NCj4gaW50ZWxfZHAuYyB0byBuZXcgaW50ZWxf cHBzLltjaF0uDQo+IA0KPiBUaGUgZmlyc3QgcGFydCBpcyBtb3N0bHkganVzdCBjb2RlIG1vdmVt ZW50IGFzLWlzLCB3aXRob3V0IGNsZWFudXBzLg0KPiANCj4gV2UgbmVlZCB0byBhZGQgYSB2bHZf Z2V0X2RwbGwoKSBoZWxwZXIgdG8gZ2V0IGF0IHRoZSB2bHYvY2h2IGRwbGwgZnJvbQ0KPiBwcHMg Y29kZS4NCklNSE8gZnVuY3Rpb25zIGludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2Vy LCBpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMsDQppbnRlbF9k cF9wcHNfaW5pdCBzdWl0cyBhIGludGVsX2VkcF8qIHByZWZpeC4NCj4gDQo+IFNpZ25lZC1vZmYt Ynk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+DQo+IC0tLQ0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAgMSArDQo+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jICAgICAgfCAgICAxICsNCj4gIC4u Li9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYyAgICB8ICAgIDIgKy0NCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyAgICAgICB8IDE0NDIgKy0t LS0tLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAu aCAgICAgICB8ICAgIDUgKy0NCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf cHBzLmMgICAgICB8IDEzMzcgKysrKysrKysrKysrKysrDQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX3Bwcy5oICAgICAgfCAgIDUzICsNCj4gIDcgZmlsZXMgY2hhbmdlZCwg MTQ0NyBpbnNlcnRpb25zKCspLCAxMzk0IGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmMNCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5oDQo+IA0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUNCj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQ0KPiBpbmRleCAzYTQzOWIxZDA0OTYuLjFlMjY5MDJhODZl NSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUNCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUNCj4gQEAgLTI1MCw2ICsyNTAsNyBAQCBpOTE1 LXkgKz0gXA0KPiAgCWRpc3BsYXkvaW50ZWxfbHNwY29uLm8gXA0KPiAgCWRpc3BsYXkvaW50ZWxf bHZkcy5vIFwNCj4gIAlkaXNwbGF5L2ludGVsX3BhbmVsLm8gXA0KPiArCWRpc3BsYXkvaW50ZWxf cHBzLm8gXA0KPiAgCWRpc3BsYXkvaW50ZWxfc2R2by5vIFwNCj4gIAlkaXNwbGF5L2ludGVsX3R2 Lm8gXA0KPiAgCWRpc3BsYXkvaW50ZWxfdmRzYy5vIFwNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2RkaS5jDQo+IGluZGV4IDY4NjMyMzZkZjFkMC4uOWRkYmU4Yjg3MzBi IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5j DQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMNCj4gQEAg LTQ2LDYgKzQ2LDcgQEANCj4gICNpbmNsdWRlICJpbnRlbF9ob3RwbHVnLmgiDQo+ICAjaW5jbHVk ZSAiaW50ZWxfbHNwY29uLmgiDQo+ICAjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCINCj4gKyNpbmNs dWRlICJpbnRlbF9wcHMuaCINCj4gICNpbmNsdWRlICJpbnRlbF9wc3IuaCINCj4gICNpbmNsdWRl ICJpbnRlbF9zcHJpdGUuaCINCj4gICNpbmNsdWRlICJpbnRlbF90Yy5oIg0KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMNCj4g Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYw0KPiBp bmRleCBkNTIzNzRmMDEzMTYuLmExMWJkODIxM2RmNCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMNCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMNCj4gQEAgLTQsNyAr NCw2IEBADQo+ICAgKi8NCj4gDQo+ICAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9jcnQuaCINCj4g LSNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2RwLmgiDQo+IA0KPiAgI2luY2x1ZGUgImk5MTVfZHJ2 LmgiDQo+ICAjaW5jbHVkZSAiaTkxNV9pcnEuaCINCj4gQEAgLTE2LDYgKzE1LDcgQEANCj4gICNp bmNsdWRlICJpbnRlbF9kcGlvX3BoeS5oIg0KPiAgI2luY2x1ZGUgImludGVsX2hvdHBsdWcuaCIN Cj4gICNpbmNsdWRlICJpbnRlbF9wbS5oIg0KPiArI2luY2x1ZGUgImludGVsX3Bwcy5oIg0KPiAg I2luY2x1ZGUgImludGVsX3NpZGViYW5kLmgiDQo+ICAjaW5jbHVkZSAiaW50ZWxfdGMuaCINCj4g ICNpbmNsdWRlICJpbnRlbF92Z2EuaCINCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHAuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZHAuYw0KPiBpbmRleCBiMmJjMGM4YzM5YzcuLmQ0NzYwYzQ3ODY1MyAxMDA2NDQNCj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jDQo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYw0KPiBAQCAtNTgsNiArNTgsNyBA QA0KPiAgI2luY2x1ZGUgImludGVsX2xzcGNvbi5oIg0KPiAgI2luY2x1ZGUgImludGVsX2x2ZHMu aCINCj4gICNpbmNsdWRlICJpbnRlbF9wYW5lbC5oIg0KPiArI2luY2x1ZGUgImludGVsX3Bwcy5o Ig0KPiAgI2luY2x1ZGUgImludGVsX3Bzci5oIg0KPiAgI2luY2x1ZGUgImludGVsX3NpZGViYW5k LmgiDQo+ICAjaW5jbHVkZSAiaW50ZWxfdGMuaCINCj4gQEAgLTEyMSw2ICsxMjIsMTEgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBkcF9saW5rX2RwbGwgY2h2X2RwbGxbXSA9IHsNCj4gIAkJeyAucDEg PSA0LCAucDIgPSAxLCAubiA9IDEsIC5tMSA9IDIsIC5tMiA9IDB4NmMwMDAwMCB9IH0sDQo+ICB9 Ow0KPiANCj4gK2NvbnN0IHN0cnVjdCBkcGxsICp2bHZfZ2V0X2RwbGwoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpDQo+ICt7DQo+ICsJcmV0dXJuIElTX0NIRVJSWVZJRVcoaTkxNSkgPyAm Y2h2X2RwbGxbMF0uZHBsbCA6ICZ2bHZfZHBsbFswXS5kcGxsOw0KPiArfQ0KPiArDQo+ICAvKiBD b25zdGFudHMgZm9yIERQIERTQyBjb25maWd1cmF0aW9ucyAqLw0KPiAgc3RhdGljIGNvbnN0IHU4 IHZhbGlkX2RzY19icHBbXSA9IHs2LCA4LCAxMCwgMTIsIDE1fTsNCj4gDQo+IEBAIC0xNDUsMTIg KzE1MSw2IEBAIGJvb2wgaW50ZWxfZHBfaXNfZWRwKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp DQo+IA0KPiAgc3RhdGljIHZvaWQgaW50ZWxfZHBfbGlua19kb3duKHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyLA0KPiAgCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpvbGRfY3J0Y19zdGF0ZSk7DQo+IC1zdGF0aWMgYm9vbCBlZHBfcGFuZWxfdmRkX29uKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApOw0KPiAtc3RhdGljIHZvaWQgZWRwX3BhbmVsX3ZkZF9vZmYo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgYm9vbCBzeW5jKTsNCj4gLXN0YXRpYyB2b2lkIHZs dl9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3QgaW50ZWxfZW5jb2Rlcg0KPiAqZW5j b2RlciwNCj4gLQkJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUNCj4gKmNydGNf c3RhdGUpOw0KPiAtc3RhdGljIHZvaWQgdmx2X3N0ZWFsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJICAgICAgZW51bSBwaXBlIHBp cGUpOw0KPiAgc3RhdGljIHZvaWQgaW50ZWxfZHBfdW5zZXRfZWRpZChzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKTsNCj4gDQo+ICAvKiB1cGRhdGUgc2luayByYXRlcyBmcm9tIGRwY2QgKi8NCj4g QEAgLTg1NCw0NTEgKzg1NCw2IEBAIHN0YXRpYyB2b2lkIGludGVsX2RwX3VucGFja19hdXgodTMy IHNyYywgdTgNCj4gKmRzdCwgaW50IGRzdF9ieXRlcykNCj4gIAkJZHN0W2ldID0gc3JjID4+ICgo My1pKSAqIDgpOw0KPiAgfQ0KPiANCj4gLXN0YXRpYyB2b2lkDQo+IC1pbnRlbF9kcF9pbml0X3Bh bmVsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsNCj4gLXN0YXRp YyB2b2lkDQo+IC1pbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCwNCj4gLQkJCQkJICAgICAgYm9vbCBmb3JjZV9kaXNh YmxlX3ZkZCk7DQo+IC1zdGF0aWMgdm9pZA0KPiAtaW50ZWxfZHBfcHBzX2luaXQoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCk7DQo+IC0NCj4gLXN0YXRpYyBpbnRlbF93YWtlcmVmX3QNCj4gLXBw c19sb2NrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+IC0JaW50ZWxf d2FrZXJlZl90IHdha2VyZWY7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFNlZSBpbnRlbF9wb3dlcl9z ZXF1ZW5jZXJfcmVzZXQoKSB3aHkgd2UgbmVlZA0KPiAtCSAqIGEgcG93ZXIgZG9tYWluIHJlZmVy ZW5jZSBoZXJlLg0KPiAtCSAqLw0KPiAtCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dl dChkZXZfcHJpdiwNCj4gLQ0KPiBpbnRlbF9hdXhfcG93ZXJfZG9tYWluKGRwX3RvX2RpZ19wb3J0 KGludGVsX2RwKSkpOw0KPiAtDQo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBwc19tdXRleCk7 DQo+IC0NCj4gLQlyZXR1cm4gd2FrZXJlZjsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludGVsX3dh a2VyZWZfdA0KPiAtcHBzX3VubG9jayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnRlbF93 YWtlcmVmX3Qgd2FrZXJlZikNCj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gLQ0KPiAtCW11dGV4X3VubG9jaygmZGV2 X3ByaXYtPnBwc19tdXRleCk7DQo+IC0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYs DQo+IC0NCj4gCWludGVsX2F1eF9wb3dlcl9kb21haW4oZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHAp KSwNCj4gLQkJCQl3YWtlcmVmKTsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtI2RlZmlu ZSB3aXRoX3Bwc19sb2NrKGRwLCB3ZikgXA0KPiAtCWZvciAoKHdmKSA9IHBwc19sb2NrKGRwKTsg KHdmKTsgKHdmKSA9IHBwc191bmxvY2soKGRwKSwgKHdmKSkpDQo+IC0NCj4gLXN0YXRpYyB2b2lk DQo+IC12bHZfcG93ZXJfc2VxdWVuY2VyX2tpY2soc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkN Cj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1 KGludGVsX2RwKTsNCj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRw X3RvX2RpZ19wb3J0KGludGVsX2RwKTsNCj4gLQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2RwLT5w cHNfcGlwZTsNCj4gLQlib29sIHBsbF9lbmFibGVkLCByZWxlYXNlX2NsX292ZXJyaWRlID0gZmFs c2U7DQo+IC0JZW51bSBkcGlvX3BoeSBwaHkgPSBEUElPX1BIWShwaXBlKTsNCj4gLQllbnVtIGRw aW9fY2hhbm5lbCBjaCA9IHZsdl9waXBlX3RvX2NoYW5uZWwocGlwZSk7DQo+IC0JdTMyIERQOw0K PiAtDQo+IC0JaWYgKGRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkgICAgIGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKSAmDQo+IERQX1BPUlRfRU4sDQo+ IC0JCSAgICAgInNraXBwaW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGtpY2sgZHVlIHRvDQo+ IFtFTkNPREVSOiVkOiVzXSBiZWluZyBhY3RpdmVcbiIsDQo+IC0JCSAgICAgcGlwZV9uYW1lKHBp cGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsDQo+IC0JCSAgICAgZGlnX3BvcnQtPmJh c2UuYmFzZS5uYW1lKSkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sDQo+IC0JCSAgICAia2lja2luZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNlciBmb3IN Cj4gW0VOQ09ERVI6JWQ6JXNdXG4iLA0KPiAtCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBkaWdfcG9y dC0+YmFzZS5iYXNlLmJhc2UuaWQsDQo+IC0JCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUp Ow0KPiAtDQo+IC0JLyogUHJlc2VydmUgdGhlIEJJT1MtY29tcHV0ZWQgZGV0ZWN0ZWQgYml0LiBU aGlzIGlzDQo+IC0JICogc3VwcG9zZWQgdG8gYmUgcmVhZC1vbmx5Lg0KPiAtCSAqLw0KPiAtCURQ ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpICYNCj4gRFBf REVURUNURUQ7DQo+IC0JRFAgfD0gRFBfVk9MVEFHRV8wXzQgfCBEUF9QUkVfRU1QSEFTSVNfMDsN Cj4gLQlEUCB8PSBEUF9QT1JUX1dJRFRIKDEpOw0KPiAtCURQIHw9IERQX0xJTktfVFJBSU5fUEFU XzE7DQo+IC0NCj4gLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpDQo+IC0JCURQIHw9IERQ X1BJUEVfU0VMX0NIVihwaXBlKTsNCj4gLQllbHNlDQo+IC0JCURQIHw9IERQX1BJUEVfU0VMKHBp cGUpOw0KPiAtDQo+IC0JcGxsX2VuYWJsZWQgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEUExM KHBpcGUpKSAmDQo+IERQTExfVkNPX0VOQUJMRTsNCj4gLQ0KPiAtCS8qDQo+IC0JICogVGhlIERQ TEwgZm9yIHRoZSBwaXBlIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLg0KPiAtCSAq IFNvIGVuYWJsZSB0ZW1wb3JhcmlseSBpdCBpZiBpdCdzIG5vdCBhbHJlYWR5IGVuYWJsZWQuDQo+ IC0JICovDQo+IC0JaWYgKCFwbGxfZW5hYmxlZCkgew0KPiAtCQlyZWxlYXNlX2NsX292ZXJyaWRl ID0gSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgJiYNCj4gLQkJCSFjaHZfcGh5X3Bvd2VyZ2F0ZV9j aChkZXZfcHJpdiwgcGh5LCBjaCwgdHJ1ZSk7DQo+IC0NCj4gLQkJaWYgKHZsdl9mb3JjZV9wbGxf b24oZGV2X3ByaXYsIHBpcGUsDQo+IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpID8NCj4gLQkJCQkg ICAgICZjaHZfZHBsbFswXS5kcGxsIDogJnZsdl9kcGxsWzBdLmRwbGwpKSB7DQo+IC0JCQlkcm1f ZXJyKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkJCSJGYWlsZWQgdG8gZm9yY2Ugb24gcGxsIGZvciBw aXBlICVjIVxuIiwNCj4gLQkJCQlwaXBlX25hbWUocGlwZSkpOw0KPiAtCQkJcmV0dXJuOw0KPiAt CQl9DQo+IC0JfQ0KPiAtDQo+IC0JLyoNCj4gLQkgKiBTaW1pbGFyIG1hZ2ljIGFzIGluIGludGVs X2RwX2VuYWJsZV9wb3J0KCkuDQo+IC0JICogV2UgX211c3RfIGRvIHRoaXMgcG9ydCBlbmFibGUg KyBkaXNhYmxlIHRyaWNrDQo+IC0JICogdG8gbWFrZSB0aGlzIHBvd2VyIHNlcXVlbmNlciBsb2Nr IG9udG8gdGhlIHBvcnQuDQo+IC0JICogT3RoZXJ3aXNlIGV2ZW4gVkREIGZvcmNlIGJpdCB3b24n dCB3b3JrLg0KPiAtCSAqLw0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+ b3V0cHV0X3JlZywgRFApOw0KPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgaW50 ZWxfZHAtPm91dHB1dF9yZWcpOw0KPiAtDQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGlu dGVsX2RwLT5vdXRwdXRfcmVnLCBEUCB8IERQX1BPUlRfRU4pOw0KPiAtCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOw0KPiAtDQo+IC0JaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCAmDQo+IH5EUF9QT1JU X0VOKTsNCj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRw dXRfcmVnKTsNCj4gLQ0KPiAtCWlmICghcGxsX2VuYWJsZWQpIHsNCj4gLQkJdmx2X2ZvcmNlX3Bs bF9vZmYoZGV2X3ByaXYsIHBpcGUpOw0KPiAtDQo+IC0JCWlmIChyZWxlYXNlX2NsX292ZXJyaWRl KQ0KPiAtCQkJY2h2X3BoeV9wb3dlcmdhdGVfY2goZGV2X3ByaXYsIHBoeSwgY2gsIGZhbHNlKTsN Cj4gLQl9DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBlbnVtIHBpcGUgdmx2X2ZpbmRfZnJlZV9wcHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiAtew0KPiAtCXN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyOw0KPiAtCXVuc2lnbmVkIGludCBwaXBlcyA9ICgxIDw8IFBJUEVf QSkgfCAoMSA8PCBQSVBFX0IpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBXZSBkb24ndCBoYXZlIHBv d2VyIHNlcXVlbmNlciBjdXJyZW50bHkuDQo+IC0JICogUGljayBvbmUgdGhhdCdzIG5vdCB1c2Vk IGJ5IG90aGVyIHBvcnRzLg0KPiAtCSAqLw0KPiAtCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJp di0+ZHJtLCBlbmNvZGVyKSB7DQo+IC0JCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNf dG9faW50ZWxfZHAoZW5jb2Rlcik7DQo+IC0NCj4gLQkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5U RUxfT1VUUFVUX0VEUCkgew0KPiAtCQkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+IC0J CQkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJUEUNCj4gJiYNCj4gLQkJ CQkgICAgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9DQo+IC0JCQkJICAgIGludGVsX2RwLT5wcHNf cGlwZSk7DQo+IC0NCj4gLQkJCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJRF9QSVBF KQ0KPiAtCQkJCXBpcGVzICY9IH4oMSA8PCBpbnRlbF9kcC0+cHBzX3BpcGUpOw0KPiAtCQl9IGVs c2Ugew0KPiAtCQkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+IC0JCQkJICAgIGludGVs X2RwLT5wcHNfcGlwZSAhPSBJTlZBTElEX1BJUEUpOw0KPiAtDQo+IC0JCQlpZiAoaW50ZWxfZHAt PmFjdGl2ZV9waXBlICE9IElOVkFMSURfUElQRSkNCj4gLQkJCQlwaXBlcyAmPSB+KDEgPDwgaW50 ZWxfZHAtPmFjdGl2ZV9waXBlKTsNCj4gLQkJfQ0KPiAtCX0NCj4gLQ0KPiAtCWlmIChwaXBlcyA9 PSAwKQ0KPiAtCQlyZXR1cm4gSU5WQUxJRF9QSVBFOw0KPiAtDQo+IC0JcmV0dXJuIGZmcyhwaXBl cykgLSAxOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgZW51bSBwaXBlDQo+IC12bHZfcG93ZXJfc2Vx dWVuY2VyX3BpcGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gLXsNCj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gLQlz dHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVs X2RwKTsNCj4gLQllbnVtIHBpcGUgcGlwZTsNCj4gLQ0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldl9wcml2LT5wcHNfbXV0ZXgpOw0KPiAtDQo+IC0JLyogV2Ugc2hvdWxkIG5ldmVyIGxhbmQg aGVyZSB3aXRoIHJlZ3VsYXIgRFAgcG9ydHMgKi8NCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYt PmRybSwgIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpOw0KPiAtDQo+IC0JZHJtX1dBUk5fT04o JmRldl9wcml2LT5kcm0sIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPQ0KPiBJTlZBTElEX1BJUEUg JiYNCj4gLQkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBpbnRlbF9kcC0+cHBzX3BpcGUp Ow0KPiAtDQo+IC0JaWYgKGludGVsX2RwLT5wcHNfcGlwZSAhPSBJTlZBTElEX1BJUEUpDQo+IC0J CXJldHVybiBpbnRlbF9kcC0+cHBzX3BpcGU7DQo+IC0NCj4gLQlwaXBlID0gdmx2X2ZpbmRfZnJl ZV9wcHMoZGV2X3ByaXYpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBEaWRuJ3QgZmluZCBvbmUuIFRo aXMgc2hvdWxkIG5vdCBoYXBwZW4gc2luY2UgdGhlcmUNCj4gLQkgKiBhcmUgdHdvIHBvd2VyIHNl cXVlbmNlcnMgYW5kIHVwIHRvIHR3byBlRFAgcG9ydHMuDQo+IC0JICovDQo+IC0JaWYgKGRybV9X QVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBwaXBlID09IElOVkFMSURfUElQRSkpDQo+IC0JCXBpcGUg PSBQSVBFX0E7DQo+IC0NCj4gLQl2bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2VyKGRldl9wcml2LCBw aXBlKTsNCj4gLQlpbnRlbF9kcC0+cHBzX3BpcGUgPSBwaXBlOw0KPiAtDQo+IC0JZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sDQo+IC0JCSAgICAicGlja2VkIHBpcGUgJWMgcG93ZXIgc2VxdWVu Y2VyIGZvcg0KPiBbRU5DT0RFUjolZDolc11cbiIsDQo+IC0JCSAgICBwaXBlX25hbWUoaW50ZWxf ZHAtPnBwc19waXBlKSwNCj4gLQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwNCj4g LQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7DQo+IC0NCj4gLQkvKiBpbml0IHBvd2Vy IHNlcXVlbmNlciBvbiB0aGlzIHBpcGUgYW5kIHBvcnQgKi8NCj4gLQlpbnRlbF9kcF9pbml0X3Bh bmVsX3Bvd2VyX3NlcXVlbmNlcihpbnRlbF9kcCk7DQo+IC0JaW50ZWxfZHBfaW5pdF9wYW5lbF9w b3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCB0cnVlKTsNCj4gLQ0KPiAtCS8qDQo+ IC0JICogRXZlbiB2ZGQgZm9yY2UgZG9lc24ndCB3b3JrIHVudGlsIHdlJ3ZlIG1hZGUNCj4gLQkg KiB0aGUgcG93ZXIgc2VxdWVuY2VyIGxvY2sgaW4gb24gdGhlIHBvcnQuDQo+IC0JICovDQo+IC0J dmx2X3Bvd2VyX3NlcXVlbmNlcl9raWNrKGludGVsX2RwKTsNCj4gLQ0KPiAtCXJldHVybiBpbnRl bF9kcC0+cHBzX3BpcGU7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQNCj4gLWJ4dF9wb3dlcl9z ZXF1ZW5jZXJfaWR4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+IC0J aW50IGJhY2tsaWdodF9jb250cm9sbGVyID0gZGV2X3ByaXYtPnZidC5iYWNrbGlnaHQuY29udHJv bGxlcjsNCj4gLQ0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgp Ow0KPiAtDQo+IC0JLyogV2Ugc2hvdWxkIG5ldmVyIGxhbmQgaGVyZSB3aXRoIHJlZ3VsYXIgRFAg cG9ydHMgKi8NCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIWludGVsX2RwX2lzX2Vk cChpbnRlbF9kcCkpOw0KPiAtDQo+IC0JaWYgKCFpbnRlbF9kcC0+cHBzX3Jlc2V0KQ0KPiAtCQly ZXR1cm4gYmFja2xpZ2h0X2NvbnRyb2xsZXI7DQo+IC0NCj4gLQlpbnRlbF9kcC0+cHBzX3Jlc2V0 ID0gZmFsc2U7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIE9ubHkgdGhlIEhXIG5lZWRzIHRvIGJlIHJl cHJvZ3JhbW1lZCwgdGhlIFNXIHN0YXRlIGlzIGZpeGVkDQo+IGFuZA0KPiAtCSAqIGhhcyBiZWVu IHNldHVwIGR1cmluZyBjb25uZWN0b3IgaW5pdC4NCj4gLQkgKi8NCj4gLQlpbnRlbF9kcF9pbml0 X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoaW50ZWxfZHAsIGZhbHNlKTsNCj4gLQ0K PiAtCXJldHVybiBiYWNrbGlnaHRfY29udHJvbGxlcjsNCj4gLX0NCj4gLQ0KPiAtdHlwZWRlZiBi b29sICgqdmx2X3BpcGVfY2hlY2spKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwN Cj4gLQkJCSAgICAgICBlbnVtIHBpcGUgcGlwZSk7DQo+IC0NCj4gLXN0YXRpYyBib29sIHZsdl9w aXBlX2hhc19wcF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+IC0JCQkg ICAgICAgZW51bSBwaXBlIHBpcGUpDQo+IC17DQo+IC0JcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIFBQX1NUQVRVUyhwaXBlKSkgJiBQUF9PTjsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGJv b2wgdmx2X3BpcGVfaGFzX3ZkZF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs DQo+IC0JCQkJZW51bSBwaXBlIHBpcGUpDQo+IC17DQo+IC0JcmV0dXJuIGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIFBQX0NPTlRST0wocGlwZSkpICYNCj4gRURQX0ZPUkNFX1ZERDsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIGJvb2wgdmx2X3BpcGVfYW55KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwNCj4gLQkJCSBlbnVtIHBpcGUgcGlwZSkNCj4gLXsNCj4gLQlyZXR1cm4gdHJ1ZTsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIGVudW0gcGlwZQ0KPiAtdmx2X2luaXRpYWxfcHBzX3BpcGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiAtCQkgICAgIGVudW0gcG9ydCBw b3J0LA0KPiAtCQkgICAgIHZsdl9waXBlX2NoZWNrIHBpcGVfY2hlY2spDQo+IC17DQo+IC0JZW51 bSBwaXBlIHBpcGU7DQo+IC0NCj4gLQlmb3IgKHBpcGUgPSBQSVBFX0E7IHBpcGUgPD0gUElQRV9C OyBwaXBlKyspIHsNCj4gLQkJdTMyIHBvcnRfc2VsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwN Cj4gUFBfT05fREVMQVlTKHBpcGUpKSAmDQo+IC0JCQlQQU5FTF9QT1JUX1NFTEVDVF9NQVNLOw0K PiAtDQo+IC0JCWlmIChwb3J0X3NlbCAhPSBQQU5FTF9QT1JUX1NFTEVDVF9WTFYocG9ydCkpDQo+ IC0JCQljb250aW51ZTsNCj4gLQ0KPiAtCQlpZiAoIXBpcGVfY2hlY2soZGV2X3ByaXYsIHBpcGUp KQ0KPiAtCQkJY29udGludWU7DQo+IC0NCj4gLQkJcmV0dXJuIHBpcGU7DQo+IC0JfQ0KPiAtDQo+ IC0JcmV0dXJuIElOVkFMSURfUElQRTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQNCj4gLXZs dl9pbml0aWFsX3Bvd2VyX3NlcXVlbmNlcl9zZXR1cChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOw0KPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0g ZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOw0KPiAtCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQt PmJhc2UucG9ydDsNCj4gLQ0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNf bXV0ZXgpOw0KPiAtDQo+IC0JLyogdHJ5IHRvIGZpbmQgYSBwaXBlIHdpdGggdGhpcyBwb3J0IHNl bGVjdGVkICovDQo+IC0JLyogZmlyc3QgcGljayBvbmUgd2hlcmUgdGhlIHBhbmVsIGlzIG9uICov DQo+IC0JaW50ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRpYWxfcHBzX3BpcGUoZGV2X3ByaXYs IHBvcnQsDQo+IC0JCQkJCQkgIHZsdl9waXBlX2hhc19wcF9vbik7DQo+IC0JLyogZGlkbid0IGZp bmQgb25lPyBwaWNrIG9uZSB3aGVyZSB2ZGQgaXMgb24gKi8NCj4gLQlpZiAoaW50ZWxfZHAtPnBw c19waXBlID09IElOVkFMSURfUElQRSkNCj4gLQkJaW50ZWxfZHAtPnBwc19waXBlID0gdmx2X2lu aXRpYWxfcHBzX3BpcGUoZGV2X3ByaXYsIHBvcnQsDQo+IC0NCj4gdmx2X3BpcGVfaGFzX3ZkZF9v bik7DQo+IC0JLyogZGlkbid0IGZpbmQgb25lPyBwaWNrIG9uZSB3aXRoIGp1c3QgdGhlIGNvcnJl Y3QgcG9ydCAqLw0KPiAtCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgPT0gSU5WQUxJRF9QSVBFKQ0K PiAtCQlpbnRlbF9kcC0+cHBzX3BpcGUgPSB2bHZfaW5pdGlhbF9wcHNfcGlwZShkZXZfcHJpdiwg cG9ydCwNCj4gLQkJCQkJCQkgIHZsdl9waXBlX2FueSk7DQo+IC0NCj4gLQkvKiBkaWRuJ3QgZmlu ZCBvbmU/IGp1c3QgbGV0IHZsdl9wb3dlcl9zZXF1ZW5jZXJfcGlwZSgpIHBpY2sgb25lDQo+IHdo ZW4gbmVlZGVkICovDQo+IC0JaWYgKGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUp IHsNCj4gLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+IC0JCQkgICAgIm5vIGluaXRp YWwgcG93ZXIgc2VxdWVuY2VyIGZvcg0KPiBbRU5DT0RFUjolZDolc11cbiIsDQo+IC0JCQkgICAg ZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLA0KPiAtCQkJICAgIGRpZ19wb3J0LT5iYXNlLmJh c2UubmFtZSk7DQo+IC0JCXJldHVybjsNCj4gLQl9DQo+IC0NCj4gLQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwNCj4gLQkJICAgICJpbml0aWFsIHBvd2VyIHNlcXVlbmNlciBmb3IgW0VOQ09E RVI6JWQ6JXNdOiBwaXBlDQo+ICVjXG4iLA0KPiAtCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5i YXNlLmlkLA0KPiAtCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lLA0KPiAtCQkgICAgcGlw ZV9uYW1lKGludGVsX2RwLT5wcHNfcGlwZSkpOw0KPiAtDQo+IC0JaW50ZWxfZHBfaW5pdF9wYW5l bF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOw0KPiAtCWludGVsX2RwX2luaXRfcGFuZWxfcG93 ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhpbnRlbF9kcCwgZmFsc2UpOw0KPiAtfQ0KPiAtDQo+IC12 b2lkIGludGVsX3Bvd2VyX3NlcXVlbmNlcl9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpDQo+IC17DQo+IC0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7DQo+IC0N Cj4gLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+IC0JCQkhKElTX1ZBTExFWVZJ RVcoZGV2X3ByaXYpIHx8DQo+IC0JCQkgIElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8DQo+IC0J CQkgIElTX0dFTjlfTFAoZGV2X3ByaXYpKSkpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCS8qDQo+ IC0JICogV2UgY2FuJ3QgZ3JhYiBwcHNfbXV0ZXggaGVyZSBkdWUgdG8gZGVhZGxvY2sgd2l0aA0K PiBwb3dlcl9kb21haW4NCj4gLQkgKiBtdXRleCB3aGVuIHBvd2VyX2RvbWFpbiBmdW5jdGlvbnMg YXJlIGNhbGxlZCB3aGlsZSBob2xkaW5nDQo+IHBwc19tdXRleC4NCj4gLQkgKiBUaGF0IGFsc28g bWVhbnMgdGhhdCBpbiBvcmRlciB0byB1c2UgcHBzX3BpcGUgdGhlIGNvZGUgbmVlZHMgdG8NCj4g LQkgKiBob2xkIGJvdGggYSBwb3dlciBkb21haW4gcmVmZXJlbmNlIGFuZCBwcHNfbXV0ZXgsIGFu ZCB0aGUNCj4gcG93ZXIgZG9tYWluDQo+IC0JICogcmVmZXJlbmNlIGdldC9wdXQgbXVzdCBiZSBk b25lIHdoaWxlIF9ub3RfIGhvbGRpbmcgcHBzX211dGV4Lg0KPiAtCSAqIHBwc197bG9jayx1bmxv Y2t9KCkgZG8gdGhlc2Ugc3RlcHMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIsIHNvIG9uZQ0KPiAtCSAq IHNob3VsZCB1c2UgdGhlbSBhbHdheXMuDQo+IC0JICovDQo+IC0NCj4gLQlmb3JfZWFjaF9pbnRl bF9kcCgmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikgew0KPiAtCQlzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOw0KPiAtDQo+IC0JCWRybV9XQVJOX09O KCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZB TElEX1BJUEUpOw0KPiAtDQo+IC0JCWlmIChlbmNvZGVyLT50eXBlICE9IElOVEVMX09VVFBVVF9F RFApDQo+IC0JCQljb250aW51ZTsNCj4gLQ0KPiAtCQlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikp DQo+IC0JCQlpbnRlbF9kcC0+cHBzX3Jlc2V0ID0gdHJ1ZTsNCj4gLQkJZWxzZQ0KPiAtCQkJaW50 ZWxfZHAtPnBwc19waXBlID0gSU5WQUxJRF9QSVBFOw0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtc3Ry dWN0IHBwc19yZWdpc3RlcnMgew0KPiAtCWk5MTVfcmVnX3QgcHBfY3RybDsNCj4gLQlpOTE1X3Jl Z190IHBwX3N0YXQ7DQo+IC0JaTkxNV9yZWdfdCBwcF9vbjsNCj4gLQlpOTE1X3JlZ190IHBwX29m ZjsNCj4gLQlpOTE1X3JlZ190IHBwX2RpdjsNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGlu dGVsX3Bwc19nZXRfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsDQo+IC0JCQkJ ICAgIHN0cnVjdCBwcHNfcmVnaXN0ZXJzICpyZWdzKQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiAtCWludCBwcHNf aWR4ID0gMDsNCj4gLQ0KPiAtCW1lbXNldChyZWdzLCAwLCBzaXplb2YoKnJlZ3MpKTsNCj4gLQ0K PiAtCWlmIChJU19HRU45X0xQKGRldl9wcml2KSkNCj4gLQkJcHBzX2lkeCA9IGJ4dF9wb3dlcl9z ZXF1ZW5jZXJfaWR4KGludGVsX2RwKTsNCj4gLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9w cml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkNCj4gLQkJcHBzX2lkeCA9IHZsdl9wb3dl cl9zZXF1ZW5jZXJfcGlwZShpbnRlbF9kcCk7DQo+IC0NCj4gLQlyZWdzLT5wcF9jdHJsID0gUFBf Q09OVFJPTChwcHNfaWR4KTsNCj4gLQlyZWdzLT5wcF9zdGF0ID0gUFBfU1RBVFVTKHBwc19pZHgp Ow0KPiAtCXJlZ3MtPnBwX29uID0gUFBfT05fREVMQVlTKHBwc19pZHgpOw0KPiAtCXJlZ3MtPnBw X29mZiA9IFBQX09GRl9ERUxBWVMocHBzX2lkeCk7DQo+IC0NCj4gLQkvKiBDeWNsZSBkZWxheSBt b3ZlZCBmcm9tIFBQX0RJVklTT1IgdG8gUFBfQ09OVFJPTCAqLw0KPiAtCWlmIChJU19HRU45X0xQ KGRldl9wcml2KSB8fCBJTlRFTF9QQ0hfVFlQRShkZXZfcHJpdikgPj0NCj4gUENIX0NOUCkNCj4g LQkJcmVncy0+cHBfZGl2ID0gSU5WQUxJRF9NTUlPX1JFRzsNCj4gLQllbHNlDQo+IC0JCXJlZ3Mt PnBwX2RpdiA9IFBQX0RJVklTT1IocHBzX2lkeCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpOTE1 X3JlZ190DQo+IC1fcHBfY3RybF9yZWcoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gLXsN Cj4gLQlzdHJ1Y3QgcHBzX3JlZ2lzdGVycyByZWdzOw0KPiAtDQo+IC0JaW50ZWxfcHBzX2dldF9y ZWdpc3RlcnMoaW50ZWxfZHAsICZyZWdzKTsNCj4gLQ0KPiAtCXJldHVybiByZWdzLnBwX2N0cmw7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpOTE1X3JlZ190DQo+IC1fcHBfc3RhdF9yZWcoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkNCj4gLXsNCj4gLQlzdHJ1Y3QgcHBzX3JlZ2lzdGVycyByZWdz Ow0KPiAtDQo+IC0JaW50ZWxfcHBzX2dldF9yZWdpc3RlcnMoaW50ZWxfZHAsICZyZWdzKTsNCj4g LQ0KPiAtCXJldHVybiByZWdzLnBwX3N0YXQ7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBib29sIGVk cF9oYXZlX3BhbmVsX3Bvd2VyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7 DQo+IC0NCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsNCj4g LQ0KPiAtCWlmICgoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikpICYmDQo+IC0JICAgIGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpDQo+ IC0JCXJldHVybiBmYWxzZTsNCj4gLQ0KPiAtCXJldHVybiAoaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgX3BwX3N0YXRfcmVnKGludGVsX2RwKSkgJiBQUF9PTikNCj4gIT0gMDsNCj4gLX0NCj4gLQ0K PiAtc3RhdGljIGJvb2wgZWRwX2hhdmVfcGFuZWxfdmRkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApDQo+IC17DQo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9f aTkxNShpbnRlbF9kcCk7DQo+IC0NCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ cHBzX211dGV4KTsNCj4gLQ0KPiAtCWlmICgoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpICYmDQo+IC0JICAgIGludGVsX2RwLT5wcHNfcGlwZSA9PSBJ TlZBTElEX1BJUEUpDQo+IC0JCXJldHVybiBmYWxzZTsNCj4gLQ0KPiAtCXJldHVybiBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBfcHBfY3RybF9yZWcoaW50ZWxfZHApKSAmDQo+IEVEUF9GT1JDRV9W REQ7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkDQo+IC1pbnRlbF9kcF9jaGVja19lZHAoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gLQ0KPiAtCWlmICghaW50ZWxf ZHBfaXNfZWRwKGludGVsX2RwKSkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JaWYgKCFlZHBfaGF2 ZV9wYW5lbF9wb3dlcihpbnRlbF9kcCkgJiYNCj4gIWVkcF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9k cCkpIHsNCj4gLQkJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sIDEsDQo+IC0JCQkgImVEUCBwb3dl cmVkIG9mZiB3aGlsZSBhdHRlbXB0aW5nIGF1eCBjaGFubmVsDQo+IGNvbW11bmljYXRpb24uXG4i KTsNCj4gLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJTdGF0dXMgMHglMDh4IENvbnRy b2wNCj4gMHglMDh4XG4iLA0KPiAtCQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9z dGF0X3JlZyhpbnRlbF9kcCkpLA0KPiAtCQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9w cF9jdHJsX3JlZyhpbnRlbF9kcCkpKTsNCj4gLQl9DQo+IC19DQo+IC0NCj4gIHN0YXRpYyB1MzIN Cj4gIGludGVsX2RwX2F1eF93YWl0X2RvbmUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4g IHsNCj4gQEAgLTI5MDcsNDkyICsyNDYyLDY3IEBAIHN0YXRpYyB2b2lkIGludGVsX2RwX3ByZXBh cmUoc3RydWN0DQo+IGludGVsX2VuY29kZXIgKmVuY29kZXIsDQo+ICAJICoNCj4gIAkgKiBJQlgg UENIIGFuZCBDUFUgYXJlIHRoZSBzYW1lIGZvciBhbG1vc3QgZXZlcnl0aGluZywNCj4gIAkgKiBl eGNlcHQgdGhhdCB0aGUgQ1BVIERQIFBMTCBpcyBjb25maWd1cmVkIGluIHRoaXMNCj4gLQkgKiBy ZWdpc3Rlcg0KPiAtCSAqDQo+IC0JICogQ1BUIFBDSCBpcyBxdWl0ZSBkaWZmZXJlbnQsIGhhdmlu ZyBtYW55IGJpdHMgbW92ZWQNCj4gLQkgKiB0byB0aGUgVFJBTlNfRFBfQ1RMIHJlZ2lzdGVyIGlu c3RlYWQuIFRoYXQNCj4gLQkgKiBjb25maWd1cmF0aW9uIGhhcHBlbnMgKG9kZGx5KSBpbiBpbGtf cGNoX2VuYWJsZQ0KPiAtCSAqLw0KPiAtDQo+IC0JLyogUHJlc2VydmUgdGhlIEJJT1MtY29tcHV0 ZWQgZGV0ZWN0ZWQgYml0LiBUaGlzIGlzDQo+IC0JICogc3VwcG9zZWQgdG8gYmUgcmVhZC1vbmx5 Lg0KPiAtCSAqLw0KPiAtCWludGVsX2RwLT5EUCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIGlu dGVsX2RwLT5vdXRwdXRfcmVnKSAmDQo+IERQX0RFVEVDVEVEOw0KPiAtDQo+IC0JLyogSGFuZGxl IERQIGJpdHMgaW4gY29tbW9uIGJldHdlZW4gYWxsIHRocmVlIHJlZ2lzdGVyIGZvcm1hdHMgKi8N Cj4gLQlpbnRlbF9kcC0+RFAgfD0gRFBfVk9MVEFHRV8wXzQgfCBEUF9QUkVfRU1QSEFTSVNfMDsN Cj4gLQlpbnRlbF9kcC0+RFAgfD0gRFBfUE9SVF9XSURUSChwaXBlX2NvbmZpZy0+bGFuZV9jb3Vu dCk7DQo+IC0NCj4gLQkvKiBTcGxpdCBvdXQgdGhlIElCWC9DUFUgdnMgQ1BUIHNldHRpbmdzICov DQo+IC0NCj4gLQlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSAmJiBwb3J0ID09IFBPUlRfQSkg ew0KPiAtCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykN Cj4gLQkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX0hTX0hJR0g7DQo+IC0JCWlmIChhZGp1c3Rl ZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQ0KPiAtCQkJaW50ZWxfZHAtPkRQ IHw9IERQX1NZTkNfVlNfSElHSDsNCj4gLQkJaW50ZWxfZHAtPkRQIHw9IERQX0xJTktfVFJBSU5f T0ZGX0NQVDsNCj4gLQ0KPiAtCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9k cC0+ZHBjZCkpDQo+IC0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5IQU5DRURfRlJBTUlORzsNCj4g LQ0KPiAtCQlpbnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUxfSVZCKGNydGMtPnBpcGUpOw0KPiAt CX0gZWxzZSBpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpICYmIHBvcnQgIT0gUE9SVF9BKSB7DQo+ IC0JCXUzMiB0cmFuc19kcDsNCj4gLQ0KPiAtCQlpbnRlbF9kcC0+RFAgfD0gRFBfTElOS19UUkFJ Tl9PRkZfQ1BUOw0KPiAtDQo+IC0JCXRyYW5zX2RwID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg VFJBTlNfRFBfQ1RMKGNydGMtDQo+ID5waXBlKSk7DQo+IC0JCWlmIChkcm1fZHBfZW5oYW5jZWRf ZnJhbWVfY2FwKGludGVsX2RwLT5kcGNkKSkNCj4gLQkJCXRyYW5zX2RwIHw9IFRSQU5TX0RQX0VO SF9GUkFNSU5HOw0KPiAtCQllbHNlDQo+IC0JCQl0cmFuc19kcCAmPSB+VFJBTlNfRFBfRU5IX0ZS QU1JTkc7DQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBUUkFOU19EUF9DVEwoY3J0Yy0+ cGlwZSksDQo+IHRyYW5zX2RwKTsNCj4gLQl9IGVsc2Ugew0KPiAtCQlpZiAoSVNfRzRYKGRldl9w cml2KSAmJiBwaXBlX2NvbmZpZy0+bGltaXRlZF9jb2xvcl9yYW5nZSkNCj4gLQkJCWludGVsX2Rw LT5EUCB8PSBEUF9DT0xPUl9SQU5HRV8xNl8yMzU7DQo+IC0NCj4gLQkJaWYgKGFkanVzdGVkX21v ZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpDQo+IC0JCQlpbnRlbF9kcC0+RFAgfD0g RFBfU1lOQ19IU19ISUdIOw0KPiAtCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9E RV9GTEFHX1BWU1lOQykNCj4gLQkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX1ZTX0hJR0g7DQo+ IC0JCWludGVsX2RwLT5EUCB8PSBEUF9MSU5LX1RSQUlOX09GRjsNCj4gLQ0KPiAtCQlpZiAoZHJt X2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkpDQo+IC0JCQlpbnRlbF9kcC0+ RFAgfD0gRFBfRU5IQU5DRURfRlJBTUlORzsNCj4gLQ0KPiAtCQlpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpDQo+IC0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUxfQ0hWKGNydGMtPnBp cGUpOw0KPiAtCQllbHNlDQo+IC0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUwoY3J0Yy0+ cGlwZSk7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC0jZGVmaW5lIElETEVfT05fTUFTSwkJKFBQX09O IHwgUFBfU0VRVUVOQ0VfTUFTSyB8IDANCj4gfCBQUF9TRVFVRU5DRV9TVEFURV9NQVNLKQ0KPiAt I2RlZmluZSBJRExFX09OX1ZBTFVFICAgCShQUF9PTiB8IFBQX1NFUVVFTkNFX05PTkUgfCAwDQo+ IHwgUFBfU0VRVUVOQ0VfU1RBVEVfT05fSURMRSkNCj4gLQ0KPiAtI2RlZmluZSBJRExFX09GRl9N QVNLCQkoUFBfT04gfCBQUF9TRVFVRU5DRV9NQVNLIHwgMA0KPiB8IDApDQo+IC0jZGVmaW5lIElE TEVfT0ZGX1ZBTFVFCQkoMCAgICAgfCBQUF9TRVFVRU5DRV9OT05FIHwgMA0KPiB8IDApDQo+IC0N Cj4gLSNkZWZpbmUgSURMRV9DWUNMRV9NQVNLCQkoUFBfT04gfCBQUF9TRVFVRU5DRV9NQVNLIHwN Cj4gUFBfQ1lDTEVfREVMQVlfQUNUSVZFIHwgUFBfU0VRVUVOQ0VfU1RBVEVfTUFTSykNCj4gLSNk ZWZpbmUgSURMRV9DWUNMRV9WQUxVRQkoMCAgICAgfCBQUF9TRVFVRU5DRV9OT05FIHwgMA0KPiB8 IFBQX1NFUVVFTkNFX1NUQVRFX09GRl9JRExFKQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBpbnRlbF9w cHNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOw0KPiAtDQo+IC1zdGF0 aWMgdm9pZCB3YWl0X3BhbmVsX3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiAt CQkJCSAgICAgICB1MzIgbWFzaywNCj4gLQkJCQkgICAgICAgdTMyIHZhbHVlKQ0KPiAtew0KPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHAp Ow0KPiAtCWk5MTVfcmVnX3QgcHBfc3RhdF9yZWcsIHBwX2N0cmxfcmVnOw0KPiAtDQo+IC0JbG9j a2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7DQo+IC0NCj4gLQlpbnRlbF9w cHNfdmVyaWZ5X3N0YXRlKGludGVsX2RwKTsNCj4gLQ0KPiAtCXBwX3N0YXRfcmVnID0gX3BwX3N0 YXRfcmVnKGludGVsX2RwKTsNCj4gLQlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9k cCk7DQo+IC0NCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4gLQkJICAgICJtYXNr ICUwOHggdmFsdWUgJTA4eCBzdGF0dXMgJTA4eCBjb250cm9sICUwOHhcbiIsDQo+IC0JCSAgICBt YXNrLCB2YWx1ZSwNCj4gLQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVn KSwNCj4gLQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7DQo+IC0N Cj4gLQlpZiAoaW50ZWxfZGVfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIHBwX3N0YXRfcmVn LA0KPiAtCQkJCSAgICAgICBtYXNrLCB2YWx1ZSwgNTAwMCkpDQo+IC0JCWRybV9lcnIoJmRldl9w cml2LT5kcm0sDQo+IC0JCQkiUGFuZWwgc3RhdHVzIHRpbWVvdXQ6IHN0YXR1cyAlMDh4IGNvbnRy b2wgJTA4eFxuIiwNCj4gLQkJCWludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVnKSwN Cj4gLQkJCWludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7DQo+IC0NCj4gLQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIldhaXQgY29tcGxldGVcbiIpOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgdm9pZCB3YWl0X3BhbmVsX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp DQo+IC17DQo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGlu dGVsX2RwKTsNCj4gLQ0KPiAtCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5l bCBwb3dlciBvblxuIik7DQo+IC0Jd2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxfZHAsIElETEVfT05f TUFTSywgSURMRV9PTl9WQUxVRSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHdhaXRfcGFu ZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gLQ0KPiAtCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5lbCBwb3dlciBvZmYgdGltZVxuIik7DQo+ IC0Jd2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxfZHAsIElETEVfT0ZGX01BU0ssIElETEVfT0ZGX1ZB TFVFKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgd2FpdF9wYW5lbF9wb3dlcl9jeWNsZShz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+IC0Ja3RpbWVfdCBwYW5lbF9wb3dl cl9vbl90aW1lOw0KPiAtCXM2NCBwYW5lbF9wb3dlcl9vZmZfZHVyYXRpb247DQo+IC0NCj4gLQlk cm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiV2FpdCBmb3IgcGFuZWwgcG93ZXIgY3ljbGVcbiIpOw0K PiAtDQo+IC0JLyogdGFrZSB0aGUgZGlmZmVyZW5jZSBvZiBjdXJycmVudCB0aW1lIGFuZCBwYW5l bCBwb3dlciBvZmYgdGltZQ0KPiAtCSAqIGFuZCB0aGVuIG1ha2UgcGFuZWwgd2FpdCBmb3IgdDEx X3QxMiBpZiBuZWVkZWQuICovDQo+IC0JcGFuZWxfcG93ZXJfb25fdGltZSA9IGt0aW1lX2dldF9i b290dGltZSgpOw0KPiAtCXBhbmVsX3Bvd2VyX29mZl9kdXJhdGlvbiA9DQo+IGt0aW1lX21zX2Rl bHRhKHBhbmVsX3Bvd2VyX29uX3RpbWUsIGludGVsX2RwLT5wYW5lbF9wb3dlcl9vZmZfdGltZSk7 DQo+IC0NCj4gLQkvKiBXaGVuIHdlIGRpc2FibGUgdGhlIFZERCBvdmVycmlkZSBiaXQgbGFzdCB3 ZSBoYXZlIHRvIGRvIHRoZQ0KPiBtYW51YWwNCj4gLQkgKiB3YWl0LiAqLw0KPiAtCWlmIChwYW5l bF9wb3dlcl9vZmZfZHVyYXRpb24gPCAoczY0KWludGVsX2RwLQ0KPiA+cGFuZWxfcG93ZXJfY3lj bGVfZGVsYXkpDQo+IC0JCXdhaXRfcmVtYWluaW5nX21zX2Zyb21famlmZmllcyhqaWZmaWVzLA0K PiAtCQkJCSAgICAgICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkgLQ0KPiBwYW5l bF9wb3dlcl9vZmZfZHVyYXRpb24pOw0KPiAtDQo+IC0Jd2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxf ZHAsIElETEVfQ1lDTEVfTUFTSywNCj4gSURMRV9DWUNMRV9WQUxVRSk7DQo+IC19DQo+IC0NCj4g LXN0YXRpYyB2b2lkIHdhaXRfYmFja2xpZ2h0X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp DQo+IC17DQo+IC0Jd2FpdF9yZW1haW5pbmdfbXNfZnJvbV9qaWZmaWVzKGludGVsX2RwLT5sYXN0 X3Bvd2VyX29uLA0KPiAtCQkJCSAgICAgICBpbnRlbF9kcC0+YmFja2xpZ2h0X29uX2RlbGF5KTsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZWRwX3dhaXRfYmFja2xpZ2h0X29mZihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQ0KPiAtew0KPiAtCXdhaXRfcmVtYWluaW5nX21zX2Zyb21famlm ZmllcyhpbnRlbF9kcC0+bGFzdF9iYWNrbGlnaHRfb2ZmLA0KPiAtCQkJCSAgICAgICBpbnRlbF9k cC0+YmFja2xpZ2h0X29mZl9kZWxheSk7DQo+IC19DQo+IC0NCj4gLS8qIFJlYWQgdGhlIGN1cnJl bnQgcHBfY29udHJvbCB2YWx1ZSwgdW5sb2NraW5nIHRoZSByZWdpc3RlciBpZiBpdA0KPiAtICog aXMgbG9ja2VkDQo+IC0gKi8NCj4gLQ0KPiAtc3RhdGljICB1MzIgaWxrX2dldF9wcF9jb250cm9s KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+IC0JdTMyIGNvbnRyb2w7 DQo+IC0NCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsNCj4g LQ0KPiAtCWNvbnRyb2wgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfY3RybF9yZWcoaW50 ZWxfZHApKTsNCj4gLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sICFIQVNfRERJKGRl dl9wcml2KSAmJg0KPiAtCQkJKGNvbnRyb2wgJiBQQU5FTF9VTkxPQ0tfTUFTSykgIT0NCj4gUEFO RUxfVU5MT0NLX1JFR1MpKSB7DQo+IC0JCWNvbnRyb2wgJj0gflBBTkVMX1VOTE9DS19NQVNLOw0K PiAtCQljb250cm9sIHw9IFBBTkVMX1VOTE9DS19SRUdTOw0KPiAtCX0NCj4gLQlyZXR1cm4gY29u dHJvbDsNCj4gLX0NCj4gLQ0KPiAtLyoNCj4gLSAqIE11c3QgYmUgcGFpcmVkIHdpdGggZWRwX3Bh bmVsX3ZkZF9vZmYoKS4NCj4gLSAqIE11c3QgaG9sZCBwcHNfbXV0ZXggYXJvdW5kIHRoZSB3aG9s ZSBvbi9vZmYgc2VxdWVuY2UuDQo+IC0gKiBDYW4gYmUgbmVzdGVkIHdpdGggaW50ZWxfZWRwX3Bh bmVsX3ZkZF97b24sb2ZmfSgpIGNhbGxzLg0KPiAtICovDQo+IC1zdGF0aWMgYm9vbCBlZHBfcGFu ZWxfdmRkX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+IC0Jc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9k cCk7DQo+IC0JdTMyIHBwOw0KPiAtCWk5MTVfcmVnX3QgcHBfc3RhdF9yZWcsIHBwX2N0cmxfcmVn Ow0KPiAtCWJvb2wgbmVlZF90b19kaXNhYmxlID0gIWludGVsX2RwLT53YW50X3BhbmVsX3ZkZDsN Cj4gLQ0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOw0KPiAt DQo+IC0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0KPiAtCQlyZXR1cm4gZmFsc2U7 DQo+IC0NCj4gLQljYW5jZWxfZGVsYXllZF93b3JrKCZpbnRlbF9kcC0+cGFuZWxfdmRkX3dvcmsp Ow0KPiAtCWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCA9IHRydWU7DQo+IC0NCj4gLQlpZiAoZWRw X2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkNCj4gLQkJcmV0dXJuIG5lZWRfdG9fZGlzYWJsZTsN Cj4gLQ0KPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+dmRkX3dha2Vy ZWYpOw0KPiAtCWludGVsX2RwLT52ZGRfd2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0 KGRldl9wcml2LA0KPiAtDQo+IAlpbnRlbF9hdXhfcG93ZXJfZG9tYWluKGRpZ19wb3J0KSk7DQo+ IC0NCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlR1cm5pbmcgW0VOQ09ERVI6JWQ6 JXNdIFZERA0KPiBvblxuIiwNCj4gLQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwN Cj4gLQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7DQo+IC0NCj4gLQlpZiAoIWVkcF9o YXZlX3BhbmVsX3Bvd2VyKGludGVsX2RwKSkNCj4gLQkJd2FpdF9wYW5lbF9wb3dlcl9jeWNsZShp bnRlbF9kcCk7DQo+IC0NCj4gLQlwcCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7DQo+ IC0JcHAgfD0gRURQX0ZPUkNFX1ZERDsNCj4gLQ0KPiAtCXBwX3N0YXRfcmVnID0gX3BwX3N0YXRf cmVnKGludGVsX2RwKTsNCj4gLQlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7 DQo+IC0NCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsNCj4g LQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKTsNCj4gLQlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlBQX1NUQVRVUzogMHglMDh4DQo+IFBQX0NPTlRST0w6 IDB4JTA4eFxuIiwNCj4gLQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVn KSwNCj4gLQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7DQo+IC0J LyoNCj4gLQkgKiBJZiB0aGUgcGFuZWwgd2Fzbid0IG9uLCBkZWxheSBiZWZvcmUgYWNjZXNzaW5n IGF1eCBjaGFubmVsDQo+IC0JICovDQo+IC0JaWYgKCFlZHBfaGF2ZV9wYW5lbF9wb3dlcihpbnRl bF9kcCkpIHsNCj4gLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+IC0JCQkgICAgIltF TkNPREVSOiVkOiVzXSBwYW5lbCBwb3dlciB3YXNuJ3QNCj4gZW5hYmxlZFxuIiwNCj4gLQkJCSAg ICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsDQo+IC0JCQkgICAgZGlnX3BvcnQtPmJhc2Uu YmFzZS5uYW1lKTsNCj4gLQkJbXNsZWVwKGludGVsX2RwLT5wYW5lbF9wb3dlcl91cF9kZWxheSk7 DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIG5lZWRfdG9fZGlzYWJsZTsNCj4gLX0NCj4gLQ0KPiAt LyoNCj4gLSAqIE11c3QgYmUgcGFpcmVkIHdpdGggaW50ZWxfZWRwX3BhbmVsX3ZkZF9vZmYoKSBv cg0KPiAtICogaW50ZWxfZWRwX3BhbmVsX29mZigpLg0KPiAtICogTmVzdGVkIGNhbGxzIHRvIHRo ZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93ZWQgc2luY2UNCj4gLSAqIHdlIGRyb3AgdGhlIGxv Y2suIENhbGxlciBtdXN0IHVzZSBzb21lIGhpZ2hlciBsZXZlbA0KPiAtICogbG9ja2luZyB0byBw cmV2ZW50IG5lc3RlZCBjYWxscyBmcm9tIG90aGVyIHRocmVhZHMuDQo+IC0gKi8NCj4gLXZvaWQg aW50ZWxfZWRwX3BhbmVsX3ZkZF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiAtew0K PiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOw0KPiAtCWJvb2wgdmRkOw0KPiAtDQo+IC0JaWYg KCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQl2ZGQg PSBmYWxzZTsNCj4gLQl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKQ0KPiAtCQl2ZGQg PSBlZHBfcGFuZWxfdmRkX29uKGludGVsX2RwKTsNCj4gLQlJOTE1X1NUQVRFX1dBUk4oIXZkZCwg IltFTkNPREVSOiVkOiVzXSBWREQgYWxyZWFkeQ0KPiByZXF1ZXN0ZWQgb25cbiIsDQo+IC0JCQlk cF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5iYXNlLmlkLA0KPiAtCQkJZHBfdG9f ZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UubmFtZSk7DQo+IC19DQo+IC0NCj4gLXN0YXRp YyB2b2lkIGVkcF9wYW5lbF92ZGRfb2ZmX3N5bmMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkN Cj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1 KGludGVsX2RwKTsNCj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9DQo+ IC0JCWRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsNCj4gLQl1MzIgcHA7DQo+IC0JaTkxNV9yZWdf dCBwcF9zdGF0X3JlZywgcHBfY3RybF9yZWc7DQo+IC0NCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxk KCZkZXZfcHJpdi0+cHBzX211dGV4KTsNCj4gLQ0KPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ ZHJtLCBpbnRlbF9kcC0+d2FudF9wYW5lbF92ZGQpOw0KPiAtDQo+IC0JaWYgKCFlZHBfaGF2ZV9w YW5lbF92ZGQoaW50ZWxfZHApKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwgIlR1cm5pbmcgW0VOQ09ERVI6JWQ6JXNdIFZERA0KPiBvZmZcbiIsDQo+ IC0JCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsDQo+IC0JCSAgICBkaWdfcG9ydC0+ YmFzZS5iYXNlLm5hbWUpOw0KPiAtDQo+IC0JcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxf ZHApOw0KPiAtCXBwICY9IH5FRFBfRk9SQ0VfVkREOw0KPiAtDQo+IC0JcHBfY3RybF9yZWcgPSBf cHBfY3RybF9yZWcoaW50ZWxfZHApOw0KPiAtCXBwX3N0YXRfcmVnID0gX3BwX3N0YXRfcmVnKGlu dGVsX2RwKTsNCj4gLQ0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywg cHApOw0KPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOw0K PiAtDQo+IC0JLyogTWFrZSBzdXJlIHNlcXVlbmNlciBpcyBpZGxlIGJlZm9yZSBhbGxvd2luZyBz dWJzZXF1ZW50IGFjdGl2aXR5DQo+ICovDQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0s ICJQUF9TVEFUVVM6IDB4JTA4eA0KPiBQUF9DT05UUk9MOiAweCUwOHhcbiIsDQo+IC0JCSAgICBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9zdGF0X3JlZyksDQo+IC0JCSAgICBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZykpOw0KPiAtDQo+IC0JaWYgKChwcCAmIFBBTkVMX1BP V0VSX09OKSA9PSAwKQ0KPiAtCQlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUgPSBrdGlt ZV9nZXRfYm9vdHRpbWUoKTsNCj4gLQ0KPiAtCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9w cml2LA0KPiAtCQkJCWludGVsX2F1eF9wb3dlcl9kb21haW4oZGlnX3BvcnQpLA0KPiAtCQkJCWZl dGNoX2FuZF96ZXJvKCZpbnRlbF9kcC0+dmRkX3dha2VyZWYpKTsNCj4gLX0NCj4gLQ0KPiAtc3Rh dGljIHZvaWQgZWRwX3BhbmVsX3ZkZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqX193b3JrKQ0K PiAtew0KPiAtCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPQ0KPiAtCQljb250YWluZXJfb2Yo dG9fZGVsYXllZF93b3JrKF9fd29yayksDQo+IC0JCQkgICAgIHN0cnVjdCBpbnRlbF9kcCwgcGFu ZWxfdmRkX3dvcmspOw0KPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOw0KPiAtDQo+IC0Jd2l0 aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikgew0KPiAtCQlpZiAoIWludGVsX2RwLT53YW50 X3BhbmVsX3ZkZCkNCj4gLQkJCWVkcF9wYW5lbF92ZGRfb2ZmX3N5bmMoaW50ZWxfZHApOw0KPiAt CX0NCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZWRwX3BhbmVsX3ZkZF9zY2hlZHVsZV9vZmYo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gLXsNCj4gLQl1bnNpZ25lZCBsb25nIGRlbGF5 Ow0KPiAtDQo+IC0JLyoNCj4gLQkgKiBRdWV1ZSB0aGUgdGltZXIgdG8gZmlyZSBhIGxvbmcgdGlt ZSBmcm9tIG5vdyAocmVsYXRpdmUgdG8gdGhlDQo+IHBvd2VyDQo+IC0JICogZG93biBkZWxheSkg dG8ga2VlcCB0aGUgcGFuZWwgcG93ZXIgdXAgYWNyb3NzIGEgc2VxdWVuY2Ugb2YNCj4gLQkgKiBv cGVyYXRpb25zLg0KPiAtCSAqLw0KPiAtCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhpbnRlbF9k cC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkgKiA1KTsNCj4gLQlzY2hlZHVsZV9kZWxheWVkX3dv cmsoJmludGVsX2RwLT5wYW5lbF92ZGRfd29yaywgZGVsYXkpOw0KPiAtfQ0KPiAtDQo+IC0vKg0K PiAtICogTXVzdCBiZSBwYWlyZWQgd2l0aCBlZHBfcGFuZWxfdmRkX29uKCkuDQo+IC0gKiBNdXN0 IGhvbGQgcHBzX211dGV4IGFyb3VuZCB0aGUgd2hvbGUgb24vb2ZmIHNlcXVlbmNlLg0KPiAtICog Q2FuIGJlIG5lc3RlZCB3aXRoIGludGVsX2VkcF9wYW5lbF92ZGRfe29uLG9mZn0oKSBjYWxscy4N Cj4gLSAqLw0KPiAtc3RhdGljIHZvaWQgZWRwX3BhbmVsX3ZkZF9vZmYoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwgYm9vbCBzeW5jKQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiAtDQo+IC0JbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7DQo+IC0NCj4gLQlpZiAoIWludGVsX2RwX2lz X2VkcChpbnRlbF9kcCkpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCUk5MTVfU1RBVEVfV0FSTigh aW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkLA0KPiAiW0VOQ09ERVI6JWQ6JXNdIFZERCBub3QgZm9y Y2VkIG9uIiwNCj4gLQkJCWRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZS5iYXNlLmJhc2Uu aWQsDQo+IC0JCQlkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5uYW1lKTsNCj4g LQ0KPiAtCWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCA9IGZhbHNlOw0KPiAtDQo+IC0JaWYgKHN5 bmMpDQo+IC0JCWVkcF9wYW5lbF92ZGRfb2ZmX3N5bmMoaW50ZWxfZHApOw0KPiAtCWVsc2UNCj4g LQkJZWRwX3BhbmVsX3ZkZF9zY2hlZHVsZV9vZmYoaW50ZWxfZHApOw0KPiAtfQ0KPiAtDQo+IC1z dGF0aWMgdm9pZCBlZHBfcGFuZWxfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gLXsN Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVs X2RwKTsNCj4gLQl1MzIgcHA7DQo+IC0JaTkxNV9yZWdfdCBwcF9jdHJsX3JlZzsNCj4gLQ0KPiAt CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOw0KPiAtDQo+IC0JaWYg KCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlR1cm4gW0VOQ09ERVI6JWQ6JXNdIHBhbmVsDQo+IHBv d2VyIG9uXG4iLA0KPiAtCQkgICAgZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2Uu YmFzZS5pZCwNCj4gLQkJICAgIGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZS5iYXNlLm5h bWUpOw0KPiAtDQo+IC0JaWYgKGRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLCBlZHBfaGF2ZV9wYW5l bF9wb3dlcihpbnRlbF9kcCksDQo+IC0JCSAgICAgIltFTkNPREVSOiVkOiVzXSBwYW5lbCBwb3dl ciBhbHJlYWR5IG9uXG4iLA0KPiAtCQkgICAgIGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFz ZS5iYXNlLmJhc2UuaWQsDQo+IC0JCSAgICAgZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNl LmJhc2UubmFtZSkpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCXdhaXRfcGFuZWxfcG93ZXJfY3lj bGUoaW50ZWxfZHApOw0KPiAtDQo+IC0JcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxf ZHApOw0KPiAtCXBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsNCj4gLQlpZiAoSVNf R0VOKGRldl9wcml2LCA1KSkgew0KPiAtCQkvKiBJTEsgd29ya2Fyb3VuZDogZGlzYWJsZSByZXNl dCBhcm91bmQgcG93ZXIgc2VxdWVuY2UgKi8NCj4gLQkJcHAgJj0gflBBTkVMX1BPV0VSX1JFU0VU Ow0KPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsNCj4gLQkJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7DQo+IC0JfQ0KPiAt DQo+IC0JcHAgfD0gUEFORUxfUE9XRVJfT047DQo+IC0JaWYgKCFJU19HRU4oZGV2X3ByaXYsIDUp KQ0KPiAtCQlwcCB8PSBQQU5FTF9QT1dFUl9SRVNFVDsNCj4gLQ0KPiAtCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOw0KPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChk ZXZfcHJpdiwgcHBfY3RybF9yZWcpOw0KPiAtDQo+IC0Jd2FpdF9wYW5lbF9vbihpbnRlbF9kcCk7 DQo+IC0JaW50ZWxfZHAtPmxhc3RfcG93ZXJfb24gPSBqaWZmaWVzOw0KPiAtDQo+IC0JaWYgKElT X0dFTihkZXZfcHJpdiwgNSkpIHsNCj4gLQkJcHAgfD0gUEFORUxfUE9XRVJfUkVTRVQ7IC8qIHJl c3RvcmUgcGFuZWwgcmVzZXQgYml0ICovDQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBw cF9jdHJsX3JlZywgcHApOw0KPiAtCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBw X2N0cmxfcmVnKTsNCj4gLQl9DQo+IC19DQo+IC0NCj4gLXZvaWQgaW50ZWxfZWRwX3BhbmVsX29u KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0JaW50ZWxfd2FrZXJlZl90IHdh a2VyZWY7DQo+IC0NCj4gLQlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpDQo+IC0JCXJl dHVybjsNCj4gLQ0KPiAtCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpDQo+IC0JCWVk cF9wYW5lbF9vbihpbnRlbF9kcCk7DQo+IC19DQo+IC0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZWRw X3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiAtew0KPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiAtCXN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxf ZHApOw0KPiAtCXUzMiBwcDsNCj4gLQlpOTE1X3JlZ190IHBwX2N0cmxfcmVnOw0KPiAtDQo+IC0J bG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7DQo+IC0NCj4gLQlpZiAo IWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiVHVybiBbRU5DT0RFUjolZDolc10gcGFuZWwNCj4gcG93 ZXIgb2ZmXG4iLA0KPiAtCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLCBkaWdfcG9y dC0+YmFzZS5iYXNlLm5hbWUpOw0KPiAtDQo+IC0JZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sICFp bnRlbF9kcC0+d2FudF9wYW5lbF92ZGQsDQo+IC0JCSAiTmVlZCBbRU5DT0RFUjolZDolc10gVkRE IHRvIHR1cm4gb2ZmIHBhbmVsXG4iLA0KPiAtCQkgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlk LCBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOw0KPiAtDQo+IC0JcHAgPSBpbGtfZ2V0X3BwX2Nv bnRyb2woaW50ZWxfZHApOw0KPiAtCS8qIFdlIG5lZWQgdG8gc3dpdGNoIG9mZiBwYW5lbCBwb3dl ciBfYW5kXyBmb3JjZSB2ZGQsIGZvcg0KPiBvdGhlcndpc2Ugc29tZQ0KPiAtCSAqIHBhbmVscyBn ZXQgdmVyeSB1bmhhcHB5IGFuZCBjZWFzZSB0byB3b3JrLiAqLw0KPiAtCXBwICY9IH4oUEFORUxf UE9XRVJfT04gfCBQQU5FTF9QT1dFUl9SRVNFVCB8DQo+IEVEUF9GT1JDRV9WREQgfA0KPiAtCQlF RFBfQkxDX0VOQUJMRSk7DQo+IC0NCj4gLQlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRl bF9kcCk7DQo+IC0NCj4gLQlpbnRlbF9kcC0+d2FudF9wYW5lbF92ZGQgPSBmYWxzZTsNCj4gKwkg KiByZWdpc3Rlcg0KPiArCSAqDQo+ICsJICogQ1BUIFBDSCBpcyBxdWl0ZSBkaWZmZXJlbnQsIGhh dmluZyBtYW55IGJpdHMgbW92ZWQNCj4gKwkgKiB0byB0aGUgVFJBTlNfRFBfQ1RMIHJlZ2lzdGVy IGluc3RlYWQuIFRoYXQNCj4gKwkgKiBjb25maWd1cmF0aW9uIGhhcHBlbnMgKG9kZGx5KSBpbiBp bGtfcGNoX2VuYWJsZQ0KPiArCSAqLw0KPiANCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cHBfY3RybF9yZWcsIHBwKTsNCj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBw X2N0cmxfcmVnKTsNCj4gKwkvKiBQcmVzZXJ2ZSB0aGUgQklPUy1jb21wdXRlZCBkZXRlY3RlZCBi aXQuIFRoaXMgaXMNCj4gKwkgKiBzdXBwb3NlZCB0byBiZSByZWFkLW9ubHkuDQo+ICsJICovDQo+ ICsJaW50ZWxfZHAtPkRQID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1 dF9yZWcpICYNCj4gRFBfREVURUNURUQ7DQo+IA0KPiAtCXdhaXRfcGFuZWxfb2ZmKGludGVsX2Rw KTsNCj4gLQlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRp bWUoKTsNCj4gKwkvKiBIYW5kbGUgRFAgYml0cyBpbiBjb21tb24gYmV0d2VlbiBhbGwgdGhyZWUg cmVnaXN0ZXIgZm9ybWF0cyAqLw0KPiArCWludGVsX2RwLT5EUCB8PSBEUF9WT0xUQUdFXzBfNCB8 IERQX1BSRV9FTVBIQVNJU18wOw0KPiArCWludGVsX2RwLT5EUCB8PSBEUF9QT1JUX1dJRFRIKHBp cGVfY29uZmlnLT5sYW5lX2NvdW50KTsNCj4gDQo+IC0JLyogV2UgZ290IGEgcmVmZXJlbmNlIHdo ZW4gd2UgZW5hYmxlZCB0aGUgVkRELiAqLw0KPiAtCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRl dl9wcml2LA0KPiAtCQkJCWludGVsX2F1eF9wb3dlcl9kb21haW4oZGlnX3BvcnQpLA0KPiAtCQkJ CWZldGNoX2FuZF96ZXJvKCZpbnRlbF9kcC0+dmRkX3dha2VyZWYpKTsNCj4gLX0NCj4gKwkvKiBT cGxpdCBvdXQgdGhlIElCWC9DUFUgdnMgQ1BUIHNldHRpbmdzICovDQo+IA0KPiAtdm9pZCBpbnRl bF9lZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0JaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7DQo+ICsJaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYg cG9ydCA9PSBQT1JUX0EpIHsNCj4gKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01P REVfRkxBR19QSFNZTkMpDQo+ICsJCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19IU19ISUdIOw0K PiArCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykNCj4g KwkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX1ZTX0hJR0g7DQo+ICsJCWludGVsX2RwLT5EUCB8 PSBEUF9MSU5LX1RSQUlOX09GRl9DUFQ7DQo+IA0KPiAtCWlmICghaW50ZWxfZHBfaXNfZWRwKGlu dGVsX2RwKSkNCj4gLQkJcmV0dXJuOw0KPiArCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2Nh cChpbnRlbF9kcC0+ZHBjZCkpDQo+ICsJCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5IQU5DRURfRlJB TUlORzsNCj4gDQo+IC0Jd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikNCj4gLQkJZWRw X3BhbmVsX29mZihpbnRlbF9kcCk7DQo+IC19DQo+ICsJCWludGVsX2RwLT5EUCB8PSBEUF9QSVBF X1NFTF9JVkIoY3J0Yy0+cGlwZSk7DQo+ICsJfSBlbHNlIGlmIChIQVNfUENIX0NQVChkZXZfcHJp dikgJiYgcG9ydCAhPSBQT1JUX0EpIHsNCj4gKwkJdTMyIHRyYW5zX2RwOw0KPiANCj4gLS8qIEVu YWJsZSBiYWNrbGlnaHQgaW4gdGhlIHBhbmVsIHBvd2VyIGNvbnRyb2wuICovDQo+IC1zdGF0aWMg dm9pZCBfaW50ZWxfZWRwX2JhY2tsaWdodF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0K PiAtew0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUo aW50ZWxfZHApOw0KPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOw0KPiArCQlpbnRlbF9kcC0+ RFAgfD0gRFBfTElOS19UUkFJTl9PRkZfQ1BUOw0KPiANCj4gLQkvKg0KPiAtCSAqIElmIHdlIGVu YWJsZSB0aGUgYmFja2xpZ2h0IHJpZ2h0IGF3YXkgZm9sbG93aW5nIGEgcGFuZWwgcG93ZXINCj4g LQkgKiBvbiwgd2UgbWF5IHNlZSBzbGlnaHQgZmxpY2tlciBhcyB0aGUgcGFuZWwgc3luY3Mgd2l0 aCB0aGUgZURQDQo+IC0JICogbGluay4gIFNvIGRlbGF5IGEgYml0IHRvIG1ha2Ugc3VyZSB0aGUg aW1hZ2UgaXMgc29saWQgYmVmb3JlDQo+IC0JICogYWxsb3dpbmcgaXQgdG8gYXBwZWFyLg0KPiAt CSAqLw0KPiAtCXdhaXRfYmFja2xpZ2h0X29uKGludGVsX2RwKTsNCj4gKwkJdHJhbnNfZHAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBUUkFOU19EUF9DVEwoY3J0Yy0NCj4gPnBpcGUpKTsNCj4g KwkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50ZWxfZHAtPmRwY2QpKQ0KPiArCQkJ dHJhbnNfZHAgfD0gVFJBTlNfRFBfRU5IX0ZSQU1JTkc7DQo+ICsJCWVsc2UNCj4gKwkJCXRyYW5z X2RwICY9IH5UUkFOU19EUF9FTkhfRlJBTUlORzsNCj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIFRSQU5TX0RQX0NUTChjcnRjLT5waXBlKSwNCj4gdHJhbnNfZHApOw0KPiArCX0gZWxzZSB7 DQo+ICsJCWlmIChJU19HNFgoZGV2X3ByaXYpICYmIHBpcGVfY29uZmlnLT5saW1pdGVkX2NvbG9y X3JhbmdlKQ0KPiArCQkJaW50ZWxfZHAtPkRQIHw9IERQX0NPTE9SX1JBTkdFXzE2XzIzNTsNCj4g DQo+IC0Jd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikgew0KPiAtCQlpOTE1X3JlZ190 IHBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVsX2RwKTsNCj4gLQkJdTMyIHBwOw0KPiAr CQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykNCj4gKwkJ CWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX0hTX0hJR0g7DQo+ICsJCWlmIChhZGp1c3RlZF9tb2Rl LT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQ0KPiArCQkJaW50ZWxfZHAtPkRQIHw9IERQ X1NZTkNfVlNfSElHSDsNCj4gKwkJaW50ZWxfZHAtPkRQIHw9IERQX0xJTktfVFJBSU5fT0ZGOw0K PiANCj4gLQkJcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOw0KPiAtCQlwcCB8PSBF RFBfQkxDX0VOQUJMRTsNCj4gKwkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50ZWxf ZHAtPmRwY2QpKQ0KPiArCQkJaW50ZWxfZHAtPkRQIHw9IERQX0VOSEFOQ0VEX0ZSQU1JTkc7DQo+ IA0KPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsNCj4gLQkJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7DQo+ICsJCWlmIChJ U19DSEVSUllWSUVXKGRldl9wcml2KSkNCj4gKwkJCWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NF TF9DSFYoY3J0Yy0+cGlwZSk7DQo+ICsJCWVsc2UNCj4gKwkJCWludGVsX2RwLT5EUCB8PSBEUF9Q SVBFX1NFTChjcnRjLT5waXBlKTsNCj4gIAl9DQo+ICB9DQo+IA0KPiArDQo+ICAvKiBFbmFibGUg YmFja2xpZ2h0IFBXTSBhbmQgYmFja2xpZ2h0IFBQIGNvbnRyb2wuICovDQo+ICB2b2lkIGludGVs X2VkcF9iYWNrbGlnaHRfb24oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsDQo+ICAJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3Rh dGUpDQo+IEBAIC0zNDA5LDMwICsyNTM5LDYgQEAgdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X29u KGNvbnN0IHN0cnVjdA0KPiBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLA0KPiAgCV9pbnRl bF9lZHBfYmFja2xpZ2h0X29uKGludGVsX2RwKTsNCj4gIH0NCj4gDQo+IC0vKiBEaXNhYmxlIGJh Y2tsaWdodCBpbiB0aGUgcGFuZWwgcG93ZXIgY29udHJvbC4gKi8NCj4gLXN0YXRpYyB2b2lkIF9p bnRlbF9lZHBfYmFja2xpZ2h0X29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiAtew0K PiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxf ZHApOw0KPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOw0KPiAtDQo+IC0JaWYgKCFpbnRlbF9k cF9pc19lZHAoaW50ZWxfZHApKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQl3aXRoX3Bwc19sb2Nr KGludGVsX2RwLCB3YWtlcmVmKSB7DQo+IC0JCWk5MTVfcmVnX3QgcHBfY3RybF9yZWcgPSBfcHBf Y3RybF9yZWcoaW50ZWxfZHApOw0KPiAtCQl1MzIgcHA7DQo+IC0NCj4gLQkJcHAgPSBpbGtfZ2V0 X3BwX2NvbnRyb2woaW50ZWxfZHApOw0KPiAtCQlwcCAmPSB+RURQX0JMQ19FTkFCTEU7DQo+IC0N Cj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxfcmVnLCBwcCk7DQo+IC0JCWlu dGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOw0KPiAtCX0NCj4gLQ0K PiAtCWludGVsX2RwLT5sYXN0X2JhY2tsaWdodF9vZmYgPSBqaWZmaWVzOw0KPiAtCWVkcF93YWl0 X2JhY2tsaWdodF9vZmYoaW50ZWxfZHApOw0KPiAtfQ0KPiAtDQo+ICAvKiBEaXNhYmxlIGJhY2ts aWdodCBQUCBjb250cm9sIGFuZCBiYWNrbGlnaHQgUFdNLiAqLw0KPiAgdm9pZCBpbnRlbF9lZHBf YmFja2xpZ2h0X29mZihjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZQ0KPiAqb2xkX2Nv bm5fc3RhdGUpDQo+ICB7DQo+IEBAIC0zNDQ4LDMzICsyNTU0LDYgQEAgdm9pZCBpbnRlbF9lZHBf YmFja2xpZ2h0X29mZihjb25zdCBzdHJ1Y3QNCj4gZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nv bm5fc3RhdGUpDQo+ICAJaW50ZWxfcGFuZWxfZGlzYWJsZV9iYWNrbGlnaHQob2xkX2Nvbm5fc3Rh dGUpOw0KPiAgfQ0KPiANCj4gLS8qDQo+IC0gKiBIb29rIGZvciBjb250cm9sbGluZyB0aGUgcGFu ZWwgcG93ZXIgY29udHJvbCBiYWNrbGlnaHQgdGhyb3VnaCB0aGUNCj4gYmxfcG93ZXINCj4gLSAq IHN5c2ZzIGF0dHJpYnV0ZS4gVGFrZSBjYXJlIHRvIGhhbmRsZSBtdWx0aXBsZSBjYWxscy4NCj4g LSAqLw0KPiAtc3RhdGljIHZvaWQgaW50ZWxfZWRwX2JhY2tsaWdodF9wb3dlcihzdHJ1Y3QgaW50 ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsDQo+IC0JCQkJICAgICAgYm9vbCBlbmFibGUpDQo+IC17 DQo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGNvbm5lY3Rvci0+ YmFzZS5kZXYpOw0KPiAtCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBpbnRlbF9hdHRhY2hl ZF9kcChjb25uZWN0b3IpOw0KPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOw0KPiAtCWJvb2wg aXNfZW5hYmxlZDsNCj4gLQ0KPiAtCWlzX2VuYWJsZWQgPSBmYWxzZTsNCj4gLQl3aXRoX3Bwc19s b2NrKGludGVsX2RwLCB3YWtlcmVmKQ0KPiAtCQlpc19lbmFibGVkID0gaWxrX2dldF9wcF9jb250 cm9sKGludGVsX2RwKSAmDQo+IEVEUF9CTENfRU5BQkxFOw0KPiAtCWlmIChpc19lbmFibGVkID09 IGVuYWJsZSkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwg InBhbmVsIHBvd2VyIGNvbnRyb2wgYmFja2xpZ2h0ICVzXG4iLA0KPiAtCQkgICAgZW5hYmxlID8g ImVuYWJsZSIgOiAiZGlzYWJsZSIpOw0KPiAtDQo+IC0JaWYgKGVuYWJsZSkNCj4gLQkJX2ludGVs X2VkcF9iYWNrbGlnaHRfb24oaW50ZWxfZHApOw0KPiAtCWVsc2UNCj4gLQkJX2ludGVsX2VkcF9i YWNrbGlnaHRfb2ZmKGludGVsX2RwKTsNCj4gLX0NCj4gLQ0KPiAgc3RhdGljIHZvaWQgYXNzZXJ0 X2RwX3BvcnQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgYm9vbCBzdGF0ZSkNCj4gIHsNCj4g IAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGlu dGVsX2RwKTsNCj4gQEAgLTQxMzksMTEyICszMjE4LDYgQEAgc3RhdGljIHZvaWQgZzR4X3ByZV9l bmFibGVfZHAoc3RydWN0DQo+IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICAJCWlsa19l ZHBfcGxsX29uKGludGVsX2RwLCBwaXBlX2NvbmZpZyk7DQo+ICB9DQo+IA0KPiAtc3RhdGljIHZv aWQgdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkN Cj4gLXsNCj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2Rp Z19wb3J0KGludGVsX2RwKTsNCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGRpZ19wb3J0LQ0KPiA+YmFzZS5iYXNlLmRldik7DQo+IC0JZW51bSBwaXBlIHBp cGUgPSBpbnRlbF9kcC0+cHBzX3BpcGU7DQo+IC0JaTkxNV9yZWdfdCBwcF9vbl9yZWcgPSBQUF9P Tl9ERUxBWVMocGlwZSk7DQo+IC0NCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50 ZWxfZHAtPmFjdGl2ZV9waXBlICE9DQo+IElOVkFMSURfUElQRSk7DQo+IC0NCj4gLQlpZiAoZHJt X1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHBpcGUgIT0gUElQRV9BICYmIHBpcGUgIT0NCj4gUElQ RV9CKSkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhpbnRl bF9kcCk7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFZMViBzZWVtcyB0byBnZXQgY29uZnVzZWQgd2hl biBtdWx0aXBsZSBwb3dlciBzZXF1ZW5jZXJzDQo+IC0JICogaGF2ZSB0aGUgc2FtZSBwb3J0IHNl bGVjdGVkIChldmVuIGlmIG9ubHkgb25lIGhhcyBwb3dlci92ZGQNCj4gLQkgKiBlbmFibGVkKS4g VGhlIGZhaWx1cmUgbWFuaWZlc3RzIGFzIHZsdl93YWl0X3BvcnRfcmVhZHkoKSBmYWlsaW5nDQo+ IC0JICogQ0hWIG9uIHRoZSBvdGhlciBoYW5kIGRvZXNuJ3Qgc2VlbSB0byBtaW5kIGhhdmluZyB0 aGUgc2FtZQ0KPiBwb3J0DQo+IC0JICogc2VsZWN0ZWQgaW4gbXVsdGlwbGUgcG93ZXIgc2VxdWVu Y2VycywgYnV0IGxldCdzIGNsZWFyIHRoZQ0KPiAtCSAqIHBvcnQgc2VsZWN0IGFsd2F5cyB3aGVu IGxvZ2ljYWxseSBkaXNjb25uZWN0aW5nIGEgcG93ZXINCj4gc2VxdWVuY2VyDQo+IC0JICogZnJv bSBhIHBvcnQuDQo+IC0JICovDQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+IC0J CSAgICAiZGV0YWNoaW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZyb20NCj4gW0VOQ09ERVI6 JWQ6JXNdXG4iLA0KPiAtCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNl LmJhc2UuaWQsDQo+IC0JCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOw0KPiAtCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBwcF9vbl9yZWcsIDApOw0KPiAtCWludGVsX2RlX3Bvc3Rpbmdf cmVhZChkZXZfcHJpdiwgcHBfb25fcmVnKTsNCj4gLQ0KPiAtCWludGVsX2RwLT5wcHNfcGlwZSA9 IElOVkFMSURfUElQRTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgdmx2X3N0ZWFsX3Bvd2Vy X3NlcXVlbmNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+IC0JCQkJ ICAgICAgZW51bSBwaXBlIHBpcGUpDQo+IC17DQo+IC0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVu Y29kZXI7DQo+IC0NCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4 KTsNCj4gLQ0KPiAtCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7 DQo+IC0JCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rl cik7DQo+IC0NCj4gLQkJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT5hY3RpdmVf cGlwZSA9PQ0KPiBwaXBlLA0KPiAtCQkJICJzdGVhbGluZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNl ciBmcm9tIGFjdGl2ZQ0KPiBbRU5DT0RFUjolZDolc11cbiIsDQo+IC0JCQkgcGlwZV9uYW1lKHBp cGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsDQo+IC0JCQkgZW5jb2Rlci0+YmFzZS5uYW1lKTsN Cj4gLQ0KPiAtCQlpZiAoaW50ZWxfZHAtPnBwc19waXBlICE9IHBpcGUpDQo+IC0JCQljb250aW51 ZTsNCj4gLQ0KPiAtCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4gLQkJCSAgICAic3Rl YWxpbmcgcGlwZSAlYyBwb3dlciBzZXF1ZW5jZXIgZnJvbQ0KPiBbRU5DT0RFUjolZDolc11cbiIs DQo+IC0JCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsDQo+IC0J CQkgICAgZW5jb2Rlci0+YmFzZS5uYW1lKTsNCj4gLQ0KPiAtCQkvKiBtYWtlIHN1cmUgdmRkIGlz IG9mZiBiZWZvcmUgd2Ugc3RlYWwgaXQgKi8NCj4gLQkJdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5j ZXIoaW50ZWxfZHApOw0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgdmx2X2luaXRf cGFuZWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBpbnRlbF9lbmNvZGVyDQo+ICplbmNvZGVyLA0K PiAtCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQ0KPiAqY3J0Y19zdGF0ZSkN Cj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVu Y29kZXItPmJhc2UuZGV2KTsNCj4gLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3Rv X2ludGVsX2RwKGVuY29kZXIpOw0KPiAtCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50 ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOw0KPiAtDQo+IC0JbG9ja2RlcF9hc3NlcnRf aGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7DQo+IC0NCj4gLQlkcm1fV0FSTl9PTigmZGV2X3By aXYtPmRybSwgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9DQo+IElOVkFMSURfUElQRSk7DQo+IC0N Cj4gLQlpZiAoaW50ZWxfZHAtPnBwc19waXBlICE9IElOVkFMSURfUElQRSAmJg0KPiAtCSAgICBp bnRlbF9kcC0+cHBzX3BpcGUgIT0gY3J0Yy0+cGlwZSkgew0KPiAtCQkvKg0KPiAtCQkgKiBJZiBh bm90aGVyIHBvd2VyIHNlcXVlbmNlciB3YXMgYmVpbmcgdXNlZCBvbiB0aGlzDQo+IC0JCSAqIHBv cnQgcHJldmlvdXNseSBtYWtlIHN1cmUgdG8gdHVybiBvZmYgdmRkIHRoZXJlIHdoaWxlDQo+IC0J CSAqIHdlIHN0aWxsIGhhdmUgY29udHJvbCBvZiBpdC4NCj4gLQkJICovDQo+IC0JCXZsdl9kZXRh Y2hfcG93ZXJfc2VxdWVuY2VyKGludGVsX2RwKTsNCj4gLQl9DQo+IC0NCj4gLQkvKg0KPiAtCSAq IFdlIG1heSBiZSBzdGVhbGluZyB0aGUgcG93ZXINCj4gLQkgKiBzZXF1ZW5jZXIgZnJvbSBhbm90 aGVyIHBvcnQuDQo+IC0JICovDQo+IC0Jdmx2X3N0ZWFsX3Bvd2VyX3NlcXVlbmNlcihkZXZfcHJp diwgY3J0Yy0+cGlwZSk7DQo+IC0NCj4gLQlpbnRlbF9kcC0+YWN0aXZlX3BpcGUgPSBjcnRjLT5w aXBlOw0KPiAtDQo+IC0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0KPiAtCQlyZXR1 cm47DQo+IC0NCj4gLQkvKiBub3cgaXQncyBhbGwgb3VycyAqLw0KPiAtCWludGVsX2RwLT5wcHNf cGlwZSA9IGNydGMtPnBpcGU7DQo+IC0NCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwN Cj4gLQkJICAgICJpbml0aWFsaXppbmcgcGlwZSAlYyBwb3dlciBzZXF1ZW5jZXIgZm9yDQo+IFtF TkNPREVSOiVkOiVzXVxuIiwNCj4gLQkJICAgIHBpcGVfbmFtZShpbnRlbF9kcC0+cHBzX3BpcGUp LCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsDQo+IC0JCSAgICBlbmNvZGVyLT5iYXNlLm5hbWUpOw0K PiAtDQo+IC0JLyogaW5pdCBwb3dlciBzZXF1ZW5jZXIgb24gdGhpcyBwaXBlIGFuZCBwb3J0ICov DQo+IC0JaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOw0KPiAt CWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhpbnRlbF9kcCwg dHJ1ZSk7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyB2b2lkIHZsdl9wcmVfZW5hYmxlX2RwKHN0cnVj dCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiAgCQkJICAgICAgc3RydWN0IGludGVsX2Vu Y29kZXIgKmVuY29kZXIsDQo+ICAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqcGlwZV9jb25maWcsDQo+IEBAIC02ODg4LDMxICs1ODYxLDYgQEAgdm9pZCBpbnRlbF9kcF9l bmNvZGVyX3NodXRkb3duKHN0cnVjdA0KPiBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyKQ0K PiAgCQl3YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKGludGVsX2RwKTsNCj4gIH0NCj4gDQo+IC1zdGF0 aWMgdm9pZCBpbnRlbF9lZHBfcGFuZWxfdmRkX3Nhbml0aXplKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApDQo+IC17DQo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBf dG9faTkxNShpbnRlbF9kcCk7DQo+IC0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3Bv cnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7DQo+IC0NCj4gLQlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsNCj4gLQ0KPiAtCWlmICghZWRwX2hhdmVfcGFuZWxf dmRkKGludGVsX2RwKSkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBUaGUgVkRE IGJpdCBuZWVkcyBhIHBvd2VyIGRvbWFpbiByZWZlcmVuY2UsIHNvIGlmIHRoZSBiaXQgaXMNCj4g LQkgKiBhbHJlYWR5IGVuYWJsZWQgd2hlbiB3ZSBib290IG9yIHJlc3VtZSwgZ3JhYiB0aGlzIHJl ZmVyZW5jZSBhbmQNCj4gLQkgKiBzY2hlZHVsZSBhIHZkZCBvZmYsIHNvIHdlIGRvbid0IGhvbGQg b24gdG8gdGhlIHJlZmVyZW5jZQ0KPiAtCSAqIGluZGVmaW5pdGVseS4NCj4gLQkgKi8NCj4gLQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4gLQkJICAgICJWREQgbGVmdCBvbiBieSBCSU9T LCBhZGp1c3Rpbmcgc3RhdGUgdHJhY2tpbmdcbiIpOw0KPiAtCWRybV9XQVJOX09OKCZkZXZfcHJp di0+ZHJtLCBpbnRlbF9kcC0+dmRkX3dha2VyZWYpOw0KPiAtCWludGVsX2RwLT52ZGRfd2FrZXJl ZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LA0KPiAtDQo+IAlpbnRlbF9hdXhf cG93ZXJfZG9tYWluKGRpZ19wb3J0KSk7DQo+IC0NCj4gLQllZHBfcGFuZWxfdmRkX3NjaGVkdWxl X29mZihpbnRlbF9kcCk7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyBlbnVtIHBpcGUgdmx2X2FjdGl2 ZV9waXBlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICB7DQo+ICAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+IEBAIC03MTE4 LDE5ICs2MDY2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcw0KPiBp bnRlbF9kcF9lbmNfZnVuY3MgPSB7DQo+ICAJLmRlc3Ryb3kgPSBpbnRlbF9kcF9lbmNvZGVyX2Rl c3Ryb3ksDQo+ICB9Ow0KPiANCj4gLXN0YXRpYyBib29sIGludGVsX2VkcF9oYXZlX3Bvd2VyKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2Vy ZWY7DQo+IC0JYm9vbCBoYXZlX3Bvd2VyID0gZmFsc2U7DQo+IC0NCj4gLQl3aXRoX3Bwc19sb2Nr KGludGVsX2RwLCB3YWtlcmVmKSB7DQo+IC0JCWhhdmVfcG93ZXIgPSBlZHBfaGF2ZV9wYW5lbF9w b3dlcihpbnRlbF9kcCkgJiYNCj4gLQ0KPiBlZHBfaGF2ZV9wYW5lbF92ZGQoaW50ZWxfZHApOw0K PiAtCX0NCj4gLQ0KPiAtCXJldHVybiBoYXZlX3Bvd2VyOw0KPiAtfQ0KPiAtDQo+ICBlbnVtIGly cXJldHVybg0KPiAgaW50ZWxfZHBfaHBkX3B1bHNlKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmRpZ19wb3J0LCBib29sIGxvbmdfaHBkKQ0KPiAgew0KPiBAQCAtNzIzNCwyNzcgKzYxNjksNiBA QCBpbnRlbF9kcF9hZGRfcHJvcGVydGllcyhzdHJ1Y3QgaW50ZWxfZHANCj4gKmludGVsX2RwLCBz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdA0KPiAgCX0NCj4gIH0NCj4gDQo+IC1zdGF0aWMg dm9pZCBpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3RpbWVzdGFtcHMoc3RydWN0IGludGVsX2Rw DQo+ICppbnRlbF9kcCkNCj4gLXsNCj4gLQlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUg PSBrdGltZV9nZXRfYm9vdHRpbWUoKTsNCj4gLQlpbnRlbF9kcC0+bGFzdF9wb3dlcl9vbiA9IGpp ZmZpZXM7DQo+IC0JaW50ZWxfZHAtPmxhc3RfYmFja2xpZ2h0X29mZiA9IGppZmZpZXM7DQo+IC19 DQo+IC0NCj4gLXN0YXRpYyB2b2lkDQo+IC1pbnRlbF9wcHNfcmVhZG91dF9od19zdGF0ZShzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3QNCj4gZWRwX3Bvd2VyX3NlcSAqc2VxKQ0KPiAt ew0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50 ZWxfZHApOw0KPiAtCXUzMiBwcF9vbiwgcHBfb2ZmLCBwcF9jdGw7DQo+IC0Jc3RydWN0IHBwc19y ZWdpc3RlcnMgcmVnczsNCj4gLQ0KPiAtCWludGVsX3Bwc19nZXRfcmVnaXN0ZXJzKGludGVsX2Rw LCAmcmVncyk7DQo+IC0NCj4gLQlwcF9jdGwgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHAp Ow0KPiAtDQo+IC0JLyogRW5zdXJlIFBQUyBpcyB1bmxvY2tlZCAqLw0KPiAtCWlmICghSEFTX0RE SShkZXZfcHJpdikpDQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLnBwX2N0cmws IHBwX2N0bCk7DQo+IC0NCj4gLQlwcF9vbiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3Mu cHBfb24pOw0KPiAtCXBwX29mZiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfb2Zm KTsNCj4gLQ0KPiAtCS8qIFB1bGwgdGltaW5nIHZhbHVlcyBvdXQgb2YgcmVnaXN0ZXJzICovDQo+ IC0Jc2VxLT50MV90MyA9IFJFR19GSUVMRF9HRVQoUEFORUxfUE9XRVJfVVBfREVMQVlfTUFTSywN Cj4gcHBfb24pOw0KPiAtCXNlcS0+dDggPSBSRUdfRklFTERfR0VUKFBBTkVMX0xJR0hUX09OX0RF TEFZX01BU0ssDQo+IHBwX29uKTsNCj4gLQlzZXEtPnQ5ID0gUkVHX0ZJRUxEX0dFVChQQU5FTF9M SUdIVF9PRkZfREVMQVlfTUFTSywNCj4gcHBfb2ZmKTsNCj4gLQlzZXEtPnQxMCA9IFJFR19GSUVM RF9HRVQoUEFORUxfUE9XRVJfRE9XTl9ERUxBWV9NQVNLLA0KPiBwcF9vZmYpOw0KPiAtDQo+IC0J aWYgKGk5MTVfbW1pb19yZWdfdmFsaWQocmVncy5wcF9kaXYpKSB7DQo+IC0JCXUzMiBwcF9kaXY7 DQo+IC0NCj4gLQkJcHBfZGl2ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5wcF9kaXYp Ow0KPiAtDQo+IC0JCXNlcS0+dDExX3QxMiA9DQo+IFJFR19GSUVMRF9HRVQoUEFORUxfUE9XRVJf Q1lDTEVfREVMQVlfTUFTSywgcHBfZGl2KSAqIDEwMDA7DQo+IC0JfSBlbHNlIHsNCj4gLQkJc2Vx LT50MTFfdDEyID0NCj4gUkVHX0ZJRUxEX0dFVChCWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSywg cHBfY3RsKSAqIDEwMDA7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZA0KPiAtaW50 ZWxfcHBzX2R1bXBfc3RhdGUoY29uc3QgY2hhciAqc3RhdGVfbmFtZSwgY29uc3Qgc3RydWN0DQo+ IGVkcF9wb3dlcl9zZXEgKnNlcSkNCj4gLXsNCj4gLQlEUk1fREVCVUdfS01TKCIlcyB0MV90MyAl ZCB0OCAlZCB0OSAlZCB0MTAgJWQgdDExX3QxMg0KPiAlZFxuIiwNCj4gLQkJICAgICAgc3RhdGVf bmFtZSwNCj4gLQkJICAgICAgc2VxLT50MV90Mywgc2VxLT50OCwgc2VxLT50OSwgc2VxLT50MTAs IHNlcS0+dDExX3QxMik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkDQo+IC1pbnRlbF9wcHNf dmVyaWZ5X3N0YXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IC17DQo+IC0Jc3RydWN0 IGVkcF9wb3dlcl9zZXEgaHc7DQo+IC0Jc3RydWN0IGVkcF9wb3dlcl9zZXEgKnN3ID0gJmludGVs X2RwLT5wcHNfZGVsYXlzOw0KPiAtDQo+IC0JaW50ZWxfcHBzX3JlYWRvdXRfaHdfc3RhdGUoaW50 ZWxfZHAsICZodyk7DQo+IC0NCj4gLQlpZiAoaHcudDFfdDMgIT0gc3ctPnQxX3QzIHx8IGh3LnQ4 ICE9IHN3LT50OCB8fCBody50OSAhPSBzdy0+dDkgfHwNCj4gLQkgICAgaHcudDEwICE9IHN3LT50 MTAgfHwgaHcudDExX3QxMiAhPSBzdy0+dDExX3QxMikgew0KPiAtCQlEUk1fRVJST1IoIlBQUyBz dGF0ZSBtaXNtYXRjaFxuIik7DQo+IC0JCWludGVsX3Bwc19kdW1wX3N0YXRlKCJzdyIsIHN3KTsN Cj4gLQkJaW50ZWxfcHBzX2R1bXBfc3RhdGUoImh3IiwgJmh3KTsNCj4gLQl9DQo+IC19DQo+IC0N Cj4gLXN0YXRpYyB2b2lkDQo+IC1pbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiAtCXN0cnVjdCBlZHBfcG93 ZXJfc2VxIGN1ciwgdmJ0LCBzcGVjLA0KPiAtCQkqZmluYWwgPSAmaW50ZWxfZHAtPnBwc19kZWxh eXM7DQo+IC0NCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsN Cj4gLQ0KPiAtCS8qIGFscmVhZHkgaW5pdGlhbGl6ZWQ/ICovDQo+IC0JaWYgKGZpbmFsLT50MTFf dDEyICE9IDApDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCWludGVsX3Bwc19yZWFkb3V0X2h3X3N0 YXRlKGludGVsX2RwLCAmY3VyKTsNCj4gLQ0KPiAtCWludGVsX3Bwc19kdW1wX3N0YXRlKCJjdXIi LCAmY3VyKTsNCj4gLQ0KPiAtCXZidCA9IGRldl9wcml2LT52YnQuZWRwLnBwczsNCj4gLQkvKiBP biBUb3NoaWJhIFNhdGVsbGl0ZSBQNTAtQy0xOEMgc3lzdGVtIHRoZSBWQlQgVDEyIGRlbGF5DQo+ IC0JICogb2YgNTAwbXMgYXBwZWFycyB0byBiZSB0b28gc2hvcnQuIE9jYXNzaW9uYWxseSB0aGUg cGFuZWwNCj4gLQkgKiBqdXN0IGZhaWxzIHRvIHBvd2VyIGJhY2sgb24uIEluY3JlYXNpbmcgdGhl IGRlbGF5IHRvIDgwMG1zDQo+IC0JICogc2VlbXMgc3VmZmljaWVudCB0byBhdm9pZCB0aGlzIHBy b2JsZW0uDQo+IC0JICovDQo+IC0JaWYgKGRldl9wcml2LT5xdWlya3MgJiBRVUlSS19JTkNSRUFT RV9UMTJfREVMQVkpIHsNCj4gLQkJdmJ0LnQxMV90MTIgPSBtYXhfdCh1MTYsIHZidC50MTFfdDEy LCAxMzAwICogMTApOw0KPiAtCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4gLQkJCSAg ICAiSW5jcmVhc2luZyBUMTIgcGFuZWwgZGVsYXkgYXMgcGVyIHRoZSBxdWlyayB0bw0KPiAlZFxu IiwNCj4gLQkJCSAgICB2YnQudDExX3QxMik7DQo+IC0JfQ0KPiAtCS8qIFQxMV9UMTIgZGVsYXkg aXMgc3BlY2lhbCBhbmQgYWN0dWFsbHkgaW4gdW5pdHMgb2YgMTAwbXMsIGJ1dCB6ZXJvDQo+IC0J ICogYmFzZWQgaW4gdGhlIGh3IChzbyB3ZSBuZWVkIHRvIGFkZCAxMDAgbXMpLiBCdXQgdGhlIHN3 IHZidA0KPiAtCSAqIHRhYmxlIG11bHRpcGxpZXMgaXQgd2l0aCAxMDAwIHRvIG1ha2UgaXQgaW4g dW5pdHMgb2YgMTAwdXNlYywNCj4gLQkgKiB0b28uICovDQo+IC0JdmJ0LnQxMV90MTIgKz0gMTAw ICogMTA7DQo+IC0NCj4gLQkvKiBVcHBlciBsaW1pdHMgZnJvbSBlRFAgMS4zIHNwZWMuIE5vdGUg dGhhdCB3ZSB1c2UgdGhlIGNsdW5reQ0KPiB1bml0cyBvZg0KPiAtCSAqIG91ciBodyBoZXJlLCB3 aGljaCBhcmUgYWxsIGluIDEwMHVzZWMuICovDQo+IC0Jc3BlYy50MV90MyA9IDIxMCAqIDEwOw0K PiAtCXNwZWMudDggPSA1MCAqIDEwOyAvKiBubyBsaW1pdCBmb3IgdDgsIHVzZSB0NyBpbnN0ZWFk ICovDQo+IC0Jc3BlYy50OSA9IDUwICogMTA7IC8qIG5vIGxpbWl0IGZvciB0OSwgbWFrZSBpdCBz eW1tZXRyaWMgd2l0aCB0OCAqLw0KPiAtCXNwZWMudDEwID0gNTAwICogMTA7DQo+IC0JLyogVGhp cyBvbmUgaXMgc3BlY2lhbCBhbmQgYWN0dWFsbHkgaW4gdW5pdHMgb2YgMTAwbXMsIGJ1dCB6ZXJv DQo+IC0JICogYmFzZWQgaW4gdGhlIGh3IChzbyB3ZSBuZWVkIHRvIGFkZCAxMDAgbXMpLiBCdXQg dGhlIHN3IHZidA0KPiAtCSAqIHRhYmxlIG11bHRpcGxpZXMgaXQgd2l0aCAxMDAwIHRvIG1ha2Ug aXQgaW4gdW5pdHMgb2YgMTAwdXNlYywNCj4gLQkgKiB0b28uICovDQo+IC0Jc3BlYy50MTFfdDEy ID0gKDUxMCArIDEwMCkgKiAxMDsNCj4gLQ0KPiAtCWludGVsX3Bwc19kdW1wX3N0YXRlKCJ2YnQi LCAmdmJ0KTsNCj4gLQ0KPiAtCS8qIFVzZSB0aGUgbWF4IG9mIHRoZSByZWdpc3RlciBzZXR0aW5n cyBhbmQgdmJ0LiBJZiBib3RoIGFyZQ0KPiAtCSAqIHVuc2V0LCBmYWxsIGJhY2sgdG8gdGhlIHNw ZWMgbGltaXRzLiAqLw0KPiAtI2RlZmluZSBhc3NpZ25fZmluYWwoZmllbGQpCWZpbmFsLT5maWVs ZCA9IChtYXgoY3VyLmZpZWxkLCB2YnQuZmllbGQpID09IDAgPw0KPiBcDQo+IC0JCQkJICAgICAg IHNwZWMuZmllbGQgOiBcDQo+IC0JCQkJICAgICAgIG1heChjdXIuZmllbGQsIHZidC5maWVsZCkp DQo+IC0JYXNzaWduX2ZpbmFsKHQxX3QzKTsNCj4gLQlhc3NpZ25fZmluYWwodDgpOw0KPiAtCWFz c2lnbl9maW5hbCh0OSk7DQo+IC0JYXNzaWduX2ZpbmFsKHQxMCk7DQo+IC0JYXNzaWduX2ZpbmFs KHQxMV90MTIpOw0KPiAtI3VuZGVmIGFzc2lnbl9maW5hbA0KPiAtDQo+IC0jZGVmaW5lIGdldF9k ZWxheShmaWVsZCkJKERJVl9ST1VORF9VUChmaW5hbC0+ZmllbGQsIDEwKSkNCj4gLQlpbnRlbF9k cC0+cGFuZWxfcG93ZXJfdXBfZGVsYXkgPSBnZXRfZGVsYXkodDFfdDMpOw0KPiAtCWludGVsX2Rw LT5iYWNrbGlnaHRfb25fZGVsYXkgPSBnZXRfZGVsYXkodDgpOw0KPiAtCWludGVsX2RwLT5iYWNr bGlnaHRfb2ZmX2RlbGF5ID0gZ2V0X2RlbGF5KHQ5KTsNCj4gLQlpbnRlbF9kcC0+cGFuZWxfcG93 ZXJfZG93bl9kZWxheSA9IGdldF9kZWxheSh0MTApOw0KPiAtCWludGVsX2RwLT5wYW5lbF9wb3dl cl9jeWNsZV9kZWxheSA9IGdldF9kZWxheSh0MTFfdDEyKTsNCj4gLSN1bmRlZiBnZXRfZGVsYXkN Cj4gLQ0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkgICAgInBhbmVsIHBv d2VyIHVwIGRlbGF5ICVkLCBwb3dlciBkb3duIGRlbGF5ICVkLCBwb3dlcg0KPiBjeWNsZSBkZWxh eSAlZFxuIiwNCj4gLQkJICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl91cF9kZWxheSwNCj4gLQkJ ICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl9kb3duX2RlbGF5LA0KPiAtCQkgICAgaW50ZWxfZHAt PnBhbmVsX3Bvd2VyX2N5Y2xlX2RlbGF5KTsNCj4gLQ0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLCAiYmFja2xpZ2h0IG9uIGRlbGF5ICVkLCBvZmYgZGVsYXkNCj4gJWRcbiIsDQo+IC0J CSAgICBpbnRlbF9kcC0+YmFja2xpZ2h0X29uX2RlbGF5LA0KPiAtCQkgICAgaW50ZWxfZHAtPmJh Y2tsaWdodF9vZmZfZGVsYXkpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBXZSBvdmVycmlkZSB0aGUg SFcgYmFja2xpZ2h0IGRlbGF5cyB0byAxIGJlY2F1c2Ugd2UgZG8gbWFudWFsDQo+IHdhaXRzDQo+ IC0JICogb24gdGhlbS4gRm9yIFQ4LCBldmVuIEJTcGVjIHJlY29tbWVuZHMgZG9pbmcgaXQuIEZv ciBUOSwgaWYgd2UNCj4gLQkgKiBkb24ndCBkbyB0aGlzLCB3ZSdsbCBlbmQgdXAgd2FpdGluZyBm b3IgdGhlIGJhY2tsaWdodCBvZmYgZGVsYXkNCj4gLQkgKiB0d2ljZTogb25jZSB3aGVuIHdlIGRv IHRoZSBtYW51YWwgc2xlZXAsIGFuZCBvbmNlIHdoZW4gd2UNCj4gZGlzYWJsZQ0KPiAtCSAqIHRo ZSBwYW5lbCBhbmQgd2FpdCBmb3IgdGhlIFBQX1NUQVRVUyBiaXQgdG8gYmVjb21lIHplcm8uDQo+ IC0JICovDQo+IC0JZmluYWwtPnQ4ID0gMTsNCj4gLQlmaW5hbC0+dDkgPSAxOw0KPiAtDQo+IC0J LyoNCj4gLQkgKiBIVyBoYXMgb25seSBhIDEwMG1zZWMgZ3JhbnVsYXJpdHkgZm9yIHQxMV90MTIg c28gcm91bmQgaXQgdXANCj4gLQkgKiBhY2NvcmRpbmdseS4NCj4gLQkgKi8NCj4gLQlmaW5hbC0+ dDExX3QxMiA9IHJvdW5kdXAoZmluYWwtPnQxMV90MTIsIDEwMCAqIDEwKTsNCj4gLX0NCj4gLQ0K PiAtc3RhdGljIHZvaWQNCj4gLWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3Jl Z2lzdGVycyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiAtCQkJCQkgICAgICBib29sIGZv cmNlX2Rpc2FibGVfdmRkKQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiAtCXUzMiBwcF9vbiwgcHBfb2ZmLCBwb3J0 X3NlbCA9IDA7DQo+IC0JaW50IGRpdiA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPnJhd2Nsa19m cmVxIC8gMTAwMDsNCj4gLQlzdHJ1Y3QgcHBzX3JlZ2lzdGVycyByZWdzOw0KPiAtCWVudW0gcG9y dCBwb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLnBvcnQ7DQo+IC0JY29uc3Qg c3RydWN0IGVkcF9wb3dlcl9zZXEgKnNlcSA9ICZpbnRlbF9kcC0+cHBzX2RlbGF5czsNCj4gLQ0K PiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOw0KPiAtDQo+IC0J aW50ZWxfcHBzX2dldF9yZWdpc3RlcnMoaW50ZWxfZHAsICZyZWdzKTsNCj4gLQ0KPiAtCS8qDQo+ IC0JICogT24gc29tZSBWTFYgbWFjaGluZXMgdGhlIEJJT1MgY2FuIGxlYXZlIHRoZSBWREQNCj4g LQkgKiBlbmFibGVkIGV2ZW4gb24gcG93ZXIgc2VxdWVuY2VycyB3aGljaCBhcmVuJ3QNCj4gLQkg KiBob29rZWQgdXAgdG8gYW55IHBvcnQuIFRoaXMgd291bGQgbWVzcyB1cCB0aGUNCj4gLQkgKiBw b3dlciBkb21haW4gdHJhY2tpbmcgdGhlIGZpcnN0IHRpbWUgd2UgcGljaw0KPiAtCSAqIG9uZSBv ZiB0aGVzZSBwb3dlciBzZXF1ZW5jZXJzIGZvciB1c2Ugc2luY2UNCj4gLQkgKiBlZHBfcGFuZWxf dmRkX29uKCkgd291bGQgbm90aWNlIHRoYXQgdGhlIFZERCB3YXMNCj4gLQkgKiBhbHJlYWR5IG9u IGFuZCB0aGVyZWZvcmUgd291bGRuJ3QgZ3JhYiB0aGUgcG93ZXINCj4gLQkgKiBkb21haW4gcmVm ZXJlbmNlLiBEaXNhYmxlIFZERCBmaXJzdCB0byBhdm9pZCB0aGlzLg0KPiAtCSAqIFRoaXMgYWxz byBhdm9pZHMgc3B1cmlvdXNseSB0dXJuaW5nIHRoZSBWREQgb24gYXMNCj4gLQkgKiBzb29uIGFz IHRoZSBuZXcgcG93ZXIgc2VxdWVuY2VyIGdldHMgaW5pdGlhbGl6ZWQuDQo+IC0JICovDQo+IC0J aWYgKGZvcmNlX2Rpc2FibGVfdmRkKSB7DQo+IC0JCXUzMiBwcCA9IGlsa19nZXRfcHBfY29udHJv bChpbnRlbF9kcCk7DQo+IC0NCj4gLQkJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sIHBwICYgUEFO RUxfUE9XRVJfT04sDQo+IC0JCQkgIlBhbmVsIHBvd2VyIGFscmVhZHkgb25cbiIpOw0KPiAtDQo+ IC0JCWlmIChwcCAmIEVEUF9GT1JDRV9WREQpDQo+IC0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwNCj4gLQkJCQkgICAgIlZERCBhbHJlYWR5IG9uLCBkaXNhYmxpbmcgZmlyc3RcbiIpOw0K PiAtDQo+IC0JCXBwICY9IH5FRFBfRk9SQ0VfVkREOw0KPiAtDQo+IC0JCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCByZWdzLnBwX2N0cmwsIHBwKTsNCj4gLQl9DQo+IC0NCj4gLQlwcF9vbiA9IFJF R19GSUVMRF9QUkVQKFBBTkVMX1BPV0VSX1VQX0RFTEFZX01BU0ssIHNlcS0NCj4gPnQxX3QzKSB8 DQo+IC0JCVJFR19GSUVMRF9QUkVQKFBBTkVMX0xJR0hUX09OX0RFTEFZX01BU0ssIHNlcS0NCj4g PnQ4KTsNCj4gLQlwcF9vZmYgPSBSRUdfRklFTERfUFJFUChQQU5FTF9MSUdIVF9PRkZfREVMQVlf TUFTSywgc2VxLQ0KPiA+dDkpIHwNCj4gLQkJUkVHX0ZJRUxEX1BSRVAoUEFORUxfUE9XRVJfRE9X Tl9ERUxBWV9NQVNLLA0KPiBzZXEtPnQxMCk7DQo+IC0NCj4gLQkvKiBIYXN3ZWxsIGRvZXNuJ3Qg aGF2ZSBhbnkgcG9ydCBzZWxlY3Rpb24gYml0cyBmb3IgdGhlIHBhbmVsDQo+IC0JICogcG93ZXIg c2VxdWVuY2VyIGFueSBtb3JlLiAqLw0KPiAtCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8 fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgew0KPiAtCQlwb3J0X3NlbCA9IFBBTkVMX1BPUlRf U0VMRUNUX1ZMVihwb3J0KTsNCj4gLQl9IGVsc2UgaWYgKEhBU19QQ0hfSUJYKGRldl9wcml2KSB8 fCBIQVNfUENIX0NQVChkZXZfcHJpdikpIHsNCj4gLQkJc3dpdGNoIChwb3J0KSB7DQo+IC0JCWNh c2UgUE9SVF9BOg0KPiAtCQkJcG9ydF9zZWwgPSBQQU5FTF9QT1JUX1NFTEVDVF9EUEE7DQo+IC0J CQlicmVhazsNCj4gLQkJY2FzZSBQT1JUX0M6DQo+IC0JCQlwb3J0X3NlbCA9IFBBTkVMX1BPUlRf U0VMRUNUX0RQQzsNCj4gLQkJCWJyZWFrOw0KPiAtCQljYXNlIFBPUlRfRDoNCj4gLQkJCXBvcnRf c2VsID0gUEFORUxfUE9SVF9TRUxFQ1RfRFBEOw0KPiAtCQkJYnJlYWs7DQo+IC0JCWRlZmF1bHQ6 DQo+IC0JCQlNSVNTSU5HX0NBU0UocG9ydCk7DQo+IC0JCQlicmVhazsNCj4gLQkJfQ0KPiAtCX0N Cj4gLQ0KPiAtCXBwX29uIHw9IHBvcnRfc2VsOw0KPiAtDQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIHJlZ3MucHBfb24sIHBwX29uKTsNCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cmVncy5wcF9vZmYsIHBwX29mZik7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIENvbXB1dGUgdGhlIGRp dmlzb3IgZm9yIHRoZSBwcCBjbG9jaywgc2ltcGx5IG1hdGNoIHRoZSBCc3BlYw0KPiBmb3JtdWxh Lg0KPiAtCSAqLw0KPiAtCWlmIChpOTE1X21taW9fcmVnX3ZhbGlkKHJlZ3MucHBfZGl2KSkgew0K PiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9kaXYsDQo+IC0NCj4gUkVHX0ZJ RUxEX1BSRVAoUFBfUkVGRVJFTkNFX0RJVklERVJfTUFTSywgKDEwMCAqIGRpdikgLyAyIC0gMSkg fA0KPiBSRUdfRklFTERfUFJFUChQQU5FTF9QT1dFUl9DWUNMRV9ERUxBWV9NQVNLLA0KPiBESVZf Uk9VTkRfVVAoc2VxLT50MTFfdDEyLCAxMDAwKSkpOw0KPiAtCX0gZWxzZSB7DQo+IC0JCXUzMiBw cF9jdGw7DQo+IC0NCj4gLQkJcHBfY3RsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5w cF9jdHJsKTsNCj4gLQkJcHBfY3RsICY9IH5CWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSzsNCj4g LQkJcHBfY3RsIHw9DQo+IFJFR19GSUVMRF9QUkVQKEJYVF9QT1dFUl9DWUNMRV9ERUxBWV9NQVNL LCBESVZfUk9VTkRfVVAoc2VxLQ0KPiA+dDExX3QxMiwgMTAwMCkpOw0KPiAtCQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgcmVncy5wcF9jdHJsLCBwcF9jdGwpOw0KPiAtCX0NCj4gLQ0KPiAtCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLA0KPiAtCQkgICAgInBhbmVsIHBvd2VyIHNlcXVlbmNl ciByZWdpc3RlciBzZXR0aW5nczogUFBfT04gJSN4LA0KPiBQUF9PRkYgJSN4LCBQUF9ESVYgJSN4 XG4iLA0KPiAtCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5wcF9vbiksDQo+IC0J CSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29mZiksDQo+IC0JCSAgICBpOTE1 X21taW9fcmVnX3ZhbGlkKHJlZ3MucHBfZGl2KSA/DQo+IC0JCSAgICBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWdzLnBwX2RpdikgOg0KPiAtCQkgICAgKGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZ3MucHBfY3RybCkgJg0KPiBCWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSykpOw0KPiAtfQ0K PiAtDQo+IC1zdGF0aWMgdm9pZCBpbnRlbF9kcF9wcHNfaW5pdChzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRw X3RvX2k5MTUoaW50ZWxfZHApOw0KPiAtDQo+IC0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYp IHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7DQo+IC0JCXZsdl9pbml0aWFsX3Bvd2VyX3Nl cXVlbmNlcl9zZXR1cChpbnRlbF9kcCk7DQo+IC0JfSBlbHNlIHsNCj4gLQkJaW50ZWxfZHBfaW5p dF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOw0KPiAtCQlpbnRlbF9kcF9pbml0X3Bh bmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoaW50ZWxfZHAsDQo+IGZhbHNlKTsNCj4gLQl9 DQo+IC19DQo+IC0NCj4gIC8qKg0KPiAgICogaW50ZWxfZHBfc2V0X2RycnNfc3RhdGUgLSBwcm9n cmFtIHJlZ2lzdGVycyBmb3IgUlIgc3dpdGNoIHRvIHRha2UgZWZmZWN0DQo+ICAgKiBAZGV2X3By aXY6IGk5MTUgZGV2aWNlDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2RwLmgNCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rw LmgNCj4gaW5kZXggYjg3MWEwOWI2OTAxLi44N2FjZTVkN2Y0NDcgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaA0KPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmgNCj4gQEAgLTY5LDE1ICs2OSwxMSBAQCBlbnVt IGlycXJldHVybiBpbnRlbF9kcF9ocGRfcHVsc2Uoc3RydWN0DQo+IGludGVsX2RpZ2l0YWxfcG9y dCAqZGlnX3BvcnQsDQo+ICB2b2lkIGludGVsX2VkcF9iYWNrbGlnaHRfb24oY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsDQo+ICAJCQkgICAgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpOw0KPiAgdm9pZCBpbnRlbF9lZHBfYmFja2xp Z2h0X29mZihjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZQ0KPiAqY29ubl9zdGF0ZSk7 DQo+IC12b2lkIGludGVsX2VkcF9wYW5lbF92ZGRfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9k cCk7DQo+IC12b2lkIGludGVsX2VkcF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KTsNCj4gLXZvaWQgaW50ZWxfZWRwX3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KTsNCj4gIHZvaWQgaW50ZWxfZHBfbXN0X3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KTsNCj4gIHZvaWQgaW50ZWxfZHBfbXN0X3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOw0KPiAgaW50IGludGVsX2RwX21heF9saW5rX3JhdGUoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCk7DQo+ICBpbnQgaW50ZWxfZHBfbWF4X2xhbmVfY291bnQoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCk7DQo+ICBpbnQgaW50ZWxfZHBfcmF0ZV9zZWxlY3Qoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IHJhdGUpOw0KPiAtdm9pZCBpbnRlbF9wb3dlcl9z ZXF1ZW5jZXJfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsNCj4gIHUz MiBpbnRlbF9kcF9wYWNrX2F1eChjb25zdCB1OCAqc3JjLCBpbnQgc3JjX2J5dGVzKTsNCj4gDQo+ ICB2b2lkIGludGVsX2VkcF9kcnJzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0K PiBAQCAtMTQzLDUgKzEzOSw2IEBAIGJvb2wgaW50ZWxfZHBfaW5pdGlhbF9mYXN0c2V0X2NoZWNr KHN0cnVjdA0KPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLA0KPiAgCQkJCSAgICBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7DQo+ICB2b2lkIGludGVsX2RwX3N5bmNfc3RhdGUo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsDQo+ICAJCQkgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOw0KPiArY29uc3Qgc3RydWN0IGRwbGwgKnZsdl9nZXRf ZHBsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7DQo+IA0KPiAgI2VuZGlmIC8qIF9f SU5URUxfRFBfSF9fICovDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX3Bwcy5jDQo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9w cHMuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmNmZTM0 NzA3NjAzMQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfcHBzLmMNCj4gQEAgLTAsMCArMSwxMzM3IEBADQo+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUDQo+ICsvKg0KPiArICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwg Q29ycG9yYXRpb24NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCINCj4gKyNp bmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiDQo+ICsjaW5jbHVkZSAiaW50ZWxfZHAuaCIN Cj4gKyNpbmNsdWRlICJpbnRlbF9wcHMuaCINCj4gKw0KPiArc3RhdGljIHZvaWQgdmx2X3N0ZWFs X3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ ICsJCQkJICAgICAgZW51bSBwaXBlIHBpcGUpOw0KPiArc3RhdGljIHZvaWQNCj4gK2ludGVsX2Rw X2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOw0K PiArc3RhdGljIHZvaWQNCj4gK2ludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3Jl Z2lzdGVycyhzdHJ1Y3QgaW50ZWxfZHANCj4gKmludGVsX2RwLA0KPiArCQkJCQkgICAgICBib29s IGZvcmNlX2Rpc2FibGVfdmRkKTsNCj4gKw0KPiAraW50ZWxfd2FrZXJlZl90IHBwc19sb2NrKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+ICsJaW50ZWxfd2FrZXJlZl90 IHdha2VyZWY7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFNlZSBpbnRlbF9wb3dlcl9zZXF1ZW5jZXJf cmVzZXQoKSB3aHkgd2UgbmVlZA0KPiArCSAqIGEgcG93ZXIgZG9tYWluIHJlZmVyZW5jZSBoZXJl Lg0KPiArCSAqLw0KPiArCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJp diwNCj4gKw0KPiBpbnRlbF9hdXhfcG93ZXJfZG9tYWluKGRwX3RvX2RpZ19wb3J0KGludGVsX2Rw KSkpOw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBwc19tdXRleCk7DQo+ICsNCj4g KwlyZXR1cm4gd2FrZXJlZjsNCj4gK30NCj4gKw0KPiAraW50ZWxfd2FrZXJlZl90IHBwc191bmxv Y2soc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50ZWxfd2FrZXJlZl90DQo+IHdha2VyZWYp DQo+ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkx NShpbnRlbF9kcCk7DQo+ICsNCj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5wcHNfbXV0ZXgp Ow0KPiArCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LA0KPiArDQo+IAlpbnRlbF9h dXhfcG93ZXJfZG9tYWluKGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKSksDQo+ICsJCQkJd2FrZXJl Zik7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt2bHZfcG93 ZXJfc2VxdWVuY2VyX2tpY2soc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gK3sNCj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsN Cj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0 KGludGVsX2RwKTsNCj4gKwllbnVtIHBpcGUgcGlwZSA9IGludGVsX2RwLT5wcHNfcGlwZTsNCj4g Kwlib29sIHBsbF9lbmFibGVkLCByZWxlYXNlX2NsX292ZXJyaWRlID0gZmFsc2U7DQo+ICsJZW51 bSBkcGlvX3BoeSBwaHkgPSBEUElPX1BIWShwaXBlKTsNCj4gKwllbnVtIGRwaW9fY2hhbm5lbCBj aCA9IHZsdl9waXBlX3RvX2NoYW5uZWwocGlwZSk7DQo+ICsJdTMyIERQOw0KPiArDQo+ICsJaWYg KGRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLA0KPiArCQkgICAgIGludGVsX2RlX3JlYWQoZGV2X3By aXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKSAmDQo+IERQX1BPUlRfRU4sDQo+ICsJCSAgICAgInNr aXBwaW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGtpY2sgZHVlIHRvDQo+IFtFTkNPREVSOiVk OiVzXSBiZWluZyBhY3RpdmVcbiIsDQo+ICsJCSAgICAgcGlwZV9uYW1lKHBpcGUpLCBkaWdfcG9y dC0+YmFzZS5iYXNlLmJhc2UuaWQsDQo+ICsJCSAgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1l KSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ ICsJCSAgICAia2lja2luZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNlciBmb3INCj4gW0VOQ09ERVI6 JWQ6JXNdXG4iLA0KPiArCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNl LmJhc2UuaWQsDQo+ICsJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOw0KPiArDQo+ICsJ LyogUHJlc2VydmUgdGhlIEJJT1MtY29tcHV0ZWQgZGV0ZWN0ZWQgYml0LiBUaGlzIGlzDQo+ICsJ ICogc3VwcG9zZWQgdG8gYmUgcmVhZC1vbmx5Lg0KPiArCSAqLw0KPiArCURQID0gaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpICYNCj4gRFBfREVURUNURUQ7DQo+ ICsJRFAgfD0gRFBfVk9MVEFHRV8wXzQgfCBEUF9QUkVfRU1QSEFTSVNfMDsNCj4gKwlEUCB8PSBE UF9QT1JUX1dJRFRIKDEpOw0KPiArCURQIHw9IERQX0xJTktfVFJBSU5fUEFUXzE7DQo+ICsNCj4g KwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpDQo+ICsJCURQIHw9IERQX1BJUEVfU0VMX0NI VihwaXBlKTsNCj4gKwllbHNlDQo+ICsJCURQIHw9IERQX1BJUEVfU0VMKHBpcGUpOw0KPiArDQo+ ICsJcGxsX2VuYWJsZWQgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEUExMKHBpcGUpKSAmDQo+ IERQTExfVkNPX0VOQUJMRTsNCj4gKw0KPiArCS8qDQo+ICsJICogVGhlIERQTEwgZm9yIHRoZSBw aXBlIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLg0KPiArCSAqIFNvIGVuYWJsZSB0 ZW1wb3JhcmlseSBpdCBpZiBpdCdzIG5vdCBhbHJlYWR5IGVuYWJsZWQuDQo+ICsJICovDQo+ICsJ aWYgKCFwbGxfZW5hYmxlZCkgew0KPiArCQlyZWxlYXNlX2NsX292ZXJyaWRlID0gSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikgJiYNCj4gKwkJCSFjaHZfcGh5X3Bvd2VyZ2F0ZV9jaChkZXZfcHJpdiwg cGh5LCBjaCwgdHJ1ZSk7DQo+ICsNCj4gKwkJaWYgKHZsdl9mb3JjZV9wbGxfb24oZGV2X3ByaXYs IHBpcGUsIHZsdl9nZXRfZHBsbChkZXZfcHJpdikpKQ0KPiB7DQo+ICsJCQlkcm1fZXJyKCZkZXZf cHJpdi0+ZHJtLA0KPiArCQkJCSJGYWlsZWQgdG8gZm9yY2Ugb24gcGxsIGZvciBwaXBlICVjIVxu IiwNCj4gKwkJCQlwaXBlX25hbWUocGlwZSkpOw0KPiArCQkJcmV0dXJuOw0KPiArCQl9DQo+ICsJ fQ0KPiArDQo+ICsJLyoNCj4gKwkgKiBTaW1pbGFyIG1hZ2ljIGFzIGluIGludGVsX2RwX2VuYWJs ZV9wb3J0KCkuDQo+ICsJICogV2UgX211c3RfIGRvIHRoaXMgcG9ydCBlbmFibGUgKyBkaXNhYmxl IHRyaWNrDQo+ICsJICogdG8gbWFrZSB0aGlzIHBvd2VyIHNlcXVlbmNlciBsb2NrIG9udG8gdGhl IHBvcnQuDQo+ICsJICogT3RoZXJ3aXNlIGV2ZW4gVkREIGZvcmNlIGJpdCB3b24ndCB3b3JrLg0K PiArCSAqLw0KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3Jl ZywgRFApOw0KPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91 dHB1dF9yZWcpOw0KPiArDQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5v dXRwdXRfcmVnLCBEUCB8IERQX1BPUlRfRU4pOw0KPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChk ZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOw0KPiArDQo+ICsJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCAmDQo+IH5EUF9QT1JUX0VOKTsNCj4g KwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsN Cj4gKw0KPiArCWlmICghcGxsX2VuYWJsZWQpIHsNCj4gKwkJdmx2X2ZvcmNlX3BsbF9vZmYoZGV2 X3ByaXYsIHBpcGUpOw0KPiArDQo+ICsJCWlmIChyZWxlYXNlX2NsX292ZXJyaWRlKQ0KPiArCQkJ Y2h2X3BoeV9wb3dlcmdhdGVfY2goZGV2X3ByaXYsIHBoeSwgY2gsIGZhbHNlKTsNCj4gKwl9DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBlbnVtIHBpcGUgdmx2X2ZpbmRfZnJlZV9wcHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiArew0KPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVy ICplbmNvZGVyOw0KPiArCXVuc2lnbmVkIGludCBwaXBlcyA9ICgxIDw8IFBJUEVfQSkgfCAoMSA8 PCBQSVBFX0IpOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBXZSBkb24ndCBoYXZlIHBvd2VyIHNlcXVl bmNlciBjdXJyZW50bHkuDQo+ICsJICogUGljayBvbmUgdGhhdCdzIG5vdCB1c2VkIGJ5IG90aGVy IHBvcnRzLg0KPiArCSAqLw0KPiArCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBl bmNvZGVyKSB7DQo+ICsJCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxf ZHAoZW5jb2Rlcik7DQo+ICsNCj4gKwkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVU X0VEUCkgew0KPiArCQkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+ICsJCQkJICAgIGlu dGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJUEUNCj4gJiYNCj4gKwkJCQkgICAgaW50 ZWxfZHAtPmFjdGl2ZV9waXBlICE9DQo+ICsJCQkJICAgIGludGVsX2RwLT5wcHNfcGlwZSk7DQo+ ICsNCj4gKwkJCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJRF9QSVBFKQ0KPiArCQkJ CXBpcGVzICY9IH4oMSA8PCBpbnRlbF9kcC0+cHBzX3BpcGUpOw0KPiArCQl9IGVsc2Ugew0KPiAr CQkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+ICsJCQkJICAgIGludGVsX2RwLT5wcHNf cGlwZSAhPSBJTlZBTElEX1BJUEUpOw0KPiArDQo+ICsJCQlpZiAoaW50ZWxfZHAtPmFjdGl2ZV9w aXBlICE9IElOVkFMSURfUElQRSkNCj4gKwkJCQlwaXBlcyAmPSB+KDEgPDwgaW50ZWxfZHAtPmFj dGl2ZV9waXBlKTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmIChwaXBlcyA9PSAwKQ0KPiAr CQlyZXR1cm4gSU5WQUxJRF9QSVBFOw0KPiArDQo+ICsJcmV0dXJuIGZmcyhwaXBlcykgLSAxOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgZW51bSBwaXBlDQo+ICt2bHZfcG93ZXJfc2VxdWVuY2VyX3Bp cGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gKwlzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsNCj4g KwllbnVtIHBpcGUgcGlwZTsNCj4gKw0KPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2 LT5wcHNfbXV0ZXgpOw0KPiArDQo+ICsJLyogV2Ugc2hvdWxkIG5ldmVyIGxhbmQgaGVyZSB3aXRo IHJlZ3VsYXIgRFAgcG9ydHMgKi8NCj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIWlu dGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpOw0KPiArDQo+ICsJZHJtX1dBUk5fT04oJmRldl9wcml2 LT5kcm0sIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPQ0KPiBJTlZBTElEX1BJUEUgJiYNCj4gKwkJ ICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBpbnRlbF9kcC0+cHBzX3BpcGUpOw0KPiArDQo+ ICsJaWYgKGludGVsX2RwLT5wcHNfcGlwZSAhPSBJTlZBTElEX1BJUEUpDQo+ICsJCXJldHVybiBp bnRlbF9kcC0+cHBzX3BpcGU7DQo+ICsNCj4gKwlwaXBlID0gdmx2X2ZpbmRfZnJlZV9wcHMoZGV2 X3ByaXYpOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBEaWRuJ3QgZmluZCBvbmUuIFRoaXMgc2hvdWxk IG5vdCBoYXBwZW4gc2luY2UgdGhlcmUNCj4gKwkgKiBhcmUgdHdvIHBvd2VyIHNlcXVlbmNlcnMg YW5kIHVwIHRvIHR3byBlRFAgcG9ydHMuDQo+ICsJICovDQo+ICsJaWYgKGRybV9XQVJOX09OKCZk ZXZfcHJpdi0+ZHJtLCBwaXBlID09IElOVkFMSURfUElQRSkpDQo+ICsJCXBpcGUgPSBQSVBFX0E7 DQo+ICsNCj4gKwl2bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2VyKGRldl9wcml2LCBwaXBlKTsNCj4g KwlpbnRlbF9kcC0+cHBzX3BpcGUgPSBwaXBlOw0KPiArDQo+ICsJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sDQo+ICsJCSAgICAicGlja2VkIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZvcg0K PiBbRU5DT0RFUjolZDolc11cbiIsDQo+ICsJCSAgICBwaXBlX25hbWUoaW50ZWxfZHAtPnBwc19w aXBlKSwNCj4gKwkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwNCj4gKwkJICAgIGRp Z19wb3J0LT5iYXNlLmJhc2UubmFtZSk7DQo+ICsNCj4gKwkvKiBpbml0IHBvd2VyIHNlcXVlbmNl ciBvbiB0aGlzIHBpcGUgYW5kIHBvcnQgKi8NCj4gKwlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2Vy X3NlcXVlbmNlcihpbnRlbF9kcCk7DQo+ICsJaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1 ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCB0cnVlKTsNCj4gKw0KPiArCS8qDQo+ICsJICogRXZl biB2ZGQgZm9yY2UgZG9lc24ndCB3b3JrIHVudGlsIHdlJ3ZlIG1hZGUNCj4gKwkgKiB0aGUgcG93 ZXIgc2VxdWVuY2VyIGxvY2sgaW4gb24gdGhlIHBvcnQuDQo+ICsJICovDQo+ICsJdmx2X3Bvd2Vy X3NlcXVlbmNlcl9raWNrKGludGVsX2RwKTsNCj4gKw0KPiArCXJldHVybiBpbnRlbF9kcC0+cHBz X3BpcGU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2J4dF9wb3dlcl9zZXF1ZW5jZXJf aWR4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+ICsJaW50IGJhY2ts aWdodF9jb250cm9sbGVyID0gZGV2X3ByaXYtPnZidC5iYWNrbGlnaHQuY29udHJvbGxlcjsNCj4g Kw0KPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOw0KPiArDQo+ ICsJLyogV2Ugc2hvdWxkIG5ldmVyIGxhbmQgaGVyZSB3aXRoIHJlZ3VsYXIgRFAgcG9ydHMgKi8N Cj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIWludGVsX2RwX2lzX2VkcChpbnRlbF9k cCkpOw0KPiArDQo+ICsJaWYgKCFpbnRlbF9kcC0+cHBzX3Jlc2V0KQ0KPiArCQlyZXR1cm4gYmFj a2xpZ2h0X2NvbnRyb2xsZXI7DQo+ICsNCj4gKwlpbnRlbF9kcC0+cHBzX3Jlc2V0ID0gZmFsc2U7 DQo+ICsNCj4gKwkvKg0KPiArCSAqIE9ubHkgdGhlIEhXIG5lZWRzIHRvIGJlIHJlcHJvZ3JhbW1l ZCwgdGhlIFNXIHN0YXRlIGlzIGZpeGVkDQo+IGFuZA0KPiArCSAqIGhhcyBiZWVuIHNldHVwIGR1 cmluZyBjb25uZWN0b3IgaW5pdC4NCj4gKwkgKi8NCj4gKwlpbnRlbF9kcF9pbml0X3BhbmVsX3Bv d2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoaW50ZWxfZHAsIGZhbHNlKTsNCj4gKw0KPiArCXJldHVy biBiYWNrbGlnaHRfY29udHJvbGxlcjsNCj4gK30NCj4gKw0KPiArdHlwZWRlZiBib29sICgqdmx2 X3BpcGVfY2hlY2spKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gKwkJCSAg ICAgICBlbnVtIHBpcGUgcGlwZSk7DQo+ICsNCj4gK3N0YXRpYyBib29sIHZsdl9waXBlX2hhc19w cF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ICsJCQkgICAgICAgZW51 bSBwaXBlIHBpcGUpDQo+ICt7DQo+ICsJcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBQ X1NUQVRVUyhwaXBlKSkgJiBQUF9PTjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgdmx2X3Bp cGVfaGFzX3ZkZF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ICsJCQkJ ZW51bSBwaXBlIHBpcGUpDQo+ICt7DQo+ICsJcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IFBQX0NPTlRST0wocGlwZSkpICYNCj4gRURQX0ZPUkNFX1ZERDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGJvb2wgdmx2X3BpcGVfYW55KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwN Cj4gKwkJCSBlbnVtIHBpcGUgcGlwZSkNCj4gK3sNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGVudW0gcGlwZQ0KPiArdmx2X2luaXRpYWxfcHBzX3BpcGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiArCQkgICAgIGVudW0gcG9ydCBwb3J0LA0KPiAr CQkgICAgIHZsdl9waXBlX2NoZWNrIHBpcGVfY2hlY2spDQo+ICt7DQo+ICsJZW51bSBwaXBlIHBp cGU7DQo+ICsNCj4gKwlmb3IgKHBpcGUgPSBQSVBFX0E7IHBpcGUgPD0gUElQRV9COyBwaXBlKysp IHsNCj4gKwkJdTMyIHBvcnRfc2VsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gUFBfT05f REVMQVlTKHBpcGUpKSAmDQo+ICsJCQlQQU5FTF9QT1JUX1NFTEVDVF9NQVNLOw0KPiArDQo+ICsJ CWlmIChwb3J0X3NlbCAhPSBQQU5FTF9QT1JUX1NFTEVDVF9WTFYocG9ydCkpDQo+ICsJCQljb250 aW51ZTsNCj4gKw0KPiArCQlpZiAoIXBpcGVfY2hlY2soZGV2X3ByaXYsIHBpcGUpKQ0KPiArCQkJ Y29udGludWU7DQo+ICsNCj4gKwkJcmV0dXJuIHBpcGU7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJu IElOVkFMSURfUElQRTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Zsdl9pbml0aWFs X3Bvd2VyX3NlcXVlbmNlcl9zZXR1cChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiArew0K PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxf ZHApOw0KPiArCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGln X3BvcnQoaW50ZWxfZHApOw0KPiArCWVudW0gcG9ydCBwb3J0ID0gZGlnX3BvcnQtPmJhc2UucG9y dDsNCj4gKw0KPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOw0K PiArDQo+ICsJLyogdHJ5IHRvIGZpbmQgYSBwaXBlIHdpdGggdGhpcyBwb3J0IHNlbGVjdGVkICov DQo+ICsJLyogZmlyc3QgcGljayBvbmUgd2hlcmUgdGhlIHBhbmVsIGlzIG9uICovDQo+ICsJaW50 ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRpYWxfcHBzX3BpcGUoZGV2X3ByaXYsIHBvcnQsDQo+ ICsJCQkJCQkgIHZsdl9waXBlX2hhc19wcF9vbik7DQo+ICsJLyogZGlkbid0IGZpbmQgb25lPyBw aWNrIG9uZSB3aGVyZSB2ZGQgaXMgb24gKi8NCj4gKwlpZiAoaW50ZWxfZHAtPnBwc19waXBlID09 IElOVkFMSURfUElQRSkNCj4gKwkJaW50ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRpYWxfcHBz X3BpcGUoZGV2X3ByaXYsIHBvcnQsDQo+ICsNCj4gdmx2X3BpcGVfaGFzX3ZkZF9vbik7DQo+ICsJ LyogZGlkbid0IGZpbmQgb25lPyBwaWNrIG9uZSB3aXRoIGp1c3QgdGhlIGNvcnJlY3QgcG9ydCAq Lw0KPiArCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgPT0gSU5WQUxJRF9QSVBFKQ0KPiArCQlpbnRl bF9kcC0+cHBzX3BpcGUgPSB2bHZfaW5pdGlhbF9wcHNfcGlwZShkZXZfcHJpdiwgcG9ydCwNCj4g KwkJCQkJCQkgIHZsdl9waXBlX2FueSk7DQo+ICsNCj4gKwkvKiBkaWRuJ3QgZmluZCBvbmU/IGp1 c3QgbGV0IHZsdl9wb3dlcl9zZXF1ZW5jZXJfcGlwZSgpIHBpY2sgb25lDQo+IHdoZW4gbmVlZGVk ICovDQo+ICsJaWYgKGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpIHsNCj4gKwkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ICsJCQkgICAgIm5vIGluaXRpYWwgcG93ZXIg c2VxdWVuY2VyIGZvcg0KPiBbRU5DT0RFUjolZDolc11cbiIsDQo+ICsJCQkgICAgZGlnX3BvcnQt PmJhc2UuYmFzZS5iYXNlLmlkLA0KPiArCQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7 DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwNCj4gKwkJICAgICJpbml0aWFsIHBvd2VyIHNlcXVlbmNlciBmb3IgW0VOQ09ERVI6JWQ6JXNd OiBwaXBlDQo+ICVjXG4iLA0KPiArCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLA0K PiArCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lLA0KPiArCQkgICAgcGlwZV9uYW1lKGlu dGVsX2RwLT5wcHNfcGlwZSkpOw0KPiArDQo+ICsJaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9z ZXF1ZW5jZXIoaW50ZWxfZHApOw0KPiArCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVu Y2VyX3JlZ2lzdGVycyhpbnRlbF9kcCwgZmFsc2UpOw0KPiArfQ0KPiArDQo+ICt2b2lkIGludGVs X3Bvd2VyX3NlcXVlbmNlcl9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp DQo+ICt7DQo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7DQo+ICsNCj4gKwlpZiAo ZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+ICsJCQkhKElTX1ZBTExFWVZJRVcoZGV2X3By aXYpIHx8DQo+ICsJCQkgIElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8DQo+ICsJCQkgIElTX0dF TjlfTFAoZGV2X3ByaXYpKSkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCS8qDQo+ICsJICogV2Ug Y2FuJ3QgZ3JhYiBwcHNfbXV0ZXggaGVyZSBkdWUgdG8gZGVhZGxvY2sgd2l0aA0KPiBwb3dlcl9k b21haW4NCj4gKwkgKiBtdXRleCB3aGVuIHBvd2VyX2RvbWFpbiBmdW5jdGlvbnMgYXJlIGNhbGxl ZCB3aGlsZSBob2xkaW5nDQo+IHBwc19tdXRleC4NCj4gKwkgKiBUaGF0IGFsc28gbWVhbnMgdGhh dCBpbiBvcmRlciB0byB1c2UgcHBzX3BpcGUgdGhlIGNvZGUgbmVlZHMgdG8NCj4gKwkgKiBob2xk IGJvdGggYSBwb3dlciBkb21haW4gcmVmZXJlbmNlIGFuZCBwcHNfbXV0ZXgsIGFuZCB0aGUNCj4g cG93ZXIgZG9tYWluDQo+ICsJICogcmVmZXJlbmNlIGdldC9wdXQgbXVzdCBiZSBkb25lIHdoaWxl IF9ub3RfIGhvbGRpbmcgcHBzX211dGV4Lg0KPiArCSAqIHBwc197bG9jayx1bmxvY2t9KCkgZG8g dGhlc2Ugc3RlcHMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIsIHNvIG9uZQ0KPiArCSAqIHNob3VsZCB1 c2UgdGhlbSBhbHdheXMuDQo+ICsJICovDQo+ICsNCj4gKwlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2 X3ByaXYtPmRybSwgZW5jb2Rlcikgew0KPiArCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0g ZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOw0KPiArDQo+ICsJCWRybV9XQVJOX09OKCZkZXZfcHJp di0+ZHJtLA0KPiArCQkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJUEUp Ow0KPiArDQo+ICsJCWlmIChlbmNvZGVyLT50eXBlICE9IElOVEVMX09VVFBVVF9FRFApDQo+ICsJ CQljb250aW51ZTsNCj4gKw0KPiArCQlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpDQo+ICsJCQlp bnRlbF9kcC0+cHBzX3Jlc2V0ID0gdHJ1ZTsNCj4gKwkJZWxzZQ0KPiArCQkJaW50ZWxfZHAtPnBw c19waXBlID0gSU5WQUxJRF9QSVBFOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RydWN0IHBwc19y ZWdpc3RlcnMgew0KPiArCWk5MTVfcmVnX3QgcHBfY3RybDsNCj4gKwlpOTE1X3JlZ190IHBwX3N0 YXQ7DQo+ICsJaTkxNV9yZWdfdCBwcF9vbjsNCj4gKwlpOTE1X3JlZ190IHBwX29mZjsNCj4gKwlp OTE1X3JlZ190IHBwX2RpdjsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGludGVsX3Bwc19n ZXRfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsDQo+ICsJCQkJICAgIHN0cnVj dCBwcHNfcmVnaXN0ZXJzICpyZWdzKQ0KPiArew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiArCWludCBwcHNfaWR4ID0gMDsN Cj4gKw0KPiArCW1lbXNldChyZWdzLCAwLCBzaXplb2YoKnJlZ3MpKTsNCj4gKw0KPiArCWlmIChJ U19HRU45X0xQKGRldl9wcml2KSkNCj4gKwkJcHBzX2lkeCA9IGJ4dF9wb3dlcl9zZXF1ZW5jZXJf aWR4KGludGVsX2RwKTsNCj4gKwllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJ U19DSEVSUllWSUVXKGRldl9wcml2KSkNCj4gKwkJcHBzX2lkeCA9IHZsdl9wb3dlcl9zZXF1ZW5j ZXJfcGlwZShpbnRlbF9kcCk7DQo+ICsNCj4gKwlyZWdzLT5wcF9jdHJsID0gUFBfQ09OVFJPTChw cHNfaWR4KTsNCj4gKwlyZWdzLT5wcF9zdGF0ID0gUFBfU1RBVFVTKHBwc19pZHgpOw0KPiArCXJl Z3MtPnBwX29uID0gUFBfT05fREVMQVlTKHBwc19pZHgpOw0KPiArCXJlZ3MtPnBwX29mZiA9IFBQ X09GRl9ERUxBWVMocHBzX2lkeCk7DQo+ICsNCj4gKwkvKiBDeWNsZSBkZWxheSBtb3ZlZCBmcm9t IFBQX0RJVklTT1IgdG8gUFBfQ09OVFJPTCAqLw0KPiArCWlmIChJU19HRU45X0xQKGRldl9wcml2 KSB8fCBJTlRFTF9QQ0hfVFlQRShkZXZfcHJpdikgPj0NCj4gUENIX0NOUCkNCj4gKwkJcmVncy0+ cHBfZGl2ID0gSU5WQUxJRF9NTUlPX1JFRzsNCj4gKwllbHNlDQo+ICsJCXJlZ3MtPnBwX2RpdiA9 IFBQX0RJVklTT1IocHBzX2lkeCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpOTE1X3JlZ190DQo+ ICtfcHBfY3RybF9yZWcoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gK3sNCj4gKwlzdHJ1 Y3QgcHBzX3JlZ2lzdGVycyByZWdzOw0KPiArDQo+ICsJaW50ZWxfcHBzX2dldF9yZWdpc3RlcnMo aW50ZWxfZHAsICZyZWdzKTsNCj4gKw0KPiArCXJldHVybiByZWdzLnBwX2N0cmw7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBpOTE1X3JlZ190DQo+ICtfcHBfc3RhdF9yZWcoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgcHBzX3JlZ2lzdGVycyByZWdzOw0KPiArDQo+ ICsJaW50ZWxfcHBzX2dldF9yZWdpc3RlcnMoaW50ZWxfZHAsICZyZWdzKTsNCj4gKw0KPiArCXJl dHVybiByZWdzLnBwX3N0YXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGVkcF9oYXZlX3Bh bmVsX3Bvd2VyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7DQo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+ICsNCj4g Kwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsNCj4gKw0KPiArCWlm ICgoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpICYm DQo+ICsJICAgIGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpDQo+ICsJCXJldHVy biBmYWxzZTsNCj4gKw0KPiArCXJldHVybiAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgX3BwX3N0 YXRfcmVnKGludGVsX2RwKSkgJiBQUF9PTikNCj4gIT0gMDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGJvb2wgZWRwX2hhdmVfcGFuZWxfdmRkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7 DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRl bF9kcCk7DQo+ICsNCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4 KTsNCj4gKw0KPiArCWlmICgoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklF VyhkZXZfcHJpdikpICYmDQo+ICsJICAgIGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJ UEUpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCXJldHVybiBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCBfcHBfY3RybF9yZWcoaW50ZWxfZHApKSAmDQo+IEVEUF9GT1JDRV9WREQ7DQo+ICt9 DQo+ICsNCj4gK3ZvaWQgaW50ZWxfZHBfY2hlY2tfZWRwKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApDQo+ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9f aTkxNShpbnRlbF9kcCk7DQo+ICsNCj4gKwlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkp DQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmICghZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxf ZHApICYmDQo+ICFlZHBfaGF2ZV9wYW5lbF92ZGQoaW50ZWxfZHApKSB7DQo+ICsJCWRybV9XQVJO KCZkZXZfcHJpdi0+ZHJtLCAxLA0KPiArCQkJICJlRFAgcG93ZXJlZCBvZmYgd2hpbGUgYXR0ZW1w dGluZyBhdXggY2hhbm5lbA0KPiBjb21tdW5pY2F0aW9uLlxuIik7DQo+ICsJCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiU3RhdHVzIDB4JTA4eCBDb250cm9sDQo+IDB4JTA4eFxuIiwNCj4g KwkJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfc3RhdF9yZWcoaW50ZWxfZHApKSwN Cj4gKwkJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfY3RybF9yZWcoaW50ZWxfZHAp KSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICsjZGVmaW5lIElETEVfT05fTUFTSwkJKFBQX09OIHwg UFBfU0VRVUVOQ0VfTUFTSyB8IDANCj4gfCBQUF9TRVFVRU5DRV9TVEFURV9NQVNLKQ0KPiArI2Rl ZmluZSBJRExFX09OX1ZBTFVFICAgCShQUF9PTiB8IFBQX1NFUVVFTkNFX05PTkUgfCAwDQo+IHwg UFBfU0VRVUVOQ0VfU1RBVEVfT05fSURMRSkNCj4gKw0KPiArI2RlZmluZSBJRExFX09GRl9NQVNL CQkoUFBfT04gfCBQUF9TRVFVRU5DRV9NQVNLIHwgMA0KPiB8IDApDQo+ICsjZGVmaW5lIElETEVf T0ZGX1ZBTFVFCQkoMCAgICAgfCBQUF9TRVFVRU5DRV9OT05FIHwgMA0KPiB8IDApDQo+ICsNCj4g KyNkZWZpbmUgSURMRV9DWUNMRV9NQVNLCQkoUFBfT04gfCBQUF9TRVFVRU5DRV9NQVNLIHwNCj4g UFBfQ1lDTEVfREVMQVlfQUNUSVZFIHwgUFBfU0VRVUVOQ0VfU1RBVEVfTUFTSykNCj4gKyNkZWZp bmUgSURMRV9DWUNMRV9WQUxVRQkoMCAgICAgfCBQUF9TRVFVRU5DRV9OT05FIHwgMA0KPiB8IFBQ X1NFUVVFTkNFX1NUQVRFX09GRl9JRExFKQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpbnRlbF9wcHNf dmVyaWZ5X3N0YXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOw0KPiArDQo+ICtzdGF0aWMg dm9pZCB3YWl0X3BhbmVsX3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiArCQkJ CSAgICAgICB1MzIgbWFzaywNCj4gKwkJCQkgICAgICAgdTMyIHZhbHVlKQ0KPiArew0KPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0K PiArCWk5MTVfcmVnX3QgcHBfc3RhdF9yZWcsIHBwX2N0cmxfcmVnOw0KPiArDQo+ICsJbG9ja2Rl cF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7DQo+ICsNCj4gKwlpbnRlbF9wcHNf dmVyaWZ5X3N0YXRlKGludGVsX2RwKTsNCj4gKw0KPiArCXBwX3N0YXRfcmVnID0gX3BwX3N0YXRf cmVnKGludGVsX2RwKTsNCj4gKwlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7 DQo+ICsNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4gKwkJICAgICJtYXNrICUw OHggdmFsdWUgJTA4eCBzdGF0dXMgJTA4eCBjb250cm9sICUwOHhcbiIsDQo+ICsJCSAgICBtYXNr LCB2YWx1ZSwNCj4gKwkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVnKSwN Cj4gKwkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7DQo+ICsNCj4g KwlpZiAoaW50ZWxfZGVfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIHBwX3N0YXRfcmVnLA0K PiArCQkJCSAgICAgICBtYXNrLCB2YWx1ZSwgNTAwMCkpDQo+ICsJCWRybV9lcnIoJmRldl9wcml2 LT5kcm0sDQo+ICsJCQkiUGFuZWwgc3RhdHVzIHRpbWVvdXQ6IHN0YXR1cyAlMDh4IGNvbnRyb2wg JTA4eFxuIiwNCj4gKwkJCWludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVnKSwNCj4g KwkJCWludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7DQo+ICsNCj4gKwlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIldhaXQgY29tcGxldGVcbiIpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCB3YWl0X3BhbmVsX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVs X2RwKTsNCj4gKw0KPiArCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5lbCBw b3dlciBvblxuIik7DQo+ICsJd2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxfZHAsIElETEVfT05fTUFT SywgSURMRV9PTl9WQUxVRSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHdhaXRfcGFuZWxf b2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gKw0KPiArCWRybV9kYmdf a21zKCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5lbCBwb3dlciBvZmYgdGltZVxuIik7DQo+ICsJ d2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxfZHAsIElETEVfT0ZGX01BU0ssIElETEVfT0ZGX1ZBTFVF KTsNCj4gK30NCj4gKw0KPiArdm9pZCB3YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApDQo+ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gKwlrdGltZV90IHBhbmVsX3Bvd2VyX29uX3RpbWU7 DQo+ICsJczY0IHBhbmVsX3Bvd2VyX29mZl9kdXJhdGlvbjsNCj4gKw0KPiArCWRybV9kYmdfa21z KCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5lbCBwb3dlciBjeWNsZVxuIik7DQo+ICsNCj4gKwkv KiB0YWtlIHRoZSBkaWZmZXJlbmNlIG9mIGN1cnJyZW50IHRpbWUgYW5kIHBhbmVsIHBvd2VyIG9m ZiB0aW1lDQo+ICsJICogYW5kIHRoZW4gbWFrZSBwYW5lbCB3YWl0IGZvciB0MTFfdDEyIGlmIG5l ZWRlZC4gKi8NCj4gKwlwYW5lbF9wb3dlcl9vbl90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lKCk7 DQo+ICsJcGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uID0NCj4ga3RpbWVfbXNfZGVsdGEocGFuZWxf cG93ZXJfb25fdGltZSwgaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lKTsNCj4gKw0KPiAr CS8qIFdoZW4gd2UgZGlzYWJsZSB0aGUgVkREIG92ZXJyaWRlIGJpdCBsYXN0IHdlIGhhdmUgdG8g ZG8gdGhlDQo+IG1hbnVhbA0KPiArCSAqIHdhaXQuICovDQo+ICsJaWYgKHBhbmVsX3Bvd2VyX29m Zl9kdXJhdGlvbiA8IChzNjQpaW50ZWxfZHAtDQo+ID5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSkN Cj4gKwkJd2FpdF9yZW1haW5pbmdfbXNfZnJvbV9qaWZmaWVzKGppZmZpZXMsDQo+ICsJCQkJICAg ICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSAtDQo+IHBhbmVsX3Bvd2VyX29m Zl9kdXJhdGlvbik7DQo+ICsNCj4gKwl3YWl0X3BhbmVsX3N0YXR1cyhpbnRlbF9kcCwgSURMRV9D WUNMRV9NQVNLLA0KPiBJRExFX0NZQ0xFX1ZBTFVFKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgd2FpdF9iYWNrbGlnaHRfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gK3sNCj4g Kwl3YWl0X3JlbWFpbmluZ19tc19mcm9tX2ppZmZpZXMoaW50ZWxfZHAtPmxhc3RfcG93ZXJfb24s DQo+ICsJCQkJICAgICAgIGludGVsX2RwLT5iYWNrbGlnaHRfb25fZGVsYXkpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBlZHBfd2FpdF9iYWNrbGlnaHRfb2ZmKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApDQo+ICt7DQo+ICsJd2FpdF9yZW1haW5pbmdfbXNfZnJvbV9qaWZmaWVzKGludGVs X2RwLT5sYXN0X2JhY2tsaWdodF9vZmYsDQo+ICsJCQkJICAgICAgIGludGVsX2RwLT5iYWNrbGln aHRfb2ZmX2RlbGF5KTsNCj4gK30NCj4gKw0KPiArLyogUmVhZCB0aGUgY3VycmVudCBwcF9jb250 cm9sIHZhbHVlLCB1bmxvY2tpbmcgdGhlIHJlZ2lzdGVyIGlmIGl0DQo+ICsgKiBpcyBsb2NrZWQN Cj4gKyAqLw0KPiArDQo+ICtzdGF0aWMgIHUzMiBpbGtfZ2V0X3BwX2NvbnRyb2woc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gKwl1MzIgY29udHJvbDsNCj4gKw0KPiAr CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOw0KPiArDQo+ICsJY29u dHJvbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9jdHJsX3JlZyhpbnRlbF9kcCkpOw0K PiArCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIUhBU19EREkoZGV2X3ByaXYpICYm DQo+ICsJCQkoY29udHJvbCAmIFBBTkVMX1VOTE9DS19NQVNLKSAhPQ0KPiBQQU5FTF9VTkxPQ0tf UkVHUykpIHsNCj4gKwkJY29udHJvbCAmPSB+UEFORUxfVU5MT0NLX01BU0s7DQo+ICsJCWNvbnRy b2wgfD0gUEFORUxfVU5MT0NLX1JFR1M7DQo+ICsJfQ0KPiArCXJldHVybiBjb250cm9sOw0KPiAr fQ0KPiArDQo+ICsvKg0KPiArICogTXVzdCBiZSBwYWlyZWQgd2l0aCBlZHBfcGFuZWxfdmRkX29m ZigpLg0KPiArICogTXVzdCBob2xkIHBwc19tdXRleCBhcm91bmQgdGhlIHdob2xlIG9uL29mZiBz ZXF1ZW5jZS4NCj4gKyAqIENhbiBiZSBuZXN0ZWQgd2l0aCBpbnRlbF9lZHBfcGFuZWxfdmRkX3tv bixvZmZ9KCkgY2FsbHMuDQo+ICsgKi8NCj4gK2Jvb2wgZWRwX3BhbmVsX3ZkZF9vbihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQ0KPiArew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiArCXN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOw0KPiArCXUzMiBwcDsN Cj4gKwlpOTE1X3JlZ190IHBwX3N0YXRfcmVnLCBwcF9jdHJsX3JlZzsNCj4gKwlib29sIG5lZWRf dG9fZGlzYWJsZSA9ICFpbnRlbF9kcC0+d2FudF9wYW5lbF92ZGQ7DQo+ICsNCj4gKwlsb2NrZGVw X2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsNCj4gKw0KPiArCWlmICghaW50ZWxf ZHBfaXNfZWRwKGludGVsX2RwKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJY2FuY2Vs X2RlbGF5ZWRfd29yaygmaW50ZWxfZHAtPnBhbmVsX3ZkZF93b3JrKTsNCj4gKwlpbnRlbF9kcC0+ d2FudF9wYW5lbF92ZGQgPSB0cnVlOw0KPiArDQo+ICsJaWYgKGVkcF9oYXZlX3BhbmVsX3ZkZChp bnRlbF9kcCkpDQo+ICsJCXJldHVybiBuZWVkX3RvX2Rpc2FibGU7DQo+ICsNCj4gKwlkcm1fV0FS Tl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPnZkZF93YWtlcmVmKTsNCj4gKwlpbnRlbF9k cC0+dmRkX3dha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwNCj4gKw0K PiAJaW50ZWxfYXV4X3Bvd2VyX2RvbWFpbihkaWdfcG9ydCkpOw0KPiArDQo+ICsJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJUdXJuaW5nIFtFTkNPREVSOiVkOiVzXSBWREQNCj4gb25cbiIs DQo+ICsJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsDQo+ICsJCSAgICBkaWdfcG9y dC0+YmFzZS5iYXNlLm5hbWUpOw0KPiArDQo+ICsJaWYgKCFlZHBfaGF2ZV9wYW5lbF9wb3dlcihp bnRlbF9kcCkpDQo+ICsJCXdhaXRfcGFuZWxfcG93ZXJfY3ljbGUoaW50ZWxfZHApOw0KPiArDQo+ ICsJcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOw0KPiArCXBwIHw9IEVEUF9GT1JD RV9WREQ7DQo+ICsNCj4gKwlwcF9zdGF0X3JlZyA9IF9wcF9zdGF0X3JlZyhpbnRlbF9kcCk7DQo+ ICsJcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOw0KPiArDQo+ICsJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxfcmVnLCBwcCk7DQo+ICsJaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7DQo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sICJQUF9TVEFUVVM6IDB4JTA4eA0KPiBQUF9DT05UUk9MOiAweCUwOHhcbiIsDQo+ICsJ CSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9zdGF0X3JlZyksDQo+ICsJCSAgICBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZykpOw0KPiArCS8qDQo+ICsJICogSWYgdGhl IHBhbmVsIHdhc24ndCBvbiwgZGVsYXkgYmVmb3JlIGFjY2Vzc2luZyBhdXggY2hhbm5lbA0KPiAr CSAqLw0KPiArCWlmICghZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApKSB7DQo+ICsJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLA0KPiArCQkJICAgICJbRU5DT0RFUjolZDolc10gcGFu ZWwgcG93ZXIgd2Fzbid0DQo+IGVuYWJsZWRcbiIsDQo+ICsJCQkgICAgZGlnX3BvcnQtPmJhc2Uu YmFzZS5iYXNlLmlkLA0KPiArCQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSk7DQo+ICsJ CW1zbGVlcChpbnRlbF9kcC0+cGFuZWxfcG93ZXJfdXBfZGVsYXkpOw0KPiArCX0NCj4gKw0KPiAr CXJldHVybiBuZWVkX3RvX2Rpc2FibGU7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBNdXN0IGJl IHBhaXJlZCB3aXRoIGludGVsX2VkcF9wYW5lbF92ZGRfb2ZmKCkgb3INCj4gKyAqIGludGVsX2Vk cF9wYW5lbF9vZmYoKS4NCj4gKyAqIE5lc3RlZCBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgYXJl IG5vdCBhbGxvd2VkIHNpbmNlDQo+ICsgKiB3ZSBkcm9wIHRoZSBsb2NrLiBDYWxsZXIgbXVzdCB1 c2Ugc29tZSBoaWdoZXIgbGV2ZWwNCj4gKyAqIGxvY2tpbmcgdG8gcHJldmVudCBuZXN0ZWQgY2Fs bHMgZnJvbSBvdGhlciB0aHJlYWRzLg0KPiArICovDQo+ICt2b2lkIGludGVsX2VkcF9wYW5lbF92 ZGRfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gK3sNCj4gKwlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsNCj4gKwlib29sIHZkZDsNCj4gKw0KPiArCWlmICghaW50ZWxfZHBfaXNfZWRw KGludGVsX2RwKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJdmRkID0gZmFsc2U7DQo+ICsJd2l0 aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikNCj4gKwkJdmRkID0gZWRwX3BhbmVsX3ZkZF9v bihpbnRlbF9kcCk7DQo+ICsJSTkxNV9TVEFURV9XQVJOKCF2ZGQsICJbRU5DT0RFUjolZDolc10g VkREIGFscmVhZHkNCj4gcmVxdWVzdGVkIG9uXG4iLA0KPiArCQkJZHBfdG9fZGlnX3BvcnQoaW50 ZWxfZHApLT5iYXNlLmJhc2UuYmFzZS5pZCwNCj4gKwkJCWRwX3RvX2RpZ19wb3J0KGludGVsX2Rw KS0+YmFzZS5iYXNlLm5hbWUpOw0KPiArfQ0KPiArDQo+ICt2b2lkIGVkcF9wYW5lbF92ZGRfb2Zm X3N5bmMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gKwlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9DQo+ICsJCWRwX3RvX2RpZ19wb3J0KGludGVs X2RwKTsNCj4gKwl1MzIgcHA7DQo+ICsJaTkxNV9yZWdfdCBwcF9zdGF0X3JlZywgcHBfY3RybF9y ZWc7DQo+ICsNCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsN Cj4gKw0KPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+d2FudF9wYW5l bF92ZGQpOw0KPiArDQo+ICsJaWYgKCFlZHBfaGF2ZV9wYW5lbF92ZGQoaW50ZWxfZHApKQ0KPiAr CQlyZXR1cm47DQo+ICsNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlR1cm5pbmcg W0VOQ09ERVI6JWQ6JXNdIFZERA0KPiBvZmZcbiIsDQo+ICsJCSAgICBkaWdfcG9ydC0+YmFzZS5i YXNlLmJhc2UuaWQsDQo+ICsJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOw0KPiArDQo+ ICsJcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOw0KPiArCXBwICY9IH5FRFBfRk9S Q0VfVkREOw0KPiArDQo+ICsJcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOw0K PiArCXBwX3N0YXRfcmVnID0gX3BwX3N0YXRfcmVnKGludGVsX2RwKTsNCj4gKw0KPiArCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOw0KPiArCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOw0KPiArDQo+ICsJLyogTWFrZSBzdXJlIHNl cXVlbmNlciBpcyBpZGxlIGJlZm9yZSBhbGxvd2luZyBzdWJzZXF1ZW50IGFjdGl2aXR5DQo+ICov DQo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJQUF9TVEFUVVM6IDB4JTA4eA0KPiBQ UF9DT05UUk9MOiAweCUwOHhcbiIsDQo+ICsJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBw cF9zdGF0X3JlZyksDQo+ICsJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9jdHJsX3Jl ZykpOw0KPiArDQo+ICsJaWYgKChwcCAmIFBBTkVMX1BPV0VSX09OKSA9PSAwKQ0KPiArCQlpbnRl bF9kcC0+cGFuZWxfcG93ZXJfb2ZmX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWUoKTsNCj4gKw0K PiArCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LA0KPiArCQkJCWludGVsX2F1eF9w b3dlcl9kb21haW4oZGlnX3BvcnQpLA0KPiArCQkJCWZldGNoX2FuZF96ZXJvKCZpbnRlbF9kcC0+ dmRkX3dha2VyZWYpKTsNCj4gK30NCj4gKw0KPiArdm9pZCBlZHBfcGFuZWxfdmRkX3dvcmsoc3Ry dWN0IHdvcmtfc3RydWN0ICpfX3dvcmspDQo+ICt7DQo+ICsJc3RydWN0IGludGVsX2RwICppbnRl bF9kcCA9DQo+ICsJCWNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsoX193b3JrKSwNCj4gKwkJ CSAgICAgc3RydWN0IGludGVsX2RwLCBwYW5lbF92ZGRfd29yayk7DQo+ICsJaW50ZWxfd2FrZXJl Zl90IHdha2VyZWY7DQo+ICsNCj4gKwl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKSB7 DQo+ICsJCWlmICghaW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkKQ0KPiArCQkJZWRwX3BhbmVsX3Zk ZF9vZmZfc3luYyhpbnRlbF9kcCk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBl ZHBfcGFuZWxfdmRkX3NjaGVkdWxlX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiAr ew0KPiArCXVuc2lnbmVkIGxvbmcgZGVsYXk7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFF1ZXVlIHRo ZSB0aW1lciB0byBmaXJlIGEgbG9uZyB0aW1lIGZyb20gbm93IChyZWxhdGl2ZSB0byB0aGUNCj4g cG93ZXINCj4gKwkgKiBkb3duIGRlbGF5KSB0byBrZWVwIHRoZSBwYW5lbCBwb3dlciB1cCBhY3Jv c3MgYSBzZXF1ZW5jZSBvZg0KPiArCSAqIG9wZXJhdGlvbnMuDQo+ICsJICovDQo+ICsJZGVsYXkg PSBtc2Vjc190b19qaWZmaWVzKGludGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSAqIDUp Ow0KPiArCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW50ZWxfZHAtPnBhbmVsX3ZkZF93b3JrLCBk ZWxheSk7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBNdXN0IGJlIHBhaXJlZCB3aXRoIGVkcF9w YW5lbF92ZGRfb24oKS4NCj4gKyAqIE11c3QgaG9sZCBwcHNfbXV0ZXggYXJvdW5kIHRoZSB3aG9s ZSBvbi9vZmYgc2VxdWVuY2UuDQo+ICsgKiBDYW4gYmUgbmVzdGVkIHdpdGggaW50ZWxfZWRwX3Bh bmVsX3ZkZF97b24sb2ZmfSgpIGNhbGxzLg0KPiArICovDQo+ICt2b2lkIGVkcF9wYW5lbF92ZGRf b2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGJvb2wgc3luYykNCj4gK3sNCj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4g Kw0KPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOw0KPiArDQo+ ICsJaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4g KwlJOTE1X1NUQVRFX1dBUk4oIWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCwNCj4gIltFTkNPREVS OiVkOiVzXSBWREQgbm90IGZvcmNlZCBvbiIsDQo+ICsJCQlkcF90b19kaWdfcG9ydChpbnRlbF9k cCktPmJhc2UuYmFzZS5iYXNlLmlkLA0KPiArCQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5i YXNlLmJhc2UubmFtZSk7DQo+ICsNCj4gKwlpbnRlbF9kcC0+d2FudF9wYW5lbF92ZGQgPSBmYWxz ZTsNCj4gKw0KPiArCWlmIChzeW5jKQ0KPiArCQllZHBfcGFuZWxfdmRkX29mZl9zeW5jKGludGVs X2RwKTsNCj4gKwllbHNlDQo+ICsJCWVkcF9wYW5lbF92ZGRfc2NoZWR1bGVfb2ZmKGludGVsX2Rw KTsNCj4gK30NCj4gKw0KPiArdm9pZCBlZHBfcGFuZWxfb24oc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90 b19pOTE1KGludGVsX2RwKTsNCj4gKwl1MzIgcHA7DQo+ICsJaTkxNV9yZWdfdCBwcF9jdHJsX3Jl ZzsNCj4gKw0KPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOw0K PiArDQo+ICsJaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQ0KPiArCQlyZXR1cm47DQo+ ICsNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlR1cm4gW0VOQ09ERVI6JWQ6JXNd IHBhbmVsDQo+IHBvd2VyIG9uXG4iLA0KPiArCQkgICAgZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHAp LT5iYXNlLmJhc2UuYmFzZS5pZCwNCj4gKwkJICAgIGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+ YmFzZS5iYXNlLm5hbWUpOw0KPiArDQo+ICsJaWYgKGRybV9XQVJOKCZkZXZfcHJpdi0+ZHJtLCBl ZHBfaGF2ZV9wYW5lbF9wb3dlcihpbnRlbF9kcCksDQo+ICsJCSAgICAgIltFTkNPREVSOiVkOiVz XSBwYW5lbCBwb3dlciBhbHJlYWR5IG9uXG4iLA0KPiArCQkgICAgIGRwX3RvX2RpZ19wb3J0KGlu dGVsX2RwKS0+YmFzZS5iYXNlLmJhc2UuaWQsDQo+ICsJCSAgICAgZHBfdG9fZGlnX3BvcnQoaW50 ZWxfZHApLT5iYXNlLmJhc2UubmFtZSkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCXdhaXRfcGFu ZWxfcG93ZXJfY3ljbGUoaW50ZWxfZHApOw0KPiArDQo+ICsJcHBfY3RybF9yZWcgPSBfcHBfY3Ry bF9yZWcoaW50ZWxfZHApOw0KPiArCXBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsN Cj4gKwlpZiAoSVNfR0VOKGRldl9wcml2LCA1KSkgew0KPiArCQkvKiBJTEsgd29ya2Fyb3VuZDog ZGlzYWJsZSByZXNldCBhcm91bmQgcG93ZXIgc2VxdWVuY2UgKi8NCj4gKwkJcHAgJj0gflBBTkVM X1BPV0VSX1JFU0VUOw0KPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcs IHBwKTsNCj4gKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7 DQo+ICsJfQ0KPiArDQo+ICsJcHAgfD0gUEFORUxfUE9XRVJfT047DQo+ICsJaWYgKCFJU19HRU4o ZGV2X3ByaXYsIDUpKQ0KPiArCQlwcCB8PSBQQU5FTF9QT1dFUl9SRVNFVDsNCj4gKw0KPiArCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOw0KPiArCWludGVsX2RlX3Bv c3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOw0KPiArDQo+ICsJd2FpdF9wYW5lbF9v bihpbnRlbF9kcCk7DQo+ICsJaW50ZWxfZHAtPmxhc3RfcG93ZXJfb24gPSBqaWZmaWVzOw0KPiAr DQo+ICsJaWYgKElTX0dFTihkZXZfcHJpdiwgNSkpIHsNCj4gKwkJcHAgfD0gUEFORUxfUE9XRVJf UkVTRVQ7IC8qIHJlc3RvcmUgcGFuZWwgcmVzZXQgYml0ICovDQo+ICsJCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOw0KPiArCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQo ZGV2X3ByaXYsIHBwX2N0cmxfcmVnKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3ZvaWQgaW50ZWxf ZWRwX3BhbmVsX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7DQo+ICsJaW50ZWxf d2FrZXJlZl90IHdha2VyZWY7DQo+ICsNCj4gKwlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9k cCkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2Vy ZWYpDQo+ICsJCWVkcF9wYW5lbF9vbihpbnRlbF9kcCk7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgZWRw X3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiArew0KPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiArCXN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxf ZHApOw0KPiArCXUzMiBwcDsNCj4gKwlpOTE1X3JlZ190IHBwX2N0cmxfcmVnOw0KPiArDQo+ICsJ bG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7DQo+ICsNCj4gKwlpZiAo IWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiVHVybiBbRU5DT0RFUjolZDolc10gcGFuZWwNCj4gcG93 ZXIgb2ZmXG4iLA0KPiArCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLCBkaWdfcG9y dC0+YmFzZS5iYXNlLm5hbWUpOw0KPiArDQo+ICsJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sICFp bnRlbF9kcC0+d2FudF9wYW5lbF92ZGQsDQo+ICsJCSAiTmVlZCBbRU5DT0RFUjolZDolc10gVkRE IHRvIHR1cm4gb2ZmIHBhbmVsXG4iLA0KPiArCQkgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlk LCBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOw0KPiArDQo+ICsJcHAgPSBpbGtfZ2V0X3BwX2Nv bnRyb2woaW50ZWxfZHApOw0KPiArCS8qIFdlIG5lZWQgdG8gc3dpdGNoIG9mZiBwYW5lbCBwb3dl ciBfYW5kXyBmb3JjZSB2ZGQsIGZvcg0KPiBvdGhlcndpc2Ugc29tZQ0KPiArCSAqIHBhbmVscyBn ZXQgdmVyeSB1bmhhcHB5IGFuZCBjZWFzZSB0byB3b3JrLiAqLw0KPiArCXBwICY9IH4oUEFORUxf UE9XRVJfT04gfCBQQU5FTF9QT1dFUl9SRVNFVCB8DQo+IEVEUF9GT1JDRV9WREQgfA0KPiArCQlF RFBfQkxDX0VOQUJMRSk7DQo+ICsNCj4gKwlwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRl bF9kcCk7DQo+ICsNCj4gKwlpbnRlbF9kcC0+d2FudF9wYW5lbF92ZGQgPSBmYWxzZTsNCj4gKw0K PiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOw0KPiArCWludGVs X2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOw0KPiArDQo+ICsJd2FpdF9w YW5lbF9vZmYoaW50ZWxfZHApOw0KPiArCWludGVsX2RwLT5wYW5lbF9wb3dlcl9vZmZfdGltZSA9 IGt0aW1lX2dldF9ib290dGltZSgpOw0KPiArDQo+ICsJLyogV2UgZ290IGEgcmVmZXJlbmNlIHdo ZW4gd2UgZW5hYmxlZCB0aGUgVkRELiAqLw0KPiArCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRl dl9wcml2LA0KPiArCQkJCWludGVsX2F1eF9wb3dlcl9kb21haW4oZGlnX3BvcnQpLA0KPiArCQkJ CWZldGNoX2FuZF96ZXJvKCZpbnRlbF9kcC0+dmRkX3dha2VyZWYpKTsNCj4gK30NCj4gKw0KPiAr dm9pZCBpbnRlbF9lZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7 DQo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7DQo+ICsNCj4gKwlpZiAoIWludGVsX2RwX2lz X2VkcChpbnRlbF9kcCkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCXdpdGhfcHBzX2xvY2soaW50 ZWxfZHAsIHdha2VyZWYpDQo+ICsJCWVkcF9wYW5lbF9vZmYoaW50ZWxfZHApOw0KPiArfQ0KPiAr DQo+ICsvKiBFbmFibGUgYmFja2xpZ2h0IGluIHRoZSBwYW5lbCBwb3dlciBjb250cm9sLiAqLw0K PiArdm9pZCBfaW50ZWxfZWRwX2JhY2tsaWdodF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KQ0KPiArew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOw0KPiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOw0KPiArDQo+ICsJLyoN Cj4gKwkgKiBJZiB3ZSBlbmFibGUgdGhlIGJhY2tsaWdodCByaWdodCBhd2F5IGZvbGxvd2luZyBh IHBhbmVsIHBvd2VyDQo+ICsJICogb24sIHdlIG1heSBzZWUgc2xpZ2h0IGZsaWNrZXIgYXMgdGhl IHBhbmVsIHN5bmNzIHdpdGggdGhlIGVEUA0KPiArCSAqIGxpbmsuICBTbyBkZWxheSBhIGJpdCB0 byBtYWtlIHN1cmUgdGhlIGltYWdlIGlzIHNvbGlkIGJlZm9yZQ0KPiArCSAqIGFsbG93aW5nIGl0 IHRvIGFwcGVhci4NCj4gKwkgKi8NCj4gKwl3YWl0X2JhY2tsaWdodF9vbihpbnRlbF9kcCk7DQo+ ICsNCj4gKwl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKSB7DQo+ICsJCWk5MTVfcmVn X3QgcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOw0KPiArCQl1MzIgcHA7DQo+ ICsNCj4gKwkJcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOw0KPiArCQlwcCB8PSBF RFBfQkxDX0VOQUJMRTsNCj4gKw0KPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3Ry bF9yZWcsIHBwKTsNCj4gKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJs X3JlZyk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICsvKiBEaXNhYmxlIGJhY2tsaWdodCBpbiB0aGUg cGFuZWwgcG93ZXIgY29udHJvbC4gKi8NCj4gK3ZvaWQgX2ludGVsX2VkcF9iYWNrbGlnaHRfb2Zm KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+ICsJaW50ZWxfd2FrZXJl Zl90IHdha2VyZWY7DQo+ICsNCj4gKwlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpIHsN Cj4gKwkJaTkxNV9yZWdfdCBwcF9jdHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7DQo+ ICsJCXUzMiBwcDsNCj4gKw0KPiArCQlwcCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7 DQo+ICsJCXBwICY9IH5FRFBfQkxDX0VOQUJMRTsNCj4gKw0KPiArCQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsNCj4gKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCBwcF9jdHJsX3JlZyk7DQo+ICsJfQ0KPiArDQo+ICsJaW50ZWxfZHAtPmxhc3RfYmFj a2xpZ2h0X29mZiA9IGppZmZpZXM7DQo+ICsJZWRwX3dhaXRfYmFja2xpZ2h0X29mZihpbnRlbF9k cCk7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBIb29rIGZvciBjb250cm9sbGluZyB0aGUgcGFu ZWwgcG93ZXIgY29udHJvbCBiYWNrbGlnaHQgdGhyb3VnaCB0aGUNCj4gYmxfcG93ZXINCj4gKyAq IHN5c2ZzIGF0dHJpYnV0ZS4gVGFrZSBjYXJlIHRvIGhhbmRsZSBtdWx0aXBsZSBjYWxscy4NCj4g KyAqLw0KPiArdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X3Bvd2VyKHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmNvbm5lY3RvciwgYm9vbA0KPiBlbmFibGUpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGNvbm5lY3Rvci0+YmFzZS5kZXYpOw0KPiArCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBpbnRlbF9hdHRhY2hlZF9kcChjb25uZWN0b3IpOw0K PiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOw0KPiArCWJvb2wgaXNfZW5hYmxlZDsNCj4gKw0K PiArCWlzX2VuYWJsZWQgPSBmYWxzZTsNCj4gKwl3aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtl cmVmKQ0KPiArCQlpc19lbmFibGVkID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKSAmDQo+ IEVEUF9CTENfRU5BQkxFOw0KPiArCWlmIChpc19lbmFibGVkID09IGVuYWJsZSkNCj4gKwkJcmV0 dXJuOw0KPiArDQo+ICsJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgInBhbmVsIHBvd2VyIGNvbnRy b2wgYmFja2xpZ2h0ICVzXG4iLA0KPiArCQkgICAgZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJs ZSIpOw0KPiArDQo+ICsJaWYgKGVuYWJsZSkNCj4gKwkJX2ludGVsX2VkcF9iYWNrbGlnaHRfb24o aW50ZWxfZHApOw0KPiArCWVsc2UNCj4gKwkJX2ludGVsX2VkcF9iYWNrbGlnaHRfb2ZmKGludGVs X2RwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5j ZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsNCj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19wb3J0LQ0KPiA+YmFz ZS5iYXNlLmRldik7DQo+ICsJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9kcC0+cHBzX3BpcGU7DQo+ ICsJaTkxNV9yZWdfdCBwcF9vbl9yZWcgPSBQUF9PTl9ERUxBWVMocGlwZSk7DQo+ICsNCj4gKwlk cm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9DQo+IElO VkFMSURfUElQRSk7DQo+ICsNCj4gKwlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHBp cGUgIT0gUElQRV9BICYmIHBpcGUgIT0NCj4gUElQRV9CKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ ICsJZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhpbnRlbF9kcCk7DQo+ICsNCj4gKwkvKg0KPiArCSAq IFZMViBzZWVtcyB0byBnZXQgY29uZnVzZWQgd2hlbiBtdWx0aXBsZSBwb3dlciBzZXF1ZW5jZXJz DQo+ICsJICogaGF2ZSB0aGUgc2FtZSBwb3J0IHNlbGVjdGVkIChldmVuIGlmIG9ubHkgb25lIGhh cyBwb3dlci92ZGQNCj4gKwkgKiBlbmFibGVkKS4gVGhlIGZhaWx1cmUgbWFuaWZlc3RzIGFzIHZs dl93YWl0X3BvcnRfcmVhZHkoKSBmYWlsaW5nDQo+ICsJICogQ0hWIG9uIHRoZSBvdGhlciBoYW5k IGRvZXNuJ3Qgc2VlbSB0byBtaW5kIGhhdmluZyB0aGUgc2FtZQ0KPiBwb3J0DQo+ICsJICogc2Vs ZWN0ZWQgaW4gbXVsdGlwbGUgcG93ZXIgc2VxdWVuY2VycywgYnV0IGxldCdzIGNsZWFyIHRoZQ0K PiArCSAqIHBvcnQgc2VsZWN0IGFsd2F5cyB3aGVuIGxvZ2ljYWxseSBkaXNjb25uZWN0aW5nIGEg cG93ZXINCj4gc2VxdWVuY2VyDQo+ICsJICogZnJvbSBhIHBvcnQuDQo+ICsJICovDQo+ICsJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ICsJCSAgICAiZGV0YWNoaW5nIHBpcGUgJWMgcG93 ZXIgc2VxdWVuY2VyIGZyb20NCj4gW0VOQ09ERVI6JWQ6JXNdXG4iLA0KPiArCQkgICAgcGlwZV9u YW1lKHBpcGUpLCBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsDQo+ICsJCSAgICBkaWdfcG9y dC0+YmFzZS5iYXNlLm5hbWUpOw0KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9vbl9y ZWcsIDApOw0KPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfb25fcmVnKTsN Cj4gKw0KPiArCWludGVsX2RwLT5wcHNfcGlwZSA9IElOVkFMSURfUElQRTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgdmx2X3N0ZWFsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZQ0KPiAqZGV2X3ByaXYsDQo+ICsJCQkJICAgICAgZW51bSBwaXBlIHBpcGUpDQo+ICt7 DQo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7DQo+ICsNCj4gKwlsb2NrZGVwX2Fz c2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsNCj4gKw0KPiArCWZvcl9lYWNoX2ludGVs X2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7DQo+ICsJCXN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7DQo+ICsNCj4gKwkJZHJtX1dBUk4oJmRl dl9wcml2LT5kcm0sIGludGVsX2RwLT5hY3RpdmVfcGlwZSA9PQ0KPiBwaXBlLA0KPiArCQkJICJz dGVhbGluZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNlciBmcm9tIGFjdGl2ZQ0KPiBbRU5DT0RFUjol ZDolc11cbiIsDQo+ICsJCQkgcGlwZV9uYW1lKHBpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQs DQo+ICsJCQkgZW5jb2Rlci0+YmFzZS5uYW1lKTsNCj4gKw0KPiArCQlpZiAoaW50ZWxfZHAtPnBw c19waXBlICE9IHBpcGUpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwNCj4gKwkJCSAgICAic3RlYWxpbmcgcGlwZSAlYyBwb3dlciBzZXF1ZW5j ZXIgZnJvbQ0KPiBbRU5DT0RFUjolZDolc11cbiIsDQo+ICsJCQkgICAgcGlwZV9uYW1lKHBpcGUp LCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsDQo+ICsJCQkgICAgZW5jb2Rlci0+YmFzZS5uYW1lKTsN Cj4gKw0KPiArCQkvKiBtYWtlIHN1cmUgdmRkIGlzIG9mZiBiZWZvcmUgd2Ugc3RlYWwgaXQgKi8N Cj4gKwkJdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOw0KPiArCX0NCj4gK30N Cj4gKw0KPiArdm9pZCB2bHZfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIsDQo+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQ0KPiArew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOw0KPiArCXN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7DQo+ICsJc3RydWN0IGludGVsX2Ny dGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7DQo+ICsNCj4g Kwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsNCj4gKw0KPiArCWRy bV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0NCj4gSU5W QUxJRF9QSVBFKTsNCj4gKw0KPiArCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJRF9Q SVBFICYmDQo+ICsJICAgIGludGVsX2RwLT5wcHNfcGlwZSAhPSBjcnRjLT5waXBlKSB7DQo+ICsJ CS8qDQo+ICsJCSAqIElmIGFub3RoZXIgcG93ZXIgc2VxdWVuY2VyIHdhcyBiZWluZyB1c2VkIG9u IHRoaXMNCj4gKwkJICogcG9ydCBwcmV2aW91c2x5IG1ha2Ugc3VyZSB0byB0dXJuIG9mZiB2ZGQg dGhlcmUgd2hpbGUNCj4gKwkJICogd2Ugc3RpbGwgaGF2ZSBjb250cm9sIG9mIGl0Lg0KPiArCQkg Ki8NCj4gKwkJdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOw0KPiArCX0NCj4g Kw0KPiArCS8qDQo+ICsJICogV2UgbWF5IGJlIHN0ZWFsaW5nIHRoZSBwb3dlcg0KPiArCSAqIHNl cXVlbmNlciBmcm9tIGFub3RoZXIgcG9ydC4NCj4gKwkgKi8NCj4gKwl2bHZfc3RlYWxfcG93ZXJf c2VxdWVuY2VyKGRldl9wcml2LCBjcnRjLT5waXBlKTsNCj4gKw0KPiArCWludGVsX2RwLT5hY3Rp dmVfcGlwZSA9IGNydGMtPnBpcGU7DQo+ICsNCj4gKwlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRl bF9kcCkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCS8qIG5vdyBpdCdzIGFsbCBvdXJzICovDQo+ ICsJaW50ZWxfZHAtPnBwc19waXBlID0gY3J0Yy0+cGlwZTsNCj4gKw0KPiArCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLA0KPiArCQkgICAgImluaXRpYWxpemluZyBwaXBlICVjIHBvd2VyIHNl cXVlbmNlciBmb3INCj4gW0VOQ09ERVI6JWQ6JXNdXG4iLA0KPiArCQkgICAgcGlwZV9uYW1lKGlu dGVsX2RwLT5wcHNfcGlwZSksIGVuY29kZXItPmJhc2UuYmFzZS5pZCwNCj4gKwkJICAgIGVuY29k ZXItPmJhc2UubmFtZSk7DQo+ICsNCj4gKwkvKiBpbml0IHBvd2VyIHNlcXVlbmNlciBvbiB0aGlz IHBpcGUgYW5kIHBvcnQgKi8NCj4gKwlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNl cihpbnRlbF9kcCk7DQo+ICsJaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVn aXN0ZXJzKGludGVsX2RwLCB0cnVlKTsNCj4gK30NCj4gKw0KPiArdm9pZCBpbnRlbF9lZHBfcGFu ZWxfdmRkX3Nhbml0aXplKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7DQo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+ ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChp bnRlbF9kcCk7DQo+ICsNCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211 dGV4KTsNCj4gKw0KPiArCWlmICghZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBUaGUgVkREIGJpdCBuZWVkcyBhIHBvd2VyIGRv bWFpbiByZWZlcmVuY2UsIHNvIGlmIHRoZSBiaXQgaXMNCj4gKwkgKiBhbHJlYWR5IGVuYWJsZWQg d2hlbiB3ZSBib290IG9yIHJlc3VtZSwgZ3JhYiB0aGlzIHJlZmVyZW5jZSBhbmQNCj4gKwkgKiBz Y2hlZHVsZSBhIHZkZCBvZmYsIHNvIHdlIGRvbid0IGhvbGQgb24gdG8gdGhlIHJlZmVyZW5jZQ0K PiArCSAqIGluZGVmaW5pdGVseS4NCj4gKwkgKi8NCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwNCj4gKwkJICAgICJWREQgbGVmdCBvbiBieSBCSU9TLCBhZGp1c3Rpbmcgc3RhdGUgdHJh Y2tpbmdcbiIpOw0KPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+dmRk X3dha2VyZWYpOw0KPiArCWludGVsX2RwLT52ZGRfd2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93 ZXJfZ2V0KGRldl9wcml2LA0KPiArDQo+IAlpbnRlbF9hdXhfcG93ZXJfZG9tYWluKGRpZ19wb3J0 KSk7DQo+ICsNCj4gKwllZHBfcGFuZWxfdmRkX3NjaGVkdWxlX29mZihpbnRlbF9kcCk7DQo+ICt9 DQo+ICsNCj4gK2Jvb2wgaW50ZWxfZWRwX2hhdmVfcG93ZXIoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkNCj4gK3sNCj4gKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsNCj4gKwlib29sIGhhdmVf cG93ZXIgPSBmYWxzZTsNCj4gKw0KPiArCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYp IHsNCj4gKwkJaGF2ZV9wb3dlciA9IGVkcF9oYXZlX3BhbmVsX3Bvd2VyKGludGVsX2RwKSAmJg0K PiArDQo+IGVkcF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9kcCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0 dXJuIGhhdmVfcG93ZXI7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgaW50ZWxfZHBfaW5pdF9wYW5lbF9w b3dlcl90aW1lc3RhbXBzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ICt7DQo+ICsJaW50 ZWxfZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lKCk7DQo+ICsJ aW50ZWxfZHAtPmxhc3RfcG93ZXJfb24gPSBqaWZmaWVzOw0KPiArCWludGVsX2RwLT5sYXN0X2Jh Y2tsaWdodF9vZmYgPSBqaWZmaWVzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAraW50 ZWxfcHBzX3JlYWRvdXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgc3RydWN0 DQo+IGVkcF9wb3dlcl9zZXEgKnNlcSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gKwl1MzIgcHBfb24sIHBwX29m ZiwgcHBfY3RsOw0KPiArCXN0cnVjdCBwcHNfcmVnaXN0ZXJzIHJlZ3M7DQo+ICsNCj4gKwlpbnRl bF9wcHNfZ2V0X3JlZ2lzdGVycyhpbnRlbF9kcCwgJnJlZ3MpOw0KPiArDQo+ICsJcHBfY3RsID0g aWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsNCj4gKw0KPiArCS8qIEVuc3VyZSBQUFMgaXMg dW5sb2NrZWQgKi8NCj4gKwlpZiAoIUhBU19EREkoZGV2X3ByaXYpKQ0KPiArCQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgcmVncy5wcF9jdHJsLCBwcF9jdGwpOw0KPiArDQo+ICsJcHBfb24gPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29uKTsNCj4gKwlwcF9vZmYgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29mZik7DQo+ICsNCj4gKwkvKiBQdWxsIHRpbWluZyB2 YWx1ZXMgb3V0IG9mIHJlZ2lzdGVycyAqLw0KPiArCXNlcS0+dDFfdDMgPSBSRUdfRklFTERfR0VU KFBBTkVMX1BPV0VSX1VQX0RFTEFZX01BU0ssDQo+IHBwX29uKTsNCj4gKwlzZXEtPnQ4ID0gUkVH X0ZJRUxEX0dFVChQQU5FTF9MSUdIVF9PTl9ERUxBWV9NQVNLLA0KPiBwcF9vbik7DQo+ICsJc2Vx LT50OSA9IFJFR19GSUVMRF9HRVQoUEFORUxfTElHSFRfT0ZGX0RFTEFZX01BU0ssDQo+IHBwX29m Zik7DQo+ICsJc2VxLT50MTAgPSBSRUdfRklFTERfR0VUKFBBTkVMX1BPV0VSX0RPV05fREVMQVlf TUFTSywNCj4gcHBfb2ZmKTsNCj4gKw0KPiArCWlmIChpOTE1X21taW9fcmVnX3ZhbGlkKHJlZ3Mu cHBfZGl2KSkgew0KPiArCQl1MzIgcHBfZGl2Ow0KPiArDQo+ICsJCXBwX2RpdiA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfZGl2KTsNCj4gKw0KPiArCQlzZXEtPnQxMV90MTIgPQ0K PiBSRUdfRklFTERfR0VUKFBBTkVMX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0ssIHBwX2RpdikgKiAx MDAwOw0KPiArCX0gZWxzZSB7DQo+ICsJCXNlcS0+dDExX3QxMiA9DQo+IFJFR19GSUVMRF9HRVQo QlhUX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0ssIHBwX2N0bCkgKiAxMDAwOw0KPiArCX0NCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2ludGVsX3Bwc19kdW1wX3N0YXRlKGNvbnN0IGNoYXIg KnN0YXRlX25hbWUsIGNvbnN0IHN0cnVjdA0KPiBlZHBfcG93ZXJfc2VxICpzZXEpDQo+ICt7DQo+ ICsJRFJNX0RFQlVHX0tNUygiJXMgdDFfdDMgJWQgdDggJWQgdDkgJWQgdDEwICVkIHQxMV90MTIN Cj4gJWRcbiIsDQo+ICsJCSAgICAgIHN0YXRlX25hbWUsDQo+ICsJCSAgICAgIHNlcS0+dDFfdDMs IHNlcS0+dDgsIHNlcS0+dDksIHNlcS0+dDEwLCBzZXEtPnQxMV90MTIpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZA0KPiAraW50ZWxfcHBzX3ZlcmlmeV9zdGF0ZShzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKQ0KPiArew0KPiArCXN0cnVjdCBlZHBfcG93ZXJfc2VxIGh3Ow0KPiArCXN0cnVj dCBlZHBfcG93ZXJfc2VxICpzdyA9ICZpbnRlbF9kcC0+cHBzX2RlbGF5czsNCj4gKw0KPiArCWlu dGVsX3Bwc19yZWFkb3V0X2h3X3N0YXRlKGludGVsX2RwLCAmaHcpOw0KPiArDQo+ICsJaWYgKGh3 LnQxX3QzICE9IHN3LT50MV90MyB8fCBody50OCAhPSBzdy0+dDggfHwgaHcudDkgIT0gc3ctPnQ5 IHx8DQo+ICsJICAgIGh3LnQxMCAhPSBzdy0+dDEwIHx8IGh3LnQxMV90MTIgIT0gc3ctPnQxMV90 MTIpIHsNCj4gKwkJRFJNX0VSUk9SKCJQUFMgc3RhdGUgbWlzbWF0Y2hcbiIpOw0KPiArCQlpbnRl bF9wcHNfZHVtcF9zdGF0ZSgic3ciLCBzdyk7DQo+ICsJCWludGVsX3Bwc19kdW1wX3N0YXRlKCJo dyIsICZodyk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAraW50ZWxfZHBf aW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4g K3sNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGlu dGVsX2RwKTsNCj4gKwlzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSBjdXIsIHZidCwgc3BlYywNCj4gKwkJ KmZpbmFsID0gJmludGVsX2RwLT5wcHNfZGVsYXlzOw0KPiArDQo+ICsJbG9ja2RlcF9hc3NlcnRf aGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7DQo+ICsNCj4gKwkvKiBhbHJlYWR5IGluaXRpYWxp emVkPyAqLw0KPiArCWlmIChmaW5hbC0+dDExX3QxMiAhPSAwKQ0KPiArCQlyZXR1cm47DQo+ICsN Cj4gKwlpbnRlbF9wcHNfcmVhZG91dF9od19zdGF0ZShpbnRlbF9kcCwgJmN1cik7DQo+ICsNCj4g KwlpbnRlbF9wcHNfZHVtcF9zdGF0ZSgiY3VyIiwgJmN1cik7DQo+ICsNCj4gKwl2YnQgPSBkZXZf cHJpdi0+dmJ0LmVkcC5wcHM7DQo+ICsJLyogT24gVG9zaGliYSBTYXRlbGxpdGUgUDUwLUMtMThD IHN5c3RlbSB0aGUgVkJUIFQxMiBkZWxheQ0KPiArCSAqIG9mIDUwMG1zIGFwcGVhcnMgdG8gYmUg dG9vIHNob3J0LiBPY2Fzc2lvbmFsbHkgdGhlIHBhbmVsDQo+ICsJICoganVzdCBmYWlscyB0byBw b3dlciBiYWNrIG9uLiBJbmNyZWFzaW5nIHRoZSBkZWxheSB0byA4MDBtcw0KPiArCSAqIHNlZW1z IHN1ZmZpY2llbnQgdG8gYXZvaWQgdGhpcyBwcm9ibGVtLg0KPiArCSAqLw0KPiArCWlmIChkZXZf cHJpdi0+cXVpcmtzICYgUVVJUktfSU5DUkVBU0VfVDEyX0RFTEFZKSB7DQo+ICsJCXZidC50MTFf dDEyID0gbWF4X3QodTE2LCB2YnQudDExX3QxMiwgMTMwMCAqIDEwKTsNCj4gKwkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sDQo+ICsJCQkgICAgIkluY3JlYXNpbmcgVDEyIHBhbmVsIGRlbGF5 IGFzIHBlciB0aGUgcXVpcmsgdG8NCj4gJWRcbiIsDQo+ICsJCQkgICAgdmJ0LnQxMV90MTIpOw0K PiArCX0NCj4gKwkvKiBUMTFfVDEyIGRlbGF5IGlzIHNwZWNpYWwgYW5kIGFjdHVhbGx5IGluIHVu aXRzIG9mIDEwMG1zLCBidXQgemVybw0KPiArCSAqIGJhc2VkIGluIHRoZSBodyAoc28gd2UgbmVl ZCB0byBhZGQgMTAwIG1zKS4gQnV0IHRoZSBzdyB2YnQNCj4gKwkgKiB0YWJsZSBtdWx0aXBsaWVz IGl0IHdpdGggMTAwMCB0byBtYWtlIGl0IGluIHVuaXRzIG9mIDEwMHVzZWMsDQo+ICsJICogdG9v LiAqLw0KPiArCXZidC50MTFfdDEyICs9IDEwMCAqIDEwOw0KPiArDQo+ICsJLyogVXBwZXIgbGlt aXRzIGZyb20gZURQIDEuMyBzcGVjLiBOb3RlIHRoYXQgd2UgdXNlIHRoZSBjbHVua3kNCj4gdW5p dHMgb2YNCj4gKwkgKiBvdXIgaHcgaGVyZSwgd2hpY2ggYXJlIGFsbCBpbiAxMDB1c2VjLiAqLw0K PiArCXNwZWMudDFfdDMgPSAyMTAgKiAxMDsNCj4gKwlzcGVjLnQ4ID0gNTAgKiAxMDsgLyogbm8g bGltaXQgZm9yIHQ4LCB1c2UgdDcgaW5zdGVhZCAqLw0KPiArCXNwZWMudDkgPSA1MCAqIDEwOyAv KiBubyBsaW1pdCBmb3IgdDksIG1ha2UgaXQgc3ltbWV0cmljIHdpdGggdDggKi8NCj4gKwlzcGVj LnQxMCA9IDUwMCAqIDEwOw0KPiArCS8qIFRoaXMgb25lIGlzIHNwZWNpYWwgYW5kIGFjdHVhbGx5 IGluIHVuaXRzIG9mIDEwMG1zLCBidXQgemVybw0KPiArCSAqIGJhc2VkIGluIHRoZSBodyAoc28g d2UgbmVlZCB0byBhZGQgMTAwIG1zKS4gQnV0IHRoZSBzdyB2YnQNCj4gKwkgKiB0YWJsZSBtdWx0 aXBsaWVzIGl0IHdpdGggMTAwMCB0byBtYWtlIGl0IGluIHVuaXRzIG9mIDEwMHVzZWMsDQo+ICsJ ICogdG9vLiAqLw0KPiArCXNwZWMudDExX3QxMiA9ICg1MTAgKyAxMDApICogMTA7DQo+ICsNCj4g KwlpbnRlbF9wcHNfZHVtcF9zdGF0ZSgidmJ0IiwgJnZidCk7DQo+ICsNCj4gKwkvKiBVc2UgdGhl IG1heCBvZiB0aGUgcmVnaXN0ZXIgc2V0dGluZ3MgYW5kIHZidC4gSWYgYm90aCBhcmUNCj4gKwkg KiB1bnNldCwgZmFsbCBiYWNrIHRvIHRoZSBzcGVjIGxpbWl0cy4gKi8NCj4gKyNkZWZpbmUgYXNz aWduX2ZpbmFsKGZpZWxkKQlmaW5hbC0+ZmllbGQgPSAobWF4KGN1ci5maWVsZCwgdmJ0LmZpZWxk KSA9PSAwID8NCj4gXA0KPiArCQkJCSAgICAgICBzcGVjLmZpZWxkIDogXA0KPiArCQkJCSAgICAg ICBtYXgoY3VyLmZpZWxkLCB2YnQuZmllbGQpKQ0KPiArCWFzc2lnbl9maW5hbCh0MV90Myk7DQo+ ICsJYXNzaWduX2ZpbmFsKHQ4KTsNCj4gKwlhc3NpZ25fZmluYWwodDkpOw0KPiArCWFzc2lnbl9m aW5hbCh0MTApOw0KPiArCWFzc2lnbl9maW5hbCh0MTFfdDEyKTsNCj4gKyN1bmRlZiBhc3NpZ25f ZmluYWwNCj4gKw0KPiArI2RlZmluZSBnZXRfZGVsYXkoZmllbGQpCShESVZfUk9VTkRfVVAoZmlu YWwtPmZpZWxkLCAxMCkpDQo+ICsJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX3VwX2RlbGF5ID0gZ2V0 X2RlbGF5KHQxX3QzKTsNCj4gKwlpbnRlbF9kcC0+YmFja2xpZ2h0X29uX2RlbGF5ID0gZ2V0X2Rl bGF5KHQ4KTsNCj4gKwlpbnRlbF9kcC0+YmFja2xpZ2h0X29mZl9kZWxheSA9IGdldF9kZWxheSh0 OSk7DQo+ICsJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2Rvd25fZGVsYXkgPSBnZXRfZGVsYXkodDEw KTsNCj4gKwlpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkgPSBnZXRfZGVsYXkodDEx X3QxMik7DQo+ICsjdW5kZWYgZ2V0X2RlbGF5DQo+ICsNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwNCj4gKwkJICAgICJwYW5lbCBwb3dlciB1cCBkZWxheSAlZCwgcG93ZXIgZG93biBk ZWxheSAlZCwgcG93ZXINCj4gY3ljbGUgZGVsYXkgJWRcbiIsDQo+ICsJCSAgICBpbnRlbF9kcC0+ cGFuZWxfcG93ZXJfdXBfZGVsYXksDQo+ICsJCSAgICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfZG93 bl9kZWxheSwNCj4gKwkJICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSk7DQo+ ICsNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgImJhY2tsaWdodCBvbiBkZWxheSAl ZCwgb2ZmIGRlbGF5DQo+ICVkXG4iLA0KPiArCQkgICAgaW50ZWxfZHAtPmJhY2tsaWdodF9vbl9k ZWxheSwNCj4gKwkJICAgIGludGVsX2RwLT5iYWNrbGlnaHRfb2ZmX2RlbGF5KTsNCj4gKw0KPiAr CS8qDQo+ICsJICogV2Ugb3ZlcnJpZGUgdGhlIEhXIGJhY2tsaWdodCBkZWxheXMgdG8gMSBiZWNh dXNlIHdlIGRvIG1hbnVhbA0KPiB3YWl0cw0KPiArCSAqIG9uIHRoZW0uIEZvciBUOCwgZXZlbiBC U3BlYyByZWNvbW1lbmRzIGRvaW5nIGl0LiBGb3IgVDksIGlmIHdlDQo+ICsJICogZG9uJ3QgZG8g dGhpcywgd2UnbGwgZW5kIHVwIHdhaXRpbmcgZm9yIHRoZSBiYWNrbGlnaHQgb2ZmIGRlbGF5DQo+ ICsJICogdHdpY2U6IG9uY2Ugd2hlbiB3ZSBkbyB0aGUgbWFudWFsIHNsZWVwLCBhbmQgb25jZSB3 aGVuIHdlDQo+IGRpc2FibGUNCj4gKwkgKiB0aGUgcGFuZWwgYW5kIHdhaXQgZm9yIHRoZSBQUF9T VEFUVVMgYml0IHRvIGJlY29tZSB6ZXJvLg0KPiArCSAqLw0KPiArCWZpbmFsLT50OCA9IDE7DQo+ ICsJZmluYWwtPnQ5ID0gMTsNCj4gKw0KPiArCS8qDQo+ICsJICogSFcgaGFzIG9ubHkgYSAxMDBt c2VjIGdyYW51bGFyaXR5IGZvciB0MTFfdDEyIHNvIHJvdW5kIGl0IHVwDQo+ICsJICogYWNjb3Jk aW5nbHkuDQo+ICsJICovDQo+ICsJZmluYWwtPnQxMV90MTIgPSByb3VuZHVwKGZpbmFsLT50MTFf dDEyLCAxMDAgKiAxMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtpbnRlbF9kcF9p bml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoc3RydWN0IGludGVsX2RwDQo+ICpp bnRlbF9kcCwNCj4gKwkJCQkJICAgICAgYm9vbCBmb3JjZV9kaXNhYmxlX3ZkZCkNCj4gK3sNCj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2Rw KTsNCj4gKwl1MzIgcHBfb24sIHBwX29mZiwgcG9ydF9zZWwgPSAwOw0KPiArCWludCBkaXYgPSBS VU5USU1FX0lORk8oZGV2X3ByaXYpLT5yYXdjbGtfZnJlcSAvIDEwMDA7DQo+ICsJc3RydWN0IHBw c19yZWdpc3RlcnMgcmVnczsNCj4gKwllbnVtIHBvcnQgcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGlu dGVsX2RwKS0+YmFzZS5wb3J0Ow0KPiArCWNvbnN0IHN0cnVjdCBlZHBfcG93ZXJfc2VxICpzZXEg PSAmaW50ZWxfZHAtPnBwc19kZWxheXM7DQo+ICsNCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZk ZXZfcHJpdi0+cHBzX211dGV4KTsNCj4gKw0KPiArCWludGVsX3Bwc19nZXRfcmVnaXN0ZXJzKGlu dGVsX2RwLCAmcmVncyk7DQo+ICsNCj4gKwkvKg0KPiArCSAqIE9uIHNvbWUgVkxWIG1hY2hpbmVz IHRoZSBCSU9TIGNhbiBsZWF2ZSB0aGUgVkREDQo+ICsJICogZW5hYmxlZCBldmVuIG9uIHBvd2Vy IHNlcXVlbmNlcnMgd2hpY2ggYXJlbid0DQo+ICsJICogaG9va2VkIHVwIHRvIGFueSBwb3J0LiBU aGlzIHdvdWxkIG1lc3MgdXAgdGhlDQo+ICsJICogcG93ZXIgZG9tYWluIHRyYWNraW5nIHRoZSBm aXJzdCB0aW1lIHdlIHBpY2sNCj4gKwkgKiBvbmUgb2YgdGhlc2UgcG93ZXIgc2VxdWVuY2VycyBm b3IgdXNlIHNpbmNlDQo+ICsJICogZWRwX3BhbmVsX3ZkZF9vbigpIHdvdWxkIG5vdGljZSB0aGF0 IHRoZSBWREQgd2FzDQo+ICsJICogYWxyZWFkeSBvbiBhbmQgdGhlcmVmb3JlIHdvdWxkbid0IGdy YWIgdGhlIHBvd2VyDQo+ICsJICogZG9tYWluIHJlZmVyZW5jZS4gRGlzYWJsZSBWREQgZmlyc3Qg dG8gYXZvaWQgdGhpcy4NCj4gKwkgKiBUaGlzIGFsc28gYXZvaWRzIHNwdXJpb3VzbHkgdHVybmlu ZyB0aGUgVkREIG9uIGFzDQo+ICsJICogc29vbiBhcyB0aGUgbmV3IHBvd2VyIHNlcXVlbmNlciBn ZXRzIGluaXRpYWxpemVkLg0KPiArCSAqLw0KPiArCWlmIChmb3JjZV9kaXNhYmxlX3ZkZCkgew0K PiArCQl1MzIgcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOw0KPiArDQo+ICsJCWRy bV9XQVJOKCZkZXZfcHJpdi0+ZHJtLCBwcCAmIFBBTkVMX1BPV0VSX09OLA0KPiArCQkJICJQYW5l bCBwb3dlciBhbHJlYWR5IG9uXG4iKTsNCj4gKw0KPiArCQlpZiAocHAgJiBFRFBfRk9SQ0VfVkRE KQ0KPiArCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ICsJCQkJICAgICJWREQgYWxy ZWFkeSBvbiwgZGlzYWJsaW5nIGZpcnN0XG4iKTsNCj4gKw0KPiArCQlwcCAmPSB+RURQX0ZPUkNF X1ZERDsNCj4gKw0KPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9jdHJsLCBw cCk7DQo+ICsJfQ0KPiArDQo+ICsJcHBfb24gPSBSRUdfRklFTERfUFJFUChQQU5FTF9QT1dFUl9V UF9ERUxBWV9NQVNLLCBzZXEtDQo+ID50MV90MykgfA0KPiArCQlSRUdfRklFTERfUFJFUChQQU5F TF9MSUdIVF9PTl9ERUxBWV9NQVNLLCBzZXEtDQo+ID50OCk7DQo+ICsJcHBfb2ZmID0gUkVHX0ZJ RUxEX1BSRVAoUEFORUxfTElHSFRfT0ZGX0RFTEFZX01BU0ssIHNlcS0NCj4gPnQ5KSB8DQo+ICsJ CVJFR19GSUVMRF9QUkVQKFBBTkVMX1BPV0VSX0RPV05fREVMQVlfTUFTSywNCj4gc2VxLT50MTAp Ow0KPiArDQo+ICsJLyogSGFzd2VsbCBkb2Vzbid0IGhhdmUgYW55IHBvcnQgc2VsZWN0aW9uIGJp dHMgZm9yIHRoZSBwYW5lbA0KPiArCSAqIHBvd2VyIHNlcXVlbmNlciBhbnkgbW9yZS4gKi8NCj4g KwlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikp IHsNCj4gKwkJcG9ydF9zZWwgPSBQQU5FTF9QT1JUX1NFTEVDVF9WTFYocG9ydCk7DQo+ICsJfSBl bHNlIGlmIChIQVNfUENIX0lCWChkZXZfcHJpdikgfHwgSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7 DQo+ICsJCXN3aXRjaCAocG9ydCkgew0KPiArCQljYXNlIFBPUlRfQToNCj4gKwkJCXBvcnRfc2Vs ID0gUEFORUxfUE9SVF9TRUxFQ1RfRFBBOw0KPiArCQkJYnJlYWs7DQo+ICsJCWNhc2UgUE9SVF9D Og0KPiArCQkJcG9ydF9zZWwgPSBQQU5FTF9QT1JUX1NFTEVDVF9EUEM7DQo+ICsJCQlicmVhazsN Cj4gKwkJY2FzZSBQT1JUX0Q6DQo+ICsJCQlwb3J0X3NlbCA9IFBBTkVMX1BPUlRfU0VMRUNUX0RQ RDsNCj4gKwkJCWJyZWFrOw0KPiArCQlkZWZhdWx0Og0KPiArCQkJTUlTU0lOR19DQVNFKHBvcnQp Ow0KPiArCQkJYnJlYWs7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlwcF9vbiB8PSBwb3J0X3Nl bDsNCj4gKw0KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLnBwX29uLCBwcF9vbik7 DQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MucHBfb2ZmLCBwcF9vZmYpOw0KPiAr DQo+ICsJLyoNCj4gKwkgKiBDb21wdXRlIHRoZSBkaXZpc29yIGZvciB0aGUgcHAgY2xvY2ssIHNp bXBseSBtYXRjaCB0aGUgQnNwZWMNCj4gZm9ybXVsYS4NCj4gKwkgKi8NCj4gKwlpZiAoaTkxNV9t bWlvX3JlZ192YWxpZChyZWdzLnBwX2RpdikpIHsNCj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHJlZ3MucHBfZGl2LA0KPiArDQo+IFJFR19GSUVMRF9QUkVQKFBQX1JFRkVSRU5DRV9ESVZJ REVSX01BU0ssICgxMDAgKiBkaXYpIC8gMiAtIDEpIHwNCj4gUkVHX0ZJRUxEX1BSRVAoUEFORUxf UE9XRVJfQ1lDTEVfREVMQVlfTUFTSywNCj4gRElWX1JPVU5EX1VQKHNlcS0+dDExX3QxMiwgMTAw MCkpKTsNCj4gKwl9IGVsc2Ugew0KPiArCQl1MzIgcHBfY3RsOw0KPiArDQo+ICsJCXBwX2N0bCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfY3RybCk7DQo+ICsJCXBwX2N0bCAmPSB+ QlhUX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0s7DQo+ICsJCXBwX2N0bCB8PQ0KPiBSRUdfRklFTERf UFJFUChCWFRfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSywgRElWX1JPVU5EX1VQKHNlcS0NCj4gPnQx MV90MTIsIDEwMDApKTsNCj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MucHBfY3Ry bCwgcHBfY3RsKTsNCj4gKwl9DQo+ICsNCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwN Cj4gKwkJICAgICJwYW5lbCBwb3dlciBzZXF1ZW5jZXIgcmVnaXN0ZXIgc2V0dGluZ3M6IFBQX09O ICUjeCwNCj4gUFBfT0ZGICUjeCwgUFBfRElWICUjeFxuIiwNCj4gKwkJICAgIGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHJlZ3MucHBfb24pLA0KPiArCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVncy5wcF9vZmYpLA0KPiArCQkgICAgaTkxNV9tbWlvX3JlZ192YWxpZChyZWdzLnBwX2Rp dikgPw0KPiArCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5wcF9kaXYpIDoNCj4g KwkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX2N0cmwpICYNCj4gQlhUX1BP V0VSX0NZQ0xFX0RFTEFZX01BU0spKTsNCj4gK30NCj4gKw0KPiArdm9pZCBpbnRlbF9kcF9wcHNf aW5pdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiArew0KPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiArDQo+ICsJaWYg KElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7DQo+ ICsJCXZsdl9pbml0aWFsX3Bvd2VyX3NlcXVlbmNlcl9zZXR1cChpbnRlbF9kcCk7DQo+ICsJfSBl bHNlIHsNCj4gKwkJaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHAp Ow0KPiArCQlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3RlcnMoaW50 ZWxfZHAsDQo+IGZhbHNlKTsNCj4gKwl9DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5oDQo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9wcHMuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwMDAwMDAuLjc2ZDVjYzU2NTUwMQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmgNCj4gQEAgLTAsMCArMSw1MyBAQA0KPiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLw0KPiArLyoNCj4gKyAqIENvcHlyaWdo dCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfX0lO VEVMX1BQU19IX18NCj4gKyNkZWZpbmUgX19JTlRFTF9QUFNfSF9fDQo+ICsNCj4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPg0KPiArDQo+ICsjaW5jbHVkZSAiaW50ZWxfd2FrZXJlZi5oIg0KPiAr DQo+ICtzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsNCj4gK3N0cnVjdCBpbnRlbF9jb25uZWN0b3I7 DQo+ICtzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZTsNCj4gK3N0cnVjdCBpbnRlbF9kcDsNCj4gK3N0 cnVjdCBpbnRlbF9lbmNvZGVyOw0KPiArDQo+ICtpbnRlbF93YWtlcmVmX3QgcHBzX2xvY2soc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCk7DQo+ICtpbnRlbF93YWtlcmVmX3QgcHBzX3VubG9jayhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnRlbF93YWtlcmVmX3QNCj4gd2FrZXJlZik7DQo+ ICsNCj4gKyNkZWZpbmUgd2l0aF9wcHNfbG9jayhkcCwgd2YpDQo+IAlcDQo+ICsJZm9yICgod2Yp ID0gcHBzX2xvY2soZHApOyAod2YpOyAod2YpID0gcHBzX3VubG9jaygoZHApLCAod2YpKSkNCj4g Kw0KPiArdm9pZCBpbnRlbF9kcF9jaGVja19lZHAoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7 DQo+ICt2b2lkIF9pbnRlbF9lZHBfYmFja2xpZ2h0X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApOw0KPiArdm9pZCBfaW50ZWxfZWRwX2JhY2tsaWdodF9vZmYoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCk7DQo+ICt2b2lkIGludGVsX2VkcF9iYWNrbGlnaHRfcG93ZXIoc3RydWN0IGludGVs X2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sDQo+IGVuYWJsZSk7DQo+ICsNCj4gK2Jvb2wgZWRw X3BhbmVsX3ZkZF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsNCj4gK3ZvaWQgZWRwX3Bh bmVsX3ZkZF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgYm9vbCBzeW5jKTsNCj4gK3Zv aWQgZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsNCj4g K3ZvaWQgZWRwX3BhbmVsX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOw0KPiArdm9pZCBl ZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOw0KPiArdm9pZCBlZHBfcGFu ZWxfdmRkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpfX3dvcmspOw0KPiArDQo+ICt2b2lkIGlu dGVsX2VkcF9wYW5lbF92ZGRfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7DQo+ICt2b2lk IGludGVsX2VkcF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsNCj4gK3ZvaWQg aW50ZWxfZWRwX3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsNCj4gK2Jvb2wg aW50ZWxfZWRwX2hhdmVfcG93ZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7DQo+ICsNCj4g K3ZvaWQgaW50ZWxfZWRwX3BhbmVsX3ZkZF9zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKTsNCj4gKw0KPiArdm9pZCB3YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApOw0KPiArDQo+ICt2b2lkIGludGVsX2RwX3Bwc19pbml0KHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApOw0KPiArdm9pZCBpbnRlbF9wb3dlcl9zZXF1ZW5jZXJfcmVzZXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOw0KPiArdm9pZCBpbnRlbF9kcF9pbml0X3BhbmVs X3Bvd2VyX3RpbWVzdGFtcHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7DQo+ICsNCj4gK3Zv aWQgdmx2X2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyLA0KPiArCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSk7DQo+ICsNCj4gKyNlbmRpZiAvKiBfX0lOVEVMX1BQU19IX18gKi8NCj4gLS0NCj4gMi4y MC4xDQo+IA0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xw0KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0DQo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcNCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=