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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 4088DC433E0 for ; Thu, 14 Jan 2021 20:51:14 +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 F167523436 for ; Thu, 14 Jan 2021 20:51:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F167523436 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.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 7D33B6E13A; Thu, 14 Jan 2021 20:51:13 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id B97EF6E13A for ; Thu, 14 Jan 2021 20:51:12 +0000 (UTC) IronPort-SDR: dg+bHhczJ5lY3XA3lxnTOExpMaG+YNpcVvy4CPVpz8G6HkJ+d/OebsSR1xvaqtWxazcIRjh1T0 poJppaTfFbWg== X-IronPort-AV: E=McAfee;i="6000,8403,9864"; a="175862477" X-IronPort-AV: E=Sophos;i="5.79,347,1602572400"; d="scan'208";a="175862477" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jan 2021 12:51:10 -0800 IronPort-SDR: Lw2B5a25GRIoP2c0bPPuK6Qp40VJ3n1kzV8S3bcpY0F65yM6fgH4K+9TrE7NrvDIKCVg11byhY Yc0oKAAhAaHA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,347,1602572400"; d="scan'208";a="346011065" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.174]) by fmsmga007.fm.intel.com with SMTP; 14 Jan 2021 12:51:08 -0800 Received: by stinkbox (sSMTP sendmail emulation); Thu, 14 Jan 2021 22:51:07 +0200 From: Ville Syrjala To: intel-gfx@lists.freedesktop.org Date: Thu, 14 Jan 2021 22:50:46 +0200 Message-Id: <20210114205046.8247-8-ville.syrjala@linux.intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210114205046.8247-1-ville.syrjala@linux.intel.com> References: <20210114205046.8247-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 7/7] drm/i915: Introduce g4x_dp.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCk1v dmUgdGhlIGc0eCsgRFAgY29kZSBpbnRvIGEgbmV3IGZpbGUuIFRoaXMgd2lsbCBsZWF2ZSBtb3N0 bHkKcGxhdGZvcm0gYWdub3N0aWMgY29kZSBpbiBpbnRlbF9kcC5jLiBXZWxsLCB0aGUgbWlzcGxh Y2VkIHBoeQp0ZXN0IHN0dWZmIHByZXR0eSBtdWNoIHJ1aW5zIHRoYXQsIGJ1dCBsZXQncyBzcXVp bnQgcmVhbCBoYXJkCmZvciBub3cuCgpTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZp bGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9nNHhfZHAuYyAgICAgICAgIHwgMTQzMSArKysrKysrKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9nNHhfZHAuaCAgICAgICAgIHwgICAzNiArCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyAgfCAgICAxICsKIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyAgICAgICB8IDE0MTggKy0tLS0tLS0tLS0tLS0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oICAgICAgIHwgICAxMSAt CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwaW9fcGh5LmMgfCAgICAyICst CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5jICAgICAgfCAgICAxICsK IDggZmlsZXMgY2hhbmdlZCwgMTQ3MiBpbnNlcnRpb25zKCspLCAxNDI5IGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvZzR4X2RwLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2c0eF9kcC5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCAwMGQ0ZGQ1ZWNkYjcuLjM0OTE2ZmFjNDY0MyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTIzNSw2ICsyMzUsNyBAQCBpOTE1LXkgKz0gXAogCWRpc3Bs YXkvZHZvX25zMjUwMS5vIFwKIAlkaXNwbGF5L2R2b19zaWwxNjQubyBcCiAJZGlzcGxheS9kdm9f dGZwNDEwLm8gXAorCWRpc3BsYXkvZzR4X2RwLm8gXAogCWRpc3BsYXkvaWNsX2RzaS5vIFwKIAlk aXNwbGF5L2ludGVsX2NydC5vIFwKIAlkaXNwbGF5L2ludGVsX2RkaS5vIFwKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvZzR4X2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2c0eF9kcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uMmNhMWQwNDgyMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9nNHhfZHAuYwpAQCAtMCwwICsxLDE0MzEgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlv bgorICovCisKKyNpbmNsdWRlICJnNHhfZHAuaCIKKyNpbmNsdWRlICJpbnRlbF9hdWRpby5oIgor I2luY2x1ZGUgImludGVsX2Nvbm5lY3Rvci5oIgorI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlw ZXMuaCIKKyNpbmNsdWRlICJpbnRlbF9kcC5oIgorI2luY2x1ZGUgImludGVsX2RwX2xpbmtfdHJh aW5pbmcuaCIKKyNpbmNsdWRlICJpbnRlbF9kcGlvX3BoeS5oIgorI2luY2x1ZGUgImludGVsX2Zp Zm9fdW5kZXJydW4uaCIKKyNpbmNsdWRlICJpbnRlbF9oZG1pLmgiCisjaW5jbHVkZSAiaW50ZWxf aG90cGx1Zy5oIgorI2luY2x1ZGUgImludGVsX3BhbmVsLmgiCisjaW5jbHVkZSAiaW50ZWxfcHBz LmgiCisjaW5jbHVkZSAiaW50ZWxfc2lkZWJhbmQuaCIKKworc3RydWN0IGRwX2xpbmtfZHBsbCB7 CisJaW50IGNsb2NrOworCXN0cnVjdCBkcGxsIGRwbGw7Cit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRwX2xpbmtfZHBsbCBnNHhfZHBsbFtdID0geworCXsgMTYyMDAwLAorCQl7IC5wMSA9IDIs IC5wMiA9IDEwLCAubiA9IDIsIC5tMSA9IDIzLCAubTIgPSA4IH0gfSwKKwl7IDI3MDAwMCwKKwkJ eyAucDEgPSAxLCAucDIgPSAxMCwgLm4gPSAxLCAubTEgPSAxNCwgLm0yID0gMiB9IH0KK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBfbGlua19kcGxsIHBjaF9kcGxsW10gPSB7CisJeyAxNjIw MDAsCisJCXsgLnAxID0gMiwgLnAyID0gMTAsIC5uID0gMSwgLm0xID0gMTIsIC5tMiA9IDkgfSB9 LAorCXsgMjcwMDAwLAorCQl7IC5wMSA9IDEsIC5wMiA9IDEwLCAubiA9IDIsIC5tMSA9IDE0LCAu bTIgPSA4IH0gfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcF9saW5rX2RwbGwgdmx2X2Rw bGxbXSA9IHsKKwl7IDE2MjAwMCwKKwkJeyAucDEgPSAzLCAucDIgPSAyLCAubiA9IDUsIC5tMSA9 IDMsIC5tMiA9IDgxIH0gfSwKKwl7IDI3MDAwMCwKKwkJeyAucDEgPSAyLCAucDIgPSAyLCAubiA9 IDEsIC5tMSA9IDIsIC5tMiA9IDI3IH0gfQorfTsKKworLyoKKyAqIENIViBzdXBwb3J0cyBlRFAg MS40IHRoYXQgaGF2ZSAgbW9yZSBsaW5rIHJhdGVzLgorICogQmVsb3cgb25seSBwcm92aWRlcyB0 aGUgZml4ZWQgcmF0ZSBidXQgZXhjbHVkZSB2YXJpYWJsZSByYXRlLgorICovCitzdGF0aWMgY29u c3Qgc3RydWN0IGRwX2xpbmtfZHBsbCBjaHZfZHBsbFtdID0geworCS8qCisJICogQ0hWIHJlcXVp cmVzIHRvIHByb2dyYW0gZnJhY3Rpb25hbCBkaXZpc2lvbiBmb3IgbTIuCisJICogbTIgaXMgc3Rv cmVkIGluIGZpeGVkIHBvaW50IGZvcm1hdCB1c2luZyBmb3JtdWxhIGJlbG93CisJICogKG0yX2lu dCA8PCAyMikgfCBtMl9mcmFjdGlvbgorCSAqLworCXsgMTYyMDAwLAkvKiBtMl9pbnQgPSAzMiwg bTJfZnJhY3Rpb24gPSAxNjc3NzIyICovCisJCXsgLnAxID0gNCwgLnAyID0gMiwgLm4gPSAxLCAu bTEgPSAyLCAubTIgPSAweDgxOTk5OWEgfSB9LAorCXsgMjcwMDAwLAkvKiBtMl9pbnQgPSAyNywg bTJfZnJhY3Rpb24gPSAwICovCisJCXsgLnAxID0gNCwgLnAyID0gMSwgLm4gPSAxLCAubTEgPSAy LCAubTIgPSAweDZjMDAwMDAgfSB9LAorfTsKKworY29uc3Qgc3RydWN0IGRwbGwgKnZsdl9nZXRf ZHBsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlyZXR1cm4gSVNfQ0hFUlJZ VklFVyhpOTE1KSA/ICZjaHZfZHBsbFswXS5kcGxsIDogJnZsdl9kcGxsWzBdLmRwbGw7Cit9CisK K3ZvaWQgaW50ZWxfZHBfc2V0X2Nsb2NrKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAor CQkJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOworCWNv bnN0IHN0cnVjdCBkcF9saW5rX2RwbGwgKmRpdmlzb3IgPSBOVUxMOworCWludCBpLCBjb3VudCA9 IDA7CisKKwlpZiAoSVNfRzRYKGRldl9wcml2KSkgeworCQlkaXZpc29yID0gZzR4X2RwbGw7CisJ CWNvdW50ID0gQVJSQVlfU0laRShnNHhfZHBsbCk7CisJfSBlbHNlIGlmIChIQVNfUENIX1NQTElU KGRldl9wcml2KSkgeworCQlkaXZpc29yID0gcGNoX2RwbGw7CisJCWNvdW50ID0gQVJSQVlfU0la RShwY2hfZHBsbCk7CisJfSBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgeworCQlk aXZpc29yID0gY2h2X2RwbGw7CisJCWNvdW50ID0gQVJSQVlfU0laRShjaHZfZHBsbCk7CisJfSBl bHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkgeworCQlkaXZpc29yID0gdmx2X2RwbGw7 CisJCWNvdW50ID0gQVJSQVlfU0laRSh2bHZfZHBsbCk7CisJfQorCisJaWYgKGRpdmlzb3IgJiYg Y291bnQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCWlmIChwaXBlX2Nv bmZpZy0+cG9ydF9jbG9jayA9PSBkaXZpc29yW2ldLmNsb2NrKSB7CisJCQkJcGlwZV9jb25maWct PmRwbGwgPSBkaXZpc29yW2ldLmRwbGw7CisJCQkJcGlwZV9jb25maWctPmNsb2NrX3NldCA9IHRy dWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2Rw X3ByZXBhcmUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkgICAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKKwlzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOworCWVudW0gcG9y dCBwb3J0ID0gZW5jb2Rlci0+cG9ydDsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2lu dGVsX2NydGMocGlwZV9jb25maWctPnVhcGkuY3J0Yyk7CisJY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUgPSAmcGlwZV9jb25maWctPmh3LmFkanVzdGVkX21vZGU7 CisKKwlpbnRlbF9kcF9zZXRfbGlua19wYXJhbXMoaW50ZWxfZHAsCisJCQkJIHBpcGVfY29uZmln LT5wb3J0X2Nsb2NrLAorCQkJCSBwaXBlX2NvbmZpZy0+bGFuZV9jb3VudCk7CisKKwkvKgorCSAq IFRoZXJlIGFyZSBmb3VyIGtpbmRzIG9mIERQIHJlZ2lzdGVyczoKKwkgKiBJQlggUENICisJICog U05CIENQVQorCSAqIElWQiBDUFUKKwkgKiBDUFQgUENICisJICoKKwkgKiBJQlggUENIIGFuZCBD UFUgYXJlIHRoZSBzYW1lIGZvciBhbG1vc3QgZXZlcnl0aGluZywKKwkgKiBleGNlcHQgdGhhdCB0 aGUgQ1BVIERQIFBMTCBpcyBjb25maWd1cmVkIGluIHRoaXMKKwkgKiByZWdpc3RlcgorCSAqCisJ ICogQ1BUIFBDSCBpcyBxdWl0ZSBkaWZmZXJlbnQsIGhhdmluZyBtYW55IGJpdHMgbW92ZWQKKwkg KiB0byB0aGUgVFJBTlNfRFBfQ1RMIHJlZ2lzdGVyIGluc3RlYWQuIFRoYXQKKwkgKiBjb25maWd1 cmF0aW9uIGhhcHBlbnMgKG9kZGx5KSBpbiBpbGtfcGNoX2VuYWJsZQorCSAqLworCisJLyogUHJl c2VydmUgdGhlIEJJT1MtY29tcHV0ZWQgZGV0ZWN0ZWQgYml0LiBUaGlzIGlzCisJICogc3VwcG9z ZWQgdG8gYmUgcmVhZC1vbmx5LgorCSAqLworCWludGVsX2RwLT5EUCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX0RFVEVDVEVEOworCisJLyogSGFu ZGxlIERQIGJpdHMgaW4gY29tbW9uIGJldHdlZW4gYWxsIHRocmVlIHJlZ2lzdGVyIGZvcm1hdHMg Ki8KKwlpbnRlbF9kcC0+RFAgfD0gRFBfVk9MVEFHRV8wXzQgfCBEUF9QUkVfRU1QSEFTSVNfMDsK KwlpbnRlbF9kcC0+RFAgfD0gRFBfUE9SVF9XSURUSChwaXBlX2NvbmZpZy0+bGFuZV9jb3VudCk7 CisKKwkvKiBTcGxpdCBvdXQgdGhlIElCWC9DUFUgdnMgQ1BUIHNldHRpbmdzICovCisKKwlpZiAo SVNfSVZZQlJJREdFKGRldl9wcml2KSAmJiBwb3J0ID09IFBPUlRfQSkgeworCQlpZiAoYWRqdXN0 ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKKwkJCWludGVsX2RwLT5EUCB8 PSBEUF9TWU5DX0hTX0hJR0g7CisJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RF X0ZMQUdfUFZTWU5DKQorCQkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNfVlNfSElHSDsKKwkJaW50 ZWxfZHAtPkRQIHw9IERQX0xJTktfVFJBSU5fT0ZGX0NQVDsKKworCQlpZiAoZHJtX2RwX2VuaGFu Y2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkpCisJCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5I QU5DRURfRlJBTUlORzsKKworCQlpbnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUxfSVZCKGNydGMt PnBpcGUpOworCX0gZWxzZSBpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpICYmIHBvcnQgIT0gUE9S VF9BKSB7CisJCXUzMiB0cmFuc19kcDsKKworCQlpbnRlbF9kcC0+RFAgfD0gRFBfTElOS19UUkFJ Tl9PRkZfQ1BUOworCisJCXRyYW5zX2RwID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVFJBTlNf RFBfQ1RMKGNydGMtPnBpcGUpKTsKKwkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50 ZWxfZHAtPmRwY2QpKQorCQkJdHJhbnNfZHAgfD0gVFJBTlNfRFBfRU5IX0ZSQU1JTkc7CisJCWVs c2UKKwkJCXRyYW5zX2RwICY9IH5UUkFOU19EUF9FTkhfRlJBTUlORzsKKwkJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIFRSQU5TX0RQX0NUTChjcnRjLT5waXBlKSwgdHJhbnNfZHApOworCX0gZWxz ZSB7CisJCWlmIChJU19HNFgoZGV2X3ByaXYpICYmIHBpcGVfY29uZmlnLT5saW1pdGVkX2NvbG9y X3JhbmdlKQorCQkJaW50ZWxfZHAtPkRQIHw9IERQX0NPTE9SX1JBTkdFXzE2XzIzNTsKKworCQlp ZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKKwkJCWludGVs X2RwLT5EUCB8PSBEUF9TWU5DX0hTX0hJR0g7CisJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfUFZTWU5DKQorCQkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNfVlNfSElH SDsKKwkJaW50ZWxfZHAtPkRQIHw9IERQX0xJTktfVFJBSU5fT0ZGOworCisJCWlmIChkcm1fZHBf ZW5oYW5jZWRfZnJhbWVfY2FwKGludGVsX2RwLT5kcGNkKSkKKwkJCWludGVsX2RwLT5EUCB8PSBE UF9FTkhBTkNFRF9GUkFNSU5HOworCisJCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKKwkJ CWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NFTF9DSFYoY3J0Yy0+cGlwZSk7CisJCWVsc2UKKwkJ CWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NFTChjcnRjLT5waXBlKTsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIGFzc2VydF9kcF9wb3J0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGJvb2wgc3Rh dGUpCit7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdf cG9ydChpbnRlbF9kcCk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7CisJYm9vbCBjdXJfc3RhdGUgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZykgJiBEUF9QT1JUX0VOOworCisJ STkxNV9TVEFURV9XQVJOKGN1cl9zdGF0ZSAhPSBzdGF0ZSwKKwkJCSJbRU5DT0RFUjolZDolc10g c3RhdGUgYXNzZXJ0aW9uIGZhaWx1cmUgKGV4cGVjdGVkICVzLCBjdXJyZW50ICVzKVxuIiwKKwkJ CWRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lLAor CQkJb25vZmYoc3RhdGUpLCBvbm9mZihjdXJfc3RhdGUpKTsKK30KKyNkZWZpbmUgYXNzZXJ0X2Rw X3BvcnRfZGlzYWJsZWQoZCkgYXNzZXJ0X2RwX3BvcnQoKGQpLCBmYWxzZSkKKworc3RhdGljIHZv aWQgYXNzZXJ0X2VkcF9wbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29s IHN0YXRlKQoreworCWJvb2wgY3VyX3N0YXRlID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRFBf QSkgJiBEUF9QTExfRU5BQkxFOworCisJSTkxNV9TVEFURV9XQVJOKGN1cl9zdGF0ZSAhPSBzdGF0 ZSwKKwkJCSJlRFAgUExMIHN0YXRlIGFzc2VydGlvbiBmYWlsdXJlIChleHBlY3RlZCAlcywgY3Vy cmVudCAlcylcbiIsCisJCQlvbm9mZihzdGF0ZSksIG9ub2ZmKGN1cl9zdGF0ZSkpOworfQorI2Rl ZmluZSBhc3NlcnRfZWRwX3BsbF9lbmFibGVkKGQpIGFzc2VydF9lZHBfcGxsKChkKSwgdHJ1ZSkK KyNkZWZpbmUgYXNzZXJ0X2VkcF9wbGxfZGlzYWJsZWQoZCkgYXNzZXJ0X2VkcF9wbGwoKGQpLCBm YWxzZSkKKworc3RhdGljIHZvaWQgaWxrX2VkcF9wbGxfb24oc3RydWN0IGludGVsX2RwICppbnRl bF9kcCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykK K3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25maWct PnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjcnRjLT5iYXNlLmRldik7CisKKwlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZfcHJpdiwgcGlw ZV9jb25maWctPmNwdV90cmFuc2NvZGVyKTsKKwlhc3NlcnRfZHBfcG9ydF9kaXNhYmxlZChpbnRl bF9kcCk7CisJYXNzZXJ0X2VkcF9wbGxfZGlzYWJsZWQoZGV2X3ByaXYpOworCisJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJlbmFibGluZyBlRFAgUExMIGZvciBjbG9jayAlZFxuIiwKKwkJ ICAgIHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrKTsKKworCWludGVsX2RwLT5EUCAmPSB+RFBfUExM X0ZSRVFfTUFTSzsKKworCWlmIChwaXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9PSAxNjIwMDApCisJ CWludGVsX2RwLT5EUCB8PSBEUF9QTExfRlJFUV8xNjJNSFo7CisJZWxzZQorCQlpbnRlbF9kcC0+ RFAgfD0gRFBfUExMX0ZSRVFfMjcwTUhaOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQ X0EsIGludGVsX2RwLT5EUCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUF9B KTsKKwl1ZGVsYXkoNTAwKTsKKworCS8qCisJICogW0RldklMS10gV29yayBhcm91bmQgcmVxdWly ZWQgd2hlbiBlbmFibGluZyBEUCBQTEwKKwkgKiB3aGlsZSBhIHBpcGUgaXMgZW5hYmxlZCBnb2lu ZyB0byBGREk6CisJICogMS4gV2FpdCBmb3IgdGhlIHN0YXJ0IG9mIHZlcnRpY2FsIGJsYW5rIG9u IHRoZSBlbmFibGVkIHBpcGUgZ29pbmcgdG8gRkRJCisJICogMi4gUHJvZ3JhbSBEUCBQTEwgZW5h YmxlCisJICovCisJaWYgKElTX0dFTihkZXZfcHJpdiwgNSkpCisJCWludGVsX3dhaXRfZm9yX3Zi bGFua19pZl9hY3RpdmUoZGV2X3ByaXYsICFjcnRjLT5waXBlKTsKKworCWludGVsX2RwLT5EUCB8 PSBEUF9QTExfRU5BQkxFOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQX0EsIGludGVs X2RwLT5EUCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUF9BKTsKKwl1ZGVs YXkoMjAwKTsKK30KKworc3RhdGljIHZvaWQgaWxrX2VkcF9wbGxfb2ZmKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCisJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9j cnRjX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0Yyhv bGRfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKworCWFzc2VydF9waXBlX2Rpc2FibGVk KGRldl9wcml2LCBvbGRfY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXIpOworCWFzc2VydF9kcF9w b3J0X2Rpc2FibGVkKGludGVsX2RwKTsKKwlhc3NlcnRfZWRwX3BsbF9lbmFibGVkKGRldl9wcml2 KTsKKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiZGlzYWJsaW5nIGVEUCBQTExcbiIp OworCisJaW50ZWxfZHAtPkRQICY9IH5EUF9QTExfRU5BQkxFOworCisJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIERQX0EsIGludGVsX2RwLT5EUCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCBEUF9BKTsKKwl1ZGVsYXkoMjAwKTsKK30KKworc3RhdGljIGJvb2wgY3B0X2RwX3Bv cnRfc2VsZWN0ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSBlbnVt IHBvcnQgcG9ydCwgZW51bSBwaXBlICpwaXBlKQoreworCWVudW0gcGlwZSBwOworCisJZm9yX2Vh Y2hfcGlwZShkZXZfcHJpdiwgcCkgeworCQl1MzIgdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgVFJBTlNfRFBfQ1RMKHApKTsKKworCQlpZiAoKHZhbCAmIFRSQU5TX0RQX1BPUlRfU0VMX01B U0spID09IFRSQU5TX0RQX1BPUlRfU0VMKHBvcnQpKSB7CisJCQkqcGlwZSA9IHA7CisJCQlyZXR1 cm4gdHJ1ZTsKKwkJfQorCX0KKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiTm8gcGlw ZSBmb3IgRFAgcG9ydCAlYyBmb3VuZFxuIiwKKwkJICAgIHBvcnRfbmFtZShwb3J0KSk7CisKKwkv KiBtdXN0IGluaXRpYWxpemUgcGlwZSB0byBzb21ldGhpbmcgZm9yIHRoZSBhc3NlcnRzICovCisJ KnBpcGUgPSBQSVBFX0E7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgaW50ZWxfZHBfcG9y dF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgIGk5MTVf cmVnX3QgZHBfcmVnLCBlbnVtIHBvcnQgcG9ydCwKKwkJCSAgIGVudW0gcGlwZSAqcGlwZSkKK3sK Kwlib29sIHJldDsKKwl1MzIgdmFsOworCisJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg ZHBfcmVnKTsKKworCXJldCA9IHZhbCAmIERQX1BPUlRfRU47CisKKwkvKiBhc3NlcnRzIHdhbnQg dG8ga25vdyB0aGUgcGlwZSBldmVuIGlmIHRoZSBwb3J0IGlzIGRpc2FibGVkICovCisJaWYgKElT X0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9PSBQT1JUX0EpCisJCSpwaXBlID0gKHZhbCAm IERQX1BJUEVfU0VMX01BU0tfSVZCKSA+PiBEUF9QSVBFX1NFTF9TSElGVF9JVkI7CisJZWxzZSBp ZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpICYmIHBvcnQgIT0gUE9SVF9BKQorCQlyZXQgJj0gY3B0 X2RwX3BvcnRfc2VsZWN0ZWQoZGV2X3ByaXYsIHBvcnQsIHBpcGUpOworCWVsc2UgaWYgKElTX0NI RVJSWVZJRVcoZGV2X3ByaXYpKQorCQkqcGlwZSA9ICh2YWwgJiBEUF9QSVBFX1NFTF9NQVNLX0NI VikgPj4gRFBfUElQRV9TRUxfU0hJRlRfQ0hWOworCWVsc2UKKwkJKnBpcGUgPSAodmFsICYgRFBf UElQRV9TRUxfTUFTSykgPj4gRFBfUElQRV9TRUxfU0hJRlQ7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgYm9vbCBpbnRlbF9kcF9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXIsCisJCQkJICBlbnVtIHBpcGUgKnBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisJc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKKwlpbnRlbF93YWtl cmVmX3Qgd2FrZXJlZjsKKwlib29sIHJldDsKKworCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bv d2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LAorCQkJCQkJICAgICBlbmNvZGVyLT5wb3dlcl9k b21haW4pOworCWlmICghd2FrZXJlZikKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0ID0gaW50ZWxf ZHBfcG9ydF9lbmFibGVkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywKKwkJCQkgICAg ZW5jb2Rlci0+cG9ydCwgcGlwZSk7CisKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJp diwgZW5jb2Rlci0+cG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIGludGVsX2RwX2dldF9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVu Y29kZXIsCisJCQkJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5k ZXYpOworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rl cik7CisJdTMyIHRtcCwgZmxhZ3MgPSAwOworCWVudW0gcG9ydCBwb3J0ID0gZW5jb2Rlci0+cG9y dDsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25maWct PnVhcGkuY3J0Yyk7CisKKwlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKQor CQlwaXBlX2NvbmZpZy0+b3V0cHV0X3R5cGVzIHw9IEJJVChJTlRFTF9PVVRQVVRfRURQKTsKKwll bHNlCisJCXBpcGVfY29uZmlnLT5vdXRwdXRfdHlwZXMgfD0gQklUKElOVEVMX09VVFBVVF9EUCk7 CisKKwl0bXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7 CisKKwlwaXBlX2NvbmZpZy0+aGFzX2F1ZGlvID0gdG1wICYgRFBfQVVESU9fT1VUUFVUX0VOQUJM RSAmJiBwb3J0ICE9IFBPUlRfQTsKKworCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikgJiYgcG9y dCAhPSBQT1JUX0EpIHsKKwkJdTMyIHRyYW5zX2RwID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwK KwkJCQkJICAgICBUUkFOU19EUF9DVEwoY3J0Yy0+cGlwZSkpOworCisJCWlmICh0cmFuc19kcCAm IFRSQU5TX0RQX0hTWU5DX0FDVElWRV9ISUdIKQorCQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19Q SFNZTkM7CisJCWVsc2UKKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCisJCWlm ICh0cmFuc19kcCAmIFRSQU5TX0RQX1ZTWU5DX0FDVElWRV9ISUdIKQorCQkJZmxhZ3MgfD0gRFJN X01PREVfRkxBR19QVlNZTkM7CisJCWVsc2UKKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTlZT WU5DOworCX0gZWxzZSB7CisJCWlmICh0bXAgJiBEUF9TWU5DX0hTX0hJR0gpCisJCQlmbGFncyB8 PSBEUk1fTU9ERV9GTEFHX1BIU1lOQzsKKwkJZWxzZQorCQkJZmxhZ3MgfD0gRFJNX01PREVfRkxB R19OSFNZTkM7CisKKwkJaWYgKHRtcCAmIERQX1NZTkNfVlNfSElHSCkKKwkJCWZsYWdzIHw9IERS TV9NT0RFX0ZMQUdfUFZTWU5DOworCQllbHNlCisJCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX05W U1lOQzsKKwl9CisKKwlwaXBlX2NvbmZpZy0+aHcuYWRqdXN0ZWRfbW9kZS5mbGFncyB8PSBmbGFn czsKKworCWlmIChJU19HNFgoZGV2X3ByaXYpICYmIHRtcCAmIERQX0NPTE9SX1JBTkdFXzE2XzIz NSkKKwkJcGlwZV9jb25maWctPmxpbWl0ZWRfY29sb3JfcmFuZ2UgPSB0cnVlOworCisJcGlwZV9j b25maWctPmxhbmVfY291bnQgPQorCQkoKHRtcCAmIERQX1BPUlRfV0lEVEhfTUFTSykgPj4gRFBf UE9SVF9XSURUSF9TSElGVCkgKyAxOworCisJaW50ZWxfZHBfZ2V0X21fbihjcnRjLCBwaXBlX2Nv bmZpZyk7CisKKwlpZiAocG9ydCA9PSBQT1JUX0EpIHsKKwkJaWYgKChpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCBEUF9BKSAmIERQX1BMTF9GUkVRX01BU0spID09IERQX1BMTF9GUkVRXzE2Mk1IWikK KwkJCXBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrID0gMTYyMDAwOworCQllbHNlCisJCQlwaXBlX2Nv bmZpZy0+cG9ydF9jbG9jayA9IDI3MDAwMDsKKwl9CisKKwlwaXBlX2NvbmZpZy0+aHcuYWRqdXN0 ZWRfbW9kZS5jcnRjX2Nsb2NrID0KKwkJaW50ZWxfZG90Y2xvY2tfY2FsY3VsYXRlKHBpcGVfY29u ZmlnLT5wb3J0X2Nsb2NrLAorCQkJCQkgJnBpcGVfY29uZmlnLT5kcF9tX24pOworCisJaWYgKGlu dGVsX2RwX2lzX2VkcChpbnRlbF9kcCkgJiYgZGV2X3ByaXYtPnZidC5lZHAuYnBwICYmCisJICAg IHBpcGVfY29uZmlnLT5waXBlX2JwcCA+IGRldl9wcml2LT52YnQuZWRwLmJwcCkgeworCQkvKgor CQkgKiBUaGlzIGlzIGEgYmlnIGZhdCB1Z2x5IGhhY2suCisJCSAqCisJCSAqIFNvbWUgbWFjaGlu ZXMgaW4gVUVGSSBib290IG1vZGUgcHJvdmlkZSB1cyBhIFZCVCB0aGF0IGhhcyAxOAorCQkgKiBi cHAgYW5kIDEuNjIgR0h6IGxpbmsgYmFuZHdpZHRoIGZvciBlRFAsIHdoaWNoIGZvciByZWFzb25z CisJCSAqIHVua25vd24gd2UgZmFpbCB0byBsaWdodCB1cC4gWWV0IHRoZSBzYW1lIEJJT1MgYm9v dHMgdXAgd2l0aAorCQkgKiAyNCBicHAgYW5kIDIuNyBHSHogbGluay4gVXNlIHRoZSBzYW1lIGJw cCBhcyB0aGUgQklPUyB1c2VzIGFzCisJCSAqIG1heCwgbm90IHdoYXQgaXQgdGVsbHMgdXMgdG8g dXNlLgorCQkgKgorCQkgKiBOb3RlOiBUaGlzIHdpbGwgc3RpbGwgYmUgYnJva2VuIGlmIHRoZSBl RFAgcGFuZWwgaXMgbm90IGxpdAorCQkgKiB1cCBieSB0aGUgQklPUywgYW5kIHRodXMgd2UgY2Fu J3QgZ2V0IHRoZSBtb2RlIGF0IG1vZHVsZQorCQkgKiBsb2FkLgorCQkgKi8KKwkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgInBpcGUgaGFzICVkIGJwcCBmb3IgZURQIHBhbmVs LCBvdmVycmlkaW5nIEJJT1MtcHJvdmlkZWQgbWF4ICVkIGJwcFxuIiwKKwkJCSAgICBwaXBlX2Nv bmZpZy0+cGlwZV9icHAsIGRldl9wcml2LT52YnQuZWRwLmJwcCk7CisJCWRldl9wcml2LT52YnQu ZWRwLmJwcCA9IHBpcGVfY29uZmlnLT5waXBlX2JwcDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitp bnRlbF9kcF9saW5rX2Rvd24oc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCSAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsK KwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwor CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhvbGRfY3J0Y19zdGF0ZS0+ dWFwaS5jcnRjKTsKKwllbnVtIHBvcnQgcG9ydCA9IGVuY29kZXItPnBvcnQ7CisJdTMyIERQID0g aW50ZWxfZHAtPkRQOworCisJaWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAorCQkJKGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKSAmCisJCQkgRFBfUE9S VF9FTikgPT0gMCkpCisJCXJldHVybjsKKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAi XG4iKTsKKworCWlmICgoSVNfSVZZQlJJREdFKGRldl9wcml2KSAmJiBwb3J0ID09IFBPUlRfQSkg fHwKKwkgICAgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSAmJiBwb3J0ICE9IFBPUlRfQSkpIHsKKwkJ RFAgJj0gfkRQX0xJTktfVFJBSU5fTUFTS19DUFQ7CisJCURQIHw9IERQX0xJTktfVFJBSU5fUEFU X0lETEVfQ1BUOworCX0gZWxzZSB7CisJCURQICY9IH5EUF9MSU5LX1RSQUlOX01BU0s7CisJCURQ IHw9IERQX0xJTktfVFJBSU5fUEFUX0lETEU7CisJfQorCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgRFApOworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZf cHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOworCisJRFAgJj0gfihEUF9QT1JUX0VOIHwgRFBf QVVESU9fT1VUUFVUX0VOQUJMRSk7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2Rw LT5vdXRwdXRfcmVnLCBEUCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRl bF9kcC0+b3V0cHV0X3JlZyk7CisKKwkvKgorCSAqIEhXIHdvcmthcm91bmQgZm9yIElCWCwgd2Ug bmVlZCB0byBtb3ZlIHRoZSBwb3J0CisJICogdG8gdHJhbnNjb2RlciBBIGFmdGVyIGRpc2FibGlu ZyBpdCB0byBhbGxvdyB0aGUKKwkgKiBtYXRjaGluZyBIRE1JIHBvcnQgdG8gYmUgZW5hYmxlZCBv biB0cmFuc2NvZGVyIEEuCisJICovCisJaWYgKEhBU19QQ0hfSUJYKGRldl9wcml2KSAmJiBjcnRj LT5waXBlID09IFBJUEVfQiAmJiBwb3J0ICE9IFBPUlRfQSkgeworCQkvKgorCQkgKiBXZSBnZXQg Q1BVL1BDSCBGSUZPIHVuZGVycnVucyBvbiB0aGUgb3RoZXIgcGlwZSB3aGVuCisJCSAqIGRvaW5n IHRoZSB3b3JrYXJvdW5kLiBTd2VlcCB0aGVtIHVuZGVyIHRoZSBydWcuCisJCSAqLworCQlpbnRl bF9zZXRfY3B1X2ZpZm9fdW5kZXJydW5fcmVwb3J0aW5nKGRldl9wcml2LCBQSVBFX0EsIGZhbHNl KTsKKwkJaW50ZWxfc2V0X3BjaF9maWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgUElQ RV9BLCBmYWxzZSk7CisKKwkJLyogYWx3YXlzIGVuYWJsZSB3aXRoIHBhdHRlcm4gMSAoYXMgcGVy IHNwZWMpICovCisJCURQICY9IH4oRFBfUElQRV9TRUxfTUFTSyB8IERQX0xJTktfVFJBSU5fTUFT Syk7CisJCURQIHw9IERQX1BPUlRfRU4gfCBEUF9QSVBFX1NFTChQSVBFX0EpIHwKKwkJCURQX0xJ TktfVFJBSU5fUEFUXzE7CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0 cHV0X3JlZywgRFApOworCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2Rw LT5vdXRwdXRfcmVnKTsKKworCQlEUCAmPSB+RFBfUE9SVF9FTjsKKwkJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCk7CisJCWludGVsX2RlX3Bvc3Rpbmdf cmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOworCisJCWludGVsX3dhaXRfZm9y X3ZibGFua19pZl9hY3RpdmUoZGV2X3ByaXYsIFBJUEVfQSk7CisJCWludGVsX3NldF9jcHVfZmlm b191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2X3ByaXYsIFBJUEVfQSwgdHJ1ZSk7CisJCWludGVsX3Nl dF9wY2hfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2X3ByaXYsIFBJUEVfQSwgdHJ1ZSk7CisJ fQorCisJbXNsZWVwKGludGVsX2RwLT5wYW5lbF9wb3dlcl9kb3duX2RlbGF5KTsKKworCWludGVs X2RwLT5EUCA9IERQOworCisJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJS WVZJRVcoZGV2X3ByaXYpKSB7CisJCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCisJCXdpdGhf aW50ZWxfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpCisJCQlpbnRlbF9kcC0+YWN0aXZlX3Bp cGUgPSBJTlZBTElEX1BJUEU7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRlbF9kaXNhYmxlX2Rw KHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICAgICBzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg Km9sZF9jcnRjX3N0YXRlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqb2xkX2Nvbm5fc3RhdGUpCit7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190 b19pbnRlbF9kcChlbmNvZGVyKTsKKworCWludGVsX2RwLT5saW5rX3RyYWluZWQgPSBmYWxzZTsK KworCWlmIChvbGRfY3J0Y19zdGF0ZS0+aGFzX2F1ZGlvKQorCQlpbnRlbF9hdWRpb19jb2RlY19k aXNhYmxlKGVuY29kZXIsCisJCQkJCSAgb2xkX2NydGNfc3RhdGUsIG9sZF9jb25uX3N0YXRlKTsK KworCS8qIE1ha2Ugc3VyZSB0aGUgcGFuZWwgaXMgb2ZmIGJlZm9yZSB0cnlpbmcgdG8gY2hhbmdl IHRoZSBtb2RlLiBCdXQgYWxzbworCSAqIGVuc3VyZSB0aGF0IHdlIGhhdmUgdmRkIHdoaWxlIHdl IHN3aXRjaCBvZmYgdGhlIHBhbmVsLiAqLworCWludGVsX3Bwc192ZGRfb24oaW50ZWxfZHApOwor CWludGVsX2VkcF9iYWNrbGlnaHRfb2ZmKG9sZF9jb25uX3N0YXRlKTsKKwlpbnRlbF9kcF9zZXRf cG93ZXIoaW50ZWxfZHAsIERQX1NFVF9QT1dFUl9EMyk7CisJaW50ZWxfcHBzX29mZihpbnRlbF9k cCk7CisJaW50ZWxfZHAtPmZybC5pc190cmFpbmVkID0gZmFsc2U7CisJaW50ZWxfZHAtPmZybC50 cmFpbmVkX3JhdGVfZ2JwcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGc0eF9kaXNhYmxlX2RwKHN0 cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICAgc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCisJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2Ny dGNfc3RhdGUsCisJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nv bm5fc3RhdGUpCit7CisJaW50ZWxfZGlzYWJsZV9kcChzdGF0ZSwgZW5jb2Rlciwgb2xkX2NydGNf c3RhdGUsIG9sZF9jb25uX3N0YXRlKTsKK30KKworc3RhdGljIHZvaWQgdmx2X2Rpc2FibGVfZHAo c3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgICBzdHJ1Y3QgaW50ZWxfZW5j b2RlciAqZW5jb2RlciwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRf Y3J0Y19zdGF0ZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRf Y29ubl9zdGF0ZSkKK3sKKwlpbnRlbF9kaXNhYmxlX2RwKHN0YXRlLCBlbmNvZGVyLCBvbGRfY3J0 Y19zdGF0ZSwgb2xkX2Nvbm5fc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBnNHhfcG9zdF9kaXNh YmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJCXN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyLAorCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpv bGRfY3J0Y19zdGF0ZSwKKwkJCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xk X2Nvbm5fc3RhdGUpCit7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRl bF9kcChlbmNvZGVyKTsKKwllbnVtIHBvcnQgcG9ydCA9IGVuY29kZXItPnBvcnQ7CisKKwkvKgor CSAqIEJzcGVjIGRvZXMgbm90IGxpc3QgYSBzcGVjaWZpYyBkaXNhYmxlIHNlcXVlbmNlIGZvciBn NHggRFAuCisJICogRm9sbG93IHRoZSBpbGsrIHNlcXVlbmNlIChkaXNhYmxlIHBpcGUgYmVmb3Jl IHRoZSBwb3J0KSBmb3IKKwkgKiBnNHggRFAgYXMgaXQgZG9lcyBub3Qgc3VmZmVyIGZyb20gdW5k ZXJydW5zIGxpa2UgdGhlIG5vcm1hbAorCSAqIGc0eCBtb2Rlc2V0IHNlcXVlbmNlIChkaXNhYmxl IHBpcGUgYWZ0ZXIgdGhlIHBvcnQpLgorCSAqLworCWludGVsX2RwX2xpbmtfZG93bihlbmNvZGVy LCBvbGRfY3J0Y19zdGF0ZSk7CisKKwkvKiBPbmx5IGlsaysgaGFzIHBvcnQgQSAqLworCWlmIChw b3J0ID09IFBPUlRfQSkKKwkJaWxrX2VkcF9wbGxfb2ZmKGludGVsX2RwLCBvbGRfY3J0Y19zdGF0 ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9wb3N0X2Rpc2FibGVfZHAoc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJ CQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLAorCQkJCWNv bnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZSkKK3sKKwlpbnRl bF9kcF9saW5rX2Rvd24oZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUpOworfQorCitzdGF0aWMgdm9p ZCBjaHZfcG9zdF9kaXNhYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAor CQkJCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJCWNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKKwkJCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisKKwlpbnRlbF9kcF9saW5r X2Rvd24oZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUpOworCisJdmx2X2RwaW9fZ2V0KGRldl9wcml2 KTsKKworCS8qIEFzc2VydCBkYXRhIGxhbmUgcmVzZXQgKi8KKwljaHZfZGF0YV9sYW5lX3NvZnRf cmVzZXQoZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUsIHRydWUpOworCisJdmx2X2RwaW9fcHV0KGRl dl9wcml2KTsKK30KKworc3RhdGljIHZvaWQKK2NwdF9zZXRfbGlua190cmFpbihzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLAorCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKKwkJICAgdTggZHBfdHJhaW5fcGF0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCXUzMiAqRFAgPSAmaW50ZWxf ZHAtPkRQOworCisJKkRQICY9IH5EUF9MSU5LX1RSQUlOX01BU0tfQ1BUOworCisJc3dpdGNoIChp bnRlbF9kcF90cmFpbmluZ19wYXR0ZXJuX3N5bWJvbChkcF90cmFpbl9wYXQpKSB7CisJY2FzZSBE UF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEU6CisJCSpEUCB8PSBEUF9MSU5LX1RSQUlOX09GRl9D UFQ7CisJCWJyZWFrOworCWNhc2UgRFBfVFJBSU5JTkdfUEFUVEVSTl8xOgorCQkqRFAgfD0gRFBf TElOS19UUkFJTl9QQVRfMV9DUFQ7CisJCWJyZWFrOworCWNhc2UgRFBfVFJBSU5JTkdfUEFUVEVS Tl8yOgorCQkqRFAgfD0gRFBfTElOS19UUkFJTl9QQVRfMl9DUFQ7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCU1JU1NJTkdfQ0FTRShpbnRlbF9kcF90cmFpbmluZ19wYXR0ZXJuX3N5bWJvbChkcF90 cmFpbl9wYXQpKTsKKwkJcmV0dXJuOworCX0KKworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBp bnRlbF9kcC0+b3V0cHV0X3JlZywgaW50ZWxfZHAtPkRQKTsKKwlpbnRlbF9kZV9wb3N0aW5nX3Jl YWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKK30KKworc3RhdGljIHZvaWQKK2c0 eF9zZXRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAorCQkgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJICAgdTggZHBfdHJhaW5fcGF0 KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50 ZWxfZHApOworCXUzMiAqRFAgPSAmaW50ZWxfZHAtPkRQOworCisJKkRQICY9IH5EUF9MSU5LX1RS QUlOX01BU0s7CisKKwlzd2l0Y2ggKGludGVsX2RwX3RyYWluaW5nX3BhdHRlcm5fc3ltYm9sKGRw X3RyYWluX3BhdCkpIHsKKwljYXNlIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRToKKwkJKkRQ IHw9IERQX0xJTktfVFJBSU5fT0ZGOworCQlicmVhazsKKwljYXNlIERQX1RSQUlOSU5HX1BBVFRF Uk5fMToKKwkJKkRQIHw9IERQX0xJTktfVFJBSU5fUEFUXzE7CisJCWJyZWFrOworCWNhc2UgRFBf VFJBSU5JTkdfUEFUVEVSTl8yOgorCQkqRFAgfD0gRFBfTElOS19UUkFJTl9QQVRfMjsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKGludGVsX2RwX3RyYWluaW5nX3BhdHRlcm5f c3ltYm9sKGRwX3RyYWluX3BhdCkpOworCQlyZXR1cm47CisJfQorCisJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBpbnRlbF9kcC0+RFApOworCWludGVsX2Rl X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOworfQorCitzdGF0 aWMgdm9pZCBpbnRlbF9kcF9lbmFibGVfcG9ydChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAor CQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKwor CS8qIGVuYWJsZSB3aXRoIHBhdHRlcm4gMSAoYXMgcGVyIHNwZWMpICovCisKKwlpbnRlbF9kcF9w cm9ncmFtX2xpbmtfdHJhaW5pbmdfcGF0dGVybihpbnRlbF9kcCwgY3J0Y19zdGF0ZSwKKwkJCQkJ ICAgICAgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSk7CisKKwkvKgorCSAqIE1hZ2ljIGZvciBWTFYv Q0hWLiBXZSBfbXVzdF8gZmlyc3Qgc2V0IHVwIHRoZSByZWdpc3RlcgorCSAqIHdpdGhvdXQgYWN0 dWFsbHkgZW5hYmxpbmcgdGhlIHBvcnQsIGFuZCB0aGVuIGRvIGFub3RoZXIKKwkgKiB3cml0ZSB0 byBlbmFibGUgdGhlIHBvcnQuIE90aGVyd2lzZSBsaW5rIHRyYWluaW5nIHdpbGwKKwkgKiBmYWls IHdoZW4gdGhlIHBvd2VyIHNlcXVlbmNlciBpcyBmcmVzaGx5IHVzZWQgZm9yIHRoaXMgcG9ydC4K KwkgKi8KKwlpbnRlbF9kcC0+RFAgfD0gRFBfUE9SVF9FTjsKKwlpZiAoY3J0Y19zdGF0ZS0+aGFz X2F1ZGlvKQorCQlpbnRlbF9kcC0+RFAgfD0gRFBfQVVESU9fT1VUUFVUX0VOQUJMRTsKKworCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgaW50ZWxfZHAtPkRQ KTsKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVn KTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNf c3RhdGUgKnN0YXRlLAorCQkJICAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJ ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywKKwkJCSAgICBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsK KwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwor CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhwaXBlX2NvbmZpZy0+dWFw aS5jcnRjKTsKKwl1MzIgZHBfcmVnID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAt Pm91dHB1dF9yZWcpOworCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKKwlpbnRlbF93YWtl cmVmX3Qgd2FrZXJlZjsKKworCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZHBfcmVn ICYgRFBfUE9SVF9FTikpCisJCXJldHVybjsKKworCXdpdGhfaW50ZWxfcHBzX2xvY2soaW50ZWxf ZHAsIHdha2VyZWYpIHsKKwkJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJS WVZJRVcoZGV2X3ByaXYpKQorCQkJdmx2X3Bwc19pbml0KGVuY29kZXIsIHBpcGVfY29uZmlnKTsK KworCQlpbnRlbF9kcF9lbmFibGVfcG9ydChpbnRlbF9kcCwgcGlwZV9jb25maWcpOworCisJCWlu dGVsX3Bwc192ZGRfb25fdW5sb2NrZWQoaW50ZWxfZHApOworCQlpbnRlbF9wcHNfb25fdW5sb2Nr ZWQoaW50ZWxfZHApOworCQlpbnRlbF9wcHNfdmRkX29mZl91bmxvY2tlZChpbnRlbF9kcCwgdHJ1 ZSk7CisJfQorCisJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKSB7CisJCXVuc2lnbmVkIGludCBsYW5lX21hc2sgPSAweDA7CisKKwkJaWYgKElT X0NIRVJSWVZJRVcoZGV2X3ByaXYpKQorCQkJbGFuZV9tYXNrID0gaW50ZWxfZHBfdW51c2VkX2xh bmVfbWFzayhwaXBlX2NvbmZpZy0+bGFuZV9jb3VudCk7CisKKwkJdmx2X3dhaXRfcG9ydF9yZWFk eShkZXZfcHJpdiwgZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLAorCQkJCSAgICBsYW5lX21hc2sp OworCX0KKworCWludGVsX2RwX3NldF9wb3dlcihpbnRlbF9kcCwgRFBfU0VUX1BPV0VSX0QwKTsK KwlpbnRlbF9kcF9jb25maWd1cmVfcHJvdG9jb2xfY29udmVydGVyKGludGVsX2RwLCBwaXBlX2Nv bmZpZyk7CisJaW50ZWxfZHBfY2hlY2tfZnJsX3RyYWluaW5nKGludGVsX2RwKTsKKwlpbnRlbF9k cF9wY29uX2RzY19jb25maWd1cmUoaW50ZWxfZHAsIHBpcGVfY29uZmlnKTsKKwlpbnRlbF9kcF9z dGFydF9saW5rX3RyYWluKGludGVsX2RwLCBwaXBlX2NvbmZpZyk7CisJaW50ZWxfZHBfc3RvcF9s aW5rX3RyYWluKGludGVsX2RwLCBwaXBlX2NvbmZpZyk7CisKKwlpZiAocGlwZV9jb25maWctPmhh c19hdWRpbykgeworCQlkcm1fZGJnKCZkZXZfcHJpdi0+ZHJtLCAiRW5hYmxpbmcgRFAgYXVkaW8g b24gcGlwZSAlY1xuIiwKKwkJCXBpcGVfbmFtZShwaXBlKSk7CisJCWludGVsX2F1ZGlvX2NvZGVj X2VuYWJsZShlbmNvZGVyLCBwaXBlX2NvbmZpZywgY29ubl9zdGF0ZSk7CisJfQorfQorCitzdGF0 aWMgdm9pZCBnNHhfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAor CQkJICBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAorCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlpbnRlbF9lbmFibGVfZHAoc3RhdGUsIGVuY29k ZXIsIHBpcGVfY29uZmlnLCBjb25uX3N0YXRlKTsKKwlpbnRlbF9lZHBfYmFja2xpZ2h0X29uKHBp cGVfY29uZmlnLCBjb25uX3N0YXRlKTsKK30KKworc3RhdGljIHZvaWQgdmx2X2VuYWJsZV9kcChz dHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCisJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2Nv bmZpZywKKwkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUp Cit7CisJaW50ZWxfZWRwX2JhY2tsaWdodF9vbihwaXBlX2NvbmZpZywgY29ubl9zdGF0ZSk7Cit9 CisKK3N0YXRpYyB2b2lkIGc0eF9wcmVfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3Rh dGUgKnN0YXRlLAorCQkJICAgICAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCisJCQkgICAg ICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOworCWVudW0g cG9ydCBwb3J0ID0gZW5jb2Rlci0+cG9ydDsKKworCWludGVsX2RwX3ByZXBhcmUoZW5jb2Rlciwg cGlwZV9jb25maWcpOworCisJLyogT25seSBpbGsrIGhhcyBwb3J0IEEgKi8KKwlpZiAocG9ydCA9 PSBQT1JUX0EpCisJCWlsa19lZHBfcGxsX29uKGludGVsX2RwLCBwaXBlX2NvbmZpZyk7Cit9CisK K3N0YXRpYyB2b2lkIHZsdl9wcmVfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlLAorCQkJICAgICAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCisJCQkgICAgICBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwl2bHZfcGh5 X3ByZV9lbmNvZGVyX2VuYWJsZShlbmNvZGVyLCBwaXBlX2NvbmZpZyk7CisKKwlpbnRlbF9lbmFi bGVfZHAoc3RhdGUsIGVuY29kZXIsIHBpcGVfY29uZmlnLCBjb25uX3N0YXRlKTsKK30KKworc3Rh dGljIHZvaWQgdmx2X2RwX3ByZV9wbGxfZW5hYmxlKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUg KnN0YXRlLAorCQkJCSAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCisJCQkJICBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlpbnRlbF9kcF9wcmVwYXJl KGVuY29kZXIsIHBpcGVfY29uZmlnKTsKKworCXZsdl9waHlfcHJlX3BsbF9lbmFibGUoZW5jb2Rl ciwgcGlwZV9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBjaHZfcHJlX2VuYWJsZV9kcChzdHJ1 Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBp cGVfY29uZmlnLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUpCit7CisJY2h2X3BoeV9wcmVfZW5jb2Rlcl9lbmFibGUoZW5jb2RlciwgcGlwZV9j b25maWcpOworCisJaW50ZWxfZW5hYmxlX2RwKHN0YXRlLCBlbmNvZGVyLCBwaXBlX2NvbmZpZywg Y29ubl9zdGF0ZSk7CisKKwkvKiBTZWNvbmQgY29tbW9uIGxhbmUgd2lsbCBzdGF5IGFsaXZlIG9u IGl0cyBvd24gbm93ICovCisJY2h2X3BoeV9yZWxlYXNlX2NsMl9vdmVycmlkZShlbmNvZGVyKTsK K30KKworc3RhdGljIHZvaWQgY2h2X2RwX3ByZV9wbGxfZW5hYmxlKHN0cnVjdCBpbnRlbF9hdG9t aWNfc3RhdGUgKnN0YXRlLAorCQkJCSAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJ CQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCisJCQkJICBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlpbnRlbF9k cF9wcmVwYXJlKGVuY29kZXIsIHBpcGVfY29uZmlnKTsKKworCWNodl9waHlfcHJlX3BsbF9lbmFi bGUoZW5jb2RlciwgcGlwZV9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBjaHZfZHBfcG9zdF9w bGxfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgc3Ry dWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQoreworCWNodl9waHlfcG9zdF9wbGxfZGlzYWJs ZShlbmNvZGVyLCBvbGRfY3J0Y19zdGF0ZSk7Cit9CisKK3N0YXRpYyB1OCBpbnRlbF9kcF92b2x0 YWdlX21heF8yKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXJldHVybiBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzI7Cit9CisKK3N0YXRpYyB1OCBpbnRlbF9kcF92b2x0YWdlX21heF8zKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQoreworCXJldHVybiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVM XzM7Cit9CisKK3N0YXRpYyB1OCBpbnRlbF9kcF9wcmVlbXBoX21heF8yKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApCit7CisJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzI7Cit9CisK K3N0YXRpYyB1OCBpbnRlbF9kcF9wcmVlbXBoX21heF8zKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCit7CisJcmV0dXJuIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzM7Cit9CisKK3N0YXRpYyB2 b2lkIHZsdl9zZXRfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAorCQkJ CSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0 IGludGVsX2VuY29kZXIgKmVuY29kZXIgPSAmZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNl OworCXVuc2lnbmVkIGxvbmcgZGVtcGhfcmVnX3ZhbHVlLCBwcmVlbXBoX3JlZ192YWx1ZSwKKwkJ dW5pcXRyYW5zY2FsZV9yZWdfdmFsdWU7CisJdTggdHJhaW5fc2V0ID0gaW50ZWxfZHAtPnRyYWlu X3NldFswXTsKKworCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01B U0spIHsKKwljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6CisJCXByZWVtcGhfcmVnX3Zh bHVlID0gMHgwMDA0MDAwOworCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0Vf U1dJTkdfTUFTSykgeworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKKwkJ CWRlbXBoX3JlZ192YWx1ZSA9IDB4MkI0MDU1NTU7CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1 ZSA9IDB4NTUyQUI4M0E7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5H X0xFVkVMXzE6CisJCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCNDA0MDQwOworCQkJdW5pcXRyYW5z Y2FsZV9yZWdfdmFsdWUgPSAweDU1NDhCODNBOworCQkJYnJlYWs7CisJCWNhc2UgRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19MRVZFTF8yOgorCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjI0NTU1NTsK KwkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlID0gMHg1NTYwQjgzQTsKKwkJCWJyZWFrOworCQlj YXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzoKKwkJCWRlbXBoX3JlZ192YWx1ZSA9 IDB4MkI0MDU1NTU7CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTU5OERBM0E7CisJ CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIERQ X1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6CisJCXByZWVtcGhfcmVnX3ZhbHVlID0gMHgwMDAyMDAw OworCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewor CQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKKwkJCWRlbXBoX3JlZ192YWx1 ZSA9IDB4MkI0MDQwNDA7CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTU1MkI4M0E7 CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6CisJCQlk ZW1waF9yZWdfdmFsdWUgPSAweDJCNDA0ODQ4OworCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUg PSAweDU1ODBCODNBOworCQkJYnJlYWs7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19M RVZFTF8yOgorCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjQwNDA0MDsKKwkJCXVuaXF0cmFuc2Nh bGVfcmVnX3ZhbHVlID0gMHg1NUFEREEzQTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0 dXJuOworCQl9CisJCWJyZWFrOworCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMjoKKwkJ cHJlZW1waF9yZWdfdmFsdWUgPSAweDAwMDAwMDA7CisJCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8wOgorCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjMwNTU1NTsKKwkJCXVuaXF0cmFu c2NhbGVfcmVnX3ZhbHVlID0gMHg1NTcwQjgzQTsKKwkJCWJyZWFrOworCQljYXNlIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKKwkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MkIyQjQwNDA7 CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTVBRERBM0E7CisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIERQX1RSQUlOX1BSRV9F TVBIX0xFVkVMXzM6CisJCXByZWVtcGhfcmVnX3ZhbHVlID0gMHgwMDA2MDAwOworCQlzd2l0Y2gg KHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgeworCQljYXNlIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKKwkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MUI0MDU1 NTU7CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTVBRERBM0E7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1 cm47CisJfQorCisJdmx2X3NldF9waHlfc2lnbmFsX2xldmVsKGVuY29kZXIsIGNydGNfc3RhdGUs CisJCQkJIGRlbXBoX3JlZ192YWx1ZSwgcHJlZW1waF9yZWdfdmFsdWUsCisJCQkJIHVuaXF0cmFu c2NhbGVfcmVnX3ZhbHVlLCAwKTsKK30KKworc3RhdGljIHZvaWQgY2h2X3NldF9zaWduYWxfbGV2 ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciA9ICZkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2U7CisJdTMyIGRlZW1waF9yZWdfdmFs dWUsIG1hcmdpbl9yZWdfdmFsdWU7CisJYm9vbCB1bmlxX3RyYW5zX3NjYWxlID0gZmFsc2U7CisJ dTggdHJhaW5fc2V0ID0gaW50ZWxfZHAtPnRyYWluX3NldFswXTsKKworCXN3aXRjaCAodHJhaW5f c2V0ICYgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spIHsKKwljYXNlIERQX1RSQUlOX1BSRV9F TVBIX0xFVkVMXzA6CisJCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19NQVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgorCQkJZGVl bXBoX3JlZ192YWx1ZSA9IDEyODsKKwkJCW1hcmdpbl9yZWdfdmFsdWUgPSA1MjsKKwkJCWJyZWFr OworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKKwkJCWRlZW1waF9yZWdf dmFsdWUgPSAxMjg7CisJCQltYXJnaW5fcmVnX3ZhbHVlID0gNzc7CisJCQlicmVhazsKKwkJY2Fz ZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI6CisJCQlkZWVtcGhfcmVnX3ZhbHVlID0g MTI4OworCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDEwMjsKKwkJCWJyZWFrOworCQljYXNlIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzoKKwkJCWRlZW1waF9yZWdfdmFsdWUgPSAxMjg7CisJ CQltYXJnaW5fcmVnX3ZhbHVlID0gMTU0OworCQkJdW5pcV90cmFuc19zY2FsZSA9IHRydWU7CisJ CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIERQ X1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6CisJCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19NQVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZF TF8wOgorCQkJZGVlbXBoX3JlZ192YWx1ZSA9IDg1OworCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDc4 OworCQkJYnJlYWs7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgorCQkJ ZGVlbXBoX3JlZ192YWx1ZSA9IDg1OworCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDExNjsKKwkJCWJy ZWFrOworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjoKKwkJCWRlZW1waF9y ZWdfdmFsdWUgPSA4NTsKKwkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxNTQ7CisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIERQX1RSQUlOX1BSRV9F TVBIX0xFVkVMXzI6CisJCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19NQVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgorCQkJZGVl bXBoX3JlZ192YWx1ZSA9IDY0OworCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDEwNDsKKwkJCWJyZWFr OworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKKwkJCWRlZW1waF9yZWdf dmFsdWUgPSA2NDsKKwkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxNTQ7CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIERQX1RSQUlOX1BSRV9FTVBI X0xFVkVMXzM6CisJCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19N QVNLKSB7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgorCQkJZGVlbXBo X3JlZ192YWx1ZSA9IDQzOworCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDE1NDsKKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVy bjsKKwl9CisKKwljaHZfc2V0X3BoeV9zaWduYWxfbGV2ZWwoZW5jb2RlciwgY3J0Y19zdGF0ZSwK KwkJCQkgZGVlbXBoX3JlZ192YWx1ZSwgbWFyZ2luX3JlZ192YWx1ZSwKKwkJCQkgdW5pcV90cmFu c19zY2FsZSk7Cit9CisKK3N0YXRpYyB1MzIgZzR4X3NpZ25hbF9sZXZlbHModTggdHJhaW5fc2V0 KQoreworCXUzMiBzaWduYWxfbGV2ZWxzID0gMDsKKworCXN3aXRjaCAodHJhaW5fc2V0ICYgRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSB7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5H X0xFVkVMXzA6CisJZGVmYXVsdDoKKwkJc2lnbmFsX2xldmVscyB8PSBEUF9WT0xUQUdFXzBfNDsK KwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6CisJCXNpZ25h bF9sZXZlbHMgfD0gRFBfVk9MVEFHRV8wXzY7CisJCWJyZWFrOworCWNhc2UgRFBfVFJBSU5fVk9M VEFHRV9TV0lOR19MRVZFTF8yOgorCQlzaWduYWxfbGV2ZWxzIHw9IERQX1ZPTFRBR0VfMF84Owor CQlicmVhazsKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMzoKKwkJc2lnbmFs X2xldmVscyB8PSBEUF9WT0xUQUdFXzFfMjsKKwkJYnJlYWs7CisJfQorCXN3aXRjaCAodHJhaW5f c2V0ICYgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spIHsKKwljYXNlIERQX1RSQUlOX1BSRV9F TVBIX0xFVkVMXzA6CisJZGVmYXVsdDoKKwkJc2lnbmFsX2xldmVscyB8PSBEUF9QUkVfRU1QSEFT SVNfMDsKKwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgorCQlzaWdu YWxfbGV2ZWxzIHw9IERQX1BSRV9FTVBIQVNJU18zXzU7CisJCWJyZWFrOworCWNhc2UgRFBfVFJB SU5fUFJFX0VNUEhfTEVWRUxfMjoKKwkJc2lnbmFsX2xldmVscyB8PSBEUF9QUkVfRU1QSEFTSVNf NjsKKwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zOgorCQlzaWduYWxf bGV2ZWxzIHw9IERQX1BSRV9FTVBIQVNJU185XzU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc2ln bmFsX2xldmVsczsKK30KKworc3RhdGljIHZvaWQKK2c0eF9zZXRfc2lnbmFsX2xldmVscyhzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsKKwl1OCB0cmFpbl9zZXQgPSBpbnRlbF9kcC0+dHJhaW5f c2V0WzBdOworCXUzMiBzaWduYWxfbGV2ZWxzOworCisJc2lnbmFsX2xldmVscyA9IGc0eF9zaWdu YWxfbGV2ZWxzKHRyYWluX3NldCk7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlVz aW5nIHNpZ25hbCBsZXZlbHMgJTA4eFxuIiwKKwkJICAgIHNpZ25hbF9sZXZlbHMpOworCisJaW50 ZWxfZHAtPkRQICY9IH4oRFBfVk9MVEFHRV9NQVNLIHwgRFBfUFJFX0VNUEhBU0lTX01BU0spOwor CWludGVsX2RwLT5EUCB8PSBzaWduYWxfbGV2ZWxzOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBpbnRlbF9kcC0+RFApOworCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOworfQorCisvKiBTTkIgQ1BV IGVEUCB2b2x0YWdlIHN3aW5nIGFuZCBwcmUtZW1waGFzaXMgY29udHJvbCAqLworc3RhdGljIHUz MiBzbmJfY3B1X2VkcF9zaWduYWxfbGV2ZWxzKHU4IHRyYWluX3NldCkKK3sKKwl1OCBzaWduYWxf bGV2ZWxzID0gdHJhaW5fc2V0ICYgKERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSyB8CisJCQkJ CURQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKTsKKworCXN3aXRjaCAoc2lnbmFsX2xldmVscykg eworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wIHwgRFBfVFJBSU5fUFJFX0VN UEhfTEVWRUxfMDoKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8IERQX1RS QUlOX1BSRV9FTVBIX0xFVkVMXzA6CisJCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBfNjAwTVZf MERCX1NOQl9COworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wIHwgRFBfVFJB SU5fUFJFX0VNUEhfTEVWRUxfMToKKwkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwME1WXzNfNURC X1NOQl9COworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wIHwgRFBfVFJBSU5f UFJFX0VNUEhfTEVWRUxfMjoKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8 IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzI6CisJCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBf NjAwTVZfNkRCX1NOQl9COworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwg RFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMToKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TEVWRUxfMiB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6CisJCXJldHVybiBFRFBfTElOS19U UkFJTl82MDBfODAwTVZfM181REJfU05CX0I7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5H X0xFVkVMXzIgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgorCWNhc2UgRFBfVFJBSU5fVk9M VEFHRV9TV0lOR19MRVZFTF8zIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKKwkJcmV0dXJu IEVEUF9MSU5LX1RSQUlOXzgwMF8xMjAwTVZfMERCX1NOQl9COworCWRlZmF1bHQ6CisJCU1JU1NJ TkdfQ0FTRShzaWduYWxfbGV2ZWxzKTsKKwkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwMF82MDBN Vl8wREJfU05CX0I7CisJfQorfQorCitzdGF0aWMgdm9pZAorc25iX2NwdV9lZHBfc2V0X3NpZ25h bF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJCSAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCXU4IHRyYWluX3NldCA9IGlu dGVsX2RwLT50cmFpbl9zZXRbMF07CisJdTMyIHNpZ25hbF9sZXZlbHM7CisKKwlzaWduYWxfbGV2 ZWxzID0gc25iX2NwdV9lZHBfc2lnbmFsX2xldmVscyh0cmFpbl9zZXQpOworCisJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJVc2luZyBzaWduYWwgbGV2ZWxzICUwOHhcbiIsCisJCSAgICBz aWduYWxfbGV2ZWxzKTsKKworCWludGVsX2RwLT5EUCAmPSB+RURQX0xJTktfVFJBSU5fVk9MX0VN UF9NQVNLX1NOQjsKKwlpbnRlbF9kcC0+RFAgfD0gc2lnbmFsX2xldmVsczsKKworCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgaW50ZWxfZHAtPkRQKTsKKwlp bnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKK30K KworLyogSVZCIENQVSBlRFAgdm9sdGFnZSBzd2luZyBhbmQgcHJlLWVtcGhhc2lzIGNvbnRyb2wg Ki8KK3N0YXRpYyB1MzIgaXZiX2NwdV9lZHBfc2lnbmFsX2xldmVscyh1OCB0cmFpbl9zZXQpCit7 CisJdTggc2lnbmFsX2xldmVscyA9IHRyYWluX3NldCAmIChEUF9UUkFJTl9WT0xUQUdFX1NXSU5H X01BU0sgfAorCQkJCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSyk7CisKKwlzd2l0Y2ggKHNp Z25hbF9sZXZlbHMpIHsKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQ X1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6CisJCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBNVl8w REJfSVZCOworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wIHwgRFBfVFJBSU5f UFJFX0VNUEhfTEVWRUxfMToKKwkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwME1WXzNfNURCX0lW QjsKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9F TVBIX0xFVkVMXzI6CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEgfCBEUF9U UkFJTl9QUkVfRU1QSF9MRVZFTF8yOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwTVZfNkRC X0lWQjsKKworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5f UFJFX0VNUEhfTEVWRUxfMDoKKwkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzYwME1WXzBEQl9JVkI7 CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEgfCBEUF9UUkFJTl9QUkVfRU1Q SF9MRVZFTF8xOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNjAwTVZfM181REJfSVZCOworCisJ Y2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzIgfCBEUF9UUkFJTl9QUkVfRU1QSF9M RVZFTF8wOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fODAwTVZfMERCX0lWQjsKKwljYXNlIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMiB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6 CisJCXJldHVybiBFRFBfTElOS19UUkFJTl84MDBNVl8zXzVEQl9JVkI7CisKKwlkZWZhdWx0Ogor CQlNSVNTSU5HX0NBU0Uoc2lnbmFsX2xldmVscyk7CisJCXJldHVybiBFRFBfTElOS19UUkFJTl81 MDBNVl8wREJfSVZCOworCX0KK30KKworc3RhdGljIHZvaWQKK2l2Yl9jcHVfZWRwX3NldF9zaWdu YWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKwl1OCB0cmFpbl9zZXQgPSBp bnRlbF9kcC0+dHJhaW5fc2V0WzBdOworCXUzMiBzaWduYWxfbGV2ZWxzOworCisJc2lnbmFsX2xl dmVscyA9IGl2Yl9jcHVfZWRwX3NpZ25hbF9sZXZlbHModHJhaW5fc2V0KTsKKworCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLCAiVXNpbmcgc2lnbmFsIGxldmVscyAlMDh4XG4iLAorCQkgICAg c2lnbmFsX2xldmVscyk7CisKKwlpbnRlbF9kcC0+RFAgJj0gfkVEUF9MSU5LX1RSQUlOX1ZPTF9F TVBfTUFTS19JVkI7CisJaW50ZWxfZHAtPkRQIHw9IHNpZ25hbF9sZXZlbHM7CisKKwlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIGludGVsX2RwLT5EUCk7CisJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Cit9 CisKKy8qCisgKiBJZiBkaXNwbGF5IGlzIG5vdyBjb25uZWN0ZWQgY2hlY2sgbGlua3Mgc3RhdHVz LAorICogdGhlcmUgaGFzIGJlZW4ga25vd24gaXNzdWVzIG9mIGxpbmsgbG9zcyB0cmlnZ2VyaW5n CisgKiBsb25nIHB1bHNlLgorICoKKyAqIFNvbWUgc2lua3MgKGVnLiBBU1VTIFBCMjg3USkgc2Vl bSB0byBwZXJmb3JtIHNvbWUKKyAqIHdlaXJkIEhQRCBwaW5nIHBvbmcgZHVyaW5nIG1vZGVzZXRz LiBTbyB3ZSBjYW4gYXBwYXJlbnRseQorICogZW5kIHVwIHdpdGggSFBEIGdvaW5nIGxvdyBkdXJp bmcgYSBtb2Rlc2V0LCBhbmQgdGhlbgorICogZ29pbmcgYmFjayB1cCBzb29uIGFmdGVyLiBBbmQg b25jZSB0aGF0IGhhcHBlbnMgd2UgbXVzdAorICogcmV0cmFpbiB0aGUgbGluayB0byBnZXQgYSBw aWN0dXJlLiBUaGF0J3MgaW4gY2FzZSBubworICogdXNlcnNwYWNlIGNvbXBvbmVudCByZWFjdGVk IHRvIGludGVybWl0dGVudCBIUEQgZGlwLgorICovCitzdGF0aWMgZW51bSBpbnRlbF9ob3RwbHVn X3N0YXRlCitpbnRlbF9kcF9ob3RwbHVnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAor CQkgc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisJc3RydWN0IGRybV9tb2Rl c2V0X2FjcXVpcmVfY3R4IGN0eDsKKwllbnVtIGludGVsX2hvdHBsdWdfc3RhdGUgc3RhdGU7CisJ aW50IHJldDsKKworCWlmIChpbnRlbF9kcC0+Y29tcGxpYW5jZS50ZXN0X2FjdGl2ZSAmJgorCSAg ICBpbnRlbF9kcC0+Y29tcGxpYW5jZS50ZXN0X3R5cGUgPT0gRFBfVEVTVF9MSU5LX1BIWV9URVNU X1BBVFRFUk4pIHsKKwkJaW50ZWxfZHBfcGh5X3Rlc3QoZW5jb2Rlcik7CisJCS8qIGp1c3QgZG8g dGhlIFBIWSB0ZXN0IGFuZCBub3RoaW5nIGVsc2UgKi8KKwkJcmV0dXJuIElOVEVMX0hPVFBMVUdf VU5DSEFOR0VEOworCX0KKworCXN0YXRlID0gaW50ZWxfZW5jb2Rlcl9ob3RwbHVnKGVuY29kZXIs IGNvbm5lY3Rvcik7CisKKwlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgMCk7CisKKwlm b3IgKDs7KSB7CisJCXJldCA9IGludGVsX2RwX3JldHJhaW5fbGluayhlbmNvZGVyLCAmY3R4KTsK KworCQlpZiAocmV0ID09IC1FREVBRExLKSB7CisJCQlkcm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgp OworCQkJY29udGludWU7CisJCX0KKworCQlicmVhazsKKwl9CisKKwlkcm1fbW9kZXNldF9kcm9w X2xvY2tzKCZjdHgpOworCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKKwlkcm1fV0FS TihlbmNvZGVyLT5iYXNlLmRldiwgcmV0LAorCQkgIkFjcXVpcmluZyBtb2Rlc2V0IGxvY2tzIGZh aWxlZCB3aXRoICVpXG4iLCByZXQpOworCisJLyoKKwkgKiBLZWVwaW5nIGl0IGNvbnNpc3RlbnQg d2l0aCBpbnRlbF9kZGlfaG90cGx1ZygpIGFuZAorCSAqIGludGVsX2hkbWlfaG90cGx1ZygpLgor CSAqLworCWlmIChzdGF0ZSA9PSBJTlRFTF9IT1RQTFVHX1VOQ0hBTkdFRCAmJiAhY29ubmVjdG9y LT5ob3RwbHVnX3JldHJpZXMpCisJCXN0YXRlID0gSU5URUxfSE9UUExVR19SRVRSWTsKKworCXJl dHVybiBzdGF0ZTsKK30KKworc3RhdGljIGJvb2wgaWJ4X2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisJdTMyIGJpdCA9IGRl dl9wcml2LT5ob3RwbHVnLnBjaF9ocGRbZW5jb2Rlci0+aHBkX3Bpbl07CisKKwlyZXR1cm4gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgU0RFSVNSKSAmIGJpdDsKK30KKworc3RhdGljIGJvb2wgZzR4 X2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5i YXNlLmRldik7CisJdTMyIGJpdDsKKworCXN3aXRjaCAoZW5jb2Rlci0+aHBkX3BpbikgeworCWNh c2UgSFBEX1BPUlRfQjoKKwkJYml0ID0gUE9SVEJfSE9UUExVR19MSVZFX1NUQVRVU19HNFg7CisJ CWJyZWFrOworCWNhc2UgSFBEX1BPUlRfQzoKKwkJYml0ID0gUE9SVENfSE9UUExVR19MSVZFX1NU QVRVU19HNFg7CisJCWJyZWFrOworCWNhc2UgSFBEX1BPUlRfRDoKKwkJYml0ID0gUE9SVERfSE9U UExVR19MSVZFX1NUQVRVU19HNFg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FT RShlbmNvZGVyLT5ocGRfcGluKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBQT1JUX0hPVFBMVUdfU1RBVCkgJiBiaXQ7Cit9CisKK3N0YXRp YyBib29sIGdtNDVfZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAq ZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGVuY29kZXItPmJhc2UuZGV2KTsKKwl1MzIgYml0OworCisJc3dpdGNoIChlbmNvZGVyLT5ocGRf cGluKSB7CisJY2FzZSBIUERfUE9SVF9COgorCQliaXQgPSBQT1JUQl9IT1RQTFVHX0xJVkVfU1RB VFVTX0dNNDU7CisJCWJyZWFrOworCWNhc2UgSFBEX1BPUlRfQzoKKwkJYml0ID0gUE9SVENfSE9U UExVR19MSVZFX1NUQVRVU19HTTQ1OworCQlicmVhazsKKwljYXNlIEhQRF9QT1JUX0Q6CisJCWJp dCA9IFBPUlREX0hPVFBMVUdfTElWRV9TVEFUVVNfR000NTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJTUlTU0lOR19DQVNFKGVuY29kZXItPmhwZF9waW4pOworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBPUlRfSE9UUExVR19TVEFUKSAmIGJp dDsKK30KKworc3RhdGljIGJvb2wgaWxrX2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisJdTMyIGJpdCA9IGRldl9wcml2LT5o b3RwbHVnLmhwZFtlbmNvZGVyLT5ocGRfcGluXTsKKworCXJldHVybiBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCBERUlTUikgJiBiaXQ7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2RwX2VuY29kZXJf ZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJaW50ZWxfZHBfZW5jb2Rl cl9mbHVzaF93b3JrKGVuY29kZXIpOworCisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsK KwlrZnJlZShlbmNfdG9fZGlnX3BvcnQodG9faW50ZWxfZW5jb2RlcihlbmNvZGVyKSkpOworfQor CitlbnVtIHBpcGUgdmx2X2FjdGl2ZV9waXBlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9k cCk7CisJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIgPSAmZHBfdG9fZGlnX3BvcnQoaW50 ZWxfZHApLT5iYXNlOworCWVudW0gcGlwZSBwaXBlOworCisJaWYgKGludGVsX2RwX3BvcnRfZW5h YmxlZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsCisJCQkJICBlbmNvZGVyLT5wb3J0 LCAmcGlwZSkpCisJCXJldHVybiBwaXBlOworCisJcmV0dXJuIElOVkFMSURfUElQRTsKK30KKwor c3RhdGljIHZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9yZXNldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShl bmNvZGVyLT5kZXYpOworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxf ZHAodG9faW50ZWxfZW5jb2RlcihlbmNvZGVyKSk7CisKKwlpbnRlbF9kcC0+RFAgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisKKwlpbnRlbF9kcC0+cmVz ZXRfbGlua19wYXJhbXMgPSB0cnVlOworCisJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8 IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7CisJCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwor CisJCXdpdGhfaW50ZWxfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpCisJCQlpbnRlbF9kcC0+ YWN0aXZlX3BpcGUgPSB2bHZfYWN0aXZlX3BpcGUoaW50ZWxfZHApOworCX0KKworCWludGVsX3Bw c19lbmNvZGVyX3Jlc2V0KGludGVsX2RwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f ZW5jb2Rlcl9mdW5jcyBpbnRlbF9kcF9lbmNfZnVuY3MgPSB7CisJLnJlc2V0ID0gaW50ZWxfZHBf ZW5jb2Rlcl9yZXNldCwKKwkuZGVzdHJveSA9IGludGVsX2RwX2VuY29kZXJfZGVzdHJveSwKK307 CisKK2Jvb2wgaW50ZWxfZHBfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCSAgIGk5MTVfcmVnX3Qgb3V0cHV0X3JlZywKKwkJICAgZW51bSBwb3J0IHBvcnQpCit7CisJ c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQ7CisJc3RydWN0IGludGVsX2VuY29k ZXIgKmludGVsX2VuY29kZXI7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVj dCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvcjsKKworCWRpZ19wb3J0ID0ga3phbGxv YyhzaXplb2YoKmRpZ19wb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkaWdfcG9ydCkKKwkJcmV0 dXJuIGZhbHNlOworCisJaW50ZWxfY29ubmVjdG9yID0gaW50ZWxfY29ubmVjdG9yX2FsbG9jKCk7 CisJaWYgKCFpbnRlbF9jb25uZWN0b3IpCisJCWdvdG8gZXJyX2Nvbm5lY3Rvcl9hbGxvYzsKKwor CWludGVsX2VuY29kZXIgPSAmZGlnX3BvcnQtPmJhc2U7CisJZW5jb2RlciA9ICZpbnRlbF9lbmNv ZGVyLT5iYXNlOworCisJbXV0ZXhfaW5pdCgmZGlnX3BvcnQtPmhkY3BfbXV0ZXgpOworCisJaWYg KGRybV9lbmNvZGVyX2luaXQoJmRldl9wcml2LT5kcm0sICZpbnRlbF9lbmNvZGVyLT5iYXNlLAor CQkJICAgICAmaW50ZWxfZHBfZW5jX2Z1bmNzLCBEUk1fTU9ERV9FTkNPREVSX1RNRFMsCisJCQkg ICAgICJEUCAlYyIsIHBvcnRfbmFtZShwb3J0KSkpCisJCWdvdG8gZXJyX2VuY29kZXJfaW5pdDsK KworCWludGVsX2VuY29kZXItPmhvdHBsdWcgPSBpbnRlbF9kcF9ob3RwbHVnOworCWludGVsX2Vu Y29kZXItPmNvbXB1dGVfY29uZmlnID0gaW50ZWxfZHBfY29tcHV0ZV9jb25maWc7CisJaW50ZWxf ZW5jb2Rlci0+Z2V0X2h3X3N0YXRlID0gaW50ZWxfZHBfZ2V0X2h3X3N0YXRlOworCWludGVsX2Vu Y29kZXItPmdldF9jb25maWcgPSBpbnRlbF9kcF9nZXRfY29uZmlnOworCWludGVsX2VuY29kZXIt PnN5bmNfc3RhdGUgPSBpbnRlbF9kcF9zeW5jX3N0YXRlOworCWludGVsX2VuY29kZXItPmluaXRp YWxfZmFzdHNldF9jaGVjayA9IGludGVsX2RwX2luaXRpYWxfZmFzdHNldF9jaGVjazsKKwlpbnRl bF9lbmNvZGVyLT51cGRhdGVfcGlwZSA9IGludGVsX3BhbmVsX3VwZGF0ZV9iYWNrbGlnaHQ7CisJ aW50ZWxfZW5jb2Rlci0+c3VzcGVuZCA9IGludGVsX2RwX2VuY29kZXJfc3VzcGVuZDsKKwlpbnRl bF9lbmNvZGVyLT5zaHV0ZG93biA9IGludGVsX2RwX2VuY29kZXJfc2h1dGRvd247CisJaWYgKElT X0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7CisJCWludGVsX2VuY29kZXItPnByZV9wbGxfZW5hYmxl ID0gY2h2X2RwX3ByZV9wbGxfZW5hYmxlOworCQlpbnRlbF9lbmNvZGVyLT5wcmVfZW5hYmxlID0g Y2h2X3ByZV9lbmFibGVfZHA7CisJCWludGVsX2VuY29kZXItPmVuYWJsZSA9IHZsdl9lbmFibGVf ZHA7CisJCWludGVsX2VuY29kZXItPmRpc2FibGUgPSB2bHZfZGlzYWJsZV9kcDsKKwkJaW50ZWxf ZW5jb2Rlci0+cG9zdF9kaXNhYmxlID0gY2h2X3Bvc3RfZGlzYWJsZV9kcDsKKwkJaW50ZWxfZW5j b2Rlci0+cG9zdF9wbGxfZGlzYWJsZSA9IGNodl9kcF9wb3N0X3BsbF9kaXNhYmxlOworCX0gZWxz ZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpIHsKKwkJaW50ZWxfZW5jb2Rlci0+cHJlX3Bs bF9lbmFibGUgPSB2bHZfZHBfcHJlX3BsbF9lbmFibGU7CisJCWludGVsX2VuY29kZXItPnByZV9l bmFibGUgPSB2bHZfcHJlX2VuYWJsZV9kcDsKKwkJaW50ZWxfZW5jb2Rlci0+ZW5hYmxlID0gdmx2 X2VuYWJsZV9kcDsKKwkJaW50ZWxfZW5jb2Rlci0+ZGlzYWJsZSA9IHZsdl9kaXNhYmxlX2RwOwor CQlpbnRlbF9lbmNvZGVyLT5wb3N0X2Rpc2FibGUgPSB2bHZfcG9zdF9kaXNhYmxlX2RwOworCX0g ZWxzZSB7CisJCWludGVsX2VuY29kZXItPnByZV9lbmFibGUgPSBnNHhfcHJlX2VuYWJsZV9kcDsK KwkJaW50ZWxfZW5jb2Rlci0+ZW5hYmxlID0gZzR4X2VuYWJsZV9kcDsKKwkJaW50ZWxfZW5jb2Rl ci0+ZGlzYWJsZSA9IGc0eF9kaXNhYmxlX2RwOworCQlpbnRlbF9lbmNvZGVyLT5wb3N0X2Rpc2Fi bGUgPSBnNHhfcG9zdF9kaXNhYmxlX2RwOworCX0KKworCWlmICgoSVNfSVZZQlJJREdFKGRldl9w cml2KSAmJiBwb3J0ID09IFBPUlRfQSkgfHwKKwkgICAgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSAm JiBwb3J0ICE9IFBPUlRfQSkpCisJCWRpZ19wb3J0LT5kcC5zZXRfbGlua190cmFpbiA9IGNwdF9z ZXRfbGlua190cmFpbjsKKwllbHNlCisJCWRpZ19wb3J0LT5kcC5zZXRfbGlua190cmFpbiA9IGc0 eF9zZXRfbGlua190cmFpbjsKKworCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKKwkJZGln X3BvcnQtPmRwLnNldF9zaWduYWxfbGV2ZWxzID0gY2h2X3NldF9zaWduYWxfbGV2ZWxzOworCWVs c2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQorCQlkaWdfcG9ydC0+ZHAuc2V0X3NpZ25h bF9sZXZlbHMgPSB2bHZfc2V0X3NpZ25hbF9sZXZlbHM7CisJZWxzZSBpZiAoSVNfSVZZQlJJREdF KGRldl9wcml2KSAmJiBwb3J0ID09IFBPUlRfQSkKKwkJZGlnX3BvcnQtPmRwLnNldF9zaWduYWxf bGV2ZWxzID0gaXZiX2NwdV9lZHBfc2V0X3NpZ25hbF9sZXZlbHM7CisJZWxzZSBpZiAoSVNfR0VO KGRldl9wcml2LCA2KSAmJiBwb3J0ID09IFBPUlRfQSkKKwkJZGlnX3BvcnQtPmRwLnNldF9zaWdu YWxfbGV2ZWxzID0gc25iX2NwdV9lZHBfc2V0X3NpZ25hbF9sZXZlbHM7CisJZWxzZQorCQlkaWdf cG9ydC0+ZHAuc2V0X3NpZ25hbF9sZXZlbHMgPSBnNHhfc2V0X3NpZ25hbF9sZXZlbHM7CisKKwlp ZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgfHwK KwkgICAgKEhBU19QQ0hfU1BMSVQoZGV2X3ByaXYpICYmIHBvcnQgIT0gUE9SVF9BKSkgeworCQlk aWdfcG9ydC0+ZHAucHJlZW1waF9tYXggPSBpbnRlbF9kcF9wcmVlbXBoX21heF8zOworCQlkaWdf cG9ydC0+ZHAudm9sdGFnZV9tYXggPSBpbnRlbF9kcF92b2x0YWdlX21heF8zOworCX0gZWxzZSB7 CisJCWRpZ19wb3J0LT5kcC5wcmVlbXBoX21heCA9IGludGVsX2RwX3ByZWVtcGhfbWF4XzI7CisJ CWRpZ19wb3J0LT5kcC52b2x0YWdlX21heCA9IGludGVsX2RwX3ZvbHRhZ2VfbWF4XzI7CisJfQor CisJZGlnX3BvcnQtPmRwLm91dHB1dF9yZWcgPSBvdXRwdXRfcmVnOworCWRpZ19wb3J0LT5tYXhf bGFuZXMgPSA0OworCisJaW50ZWxfZW5jb2Rlci0+dHlwZSA9IElOVEVMX09VVFBVVF9EUDsKKwlp bnRlbF9lbmNvZGVyLT5wb3dlcl9kb21haW4gPSBpbnRlbF9wb3J0X3RvX3Bvd2VyX2RvbWFpbihw b3J0KTsKKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKKwkJaWYgKHBvcnQgPT0gUE9S VF9EKQorCQkJaW50ZWxfZW5jb2Rlci0+cGlwZV9tYXNrID0gQklUKFBJUEVfQyk7CisJCWVsc2UK KwkJCWludGVsX2VuY29kZXItPnBpcGVfbWFzayA9IEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQik7 CisJfSBlbHNlIHsKKwkJaW50ZWxfZW5jb2Rlci0+cGlwZV9tYXNrID0gfjA7CisJfQorCWludGVs X2VuY29kZXItPmNsb25lYWJsZSA9IDA7CisJaW50ZWxfZW5jb2Rlci0+cG9ydCA9IHBvcnQ7CisJ aW50ZWxfZW5jb2Rlci0+aHBkX3BpbiA9IGludGVsX2hwZF9waW5fZGVmYXVsdChkZXZfcHJpdiwg cG9ydCk7CisKKwlkaWdfcG9ydC0+aHBkX3B1bHNlID0gaW50ZWxfZHBfaHBkX3B1bHNlOworCisJ aWYgKEhBU19HTUNIKGRldl9wcml2KSkgeworCQlpZiAoSVNfR000NShkZXZfcHJpdikpCisJCQlk aWdfcG9ydC0+Y29ubmVjdGVkID0gZ200NV9kaWdpdGFsX3BvcnRfY29ubmVjdGVkOworCQllbHNl CisJCQlkaWdfcG9ydC0+Y29ubmVjdGVkID0gZzR4X2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQ7CisJ fSBlbHNlIHsKKwkJaWYgKHBvcnQgPT0gUE9SVF9BKQorCQkJZGlnX3BvcnQtPmNvbm5lY3RlZCA9 IGlsa19kaWdpdGFsX3BvcnRfY29ubmVjdGVkOworCQllbHNlCisJCQlkaWdfcG9ydC0+Y29ubmVj dGVkID0gaWJ4X2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQ7CisJfQorCisJaWYgKHBvcnQgIT0gUE9S VF9BKQorCQlpbnRlbF9pbmZvZnJhbWVfaW5pdChkaWdfcG9ydCk7CisKKwlkaWdfcG9ydC0+YXV4 X2NoID0gaW50ZWxfYmlvc19wb3J0X2F1eF9jaChkZXZfcHJpdiwgcG9ydCk7CisJaWYgKCFpbnRl bF9kcF9pbml0X2Nvbm5lY3RvcihkaWdfcG9ydCwgaW50ZWxfY29ubmVjdG9yKSkKKwkJZ290byBl cnJfaW5pdF9jb25uZWN0b3I7CisKKwlyZXR1cm4gdHJ1ZTsKKworZXJyX2luaXRfY29ubmVjdG9y OgorCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CitlcnJfZW5jb2Rlcl9pbml0OgorCWtm cmVlKGludGVsX2Nvbm5lY3Rvcik7CitlcnJfY29ubmVjdG9yX2FsbG9jOgorCWtmcmVlKGRpZ19w b3J0KTsKKwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2c0eF9kcC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9nNHhfZHAu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY1MDY2OTM3NjYxZgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvZzR4X2RwLmgK QEAgLTAsMCArMSwzNiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoK KyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBf RzRYX0RQX0hfCisjZGVmaW5lIF9HNFhfRFBfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ CisKKyNpbmNsdWRlICJpOTE1X3JlZy5oIgorCitlbnVtIHBpcGU7CitlbnVtIHBvcnQ7CitzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBpbnRlbF9jcnRjX3N0YXRlOworc3RydWN0IGlu dGVsX2RwOworc3RydWN0IGludGVsX2VuY29kZXI7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg aW50IGludGVsX2RwX3VudXNlZF9sYW5lX21hc2soaW50IGxhbmVfY291bnQpCit7CisJcmV0dXJu IH4oKDEgPDwgbGFuZV9jb3VudCkgLSAxKSAmIDB4ZjsKK30KKworY29uc3Qgc3RydWN0IGRwbGwg KnZsdl9nZXRfZHBsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CitlbnVtIHBpcGUg dmx2X2FjdGl2ZV9waXBlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwordm9pZCBpbnRlbF9k cF9zZXRfY2xvY2soc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQlzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOworYm9vbCBpbnRlbF9kcF9wb3J0X2VuYWJsZWQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgaTkxNV9yZWdfdCBkcF9y ZWcsIGVudW0gcG9ydCBwb3J0LAorCQkJICAgZW51bSBwaXBlICpwaXBlKTsKK2Jvb2wgaW50ZWxf ZHBfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCSAgIGk5MTVfcmVn X3Qgb3V0cHV0X3JlZywKKwkJICAgZW51bSBwb3J0IHBvcnQpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggNjY5OTBlNDhjMGQ0 Li43ZGI3OWEyMzYxNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheS5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9zZHZv LmgiCiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF90di5oIgogI2luY2x1ZGUgImRpc3BsYXkvaW50 ZWxfdmRzYy5oIgorI2luY2x1ZGUgImRpc3BsYXkvZzR4X2RwLmgiCiAKICNpbmNsdWRlICJndC9p bnRlbF9ycHMuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCmluZGV4 IDM0OTY0N2Y2YmJiOS4uMjQ1NmUxOTQ5YzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kcC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+ CiAjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4KIAorI2luY2x1ZGUgImc0eF9kcC5o IgogI2luY2x1ZGUgImk5MTVfZGVidWdmcy5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5j bHVkZSAiaTkxNV90cmFjZS5oIgpAQCAtODAsNTIgKzgxLDYgQEAKICNkZWZpbmUgSU5URUxfRFBf UkVTT0xVVElPTl9TVEFOREFSRAkoMiA8PCBJTlRFTF9EUF9SRVNPTFVUSU9OX1NISUZUX01BU0sp CiAjZGVmaW5lIElOVEVMX0RQX1JFU09MVVRJT05fRkFJTFNBRkUJKDMgPDwgSU5URUxfRFBfUkVT T0xVVElPTl9TSElGVF9NQVNLKQogCi1zdHJ1Y3QgZHBfbGlua19kcGxsIHsKLQlpbnQgY2xvY2s7 Ci0Jc3RydWN0IGRwbGwgZHBsbDsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBfbGlua19k cGxsIGc0eF9kcGxsW10gPSB7Ci0JeyAxNjIwMDAsCi0JCXsgLnAxID0gMiwgLnAyID0gMTAsIC5u ID0gMiwgLm0xID0gMjMsIC5tMiA9IDggfSB9LAotCXsgMjcwMDAwLAotCQl7IC5wMSA9IDEsIC5w MiA9IDEwLCAubiA9IDEsIC5tMSA9IDE0LCAubTIgPSAyIH0gfQotfTsKLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBkcF9saW5rX2RwbGwgcGNoX2RwbGxbXSA9IHsKLQl7IDE2MjAwMCwKLQkJeyAucDEg PSAyLCAucDIgPSAxMCwgLm4gPSAxLCAubTEgPSAxMiwgLm0yID0gOSB9IH0sCi0JeyAyNzAwMDAs Ci0JCXsgLnAxID0gMSwgLnAyID0gMTAsIC5uID0gMiwgLm0xID0gMTQsIC5tMiA9IDggfSB9Ci19 OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRwX2xpbmtfZHBsbCB2bHZfZHBsbFtdID0gewotCXsg MTYyMDAwLAotCQl7IC5wMSA9IDMsIC5wMiA9IDIsIC5uID0gNSwgLm0xID0gMywgLm0yID0gODEg fSB9LAotCXsgMjcwMDAwLAotCQl7IC5wMSA9IDIsIC5wMiA9IDIsIC5uID0gMSwgLm0xID0gMiwg Lm0yID0gMjcgfSB9Ci19OwotCi0vKgotICogQ0hWIHN1cHBvcnRzIGVEUCAxLjQgdGhhdCBoYXZl ICBtb3JlIGxpbmsgcmF0ZXMuCi0gKiBCZWxvdyBvbmx5IHByb3ZpZGVzIHRoZSBmaXhlZCByYXRl IGJ1dCBleGNsdWRlIHZhcmlhYmxlIHJhdGUuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBf bGlua19kcGxsIGNodl9kcGxsW10gPSB7Ci0JLyoKLQkgKiBDSFYgcmVxdWlyZXMgdG8gcHJvZ3Jh bSBmcmFjdGlvbmFsIGRpdmlzaW9uIGZvciBtMi4KLQkgKiBtMiBpcyBzdG9yZWQgaW4gZml4ZWQg cG9pbnQgZm9ybWF0IHVzaW5nIGZvcm11bGEgYmVsb3cKLQkgKiAobTJfaW50IDw8IDIyKSB8IG0y X2ZyYWN0aW9uCi0JICovCi0JeyAxNjIwMDAsCS8qIG0yX2ludCA9IDMyLCBtMl9mcmFjdGlvbiA9 IDE2Nzc3MjIgKi8KLQkJeyAucDEgPSA0LCAucDIgPSAyLCAubiA9IDEsIC5tMSA9IDIsIC5tMiA9 IDB4ODE5OTk5YSB9IH0sCi0JeyAyNzAwMDAsCS8qIG0yX2ludCA9IDI3LCBtMl9mcmFjdGlvbiA9 IDAgKi8KLQkJeyAucDEgPSA0LCAucDIgPSAxLCAubiA9IDEsIC5tMSA9IDIsIC5tMiA9IDB4NmMw MDAwMCB9IH0sCi19OwotCi1jb25zdCBzdHJ1Y3QgZHBsbCAqdmx2X2dldF9kcGxsKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KQotewotCXJldHVybiBJU19DSEVSUllWSUVXKGk5MTUpID8g JmNodl9kcGxsWzBdLmRwbGwgOiAmdmx2X2RwbGxbMF0uZHBsbDsKLX0KIAogLyogQ29uc3RhbnRz IGZvciBEUCBEU0MgY29uZmlndXJhdGlvbnMgKi8KIHN0YXRpYyBjb25zdCB1OCB2YWxpZF9kc2Nf YnBwW10gPSB7NiwgOCwgMTAsIDEyLCAxNX07CkBAIC0xNDksOCArMTA0LDYgQEAgYm9vbCBpbnRl bF9kcF9pc19lZHAoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIAlyZXR1cm4gZGlnX3BvcnQt PmJhc2UudHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9k cF9saW5rX2Rvd24oc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkgICAgICAgY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKTsKIHN0YXRpYyB2b2lk IGludGVsX2RwX3Vuc2V0X2VkaWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7CiAKIC8qIHVw ZGF0ZSBzaW5rIHJhdGVzIGZyb20gZHBjZCAqLwpAQCAtMTU1NSwzOSArMTUwOCw2IEBAIGJvb2wg aW50ZWxfZHBfc291cmNlX3N1cHBvcnRzX2hicjMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK IAlyZXR1cm4gbWF4X3JhdGUgPj0gODEwMDAwOwogfQogCi1zdGF0aWMgdm9pZAotaW50ZWxfZHBf c2V0X2Nsb2NrKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkgICBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRw X2xpbmtfZHBsbCAqZGl2aXNvciA9IE5VTEw7Ci0JaW50IGksIGNvdW50ID0gMDsKLQotCWlmIChJ U19HNFgoZGV2X3ByaXYpKSB7Ci0JCWRpdmlzb3IgPSBnNHhfZHBsbDsKLQkJY291bnQgPSBBUlJB WV9TSVpFKGc0eF9kcGxsKTsKLQl9IGVsc2UgaWYgKEhBU19QQ0hfU1BMSVQoZGV2X3ByaXYpKSB7 Ci0JCWRpdmlzb3IgPSBwY2hfZHBsbDsKLQkJY291bnQgPSBBUlJBWV9TSVpFKHBjaF9kcGxsKTsK LQl9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWRpdmlzb3IgPSBjaHZf ZHBsbDsKLQkJY291bnQgPSBBUlJBWV9TSVpFKGNodl9kcGxsKTsKLQl9IGVsc2UgaWYgKElTX1ZB TExFWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWRpdmlzb3IgPSB2bHZfZHBsbDsKLQkJY291bnQgPSBB UlJBWV9TSVpFKHZsdl9kcGxsKTsKLQl9Ci0KLQlpZiAoZGl2aXNvciAmJiBjb3VudCkgewotCQlm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJaWYgKHBpcGVfY29uZmlnLT5wb3J0X2Ns b2NrID09IGRpdmlzb3JbaV0uY2xvY2spIHsKLQkJCQlwaXBlX2NvbmZpZy0+ZHBsbCA9IGRpdmlz b3JbaV0uZHBsbDsKLQkJCQlwaXBlX2NvbmZpZy0+Y2xvY2tfc2V0ID0gdHJ1ZTsKLQkJCQlicmVh azsKLQkJCX0KLQkJfQotCX0KLX0KLQogc3RhdGljIHZvaWQgc25wcmludGZfaW50X2FycmF5KGNo YXIgKnN0ciwgc2l6ZV90IGxlbiwKIAkJCSAgICAgICBjb25zdCBpbnQgKmFycmF5LCBpbnQgbmVs ZW0pCiB7CkBAIC0yNTIzLDkwICsyNDQzLDYgQEAgdm9pZCBpbnRlbF9kcF9zZXRfbGlua19wYXJh bXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKIAlpbnRlbF9kcC0+bGFuZV9jb3VudCA9IGxh bmVfY291bnQ7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2RwX3ByZXBhcmUoc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpwaXBlX2NvbmZpZykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0g ZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwotCWVudW0gcG9ydCBwb3J0ID0gZW5jb2Rlci0+cG9y dDsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25maWct PnVhcGkuY3J0Yyk7Ci0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21v ZGUgPSAmcGlwZV9jb25maWctPmh3LmFkanVzdGVkX21vZGU7Ci0KLQlpbnRlbF9kcF9zZXRfbGlu a19wYXJhbXMoaW50ZWxfZHAsCi0JCQkJIHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrLAotCQkJCSBw aXBlX2NvbmZpZy0+bGFuZV9jb3VudCk7Ci0KLQkvKgotCSAqIFRoZXJlIGFyZSBmb3VyIGtpbmRz IG9mIERQIHJlZ2lzdGVyczoKLQkgKgotCSAqIAlJQlggUENICi0JICogCVNOQiBDUFUKLQkgKglJ VkIgQ1BVCi0JICogCUNQVCBQQ0gKLQkgKgotCSAqIElCWCBQQ0ggYW5kIENQVSBhcmUgdGhlIHNh bWUgZm9yIGFsbW9zdCBldmVyeXRoaW5nLAotCSAqIGV4Y2VwdCB0aGF0IHRoZSBDUFUgRFAgUExM IGlzIGNvbmZpZ3VyZWQgaW4gdGhpcwotCSAqIHJlZ2lzdGVyCi0JICoKLQkgKiBDUFQgUENIIGlz IHF1aXRlIGRpZmZlcmVudCwgaGF2aW5nIG1hbnkgYml0cyBtb3ZlZAotCSAqIHRvIHRoZSBUUkFO U19EUF9DVEwgcmVnaXN0ZXIgaW5zdGVhZC4gVGhhdAotCSAqIGNvbmZpZ3VyYXRpb24gaGFwcGVu cyAob2RkbHkpIGluIGlsa19wY2hfZW5hYmxlCi0JICovCi0KLQkvKiBQcmVzZXJ2ZSB0aGUgQklP Uy1jb21wdXRlZCBkZXRlY3RlZCBiaXQuIFRoaXMgaXMKLQkgKiBzdXBwb3NlZCB0byBiZSByZWFk LW9ubHkuCi0JICovCi0JaW50ZWxfZHAtPkRQID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50 ZWxfZHAtPm91dHB1dF9yZWcpICYgRFBfREVURUNURUQ7Ci0KLQkvKiBIYW5kbGUgRFAgYml0cyBp biBjb21tb24gYmV0d2VlbiBhbGwgdGhyZWUgcmVnaXN0ZXIgZm9ybWF0cyAqLwotCWludGVsX2Rw LT5EUCB8PSBEUF9WT0xUQUdFXzBfNCB8IERQX1BSRV9FTVBIQVNJU18wOwotCWludGVsX2RwLT5E UCB8PSBEUF9QT1JUX1dJRFRIKHBpcGVfY29uZmlnLT5sYW5lX2NvdW50KTsKLQotCS8qIFNwbGl0 IG91dCB0aGUgSUJYL0NQVSB2cyBDUFQgc2V0dGluZ3MgKi8KLQotCWlmIChJU19JVllCUklER0Uo ZGV2X3ByaXYpICYmIHBvcnQgPT0gUE9SVF9BKSB7Ci0JCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFn cyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQotCQkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNfSFNf SElHSDsKLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMp Ci0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19WU19ISUdIOwotCQlpbnRlbF9kcC0+RFAgfD0g RFBfTElOS19UUkFJTl9PRkZfQ1BUOwotCi0JCWlmIChkcm1fZHBfZW5oYW5jZWRfZnJhbWVfY2Fw KGludGVsX2RwLT5kcGNkKSkKLQkJCWludGVsX2RwLT5EUCB8PSBEUF9FTkhBTkNFRF9GUkFNSU5H OwotCi0JCWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NFTF9JVkIoY3J0Yy0+cGlwZSk7Ci0JfSBl bHNlIGlmIChIQVNfUENIX0NQVChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpIHsKLQkJdTMy IHRyYW5zX2RwOwotCi0JCWludGVsX2RwLT5EUCB8PSBEUF9MSU5LX1RSQUlOX09GRl9DUFQ7Ci0K LQkJdHJhbnNfZHAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBUUkFOU19EUF9DVEwoY3J0Yy0+ cGlwZSkpOwotCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkp Ci0JCQl0cmFuc19kcCB8PSBUUkFOU19EUF9FTkhfRlJBTUlORzsKLQkJZWxzZQotCQkJdHJhbnNf ZHAgJj0gflRSQU5TX0RQX0VOSF9GUkFNSU5HOwotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg VFJBTlNfRFBfQ1RMKGNydGMtPnBpcGUpLCB0cmFuc19kcCk7Ci0JfSBlbHNlIHsKLQkJaWYgKElT X0c0WChkZXZfcHJpdikgJiYgcGlwZV9jb25maWctPmxpbWl0ZWRfY29sb3JfcmFuZ2UpCi0JCQlp bnRlbF9kcC0+RFAgfD0gRFBfQ09MT1JfUkFOR0VfMTZfMjM1OwotCi0JCWlmIChhZGp1c3RlZF9t b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQotCQkJaW50ZWxfZHAtPkRQIHw9IERQ X1NZTkNfSFNfSElHSDsKLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB R19QVlNZTkMpCi0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19WU19ISUdIOwotCQlpbnRlbF9k cC0+RFAgfD0gRFBfTElOS19UUkFJTl9PRkY7Ci0KLQkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFt ZV9jYXAoaW50ZWxfZHAtPmRwY2QpKQotCQkJaW50ZWxfZHAtPkRQIHw9IERQX0VOSEFOQ0VEX0ZS QU1JTkc7Ci0KLQkJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQkJaW50ZWxfZHAtPkRQ IHw9IERQX1BJUEVfU0VMX0NIVihjcnRjLT5waXBlKTsKLQkJZWxzZQotCQkJaW50ZWxfZHAtPkRQ IHw9IERQX1BJUEVfU0VMKGNydGMtPnBpcGUpOwotCX0KLX0KLQotCiAvKiBFbmFibGUgYmFja2xp Z2h0IFBXTSBhbmQgYmFja2xpZ2h0IFBQIGNvbnRyb2wuICovCiB2b2lkIGludGVsX2VkcF9iYWNr bGlnaHRfb24oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQkg ICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCkBAIC0yNjM4 LDg5ICsyNDc0LDYgQEAgdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X29mZihjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUpCiAJaW50ZWxfcGFuZWxfZGlzYWJs ZV9iYWNrbGlnaHQob2xkX2Nvbm5fc3RhdGUpOwogfQogCi1zdGF0aWMgdm9pZCBhc3NlcnRfZHBf cG9ydChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBib29sIHN0YXRlKQotewotCXN0cnVjdCBp bnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGlnX3BvcnQtPmJh c2UuYmFzZS5kZXYpOwotCWJvb2wgY3VyX3N0YXRlID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg aW50ZWxfZHAtPm91dHB1dF9yZWcpICYgRFBfUE9SVF9FTjsKLQotCUk5MTVfU1RBVEVfV0FSTihj dXJfc3RhdGUgIT0gc3RhdGUsCi0JCQkiW0VOQ09ERVI6JWQ6JXNdIHN0YXRlIGFzc2VydGlvbiBm YWlsdXJlIChleHBlY3RlZCAlcywgY3VycmVudCAlcylcbiIsCi0JCQlkaWdfcG9ydC0+YmFzZS5i YXNlLmJhc2UuaWQsIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSwKLQkJCW9ub2ZmKHN0YXRlKSwg b25vZmYoY3VyX3N0YXRlKSk7Ci19Ci0jZGVmaW5lIGFzc2VydF9kcF9wb3J0X2Rpc2FibGVkKGQp IGFzc2VydF9kcF9wb3J0KChkKSwgZmFsc2UpCi0KLXN0YXRpYyB2b2lkIGFzc2VydF9lZHBfcGxs KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgYm9vbCBzdGF0ZSkKLXsKLQlib29s IGN1cl9zdGF0ZSA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERQX0EpICYgRFBfUExMX0VOQUJM RTsKLQotCUk5MTVfU1RBVEVfV0FSTihjdXJfc3RhdGUgIT0gc3RhdGUsCi0JCQkiZURQIFBMTCBz dGF0ZSBhc3NlcnRpb24gZmFpbHVyZSAoZXhwZWN0ZWQgJXMsIGN1cnJlbnQgJXMpXG4iLAotCQkJ b25vZmYoc3RhdGUpLCBvbm9mZihjdXJfc3RhdGUpKTsKLX0KLSNkZWZpbmUgYXNzZXJ0X2VkcF9w bGxfZW5hYmxlZChkKSBhc3NlcnRfZWRwX3BsbCgoZCksIHRydWUpCi0jZGVmaW5lIGFzc2VydF9l ZHBfcGxsX2Rpc2FibGVkKGQpIGFzc2VydF9lZHBfcGxsKChkKSwgZmFsc2UpCi0KLXN0YXRpYyB2 b2lkIGlsa19lZHBfcGxsX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCi0JCQkgICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCi17Ci0Jc3RydWN0IGludGVs X2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKHBpcGVfY29uZmlnLT51YXBpLmNydGMpOwotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYp OwotCi0JYXNzZXJ0X3BpcGVfZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGVfY29uZmlnLT5jcHVfdHJh bnNjb2Rlcik7Ci0JYXNzZXJ0X2RwX3BvcnRfZGlzYWJsZWQoaW50ZWxfZHApOwotCWFzc2VydF9l ZHBfcGxsX2Rpc2FibGVkKGRldl9wcml2KTsKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiZW5hYmxpbmcgZURQIFBMTCBmb3IgY2xvY2sgJWRcbiIsCi0JCSAgICBwaXBlX2NvbmZpZy0+ cG9ydF9jbG9jayk7Ci0KLQlpbnRlbF9kcC0+RFAgJj0gfkRQX1BMTF9GUkVRX01BU0s7Ci0KLQlp ZiAocGlwZV9jb25maWctPnBvcnRfY2xvY2sgPT0gMTYyMDAwKQotCQlpbnRlbF9kcC0+RFAgfD0g RFBfUExMX0ZSRVFfMTYyTUhaOwotCWVsc2UKLQkJaW50ZWxfZHAtPkRQIHw9IERQX1BMTF9GUkVR XzI3ME1IWjsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUF9BLCBpbnRlbF9kcC0+RFAp OwotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRFBfQSk7Ci0JdWRlbGF5KDUwMCk7 Ci0KLQkvKgotCSAqIFtEZXZJTEtdIFdvcmsgYXJvdW5kIHJlcXVpcmVkIHdoZW4gZW5hYmxpbmcg RFAgUExMCi0JICogd2hpbGUgYSBwaXBlIGlzIGVuYWJsZWQgZ29pbmcgdG8gRkRJOgotCSAqIDEu IFdhaXQgZm9yIHRoZSBzdGFydCBvZiB2ZXJ0aWNhbCBibGFuayBvbiB0aGUgZW5hYmxlZCBwaXBl IGdvaW5nIHRvIEZESQotCSAqIDIuIFByb2dyYW0gRFAgUExMIGVuYWJsZQotCSAqLwotCWlmIChJ U19HRU4oZGV2X3ByaXYsIDUpKQotCQlpbnRlbF93YWl0X2Zvcl92YmxhbmtfaWZfYWN0aXZlKGRl dl9wcml2LCAhY3J0Yy0+cGlwZSk7Ci0KLQlpbnRlbF9kcC0+RFAgfD0gRFBfUExMX0VOQUJMRTsK LQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUF9BLCBpbnRlbF9kcC0+RFApOwotCWludGVs X2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRFBfQSk7Ci0JdWRlbGF5KDIwMCk7Ci19Ci0KLXN0 YXRpYyB2b2lkIGlsa19lZHBfcGxsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAotCQkJ ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKLXsKLQlz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMob2xkX2NydGNfc3RhdGUtPnVh cGkuY3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShj cnRjLT5iYXNlLmRldik7Ci0KLQlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZfcHJpdiwgb2xkX2Ny dGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyKTsKLQlhc3NlcnRfZHBfcG9ydF9kaXNhYmxlZChpbnRl bF9kcCk7Ci0JYXNzZXJ0X2VkcF9wbGxfZW5hYmxlZChkZXZfcHJpdik7Ci0KLQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwgImRpc2FibGluZyBlRFAgUExMXG4iKTsKLQotCWludGVsX2RwLT5E UCAmPSB+RFBfUExMX0VOQUJMRTsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUF9BLCBp bnRlbF9kcC0+RFApOwotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRFBfQSk7Ci0J dWRlbGF5KDIwMCk7Ci19Ci0KIHN0YXRpYyBib29sIGRvd25zdHJlYW1faHBkX25lZWRzX2QwKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7CiAJLyoKQEAgLTI4MjMsMTYwICsyNTc2LDYgQEAg dm9pZCBpbnRlbF9kcF9zZXRfcG93ZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdTggbW9k ZSkKIAkJCSAgICBtb2RlID09IERQX1NFVF9QT1dFUl9EMCA/ICJEMCIgOiAiRDMiKTsKIH0KIAot c3RhdGljIGJvb2wgY3B0X2RwX3BvcnRfc2VsZWN0ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAotCQkJCSBlbnVtIHBvcnQgcG9ydCwgZW51bSBwaXBlICpwaXBlKQotewotCWVu dW0gcGlwZSBwOwotCi0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcCkgewotCQl1MzIgdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVFJBTlNfRFBfQ1RMKHApKTsKLQotCQlpZiAoKHZhbCAm IFRSQU5TX0RQX1BPUlRfU0VMX01BU0spID09IFRSQU5TX0RQX1BPUlRfU0VMKHBvcnQpKSB7Ci0J CQkqcGlwZSA9IHA7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLCAiTm8gcGlwZSBmb3IgRFAgcG9ydCAlYyBmb3VuZFxuIiwKLQkJICAgIHBv cnRfbmFtZShwb3J0KSk7Ci0KLQkvKiBtdXN0IGluaXRpYWxpemUgcGlwZSB0byBzb21ldGhpbmcg Zm9yIHRoZSBhc3NlcnRzICovCi0JKnBpcGUgPSBQSVBFX0E7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19 Ci0KLWJvb2wgaW50ZWxfZHBfcG9ydF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKLQkJCSAgIGk5MTVfcmVnX3QgZHBfcmVnLCBlbnVtIHBvcnQgcG9ydCwKLQkJCSAg IGVudW0gcGlwZSAqcGlwZSkKLXsKLQlib29sIHJldDsKLQl1MzIgdmFsOwotCi0JdmFsID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgZHBfcmVnKTsKLQotCXJldCA9IHZhbCAmIERQX1BPUlRfRU47 Ci0KLQkvKiBhc3NlcnRzIHdhbnQgdG8ga25vdyB0aGUgcGlwZSBldmVuIGlmIHRoZSBwb3J0IGlz IGRpc2FibGVkICovCi0JaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9PSBQT1JU X0EpCi0JCSpwaXBlID0gKHZhbCAmIERQX1BJUEVfU0VMX01BU0tfSVZCKSA+PiBEUF9QSVBFX1NF TF9TSElGVF9JVkI7Ci0JZWxzZSBpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpICYmIHBvcnQgIT0g UE9SVF9BKQotCQlyZXQgJj0gY3B0X2RwX3BvcnRfc2VsZWN0ZWQoZGV2X3ByaXYsIHBvcnQsIHBp cGUpOwotCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQkqcGlwZSA9ICh2YWwg JiBEUF9QSVBFX1NFTF9NQVNLX0NIVikgPj4gRFBfUElQRV9TRUxfU0hJRlRfQ0hWOwotCWVsc2UK LQkJKnBpcGUgPSAodmFsICYgRFBfUElQRV9TRUxfTUFTSykgPj4gRFBfUElQRV9TRUxfU0hJRlQ7 Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgYm9vbCBpbnRlbF9kcF9nZXRfaHdfc3RhdGUo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkJICBlbnVtIHBpcGUgKnBpcGUpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5i YXNlLmRldik7Ci0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChl bmNvZGVyKTsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQlib29sIHJldDsKLQotCXdha2Vy ZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LAotCQkJCQkJ ICAgICBlbmNvZGVyLT5wb3dlcl9kb21haW4pOwotCWlmICghd2FrZXJlZikKLQkJcmV0dXJuIGZh bHNlOwotCi0JcmV0ID0gaW50ZWxfZHBfcG9ydF9lbmFibGVkKGRldl9wcml2LCBpbnRlbF9kcC0+ b3V0cHV0X3JlZywKLQkJCQkgICAgZW5jb2Rlci0+cG9ydCwgcGlwZSk7Ci0KLQlpbnRlbF9kaXNw bGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgZW5jb2Rlci0+cG93ZXJfZG9tYWluLCB3YWtlcmVmKTsK LQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2RwX2dldF9jb25maWcoc3Ry dWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkJc3RydWN0IGludGVsX2NydGNfc3RhdGUg KnBpcGVfY29uZmlnKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwotCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBl bmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Ci0JdTMyIHRtcCwgZmxhZ3MgPSAwOwotCWVudW0gcG9y dCBwb3J0ID0gZW5jb2Rlci0+cG9ydDsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2lu dGVsX2NydGMocGlwZV9jb25maWctPnVhcGkuY3J0Yyk7Ci0KLQlpZiAoZW5jb2Rlci0+dHlwZSA9 PSBJTlRFTF9PVVRQVVRfRURQKQotCQlwaXBlX2NvbmZpZy0+b3V0cHV0X3R5cGVzIHw9IEJJVChJ TlRFTF9PVVRQVVRfRURQKTsKLQllbHNlCi0JCXBpcGVfY29uZmlnLT5vdXRwdXRfdHlwZXMgfD0g QklUKElOVEVMX09VVFBVVF9EUCk7Ci0KLQl0bXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBp bnRlbF9kcC0+b3V0cHV0X3JlZyk7Ci0KLQlwaXBlX2NvbmZpZy0+aGFzX2F1ZGlvID0gdG1wICYg RFBfQVVESU9fT1VUUFVUX0VOQUJMRSAmJiBwb3J0ICE9IFBPUlRfQTsKLQotCWlmIChIQVNfUENI X0NQVChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpIHsKLQkJdTMyIHRyYW5zX2RwID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwKLQkJCQkJICAgICBUUkFOU19EUF9DVEwoY3J0Yy0+cGlwZSkp OwotCi0JCWlmICh0cmFuc19kcCAmIFRSQU5TX0RQX0hTWU5DX0FDVElWRV9ISUdIKQotCQkJZmxh Z3MgfD0gRFJNX01PREVfRkxBR19QSFNZTkM7Ci0JCWVsc2UKLQkJCWZsYWdzIHw9IERSTV9NT0RF X0ZMQUdfTkhTWU5DOwotCi0JCWlmICh0cmFuc19kcCAmIFRSQU5TX0RQX1ZTWU5DX0FDVElWRV9I SUdIKQotCQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QVlNZTkM7Ci0JCWVsc2UKLQkJCWZsYWdz IHw9IERSTV9NT0RFX0ZMQUdfTlZTWU5DOwotCX0gZWxzZSB7Ci0JCWlmICh0bXAgJiBEUF9TWU5D X0hTX0hJR0gpCi0JCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX1BIU1lOQzsKLQkJZWxzZQotCQkJ ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7Ci0KLQkJaWYgKHRtcCAmIERQX1NZTkNfVlNf SElHSCkKLQkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUFZTWU5DOwotCQllbHNlCi0JCQlmbGFn cyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKLQl9Ci0KLQlwaXBlX2NvbmZpZy0+aHcuYWRqdXN0 ZWRfbW9kZS5mbGFncyB8PSBmbGFnczsKLQotCWlmIChJU19HNFgoZGV2X3ByaXYpICYmIHRtcCAm IERQX0NPTE9SX1JBTkdFXzE2XzIzNSkKLQkJcGlwZV9jb25maWctPmxpbWl0ZWRfY29sb3JfcmFu Z2UgPSB0cnVlOwotCi0JcGlwZV9jb25maWctPmxhbmVfY291bnQgPQotCQkoKHRtcCAmIERQX1BP UlRfV0lEVEhfTUFTSykgPj4gRFBfUE9SVF9XSURUSF9TSElGVCkgKyAxOwotCi0JaW50ZWxfZHBf Z2V0X21fbihjcnRjLCBwaXBlX2NvbmZpZyk7Ci0KLQlpZiAocG9ydCA9PSBQT1JUX0EpIHsKLQkJ aWYgKChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEUF9BKSAmIERQX1BMTF9GUkVRX01BU0spID09 IERQX1BMTF9GUkVRXzE2Mk1IWikKLQkJCXBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrID0gMTYyMDAw OwotCQllbHNlCi0JCQlwaXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9IDI3MDAwMDsKLQl9Ci0KLQlw aXBlX2NvbmZpZy0+aHcuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrID0KLQkJaW50ZWxfZG90Y2xv Y2tfY2FsY3VsYXRlKHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrLAotCQkJCQkgJnBpcGVfY29uZmln LT5kcF9tX24pOwotCi0JaWYgKGludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkgJiYgZGV2X3ByaXYt PnZidC5lZHAuYnBwICYmCi0JICAgIHBpcGVfY29uZmlnLT5waXBlX2JwcCA+IGRldl9wcml2LT52 YnQuZWRwLmJwcCkgewotCQkvKgotCQkgKiBUaGlzIGlzIGEgYmlnIGZhdCB1Z2x5IGhhY2suCi0J CSAqCi0JCSAqIFNvbWUgbWFjaGluZXMgaW4gVUVGSSBib290IG1vZGUgcHJvdmlkZSB1cyBhIFZC VCB0aGF0IGhhcyAxOAotCQkgKiBicHAgYW5kIDEuNjIgR0h6IGxpbmsgYmFuZHdpZHRoIGZvciBl RFAsIHdoaWNoIGZvciByZWFzb25zCi0JCSAqIHVua25vd24gd2UgZmFpbCB0byBsaWdodCB1cC4g WWV0IHRoZSBzYW1lIEJJT1MgYm9vdHMgdXAgd2l0aAotCQkgKiAyNCBicHAgYW5kIDIuNyBHSHog bGluay4gVXNlIHRoZSBzYW1lIGJwcCBhcyB0aGUgQklPUyB1c2VzIGFzCi0JCSAqIG1heCwgbm90 IHdoYXQgaXQgdGVsbHMgdXMgdG8gdXNlLgotCQkgKgotCQkgKiBOb3RlOiBUaGlzIHdpbGwgc3Rp bGwgYmUgYnJva2VuIGlmIHRoZSBlRFAgcGFuZWwgaXMgbm90IGxpdAotCQkgKiB1cCBieSB0aGUg QklPUywgYW5kIHRodXMgd2UgY2FuJ3QgZ2V0IHRoZSBtb2RlIGF0IG1vZHVsZQotCQkgKiBsb2Fk LgotCQkgKi8KLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgInBpcGUgaGFz ICVkIGJwcCBmb3IgZURQIHBhbmVsLCBvdmVycmlkaW5nIEJJT1MtcHJvdmlkZWQgbWF4ICVkIGJw cFxuIiwKLQkJCSAgICBwaXBlX2NvbmZpZy0+cGlwZV9icHAsIGRldl9wcml2LT52YnQuZWRwLmJw cCk7Ci0JCWRldl9wcml2LT52YnQuZWRwLmJwcCA9IHBpcGVfY29uZmlnLT5waXBlX2JwcDsKLQl9 Ci19Ci0KIHN0YXRpYyBib29sCiBpbnRlbF9kcF9nZXRfZHBjZChzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKTsKIApAQCAtMzA0MywxMjAgKzI2NDIsNiBAQCBib29sIGludGVsX2RwX2luaXRpYWxf ZmFzdHNldF9jaGVjayhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKIAlyZXR1cm4gdHJ1 ZTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWlj X3N0YXRlICpzdGF0ZSwKLQkJCSAgICAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0J CQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKLQkJ CSAgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQot ewotCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7 Ci0KLQlpbnRlbF9kcC0+bGlua190cmFpbmVkID0gZmFsc2U7Ci0KLQlpZiAob2xkX2NydGNfc3Rh dGUtPmhhc19hdWRpbykKLQkJaW50ZWxfYXVkaW9fY29kZWNfZGlzYWJsZShlbmNvZGVyLAotCQkJ CQkgIG9sZF9jcnRjX3N0YXRlLCBvbGRfY29ubl9zdGF0ZSk7Ci0KLQkvKiBNYWtlIHN1cmUgdGhl IHBhbmVsIGlzIG9mZiBiZWZvcmUgdHJ5aW5nIHRvIGNoYW5nZSB0aGUgbW9kZS4gQnV0IGFsc28K LQkgKiBlbnN1cmUgdGhhdCB3ZSBoYXZlIHZkZCB3aGlsZSB3ZSBzd2l0Y2ggb2ZmIHRoZSBwYW5l bC4gKi8KLQlpbnRlbF9wcHNfdmRkX29uKGludGVsX2RwKTsKLQlpbnRlbF9lZHBfYmFja2xpZ2h0 X29mZihvbGRfY29ubl9zdGF0ZSk7Ci0JaW50ZWxfZHBfc2V0X3Bvd2VyKGludGVsX2RwLCBEUF9T RVRfUE9XRVJfRDMpOwotCWludGVsX3Bwc19vZmYoaW50ZWxfZHApOwotCWludGVsX2RwLT5mcmwu aXNfdHJhaW5lZCA9IGZhbHNlOwotCWludGVsX2RwLT5mcmwudHJhaW5lZF9yYXRlX2dicHMgPSAw OwotfQotCi1zdGF0aWMgdm9pZCBnNHhfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwKLQkJCSAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJICAg Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLAotCQkJICAgY29u c3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQotewotCWludGVs X2Rpc2FibGVfZHAoc3RhdGUsIGVuY29kZXIsIG9sZF9jcnRjX3N0YXRlLCBvbGRfY29ubl9zdGF0 ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9kaXNhYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNf c3RhdGUgKnN0YXRlLAotCQkJICAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCi0JCQkgICBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUpCi17Ci0JaW50 ZWxfZGlzYWJsZV9kcChzdGF0ZSwgZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUsIG9sZF9jb25uX3N0 YXRlKTsKLX0KLQotc3RhdGljIHZvaWQgZzR4X3Bvc3RfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxf YXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwK LQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCi0JCQkJ Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQotewotCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Ci0JZW51 bSBwb3J0IHBvcnQgPSBlbmNvZGVyLT5wb3J0OwotCi0JLyoKLQkgKiBCc3BlYyBkb2VzIG5vdCBs aXN0IGEgc3BlY2lmaWMgZGlzYWJsZSBzZXF1ZW5jZSBmb3IgZzR4IERQLgotCSAqIEZvbGxvdyB0 aGUgaWxrKyBzZXF1ZW5jZSAoZGlzYWJsZSBwaXBlIGJlZm9yZSB0aGUgcG9ydCkgZm9yCi0JICog ZzR4IERQIGFzIGl0IGRvZXMgbm90IHN1ZmZlciBmcm9tIHVuZGVycnVucyBsaWtlIHRoZSBub3Jt YWwKLQkgKiBnNHggbW9kZXNldCBzZXF1ZW5jZSAoZGlzYWJsZSBwaXBlIGFmdGVyIHRoZSBwb3J0 KS4KLQkgKi8KLQlpbnRlbF9kcF9saW5rX2Rvd24oZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUpOwot Ci0JLyogT25seSBpbGsrIGhhcyBwb3J0IEEgKi8KLQlpZiAocG9ydCA9PSBQT1JUX0EpCi0JCWls a19lZHBfcGxsX29mZihpbnRlbF9kcCwgb2xkX2NydGNfc3RhdGUpOwotfQotCi1zdGF0aWMgdm9p ZCB2bHZfcG9zdF9kaXNhYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAot CQkJCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJCWNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKLQkJCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUpCi17Ci0JaW50ZWxfZHBfbGlua19kb3duKGVuY29k ZXIsIG9sZF9jcnRjX3N0YXRlKTsKLX0KLQotc3RhdGljIHZvaWQgY2h2X3Bvc3RfZGlzYWJsZV9k cChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCQlzdHJ1Y3QgaW50ZWxfZW5j b2RlciAqZW5jb2RlciwKLQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2Ny dGNfc3RhdGUsCi0JCQkJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25u X3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZW5jb2Rlci0+YmFzZS5kZXYpOwotCi0JaW50ZWxfZHBfbGlua19kb3duKGVuY29kZXIsIG9sZF9j cnRjX3N0YXRlKTsKLQotCXZsdl9kcGlvX2dldChkZXZfcHJpdik7Ci0KLQkvKiBBc3NlcnQgZGF0 YSBsYW5lIHJlc2V0ICovCi0JY2h2X2RhdGFfbGFuZV9zb2Z0X3Jlc2V0KGVuY29kZXIsIG9sZF9j cnRjX3N0YXRlLCB0cnVlKTsKLQotCXZsdl9kcGlvX3B1dChkZXZfcHJpdik7Ci19Ci0KLXN0YXRp YyB2b2lkCi1jcHRfc2V0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJ ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgIHU4IGRw X3RyYWluX3BhdCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90 b19pOTE1KGludGVsX2RwKTsKLQl1MzIgKkRQID0gJmludGVsX2RwLT5EUDsKLQotCSpEUCAmPSB+ RFBfTElOS19UUkFJTl9NQVNLX0NQVDsKLQotCXN3aXRjaCAoaW50ZWxfZHBfdHJhaW5pbmdfcGF0 dGVybl9zeW1ib2woZHBfdHJhaW5fcGF0KSkgewotCWNhc2UgRFBfVFJBSU5JTkdfUEFUVEVSTl9E SVNBQkxFOgotCQkqRFAgfD0gRFBfTElOS19UUkFJTl9PRkZfQ1BUOwotCQlicmVhazsKLQljYXNl IERQX1RSQUlOSU5HX1BBVFRFUk5fMToKLQkJKkRQIHw9IERQX0xJTktfVFJBSU5fUEFUXzFfQ1BU OwotCQlicmVhazsKLQljYXNlIERQX1RSQUlOSU5HX1BBVFRFUk5fMjoKLQkJKkRQIHw9IERQX0xJ TktfVFJBSU5fUEFUXzJfQ1BUOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0Uo aW50ZWxfZHBfdHJhaW5pbmdfcGF0dGVybl9zeW1ib2woZHBfdHJhaW5fcGF0KSk7Ci0JCXJldHVy bjsKLQl9Ci0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcs IGludGVsX2RwLT5EUCk7Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9k cC0+b3V0cHV0X3JlZyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGludGVsX2RwX2dldF9wY29uX2RzY19j YXAoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwpAQCAtMzQzMSw1OSArMjkxNiw2IEBAIGlu dGVsX2RwX3Bjb25fZHNjX2NvbmZpZ3VyZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAogCQlk cm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiRmFpbGVkIHRvIHNldCBwY29uIERTQ1xuIik7CiB9CiAK LXN0YXRpYyB2b2lkCi1nNHhfc2V0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9k cCwKLQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAg IHU4IGRwX3RyYWluX3BhdCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsKLQl1MzIgKkRQID0gJmludGVsX2RwLT5EUDsKLQotCSpE UCAmPSB+RFBfTElOS19UUkFJTl9NQVNLOwotCi0Jc3dpdGNoIChpbnRlbF9kcF90cmFpbmluZ19w YXR0ZXJuX3N5bWJvbChkcF90cmFpbl9wYXQpKSB7Ci0JY2FzZSBEUF9UUkFJTklOR19QQVRURVJO X0RJU0FCTEU6Ci0JCSpEUCB8PSBEUF9MSU5LX1RSQUlOX09GRjsKLQkJYnJlYWs7Ci0JY2FzZSBE UF9UUkFJTklOR19QQVRURVJOXzE6Ci0JCSpEUCB8PSBEUF9MSU5LX1RSQUlOX1BBVF8xOwotCQli cmVhazsKLQljYXNlIERQX1RSQUlOSU5HX1BBVFRFUk5fMjoKLQkJKkRQIHw9IERQX0xJTktfVFJB SU5fUEFUXzI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShpbnRlbF9kcF90 cmFpbmluZ19wYXR0ZXJuX3N5bWJvbChkcF90cmFpbl9wYXQpKTsKLQkJcmV0dXJuOwotCX0KLQot CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgaW50ZWxfZHAt PkRQKTsKLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRf cmVnKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfZHBfZW5hYmxlX3BvcnQoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwKLQkJCQkgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkx NShpbnRlbF9kcCk7Ci0KLQkvKiBlbmFibGUgd2l0aCBwYXR0ZXJuIDEgKGFzIHBlciBzcGVjKSAq LwotCi0JaW50ZWxfZHBfcHJvZ3JhbV9saW5rX3RyYWluaW5nX3BhdHRlcm4oaW50ZWxfZHAsIGNy dGNfc3RhdGUsCi0JCQkJCSAgICAgICBEUF9UUkFJTklOR19QQVRURVJOXzEpOwotCi0JLyoKLQkg KiBNYWdpYyBmb3IgVkxWL0NIVi4gV2UgX211c3RfIGZpcnN0IHNldCB1cCB0aGUgcmVnaXN0ZXIK LQkgKiB3aXRob3V0IGFjdHVhbGx5IGVuYWJsaW5nIHRoZSBwb3J0LCBhbmQgdGhlbiBkbyBhbm90 aGVyCi0JICogd3JpdGUgdG8gZW5hYmxlIHRoZSBwb3J0LiBPdGhlcndpc2UgbGluayB0cmFpbmlu ZyB3aWxsCi0JICogZmFpbCB3aGVuIHRoZSBwb3dlciBzZXF1ZW5jZXIgaXMgZnJlc2hseSB1c2Vk IGZvciB0aGlzIHBvcnQuCi0JICovCi0JaW50ZWxfZHAtPkRQIHw9IERQX1BPUlRfRU47Ci0JaWYg KGNydGNfc3RhdGUtPmhhc19hdWRpbykKLQkJaW50ZWxfZHAtPkRQIHw9IERQX0FVRElPX09VVFBV VF9FTkFCTEU7Ci0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9y ZWcsIGludGVsX2RwLT5EUCk7Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRl bF9kcC0+b3V0cHV0X3JlZyk7Ci19Ci0KIHZvaWQgaW50ZWxfZHBfY29uZmlndXJlX3Byb3RvY29s X2NvbnZlcnRlcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAogCQkJCQkgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIHsKQEAgLTM1NTIsNTU4ICsyOTg0LDYg QEAgdm9pZCBpbnRlbF9kcF9jb25maWd1cmVfcHJvdG9jb2xfY29udmVydGVyKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsCiAJCQkgICBlbmFibGVkZGlzYWJsZWQodG1wID8gdHJ1ZSA6IGZhbHNl KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWlj X3N0YXRlICpzdGF0ZSwKLQkJCSAgICBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKLQkJ CSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCi0JCQkgICAg Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7 Ci0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsK LQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25maWctPnVh cGkuY3J0Yyk7Ci0JdTMyIGRwX3JlZyA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIGludGVsX2Rw LT5vdXRwdXRfcmVnKTsKLQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Ci0JaW50ZWxfd2Fr ZXJlZl90IHdha2VyZWY7Ci0KLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGRwX3Jl ZyAmIERQX1BPUlRfRU4pKQotCQlyZXR1cm47Ci0KLQl3aXRoX2ludGVsX3Bwc19sb2NrKGludGVs X2RwLCB3YWtlcmVmKSB7Ci0JCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVS UllWSUVXKGRldl9wcml2KSkKLQkJCXZsdl9wcHNfaW5pdChlbmNvZGVyLCBwaXBlX2NvbmZpZyk7 Ci0KLQkJaW50ZWxfZHBfZW5hYmxlX3BvcnQoaW50ZWxfZHAsIHBpcGVfY29uZmlnKTsKLQotCQlp bnRlbF9wcHNfdmRkX29uX3VubG9ja2VkKGludGVsX2RwKTsKLQkJaW50ZWxfcHBzX29uX3VubG9j a2VkKGludGVsX2RwKTsKLQkJaW50ZWxfcHBzX3ZkZF9vZmZfdW5sb2NrZWQoaW50ZWxfZHAsIHRy dWUpOwotCX0KLQotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVX KGRldl9wcml2KSkgewotCQl1bnNpZ25lZCBpbnQgbGFuZV9tYXNrID0gMHgwOwotCi0JCWlmIChJ U19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJCWxhbmVfbWFzayA9IGludGVsX2RwX3VudXNlZF9s YW5lX21hc2socGlwZV9jb25maWctPmxhbmVfY291bnQpOwotCi0JCXZsdl93YWl0X3BvcnRfcmVh ZHkoZGV2X3ByaXYsIGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKSwKLQkJCQkgICAgbGFuZV9tYXNr KTsKLQl9Ci0KLQlpbnRlbF9kcF9zZXRfcG93ZXIoaW50ZWxfZHAsIERQX1NFVF9QT1dFUl9EMCk7 Ci0JaW50ZWxfZHBfY29uZmlndXJlX3Byb3RvY29sX2NvbnZlcnRlcihpbnRlbF9kcCwgcGlwZV9j b25maWcpOwotCWludGVsX2RwX2NoZWNrX2ZybF90cmFpbmluZyhpbnRlbF9kcCk7Ci0JaW50ZWxf ZHBfcGNvbl9kc2NfY29uZmlndXJlKGludGVsX2RwLCBwaXBlX2NvbmZpZyk7Ci0JaW50ZWxfZHBf c3RhcnRfbGlua190cmFpbihpbnRlbF9kcCwgcGlwZV9jb25maWcpOwotCWludGVsX2RwX3N0b3Bf bGlua190cmFpbihpbnRlbF9kcCwgcGlwZV9jb25maWcpOwotCi0JaWYgKHBpcGVfY29uZmlnLT5o YXNfYXVkaW8pIHsKLQkJZHJtX2RiZygmZGV2X3ByaXYtPmRybSwgIkVuYWJsaW5nIERQIGF1ZGlv IG9uIHBpcGUgJWNcbiIsCi0JCQlwaXBlX25hbWUocGlwZSkpOwotCQlpbnRlbF9hdWRpb19jb2Rl Y19lbmFibGUoZW5jb2RlciwgcGlwZV9jb25maWcsIGNvbm5fc3RhdGUpOwotCX0KLX0KLQotc3Rh dGljIHZvaWQgZzR4X2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwK LQkJCSAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkgIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywKLQkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0JaW50ZWxfZW5hYmxlX2RwKHN0YXRlLCBlbmNv ZGVyLCBwaXBlX2NvbmZpZywgY29ubl9zdGF0ZSk7Ci0JaW50ZWxfZWRwX2JhY2tsaWdodF9vbihw aXBlX2NvbmZpZywgY29ubl9zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9lbmFibGVfZHAo c3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkgIHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyLAotCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9j b25maWcsCi0JCQkgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRl KQotewotCWludGVsX2VkcF9iYWNrbGlnaHRfb24ocGlwZV9jb25maWcsIGNvbm5fc3RhdGUpOwot fQotCi1zdGF0aWMgdm9pZCBnNHhfcHJlX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0 YXRlICpzdGF0ZSwKLQkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJ ICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAotCQkJICAg ICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0Jc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKLQllbnVt IHBvcnQgcG9ydCA9IGVuY29kZXItPnBvcnQ7Ci0KLQlpbnRlbF9kcF9wcmVwYXJlKGVuY29kZXIs IHBpcGVfY29uZmlnKTsKLQotCS8qIE9ubHkgaWxrKyBoYXMgcG9ydCBBICovCi0JaWYgKHBvcnQg PT0gUE9SVF9BKQotCQlpbGtfZWRwX3BsbF9vbihpbnRlbF9kcCwgcGlwZV9jb25maWcpOwotfQot Ci1zdGF0aWMgdm9pZCB2bHZfcHJlX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRl ICpzdGF0ZSwKLQkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJICAg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAotCQkJICAgICAg Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0Jdmx2X3Bo eV9wcmVfZW5jb2Rlcl9lbmFibGUoZW5jb2RlciwgcGlwZV9jb25maWcpOwotCi0JaW50ZWxfZW5h YmxlX2RwKHN0YXRlLCBlbmNvZGVyLCBwaXBlX2NvbmZpZywgY29ubl9zdGF0ZSk7Ci19Ci0KLXN0 YXRpYyB2b2lkIHZsdl9kcF9wcmVfcGxsX2VuYWJsZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRl ICpzdGF0ZSwKLQkJCQkgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJCSAgY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAotCQkJCSAgY29uc3Qgc3Ry dWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0JaW50ZWxfZHBfcHJlcGFy ZShlbmNvZGVyLCBwaXBlX2NvbmZpZyk7Ci0KLQl2bHZfcGh5X3ByZV9wbGxfZW5hYmxlKGVuY29k ZXIsIHBpcGVfY29uZmlnKTsKLX0KLQotc3RhdGljIHZvaWQgY2h2X3ByZV9lbmFibGVfZHAoc3Ry dWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkgICAgICBzdHJ1Y3QgaW50ZWxfZW5j b2RlciAqZW5jb2RlciwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpw aXBlX2NvbmZpZywKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpj b25uX3N0YXRlKQotewotCWNodl9waHlfcHJlX2VuY29kZXJfZW5hYmxlKGVuY29kZXIsIHBpcGVf Y29uZmlnKTsKLQotCWludGVsX2VuYWJsZV9kcChzdGF0ZSwgZW5jb2RlciwgcGlwZV9jb25maWcs IGNvbm5fc3RhdGUpOwotCi0JLyogU2Vjb25kIGNvbW1vbiBsYW5lIHdpbGwgc3RheSBhbGl2ZSBv biBpdHMgb3duIG5vdyAqLwotCWNodl9waHlfcmVsZWFzZV9jbDJfb3ZlcnJpZGUoZW5jb2Rlcik7 Ci19Ci0KLXN0YXRpYyB2b2lkIGNodl9kcF9wcmVfcGxsX2VuYWJsZShzdHJ1Y3QgaW50ZWxfYXRv bWljX3N0YXRlICpzdGF0ZSwKLQkJCQkgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAot CQkJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAotCQkJCSAg Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0JaW50ZWxf ZHBfcHJlcGFyZShlbmNvZGVyLCBwaXBlX2NvbmZpZyk7Ci0KLQljaHZfcGh5X3ByZV9wbGxfZW5h YmxlKGVuY29kZXIsIHBpcGVfY29uZmlnKTsKLX0KLQotc3RhdGljIHZvaWQgY2h2X2RwX3Bvc3Rf cGxsX2Rpc2FibGUoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkJICAgIHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZSkKLXsKLQljaHZfcGh5X3Bvc3RfcGxsX2Rpc2Fi bGUoZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUpOwotfQotCi1zdGF0aWMgdTggaW50ZWxfZHBfdm9s dGFnZV9tYXhfMihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAotCQkJCSBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlyZXR1cm4gRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19MRVZFTF8yOwotfQotCi1zdGF0aWMgdTggaW50ZWxfZHBfdm9sdGFnZV9tYXhfMyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAotCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlyZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZF TF8zOwotfQotCi1zdGF0aWMgdTggaW50ZWxfZHBfcHJlZW1waF9tYXhfMihzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKQotewotCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOwotfQot Ci1zdGF0aWMgdTggaW50ZWxfZHBfcHJlZW1waF9tYXhfMyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQotewotCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zOwotfQotCi1zdGF0aWMg dm9pZCB2bHZfc2V0X3NpZ25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJ CQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0gJmRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFz ZTsKLQl1bnNpZ25lZCBsb25nIGRlbXBoX3JlZ192YWx1ZSwgcHJlZW1waF9yZWdfdmFsdWUsCi0J CXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlOwotCXU4IHRyYWluX3NldCA9IGludGVsX2RwLT50cmFp bl9zZXRbMF07Ci0KLQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1BSRV9FTVBIQVNJU19N QVNLKSB7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgotCQlwcmVlbXBoX3JlZ192 YWx1ZSA9IDB4MDAwNDAwMDsKLQkJc3dpdGNoICh0cmFpbl9zZXQgJiBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX01BU0spIHsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6Ci0J CQlkZW1waF9yZWdfdmFsdWUgPSAweDJCNDA1NTU1OwotCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFs dWUgPSAweDU1MkFCODNBOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8xOgotCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjQwNDA0MDsKLQkJCXVuaXF0cmFu c2NhbGVfcmVnX3ZhbHVlID0gMHg1NTQ4QjgzQTsKLQkJCWJyZWFrOwotCQljYXNlIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjoKLQkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MkIyNDU1NTU7 Ci0JCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTU2MEI4M0E7Ci0JCQlicmVhazsKLQkJ Y2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6Ci0JCQlkZW1waF9yZWdfdmFsdWUg PSAweDJCNDA1NTU1OwotCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1OThEQTNBOwot CQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBE UF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgotCQlwcmVlbXBoX3JlZ192YWx1ZSA9IDB4MDAwMjAw MDsKLQkJc3dpdGNoICh0cmFpbl9zZXQgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsK LQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6Ci0JCQlkZW1waF9yZWdfdmFs dWUgPSAweDJCNDA0MDQwOwotCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1NTJCODNB OwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgotCQkJ ZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjQwNDg0ODsKLQkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVl ID0gMHg1NTgwQjgzQTsKLQkJCWJyZWFrOwotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TEVWRUxfMjoKLQkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MkI0MDQwNDA7Ci0JCQl1bmlxdHJhbnNj YWxlX3JlZ192YWx1ZSA9IDB4NTVBRERBM0E7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJl dHVybjsKLQkJfQotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzI6Ci0J CXByZWVtcGhfcmVnX3ZhbHVlID0gMHgwMDAwMDAwOwotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJ TkdfTEVWRUxfMDoKLQkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MkIzMDU1NTU7Ci0JCQl1bmlxdHJh bnNjYWxlX3JlZ192YWx1ZSA9IDB4NTU3MEI4M0E7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9UUkFJ Tl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6Ci0JCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCMkI0MDQw OwotCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1QUREQTNBOwotCQkJYnJlYWs7Ci0J CWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9QUkVf RU1QSF9MRVZFTF8zOgotCQlwcmVlbXBoX3JlZ192YWx1ZSA9IDB4MDAwNjAwMDsKLQkJc3dpdGNo ICh0cmFpbl9zZXQgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKLQkJY2FzZSBEUF9U UkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6Ci0JCQlkZW1waF9yZWdfdmFsdWUgPSAweDFCNDA1 NTU1OwotCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1QUREQTNBOwotCQkJYnJlYWs7 Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0 dXJuOwotCX0KLQotCXZsdl9zZXRfcGh5X3NpZ25hbF9sZXZlbChlbmNvZGVyLCBjcnRjX3N0YXRl LAotCQkJCSBkZW1waF9yZWdfdmFsdWUsIHByZWVtcGhfcmVnX3ZhbHVlLAotCQkJCSB1bmlxdHJh bnNjYWxlX3JlZ192YWx1ZSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNodl9zZXRfc2lnbmFsX2xl dmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAotCQkJCSAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXIgPSAmZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlOwotCXUzMiBkZWVtcGhfcmVnX3Zh bHVlLCBtYXJnaW5fcmVnX3ZhbHVlOwotCWJvb2wgdW5pcV90cmFuc19zY2FsZSA9IGZhbHNlOwot CXU4IHRyYWluX3NldCA9IGludGVsX2RwLT50cmFpbl9zZXRbMF07Ci0KLQlzd2l0Y2ggKHRyYWlu X3NldCAmIERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSB7Ci0JY2FzZSBEUF9UUkFJTl9QUkVf RU1QSF9MRVZFTF8wOgotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJ TkdfTUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRl ZW1waF9yZWdfdmFsdWUgPSAxMjg7Ci0JCQltYXJnaW5fcmVnX3ZhbHVlID0gNTI7Ci0JCQlicmVh azsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6Ci0JCQlkZWVtcGhfcmVn X3ZhbHVlID0gMTI4OwotCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDc3OwotCQkJYnJlYWs7Ci0JCWNh c2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOgotCQkJZGVlbXBoX3JlZ192YWx1ZSA9 IDEyODsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxMDI7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9U UkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6Ci0JCQlkZWVtcGhfcmVnX3ZhbHVlID0gMTI4Owot CQkJbWFyZ2luX3JlZ192YWx1ZSA9IDE1NDsKLQkJCXVuaXFfdHJhbnNfc2NhbGUgPSB0cnVlOwot CQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBE UF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVW RUxfMDoKLQkJCWRlZW1waF9yZWdfdmFsdWUgPSA4NTsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSA3 ODsKLQkJCWJyZWFrOwotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKLQkJ CWRlZW1waF9yZWdfdmFsdWUgPSA4NTsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxMTY7Ci0JCQli cmVhazsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI6Ci0JCQlkZWVtcGhf cmVnX3ZhbHVlID0gODU7Ci0JCQltYXJnaW5fcmVnX3ZhbHVlID0gMTU0OwotCQkJYnJlYWs7Ci0J CWRlZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9QUkVf RU1QSF9MRVZFTF8yOgotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJ TkdfTUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRl ZW1waF9yZWdfdmFsdWUgPSA2NDsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxMDQ7Ci0JCQlicmVh azsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6Ci0JCQlkZWVtcGhfcmVn X3ZhbHVlID0gNjQ7Ci0JCQltYXJnaW5fcmVnX3ZhbHVlID0gMTU0OwotCQkJYnJlYWs7Ci0JCWRl ZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1Q SF9MRVZFTF8zOgotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRlZW1w aF9yZWdfdmFsdWUgPSA0MzsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxNTQ7Ci0JCQlicmVhazsK LQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1 cm47Ci0JfQotCi0JY2h2X3NldF9waHlfc2lnbmFsX2xldmVsKGVuY29kZXIsIGNydGNfc3RhdGUs Ci0JCQkJIGRlZW1waF9yZWdfdmFsdWUsIG1hcmdpbl9yZWdfdmFsdWUsCi0JCQkJIHVuaXFfdHJh bnNfc2NhbGUpOwotfQotCi1zdGF0aWMgdTMyIGc0eF9zaWduYWxfbGV2ZWxzKHU4IHRyYWluX3Nl dCkKLXsKLQl1MzIgc2lnbmFsX2xldmVscyA9IDA7Ci0KLQlzd2l0Y2ggKHRyYWluX3NldCAmIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8wOgotCWRlZmF1bHQ6Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBfVk9MVEFHRV8wXzQ7 Ci0JCWJyZWFrOwotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgotCQlzaWdu YWxfbGV2ZWxzIHw9IERQX1ZPTFRBR0VfMF82OwotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfTEVWRUxfMjoKLQkJc2lnbmFsX2xldmVscyB8PSBEUF9WT0xUQUdFXzBfODsK LQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6Ci0JCXNpZ25h bF9sZXZlbHMgfD0gRFBfVk9MVEFHRV8xXzI7Ci0JCWJyZWFrOwotCX0KLQlzd2l0Y2ggKHRyYWlu X3NldCAmIERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSB7Ci0JY2FzZSBEUF9UUkFJTl9QUkVf RU1QSF9MRVZFTF8wOgotCWRlZmF1bHQ6Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhB U0lTXzA7Ci0JCWJyZWFrOwotCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMToKLQkJc2ln bmFsX2xldmVscyB8PSBEUF9QUkVfRU1QSEFTSVNfM181OwotCQlicmVhazsKLQljYXNlIERQX1RS QUlOX1BSRV9FTVBIX0xFVkVMXzI6Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhBU0lT XzY7Ci0JCWJyZWFrOwotCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMzoKLQkJc2lnbmFs X2xldmVscyB8PSBEUF9QUkVfRU1QSEFTSVNfOV81OwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHNp Z25hbF9sZXZlbHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nNHhfc2V0X3NpZ25hbF9sZXZlbHMoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0JdTggdHJhaW5fc2V0ID0gaW50ZWxfZHAtPnRyYWlu X3NldFswXTsKLQl1MzIgc2lnbmFsX2xldmVsczsKLQotCXNpZ25hbF9sZXZlbHMgPSBnNHhfc2ln bmFsX2xldmVscyh0cmFpbl9zZXQpOwotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJV c2luZyBzaWduYWwgbGV2ZWxzICUwOHhcbiIsCi0JCSAgICBzaWduYWxfbGV2ZWxzKTsKLQotCWlu dGVsX2RwLT5EUCAmPSB+KERQX1ZPTFRBR0VfTUFTSyB8IERQX1BSRV9FTVBIQVNJU19NQVNLKTsK LQlpbnRlbF9kcC0+RFAgfD0gc2lnbmFsX2xldmVsczsKLQotCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgaW50ZWxfZHAtPkRQKTsKLQlpbnRlbF9kZV9wb3N0 aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKLX0KLQotLyogU05CIENQ VSBlRFAgdm9sdGFnZSBzd2luZyBhbmQgcHJlLWVtcGhhc2lzIGNvbnRyb2wgKi8KLXN0YXRpYyB1 MzIgc25iX2NwdV9lZHBfc2lnbmFsX2xldmVscyh1OCB0cmFpbl9zZXQpCi17Ci0JdTggc2lnbmFs X2xldmVscyA9IHRyYWluX3NldCAmIChEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0sgfAotCQkJ CQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSyk7Ci0KLQlzd2l0Y2ggKHNpZ25hbF9sZXZlbHMp IHsKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9F TVBIX0xFVkVMXzA6Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEgfCBEUF9U UkFJTl9QUkVfRU1QSF9MRVZFTF8wOgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwXzYwME1W XzBEQl9TTkJfQjsKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RS QUlOX1BSRV9FTVBIX0xFVkVMXzE6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBNVl8zXzVE Ql9TTkJfQjsKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlO X1BSRV9FTVBIX0xFVkVMXzI6Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEg fCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAw XzYwME1WXzZEQl9TTkJfQjsKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8 IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5H X0xFVkVMXzIgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgotCQlyZXR1cm4gRURQX0xJTktf VFJBSU5fNjAwXzgwME1WXzNfNURCX1NOQl9COwotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8yIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKLQljYXNlIERQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfTEVWRUxfMyB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6Ci0JCXJldHVy biBFRFBfTElOS19UUkFJTl84MDBfMTIwME1WXzBEQl9TTkJfQjsKLQlkZWZhdWx0OgotCQlNSVNT SU5HX0NBU0Uoc2lnbmFsX2xldmVscyk7Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBfNjAw TVZfMERCX1NOQl9COwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNuYl9jcHVfZWRwX3NldF9zaWdu YWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCi0JCQkgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKLQl1OCB0cmFpbl9zZXQgPSBp bnRlbF9kcC0+dHJhaW5fc2V0WzBdOwotCXUzMiBzaWduYWxfbGV2ZWxzOwotCi0Jc2lnbmFsX2xl dmVscyA9IHNuYl9jcHVfZWRwX3NpZ25hbF9sZXZlbHModHJhaW5fc2V0KTsKLQotCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLCAiVXNpbmcgc2lnbmFsIGxldmVscyAlMDh4XG4iLAotCQkgICAg c2lnbmFsX2xldmVscyk7Ci0KLQlpbnRlbF9kcC0+RFAgJj0gfkVEUF9MSU5LX1RSQUlOX1ZPTF9F TVBfTUFTS19TTkI7Ci0JaW50ZWxfZHAtPkRQIHw9IHNpZ25hbF9sZXZlbHM7Ci0KLQlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIGludGVsX2RwLT5EUCk7Ci0J aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Ci19 Ci0KLS8qIElWQiBDUFUgZURQIHZvbHRhZ2Ugc3dpbmcgYW5kIHByZS1lbXBoYXNpcyBjb250cm9s ICovCi1zdGF0aWMgdTMyIGl2Yl9jcHVfZWRwX3NpZ25hbF9sZXZlbHModTggdHJhaW5fc2V0KQot ewotCXU4IHNpZ25hbF9sZXZlbHMgPSB0cmFpbl9zZXQgJiAoRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19NQVNLIHwKLQkJCQkJRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spOwotCi0Jc3dpdGNoIChz aWduYWxfbGV2ZWxzKSB7Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzAgfCBE UF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwTVZf MERCX0lWQjsKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlO X1BSRV9FTVBIX0xFVkVMXzE6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBNVl8zXzVEQl9J VkI7Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVf RU1QSF9MRVZFTF8yOgotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBf VFJBSU5fUFJFX0VNUEhfTEVWRUxfMjoKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwME1WXzZE Ql9JVkI7Ci0KLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8IERQX1RSQUlO X1BSRV9FTVBIX0xFVkVMXzA6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl82MDBNVl8wREJfSVZC OwotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5fUFJFX0VN UEhfTEVWRUxfMToKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzYwME1WXzNfNURCX0lWQjsKLQot CWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yIHwgRFBfVFJBSU5fUFJFX0VNUEhf TEVWRUxfMDoKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzgwME1WXzBEQl9JVkI7Ci0JY2FzZSBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzIgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8x OgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fODAwTVZfM181REJfSVZCOwotCi0JZGVmYXVsdDoK LQkJTUlTU0lOR19DQVNFKHNpZ25hbF9sZXZlbHMpOwotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5f NTAwTVZfMERCX0lWQjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1pdmJfY3B1X2VkcF9zZXRfc2ln bmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAotCQkJICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0JdTggdHJhaW5fc2V0ID0g aW50ZWxfZHAtPnRyYWluX3NldFswXTsKLQl1MzIgc2lnbmFsX2xldmVsczsKLQotCXNpZ25hbF9s ZXZlbHMgPSBpdmJfY3B1X2VkcF9zaWduYWxfbGV2ZWxzKHRyYWluX3NldCk7Ci0KLQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwgIlVzaW5nIHNpZ25hbCBsZXZlbHMgJTA4eFxuIiwKLQkJICAg IHNpZ25hbF9sZXZlbHMpOwotCi0JaW50ZWxfZHAtPkRQICY9IH5FRFBfTElOS19UUkFJTl9WT0xf RU1QX01BU0tfSVZCOwotCWludGVsX2RwLT5EUCB8PSBzaWduYWxfbGV2ZWxzOwotCi0JaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBpbnRlbF9kcC0+RFApOwot CWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOwot fQotCi1zdGF0aWMgdm9pZAotaW50ZWxfZHBfbGlua19kb3duKHN0cnVjdCBpbnRlbF9lbmNvZGVy ICplbmNvZGVyLAotCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNf c3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShl bmNvZGVyLT5iYXNlLmRldik7Ci0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19p bnRlbF9kcChlbmNvZGVyKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2Ny dGMob2xkX2NydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0JZW51bSBwb3J0IHBvcnQgPSBlbmNvZGVy LT5wb3J0OwotCXUzMiBEUCA9IGludGVsX2RwLT5EUDsKLQotCWlmIChkcm1fV0FSTl9PTigmZGV2 X3ByaXYtPmRybSwKLQkJCShpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0 X3JlZykgJgotCQkJIERQX1BPUlRfRU4pID09IDApKQotCQlyZXR1cm47Ci0KLQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwgIlxuIik7Ci0KLQlpZiAoKElTX0lWWUJSSURHRShkZXZfcHJpdikg JiYgcG9ydCA9PSBQT1JUX0EpIHx8Ci0JICAgIChIQVNfUENIX0NQVChkZXZfcHJpdikgJiYgcG9y dCAhPSBQT1JUX0EpKSB7Ci0JCURQICY9IH5EUF9MSU5LX1RSQUlOX01BU0tfQ1BUOwotCQlEUCB8 PSBEUF9MSU5LX1RSQUlOX1BBVF9JRExFX0NQVDsKLQl9IGVsc2UgewotCQlEUCAmPSB+RFBfTElO S19UUkFJTl9NQVNLOwotCQlEUCB8PSBEUF9MSU5LX1RSQUlOX1BBVF9JRExFOwotCX0KLQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQKTsKLQlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKLQotCURQICY9 IH4oRFBfUE9SVF9FTiB8IERQX0FVRElPX09VVFBVVF9FTkFCTEUpOwotCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgRFApOwotCWludGVsX2RlX3Bvc3Rpbmdf cmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOwotCi0JLyoKLQkgKiBIVyB3b3Jr YXJvdW5kIGZvciBJQlgsIHdlIG5lZWQgdG8gbW92ZSB0aGUgcG9ydAotCSAqIHRvIHRyYW5zY29k ZXIgQSBhZnRlciBkaXNhYmxpbmcgaXQgdG8gYWxsb3cgdGhlCi0JICogbWF0Y2hpbmcgSERNSSBw b3J0IHRvIGJlIGVuYWJsZWQgb24gdHJhbnNjb2RlciBBLgotCSAqLwotCWlmIChIQVNfUENIX0lC WChkZXZfcHJpdikgJiYgY3J0Yy0+cGlwZSA9PSBQSVBFX0IgJiYgcG9ydCAhPSBQT1JUX0EpIHsK LQkJLyoKLQkJICogV2UgZ2V0IENQVS9QQ0ggRklGTyB1bmRlcnJ1bnMgb24gdGhlIG90aGVyIHBp cGUgd2hlbgotCQkgKiBkb2luZyB0aGUgd29ya2Fyb3VuZC4gU3dlZXAgdGhlbSB1bmRlciB0aGUg cnVnLgotCQkgKi8KLQkJaW50ZWxfc2V0X2NwdV9maWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZf cHJpdiwgUElQRV9BLCBmYWxzZSk7Ci0JCWludGVsX3NldF9wY2hfZmlmb191bmRlcnJ1bl9yZXBv cnRpbmcoZGV2X3ByaXYsIFBJUEVfQSwgZmFsc2UpOwotCi0JCS8qIGFsd2F5cyBlbmFibGUgd2l0 aCBwYXR0ZXJuIDEgKGFzIHBlciBzcGVjKSAqLwotCQlEUCAmPSB+KERQX1BJUEVfU0VMX01BU0sg fCBEUF9MSU5LX1RSQUlOX01BU0spOwotCQlEUCB8PSBEUF9QT1JUX0VOIHwgRFBfUElQRV9TRUwo UElQRV9BKSB8Ci0JCQlEUF9MSU5LX1RSQUlOX1BBVF8xOwotCQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQKTsKLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFk KGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Ci0KLQkJRFAgJj0gfkRQX1BPUlRfRU47 Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgRFApOwot CQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsK LQotCQlpbnRlbF93YWl0X2Zvcl92YmxhbmtfaWZfYWN0aXZlKGRldl9wcml2LCBQSVBFX0EpOwot CQlpbnRlbF9zZXRfY3B1X2ZpZm9fdW5kZXJydW5fcmVwb3J0aW5nKGRldl9wcml2LCBQSVBFX0Es IHRydWUpOwotCQlpbnRlbF9zZXRfcGNoX2ZpZm9fdW5kZXJydW5fcmVwb3J0aW5nKGRldl9wcml2 LCBQSVBFX0EsIHRydWUpOwotCX0KLQotCW1zbGVlcChpbnRlbF9kcC0+cGFuZWxfcG93ZXJfZG93 bl9kZWxheSk7Ci0KLQlpbnRlbF9kcC0+RFAgPSBEUDsKLQotCWlmIChJU19WQUxMRVlWSUVXKGRl dl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewotCQlpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsKLQotCQl3aXRoX2ludGVsX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKQotCQkJ aW50ZWxfZHAtPmFjdGl2ZV9waXBlID0gSU5WQUxJRF9QSVBFOwotCX0KLX0KLQogYm9vbCBpbnRl bF9kcF9nZXRfY29sb3JpbWV0cnlfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7 CiAJdTggZHByeCA9IDA7CkBAIC01NTQ2LDY0ICs0NDI2LDYgQEAgdm9pZCBpbnRlbF9kcF9waHlf dGVzdChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKIAkJICJBY3F1aXJpbmcgbW9kZXNl dCBsb2NrcyBmYWlsZWQgd2l0aCAlaVxuIiwgcmV0KTsKIH0KIAotLyoKLSAqIElmIGRpc3BsYXkg aXMgbm93IGNvbm5lY3RlZCBjaGVjayBsaW5rcyBzdGF0dXMsCi0gKiB0aGVyZSBoYXMgYmVlbiBr bm93biBpc3N1ZXMgb2YgbGluayBsb3NzIHRyaWdnZXJpbmcKLSAqIGxvbmcgcHVsc2UuCi0gKgot ICogU29tZSBzaW5rcyAoZWcuIEFTVVMgUEIyODdRKSBzZWVtIHRvIHBlcmZvcm0gc29tZQotICog d2VpcmQgSFBEIHBpbmcgcG9uZyBkdXJpbmcgbW9kZXNldHMuIFNvIHdlIGNhbiBhcHBhcmVudGx5 Ci0gKiBlbmQgdXAgd2l0aCBIUEQgZ29pbmcgbG93IGR1cmluZyBhIG1vZGVzZXQsIGFuZCB0aGVu Ci0gKiBnb2luZyBiYWNrIHVwIHNvb24gYWZ0ZXIuIEFuZCBvbmNlIHRoYXQgaGFwcGVucyB3ZSBt dXN0Ci0gKiByZXRyYWluIHRoZSBsaW5rIHRvIGdldCBhIHBpY3R1cmUuIFRoYXQncyBpbiBjYXNl IG5vCi0gKiB1c2Vyc3BhY2UgY29tcG9uZW50IHJlYWN0ZWQgdG8gaW50ZXJtaXR0ZW50IEhQRCBk aXAuCi0gKi8KLXN0YXRpYyBlbnVtIGludGVsX2hvdHBsdWdfc3RhdGUKLWludGVsX2RwX2hvdHBs dWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCSBzdHJ1Y3QgaW50ZWxfY29ubmVj dG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19p bnRlbF9kcChlbmNvZGVyKTsKLQlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggY3R4Owot CWVudW0gaW50ZWxfaG90cGx1Z19zdGF0ZSBzdGF0ZTsKLQlpbnQgcmV0OwotCi0JaWYgKGludGVs X2RwLT5jb21wbGlhbmNlLnRlc3RfYWN0aXZlICYmCi0JICAgIGludGVsX2RwLT5jb21wbGlhbmNl LnRlc3RfdHlwZSA9PSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikgewotCQlpbnRlbF9k cF9waHlfdGVzdChlbmNvZGVyKTsKLQkJLyoganVzdCBkbyB0aGUgUEhZIHRlc3QgYW5kIG5vdGhp bmcgZWxzZSAqLwotCQlyZXR1cm4gSU5URUxfSE9UUExVR19VTkNIQU5HRUQ7Ci0JfQotCi0Jc3Rh dGUgPSBpbnRlbF9lbmNvZGVyX2hvdHBsdWcoZW5jb2RlciwgY29ubmVjdG9yKTsKLQotCWRybV9t b2Rlc2V0X2FjcXVpcmVfaW5pdCgmY3R4LCAwKTsKLQotCWZvciAoOzspIHsKLQkJcmV0ID0gaW50 ZWxfZHBfcmV0cmFpbl9saW5rKGVuY29kZXIsICZjdHgpOwotCi0JCWlmIChyZXQgPT0gLUVERUFE TEspIHsKLQkJCWRybV9tb2Rlc2V0X2JhY2tvZmYoJmN0eCk7Ci0JCQljb250aW51ZTsKLQkJfQot Ci0JCWJyZWFrOwotCX0KLQotCWRybV9tb2Rlc2V0X2Ryb3BfbG9ja3MoJmN0eCk7Ci0JZHJtX21v ZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOwotCWRybV9XQVJOKGVuY29kZXItPmJhc2UuZGV2LCBy ZXQsCi0JCSAiQWNxdWlyaW5nIG1vZGVzZXQgbG9ja3MgZmFpbGVkIHdpdGggJWlcbiIsIHJldCk7 Ci0KLQkvKgotCSAqIEtlZXBpbmcgaXQgY29uc2lzdGVudCB3aXRoIGludGVsX2RkaV9ob3RwbHVn KCkgYW5kCi0JICogaW50ZWxfaGRtaV9ob3RwbHVnKCkuCi0JICovCi0JaWYgKHN0YXRlID09IElO VEVMX0hPVFBMVUdfVU5DSEFOR0VEICYmICFjb25uZWN0b3ItPmhvdHBsdWdfcmV0cmllcykKLQkJ c3RhdGUgPSBJTlRFTF9IT1RQTFVHX1JFVFJZOwotCi0JcmV0dXJuIHN0YXRlOwotfQotCiBzdGF0 aWMgdm9pZCBpbnRlbF9kcF9jaGVja19kZXZpY2Vfc2VydmljZV9pcnEoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOwpAQCAtNTc4NSw2OCArNDYwNyw2IEBAIGVkcF9kZXRlY3Qoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKIAlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiB9 CiAKLXN0YXRpYyBib29sIGlieF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwotCXUzMiBiaXQgPSBkZXZfcHJpdi0+aG90cGx1 Zy5wY2hfaHBkW2VuY29kZXItPmhwZF9waW5dOwotCi0JcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIFNERUlTUikgJiBiaXQ7Ci19Ci0KLXN0YXRpYyBib29sIGc0eF9kaWdpdGFsX3BvcnRf Y29ubmVjdGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQotewotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwotCXUz MiBiaXQ7Ci0KLQlzd2l0Y2ggKGVuY29kZXItPmhwZF9waW4pIHsKLQljYXNlIEhQRF9QT1JUX0I6 Ci0JCWJpdCA9IFBPUlRCX0hPVFBMVUdfTElWRV9TVEFUVVNfRzRYOwotCQlicmVhazsKLQljYXNl IEhQRF9QT1JUX0M6Ci0JCWJpdCA9IFBPUlRDX0hPVFBMVUdfTElWRV9TVEFUVVNfRzRYOwotCQli cmVhazsKLQljYXNlIEhQRF9QT1JUX0Q6Ci0JCWJpdCA9IFBPUlREX0hPVFBMVUdfTElWRV9TVEFU VVNfRzRYOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoZW5jb2Rlci0+aHBk X3Bpbik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgUE9SVF9IT1RQTFVHX1NUQVQpICYgYml0OwotfQotCi1zdGF0aWMgYm9vbCBnbTQ1X2Rp Z2l0YWxfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNl LmRldik7Ci0JdTMyIGJpdDsKLQotCXN3aXRjaCAoZW5jb2Rlci0+aHBkX3BpbikgewotCWNhc2Ug SFBEX1BPUlRfQjoKLQkJYml0ID0gUE9SVEJfSE9UUExVR19MSVZFX1NUQVRVU19HTTQ1OwotCQli cmVhazsKLQljYXNlIEhQRF9QT1JUX0M6Ci0JCWJpdCA9IFBPUlRDX0hPVFBMVUdfTElWRV9TVEFU VVNfR000NTsKLQkJYnJlYWs7Ci0JY2FzZSBIUERfUE9SVF9EOgotCQliaXQgPSBQT1JURF9IT1RQ TFVHX0xJVkVfU1RBVFVTX0dNNDU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FT RShlbmNvZGVyLT5ocGRfcGluKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBQT1JUX0hPVFBMVUdfU1RBVCkgJiBiaXQ7Ci19Ci0KLXN0YXRp YyBib29sIGlsa19kaWdpdGFsX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZW5jb2Rlci0+YmFzZS5kZXYpOwotCXUzMiBiaXQgPSBkZXZfcHJpdi0+aG90cGx1Zy5ocGRbZW5j b2Rlci0+aHBkX3Bpbl07Ci0KLQlyZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgREVJU1Ip ICYgYml0OwotfQotCiAvKgogICogaW50ZWxfZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZCAtIGlzIHRo ZSBzcGVjaWZpZWQgcG9ydCBjb25uZWN0ZWQ/CiAgKiBAZW5jb2RlcjogaW50ZWxfZW5jb2RlcgpA QCAtNjI4NCwxNCArNTA0NCw2IEBAIHZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9mbHVzaF93b3JrKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAlpbnRlbF9kcF9hdXhfZmluaShpbnRlbF9kcCk7 CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2RwX2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCi17Ci0JaW50ZWxfZHBfZW5jb2Rlcl9mbHVzaF93b3JrKGVuY29kZXIp OwotCi0JZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKLQlrZnJlZShlbmNfdG9fZGlnX3Bv cnQodG9faW50ZWxfZW5jb2RlcihlbmNvZGVyKSkpOwotfQotCiB2b2lkIGludGVsX2RwX2VuY29k ZXJfc3VzcGVuZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcikKIHsKIAlzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGludGVsX2VuY29kZXIpOwpA QCAtNjMwNiwzOCArNTA1OCw2IEBAIHZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9zaHV0ZG93bihzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcikKIAlpbnRlbF9wcHNfd2FpdF9wb3dlcl9j eWNsZShpbnRlbF9kcCk7CiB9CiAKLXN0YXRpYyBlbnVtIHBpcGUgdmx2X2FjdGl2ZV9waXBlKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVu Y29kZXIgPSAmZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlOwotCWVudW0gcGlwZSBwaXBl OwotCi0JaWYgKGludGVsX2RwX3BvcnRfZW5hYmxlZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1 dF9yZWcsCi0JCQkJICBlbmNvZGVyLT5wb3J0LCAmcGlwZSkpCi0JCXJldHVybiBwaXBlOwotCi0J cmV0dXJuIElOVkFMSURfUElQRTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9y ZXNldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5kZXYpOwotCXN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAodG9faW50ZWxfZW5jb2RlcihlbmNvZGVyKSk7 Ci0KLQlpbnRlbF9kcC0+RFAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0 cHV0X3JlZyk7Ci0KLQlpbnRlbF9kcC0+cmVzZXRfbGlua19wYXJhbXMgPSB0cnVlOwotCi0JaWYg KElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Ci0J CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCi0JCXdpdGhfaW50ZWxfcHBzX2xvY2soaW50ZWxf ZHAsIHdha2VyZWYpCi0JCQlpbnRlbF9kcC0+YWN0aXZlX3BpcGUgPSB2bHZfYWN0aXZlX3BpcGUo aW50ZWxfZHApOwotCX0KLQotCWludGVsX3Bwc19lbmNvZGVyX3Jlc2V0KGludGVsX2RwKTsKLX0K LQogc3RhdGljIGludCBpbnRlbF9tb2Rlc2V0X3RpbGVfZ3JvdXAoc3RydWN0IGludGVsX2F0b21p Y19zdGF0ZSAqc3RhdGUsCiAJCQkJICAgIGludCB0aWxlX2dyb3VwX2lkKQogewpAQCAtNjQ5NSwx MSArNTIxNSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVu Y3MgaW50ZWxfZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9CiAJLmF0b21pY19jaGVjayA9IGlu dGVsX2RwX2Nvbm5lY3Rvcl9hdG9taWNfY2hlY2ssCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9lbmNvZGVyX2Z1bmNzIGludGVsX2RwX2VuY19mdW5jcyA9IHsKLQkucmVzZXQgPSBpbnRl bF9kcF9lbmNvZGVyX3Jlc2V0LAotCS5kZXN0cm95ID0gaW50ZWxfZHBfZW5jb2Rlcl9kZXN0cm95 LAotfTsKLQogZW51bSBpcnFyZXR1cm4KIGludGVsX2RwX2hwZF9wdWxzZShzdHJ1Y3QgaW50ZWxf ZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCwgYm9vbCBsb25nX2hwZCkKIHsKQEAgLTcyODAsMTM3ICs1 OTk1LDYgQEAgaW50ZWxfZHBfaW5pdF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2RpZ2l0YWxfcG9y dCAqZGlnX3BvcnQsCiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGludGVsX2RwX2luaXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkgICBpOTE1X3JlZ190IG91dHB1dF9y ZWcsCi0JCSAgIGVudW0gcG9ydCBwb3J0KQotewotCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmRpZ19wb3J0OwotCXN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyOwotCXN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9j b25uZWN0b3I7Ci0KLQlkaWdfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKCpkaWdfcG9ydCksIEdGUF9L RVJORUwpOwotCWlmICghZGlnX3BvcnQpCi0JCXJldHVybiBmYWxzZTsKLQotCWludGVsX2Nvbm5l Y3RvciA9IGludGVsX2Nvbm5lY3Rvcl9hbGxvYygpOwotCWlmICghaW50ZWxfY29ubmVjdG9yKQot CQlnb3RvIGVycl9jb25uZWN0b3JfYWxsb2M7Ci0KLQlpbnRlbF9lbmNvZGVyID0gJmRpZ19wb3J0 LT5iYXNlOwotCWVuY29kZXIgPSAmaW50ZWxfZW5jb2Rlci0+YmFzZTsKLQotCW11dGV4X2luaXQo JmRpZ19wb3J0LT5oZGNwX211dGV4KTsKLQotCWlmIChkcm1fZW5jb2Rlcl9pbml0KCZkZXZfcHJp di0+ZHJtLCAmaW50ZWxfZW5jb2Rlci0+YmFzZSwKLQkJCSAgICAgJmludGVsX2RwX2VuY19mdW5j cywgRFJNX01PREVfRU5DT0RFUl9UTURTLAotCQkJICAgICAiRFAgJWMiLCBwb3J0X25hbWUocG9y dCkpKQotCQlnb3RvIGVycl9lbmNvZGVyX2luaXQ7Ci0KLQlpbnRlbF9lbmNvZGVyLT5ob3RwbHVn ID0gaW50ZWxfZHBfaG90cGx1ZzsKLQlpbnRlbF9lbmNvZGVyLT5jb21wdXRlX2NvbmZpZyA9IGlu dGVsX2RwX2NvbXB1dGVfY29uZmlnOwotCWludGVsX2VuY29kZXItPmdldF9od19zdGF0ZSA9IGlu dGVsX2RwX2dldF9od19zdGF0ZTsKLQlpbnRlbF9lbmNvZGVyLT5nZXRfY29uZmlnID0gaW50ZWxf ZHBfZ2V0X2NvbmZpZzsKLQlpbnRlbF9lbmNvZGVyLT5zeW5jX3N0YXRlID0gaW50ZWxfZHBfc3lu Y19zdGF0ZTsKLQlpbnRlbF9lbmNvZGVyLT5pbml0aWFsX2Zhc3RzZXRfY2hlY2sgPSBpbnRlbF9k cF9pbml0aWFsX2Zhc3RzZXRfY2hlY2s7Ci0JaW50ZWxfZW5jb2Rlci0+dXBkYXRlX3BpcGUgPSBp bnRlbF9wYW5lbF91cGRhdGVfYmFja2xpZ2h0OwotCWludGVsX2VuY29kZXItPnN1c3BlbmQgPSBp bnRlbF9kcF9lbmNvZGVyX3N1c3BlbmQ7Ci0JaW50ZWxfZW5jb2Rlci0+c2h1dGRvd24gPSBpbnRl bF9kcF9lbmNvZGVyX3NodXRkb3duOwotCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewot CQlpbnRlbF9lbmNvZGVyLT5wcmVfcGxsX2VuYWJsZSA9IGNodl9kcF9wcmVfcGxsX2VuYWJsZTsK LQkJaW50ZWxfZW5jb2Rlci0+cHJlX2VuYWJsZSA9IGNodl9wcmVfZW5hYmxlX2RwOwotCQlpbnRl bF9lbmNvZGVyLT5lbmFibGUgPSB2bHZfZW5hYmxlX2RwOwotCQlpbnRlbF9lbmNvZGVyLT5kaXNh YmxlID0gdmx2X2Rpc2FibGVfZHA7Ci0JCWludGVsX2VuY29kZXItPnBvc3RfZGlzYWJsZSA9IGNo dl9wb3N0X2Rpc2FibGVfZHA7Ci0JCWludGVsX2VuY29kZXItPnBvc3RfcGxsX2Rpc2FibGUgPSBj aHZfZHBfcG9zdF9wbGxfZGlzYWJsZTsKLQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3By aXYpKSB7Ci0JCWludGVsX2VuY29kZXItPnByZV9wbGxfZW5hYmxlID0gdmx2X2RwX3ByZV9wbGxf ZW5hYmxlOwotCQlpbnRlbF9lbmNvZGVyLT5wcmVfZW5hYmxlID0gdmx2X3ByZV9lbmFibGVfZHA7 Ci0JCWludGVsX2VuY29kZXItPmVuYWJsZSA9IHZsdl9lbmFibGVfZHA7Ci0JCWludGVsX2VuY29k ZXItPmRpc2FibGUgPSB2bHZfZGlzYWJsZV9kcDsKLQkJaW50ZWxfZW5jb2Rlci0+cG9zdF9kaXNh YmxlID0gdmx2X3Bvc3RfZGlzYWJsZV9kcDsKLQl9IGVsc2UgewotCQlpbnRlbF9lbmNvZGVyLT5w cmVfZW5hYmxlID0gZzR4X3ByZV9lbmFibGVfZHA7Ci0JCWludGVsX2VuY29kZXItPmVuYWJsZSA9 IGc0eF9lbmFibGVfZHA7Ci0JCWludGVsX2VuY29kZXItPmRpc2FibGUgPSBnNHhfZGlzYWJsZV9k cDsKLQkJaW50ZWxfZW5jb2Rlci0+cG9zdF9kaXNhYmxlID0gZzR4X3Bvc3RfZGlzYWJsZV9kcDsK LQl9Ci0KLQlpZiAoKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9PSBQT1JUX0EpIHx8 Ci0JICAgIChIQVNfUENIX0NQVChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpKQotCQlkaWdf cG9ydC0+ZHAuc2V0X2xpbmtfdHJhaW4gPSBjcHRfc2V0X2xpbmtfdHJhaW47Ci0JZWxzZQotCQlk aWdfcG9ydC0+ZHAuc2V0X2xpbmtfdHJhaW4gPSBnNHhfc2V0X2xpbmtfdHJhaW47Ci0KLQlpZiAo SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCi0JCWRpZ19wb3J0LT5kcC5zZXRfc2lnbmFsX2xldmVs cyA9IGNodl9zZXRfc2lnbmFsX2xldmVsczsKLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9w cml2KSkKLQkJZGlnX3BvcnQtPmRwLnNldF9zaWduYWxfbGV2ZWxzID0gdmx2X3NldF9zaWduYWxf bGV2ZWxzOwotCWVsc2UgaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9PSBQT1JU X0EpCi0JCWRpZ19wb3J0LT5kcC5zZXRfc2lnbmFsX2xldmVscyA9IGl2Yl9jcHVfZWRwX3NldF9z aWduYWxfbGV2ZWxzOwotCWVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgNikgJiYgcG9ydCA9PSBQ T1JUX0EpCi0JCWRpZ19wb3J0LT5kcC5zZXRfc2lnbmFsX2xldmVscyA9IHNuYl9jcHVfZWRwX3Nl dF9zaWduYWxfbGV2ZWxzOwotCWVsc2UKLQkJZGlnX3BvcnQtPmRwLnNldF9zaWduYWxfbGV2ZWxz ID0gZzR4X3NldF9zaWduYWxfbGV2ZWxzOwotCi0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYp IHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8Ci0JICAgIChIQVNfUENIX1NQTElUKGRldl9w cml2KSAmJiBwb3J0ICE9IFBPUlRfQSkpIHsKLQkJZGlnX3BvcnQtPmRwLnByZWVtcGhfbWF4ID0g aW50ZWxfZHBfcHJlZW1waF9tYXhfMzsKLQkJZGlnX3BvcnQtPmRwLnZvbHRhZ2VfbWF4ID0gaW50 ZWxfZHBfdm9sdGFnZV9tYXhfMzsKLQl9IGVsc2UgewotCQlkaWdfcG9ydC0+ZHAucHJlZW1waF9t YXggPSBpbnRlbF9kcF9wcmVlbXBoX21heF8yOwotCQlkaWdfcG9ydC0+ZHAudm9sdGFnZV9tYXgg PSBpbnRlbF9kcF92b2x0YWdlX21heF8yOwotCX0KLQotCWRpZ19wb3J0LT5kcC5vdXRwdXRfcmVn ID0gb3V0cHV0X3JlZzsKLQlkaWdfcG9ydC0+bWF4X2xhbmVzID0gNDsKLQotCWludGVsX2VuY29k ZXItPnR5cGUgPSBJTlRFTF9PVVRQVVRfRFA7Ci0JaW50ZWxfZW5jb2Rlci0+cG93ZXJfZG9tYWlu ID0gaW50ZWxfcG9ydF90b19wb3dlcl9kb21haW4ocG9ydCk7Ci0JaWYgKElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKSB7Ci0JCWlmIChwb3J0ID09IFBPUlRfRCkKLQkJCWludGVsX2VuY29kZXItPnBp cGVfbWFzayA9IEJJVChQSVBFX0MpOwotCQllbHNlCi0JCQlpbnRlbF9lbmNvZGVyLT5waXBlX21h c2sgPSBCSVQoUElQRV9BKSB8IEJJVChQSVBFX0IpOwotCX0gZWxzZSB7Ci0JCWludGVsX2VuY29k ZXItPnBpcGVfbWFzayA9IH4wOwotCX0KLQlpbnRlbF9lbmNvZGVyLT5jbG9uZWFibGUgPSAwOwot CWludGVsX2VuY29kZXItPnBvcnQgPSBwb3J0OwotCWludGVsX2VuY29kZXItPmhwZF9waW4gPSBp bnRlbF9ocGRfcGluX2RlZmF1bHQoZGV2X3ByaXYsIHBvcnQpOwotCi0JZGlnX3BvcnQtPmhwZF9w dWxzZSA9IGludGVsX2RwX2hwZF9wdWxzZTsKLQotCWlmIChIQVNfR01DSChkZXZfcHJpdikpIHsK LQkJaWYgKElTX0dNNDUoZGV2X3ByaXYpKQotCQkJZGlnX3BvcnQtPmNvbm5lY3RlZCA9IGdtNDVf ZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZDsKLQkJZWxzZQotCQkJZGlnX3BvcnQtPmNvbm5lY3RlZCA9 IGc0eF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkOwotCX0gZWxzZSB7Ci0JCWlmIChwb3J0ID09IFBP UlRfQSkKLQkJCWRpZ19wb3J0LT5jb25uZWN0ZWQgPSBpbGtfZGlnaXRhbF9wb3J0X2Nvbm5lY3Rl ZDsKLQkJZWxzZQotCQkJZGlnX3BvcnQtPmNvbm5lY3RlZCA9IGlieF9kaWdpdGFsX3BvcnRfY29u bmVjdGVkOwotCX0KLQotCWlmIChwb3J0ICE9IFBPUlRfQSkKLQkJaW50ZWxfaW5mb2ZyYW1lX2lu aXQoZGlnX3BvcnQpOwotCi0JZGlnX3BvcnQtPmF1eF9jaCA9IGludGVsX2Jpb3NfcG9ydF9hdXhf Y2goZGV2X3ByaXYsIHBvcnQpOwotCWlmICghaW50ZWxfZHBfaW5pdF9jb25uZWN0b3IoZGlnX3Bv cnQsIGludGVsX2Nvbm5lY3RvcikpCi0JCWdvdG8gZXJyX2luaXRfY29ubmVjdG9yOwotCi0JcmV0 dXJuIHRydWU7Ci0KLWVycl9pbml0X2Nvbm5lY3RvcjoKLQlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVu Y29kZXIpOwotZXJyX2VuY29kZXJfaW5pdDoKLQlrZnJlZShpbnRlbF9jb25uZWN0b3IpOwotZXJy X2Nvbm5lY3Rvcl9hbGxvYzoKLQlrZnJlZShkaWdfcG9ydCk7Ci0JcmV0dXJuIGZhbHNlOwotfQot CiB2b2lkIGludGVsX2RwX21zdF9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIHsKIAlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHAuaAppbmRleCBkNDI4NjBlZjQ1MjEuLjJlNjQzMGUwZmFhYSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaApAQCAtMzcsMTEgKzM3LDYg QEAgdm9pZCBpbnRlbF9kcF9hZGp1c3RfY29tcGxpYW5jZV9jb25maWcoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwKIGJvb2wgaW50ZWxfZHBfbGltaXRlZF9jb2xvcl9yYW5nZShjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKTsKIGludCBpbnRlbF9kcF9taW5fYnBwKGVudW0g aW50ZWxfb3V0cHV0X2Zvcm1hdCBvdXRwdXRfZm9ybWF0KTsKLWJvb2wgaW50ZWxfZHBfcG9ydF9l bmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgIGk5MTVfcmVn X3QgZHBfcmVnLCBlbnVtIHBvcnQgcG9ydCwKLQkJCSAgIGVudW0gcGlwZSAqcGlwZSk7Ci1ib29s IGludGVsX2RwX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpOTE1X3Jl Z190IG91dHB1dF9yZWcsCi0JCSAgIGVudW0gcG9ydCBwb3J0KTsKIGJvb2wgaW50ZWxfZHBfaW5p dF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQsCiAJCQkgICAg IHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3Rvcik7CiB2b2lkIGludGVsX2Rw X3NldF9saW5rX3BhcmFtcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLApAQCAtMTEzLDExICsx MDgsNiBAQCB2b2lkIGludGVsX3JlYWRfZHBfc2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyLAogCQkgICAgICAgdW5zaWduZWQgaW50IHR5cGUpOwogYm9vbCBpbnRlbF9kaWdpdGFsX3Bv cnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKTsKIAotc3RhdGljIGlu bGluZSB1bnNpZ25lZCBpbnQgaW50ZWxfZHBfdW51c2VkX2xhbmVfbWFzayhpbnQgbGFuZV9jb3Vu dCkKLXsKLQlyZXR1cm4gfigoMSA8PCBsYW5lX2NvdW50KSAtIDEpICYgMHhmOwotfQotCiB1MzIg aW50ZWxfZHBfbW9kZV90b19mZWNfY2xvY2sodTMyIG1vZGVfY2xvY2spOwogCiB2b2lkIGludGVs X2RkaV91cGRhdGVfcGlwZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKQEAgLTEz Miw3ICsxMjIsNiBAQCBib29sIGludGVsX2RwX2luaXRpYWxfZmFzdHNldF9jaGVjayhzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqZW5jb2RlciwKIAkJCQkgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpOwogdm9pZCBpbnRlbF9kcF9zeW5jX3N0YXRlKHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyLAogCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKTsKLWNvbnN0IHN0cnVjdCBkcGxsICp2bHZfZ2V0X2RwbGwoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpOwogCiB2b2lkIGludGVsX2RwX2NoZWNrX2ZybF90cmFpbmluZyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKTsKIHZvaWQgaW50ZWxfZHBfcGNvbl9kc2NfY29uZmlndXJlKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2RwaW9fcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2RwaW9fcGh5LmMKaW5kZXggNTE0YzRhN2FkZmZjLi5kZWU1M2E4MzI2YWMgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBpb19waHkuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwaW9fcGh5LmMKQEAgLTIxLDcg KzIxLDcgQEAKICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAi ZGlzcGxheS9pbnRlbF9kcC5oIgorI2luY2x1ZGUgImRpc3BsYXkvZzR4X2RwLmgiCiAKICNpbmNs dWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHBpb19waHkuaCIK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5jCmluZGV4IDU4ZWZmNjI4OWQx Mi4uNDgyZWQ5YjgxOGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX3Bwcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBz LmMKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlv bgogICovCiAKKyNpbmNsdWRlICJnNHhfZHAuaCIKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogI2lu Y2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKICNpbmNsdWRlICJpbnRlbF9kcC5oIgotLSAK Mi4yNi4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK