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=-21.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C50BAC433E9 for ; Thu, 11 Feb 2021 11:39:11 +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 D6BDF64E16 for ; Thu, 11 Feb 2021 11:39:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D6BDF64E16 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk 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 6D2086EE04; Thu, 11 Feb 2021 11:39:08 +0000 (UTC) Received: from fireflyinternet.com (unknown [77.68.26.236]) by gabe.freedesktop.org (Postfix) with ESMTPS id C5DB26EE04 for ; Thu, 11 Feb 2021 11:39:06 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.69.177; Received: from build.alporthouse.com (unverified [78.156.69.177]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 23837356-1500050 for multiple; Thu, 11 Feb 2021 11:38:50 +0000 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Thu, 11 Feb 2021 11:38:48 +0000 Message-Id: <20210211113848.16341-1-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH] lib: Add a YAML emitter 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 , Chris Wilson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" UHJvdmlkZSBhIGxpYnJhcnkgdG8gZ2VuZXJhdGUgY29ycmVjdCBZQU1MIGZvciB1c2UgaW4gc3Ry dWN0dXJlZCBkZWJ1Z2ZzCm9yIHNpbWlsYXIgaW5mb3JtYXRpb24gZHVtcHMuIFRoaXMgd2lsbCBi ZSB1c2VmdWwgdG8gcHVsbCBvdXIgbGFyZ2UKaW5mb3JtYXRpb24gZHVtcHMgaW50byBhIGZvcndh cmRzIGNvbXBhdGlibGUsIHBhcnNlLWFibGUgZmlsZS1mb3JtYXQgYnkKZm9yY2luZyBzb21lIHN0 cnVjdHVyZSB1cG9uIG91cnNlbHZlcyEKCk9yaWdpbmFsbHkgZnJvbSBodHRwczovL2dpdGh1Yi5j b20veWFtbC9saWJ5YW1sL2Jsb2IvbWFzdGVyL3NyYy9lbWl0dGVyLmMKdW5kZXIgYSBwZXJtaXNz aXZlIE1JVCBsaWNlbmNlLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJp cy13aWxzb24uY28udWs+CkNjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgpD YzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgoKLS0t CkNvbnZlcnRpbmcgdG8ga2VybmVsZG9jIGlzIGFib3V0IHRoZSBsYXN0IG1ham9yIHRhc2suIEl0 IHVzZXMgYW4Kb3BlbmNvZGVkIHN0YWNrIHN0cnVjdCB3aGljaCBtaWdodCBiZSBuaWNlIHRvIGNv bnZlcnQgdG8gYSBsaWJyYXJ5LAptYXliZSBqdXN0IHVzZSBYQXJyYXk/CgpJdCBoYXMgYmVlbiBk b2dmb29kZWQgdG8gY29udmVydCBpOTE1X2VuZ2luZV9pbmZvIChhbmQgZnJpZW5kcykKaHR0cHM6 Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoLzM1MzIwOS8/c2VyaWVzPTczNDAzJnJl dj0xCi0tLQogaW5jbHVkZS9saW51eC95YW1sLWV2ZW50cy5oIHwgIDI1OSArKysrCiBpbmNsdWRl L2xpbnV4L3lhbWwuaCAgICAgICAgfCAgMTkwICsrKwogbGliL0tjb25maWcgICAgICAgICAgICAg ICAgIHwgICAxMSArCiBsaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgICAyICsKIGxpYi95 YW1sL01ha2VmaWxlICAgICAgICAgICB8ICAgIDggKwogbGliL3lhbWwvdGVzdC15YW1sLmMgICAg ICAgIHwgIDEyMyArKwogbGliL3lhbWwveWFtbC1lbWl0dGVyLmMgICAgIHwgMjUzOSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL3lhbWwveWFtbC1lbWl0dGVyLmggICAg IHwgIDE0MCArKwogbGliL3lhbWwveWFtbC1ldmVudHMuYyAgICAgIHwgIDQyNCArKysrKysKIGxp Yi95YW1sL3lhbWwtc2ltcGxlLmMgICAgICB8ICAyMjcgKysrKwogMTAgZmlsZXMgY2hhbmdlZCwg MzkyMyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC95YW1s LWV2ZW50cy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC95YW1sLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWIveWFtbC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi95 YW1sL3Rlc3QteWFtbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3lhbWwveWFtbC1lbWl0dGVy LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIveWFtbC95YW1sLWVtaXR0ZXIuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi95YW1sL3lhbWwtZXZlbnRzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv eWFtbC95YW1sLXNpbXBsZS5jCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC95YW1sLWV2ZW50 cy5oIGIvaW5jbHVkZS9saW51eC95YW1sLWV2ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uMzNkMWJiMjI3ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS9saW51eC95YW1sLWV2ZW50cy5oCkBAIC0wLDAgKzEsMjU5IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTYgS2lyaWxs IFNpbW9ub3YKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5IEluZ3kgZMO2dCBOZXQKKyAqIENv cHlyaWdodCAoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19MSU5V WF9ZQU1MX0VWRU5UU19IX18KKyNkZWZpbmUgX19MSU5VWF9ZQU1MX0VWRU5UU19IX18KKworI2lu Y2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8 bGludXgvbGlzdC5oPgorCisvKiogVGhlIHZlcnNpb24gZGlyZWN0aXZlIGRhdGEuICovCitzdHJ1 Y3QgeWFtbF92ZXJzaW9uX2RpcmVjdGl2ZSB7CisJaW50IG1ham9yOworCWludCBtaW5vcjsKK307 CisKKy8qKiBUaGUgdGFnIGRpcmVjdGl2ZSBkYXRhLiAqLworc3RydWN0IHlhbWxfdGFnX2RpcmVj dGl2ZSB7CisJY2hhciAqaGFuZGxlOworCWNoYXIgKnByZWZpeDsKK307CisKKy8qKiBUaGUgcG9p bnRlciBwb3NpdGlvbi4gKi8KK3N0cnVjdCB5YW1sX21hcmsgeworCXNpemVfdCBpbmRleDsKKwlz aXplX3QgbGluZTsKKwlzaXplX3QgY29sdW1uOworfTsKKworZW51bSB5YW1sX2V2ZW50X3R5cGUg eworCVlBTUxfTk9fRVZFTlQgPSAwLAorCisJWUFNTF9TVFJFQU1fU1RBUlRfRVZFTlQsCisJWUFN TF9TVFJFQU1fRU5EX0VWRU5ULAorCisJWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVCwKKwlZQU1M X0RPQ1VNRU5UX0VORF9FVkVOVCwKKworCVlBTUxfQUxJQVNfRVZFTlQsCisJWUFNTF9TQ0FMQVJf RVZFTlQsCisKKwlZQU1MX1NFUVVFTkNFX1NUQVJUX0VWRU5ULAorCVlBTUxfU0VRVUVOQ0VfRU5E X0VWRU5ULAorCisJWUFNTF9NQVBQSU5HX1NUQVJUX0VWRU5ULAorCVlBTUxfTUFQUElOR19FTkRf RVZFTlQKK307CisKK3N0cnVjdCB5YW1sX2V2ZW50IHsKKwllbnVtIHlhbWxfZXZlbnRfdHlwZSB0 eXBlOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKworCXVuaW9uIHsKKwkJLyoqIFRoZSBzdHJl YW0gcGFyYW1ldGVycyAoZm9yIFlBTUxfU1RSRUFNX1NUQVJUX0VWRU5UKS4gKi8KKwkJc3RydWN0 IHsKKwkJfSBzdHJlYW1fc3RhcnQ7CisKKwkJLyoqIFRoZSBkb2N1bWVudCBwYXJhbWV0ZXJzIChm b3IgWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVCkuICovCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3Qg eWFtbF92ZXJzaW9uX2RpcmVjdGl2ZSAqdmVyc2lvbjsKKworCQkJc3RydWN0IHsKKwkJCQlzdHJ1 Y3QgeWFtbF90YWdfZGlyZWN0aXZlICpzdGFydDsKKwkJCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0 aXZlICplbmQ7CisJCQl9IHRhZ3M7CisKKwkJCWludCBpbXBsaWNpdDsKKwkJfSBkb2N1bWVudF9z dGFydDsKKworCQkvKiogVGhlIGRvY3VtZW50IGVuZCBwYXJhbWV0ZXJzIChmb3IgWUFNTF9ET0NV TUVOVF9FTkRfRVZFTlQpLiAqLworCQlzdHJ1Y3QgeworCQkJaW50IGltcGxpY2l0OworCQl9IGRv Y3VtZW50X2VuZDsKKworCQkvKiogVGhlIGFsaWFzIHBhcmFtZXRlcnMgKGZvciBZQU1MX0FMSUFT X0VWRU5UKS4gKi8KKwkJc3RydWN0IHsKKwkJCWNoYXIgKmFuY2hvcjsKKwkJfSBhbGlhczsKKwor CQkvKiogVGhlIHNjYWxhciBwYXJhbWV0ZXJzIChmb3IgWUFNTF9TQ0FMQVJfRVZFTlQpLiAqLwor CQlzdHJ1Y3QgeworCQkJY2hhciAqYW5jaG9yOworCQkJY2hhciAqdGFnOworCQkJY2hhciAqdmFs dWU7CisJCQlzaXplX3QgbGVuZ3RoOworCQkJaW50IHBsYWluX2ltcGxpY2l0OworCQkJaW50IHF1 b3RlZF9pbXBsaWNpdDsKKwkJCWVudW0geWFtbF9zY2FsYXJfc3R5bGUgc3R5bGU7CisJCX0gc2Nh bGFyOworCisJCS8qKiBUaGUgc2VxdWVuY2UgcGFyYW1ldGVycyAoZm9yIFlBTUxfU0VRVUVOQ0Vf U1RBUlRfRVZFTlQpLiAqLworCQlzdHJ1Y3QgeworCQkJY2hhciAqYW5jaG9yOworCQkJY2hhciAq dGFnOworCQkJaW50IGltcGxpY2l0OworCQkJZW51bSB5YW1sX3NlcXVlbmNlX3N0eWxlIHN0eWxl OworCQl9IHNlcXVlbmNlX3N0YXJ0OworCisJCS8qKiBUaGUgbWFwcGluZyBwYXJhbWV0ZXJzIChm b3IgWUFNTF9NQVBQSU5HX1NUQVJUX0VWRU5UKS4gKi8KKwkJc3RydWN0IHsKKwkJCWNoYXIgKmFu Y2hvcjsKKwkJCWNoYXIgKnRhZzsKKwkJCWludCBpbXBsaWNpdDsKKwkJCWVudW0geWFtbF9tYXBw aW5nX3N0eWxlIHN0eWxlOworCQl9IG1hcHBpbmdfc3RhcnQ7CisJfTsKKworCXN0cnVjdCB5YW1s X21hcmsgc3RhcnRfbWFyazsKKwlzdHJ1Y3QgeWFtbF9tYXJrIGVuZF9tYXJrOworfTsKKworc3Ry dWN0IHlhbWxfZXZlbnQgKnlhbWxfc3RyZWFtX3N0YXJ0X2V2ZW50X2NyZWF0ZShnZnBfdCBnZnAp Oworc3RydWN0IHlhbWxfZXZlbnQgKnlhbWxfc3RyZWFtX2VuZF9ldmVudF9jcmVhdGUoZ2ZwX3Qg Z2ZwKTsKKworLyoqCisgKiBDcmVhdGUgdGhlIERPQ1VNRU5ULVNUQVJUIGV2ZW50LgorICoKKyAq IFRoZSBAYSBpbXBsaWNpdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIGFzIGEgc3R5bGlzdGljIHBh cmFtZXRlciBhbmQgbWF5IGJlCisgKiBpZ25vcmVkIGJ5IHRoZSBlbWl0dGVyLgorICoKKyAqIEBw YXJhbVtpbl0gICAgICAgdmVyc2lvbl9kaXJlY3RpdmUgICAgICAgVGhlICVZQU1MIGRpcmVjdGl2 ZSB2YWx1ZSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBA YyBOVUxMLgorICogQHBhcmFtW2luXSAgICAgICB0YWdfZGlyZWN0aXZlc19zdGFydCAgICBUaGUg YmVnaW5uaW5nIG9mIHRoZSAlVEFHCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpcmVjdGl2ZXMgbGlzdC4KKyAqIEBwYXJhbVtpbl0gICAgICAgdGFnX2RpcmVj dGl2ZXNfZW5kICAgICAgVGhlIGVuZCBvZiB0aGUgJVRBRyBkaXJlY3RpdmVzCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuCisgKiBAcGFyYW1baW5dICAg ICAgIGltcGxpY2l0ICAgICAgICAgICAgICAgIElmIHRoZSBkb2N1bWVudCBzdGFydCBpbmRpY2F0 b3IgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGlj aXQuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZGVkLCBAYyAw IG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1sX2RvY3VtZW50X3N0YXJ0 X2V2ZW50X2NyZWF0ZShzdHJ1Y3QgeWFtbF92ZXJzaW9uX2RpcmVjdGl2ZSAqdmVyc2lvbiwKKwkJ CQkgc3RydWN0IHlhbWxfdGFnX2RpcmVjdGl2ZSAqc3RhcnQsCisJCQkJIHN0cnVjdCB5YW1sX3Rh Z19kaXJlY3RpdmUgKmVuZCwKKwkJCQkgaW50IGltcGxpY2l0LAorCQkJCSBnZnBfdCBnZnApOwor CisvKioKKyAqIENyZWF0ZSB0aGUgRE9DVU1FTlQtRU5EIGV2ZW50LgorICoKKyAqIFRoZSBAYSBp bXBsaWNpdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIGFzIGEgc3R5bGlzdGljIHBhcmFtZXRlciBh bmQgbWF5IGJlCisgKiBpZ25vcmVkIGJ5IHRoZSBlbWl0dGVyLgorICoKKyAqIEBwYXJhbVtpbl0g ICAgICAgaW1wbGljaXQgICAgSWYgdGhlIGRvY3VtZW50IGVuZCBpbmRpY2F0b3IgaXMgaW1wbGlj aXQuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZGVkLCBAYyAw IG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1sX2RvY3VtZW50X2VuZF9l dmVudF9jcmVhdGUoaW50IGltcGxpY2l0LCBnZnBfdCBnZnApOworCisvKioKKyAqIENyZWF0ZSBh biBBTElBUyBldmVudC4KKyAqCisgKiBAcGFyYW1baW5dICAgICAgIGFuY2hvciAgICAgIFRoZSBh bmNob3IgdmFsdWUuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVuY3Rpb24gc3VjY2Vl ZGVkLCBAYyAwIG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1sX2FsaWFz X2V2ZW50X2NyZWF0ZShjb25zdCBjaGFyICphbmNob3IsIGdmcF90IGdmcCk7CisKKy8qKgorICog Q3JlYXRlIGEgU0NBTEFSIGV2ZW50LgorICoKKyAqIFRoZSBAYSBzdHlsZSBhcmd1bWVudCBtYXkg YmUgaWdub3JlZCBieSB0aGUgZW1pdHRlci4KKyAqCisgKiBFaXRoZXIgdGhlIEBhIHRhZyBhdHRy aWJ1dGUgb3Igb25lIG9mIHRoZSBAYSBwbGFpbl9pbXBsaWNpdCBhbmQKKyAqIEBhIHF1b3RlZF9p bXBsaWNpdCBmbGFncyBtdXN0IGJlIHNldC4KKyAqCisgKiBAcGFyYW1baW5dICAgICAgIGFuY2hv ciAgICAgICAgICBUaGUgc2NhbGFyIGFuY2hvciBvciBAYyBOVUxMLgorICogQHBhcmFtW2luXSAg ICAgICB0YWcgICAgICAgICAgICAgVGhlIHNjYWxhciB0YWcgb3IgQGMgTlVMTC4KKyAqIEBwYXJh bVtpbl0gICAgICAgdmFsdWUgICAgICAgICAgIFRoZSBzY2FsYXIgdmFsdWUuCisgKiBAcGFyYW1b aW5dICAgICAgIGxlbmd0aCAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzY2FsYXIgdmFsdWUu CisgKiBAcGFyYW1baW5dICAgICAgIHBsYWluX2ltcGxpY2l0ICBJZiB0aGUgdGFnIG1heSBiZSBv bWl0dGVkIGZvciB0aGUgcGxhaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0eWxlLgorICogQHBhcmFtW2luXSAgICAgICBxdW90ZWRfaW1wbGljaXQgSWYgdGhlIHRhZyBt YXkgYmUgb21pdHRlZCBmb3IgYW55CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBub24tcGxhaW4gc3R5bGUuCisgKiBAcGFyYW1baW5dICAgICAgIHN0eWxlICAgICAgICAgICBU aGUgc2NhbGFyIHN0eWxlLgorICoKKyAqIEByZXR1cm5zIEBjIDEgaWYgdGhlIGZ1bmN0aW9uIHN1 Y2NlZWRlZCwgQGMgMCBvbiBlcnJvci4KKyAqLworc3RydWN0IHlhbWxfZXZlbnQgKgoreWFtbF9z Y2FsYXJfZXZlbnRfY3JlYXRlKGNvbnN0IGNoYXIgKmFuY2hvciwgY29uc3QgY2hhciAqdGFnLAor CQkJIGNvbnN0IGNoYXIgKnZhbHVlLCBzc2l6ZV90IGxlbmd0aCwgYm9vbCBzdGVhbCwKKwkJCSBp bnQgcGxhaW5faW1wbGljaXQsIGludCBxdW90ZWRfaW1wbGljaXQsCisJCQkgZW51bSB5YW1sX3Nj YWxhcl9zdHlsZSBzdHlsZSwKKwkJCSBnZnBfdCBnZnApOworCisvKioKKyAqIENyZWF0ZSBhIFNF UVVFTkNFLVNUQVJUIGV2ZW50LgorICoKKyAqIFRoZSBAYSBzdHlsZSBhcmd1bWVudCBtYXkgYmUg aWdub3JlZCBieSB0aGUgZW1pdHRlci4KKyAqCisgKiBFaXRoZXIgdGhlIEBhIHRhZyBhdHRyaWJ1 dGUgb3IgdGhlIEBhIGltcGxpY2l0IGZsYWcgbXVzdCBiZSBzZXQuCisgKgorICogQHBhcmFtW2lu XSAgICAgICBhbmNob3IgICAgICBUaGUgc2VxdWVuY2UgYW5jaG9yIG9yIEBjIE5VTEwuCisgKiBA cGFyYW1baW5dICAgICAgIHRhZyAgICAgICAgIFRoZSBzZXF1ZW5jZSB0YWcgb3IgQGMgTlVMTC4K KyAqIEBwYXJhbVtpbl0gICAgICAgaW1wbGljaXQgICAgSWYgdGhlIHRhZyBtYXkgYmUgb21pdHRl ZC4KKyAqIEBwYXJhbVtpbl0gICAgICAgc3R5bGUgICAgICAgVGhlIHNlcXVlbmNlIHN0eWxlLgor ICoKKyAqIEByZXR1cm5zIEBjIDEgaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRlZCwgQGMgMCBvbiBl cnJvci4KKyAqLworc3RydWN0IHlhbWxfZXZlbnQgKgoreWFtbF9zZXF1ZW5jZV9zdGFydF9ldmVu dF9jcmVhdGUoY29uc3QgY2hhciAqYW5jaG9yLAorCQkJCSBjb25zdCBjaGFyICp0YWcsCisJCQkJ IGludCBpbXBsaWNpdCwKKwkJCQkgZW51bSB5YW1sX3NlcXVlbmNlX3N0eWxlIHN0eWxlLAorCQkJ CSBnZnBfdCBnZnApOworCisvKioKKyAqIENyZWF0ZSBhIFNFUVVFTkNFLUVORCBldmVudC4KKyAq CisgKiBAcmV0dXJucyBAYyAxIGlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkZWQsIEBjIDAgb24gZXJy b3IuCisgKi8KK3N0cnVjdCB5YW1sX2V2ZW50ICoKK3lhbWxfc2VxdWVuY2VfZW5kX2V2ZW50X2Ny ZWF0ZShnZnBfdCBnZnApOworCisvKioKKyAqIENyZWF0ZSBhIE1BUFBJTkctU1RBUlQgZXZlbnQu CisgKgorICogVGhlIEBhIHN0eWxlIGFyZ3VtZW50IG1heSBiZSBpZ25vcmVkIGJ5IHRoZSBlbWl0 dGVyLgorICoKKyAqIEVpdGhlciB0aGUgQGEgdGFnIGF0dHJpYnV0ZSBvciB0aGUgQGEgaW1wbGlj aXQgZmxhZyBtdXN0IGJlIHNldC4KKyAqCisgKiBAcGFyYW1baW5dICAgICAgIGFuY2hvciAgICAg IFRoZSBtYXBwaW5nIGFuY2hvciBvciBAYyBOVUxMLgorICogQHBhcmFtW2luXSAgICAgICB0YWcg ICAgICAgICBUaGUgbWFwcGluZyB0YWcgb3IgQGMgTlVMTC4KKyAqIEBwYXJhbVtpbl0gICAgICAg aW1wbGljaXQgICAgSWYgdGhlIHRhZyBtYXkgYmUgb21pdHRlZC4KKyAqIEBwYXJhbVtpbl0gICAg ICAgc3R5bGUgICAgICAgVGhlIG1hcHBpbmcgc3R5bGUuCisgKgorICogQHJldHVybnMgQGMgMSBp ZiB0aGUgZnVuY3Rpb24gc3VjY2VlZGVkLCBAYyAwIG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFt bF9ldmVudCAqCit5YW1sX21hcHBpbmdfc3RhcnRfZXZlbnRfY3JlYXRlKGNvbnN0IGNoYXIgKmFu Y2hvciwKKwkJCQljb25zdCBjaGFyICp0YWcsCisJCQkJaW50IGltcGxpY2l0LAorCQkJCWVudW0g eWFtbF9tYXBwaW5nX3N0eWxlIHN0eWxlLAorCQkJCWdmcF90IGdmcCk7CisKKy8qKgorICogQ3Jl YXRlIGEgTUFQUElORy1FTkQgZXZlbnQuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVu Y3Rpb24gc3VjY2VlZGVkLCBAYyAwIG9uIGVycm9yLgorICovCitzdHJ1Y3QgeWFtbF9ldmVudCAq Cit5YW1sX21hcHBpbmdfZW5kX2V2ZW50X2NyZWF0ZShnZnBfdCBnZnApOworCisvKioKKyAqIEZy ZWUgYW55IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGFuIGV2ZW50IG9iamVjdC4KKyAqCisgKiBAcGFy YW1baW4sb3V0XSAgIGV2ZW50ICAgQW4gZXZlbnQgb2JqZWN0LgorICovCisKK3ZvaWQgeWFtbF9l dmVudF9kZWxldGUoc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50KTsKKworI2VuZGlmIC8qIF9fTElO VVhfWUFNTF9FVkVOVFNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3lhbWwuaCBi L2luY2x1ZGUvbGludXgveWFtbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uNTQxMDk1YTE2NjllCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC95YW1s LmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8K Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxNiBLaXJpbGwgU2ltb25vdgorICogQ29weXJp Z2h0IChjKSAyMDE3LTIwMTkgSW5neSBkw7Z0IE5ldAorICogQ29weXJpZ2h0IChjKSAyMDIwIElu dGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1lBTUxfSF9fCisjZGVmaW5l IF9fTElOVVhfWUFNTF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8 bGludXgvbGlzdC5oPgorCitzdHJ1Y3Qgc2VxX2ZpbGU7CisKK3N0cnVjdCB5YW1sX2VtaXR0ZXI7 CitzdHJ1Y3QgeWFtbF9ldmVudDsKKworLyoqIFNjYWxhciBzdHlsZXMuICovCitlbnVtIHlhbWxf c2NhbGFyX3N0eWxlIHsKKwlZQU1MX0FOWV9TQ0FMQVJfU1RZTEUgPSAwLCAvKiogTGV0IHRoZSBl bWl0dGVyIGNob29zZSB0aGUgc3R5bGUuICovCisKKwlZQU1MX1BMQUlOX1NDQUxBUl9TVFlMRSwK KworCVlBTUxfU0lOR0xFX1FVT1RFRF9TQ0FMQVJfU1RZTEUsCisJWUFNTF9ET1VCTEVfUVVPVEVE X1NDQUxBUl9TVFlMRSwKKworCVlBTUxfTElURVJBTF9TQ0FMQVJfU1RZTEUsCisJWUFNTF9GT0xE RURfU0NBTEFSX1NUWUxFLAorfTsKKworLyoqIFNlcXVlbmNlIHN0eWxlcy4gKi8KK2VudW0geWFt bF9zZXF1ZW5jZV9zdHlsZSB7CisJWUFNTF9BTllfU0VRVUVOQ0VfU1RZTEUgPSAwLCAvKiogTGV0 IHRoZSBlbWl0dGVyIGNob29zZSB0aGUgc3R5bGUuICovCisKKwlZQU1MX0JMT0NLX1NFUVVFTkNF X1NUWUxFLAorCVlBTUxfRkxPV19TRVFVRU5DRV9TVFlMRSwKK307CisKKy8qKiBNYXBwaW5nIHN0 eWxlcy4gKi8KK2VudW0geWFtbF9tYXBwaW5nX3N0eWxlIHsKKwlZQU1MX0FOWV9NQVBQSU5HX1NU WUxFID0gMCwgLyoqIExldCB0aGUgZW1pdHRlciBjaG9vc2UgdGhlIHN0eWxlLiAqLworCisJWUFN TF9CTE9DS19NQVBQSU5HX1NUWUxFLAorCVlBTUxfRkxPV19NQVBQSU5HX1NUWUxFCit9OworCit0 eXBlZGVmIGludCAoKnlhbWxfd3JpdGVfdCkodm9pZCAqZGF0YSwgY29uc3QgdTggKmJ1ZmZlciwg c2l6ZV90IHNpemUpOworCisvKioKKyAqIEluaXRpYWxpemUgYW4gZW1pdHRlci4KKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgZW1pdHRlciBvYmplY3QuICBBbiBhcHBsaWNhdGlv biBpcyByZXNwb25zaWJsZQorICogZm9yIGRlc3Ryb3lpbmcgdGhlIG9iamVjdCB1c2luZyB0aGUg eWFtbF9lbWl0dGVyX2RlbGV0ZSgpIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbVtvdXRdICAgICAg ZW1pdHRlciAgICAgQW4gZW1wdHkgcGFyc2VyIG9iamVjdC4KKyAqCisgKiBAcmV0dXJucyBAYyAx IGlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkZWQsIEBjIDAgb24gZXJyb3IuCisgKi8KK3N0cnVjdCB5 YW1sX2VtaXR0ZXIgKnlhbWxfZW1pdHRlcl9jcmVhdGUoZ2ZwX3QgZ2ZwKTsKKworLyoqCisgKiBE ZXN0cm95IGFuIGVtaXR0ZXIuCisgKgorICogQHBhcmFtW2luLG91dF0gICBlbWl0dGVyICAgICBB biBlbWl0dGVyIG9iamVjdC4KKyAqLwordm9pZCB5YW1sX2VtaXR0ZXJfZGVzdHJveShzdHJ1Y3Qg eWFtbF9lbWl0dGVyICplbWl0dGVyKTsKKworLyoqCisgKiBTZXQgYSBzdHJpbmcgb3V0cHV0Lgor ICoKKyAqIFRoZSBlbWl0dGVyIHdpbGwgd3JpdGUgdGhlIG91dHB1dCBjaGFyYWN0ZXJzIHRvIHRo ZSBAYSBvdXRwdXQgYnVmZmVyIG9mIHRoZQorICogc2l6ZSBAYSBzaXplLiAgVGhlIGVtaXR0ZXIg d2lsbCBzZXQgQGEgc2l6ZV93cml0dGVuIHRvIHRoZSBudW1iZXIgb2Ygd3JpdHRlbgorICogYnl0 ZXMuICBJZiB0aGUgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiByZXF1aXJlZCwgdGhlIGVtaXR0ZXIg cHJvZHVjZXMgdGhlCisgKiBZQU1MX1dSSVRFX0VSUk9SIGVycm9yLgorICoKKyAqIEBwYXJhbVtp bixvdXRdICAgZW1pdHRlciAgICAgICAgIEFuIGVtaXR0ZXIgb2JqZWN0LgorICogQHBhcmFtW2lu XSAgICAgICBvdXRwdXQgICAgICAgICAgQW4gb3V0cHV0IGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0g ICAgICAgc2l6ZSAgICAgICAgICAgIFRoZSBidWZmZXIgc2l6ZS4KKyAqIEBwYXJhbVtpbl0gICAg ICAgc2l6ZV93cml0dGVuICAgIFRoZSBwb2ludGVyIHRvIHNhdmUgdGhlIG51bWJlciBvZiB3cml0 dGVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcy4KKyAqLwordm9p ZCB5YW1sX2VtaXR0ZXJfc2V0X3N0cmluZyhzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAor CQkJICAgICB1OCAqb3V0cHV0LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgc2l6ZV90ICpzaXplX3dy aXR0ZW4pOworCit2b2lkIHlhbWxfZW1pdHRlcl9zZXRfc2VxX2ZpbGUoc3RydWN0IHlhbWxfZW1p dHRlciAqZW1pdHRlciwKKwkJCSAgICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUpOworCit2b2lk IHlhbWxfZW1pdHRlcl9zZXRfb3V0cHV0KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsCisJ CQkgICAgIHlhbWxfd3JpdGVfdCBoYW5kbGVyLAorCQkJICAgICB2b2lkICpkYXRhKTsKKworLyoq CisgKiBTZXQgaWYgdGhlIG91dHB1dCBzaG91bGQgYmUgaW4gdGhlICJjYW5vbmljYWwiIGZvcm1h dCBhcyBpbiB0aGUgWUFNTAorICogc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBAcGFyYW1baW4sb3V0 XSAgIGVtaXR0ZXIgICAgIEFuIGVtaXR0ZXIgb2JqZWN0LgorICogQHBhcmFtW2luXSAgICAgICBj YW5vbmljYWwgICBJZiB0aGUgb3V0cHV0IGlzIGNhbm9uaWNhbC4KKyAqLwordm9pZCB5YW1sX2Vt aXR0ZXJfc2V0X2Nhbm9uaWNhbChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBib29sIGNh bm9uaWNhbCk7CisKKy8qKgorICogU2V0IHRoZSBpbmRlbnRhdGlvbiBpbmNyZW1lbnQuCisgKgor ICogQHBhcmFtW2luLG91dF0gICBlbWl0dGVyICAgICBBbiBlbWl0dGVyIG9iamVjdC4KKyAqIEBw YXJhbVtpbl0gICAgICAgaW5kZW50ICAgICAgVGhlIGluZGVudGF0aW9uIGluY3JlbWVudCAoMSA8 IC4gPCAxMCkuCisgKi8KK3ZvaWQgeWFtbF9lbWl0dGVyX3NldF9pbmRlbnQoc3RydWN0IHlhbWxf ZW1pdHRlciAqZW1pdHRlciwgaW50IGluZGVudCk7CisKKy8qKgorICogU2V0IHRoZSBwcmVmZXJy ZWQgbGluZSB3aWR0aC4gQGMgLTEgbWVhbnMgdW5saW1pdGVkLgorICoKKyAqIEBwYXJhbVtpbixv dXRdICAgZW1pdHRlciAgICAgQW4gZW1pdHRlciBvYmplY3QuCisgKiBAcGFyYW1baW5dICAgICAg IHdpZHRoICAgICAgIFRoZSBwcmVmZXJyZWQgbGluZSB3aWR0aC4KKyAqLwordm9pZCB5YW1sX2Vt aXR0ZXJfc2V0X3dpZHRoKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGludCB3aWR0aCk7 CisKKy8qKgorICogU2V0IGlmIHVuZXNjYXBlZCBub24tQVNDSUkgY2hhcmFjdGVycyBhcmUgYWxs b3dlZC4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSAgIGVtaXR0ZXIgICAgIEFuIGVtaXR0ZXIgb2Jq ZWN0LgorICogQHBhcmFtW2luXSAgICAgICB1bmljb2RlICAgICBJZiB1bmVzY2FwZWQgVW5pY29k ZSBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkLgorICovCit2b2lkIHlhbWxfZW1pdHRlcl9zZXRfdW5p Y29kZShzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBib29sIHVuaWNvZGUpOworCisvKioK KyAqIEVtaXQgYW4gZXZlbnQuCisgKgorICogVGhlIGV2ZW50IG9iamVjdCBtYXkgYmUgZ2VuZXJh dGVkIHVzaW5nIHRoZSB5YW1sX3BhcnNlcl9wYXJzZSgpIGZ1bmN0aW9uLgorICogVGhlIGVtaXR0 ZXIgdGFrZXMgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgZXZlbnQgb2JqZWN0IGFuZCBkZXN0 cm95cyBpdHMKKyAqIGNvbnRlbnQgYWZ0ZXIgaXQgaXMgZW1pdHRlZC4gVGhlIGV2ZW50IG9iamVj dCBpcyBkZXN0cm95ZWQgZXZlbiBpZiB0aGUKKyAqIGZ1bmN0aW9uIGZhaWxzLgorICoKKyAqIEBw YXJhbVtpbixvdXRdICAgZW1pdHRlciAgICAgQW4gZW1pdHRlciBvYmplY3QuCisgKiBAcGFyYW1b aW4sb3V0XSAgIGV2ZW50ICAgICAgIEFuIGV2ZW50IG9iamVjdC4KKyAqCisgKiBAcmV0dXJucyBA YyAxIGlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkZWQsIEBjIDAgb24gZXJyb3IuCisgKi8KK3ZvaWQg eWFtbF9lbWl0dGVyX2VtaXQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgc3RydWN0IHlh bWxfZXZlbnQgKmV2ZW50KTsKKworLyoqCisgKiBGbHVzaCB0aGUgYWNjdW11bGF0ZWQgY2hhcmFj dGVycyB0byB0aGUgb3V0cHV0LgorICoKKyAqIEBwYXJhbVtpbixvdXRdICAgZW1pdHRlciAgICAg QW4gZW1pdHRlciBvYmplY3QuCisgKgorICogQHJldHVybnMgQGMgMSBpZiB0aGUgZnVuY3Rpb24g c3VjY2VlZGVkLCBAYyAwIG9uIGVycm9yLgorICovCitpbnQgeWFtbF9lbWl0dGVyX2ZsdXNoKHN0 cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKipwcm9ibGVtKTsKKworZ2Zw X3QgeWFtbF9lbWl0dGVyX3NldF9nZnAoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgZ2Zw X3QgZ2ZwKTsKKworc3RydWN0IHlhbWxfZW1pdHRlciAqeWFtbF9vcGVuKHlhbWxfd3JpdGVfdCBo YW5kbGVyLCB2b2lkICpkYXRhKTsKK3N0cnVjdCB5YW1sX2VtaXR0ZXIgKnlhbWxfb3Blbl9maWxl KHN0cnVjdCBzZXFfZmlsZSAqbSk7CitzdHJ1Y3QgeWFtbF9lbWl0dGVyICp5YW1sX29wZW5fc3Ry aW5nKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc2l6ZV90ICp3cml0dGVuKTsKKwordm9pZCBfX3lh bWxfbWFwcGluZ19zdGFydChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICBlbnVt IHlhbWxfbWFwcGluZ19zdHlsZSBzdHlsZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgeWFtbF9tYXBw aW5nX3N0YXJ0KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7CisJX195YW1sX21hcHBp bmdfc3RhcnQoZW1pdHRlciwgWUFNTF9BTllfTUFQUElOR19TVFlMRSk7Cit9CisKK3ZvaWQgeWFt bF9tYXBwaW5nX2VuZChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKTsKKwordm9pZCBfX3lh bWxfc2VxdWVuY2Vfc3RhcnQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwKKwkJCSAgIGVu dW0geWFtbF9zZXF1ZW5jZV9zdHlsZSBzdHlsZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgeWFtbF9z ZXF1ZW5jZV9zdGFydChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQoreworCV9feWFtbF9z ZXF1ZW5jZV9zdGFydChlbWl0dGVyLCBZQU1MX0FOWV9TRVFVRU5DRV9TVFlMRSk7Cit9CisKK3Zv aWQgeWFtbF9zZXF1ZW5jZV9lbmQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcik7CisKK19f cHJpbnRmKDIsIDMpCit2b2lkIHlhbWxfYWxpYXNfcHJpbnRmKHN0cnVjdCB5YW1sX2VtaXR0ZXIg KmVtaXR0ZXIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworX19wcmludGYoMiwgMykKK3ZvaWQg eWFtbF9zY2FsYXJfcHJpbnRmKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0IGNo YXIgKmZtdCwgLi4uKTsKKworX19wcmludGYoMywgNCkKK3ZvaWQgeWFtbF9wYWlyX3ByaW50Zihz dHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBj b25zdCBjaGFyICpmbXQsIC4uLik7CisKK3ZvaWQgeWFtbF9hc2NpaTg1X2VuY29kZShzdHJ1Y3Qg eWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4s IGJvb2wgY29tcHJlc3NlZCk7CisKK2ludCB5YW1sX2Nsb3NlKHN0cnVjdCB5YW1sX2VtaXR0ZXIg KmVtaXR0ZXIsIGNvbnN0IGNoYXIgKipwcm9ibGVtKTsKKworI2VuZGlmIC8qIF9fTElOVVhfWUFN TF9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnIGIvbGliL0tjb25maWcKaW5kZXggNDY4 MDYzMzJhOGNjLi40ODI5NzE5ZThiOWIgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xp Yi9LY29uZmlnCkBAIC02NjMsNiArNjYzLDE3IEBAIGNvbmZpZyBPQkpBR0cKIGNvbmZpZyBTVFJJ TkdfU0VMRlRFU1QKIAl0cmlzdGF0ZSAiVGVzdCBzdHJpbmcgZnVuY3Rpb25zIgogCitjb25maWcg WUFNTAorCXRyaXN0YXRlCisKK2NvbmZpZyBZQU1MX0VNSVRURVIKKwl0cmlzdGF0ZQorCXNlbGVj dCBZQU1MCisKK2NvbmZpZyBURVNUX1lBTUwKKwl0cmlzdGF0ZSAiU21hbGwgdGVzdCBtb2R1bGUg Zm9yIGxpYnlhbWwiCisJZGVwZW5kcyBvbiBZQU1MCisKIGVuZG1lbnUKIAogY29uZmlnIEdFTkVS SUNfSU9SRU1BUApkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4 IGFmZWZmMDVmYThjNS4uMGFjZTIzZWY1MWJjIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysr IGIvbGliL01ha2VmaWxlCkBAIC0yODUsNiArMjg1LDggQEAgb2JqLSQoQ09ORklHX0FTTjEpICs9 IGFzbjFfZGVjb2Rlci5vCiAKIG9iai0kKENPTkZJR19GT05UX1NVUFBPUlQpICs9IGZvbnRzLwog CitvYmotJChDT05GSUdfWUFNTCkgKz0geWFtbC8KKwogaG9zdHByb2dzCTo9IGdlbl9jcmMzMnRh YmxlCiBob3N0cHJvZ3MJKz0gZ2VuX2NyYzY0dGFibGUKIGNsZWFuLWZpbGVzCTo9IGNyYzMydGFi bGUuaApkaWZmIC0tZ2l0IGEvbGliL3lhbWwvTWFrZWZpbGUgYi9saWIveWFtbC9NYWtlZmlsZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY1ZThjMTc5NTkxNAotLS0g L2Rldi9udWxsCisrKyBiL2xpYi95YW1sL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCit5YW1sLW9ianMgPSB5YW1sLWV2ZW50cy5v Cit5YW1sLW9ianMtJChDT05GSUdfWUFNTF9FTUlUVEVSKSArPSB5YW1sLWVtaXR0ZXIubyB5YW1s LXNpbXBsZS5vCit5YW1sLW9ianMgKz0gJCh5YW1sLW9ianMtbSkKKworb2JqLSQoQ09ORklHX1lB TUwpICs9IHlhbWwubworb2JqLSQoQ09ORklHX1RFU1RfWUFNTCkgKz0gdGVzdC15YW1sLm8KZGlm ZiAtLWdpdCBhL2xpYi95YW1sL3Rlc3QteWFtbC5jIGIvbGliL3lhbWwvdGVzdC15YW1sLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41YzNjN2E5Mjg4NTkKLS0tIC9k ZXYvbnVsbAorKysgYi9saWIveWFtbC90ZXN0LXlhbWwuYwpAQCAtMCwwICsxLDEyMyBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBJ bnRlbCBDb3Jwb3JhdGlvbgorICovCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3lhbWwuaD4KKyNpbmNsdWRlIDxs aW51eC95YW1sLWV2ZW50cy5oPgorCitzdHJ1Y3QgZGVudHJ5ICpyb290OworCisjaWYgSVNfRU5B QkxFRChDT05GSUdfWUFNTF9FTUlUVEVSKQorc3RhdGljIGludCB5X2V2ZW50c19zaG93KHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0 dGVyOworCXN0cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKwljb25zdCBjaGFyICpwcm9ibGVtOwor CisJZW1pdHRlciA9IHlhbWxfZW1pdHRlcl9jcmVhdGUoR0ZQX0tFUk5FTCk7CisJaWYgKCFlbWl0 dGVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXlhbWxfZW1pdHRlcl9zZXRfc2VxX2ZpbGUoZW1p dHRlciwgbSk7CisKKwlldmVudCA9IHlhbWxfc3RyZWFtX3N0YXJ0X2V2ZW50X2NyZWF0ZShHRlBf S0VSTkVMKTsKKwl5YW1sX2VtaXR0ZXJfZW1pdChlbWl0dGVyLCBldmVudCk7CisKKwlldmVudCA9 IHlhbWxfZG9jdW1lbnRfc3RhcnRfZXZlbnRfY3JlYXRlKE5VTEwsIE5VTEwsIE5VTEwsIHRydWUs CisJCQkJCQkgR0ZQX0tFUk5FTCk7CisJeWFtbF9lbWl0dGVyX2VtaXQoZW1pdHRlciwgZXZlbnQp OworCisJZXZlbnQgPSB5YW1sX21hcHBpbmdfc3RhcnRfZXZlbnRfY3JlYXRlKE5VTEwsIE5VTEws IHRydWUsCisJCQkJCQlZQU1MX0ZMT1dfTUFQUElOR19TVFlMRSwKKwkJCQkJCUdGUF9LRVJORUwp OworCXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0ZXIsIGV2ZW50KTsKKworCWV2ZW50ID0geWFtbF9z Y2FsYXJfZXZlbnRfY3JlYXRlKE5VTEwsIE5VTEwsCisJCQkJCSAiR2VuZXJhbCIsIC0xLCBmYWxz ZSwKKwkJCQkJIHRydWUsIHRydWUsIFlBTUxfUExBSU5fU0NBTEFSX1NUWUxFLAorCQkJCQkgR0ZQ X0tFUk5FTCk7CisJeWFtbF9lbWl0dGVyX2VtaXQoZW1pdHRlciwgZXZlbnQpOworCisJZXZlbnQg PSB5YW1sX3NjYWxhcl9ldmVudF9jcmVhdGUoTlVMTCwgTlVMTCwKKwkJCQkJICJLZW5vYmkiLCAt MSwgZmFsc2UsCisJCQkJCSB0cnVlLCB0cnVlLCBZQU1MX1BMQUlOX1NDQUxBUl9TVFlMRSwKKwkJ CQkJIEdGUF9LRVJORUwpOworCXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0ZXIsIGV2ZW50KTsKKwor CWV2ZW50ID0geWFtbF9tYXBwaW5nX2VuZF9ldmVudF9jcmVhdGUoR0ZQX0tFUk5FTCk7CisJeWFt bF9lbWl0dGVyX2VtaXQoZW1pdHRlciwgZXZlbnQpOworCisJZXZlbnQgPSB5YW1sX2RvY3VtZW50 X2VuZF9ldmVudF9jcmVhdGUodHJ1ZSwgR0ZQX0tFUk5FTCk7CisJeWFtbF9lbWl0dGVyX2VtaXQo ZW1pdHRlciwgZXZlbnQpOworCisJZXZlbnQgPSB5YW1sX3N0cmVhbV9lbmRfZXZlbnRfY3JlYXRl KEdGUF9LRVJORUwpOworCXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0ZXIsIGV2ZW50KTsKKworCWlm ICh5YW1sX2VtaXR0ZXJfZmx1c2goZW1pdHRlciwgJnByb2JsZW0pKQorCQlwcl9lcnIoInRlc3Qt eWFtbCBldmVudHMgZmFpbGVkOiAlc1xuIiwgcHJvYmxlbSk7CisKKwl5YW1sX2VtaXR0ZXJfZGVz dHJveShlbWl0dGVyKTsKKwlyZXR1cm4gMDsKK30KK0RFRklORV9TSE9XX0FUVFJJQlVURSh5X2V2 ZW50cyk7CisKK3N0YXRpYyBpbnQgeV9zaW1wbGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKmRhdGEpCit7CisJc3RydWN0IHlhbWxfZW1pdHRlciAqeWFtbDsKKwljb25zdCBjaGFyICpw cm9ibGVtOworCisJeWFtbCA9IHlhbWxfb3Blbl9maWxlKG0pOworCWlmICgheWFtbCkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwl5YW1sX21hcHBpbmdfc3RhcnQoeWFtbCk7IHsKKwkJeWFtbF9zY2Fs YXJfcHJpbnRmKHlhbWwsICJtYXAiKTsKKwkJeWFtbF9tYXBwaW5nX3N0YXJ0KHlhbWwpOyB7CisJ CQl5YW1sX3NjYWxhcl9wcmludGYoeWFtbCwgIkhlbGxvIik7CisJCQl5YW1sX21hcHBpbmdfc3Rh cnQoeWFtbCk7IHsKKwkJCQl5YW1sX3BhaXJfcHJpbnRmKHlhbWwsCisJCQkJCQkgIkdlbmVyYWwi LCAiJXMiLCAiS2Vub2JpIik7CisJCQl9IHlhbWxfbWFwcGluZ19lbmQoeWFtbCk7CisJCX0geWFt bF9tYXBwaW5nX2VuZCh5YW1sKTsKKworCQl5YW1sX3NjYWxhcl9wcmludGYoeWFtbCwgInNlcXVl bmNlIik7CisJCXlhbWxfc2VxdWVuY2Vfc3RhcnQoeWFtbCk7IHsKKwkJCXlhbWxfc2NhbGFyX3By aW50Zih5YW1sLCAiMSIpOworCQkJeWFtbF9zY2FsYXJfcHJpbnRmKHlhbWwsICIyIik7CisJCQl5 YW1sX3NjYWxhcl9wcmludGYoeWFtbCwgIjMiKTsKKwkJCXlhbWxfYXNjaWk4NV9lbmNvZGUoeWFt bCwgIjQiLCAyLCBmYWxzZSk7CisJCX0geWFtbF9zZXF1ZW5jZV9lbmQoeWFtbCk7CisJfSB5YW1s X21hcHBpbmdfZW5kKHlhbWwpOworCisJaWYgKHlhbWxfY2xvc2UoeWFtbCwgJnByb2JsZW0pKQor CQlwcl9lcnIoInRlc3QteWFtbCBzaW1wbGUgZmFpbGVkOiAlc1xuIiwgcHJvYmxlbSk7CisKKwly ZXR1cm4gMDsKK30KK0RFRklORV9TSE9XX0FUVFJJQlVURSh5X3NpbXBsZSk7CisjZW5kaWYKKwor c3RhdGljIGludCBfX2luaXQgdGVzdF95YW1sX2luaXQodm9pZCkKK3sKKwlyb290ID0gZGVidWdm c19jcmVhdGVfZGlyKCJsaWJ5YW1sIiwgTlVMTCk7CisJaWYgKCFyb290KQorCQlyZXR1cm4gLUVO T01FTTsKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX1lBTUxfRU1JVFRFUikKKwlkZWJ1Z2ZzX2Ny ZWF0ZV9maWxlKCJlbWl0LWV2ZW50cyIsIDA0NDQsIHJvb3QsIE5VTEwsICZ5X2V2ZW50c19mb3Bz KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJlbWl0LXNpbXBsZSIsIDA0NDQsIHJvb3QsIE5VTEws ICZ5X3NpbXBsZV9mb3BzKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IF9fZXhpdCB0ZXN0X3lhbWxfZXhpdCh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlKHJvb3QpOwor fQorCittb2R1bGVfaW5pdCh0ZXN0X3lhbWxfaW5pdCk7Cittb2R1bGVfZXhpdCh0ZXN0X3lhbWxf ZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9saWIveWFtbC95YW1s LWVtaXR0ZXIuYyBiL2xpYi95YW1sL3lhbWwtZW1pdHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uYWI0NTA3MGZjOTMzCi0tLSAvZGV2L251bGwKKysrIGIvbGli L3lhbWwveWFtbC1lbWl0dGVyLmMKQEAgLTAsMCArMSwyNTM5IEBACisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTYgS2lyaWxsIFNp bW9ub3YKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5IEluZ3kgZMO2dCBOZXQKKyAqIENvcHly aWdodCAoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisjaW5jbHVkZSA8bGludXgvY3R5 cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+ CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2lu Y2x1ZGUgPGxpbnV4L3lhbWwuaD4KKyNpbmNsdWRlIDxsaW51eC95YW1sLWV2ZW50cy5oPgorCisj aW5jbHVkZSAieWFtbC1lbWl0dGVyLmgiCisKKyNkZWZpbmUgSU5JVElBTF9TVEFDS19TSVpFICAx NgorCitzdHJ1Y3QgeWFtbF9zdHJpbmcgeworCWNvbnN0IGNoYXIgKnN0YXJ0OworCWNvbnN0IGNo YXIgKmVuZDsKKwljb25zdCBjaGFyICpwb3M7Cit9OworCisjZGVmaW5lIFNUUklOR19JTklUKHN0 ciwgbGVuKSB7IChzdHIpLCAoc3RyKSArIChsZW4pLCAoc3RyKSB9CisKKyNkZWZpbmUgWUFNTF9T VFJJTkcobmFtZSwgc3RyKSBcCisJc3RydWN0IHlhbWxfc3RyaW5nIG5hbWUgPSBTVFJJTkdfSU5J VChzdHIsIHN0cmxlbihzdHIpKQorCisjZGVmaW5lIENIRUNLX0FUKHMsIG9jdGV0LCBvZmZzZXQp CQkJCQlcCisJKChzKS5wb3Nbb2Zmc2V0XSA9PSAoY2hhcikob2N0ZXQpKQorI2RlZmluZSBDSEVD SyhzLCBvY3RldCkgKENIRUNLX0FUKChzKSwgKG9jdGV0KSwgMCkpCisKKyNkZWZpbmUgSVNfQUxQ SEFfQVQocywgb2Zmc2V0KQkJCQkJCVwKKwkoaXNhbG51bSgocykucG9zW29mZnNldF0pIHx8CQkJ CQlcCisJIChzKS5wb3Nbb2Zmc2V0XSA9PSAnXycgfHwJCQkJCVwKKwkgKHMpLnBvc1tvZmZzZXRd ID09ICctJykKKyNkZWZpbmUgSVNfQUxQSEEocykJSVNfQUxQSEFfQVQoKHMpLCAwKQorCisjZGVm aW5lIElTX0FTQ0lJX0FUKHMsIG9mZnNldCkgKChzKS5wb3Nbb2Zmc2V0XSA8PSAnXHg3RicpCisj ZGVmaW5lIElTX0FTQ0lJKHMpICAgIElTX0FTQ0lJX0FUKChzKSwgMCkKKworI2RlZmluZSBJU19Q UklOVEFCTEVfQVQocywgb2Zmc2V0KSBpc3ByaW50KChzKS5wb3Nbb2Zmc2V0XSkKKyNkZWZpbmUg SVNfUFJJTlRBQkxFKHMpICAgIElTX1BSSU5UQUJMRV9BVCgocyksIDApCisKKyNkZWZpbmUgSVNf Wl9BVChzLCBvZmZzZXQpICAgIENIRUNLX0FUKChzKSwgJ1wwJywgKG9mZnNldCkpCisjZGVmaW5l IElTX1oocykgICAgSVNfWl9BVCgocyksIDApCisKKyNkZWZpbmUgSVNfQk9NX0FUKHMsIG9mZnNl dCkJCQkJCQlcCisJKENIRUNLX0FUKChzKSwgJ1x4RUYnLCAob2Zmc2V0KSArIDApICYmCQkJCVwK KwkgQ0hFQ0tfQVQoKHMpLCAnXHhCQicsIChvZmZzZXQpICsgMSkgJiYJCQkJXAorCSBDSEVDS19B VCgocyksICdceEJGJywgKG9mZnNldCkgKyAyKSkgIC8qIEJPTSAoI3hGRUZGKSAqLworI2RlZmlu ZSBJU19CT00ocykgIElTX0JPTV9BVChzLCAwKQorCisjZGVmaW5lIElTX1NQQUNFX0FUKHMsIG9m ZnNldCkgIENIRUNLX0FUKChzKSwgJyAnLCAob2Zmc2V0KSkKKyNkZWZpbmUgSVNfU1BBQ0UocykJ SVNfU1BBQ0VfQVQoKHMpLCAwKQorCisjZGVmaW5lIElTX1RBQl9BVChzLCBvZmZzZXQpICAgIENI RUNLX0FUKChzKSwgJ1x0JywgKG9mZnNldCkpCisjZGVmaW5lIElTX1RBQihzKQlJU19UQUJfQVQo KHMpLCAwKQorCisjZGVmaW5lIElTX0JMQU5LX0FUKHMsIG9mZnNldCkJCQkJCQlcCisJKElTX1NQ QUNFX0FUKChzKSwgKG9mZnNldCkpIHx8IElTX1RBQl9BVCgocyksIChvZmZzZXQpKSkKKyNkZWZp bmUgSVNfQkxBTksocykJSVNfQkxBTktfQVQoKHMpLCAwKQorCisjZGVmaW5lIElTX0JSRUFLX0FU KHMsIG9mZnNldCkJCQkJCQlcCisJKENIRUNLX0FUKChzKSwgJ1xyJywgKG9mZnNldCkpIHx8IC8q IENSICgjeEQpKi8JCQlcCisJIENIRUNLX0FUKChzKSwgJ1xuJywgKG9mZnNldCkpIHx8IC8qIExG ICgjeEEpICovCQlcCisJIChDSEVDS19BVCgocyksICdceEMyJywgKG9mZnNldCkpICYmCQkJCVwK KwkgIENIRUNLX0FUKChzKSwgJ1x4ODUnLCAob2Zmc2V0KSArIDEpKSB8fCAvKiBORUwgKCN4ODUp ICovCVwKKwkgKENIRUNLX0FUKChzKSwgJ1x4RTInLCAob2Zmc2V0KSkgJiYJCQkJXAorCSAgQ0hF Q0tfQVQoKHMpLCAnXHg4MCcsIChvZmZzZXQpICsgMSkgJiYJCQlcCisJICBDSEVDS19BVCgocyks ICdceEE4JywgKG9mZnNldCkgKyAyKSkgfHwgICAvKiBMUyAoI3gyMDI4KSAqLwlcCisJIChDSEVD S19BVCgocyksICdceEUyJywgKG9mZnNldCkpICYmCQkJCVwKKwkgIENIRUNLX0FUKChzKSwgJ1x4 ODAnLCAob2Zmc2V0KSArIDEpICYmCQkJXAorCSAgICBDSEVDS19BVCgocyksICdceEE5JywgKG9m ZnNldCkgKyAyKSkpICAvKiBQUyAoI3gyMDI5KSAqLworI2RlZmluZSBJU19CUkVBSyhzKQlJU19C UkVBS19BVCgocyksIDApCisKKyNkZWZpbmUgSVNfQ1JMRl9BVChzLCBvZmZzZXQpCQkJCQkJXAor CShDSEVDS19BVCgocyksICdccicsIChvZmZzZXQpKSAmJiBDSEVDS19BVCgocyksICdcbicsIChv ZmZzZXQpICsgMSkpCisjZGVmaW5lIElTX0NSTEYocykJSVNfQ1JMRl9BVCgocyksIDApCisKKyNk ZWZpbmUgSVNfQlJFQUtaX0FUKHMsIG9mZnNldCkJCQkJCQlcCisJKElTX0JSRUFLX0FUKChzKSwg KG9mZnNldCkpIHx8IElTX1pfQVQoKHMpLCAob2Zmc2V0KSkpCisjZGVmaW5lIElTX0JSRUFLWihz KQlJU19CUkVBS1pfQVQoKHMpLCAwKQorCisjZGVmaW5lIElTX1NQQUNFWl9BVChzLCBvZmZzZXQp CQkJCQkJXAorCShJU19TUEFDRV9BVCgocyksIChvZmZzZXQpKSB8fCBJU19CUkVBS1pfQVQoKHMp LCAob2Zmc2V0KSkpCisjZGVmaW5lIElTX1NQQUNFWihzKQlJU19TUEFDRVpfQVQoKHMpLCAwKQor CisjZGVmaW5lIElTX0JMQU5LWl9BVChzLCBvZmZzZXQpCQkJCQkJXAorCShJU19CTEFOS19BVCgo cyksIChvZmZzZXQpKSB8fCBJU19CUkVBS1pfQVQoKHMpLCAob2Zmc2V0KSkpCisjZGVmaW5lIElT X0JMQU5LWihzKQlJU19CTEFOS1pfQVQoKHMpLCAwKQorCitzdGF0aWMgaW5saW5lIGludCBfX3V0 Zjhfd2lkdGgoY29uc3Qgc3RydWN0IHlhbWxfc3RyaW5nICpzLCBpbnQgaWR4KQoreworCXJldHVy biAoKHMtPnBvc1tpZHhdICYgMHg4MCkgPT0gMHgwMCA/IDEgOgorCQkocy0+cG9zW2lkeF0gJiAw eEUwKSA9PSAweEMwID8gMiA6CisJCShzLT5wb3NbaWR4XSAmIDB4RjApID09IDB4RTAgPyAzIDoK KwkJKHMtPnBvc1tpZHhdICYgMHhGOCkgPT0gMHhGMCA/IDQgOgorCQkwKTsKK30KKworc3RhdGlj IGlubGluZSBpbnQgdXRmOF93aWR0aChjb25zdCBzdHJ1Y3QgeWFtbF9zdHJpbmcgKnMpCit7CisJ cmV0dXJuIF9fdXRmOF93aWR0aChzLCAwKTsKK30KKworI2RlZmluZSBBRFZBTkNFKHMpCSgocyku cG9zICs9IHV0Zjhfd2lkdGgoKCZzKSkpCisKK3N0YXRpYyBib29sIHlhbWxfc3RhY2tfZXh0ZW5k KHZvaWQgKipzdGFydCwgdm9pZCAqKnRvcCwgdm9pZCAqKmVuZCk7CisKKyNkZWZpbmUgRU1QVFko Y29udGV4dCwgc3RhY2spICgoc3RhY2spLnN0YXJ0ID09IChzdGFjaykudG9wKQorCisjZGVmaW5l IFBVU0goY29udGV4dCwgc3RhY2ssIHZhbHVlKQkJCQkJXAorCSgoKHN0YWNrKS50b3AgIT0gKHN0 YWNrKS5lbmQgfHwJCQkJCVwKKwkgICF5YW1sX3N0YWNrX2V4dGVuZCgodm9pZCAqKikmKHN0YWNr KS5zdGFydCwJCQlcCisJCQkgICAgICh2b2lkICoqKSYoc3RhY2spLnRvcCwgKHZvaWQgKiopJihz dGFjaykuZW5kKSkgPyBcCisJICgqKChzdGFjaykudG9wKyspID0gdmFsdWUsIDApIDoJCQkJXAor CSAoKGNvbnRleHQpLT5lcnJubyA9IC1FTk9NRU0pKQorCisjZGVmaW5lIFBPUChjb250ZXh0LCBz dGFjaykgKCooLS0oc3RhY2spLnRvcCkpCisKK3N0YXRpYyBpbnQKK19fc2V0X2Vycm9yKHN0cnVj dCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKnByb2JsZW0sIGludCBlcnIpCit7 CisJV0FSTl9PTihlbWl0dGVyLT5lcnJubyk7CisKKwllbWl0dGVyLT5lcnJubyA9IGVycjsKKwll bWl0dGVyLT5wcm9ibGVtID0gcHJvYmxlbTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBp bnQgc2V0X2Vycm9yKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKnBy b2JsZW0pCit7CisJcmV0dXJuIF9fc2V0X2Vycm9yKGVtaXR0ZXIsIHByb2JsZW0sIEVJTlZBTCk7 Cit9CisKK3N0YXRpYyBpbnQgZmx1c2goc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikKK3sK KwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KGVtaXR0ZXItPmVycm5vKSkKKwkJcmV0dXJuIGVt aXR0ZXItPmVycm5vOworCisJZW1pdHRlci0+YnVmLmxhc3QgPSBlbWl0dGVyLT5idWYucG9zOwor CWVtaXR0ZXItPmJ1Zi5wb3MgPSBlbWl0dGVyLT5idWYuc3RhcnQ7CisKKwlpZiAoZW1pdHRlci0+ YnVmLnN0YXJ0ID09IGVtaXR0ZXItPmJ1Zi5sYXN0KQorCQlyZXR1cm4gMDsKKworCWVyciA9IGVt aXR0ZXItPndyaXRlX2hhbmRsZXIoZW1pdHRlci0+d3JpdGVfZGF0YSwKKwkJCQkgICAgIGVtaXR0 ZXItPmJ1Zi5zdGFydCwKKwkJCQkgICAgIGVtaXR0ZXItPmJ1Zi5sYXN0IC0gZW1pdHRlci0+YnVm LnN0YXJ0KTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBfX3NldF9lcnJvcihl bWl0dGVyLCAid3JpdGUgZXJyb3IiLCBlcnIpOworCisJZW1pdHRlci0+YnVmLmxhc3QgPSBlbWl0 dGVyLT5idWYuc3RhcnQ7CisJZW1pdHRlci0+YnVmLnBvcyA9IGVtaXR0ZXItPmJ1Zi5zdGFydDsK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXliZV9mbHVzaChzdHJ1Y3QgeWFtbF9lbWl0 dGVyICplbWl0dGVyLCBpbnQgbGVuKQoreworCWlmIChlbWl0dGVyLT5idWYucG9zICsgbGVuIDwg ZW1pdHRlci0+YnVmLmVuZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZmx1c2goZW1pdHRlcik7 Cit9CisKK3N0YXRpYyBpbnQgcHV0KHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0 IGNoYXIgdmFsdWUpCit7CisJaW50IGVycjsKKworCWVyciA9IG1heWJlX2ZsdXNoKGVtaXR0ZXIs IDUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkqZW1pdHRlci0+YnVmLnBvcysrID0g dmFsdWU7CisJZW1pdHRlci0+Y29sdW1uKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg cHV0X2JyZWFrKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7CisJaW50IGVycjsKKwor CWVyciA9ICBwdXQoZW1pdHRlciwgJ1xuJyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwor CWVtaXR0ZXItPmNvbHVtbiA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHV0X2No YXIoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgc3RydWN0IHlhbWxfc3RyaW5nICpzdHIp Cit7CisJY29uc3QgaW50IHdpZHRoID0gdXRmOF93aWR0aChzdHIpOworCWludCBlcnI7CisKKwll cnIgPSBtYXliZV9mbHVzaChlbWl0dGVyLCB3aWR0aCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCW1lbWNweShlbWl0dGVyLT5idWYucG9zLCBzdHItPnBvcywgd2lkdGgpOworCWVtaXR0 ZXItPmJ1Zi5wb3MgKz0gd2lkdGg7CisJc3RyLT5wb3MgKz0gd2lkdGg7CisKKwllbWl0dGVyLT5j b2x1bW4rKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXRfY2hhcl9icmVhayhzdHJ1 Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBzdHJ1Y3QgeWFtbF9zdHJpbmcgKnN0cikKK3sKKwlj b25zdCBpbnQgd2lkdGggPSB1dGY4X3dpZHRoKHN0cik7CisJaW50IGVycjsKKworCWVyciA9IG1h eWJlX2ZsdXNoKGVtaXR0ZXIsIHdpZHRoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJ bWVtY3B5KGVtaXR0ZXItPmJ1Zi5wb3MsIHN0ci0+cG9zLCB3aWR0aCk7CisJZW1pdHRlci0+YnVm LnBvcyArPSB3aWR0aDsKKwlzdHItPnBvcyArPSB3aWR0aDsKKworCWVtaXR0ZXItPmNvbHVtbiA9 IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeWFtbF9ldmVudCAqbmV4dF9ldmVu dChjb25zdCBzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQoreworCXJldHVybiBsaXN0X2Zp cnN0X2VudHJ5KCZlbWl0dGVyLT5ldmVudHMsIHN0cnVjdCB5YW1sX2V2ZW50LCBsaW5rKTsKK30K Kworc3RhdGljIGJvb2wgbmVlZF9tb3JlX2V2ZW50cyhzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0 dGVyKQoreworCXN0cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKwlpbnQgYWNjOworCisJaWYgKGxp c3RfZW1wdHkoJmVtaXR0ZXItPmV2ZW50cykpCisJCXJldHVybiB0cnVlOworCisJYWNjID0gMDsK Kwlzd2l0Y2ggKG5leHRfZXZlbnQoZW1pdHRlciktPnR5cGUpIHsKKwljYXNlIFlBTUxfRE9DVU1F TlRfU1RBUlRfRVZFTlQ6CisJCWFjYyA9IDE7CisJCWJyZWFrOworCWNhc2UgWUFNTF9TRVFVRU5D RV9TVEFSVF9FVkVOVDoKKwkJYWNjID0gMjsKKwkJYnJlYWs7CisJY2FzZSBZQU1MX01BUFBJTkdf U1RBUlRfRVZFTlQ6CisJCWFjYyA9IDM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCWlmIChlbWl0dGVyLT5udW1fZXZlbnRzID4gYWNjKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlhY2MgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZlbWl0dGVy LT5ldmVudHMsIGxpbmspIHsKKwkJc3dpdGNoIChldmVudC0+dHlwZSkgeworCQljYXNlIFlBTUxf U1RSRUFNX1NUQVJUX0VWRU5UOgorCQljYXNlIFlBTUxfRE9DVU1FTlRfU1RBUlRfRVZFTlQ6CisJ CWNhc2UgWUFNTF9TRVFVRU5DRV9TVEFSVF9FVkVOVDoKKwkJY2FzZSBZQU1MX01BUFBJTkdfU1RB UlRfRVZFTlQ6CisJCQlhY2MrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgWUFNTF9TVFJFQU1fRU5E X0VWRU5UOgorCQljYXNlIFlBTUxfRE9DVU1FTlRfRU5EX0VWRU5UOgorCQljYXNlIFlBTUxfU0VR VUVOQ0VfRU5EX0VWRU5UOgorCQljYXNlIFlBTUxfTUFQUElOR19FTkRfRVZFTlQ6CisJCQlhY2Mt LTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmICghYWNj KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50 CithbmFseXplX3ZlcnNpb25fZGlyZWN0aXZlKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIs CisJCQkgIHN0cnVjdCB5YW1sX3ZlcnNpb25fZGlyZWN0aXZlIHZlcnNpb24pCit7CisJaWYgKHZl cnNpb24ubWFqb3IgIT0gMSB8fCB2ZXJzaW9uLm1pbm9yICE9IDEpCisJCXJldHVybiBzZXRfZXJy b3IoZW1pdHRlciwgImluY29tcGF0aWJsZSAlWUFNTCBkaXJlY3RpdmUiKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50CithbmFseXplX3RhZ19kaXJlY3RpdmUoc3RydWN0IHlhbWxfZW1p dHRlciAqZW1pdHRlciwKKwkJICAgICAgc3RydWN0IHlhbWxfdGFnX2RpcmVjdGl2ZSB0YWcpCit7 CisJWUFNTF9TVFJJTkcoaGFuZGxlLCB0YWcuaGFuZGxlKTsKKwlZQU1MX1NUUklORyhwcmVmaXgs IHRhZy5wcmVmaXgpOworCisJaWYgKGhhbmRsZS5zdGFydCA9PSBoYW5kbGUuZW5kKQorCQlyZXR1 cm4gc2V0X2Vycm9yKGVtaXR0ZXIsICJ0YWcgaGFuZGxlIG11c3Qgbm90IGJlIGVtcHR5Iik7CisK KwlpZiAoaGFuZGxlLnN0YXJ0WzBdICE9ICchJykKKwkJcmV0dXJuIHNldF9lcnJvcihlbWl0dGVy LCAidGFnIGhhbmRsZSBtdXN0IHN0YXJ0IHdpdGggJyEnIik7CisKKwlpZiAoaGFuZGxlLmVuZFst MV0gIT0gJyEnKQorCQlyZXR1cm4gc2V0X2Vycm9yKGVtaXR0ZXIsICJ0YWcgaGFuZGxlIG11c3Qg ZW5kIHdpdGggJyEnIik7CisKKwloYW5kbGUucG9zKys7CisKKwl3aGlsZSAoaGFuZGxlLnBvcyA8 IGhhbmRsZS5lbmQgLSAxKSB7CisJCWlmICghSVNfQUxQSEEoaGFuZGxlKSkKKwkJCXJldHVybiBz ZXRfZXJyb3IoZW1pdHRlciwKKwkJCQkJICJ0YWcgaGFuZGxlIG11c3QgY29udGFpbiBhbHBoYW51 bWVyaWNhbCBjaGFyYWN0ZXJzIG9ubHkiKTsKKworCQlBRFZBTkNFKGhhbmRsZSk7CisJfQorCisJ aWYgKHByZWZpeC5zdGFydCA9PSBwcmVmaXguZW5kKQorCQlyZXR1cm4gc2V0X2Vycm9yKGVtaXR0 ZXIsICJ0YWcgcHJlZml4IG11c3Qgbm90IGJlIGVtcHR5Iik7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludAorYW5hbHl6ZV9hbmNob3Ioc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwg Y29uc3QgY2hhciAqYW5jaG9yLCBpbnQgYWxpYXMpCit7CisJWUFNTF9TVFJJTkcoc3RyaW5nLCBh bmNob3IpOworCisJaWYgKHN0cmluZy5zdGFydCA9PSBzdHJpbmcuZW5kKSB7CisJCXJldHVybiBz ZXRfZXJyb3IoZW1pdHRlciwgYWxpYXMgPworCQkJCSAiYWxpYXMgdmFsdWUgbXVzdCBub3QgYmUg ZW1wdHkiIDoKKwkJCQkgImFuY2hvciB2YWx1ZSBtdXN0IG5vdCBiZSBlbXB0eSIpOworCX0KKwor CXdoaWxlIChzdHJpbmcucG9zICE9IHN0cmluZy5lbmQpIHsKKwkJaWYgKCFJU19BTFBIQShzdHJp bmcpKSB7CisJCQlyZXR1cm4gc2V0X2Vycm9yKGVtaXR0ZXIsIGFsaWFzID8KKwkJCQkJICJhbGlh cyB2YWx1ZSBtdXN0IGNvbnRhaW4gYWxwaGFudW1lcmljYWwgY2hhcmFjdGVycyBvbmx5IiA6CisJ CQkJCSAiYW5jaG9yIHZhbHVlIG11c3QgY29udGFpbiBhbHBoYW51bWVyaWNhbCBjaGFyYWN0ZXJz IG9ubHkiKTsKKwkJfQorCQlBRFZBTkNFKHN0cmluZyk7CisJfQorCisJZW1pdHRlci0+YW5jaG9y X2RhdGEuYW5jaG9yID0gc3RyaW5nLnN0YXJ0OworCWVtaXR0ZXItPmFuY2hvcl9kYXRhLmFuY2hv cl9sZW5ndGggPSBzdHJpbmcuZW5kIC0gc3RyaW5nLnN0YXJ0OworCWVtaXR0ZXItPmFuY2hvcl9k YXRhLmFsaWFzID0gYWxpYXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW5hbHl6ZV90 YWcoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3QgY2hhciAqc3RyKQoreworCVlB TUxfU1RSSU5HKHN0cmluZywgc3RyKTsKKwlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICp0YWc7 CisKKwlpZiAoc3RyaW5nLnN0YXJ0ID09IHN0cmluZy5lbmQpCisJCXJldHVybiBzZXRfZXJyb3Io ZW1pdHRlciwgInRhZyB2YWx1ZSBtdXN0IG5vdCBiZSBlbXB0eSIpOworCisJZm9yICh0YWcgPSBl bWl0dGVyLT50YWdzLnN0YXJ0OyB0YWcgIT0gZW1pdHRlci0+dGFncy50b3A7IHRhZysrKSB7CisJ CXNpemVfdCBwcmVmaXhfbGVuZ3RoID0gc3RybGVuKHRhZy0+cHJlZml4KTsKKworCQlpZiAocHJl Zml4X2xlbmd0aCA8IHN0cmluZy5lbmQgLSBzdHJpbmcuc3RhcnQgJiYKKwkJICAgIHN0cm5jbXAo dGFnLT5wcmVmaXgsIHN0cmluZy5zdGFydCwgcHJlZml4X2xlbmd0aCkgPT0gMCkgeworCQkJZW1p dHRlci0+dGFnX2RhdGEuaGFuZGxlID0gdGFnLT5oYW5kbGU7CisJCQllbWl0dGVyLT50YWdfZGF0 YS5oYW5kbGVfbGVuZ3RoID0gc3RybGVuKHRhZy0+aGFuZGxlKTsKKwkJCWVtaXR0ZXItPnRhZ19k YXRhLnN1ZmZpeCA9IHN0cmluZy5zdGFydCArIHByZWZpeF9sZW5ndGg7CisJCQllbWl0dGVyLT50 YWdfZGF0YS5zdWZmaXhfbGVuZ3RoID0KKwkJCQkoc3RyaW5nLmVuZCAtIHN0cmluZy5zdGFydCkg LSBwcmVmaXhfbGVuZ3RoOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwllbWl0dGVyLT50YWdf ZGF0YS5zdWZmaXggPSBzdHJpbmcuc3RhcnQ7CisJZW1pdHRlci0+dGFnX2RhdGEuc3VmZml4X2xl bmd0aCA9IHN0cmluZy5lbmQgLSBzdHJpbmcuc3RhcnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQKK2FuYWx5emVfc2NhbGFyKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0 IGNoYXIgKnZhbHVlLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCB5YW1sX3N0cmluZyBzdHJp bmcgPSBTVFJJTkdfSU5JVCh2YWx1ZSwgbGVuZ3RoKTsKKworCWludCBibG9ja19pbmRpY2F0b3Jz ID0gMDsKKwlpbnQgZmxvd19pbmRpY2F0b3JzID0gMDsKKwlpbnQgbGluZV9icmVha3MgPSAwOwor CWludCBzcGVjaWFsX2NoYXJhY3RlcnMgPSAwOworCisJaW50IGxlYWRpbmdfc3BhY2UgPSAwOwor CWludCBsZWFkaW5nX2JyZWFrID0gMDsKKwlpbnQgdHJhaWxpbmdfc3BhY2UgPSAwOworCWludCB0 cmFpbGluZ19icmVhayA9IDA7CisJaW50IGJyZWFrX3NwYWNlID0gMDsKKwlpbnQgc3BhY2VfYnJl YWsgPSAwOworCisJaW50IHByZWNlZGVkX2J5X3doaXRlc3BhY2UgPSAwOworCWludCBmb2xsb3dl ZF9ieV93aGl0ZXNwYWNlID0gMDsKKwlpbnQgcHJldmlvdXNfc3BhY2UgPSAwOworCWludCBwcmV2 aW91c19icmVhayA9IDA7CisKKwllbWl0dGVyLT5zY2FsYXJfZGF0YS52YWx1ZSA9IHZhbHVlOwor CWVtaXR0ZXItPnNjYWxhcl9kYXRhLmxlbmd0aCA9IGxlbmd0aDsKKworCWlmIChzdHJpbmcuc3Rh cnQgPT0gc3RyaW5nLmVuZCkgeworCQllbWl0dGVyLT5zY2FsYXJfZGF0YS5tdWx0aWxpbmUgPSAw OworCQllbWl0dGVyLT5zY2FsYXJfZGF0YS5mbG93X3BsYWluX2FsbG93ZWQgPSAwOworCQllbWl0 dGVyLT5zY2FsYXJfZGF0YS5ibG9ja19wbGFpbl9hbGxvd2VkID0gMTsKKwkJZW1pdHRlci0+c2Nh bGFyX2RhdGEuc2luZ2xlX3F1b3RlZF9hbGxvd2VkID0gMTsKKwkJZW1pdHRlci0+c2NhbGFyX2Rh dGEuYmxvY2tfYWxsb3dlZCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICgoQ0hFQ0tfQVQo c3RyaW5nLCAnLScsIDApICYmCisJICAgICBDSEVDS19BVChzdHJpbmcsICctJywgMSkgJiYKKwkg ICAgIENIRUNLX0FUKHN0cmluZywgJy0nLCAyKSkgfHwKKwkgICAgKENIRUNLX0FUKHN0cmluZywg Jy4nLCAwKSAmJgorCSAgICAgQ0hFQ0tfQVQoc3RyaW5nLCAnLicsIDEpICYmCisJICAgICBDSEVD S19BVChzdHJpbmcsICcuJywgMikpKSB7CisJCWJsb2NrX2luZGljYXRvcnMgPSAxOworCQlmbG93 X2luZGljYXRvcnMgPSAxOworCX0KKworCXByZWNlZGVkX2J5X3doaXRlc3BhY2UgPSAxOworCWZv bGxvd2VkX2J5X3doaXRlc3BhY2UgPSBJU19CTEFOS1pfQVQoc3RyaW5nLCB1dGY4X3dpZHRoKCZz dHJpbmcpKTsKKworCXdoaWxlIChzdHJpbmcucG9zICE9IHN0cmluZy5lbmQpIHsKKwkJaWYgKHN0 cmluZy5zdGFydCA9PSBzdHJpbmcucG9zKSB7CisJCQlpZiAoQ0hFQ0soc3RyaW5nLCAnIycpIHx8 IENIRUNLKHN0cmluZywgJywnKSB8fAorCQkJICAgIENIRUNLKHN0cmluZywgJ1snKSB8fCBDSEVD SyhzdHJpbmcsICddJykgfHwKKwkJCSAgICBDSEVDSyhzdHJpbmcsICd7JykgfHwgQ0hFQ0soc3Ry aW5nLCAnfScpIHx8CisJCQkgICAgQ0hFQ0soc3RyaW5nLCAnJicpIHx8IENIRUNLKHN0cmluZywg JyonKSB8fAorCQkJICAgIENIRUNLKHN0cmluZywgJyEnKSB8fCBDSEVDSyhzdHJpbmcsICd8Jykg fHwKKwkJCSAgICBDSEVDSyhzdHJpbmcsICc+JykgfHwgQ0hFQ0soc3RyaW5nLCAnXCcnKSB8fAor CQkJICAgIENIRUNLKHN0cmluZywgJyInKSB8fCBDSEVDSyhzdHJpbmcsICclJykgfHwKKwkJCSAg ICBDSEVDSyhzdHJpbmcsICdAJykgfHwgQ0hFQ0soc3RyaW5nLCAnYCcpKSB7CisJCQkJZmxvd19p bmRpY2F0b3JzID0gMTsKKwkJCQlibG9ja19pbmRpY2F0b3JzID0gMTsKKwkJCX0KKworCQkJaWYg KENIRUNLKHN0cmluZywgJz8nKSB8fCBDSEVDSyhzdHJpbmcsICc6JykpIHsKKwkJCQlmbG93X2lu ZGljYXRvcnMgPSAxOworCQkJCWlmIChmb2xsb3dlZF9ieV93aGl0ZXNwYWNlKQorCQkJCQlibG9j a19pbmRpY2F0b3JzID0gMTsKKwkJCX0KKworCQkJaWYgKENIRUNLKHN0cmluZywgJy0nKSAmJiBm b2xsb3dlZF9ieV93aGl0ZXNwYWNlKSB7CisJCQkJZmxvd19pbmRpY2F0b3JzID0gMTsKKwkJCQli bG9ja19pbmRpY2F0b3JzID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChDSEVDSyhzdHJp bmcsICcsJykgfHwgQ0hFQ0soc3RyaW5nLCAnPycpIHx8CisJCQkgICAgQ0hFQ0soc3RyaW5nLCAn WycpIHx8IENIRUNLKHN0cmluZywgJ10nKSB8fAorCQkJICAgIENIRUNLKHN0cmluZywgJ3snKSB8 fCBDSEVDSyhzdHJpbmcsICd9JykpCisJCQkJZmxvd19pbmRpY2F0b3JzID0gMTsKKworCQkJaWYg KENIRUNLKHN0cmluZywgJzonKSkgeworCQkJCWZsb3dfaW5kaWNhdG9ycyA9IDE7CisJCQkJaWYg KGZvbGxvd2VkX2J5X3doaXRlc3BhY2UpCisJCQkJCWJsb2NrX2luZGljYXRvcnMgPSAxOworCQkJ fQorCisJCQlpZiAoQ0hFQ0soc3RyaW5nLCAnIycpICYmIHByZWNlZGVkX2J5X3doaXRlc3BhY2Up IHsKKwkJCQlmbG93X2luZGljYXRvcnMgPSAxOworCQkJCWJsb2NrX2luZGljYXRvcnMgPSAxOwor CQkJfQorCQl9CisKKwkJaWYgKCFJU19QUklOVEFCTEUoc3RyaW5nKSB8fAorCQkgICAgKCFJU19B U0NJSShzdHJpbmcpICYmICFlbWl0dGVyLT51bmljb2RlKSkgeworCQkJc3BlY2lhbF9jaGFyYWN0 ZXJzID0gMTsKKwkJfQorCisJCWlmIChJU19CUkVBSyhzdHJpbmcpKQorCQkJbGluZV9icmVha3Mg PSAxOworCisJCWlmIChJU19TUEFDRShzdHJpbmcpKSB7CisJCQlpZiAoc3RyaW5nLnN0YXJ0ID09 IHN0cmluZy5wb3MpCisJCQkJbGVhZGluZ19zcGFjZSA9IDE7CisKKwkJCWlmIChzdHJpbmcucG9z ICsgdXRmOF93aWR0aCgmc3RyaW5nKSA9PSBzdHJpbmcuZW5kKQorCQkJCXRyYWlsaW5nX3NwYWNl ID0gMTsKKworCQkJaWYgKHByZXZpb3VzX2JyZWFrKQorCQkJCWJyZWFrX3NwYWNlID0gMTsKKwor CQkJcHJldmlvdXNfc3BhY2UgPSAxOworCQkJcHJldmlvdXNfYnJlYWsgPSAwOworCQl9IGVsc2Ug aWYgKElTX0JSRUFLKHN0cmluZykpIHsKKwkJCWlmIChzdHJpbmcuc3RhcnQgPT0gc3RyaW5nLnBv cykKKwkJCQlsZWFkaW5nX2JyZWFrID0gMTsKKworCQkJaWYgKHN0cmluZy5wb3MgKyB1dGY4X3dp ZHRoKCZzdHJpbmcpID09IHN0cmluZy5lbmQpCisJCQkJdHJhaWxpbmdfYnJlYWsgPSAxOworCisJ CQlpZiAocHJldmlvdXNfc3BhY2UpCisJCQkJc3BhY2VfYnJlYWsgPSAxOworCisJCQlwcmV2aW91 c19zcGFjZSA9IDA7CisJCQlwcmV2aW91c19icmVhayA9IDE7CisJCX0gZWxzZSB7CisJCQlwcmV2 aW91c19zcGFjZSA9IDA7CisJCQlwcmV2aW91c19icmVhayA9IDA7CisJCX0KKworCQlwcmVjZWRl ZF9ieV93aGl0ZXNwYWNlID0gSVNfQkxBTktaKHN0cmluZyk7CisJCUFEVkFOQ0Uoc3RyaW5nKTsK KwkJaWYgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkKKwkJCWZvbGxvd2VkX2J5X3doaXRlc3Bh Y2UgPQorCQkJCUlTX0JMQU5LWl9BVChzdHJpbmcsIHV0Zjhfd2lkdGgoJnN0cmluZykpOworCX0K KworCWVtaXR0ZXItPnNjYWxhcl9kYXRhLm11bHRpbGluZSA9IGxpbmVfYnJlYWtzOworCisJZW1p dHRlci0+c2NhbGFyX2RhdGEuZmxvd19wbGFpbl9hbGxvd2VkID0gMTsKKwllbWl0dGVyLT5zY2Fs YXJfZGF0YS5ibG9ja19wbGFpbl9hbGxvd2VkID0gMTsKKwllbWl0dGVyLT5zY2FsYXJfZGF0YS5z aW5nbGVfcXVvdGVkX2FsbG93ZWQgPSAxOworCWVtaXR0ZXItPnNjYWxhcl9kYXRhLmJsb2NrX2Fs bG93ZWQgPSAxOworCisJaWYgKGxlYWRpbmdfc3BhY2UgfHwKKwkgICAgbGVhZGluZ19icmVhayB8 fAorCSAgICB0cmFpbGluZ19zcGFjZSB8fAorCSAgICB0cmFpbGluZ19icmVhaykgeworCQllbWl0 dGVyLT5zY2FsYXJfZGF0YS5mbG93X3BsYWluX2FsbG93ZWQgPSAwOworCQllbWl0dGVyLT5zY2Fs YXJfZGF0YS5ibG9ja19wbGFpbl9hbGxvd2VkID0gMDsKKwl9CisKKwlpZiAodHJhaWxpbmdfc3Bh Y2UpCisJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLmJsb2NrX2FsbG93ZWQgPSAwOworCisJaWYgKGJy ZWFrX3NwYWNlKSB7CisJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLmZsb3dfcGxhaW5fYWxsb3dlZCA9 IDA7CisJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLmJsb2NrX3BsYWluX2FsbG93ZWQgPSAwOworCQll bWl0dGVyLT5zY2FsYXJfZGF0YS5zaW5nbGVfcXVvdGVkX2FsbG93ZWQgPSAwOworCX0KKworCWlm IChzcGFjZV9icmVhayB8fCBzcGVjaWFsX2NoYXJhY3RlcnMpIHsKKwkJZW1pdHRlci0+c2NhbGFy X2RhdGEuZmxvd19wbGFpbl9hbGxvd2VkID0gMDsKKwkJZW1pdHRlci0+c2NhbGFyX2RhdGEuYmxv Y2tfcGxhaW5fYWxsb3dlZCA9IDA7CisJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLnNpbmdsZV9xdW90 ZWRfYWxsb3dlZCA9IDA7CisJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLmJsb2NrX2FsbG93ZWQgPSAw OworCX0KKworCWlmIChsaW5lX2JyZWFrcykgeworCQllbWl0dGVyLT5zY2FsYXJfZGF0YS5mbG93 X3BsYWluX2FsbG93ZWQgPSAwOworCQllbWl0dGVyLT5zY2FsYXJfZGF0YS5ibG9ja19wbGFpbl9h bGxvd2VkID0gMDsKKwl9CisKKwlpZiAoZmxvd19pbmRpY2F0b3JzKQorCQllbWl0dGVyLT5zY2Fs YXJfZGF0YS5mbG93X3BsYWluX2FsbG93ZWQgPSAwOworCisJaWYgKGJsb2NrX2luZGljYXRvcnMp CisJCWVtaXR0ZXItPnNjYWxhcl9kYXRhLmJsb2NrX3BsYWluX2FsbG93ZWQgPSAwOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FuYWx5emVfZXZlbnQoc3RydWN0IHlhbWxfZW1pdHRl ciAqZW1pdHRlciwgY29uc3Qgc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50KQoreworCWludCBlcnI7 CisKKwllbWl0dGVyLT5hbmNob3JfZGF0YS5hbmNob3IgPSBOVUxMOworCWVtaXR0ZXItPmFuY2hv cl9kYXRhLmFuY2hvcl9sZW5ndGggPSAwOworCWVtaXR0ZXItPnRhZ19kYXRhLmhhbmRsZSA9IE5V TEw7CisJZW1pdHRlci0+dGFnX2RhdGEuaGFuZGxlX2xlbmd0aCA9IDA7CisJZW1pdHRlci0+dGFn X2RhdGEuc3VmZml4ID0gTlVMTDsKKwllbWl0dGVyLT50YWdfZGF0YS5zdWZmaXhfbGVuZ3RoID0g MDsKKwllbWl0dGVyLT5zY2FsYXJfZGF0YS52YWx1ZSA9IE5VTEw7CisJZW1pdHRlci0+c2NhbGFy X2RhdGEubGVuZ3RoID0gMDsKKworCXN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKwljYXNlIFlBTUxf QUxJQVNfRVZFTlQ6CisJCXJldHVybiBhbmFseXplX2FuY2hvcihlbWl0dGVyLCBldmVudC0+YWxp YXMuYW5jaG9yLCAxKTsKKworCWNhc2UgWUFNTF9TQ0FMQVJfRVZFTlQ6CisJCWlmIChldmVudC0+ c2NhbGFyLmFuY2hvcikgeworCQkJZXJyID0gYW5hbHl6ZV9hbmNob3IoZW1pdHRlciwgZXZlbnQt PnNjYWxhci5hbmNob3IsIDApOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisK KwkJaWYgKGV2ZW50LT5zY2FsYXIudGFnICYmCisJCSAgICAoZW1pdHRlci0+Y2Fub25pY2FsIHx8 CisJCSAgICAgKCFldmVudC0+c2NhbGFyLnBsYWluX2ltcGxpY2l0ICYmCisJCSAgICAgICFldmVu dC0+c2NhbGFyLnF1b3RlZF9pbXBsaWNpdCkpKSB7CisJCQllcnIgPSBhbmFseXplX3RhZyhlbWl0 dGVyLCBldmVudC0+c2NhbGFyLnRhZyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJ CX0KKworCQlyZXR1cm4gYW5hbHl6ZV9zY2FsYXIoZW1pdHRlciwKKwkJCQkgICAgICBldmVudC0+ c2NhbGFyLnZhbHVlLAorCQkJCSAgICAgIGV2ZW50LT5zY2FsYXIubGVuZ3RoKTsKKworCWNhc2Ug WUFNTF9TRVFVRU5DRV9TVEFSVF9FVkVOVDoKKwkJaWYgKGV2ZW50LT5zZXF1ZW5jZV9zdGFydC5h bmNob3IpIHsKKwkJCWVyciA9IGFuYWx5emVfYW5jaG9yKGVtaXR0ZXIsCisJCQkJCSAgICAgZXZl bnQtPnNlcXVlbmNlX3N0YXJ0LmFuY2hvciwgMCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBl cnI7CisJCX0KKworCQlpZiAoZXZlbnQtPnNlcXVlbmNlX3N0YXJ0LnRhZyAmJgorCQkgICAgKGVt aXR0ZXItPmNhbm9uaWNhbCB8fCAhZXZlbnQtPnNlcXVlbmNlX3N0YXJ0LmltcGxpY2l0KSkgewor CQkJZXJyID0gYW5hbHl6ZV90YWcoZW1pdHRlciwKKwkJCQkJICBldmVudC0+c2VxdWVuY2Vfc3Rh cnQudGFnKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCXJldHVybiAw OworCisJY2FzZSBZQU1MX01BUFBJTkdfU1RBUlRfRVZFTlQ6CisJCWlmIChldmVudC0+bWFwcGlu Z19zdGFydC5hbmNob3IpIHsKKwkJCWVyciA9IGFuYWx5emVfYW5jaG9yKGVtaXR0ZXIsCisJCQkJ CSAgICAgZXZlbnQtPm1hcHBpbmdfc3RhcnQuYW5jaG9yLCAwKTsKKwkJCWlmIChlcnIpCisJCQkJ cmV0dXJuIGVycjsKKwkJfQorCisJCWlmIChldmVudC0+bWFwcGluZ19zdGFydC50YWcgJiYKKwkJ ICAgIChlbWl0dGVyLT5jYW5vbmljYWwgfHwgIWV2ZW50LT5tYXBwaW5nX3N0YXJ0LmltcGxpY2l0 KSkgeworCQkJZXJyID0gYW5hbHl6ZV90YWcoZW1pdHRlciwgZXZlbnQtPm1hcHBpbmdfc3RhcnQu dGFnKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCXJldHVybiAwOwor CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgYm9vbCBjaGVja19lbXB0 eV9kb2N1bWVudChjb25zdCBzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQoreworCXJldHVy biBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tfZW1wdHlfc2VxdWVuY2UoY29uc3Qgc3Ry dWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikKK3sKKwljb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAq ZXZlbnQ7CisKKwlpZiAoZW1pdHRlci0+bnVtX2V2ZW50cyA8IDIpCisJCXJldHVybiBmYWxzZTsK KworCWV2ZW50ID0gbmV4dF9ldmVudChlbWl0dGVyKTsKKwlyZXR1cm4gKGV2ZW50LT50eXBlID09 IFlBTUxfU0VRVUVOQ0VfU1RBUlRfRVZFTlQgJiYKKwkJbGlzdF9uZXh0X2VudHJ5KGV2ZW50LCBs aW5rKS0+dHlwZSA9PSBZQU1MX1NFUVVFTkNFX0VORF9FVkVOVCk7Cit9CisKK3N0YXRpYyBib29s IGNoZWNrX2VtcHR5X21hcHBpbmcoY29uc3Qgc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikK K3sKKwljb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQ7CisKKwlpZiAoZW1pdHRlci0+bnVt X2V2ZW50cyA8IDIpCisJCXJldHVybiBmYWxzZTsKKworCWV2ZW50ID0gbmV4dF9ldmVudChlbWl0 dGVyKTsKKwlyZXR1cm4gKGV2ZW50LT50eXBlID09IFlBTUxfTUFQUElOR19TVEFSVF9FVkVOVCAm JgorCQlsaXN0X25leHRfZW50cnkoZXZlbnQsIGxpbmspLT50eXBlID09IFlBTUxfTUFQUElOR19F TkRfRVZFTlQpOworfQorCitzdGF0aWMgYm9vbCBjaGVja19zaW1wbGVfa2V5KGNvbnN0IHN0cnVj dCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7CisJY29uc3Qgc3RydWN0IHlhbWxfZXZlbnQgKmV2 ZW50ID0gbmV4dF9ldmVudChlbWl0dGVyKTsKKwlzaXplX3QgbGVuZ3RoID0gMDsKKworCXN3aXRj aCAoZXZlbnQtPnR5cGUpIHsKKwljYXNlIFlBTUxfQUxJQVNfRVZFTlQ6CisJCWxlbmd0aCArPSBl bWl0dGVyLT5hbmNob3JfZGF0YS5hbmNob3JfbGVuZ3RoOworCQlicmVhazsKKworCWNhc2UgWUFN TF9TQ0FMQVJfRVZFTlQ6CisJCWlmIChlbWl0dGVyLT5zY2FsYXJfZGF0YS5tdWx0aWxpbmUpCisJ CQlyZXR1cm4gZmFsc2U7CisKKwkJbGVuZ3RoICs9CisJCQllbWl0dGVyLT5hbmNob3JfZGF0YS5h bmNob3JfbGVuZ3RoICsKKwkJCWVtaXR0ZXItPnRhZ19kYXRhLmhhbmRsZV9sZW5ndGggKworCQkJ ZW1pdHRlci0+dGFnX2RhdGEuc3VmZml4X2xlbmd0aCArCisJCQllbWl0dGVyLT5zY2FsYXJfZGF0 YS5sZW5ndGg7CisJCWJyZWFrOworCisJY2FzZSBZQU1MX1NFUVVFTkNFX1NUQVJUX0VWRU5UOgor CQlpZiAoIWNoZWNrX2VtcHR5X3NlcXVlbmNlKGVtaXR0ZXIpKQorCQkJcmV0dXJuIGZhbHNlOwor CisJCWxlbmd0aCArPQorCQkJZW1pdHRlci0+YW5jaG9yX2RhdGEuYW5jaG9yX2xlbmd0aCArCisJ CQllbWl0dGVyLT50YWdfZGF0YS5oYW5kbGVfbGVuZ3RoICsKKwkJCWVtaXR0ZXItPnRhZ19kYXRh LnN1ZmZpeF9sZW5ndGg7CisJCWJyZWFrOworCisJY2FzZSBZQU1MX01BUFBJTkdfU1RBUlRfRVZF TlQ6CisJCWlmICghY2hlY2tfZW1wdHlfbWFwcGluZyhlbWl0dGVyKSkKKwkJCXJldHVybiBmYWxz ZTsKKworCQlsZW5ndGggKz0KKwkJCWVtaXR0ZXItPmFuY2hvcl9kYXRhLmFuY2hvcl9sZW5ndGgg KworCQkJZW1pdHRlci0+dGFnX2RhdGEuaGFuZGxlX2xlbmd0aCArCisJCQllbWl0dGVyLT50YWdf ZGF0YS5zdWZmaXhfbGVuZ3RoOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxz ZTsKKwl9CisKKwlyZXR1cm4gbGVuZ3RoIDw9IDEyODsKK30KKworc3RhdGljIGludCBpbmNyZWFz ZV9pbmRlbnQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwKKwkJCSAgIGJvb2wgZmxvdywg Ym9vbCBpbmRlbnRsZXNzKQoreworCWludCBlcnI7CisKKwllcnIgPSBQVVNIKGVtaXR0ZXIsIGVt aXR0ZXItPmluZGVudHMsIGVtaXR0ZXItPmluZGVudCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCWlmIChlbWl0dGVyLT5pbmRlbnQgPCAwKQorCQllbWl0dGVyLT5pbmRlbnQgPSBmbG93 ID8gZW1pdHRlci0+YmVzdF9pbmRlbnQgOiAwOworCWVsc2UgaWYgKCFpbmRlbnRsZXNzKQorCQll bWl0dGVyLT5pbmRlbnQgKz0gZW1pdHRlci0+YmVzdF9pbmRlbnQ7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCB3cml0ZV9pbmRlbnQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikK K3sKKwlpbnQgaW5kZW50ID0gKGVtaXR0ZXItPmluZGVudCA+PSAwKSA/IGVtaXR0ZXItPmluZGVu dCA6IDA7CisJaW50IGVycjsKKworCWlmICghZW1pdHRlci0+aW5kZW50aW9uIHx8CisJICAgIGVt aXR0ZXItPmNvbHVtbiA+IGluZGVudCB8fAorCSAgICAoZW1pdHRlci0+Y29sdW1uID09IGluZGVu dCAmJiAhZW1pdHRlci0+d2hpdGVzcGFjZSkpIHsKKwkJZXJyID0gcHV0X2JyZWFrKGVtaXR0ZXIp OworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwl3aGlsZSAoZW1pdHRlci0+Y29s dW1uIDwgaW5kZW50KSB7CisJCWVyciA9IHB1dChlbWl0dGVyLCAnICcpOworCQlpZiAoZXJyKQor CQkJcmV0dXJuIGVycjsKKwl9CisKKwllbWl0dGVyLT53aGl0ZXNwYWNlID0gMTsKKwllbWl0dGVy LT5pbmRlbnRpb24gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2luZGlj YXRvcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAgY29uc3QgY2hhciAqaW5k aWNhdG9yLCBpbnQgbmVlZF93aGl0ZXNwYWNlLAorCQkJICAgaW50IGlzX3doaXRlc3BhY2UsIGlu dCBpc19pbmRlbnRpb24pCit7CisJWUFNTF9TVFJJTkcoc3RyaW5nLCBpbmRpY2F0b3IpOworCWlu dCBlcnI7CisKKwlpZiAobmVlZF93aGl0ZXNwYWNlICYmICFlbWl0dGVyLT53aGl0ZXNwYWNlKSB7 CisJCWVyciA9IHB1dChlbWl0dGVyLCAnICcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsK Kwl9CisKKwl3aGlsZSAoc3RyaW5nLnBvcyAhPSBzdHJpbmcuZW5kKSB7CisJCWVyciA9IHB1dF9j aGFyKGVtaXR0ZXIsICZzdHJpbmcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisK KwllbWl0dGVyLT53aGl0ZXNwYWNlID0gaXNfd2hpdGVzcGFjZTsKKwllbWl0dGVyLT5pbmRlbnRp b24gPSAoZW1pdHRlci0+aW5kZW50aW9uICYmIGlzX2luZGVudGlvbik7CisJZW1pdHRlci0+b3Bl bl9lbmRlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfYW5jaG9yKHN0 cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsCisJCQljb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90 IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgeWFtbF9zdHJpbmcgc3RyaW5nID0gU1RSSU5HX0lOSVQodmFs dWUsIGxlbmd0aCk7CisJaW50IGVycjsKKworCXdoaWxlIChzdHJpbmcucG9zICE9IHN0cmluZy5l bmQpIHsKKwkJZXJyID0gcHV0X2NoYXIoZW1pdHRlciwgJnN0cmluZyk7CisJCWlmIChlcnIpCisJ CQlyZXR1cm4gZXJyOworCX0KKworCWVtaXR0ZXItPndoaXRlc3BhY2UgPSAwOworCWVtaXR0ZXIt PmluZGVudGlvbiA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfdGFnX2hh bmRsZShzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAgIGNvbnN0IGNoYXIgKnZh bHVlLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCB5YW1sX3N0cmluZyBzdHJpbmcgPSBTVFJJ TkdfSU5JVCh2YWx1ZSwgbGVuZ3RoKTsKKwlpbnQgZXJyOworCisJaWYgKCFlbWl0dGVyLT53aGl0 ZXNwYWNlKSB7CisJCWVyciA9IHB1dChlbWl0dGVyLCAnICcpOworCQlpZiAoZXJyKQorCQkJcmV0 dXJuIGVycjsKKwl9CisKKwl3aGlsZSAoc3RyaW5nLnBvcyAhPSBzdHJpbmcuZW5kKSB7CisJCWVy ciA9IHB1dF9jaGFyKGVtaXR0ZXIsICZzdHJpbmcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVy cjsKKwl9CisKKwllbWl0dGVyLT53aGl0ZXNwYWNlID0gMDsKKwllbWl0dGVyLT5pbmRlbnRpb24g PSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX3RhZ19jb250ZW50KHN0cnVj dCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsCisJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlLCBzaXpl X3QgbGVuZ3RoLAorCQkJICAgICBpbnQgbmVlZF93aGl0ZXNwYWNlKQoreworCXN0cnVjdCB5YW1s X3N0cmluZyBzdHJpbmcgPSBTVFJJTkdfSU5JVCh2YWx1ZSwgbGVuZ3RoKTsKKwlpbnQgZXJyOwor CisJaWYgKG5lZWRfd2hpdGVzcGFjZSAmJiAhZW1pdHRlci0+d2hpdGVzcGFjZSkgeworCQllcnIg PSBwdXQoZW1pdHRlciwgJyAnKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJ d2hpbGUgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkgeworCQlpZiAoSVNfQUxQSEEoc3RyaW5n KSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnOycpIHx8CisJCSAgICBDSEVDSyhzdHJpbmcsICcv JykgfHwKKwkJICAgIENIRUNLKHN0cmluZywgJz8nKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAn OicpIHx8CisJCSAgICBDSEVDSyhzdHJpbmcsICdAJykgfHwKKwkJICAgIENIRUNLKHN0cmluZywg JyYnKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnPScpIHx8CisJCSAgICBDSEVDSyhzdHJpbmcs ICcrJykgfHwKKwkJICAgIENIRUNLKHN0cmluZywgJyQnKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5n LCAnLCcpIHx8CisJCSAgICBDSEVDSyhzdHJpbmcsICdfJykgfHwKKwkJICAgIENIRUNLKHN0cmlu ZywgJy4nKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnficpIHx8CisJCSAgICBDSEVDSyhzdHJp bmcsICcqJykgfHwKKwkJICAgIENIRUNLKHN0cmluZywgJ1wnJykgfHwKKwkJICAgIENIRUNLKHN0 cmluZywgJygnKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnKScpIHx8CisJCSAgICBDSEVDSyhz dHJpbmcsICdbJykgfHwKKwkJICAgIENIRUNLKHN0cmluZywgJ10nKSkgeworCQkJZXJyID0gcHV0 X2NoYXIoZW1pdHRlciwgJnN0cmluZyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJ CX0gZWxzZSB7CisJCQlpbnQgd2lkdGggPSB1dGY4X3dpZHRoKCZzdHJpbmcpOworCisJCQl3aGls ZSAod2lkdGgtLSkgeworCQkJCXVuc2lnbmVkIGludCB2YWx1ZSA9ICpzdHJpbmcucG9zKys7CisJ CQkJaW50IGM7CisKKwkJCQllcnIgPSBwdXQoZW1pdHRlciwgJyUnKTsKKwkJCQlpZiAoZXJyKQor CQkJCQlyZXR1cm4gZXJyOworCisJCQkJYyA9IHZhbHVlID4+IDQ7CisJCQkJYyArPSBjIDwgMTAg PyAnMCcgOiAnQScgLSAxMDsKKwkJCQllcnIgPSBwdXQoZW1pdHRlciwgYyk7CisJCQkJaWYgKGVy cikKKwkJCQkJcmV0dXJuIGVycjsKKworCQkJCWMgPSB2YWx1ZSAmIDB4MGY7CisJCQkJYyArPSBj IDwgMTAgPyAnMCcgOiAnQScgLSAxMDsKKwkJCQllcnIgPSBwdXQoZW1pdHRlciwgYyk7CisJCQkJ aWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCX0KKworCWVtaXR0ZXItPndo aXRlc3BhY2UgPSAwOworCWVtaXR0ZXItPmluZGVudGlvbiA9IDA7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgd3JpdGVfdGFnKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7CisJ aW50IGVycjsKKworCWlmICghZW1pdHRlci0+dGFnX2RhdGEuaGFuZGxlICYmICFlbWl0dGVyLT50 YWdfZGF0YS5zdWZmaXgpCisJCXJldHVybiAwOworCisJaWYgKGVtaXR0ZXItPnRhZ19kYXRhLmhh bmRsZSkgeworCQllcnIgPSB3cml0ZV90YWdfaGFuZGxlKGVtaXR0ZXIsCisJCQkJICAgICAgIGVt aXR0ZXItPnRhZ19kYXRhLmhhbmRsZSwKKwkJCQkgICAgICAgZW1pdHRlci0+dGFnX2RhdGEuaGFu ZGxlX2xlbmd0aCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmIChlbWl0dGVy LT50YWdfZGF0YS5zdWZmaXgpIHsKKwkJCWVyciA9IHdyaXRlX3RhZ19jb250ZW50KGVtaXR0ZXIs CisJCQkJCQllbWl0dGVyLT50YWdfZGF0YS5zdWZmaXgsCisJCQkJCQllbWl0dGVyLT50YWdfZGF0 YS5zdWZmaXhfbGVuZ3RoLAorCQkJCQkJMCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7 CisJCX0KKwl9IGVsc2UgeworCQllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRlciwgIiE8Iiwg MSwgMCwgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IHdyaXRlX3Rh Z19jb250ZW50KGVtaXR0ZXIsCisJCQkJCWVtaXR0ZXItPnRhZ19kYXRhLnN1ZmZpeCwKKwkJCQkJ ZW1pdHRlci0+dGFnX2RhdGEuc3VmZml4X2xlbmd0aCwKKwkJCQkJMCk7CisJCWlmIChlcnIpCisJ CQlyZXR1cm4gZXJyOworCisJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiPiIsIDAs IDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCB3cml0ZV9wbGFpbl9zY2FsYXIoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1p dHRlciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJICAgICAgc2l6ZV90IGxlbmd0 aCwKKwkJCSAgICAgIGludCBhbGxvd19icmVha3MpCit7CisJc3RydWN0IHlhbWxfc3RyaW5nIHN0 cmluZyA9IFNUUklOR19JTklUKHZhbHVlLCBsZW5ndGgpOworCWludCBzcGFjZXMgPSAwOworCWlu dCBicmVha3MgPSAwOworCWludCBlcnI7CisKKwlpZiAoIWVtaXR0ZXItPndoaXRlc3BhY2UpIHsK KwkJZXJyID0gcHV0KGVtaXR0ZXIsICcgJyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwor CX0KKworCXdoaWxlIChzdHJpbmcucG9zICE9IHN0cmluZy5lbmQpIHsKKwkJaWYgKElTX1NQQUNF KHN0cmluZykpIHsKKwkJCWlmIChhbGxvd19icmVha3MgJiYgIXNwYWNlcyAmJgorCQkJICAgIGVt aXR0ZXItPmNvbHVtbiA+IGVtaXR0ZXItPmJlc3Rfd2lkdGggJiYKKwkJCSAgICAhSVNfU1BBQ0Vf QVQoc3RyaW5nLCAxKSkgeworCQkJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJCQlp ZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCUFEVkFOQ0Uoc3RyaW5nKTsKKwkJCX0gZWxz ZSB7CisJCQkJZXJyID0gcHV0X2NoYXIoZW1pdHRlciwgJnN0cmluZyk7CisJCQkJaWYgKGVycikK KwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJCXNwYWNlcyA9IDE7CisJCX0gZWxzZSBpZiAoSVNf QlJFQUsoc3RyaW5nKSkgeworCQkJaWYgKCFicmVha3MgJiYgQ0hFQ0soc3RyaW5nLCAnXG4nKSkg eworCQkJCWVyciA9IHB1dF9icmVhayhlbWl0dGVyKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1 cm4gZXJyOworCQkJfQorCisJCQllcnIgPSBwdXRfY2hhcl9icmVhayhlbWl0dGVyLCAmc3RyaW5n KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJZW1pdHRlci0+aW5kZW50aW9u ID0gMTsKKwkJCWJyZWFrcyA9IDE7CisJCX0gZWxzZSB7CisJCQlpZiAoYnJlYWtzKSB7CisJCQkJ ZXJyID0gd3JpdGVfaW5kZW50KGVtaXR0ZXIpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBl cnI7CisJCQl9CisKKwkJCWVyciA9IHB1dF9jaGFyKGVtaXR0ZXIsICZzdHJpbmcpOworCQkJaWYg KGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQllbWl0dGVyLT5pbmRlbnRpb24gPSAwOworCQkJ c3BhY2VzID0gMDsKKwkJCWJyZWFrcyA9IDA7CisJCX0KKwl9CisKKwllbWl0dGVyLT53aGl0ZXNw YWNlID0gMDsKKwllbWl0dGVyLT5pbmRlbnRpb24gPSAwOworCWlmIChlbWl0dGVyLT5yb290X2Nv bnRleHQpCisJCWVtaXR0ZXItPm9wZW5fZW5kZWQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50Cit3cml0ZV9zaW5nbGVfcXVvdGVkX3NjYWxhcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICpl bWl0dGVyLAorCQkJICAgY29uc3QgY2hhciAqdmFsdWUsCisJCQkgICBzaXplX3QgbGVuZ3RoLAor CQkJICAgaW50IGFsbG93X2JyZWFrcykKK3sKKwlzdHJ1Y3QgeWFtbF9zdHJpbmcgc3RyaW5nID0g U1RSSU5HX0lOSVQodmFsdWUsIGxlbmd0aCk7CisJaW50IHNwYWNlcyA9IDA7CisJaW50IGJyZWFr cyA9IDA7CisJaW50IGVycjsKKworCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiJyIs IDEsIDAsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl3aGlsZSAoc3RyaW5nLnBv cyAhPSBzdHJpbmcuZW5kKSB7CisJCWlmIChJU19TUEFDRShzdHJpbmcpKSB7CisJCQlpZiAoYWxs b3dfYnJlYWtzICYmICFzcGFjZXMgJiYKKwkJCSAgICBlbWl0dGVyLT5jb2x1bW4gPiBlbWl0dGVy LT5iZXN0X3dpZHRoICYmCisJCQkgICAgc3RyaW5nLnBvcyAhPSBzdHJpbmcuc3RhcnQgJiYKKwkJ CSAgICBzdHJpbmcucG9zICE9IHN0cmluZy5lbmQgLSAxICYmCisJCQkgICAgIUlTX1NQQUNFX0FU KHN0cmluZywgMSkpIHsKKwkJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQkJaWYg KGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlBRFZBTkNFKHN0cmluZyk7CisJCQl9IGVsc2Ug eworCQkJCWVyciA9IHB1dF9jaGFyKGVtaXR0ZXIsICZzdHJpbmcpOworCQkJCWlmIChlcnIpCisJ CQkJCXJldHVybiBlcnI7CisJCQl9CisJCQlzcGFjZXMgPSAxOworCQl9IGVsc2UgaWYgKElTX0JS RUFLKHN0cmluZykpIHsKKwkJCWlmICghYnJlYWtzICYmIENIRUNLKHN0cmluZywgJ1xuJykpIHsK KwkJCQllcnIgPSBwdXRfYnJlYWsoZW1pdHRlcik7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJu IGVycjsKKwkJCX0KKworCQkJZXJyID0gcHV0X2NoYXJfYnJlYWsoZW1pdHRlciwgJnN0cmluZyk7 CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisKKwkJCWVtaXR0ZXItPmluZGVudGlvbiA9 IDE7CisJCQlicmVha3MgPSAxOworCQl9IGVsc2UgeworCQkJaWYgKGJyZWFrcykgeworCQkJCWVy ciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJy OworCQkJfQorCisJCQlpZiAoQ0hFQ0soc3RyaW5nLCAnXCcnKSkgeworCQkJCWVyciA9IHB1dChl bWl0dGVyLCAnXCcnKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCisJ CQllcnIgPSBwdXRfY2hhcihlbWl0dGVyLCAmc3RyaW5nKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0 dXJuIGVycjsKKworCQkJZW1pdHRlci0+aW5kZW50aW9uID0gMDsKKwkJCXNwYWNlcyA9IDA7CisJ CQlicmVha3MgPSAwOworCQl9CisJfQorCisJaWYgKGJyZWFrcykgeworCQllcnIgPSB3cml0ZV9p bmRlbnQoZW1pdHRlcik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9 IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiJyIsIDAsIDAsIDApOworCWlmIChlcnIpCisJCXJl dHVybiBlcnI7CisKKwllbWl0dGVyLT53aGl0ZXNwYWNlID0gMDsKKwllbWl0dGVyLT5pbmRlbnRp b24gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZV9kb3VibGVfcXVvdGVk X3NjYWxhcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAgY29uc3QgY2hhciAq dmFsdWUsIHNpemVfdCBsZW5ndGgsIGludCBhbGxvd19icmVha3MpCit7CisJc3RydWN0IHlhbWxf c3RyaW5nIHN0cmluZyA9IFNUUklOR19JTklUKHZhbHVlLCBsZW5ndGgpOworCWludCBzcGFjZXMg PSAwOworCWludCBlcnI7CisKKwllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRlciwgIlwiIiwg MSwgMCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXdoaWxlIChzdHJpbmcucG9z ICE9IHN0cmluZy5lbmQpIHsKKwkJaWYgKCFJU19QUklOVEFCTEUoc3RyaW5nKSB8fAorCQkgICAg KCFlbWl0dGVyLT51bmljb2RlICYmICFJU19BU0NJSShzdHJpbmcpKSB8fAorCQkgICAgSVNfQk9N KHN0cmluZykgfHwKKwkJICAgIElTX0JSRUFLKHN0cmluZykgfHwKKwkJICAgIENIRUNLKHN0cmlu ZywgJyInKSB8fAorCQkgICAgQ0hFQ0soc3RyaW5nLCAnXFwnKSkgeworCQkJdTggb2N0ZXQgPSBz dHJpbmcucG9zWzBdOworCQkJdW5zaWduZWQgaW50IHdpZHRoOworCQkJdW5zaWduZWQgaW50IHZh bHVlOworCQkJaW50IGs7CisKKwkJCXdpZHRoID0gKG9jdGV0ICYgMHg4MCkgPT0gMHgwMCA/IDEg OgorCQkJCShvY3RldCAmIDB4RTApID09IDB4QzAgPyAyIDoKKwkJCQkob2N0ZXQgJiAweEYwKSA9 PSAweEUwID8gMyA6CisJCQkJKG9jdGV0ICYgMHhGOCkgPT0gMHhGMCA/IDQgOiAwOworCQkJdmFs dWUgPSAob2N0ZXQgJiAweDgwKSA9PSAweDAwID8gb2N0ZXQgJiAweDdGIDoKKwkJCQkob2N0ZXQg JiAweEUwKSA9PSAweEMwID8gb2N0ZXQgJiAweDFGIDoKKwkJCQkob2N0ZXQgJiAweEYwKSA9PSAw eEUwID8gb2N0ZXQgJiAweDBGIDoKKwkJCQkob2N0ZXQgJiAweEY4KSA9PSAweEYwID8gb2N0ZXQg JiAweDA3IDogMDsKKwkJCWZvciAoayA9IDE7IGsgPCAoaW50KXdpZHRoOyBrKyspIHsKKwkJCQlv Y3RldCA9IHN0cmluZy5wb3Nba107CisJCQkJdmFsdWUgPSAodmFsdWUgPDwgNikgKyAob2N0ZXQg JiAweDNGKTsKKwkJCX0KKwkJCXN0cmluZy5wb3MgKz0gd2lkdGg7CisKKwkJCWVyciA9IHB1dChl bWl0dGVyLCAnXFwnKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJc3dpdGNo ICh2YWx1ZSkgeworCQkJY2FzZSAweDAwOgorCQkJCWVyciA9IHB1dChlbWl0dGVyLCAnMCcpOwor CQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMHgw NzoKKwkJCQllcnIgPSBwdXQoZW1pdHRlciwgJ2EnKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1 cm4gZXJyOworCQkJCWJyZWFrOworCisJCQljYXNlIDB4MDg6CisJCQkJZXJyID0gcHV0KGVtaXR0 ZXIsICdiJyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKwor CQkJY2FzZSAweDA5OgorCQkJCWVyciA9IHB1dChlbWl0dGVyLCAndCcpOworCQkJCWlmIChlcnIp CisJCQkJCXJldHVybiBlcnI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMHgwQToKKwkJCQllcnIg PSBwdXQoZW1pdHRlciwgJ24nKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJ CWJyZWFrOworCisJCQljYXNlIDB4MEI6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIsICd2Jyk7CisJ CQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKworCQkJY2FzZSAweDBD OgorCQkJCWVyciA9IHB1dChlbWl0dGVyLCAnZicpOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVy biBlcnI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMHgwRDoKKwkJCQllcnIgPSBwdXQoZW1pdHRl ciwgJ3InKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWJyZWFrOworCisJ CQljYXNlIDB4MUI6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIsICdlJyk7CisJCQkJaWYgKGVycikK KwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKworCQkJY2FzZSAweDIyOgorCQkJCWVyciA9 IHB1dChlbWl0dGVyLCAnXCInKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJ CWJyZWFrOworCisJCQljYXNlIDB4NUM6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIsICdcXCcpOwor CQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMHg4 NToKKwkJCQllcnIgPSBwdXQoZW1pdHRlciwgJ04nKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1 cm4gZXJyOworCQkJCWJyZWFrOworCisJCQljYXNlIDB4QTA6CisJCQkJZXJyID0gcHV0KGVtaXR0 ZXIsICdfJyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKwor CQkJY2FzZSAweDIwMjg6CisJCQkJZXJyID0gcHV0KGVtaXR0ZXIsICdMJyk7CisJCQkJaWYgKGVy cikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlicmVhazsKKworCQkJY2FzZSAweDIwMjk6CisJCQkJ ZXJyID0gcHV0KGVtaXR0ZXIsICdQJyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsK KwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlpZiAodmFsdWUgPD0gMHhGRikgeworCQkJ CQllcnIgPSBwdXQoZW1pdHRlciwgJ3gnKTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBl cnI7CisJCQkJCXdpZHRoID0gMjsKKwkJCQl9IGVsc2UgaWYgKHZhbHVlIDw9IDB4RkZGRikgewor CQkJCQllcnIgPSBwdXQoZW1pdHRlciwgJ3UnKTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVy biBlcnI7CisJCQkJCXdpZHRoID0gNDsKKwkJCQl9IGVsc2UgeworCQkJCQllcnIgPSBwdXQoZW1p dHRlciwgJ1UnKTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7CisJCQkJCXdpZHRo ID0gODsKKwkJCQl9CisKKwkJCQlmb3IgKGsgPSAod2lkdGggLSAxKSAqIDQ7IGsgPj0gMDsgayAt PSA0KSB7CisJCQkJCWludCBkaWdpdDsKKworCQkJCQlkaWdpdCA9ICh2YWx1ZSA+PiBrKSAmIDB4 MEY7CisJCQkJCWRpZ2l0ICs9IGRpZ2l0IDwgMTAgPyAnMCcgOiAnQScgLSAxMDsKKwkJCQkJZXJy ID0gcHV0KGVtaXR0ZXIsIGRpZ2l0KTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7 CisJCQkJfQorCQkJfQorCQkJc3BhY2VzID0gMDsKKwkJfSBlbHNlIGlmIChJU19TUEFDRShzdHJp bmcpKSB7CisJCQlpZiAoYWxsb3dfYnJlYWtzICYmCisJCQkgICAgIXNwYWNlcyAmJgorCQkJICAg IGVtaXR0ZXItPmNvbHVtbiA+IGVtaXR0ZXItPmJlc3Rfd2lkdGggJiYKKwkJCSAgICBzdHJpbmcu cG9zICE9IHN0cmluZy5zdGFydCAmJgorCQkJICAgIHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCAt IDEpIHsKKwkJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQkJaWYgKGVycikKKwkJ CQkJcmV0dXJuIGVycjsKKworCQkJCWlmIChJU19TUEFDRV9BVChzdHJpbmcsIDEpKSB7CisJCQkJ CWVyciA9IHB1dChlbWl0dGVyLCAnXFwnKTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBl cnI7CisJCQkJfQorCQkJCUFEVkFOQ0Uoc3RyaW5nKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyID0g cHV0X2NoYXIoZW1pdHRlciwgJnN0cmluZyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVy cjsKKwkJCX0KKwkJCXNwYWNlcyA9IDE7CisJCX0gZWxzZSB7CisJCQllcnIgPSBwdXRfY2hhcihl bWl0dGVyLCAmc3RyaW5nKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCXNwYWNl cyA9IDA7CisJCX0KKwl9CisKKwllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRlciwgIlwiIiwg MCwgMCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVtaXR0ZXItPndoaXRlc3Bh Y2UgPSAwOworCWVtaXR0ZXItPmluZGVudGlvbiA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQKK3dyaXRlX2Jsb2NrX3NjYWxhcl9oaW50cyhzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0 dGVyLAorCQkJIHN0cnVjdCB5YW1sX3N0cmluZyBzdHJpbmcpCit7CisJY2hhciBpbmRlbnRfaGlu dFsyXTsKKwljb25zdCBjaGFyICpjaG9tcF9oaW50ID0gTlVMTDsKKwlpbnQgZXJyOworCisJaWYg KElTX1NQQUNFKHN0cmluZykgfHwgSVNfQlJFQUsoc3RyaW5nKSkgeworCQlpbmRlbnRfaGludFsw XSA9ICcwJyArIChjaGFyKWVtaXR0ZXItPmJlc3RfaW5kZW50OworCQlpbmRlbnRfaGludFsxXSA9 ICdcMCc7CisJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCBpbmRlbnRfaGludCwgMCwg MCwgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVtaXR0ZXItPm9wZW5f ZW5kZWQgPSAwOworCisJc3RyaW5nLnBvcyA9IHN0cmluZy5lbmQ7CisJaWYgKHN0cmluZy5zdGFy dCA9PSBzdHJpbmcucG9zKSB7CisJCWNob21wX2hpbnQgPSAiLSI7CisJfSBlbHNlIHsKKwkJZG8g eworCQkJc3RyaW5nLnBvcy0tOworCQl9IHdoaWxlICgoKnN0cmluZy5wb3MgJiAweEMwKSA9PSAw eDgwKTsKKworCQlpZiAoIUlTX0JSRUFLKHN0cmluZykpIHsKKwkJCWNob21wX2hpbnQgPSAiLSI7 CisJCX0gZWxzZSBpZiAoc3RyaW5nLnN0YXJ0ID09IHN0cmluZy5wb3MpIHsKKwkJCWNob21wX2hp bnQgPSAiKyI7CisJCQllbWl0dGVyLT5vcGVuX2VuZGVkID0gMTsKKwkJfSBlbHNlIHsKKwkJCWRv IHsKKwkJCQlzdHJpbmcucG9zLS07CisJCQl9IHdoaWxlICgoKnN0cmluZy5wb3MgJiAweEMwKSA9 PSAweDgwKTsKKworCQkJaWYgKElTX0JSRUFLKHN0cmluZykpIHsKKwkJCQljaG9tcF9oaW50ID0g IisiOworCQkJCWVtaXR0ZXItPm9wZW5fZW5kZWQgPSAxOworCQkJfQorCQl9CisJfQorCisJaWYg KGNob21wX2hpbnQpIHsKKwkJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsIGNob21wX2hp bnQsIDAsIDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludAord3JpdGVfbGl0ZXJhbF9zY2FsYXIoc3RydWN0IHlhbWxfZW1p dHRlciAqZW1pdHRlciwKKwkJICAgICBjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IGxlbmd0aCkK K3sKKwlzdHJ1Y3QgeWFtbF9zdHJpbmcgc3RyaW5nID0gU1RSSU5HX0lOSVQodmFsdWUsIGxlbmd0 aCk7CisJaW50IGJyZWFrcyA9IDE7CisJaW50IGVycjsKKworCWVyciA9IHdyaXRlX2luZGljYXRv cihlbWl0dGVyLCAifCIsIDEsIDAsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwll cnIgPSB3cml0ZV9ibG9ja19zY2FsYXJfaGludHMoZW1pdHRlciwgc3RyaW5nKTsKKwlpZiAoZXJy KQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcHV0X2JyZWFrKGVtaXR0ZXIpOworCWlmIChlcnIp CisJCXJldHVybiBlcnI7CisKKwllbWl0dGVyLT5pbmRlbnRpb24gPSAxOworCWVtaXR0ZXItPndo aXRlc3BhY2UgPSAxOworCisJd2hpbGUgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkgeworCQlp ZiAoSVNfQlJFQUsoc3RyaW5nKSkgeworCQkJZXJyID0gcHV0X2NoYXJfYnJlYWsoZW1pdHRlciwg JnN0cmluZyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisKKwkJCWVtaXR0ZXItPmlu ZGVudGlvbiA9IDE7CisJCQlicmVha3MgPSAxOworCQl9IGVsc2UgeworCQkJaWYgKGJyZWFrcykg eworCQkJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJCQlpZiAoZXJyKQorCQkJCQly ZXR1cm4gZXJyOworCQkJfQorCisJCQllcnIgPSBwdXRfY2hhcihlbWl0dGVyLCAmc3RyaW5nKTsK KwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJZW1pdHRlci0+aW5kZW50aW9uID0g MDsKKwkJCWJyZWFrcyA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAord3JpdGVfZm9sZGVkX3NjYWxhcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkg ICAgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IHlhbWxfc3Ry aW5nIHN0cmluZyA9IFNUUklOR19JTklUKHZhbHVlLCBsZW5ndGgpOworCWludCBicmVha3MgPSAx OworCWludCBsZWFkaW5nX3NwYWNlcyA9IDE7CisJaW50IGVycjsKKworCWVyciA9IHdyaXRlX2lu ZGljYXRvcihlbWl0dGVyLCAiPiIsIDEsIDAsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7 CisKKwllcnIgPSB3cml0ZV9ibG9ja19zY2FsYXJfaGludHMoZW1pdHRlciwgc3RyaW5nKTsKKwlp ZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcHV0X2JyZWFrKGVtaXR0ZXIpOworCWlm IChlcnIpCisJCXJldHVybiBlcnI7CisKKwllbWl0dGVyLT5pbmRlbnRpb24gPSAxOworCWVtaXR0 ZXItPndoaXRlc3BhY2UgPSAxOworCisJd2hpbGUgKHN0cmluZy5wb3MgIT0gc3RyaW5nLmVuZCkg eworCQlpZiAoSVNfQlJFQUsoc3RyaW5nKSkgeworCQkJaWYgKCFicmVha3MgJiYgIWxlYWRpbmdf c3BhY2VzICYmIENIRUNLKHN0cmluZywgJ1xuJykpIHsKKwkJCQlpbnQgazsKKworCQkJCWsgPSAw OworCQkJCXdoaWxlIChJU19CUkVBS19BVChzdHJpbmcsIGspKQorCQkJCQlrICs9IF9fdXRmOF93 aWR0aCgmc3RyaW5nLCBrKTsKKworCQkJCWlmICghSVNfQkxBTktaX0FUKHN0cmluZywgaykpIHsK KwkJCQkJZXJyID0gcHV0X2JyZWFrKGVtaXR0ZXIpOworCQkJCQlpZiAoZXJyKQorCQkJCQkJcmV0 dXJuIGVycjsKKwkJCQl9CisJCQl9CisKKwkJCWVyciA9IHB1dF9jaGFyX2JyZWFrKGVtaXR0ZXIs ICZzdHJpbmcpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQllbWl0dGVyLT5p bmRlbnRpb24gPSAxOworCQkJYnJlYWtzID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlmIChicmVha3Mp IHsKKwkJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQkJaWYgKGVycikKKwkJCQkJ cmV0dXJuIGVycjsKKworCQkJCWxlYWRpbmdfc3BhY2VzID0gSVNfQkxBTksoc3RyaW5nKTsKKwkJ CX0KKworCQkJaWYgKCFicmVha3MgJiYKKwkJCSAgICBJU19TUEFDRShzdHJpbmcpICYmCisJCQkg ICAgIUlTX1NQQUNFX0FUKHN0cmluZywgMSkgJiYKKwkJCSAgICBlbWl0dGVyLT5jb2x1bW4gPiBl bWl0dGVyLT5iZXN0X3dpZHRoKSB7CisJCQkJZXJyID0gd3JpdGVfaW5kZW50KGVtaXR0ZXIpOwor CQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisKKwkJCQlBRFZBTkNFKHN0cmluZyk7CisJ CQl9IGVsc2UgeworCQkJCWVyciA9IHB1dF9jaGFyKGVtaXR0ZXIsICZzdHJpbmcpOworCQkJCWlm IChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQllbWl0dGVyLT5pbmRlbnRpb24gPSAw OworCQkJYnJlYWtzID0gMDsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBp bnQKK3dyaXRlX3NjYWxhcihzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyKQoreworCXN3aXRj aCAoZW1pdHRlci0+c2NhbGFyX2RhdGEuc3R5bGUpIHsKKwljYXNlIFlBTUxfUExBSU5fU0NBTEFS X1NUWUxFOgorCQlyZXR1cm4gd3JpdGVfcGxhaW5fc2NhbGFyKGVtaXR0ZXIsCisJCQkJCSAgZW1p dHRlci0+c2NhbGFyX2RhdGEudmFsdWUsCisJCQkJCSAgZW1pdHRlci0+c2NhbGFyX2RhdGEubGVu Z3RoLAorCQkJCQkgICFlbWl0dGVyLT5zaW1wbGVfa2V5X2NvbnRleHQpOworCisJY2FzZSBZQU1M X1NJTkdMRV9RVU9URURfU0NBTEFSX1NUWUxFOgorCQlyZXR1cm4gd3JpdGVfc2luZ2xlX3F1b3Rl ZF9zY2FsYXIoZW1pdHRlciwKKwkJCQkJCSAgZW1pdHRlci0+c2NhbGFyX2RhdGEudmFsdWUsCisJ CQkJCQkgIGVtaXR0ZXItPnNjYWxhcl9kYXRhLmxlbmd0aCwKKwkJCQkJCSAgIWVtaXR0ZXItPnNp bXBsZV9rZXlfY29udGV4dCk7CisKKwljYXNlIFlBTUxfRE9VQkxFX1FVT1RFRF9TQ0FMQVJfU1RZ TEU6CisJCXJldHVybiB3cml0ZV9kb3VibGVfcXVvdGVkX3NjYWxhcihlbWl0dGVyLAorCQkJCQkJ ICBlbWl0dGVyLT5zY2FsYXJfZGF0YS52YWx1ZSwKKwkJCQkJCSAgZW1pdHRlci0+c2NhbGFyX2Rh dGEubGVuZ3RoLAorCQkJCQkJICAhZW1pdHRlci0+c2ltcGxlX2tleV9jb250ZXh0KTsKKworCWNh c2UgWUFNTF9MSVRFUkFMX1NDQUxBUl9TVFlMRToKKwkJcmV0dXJuIHdyaXRlX2xpdGVyYWxfc2Nh bGFyKGVtaXR0ZXIsCisJCQkJCSAgICBlbWl0dGVyLT5zY2FsYXJfZGF0YS52YWx1ZSwKKwkJCQkJ ICAgIGVtaXR0ZXItPnNjYWxhcl9kYXRhLmxlbmd0aCk7CisKKwljYXNlIFlBTUxfRk9MREVEX1ND QUxBUl9TVFlMRToKKwkJcmV0dXJuIHdyaXRlX2ZvbGRlZF9zY2FsYXIoZW1pdHRlciwKKwkJCQkJ ICAgZW1pdHRlci0+c2NhbGFyX2RhdGEudmFsdWUsCisJCQkJCSAgIGVtaXR0ZXItPnNjYWxhcl9k YXRhLmxlbmd0aCk7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQor CitzdGF0aWMgaW50IGVtaXRfYW5jaG9yKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7 CisJaW50IGVycjsKKworCWlmICghZW1pdHRlci0+YW5jaG9yX2RhdGEuYW5jaG9yKQorCQlyZXR1 cm4gMDsKKworCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLAorCQkJICAgICAgZW1pdHRl ci0+YW5jaG9yX2RhdGEuYWxpYXMgPyAiKiIgOiAiJiIsCisJCQkgICAgICAxLCAwLCAwKTsKKwlp ZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHdyaXRlX2FuY2hvcihlbWl0dGVyLAor CQkJICAgIGVtaXR0ZXItPmFuY2hvcl9kYXRhLmFuY2hvciwKKwkJCSAgICBlbWl0dGVyLT5hbmNo b3JfZGF0YS5hbmNob3JfbGVuZ3RoKTsKK30KKworc3RhdGljIGludCBlbWl0X3N0cmVhbV9zdGFy dChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgeWFt bF9ldmVudCAqZXZlbnQpCit7CisJaWYgKGV2ZW50LT50eXBlID09IFlBTUxfU1RSRUFNX1NUQVJU X0VWRU5UKSB7CisJCWlmIChlbWl0dGVyLT5iZXN0X2luZGVudCA8IDIgfHwgZW1pdHRlci0+YmVz dF9pbmRlbnQgPiA5KQorCQkJZW1pdHRlci0+YmVzdF9pbmRlbnQgID0gMjsKKworCQlpZiAoZW1p dHRlci0+YmVzdF93aWR0aCA+PSAwICYmCisJCSAgICBlbWl0dGVyLT5iZXN0X3dpZHRoIDw9IGVt aXR0ZXItPmJlc3RfaW5kZW50ICogMikKKwkJCWVtaXR0ZXItPmJlc3Rfd2lkdGggPSA4MDsKKwor CQlpZiAoZW1pdHRlci0+YmVzdF93aWR0aCA8IDApCisJCQllbWl0dGVyLT5iZXN0X3dpZHRoID0g SU5UX01BWDsKKworCQllbWl0dGVyLT5pbmRlbnQgPSAtMTsKKworCQllbWl0dGVyLT5jb2x1bW4g PSAwOworCQllbWl0dGVyLT53aGl0ZXNwYWNlID0gMTsKKwkJZW1pdHRlci0+aW5kZW50aW9uID0g MTsKKworCQllbWl0dGVyLT5zdGF0ZSA9IEVNSVRfRklSU1RfRE9DVU1FTlRfU1RBUlRfU1RBVEU7 CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBzZXRfZXJyb3IoZW1pdHRlciwgImV4cGVjdGVk IFNUUkVBTS1TVEFSVCIpOworfQorCitzdGF0aWMgaW50CithcHBlbmRfdGFnX2RpcmVjdGl2ZShz dHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkgICAgIHN0cnVjdCB5YW1sX3RhZ19kaXJl Y3RpdmUgdmFsdWUsCisJCSAgICAgaW50IGFsbG93X2R1cGxpY2F0ZXMpCit7CisJc3RydWN0IHlh bWxfdGFnX2RpcmVjdGl2ZSAqdGFnOworCXN0cnVjdCB5YW1sX3RhZ19kaXJlY3RpdmUgY29weSA9 IHt9OworCWludCBlcnI7CisKKwlmb3IgKHRhZyA9IGVtaXR0ZXItPnRhZ3Muc3RhcnQ7IHRhZyAh PSBlbWl0dGVyLT50YWdzLnRvcDsgdGFnKyspIHsKKwkJaWYgKHN0cmNtcCh2YWx1ZS5oYW5kbGUs IHRhZy0+aGFuZGxlKSA9PSAwKSB7CisJCQlpZiAoYWxsb3dfZHVwbGljYXRlcykKKwkJCQlyZXR1 cm4gMDsKKworCQkJcmV0dXJuIHNldF9lcnJvcihlbWl0dGVyLCAiZHVwbGljYXRlICVUQUcgZGly ZWN0aXZlIik7CisJCX0KKwl9CisKKwljb3B5LmhhbmRsZSA9IGtzdHJkdXAodmFsdWUuaGFuZGxl LCBHRlBfS0VSTkVMKTsKKwljb3B5LnByZWZpeCA9IGtzdHJkdXAodmFsdWUucHJlZml4LCBHRlBf S0VSTkVMKTsKKwlpZiAoIWNvcHkuaGFuZGxlIHx8ICFjb3B5LnByZWZpeCkgeworCQllbWl0dGVy LT5lcnJubyA9IC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQor CisJZXJyID0gUFVTSChlbWl0dGVyLCBlbWl0dGVyLT50YWdzLCBjb3B5KTsKKwlpZiAoZXJyKQor CQlnb3RvIGVycm9yOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWtmcmVlKGNvcHkuaGFuZGxl KTsKKwlrZnJlZShjb3B5LnByZWZpeCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAor ZW1pdF9kb2N1bWVudF9zdGFydChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkgICAg Y29uc3Qgc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50LAorCQkgICAgaW50IGZpcnN0KQoreworCWlu dCBlcnI7CisKKwlpZiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVCkg eworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlIGRlZmF1bHRfdGFnX2RpcmVjdGl2ZXNbXSA9 IHsKKwkJCXsgIiEiLCAiISIgfSwKKwkJCXsgIiEhIiwgInRhZzp5YW1sLm9yZywyMDAyOiIgfSwK KwkJCXsgTlVMTCwgTlVMTCB9CisJCX07CisJCXN0cnVjdCB5YW1sX3RhZ19kaXJlY3RpdmUgKnRh ZzsKKwkJaW50IGltcGxpY2l0OworCisJCWlmIChldmVudC0+ZG9jdW1lbnRfc3RhcnQudmVyc2lv bikgeworCQkJZXJyID0gYW5hbHl6ZV92ZXJzaW9uX2RpcmVjdGl2ZShlbWl0dGVyLAorCQkJCQkJ CSpldmVudC0+ZG9jdW1lbnRfc3RhcnQudmVyc2lvbik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVy biBlcnI7CisJCX0KKworCQlmb3IgKHRhZyA9IGV2ZW50LT5kb2N1bWVudF9zdGFydC50YWdzLnN0 YXJ0OworCQkgICAgIHRhZyAhPSBldmVudC0+ZG9jdW1lbnRfc3RhcnQudGFncy5lbmQ7CisJCSAg ICAgdGFnKyspIHsKKwkJCWVyciA9IGFuYWx5emVfdGFnX2RpcmVjdGl2ZShlbWl0dGVyLCAqdGFn KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJZXJyID0gYXBwZW5kX3RhZ19k aXJlY3RpdmUoZW1pdHRlciwgKnRhZywgMCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7 CisJCX0KKworCQlmb3IgKHRhZyA9IGRlZmF1bHRfdGFnX2RpcmVjdGl2ZXM7CisJCSAgICAgdGFn LT5oYW5kbGU7IHRhZysrKSB7CisJCQllcnIgPSBhcHBlbmRfdGFnX2RpcmVjdGl2ZShlbWl0dGVy LCAqdGFnLCAxKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWltcGxp Y2l0ID0gZXZlbnQtPmRvY3VtZW50X3N0YXJ0LmltcGxpY2l0OworCQlpZiAoIWZpcnN0IHx8IGVt aXR0ZXItPmNhbm9uaWNhbCkKKwkJCWltcGxpY2l0ID0gMDsKKworCQlpZiAoKGV2ZW50LT5kb2N1 bWVudF9zdGFydC52ZXJzaW9uIHx8CisJCSAgICAgZXZlbnQtPmRvY3VtZW50X3N0YXJ0LnRhZ3Mu c3RhcnQKKwkJICAgICAhPSBldmVudC0+ZG9jdW1lbnRfc3RhcnQudGFncy5lbmQpICYmCisJCSAg ICBlbWl0dGVyLT5vcGVuX2VuZGVkKSB7CisJCQllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRl ciwgIi4uLiIsIDEsIDAsIDApOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQll cnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7 CisJCX0KKworCQlpZiAoZXZlbnQtPmRvY3VtZW50X3N0YXJ0LnZlcnNpb24pIHsKKwkJCWltcGxp Y2l0ID0gMDsKKwkJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiJVlBTUwiLCAxLCAw LCAwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJZXJyID0gd3JpdGVfaW5k aWNhdG9yKGVtaXR0ZXIsICIxLjEiLCAxLCAwLCAwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJu IGVycjsKKworCQkJZXJyID0gd3JpdGVfaW5kZW50KGVtaXR0ZXIpOworCQkJaWYgKGVycikKKwkJ CQlyZXR1cm4gZXJyOworCQl9CisKKwkJaWYgKGV2ZW50LT5kb2N1bWVudF9zdGFydC50YWdzLnN0 YXJ0ICE9CisJCSAgICBldmVudC0+ZG9jdW1lbnRfc3RhcnQudGFncy5lbmQpIHsKKwkJCWltcGxp Y2l0ID0gMDsKKwkJCWZvciAodGFnID0gZXZlbnQtPmRvY3VtZW50X3N0YXJ0LnRhZ3Muc3RhcnQ7 CisJCQkgICAgIHRhZyAhPSBldmVudC0+ZG9jdW1lbnRfc3RhcnQudGFncy5lbmQ7CisJCQkgICAg IHRhZysrKSB7CisJCQkJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICIlVEFHIiwgMSwg MCwgMCk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKworCQkJCWVyciA9IHdyaXRl X3RhZ19oYW5kbGUoZW1pdHRlciwKKwkJCQkJCSAgICAgICB0YWctPmhhbmRsZSwKKwkJCQkJCSAg ICAgICBzdHJsZW4odGFnLT5oYW5kbGUpKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJy OworCisJCQkJZXJyID0gd3JpdGVfdGFnX2NvbnRlbnQoZW1pdHRlciwKKwkJCQkJCQl0YWctPnBy ZWZpeCwKKwkJCQkJCQlzdHJsZW4odGFnLT5wcmVmaXgpLAorCQkJCQkJCTEpOworCQkJCWlmIChl cnIpCisJCQkJCXJldHVybiBlcnI7CisKKwkJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7 CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCisJCWlmIChjaGVj a19lbXB0eV9kb2N1bWVudChlbWl0dGVyKSkKKwkJCWltcGxpY2l0ID0gMDsKKworCQlpZiAoIWlt cGxpY2l0KSB7CisJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQlpZiAoZXJyKQor CQkJCXJldHVybiBlcnI7CisKKwkJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiLS0t IiwgMSwgMCwgMCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisKKwkJCWlmIChlbWl0 dGVyLT5jYW5vbmljYWwpIHsKKwkJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQkJ aWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCisJCWVtaXR0ZXItPnN0YXRl ID0gRU1JVF9ET0NVTUVOVF9DT05URU5UX1NUQVRFOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAo ZXZlbnQtPnR5cGUgPT0gWUFNTF9TVFJFQU1fRU5EX0VWRU5UKSB7CisJCWVyciA9IGZsdXNoKGVt aXR0ZXIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllbWl0dGVyLT5zdGF0ZSA9 IEVNSVRfRU5EX1NUQVRFOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gc2V0X2Vycm9yKGVt aXR0ZXIsICJleHBlY3RlZCBET0NVTUVOVC1TVEFSVCBvciBTVFJFQU0tRU5EIik7Cit9CisKK3N0 YXRpYyBpbnQKK2VtaXRfZG9jdW1lbnRfZW5kKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIs IGNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGV2 ZW50LT50eXBlID09IFlBTUxfRE9DVU1FTlRfRU5EX0VWRU5UKSB7CisJCWVyciA9IHdyaXRlX2lu ZGVudChlbWl0dGVyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKCFldmVu dC0+ZG9jdW1lbnRfZW5kLmltcGxpY2l0KSB7CisJCQllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1p dHRlciwgIi4uLiIsIDEsIDAsIDApOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJ CQllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBl cnI7CisJCX0KKworCQllcnIgPSBmbHVzaChlbWl0dGVyKTsKKwkJaWYgKGVycikKKwkJCXJldHVy biBlcnI7CisKKwkJZW1pdHRlci0+c3RhdGUgPSBFTUlUX0RPQ1VNRU5UX1NUQVJUX1NUQVRFOwor CisJCXdoaWxlICghRU1QVFkoZW1pdHRlciwgZW1pdHRlci0+dGFncykpIHsKKwkJCXN0cnVjdCB5 YW1sX3RhZ19kaXJlY3RpdmUgdGFnID0KKwkJCQlQT1AoZW1pdHRlciwgZW1pdHRlci0+dGFncyk7 CisKKwkJCWtmcmVlKHRhZy5oYW5kbGUpOworCQkJa2ZyZWUodGFnLnByZWZpeCk7CisJCX0KKwor CQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gc2V0X2Vycm9yKGVtaXR0ZXIsICJleHBlY3RlZCBE T0NVTUVOVC1FTkQiKTsKK30KKworc3RhdGljIGludAorZW1pdF9hbGlhcyhzdHJ1Y3QgeWFtbF9l bWl0dGVyICplbWl0dGVyLCBjb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJaW50 IGVycjsKKworCWVyciA9IGVtaXRfYW5jaG9yKGVtaXR0ZXIpOworCWlmIChlcnIpCisJCXJldHVy biBlcnI7CisKKwllbWl0dGVyLT5zdGF0ZSA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMp OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZWxlY3Rfc2NhbGFyX3N0eWxlKHN0cnVj dCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVudCkK K3sKKwllbnVtIHlhbWxfc2NhbGFyX3N0eWxlIHN0eWxlID0gZXZlbnQtPnNjYWxhci5zdHlsZTsK Kwlib29sIG5vX3RhZyA9ICFlbWl0dGVyLT50YWdfZGF0YS5oYW5kbGUgJiYgIWVtaXR0ZXItPnRh Z19kYXRhLnN1ZmZpeDsKKworCWlmIChub190YWcgJiYKKwkgICAgIWV2ZW50LT5zY2FsYXIucGxh aW5faW1wbGljaXQgJiYKKwkgICAgIWV2ZW50LT5zY2FsYXIucXVvdGVkX2ltcGxpY2l0KQorCQly ZXR1cm4gc2V0X2Vycm9yKGVtaXR0ZXIsCisJCQkJICJuZWl0aGVyIHRhZyBub3IgaW1wbGljaXQg ZmxhZ3MgYXJlIHNwZWNpZmllZCIpOworCisJaWYgKHN0eWxlID09IFlBTUxfQU5ZX1NDQUxBUl9T VFlMRSkKKwkJc3R5bGUgPSBZQU1MX1BMQUlOX1NDQUxBUl9TVFlMRTsKKworCWlmIChlbWl0dGVy LT5jYW5vbmljYWwpCisJCXN0eWxlID0gWUFNTF9ET1VCTEVfUVVPVEVEX1NDQUxBUl9TVFlMRTsK KworCWlmIChlbWl0dGVyLT5zaW1wbGVfa2V5X2NvbnRleHQgJiYgZW1pdHRlci0+c2NhbGFyX2Rh dGEubXVsdGlsaW5lKQorCQlzdHlsZSA9IFlBTUxfRE9VQkxFX1FVT1RFRF9TQ0FMQVJfU1RZTEU7 CisKKwlpZiAoc3R5bGUgPT0gWUFNTF9QTEFJTl9TQ0FMQVJfU1RZTEUpIHsKKwkJaWYgKChlbWl0 dGVyLT5mbG93X2xldmVsICYmICFlbWl0dGVyLT5zY2FsYXJfZGF0YS5mbG93X3BsYWluX2FsbG93 ZWQpIHx8CisJCSAgICAoIWVtaXR0ZXItPmZsb3dfbGV2ZWwgJiYgIWVtaXR0ZXItPnNjYWxhcl9k YXRhLmJsb2NrX3BsYWluX2FsbG93ZWQpKQorCQkJc3R5bGUgPSBZQU1MX1NJTkdMRV9RVU9URURf U0NBTEFSX1NUWUxFOworCisJCWlmICghZW1pdHRlci0+c2NhbGFyX2RhdGEubGVuZ3RoICYmCisJ CSAgICAoZW1pdHRlci0+Zmxvd19sZXZlbCB8fCBlbWl0dGVyLT5zaW1wbGVfa2V5X2NvbnRleHQp KQorCQkJc3R5bGUgPSBZQU1MX1NJTkdMRV9RVU9URURfU0NBTEFSX1NUWUxFOworCisJCWlmIChu b190YWcgJiYgIWV2ZW50LT5zY2FsYXIucGxhaW5faW1wbGljaXQpCisJCQlzdHlsZSA9IFlBTUxf U0lOR0xFX1FVT1RFRF9TQ0FMQVJfU1RZTEU7CisJfQorCisJaWYgKHN0eWxlID09IFlBTUxfU0lO R0xFX1FVT1RFRF9TQ0FMQVJfU1RZTEUpIHsKKwkJaWYgKCFlbWl0dGVyLT5zY2FsYXJfZGF0YS5z aW5nbGVfcXVvdGVkX2FsbG93ZWQpCisJCQlzdHlsZSA9IFlBTUxfRE9VQkxFX1FVT1RFRF9TQ0FM QVJfU1RZTEU7CisJfQorCisJaWYgKHN0eWxlID09IFlBTUxfTElURVJBTF9TQ0FMQVJfU1RZTEUg fHwKKwkgICAgc3R5bGUgPT0gWUFNTF9GT0xERURfU0NBTEFSX1NUWUxFKSB7CisJCWlmICghZW1p dHRlci0+c2NhbGFyX2RhdGEuYmxvY2tfYWxsb3dlZCB8fAorCQkgICAgZW1pdHRlci0+Zmxvd19s ZXZlbCB8fAorCQkgICAgZW1pdHRlci0+c2ltcGxlX2tleV9jb250ZXh0KQorCQkJc3R5bGUgPSBZ QU1MX0RPVUJMRV9RVU9URURfU0NBTEFSX1NUWUxFOworCX0KKworCWlmIChub190YWcgJiYgIWV2 ZW50LT5zY2FsYXIucXVvdGVkX2ltcGxpY2l0ICYmCisJICAgIHN0eWxlICE9IFlBTUxfUExBSU5f U0NBTEFSX1NUWUxFKSB7CisJCWVtaXR0ZXItPnRhZ19kYXRhLmhhbmRsZSA9ICIhIjsKKwkJZW1p dHRlci0+dGFnX2RhdGEuaGFuZGxlX2xlbmd0aCA9IDE7CisJfQorCisJZW1pdHRlci0+c2NhbGFy X2RhdGEuc3R5bGUgPSBzdHlsZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZW1pdF9z Y2FsYXIoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3Qgc3RydWN0IHlhbWxfZXZl bnQgKmV2ZW50KQoreworCWludCBlcnI7CisKKwllcnIgPSBzZWxlY3Rfc2NhbGFyX3N0eWxlKGVt aXR0ZXIsIGV2ZW50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZW1pdF9h bmNob3IoZW1pdHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHdyaXRl X3RhZyhlbWl0dGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gaW5jcmVh c2VfaW5kZW50KGVtaXR0ZXIsIDEsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwll cnIgPSB3cml0ZV9zY2FsYXIoZW1pdHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwor CWVtaXR0ZXItPmluZGVudCA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5pbmRlbnRzKTsKKwllbWl0 dGVyLT5zdGF0ZSA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpOworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50CitlbWl0X3NlcXVlbmNlX3N0YXJ0KHN0cnVjdCB5YW1sX2VtaXR0ZXIg KmVtaXR0ZXIsIGNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyOwor CisJZXJyID0gZW1pdF9hbmNob3IoZW1pdHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsK KworCWVyciA9IHdyaXRlX3RhZyhlbWl0dGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwor CisJaWYgKGVtaXR0ZXItPmZsb3dfbGV2ZWwgfHwgZW1pdHRlci0+Y2Fub25pY2FsIHx8CisJICAg IGV2ZW50LT5zZXF1ZW5jZV9zdGFydC5zdHlsZSA9PSBZQU1MX0ZMT1dfU0VRVUVOQ0VfU1RZTEUg fHwKKwkgICAgY2hlY2tfZW1wdHlfc2VxdWVuY2UoZW1pdHRlcikpIHsKKwkJZW1pdHRlci0+c3Rh dGUgPSBFTUlUX0ZMT1dfU0VRVUVOQ0VfRklSU1RfSVRFTV9TVEFURTsKKwl9IGVsc2UgeworCQll bWl0dGVyLT5zdGF0ZSA9IEVNSVRfQkxPQ0tfU0VRVUVOQ0VfRklSU1RfSVRFTV9TVEFURTsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZW1pdF9tYXBwaW5nX3N0YXJ0KHN0cnVj dCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpldmVudCkK K3sKKwlpbnQgZXJyOworCisJZXJyID0gZW1pdF9hbmNob3IoZW1pdHRlcik7CisJaWYgKGVycikK KwkJcmV0dXJuIGVycjsKKworCWVyciA9IHdyaXRlX3RhZyhlbWl0dGVyKTsKKwlpZiAoZXJyKQor CQlyZXR1cm4gZXJyOworCisJaWYgKGVtaXR0ZXItPmZsb3dfbGV2ZWwgfHwKKwkgICAgZW1pdHRl ci0+Y2Fub25pY2FsIHx8CisJICAgIGV2ZW50LT5tYXBwaW5nX3N0YXJ0LnN0eWxlID09IFlBTUxf RkxPV19NQVBQSU5HX1NUWUxFIHx8CisJICAgIGNoZWNrX2VtcHR5X21hcHBpbmcoZW1pdHRlcikp IHsKKwkJZW1pdHRlci0+c3RhdGUgPSBFTUlUX0ZMT1dfTUFQUElOR19GSVJTVF9LRVlfU1RBVEU7 CisJfSBlbHNlIHsKKwkJZW1pdHRlci0+c3RhdGUgPSBFTUlUX0JMT0NLX01BUFBJTkdfRklSU1Rf S0VZX1NUQVRFOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbWl0X25vZGUo c3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3Qgc3RydWN0IHlhbWxfZXZlbnQgKmV2 ZW50LAorCSAgaW50IHJvb3QsIGludCBzZXF1ZW5jZSwgaW50IG1hcHBpbmcsIGludCBzaW1wbGVf a2V5KQoreworCWVtaXR0ZXItPnJvb3RfY29udGV4dCA9IHJvb3Q7CisJZW1pdHRlci0+c2VxdWVu Y2VfY29udGV4dCA9IHNlcXVlbmNlOworCWVtaXR0ZXItPm1hcHBpbmdfY29udGV4dCA9IG1hcHBp bmc7CisJZW1pdHRlci0+c2ltcGxlX2tleV9jb250ZXh0ID0gc2ltcGxlX2tleTsKKworCXN3aXRj aCAoZXZlbnQtPnR5cGUpIHsKKwljYXNlIFlBTUxfQUxJQVNfRVZFTlQ6CisJCXJldHVybiBlbWl0 X2FsaWFzKGVtaXR0ZXIsIGV2ZW50KTsKKworCWNhc2UgWUFNTF9TQ0FMQVJfRVZFTlQ6CisJCXJl dHVybiBlbWl0X3NjYWxhcihlbWl0dGVyLCBldmVudCk7CisKKwljYXNlIFlBTUxfU0VRVUVOQ0Vf U1RBUlRfRVZFTlQ6CisJCXJldHVybiBlbWl0X3NlcXVlbmNlX3N0YXJ0KGVtaXR0ZXIsIGV2ZW50 KTsKKworCWNhc2UgWUFNTF9NQVBQSU5HX1NUQVJUX0VWRU5UOgorCQlyZXR1cm4gZW1pdF9tYXBw aW5nX3N0YXJ0KGVtaXR0ZXIsIGV2ZW50KTsKKworCWRlZmF1bHQ6CisJCXJldHVybiBzZXRfZXJy b3IoZW1pdHRlciwKKwkJCQkgImV4cGVjdGVkIFNDQUxBUiwgU0VRVUVOQ0UtU1RBUlQsIE1BUFBJ TkctU1RBUlQsIG9yIEFMSUFTIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQK K2VtaXRfZG9jdW1lbnRfY29udGVudChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBjb25z dCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJaW50IGVycjsKKworCWVyciA9IFBVU0go ZW1pdHRlciwgZW1pdHRlci0+c3RhdGVzLCBFTUlUX0RPQ1VNRU5UX0VORF9TVEFURSk7CisJaWYg KGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBlbWl0X25vZGUoZW1pdHRlciwgZXZlbnQs IDEsIDAsIDAsIDApOworfQorCitzdGF0aWMgaW50CitlbWl0X2Zsb3dfc2VxdWVuY2VfaXRlbShz dHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJY29uc3Qgc3RydWN0IHlhbWxfZXZlbnQg KmV2ZW50LAorCQkJYm9vbCBmaXJzdCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGZpcnN0KSB7CisJ CWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiWyIsIDEsIDEsIDApOworCQlpZiAoZXJy KQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBpbmNyZWFzZV9pbmRlbnQoZW1pdHRlciwgMSwg MCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVtaXR0ZXItPmZsb3dfbGV2ZWwr KzsKKwl9CisKKwlpZiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9TRVFVRU5DRV9FTkRfRVZFTlQpIHsK KwkJZW1pdHRlci0+Zmxvd19sZXZlbC0tOworCQllbWl0dGVyLT5pbmRlbnQgPSBQT1AoZW1pdHRl ciwgZW1pdHRlci0+aW5kZW50cyk7CisKKwkJaWYgKGVtaXR0ZXItPmNhbm9uaWNhbCAmJiAhZmly c3QpIHsKKwkJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiLCIsIDAsIDAsIDApOwor CQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQllcnIgPSB3cml0ZV9pbmRlbnQoZW1p dHRlcik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKworCQllcnIgPSB3cml0 ZV9pbmRpY2F0b3IoZW1pdHRlciwgIl0iLCAwLCAwLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVy biBlcnI7CisKKwkJZW1pdHRlci0+c3RhdGUgPSBQT1AoZW1pdHRlciwgZW1pdHRlci0+c3RhdGVz KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFmaXJzdCkgeworCQllcnIgPSB3cml0ZV9pbmRp Y2F0b3IoZW1pdHRlciwgIiwiLCAwLCAwLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7 CisJfQorCisJaWYgKGVtaXR0ZXItPmNhbm9uaWNhbCB8fCBlbWl0dGVyLT5jb2x1bW4gPiBlbWl0 dGVyLT5iZXN0X3dpZHRoKSB7CisJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJaWYg KGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gUFVTSChlbWl0dGVyLCBlbWl0dGVy LT5zdGF0ZXMsIEVNSVRfRkxPV19TRVFVRU5DRV9JVEVNX1NUQVRFKTsKKwlpZiAoZXJyKQorCQly ZXR1cm4gZXJyOworCisJcmV0dXJuIGVtaXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwgMSwgMCwg MCk7Cit9CisKK3N0YXRpYyBpbnQKK2VtaXRfZmxvd19tYXBwaW5nX2tleShzdHJ1Y3QgeWFtbF9l bWl0dGVyICplbWl0dGVyLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQs IGludCBmaXJzdCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGZpcnN0KSB7CisJCWVyciA9IHdyaXRl X2luZGljYXRvcihlbWl0dGVyLCAieyIsIDEsIDEsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJu IGVycjsKKworCQllcnIgPSBpbmNyZWFzZV9pbmRlbnQoZW1pdHRlciwgMSwgMCk7CisJCWlmIChl cnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVtaXR0ZXItPmZsb3dfbGV2ZWwrKzsKKwl9CisKKwlp ZiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9NQVBQSU5HX0VORF9FVkVOVCkgeworCQllbWl0dGVyLT5m bG93X2xldmVsLS07CisJCWVtaXR0ZXItPmluZGVudCA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5p bmRlbnRzKTsKKworCQlpZiAoZW1pdHRlci0+Y2Fub25pY2FsICYmICFmaXJzdCkgeworCQkJZXJy ID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICIsIiwgMCwgMCwgMCk7CisJCQlpZiAoZXJyKQor CQkJCXJldHVybiBlcnI7CisKKwkJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJCWlm IChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWVyciA9IHdyaXRlX2luZGljYXRvcihl bWl0dGVyLCAifSIsIDAsIDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQll bWl0dGVyLT5zdGF0ZSA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpOworCQlyZXR1cm4g MDsKKwl9CisKKwlpZiAoIWZpcnN0KSB7CisJCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVy LCAiLCIsIDAsIDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAo ZW1pdHRlci0+Y2Fub25pY2FsIHx8IGVtaXR0ZXItPmNvbHVtbiA+IGVtaXR0ZXItPmJlc3Rfd2lk dGgpIHsKKwkJZXJyID0gd3JpdGVfaW5kZW50KGVtaXR0ZXIpOworCQlpZiAoZXJyKQorCQkJcmV0 dXJuIGVycjsKKwl9CisKKwlpZiAoIWVtaXR0ZXItPmNhbm9uaWNhbCAmJiBjaGVja19zaW1wbGVf a2V5KGVtaXR0ZXIpKSB7CisJCWVyciA9IFBVU0goZW1pdHRlciwgZW1pdHRlci0+c3RhdGVzLAor CQkJICAgRU1JVF9GTE9XX01BUFBJTkdfU0lNUExFX1ZBTFVFX1NUQVRFKTsKKwkJaWYgKGVycikK KwkJCXJldHVybiBlcnI7CisKKwkJcmV0dXJuIGVtaXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwg MCwgMSwgMSk7CisJfQorCisJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICI/IiwgMSwg MCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IFBVU0goZW1pdHRlciwg ZW1pdHRlci0+c3RhdGVzLCBFTUlUX0ZMT1dfTUFQUElOR19WQUxVRV9TVEFURSk7CisJaWYgKGVy cikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBlbWl0X25vZGUoZW1pdHRlciwgZXZlbnQsIDAs IDAsIDEsIDApOworfQorCitzdGF0aWMgaW50CitlbWl0X2Zsb3dfbWFwcGluZ192YWx1ZShzdHJ1 Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJY29uc3Qgc3RydWN0IHlhbWxfZXZlbnQgKmV2 ZW50LCBpbnQgc2ltcGxlKQoreworCWludCBlcnI7CisKKwlpZiAoc2ltcGxlKSB7CisJCWVyciA9 IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiOiIsIDAsIDAsIDApOworCQlpZiAoZXJyKQorCQkJ cmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQlpZiAoZW1pdHRlci0+Y2Fub25pY2FsIHx8CisJCSAg ICBlbWl0dGVyLT5jb2x1bW4gPiBlbWl0dGVyLT5iZXN0X3dpZHRoKSB7CisJCQllcnIgPSB3cml0 ZV9pbmRlbnQoZW1pdHRlcik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwor CQllcnIgPSB3cml0ZV9pbmRpY2F0b3IoZW1pdHRlciwgIjoiLCAxLCAwLCAwKTsKKwkJaWYgKGVy cikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gUFVTSChlbWl0dGVyLCBlbWl0dGVyLT5z dGF0ZXMsIEVNSVRfRkxPV19NQVBQSU5HX0tFWV9TVEFURSk7CisJaWYgKGVycikKKwkJcmV0dXJu IGVycjsKKworCXJldHVybiBlbWl0X25vZGUoZW1pdHRlciwgZXZlbnQsIDAsIDAsIDEsIDApOwor fQorCitzdGF0aWMgaW50CitlbWl0X2Jsb2NrX3NlcXVlbmNlX2l0ZW0oc3RydWN0IHlhbWxfZW1p dHRlciAqZW1pdHRlciwKKwkJCSBjb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQsIGludCBm aXJzdCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGZpcnN0KSB7CisJCWVyciA9IGluY3JlYXNlX2lu ZGVudChlbWl0dGVyLCAwLAorCQkJCSAgICAgIGVtaXR0ZXItPm1hcHBpbmdfY29udGV4dCAmJgor CQkJCSAgICAgICFlbWl0dGVyLT5pbmRlbnRpb24pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVy cjsKKwl9CisKKwlpZiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9TRVFVRU5DRV9FTkRfRVZFTlQpIHsK KwkJZW1pdHRlci0+aW5kZW50ID0gUE9QKGVtaXR0ZXIsIGVtaXR0ZXItPmluZGVudHMpOworCQll bWl0dGVyLT5zdGF0ZSA9IFBPUChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpOworCQlyZXR1cm4g MDsKKwl9CisKKwllcnIgPSB3cml0ZV9pbmRlbnQoZW1pdHRlcik7CisJaWYgKGVycikKKwkJcmV0 dXJuIGVycjsKKworCWVyciA9IHdyaXRlX2luZGljYXRvcihlbWl0dGVyLCAiLSIsIDEsIDAsIDEp OworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBQVVNIKGVtaXR0ZXIsIGVtaXR0 ZXItPnN0YXRlcywgRU1JVF9CTE9DS19TRVFVRU5DRV9JVEVNX1NUQVRFKTsKKwlpZiAoZXJyKQor CQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGVtaXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwgMSwg MCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK2VtaXRfYmxvY2tfbWFwcGluZ19rZXkoc3RydWN0IHlh bWxfZW1pdHRlciAqZW1pdHRlciwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB5YW1sX2V2ZW50ICpl dmVudCwgaW50IGZpcnN0KQoreworCWludCBlcnI7CisKKwlpZiAoZmlyc3QpIHsKKwkJZXJyID0g aW5jcmVhc2VfaW5kZW50KGVtaXR0ZXIsIDAsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVy cjsKKwl9CisKKwlpZiAoZXZlbnQtPnR5cGUgPT0gWUFNTF9NQVBQSU5HX0VORF9FVkVOVCkgewor CQllbWl0dGVyLT5pbmRlbnQgPSBQT1AoZW1pdHRlciwgZW1pdHRlci0+aW5kZW50cyk7CisJCWVt aXR0ZXItPnN0YXRlID0gUE9QKGVtaXR0ZXIsIGVtaXR0ZXItPnN0YXRlcyk7CisJCXJldHVybiAw OworCX0KKworCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1 cm4gZXJyOworCisJaWYgKGNoZWNrX3NpbXBsZV9rZXkoZW1pdHRlcikpIHsKKwkJZXJyID0gUFVT SChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMsCisJCQkgICBFTUlUX0JMT0NLX01BUFBJTkdfU0lN UExFX1ZBTFVFX1NUQVRFKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJcmV0dXJu IGVtaXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwgMCwgMSwgMSk7CisJfSBlbHNlIHsKKwkJZXJy ID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICI/IiwgMSwgMCwgMSk7CisJCWlmIChlcnIpCisJ CQlyZXR1cm4gZXJyOworCisJCWVyciA9IFBVU0goZW1pdHRlciwgZW1pdHRlci0+c3RhdGVzLAor CQkJICAgRU1JVF9CTE9DS19NQVBQSU5HX1ZBTFVFX1NUQVRFKTsKKwkJaWYgKGVycikKKwkJCXJl dHVybiBlcnI7CisKKwkJcmV0dXJuIGVtaXRfbm9kZShlbWl0dGVyLCBldmVudCwgMCwgMCwgMSwg MCk7CisJfQorfQorCitzdGF0aWMgaW50CitlbWl0X2Jsb2NrX21hcHBpbmdfdmFsdWUoc3RydWN0 IHlhbWxfZW1pdHRlciAqZW1pdHRlciwKKwkJCSBjb25zdCBzdHJ1Y3QgeWFtbF9ldmVudCAqZXZl bnQsIGludCBzaW1wbGUpCit7CisJaW50IGVycjsKKworCWlmIChzaW1wbGUpIHsKKwkJZXJyID0g d3JpdGVfaW5kaWNhdG9yKGVtaXR0ZXIsICI6IiwgMCwgMCwgMCk7CisJCWlmIChlcnIpCisJCQly ZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IHdyaXRlX2luZGVudChlbWl0dGVyKTsKKwkJ aWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gd3JpdGVfaW5kaWNhdG9yKGVtaXR0 ZXIsICI6IiwgMSwgMCwgMSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVy ciA9IFBVU0goZW1pdHRlciwgZW1pdHRlci0+c3RhdGVzLCBFTUlUX0JMT0NLX01BUFBJTkdfS0VZ X1NUQVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGVtaXRfbm9kZShl bWl0dGVyLCBldmVudCwgMCwgMCwgMSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK2VtaXR0ZXJfc3Rh dGVfbWFjaGluZShzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkgICAgICBjb25zdCBz dHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJc3dpdGNoIChlbWl0dGVyLT5zdGF0ZSkgewor CWNhc2UgRU1JVF9TVFJFQU1fU1RBUlRfU1RBVEU6CisJCXJldHVybiBlbWl0X3N0cmVhbV9zdGFy dChlbWl0dGVyLCBldmVudCk7CisKKwljYXNlIEVNSVRfRklSU1RfRE9DVU1FTlRfU1RBUlRfU1RB VEU6CisJCXJldHVybiBlbWl0X2RvY3VtZW50X3N0YXJ0KGVtaXR0ZXIsIGV2ZW50LCB0cnVlKTsK KworCWNhc2UgRU1JVF9ET0NVTUVOVF9TVEFSVF9TVEFURToKKwkJcmV0dXJuIGVtaXRfZG9jdW1l bnRfc3RhcnQoZW1pdHRlciwgZXZlbnQsIGZhbHNlKTsKKworCWNhc2UgRU1JVF9ET0NVTUVOVF9D T05URU5UX1NUQVRFOgorCQlyZXR1cm4gZW1pdF9kb2N1bWVudF9jb250ZW50KGVtaXR0ZXIsIGV2 ZW50KTsKKworCWNhc2UgRU1JVF9ET0NVTUVOVF9FTkRfU1RBVEU6CisJCXJldHVybiBlbWl0X2Rv Y3VtZW50X2VuZChlbWl0dGVyLCBldmVudCk7CisKKwljYXNlIEVNSVRfRkxPV19TRVFVRU5DRV9G SVJTVF9JVEVNX1NUQVRFOgorCQlyZXR1cm4gZW1pdF9mbG93X3NlcXVlbmNlX2l0ZW0oZW1pdHRl ciwgZXZlbnQsIHRydWUpOworCisJY2FzZSBFTUlUX0ZMT1dfU0VRVUVOQ0VfSVRFTV9TVEFURToK KwkJcmV0dXJuIGVtaXRfZmxvd19zZXF1ZW5jZV9pdGVtKGVtaXR0ZXIsIGV2ZW50LCBmYWxzZSk7 CisKKwljYXNlIEVNSVRfRkxPV19NQVBQSU5HX0ZJUlNUX0tFWV9TVEFURToKKwkJcmV0dXJuIGVt aXRfZmxvd19tYXBwaW5nX2tleShlbWl0dGVyLCBldmVudCwgdHJ1ZSk7CisKKwljYXNlIEVNSVRf RkxPV19NQVBQSU5HX0tFWV9TVEFURToKKwkJcmV0dXJuIGVtaXRfZmxvd19tYXBwaW5nX2tleShl bWl0dGVyLCBldmVudCwgZmFsc2UpOworCisJY2FzZSBFTUlUX0ZMT1dfTUFQUElOR19TSU1QTEVf VkFMVUVfU1RBVEU6CisJCXJldHVybiBlbWl0X2Zsb3dfbWFwcGluZ192YWx1ZShlbWl0dGVyLCBl dmVudCwgdHJ1ZSk7CisKKwljYXNlIEVNSVRfRkxPV19NQVBQSU5HX1ZBTFVFX1NUQVRFOgorCQly ZXR1cm4gZW1pdF9mbG93X21hcHBpbmdfdmFsdWUoZW1pdHRlciwgZXZlbnQsIGZhbHNlKTsKKwor CWNhc2UgRU1JVF9CTE9DS19TRVFVRU5DRV9GSVJTVF9JVEVNX1NUQVRFOgorCQlyZXR1cm4gZW1p dF9ibG9ja19zZXF1ZW5jZV9pdGVtKGVtaXR0ZXIsIGV2ZW50LCB0cnVlKTsKKworCWNhc2UgRU1J VF9CTE9DS19TRVFVRU5DRV9JVEVNX1NUQVRFOgorCQlyZXR1cm4gZW1pdF9ibG9ja19zZXF1ZW5j ZV9pdGVtKGVtaXR0ZXIsIGV2ZW50LCBmYWxzZSk7CisKKwljYXNlIEVNSVRfQkxPQ0tfTUFQUElO R19GSVJTVF9LRVlfU1RBVEU6CisJCXJldHVybiBlbWl0X2Jsb2NrX21hcHBpbmdfa2V5KGVtaXR0 ZXIsIGV2ZW50LCB0cnVlKTsKKworCWNhc2UgRU1JVF9CTE9DS19NQVBQSU5HX0tFWV9TVEFURToK KwkJcmV0dXJuIGVtaXRfYmxvY2tfbWFwcGluZ19rZXkoZW1pdHRlciwgZXZlbnQsIGZhbHNlKTsK KworCWNhc2UgRU1JVF9CTE9DS19NQVBQSU5HX1NJTVBMRV9WQUxVRV9TVEFURToKKwkJcmV0dXJu IGVtaXRfYmxvY2tfbWFwcGluZ192YWx1ZShlbWl0dGVyLCBldmVudCwgdHJ1ZSk7CisKKwljYXNl IEVNSVRfQkxPQ0tfTUFQUElOR19WQUxVRV9TVEFURToKKwkJcmV0dXJuIGVtaXRfYmxvY2tfbWFw cGluZ192YWx1ZShlbWl0dGVyLCBldmVudCwgZmFsc2UpOworCisJY2FzZSBFTUlUX0VORF9TVEFU RToKKwkJcmV0dXJuIHNldF9lcnJvcihlbWl0dGVyLCAiZXhwZWN0ZWQgbm90aGluZyBhZnRlciBT VFJFQU0tRU5EIik7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30K Kwordm9pZCB5YW1sX2VtaXR0ZXJfZW1pdChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLCBz dHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJaWYgKCFldmVudCB8fCAhZW1pdHRlciB8fCBl bWl0dGVyLT5lcnJubykgeworCQl5YW1sX2V2ZW50X2RlbGV0ZShldmVudCk7CisJCXJldHVybjsK Kwl9CisKKwlsaXN0X2FkZF90YWlsKCZldmVudC0+bGluaywgJmVtaXR0ZXItPmV2ZW50cyk7CisJ ZW1pdHRlci0+bnVtX2V2ZW50cysrOworCisJd2hpbGUgKCFuZWVkX21vcmVfZXZlbnRzKGVtaXR0 ZXIpKSB7CisJCWV2ZW50ID0gbmV4dF9ldmVudChlbWl0dGVyKTsKKworCQlpZiAoYW5hbHl6ZV9l dmVudChlbWl0dGVyLCBldmVudCkpCisJCQlyZXR1cm47CisKKwkJaWYgKGVtaXR0ZXJfc3RhdGVf bWFjaGluZShlbWl0dGVyLCBldmVudCkpCisJCQlyZXR1cm47CisKKwkJZW1pdHRlci0+bnVtX2V2 ZW50cy0tOworCQlsaXN0X2RlbCgmZXZlbnQtPmxpbmspOworCQl5YW1sX2V2ZW50X2RlbGV0ZShl dmVudCk7CisJfQorfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfZW1pdCk7CisKK2ludCB5 YW1sX2VtaXR0ZXJfZmx1c2goc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgY29uc3QgY2hh ciAqKnByb2JsZW0pCit7CisJaW50IGVycjsKKworCWlmICghZW1pdHRlcikgeworCQlpZiAocHJv YmxlbSkKKwkJCSpwcm9ibGVtID0gImFsbG9jYXRpb24gZXJyb3IiOworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwlpZiAoZW1pdHRlci0+ZXJybm8pCisJCWVyciA9IGVtaXR0ZXItPmVycm5vOwor CWVsc2UKKwkJZXJyID0gZmx1c2goZW1pdHRlcik7CisJaWYgKCFlcnIpCisJCXJldHVybiAwOwor CisJaWYgKHByb2JsZW0pCisJCSpwcm9ibGVtID0gZW1pdHRlci0+cHJvYmxlbTsKKwlyZXR1cm4g ZXJyOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfZmx1c2gpOworCitzdGF0aWMgYm9v bCB5YW1sX3N0YWNrX2V4dGVuZCh2b2lkICoqc3RhcnQsIHZvaWQgKip0b3AsIHZvaWQgKiplbmQp Cit7CisJdm9pZCAqbmV3X3N0YXJ0OworCisJaWYgKCplbmQgLSAqc3RhcnQgPj0gSU5UX01BWCAv IDIpCisJCXJldHVybiBmYWxzZTsKKworCW5ld19zdGFydCA9IGtyZWFsbG9jKCpzdGFydCwgKCpl bmQgLSAqc3RhcnQpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfc3RhcnQpCisJCXJldHVy biBmYWxzZTsKKworCSp0b3AgPSBuZXdfc3RhcnQgKyAoKnRvcCAtICpzdGFydCk7CisJKmVuZCA9 IG5ld19zdGFydCArICgqZW5kIC0gKnN0YXJ0KSAqIDI7CisJKnN0YXJ0ID0gbmV3X3N0YXJ0Owor CisJcmV0dXJuIHRydWU7Cit9CisKKyNkZWZpbmUgU1RBQ0tfSU5JVChjb250ZXh0LCBzdGFjaykg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSgoKHN0YWNrKS5zdGFydCA9 IGttYWxsb2MoSU5JVElBTF9TVEFDS19TSVpFICogc2l6ZW9mKCooc3RhY2spLiBzdGFydCksXAor CQkJCSAgZ2ZwKSkgPwkJCVwKKwkoKHN0YWNrKS50b3AgPSAoc3RhY2spLnN0YXJ0LAkJCQkJXAor CShzdGFjaykuZW5kID0gKHN0YWNrKS5zdGFydCArIElOSVRJQUxfU1RBQ0tfU0laRSwJCVwKKwkx KSA6IDApCisjZGVmaW5lIFNUQUNLX0RFTChjb250ZXh0LCBzdGFjaykga2ZyZWUoKHN0YWNrKS5z dGFydCkKKworc3RydWN0IHlhbWxfZW1pdHRlciAqeWFtbF9lbWl0dGVyX2NyZWF0ZShnZnBfdCBn ZnApCit7CisJc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcjsKKworCWVtaXR0ZXIgPSBremFs bG9jKHNpemVvZigqZW1pdHRlciksIGdmcCk7CisJaWYgKCFlbWl0dGVyKQorCQlyZXR1cm4gTlVM TDsKKworCWVtaXR0ZXItPmdmcCA9IGdmcDsKKwlJTklUX0xJU1RfSEVBRCgmZW1pdHRlci0+ZXZl bnRzKTsKKworCWVtaXR0ZXItPmJ1Zi5zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFLCBnZnApOwor CWlmICghZW1pdHRlci0+YnVmLnN0YXJ0KQorCQlnb3RvIGVycm9yOworCisJZW1pdHRlci0+YnVm LnBvcyA9IGVtaXR0ZXItPmJ1Zi5zdGFydDsKKwllbWl0dGVyLT5idWYubGFzdCA9IGVtaXR0ZXIt PmJ1Zi5wb3M7CisJZW1pdHRlci0+YnVmLmVuZCA9IGVtaXR0ZXItPmJ1Zi5zdGFydCArIFBBR0Vf U0laRTsKKworCWlmICghU1RBQ0tfSU5JVChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpKQorCQln b3RvIGVycm9yOworCisJaWYgKCFTVEFDS19JTklUKGVtaXR0ZXIsIGVtaXR0ZXItPmluZGVudHMp KQorCQlnb3RvIGVycm9yOworCisJaWYgKCFTVEFDS19JTklUKGVtaXR0ZXIsIGVtaXR0ZXItPnRh Z3MpKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIGVtaXR0ZXI7CisKK2Vycm9yOgorCXlhbWxf ZW1pdHRlcl9kZXN0cm95KGVtaXR0ZXIpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJP TCh5YW1sX2VtaXR0ZXJfY3JlYXRlKTsKKworZ2ZwX3QgeWFtbF9lbWl0dGVyX3NldF9nZnAoc3Ry dWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgZ2ZwX3QgZ2ZwKQoreworCWdmcF90IG9sZCA9IDA7 CisKKwlpZiAoZW1pdHRlcikgeworCQlvbGQgPSBlbWl0dGVyLT5nZnA7CisJCWVtaXR0ZXItPmdm cCA9IGdmcDsKKwl9CisKKwlyZXR1cm4gb2xkOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0 ZXJfc2V0X2dmcCk7CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9ldmVudHMoc3RydWN0IHlhbWxfZW1p dHRlciAqZW1pdHRlcikKK3sKKwlzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQsICpuZXh0OworCisJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCBuZXh0LCAmZW1pdHRlci0+ZXZlbnRzLCBs aW5rKQorCQl5YW1sX2V2ZW50X2RlbGV0ZShldmVudCk7Cit9CisKK3ZvaWQgeWFtbF9lbWl0dGVy X2Rlc3Ryb3koc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcikKK3sKKwlpZiAoIWVtaXR0ZXIp CisJCXJldHVybjsKKworCWRlbGV0ZV9ldmVudHMoZW1pdHRlcik7CisKKwlrZnJlZShlbWl0dGVy LT5idWYuc3RhcnQpOworCVNUQUNLX0RFTChlbWl0dGVyLCBlbWl0dGVyLT5zdGF0ZXMpOworCVNU QUNLX0RFTChlbWl0dGVyLCBlbWl0dGVyLT5pbmRlbnRzKTsKKwl3aGlsZSAoIUVNUFRZKGVtcHR5 LCBlbWl0dGVyLT50YWdzKSkgeworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlIHRhZyA9CisJ CQlQT1AoZW1pdHRlciwgZW1pdHRlci0+dGFncyk7CisKKwkJa2ZyZWUodGFnLmhhbmRsZSk7CisJ CWtmcmVlKHRhZy5wcmVmaXgpOworCX0KKwlTVEFDS19ERUwoZW1pdHRlciwgZW1pdHRlci0+dGFn cyk7CisJa2ZyZWUoZW1pdHRlci0+YW5jaG9ycyk7CisKKwlrZnJlZShlbWl0dGVyKTsKK30KK0VY UE9SVF9TWU1CT0woeWFtbF9lbWl0dGVyX2Rlc3Ryb3kpOworCitzdGF0aWMgaW50IHN0cmluZ193 cml0ZV9oYW5kbGVyKHZvaWQgKmRhdGEsIGNvbnN0IHU4ICpidWZmZXIsIHNpemVfdCBzaXplKQor eworCXN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIgPSBkYXRhOworCXR5cGVvZihlbWl0dGVy LT5vdXRwdXQuc3RyaW5nKSAqb3V0ID0gJmVtaXR0ZXItPm91dHB1dC5zdHJpbmc7CisKKwlpZiAo b3V0LT5zaXplIC0gKm91dC0+c2l6ZV93cml0dGVuIDwgc2l6ZSkKKwkJc2l6ZSA9IG91dC0+c2l6 ZSAtICpvdXQtPnNpemVfd3JpdHRlbjsKKworCW1lbWNweShvdXQtPmJ1ZmZlciArICpvdXQtPnNp emVfd3JpdHRlbiwgYnVmZmVyLCBzaXplKTsKKwkqb3V0LT5zaXplX3dyaXR0ZW4gKz0gc2l6ZTsK KwlyZXR1cm4gMDsKK30KKwordm9pZCB5YW1sX2VtaXR0ZXJfc2V0X3N0cmluZyhzdHJ1Y3QgeWFt bF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAgICB1OCAqb3V0cHV0LAorCQkJICAgICBzaXplX3Qg c2l6ZSwKKwkJCSAgICAgc2l6ZV90ICpzaXplX3dyaXR0ZW4pCit7CisJaWYgKCFlbWl0dGVyKQor CQlyZXR1cm47CisKKwllbWl0dGVyLT53cml0ZV9oYW5kbGVyID0gc3RyaW5nX3dyaXRlX2hhbmRs ZXI7CisJZW1pdHRlci0+d3JpdGVfZGF0YSA9IGVtaXR0ZXI7CisKKwllbWl0dGVyLT5vdXRwdXQu c3RyaW5nLmJ1ZmZlciA9IG91dHB1dDsKKwllbWl0dGVyLT5vdXRwdXQuc3RyaW5nLnNpemUgPSBz aXplOworCWVtaXR0ZXItPm91dHB1dC5zdHJpbmcuc2l6ZV93cml0dGVuID0gc2l6ZV93cml0dGVu OworCSpzaXplX3dyaXR0ZW4gPSAwOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfc2V0 X3N0cmluZyk7CisKK3N0YXRpYyBpbnQgc2VxX2ZpbGVfd3JpdGVfaGFuZGxlcih2b2lkICpkYXRh LCBjb25zdCB1OCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwkvKiBJZ25vcmUgdGhlIG92ZXJm bG93IGVycm9yOyBzZXEgd2lsbCByZXN0YXJ0IHdpdGggYSBsYXJnZXIgYnVmZmVyICovCisJc2Vx X3dyaXRlKGRhdGEsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgeWFtbF9l bWl0dGVyX3NldF9zZXFfZmlsZShzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJICAg ICAgIHN0cnVjdCBzZXFfZmlsZSAqZmlsZSkKK3sKKwlpZiAoIWVtaXR0ZXIpCisJCXJldHVybjsK KworCWVtaXR0ZXItPndyaXRlX2hhbmRsZXIgPSBzZXFfZmlsZV93cml0ZV9oYW5kbGVyOworCWVt aXR0ZXItPndyaXRlX2RhdGEgPSBmaWxlOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJf c2V0X3NlcV9maWxlKTsKKwordm9pZCB5YW1sX2VtaXR0ZXJfc2V0X3dpZHRoKHN0cnVjdCB5YW1s X2VtaXR0ZXIgKmVtaXR0ZXIsIGludCB3aWR0aCkKK3sKKwlpZiAoIWVtaXR0ZXIpCisJCXJldHVy bjsKKworCWVtaXR0ZXItPmJlc3Rfd2lkdGggPSAod2lkdGggPj0gMCkgPyB3aWR0aCA6IC0xOwor fQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfc2V0X3dpZHRoKTsKKwordm9pZCB5YW1sX2Vt aXR0ZXJfc2V0X3VuaWNvZGUoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwgYm9vbCB1bmlj b2RlKQoreworCWlmICghZW1pdHRlcikKKwkJcmV0dXJuOworCisJZW1pdHRlci0+dW5pY29kZSA9 IHVuaWNvZGU7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfZW1pdHRlcl9zZXRfdW5pY29kZSk7CisK K3ZvaWQgeWFtbF9lbWl0dGVyX3NldF9pbmRlbnQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRl ciwgaW50IGluZGVudCkKK3sKKwlpZiAoIWVtaXR0ZXIpCisJCXJldHVybjsKKworCWVtaXR0ZXIt PmJlc3RfaW5kZW50ID0gKDEgPCBpbmRlbnQgJiYgaW5kZW50IDwgMTApID8gaW5kZW50IDogMjsK K30KK0VYUE9SVF9TWU1CT0woeWFtbF9lbWl0dGVyX3NldF9pbmRlbnQpOworCit2b2lkIHlhbWxf ZW1pdHRlcl9zZXRfY2Fub25pY2FsKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIsIGJvb2wg Y2Fub25pY2FsKQoreworCWlmICghZW1pdHRlcikKKwkJcmV0dXJuOworCisJZW1pdHRlci0+Y2Fu b25pY2FsID0gY2Fub25pY2FsOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2VtaXR0ZXJfc2V0X2Nh bm9uaWNhbCk7CisKK3ZvaWQgeWFtbF9lbWl0dGVyX3NldF9vdXRwdXQoc3RydWN0IHlhbWxfZW1p dHRlciAqZW1pdHRlciwKKwkJCSAgICAgeWFtbF93cml0ZV90IGhhbmRsZXIsCisJCQkgICAgIHZv aWQgKmRhdGEpCit7CisJaWYgKCFlbWl0dGVyKQorCQlyZXR1cm47CisKKwllbWl0dGVyLT53cml0 ZV9oYW5kbGVyID0gaGFuZGxlcjsKKwllbWl0dGVyLT53cml0ZV9kYXRhID0gZGF0YTsKK30KK0VY UE9SVF9TWU1CT0woeWFtbF9lbWl0dGVyX3NldF9vdXRwdXQpOwpkaWZmIC0tZ2l0IGEvbGliL3lh bWwveWFtbC1lbWl0dGVyLmggYi9saWIveWFtbC95YW1sLWVtaXR0ZXIuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE4NzA4YmM2M2YyOQotLS0gL2Rldi9udWxsCisr KyBiL2xpYi95YW1sL3lhbWwtZW1pdHRlci5oCkBAIC0wLDAgKzEsMTQwIEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTYg S2lyaWxsIFNpbW9ub3YKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5IEluZ3kgZMO2dCBOZXQK KyAqIENvcHlyaWdodCAoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYg WUFNTF9FTUlUVEVSX0gKKyNkZWZpbmUgWUFNTF9FTUlUVEVSX0gKKworI2luY2x1ZGUgPGxpbnV4 L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC95YW1sLmg+ CisKK2VudW0geWFtbF9lbWl0dGVyX3N0YXRlIHsKKwlFTUlUX1NUUkVBTV9TVEFSVF9TVEFURSwK KwlFTUlUX0ZJUlNUX0RPQ1VNRU5UX1NUQVJUX1NUQVRFLAorCUVNSVRfRE9DVU1FTlRfU1RBUlRf U1RBVEUsCisJRU1JVF9ET0NVTUVOVF9DT05URU5UX1NUQVRFLAorCUVNSVRfRE9DVU1FTlRfRU5E X1NUQVRFLAorCUVNSVRfRkxPV19TRVFVRU5DRV9GSVJTVF9JVEVNX1NUQVRFLAorCUVNSVRfRkxP V19TRVFVRU5DRV9JVEVNX1NUQVRFLAorCUVNSVRfRkxPV19NQVBQSU5HX0ZJUlNUX0tFWV9TVEFU RSwKKwlFTUlUX0ZMT1dfTUFQUElOR19LRVlfU1RBVEUsCisJRU1JVF9GTE9XX01BUFBJTkdfU0lN UExFX1ZBTFVFX1NUQVRFLAorCUVNSVRfRkxPV19NQVBQSU5HX1ZBTFVFX1NUQVRFLAorCUVNSVRf QkxPQ0tfU0VRVUVOQ0VfRklSU1RfSVRFTV9TVEFURSwKKwlFTUlUX0JMT0NLX1NFUVVFTkNFX0lU RU1fU1RBVEUsCisJRU1JVF9CTE9DS19NQVBQSU5HX0ZJUlNUX0tFWV9TVEFURSwKKwlFTUlUX0JM T0NLX01BUFBJTkdfS0VZX1NUQVRFLAorCUVNSVRfQkxPQ0tfTUFQUElOR19TSU1QTEVfVkFMVUVf U1RBVEUsCisJRU1JVF9CTE9DS19NQVBQSU5HX1ZBTFVFX1NUQVRFLAorCUVNSVRfRU5EX1NUQVRF Cit9OworCitzdHJ1Y3QgeWFtbF9hbmNob3JzIHsKKwlpbnQgcmVmZXJlbmNlczsKKwlpbnQgYW5j aG9yOworCWludCBzZXJpYWxpemVkOworfTsKKworc3RydWN0IHlhbWxfZW1pdHRlciB7CisJaW50 IGVycm5vOworCWNvbnN0IGNoYXIgKnByb2JsZW07CisJZ2ZwX3QgZ2ZwOworCisJeWFtbF93cml0 ZV90IHdyaXRlX2hhbmRsZXI7CisJdm9pZCAqd3JpdGVfZGF0YTsKKworCXVuaW9uIHsKKwkJc3Ry dWN0IHsKKwkJCXU4ICpidWZmZXI7CisJCQlzaXplX3Qgc2l6ZTsKKwkJCXNpemVfdCAqc2l6ZV93 cml0dGVuOworCQl9IHN0cmluZzsKKwl9IG91dHB1dDsKKworCXN0cnVjdCB7CisJCWNoYXIgKnN0 YXJ0OworCQljaGFyICplbmQ7CisJCWNoYXIgKnBvczsKKwkJY2hhciAqbGFzdDsKKwl9IGJ1ZjsK KworCWludCBjYW5vbmljYWw7CisJaW50IGJlc3RfaW5kZW50OworCWludCBiZXN0X3dpZHRoOwor CWludCB1bmljb2RlOworCisJc3RydWN0IHsKKwkJZW51bSB5YW1sX2VtaXR0ZXJfc3RhdGUgKnN0 YXJ0OworCQllbnVtIHlhbWxfZW1pdHRlcl9zdGF0ZSAqZW5kOworCQllbnVtIHlhbWxfZW1pdHRl cl9zdGF0ZSAqdG9wOworCX0gc3RhdGVzOworCisJZW51bSB5YW1sX2VtaXR0ZXJfc3RhdGUgc3Rh dGU7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50czsKKwlpbnQgbnVtX2V2ZW50czsKKworCXN0 cnVjdCB7CisJCWludCAqc3RhcnQ7CisJCWludCAqZW5kOworCQlpbnQgKnRvcDsKKwl9IGluZGVu dHM7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICpzdGFydDsKKwkJ c3RydWN0IHlhbWxfdGFnX2RpcmVjdGl2ZSAqZW5kOworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0 aXZlICp0b3A7CisJfSB0YWdzOworCisJaW50IGluZGVudDsKKwlpbnQgZmxvd19sZXZlbDsKKwor CWludCByb290X2NvbnRleHQ7CisJaW50IHNlcXVlbmNlX2NvbnRleHQ7CisJaW50IG1hcHBpbmdf Y29udGV4dDsKKwlpbnQgc2ltcGxlX2tleV9jb250ZXh0OworCisJaW50IGNvbHVtbjsKKwlpbnQg d2hpdGVzcGFjZTsKKwlpbnQgaW5kZW50aW9uOworCWludCBvcGVuX2VuZGVkOworCisJLyoqIEFu Y2hvciBhbmFseXNpcy4gKi8KKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICphbmNob3I7CisJCXNp emVfdCBhbmNob3JfbGVuZ3RoOworCQlpbnQgYWxpYXM7CisJfSBhbmNob3JfZGF0YTsKKworCS8q KiBUYWcgYW5hbHlzaXMuICovCisJc3RydWN0IHsKKwkJY29uc3QgY2hhciAqaGFuZGxlOworCQlz aXplX3QgaGFuZGxlX2xlbmd0aDsKKwkJY29uc3QgY2hhciAqc3VmZml4OworCQlzaXplX3Qgc3Vm Zml4X2xlbmd0aDsKKwl9IHRhZ19kYXRhOworCisJLyoqIFNjYWxhciBhbmFseXNpcy4gKi8KKwlz dHJ1Y3QgeworCQljb25zdCBjaGFyICp2YWx1ZTsKKwkJc2l6ZV90IGxlbmd0aDsKKwkJaW50IG11 bHRpbGluZTsKKwkJaW50IGZsb3dfcGxhaW5fYWxsb3dlZDsKKwkJaW50IGJsb2NrX3BsYWluX2Fs bG93ZWQ7CisJCWludCBzaW5nbGVfcXVvdGVkX2FsbG93ZWQ7CisJCWludCBibG9ja19hbGxvd2Vk OworCQllbnVtIHlhbWxfc2NhbGFyX3N0eWxlIHN0eWxlOworCX0gc2NhbGFyX2RhdGE7CisKKwlp bnQgb3BlbmVkOworCWludCBjbG9zZWQ7CisKKwlzdHJ1Y3QgeWFtbF9hbmNob3JzICphbmNob3Jz OworCWludCBsYXN0X2FuY2hvcl9pZDsKK307CisKKyNlbmRpZiAvKiBZQU1MX0VNSVRURVJfSCAq LwpkaWZmIC0tZ2l0IGEvbGliL3lhbWwveWFtbC1ldmVudHMuYyBiL2xpYi95YW1sL3lhbWwtZXZl bnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZGM3ZWQ4ODdk NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIveWFtbC95YW1sLWV2ZW50cy5jCkBAIC0wLDAgKzEs NDI0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0 IChjKSAyMDA2LTIwMTYgS2lyaWxsIFNpbW9ub3YKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5 IEluZ3kgZMO2dCBOZXQKKyAqIENvcHlyaWdodCAoYykgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgor ICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC95YW1sLmg+CisjaW5j bHVkZSA8bGludXgveWFtbC1ldmVudHMuaD4KKworc3RhdGljIGJvb2wgY2hlY2tfdXRmOChjb25z dCBjaGFyICpwb3MsIHNpemVfdCBsZW5ndGgpCit7CisJY29uc3QgY2hhciAqZW5kID0gcG9zICsg bGVuZ3RoOworCisJd2hpbGUgKHBvcyA8IGVuZCkgeworCQl1OCBvY3RldCA9IHBvc1swXTsKKwkJ dW5zaWduZWQgaW50IHdpZHRoOworCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisJCXNpemVfdCBrOwor CisJCXdpZHRoID0gKG9jdGV0ICYgMHg4MCkgPT0gMHgwMCA/IDEgOgorCQkJKG9jdGV0ICYgMHhF MCkgPT0gMHhDMCA/IDIgOgorCQkJKG9jdGV0ICYgMHhGMCkgPT0gMHhFMCA/IDMgOgorCQkJKG9j dGV0ICYgMHhGOCkgPT0gMHhGMCA/IDQgOiAwOworCQl2YWx1ZSA9IChvY3RldCAmIDB4ODApID09 IDB4MDAgPyBvY3RldCAmIDB4N0YgOgorCQkJKG9jdGV0ICYgMHhFMCkgPT0gMHhDMCA/IG9jdGV0 ICYgMHgxRiA6CisJCQkob2N0ZXQgJiAweEYwKSA9PSAweEUwID8gb2N0ZXQgJiAweDBGIDoKKwkJ CShvY3RldCAmIDB4RjgpID09IDB4RjAgPyBvY3RldCAmIDB4MDcgOiAwOworCQlpZiAoIXdpZHRo KQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChwb3MgKyB3aWR0aCA+IGVuZCkKKwkJCXJldHVy biBmYWxzZTsKKworCQlmb3IgKGsgPSAxOyBrIDwgd2lkdGg7IGsrKykgeworCQkJb2N0ZXQgPSBw b3Nba107CisJCQlpZiAoKG9jdGV0ICYgMHhDMCkgIT0gMHg4MCkKKwkJCQlyZXR1cm4gZmFsc2U7 CisKKwkJCXZhbHVlID0gKHZhbHVlIDw8IDYpICsgKG9jdGV0ICYgMHgzRik7CisJCX0KKworCQlp ZiAoISh3aWR0aCA9PSAxIHx8CisJCSAgICAgICh3aWR0aCA9PSAyICYmIHZhbHVlID49IDB4ODAp IHx8CisJCSAgICAgICh3aWR0aCA9PSAzICYmIHZhbHVlID49IDB4ODAwKSB8fAorCQkgICAgICAo d2lkdGggPT0gNCAmJiB2YWx1ZSA+PSAweDEwMDAwKSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJ cG9zICs9IHdpZHRoOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IHlh bWxfZXZlbnQgKnlhbWxfZXZlbnRfY3JlYXRlKGludCB0eXBlLCBnZnBfdCBnZnApCit7CisJc3Ry dWN0IHlhbWxfZXZlbnQgKmV2OworCisJZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBnZnApOwor CWlmIChldikKKwkJZXYtPnR5cGUgPSB0eXBlOworCisJcmV0dXJuIGV2OworfQorCitzdGF0aWMg dm9pZCB5YW1sX2V2ZW50X2ZyZWUoc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50KQoreworCWtmcmVl KGV2ZW50KTsKK30KKworc3RydWN0IHlhbWxfZXZlbnQgKnlhbWxfc3RyZWFtX3N0YXJ0X2V2ZW50 X2NyZWF0ZShnZnBfdCBnZnApCit7CisJcmV0dXJuIHlhbWxfZXZlbnRfY3JlYXRlKFlBTUxfU1RS RUFNX1NUQVJUX0VWRU5ULCBnZnApOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX3N0cmVhbV9zdGFy dF9ldmVudF9jcmVhdGUpOworCitzdHJ1Y3QgeWFtbF9ldmVudCAqeWFtbF9zdHJlYW1fZW5kX2V2 ZW50X2NyZWF0ZShnZnBfdCBnZnApCit7CisJcmV0dXJuIHlhbWxfZXZlbnRfY3JlYXRlKFlBTUxf U1RSRUFNX0VORF9FVkVOVCwgZ2ZwKTsKK30KK0VYUE9SVF9TWU1CT0woeWFtbF9zdHJlYW1fZW5k X2V2ZW50X2NyZWF0ZSk7CisKK3N0cnVjdCB5YW1sX2V2ZW50ICoKK3lhbWxfZG9jdW1lbnRfc3Rh cnRfZXZlbnRfY3JlYXRlKHN0cnVjdCB5YW1sX3ZlcnNpb25fZGlyZWN0aXZlICp2ZXJzaW9uLAor CQkJCSBzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICpzdGFydCwKKwkJCQkgc3RydWN0IHlhbWxf dGFnX2RpcmVjdGl2ZSAqZW5kLAorCQkJCSBpbnQgaW1wbGljaXQsCisJCQkJIGdmcF90IGdmcCkK K3sKKwlzdHJ1Y3QgeWFtbF92ZXJzaW9uX2RpcmVjdGl2ZSAqdmVyc2lvbl9jb3B5ID0gTlVMTDsK KwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICpzdGFydDsKKwkJc3RydWN0 IHlhbWxfdGFnX2RpcmVjdGl2ZSAqZW5kOworCQlzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlICp0 b3A7CisJfSBjb3B5ID0ge307CisJc3RydWN0IHlhbWxfdGFnX2RpcmVjdGl2ZSB2YWx1ZSA9IHt9 OworCXN0cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKworCWlmICghKChzdGFydCAmJiBlbmQpIHx8 IHN0YXJ0ID09IGVuZCkpCisJCXJldHVybiBOVUxMOworCisJZXZlbnQgPSB5YW1sX2V2ZW50X2Ny ZWF0ZShZQU1MX0RPQ1VNRU5UX1NUQVJUX0VWRU5ULCBnZnApOworCWlmICghZXZlbnQpCisJCXJl dHVybiBOVUxMOworCisJaWYgKHZlcnNpb24pIHsKKwkJdmVyc2lvbl9jb3B5ID0ga21lbWR1cCh2 ZXJzaW9uLCBzaXplb2YoKnZlcnNpb24pLCBnZnApOworCQlpZiAoIXZlcnNpb25fY29weSkKKwkJ CWdvdG8gZXJyb3I7CisJfQorCisjaWYgMAorCWlmIChzdGFydCAhPSBlbmQpIHsKKwkJc3RydWN0 IHlhbWxfdGFnX2RpcmVjdGl2ZSAqdGFnOworCQlzdHJ1Y3QgeworCQkJZW51bSB5YW1sX2Vycm9y IGVycm9yOworCQl9IGNvbnRleHQ7CisKKwkJaWYgKCFTVEFDS19JTklUKCZjb250ZXh0LCBjb3B5 LCBzdHJ1Y3QgeWFtbF90YWdfZGlyZWN0aXZlKikpCisJCQlnb3RvIGVycm9yOworCisJCWZvciAo dGFnID0gc3RhcnQ7IHRhZyAhPSBlbmQ7IHRhZysrKSB7CisJCQlpZiAoIWNoZWNrX3V0ZjgodGFn LT5oYW5kbGUsIHN0cmxlbih0YWctPmhhbmRsZSkpKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCWlm ICghY2hlY2tfdXRmOCh0YWctPnByZWZpeCwgc3RybGVuKHRhZy0+cHJlZml4KSkpCisJCQkJZ290 byBlcnJvcjsKKworCQkJdmFsdWUuaGFuZGxlID0ga3N0cmR1cCh0YWctPmhhbmRsZSwgZ2ZwKTsK KwkJCXZhbHVlLnByZWZpeCA9IGtzdHJkdXAodGFnLT5wcmVmaXgsIGdmcCk7CisJCQlpZiAoIXZh bHVlLmhhbmRsZSB8fCAhdmFsdWUucHJlZml4KQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCWlmICgh UFVTSCgmY29udGV4dCwgY29weSwgdmFsdWUpKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCXZhbHVl LmhhbmRsZSA9IE5VTEw7CisJCQl2YWx1ZS5wcmVmaXggPSBOVUxMOworCQl9CisJfQorI2VuZGlm CisKKwlldmVudC0+dHlwZSA9IFlBTUxfRE9DVU1FTlRfU1RBUlRfRVZFTlQ7CisJZXZlbnQtPmRv Y3VtZW50X3N0YXJ0LnZlcnNpb24gPSB2ZXJzaW9uX2NvcHk7CisJZXZlbnQtPmRvY3VtZW50X3N0 YXJ0LnRhZ3Muc3RhcnQgPSBjb3B5LnN0YXJ0OworCWV2ZW50LT5kb2N1bWVudF9zdGFydC50YWdz LmVuZCA9IGNvcHkudG9wOworCWV2ZW50LT5kb2N1bWVudF9zdGFydC5pbXBsaWNpdCA9IGltcGxp Y2l0OworCisJcmV0dXJuIGV2ZW50OworCitlcnJvcjoKKwlrZnJlZSh2ZXJzaW9uX2NvcHkpOwor I2lmIDAKKwl3aGlsZSAoIVNUQUNLX0VNUFRZKGNvbnRleHQsIGNvcHkpKSB7CisJCXN0cnVjdCB5 YW1sX3RhZ19kaXJlY3RpdmUgdmFsdWUgPSBQT1AoY29udGV4dCwgY29weSk7CisKKwkJa2ZyZWUo dmFsdWUuaGFuZGxlKTsKKwkJa2ZyZWUodmFsdWUucHJlZml4KTsKKwl9CisJU1RBQ0tfREVMKGNv bnRleHQsIGNvcHkpOworI2VuZGlmCisJa2ZyZWUodmFsdWUuaGFuZGxlKTsKKwlrZnJlZSh2YWx1 ZS5wcmVmaXgpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2RvY3VtZW50 X3N0YXJ0X2V2ZW50X2NyZWF0ZSk7CisKK3N0cnVjdCB5YW1sX2V2ZW50ICoKK3lhbWxfZG9jdW1l bnRfZW5kX2V2ZW50X2NyZWF0ZShpbnQgaW1wbGljaXQsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qg eWFtbF9ldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IHlhbWxfZXZlbnRfY3JlYXRlKFlBTUxfRE9D VU1FTlRfRU5EX0VWRU5ULCBnZnApOworCWlmIChldmVudCkKKwkJZXZlbnQtPmRvY3VtZW50X2Vu ZC5pbXBsaWNpdCA9IGltcGxpY2l0OworCisJcmV0dXJuIGV2ZW50OworfQorRVhQT1JUX1NZTUJP TCh5YW1sX2RvY3VtZW50X2VuZF9ldmVudF9jcmVhdGUpOworCitzdHJ1Y3QgeWFtbF9ldmVudCAq Cit5YW1sX2FsaWFzX2V2ZW50X2NyZWF0ZShjb25zdCBjaGFyICphbmNob3IsIGdmcF90IGdmcCkK K3sKKwlzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIWFuY2hvciB8fCAhY2hlY2tf dXRmOChhbmNob3IsIHN0cmxlbihhbmNob3IpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlldmVudCA9 IHlhbWxfZXZlbnRfY3JlYXRlKFlBTUxfQUxJQVNfRVZFTlQsIGdmcCk7CisJaWYgKCFldmVudCkK KwkJcmV0dXJuIE5VTEw7CisKKwlldmVudC0+YWxpYXMuYW5jaG9yID0ga3N0cmR1cChhbmNob3Is IGdmcCk7CisJaWYgKCFldmVudC0+YWxpYXMuYW5jaG9yKSB7CisJCXlhbWxfZXZlbnRfZnJlZShl dmVudCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBldmVudDsKK30KK0VYUE9SVF9T WU1CT0woeWFtbF9hbGlhc19ldmVudF9jcmVhdGUpOworCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5 YW1sX3NjYWxhcl9ldmVudF9jcmVhdGUoY29uc3QgY2hhciAqYW5jaG9yLCBjb25zdCBjaGFyICp0 YWcsCisJCQkgY29uc3QgY2hhciAqdmFsdWUsIHNzaXplX3QgbGVuZ3RoLCBib29sIHN0ZWFsLAor CQkJIGludCBwbGFpbl9pbXBsaWNpdCwgaW50IHF1b3RlZF9pbXBsaWNpdCwKKwkJCSBlbnVtIHlh bWxfc2NhbGFyX3N0eWxlIHN0eWxlLAorCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgeWFtbF9l dmVudCAqZXZlbnQ7CisJY2hhciAqYW5jaG9yX2NvcHkgPSBOVUxMOworCWNoYXIgKnRhZ19jb3B5 ID0gTlVMTDsKKworCWlmICghdmFsdWUpCisJCXJldHVybiBOVUxMOworCisJaWYgKGFuY2hvcikg eworCQlpZiAoIWNoZWNrX3V0ZjgoYW5jaG9yLCBzdHJsZW4oYW5jaG9yKSkpCisJCQlnb3RvIGVy cm9yOworCisJCWFuY2hvcl9jb3B5ID0ga3N0cmR1cChhbmNob3IsIGdmcCk7CisJCWlmICghYW5j aG9yX2NvcHkpCisJCQlnb3RvIGVycm9yOworCX0KKworCWlmICh0YWcpIHsKKwkJaWYgKCFjaGVj a191dGY4KHRhZywgc3RybGVuKHRhZykpKQorCQkJZ290byBlcnJvcjsKKworCQl0YWdfY29weSA9 IGtzdHJkdXAodGFnLCBnZnApOworCQlpZiAoIXRhZ19jb3B5KQorCQkJZ290byBlcnJvcjsKKwl9 CisKKwlpZiAobGVuZ3RoIDwgMCkKKwkJbGVuZ3RoID0gc3RybGVuKHZhbHVlKTsKKworCWlmICgh Y2hlY2tfdXRmOCh2YWx1ZSwgbGVuZ3RoKSkKKwkJZ290byBlcnJvcjsKKworCWV2ZW50ID0geWFt bF9ldmVudF9jcmVhdGUoWUFNTF9TQ0FMQVJfRVZFTlQsIGdmcCk7CisJaWYgKCFldmVudCkKKwkJ Z290byBlcnJvcjsKKworCWlmIChzdGVhbCkgeworCQlldmVudC0+c2NhbGFyLnZhbHVlID0gKGNo YXIgKil2YWx1ZTsKKwl9IGVsc2UgeworCQlldmVudC0+c2NhbGFyLnZhbHVlID0ga21lbWR1cCh2 YWx1ZSwgbGVuZ3RoLCBnZnApOworCQlpZiAoIWV2ZW50LT5zY2FsYXIudmFsdWUpIHsKKwkJCXlh bWxfZXZlbnRfZnJlZShldmVudCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCWV2ZW50LT5z Y2FsYXIubGVuZ3RoID0gbGVuZ3RoOworCisJZXZlbnQtPnNjYWxhci5hbmNob3IgPSBhbmNob3Jf Y29weTsKKwlldmVudC0+c2NhbGFyLnRhZyA9IHRhZ19jb3B5OworCWV2ZW50LT5zY2FsYXIucGxh aW5faW1wbGljaXQgPSBwbGFpbl9pbXBsaWNpdDsKKwlldmVudC0+c2NhbGFyLnF1b3RlZF9pbXBs aWNpdCA9IHF1b3RlZF9pbXBsaWNpdDsKKwlldmVudC0+c2NhbGFyLnN0eWxlID0gc3R5bGU7CisJ cmV0dXJuIGV2ZW50OworCitlcnJvcjoKKwlrZnJlZShhbmNob3JfY29weSk7CisJa2ZyZWUodGFn X2NvcHkpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX3NjYWxhcl9ldmVu dF9jcmVhdGUpOworCitzdHJ1Y3QgeWFtbF9ldmVudCAqCit5YW1sX3NlcXVlbmNlX3N0YXJ0X2V2 ZW50X2NyZWF0ZShjb25zdCBjaGFyICphbmNob3IsCisJCQkJIGNvbnN0IGNoYXIgKnRhZywKKwkJ CQkgaW50IGltcGxpY2l0LAorCQkJCSBlbnVtIHlhbWxfc2VxdWVuY2Vfc3R5bGUgc3R5bGUsCisJ CQkJIGdmcF90IGdmcCkKK3sKKwljaGFyICphbmNob3JfY29weSA9IE5VTEw7CisJY2hhciAqdGFn X2NvcHkgPSBOVUxMOworCXN0cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKworCWlmIChhbmNob3Ip IHsKKwkJaWYgKCFjaGVja191dGY4KGFuY2hvciwgc3RybGVuKGFuY2hvcikpKQorCQkJZ290byBl cnJvcjsKKworCQlhbmNob3JfY29weSA9IGtzdHJkdXAoYW5jaG9yLCBnZnApOworCQlpZiAoIWFu Y2hvcl9jb3B5KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAodGFnKSB7CisJCWlmICghY2hl Y2tfdXRmOCh0YWcsIHN0cmxlbih0YWcpKSkKKwkJCWdvdG8gZXJyb3I7CisKKwkJdGFnX2NvcHkg PSBrc3RyZHVwKHRhZywgZ2ZwKTsKKwkJaWYgKCF0YWdfY29weSkKKwkJCWdvdG8gZXJyb3I7CisJ fQorCisJZXZlbnQgPSB5YW1sX2V2ZW50X2NyZWF0ZShZQU1MX1NFUVVFTkNFX1NUQVJUX0VWRU5U LCBnZnApOworCWlmICghZXZlbnQpCisJCWdvdG8gZXJyb3I7CisKKwlldmVudC0+c2VxdWVuY2Vf c3RhcnQuYW5jaG9yID0gYW5jaG9yX2NvcHk7CisJZXZlbnQtPnNlcXVlbmNlX3N0YXJ0LnRhZyA9 IHRhZ19jb3B5OworCWV2ZW50LT5zZXF1ZW5jZV9zdGFydC5pbXBsaWNpdCA9IGltcGxpY2l0Owor CWV2ZW50LT5zZXF1ZW5jZV9zdGFydC5zdHlsZSA9IHN0eWxlOworCXJldHVybiBldmVudDsKKwor ZXJyb3I6CisJa2ZyZWUoYW5jaG9yX2NvcHkpOworCWtmcmVlKHRhZ19jb3B5KTsKKwlyZXR1cm4g TlVMTDsKK30KK0VYUE9SVF9TWU1CT0woeWFtbF9zZXF1ZW5jZV9zdGFydF9ldmVudF9jcmVhdGUp OworCitzdHJ1Y3QgeWFtbF9ldmVudCAqeWFtbF9zZXF1ZW5jZV9lbmRfZXZlbnRfY3JlYXRlKGdm cF90IGdmcCkKK3sKKwlyZXR1cm4geWFtbF9ldmVudF9jcmVhdGUoWUFNTF9TRVFVRU5DRV9FTkRf RVZFTlQsIGdmcCk7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfc2VxdWVuY2VfZW5kX2V2ZW50X2Ny ZWF0ZSk7CisKK3N0cnVjdCB5YW1sX2V2ZW50ICoKK3lhbWxfbWFwcGluZ19zdGFydF9ldmVudF9j cmVhdGUoY29uc3QgY2hhciAqYW5jaG9yLAorCQkJCWNvbnN0IGNoYXIgKnRhZywKKwkJCQlpbnQg aW1wbGljaXQsCisJCQkJZW51bSB5YW1sX21hcHBpbmdfc3R5bGUgc3R5bGUsCisJCQkJZ2ZwX3Qg Z2ZwKQoreworCWNoYXIgKmFuY2hvcl9jb3B5ID0gTlVMTDsKKwljaGFyICp0YWdfY29weSA9IE5V TEw7CisJc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50OworCisJaWYgKGFuY2hvcikgeworCQlpZiAo IWNoZWNrX3V0ZjgoYW5jaG9yLCBzdHJsZW4oYW5jaG9yKSkpCisJCQlnb3RvIGVycm9yOworCisJ CWFuY2hvcl9jb3B5ID0ga3N0cmR1cChhbmNob3IsIGdmcCk7CisJCWlmICghYW5jaG9yX2NvcHkp CisJCQlnb3RvIGVycm9yOworCX0KKworCWlmICh0YWcpIHsKKwkJaWYgKCFjaGVja191dGY4KHRh Zywgc3RybGVuKHRhZykpKQorCQkJZ290byBlcnJvcjsKKworCQl0YWdfY29weSA9IGtzdHJkdXAo dGFnLCBnZnApOworCQlpZiAoIXRhZ19jb3B5KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlldmVu dCA9IHlhbWxfZXZlbnRfY3JlYXRlKFlBTUxfTUFQUElOR19TVEFSVF9FVkVOVCwgZ2ZwKTsKKwlp ZiAoIWV2ZW50KQorCQlnb3RvIGVycm9yOworCisJZXZlbnQtPm1hcHBpbmdfc3RhcnQuYW5jaG9y ID0gYW5jaG9yX2NvcHk7CisJZXZlbnQtPm1hcHBpbmdfc3RhcnQudGFnID0gdGFnX2NvcHk7CisJ ZXZlbnQtPm1hcHBpbmdfc3RhcnQuaW1wbGljaXQgPSBpbXBsaWNpdDsKKwlldmVudC0+bWFwcGlu Z19zdGFydC5zdHlsZSA9IHN0eWxlOworCXJldHVybiBldmVudDsKKworZXJyb3I6CisJa2ZyZWUo YW5jaG9yX2NvcHkpOworCWtmcmVlKHRhZ19jb3B5KTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9S VF9TWU1CT0woeWFtbF9tYXBwaW5nX3N0YXJ0X2V2ZW50X2NyZWF0ZSk7CisKK3N0cnVjdCB5YW1s X2V2ZW50ICp5YW1sX21hcHBpbmdfZW5kX2V2ZW50X2NyZWF0ZShnZnBfdCBnZnApCit7CisJcmV0 dXJuIHlhbWxfZXZlbnRfY3JlYXRlKFlBTUxfTUFQUElOR19FTkRfRVZFTlQsIGdmcCk7Cit9CitF WFBPUlRfU1lNQk9MKHlhbWxfbWFwcGluZ19lbmRfZXZlbnRfY3JlYXRlKTsKKwordm9pZCB5YW1s X2V2ZW50X2RlbGV0ZShzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHlhbWxf dGFnX2RpcmVjdGl2ZSAqdGFnOworCisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJc3dpdGNo IChldmVudC0+dHlwZSkgeworCWNhc2UgWUFNTF9ET0NVTUVOVF9TVEFSVF9FVkVOVDoKKwkJa2Zy ZWUoZXZlbnQtPmRvY3VtZW50X3N0YXJ0LnZlcnNpb24pOworCQlmb3IgKHRhZyA9IGV2ZW50LT5k b2N1bWVudF9zdGFydC50YWdzLnN0YXJ0OworCQkgICAgIHRhZyAhPSBldmVudC0+ZG9jdW1lbnRf c3RhcnQudGFncy5lbmQ7CisJCSAgICAgdGFnKyspIHsKKwkJCWtmcmVlKHRhZy0+aGFuZGxlKTsK KwkJCWtmcmVlKHRhZy0+cHJlZml4KTsKKwkJfQorCQlrZnJlZShldmVudC0+ZG9jdW1lbnRfc3Rh cnQudGFncy5zdGFydCk7CisJCWJyZWFrOworCisJY2FzZSBZQU1MX0FMSUFTX0VWRU5UOgorCQlr ZnJlZShldmVudC0+YWxpYXMuYW5jaG9yKTsKKwkJYnJlYWs7CisKKwljYXNlIFlBTUxfU0NBTEFS X0VWRU5UOgorCQlrZnJlZShldmVudC0+c2NhbGFyLmFuY2hvcik7CisJCWtmcmVlKGV2ZW50LT5z Y2FsYXIudGFnKTsKKwkJa2ZyZWUoZXZlbnQtPnNjYWxhci52YWx1ZSk7CisJCWJyZWFrOworCisJ Y2FzZSBZQU1MX1NFUVVFTkNFX1NUQVJUX0VWRU5UOgorCQlrZnJlZShldmVudC0+c2VxdWVuY2Vf c3RhcnQuYW5jaG9yKTsKKwkJa2ZyZWUoZXZlbnQtPnNlcXVlbmNlX3N0YXJ0LnRhZyk7CisJCWJy ZWFrOworCisJY2FzZSBZQU1MX01BUFBJTkdfU1RBUlRfRVZFTlQ6CisJCWtmcmVlKGV2ZW50LT5t YXBwaW5nX3N0YXJ0LmFuY2hvcik7CisJCWtmcmVlKGV2ZW50LT5tYXBwaW5nX3N0YXJ0LnRhZyk7 CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJeWFtbF9ldmVudF9mcmVl KGV2ZW50KTsKK30KK0VYUE9SVF9TWU1CT0woeWFtbF9ldmVudF9kZWxldGUpOworCitNT0RVTEVf TElDRU5TRSgiRHVhbCBNSVQvR1BMIik7CmRpZmYgLS1naXQgYS9saWIveWFtbC95YW1sLXNpbXBs ZS5jIGIvbGliL3lhbWwveWFtbC1zaW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmNmZGUyNjFmMDllOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi95YW1sL3lh bWwtc2ltcGxlLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLwor CisjaW5jbHVkZSA8bGludXgvYXNjaWk4NS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgor I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC95YW1sLmg+CisjaW5jbHVk ZSA8bGludXgveWFtbC1ldmVudHMuaD4KKworI2luY2x1ZGUgInlhbWwtZW1pdHRlci5oIgorCitz dGF0aWMgc3RydWN0IHlhbWxfZW1pdHRlciAqX195YW1sX29wZW4oc3RydWN0IHlhbWxfZW1pdHRl ciAqZW1pdHRlcikKK3sKKwlzdHJ1Y3QgeWFtbF9ldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IHlh bWxfc3RyZWFtX3N0YXJ0X2V2ZW50X2NyZWF0ZShlbWl0dGVyLT5nZnApOworCXlhbWxfZW1pdHRl cl9lbWl0KGVtaXR0ZXIsIGV2ZW50KTsKKworCWV2ZW50ID0geWFtbF9kb2N1bWVudF9zdGFydF9l dmVudF9jcmVhdGUoTlVMTCwgTlVMTCwgTlVMTCwgdHJ1ZSwKKwkJCQkJCSBlbWl0dGVyLT5nZnAp OworCXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0ZXIsIGV2ZW50KTsKKworCXJldHVybiBlbWl0dGVy OworfQorCitzdHJ1Y3QgeWFtbF9lbWl0dGVyICp5YW1sX29wZW4oeWFtbF93cml0ZV90IGhhbmRs ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlcjsKKworCWVt aXR0ZXIgPSB5YW1sX2VtaXR0ZXJfY3JlYXRlKEdGUF9LRVJORUwpOworCWlmICghZW1pdHRlcikK KwkJcmV0dXJuIE5VTEw7CisKKwl5YW1sX2VtaXR0ZXJfc2V0X291dHB1dChlbWl0dGVyLCBoYW5k bGVyLCBkYXRhKTsKKwlyZXR1cm4gX195YW1sX29wZW4oZW1pdHRlcik7Cit9CitFWFBPUlRfU1lN Qk9MKHlhbWxfb3Blbik7CisKK3N0cnVjdCB5YW1sX2VtaXR0ZXIgKnlhbWxfb3Blbl9maWxlKHN0 cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyOworCisJ ZW1pdHRlciA9IHlhbWxfZW1pdHRlcl9jcmVhdGUoR0ZQX0tFUk5FTCk7CisJaWYgKCFlbWl0dGVy KQorCQlyZXR1cm4gTlVMTDsKKworCXlhbWxfZW1pdHRlcl9zZXRfc2VxX2ZpbGUoZW1pdHRlciwg bSk7CisJcmV0dXJuIF9feWFtbF9vcGVuKGVtaXR0ZXIpOworfQorRVhQT1JUX1NZTUJPTCh5YW1s X29wZW5fZmlsZSk7CisKK3N0cnVjdCB5YW1sX2VtaXR0ZXIgKnlhbWxfb3Blbl9zdHJpbmcoY2hh ciAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgKm91dCkKK3sKKwlzdHJ1Y3QgeWFtbF9lbWl0dGVy ICplbWl0dGVyOworCisJZW1pdHRlciA9IHlhbWxfZW1pdHRlcl9jcmVhdGUoR0ZQX0tFUk5FTCk7 CisJaWYgKCFlbWl0dGVyKQorCQlyZXR1cm4gTlVMTDsKKworCXlhbWxfZW1pdHRlcl9zZXRfc3Ry aW5nKGVtaXR0ZXIsIGJ1ZiwgbGVuLCBvdXQpOworCXJldHVybiBfX3lhbWxfb3BlbihlbWl0dGVy KTsKK30KK0VYUE9SVF9TWU1CT0woeWFtbF9vcGVuX3N0cmluZyk7CisKK3ZvaWQgX195YW1sX21h cHBpbmdfc3RhcnQoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwKKwkJCSAgZW51bSB5YW1s X21hcHBpbmdfc3R5bGUgc3R5bGUpCit7CisJc3RydWN0IHlhbWxfZXZlbnQgKmV2ZW50OworCisJ ZXZlbnQgPSB5YW1sX21hcHBpbmdfc3RhcnRfZXZlbnRfY3JlYXRlKE5VTEwsIE5VTEwsIHRydWUs IHN0eWxlLAorCQkJCQkJZW1pdHRlci0+Z2ZwKTsKKwl5YW1sX2VtaXR0ZXJfZW1pdChlbWl0dGVy LCBldmVudCk7Cit9CitFWFBPUlRfU1lNQk9MKF9feWFtbF9tYXBwaW5nX3N0YXJ0KTsKKwordm9p ZCB5YW1sX21hcHBpbmdfZW5kKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIpCit7CisJeWFt bF9lbWl0dGVyX2VtaXQoZW1pdHRlciwgeWFtbF9tYXBwaW5nX2VuZF9ldmVudF9jcmVhdGUoZW1p dHRlci0+Z2ZwKSk7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfbWFwcGluZ19lbmQpOworCit2b2lk IF9feWFtbF9zZXF1ZW5jZV9zdGFydChzdHJ1Y3QgeWFtbF9lbWl0dGVyICplbWl0dGVyLAorCQkJ ICAgZW51bSB5YW1sX3NlcXVlbmNlX3N0eWxlIHN0eWxlKQoreworCXN0cnVjdCB5YW1sX2V2ZW50 ICpldmVudDsKKworCWV2ZW50ID0geWFtbF9zZXF1ZW5jZV9zdGFydF9ldmVudF9jcmVhdGUoTlVM TCwgTlVMTCwgdHJ1ZSwgc3R5bGUsCisJCQkJCQkgZW1pdHRlci0+Z2ZwKTsKKwl5YW1sX2VtaXR0 ZXJfZW1pdChlbWl0dGVyLCBldmVudCk7Cit9CitFWFBPUlRfU1lNQk9MKF9feWFtbF9zZXF1ZW5j ZV9zdGFydCk7CisKK3ZvaWQgeWFtbF9zZXF1ZW5jZV9lbmQoc3RydWN0IHlhbWxfZW1pdHRlciAq ZW1pdHRlcikKK3sKKwl5YW1sX2VtaXR0ZXJfZW1pdChlbWl0dGVyLAorCQkJICB5YW1sX3NlcXVl bmNlX2VuZF9ldmVudF9jcmVhdGUoZW1pdHRlci0+Z2ZwKSk7Cit9CitFWFBPUlRfU1lNQk9MKHlh bWxfc2VxdWVuY2VfZW5kKTsKKwordm9pZCB5YW1sX2FsaWFzX3ByaW50ZihzdHJ1Y3QgeWFtbF9l bWl0dGVyICplbWl0dGVyLAorCQkgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFf bGlzdCBhcDsKKwljaGFyICpzdHI7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdHIgPSBrdmFz cHJpbnRmKGVtaXR0ZXItPmdmcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXlhbWxfZW1p dHRlcl9lbWl0KGVtaXR0ZXIsIHlhbWxfYWxpYXNfZXZlbnRfY3JlYXRlKHN0ciwgZW1pdHRlci0+ Z2ZwKSk7CisKKwlrZnJlZShzdHIpOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2FsaWFzX3ByaW50 Zik7CisKK3ZvaWQgeWFtbF9zY2FsYXJfcHJpbnRmKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0 ZXIsCisJCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3QgeWFtbF9ldmVudCAqZXZl bnQ7CisJdmFfbGlzdCBhcDsKKwljaGFyICpzdHI7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlz dHIgPSBrdmFzcHJpbnRmKGVtaXR0ZXItPmdmcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwor CWV2ZW50ID0geWFtbF9zY2FsYXJfZXZlbnRfY3JlYXRlKE5VTEwsIE5VTEwsIHN0ciwgLTEsIHRy dWUsCisJCQkJCSB0cnVlLCB0cnVlLCAwLCBlbWl0dGVyLT5nZnApOworCXlhbWxfZW1pdHRlcl9l bWl0KGVtaXR0ZXIsIGV2ZW50KTsKK30KK0VYUE9SVF9TWU1CT0woeWFtbF9zY2FsYXJfcHJpbnRm KTsKKwordm9pZCB5YW1sX3BhaXJfcHJpbnRmKHN0cnVjdCB5YW1sX2VtaXR0ZXIgKmVtaXR0ZXIs CisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0 cnVjdCB5YW1sX2V2ZW50ICpldmVudDsKKwl2YV9saXN0IGFwOworCWNoYXIgKnN0cjsKKworCWV2 ZW50ID0geWFtbF9zY2FsYXJfZXZlbnRfY3JlYXRlKE5VTEwsIE5VTEwsIG5hbWUsIC0xLCBmYWxz ZSwKKwkJCQkJIHRydWUsIHRydWUsIDAsIGVtaXR0ZXItPmdmcCk7CisJeWFtbF9lbWl0dGVyX2Vt aXQoZW1pdHRlciwgZXZlbnQpOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyID0ga3Zhc3By aW50ZihlbWl0dGVyLT5nZnAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlldmVudCA9IHlh bWxfc2NhbGFyX2V2ZW50X2NyZWF0ZShOVUxMLCBOVUxMLCBzdHIsIC0xLCB0cnVlLAorCQkJCQkg dHJ1ZSwgdHJ1ZSwgMCwgZW1pdHRlci0+Z2ZwKTsKKwl5YW1sX2VtaXR0ZXJfZW1pdChlbWl0dGVy LCBldmVudCk7Cit9CitFWFBPUlRfU1lNQk9MKHlhbWxfcGFpcl9wcmludGYpOworCit2b2lkIHlh bWxfYXNjaWk4NV9lbmNvZGUoc3RydWN0IHlhbWxfZW1pdHRlciAqZW1pdHRlciwKKwkJCSBjb25z dCB2b2lkICpkYXRhLCBzaXplX3QgbGVuLCBib29sIGNvbXByZXNzZWQpCit7CisJc3RydWN0IHlh bWxfZXZlbnQgKmV2ZW50OworCWNvbnN0IHUzMiAqc3JjID0gZGF0YTsKKwljaGFyICpidWYsICpk c3Q7CisJaW50IGk7CisKKwlpZiAoIWRhdGEgfHwgIWxlbikKKwkJcmV0dXJuOworCisJYnVmID0g a21hbGxvYyhhc2NpaTg1X2VuY29kZV9sZW4obGVuKSAqIDUsIGVtaXR0ZXItPmdmcCk7CisJaWYg KCFidWYpCisJCXJldHVybjsKKworCWRzdCA9IGJ1ZjsKKwl3aGlsZSAobGVuID4gNCkgeworCQl1 MzIgaW4gPSAqc3JjKys7CisKKwkJaWYgKGluID09IDApIHsKKwkJCSpkc3QrKyA9ICd6JzsKKwkJ fSBlbHNlIHsKKwkJCWZvciAoaSA9IDU7IGktLTsgKSB7CisJCQkJZHN0W2ldID0gJyEnICsgaW4g JSA4NTsKKwkJCQlpbiAvPSA4NTsKKwkJCX0KKwkJCWRzdCArPSA1OworCQl9CisJCWxlbiAtPSA0 OworCX0KKworCWlmIChsZW4pIHsKKwkJdTMyIGluID0gMDsKKworCQltZW1jcHkoJmluLCBzcmMs IGxlbik7CisKKwkJaWYgKGluID09IDApIHsKKwkJCSpkc3QrKyA9ICd6JzsKKwkJfSBlbHNlIHsK KwkJCWZvciAoaSA9IDU7IGktLTsgKSB7CisJCQkJZHN0W2ldID0gJyEnICsgaW4gJSA4NTsKKwkJ CQlpbiAvPSA4NTsKKwkJCX0KKwkJCWRzdCArPSA1OworCQl9CisJfQorCisJZXZlbnQgPSB5YW1s X3NjYWxhcl9ldmVudF9jcmVhdGUoTlVMTCwKKwkJCQkJIGNvbXByZXNzZWQgPyAiYXNjaWk4NS5n eiIgOiAiYXNjaWk4NSIsCisJCQkJCSBidWYsIGRzdCAtIGJ1ZiwgdHJ1ZSwKKwkJCQkJIGZhbHNl LCBmYWxzZSwKKwkJCQkJIFlBTUxfRk9MREVEX1NDQUxBUl9TVFlMRSwKKwkJCQkJIGVtaXR0ZXIt PmdmcCk7CisJeWFtbF9lbWl0dGVyX2VtaXQoZW1pdHRlciwgZXZlbnQpOworfQorRVhQT1JUX1NZ TUJPTCh5YW1sX2FzY2lpODVfZW5jb2RlKTsKKworaW50IHlhbWxfY2xvc2Uoc3RydWN0IHlhbWxf ZW1pdHRlciAqZW1pdHRlciwgY29uc3QgY2hhciAqKnByb2JsZW0pCit7CisJaW50IGVycjsKKwor CXlhbWxfZW1pdHRlcl9lbWl0KGVtaXR0ZXIsCisJCQkgIHlhbWxfZG9jdW1lbnRfZW5kX2V2ZW50 X2NyZWF0ZSh0cnVlLCBHRlBfS0VSTkVMKSk7CisJeWFtbF9lbWl0dGVyX2VtaXQoZW1pdHRlciwK KwkJCSAgeWFtbF9zdHJlYW1fZW5kX2V2ZW50X2NyZWF0ZShHRlBfS0VSTkVMKSk7CisKKwllcnIg PSB5YW1sX2VtaXR0ZXJfZmx1c2goZW1pdHRlciwgcHJvYmxlbSk7CisJeWFtbF9lbWl0dGVyX2Rl c3Ryb3koZW1pdHRlcik7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTCh5YW1sX2Ns b3NlKTsKLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==