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=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 401ABC433E0 for ; Thu, 14 Jan 2021 09:05:49 +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 05310221EF for ; Thu, 14 Jan 2021 09:05:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 05310221EF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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 68F446E09F; Thu, 14 Jan 2021 09:05:48 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 132766E08C for ; Thu, 14 Jan 2021 09:05:43 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-381-sEbnL6TaMbCGVNdpSKp8VA-1; Thu, 14 Jan 2021 04:05:39 -0500 X-MC-Unique: sEbnL6TaMbCGVNdpSKp8VA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 07D7F1015C82; Thu, 14 Jan 2021 09:05:38 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id 777D0100164C; Thu, 14 Jan 2021 09:05:36 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Thu, 14 Jan 2021 19:05:17 +1000 Message-Id: <20210114090522.22750-7-airlied@gmail.com> In-Reply-To: <20210114090522.22750-1-airlied@gmail.com> References: <20210114090522.22750-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=airlied@gmail.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 06/11] drm/i915: migrate skl planes code new file (v3) X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jani Nikula , Dave Airlie , Dan Carpenter Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClJld29yayB0aGUgcGxhbmUg aW5pdCBjYWxscyB0byBkbyB0aGUgZ2VuIHRlc3Qgb25lIGxldmVsIGhpZ2hlci4KClJld29yayBz b21lIG9mIHRoZSBwbGFuZSBoZWxwZXJzIHNvIHRoZXkgY2FuIGxpdmUgaW4gbmV3IGZpbGUsCnRo ZXJlIGlzIHN0aWxsIHNvbWUgc2NvcGUgdG8gY2xlYW4gdXAgdGhlIHBsYW5lL2ZiIGludGVyYWN0 aW9ucwpsYXRlci4KCnYyOiBkcm9wIGF0b21pYyBjb2RlIGJhY2ssIHJlbmFtZSBmaWxlIHRvIFZp bGxlIHN1Z2dlc3Rpb25zLAphZGQgaGVhZGVyIGZpbGUuCnYzOiBtb3ZlIHNjYWxlciBiaXRzIGJh Y2sKClNpZ25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CltKYW5p OiBmaXhlZCB1cCBzcGFyc2Ugd2FybmluZ3MuXQpTaWduZWQtb2ZmLWJ5OiBKYW5pIE5pa3VsYSA8 amFuaS5uaWt1bGFAaW50ZWwuY29tPgpSZXBvcnRlZC1ieToga2VybmVsIHRlc3Qgcm9ib3QgPGxr cEBpbnRlbC5jb20+ClJlcG9ydGVkLWJ5OiBEYW4gQ2FycGVudGVyIDxkYW4uY2FycGVudGVyQG9y YWNsZS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAg ICAgIHwgICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMg ICAgIHwgICAgNCAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYyAgICAg ICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jICAg ICB8ICAgMTMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMgICAg ICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMg IHwgIDk1NiArLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuaCAgfCAgIDI3ICstCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmggICAgfCAgIDIxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0 LmMgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuYyAg ICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5j ICAgfCAxMzQzICstLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf c3ByaXRlLmggICB8ICAgIDYgKy0KIC4uLi9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxf cGxhbmUuYyAgICB8IDIyNjMgKysrKysrKysrKysrKysrKysKIC4uLi9kcm0vaTkxNS9kaXNwbGF5 L3NrbF91bml2ZXJzYWxfcGxhbmUuaCAgICB8ICAgMzIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS92bHZfZHNpLmMgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9wbS5jICAgICAgICAgICAgICAgfCAgICAxICsKIDE2IGZpbGVzIGNoYW5nZWQsIDIzODIg aW5zZXJ0aW9ucygrKSwgMjI5MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFu ZS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBlMzRlMWI2MDA2Y2UuLjRmMmMyNmJkYzhiOSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTIxOSw3ICsyMTksOCBAQCBpOTE1LXkgKz0gXAogCWRp c3BsYXkvaW50ZWxfc3ByaXRlLm8gXAogCWRpc3BsYXkvaW50ZWxfdGMubyBcCiAJZGlzcGxheS9p bnRlbF92Z2EubyBcCi0JZGlzcGxheS9pOXh4X3BsYW5lLm8KKwlkaXNwbGF5L2k5eHhfcGxhbmUu byBcCisJZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLm8KIGk5MTUtJChDT05GSUdfQUNQSSkg Kz0gXAogCWRpc3BsYXkvaW50ZWxfYWNwaS5vIFwKIAlkaXNwbGF5L2ludGVsX29wcmVnaW9uLm8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9wbGFuZS5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pOXh4X3BsYW5lLmMKaW5kZXggYjc4OTg1Yzg1 NWE1Li42YzU2ODA3OWY0OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaTl4eF9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaTl4eF9w bGFuZS5jCkBAIC01NzgsMTAgKzU3OCw2IEBAIGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCiAJaW50IG51 bV9mb3JtYXRzOwogCWludCByZXQsIHpwb3M7CiAKLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA5KQotCQlyZXR1cm4gc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoZGV2X3ByaXYsIHBpcGUs Ci0JCQkJCQkgIFBMQU5FX1BSSU1BUlkpOwotCiAJcGxhbmUgPSBpbnRlbF9wbGFuZV9hbGxvYygp OwogCWlmIChJU19FUlIocGxhbmUpKQogCQlyZXR1cm4gcGxhbmU7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaWNsX2RzaS5jCmluZGV4IDlkMjQ1YTY4OTMyMy4uOWVlZWM2ZmFkZWM3IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYwpAQCAtMzUsNiArMzUsNyBAQAogI2lu Y2x1ZGUgImludGVsX2RzaS5oIgogI2luY2x1ZGUgImludGVsX3BhbmVsLmgiCiAjaW5jbHVkZSAi aW50ZWxfdmRzYy5oIgorI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogc3RhdGlj IGludCBoZWFkZXJfY3JlZGl0c19hdmFpbGFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAogCQkJCSAgICBlbnVtIHRyYW5zY29kZXIgZHNpX3RyYW5zKQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYwppbmRleCA1N2IwYTNlYmU5MDguLmViNDc4NzEy YzM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRj LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmMKQEAgLTIw LDYgKzIwLDcgQEAKICNpbmNsdWRlICJpbnRlbF9waXBlX2NyYy5oIgogI2luY2x1ZGUgImludGVs X3Nwcml0ZS5oIgogI2luY2x1ZGUgImk5eHhfcGxhbmUuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVy c2FsX3BsYW5lLmgiCiAKIHN0YXRpYyB2b2lkIGFzc2VydF92YmxhbmtfZGlzYWJsZWQoc3RydWN0 IGRybV9jcnRjICpjcnRjKQogewpAQCAtMjQzLDcgKzI0NCwxMSBAQCBpbnQgaW50ZWxfY3J0Y19p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCiAJ Y3J0Yy0+cGlwZSA9IHBpcGU7CiAJY3J0Yy0+bnVtX3NjYWxlcnMgPSBSVU5USU1FX0lORk8oZGV2 X3ByaXYpLT5udW1fc2NhbGVyc1twaXBlXTsKIAotCXByaW1hcnkgPSBpbnRlbF9wcmltYXJ5X3Bs YW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSk7CisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g OSkKKwkJcHJpbWFyeSA9IHNrbF91bml2ZXJzYWxfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBwaXBl LAorCQkJCQkJICAgICBQTEFORV9QUklNQVJZKTsKKwllbHNlCisJCXByaW1hcnkgPSBpbnRlbF9w cmltYXJ5X3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSk7CiAJaWYgKElTX0VSUihwcmltYXJ5 KSkgewogCQlyZXQgPSBQVFJfRVJSKHByaW1hcnkpOwogCQlnb3RvIGZhaWw7CkBAIC0yNTMsNyAr MjU4LDExIEBAIGludCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKIAlmb3JfZWFjaF9zcHJpdGUoZGV2X3ByaXYsIHBpcGUs IHNwcml0ZSkgewogCQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwogCi0JCXBsYW5lID0gaW50 ZWxfc3ByaXRlX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKTsKKwkJaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gOSkKKwkJCXBsYW5lID0gc2tsX3VuaXZlcnNhbF9wbGFuZV9j cmVhdGUoZGV2X3ByaXYsIHBpcGUsCisJCQkJCQkJICAgUExBTkVfU1BSSVRFMCArIHNwcml0ZSk7 CisJCWVsc2UKKwkJCXBsYW5lID0gaW50ZWxfc3ByaXRlX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwg cGlwZSwgc3ByaXRlKTsKIAkJaWYgKElTX0VSUihwbGFuZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIo cGxhbmUpOwogCQkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGRpLmMKaW5kZXggYmY1ZmFiNmI0MzNkLi5lZTUyZjI3ZDIyOTAgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgImlu dGVsX3Nwcml0ZS5oIgogI2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmRz Yy5oIgorI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAogc3RhdGljIGNvbnN0IHU4 IGluZGV4X3RvX2RwX3NpZ25hbF9sZXZlbHNbXSA9IHsKIAlbMF0gPSBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wLApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwppbmRleCA3NDQ3MzI5MGM5YTAuLmVi YTJmZTVlOTE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNw bGF5LmMKQEAgLTkwLDYgKzkwLDcgQEAKICNpbmNsdWRlICJpbnRlbF90Yy5oIgogI2luY2x1ZGUg ImludGVsX3ZnYS5oIgogI2luY2x1ZGUgImk5eHhfcGxhbmUuaCIKKyNpbmNsdWRlICJza2xfdW5p dmVyc2FsX3BsYW5lLmgiCiAKIHN0YXRpYyB2b2lkIGk5eHhfY3J0Y19jbG9ja19nZXQoc3RydWN0 IGludGVsX2NydGMgKmNydGMsCiAJCQkJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29u ZmlnKTsKQEAgLTExMiw3ICsxMTMsNiBAQCBzdGF0aWMgdm9pZCB2bHZfcHJlcGFyZV9wbGwoc3Ry dWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKnBpcGVfY29uZmlnKTsKIHN0YXRpYyB2b2lkIGNodl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlw ZV9jb25maWcpOwotc3RhdGljIHZvaWQgc2tsX3BmaXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKIHN0YXRpYyB2b2lkIGlsa19wZml0X2VuYWJsZShj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiBzdGF0aWMgdm9pZCBp bnRlbF9tb2Rlc2V0X3NldHVwX2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJ CSBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCk7CkBAIC0xMDc4LDI2ICsxMDc4 LDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF90aWxlX3NpemUoY29uc3Qgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiBJU19HRU4oZGV2X3ByaXYsIDIpID8g MjA0OCA6IDQwOTY7CiB9CiAKLXN0YXRpYyBib29sIGlzX2Njc19wbGFuZShjb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQotewotCWlmICghaXNfY2NzX21vZGlmaWVy KGZiLT5tb2RpZmllcikpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiBwbGFuZSA+PSBmYi0+ Zm9ybWF0LT5udW1fcGxhbmVzIC8gMjsKLX0KLQotc3RhdGljIGJvb2wgaXNfZ2VuMTJfY2NzX21v ZGlmaWVyKHU2NCBtb2RpZmllcikKLXsKLQlyZXR1cm4gbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIHx8Ci0JICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKLQotfQotCi1zdGF0aWMgYm9vbCBpc19nZW4x Ml9jY3NfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkK LXsKLQlyZXR1cm4gaXNfZ2VuMTJfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikgJiYgaXNfY2Nz X3BsYW5lKGZiLCBwbGFuZSk7Ci19Ci0KIHN0YXRpYyBib29sIGlzX2F1eF9wbGFuZShjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQogewogCWlmIChpc19jY3NfbW9k aWZpZXIoZmItPm1vZGlmaWVyKSkKQEAgLTExMDYsMzUgKzEwODYsNiBAQCBzdGF0aWMgYm9vbCBp c19hdXhfcGxhbmUoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSkK IAlyZXR1cm4gcGxhbmUgPT0gMTsKIH0KIAotc3RhdGljIGludCBtYWluX3RvX2Njc19wbGFuZShj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IG1haW5fcGxhbmUpCi17Ci0JZHJt X1dBUk5fT04oZmItPmRldiwgIWlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpIHx8Ci0JCSAg ICAobWFpbl9wbGFuZSAmJiBtYWluX3BsYW5lID49IGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAy KSk7Ci0KLQlyZXR1cm4gZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDIgKyBtYWluX3BsYW5lOwot fQotCi1zdGF0aWMgaW50IGNjc190b19tYWluX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lKQotewotCWRybV9XQVJOX09OKGZiLT5kZXYsICFpc19j Y3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSB8fAotCQkgICAgY2NzX3BsYW5lIDwgZmItPmZvcm1h dC0+bnVtX3BsYW5lcyAvIDIpOwotCi0JcmV0dXJuIGNjc19wbGFuZSAtIGZiLT5mb3JtYXQtPm51 bV9wbGFuZXMgLyAyOwotfQotCi1pbnQgaW50ZWxfbWFpbl90b19hdXhfcGxhbmUoY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBtYWluX3BsYW5lKQotewotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShmYi0+ZGV2KTsKLQotCWlmIChpc19jY3NfbW9k aWZpZXIoZmItPm1vZGlmaWVyKSkKLQkJcmV0dXJuIG1haW5fdG9fY2NzX3BsYW5lKGZiLCBtYWlu X3BsYW5lKTsKLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPCAxMSAmJgotCQkgaW50ZWxfZm9y bWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSkKLQkJ cmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQogYm9vbAogaW50ZWxfZm9ybWF0X2lu Zm9faXNfeXV2X3NlbWlwbGFuYXIoY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbywK IAkJCQkgICAgdWludDY0X3QgbW9kaWZpZXIpCkBAIC0xMTUwLDcgKzExMDEsNyBAQCBzdGF0aWMg Ym9vbCBpc19zZW1pcGxhbmFyX3V2X3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiLAogCSAgICAgICBjb2xvcl9wbGFuZSA9PSAxOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50 Cit1bnNpZ25lZCBpbnQKIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwpAQCAtMTIwMyw3ICsxMTU0LDcgQEAg aW50ZWxfdGlsZV93aWR0aF9ieXRlcyhjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IGNvbG9yX3BsYW5lKQogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGludAordW5zaWduZWQg aW50CiBpbnRlbF90aWxlX2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IGNvbG9yX3BsYW5lKQogewogCWlmIChpc19nZW4xMl9jY3NfcGxhbmUoZmIsIGNvbG9yX3Bs YW5lKSkKQEAgLTEzMDMsOCArMTI1NCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfbGlu ZWFyX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByCiAJCXJl dHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCQkgaW50IGNvbG9yX3BsYW5lKQor dW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLAorCQkJCSAgaW50IGNvbG9yX3BsYW5lKQogewogCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZmItPmRldik7CiAKQEAgLTE1NzMsMTAgKzE1MjQs MTAgQEAgc3RhdGljIHUzMiBpbnRlbF9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQg KnksCiAgKiBBZGp1c3QgdGhlIHRpbGUgb2Zmc2V0IGJ5IG1vdmluZyB0aGUgZGlmZmVyZW5jZSBp bnRvCiAgKiB0aGUgeC95IG9mZnNldHMuCiAgKi8KLXN0YXRpYyB1MzIgaW50ZWxfcGxhbmVfYWRq dXN0X2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAotCQkJCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCi0JCQkJCSAgICAgaW50IGNvbG9yX3BsYW5lLAot CQkJCQkgICAgIHUzMiBvbGRfb2Zmc2V0LCB1MzIgbmV3X29mZnNldCkKK3UzMiBpbnRlbF9wbGFu ZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCisJCQkJICAgICAgY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICBpbnQgY29sb3JfcGxh bmUsCisJCQkJICAgICAgdTMyIG9sZF9vZmZzZXQsIHUzMiBuZXdfb2Zmc2V0KQogewogCXJldHVy biBpbnRlbF9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoeCwgeSwgc3RhdGUtPmh3LmZiLCBjb2xvcl9w bGFuZSwKIAkJCQkJICAgc3RhdGUtPmh3LnJvdGF0aW9uLApAQCAtMTg1MCw3ICsxODAxLDcgQEAg Ym9vbCBpc19jY3NfbW9kaWZpZXIodTY0IG1vZGlmaWVyKQogCiBzdGF0aWMgaW50IGdlbjEyX2Nj c19hdXhfc3RyaWRlKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lKQog ewotCXJldHVybiBESVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbY2NzX3RvX21haW5fcGxhbmUoZmIs IGNjc19wbGFuZSldLAorCXJldHVybiBESVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbc2tsX2Njc190 b19tYWluX3BsYW5lKGZiLCBjY3NfcGxhbmUpXSwKIAkJCSAgICA1MTIpICogNjQ7CiB9CiAKQEAg LTIwMDgsNyArMTk1OSw3IEBAIHN0YXRpYyBib29sIGludGVsX3BsYW5lX25lZWRzX3JlbWFwKGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAJcmV0dXJuIHN0cmlk ZSA+IG1heF9zdHJpZGU7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBpbnRlbF9mYl9wbGFuZV9n ZXRfc3Vic2FtcGxpbmcoaW50ICpoc3ViLCBpbnQgKnZzdWIsCiAJCQkgICAgICAgY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lKQpAQCAt MjAzMyw3ICsxOTg0LDcgQEAgaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAqaHN1 YiwgaW50ICp2c3ViLAogCQlyZXR1cm47CiAJfQogCi0JbWFpbl9wbGFuZSA9IGNjc190b19tYWlu X3BsYW5lKGZiLCBjb2xvcl9wbGFuZSk7CisJbWFpbl9wbGFuZSA9IHNrbF9jY3NfdG9fbWFpbl9w bGFuZShmYiwgY29sb3JfcGxhbmUpOwogCSpoc3ViID0gZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX3dp ZHRoKGZiLT5mb3JtYXQsIGNvbG9yX3BsYW5lKSAvCiAJCWRybV9mb3JtYXRfaW5mb19ibG9ja193 aWR0aChmYi0+Zm9ybWF0LCBtYWluX3BsYW5lKTsKIApAQCAtMjA3Myw3ICsyMDI0LDcgQEAgaW50 ZWxfZmJfY2hlY2tfY2NzX3h5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3Bs YW5lLCBpbnQgeCwgaW50IHkpCiAJY2NzX3ggPSAoeCAqIGhzdWIpICUgdGlsZV93aWR0aDsKIAlj Y3NfeSA9ICh5ICogdnN1YikgJSB0aWxlX2hlaWdodDsKIAotCW1haW5fcGxhbmUgPSBjY3NfdG9f bWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKTsKKwltYWluX3BsYW5lID0gc2tsX2Njc190b19tYWlu X3BsYW5lKGZiLCBjY3NfcGxhbmUpOwogCW1haW5feCA9IGludGVsX2ZiLT5ub3JtYWxbbWFpbl9w bGFuZV0ueCAlIHRpbGVfd2lkdGg7CiAJbWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFttYWluX3Bs YW5lXS55ICUgdGlsZV9oZWlnaHQ7CiAKQEAgLTIwOTksNyArMjA1MCw3IEBAIHN0YXRpYyB2b2lk CiBpbnRlbF9mYl9wbGFuZV9kaW1zKGludCAqdywgaW50ICpoLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQogewogCWludCBtYWluX3BsYW5lID0gaXNfY2NzX3Bs YW5lKGZiLCBjb2xvcl9wbGFuZSkgPwotCQkJIGNjc190b19tYWluX3BsYW5lKGZiLCBjb2xvcl9w bGFuZSkgOiAwOworCQkJIHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY29sb3JfcGxhbmUpIDog MDsKIAlpbnQgbWFpbl9oc3ViLCBtYWluX3ZzdWI7CiAJaW50IGhzdWIsIHZzdWI7CiAKQEAgLTI0 NzQsNzMgKzI0MjUsNiBAQCBzdGF0aWMgaW50IGk5eHhfZm9ybWF0X3RvX2ZvdXJjYyhpbnQgZm9y bWF0KQogCX0KIH0KIAotaW50IHNrbF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQsIGJvb2wg cmdiX29yZGVyLCBib29sIGFscGhhKQotewotCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBQTEFO RV9DVExfRk9STUFUX1JHQl81NjU6Ci0JCXJldHVybiBEUk1fRk9STUFUX1JHQjU2NTsKLQljYXNl IFBMQU5FX0NUTF9GT1JNQVRfTlYxMjoKLQkJcmV0dXJuIERSTV9GT1JNQVRfTlYxMjsKLQljYXNl IFBMQU5FX0NUTF9GT1JNQVRfWFlVVjoKLQkJcmV0dXJuIERSTV9GT1JNQVRfWFlVVjg4ODg7Ci0J Y2FzZSBQTEFORV9DVExfRk9STUFUX1AwMTA6Ci0JCXJldHVybiBEUk1fRk9STUFUX1AwMTA7Ci0J Y2FzZSBQTEFORV9DVExfRk9STUFUX1AwMTI6Ci0JCXJldHVybiBEUk1fRk9STUFUX1AwMTI7Ci0J Y2FzZSBQTEFORV9DVExfRk9STUFUX1AwMTY6Ci0JCXJldHVybiBEUk1fRk9STUFUX1AwMTY7Ci0J Y2FzZSBQTEFORV9DVExfRk9STUFUX1kyMTA6Ci0JCXJldHVybiBEUk1fRk9STUFUX1kyMTA7Ci0J Y2FzZSBQTEFORV9DVExfRk9STUFUX1kyMTI6Ci0JCXJldHVybiBEUk1fRk9STUFUX1kyMTI7Ci0J Y2FzZSBQTEFORV9DVExfRk9STUFUX1kyMTY6Ci0JCXJldHVybiBEUk1fRk9STUFUX1kyMTY7Ci0J Y2FzZSBQTEFORV9DVExfRk9STUFUX1k0MTA6Ci0JCXJldHVybiBEUk1fRk9STUFUX1hWWVUyMTAx MDEwOwotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9ZNDEyOgotCQlyZXR1cm4gRFJNX0ZPUk1BVF9Y VllVMTJfMTYxNjE2MTY7Ci0JY2FzZSBQTEFORV9DVExfRk9STUFUX1k0MTY6Ci0JCXJldHVybiBE Uk1fRk9STUFUX1hWWVUxNjE2MTYxNjsKLQlkZWZhdWx0OgotCWNhc2UgUExBTkVfQ1RMX0ZPUk1B VF9YUkdCXzg4ODg6Ci0JCWlmIChyZ2Jfb3JkZXIpIHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1 cm4gRFJNX0ZPUk1BVF9BQkdSODg4ODsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9Y QkdSODg4ODsKLQkJfSBlbHNlIHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1B VF9BUkdCODg4ODsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YUkdCODg4ODsKLQkJ fQotCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzIxMDEwMTA6Ci0JCWlmIChyZ2Jfb3JkZXIp IHsKLQkJCWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDsKLQkJ CWVsc2UKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDsKLQkJfSBlbHNlIHsKLQkJ CWlmIChhbHBoYSkKLQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDsKLQkJCWVsc2UK LQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDsKLQkJfQotCWNhc2UgUExBTkVfQ1RM X0ZPUk1BVF9YUkdCXzE2MTYxNjE2RjoKLQkJaWYgKHJnYl9vcmRlcikgewotCQkJaWYgKGFscGhh KQotCQkJCXJldHVybiBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY7Ci0JCQllbHNlCi0JCQkJcmV0 dXJuIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjsKLQkJfSBlbHNlIHsKLQkJCWlmIChhbHBoYSkK LQkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOwotCQkJZWxzZQotCQkJCXJldHVy biBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qg aTkxNV92bWEgKgogaW5pdGlhbF9wbGFuZV92bWEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUsCiAJCSAgc3RydWN0IGludGVsX2luaXRpYWxfcGxhbmVfY29uZmlnICpwbGFuZV9jb25maWcp CkBAIC0yODQ1LDM2MiArMjcyOSw2IEBAIGludGVsX2ZpbmRfaW5pdGlhbF9wbGFuZV9vYmooc3Ry dWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCiAJCSAgJnRvX2ludGVsX2Zyb250YnVmZmVyKGZi KS0+Yml0cyk7CiB9CiAKLQotc3RhdGljIGJvb2wKLXNrbF9jaGVja19tYWluX2Njc19jb29yZGlu YXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJICAgICAgIGlu dCBtYWluX3gsIGludCBtYWluX3ksIHUzMiBtYWluX29mZnNldCwKLQkJCSAgICAgICBpbnQgY2Nz X3BsYW5lKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOwotCWludCBhdXhfeCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxh bmVdLng7Ci0JaW50IGF1eF95ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0u eTsKLQl1MzIgYXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVd Lm9mZnNldDsKLQl1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIGNjc19w bGFuZSk7Ci0JaW50IGhzdWI7Ci0JaW50IHZzdWI7Ci0KLQlpbnRlbF9mYl9wbGFuZV9nZXRfc3Vi c2FtcGxpbmcoJmhzdWIsICZ2c3ViLCBmYiwgY2NzX3BsYW5lKTsKLQl3aGlsZSAoYXV4X29mZnNl dCA+PSBtYWluX29mZnNldCAmJiBhdXhfeSA8PSBtYWluX3kpIHsKLQkJaW50IHgsIHk7Ci0KLQkJ aWYgKGF1eF94ID09IG1haW5feCAmJiBhdXhfeSA9PSBtYWluX3kpCi0JCQlicmVhazsKLQotCQlp ZiAoYXV4X29mZnNldCA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJeCA9IGF1eF94IC8gaHN1YjsKLQkJ eSA9IGF1eF95IC8gdnN1YjsKLQkJYXV4X29mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGln bmVkX29mZnNldCgmeCwgJnksCi0JCQkJCQkJICAgICAgIHBsYW5lX3N0YXRlLAotCQkJCQkJCSAg ICAgICBjY3NfcGxhbmUsCi0JCQkJCQkJICAgICAgIGF1eF9vZmZzZXQsCi0JCQkJCQkJICAgICAg IGF1eF9vZmZzZXQgLQotCQkJCQkJCQlhbGlnbm1lbnQpOwotCQlhdXhfeCA9IHggKiBoc3ViICsg YXV4X3ggJSBoc3ViOwotCQlhdXhfeSA9IHkgKiB2c3ViICsgYXV4X3kgJSB2c3ViOwotCX0KLQot CWlmIChhdXhfeCAhPSBtYWluX3ggfHwgYXV4X3kgIT0gbWFpbl95KQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQgPSBhdXhfb2Zm c2V0OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnggPSBhdXhfeDsKLQlw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS55ID0gYXV4X3k7Ci0KLQlyZXR1cm4g dHJ1ZTsKLX0KLQotdW5zaWduZWQgaW50Ci1pbnRlbF9wbGFuZV9mZW5jZV95X29mZnNldChjb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWludCB4ID0gMCwg eSA9IDA7Ci0KLQlpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LCBwbGFu ZV9zdGF0ZSwgMCwKLQkJCQkJICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0LCAw KTsKLQotCXJldHVybiB5OwotfQotCi1zdGF0aWMgaW50IGludGVsX3BsYW5lX21pbl93aWR0aChz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKLQkJCQkgaW50IGNvbG9yX3BsYW5lLAotCQkJCSB1bnNpZ25lZCBpbnQgcm90YXRp b24pCi17Ci0JaWYgKHBsYW5lLT5taW5fd2lkdGgpCi0JCXJldHVybiBwbGFuZS0+bWluX3dpZHRo KGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOwotCWVsc2UKLQkJcmV0dXJuIDE7Ci19Ci0KLXN0 YXRpYyBpbnQgaW50ZWxfcGxhbmVfbWF4X3dpZHRoKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUs Ci0JCQkJIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJCSBpbnQgY29sb3Jf cGxhbmUsCi0JCQkJIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsKLQlpZiAocGxhbmUtPm1heF93 aWR0aCkKLQkJcmV0dXJuIHBsYW5lLT5tYXhfd2lkdGgoZmIsIGNvbG9yX3BsYW5lLCByb3RhdGlv bik7Ci0JZWxzZQotCQlyZXR1cm4gSU5UX01BWDsKLX0KLQotc3RhdGljIGludCBpbnRlbF9wbGFu ZV9tYXhfaGVpZ2h0KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkJICBjb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkgIGludCBjb2xvcl9wbGFuZSwKLQkJCQkgIHVu c2lnbmVkIGludCByb3RhdGlvbikKLXsKLQlpZiAocGxhbmUtPm1heF9oZWlnaHQpCi0JCXJldHVy biBwbGFuZS0+bWF4X2hlaWdodChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKLQllbHNlCi0J CXJldHVybiBJTlRfTUFYOwotfQotCi1pbnQgc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJCSBpbnQgKngs IGludCAqeSwgdTMyICpvZmZzZXQpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRv X2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JY29uc3QgaW50 IGF1eF9wbGFuZSA9IGludGVsX21haW5fdG9fYXV4X3BsYW5lKGZiLCAwKTsKLQljb25zdCB1MzIg YXV4X29mZnNldCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVthdXhfcGxhbmVdLm9mZnNldDsK LQljb25zdCB1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZmIsIDApOwotCWNv bnN0IGludCB3ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7 Ci0KLQlpbnRlbF9hZGRfZmJfb2Zmc2V0cyh4LCB5LCBwbGFuZV9zdGF0ZSwgMCk7Ci0JKm9mZnNl dCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoeCwgeSwgcGxhbmVfc3RhdGUs IDApOwotCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgYWxpZ25tZW50ICYmICFpc19w b3dlcl9vZl8yKGFsaWdubWVudCkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JICogQVVY IHN1cmZhY2Ugb2Zmc2V0IGlzIHNwZWNpZmllZCBhcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUKLQkg KiBtYWluIHN1cmZhY2Ugb2Zmc2V0LCBhbmQgaXQgbXVzdCBiZSBub24tbmVnYXRpdmUuIE1ha2UK LQkgKiBzdXJlIHRoYXQgaXMgd2hhdCB3ZSB3aWxsIGdldC4KLQkgKi8KLQlpZiAoYXV4X3BsYW5l ICYmICpvZmZzZXQgPiBhdXhfb2Zmc2V0KQotCQkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0 X2FsaWduZWRfb2Zmc2V0KHgsIHksIHBsYW5lX3N0YXRlLCAwLAotCQkJCQkJCSAgICAqb2Zmc2V0 LAotCQkJCQkJCSAgICBhdXhfb2Zmc2V0ICYgfihhbGlnbm1lbnQgLSAxKSk7Ci0KLQkvKgotCSAq IFdoZW4gdXNpbmcgYW4gWC10aWxlZCBzdXJmYWNlLCB0aGUgcGxhbmUgYmxvd3MgdXAKLQkgKiBp ZiB0aGUgeCBvZmZzZXQgKyB3aWR0aCBleGNlZWQgdGhlIHN0cmlkZS4KLQkgKgotCSAqIFRPRE86 IGxpbmVhciBhbmQgWS10aWxlZCBzZWVtIGZpbmUsIFlmIHVudGVzdGVkLAotCSAqLwotCWlmIChm Yi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpIHsKLQkJaW50IGNwcCA9IGZi LT5mb3JtYXQtPmNwcFswXTsKLQotCQl3aGlsZSAoKCp4ICsgdykgKiBjcHAgPiBwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlKSB7Ci0JCQlpZiAoKm9mZnNldCA9PSAwKSB7Ci0JCQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJCSAgICAiVW5hYmxlIHRvIGZpbmQgc3Vp dGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNldCBkdWUgdG8gWC10aWxpbmdcbiIpOwotCQkJCXJl dHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfYWRqdXN0X2Fs aWduZWRfb2Zmc2V0KHgsIHksIHBsYW5lX3N0YXRlLCAwLAotCQkJCQkJCQkgICAgKm9mZnNldCwK LQkJCQkJCQkJICAgICpvZmZzZXQgLSBhbGlnbm1lbnQpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0 b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWNvbnN0IHVu c2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlpbnQgeCA9 IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKLQlpbnQgeSA9IHBsYW5lX3N0YXRlLT51 YXBpLnNyYy55MSA+PiAxNjsKLQljb25zdCBpbnQgdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCWNvbnN0IGludCBoID0gZHJtX3JlY3RfaGVpZ2h0KCZw bGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCWNvbnN0IGludCBtaW5fd2lkdGggPSBpbnRl bF9wbGFuZV9taW5fd2lkdGgocGxhbmUsIGZiLCAwLCByb3RhdGlvbik7Ci0JY29uc3QgaW50IG1h eF93aWR0aCA9IGludGVsX3BsYW5lX21heF93aWR0aChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsK LQljb25zdCBpbnQgbWF4X2hlaWdodCA9IGludGVsX3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZi LCAwLCByb3RhdGlvbik7Ci0JY29uc3QgaW50IGF1eF9wbGFuZSA9IGludGVsX21haW5fdG9fYXV4 X3BsYW5lKGZiLCAwKTsKLQljb25zdCB1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1l bnQoZmIsIDApOwotCXUzMiBvZmZzZXQ7Ci0JaW50IHJldDsKLQotCWlmICh3ID4gbWF4X3dpZHRo IHx8IHcgPCBtaW5fd2lkdGggfHwgaCA+IG1heF9oZWlnaHQpIHsKLQkJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sCi0JCQkgICAgInJlcXVlc3RlZCBZL1JHQiBzb3VyY2Ugc2l6ZSAlZHglZCBv dXRzaWRlIGxpbWl0cyAobWluOiAlZHgxIG1heDogJWR4JWQpXG4iLAotCQkJICAgIHcsIGgsIG1p bl93aWR0aCwgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JcmV0ID0gc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChwbGFuZV9zdGF0ZSwgJngsICZ5 LCAmb2Zmc2V0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyoKLQkgKiBDQ1MgQVVY IHN1cmZhY2UgZG9lc24ndCBoYXZlIGl0cyBvd24geC95IG9mZnNldHMsIHdlIG11c3QgbWFrZSBz dXJlCi0JICogdGhleSBtYXRjaCB3aXRoIHRoZSBtYWluIHN1cmZhY2UgeC95IG9mZnNldHMuCi0J ICovCi0JaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7Ci0JCXdoaWxlICghc2ts X2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LAotCQkJCQkJICAg ICAgIG9mZnNldCwgYXV4X3BsYW5lKSkgewotCQkJaWYgKG9mZnNldCA9PSAwKQotCQkJCWJyZWFr OwotCi0JCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5 LCBwbGFuZV9zdGF0ZSwgMCwKLQkJCQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQp OwotCQl9Ci0KLQkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0u eCB8fAotCQkgICAgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5lXS55KSB7 Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgIlVuYWJsZSB0byBmaW5k IHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvIENDU1xuIik7Ci0JCQlyZXR1 cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZz ZXQgPSBvZmZzZXQ7Ci0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnggPSB4OwotCXBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVswXS55ID0geTsKLQotCS8qCi0JICogUHV0IHRoZSBmaW5hbCBj b29yZGluYXRlcyBiYWNrIHNvIHRoYXQgdGhlIHNyYwotCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdp bGwgc2VlIHRoZSByaWdodCB2YWx1ZXMuCi0JICovCi0JZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZw bGFuZV9zdGF0ZS0+dWFwaS5zcmMsCi0JCQkgICAgICB4IDw8IDE2LCB5IDw8IDE2KTsKLQotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNlKHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQlj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQl1 bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247Ci0JaW50IHV2 X3BsYW5lID0gMTsKLQlpbnQgbWF4X3dpZHRoID0gaW50ZWxfcGxhbmVfbWF4X3dpZHRoKHBsYW5l LCBmYiwgdXZfcGxhbmUsIHJvdGF0aW9uKTsKLQlpbnQgbWF4X2hlaWdodCA9IGludGVsX3BsYW5l X21heF9oZWlnaHQocGxhbmUsIGZiLCB1dl9wbGFuZSwgcm90YXRpb24pOwotCWludCB4ID0gcGxh bmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE3OwotCWludCB5ID0gcGxhbmVfc3RhdGUtPnVhcGku c3JjLnkxID4+IDE3OwotCWludCB3ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBp LnNyYykgPj4gMTc7Ci0JaW50IGggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBp LnNyYykgPj4gMTc7Ci0JdTMyIG9mZnNldDsKLQotCS8qIEZJWE1FIG5vdCBxdWl0ZSBzdXJlIGhv dy9pZiB0aGVzZSBhcHBseSB0byB0aGUgY2hyb21hIHBsYW5lICovCi0JaWYgKHcgPiBtYXhfd2lk dGggfHwgaCA+IG1heF9oZWlnaHQpIHsKLQkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwKLQkJCSAg ICAiQ2JDciBzb3VyY2Ugc2l6ZSAlZHglZCB0b28gYmlnIChsaW1pdCAlZHglZClcbiIsCi0JCQkg ICAgdywgaCwgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwgdXZfcGxhbmUpOwot CW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAotCQkJ CQkJICAgIHBsYW5lX3N0YXRlLCB1dl9wbGFuZSk7Ci0KLQlpZiAoaXNfY2NzX21vZGlmaWVyKGZi LT5tb2RpZmllcikpIHsKLQkJaW50IGNjc19wbGFuZSA9IG1haW5fdG9fY2NzX3BsYW5lKGZiLCB1 dl9wbGFuZSk7Ci0JCXUzMiBhdXhfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Nj c19wbGFuZV0ub2Zmc2V0OwotCQl1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQo ZmIsIHV2X3BsYW5lKTsKLQotCQlpZiAob2Zmc2V0ID4gYXV4X29mZnNldCkKLQkJCW9mZnNldCA9 IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCi0JCQkJCQkJCSAgIHBs YW5lX3N0YXRlLAotCQkJCQkJCQkgICB1dl9wbGFuZSwKLQkJCQkJCQkJICAgb2Zmc2V0LAotCQkJ CQkJCQkgICBhdXhfb2Zmc2V0ICYgfihhbGlnbm1lbnQgLSAxKSk7Ci0KLQkJd2hpbGUgKCFza2xf Y2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUsIHgsIHksCi0JCQkJCQkgICAg ICAgb2Zmc2V0LCBjY3NfcGxhbmUpKSB7Ci0JCQlpZiAob2Zmc2V0ID09IDApCi0JCQkJYnJlYWs7 Ci0KLQkJCW9mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnks Ci0JCQkJCQkJCSAgIHBsYW5lX3N0YXRlLAotCQkJCQkJCQkgICB1dl9wbGFuZSwKLQkJCQkJCQkJ ICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOwotCQl9Ci0KLQkJaWYgKHggIT0gcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueCB8fAotCQkgICAgeSAhPSBwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS55KSB7Ci0JCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJt LAotCQkJCSAgICAiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNlIG9mZnNl dCBkdWUgdG8gQ0NTXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5lXS5vZmZzZXQgPSBvZmZzZXQ7Ci0JcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5lXS54ID0geDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbdXZfcGxhbmVdLnkgPSB5OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX2No ZWNrX2Njc19hdXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3 LmZiOwotCWludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKLQlpbnQg c3JjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueTEgPj4gMTY7Ci0JdTMyIG9mZnNldDsKLQlp bnQgY2NzX3BsYW5lOwotCi0JZm9yIChjY3NfcGxhbmUgPSAwOyBjY3NfcGxhbmUgPCBmYi0+Zm9y bWF0LT5udW1fcGxhbmVzOyBjY3NfcGxhbmUrKykgewotCQlpbnQgbWFpbl9oc3ViLCBtYWluX3Zz dWI7Ci0JCWludCBoc3ViLCB2c3ViOwotCQlpbnQgeCwgeTsKLQotCQlpZiAoIWlzX2Njc19wbGFu ZShmYiwgY2NzX3BsYW5lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWludGVsX2ZiX3BsYW5lX2dldF9z dWJzYW1wbGluZygmbWFpbl9oc3ViLCAmbWFpbl92c3ViLCBmYiwKLQkJCQkJICAgICAgIGNjc190 b19tYWluX3BsYW5lKGZiLCBjY3NfcGxhbmUpKTsKLQkJaW50ZWxfZmJfcGxhbmVfZ2V0X3N1YnNh bXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjc19wbGFuZSk7Ci0KLQkJaHN1YiAqPSBtYWluX2hz dWI7Ci0JCXZzdWIgKj0gbWFpbl92c3ViOwotCQl4ID0gc3JjX3ggLyBoc3ViOwotCQl5ID0gc3Jj X3kgLyB2c3ViOwotCi0JCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUs IGNjc19wbGFuZSk7Ci0KLQkJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29m ZnNldCgmeCwgJnksCi0JCQkJCQkJICAgIHBsYW5lX3N0YXRlLAotCQkJCQkJCSAgICBjY3NfcGxh bmUpOwotCi0JCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLm9mZnNldCA9IG9m ZnNldDsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueCA9ICh4ICogaHN1 YiArCi0JCQkJCQkJIHNyY194ICUgaHN1YikgLwotCQkJCQkJCW1haW5faHN1YjsKLQkJcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSA9ICh5ICogdnN1YiArCi0JCQkJCQkJIHNy Y195ICUgdnN1YikgLwotCQkJCQkJCW1haW5fdnN1YjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQot aW50IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCi17Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9z dGF0ZS0+aHcuZmI7Ci0JaW50IHJldCwgaTsKLQotCXJldCA9IGludGVsX3BsYW5lX2NvbXB1dGVf Z3R0KHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFu ZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSGFuZGxlIHRo ZSBBVVggc3VyZmFjZSBmaXJzdCBzaW5jZSB0aGUgbWFpbiBzdXJmYWNlIHNldHVwIGRlcGVuZHMg b24KLQkgKiBpdC4KLQkgKi8KLQlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpIHsK LQkJcmV0ID0gc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Ci0JCWlmIChy ZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195dXZf c2VtaXBsYW5hcihmYi0+Zm9ybWF0LAotCQkJCQkJZmItPm1vZGlmaWVyKSkgewotCQlyZXQgPSBz a2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQly ZXR1cm4gcmV0OwotCX0KLQotCWZvciAoaSA9IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7IGkgPCBB UlJBWV9TSVpFKHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZSk7IGkrKykgewotCQlwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbaV0ub2Zmc2V0ID0gMDsKLQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W2ldLnggPSAwOwotCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueSA9IDA7Ci0JfQotCi0J cmV0ID0gc2tsX2NoZWNrX21haW5fc3VyZmFjZShwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJ cmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3Nj YWxlcihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywgaW50IGlkKQogewogCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsKQEAgLTMyMzMsMzA1ICsyNzYx LDI0IEBAIHN0YXRpYyB2b2lkIHNrbF9kZXRhY2hfc2NhbGVycyhjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2ts X3BsYW5lX3N0cmlkZV9tdWx0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJ CQkgIGludCBjb2xvcl9wbGFuZSwgdW5zaWduZWQgaW50IHJvdGF0aW9uKQotewotCS8qCi0JICog VGhlIHN0cmlkZSBpcyBlaXRoZXIgZXhwcmVzc2VkIGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMg Y2h1bmtzIGZvcgotCSAqIGxpbmVhciBidWZmZXJzIG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3Ig dGlsZWQgYnVmZmVycy4KLQkgKi8KLQlpZiAoaXNfc3VyZmFjZV9saW5lYXIoZmIsIGNvbG9yX3Bs YW5lKSkKLQkJcmV0dXJuIDY0OwotCWVsc2UgaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90 YXRpb24pKQotCQlyZXR1cm4gaW50ZWxfdGlsZV9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lKTsKLQll bHNlCi0JCXJldHVybiBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Ci19 Ci0KLXUzMiBza2xfcGxhbmVfc3RyaWRlKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGUsCi0JCSAgICAgaW50IGNvbG9yX3BsYW5lKQotewotCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCBy b3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQl1MzIgc3RyaWRlID0gcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS5zdHJpZGU7Ci0KLQlpZiAoY29sb3JfcGxh bmUgPj0gZmItPmZvcm1hdC0+bnVtX3BsYW5lcykKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gc3Ry aWRlIC8gc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGZiLCBjb2xvcl9wbGFuZSwgcm90YXRpb24pOwot fQotCi1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfZm9ybWF0KHUzMiBwaXhlbF9mb3JtYXQpCi17 Ci0Jc3dpdGNoIChwaXhlbF9mb3JtYXQpIHsKLQljYXNlIERSTV9GT1JNQVRfQzg6Ci0JCXJldHVy biBQTEFORV9DVExfRk9STUFUX0lOREVYRUQ7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKLQkJ cmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfUkdCXzU2NTsKLQljYXNlIERSTV9GT1JNQVRfWEJHUjg4 ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1B VF9YUkdCXzg4ODggfCBQTEFORV9DVExfT1JERVJfUkdCWDsKLQljYXNlIERSTV9GT1JNQVRfWFJH Qjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9YUkdCXzg4ODg7Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJN X0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWFJHQl8yMTAx MDEwIHwgUExBTkVfQ1RMX09SREVSX1JHQlg7Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEw OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JN QVRfWFJHQl8yMTAxMDEwOwotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2Ug RFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdC XzE2MTYxNjE2RiB8IFBMQU5FX0NUTF9PUkRFUl9SR0JYOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdC MTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgotCQlyZXR1cm4gUExB TkVfQ1RMX0ZPUk1BVF9YUkdCXzE2MTYxNjE2RjsKLQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6 Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hZVVY7Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6 Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfWVVZ VjsKLQljYXNlIERSTV9GT1JNQVRfWVZZVToKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVW NDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9ZVllVOwotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgotCQly ZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0MjIgfCBQTEFORV9DVExfWVVWNDIyX1VZVlk7Ci0J Y2FzZSBEUk1fRk9STUFUX1ZZVVk6Ci0JCXJldHVybiBQTEFORV9DVExfRk9STUFUX1lVVjQyMiB8 IFBMQU5FX0NUTF9ZVVY0MjJfVllVWTsKLQljYXNlIERSTV9GT1JNQVRfTlYxMjoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfTlYxMjsKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfUDAxMDsKLQljYXNlIERSTV9GT1JNQVRfUDAxMjoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfUDAxMjsKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfUDAxNjsKLQljYXNlIERSTV9GT1JNQVRfWTIxMDoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfWTIxMDsKLQljYXNlIERSTV9GT1JNQVRfWTIxMjoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfWTIxMjsKLQljYXNlIERSTV9GT1JNQVRfWTIxNjoKLQkJcmV0dXJu IFBMQU5FX0NUTF9GT1JNQVRfWTIxNjsKLQljYXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6Ci0J CXJldHVybiBQTEFORV9DVExfRk9STUFUX1k0MTA7Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxMl8x NjE2MTYxNjoKLQkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWTQxMjsKLQljYXNlIERSTV9GT1JN QVRfWFZZVTE2MTYxNjE2OgotCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZNDE2OwotCWRlZmF1 bHQ6Ci0JCU1JU1NJTkdfQ0FTRShwaXhlbF9mb3JtYXQpOwotCX0KLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfYWxwaGEoY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlpZiAoIXBsYW5lX3N0YXRlLT5ody5mYi0+Zm9ybWF0 LT5oYXNfYWxwaGEpCi0JCXJldHVybiBQTEFORV9DVExfQUxQSEFfRElTQUJMRTsKLQotCXN3aXRj aCAocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpIHsKLQljYXNlIERSTV9NT0RFX0JM RU5EX1BJWEVMX05PTkU6Ci0JCXJldHVybiBQTEFORV9DVExfQUxQSEFfRElTQUJMRTsKLQljYXNl IERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJOgotCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX1NXX1BS RU1VTFRJUExZOwotCWNhc2UgRFJNX01PREVfQkxFTkRfQ09WRVJBR0U6Ci0JCXJldHVybiBQTEFO RV9DVExfQUxQSEFfSFdfUFJFTVVMVElQTFk7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHBs YW5lX3N0YXRlLT5ody5waXhlbF9ibGVuZF9tb2RlKTsKLQkJcmV0dXJuIFBMQU5FX0NUTF9BTFBI QV9ESVNBQkxFOwotCX0KLX0KLQotc3RhdGljIHUzMiBnbGtfcGxhbmVfY29sb3JfY3RsX2FscGhh KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JaWYgKCFw bGFuZV9zdGF0ZS0+aHcuZmItPmZvcm1hdC0+aGFzX2FscGhhKQotCQlyZXR1cm4gUExBTkVfQ09M T1JfQUxQSEFfRElTQUJMRTsKLQotCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5k X21vZGUpIHsKLQljYXNlIERSTV9NT0RFX0JMRU5EX1BJWEVMX05PTkU6Ci0JCXJldHVybiBQTEFO RV9DT0xPUl9BTFBIQV9ESVNBQkxFOwotCWNhc2UgRFJNX01PREVfQkxFTkRfUFJFTVVMVEk6Ci0J CXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9TV19QUkVNVUxUSVBMWTsKLQljYXNlIERSTV9NT0RF X0JMRU5EX0NPVkVSQUdFOgotCQlyZXR1cm4gUExBTkVfQ09MT1JfQUxQSEFfSFdfUFJFTVVMVElQ TFk7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHBsYW5lX3N0YXRlLT5ody5waXhlbF9ibGVu ZF9tb2RlKTsKLQkJcmV0dXJuIFBMQU5FX0NPTE9SX0FMUEhBX0RJU0FCTEU7Ci0JfQotfQotCi1z dGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5nKHU2NCBmYl9tb2RpZmllcikKLXsKLQlzd2l0 Y2ggKGZiX21vZGlmaWVyKSB7Ci0JY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JCWJyZWFr OwotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCXJldHVybiBQTEFORV9DVExfVElM RURfWDsKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCQlyZXR1cm4gUExBTkVfQ1RM X1RJTEVEX1k7Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Ci0JCXJldHVybiBQ TEFORV9DVExfVElMRURfWSB8IFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEU7 Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1M6Ci0JCXJldHVybiBQ TEFORV9DVExfVElMRURfWSB8Ci0JCSAgICAgICBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJ T05fRU5BQkxFIHwKLQkJICAgICAgIFBMQU5FX0NUTF9DTEVBUl9DT0xPUl9ESVNBQkxFOwotCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgotCQlyZXR1cm4gUExBTkVf Q1RMX1RJTEVEX1kgfCBQTEFORV9DVExfTUVESUFfREVDT01QUkVTU0lPTl9FTkFCTEU7Ci0JY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Ci0JCXJldHVybiBQTEFORV9DVExfVElMRURfWUY7 Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgotCQlyZXR1cm4gUExBTkVfQ1RM X1RJTEVEX1lGIHwgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKLQlkZWZh dWx0OgotCQlNSVNTSU5HX0NBU0UoZmJfbW9kaWZpZXIpOwotCX0KLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgdTMyIHNrbF9wbGFuZV9jdGxfcm90YXRlKHVuc2lnbmVkIGludCByb3RhdGUpCi17 Ci0Jc3dpdGNoIChyb3RhdGUpIHsKLQljYXNlIERSTV9NT0RFX1JPVEFURV8wOgotCQlicmVhazsK LQkvKgotCSAqIERSTV9NT0RFX1JPVEFURV8gaXMgY291bnRlciBjbG9ja3dpc2UgdG8gc3RheSBj b21wYXRpYmxlIHdpdGggWHJhbmRyCi0JICogd2hpbGUgaTkxNSBIVyByb3RhdGlvbiBpcyBjbG9j a3dpc2UsIHRoYXRzIHdoeSB0aGlzIHN3YXBwaW5nLgotCSAqLwotCWNhc2UgRFJNX01PREVfUk9U QVRFXzkwOgotCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV8yNzA7Ci0JY2FzZSBEUk1fTU9ERV9S T1RBVEVfMTgwOgotCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV8xODA7Ci0JY2FzZSBEUk1fTU9E RV9ST1RBVEVfMjcwOgotCQlyZXR1cm4gUExBTkVfQ1RMX1JPVEFURV85MDsKLQlkZWZhdWx0Ogot CQlNSVNTSU5HX0NBU0Uocm90YXRlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUz MiBjbmxfcGxhbmVfY3RsX2ZsaXAodW5zaWduZWQgaW50IHJlZmxlY3QpCi17Ci0Jc3dpdGNoIChy ZWZsZWN0KSB7Ci0JY2FzZSAwOgotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX1JFRkxFQ1RfWDoK LQkJcmV0dXJuIFBMQU5FX0NUTF9GTElQX0hPUklaT05UQUw7Ci0JY2FzZSBEUk1fTU9ERV9SRUZM RUNUX1k6Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKHJlZmxlY3QpOwotCX0KLQotCXJldHVy biAwOwotfQotCi11MzIgc2tsX3BsYW5lX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOwotCXUzMiBwbGFuZV9jdGwg PSAwOwotCi0JaWYgKGNydGNfc3RhdGUtPnVhcGkuYXN5bmNfZmxpcCkKLQkJcGxhbmVfY3RsIHw9 IFBMQU5FX0NUTF9BU1lOQ19GTElQOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAg fHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCXJldHVybiBwbGFuZV9jdGw7Ci0KLQlpZiAo Y3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQotCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BJUEVf R0FNTUFfRU5BQkxFOwotCi0JaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCi0JCXBsYW5lX2N0 bCB8PSBQTEFORV9DVExfUElQRV9DU0NfRU5BQkxFOwotCi0JcmV0dXJuIHBsYW5lX2N0bDsKLX0K LQotdTMyIHNrbF9wbGFuZV9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCi0JCSAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK LXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5l X3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5l X3N0YXRlLT5ody5yb3RhdGlvbjsKLQljb25zdCBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xv cmtleSAqa2V5ID0gJnBsYW5lX3N0YXRlLT5ja2V5OwotCXUzMiBwbGFuZV9jdGw7Ci0KLQlwbGFu ZV9jdGwgPSBQTEFORV9DVExfRU5BQkxFOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAx MCAmJiAhSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKLQkJcGxhbmVfY3RsIHw9IHNrbF9wbGFu ZV9jdGxfYWxwaGEocGxhbmVfc3RhdGUpOwotCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BMQU5F X0dBTU1BX0RJU0FCTEU7Ci0KLQkJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZyA9 PSBEUk1fQ09MT1JfWUNCQ1JfQlQ3MDkpCi0JCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1lVVl9U T19SR0JfQ1NDX0ZPUk1BVF9CVDcwOTsKLQotCQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3Jh bmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKQotCQkJcGxhbmVfY3RsIHw9IFBMQU5F X0NUTF9ZVVZfUkFOR0VfQ09SUkVDVElPTl9ESVNBQkxFOwotCX0KLQotCXBsYW5lX2N0bCB8PSBz a2xfcGxhbmVfY3RsX2Zvcm1hdChmYi0+Zm9ybWF0LT5mb3JtYXQpOwotCXBsYW5lX2N0bCB8PSBz a2xfcGxhbmVfY3RsX3RpbGluZyhmYi0+bW9kaWZpZXIpOwotCXBsYW5lX2N0bCB8PSBza2xfcGxh bmVfY3RsX3JvdGF0ZShyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV9NQVNLKTsKLQotCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQotCQlwbGFuZV9jdGwgfD0gY25sX3BsYW5lX2N0bF9m bGlwKHJvdGF0aW9uICYKLQkJCQkJCURSTV9NT0RFX1JFRkxFQ1RfTUFTSyk7Ci0KLQlpZiAoa2V5 LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX0RFU1RJTkFUSU9OKQotCQlwbGFuZV9jdGwgfD0g UExBTkVfQ1RMX0tFWV9FTkFCTEVfREVTVElOQVRJT047Ci0JZWxzZSBpZiAoa2V5LT5mbGFncyAm IEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSkKLQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9LRVlf RU5BQkxFX1NPVVJDRTsKLQotCXJldHVybiBwbGFuZV9jdGw7Ci19Ci0KLXUzMiBnbGtfcGxhbmVf Y29sb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Cit2b2lkIHNrbF9zY2FsZXJfZGlzYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq b2xkX2NydGNfc3RhdGUpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShjcnRjX3N0YXRlLT51YXBpLmNydGMtPmRldik7Ci0JdTMyIHBsYW5lX2NvbG9yX2N0 bCA9IDA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJcmV0dXJuIHBsYW5l X2NvbG9yX2N0bDsKLQotCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCi0JCXBsYW5lX2Nv bG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QSVBFX0dBTU1BX0VOQUJMRTsKLQotCWlmIChjcnRjX3N0 YXRlLT5jc2NfZW5hYmxlKQotCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfUElQRV9D U0NfRU5BQkxFOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhvbGRf Y3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwlpbnQgaTsKIAotCXJldHVybiBwbGFuZV9jb2xvcl9j dGw7CisJZm9yIChpID0gMDsgaSA8IGNydGMtPm51bV9zY2FsZXJzOyBpKyspCisJCXNrbF9kZXRh Y2hfc2NhbGVyKGNydGMsIGkpOwogfQogCi11MzIgZ2xrX3BsYW5lX2NvbG9yX2N0bChjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCWNvbnN0IHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit1bnNpZ25lZCBpbnQKK2ludGVsX3BsYW5lX2Zl bmNlX3lfb2Zmc2V0KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp CiB7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJdG9faTkxNShwbGFu ZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0g dG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwotCXUzMiBwbGFuZV9jb2xv cl9jdGwgPSAwOwotCi0JcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX1BMQU5FX0dBTU1B X0RJU0FCTEU7Ci0JcGxhbmVfY29sb3JfY3RsIHw9IGdsa19wbGFuZV9jb2xvcl9jdGxfYWxwaGEo cGxhbmVfc3RhdGUpOworCWludCB4ID0gMCwgeSA9IDA7CiAKLQlpZiAoZmItPmZvcm1hdC0+aXNf eXV2ICYmICFpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZS0+aWQpKSB7Ci0JCXN3aXRj aCAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29kaW5nKSB7Ci0JCWNhc2UgRFJNX0NPTE9SX1lD QkNSX0JUNzA5OgotCQkJcGxhbmVfY29sb3JfY3RsIHw9IFBMQU5FX0NPTE9SX0NTQ19NT0RFX1lV VjcwOV9UT19SR0I3MDk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUk1fQ09MT1JfWUNCQ1JfQlQyMDIw OgotCQkJcGxhbmVfY29sb3JfY3RsIHw9Ci0JCQkJUExBTkVfQ09MT1JfQ1NDX01PREVfWVVWMjAy MF9UT19SR0IyMDIwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwbGFuZV9jb2xvcl9jdGwg fD0KLQkJCQlQTEFORV9DT0xPUl9DU0NfTU9ERV9ZVVY2MDFfVE9fUkdCNjAxOwotCQl9Ci0JCWlm IChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFO R0UpCi0JCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfWVVWX1JBTkdFX0NPUlJFQ1RJ T05fRElTQUJMRTsKLQl9IGVsc2UgaWYgKGZiLT5mb3JtYXQtPmlzX3l1dikgewotCQlwbGFuZV9j b2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfSU5QVVRfQ1NDX0VOQUJMRTsKLQl9CisJaW50ZWxfcGxh bmVfYWRqdXN0X2FsaWduZWRfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDAsCisJCQkJCSAg cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldCwgMCk7CiAKLQlyZXR1cm4gcGxhbmVf Y29sb3JfY3RsOworCXJldHVybiB5OwogfQogCiBzdGF0aWMgaW50CkBAIC00Mzg2LDE1ICszNjMz LDYgQEAgc3RhdGljIGludCBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZShzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBza2xfc2NhbGVyX2Rp c2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQotewot CXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhvbGRfY3J0Y19zdGF0ZS0+ dWFwaS5jcnRjKTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBjcnRjLT5udW1fc2NhbGVy czsgaSsrKQotCQlza2xfZGV0YWNoX3NjYWxlcihjcnRjLCBpKTsKLX0KLQogc3RhdGljIGludCBj bmxfY29lZl90YXAoaW50IGkpCiB7CiAJcmV0dXJuIGkgJSA3OwpAQCAtODIwMCwxNTAgKzc0Mzgs NiBAQCBzdGF0aWMgdm9pZCBza2xfZ2V0X3BmaXRfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQogCQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91c2VycyAmPSB+KDEgPDwg U0tMX0NSVENfSU5ERVgpOwogfQogCi1zdGF0aWMgdm9pZAotc2tsX2dldF9pbml0aWFsX3BsYW5l X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAgc3RydWN0IGludGVsX2lu aXRpYWxfcGxhbmVfY29uZmlnICpwbGFuZV9jb25maWcpCi17Ci0Jc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUp OwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0Jc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKGNydGMtPmJhc2UucHJpbWFyeSk7Ci0JZW51bSBw bGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKLQllbnVtIHBpcGUgcGlwZTsKLQl1MzIgdmFs LCBiYXNlLCBvZmZzZXQsIHN0cmlkZV9tdWx0LCB0aWxpbmcsIGFscGhhOwotCWludCBmb3VyY2Ms IHBpeGVsX2Zvcm1hdDsKLQl1bnNpZ25lZCBpbnQgYWxpZ25lZF9oZWlnaHQ7Ci0Jc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmI7Ci0Jc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYjsK LQotCWlmICghcGxhbmUtPmdldF9od19zdGF0ZShwbGFuZSwgJnBpcGUpKQotCQlyZXR1cm47Ci0K LQlkcm1fV0FSTl9PTihkZXYsIHBpcGUgIT0gY3J0Yy0+cGlwZSk7Ci0KLQlpZiAoY3J0Y19zdGF0 ZS0+Ymlnam9pbmVyKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJV bnN1cHBvcnRlZCBiaWdqb2luZXIgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCBGQlxuIik7Ci0J CXJldHVybjsKLQl9Ci0KLQlpbnRlbF9mYiA9IGt6YWxsb2Moc2l6ZW9mKCppbnRlbF9mYiksIEdG UF9LRVJORUwpOwotCWlmICghaW50ZWxfZmIpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sICJmYWlsZWQgdG8gYWxsb2MgZmJcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZmIgPSAmaW50 ZWxfZmItPmJhc2U7Ci0KLQlmYi0+ZGV2ID0gZGV2OwotCi0JdmFsID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgUExBTkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSk7Ci0KLQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMSkKLQkJcGl4ZWxfZm9ybWF0ID0gdmFsICYgSUNMX1BMQU5FX0NUTF9GT1JN QVRfTUFTSzsKLQllbHNlCi0JCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIFBMQU5FX0NUTF9GT1JNQVRf TUFTSzsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0Uo ZGV2X3ByaXYpKSB7Ci0JCWFscGhhID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwKLQkJCQkgICAg ICBQTEFORV9DT0xPUl9DVEwocGlwZSwgcGxhbmVfaWQpKTsKLQkJYWxwaGEgJj0gUExBTkVfQ09M T1JfQUxQSEFfTUFTSzsKLQl9IGVsc2UgewotCQlhbHBoYSA9IHZhbCAmIFBMQU5FX0NUTF9BTFBI QV9NQVNLOwotCX0KLQotCWZvdXJjYyA9IHNrbF9mb3JtYXRfdG9fZm91cmNjKHBpeGVsX2Zvcm1h dCwKLQkJCQkgICAgICB2YWwgJiBQTEFORV9DVExfT1JERVJfUkdCWCwgYWxwaGEpOwotCWZiLT5m b3JtYXQgPSBkcm1fZm9ybWF0X2luZm8oZm91cmNjKTsKLQotCXRpbGluZyA9IHZhbCAmIFBMQU5F X0NUTF9USUxFRF9NQVNLOwotCXN3aXRjaCAodGlsaW5nKSB7Ci0JY2FzZSBQTEFORV9DVExfVElM RURfTElORUFSOgotCQlmYi0+bW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9MSU5FQVI7Ci0JCWJy ZWFrOwotCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1g6Ci0JCXBsYW5lX2NvbmZpZy0+dGlsaW5nID0g STkxNV9USUxJTkdfWDsKLQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7 Ci0JCWJyZWFrOwotCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1k6Ci0JCXBsYW5lX2NvbmZpZy0+dGls aW5nID0gSTkxNV9USUxJTkdfWTsKLQkJaWYgKHZhbCAmIFBMQU5FX0NUTF9SRU5ERVJfREVDT01Q UkVTU0lPTl9FTkFCTEUpCi0JCQlmYi0+bW9kaWZpZXIgPSBJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDEyID8KLQkJCQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9SQ19DQ1MgOgotCQkJCUk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzsKLQkJZWxzZSBpZiAodmFsICYgUExBTkVfQ1RMX01F RElBX0RFQ09NUFJFU1NJT05fRU5BQkxFKQotCQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOwotCQllbHNlCi0JCQlmYi0+bW9kaWZpZXIgPSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9DVExfVElMRURfWUY6 Ci0JCWlmICh2YWwgJiBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFKQotCQkJ ZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzsKLQkJZWxzZQotCQkJ ZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOwotCQlicmVhazsKLQlkZWZh dWx0OgotCQlNSVNTSU5HX0NBU0UodGlsaW5nKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKgot CSAqIERSTV9NT0RFX1JPVEFURV8gaXMgY291bnRlciBjbG9ja3dpc2UgdG8gc3RheSBjb21wYXRp YmxlIHdpdGggWHJhbmRyCi0JICogd2hpbGUgaTkxNSBIVyByb3RhdGlvbiBpcyBjbG9ja3dpc2Us IHRoYXRzIHdoeSB0aGlzIHN3YXBwaW5nLgotCSAqLwotCXN3aXRjaCAodmFsICYgUExBTkVfQ1RM X1JPVEFURV9NQVNLKSB7Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzA6Ci0JCXBsYW5lX2NvbmZp Zy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9D VExfUk9UQVRFXzkwOgotCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRF XzI3MDsKLQkJYnJlYWs7Ci0JY2FzZSBQTEFORV9DVExfUk9UQVRFXzE4MDoKLQkJcGxhbmVfY29u ZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8xODA7Ci0JCWJyZWFrOwotCWNhc2UgUExB TkVfQ1RMX1JPVEFURV8yNzA6Ci0JCXBsYW5lX2NvbmZpZy0+cm90YXRpb24gPSBEUk1fTU9ERV9S T1RBVEVfOTA7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEw ICYmCi0JICAgIHZhbCAmIFBMQU5FX0NUTF9GTElQX0hPUklaT05UQUwpCi0JCXBsYW5lX2NvbmZp Zy0+cm90YXRpb24gfD0gRFJNX01PREVfUkVGTEVDVF9YOwotCi0JLyogOTAvMjcwIGRlZ3JlZSBy b3RhdGlvbiB3b3VsZCByZXF1aXJlIGV4dHJhIHdvcmsgKi8KLQlpZiAoZHJtX3JvdGF0aW9uXzkw X29yXzI3MChwbGFuZV9jb25maWctPnJvdGF0aW9uKSkKLQkJZ290byBlcnJvcjsKLQotCWJhc2Ug PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSkgJiAw eGZmZmZmMDAwOwotCXBsYW5lX2NvbmZpZy0+YmFzZSA9IGJhc2U7Ci0KLQlvZmZzZXQgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9PRkZTRVQocGlwZSwgcGxhbmVfaWQpKTsKLQotCXZh bCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQpKTsK LQlmYi0+aGVpZ2h0ID0gKCh2YWwgPj4gMTYpICYgMHhmZmZmKSArIDE7Ci0JZmItPndpZHRoID0g KCh2YWwgPj4gMCkgJiAweGZmZmYpICsgMTsKLQotCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3By aXYsIFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCkpOwotCXN0cmlkZV9tdWx0ID0gc2tsX3Bs YW5lX3N0cmlkZV9tdWx0KGZiLCAwLCBEUk1fTU9ERV9ST1RBVEVfMCk7Ci0JZmItPnBpdGNoZXNb MF0gPSAodmFsICYgMHgzZmYpICogc3RyaWRlX211bHQ7Ci0KLQlhbGlnbmVkX2hlaWdodCA9IGlu dGVsX2ZiX2FsaWduX2hlaWdodChmYiwgMCwgZmItPmhlaWdodCk7Ci0KLQlwbGFuZV9jb25maWct PnNpemUgPSBmYi0+cGl0Y2hlc1swXSAqIGFsaWduZWRfaGVpZ2h0OwotCi0JZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sCi0JCSAgICAiJXMvJXMgd2l0aCBmYjogc2l6ZT0lZHglZEAlZCwgb2Zm c2V0PSV4LCBwaXRjaCAlZCwgc2l6ZSAweCV4XG4iLAotCQkgICAgY3J0Yy0+YmFzZS5uYW1lLCBw bGFuZS0+YmFzZS5uYW1lLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCi0JCSAgICBmYi0+Zm9ybWF0 LT5jcHBbMF0gKiA4LCBiYXNlLCBmYi0+cGl0Y2hlc1swXSwKLQkJICAgIHBsYW5lX2NvbmZpZy0+ c2l6ZSk7Ci0KLQlwbGFuZV9jb25maWctPmZiID0gaW50ZWxfZmI7Ci0JcmV0dXJuOwotCi1lcnJv cjoKLQlrZnJlZShpbnRlbF9mYik7Ci19Ci0KIHN0YXRpYyB2b2lkIGlsa19nZXRfcGZpdF9jb25m aWcoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7CiAJc3RydWN0IGludGVs X2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCmluZGV4IDYwNGExODNm ZWY3ZC4uMzc5ZGQzZTA5ZjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Rpc3BsYXkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXkuaApAQCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZTsK IHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQ7CiBzdHJ1Y3QgaW50ZWxfZHA7CiBzdHJ1Y3QgaW50 ZWxfZW5jb2RlcjsKK3N0cnVjdCBpbnRlbF9pbml0aWFsX3BsYW5lX2NvbmZpZzsKIHN0cnVjdCBp bnRlbF9sb2FkX2RldGVjdF9waXBlOwogc3RydWN0IGludGVsX3BsYW5lOwogc3RydWN0IGludGVs X3BsYW5lX3N0YXRlOwpAQCAtNTA4LDcgKzUwOSw2IEBAIHZvaWQgaW50ZWxfbGlua19jb21wdXRl X21fbih1MTYgYnBwLCBpbnQgbmxhbmVzLAogCQkJICAgIHN0cnVjdCBpbnRlbF9saW5rX21fbiAq bV9uLAogCQkJICAgIGJvb2wgY29uc3RhbnRfbiwgYm9vbCBmZWNfZW5hYmxlKTsKIGJvb2wgaXNf Y2NzX21vZGlmaWVyKHU2NCBtb2RpZmllcik7Ci1pbnQgaW50ZWxfbWFpbl90b19hdXhfcGxhbmUo Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBtYWluX3BsYW5lKTsKIHZvaWQg bHB0X2Rpc2FibGVfY2xrb3V0X2RwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 CiB1MzIgaW50ZWxfcGxhbmVfZmJfbWF4X3N0cmlkZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJCQkgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIpOwpAQCAt NjIxLDE4ICs2MjEsNyBAQCB1MzIgc2tsX3NjYWxlcl9nZXRfZmlsdGVyX3NlbGVjdChlbnVtIGRy bV9zY2FsaW5nX2ZpbHRlciBmaWx0ZXIsIGludCBzZXQpOwogdm9pZCBza2xfc2NhbGVyX3NldHVw X2ZpbHRlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBl LAogCQkJICAgICBpbnQgaWQsIGludCBzZXQsIGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRl cik7CiB2b2lkIGlsa19wZml0X2Rpc2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg Km9sZF9jcnRjX3N0YXRlKTsKLXUzMiBnbGtfcGxhbmVfY29sb3JfY3RsKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSk7Ci11MzIgZ2xrX3BsYW5lX2NvbG9yX2N0bF9jcnRjKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKLXUzMiBza2xfcGxhbmVfY3Rs KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgIGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwotdTMyIHNrbF9wbGFuZV9jdGxf Y3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Ci11MzIgc2ts X3BsYW5lX3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl LAotCQkgICAgIGludCBwbGFuZSk7Ci1pbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Ci1pbnQgc2tsX2NhbGNfbWFpbl9zdXJm YWNlX29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAot CQkJCSBpbnQgKngsIGludCAqeSwgdTMyICpvZmZzZXQpOwotaW50IHNrbF9mb3JtYXRfdG9fZm91 cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhhKTsKKwogaW50IGJkd19n ZXRfcGlwZW1pc2NfYnBwKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKIHVuc2lnbmVkIGludCBp bnRlbF9wbGFuZV9mZW5jZV95X29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKTsKIApAQCAtNjU1LDYgKzY0NCwxOCBAQCBzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqCiBpbnRlbF9nZXRfY3J0Y19uZXdfZW5jb2Rlcihjb25zdCBzdHJ1Y3QgaW50ZWxfYXRvbWlj X3N0YXRlICpzdGF0ZSwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlKTsKIAordW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgaW50IGNvbG9yX3BsYW5lKTsKK3ZvaWQgaW50 ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKGludCAqaHN1YiwgaW50ICp2c3ViLAorCQkJCSAg ICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgICAgaW50IGNvbG9yX3Bs YW5lKTsKK3UzMiBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQg KnksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJ CQkgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkJICAgICAgdTMyIG9sZF9vZmZzZXQsIHUzMiBu ZXdfb2Zmc2V0KTsKK3Vuc2lnbmVkIGludCBpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpOwordW5zaWduZWQgaW50 IGludGVsX3RpbGVfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQg Y29sb3JfcGxhbmUpOworCiAvKiBtb2Rlc2V0dGluZyAqLwogdm9pZCBpbnRlbF9tb2Rlc2V0X2lu aXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogaW50IGludGVsX21vZGVzZXRf aW5pdF9ub2lycShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCmluZGV4IGY5NTFh MDlkNmIxMi4uN2FlZjA2MTZhMDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg PGRybS9kcm1fZHBfbXN0X2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgog I2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2Mu aD4KICNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1f cmVjdC5oPgogI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+CkBAIC0xODYxLDQgKzE4NjIsMjQg QEAgc3RhdGljIGlubGluZSB1MzIgaW50ZWxfZmRpX2xpbmtfZnJlcShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCiAJCXJldHVybiBkZXZfcHJpdi0+ZmRpX3BsbF9mcmVxOwogfQog CitzdGF0aWMgaW5saW5lIGJvb2wgaXNfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQgcGxhbmUpCit7CisJaWYgKCFpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlm aWVyKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHBsYW5lID49IGZiLT5mb3JtYXQtPm51 bV9wbGFuZXMgLyAyOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfZ2VuMTJfY2NzX21vZGlm aWVyKHU2NCBtb2RpZmllcikKK3sKKwlyZXR1cm4gbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9E X1lfVElMRURfR0VOMTJfUkNfQ0NTIHx8CisJICAgICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKKworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNf Z2VuMTJfY2NzX3BsYW5lKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxh bmUpCit7CisJcmV0dXJuIGlzX2dlbjEyX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpICYmIGlz X2Njc19wbGFuZShmYiwgcGxhbmUpOworfQorCiAjZW5kaWYgLyogIF9fSU5URUxfRElTUExBWV9U WVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZHBfbXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX21zdC5j CmluZGV4IGY3NmUyYzJhODNiOC4uOGU0YjY2NDc3NTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX21zdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJp bnRlbF9kcF9tc3QuaCIKICNpbmNsdWRlICJpbnRlbF9kcGlvX3BoeS5oIgogI2luY2x1ZGUgImlu dGVsX2hkY3AuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAKIHN0YXRpYyBp bnQgaW50ZWxfZHBfbXN0X2NvbXB1dGVfbGlua19jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXIsCiAJCQkJCSAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jCmluZGV4IGMyNGFlNjk0MjZj Zi4uMGQwYjBkM2M1MmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX3Bzci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNy LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJpbnRlbF9wc3IuaCIKICNpbmNsdWRlICJp bnRlbF9zcHJpdGUuaCIKICNpbmNsdWRlICJpbnRlbF9oZG1pLmgiCisjaW5jbHVkZSAic2tsX3Vu aXZlcnNhbF9wbGFuZS5oIgogCiAvKioKICAqIERPQzogUGFuZWwgU2VsZiBSZWZyZXNoIChQU1Iv U1JEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJp dGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKaW5kZXgg Y2YzNTg5ZmQwZGRiLi44M2U3MzMxZjc5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9zcHJpdGUuYwpAQCAtMzY1LDIxMiArMzY1LDcgQEAgaW50IGludGVsX3BsYW5l X2NoZWNrX3NyY19jb29yZGluYXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTggaWNsX252MTJfeV9wbGFuZV9tYXNrKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQotewotCWlmIChJU19ST0NLRVRMQUtFKGk5MTUp KQotCQlyZXR1cm4gQklUKFBMQU5FX1NQUklURTIpIHwgQklUKFBMQU5FX1NQUklURTMpOwotCWVs c2UKLQkJcmV0dXJuIEJJVChQTEFORV9TUFJJVEU0KSB8IEJJVChQTEFORV9TUFJJVEU1KTsKLX0K LQotYm9vbCBpY2xfaXNfbnYxMl95X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKLQkJCSBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQotewotCXJldHVybiBJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDExICYmCi0JCWljbF9udjEyX3lfcGxhbmVfbWFzayhkZXZfcHJpdikgJiBC SVQocGxhbmVfaWQpOwotfQotCi1ib29sIGljbF9pc19oZHJfcGxhbmUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQotewotCXJldHVybiBJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDExICYmCi0JCWljbF9oZHJfcGxhbmVfbWFzaygpICYgQklU KHBsYW5lX2lkKTsKLX0KLQotc3RhdGljIHZvaWQKLXNrbF9wbGFuZV9yYXRpbyhjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKLQkJdW5zaWduZWQgaW50ICpudW0sIHVuc2lnbmVkIGlu dCAqZGVuKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo cGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0KLQlpZiAoZmItPmZvcm1hdC0+Y3BwWzBd ID09IDgpIHsKLQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFL RShkZXZfcHJpdikpIHsKLQkJCSpudW0gPSAxMDsKLQkJCSpkZW4gPSA4OwotCQl9IGVsc2Ugewot CQkJKm51bSA9IDk7Ci0JCQkqZGVuID0gODsKLQkJfQotCX0gZWxzZSB7Ci0JCSpudW0gPSAxOwot CQkqZGVuID0gMTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2tsX3BsYW5lX21pbl9jZGNsayhjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRl dik7Ci0JdW5zaWduZWQgaW50IG51bSwgZGVuOwotCXVuc2lnbmVkIGludCBwaXhlbF9yYXRlID0g aW50ZWxfcGxhbmVfcGl4ZWxfcmF0ZShjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlza2xf cGxhbmVfcmF0aW8oY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsICZudW0sICZkZW4pOwotCi0JLyog dHdvIHBpeGVscyBwZXIgY2xvY2sgb24gZ2xrKyAqLwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQlkZW4gKj0gMjsKLQotCXJldHVy biBESVZfUk9VTkRfVVAocGl4ZWxfcmF0ZSAqIG51bSwgZGVuKTsKLX0KLQotc3RhdGljIGludCBz a2xfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJ ICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24p Ci17Ci0JaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtjb2xvcl9wbGFuZV07Ci0KLQlzd2l0Y2gg KGZiLT5tb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgotCWNhc2UgSTkx NV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCS8qCi0JCSAqIFZhbGlkYXRlZCBsaW1pdCBpcyA0aywg YnV0IGhhcyA1ayBzaG91bGQKLQkJICogd29yayBhcGFydCBmcm9tIHRoZSBmb2xsb3dpbmcgZmVh dHVyZXM6Ci0JCSAqIC0gWXRpbGUgKGFscmVhZHkgbGltaXRlZCB0byA0aykKLQkJICogLSBGUDE2 IChhbHJlYWR5IGxpbWl0ZWQgdG8gNGspCi0JCSAqIC0gcmVuZGVyIGNvbXByZXNzaW9uIChhbHJl YWR5IGxpbWl0ZWQgdG8gNGspCi0JCSAqIC0gS1ZNUiBzcHJpdGUgYW5kIGN1cnNvciAoZG9uJ3Qg Y2FyZSkKLQkJICogLSBob3Jpem9udGFsIHBhbm5pbmcgKFRPRE8gdmVyaWZ5IHRoaXMpCi0JCSAq IC0gcGlwZSBhbmQgcGxhbmUgc2NhbGluZyAoVE9ETyB2ZXJpZnkgdGhpcykKLQkJICovCi0JCWlm IChjcHAgPT0gOCkKLQkJCXJldHVybiA0MDk2OwotCQllbHNlCi0JCQlyZXR1cm4gNTEyMDsKLQlj YXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1M6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9HRU4xMl9NQ19DQ1M6 Ci0JCS8qIEZJWE1FIEFVWCBwbGFuZT8gKi8KLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE OgotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgotCQlpZiAoY3BwID09IDgpCi0JCQly ZXR1cm4gMjA0ODsKLQkJZWxzZQotCQkJcmV0dXJuIDQwOTY7Ci0JZGVmYXVsdDoKLQkJTUlTU0lO R19DQVNFKGZiLT5tb2RpZmllcik7Ci0JCXJldHVybiAyMDQ4OwotCX0KLX0KLQotc3RhdGljIGlu dCBnbGtfcGxhbmVfbWF4X3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAot CQkJICAgICAgIGludCBjb2xvcl9wbGFuZSwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRp b24pCi17Ci0JaW50IGNwcCA9IGZiLT5mb3JtYXQtPmNwcFtjb2xvcl9wbGFuZV07Ci0KLQlzd2l0 Y2ggKGZiLT5tb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgotCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JCWlmIChjcHAgPT0gOCkKLQkJCXJldHVybiA0MDk2 OwotCQllbHNlCi0JCQlyZXR1cm4gNTEyMDsKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0NDUzoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Ci0JCS8qIEZJWE1FIEFV WCBwbGFuZT8gKi8KLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEOgotCQlpZiAoY3BwID09IDgpCi0JCQlyZXR1cm4gMjA0ODsKLQkJ ZWxzZQotCQkJcmV0dXJuIDUxMjA7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGZiLT5tb2Rp Zmllcik7Ci0JCXJldHVybiAyMDQ4OwotCX0KLX0KLQotc3RhdGljIGludCBpY2xfcGxhbmVfbWlu X3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJICAgICAgIGludCBj b2xvcl9wbGFuZSwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17Ci0JLyogV2Ff MTQwMTEyNjQ2NTcsIFdhXzE0MDExMDUwNTYzOiBnZW4xMSsgKi8KLQlzd2l0Y2ggKGZiLT5mb3Jt YXQtPmZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9DODoKLQkJcmV0dXJuIDE4OwotCWNhc2Ug RFJNX0ZPUk1BVF9SR0I1NjU6Ci0JCXJldHVybiAxMDsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4 ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4 ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAx MDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfQVJH QjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1B VF9YVllVMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWTIxMjoKLQljYXNlIERSTV9GT1JNQVRf WTIxNjoKLQkJcmV0dXJuIDY7Ci0JY2FzZSBEUk1fRk9STUFUX05WMTI6Ci0JCXJldHVybiAyMDsK LQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQljYXNlIERSTV9GT1JNQVRfUDAxMjoKLQljYXNlIERS TV9GT1JNQVRfUDAxNjoKLQkJcmV0dXJuIDEyOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2 MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJN X0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoK LQkJcmV0dXJuIDQ7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDE7Ci0JfQotfQotCi1zdGF0aWMgaW50 IGljbF9wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0J CQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAotCQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlv bikKLXsKLQlyZXR1cm4gNTEyMDsKLX0KLQotc3RhdGljIGludCBza2xfcGxhbmVfbWF4X2hlaWdo dChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQlpbnQgY29sb3JfcGxhbmUs Ci0JCQkJdW5zaWduZWQgaW50IHJvdGF0aW9uKQotewotCXJldHVybiA0MDk2OwotfQotCi1zdGF0 aWMgaW50IGljbF9wbGFuZV9tYXhfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiLAotCQkJCWludCBjb2xvcl9wbGFuZSwKLQkJCQl1bnNpZ25lZCBpbnQgcm90YXRpb24pCi17 Ci0JcmV0dXJuIDQzMjA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXNrbF9wbGFuZV9tYXhf c3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCSAgICAgdTMyIHBpeGVsX2Zvcm1h dCwgdTY0IG1vZGlmaWVyLAotCQkgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsKLQljb25z dCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvID0gZHJtX2Zvcm1hdF9pbmZvKHBpeGVsX2Zv cm1hdCk7Ci0JaW50IGNwcCA9IGluZm8tPmNwcFswXTsKLQotCS8qCi0JICogIlRoZSBzdHJpZGUg aW4gYnl0ZXMgbXVzdCBub3QgZXhjZWVkIHRoZQotCSAqIG9mIHRoZSBzaXplIG9mIDhLIHBpeGVs cyBhbmQgMzJLIGJ5dGVzLiIKLQkgKi8KLQlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3Rh dGlvbikpCi0JCXJldHVybiBtaW4oODE5MiwgMzI3NjggLyBjcHApOwotCWVsc2UKLQkJcmV0dXJu IG1pbig4MTkyICogY3BwLCAzMjc2OCk7Ci19Ci0KLXN0YXRpYyB2b2lkCit2b2lkCiBza2xfcHJv Z3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKIAkJICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCkBAIC02MzIsMzMyICs0MjcsNiBAQCBza2xfcHJvZ3Jh bV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKIAkJCSAgKGNydGNfdyA8PCAxNikg fCBjcnRjX2gpOwogfQogCi0vKiBQcmVvZmZzZXQgdmFsdWVzIGZvciBZVVYgdG8gUkdCIENvbnZl cnNpb24gKi8KLSNkZWZpbmUgUFJFT0ZGX1lVVl9UT19SR0JfSEkJCTB4MTgwMAotI2RlZmluZSBQ UkVPRkZfWVVWX1RPX1JHQl9NRQkJMHgxRjAwCi0jZGVmaW5lIFBSRU9GRl9ZVVZfVE9fUkdCX0xP CQkweDE4MDAKLQotI2RlZmluZSAgUk9GRih4KSAgICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwg MTYpCi0jZGVmaW5lICBHT0ZGKHgpICAgICAgICAgICgoKHgpICYgMHhmZmZmKSA8PCAwKQotI2Rl ZmluZSAgQk9GRih4KSAgICAgICAgICAoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCi0KLXN0YXRpYyB2 b2lkCi1pY2xfcHJvZ3JhbV9pbnB1dF9jc2Moc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJ ICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwot CWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9 IHBsYW5lLT5pZDsKLQotCXN0YXRpYyBjb25zdCB1MTYgaW5wdXRfY3NjX21hdHJpeFtdWzldID0g ewotCQkvKgotCQkgKiBCVC42MDEgZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgot CQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKLQkJICogWzEuMDAwLCAwLjAwMCwgMS4zNzEs Ci0JCSAqICAxLjAwMCwgLTAuMzM2LCAtMC42OTgsCi0JCSAqICAxLjAwMCwgMS43MzIsIDAuMDAw MF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2MDFdID0gewotCQkJMHg3QUY4LCAweDc4 MDAsIDB4MCwKLQkJCTB4OEIyOCwgMHg3ODAwLCAweDlBQzAsCi0JCQkweDAsIDB4NzgwMCwgMHg3 REQ4LAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkgZnVsbCByYW5nZSBZQ2JDciAtPiBmdWxsIHJh bmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKLQkJICogWzEuMDAwLCAwLjAw MCwgMS41NzQsCi0JCSAqICAxLjAwMCwgLTAuMTg3LCAtMC40NjgsCi0JCSAqICAxLjAwMCwgMS44 NTUsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ3MDldID0gewotCQkJMHg3 Qzk4LCAweDc4MDAsIDB4MCwKLQkJCTB4OUVGOCwgMHg3ODAwLCAweEFDMDAsCi0JCQkweDAsIDB4 NzgwMCwgIDB4N0VEOCwKLQkJfSwKLQkJLyoKLQkJICogQlQuMjAyMCBmdWxsIHJhbmdlIFlDYkNy IC0+IGZ1bGwgcmFuZ2UgUkdCCi0JCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgotCQkgKiBb MS4wMDAsIDAuMDAwLCAxLjQ3NCwKLQkJICogIDEuMDAwLCAtMC4xNjQ1LCAtMC41NzEzLAotCQkg KiAgMS4wMDAsIDEuODgxNCwgMC4wMDAwXQotCQkgKi8KLQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIw MjBdID0gewotCQkJMHg3QkM4LCAweDc4MDAsIDB4MCwKLQkJCTB4ODkyOCwgMHg3ODAwLCAweEFB ODgsCi0JCQkweDAsIDB4NzgwMCwgMHg3RjEwLAotCQl9LAotCX07Ci0KLQkvKiBNYXRyaXggZm9y IExpbWl0ZWQgUmFuZ2UgdG8gRnVsbCBSYW5nZSBDb252ZXJzaW9uICovCi0Jc3RhdGljIGNvbnN0 IHUxNiBpbnB1dF9jc2NfbWF0cml4X2xyW11bOV0gPSB7Ci0JCS8qCi0JCSAqIEJULjYwMSBMaW10 ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKLQkJICogVGhlIG1hdHJpeCByZXF1aXJl ZCBpcyA6Ci0JCSAqIFsxLjE2NDM4NCwgMC4wMDAsIDEuNTk2MDI3LAotCQkgKiAgMS4xNjQzODQs IC0wLjM5MTc1LCAtMC44MTI4MTMsCi0JCSAqICAxLjE2NDM4NCwgMi4wMTcyMzIsIDAuMDAwMF0K LQkJICovCi0JCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2MDFdID0gewotCQkJMHg3Q0M4LCAweDc5NTAs IDB4MCwKLQkJCTB4OEQwMCwgMHg3OTUwLCAweDlDODgsCi0JCQkweDAsIDB4Nzk1MCwgMHg2ODEw LAotCQl9LAotCQkvKgotCQkgKiBCVC43MDkgTGltaXRlZCByYW5nZSBZQ2JDciAtPiBmdWxsIHJh bmdlIFJHQgotCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKLQkJICogWzEuMTY0Mzg0LCAw LjAwMCwgMS43OTI3NDEsCi0JCSAqICAxLjE2NDM4NCwgLTAuMjEzMjQ5LCAtMC41MzI5MDksCi0J CSAqICAxLjE2NDM4NCwgMi4xMTI0MDIsIDAuMDAwMF0KLQkJICovCi0JCVtEUk1fQ09MT1JfWUNC Q1JfQlQ3MDldID0gewotCQkJMHg3RTU4LCAweDc5NTAsIDB4MCwKLQkJCTB4ODg4OCwgMHg3OTUw LCAweEFEQTgsCi0JCQkweDAsIDB4Nzk1MCwgIDB4Njg3MCwKLQkJfSwKLQkJLyoKLQkJICogQlQu MjAyMCBMaW1pdGVkIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCi0JCSAqIFRoZSBtYXRy aXggcmVxdWlyZWQgaXMgOgotCQkgKiBbMS4xNjQsIDAuMDAwLCAxLjY3OCwKLQkJICogIDEuMTY0 LCAtMC4xODczLCAtMC42NTA0LAotCQkgKiAgMS4xNjQsIDIuMTQxNywgMC4wMDAwXQotCQkgKi8K LQkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0gewotCQkJMHg3RDcwLCAweDc5NTAsIDB4MCwK LQkJCTB4OEE2OCwgMHg3OTUwLCAweEFDMDAsCi0JCQkweDAsIDB4Nzk1MCwgMHg2ODkwLAotCQl9 LAotCX07Ci0JY29uc3QgdTE2ICpjc2M7Ci0KLQlpZiAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX3Jh bmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKQotCQljc2MgPSBpbnB1dF9jc2NfbWF0 cml4W3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZ107Ci0JZWxzZQotCQljc2MgPSBpbnB1 dF9jc2NfbWF0cml4X2xyW3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZ107Ci0KLQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5l X2lkLCAwKSwKLQkJCSAgUk9GRihjc2NbMF0pIHwgR09GRihjc2NbMV0pKTsKLQlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAx KSwKLQkJCSAgQk9GRihjc2NbMl0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExB TkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAyKSwKLQkJCSAgUk9GRihjc2NbM10p IHwgR09GRihjc2NbNF0pKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5Q VVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAzKSwKLQkJCSAgQk9GRihjc2NbNV0pKTsKLQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBs YW5lX2lkLCA0KSwKLQkJCSAgUk9GRihjc2NbNl0pIHwgR09GRihjc2NbN10pKTsKLQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lk LCA1KSwKLQkJCSAgQk9GRihjc2NbOF0pKTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5lX2lkLCAwKSwKLQkJCSAgUFJFT0ZG X1lVVl9UT19SR0JfSEkpOwotCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2UgPT0gRFJN X0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAot CQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMSksCi0JCQkJICAw KTsKLQllbHNlCi0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJCSAgUExBTkVfSU5Q VVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMSksCi0JCQkJICBQUkVPRkZfWVVWX1RPX1JH Ql9NRSk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0lOUFVUX0NTQ19QUkVP RkYocGlwZSwgcGxhbmVfaWQsIDIpLAotCQkJICBQUkVPRkZfWVVWX1RPX1JHQl9MTyk7Ci0JaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCi0JCQkgIFBMQU5FX0lOUFVUX0NTQ19QT1NUT0ZGKHBp cGUsIHBsYW5lX2lkLCAwKSwgMHgwKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwKLQkJ CSAgUExBTkVfSU5QVVRfQ1NDX1BPU1RPRkYocGlwZSwgcGxhbmVfaWQsIDEpLCAweDApOwotCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAotCQkJICBQTEFORV9JTlBVVF9DU0NfUE9TVE9GRihw aXBlLCBwbGFuZV9pZCwgMiksIDB4MCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1za2xfcGxhbmVfYXN5 bmNfZmxpcChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgICAgIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxh Z3M7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKLQllbnVtIHBpcGUgcGlw ZSA9IHBsYW5lLT5waXBlOwotCXUzMiBzdXJmX2FkZHIgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbMF0ub2Zmc2V0OwotCXUzMiBwbGFuZV9jdGwgPSBwbGFuZV9zdGF0ZS0+Y3RsOwotCi0JcGxh bmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKLQotCXNwaW5fbG9ja19p cnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLQotCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpLCBwbGFuZV9jdGwpOwot CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwK LQkJCSAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgc3VyZl9hZGRyKTsK LQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxh Z3MpOwotfQotCi1zdGF0aWMgdm9pZAotc2tsX3Byb2dyYW1fcGxhbmUoc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSwKLQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKLQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkg IGludCBjb2xvcl9wbGFuZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBs YW5lLT5pZDsKLQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCWNvbnN0IHN0cnVjdCBk cm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7Ci0JdTMy IHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0ub2Zmc2V0 OwotCXUzMiBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFu ZSk7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcu ZmI7Ci0JaW50IGF1eF9wbGFuZSA9IGludGVsX21haW5fdG9fYXV4X3BsYW5lKGZiLCBjb2xvcl9w bGFuZSk7Ci0JaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKLQlpbnQgY3J0 Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LnkxOwotCXUzMiB4ID0gcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lW2NvbG9yX3BsYW5lXS54OwotCXUzMiB5ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2NvbG9yX3BsYW5lXS55OwotCXUzMiBzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCXUzMiBzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxh bmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQl1OCBhbHBoYSA9IHBsYW5lX3N0YXRlLT5ody5h bHBoYSA+PiA4OwotCXUzMiBwbGFuZV9jb2xvcl9jdGwgPSAwLCBhdXhfZGlzdCA9IDA7Ci0JdW5z aWduZWQgbG9uZyBpcnFmbGFnczsKLQl1MzIga2V5bXNrLCBrZXltYXg7Ci0JdTMyIHBsYW5lX2N0 bCA9IHBsYW5lX3N0YXRlLT5jdGw7Ci0KLQlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9jcnRj KGNydGNfc3RhdGUpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VN SU5JTEFLRShkZXZfcHJpdikpCi0JCXBsYW5lX2NvbG9yX2N0bCA9IHBsYW5lX3N0YXRlLT5jb2xv cl9jdGwgfAotCQkJZ2xrX3BsYW5lX2NvbG9yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwotCi0JLyog U2l6ZXMgYXJlIDAgYmFzZWQgKi8KLQlzcmNfdy0tOwotCXNyY19oLS07Ci0KLQlrZXltYXggPSAo a2V5LT5tYXhfdmFsdWUgJiAweGZmZmZmZikgfCBQTEFORV9LRVlNQVhfQUxQSEEoYWxwaGEpOwot Ci0Ja2V5bXNrID0ga2V5LT5jaGFubmVsX21hc2sgJiAweDdmZmZmZmY7Ci0JaWYgKGFscGhhIDwg MHhmZikKLQkJa2V5bXNrIHw9IFBMQU5FX0tFWU1TS19BTFBIQV9FTkFCTEU7Ci0KLQkvKiBUaGUg c2NhbGVyIHdpbGwgaGFuZGxlIHRoZSBvdXRwdXQgcG9zaXRpb24gKi8KLQlpZiAocGxhbmVfc3Rh dGUtPnNjYWxlcl9pZCA+PSAwKSB7Ci0JCWNydGNfeCA9IDA7Ci0JCWNydGNfeSA9IDA7Ci0JfQot Ci0JaWYgKGF1eF9wbGFuZSkgewotCQlhdXhfZGlzdCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFu ZVthdXhfcGxhbmVdLm9mZnNldCAtIHN1cmZfYWRkcjsKLQotCQlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA8IDEyKQotCQkJYXV4X2Rpc3QgfD0gc2tsX3BsYW5lX3N0cmlkZShwbGFuZV9zdGF0ZSwg YXV4X3BsYW5lKTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrLCBpcnFmbGFncyk7Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU1RS SURFKHBpcGUsIHBsYW5lX2lkKSwgc3RyaWRlKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgUExBTkVfUE9TKHBpcGUsIHBsYW5lX2lkKSwKLQkJCSAgKGNydGNfeSA8PCAxNikgfCBjcnRj X3gpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TSVpFKHBpcGUsIHBsYW5l X2lkKSwKLQkJCSAgKHNyY19oIDw8IDE2KSB8IHNyY193KTsKLQotCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBQTEFORV9BVVhfRElTVChwaXBlLCBwbGFuZV9pZCksIGF1eF9kaXN0KTsKLQot CWlmIChpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZV9pZCkpCi0JCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBQTEFORV9DVVNfQ1RMKHBpcGUsIHBsYW5lX2lkKSwKLQkJCQkgIHBs YW5lX3N0YXRlLT5jdXNfY3RsKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8 IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwg UExBTkVfQ09MT1JfQ1RMKHBpcGUsIHBsYW5lX2lkKSwKLQkJCQkgIHBsYW5lX2NvbG9yX2N0bCk7 Ci0KLQlpZiAoZmItPmZvcm1hdC0+aXNfeXV2ICYmIGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYs IHBsYW5lX2lkKSkKLQkJaWNsX3Byb2dyYW1faW5wdXRfY3NjKHBsYW5lLCBjcnRjX3N0YXRlLCBw bGFuZV9zdGF0ZSk7Ci0KLQlza2xfd3JpdGVfcGxhbmVfd20ocGxhbmUsIGNydGNfc3RhdGUpOwot Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0tFWVZBTChwaXBlLCBwbGFuZV9p ZCksCi0JCQkgIGtleS0+bWluX3ZhbHVlKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwg UExBTkVfS0VZTVNLKHBpcGUsIHBsYW5lX2lkKSwga2V5bXNrKTsKLQlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfS0VZTUFYKHBpcGUsIHBsYW5lX2lkKSwga2V5bWF4KTsKLQotCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLAot CQkJICAoeSA8PCAxNikgfCB4KTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEpCi0J CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5l X2lkKSwKLQkJCQkgIChwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueSA8PCAxNikgfCBwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueCk7Ci0KLQlpZiAoIWRybV9hdG9taWNfY3J0Y19uZWVk c19tb2Rlc2V0KCZjcnRjX3N0YXRlLT51YXBpKSkKLQkJaW50ZWxfcHNyMl9wcm9ncmFtX3BsYW5l X3NlbF9mZXRjaChwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIGNvbG9yX3BsYW5lKTsK LQotCS8qCi0JICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3 YXMgcHJldmlvdXNseQotCSAqIGRpc2FibGVkLiBUcnkgdG8gbWFrZSB0aGUgcGxhbmUgZW5hYmxl IGF0b21pYyBieSB3cml0aW5nCi0JICogdGhlIGNvbnRyb2wgcmVnaXN0ZXIganVzdCBiZWZvcmUg dGhlIHN1cmZhY2UgcmVnaXN0ZXIuCi0JICovCi0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCksIHBsYW5lX2N0bCk7Ci0JaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLAotCQkJICBpbnRlbF9wbGFu ZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzdXJmX2FkZHIpOwotCi0JaWYgKHBsYW5lX3N0 YXRlLT5zY2FsZXJfaWQgPj0gMCkKLQkJc2tsX3Byb2dyYW1fc2NhbGVyKHBsYW5lLCBjcnRjX3N0 YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXNrbF91cGRhdGVfcGxh bmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAotCQkgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKLXsKLQlpbnQgY29sb3JfcGxhbmUgPSAwOwotCi0JaWYgKHBsYW5lX3N0YXRl LT5wbGFuYXJfbGlua2VkX3BsYW5lICYmICFwbGFuZV9zdGF0ZS0+cGxhbmFyX3NsYXZlKQotCQkv KiBQcm9ncmFtIHRoZSBVViBwbGFuZSBvbiBwbGFuYXIgbWFzdGVyICovCi0JCWNvbG9yX3BsYW5l ID0gMTsKLQotCXNrbF9wcm9ncmFtX3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0 ZSwgY29sb3JfcGxhbmUpOwotfQotc3RhdGljIHZvaWQKLXNrbF9kaXNhYmxlX3BsYW5lKHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+ aWQ7Ci0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKLQl1bnNpZ25lZCBsb25nIGlycWZs YWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxh Z3MpOwotCi0JaWYgKGljbF9pc19oZHJfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkKLQkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NVU19DVEwocGlwZSwgcGxhbmVfaWQpLCAw KTsKLQotCXNrbF93cml0ZV9wbGFuZV93bShwbGFuZSwgY3J0Y19zdGF0ZSk7Ci0KLQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSwgMCk7Ci0JaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NVUkYocGlwZSwgcGxhbmVfaWQpLCAwKTsK LQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxh Z3MpOwotfQotCi1zdGF0aWMgYm9vbAotc2tsX3BsYW5lX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lLAotCQkgICAgICAgZW51bSBwaXBlICpwaXBlKQotewotCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQll bnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKLQllbnVtIHBsYW5l X2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCWJv b2wgcmV0OwotCi0JcG93ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlOX1BJUEUocGxhbmUtPnBpcGUp OwotCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2 LCBwb3dlcl9kb21haW4pOwotCWlmICghd2FrZXJlZikKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0 ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfQ1RMKHBsYW5lLT5waXBlLCBwbGFuZV9p ZCkpICYgUExBTkVfQ1RMX0VOQUJMRTsKLQotCSpwaXBlID0gcGxhbmUtPnBpcGU7Ci0KLQlpbnRl bF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKLQot CXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGk5eHhfcGxhbmVfbGluZWFyX2dhbW1hKHUx NiBnYW1tYVs4XSkKIHsKIAkvKiBUaGUgcG9pbnRzIGFyZSBub3QgZXZlbmx5IHNwYWNlZC4gKi8K QEAgLTIyODIsMjQ2ICsxNzUxLDEzIEBAIHZsdl9zcHJpdGVfY2hlY2soc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIGludGVs X2Zvcm1hdF9pc19wMDF4KHUzMiBmb3JtYXQpCitzdGF0aWMgYm9vbCBoYXNfZHN0X2tleV9pbl9w cmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKLQlzd2l0 Y2ggKGZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9Q MDEyOgotCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0Ogot CQlyZXR1cm4gZmFsc2U7Ci0JfQorCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDk7CiB9 CiAKLXN0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrX2ZiKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50 ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQljb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQl1bnNpZ25lZCBpbnQg cm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247Ci0Jc3RydWN0IGRybV9mb3JtYXRf bmFtZV9idWYgZm9ybWF0X25hbWU7Ci0KLQlpZiAoIWZiKQotCQlyZXR1cm4gMDsKLQotCWlmIChy b3RhdGlvbiAmIH4oRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9ST1RBVEVfMTgwKSAmJgot CSAgICBpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkgewotCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKLQkJCSAgICAiUkMgc3VwcG9ydCBvbmx5IHdpdGggMC8xODAgZGVncmVlIHJv dGF0aW9uICgleClcbiIsCi0JCQkgICAgcm90YXRpb24pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1ggJiYKLQkgICAgZmItPm1vZGlm aWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUikgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwKLQkJCSAgICAiaG9yaXpvbnRhbCBmbGlwIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBsaW5l YXIgc3VyZmFjZSBmb3JtYXRzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGRy bV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7Ci0JCWlmIChmYi0+bW9kaWZpZXIgIT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRUQgJiYKLQkJICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZP Uk1BVF9NT0RfWWZfVElMRUQpIHsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJ CSAgICAiWS9ZZiB0aWxpbmcgcmVxdWlyZWQgZm9yIDkwLzI3MCFcbiIpOwotCQkJcmV0dXJuIC1F SU5WQUw7Ci0JCX0KLQotCQkvKgotCQkgKiA5MC8yNzAgaXMgbm90IGFsbG93ZWQgd2l0aCBSR0I2 NCAxNjoxNjoxNjoxNiBhbmQKLQkJICogSW5kZXhlZCA4LWJpdC4gUkdCIDE2LWJpdCA1OjY6NSBp cyBhbGxvd2VkIGdlbjExIG9ud2FyZHMuCi0JCSAqLwotCQlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZv cm1hdCkgewotCQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCQkJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTEpCi0JCQkJYnJlYWs7Ci0JCQlmYWxsdGhyb3VnaDsKLQkJY2FzZSBEUk1fRk9S TUFUX0M4OgotCQljYXNlIERSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RjoKLQkJY2FzZSBEUk1fRk9S TUFUX1hCR1IxNjE2MTYxNkY6Ci0JCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgotCQlj YXNlIERSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RjoKLQkJY2FzZSBEUk1fRk9STUFUX1kyMTA6Ci0J CWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgotCQljYXNlIERSTV9GT1JNQVRfWTIxNjoKLQkJY2FzZSBE Uk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKLQkJY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYx NjoKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAiVW5zdXBwb3J0ZWQg cGl4ZWwgZm9ybWF0ICVzIGZvciA5MC8yNzAhXG4iLAotCQkJCSAgICBkcm1fZ2V0X2Zvcm1hdF9u YW1lKGZiLT5mb3JtYXQtPmZvcm1hdCwKLQkJCQkJCQkmZm9ybWF0X25hbWUpKTsKLQkJCXJldHVy biAtRUlOVkFMOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBZLXRpbGlu ZyBpcyBub3Qgc3VwcG9ydGVkIGluIElGLUlEIEludGVybGFjZSBtb2RlICovCi0JaWYgKGNydGNf c3RhdGUtPmh3LmVuYWJsZSAmJgotCSAgICBjcnRjX3N0YXRlLT5ody5hZGp1c3RlZF9tb2RlLmZs YWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgJiYKLQkgICAgKGZiLT5tb2RpZmllciA9PSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAotCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9ZZl9USUxFRCB8fAotCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0NDUyB8fAotCSAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRF9DQ1MgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9HRU4xMl9SQ19DQ1MgfHwKLQkgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRF9HRU4xMl9NQ19DQ1MpKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LAotCQkJICAgICJZL1lmIHRpbGluZyBub3Qgc3VwcG9ydGVkIGluIElGLUlEIG1vZGVcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBXYV8xNjA2MDU0MTg4OnRnbCAqLwotCWlmIChJ U19USUdFUkxBS0UoZGV2X3ByaXYpICYmCi0JICAgIHBsYW5lX3N0YXRlLT5ja2V5LmZsYWdzICYg STkxNV9TRVRfQ09MT1JLRVlfU09VUkNFICYmCi0JICAgIGludGVsX2Zvcm1hdF9pc19wMDF4KGZi LT5mb3JtYXQtPmZvcm1hdCkpIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkg ICAgIlNvdXJjZSBjb2xvciBrZXlpbmcgbm90IHN1cHBvcnRlZCB3aXRoIFAwMXggZm9ybWF0c1xu Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IHNrbF9wbGFuZV9jaGVja19kc3RfY29vcmRpbmF0ZXMoY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCi0JCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0K LQkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQlpbnQgY3J0Y194ID0g cGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxOwotCWludCBjcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgm cGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKLQlpbnQgcGlwZV9zcmNfdyA9IGNydGNfc3RhdGUtPnBp cGVfc3JjX3c7Ci0KLQkvKgotCSAqIERpc3BsYXkgV0EgIzExNzU6IGNubCxnbGsKLQkgKiBQbGFu ZXMgb3RoZXIgdGhhbiB0aGUgY3Vyc29yIG1heSBjYXVzZSBGSUZPIHVuZGVyZmxvdyBhbmQgZGlz cGxheQotCSAqIGNvcnJ1cHRpb24gaWYgc3RhcnRpbmcgbGVzcyB0aGFuIDQgcGl4ZWxzIGZyb20g dGhlIHJpZ2h0IGVkZ2Ugb2YKLQkgKiB0aGUgc2NyZWVuLgotCSAqIEJlc2lkZXMgdGhlIGFib3Zl IFdBIGZpeCB0aGUgc2ltaWxhciBwcm9ibGVtLCB3aGVyZSBwbGFuZXMgb3RoZXIKLQkgKiB0aGFu IHRoZSBjdXJzb3IgZW5kaW5nIGxlc3MgdGhhbiA0IHBpeGVscyBmcm9tIHRoZSBsZWZ0IGVkZ2Ug b2YgdGhlCi0JICogc2NyZWVuIG1heSBjYXVzZSBGSUZPIHVuZGVyZmxvdyBhbmQgZGlzcGxheSBj b3JydXB0aW9uLgotCSAqLwotCWlmICgoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikgfHwgSVNfQ0FO Tk9OTEFLRShkZXZfcHJpdikpICYmCi0JICAgIChjcnRjX3ggKyBjcnRjX3cgPCA0IHx8IGNydGNf eCA+IHBpcGVfc3JjX3cgLSA0KSkgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJ CSAgICAicmVxdWVzdGVkIHBsYW5lIFggJXMgcG9zaXRpb24gJWQgaW52YWxpZCAodmFsaWQgcmFu Z2UgJWQtJWQpXG4iLAotCQkJICAgIGNydGNfeCArIGNydGNfdyA8IDQgPyAiZW5kIiA6ICJzdGFy dCIsCi0JCQkgICAgY3J0Y194ICsgY3J0Y193IDwgNCA/IGNydGNfeCArIGNydGNfdyA6IGNydGNf eCwKLQkJCSAgICA0LCBwaXBlX3NyY193IC0gNCk7Ci0JCXJldHVybiAtRVJBTkdFOwotCX0KLQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVja19udjEyX3JvdGF0aW9u KGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JdW5zaWdu ZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCWludCBzcmNfdyA9 IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCi0JLyogRGlz cGxheSBXQSAjMTEwNiAqLwotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5h cihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpICYmCi0JICAgIHNyY193ICYgMyAmJgotCSAgICAo cm90YXRpb24gPT0gRFJNX01PREVfUk9UQVRFXzI3MCB8fAotCSAgICAgcm90YXRpb24gPT0gKERS TV9NT0RFX1JFRkxFQ1RfWCB8IERSTV9NT0RFX1JPVEFURV85MCkpKSB7Ci0JCURSTV9ERUJVR19L TVMoInNyYyB3aWR0aCBtdXN0IGJlIG11bHRpcGxlIG9mIDQgZm9yIHJvdGF0ZWQgcGxhbmFyIFlV VlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IHNrbF9wbGFuZV9tYXhfc2NhbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQotewotCS8qCi0J ICogV2UgZG9uJ3QgeWV0IGtub3cgdGhlIGZpbmFsIHNvdXJjZSB3aWR0aCBub3IKLQkgKiB3aGV0 aGVyIHdlIGNhbiB1c2UgdGhlIEhRIHNjYWxlciBtb2RlLiBBc3N1bWUKLQkgKiB0aGUgYmVzdCBj YXNlLgotCSAqIEZJWE1FIG5lZWQgdG8gcHJvcGVybHkgY2hlY2sgdGhpcyBsYXRlci4KLQkgKi8K LQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2 KSB8fAotCSAgICAhaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1h dCwgZmItPm1vZGlmaWVyKSkKLQkJcmV0dXJuIDB4MzAwMDAgLSAxOwotCWVsc2UKLQkJcmV0dXJu IDB4MjAwMDAgLSAxOwotfQotCi1zdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVjayhzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVs X3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JaW50IG1pbl9zY2FsZSA9 IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKLQlpbnQgbWF4X3NjYWxlID0gRFJNX1BMQU5F X0hFTFBFUl9OT19TQ0FMSU5HOwotCWludCByZXQ7Ci0KLQlyZXQgPSBza2xfcGxhbmVfY2hlY2tf ZmIoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0K LQkvKiB1c2Ugc2NhbGVyIHdoZW4gY29sb3JrZXkgaXMgbm90IHJlcXVpcmVkICovCi0JaWYgKCFw bGFuZV9zdGF0ZS0+Y2tleS5mbGFncyAmJiBpbnRlbF9mYl9zY2FsYWJsZShmYikpIHsKLQkJbWlu X3NjYWxlID0gMTsKLQkJbWF4X3NjYWxlID0gc2tsX3BsYW5lX21heF9zY2FsZShkZXZfcHJpdiwg ZmIpOwotCX0KLQotCXJldCA9IGludGVsX2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhwbGFu ZV9zdGF0ZSwgY3J0Y19zdGF0ZSwKLQkJCQkJCW1pbl9zY2FsZSwgbWF4X3NjYWxlLCB0cnVlKTsK LQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc2tsX2NoZWNrX3BsYW5lX3N1cmZh Y2UocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoIXBsYW5l X3N0YXRlLT51YXBpLnZpc2libGUpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gc2tsX3BsYW5lX2No ZWNrX2RzdF9jb29yZGluYXRlcyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkK LQkJcmV0dXJuIHJldDsKLQotCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRl cyhwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNrbF9w bGFuZV9jaGVja19udjEyX3JvdGF0aW9uKHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1 cm4gcmV0OwotCi0JLyogSFcgb25seSBoYXMgOCBiaXRzIHBpeGVsIHByZWNpc2lvbiwgZGlzYWJs ZSBwbGFuZSBpZiBpbnZpc2libGUgKi8KLQlpZiAoIShwbGFuZV9zdGF0ZS0+aHcuYWxwaGEgPj4g OCkpCi0JCXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgPSBmYWxzZTsKLQotCXBsYW5lX3N0YXRl LT5jdGwgPSBza2xfcGxhbmVfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQotCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQlw bGFuZV9zdGF0ZS0+Y29sb3JfY3RsID0gZ2xrX3BsYW5lX2NvbG9yX2N0bChjcnRjX3N0YXRlLAot CQkJCQkJCSAgICAgcGxhbmVfc3RhdGUpOwotCi0JaWYgKGludGVsX2Zvcm1hdF9pbmZvX2lzX3l1 dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikgJiYKLQkgICAgaWNsX2lzX2hk cl9wbGFuZShkZXZfcHJpdiwgcGxhbmUtPmlkKSkKLQkJLyogRW5hYmxlIGFuZCB1c2UgTVBFRy0y IGNocm9tYSBzaXRpbmcgKi8KLQkJcGxhbmVfc3RhdGUtPmN1c19jdGwgPSBQTEFORV9DVVNfRU5B QkxFIHwKLQkJCVBMQU5FX0NVU19IUEhBU0VfMCB8Ci0JCQlQTEFORV9DVVNfVlBIQVNFX1NJR05f TkVHQVRJVkUgfCBQTEFORV9DVVNfVlBIQVNFXzBfMjU7Ci0JZWxzZQotCQlwbGFuZV9zdGF0ZS0+ Y3VzX2N0bCA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGJvb2wgaGFzX2RzdF9rZXlf aW5fcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0J cmV0dXJuIElOVEVMX0dFTihkZXZfcHJpdikgPj0gOTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxf cGxhbmVfc2V0X2NrZXkoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKLQkJ CQkgY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKnNldCkKK3N0YXRpYyB2 b2lkIGludGVsX3BsYW5lX3NldF9ja2V5KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUsCisJCQkJIGNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5ICpzZXQp CiB7CiAJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0 YXRlLT51YXBpLnBsYW5lKTsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CkBAIC0yNjkyLDE4NCArMTkyOCw2IEBAIHN0YXRpYyBj b25zdCB1MzIgY2h2X3BpcGVfYl9zcHJpdGVfZm9ybWF0c1tdID0gewogCURSTV9GT1JNQVRfVllV WSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgc2tsX3BsYW5lX2Zvcm1hdHNbXSA9IHsKLQlEUk1f Rk9STUFUX0M4LAotCURSTV9GT1JNQVRfUkdCNTY1LAotCURSTV9GT1JNQVRfWFJHQjg4ODgsCi0J RFJNX0ZPUk1BVF9YQkdSODg4OCwKLQlEUk1fRk9STUFUX0FSR0I4ODg4LAotCURSTV9GT1JNQVRf QUJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hCR1IyMTAx MDEwLAotCURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1hCR1IxNjE2MTYx NkYsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1fRk9STUFUX1VZ VlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi19OwotCi1zdGF0 aWMgY29uc3QgdTMyIHNrbF9wbGFuYXJfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRfQzgsCi0J RFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9STUFUX1hC R1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4OCwKLQlE Uk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0JRFJNX0ZP Uk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKLQlEUk1fRk9S TUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwKLQlEUk1fRk9S TUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi19Owot Ci1zdGF0aWMgY29uc3QgdTMyIGdsa19wbGFuYXJfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRf QzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9S TUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4 OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0J RFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKLQlE Uk1fRk9STUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwKLQlE Uk1fRk9STUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfWFlVVjg4ODgs Ci0JRFJNX0ZPUk1BVF9QMDEwLAotCURSTV9GT1JNQVRfUDAxMiwKLQlEUk1fRk9STUFUX1AwMTYs Ci19OwotCi1zdGF0aWMgY29uc3QgdTMyIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzW10gPSB7Ci0J RFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1fRk9STUFUX1hSR0I4ODg4 LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLQlEUk1fRk9S TUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9YQkdS MjEwMTAxMCwKLQlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfQUJHUjIxMDEw MTAsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwKLQlEUk1fRk9STUFUX1VZ VlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfWTIxMCwKLQlEUk1fRk9STUFUX1ky MTIsCi0JRFJNX0ZPUk1BVF9ZMjE2LAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi0JRFJNX0ZPUk1B VF9YVllVMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKLQlEUk1fRk9STUFU X1hWWVUxNjE2MTYxNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgaWNsX3Nkcl91dl9wbGFuZV9m b3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9DOCwKLQlEUk1fRk9STUFUX1JHQjU2NSwKLQlEUk1f Rk9STUFUX1hSR0I4ODg4LAotCURSTV9GT1JNQVRfWEJHUjg4ODgsCi0JRFJNX0ZPUk1BVF9BUkdC ODg4OCwKLQlEUk1fRk9STUFUX0FCR1I4ODg4LAotCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCi0J RFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FSR0IyMTAxMDEwLAotCURSTV9G T1JNQVRfQUJHUjIxMDEwMTAsCi0JRFJNX0ZPUk1BVF9ZVVlWLAotCURSTV9GT1JNQVRfWVZZVSwK LQlEUk1fRk9STUFUX1VZVlksCi0JRFJNX0ZPUk1BVF9WWVVZLAotCURSTV9GT1JNQVRfTlYxMiwK LQlEUk1fRk9STUFUX1AwMTAsCi0JRFJNX0ZPUk1BVF9QMDEyLAotCURSTV9GT1JNQVRfUDAxNiwK LQlEUk1fRk9STUFUX1kyMTAsCi0JRFJNX0ZPUk1BVF9ZMjEyLAotCURSTV9GT1JNQVRfWTIxNiwK LQlEUk1fRk9STUFUX1hZVVY4ODg4LAotCURSTV9GT1JNQVRfWFZZVTIxMDEwMTAsCi0JRFJNX0ZP Uk1BVF9YVllVMTJfMTYxNjE2MTYsCi0JRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTYsCi19OwotCi1z dGF0aWMgY29uc3QgdTMyIGljbF9oZHJfcGxhbmVfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRf QzgsCi0JRFJNX0ZPUk1BVF9SR0I1NjUsCi0JRFJNX0ZPUk1BVF9YUkdCODg4OCwKLQlEUk1fRk9S TUFUX1hCR1I4ODg4LAotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi0JRFJNX0ZPUk1BVF9BQkdSODg4 OCwKLQlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAotCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCi0J RFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKLQlEUk1fRk9STUFUX0FCR1IyMTAxMDEwLAotCURSTV9G T1JNQVRfWFJHQjE2MTYxNjE2RiwKLQlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCi0JRFJNX0ZP Uk1BVF9BUkdCMTYxNjE2MTZGLAotCURSTV9GT1JNQVRfQUJHUjE2MTYxNjE2RiwKLQlEUk1fRk9S TUFUX1lVWVYsCi0JRFJNX0ZPUk1BVF9ZVllVLAotCURSTV9GT1JNQVRfVVlWWSwKLQlEUk1fRk9S TUFUX1ZZVVksCi0JRFJNX0ZPUk1BVF9OVjEyLAotCURSTV9GT1JNQVRfUDAxMCwKLQlEUk1fRk9S TUFUX1AwMTIsCi0JRFJNX0ZPUk1BVF9QMDE2LAotCURSTV9GT1JNQVRfWTIxMCwKLQlEUk1fRk9S TUFUX1kyMTIsCi0JRFJNX0ZPUk1BVF9ZMjE2LAotCURSTV9GT1JNQVRfWFlVVjg4ODgsCi0JRFJN X0ZPUk1BVF9YVllVMjEwMTAxMCwKLQlEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKLQlEUk1f Rk9STUFUX1hWWVUxNjE2MTYxNiwKLX07Ci0KLXN0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zv cm1hdF9tb2RpZmllcnNfbm9jY3NbXSA9IHsKLQlJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCi0J STkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCi0JSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCi0JRFJN X0ZPUk1BVF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKLX07Ci0KLXN0YXRp YyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfY2NzW10gPSB7Ci0JSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEX0NDUywKLQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MsCi0J STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAotCUk5 MTVfRk9STUFUX01PRF9YX1RJTEVELAotCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKLQlEUk1fRk9S TUFUX01PRF9JTlZBTElECi19OwotCi1zdGF0aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1h dF9tb2RpZmllcnNfbWNfY2NzW10gPSB7Ci0JSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJf TUNfQ0NTLAotCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKLQlJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRCwKLQlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKLQlEUk1fRk9STUFU X01PRF9MSU5FQVIsCi0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAotfTsKLQotc3RhdGljIGNvbnN0 IHU2NCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3JjX2Njc1tdID0gewotCUk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywKLQlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwK LQlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKLQlEUk1fRk9STUFUX01PRF9MSU5FQVIsCi0JRFJN X0ZPUk1BVF9NT0RfSU5WQUxJRAotfTsKLQogc3RhdGljIGJvb2wgZzR4X3Nwcml0ZV9mb3JtYXRf bW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCiAJCQkJCSAgICB1MzIgZm9y bWF0LCB1NjQgbW9kaWZpZXIpCiB7CkBAIC0yOTYyLDE0OCArMjAyMCw2IEBAIHN0YXRpYyBib29s IHZsdl9zcHJpdGVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5l LAogCX0KIH0KIAotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0 cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJCQkJICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVy KQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUp OwotCi0Jc3dpdGNoIChtb2RpZmllcikgewotCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgot CWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRDoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKLQkJYnJlYWs7Ci0JY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RURfQ0NTOgotCQlpZiAoIXBsYW5lLT5oYXNfY2NzKQotCQkJcmV0dXJuIGZhbHNlOwotCQlicmVh azsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0Jc3dpdGNoIChmb3JtYXQpIHsK LQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogot CWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0J CWlmIChpc19jY3NfbW9kaWZpZXIobW9kaWZpZXIpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWZhbGx0 aHJvdWdoOwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0Iy MTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRf QVJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZP Uk1BVF9ZVVlWOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZ OgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgotCWNhc2Ug RFJNX0ZPUk1BVF9YWVVWODg4ODoKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQljYXNlIERSTV9G T1JNQVRfUDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQljYXNlIERSTV9GT1JNQVRfWFZZ VTIxMDEwMTA6Ci0JCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQpCi0J CQlyZXR1cm4gdHJ1ZTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCWNh c2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2 MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgotCWNhc2UgRFJNX0ZPUk1BVF9Z MjEyOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYx NjE2MTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJaWYgKG1vZGlmaWVyID09 IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAotCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1hfVElMRUQgfHwKLQkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE KQotCQkJcmV0dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIGdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2Njcyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCWVudW0gcGxhbmVfaWQgcGxh bmVfaWQpCi17Ci0JLyogV2FfMTQwMTA0NzcwMDg6dGdsW2EwLi5jMF0scmtsW2FsbF0sZGcxW2Fs bF0gKi8KLQlpZiAoSVNfREcxKGRldl9wcml2KSB8fCBJU19ST0NLRVRMQUtFKGRldl9wcml2KSB8 fAotCSAgICBJU19UR0xfRElTUF9SRVZJRChkZXZfcHJpdiwgVEdMX1JFVklEX0EwLCBUR0xfUkVW SURfQzApKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gcGxhbmVfaWQgPCBQTEFORV9TUFJJ VEU0OwotfQotCi1zdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChz dHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCi0JCQkJCSAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlm aWVyKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoX3Bs YW5lLT5kZXYpOwotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShf cGxhbmUpOwotCi0Jc3dpdGNoIChtb2RpZmllcikgewotCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lf VElMRURfR0VOMTJfTUNfQ0NTOgotCQlpZiAoIWdlbjEyX3BsYW5lX3N1cHBvcnRzX21jX2Njcyhk ZXZfcHJpdiwgcGxhbmUtPmlkKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJZmFsbHRocm91Z2g7Ci0J Y2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6Ci0JY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxF RDoKLQljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgotCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1lfVElMRURfR0VOMTJfUkNfQ0NTOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFs c2U7Ci0JfQotCi0Jc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6 Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoK LQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JCWlmIChpc19jY3NfbW9kaWZpZXIobW9kaWZp ZXIpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWZhbGx0aHJvdWdoOwotCWNhc2UgRFJNX0ZPUk1BVF9Z VVlWOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgotCWNh c2UgRFJNX0ZPUk1BVF9WWVVZOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgotCWNhc2UgRFJNX0ZP Uk1BVF9YWVVWODg4ODoKLQljYXNlIERSTV9GT1JNQVRfUDAxMDoKLQljYXNlIERSTV9GT1JNQVRf UDAxMjoKLQljYXNlIERSTV9GT1JNQVRfUDAxNjoKLQkJaWYgKG1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUykKLQkJCXJldHVybiB0cnVlOwotCQlmYWxsdGhy b3VnaDsKLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEw MTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FS R0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQljYXNlIERSTV9GT1JN QVRfWFZZVTIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCWNhc2UgRFJNX0ZPUk1BVF9Y QkdSMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgotCWNhc2UgRFJN X0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgot CWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgotCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgotCWNhc2UgRFJN X0ZPUk1BVF9ZMjE2OgotCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0JY2FzZSBE Uk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJaWYgKG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9E X0xJTkVBUiB8fAotCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQgfHwK LQkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEKQotCQkJcmV0dXJuIHRy dWU7Ci0JCWZhbGx0aHJvdWdoOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19CiAK IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGc0eF9zcHJpdGVfZnVuY3MgPSB7 CiAJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKQEAgLTMx MzIsMjUxICsyMDQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mgdmx2 X3Nwcml0ZV9mdW5jcyA9IHsKIAkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSB2bHZfc3ByaXRlX2Zv cm1hdF9tb2Rfc3VwcG9ydGVkLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVf ZnVuY3Mgc2tsX3BsYW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hl bHBlcl91cGRhdGVfcGxhbmUsCi0JLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9k aXNhYmxlX3BsYW5lLAotCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKLQkuYXRvbWlj X2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKLQkuYXRvbWlj X2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAotCS5mb3JtYXRfbW9k X3N1cHBvcnRlZCA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKLX07Ci0KLXN0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGdlbjEyX3BsYW5lX2Z1bmNzID0gewotCS51 cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCi0JLmRpc2FibGVf cGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAotCS5kZXN0cm95ID0gaW50 ZWxfcGxhbmVfZGVzdHJveSwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5l X2R1cGxpY2F0ZV9zdGF0ZSwKLQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9k ZXN0cm95X3N0YXRlLAotCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGdlbjEyX3BsYW5lX2Zvcm1h dF9tb2Rfc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19mYmMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgZW51bSBwaXBlIHBpcGUs IGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JaWYgKCFIQVNfRkJDKGRldl9wcml2KSkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHBpcGUgPT0gUElQRV9BICYmIHBsYW5lX2lkID09IFBM QU5FX1BSSU1BUlk7Ci19Ci0KLXN0YXRpYyBib29sIHNrbF9wbGFuZV9oYXNfcGxhbmFyKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgZW51bSBwaXBlIHBpcGUsIGVudW0g cGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JLyogRGlzcGxheSBXQSAjMDg3MDogc2tsLCBieHQgKi8K LQlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJPWFRPTihkZXZfcHJpdikpCi0JCXJl dHVybiBmYWxzZTsKLQotCWlmIChJU19HRU4oZGV2X3ByaXYsIDkpICYmICFJU19HRU1JTklMQUtF KGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQykKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKHBs YW5lX2lkICE9IFBMQU5FX1BSSU1BUlkgJiYgcGxhbmVfaWQgIT0gUExBTkVfU1BSSVRFMCkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBjb25zdCB1MzIgKnNr bF9nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0J CQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLAotCQkJCQlpbnQgKm51 bV9mb3JtYXRzKQotewotCWlmIChza2xfcGxhbmVfaGFzX3BsYW5hcihkZXZfcHJpdiwgcGlwZSwg cGxhbmVfaWQpKSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2tsX3BsYW5hcl9mb3Jt YXRzKTsKLQkJcmV0dXJuIHNrbF9wbGFuYXJfZm9ybWF0czsKLQl9IGVsc2UgewotCQkqbnVtX2Zv cm1hdHMgPSBBUlJBWV9TSVpFKHNrbF9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJuIHNrbF9wbGFu ZV9mb3JtYXRzOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IHUzMiAqZ2xrX2dldF9wbGFuZV9mb3Jt YXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkJZW51bSBwaXBlIHBp cGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsCi0JCQkJCWludCAqbnVtX2Zvcm1hdHMpCi17Ci0J aWYgKHNrbF9wbGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBwaXBlLCBwbGFuZV9pZCkpIHsKLQkJ Km51bV9mb3JtYXRzID0gQVJSQVlfU0laRShnbGtfcGxhbmFyX2Zvcm1hdHMpOwotCQlyZXR1cm4g Z2xrX3BsYW5hcl9mb3JtYXRzOwotCX0gZWxzZSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJ WkUoc2tsX3BsYW5lX2Zvcm1hdHMpOwotCQlyZXR1cm4gc2tsX3BsYW5lX2Zvcm1hdHM7Ci0JfQot fQotCi1zdGF0aWMgY29uc3QgdTMyICppY2xfZ2V0X3BsYW5lX2Zvcm1hdHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCQllbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9p ZCBwbGFuZV9pZCwKLQkJCQkJaW50ICpudW1fZm9ybWF0cykKLXsKLQlpZiAoaWNsX2lzX2hkcl9w bGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKSB7Ci0JCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUo aWNsX2hkcl9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJuIGljbF9oZHJfcGxhbmVfZm9ybWF0czsK LQl9IGVsc2UgaWYgKGljbF9pc19udjEyX3lfcGxhbmUoZGV2X3ByaXYsIHBsYW5lX2lkKSkgewot CQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzKTsKLQkJ cmV0dXJuIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzOwotCX0gZWxzZSB7Ci0JCSpudW1fZm9ybWF0 cyA9IEFSUkFZX1NJWkUoaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzKTsKLQkJcmV0dXJuIGljbF9z ZHJfdXZfcGxhbmVfZm9ybWF0czsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCB1NjQgKmdlbjEyX2dl dF9wbGFuZV9tb2RpZmllcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJ CQkgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKLXsKLQlpZiAoZ2VuMTJfcGxhbmVfc3VwcG9y dHNfbWNfY2NzKGRldl9wcml2LCBwbGFuZV9pZCkpCi0JCXJldHVybiBnZW4xMl9wbGFuZV9mb3Jt YXRfbW9kaWZpZXJzX21jX2NjczsKLQllbHNlCi0JCXJldHVybiBnZW4xMl9wbGFuZV9mb3JtYXRf bW9kaWZpZXJzX3JjX2NjczsKLX0KLQotc3RhdGljIGJvb2wgc2tsX3BsYW5lX2hhc19jY3Moc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgICAgZW51bSBwaXBlIHBpcGUs IGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JaWYgKHBsYW5lX2lkID09IFBMQU5FX0NVUlNP UikKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCi0J CXJldHVybiB0cnVlOwotCi0JaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQotCQlyZXR1cm4g cGlwZSAhPSBQSVBFX0M7Ci0KLQlyZXR1cm4gcGlwZSAhPSBQSVBFX0MgJiYKLQkJKHBsYW5lX2lk ID09IFBMQU5FX1BSSU1BUlkgfHwKLQkJIHBsYW5lX2lkID09IFBMQU5FX1NQUklURTApOwotfQot Ci1zdHJ1Y3QgaW50ZWxfcGxhbmUgKgotc2tsX3VuaXZlcnNhbF9wbGFuZV9jcmVhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgZW51bSBwaXBlIHBpcGUsIGVudW0g cGxhbmVfaWQgcGxhbmVfaWQpCi17Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyAqcGxh bmVfZnVuY3M7Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKLQllbnVtIGRybV9wbGFuZV90 eXBlIHBsYW5lX3R5cGU7Ci0JdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnM7Ci0JdW5z aWduZWQgaW50IHN1cHBvcnRlZF9jc2M7Ci0JY29uc3QgdTY0ICptb2RpZmllcnM7Ci0JY29uc3Qg dTMyICpmb3JtYXRzOwotCWludCBudW1fZm9ybWF0czsKLQlpbnQgcmV0OwotCi0JcGxhbmUgPSBp bnRlbF9wbGFuZV9hbGxvYygpOwotCWlmIChJU19FUlIocGxhbmUpKQotCQlyZXR1cm4gcGxhbmU7 Ci0KLQlwbGFuZS0+cGlwZSA9IHBpcGU7Ci0JcGxhbmUtPmlkID0gcGxhbmVfaWQ7Ci0JcGxhbmUt PmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIHBsYW5lX2lkKTsKLQot CXBsYW5lLT5oYXNfZmJjID0gc2tsX3BsYW5lX2hhc19mYmMoZGV2X3ByaXYsIHBpcGUsIHBsYW5l X2lkKTsKLQlpZiAocGxhbmUtPmhhc19mYmMpIHsKLQkJc3RydWN0IGludGVsX2ZiYyAqZmJjID0g JmRldl9wcml2LT5mYmM7Ci0KLQkJZmJjLT5wb3NzaWJsZV9mcmFtZWJ1ZmZlcl9iaXRzIHw9IHBs YW5lLT5mcm9udGJ1ZmZlcl9iaXQ7Ci0JfQotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTEpIHsKLQkJcGxhbmUtPm1pbl93aWR0aCA9IGljbF9wbGFuZV9taW5fd2lkdGg7Ci0JCXBsYW5l LT5tYXhfd2lkdGggPSBpY2xfcGxhbmVfbWF4X3dpZHRoOwotCQlwbGFuZS0+bWF4X2hlaWdodCA9 IGljbF9wbGFuZV9tYXhfaGVpZ2h0OwotCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkgewotCQlwbGFuZS0+bWF4X3dpZHRoID0g Z2xrX3BsYW5lX21heF93aWR0aDsKLQkJcGxhbmUtPm1heF9oZWlnaHQgPSBza2xfcGxhbmVfbWF4 X2hlaWdodDsKLQl9IGVsc2UgewotCQlwbGFuZS0+bWF4X3dpZHRoID0gc2tsX3BsYW5lX21heF93 aWR0aDsKLQkJcGxhbmUtPm1heF9oZWlnaHQgPSBza2xfcGxhbmVfbWF4X2hlaWdodDsKLQl9Ci0K LQlwbGFuZS0+bWF4X3N0cmlkZSA9IHNrbF9wbGFuZV9tYXhfc3RyaWRlOwotCXBsYW5lLT51cGRh dGVfcGxhbmUgPSBza2xfdXBkYXRlX3BsYW5lOwotCXBsYW5lLT5kaXNhYmxlX3BsYW5lID0gc2ts X2Rpc2FibGVfcGxhbmU7Ci0JcGxhbmUtPmdldF9od19zdGF0ZSA9IHNrbF9wbGFuZV9nZXRfaHdf c3RhdGU7Ci0JcGxhbmUtPmNoZWNrX3BsYW5lID0gc2tsX3BsYW5lX2NoZWNrOwotCXBsYW5lLT5t aW5fY2RjbGsgPSBza2xfcGxhbmVfbWluX2NkY2xrOwotCXBsYW5lLT5hc3luY19mbGlwID0gc2ts X3BsYW5lX2FzeW5jX2ZsaXA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJ Zm9ybWF0cyA9IGljbF9nZXRfcGxhbmVfZm9ybWF0cyhkZXZfcHJpdiwgcGlwZSwKLQkJCQkJCXBs YW5lX2lkLCAmbnVtX2Zvcm1hdHMpOwotCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCi0JCWZvcm1hdHMgPSBnbGtfZ2V0X3BsYW5l X2Zvcm1hdHMoZGV2X3ByaXYsIHBpcGUsCi0JCQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsK LQllbHNlCi0JCWZvcm1hdHMgPSBza2xfZ2V0X3BsYW5lX2Zvcm1hdHMoZGV2X3ByaXYsIHBpcGUs Ci0JCQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsKLQotCXBsYW5lLT5oYXNfY2NzID0gc2ts X3BsYW5lX2hhc19jY3MoZGV2X3ByaXYsIHBpcGUsIHBsYW5lX2lkKTsKLQlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMikgewotCQltb2RpZmllcnMgPSBnZW4xMl9nZXRfcGxhbmVfbW9kaWZp ZXJzKGRldl9wcml2LCBwbGFuZV9pZCk7Ci0JCXBsYW5lX2Z1bmNzID0gJmdlbjEyX3BsYW5lX2Z1 bmNzOwotCX0gZWxzZSB7Ci0JCWlmIChwbGFuZS0+aGFzX2NjcykKLQkJCW1vZGlmaWVycyA9IHNr bF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX2NjczsKLQkJZWxzZQotCQkJbW9kaWZpZXJzID0gc2ts X3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbm9jY3M7Ci0JCXBsYW5lX2Z1bmNzID0gJnNrbF9wbGFu ZV9mdW5jczsKLQl9Ci0KLQlpZiAocGxhbmVfaWQgPT0gUExBTkVfUFJJTUFSWSkKLQkJcGxhbmVf dHlwZSA9IERSTV9QTEFORV9UWVBFX1BSSU1BUlk7Ci0JZWxzZQotCQlwbGFuZV90eXBlID0gRFJN X1BMQU5FX1RZUEVfT1ZFUkxBWTsKLQotCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgm ZGV2X3ByaXYtPmRybSwgJnBsYW5lLT5iYXNlLAotCQkJCSAgICAgICAwLCBwbGFuZV9mdW5jcywK LQkJCQkgICAgICAgZm9ybWF0cywgbnVtX2Zvcm1hdHMsIG1vZGlmaWVycywKLQkJCQkgICAgICAg cGxhbmVfdHlwZSwKLQkJCQkgICAgICAgInBsYW5lICVkJWMiLCBwbGFuZV9pZCArIDEsCi0JCQkJ ICAgICAgIHBpcGVfbmFtZShwaXBlKSk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0Jc3Vw cG9ydGVkX3JvdGF0aW9ucyA9Ci0JCURSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVfUk9UQVRF XzkwIHwKLQkJRFJNX01PREVfUk9UQVRFXzE4MCB8IERSTV9NT0RFX1JPVEFURV8yNzA7Ci0KLQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKLQkJc3VwcG9ydGVkX3JvdGF0aW9ucyB8PSBE Uk1fTU9ERV9SRUZMRUNUX1g7Ci0KLQlkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5 KCZwbGFuZS0+YmFzZSwKLQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCi0JCQkJCSAgIHN1cHBv cnRlZF9yb3RhdGlvbnMpOwotCi0Jc3VwcG9ydGVkX2NzYyA9IEJJVChEUk1fQ09MT1JfWUNCQ1Jf QlQ2MDEpIHwgQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSk7Ci0KLQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKLQkJc3VwcG9ydGVkX2Nz YyB8PSBCSVQoRFJNX0NPTE9SX1lDQkNSX0JUMjAyMCk7Ci0KLQlkcm1fcGxhbmVfY3JlYXRlX2Nv bG9yX3Byb3BlcnRpZXMoJnBsYW5lLT5iYXNlLAotCQkJCQkgIHN1cHBvcnRlZF9jc2MsCi0JCQkJ CSAgQklUKERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFKSB8Ci0JCQkJCSAgQklUKERSTV9D T0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKSwKLQkJCQkJICBEUk1fQ09MT1JfWUNCQ1JfQlQ3MDksCi0J CQkJCSAgRFJNX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UpOwotCi0JZHJtX3BsYW5lX2NyZWF0 ZV9hbHBoYV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UpOwotCWRybV9wbGFuZV9jcmVhdGVfYmxlbmRf bW9kZV9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsCi0JCQkJCSAgICAgQklUKERSTV9NT0RFX0JMRU5E X1BJWEVMX05PTkUpIHwKLQkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfUFJFTVVMVEkpIHwK LQkJCQkJICAgICBCSVQoRFJNX01PREVfQkxFTkRfQ09WRVJBR0UpKTsKLQotCWRybV9wbGFuZV9j cmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLCBwbGFuZV9pZCk7Ci0K LQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikKLQkJZHJtX3BsYW5lX2VuYWJsZV9mYl9k YW1hZ2VfY2xpcHMoJnBsYW5lLT5iYXNlKTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDEwKQotCQlkcm1fcGxhbmVfY3JlYXRlX3NjYWxpbmdfZmlsdGVyX3Byb3BlcnR5KCZwbGFuZS0+ YmFzZSwKLQkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfREVGQVVMVCkgfAotCQkJCQkJQklU KERSTV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSk7Ci0KLQlkcm1fcGxhbmVfaGVs cGVyX2FkZCgmcGxhbmUtPmJhc2UsICZpbnRlbF9wbGFuZV9oZWxwZXJfZnVuY3MpOwotCi0JcmV0 dXJuIHBsYW5lOwotCi1mYWlsOgotCWludGVsX3BsYW5lX2ZyZWUocGxhbmUpOwotCi0JcmV0dXJu IEVSUl9QVFIocmV0KTsKLX0KLQogc3RydWN0IGludGVsX3BsYW5lICoKIGludGVsX3Nwcml0ZV9w bGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICBlbnVt IHBpcGUgcGlwZSwgaW50IHNwcml0ZSkKQEAgLTMzODksMTAgKzIwNjAsNiBAQCBpbnRlbF9zcHJp dGVfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAlpbnQg bnVtX2Zvcm1hdHM7CiAJaW50IHJldCwgenBvczsKIAotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDkpCi0JCXJldHVybiBza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlw ZSwKLQkJCQkJCSAgUExBTkVfU1BSSVRFMCArIHNwcml0ZSk7Ci0KIAlwbGFuZSA9IGludGVsX3Bs YW5lX2FsbG9jKCk7CiAJaWYgKElTX0VSUihwbGFuZSkpCiAJCXJldHVybiBwbGFuZTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oCmluZGV4IDc2MTI2ZGQ4ZDU4 NC4uNDE4ODk3Zjk1M2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX3Nwcml0ZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf c3ByaXRlLmgKQEAgLTM4LDkgKzM4LDYgQEAgdm9pZCBpbnRlbF9waXBlX3VwZGF0ZV9lbmQoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKTsKIGludCBpbnRlbF9wbGFuZV9j aGVja19zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7 CiBpbnQgaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogaW50IGNodl9wbGFuZV9jaGVja19yb3RhdGlvbihjb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKLXN0cnVjdCBpbnRlbF9w bGFuZSAqCi1za2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCi0JCQkgICBlbnVtIHBpcGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9p ZCk7CiAKIHN0YXRpYyBpbmxpbmUgdTggaWNsX2hkcl9wbGFuZV9tYXNrKHZvaWQpCiB7CkBAIC01 OSw0ICs1Niw3IEBAIGludCBoc3dfcGxhbmVfbWluX2NkY2xrKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAogaW50IHZsdl9wbGFuZV9taW5fY2RjbGsoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQljb25zdCBzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIAordm9pZCBza2xfcHJvZ3JhbV9zY2FsZXIoc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAorCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSk7CiAjZW5kaWYgLyogX19JTlRFTF9TUFJJVEVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjk2NTkwNzlhYzE4Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmMKQEAg LTAsMCArMSwyMjYzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICog Q29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kYW1hZ2VfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hl bHBlci5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9hdG9taWNf cGxhbmUuaCIKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50 ZWxfcG0uaCIKKyNpbmNsdWRlICJpbnRlbF9wc3IuaCIKKyNpbmNsdWRlICJpbnRlbF9zcHJpdGUu aCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCisKK3N0YXRpYyBjb25zdCB1MzIg c2tsX3BsYW5lX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAorCURSTV9GT1JNQVRfUkdC NTY1LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YQkdSODg4OCwKKwlEUk1f Rk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfQUJHUjg4ODgsCisJRFJNX0ZPUk1BVF9YUkdC MjEwMTAxMCwKKwlEUk1fRk9STUFUX1hCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWFJHQjE2MTYx NjE2RiwKKwlEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9ZVVlWLAorCURS TV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZPUk1BVF9WWVVZLAorCURS TV9GT1JNQVRfWFlVVjg4ODgsCit9OworCitzdGF0aWMgY29uc3QgdTMyIHNrbF9wbGFuYXJfZm9y bWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZP Uk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRfQVJHQjg4 ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAorCURS TV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAorCURSTV9G T1JNQVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lVWVYsCisJRFJNX0ZPUk1BVF9ZVllV LAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJRFJNX0ZPUk1BVF9OVjEy LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGdsa19wbGFu YXJfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJ RFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRf QVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAxMDEw LAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGLAor CURSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lVWVYsCisJRFJNX0ZPUk1B VF9ZVllVLAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJRFJNX0ZPUk1B VF9OVjEyLAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1BVF9QMDEwLAorCURSTV9G T1JNQVRfUDAxMiwKKwlEUk1fRk9STUFUX1AwMTYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGlj bF9zZHJfeV9wbGFuZV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9DOCwKKwlEUk1fRk9STUFU X1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRfWEJHUjg4ODgsCisJ RFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX0FCR1I4ODg4LAorCURSTV9GT1JNQVRf WFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX0FSR0Iy MTAxMDEwLAorCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9ZVVlWLAorCURS TV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZPUk1BVF9WWVVZLAorCURS TV9GT1JNQVRfWTIxMCwKKwlEUk1fRk9STUFUX1kyMTIsCisJRFJNX0ZPUk1BVF9ZMjE2LAorCURS TV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1BVF9YVllVMjEwMTAxMCwKKwlEUk1fRk9STUFU X1hWWVUxMl8xNjE2MTYxNiwKKwlEUk1fRk9STUFUX1hWWVUxNjE2MTYxNiwKK307CisKK3N0YXRp YyBjb25zdCB1MzIgaWNsX3Nkcl91dl9wbGFuZV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9D OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JN QVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX0FCR1I4ODg4 LAorCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwlE Uk1fRk9STUFUX0FSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCisJRFJNX0ZP Uk1BVF9ZVVlWLAorCURSTV9GT1JNQVRfWVZZVSwKKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZP Uk1BVF9WWVVZLAorCURSTV9GT1JNQVRfTlYxMiwKKwlEUk1fRk9STUFUX1AwMTAsCisJRFJNX0ZP Uk1BVF9QMDEyLAorCURSTV9GT1JNQVRfUDAxNiwKKwlEUk1fRk9STUFUX1kyMTAsCisJRFJNX0ZP Uk1BVF9ZMjEyLAorCURSTV9GT1JNQVRfWTIxNiwKKwlEUk1fRk9STUFUX1hZVVY4ODg4LAorCURS TV9GT1JNQVRfWFZZVTIxMDEwMTAsCisJRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTYsCisJRFJN X0ZPUk1BVF9YVllVMTYxNjE2MTYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGljbF9oZHJfcGxh bmVfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfQzgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJ RFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1hCR1I4ODg4LAorCURSTV9GT1JNQVRf QVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0IyMTAxMDEw LAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKKwlE Uk1fRk9STUFUX0FCR1IyMTAxMDEwLAorCURSTV9GT1JNQVRfWFJHQjE2MTYxNjE2RiwKKwlEUk1f Rk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGLAorCURSTV9G T1JNQVRfQUJHUjE2MTYxNjE2RiwKKwlEUk1fRk9STUFUX1lVWVYsCisJRFJNX0ZPUk1BVF9ZVllV LAorCURSTV9GT1JNQVRfVVlWWSwKKwlEUk1fRk9STUFUX1ZZVVksCisJRFJNX0ZPUk1BVF9OVjEy LAorCURSTV9GT1JNQVRfUDAxMCwKKwlEUk1fRk9STUFUX1AwMTIsCisJRFJNX0ZPUk1BVF9QMDE2 LAorCURSTV9GT1JNQVRfWTIxMCwKKwlEUk1fRk9STUFUX1kyMTIsCisJRFJNX0ZPUk1BVF9ZMjE2 LAorCURSTV9GT1JNQVRfWFlVVjg4ODgsCisJRFJNX0ZPUk1BVF9YVllVMjEwMTAxMCwKKwlEUk1f Rk9STUFUX1hWWVUxMl8xNjE2MTYxNiwKKwlEUk1fRk9STUFUX1hWWVUxNjE2MTYxNiwKK307CisK K3N0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbm9jY3NbXSA9IHsK KwlJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCisJ STkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9G T1JNQVRfTU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyBjb25zdCB1NjQgc2tsX3BsYW5lX2Zvcm1h dF9tb2RpZmllcnNfY2NzW10gPSB7CisJSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUywKKwlJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MsCisJSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAor CUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAorCURS TV9GT1JNQVRfTU9EX0xJTkVBUiwKKwlEUk1fRk9STUFUX01PRF9JTlZBTElECit9OworCitzdGF0 aWMgY29uc3QgdTY0IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2RpZmllcnNfbWNfY2NzW10gPSB7CisJ STkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTLAorCUk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0dFTjEyX1JDX0NDUywKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKKwlJOTE1X0ZP Uk1BVF9NT0RfWF9USUxFRCwKKwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJRFJNX0ZPUk1BVF9N T0RfSU5WQUxJRAorfTsKKworc3RhdGljIGNvbnN0IHU2NCBnZW4xMl9wbGFuZV9mb3JtYXRfbW9k aWZpZXJzX3JjX2Njc1tdID0geworCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0ND UywKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKKwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwK KwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAorfTsKKwor aW50IHNrbF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29s IGFscGhhKQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1JH Ql81NjU6CisJCXJldHVybiBEUk1fRk9STUFUX1JHQjU2NTsKKwljYXNlIFBMQU5FX0NUTF9GT1JN QVRfTlYxMjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfTlYxMjsKKwljYXNlIFBMQU5FX0NUTF9GT1JN QVRfWFlVVjoKKwkJcmV0dXJuIERSTV9GT1JNQVRfWFlVVjg4ODg7CisJY2FzZSBQTEFORV9DVExf Rk9STUFUX1AwMTA6CisJCXJldHVybiBEUk1fRk9STUFUX1AwMTA7CisJY2FzZSBQTEFORV9DVExf Rk9STUFUX1AwMTI6CisJCXJldHVybiBEUk1fRk9STUFUX1AwMTI7CisJY2FzZSBQTEFORV9DVExf Rk9STUFUX1AwMTY6CisJCXJldHVybiBEUk1fRk9STUFUX1AwMTY7CisJY2FzZSBQTEFORV9DVExf Rk9STUFUX1kyMTA6CisJCXJldHVybiBEUk1fRk9STUFUX1kyMTA7CisJY2FzZSBQTEFORV9DVExf Rk9STUFUX1kyMTI6CisJCXJldHVybiBEUk1fRk9STUFUX1kyMTI7CisJY2FzZSBQTEFORV9DVExf Rk9STUFUX1kyMTY6CisJCXJldHVybiBEUk1fRk9STUFUX1kyMTY7CisJY2FzZSBQTEFORV9DVExf Rk9STUFUX1k0MTA6CisJCXJldHVybiBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOworCWNhc2UgUExB TkVfQ1RMX0ZPUk1BVF9ZNDEyOgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY7 CisJY2FzZSBQTEFORV9DVExfRk9STUFUX1k0MTY6CisJCXJldHVybiBEUk1fRk9STUFUX1hWWVUx NjE2MTYxNjsKKwlkZWZhdWx0OgorCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzg4ODg6CisJ CWlmIChyZ2Jfb3JkZXIpIHsKKwkJCWlmIChhbHBoYSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9B QkdSODg4ODsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YQkdSODg4ODsKKwkJfSBl bHNlIHsKKwkJCWlmIChhbHBoYSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCODg4ODsKKwkJ CWVsc2UKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9YUkdCODg4ODsKKwkJfQorCWNhc2UgUExBTkVf Q1RMX0ZPUk1BVF9YUkdCXzIxMDEwMTA6CisJCWlmIChyZ2Jfb3JkZXIpIHsKKwkJCWlmIChhbHBo YSkKKwkJCQlyZXR1cm4gRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDsKKwkJCWVsc2UKKwkJCQlyZXR1 cm4gRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChhbHBoYSkKKwkJ CQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRFJN X0ZPUk1BVF9YUkdCMjEwMTAxMDsKKwkJfQorCWNhc2UgUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzE2 MTYxNjE2RjoKKwkJaWYgKHJnYl9vcmRlcikgeworCQkJaWYgKGFscGhhKQorCQkJCXJldHVybiBE Uk1fRk9STUFUX0FCR1IxNjE2MTYxNkY7CisJCQllbHNlCisJCQkJcmV0dXJuIERSTV9GT1JNQVRf WEJHUjE2MTYxNjE2RjsKKwkJfSBlbHNlIHsKKwkJCWlmIChhbHBoYSkKKwkJCQlyZXR1cm4gRFJN X0ZPUk1BVF9BUkdCMTYxNjE2MTZGOworCQkJZWxzZQorCQkJCXJldHVybiBEUk1fRk9STUFUX1hS R0IxNjE2MTYxNkY7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1OCBpY2xfbnYxMl95X3BsYW5lX21h c2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJaWYgKElTX1JPQ0tFVExBS0Uo aTkxNSkpCisJCXJldHVybiBCSVQoUExBTkVfU1BSSVRFMikgfCBCSVQoUExBTkVfU1BSSVRFMyk7 CisJZWxzZQorCQlyZXR1cm4gQklUKFBMQU5FX1NQUklURTQpIHwgQklUKFBMQU5FX1NQUklURTUp OworfQorCitib29sIGljbF9pc19udjEyX3lfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAorCQkJIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJcmV0dXJuIElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTEgJiYKKwkJaWNsX252MTJfeV9wbGFuZV9tYXNrKGRldl9wcml2 KSAmIEJJVChwbGFuZV9pZCk7Cit9CisKK2Jvb2wgaWNsX2lzX2hkcl9wbGFuZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJcmV0 dXJuIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYKKwkJaWNsX2hkcl9wbGFuZV9tYXNrKCkg JiBCSVQocGxhbmVfaWQpOworfQorCitzdGF0aWMgdm9pZAorc2tsX3BsYW5lX3JhdGlvKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQljb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQl1bnNpZ25lZCBpbnQgKm51bSwgdW5zaWdu ZWQgaW50ICpkZW4pCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKworCWlmIChmYi0+Zm9ybWF0LT5j cHBbMF0gPT0gOCkgeworCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1J TklMQUtFKGRldl9wcml2KSkgeworCQkJKm51bSA9IDEwOworCQkJKmRlbiA9IDg7CisJCX0gZWxz ZSB7CisJCQkqbnVtID0gOTsKKwkJCSpkZW4gPSA4OworCQl9CisJfSBlbHNlIHsKKwkJKm51bSA9 IDE7CisJCSpkZW4gPSAxOworCX0KK30KKworc3RhdGljIGludCBza2xfcGxhbmVfbWluX2NkY2xr KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFu ZS0+ZGV2KTsKKwl1bnNpZ25lZCBpbnQgbnVtLCBkZW47CisJdW5zaWduZWQgaW50IHBpeGVsX3Jh dGUgPSBpbnRlbF9wbGFuZV9waXhlbF9yYXRlKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKKwor CXNrbF9wbGFuZV9yYXRpbyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgJm51bSwgJmRlbik7CisK KwkvKiB0d28gcGl4ZWxzIHBlciBjbG9jayBvbiBnbGsrICovCisJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCisJCWRlbiAqPSAyOworCisJ cmV0dXJuIERJVl9ST1VORF9VUChwaXhlbF9yYXRlICogbnVtLCBkZW4pOworfQorCitzdGF0aWMg aW50IHNrbF9wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CisJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJICAgICAgIHVuc2lnbmVkIGludCByb3Rh dGlvbikKK3sKKwlpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwW2NvbG9yX3BsYW5lXTsKKworCXN3 aXRjaCAoZmItPm1vZGlmaWVyKSB7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJLyoKKwkJICogVmFsaWRhdGVkIGxpbWl0IGlz IDRrLCBidXQgaGFzIDVrIHNob3VsZAorCQkgKiB3b3JrIGFwYXJ0IGZyb20gdGhlIGZvbGxvd2lu ZyBmZWF0dXJlczoKKwkJICogLSBZdGlsZSAoYWxyZWFkeSBsaW1pdGVkIHRvIDRrKQorCQkgKiAt IEZQMTYgKGFscmVhZHkgbGltaXRlZCB0byA0aykKKwkJICogLSByZW5kZXIgY29tcHJlc3Npb24g KGFscmVhZHkgbGltaXRlZCB0byA0aykKKwkJICogLSBLVk1SIHNwcml0ZSBhbmQgY3Vyc29yIChk b24ndCBjYXJlKQorCQkgKiAtIGhvcml6b250YWwgcGFubmluZyAoVE9ETyB2ZXJpZnkgdGhpcykK KwkJICogLSBwaXBlIGFuZCBwbGFuZSBzY2FsaW5nIChUT0RPIHZlcmlmeSB0aGlzKQorCQkgKi8K KwkJaWYgKGNwcCA9PSA4KQorCQkJcmV0dXJuIDQwOTY7CisJCWVsc2UKKwkJCXJldHVybiA1MTIw OworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEX0NDUzoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01D X0NDUzoKKwkJLyogRklYTUUgQVVYIHBsYW5lPyAqLworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lf VElMRUQ6CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6CisJCWlmIChjcHAgPT0gOCkK KwkJCXJldHVybiAyMDQ4OworCQllbHNlCisJCQlyZXR1cm4gNDA5NjsKKwlkZWZhdWx0OgorCQlN SVNTSU5HX0NBU0UoZmItPm1vZGlmaWVyKTsKKwkJcmV0dXJuIDIwNDg7CisJfQorfQorCitzdGF0 aWMgaW50IGdsa19wbGFuZV9tYXhfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsCisJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBy b3RhdGlvbikKK3sKKwlpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwW2NvbG9yX3BsYW5lXTsKKwor CXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJaWYgKGNwcCA9PSA4KQorCQkJcmV0dXJu IDQwOTY7CisJCWVsc2UKKwkJCXJldHVybiA1MTIwOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lf VElMRURfQ0NTOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKKwkJLyogRklY TUUgQVVYIHBsYW5lPyAqLworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CisJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6CisJCWlmIChjcHAgPT0gOCkKKwkJCXJldHVybiAyMDQ4 OworCQllbHNlCisJCQlyZXR1cm4gNTEyMDsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UoZmIt Pm1vZGlmaWVyKTsKKwkJcmV0dXJuIDIwNDg7CisJfQorfQorCitzdGF0aWMgaW50IGljbF9wbGFu ZV9taW5fd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkgICAgICAg aW50IGNvbG9yX3BsYW5lLAorCQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwkv KiBXYV8xNDAxMTI2NDY1NywgV2FfMTQwMTEwNTA1NjM6IGdlbjExKyAqLworCXN3aXRjaCAoZmIt PmZvcm1hdC0+Zm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCQlyZXR1cm4gMTg7CisJ Y2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJcmV0dXJuIDEwOworCWNhc2UgRFJNX0ZPUk1BVF9Y UkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FS R0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWFJH QjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1B VF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6CisJY2FzZSBEUk1f Rk9STUFUX1hWWVUyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNhc2UgRFJNX0ZP Uk1BVF9ZMjE2OgorCQlyZXR1cm4gNjsKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwkJcmV0dXJu IDIwOworCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCWNh c2UgRFJNX0ZPUk1BVF9QMDE2OgorCQlyZXR1cm4gMTI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0Ix NjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9S TUFUX0FSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2MTYxNkY6CisJY2Fz ZSBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNjoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTE2MTYx NjE2OgorCQlyZXR1cm4gNDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRp YyBpbnQgaWNsX3BsYW5lX21heF93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwKKwkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJv dGF0aW9uKQoreworCXJldHVybiA1MTIwOworfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9tYXhf aGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCWludCBjb2xvcl9w bGFuZSwKKwkJCQl1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJcmV0dXJuIDQwOTY7Cit9CisK K3N0YXRpYyBpbnQgaWNsX3BsYW5lX21heF9oZWlnaHQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCisJCQkJaW50IGNvbG9yX3BsYW5lLAorCQkJCXVuc2lnbmVkIGludCByb3RhdGlv bikKK3sKKwlyZXR1cm4gNDMyMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorc2tsX3BsYW5l X21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICAgICB1MzIgcGl4ZWxf Zm9ybWF0LCB1NjQgbW9kaWZpZXIsCisJCSAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQorewor CWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8gPSBkcm1fZm9ybWF0X2luZm8ocGl4 ZWxfZm9ybWF0KTsKKwlpbnQgY3BwID0gaW5mby0+Y3BwWzBdOworCisJLyoKKwkgKiAiVGhlIHN0 cmlkZSBpbiBieXRlcyBtdXN0IG5vdCBleGNlZWQgdGhlCisJICogb2YgdGhlIHNpemUgb2YgOEsg cGl4ZWxzIGFuZCAzMksgYnl0ZXMuIgorCSAqLworCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcw KHJvdGF0aW9uKSkKKwkJcmV0dXJuIG1pbig4MTkyLCAzMjc2OCAvIGNwcCk7CisJZWxzZQorCQly ZXR1cm4gbWluKDgxOTIgKiBjcHAsIDMyNzY4KTsKK30KKworCisvKiBQcmVvZmZzZXQgdmFsdWVz IGZvciBZVVYgdG8gUkdCIENvbnZlcnNpb24gKi8KKyNkZWZpbmUgUFJFT0ZGX1lVVl9UT19SR0Jf SEkJCTB4MTgwMAorI2RlZmluZSBQUkVPRkZfWVVWX1RPX1JHQl9NRQkJMHgxRjAwCisjZGVmaW5l IFBSRU9GRl9ZVVZfVE9fUkdCX0xPCQkweDE4MDAKKworI2RlZmluZSAgUk9GRih4KSAgICAgICAg ICAoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5lICBHT0ZGKHgpICAgICAgICAgICgoKHgp ICYgMHhmZmZmKSA8PCAwKQorI2RlZmluZSAgQk9GRih4KSAgICAgICAgICAoKCh4KSAmIDB4ZmZm ZikgPDwgMTYpCisKK3N0YXRpYyB2b2lkCitpY2xfcHJvZ3JhbV9pbnB1dF9jc2Moc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJZW51 bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKKworCXN0YXRpYyBjb25zdCB1MTYgaW5w dXRfY3NjX21hdHJpeFtdWzldID0geworCQkvKgorCQkgKiBCVC42MDEgZnVsbCByYW5nZSBZQ2JD ciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlzIDoKKwkJICog WzEuMDAwLCAwLjAwMCwgMS4zNzEsCisJCSAqICAxLjAwMCwgLTAuMzM2LCAtMC42OTgsCisJCSAq ICAxLjAwMCwgMS43MzIsIDAuMDAwMF0KKwkJICovCisJCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2MDFd ID0geworCQkJMHg3QUY4LCAweDc4MDAsIDB4MCwKKwkJCTB4OEIyOCwgMHg3ODAwLCAweDlBQzAs CisJCQkweDAsIDB4NzgwMCwgMHg3REQ4LAorCQl9LAorCQkvKgorCQkgKiBCVC43MDkgZnVsbCBy YW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlz IDoKKwkJICogWzEuMDAwLCAwLjAwMCwgMS41NzQsCisJCSAqICAxLjAwMCwgLTAuMTg3LCAtMC40 NjgsCisJCSAqICAxLjAwMCwgMS44NTUsIDAuMDAwMF0KKwkJICovCisJCVtEUk1fQ09MT1JfWUNC Q1JfQlQ3MDldID0geworCQkJMHg3Qzk4LCAweDc4MDAsIDB4MCwKKwkJCTB4OUVGOCwgMHg3ODAw LCAweEFDMDAsCisJCQkweDAsIDB4NzgwMCwgIDB4N0VEOCwKKwkJfSwKKwkJLyoKKwkJICogQlQu MjAyMCBmdWxsIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFuZ2UgUkdCCisJCSAqIFRoZSBtYXRyaXgg cmVxdWlyZWQgaXMgOgorCQkgKiBbMS4wMDAsIDAuMDAwLCAxLjQ3NCwKKwkJICogIDEuMDAwLCAt MC4xNjQ1LCAtMC41NzEzLAorCQkgKiAgMS4wMDAsIDEuODgxNCwgMC4wMDAwXQorCQkgKi8KKwkJ W0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0geworCQkJMHg3QkM4LCAweDc4MDAsIDB4MCwKKwkJ CTB4ODkyOCwgMHg3ODAwLCAweEFBODgsCisJCQkweDAsIDB4NzgwMCwgMHg3RjEwLAorCQl9LAor CX07CisKKwkvKiBNYXRyaXggZm9yIExpbWl0ZWQgUmFuZ2UgdG8gRnVsbCBSYW5nZSBDb252ZXJz aW9uICovCisJc3RhdGljIGNvbnN0IHUxNiBpbnB1dF9jc2NfbWF0cml4X2xyW11bOV0gPSB7CisJ CS8qCisJCSAqIEJULjYwMSBMaW10ZWQgcmFuZ2UgWUNiQ3IgLT4gZnVsbCByYW5nZSBSR0IKKwkJ ICogVGhlIG1hdHJpeCByZXF1aXJlZCBpcyA6CisJCSAqIFsxLjE2NDM4NCwgMC4wMDAsIDEuNTk2 MDI3LAorCQkgKiAgMS4xNjQzODQsIC0wLjM5MTc1LCAtMC44MTI4MTMsCisJCSAqICAxLjE2NDM4 NCwgMi4wMTcyMzIsIDAuMDAwMF0KKwkJICovCisJCVtEUk1fQ09MT1JfWUNCQ1JfQlQ2MDFdID0g eworCQkJMHg3Q0M4LCAweDc5NTAsIDB4MCwKKwkJCTB4OEQwMCwgMHg3OTUwLCAweDlDODgsCisJ CQkweDAsIDB4Nzk1MCwgMHg2ODEwLAorCQl9LAorCQkvKgorCQkgKiBCVC43MDkgTGltaXRlZCBy YW5nZSBZQ2JDciAtPiBmdWxsIHJhbmdlIFJHQgorCQkgKiBUaGUgbWF0cml4IHJlcXVpcmVkIGlz IDoKKwkJICogWzEuMTY0Mzg0LCAwLjAwMCwgMS43OTI3NDEsCisJCSAqICAxLjE2NDM4NCwgLTAu MjEzMjQ5LCAtMC41MzI5MDksCisJCSAqICAxLjE2NDM4NCwgMi4xMTI0MDIsIDAuMDAwMF0KKwkJ ICovCisJCVtEUk1fQ09MT1JfWUNCQ1JfQlQ3MDldID0geworCQkJMHg3RTU4LCAweDc5NTAsIDB4 MCwKKwkJCTB4ODg4OCwgMHg3OTUwLCAweEFEQTgsCisJCQkweDAsIDB4Nzk1MCwgIDB4Njg3MCwK KwkJfSwKKwkJLyoKKwkJICogQlQuMjAyMCBMaW1pdGVkIHJhbmdlIFlDYkNyIC0+IGZ1bGwgcmFu Z2UgUkdCCisJCSAqIFRoZSBtYXRyaXggcmVxdWlyZWQgaXMgOgorCQkgKiBbMS4xNjQsIDAuMDAw LCAxLjY3OCwKKwkJICogIDEuMTY0LCAtMC4xODczLCAtMC42NTA0LAorCQkgKiAgMS4xNjQsIDIu MTQxNywgMC4wMDAwXQorCQkgKi8KKwkJW0RSTV9DT0xPUl9ZQ0JDUl9CVDIwMjBdID0geworCQkJ MHg3RDcwLCAweDc5NTAsIDB4MCwKKwkJCTB4OEE2OCwgMHg3OTUwLCAweEFDMDAsCisJCQkweDAs IDB4Nzk1MCwgMHg2ODkwLAorCQl9LAorCX07CisJY29uc3QgdTE2ICpjc2M7CisKKwlpZiAocGxh bmVfc3RhdGUtPmh3LmNvbG9yX3JhbmdlID09IERSTV9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFKQor CQljc2MgPSBpbnB1dF9jc2NfbWF0cml4W3BsYW5lX3N0YXRlLT5ody5jb2xvcl9lbmNvZGluZ107 CisJZWxzZQorCQljc2MgPSBpbnB1dF9jc2NfbWF0cml4X2xyW3BsYW5lX3N0YXRlLT5ody5jb2xv cl9lbmNvZGluZ107CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRf Q1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAwKSwKKwkJCSAgUk9GRihjc2NbMF0pIHwgR09GRihj c2NbMV0pKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NP RUZGKHBpcGUsIHBsYW5lX2lkLCAxKSwKKwkJCSAgQk9GRihjc2NbMl0pKTsKKwlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAy KSwKKwkJCSAgUk9GRihjc2NbM10pIHwgR09GRihjc2NbNF0pKTsKKwlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCAzKSwKKwkJ CSAgQk9GRihjc2NbNV0pKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5Q VVRfQ1NDX0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA0KSwKKwkJCSAgUk9GRihjc2NbNl0pIHwgR09G Rihjc2NbN10pKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfSU5QVVRfQ1ND X0NPRUZGKHBpcGUsIHBsYW5lX2lkLCA1KSwKKwkJCSAgQk9GRihjc2NbOF0pKTsKKworCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9JTlBVVF9DU0NfUFJFT0ZGKHBpcGUsIHBsYW5l X2lkLCAwKSwKKwkJCSAgUFJFT0ZGX1lVVl9UT19SR0JfSEkpOworCWlmIChwbGFuZV9zdGF0ZS0+ aHcuY29sb3JfcmFuZ2UgPT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCisJCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LAorCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBw bGFuZV9pZCwgMSksCisJCQkJICAwKTsKKwllbHNlCisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LAorCQkJCSAgUExBTkVfSU5QVVRfQ1NDX1BSRU9GRihwaXBlLCBwbGFuZV9pZCwgMSksCisJ CQkJICBQUkVPRkZfWVVWX1RPX1JHQl9NRSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IFBMQU5FX0lOUFVUX0NTQ19QUkVPRkYocGlwZSwgcGxhbmVfaWQsIDIpLAorCQkJICBQUkVPRkZf WVVWX1RPX1JHQl9MTyk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsCisJCQkgIFBMQU5F X0lOUFVUX0NTQ19QT1NUT0ZGKHBpcGUsIHBsYW5lX2lkLCAwKSwgMHgwKTsKKwlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwKKwkJCSAgUExBTkVfSU5QVVRfQ1NDX1BPU1RPRkYocGlwZSwgcGxh bmVfaWQsIDEpLCAweDApOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LAorCQkJICBQTEFO RV9JTlBVVF9DU0NfUE9TVE9GRihwaXBlLCBwbGFuZV9pZCwgMiksIDB4MCk7Cit9CisKK3N0YXRp YyBib29sIGlzX3N1cmZhY2VfbGluZWFyKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LCBpbnQgY29sb3JfcGxhbmUpCit7CisJcmV0dXJuIGZiLT5tb2RpZmllciA9PSBEUk1fRk9STUFU X01PRF9MSU5FQVIgfHwKKwkgICAgICAgaXNfZ2VuMTJfY2NzX3BsYW5lKGZiLCBjb2xvcl9wbGFu ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2tsX3BsYW5lX3N0cmlkZV9tdWx0KGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCQkgIGludCBjb2xvcl9wbGFuZSwgdW5z aWduZWQgaW50IHJvdGF0aW9uKQoreworCS8qCisJICogVGhlIHN0cmlkZSBpcyBlaXRoZXIgZXhw cmVzc2VkIGFzIGEgbXVsdGlwbGUgb2YgNjQgYnl0ZXMgY2h1bmtzIGZvcgorCSAqIGxpbmVhciBi dWZmZXJzIG9yIGluIG51bWJlciBvZiB0aWxlcyBmb3IgdGlsZWQgYnVmZmVycy4KKwkgKi8KKwlp ZiAoaXNfc3VyZmFjZV9saW5lYXIoZmIsIGNvbG9yX3BsYW5lKSkKKwkJcmV0dXJuIDY0OworCWVs c2UgaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQorCQlyZXR1cm4gaW50ZWxf dGlsZV9oZWlnaHQoZmIsIGNvbG9yX3BsYW5lKTsKKwllbHNlCisJCXJldHVybiBpbnRlbF90aWxl X3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Cit9CisKK3N0YXRpYyB1MzIgc2tsX3BsYW5l X3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJ ICAgIGludCBjb2xvcl9wbGFuZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9z dGF0ZS0+aHcucm90YXRpb247CisJdTMyIHN0cmlkZSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFu ZVtjb2xvcl9wbGFuZV0uc3RyaWRlOworCisJaWYgKGNvbG9yX3BsYW5lID49IGZiLT5mb3JtYXQt Pm51bV9wbGFuZXMpCisJCXJldHVybiAwOworCisJcmV0dXJuIHN0cmlkZSAvIHNrbF9wbGFuZV9z dHJpZGVfbXVsdChmYiwgY29sb3JfcGxhbmUsIHJvdGF0aW9uKTsKK30KKworc3RhdGljIHZvaWQK K3NrbF9kaXNhYmxlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCSAgY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0gcGxh bmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlw ZTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9w cml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJaWYgKGljbF9pc19oZHJfcGxhbmUoZGV2 X3ByaXYsIHBsYW5lX2lkKSkKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX0NV U19DVEwocGlwZSwgcGxhbmVfaWQpLCAwKTsKKworCXNrbF93cml0ZV9wbGFuZV93bShwbGFuZSwg Y3J0Y19zdGF0ZSk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQ1RMKHBp cGUsIHBsYW5lX2lkKSwgMCk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NV UkYocGlwZSwgcGxhbmVfaWQpLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9w cml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgYm9vbAorc2tsX3BsYW5l X2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkgICAgICAgZW51bSBw aXBlICpwaXBlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBv d2VyX2RvbWFpbjsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkID0gcGxhbmUtPmlkOworCWludGVs X3dha2VyZWZfdCB3YWtlcmVmOworCWJvb2wgcmV0OworCisJcG93ZXJfZG9tYWluID0gUE9XRVJf RE9NQUlOX1BJUEUocGxhbmUtPnBpcGUpOworCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2Vy X2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21haW4pOworCWlmICghd2FrZXJlZikK KwkJcmV0dXJuIGZhbHNlOworCisJcmV0ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVf Q1RMKHBsYW5lLT5waXBlLCBwbGFuZV9pZCkpICYgUExBTkVfQ1RMX0VOQUJMRTsKKworCSpwaXBl ID0gcGxhbmUtPnBpcGU7CisKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93 ZXJfZG9tYWluLCB3YWtlcmVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgc2ts X3BsYW5lX2N0bF9mb3JtYXQodTMyIHBpeGVsX2Zvcm1hdCkKK3sKKwlzd2l0Y2ggKHBpeGVsX2Zv cm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9DODoKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRf SU5ERVhFRDsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZP Uk1BVF9SR0JfNTY1OworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JN QVRfQUJHUjg4ODg6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfODg4OCB8IFBMQU5F X0NUTF9PUkRFUl9SR0JYOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9G T1JNQVRfQVJHQjg4ODg6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfODg4ODsKKwlj YXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEw OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzIxMDEwMTAgfCBQTEFORV9DVExfT1JE RVJfUkdCWDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFU X0FSR0IyMTAxMDEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9YUkdCXzIxMDEwMTA7CisJ Y2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2 MTYxNkY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0JfMTYxNjE2MTZGIHwgUExBTkVf Q1RMX09SREVSX1JHQlg7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6CisJY2FzZSBE Uk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJCXJldHVybiBQTEFORV9DVExfRk9STUFUX1hSR0Jf MTYxNjE2MTZGOworCWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKKwkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfWFlVVjsKKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKKwkJcmV0dXJuIFBMQU5FX0NU TF9GT1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9ZVVlWOworCWNhc2UgRFJNX0ZPUk1B VF9ZVllVOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9ZVVY0MjIgfCBQTEFORV9DVExfWVVW NDIyX1lWWVU7CisJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJCXJldHVybiBQTEFORV9DVExfRk9S TUFUX1lVVjQyMiB8IFBMQU5FX0NUTF9ZVVY0MjJfVVlWWTsKKwljYXNlIERSTV9GT1JNQVRfVllV WToKKwkJcmV0dXJuIFBMQU5FX0NUTF9GT1JNQVRfWVVWNDIyIHwgUExBTkVfQ1RMX1lVVjQyMl9W WVVZOworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9O VjEyOworCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9Q MDEwOworCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9Q MDEyOworCWNhc2UgRFJNX0ZPUk1BVF9QMDE2OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9Q MDE2OworCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9Z MjEwOworCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9Z MjEyOworCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCQlyZXR1cm4gUExBTkVfQ1RMX0ZPUk1BVF9Z MjE2OworCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9G T1JNQVRfWTQxMDsKKwljYXNlIERSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OgorCQlyZXR1cm4g UExBTkVfQ1RMX0ZPUk1BVF9ZNDEyOworCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6CisJ CXJldHVybiBQTEFORV9DVExfRk9STUFUX1k0MTY7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNF KHBpeGVsX2Zvcm1hdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgc2tsX3Bs YW5lX2N0bF9hbHBoYShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KQoreworCWlmICghcGxhbmVfc3RhdGUtPmh3LmZiLT5mb3JtYXQtPmhhc19hbHBoYSkKKwkJcmV0 dXJuIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFOworCisJc3dpdGNoIChwbGFuZV9zdGF0ZS0+aHcu cGl4ZWxfYmxlbmRfbW9kZSkgeworCWNhc2UgRFJNX01PREVfQkxFTkRfUElYRUxfTk9ORToKKwkJ cmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9ESVNBQkxFOworCWNhc2UgRFJNX01PREVfQkxFTkRfUFJF TVVMVEk6CisJCXJldHVybiBQTEFORV9DVExfQUxQSEFfU1dfUFJFTVVMVElQTFk7CisJY2FzZSBE Uk1fTU9ERV9CTEVORF9DT1ZFUkFHRToKKwkJcmV0dXJuIFBMQU5FX0NUTF9BTFBIQV9IV19QUkVN VUxUSVBMWTsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UocGxhbmVfc3RhdGUtPmh3LnBpeGVs X2JsZW5kX21vZGUpOworCQlyZXR1cm4gUExBTkVfQ1RMX0FMUEhBX0RJU0FCTEU7CisJfQorfQor CitzdGF0aWMgdTMyIGdsa19wbGFuZV9jb2xvcl9jdGxfYWxwaGEoY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlpZiAoIXBsYW5lX3N0YXRlLT5ody5mYi0+ Zm9ybWF0LT5oYXNfYWxwaGEpCisJCXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9ESVNBQkxFOwor CisJc3dpdGNoIChwbGFuZV9zdGF0ZS0+aHcucGl4ZWxfYmxlbmRfbW9kZSkgeworCWNhc2UgRFJN X01PREVfQkxFTkRfUElYRUxfTk9ORToKKwkJcmV0dXJuIFBMQU5FX0NPTE9SX0FMUEhBX0RJU0FC TEU7CisJY2FzZSBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSToKKwkJcmV0dXJuIFBMQU5FX0NPTE9S X0FMUEhBX1NXX1BSRU1VTFRJUExZOworCWNhc2UgRFJNX01PREVfQkxFTkRfQ09WRVJBR0U6CisJ CXJldHVybiBQTEFORV9DT0xPUl9BTFBIQV9IV19QUkVNVUxUSVBMWTsKKwlkZWZhdWx0OgorCQlN SVNTSU5HX0NBU0UocGxhbmVfc3RhdGUtPmh3LnBpeGVsX2JsZW5kX21vZGUpOworCQlyZXR1cm4g UExBTkVfQ09MT1JfQUxQSEFfRElTQUJMRTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgc2tsX3BsYW5l X2N0bF90aWxpbmcodTY0IGZiX21vZGlmaWVyKQoreworCXN3aXRjaCAoZmJfbW9kaWZpZXIpIHsK KwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVBUjoKKwkJYnJlYWs7CisJY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWF9USUxFRDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9YOworCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lfVElMRUQ6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWTsKKwljYXNlIEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwg UExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKKwljYXNlIEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUzoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwK KwkJICAgICAgIFBMQU5FX0NUTF9SRU5ERVJfREVDT01QUkVTU0lPTl9FTkFCTEUgfAorCQkgICAg ICAgUExBTkVfQ1RMX0NMRUFSX0NPTE9SX0RJU0FCTEU7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRF9HRU4xMl9NQ19DQ1M6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWSB8IFBMQU5F X0NUTF9NRURJQV9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9Z Zl9USUxFRDoKKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRjsKKwljYXNlIEk5MTVfRk9STUFU X01PRF9ZZl9USUxFRF9DQ1M6CisJCXJldHVybiBQTEFORV9DVExfVElMRURfWUYgfCBQTEFORV9D VExfUkVOREVSX0RFQ09NUFJFU1NJT05fRU5BQkxFOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FT RShmYl9tb2RpZmllcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgc2tsX3Bs YW5lX2N0bF9yb3RhdGUodW5zaWduZWQgaW50IHJvdGF0ZSkKK3sKKwlzd2l0Y2ggKHJvdGF0ZSkg eworCWNhc2UgRFJNX01PREVfUk9UQVRFXzA6CisJCWJyZWFrOworCS8qCisJICogRFJNX01PREVf Uk9UQVRFXyBpcyBjb3VudGVyIGNsb2Nrd2lzZSB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBYcmFu ZHIKKwkgKiB3aGlsZSBpOTE1IEhXIHJvdGF0aW9uIGlzIGNsb2Nrd2lzZSwgdGhhdHMgd2h5IHRo aXMgc3dhcHBpbmcuCisJICovCisJY2FzZSBEUk1fTU9ERV9ST1RBVEVfOTA6CisJCXJldHVybiBQ TEFORV9DVExfUk9UQVRFXzI3MDsKKwljYXNlIERSTV9NT0RFX1JPVEFURV8xODA6CisJCXJldHVy biBQTEFORV9DVExfUk9UQVRFXzE4MDsKKwljYXNlIERSTV9NT0RFX1JPVEFURV8yNzA6CisJCXJl dHVybiBQTEFORV9DVExfUk9UQVRFXzkwOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShyb3Rh dGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNubF9wbGFuZV9jdGxfZmxp cCh1bnNpZ25lZCBpbnQgcmVmbGVjdCkKK3sKKwlzd2l0Y2ggKHJlZmxlY3QpIHsKKwljYXNlIDA6 CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfUkVGTEVDVF9YOgorCQlyZXR1cm4gUExBTkVfQ1RM X0ZMSVBfSE9SSVpPTlRBTDsKKwljYXNlIERSTV9NT0RFX1JFRkxFQ1RfWToKKwlkZWZhdWx0Ogor CQlNSVNTSU5HX0NBU0UocmVmbGVjdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1 MzIgc2tsX3BsYW5lX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo Y3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOworCXUzMiBwbGFuZV9jdGwgPSAwOworCisJaWYg KGNydGNfc3RhdGUtPnVhcGkuYXN5bmNfZmxpcCkKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9B U1lOQ19GTElQOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5J TEFLRShkZXZfcHJpdikpCisJCXJldHVybiBwbGFuZV9jdGw7CisKKwlpZiAoY3J0Y19zdGF0ZS0+ Z2FtbWFfZW5hYmxlKQorCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1BJUEVfR0FNTUFfRU5BQkxF OworCisJaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCisJCXBsYW5lX2N0bCB8PSBQTEFORV9D VExfUElQRV9DU0NfRU5BQkxFOworCisJcmV0dXJuIHBsYW5lX2N0bDsKK30KKworc3RhdGljIHUz MiBza2xfcGxhbmVfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAorCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0 ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9 IHBsYW5lX3N0YXRlLT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0 ZS0+aHcucm90YXRpb247CisJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkg KmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKKwl1MzIgcGxhbmVfY3RsOworCisJcGxhbmVfY3Rs ID0gUExBTkVfQ1RMX0VOQUJMRTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTAgJiYg IUlTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKSB7CisJCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3Rs X2FscGhhKHBsYW5lX3N0YXRlKTsKKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9QTEFORV9HQU1N QV9ESVNBQkxFOworCisJCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfZW5jb2RpbmcgPT0gRFJN X0NPTE9SX1lDQkNSX0JUNzA5KQorCQkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9ZVVZfVE9fUkdC X0NTQ19GT1JNQVRfQlQ3MDk7CisKKwkJaWYgKHBsYW5lX3N0YXRlLT5ody5jb2xvcl9yYW5nZSA9 PSBEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSkKKwkJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExf WVVWX1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRTsKKwl9CisKKwlwbGFuZV9jdGwgfD0gc2tsX3Bs YW5lX2N0bF9mb3JtYXQoZmItPmZvcm1hdC0+Zm9ybWF0KTsKKwlwbGFuZV9jdGwgfD0gc2tsX3Bs YW5lX2N0bF90aWxpbmcoZmItPm1vZGlmaWVyKTsKKwlwbGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0 bF9yb3RhdGUocm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfTUFTSyk7CisKKwlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSAxMCkKKwkJcGxhbmVfY3RsIHw9IGNubF9wbGFuZV9jdGxfZmxpcChy b3RhdGlvbiAmCisJCQkJCQlEUk1fTU9ERV9SRUZMRUNUX01BU0spOworCisJaWYgKGtleS0+Zmxh Z3MgJiBJOTE1X1NFVF9DT0xPUktFWV9ERVNUSU5BVElPTikKKwkJcGxhbmVfY3RsIHw9IFBMQU5F X0NUTF9LRVlfRU5BQkxFX0RFU1RJTkFUSU9OOworCWVsc2UgaWYgKGtleS0+ZmxhZ3MgJiBJOTE1 X1NFVF9DT0xPUktFWV9TT1VSQ0UpCisJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfS0VZX0VOQUJM RV9TT1VSQ0U7CisKKwlyZXR1cm4gcGxhbmVfY3RsOworfQorCitzdGF0aWMgdTMyIGdsa19wbGFu ZV9jb2xvcl9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNf c3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsKKwl1MzIgcGxhbmVfY29sb3JfY3RsID0gMDsKKworCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQorCQlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOwor CisJaWYgKGNydGNfc3RhdGUtPmdhbW1hX2VuYWJsZSkKKwkJcGxhbmVfY29sb3JfY3RsIHw9IFBM QU5FX0NPTE9SX1BJUEVfR0FNTUFfRU5BQkxFOworCisJaWYgKGNydGNfc3RhdGUtPmNzY19lbmFi bGUpCisJCXBsYW5lX2NvbG9yX2N0bCB8PSBQTEFORV9DT0xPUl9QSVBFX0NTQ19FTkFCTEU7CisK KwlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOworfQorCitzdGF0aWMgdTMyIGdsa19wbGFuZV9jb2xv cl9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAg ICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51 YXBpLnBsYW5lLT5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxh bmVfc3RhdGUtPmh3LmZiOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9w bGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJdTMyIHBsYW5lX2NvbG9yX2N0bCA9IDA7 CisKKwlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfUExBTkVfR0FNTUFfRElTQUJMRTsK KwlwbGFuZV9jb2xvcl9jdGwgfD0gZ2xrX3BsYW5lX2NvbG9yX2N0bF9hbHBoYShwbGFuZV9zdGF0 ZSk7CisKKwlpZiAoZmItPmZvcm1hdC0+aXNfeXV2ICYmICFpY2xfaXNfaGRyX3BsYW5lKGRldl9w cml2LCBwbGFuZS0+aWQpKSB7CisJCXN3aXRjaCAocGxhbmVfc3RhdGUtPmh3LmNvbG9yX2VuY29k aW5nKSB7CisJCWNhc2UgRFJNX0NPTE9SX1lDQkNSX0JUNzA5OgorCQkJcGxhbmVfY29sb3JfY3Rs IHw9IFBMQU5FX0NPTE9SX0NTQ19NT0RFX1lVVjcwOV9UT19SR0I3MDk7CisJCQlicmVhazsKKwkJ Y2FzZSBEUk1fQ09MT1JfWUNCQ1JfQlQyMDIwOgorCQkJcGxhbmVfY29sb3JfY3RsIHw9CisJCQkJ UExBTkVfQ09MT1JfQ1NDX01PREVfWVVWMjAyMF9UT19SR0IyMDIwOworCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQlwbGFuZV9jb2xvcl9jdGwgfD0KKwkJCQlQTEFORV9DT0xPUl9DU0NfTU9ERV9Z VVY2MDFfVE9fUkdCNjAxOworCQl9CisJCWlmIChwbGFuZV9zdGF0ZS0+aHcuY29sb3JfcmFuZ2Ug PT0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0UpCisJCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExB TkVfQ09MT1JfWVVWX1JBTkdFX0NPUlJFQ1RJT05fRElTQUJMRTsKKwl9IGVsc2UgaWYgKGZiLT5m b3JtYXQtPmlzX3l1dikgeworCQlwbGFuZV9jb2xvcl9jdGwgfD0gUExBTkVfQ09MT1JfSU5QVVRf Q1NDX0VOQUJMRTsKKwl9CisKKwlyZXR1cm4gcGxhbmVfY29sb3JfY3RsOworfQorCitzdGF0aWMg aW50CittYWluX3RvX2Njc19wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwg aW50IG1haW5fcGxhbmUpCit7CisJZHJtX1dBUk5fT04oZmItPmRldiwgIWlzX2Njc19tb2RpZmll cihmYi0+bW9kaWZpZXIpIHx8CisJCSAgICAobWFpbl9wbGFuZSAmJiBtYWluX3BsYW5lID49IGZi LT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyKSk7CisKKwlyZXR1cm4gZmItPmZvcm1hdC0+bnVtX3Bs YW5lcyAvIDIgKyBtYWluX3BsYW5lOworfQorCitpbnQgc2tsX2Njc190b19tYWluX3BsYW5lKGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY2NzX3BsYW5lKQoreworCWRybV9X QVJOX09OKGZiLT5kZXYsICFpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSB8fAorCQkgICAg Y2NzX3BsYW5lIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lcyAvIDIpOworCisJcmV0dXJuIGNjc19w bGFuZSAtIGZiLT5mb3JtYXQtPm51bV9wbGFuZXMgLyAyOworfQorCisKK3N0YXRpYyBpbnQKK3Nr bF9tYWluX3RvX2F1eF9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50 IG1haW5fcGxhbmUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1 KGZiLT5kZXYpOworCisJaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKQorCQlyZXR1 cm4gbWFpbl90b19jY3NfcGxhbmUoZmIsIG1haW5fcGxhbmUpOworCWVsc2UgaWYgKElOVEVMX0dF TihpOTE1KSA8IDExICYmCisJCSBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihm Yi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZAorc2tsX3Byb2dyYW1fcGxhbmUoc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSwKKwkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK KwkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkgIGlu dCBjb2xvcl9wbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5l LT5pZDsKKwllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOworCWNvbnN0IHN0cnVjdCBkcm1f aW50ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7CisJdTMyIHN1 cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjb2xvcl9wbGFuZV0ub2Zmc2V0Owor CXUzMiBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFuZSk7 CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 CisJaW50IGF1eF9wbGFuZSA9IHNrbF9tYWluX3RvX2F1eF9wbGFuZShmYiwgY29sb3JfcGxhbmUp OworCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueDE7CisJaW50IGNydGNfeSA9 IHBsYW5lX3N0YXRlLT51YXBpLmRzdC55MTsKKwl1MzIgeCA9IHBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtjb2xvcl9wbGFuZV0ueDsKKwl1MzIgeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtj b2xvcl9wbGFuZV0ueTsKKwl1MzIgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUt PnVhcGkuc3JjKSA+PiAxNjsKKwl1MzIgc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0 YXRlLT51YXBpLnNyYykgPj4gMTY7CisJdTggYWxwaGEgPSBwbGFuZV9zdGF0ZS0+aHcuYWxwaGEg Pj4gODsKKwl1MzIgcGxhbmVfY29sb3JfY3RsID0gMCwgYXV4X2Rpc3QgPSAwOworCXVuc2lnbmVk IGxvbmcgaXJxZmxhZ3M7CisJdTMyIGtleW1zaywga2V5bWF4OworCXUzMiBwbGFuZV9jdGwgPSBw bGFuZV9zdGF0ZS0+Y3RsOworCisJcGxhbmVfY3RsIHw9IHNrbF9wbGFuZV9jdGxfY3J0YyhjcnRj X3N0YXRlKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxB S0UoZGV2X3ByaXYpKQorCQlwbGFuZV9jb2xvcl9jdGwgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfY3Rs IHwKKwkJCWdsa19wbGFuZV9jb2xvcl9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKKworCS8qIFNpemVz IGFyZSAwIGJhc2VkICovCisJc3JjX3ctLTsKKwlzcmNfaC0tOworCisJa2V5bWF4ID0gKGtleS0+ bWF4X3ZhbHVlICYgMHhmZmZmZmYpIHwgUExBTkVfS0VZTUFYX0FMUEhBKGFscGhhKTsKKworCWtl eW1zayA9IGtleS0+Y2hhbm5lbF9tYXNrICYgMHg3ZmZmZmZmOworCWlmIChhbHBoYSA8IDB4ZmYp CisJCWtleW1zayB8PSBQTEFORV9LRVlNU0tfQUxQSEFfRU5BQkxFOworCisJLyogVGhlIHNjYWxl ciB3aWxsIGhhbmRsZSB0aGUgb3V0cHV0IHBvc2l0aW9uICovCisJaWYgKHBsYW5lX3N0YXRlLT5z Y2FsZXJfaWQgPj0gMCkgeworCQljcnRjX3ggPSAwOworCQljcnRjX3kgPSAwOworCX0KKworCWlm IChhdXhfcGxhbmUpIHsKKwkJYXV4X2Rpc3QgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4 X3BsYW5lXS5vZmZzZXQgLSBzdXJmX2FkZHI7CisKKwkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg PCAxMikKKwkJCWF1eF9kaXN0IHw9IHNrbF9wbGFuZV9zdHJpZGUocGxhbmVfc3RhdGUsIGF1eF9w bGFuZSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywg aXJxZmxhZ3MpOworCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5FX1NUUklERShw aXBlLCBwbGFuZV9pZCksIHN0cmlkZSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBM QU5FX1BPUyhwaXBlLCBwbGFuZV9pZCksCisJCQkgIChjcnRjX3kgPDwgMTYpIHwgY3J0Y194KTsK KwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU0laRShwaXBlLCBwbGFuZV9pZCks CisJCQkgIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgUExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmVfaWQpLCBhdXhfZGlzdCk7CisKKwlpZiAo aWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKQorCQlpbnRlbF9kZV93cml0ZV9m dyhkZXZfcHJpdiwgUExBTkVfQ1VTX0NUTChwaXBlLCBwbGFuZV9pZCksCisJCQkJICBwbGFuZV9z dGF0ZS0+Y3VzX2N0bCk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19H RU1JTklMQUtFKGRldl9wcml2KSkKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5F X0NPTE9SX0NUTChwaXBlLCBwbGFuZV9pZCksCisJCQkJICBwbGFuZV9jb2xvcl9jdGwpOworCisJ aWYgKGZiLT5mb3JtYXQtPmlzX3l1diAmJiBpY2xfaXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFu ZV9pZCkpCisJCWljbF9wcm9ncmFtX2lucHV0X2NzYyhwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVf c3RhdGUpOworCisJc2tsX3dyaXRlX3BsYW5lX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKKworCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9LRVlWQUwocGlwZSwgcGxhbmVfaWQpLAor CQkJICBrZXktPm1pbl92YWx1ZSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFBMQU5F X0tFWU1TSyhwaXBlLCBwbGFuZV9pZCksIGtleW1zayk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFBMQU5FX0tFWU1BWChwaXBlLCBwbGFuZV9pZCksIGtleW1heCk7CisKKwlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAg KHkgPDwgMTYpIHwgeCk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQorCQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZV9pZCks CisJCQkJICAocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLnkgPDwgMTYpIHwgcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lWzFdLngpOworCisJaWYgKCFkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9k ZXNldCgmY3J0Y19zdGF0ZS0+dWFwaSkpCisJCWludGVsX3BzcjJfcHJvZ3JhbV9wbGFuZV9zZWxf ZmV0Y2gocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFuZSk7CisKKwkv KgorCSAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIHNlbGYtYXJtcyBpZiB0aGUgcGxhbmUgd2FzIHBy ZXZpb3VzbHkKKwkgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVuYWJsZSBhdG9t aWMgYnkgd3JpdGluZworCSAqIHRoZSBjb250cm9sIHJlZ2lzdGVyIGp1c3QgYmVmb3JlIHRoZSBz dXJmYWNlIHJlZ2lzdGVyLgorCSAqLworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFO RV9DVEwocGlwZSwgcGxhbmVfaWQpLCBwbGFuZV9jdGwpOworCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAgaW50ZWxfcGxhbmVfZ2d0 dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgc3VyZl9hZGRyKTsKKworCWlmIChwbGFuZV9zdGF0ZS0+ c2NhbGVyX2lkID49IDApCisJCXNrbF9wcm9ncmFtX3NjYWxlcihwbGFuZSwgY3J0Y19zdGF0ZSwg cGxhbmVfc3RhdGUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29y ZS5sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitza2xfcGxhbmVfYXN5bmNfZmxp cChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJ ZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHBsYW5lLT5pZDsKKwllbnVtIHBpcGUgcGlwZSA9IHBs YW5lLT5waXBlOworCXUzMiBzdXJmX2FkZHIgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0u b2Zmc2V0OworCXUzMiBwbGFuZV9jdGwgPSBwbGFuZV9zdGF0ZS0+Y3RsOworCisJcGxhbmVfY3Rs IHw9IHNrbF9wbGFuZV9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKKworCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBQTEFORV9DVEwocGlwZSwgcGxhbmVfaWQpLCBwbGFuZV9jdGwpOworCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwKKwkJCSAg aW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgc3VyZl9hZGRyKTsKKworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwor fQorCitzdGF0aWMgdm9pZAorc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAorCQkgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCWludCBjb2xv cl9wbGFuZSA9IDA7CisKKwlpZiAocGxhbmVfc3RhdGUtPnBsYW5hcl9saW5rZWRfcGxhbmUgJiYg IXBsYW5lX3N0YXRlLT5wbGFuYXJfc2xhdmUpCisJCS8qIFByb2dyYW0gdGhlIFVWIHBsYW5lIG9u IHBsYW5hciBtYXN0ZXIgKi8KKwkJY29sb3JfcGxhbmUgPSAxOworCisJc2tsX3Byb2dyYW1fcGxh bmUocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBjb2xvcl9wbGFuZSk7Cit9CisKK3N0 YXRpYyBib29sIGludGVsX2Zvcm1hdF9pc19wMDF4KHUzMiBmb3JtYXQpCit7CisJc3dpdGNoIChm b3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoKKwljYXNlIERSTV9GT1JNQVRfUDAxMjoK KwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0 dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGludCBza2xfcGxhbmVfY2hlY2tfZmIoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYp OworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZi OworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKKwlz dHJ1Y3QgZHJtX2Zvcm1hdF9uYW1lX2J1ZiBmb3JtYXRfbmFtZTsKKworCWlmICghZmIpCisJCXJl dHVybiAwOworCisJaWYgKHJvdGF0aW9uICYgfihEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RF X1JPVEFURV8xODApICYmCisJICAgIGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7CisJ CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJSQyBzdXBwb3J0IG9ubHkgd2l0 aCAwLzE4MCBkZWdyZWUgcm90YXRpb24gKCV4KVxuIiwKKwkJCSAgICByb3RhdGlvbik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCWlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCAm JgorCSAgICBmYi0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKSB7CisJCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJob3Jpem9udGFsIGZsaXAgaXMgbm90IHN1 cHBvcnRlZCB3aXRoIGxpbmVhciBzdXJmYWNlIGZvcm1hdHNcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKKwkJaWYg KGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgorCQkgICAgZmItPm1v ZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkgeworCQkJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sCisJCQkJICAgICJZL1lmIHRpbGluZyByZXF1aXJlZCBmb3IgOTAvMjcwIVxu Iik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qCisJCSAqIDkwLzI3MCBpcyBub3Qg YWxsb3dlZCB3aXRoIFJHQjY0IDE2OjE2OjE2OjE2IGFuZAorCQkgKiBJbmRleGVkIDgtYml0LiBS R0IgMTYtYml0IDU6Njo1IGlzIGFsbG93ZWQgZ2VuMTEgb253YXJkcy4KKwkJICovCisJCXN3aXRj aCAoZmItPmZvcm1hdC0+Zm9ybWF0KSB7CisJCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKKwkJCQlicmVhazsKKwkJCWZhbGx0aHJvdWdo OworCQljYXNlIERSTV9GT1JNQVRfQzg6CisJCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZG OgorCQljYXNlIERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RjoKKwkJY2FzZSBEUk1fRk9STUFUX0FS R0IxNjE2MTYxNkY6CisJCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgorCQljYXNlIERS TV9GT1JNQVRfWTIxMDoKKwkJY2FzZSBEUk1fRk9STUFUX1kyMTI6CisJCWNhc2UgRFJNX0ZPUk1B VF9ZMjE2OgorCQljYXNlIERSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OgorCQljYXNlIERSTV9G T1JNQVRfWFZZVTE2MTYxNjE2OgorCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJ ICAgICJVbnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQgJXMgZm9yIDkwLzI3MCFcbiIsCisJCQkJICAg IGRybV9nZXRfZm9ybWF0X25hbWUoZmItPmZvcm1hdC0+Zm9ybWF0LAorCQkJCQkJCSZmb3JtYXRf bmFtZSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQor CX0KKworCS8qIFktdGlsaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSUYtSUQgSW50ZXJsYWNlIG1v ZGUgKi8KKwlpZiAoY3J0Y19zdGF0ZS0+aHcuZW5hYmxlICYmCisJICAgIGNydGNfc3RhdGUtPmh3 LmFkanVzdGVkX21vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSAmJgorCSAgICAo ZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEIHx8CisJICAgICBmYi0+bW9k aWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEIHx8CisJICAgICBmYi0+bW9kaWZpZXIg PT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8CisJICAgICBmYi0+bW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUyB8fAorCSAgICAgZmItPm1vZGlmaWVyID09IEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUyB8fAorCSAgICAgZmItPm1vZGlmaWVy ID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUykpIHsKKwkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgIlkvWWYgdGlsaW5nIG5vdCBzdXBwb3J0ZWQgaW4g SUYtSUQgbW9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdhXzE2MDYwNTQx ODg6dGdsICovCisJaWYgKElTX1RJR0VSTEFLRShkZXZfcHJpdikgJiYKKwkgICAgcGxhbmVfc3Rh dGUtPmNrZXkuZmxhZ3MgJiBJOTE1X1NFVF9DT0xPUktFWV9TT1VSQ0UgJiYKKwkgICAgaW50ZWxf Zm9ybWF0X2lzX3AwMXgoZmItPmZvcm1hdC0+Zm9ybWF0KSkgeworCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKKwkJCSAgICAiU291cmNlIGNvbG9yIGtleWluZyBub3Qgc3VwcG9ydGVkIHdp dGggUDAxeCBmb3JtYXRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrX2RzdF9jb29yZGluYXRlcyhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkJICAgY29uc3Qgc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYp OworCWludCBjcnRjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueDE7CisJaW50IGNydGNfdyA9 IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOworCWludCBwaXBlX3NyY193 ID0gY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdzsKKworCS8qCisJICogRGlzcGxheSBXQSAjMTE3NTog Y25sLGdsaworCSAqIFBsYW5lcyBvdGhlciB0aGFuIHRoZSBjdXJzb3IgbWF5IGNhdXNlIEZJRk8g dW5kZXJmbG93IGFuZCBkaXNwbGF5CisJICogY29ycnVwdGlvbiBpZiBzdGFydGluZyBsZXNzIHRo YW4gNCBwaXhlbHMgZnJvbSB0aGUgcmlnaHQgZWRnZSBvZgorCSAqIHRoZSBzY3JlZW4uCisJICog QmVzaWRlcyB0aGUgYWJvdmUgV0EgZml4IHRoZSBzaW1pbGFyIHByb2JsZW0sIHdoZXJlIHBsYW5l cyBvdGhlcgorCSAqIHRoYW4gdGhlIGN1cnNvciBlbmRpbmcgbGVzcyB0aGFuIDQgcGl4ZWxzIGZy b20gdGhlIGxlZnQgZWRnZSBvZiB0aGUKKwkgKiBzY3JlZW4gbWF5IGNhdXNlIEZJRk8gdW5kZXJm bG93IGFuZCBkaXNwbGF5IGNvcnJ1cHRpb24uCisJICovCisJaWYgKChJU19HRU1JTklMQUtFKGRl dl9wcml2KSB8fCBJU19DQU5OT05MQUtFKGRldl9wcml2KSkgJiYKKwkgICAgKGNydGNfeCArIGNy dGNfdyA8IDQgfHwgY3J0Y194ID4gcGlwZV9zcmNfdyAtIDQpKSB7CisJCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAorCQkJICAgICJyZXF1ZXN0ZWQgcGxhbmUgWCAlcyBwb3NpdGlvbiAlZCBp bnZhbGlkICh2YWxpZCByYW5nZSAlZC0lZClcbiIsCisJCQkgICAgY3J0Y194ICsgY3J0Y193IDwg NCA/ICJlbmQiIDogInN0YXJ0IiwKKwkJCSAgICBjcnRjX3ggKyBjcnRjX3cgPCA0ID8gY3J0Y194 ICsgY3J0Y193IDogY3J0Y194LAorCQkJICAgIDQsIHBpcGVfc3JjX3cgLSA0KTsKKwkJcmV0dXJu IC1FUkFOR0U7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX2No ZWNrX252MTJfcm90YXRpb24oY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRl LT5ody5mYjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRp b247CisJaW50IHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykg Pj4gMTY7CisKKwkvKiBEaXNwbGF5IFdBICMxMTA2ICovCisJaWYgKGludGVsX2Zvcm1hdF9pbmZv X2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikgJiYKKwkgICAgc3Jj X3cgJiAzICYmCisJICAgIChyb3RhdGlvbiA9PSBEUk1fTU9ERV9ST1RBVEVfMjcwIHx8CisJICAg ICByb3RhdGlvbiA9PSAoRFJNX01PREVfUkVGTEVDVF9YIHwgRFJNX01PREVfUk9UQVRFXzkwKSkp IHsKKwkJRFJNX0RFQlVHX0tNUygic3JjIHdpZHRoIG11c3QgYmUgbXVsdGlwbGUgb2YgNCBmb3Ig cm90YXRlZCBwbGFuYXIgWVVWXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX3BsYW5lX21heF9zY2FsZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIpCit7CisJLyoKKwkgKiBXZSBkb24ndCB5ZXQga25vdyB0aGUgZmluYWwgc291cmNlIHdp ZHRoIG5vcgorCSAqIHdoZXRoZXIgd2UgY2FuIHVzZSB0aGUgSFEgc2NhbGVyIG1vZGUuIEFzc3Vt ZQorCSAqIHRoZSBiZXN0IGNhc2UuCisJICogRklYTUUgbmVlZCB0byBwcm9wZXJseSBjaGVjayB0 aGlzIGxhdGVyLgorCSAqLworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dF TUlOSUxBS0UoZGV2X3ByaXYpIHx8CisJICAgICFpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2Vt aXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpKQorCQlyZXR1cm4gMHgzMDAwMCAtIDE7 CisJZWxzZQorCQlyZXR1cm4gMHgyMDAwMCAtIDE7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfcGxh bmVfbWluX3dpZHRoKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJIGNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSBpbnQgY29sb3JfcGxhbmUsCisJCQkJIHVuc2ln bmVkIGludCByb3RhdGlvbikKK3sKKwlpZiAocGxhbmUtPm1pbl93aWR0aCkKKwkJcmV0dXJuIHBs YW5lLT5taW5fd2lkdGgoZmIsIGNvbG9yX3BsYW5lLCByb3RhdGlvbik7CisJZWxzZQorCQlyZXR1 cm4gMTsKK30KKworc3RhdGljIGludCBpbnRlbF9wbGFuZV9tYXhfd2lkdGgoc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSwKKwkJCQkgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJ CQkJIGludCBjb2xvcl9wbGFuZSwKKwkJCQkgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCWlm IChwbGFuZS0+bWF4X3dpZHRoKQorCQlyZXR1cm4gcGxhbmUtPm1heF93aWR0aChmYiwgY29sb3Jf cGxhbmUsIHJvdGF0aW9uKTsKKwllbHNlCisJCXJldHVybiBJTlRfTUFYOworfQorCitzdGF0aWMg aW50IGludGVsX3BsYW5lX21heF9oZWlnaHQoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJ CQkgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgaW50IGNvbG9yX3Bs YW5lLAorCQkJCSAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCWlmIChwbGFuZS0+bWF4X2hl aWdodCkKKwkJcmV0dXJuIHBsYW5lLT5tYXhfaGVpZ2h0KGZiLCBjb2xvcl9wbGFuZSwgcm90YXRp b24pOworCWVsc2UKKwkJcmV0dXJuIElOVF9NQVg7Cit9CisKK3N0YXRpYyBib29sCitza2xfY2hl Y2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSwKKwkJCSAgICAgICBpbnQgbWFpbl94LCBpbnQgbWFpbl95LCB1MzIgbWFpbl9vZmZzZXQs CisJCQkgICAgICAgaW50IGNjc19wbGFuZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgYXV4X3ggPSBwbGFuZV9zdGF0ZS0+ Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS54OworCWludCBhdXhfeSA9IHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVtjY3NfcGxhbmVdLnk7CisJdTMyIGF1eF9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbY2NzX3BsYW5lXS5vZmZzZXQ7CisJdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZf YWxpZ25tZW50KGZiLCBjY3NfcGxhbmUpOworCWludCBoc3ViOworCWludCB2c3ViOworCisJaW50 ZWxfZmJfcGxhbmVfZ2V0X3N1YnNhbXBsaW5nKCZoc3ViLCAmdnN1YiwgZmIsIGNjc19wbGFuZSk7 CisJd2hpbGUgKGF1eF9vZmZzZXQgPj0gbWFpbl9vZmZzZXQgJiYgYXV4X3kgPD0gbWFpbl95KSB7 CisJCWludCB4LCB5OworCisJCWlmIChhdXhfeCA9PSBtYWluX3ggJiYgYXV4X3kgPT0gbWFpbl95 KQorCQkJYnJlYWs7CisKKwkJaWYgKGF1eF9vZmZzZXQgPT0gMCkKKwkJCWJyZWFrOworCisJCXgg PSBhdXhfeCAvIGhzdWI7CisJCXkgPSBhdXhfeSAvIHZzdWI7CisJCWF1eF9vZmZzZXQgPSBpbnRl bF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoJngsICZ5LAorCQkJCQkJCSAgICAgICBwbGFu ZV9zdGF0ZSwKKwkJCQkJCQkgICAgICAgY2NzX3BsYW5lLAorCQkJCQkJCSAgICAgICBhdXhfb2Zm c2V0LAorCQkJCQkJCSAgICAgICBhdXhfb2Zmc2V0IC0KKwkJCQkJCQkJYWxpZ25tZW50KTsKKwkJ YXV4X3ggPSB4ICogaHN1YiArIGF1eF94ICUgaHN1YjsKKwkJYXV4X3kgPSB5ICogdnN1YiArIGF1 eF95ICUgdnN1YjsKKwl9CisKKwlpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1eF95ICE9IG1haW5f eSkKKwkJcmV0dXJuIGZhbHNlOworCisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFu ZV0ub2Zmc2V0ID0gYXV4X29mZnNldDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3Bs YW5lXS54ID0gYXV4X3g7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueSA9 IGF1eF95OworCisJcmV0dXJuIHRydWU7Cit9CisKKworaW50IHNrbF9jYWxjX21haW5fc3VyZmFj ZV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJ CQkgaW50ICp4LCBpbnQgKnksIHUzMiAqb2Zmc2V0KQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwor CWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwor CWNvbnN0IGludCBhdXhfcGxhbmUgPSBza2xfbWFpbl90b19hdXhfcGxhbmUoZmIsIDApOworCWNv bnN0IHUzMiBhdXhfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9wbGFuZV0u b2Zmc2V0OworCWNvbnN0IHUzMiBhbGlnbm1lbnQgPSBpbnRlbF9zdXJmX2FsaWdubWVudChmYiwg MCk7CisJY29uc3QgaW50IHcgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3Jj KSA+PiAxNjsKKworCWludGVsX2FkZF9mYl9vZmZzZXRzKHgsIHksIHBsYW5lX3N0YXRlLCAwKTsK Kwkqb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCh4LCB5LCBwbGFu ZV9zdGF0ZSwgMCk7CisJaWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBhbGlnbm1lbnQg JiYgIWlzX3Bvd2VyX29mXzIoYWxpZ25tZW50KSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoK KwkgKiBBVVggc3VyZmFjZSBvZmZzZXQgaXMgc3BlY2lmaWVkIGFzIHRoZSBkaXN0YW5jZSBmcm9t IHRoZQorCSAqIG1haW4gc3VyZmFjZSBvZmZzZXQsIGFuZCBpdCBtdXN0IGJlIG5vbi1uZWdhdGl2 ZS4gTWFrZQorCSAqIHN1cmUgdGhhdCBpcyB3aGF0IHdlIHdpbGwgZ2V0LgorCSAqLworCWlmIChh dXhfcGxhbmUgJiYgKm9mZnNldCA+IGF1eF9vZmZzZXQpCisJCSpvZmZzZXQgPSBpbnRlbF9wbGFu ZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQoeCwgeSwgcGxhbmVfc3RhdGUsIDAsCisJCQkJCQkJICAg ICpvZmZzZXQsCisJCQkJCQkJICAgIGF1eF9vZmZzZXQgJiB+KGFsaWdubWVudCAtIDEpKTsKKwor CS8qCisJICogV2hlbiB1c2luZyBhbiBYLXRpbGVkIHN1cmZhY2UsIHRoZSBwbGFuZSBibG93cyB1 cAorCSAqIGlmIHRoZSB4IG9mZnNldCArIHdpZHRoIGV4Y2VlZCB0aGUgc3RyaWRlLgorCSAqCisJ ICogVE9ETzogbGluZWFyIGFuZCBZLXRpbGVkIHNlZW0gZmluZSwgWWYgdW50ZXN0ZWQsCisJICov CisJaWYgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkgeworCQlpbnQg Y3BwID0gZmItPmZvcm1hdC0+Y3BwWzBdOworCisJCXdoaWxlICgoKnggKyB3KSAqIGNwcCA+IHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUpIHsKKwkJCWlmICgqb2Zmc2V0ID09IDAp IHsKKwkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkJICAgICJVbmFibGUgdG8g ZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBYLXRpbGluZ1xuIik7 CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCSpvZmZzZXQgPSBpbnRlbF9wbGFuZV9h ZGp1c3RfYWxpZ25lZF9vZmZzZXQoeCwgeSwgcGxhbmVfc3RhdGUsIDAsCisJCQkJCQkJCSAgICAq b2Zmc2V0LAorCQkJCQkJCQkgICAgKm9mZnNldCAtIGFsaWdubWVudCk7CisJCX0KKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJ Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJ Y29uc3QgdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwor CWludCB4ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2OworCWludCB5ID0gcGxhbmVf c3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OworCWNvbnN0IGludCB3ID0gZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7CisJY29uc3QgaW50IGggPSBkcm1fcmVjdF9o ZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7CisJY29uc3QgaW50IG1pbl93aWR0 aCA9IGludGVsX3BsYW5lX21pbl93aWR0aChwbGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKKwljb25z dCBpbnQgbWF4X3dpZHRoID0gaW50ZWxfcGxhbmVfbWF4X3dpZHRoKHBsYW5lLCBmYiwgMCwgcm90 YXRpb24pOworCWNvbnN0IGludCBtYXhfaGVpZ2h0ID0gaW50ZWxfcGxhbmVfbWF4X2hlaWdodChw bGFuZSwgZmIsIDAsIHJvdGF0aW9uKTsKKwljb25zdCBpbnQgYXV4X3BsYW5lID0gc2tsX21haW5f dG9fYXV4X3BsYW5lKGZiLCAwKTsKKwljb25zdCB1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9h bGlnbm1lbnQoZmIsIDApOworCXUzMiBvZmZzZXQ7CisJaW50IHJldDsKKworCWlmICh3ID4gbWF4 X3dpZHRoIHx8IHcgPCBtaW5fd2lkdGggfHwgaCA+IG1heF9oZWlnaHQpIHsKKwkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgInJlcXVlc3RlZCBZL1JHQiBzb3VyY2Ugc2l6ZSAl ZHglZCBvdXRzaWRlIGxpbWl0cyAobWluOiAlZHgxIG1heDogJWR4JWQpXG4iLAorCQkJICAgIHcs IGgsIG1pbl93aWR0aCwgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0ID0gc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChwbGFuZV9zdGF0ZSwg JngsICZ5LCAmb2Zmc2V0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBD Q1MgQVVYIHN1cmZhY2UgZG9lc24ndCBoYXZlIGl0cyBvd24geC95IG9mZnNldHMsIHdlIG11c3Qg bWFrZSBzdXJlCisJICogdGhleSBtYXRjaCB3aXRoIHRoZSBtYWluIHN1cmZhY2UgeC95IG9mZnNl dHMuCisJICovCisJaWYgKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZpZXIpKSB7CisJCXdoaWxl ICghc2tsX2NoZWNrX21haW5fY2NzX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlLCB4LCB5LAorCQkJ CQkJICAgICAgIG9mZnNldCwgYXV4X3BsYW5lKSkgeworCQkJaWYgKG9mZnNldCA9PSAwKQorCQkJ CWJyZWFrOworCisJCQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9hZGp1c3RfYWxpZ25lZF9vZmZzZXQo JngsICZ5LCBwbGFuZV9zdGF0ZSwgMCwKKwkJCQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGln bm1lbnQpOworCQl9CisKKwkJaWYgKHggIT0gcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2F1eF9w bGFuZV0ueCB8fAorCQkgICAgeSAhPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbYXV4X3BsYW5l XS55KSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAgIlVuYWJsZSB0 byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvIENDU1xuIik7CisJ CQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsw XS5vZmZzZXQgPSBvZmZzZXQ7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnggPSB4Owor CXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS55ID0geTsKKworCS8qCisJICogUHV0IHRoZSBm aW5hbCBjb29yZGluYXRlcyBiYWNrIHNvIHRoYXQgdGhlIHNyYworCSAqIGNvb3JkaW5hdGUgY2hl Y2tzIHdpbGwgc2VlIHRoZSByaWdodCB2YWx1ZXMuCisJICovCisJZHJtX3JlY3RfdHJhbnNsYXRl X3RvKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCisJCQkgICAgICB4IDw8IDE2LCB5IDw8IDE2KTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNl KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2 KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5m YjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJ aW50IHV2X3BsYW5lID0gMTsKKwlpbnQgbWF4X3dpZHRoID0gaW50ZWxfcGxhbmVfbWF4X3dpZHRo KHBsYW5lLCBmYiwgdXZfcGxhbmUsIHJvdGF0aW9uKTsKKwlpbnQgbWF4X2hlaWdodCA9IGludGVs X3BsYW5lX21heF9oZWlnaHQocGxhbmUsIGZiLCB1dl9wbGFuZSwgcm90YXRpb24pOworCWludCB4 ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE3OworCWludCB5ID0gcGxhbmVfc3RhdGUt PnVhcGkuc3JjLnkxID4+IDE3OworCWludCB3ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTc7CisJaW50IGggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTc7CisJdTMyIG9mZnNldDsKKworCS8qIEZJWE1FIG5vdCBxdWl0ZSBz dXJlIGhvdy9pZiB0aGVzZSBhcHBseSB0byB0aGUgY2hyb21hIHBsYW5lICovCisJaWYgKHcgPiBt YXhfd2lkdGggfHwgaCA+IG1heF9oZWlnaHQpIHsKKwkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwK KwkJCSAgICAiQ2JDciBzb3VyY2Ugc2l6ZSAlZHglZCB0b28gYmlnIChsaW1pdCAlZHglZClcbiIs CisJCQkgICAgdywgaCwgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJaW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwgdXZfcGxh bmUpOworCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoJngsICZ5 LAorCQkJCQkJICAgIHBsYW5lX3N0YXRlLCB1dl9wbGFuZSk7CisKKwlpZiAoaXNfY2NzX21vZGlm aWVyKGZiLT5tb2RpZmllcikpIHsKKwkJaW50IGNjc19wbGFuZSA9IG1haW5fdG9fY2NzX3BsYW5l KGZiLCB1dl9wbGFuZSk7CisJCXUzMiBhdXhfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2Njc19wbGFuZV0ub2Zmc2V0OworCQl1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGln bm1lbnQoZmIsIHV2X3BsYW5lKTsKKworCQlpZiAob2Zmc2V0ID4gYXV4X29mZnNldCkKKwkJCW9m ZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgmeCwgJnksCisJCQkJCQkJ CSAgIHBsYW5lX3N0YXRlLAorCQkJCQkJCQkgICB1dl9wbGFuZSwKKwkJCQkJCQkJICAgb2Zmc2V0 LAorCQkJCQkJCQkgICBhdXhfb2Zmc2V0ICYgfihhbGlnbm1lbnQgLSAxKSk7CisKKwkJd2hpbGUg KCFza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUsIHgsIHksCisJCQkJ CQkgICAgICAgb2Zmc2V0LCBjY3NfcGxhbmUpKSB7CisJCQlpZiAob2Zmc2V0ID09IDApCisJCQkJ YnJlYWs7CisKKwkJCW9mZnNldCA9IGludGVsX3BsYW5lX2FkanVzdF9hbGlnbmVkX29mZnNldCgm eCwgJnksCisJCQkJCQkJCSAgIHBsYW5lX3N0YXRlLAorCQkJCQkJCQkgICB1dl9wbGFuZSwKKwkJ CQkJCQkJICAgb2Zmc2V0LCBvZmZzZXQgLSBhbGlnbm1lbnQpOworCQl9CisKKwkJaWYgKHggIT0g cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2Njc19wbGFuZV0ueCB8fAorCQkgICAgeSAhPSBwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS55KSB7CisJCQlkcm1fZGJnX2ttcygmaTkx NS0+ZHJtLAorCQkJCSAgICAiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheSBzdXJmYWNl IG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJ cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5lXS5vZmZzZXQgPSBvZmZzZXQ7CisJcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW3V2X3BsYW5lXS54ID0geDsKKwlwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbdXZfcGxhbmVdLnkgPSB5OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOworCWludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsK KwlpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueTEgPj4gMTY7CisJdTMyIG9mZnNl dDsKKwlpbnQgY2NzX3BsYW5lOworCisJZm9yIChjY3NfcGxhbmUgPSAwOyBjY3NfcGxhbmUgPCBm Yi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBjY3NfcGxhbmUrKykgeworCQlpbnQgbWFpbl9oc3ViLCBt YWluX3ZzdWI7CisJCWludCBoc3ViLCB2c3ViOworCQlpbnQgeCwgeTsKKworCQlpZiAoIWlzX2Nj c19wbGFuZShmYiwgY2NzX3BsYW5lKSkKKwkJCWNvbnRpbnVlOworCisJCWludGVsX2ZiX3BsYW5l X2dldF9zdWJzYW1wbGluZygmbWFpbl9oc3ViLCAmbWFpbl92c3ViLCBmYiwKKwkJCQkJICAgICAg IHNrbF9jY3NfdG9fbWFpbl9wbGFuZShmYiwgY2NzX3BsYW5lKSk7CisJCWludGVsX2ZiX3BsYW5l X2dldF9zdWJzYW1wbGluZygmaHN1YiwgJnZzdWIsIGZiLCBjY3NfcGxhbmUpOworCisJCWhzdWIg Kj0gbWFpbl9oc3ViOworCQl2c3ViICo9IG1haW5fdnN1YjsKKwkJeCA9IHNyY194IC8gaHN1YjsK KwkJeSA9IHNyY195IC8gdnN1YjsKKworCQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIHBs YW5lX3N0YXRlLCBjY3NfcGxhbmUpOworCisJCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVf YWxpZ25lZF9vZmZzZXQoJngsICZ5LAorCQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwKKwkJCQkJCQkg ICAgY2NzX3BsYW5lKTsKKworCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbY2NzX3BsYW5lXS5v ZmZzZXQgPSBvZmZzZXQ7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLngg PSAoeCAqIGhzdWIgKworCQkJCQkJCSBzcmNfeCAlIGhzdWIpIC8KKwkJCQkJCQltYWluX2hzdWI7 CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtjY3NfcGxhbmVdLnkgPSAoeSAqIHZzdWIgKwor CQkJCQkJCSBzcmNfeSAlIHZzdWIpIC8KKwkJCQkJCQltYWluX3ZzdWI7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gaW50 ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJ LyoKKwkgKiBIYW5kbGUgdGhlIEFVWCBzdXJmYWNlIGZpcnN0IHNpbmNlIHRoZSBtYWluIHN1cmZh Y2Ugc2V0dXAgZGVwZW5kcyBvbgorCSAqIGl0LgorCSAqLworCWlmIChpc19jY3NfbW9kaWZpZXIo ZmItPm1vZGlmaWVyKSkgeworCQlyZXQgPSBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHBsYW5l X3N0YXRlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGludGVsX2Zv cm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsCisJCQkJCQlmYi0+bW9kaWZp ZXIpKSB7CisJCXJldCA9IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gZmItPmZvcm1hdC0+ bnVtX3BsYW5lczsgaSA8IEFSUkFZX1NJWkUocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lKTsgaSsr KSB7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5vZmZzZXQgPSAwOworCQlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IDA7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS55ID0gMDsKKwl9CisKKwlyZXQgPSBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHBsYW5lX3N0YXRl KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBi b29sIGludGVsX2ZiX3NjYWxhYmxlKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQor eworCWlmICghZmIpCisJCXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAoZmItPmZvcm1hdC0+Zm9y bWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCQlyZXR1cm4gZmFsc2U7CisJY2FzZSBEUk1f Rk9STUFUX1hSR0IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6CisJ Y2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IxNjE2 MTYxNkY6CisJCXJldHVybiBJTlRFTF9HRU4odG9faTkxNShmYi0+ZGV2KSkgPj0gMTE7CisJZGVm YXVsdDoKKwkJcmV0dXJuIHRydWU7CisJfQorfQorCitzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVj ayhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgIHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJaW50 IG1pbl9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKKwlpbnQgbWF4X3NjYWxl ID0gRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HOworCWludCByZXQ7CisKKwlyZXQgPSBza2xf cGxhbmVfY2hlY2tfZmIoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwkvKiB1c2Ugc2NhbGVyIHdoZW4gY29sb3JrZXkgaXMgbm90IHJlcXVpcmVk ICovCisJaWYgKCFwbGFuZV9zdGF0ZS0+Y2tleS5mbGFncyAmJiBpbnRlbF9mYl9zY2FsYWJsZShm YikpIHsKKwkJbWluX3NjYWxlID0gMTsKKwkJbWF4X3NjYWxlID0gc2tsX3BsYW5lX21heF9zY2Fs ZShkZXZfcHJpdiwgZmIpOworCX0KKworCXJldCA9IGludGVsX2F0b21pY19wbGFuZV9jaGVja19j bGlwcGluZyhwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSwKKwkJCQkJCW1pbl9zY2FsZSwgbWF4X3Nj YWxlLCB0cnVlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc2tsX2NoZWNr X3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJcmV0ID0g c2tsX3BsYW5lX2NoZWNrX2RzdF9jb29yZGluYXRlcyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3Ny Y19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldCA9IHNrbF9wbGFuZV9jaGVja19udjEyX3JvdGF0aW9uKHBsYW5lX3N0YXRlKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogSFcgb25seSBoYXMgOCBiaXRzIHBpeGVsIHByZWNp c2lvbiwgZGlzYWJsZSBwbGFuZSBpZiBpbnZpc2libGUgKi8KKwlpZiAoIShwbGFuZV9zdGF0ZS0+ aHcuYWxwaGEgPj4gOCkpCisJCXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgPSBmYWxzZTsKKwor CXBsYW5lX3N0YXRlLT5jdGwgPSBza2xfcGxhbmVfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRl KTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2 X3ByaXYpKQorCQlwbGFuZV9zdGF0ZS0+Y29sb3JfY3RsID0gZ2xrX3BsYW5lX2NvbG9yX2N0bChj cnRjX3N0YXRlLAorCQkJCQkJCSAgICAgcGxhbmVfc3RhdGUpOworCisJaWYgKGludGVsX2Zvcm1h dF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikgJiYKKwkg ICAgaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmUtPmlkKSkKKwkJLyogRW5hYmxlIGFu ZCB1c2UgTVBFRy0yIGNocm9tYSBzaXRpbmcgKi8KKwkJcGxhbmVfc3RhdGUtPmN1c19jdGwgPSBQ TEFORV9DVVNfRU5BQkxFIHwKKwkJCVBMQU5FX0NVU19IUEhBU0VfMCB8CisJCQlQTEFORV9DVVNf VlBIQVNFX1NJR05fTkVHQVRJVkUgfCBQTEFORV9DVVNfVlBIQVNFXzBfMjU7CisJZWxzZQorCQlw bGFuZV9zdGF0ZS0+Y3VzX2N0bCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wg c2tsX3BsYW5lX2hhc19mYmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJ ICAgICAgZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJaWYgKCFI QVNfRkJDKGRldl9wcml2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHBpcGUgPT0gUElQ RV9BICYmIHBsYW5lX2lkID09IFBMQU5FX1BSSU1BUlk7Cit9CisKK3N0YXRpYyBib29sIHNrbF9w bGFuZV9oYXNfcGxhbmFyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkg ZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJLyogRGlzcGxheSBX QSAjMDg3MDogc2tsLCBieHQgKi8KKwlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfQlJP WFRPTihkZXZfcHJpdikpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChJU19HRU4oZGV2X3ByaXYs IDkpICYmICFJU19HRU1JTklMQUtFKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQykKKwkJcmV0 dXJuIGZhbHNlOworCisJaWYgKHBsYW5lX2lkICE9IFBMQU5FX1BSSU1BUlkgJiYgcGxhbmVfaWQg IT0gUExBTkVfU1BSSVRFMCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisK K3N0YXRpYyBjb25zdCB1MzIgKnNrbF9nZXRfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCWVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBs YW5lX2lkLAorCQkJCQlpbnQgKm51bV9mb3JtYXRzKQoreworCWlmIChza2xfcGxhbmVfaGFzX3Bs YW5hcihkZXZfcHJpdiwgcGlwZSwgcGxhbmVfaWQpKSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZ X1NJWkUoc2tsX3BsYW5hcl9mb3JtYXRzKTsKKwkJcmV0dXJuIHNrbF9wbGFuYXJfZm9ybWF0czsK Kwl9IGVsc2UgeworCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHNrbF9wbGFuZV9mb3JtYXRz KTsKKwkJcmV0dXJuIHNrbF9wbGFuZV9mb3JtYXRzOworCX0KK30KKworc3RhdGljIGNvbnN0IHUz MiAqZ2xrX2dldF9wbGFuZV9mb3JtYXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKKwkJCQkJZW51bSBwaXBlIHBpcGUsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsCisJCQkJCWlu dCAqbnVtX2Zvcm1hdHMpCit7CisJaWYgKHNrbF9wbGFuZV9oYXNfcGxhbmFyKGRldl9wcml2LCBw aXBlLCBwbGFuZV9pZCkpIHsKKwkJKm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShnbGtfcGxhbmFy X2Zvcm1hdHMpOworCQlyZXR1cm4gZ2xrX3BsYW5hcl9mb3JtYXRzOworCX0gZWxzZSB7CisJCSpu dW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoc2tsX3BsYW5lX2Zvcm1hdHMpOworCQlyZXR1cm4gc2ts X3BsYW5lX2Zvcm1hdHM7CisJfQorfQorCitzdGF0aWMgY29uc3QgdTMyICppY2xfZ2V0X3BsYW5l X2Zvcm1hdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQllbnVtIHBp cGUgcGlwZSwgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwKKwkJCQkJaW50ICpudW1fZm9ybWF0cykK K3sKKwlpZiAoaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmVfaWQpKSB7CisJCSpudW1f Zm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX2hkcl9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIGlj bF9oZHJfcGxhbmVfZm9ybWF0czsKKwl9IGVsc2UgaWYgKGljbF9pc19udjEyX3lfcGxhbmUoZGV2 X3ByaXYsIHBsYW5lX2lkKSkgeworCQkqbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKGljbF9zZHJf eV9wbGFuZV9mb3JtYXRzKTsKKwkJcmV0dXJuIGljbF9zZHJfeV9wbGFuZV9mb3JtYXRzOworCX0g ZWxzZSB7CisJCSpudW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoaWNsX3Nkcl91dl9wbGFuZV9mb3Jt YXRzKTsKKwkJcmV0dXJuIGljbF9zZHJfdXZfcGxhbmVfZm9ybWF0czsKKwl9Cit9CisKK3N0YXRp YyBib29sIHNrbF9wbGFuZV9oYXNfY2NzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKKwkJCSAgICAgIGVudW0gcGlwZSBwaXBlLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQorewor CWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChJU19HRU1J TklMQUtFKGRldl9wcml2KSkKKwkJcmV0dXJuIHBpcGUgIT0gUElQRV9DOworCisJcmV0dXJuIHBp cGUgIT0gUElQRV9DICYmCisJCShwbGFuZV9pZCA9PSBQTEFORV9QUklNQVJZIHx8CisJCSBwbGFu ZV9pZCA9PSBQTEFORV9TUFJJVEUwKTsKK30KKworc3RhdGljIGJvb2wgc2tsX3BsYW5lX2Zvcm1h dF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKKwkJCQkJICAgdTMyIGZv cm1hdCwgdTY0IG1vZGlmaWVyKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19p bnRlbF9wbGFuZShfcGxhbmUpOworCisJc3dpdGNoIChtb2RpZmllcikgeworCWNhc2UgRFJNX0ZP Uk1BVF9NT0RfTElORUFSOgorCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6CisJY2FzZSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoK KwkJYnJlYWs7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6CisJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgorCQlpZiAoIXBsYW5lLT5oYXNfY2NzKQorCQkJcmV0 dXJuIGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ c3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1f Rk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9G T1JNQVRfQUJHUjg4ODg6CisJCWlmIChpc19jY3NfbW9kaWZpZXIobW9kaWZpZXIpKQorCQkJcmV0 dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJY2Fz ZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoK KwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAx MDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgorCWNh c2UgRFJNX0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgorCWNhc2UgRFJNX0ZP Uk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKKwljYXNlIERSTV9GT1JNQVRf UDAxMDoKKwljYXNlIERSTV9GT1JNQVRfUDAxMjoKKwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwlj YXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6CisJCWlmIChtb2RpZmllciA9PSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZmFsbHRocm91Z2g7CisJY2FzZSBE Uk1fRk9STUFUX0M4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJN X0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgor CWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgor CWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCWNhc2UgRFJN X0ZPUk1BVF9YVllVMTJfMTYxNjE2MTY6CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoK KwkJaWYgKG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAorCQkgICAgbW9kaWZp ZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQgfHwKKwkJICAgIG1vZGlmaWVyID09IEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWRl ZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIGdlbjEyX3BsYW5l X3N1cHBvcnRzX21jX2NjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJ CWVudW0gcGxhbmVfaWQgcGxhbmVfaWQpCit7CisJLyogV2FfMTQwMTA0NzcwMDg6dGdsW2EwLi5j MF0scmtsW2FsbF0sZGcxW2FsbF0gKi8KKwlpZiAoSVNfREcxKGRldl9wcml2KSB8fCBJU19ST0NL RVRMQUtFKGRldl9wcml2KSB8fAorCSAgICBJU19UR0xfRElTUF9SRVZJRChkZXZfcHJpdiwgVEdM X1JFVklEX0EwLCBUR0xfUkVWSURfQzApKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gcGxh bmVfaWQgPCBQTEFORV9TUFJJVEU0OworfQorCitzdGF0aWMgYm9vbCBnZW4xMl9wbGFuZV9mb3Jt YXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCisJCQkJCSAgICAgdTMy IGZvcm1hdCwgdTY0IG1vZGlmaWVyKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoX3BsYW5lLT5kZXYpOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUg PSB0b19pbnRlbF9wbGFuZShfcGxhbmUpOworCisJc3dpdGNoIChtb2RpZmllcikgeworCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfTUNfQ0NTOgorCQlpZiAoIWdlbjEyX3BsYW5l X3N1cHBvcnRzX21jX2NjcyhkZXZfcHJpdiwgcGxhbmUtPmlkKSkKKwkJCXJldHVybiBmYWxzZTsK KwkJZmFsbHRocm91Z2g7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJY2FzZSBJOTE1 X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTOgorCQlicmVhazsKKwlkZWZh dWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERS TV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJN X0ZPUk1BVF9BUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCWlmIChpc19j Y3NfbW9kaWZpZXIobW9kaWZpZXIpKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOwor CWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgorCWNhc2UgRFJN X0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgorCWNhc2UgRFJNX0ZPUk1BVF9O VjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9YWVVWODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUDAxMDoK KwljYXNlIERSTV9GT1JNQVRfUDAxMjoKKwljYXNlIERSTV9GT1JNQVRfUDAxNjoKKwkJaWYgKG1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUykKKwkJCXJldHVy biB0cnVlOworCQlmYWxsdGhyb3VnaDsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJ Y2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAx MDoKKwljYXNlIERSTV9GT1JNQVRfWFZZVTIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX0M4Ogor CWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTYx NjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1B VF9BUkdCMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCWNhc2UgRFJNX0ZPUk1B VF9ZMjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTJf MTYxNjE2MTY6CisJY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKKwkJaWYgKG1vZGlmaWVy ID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiB8fAorCQkgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQgfHwKKwkJICAgIG1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEKQorCQkJcmV0dXJuIHRydWU7CisJCWZhbGx0aHJvdWdoOworCWRlZmF1bHQ6CisJCXJldHVy biBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCB1NjQgKmdlbjEyX2dldF9wbGFuZV9tb2Rp ZmllcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgICAgZW51bSBw bGFuZV9pZCBwbGFuZV9pZCkKK3sKKwlpZiAoZ2VuMTJfcGxhbmVfc3VwcG9ydHNfbWNfY2NzKGRl dl9wcml2LCBwbGFuZV9pZCkpCisJCXJldHVybiBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJz X21jX2NjczsKKwllbHNlCisJCXJldHVybiBnZW4xMl9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX3Jj X2NjczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mgc2tsX3BsYW5l X2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxh bmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAor CS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUg PSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAorCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IHNr bF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2Z1bmNzIGdlbjEyX3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBk cm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRv bWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJv eSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0 ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAor CS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGdlbjEyX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVk LAorfTsKKworc3RydWN0IGludGVsX3BsYW5lICoKK3NrbF91bml2ZXJzYWxfcGxhbmVfY3JlYXRl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgIGVudW0gcGlwZSBwaXBl LCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQoreworCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVu Y3MgKnBsYW5lX2Z1bmNzOworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7CisJZW51bSBkcm1f cGxhbmVfdHlwZSBwbGFuZV90eXBlOworCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfcm90YXRpb25z OworCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfY3NjOworCWNvbnN0IHU2NCAqbW9kaWZpZXJzOwor CWNvbnN0IHUzMiAqZm9ybWF0czsKKwlpbnQgbnVtX2Zvcm1hdHM7CisJaW50IHJldDsKKworCXBs YW5lID0gaW50ZWxfcGxhbmVfYWxsb2MoKTsKKwlpZiAoSVNfRVJSKHBsYW5lKSkKKwkJcmV0dXJu IHBsYW5lOworCisJcGxhbmUtPnBpcGUgPSBwaXBlOworCXBsYW5lLT5pZCA9IHBsYW5lX2lkOwor CXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZFUihwaXBlLCBwbGFuZV9p ZCk7CisKKwlwbGFuZS0+aGFzX2ZiYyA9IHNrbF9wbGFuZV9oYXNfZmJjKGRldl9wcml2LCBwaXBl LCBwbGFuZV9pZCk7CisJaWYgKHBsYW5lLT5oYXNfZmJjKSB7CisJCXN0cnVjdCBpbnRlbF9mYmMg KmZiYyA9ICZkZXZfcHJpdi0+ZmJjOworCisJCWZiYy0+cG9zc2libGVfZnJhbWVidWZmZXJfYml0 cyB8PSBwbGFuZS0+ZnJvbnRidWZmZXJfYml0OworCX0KKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDExKSB7CisJCXBsYW5lLT5taW5fd2lkdGggPSBpY2xfcGxhbmVfbWluX3dpZHRoOwor CQlwbGFuZS0+bWF4X3dpZHRoID0gaWNsX3BsYW5lX21heF93aWR0aDsKKwkJcGxhbmUtPm1heF9o ZWlnaHQgPSBpY2xfcGxhbmVfbWF4X2hlaWdodDsKKwl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpIHsKKwkJcGxhbmUtPm1heF93 aWR0aCA9IGdsa19wbGFuZV9tYXhfd2lkdGg7CisJCXBsYW5lLT5tYXhfaGVpZ2h0ID0gc2tsX3Bs YW5lX21heF9oZWlnaHQ7CisJfSBlbHNlIHsKKwkJcGxhbmUtPm1heF93aWR0aCA9IHNrbF9wbGFu ZV9tYXhfd2lkdGg7CisJCXBsYW5lLT5tYXhfaGVpZ2h0ID0gc2tsX3BsYW5lX21heF9oZWlnaHQ7 CisJfQorCisJcGxhbmUtPm1heF9zdHJpZGUgPSBza2xfcGxhbmVfbWF4X3N0cmlkZTsKKwlwbGFu ZS0+dXBkYXRlX3BsYW5lID0gc2tsX3VwZGF0ZV9wbGFuZTsKKwlwbGFuZS0+ZGlzYWJsZV9wbGFu ZSA9IHNrbF9kaXNhYmxlX3BsYW5lOworCXBsYW5lLT5nZXRfaHdfc3RhdGUgPSBza2xfcGxhbmVf Z2V0X2h3X3N0YXRlOworCXBsYW5lLT5jaGVja19wbGFuZSA9IHNrbF9wbGFuZV9jaGVjazsKKwlw bGFuZS0+bWluX2NkY2xrID0gc2tsX3BsYW5lX21pbl9jZGNsazsKKwlwbGFuZS0+YXN5bmNfZmxp cCA9IHNrbF9wbGFuZV9hc3luY19mbGlwOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTEpCisJCWZvcm1hdHMgPSBpY2xfZ2V0X3BsYW5lX2Zvcm1hdHMoZGV2X3ByaXYsIHBpcGUsCisJ CQkJCQlwbGFuZV9pZCwgJm51bV9mb3JtYXRzKTsKKwllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQorCQlmb3JtYXRzID0gZ2xrX2dl dF9wbGFuZV9mb3JtYXRzKGRldl9wcml2LCBwaXBlLAorCQkJCQkJcGxhbmVfaWQsICZudW1fZm9y bWF0cyk7CisJZWxzZQorCQlmb3JtYXRzID0gc2tsX2dldF9wbGFuZV9mb3JtYXRzKGRldl9wcml2 LCBwaXBlLAorCQkJCQkJcGxhbmVfaWQsICZudW1fZm9ybWF0cyk7CisKKwlwbGFuZS0+aGFzX2Nj cyA9IHNrbF9wbGFuZV9oYXNfY2NzKGRldl9wcml2LCBwaXBlLCBwbGFuZV9pZCk7CisJaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTIpIHsKKwkJbW9kaWZpZXJzID0gZ2VuMTJfZ2V0X3BsYW5l X21vZGlmaWVycyhkZXZfcHJpdiwgcGxhbmVfaWQpOworCQlwbGFuZV9mdW5jcyA9ICZnZW4xMl9w bGFuZV9mdW5jczsKKwl9IGVsc2UgeworCQlpZiAocGxhbmUtPmhhc19jY3MpCisJCQltb2RpZmll cnMgPSBza2xfcGxhbmVfZm9ybWF0X21vZGlmaWVyc19jY3M7CisJCWVsc2UKKwkJCW1vZGlmaWVy cyA9IHNrbF9wbGFuZV9mb3JtYXRfbW9kaWZpZXJzX25vY2NzOworCQlwbGFuZV9mdW5jcyA9ICZz a2xfcGxhbmVfZnVuY3M7CisJfQorCisJaWYgKHBsYW5lX2lkID09IFBMQU5FX1BSSU1BUlkpCisJ CXBsYW5lX3R5cGUgPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOworCWVsc2UKKwkJcGxhbmVfdHlw ZSA9IERSTV9QTEFORV9UWVBFX09WRVJMQVk7CisKKwlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5l X2luaXQoJmRldl9wcml2LT5kcm0sICZwbGFuZS0+YmFzZSwKKwkJCQkgICAgICAgMCwgcGxhbmVf ZnVuY3MsCisJCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLCBtb2RpZmllcnMsCisJCQkJ ICAgICAgIHBsYW5lX3R5cGUsCisJCQkJICAgICAgICJwbGFuZSAlZCVjIiwgcGxhbmVfaWQgKyAx LAorCQkJCSAgICAgICBwaXBlX25hbWUocGlwZSkpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsK KworCXN1cHBvcnRlZF9yb3RhdGlvbnMgPQorCQlEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RF X1JPVEFURV85MCB8CisJCURSTV9NT0RFX1JPVEFURV8xODAgfCBEUk1fTU9ERV9ST1RBVEVfMjcw OworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCisJCXN1cHBvcnRlZF9yb3RhdGlv bnMgfD0gRFJNX01PREVfUkVGTEVDVF9YOworCisJZHJtX3BsYW5lX2NyZWF0ZV9yb3RhdGlvbl9w cm9wZXJ0eSgmcGxhbmUtPmJhc2UsCisJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wLAorCQkJCQkg ICBzdXBwb3J0ZWRfcm90YXRpb25zKTsKKworCXN1cHBvcnRlZF9jc2MgPSBCSVQoRFJNX0NPTE9S X1lDQkNSX0JUNjAxKSB8IEJJVChEUk1fQ09MT1JfWUNCQ1JfQlQ3MDkpOworCisJaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpCisJCXN1cHBv cnRlZF9jc2MgfD0gQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDIwMjApOworCisJZHJtX3BsYW5lX2Ny ZWF0ZV9jb2xvcl9wcm9wZXJ0aWVzKCZwbGFuZS0+YmFzZSwKKwkJCQkJICBzdXBwb3J0ZWRfY3Nj LAorCQkJCQkgIEJJVChEUk1fQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRSkgfAorCQkJCQkgIEJJ VChEUk1fQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRSksCisJCQkJCSAgRFJNX0NPTE9SX1lDQkNSX0JU NzA5LAorCQkJCQkgIERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFKTsKKworCWRybV9wbGFu ZV9jcmVhdGVfYWxwaGFfcHJvcGVydHkoJnBsYW5lLT5iYXNlKTsKKwlkcm1fcGxhbmVfY3JlYXRl X2JsZW5kX21vZGVfcHJvcGVydHkoJnBsYW5lLT5iYXNlLAorCQkJCQkgICAgIEJJVChEUk1fTU9E RV9CTEVORF9QSVhFTF9OT05FKSB8CisJCQkJCSAgICAgQklUKERSTV9NT0RFX0JMRU5EX1BSRU1V TFRJKSB8CisJCQkJCSAgICAgQklUKERSTV9NT0RFX0JMRU5EX0NPVkVSQUdFKSk7CisKKwlkcm1f cGxhbmVfY3JlYXRlX3pwb3NfaW1tdXRhYmxlX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwgcGxhbmVf aWQpOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpCisJCWRybV9wbGFuZV9lbmFi bGVfZmJfZGFtYWdlX2NsaXBzKCZwbGFuZS0+YmFzZSk7CisKKwlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMCkKKwkJZHJtX3BsYW5lX2NyZWF0ZV9zY2FsaW5nX2ZpbHRlcl9wcm9wZXJ0eSgm cGxhbmUtPmJhc2UsCisJCQkJCQlCSVQoRFJNX1NDQUxJTkdfRklMVEVSX0RFRkFVTFQpIHwKKwkJ CQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfTkVBUkVTVF9ORUlHSEJPUikpOworCisJZHJtX3Bs YW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzKTsK KworCXJldHVybiBwbGFuZTsKKworZmFpbDoKKwlpbnRlbF9wbGFuZV9mcmVlKHBsYW5lKTsKKwor CXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3ZvaWQKK3NrbF9nZXRfaW5pdGlhbF9wbGFuZV9j b25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCisJCQkgICAgIHN0cnVjdCBpbnRlbF9pbml0 aWFsX3BsYW5lX2NvbmZpZyAqcGxhbmVfY29uZmlnKQoreworCXN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOworCXN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShjcnRjLT5iYXNlLnByaW1hcnkpOworCWVudW0gcGxh bmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJZW51bSBwaXBlIHBpcGU7CisJdTMyIHZhbCwg YmFzZSwgb2Zmc2V0LCBzdHJpZGVfbXVsdCwgdGlsaW5nLCBhbHBoYTsKKwlpbnQgZm91cmNjLCBw aXhlbF9mb3JtYXQ7CisJdW5zaWduZWQgaW50IGFsaWduZWRfaGVpZ2h0OworCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiOworCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmI7CisK KwlpZiAoIXBsYW5lLT5nZXRfaHdfc3RhdGUocGxhbmUsICZwaXBlKSkKKwkJcmV0dXJuOworCisJ ZHJtX1dBUk5fT04oZGV2LCBwaXBlICE9IGNydGMtPnBpcGUpOworCisJaWYgKGNydGNfc3RhdGUt PmJpZ2pvaW5lcikgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiVW5z dXBwb3J0ZWQgYmlnam9pbmVyIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgRkJcbiIpOworCQly ZXR1cm47CisJfQorCisJaW50ZWxfZmIgPSBremFsbG9jKHNpemVvZigqaW50ZWxfZmIpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWludGVsX2ZiKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiZmFpbGVkIHRvIGFsbG9jIGZiXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZiID0gJmludGVs X2ZiLT5iYXNlOworCisJZmItPmRldiA9IGRldjsKKworCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIFBMQU5FX0NUTChwaXBlLCBwbGFuZV9pZCkpOworCisJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTEpCisJCXBpeGVsX2Zvcm1hdCA9IHZhbCAmIElDTF9QTEFORV9DVExfRk9STUFU X01BU0s7CisJZWxzZQorCQlwaXhlbF9mb3JtYXQgPSB2YWwgJiBQTEFORV9DVExfRk9STUFUX01B U0s7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRl dl9wcml2KSkgeworCQlhbHBoYSA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCisJCQkJICAgICAg UExBTkVfQ09MT1JfQ1RMKHBpcGUsIHBsYW5lX2lkKSk7CisJCWFscGhhICY9IFBMQU5FX0NPTE9S X0FMUEhBX01BU0s7CisJfSBlbHNlIHsKKwkJYWxwaGEgPSB2YWwgJiBQTEFORV9DVExfQUxQSEFf TUFTSzsKKwl9CisKKwlmb3VyY2MgPSBza2xfZm9ybWF0X3RvX2ZvdXJjYyhwaXhlbF9mb3JtYXQs CisJCQkJICAgICAgdmFsICYgUExBTkVfQ1RMX09SREVSX1JHQlgsIGFscGhhKTsKKwlmYi0+Zm9y bWF0ID0gZHJtX2Zvcm1hdF9pbmZvKGZvdXJjYyk7CisKKwl0aWxpbmcgPSB2YWwgJiBQTEFORV9D VExfVElMRURfTUFTSzsKKwlzd2l0Y2ggKHRpbGluZykgeworCWNhc2UgUExBTkVfQ1RMX1RJTEVE X0xJTkVBUjoKKwkJZmItPm1vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfTElORUFSOworCQlicmVh azsKKwljYXNlIFBMQU5FX0NUTF9USUxFRF9YOgorCQlwbGFuZV9jb25maWctPnRpbGluZyA9IEk5 MTVfVElMSU5HX1g7CisJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOwor CQlicmVhazsKKwljYXNlIFBMQU5FX0NUTF9USUxFRF9ZOgorCQlwbGFuZV9jb25maWctPnRpbGlu ZyA9IEk5MTVfVElMSU5HX1k7CisJCWlmICh2YWwgJiBQTEFORV9DVExfUkVOREVSX0RFQ09NUFJF U1NJT05fRU5BQkxFKQorCQkJZmItPm1vZGlmaWVyID0gSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MiA/CisJCQkJSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfR0VOMTJfUkNfQ0NTIDoKKwkJCQlJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M7CisJCWVsc2UgaWYgKHZhbCAmIFBMQU5FX0NUTF9NRURJ QV9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0dFTjEyX01DX0NDUzsKKwkJZWxzZQorCQkJZmItPm1vZGlmaWVyID0gSTkxNV9G T1JNQVRfTU9EX1lfVElMRUQ7CisJCWJyZWFrOworCWNhc2UgUExBTkVfQ1RMX1RJTEVEX1lGOgor CQlpZiAodmFsICYgUExBTkVfQ1RMX1JFTkRFUl9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKKwkJCWZi LT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M7CisJCWVsc2UKKwkJCWZi LT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJTUlTU0lOR19DQVNFKHRpbGluZyk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkg KiBEUk1fTU9ERV9ST1RBVEVfIGlzIGNvdW50ZXIgY2xvY2t3aXNlIHRvIHN0YXkgY29tcGF0aWJs ZSB3aXRoIFhyYW5kcgorCSAqIHdoaWxlIGk5MTUgSFcgcm90YXRpb24gaXMgY2xvY2t3aXNlLCB0 aGF0cyB3aHkgdGhpcyBzd2FwcGluZy4KKwkgKi8KKwlzd2l0Y2ggKHZhbCAmIFBMQU5FX0NUTF9S T1RBVEVfTUFTSykgeworCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8wOgorCQlwbGFuZV9jb25maWct PnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzA7CisJCWJyZWFrOworCWNhc2UgUExBTkVfQ1RM X1JPVEFURV85MDoKKwkJcGxhbmVfY29uZmlnLT5yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8y NzA7CisJCWJyZWFrOworCWNhc2UgUExBTkVfQ1RMX1JPVEFURV8xODA6CisJCXBsYW5lX2NvbmZp Zy0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMTgwOworCQlicmVhazsKKwljYXNlIFBMQU5F X0NUTF9ST1RBVEVfMjcwOgorCQlwbGFuZV9jb25maWctPnJvdGF0aW9uID0gRFJNX01PREVfUk9U QVRFXzkwOworCQlicmVhazsKKwl9CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCAm JgorCSAgICB2YWwgJiBQTEFORV9DVExfRkxJUF9IT1JJWk9OVEFMKQorCQlwbGFuZV9jb25maWct PnJvdGF0aW9uIHw9IERSTV9NT0RFX1JFRkxFQ1RfWDsKKworCS8qIDkwLzI3MCBkZWdyZWUgcm90 YXRpb24gd291bGQgcmVxdWlyZSBleHRyYSB3b3JrICovCisJaWYgKGRybV9yb3RhdGlvbl85MF9v cl8yNzAocGxhbmVfY29uZmlnLT5yb3RhdGlvbikpCisJCWdvdG8gZXJyb3I7CisKKwliYXNlID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfU1VSRihwaXBlLCBwbGFuZV9pZCkpICYgMHhm ZmZmZjAwMDsKKwlwbGFuZV9jb25maWctPmJhc2UgPSBiYXNlOworCisJb2Zmc2V0ID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSk7CisKKwl2YWwg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSk7CisJ ZmItPmhlaWdodCA9ICgodmFsID4+IDE2KSAmIDB4ZmZmZikgKyAxOworCWZiLT53aWR0aCA9ICgo dmFsID4+IDApICYgMHhmZmZmKSArIDE7CisKKwl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCBQTEFORV9TVFJJREUocGlwZSwgcGxhbmVfaWQpKTsKKwlzdHJpZGVfbXVsdCA9IHNrbF9wbGFu ZV9zdHJpZGVfbXVsdChmYiwgMCwgRFJNX01PREVfUk9UQVRFXzApOworCWZiLT5waXRjaGVzWzBd ID0gKHZhbCAmIDB4M2ZmKSAqIHN0cmlkZV9tdWx0OworCisJYWxpZ25lZF9oZWlnaHQgPSBpbnRl bF9mYl9hbGlnbl9oZWlnaHQoZmIsIDAsIGZiLT5oZWlnaHQpOworCisJcGxhbmVfY29uZmlnLT5z aXplID0gZmItPnBpdGNoZXNbMF0gKiBhbGlnbmVkX2hlaWdodDsKKworCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAorCQkgICAgIiVzLyVzIHdpdGggZmI6IHNpemU9JWR4JWRAJWQsIG9mZnNl dD0leCwgcGl0Y2ggJWQsIHNpemUgMHgleFxuIiwKKwkJICAgIGNydGMtPmJhc2UubmFtZSwgcGxh bmUtPmJhc2UubmFtZSwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAorCQkgICAgZmItPmZvcm1hdC0+ Y3BwWzBdICogOCwgYmFzZSwgZmItPnBpdGNoZXNbMF0sCisJCSAgICBwbGFuZV9jb25maWctPnNp emUpOworCisJcGxhbmVfY29uZmlnLT5mYiA9IGludGVsX2ZiOworCXJldHVybjsKKworZXJyb3I6 CisJa2ZyZWUoaW50ZWxfZmIpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uOGYxOTlhMTVmMzMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKQEAgLTAsMCArMSwzMiBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLworLyoKKyAqIENvcHlyaWdodCDCqSAy MDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfU0tMX1VOSVZFUlNBTF9QTEFO RV9IXworI2RlZmluZSBfU0tMX1VOSVZFUlNBTF9QTEFORV9IXworCitzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyOworc3RydWN0IGludGVsX2F0b21pY19zdGF0ZTsKK3N0cnVjdCBpbnRlbF9jcnRjOwor c3RydWN0IGludGVsX2NydGNfc3RhdGU7CitzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25m aWc7CitzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGU7CisKK2VudW0gcGlwZTsKK2VudW0gcGxhbmVf aWQ7CisKK3N0cnVjdCBpbnRlbF9wbGFuZSAqCitza2xfdW5pdmVyc2FsX3BsYW5lX2NyZWF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICBlbnVtIHBpcGUgcGlwZSwg ZW51bSBwbGFuZV9pZCBwbGFuZV9pZCk7CisKK3ZvaWQgc2tsX2dldF9pbml0aWFsX3BsYW5lX2Nv bmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCQkgIHN0cnVjdCBpbnRlbF9pbml0aWFs X3BsYW5lX2NvbmZpZyAqcGxhbmVfY29uZmlnKTsKKworaW50IHNrbF9mb3JtYXRfdG9fZm91cmNj KGludCBmb3JtYXQsIGJvb2wgcmdiX29yZGVyLCBib29sIGFscGhhKTsKKworaW50IHNrbF9jY3Nf dG9fbWFpbl9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNjc19w bGFuZSk7CitpbnQgc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAorCQkJCSBpbnQgKngsIGludCAqeSwgdTMyICpv ZmZzZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvdmx2X2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS92bHZfZHNpLmMKaW5k ZXggZjk0MDI1ZWM2MDNhLi5lYmYyNjY0NTc1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvdmx2X2RzaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvdmx2X2RzaS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiaW50ZWxfZmlmb191bmRl cnJ1bi5oIgogI2luY2x1ZGUgImludGVsX3BhbmVsLmgiCiAjaW5jbHVkZSAiaW50ZWxfc2lkZWJh bmQuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAKIC8qIHJldHVybiBwaXhl bHMgaW4gdGVybXMgb2YgdHhieXRlY2xraHMgKi8KIHN0YXRpYyB1MTYgdHhieXRlY2xraHModTE2 IHBpeGVscywgaW50IGJwcCwgaW50IGxhbmVfY291bnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpp bmRleCBiYmM3M2RmN2Y3NTMuLmJjNDBlY2MxN2E1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5j CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVz LmgiCiAjaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9mYmMuaCIKICNpbmNsdWRlICJkaXNwbGF5L2lu dGVsX3Nwcml0ZS5oIgorI2luY2x1ZGUgImRpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5oIgog CiAjaW5jbHVkZSAiZ3QvaW50ZWxfbGxjLmgiCiAKLS0gCjIuMjcuMAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==