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=-12.4 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY, URIBL_BLOCKED,USER_AGENT_SANE_1 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 3DFEEC1B0D8 for ; Mon, 14 Dec 2020 11:15:28 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CA07E229C6 for ; Mon, 14 Dec 2020 11:15:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CA07E229C6 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 EAE716E176; Mon, 14 Dec 2020 11:15:26 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 153046E176 for ; Mon, 14 Dec 2020 11:15:25 +0000 (UTC) IronPort-SDR: L/9x7FCUNVa/O1GEYHuUvUWXRbOl5LYL1kTZDbjAyDuiNun3v9dDjvGRkb8bM4pIDmQ605AqMB pFcYsobXF+qA== X-IronPort-AV: E=McAfee;i="6000,8403,9834"; a="162439661" X-IronPort-AV: E=Sophos;i="5.78,418,1599548400"; d="scan'208";a="162439661" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Dec 2020 03:15:24 -0800 IronPort-SDR: MtDrtEhhbWXEelNw2/EVy1dH/UKpzFRctxz+rLcKmPuschiRLMtS04NLlrEj4aSNDyrrJdSEzO aFgwx4tWqp/A== X-IronPort-AV: E=Sophos;i="5.78,418,1599548400"; d="scan'208";a="330212784" Received: from genxfsim-desktop.iind.intel.com (HELO intel.com) ([10.223.74.178]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Dec 2020 03:15:22 -0800 Date: Mon, 14 Dec 2020 16:32:03 +0530 From: Anshuman Gupta To: Gwan-gyeong Mun Message-ID: <20201214110200.GF9309@intel.com> References: <20201211171421.4048499-1-gwan-gyeong.mun@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20201211171421.4048499-1-gwan-gyeong.mun@intel.com> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [Intel-gfx] [PATCH v5 1/2] drm/i915/display: Support PSR Multiple Transcoders 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: jani.nikula@intel.com, intel-gfx@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gMjAyMC0xMi0xMSBhdCAxOToxNDoyMCArMDIwMCwgR3dhbi1neWVvbmcgTXVuIHdyb3RlOgo+ IEl0IGlzIGEgcHJlbGltaW5hcnkgd29yayBmb3Igc3VwcG9ydGluZyBtdWx0aXBsZSBFRFAgUFNS IGFuZAo+IERQIFBhbmVsUmVwbGF5LiBBbmQgaXQgcmVmYWN0b3JzIHNpbmdsZXRvbiBQU1IgdG8g TXVsdGkgVHJhbnNjb2Rlcgo+IHN1cHBvcnRhYmxlIFBTUi4KPiBBbmQgdGhpcyBtb3ZlcyBhbmQg cmVuYW1lcyB0aGUgaTkxNV9wc3Igc3RydWN0dXJlIG9mIGRybV9pOTE1X3ByaXZhdGUncyB0bwo+ IGludGVsX2RwJ3MgaW50ZWxfcHNyIHN0cnVjdHVyZS4KPiBJdCBhbHNvIGNhdXNlcyBjaGFuZ2Vz IGluIFBTUiBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZSBmb3Igc3VwcG9ydGluZwo+IG11bHRp cGxlIHRyYW5zY29kZXJzLiBCdXQgaXQgZG9lcyBub3QgY2hhbmdlIHRoZSBzY2VuYXJpbyBhbmQg dGltaW5nIG9mCj4gZW5hYmxpbmcgYW5kIGRpc2FibGluZyBQU1IuCj4gCj4gdjI6IEZpeCBpbmRl bnRhdGlvbiBhbmQgYWRkIGNvbW1lbnRzCj4gdjM6IFJlbW92ZSBCbGFuayBsaW5lCj4gdjQ6IFJl YmFzZWQKPiB2NTogUmViYXNlZCBhbmQgQWRkcmVzc2VkIEFuc2h1bWFuJ3MgcmV2aWV3IGNvbW1l bnQuCj4gICAgIC0gTW92ZSBjYWxsaW5nIG9mIGludGVsX3Bzcl9pbml0KCkgdG8gaW50ZWxfZHBf aW5pdF9jb25uZWN0b3IoKQo+IAo+IFNpZ25lZC1vZmYtYnk6IEd3YW4tZ3llb25nIE11biA8Z3dh bi1neWVvbmcubXVuQGludGVsLmNvbT4KPiBDYzogSm9zw6kgUm9iZXJ0byBkZSBTb3V6YSA8am9z ZS5zb3V6YUBpbnRlbC5jb20+Cj4gQ2M6IEp1aGEtUGVra2EgSGVpa2tpbGEgPGp1aGFwZWtrYS5o ZWlra2lsYUBnbWFpbC5jb20+Cj4gQ2M6IEFuc2h1bWFuIEd1cHRhIDxhbnNodW1hbi5ndXB0YUBp bnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRp LmMgICAgICB8ICAgMyArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheS5jICB8ICAgNCAtCj4gIC4uLi9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVi dWdmcy5jICB8IDExMSArKy0tCj4gIC4uLi9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlf dHlwZXMuaCAgICB8ICAzOCArKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RwLmMgICAgICAgfCAgMjMgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9wc3IuYyAgICAgIHwgNTg1ICsrKysrKysrKystLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX3Bzci5oICAgICAgfCAgMTQgKy0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyAgIHwgICA2ICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAzOCAtLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgICAgICAgfCAgNDkgKy0KPiAgMTAgZmlsZXMgY2hh bmdlZCwgNDkxIGluc2VydGlvbnMoKyksIDM4MCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMKPiBpbmRleCA2ODYzMjM2ZGYxZDAuLjRiODdm NzJjYjljMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RkaS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwo+ IEBAIC00MzIwLDcgKzQzMjAsMTAgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX3VwZGF0ZV9waXBl X2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAKPiAgCWludGVsX2RkaV9z ZXRfZHBfbXNhKGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOwo+ICAKPiArCS8vVE9ETzogbW92ZSBQ U1IgcmVsYXRlZCBmdW5jdGlvbnMgaW50byBpbnRlbF9wc3JfdXBkYXRlKCkKPiArCWludGVsX3Bz cjJfcHJvZ3JhbV90cmFuc19tYW5fdHJrX2N0bChpbnRlbF9kcCwgY3J0Y19zdGF0ZSk7Cj4gIAlp bnRlbF9wc3JfdXBkYXRlKGludGVsX2RwLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKPiArCj4g IAlpbnRlbF9kcF9zZXRfaW5mb2ZyYW1lcyhlbmNvZGVyLCB0cnVlLCBjcnRjX3N0YXRlLCBjb25u X3N0YXRlKTsKPiAgCWludGVsX2VkcF9kcnJzX3VwZGF0ZShpbnRlbF9kcCwgY3J0Y19zdGF0ZSk7 Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4g aW5kZXggNzYxYmU4ZGVhYTliLi5mMjZkOWJjZDcyMmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+IEBAIC0xNTg2OSw4ICsxNTg2OSw2IEBA IHN0YXRpYyB2b2lkIGNvbW1pdF9waXBlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRl ICpzdGF0ZSwKPiAgCj4gIAkJaWYgKG5ld19jcnRjX3N0YXRlLT51cGRhdGVfcGlwZSkKPiAgCQkJ aW50ZWxfcGlwZV9mYXN0c2V0KG9sZF9jcnRjX3N0YXRlLCBuZXdfY3J0Y19zdGF0ZSk7Cj4gLQo+ IC0JCWludGVsX3BzcjJfcHJvZ3JhbV90cmFuc19tYW5fdHJrX2N0bChuZXdfY3J0Y19zdGF0ZSk7 Cj4gIAl9Cj4gIAo+ICAJaWYgKGRldl9wcml2LT5kaXNwbGF5LmF0b21pY191cGRhdGVfd2F0ZXJt YXJrcykKPiBAQCAtMTc4MzAsOCArMTc4MjgsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9zZXR1cF9v dXRwdXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQlpbnRlbF9kdm9f aW5pdChkZXZfcHJpdik7Cj4gIAl9Cj4gIAo+IC0JaW50ZWxfcHNyX2luaXQoZGV2X3ByaXYpOwo+ IC0KPiAgCWZvcl9lYWNoX2ludGVsX2VuY29kZXIoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsK PiAgCQllbmNvZGVyLT5iYXNlLnBvc3NpYmxlX2NydGNzID0KPiAgCQkJaW50ZWxfZW5jb2Rlcl9w b3NzaWJsZV9jcnRjcyhlbmNvZGVyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMKPiBpbmRleCBjZDdlNTUxOWVlN2QuLjA0 MTA1MzE2N2Q3ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXlfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMuYwo+IEBAIC0yNDksMTggKzI0OSwxNyBAQCBzdGF0aWMg aW50IGk5MTVfcHNyX3Npbmtfc3RhdHVzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpk YXRhKQo+ICAJCSJzaW5rIGludGVybmFsIGVycm9yIiwKPiAgCX07Cj4gIAlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yID0gbS0+cHJpdmF0ZTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5kZXYpOwo+ICAJc3RydWN0IGludGVs X2RwICppbnRlbF9kcCA9Cj4gIAkJaW50ZWxfYXR0YWNoZWRfZHAodG9faW50ZWxfY29ubmVjdG9y KGNvbm5lY3RvcikpOwo+ICAJaW50IHJldDsKPiAgCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYp KSB7Cj4gLQkJc2VxX3B1dHMobSwgIlBTUiBVbnN1cHBvcnRlZFxuIik7Cj4gKwlpZiAoY29ubmVj dG9yLT5zdGF0dXMgIT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpCj4gIAkJcmV0dXJuIC1F Tk9ERVY7Cj4gLQl9Cj4gIAo+IC0JaWYgKGNvbm5lY3Rvci0+c3RhdHVzICE9IGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkKQo+ICsJaWYgKCFDQU5fUFNSKGludGVsX2RwKSkgewo+ICsJCXNlcV9w dXRzKG0sICJQU1IgVW5zdXBwb3J0ZWRcbiIpOwo+ICAJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ ICAKPiAgCXJldCA9IGRybV9kcF9kcGNkX3JlYWRiKCZpbnRlbF9kcC0+YXV4LCBEUF9QU1JfU1RB VFVTLCAmdmFsKTsKPiAgCj4gQEAgLTI4MCwxMiArMjc5LDEzIEBAIHN0YXRpYyBpbnQgaTkxNV9w c3Jfc2lua19zdGF0dXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIERF RklORV9TSE9XX0FUVFJJQlVURShpOTE1X3Bzcl9zaW5rX3N0YXR1cyk7Cj4gIAo+ICBzdGF0aWMg dm9pZAo+IC1wc3Jfc291cmNlX3N0YXR1cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiArcHNyX3NvdXJjZV9zdGF0dXMoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwgc3RydWN0IHNlcV9maWxlICptKQo+ICB7Cj4gIAl1MzIgdmFsLCBzdGF0 dXNfdmFsOwo+ICAJY29uc3QgY2hhciAqc3RhdHVzID0gInVua25vd24iOwo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gIAo+IC0J aWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gKwlpZiAoaW50ZWxfZHAtPnBzci5w c3IyX2VuYWJsZWQpIHsKPiAgCQlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxpdmVfc3RhdHVz W10gPSB7Cj4gIAkJCSJJRExFIiwKPiAgCQkJIkNBUFRVUkUiLAo+IEBAIC0zMDAsNyArMzAwLDcg QEAgcHNyX3NvdXJjZV9zdGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBz dHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4gIAkJCSJUR19PTiIKPiAgCQl9Owo+ICAJCXZhbCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgRURQX1BTUjJfU1RBVFVTKGRldl9wcml2LT5w c3IudHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1IyX1NUQVRVUyhpbnRlbF9kcC0+cHNy LnRyYW5zY29kZXIpKTsKPiAgCQlzdGF0dXNfdmFsID0gKHZhbCAmIEVEUF9QU1IyX1NUQVRVU19T VEFURV9NQVNLKSA+Pgo+ICAJCQkgICAgICBFRFBfUFNSMl9TVEFUVVNfU1RBVEVfU0hJRlQ7Cj4g IAkJaWYgKHN0YXR1c192YWwgPCBBUlJBWV9TSVpFKGxpdmVfc3RhdHVzKSkKPiBAQCAtMzE3LDcg KzMxNyw3IEBAIHBzcl9zb3VyY2Vfc3RhdHVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgc3RydWN0IHNlcV9maWxlICptKQo+ICAJCQkiU1JERU5UX09OIiwKPiAgCQl9Owo+ICAJ CXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgRURQX1BTUl9TVEFUVVMo ZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSk7Cj4gKwkJCQkgICAgRURQX1BTUl9TVEFUVVMoaW50 ZWxfZHAtPnBzci50cmFuc2NvZGVyKSk7Cj4gIAkJc3RhdHVzX3ZhbCA9ICh2YWwgJiBFRFBfUFNS X1NUQVRVU19TVEFURV9NQVNLKSA+Pgo+ICAJCQkgICAgICBFRFBfUFNSX1NUQVRVU19TVEFURV9T SElGVDsKPiAgCQlpZiAoc3RhdHVzX3ZhbCA8IEFSUkFZX1NJWkUobGl2ZV9zdGF0dXMpKQo+IEBA IC0zMjcsMjEgKzMyNywxOCBAQCBwc3Jfc291cmNlX3N0YXR1cyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgCXNlcV9wcmludGYobSwgIlNv dXJjZSBQU1Igc3RhdHVzOiAlcyBbMHglMDh4XVxuIiwgc3RhdHVzLCB2YWwpOwo+ICB9Cj4gIAo+ IC1zdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICpkYXRhKQo+ICtzdGF0aWMgaW50IGludGVsX3Bzcl9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpt LCBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Cj4gLQlzdHJ1Y3QgaTkx NV9wc3IgKnBzciA9ICZkZXZfcHJpdi0+cHNyOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwlzdHJ1Y3QgaW50ZWxfcHNyICpw c3IgPSAmaW50ZWxfZHAtPnBzcjsKPiAgCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAJY29u c3QgY2hhciAqc3RhdHVzOwo+ICAJYm9vbCBlbmFibGVkOwo+ICAJdTMyIHZhbDsKPiAgCj4gLQlp ZiAoIUhBU19QU1IoZGV2X3ByaXYpKQo+IC0JCXJldHVybiAtRU5PREVWOwo+IC0KPiAgCXNlcV9w cmludGYobSwgIlNpbmsgc3VwcG9ydDogJXMiLCB5ZXNubyhwc3ItPnNpbmtfc3VwcG9ydCkpOwo+ IC0JaWYgKHBzci0+ZHApCj4gLQkJc2VxX3ByaW50ZihtLCAiIFsweCUwMnhdIiwgcHNyLT5kcC0+ cHNyX2RwY2RbMF0pOwo+ICsJaWYgKHBzci0+c2lua19zdXBwb3J0KQo+ICsJCXNlcV9wcmludGYo bSwgIiBbMHglMDJ4XSIsIGludGVsX2RwLT5wc3JfZHBjZFswXSk7Cj4gIAlzZXFfcHV0cyhtLCAi XG4iKTsKPiAgCj4gIAlpZiAoIXBzci0+c2lua19zdXBwb3J0KQo+IEBAIC0zNjUsMTYgKzM2Miwx NiBAQCBzdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCB2 b2lkICpkYXRhKQo+ICAKPiAgCWlmIChwc3ItPnBzcjJfZW5hYmxlZCkgewo+ICAJCXZhbCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgRURQX1BTUjJfQ1RMKGRldl9wcml2LT5w c3IudHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0+cHNyLnRy YW5zY29kZXIpKTsKPiAgCQllbmFibGVkID0gdmFsICYgRURQX1BTUjJfRU5BQkxFOwo+ICAJfSBl bHNlIHsKPiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJICAgIEVEUF9Q U1JfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1JfQ1RM KGludGVsX2RwLT5wc3IudHJhbnNjb2RlcikpOwo+ICAJCWVuYWJsZWQgPSB2YWwgJiBFRFBfUFNS X0VOQUJMRTsKPiAgCX0KPiAgCXNlcV9wcmludGYobSwgIlNvdXJjZSBQU1IgY3RsOiAlcyBbMHgl MDh4XVxuIiwKPiAgCQkgICBlbmFibGVkZGlzYWJsZWQoZW5hYmxlZCksIHZhbCk7Cj4gLQlwc3Jf c291cmNlX3N0YXR1cyhkZXZfcHJpdiwgbSk7Cj4gKwlwc3Jfc291cmNlX3N0YXR1cyhpbnRlbF9k cCwgbSk7Cj4gIAlzZXFfcHJpbnRmKG0sICJCdXN5IGZyb250YnVmZmVyIGJpdHM6IDB4JTA4eFxu IiwKPiAgCQkgICBwc3ItPmJ1c3lfZnJvbnRidWZmZXJfYml0cyk7Cj4gIAo+IEBAIC0zODMsNyAr MzgwLDcgQEAgc3RhdGljIGludCBpOTE1X2VkcF9wc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqZGF0YSkKPiAgCSAqLwo+ICAJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElT X0JST0FEV0VMTChkZXZfcHJpdikpIHsKPiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LAo+IC0JCQkJICAgIEVEUF9QU1JfUEVSRl9DTlQoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSk7 Cj4gKwkJCQkgICAgRURQX1BTUl9QRVJGX0NOVChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsK PiAgCQl2YWwgJj0gRURQX1BTUl9QRVJGX0NOVF9NQVNLOwo+ICAJCXNlcV9wcmludGYobSwgIlBl cmZvcm1hbmNlIGNvdW50ZXI6ICV1XG4iLCB2YWwpOwo+ICAJfQo+IEBAIC00MDQsNyArNDAxLDcg QEAgc3RhdGljIGludCBpOTE1X2VkcF9wc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqZGF0YSkKPiAgCQkgKi8KPiAgCQlmb3IgKGZyYW1lID0gMDsgZnJhbWUgPCBQU1IyX1NVX1NU QVRVU19GUkFNRVM7IGZyYW1lICs9IDMpIHsKPiAgCQkJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwKPiAtCQkJCQkgICAgUFNSMl9TVV9TVEFUVVMoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVy LCBmcmFtZSkpOwo+ICsJCQkJCSAgICBQU1IyX1NVX1NUQVRVUyhpbnRlbF9kcC0+cHNyLnRyYW5z Y29kZXIsIGZyYW1lKSk7Cj4gIAkJCXN1X2ZyYW1lc192YWxbZnJhbWUgLyAzXSA9IHZhbDsKPiAg CQl9Cj4gIAo+IEBAIC00MzAsMjMgKzQyNyw1NyBAQCBzdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9z dGF0dXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAJcmV0dXJuIDA7Cj4gIH0K PiAgCj4gK3N0YXRpYyBpbnQgaTkxNV9lZHBfcHNyX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyOwo+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IE5VTEw7Cj4gKwo+ICsJaWYgKCFI QVNfUFNSKGRldl9wcml2KSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwkvKiBGaW5kIHRo ZSBmaXJzdCBFRFAgKi8KPiArCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNv ZGVyKSB7Cj4gKwkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgewpIb3cg YWJvdXQgaGF2aW5nIGEgbmV3IG1hY3JvIGZvcl9lYWNoX2ludGVsX3Bzcl9lZHAge30gdG8gcmVk dWNlIHRoZSBjb2RlPwpNdWx0aXBsZSB0aW1lcyB0aGlzIGhhcyBiZWVuIHVzZWQgaW4gdGhpcyBw YXRjaCB0byBsb29wIGZvciBpbnRlbF9kcC4KPiArCQkJaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxf ZHAoZW5jb2Rlcik7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIWludGVs X2RwKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCXJldHVybiBpbnRlbF9wc3Jfc3RhdHVz KG0sIGludGVsX2RwKTsKPiArfQo+ICsKPiAgc3RhdGljIGludAo+ICBpOTE1X2VkcF9wc3JfZGVi dWdfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRhdGE7Cj4gIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWlu dCByZXQ7Cj4gKwlpbnQgcmV0ID0gLUVOT0RFVjsKPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyOwo+ICAKPiAtCWlmICghQ0FOX1BTUihkZXZfcHJpdikpCj4gLQkJcmV0dXJuIC1FTk9E RVY7Cj4gKwlpZiAoIUhBU19QU1IoZGV2X3ByaXYpKQo+ICsJCXJldHVybiByZXQ7Cj4gIAo+IC0J ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJTZXR0aW5nIFBTUiBkZWJ1ZyB0byAlbGx4XG4i LCB2YWwpOwo+ICsJZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsK PiArCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIp Owo+ICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCgmZGV2X3ByaXYtPnJ1bnRp bWVfcG0pOwo+ICsJCWlmICghQ0FOX1BTUihpbnRlbF9kcCkpCj4gKwkJCWNvbnRpbnVlOwo+ICAK PiAtCXJldCA9IGludGVsX3Bzcl9kZWJ1Z19zZXQoZGV2X3ByaXYsIHZhbCk7Cj4gKwkJaWYgKGVu Y29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgewo+ICsJCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwgIlNldHRpbmcgUFNSIGRlYnVnIHRvICVsbHhcbiIsIHZhbCk7Cj4gIAo+IC0J aW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKPiAr CQkJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7 Cj4gKwo+ICsJCQkvLyBUT0RPOiBzcGxpdCB0byBlYWNoIHRyYW5zY29kZXIncyBQU1IgZGVidWcg c3RhdGUKPiArCQkJcmV0ID0gaW50ZWxfcHNyX2RlYnVnX3NldChpbnRlbF9kcCwgdmFsKTsKPiAr Cj4gKwkJCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJl Zik7Cj4gKwkJfQo+ICsJfQo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiBAQCAtNDU1LDEyICs0 ODYsMjUgQEAgc3RhdGljIGludAo+ICBpOTE1X2VkcF9wc3JfZGVidWdfZ2V0KHZvaWQgKmRhdGEs IHU2NCAqdmFsKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk YXRhOwo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Cj4gIAo+IC0JaWYgKCFDQU5f UFNSKGRldl9wcml2KSkKPiArCWlmICghSEFTX1BTUihkZXZfcHJpdikpCj4gIAkJcmV0dXJuIC1F Tk9ERVY7Cj4gIAo+IC0JKnZhbCA9IFJFQURfT05DRShkZXZfcHJpdi0+cHNyLmRlYnVnKTsKPiAt CXJldHVybiAwOwo+ICsJZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIp IHsKPiArCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29k ZXIpOwo+ICsKPiArCQlpZiAoIUNBTl9QU1IoaW50ZWxfZHApKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJLy8gVE9ETzogc3BsaXQgdG8gZWFjaCB0cmFuc2NvZGVyJ3MgUFNSIGRlYnVnIHN0YXRl Cj4gKwkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgewo+ICsJCQkqdmFs ID0gUkVBRF9PTkNFKGludGVsX2RwLT5wc3IuZGVidWcpOwo+ICsJCQlyZXR1cm4gMDsKPiArCQl9 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC1FTk9ERVY7Cj4gIH0KPiAgCj4gIERFRklORV9TSU1QTEVf QVRUUklCVVRFKGk5MTVfZWRwX3Bzcl9kZWJ1Z19mb3BzLAo+IEBAIC0xMjM0LDkgKzEyNzgsNiBA QCBzdGF0aWMgdm9pZCBkcnJzX3N0YXR1c19wZXJfY3J0YyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCj4g IAkJLyogZGlzYWJsZV9kcnJzKCkgd2lsbCBtYWtlIGRycnMtPmRwIE5VTEwgKi8KPiAgCQlpZiAo IWRycnMtPmRwKSB7Cj4gIAkJCXNlcV9wdXRzKG0sICJJZGxlbmVzcyBEUlJTOiBEaXNhYmxlZFxu Iik7Cj4gLQkJCWlmIChkZXZfcHJpdi0+cHNyLmVuYWJsZWQpCj4gLQkJCQlzZXFfcHV0cyhtLAo+ IC0JCQkJIlx0QXMgUFNSIGlzIGVuYWJsZWQsIERSUlMgaXMgbm90IGVuYWJsZWRcbiIpOwpEb24n dCB3ZSBuZWVkIHRoaXMgZGVidWdmcyBwcmludCBhbnltb3JlID8KPiAgCQkJbXV0ZXhfdW5sb2Nr KCZkcnJzLT5tdXRleCk7Cj4gIAkJCXJldHVybjsKPiAgCQl9Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKPiBpbmRleCA1YmM1YmZi YzQ1NTEuLjk4OTlmZGRmNGM5OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCj4gQEAgLTEzMzksNiArMTMzOSw0MiBAQCBz dHJ1Y3QgaW50ZWxfZHBfY29tcGxpYW5jZSB7Cj4gIAl1OCB0ZXN0X2xhbmVfY291bnQ7Cj4gIH07 Cj4gIAo+ICtzdHJ1Y3QgaW50ZWxfcHNyIHsKPiArCS8qIE11dGV4IGZvciBQU1Igc3RhdGUgb2Yg dGhlIHRyYW5zY29kZXIgKi8KPiArCXN0cnVjdCBtdXRleCBsb2NrOwo+ICsKPiArI2RlZmluZSBJ OTE1X1BTUl9ERUJVR19NT0RFX01BU0sJMHgwZgo+ICsjZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0RF RkFVTFQJCTB4MDAKPiArI2RlZmluZSBJOTE1X1BTUl9ERUJVR19ESVNBQkxFCQkweDAxCj4gKyNk ZWZpbmUgSTkxNV9QU1JfREVCVUdfRU5BQkxFCQkweDAyCj4gKyNkZWZpbmUgSTkxNV9QU1JfREVC VUdfRk9SQ0VfUFNSMQkweDAzCj4gKyNkZWZpbmUgSTkxNV9QU1JfREVCVUdfSVJRCQkweDEwCj4g Kwo+ICsJdTMyIGRlYnVnOwo+ICsJYm9vbCBzaW5rX3N1cHBvcnQ7Cj4gKwlib29sIGVuYWJsZWQ7 Cj4gKwllbnVtIHBpcGUgcGlwZTsKPiArCWVudW0gdHJhbnNjb2RlciB0cmFuc2NvZGVyOwo+ICsJ Ym9vbCBhY3RpdmU7Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKPiArCXVuc2lnbmVkIGlu dCBidXN5X2Zyb250YnVmZmVyX2JpdHM7Cj4gKwlib29sIHNpbmtfcHNyMl9zdXBwb3J0Owo+ICsJ Ym9vbCBsaW5rX3N0YW5kYnk7Cj4gKwlib29sIGNvbG9yaW1ldHJ5X3N1cHBvcnQ7Cj4gKwlib29s IHBzcjJfZW5hYmxlZDsKPiArCWJvb2wgcHNyMl9zZWxfZmV0Y2hfZW5hYmxlZDsKPiArCXU4IHNp bmtfc3luY19sYXRlbmN5Owo+ICsJa3RpbWVfdCBsYXN0X2VudHJ5X2F0dGVtcHQ7Cj4gKwlrdGlt ZV90IGxhc3RfZXhpdDsKPiArCWJvb2wgc2lua19ub3RfcmVsaWFibGU7Cj4gKwlib29sIGlycV9h dXhfZXJyb3I7Cj4gKwl1MTYgc3VfeF9ncmFudWxhcml0eTsKPiArCWJvb2wgZGMzY29fZW5hYmxl ZDsKPiArCXUzMiBkYzNjb19leGl0X2RlbGF5Owo+ICsJc3RydWN0IGRlbGF5ZWRfd29yayBkYzNj b193b3JrOwo+ICsJc3RydWN0IGRybV9kcF92c2Nfc2RwIHZzYzsKPiArfTsKPiArCj4gIHN0cnVj dCBpbnRlbF9kcCB7Cj4gIAlpOTE1X3JlZ190IG91dHB1dF9yZWc7Cj4gIAl1MzIgRFA7Cj4gQEAg LTE0NjAsNiArMTQ5Niw4IEBAIHN0cnVjdCBpbnRlbF9kcCB7Cj4gIAo+ICAJYm9vbCBob2JsX2Zh aWxlZDsKPiAgCWJvb2wgaG9ibF9hY3RpdmU7Cj4gKwo+ICsJc3RydWN0IGludGVsX3BzciBwc3I7 Cj4gIH07Cj4gIAo+ICBlbnVtIGxzcGNvbl92ZW5kb3Igewo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2RwLmMKPiBpbmRleCBiMmJjMGM4YzM5YzcuLjU3MzBjYWQ3YjZhYyAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKPiBAQCAtMjcwMiwxMiAr MjcwMiwxMCBAQCB2b2lkIGludGVsX2RwX2NvbXB1dGVfcHNyX3ZzY19zZHAoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwKPiAgCQkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg KmNvbm5fc3RhdGUsCj4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfdnNjX3NkcCAqdnNjKQo+ICB7Cj4g LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2Rw KTsKPiAtCj4gIAl2c2MtPnNkcF90eXBlID0gRFBfU0RQX1ZTQzsKPiAgCj4gLQlpZiAoZGV2X3By aXYtPnBzci5wc3IyX2VuYWJsZWQpIHsKPiAtCQlpZiAoZGV2X3ByaXYtPnBzci5jb2xvcmltZXRy eV9zdXBwb3J0ICYmCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQpIHsKPiArCQlp ZiAoaW50ZWxfZHAtPnBzci5jb2xvcmltZXRyeV9zdXBwb3J0ICYmCj4gIAkJICAgIGludGVsX2Rw X25lZWRzX3ZzY19zZHAoY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSkpIHsKPiAgCQkJLyogW1BTUjIs ICtDb2xvcmltZXRyeV0gKi8KPiAgCQkJaW50ZWxfZHBfY29tcHV0ZV92c2NfY29sb3JpbWV0cnko Y3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSwKPiBAQCAtMzg0NCw3ICszODQyLDcgQEAgYm9vbCBpbnRl bF9kcF9pbml0aWFsX2Zhc3RzZXRfY2hlY2soc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIs Cj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAJfQo+ICAKPiAtCWlmIChDQU5fUFNSKGk5MTUpICYmIGlu dGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpIHsKPiArCWlmIChDQU5fUFNSKGludGVsX2RwKSAmJiBp bnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKSB7Cj4gIAkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwg IkZvcmNpbmcgZnVsbCBtb2Rlc2V0IHRvIGNvbXB1dGUgUFNSIHN0YXRlXG4iKTsKPiAgCQljcnRj X3N0YXRlLT51YXBpLm1vZGVfY2hhbmdlZCA9IHRydWU7Cj4gIAkJcmV0dXJuIGZhbHNlOwo+IEBA IC04MDcwLDYgKzgwNjgsMTcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZHBfbW9kZXNldF9yZXRyeV93 b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgCWRybV9rbXNfaGVscGVyX2hvdHBs dWdfZXZlbnQoY29ubmVjdG9yLT5kZXYpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBpbnRlbF9k cF91cGRhdGVfcGlwZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKPiArCQkJCSBz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiArCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9 IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKPiArCj4gKwlpbnRlbF9wYW5lbF91cGRhdGVfYmFj a2xpZ2h0KHN0YXRlLCBlbmNvZGVyLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKPiArCWludGVs X3BzcjJfcHJvZ3JhbV90cmFuc19tYW5fdHJrX2N0bChpbnRlbF9kcCwgY3J0Y19zdGF0ZSk7Cj4g K30KPiArCj4gIGJvb2wKPiAgaW50ZWxfZHBfaW5pdF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqZGlnX3BvcnQsCj4gIAkJCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVs X2Nvbm5lY3RvcikKPiBAQCAtODE4NCw2ICs4MTkzLDggQEAgaW50ZWxfZHBfaW5pdF9jb25uZWN0 b3Ioc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQsCj4gIAkJCSAgICAgICAodGVt cCAmIH4weGYpIHwgMHhkKTsKPiAgCX0KPiAgCj4gKwlpbnRlbF9wc3JfaW5pdChpbnRlbF9kcCk7 Cj4gKwo+ICAJcmV0dXJuIHRydWU7Cj4gIAo+ICBmYWlsOgo+IEBAIC04MjI1LDcgKzgyMzYsNyBA QCBib29sIGludGVsX2RwX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICAJaW50ZWxfZW5jb2Rlci0+Z2V0X2NvbmZpZyA9IGludGVsX2RwX2dldF9jb25maWc7Cj4gIAlp bnRlbF9lbmNvZGVyLT5zeW5jX3N0YXRlID0gaW50ZWxfZHBfc3luY19zdGF0ZTsKPiAgCWludGVs X2VuY29kZXItPmluaXRpYWxfZmFzdHNldF9jaGVjayA9IGludGVsX2RwX2luaXRpYWxfZmFzdHNl dF9jaGVjazsKPiAtCWludGVsX2VuY29kZXItPnVwZGF0ZV9waXBlID0gaW50ZWxfcGFuZWxfdXBk YXRlX2JhY2tsaWdodDsKPiArCWludGVsX2VuY29kZXItPnVwZGF0ZV9waXBlID0gaW50ZWxfZHBf dXBkYXRlX3BpcGU7Cj4gIAlpbnRlbF9lbmNvZGVyLT5zdXNwZW5kID0gaW50ZWxfZHBfZW5jb2Rl cl9zdXNwZW5kOwo+ICAJaW50ZWxfZW5jb2Rlci0+c2h1dGRvd24gPSBpbnRlbF9kcF9lbmNvZGVy X3NodXRkb3duOwo+ICAJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jCj4gaW5kZXggZDlhMzk1YzQ4NmQzLi5iZTJi MTIzMDUwYzkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9wc3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMK PiBAQCAtNzksMTEgKzc5LDEzIEBACj4gICAqIHVzZSBwYWdlIGZsaXBzLgo+ICAgKi8KPiAgCj4g LXN0YXRpYyBib29sIHBzcl9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKPiArc3RhdGljIGJvb2wgcHNyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gIHsKPiAtCXN3aXRjaCAoaTkxNS0+cHNyLmRlYnVnICYgSTkxNV9QU1JfREVC VUdfTU9ERV9NQVNLKSB7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk cF90b19pOTE1KGludGVsX2RwKTsKPiArCj4gKwlzd2l0Y2ggKGludGVsX2RwLT5wc3IuZGVidWcg JiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0spIHsKPiAgCWNhc2UgSTkxNV9QU1JfREVCVUdfREVG QVVMVDoKPiAtCQlyZXR1cm4gaTkxNS0+cGFyYW1zLmVuYWJsZV9wc3I7Cj4gKwkJcmV0dXJuIGRl dl9wcml2LT5wYXJhbXMuZW5hYmxlX3BzcjsKPiAgCWNhc2UgSTkxNV9QU1JfREVCVUdfRElTQUJM RToKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAlkZWZhdWx0Ogo+IEBAIC05MSw5ICs5Myw5IEBAIHN0 YXRpYyBib29sIHBzcl9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIGJvb2wgcHNyMl9nbG9iYWxfZW5hYmxlZChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyBib29sIHBzcjJfZ2xvYmFs X2VuYWJsZWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+IC0Jc3dpdGNoIChkZXZf cHJpdi0+cHNyLmRlYnVnICYgSTkxNV9QU1JfREVCVUdfTU9ERV9NQVNLKSB7Cj4gKwlzd2l0Y2gg KGludGVsX2RwLT5wc3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0spIHsKPiAgCWNh c2UgSTkxNV9QU1JfREVCVUdfRElTQUJMRToKPiAgCWNhc2UgSTkxNV9QU1JfREVCVUdfRk9SQ0Vf UFNSMToKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gQEAgLTEwMiwxMSArMTA0LDEyIEBAIHN0YXRpYyBi b29sIHBzcjJfZ2xvYmFsX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBwc3JfaXJxX2NvbnRyb2woc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgdm9pZCBwc3JfaXJxX2NvbnRyb2wo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ICAJZW51bSB0cmFuc2NvZGVyIHRyYW5z X3NoaWZ0Owo+ICAJdTMyIG1hc2ssIHZhbDsKPiAgCWk5MTVfcmVnX3QgaW1yX3JlZzsKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ ICAKPiAgCS8qCj4gIAkgKiBnZW4xMisgaGFzIHJlZ2lzdGVycyByZWxhdGl2ZSB0byB0cmFuc2Nv ZGVyIGFuZCBvbmUgcGVyIHRyYW5zY29kZXIKPiBAQCAtMTE1LDE0ICsxMTgsMTQgQEAgc3RhdGlj IHZvaWQgcHNyX2lycV9jb250cm9sKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiAgCSAqLwo+ICAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpIHsKPiAgCQl0cmFuc19z aGlmdCA9IDA7Cj4gLQkJaW1yX3JlZyA9IFRSQU5TX1BTUl9JTVIoZGV2X3ByaXYtPnBzci50cmFu c2NvZGVyKTsKPiArCQlpbXJfcmVnID0gVFJBTlNfUFNSX0lNUihpbnRlbF9kcC0+cHNyLnRyYW5z Y29kZXIpOwo+ICAJfSBlbHNlIHsKPiAtCQl0cmFuc19zaGlmdCA9IGRldl9wcml2LT5wc3IudHJh bnNjb2RlcjsKPiArCQl0cmFuc19zaGlmdCA9IGludGVsX2RwLT5wc3IudHJhbnNjb2RlcjsKPiAg CQlpbXJfcmVnID0gRURQX1BTUl9JTVI7Cj4gIAl9Cj4gIAo+ICAJbWFzayA9IEVEUF9QU1JfRVJS T1IodHJhbnNfc2hpZnQpOwo+IC0JaWYgKGRldl9wcml2LT5wc3IuZGVidWcgJiBJOTE1X1BTUl9E RUJVR19JUlEpCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5kZWJ1ZyAmIEk5MTVfUFNSX0RFQlVHX0lS USkKPiAgCQltYXNrIHw9IEVEUF9QU1JfUE9TVF9FWElUKHRyYW5zX3NoaWZ0KSB8Cj4gIAkJCUVE UF9QU1JfUFJFX0VOVFJZKHRyYW5zX3NoaWZ0KTsKPiAgCj4gQEAgLTE3MSwzOCArMTc0LDM3IEBA IHN0YXRpYyB2b2lkIHBzcl9ldmVudF9wcmludChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKPiAgCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiXHRQU1IgZGlzYWJsZWRcbiIpOwo+ICB9 Cj4gIAo+IC12b2lkIGludGVsX3Bzcl9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsIHUzMiBwc3JfaWlyKQo+ICt2b2lkIGludGVsX3Bzcl9pcnFfaGFuZGxlcihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCB1MzIgcHNyX2lpcikKPiAgewo+IC0JZW51bSB0cmFu c2NvZGVyIGNwdV90cmFuc2NvZGVyID0gZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyOwo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4g KwllbnVtIHRyYW5zY29kZXIgY3B1X3RyYW5zY29kZXIgPSBpbnRlbF9kcC0+cHNyLnRyYW5zY29k ZXI7Cj4gIAllbnVtIHRyYW5zY29kZXIgdHJhbnNfc2hpZnQ7Cj4gIAlpOTE1X3JlZ190IGltcl9y ZWc7Cj4gIAlrdGltZV90IHRpbWVfbnMgPSAga3RpbWVfZ2V0KCk7Cj4gIAo+ICAJaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTIpIHsKPiAgCQl0cmFuc19zaGlmdCA9IDA7Cj4gLQkJaW1yX3Jl ZyA9IFRSQU5TX1BTUl9JTVIoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKTsKPiArCQlpbXJfcmVn ID0gVFJBTlNfUFNSX0lNUihpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpOwo+ICAJfSBlbHNlIHsK PiAtCQl0cmFuc19zaGlmdCA9IGRldl9wcml2LT5wc3IudHJhbnNjb2RlcjsKPiArCQl0cmFuc19z aGlmdCA9IGludGVsX2RwLT5wc3IudHJhbnNjb2RlcjsKPiAgCQlpbXJfcmVnID0gRURQX1BTUl9J TVI7Cj4gIAl9Cj4gIAo+ICAJaWYgKHBzcl9paXIgJiBFRFBfUFNSX1BSRV9FTlRSWSh0cmFuc19z aGlmdCkpIHsKPiAtCQlkZXZfcHJpdi0+cHNyLmxhc3RfZW50cnlfYXR0ZW1wdCA9IHRpbWVfbnM7 Cj4gLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJCSAgICAiW3RyYW5zY29kZXIg JXNdIFBTUiBlbnRyeSBhdHRlbXB0IGluIDIgdmJsYW5rc1xuIiwKPiAtCQkJICAgIHRyYW5zY29k ZXJfbmFtZShjcHVfdHJhbnNjb2RlcikpOwo+ICsJCWludGVsX2RwLT5wc3IubGFzdF9lbnRyeV9h dHRlbXB0ID0gdGltZV9uczsKPiArCQlEUk1fREVCVUdfS01TKCJbdHJhbnNjb2RlciAlc10gUFNS IGVudHJ5IGF0dGVtcHQgaW4gMiB2YmxhbmtzXG4iLAoJCVBsZWFzZSB1c2UgZHJtX3tkYmcsd2Fy bn0gYXQgZXZlcnkgcGxhY2UgdW4gdGhpcyBwYXRjaC4KPiArCQkJICAgICAgdHJhbnNjb2Rlcl9u YW1lKGNwdV90cmFuc2NvZGVyKSk7Cj4gIAl9Cj4gIAo+ICAJaWYgKHBzcl9paXIgJiBFRFBfUFNS X1BPU1RfRVhJVCh0cmFuc19zaGlmdCkpIHsKPiAtCQlkZXZfcHJpdi0+cHNyLmxhc3RfZXhpdCA9 IHRpbWVfbnM7Cj4gLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJCSAgICAiW3Ry YW5zY29kZXIgJXNdIFBTUiBleGl0IGNvbXBsZXRlZFxuIiwKPiAtCQkJICAgIHRyYW5zY29kZXJf bmFtZShjcHVfdHJhbnNjb2RlcikpOwo+ICsJCWludGVsX2RwLT5wc3IubGFzdF9leGl0ID0gdGlt ZV9uczsKPiArCQlEUk1fREVCVUdfS01TKCJbdHJhbnNjb2RlciAlc10gUFNSIGV4aXQgY29tcGxl dGVkXG4iLAo+ICsJCQkgICAgICB0cmFuc2NvZGVyX25hbWUoY3B1X3RyYW5zY29kZXIpKTsKPiAg Cj4gIAkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkgewo+ICAJCQl1MzIgdmFsID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwKPiAgCQkJCQkJUFNSX0VWRU5UKGNwdV90cmFuc2NvZGVyKSk7 Cj4gLQkJCWJvb2wgcHNyMl9lbmFibGVkID0gZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQ7Cj4g KwkJCWJvb2wgcHNyMl9lbmFibGVkID0gaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQ7Cj4gIAo+ ICAJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgUFNSX0VWRU5UKGNwdV90cmFuc2NvZGVyKSwK PiAgCQkJCSAgICAgICB2YWwpOwo+IEBAIC0yMTMsMTAgKzIxNSwxMCBAQCB2b2lkIGludGVsX3Bz cl9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBwc3Jf aWlyKQo+ICAJaWYgKHBzcl9paXIgJiBFRFBfUFNSX0VSUk9SKHRyYW5zX3NoaWZ0KSkgewo+ICAJ CXUzMiB2YWw7Cj4gIAo+IC0JCWRybV93YXJuKCZkZXZfcHJpdi0+ZHJtLCAiW3RyYW5zY29kZXIg JXNdIFBTUiBhdXggZXJyb3JcbiIsCj4gKwkJRFJNX1dBUk4oIlt0cmFuc2NvZGVyICVzXSBQU1Ig YXV4IGVycm9yXG4iLAo+ICAJCQkgdHJhbnNjb2Rlcl9uYW1lKGNwdV90cmFuc2NvZGVyKSk7Cj4g IAo+IC0JCWRldl9wcml2LT5wc3IuaXJxX2F1eF9lcnJvciA9IHRydWU7Cj4gKwkJaW50ZWxfZHAt PnBzci5pcnFfYXV4X2Vycm9yID0gdHJ1ZTsKPiAgCj4gIAkJLyoKPiAgCQkgKiBJZiB0aGlzIGlu dGVycnVwdGlvbiBpcyBub3QgbWFza2VkIGl0IHdpbGwga2VlcAo+IEBAIC0yMzAsNyArMjMyLDcg QEAgdm9pZCBpbnRlbF9wc3JfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCB1MzIgcHNyX2lpcikKPiAgCQl2YWwgfD0gRURQX1BTUl9FUlJPUih0cmFuc19zaGlm dCk7Cj4gIAkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGltcl9yZWcsIHZhbCk7Cj4gIAo+IC0J CXNjaGVkdWxlX3dvcmsoJmRldl9wcml2LT5wc3Iud29yayk7Cj4gKwkJc2NoZWR1bGVfd29yaygm aW50ZWxfZHAtPnBzci53b3JrKTsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtMjkxLDEyICsyOTMsNiBA QCB2b2lkIGludGVsX3Bzcl9pbml0X2RwY2Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAg CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gIAkJdG9faTkxNShkcF90b19k aWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5kZXYpOwo+ICAKPiAtCWlmIChkZXZfcHJpdi0+ cHNyLmRwKSB7Cj4gLQkJZHJtX3dhcm4oJmRldl9wcml2LT5kcm0sCj4gLQkJCSAiTW9yZSB0aGFu IG9uZSBlRFAgcGFuZWwgZm91bmQsIFBTUiBzdXBwb3J0IHNob3VsZCBiZSBleHRlbmRlZFxuIik7 Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAgCWRybV9kcF9kcGNkX3JlYWQoJmludGVsX2RwLT5h dXgsIERQX1BTUl9TVVBQT1JULCBpbnRlbF9kcC0+cHNyX2RwY2QsCj4gIAkJCSBzaXplb2YoaW50 ZWxfZHAtPnBzcl9kcGNkKSk7Cj4gIAo+IEBAIC0zMTcsMTIgKzMxMywxMCBAQCB2b2lkIGludGVs X3Bzcl9pbml0X2RwY2Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCQlyZXR1cm47Cj4g IAl9Cj4gIAo+IC0JZGV2X3ByaXYtPnBzci5zaW5rX3N1cHBvcnQgPSB0cnVlOwo+IC0JZGV2X3By aXYtPnBzci5zaW5rX3N5bmNfbGF0ZW5jeSA9Cj4gKwlpbnRlbF9kcC0+cHNyLnNpbmtfc3VwcG9y dCA9IHRydWU7Cj4gKwlpbnRlbF9kcC0+cHNyLnNpbmtfc3luY19sYXRlbmN5ID0KPiAgCQlpbnRl bF9kcF9nZXRfc2lua19zeW5jX2xhdGVuY3koaW50ZWxfZHApOwo+ICAKPiAtCWRldl9wcml2LT5w c3IuZHAgPSBpbnRlbF9kcDsKPiAtCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5ICYm Cj4gIAkgICAgKGludGVsX2RwLT5wc3JfZHBjZFswXSA9PSBEUF9QU1IyX1dJVEhfWV9DT09SRF9J U19TVVBQT1JURUQpKSB7Cj4gIAkJYm9vbCB5X3JlcSA9IGludGVsX2RwLT5wc3JfZHBjZFsxXSAm Cj4gQEAgLTM0MCwxNCArMzM0LDE0IEBAIHZvaWQgaW50ZWxfcHNyX2luaXRfZHBjZChzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+ICAJCSAqIFktY29vcmRpbmF0ZSByZXF1aXJlbWVudCBwYW5l bHMgd2Ugd291bGQgbmVlZCB0byBlbmFibGUKPiAgCQkgKiBHVEMgZmlyc3QuCj4gIAkJICovCj4g LQkJZGV2X3ByaXYtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCA9IHlfcmVxICYmIGFscG07Cj4gKwkJ aW50ZWxfZHAtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCA9IHlfcmVxICYmIGFscG07Cj4gIAkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJQU1IyICVzc3VwcG9ydGVkXG4iLAo+IC0JCQkgICAg ZGV2X3ByaXYtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCA/ICIiIDogIm5vdCAiKTsKPiArCQkJICAg IGludGVsX2RwLT5wc3Iuc2lua19wc3IyX3N1cHBvcnQgPyAiIiA6ICJub3QgIik7Cj4gIAo+IC0J CWlmIChkZXZfcHJpdi0+cHNyLnNpbmtfcHNyMl9zdXBwb3J0KSB7Cj4gLQkJCWRldl9wcml2LT5w c3IuY29sb3JpbWV0cnlfc3VwcG9ydCA9Cj4gKwkJaWYgKGludGVsX2RwLT5wc3Iuc2lua19wc3Iy X3N1cHBvcnQpIHsKPiArCQkJaW50ZWxfZHAtPnBzci5jb2xvcmltZXRyeV9zdXBwb3J0ID0KPiAg CQkJCWludGVsX2RwX2dldF9jb2xvcmltZXRyeV9zdGF0dXMoaW50ZWxfZHApOwo+IC0JCQlkZXZf cHJpdi0+cHNyLnN1X3hfZ3JhbnVsYXJpdHkgPQo+ICsJCQlpbnRlbF9kcC0+cHNyLnN1X3hfZ3Jh bnVsYXJpdHkgPQo+ICAJCQkJaW50ZWxfZHBfZ2V0X3N1X3hfZ3JhbnVsYXJ0aXkoaW50ZWxfZHAp Owo+ICAJCX0KPiAgCX0KPiBAQCAtMzczLDcgKzM2Nyw3IEBAIHN0YXRpYyB2b2lkIGhzd19wc3Jf c2V0dXBfYXV4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAlCVUlMRF9CVUdfT04oc2l6 ZW9mKGF1eF9tc2cpID4gMjApOwo+ICAJZm9yIChpID0gMDsgaSA8IHNpemVvZihhdXhfbXNnKTsg aSArPSA0KQo+ICAJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LAo+IC0JCQkgICAgICAgRURQX1BT Ul9BVVhfREFUQShkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIsIGkgPj4gMiksCj4gKwkJCSAgICAg ICBFRFBfUFNSX0FVWF9EQVRBKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciwgaSA+PiAyKSwKPiAg CQkJICAgICAgIGludGVsX2RwX3BhY2tfYXV4KCZhdXhfbXNnW2ldLCBzaXplb2YoYXV4X21zZykg LSBpKSk7Cj4gIAo+ICAJYXV4X2Nsb2NrX2RpdmlkZXIgPSBpbnRlbF9kcC0+Z2V0X2F1eF9jbG9j a19kaXZpZGVyKGludGVsX2RwLCAwKTsKPiBAQCAtMzg0LDcgKzM3OCw3IEBAIHN0YXRpYyB2b2lk IGhzd19wc3Jfc2V0dXBfYXV4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAo+ICAJLyog U2VsZWN0IG9ubHkgdmFsaWQgYml0cyBmb3IgU1JEX0FVWF9DVEwgKi8KPiAgCWF1eF9jdGwgJj0g cHNyX2F1eF9tYXNrOwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1JfQVVYX0NU TChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpLAo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IEVEUF9QU1JfQVVYX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLAo+ICAJCSAgICAgICBh dXhfY3RsKTsKPiAgfQo+ICAKPiBAQCAtMzk0LDE0ICszODgsMTQgQEAgc3RhdGljIHZvaWQgaW50 ZWxfcHNyX2VuYWJsZV9zaW5rKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAl1OCBkcGNk X3ZhbCA9IERQX1BTUl9FTkFCTEU7Cj4gIAo+ICAJLyogRW5hYmxlIEFMUE0gYXQgc2luayBmb3Ig cHNyMiAqLwo+IC0JaWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gKwlpZiAoaW50 ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQpIHsKPiAgCQlkcm1fZHBfZHBjZF93cml0ZWIoJmludGVs X2RwLT5hdXgsIERQX1JFQ0VJVkVSX0FMUE1fQ09ORklHLAo+ICAJCQkJICAgRFBfQUxQTV9FTkFC TEUgfAo+ICAJCQkJICAgRFBfQUxQTV9MT0NLX0VSUk9SX0lSUV9IUERfRU5BQkxFKTsKPiAgCj4g IAkJZHBjZF92YWwgfD0gRFBfUFNSX0VOQUJMRV9QU1IyIHwgRFBfUFNSX0lSUV9IUERfV0lUSF9D UkNfRVJST1JTOwo+ICAJfSBlbHNlIHsKPiAtCQlpZiAoZGV2X3ByaXYtPnBzci5saW5rX3N0YW5k YnkpCj4gKwkJaWYgKGludGVsX2RwLT5wc3IubGlua19zdGFuZGJ5KQo+ICAJCQlkcGNkX3ZhbCB8 PSBEUF9QU1JfTUFJTl9MSU5LX0FDVElWRTsKPiAgCj4gIAkJaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gOCkKPiBAQCAtNDY0LDcgKzQ1OCw3IEBAIHN0YXRpYyB1OCBwc3JfY29tcHV0ZV9pZGxl X2ZyYW1lcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJICogb2ZmLWJ5LW9uZSBpc3N1 ZSB0aGF0IEhXIGhhcyBpbiBzb21lIGNhc2VzLgo+ICAJICovCj4gIAlpZGxlX2ZyYW1lcyA9IG1h eCg2LCBkZXZfcHJpdi0+dmJ0LnBzci5pZGxlX2ZyYW1lcyk7Cj4gLQlpZGxlX2ZyYW1lcyA9IG1h eChpZGxlX2ZyYW1lcywgZGV2X3ByaXYtPnBzci5zaW5rX3N5bmNfbGF0ZW5jeSArIDEpOwo+ICsJ aWRsZV9mcmFtZXMgPSBtYXgoaWRsZV9mcmFtZXMsIGludGVsX2RwLT5wc3Iuc2lua19zeW5jX2xh dGVuY3kgKyAxKTsKPiAgCj4gIAlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGlkbGVf ZnJhbWVzID4gMHhmKSkKPiAgCQlpZGxlX2ZyYW1lcyA9IDB4ZjsKPiBAQCAtNDg0LDcgKzQ3OCw3 IEBAIHN0YXRpYyB2b2lkIGhzd19hY3RpdmF0ZV9wc3IxKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCj4gIAlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikpCj4gIAkJdmFsIHw9IEVEUF9QU1JfTUlO X0xJTktfRU5UUllfVElNRV84X0xJTkVTOwo+ICAKPiAtCWlmIChkZXZfcHJpdi0+cHNyLmxpbmtf c3RhbmRieSkKPiArCWlmIChpbnRlbF9kcC0+cHNyLmxpbmtfc3RhbmRieSkKPiAgCQl2YWwgfD0g RURQX1BTUl9MSU5LX1NUQU5EQlk7Cj4gIAo+ICAJdmFsIHw9IGludGVsX3BzcjFfZ2V0X3RwX3Rp bWUoaW50ZWxfZHApOwo+IEBAIC00OTIsOSArNDg2LDkgQEAgc3RhdGljIHZvaWQgaHN3X2FjdGl2 YXRlX3BzcjEoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDgpCj4gIAkJdmFsIHw9IEVEUF9QU1JfQ1JDX0VOQUJMRTsKPiAgCj4gLQl2YWwg fD0gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIEVEUF9QU1JfQ1RMKGRldl9wcml2LT5wc3IudHJh bnNjb2RlcikpICYKPiArCXZhbCB8PSAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRURQX1BTUl9D VEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSkgJgo+ICAJCUVEUF9QU1JfUkVTVE9SRV9QU1Jf QUNUSVZFX0NUWF9NQVNLKTsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0NU TChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpLCB2YWwpOwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIEVEUF9QU1JfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIHZhbCk7Cj4gIH0K PiAgCj4gIHN0YXRpYyB1MzIgaW50ZWxfcHNyMl9nZXRfdHBfdGltZShzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKQo+IEBAIC01MjksNyArNTIzLDcgQEAgc3RhdGljIHZvaWQgaHN3X2FjdGl2YXRl X3BzcjIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQo+ICAJCXZhbCB8PSBFRFBfWV9D T09SRElOQVRFX0VOQUJMRTsKPiAgCj4gLQl2YWwgfD0gRURQX1BTUjJfRlJBTUVfQkVGT1JFX1NV KGRldl9wcml2LT5wc3Iuc2lua19zeW5jX2xhdGVuY3kgKyAxKTsKPiArCXZhbCB8PSBFRFBfUFNS Ml9GUkFNRV9CRUZPUkVfU1UoaW50ZWxfZHAtPnBzci5zaW5rX3N5bmNfbGF0ZW5jeSArIDEpOwo+ ICAJdmFsIHw9IGludGVsX3BzcjJfZ2V0X3RwX3RpbWUoaW50ZWxfZHApOwo+ICAKPiAgCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKSB7Cj4gQEAgLTU0OCw3ICs1NDIsNyBAQCBzdGF0aWMg dm9pZCBoc3dfYWN0aXZhdGVfcHNyMihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJCXZh bCB8PSBFRFBfUFNSMl9GQVNUX1dBS0UoNyk7Cj4gIAl9Cj4gIAo+IC0JaWYgKGRldl9wcml2LT5w c3IucHNyMl9zZWxfZmV0Y2hfZW5hYmxlZCkgewo+ICsJaWYgKGludGVsX2RwLT5wc3IucHNyMl9z ZWxfZmV0Y2hfZW5hYmxlZCkgewo+ICAJCS8qIFdBIDE0MDgzMzA4NDcgKi8KPiAgCQlpZiAoSVNf VEdMX0RJU1BfUkVWSUQoZGV2X3ByaXYsIFRHTF9SRVZJRF9BMCwgVEdMX1JFVklEX0EwKSB8fAo+ ICAJCSAgICBJU19SS0xfUkVWSUQoZGV2X3ByaXYsIFJLTF9SRVZJRF9BMCwgUktMX1JFVklEX0Ew KSkKPiBAQCAtNTU3LDIwICs1NTEsMjAgQEAgc3RhdGljIHZvaWQgaHN3X2FjdGl2YXRlX3BzcjIo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCQkJCSAgICAgRElTX1JBTV9CWVBBU1NfUFNS Ml9NQU5fVFJBQ0spOwo+ICAKPiAgCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwKPiAtCQkJICAg ICAgIFBTUjJfTUFOX1RSS19DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwKPiArCQkJICAg ICAgIFBTUjJfTUFOX1RSS19DVEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwKPiAgCQkJICAg ICAgIFBTUjJfTUFOX1RSS19DVExfRU5BQkxFKTsKPiAgCX0gZWxzZSBpZiAoSEFTX1BTUjJfU0VM X0ZFVENIKGRldl9wcml2KSkgewo+ICAJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LAo+IC0JCQkg ICAgICAgUFNSMl9NQU5fVFJLX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpLCAwKTsKPiAr CQkJICAgICAgIFBTUjJfTUFOX1RSS19DVEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwgMCk7 Cj4gIAl9Cj4gIAo+ICAJLyoKPiAgCSAqIFBTUjIgSFcgaXMgaW5jb3JyZWN0bHkgdXNpbmcgRURQ X1BTUl9UUDFfVFAzX1NFTCBhbmQgQlNwZWMgaXMKPiAgCSAqIHJlY29tbWVuZGluZyBrZWVwIHRo aXMgYml0IHVuc2V0IHdoaWxlIFBTUjIgaXMgZW5hYmxlZC4KPiAgCSAqLwo+IC0JaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIEVEUF9QU1JfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciksIDAp Owo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1JfQ1RMKGludGVsX2RwLT5wc3Iu dHJhbnNjb2RlciksIDApOwo+ICAKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNS Ml9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwgdmFsKTsKPiArCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBFRFBfUFNSMl9DVEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwgdmFsKTsK PiAgfQo+ICAKPiAgc3RhdGljIGJvb2wKPiBAQCAtNTkzLDU1ICs1ODcsNTggQEAgc3RhdGljIHUz MiBpbnRlbF9nZXRfZnJhbWVfdGltZV91cyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3N0YXRlKQo+ICAJCQkgICAgZHJtX21vZGVfdnJlZnJlc2goJmNzdGF0ZS0+aHcuYWRqdXN0ZWRf bW9kZSkpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBwc3IyX3Byb2dyYW1faWRsZV9mcmFtZXMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICtzdGF0aWMgdm9pZCBwc3IyX3By b2dyYW1faWRsZV9mcmFtZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCQkJCSAgICAg dTMyIGlkbGVfZnJhbWVzKQo+ICB7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAgCXUzMiB2YWw7Cj4gIAo+ICAJaWRsZV9mcmFt ZXMgPDw9ICBFRFBfUFNSMl9JRExFX0ZSQU1FX1NISUZUOwo+IC0JdmFsID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpOwo+ICsJ dmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGludGVsX2RwLT5wc3Iu dHJhbnNjb2RlcikpOwo+ICAJdmFsICY9IH5FRFBfUFNSMl9JRExFX0ZSQU1FX01BU0s7Cj4gIAl2 YWwgfD0gaWRsZV9mcmFtZXM7Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQX1BTUjJf Q1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciksIHZhbCk7Cj4gKwlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIHZhbCk7Cj4g IH0KPiAgCj4gLXN0YXRpYyB2b2lkIHRnbF9wc3IyX2VuYWJsZV9kYzNjbyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIHRnbF9wc3IyX2VuYWJsZV9kYzNj byhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gLQlwc3IyX3Byb2dyYW1faWRsZV9m cmFtZXMoZGV2X3ByaXYsIDApOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwo+ICsJcHNyMl9wcm9ncmFtX2lkbGVfZnJhbWVz KGludGVsX2RwLCAwKTsKPiAgCWludGVsX2Rpc3BsYXlfcG93ZXJfc2V0X3RhcmdldF9kY19zdGF0 ZShkZXZfcHJpdiwgRENfU1RBVEVfRU5fREMzQ08pOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCB0 Z2xfcHNyMl9kaXNhYmxlX2RjM2NvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiArc3RhdGljIHZvaWQgdGdsX3BzcjJfZGlzYWJsZV9kYzNjbyhzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQo+ICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZGV2X3ByaXYtPnBz ci5kcDsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUo aW50ZWxfZHApOwo+ICAKPiAgCWludGVsX2Rpc3BsYXlfcG93ZXJfc2V0X3RhcmdldF9kY19zdGF0 ZShkZXZfcHJpdiwgRENfU1RBVEVfRU5fVVBUT19EQzYpOwo+IC0JcHNyMl9wcm9ncmFtX2lkbGVf ZnJhbWVzKGRldl9wcml2LCBwc3JfY29tcHV0ZV9pZGxlX2ZyYW1lcyhpbnRlbF9kcCkpOwo+ICsJ cHNyMl9wcm9ncmFtX2lkbGVfZnJhbWVzKGludGVsX2RwLCBwc3JfY29tcHV0ZV9pZGxlX2ZyYW1l cyhpbnRlbF9kcCkpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCB0Z2xfZGMzY29fZGlzYWJsZV93 b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0KPiAtCQljb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpkZXZfcHJp diksIHBzci5kYzNjb193b3JrLndvcmspOwo+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9 Cj4gKwkJY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqaW50ZWxfZHApLCBwc3IuZGMzY29fd29y ay53b3JrKTsKPiAgCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJbXV0 ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAgCS8qIElmIGRlbGF5ZWQgd29yayBpcyBw ZW5kaW5nLCBpdCBpcyBub3QgaWRsZSAqLwo+IC0JaWYgKGRlbGF5ZWRfd29ya19wZW5kaW5nKCZk ZXZfcHJpdi0+cHNyLmRjM2NvX3dvcmspKQo+ICsJaWYgKGRlbGF5ZWRfd29ya19wZW5kaW5nKCZp bnRlbF9kcC0+cHNyLmRjM2NvX3dvcmspKQo+ICAJCWdvdG8gdW5sb2NrOwo+ICAKPiAtCXRnbF9w c3IyX2Rpc2FibGVfZGMzY28oZGV2X3ByaXYpOwo+ICsJdGdsX3BzcjJfZGlzYWJsZV9kYzNjbyhp bnRlbF9kcCk7Cj4gIHVubG9jazoKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2Nr KTsKPiArCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAgfQo+ICAKPiAtc3Rh dGljIHZvaWQgdGdsX2Rpc2FsbG93X2RjM2NvX29uX3BzcjJfZXhpdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIHRnbF9kaXNhbGxvd19kYzNjb19vbl9w c3IyX2V4aXQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+IC0JaWYgKCFkZXZfcHJp di0+cHNyLmRjM2NvX2VuYWJsZWQpCj4gKwlpZiAoIWludGVsX2RwLT5wc3IuZGMzY29fZW5hYmxl ZCkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JY2FuY2VsX2RlbGF5ZWRfd29yaygmZGV2X3ByaXYtPnBz ci5kYzNjb193b3JrKTsKPiArCWNhbmNlbF9kZWxheWVkX3dvcmsoJmludGVsX2RwLT5wc3IuZGMz Y29fd29yayk7Cj4gIAkvKiBCZWZvcmUgUFNSMiBleGl0IGRpc2FsbG93IGRjM2NvKi8KPiAtCXRn bF9wc3IyX2Rpc2FibGVfZGMzY28oZGV2X3ByaXYpOwo+ICsJdGdsX3BzcjJfZGlzYWJsZV9kYzNj byhpbnRlbF9kcCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkCj4gQEAgLTcxNCw3ICs3MTEsNyBA QCBzdGF0aWMgYm9vbCBpbnRlbF9wc3IyX2NvbmZpZ192YWxpZChzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwLAo+ICAJaW50IGNydGNfdmRpc3BsYXkgPSBjcnRjX3N0YXRlLT5ody5hZGp1c3RlZF9t b2RlLmNydGNfdmRpc3BsYXk7Cj4gIAlpbnQgcHNyX21heF9oID0gMCwgcHNyX21heF92ID0gMCwg bWF4X2JwcCA9IDA7Cj4gIAo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLnNpbmtfcHNyMl9zdXBwb3J0 KQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLnNpbmtfcHNyMl9zdXBwb3J0KQo+ICAJCXJldHVybiBm YWxzZTsKPiAgCj4gIAlpZiAoIXRyYW5zY29kZXJfaGFzX3BzcjIoZGV2X3ByaXYsIGNydGNfc3Rh dGUtPmNwdV90cmFuc2NvZGVyKSkgewo+IEBAIC03MjQsNyArNzIxLDcgQEAgc3RhdGljIGJvb2wg aW50ZWxfcHNyMl9jb25maWdfdmFsaWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCQly ZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gIAo+IC0JaWYgKCFwc3IyX2dsb2JhbF9lbmFibGVkKGRldl9w cml2KSkgewo+ICsJaWYgKCFwc3IyX2dsb2JhbF9lbmFibGVkKGludGVsX2RwKSkgewo+ICAJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiUFNSMiBkaXNhYmxlZCBieSBmbGFnXG4iKTsKPiAg CQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gQEAgLTc3MywxMCArNzcwLDEwIEBAIHN0YXRpYyBib29s IGludGVsX3BzcjJfY29uZmlnX3ZhbGlkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAkg KiBvbmx5IG5lZWQgdG8gdmFsaWRhdGUgdGhlIFNVIGJsb2NrIHdpZHRoIGlzIGEgbXVsdGlwbGUg b2YKPiAgCSAqIHggZ3JhbnVsYXJpdHkuCj4gIAkgKi8KPiAtCWlmIChjcnRjX2hkaXNwbGF5ICUg ZGV2X3ByaXYtPnBzci5zdV94X2dyYW51bGFyaXR5KSB7Cj4gKwlpZiAoY3J0Y19oZGlzcGxheSAl IGludGVsX2RwLT5wc3Iuc3VfeF9ncmFudWxhcml0eSkgewo+ICAJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAo+ICAJCQkgICAgIlBTUjIgbm90IGVuYWJsZWQsIGhkaXNwbGF5KCVkKSBub3Qg bXVsdGlwbGUgb2YgJWRcbiIsCj4gLQkJCSAgICBjcnRjX2hkaXNwbGF5LCBkZXZfcHJpdi0+cHNy LnN1X3hfZ3JhbnVsYXJpdHkpOwo+ICsJCQkgICAgY3J0Y19oZGlzcGxheSwgaW50ZWxfZHAtPnBz ci5zdV94X2dyYW51bGFyaXR5KTsKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gIAo+IEBAIC04 MTEsMTMgKzgwOCwxMCBAQCB2b2lkIGludGVsX3Bzcl9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLAo+ICAJCSZjcnRjX3N0YXRlLT5ody5hZGp1c3RlZF9tb2RlOwo+ICAJ aW50IHBzcl9zZXR1cF90aW1lOwpXaGF0IGlzIHRoZSBwbGFuIHRvIGNoZWNrIHdoZXRoZXIgYSB0 cmFuc2NvZGVyIHN1cHBvcnRzIHBzciB3aXRoIGEgaW50ZWxfZHAuClRoZW9yZXRpY2FsbHkgdGhl cmUgY2FuIGJlIG11bGlwbGUgY29tYmluYXRpb24gb2YgY3J0YyBhdHRhY2hlZCB0byBhIGNvbm5l Y3RvciwgIApJZiBpdCBpcyB3aXAsIHBsZXNlIGFkZCBUT0RPIGNvbW1lbnQgaW4gY29tbWl0IGxv Zy4KPiAgCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlp ZiAoaW50ZWxfZHAgIT0gZGV2X3ByaXYtPnBzci5kcCkKPiArCWlmICghQ0FOX1BTUihpbnRlbF9k cCkpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlmICghcHNyX2dsb2JhbF9lbmFibGVkKGRldl9wcml2 KSkgewo+ICsJaWYgKCFwc3JfZ2xvYmFsX2VuYWJsZWQoaW50ZWxfZHApKSB7Cj4gIAkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sICJQU1IgZGlzYWJsZWQgYnkgZmxhZ1xuIik7Cj4gIAkJcmV0 dXJuOwo+ICAJfQo+IEBAIC04MzQsNyArODI4LDcgQEAgdm9pZCBpbnRlbF9wc3JfY29tcHV0ZV9j b25maWcoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCQlyZXR1cm47Cj4gIAl9Cj4gIAo+ IC0JaWYgKGRldl9wcml2LT5wc3Iuc2lua19ub3RfcmVsaWFibGUpIHsKPiArCWlmIChpbnRlbF9k cC0+cHNyLnNpbmtfbm90X3JlbGlhYmxlKSB7Cj4gIAkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCj4gIAkJCSAgICAiUFNSIHNpbmsgaW1wbGVtZW50YXRpb24gaXMgbm90IHJlbGlhYmxlXG4i KTsKPiAgCQlyZXR1cm47Cj4gQEAgLTg3MCwyMyArODY0LDI0IEBAIHZvaWQgaW50ZWxfcHNyX2Nv bXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIHN0YXRpYyB2b2lkIGlu dGVsX3Bzcl9hY3RpdmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAr CWVudW0gdHJhbnNjb2RlciB0cmFuc2NvZGVyID0gaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyOwo+ ICAKPiAtCWlmICh0cmFuc2NvZGVyX2hhc19wc3IyKGRldl9wcml2LCBkZXZfcHJpdi0+cHNyLnRy YW5zY29kZXIpKQo+ICsJaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIoZGV2X3ByaXYsIHRyYW5zY29k ZXIpKQo+ICAJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkgICAgaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpICYg RURQX1BTUjJfRU5BQkxFKTsKPiArCQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIEVEUF9Q U1IyX0NUTCh0cmFuc2NvZGVyKSkgJiBFRFBfUFNSMl9FTkFCTEUpOwo+ICAKPiAgCWRybV9XQVJO X09OKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBf UFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKSAmIEVEUF9QU1JfRU5BQkxFKTsKPiAt CWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBkZXZfcHJpdi0+cHNyLmFjdGl2ZSk7Cj4gLQls b2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJCSAgICBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTCh0cmFuc2NvZGVyKSkgJiBFRFBfUFNSX0VOQUJM RSk7Cj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPnBzci5hY3RpdmUp Owo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAgCj4gIAkv KiBwc3IxIGFuZCBwc3IyIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuKi8KPiAtCWlmIChkZXZfcHJp di0+cHNyLnBzcjJfZW5hYmxlZCkKPiArCWlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkK PiAgCQloc3dfYWN0aXZhdGVfcHNyMihpbnRlbF9kcCk7Cj4gIAllbHNlCj4gIAkJaHN3X2FjdGl2 YXRlX3BzcjEoaW50ZWxfZHApOwo+ICAKPiAtCWRldl9wcml2LT5wc3IuYWN0aXZlID0gdHJ1ZTsK PiArCWludGVsX2RwLT5wc3IuYWN0aXZlID0gdHJ1ZTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQg aW50ZWxfcHNyX2VuYWJsZV9zb3VyY2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiBAQCAt OTAyLDcgKzg5Nyw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVfc291cmNlKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNf QlJPQURXRUxMKGRldl9wcml2KSkKPiAgCQloc3dfcHNyX3NldHVwX2F1eChpbnRlbF9kcCk7Cj4g IAo+IC0JaWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkICYmIChJU19HRU4oZGV2X3ByaXYs IDkpICYmCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQgJiYgKElTX0dFTihkZXZf cHJpdiwgOSkgJiYKPiAgCQkJCQkgICAhSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpKSB7Cj4gIAkJ aTkxNV9yZWdfdCByZWcgPSBDSElDS0VOX1RSQU5TKGNwdV90cmFuc2NvZGVyKTsKPiAgCQl1MzIg Y2hpY2tlbiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gQEAgLTkyNiwxMCArOTIx LDEwIEBAIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVfc291cmNlKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ICAJCW1hc2sg fD0gRURQX1BTUl9ERUJVR19NQVNLX0RJU1BfUkVHX1dSSVRFOwo+ICAKPiAtCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCBFRFBfUFNSX0RFQlVHKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciksCj4g KwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQX1BTUl9ERUJVRyhpbnRlbF9kcC0+cHNyLnRy YW5zY29kZXIpLAo+ICAJCSAgICAgICBtYXNrKTsKPiAgCj4gLQlwc3JfaXJxX2NvbnRyb2woZGV2 X3ByaXYpOwo+ICsJcHNyX2lycV9jb250cm9sKGludGVsX2RwKTsKPiAgCj4gIAlpZiAoY3J0Y19z dGF0ZS0+ZGMzY29fZXhpdGxpbmUpIHsKPiAgCQl1MzIgdmFsOwo+IEBAIC05NDcsMzAgKzk0Miwz MCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZW5hYmxlX3NvdXJjZShzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwLAo+ICAKPiAgCWlmIChIQVNfUFNSX0hXX1RSQUNLSU5HKGRldl9wcml2KSAmJiBI QVNfUFNSMl9TRUxfRkVUQ0goZGV2X3ByaXYpKQo+ICAJCWludGVsX2RlX3JtdyhkZXZfcHJpdiwg Q0hJQ0tFTl9QQVIxXzEsIElHTk9SRV9QU1IyX0hXX1RSQUNLSU5HLAo+IC0JCQkgICAgIGRldl9w cml2LT5wc3IucHNyMl9zZWxfZmV0Y2hfZW5hYmxlZCA/Cj4gKwkJCSAgICAgaW50ZWxfZHAtPnBz ci5wc3IyX3NlbF9mZXRjaF9lbmFibGVkID8KPiAgCQkJICAgICBJR05PUkVfUFNSMl9IV19UUkFD S0lORyA6IDApOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBpbnRlbF9wc3JfZW5hYmxlX2xvY2tl ZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gK3N0YXRpYyB2b2lkIGludGVs X3Bzcl9lbmFibGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAkJCQkgICAg Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAkJCQkgICAgY29u c3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gIHsKPiAtCXN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBkZXZfcHJpdi0+cHNyLmRwOwo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gIAlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsK PiAgCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0gJmRpZ19wb3J0LT5iYXNlOwo+ICAJ dTMyIHZhbDsKPiAgCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZGV2X3ByaXYtPnBz ci5lbmFibGVkKTsKPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+cHNy LmVuYWJsZWQpOwo+ICAKPiAtCWRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkID0gY3J0Y19zdGF0 ZS0+aGFzX3BzcjI7Cj4gLQlkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyA9IDA7 Cj4gLQlkZXZfcHJpdi0+cHNyLnBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGku Y3J0YyktPnBpcGU7Cj4gLQlkZXZfcHJpdi0+cHNyLmRjM2NvX2VuYWJsZWQgPSAhIWNydGNfc3Rh dGUtPmRjM2NvX2V4aXRsaW5lOwo+IC0JZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyID0gY3J0Y19z dGF0ZS0+Y3B1X3RyYW5zY29kZXI7Cj4gKwlpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCA9IGNy dGNfc3RhdGUtPmhhc19wc3IyOwo+ICsJaW50ZWxfZHAtPnBzci5idXN5X2Zyb250YnVmZmVyX2Jp dHMgPSAwOwo+ICsJaW50ZWxfZHAtPnBzci5waXBlID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRl LT51YXBpLmNydGMpLT5waXBlOwo+ICsJaW50ZWxfZHAtPnBzci5kYzNjb19lbmFibGVkID0gISFj cnRjX3N0YXRlLT5kYzNjb19leGl0bGluZTsKPiArCWludGVsX2RwLT5wc3IudHJhbnNjb2RlciA9 IGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyOwo+ICAJLyogREM1L0RDNiByZXF1aXJlcyBhdCBs ZWFzdCA2IGlkbGUgZnJhbWVzICovCj4gIAl2YWwgPSB1c2Vjc190b19qaWZmaWVzKGludGVsX2dl dF9mcmFtZV90aW1lX3VzKGNydGNfc3RhdGUpICogNik7Cj4gLQlkZXZfcHJpdi0+cHNyLmRjM2Nv X2V4aXRfZGVsYXkgPSB2YWw7Cj4gLQlkZXZfcHJpdi0+cHNyLnBzcjJfc2VsX2ZldGNoX2VuYWJs ZWQgPSBjcnRjX3N0YXRlLT5lbmFibGVfcHNyMl9zZWxfZmV0Y2g7Cj4gKwlpbnRlbF9kcC0+cHNy LmRjM2NvX2V4aXRfZGVsYXkgPSB2YWw7Cj4gKwlpbnRlbF9kcC0+cHNyLnBzcjJfc2VsX2ZldGNo X2VuYWJsZWQgPSBjcnRjX3N0YXRlLT5lbmFibGVfcHNyMl9zZWxfZmV0Y2g7Cj4gIAo+ICAJLyoK PiAgCSAqIElmIGEgUFNSIGVycm9yIGhhcHBlbmVkIGFuZCB0aGUgZHJpdmVyIGlzIHJlbG9hZGVk LCB0aGUgRURQX1BTUl9JSVIKPiBAQCAtOTgyLDI3ICs5NzcsMjcgQEAgc3RhdGljIHZvaWQgaW50 ZWxfcHNyX2VuYWJsZV9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICAJICovCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikgewo+ICAJCXZhbCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgVFJBTlNfUFNSX0lJUihkZXZfcHJpdi0+ cHNyLnRyYW5zY29kZXIpKTsKPiArCQkJCSAgICBUUkFOU19QU1JfSUlSKGludGVsX2RwLT5wc3Iu dHJhbnNjb2RlcikpOwo+ICAJCXZhbCAmPSBFRFBfUFNSX0VSUk9SKDApOwo+ICAJfSBlbHNlIHsK PiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0lJUik7Cj4gLQkJdmFs ICY9IEVEUF9QU1JfRVJST1IoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKTsKPiArCQl2YWwgJj0g RURQX1BTUl9FUlJPUihpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpOwo+ICAJfQo+ICAJaWYgKHZh bCkgewo+IC0JCWRldl9wcml2LT5wc3Iuc2lua19ub3RfcmVsaWFibGUgPSB0cnVlOwo+ICsJCWlu dGVsX2RwLT5wc3Iuc2lua19ub3RfcmVsaWFibGUgPSB0cnVlOwo+ICAJCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAo+ICAJCQkgICAgIlBTUiBpbnRlcnJ1cHRpb24gZXJyb3Igc2V0LCBub3Qg ZW5hYmxpbmcgUFNSXG4iKTsKPiAgCQlyZXR1cm47Cj4gIAl9Cj4gIAo+ICAJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sICJFbmFibGluZyBQU1Ilc1xuIiwKPiAtCQkgICAgZGV2X3ByaXYtPnBz ci5wc3IyX2VuYWJsZWQgPyAiMiIgOiAiMSIpOwo+ICsJCSAgICBpbnRlbF9kcC0+cHNyLnBzcjJf ZW5hYmxlZCA/ICIyIiA6ICIxIik7Cj4gIAlpbnRlbF9kcF9jb21wdXRlX3Bzcl92c2Nfc2RwKGlu dGVsX2RwLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlLAo+IC0JCQkJICAgICAmZGV2X3ByaXYtPnBz ci52c2MpOwo+IC0JaW50ZWxfd3JpdGVfZHBfdnNjX3NkcChlbmNvZGVyLCBjcnRjX3N0YXRlLCAm ZGV2X3ByaXYtPnBzci52c2MpOwo+ICsJCQkJICAgICAmaW50ZWxfZHAtPnBzci52c2MpOwo+ICsJ aW50ZWxfd3JpdGVfZHBfdnNjX3NkcChlbmNvZGVyLCBjcnRjX3N0YXRlLCAmaW50ZWxfZHAtPnBz ci52c2MpOwo+ICAJaW50ZWxfcHNyX2VuYWJsZV9zaW5rKGludGVsX2RwKTsKPiAgCWludGVsX3Bz cl9lbmFibGVfc291cmNlKGludGVsX2RwLCBjcnRjX3N0YXRlKTsKPiAtCWRldl9wcml2LT5wc3Iu ZW5hYmxlZCA9IHRydWU7Cj4gKwlpbnRlbF9kcC0+cHNyLmVuYWJsZWQgPSB0cnVlOwo+ICAKPiAg CWludGVsX3Bzcl9hY3RpdmF0ZShpbnRlbF9kcCk7Cj4gIH0KPiBAQCAtMTAyMSw3ICsxMDE2LDcg QEAgdm9pZCBpbnRlbF9wc3JfZW5hYmxlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIHsK PiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxf ZHApOwo+ICAKPiAtCWlmICghQ0FOX1BTUihkZXZfcHJpdikgfHwgZGV2X3ByaXYtPnBzci5kcCAh PSBpbnRlbF9kcCkKPiArCWlmICghQ0FOX1BTUihpbnRlbF9kcCkpCj4gIAkJcmV0dXJuOwo+ICAK PiAgCWlmICghY3J0Y19zdGF0ZS0+aGFzX3BzcikKPiBAQCAtMTAyOSw0NiArMTAyNCw0NyBAQCB2 b2lkIGludGVsX3Bzcl9lbmFibGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCj4gIAlk cm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZGV2X3ByaXYtPmRycnMuZHApOwo+ICAKPiAtCW11 dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gLQlpbnRlbF9wc3JfZW5hYmxlX2xvY2tl ZChkZXZfcHJpdiwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4gLQltdXRleF91bmxvY2soJmRl dl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ ICsJaW50ZWxfcHNyX2VuYWJsZV9sb2NrZWQoaW50ZWxfZHAsIGNydGNfc3RhdGUsIGNvbm5fc3Rh dGUpOwo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICB9Cj4gIAo+IC1z dGF0aWMgdm9pZCBpbnRlbF9wc3JfZXhpdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gK3N0YXRpYyB2b2lkIGludGVsX3Bzcl9leGl0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCj4gIHsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOwo+ICAJdTMyIHZhbDsKPiAgCj4gLQlpZiAoIWRldl9wcml2LT5wc3IuYWN0 aXZlKSB7Cj4gLQkJaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIoZGV2X3ByaXYsIGRldl9wcml2LT5w c3IudHJhbnNjb2RlcikpIHsKPiArCWlmICghaW50ZWxfZHAtPnBzci5hY3RpdmUpIHsKPiArCQlp ZiAodHJhbnNjb2Rlcl9oYXNfcHNyMihkZXZfcHJpdiwgaW50ZWxfZHAtPnBzci50cmFuc2NvZGVy KSkgewo+ICAJCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJCSAgICBFRFBf UFNSMl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSk7Cj4gKwkJCQkJICAgIEVEUF9QU1Iy X0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsKPiAgCQkJZHJtX1dBUk5fT04oJmRldl9w cml2LT5kcm0sIHZhbCAmIEVEUF9QU1IyX0VOQUJMRSk7Cj4gIAkJfQo+ICAKPiAgCQl2YWwgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJICAgIEVEUF9QU1JfQ1RMKGRldl9wcml2LT5w c3IudHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1JfQ1RMKGludGVsX2RwLT5wc3IudHJh bnNjb2RlcikpOwo+ICAJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCB2YWwgJiBFRFBfUFNS X0VOQUJMRSk7Cj4gIAo+ICAJCXJldHVybjsKPiAgCX0KPiAgCj4gLQlpZiAoZGV2X3ByaXYtPnBz ci5wc3IyX2VuYWJsZWQpIHsKPiAtCQl0Z2xfZGlzYWxsb3dfZGMzY29fb25fcHNyMl9leGl0KGRl dl9wcml2KTsKPiArCWlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkgewo+ICsJCXRnbF9k aXNhbGxvd19kYzNjb19vbl9wc3IyX2V4aXQoaW50ZWxfZHApOwo+ICAJCXZhbCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgRURQX1BTUjJfQ1RMKGRldl9wcml2LT5wc3IudHJh bnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29k ZXIpKTsKPiAgCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgISh2YWwgJiBFRFBfUFNSMl9F TkFCTEUpKTsKPiAgCQl2YWwgJj0gfkVEUF9QU1IyX0VOQUJMRTsKPiAgCQlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwKPiAtCQkJICAgICAgIEVEUF9QU1IyX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5z Y29kZXIpLCB2YWwpOwo+ICsJCQkgICAgICAgRURQX1BTUjJfQ1RMKGludGVsX2RwLT5wc3IudHJh bnNjb2RlciksIHZhbCk7Cj4gIAl9IGVsc2Ugewo+ICAJCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsCj4gLQkJCQkgICAgRURQX1BTUl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSk7 Cj4gKwkJCQkgICAgRURQX1BTUl9DVEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSk7Cj4gIAkJ ZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sICEodmFsICYgRURQX1BTUl9FTkFCTEUpKTsKPiAg CQl2YWwgJj0gfkVEUF9QU1JfRU5BQkxFOwo+ICAJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LAo+ IC0JCQkgICAgICAgRURQX1BTUl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwgdmFsKTsK PiArCQkJICAgICAgIEVEUF9QU1JfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIHZhbCk7 Cj4gIAl9Cj4gLQlkZXZfcHJpdi0+cHNyLmFjdGl2ZSA9IGZhbHNlOwo+ICsJaW50ZWxfZHAtPnBz ci5hY3RpdmUgPSBmYWxzZTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2Fi bGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gQEAgLTEwNzcsMjEgKzEwNzMs MjEgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApCj4gIAlpOTE1X3JlZ190IHBzcl9zdGF0dXM7Cj4gIAl1MzIgcHNyX3N0YXR1 c19tYXNrOwo+ICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wc3IubG9jayk7 Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICAKPiAtCWlm ICghZGV2X3ByaXYtPnBzci5lbmFibGVkKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLmVuYWJsZWQp Cj4gIAkJcmV0dXJuOwo+ICAKPiAgCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRGlzYWJs aW5nIFBTUiVzXG4iLAo+IC0JCSAgICBkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCA/ICIyIiA6 ICIxIik7Cj4gKwkJICAgIGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkID8gIjIiIDogIjEiKTsK PiAgCj4gLQlpbnRlbF9wc3JfZXhpdChkZXZfcHJpdik7Cj4gKwlpbnRlbF9wc3JfZXhpdChpbnRl bF9kcCk7Cj4gIAo+IC0JaWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gLQkJcHNy X3N0YXR1cyA9IEVEUF9QU1IyX1NUQVRVUyhkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpOwo+ICsJ aWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gKwkJcHNyX3N0YXR1cyA9IEVEUF9Q U1IyX1NUQVRVUyhpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpOwo+ICAJCXBzcl9zdGF0dXNfbWFz ayA9IEVEUF9QU1IyX1NUQVRVU19TVEFURV9NQVNLOwo+ICAJfSBlbHNlIHsKPiAtCQlwc3Jfc3Rh dHVzID0gRURQX1BTUl9TVEFUVVMoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKTsKPiArCQlwc3Jf c3RhdHVzID0gRURQX1BTUl9TVEFUVVMoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKTsKPiAgCQlw c3Jfc3RhdHVzX21hc2sgPSBFRFBfUFNSX1NUQVRVU19TVEFURV9NQVNLOwo+ICAJfQo+ICAKPiBA QCAtMTEwMSw3ICsxMDk3LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2Vk KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwg IlRpbWVkIG91dCB3YWl0aW5nIFBTUiBpZGxlIHN0YXRlXG4iKTsKPiAgCj4gIAkvKiBXQSAxNDA4 MzMwODQ3ICovCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVkICYm Cj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVkICYmCj4gIAkgICAg KElTX1RHTF9ESVNQX1JFVklEKGRldl9wcml2LCBUR0xfUkVWSURfQTAsIFRHTF9SRVZJRF9BMCkg fHwKPiAgCSAgICAgSVNfUktMX1JFVklEKGRldl9wcml2LCBSS0xfUkVWSURfQTAsIFJLTF9SRVZJ RF9BMCkpKQo+ICAJCWludGVsX2RlX3JtdyhkZXZfcHJpdiwgQ0hJQ0tFTl9QQVIxXzEsCj4gQEAg LTExMTAsMTAgKzExMDYsMTAgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2Vk KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAkvKiBEaXNhYmxlIFBTUiBvbiBTaW5rICov Cj4gIAlkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2RwLT5hdXgsIERQX1BTUl9FTl9DRkcsIDAp Owo+ICAKPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkKPiArCWlmIChpbnRlbF9k cC0+cHNyLnBzcjJfZW5hYmxlZCkKPiAgCQlkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2RwLT5h dXgsIERQX1JFQ0VJVkVSX0FMUE1fQ09ORklHLCAwKTsKPiAgCj4gLQlkZXZfcHJpdi0+cHNyLmVu YWJsZWQgPSBmYWxzZTsKPiArCWludGVsX2RwLT5wc3IuZW5hYmxlZCA9IGZhbHNlOwo+ICB9Cj4g IAo+ICAvKioKPiBAQCAtMTEzMSwyMCArMTEyNywyMiBAQCB2b2lkIGludGVsX3Bzcl9kaXNhYmxl KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAoIW9sZF9jcnRjX3N0YXRlLT5oYXNf cHNyKQo+ICAJCXJldHVybjsKPiAgCj4gLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0s ICFDQU5fUFNSKGRldl9wcml2KSkpCj4gKwlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0s ICFDQU5fUFNSKGludGVsX2RwKSkpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCW11dGV4X2xvY2soJmRl dl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ ICAKPiAgCWludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChpbnRlbF9kcCk7Cj4gIAo+IC0JbXV0ZXhf dW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+IC0JY2FuY2VsX3dvcmtfc3luYygmZGV2X3By aXYtPnBzci53b3JrKTsKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPnBz ci5kYzNjb193b3JrKTsKPiArCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAr CWNhbmNlbF93b3JrX3N5bmMoJmludGVsX2RwLT5wc3Iud29yayk7Cj4gKwljYW5jZWxfZGVsYXll ZF93b3JrX3N5bmMoJmludGVsX2RwLT5wc3IuZGMzY29fd29yayk7Cj4gIH0KPiAgCj4gLXN0YXRp YyB2b2lkIHBzcl9mb3JjZV9od190cmFja2luZ19leGl0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiArc3RhdGljIHZvaWQgcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwo+ICAJaWYgKElTX1RJR0VSTEFL RShkZXZfcHJpdikpCj4gIAkJLyoKPiAgCQkgKiBXcml0ZXMgdG8gQ1VSU1VSRkxJVkUgaW4gVEdM IGFyZSBjYXVzaW5nIElPTU1VIGVycm9ycyBhbmQKPiBAQCAtMTE1OCw3ICsxMTU2LDcgQEAgc3Rh dGljIHZvaWQgcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ICAJCSAqIFNvIHVzaW5nIHRoaXMgd29ya2Fyb3VuZCB1bnRpbCB0aGlz IGlzc3VlIGlzIHJvb3QgY2F1c2VkCj4gIAkJICogYW5kIGEgYmV0dGVyIGZpeCBpcyBmb3VuZC4K PiAgCQkgKi8KPiAtCQlpbnRlbF9wc3JfZXhpdChkZXZfcHJpdik7Cj4gKwkJaW50ZWxfcHNyX2V4 aXQoaW50ZWxfZHApOwo+ICAJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQo+ICAJ CS8qCj4gIAkJICogRGlzcGxheSBXQSAjMDg4NDogc2tsKwo+IEBAIC0xMTY5LDEzICsxMTY3LDEz IEBAIHN0YXRpYyB2b2lkIHBzcl9mb3JjZV9od190cmFja2luZ19leGl0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQkgKiBidXQgaXQgbWFrZXMgbW9yZSBzZW5zZSB3cml0 ZSB0byB0aGUgY3VycmVudCBhY3RpdmUKPiAgCQkgKiBwaXBlLgo+ICAJCSAqLwo+IC0JCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBDVVJTVVJGTElWRShkZXZfcHJpdi0+cHNyLnBpcGUpLCAwKTsK PiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ1VSU1VSRkxJVkUoaW50ZWxfZHAtPnBzci5w aXBlKSwgMCk7Cj4gIAllbHNlCj4gIAkJLyoKPiAgCQkgKiBBIHdyaXRlIHRvIENVUlNVUkZMSVZF IGRvIG5vdCBjYXVzZSBIVyB0cmFja2luZyB0byBleGl0IFBTUgo+ICAJCSAqIG9uIG9sZGVyIGdl bnMgc28gZG9pbmcgdGhlIG1hbnVhbCBleGl0IGluc3RlYWQuCj4gIAkJICovCj4gLQkJaW50ZWxf cHNyX2V4aXQoZGV2X3ByaXYpOwo+ICsJCWludGVsX3Bzcl9leGl0KGludGVsX2RwKTsKPiAgfQo+ ICAKPiAgdm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmUsCj4gQEAgLTEyMTUsMTEgKzEyMTMsMTEgQEAgdm9pZCBpbnRlbF9wc3Iy X3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gIAlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU0VMX0ZFVENIX1NJWkUocGlwZSwgcGxh bmUtPmlkKSwgdmFsKTsKPiAgfQo+ICAKPiAtdm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fdHJhbnNf bWFuX3Rya19jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4g K3ZvaWQgaW50ZWxfcHNyMl9wcm9ncmFtX3RyYW5zX21hbl90cmtfY3RsKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCj4gKwkJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKPiAgewo+IC0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRj KGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiAtCXN0cnVjdCBpOTE1X3BzciAqcHNy ID0gJmRldl9wcml2LT5wc3I7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCXN0cnVjdCBpbnRlbF9wc3IgKnBzciA9ICZpbnRl bF9kcC0+cHNyOwo+ICAKPiAgCWlmICghSEFTX1BTUjJfU0VMX0ZFVENIKGRldl9wcml2KSB8fAo+ ICAJICAgICFjcnRjX3N0YXRlLT5lbmFibGVfcHNyMl9zZWxfZmV0Y2gpCj4gQEAgLTEzMzYsMTMg KzEzMzQsMTMgQEAgdm9pZCBpbnRlbF9wc3JfdXBkYXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsCj4gIAkJICAgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3Rh dGUpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsK PiArCXN0cnVjdCBpbnRlbF9wc3IgKnBzciA9ICZpbnRlbF9kcC0+cHNyOwo+ICAJYm9vbCBlbmFi bGUsIHBzcjJfZW5hYmxlOwo+ICAKPiAtCWlmICghQ0FOX1BTUihkZXZfcHJpdikgfHwgUkVBRF9P TkNFKHBzci0+ZHApICE9IGludGVsX2RwKQo+ICsJaWYgKCFDQU5fUFNSKGludGVsX2RwKSkKPiAg CQlyZXR1cm47Cj4gIAo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiArCW11 dGV4X2xvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gIAo+ICAJZW5hYmxlID0gY3J0Y19zdGF0 ZS0+aGFzX3BzcjsKPiAgCXBzcjJfZW5hYmxlID0gY3J0Y19zdGF0ZS0+aGFzX3BzcjI7Cj4gQEAg LTEzNTAsMTUgKzEzNDgsMTUgQEAgdm9pZCBpbnRlbF9wc3JfdXBkYXRlKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCj4gIAlpZiAoZW5hYmxlID09IHBzci0+ZW5hYmxlZCAmJiBwc3IyX2VuYWJs ZSA9PSBwc3ItPnBzcjJfZW5hYmxlZCkgewo+ICAJCS8qIEZvcmNlIGEgUFNSIGV4aXQgd2hlbiBl bmFibGluZyBDUkMgdG8gYXZvaWQgQ1JDIHRpbWVvdXRzICovCj4gIAkJaWYgKGNydGNfc3RhdGUt PmNyY19lbmFibGVkICYmIHBzci0+ZW5hYmxlZCkKPiAtCQkJcHNyX2ZvcmNlX2h3X3RyYWNraW5n X2V4aXQoZGV2X3ByaXYpOwo+ICsJCQlwc3JfZm9yY2VfaHdfdHJhY2tpbmdfZXhpdChpbnRlbF9k cCk7Cj4gIAkJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDkgJiYgcHNyLT5lbmFibGVk KSB7Cj4gIAkJCS8qCj4gIAkJCSAqIEFjdGl2YXRlIFBTUiBhZ2FpbiBhZnRlciBhIGZvcmNlIGV4 aXQgd2hlbiBlbmFibGluZwo+ICAJCQkgKiBDUkMgaW4gb2xkZXIgZ2Vucwo+ICAJCQkgKi8KPiAt CQkJaWYgKCFkZXZfcHJpdi0+cHNyLmFjdGl2ZSAmJgo+IC0JCQkgICAgIWRldl9wcml2LT5wc3Iu YnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQo+IC0JCQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPnBz ci53b3JrKTsKPiArCQkJaWYgKCFpbnRlbF9kcC0+cHNyLmFjdGl2ZSAmJgo+ICsJCQkgICAgIWlu dGVsX2RwLT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQo+ICsJCQkJc2NoZWR1bGVfd29yaygm aW50ZWxfZHAtPnBzci53b3JrKTsKPiAgCQl9Cj4gIAo+ICAJCWdvdG8gdW5sb2NrOwo+IEBAIC0x MzY4LDM0ICsxMzY2LDIzIEBAIHZvaWQgaW50ZWxfcHNyX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwLAo+ICAJCWludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChpbnRlbF9kcCk7Cj4gIAo+ ICAJaWYgKGVuYWJsZSkKPiAtCQlpbnRlbF9wc3JfZW5hYmxlX2xvY2tlZChkZXZfcHJpdiwgY3J0 Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4gKwkJaW50ZWxfcHNyX2VuYWJsZV9sb2NrZWQoaW50ZWxf ZHAsIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOwo+ICAKPiAgdW5sb2NrOgo+IC0JbXV0ZXhfdW5s b2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNy LmxvY2spOwo+ICB9Cj4gIAo+ICAvKioKPiAtICogaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUgLSB3 YWl0IGZvciBQU1IxIHRvIGlkbGUKPiAtICogQG5ld19jcnRjX3N0YXRlOiBuZXcgQ1JUQyBzdGF0 ZQo+ICsgKiBwc3Jfd2FpdF9mb3JfaWRsZSAtIHdhaXQgZm9yIFBTUjEgdG8gaWRsZQo+ICsgKiBA aW50ZWxfZHA6IEludGVsIERQCj4gICAqIEBvdXRfdmFsdWU6IFBTUiBzdGF0dXMgaW4gY2FzZSBv ZiBmYWlsdXJlCj4gICAqCj4gLSAqIFRoaXMgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gYmUgY2Fs bGVkIGZyb20gcGlwZV91cGRhdGVfc3RhcnQoKSB3aGVyZSBpdCBpcwo+IC0gKiBub3QgZXhwZWN0 ZWQgdG8gcmFjZSB3aXRoIFBTUiBlbmFibGUgb3IgZGlzYWJsZS4KPiAtICoKPiAgICogUmV0dXJu czogMCBvbiBzdWNjZXNzIG9yIC1FVElNRU9VVCBpZiBQU1Igc3RhdHVzIGRvZXMgbm90IGlkbGUu Cj4gKyAqCj4gICAqLwo+IC1pbnQgaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlLAo+IC0JCQkgICAgdTMyICpvdXRfdmFs dWUpCj4gK3N0YXRpYyBpbnQgcHNyX3dhaXRfZm9yX2lkbGUoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCwgdTMyICpvdXRfdmFsdWUpCj4gIHsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0g dG9faW50ZWxfY3J0YyhuZXdfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+IC0KPiAt CWlmICghZGV2X3ByaXYtPnBzci5lbmFibGVkIHx8ICFuZXdfY3J0Y19zdGF0ZS0+aGFzX3BzcikK PiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBGSVhNRTogVXBkYXRlIHRoaXMgZm9yIFBTUjIgaWYg d2UgbmVlZCB0byB3YWl0IGZvciBpZGxlICovCj4gLQlpZiAoUkVBRF9PTkNFKGRldl9wcml2LT5w c3IucHNyMl9lbmFibGVkKSkKPiAtCQlyZXR1cm4gMDsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICAKPiAgCS8qCj4gIAkgKiBG cm9tIGJzcGVjOiBQYW5lbCBTZWxmIFJlZnJlc2ggKEJEVyspCj4gQEAgLTE0MDMsMzIgKzEzOTAs NjcgQEAgaW50IGludGVsX3Bzcl93YWl0X2Zvcl9pZGxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpuZXdfY3J0Y19zdGF0ZSwKPiAgCSAqIGV4aXQgdHJhaW5pbmcgdGltZSArIDEuNSBt cyBvZiBhdXggY2hhbm5lbCBoYW5kc2hha2UuIDUwIG1zIGlzCj4gIAkgKiBkZWZlbnNpdmUgZW5v dWdoIHRvIGNvdmVyIGV2ZXJ5dGhpbmcuCj4gIAkgKi8KPiAtCj4gIAlyZXR1cm4gX19pbnRlbF93 YWl0X2Zvcl9yZWdpc3RlcigmZGV2X3ByaXYtPnVuY29yZSwKPiAtCQkJCQkgRURQX1BTUl9TVEFU VVMoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwKPiArCQkJCQkgRURQX1BTUl9TVEFUVVMoaW50 ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwKPiAgCQkJCQkgRURQX1BTUl9TVEFUVVNfU1RBVEVfTUFT SywKPiAgCQkJCQkgRURQX1BTUl9TVEFUVVNfU1RBVEVfSURMRSwgMiwgNTAsCj4gIAkJCQkJIG91 dF92YWx1ZSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBib29sIF9fcHNyX3dhaXRfZm9yX2lkbGVfbG9j a2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArLyoqCj4gKyAqIGludGVs X3Bzcl93YWl0X2Zvcl9pZGxlIC0gd2FpdCBmb3IgUFNSMSB0byBpZGxlCj4gKyAqIEBuZXdfY3J0 Y19zdGF0ZTogbmV3IENSVEMgc3RhdGUKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBleHBl Y3RlZCB0byBiZSBjYWxsZWQgZnJvbSBwaXBlX3VwZGF0ZV9zdGFydCgpIHdoZXJlIGl0IGlzCj4g KyAqIG5vdCBleHBlY3RlZCB0byByYWNlIHdpdGggUFNSIGVuYWJsZSBvciBkaXNhYmxlLgo+ICsg Ki8KPiArdm9pZCBpbnRlbF9wc3Jfd2FpdF9mb3JfaWRsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUobmV3X2NydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKPiAr CXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ICsJdTMyIHBzcl9zdGF0dXM7Cj4gKwo+ ICsJaWYgKCFuZXdfY3J0Y19zdGF0ZS0+aGFzX3BzcikKPiArCQlyZXR1cm47Cj4gKwo+ICsJZm9y X2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsKPiArCQlzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICsKPiArCQlpZiAo ZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQo+ICsJCQljb250aW51ZTsKPiArCj4g KwkJLyogd2hlbiB0aGUgUFNSMSBpcyBlbmFibGVkICovCj4gKwkJaWYgKGludGVsX2RwLT5wc3Iu ZW5hYmxlZCAmJiAhaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQpIHsKPiArCQkJaWYgKHBzcl93 YWl0X2Zvcl9pZGxlKGludGVsX2RwLCAmcHNyX3N0YXR1cykpCj4gKwkJCQlkcm1fZXJyKCZkZXZf cHJpdi0+ZHJtLAo+ICsJCQkJCSJQU1IgaWRsZSB0aW1lZCBvdXQgMHgleCwgYXRvbWljIHVwZGF0 ZSBtYXkgZmFpbFxuIiwKPiArCQkJCQlwc3Jfc3RhdHVzKTsKPiArCj4gKwkJCS8qIG9ubHkgb25l IHRyYW5jb2RlciBjYW4gZW5hYmxlIFBTUjEgKi8KCQkJQWJvdmUgY29tbWVudCBpcyBub3QgdHJ1 ZSBmb3IgZHVhbCBlRFAuCgkJCVNpbmNlIFRHTCBETUMgc3VwcG9ydCBjb250ZXh0IHNhdmUgYW5k IHJlc3RvcmUgb24KCQkJYm90aCBwaXBlIEEgYW5kIHBpcGUgQi4KPiArCQkJYnJlYWs7Cj4gKwkJ fQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBfX3Bzcl93YWl0X2Zvcl9pZGxlX2xvY2tl ZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gIAlpOTE1X3JlZ190IHJlZzsKPiAg CXUzMiBtYXNrOwo+ICAJaW50IGVycjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICAKPiAtCWlmICghZGV2X3ByaXYtPnBzci5l bmFibGVkKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLmVuYWJsZWQpCj4gIAkJcmV0dXJuIGZhbHNl Owo+ICAKPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgewo+IC0JCXJlZyA9IEVE UF9QU1IyX1NUQVRVUyhkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpOwo+ICsJaWYgKGludGVsX2Rw LT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gKwkJcmVnID0gRURQX1BTUjJfU1RBVFVTKGludGVsX2Rw LT5wc3IudHJhbnNjb2Rlcik7Cj4gIAkJbWFzayA9IEVEUF9QU1IyX1NUQVRVU19TVEFURV9NQVNL Owo+ICAJfSBlbHNlIHsKPiAtCQlyZWcgPSBFRFBfUFNSX1NUQVRVUyhkZXZfcHJpdi0+cHNyLnRy YW5zY29kZXIpOwo+ICsJCXJlZyA9IEVEUF9QU1JfU1RBVFVTKGludGVsX2RwLT5wc3IudHJhbnNj b2Rlcik7Cj4gIAkJbWFzayA9IEVEUF9QU1JfU1RBVFVTX1NUQVRFX01BU0s7Cj4gIAl9Cj4gIAo+ IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJbXV0ZXhfdW5sb2NrKCZp bnRlbF9kcC0+cHNyLmxvY2spOwo+ICAKPiAgCWVyciA9IGludGVsX2RlX3dhaXRfZm9yX2NsZWFy KGRldl9wcml2LCByZWcsIG1hc2ssIDUwKTsKPiAgCWlmIChlcnIpCj4gQEAgLTE0MzYsOCArMTQ1 OCw4IEBAIHN0YXRpYyBib29sIF9fcHNyX3dhaXRfZm9yX2lkbGVfbG9ja2VkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQkJIlRpbWVkIG91dCB3YWl0aW5nIGZvciBQU1Ig SWRsZSBmb3IgcmUtZW5hYmxlXG4iKTsKPiAgCj4gIAkvKiBBZnRlciB0aGUgdW5sb2NrZWQgd2Fp dCwgdmVyaWZ5IHRoYXQgUFNSIGlzIHN0aWxsIHdhbnRlZCEgKi8KPiAtCW11dGV4X2xvY2soJmRl dl9wcml2LT5wc3IubG9jayk7Cj4gLQlyZXR1cm4gZXJyID09IDAgJiYgZGV2X3ByaXYtPnBzci5l bmFibGVkOwo+ICsJbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiArCXJldHVybiBl cnIgPT0gMCAmJiBpbnRlbF9kcC0+cHNyLmVuYWJsZWQ7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQg aW50ZWxfcHNyX2Zhc3RzZXRfZm9yY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+IEBAIC0xNTAzLDExICsxNTI1LDEyIEBAIHN0YXRpYyBpbnQgaW50ZWxfcHNyX2Zhc3RzZXRf Zm9yY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJcmV0dXJuIGVycjsK PiAgfQo+ICAKPiAtaW50IGludGVsX3Bzcl9kZWJ1Z19zZXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCB1NjQgdmFsKQo+ICtpbnQgaW50ZWxfcHNyX2RlYnVnX3NldChzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLCB1NjQgdmFsKQo+ICB7Cj4gIAljb25zdCB1MzIgbW9kZSA9IHZh bCAmIEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSzsKPiAgCXUzMiBvbGRfbW9kZTsKPiAgCWludCBy ZXQ7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGlu dGVsX2RwKTsKPiAgCj4gIAlpZiAodmFsICYgfihJOTE1X1BTUl9ERUJVR19JUlEgfCBJOTE1X1BT Ul9ERUJVR19NT0RFX01BU0spIHx8Cj4gIAkgICAgbW9kZSA+IEk5MTVfUFNSX0RFQlVHX0ZPUkNF X1BTUjEpIHsKPiBAQCAtMTUxNSwyMSArMTUzOCwyMSBAQCBpbnQgaW50ZWxfcHNyX2RlYnVnX3Nl dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU2NCB2YWwpCj4gIAkJcmV0dXJu IC1FSU5WQUw7Cj4gIAl9Cj4gIAo+IC0JcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZk ZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZp bnRlbF9kcC0+cHNyLmxvY2spOwo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAt CW9sZF9tb2RlID0gZGV2X3ByaXYtPnBzci5kZWJ1ZyAmIEk5MTVfUFNSX0RFQlVHX01PREVfTUFT SzsKPiAtCWRldl9wcml2LT5wc3IuZGVidWcgPSB2YWw7Cj4gKwlvbGRfbW9kZSA9IGludGVsX2Rw LT5wc3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0s7Cj4gKwlpbnRlbF9kcC0+cHNy LmRlYnVnID0gdmFsOwo+ICAKPiAgCS8qCj4gIAkgKiBEbyBpdCByaWdodCBhd2F5IGlmIGl0J3Mg YWxyZWFkeSBlbmFibGVkLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkb25lCj4gIAkgKiB3aGVuIGVu YWJsaW5nIHRoZSBzb3VyY2UuCj4gIAkgKi8KPiAtCWlmIChkZXZfcHJpdi0+cHNyLmVuYWJsZWQp Cj4gLQkJcHNyX2lycV9jb250cm9sKGRldl9wcml2KTsKPiArCWlmIChpbnRlbF9kcC0+cHNyLmVu YWJsZWQpCj4gKwkJcHNyX2lycV9jb250cm9sKGludGVsX2RwKTsKPiAgCj4gLQltdXRleF91bmxv Y2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3Iu bG9jayk7Cj4gIAo+ICAJaWYgKG9sZF9tb2RlICE9IG1vZGUpCj4gIAkJcmV0ID0gaW50ZWxfcHNy X2Zhc3RzZXRfZm9yY2UoZGV2X3ByaXYpOwo+IEBAIC0xNTM3LDI4ICsxNTYwLDI4IEBAIGludCBp bnRlbF9wc3JfZGVidWdfc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTY0 IHZhbCkKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGludGVsX3Bzcl9o YW5kbGVfaXJxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArc3RhdGljIHZv aWQgaW50ZWxfcHNyX2hhbmRsZV9pcnEoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsKPiArCXN0cnVjdCBpbnRl bF9wc3IgKnBzciA9ICZpbnRlbF9kcC0+cHNyOwo+ICAKPiAtCWludGVsX3Bzcl9kaXNhYmxlX2xv Y2tlZChwc3ItPmRwKTsKPiArCWludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChpbnRlbF9kcCk7Cj4g IAlwc3ItPnNpbmtfbm90X3JlbGlhYmxlID0gdHJ1ZTsKPiAgCS8qIGxldCdzIG1ha2Ugc3VyZSB0 aGF0IHNpbmsgaXMgYXdha2VuICovCj4gLQlkcm1fZHBfZHBjZF93cml0ZWIoJnBzci0+ZHAtPmF1 eCwgRFBfU0VUX1BPV0VSLCBEUF9TRVRfUE9XRVJfRDApOwo+ICsJZHJtX2RwX2RwY2Rfd3JpdGVi KCZpbnRlbF9kcC0+YXV4LCBEUF9TRVRfUE9XRVIsIERQX1NFVF9QT1dFUl9EMCk7Cj4gIH0KPiAg Cj4gIHN0YXRpYyB2b2lkIGludGVsX3Bzcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK PiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPiAtCQljb250YWlu ZXJfb2Yod29yaywgdHlwZW9mKCpkZXZfcHJpdiksIHBzci53b3JrKTsKPiArCXN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAgPQo+ICsJCWNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKmludGVsX2Rw KSwgcHNyLndvcmspOwo+ICAKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4g KwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICAKPiAtCWlmICghZGV2X3ByaXYt PnBzci5lbmFibGVkKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLmVuYWJsZWQpCj4gIAkJZ290byB1 bmxvY2s7Cj4gIAo+IC0JaWYgKFJFQURfT05DRShkZXZfcHJpdi0+cHNyLmlycV9hdXhfZXJyb3Ip KQo+IC0JCWludGVsX3Bzcl9oYW5kbGVfaXJxKGRldl9wcml2KTsKPiArCWlmIChSRUFEX09OQ0Uo aW50ZWxfZHAtPnBzci5pcnFfYXV4X2Vycm9yKSkKPiArCQlpbnRlbF9wc3JfaGFuZGxlX2lycShp bnRlbF9kcCk7Cj4gIAo+ICAJLyoKPiAgCSAqIFdlIGhhdmUgdG8gbWFrZSBzdXJlIFBTUiBpcyBy ZWFkeSBmb3IgcmUtZW5hYmxlCj4gQEAgLTE1NjYsNyArMTU4OSw3IEBAIHN0YXRpYyB2b2lkIGlu dGVsX3Bzcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgCSAqIFBTUiBtaWdodCB0 YWtlIHNvbWUgdGltZSB0byBnZXQgZnVsbHkgZGlzYWJsZWQKPiAgCSAqIGFuZCBiZSByZWFkeSBm b3IgcmUtZW5hYmxlLgo+ICAJICovCj4gLQlpZiAoIV9fcHNyX3dhaXRfZm9yX2lkbGVfbG9ja2Vk KGRldl9wcml2KSkKPiArCWlmICghX19wc3Jfd2FpdF9mb3JfaWRsZV9sb2NrZWQoaW50ZWxfZHAp KQo+ICAJCWdvdG8gdW5sb2NrOwo+ICAKPiAgCS8qCj4gQEAgLTE1NzQsMTIgKzE1OTcsMTIgQEAg c3RhdGljIHZvaWQgaW50ZWxfcHNyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAJ ICogcmVjaGVjay4gU2luY2UgcHNyX2ZsdXNoIGZpcnN0IGNsZWFycyB0aGlzIGFuZCB0aGVuIHJl c2NoZWR1bGVzIHdlCj4gIAkgKiB3b24ndCBldmVyIG1pc3MgYSBmbHVzaCB3aGVuIGJhaWxpbmcg b3V0IGhlcmUuCj4gIAkgKi8KPiAtCWlmIChkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRidWZmZXJf Yml0cyB8fCBkZXZfcHJpdi0+cHNyLmFjdGl2ZSkKPiArCWlmIChpbnRlbF9kcC0+cHNyLmJ1c3lf ZnJvbnRidWZmZXJfYml0cyB8fCBpbnRlbF9kcC0+cHNyLmFjdGl2ZSkKPiAgCQlnb3RvIHVubG9j azsKPiAgCj4gLQlpbnRlbF9wc3JfYWN0aXZhdGUoZGV2X3ByaXYtPnBzci5kcCk7Cj4gKwlpbnRl bF9wc3JfYWN0aXZhdGUoaW50ZWxfZHApOwo+ICB1bmxvY2s6Cj4gLQltdXRleF91bmxvY2soJmRl dl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7 Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0xNTk4LDI3ICsxNjIxLDM1IEBAIHN0YXRpYyB2b2lkIGlu dGVsX3Bzcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgdm9pZCBpbnRlbF9wc3Jf aW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJCSAgdW5z aWduZWQgZnJvbnRidWZmZXJfYml0cywgZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKQo+ICB7Cj4g LQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpKQo+IC0JCXJldHVybjsKPiArCXN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyOwo+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcDsKPiAgCj4gLQlp ZiAob3JpZ2luID09IE9SSUdJTl9GTElQKQo+IC0JCXJldHVybjsKPiArCWZvcl9lYWNoX2ludGVs X2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7CndpdGggbXkgdW5kZXJzdGFuZGluZyBsb29w aW5nIGZvciBlYWNoIGludGVsX2RwIGluIGludGVsX3Bzcl97aW52YWxpZGF0ZSxmbHVzaH0KbWF5 IG5vdCBiZSBjb3JyZWN0LiBpbnRlbF9wc3Jfe2ludmFsaWRhdGUsZmx1c2h9IHdpbGwgZ2V0IGNh bGxlZCBmb3IgZnJvbnRidWZmZXIKdXBkYXRlcyBhc3NvY2lhdGVkIHdpdGggYSBmcmFtZWJ1ZmZl ci4gRnVuY3Rpb25hbGx5IGlmIHR3byBlRFAgZGlzcGxheSBoYXZlCmRpc3RpbmN0IGZiLCB0aGVy ZSB3aWxsIGJlIGRpc3RpbmN0IGNhbGwgdG8gaW50ZWxfcHNyX3tpbnZhbGlkYXRlLGZsdXNofS4g Cj4gIAo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiAtCWlmICghZGV2X3By aXYtPnBzci5lbmFibGVkKSB7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2sp Owo+IC0JCXJldHVybjsKPiAtCX0KPiArCQlpbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNv ZGVyKTsKPiArCQlpZiAoZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQo+ICsJCQlj b250aW51ZTsKPiArCQlpZiAoIUNBTl9QU1IoaW50ZWxfZHApKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJaWYgKG9yaWdpbiA9PSBPUklHSU5fRkxJUCkKPiArCQkJY29udGludWU7Cj4gIAo+IC0J ZnJvbnRidWZmZXJfYml0cyAmPSBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhkZXZfcHJpdi0+ cHNyLnBpcGUpOwo+IC0JZGV2X3ByaXYtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgfD0gZnJv bnRidWZmZXJfYml0czsKPiArCQltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICsJ CWlmICghaW50ZWxfZHAtPnBzci5lbmFibGVkKSB7Cj4gKwkJCW11dGV4X3VubG9jaygmaW50ZWxf ZHAtPnBzci5sb2NrKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICAKPiAtCWlmIChmcm9udGJ1 ZmZlcl9iaXRzKQo+IC0JCWludGVsX3Bzcl9leGl0KGRldl9wcml2KTsKPiArCQlmcm9udGJ1ZmZl cl9iaXRzICY9IElOVEVMX0ZST05UQlVGRkVSX0FMTF9NQVNLKGludGVsX2RwLT5wc3IucGlwZSk7 Cj4gKwkJaW50ZWxfZHAtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgfD0gZnJvbnRidWZmZXJf Yml0czsKPiAgCj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gLX0KPiAr CQlpZiAoZnJvbnRidWZmZXJfYml0cykKPiArCQkJaW50ZWxfcHNyX2V4aXQoaW50ZWxfZHApOwo+ ICAKPiArCQltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gKwl9Cj4gK30KPiAg LyoKPiAgICogV2hlbiB3ZSB3aWxsIGJlIGNvbXBsZXRlbHkgcmVseSBvbiBQU1IyIFMvVyB0cmFj a2luZyBpbiBmdXR1cmUsCj4gICAqIGludGVsX3Bzcl9mbHVzaCgpIHdpbGwgaW52YWxpZGF0ZSBh bmQgZmx1c2ggdGhlIFBTUiBmb3IgT1JJR0lOX0ZMSVAKPiBAQCAtMTYyNiwxNSArMTY1NywxNSBA QCB2b2lkIGludGVsX3Bzcl9pbnZhbGlkYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiAgICogYWNjb3JkaW5nbHkgaW4gZnV0dXJlLgo+ICAgKi8KPiAgc3RhdGljIHZvaWQK PiAtdGdsX2RjM2NvX2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAt CQl1bnNpZ25lZCBpbnQgZnJvbnRidWZmZXJfYml0cywgZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2lu KQo+ICt0Z2xfZGMzY29fZmx1c2goc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdW5zaWduZWQg aW50IGZyb250YnVmZmVyX2JpdHMsCj4gKwkJZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKQo+ICB7 Cj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJbXV0ZXhfbG9jaygmaW50 ZWxfZHAtPnBzci5sb2NrKTsKPiAgCj4gLQlpZiAoIWRldl9wcml2LT5wc3IuZGMzY29fZW5hYmxl ZCkKPiArCWlmICghaW50ZWxfZHAtPnBzci5kYzNjb19lbmFibGVkKQo+ICAJCWdvdG8gdW5sb2Nr Owo+ICAKPiAtCWlmICghZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQgfHwgIWRldl9wcml2LT5w c3IuYWN0aXZlKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCB8fCAhaW50ZWxf ZHAtPnBzci5hY3RpdmUpCj4gIAkJZ290byB1bmxvY2s7Cj4gIAo+ICAJLyoKPiBAQCAtMTY0Miwx NSArMTY3MywxNSBAQCB0Z2xfZGMzY29fZmx1c2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+ICAJICogd2hlbiBkZWxheWVkIHdvcmsgc2NoZWR1bGVzIHRoYXQgbWVhbnMgZGlz cGxheSBoYXMgYmVlbiBpZGxlLgo+ICAJICovCj4gIAlpZiAoIShmcm9udGJ1ZmZlcl9iaXRzICYK PiAtCSAgICBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhkZXZfcHJpdi0+cHNyLnBpcGUpKSkK PiArCSAgICBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhpbnRlbF9kcC0+cHNyLnBpcGUpKSkK PiAgCQlnb3RvIHVubG9jazsKPiAgCj4gLQl0Z2xfcHNyMl9lbmFibGVfZGMzY28oZGV2X3ByaXYp Owo+IC0JbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fd3EsICZkZXZfcHJpdi0+cHNyLmRjM2NvX3dv cmssCj4gLQkJCSBkZXZfcHJpdi0+cHNyLmRjM2NvX2V4aXRfZGVsYXkpOwo+ICsJdGdsX3BzcjJf ZW5hYmxlX2RjM2NvKGludGVsX2RwKTsKPiArCW1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAm aW50ZWxfZHAtPnBzci5kYzNjb193b3JrLAo+ICsJCQkgaW50ZWxfZHAtPnBzci5kYzNjb19leGl0 X2RlbGF5KTsKPiAgCj4gIHVubG9jazoKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5s b2NrKTsKPiArCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAgfQo+ICAKPiAg LyoqCj4gQEAgLTE2NjksNDUgKzE3MDAsNTQgQEAgdGdsX2RjM2NvX2ZsdXNoKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgdm9pZCBpbnRlbF9wc3JfZmx1c2goc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCSAgICAgdW5zaWduZWQgZnJvbnRidWZmZXJf Yml0cywgZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKQo+ICB7Cj4gLQlpZiAoIUNBTl9QU1IoZGV2 X3ByaXYpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAob3JpZ2luID09IE9SSUdJTl9GTElQKSB7 Cj4gLQkJdGdsX2RjM2NvX2ZsdXNoKGRldl9wcml2LCBmcm9udGJ1ZmZlcl9iaXRzLCBvcmlnaW4p Owo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxv Y2spOwo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLmVuYWJsZWQpIHsKPiAtCQltdXRleF91bmxvY2so JmRldl9wcml2LT5wc3IubG9jayk7Cj4gLQkJcmV0dXJuOwo+ICsJc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXI7Cj4gKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwOwo+ICsKPiArCWZvcl9l YWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7Cj4gKwkJaW50ZWxfZHAgPSBl bmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Cj4gKwo+ICsJCWlmIChlbmNvZGVyLT50eXBlID09IElO VEVMX09VVFBVVF9FRFAgJiYgQ0FOX1BTUihpbnRlbF9kcCkpIHsKPiArCQkJaWYgKG9yaWdpbiA9 PSBPUklHSU5fRkxJUCkgewo+ICsJCQkJdGdsX2RjM2NvX2ZsdXNoKGludGVsX2RwLCBmcm9udGJ1 ZmZlcl9iaXRzLCBvcmlnaW4pOwo+ICsJCQkJY29udGludWU7Cj4gKwkJCX0KPiArCj4gKwkJCW11 dGV4X2xvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gKwkJCWlmICghaW50ZWxfZHAtPnBzci5l bmFibGVkKSB7Cj4gKwkJCQltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gKwkJ CQljb250aW51ZTsKPiArCQkJfQo+ICsKPiArCQkJZnJvbnRidWZmZXJfYml0cyAmPSBJTlRFTF9G Uk9OVEJVRkZFUl9BTExfTUFTSyhpbnRlbF9kcC0+cHNyLnBpcGUpOwo+ICsJCQlpbnRlbF9kcC0+ cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyAmPSB+ZnJvbnRidWZmZXJfYml0czsKPiArCj4gKwkJ CS8qIEJ5IGRlZmluaXRpb24gZmx1c2ggPSBpbnZhbGlkYXRlICsgZmx1c2ggKi8KPiArCQkJaWYg KGZyb250YnVmZmVyX2JpdHMpCj4gKwkJCQlwc3JfZm9yY2VfaHdfdHJhY2tpbmdfZXhpdChpbnRl bF9kcCk7Cj4gKwo+ICsJCQlpZiAoIWludGVsX2RwLT5wc3IuYWN0aXZlICYmICFpbnRlbF9kcC0+ cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cykKPiArCQkJCXNjaGVkdWxlX3dvcmsoJmludGVsX2Rw LT5wc3Iud29yayk7Cj4gKwkJCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAr CQl9Cj4gIAl9Cj4gLQo+IC0JZnJvbnRidWZmZXJfYml0cyAmPSBJTlRFTF9GUk9OVEJVRkZFUl9B TExfTUFTSyhkZXZfcHJpdi0+cHNyLnBpcGUpOwo+IC0JZGV2X3ByaXYtPnBzci5idXN5X2Zyb250 YnVmZmVyX2JpdHMgJj0gfmZyb250YnVmZmVyX2JpdHM7Cj4gLQo+IC0JLyogQnkgZGVmaW5pdGlv biBmbHVzaCA9IGludmFsaWRhdGUgKyBmbHVzaCAqLwo+IC0JaWYgKGZyb250YnVmZmVyX2JpdHMp Cj4gLQkJcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQoZGV2X3ByaXYpOwo+IC0KPiAtCWlmICgh ZGV2X3ByaXYtPnBzci5hY3RpdmUgJiYgIWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9i aXRzKQo+IC0JCXNjaGVkdWxlX3dvcmsoJmRldl9wcml2LT5wc3Iud29yayk7Cj4gLQltdXRleF91 bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gIH0KPiAgCj4gIC8qKgo+ICAgKiBpbnRlbF9w c3JfaW5pdCAtIEluaXQgYmFzaWMgUFNSIHdvcmsgYW5kIG11dGV4Lgo+IC0gKiBAZGV2X3ByaXY6 IGk5MTUgZGV2aWNlIHByaXZhdGUKPiArICogQGludGVsX2RwOiBJbnRlbCBEUAo+ICAgKgo+IC0g KiBUaGlzIGZ1bmN0aW9uIGlzICBjYWxsZWQgb25seSBvbmNlIGF0IGRyaXZlciBsb2FkIHRvIGlu aXRpYWxpemUgYmFzaWMKPiAtICogUFNSIHN0dWZmLgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNh bGxlZCBhZnRlciB0aGUgaW5pdGlhbGl6aW5nIGNvbm5lY3Rvci4KPiArICogKHRoZSBpbml0aWFs aXppbmcgb2YgY29ubmVjdG9yIHRyZWF0cyB0aGUgaGFuZGxpbmcgb2YgY29ubmVjdG9yIGNhcGFi aWxpdGllcykKPiArICogQW5kIGl0IGluaXRpYWxpemVzIGJhc2ljIFBTUiBzdHVmZiBmb3IgZWFj aCBEUCBFbmNvZGVyLgo+ICAgKi8KPiAtdm9pZCBpbnRlbF9wc3JfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3ZvaWQgaW50ZWxfcHNyX2luaXQoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKPiAgewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwo+ICAJaWYgKCFIQVNfUFNSKGRldl9wcml2KSkK PiAgCQlyZXR1cm47Cj4gIAo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLnNpbmtfc3VwcG9ydCkKPiAr CWlmICghaW50ZWxfZHAtPnBzci5zaW5rX3N1cHBvcnQpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCWlm IChJU19IQVNXRUxMKGRldl9wcml2KSkKPiBAQCAtMTcyNSwxNCArMTc2NSwxNCBAQCB2b2lkIGlu dGVsX3Bzcl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCS8qIFNl dCBsaW5rX3N0YW5kYnkgeCBsaW5rX29mZiBkZWZhdWx0cyAqLwo+ICAJaWYgKElTX0hBU1dFTEwo ZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpCj4gIAkJLyogSFNXIGFuZCBCRFcg cmVxdWlyZSB3b3JrYXJvdW5kcyB0aGF0IHdlIGRvbid0IGltcGxlbWVudC4gKi8KPiAtCQlkZXZf cHJpdi0+cHNyLmxpbmtfc3RhbmRieSA9IGZhbHNlOwo+ICsJCWludGVsX2RwLT5wc3IubGlua19z dGFuZGJ5ID0gZmFsc2U7Cj4gIAllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTIpCj4g IAkJLyogRm9yIG5ldyBwbGF0Zm9ybXMgdXAgdG8gVEdMIGxldCdzIHJlc3BlY3QgVkJUIGJhY2sg YWdhaW4gKi8KPiAtCQlkZXZfcHJpdi0+cHNyLmxpbmtfc3RhbmRieSA9IGRldl9wcml2LT52YnQu cHNyLmZ1bGxfbGluazsKPiArCQlpbnRlbF9kcC0+cHNyLmxpbmtfc3RhbmRieSA9IGRldl9wcml2 LT52YnQucHNyLmZ1bGxfbGluazsKPiAgCj4gLQlJTklUX1dPUksoJmRldl9wcml2LT5wc3Iud29y aywgaW50ZWxfcHNyX3dvcmspOwo+IC0JSU5JVF9ERUxBWUVEX1dPUksoJmRldl9wcml2LT5wc3Iu ZGMzY29fd29yaywgdGdsX2RjM2NvX2Rpc2FibGVfd29yayk7Cj4gLQltdXRleF9pbml0KCZkZXZf cHJpdi0+cHNyLmxvY2spOwo+ICsJSU5JVF9XT1JLKCZpbnRlbF9kcC0+cHNyLndvcmssIGludGVs X3Bzcl93b3JrKTsKPiArCUlOSVRfREVMQVlFRF9XT1JLKCZpbnRlbF9kcC0+cHNyLmRjM2NvX3dv cmssIHRnbF9kYzNjb19kaXNhYmxlX3dvcmspOwo+ICsJbXV0ZXhfaW5pdCgmaW50ZWxfZHAtPnBz ci5sb2NrKTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBwc3JfZ2V0X3N0YXR1c19hbmRfZXJyb3Jf c3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gQEAgLTE3NTgsNyArMTc5OCw3IEBA IHN0YXRpYyB2b2lkIHBzcl9hbHBtX2NoZWNrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4g IHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50 ZWxfZHApOwo+ICAJc3RydWN0IGRybV9kcF9hdXggKmF1eCA9ICZpbnRlbF9kcC0+YXV4Owo+IC0J c3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsKPiArCXN0cnVjdCBpbnRlbF9w c3IgKnBzciA9ICZpbnRlbF9kcC0+cHNyOwo+ICAJdTggdmFsOwo+ICAJaW50IHI7Cj4gIAo+IEBA IC0xNzg1LDcgKzE4MjUsNyBAQCBzdGF0aWMgdm9pZCBwc3JfYWxwbV9jaGVjayhzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQo+ICBzdGF0aWMgdm9pZCBwc3JfY2FwYWJpbGl0eV9jaGFuZ2VkX2No ZWNrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGk5MTVf cHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsKPiArCXN0cnVjdCBpbnRlbF9wc3IgKnBzciA9ICZp bnRlbF9kcC0+cHNyOwo+ICAJdTggdmFsOwo+ICAJaW50IHI7Cj4gIAo+IEBAIC0xODA5LDE4ICsx ODQ5LDE4IEBAIHN0YXRpYyB2b2lkIHBzcl9jYXBhYmlsaXR5X2NoYW5nZWRfY2hlY2soc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKPiAgdm9pZCBpbnRlbF9wc3Jfc2hvcnRfcHVsc2Uoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQlzdHJ1Y3QgaTkxNV9wc3IgKnBzciA9 ICZkZXZfcHJpdi0+cHNyOwo+ICsJc3RydWN0IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5w c3I7Cj4gIAl1OCBzdGF0dXMsIGVycm9yX3N0YXR1czsKPiAgCWNvbnN0IHU4IGVycm9ycyA9IERQ X1BTUl9SRkJfU1RPUkFHRV9FUlJPUiB8Cj4gIAkJCSAgRFBfUFNSX1ZTQ19TRFBfVU5DT1JSRUNU QUJMRV9FUlJPUiB8Cj4gIAkJCSAgRFBfUFNSX0xJTktfQ1JDX0VSUk9SOwo+ICAKPiAtCWlmICgh Q0FOX1BTUihkZXZfcHJpdikgfHwgIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCj4gKwlpZiAo IUNBTl9QU1IoaW50ZWxfZHApIHx8ICFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+ICAJCXJl dHVybjsKPiAgCj4gIAltdXRleF9sb2NrKCZwc3ItPmxvY2spOwo+ICAKPiAtCWlmICghcHNyLT5l bmFibGVkIHx8IHBzci0+ZHAgIT0gaW50ZWxfZHApCj4gKwlpZiAoIXBzci0+ZW5hYmxlZCkKPiAg CQlnb3RvIGV4aXQ7Cj4gIAo+ICAJaWYgKHBzcl9nZXRfc3RhdHVzX2FuZF9lcnJvcl9zdGF0dXMo aW50ZWxfZHAsICZzdGF0dXMsICZlcnJvcl9zdGF0dXMpKSB7Cj4gQEAgLTE4NjMsMTUgKzE5MDMs MTQgQEAgdm9pZCBpbnRlbF9wc3Jfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKPiAgCj4gIGJvb2wgaW50ZWxfcHNyX2VuYWJsZWQoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkx NShpbnRlbF9kcCk7Cj4gIAlib29sIHJldDsKPiAgCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYp IHx8ICFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+ICsJaWYgKCFDQU5fUFNSKGludGVsX2Rw KSB8fCAhaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAo+ IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiAtCXJldCA9IChkZXZfcHJpdi0+ cHNyLmRwID09IGludGVsX2RwICYmIGRldl9wcml2LT5wc3IuZW5hYmxlZCk7Cj4gLQltdXRleF91 bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNy LmxvY2spOwo+ICsJcmV0ID0gaW50ZWxfZHAtPnBzci5lbmFibGVkOwo+ICsJbXV0ZXhfdW5sb2Nr KCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmgKPiBpbmRleCAwYTUxNzk3OGU4YWYuLjAz ZWIxOTU0N2QwOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX3Bzci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3Iu aAo+IEBAIC0xOCw3ICsxOCw3IEBAIHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGU7Cj4gIHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZTsKPiAgc3RydWN0IGludGVsX3BsYW5lOwo+ICAKPiAtI2RlZmlu ZSBDQU5fUFNSKGRldl9wcml2KSAoSEFTX1BTUihkZXZfcHJpdikgJiYgZGV2X3ByaXYtPnBzci5z aW5rX3N1cHBvcnQpCj4gKyNkZWZpbmUgQ0FOX1BTUihpbnRlbF9kcCkgKEhBU19QU1IoZHBfdG9f aTkxNShpbnRlbF9kcCkpICYmIGludGVsX2RwLT5wc3Iuc2lua19zdXBwb3J0KQo+ICB2b2lkIGlu dGVsX3Bzcl9pbml0X2RwY2Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gIHZvaWQgaW50 ZWxfcHNyX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICAJCSAgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IEBAIC0yOCwyNCArMjgsMjQg QEAgdm9pZCBpbnRlbF9wc3JfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICB2 b2lkIGludGVsX3Bzcl91cGRhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCQkgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCQkgICAgICBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7Cj4gLWludCBpbnRl bF9wc3JfZGVidWdfc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTY0IHZh bHVlKTsKPiAraW50IGludGVsX3Bzcl9kZWJ1Z19zZXQoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCwgdTY0IHZhbHVlKTsKPiAgdm9pZCBpbnRlbF9wc3JfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJCSAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cywK PiAgCQkJICBlbnVtIGZiX29wX29yaWdpbiBvcmlnaW4pOwo+ICB2b2lkIGludGVsX3Bzcl9mbHVz aChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJICAgICB1bnNpZ25lZCBm cm9udGJ1ZmZlcl9iaXRzLAo+ICAJCSAgICAgZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKTsKPiAt dm9pZCBpbnRlbF9wc3JfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ ICt2b2lkIGludGVsX3Bzcl9pbml0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICB2b2lk IGludGVsX3Bzcl9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICAJ CQkgICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4gLXZvaWQgaW50 ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMy IHBzcl9paXIpOwo+ICt2b2lkIGludGVsX3Bzcl9pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwLCB1MzIgcHNyX2lpcik7Cj4gIHZvaWQgaW50ZWxfcHNyX3Nob3J0X3B1bHNlKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+IC1pbnQgaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlLAo+IC0JCQkgICAg dTMyICpvdXRfdmFsdWUpOwo+ICt2b2lkIGludGVsX3Bzcl93YWl0X2Zvcl9pZGxlKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSk7Cj4gIGJvb2wgaW50ZWxfcHNy X2VuYWJsZWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gIGludCBpbnRlbF9wc3IyX3Nl bF9mZXRjaF91cGRhdGUoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIAkJCQlz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cj4gLXZvaWQgaW50ZWxfcHNyMl9wcm9ncmFtX3RyYW5z X21hbl90cmtfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsK PiArdm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fdHJhbnNfbWFuX3Rya19jdGwoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwKPiArCQkJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKTsKPiAgdm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gIAkJCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCj4gIAkJCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3By aXRlLmMKPiBpbmRleCBiN2UyMDg4MTYwNzQuLjk0ODIzNGM2MDY0OCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwo+IEBAIC04NCw3ICs4NCw2IEBA IHZvaWQgaW50ZWxfcGlwZV91cGRhdGVfc3RhcnQoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKm5ld19jcnRjX3N0YXRlKQo+ICAJYm9vbCBuZWVkX3Zsdl9kc2lfd2EgPSAoSVNfVkFMTEVZ VklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpICYmCj4gIAkJaW50ZWxf Y3J0Y19oYXNfdHlwZShuZXdfY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0RTSSk7Cj4gIAlERUZJ TkVfV0FJVCh3YWl0KTsKPiAtCXUzMiBwc3Jfc3RhdHVzOwo+ICAKPiAgCWlmIChuZXdfY3J0Y19z dGF0ZS0+dWFwaS5hc3luY19mbGlwKQo+ICAJCXJldHVybjsKPiBAQCAtMTA5LDEwICsxMDgsNyBA QCB2b2lkIGludGVsX3BpcGVfdXBkYXRlX3N0YXJ0KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpuZXdfY3J0Y19zdGF0ZSkKPiAgCSAqIFZCTCBpbnRlcnJ1cHRzIHdpbGwgc3RhcnQgdGhl IFBTUiBleGl0IGFuZCBwcmV2ZW50IGEgUFNSCj4gIAkgKiByZS1lbnRyeSBhcyB3ZWxsLgo+ICAJ ICovCj4gLQlpZiAoaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUobmV3X2NydGNfc3RhdGUsICZwc3Jf c3RhdHVzKSkKPiAtCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkiUFNSIGlkbGUgdGlt ZWQgb3V0IDB4JXgsIGF0b21pYyB1cGRhdGUgbWF5IGZhaWxcbiIsCj4gLQkJCXBzcl9zdGF0dXMp Owo+ICsJaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUobmV3X2NydGNfc3RhdGUpOwo+ICAKPiAgCWxv Y2FsX2lycV9kaXNhYmxlKCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDVk MDRiMjgyYzA2MC4uYTJlMzllOGFkY2JlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g QEAgLTQ3NSw0MiArNDc1LDYgQEAgc3RydWN0IGk5MTVfZHJycyB7Cj4gIAllbnVtIGRycnNfc3Vw cG9ydF90eXBlIHR5cGU7Cj4gIH07Cj4gIAo+IC1zdHJ1Y3QgaTkxNV9wc3Igewo+IC0Jc3RydWN0 IG11dGV4IGxvY2s7Cj4gLQo+IC0jZGVmaW5lIEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSwkweDBm Cj4gLSNkZWZpbmUgSTkxNV9QU1JfREVCVUdfREVGQVVMVAkJMHgwMAo+IC0jZGVmaW5lIEk5MTVf UFNSX0RFQlVHX0RJU0FCTEUJCTB4MDEKPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJVR19FTkFCTEUJ CTB4MDIKPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJVR19GT1JDRV9QU1IxCTB4MDMKPiAtI2RlZmlu ZSBJOTE1X1BTUl9ERUJVR19JUlEJCTB4MTAKPiAtCj4gLQl1MzIgZGVidWc7Cj4gLQlib29sIHNp bmtfc3VwcG9ydDsKPiAtCWJvb2wgZW5hYmxlZDsKPiAtCXN0cnVjdCBpbnRlbF9kcCAqZHA7Cj4g LQllbnVtIHBpcGUgcGlwZTsKPiAtCWVudW0gdHJhbnNjb2RlciB0cmFuc2NvZGVyOwo+IC0JYm9v bCBhY3RpdmU7Cj4gLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKPiAtCXVuc2lnbmVkIGJ1c3lf ZnJvbnRidWZmZXJfYml0czsKPiAtCWJvb2wgc2lua19wc3IyX3N1cHBvcnQ7Cj4gLQlib29sIGxp bmtfc3RhbmRieTsKPiAtCWJvb2wgY29sb3JpbWV0cnlfc3VwcG9ydDsKPiAtCWJvb2wgcHNyMl9l bmFibGVkOwo+IC0JYm9vbCBwc3IyX3NlbF9mZXRjaF9lbmFibGVkOwo+IC0JdTggc2lua19zeW5j X2xhdGVuY3k7Cj4gLQlrdGltZV90IGxhc3RfZW50cnlfYXR0ZW1wdDsKPiAtCWt0aW1lX3QgbGFz dF9leGl0Owo+IC0JYm9vbCBzaW5rX25vdF9yZWxpYWJsZTsKPiAtCWJvb2wgaXJxX2F1eF9lcnJv cjsKPiAtCXUxNiBzdV94X2dyYW51bGFyaXR5Owo+IC0JYm9vbCBkYzNjb19lbmFibGVkOwo+IC0J dTMyIGRjM2NvX2V4aXRfZGVsYXk7Cj4gLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRjM2NvX3dvcms7 Cj4gLQlzdHJ1Y3QgZHJtX2RwX3ZzY19zZHAgdnNjOwo+IC19Owo+IC0KPiAgI2RlZmluZSBRVUlS S19MVkRTX1NTQ19ESVNBQkxFICgxPDwxKQo+ICAjZGVmaW5lIFFVSVJLX0lOVkVSVF9CUklHSFRO RVNTICgxPDwyKQo+ICAjZGVmaW5lIFFVSVJLX0JBQ0tMSUdIVF9QUkVTRU5UICgxPDwzKQo+IEBA IC0xMDQxLDggKzEwMDUsNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gIAo+ICAJc3Ry dWN0IGk5MTVfcG93ZXJfZG9tYWlucyBwb3dlcl9kb21haW5zOwo+ICAKPiAtCXN0cnVjdCBpOTE1 X3BzciBwc3I7Cj4gLQo+ICAJc3RydWN0IGk5MTVfZ3B1X2Vycm9yIGdwdV9lcnJvcjsKPiAgCj4g IAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqdmx2X3BjdHg7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2lycS5jCj4gaW5kZXggYjI0NTEwOWY3M2UzLi5iMGFlZTQ3YzdhZDQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfaXJxLmMKPiBAQCAtMjA1NywxMCArMjA1NywyMiBAQCBzdGF0aWMgdm9pZCBpdmJf ZGlzcGxheV9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g IAkJaXZiX2Vycl9pbnRfaGFuZGxlcihkZXZfcHJpdik7Cj4gIAo+ICAJaWYgKGRlX2lpciAmIERF X0VEUF9QU1JfSU5UX0hTVykgewo+IC0JCXUzMiBwc3JfaWlyID0gaW50ZWxfdW5jb3JlX3JlYWQo JmRldl9wcml2LT51bmNvcmUsIEVEUF9QU1JfSUlSKTsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqZW5jb2RlcjsKPiAgCj4gLQkJaW50ZWxfcHNyX2lycV9oYW5kbGVyKGRldl9wcml2LCBwc3Jf aWlyKTsKPiAtCQlpbnRlbF91bmNvcmVfd3JpdGUoJmRldl9wcml2LT51bmNvcmUsIEVEUF9QU1Jf SUlSLCBwc3JfaWlyKTsKPiArCQlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwgZW5j b2Rlcikgewo+ICsJCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2Rw KGVuY29kZXIpOwo+ICsKPiArCQkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VE UCAmJgo+ICsJCQkgICAgQ0FOX1BTUihpbnRlbF9kcCkpIHsKPiArCQkJCXUzMiBwc3JfaWlyID0g aW50ZWxfdW5jb3JlX3JlYWQoJmRldl9wcml2LT51bmNvcmUsCj4gKwkJCQkJCQkJRURQX1BTUl9J SVIpOwo+ICsKPiArCQkJCWludGVsX3Bzcl9pcnFfaGFuZGxlcihpbnRlbF9kcCwgcHNyX2lpcik7 Cj4gKwkJCQlpbnRlbF91bmNvcmVfd3JpdGUoJmRldl9wcml2LT51bmNvcmUsCj4gKwkJCQkJCSAg IEVEUF9QU1JfSUlSLCBwc3JfaWlyKTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJfQo+ICAJ fQo+ICAKPiAgCWlmIChkZV9paXIgJiBERV9BVVhfQ0hBTk5FTF9BX0lWQikKPiBAQCAtMjI2OCwy MSArMjI4MCwzNCBAQCBnZW44X2RlX21pc2NfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCB1MzIgaWlyKQo+ICAJfQo+ICAKPiAgCWlmIChpaXIgJiBHRU44X0RF X0VEUF9QU1IpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiAgCQl1MzIg cHNyX2lpcjsKPiAgCQlpOTE1X3JlZ190IGlpcl9yZWc7Cj4gIAo+IC0JCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDEyKQo+IC0JCQlpaXJfcmVnID0gVFJBTlNfUFNSX0lJUihkZXZfcHJpdi0+ cHNyLnRyYW5zY29kZXIpOwo+IC0JCWVsc2UKPiAtCQkJaWlyX3JlZyA9IEVEUF9QU1JfSUlSOwo+ ICsJCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7Cj4gKwkJCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Cj4gIAo+ IC0JCXBzcl9paXIgPSBpbnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtPnVuY29yZSwgaWlyX3Jl Zyk7Cj4gLQkJaW50ZWxfdW5jb3JlX3dyaXRlKCZkZXZfcHJpdi0+dW5jb3JlLCBpaXJfcmVnLCBw c3JfaWlyKTsKPiArCQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIgJiYgQ0FOX1BTUihp bnRlbF9kcCkpIHsKPiArCQkJCWlpcl9yZWcgPSBUUkFOU19QU1JfSUlSKGludGVsX2RwLT5wc3Iu dHJhbnNjb2Rlcik7Cj4gKwkJCX0gZWxzZSBpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQ VVRfRURQICYmCj4gKwkJCQkgICBDQU5fUFNSKGludGVsX2RwKSkgewo+ICsJCQkJaWlyX3JlZyA9 IEVEUF9QU1JfSUlSOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJY29udGludWU7Cj4gKwkJCX0KPiAr Cj4gKwkJCXBzcl9paXIgPSBpbnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtPnVuY29yZSwgaWly X3JlZyk7Cj4gKwkJCWludGVsX3VuY29yZV93cml0ZSgmZGV2X3ByaXYtPnVuY29yZSwgaWlyX3Jl ZywgcHNyX2lpcik7Cj4gKwo+ICsJCQlpZiAocHNyX2lpcikKPiArCQkJCWZvdW5kID0gdHJ1ZTsK PiAgCj4gLQkJaWYgKHBzcl9paXIpCj4gLQkJCWZvdW5kID0gdHJ1ZTsKPiArCQkJaW50ZWxfcHNy X2lycV9oYW5kbGVyKGludGVsX2RwLCBwc3JfaWlyKTsKPiAgCj4gLQkJaW50ZWxfcHNyX2lycV9o YW5kbGVyKGRldl9wcml2LCBwc3JfaWlyKTsKPiArCQkJLyogcHJpb3IgR0VOMTIgb25seSBoYXZl IG9uZSBFRFAgUFNSICovCj4gKwkJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTIpCj4gKwkJ CQlicmVhazsKPiArCQl9Cj4gIAl9Cj4gIAo+ICAJaWYgKCFmb3VuZCkKPiAtLSAKPiAyLjI1LjAK PiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==