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,URIBL_BLOCKED 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 8432FC433E0 for ; Mon, 18 Jan 2021 19:12:42 +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 3472C22573 for ; Mon, 18 Jan 2021 19:12:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3472C22573 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 D7FBA89C6C; Mon, 18 Jan 2021 19:12:41 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9828C89C6C for ; Mon, 18 Jan 2021 19:12:40 +0000 (UTC) IronPort-SDR: RrUQCQk92RrfrarJNTjyRt7SL/SfW5vjdffjiJnxU8Z35BNOoO7BOJezCm0oNiNAl1LBNO7Xk9 ORCziIQkWfrQ== X-IronPort-AV: E=McAfee;i="6000,8403,9868"; a="175336169" X-IronPort-AV: E=Sophos;i="5.79,357,1602572400"; d="scan'208";a="175336169" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Jan 2021 11:12:39 -0800 IronPort-SDR: Xr6n9bpAHIU7cvub9oFeNJ6pAGAnSc4l59bObpxLHebWlI2JHMW7dNuWmMIHUu4clBX+jTTMce dnoWRiiUJ8rA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,357,1602572400"; d="scan'208";a="365418298" Received: from irsmsx601.ger.corp.intel.com ([163.33.146.7]) by orsmga002.jf.intel.com with ESMTP; 18 Jan 2021 11:12:38 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by irsmsx601.ger.corp.intel.com (163.33.146.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 18 Jan 2021 19:12:36 +0000 Received: from orsmsx610.amr.corp.intel.com ([10.22.229.23]) by ORSMSX610.amr.corp.intel.com ([10.22.229.23]) with mapi id 15.01.1713.004; Mon, 18 Jan 2021 11:12:35 -0800 From: "Souza, Jose" To: "Mun, Gwan-gyeong" , "intel-gfx@lists.freedesktop.org" Thread-Topic: [PATCH v11 1/2] drm/i915/display: Support PSR Multiple Instances Thread-Index: AQHW5aQl66nLy4lblEC4TluHCs8r2aouVuaA Date: Mon, 18 Jan 2021 19:12:35 +0000 Message-ID: <73fb0b9a34f509e17d417ae14d6f1acd232dd7e1.camel@intel.com> References: <20210108095315.1636814-1-gwan-gyeong.mun@intel.com> In-Reply-To: <20210108095315.1636814-1-gwan-gyeong.mun@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.200.100] Content-ID: MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH v11 1/2] drm/i915/display: Support PSR Multiple Instances 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" T24gRnJpLCAyMDIxLTAxLTA4IGF0IDExOjUzICswMjAwLCBHd2FuLWd5ZW9uZyBNdW4gd3JvdGU6 DQo+IEl0IGlzIGEgcHJlbGltaW5hcnkgd29yayBmb3Igc3VwcG9ydGluZyBtdWx0aXBsZSBFRFAg UFNSIGFuZA0KPiBEUCBQYW5lbFJlcGxheS4gQW5kIGl0IHJlZmFjdG9ycyBzaW5nbGV0b24gUFNS IHRvIE11bHRpIFRyYW5zY29kZXINCj4gc3VwcG9ydGFibGUgUFNSLg0KPiBBbmQgdGhpcyBtb3Zl cyBhbmQgcmVuYW1lcyB0aGUgaTkxNV9wc3Igc3RydWN0dXJlIG9mIGRybV9pOTE1X3ByaXZhdGUn cyB0bw0KPiBpbnRlbF9kcCdzIGludGVsX3BzciBzdHJ1Y3R1cmUuDQo+IEl0IGFsc28gY2F1c2Vz IGNoYW5nZXMgaW4gUFNSIGludGVycnVwdCBoYW5kbGluZyByb3V0aW5lIGZvciBzdXBwb3J0aW5n DQo+IG11bHRpcGxlIHRyYW5zY29kZXJzLiBCdXQgaXQgZG9lcyBub3QgY2hhbmdlIHRoZSBzY2Vu YXJpbyBhbmQgdGltaW5nIG9mDQo+IGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgUFNSLiBBbmQgaXQg bm90IHN1cHBvcnQgbXVsdGlwbGUgcGlwZXMgd2l0aA0KPiBhIHNpbmdsZSB0cmFuc2NvZGVyIFBT UiBjYXNlIHlldC4NCj4gDQo+IHYyOiBGaXggaW5kZW50YXRpb24gYW5kIGFkZCBjb21tZW50cw0K PiB2MzogUmVtb3ZlIEJsYW5rIGxpbmUNCj4gdjQ6IFJlYmFzZWQNCj4gdjU6IFJlYmFzZWQgYW5k IEFkZHJlc3NlZCBBbnNodW1hbidzIHJldmlldyBjb21tZW50Lg0KPiDCoMKgwqDCoC0gTW92ZSBj YWxsaW5nIG9mIGludGVsX3Bzcl9pbml0KCkgdG8gaW50ZWxfZHBfaW5pdF9jb25uZWN0b3IoKQ0K PiB2NjogQWRkcmVzcyBBbnNodW1hbidzIHJldmlldyBjb21tZW50cw0KPiDCoMKgwqAtIFJlbW92 ZSB3cm9uZyBjb21tZW50cyBhbmQgYWRkIGNvbW1lbnRzIGZvciBhIGxpbWl0IG9mIHN1cHBvcnRp bmcgb2YNCj4gwqDCoMKgwqDCoGEgc2luZ2xlIHBpcGUgUFNSDQo+IHY3OiBVcGRhdGUgaW50ZWxf cHNyX2NvbXB1dGVfY29uZmlnKCkgZm9yIHN1cHBvcnRpbmcgbXVsdGlwbGUgdHJhbnNjb2Rlcg0K PiDCoMKgwqDCoFBTUiBvbiBCRFcrDQo+IHY4OiBBZGRyZXNzIEFuc2h1bWFuJ3MgcmV2aWV3IGNv bW1lbnRzDQo+IMKgwqDCoC0gUmVwbGFjZSBEUk1fREVCVUdfS01TIHdpdGggZHJtX2RiZ19rbXMo KSAvIERSTV9XQVJOIHdpdGggZHJtX3dhcm4oKQ0KPiB2OTogRml4IGNvbW1pdCBtZXNzYWdlDQo+ IHYxMDogUmViYXNlZA0KPiBWMTE6IEFkZHJlc3MgSm9zZSdzIHJldmlldyBjb21tZW50Lg0KPiDC oMKgLSBSZW9yZGVyIGNhbGxpbmcgb3JkZXIgb2YgaW50ZWxfcHNyMl9wcm9ncmFtX3RyYW5zX21h bl90cmtfY3RsKCkuDQo+IMKgwqAtIEluIG9yZGVyIHRvIHJlZHVjZSBjaGFuZ2VzIGtlZXAgdGhl IG9sZCBuYW1lIGZvciBkcm1faTkxNV9wcml2YXRlLg0KPiDCoMKgLSBDaGFuZ2UgcmVzdHJpY3Rp b25zIG9mIG11bHRpcGxlIGluc3RhbmNlcyBvZiBQU1IuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBH d2FuLWd5ZW9uZyBNdW4gPGd3YW4tZ3llb25nLm11bkBpbnRlbC5jb20+DQo+IENjOiBKb3PDqSBS b2JlcnRvIGRlIFNvdXphIDxqb3NlLnNvdXphQGludGVsLmNvbT4NCj4gQ2M6IEp1aGEtUGVra2Eg SGVpa2tpbGEgPGp1aGFwZWtrYS5oZWlra2lsYUBnbWFpbC5jb20+DQo+IENjOiBBbnNodW1hbiBH dXB0YSA8YW5zaHVtYW4uZ3VwdGFAaW50ZWwuY29tPg0KPiBSZXZpZXdlZC1ieTogQW5zaHVtYW4g R3VwdGEgPGFuc2h1bWFuLmd1cHRhQGludGVsLmNvbT4NCj4gLS0tDQo+IMKgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyAgICAgIHwgICAzICsNCj4gwqBkcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyAgfCAgIDQgLQ0KPiDCoC4uLi9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVidWdmcy5jICB8IDExMSArKy0tDQo+IMKgLi4u L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oICAgIHwgIDM4ICsrDQo+IMKg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jICAgICAgIHwgIDIzICstDQo+ IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuYyAgICAgIHwgNTY4ICsr KysrKysrKystLS0tLS0tLQ0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf cHNyLmggICAgICB8ICAxNCArLQ0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfc3ByaXRlLmMgICB8ICAgNiArLQ0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggICAgICAgICAgICAgICB8ICAzOCAtLQ0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf aXJxLmMgICAgICAgICAgICAgICB8ICA0OSArLQ0KPiDCoDEwIGZpbGVzIGNoYW5nZWQsIDQ4MyBp bnNlcnRpb25zKCspLCAzNzEgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGRpLmMNCj4gaW5kZXggM2RmNjkxMzM2OWJjLi43YmY4NmQ0MzljNjYg MTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMN Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYw0KPiBAQCAt NDM2MSw2ICs0MzYxLDkgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX3VwZGF0ZV9waXBlX2RwKHN0 cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiDCoAlpbnRlbF9kZGlfc2V0X2RwX21z YShjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IMKgCWludGVsX3Bzcl91cGRhdGUoaW50ZWxfZHAsIGNydGNfc3RhdGUsIGNvbm5fc3Rh dGUpOw0KPiArCS8vVE9ETzogbW92ZSBQU1IgcmVsYXRlZCBmdW5jdGlvbnMgaW50byBpbnRlbF9w c3JfdXBkYXRlKCkNCj4gKwlpbnRlbF9wc3IyX3Byb2dyYW1fdHJhbnNfbWFuX3Rya19jdGwoaW50 ZWxfZHAsIGNydGNfc3RhdGUpOw0KDQpUaGlzIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGEgZnVuY3Rp b24gdGhhdCBpcyBub3QgcGFydCBvZiB0aGUgdmJsYW5rIGV2YXNpb24gYmxvY2soaW50ZWxfcGlw ZV91cGRhdGVfc3RhcnQgYW5kIGludGVsX3BpcGVfdXBkYXRlX2VuZCksIHNvDQpQU1IyX01BTl9U UktfQ1RMIGNvdWxkIGhhdmUgYSB2YWx1ZSBzZXQsIHZibGFuayBwYXNzZWQsIGFuZCAiU0YgUGFy dGlhbCBGcmFtZSBFbmFibGUiIHdvdWxkIGJlIHNldCBiYWNrIHRvIDAgaW4gUFNSMl9NQU5fVFJL X0NUTCBjYXVzaW5nIHRoZSBzZWxlY3RpdmUNCmZldGNoIHRvIG5vdCBoYXBwZW4gd2l0aCB0aGUg ZXhwZWN0ZWQgcGxhbmUgcmVnaXN0ZXJzIHNldC4NCg0KDQo+ICsNCj4gwqAJaW50ZWxfZHBfc2V0 X2luZm9mcmFtZXMoZW5jb2RlciwgdHJ1ZSwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7DQo+IMKg CWludGVsX2VkcF9kcnJzX3VwZGF0ZShpbnRlbF9kcCwgY3J0Y19zdGF0ZSk7DQo+IMKgDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jDQo+IGluZGV4 IDAxODlkMzc5YTU1ZS4uY2IxMWY0YzQyMTc0IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYw0KPiBAQCAtMTQ4NDEsOCArMTQ4NDEsNiBAQCBz dGF0aWMgdm9pZCBjb21taXRfcGlwZV9jb25maWcoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAq c3RhdGUsDQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IMKgCQlpZiAobmV3X2NydGNfc3RhdGUtPnVwZGF0ZV9waXBlKQ0K PiDCoAkJCWludGVsX3BpcGVfZmFzdHNldChvbGRfY3J0Y19zdGF0ZSwgbmV3X2NydGNfc3RhdGUp Ow0KPiAtDQo+IC0JCWludGVsX3BzcjJfcHJvZ3JhbV90cmFuc19tYW5fdHJrX2N0bChuZXdfY3J0 Y19zdGF0ZSk7DQo+IMKgCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJaWYgKGRldl9wcml2LT5kaXNwbGF5LmF0 b21pY191cGRhdGVfd2F0ZXJtYXJrcykNCj4gQEAgLTE2MzY4LDggKzE2MzY2LDYgQEAgc3RhdGlj IHZvaWQgaW50ZWxfc2V0dXBfb3V0cHV0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpDQo+IMKgCQlpbnRlbF9kdm9faW5pdChkZXZfcHJpdik7DQo+IMKgCX0NCj4gwqANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g LQlpbnRlbF9wc3JfaW5pdChkZXZfcHJpdik7DQo+IC0NCj4gwqAJZm9yX2VhY2hfaW50ZWxfZW5j b2RlcigmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikgew0KPiDCoAkJZW5jb2Rlci0+YmFzZS5wb3Nz aWJsZV9jcnRjcyA9DQo+IMKgCQkJaW50ZWxfZW5jb2Rlcl9wb3NzaWJsZV9jcnRjcyhlbmNvZGVy KTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXlfZGVidWdmcy5jDQo+IGluZGV4IGNkN2U1NTE5ZWU3ZC4uMDQxMDUzMTY3ZDdmIDEwMDY0NA0K PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVidWdm cy5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9k ZWJ1Z2ZzLmMNCj4gQEAgLTI0OSwxOCArMjQ5LDE3IEBAIHN0YXRpYyBpbnQgaTkxNV9wc3Jfc2lu a19zdGF0dXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpDQo+IMKgCQkic2lu ayBpbnRlcm5hbCBlcnJvciIsDQo+IMKgCX07DQo+IMKgCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IgPSBtLT5wcml2YXRlOw0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5kZXYpOw0KPiDCoAlzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwID0NCj4gwqAJCWludGVsX2F0dGFjaGVkX2RwKHRvX2ludGVsX2Nvbm5lY3Rvcihjb25u ZWN0b3IpKTsNCj4gwqAJaW50IHJldDsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3By aXYpKSB7DQo+IC0JCXNlcV9wdXRzKG0sICJQU1IgVW5zdXBwb3J0ZWRcbiIpOw0KPiArCWlmIChj b25uZWN0b3ItPnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkNCg0KDQpZb3Ug YXJlIGNoYW5naW5nIG9sZCBiZWhhdmlvciBoZXJlLCBDQU5fUFNSIHdvdWxkIGFscmVhZHkgaGFu ZGxlIHRoZSBkaXNjb25uZWN0ZWQgc3RhdGUuDQpJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gdGhh dCBwbGVhc2UgZG8gaW4gYSBzZXBhcmF0ZWQgcGF0Y2guDQoNCj4gwqAJCXJldHVybiAtRU5PREVW Ow0KPiAtCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAoY29ubmVjdG9yLT5zdGF0dXMgIT0gY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQpDQo+ICsJaWYgKCFDQU5fUFNSKGludGVsX2RwKSkgew0KPiArCQlz ZXFfcHV0cyhtLCAiUFNSIFVuc3VwcG9ydGVkXG4iKTsNCj4gwqAJCXJldHVybiAtRU5PREVWOw0K PiArCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gwqAJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJmludGVsX2RwLT5h dXgsIERQX1BTUl9TVEFUVVMsICZ2YWwpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiBAQCAtMjgwLDEyICsyNzksMTMg QEAgc3RhdGljIGludCBpOTE1X3Bzcl9zaW5rX3N0YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqZGF0YSkNCj4gwqBERUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9wc3Jfc2lua19z dGF0dXMpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiDCoHN0YXRpYyB2b2lkDQo+IC1wc3Jfc291cmNlX3N0YXR1cyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBzZXFfZmlsZSAqbSkNCj4g K3Bzcl9zb3VyY2Vfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHN0cnVjdCBzZXFf ZmlsZSAqbSkNCj4gwqB7DQo+IMKgCXUzMiB2YWwsIHN0YXR1c192YWw7DQo+IMKgCWNvbnN0IGNo YXIgKnN0YXR1cyA9ICJ1bmtub3duIjsNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAoZGV2X3ByaXYt PnBzci5wc3IyX2VuYWJsZWQpIHsNCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQp IHsNCj4gwqAJCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbGl2ZV9zdGF0dXNbXSA9IHsNCj4g wqAJCQkiSURMRSIsDQo+IMKgCQkJIkNBUFRVUkUiLA0KPiBAQCAtMzAwLDcgKzMwMCw3IEBAIHBz cl9zb3VyY2Vfc3RhdHVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0 IHNlcV9maWxlICptKQ0KPiDCoAkJCSJUR19PTiINCj4gwqAJCX07DQo+IMKgCQl2YWwgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LA0KPiAtCQkJCSAgICBFRFBfUFNSMl9TVEFUVVMoZGV2X3ByaXYt PnBzci50cmFuc2NvZGVyKSk7DQo+ICsJCQkJICAgIEVEUF9QU1IyX1NUQVRVUyhpbnRlbF9kcC0+ cHNyLnRyYW5zY29kZXIpKTsNCj4gwqAJCXN0YXR1c192YWwgPSAodmFsICYgRURQX1BTUjJfU1RB VFVTX1NUQVRFX01BU0spID4+DQo+IMKgCQkJICAgICAgRURQX1BTUjJfU1RBVFVTX1NUQVRFX1NI SUZUOw0KPiDCoAkJaWYgKHN0YXR1c192YWwgPCBBUlJBWV9TSVpFKGxpdmVfc3RhdHVzKSkNCj4g QEAgLTMxNyw3ICszMTcsNyBAQCBwc3Jfc291cmNlX3N0YXR1cyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBzZXFfZmlsZSAqbSkNCj4gwqAJCQkiU1JERU5UX09OIiwN Cj4gwqAJCX07DQo+IMKgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiAtCQkJCSAg ICBFRFBfUFNSX1NUQVRVUyhkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsNCj4gKwkJCQkgICAg RURQX1BTUl9TVEFUVVMoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSk7DQo+IMKgCQlzdGF0dXNf dmFsID0gKHZhbCAmIEVEUF9QU1JfU1RBVFVTX1NUQVRFX01BU0spID4+DQo+IMKgCQkJICAgICAg RURQX1BTUl9TVEFUVVNfU1RBVEVfU0hJRlQ7DQo+IMKgCQlpZiAoc3RhdHVzX3ZhbCA8IEFSUkFZ X1NJWkUobGl2ZV9zdGF0dXMpKQ0KPiBAQCAtMzI3LDIxICszMjcsMTggQEAgcHNyX3NvdXJjZV9z dGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgc2VxX2ZpbGUg Km0pDQo+IMKgCXNlcV9wcmludGYobSwgIlNvdXJjZSBQU1Igc3RhdHVzOiAlcyBbMHglMDh4XVxu Iiwgc3RhdHVzLCB2YWwpOw0KPiDCoH0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLXN0YXRpYyBpbnQgaTkxNV9lZHBf cHNyX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpDQo+ICtzdGF0aWMgaW50 IGludGVsX3Bzcl9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQ0KPiDCoHsNCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBu b2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7DQo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2 X3ByaXYtPnBzcjsNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90 b19pOTE1KGludGVsX2RwKTsNCj4gKwlzdHJ1Y3QgaW50ZWxfcHNyICpwc3IgPSAmaW50ZWxfZHAt PnBzcjsNCj4gwqAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7DQo+IMKgCWNvbnN0IGNoYXIgKnN0 YXR1czsNCj4gwqAJYm9vbCBlbmFibGVkOw0KPiDCoAl1MzIgdmFsOw0KPiDCoA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWlm ICghSEFTX1BTUihkZXZfcHJpdikpDQo+IC0JCXJldHVybiAtRU5PREVWOw0KPiAtDQo+IMKgCXNl cV9wcmludGYobSwgIlNpbmsgc3VwcG9ydDogJXMiLCB5ZXNubyhwc3ItPnNpbmtfc3VwcG9ydCkp Ow0KPiAtCWlmIChwc3ItPmRwKQ0KPiAtCQlzZXFfcHJpbnRmKG0sICIgWzB4JTAyeF0iLCBwc3It PmRwLT5wc3JfZHBjZFswXSk7DQo+ICsJaWYgKHBzci0+c2lua19zdXBwb3J0KQ0KPiArCQlzZXFf cHJpbnRmKG0sICIgWzB4JTAyeF0iLCBpbnRlbF9kcC0+cHNyX2RwY2RbMF0pOw0KPiDCoAlzZXFf cHV0cyhtLCAiXG4iKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJaWYgKCFwc3ItPnNpbmtfc3VwcG9ydCkNCj4g QEAgLTM2NSwxNiArMzYyLDE2IEBAIHN0YXRpYyBpbnQgaTkxNV9lZHBfcHNyX3N0YXR1cyhzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpDQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgCWlmIChwc3ItPnBzcjJf ZW5hYmxlZCkgew0KPiDCoAkJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gLQkJCQkg ICAgRURQX1BTUjJfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpOw0KPiArCQkJCSAgICBF RFBfUFNSMl9DVEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSk7DQo+IMKgCQllbmFibGVkID0g dmFsICYgRURQX1BTUjJfRU5BQkxFOw0KPiDCoAl9IGVsc2Ugew0KPiDCoAkJdmFsID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwNCj4gLQkJCQkgICAgRURQX1BTUl9DVEwoZGV2X3ByaXYtPnBzci50 cmFuc2NvZGVyKSk7DQo+ICsJCQkJICAgIEVEUF9QU1JfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNj b2RlcikpOw0KPiDCoAkJZW5hYmxlZCA9IHZhbCAmIEVEUF9QU1JfRU5BQkxFOw0KPiDCoAl9DQo+ IMKgCXNlcV9wcmludGYobSwgIlNvdXJjZSBQU1IgY3RsOiAlcyBbMHglMDh4XVxuIiwNCj4gwqAJ CSAgIGVuYWJsZWRkaXNhYmxlZChlbmFibGVkKSwgdmFsKTsNCj4gLQlwc3Jfc291cmNlX3N0YXR1 cyhkZXZfcHJpdiwgbSk7DQo+ICsJcHNyX3NvdXJjZV9zdGF0dXMoaW50ZWxfZHAsIG0pOw0KPiDC oAlzZXFfcHJpbnRmKG0sICJCdXN5IGZyb250YnVmZmVyIGJpdHM6IDB4JTA4eFxuIiwNCj4gwqAJ CSAgIHBzci0+YnVzeV9mcm9udGJ1ZmZlcl9iaXRzKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAgLTM4Myw3ICsz ODAsNyBAQCBzdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpt LCB2b2lkICpkYXRhKQ0KPiDCoAkgKi8NCj4gwqAJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8 IElTX0JST0FEV0VMTChkZXZfcHJpdikpIHsNCj4gwqAJCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsDQo+IC0JCQkJICAgIEVEUF9QU1JfUEVSRl9DTlQoZGV2X3ByaXYtPnBzci50cmFuc2Nv ZGVyKSk7DQo+ICsJCQkJICAgIEVEUF9QU1JfUEVSRl9DTlQoaW50ZWxfZHAtPnBzci50cmFuc2Nv ZGVyKSk7DQo+IMKgCQl2YWwgJj0gRURQX1BTUl9QRVJGX0NOVF9NQVNLOw0KPiDCoAkJc2VxX3By aW50ZihtLCAiUGVyZm9ybWFuY2UgY291bnRlcjogJXVcbiIsIHZhbCk7DQo+IMKgCX0NCj4gQEAg LTQwNCw3ICs0MDEsNyBAQCBzdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9zdGF0dXMoc3RydWN0IHNl cV9maWxlICptLCB2b2lkICpkYXRhKQ0KPiDCoAkJICovDQo+IMKgCQlmb3IgKGZyYW1lID0gMDsg ZnJhbWUgPCBQU1IyX1NVX1NUQVRVU19GUkFNRVM7IGZyYW1lICs9IDMpIHsNCj4gwqAJCQl2YWwg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiAtCQkJCQkgICAgUFNSMl9TVV9TVEFUVVMoZGV2 X3ByaXYtPnBzci50cmFuc2NvZGVyLCBmcmFtZSkpOw0KPiArCQkJCQkgICAgUFNSMl9TVV9TVEFU VVMoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyLCBmcmFtZSkpOw0KPiDCoAkJCXN1X2ZyYW1lc192 YWxbZnJhbWUgLyAzXSA9IHZhbDsNCj4gwqAJCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gQEAgLTQzMCwyMyArNDI3 LDU3IEBAIHN0YXRpYyBpbnQgaTkxNV9lZHBfcHNyX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHZvaWQgKmRhdGEpDQo+IMKgCXJldHVybiAwOw0KPiDCoH0NCj4gwqANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gK3N0YXRpYyBp bnQgaTkxNV9lZHBfcHNyX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpDQo+ ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1 KG0tPnByaXZhdGUpOw0KPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOw0KPiArCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBOVUxMOw0KPiArDQo+ICsJaWYgKCFIQVNfUFNSKGRl dl9wcml2KSkNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsNCj4gKwkvKiBGaW5kIHRoZSBmaXJz dCBFRFAgKi8NCj4gKwlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikg ew0KPiArCQlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7DQo+ICsJCQlp bnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsNCj4gKwkJCWJyZWFrOw0KPiArCQl9 DQo+ICsJfQ0KPiArDQo+ICsJaWYgKCFpbnRlbF9kcCkNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ ICsNCj4gKwlyZXR1cm4gaW50ZWxfcHNyX3N0YXR1cyhtLCBpbnRlbF9kcCk7DQo+ICt9DQo+ICsN Cj4gwqBzdGF0aWMgaW50DQo+IMKgaTkxNV9lZHBfcHNyX2RlYnVnX3NldCh2b2lkICpkYXRhLCB1 NjQgdmFsKQ0KPiDCoHsNCj4gwqAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGF0YTsNCj4gwqAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7DQo+IC0JaW50IHJldDsNCj4gKwlp bnQgcmV0ID0gLUVOT0RFVjsNCj4gKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsNCj4g wqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpKQ0KPiAtCQlyZXR1cm4gLUVOT0RFVjsN Cj4gKwlpZiAoIUhBU19QU1IoZGV2X3ByaXYpKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiDCoA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiU2V0dGluZyBQU1IgZGVidWcgdG8gJWxs eFxuIiwgdmFsKTsNCj4gKwlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwgZW5jb2Rl cikgew0KPiArCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVu Y29kZXIpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCgmZGV2 X3ByaXYtPnJ1bnRpbWVfcG0pOw0KPiArCQlpZiAoIUNBTl9QU1IoaW50ZWxfZHApKQ0KPiArCQkJ Y29udGludWU7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IC0JcmV0ID0gaW50ZWxfcHNyX2RlYnVnX3NldChkZXZfcHJp diwgdmFsKTsNCj4gKwkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgew0K PiArCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJTZXR0aW5nIFBTUiBkZWJ1ZyB0byAl bGx4XG4iLCB2YWwpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJp di0+cnVudGltZV9wbSwgd2FrZXJlZik7DQo+ICsJCQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9w bV9nZXQoJmRldl9wcml2LT5ydW50aW1lX3BtKTsNCj4gKw0KPiArCQkJLy8gVE9ETzogc3BsaXQg dG8gZWFjaCB0cmFuc2NvZGVyJ3MgUFNSIGRlYnVnIHN0YXRlDQo+ICsJCQlyZXQgPSBpbnRlbF9w c3JfZGVidWdfc2V0KGludGVsX2RwLCB2YWwpOw0KPiArDQo+ICsJCQlpbnRlbF9ydW50aW1lX3Bt X3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOw0KPiArCQl9DQo+ICsJfQ0KPiDC oA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiDCoAlyZXR1cm4gcmV0Ow0KPiDCoH0NCj4gQEAgLTQ1NSwxMiArNDg2LDI1IEBAIHN0 YXRpYyBpbnQNCj4gwqBpOTE1X2VkcF9wc3JfZGVidWdfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFs KQ0KPiDCoHsNCj4gwqAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGF0YTsN Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsNCj4gwqANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAoIUNB Tl9QU1IoZGV2X3ByaXYpKQ0KPiArCWlmICghSEFTX1BTUihkZXZfcHJpdikpDQo+IMKgCQlyZXR1 cm4gLUVOT0RFVjsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQkqdmFsID0gUkVBRF9PTkNFKGRldl9wcml2LT5wc3Iu ZGVidWcpOw0KPiAtCXJldHVybiAwOw0KPiArCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ ZHJtLCBlbmNvZGVyKSB7DQo+ICsJCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9f aW50ZWxfZHAoZW5jb2Rlcik7DQo+ICsNCj4gKwkJaWYgKCFDQU5fUFNSKGludGVsX2RwKSkNCj4g KwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCS8vIFRPRE86IHNwbGl0IHRvIGVhY2ggdHJhbnNjb2Rl cidzIFBTUiBkZWJ1ZyBzdGF0ZQ0KPiArCQlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQ VVRfRURQKSB7DQo+ICsJCQkqdmFsID0gUkVBRF9PTkNFKGludGVsX2RwLT5wc3IuZGVidWcpOw0K PiArCQkJcmV0dXJuIDA7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gLUVOT0RFVjsN Cj4gwqB9DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IMKgREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoaTkxNV9lZHBfcHNy X2RlYnVnX2ZvcHMsDQo+IEBAIC0xMjM0LDkgKzEyNzgsNiBAQCBzdGF0aWMgdm9pZCBkcnJzX3N0 YXR1c19wZXJfY3J0YyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sDQo+IMKgCQkvKiBkaXNhYmxlX2RycnMo KSB3aWxsIG1ha2UgZHJycy0+ZHAgTlVMTCAqLw0KPiDCoAkJaWYgKCFkcnJzLT5kcCkgew0KPiDC oAkJCXNlcV9wdXRzKG0sICJJZGxlbmVzcyBEUlJTOiBEaXNhYmxlZFxuIik7DQo+IC0JCQlpZiAo ZGV2X3ByaXYtPnBzci5lbmFibGVkKQ0KPiAtCQkJCXNlcV9wdXRzKG0sDQo+IC0JCQkJIlx0QXMg UFNSIGlzIGVuYWJsZWQsIERSUlMgaXMgbm90IGVuYWJsZWRcbiIpOw0KPiDCoAkJCW11dGV4X3Vu bG9jaygmZHJycy0+bXV0ZXgpOw0KPiDCoAkJCXJldHVybjsNCj4gwqAJCX0NCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgNCj4gaW5k ZXggMTA2N2JkMDczYzk1Li5lMmY3MTg1OGUwYmEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oDQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oDQo+IEBAIC0xMzQ0LDYg KzEzNDQsNDIgQEAgc3RydWN0IGludGVsX2RwX3Bjb25fZnJsIHsNCj4gwqAJaW50IHRyYWluZWRf cmF0ZV9nYnBzOw0KPiDCoH07DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICtzdHJ1Y3QgaW50ZWxfcHNyIHsNCj4gKwkv KiBNdXRleCBmb3IgUFNSIHN0YXRlIG9mIHRoZSB0cmFuc2NvZGVyICovDQo+ICsJc3RydWN0IG11 dGV4IGxvY2s7DQo+ICsNCj4gKyNkZWZpbmUgSTkxNV9QU1JfREVCVUdfTU9ERV9NQVNLCTB4MGYN Cj4gKyNkZWZpbmUgSTkxNV9QU1JfREVCVUdfREVGQVVMVAkJMHgwMA0KPiArI2RlZmluZSBJOTE1 X1BTUl9ERUJVR19ESVNBQkxFCQkweDAxDQo+ICsjZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0VOQUJM RQkJMHgwMg0KPiArI2RlZmluZSBJOTE1X1BTUl9ERUJVR19GT1JDRV9QU1IxCTB4MDMNCj4gKyNk ZWZpbmUgSTkxNV9QU1JfREVCVUdfSVJRCQkweDEwDQo+ICsNCj4gKwl1MzIgZGVidWc7DQo+ICsJ Ym9vbCBzaW5rX3N1cHBvcnQ7DQo+ICsJYm9vbCBlbmFibGVkOw0KPiArCWVudW0gcGlwZSBwaXBl Ow0KPiArCWVudW0gdHJhbnNjb2RlciB0cmFuc2NvZGVyOw0KPiArCWJvb2wgYWN0aXZlOw0KPiAr CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOw0KPiArCXVuc2lnbmVkIGludCBidXN5X2Zyb250YnVm ZmVyX2JpdHM7DQo+ICsJYm9vbCBzaW5rX3BzcjJfc3VwcG9ydDsNCj4gKwlib29sIGxpbmtfc3Rh bmRieTsNCj4gKwlib29sIGNvbG9yaW1ldHJ5X3N1cHBvcnQ7DQo+ICsJYm9vbCBwc3IyX2VuYWJs ZWQ7DQo+ICsJYm9vbCBwc3IyX3NlbF9mZXRjaF9lbmFibGVkOw0KPiArCXU4IHNpbmtfc3luY19s YXRlbmN5Ow0KPiArCWt0aW1lX3QgbGFzdF9lbnRyeV9hdHRlbXB0Ow0KPiArCWt0aW1lX3QgbGFz dF9leGl0Ow0KPiArCWJvb2wgc2lua19ub3RfcmVsaWFibGU7DQo+ICsJYm9vbCBpcnFfYXV4X2Vy cm9yOw0KPiArCXUxNiBzdV94X2dyYW51bGFyaXR5Ow0KPiArCWJvb2wgZGMzY29fZW5hYmxlZDsN Cj4gKwl1MzIgZGMzY29fZXhpdF9kZWxheTsNCj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRjM2Nv X3dvcms7DQo+ICsJc3RydWN0IGRybV9kcF92c2Nfc2RwIHZzYzsNCj4gK307DQo+ICsNCj4gwqBz dHJ1Y3QgaW50ZWxfZHAgew0KPiDCoAlpOTE1X3JlZ190IG91dHB1dF9yZWc7DQo+IMKgCXUzMiBE UDsNCj4gQEAgLTE0NzMsNiArMTUwOSw4IEBAIHN0cnVjdCBpbnRlbF9kcCB7DQo+IMKgCWJvb2wg aG9ibF9hY3RpdmU7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgCXN0cnVjdCBpbnRlbF9kcF9wY29uX2ZybCBmcmw7 DQo+ICsNCj4gKwlzdHJ1Y3QgaW50ZWxfcHNyIHBzcjsNCj4gwqB9Ow0KPiDCoA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoGVu dW0gbHNwY29uX3ZlbmRvciB7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rw LmMNCj4gaW5kZXggOGEwMGU2MDkwODVmLi42NDJhY2FlODdjZjMgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYw0KPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMNCj4gQEAgLTI3MjksMTIgKzI3MjksMTAgQEAg dm9pZCBpbnRlbF9kcF9jb21wdXRlX3Bzcl92c2Nfc2RwKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsDQo+IMKgCQkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3Rh dGUsDQo+IMKgCQkJCSAgc3RydWN0IGRybV9kcF92c2Nfc2RwICp2c2MpDQo+IMKgew0KPiAtCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0K PiAtDQo+IMKgCXZzYy0+c2RwX3R5cGUgPSBEUF9TRFBfVlNDOw0KPiDCoA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWlmIChk ZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgew0KPiAtCQlpZiAoZGV2X3ByaXYtPnBzci5jb2xv cmltZXRyeV9zdXBwb3J0ICYmDQo+ICsJaWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7 DQo+ICsJCWlmIChpbnRlbF9kcC0+cHNyLmNvbG9yaW1ldHJ5X3N1cHBvcnQgJiYNCj4gwqAJCSAg ICBpbnRlbF9kcF9uZWVkc192c2Nfc2RwKGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpKSB7DQo+IMKg CQkJLyogW1BTUjIsICtDb2xvcmltZXRyeV0gKi8NCj4gwqAJCQlpbnRlbF9kcF9jb21wdXRlX3Zz Y19jb2xvcmltZXRyeShjcnRjX3N0YXRlLCBjb25uX3N0YXRlLA0KPiBAQCAtMzg5OCw3ICszODk2 LDcgQEAgYm9vbCBpbnRlbF9kcF9pbml0aWFsX2Zhc3RzZXRfY2hlY2soc3RydWN0IGludGVsX2Vu Y29kZXIgKmVuY29kZXIsDQo+IMKgCQlyZXR1cm4gZmFsc2U7DQo+IMKgCX0NCj4gwqANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g LQlpZiAoQ0FOX1BTUihpOTE1KSAmJiBpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKSB7DQo+ICsJ aWYgKENBTl9QU1IoaW50ZWxfZHApICYmIGludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpIHsNCj4g wqAJCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJGb3JjaW5nIGZ1bGwgbW9kZXNldCB0byBjb21w dXRlIFBTUiBzdGF0ZVxuIik7DQo+IMKgCQljcnRjX3N0YXRlLT51YXBpLm1vZGVfY2hhbmdlZCA9 IHRydWU7DQo+IMKgCQlyZXR1cm4gZmFsc2U7DQo+IEBAIC04NTEwLDYgKzg1MDgsMTcgQEAgc3Rh dGljIHZvaWQgaW50ZWxfZHBfbW9kZXNldF9yZXRyeV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykNCj4gwqAJZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudChjb25uZWN0b3ItPmRl dik7DQo+IMKgfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KDQoNClRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IGJlIGNhbGxl ZCBieSBvbGQgcGxhdGZvcm1zIHdpdGhvdXQgRERJIHRoYXQgZG8gbm90IHN1cHBvcnQgUFNSLCBz aG91bGQgYmUgZHJvcHBlZC4NCg0KPiArc3RhdGljIHZvaWQgaW50ZWxfZHBfdXBkYXRlX3BpcGUo c3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ICsJCQkJIHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyLA0KPiArCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwNCj4gKwkJCQkgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUpDQo+ICt7DQo+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19p bnRlbF9kcChlbmNvZGVyKTsNCj4gKw0KPiArCWludGVsX3BhbmVsX3VwZGF0ZV9iYWNrbGlnaHQo c3RhdGUsIGVuY29kZXIsIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOw0KPiArCWludGVsX3BzcjJf cHJvZ3JhbV90cmFuc19tYW5fdHJrX2N0bChpbnRlbF9kcCwgY3J0Y19zdGF0ZSk7DQo+ICt9DQo+ ICsNCj4gwqBib29sDQo+IMKgaW50ZWxfZHBfaW5pdF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqZGlnX3BvcnQsDQo+IMKgCQkJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50 ZWxfY29ubmVjdG9yKQ0KPiBAQCAtODYyNyw2ICs4NjM2LDggQEAgaW50ZWxfZHBfaW5pdF9jb25u ZWN0b3Ioc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQsDQo+IMKgCWludGVsX2Rw LT5mcmwuaXNfdHJhaW5lZCA9IGZhbHNlOw0KPiDCoAlpbnRlbF9kcC0+ZnJsLnRyYWluZWRfcmF0 ZV9nYnBzID0gMDsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICsJaW50ZWxf cHNyX2luaXQoaW50ZWxfZHApOw0KPiArDQo+IMKgCXJldHVybiB0cnVlOw0KPiDCoA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqBmYWlsOg0KPiBAQCAtODY2OCw3ICs4Njc5LDcgQEAg Ym9vbCBpbnRlbF9kcF9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4g wqAJaW50ZWxfZW5jb2Rlci0+Z2V0X2NvbmZpZyA9IGludGVsX2RwX2dldF9jb25maWc7DQo+IMKg CWludGVsX2VuY29kZXItPnN5bmNfc3RhdGUgPSBpbnRlbF9kcF9zeW5jX3N0YXRlOw0KPiDCoAlp bnRlbF9lbmNvZGVyLT5pbml0aWFsX2Zhc3RzZXRfY2hlY2sgPSBpbnRlbF9kcF9pbml0aWFsX2Zh c3RzZXRfY2hlY2s7DQo+IC0JaW50ZWxfZW5jb2Rlci0+dXBkYXRlX3BpcGUgPSBpbnRlbF9wYW5l bF91cGRhdGVfYmFja2xpZ2h0Ow0KPiArCWludGVsX2VuY29kZXItPnVwZGF0ZV9waXBlID0gaW50 ZWxfZHBfdXBkYXRlX3BpcGU7DQo+IMKgCWludGVsX2VuY29kZXItPnN1c3BlbmQgPSBpbnRlbF9k cF9lbmNvZGVyX3N1c3BlbmQ7DQo+IMKgCWludGVsX2VuY29kZXItPnNodXRkb3duID0gaW50ZWxf ZHBfZW5jb2Rlcl9zaHV0ZG93bjsNCj4gwqAJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7 DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuYw0KPiBpbmRleCBjMjRh ZTY5NDI2Y2YuLjQxZTdjYzQ0ODk3ZCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9wc3IuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX3Bzci5jDQo+IEBAIC03OSw5ICs3OSwxMSBAQA0KPiDCoMKgKiB1c2UgcGFnZSBm bGlwcy4NCj4gwqDCoCovDQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtc3Rh dGljIGJvb2wgcHNyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQ0KPiArc3RhdGljIGJvb2wgcHNyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApDQo+IMKgew0KPiAtCXN3aXRjaCAoaTkxNS0+cHNyLmRlYnVnICYgSTkxNV9QU1JfREVC VUdfTU9ERV9NQVNLKSB7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90 b19pOTE1KGludGVsX2RwKTsNCj4gKw0KPiArCXN3aXRjaCAoaW50ZWxfZHAtPnBzci5kZWJ1ZyAm IEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSykgew0KPiDCoAljYXNlIEk5MTVfUFNSX0RFQlVHX0RF RkFVTFQ6DQo+IMKgCQlyZXR1cm4gaTkxNS0+cGFyYW1zLmVuYWJsZV9wc3I7DQo+IMKgCWNhc2Ug STkxNV9QU1JfREVCVUdfRElTQUJMRToNCj4gQEAgLTkxLDkgKzkzLDkgQEAgc3RhdGljIGJvb2wg cHNyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQ0KPiDCoAl9 DQo+IMKgfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLXN0YXRpYyBib29s IHBzcjJfZ2xvYmFsX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0K PiArc3RhdGljIGJvb2wgcHNyMl9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQ0KPiDCoHsNCj4gLQlzd2l0Y2ggKGRldl9wcml2LT5wc3IuZGVidWcgJiBJOTE1X1BTUl9E RUJVR19NT0RFX01BU0spIHsNCj4gKwlzd2l0Y2ggKGludGVsX2RwLT5wc3IuZGVidWcgJiBJOTE1 X1BTUl9ERUJVR19NT0RFX01BU0spIHsNCj4gwqAJY2FzZSBJOTE1X1BTUl9ERUJVR19ESVNBQkxF Og0KPiDCoAljYXNlIEk5MTVfUFNSX0RFQlVHX0ZPUkNFX1BTUjE6DQo+IMKgCQlyZXR1cm4gZmFs c2U7DQo+IEBAIC0xMDIsMTEgKzEwNCwxMiBAQCBzdGF0aWMgYm9vbCBwc3IyX2dsb2JhbF9lbmFi bGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gwqAJfQ0KPiDCoH0NCj4g wqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC1zdGF0aWMgdm9pZCBwc3JfaXJxX2Nv bnRyb2woc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiArc3RhdGljIHZvaWQg cHNyX2lycV9jb250cm9sKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IMKgew0KPiDCoAll bnVtIHRyYW5zY29kZXIgdHJhbnNfc2hpZnQ7DQo+IMKgCXUzMiBtYXNrLCB2YWw7DQo+IMKgCWk5 MTVfcmVnX3QgaW1yX3JlZzsNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IMKgCS8qDQo+IMKgCSAqIGdlbjEyKyBoYXMgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIHRyYW5z Y29kZXIgYW5kIG9uZSBwZXIgdHJhbnNjb2Rlcg0KPiBAQCAtMTE1LDE0ICsxMTgsMTQgQEAgc3Rh dGljIHZvaWQgcHNyX2lycV9jb250cm9sKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikNCj4gwqAJICovDQo+IMKgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKSB7DQo+IMKg CQl0cmFuc19zaGlmdCA9IDA7DQo+IC0JCWltcl9yZWcgPSBUUkFOU19QU1JfSU1SKGRldl9wcml2 LT5wc3IudHJhbnNjb2Rlcik7DQo+ICsJCWltcl9yZWcgPSBUUkFOU19QU1JfSU1SKGludGVsX2Rw LT5wc3IudHJhbnNjb2Rlcik7DQo+IMKgCX0gZWxzZSB7DQo+IC0JCXRyYW5zX3NoaWZ0ID0gZGV2 X3ByaXYtPnBzci50cmFuc2NvZGVyOw0KPiArCQl0cmFuc19zaGlmdCA9IGludGVsX2RwLT5wc3Iu dHJhbnNjb2RlcjsNCj4gwqAJCWltcl9yZWcgPSBFRFBfUFNSX0lNUjsNCj4gwqAJfQ0KPiDCoA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJbWFzayA9IEVEUF9QU1JfRVJST1IodHJh bnNfc2hpZnQpOw0KPiAtCWlmIChkZXZfcHJpdi0+cHNyLmRlYnVnICYgSTkxNV9QU1JfREVCVUdf SVJRKQ0KPiArCWlmIChpbnRlbF9kcC0+cHNyLmRlYnVnICYgSTkxNV9QU1JfREVCVUdfSVJRKQ0K PiDCoAkJbWFzayB8PSBFRFBfUFNSX1BPU1RfRVhJVCh0cmFuc19zaGlmdCkgfA0KPiDCoAkJCUVE UF9QU1JfUFJFX0VOVFJZKHRyYW5zX3NoaWZ0KTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IEBAIC0xNzEsMzAgKzE3NCwzMSBAQCBzdGF0aWMgdm9pZCBwc3JfZXZlbnRfcHJp bnQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsDQo+IMKgCQlkcm1fZGJnX2ttcygmaTkx NS0+ZHJtLCAiXHRQU1IgZGlzYWJsZWRcbiIpOw0KPiDCoH0NCj4gwqANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IC12b2lkIGludGVsX3Bzcl9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBwc3JfaWlyKQ0KPiArdm9pZCBpbnRlbF9wc3JfaXJx X2hhbmRsZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdTMyIHBzcl9paXIpDQo+IMKgew0K PiAtCWVudW0gdHJhbnNjb2RlciBjcHVfdHJhbnNjb2RlciA9IGRldl9wcml2LT5wc3IudHJhbnNj b2RlcjsNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1 KGludGVsX2RwKTsNCj4gKwllbnVtIHRyYW5zY29kZXIgY3B1X3RyYW5zY29kZXIgPSBpbnRlbF9k cC0+cHNyLnRyYW5zY29kZXI7DQo+IMKgCWVudW0gdHJhbnNjb2RlciB0cmFuc19zaGlmdDsNCj4g wqAJaTkxNV9yZWdfdCBpbXJfcmVnOw0KPiDCoAlrdGltZV90IHRpbWVfbnMgPSAga3RpbWVfZ2V0 KCk7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMikgew0KPiDCoAkJdHJhbnNfc2hpZnQgPSAwOw0KPiAtCQlpbXJfcmVn ID0gVFJBTlNfUFNSX0lNUihkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpOw0KPiArCQlpbXJfcmVn ID0gVFJBTlNfUFNSX0lNUihpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpOw0KPiDCoAl9IGVsc2Ug ew0KPiAtCQl0cmFuc19zaGlmdCA9IGRldl9wcml2LT5wc3IudHJhbnNjb2RlcjsNCj4gKwkJdHJh bnNfc2hpZnQgPSBpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXI7DQo+IMKgCQlpbXJfcmVnID0gRURQ X1BTUl9JTVI7DQo+IMKgCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKg CWlmIChwc3JfaWlyICYgRURQX1BTUl9QUkVfRU5UUlkodHJhbnNfc2hpZnQpKSB7DQo+IC0JCWRl dl9wcml2LT5wc3IubGFzdF9lbnRyeV9hdHRlbXB0ID0gdGltZV9uczsNCj4gKwkJaW50ZWxfZHAt PnBzci5sYXN0X2VudHJ5X2F0dGVtcHQgPSB0aW1lX25zOw0KPiDCoAkJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sDQo+IMKgCQkJICAgICJbdHJhbnNjb2RlciAlc10gUFNSIGVudHJ5IGF0dGVt cHQgaW4gMiB2YmxhbmtzXG4iLA0KPiDCoAkJCSAgICB0cmFuc2NvZGVyX25hbWUoY3B1X3RyYW5z Y29kZXIpKTsNCj4gwqAJfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJ aWYgKHBzcl9paXIgJiBFRFBfUFNSX1BPU1RfRVhJVCh0cmFuc19zaGlmdCkpIHsNCj4gLQkJZGV2 X3ByaXYtPnBzci5sYXN0X2V4aXQgPSB0aW1lX25zOw0KPiArCQlpbnRlbF9kcC0+cHNyLmxhc3Rf ZXhpdCA9IHRpbWVfbnM7DQo+IMKgCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4gwqAJ CQkgICAgIlt0cmFuc2NvZGVyICVzXSBQU1IgZXhpdCBjb21wbGV0ZWRcbiIsDQo+IMKgCQkJICAg IHRyYW5zY29kZXJfbmFtZShjcHVfdHJhbnNjb2RlcikpOw0KPiBAQCAtMjAyLDcgKzIwNiw3IEBA IHZvaWQgaW50ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgdTMyIHBzcl9paXIpDQo+IMKgCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KSB7 DQo+IMKgCQkJdTMyIHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+IMKgCQkJCQkJUFNS X0VWRU5UKGNwdV90cmFuc2NvZGVyKSk7DQo+IC0JCQlib29sIHBzcjJfZW5hYmxlZCA9IGRldl9w cml2LT5wc3IucHNyMl9lbmFibGVkOw0KPiArCQkJYm9vbCBwc3IyX2VuYWJsZWQgPSBpbnRlbF9k cC0+cHNyLnBzcjJfZW5hYmxlZDsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IMKgCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFBTUl9FVkVOVChjcHVfdHJhbnNjb2Rlciks DQo+IMKgCQkJCSAgICAgICB2YWwpOw0KPiBAQCAtMjE2LDcgKzIyMCw3IEBAIHZvaWQgaW50ZWxf cHNyX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBz cl9paXIpDQo+IMKgCQlkcm1fd2FybigmZGV2X3ByaXYtPmRybSwgIlt0cmFuc2NvZGVyICVzXSBQ U1IgYXV4IGVycm9yXG4iLA0KPiDCoAkJCSB0cmFuc2NvZGVyX25hbWUoY3B1X3RyYW5zY29kZXIp KTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JCWRldl9wcml2LT5wc3Iu aXJxX2F1eF9lcnJvciA9IHRydWU7DQo+ICsJCWludGVsX2RwLT5wc3IuaXJxX2F1eF9lcnJvciA9 IHRydWU7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAkJLyoNCj4gwqAJ CSAqIElmIHRoaXMgaW50ZXJydXB0aW9uIGlzIG5vdCBtYXNrZWQgaXQgd2lsbCBrZWVwDQo+IEBA IC0yMzAsNyArMjM0LDcgQEAgdm9pZCBpbnRlbF9wc3JfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcHNyX2lpcikNCj4gwqAJCXZhbCB8PSBFRFBfUFNS X0VSUk9SKHRyYW5zX3NoaWZ0KTsNCj4gwqAJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbXJf cmVnLCB2YWwpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQkJc2NoZWR1 bGVfd29yaygmZGV2X3ByaXYtPnBzci53b3JrKTsNCj4gKwkJc2NoZWR1bGVfd29yaygmaW50ZWxf ZHAtPnBzci53b3JrKTsNCj4gwqAJfQ0KPiDCoH0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IEBAIC0yOTEsMTIgKzI5NSw2IEBAIHZvaWQgaW50ZWxfcHNyX2luaXRfZHBjZChz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPQ0KPiDCoAkJdG9faTkxNShkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2Uu YmFzZS5kZXYpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAoZGV2 X3ByaXYtPnBzci5kcCkgew0KPiAtCQlkcm1fd2FybigmZGV2X3ByaXYtPmRybSwNCj4gLQkJCSAi TW9yZSB0aGFuIG9uZSBlRFAgcGFuZWwgZm91bmQsIFBTUiBzdXBwb3J0IHNob3VsZCBiZSBleHRl bmRlZFxuIik7DQo+IC0JCXJldHVybjsNCj4gLQl9DQo+IC0NCj4gwqAJZHJtX2RwX2RwY2RfcmVh ZCgmaW50ZWxfZHAtPmF1eCwgRFBfUFNSX1NVUFBPUlQsIGludGVsX2RwLT5wc3JfZHBjZCwNCj4g wqAJCQkgc2l6ZW9mKGludGVsX2RwLT5wc3JfZHBjZCkpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gQEAgLTMxNywxMiArMzE1LDEwIEBAIHZvaWQgaW50ZWxfcHNyX2luaXRf ZHBjZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiDCoAkJcmV0dXJuOw0KPiDCoAl9DQo+ IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWRldl9wcml2LT5wc3Iuc2lua19z dXBwb3J0ID0gdHJ1ZTsNCj4gLQlkZXZfcHJpdi0+cHNyLnNpbmtfc3luY19sYXRlbmN5ID0NCj4g KwlpbnRlbF9kcC0+cHNyLnNpbmtfc3VwcG9ydCA9IHRydWU7DQo+ICsJaW50ZWxfZHAtPnBzci5z aW5rX3N5bmNfbGF0ZW5jeSA9DQo+IMKgCQlpbnRlbF9kcF9nZXRfc2lua19zeW5jX2xhdGVuY3ko aW50ZWxfZHApOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlkZXZfcHJp di0+cHNyLmRwID0gaW50ZWxfZHA7DQo+IC0NCj4gwqAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gOSAmJg0KPiDCoAkgICAgKGludGVsX2RwLT5wc3JfZHBjZFswXSA9PSBEUF9QU1IyX1dJVEhf WV9DT09SRF9JU19TVVBQT1JURUQpKSB7DQo+IMKgCQlib29sIHlfcmVxID0gaW50ZWxfZHAtPnBz cl9kcGNkWzFdICYNCj4gQEAgLTM0MCwxNCArMzM2LDE0IEBAIHZvaWQgaW50ZWxfcHNyX2luaXRf ZHBjZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiDCoAkJICogWS1jb29yZGluYXRlIHJl cXVpcmVtZW50IHBhbmVscyB3ZSB3b3VsZCBuZWVkIHRvIGVuYWJsZQ0KPiDCoAkJICogR1RDIGZp cnN0Lg0KPiDCoAkJICovDQo+IC0JCWRldl9wcml2LT5wc3Iuc2lua19wc3IyX3N1cHBvcnQgPSB5 X3JlcSAmJiBhbHBtOw0KPiArCQlpbnRlbF9kcC0+cHNyLnNpbmtfcHNyMl9zdXBwb3J0ID0geV9y ZXEgJiYgYWxwbTsNCj4gwqAJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiUFNSMiAlc3N1 cHBvcnRlZFxuIiwNCj4gLQkJCSAgICBkZXZfcHJpdi0+cHNyLnNpbmtfcHNyMl9zdXBwb3J0ID8g IiIgOiAibm90ICIpOw0KPiArCQkJICAgIGludGVsX2RwLT5wc3Iuc2lua19wc3IyX3N1cHBvcnQg PyAiIiA6ICJub3QgIik7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCQlp ZiAoZGV2X3ByaXYtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCkgew0KPiAtCQkJZGV2X3ByaXYtPnBz ci5jb2xvcmltZXRyeV9zdXBwb3J0ID0NCj4gKwkJaWYgKGludGVsX2RwLT5wc3Iuc2lua19wc3Iy X3N1cHBvcnQpIHsNCj4gKwkJCWludGVsX2RwLT5wc3IuY29sb3JpbWV0cnlfc3VwcG9ydCA9DQo+ IMKgCQkJCWludGVsX2RwX2dldF9jb2xvcmltZXRyeV9zdGF0dXMoaW50ZWxfZHApOw0KPiAtCQkJ ZGV2X3ByaXYtPnBzci5zdV94X2dyYW51bGFyaXR5ID0NCj4gKwkJCWludGVsX2RwLT5wc3Iuc3Vf eF9ncmFudWxhcml0eSA9DQo+IMKgCQkJCWludGVsX2RwX2dldF9zdV94X2dyYW51bGFydGl5KGlu dGVsX2RwKTsNCj4gwqAJCX0NCj4gwqAJfQ0KPiBAQCAtMzczLDcgKzM2OSw3IEBAIHN0YXRpYyB2 b2lkIGhzd19wc3Jfc2V0dXBfYXV4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IMKgCUJV SUxEX0JVR19PTihzaXplb2YoYXV4X21zZykgPiAyMCk7DQo+IMKgCWZvciAoaSA9IDA7IGkgPCBz aXplb2YoYXV4X21zZyk7IGkgKz0gNCkNCj4gwqAJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LA0K PiAtCQkJICAgICAgIEVEUF9QU1JfQVVYX0RBVEEoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyLCBp ID4+IDIpLA0KPiArCQkJICAgICAgIEVEUF9QU1JfQVVYX0RBVEEoaW50ZWxfZHAtPnBzci50cmFu c2NvZGVyLCBpID4+IDIpLA0KPiDCoAkJCSAgICAgICBpbnRlbF9kcF9wYWNrX2F1eCgmYXV4X21z Z1tpXSwgc2l6ZW9mKGF1eF9tc2cpIC0gaSkpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gwqAJYXV4X2Nsb2NrX2RpdmlkZXIgPSBpbnRlbF9kcC0+Z2V0X2F1eF9jbG9ja19k aXZpZGVyKGludGVsX2RwLCAwKTsNCj4gQEAgLTM4NCw3ICszODAsNyBAQCBzdGF0aWMgdm9pZCBo c3dfcHNyX3NldHVwX2F1eChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiDCoA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJLyogU2VsZWN0IG9ubHkgdmFsaWQgYml0cyBmb3Ig U1JEX0FVWF9DVEwgKi8NCj4gwqAJYXV4X2N0bCAmPSBwc3JfYXV4X21hc2s7DQo+IC0JaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1JfQVVYX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29k ZXIpLA0KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0FVWF9DVEwoaW50ZWxf ZHAtPnBzci50cmFuc2NvZGVyKSwNCj4gwqAJCSAgICAgICBhdXhfY3RsKTsNCj4gwqB9DQo+IMKg DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiBAQCAtMzk0LDE0ICszOTAsMTQgQEAgc3Rh dGljIHZvaWQgaW50ZWxfcHNyX2VuYWJsZV9zaW5rKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp DQo+IMKgCXU4IGRwY2RfdmFsID0gRFBfUFNSX0VOQUJMRTsNCj4gwqANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IMKgCS8qIEVuYWJsZSBBTFBNIGF0IHNpbmsgZm9yIHBzcjIgKi8NCj4g LQlpZiAoZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQpIHsNCj4gKwlpZiAoaW50ZWxfZHAtPnBz ci5wc3IyX2VuYWJsZWQpIHsNCj4gwqAJCWRybV9kcF9kcGNkX3dyaXRlYigmaW50ZWxfZHAtPmF1 eCwgRFBfUkVDRUlWRVJfQUxQTV9DT05GSUcsDQo+IMKgCQkJCSAgIERQX0FMUE1fRU5BQkxFIHwN Cj4gwqAJCQkJICAgRFBfQUxQTV9MT0NLX0VSUk9SX0lSUV9IUERfRU5BQkxFKTsNCj4gwqANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgCQlkcGNkX3ZhbCB8PSBEUF9QU1JfRU5BQkxF X1BTUjIgfCBEUF9QU1JfSVJRX0hQRF9XSVRIX0NSQ19FUlJPUlM7DQo+IMKgCX0gZWxzZSB7DQo+ IC0JCWlmIChkZXZfcHJpdi0+cHNyLmxpbmtfc3RhbmRieSkNCj4gKwkJaWYgKGludGVsX2RwLT5w c3IubGlua19zdGFuZGJ5KQ0KPiDCoAkJCWRwY2RfdmFsIHw9IERQX1BTUl9NQUlOX0xJTktfQUNU SVZFOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDgpDQo+IEBAIC00NjQsNyArNDYwLDcgQEAgc3RhdGljIHU4IHBzcl9j b21wdXRlX2lkbGVfZnJhbWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IMKgCSAqIG9m Zi1ieS1vbmUgaXNzdWUgdGhhdCBIVyBoYXMgaW4gc29tZSBjYXNlcy4NCj4gwqAJICovDQo+IMKg CWlkbGVfZnJhbWVzID0gbWF4KDYsIGRldl9wcml2LT52YnQucHNyLmlkbGVfZnJhbWVzKTsNCj4g LQlpZGxlX2ZyYW1lcyA9IG1heChpZGxlX2ZyYW1lcywgZGV2X3ByaXYtPnBzci5zaW5rX3N5bmNf bGF0ZW5jeSArIDEpOw0KPiArCWlkbGVfZnJhbWVzID0gbWF4KGlkbGVfZnJhbWVzLCBpbnRlbF9k cC0+cHNyLnNpbmtfc3luY19sYXRlbmN5ICsgMSk7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiDCoAlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGlkbGVfZnJhbWVz ID4gMHhmKSkNCj4gwqAJCWlkbGVfZnJhbWVzID0gMHhmOw0KPiBAQCAtNDg0LDcgKzQ4MCw3IEBA IHN0YXRpYyB2b2lkIGhzd19hY3RpdmF0ZV9wc3IxKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp DQo+IMKgCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSkNCj4gwqAJCXZhbCB8PSBFRFBfUFNSX01J Tl9MSU5LX0VOVFJZX1RJTUVfOF9MSU5FUzsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IC0JaWYgKGRldl9wcml2LT5wc3IubGlua19zdGFuZGJ5KQ0KPiArCWlmIChpbnRlbF9k cC0+cHNyLmxpbmtfc3RhbmRieSkNCj4gwqAJCXZhbCB8PSBFRFBfUFNSX0xJTktfU1RBTkRCWTsN Cj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgCXZhbCB8PSBpbnRlbF9wc3Ix X2dldF90cF90aW1lKGludGVsX2RwKTsNCj4gQEAgLTQ5Miw5ICs0ODgsOSBAQCBzdGF0aWMgdm9p ZCBoc3dfYWN0aXZhdGVfcHNyMShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiDCoAlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSA4KQ0KPiDCoAkJdmFsIHw9IEVEUF9QU1JfQ1JDX0VOQUJM RTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JdmFsIHw9IChpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKSAm DQo+ICsJdmFsIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTChpbnRlbF9k cC0+cHNyLnRyYW5zY29kZXIpKSAmDQo+IMKgCQlFRFBfUFNSX1JFU1RPUkVfUFNSX0FDVElWRV9D VFhfTUFTSyk7DQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1JfQ1RMKGRldl9w cml2LT5wc3IudHJhbnNjb2RlciksIHZhbCk7DQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IEVEUF9QU1JfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIHZhbCk7DQo+IMKgfQ0KPiDC oA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqBzdGF0aWMgdTMyIGludGVsX3BzcjJf Z2V0X3RwX3RpbWUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gQEAgLTUyOSw3ICs1MjUs NyBAQCBzdGF0aWMgdm9pZCBoc3dfYWN0aXZhdGVfcHNyMihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQ0KPiDCoAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtF KGRldl9wcml2KSkNCj4gwqAJCXZhbCB8PSBFRFBfWV9DT09SRElOQVRFX0VOQUJMRTsNCj4gwqAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JdmFsIHw9IEVEUF9QU1IyX0ZSQU1FX0JF Rk9SRV9TVShkZXZfcHJpdi0+cHNyLnNpbmtfc3luY19sYXRlbmN5ICsgMSk7DQo+ICsJdmFsIHw9 IEVEUF9QU1IyX0ZSQU1FX0JFRk9SRV9TVShpbnRlbF9kcC0+cHNyLnNpbmtfc3luY19sYXRlbmN5 ICsgMSk7DQo+IMKgCXZhbCB8PSBpbnRlbF9wc3IyX2dldF90cF90aW1lKGludGVsX2RwKTsNCj4g wqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEyKSB7DQo+IEBAIC01NDgsNyArNTQ0LDcgQEAgc3RhdGljIHZvaWQgaHN3X2FjdGl2 YXRlX3BzcjIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gwqAJCXZhbCB8PSBFRFBfUFNS Ml9GQVNUX1dBS0UoNyk7DQo+IMKgCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IC0JaWYgKGRldl9wcml2LT5wc3IucHNyMl9zZWxfZmV0Y2hfZW5hYmxlZCkgew0KPiArCWlm IChpbnRlbF9kcC0+cHNyLnBzcjJfc2VsX2ZldGNoX2VuYWJsZWQpIHsNCj4gwqAJCS8qIFdBIDE0 MDgzMzA4NDcgKi8NCj4gwqAJCWlmIChJU19UR0xfRElTUF9SRVZJRChkZXZfcHJpdiwgVEdMX1JF VklEX0EwLCBUR0xfUkVWSURfQTApIHx8DQo+IMKgCQkgICAgSVNfUktMX1JFVklEKGRldl9wcml2 LCBSS0xfUkVWSURfQTAsIFJLTF9SRVZJRF9BMCkpDQo+IEBAIC01NTcsMjAgKzU1MywyMCBAQCBz dGF0aWMgdm9pZCBoc3dfYWN0aXZhdGVfcHNyMihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0K PiDCoAkJCQkgICAgIERJU19SQU1fQllQQVNTX1BTUjJfTUFOX1RSQUNLKTsNCj4gwqANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwNCj4g LQkJCSAgICAgICBQU1IyX01BTl9UUktfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciksDQo+ ICsJCQkgICAgICAgUFNSMl9NQU5fVFJLX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLA0K PiDCoAkJCSAgICAgICBQU1IyX01BTl9UUktfQ1RMX0VOQUJMRSk7DQo+IMKgCX0gZWxzZSBpZiAo SEFTX1BTUjJfU0VMX0ZFVENIKGRldl9wcml2KSkgew0KPiDCoAkJaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsDQo+IC0JCQkgICAgICAgUFNSMl9NQU5fVFJLX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5z Y29kZXIpLCAwKTsNCj4gKwkJCSAgICAgICBQU1IyX01BTl9UUktfQ1RMKGludGVsX2RwLT5wc3Iu dHJhbnNjb2RlciksIDApOw0KPiDCoAl9DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiDCoAkvKg0KPiDCoAkgKiBQU1IyIEhXIGlzIGluY29ycmVjdGx5IHVzaW5nIEVEUF9QU1Jf VFAxX1RQM19TRUwgYW5kIEJTcGVjIGlzDQo+IMKgCSAqIHJlY29tbWVuZGluZyBrZWVwIHRoaXMg Yml0IHVuc2V0IHdoaWxlIFBTUjIgaXMgZW5hYmxlZC4NCj4gwqAJICovDQo+IC0JaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIEVEUF9QU1JfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciksIDAp Ow0KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0NUTChpbnRlbF9kcC0+cHNy LnRyYW5zY29kZXIpLCAwKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0J aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1IyX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5z Y29kZXIpLCB2YWwpOw0KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSMl9DVEwo aW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwgdmFsKTsNCj4gwqB9DQo+IMKgDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiDCoHN0YXRpYyBib29sDQo+IEBAIC01OTMsNTUgKzU4OSw1OCBA QCBzdGF0aWMgdTMyIGludGVsX2dldF9mcmFtZV90aW1lX3VzKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUpDQo+IMKgCQkJICAgIGRybV9tb2RlX3ZyZWZyZXNoKCZjc3RhdGUt Pmh3LmFkanVzdGVkX21vZGUpKTsNCj4gwqB9DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiAtc3RhdGljIHZvaWQgcHNyMl9wcm9ncmFtX2lkbGVfZnJhbWVzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gK3N0YXRpYyB2b2lkIHBzcjJfcHJvZ3JhbV9pZGxl X2ZyYW1lcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoAkJCQkgICAgIHUzMiBpZGxl X2ZyYW1lcykNCj4gwqB7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+IMKgCXUzMiB2YWw7DQo+IMKgDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiDCoAlpZGxlX2ZyYW1lcyA8PD0gIEVEUF9QU1IyX0lETEVfRlJBTUVf U0hJRlQ7DQo+IC0JdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRl dl9wcml2LT5wc3IudHJhbnNjb2RlcikpOw0KPiArCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3By aXYsIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsNCj4gwqAJdmFsICY9 IH5FRFBfUFNSMl9JRExFX0ZSQU1FX01BU0s7DQo+IMKgCXZhbCB8PSBpZGxlX2ZyYW1lczsNCj4g LQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRldl9wcml2LT5wc3IudHJh bnNjb2RlciksIHZhbCk7DQo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1IyX0NU TChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLCB2YWwpOw0KPiDCoH0NCj4gwqANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IC1zdGF0aWMgdm9pZCB0Z2xfcHNyMl9lbmFibGVfZGMzY28o c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiArc3RhdGljIHZvaWQgdGdsX3Bz cjJfZW5hYmxlX2RjM2NvKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IMKgew0KPiAtCXBz cjJfcHJvZ3JhbV9pZGxlX2ZyYW1lcyhkZXZfcHJpdiwgMCk7DQo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+ICsNCj4gKwlwc3Iy X3Byb2dyYW1faWRsZV9mcmFtZXMoaW50ZWxfZHAsIDApOw0KPiDCoAlpbnRlbF9kaXNwbGF5X3Bv d2VyX3NldF90YXJnZXRfZGNfc3RhdGUoZGV2X3ByaXYsIERDX1NUQVRFX0VOX0RDM0NPKTsNCj4g wqB9DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtc3RhdGljIHZvaWQgdGds X3BzcjJfZGlzYWJsZV9kYzNjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ ICtzdGF0aWMgdm9pZCB0Z2xfcHNyMl9kaXNhYmxlX2RjM2NvKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApDQo+IMKgew0KPiAtCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBkZXZfcHJpdi0+ cHNyLmRwOw0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJaW50 ZWxfZGlzcGxheV9wb3dlcl9zZXRfdGFyZ2V0X2RjX3N0YXRlKGRldl9wcml2LCBEQ19TVEFURV9F Tl9VUFRPX0RDNik7DQo+IC0JcHNyMl9wcm9ncmFtX2lkbGVfZnJhbWVzKGRldl9wcml2LCBwc3Jf Y29tcHV0ZV9pZGxlX2ZyYW1lcyhpbnRlbF9kcCkpOw0KPiArCXBzcjJfcHJvZ3JhbV9pZGxlX2Zy YW1lcyhpbnRlbF9kcCwgcHNyX2NvbXB1dGVfaWRsZV9mcmFtZXMoaW50ZWxfZHApKTsNCj4gwqB9 DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoHN0YXRpYyB2b2lkIHRnbF9k YzNjb19kaXNhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KPiDCoHsNCj4gLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQ0KPiAtCQljb250YWluZXJfb2Yod29y aywgdHlwZW9mKCpkZXZfcHJpdiksIHBzci5kYzNjb193b3JrLndvcmspOw0KPiArCXN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHAgPQ0KPiArCQljb250YWluZXJfb2Yod29yaywgdHlwZW9mKCppbnRl bF9kcCksIHBzci5kYzNjb193b3JrLndvcmspOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiArCW11dGV4X2xv Y2soJmludGVsX2RwLT5wc3IubG9jayk7DQo+IMKgCS8qIElmIGRlbGF5ZWQgd29yayBpcyBwZW5k aW5nLCBpdCBpcyBub3QgaWRsZSAqLw0KPiAtCWlmIChkZWxheWVkX3dvcmtfcGVuZGluZygmZGV2 X3ByaXYtPnBzci5kYzNjb193b3JrKSkNCj4gKwlpZiAoZGVsYXllZF93b3JrX3BlbmRpbmcoJmlu dGVsX2RwLT5wc3IuZGMzY29fd29yaykpDQo+IMKgCQlnb3RvIHVubG9jazsNCj4gwqANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JdGdsX3BzcjJfZGlzYWJsZV9kYzNjbyhkZXZfcHJp dik7DQo+ICsJdGdsX3BzcjJfZGlzYWJsZV9kYzNjbyhpbnRlbF9kcCk7DQo+IMKgdW5sb2NrOg0K PiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4gKwltdXRleF91bmxvY2so JmludGVsX2RwLT5wc3IubG9jayk7DQo+IMKgfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gLXN0YXRpYyB2b2lkIHRnbF9kaXNhbGxvd19kYzNjb19vbl9wc3IyX2V4aXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiArc3RhdGljIHZvaWQgdGdsX2Rpc2Fs bG93X2RjM2NvX29uX3BzcjJfZXhpdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiDCoHsN Cj4gLQlpZiAoIWRldl9wcml2LT5wc3IuZGMzY29fZW5hYmxlZCkNCj4gKwlpZiAoIWludGVsX2Rw LT5wc3IuZGMzY29fZW5hYmxlZCkNCj4gwqAJCXJldHVybjsNCj4gwqANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IC0JY2FuY2VsX2RlbGF5ZWRfd29yaygmZGV2X3ByaXYtPnBzci5kYzNj b193b3JrKTsNCj4gKwljYW5jZWxfZGVsYXllZF93b3JrKCZpbnRlbF9kcC0+cHNyLmRjM2NvX3dv cmspOw0KPiDCoAkvKiBCZWZvcmUgUFNSMiBleGl0IGRpc2FsbG93IGRjM2NvKi8NCj4gLQl0Z2xf cHNyMl9kaXNhYmxlX2RjM2NvKGRldl9wcml2KTsNCj4gKwl0Z2xfcHNyMl9kaXNhYmxlX2RjM2Nv KGludGVsX2RwKTsNCj4gwqB9DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDC oHN0YXRpYyB2b2lkDQo+IEBAIC03MTQsNyArNzEzLDcgQEAgc3RhdGljIGJvb2wgaW50ZWxfcHNy Ml9jb25maWdfdmFsaWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwNCj4gwqAJaW50IGNydGNf dmRpc3BsYXkgPSBjcnRjX3N0YXRlLT5ody5hZGp1c3RlZF9tb2RlLmNydGNfdmRpc3BsYXk7DQo+ IMKgCWludCBwc3JfbWF4X2ggPSAwLCBwc3JfbWF4X3YgPSAwLCBtYXhfYnBwID0gMDsNCj4gwqAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLnNpbmtf cHNyMl9zdXBwb3J0KQ0KPiArCWlmICghaW50ZWxfZHAtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCkN Cj4gwqAJCXJldHVybiBmYWxzZTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IMKgCWlmICghdHJhbnNjb2Rlcl9oYXNfcHNyMihkZXZfcHJpdiwgY3J0Y19zdGF0ZS0+Y3B1X3Ry YW5zY29kZXIpKSB7DQo+IEBAIC03MjQsNyArNzIzLDcgQEAgc3RhdGljIGJvb2wgaW50ZWxfcHNy Ml9jb25maWdfdmFsaWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwNCj4gwqAJCXJldHVybiBm YWxzZTsNCj4gwqAJfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAo IXBzcjJfZ2xvYmFsX2VuYWJsZWQoZGV2X3ByaXYpKSB7DQo+ICsJaWYgKCFwc3IyX2dsb2JhbF9l bmFibGVkKGludGVsX2RwKSkgew0KPiDCoAkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJQ U1IyIGRpc2FibGVkIGJ5IGZsYWdcbiIpOw0KPiDCoAkJcmV0dXJuIGZhbHNlOw0KPiDCoAl9DQo+ IEBAIC03NzMsMTAgKzc3MiwxMCBAQCBzdGF0aWMgYm9vbCBpbnRlbF9wc3IyX2NvbmZpZ192YWxp ZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoAkgKiBvbmx5IG5lZWQgdG8gdmFsaWRh dGUgdGhlIFNVIGJsb2NrIHdpZHRoIGlzIGEgbXVsdGlwbGUgb2YNCj4gwqAJICogeCBncmFudWxh cml0eS4NCj4gwqAJICovDQo+IC0JaWYgKGNydGNfaGRpc3BsYXkgJSBkZXZfcHJpdi0+cHNyLnN1 X3hfZ3JhbnVsYXJpdHkpIHsNCj4gKwlpZiAoY3J0Y19oZGlzcGxheSAlIGludGVsX2RwLT5wc3Iu c3VfeF9ncmFudWxhcml0eSkgew0KPiDCoAkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ IMKgCQkJICAgICJQU1IyIG5vdCBlbmFibGVkLCBoZGlzcGxheSglZCkgbm90IG11bHRpcGxlIG9m ICVkXG4iLA0KPiAtCQkJICAgIGNydGNfaGRpc3BsYXksIGRldl9wcml2LT5wc3Iuc3VfeF9ncmFu dWxhcml0eSk7DQo+ICsJCQkgICAgY3J0Y19oZGlzcGxheSwgaW50ZWxfZHAtPnBzci5zdV94X2dy YW51bGFyaXR5KTsNCj4gwqAJCXJldHVybiBmYWxzZTsNCj4gwqAJfQ0KPiDCoA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gQEAgLTgxMSwxMyArODEwLDEwIEBAIHZvaWQgaW50ZWxfcHNy X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsDQo+IMKgCQkmY3J0Y19z dGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsNCj4gwqAJaW50IHBzcl9zZXR1cF90aW1lOw0KPiDCoA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpKQ0K PiArCWlmICghQ0FOX1BTUihpbnRlbF9kcCkpDQo+IMKgCQlyZXR1cm47DQo+IMKgDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWlmIChpbnRlbF9kcCAhPSBkZXZfcHJpdi0+cHNyLmRw KQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlpZiAoIXBzcl9nbG9iYWxfZW5hYmxlZChkZXZfcHJp dikpIHsNCj4gKwlpZiAoIXBzcl9nbG9iYWxfZW5hYmxlZChpbnRlbF9kcCkpIHsNCj4gwqAJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiUFNSIGRpc2FibGVkIGJ5IGZsYWdcbiIpOw0KPiDC oAkJcmV0dXJuOw0KPiDCoAl9DQo+IEBAIC04MjUsMTYgKzgyMSwxOCBAQCB2b2lkIGludGVsX3Bz cl9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoAkvKg0KPiDC oAkgKiBIU1cgc3BlYyBleHBsaWNpdGx5IHNheXMgUFNSIGlzIHRpZWQgdG8gcG9ydCBBLg0KPiDC oAkgKiBCRFcrIHBsYXRmb3JtcyBoYXZlIGEgaW5zdGFuY2Ugb2YgUFNSIHJlZ2lzdGVycyBwZXIg dHJhbnNjb2RlciBidXQNCj4gLQkgKiBmb3Igbm93IGl0IG9ubHkgc3VwcG9ydHMgb25lIGluc3Rh bmNlIG9mIFBTUiwgc28gbGV0cyBrZWVwIGl0DQo+IC0JICogaGFyZGNvZGVkIHRvIFBPUlRfQQ0K PiArCSAqIEJEVywgR0VOOSBhbmQgR0VOMTEgYXJlIG5vdCB2YWxpZGF0ZWQgYnkgSFcgdGVhbS4N Cj4gKwkgKiBGb3Igbm93IGl0IG9ubHkgc3VwcG9ydHMgb25lIGluc3RhbmNlIG9mIFBTUiBmb3Ig QkRXLEdFTjkgYW5kIEdFTjExLg0KDQpOaXQ6IG1pc3NpbmcgYSBzcGFjZSBpbiBCRFcsR0VOOS4N Cg0KPiArCSAqIFNvIGxldHMga2VlcCBpdCBoYXJkY29kZWQgdG8gUE9SVF9BIGZvciBCRFcsIEdF TjkgYW5kIEdFTjExLg0KPiArCSAqIEJ1dCBHRU4xMiBzdXBwb3J0cyBhIGluc3RhbmNlIG9mIFBT UiByZWdpc3RlcnMgcGVyIHRyYW5zY29kZXIuDQo+IMKgCSAqLw0KPiAtCWlmIChkaWdfcG9ydC0+ YmFzZS5wb3J0ICE9IFBPUlRfQSkgew0KPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTIg JiYgZGlnX3BvcnQtPmJhc2UucG9ydCAhPSBQT1JUX0EpIHsNCj4gwqAJCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLA0KPiDCoAkJCSAgICAiUFNSIGNvbmRpdGlvbiBmYWlsZWQ6IFBvcnQgbm90 IHN1cHBvcnRlZFxuIik7DQo+IMKgCQlyZXR1cm47DQo+IMKgCX0NCj4gwqANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAo ZGV2X3ByaXYtPnBzci5zaW5rX25vdF9yZWxpYWJsZSkgew0KPiArCWlmIChpbnRlbF9kcC0+cHNy LnNpbmtfbm90X3JlbGlhYmxlKSB7DQo+IMKgCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwN Cj4gwqAJCQkgICAgIlBTUiBzaW5rIGltcGxlbWVudGF0aW9uIGlzIG5vdCByZWxpYWJsZVxuIik7 DQo+IMKgCQlyZXR1cm47DQo+IEBAIC04NzAsMjMgKzg2OCwyNCBAQCB2b2lkIGludGVsX3Bzcl9j b21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoHN0YXRpYyB2b2lk IGludGVsX3Bzcl9hY3RpdmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiDCoHsNCj4g wqAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9k cCk7DQo+ICsJZW51bSB0cmFuc2NvZGVyIHRyYW5zY29kZXIgPSBpbnRlbF9kcC0+cHNyLnRyYW5z Y29kZXI7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IC0JaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIoZGV2X3ByaXYsIGRl dl9wcml2LT5wc3IudHJhbnNjb2RlcikpDQo+ICsJaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIoZGV2 X3ByaXYsIHRyYW5zY29kZXIpKQ0KPiDCoAkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+ IC0JCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRldl9wcml2LT5w c3IudHJhbnNjb2RlcikpICYgRURQX1BTUjJfRU5BQkxFKTsNCj4gKwkJCSAgICBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBFRFBfUFNSMl9DVEwodHJhbnNjb2RlcikpICYgRURQX1BTUjJfRU5BQkxF KTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gwqAJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+IC0JCSAgICBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29k ZXIpKSAmIEVEUF9QU1JfRU5BQkxFKTsNCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwg ZGV2X3ByaXYtPnBzci5hY3RpdmUpOw0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2 LT5wc3IubG9jayk7DQo+ICsJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NU TCh0cmFuc2NvZGVyKSkgJiBFRFBfUFNSX0VOQUJMRSk7DQo+ICsJZHJtX1dBUk5fT04oJmRldl9w cml2LT5kcm0sIGludGVsX2RwLT5wc3IuYWN0aXZlKTsNCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxk KCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAkvKiBwc3IxIGFuZCBwc3IyIGFy ZSBtdXR1YWxseSBleGNsdXNpdmUuKi8NCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJs ZWQpDQo+ICsJaWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKQ0KPiDCoAkJaHN3X2FjdGl2 YXRlX3BzcjIoaW50ZWxfZHApOw0KPiDCoAllbHNlDQo+IMKgCQloc3dfYWN0aXZhdGVfcHNyMShp bnRlbF9kcCk7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IC0JZGV2X3ByaXYtPnBzci5hY3RpdmUgPSB0cnVlOw0KPiAr CWludGVsX2RwLT5wc3IuYWN0aXZlID0gdHJ1ZTsNCj4gwqB9DQo+IMKgDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgc3RhdGlj IHZvaWQgaW50ZWxfcHNyX2VuYWJsZV9zb3VyY2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwN Cj4gQEAgLTkwMiw3ICs5MDEsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZW5hYmxlX3NvdXJj ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoAlpZiAoSVNfSEFTV0VMTChkZXZfcHJp dikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkNCj4gwqAJCWhzd19wc3Jfc2V0dXBfYXV4KGlu dGVsX2RwKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQgJiYg KElTX0dFTihkZXZfcHJpdiwgOSkgJiYNCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJs ZWQgJiYgKElTX0dFTihkZXZfcHJpdiwgOSkgJiYNCj4gwqAJCQkJCSAgICFJU19HRU1JTklMQUtF KGRldl9wcml2KSkpIHsNCj4gwqAJCWk5MTVfcmVnX3QgcmVnID0gQ0hJQ0tFTl9UUkFOUyhjcHVf dHJhbnNjb2Rlcik7DQo+IMKgCQl1MzIgY2hpY2tlbiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IHJlZyk7DQo+IEBAIC05MjYsMTAgKzkyNSwxMCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZW5h YmxlX3NvdXJjZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoAlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA8IDExKQ0KPiDCoAkJbWFzayB8PSBFRFBfUFNSX0RFQlVHX01BU0tfRElTUF9S RUdfV1JJVEU7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1Jf REVCVUcoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwNCj4gKwlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgRURQX1BTUl9ERUJVRyhpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLA0KPiDCoAkJICAg ICAgIG1hc2spOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCXBzcl9pcnFfY29udHJvbChkZXZfcHJpdik7DQo+ICsJ cHNyX2lycV9jb250cm9sKGludGVsX2RwKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJaWYgKGNydGNfc3RhdGUt PmRjM2NvX2V4aXRsaW5lKSB7DQo+IMKgCQl1MzIgdmFsOw0KPiBAQCAtOTQ3LDMwICs5NDYsMzAg QEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2VuYWJsZV9zb3VyY2Uoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJaWYgKEhBU19QU1JfSFdfVFJBQ0tJTkcoZGV2X3ByaXYp ICYmIEhBU19QU1IyX1NFTF9GRVRDSChkZXZfcHJpdikpDQo+IMKgCQlpbnRlbF9kZV9ybXcoZGV2 X3ByaXYsIENISUNLRU5fUEFSMV8xLCBJR05PUkVfUFNSMl9IV19UUkFDS0lORywNCj4gLQkJCSAg ICAgZGV2X3ByaXYtPnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVkID8NCj4gKwkJCSAgICAgaW50 ZWxfZHAtPnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVkID8NCj4gwqAJCQkgICAgIElHTk9SRV9Q U1IyX0hXX1RSQUNLSU5HIDogMCk7DQo+IMKgfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtc3RhdGljIHZvaWQgaW50 ZWxfcHNyX2VuYWJsZV9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0K PiArc3RhdGljIHZvaWQgaW50ZWxfcHNyX2VuYWJsZV9sb2NrZWQoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwNCj4gwqAJCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLA0KPiDCoAkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUpDQo+IMKgew0KPiAtCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBkZXZfcHJp di0+cHNyLmRwOw0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3Rv X2k5MTUoaW50ZWxfZHApOw0KPiDCoAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9y dCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsNCj4gwqAJc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXIgPSAmZGlnX3BvcnQtPmJhc2U7DQo+IMKgCXUzMiB2YWw7DQo+IMKgDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0J ZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGRldl9wcml2LT5wc3IuZW5hYmxlZCk7DQo+ICsJ ZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT5wc3IuZW5hYmxlZCk7DQo+IMKg DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IC0JZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQgPSBjcnRjX3N0YXRlLT5oYXNfcHNy MjsNCj4gLQlkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyA9IDA7DQo+IC0JZGV2 X3ByaXYtPnBzci5waXBlID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpLT5w aXBlOw0KPiAtCWRldl9wcml2LT5wc3IuZGMzY29fZW5hYmxlZCA9ICEhY3J0Y19zdGF0ZS0+ZGMz Y29fZXhpdGxpbmU7DQo+IC0JZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyID0gY3J0Y19zdGF0ZS0+ Y3B1X3RyYW5zY29kZXI7DQo+ICsJaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQgPSBjcnRjX3N0 YXRlLT5oYXNfcHNyMjsNCj4gKwlpbnRlbF9kcC0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyA9 IDA7DQo+ICsJaW50ZWxfZHAtPnBzci5waXBlID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51 YXBpLmNydGMpLT5waXBlOw0KPiArCWludGVsX2RwLT5wc3IuZGMzY29fZW5hYmxlZCA9ICEhY3J0 Y19zdGF0ZS0+ZGMzY29fZXhpdGxpbmU7DQo+ICsJaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyID0g Y3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXI7DQo+IMKgCS8qIERDNS9EQzYgcmVxdWlyZXMgYXQg bGVhc3QgNiBpZGxlIGZyYW1lcyAqLw0KPiDCoAl2YWwgPSB1c2Vjc190b19qaWZmaWVzKGludGVs X2dldF9mcmFtZV90aW1lX3VzKGNydGNfc3RhdGUpICogNik7DQo+IC0JZGV2X3ByaXYtPnBzci5k YzNjb19leGl0X2RlbGF5ID0gdmFsOw0KPiAtCWRldl9wcml2LT5wc3IucHNyMl9zZWxfZmV0Y2hf ZW5hYmxlZCA9IGNydGNfc3RhdGUtPmVuYWJsZV9wc3IyX3NlbF9mZXRjaDsNCj4gKwlpbnRlbF9k cC0+cHNyLmRjM2NvX2V4aXRfZGVsYXkgPSB2YWw7DQo+ICsJaW50ZWxfZHAtPnBzci5wc3IyX3Nl bF9mZXRjaF9lbmFibGVkID0gY3J0Y19zdGF0ZS0+ZW5hYmxlX3BzcjJfc2VsX2ZldGNoOw0KPiDC oA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiDCoAkvKg0KPiDCoAkgKiBJZiBhIFBTUiBlcnJvciBoYXBwZW5lZCBhbmQgdGhlIGRy aXZlciBpcyByZWxvYWRlZCwgdGhlIEVEUF9QU1JfSUlSDQo+IEBAIC05ODIsMjcgKzk4MSwyNyBA QCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZW5hYmxlX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsDQo+IMKgCSAqLw0KPiDCoAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMikgew0KPiDCoAkJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gLQkJCQkgICAg VFJBTlNfUFNSX0lJUihkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsNCj4gKwkJCQkgICAgVFJB TlNfUFNSX0lJUihpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsNCj4gwqAJCXZhbCAmPSBFRFBf UFNSX0VSUk9SKDApOw0KPiDCoAl9IGVsc2Ugew0KPiDCoAkJdmFsID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgRURQX1BTUl9JSVIpOw0KPiAtCQl2YWwgJj0gRURQX1BTUl9FUlJPUihkZXZfcHJp di0+cHNyLnRyYW5zY29kZXIpOw0KPiArCQl2YWwgJj0gRURQX1BTUl9FUlJPUihpbnRlbF9kcC0+ cHNyLnRyYW5zY29kZXIpOw0KPiDCoAl9DQo+IMKgCWlmICh2YWwpIHsNCj4gLQkJZGV2X3ByaXYt PnBzci5zaW5rX25vdF9yZWxpYWJsZSA9IHRydWU7DQo+ICsJCWludGVsX2RwLT5wc3Iuc2lua19u b3RfcmVsaWFibGUgPSB0cnVlOw0KPiDCoAkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ IMKgCQkJICAgICJQU1IgaW50ZXJydXB0aW9uIGVycm9yIHNldCwgbm90IGVuYWJsaW5nIFBTUlxu Iik7DQo+IMKgCQlyZXR1cm47DQo+IMKgCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sICJFbmFibGluZyBQU1Ilc1xuIiwNCj4gLQkJICAgIGRldl9wcml2LT5wc3Iu cHNyMl9lbmFibGVkID8gIjIiIDogIjEiKTsNCj4gKwkJICAgIGludGVsX2RwLT5wc3IucHNyMl9l bmFibGVkID8gIjIiIDogIjEiKTsNCj4gwqAJaW50ZWxfZHBfY29tcHV0ZV9wc3JfdnNjX3NkcChp bnRlbF9kcCwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSwNCj4gLQkJCQkgICAgICZkZXZfcHJpdi0+ cHNyLnZzYyk7DQo+IC0JaW50ZWxfd3JpdGVfZHBfdnNjX3NkcChlbmNvZGVyLCBjcnRjX3N0YXRl LCAmZGV2X3ByaXYtPnBzci52c2MpOw0KPiArCQkJCSAgICAgJmludGVsX2RwLT5wc3IudnNjKTsN Cj4gKwlpbnRlbF93cml0ZV9kcF92c2Nfc2RwKGVuY29kZXIsIGNydGNfc3RhdGUsICZpbnRlbF9k cC0+cHNyLnZzYyk7DQo+IMKgCWludGVsX3Bzcl9lbmFibGVfc2luayhpbnRlbF9kcCk7DQo+IMKg CWludGVsX3Bzcl9lbmFibGVfc291cmNlKGludGVsX2RwLCBjcnRjX3N0YXRlKTsNCj4gLQlkZXZf cHJpdi0+cHNyLmVuYWJsZWQgPSB0cnVlOw0KPiArCWludGVsX2RwLT5wc3IuZW5hYmxlZCA9IHRy dWU7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IMKgCWludGVsX3Bzcl9hY3RpdmF0ZShpbnRlbF9kcCk7DQo+IMKgfQ0K PiBAQCAtMTAyMSw3ICsxMDIwLDcgQEAgdm9pZCBpbnRlbF9wc3JfZW5hYmxlKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsDQo+IMKgew0KPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAoIUNBTl9QU1Io ZGV2X3ByaXYpIHx8IGRldl9wcml2LT5wc3IuZHAgIT0gaW50ZWxfZHApDQo+ICsJaWYgKCFDQU5f UFNSKGludGVsX2RwKSkNCj4gwqAJCXJldHVybjsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJaWYgKCFjcnRjX3N0 YXRlLT5oYXNfcHNyKQ0KPiBAQCAtMTAyOSw0NiArMTAyOCw0NyBAQCB2b2lkIGludGVsX3Bzcl9l bmFibGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJZHJtX1dBUk5f T04oJmRldl9wcml2LT5kcm0sIGRldl9wcml2LT5kcnJzLmRwKTsNCj4gwqANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQltdXRl eF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiAtCWludGVsX3Bzcl9lbmFibGVfbG9ja2Vk KGRldl9wcml2LCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsNCj4gLQltdXRleF91bmxvY2soJmRl dl9wcml2LT5wc3IubG9jayk7DQo+ICsJbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsN Cj4gKwlpbnRlbF9wc3JfZW5hYmxlX2xvY2tlZChpbnRlbF9kcCwgY3J0Y19zdGF0ZSwgY29ubl9z dGF0ZSk7DQo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiDCoH0NCj4g wqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gLXN0YXRpYyB2b2lkIGludGVsX3Bzcl9leGl0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikNCj4gK3N0YXRpYyB2b2lkIGludGVsX3Bzcl9leGl0KHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApDQo+IMKgew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiDCoAl1MzIgdmFsOw0KPiDCoA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAt CWlmICghZGV2X3ByaXYtPnBzci5hY3RpdmUpIHsNCj4gLQkJaWYgKHRyYW5zY29kZXJfaGFzX3Bz cjIoZGV2X3ByaXYsIGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpIHsNCj4gKwlpZiAoIWludGVs X2RwLT5wc3IuYWN0aXZlKSB7DQo+ICsJCWlmICh0cmFuc2NvZGVyX2hhc19wc3IyKGRldl9wcml2 LCBpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKSB7DQo+IMKgCQkJdmFsID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwNCj4gLQkJCQkJICAgIEVEUF9QU1IyX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5z Y29kZXIpKTsNCj4gKwkJCQkJICAgIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29k ZXIpKTsNCj4gwqAJCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgdmFsICYgRURQX1BTUjJf RU5BQkxFKTsNCj4gwqAJCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsDQo+IC0JCQkJICAgIEVEUF9QU1JfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcikp Ow0KPiArCQkJCSAgICBFRFBfUFNSX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsNCj4g wqAJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCB2YWwgJiBFRFBfUFNSX0VOQUJMRSk7DQo+ IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IMKgCQlyZXR1cm47DQo+IMKgCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpZiAoZGV2X3ByaXYt PnBzci5wc3IyX2VuYWJsZWQpIHsNCj4gLQkJdGdsX2Rpc2FsbG93X2RjM2NvX29uX3BzcjJfZXhp dChkZXZfcHJpdik7DQo+ICsJaWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7DQo+ICsJ CXRnbF9kaXNhbGxvd19kYzNjb19vbl9wc3IyX2V4aXQoaW50ZWxfZHApOw0KPiDCoAkJdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4gLQkJCQkgICAgRURQX1BTUjJfQ1RMKGRldl9wcml2 LT5wc3IudHJhbnNjb2RlcikpOw0KPiArCQkJCSAgICBFRFBfUFNSMl9DVEwoaW50ZWxfZHAtPnBz ci50cmFuc2NvZGVyKSk7DQo+IMKgCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgISh2YWwg JiBFRFBfUFNSMl9FTkFCTEUpKTsNCj4gwqAJCXZhbCAmPSB+RURQX1BTUjJfRU5BQkxFOw0KPiDC oAkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsDQo+IC0JCQkgICAgICAgRURQX1BTUjJfQ1RMKGRl dl9wcml2LT5wc3IudHJhbnNjb2RlciksIHZhbCk7DQo+ICsJCQkgICAgICAgRURQX1BTUjJfQ1RM KGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIHZhbCk7DQo+IMKgCX0gZWxzZSB7DQo+IMKgCQl2 YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiAtCQkJCSAgICBFRFBfUFNSX0NUTChkZXZf cHJpdi0+cHNyLnRyYW5zY29kZXIpKTsNCj4gKwkJCQkgICAgRURQX1BTUl9DVEwoaW50ZWxfZHAt PnBzci50cmFuc2NvZGVyKSk7DQo+IMKgCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgISh2 YWwgJiBFRFBfUFNSX0VOQUJMRSkpOw0KPiDCoAkJdmFsICY9IH5FRFBfUFNSX0VOQUJMRTsNCj4g wqAJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LA0KPiAtCQkJICAgICAgIEVEUF9QU1JfQ1RMKGRl dl9wcml2LT5wc3IudHJhbnNjb2RlciksIHZhbCk7DQo+ICsJCQkgICAgICAgRURQX1BTUl9DVEwo aW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwgdmFsKTsNCj4gwqAJfQ0KPiAtCWRldl9wcml2LT5w c3IuYWN0aXZlID0gZmFsc2U7DQo+ICsJaW50ZWxfZHAtPnBzci5hY3RpdmUgPSBmYWxzZTsNCj4g wqB9DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IMKgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IEBAIC0xMDc3LDIxICsxMDc3LDIxIEBAIHN0YXRp YyB2b2lkIGludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KQ0KPiDCoAlpOTE1X3JlZ190IHBzcl9zdGF0dXM7DQo+IMKgCXUzMiBwc3Jfc3RhdHVzX21hc2s7 DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBzci5sb2NrKTsN Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiDCoA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiAtCWlmICghZGV2X3ByaXYtPnBzci5lbmFibGVkKQ0KPiArCWlmICghaW50ZWxfZHAtPnBzci5l bmFibGVkKQ0KPiDCoAkJcmV0dXJuOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwgIkRpc2FibGluZyBQU1Ilc1xuIiwNCj4gLQkJICAgIGRldl9wcml2LT5wc3IucHNy Ml9lbmFibGVkID8gIjIiIDogIjEiKTsNCj4gKwkJICAgIGludGVsX2RwLT5wc3IucHNyMl9lbmFi bGVkID8gIjIiIDogIjEiKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQlpbnRlbF9wc3JfZXhpdChkZXZfcHJpdik7 DQo+ICsJaW50ZWxfcHNyX2V4aXQoaW50ZWxfZHApOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWlmIChkZXZfcHJp di0+cHNyLnBzcjJfZW5hYmxlZCkgew0KPiAtCQlwc3Jfc3RhdHVzID0gRURQX1BTUjJfU1RBVFVT KGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcik7DQo+ICsJaWYgKGludGVsX2RwLT5wc3IucHNyMl9l bmFibGVkKSB7DQo+ICsJCXBzcl9zdGF0dXMgPSBFRFBfUFNSMl9TVEFUVVMoaW50ZWxfZHAtPnBz ci50cmFuc2NvZGVyKTsNCj4gwqAJCXBzcl9zdGF0dXNfbWFzayA9IEVEUF9QU1IyX1NUQVRVU19T VEFURV9NQVNLOw0KPiDCoAl9IGVsc2Ugew0KPiAtCQlwc3Jfc3RhdHVzID0gRURQX1BTUl9TVEFU VVMoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKTsNCj4gKwkJcHNyX3N0YXR1cyA9IEVEUF9QU1Jf U1RBVFVTKGludGVsX2RwLT5wc3IudHJhbnNjb2Rlcik7DQo+IMKgCQlwc3Jfc3RhdHVzX21hc2sg PSBFRFBfUFNSX1NUQVRVU19TVEFURV9NQVNLOw0KPiDCoAl9DQo+IMKgDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IEBAIC0xMTAx LDcgKzExMDEsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZGlzYWJsZV9sb2NrZWQoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkNCj4gwqAJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJUaW1l ZCBvdXQgd2FpdGluZyBQU1IgaWRsZSBzdGF0ZVxuIik7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgCS8qIFdBIDE0 MDgzMzA4NDcgKi8NCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVk ICYmDQo+ICsJaWYgKGludGVsX2RwLT5wc3IucHNyMl9zZWxfZmV0Y2hfZW5hYmxlZCAmJg0KPiDC oAkgICAgKElTX1RHTF9ESVNQX1JFVklEKGRldl9wcml2LCBUR0xfUkVWSURfQTAsIFRHTF9SRVZJ RF9BMCkgfHwNCj4gwqAJICAgICBJU19SS0xfUkVWSUQoZGV2X3ByaXYsIFJLTF9SRVZJRF9BMCwg UktMX1JFVklEX0EwKSkpDQo+IMKgCQlpbnRlbF9kZV9ybXcoZGV2X3ByaXYsIENISUNLRU5fUEFS MV8xLA0KPiBAQCAtMTExMCwxMCArMTExMCwxMCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZGlz YWJsZV9sb2NrZWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gwqAJLyogRGlzYWJsZSBQ U1Igb24gU2luayAqLw0KPiDCoAlkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2RwLT5hdXgsIERQ X1BTUl9FTl9DRkcsIDApOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5h YmxlZCkNCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQpDQo+IMKgCQlkcm1fZHBf ZHBjZF93cml0ZWIoJmludGVsX2RwLT5hdXgsIERQX1JFQ0VJVkVSX0FMUE1fQ09ORklHLCAwKTsN Cj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gLQlkZXZfcHJpdi0+cHNyLmVuYWJsZWQgPSBmYWxzZTsNCj4gKwlpbnRlbF9k cC0+cHNyLmVuYWJsZWQgPSBmYWxzZTsNCj4gwqB9DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgLyoqDQo+IEBAIC0x MTMxLDIwICsxMTMxLDIyIEBAIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGUoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwNCj4gwqAJaWYgKCFvbGRfY3J0Y19zdGF0ZS0+aGFzX3BzcikNCj4gwqAJCXJl dHVybjsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sICFDQU5f UFNSKGRldl9wcml2KSkpDQo+ICsJaWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCAhQ0FO X1BTUihpbnRlbF9kcCkpKQ0KPiDCoAkJcmV0dXJuOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCW11dGV4X2xvY2so JmRldl9wcml2LT5wc3IubG9jayk7DQo+ICsJbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2Nr KTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gwqAJaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKGludGVsX2RwKTsNCj4g wqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7DQo+IC0JY2FuY2Vs X3dvcmtfc3luYygmZGV2X3ByaXYtPnBzci53b3JrKTsNCj4gLQljYW5jZWxfZGVsYXllZF93b3Jr X3N5bmMoJmRldl9wcml2LT5wc3IuZGMzY29fd29yayk7DQo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRl bF9kcC0+cHNyLmxvY2spOw0KPiArCWNhbmNlbF93b3JrX3N5bmMoJmludGVsX2RwLT5wc3Iud29y ayk7DQo+ICsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpbnRlbF9kcC0+cHNyLmRjM2NvX3dv cmspOw0KPiDCoH0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLXN0YXRpYyB2b2lkIHBzcl9mb3JjZV9od190cmFja2lu Z19leGl0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gK3N0YXRpYyB2b2lk IHBzcl9mb3JjZV9od190cmFja2luZ19leGl0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ IMKgew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUo aW50ZWxfZHApOw0KPiArDQo+IMKgCWlmIChJU19USUdFUkxBS0UoZGV2X3ByaXYpKQ0KPiDCoAkJ LyoNCj4gwqAJCSAqIFdyaXRlcyB0byBDVVJTVVJGTElWRSBpbiBUR0wgYXJlIGNhdXNpbmcgSU9N TVUgZXJyb3JzIGFuZA0KPiBAQCAtMTE1OCw3ICsxMTYwLDcgQEAgc3RhdGljIHZvaWQgcHNyX2Zv cmNlX2h3X3RyYWNraW5nX2V4aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0K PiDCoAkJICogU28gdXNpbmcgdGhpcyB3b3JrYXJvdW5kIHVudGlsIHRoaXMgaXNzdWUgaXMgcm9v dCBjYXVzZWQNCj4gwqAJCSAqIGFuZCBhIGJldHRlciBmaXggaXMgZm91bmQuDQo+IMKgCQkgKi8N Cj4gLQkJaW50ZWxfcHNyX2V4aXQoZGV2X3ByaXYpOw0KPiArCQlpbnRlbF9wc3JfZXhpdChpbnRl bF9kcCk7DQo+IMKgCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkNCj4gwqAJCS8q DQo+IMKgCQkgKiBEaXNwbGF5IFdBICMwODg0OiBza2wrDQo+IEBAIC0xMTY5LDEzICsxMTcxLDEz IEBAIHN0YXRpYyB2b2lkIHBzcl9mb3JjZV9od190cmFja2luZ19leGl0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikNCj4gwqAJCSAqIGJ1dCBpdCBtYWtlcyBtb3JlIHNlbnNlIHdy aXRlIHRvIHRoZSBjdXJyZW50IGFjdGl2ZQ0KPiDCoAkJICogcGlwZS4NCj4gwqAJCSAqLw0KPiAt CQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ1VSU1VSRkxJVkUoZGV2X3ByaXYtPnBzci5waXBl KSwgMCk7DQo+ICsJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBDVVJTVVJGTElWRShpbnRlbF9k cC0+cHNyLnBpcGUpLCAwKTsNCj4gwqAJZWxzZQ0KPiDCoAkJLyoNCj4gwqAJCSAqIEEgd3JpdGUg dG8gQ1VSU1VSRkxJVkUgZG8gbm90IGNhdXNlIEhXIHRyYWNraW5nIHRvIGV4aXQgUFNSDQo+IMKg CQkgKiBvbiBvbGRlciBnZW5zIHNvIGRvaW5nIHRoZSBtYW51YWwgZXhpdCBpbnN0ZWFkLg0KPiDC oAkJICovDQo+IC0JCWludGVsX3Bzcl9leGl0KGRldl9wcml2KTsNCj4gKwkJaW50ZWxfcHNyX2V4 aXQoaW50ZWxfZHApOw0KPiDCoH0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqB2b2lkIGludGVsX3BzcjJfcHJvZ3Jh bV9wbGFuZV9zZWxfZmV0Y2goc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwNCj4gQEAgLTEyMjEs MTEgKzEyMjMsMTEgQEAgdm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsDQo+IMKgCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBQTEFORV9TRUxfRkVUQ0hfU0laRShwaXBlLCBwbGFuZS0+aWQpLCB2YWwpOw0KPiDCoH0NCj4g wqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gLXZvaWQgaW50ZWxfcHNyMl9wcm9ncmFtX3RyYW5zX21hbl90cmtfY3RsKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQ0KPiArdm9pZCBpbnRlbF9wc3Iy X3Byb2dyYW1fdHJhbnNfbWFuX3Rya19jdGwoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwNCj4g KwkJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkNCj4gwqB7 DQo+IC0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUt PnVhcGkuY3J0Yyk7DQo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShjcnRjLT5iYXNlLmRldik7DQo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3By aXYtPnBzcjsNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19p OTE1KGludGVsX2RwKTsNCj4gKwlzdHJ1Y3QgaW50ZWxfcHNyICpwc3IgPSAmaW50ZWxfZHAtPnBz cjsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gwqAJaWYgKCFIQVNfUFNSMl9TRUxfRkVUQ0goZGV2X3ByaXYpIHx8DQo+ IMKgCSAgICAhY3J0Y19zdGF0ZS0+ZW5hYmxlX3BzcjJfc2VsX2ZldGNoKQ0KPiBAQCAtMTQyNywx MyArMTQyOSwxMyBAQCB2b2lkIGludGVsX3Bzcl91cGRhdGUoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCwNCj4gwqAJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25u X3N0YXRlKQ0KPiDCoHsNCj4gwqAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3By aXYtPnBzcjsNCj4gKwlzdHJ1Y3QgaW50ZWxfcHNyICpwc3IgPSAmaW50ZWxfZHAtPnBzcjsNCj4g wqAJYm9vbCBlbmFibGUsIHBzcjJfZW5hYmxlOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWlmICghQ0FOX1BTUihk ZXZfcHJpdikgfHwgUkVBRF9PTkNFKHBzci0+ZHApICE9IGludGVsX2RwKQ0KPiArCWlmICghQ0FO X1BTUihpbnRlbF9kcCkpDQo+IMKgCQlyZXR1cm47DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JbXV0ZXhfbG9jaygm ZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2sp Ow0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiDCoAllbmFibGUgPSBjcnRjX3N0YXRlLT5oYXNfcHNyOw0KPiDCoAlwc3Iy X2VuYWJsZSA9IGNydGNfc3RhdGUtPmhhc19wc3IyOw0KPiBAQCAtMTQ0MSwxNSArMTQ0MywxNSBA QCB2b2lkIGludGVsX3Bzcl91cGRhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwNCj4gwqAJ aWYgKGVuYWJsZSA9PSBwc3ItPmVuYWJsZWQgJiYgcHNyMl9lbmFibGUgPT0gcHNyLT5wc3IyX2Vu YWJsZWQpIHsNCj4gwqAJCS8qIEZvcmNlIGEgUFNSIGV4aXQgd2hlbiBlbmFibGluZyBDUkMgdG8g YXZvaWQgQ1JDIHRpbWVvdXRzICovDQo+IMKgCQlpZiAoY3J0Y19zdGF0ZS0+Y3JjX2VuYWJsZWQg JiYgcHNyLT5lbmFibGVkKQ0KPiAtCQkJcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQoZGV2X3By aXYpOw0KPiArCQkJcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQoaW50ZWxfZHApOw0KPiDCoAkJ ZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDkgJiYgcHNyLT5lbmFibGVkKSB7DQo+IMKg CQkJLyoNCj4gwqAJCQkgKiBBY3RpdmF0ZSBQU1IgYWdhaW4gYWZ0ZXIgYSBmb3JjZSBleGl0IHdo ZW4gZW5hYmxpbmcNCj4gwqAJCQkgKiBDUkMgaW4gb2xkZXIgZ2Vucw0KPiDCoAkJCSAqLw0KPiAt CQkJaWYgKCFkZXZfcHJpdi0+cHNyLmFjdGl2ZSAmJg0KPiAtCQkJICAgICFkZXZfcHJpdi0+cHNy LmJ1c3lfZnJvbnRidWZmZXJfYml0cykNCj4gLQkJCQlzY2hlZHVsZV93b3JrKCZkZXZfcHJpdi0+ cHNyLndvcmspOw0KPiArCQkJaWYgKCFpbnRlbF9kcC0+cHNyLmFjdGl2ZSAmJg0KPiArCQkJICAg ICFpbnRlbF9kcC0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cykNCj4gKwkJCQlzY2hlZHVsZV93 b3JrKCZpbnRlbF9kcC0+cHNyLndvcmspOw0KPiDCoAkJfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAkJZ290byB1 bmxvY2s7DQo+IEBAIC0xNDU5LDM0ICsxNDYxLDIzIEBAIHZvaWQgaW50ZWxfcHNyX3VwZGF0ZShz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoAkJaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2Vk KGludGVsX2RwKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJaWYgKGVuYWJsZSkNCj4gLQkJaW50ZWxfcHNyX2Vu YWJsZV9sb2NrZWQoZGV2X3ByaXYsIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOw0KPiArCQlpbnRl bF9wc3JfZW5hYmxlX2xvY2tlZChpbnRlbF9kcCwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7DQo+ IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IMKgdW5sb2NrOg0KPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2Nr KTsNCj4gKwltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7DQo+IMKgfQ0KPiDCoA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiDCoC8qKg0KPiAtICogaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUgLSB3YWl0IGZvciBQU1Ix IHRvIGlkbGUNCj4gLSAqIEBuZXdfY3J0Y19zdGF0ZTogbmV3IENSVEMgc3RhdGUNCj4gKyAqIHBz cl93YWl0X2Zvcl9pZGxlIC0gd2FpdCBmb3IgUFNSMSB0byBpZGxlDQo+ICsgKiBAaW50ZWxfZHA6 IEludGVsIERQDQo+IMKgwqAqIEBvdXRfdmFsdWU6IFBTUiBzdGF0dXMgaW4gY2FzZSBvZiBmYWls dXJlDQo+IMKgwqAqDQo+IC0gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxl ZCBmcm9tIHBpcGVfdXBkYXRlX3N0YXJ0KCkgd2hlcmUgaXQgaXMNCj4gLSAqIG5vdCBleHBlY3Rl ZCB0byByYWNlIHdpdGggUFNSIGVuYWJsZSBvciBkaXNhYmxlLg0KPiAtICoNCj4gwqDCoCogUmV0 dXJuczogMCBvbiBzdWNjZXNzIG9yIC1FVElNRU9VVCBpZiBQU1Igc3RhdHVzIGRvZXMgbm90IGlk bGUuDQo+ICsgKg0KPiDCoMKgKi8NCj4gLWludCBpbnRlbF9wc3Jfd2FpdF9mb3JfaWRsZShjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUsDQo+IC0JCQkgICAgdTMy ICpvdXRfdmFsdWUpDQo+ICtzdGF0aWMgaW50IHBzcl93YWl0X2Zvcl9pZGxlKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsIHUzMiAqb3V0X3ZhbHVlKQ0KPiDCoHsNCj4gLQlzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMobmV3X2NydGNfc3RhdGUtPnVhcGkuY3J0Yyk7DQo+ IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNl LmRldik7DQo+IC0NCj4gLQlpZiAoIWRldl9wcml2LT5wc3IuZW5hYmxlZCB8fCAhbmV3X2NydGNf c3RhdGUtPmhhc19wc3IpDQo+IC0JCXJldHVybiAwOw0KPiAtDQo+IC0JLyogRklYTUU6IFVwZGF0 ZSB0aGlzIGZvciBQU1IyIGlmIHdlIG5lZWQgdG8gd2FpdCBmb3IgaWRsZSAqLw0KPiAtCWlmIChS RUFEX09OQ0UoZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQpKQ0KPiAtCQlyZXR1cm4gMDsNCj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2Rw KTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gwqAJLyoNCj4gwqAJICogRnJvbSBic3BlYzogUGFuZWwgU2VsZiBSZWZy ZXNoIChCRFcrKQ0KPiBAQCAtMTQ5NCwzMiArMTQ4NSw2NCBAQCBpbnQgaW50ZWxfcHNyX3dhaXRf Zm9yX2lkbGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlLA0K PiDCoAkgKiBleGl0IHRyYWluaW5nIHRpbWUgKyAxLjUgbXMgb2YgYXV4IGNoYW5uZWwgaGFuZHNo YWtlLiA1MCBtcyBpcw0KPiDCoAkgKiBkZWZlbnNpdmUgZW5vdWdoIHRvIGNvdmVyIGV2ZXJ5dGhp bmcuDQo+IMKgCSAqLw0KPiAtDQo+IMKgCXJldHVybiBfX2ludGVsX3dhaXRfZm9yX3JlZ2lzdGVy KCZkZXZfcHJpdi0+dW5jb3JlLA0KPiAtCQkJCQkgRURQX1BTUl9TVEFUVVMoZGV2X3ByaXYtPnBz ci50cmFuc2NvZGVyKSwNCj4gKwkJCQkJIEVEUF9QU1JfU1RBVFVTKGludGVsX2RwLT5wc3IudHJh bnNjb2RlciksDQo+IMKgCQkJCQkgRURQX1BTUl9TVEFUVVNfU1RBVEVfTUFTSywNCj4gwqAJCQkJ CSBFRFBfUFNSX1NUQVRVU19TVEFURV9JRExFLCAyLCA1MCwNCj4gwqAJCQkJCSBvdXRfdmFsdWUp Ow0KPiDCoH0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gLXN0YXRpYyBib29sIF9fcHNyX3dhaXRfZm9yX2lkbGVfbG9j a2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gKy8qKg0KPiArICogaW50 ZWxfcHNyX3dhaXRfZm9yX2lkbGUgLSB3YWl0IGZvciBQU1IxIHRvIGlkbGUNCj4gKyAqIEBuZXdf Y3J0Y19zdGF0ZTogbmV3IENSVEMgc3RhdGUNCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlz IGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBmcm9tIHBpcGVfdXBkYXRlX3N0YXJ0KCkgd2hlcmUgaXQg aXMNCj4gKyAqIG5vdCBleHBlY3RlZCB0byByYWNlIHdpdGggUFNSIGVuYWJsZSBvciBkaXNhYmxl Lg0KPiArICovDQo+ICt2b2lkIGludGVsX3Bzcl93YWl0X2Zvcl9pZGxlKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSkNCj4gK3sNCg0KSXQgd2lsbCB3YWl0IGZv ciBpZGxlIGluIGV2ZXJ5IERQIHBvcnQgdGhhdCBzdXBwb3J0cyBQU1IuDQoNCj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG5ld19jcnRjX3N0YXRlLT51YXBp LmNydGMtPmRldik7DQo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7DQo+ICsJdTMy IHBzcl9zdGF0dXM7DQo+ICsNCj4gKwlpZiAoIW5ld19jcnRjX3N0YXRlLT5oYXNfcHNyKQ0KPiAr CQlyZXR1cm47DQo+ICsNCj4gKwlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwgZW5j b2Rlcikgew0KPiArCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2Rw KGVuY29kZXIpOw0KPiArDQo+ICsJCWlmIChlbmNvZGVyLT50eXBlICE9IElOVEVMX09VVFBVVF9F RFApDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQkvKiB3aGVuIHRoZSBQU1IxIGlzIGVuYWJs ZWQgKi8NCj4gKwkJaWYgKGludGVsX2RwLT5wc3IuZW5hYmxlZCAmJiAhaW50ZWxfZHAtPnBzci5w c3IyX2VuYWJsZWQpIHsNCj4gKwkJCWlmIChwc3Jfd2FpdF9mb3JfaWRsZShpbnRlbF9kcCwgJnBz cl9zdGF0dXMpKQ0KPiArCQkJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sDQo+ICsJCQkJCSJQU1Ig aWRsZSB0aW1lZCBvdXQgMHgleCwgYXRvbWljIHVwZGF0ZSBtYXkgZmFpbFxuIiwNCj4gKwkJCQkJ cHNyX3N0YXR1cyk7DQo+ICsJCX0NCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIF9f cHNyX3dhaXRfZm9yX2lkbGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IMKg ew0KPiDCoAlpOTE1X3JlZ190IHJlZzsNCj4gwqAJdTMyIG1hc2s7DQo+IMKgCWludCBlcnI7DQo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9k cCk7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWlmICghZGV2X3ByaXYtPnBzci5lbmFibGVkKQ0KPiAr CWlmICghaW50ZWxfZHAtPnBzci5lbmFibGVkKQ0KPiDCoAkJcmV0dXJuIGZhbHNlOw0KPiDCoA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQpIHsNCj4gLQkJcmVn ID0gRURQX1BTUjJfU1RBVFVTKGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcik7DQo+ICsJaWYgKGlu dGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7DQo+ICsJCXJlZyA9IEVEUF9QU1IyX1NUQVRVUyhp bnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpOw0KPiDCoAkJbWFzayA9IEVEUF9QU1IyX1NUQVRVU19T VEFURV9NQVNLOw0KPiDCoAl9IGVsc2Ugew0KPiAtCQlyZWcgPSBFRFBfUFNSX1NUQVRVUyhkZXZf cHJpdi0+cHNyLnRyYW5zY29kZXIpOw0KPiArCQlyZWcgPSBFRFBfUFNSX1NUQVRVUyhpbnRlbF9k cC0+cHNyLnRyYW5zY29kZXIpOw0KPiDCoAkJbWFzayA9IEVEUF9QU1JfU1RBVFVTX1NUQVRFX01B U0s7DQo+IMKgCX0NCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ cHNyLmxvY2spOw0KPiArCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4gwqAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IMKgCWVyciA9IGludGVsX2RlX3dhaXRfZm9yX2NsZWFyKGRldl9wcml2LCBy ZWcsIG1hc2ssIDUwKTsNCj4gwqAJaWYgKGVycikNCj4gQEAgLTE1MjcsOCArMTU1MCw4IEBAIHN0 YXRpYyBib29sIF9fcHNyX3dhaXRfZm9yX2lkbGVfbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikNCj4gwqAJCQkiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFBTUiBJZGxlIGZv ciByZS1lbmFibGVcbiIpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJLyogQWZ0ZXIgdGhlIHVubG9j a2VkIHdhaXQsIHZlcmlmeSB0aGF0IFBTUiBpcyBzdGlsbCB3YW50ZWQhICovDQo+IC0JbXV0ZXhf bG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4gLQlyZXR1cm4gZXJyID09IDAgJiYgZGV2X3By aXYtPnBzci5lbmFibGVkOw0KPiArCW11dGV4X2xvY2soJmludGVsX2RwLT5wc3IubG9jayk7DQo+ ICsJcmV0dXJuIGVyciA9PSAwICYmIGludGVsX2RwLT5wc3IuZW5hYmxlZDsNCj4gwqB9DQo+IMKg DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiDCoHN0YXRpYyBpbnQgaW50ZWxfcHNyX2Zhc3RzZXRfZm9yY2Uoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiBAQCAtMTU5NCwxMSArMTYxNywxMiBAQCBz dGF0aWMgaW50IGludGVsX3Bzcl9mYXN0c2V0X2ZvcmNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikNCj4gwqAJcmV0dXJuIGVycjsNCj4gwqB9DQo+IMKgDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAt aW50IGludGVsX3Bzcl9kZWJ1Z19zZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LCB1NjQgdmFsKQ0KPiAraW50IGludGVsX3Bzcl9kZWJ1Z19zZXQoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwgdTY0IHZhbCkNCj4gwqB7DQo+IMKgCWNvbnN0IHUzMiBtb2RlID0gdmFsICYgSTkx NV9QU1JfREVCVUdfTU9ERV9NQVNLOw0KPiDCoAl1MzIgb2xkX21vZGU7DQo+IMKgCWludCByZXQ7 DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRl bF9kcCk7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAlpZiAodmFsICYgfihJOTE1X1BTUl9ERUJVR19J UlEgfCBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0spIHx8DQo+IMKgCSAgICBtb2RlID4gSTkxNV9Q U1JfREVCVUdfRk9SQ0VfUFNSMSkgew0KPiBAQCAtMTYwNiwyMSArMTYzMCwyMSBAQCBpbnQgaW50 ZWxfcHNyX2RlYnVnX3NldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU2NCB2 YWwpDQo+IMKgCQlyZXR1cm4gLUVJTlZBTDsNCj4gwqAJfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQly ZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5wc3IubG9jayk7DQo+ICsJ cmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiDC oAlpZiAocmV0KQ0KPiDCoAkJcmV0dXJuIHJldDsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0Jb2xkX21v ZGUgPSBkZXZfcHJpdi0+cHNyLmRlYnVnICYgSTkxNV9QU1JfREVCVUdfTU9ERV9NQVNLOw0KPiAt CWRldl9wcml2LT5wc3IuZGVidWcgPSB2YWw7DQo+ICsJb2xkX21vZGUgPSBpbnRlbF9kcC0+cHNy LmRlYnVnICYgSTkxNV9QU1JfREVCVUdfTU9ERV9NQVNLOw0KPiArCWludGVsX2RwLT5wc3IuZGVi dWcgPSB2YWw7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAkvKg0KPiDCoAkgKiBEbyBpdCByaWdodCBh d2F5IGlmIGl0J3MgYWxyZWFkeSBlbmFibGVkLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkb25lDQo+ IMKgCSAqIHdoZW4gZW5hYmxpbmcgdGhlIHNvdXJjZS4NCj4gwqAJICovDQo+IC0JaWYgKGRldl9w cml2LT5wc3IuZW5hYmxlZCkNCj4gLQkJcHNyX2lycV9jb250cm9sKGRldl9wcml2KTsNCj4gKwlp ZiAoaW50ZWxfZHAtPnBzci5lbmFibGVkKQ0KPiArCQlwc3JfaXJxX2NvbnRyb2woaW50ZWxfZHAp Ow0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7 DQo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiDCoA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gwqAJaWYgKG9sZF9tb2RlICE9IG1vZGUpDQo+IMKgCQlyZXQgPSBpbnRlbF9wc3JfZmFzdHNl dF9mb3JjZShkZXZfcHJpdik7DQo+IEBAIC0xNjI4LDI4ICsxNjUyLDI4IEBAIGludCBpbnRlbF9w c3JfZGVidWdfc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTY0IHZhbCkN Cj4gwqAJcmV0dXJuIHJldDsNCj4gwqB9DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtc3RhdGljIHZvaWQg aW50ZWxfcHNyX2hhbmRsZV9pcnEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0K PiArc3RhdGljIHZvaWQgaW50ZWxfcHNyX2hhbmRsZV9pcnEoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkNCj4gwqB7DQo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsN Cj4gKwlzdHJ1Y3QgaW50ZWxfcHNyICpwc3IgPSAmaW50ZWxfZHAtPnBzcjsNCj4gwqANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IC0JaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKHBzci0+ZHApOw0KPiArCWludGVsX3Bz cl9kaXNhYmxlX2xvY2tlZChpbnRlbF9kcCk7DQo+IMKgCXBzci0+c2lua19ub3RfcmVsaWFibGUg PSB0cnVlOw0KPiDCoAkvKiBsZXQncyBtYWtlIHN1cmUgdGhhdCBzaW5rIGlzIGF3YWtlbiAqLw0K PiAtCWRybV9kcF9kcGNkX3dyaXRlYigmcHNyLT5kcC0+YXV4LCBEUF9TRVRfUE9XRVIsIERQX1NF VF9QT1dFUl9EMCk7DQo+ICsJZHJtX2RwX2RwY2Rfd3JpdGViKCZpbnRlbF9kcC0+YXV4LCBEUF9T RVRfUE9XRVIsIERQX1NFVF9QT1dFUl9EMCk7DQo+IMKgfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqBz dGF0aWMgdm9pZCBpbnRlbF9wc3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+IMKg ew0KPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9DQo+IC0JCWNvbnRhaW5l cl9vZih3b3JrLCB0eXBlb2YoKmRldl9wcml2KSwgcHNyLndvcmspOw0KPiArCXN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAgPQ0KPiArCQljb250YWluZXJfb2Yod29yaywgdHlwZW9mKCppbnRlbF9k cCksIHBzci53b3JrKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYt PnBzci5sb2NrKTsNCj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiDCoA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gLQlpZiAoIWRldl9wcml2LT5wc3IuZW5hYmxlZCkNCj4gKwlpZiAoIWludGVs X2RwLT5wc3IuZW5hYmxlZCkNCj4gwqAJCWdvdG8gdW5sb2NrOw0KPiDCoA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g LQlpZiAoUkVBRF9PTkNFKGRldl9wcml2LT5wc3IuaXJxX2F1eF9lcnJvcikpDQo+IC0JCWludGVs X3Bzcl9oYW5kbGVfaXJxKGRldl9wcml2KTsNCj4gKwlpZiAoUkVBRF9PTkNFKGludGVsX2RwLT5w c3IuaXJxX2F1eF9lcnJvcikpDQo+ICsJCWludGVsX3Bzcl9oYW5kbGVfaXJxKGludGVsX2RwKTsN Cj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IMKgCS8qDQo+IMKgCSAqIFdlIGhhdmUgdG8gbWFrZSBzdXJlIFBT UiBpcyByZWFkeSBmb3IgcmUtZW5hYmxlDQo+IEBAIC0xNjU3LDcgKzE2ODEsNyBAQCBzdGF0aWMg dm9pZCBpbnRlbF9wc3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+IMKgCSAqIFBT UiBtaWdodCB0YWtlIHNvbWUgdGltZSB0byBnZXQgZnVsbHkgZGlzYWJsZWQNCj4gwqAJICogYW5k IGJlIHJlYWR5IGZvciByZS1lbmFibGUuDQo+IMKgCSAqLw0KPiAtCWlmICghX19wc3Jfd2FpdF9m b3JfaWRsZV9sb2NrZWQoZGV2X3ByaXYpKQ0KPiArCWlmICghX19wc3Jfd2FpdF9mb3JfaWRsZV9s b2NrZWQoaW50ZWxfZHApKQ0KPiDCoAkJZ290byB1bmxvY2s7DQo+IMKgDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDC oAkvKg0KPiBAQCAtMTY2NSwxMiArMTY4OSwxMiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3Jfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+IMKgCSAqIHJlY2hlY2suIFNpbmNlIHBzcl9m bHVzaCBmaXJzdCBjbGVhcnMgdGhpcyBhbmQgdGhlbiByZXNjaGVkdWxlcyB3ZQ0KPiDCoAkgKiB3 b24ndCBldmVyIG1pc3MgYSBmbHVzaCB3aGVuIGJhaWxpbmcgb3V0IGhlcmUuDQo+IMKgCSAqLw0K PiAtCWlmIChkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyB8fCBkZXZfcHJpdi0+ cHNyLmFjdGl2ZSkNCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMg fHwgaW50ZWxfZHAtPnBzci5hY3RpdmUpDQo+IMKgCQlnb3RvIHVubG9jazsNCj4gwqANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IC0JaW50ZWxfcHNyX2FjdGl2YXRlKGRldl9wcml2LT5wc3IuZHApOw0KPiArCWludGVs X3Bzcl9hY3RpdmF0ZShpbnRlbF9kcCk7DQo+IMKgdW5sb2NrOg0KPiAtCW11dGV4X3VubG9jaygm ZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4gKwltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9j ayk7DQo+IMKgfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAvKioNCj4gQEAgLTE2ODksMjcgKzE3MTMs MzUgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3Jr KQ0KPiDCoHZvaWQgaW50ZWxfcHNyX2ludmFsaWRhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LA0KPiDCoAkJCSAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cywgZW51bSBmYl9v cF9vcmlnaW4gb3JpZ2luKQ0KPiDCoHsNCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpKQ0KPiAt CQlyZXR1cm47DQo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7DQo+ICsJc3RydWN0 IGludGVsX2RwICppbnRlbF9kcDsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JaWYgKG9yaWdpbiA9PSBP UklHSU5fRkxJUCkNCj4gLQkJcmV0dXJuOw0KPiArCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJp di0+ZHJtLCBlbmNvZGVyKSB7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCW11dGV4X2xvY2soJmRldl9w cml2LT5wc3IubG9jayk7DQo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLmVuYWJsZWQpIHsNCj4gLQkJ bXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiAtCQlyZXR1cm47DQo+IC0JfQ0K PiArCQlpbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsNCj4gKwkJaWYgKGVuY29k ZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0VEUCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQlpZiAo IUNBTl9QU1IoaW50ZWxfZHApKQ0KPiArCQkJY29udGludWU7DQo+IMKgDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAt CWZyb250YnVmZmVyX2JpdHMgJj0gSU5URUxfRlJPTlRCVUZGRVJfQUxMX01BU0soZGV2X3ByaXYt PnBzci5waXBlKTsNCj4gLQlkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyB8PSBm cm9udGJ1ZmZlcl9iaXRzOw0KPiArCQlpZiAob3JpZ2luID09IE9SSUdJTl9GTElQKQ0KPiArCQkJ Y29udGludWU7DQo+ICsNCj4gKwkJbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4g KwkJaWYgKCFpbnRlbF9kcC0+cHNyLmVuYWJsZWQpIHsNCj4gKwkJCW11dGV4X3VubG9jaygmaW50 ZWxfZHAtPnBzci5sb2NrKTsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+IMKgDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiAtCWlmIChmcm9udGJ1ZmZlcl9iaXRzKQ0KPiAtCQlpbnRlbF9wc3JfZXhpdChkZXZfcHJp dik7DQo+ICsJCWZyb250YnVmZmVyX2JpdHMgJj0gSU5URUxfRlJPTlRCVUZGRVJfQUxMX01BU0so aW50ZWxfZHAtPnBzci5waXBlKTsNCj4gKwkJaW50ZWxfZHAtPnBzci5idXN5X2Zyb250YnVmZmVy X2JpdHMgfD0gZnJvbnRidWZmZXJfYml0czsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JbXV0ZXhfdW5s b2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiAtfQ0KPiArCQlpZiAoZnJvbnRidWZmZXJfYml0 cykNCj4gKwkJCWludGVsX3Bzcl9leGl0KGludGVsX2RwKTsNCj4gwqANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ICsJ CW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4gKwl9DQo+ICt9DQo+IMKgLyoN Cj4gwqDCoCogV2hlbiB3ZSB3aWxsIGJlIGNvbXBsZXRlbHkgcmVseSBvbiBQU1IyIFMvVyB0cmFj a2luZyBpbiBmdXR1cmUsDQo+IMKgwqAqIGludGVsX3Bzcl9mbHVzaCgpIHdpbGwgaW52YWxpZGF0 ZSBhbmQgZmx1c2ggdGhlIFBTUiBmb3IgT1JJR0lOX0ZMSVANCj4gQEAgLTE3MTcsMTUgKzE3NDks MTUgQEAgdm9pZCBpbnRlbF9wc3JfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsDQo+IMKgwqAqIGFjY29yZGluZ2x5IGluIGZ1dHVyZS4NCj4gwqDCoCovDQo+IMKg c3RhdGljIHZvaWQNCj4gLXRnbF9kYzNjb19mbHVzaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsDQo+IC0JCXVuc2lnbmVkIGludCBmcm9udGJ1ZmZlcl9iaXRzLCBlbnVtIGZiX29w X29yaWdpbiBvcmlnaW4pDQo+ICt0Z2xfZGMzY29fZmx1c2goc3RydWN0IGludGVsX2RwICppbnRl bF9kcCwgdW5zaWduZWQgaW50IGZyb250YnVmZmVyX2JpdHMsDQo+ICsJCWVudW0gZmJfb3Bfb3Jp Z2luIG9yaWdpbikNCj4gwqB7DQo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsN Cj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiDCoA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g LQlpZiAoIWRldl9wcml2LT5wc3IuZGMzY29fZW5hYmxlZCkNCj4gKwlpZiAoIWludGVsX2RwLT5w c3IuZGMzY29fZW5hYmxlZCkNCj4gwqAJCWdvdG8gdW5sb2NrOw0KPiDCoA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g LQlpZiAoIWRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkIHx8ICFkZXZfcHJpdi0+cHNyLmFjdGl2 ZSkNCj4gKwlpZiAoIWludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkIHx8ICFpbnRlbF9kcC0+cHNy LmFjdGl2ZSkNCj4gwqAJCWdvdG8gdW5sb2NrOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJLyoNCj4g QEAgLTE3MzMsMTUgKzE3NjUsMTUgQEAgdGdsX2RjM2NvX2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwNCj4gwqAJICogd2hlbiBkZWxheWVkIHdvcmsgc2NoZWR1bGVzIHRo YXQgbWVhbnMgZGlzcGxheSBoYXMgYmVlbiBpZGxlLg0KPiDCoAkgKi8NCj4gwqAJaWYgKCEoZnJv bnRidWZmZXJfYml0cyAmDQo+IC0JICAgIElOVEVMX0ZST05UQlVGRkVSX0FMTF9NQVNLKGRldl9w cml2LT5wc3IucGlwZSkpKQ0KPiArCSAgICBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhpbnRl bF9kcC0+cHNyLnBpcGUpKSkNCj4gwqAJCWdvdG8gdW5sb2NrOw0KPiDCoA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g LQl0Z2xfcHNyMl9lbmFibGVfZGMzY28oZGV2X3ByaXYpOw0KPiAtCW1vZF9kZWxheWVkX3dvcmso c3lzdGVtX3dxLCAmZGV2X3ByaXYtPnBzci5kYzNjb193b3JrLA0KPiAtCQkJIGRldl9wcml2LT5w c3IuZGMzY29fZXhpdF9kZWxheSk7DQo+ICsJdGdsX3BzcjJfZW5hYmxlX2RjM2NvKGludGVsX2Rw KTsNCj4gKwltb2RfZGVsYXllZF93b3JrKHN5c3RlbV93cSwgJmludGVsX2RwLT5wc3IuZGMzY29f d29yaywNCj4gKwkJCSBpbnRlbF9kcC0+cHNyLmRjM2NvX2V4aXRfZGVsYXkpOw0KPiDCoA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gwqB1bmxvY2s6DQo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2sp Ow0KPiArCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4gwqB9DQo+IMKgDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiDCoC8qKg0KPiBAQCAtMTc2MCw0NSArMTc5Miw1NCBAQCB0Z2xfZGMzY29fZmx1 c2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiDCoHZvaWQgaW50ZWxfcHNy X2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gwqAJCSAgICAgdW5z aWduZWQgZnJvbnRidWZmZXJfYml0cywgZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKQ0KDQoNClRo aXMgYW5kIHRoZSBpbnZhbGlkYXRlIGFyZSBub3QgcHJvcGVybHkgaGFuZGxpbmcgbXVsdGlwbGUg UFNSIHBhbmVscywgdGhpcyB3aWxsIGNhdXNlIGFsbCBwYW5lbHMgdG8gYmUgZmx1c2ggaW52YWxp ZGF0ZWQgd2hlbiBqdXN0IG9uZSBzaW5nbGUgcGFuZWwNCm5lZWQgaXQuDQoNCj4gwqB7DQo+IC0J aWYgKCFDQU5fUFNSKGRldl9wcml2KSkNCj4gLQkJcmV0dXJuOw0KPiArCXN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyOw0KPiArCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHA7DQo+IMKgDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiAtCWlmIChvcmlnaW4gPT0gT1JJR0lOX0ZMSVApIHsNCj4gLQkJdGdsX2RjM2Nv X2ZsdXNoKGRldl9wcml2LCBmcm9udGJ1ZmZlcl9iaXRzLCBvcmlnaW4pOw0KPiAtCQlyZXR1cm47 DQo+IC0JfQ0KPiArCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7 DQo+ICsJCWludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOw0KPiDCoA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiAtCWlmICghZGV2X3By aXYtPnBzci5lbmFibGVkKSB7DQo+IC0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2Nr KTsNCj4gLQkJcmV0dXJuOw0KPiAtCX0NCj4gKwkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxf T1VUUFVUX0VEUCAmJiBDQU5fUFNSKGludGVsX2RwKSkgew0KPiArCQkJaWYgKG9yaWdpbiA9PSBP UklHSU5fRkxJUCkgew0KPiArCQkJCXRnbF9kYzNjb19mbHVzaChpbnRlbF9kcCwgZnJvbnRidWZm ZXJfYml0cywgb3JpZ2luKTsNCj4gKwkJCQljb250aW51ZTsNCj4gKwkJCX0NCj4gwqANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IC0JZnJvbnRidWZmZXJfYml0cyAmPSBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhk ZXZfcHJpdi0+cHNyLnBpcGUpOw0KPiAtCWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9i aXRzICY9IH5mcm9udGJ1ZmZlcl9iaXRzOw0KPiArCQkJbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBz ci5sb2NrKTsNCj4gKwkJCWlmICghaW50ZWxfZHAtPnBzci5lbmFibGVkKSB7DQo+ICsJCQkJbXV0 ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiArCQkJCWNvbnRpbnVlOw0KPiArCQkJ fQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gLQkvKiBCeSBkZWZpbml0aW9uIGZsdXNoID0gaW52YWxpZGF0 ZSArIGZsdXNoICovDQo+IC0JaWYgKGZyb250YnVmZmVyX2JpdHMpDQo+IC0JCXBzcl9mb3JjZV9o d190cmFja2luZ19leGl0KGRldl9wcml2KTsNCj4gKwkJCWZyb250YnVmZmVyX2JpdHMgJj0gSU5U RUxfRlJPTlRCVUZGRVJfQUxMX01BU0soaW50ZWxfZHAtPnBzci5waXBlKTsNCj4gKwkJCWludGVs X2RwLT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzICY9IH5mcm9udGJ1ZmZlcl9iaXRzOw0KPiDC oA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gLQlpZiAoIWRldl9wcml2LT5wc3IuYWN0aXZlICYmICFkZXZfcHJpdi0+ cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cykNCj4gLQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYt PnBzci53b3JrKTsNCj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7DQo+ICsJ CQkvKiBCeSBkZWZpbml0aW9uIGZsdXNoID0gaW52YWxpZGF0ZSArIGZsdXNoICovDQo+ICsJCQlp ZiAoZnJvbnRidWZmZXJfYml0cykNCj4gKwkJCQlwc3JfZm9yY2VfaHdfdHJhY2tpbmdfZXhpdChp bnRlbF9kcCk7DQo+ICsNCj4gKwkJCWlmICghaW50ZWxfZHAtPnBzci5hY3RpdmUgJiYgIWludGVs X2RwLT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQ0KPiArCQkJCXNjaGVkdWxlX3dvcmsoJmlu dGVsX2RwLT5wc3Iud29yayk7DQo+ICsJCQltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9j ayk7DQo+ICsJCX0NCj4gKwl9DQo+IMKgfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAvKioNCj4gwqDC oCogaW50ZWxfcHNyX2luaXQgLSBJbml0IGJhc2ljIFBTUiB3b3JrIGFuZCBtdXRleC4NCj4gLSAq IEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgcHJpdmF0ZQ0KPiArICogQGludGVsX2RwOiBJbnRlbCBE UA0KPiDCoMKgKg0KPiAtICogVGhpcyBmdW5jdGlvbiBpcyAgY2FsbGVkIG9ubHkgb25jZSBhdCBk cml2ZXIgbG9hZCB0byBpbml0aWFsaXplIGJhc2ljDQo+IC0gKiBQU1Igc3R1ZmYuDQo+ICsgKiBU aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgaW5pdGlhbGl6aW5nIGNvbm5lY3Rvci4N Cj4gKyAqICh0aGUgaW5pdGlhbGl6aW5nIG9mIGNvbm5lY3RvciB0cmVhdHMgdGhlIGhhbmRsaW5n IG9mIGNvbm5lY3RvciBjYXBhYmlsaXRpZXMpDQo+ICsgKiBBbmQgaXQgaW5pdGlhbGl6ZXMgYmFz aWMgUFNSIHN0dWZmIGZvciBlYWNoIERQIEVuY29kZXIuDQo+IMKgwqAqLw0KPiAtdm9pZCBpbnRl bF9wc3JfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt2b2lkIGlu dGVsX3Bzcl9pbml0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+IMKgew0KPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiAr DQo+IMKgCWlmICghSEFTX1BTUihkZXZfcHJpdikpDQo+IMKgCQlyZXR1cm47DQo+IMKgDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiAtCWlmICghZGV2X3ByaXYtPnBzci5zaW5rX3N1cHBvcnQpDQo+ICsJaWYgKCFpbnRl bF9kcC0+cHNyLnNpbmtfc3VwcG9ydCkNCj4gwqAJCXJldHVybjsNCj4gwqANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IMKgCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSkNCj4gQEAgLTE4MTYsMTQgKzE4NTcsMTQgQEAg dm9pZCBpbnRlbF9wc3JfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ IMKgCS8qIFNldCBsaW5rX3N0YW5kYnkgeCBsaW5rX29mZiBkZWZhdWx0cyAqLw0KPiDCoAlpZiAo SVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkNCj4gwqAJCS8q IEhTVyBhbmQgQkRXIHJlcXVpcmUgd29ya2Fyb3VuZHMgdGhhdCB3ZSBkb24ndCBpbXBsZW1lbnQu ICovDQo+IC0JCWRldl9wcml2LT5wc3IubGlua19zdGFuZGJ5ID0gZmFsc2U7DQo+ICsJCWludGVs X2RwLT5wc3IubGlua19zdGFuZGJ5ID0gZmFsc2U7DQo+IMKgCWVsc2UgaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPCAxMikNCj4gwqAJCS8qIEZvciBuZXcgcGxhdGZvcm1zIHVwIHRvIFRHTCBsZXQn cyByZXNwZWN0IFZCVCBiYWNrIGFnYWluICovDQo+IC0JCWRldl9wcml2LT5wc3IubGlua19zdGFu ZGJ5ID0gZGV2X3ByaXYtPnZidC5wc3IuZnVsbF9saW5rOw0KPiArCQlpbnRlbF9kcC0+cHNyLmxp bmtfc3RhbmRieSA9IGRldl9wcml2LT52YnQucHNyLmZ1bGxfbGluazsNCj4gwqANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IC0JSU5JVF9XT1JLKCZkZXZfcHJpdi0+cHNyLndvcmssIGludGVsX3Bzcl93b3JrKTsNCj4g LQlJTklUX0RFTEFZRURfV09SSygmZGV2X3ByaXYtPnBzci5kYzNjb193b3JrLCB0Z2xfZGMzY29f ZGlzYWJsZV93b3JrKTsNCj4gLQltdXRleF9pbml0KCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiAr CUlOSVRfV09SSygmaW50ZWxfZHAtPnBzci53b3JrLCBpbnRlbF9wc3Jfd29yayk7DQo+ICsJSU5J VF9ERUxBWUVEX1dPUksoJmludGVsX2RwLT5wc3IuZGMzY29fd29yaywgdGdsX2RjM2NvX2Rpc2Fi bGVfd29yayk7DQo+ICsJbXV0ZXhfaW5pdCgmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4gwqB9DQo+ IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiDCoHN0YXRpYyBpbnQgcHNyX2dldF9zdGF0dXNfYW5kX2Vycm9yX3N0 YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiBAQCAtMTg0OSw3ICsxODkwLDcgQEAg c3RhdGljIHZvaWQgcHNyX2FscG1fY2hlY2soc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4g wqB7DQo+IMKgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUo aW50ZWxfZHApOw0KPiDCoAlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gJmludGVsX2RwLT5hdXg7 DQo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsNCj4gKwlzdHJ1Y3Qg aW50ZWxfcHNyICpwc3IgPSAmaW50ZWxfZHAtPnBzcjsNCj4gwqAJdTggdmFsOw0KPiDCoAlpbnQg cjsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IEBAIC0xODc2LDcgKzE5MTcsNyBAQCBzdGF0aWMgdm9pZCBw c3JfYWxwbV9jaGVjayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiDCoHN0YXRpYyB2b2lk IHBzcl9jYXBhYmlsaXR5X2NoYW5nZWRfY2hlY2soc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkN Cj4gwqB7DQo+IMKgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOw0KPiAtCXN0cnVjdCBpOTE1X3BzciAqcHNyID0gJmRldl9wcml2LT5wc3I7 DQo+ICsJc3RydWN0IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5wc3I7DQo+IMKgCXU4IHZh bDsNCj4gwqAJaW50IHI7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiBAQCAtMTkwMCwxOCArMTk0MSwxOCBA QCBzdGF0aWMgdm9pZCBwc3JfY2FwYWJpbGl0eV9jaGFuZ2VkX2NoZWNrKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApDQo+IMKgdm9pZCBpbnRlbF9wc3Jfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkNCj4gwqB7DQo+IMKgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiAtCXN0cnVjdCBpOTE1X3BzciAqcHNyID0g JmRldl9wcml2LT5wc3I7DQo+ICsJc3RydWN0IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5w c3I7DQo+IMKgCXU4IHN0YXR1cywgZXJyb3Jfc3RhdHVzOw0KPiDCoAljb25zdCB1OCBlcnJvcnMg PSBEUF9QU1JfUkZCX1NUT1JBR0VfRVJST1IgfA0KPiDCoAkJCSAgRFBfUFNSX1ZTQ19TRFBfVU5D T1JSRUNUQUJMRV9FUlJPUiB8DQo+IMKgCQkJICBEUF9QU1JfTElOS19DUkNfRVJST1I7DQo+IMKg DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiAtCWlmICghQ0FOX1BTUihkZXZfcHJpdikgfHwgIWludGVsX2RwX2lzX2Vk cChpbnRlbF9kcCkpDQo+ICsJaWYgKCFDQU5fUFNSKGludGVsX2RwKSB8fCAhaW50ZWxfZHBfaXNf ZWRwKGludGVsX2RwKSkNCj4gwqAJCXJldHVybjsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgCW11dGV4 X2xvY2soJnBzci0+bG9jayk7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtCWlmICghcHNyLT5lbmFibGVk IHx8IHBzci0+ZHAgIT0gaW50ZWxfZHApDQo+ICsJaWYgKCFwc3ItPmVuYWJsZWQpDQo+IMKgCQln b3RvIGV4aXQ7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAlpZiAocHNyX2dldF9zdGF0dXNfYW5kX2Vy cm9yX3N0YXR1cyhpbnRlbF9kcCwgJnN0YXR1cywgJmVycm9yX3N0YXR1cykpIHsNCj4gQEAgLTE5 NTQsMTUgKzE5OTUsMTQgQEAgdm9pZCBpbnRlbF9wc3Jfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgYm9vbCBpbnRlbF9wc3JfZW5hYmxl ZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiDCoHsNCj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gwqAJYm9vbCByZXQ7 DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiAtCWlmICghQ0FOX1BTUihkZXZfcHJpdikgfHwgIWludGVsX2Rw X2lzX2VkcChpbnRlbF9kcCkpDQo+ICsJaWYgKCFDQU5fUFNSKGludGVsX2RwKSB8fCAhaW50ZWxf ZHBfaXNfZWRwKGludGVsX2RwKSkNCj4gwqAJCXJldHVybiBmYWxzZTsNCj4gwqANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4gLQlyZXQgPSAoZGV2X3By aXYtPnBzci5kcCA9PSBpbnRlbF9kcCAmJiBkZXZfcHJpdi0+cHNyLmVuYWJsZWQpOw0KPiAtCW11 dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4gKwltdXRleF9sb2NrKCZpbnRlbF9k cC0+cHNyLmxvY2spOw0KPiArCXJldCA9IGludGVsX2RwLT5wc3IuZW5hYmxlZDsNCj4gKwltdXRl eF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAlyZXR1 cm4gcmV0Ow0KPiDCoH0NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfcHNyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5o DQo+IGluZGV4IDBhNTE3OTc4ZThhZi4uMDNlYjE5NTQ3ZDA5IDEwMDY0NA0KPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5oDQo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmgNCj4gQEAgLTE4LDcgKzE4LDcgQEAgc3RydWN0 IGludGVsX2F0b21pY19zdGF0ZTsNCj4gwqBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGU7DQo+IMKg c3RydWN0IGludGVsX3BsYW5lOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLSNkZWZpbmUgQ0FOX1BTUihk ZXZfcHJpdikgKEhBU19QU1IoZGV2X3ByaXYpICYmIGRldl9wcml2LT5wc3Iuc2lua19zdXBwb3J0 KQ0KPiArI2RlZmluZSBDQU5fUFNSKGludGVsX2RwKSAoSEFTX1BTUihkcF90b19pOTE1KGludGVs X2RwKSkgJiYgaW50ZWxfZHAtPnBzci5zaW5rX3N1cHBvcnQpDQo+IMKgdm9pZCBpbnRlbF9wc3Jf aW5pdF9kcGNkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOw0KPiDCoHZvaWQgaW50ZWxfcHNy X2VuYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoAkJICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsDQo+IEBAIC0yOCwyNCArMjgsMjQgQEAg dm9pZCBpbnRlbF9wc3JfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoHZv aWQgaW50ZWxfcHNyX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiDCoAkJICAg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsDQo+IMKgCQkgICAg ICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7DQo+IC1pbnQg aW50ZWxfcHNyX2RlYnVnX3NldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU2 NCB2YWx1ZSk7DQo+ICtpbnQgaW50ZWxfcHNyX2RlYnVnX3NldChzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwLCB1NjQgdmFsdWUpOw0KPiDCoHZvaWQgaW50ZWxfcHNyX2ludmFsaWRhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiDCoAkJCSAgdW5zaWduZWQgZnJvbnRidWZm ZXJfYml0cywNCj4gwqAJCQkgIGVudW0gZmJfb3Bfb3JpZ2luIG9yaWdpbik7DQo+IMKgdm9pZCBp bnRlbF9wc3JfZmx1c2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiDCoAkJ ICAgICB1bnNpZ25lZCBmcm9udGJ1ZmZlcl9iaXRzLA0KPiDCoAkJICAgICBlbnVtIGZiX29wX29y aWdpbiBvcmlnaW4pOw0KPiAtdm9pZCBpbnRlbF9wc3JfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOw0KPiArdm9pZCBpbnRlbF9wc3JfaW5pdChzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKTsNCj4gwqB2b2lkIGludGVsX3Bzcl9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLA0KPiDCoAkJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKTsNCj4gLXZvaWQgaW50ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBzcl9paXIpOw0KPiArdm9pZCBpbnRlbF9wc3JfaXJx X2hhbmRsZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdTMyIHBzcl9paXIpOw0KPiDCoHZv aWQgaW50ZWxfcHNyX3Nob3J0X3B1bHNlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOw0KPiAt aW50IGludGVsX3Bzcl93YWl0X2Zvcl9pZGxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpuZXdfY3J0Y19zdGF0ZSwNCj4gLQkJCSAgICB1MzIgKm91dF92YWx1ZSk7DQo+ICt2b2lkIGlu dGVsX3Bzcl93YWl0X2Zvcl9pZGxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdf Y3J0Y19zdGF0ZSk7DQo+IMKgYm9vbCBpbnRlbF9wc3JfZW5hYmxlZChzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKTsNCj4gwqBpbnQgaW50ZWxfcHNyMl9zZWxfZmV0Y2hfdXBkYXRlKHN0cnVjdCBp bnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLA0KPiDCoAkJCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 Yyk7DQo+IC12b2lkIGludGVsX3BzcjJfcHJvZ3JhbV90cmFuc19tYW5fdHJrX2N0bChjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7DQo+ICt2b2lkIGludGVsX3BzcjJf cHJvZ3JhbV90cmFuc19tYW5fdHJrX2N0bChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLA0KPiAr CQkJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsNCj4gwqB2 b2lkIGludGVsX3BzcjJfcHJvZ3JhbV9wbGFuZV9zZWxfZmV0Y2goc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSwNCj4gwqAJCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlLA0KPiDCoAkJCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSwNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3By aXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jDQo+IGlu ZGV4IGNmMzU4OWZkMGRkYi4uNTlmNGM3NzRmOThlIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMNCj4gQEAgLTg1LDcgKzg1LDYgQEAgdm9pZCBp bnRlbF9waXBlX3VwZGF0ZV9zdGFydChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3 X2NydGNfc3RhdGUpDQo+IMKgCWJvb2wgbmVlZF92bHZfZHNpX3dhID0gKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSAmJg0KPiDCoAkJaW50ZWxfY3J0 Y19oYXNfdHlwZShuZXdfY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0RTSSk7DQo+IMKgCURFRklO RV9XQUlUKHdhaXQpOw0KPiAtCXUzMiBwc3Jfc3RhdHVzOw0KPiDCoA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJ aWYgKG5ld19jcnRjX3N0YXRlLT51YXBpLmFzeW5jX2ZsaXApDQo+IMKgCQlyZXR1cm47DQo+IEBA IC0xMTAsMTAgKzEwOSw3IEBAIHZvaWQgaW50ZWxfcGlwZV91cGRhdGVfc3RhcnQoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKQ0KPiDCoAkgKiBWQkwgaW50ZXJy dXB0cyB3aWxsIHN0YXJ0IHRoZSBQU1IgZXhpdCBhbmQgcHJldmVudCBhIFBTUg0KPiDCoAkgKiBy ZS1lbnRyeSBhcyB3ZWxsLg0KPiDCoAkgKi8NCj4gLQlpZiAoaW50ZWxfcHNyX3dhaXRfZm9yX2lk bGUobmV3X2NydGNfc3RhdGUsICZwc3Jfc3RhdHVzKSkNCj4gLQkJZHJtX2VycigmZGV2X3ByaXYt PmRybSwNCj4gLQkJCSJQU1IgaWRsZSB0aW1lZCBvdXQgMHgleCwgYXRvbWljIHVwZGF0ZSBtYXkg ZmFpbFxuIiwNCj4gLQkJCXBzcl9zdGF0dXMpOw0KPiArCWludGVsX3Bzcl93YWl0X2Zvcl9pZGxl KG5ld19jcnRjX3N0YXRlKTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKgCWxvY2FsX2lycV9kaXNhYmxl KCk7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgNCj4gaW5kZXggNWU1 YmNlZjIwZTMzLi4yMTE1ODBlZjMwMjcgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0K PiBAQCAtNDc1LDQyICs0NzUsNiBAQCBzdHJ1Y3QgaTkxNV9kcnJzIHsNCj4gwqAJZW51bSBkcnJz X3N1cHBvcnRfdHlwZSB0eXBlOw0KPiDCoH07DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAtc3RydWN0IGk5 MTVfcHNyIHsNCj4gLQlzdHJ1Y3QgbXV0ZXggbG9jazsNCj4gLQ0KPiAtI2RlZmluZSBJOTE1X1BT Ul9ERUJVR19NT0RFX01BU0sJMHgwZg0KPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJVR19ERUZBVUxU CQkweDAwDQo+IC0jZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0RJU0FCTEUJCTB4MDENCj4gLSNkZWZp bmUgSTkxNV9QU1JfREVCVUdfRU5BQkxFCQkweDAyDQo+IC0jZGVmaW5lIEk5MTVfUFNSX0RFQlVH X0ZPUkNFX1BTUjEJMHgwMw0KPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJVR19JUlEJCTB4MTANCj4g LQ0KPiAtCXUzMiBkZWJ1ZzsNCj4gLQlib29sIHNpbmtfc3VwcG9ydDsNCj4gLQlib29sIGVuYWJs ZWQ7DQo+IC0Jc3RydWN0IGludGVsX2RwICpkcDsNCj4gLQllbnVtIHBpcGUgcGlwZTsNCj4gLQll bnVtIHRyYW5zY29kZXIgdHJhbnNjb2RlcjsNCj4gLQlib29sIGFjdGl2ZTsNCj4gLQlzdHJ1Y3Qg d29ya19zdHJ1Y3Qgd29yazsNCj4gLQl1bnNpZ25lZCBidXN5X2Zyb250YnVmZmVyX2JpdHM7DQo+ IC0JYm9vbCBzaW5rX3BzcjJfc3VwcG9ydDsNCj4gLQlib29sIGxpbmtfc3RhbmRieTsNCj4gLQli b29sIGNvbG9yaW1ldHJ5X3N1cHBvcnQ7DQo+IC0JYm9vbCBwc3IyX2VuYWJsZWQ7DQo+IC0JYm9v bCBwc3IyX3NlbF9mZXRjaF9lbmFibGVkOw0KPiAtCXU4IHNpbmtfc3luY19sYXRlbmN5Ow0KPiAt CWt0aW1lX3QgbGFzdF9lbnRyeV9hdHRlbXB0Ow0KPiAtCWt0aW1lX3QgbGFzdF9leGl0Ow0KPiAt CWJvb2wgc2lua19ub3RfcmVsaWFibGU7DQo+IC0JYm9vbCBpcnFfYXV4X2Vycm9yOw0KPiAtCXUx NiBzdV94X2dyYW51bGFyaXR5Ow0KPiAtCWJvb2wgZGMzY29fZW5hYmxlZDsNCj4gLQl1MzIgZGMz Y29fZXhpdF9kZWxheTsNCj4gLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRjM2NvX3dvcms7DQo+IC0J c3RydWN0IGRybV9kcF92c2Nfc2RwIHZzYzsNCj4gLX07DQo+IC0NCj4gwqAjZGVmaW5lIFFVSVJL X0xWRFNfU1NDX0RJU0FCTEUgKDE8PDEpDQo+IMKgI2RlZmluZSBRVUlSS19JTlZFUlRfQlJJR0hU TkVTUyAoMTw8MikNCj4gwqAjZGVmaW5lIFFVSVJLX0JBQ0tMSUdIVF9QUkVTRU5UICgxPDwzKQ0K PiBAQCAtMTAzOCw4ICsxMDAyLDYgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgew0KPiDCoA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gwqAJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyBwb3dlcl9kb21haW5zOw0K PiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gLQlzdHJ1Y3QgaTkxNV9wc3IgcHNyOw0KPiAtDQo+IMKgCXN0cnVj dCBpOTE1X2dwdV9lcnJvciBncHVfZXJyb3I7DQo+IMKgDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiDCoAlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqdmx2X3BjdHg7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYw0K PiBpbmRleCBkZDE5NzEwNDBiYmMuLmEwMWZjYjA0NzRhNiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2lycS5jDQo+IEBAIC0yMDY2LDEwICsyMDY2LDIyIEBAIHN0YXRpYyB2b2lkIGl2Yl9kaXNw bGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gwqAJ CWl2Yl9lcnJfaW50X2hhbmRsZXIoZGV2X3ByaXYpOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJaWYg KGRlX2lpciAmIERFX0VEUF9QU1JfSU5UX0hTVykgew0KPiAtCQl1MzIgcHNyX2lpciA9IGludGVs X3VuY29yZV9yZWFkKCZkZXZfcHJpdi0+dW5jb3JlLCBFRFBfUFNSX0lJUik7DQo+ICsJCXN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOw0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gLQkJaW50ZWxfcHNy X2lycV9oYW5kbGVyKGRldl9wcml2LCBwc3JfaWlyKTsNCj4gLQkJaW50ZWxfdW5jb3JlX3dyaXRl KCZkZXZfcHJpdi0+dW5jb3JlLCBFRFBfUFNSX0lJUiwgcHNyX2lpcik7DQo+ICsJCWZvcl9lYWNo X2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7DQo+ICsJCQlzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOw0KPiArDQo+ICsJCQlpZiAo ZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQICYmDQo+ICsJCQkgICAgQ0FOX1BTUihp bnRlbF9kcCkpIHsNCj4gKwkJCQl1MzIgcHNyX2lpciA9IGludGVsX3VuY29yZV9yZWFkKCZkZXZf cHJpdi0+dW5jb3JlLA0KPiArCQkJCQkJCQlFRFBfUFNSX0lJUik7DQo+ICsNCj4gKwkJCQlpbnRl bF9wc3JfaXJxX2hhbmRsZXIoaW50ZWxfZHAsIHBzcl9paXIpOw0KPiArCQkJCWludGVsX3VuY29y ZV93cml0ZSgmZGV2X3ByaXYtPnVuY29yZSwNCj4gKwkJCQkJCSAgIEVEUF9QU1JfSUlSLCBwc3Jf aWlyKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKwkJfQ0KPiDCoAl9DQo+IMKgDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+ IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiDCoAlpZiAoZGVfaWlyICYgREVfQVVYX0NIQU5ORUxfQV9JVkIpDQo+IEBAIC0yMjc5 LDIxICsyMjkxLDM0IEBAIGdlbjhfZGVfbWlzY19pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBpaXIpDQo+IMKgCX0NCj4gwqANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IMKg CWlmIChpaXIgJiBHRU44X0RFX0VEUF9QU1IpIHsNCj4gKwkJc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXI7DQo+IMKgCQl1MzIgcHNyX2lpcjsNCj4gwqAJCWk5MTVfcmVnX3QgaWlyX3JlZzsN Cj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IC0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKQ0KPiAt CQkJaWlyX3JlZyA9IFRSQU5TX1BTUl9JSVIoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKTsNCj4g LQkJZWxzZQ0KPiAtCQkJaWlyX3JlZyA9IEVEUF9QU1JfSUlSOw0KPiArCQlmb3JfZWFjaF9pbnRl bF9kcCgmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikgew0KPiArCQkJc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsNCj4gwqANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0J CXBzcl9paXIgPSBpbnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtPnVuY29yZSwgaWlyX3JlZyk7 DQo+IC0JCWludGVsX3VuY29yZV93cml0ZSgmZGV2X3ByaXYtPnVuY29yZSwgaWlyX3JlZywgcHNy X2lpcik7DQo+ICsJCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMiAmJiBDQU5fUFNSKGlu dGVsX2RwKSkgew0KPiArCQkJCWlpcl9yZWcgPSBUUkFOU19QU1JfSUlSKGludGVsX2RwLT5wc3Iu dHJhbnNjb2Rlcik7DQo+ICsJCQl9IGVsc2UgaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VU UFVUX0VEUCAmJg0KPiArCQkJCSAgIENBTl9QU1IoaW50ZWxfZHApKSB7DQo+ICsJCQkJaWlyX3Jl ZyA9IEVEUF9QU1JfSUlSOw0KPiArCQkJfSBlbHNlIHsNCj4gKwkJCQljb250aW51ZTsNCj4gKwkJ CX0NCj4gKw0KPiArCQkJcHNyX2lpciA9IGludGVsX3VuY29yZV9yZWFkKCZkZXZfcHJpdi0+dW5j b3JlLCBpaXJfcmVnKTsNCj4gKwkJCWludGVsX3VuY29yZV93cml0ZSgmZGV2X3ByaXYtPnVuY29y ZSwgaWlyX3JlZywgcHNyX2lpcik7DQo+ICsNCj4gKwkJCWlmIChwc3JfaWlyKQ0KPiArCQkJCWZv dW5kID0gdHJ1ZTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4g DQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IC0JCWlmIChwc3JfaWlyKQ0KPiAtCQkJZm91 bmQgPSB0cnVlOw0KPiArCQkJaW50ZWxfcHNyX2lycV9oYW5kbGVyKGludGVsX2RwLCBwc3JfaWly KTsNCj4gwqANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IC0JCWludGVsX3Bzcl9pcnFfaGFuZGxlcihkZXZfcHJpdiwg cHNyX2lpcik7DQo+ICsJCQkvKiBwcmlvciBHRU4xMiBvbmx5IGhhdmUgb25lIEVEUCBQU1IgKi8N Cj4gKwkJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTIpDQo+ICsJCQkJYnJlYWs7DQo+ICsJ CX0NCj4gwqAJfQ0KPiDCoA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiAN Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0K PiANCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gwqAJaWYgKCFmb3VuZCkNCg0KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==