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=-9.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, 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 5BEE5C43464 for ; Thu, 17 Sep 2020 21:52:30 +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 0E6D62075B for ; Thu, 17 Sep 2020 21:52:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0E6D62075B 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 520306E3EB; Thu, 17 Sep 2020 21:52:29 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3F6186E3EB for ; Thu, 17 Sep 2020 21:52:28 +0000 (UTC) IronPort-SDR: Hdk84bJaKqjEpQvQSNR/VLmz9KzsC3NIgIKDEMPZrSFgfvnAbj4XWrM91lVRflapWGN6FF/lgC sKwdr/wQBCog== X-IronPort-AV: E=McAfee;i="6000,8403,9747"; a="157185866" X-IronPort-AV: E=Sophos;i="5.77,272,1596524400"; d="scan'208";a="157185866" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Sep 2020 14:52:24 -0700 IronPort-SDR: +hlzC05GWXhgqn6AU6Xog8jVa2gDjlMLMPqSuD9x+wNQUuVUa9HWTjo+XRPnauX2zTFoidk4JS 4POzjDVQFBMw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,272,1596524400"; d="scan'208";a="320376556" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga002.jf.intel.com with ESMTP; 17 Sep 2020 14:52:24 -0700 Received: from bgsmsx604.gar.corp.intel.com (10.67.234.6) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 17 Sep 2020 14:52:23 -0700 Received: from bgsmsx604.gar.corp.intel.com (10.67.234.6) by BGSMSX604.gar.corp.intel.com (10.67.234.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 18 Sep 2020 03:22:21 +0530 Received: from bgsmsx604.gar.corp.intel.com ([10.67.234.6]) by BGSMSX604.gar.corp.intel.com ([10.67.234.6]) with mapi id 15.01.1713.004; Fri, 18 Sep 2020 03:22:21 +0530 From: "Shankar, Uma" To: Ville Syrjala , "intel-gfx@lists.freedesktop.org" Thread-Topic: [Intel-gfx] [PATCH 19/20] drm/i915: Complete the gamma/degamma state checking Thread-Index: AQHWXH9O7KwZJsUjBESOgtnepPc5b6ltvwEg Date: Thu, 17 Sep 2020 21:52:20 +0000 Message-ID: <4a7835e0b4a546bf9bff8ff245284aad@intel.com> References: <20200717211345.26851-1-ville.syrjala@linux.intel.com> <20200717211345.26851-20-ville.syrjala@linux.intel.com> In-Reply-To: <20200717211345.26851-20-ville.syrjala@linux.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 x-originating-ip: [10.223.10.1] MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 19/20] drm/i915: Complete the gamma/degamma state checking 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSW50ZWwtZ2Z4IDxpbnRl bC1nZngtYm91bmNlc0BsaXN0cy5mcmVlZGVza3RvcC5vcmc+IE9uIEJlaGFsZiBPZiBWaWxsZQ0K PiBTeXJqYWxhDQo+IFNlbnQ6IFNhdHVyZGF5LCBKdWx5IDE4LCAyMDIwIDI6NDQgQU0NCj4gVG86 IGludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gU3ViamVjdDogW0ludGVsLWdmeF0g W1BBVENIIDE5LzIwXSBkcm0vaTkxNTogQ29tcGxldGUgdGhlIGdhbW1hL2RlZ2FtbWENCj4gc3Rh dGUgY2hlY2tpbmcNCj4gDQo+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20+DQo+IA0KPiBBZGQgbmV3IC5nYW1tYV9lcXVhbCgpIGFuZCAuZGVnYW1t YV9lcXVhbCgpIHZmdW5jcyB0byBiZSB1c2VkIGJ5IHRoZSBzdGF0ZQ0KPiBjaGVja2VyIHRvIHZl cmlmeSB0aGUgZ2FtbWEvZGVnYW1tYSBMVVRzLiBXZSBuZWVkIHNvbWV3aGF0IGN1c3RvbQ0KPiBi ZWhhdmlvdXIgZm9yIHNvbWUgcGxhdGZvcm1zIGR1ZSB0byBzb21ldGltZXMgc3dhcHBpbmcgdGhl IHJvbGVzIG9mIHRoZQ0KPiBnYW1tYSBhbmQgZGVnYW1tYSBMVVRzIChkdWUgdG8gUkdCIGxpbWl0 ZWQgY29sb3IgcmFuZ2Ugb3IgWUNiQ3Igb3V0cHV0IENTQw0KPiB1c2FnZSkuIEFsc28gZ2xrIGhh cyBhIHNwZWNpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIENTQyBlbmFibGUgYml0IGFuZCB0 aGUNCj4gZGVnYW1tYSBMVVQgc28gaXQgYWxzbyBuZWVkcyBjdXN0b21pemVkIGJlaGF2aW91ci4N Cj4gDQo+IFdlIGNvdWxkIHBvbnRpYWxseSBjb21wdXRlIHRoZSBzdGF0ZSBpbiBhIGJldHRlciB3 YXkgdG8gbWFrZSB0aGVzZSBzdGF0ZSBjaGVjaw0KPiBoYWNrcyB1bm5lY2Vzc2FyeSwgYnV0IHRo YXQncyBnb2luZyB0byByZXF1aXJlIHNvbWUgYWN0dWFsIHRob3VnaHQgc28gd2UnbGwgbGVhdmUN Cj4gaXQgZm9yIHRoZSBmdXR1cmUuDQoNCkxpa2UgdGhlIGlkZWEgb2YgaG93IHRoZSBhbm9tYWxp ZXMgb2YgdmFyaW91cyBwbGF0Zm9ybXMgYXJlIGJhbGFuY2VkLg0KUmV2aWV3ZWQtYnk6IFVtYSBT aGFua2FyIDx1bWEuc2hhbmthckBpbnRlbC5jb20+DQoNCj4gU2lnbmVkLW9mZi1ieTogVmlsbGUg U3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4NCj4gLS0tDQo+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NvbG9yLmMgICB8IDQzNSArKysrKysrKysr KysrKystLS0tDQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NvbG9yLmgg ICB8ICAxMCArLQ0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmMgfCAgMjUgKy0NCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAg ICAgIHwgICA3ICsNCj4gIDQgZmlsZXMgY2hhbmdlZCwgMzc4IGluc2VydGlvbnMoKyksIDk5IGRl bGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfY29sb3IuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf Y29sb3IuYw0KPiBpbmRleCBmNzE0Yzg3ZDhlNDIuLmNhNmM2Njc5MzY4YyAxMDA2NDQNCj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb2xvci5jDQo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29sb3IuYw0KPiBAQCAtMTYyOCwyNiAr MTYyOCw3MSBAQCBzdGF0aWMgaW50IGk5eHhfZ2FtbWFfcHJlY2lzaW9uKGNvbnN0IHN0cnVjdA0K PiBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQ0KPiAgCX0NCj4gIH0NCj4gDQo+ICtzdGF0 aWMgYm9vbCBpbGtfY3J0Y19oYXNfZGVnYW1tYShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZQ0KPiArKmNydGNfc3RhdGUpIHsNCj4gKwlyZXR1cm4gY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxl ICYmDQo+ICsJCShjcnRjX3N0YXRlLT5jc2NfbW9kZSAmIENTQ19QT1NJVElPTl9CRUZPUkVfR0FN TUEpID09IDA7IH0NCj4gKw0KPiAgc3RhdGljIGJvb2wgaWxrX2NydGNfaGFzX2dhbW1hKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKSAgew0KPiAgCXJldHVybiBjcnRj X3N0YXRlLT5nYW1tYV9lbmFibGUgJiYNCj4gIAkJKGNydGNfc3RhdGUtPmNzY19tb2RlICYgQ1ND X1BPU0lUSU9OX0JFRk9SRV9HQU1NQSkgIT0gMDsgIH0NCj4gDQo+ICtzdGF0aWMgaW50IGlsa19s dXRfcHJlY2lzaW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQ0K PiArew0KPiArCXN3aXRjaCAoY3J0Y19zdGF0ZS0+Z2FtbWFfbW9kZSkgew0KPiArCWNhc2UgR0FN TUFfTU9ERV9NT0RFXzhCSVQ6DQo+ICsJCXJldHVybiA4Ow0KPiArCWNhc2UgR0FNTUFfTU9ERV9N T0RFXzEwQklUOg0KPiArCQlyZXR1cm4gMTA7DQo+ICsJZGVmYXVsdDoNCj4gKwkJTUlTU0lOR19D QVNFKGNydGNfc3RhdGUtPmdhbW1hX21vZGUpOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgaWxrX2RlZ2FtbWFfcHJlY2lzaW9uKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlDQo+ICsqY3J0Y19zdGF0ZSkgew0KPiArCWlmIChpbGtfY3J0Y19oYXNf ZGVnYW1tYShjcnRjX3N0YXRlKSkNCj4gKwkJcmV0dXJuIGlsa19sdXRfcHJlY2lzaW9uKGNydGNf c3RhdGUpOw0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBp bnQgaWxrX2dhbW1hX3ByZWNpc2lvbihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkgIHsNCj4gLQlpZiAoIWlsa19jcnRjX2hhc19nYW1tYShjcnRjX3N0YXRlKSkNCj4g KwlpZiAoaWxrX2NydGNfaGFzX2dhbW1hKGNydGNfc3RhdGUpKQ0KPiArCQlyZXR1cm4gaWxrX2x1 dF9wcmVjaXNpb24oY3J0Y19zdGF0ZSk7DQo+ICsJZWxzZQ0KPiAgCQlyZXR1cm4gMDsNCj4gK30N Cj4gDQo+IC0Jc3dpdGNoIChjcnRjX3N0YXRlLT5nYW1tYV9tb2RlKSB7DQo+IC0JY2FzZSBHQU1N QV9NT0RFX01PREVfOEJJVDoNCj4gLQkJcmV0dXJuIDg7DQo+IC0JY2FzZSBHQU1NQV9NT0RFX01P REVfMTBCSVQ6DQo+ICtzdGF0aWMgaW50IGl2Yl9kZWdhbW1hX3ByZWNpc2lvbihjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZQ0KPiArKmNydGNfc3RhdGUpIHsNCj4gKwlpZiAoY3J0Y19zdGF0 ZS0+Z2FtbWFfZW5hYmxlICYmDQo+ICsJICAgIGNydGNfc3RhdGUtPmdhbW1hX21vZGUgPT0gR0FN TUFfTU9ERV9NT0RFX1NQTElUKQ0KPiAgCQlyZXR1cm4gMTA7DQo+IC0JZGVmYXVsdDoNCj4gLQkJ TUlTU0lOR19DQVNFKGNydGNfc3RhdGUtPmdhbW1hX21vZGUpOw0KPiArCWVsc2UNCj4gKwkJcmV0 dXJuIGlsa19kZWdhbW1hX3ByZWNpc2lvbihjcnRjX3N0YXRlKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBpdmJfZ2FtbWFfcHJlY2lzaW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl DQo+ICsqY3J0Y19zdGF0ZSkgew0KPiArCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUgJiYN Cj4gKwkgICAgY3J0Y19zdGF0ZS0+Z2FtbWFfbW9kZSA9PSBHQU1NQV9NT0RFX01PREVfU1BMSVQp DQo+ICsJCXJldHVybiAxMDsNCj4gKwllbHNlDQo+ICsJCXJldHVybiBpbGtfZ2FtbWFfcHJlY2lz aW9uKGNydGNfc3RhdGUpOyB9DQo+ICsNCj4gK3N0YXRpYyBpbnQgY2h2X2RlZ2FtbWFfcHJlY2lz aW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlDQo+ICsqY3J0Y19zdGF0ZSkgew0KPiAr CWlmIChjcnRjX3N0YXRlLT5jZ21fbW9kZSAmIENHTV9QSVBFX01PREVfREVHQU1NQSkNCj4gKwkJ cmV0dXJuIDE0Ow0KPiArCWVsc2UNCj4gIAkJcmV0dXJuIDA7DQo+IC0JfQ0KPiAgfQ0KPiANCj4g IHN0YXRpYyBpbnQgY2h2X2dhbW1hX3ByZWNpc2lvbihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSkgQEAgLQ0KPiAxNjU4LDIwICsxNzAzLDIwIEBAIHN0YXRpYyBpbnQg Y2h2X2dhbW1hX3ByZWNpc2lvbihjb25zdCBzdHJ1Y3QNCj4gaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkNCj4gIAkJcmV0dXJuIGk5eHhfZ2FtbWFfcHJlY2lzaW9uKGNydGNfc3RhdGUpOyAg fQ0KPiANCj4gK3N0YXRpYyBpbnQgZ2xrX2RlZ2FtbWFfcHJlY2lzaW9uKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlDQo+ICsqY3J0Y19zdGF0ZSkgew0KPiArCWlmIChjcnRjX3N0YXRlLT5j c2NfZW5hYmxlKQ0KPiArCQlyZXR1cm4gMTY7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiAgc3RhdGljIGludCBnbGtfZ2FtbWFfcHJlY2lzaW9uKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKSAgew0KPiAtCWlmICghY3J0Y19zdGF0ZS0+Z2Ft bWFfZW5hYmxlKQ0KPiArCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpDQo+ICsJCXJldHVy biBpbGtfbHV0X3ByZWNpc2lvbihjcnRjX3N0YXRlKTsNCj4gKwllbHNlDQo+ICAJCXJldHVybiAw Ow0KPiAtDQo+IC0Jc3dpdGNoIChjcnRjX3N0YXRlLT5nYW1tYV9tb2RlKSB7DQo+IC0JY2FzZSBH QU1NQV9NT0RFX01PREVfOEJJVDoNCj4gLQkJcmV0dXJuIDg7DQo+IC0JY2FzZSBHQU1NQV9NT0RF X01PREVfMTBCSVQ6DQo+IC0JCXJldHVybiAxMDsNCj4gLQlkZWZhdWx0Og0KPiAtCQlNSVNTSU5H X0NBU0UoY3J0Y19zdGF0ZS0+Z2FtbWFfbW9kZSk7DQo+IC0JCXJldHVybiAwOw0KPiAtCX0NCj4g IH0NCj4gDQo+ICBzdGF0aWMgYm9vbCBpY2xfY3J0Y19oYXNfZGVnYW1tYShjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkgQEAgLQ0KPiAxNjg0LDYgKzE3MjksMTQgQEAg c3RhdGljIGJvb2wgaWNsX2NydGNfaGFzX2dhbW1hKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlDQo+ICpjcnRjX3N0YXRlKQ0KPiAgCXJldHVybiBjcnRjX3N0YXRlLT5nYW1tYV9tb2RlICYg UE9TVF9DU0NfR0FNTUFfRU5BQkxFOyAgfQ0KPiANCj4gK3N0YXRpYyBpbnQgaWNsX2RlZ2FtbWFf cHJlY2lzaW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlDQo+ICsqY3J0Y19zdGF0ZSkg ew0KPiArCWlmIChpY2xfY3J0Y19oYXNfZGVnYW1tYShjcnRjX3N0YXRlKSkNCj4gKwkJcmV0dXJu IDE2Ow0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBpbnQg aWNsX2dhbW1hX3ByZWNpc2lvbihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkgIHsNCj4gIAlpZiAoIWljbF9jcnRjX2hhc19nYW1tYShjcnRjX3N0YXRlKSkNCj4gQEAg LTE3MDIsOTcgKzE3NTUsMzEwIEBAIHN0YXRpYyBpbnQgaWNsX2dhbW1hX3ByZWNpc2lvbihjb25z dCBzdHJ1Y3QNCj4gaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkNCj4gIAl9DQo+ICB9DQo+ IA0KPiAtaW50IGludGVsX2NvbG9yX2dldF9nYW1tYV9iaXRfcHJlY2lzaW9uKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlDQo+ICpjcnRjX3N0YXRlKSAtew0KPiAtCXN0cnVjdCBpbnRlbF9j cnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOw0KPiAtCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYp Ow0KPiAtDQo+IC0JaWYgKEhBU19HTUNIKGRldl9wcml2KSkgew0KPiAtCQlpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpDQo+IC0JCQlyZXR1cm4gY2h2X2dhbW1hX3ByZWNpc2lvbihjcnRjX3N0 YXRlKTsNCj4gLQkJZWxzZQ0KPiAtCQkJcmV0dXJuIGk5eHhfZ2FtbWFfcHJlY2lzaW9uKGNydGNf c3RhdGUpOw0KPiAtCX0gZWxzZSB7DQo+IC0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx KQ0KPiAtCQkJcmV0dXJuIGljbF9nYW1tYV9wcmVjaXNpb24oY3J0Y19zdGF0ZSk7DQo+IC0JCWVs c2UgaWYgKElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYp KQ0KPiAtCQkJcmV0dXJuIGdsa19nYW1tYV9wcmVjaXNpb24oY3J0Y19zdGF0ZSk7DQo+IC0JCWVs c2UgaWYgKElTX0lST05MQUtFKGRldl9wcml2KSkNCj4gLQkJCXJldHVybiBpbGtfZ2FtbWFfcHJl Y2lzaW9uKGNydGNfc3RhdGUpOw0KPiAtCX0NCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgYm9vbCBlcnJfY2hlY2soc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1dDEsDQo+ IC0JCSAgICAgIHN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQyLCB1MzIgZXJyKQ0KPiArc3RhdGlj IGJvb2wgbHV0X2VudHJ5X2VxdWFsKGNvbnN0IHN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQxLA0K PiArCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQyLCB1MzIgZXJyKQ0KPiAg ew0KPiAgCXJldHVybiAoKGFicygobG9uZylsdXQyLT5yZWQgLSBsdXQxLT5yZWQpKSA8PSBlcnIp ICYmDQo+ICAJCSgoYWJzKChsb25nKWx1dDItPmJsdWUgLSBsdXQxLT5ibHVlKSkgPD0gZXJyKSAm Jg0KPiAgCQkoKGFicygobG9uZylsdXQyLT5ncmVlbiAtIGx1dDEtPmdyZWVuKSkgPD0gZXJyKTsg IH0NCj4gDQo+IC1zdGF0aWMgYm9vbCBpbnRlbF9jb2xvcl9sdXRfZW50cmllc19lcXVhbChzdHJ1 Y3QgZHJtX2NvbG9yX2x1dCAqbHV0MSwNCj4gLQkJCQkJICBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAq bHV0MiwNCj4gLQkJCQkJICBpbnQgbHV0X3NpemUsIHUzMiBlcnIpDQo+ICtzdGF0aWMgaW50IGlu dGVsX2NvbG9yX2x1dF9zaXplKGNvbnN0IHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYikN Cj4gIHsNCj4gLQlpbnQgaTsNCj4gKwlyZXR1cm4gYmxvYiA/IGRybV9jb2xvcl9sdXRfc2l6ZShi bG9iKSA6IDA7IH0NCj4gKw0KPiArc3RhdGljIGJvb2wgaW50ZWxfY29sb3JfbHV0X3NpemVzX2Vx dWFsKGNvbnN0IHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYjEsDQo+ICsJCQkJCWNvbnN0 IHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYjIpIHsNCj4gKwlyZXR1cm4gaW50ZWxfY29s b3JfbHV0X3NpemUoYmxvYjEpID09IGludGVsX2NvbG9yX2x1dF9zaXplKGJsb2IyKTsgfQ0KPiAr DQo+ICtzdGF0aWMgYm9vbCBpbnRlbF9sdXRfZXF1YWwoY29uc3Qgc3RydWN0IGRybV9wcm9wZXJ0 eV9ibG9iICpibG9iMSwNCj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2Ig KmJsb2IyLA0KPiArCQkJICAgIGludCBiaXRfcHJlY2lzaW9uKQ0KPiArew0KPiArCWNvbnN0IHN0 cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQxLCAqbHV0MjsNCj4gKwlpbnQgaSwgbHV0X3NpemU7DQo+ ICsNCj4gKwlpZiAoIWludGVsX2NvbG9yX2x1dF9zaXplc19lcXVhbChibG9iMSwgYmxvYjIpKQ0K PiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlpZiAoIWJsb2IxKQ0KPiArCQlyZXR1cm4gdHJ1 ZTsNCj4gKw0KPiArCWlmICghYml0X3ByZWNpc2lvbikNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiAr DQo+ICsJbHV0X3NpemUgPSBkcm1fY29sb3JfbHV0X3NpemUoYmxvYjEpOw0KPiArCWx1dDEgPSBi bG9iMS0+ZGF0YTsNCj4gKwlsdXQyID0gYmxvYjItPmRhdGE7DQo+IA0KPiAgCWZvciAoaSA9IDA7 IGkgPCBsdXRfc2l6ZTsgaSsrKSB7DQo+IC0JCWlmICghZXJyX2NoZWNrKCZsdXQxW2ldLCAmbHV0 MltpXSwgZXJyKSkNCj4gKwkJaWYgKCFsdXRfZW50cnlfZXF1YWwoJmx1dDFbaV0sICZsdXQyW2ld LA0KPiArCQkJCSAgICAgMHhmZmZmID4+IGJpdF9wcmVjaXNpb24pKQ0KPiAgCQkJcmV0dXJuIGZh bHNlOw0KPiAgCX0NCj4gDQo+ICAJcmV0dXJuIHRydWU7DQo+ICB9DQo+IA0KPiAtYm9vbCBpbnRl bF9jb2xvcl9sdXRfZXF1YWwoc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iMSwNCj4gLQkJ CSAgIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYjIsDQo+IC0JCQkgICB1MzIgZ2FtbWFf bW9kZSwgdTMyIGJpdF9wcmVjaXNpb24pDQo+ICtzdGF0aWMgYm9vbCBpOXh4X2RlZ2FtbWFfZXF1 YWwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUxLA0KPiArCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlMiwNCj4gKwkJCSAg ICAgICBib29sIGZhc3RzZXQpDQo+ICB7DQo+IC0Jc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1dDEs ICpsdXQyOw0KPiAtCWludCBsdXRfc2l6ZTEsIGx1dF9zaXplMjsNCj4gLQl1MzIgZXJyOw0KPiAr CWNvbnN0IHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZGVnYW1tYV9sdXQxID0gY3J0Y19zdGF0 ZTEtDQo+ID5ody5kZWdhbW1hX2x1dDsNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Js b2IgKmRlZ2FtbWFfbHV0MiA9DQo+ICtjcnRjX3N0YXRlMi0+aHcuZGVnYW1tYV9sdXQ7DQo+IA0K PiAtCWlmICghYmxvYjEgIT0gIWJsb2IyKQ0KPiArCS8qIG5vIGRlZ2FtbWEgKi8NCj4gKwlyZXR1 cm4gIWRlZ2FtbWFfbHV0MSAmJiAhZGVnYW1tYV9sdXQyOyB9DQo+ICsNCj4gK3N0YXRpYyBib29s IGk5eHhfZ2FtbWFfZXF1YWwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUxLA0KPiArCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZTIsDQo+ICsJCQkgICAgIGJvb2wgZmFzdHNldCkNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3QgZHJt X3Byb3BlcnR5X2Jsb2IgKmdhbW1hX2x1dDEgPSBjcnRjX3N0YXRlMS0NCj4gPmh3LmdhbW1hX2x1 dDsNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmdhbW1hX2x1dDIgPQ0KPiAr Y3J0Y19zdGF0ZTItPmh3LmdhbW1hX2x1dDsNCj4gKw0KPiArCXJldHVybiBpbnRlbF9sdXRfZXF1 YWwoZ2FtbWFfbHV0MSwgZ2FtbWFfbHV0MiwNCj4gKwkJCSAgICAgICBpOXh4X2dhbW1hX3ByZWNp c2lvbihjcnRjX3N0YXRlMSkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBjaHZfZGVnYW1t YV9lcXVhbChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTEsDQo+ICsJ CQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTIsDQo+ICsJ CQkgICAgICBib29sIGZhc3RzZXQpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGRybV9wcm9wZXJ0 eV9ibG9iICpkZWdhbW1hX2x1dDEgPSBjcnRjX3N0YXRlMS0NCj4gPmh3LmRlZ2FtbWFfbHV0Ow0K PiArCWNvbnN0IHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZGVnYW1tYV9sdXQyID0NCj4gK2Ny dGNfc3RhdGUyLT5ody5kZWdhbW1hX2x1dDsNCj4gKw0KPiArCXJldHVybiBpbnRlbF9sdXRfZXF1 YWwoZGVnYW1tYV9sdXQxLCBkZWdhbW1hX2x1dDIsDQo+ICsJCQkgICAgICAgY2h2X2RlZ2FtbWFf cHJlY2lzaW9uKGNydGNfc3RhdGUxKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGNodl9n YW1tYV9lcXVhbChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTEsDQo+ ICsJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUyLA0KPiAr CQkJICAgIGJvb2wgZmFzdHNldCkNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5 X2Jsb2IgKmdhbW1hX2x1dDEgPSBjcnRjX3N0YXRlMS0NCj4gPmh3LmdhbW1hX2x1dDsNCj4gKwlj b25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmdhbW1hX2x1dDIgPQ0KPiArY3J0Y19zdGF0 ZTItPmh3LmdhbW1hX2x1dDsNCj4gKw0KPiArCXJldHVybiBpbnRlbF9sdXRfZXF1YWwoZ2FtbWFf bHV0MSwgZ2FtbWFfbHV0MiwNCj4gKwkJCSAgICAgICBjaHZfZ2FtbWFfcHJlY2lzaW9uKGNydGNf c3RhdGUxKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGlsa19kZWdhbW1hX2VxdWFsKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlMSwNCj4gKwkJCSAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlMiwNCj4gKwkJCSAgICAgIGJv b2wgZmFzdHNldCkNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmRl Z2FtbWFfbHV0MSA9IGNydGNfc3RhdGUyLQ0KPiA+aHcuZGVnYW1tYV9sdXQ7DQo+ICsJY29uc3Qg c3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpkZWdhbW1hX2x1dDIgPQ0KPiArY3J0Y19zdGF0ZTIt Pmh3LmRlZ2FtbWFfbHV0Ow0KPiArDQo+ICsJaWYgKCFmYXN0c2V0KSB7DQo+ICsJCWNvbnN0IHN0 cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZ2FtbWFfbHV0MiA9DQo+ICtjcnRjX3N0YXRlMi0+aHcu Z2FtbWFfbHV0Ow0KPiArDQo+ICsJCS8qDQo+ICsJCSAqIEZvciByZWFkb3V0IGNydGNfc3RhdGUx IGlzIHRoZSBzb2Z0d2FyZSBzdGF0ZSwNCj4gKwkJICogY3J0Y19zdGF0ZTIgaXMgdGhlIGhhcmR3 YXJlIHN0YXRlLg0KPiArCQkgKg0KPiArCQkgKiBPbiBJTEstQkRXIHRoZSBzaW5nbGUgTFVUIG1h eSBhcHBlYXIgYmVmb3JlIG9yIGFmdGVyIHRoZQ0KPiArCQkgKiBDU0MgZHVlIHRvIHZhcmlvdXMg cmVhc29ucy4gUmVhZG91dCBkb2VzIG5vdCBrbm93IHdoZXRoZXINCj4gKwkJICogdGhlIHVzZXIg c3VwcGxpZWQgaXQgYXMgYSBnYW1tYSBMVVQgb3IgZGVnYW1tYSBMVVQuIElmIHRoZQ0KPiArCQkg KiBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgc3RhdGVzIGxvb2sgaW5jb25zaXN0ZW50IGFzc3VtZQ0K PiArCQkgKiByZWFkb3V0IGdvdCB0aGluZ3MgdGhlIHdyb25nIHdheSBhcm91bmQuDQo+ICsJCSAq DQo+ICsJCSAqIEZJWE1FIHRoaW5rIGFib3V0IGFzc2lnbmluZyB0aGVzZSBjb25zaXN0ZW50bHkg ZnJvbSB0aGUNCj4gaGFyZHdhcmUNCj4gKwkJICogUE9WIGFscmVhZHkgd2hlbiBjb21wdXRpbmcg dGhlIHN0YXRlLiBXb3VsZCBhdm9pZCB0aGlzDQo+IGhpZGVvdXMNCj4gKwkJICogaGFjaywgYnV0 IHBvc3NpYmx5IG5vdCBlbnRpcmVseSB0cml2aWFsIHRvIGRvIHNpbmNlIHdlIGN1cnJlbnRseQ0K PiArCQkgKiBqdXN0IGJsaW5kbHkgY29weSB0aG9zZSBmcm9tIHRoZSB1YXBpIHN0YXRlLg0KPiAr CQkgKi8NCj4gKwkJaWYgKCEhZGVnYW1tYV9sdXQxICE9ICEhZGVnYW1tYV9sdXQyKQ0KPiArCQkJ c3dhcChnYW1tYV9sdXQyLCBkZWdhbW1hX2x1dDIpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBp bnRlbF9sdXRfZXF1YWwoZGVnYW1tYV9sdXQxLCBkZWdhbW1hX2x1dDIsDQo+ICsJCQkgICAgICAg aWxrX2RlZ2FtbWFfcHJlY2lzaW9uKGNydGNfc3RhdGUxKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBib29sIGlsa19nYW1tYV9lcXVhbChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZTEsDQo+ICsJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUyLA0KPiArCQkJICAgIGJvb2wgZmFzdHNldCkNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3Qg ZHJtX3Byb3BlcnR5X2Jsb2IgKmdhbW1hX2x1dDEgPSBjcnRjX3N0YXRlMS0NCj4gPmh3LmdhbW1h X2x1dDsNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmdhbW1hX2x1dDIgPQ0K PiArY3J0Y19zdGF0ZTItPmh3LmdhbW1hX2x1dDsNCj4gKw0KPiArCWlmICghZmFzdHNldCkgew0K PiArCQljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmRlZ2FtbWFfbHV0MiA9DQo+ICtj cnRjX3N0YXRlMi0+aHcuZGVnYW1tYV9sdXQ7DQo+ICsNCj4gKwkJLyoNCj4gKwkJICogRm9yIHJl YWRvdXQgY3J0Y19zdGF0ZTEgaXMgdGhlIHNvZnR3YXJlIHN0YXRlLA0KPiArCQkgKiBjcnRjX3N0 YXRlMiBpcyB0aGUgaGFyZHdhcmUgc3RhdGUuDQo+ICsJCSAqDQo+ICsJCSAqIE9uIElMSy1CRFcg dGhlIHNpbmdsZSBMVVQgbWF5IGFwcGVhciBiZWZvcmUgb3IgYWZ0ZXIgdGhlDQo+ICsJCSAqIENT QyBkdWUgdG8gdmFyaW91cyByZWFzb25zLiBSZWFkb3V0IGRvZXMgbm90IGtub3cgd2hldGhlcg0K PiArCQkgKiB0aGUgdXNlciBzdXBwbGllZCBpdCBhcyBhIGdhbW1hIExVVCBvciBkZWdhbW1hIExV VC4gSWYgdGhlDQo+ICsJCSAqIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBzdGF0ZXMgbG9vayBpbmNv bnNpc3RlbnQgYXNzdW1lDQo+ICsJCSAqIHJlYWRvdXQgZ290IHRoaW5ncyB0aGUgd3Jvbmcgd2F5 IGFyb3VuZC4NCj4gKwkJICoNCj4gKwkJICogRklYTUUgdGhpbmsgYWJvdXQgYXNzaWduaW5nIHRo ZXNlIGNvbnNpc3RlbnRseSBmcm9tIHRoZQ0KPiBoYXJkd2FyZQ0KPiArCQkgKiBQT1YgYWxyZWFk eSB3aGVuIGNvbXB1dGluZyB0aGUgc3RhdGUuIFdvdWxkIGF2b2lkIHRoaXMNCj4gaGlkZW91cw0K PiArCQkgKiBoYWNrLCBidXQgcG9zc2libHkgbm90IGVudGlyZWx5IHRyaXZpYWwgdG8gZG8gc2lu Y2Ugd2UgY3VycmVudGx5DQo+ICsJCSAqIGp1c3QgYmxpbmRseSBjb3B5IHRob3NlIGZyb20gdGhl IHVhcGkgc3RhdGUuDQo+ICsJCSAqLw0KPiArCQlpZiAoISFnYW1tYV9sdXQxICE9ICEhZ2FtbWFf bHV0MikNCj4gKwkJCXN3YXAoZ2FtbWFfbHV0MiwgZGVnYW1tYV9sdXQyKTsNCj4gKwl9DQo+ICsN Cj4gKwlyZXR1cm4gaW50ZWxfbHV0X2VxdWFsKGdhbW1hX2x1dDEsIGdhbW1hX2x1dDIsDQo+ICsJ CQkgICAgICAgaWxrX2dhbW1hX3ByZWNpc2lvbihjcnRjX3N0YXRlMSkpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgYm9vbCBpdmJfbHV0X3NwbGl0X2VxdWFsKGNvbnN0IHN0cnVjdCBkcm1fcHJvcGVy dHlfYmxvYiAqYmxvYjEsDQo+ICsJCQkJY29uc3Qgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpi bG9iMiwNCj4gKwkJCQlpbnQgYml0X3ByZWNpc2lvbikNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3Qg ZHJtX2NvbG9yX2x1dCAqbHV0MSwgKmx1dDI7DQo+ICsJaW50IGksIGx1dF9zaXplLCBod19sdXRf c2l6ZTsNCj4gKw0KPiArCWlmICghaW50ZWxfY29sb3JfbHV0X3NpemVzX2VxdWFsKGJsb2IxLCBi bG9iMikpDQo+ICAJCXJldHVybiBmYWxzZTsNCj4gDQo+ICAJaWYgKCFibG9iMSkNCj4gIAkJcmV0 dXJuIHRydWU7DQo+IA0KPiAtCWx1dF9zaXplMSA9IGRybV9jb2xvcl9sdXRfc2l6ZShibG9iMSk7 DQo+IC0JbHV0X3NpemUyID0gZHJtX2NvbG9yX2x1dF9zaXplKGJsb2IyKTsNCj4gLQ0KPiAtCS8q IGNoZWNrIHN3IGFuZCBodyBsdXQgc2l6ZSAqLw0KPiAtCWlmIChsdXRfc2l6ZTEgIT0gbHV0X3Np emUyKQ0KPiArCWlmICghYml0X3ByZWNpc2lvbikNCj4gIAkJcmV0dXJuIGZhbHNlOw0KPiANCj4g KwlsdXRfc2l6ZSA9IGRybV9jb2xvcl9sdXRfc2l6ZShibG9iMSk7DQo+ICsJaHdfbHV0X3NpemUg PSBpdmJfbHV0XzEwX3NpemUoUEFMX1BSRUNfU1BMSVRfTU9ERSk7DQo+ICAJbHV0MSA9IGJsb2Ix LT5kYXRhOw0KPiAgCWx1dDIgPSBibG9iMi0+ZGF0YTsNCj4gDQo+IC0JZXJyID0gMHhmZmZmID4+ IGJpdF9wcmVjaXNpb247DQo+ICsJZm9yIChpID0gMDsgaSA8IGh3X2x1dF9zaXplOyBpKyspIHsN Cj4gKwkJLyogV2UgZGlzY2FyZCBoYWxmIHRoZSB1c2VyIGVudHJpZXMgaW4gc3BsaXQgZ2FtbWEg bW9kZSAqLw0KPiArCQljb25zdCBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqZW50cnkxID0NCj4gKwkJ CSZsdXQxW2kgKiAobHV0X3NpemUgLSAxKSAvIChod19sdXRfc2l6ZSAtIDEpXTsNCj4gKwkJY29u c3Qgc3RydWN0IGRybV9jb2xvcl9sdXQgKmVudHJ5MiA9DQo+ICsJCQkmbHV0MltpICogKGx1dF9z aXplIC0gMSkgLyAoaHdfbHV0X3NpemUgLSAxKV07DQo+IA0KPiAtCS8qIGNoZWNrIHN3IGFuZCBo dyBsdXQgZW50cnkgdG8gYmUgZXF1YWwgKi8NCj4gLQlzd2l0Y2ggKGdhbW1hX21vZGUgJiBHQU1N QV9NT0RFX01PREVfTUFTSykgew0KPiAtCWNhc2UgR0FNTUFfTU9ERV9NT0RFXzhCSVQ6DQo+IC0J Y2FzZSBHQU1NQV9NT0RFX01PREVfMTBCSVQ6DQo+IC0JCWlmICghaW50ZWxfY29sb3JfbHV0X2Vu dHJpZXNfZXF1YWwobHV0MSwgbHV0MiwNCj4gLQkJCQkJCSAgIGx1dF9zaXplMiwgZXJyKSkNCj4g KwkJaWYgKCFsdXRfZW50cnlfZXF1YWwoZW50cnkxLCBlbnRyeTIsIDB4ZmZmZiA+PiBiaXRfcHJl Y2lzaW9uKSkNCj4gIAkJCXJldHVybiBmYWxzZTsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBHQU1N QV9NT0RFX01PREVfMTJCSVRfTVVMVElfU0VHTUVOVEVEOg0KPiAtCQlpZiAoIWludGVsX2NvbG9y X2x1dF9lbnRyaWVzX2VxdWFsKGx1dDEsIGx1dDIsDQo+IC0JCQkJCQkgICA5LCBlcnIpKQ0KPiAt CQkJcmV0dXJuIGZhbHNlOw0KPiAtCQlicmVhazsNCj4gLQlkZWZhdWx0Og0KPiAtCQlNSVNTSU5H X0NBU0UoZ2FtbWFfbW9kZSk7DQo+IC0JCXJldHVybiBmYWxzZTsNCj4gIAl9DQo+IA0KPiAgCXJl dHVybiB0cnVlOw0KPiAgfQ0KPiANCj4gK3N0YXRpYyBib29sIGl2Yl9kZWdhbW1hX2VxdWFsKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlMSwNCj4gKwkJCSAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlMiwNCj4gKwkJCSAgICAgIGJv b2wgZmFzdHNldCkNCj4gK3sNCj4gKwlpZiAoY3J0Y19zdGF0ZTEtPmdhbW1hX21vZGUgPT0gR0FN TUFfTU9ERV9NT0RFX1NQTElUKSB7DQo+ICsJCWNvbnN0IHN0cnVjdCBkcm1fcHJvcGVydHlfYmxv YiAqZGVnYW1tYV9sdXQxID0gY3J0Y19zdGF0ZTEtDQo+ID5ody5kZWdhbW1hX2x1dDsNCj4gKwkJ Y29uc3Qgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpkZWdhbW1hX2x1dDIgPQ0KPiArY3J0Y19z dGF0ZTItPmh3LmRlZ2FtbWFfbHV0Ow0KPiArDQo+ICsJCXJldHVybiBpdmJfbHV0X3NwbGl0X2Vx dWFsKGRlZ2FtbWFfbHV0MSwgZGVnYW1tYV9sdXQyLA0KPiArCQkJCQkgICBpdmJfZGVnYW1tYV9w cmVjaXNpb24oY3J0Y19zdGF0ZTEpKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlyZXR1cm4gaWxrX2Rl Z2FtbWFfZXF1YWwoY3J0Y19zdGF0ZTEsIGNydGNfc3RhdGUyLCBmYXN0c2V0KTsNCj4gKwl9DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl2Yl9nYW1tYV9lcXVhbChjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTEsDQo+ICsJCQkgICAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUyLA0KPiArCQkJICAgIGJvb2wgZmFzdHNldCkNCj4gK3sN Cj4gKwlpZiAoY3J0Y19zdGF0ZTEtPmdhbW1hX21vZGUgPT0gR0FNTUFfTU9ERV9NT0RFX1NQTElU KSB7DQo+ICsJCWNvbnN0IHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZ2FtbWFfbHV0MSA9IGNy dGNfc3RhdGUxLQ0KPiA+aHcuZ2FtbWFfbHV0Ow0KPiArCQljb25zdCBzdHJ1Y3QgZHJtX3Byb3Bl cnR5X2Jsb2IgKmdhbW1hX2x1dDIgPQ0KPiArY3J0Y19zdGF0ZTItPmh3LmdhbW1hX2x1dDsNCj4g Kw0KPiArCQlyZXR1cm4gaXZiX2x1dF9zcGxpdF9lcXVhbChnYW1tYV9sdXQxLCBnYW1tYV9sdXQy LA0KPiArCQkJCQkgICBpdmJfZ2FtbWFfcHJlY2lzaW9uKGNydGNfc3RhdGUxKSk7DQo+ICsJfSBl bHNlIHsNCj4gKwkJcmV0dXJuIGlsa19nYW1tYV9lcXVhbChjcnRjX3N0YXRlMSwgY3J0Y19zdGF0 ZTIsIGZhc3RzZXQpOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgZ2xrX2RlZ2Ft bWFfZXF1YWwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUxLA0KPiAr CQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUyLA0KPiAr CQkJICAgICAgYm9vbCBmYXN0c2V0KQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCBkcm1fcHJvcGVy dHlfYmxvYiAqZGVnYW1tYV9sdXQxID0gY3J0Y19zdGF0ZTEtDQo+ID5ody5kZWdhbW1hX2x1dDsN Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmRlZ2FtbWFfbHV0MiA9DQo+ICtj cnRjX3N0YXRlMi0+aHcuZGVnYW1tYV9sdXQ7DQo+ICsNCj4gKwlpZiAoIWZhc3RzZXQpIHsNCj4g KwkJLyoNCj4gKwkJICogRm9yIHJlYWRvdXQgY3J0Y19zdGF0ZTEgaXMgdGhlIHNvZnR3YXJlIHN0 YXRlLA0KPiArCQkgKiBjcnRjX3N0YXRlMiBpcyB0aGUgaGFyZHdhcmUgc3RhdGUuDQo+ICsJCSAq DQo+ICsJCSAqIFJlYWRvdXQgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuIGFj dHVhbA0KPiArCQkgKiBkZWdhbW1hIExVVCBhbmQgdGhlIGxpbmVhciBkZWdhbW1hIExVVCB3ZSBo YXZlIHRvIGxvYWQNCj4gKwkJICogd2hlbmV2ZXIgdGhlIHBpcGUgQ1NDIGlzIGFjdGl2ZS4gSWdu b3JlIHRoZSBoYXJkd2FyZQ0KPiArCQkgKiBkZWdhbW1hIExVVCB3aGVuIHdlIGRvbid0IGhhdmUg YSBzb2Z0d2FyZSBkZWdhbW1hIExVVC4NCj4gKwkJICoNCj4gKwkJICogRklYTUUgdGhpbmsgYWJv dXQgYXNzaWduaW5nIGFuIGludGVybmFsIGxpbmVhciBsdXQgYWxyZWFkeQ0KPiArCQkgKiB3aGVu IGNvbXB1dGluZyB0aGUgc3RhdGUuIFdvdWxkIGF2b2lkIHRoaXMgaGlkZW91cyBoYWNrLA0KPiAr CQkgKiBidXQgcG9zc2libHkgbm90IGVudGlyZWx5IHRyaXZpYWwgdG8gZG8gc2luY2Ugd2UgY3Vy cmVudGx5DQo+ICsJCSAqIGp1c3QgYmxpbmRseSBjb3B5IHRoaXMgZnJvbSB0aGUgdWFwaSBzdGF0 ZS4NCj4gKwkJICovDQo+ICsJCWlmICghZGVnYW1tYV9sdXQxKQ0KPiArCQkJZGVnYW1tYV9sdXQy ID0gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gaW50ZWxfbHV0X2VxdWFsKGRlZ2FtbWFf bHV0MSwgZGVnYW1tYV9sdXQyLA0KPiArCQkJICAgICAgIGdsa19kZWdhbW1hX3ByZWNpc2lvbihj cnRjX3N0YXRlMSkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBnbGtfZ2FtbWFfZXF1YWwo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUxLA0KPiArCQkJICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlMiwNCj4gKwkJCSAgICBib29s IGZhc3RzZXQpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpnYW1t YV9sdXQxID0gY3J0Y19zdGF0ZTEtDQo+ID5ody5nYW1tYV9sdXQ7DQo+ICsJY29uc3Qgc3RydWN0 IGRybV9wcm9wZXJ0eV9ibG9iICpnYW1tYV9sdXQyID0NCj4gK2NydGNfc3RhdGUyLT5ody5nYW1t YV9sdXQ7DQo+ICsNCj4gKwlyZXR1cm4gaW50ZWxfbHV0X2VxdWFsKGdhbW1hX2x1dDEsIGdhbW1h X2x1dDIsDQo+ICsJCQkgICAgICAgZ2xrX2dhbW1hX3ByZWNpc2lvbihjcnRjX3N0YXRlMSkpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpY2xfZGVnYW1tYV9lcXVhbChjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTEsDQo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTIsDQo+ICsJCQkgICAgICBib29sIGZhc3RzZXQp DQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpkZWdhbW1hX2x1dDEg PSBjcnRjX3N0YXRlMS0NCj4gPmh3LmRlZ2FtbWFfbHV0Ow0KPiArCWNvbnN0IHN0cnVjdCBkcm1f cHJvcGVydHlfYmxvYiAqZGVnYW1tYV9sdXQyID0NCj4gK2NydGNfc3RhdGUyLT5ody5kZWdhbW1h X2x1dDsNCj4gKw0KPiArCXJldHVybiBpbnRlbF9sdXRfZXF1YWwoZGVnYW1tYV9sdXQxLCBkZWdh bW1hX2x1dDIsDQo+ICsJCQkgICAgICAgaWNsX2RlZ2FtbWFfcHJlY2lzaW9uKGNydGNfc3RhdGUx KSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGljbF9nYW1tYV9lcXVhbChjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTEsDQo+ICsJCQkgICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUyLA0KPiArCQkJICAgIGJvb2wgZmFzdHNldCkN Cj4gK3sNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmdhbW1hX2x1dDEgPSBj cnRjX3N0YXRlMS0NCj4gPmh3LmdhbW1hX2x1dDsNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Byb3Bl cnR5X2Jsb2IgKmdhbW1hX2x1dDIgPQ0KPiArY3J0Y19zdGF0ZTItPmh3LmdhbW1hX2x1dDsNCj4g Kw0KPiArCXJldHVybiBpbnRlbF9sdXRfZXF1YWwoZ2FtbWFfbHV0MSwgZ2FtbWFfbHV0MiwNCj4g KwkJCSAgICAgICBpY2xfZ2FtbWFfcHJlY2lzaW9uKGNydGNfc3RhdGUxKSk7DQo+ICt9DQo+ICsN Cj4gK2Jvb2wgaW50ZWxfY29sb3JfZGVnYW1tYV9sdXRfZXF1YWwoY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUxLA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlMiwNCj4gKwkJCQkgICBib29sIGZhc3RzZXQpDQo+ICt7DQo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0NCj4gK3RvX2k5MTUoY3J0Y19z dGF0ZTEtPnVhcGkuY3J0Yy0+ZGV2KTsNCj4gKw0KPiArCXJldHVybiBkZXZfcHJpdi0+ZGlzcGxh eS5kZWdhbW1hX2VxdWFsKGNydGNfc3RhdGUxLCBjcnRjX3N0YXRlMiwNCj4gK2Zhc3RzZXQpOyB9 DQo+ICsNCj4gK2Jvb2wgaW50ZWxfY29sb3JfZ2FtbWFfbHV0X2VxdWFsKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlMSwNCj4gKwkJCQkgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUyLA0KPiArCQkJCSBib29sIGZhc3RzZXQpDQo+ICt7DQo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0NCj4gK3RvX2k5MTUoY3J0Y19z dGF0ZTEtPnVhcGkuY3J0Yy0+ZGV2KTsNCj4gKw0KPiArCXJldHVybiBkZXZfcHJpdi0+ZGlzcGxh eS5nYW1tYV9lcXVhbChjcnRjX3N0YXRlMSwgY3J0Y19zdGF0ZTIsDQo+ICtmYXN0c2V0KTsgfQ0K PiArDQo+ICBzdGF0aWMgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICppOXh4X3JlYWRfbHV0Xzgo c3RydWN0IGludGVsX2NydGMgKmNydGMpICB7DQo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7IEBAIC0NCj4gMjI4OSwxNiArMjU1 NSwyMiBAQCB2b2lkIGludGVsX2NvbG9yX2luaXQoc3RydWN0IGludGVsX2NydGMgKmNydGMpDQo+ ICAJCQlkZXZfcHJpdi0+ZGlzcGxheS5jb2xvcl9jb21taXQgPSBpOXh4X2NvbG9yX2NvbW1pdDsN Cj4gIAkJCWRldl9wcml2LT5kaXNwbGF5LmxvYWRfbHV0cyA9IGNodl9sb2FkX2x1dHM7DQo+ICAJ CQlkZXZfcHJpdi0+ZGlzcGxheS5yZWFkX2x1dHMgPSBjaHZfcmVhZF9sdXRzOw0KPiArCQkJZGV2 X3ByaXYtPmRpc3BsYXkuZ2FtbWFfZXF1YWwgPSBjaHZfZ2FtbWFfZXF1YWw7DQo+ICsJCQlkZXZf cHJpdi0+ZGlzcGxheS5kZWdhbW1hX2VxdWFsID0NCj4gY2h2X2RlZ2FtbWFfZXF1YWw7DQo+ICAJ CX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KSB7DQo+ICAJCQlkZXZfcHJpdi0+ ZGlzcGxheS5jb2xvcl9jaGVjayA9IGk5eHhfY29sb3JfY2hlY2s7DQo+ICAJCQlkZXZfcHJpdi0+ ZGlzcGxheS5jb2xvcl9jb21taXQgPSBpOXh4X2NvbG9yX2NvbW1pdDsNCj4gIAkJCWRldl9wcml2 LT5kaXNwbGF5LmxvYWRfbHV0cyA9IGk5NjVfbG9hZF9sdXRzOw0KPiAgCQkJZGV2X3ByaXYtPmRp c3BsYXkucmVhZF9sdXRzID0gaTk2NV9yZWFkX2x1dHM7DQo+ICsJCQlkZXZfcHJpdi0+ZGlzcGxh eS5nYW1tYV9lcXVhbCA9IGk5eHhfZ2FtbWFfZXF1YWw7DQo+ICsJCQlkZXZfcHJpdi0+ZGlzcGxh eS5kZWdhbW1hX2VxdWFsID0NCj4gaTl4eF9kZWdhbW1hX2VxdWFsOw0KPiAgCQl9IGVsc2Ugew0K PiAgCQkJZGV2X3ByaXYtPmRpc3BsYXkuY29sb3JfY2hlY2sgPSBpOXh4X2NvbG9yX2NoZWNrOw0K PiAgCQkJZGV2X3ByaXYtPmRpc3BsYXkuY29sb3JfY29tbWl0ID0gaTl4eF9jb2xvcl9jb21taXQ7 DQo+ICAJCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2x1dHMgPSBpOXh4X2xvYWRfbHV0czsNCj4g IAkJCWRldl9wcml2LT5kaXNwbGF5LnJlYWRfbHV0cyA9IGk5eHhfcmVhZF9sdXRzOw0KPiArCQkJ ZGV2X3ByaXYtPmRpc3BsYXkuZ2FtbWFfZXF1YWwgPSBpOXh4X2dhbW1hX2VxdWFsOw0KPiArCQkJ ZGV2X3ByaXYtPmRpc3BsYXkuZGVnYW1tYV9lcXVhbCA9DQo+IGk5eHhfZGVnYW1tYV9lcXVhbDsN Cj4gIAkJfQ0KPiAgCX0gZWxzZSB7DQo+ICAJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx KQ0KPiBAQCAtMjMyMCwxOSArMjU5MiwzMCBAQCB2b2lkIGludGVsX2NvbG9yX2luaXQoc3RydWN0 IGludGVsX2NydGMgKmNydGMpDQo+ICAJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKSB7 DQo+ICAJCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2x1dHMgPSBpY2xfbG9hZF9sdXRzOw0KPiAg CQkJZGV2X3ByaXYtPmRpc3BsYXkucmVhZF9sdXRzID0gaWNsX3JlYWRfbHV0czsNCj4gKwkJCWRl dl9wcml2LT5kaXNwbGF5LmdhbW1hX2VxdWFsID0gaWNsX2dhbW1hX2VxdWFsOw0KPiArCQkJZGV2 X3ByaXYtPmRpc3BsYXkuZGVnYW1tYV9lcXVhbCA9IGljbF9kZWdhbW1hX2VxdWFsOw0KPiAgCQl9 IGVsc2UgaWYgKElTX0NBTk5PTkxBS0UoZGV2X3ByaXYpIHx8IElTX0dFTUlOSUxBS0UoZGV2X3By aXYpKQ0KPiB7DQo+ICAJCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2x1dHMgPSBnbGtfbG9hZF9s dXRzOw0KPiAgCQkJZGV2X3ByaXYtPmRpc3BsYXkucmVhZF9sdXRzID0gZ2xrX3JlYWRfbHV0czsN Cj4gKwkJCWRldl9wcml2LT5kaXNwbGF5LmdhbW1hX2VxdWFsID0gZ2xrX2dhbW1hX2VxdWFsOw0K PiArCQkJZGV2X3ByaXYtPmRpc3BsYXkuZGVnYW1tYV9lcXVhbCA9DQo+IGdsa19kZWdhbW1hX2Vx dWFsOw0KPiAgCQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkgew0KPiAgCQkJ ZGV2X3ByaXYtPmRpc3BsYXkubG9hZF9sdXRzID0gYmR3X2xvYWRfbHV0czsNCj4gIAkJCWRldl9w cml2LT5kaXNwbGF5LnJlYWRfbHV0cyA9IGJkd19yZWFkX2x1dHM7DQo+ICsJCQlkZXZfcHJpdi0+ ZGlzcGxheS5nYW1tYV9lcXVhbCA9IGl2Yl9nYW1tYV9lcXVhbDsNCj4gKwkJCWRldl9wcml2LT5k aXNwbGF5LmRlZ2FtbWFfZXF1YWwgPQ0KPiBpdmJfZGVnYW1tYV9lcXVhbDsNCj4gIAkJfSBlbHNl IGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDcpIHsNCj4gIAkJCWRldl9wcml2LT5kaXNwbGF5 LmxvYWRfbHV0cyA9IGl2Yl9sb2FkX2x1dHM7DQo+ICAJCQlkZXZfcHJpdi0+ZGlzcGxheS5yZWFk X2x1dHMgPSBpdmJfcmVhZF9sdXRzOw0KPiArCQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2FtbWFfZXF1 YWwgPSBpdmJfZ2FtbWFfZXF1YWw7DQo+ICsJCQlkZXZfcHJpdi0+ZGlzcGxheS5kZWdhbW1hX2Vx dWFsID0NCj4gaXZiX2RlZ2FtbWFfZXF1YWw7DQo+ICAJCX0gZWxzZSB7DQo+ICAJCQlkZXZfcHJp di0+ZGlzcGxheS5sb2FkX2x1dHMgPSBpbGtfbG9hZF9sdXRzOw0KPiAgCQkJZGV2X3ByaXYtPmRp c3BsYXkucmVhZF9sdXRzID0gaWxrX3JlYWRfbHV0czsNCj4gKwkJCWRldl9wcml2LT5kaXNwbGF5 LmdhbW1hX2VxdWFsID0gaWxrX2dhbW1hX2VxdWFsOw0KPiArCQkJZGV2X3ByaXYtPmRpc3BsYXku ZGVnYW1tYV9lcXVhbCA9DQo+IGlsa19kZWdhbW1hX2VxdWFsOw0KPiAgCQl9DQo+ICsNCj4gIAl9 DQo+IA0KPiAgCWRybV9jcnRjX2VuYWJsZV9jb2xvcl9tZ210KCZjcnRjLT5iYXNlLA0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb2xvci5oDQo+IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb2xvci5oDQo+IGluZGV4IDE3Mzcy N2FhYTI0ZC4uMDc5ZWE5MGMyMmM4IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2NvbG9yLmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9jb2xvci5oDQo+IEBAIC0xNyw5ICsxNywxMSBAQCBpbnQgaW50ZWxfY29sb3Jf Y2hlY2soc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOw0KPiB2b2lkIGludGVs X2NvbG9yX2NvbW1pdChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7 ICB2b2lkDQo+IGludGVsX2NvbG9yX2xvYWRfbHV0cyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSk7ICB2b2lkDQo+IGludGVsX2NvbG9yX2dldF9jb25maWcoc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOyAtaW50DQo+IGludGVsX2NvbG9yX2dldF9n YW1tYV9iaXRfcHJlY2lzaW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKTsgLQ0KPiBib29sIGludGVsX2NvbG9yX2x1dF9lcXVhbChzdHJ1Y3QgZHJtX3Byb3BlcnR5 X2Jsb2IgKmJsb2IxLA0KPiAtCQkJICAgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iMiwN Cj4gLQkJCSAgIHUzMiBnYW1tYV9tb2RlLCB1MzIgYml0X3ByZWNpc2lvbik7DQo+ICtib29sIGlu dGVsX2NvbG9yX2dhbW1hX2x1dF9lcXVhbChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTEsDQo+ICsJCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlMiwNCj4gKwkJCQkgYm9vbCBmYXN0c2V0KTsNCj4gK2Jvb2wgaW50ZWxfY29sb3JfZGVn YW1tYV9sdXRfZXF1YWwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUx LA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlMiwN Cj4gKwkJCQkgICBib29sIGZhc3RzZXQpOw0KPiANCj4gICNlbmRpZiAvKiBfX0lOVEVMX0NPTE9S X0hfXyAqLw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmMNCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuYw0KPiBpbmRleCA5Mjc5ZGY3NzU3ZmMuLmU4MGI0Y2Q4ZWVhMSAxMDA2NDQNCj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMNCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMNCj4gQEAgLTEzNjM1LDcg KzEzNjM1LDYgQEAgaW50ZWxfcGlwZV9jb25maWdfY29tcGFyZShjb25zdCBzdHJ1Y3QNCj4gaW50 ZWxfY3J0Y19zdGF0ZSAqY3VycmVudF9jb25maWcsDQo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjdXJyZW50X2NvbmZpZy0+dWFwaS5jcnRjLQ0KPiA+ZGV2 KTsNCj4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25m aWctPnVhcGkuY3J0Yyk7DQo+ICAJYm9vbCByZXQgPSB0cnVlOw0KPiAtCXUzMiBicF9nYW1tYSA9 IDA7DQo+ICAJYm9vbCBmaXh1cF9pbmhlcml0ZWQgPSBmYXN0c2V0ICYmDQo+ICAJCWN1cnJlbnRf Y29uZmlnLT5pbmhlcml0ZWQgJiYgIXBpcGVfY29uZmlnLT5pbmhlcml0ZWQ7DQo+IA0KPiBAQCAt MTM3OTgsMjEgKzEzNzk3LDEwIEBAIGludGVsX3BpcGVfY29uZmlnX2NvbXBhcmUoY29uc3Qgc3Ry dWN0DQo+IGludGVsX2NydGNfc3RhdGUgKmN1cnJlbnRfY29uZmlnLA0KPiAgCX0gXA0KPiAgfSB3 aGlsZSAoMCkNCj4gDQo+IC0jZGVmaW5lIFBJUEVfQ09ORl9DSEVDS19DT0xPUl9MVVQobmFtZTEs IG5hbWUyLCBiaXRfcHJlY2lzaW9uKSBkbyB7IFwNCj4gLQlpZiAoY3VycmVudF9jb25maWctPm5h bWUxICE9IHBpcGVfY29uZmlnLT5uYW1lMSkgeyBcDQo+IC0JCXBpcGVfY29uZmlnX21pc21hdGNo KGZhc3RzZXQsIGNydGMsIF9fc3RyaW5naWZ5KG5hbWUxKSwgXA0KPiAtCQkJCSIoZXhwZWN0ZWQg JWksIGZvdW5kICVpLCB3b24ndCBjb21wYXJlIGx1dA0KPiB2YWx1ZXMpIiwgXA0KPiAtCQkJCWN1 cnJlbnRfY29uZmlnLT5uYW1lMSwgXA0KPiAtCQkJCXBpcGVfY29uZmlnLT5uYW1lMSk7IFwNCj4g LQkJcmV0ID0gZmFsc2U7XA0KPiAtCX0gZWxzZSB7IFwNCj4gLQkJaWYgKCFpbnRlbF9jb2xvcl9s dXRfZXF1YWwoY3VycmVudF9jb25maWctPm5hbWUyLCBcDQo+IC0JCQkJCXBpcGVfY29uZmlnLT5u YW1lMiwgcGlwZV9jb25maWctDQo+ID5uYW1lMSwgXA0KPiAtCQkJCQliaXRfcHJlY2lzaW9uKSkg eyBcDQo+IC0JCQlwaXBlX2NvbmZpZ19taXNtYXRjaChmYXN0c2V0LCBjcnRjLCBfX3N0cmluZ2lm eShuYW1lMiksIFwNCj4gLQkJCQkJImh3X3N0YXRlIGRvZXNuJ3QgbWF0Y2ggc3dfc3RhdGUiKTsg XA0KPiAtCQkJcmV0ID0gZmFsc2U7IFwNCj4gLQkJfSBcDQo+ICsjZGVmaW5lIFBJUEVfQ09ORl9D SEVDS19DT0xPUl9MVVQobmFtZSkgZG8geyBcDQo+ICsJaWYgKCFpbnRlbF9jb2xvcl8jI25hbWUj I19lcXVhbChjdXJyZW50X2NvbmZpZywgcGlwZV9jb25maWcsIGZhc3RzZXQpKSB7IFwNCj4gKwkJ cGlwZV9jb25maWdfbWlzbWF0Y2goZmFzdHNldCwgY3J0YywgImh3LiIgX19zdHJpbmdpZnkobmFt ZSksICIgIik7DQo+IFwNCj4gKwkJcmV0ID0gZmFsc2U7IFwNCj4gIAl9IFwNCj4gIH0gd2hpbGUg KDApDQo+IA0KPiBAQCAtMTM5MTgsOSArMTM5MDYsOCBAQCBpbnRlbF9waXBlX2NvbmZpZ19jb21w YXJlKGNvbnN0IHN0cnVjdA0KPiBpbnRlbF9jcnRjX3N0YXRlICpjdXJyZW50X2NvbmZpZywNCj4g IAkJUElQRV9DT05GX0NIRUNLX0kobGluZXRpbWUpOw0KPiAgCQlQSVBFX0NPTkZfQ0hFQ0tfSShp cHNfbGluZXRpbWUpOw0KPiANCj4gLQkJYnBfZ2FtbWEgPSBpbnRlbF9jb2xvcl9nZXRfZ2FtbWFf Yml0X3ByZWNpc2lvbihwaXBlX2NvbmZpZyk7DQo+IC0JCWlmIChicF9nYW1tYSkNCj4gLQkJCVBJ UEVfQ09ORl9DSEVDS19DT0xPUl9MVVQoZ2FtbWFfbW9kZSwNCj4gaHcuZ2FtbWFfbHV0LCBicF9n YW1tYSk7DQo+ICsJCVBJUEVfQ09ORl9DSEVDS19DT0xPUl9MVVQoZ2FtbWFfbHV0KTsNCj4gKwkJ UElQRV9DT05GX0NIRUNLX0NPTE9SX0xVVChkZWdhbW1hX2x1dCk7DQo+ICAJfQ0KPiANCj4gIAlQ SVBFX0NPTkZfQ0hFQ0tfQk9PTChkb3VibGVfd2lkZSk7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aA0KPiBpbmRleCBlNGY3ZjY1MTg5NDUuLjU0ZDIyNGJlMjU2YSAxMDA2NDQNCj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oDQo+IEBAIC0yNTYsNiArMjU2LDcgQEAgc3RydWN0IHNkdm9fZGV2aWNlX21h cHBpbmcgew0KPiAgCXU4IGRkY19waW47DQo+ICB9Ow0KPiANCj4gK3N0cnVjdCBkcm1fcHJvcGVy dHlfYmxvYjsNCj4gIHN0cnVjdCBpbnRlbF9jb25uZWN0b3I7DQo+ICBzdHJ1Y3QgaW50ZWxfZW5j b2RlcjsNCj4gIHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGU7DQo+IEBAIC0zMzQsNiArMzM1LDEy IEBAIHN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIHsNCj4gIAkgKi8NCj4gIAl2b2lkICgq bG9hZF9sdXRzKShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7DQo+ ICAJdm9pZCAoKnJlYWRfbHV0cykoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Ow0KPiArCWJvb2wgKCpnYW1tYV9lcXVhbCkoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUxLA0KPiArCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlMiwNCj4gKwkJCSAgICBib29sIGZhc3RzZXQpOw0KPiArCWJvb2wgKCpkZWdhbW1h X2VxdWFsKShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTEsDQo+ICsJ CQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTIsDQo+ICsJ CQkgICAgICBib29sIGZhc3RzZXQpOw0KPiAgfTsNCj4gDQo+ICBzdHJ1Y3QgaW50ZWxfY3NyIHsN Cj4gLS0NCj4gMi4yNi4yDQo+IA0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXw0KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0DQo+IEludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcNCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=