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 8A91AC4361B for ; Fri, 18 Dec 2020 06:04:34 +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 2C5B223A5B for ; Fri, 18 Dec 2020 06:04:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2C5B223A5B 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 BA8BD89A76; Fri, 18 Dec 2020 06:04:33 +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 81F0089A6D for ; Fri, 18 Dec 2020 06:04:32 +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-533-5_PpUZt_PZKXkQvS_4wvSg-1; Fri, 18 Dec 2020 01:04:29 -0500 X-MC-Unique: 5_PpUZt_PZKXkQvS_4wvSg-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 435E2180E461 for ; Fri, 18 Dec 2020 06:04:28 +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 4FEBE60BE5 for ; Fri, 18 Dec 2020 06:04:27 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 18 Dec 2020 16:04:11 +1000 Message-Id: <20201218060420.3203-5-airlied@gmail.com> In-Reply-To: <20201218060420.3203-1-airlied@gmail.com> References: <20201218060420.3203-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 04/13] drm/i915: refactor cursor code out of i915_display.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgZmlsZSBpcyBhIG1v bnN0ZXIsIGxldCdzIHN0YXJ0IHNpbXBsZSwgdGhlIGN1cnNvciBwbGFuZSBjb2RlCnNlZW1zIHBy ZXR0eSBzdGFuZGFsb25lLCBhbmQgc3BsaXRzIG91dCBlYXNpbHkgZW5vdWdoLgoKUmV2aWV3ZWQt Ynk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ClNpZ25l ZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CltKYW5pOiBjbGVhbmVk IHVwIGludGVsX2N1cnNvci5oIGEgYml0Ll0KU2lnbmVkLW9mZi1ieTogSmFuaSBOaWt1bGEgPGph bmkubmlrdWxhQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAg ICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2N1cnNvci5jICB8IDgwNiArKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2N1cnNvci5oICB8ICAxNyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuYyB8IDc5NyArLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oIHwgICA3ICsKIDUgZmlsZXMgY2hh bmdlZCwgODM4IGluc2VydGlvbnMoKyksIDc5MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuaAoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggZTU1NzRlNTA2YTVjLi45OGEzNWI5MzkwNTIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCkBAIC0xOTcsNiArMTk3LDcgQEAgaTkxNS15ICs9IFwKIAlkaXNwbGF5 L2ludGVsX2NvbWJvX3BoeS5vIFwKIAlkaXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5vIFwKIAlkaXNw bGF5L2ludGVsX2Nzci5vIFwKKwlkaXNwbGF5L2ludGVsX2N1cnNvci5vIFwKIAlkaXNwbGF5L2lu dGVsX2Rpc3BsYXkubyBcCiAJZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLm8gXAogCWRpc3Bs YXkvaW50ZWxfZHBpb19waHkubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2N1cnNvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9jdXJzb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI3NmQy YmIwZTJjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfY3Vyc29yLmMKQEAgLTAsMCArMSw4MDYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICov CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19o ZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY191YXBpLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9kYW1hZ2VfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgorCisjaW5jbHVkZSAiaW50ZWxfYXRvbWljLmgi CisjaW5jbHVkZSAiaW50ZWxfYXRvbWljX3BsYW5lLmgiCisjaW5jbHVkZSAiaW50ZWxfY3Vyc29y LmgiCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgorI2luY2x1ZGUgImludGVsX2Rp c3BsYXkuaCIKKworI2luY2x1ZGUgImludGVsX2Zyb250YnVmZmVyLmgiCisjaW5jbHVkZSAiaW50 ZWxfcG0uaCIKKyNpbmNsdWRlICJpbnRlbF9wc3IuaCIKKyNpbmNsdWRlICJpbnRlbF9zcHJpdGUu aCIKKworLyogQ3Vyc29yIGZvcm1hdHMgKi8KK3N0YXRpYyBjb25zdCB1MzIgaW50ZWxfY3Vyc29y X2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorfTsKKworc3RhdGljIGNvbnN0 IHU2NCBjdXJzb3JfZm9ybWF0X21vZGlmaWVyc1tdID0geworCURSTV9GT1JNQVRfTU9EX0xJTkVB UiwKKwlEUk1fRk9STUFUX01PRF9JTlZBTElECit9OworCitzdGF0aWMgdTMyIGludGVsX2N1cnNv cl9iYXNlKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0 ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9 IHBsYW5lX3N0YXRlLT5ody5mYjsKKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqID0gaW50ZWxfZmJfb2JqKGZiKTsKKwl1MzIgYmFzZTsKKworCWlmIChJTlRFTF9JTkZPKGRl dl9wcml2KS0+ZGlzcGxheS5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpCisJCWJhc2UgPSBzZ19kbWFf YWRkcmVzcyhvYmotPm1tLnBhZ2VzLT5zZ2wpOworCWVsc2UKKwkJYmFzZSA9IGludGVsX3BsYW5l X2dndHRfb2Zmc2V0KHBsYW5lX3N0YXRlKTsKKworCXJldHVybiBiYXNlICsgcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lWzBdLm9mZnNldDsKK30KKworc3RhdGljIHUzMiBpbnRlbF9jdXJzb3JfcG9z aXRpb24oY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlp bnQgeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKKwlpbnQgeSA9IHBsYW5lX3N0YXRlLT51 YXBpLmRzdC55MTsKKwl1MzIgcG9zID0gMDsKKworCWlmICh4IDwgMCkgeworCQlwb3MgfD0gQ1VS U09SX1BPU19TSUdOIDw8IENVUlNPUl9YX1NISUZUOworCQl4ID0gLXg7CisJfQorCXBvcyB8PSB4 IDw8IENVUlNPUl9YX1NISUZUOworCisJaWYgKHkgPCAwKSB7CisJCXBvcyB8PSBDVVJTT1JfUE9T X1NJR04gPDwgQ1VSU09SX1lfU0hJRlQ7CisJCXkgPSAteTsKKwl9CisJcG9zIHw9IHkgPDwgQ1VS U09SX1lfU0hJRlQ7CisKKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9jdXJz b3Jfc2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQor eworCWNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9CisJCSZwbGFuZV9zdGF0 ZS0+dWFwaS5wbGFuZS0+ZGV2LT5tb2RlX2NvbmZpZzsKKwlpbnQgd2lkdGggPSBkcm1fcmVjdF93 aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKKwlpbnQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVp Z2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOworCisJcmV0dXJuIHdpZHRoID4gMCAmJiB3aWR0 aCA8PSBjb25maWctPmN1cnNvcl93aWR0aCAmJgorCQloZWlnaHQgPiAwICYmIGhlaWdodCA8PSBj b25maWctPmN1cnNvcl9oZWlnaHQ7Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfY3Vyc29yX2NoZWNr X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51 YXBpLnBsYW5lLT5kZXYpOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5o dy5yb3RhdGlvbjsKKwlpbnQgc3JjX3gsIHNyY195OworCXUzMiBvZmZzZXQ7CisJaW50IHJldDsK KworCXJldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQorCQly ZXR1cm4gMDsKKworCXNyY194ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2OworCXNy Y195ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OworCisJaW50ZWxfYWRkX2ZiX29m ZnNldHMoJnNyY194LCAmc3JjX3ksIHBsYW5lX3N0YXRlLCAwKTsKKwlvZmZzZXQgPSBpbnRlbF9w bGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZzcmNfeCwgJnNyY195LAorCQkJCQkJICAgIHBs YW5lX3N0YXRlLCAwKTsKKworCWlmIChzcmNfeCAhPSAwIHx8IHNyY195ICE9IDApIHsKKwkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgIkFyYml0cmFyeSBjdXJzb3IgcGFubmlu ZyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBQ dXQgdGhlIGZpbmFsIGNvb3JkaW5hdGVzIGJhY2sgc28gdGhhdCB0aGUgc3JjCisJICogY29vcmRp bmF0ZSBjaGVja3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4KKwkgKi8KKwlkcm1fcmVjdF90 cmFuc2xhdGVfdG8oJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKKwkJCSAgICAgIHNyY194IDw8IDE2 LCBzcmNfeSA8PCAxNik7CisKKwkvKiBJTEsrIGRvIHRoaXMgYXV0b21hZ2ljYWxseSBpbiBoYXJk d2FyZSAqLworCWlmIChIQVNfR01DSChkZXZfcHJpdikgJiYgcm90YXRpb24gJiBEUk1fTU9ERV9S T1RBVEVfMTgwKSB7CisJCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmh3LmZiOworCQlpbnQgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUt PnVhcGkuc3JjKSA+PiAxNjsKKwkJaW50IHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2OworCisJCW9mZnNldCArPSAoc3JjX2ggKiBzcmNfdyAtIDEp ICogZmItPmZvcm1hdC0+Y3BwWzBdOworCX0KKworCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsw XS5vZmZzZXQgPSBvZmZzZXQ7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnggPSBzcmNf eDsKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9IHNyY195OworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgaW50ZWxfY2hlY2tfY3Vyc29yKHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5ody5mYjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxh bmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJY29uc3Qgc3RydWN0IGRybV9yZWN0IHNyYyA9 IHBsYW5lX3N0YXRlLT51YXBpLnNyYzsKKwljb25zdCBzdHJ1Y3QgZHJtX3JlY3QgZHN0ID0gcGxh bmVfc3RhdGUtPnVhcGkuZHN0OworCWludCByZXQ7CisKKwlpZiAoZmIgJiYgZmItPm1vZGlmaWVy ICE9IERSTV9GT1JNQVRfTU9EX0xJTkVBUikgeworCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAi Y3Vyc29yIGNhbm5vdCBiZSB0aWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJl dCA9IGludGVsX2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhwbGFuZV9zdGF0ZSwgY3J0Y19z dGF0ZSwKKwkJCQkJCURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJCURSTV9QTEFO RV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJCXRydWUpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwkvKiBVc2UgdGhlIHVuY2xpcHBlZCBzcmMvZHN0IHJlY3RhbmdsZXMsIHdoaWNoIHdl IHByb2dyYW0gdG8gaHcgKi8KKwlwbGFuZV9zdGF0ZS0+dWFwaS5zcmMgPSBzcmM7CisJcGxhbmVf c3RhdGUtPnVhcGkuZHN0ID0gZHN0OworCisJcmV0ID0gaW50ZWxfY3Vyc29yX2NoZWNrX3N1cmZh Y2UocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXBsYW5l X3N0YXRlLT51YXBpLnZpc2libGUpCisJCXJldHVybiAwOworCisJcmV0ID0gaW50ZWxfcGxhbmVf Y2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2k4NDVfY3Vyc29y X21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICAgICAgIHUzMiBwaXhl bF9mb3JtYXQsIHU2NCBtb2RpZmllciwKKwkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikK K3sKKwlyZXR1cm4gMjA0ODsKK30KKworc3RhdGljIHUzMiBpODQ1X2N1cnNvcl9jdGxfY3J0Yyhj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwl1MzIgY250bCA9 IDA7CisKKwlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQorCQljbnRsIHw9IENVUlNPUl9H QU1NQV9FTkFCTEU7CisKKwlyZXR1cm4gY250bDsKK30KKworc3RhdGljIHUzMiBpODQ1X2N1cnNv cl9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXJldHVybiBD VVJTT1JfRU5BQkxFIHwKKwkJQ1VSU09SX0ZPUk1BVF9BUkdCIHwKKwkJQ1VSU09SX1NUUklERShw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlKTsKK30KKworc3RhdGljIGJvb2wgaTg0 NV9jdXJzb3Jfc2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQoreworCWludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpOworCisJLyoKKwkgKiA4NDVnLzg2NWcgYXJlIG9ubHkgbGltaXRlZCBieSB0aGUgd2lkdGgg b2YgdGhlaXIgY3Vyc29ycywKKwkgKiB0aGUgaGVpZ2h0IGlzIGFyYml0cmFyeSB1cCB0byB0aGUg cHJlY2lzaW9uIG9mIHRoZSByZWdpc3Rlci4KKwkgKi8KKwlyZXR1cm4gaW50ZWxfY3Vyc29yX3Np emVfb2socGxhbmVfc3RhdGUpICYmIElTX0FMSUdORUQod2lkdGgsIDY0KTsKK30KKworc3RhdGlj IGludCBpODQ1X2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKKwkJCSAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGku cGxhbmUtPmRldik7CisJaW50IHJldDsKKworCXJldCA9IGludGVsX2NoZWNrX2N1cnNvcihjcnRj X3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGlm IHdlIHdhbnQgdG8gdHVybiBvZmYgdGhlIGN1cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAq LworCWlmICghZmIpCisJCXJldHVybiAwOworCisJLyogQ2hlY2sgZm9yIHdoaWNoIGN1cnNvciB0 eXBlcyB3ZSBzdXBwb3J0ICovCisJaWYgKCFpODQ1X2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRl KSkgeworCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAorCQkJICAgICJDdXJzb3IgZGltZW5zaW9u ICVkeCVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgICAgZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCksCisJCQkgICAgZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFw aS5kc3QpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJtX1dBUk5fT04oJmk5MTUtPmRy bSwgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJgorCQkgICAgcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lWzBdLnN0cmlkZSAhPSBmYi0+cGl0Y2hlc1swXSk7CisKKwlzd2l0Y2ggKGZiLT5waXRj aGVzWzBdKSB7CisJY2FzZSAyNTY6CisJY2FzZSA1MTI6CisJY2FzZSAxMDI0OgorCWNhc2UgMjA0 ODoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJIGRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJJbnZh bGlkIGN1cnNvciBzdHJpZGUgKCV1KVxuIiwKKwkJCSAgICAgZmItPnBpdGNoZXNbMF0pOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwbGFuZV9zdGF0ZS0+Y3RsID0gaTg0NV9jdXJzb3JfY3Rs KGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBpODQ1X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJCSAgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwl1 MzIgY250bCA9IDAsIGJhc2UgPSAwLCBwb3MgPSAwLCBzaXplID0gMDsKKwl1bnNpZ25lZCBsb25n IGlycWZsYWdzOworCisJaWYgKHBsYW5lX3N0YXRlICYmIHBsYW5lX3N0YXRlLT51YXBpLnZpc2li bGUpIHsKKwkJdW5zaWduZWQgaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLmRzdCk7CisJCXVuc2lnbmVkIGludCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBs YW5lX3N0YXRlLT51YXBpLmRzdCk7CisKKwkJY250bCA9IHBsYW5lX3N0YXRlLT5jdGwgfAorCQkJ aTg0NV9jdXJzb3JfY3RsX2NydGMoY3J0Y19zdGF0ZSk7CisKKwkJc2l6ZSA9IChoZWlnaHQgPDwg MTIpIHwgd2lkdGg7CisKKwkJYmFzZSA9IGludGVsX2N1cnNvcl9iYXNlKHBsYW5lX3N0YXRlKTsK KwkJcG9zID0gaW50ZWxfY3Vyc29yX3Bvc2l0aW9uKHBsYW5lX3N0YXRlKTsKKwl9CisKKwlzcGlu X2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CisKKwkvKiBP biB0aGVzZSBjaGlwc2V0cyB3ZSBjYW4gb25seSBtb2RpZnkgdGhlIGJhc2Uvc2l6ZS9zdHJpZGUK KwkgKiB3aGlsc3QgdGhlIGN1cnNvciBpcyBkaXNhYmxlZC4KKwkgKi8KKwlpZiAocGxhbmUtPmN1 cnNvci5iYXNlICE9IGJhc2UgfHwKKwkgICAgcGxhbmUtPmN1cnNvci5zaXplICE9IHNpemUgfHwK KwkgICAgcGxhbmUtPmN1cnNvci5jbnRsICE9IGNudGwpIHsKKwkJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSwgMCk7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBDVVJCQVNFKFBJUEVfQSksIGJhc2UpOworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgQ1VSU0laRSwgc2l6ZSk7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1Mo UElQRV9BKSwgcG9zKTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkNOVFIoUElQ RV9BKSwgY250bCk7CisKKwkJcGxhbmUtPmN1cnNvci5iYXNlID0gYmFzZTsKKwkJcGxhbmUtPmN1 cnNvci5zaXplID0gc2l6ZTsKKwkJcGxhbmUtPmN1cnNvci5jbnRsID0gY250bDsKKwl9IGVsc2Ug eworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKFBJUEVfQSksIHBvcyk7CisJ fQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFm bGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGk4NDVfZGlzYWJsZV9jdXJzb3Ioc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSwKKwkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkKK3sKKwlpODQ1X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNydGNfc3RhdGUsIE5VTEwpOwor fQorCitzdGF0aWMgYm9vbCBpODQ1X2N1cnNvcl9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSwKKwkJCQkgICAgIGVudW0gcGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBp bnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47CisJaW50ZWxfd2FrZXJlZl90 IHdha2VyZWY7CisJYm9vbCByZXQ7CisKKwlwb3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQ RShQSVBFX0EpOworCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVk KGRldl9wcml2LCBwb3dlcl9kb21haW4pOworCWlmICghd2FrZXJlZikKKwkJcmV0dXJuIGZhbHNl OworCisJcmV0ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VSQ05UUihQSVBFX0EpKSAmIENV UlNPUl9FTkFCTEU7CisKKwkqcGlwZSA9IFBJUEVfQTsKKworCWludGVsX2Rpc3BsYXlfcG93ZXJf cHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHVuc2lnbmVkIGludAoraTl4eF9jdXJzb3JfbWF4X3N0cmlkZShzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lLAorCQkgICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVy LAorCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoreworCXJldHVybiBwbGFuZS0+YmFz ZS5kZXYtPm1vZGVfY29uZmlnLmN1cnNvcl93aWR0aCAqIDQ7Cit9CisKK3N0YXRpYyB1MzIgaTl4 eF9jdXJzb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3Rh dGUtPnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShjcnRjLT5iYXNlLmRldik7CisJdTMyIGNudGwgPSAwOworCisJaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPj0gMTEpCisJCXJldHVybiBjbnRsOworCisJaWYgKGNydGNfc3RhdGUtPmdhbW1h X2VuYWJsZSkKKwkJY250bCA9IE1DVVJTT1JfR0FNTUFfRU5BQkxFOworCisJaWYgKGNydGNfc3Rh dGUtPmNzY19lbmFibGUpCisJCWNudGwgfD0gTUNVUlNPUl9QSVBFX0NTQ19FTkFCTEU7CisKKwlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDUgJiYgIUlTX0c0WChkZXZfcHJpdikpCisJCWNudGwg fD0gTUNVUlNPUl9QSVBFX1NFTEVDVChjcnRjLT5waXBlKTsKKworCXJldHVybiBjbnRsOworfQor CitzdGF0aWMgdTMyIGk5eHhfY3Vyc29yX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJdG9f aTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwl1MzIgY250bCA9IDA7CisKKwlp ZiAoSVNfR0VOKGRldl9wcml2LCA2KSB8fCBJU19JVllCUklER0UoZGV2X3ByaXYpKQorCQljbnRs IHw9IE1DVVJTT1JfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7CisKKwlzd2l0Y2ggKGRybV9yZWN0X3dp ZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKSB7CisJY2FzZSA2NDoKKwkJY250bCB8PSBNQ1VS U09SX01PREVfNjRfQVJHQl9BWDsKKwkJYnJlYWs7CisJY2FzZSAxMjg6CisJCWNudGwgfD0gTUNV UlNPUl9NT0RFXzEyOF9BUkdCX0FYOworCQlicmVhazsKKwljYXNlIDI1NjoKKwkJY250bCB8PSBN Q1VSU09SX01PREVfMjU2X0FSR0JfQVg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdf Q0FTRShkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7CisJCXJldHVybiAw OworCX0KKworCWlmIChwbGFuZV9zdGF0ZS0+aHcucm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVf MTgwKQorCQljbnRsIHw9IE1DVVJTT1JfUk9UQVRFXzE4MDsKKworCXJldHVybiBjbnRsOworfQor CitzdGF0aWMgYm9vbCBpOXh4X2N1cnNvcl9zaXplX29rKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwlpbnQgd2lk dGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKKwlpbnQgaGVpZ2h0 ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOworCisJaWYgKCFpbnRl bF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEN1 cnNvciB3aWR0aCBpcyBsaW1pdGVkIHRvIGEgZmV3IHBvd2VyLW9mLXR3byBzaXplcyAqLworCXN3 aXRjaCAod2lkdGgpIHsKKwljYXNlIDI1NjoKKwljYXNlIDEyODoKKwljYXNlIDY0OgorCQlicmVh azsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBJVkIrIGhhdmUg Q1VSX0ZCQ19DVEwgd2hpY2ggYWxsb3dzIGFuIGFyYml0cmFyeSBjdXJzb3IKKwkgKiBoZWlnaHQg ZnJvbSA4IGxpbmVzIHVwIHRvIHRoZSBjdXJzb3Igd2lkdGgsIHdoZW4gdGhlCisJICogY3Vyc29y IGlzIG5vdCByb3RhdGVkLiBFdmVyeXRoaW5nIGVsc2UgcmVxdWlyZXMgc3F1YXJlCisJICogY3Vy c29ycy4KKwkgKi8KKwlpZiAoSEFTX0NVUl9GQkMoZGV2X3ByaXYpICYmCisJICAgIHBsYW5lX3N0 YXRlLT5ody5yb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8wKSB7CisJCWlmIChoZWlnaHQgPCA4 IHx8IGhlaWdodCA+IHdpZHRoKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSB7CisJCWlmICho ZWlnaHQgIT0gd2lkdGgpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKK3N0YXRpYyBpbnQgaTl4eF9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCisJCQkgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5l X3N0YXRlLT51YXBpLnBsYW5lKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlw ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gaW50ZWxfY2hlY2tfY3Vyc29yKGNydGNfc3RhdGUsIHBs YW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogaWYgd2Ugd2FudCB0 byB0dXJuIG9mZiB0aGUgY3Vyc29yIGlnbm9yZSB3aWR0aCBhbmQgaGVpZ2h0ICovCisJaWYgKCFm YikKKwkJcmV0dXJuIDA7CisKKwkvKiBDaGVjayBmb3Igd2hpY2ggY3Vyc29yIHR5cGVzIHdlIHN1 cHBvcnQgKi8KKwlpZiAoIWk5eHhfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpKSB7CisJCWRy bV9kYmcoJmRldl9wcml2LT5kcm0sCisJCQkiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBub3Qgc3Vw cG9ydGVkXG4iLAorCQkJZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCksCisJ CQlkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgcGxhbmVfc3RhdGUtPnVh cGkudmlzaWJsZSAmJgorCQkgICAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSAh PSBmYi0+cGl0Y2hlc1swXSk7CisKKwlpZiAoZmItPnBpdGNoZXNbMF0gIT0KKwkgICAgZHJtX3Jl Y3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkgKiBmYi0+Zm9ybWF0LT5jcHBbMF0pIHsK KwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgIkludmFsaWQgY3Vyc29yIHN0 cmlkZSAoJXUpIChjdXJzb3Igd2lkdGggJWQpXG4iLAorCQkJICAgIGZiLT5waXRjaGVzWzBdLAor CQkJICAgIGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBUaGVyZSdzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRo ZSBjdXJzb3Igb24gQ0hWIHBpcGUgQy4KKwkgKiBJZiBpdCBzdHJhZGRsZXMgdGhlIGxlZnQgZWRn ZSBvZiB0aGUgc2NyZWVuIHRoZW4KKwkgKiBtb3ZpbmcgaXQgYXdheSBmcm9tIHRoZSBlZGdlIG9y IGRpc2FibGluZyBpdCBvZnRlbgorCSAqIHJlc3VsdHMgaW4gYSBwaXBlIHVuZGVycnVuLCBhbmQg b2Z0ZW4gdGhhdCBjYW4gbGVhZCB0bworCSAqIGRlYWQgcGlwZSAoY29uc3RhbnQgdW5kZXJydW4g cmVwb3J0ZWQsIGFuZCBpdCBzY2FucworCSAqIG91dCBqdXN0IGEgc29saWQgY29sb3IpLiBUbyBy ZWNvdmVyIGZyb20gdGhhdCwgdGhlCisJICogZGlzcGxheSBwb3dlciB3ZWxsIG11c3QgYmUgdHVy bmVkIG9mZiBhbmQgb24gYWdhaW4uCisJICogUmVmdXNlIHRoZSBwdXQgdGhlIGN1cnNvciBpbnRv IHRoYXQgY29tcHJvbWlzZWQgcG9zaXRpb24uCisJICovCisJaWYgKElTX0NIRVJSWVZJRVcoZGV2 X3ByaXYpICYmIHBpcGUgPT0gUElQRV9DICYmCisJICAgIHBsYW5lX3N0YXRlLT51YXBpLnZpc2li bGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxIDwgMCkgeworCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwKKwkJCSAgICAiQ0hWIGN1cnNvciBDIG5vdCBhbGxvd2VkIHRvIHN0cmFkZGxl IHRoZSBsZWZ0IHNjcmVlbiBlZGdlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGxh bmVfc3RhdGUtPmN0bCA9IGk5eHhfY3Vyc29yX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfY3Vyc29yKHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlw ZTsKKwl1MzIgY250bCA9IDAsIGJhc2UgPSAwLCBwb3MgPSAwLCBmYmNfY3RsID0gMDsKKwl1bnNp Z25lZCBsb25nIGlycWZsYWdzOworCisJaWYgKHBsYW5lX3N0YXRlICYmIHBsYW5lX3N0YXRlLT51 YXBpLnZpc2libGUpIHsKKwkJdW5zaWduZWQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVf c3RhdGUtPnVhcGkuZHN0KTsKKwkJdW5zaWduZWQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZw bGFuZV9zdGF0ZS0+dWFwaS5kc3QpOworCisJCWNudGwgPSBwbGFuZV9zdGF0ZS0+Y3RsIHwKKwkJ CWk5eHhfY3Vyc29yX2N0bF9jcnRjKGNydGNfc3RhdGUpOworCisJCWlmICh3aWR0aCAhPSBoZWln aHQpCisJCQlmYmNfY3RsID0gQ1VSX0ZCQ19DVExfRU4gfCAoaGVpZ2h0IC0gMSk7CisKKwkJYmFz ZSA9IGludGVsX2N1cnNvcl9iYXNlKHBsYW5lX3N0YXRlKTsKKwkJcG9zID0gaW50ZWxfY3Vyc29y X3Bvc2l0aW9uKHBsYW5lX3N0YXRlKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3By aXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CisKKwkvKgorCSAqIE9uIHNvbWUgcGxhdGZvcm1z IHdyaXRpbmcgQ1VSQ05UUiBmaXJzdCB3aWxsIGFsc28KKwkgKiBjYXVzZSBDVVJQT1MgdG8gYmUg YXJtZWQgYnkgdGhlIENVUkJBU0Ugd3JpdGUuCisJICogV2l0aG91dCB0aGUgQ1VSQ05UUiB3cml0 ZSB0aGUgQ1VSUE9TIHdyaXRlIHdvdWxkCisJICogYXJtIGl0c2VsZi4gVGh1cyB3ZSBhbHdheXMg dXBkYXRlIENVUkNOVFIgYmVmb3JlCisJICogQ1VSUE9TLgorCSAqCisJICogT24gb3RoZXIgcGxh dGZvcm1zIENVUlBPUyBhbHdheXMgcmVxdWlyZXMgdGhlCisJICogQ1VSQkFTRSB3cml0ZSB0byBh cm0gdGhlIHVwZGF0ZS4gQWRkaXRvbmFsbHkKKwkgKiBhIHdyaXRlIHRvIGFueSBvZiB0aGUgY3Vy c29yIHJlZ2lzdGVyIHdpbGwgY2FuY2VsCisJICogYW4gYWxyZWFkeSBhcm1lZCBjdXJzb3IgdXBk YXRlLiBUaHVzIGxlYXZpbmcgb3V0CisJICogdGhlIENVUkJBU0Ugd3JpdGUgYWZ0ZXIgQ1VSUE9T IGNvdWxkIGxlYWQgdG8gYQorCSAqIGN1cnNvciB0aGF0IGRvZXNuJ3QgYXBwZWFyIHRvIG1vdmUs IG9yIGV2ZW4gY2hhbmdlCisJICogc2hhcGUuIFRodXMgd2UgYWx3YXlzIHdyaXRlIENVUkJBU0Uu CisJICoKKwkgKiBUaGUgb3RoZXIgcmVnaXN0ZXJzIGFyZSBhcm1lZCBieSBieSB0aGUgQ1VSQkFT RSB3cml0ZQorCSAqIGV4Y2VwdCB3aGVuIHRoZSBwbGFuZSBpcyBnZXR0aW5nIGVuYWJsZWQgYXQg d2hpY2ggdGltZQorCSAqIHRoZSBDVVJDTlRSIHdyaXRlIGFybXMgdGhlIHVwZGF0ZS4KKwkgKi8K KworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCisJCXNrbF93cml0ZV9jdXJzb3Jfd20o cGxhbmUsIGNydGNfc3RhdGUpOworCisJaWYgKCFpbnRlbF9jcnRjX25lZWRzX21vZGVzZXQoY3J0 Y19zdGF0ZSkpCisJCWludGVsX3BzcjJfcHJvZ3JhbV9wbGFuZV9zZWxfZmV0Y2gocGxhbmUsIGNy dGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAwKTsKKworCWlmIChwbGFuZS0+Y3Vyc29yLmJhc2UgIT0g YmFzZSB8fAorCSAgICBwbGFuZS0+Y3Vyc29yLnNpemUgIT0gZmJjX2N0bCB8fAorCSAgICBwbGFu ZS0+Y3Vyc29yLmNudGwgIT0gY250bCkgeworCQlpZiAoSEFTX0NVUl9GQkMoZGV2X3ByaXYpKQor CQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUl9GQkNfQ1RMKHBpcGUpLAorCQkJCQkg IGZiY19jdGwpOworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQ05UUihwaXBlKSwg Y250bCk7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MocGlwZSksIHBvcyk7 CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJCQVNFKHBpcGUpLCBiYXNlKTsKKwor CQlwbGFuZS0+Y3Vyc29yLmJhc2UgPSBiYXNlOworCQlwbGFuZS0+Y3Vyc29yLnNpemUgPSBmYmNf Y3RsOworCQlwbGFuZS0+Y3Vyc29yLmNudGwgPSBjbnRsOworCX0gZWxzZSB7CisJCWludGVsX2Rl X3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MocGlwZSksIHBvcyk7CisJCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBDVVJCQVNFKHBpcGUpLCBiYXNlKTsKKwl9CisKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKK30KKworc3RhdGlj IHZvaWQgaTl4eF9kaXNhYmxlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJ CWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCWk5eHhfdXBk YXRlX2N1cnNvcihwbGFuZSwgY3J0Y19zdGF0ZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBib29sIGk5 eHhfY3Vyc29yX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJCSAg ICAgZW51bSBwaXBlICpwaXBlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJf ZG9tYWluIHBvd2VyX2RvbWFpbjsKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKwlib29sIHJl dDsKKwl1MzIgdmFsOworCisJLyoKKwkgKiBOb3QgMTAwJSBjb3JyZWN0IGZvciBwbGFuZXMgdGhh dCBjYW4gbW92ZSBiZXR3ZWVuIHBpcGVzLAorCSAqIGJ1dCB0aGF0J3Mgb25seSB0aGUgY2FzZSBm b3IgZ2VuMi0zIHdoaWNoIGRvbid0IGhhdmUgYW55CisJICogZGlzcGxheSBwb3dlciB3ZWxscy4K KwkgKi8KKwlwb3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShwbGFuZS0+cGlwZSk7CisJ d2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBv d2VyX2RvbWFpbik7CisJaWYgKCF3YWtlcmVmKQorCQlyZXR1cm4gZmFsc2U7CisKKwl2YWwgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBDVVJDTlRSKHBsYW5lLT5waXBlKSk7CisKKwlyZXQgPSB2 YWwgJiBNQ1VSU09SX01PREU7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElT X0c0WChkZXZfcHJpdikpCisJCSpwaXBlID0gcGxhbmUtPnBpcGU7CisJZWxzZQorCQkqcGlwZSA9 ICh2YWwgJiBNQ1VSU09SX1BJUEVfU0VMRUNUX01BU0spID4+CisJCQlNQ1VSU09SX1BJUEVfU0VM RUNUX1NISUZUOworCisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIHBvd2VyX2Rv bWFpbiwgd2FrZXJlZik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9j dXJzb3JfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAorCQkJ CQkgICAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCit7CisJcmV0dXJuIG1vZGlmaWVyID09 IERSTV9GT1JNQVRfTU9EX0xJTkVBUiAmJgorCQlmb3JtYXQgPT0gRFJNX0ZPUk1BVF9BUkdCODg4 ODsKK30KKworc3RhdGljIGludAoraW50ZWxfbGVnYWN5X2N1cnNvcl91cGRhdGUoc3RydWN0IGRy bV9wbGFuZSAqX3BsYW5lLAorCQkJICAgc3RydWN0IGRybV9jcnRjICpfY3J0YywKKwkJCSAgIHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJICAgaW50IGNydGNfeCwgaW50IGNydGNfeSwK KwkJCSAgIHVuc2lnbmVkIGludCBjcnRjX3csIHVuc2lnbmVkIGludCBjcnRjX2gsCisJCQkgICB1 MzIgc3JjX3gsIHUzMiBzcmNfeSwKKwkJCSAgIHUzMiBzcmNfdywgdTMyIHNyY19oLAorCQkJICAg c3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpCit7CisJc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKF9wbGFuZSk7CisJc3RydWN0IGludGVsX2NydGMg KmNydGMgPSB0b19pbnRlbF9jcnRjKF9jcnRjKTsKKwlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg Km9sZF9wbGFuZV9zdGF0ZSA9CisJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0 YXRlKTsKKwlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm5ld19wbGFuZV9zdGF0ZTsKKwlzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9CisJCXRvX2ludGVsX2NydGNfc3RhdGUo Y3J0Yy0+YmFzZS5zdGF0ZSk7CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0 YXRlOworCWludCByZXQ7CisKKwkvKgorCSAqIFdoZW4gY3J0YyBpcyBpbmFjdGl2ZSBvciB0aGVy ZSBpcyBhIG1vZGVzZXQgcGVuZGluZywKKwkgKiB3YWl0IGZvciBpdCB0byBjb21wbGV0ZSBpbiB0 aGUgc2xvd3BhdGgKKwkgKgorCSAqIEZJWE1FIGJpZ2pvaW5lciBmYXN0cGF0aCB3b3VsZCBiZSBn b29kCisJICovCisJaWYgKCFjcnRjX3N0YXRlLT5ody5hY3RpdmUgfHwgaW50ZWxfY3J0Y19uZWVk c19tb2Rlc2V0KGNydGNfc3RhdGUpIHx8CisJICAgIGNydGNfc3RhdGUtPnVwZGF0ZV9waXBlIHx8 IGNydGNfc3RhdGUtPmJpZ2pvaW5lcikKKwkJZ290byBzbG93OworCisJLyoKKwkgKiBEb24ndCBk byBhbiBhc3luYyB1cGRhdGUgaWYgdGhlcmUgaXMgYW4gb3V0c3RhbmRpbmcgY29tbWl0IG1vZGlm eWluZworCSAqIHRoZSBwbGFuZS4gIFRoaXMgcHJldmVudHMgb3VyIGFzeW5jIHVwZGF0ZSdzIGNo YW5nZXMgZnJvbSBnZXR0aW5nCisJICogb3ZlcnJpZGRlbiBieSBhIHByZXZpb3VzIHN5bmNocm9u b3VzIHVwZGF0ZSdzIHN0YXRlLgorCSAqLworCWlmIChvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY29t bWl0ICYmCisJICAgICF0cnlfd2FpdF9mb3JfY29tcGxldGlvbigmb2xkX3BsYW5lX3N0YXRlLT51 YXBpLmNvbW1pdC0+aHdfZG9uZSkpCisJCWdvdG8gc2xvdzsKKworCS8qCisJICogSWYgYW55IHBh cmFtZXRlcnMgY2hhbmdlIHRoYXQgbWF5IGFmZmVjdCB3YXRlcm1hcmtzLAorCSAqIHRha2UgdGhl IHNsb3dwYXRoLiBPbmx5IGNoYW5naW5nIGZiIG9yIHBvc2l0aW9uIHNob3VsZCBiZQorCSAqIGlu IHRoZSBmYXN0cGF0aC4KKwkgKi8KKwlpZiAob2xkX3BsYW5lX3N0YXRlLT51YXBpLmNydGMgIT0g JmNydGMtPmJhc2UgfHwKKwkgICAgb2xkX3BsYW5lX3N0YXRlLT51YXBpLnNyY193ICE9IHNyY193 IHx8CisJICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfaCAhPSBzcmNfaCB8fAorCSAgICBv bGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y193ICE9IGNydGNfdyB8fAorCSAgICBvbGRfcGxhbmVf c3RhdGUtPnVhcGkuY3J0Y19oICE9IGNydGNfaCB8fAorCSAgICAhb2xkX3BsYW5lX3N0YXRlLT51 YXBpLmZiICE9ICFmYikKKwkJZ290byBzbG93OworCisJbmV3X3BsYW5lX3N0YXRlID0gdG9faW50 ZWxfcGxhbmVfc3RhdGUoaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlKCZwbGFuZS0+YmFzZSkp OworCWlmICghbmV3X3BsYW5lX3N0YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5ld19jcnRj X3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShpbnRlbF9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSgm Y3J0Yy0+YmFzZSkpOworCWlmICghbmV3X2NydGNfc3RhdGUpIHsKKwkJcmV0ID0gLUVOT01FTTsK KwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoJm5l d19wbGFuZV9zdGF0ZS0+dWFwaSwgZmIpOworCisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY194 ID0gc3JjX3g7CisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY195ID0gc3JjX3k7CisJbmV3X3Bs YW5lX3N0YXRlLT51YXBpLnNyY193ID0gc3JjX3c7CisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNy Y19oID0gc3JjX2g7CisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfeCA9IGNydGNfeDsKKwlu ZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y195ID0gY3J0Y195OworCW5ld19wbGFuZV9zdGF0ZS0+ dWFwaS5jcnRjX3cgPSBjcnRjX3c7CisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfaCA9IGNy dGNfaDsKKworCWludGVsX3BsYW5lX2NvcHlfdWFwaV90b19od19zdGF0ZShuZXdfcGxhbmVfc3Rh dGUsIG5ld19wbGFuZV9zdGF0ZSwgY3J0Yyk7CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9hdG9taWNf Y2hlY2tfd2l0aF9zdGF0ZShjcnRjX3N0YXRlLCBuZXdfY3J0Y19zdGF0ZSwKKwkJCQkJCSAgb2xk X3BsYW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Zy ZWU7CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9waW5fZmIobmV3X3BsYW5lX3N0YXRlKTsKKwlpZiAo cmV0KQorCQlnb3RvIG91dF9mcmVlOworCisJaW50ZWxfZnJvbnRidWZmZXJfZmx1c2godG9faW50 ZWxfZnJvbnRidWZmZXIobmV3X3BsYW5lX3N0YXRlLT5ody5mYiksCisJCQkJT1JJR0lOX0ZMSVAp OworCWludGVsX2Zyb250YnVmZmVyX3RyYWNrKHRvX2ludGVsX2Zyb250YnVmZmVyKG9sZF9wbGFu ZV9zdGF0ZS0+aHcuZmIpLAorCQkJCXRvX2ludGVsX2Zyb250YnVmZmVyKG5ld19wbGFuZV9zdGF0 ZS0+aHcuZmIpLAorCQkJCXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQpOworCisJLyogU3dhcCBwbGFu ZSBzdGF0ZSAqLworCXBsYW5lLT5iYXNlLnN0YXRlID0gJm5ld19wbGFuZV9zdGF0ZS0+dWFwaTsK KworCS8qCisJICogV2UgY2Fubm90IHN3YXAgY3J0Y19zdGF0ZSBhcyBpdCBtYXkgYmUgaW4gdXNl IGJ5IGFuIGF0b21pYyBjb21taXQgb3IKKwkgKiBwYWdlIGZsaXAgdGhhdCdzIHJ1bm5pbmcgc2lt dWx0YW5lb3VzbHkuIElmIHdlIHN3YXAgY3J0Y19zdGF0ZSBhbmQKKwkgKiBkZXN0cm95IHRoZSBv bGQgc3RhdGUsIHdlIHdpbGwgY2F1c2UgYSB1c2UtYWZ0ZXItZnJlZSB0aGVyZS4KKwkgKgorCSAq IE9ubHkgdXBkYXRlIGFjdGl2ZV9wbGFuZXMsIHdoaWNoIGlzIG5lZWRlZCBmb3Igb3VyIGludGVy bmFsCisJICogYm9va2tlZXBpbmcuIEVpdGhlciB2YWx1ZSB3aWxsIGRvIHRoZSByaWdodCB0aGlu ZyB3aGVuIHVwZGF0aW5nCisJICogcGxhbmVzIGF0b21pY2FsbHkuIElmIHRoZSBjdXJzb3Igd2Fz IHBhcnQgb2YgdGhlIGF0b21pYyB1cGRhdGUgdGhlbgorCSAqIHdlIHdvdWxkIGhhdmUgdGFrZW4g dGhlIHNsb3dwYXRoLgorCSAqLworCWNydGNfc3RhdGUtPmFjdGl2ZV9wbGFuZXMgPSBuZXdfY3J0 Y19zdGF0ZS0+YWN0aXZlX3BsYW5lczsKKworCWlmIChuZXdfcGxhbmVfc3RhdGUtPnVhcGkudmlz aWJsZSkKKwkJaW50ZWxfdXBkYXRlX3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlLCBuZXdfcGxhbmVf c3RhdGUpOworCWVsc2UKKwkJaW50ZWxfZGlzYWJsZV9wbGFuZShwbGFuZSwgY3J0Y19zdGF0ZSk7 CisKKwlpbnRlbF9wbGFuZV91bnBpbl9mYihvbGRfcGxhbmVfc3RhdGUpOworCitvdXRfZnJlZToK KwlpZiAobmV3X2NydGNfc3RhdGUpCisJCWludGVsX2NydGNfZGVzdHJveV9zdGF0ZSgmY3J0Yy0+ YmFzZSwgJm5ld19jcnRjX3N0YXRlLT51YXBpKTsKKwlpZiAocmV0KQorCQlpbnRlbF9wbGFuZV9k ZXN0cm95X3N0YXRlKCZwbGFuZS0+YmFzZSwgJm5ld19wbGFuZV9zdGF0ZS0+dWFwaSk7CisJZWxz ZQorCQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlKCZwbGFuZS0+YmFzZSwgJm9sZF9wbGFuZV9z dGF0ZS0+dWFwaSk7CisJcmV0dXJuIHJldDsKKworc2xvdzoKKwlyZXR1cm4gZHJtX2F0b21pY19o ZWxwZXJfdXBkYXRlX3BsYW5lKCZwbGFuZS0+YmFzZSwgJmNydGMtPmJhc2UsIGZiLAorCQkJCQkg ICAgICBjcnRjX3gsIGNydGNfeSwgY3J0Y193LCBjcnRjX2gsCisJCQkJCSAgICAgIHNyY194LCBz cmNfeSwgc3JjX3csIHNyY19oLCBjdHgpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9w bGFuZV9mdW5jcyBpbnRlbF9jdXJzb3JfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9 IGludGVsX2xlZ2FjeV9jdXJzb3JfdXBkYXRlLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21p Y19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ks CisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUs CisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSwKKwku Zm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpbnRlbF9jdXJzb3JfZm9ybWF0X21vZF9zdXBwb3J0ZWQs Cit9OworCitzdHJ1Y3QgaW50ZWxfcGxhbmUgKgoraW50ZWxfY3Vyc29yX3BsYW5lX2NyZWF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgIGVudW0gcGlwZSBwaXBlKQor eworCXN0cnVjdCBpbnRlbF9wbGFuZSAqY3Vyc29yOworCWludCByZXQsIHpwb3M7CisKKwljdXJz b3IgPSBpbnRlbF9wbGFuZV9hbGxvYygpOworCWlmIChJU19FUlIoY3Vyc29yKSkKKwkJcmV0dXJu IGN1cnNvcjsKKworCWN1cnNvci0+cGlwZSA9IHBpcGU7CisJY3Vyc29yLT5pOXh4X3BsYW5lID0g KGVudW0gaTl4eF9wbGFuZV9pZCkgcGlwZTsKKwljdXJzb3ItPmlkID0gUExBTkVfQ1VSU09SOwor CWN1cnNvci0+ZnJvbnRidWZmZXJfYml0ID0gSU5URUxfRlJPTlRCVUZGRVIocGlwZSwgY3Vyc29y LT5pZCk7CisKKwlpZiAoSVNfSTg0NUcoZGV2X3ByaXYpIHx8IElTX0k4NjVHKGRldl9wcml2KSkg eworCQljdXJzb3ItPm1heF9zdHJpZGUgPSBpODQ1X2N1cnNvcl9tYXhfc3RyaWRlOworCQljdXJz b3ItPnVwZGF0ZV9wbGFuZSA9IGk4NDVfdXBkYXRlX2N1cnNvcjsKKwkJY3Vyc29yLT5kaXNhYmxl X3BsYW5lID0gaTg0NV9kaXNhYmxlX2N1cnNvcjsKKwkJY3Vyc29yLT5nZXRfaHdfc3RhdGUgPSBp ODQ1X2N1cnNvcl9nZXRfaHdfc3RhdGU7CisJCWN1cnNvci0+Y2hlY2tfcGxhbmUgPSBpODQ1X2No ZWNrX2N1cnNvcjsKKwl9IGVsc2UgeworCQljdXJzb3ItPm1heF9zdHJpZGUgPSBpOXh4X2N1cnNv cl9tYXhfc3RyaWRlOworCQljdXJzb3ItPnVwZGF0ZV9wbGFuZSA9IGk5eHhfdXBkYXRlX2N1cnNv cjsKKwkJY3Vyc29yLT5kaXNhYmxlX3BsYW5lID0gaTl4eF9kaXNhYmxlX2N1cnNvcjsKKwkJY3Vy c29yLT5nZXRfaHdfc3RhdGUgPSBpOXh4X2N1cnNvcl9nZXRfaHdfc3RhdGU7CisJCWN1cnNvci0+ Y2hlY2tfcGxhbmUgPSBpOXh4X2NoZWNrX2N1cnNvcjsKKwl9CisKKwljdXJzb3ItPmN1cnNvci5i YXNlID0gfjA7CisJY3Vyc29yLT5jdXJzb3IuY250bCA9IH4wOworCisJaWYgKElTX0k4NDVHKGRl dl9wcml2KSB8fCBJU19JODY1RyhkZXZfcHJpdikgfHwgSEFTX0NVUl9GQkMoZGV2X3ByaXYpKQor CQljdXJzb3ItPmN1cnNvci5zaXplID0gfjA7CisKKwlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5l X2luaXQoJmRldl9wcml2LT5kcm0sICZjdXJzb3ItPmJhc2UsCisJCQkJICAgICAgIDAsICZpbnRl bF9jdXJzb3JfcGxhbmVfZnVuY3MsCisJCQkJICAgICAgIGludGVsX2N1cnNvcl9mb3JtYXRzLAor CQkJCSAgICAgICBBUlJBWV9TSVpFKGludGVsX2N1cnNvcl9mb3JtYXRzKSwKKwkJCQkgICAgICAg Y3Vyc29yX2Zvcm1hdF9tb2RpZmllcnMsCisJCQkJICAgICAgIERSTV9QTEFORV9UWVBFX0NVUlNP UiwKKwkJCQkgICAgICAgImN1cnNvciAlYyIsIHBpcGVfbmFtZShwaXBlKSk7CisJaWYgKHJldCkK KwkJZ290byBmYWlsOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKKwkJZHJtX3Bs YW5lX2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eSgmY3Vyc29yLT5iYXNlLAorCQkJCQkJICAgRFJN X01PREVfUk9UQVRFXzAsCisJCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVfMCB8CisJCQkJCQkgICBE Uk1fTU9ERV9ST1RBVEVfMTgwKTsKKworCXpwb3MgPSBSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5u dW1fc3ByaXRlc1twaXBlXSArIDE7CisJZHJtX3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJsZV9w cm9wZXJ0eSgmY3Vyc29yLT5iYXNlLCB6cG9zKTsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYp ID49IDEyKQorCQlkcm1fcGxhbmVfZW5hYmxlX2ZiX2RhbWFnZV9jbGlwcygmY3Vyc29yLT5iYXNl KTsKKworCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZjdXJzb3ItPmJhc2UsICZpbnRlbF9wbGFuZV9o ZWxwZXJfZnVuY3MpOworCisJcmV0dXJuIGN1cnNvcjsKKworZmFpbDoKKwlpbnRlbF9wbGFuZV9m cmVlKGN1cnNvcik7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3Vyc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5jZTMzM2JmNGMyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJ bnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX0lOVEVMX0NVUlNPUl9IXworI2RlZmlu ZSBfSU5URUxfQ1VSU09SX0hfCisKK2VudW0gcGlwZTsKK3N0cnVjdCBkcm1faTkxNV9wcml2YXRl Oworc3RydWN0IGludGVsX3BsYW5lOworCitzdHJ1Y3QgaW50ZWxfcGxhbmUgKgoraW50ZWxfY3Vy c29yX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkg IGVudW0gcGlwZSBwaXBlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZGlzcGxheS5jCmluZGV4IDc5ZDc0NzliZWVkMi4uMjg4NTU4NDRmOGRlIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtNjksNiAr NjksNyBAQAogI2luY2x1ZGUgImludGVsX2NkY2xrLmgiCiAjaW5jbHVkZSAiaW50ZWxfY29sb3Iu aCIKICNpbmNsdWRlICJpbnRlbF9jc3IuaCIKKyNpbmNsdWRlICJpbnRlbF9jdXJzb3IuaCIKICNp bmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHBfbGlua190 cmFpbmluZy5oIgogI2luY2x1ZGUgImludGVsX2ZiYy5oIgpAQCAtMTM3LDE2ICsxMzgsNiBAQCBz dGF0aWMgY29uc3QgdTY0IGk5eHhfZm9ybWF0X21vZGlmaWVyc1tdID0gewogCURSTV9GT1JNQVRf TU9EX0lOVkFMSUQKIH07CiAKLS8qIEN1cnNvciBmb3JtYXRzICovCi1zdGF0aWMgY29uc3QgdTMy IGludGVsX2N1cnNvcl9mb3JtYXRzW10gPSB7Ci0JRFJNX0ZPUk1BVF9BUkdCODg4OCwKLX07Ci0K LXN0YXRpYyBjb25zdCB1NjQgY3Vyc29yX2Zvcm1hdF9tb2RpZmllcnNbXSA9IHsKLQlEUk1fRk9S TUFUX01PRF9MSU5FQVIsCi0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAotfTsKLQogc3RhdGljIHZv aWQgaTl4eF9jcnRjX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKIAkJCQlzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwogc3RhdGljIHZvaWQgaWxrX3BjaF9j bG9ja19nZXQoc3RydWN0IGludGVsX2NydGMgKmNydGMsCkBAIC0yNTI4LDkgKzI1MTksOSBAQCBz dGF0aWMgdTMyIGludGVsX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAogCXJldHVybiBvZmZzZXRfYWxpZ25lZDsKIH0KIAotc3RhdGljIHUz MiBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAotCQkJ CQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAotCQkJCQkgICAg ICBpbnQgY29sb3JfcGxhbmUpCit1MzIgaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNl dChpbnQgKngsIGludCAqeSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpzdGF0ZSwKKwkJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lKQogewogCXN0cnVjdCBpbnRl bF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShzdGF0ZS0+dWFwaS5wbGFuZSk7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9wbGFu ZS0+YmFzZS5kZXYpOwpAQCAtMzI2Nyw3ICszMjU4LDcgQEAgaW50ZWxfcGxhbmVfcmVtYXBfZ3R0 KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAJfQogfQogCi1zdGF0aWMg aW50CitpbnQKIGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCiB7CiAJY29uc3Qgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICpmYiA9 CkBAIC0xMTUzNiw1NjkgKzExNTI3LDYgQEAgc3RhdGljIGJvb2wgaW50ZWxfY3J0Y19nZXRfcGlw ZV9jb25maWcoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiAJcmV0dXJuIHRy dWU7CiB9CiAKLXN0YXRpYyB1MzIgaW50ZWxfY3Vyc29yX2Jhc2UoY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCWNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWNv bnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwot CXUzMiBiYXNlOwotCi0JaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5kaXNwbGF5LmN1cnNvcl9u ZWVkc19waHlzaWNhbCkKLQkJYmFzZSA9IHNnX2RtYV9hZGRyZXNzKG9iai0+bW0ucGFnZXMtPnNn bCk7Ci0JZWxzZQotCQliYXNlID0gaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUp OwotCi0JcmV0dXJuIGJhc2UgKyBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0Owot fQotCi1zdGF0aWMgdTMyIGludGVsX2N1cnNvcl9wb3NpdGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWludCB4ID0gcGxhbmVfc3RhdGUtPnVhcGku ZHN0LngxOwotCWludCB5ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LnkxOwotCXUzMiBwb3MgPSAw OwotCi0JaWYgKHggPCAwKSB7Ci0JCXBvcyB8PSBDVVJTT1JfUE9TX1NJR04gPDwgQ1VSU09SX1hf U0hJRlQ7Ci0JCXggPSAteDsKLQl9Ci0JcG9zIHw9IHggPDwgQ1VSU09SX1hfU0hJRlQ7Ci0KLQlp ZiAoeSA8IDApIHsKLQkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJTT1JfWV9TSElGVDsK LQkJeSA9IC15OwotCX0KLQlwb3MgfD0geSA8PCBDVVJTT1JfWV9TSElGVDsKLQotCXJldHVybiBw b3M7Ci19Ci0KLXN0YXRpYyBib29sIGludGVsX2N1cnNvcl9zaXplX29rKGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JY29uc3Qgc3RydWN0IGRybV9tb2Rl X2NvbmZpZyAqY29uZmlnID0KLQkJJnBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYtPm1vZGVf Y29uZmlnOwotCWludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpOwotCWludCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRz dCk7Ci0KLQlyZXR1cm4gd2lkdGggPiAwICYmIHdpZHRoIDw9IGNvbmZpZy0+Y3Vyc29yX3dpZHRo ICYmCi0JCWhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IGNvbmZpZy0+Y3Vyc29yX2hlaWdodDsKLX0K LQotc3RhdGljIGludCBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9Ci0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JdW5zaWdu ZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwotCWludCBzcmNfeCwg c3JjX3k7Ci0JdTMyIG9mZnNldDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaW50ZWxfcGxhbmVfY29t cHV0ZV9ndHQocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAo IXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCi0JCXJldHVybiAwOwotCi0Jc3JjX3ggPSBwbGFu ZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7Ci0Jc3JjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5z cmMueTEgPj4gMTY7Ci0KLQlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmc3JjX3gsICZzcmNfeSwgcGxh bmVfc3RhdGUsIDApOwotCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZz ZXQoJnNyY194LCAmc3JjX3ksCi0JCQkJCQkgICAgcGxhbmVfc3RhdGUsIDApOwotCi0JaWYgKHNy Y194ICE9IDAgfHwgc3JjX3kgIT0gMCkgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwK LQkJCSAgICAiQXJiaXRyYXJ5IGN1cnNvciBwYW5uaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIFB1dCB0aGUgZmluYWwgY29vcmRpbmF0ZXMg YmFjayBzbyB0aGF0IHRoZSBzcmMKLQkgKiBjb29yZGluYXRlIGNoZWNrcyB3aWxsIHNlZSB0aGUg cmlnaHQgdmFsdWVzLgotCSAqLwotCWRybV9yZWN0X3RyYW5zbGF0ZV90bygmcGxhbmVfc3RhdGUt PnVhcGkuc3JjLAotCQkJICAgICAgc3JjX3ggPDwgMTYsIHNyY195IDw8IDE2KTsKLQotCS8qIElM SysgZG8gdGhpcyBhdXRvbWFnaWNhbGx5IGluIGhhcmR3YXJlICovCi0JaWYgKEhBU19HTUNIKGRl dl9wcml2KSAmJiByb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApIHsKLQkJY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JCWludCBzcmNf dyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCQlpbnQg c3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7Ci0K LQkJb2Zmc2V0ICs9IChzcmNfaCAqIHNyY193IC0gMSkgKiBmYi0+Zm9ybWF0LT5jcHBbMF07Ci0J fQotCi0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldCA9IG9mZnNldDsKLQlwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueCA9IHNyY194OwotCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVswXS55ID0gc3JjX3k7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbnRlbF9j aGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkgICAg ICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2 KTsKLQljb25zdCBzdHJ1Y3QgZHJtX3JlY3Qgc3JjID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjOwot CWNvbnN0IHN0cnVjdCBkcm1fcmVjdCBkc3QgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3Q7Ci0JaW50 IHJldDsKLQotCWlmIChmYiAmJiBmYi0+bW9kaWZpZXIgIT0gRFJNX0ZPUk1BVF9NT0RfTElORUFS KSB7Ci0JCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJjdXJzb3IgY2Fubm90IGJlIHRpbGVkXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0gaW50ZWxfYXRvbWljX3BsYW5lX2No ZWNrX2NsaXBwaW5nKHBsYW5lX3N0YXRlLCBjcnRjX3N0YXRlLAotCQkJCQkJRFJNX1BMQU5FX0hF TFBFUl9OT19TQ0FMSU5HLAotCQkJCQkJRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAotCQkJ CQkJdHJ1ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFVzZSB0aGUgdW5jbGlw cGVkIHNyYy9kc3QgcmVjdGFuZ2xlcywgd2hpY2ggd2UgcHJvZ3JhbSB0byBodyAqLwotCXBsYW5l X3N0YXRlLT51YXBpLnNyYyA9IHNyYzsKLQlwbGFuZV9zdGF0ZS0+dWFwaS5kc3QgPSBkc3Q7Ci0K LQlyZXQgPSBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJl dCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKLQkJ cmV0dXJuIDA7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zcmNfY29vcmRpbmF0ZXMocGxh bmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIHVuc2lnbmVkIGludAotaTg0NV9jdXJzb3JfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lLAotCQkgICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAot CQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQotewotCXJldHVybiAyMDQ4OwotfQotCi1z dGF0aWMgdTMyIGk4NDVfY3Vyc29yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQotewotCXUzMiBjbnRsID0gMDsKLQotCWlmIChjcnRjX3N0YXRlLT5n YW1tYV9lbmFibGUpCi0JCWNudGwgfD0gQ1VSU09SX0dBTU1BX0VOQUJMRTsKLQotCXJldHVybiBj bnRsOwotfQotCi1zdGF0aWMgdTMyIGk4NDVfY3Vyc29yX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JcmV0dXJuIENVUlNPUl9FTkFCTEUgfAotCQlDVVJTT1Jf Rk9STUFUX0FSR0IgfAotCQlDVVJTT1JfU1RSSURFKHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsw XS5zdHJpZGUpOwotfQotCi1zdGF0aWMgYm9vbCBpODQ1X2N1cnNvcl9zaXplX29rKGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0JaW50IHdpZHRoID0gZHJt X3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0KLQkvKgotCSAqIDg0NWcvODY1 ZyBhcmUgb25seSBsaW1pdGVkIGJ5IHRoZSB3aWR0aCBvZiB0aGVpciBjdXJzb3JzLAotCSAqIHRo ZSBoZWlnaHQgaXMgYXJiaXRyYXJ5IHVwIHRvIHRoZSBwcmVjaXNpb24gb2YgdGhlIHJlZ2lzdGVy LgotCSAqLwotCXJldHVybiBpbnRlbF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkgJiYgSVNf QUxJR05FRCh3aWR0aCwgNjQpOwotfQotCi1zdGF0aWMgaW50IGk4NDVfY2hlY2tfY3Vyc29yKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICBzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQlpbnQgcmV0Owot Ci0JcmV0ID0gaW50ZWxfY2hlY2tfY3Vyc29yKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogaWYgd2Ugd2FudCB0byB0dXJuIG9mZiB0aGUg Y3Vyc29yIGlnbm9yZSB3aWR0aCBhbmQgaGVpZ2h0ICovCi0JaWYgKCFmYikKLQkJcmV0dXJuIDA7 Ci0KLQkvKiBDaGVjayBmb3Igd2hpY2ggY3Vyc29yIHR5cGVzIHdlIHN1cHBvcnQgKi8KLQlpZiAo IWk4NDVfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpKSB7Ci0JCWRybV9kYmdfa21zKCZpOTE1 LT5kcm0sCi0JCQkgICAgIkN1cnNvciBkaW1lbnNpb24gJWR4JWQgbm90IHN1cHBvcnRlZFxuIiwK LQkJCSAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSwKLQkJCSAgICBk cm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQlkcm1fV0FSTl9PTigmaTkxNS0+ZHJtLCBwbGFuZV9zdGF0ZS0+dWFwaS52aXNp YmxlICYmCi0JCSAgICBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlICE9IGZiLT5w aXRjaGVzWzBdKTsKLQotCXN3aXRjaCAoZmItPnBpdGNoZXNbMF0pIHsKLQljYXNlIDI1NjoKLQlj YXNlIDUxMjoKLQljYXNlIDEwMjQ6Ci0JY2FzZSAyMDQ4OgotCQlicmVhazsKLQlkZWZhdWx0Ogot CQkgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIkludmFsaWQgY3Vyc29yIHN0cmlkZSAoJXUpXG4i LAotCQkJICAgICBmYi0+cGl0Y2hlc1swXSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXBs YW5lX3N0YXRlLT5jdGwgPSBpODQ1X2N1cnNvcl9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGk4NDVfdXBkYXRlX2N1cnNvcihzdHJ1 Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwotCXUzMiBjbnRsID0gMCwgYmFzZSA9IDAsIHBv cyA9IDAsIHNpemUgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Ci0KLQlpZiAocGxhbmVf c3RhdGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkgewotCQl1bnNpZ25lZCBpbnQgd2lk dGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKLQkJdW5zaWduZWQg aW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKLQot CQljbnRsID0gcGxhbmVfc3RhdGUtPmN0bCB8Ci0JCQlpODQ1X2N1cnNvcl9jdGxfY3J0YyhjcnRj X3N0YXRlKTsKLQotCQlzaXplID0gKGhlaWdodCA8PCAxMikgfCB3aWR0aDsKLQotCQliYXNlID0g aW50ZWxfY3Vyc29yX2Jhc2UocGxhbmVfc3RhdGUpOwotCQlwb3MgPSBpbnRlbF9jdXJzb3JfcG9z aXRpb24ocGxhbmVfc3RhdGUpOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+ dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLQotCS8qIE9uIHRoZXNlIGNoaXBzZXRzIHdlIGNhbiBv bmx5IG1vZGlmeSB0aGUgYmFzZS9zaXplL3N0cmlkZQotCSAqIHdoaWxzdCB0aGUgY3Vyc29yIGlz IGRpc2FibGVkLgotCSAqLwotCWlmIChwbGFuZS0+Y3Vyc29yLmJhc2UgIT0gYmFzZSB8fAotCSAg ICBwbGFuZS0+Y3Vyc29yLnNpemUgIT0gc2l6ZSB8fAotCSAgICBwbGFuZS0+Y3Vyc29yLmNudGwg IT0gY250bCkgewotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQ05UUihQSVBFX0Ep LCAwKTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkJBU0UoUElQRV9BKSwgYmFz ZSk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJTSVpFLCBzaXplKTsKLQkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBPUyhQSVBFX0EpLCBwb3MpOwotCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQ05UUihQSVBFX0EpLCBjbnRsKTsKLQotCQlwbGFuZS0+ Y3Vyc29yLmJhc2UgPSBiYXNlOwotCQlwbGFuZS0+Y3Vyc29yLnNpemUgPSBzaXplOwotCQlwbGFu ZS0+Y3Vyc29yLmNudGwgPSBjbnRsOwotCX0gZWxzZSB7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBDVVJQT1MoUElQRV9BKSwgcG9zKTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQg aTg0NV9kaXNhYmxlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJCWNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCWk4NDVfdXBkYXRlX2N1 cnNvcihwbGFuZSwgY3J0Y19zdGF0ZSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBib29sIGk4NDVfY3Vy c29yX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJCSAgICAgZW51 bSBwaXBlICpwaXBlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWlu IHBvd2VyX2RvbWFpbjsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQlib29sIHJldDsKLQot CXBvd2VyX2RvbWFpbiA9IFBPV0VSX0RPTUFJTl9QSVBFKFBJUEVfQSk7Ci0Jd2FrZXJlZiA9IGlu dGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7 Ci0JaWYgKCF3YWtlcmVmKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXQgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSkpICYgQ1VSU09SX0VOQUJMRTsKLQotCSpwaXBlID0g UElQRV9BOwotCi0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFp biwgd2FrZXJlZik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1p OXh4X2N1cnNvcl9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCSAgICAg ICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQg cm90YXRpb24pCi17Ci0JcmV0dXJuIHBsYW5lLT5iYXNlLmRldi0+bW9kZV9jb25maWcuY3Vyc29y X3dpZHRoICogNDsKLX0KLQotc3RhdGljIHUzMiBpOXh4X2N1cnNvcl9jdGxfY3J0Yyhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQl1 MzIgY250bCA9IDA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJcmV0dXJu IGNudGw7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQotCQljbnRsID0gTUNVUlNP Ul9HQU1NQV9FTkFCTEU7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJsZSkKLQkJY250bCB8 PSBNQ1VSU09SX1BJUEVfQ1NDX0VOQUJMRTsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwg NSAmJiAhSVNfRzRYKGRldl9wcml2KSkKLQkJY250bCB8PSBNQ1VSU09SX1BJUEVfU0VMRUNUKGNy dGMtPnBpcGUpOwotCi0JcmV0dXJuIGNudGw7Ci19Ci0KLXN0YXRpYyB1MzIgaTl4eF9jdXJzb3Jf Y3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgY29u c3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBs YW5lLT5kZXYpOwotCXUzMiBjbnRsID0gMDsKLQotCWlmIChJU19HRU4oZGV2X3ByaXYsIDYpIHx8 IElTX0lWWUJSSURHRShkZXZfcHJpdikpCi0JCWNudGwgfD0gTUNVUlNPUl9UUklDS0xFX0ZFRURf RElTQUJMRTsKLQotCXN3aXRjaCAoZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRz dCkpIHsKLQljYXNlIDY0OgotCQljbnRsIHw9IE1DVVJTT1JfTU9ERV82NF9BUkdCX0FYOwotCQli cmVhazsKLQljYXNlIDEyODoKLQkJY250bCB8PSBNQ1VSU09SX01PREVfMTI4X0FSR0JfQVg7Ci0J CWJyZWFrOwotCWNhc2UgMjU2OgotCQljbnRsIHw9IE1DVVJTT1JfTU9ERV8yNTZfQVJHQl9BWDsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGRybV9yZWN0X3dpZHRoKCZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHBsYW5lX3N0YXRl LT5ody5yb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApCi0JCWNudGwgfD0gTUNVUlNPUl9S T1RBVEVfMTgwOwotCi0JcmV0dXJuIGNudGw7Ci19Ci0KLXN0YXRpYyBib29sIGk5eHhfY3Vyc29y X3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5lX3N0 YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCWludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QpOwotCWludCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5l X3N0YXRlLT51YXBpLmRzdCk7Ci0KLQlpZiAoIWludGVsX2N1cnNvcl9zaXplX29rKHBsYW5lX3N0 YXRlKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogQ3Vyc29yIHdpZHRoIGlzIGxpbWl0ZWQgdG8g YSBmZXcgcG93ZXItb2YtdHdvIHNpemVzICovCi0Jc3dpdGNoICh3aWR0aCkgewotCWNhc2UgMjU2 OgotCWNhc2UgMTI4OgotCWNhc2UgNjQ6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci0KLQkvKgotCSAqIElWQisgaGF2ZSBDVVJfRkJDX0NUTCB3aGljaCBhbGxvd3Mg YW4gYXJiaXRyYXJ5IGN1cnNvcgotCSAqIGhlaWdodCBmcm9tIDggbGluZXMgdXAgdG8gdGhlIGN1 cnNvciB3aWR0aCwgd2hlbiB0aGUKLQkgKiBjdXJzb3IgaXMgbm90IHJvdGF0ZWQuIEV2ZXJ5dGhp bmcgZWxzZSByZXF1aXJlcyBzcXVhcmUKLQkgKiBjdXJzb3JzLgotCSAqLwotCWlmIChIQVNfQ1VS X0ZCQyhkZXZfcHJpdikgJiYKLQkgICAgcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uICYgRFJNX01P REVfUk9UQVRFXzApIHsKLQkJaWYgKGhlaWdodCA8IDggfHwgaGVpZ2h0ID4gd2lkdGgpCi0JCQly ZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJaWYgKGhlaWdodCAhPSB3aWR0aCkKLQkJCXJldHVy biBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludCBpOXh4X2NoZWNr X2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2 KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5m YjsKLQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCWludCByZXQ7Ci0KLQlyZXQgPSBp bnRlbF9jaGVja19jdXJzb3IoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0KLQkvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBjdXJzb3IgaWdu b3JlIHdpZHRoIGFuZCBoZWlnaHQgKi8KLQlpZiAoIWZiKQotCQlyZXR1cm4gMDsKLQotCS8qIENo ZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAqLwotCWlmICghaTl4eF9jdXJz b3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsKLQkJZHJtX2RiZygmZGV2X3ByaXYtPmRybSwKLQkJ CSJDdXJzb3IgZGltZW5zaW9uICVkeCVkIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQlkcm1fcmVjdF93 aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSwKLQkJCWRybV9yZWN0X2hlaWdodCgmcGxhbmVf c3RhdGUtPnVhcGkuZHN0KSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRybV9XQVJOX09O KCZkZXZfcHJpdi0+ZHJtLCBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlICYmCi0JCSAgICBwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlICE9IGZiLT5waXRjaGVzWzBdKTsKLQotCWlm IChmYi0+cGl0Y2hlc1swXSAhPQotCSAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVh cGkuZHN0KSAqIGZiLT5mb3JtYXQtPmNwcFswXSkgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwKLQkJCSAgICAiSW52YWxpZCBjdXJzb3Igc3RyaWRlICgldSkgKGN1cnNvciB3aWR0aCAl ZClcbiIsCi0JCQkgICAgZmItPnBpdGNoZXNbMF0sCi0JCQkgICAgZHJtX3JlY3Rfd2lkdGgoJnBs YW5lX3N0YXRlLT51YXBpLmRzdCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAq IFRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGN1cnNvciBvbiBDSFYgcGlwZSBDLgot CSAqIElmIGl0IHN0cmFkZGxlcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBzY3JlZW4gdGhlbgotCSAq IG1vdmluZyBpdCBhd2F5IGZyb20gdGhlIGVkZ2Ugb3IgZGlzYWJsaW5nIGl0IG9mdGVuCi0JICog cmVzdWx0cyBpbiBhIHBpcGUgdW5kZXJydW4sIGFuZCBvZnRlbiB0aGF0IGNhbiBsZWFkIHRvCi0J ICogZGVhZCBwaXBlIChjb25zdGFudCB1bmRlcnJ1biByZXBvcnRlZCwgYW5kIGl0IHNjYW5zCi0J ICogb3V0IGp1c3QgYSBzb2xpZCBjb2xvcikuIFRvIHJlY292ZXIgZnJvbSB0aGF0LCB0aGUKLQkg KiBkaXNwbGF5IHBvd2VyIHdlbGwgbXVzdCBiZSB0dXJuZWQgb2ZmIGFuZCBvbiBhZ2Fpbi4KLQkg KiBSZWZ1c2UgdGhlIHB1dCB0aGUgY3Vyc29yIGludG8gdGhhdCBjb21wcm9taXNlZCBwb3NpdGlv bi4KLQkgKi8KLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgJiYgcGlwZSA9PSBQSVBFX0Mg JiYKLQkgICAgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJiBwbGFuZV9zdGF0ZS0+dWFwaS5k c3QueDEgPCAwKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJDSFYg Y3Vyc29yIEMgbm90IGFsbG93ZWQgdG8gc3RyYWRkbGUgdGhlIGxlZnQgc2NyZWVuIGVkZ2VcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwbGFuZV9zdGF0ZS0+Y3RsID0gaTl4eF9jdXJz b3JfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgdm9pZCBpOXh4X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJ CSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2 KTsKLQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwotCXUzMiBjbnRsID0gMCwgYmFzZSA9 IDAsIHBvcyA9IDAsIGZiY19jdGwgPSAwOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Ci0KLQlp ZiAocGxhbmVfc3RhdGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkgewotCQl1bnNpZ25l ZCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCQl1bnNp Z25lZCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0K LQkJY250bCA9IHBsYW5lX3N0YXRlLT5jdGwgfAotCQkJaTl4eF9jdXJzb3JfY3RsX2NydGMoY3J0 Y19zdGF0ZSk7Ci0KLQkJaWYgKHdpZHRoICE9IGhlaWdodCkKLQkJCWZiY19jdGwgPSBDVVJfRkJD X0NUTF9FTiB8IChoZWlnaHQgLSAxKTsKLQotCQliYXNlID0gaW50ZWxfY3Vyc29yX2Jhc2UocGxh bmVfc3RhdGUpOwotCQlwb3MgPSBpbnRlbF9jdXJzb3JfcG9zaXRpb24ocGxhbmVfc3RhdGUpOwot CX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdz KTsKLQotCS8qCi0JICogT24gc29tZSBwbGF0Zm9ybXMgd3JpdGluZyBDVVJDTlRSIGZpcnN0IHdp bGwgYWxzbwotCSAqIGNhdXNlIENVUlBPUyB0byBiZSBhcm1lZCBieSB0aGUgQ1VSQkFTRSB3cml0 ZS4KLQkgKiBXaXRob3V0IHRoZSBDVVJDTlRSIHdyaXRlIHRoZSBDVVJQT1Mgd3JpdGUgd291bGQK LQkgKiBhcm0gaXRzZWxmLiBUaHVzIHdlIGFsd2F5cyB1cGRhdGUgQ1VSQ05UUiBiZWZvcmUKLQkg KiBDVVJQT1MuCi0JICoKLQkgKiBPbiBvdGhlciBwbGF0Zm9ybXMgQ1VSUE9TIGFsd2F5cyByZXF1 aXJlcyB0aGUKLQkgKiBDVVJCQVNFIHdyaXRlIHRvIGFybSB0aGUgdXBkYXRlLiBBZGRpdG9uYWxs eQotCSAqIGEgd3JpdGUgdG8gYW55IG9mIHRoZSBjdXJzb3IgcmVnaXN0ZXIgd2lsbCBjYW5jZWwK LQkgKiBhbiBhbHJlYWR5IGFybWVkIGN1cnNvciB1cGRhdGUuIFRodXMgbGVhdmluZyBvdXQKLQkg KiB0aGUgQ1VSQkFTRSB3cml0ZSBhZnRlciBDVVJQT1MgY291bGQgbGVhZCB0byBhCi0JICogY3Vy c29yIHRoYXQgZG9lc24ndCBhcHBlYXIgdG8gbW92ZSwgb3IgZXZlbiBjaGFuZ2UKLQkgKiBzaGFw ZS4gVGh1cyB3ZSBhbHdheXMgd3JpdGUgQ1VSQkFTRS4KLQkgKgotCSAqIFRoZSBvdGhlciByZWdp c3RlcnMgYXJlIGFybWVkIGJ5IGJ5IHRoZSBDVVJCQVNFIHdyaXRlCi0JICogZXhjZXB0IHdoZW4g dGhlIHBsYW5lIGlzIGdldHRpbmcgZW5hYmxlZCBhdCB3aGljaCB0aW1lCi0JICogdGhlIENVUkNO VFIgd3JpdGUgYXJtcyB0aGUgdXBkYXRlLgotCSAqLwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gOSkKLQkJc2tsX3dyaXRlX2N1cnNvcl93bShwbGFuZSwgY3J0Y19zdGF0ZSk7Ci0KLQlp ZiAoIWludGVsX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKLQkJaW50ZWxfcHNyMl9w cm9ncmFtX3BsYW5lX3NlbF9mZXRjaChwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIDAp OwotCi0JaWYgKHBsYW5lLT5jdXJzb3IuYmFzZSAhPSBiYXNlIHx8Ci0JICAgIHBsYW5lLT5jdXJz b3Iuc2l6ZSAhPSBmYmNfY3RsIHx8Ci0JICAgIHBsYW5lLT5jdXJzb3IuY250bCAhPSBjbnRsKSB7 Ci0JCWlmIChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCi0JCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgQ1VSX0ZCQ19DVEwocGlwZSksCi0JCQkJCSAgZmJjX2N0bCk7Ci0JCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKHBpcGUpLCBjbnRsKTsKLQkJaW50ZWxfZGVfd3JpdGVf ZncoZGV2X3ByaXYsIENVUlBPUyhwaXBlKSwgcG9zKTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIENVUkJBU0UocGlwZSksIGJhc2UpOwotCi0JCXBsYW5lLT5jdXJzb3IuYmFzZSA9IGJh c2U7Ci0JCXBsYW5lLT5jdXJzb3Iuc2l6ZSA9IGZiY19jdGw7Ci0JCXBsYW5lLT5jdXJzb3IuY250 bCA9IGNudGw7Ci0JfSBlbHNlIHsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBP UyhwaXBlKSwgcG9zKTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkJBU0UocGlw ZSksIGJhc2UpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNv cmUubG9jaywgaXJxZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBpOXh4X2Rpc2FibGVfY3Vyc29y KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCi17Ci0JaTl4eF91cGRhdGVfY3Vyc29yKHBsYW5lLCBjcnRjX3N0 YXRlLCBOVUxMKTsKLX0KLQotc3RhdGljIGJvb2wgaTl4eF9jdXJzb3JfZ2V0X2h3X3N0YXRlKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkJICAgICBlbnVtIHBpcGUgKnBpcGUpCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5k ZXYpOwotCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwotCWlu dGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCWJvb2wgcmV0OwotCXUzMiB2YWw7Ci0KLQkvKgotCSAq IE5vdCAxMDAlIGNvcnJlY3QgZm9yIHBsYW5lcyB0aGF0IGNhbiBtb3ZlIGJldHdlZW4gcGlwZXMs Ci0JICogYnV0IHRoYXQncyBvbmx5IHRoZSBjYXNlIGZvciBnZW4yLTMgd2hpY2ggZG9uJ3QgaGF2 ZSBhbnkKLQkgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgotCSAqLwotCXBvd2VyX2RvbWFpbiA9IFBP V0VSX0RPTUFJTl9QSVBFKHBsYW5lLT5waXBlKTsKLQl3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9w b3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKLQlpZiAoIXdha2Vy ZWYpCi0JCXJldHVybiBmYWxzZTsKLQotCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIENV UkNOVFIocGxhbmUtPnBpcGUpKTsKLQotCXJldCA9IHZhbCAmIE1DVVJTT1JfTU9ERTsKLQotCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKLQkJKnBpcGUg PSBwbGFuZS0+cGlwZTsKLQllbHNlCi0JCSpwaXBlID0gKHZhbCAmIE1DVVJTT1JfUElQRV9TRUxF Q1RfTUFTSykgPj4KLQkJCU1DVVJTT1JfUElQRV9TRUxFQ1RfU0hJRlQ7Ci0KLQlpbnRlbF9kaXNw bGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKLQotCXJldHVy biByZXQ7Ci19Ci0KIC8qIFZFU0EgNjQweDQ4MHg3Mkh6IG1vZGUgdG8gc2V0IG9uIHRoZSBwaXBl ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbG9hZF9kZXRlY3RfbW9k ZSA9IHsKIAlEUk1fTU9ERSgiNjQweDQ4MCIsIERSTV9NT0RFX1RZUEVfREVGQVVMVCwgMzE1MDAs IDY0MCwgNjY0LApAQCAtMTY2MDksNyArMTYwMzcsNyBAQCBzdGF0aWMgdm9pZCBhZGRfcnBzX2Jv b3N0X2FmdGVyX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJYWRkX3dhaXRfcXVldWUo ZHJtX2NydGNfdmJsYW5rX3dhaXRxdWV1ZShjcnRjKSwgJndhaXQtPndhaXQpOwogfQogCi1zdGF0 aWMgaW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQoraW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9w bGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwpAQCAtMTY2MzksNyArMTYwNjcs NyBAQCBzdGF0aWMgaW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9wbGFu ZV91bnBpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSkKK3Zv aWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxh bmVfc3RhdGUpCiB7CiAJc3RydWN0IGk5MTVfdm1hICp2bWE7CiAKQEAgLTE2ODc1LDEzICsxNjMw Myw2IEBAIHN0YXRpYyBib29sIGk5NjVfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0 IGRybV9wbGFuZSAqX3BsYW5lLAogCX0KIH0KIAotc3RhdGljIGJvb2wgaW50ZWxfY3Vyc29yX2Zv cm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJCQkJICAgICAg dTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQotewotCXJldHVybiBtb2RpZmllciA9PSBEUk1fRk9S TUFUX01PRF9MSU5FQVIgJiYKLQkJZm9ybWF0ID09IERSTV9GT1JNQVRfQVJHQjg4ODg7Ci19Ci0K IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGk5NjVfcGxhbmVfZnVuY3MgPSB7 CiAJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKIAkuZGlz YWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCkBAIC0xNjkwMCwx NDIgKzE2MzIxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaTh4eF9w bGFuZV9mdW5jcyA9IHsKIAkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpOHh4X3BsYW5lX2Zvcm1h dF9tb2Rfc3VwcG9ydGVkLAogfTsKIAotc3RhdGljIGludAotaW50ZWxfbGVnYWN5X2N1cnNvcl91 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAotCQkJICAgc3RydWN0IGRybV9jcnRjICpf Y3J0YywKLQkJCSAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkJICAgaW50IGNydGNf eCwgaW50IGNydGNfeSwKLQkJCSAgIHVuc2lnbmVkIGludCBjcnRjX3csIHVuc2lnbmVkIGludCBj cnRjX2gsCi0JCQkgICB1MzIgc3JjX3gsIHUzMiBzcmNfeSwKLQkJCSAgIHUzMiBzcmNfdywgdTMy IHNyY19oLAotCQkJICAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpCi17Ci0J c3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKF9wbGFuZSk7Ci0Jc3Ry dWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKF9jcnRjKTsKLQlzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSA9Ci0JCXRvX2ludGVsX3BsYW5lX3N0YXRl KHBsYW5lLT5iYXNlLnN0YXRlKTsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm5ld19wbGFu ZV9zdGF0ZTsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9Ci0JCXRvX2lu dGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7Ci0Jc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKm5ld19jcnRjX3N0YXRlOwotCWludCByZXQ7Ci0KLQkvKgotCSAqIFdoZW4gY3J0YyBpcyBp bmFjdGl2ZSBvciB0aGVyZSBpcyBhIG1vZGVzZXQgcGVuZGluZywKLQkgKiB3YWl0IGZvciBpdCB0 byBjb21wbGV0ZSBpbiB0aGUgc2xvd3BhdGgKLQkgKgotCSAqIEZJWE1FIGJpZ2pvaW5lciBmYXN0 cGF0aCB3b3VsZCBiZSBnb29kCi0JICovCi0JaWYgKCFjcnRjX3N0YXRlLT5ody5hY3RpdmUgfHwg aW50ZWxfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpIHx8Ci0JICAgIGNydGNfc3RhdGUt PnVwZGF0ZV9waXBlIHx8IGNydGNfc3RhdGUtPmJpZ2pvaW5lcikKLQkJZ290byBzbG93OwotCi0J LyoKLQkgKiBEb24ndCBkbyBhbiBhc3luYyB1cGRhdGUgaWYgdGhlcmUgaXMgYW4gb3V0c3RhbmRp bmcgY29tbWl0IG1vZGlmeWluZwotCSAqIHRoZSBwbGFuZS4gIFRoaXMgcHJldmVudHMgb3VyIGFz eW5jIHVwZGF0ZSdzIGNoYW5nZXMgZnJvbSBnZXR0aW5nCi0JICogb3ZlcnJpZGRlbiBieSBhIHBy ZXZpb3VzIHN5bmNocm9ub3VzIHVwZGF0ZSdzIHN0YXRlLgotCSAqLwotCWlmIChvbGRfcGxhbmVf c3RhdGUtPnVhcGkuY29tbWl0ICYmCi0JICAgICF0cnlfd2FpdF9mb3JfY29tcGxldGlvbigmb2xk X3BsYW5lX3N0YXRlLT51YXBpLmNvbW1pdC0+aHdfZG9uZSkpCi0JCWdvdG8gc2xvdzsKLQotCS8q Ci0JICogSWYgYW55IHBhcmFtZXRlcnMgY2hhbmdlIHRoYXQgbWF5IGFmZmVjdCB3YXRlcm1hcmtz LAotCSAqIHRha2UgdGhlIHNsb3dwYXRoLiBPbmx5IGNoYW5naW5nIGZiIG9yIHBvc2l0aW9uIHNo b3VsZCBiZQotCSAqIGluIHRoZSBmYXN0cGF0aC4KLQkgKi8KLQlpZiAob2xkX3BsYW5lX3N0YXRl LT51YXBpLmNydGMgIT0gJmNydGMtPmJhc2UgfHwKLQkgICAgb2xkX3BsYW5lX3N0YXRlLT51YXBp LnNyY193ICE9IHNyY193IHx8Ci0JICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfaCAhPSBz cmNfaCB8fAotCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y193ICE9IGNydGNfdyB8fAot CSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y19oICE9IGNydGNfaCB8fAotCSAgICAhb2xk X3BsYW5lX3N0YXRlLT51YXBpLmZiICE9ICFmYikKLQkJZ290byBzbG93OwotCi0JbmV3X3BsYW5l X3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUoaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRl KCZwbGFuZS0+YmFzZSkpOwotCWlmICghbmV3X3BsYW5lX3N0YXRlKQotCQlyZXR1cm4gLUVOT01F TTsKLQotCW5ld19jcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShpbnRlbF9jcnRjX2R1 cGxpY2F0ZV9zdGF0ZSgmY3J0Yy0+YmFzZSkpOwotCWlmICghbmV3X2NydGNfc3RhdGUpIHsKLQkJ cmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KLQlkcm1fYXRvbWljX3NldF9m Yl9mb3JfcGxhbmUoJm5ld19wbGFuZV9zdGF0ZS0+dWFwaSwgZmIpOwotCi0JbmV3X3BsYW5lX3N0 YXRlLT51YXBpLnNyY194ID0gc3JjX3g7Ci0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY195ID0g c3JjX3k7Ci0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY193ID0gc3JjX3c7Ci0JbmV3X3BsYW5l X3N0YXRlLT51YXBpLnNyY19oID0gc3JjX2g7Ci0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNf eCA9IGNydGNfeDsKLQluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y195ID0gY3J0Y195OwotCW5l d19wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3cgPSBjcnRjX3c7Ci0JbmV3X3BsYW5lX3N0YXRlLT51 YXBpLmNydGNfaCA9IGNydGNfaDsKLQotCWludGVsX3BsYW5lX2NvcHlfdWFwaV90b19od19zdGF0 ZShuZXdfcGxhbmVfc3RhdGUsIG5ld19wbGFuZV9zdGF0ZSwgY3J0Yyk7Ci0KLQlyZXQgPSBpbnRl bF9wbGFuZV9hdG9taWNfY2hlY2tfd2l0aF9zdGF0ZShjcnRjX3N0YXRlLCBuZXdfY3J0Y19zdGF0 ZSwKLQkJCQkJCSAgb2xkX3BsYW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUpOwotCWlmIChyZXQp Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9waW5fZmIobmV3X3BsYW5l X3N0YXRlKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlOwotCi0JaW50ZWxfZnJvbnRidWZm ZXJfZmx1c2godG9faW50ZWxfZnJvbnRidWZmZXIobmV3X3BsYW5lX3N0YXRlLT5ody5mYiksCi0J CQkJT1JJR0lOX0ZMSVApOwotCWludGVsX2Zyb250YnVmZmVyX3RyYWNrKHRvX2ludGVsX2Zyb250 YnVmZmVyKG9sZF9wbGFuZV9zdGF0ZS0+aHcuZmIpLAotCQkJCXRvX2ludGVsX2Zyb250YnVmZmVy KG5ld19wbGFuZV9zdGF0ZS0+aHcuZmIpLAotCQkJCXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQpOwot Ci0JLyogU3dhcCBwbGFuZSBzdGF0ZSAqLwotCXBsYW5lLT5iYXNlLnN0YXRlID0gJm5ld19wbGFu ZV9zdGF0ZS0+dWFwaTsKLQotCS8qCi0JICogV2UgY2Fubm90IHN3YXAgY3J0Y19zdGF0ZSBhcyBp dCBtYXkgYmUgaW4gdXNlIGJ5IGFuIGF0b21pYyBjb21taXQgb3IKLQkgKiBwYWdlIGZsaXAgdGhh dCdzIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHkuIElmIHdlIHN3YXAgY3J0Y19zdGF0ZSBhbmQKLQkg KiBkZXN0cm95IHRoZSBvbGQgc3RhdGUsIHdlIHdpbGwgY2F1c2UgYSB1c2UtYWZ0ZXItZnJlZSB0 aGVyZS4KLQkgKgotCSAqIE9ubHkgdXBkYXRlIGFjdGl2ZV9wbGFuZXMsIHdoaWNoIGlzIG5lZWRl ZCBmb3Igb3VyIGludGVybmFsCi0JICogYm9va2tlZXBpbmcuIEVpdGhlciB2YWx1ZSB3aWxsIGRv IHRoZSByaWdodCB0aGluZyB3aGVuIHVwZGF0aW5nCi0JICogcGxhbmVzIGF0b21pY2FsbHkuIElm IHRoZSBjdXJzb3Igd2FzIHBhcnQgb2YgdGhlIGF0b21pYyB1cGRhdGUgdGhlbgotCSAqIHdlIHdv dWxkIGhhdmUgdGFrZW4gdGhlIHNsb3dwYXRoLgotCSAqLwotCWNydGNfc3RhdGUtPmFjdGl2ZV9w bGFuZXMgPSBuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5lczsKLQotCWlmIChuZXdfcGxhbmVf c3RhdGUtPnVhcGkudmlzaWJsZSkKLQkJaW50ZWxfdXBkYXRlX3BsYW5lKHBsYW5lLCBjcnRjX3N0 YXRlLCBuZXdfcGxhbmVfc3RhdGUpOwotCWVsc2UKLQkJaW50ZWxfZGlzYWJsZV9wbGFuZShwbGFu ZSwgY3J0Y19zdGF0ZSk7Ci0KLQlpbnRlbF9wbGFuZV91bnBpbl9mYihvbGRfcGxhbmVfc3RhdGUp OwotCi1vdXRfZnJlZToKLQlpZiAobmV3X2NydGNfc3RhdGUpCi0JCWludGVsX2NydGNfZGVzdHJv eV9zdGF0ZSgmY3J0Yy0+YmFzZSwgJm5ld19jcnRjX3N0YXRlLT51YXBpKTsKLQlpZiAocmV0KQot CQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlKCZwbGFuZS0+YmFzZSwgJm5ld19wbGFuZV9zdGF0 ZS0+dWFwaSk7Ci0JZWxzZQotCQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlKCZwbGFuZS0+YmFz ZSwgJm9sZF9wbGFuZV9zdGF0ZS0+dWFwaSk7Ci0JcmV0dXJuIHJldDsKLQotc2xvdzoKLQlyZXR1 cm4gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lKCZwbGFuZS0+YmFzZSwgJmNydGMtPmJh c2UsIGZiLAotCQkJCQkgICAgICBjcnRjX3gsIGNydGNfeSwgY3J0Y193LCBjcnRjX2gsCi0JCQkJ CSAgICAgIHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oLCBjdHgpOwotfQotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRlbF9jdXJzb3JfcGxhbmVfZnVuY3MgPSB7Ci0J LnVwZGF0ZV9wbGFuZSA9IGludGVsX2xlZ2FjeV9jdXJzb3JfdXBkYXRlLAotCS5kaXNhYmxlX3Bs YW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKLQkuZGVzdHJveSA9IGludGVs X3BsYW5lX2Rlc3Ryb3ksCi0JLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9k dXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcGxhbmVfZGVz dHJveV9zdGF0ZSwKLQkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpbnRlbF9jdXJzb3JfZm9ybWF0 X21vZF9zdXBwb3J0ZWQsCi19OwotCiBzdGF0aWMgYm9vbCBpOXh4X3BsYW5lX2hhc19mYmMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICAgIGVudW0gaTl4eF9wbGFu ZV9pZCBpOXh4X3BsYW5lKQogewpAQCAtMTcxODcsNzQgKzE2NDcyLDYgQEAgaW50ZWxfcHJpbWFy eV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBp cGUgcGlwZSkKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1zdGF0aWMgc3RydWN0IGludGVs X3BsYW5lICoKLWludGVsX2N1cnNvcl9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAotCQkJICBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfcGxh bmUgKmN1cnNvcjsKLQlpbnQgcmV0LCB6cG9zOwotCi0JY3Vyc29yID0gaW50ZWxfcGxhbmVfYWxs b2MoKTsKLQlpZiAoSVNfRVJSKGN1cnNvcikpCi0JCXJldHVybiBjdXJzb3I7Ci0KLQljdXJzb3It PnBpcGUgPSBwaXBlOwotCWN1cnNvci0+aTl4eF9wbGFuZSA9IChlbnVtIGk5eHhfcGxhbmVfaWQp IHBpcGU7Ci0JY3Vyc29yLT5pZCA9IFBMQU5FX0NVUlNPUjsKLQljdXJzb3ItPmZyb250YnVmZmVy X2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIGN1cnNvci0+aWQpOwotCi0JaWYgKElTX0k4 NDVHKGRldl9wcml2KSB8fCBJU19JODY1RyhkZXZfcHJpdikpIHsKLQkJY3Vyc29yLT5tYXhfc3Ry aWRlID0gaTg0NV9jdXJzb3JfbWF4X3N0cmlkZTsKLQkJY3Vyc29yLT51cGRhdGVfcGxhbmUgPSBp ODQ1X3VwZGF0ZV9jdXJzb3I7Ci0JCWN1cnNvci0+ZGlzYWJsZV9wbGFuZSA9IGk4NDVfZGlzYWJs ZV9jdXJzb3I7Ci0JCWN1cnNvci0+Z2V0X2h3X3N0YXRlID0gaTg0NV9jdXJzb3JfZ2V0X2h3X3N0 YXRlOwotCQljdXJzb3ItPmNoZWNrX3BsYW5lID0gaTg0NV9jaGVja19jdXJzb3I7Ci0JfSBlbHNl IHsKLQkJY3Vyc29yLT5tYXhfc3RyaWRlID0gaTl4eF9jdXJzb3JfbWF4X3N0cmlkZTsKLQkJY3Vy c29yLT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9jdXJzb3I7Ci0JCWN1cnNvci0+ZGlzYWJs ZV9wbGFuZSA9IGk5eHhfZGlzYWJsZV9jdXJzb3I7Ci0JCWN1cnNvci0+Z2V0X2h3X3N0YXRlID0g aTl4eF9jdXJzb3JfZ2V0X2h3X3N0YXRlOwotCQljdXJzb3ItPmNoZWNrX3BsYW5lID0gaTl4eF9j aGVja19jdXJzb3I7Ci0JfQotCi0JY3Vyc29yLT5jdXJzb3IuYmFzZSA9IH4wOwotCWN1cnNvci0+ Y3Vyc29yLmNudGwgPSB+MDsKLQotCWlmIChJU19JODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUco ZGV2X3ByaXYpIHx8IEhBU19DVVJfRkJDKGRldl9wcml2KSkKLQkJY3Vyc29yLT5jdXJzb3Iuc2l6 ZSA9IH4wOwotCi0JcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJt LCAmY3Vyc29yLT5iYXNlLAotCQkJCSAgICAgICAwLCAmaW50ZWxfY3Vyc29yX3BsYW5lX2Z1bmNz LAotCQkJCSAgICAgICBpbnRlbF9jdXJzb3JfZm9ybWF0cywKLQkJCQkgICAgICAgQVJSQVlfU0la RShpbnRlbF9jdXJzb3JfZm9ybWF0cyksCi0JCQkJICAgICAgIGN1cnNvcl9mb3JtYXRfbW9kaWZp ZXJzLAotCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9DVVJTT1IsCi0JCQkJICAgICAgICJjdXJz b3IgJWMiLCBwaXBlX25hbWUocGlwZSkpOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCWRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25f cHJvcGVydHkoJmN1cnNvci0+YmFzZSwKLQkJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wLAotCQkJ CQkJICAgRFJNX01PREVfUk9UQVRFXzAgfAotCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzE4MCk7 Ci0KLQl6cG9zID0gUlVOVElNRV9JTkZPKGRldl9wcml2KS0+bnVtX3Nwcml0ZXNbcGlwZV0gKyAx OwotCWRybV9wbGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJmN1cnNvci0+YmFz ZSwgenBvcyk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikKLQkJZHJtX3BsYW5l X2VuYWJsZV9mYl9kYW1hZ2VfY2xpcHMoJmN1cnNvci0+YmFzZSk7Ci0KLQlkcm1fcGxhbmVfaGVs cGVyX2FkZCgmY3Vyc29yLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzKTsKLQotCXJl dHVybiBjdXJzb3I7Ci0KLWZhaWw6Ci0JaW50ZWxfcGxhbmVfZnJlZShjdXJzb3IpOwotCi0JcmV0 dXJuIEVSUl9QVFIocmV0KTsKLX0KLQogc3RhdGljIGludCBpbnRlbF9jcnRjX2xhdGVfcmVnaXN0 ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCWludGVsX2NydGNfZGVidWdmc19hZGQoY3J0 Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCmluZGV4 IGE1NzcxYmZlY2JhNi4uNzE3YjBlNDE2MGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXkuaApAQCAtNjQ3LDYgKzY0NywxMyBAQCBib29sCiBpbnRlbF9m b3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZv ICppbmZvLAogCQkJCSAgICB1aW50NjRfdCBtb2RpZmllcik7CiAKK2ludCBpbnRlbF9wbGFuZV9j b21wdXRlX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKK3UzMiBp bnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAorCQkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICBp bnQgY29sb3JfcGxhbmUpOworaW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKK3ZvaWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpOworCiAvKiBtb2Rlc2V0dGluZyAq Lwogdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpOwogaW50IGludGVsX21vZGVzZXRfaW5pdF9ub2lycShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSk7Ci0tIAoyLjI3LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=