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=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, 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 A98CDC3F2D2 for ; Fri, 28 Feb 2020 17:21:04 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 558772072A for ; Fri, 28 Feb 2020 17:21:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="pryu1h49" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 558772072A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51178 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7jJv-0001PF-Gl for qemu-devel@archiver.kernel.org; Fri, 28 Feb 2020 12:21:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58717) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7ime-0006Aq-FQ for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7ima-0007u0-49 for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:40 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:13235) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7imZ-0005U6-DD for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1582908395; x=1614444395; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Y4/IqsG+Ms4TU/Mz2huJFLQhX1HU0mennrKJgnphPTg=; b=pryu1h49Qy0lddbeHnfv1kKwpMhDvKGIdpOwbnB36MSbiOwuqlf4L+jL BDN1r2MKKHRhghbvWuL0NWquMBuxmhhUySgDvXB93oHPZvIXvycUvL23H 23t++3B5MRET9ALO8fAE/aYT2+s3vJI4GFFsj8/5wk9iYpHH9aFT95ZnD o=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 28 Feb 2020 08:44:34 -0800 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 28 Feb 2020 08:44:33 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 97D18FD8; Fri, 28 Feb 2020 10:44:33 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 60/67] Hexagon HVX instruction decoding Date: Fri, 28 Feb 2020 10:43:56 -0600 Message-Id: <1582908244-304-61-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1582908244-304-1-git-send-email-tsimpson@quicinc.com> References: <1582908244-304-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 199.106.114.38 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, Taylor Simpson , philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" U2lnbmVkLW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0K IHRhcmdldC9oZXhhZ29uL21tdmVjL2RlY29kZV9leHRfbW12ZWMuaCB8ICAyNCArKwogdGFyZ2V0 L2hleGFnb24vZGVjb2RlLmMgICAgICAgICAgICAgICAgIHwgIDIzICstCiB0YXJnZXQvaGV4YWdv bi9tbXZlYy9kZWNvZGVfZXh0X21tdmVjLmMgfCA2NzAgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIHRhcmdldC9oZXhhZ29uL3E2dl9kZWNvZGUuYyAgICAgICAgICAgICB8ICAxNCAr CiA0IGZpbGVzIGNoYW5nZWQsIDcyOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL21tdmVjL2RlY29kZV9leHRfbW12ZWMuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL21tdmVjL2RlY29kZV9leHRfbW12ZWMu YwoKZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL21tdmVjL2RlY29kZV9leHRfbW12ZWMuaCBi L3RhcmdldC9oZXhhZ29uL21tdmVjL2RlY29kZV9leHRfbW12ZWMuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi42N2QzZWFkCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L2hl eGFnb24vbW12ZWMvZGVjb2RlX2V4dF9tbXZlYy5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiAg Q29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBB bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisgKi8KKworI2lmbmRlZiBIRVhBR09OX0RFQ09ERV9FWFRfTU1WRUNfSAorI2RlZmlu ZSBIRVhBR09OX0RFQ09ERV9FWFRfTU1WRUNfSAorCitleHRlcm4gaW50IG1tdmVjX2V4dF9kZWNv ZGVfY2hlY2tzKHBhY2tldF90ICpwa3QpOworZXh0ZXJuIGNvbnN0IGNoYXIgKm1tdmVjX2V4dF9k ZWNvZGVfZmluZF9pY2xhc3Nfc2xvdHMoaW50IG9wY29kZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMgYi90YXJnZXQvaGV4YWdvbi9kZWNvZGUuYwppbmRl eCAyMjAxYzIzLi5mY2Y1ZTc1IDEwMDY0NAotLS0gYS90YXJnZXQvaGV4YWdvbi9kZWNvZGUuYwor KysgYi90YXJnZXQvaGV4YWdvbi9kZWNvZGUuYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUg Imluc24uaCIKICNpbmNsdWRlICJtYWNyb3MuaCIKICNpbmNsdWRlICJwcmludGluc24uaCIKKyNp bmNsdWRlICJtbXZlYy9tbXZlYy5oIgorI2luY2x1ZGUgIm1tdmVjL2RlY29kZV9leHRfbW12ZWMu aCIKIAogZW51bSB7CiAgICAgRVhUX0lEWF9ub2V4dCA9IDAsCkBAIC0xNDgsNiArMTUwLDkgQEAg c3RhdGljIHZvaWQgZGVjb2RlX2V4dF9pbml0KHZvaWQpCiAgICAgZm9yIChpID0gRVhUX0lEWF9u b2V4dDsgaSA8IEVYVF9JRFhfbm9leHRfQUZURVI7IGkrKykgewogICAgICAgICBleHRfdHJlZXNb aV0gPSAmZGVjdHJlZV90YWJsZV9ERUNPREVfRVhUX0VYVF9ub2V4dDsKICAgICB9CisgICAgZm9y IChpID0gRVhUX0lEWF9tbXZlYzsgaSA8IEVYVF9JRFhfbW12ZWNfQUZURVI7IGkrKykgeworICAg ICAgICBleHRfdHJlZXNbaV0gPSAmZGVjdHJlZV90YWJsZV9ERUNPREVfRVhUX0VYVF9tbXZlYzsK KyAgICB9CiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTQ0NSw2ICs0NTAsOSBAQCBzdGF0aWMg aW50IGRlY29kZV9zZXRfaW5zbl9hdHRyX2ZpZWxkcyhwYWNrZXRfdCAqcGt0KQogCiAgICAgICAg IGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9TVE9SRSkpIHsKICAgICAgICAgICAgIHBrdC0+aW5z bltpXS5pc19zdG9yZSA9IDE7CisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFf Vk1FTSkpIHsKKyAgICAgICAgICAgICAgICBwa3QtPmluc25baV0uaXNfdm1lbV9zdCA9IDE7Cisg ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChwa3QtPmluc25baV0uc2xvdCA9PSAwKSB7 CiAgICAgICAgICAgICAgICAgcGt0LT5wa3RfaGFzX3N0b3JlX3MwID0gMTsKQEAgLTQ1Nyw2ICs0 NjUsOSBAQCBzdGF0aWMgaW50IGRlY29kZV9zZXRfaW5zbl9hdHRyX2ZpZWxkcyhwYWNrZXRfdCAq cGt0KQogICAgICAgICB9CiAgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9MT0FEKSkg ewogICAgICAgICAgICAgcGt0LT5pbnNuW2ldLmlzX2xvYWQgPSAxOworICAgICAgICAgICAgaWYg KEdFVF9BVFRSSUIob3Bjb2RlLCBBX1ZNRU0pKSAgeworICAgICAgICAgICAgICAgIHBrdC0+aW5z bltpXS5pc192bWVtX2xkID0gMTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBr dC0+aW5zbltpXS5zbG90ID09IDApIHsKICAgICAgICAgICAgICAgICBwa3QtPnBrdF9oYXNfbG9h ZF9zMCA9IDE7CkBAIC00NjQsNiArNDc1LDEwIEBAIHN0YXRpYyBpbnQgZGVjb2RlX3NldF9pbnNu X2F0dHJfZmllbGRzKHBhY2tldF90ICpwa3QpCiAgICAgICAgICAgICAgICAgcGt0LT5wa3RfaGFz X2xvYWRfczEgPSAxOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmIChHRVRf QVRUUklCKG9wY29kZSwgQV9DVklfR0FUSEVSKSB8fAorICAgICAgICAgICAgR0VUX0FUVFJJQihv cGNvZGUsIEFfQ1ZJX1NDQVRURVIpKSB7CisgICAgICAgICAgICBwa3QtPmluc25baV0uaXNfc2Nh dGdhdGggPSAxOworICAgICAgICB9CiAgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9N RU1PUCkpIHsKICAgICAgICAgICAgIHBrdC0+aW5zbltpXS5pc19tZW1vcCA9IDE7CiAgICAgICAg IH0KQEAgLTczNyw4ICs3NTIsMTIgQEAgc3RhdGljIGludCBkZWNvZGVfcmVtb3ZlX2V4dGVuZGVy cyhwYWNrZXRfdCAqcGFja2V0KQogc3RhdGljIGNvbnN0IGNoYXIgKgogZ2V0X3ZhbGlkX3Nsb3Rf c3RyKGNvbnN0IHBhY2tldF90ICpwa3QsIHVuc2lnbmVkIGludCBzbG90KQogewotICAgIHJldHVy biBmaW5kX2ljbGFzc19zbG90cyhwa3QtPmluc25bc2xvdF0ub3Bjb2RlLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwa3QtPmluc25bc2xvdF0uaWNsYXNzKTsKKyAgICBpZiAoR0VUX0FU VFJJQihwa3QtPmluc25bc2xvdF0ub3Bjb2RlLCBBX0VYVEVOU0lPTikpIHsKKyAgICAgICAgcmV0 dXJuIG1tdmVjX2V4dF9kZWNvZGVfZmluZF9pY2xhc3Nfc2xvdHMocGt0LT5pbnNuW3Nsb3RdLm9w Y29kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZpbmRfaWNsYXNzX3Nsb3RzKHBr dC0+aW5zbltzbG90XS5vcGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw a3QtPmluc25bc2xvdF0uaWNsYXNzKTsKKyAgICB9CiB9CiAKICNpbmNsdWRlICJxNnZfZGVjb2Rl LmMiCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9tbXZlYy9kZWNvZGVfZXh0X21tdmVjLmMg Yi90YXJnZXQvaGV4YWdvbi9tbXZlYy9kZWNvZGVfZXh0X21tdmVjLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3NDYwMgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9o ZXhhZ29uL21tdmVjL2RlY29kZV9leHRfbW12ZWMuYwpAQCAtMCwwICsxLDY3MCBAQAorLyoKKyAq ICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMu IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgImRlY29k ZS5oIgorI2luY2x1ZGUgIm9wY29kZXMuaCIKKyNpbmNsdWRlICJpbnNuLmgiCisjaW5jbHVkZSAi cHJpbnRpbnNuLmgiCisjaW5jbHVkZSAibW12ZWMvbW12ZWMuaCIKKyNpbmNsdWRlICJtbXZlYy9k ZWNvZGVfZXh0X21tdmVjLmgiCisKK3R5cGVkZWYgZW51bSBodnhfcmVzb3VyY2UgeworICAgIEhW WF9SRVNPVVJDRV9MT0FEICAgID0gMCwKKyAgICBIVlhfUkVTT1VSQ0VfU1RPUkUgICA9IDEsCisg ICAgSFZYX1JFU09VUkNFX1BFUk0gICAgPSAyLAorICAgIEhWWF9SRVNPVVJDRV9TSElGVCAgID0g MywKKyAgICBIVlhfUkVTT1VSQ0VfTVBZMCAgICA9IDQsCisgICAgSFZYX1JFU09VUkNFX01QWTEg ICAgPSA1LAorICAgIEhWWF9SRVNPVVJDRV9aUiAgICAgID0gNiwKKyAgICBIVlhfUkVTT1VSQ0Vf WlcgICAgICA9IDcKK30gaHZ4X3Jlc291cmNlX3Q7CisKKyNkZWZpbmUgRlJFRSAgICAxCisjZGVm aW5lIFVTRUQgICAgMAorCitzdGF0aWMgaW50CitjaGVja19kdl9pbnN0cnVjdGlvbihodnhfcmVz b3VyY2VfdCAqcmVzb3VyY2VzLCBpbnQgKmlsaXN0LAorICAgICAgICAgICAgICAgICAgICAgaW50 IG51bV9pbnNuLCBwYWNrZXRfdCAqcGFja2V0LCB1bnNpZ25lZCBpbnQgYXR0cmlidXRlLAorICAg ICAgICAgICAgICAgICAgICAgaHZ4X3Jlc291cmNlX3QgcmVzb3VyY2UwLCBodnhfcmVzb3VyY2Vf dCByZXNvdXJjZTEpCit7CisKKyAgICBpbnQgY3VycmVudF9pbnNuID0gMDsKKyAgICAvKiBMb29w IG9uIHZlY3RvciBpbnN0cnVjdGlvbiBjb3VudCAqLworICAgIGZvciAoY3VycmVudF9pbnNuID0g MDsgY3VycmVudF9pbnNuIDwgbnVtX2luc247IGN1cnJlbnRfaW5zbisrKSB7CisgICAgICAgIC8q IHZhbGlkIGluc3RydWN0aW9uICovCisgICAgICAgIGlmIChpbGlzdFtjdXJyZW50X2luc25dID4g LTEpIHsKKyAgICAgICAgICAgIGludCBvcGNvZGUgPSBwYWNrZXQtPmluc25baWxpc3RbY3VycmVu dF9pbnNuXV0ub3Bjb2RlOworICAgICAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBhdHRy aWJ1dGUpKSB7CisgICAgICAgICAgICAgICAgLyogTmVlZHMgdHdvIGF2YWlsYWJsZSByZXNvdXJj ZXMgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJlc291cmNlc1tyZXNvdXJjZTBdICsgcmVzb3Vy Y2VzW3Jlc291cmNlMV0pID09IDIgKiBGUkVFKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc291 cmNlc1tyZXNvdXJjZTBdID0gVVNFRDsKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzW3Jl c291cmNlMV0gPSBVU0VEOworICAgICAgICAgICAgICAgICAgICBwYWNrZXQtPmluc25baWxpc3Rb Y3VycmVudF9pbnNuXV0uaHZ4X3Jlc291cmNlIHw9CisgICAgICAgICAgICAgICAgICAgICAgICAo MSA8PCByZXNvdXJjZTApOworICAgICAgICAgICAgICAgICAgICBwYWNrZXQtPmluc25baWxpc3Rb Y3VycmVudF9pbnNuXV0uaHZ4X3Jlc291cmNlIHw9CisgICAgICAgICAgICAgICAgICAgICAgICAo MSA8PCByZXNvdXJjZTEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGlsaXN0W2N1cnJlbnRfaW5zbl0gPSAtMTsgICAgIC8qIFJlbW92ZSBJbnN0cnVj dGlvbiAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOwor fQorCisvKiBEb3VibGUgVmVjdG9yIGluc3RydWN0aW9ucyB0aGF0IGNhbiB1c2UgYW55IG9uZSBv ZiBzcGVjaWZpYyBvciBib3RoIHBhaXJzICovCitzdGF0aWMgaW50CitjaGVja19kdl9pbnN0cnVj dGlvbjIoaHZ4X3Jlc291cmNlX3QgKnJlc291cmNlcywgaW50ICppbGlzdCwKKyAgICAgICAgICAg ICAgICAgICAgICBpbnQgbnVtX2luc24sIHBhY2tldF90ICpwYWNrZXQsIHVuc2lnbmVkIGludCBh dHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgaHZ4X3Jlc291cmNlX3QgcmVzb3VyY2Uw LCBodnhfcmVzb3VyY2VfdCByZXNvdXJjZTEsCisgICAgICAgICAgICAgICAgICAgICAgaHZ4X3Jl c291cmNlX3QgcmVzb3VyY2UyLCBodnhfcmVzb3VyY2VfdCByZXNvdXJjZTMpCit7CisKKyAgICBp bnQgY3VycmVudF9pbnNuID0gMDsKKyAgICAvKiBMb29wIG9uIHZlY3RvciBpbnN0cnVjdGlvbiBj b3VudCAqLworICAgIGZvciAoY3VycmVudF9pbnNuID0gMDsgY3VycmVudF9pbnNuIDwgbnVtX2lu c247IGN1cnJlbnRfaW5zbisrKSB7CisgICAgICAgIC8qIHZhbGlkIGluc3RydWN0aW9uICovCisg ICAgICAgIGlmIChpbGlzdFtjdXJyZW50X2luc25dID4gLTEpIHsKKyAgICAgICAgICAgIGludCBv cGNvZGUgPSBwYWNrZXQtPmluc25baWxpc3RbY3VycmVudF9pbnNuXV0ub3Bjb2RlOworICAgICAg ICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBhdHRyaWJ1dGUpKSB7CisgICAgICAgICAgICAg ICAgLyogTmVlZHMgdHdvIGF2YWlsYWJsZSByZXNvdXJjZXMgKi8KKyAgICAgICAgICAgICAgICBp ZiAoKHJlc291cmNlc1tyZXNvdXJjZTBdICsgcmVzb3VyY2VzW3Jlc291cmNlMV0pID09IDIgKiBG UkVFKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tyZXNvdXJjZTBdID0gVVNFRDsK KyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzW3Jlc291cmNlMV0gPSBVU0VEOworICAgICAg ICAgICAgICAgICAgICBwYWNrZXQtPmluc25baWxpc3RbY3VycmVudF9pbnNuXV0uaHZ4X3Jlc291 cmNlIHw9CisgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IHJlc291cmNlMCk7CisgICAgICAg ICAgICAgICAgICAgIHBhY2tldC0+aW5zbltpbGlzdFtjdXJyZW50X2luc25dXS5odnhfcmVzb3Vy Y2UgfD0KKyAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgcmVzb3VyY2UxKTsKKyAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKChyZXNvdXJjZXNbcmVzb3VyY2UyXSArIHJlc291cmNlc1tyZXNv dXJjZTNdKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIEZSRUUpIHsKKyAgICAg ICAgICAgICAgICAgICAgcmVzb3VyY2VzW3Jlc291cmNlMl0gPSBVU0VEOworICAgICAgICAgICAg ICAgICAgICByZXNvdXJjZXNbcmVzb3VyY2UzXSA9IFVTRUQ7CisgICAgICAgICAgICAgICAgICAg IHBhY2tldC0+aW5zbltpbGlzdFtjdXJyZW50X2luc25dXS5odnhfcmVzb3VyY2UgfD0KKyAgICAg ICAgICAgICAgICAgICAgICAgICgxIDw8IHJlc291cmNlMCk7CisgICAgICAgICAgICAgICAgICAg IHBhY2tldC0+aW5zbltpbGlzdFtjdXJyZW50X2luc25dXS5odnhfcmVzb3VyY2UgfD0KKyAgICAg ICAgICAgICAgICAgICAgICAgICgxIDw8IHJlc291cmNlMSk7CisgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWxpc3RbY3VycmVudF9pbnNuXSA9IC0xOyAg ICAgLyogUmVtb3ZlIEluc3RydWN0aW9uICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrX3VtZW1faW5zdHJ1Y3Rp b24oaHZ4X3Jlc291cmNlX3QgKnJlc291cmNlcywgaW50ICppbGlzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgaW50IG51bV9pbnNuLCBwYWNrZXRfdCAqcGFja2V0KQoreworCisgICAgaW50IGN1 cnJlbnRfaW5zbiA9IDA7CisgICAgLyogTG9vcCBvbiB2ZWN0b3IgaW5zdHJ1Y3Rpb24gY291bnQg Ki8KKyAgICBmb3IgKGN1cnJlbnRfaW5zbiA9IDA7IGN1cnJlbnRfaW5zbiA8IG51bV9pbnNuOyBj dXJyZW50X2luc24rKykgeworICAgICAgICAvKiB2YWxpZCBpbnN0cnVjdGlvbiAqLworICAgICAg ICBpZiAoaWxpc3RbY3VycmVudF9pbnNuXSA+IC0xKSB7CisgICAgICAgICAgICBpbnQgb3Bjb2Rl ID0gcGFja2V0LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5zbl1dLm9wY29kZTsKKyAgICAgICAgICAg IC8qIGNoZWNrIGF0dHJpYnV0ZSAqLworICAgICAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2Rl LCBBX0NWSV9WUCkgJiYgR0VUX0FUVFJJQihvcGNvZGUsIEFfQ1ZJX1ZNKSkgeworICAgICAgICAg ICAgICAgIC8qIE5lZWRzIHRocmVlIGF2YWlsYWJsZSByZXNvdXJjZXMsIGJvdGggbWVtIGFuZCBw ZXJtdXRlICovCisgICAgICAgICAgICAgICAgaWYgKChyZXNvdXJjZXNbSFZYX1JFU09VUkNFX0xP QURdICsKKyAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tIVlhfUkVTT1VSQ0VfU1RPUkVd ICsKKyAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tIVlhfUkVTT1VSQ0VfUEVSTV0pID09 IDMgKiBGUkVFKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tIVlhfUkVTT1VSQ0Vf TE9BRF0gPSBVU0VEOworICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNbSFZYX1JFU09VUkNF X1NUT1JFXSA9IFVTRUQ7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tIVlhfUkVTT1VS Q0VfUEVSTV0gPSBVU0VEOworICAgICAgICAgICAgICAgICAgICBwYWNrZXQtPmluc25baWxpc3Rb Y3VycmVudF9pbnNuXV0uaHZ4X3Jlc291cmNlIHw9CisgICAgICAgICAgICAgICAgICAgICAgICAo MSA8PCBIVlhfUkVTT1VSQ0VfTE9BRCk7CisgICAgICAgICAgICAgICAgICAgIHBhY2tldC0+aW5z bltpbGlzdFtjdXJyZW50X2luc25dXS5odnhfcmVzb3VyY2UgfD0KKyAgICAgICAgICAgICAgICAg ICAgICAgICgxIDw8IEhWWF9SRVNPVVJDRV9TVE9SRSk7CisgICAgICAgICAgICAgICAgICAgIHBh Y2tldC0+aW5zbltpbGlzdFtjdXJyZW50X2luc25dXS5odnhfcmVzb3VyY2UgfD0KKyAgICAgICAg ICAgICAgICAgICAgICAgICgxIDw8IEhWWF9SRVNPVVJDRV9QRVJNKTsKKyAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwor ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlsaXN0W2N1cnJlbnRfaW5zbl0g PSAtMTsgICAgIC8qIFJlbW92ZSBJbnN0cnVjdGlvbiAqLworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKy8qIE1lbW9yeSBpbnN0cnVjdGlvbnMg Ki8KK3N0YXRpYyBpbnQKK2NoZWNrX21lbV9pbnN0cnVjdGlvbihodnhfcmVzb3VyY2VfdCAqcmVz b3VyY2VzLCBpbnQgKmlsaXN0LAorICAgICAgICAgICAgICAgICAgICAgIGludCBudW1faW5zbiwg cGFja2V0X3QgKnBhY2tldCkKK3sKKworICAgIGludCBjdXJyZW50X2luc24gPSAwOworICAgIC8q IExvb3Agb24gdmVjdG9yIGluc3RydWN0aW9uIGNvdW50ICovCisgICAgZm9yIChjdXJyZW50X2lu c24gPSAwOyBjdXJyZW50X2luc24gPCBudW1faW5zbjsgY3VycmVudF9pbnNuKyspIHsKKyAgICAg ICAgLyogdmFsaWQgaW5zdHJ1Y3Rpb24gKi8KKyAgICAgICAgaWYgKGlsaXN0W2N1cnJlbnRfaW5z bl0gPiAtMSkgeworICAgICAgICAgICAgaW50IG9wY29kZSA9IHBhY2tldC0+aW5zbltpbGlzdFtj dXJyZW50X2luc25dXS5vcGNvZGU7CisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQihvcGNvZGUs IEFfQ1ZJX1ZNKSkgeworICAgICAgICAgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9M T0FEKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2VzW0hWWF9SRVNPVVJDRV9M T0FEXSA9PSBGUkVFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNbSFZYX1JF U09VUkNFX0xPQURdID0gVVNFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldC0+aW5z bltpbGlzdFtjdXJyZW50X2luc25dXS5odnhfcmVzb3VyY2UgfD0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoMSA8PCBIVlhfUkVTT1VSQ0VfTE9BRCk7CisgICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgp OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEdF VF9BVFRSSUIob3Bjb2RlLCBBX1NUT1JFKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVz b3VyY2VzW0hWWF9SRVNPVVJDRV9TVE9SRV0gPT0gRlJFRSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgcmVzb3VyY2VzW0hWWF9SRVNPVVJDRV9TVE9SRV0gPSBVU0VEOworICAgICAgICAgICAg ICAgICAgICAgICAgcGFja2V0LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5zbl1dLmh2eF9yZXNvdXJj ZSB8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IEhWWF9SRVNPVVJDRV9TVE9S RSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNo ZWQoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBOb3QgYSBsb2Fk IHRlbXAgYW5kIG5vdCBhIHN0b3JlIG5ldyAqLworICAgICAgICAgICAgICAgIGlmICghKEdFVF9B VFRSSUIob3Bjb2RlLCBBX0NWSV9UTVApICYmCisgICAgICAgICAgICAgICAgICAgICAgR0VUX0FU VFJJQihvcGNvZGUsIEFfTE9BRCkpICYmCisgICAgICAgICAgICAgICAgICAgICEoR0VUX0FUVFJJ QihvcGNvZGUsIEFfQ1ZJX05FVykgJiYKKyAgICAgICAgICAgICAgICAgICAgICBHRVRfQVRUUklC KG9wY29kZSwgQV9TVE9SRSkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIEdyYWIgYW55IG9u ZSBvZiB0aGUgb3RoZXIgcmVzb3VyY2VzICovCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXNv dXJjZXNbSFZYX1JFU09VUkNFX1BFUk1dID09IEZSRUUpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHJlc291cmNlc1tIVlhfUkVTT1VSQ0VfUEVSTV0gPSBVU0VEOworICAgICAgICAgICAgICAg ICAgICAgICAgcGFja2V0LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5zbl1dLmh2eF9yZXNvdXJjZSB8 PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IEhWWF9SRVNPVVJDRV9QRVJNKTsK KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZXNbSFZYX1JFU09VUkNFX1NI SUZUXSA9PSBGUkVFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNbSFZYX1JF U09VUkNFX1NISUZUXSA9IFVTRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQtPmlu c25baWxpc3RbY3VycmVudF9pbnNuXV0uaHZ4X3Jlc291cmNlIHw9CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDEgPDwgSFZYX1JFU09VUkNFX1NISUZUKTsKKyAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIGlmIChyZXNvdXJjZXNbSFZYX1JFU09VUkNFX01QWTBdID09IEZSRUUpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tIVlhfUkVTT1VSQ0VfTVBZMF0gPSBVU0VE OworICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5z bl1dLmh2eF9yZXNvdXJjZSB8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IEhW WF9SRVNPVVJDRV9NUFkwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJj ZXNbSFZYX1JFU09VUkNFX01QWTFdID09IEZSRUUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHJlc291cmNlc1tIVlhfUkVTT1VSQ0VfTVBZMV0gPSBVU0VEOworICAgICAgICAgICAgICAgICAg ICAgICAgcGFja2V0LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5zbl1dLmh2eF9yZXNvdXJjZSB8PQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IEhWWF9SRVNPVVJDRV9NUFkxKTsKKyAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdfYXNz ZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgaWxpc3RbY3VycmVudF9pbnNuXSA9IC0xOyAgICAgLyogUmVt b3ZlIEluc3RydWN0aW9uICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg cmV0dXJuIDA7Cit9CisKKy8qCisgKiBTaW5nbGUgVmVjdG9yIGluc3RydWN0aW9ucyB0aGF0IGNh biB1c2Ugb25lLCB0d28sIG9yIGZvdXIgcmVzb3VyY2VzCisgKiBJbnNlcnQgaW5zdHJ1Y3Rpb24g aW50byBvbmUgcG9zc2libGUgcmVzb3VyY2UKKyAqLworc3RhdGljIGludAorY2hlY2tfaW5zdHJ1 Y3Rpb24xKGh2eF9yZXNvdXJjZV90ICpyZXNvdXJjZXMsIGludCAqaWxpc3QsCisgICAgICAgICAg ICAgICAgICAgaW50IG51bV9pbnNuLCBwYWNrZXRfdCAqcGFja2V0LCB1bnNpZ25lZCBpbnQgYXR0 cmlidXRlLAorICAgICAgICAgICAgICAgICAgIGh2eF9yZXNvdXJjZV90IHJlc291cmNlMCkKK3sK KworICAgIGludCBjdXJyZW50X2luc24gPSAwOworICAgIC8qIExvb3Agb24gdmVjdG9yIGluc3Ry dWN0aW9uIGNvdW50ICovCisgICAgZm9yIChjdXJyZW50X2luc24gPSAwOyBjdXJyZW50X2luc24g PCBudW1faW5zbjsgY3VycmVudF9pbnNuKyspIHsKKyAgICAgICAgLyogdmFsaWQgaW5zdHJ1Y3Rp b24gKi8KKyAgICAgICAgaWYgKGlsaXN0W2N1cnJlbnRfaW5zbl0gPiAtMSkgeworICAgICAgICAg ICAgaW50IG9wY29kZSA9IHBhY2tldC0+aW5zbltpbGlzdFtjdXJyZW50X2luc25dXS5vcGNvZGU7 CisgICAgICAgICAgICBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIGF0dHJpYnV0ZSkpIHsKKyAgICAg ICAgICAgICAgICAvKiBOZWVkcyB0d28gYXZhaWxhYmxlIHJlc291cmNlcyAqLworICAgICAgICAg ICAgICAgIGlmIChyZXNvdXJjZXNbcmVzb3VyY2UwXSA9PSBGUkVFKSB7CisgICAgICAgICAgICAg ICAgICAgIHJlc291cmNlc1tyZXNvdXJjZTBdID0gVVNFRDsKKyAgICAgICAgICAgICAgICAgICAg cGFja2V0LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5zbl1dLmh2eF9yZXNvdXJjZSB8PQorICAgICAg ICAgICAgICAgICAgICAgICAgKDEgPDwgcmVzb3VyY2UwKTsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlsaXN0W2N1cnJlbnRfaW5zbl0gPSAtMTsg ICAgIC8qIFJlbW92ZSBJbnN0cnVjdGlvbiAqLworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBJbnNlcnQgaW5zdHJ1Y3Rpb24gaW50byBvbmUg b2YgdHdvIHBvc3NpYmxlIHJlc291cmNlMiAqLworc3RhdGljIGludAorY2hlY2tfaW5zdHJ1Y3Rp b24yKGh2eF9yZXNvdXJjZV90ICpyZXNvdXJjZXMsIGludCAqaWxpc3QsCisgICAgICAgICAgICAg ICAgICAgaW50IG51bV9pbnNuLCBwYWNrZXRfdCAqcGFja2V0LCB1bnNpZ25lZCBpbnQgYXR0cmli dXRlLAorICAgICAgICAgICAgICAgICAgIGh2eF9yZXNvdXJjZV90IHJlc291cmNlMCwgaHZ4X3Jl c291cmNlX3QgcmVzb3VyY2UxKQoreworCisgICAgaW50IGN1cnJlbnRfaW5zbiA9IDA7CisgICAg LyogTG9vcCBvbiB2ZWN0b3IgaW5zdHJ1Y3Rpb24gY291bnQgKi8KKyAgICBmb3IgKGN1cnJlbnRf aW5zbiA9IDA7IGN1cnJlbnRfaW5zbiA8IG51bV9pbnNuOyBjdXJyZW50X2luc24rKykgeworICAg ICAgICAvKiB2YWxpZCBpbnN0cnVjdGlvbiAqLworICAgICAgICBpZiAoaWxpc3RbY3VycmVudF9p bnNuXSA+IC0xKSB7CisgICAgICAgICAgICBpbnQgb3Bjb2RlID0gcGFja2V0LT5pbnNuW2lsaXN0 W2N1cnJlbnRfaW5zbl1dLm9wY29kZTsKKyAgICAgICAgICAgIGlmIChHRVRfQVRUUklCKG9wY29k ZSwgYXR0cmlidXRlKSkgeworICAgICAgICAgICAgICAgIC8qIE5lZWRzIG9uZSBvZiB0d28gcG9z c2libGUgYXZhaWxhYmxlIHJlc291cmNlcyAqLworICAgICAgICAgICAgICAgIGlmIChyZXNvdXJj ZXNbcmVzb3VyY2UwXSA9PSBGUkVFKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1ty ZXNvdXJjZTBdID0gVVNFRDsKKyAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2lsaXN0 W2N1cnJlbnRfaW5zbl1dLmh2eF9yZXNvdXJjZSB8PQorICAgICAgICAgICAgICAgICAgICAgICAg KDEgPDwgcmVzb3VyY2UwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlc1ty ZXNvdXJjZTFdID09IEZSRUUpICB7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tyZXNv dXJjZTFdID0gVVNFRDsKKyAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2lsaXN0W2N1 cnJlbnRfaW5zbl1dLmh2eF9yZXNvdXJjZSB8PQorICAgICAgICAgICAgICAgICAgICAgICAgKDEg PDwgcmVzb3VyY2UxKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgICAgIGlsaXN0W2N1cnJlbnRfaW5zbl0gPSAtMTsgICAgIC8qIFJlbW92ZSBJbnN0cnVj dGlvbiAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOwor fQorCisvKiBJbnNlcnQgaW5zdHJ1Y3Rpb24gaW50byBvbmUgb2YgNCBmb3VyIHBvc3NpYmxlIHJl c291cmNlICovCitzdGF0aWMgaW50CitjaGVja19pbnN0cnVjdGlvbjQoaHZ4X3Jlc291cmNlX3Qg KnJlc291cmNlcywgaW50ICppbGlzdCwKKyAgICAgICAgICAgICAgICAgICBpbnQgbnVtX2luc24s IHBhY2tldF90ICpwYWNrZXQsIHVuc2lnbmVkIGludCBhdHRyaWJ1dGUsCisgICAgICAgICAgICAg ICAgICAgaHZ4X3Jlc291cmNlX3QgcmVzb3VyY2UwLCBodnhfcmVzb3VyY2VfdCByZXNvdXJjZTEs CisgICAgICAgICAgICAgICAgICAgaHZ4X3Jlc291cmNlX3QgcmVzb3VyY2UyLCBodnhfcmVzb3Vy Y2VfdCByZXNvdXJjZTMpCit7CisKKyAgICBpbnQgY3VycmVudF9pbnNuID0gMDsKKyAgICAvKiBM b29wIG9uIHZlY3RvciBpbnN0cnVjdGlvbiBjb3VudCAqLworICAgIGZvciAoY3VycmVudF9pbnNu ID0gMDsgY3VycmVudF9pbnNuIDwgbnVtX2luc247IGN1cnJlbnRfaW5zbisrKSB7CisgICAgICAg IC8qIHZhbGlkIGluc3RydWN0aW9uICovCisgICAgICAgIGlmIChpbGlzdFtjdXJyZW50X2luc25d ID4gLTEpIHsKKyAgICAgICAgICAgIGludCBvcGNvZGUgPSBwYWNrZXQtPmluc25baWxpc3RbY3Vy cmVudF9pbnNuXV0ub3Bjb2RlOworICAgICAgICAgICAgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBh dHRyaWJ1dGUpKSB7CisgICAgICAgICAgICAgICAgLyogTmVlZHMgb25lIG9mIGZvdXIgYXZhaWxh YmxlIHJlc291cmNlcyAqLworICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZXNbcmVzb3VyY2Uw XSA9PSBGUkVFKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tyZXNvdXJjZTBdID0g VVNFRDsKKyAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5z bl1dLmh2eF9yZXNvdXJjZSB8PQorICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgcmVzb3Vy Y2UwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlc1tyZXNvdXJjZTFdID09 IEZSRUUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzW3Jlc291cmNlMV0gPSBVU0VE OworICAgICAgICAgICAgICAgICAgICBwYWNrZXQtPmluc25baWxpc3RbY3VycmVudF9pbnNuXV0u aHZ4X3Jlc291cmNlIHw9CisgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCByZXNvdXJjZTEp OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VzW3Jlc291cmNlMl0gPT0gRlJF RSkgeworICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNbcmVzb3VyY2UyXSA9IFVTRUQ7Cisg ICAgICAgICAgICAgICAgICAgIHBhY2tldC0+aW5zbltpbGlzdFtjdXJyZW50X2luc25dXS5odnhf cmVzb3VyY2UgfD0KKyAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IHJlc291cmNlMik7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZXNbcmVzb3VyY2UzXSA9PSBGUkVFKSB7 CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tyZXNvdXJjZTNdID0gVVNFRDsKKyAgICAg ICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5zbl1dLmh2eF9yZXNv dXJjZSB8PQorICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgcmVzb3VyY2UzKTsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVh Y2hlZCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlsaXN0W2N1cnJl bnRfaW5zbl0gPSAtMTsgICAgIC8qIFJlbW92ZSBJbnN0cnVjdGlvbiAqLworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjaGVj a180cmVzX2luc3RydWN0aW9uKGh2eF9yZXNvdXJjZV90ICpyZXNvdXJjZXMsIGludCAqaWxpc3Qs CisgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1faW5zbiwgcGFja2V0X3QgKnBhY2tldCkK K3sKKworICAgIGludCBjdXJyZW50X2luc24gPSAwOworICAgIGZvciAoY3VycmVudF9pbnNuID0g MDsgY3VycmVudF9pbnNuIDwgbnVtX2luc247IGN1cnJlbnRfaW5zbisrKSB7CisgICAgICAgIGlm IChpbGlzdFtjdXJyZW50X2luc25dID4gLTEpIHsKKyAgICAgICAgICAgIGludCBvcGNvZGUgPSBw YWNrZXQtPmluc25baWxpc3RbY3VycmVudF9pbnNuXV0ub3Bjb2RlOworICAgICAgICAgICAgaWYg KEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NWSV80U0xPVCkpIHsKKyAgICAgICAgICAgICAgICBpbnQg YXZhaWxhYmxlX3Jlc291cmNlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1tI VlhfUkVTT1VSQ0VfUEVSTV0KKyAgICAgICAgICAgICAgICAgICAgICAgICsgcmVzb3VyY2VzW0hW WF9SRVNPVVJDRV9TSElGVF0KKyAgICAgICAgICAgICAgICAgICAgICAgICsgcmVzb3VyY2VzW0hW WF9SRVNPVVJDRV9NUFkwXQorICAgICAgICAgICAgICAgICAgICAgICAgKyByZXNvdXJjZXNbSFZY X1JFU09VUkNFX01QWTFdOworCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZV9yZXNvdXJj ZSA9PSA0ICogRlJFRSkgeworICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNbSFZYX1JFU09V UkNFX1BFUk1dID0gVVNFRDsKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzW0hWWF9SRVNP VVJDRV9TSElGVF0gPSBVU0VEOworICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNbSFZYX1JF U09VUkNFX01QWTBdID0gVVNFRDsKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzW0hWWF9S RVNPVVJDRV9NUFkxXSA9IFVTRUQ7CisgICAgICAgICAgICAgICAgICAgIHBhY2tldC0+aW5zbltp bGlzdFtjdXJyZW50X2luc25dXS5odnhfcmVzb3VyY2UgfD0KKyAgICAgICAgICAgICAgICAgICAg ICAgICgxIDw8IEhWWF9SRVNPVVJDRV9QRVJNKTsKKyAgICAgICAgICAgICAgICAgICAgcGFja2V0 LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5zbl1dLmh2eF9yZXNvdXJjZSB8PQorICAgICAgICAgICAg ICAgICAgICAgICAgKDEgPDwgSFZYX1JFU09VUkNFX1NISUZUKTsKKyAgICAgICAgICAgICAgICAg ICAgcGFja2V0LT5pbnNuW2lsaXN0W2N1cnJlbnRfaW5zbl1dLmh2eF9yZXNvdXJjZSB8PQorICAg ICAgICAgICAgICAgICAgICAgICAgKDEgPDwgSFZYX1JFU09VUkNFX01QWTApOworICAgICAgICAg ICAgICAgICAgICBwYWNrZXQtPmluc25baWxpc3RbY3VycmVudF9pbnNuXV0uaHZ4X3Jlc291cmNl IHw9CisgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBIVlhfUkVTT1VSQ0VfTVBZMSk7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ19hc3NlcnRfbm90 X3JlYWNoZWQoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpbGlzdFtj dXJyZW50X2luc25dID0gLTE7ICAgICAvKiBSZW1vdmUgSW5zdHJ1Y3Rpb24gKi8KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBp bnQKK2RlY29kZV9wb3B1bGF0ZV9jdmlfcmVzb3VyY2VzKHBhY2tldF90ICpwYWNrZXQpCit7CisK KyAgICBpbnQgaSwgbnVtX2luc24gPSAwOworICAgIGludCB2bGlzdFs0XSA9IHstMSwgLTEsIC0x LCAtMX07CisgICAgaHZ4X3Jlc291cmNlX3QgaHZ4X3Jlc291cmNlc1s4XSA9IHsKKyAgICAgICAg RlJFRSwKKyAgICAgICAgRlJFRSwKKyAgICAgICAgRlJFRSwKKyAgICAgICAgRlJFRSwKKyAgICAg ICAgRlJFRSwKKyAgICAgICAgRlJFRSwKKyAgICAgICAgRlJFRSwKKyAgICAgICAgRlJFRQorICAg IH07ICAgIC8qIEFsbCBBdmFpbGFibGUgKi8KKyAgICBpbnQgZXJyb3JzID0gMDsKKworCisgICAg LyogQ291bnQgVmVjdG9yIGluc3RydWN0aW9ucyBhbmQgY2hlY2sgZm9yIGRlcHJlY2F0ZWQgb25l cyAqLworICAgIGZvciAobnVtX2luc24gPSAwLCBpID0gMDsgaSA8IHBhY2tldC0+bnVtX2luc25z OyBpKyspIHsKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIocGFja2V0LT5pbnNuW2ldLm9wY29kZSwg QV9DVkkpKSB7CisgICAgICAgICAgICB2bGlzdFtudW1faW5zbisrXSA9IGk7CisgICAgICAgIH0K KyAgICB9CisKKyAgICAvKiBJbnN0cnVjdGlvbnMgdGhhdCBjb25zdW1lIGFsbCB2ZWN0b3IgcmVz b3VyY2VzICovCisgICAgZXJyb3JzICs9IGNoZWNrXzRyZXNfaW5zdHJ1Y3Rpb24oaHZ4X3Jlc291 cmNlcywgdmxpc3QsIG51bV9pbnNuLCBwYWNrZXQpOworICAgIC8qIEluc2VydCBVbmFsaWduZWQg TWVtb3J5IEFjY2VzcyAqLworICAgIGVycm9ycyArPSBjaGVja191bWVtX2luc3RydWN0aW9uKGh2 eF9yZXNvdXJjZXMsIHZsaXN0LCBudW1faW5zbiwgcGFja2V0KTsKKworICAgIC8qIGRvdWJsZSB2 ZWN0b3IgcGVybXV0ZSBDb25zdW1lcyBib3RoIHBlcm11dGUgYW5kIHNoaWZ0IHJlc291cmNlcyAq LworICAgIGVycm9ycyArPSBjaGVja19kdl9pbnN0cnVjdGlvbihodnhfcmVzb3VyY2VzLCB2bGlz dCwgbnVtX2luc24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldCwg QV9DVklfVlBfVlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWWF9SRVNP VVJDRV9TSElGVCwgSFZYX1JFU09VUkNFX1BFUk0pOworICAgIC8qIFNpbmdsZSB2ZWN0b3IgcGVy bXV0ZSBjYW4gb25seSBnbyB0byBwZXJtdXRlIHJlc291cmNlICovCisgICAgZXJyb3JzICs9IGNo ZWNrX2luc3RydWN0aW9uMShodnhfcmVzb3VyY2VzLCB2bGlzdCwgbnVtX2luc24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQsIEFfQ1ZJX1ZQLCBIVlhfUkVTT1VSQ0Vf UEVSTSk7CisgICAgLyogU2luZ2xlIHZlY3RvciBwZXJtdXRlIGNhbiBvbmx5IGdvIHRvIHBlcm11 dGUgcmVzb3VyY2UgKi8KKyAgICBlcnJvcnMgKz0gY2hlY2tfaW5zdHJ1Y3Rpb24xKGh2eF9yZXNv dXJjZXMsIHZsaXN0LCBudW1faW5zbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhY2tldCwgQV9DVklfVlMsIEhWWF9SRVNPVVJDRV9TSElGVCk7CisKKyAgICAvKiBUcnkgdG8g aW5zZXJ0IGRvdWJsZSB2ZWN0b3IgbXVsdGlwbHkgKi8KKyAgICBlcnJvcnMgKz0gY2hlY2tfZHZf aW5zdHJ1Y3Rpb24oaHZ4X3Jlc291cmNlcywgdmxpc3QsIG51bV9pbnNuLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXQsIEFfQ1ZJX1ZYX0RWLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBIVlhfUkVTT1VSQ0VfTVBZMCwgSFZYX1JFU09VUkNFX01Q WTEpOworICAgIC8qIFRyeSB0byBpbnNlcnQgZG91YmxlIGNhcGFjaXR5IG11bHQgKi8KKyAgICBl cnJvcnMgKz0gY2hlY2tfZHZfaW5zdHJ1Y3Rpb24yKGh2eF9yZXNvdXJjZXMsIHZsaXN0LCBudW1f aW5zbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldCwgQV9DVklf VlNfVlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVlhfUkVTT1VSQ0Vf U0hJRlQsIEhWWF9SRVNPVVJDRV9NUFkwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSFZYX1JFU09VUkNFX1BFUk0sIEhWWF9SRVNPVVJDRV9NUFkxKTsKKyAgICAvKiBTaW5n bGUgdmVjdG9yIHBlcm11dGUgY2FuIG9ubHkgZ28gdG8gcGVybXV0ZSByZXNvdXJjZSAqLworICAg IGVycm9ycyArPSBjaGVja19pbnN0cnVjdGlvbjIoaHZ4X3Jlc291cmNlcywgdmxpc3QsIG51bV9p bnNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0LCBBX0NWSV9WWCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWWF9SRVNPVVJDRV9NUFkwLCBIVlhf UkVTT1VSQ0VfTVBZMSk7CisgICAgLyogVHJ5IHRvIGluc2VydCBkb3VibGUgdmVjdG9yIGFsdSAq LworICAgIGVycm9ycyArPSBjaGVja19kdl9pbnN0cnVjdGlvbjIoaHZ4X3Jlc291cmNlcywgdmxp c3QsIG51bV9pbnNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0 LCBBX0NWSV9WQV9EViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWWF9S RVNPVVJDRV9TSElGVCwgSFZYX1JFU09VUkNFX1BFUk0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBIVlhfUkVTT1VSQ0VfTVBZMCwgSFZYX1JFU09VUkNFX01QWTEpOworCisg ICAgZXJyb3JzICs9IGNoZWNrX21lbV9pbnN0cnVjdGlvbihodnhfcmVzb3VyY2VzLCB2bGlzdCwg bnVtX2luc24sIHBhY2tldCk7CisgICAgLyogc2luZ2xlIHZlY3RvciBhbHUgY2FuIGdvIG9uIGFu eSBvZiB0aGUgNCBwaXBlcyAqLworICAgIGVycm9ycyArPSBjaGVja19pbnN0cnVjdGlvbjQoaHZ4 X3Jlc291cmNlcywgdmxpc3QsIG51bV9pbnNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFja2V0LCBBX0NWSV9WQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEhWWF9SRVNPVVJDRV9TSElGVCwgSFZYX1JFU09VUkNFX1BFUk0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBIVlhfUkVTT1VSQ0VfTVBZMCwgSFZYX1JFU09VUkNFX01QWTEpOwor CisgICAgcmV0dXJuIGVycm9yczsKK30KKworCisKK3N0YXRpYyBpbnQKK2NoZWNrX25ld192YWx1 ZShwYWNrZXRfdCAqcGFja2V0KQoreworICAgIC8qIC5OZXcgVmFsdWUgZm9yIGEgTU1WZWN0b3Ig U3RvcmUgKi8KKyAgICBpbnQgaSwgajsKKyAgICBjb25zdCBjaGFyICpyZWdpbmZvOworICAgIGNv bnN0IGNoYXIgKmRlc3RsZXR0ZXJzOworICAgIGNvbnN0IGNoYXIgKmRzdHN0ciA9IE5VTEw7Cisg ICAgc2l6ZTJ1X3QgZGVmX29wY29kZTsKKyAgICBjaGFyIGxldHRlcjsKKyAgICBpbnQgZGVmX3Jl Z251bTsKKworICAgIGZvciAoaSA9IDE7IGkgPCBwYWNrZXQtPm51bV9pbnNuczsgaSsrKSB7Cisg ICAgICAgIHNpemUydV90IHVzZV9vcGNvZGUgPSBwYWNrZXQtPmluc25baV0ub3Bjb2RlOworICAg ICAgICBpZiAoR0VUX0FUVFJJQih1c2Vfb3Bjb2RlLCBBX0RPVE5FV1ZBTFVFKSAmJgorICAgICAg ICAgICAgR0VUX0FUVFJJQih1c2Vfb3Bjb2RlLCBBX0NWSSkgJiYKKyAgICAgICAgICAgIEdFVF9B VFRSSUIodXNlX29wY29kZSwgQV9TVE9SRSkpIHsKKyAgICAgICAgICAgIGludCB1c2VfcmVnaWR4 ID0gc3RyY2hyKG9wY29kZV9yZWdpbmZvW3VzZV9vcGNvZGVdLCAncycpIC0KKyAgICAgICAgICAg ICAgICBvcGNvZGVfcmVnaW5mb1t1c2Vfb3Bjb2RlXTsKKyAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgKiBXaGF0J3MgZW5jb2RlZCBhdCB0aGUgTi1maWVsZCBpcyB0aGUgb2Zmc2V0IHRvIHdo bydzIHByb2R1Y2luZworICAgICAgICAgICAgICogdGhlIHZhbHVlLgorICAgICAgICAgICAgICog U2hpZnQgb2ZmIHRoZSBMU0Igd2hpY2ggaW5kaWNhdGVzIG9kZC9ldmVuIHJlZ2lzdGVyLgorICAg ICAgICAgICAgICovCisgICAgICAgICAgICBpbnQgZGVmX29mZiA9ICgocGFja2V0LT5pbnNuW2ld LnJlZ25vW3VzZV9yZWdpZHhdKSA+PiAxKTsKKyAgICAgICAgICAgIGludCBkZWZfb3JlZyA9IHBh Y2tldC0+aW5zbltpXS5yZWdub1t1c2VfcmVnaWR4XSAmIDE7CisgICAgICAgICAgICBpbnQgZGVm X2lkeCA9IC0xOworICAgICAgICAgICAgZm9yIChqID0gaSAtIDE7IChqID49IDApICYmIChkZWZf b2ZmID49IDApOyBqLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIUdFVF9BVFRSSUIocGFja2V0 LT5pbnNuW2pdLm9wY29kZSwgQV9DVkkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWZfb2ZmLS07CisgICAgICAg ICAgICAgICAgaWYgKGRlZl9vZmYgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBkZWZfaWR4 ID0gajsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIENoZWNrIGZvciBhIGJh ZGx5IGVuY29kZWQgTi1maWVsZCB3aGljaCBwb2ludHMgdG8gYW4gaW5zdHJ1Y3Rpb24KKyAgICAg ICAgICAgICAqIG91dC1vZi1yYW5nZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAo KGRlZl9vZmYgIT0gMCkgfHwgKGRlZl9pZHggPCAwKSB8fAorICAgICAgICAgICAgICAgIChkZWZf aWR4ID4gKHBhY2tldC0+bnVtX2luc25zIC0gMSkpKSB7CisgICAgICAgICAgICAgICAgZ19hc3Nl cnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIHByZXZpb3Vz IGluc24gaXMgdGhlIHByb2R1Y2VyICovCisgICAgICAgICAgICBkZWZfb3Bjb2RlID0gcGFja2V0 LT5pbnNuW2RlZl9pZHhdLm9wY29kZTsKKyAgICAgICAgICAgIHJlZ2luZm8gPSBvcGNvZGVfcmVn aW5mb1tkZWZfb3Bjb2RlXTsKKyAgICAgICAgICAgIGRlc3RsZXR0ZXJzID0gImRleHkiOworICAg ICAgICAgICAgZm9yIChqID0gMDsgKGxldHRlciA9IGRlc3RsZXR0ZXJzW2pdKSAhPSAwOyBqKysp IHsKKyAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJjaHIocmVnaW5mbywgbGV0dGVyKTsKKyAg ICAgICAgICAgICAgICBpZiAoZHN0c3RyICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KChkc3RzdHIgPT0gTlVMTCkgICYmIEdFVF9BVFRSSUIoZGVmX29wY29kZSwgQV9DVklfR0FUSEVS KSkgeworICAgICAgICAgICAgICAgIGRlZl9yZWdudW0gPSAwOworICAgICAgICAgICAgICAgIHBh Y2tldC0+aW5zbltpXS5yZWdub1t1c2VfcmVnaWR4XSA9IGRlZl9vcmVnOworICAgICAgICAgICAg ICAgIHBhY2tldC0+aW5zbltpXS5uZXdfdmFsdWVfcHJvZHVjZXJfc2xvdCA9CisgICAgICAgICAg ICAgICAgICAgIHBhY2tldC0+aW5zbltkZWZfaWR4XS5zbG90OworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBpZiAoZHN0c3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAg ICAgICAgLyogc3RpbGwgbm90IHRoZXJlLCB3ZSBoYXZlIGEgYmFkIHBhY2tldCAqLworICAgICAg ICAgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBkZWZfcmVnbnVtID0gcGFja2V0LT5pbnNuW2RlZl9pZHhdLnJlZ25v W2RzdHN0ciAtIHJlZ2luZm9dOworICAgICAgICAgICAgICAgIC8qIE5vdyBwYXRjaCB1cCB0aGUg Y29uc3VtZXIgd2l0aCB0aGUgcmVnaXN0ZXIgbnVtYmVyICovCisgICAgICAgICAgICAgICAgcGFj a2V0LT5pbnNuW2ldLnJlZ25vW3VzZV9yZWdpZHhdID0gZGVmX3JlZ251bSBeIGRlZl9vcmVnOwor ICAgICAgICAgICAgICAgIC8qIHNwZWNpYWwgY2FzZSBmb3IgKFZ4LFZ5KSAqLworICAgICAgICAg ICAgICAgIGRzdHN0ciA9IHN0cmNocihyZWdpbmZvLCAneScpOworICAgICAgICAgICAgICAgIGlm IChkZWZfb3JlZyAmJiBzdHJjaHIocmVnaW5mbywgJ3gnKSAmJiBkc3RzdHIpIHsKKyAgICAgICAg ICAgICAgICAgICAgZGVmX3JlZ251bSA9IHBhY2tldC0+aW5zbltkZWZfaWR4XS5yZWdub1tkc3Rz dHIgLSByZWdpbmZvXTsKKyAgICAgICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2ldLnJlZ25v W3VzZV9yZWdpZHhdID0gZGVmX3JlZ251bTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBXZSBuZWVkIHRvIHJlbWVtYmVyIHdobyBwcm9k dWNlcyB0aGlzIHZhbHVlIHRvIGxhdGVyCisgICAgICAgICAgICAgICAgICogY2hlY2sgaWYgaXQg d2FzIGR5bmFtaWNhbGx5IGNhbmNlbGxlZAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAg ICAgICAgIHBhY2tldC0+aW5zbltpXS5uZXdfdmFsdWVfcHJvZHVjZXJfc2xvdCA9CisgICAgICAg ICAgICAgICAgICAgIHBhY2tldC0+aW5zbltkZWZfaWR4XS5zbG90OworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICogV2UgZG9uJ3Qgd2Fu dCB0byByZW9yZGVyIHNsb3QxL3Nsb3QwIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyLgorICog U28gaW4gb3VyIHNodWZmbGluZywgd2UgZG9uJ3Qgd2FudCB0byBtb3ZlIHRoZSAuY3VyIC8gLnRt cCB2bWVtIGVhcmxpZXIKKyAqIEluc3RlYWQsIHdlIHNob3VsZCBtb3ZlIHRoZSBwcm9kdWNpbmcg aW5zdHJ1Y3Rpb24gbGF0ZXIKKyAqIEJ1dCB0aGUgcHJvZHVjaW5nIGluc3RydWN0aW9uIG1pZ2h0 IGZlZWQgYSAubmV3IHN0b3JlIQorICogU28gd2UgbWF5IG5lZWQgdG8gbW92ZSB0aGF0IGV2ZW4g bGF0ZXIuCisgKi8KKworc3RhdGljIHZvaWQKK2RlY29kZV9tbXZlY19tb3ZlX2N2aV90b19lbmQo cGFja2V0X3QgKnBhY2tldCwgaW50IG1heCkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgbWF4OyBpKyspIHsKKyAgICAgICAgaWYgKEdFVF9BVFRSSUIocGFja2V0LT5pbnNuW2ld Lm9wY29kZSwgQV9DVkkpKSB7CisgICAgICAgICAgICBpbnQgbGFzdF9pbnN0ID0gcGFja2V0LT5u dW1faW5zbnMgLSAxOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSWYgdGhlIGxh c3QgaW5zdHJ1Y3Rpb24gaXMgYW4gZW5kbG9vcCwgbW92ZSB0byB0aGUgb25lIGJlZm9yZSBpdAor ICAgICAgICAgICAgICogS2VlcCBlbmRsb29wIGFzIHRoZSBsYXN0IHRoaW5nIGFsd2F5cworICAg ICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKHBhY2tldC0+aW5zbltsYXN0X2luc3RdLm9w Y29kZSA9PSBKMl9lbmRsb29wMCkgfHwKKyAgICAgICAgICAgICAgICAocGFja2V0LT5pbnNuW2xh c3RfaW5zdF0ub3Bjb2RlID09IEoyX2VuZGxvb3AxKSB8fAorICAgICAgICAgICAgICAgIChwYWNr ZXQtPmluc25bbGFzdF9pbnN0XS5vcGNvZGUgPT0gSjJfZW5kbG9vcDAxKSkgeworICAgICAgICAg ICAgICAgIGxhc3RfaW5zdC0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWNvZGVf c2VuZF9pbnNuX3RvKHBhY2tldCwgaSwgbGFzdF9pbnN0KTsKKyAgICAgICAgICAgIG1heC0tOwor ICAgICAgICAgICAgaS0tOyAgICAvKiBSZXRyeSB0aGlzIGluZGV4IG5vdyB0aGF0IHBhY2tldCBo YXMgcm90YXRlZCAqLworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50CitkZWNvZGVf c2h1ZmZsZV9mb3JfZXhlY3V0aW9uX3ZvcHMocGFja2V0X3QgKnBhY2tldCkKK3sKKyAgICAvKgor ICAgICAqIFNvcnQgZm9yIFYubmV3ID0gVk1FTSgpCisgICAgICogUmlnaHQgbm93IHdlIG5lZWQg dG8gbWFrZSBzdXJlIHRoYXQgdGhlIHZsb2FkIG9jY3VycyBiZWZvcmUgdGhlCisgICAgICogcGVy bXV0ZSBpbnN0cnVjdGlvbiBvciBWUFZYIG9wcworICAgICAqLworICAgIGludCBpOworICAgIGZv ciAoaSA9IDA7IGkgPCBwYWNrZXQtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAgIGlmIChHRVRf QVRUUklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfTE9BRCkgJiYKKyAgICAgICAgICAgIChH RVRfQVRUUklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfQ1ZJX05FVykgfHwKKyAgICAgICAg ICAgICBHRVRfQVRUUklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfQ1ZJX1RNUCkpKSB7Cisg ICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRmluZCBwcmlvciBjb25zdW1pbmcgdmVjdG9y IGluc3RydWN0aW9ucworICAgICAgICAgICAgICogTW92ZSB0byBlbmQgb2YgcGFja2V0CisgICAg ICAgICAgICAgKi8KKyAgICAgICAgICAgIGRlY29kZV9tbXZlY19tb3ZlX2N2aV90b19lbmQocGFj a2V0LCBpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGZvciAo aSA9IDA7IGkgPCBwYWNrZXQtPm51bV9pbnNucyAtIDE7IGkrKykgeworICAgICAgICBpZiAoR0VU X0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX1NUT1JFKSAmJgorICAgICAgICAgICAg R0VUX0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX0NWSV9ORVcpICYmCisgICAgICAg ICAgICAhR0VUX0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX0NWSV9TQ0FUVEVSX1JF TEVBU0UpKSB7CisgICAgICAgICAgICAvKiBkZWNvZGVfc2VuZF9pbnNuX3RvIHRoZSBlbmQgKi8K KyAgICAgICAgICAgIGludCBsYXN0X2luc3QgPSBwYWNrZXQtPm51bV9pbnNucyAtIDE7CisKKyAg ICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpcyBh biBlbmRsb29wLCBtb3ZlIHRvIHRoZSBvbmUgYmVmb3JlIGl0CisgICAgICAgICAgICAgKiBLZWVw IGVuZGxvb3AgYXMgdGhlIGxhc3QgdGhpbmcgYWx3YXlzCisgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgIGlmICgocGFja2V0LT5pbnNuW2xhc3RfaW5zdF0ub3Bjb2RlID09IEoyX2VuZGxvb3Aw KSB8fAorICAgICAgICAgICAgICAgIChwYWNrZXQtPmluc25bbGFzdF9pbnN0XS5vcGNvZGUgPT0g SjJfZW5kbG9vcDEpIHx8CisgICAgICAgICAgICAgICAgKHBhY2tldC0+aW5zbltsYXN0X2luc3Rd Lm9wY29kZSA9PSBKMl9lbmRsb29wMDEpKSB7CisgICAgICAgICAgICAgICAgbGFzdF9pbnN0LS07 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlY29kZV9zZW5kX2luc25fdG8ocGFja2V0 LCBpLCBsYXN0X2luc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuIDA7Cit9CisKKy8qIENvbGxlY3Qgc3RhdHMgb24gSFZYIHBhY2tldCAqLworc3Rh dGljIHZvaWQKK2RlY29kZV9odnhfcGFja2V0X2NvbnRlbnRzKHBhY2tldF90ICpwa3QpIHsKKyAg ICBwa3QtPnBrdF9odnhfdmEgPSAwOworICAgIHBrdC0+cGt0X2h2eF92eCA9IDA7CisgICAgcGt0 LT5wa3RfaHZ4X3ZwID0gMDsKKyAgICBwa3QtPnBrdF9odnhfdnMgPSAwOworICAgIHBrdC0+cGt0 X2h2eF9hbGwgPSAwOworICAgIHBrdC0+cGt0X2h2eF9ub25lID0gMDsKKyAgICBwa3QtPnBrdF9o YXNfaHZ4ID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGt0LT5udW1faW5zbnM7IGkr KykgeworICAgICAgICBwa3QtPnBrdF9odnhfdmEgKz0gR0VUX0FUVFJJQihwa3QtPmluc25baV0u b3Bjb2RlLCBBX0NWSV9WQSk7CisgICAgICAgIHBrdC0+cGt0X2h2eF92eCArPSBHRVRfQVRUUklC KHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfQ1ZJX1ZYKTsKKyAgICAgICAgcGt0LT5wa3RfaHZ4X3Zw ICs9IEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9DVklfVlApOworICAgICAgICBw a3QtPnBrdF9odnhfdnMgKz0gR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2RlLCBBX0NWSV9W Uyk7CisgICAgICAgIHBrdC0+cGt0X2h2eF9ub25lICs9IEdFVF9BVFRSSUIocGt0LT5pbnNuW2ld Lm9wY29kZSwgQV9DVklfVE1QKTsKKyAgICAgICAgcGt0LT5wa3RfaHZ4X2FsbCArPSBHRVRfQVRU UklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfQ1ZJXzRTTE9UKTsKKyAgICAgICAgcGt0LT5wa3Rf aHZ4X3ZhICs9IDIgKiBHRVRfQVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfQ1ZJX1ZBX0RW KTsKKyAgICAgICAgcGt0LT5wa3RfaHZ4X3Z4ICs9IDIgKiBHRVRfQVRUUklCKHBrdC0+aW5zbltp XS5vcGNvZGUsIEFfQ1ZJX1ZYX0RWKTsKKyAgICAgICAgcGt0LT5wa3RfaHZ4X3ZwICs9IEdFVF9B VFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9DVklfVlBfVlMpOworICAgICAgICBwa3QtPnBr dF9odnhfdnMgKz0gR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2RlLCBBX0NWSV9WUF9WUyk7 CisgICAgICAgIHBrdC0+cGt0X2hhc19odnggfD0gcGt0LT5pbnNuW2ldLmh2eF9yZXNvdXJjZSA/ IDEgOiAwOworICAgIH0KK30KKworLyoKKyAqIFB1YmxpYyBGdW5jdGlvbnMKKyAqLworCitjb25z dCBjaGFyICoKK21tdmVjX2V4dF9kZWNvZGVfZmluZF9pY2xhc3Nfc2xvdHMoaW50IG9wY29kZSkK K3sKKyAgICBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfQ1ZJX1ZNKSkgeworICAgICAgICBpZiAo R0VUX0FUVFJJQihvcGNvZGUsIEFfUkVTVFJJQ1RfU0xPVDBPTkxZKSkgeworICAgICAgICAgICAg cmV0dXJuICIwIjsKKyAgICAgICAgfSBlbHNlIGlmIChHRVRfQVRUUklCKG9wY29kZSwgQV9SRVNU UklDVF9TTE9UMU9OTFkpKSB7CisgICAgICAgICAgICByZXR1cm4gIjEiOworICAgICAgICB9Cisg ICAgICAgIHJldHVybiAiMDEiOworICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFf UkVTVFJJQ1RfU0xPVDJPTkxZKSkgeworICAgICAgICByZXR1cm4gIjIiOworICAgIH0gZWxzZSBp ZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfQ1ZJX1ZYKSkgeworICAgICAgICByZXR1cm4gIjIzIjsK KyAgICB9IGVsc2UgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX0NWSV9WU19WWCkpIHsKKyAgICAg ICAgcmV0dXJuICIyMyI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuICIwMTIzIjsKKyAg ICB9Cit9CisKK2ludCBtbXZlY19leHRfZGVjb2RlX2NoZWNrcyhwYWNrZXRfdCAqcGFja2V0KQor eworICAgIGludCBlcnJvcnMgPSAwOworICAgIGVycm9ycyArPSBjaGVja19uZXdfdmFsdWUocGFj a2V0KTsKKyAgICBlcnJvcnMgKz0gZGVjb2RlX3BvcHVsYXRlX2N2aV9yZXNvdXJjZXMocGFja2V0 KTsKKyAgICBlcnJvcnMgKz0gZGVjb2RlX3NodWZmbGVfZm9yX2V4ZWN1dGlvbl92b3BzKHBhY2tl dCk7CisKKyAgICBpZiAoZXJyb3JzID09IDApIHsKKyAgICAgICAgZGVjb2RlX2h2eF9wYWNrZXRf Y29udGVudHMocGFja2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3JzOworfQorCmRpZmYg LS1naXQgYS90YXJnZXQvaGV4YWdvbi9xNnZfZGVjb2RlLmMgYi90YXJnZXQvaGV4YWdvbi9xNnZf ZGVjb2RlLmMKaW5kZXggZjJiMTU0OC4uMmQyNTNkYiAxMDA2NDQKLS0tIGEvdGFyZ2V0L2hleGFn b24vcTZ2X2RlY29kZS5jCisrKyBiL3RhcmdldC9oZXhhZ29uL3E2dl9kZWNvZGUuYwpAQCAtMTYx LDYgKzE2MSwxMyBAQCBkZWNvZGVfaW5zbnNfdGFibGV3YWxrKGluc25fdCAqaW5zbiwgZGVjdHJl ZV90YWJsZV90ICp0YWJsZSwgc2l6ZTR1X3QgZW5jb2RpbmcpCiAgICAgICAgIH0KICAgICAgICAg ZGVjb2RlX29wKGluc24sIG9wYywgZW5jb2RpbmcpOwogICAgICAgICByZXR1cm4gMTsKKyAgICB9 IGVsc2UgaWYgKHRhYmxlLT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVfRVhUU1BBQ0UpIHsKKyAg ICAgICAgc2l6ZTR1X3QgYWN0aXZlX2V4dDsKKyAgICAgICAgLyoKKyAgICAgICAgICogRm9yIG5v dywgSFZYIHdpbGwgYmUgdGhlIG9ubHkgY29wcm9jCisgICAgICAgICAqLworICAgICAgICBhY3Rp dmVfZXh0ID0gNDsKKyAgICAgICAgcmV0dXJuIGRlY29kZV9pbnNuc190YWJsZXdhbGsoaW5zbiwg ZXh0X3RyZWVzW2FjdGl2ZV9leHRdLCBlbmNvZGluZyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg cmV0dXJuIDA7CiAgICAgfQpAQCAtMzU2LDEwICszNjMsMTMgQEAgc3RhdGljIGludCBkb19kZWNv ZGVfcGFja2V0KGludCBtYXhfd29yZHMsIGNvbnN0IHNpemU0dV90ICp3b3JkcywgcGFja2V0X3Qg KnBrdCkKICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19wYXlsb2FkID0gMTsKICAgICAgICAgfQog ICAgIH0KKyAgICBwa3QtPnBrdF9oYXNfZXh0ZW5zaW9uID0gMDsKICAgICBwa3QtPnBrdF9oYXNf aW5pdGxvb3AgPSAwOwogICAgIHBrdC0+cGt0X2hhc19pbml0bG9vcDAgPSAwOwogICAgIHBrdC0+ cGt0X2hhc19pbml0bG9vcDEgPSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1faW5zbnM7IGkr KykgeworICAgICAgICBwa3QtPnBrdF9oYXNfZXh0ZW5zaW9uIHw9CisgICAgICAgICAgICBHRVRf QVRUUklCKHBrdC0+aW5zbltpXS5vcGNvZGUsIEFfRVhURU5TSU9OKTsKICAgICAgICAgcGt0LT5w a3RfaGFzX2luaXRsb29wMCB8PQogICAgICAgICAgICAgR0VUX0FUVFJJQihwa3QtPmluc25baV0u b3Bjb2RlLCBBX0hXTE9PUDBfU0VUVVApOwogICAgICAgICBwa3QtPnBrdF9oYXNfaW5pdGxvb3Ax IHw9CkBAIC0zOTEsNiArNDAxLDEwIEBAIHN0YXRpYyBpbnQgZG9fZGVjb2RlX3BhY2tldChpbnQg bWF4X3dvcmRzLCBjb25zdCBzaXplNHVfdCAqd29yZHMsIHBhY2tldF90ICpwa3QpCiAgICAgZXJy b3JzICs9IGRlY29kZV9zZXRfc2xvdF9udW1iZXIocGt0KTsKICAgICBlcnJvcnMgKz0gZGVjb2Rl X2ZpbGxfbmV3dmFsdWVfcmVnbm8ocGt0KTsKIAorICAgIGlmIChwa3QtPnBrdF9oYXNfZXh0ZW5z aW9uKSB7CisgICAgICAgIGVycm9ycyArPSBtbXZlY19leHRfZGVjb2RlX2NoZWNrcyhwa3QpOwor ICAgIH0KKwogICAgIGVycm9ycyArPSBkZWNvZGVfc2h1ZmZsZV9mb3JfZXhlY3V0aW9uKHBrdCk7 CiAgICAgZXJyb3JzICs9IGRlY29kZV9zcGxpdF9jbXBqdW1wKHBrdCk7CiAgICAgZXJyb3JzICs9 IGRlY29kZV9zZXRfaW5zbl9hdHRyX2ZpZWxkcyhwa3QpOwotLSAKMi43LjQKCg==