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=-12.6 required=3.0 tests=BAYES_00,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 E939BC2D0A8 for ; Mon, 28 Sep 2020 17:35:39 +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 6DD3A2083B for ; Mon, 28 Sep 2020 17:35:39 +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="nNq1r9ba" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6DD3A2083B 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]:50056 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kMx3q-000323-Eq for qemu-devel@archiver.kernel.org; Mon, 28 Sep 2020 13:35:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48690) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kMwxf-0002gX-4c for qemu-devel@nongnu.org; Mon, 28 Sep 2020 13:29:15 -0400 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:51881) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kMwxY-0007vA-JQ for qemu-devel@nongnu.org; Mon, 28 Sep 2020 13:29:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1601314148; x=1632850148; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MyiNJq3bQDeE4a0I2r0ddui4QCYjUHWsV/9nFVRtafM=; b=nNq1r9ba4LYIPfU5htMxmEpuBxiCTIdE3bbMSrUU3P98uxptXbkrXDNZ /6Po2ZesJsHwpf9dSiASdgjjqMhABt4w4bY6n2+j7LVfP9hqC5T8f20Ux ogAYXdFX0fKj3v5gSmv+AKkFyBKGiQqQXHvabByn29Blm451VFzW4zQo+ A=; Received: from unknown (HELO ironmsg04-sd.qualcomm.com) ([10.53.140.144]) by alexa-out-sd-02.qualcomm.com with ESMTP; 28 Sep 2020 10:29:03 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg04-sd.qualcomm.com with ESMTP; 28 Sep 2020 10:29:03 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 00DE511E9; Mon, 28 Sep 2020 12:29:02 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v4 13/29] Hexagon (target/hexagon) instruction/packet decode Date: Mon, 28 Sep 2020 12:28:42 -0500 Message-Id: <1601314138-9930-14-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1601314138-9930-1-git-send-email-tsimpson@quicinc.com> References: <1601314138-9930-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.39; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-02.qualcomm.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/28 13:29:03 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.199, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: ale@rev.ng, riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGFrZSB0aGUgd29yZHMgZnJvbSBpbnN0cnVjdGlvbiBtZW1vcnkgYW5kIGJ1aWxkIGEgcGFja2V0 X3QgZm9yIFRDRyBjb2RlCmdlbmVyYXRpb24KClRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUg cGVyZm9ybWVkCiAgICBDb252ZXJ0IHRoZSAubmV3IGVuY29kZWQgb2Zmc2V0IHRvIHRoZSByZWdp c3RlciBudW1iZXIgb2YgdGhlIHByb2R1Y2VyCiAgICBSZW9yZGVyIHRoZSBwYWNrZXQgc28gLm5l dyBwcm9kdWNlciBpcyBiZWZvcmUgY29uc3VtZXIKICAgIEFwcGx5IGNvbnN0YW50IGV4dGVuZGVy cwogICAgU2VwYXJhdGUgc3ViaW5zbidzIGludG8gdHdvIGluc3RydWN0aW9ucwogICAgQnJlYWsg Y29tcGFyZS1qdW1wcyBpbnRvIHR3byBpbnN0cnVjdGlvbnMKICAgIENyZWF0ZSBpbnN0cnVjdGlv bnMgZm9yIDplbmRsb29wCgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25A cXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vZGVjb2RlLmggICAgIHwgIDM5ICsrKwog dGFyZ2V0L2hleGFnb24vZGVjb2RlLmMgICAgIHwgNjA2ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiB0YXJnZXQvaGV4YWdvbi9xNnZfZGVjb2RlLmMgfCAzNzMg KysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDEwMTggaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL2RlY29kZS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vZGVjb2RlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB0YXJnZXQvaGV4YWdvbi9xNnZfZGVjb2RlLmMKCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdv bi9kZWNvZGUuaCBiL3RhcmdldC9oZXhhZ29uL2RlY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjBmOWIwMWYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdv bi9kZWNvZGUuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIw MjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K KyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5k ZWYgSEVYQUdPTl9ERUNPREVfSAorI2RlZmluZSBIRVhBR09OX0RFQ09ERV9ICisKKyNpbmNsdWRl ICJjcHUuaCIKKyNpbmNsdWRlICJvcGNvZGVzLmgiCisjaW5jbHVkZSAiaGV4X2FyY2hfdHlwZXMu aCIKKyNpbmNsdWRlICJpbnNuLmgiCisKK2V4dGVybiB2b2lkIGRlY29kZV9pbml0KHZvaWQpOwor CitzdGF0aWMgaW5saW5lIGludCBpc19wYWNrZXRfZW5kKHVpbnQzMl90IHdvcmQpCit7CisgICAg dWludDMyX3QgYml0cyA9ICh3b3JkID4+IDE0KSAmIDB4MzsKKyAgICByZXR1cm4gKChiaXRzID09 IDB4MykgfHwgKGJpdHMgPT0gMHgwKSk7Cit9CisKK2V4dGVybiB2b2lkIGRlY29kZV9zZW5kX2lu c25fdG8ocGFja2V0X3QgKnBhY2tldCwgaW50IHN0YXJ0LCBpbnQgbmV3bG9jKTsKKworZXh0ZXJu IHBhY2tldF90ICpkZWNvZGVfdGhpcyhpbnQgbWF4X3dvcmRzLCB1aW50MzJfdCAqd29yZHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldF90ICpkZWNvZGVfcGt0KTsKKworI2Vu ZGlmCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9kZWNvZGUuYyBiL3RhcmdldC9oZXhhZ29u L2RlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MGYxOTgKLS0t IC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9kZWNvZGUuYwpAQCAtMCwwICsxLDYwNiBA QAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1 ZGUgInFlbXUvbG9nLmgiCisjaW5jbHVkZSAiaWNsYXNzLmgiCisjaW5jbHVkZSAib3Bjb2Rlcy5o IgorI2luY2x1ZGUgImdlbnB0ci5oIgorI2luY2x1ZGUgImRlY29kZS5oIgorI2luY2x1ZGUgImlu c24uaCIKKyNpbmNsdWRlICJwcmludGluc24uaCIKKworI2RlZmluZSBmWlhUTihOLCBNLCBWQUwp ICgoVkFMKSAmICgoMUxMIDw8IChOKSkgLSAxKSkKKworZW51bSB7CisgICAgRVhUX0lEWF9ub2V4 dCA9IDAsCisgICAgRVhUX0lEWF9ub2V4dF9BRlRFUiA9IDQsCisgICAgRVhUX0lEWF9tbXZlYyA9 IDQsCisgICAgRVhUX0lEWF9tbXZlY19BRlRFUiA9IDgsCisgICAgWFhfTEFTVF9FWFRfSURYCit9 OworCisvKgorICogIENlcnRhaW4gb3BlcmFuZCB0eXBlcyByZXByZXNlbnQgYSBub24tY29udGln dW91cyBzZXQgb2YgdmFsdWVzLgorICogIEZvciBleGFtcGxlLCB0aGUgY29tcG91bmQgY29tcGFy ZS1hbmQtanVtcCBpbnN0cnVjdGlvbiBjYW4gb25seSBhY2Nlc3MKKyAqICByZWdpc3RlcnMgUjAt UjcgYW5kIFIxNi0yMy4KKyAqICBUaGlzIHRhYmxlIHJlcHJlc2VudHMgdGhlIG1hcHBpbmcgZnJv bSB0aGUgZW5jb2RpbmcgdG8gdGhlIGFjdHVhbCB2YWx1ZXMuCisgKi8KKworI2RlZmluZSBERUZf UkVHTUFQKE5BTUUsIEVMRU1FTlRTLCAuLi4pIFwKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg aW50IERFQ09ERV9SRUdJU1RFUl8jI05BTUVbRUxFTUVOVFNdID0gXAorICAgIHsgX19WQV9BUkdT X18gfTsKKyAgICAgICAgLyogTmFtZSAgIE51bSBUYWJsZSAqLworREVGX1JFR01BUChSXzE2LCAg MTYsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAy MykKK0RFRl9SRUdNQVAoUl9fOCwgIDgsICAwLCAyLCA0LCA2LCAxNiwgMTgsIDIwLCAyMikKK0RF Rl9SRUdNQVAoUl9fNCwgIDQsICAwLCAyLCA0LCA2KQorREVGX1JFR01BUChSXzQsICAgNCwgIDAs IDEsIDIsIDMpCitERUZfUkVHTUFQKFJfOFMsICA4LCAgMCwgMSwgMiwgMywgMTYsIDE3LCAxOCwg MTkpCitERUZfUkVHTUFQKFJfOCwgICA4LCAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNykKK0RFRl9S RUdNQVAoVl9fOCwgIDgsICAwLCA0LCA4LCAxMiwgMTYsIDIwLCAyNCwgMjgpCitERUZfUkVHTUFQ KFZfXzE2LCAxNiwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0 LCAyNiwgMjgsIDMwKQorCisjZGVmaW5lIERFQ09ERV9NQVBQRURfUkVHKFJFR05PLCBOQU1FKSBc CisgICAgaW5zbi0+cmVnbm9bUkVHTk9dID0gREVDT0RFX1JFR0lTVEVSXyMjTkFNRVtpbnNuLT5y ZWdub1tSRUdOT11dOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgc3RydWN0IF9kZWN0cmVlX3Rh YmxlX3N0cnVjdCAqdGFibGVfbGluazsKKyAgICBzdHJ1Y3QgX2RlY3RyZWVfdGFibGVfc3RydWN0 ICp0YWJsZV9saW5rX2I7CisgICAgb3Bjb2RlX3Qgb3Bjb2RlOworICAgIGVudW0geworICAgICAg ICBERUNUUkVFX0VOVFJZX0lOVkFMSUQsCisgICAgICAgIERFQ1RSRUVfVEFCTEVfTElOSywKKyAg ICAgICAgREVDVFJFRV9TVUJJTlNOUywKKyAgICAgICAgREVDVFJFRV9FWFRTUEFDRSwKKyAgICAg ICAgREVDVFJFRV9URVJNSU5BTAorICAgIH0gdHlwZTsKK30gZGVjdHJlZV9lbnRyeV90OworCit0 eXBlZGVmIHN0cnVjdCBfZGVjdHJlZV90YWJsZV9zdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCAo Kmxvb2t1cF9mdW5jdGlvbikoaW50IHN0YXJ0Yml0LCBpbnQgd2lkdGgsIHVpbnQzMl90IG9wY29k ZSk7CisgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgdW5zaWduZWQgaW50IHN0YXJ0Yml0Owor ICAgIHVuc2lnbmVkIGludCB3aWR0aDsKKyAgICBkZWN0cmVlX2VudHJ5X3QgdGFibGVbXTsKK30g ZGVjdHJlZV90YWJsZV90OworCisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBX SEFUTk9UKSBcCisgICAgc3RhdGljIHN0cnVjdCBfZGVjdHJlZV90YWJsZV9zdHJ1Y3QgZGVjdHJl ZV90YWJsZV8jI1RBRzsKKyNkZWZpbmUgVEFCTEVfTElOSyhUQUJMRSkgICAgICAgICAgICAgICAg ICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIFRFUk1JTkFMKFRBRywgRU5DKSAgICAgICAgICAg ICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBTVUJJTlNOUyhUQUcsIENMQVNTQSwgQ0xB U1NCLCBFTkMpICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgRVhUU1BBQ0UoVEFHLCBFTkMpICAg ICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIElOVkFMSUQoKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNPREVfRU5EX1RB QkxFKC4uLikgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX01B VENIX0lORk8oLi4uKSAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09E RV9MRUdBQ1lfTUFUQ0hfSU5GTyguLi4pICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBE RUNPREVfT1BJTkZPKC4uLikgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKworI2lu Y2x1ZGUgImRlY3RyZWVfZ2VuZXJhdGVkLmgiCisKKyN1bmRlZiBERUNPREVfT1BJTkZPCisjdW5k ZWYgREVDT0RFX01BVENIX0lORk8KKyN1bmRlZiBERUNPREVfTEVHQUNZX01BVENIX0lORk8KKyN1 bmRlZiBERUNPREVfRU5EX1RBQkxFCisjdW5kZWYgSU5WQUxJRAorI3VuZGVmIFRFUk1JTkFMCisj dW5kZWYgU1VCSU5TTlMKKyN1bmRlZiBFWFRTUEFDRQorI3VuZGVmIFRBQkxFX0xJTksKKyN1bmRl ZiBERUNPREVfTkVXX1RBQkxFCisjdW5kZWYgREVDT0RFX1NFUEFSQVRPUl9CSVRTCisKKyNkZWZp bmUgREVDT0RFX1NFUEFSQVRPUl9CSVRTKFNUQVJULCBXSURUSCkgTlVMTCwgU1RBUlQsIFdJRFRI CisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEVfSEVMUEVSKFRBRywgU0laRSwgRk4sIFNUQVJULCBX SURUSCkgXAorICAgIHN0YXRpYyBkZWN0cmVlX3RhYmxlX3QgZGVjdHJlZV90YWJsZV8jI1RBRyA9 IHsgXAorICAgICAgICAuc2l6ZSA9IFNJWkUsIFwKKyAgICAgICAgLmxvb2t1cF9mdW5jdGlvbiA9 IEZOLCBcCisgICAgICAgIC5zdGFydGJpdCA9IFNUQVJULCBcCisgICAgICAgIC53aWR0aCA9IFdJ RFRILCBcCisgICAgICAgIC50YWJsZSA9IHsKKyNkZWZpbmUgREVDT0RFX05FV19UQUJMRShUQUcs IFNJWkUsIFdIQVROT1QpIFwKKyAgICBERUNPREVfTkVXX1RBQkxFX0hFTFBFUihUQUcsIFNJWkUs IFdIQVROT1QpCisKKyNkZWZpbmUgVEFCTEVfTElOSyhUQUJMRSkgXAorICAgIHsgLnR5cGUgPSBE RUNUUkVFX1RBQkxFX0xJTkssIC50YWJsZV9saW5rID0gJmRlY3RyZWVfdGFibGVfIyNUQUJMRSB9 LAorI2RlZmluZSBURVJNSU5BTChUQUcsIEVOQykgXAorICAgIHsgLnR5cGUgPSBERUNUUkVFX1RF Uk1JTkFMLCAub3Bjb2RlID0gVEFHICB9LAorI2RlZmluZSBTVUJJTlNOUyhUQUcsIENMQVNTQSwg Q0xBU1NCLCBFTkMpIFwKKyAgICB7IFwKKyAgICAgICAgLnR5cGUgPSBERUNUUkVFX1NVQklOU05T LCBcCisgICAgICAgIC50YWJsZV9saW5rID0gJmRlY3RyZWVfdGFibGVfREVDT0RFX1NVQklOU05f IyNDTEFTU0EsIFwKKyAgICAgICAgLnRhYmxlX2xpbmtfYiA9ICZkZWN0cmVlX3RhYmxlX0RFQ09E RV9TVUJJTlNOXyMjQ0xBU1NCIFwKKyAgICB9LAorI2RlZmluZSBFWFRTUEFDRShUQUcsIEVOQykg eyAudHlwZSA9IERFQ1RSRUVfRVhUU1BBQ0UgfSwKKyNkZWZpbmUgSU5WQUxJRCgpIHsgLnR5cGUg PSBERUNUUkVFX0VOVFJZX0lOVkFMSUQsIC5vcGNvZGUgPSBYWF9MQVNUX09QQ09ERSB9LAorCisj ZGVmaW5lIERFQ09ERV9FTkRfVEFCTEUoLi4uKSB9IH07CisKKyNkZWZpbmUgREVDT0RFX01BVENI X0lORk8oLi4uKSAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09ERV9M RUdBQ1lfTUFUQ0hfSU5GTyguLi4pICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBERUNP REVfT1BJTkZPKC4uLikgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKworI2luY2x1 ZGUgImRlY3RyZWVfZ2VuZXJhdGVkLmgiCisKKyN1bmRlZiBERUNPREVfT1BJTkZPCisjdW5kZWYg REVDT0RFX01BVENIX0lORk8KKyN1bmRlZiBERUNPREVfTEVHQUNZX01BVENIX0lORk8KKyN1bmRl ZiBERUNPREVfRU5EX1RBQkxFCisjdW5kZWYgSU5WQUxJRAorI3VuZGVmIFRFUk1JTkFMCisjdW5k ZWYgU1VCSU5TTlMKKyN1bmRlZiBFWFRTUEFDRQorI3VuZGVmIFRBQkxFX0xJTksKKyN1bmRlZiBE RUNPREVfTkVXX1RBQkxFCisjdW5kZWYgREVDT0RFX05FV19UQUJMRV9IRUxQRVIKKyN1bmRlZiBE RUNPREVfU0VQQVJBVE9SX0JJVFMKKworc3RhdGljIGRlY3RyZWVfdGFibGVfdCBkZWN0cmVlX3Rh YmxlX0RFQ09ERV9FWFRfRVhUX25vZXh0ID0geworICAgIC5zaXplID0gMSwgLmxvb2t1cF9mdW5j dGlvbiA9IE5VTEwsIC5zdGFydGJpdCA9IDAsIC53aWR0aCA9IDAsCisgICAgLnRhYmxlID0gewor ICAgICAgICB7IC50eXBlID0gREVDVFJFRV9FTlRSWV9JTlZBTElELCAub3Bjb2RlID0gWFhfTEFT VF9PUENPREUgfSwKKyAgICB9Cit9OworCitzdGF0aWMgZGVjdHJlZV90YWJsZV90ICpleHRfdHJl ZXNbWFhfTEFTVF9FWFRfSURYXTsKKworc3RhdGljIHZvaWQgZGVjb2RlX2V4dF9pbml0KHZvaWQp Cit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gRVhUX0lEWF9ub2V4dDsgaSA8IEVYVF9JRFhf bm9leHRfQUZURVI7IGkrKykgeworICAgICAgICBleHRfdHJlZXNbaV0gPSAmZGVjdHJlZV90YWJs ZV9ERUNPREVfRVhUX0VYVF9ub2V4dDsKKyAgICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAg ICB1aW50MzJfdCBtYXNrOworICAgIHVpbnQzMl90IG1hdGNoOworfSBkZWNvZGVfaXRhYmxlX2Vu dHJ5X3Q7CisKKyNkZWZpbmUgREVDT0RFX05FV19UQUJMRShUQUcsIFNJWkUsIFdIQVROT1QpICAv KiBOT1RISU5HICovCisjZGVmaW5lIFRBQkxFX0xJTksoVEFCTEUpICAgICAgICAgICAgICAgICAg ICAgLyogTk9USElORyAqLworI2RlZmluZSBURVJNSU5BTChUQUcsIEVOQykgICAgICAgICAgICAg ICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgU1VCSU5TTlMoVEFHLCBDTEFTU0EsIENMQVNT QiwgRU5DKSAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIEVYVFNQQUNFKFRBRywgRU5DKSAgICAg ICAgICAgICAgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBJTlZBTElEKCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX0VORF9UQUJM RSguLi4pICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIERFQ09ERV9PUElO Rk8oLi4uKSAgICAgICAgICAgICAgICAgICAgLyogTk9USElORyAqLworCisjZGVmaW5lIERFQ09E RV9NQVRDSF9JTkZPX05PUk1BTChUQUcsIE1BU0ssIE1BVENIKSBcCisgICAgW1RBR10gPSB7IFwK KyAgICAgICAgLm1hc2sgPSBNQVNLLCBcCisgICAgICAgIC5tYXRjaCA9IE1BVENILCBcCisgICAg fSwKKworI2RlZmluZSBERUNPREVfTUFUQ0hfSU5GT19OVUxMKFRBRywgTUFTSywgTUFUQ0gpIFwK KyAgICBbVEFHXSA9IHsgLm1hdGNoID0gfjAgfSwKKworI2RlZmluZSBERUNPREVfTUFUQ0hfSU5G TyguLi4pIERFQ09ERV9NQVRDSF9JTkZPX05PUk1BTChfX1ZBX0FSR1NfXykKKyNkZWZpbmUgREVD T0RFX0xFR0FDWV9NQVRDSF9JTkZPKC4uLikgLyogTk9USElORyAqLworCitzdGF0aWMgY29uc3Qg ZGVjb2RlX2l0YWJsZV9lbnRyeV90IGRlY29kZV9pdGFibGVbWFhfTEFTVF9PUENPREVdID0gewor I2luY2x1ZGUgImRlY3RyZWVfZ2VuZXJhdGVkLmgiCit9OworCisjdW5kZWYgREVDT0RFX01BVENI X0lORk8KKyNkZWZpbmUgREVDT0RFX01BVENIX0lORk8oLi4uKSBERUNPREVfTUFUQ0hfSU5GT19O VUxMKF9fVkFfQVJHU19fKQorCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisjZGVm aW5lIERFQ09ERV9MRUdBQ1lfTUFUQ0hfSU5GTyguLi4pIERFQ09ERV9NQVRDSF9JTkZPX05PUk1B TChfX1ZBX0FSR1NfXykKKworc3RhdGljIGNvbnN0IGRlY29kZV9pdGFibGVfZW50cnlfdCBkZWNv ZGVfbGVnYWN5X2l0YWJsZVtYWF9MQVNUX09QQ09ERV0gPSB7CisjaW5jbHVkZSAiZGVjdHJlZV9n ZW5lcmF0ZWQuaCIKK307CisKKyN1bmRlZiBERUNPREVfT1BJTkZPCisjdW5kZWYgREVDT0RFX01B VENIX0lORk8KKyN1bmRlZiBERUNPREVfTEVHQUNZX01BVENIX0lORk8KKyN1bmRlZiBERUNPREVf RU5EX1RBQkxFCisjdW5kZWYgSU5WQUxJRAorI3VuZGVmIFRFUk1JTkFMCisjdW5kZWYgU1VCSU5T TlMKKyN1bmRlZiBFWFRTUEFDRQorI3VuZGVmIFRBQkxFX0xJTksKKyN1bmRlZiBERUNPREVfTkVX X1RBQkxFCisjdW5kZWYgREVDT0RFX1NFUEFSQVRPUl9CSVRTCisKK3ZvaWQgZGVjb2RlX2luaXQo dm9pZCkKK3sKKyAgICBkZWNvZGVfZXh0X2luaXQoKTsKK30KKwordm9pZCBkZWNvZGVfc2VuZF9p bnNuX3RvKHBhY2tldF90ICpwYWNrZXQsIGludCBzdGFydCwgaW50IG5ld2xvYykKK3sKKyAgICBp bnNuX3QgdG1waW5zbjsKKyAgICBpbnQgZGlyZWN0aW9uOworICAgIGludCBpOworICAgIGlmIChz dGFydCA9PSBuZXdsb2MpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc3RhcnQg PCBuZXdsb2MpIHsKKyAgICAgICAgLyogTW92ZSB0b3dhcmRzIGVuZCAqLworICAgICAgICBkaXJl Y3Rpb24gPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIG1vdmUgdG93YXJkcyBiZWdpbm5p bmcgKi8KKyAgICAgICAgZGlyZWN0aW9uID0gLTE7CisgICAgfQorICAgIGZvciAoaSA9IHN0YXJ0 OyBpICE9IG5ld2xvYzsgaSArPSBkaXJlY3Rpb24pIHsKKyAgICAgICAgdG1waW5zbiA9IHBhY2tl dC0+aW5zbltpXTsKKyAgICAgICAgcGFja2V0LT5pbnNuW2ldID0gcGFja2V0LT5pbnNuW2kgKyBk aXJlY3Rpb25dOworICAgICAgICBwYWNrZXQtPmluc25baSArIGRpcmVjdGlvbl0gPSB0bXBpbnNu OworICAgIH0KK30KKworLyogRmlsbCBuZXd2YWx1ZSByZWdpc3RlcnMgd2l0aCB0aGUgY29ycmVj dCByZWdubyAqLworc3RhdGljIGludAorZGVjb2RlX2ZpbGxfbmV3dmFsdWVfcmVnbm8ocGFja2V0 X3QgKnBhY2tldCkKK3sKKyAgICBpbnQgaSwgdXNlX3JlZ2lkeCwgZGVmX2lkeDsKKyAgICB1aW50 MTZfdCBkZWZfb3Bjb2RlLCB1c2Vfb3Bjb2RlOworICAgIGNoYXIgKmRzdHN0cjsKKworICAgIGZv ciAoaSA9IDE7IGkgPCBwYWNrZXQtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAgIGlmIChHRVRf QVRUUklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfRE9UTkVXVkFMVUUpICYmCisgICAgICAg ICAgICAhR0VUX0FUVFJJQihwYWNrZXQtPmluc25baV0ub3Bjb2RlLCBBX0VYVEVOU0lPTikpIHsK KyAgICAgICAgICAgIHVzZV9vcGNvZGUgPSBwYWNrZXQtPmluc25baV0ub3Bjb2RlOworCisgICAg ICAgICAgICAvKiBJdCdzIGEgc3RvcmUsIHNvIHdlJ3JlIGFkanVzdGluZyB0aGUgTnQgZmllbGQg Ki8KKyAgICAgICAgICAgIGlmIChHRVRfQVRUUklCKHVzZV9vcGNvZGUsIEFfU1RPUkUpKSB7Cisg ICAgICAgICAgICAgICAgdXNlX3JlZ2lkeCA9IHN0cmNocihvcGNvZGVfcmVnaW5mb1t1c2Vfb3Bj b2RlXSwgJ3QnKSAtCisgICAgICAgICAgICAgICAgICAgIG9wY29kZV9yZWdpbmZvW3VzZV9vcGNv ZGVdOworICAgICAgICAgICAgfSBlbHNlIHsgICAgLyogSXQncyBhIEp1bXAsIHNvIHdlJ3JlIGFk anVzdGluZyB0aGUgTnMgZmllbGQgKi8KKyAgICAgICAgICAgICAgICB1c2VfcmVnaWR4ID0gc3Ry Y2hyKG9wY29kZV9yZWdpbmZvW3VzZV9vcGNvZGVdLCAncycpIC0KKyAgICAgICAgICAgICAgICAg ICAgb3Bjb2RlX3JlZ2luZm9bdXNlX29wY29kZV07CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgIC8qCisgICAgICAgICAgICAgKiBXaGF0J3MgZW5jb2RlZCBhdCB0aGUgTi1maWVsZCBpcyB0 aGUgb2Zmc2V0IHRvIHdobydzIHByb2R1Y2luZworICAgICAgICAgICAgICogdGhlIHZhbHVlLiAg U2hpZnQgb2ZmIHRoZSBMU0Igd2hpY2ggaW5kaWNhdGVzIG9kZC9ldmVuIHJlZ2lzdGVyLgorICAg ICAgICAgICAgICovCisgICAgICAgICAgICBkZWZfaWR4ID0gaSAtICgocGFja2V0LT5pbnNuW2ld LnJlZ25vW3VzZV9yZWdpZHhdKSA+PiAxKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAg ICAqIENoZWNrIGZvciBhIGJhZGx5IGVuY29kZWQgTi1maWVsZCB3aGljaCBwb2ludHMgdG8gYW4g aW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAqIG91dC1vZi1yYW5nZQorICAgICAgICAgICAgICov CisgICAgICAgICAgICBpZiAoKGRlZl9pZHggPCAwKSB8fCAoZGVmX2lkeCA+IChwYWNrZXQtPm51 bV9pbnNucyAtIDEpKSkgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHByZXZpb3VzIGluc24gaXMgdGhlIHBy b2R1Y2VyICovCisgICAgICAgICAgICBkZWZfb3Bjb2RlID0gcGFja2V0LT5pbnNuW2RlZl9pZHhd Lm9wY29kZTsKKyAgICAgICAgICAgIGRzdHN0ciA9IHN0cnN0cihvcGNvZGVfd3JlZ3NbZGVmX29w Y29kZV0sICJSZCIpOworICAgICAgICAgICAgaWYgKGRzdHN0cikgeworICAgICAgICAgICAgICAg IGRzdHN0ciA9IHN0cmNocihvcGNvZGVfcmVnaW5mb1tkZWZfb3Bjb2RlXSwgJ2QnKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZHN0c3RyID0gc3Ryc3RyKG9wY29kZV93 cmVnc1tkZWZfb3Bjb2RlXSwgIlJ4Iik7CisgICAgICAgICAgICAgICAgaWYgKGRzdHN0cikgewor ICAgICAgICAgICAgICAgICAgICBkc3RzdHIgPSBzdHJjaHIob3Bjb2RlX3JlZ2luZm9bZGVmX29w Y29kZV0sICd4Jyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgZHN0c3RyID0gc3Ryc3RyKG9wY29kZV93cmVnc1tkZWZfb3Bjb2RlXSwgIlJlIik7CisgICAg ICAgICAgICAgICAgICAgIGlmIChkc3RzdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRz dHN0ciA9IHN0cmNocihvcGNvZGVfcmVnaW5mb1tkZWZfb3Bjb2RlXSwgJ2UnKTsKKyAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdHN0ciA9IHN0 cnN0cihvcGNvZGVfd3JlZ3NbZGVmX29wY29kZV0sICJSeSIpOworICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGRzdHN0cikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdHN0ciA9 IHN0cmNocihvcGNvZGVfcmVnaW5mb1tkZWZfb3Bjb2RlXSwgJ3knKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19hc3NlcnRf bm90X3JlYWNoZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdf YXNzZXJ0KGRzdHN0ciAhPSBOVUxMKTsKKworICAgICAgICAgICAgLyogTm93IHBhdGNoIHVwIHRo ZSBjb25zdW1lciB3aXRoIHRoZSByZWdpc3RlciBudW1iZXIgKi8KKyAgICAgICAgICAgIHBhY2tl dC0+aW5zbltpXS5yZWdub1t1c2VfcmVnaWR4XSA9CisgICAgICAgICAgICAgICAgcGFja2V0LT5p bnNuW2RlZl9pZHhdLnJlZ25vW2RzdHN0ciAtCisgICAgICAgICAgICAgICAgICAgIG9wY29kZV9y ZWdpbmZvW2RlZl9vcGNvZGVdXTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBXZSBu ZWVkIHRvIHJlbWVtYmVyIHdobyBwcm9kdWNlcyB0aGlzIHZhbHVlIHRvIGxhdGVyCisgICAgICAg ICAgICAgKiBjaGVjayBpZiBpdCB3YXMgZHluYW1pY2FsbHkgY2FuY2VsbGVkCisgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgIHBhY2tldC0+aW5zbltpXS5uZXdfdmFsdWVfcHJvZHVjZXJfc2xv dCA9CisgICAgICAgICAgICAgICAgcGFja2V0LT5pbnNuW2RlZl9pZHhdLnNsb3Q7CisgICAgICAg IH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFNwbGl0IENKIGludG8gYSBjb21wYXJl IGFuZCBhIGp1bXAgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX3NwbGl0X2NtcGp1bXAocGFja2V0X3Qg KnBrdCkKK3sKKyAgICBpbnQgbGFzdCwgaTsKKyAgICBpbnQgbnVtaW5zbnMgPSBwa3QtPm51bV9p bnNuczsKKworICAgIC8qCisgICAgICogRmlyc3QsIHNwbGl0IGFsbCBjb21wYXJlLWp1bXBzLgor ICAgICAqIFRoZSBjb21wYXJlIGlzIHNlbnQgdG8gdGhlIGVuZCBhcyBhIG5ldyBpbnN0cnVjdGlv bi4KKyAgICAgKiBEbyBpdCB0aGlzIHdheSBzbyB3ZSBkb24ndCByZW9yZGVyIGR1YWwganVtcHMu IFRob3NlIG5lZWQgdG8gc3RheSBpbgorICAgICAqIG9yaWdpbmFsIG9yZGVyLgorICAgICAqLwor ICAgIGZvciAoaSA9IDA7IGkgPCBudW1pbnNuczsgaSsrKSB7CisgICAgICAgIC8qIEl0J3MgYSBj bXAtanVtcCAqLworICAgICAgICBpZiAoR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2RlLCBB X05FV0NNUEpVTVApKSB7CisgICAgICAgICAgICBsYXN0ID0gcGt0LT5udW1faW5zbnM7CisgICAg ICAgICAgICBwa3QtPmluc25bbGFzdF0gPSBwa3QtPmluc25baV07ICAgIC8qIGNvcHkgdGhlIGlu c3RydWN0aW9uICovCisgICAgICAgICAgICBwa3QtPmluc25bbGFzdF0ucGFydDEgPSAxOyAgICAv KiBsYXN0IGluc3RydWN0aW9uIGRvZXMgdGhlIENNUCAqLworICAgICAgICAgICAgcGt0LT5pbnNu W2ldLnBhcnQxID0gMDsgICAgLyogZXhpc3RpbmcgaW5zdHJ1Y3Rpb24gZG9lcyB0aGUgSlVNUCAq LworICAgICAgICBwa3QtPm51bV9pbnNucysrOworICAgICAgICB9CisgICAgfQorCisgICAgLyog Tm93IHJlLXNodWZmbGUgYWxsIHRoZSBjb21wYXJlcyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgKi8K KyAgICBmb3IgKGkgPSAwOyBpIDwgcGt0LT5udW1faW5zbnM7IGkrKykgeworICAgICAgICBpZiAo cGt0LT5pbnNuW2ldLnBhcnQxKSB7CisgICAgICAgICAgICBkZWNvZGVfc2VuZF9pbnNuX3RvKHBr dCwgaSwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50IGRlY29kZV9vcGNvZGVfY2FuX2p1bXAoaW50IG9wY29kZSkKK3sKKyAgICBpZiAo KEdFVF9BVFRSSUIob3Bjb2RlLCBBX0pVTVApKSB8fAorICAgICAgICAoR0VUX0FUVFJJQihvcGNv ZGUsIEFfQ0FMTCkpIHx8CisgICAgICAgIChvcGNvZGUgPT0gSjJfdHJhcDApKSB7CisgICAgICAg IC8qIEV4Y2VwdGlvbiB0byBBX0pVTVAgYXR0cmlidXRlICovCisgICAgICAgIGlmIChvcGNvZGUg PT0gSjRfaGludGp1bXByKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgZGVjb2RlX29wY29kZV9lbmRzX2xvb3AoaW50IG9wY29kZSkKK3sKKyAgICByZXR1cm4g R0VUX0FUVFJJQihvcGNvZGUsIEFfSFdMT09QMF9FTkQpIHx8CisgICAgICAgICAgIEdFVF9BVFRS SUIob3Bjb2RlLCBBX0hXTE9PUDFfRU5EKTsKK30KKworLyogU2V0IHRoZSBpc18qIGZpZWxkcyBp biBlYWNoIGluc3RydWN0aW9uICovCitzdGF0aWMgaW50IGRlY29kZV9zZXRfaW5zbl9hdHRyX2Zp ZWxkcyhwYWNrZXRfdCAqcGt0KQoreworICAgIGludCBpOworICAgIGludCBudW1pbnNucyA9IHBr dC0+bnVtX2luc25zOworICAgIHVpbnQxNl90IG9wY29kZTsKKyAgICBpbnQgY2FuanVtcDsKKwor ICAgIHBrdC0+cGt0X2hhc19jb2YgPSAwOworICAgIHBrdC0+cGt0X2hhc19lbmRsb29wID0gMDsK KyAgICBwa3QtPnBrdF9oYXNfZGN6ZXJvYSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVt aW5zbnM7IGkrKykgeworICAgICAgICBvcGNvZGUgPSBwa3QtPmluc25baV0ub3Bjb2RlOworICAg ICAgICBpZiAocGt0LT5pbnNuW2ldLnBhcnQxKSB7CisgICAgICAgICAgICBjb250aW51ZTsgICAg LyogU2tpcCBjb21wYXJlIG9mIGNtcC1qdW1wcyAqLworICAgICAgICB9CisKKyAgICAgICAgaWYg KEdFVF9BVFRSSUIob3Bjb2RlLCBBX0RDWkVST0EpKSB7CisgICAgICAgICAgICBwa3QtPnBrdF9o YXNfZGN6ZXJvYSA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoR0VUX0FUVFJJQihvcGNv ZGUsIEFfU1RPUkUpKSB7CisgICAgICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnNsb3QgPT0gMCkg eworICAgICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19zdG9yZV9zMCA9IDE7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBrdC0+cGt0X2hhc19zdG9yZV9zMSA9IDE7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjYW5qdW1wID0gZGVjb2RlX29wY29k ZV9jYW5fanVtcChvcGNvZGUpOworICAgICAgICBwa3QtPnBrdF9oYXNfY29mIHw9IGNhbmp1bXA7 CisKKyAgICAgICAgcGt0LT5pbnNuW2ldLmlzX2VuZGxvb3AgPSBkZWNvZGVfb3Bjb2RlX2VuZHNf bG9vcChvcGNvZGUpOworCisgICAgICAgIHBrdC0+cGt0X2hhc19lbmRsb29wIHw9IHBrdC0+aW5z bltpXS5pc19lbmRsb29wOworCisgICAgICAgIHBrdC0+cGt0X2hhc19jb2YgfD0gcGt0LT5wa3Rf aGFzX2VuZGxvb3A7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTaHVmZmxl IGZvciBleGVjdXRpb24KKyAqIE1vdmUgc3RvcmVzIHRvIGVuZCAoaW4gc2FtZSBvcmRlciBhcyBl bmNvZGluZykKKyAqIE1vdmUgY29tcGFyZXMgdG8gYmVnaW5uaW5nIChmb3IgdXNlIGJ5IC5uZXcg aW5zbnMpCisgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX3NodWZmbGVfZm9yX2V4ZWN1dGlvbihwYWNr ZXRfdCAqcGFja2V0KQoreworICAgIGludCBjaGFuZ2VkID0gMDsKKyAgICBpbnQgaTsKKyAgICBp bnQgZmxhZzsgICAgLyogZmxhZyBtZWFucyB3ZSd2ZSBzZWVuIGEgbm9uLW1lbW9yeSBpbnN0cnVj dGlvbiAqLworICAgIGludCBuX21lbXM7CisgICAgaW50IGxhc3RfaW5zbiA9IHBhY2tldC0+bnVt X2luc25zIC0gMTsKKworICAgIC8qCisgICAgICogU2tpcCBlbmQgbG9vcHMsIHNvbWVob3cgYW4g ZW5kIGxvb3AgaXMgZ2V0dGluZyBpbiBhbmQgbWVzc2luZworICAgICAqIHVwIHRoZSBvcmRlcgor ICAgICAqLworICAgIGlmIChkZWNvZGVfb3Bjb2RlX2VuZHNfbG9vcChwYWNrZXQtPmluc25bbGFz dF9pbnNuXS5vcGNvZGUpKSB7CisgICAgICAgIGxhc3RfaW5zbi0tOworICAgIH0KKworICAgIGRv IHsKKyAgICAgICAgY2hhbmdlZCA9IDA7CisgICAgICAgIC8qCisgICAgICAgICAqIFN0b3JlcyBn byBsYXN0LCBtdXN0IG5vdCByZW9yZGVyLgorICAgICAgICAgKiBDYW5ub3Qgc2h1ZmZsZSBzdG9y ZXMgcGFzdCBsb2FkcywgZWl0aGVyLgorICAgICAgICAgKiBJdGVyYXRlIGJhY2t3YXJkcy4gIElm IHdlIHNlZSBhIG5vbi1tZW1vcnkgaW5zdHJ1Y3Rpb24sCisgICAgICAgICAqIHRoZW4gYSBzdG9y ZSwgc2h1ZmZsZSB0aGUgc3RvcmUgdG8gdGhlIGZyb250LiAgRG9uJ3Qgc2h1ZmZsZQorICAgICAg ICAgKiAgc3RvcmVzIHdydCBlYWNoIG90aGVyIG9yIGEgbG9hZC4KKyAgICAgICAgICovCisgICAg ICAgIGZvciAoZmxhZyA9IG5fbWVtcyA9IDAsIGkgPSBsYXN0X2luc247IGkgPj0gMDsgaS0tKSB7 CisgICAgICAgICAgICBpbnQgb3Bjb2RlID0gcGFja2V0LT5pbnNuW2ldLm9wY29kZTsKKworICAg ICAgICAgICAgaWYgKGZsYWcgJiYgR0VUX0FUVFJJQihvcGNvZGUsIEFfU1RPUkUpKSB7CisgICAg ICAgICAgICAgICAgZGVjb2RlX3NlbmRfaW5zbl90byhwYWNrZXQsIGksIGxhc3RfaW5zbiAtIG5f bWVtcyk7CisgICAgICAgICAgICAgICAgbl9tZW1zKys7CisgICAgICAgICAgICAgICAgY2hhbmdl ZCA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEdFVF9BVFRSSUIob3Bjb2RlLCBBX1NUT1JF KSkgeworICAgICAgICAgICAgICAgIG5fbWVtcysrOworICAgICAgICAgICAgfSBlbHNlIGlmIChH RVRfQVRUUklCKG9wY29kZSwgQV9MT0FEKSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgICAgICogRG9uJ3Qgc2V0IGZsYWcsIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gc2h1ZmZs ZSBhCisgICAgICAgICAgICAgICAgICogc3RvcmUgcGFzdGEgbG9hZAorICAgICAgICAgICAgICAg ICAqLworICAgICAgICAgICAgICAgIG5fbWVtcysrOworICAgICAgICAgICAgfSBlbHNlIGlmIChH RVRfQVRUUklCKG9wY29kZSwgQV9ET1RORVdWQUxVRSkpIHsKKyAgICAgICAgICAgICAgICAvKgor ICAgICAgICAgICAgICAgICAqIERvbid0IHNldCBmbGFnLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRv IHNodWZmbGUgcGFzdAorICAgICAgICAgICAgICAgICAqIGEgLm5ldyB2YWx1ZQorICAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFnID0g MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFuZ2VkKSB7Cisg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKiBDb21wYXJlcyBnbyBm aXJzdCwgbWF5IGJlIHJlb3JkZXJlZCB3cnQgZWFjaCBvdGhlciAqLworICAgICAgICBmb3IgKGZs YWcgPSAwLCBpID0gMDsgaSA8IGxhc3RfaW5zbiArIDE7IGkrKykgeworICAgICAgICAgICAgaW50 IG9wY29kZSA9IHBhY2tldC0+aW5zbltpXS5vcGNvZGU7CisKKyAgICAgICAgICAgIGlmICgoc3Ry c3RyKG9wY29kZV93cmVnc1tvcGNvZGVdLCAiUGQ0IikgfHwKKyAgICAgICAgICAgICAgICAgc3Ry c3RyKG9wY29kZV93cmVnc1tvcGNvZGVdLCAiUGU0IikpICYmCisgICAgICAgICAgICAgICAgR0VU X0FUVFJJQihvcGNvZGUsIEFfU1RPUkUpID09IDApIHsKKyAgICAgICAgICAgICAgICAvKiBUaGlz IHNob3VsZCBiZSBhIGNvbXBhcmUgKG5vdCBhIHN0b3JlIGNvbmRpdGlvbmFsKSAqLworICAgICAg ICAgICAgICAgIGlmIChmbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlY29kZV9zZW5kX2lu c25fdG8ocGFja2V0LCBpLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7Cisg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfSU1QTElDSVRfV1JJVEVTX1AzKSAm JgorICAgICAgICAgICAgICAgICAgICAgICAhZGVjb2RlX29wY29kZV9lbmRzX2xvb3AocGFja2V0 LT5pbnNuW2ldLm9wY29kZSkpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAg ICAqIHNwTmxvb3AgaW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAgICAgKiBEb24ndCByZW9yZGVy IGVuZGxvb3BzOyB0aGV5IGFyZSBub3QgdmFsaWQgZm9yIC5uZXcgdXNlcywKKyAgICAgICAgICAg ICAgICAgKiBhbmQgd2Ugd2FudCB0byBtYXRjaCBIVworICAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgICAgIGlmIChmbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlY29kZV9zZW5k X2luc25fdG8ocGFja2V0LCBpLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7 CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0gZWxzZSBpZiAoR0VUX0FUVFJJQihvcGNvZGUsIEFfSU1QTElDSVRfV1JJVEVTX1Aw KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAhR0VUX0FUVFJJQihvcGNvZGUsIEFfTkVXQ01Q SlVNUCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmxhZykgeworICAgICAgICAgICAgICAgICAg ICBkZWNvZGVfc2VuZF9pbnNuX3RvKHBhY2tldCwgaSwgMCk7CisgICAgICAgICAgICAgICAgICAg IGNoYW5nZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZsYWcgPSAxOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAg LyoKKyAgICAgKiBJZiB3ZSBoYXZlIGEgLm5ldyByZWdpc3RlciBjb21wYXJlL2JyYW5jaCwgbW92 ZSB0aGF0IHRvIHRoZSB2ZXJ5CisgICAgICogdmVyeSBlbmQsIHBhc3Qgc3RvcmVzCisgICAgICov CisgICAgZm9yIChpID0gMDsgaSA8IGxhc3RfaW5zbjsgaSsrKSB7CisgICAgICAgIGlmIChHRVRf QVRUUklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfRE9UTkVXVkFMVUUpKSB7CisgICAgICAg ICAgICBkZWNvZGVfc2VuZF9pbnNuX3RvKHBhY2tldCwgaSwgbGFzdF9pbnNuKTsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQKK2FwcGx5X2V4dGVuZGVyKHBhY2tldF90ICpwa3QsIGludCBpLCB1aW50MzJfdCBleHRl bmRlcikKK3sKKyAgICBpbnQgaW1tZWRfbnVtOworICAgIHVpbnQzMl90IGJhc2VfaW1tZWQ7CisK KyAgICBpbW1lZF9udW0gPSBvcGNvZGVfd2hpY2hfaW1tZWRpYXRlX2lzX2V4dGVuZGVkKHBrdC0+ aW5zbltpXS5vcGNvZGUpOworICAgIGJhc2VfaW1tZWQgPSBwa3QtPmluc25baV0uaW1tZWRbaW1t ZWRfbnVtXTsKKworICAgIHBrdC0+aW5zbltpXS5pbW1lZFtpbW1lZF9udW1dID0gZXh0ZW5kZXIg fCBmWlhUTig2LCAzMiwgYmFzZV9pbW1lZCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgZGVjb2RlX2FwcGx5X2V4dGVuZGVycyhwYWNrZXRfdCAqcGFja2V0KQoreworICAgIGludCBp OworICAgIGZvciAoaSA9IDA7IGkgPCBwYWNrZXQtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAg IGlmIChHRVRfQVRUUklCKHBhY2tldC0+aW5zbltpXS5vcGNvZGUsIEFfSVRfRVhURU5ERVIpKSB7 CisgICAgICAgICAgICBwYWNrZXQtPmluc25baSArIDFdLmV4dGVuc2lvbl92YWxpZCA9IDE7Cisg ICAgICAgICAgICBhcHBseV9leHRlbmRlcihwYWNrZXQsIGkgKyAxLCBwYWNrZXQtPmluc25baV0u aW1tZWRbMF0pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IGRlY29kZV9yZW1vdmVfZXh0ZW5kZXJzKHBhY2tldF90ICpwYWNrZXQpCit7CisgICAgaW50 IGksIGo7CisgICAgZm9yIChpID0gMDsgaSA8IHBhY2tldC0+bnVtX2luc25zOyBpKyspIHsKKyAg ICAgICAgaWYgKEdFVF9BVFRSSUIocGFja2V0LT5pbnNuW2ldLm9wY29kZSwgQV9JVF9FWFRFTkRF UikpIHsKKyAgICAgICAgICAgIGZvciAoaiA9IGk7CisgICAgICAgICAgICAgICAgKGogPCBwYWNr ZXQtPm51bV9pbnNucyAtIDEpICYmIChqIDwgSU5TVFJVQ1RJT05TX01BWCAtIDEpOworICAgICAg ICAgICAgICAgIGorKykgeworICAgICAgICAgICAgICAgIHBhY2tldC0+aW5zbltqXSA9IHBhY2tl dC0+aW5zbltqICsgMV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYWNrZXQtPm51bV9p bnNucy0tOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY29u c3QgY2hhciAqCitnZXRfdmFsaWRfc2xvdF9zdHIoY29uc3QgcGFja2V0X3QgKnBrdCwgdW5zaWdu ZWQgaW50IHNsb3QpCit7CisgICAgcmV0dXJuIGZpbmRfaWNsYXNzX3Nsb3RzKHBrdC0+aW5zbltz bG90XS5vcGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdC0+aW5zbltzbG90 XS5pY2xhc3MpOworfQorCisjaW5jbHVkZSAicTZ2X2RlY29kZS5jIgorCitwYWNrZXRfdCAqZGVj b2RlX3RoaXMoaW50IG1heF93b3JkcywgdWludDMyX3QgKndvcmRzLCBwYWNrZXRfdCAqZGVjb2Rl X3BrdCkKK3sKKyAgICBpbnQgcmV0OworICAgIHJldCA9IGRvX2RlY29kZV9wYWNrZXQobWF4X3dv cmRzLCB3b3JkcywgZGVjb2RlX3BrdCk7CisgICAgaWYgKHJldCA8PSAwKSB7CisgICAgICAgIC8q IEVSUk9SIG9yIEJBRCBQQVJTRSAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAg cmV0dXJuIGRlY29kZV9wa3Q7Cit9CisKKy8qIFVzZWQgZm9yICItZCBpbl9hc20iIGxvZ2dpbmcg Ki8KK2ludCBkaXNhc3NlbWJsZV9oZXhhZ29uKHVpbnQzMl90ICp3b3JkcywgaW50IG53b3Jkcywg Y2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKK3sKKyAgICBwYWNrZXRfdCBwa3Q7CisKKyAgICBpZiAo ZGVjb2RlX3RoaXMobndvcmRzLCB3b3JkcywgJnBrdCkpIHsKKyAgICAgICAgc25wcmludF9hX3Br dChidWYsIGJ1ZnNpemUsICZwa3QpOworICAgICAgICByZXR1cm4gcGt0LmVuY29kX3BrdF9zaXpl X2luX2J5dGVzOworICAgIH0gZWxzZSB7CisgICAgICAgIHNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwg IjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90 YXJnZXQvaGV4YWdvbi9xNnZfZGVjb2RlLmMgYi90YXJnZXQvaGV4YWdvbi9xNnZfZGVjb2RlLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkMTQxOAotLS0gL2Rldi9udWxs CisrKyBiL3RhcmdldC9oZXhhZ29uL3E2dl9kZWNvZGUuYwpAQCAtMCwwICsxLDM3MyBAQAorLyoK KyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJ bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKyAqLworCisjZGVmaW5lIERFQ09ERV9ORVdfVEFCTEUoVEFHLCBTSVpFLCBX SEFUTk9UKSAgICAgLyogTk9USElORyAqLworI2RlZmluZSBUQUJMRV9MSU5LKFRBQkxFKSAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgVEVSTUlOQUwoVEFHLCBF TkMpICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5HICovCisjZGVmaW5lIFNVQklOU05T KFRBRywgQ0xBU1NBLCBDTEFTU0IsIEVOQykgICAgICAgLyogTk9USElORyAqLworI2RlZmluZSBF WFRTUEFDRShUQUcsIEVOQykgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVEhJTkcgKi8KKyNk ZWZpbmUgSU5WQUxJRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RISU5H ICovCisjZGVmaW5lIERFQ09ERV9FTkRfVEFCTEUoLi4uKSAgICAgICAgICAgICAgICAgICAgLyog Tk9USElORyAqLworI2RlZmluZSBERUNPREVfTUFUQ0hfSU5GTyguLi4pICAgICAgICAgICAgICAg ICAgIC8qIE5PVEhJTkcgKi8KKyNkZWZpbmUgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPKC4uLikg ICAgICAgICAgICAvKiBOT1RISU5HICovCisKKyNkZWZpbmUgREVDT0RFX1JFRyhSRUdOTywgV0lE VEgsIFNUQVJUQklUKSBcCisgICAgaW5zbi0+cmVnbm9bUkVHTk9dID0gKChlbmNvZGluZyA+PiBT VEFSVEJJVCkgJiAoKDEgPDwgV0lEVEgpIC0gMSkpOworCisjZGVmaW5lIERFQ09ERV9JTVBMX1JF RyhSRUdOTywgVkFMKSBcCisgICAgaW5zbi0+cmVnbm9bUkVHTk9dID0gVkFMOworCisjZGVmaW5l IERFQ09ERV9JTU0oSU1NTk8sIFdJRFRILCBTVEFSVEJJVCwgVkFMU1RBUlQpIFwKKyAgICBpbnNu LT5pbW1lZFtJTU1OT10gfD0gKCgoZW5jb2RpbmcgPj4gU1RBUlRCSVQpICYgKCgxIDw8IFdJRFRI KSAtIDEpKSkgPDwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoVkFMU1RBUlQpOworCisj ZGVmaW5lIERFQ09ERV9JTU1fU1hUKElNTU5PLCBXSURUSCkgXAorICAgIGluc24tPmltbWVkW0lN TU5PXSA9ICgoKChpbnQzMl90KWluc24tPmltbWVkW0lNTU5PXSkgPDwgKDMyIC0gV0lEVEgpKSA+ PiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgzMiAtIFdJRFRIKSk7CisKKyNkZWZpbmUg REVDT0RFX0lNTV9ORUcoSU1NTk8sIFdJRFRIKSBcCisgICAgaW5zbi0+aW1tZWRbSU1NTk9dID0g LWluc24tPmltbWVkW0lNTU5PXTsKKworI2RlZmluZSBERUNPREVfSU1NX1NISUZUKElNTU5PLCBT SEFNVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCghaW5zbi0+ ZXh0ZW5zaW9uX3ZhbGlkKSB8fCBcCisgICAgICAgIChpbnNuLT53aGljaF9leHRlbmRlZCAhPSBJ TU1OTykpIHsgXAorICAgICAgICBpbnNuLT5pbW1lZFtJTU1OT10gPDw9IFNIQU1UOyBcCisgICAg fQorCisjZGVmaW5lIERFQ09ERV9PUElORk8oVEFHLCBCRUgpIFwKKyAgICBjYXNlIFRBRzogXAor ICAgICAgICB7IEJFSCAgfSBcCisgICAgICAgIGJyZWFrOyBcCisKK3N0YXRpYyB2b2lkCitkZWNv ZGVfb3AoaW5zbl90ICppbnNuLCBvcGNvZGVfdCB0YWcsIHVpbnQzMl90IGVuY29kaW5nKQorewor ICAgIGluc24tPmltbWVkWzBdID0gMDsKKyAgICBpbnNuLT5pbW1lZFsxXSA9IDA7CisgICAgaW5z bi0+b3Bjb2RlID0gdGFnOworICAgIGlmIChpbnNuLT5leHRlbnNpb25fdmFsaWQpIHsKKyAgICAg ICAgaW5zbi0+d2hpY2hfZXh0ZW5kZWQgPSBvcGNvZGVfd2hpY2hfaW1tZWRpYXRlX2lzX2V4dGVu ZGVkKHRhZyk7CisgICAgfQorCisgICAgc3dpdGNoICh0YWcpIHsKKyNpbmNsdWRlICJkZWN0cmVl X2dlbmVyYXRlZC5oIgorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg IGluc24tPmdlbmVyYXRlID0gb3Bjb2RlX2dlbnB0clt0YWddOworICAgIGluc24tPmljbGFzcyA9 IChlbmNvZGluZyA+PiAyOCkgJiAweGY7CisgICAgaWYgKCgoZW5jb2RpbmcgPj4gMTQpICYgMykg PT0gMCkgeworICAgICAgICBpbnNuLT5pY2xhc3MgKz0gMTY7CisgICAgfQorfQorCisjdW5kZWYg REVDT0RFX1JFRworI3VuZGVmIERFQ09ERV9JTVBMX1JFRworI3VuZGVmIERFQ09ERV9JTU0KKyN1 bmRlZiBERUNPREVfSU1NX1NISUZUCisjdW5kZWYgREVDT0RFX09QSU5GTworI3VuZGVmIERFQ09E RV9NQVRDSF9JTkZPCisjdW5kZWYgREVDT0RFX0xFR0FDWV9NQVRDSF9JTkZPCisjdW5kZWYgREVD T0RFX0VORF9UQUJMRQorI3VuZGVmIElOVkFMSUQKKyN1bmRlZiBURVJNSU5BTAorI3VuZGVmIFNV QklOU05TCisjdW5kZWYgRVhUU1BBQ0UKKyN1bmRlZiBUQUJMRV9MSU5LCisjdW5kZWYgREVDT0RF X05FV19UQUJMRQorI3VuZGVmIERFQ09ERV9TRVBBUkFUT1JfQklUUworCitzdGF0aWMgdW5zaWdu ZWQgaW50CitkZWNvZGVfc3ViaW5zbl90YWJsZXdhbGsoaW5zbl90ICppbnNuLCBkZWN0cmVlX3Rh YmxlX3QgKnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVuY29kaW5n KQoreworICAgIHVuc2lnbmVkIGludCBpOworICAgIG9wY29kZV90IG9wYzsKKyAgICBpZiAodGFi bGUtPmxvb2t1cF9mdW5jdGlvbikgeworICAgICAgICBpID0gdGFibGUtPmxvb2t1cF9mdW5jdGlv bih0YWJsZS0+c3RhcnRiaXQsIHRhYmxlLT53aWR0aCwgZW5jb2RpbmcpOworICAgIH0gZWxzZSB7 CisgICAgICAgIGkgPSAoKGVuY29kaW5nID4+IHRhYmxlLT5zdGFydGJpdCkgJiAoKDEgPDwgdGFi bGUtPndpZHRoKSAtIDEpKTsKKyAgICB9CisgICAgaWYgKHRhYmxlLT50YWJsZVtpXS50eXBlID09 IERFQ1RSRUVfVEFCTEVfTElOSykgeworICAgICAgICByZXR1cm4gZGVjb2RlX3N1Ymluc25fdGFi bGV3YWxrKGluc24sIHRhYmxlLT50YWJsZVtpXS50YWJsZV9saW5rLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgaWYgKHRhYmxl LT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVfVEVSTUlOQUwpIHsKKyAgICAgICAgb3BjID0gdGFi bGUtPnRhYmxlW2ldLm9wY29kZTsKKyAgICAgICAgaWYgKChlbmNvZGluZyAmIGRlY29kZV9pdGFi bGVbb3BjXS5tYXNrKSAhPSBkZWNvZGVfaXRhYmxlW29wY10ubWF0Y2gpIHsKKyAgICAgICAgICAg IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGRlY29kZV9vcChpbnNuLCBvcGMsIGVuY29k aW5nKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7 CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9pbnNuX2EodWludDMyX3QgZW5j b2RpbmcpCit7CisgICAgcmV0dXJuIGVuY29kaW5nICYgMHgwMDAwMWZmZjsKK30KKworc3RhdGlj IHVuc2lnbmVkIGludCBnZXRfaW5zbl9iKHVpbnQzMl90IGVuY29kaW5nKQoreworICAgIHJldHVy biAoZW5jb2RpbmcgPj4gMTYpICYgMHgwMDAwMWZmZjsKK30KKworc3RhdGljIHVuc2lnbmVkIGlu dAorZGVjb2RlX2luc25zX3RhYmxld2FsayhpbnNuX3QgKmluc24sIGRlY3RyZWVfdGFibGVfdCAq dGFibGUsIHVpbnQzMl90IGVuY29kaW5nKQoreworICAgIHVuc2lnbmVkIGludCBpOworICAgIHVu c2lnbmVkIGludCBhLCBiOworICAgIG9wY29kZV90IG9wYzsKKyAgICBpZiAodGFibGUtPmxvb2t1 cF9mdW5jdGlvbikgeworICAgICAgICBpID0gdGFibGUtPmxvb2t1cF9mdW5jdGlvbih0YWJsZS0+ c3RhcnRiaXQsIHRhYmxlLT53aWR0aCwgZW5jb2RpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAg IGkgPSAoKGVuY29kaW5nID4+IHRhYmxlLT5zdGFydGJpdCkgJiAoKDEgPDwgdGFibGUtPndpZHRo KSAtIDEpKTsKKyAgICB9CisgICAgaWYgKHRhYmxlLT50YWJsZVtpXS50eXBlID09IERFQ1RSRUVf VEFCTEVfTElOSykgeworICAgICAgICByZXR1cm4gZGVjb2RlX2luc25zX3RhYmxld2FsayhpbnNu LCB0YWJsZS0+dGFibGVbaV0udGFibGVfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW5jb2RpbmcpOworICAgIH0gZWxzZSBpZiAodGFibGUtPnRhYmxlW2ldLnR5 cGUgPT0gREVDVFJFRV9TVUJJTlNOUykgeworICAgICAgICBhID0gZ2V0X2luc25fYShlbmNvZGlu Zyk7CisgICAgICAgIGIgPSBnZXRfaW5zbl9iKGVuY29kaW5nKTsKKyAgICAgICAgYiA9IGRlY29k ZV9zdWJpbnNuX3RhYmxld2FsayhpbnNuLCB0YWJsZS0+dGFibGVbaV0udGFibGVfbGlua19iLCBi KTsKKyAgICAgICAgYSA9IGRlY29kZV9zdWJpbnNuX3RhYmxld2FsayhpbnNuICsgMSwgdGFibGUt PnRhYmxlW2ldLnRhYmxlX2xpbmssIGEpOworICAgICAgICBpZiAoKGEgPT0gMCkgfHwgKGIgPT0g MCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAy OworICAgIH0gZWxzZSBpZiAodGFibGUtPnRhYmxlW2ldLnR5cGUgPT0gREVDVFJFRV9URVJNSU5B TCkgeworICAgICAgICBvcGMgPSB0YWJsZS0+dGFibGVbaV0ub3Bjb2RlOworICAgICAgICBpZiAo KGVuY29kaW5nICYgZGVjb2RlX2l0YWJsZVtvcGNdLm1hc2spICE9IGRlY29kZV9pdGFibGVbb3Bj XS5tYXRjaCkgeworICAgICAgICAgICAgaWYgKChlbmNvZGluZyAmIGRlY29kZV9sZWdhY3lfaXRh YmxlW29wY10ubWFzaykgIT0KKyAgICAgICAgICAgICAgICBkZWNvZGVfbGVnYWN5X2l0YWJsZVtv cGNdLm1hdGNoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgZGVjb2RlX29wKGluc24sIG9wYywgZW5jb2RpbmcpOworICAgICAg ICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisK K3N0YXRpYyB1bnNpZ25lZCBpbnQKK2RlY29kZV9pbnNucyhpbnNuX3QgKmluc24sIHVpbnQzMl90 IGVuY29kaW5nKQoreworICAgIGRlY3RyZWVfdGFibGVfdCAqdGFibGU7CisgICAgaWYgKChlbmNv ZGluZyAmIDB4MDAwMGMwMDApICE9IDApIHsKKyAgICAgICAgLyogU3RhcnQgd2l0aCBQUCB0YWJs ZSAqLworICAgICAgICB0YWJsZSA9ICZkZWN0cmVlX3RhYmxlX0RFQ09ERV9ST09UXzMyOworICAg IH0gZWxzZSB7CisgICAgICAgIC8qIHN0YXJ0IHdpdGggRUUgdGFibGUgKi8KKyAgICAgICAgdGFi bGUgPSAmZGVjdHJlZV90YWJsZV9ERUNPREVfUk9PVF9FRTsKKyAgICB9CisgICAgcmV0dXJuIGRl Y29kZV9pbnNuc190YWJsZXdhbGsoaW5zbiwgdGFibGUsIGVuY29kaW5nKTsKK30KKworc3RhdGlj IHZvaWQgZGVjb2RlX2FkZF9lbmRsb29wX2luc24oaW5zbl90ICppbnNuLCBpbnQgbG9vcG51bSkK K3sKKyAgICBpZiAobG9vcG51bSA9PSAxMCkgeworICAgICAgICBpbnNuLT5vcGNvZGUgPSBKMl9l bmRsb29wMDE7CisgICAgICAgIGluc24tPmdlbmVyYXRlID0gb3Bjb2RlX2dlbnB0cltKMl9lbmRs b29wMDFdOworICAgIH0gZWxzZSBpZiAobG9vcG51bSA9PSAxKSB7CisgICAgICAgIGluc24tPm9w Y29kZSA9IEoyX2VuZGxvb3AxOworICAgICAgICBpbnNuLT5nZW5lcmF0ZSA9IG9wY29kZV9nZW5w dHJbSjJfZW5kbG9vcDFdOworICAgIH0gZWxzZSB7CisgICAgICAgIGluc24tPm9wY29kZSA9IEoy X2VuZGxvb3AwOworICAgICAgICBpbnNuLT5nZW5lcmF0ZSA9IG9wY29kZV9nZW5wdHJbSjJfZW5k bG9vcDBdOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBpbnQgZGVjb2RlX3BhcnNlYml0c19p c19lbmQodWludDMyX3QgZW5jb2RpbmczMikKK3sKKyAgICB1aW50MzJfdCBiaXRzID0gKGVuY29k aW5nMzIgPj4gMTQpICYgMHgzOworICAgIHJldHVybiAoKGJpdHMgPT0gMHgzKSB8fCAoYml0cyA9 PSAweDApKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGVjb2RlX3BhcnNlYml0c19pc19sb29w ZW5kKHVpbnQzMl90IGVuY29kaW5nMzIpCit7CisgICAgdWludDMyX3QgYml0cyA9IChlbmNvZGlu ZzMyID4+IDE0KSAmIDB4MzsKKyAgICByZXR1cm4gKChiaXRzID09IDB4MikpOworfQorCitzdGF0 aWMgaW50CitkZWNvZGVfc2V0X3Nsb3RfbnVtYmVyKHBhY2tldF90ICpwa3QpCit7CisgICAgaW50 IHNsb3Q7CisgICAgaW50IGk7CisgICAgaW50IGhpdF9tZW1faW5zbiA9IDA7CisgICAgaW50IGhp dF9kdXBsZXggPSAwOworICAgIGNvbnN0IGNoYXIgKnZhbGlkX3Nsb3Rfc3RyOworCisgICAgZm9y IChpID0gMCwgc2xvdCA9IDM7IGkgPCBwa3QtPm51bV9pbnNuczsgaSsrKSB7CisgICAgICAgIHZh bGlkX3Nsb3Rfc3RyID0gZ2V0X3ZhbGlkX3Nsb3Rfc3RyKHBrdCwgaSk7CisKKyAgICAgICAgd2hp bGUgKHN0cmNocih2YWxpZF9zbG90X3N0ciwgJzAnICsgc2xvdCkgPT0gTlVMTCkgeworICAgICAg ICAgICAgc2xvdC0tOworICAgICAgICB9CisgICAgICAgIHBrdC0+aW5zbltpXS5zbG90ID0gc2xv dDsKKyAgICAgICAgaWYgKHNsb3QpIHsKKyAgICAgICAgICAgIC8qIEkndmUgYXNzaWduZWQgdGhl IHNsb3QsIG5vdyBkZWNyZW1lbnQgaXQgZm9yIHRoZSBuZXh0IGluc24gKi8KKyAgICAgICAgICAg IHNsb3QtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEZpeCB0aGUgZXhjZXB0aW9ucyAt IG1lbSBpbnNucyB0byBzbG90IDAsMSAqLworICAgIGZvciAoaSA9IHBrdC0+bnVtX2luc25zIC0g MTsgaSA+PSAwOyBpLS0pIHsKKworICAgICAgICAvKiBGaXJzdCBtZW1vcnkgaW5zdHJ1Y3Rpb24g YWx3YXlzIGdvZXMgdG8gc2xvdCAwICovCisgICAgICAgIGlmICgoR0VUX0FUVFJJQihwa3QtPmlu c25baV0ub3Bjb2RlLCBBX01FTUxJS0UpIHx8CisgICAgICAgICAgICAgR0VUX0FUVFJJQihwa3Qt Pmluc25baV0ub3Bjb2RlLCBBX01FTUxJS0VfUEFDS0VUX1JVTEVTKSkgJiYKKyAgICAgICAgICAg ICFoaXRfbWVtX2luc24pIHsKKyAgICAgICAgICAgIGhpdF9tZW1faW5zbiA9IDE7CisgICAgICAg ICAgICBwa3QtPmluc25baV0uc2xvdCA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgfQorCisgICAgICAgIC8qIE5leHQgbWVtb3J5IGluc3RydWN0aW9uIGFsd2F5cyBnb2VzIHRv IHNsb3QgMSAqLworICAgICAgICBpZiAoKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwg QV9NRU1MSUtFKSB8fAorICAgICAgICAgICAgIEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29k ZSwgQV9NRU1MSUtFX1BBQ0tFVF9SVUxFUykpICYmCisgICAgICAgICAgICBoaXRfbWVtX2luc24p IHsKKyAgICAgICAgICAgIHBrdC0+aW5zbltpXS5zbG90ID0gMTsKKyAgICAgICAgfQorICAgIH0K KworICAgIC8qIEZpeCB0aGUgZXhjZXB0aW9ucyAtIGR1cGxleCBhbHdheXMgc2xvdCAwLDEgKi8K KyAgICBmb3IgKGkgPSBwa3QtPm51bV9pbnNucyAtIDE7IGkgPj0gMDsgaS0tKSB7CisKKyAgICAg ICAgLyogRmlyc3Qgc3ViaW5zbiBhbHdheXMgZ29lcyB0byBzbG90IDAgKi8KKyAgICAgICAgaWYg KEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9TVUJJTlNOKSAmJiAhaGl0X2R1cGxl eCkgeworICAgICAgICAgICAgaGl0X2R1cGxleCA9IDE7CisgICAgICAgICAgICBwa3QtPmluc25b aV0uc2xvdCA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg IC8qIE5leHQgc3ViaW5zbiBhbHdheXMgZ29lcyB0byBzbG90IDEgKi8KKyAgICAgICAgaWYgKEdF VF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9TVUJJTlNOKSAmJiBoaXRfZHVwbGV4KSB7 CisgICAgICAgICAgICBwa3QtPmluc25baV0uc2xvdCA9IDE7CisgICAgICAgIH0KKyAgICB9CisK KyAgICAvKiBGaXggdGhlIGV4Y2VwdGlvbnMgLSBzbG90IDEgaXMgbmV2ZXIgZW1wdHksIGFsd2F5 cyBhbGlnbnMgdG8gc2xvdCAwICovCisgICAgeworICAgICAgICBpbnQgc2xvdDBfZm91bmQgPSAw OworICAgICAgICBpbnQgc2xvdDFfZm91bmQgPSAwOworICAgICAgICBpbnQgc2xvdDFfaWlkeCA9 IDA7CisgICAgICAgIGZvciAoaSA9IHBrdC0+bnVtX2luc25zIC0gMTsgaSA+PSAwOyBpLS0pIHsK KyAgICAgICAgICAgIC8qIElzIHNsb3QwIHVzZWQ/ICovCisgICAgICAgICAgICBpZiAocGt0LT5p bnNuW2ldLnNsb3QgPT0gMCkgeworICAgICAgICAgICAgICAgIGludCBpc19lbmRsb29wID0gKHBr dC0+aW5zbltpXS5vcGNvZGUgPT0gSjJfZW5kbG9vcDAxKTsKKyAgICAgICAgICAgICAgICBpc19l bmRsb29wIHw9IChwa3QtPmluc25baV0ub3Bjb2RlID09IEoyX2VuZGxvb3AwKTsKKyAgICAgICAg ICAgICAgICBpc19lbmRsb29wIHw9IChwa3QtPmluc25baV0ub3Bjb2RlID09IEoyX2VuZGxvb3Ax KTsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogTWFrZSBzdXJlIGl0 J3Mgbm90IGVuZGxvb3Agc2luY2UsIHdlJ3JlIG92ZXJsb2FkaW5nCisgICAgICAgICAgICAgICAg ICogc2xvdDAgZm9yIGVuZGxvb3AKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg ICBpZiAoIWlzX2VuZGxvb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvdDBfZm91bmQgPSAx OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIElzIHNs b3QxIHVzZWQ/ICovCisgICAgICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnNsb3QgPT0gMSkgewor ICAgICAgICAgICAgICAgIHNsb3QxX2ZvdW5kID0gMTsKKyAgICAgICAgICAgICAgICBzbG90MV9p aWR4ID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBJcyBzbG90MCBl bXB0eSBhbmQgc2xvdDEgdXNlZD8gKi8KKyAgICAgICAgaWYgKChzbG90MF9mb3VuZCA9PSAwKSAm JiAoc2xvdDFfZm91bmQgPT0gMSkpIHsKKyAgICAgICAgICAgIC8qIFRoZW4gcHVzaCBpdCB0byBz bG90MCAqLworICAgICAgICAgICAgcGt0LT5pbnNuW3Nsb3QxX2lpZHhdLnNsb3QgPSAwOworICAg ICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICogZG9fZGVjb2RlX3BhY2tl dAorICogRGVjb2RlcyBwYWNrZXQgd2l0aCBnaXZlbiB3b3JkcworICogUmV0dXJucyBuZWdhdGl2 ZSBvbiBlcnJvciwgMCBvbiBpbnN1ZmZpY2llbnQgd29yZHMsCisgKiBhbmQgbnVtYmVyIG9mIHdv cmRzIHVzZWQgb24gc3VjY2VzcworICovCisKK3N0YXRpYyBpbnQgZG9fZGVjb2RlX3BhY2tldChp bnQgbWF4X3dvcmRzLCBjb25zdCB1aW50MzJfdCAqd29yZHMsIHBhY2tldF90ICpwa3QpCit7Cisg ICAgaW50IG51bV9pbnNucyA9IDA7CisgICAgaW50IHdvcmRzX3JlYWQgPSAwOworICAgIGludCBl bmRfb2ZfcGFja2V0ID0gMDsKKyAgICBpbnQgbmV3X2luc25zID0gMDsKKyAgICBpbnQgZXJyb3Jz ID0gMDsKKyAgICB1aW50MzJfdCBlbmNvZGluZzMyOworCisgICAgLyogSW5pdGlhbGl6ZSAqLwor ICAgIG1lbXNldChwa3QsIDAsIHNpemVvZigqcGt0KSk7CisgICAgLyogVHJ5IHRvIGJ1aWxkIHBh Y2tldCAqLworICAgIHdoaWxlICghZW5kX29mX3BhY2tldCAmJiAod29yZHNfcmVhZCA8IG1heF93 b3JkcykpIHsKKyAgICAgICAgZW5jb2RpbmczMiA9IHdvcmRzW3dvcmRzX3JlYWRdOworICAgICAg ICBlbmRfb2ZfcGFja2V0ID0gZGVjb2RlX3BhcnNlYml0c19pc19lbmQoZW5jb2RpbmczMik7Cisg ICAgICAgIG5ld19pbnNucyA9IGRlY29kZV9pbnNucygmcGt0LT5pbnNuW251bV9pbnNuc10sIGVu Y29kaW5nMzIpOworICAgICAgICAvKgorICAgICAgICAgKiBJZiB3ZSBzYXcgYW4gZXh0ZW5kZXIs IG1hcmsgbmV4dCB3b3JkIGV4dGVuZGVkIHNvIGltbWVkaWF0ZQorICAgICAgICAgKiBkZWNvZGUg d29ya3MKKyAgICAgICAgICovCisgICAgICAgIGlmIChwa3QtPmluc25bbnVtX2luc25zXS5vcGNv ZGUgPT0gQTRfZXh0KSB7CisgICAgICAgICAgICBwa3QtPmluc25bbnVtX2luc25zICsgMV0uZXh0 ZW5zaW9uX3ZhbGlkID0gMTsKKyAgICAgICAgfQorICAgICAgICBudW1faW5zbnMgKz0gbmV3X2lu c25zOworICAgICAgICB3b3Jkc19yZWFkKys7CisgICAgfQorCisgICAgcGt0LT5udW1faW5zbnMg PSBudW1faW5zbnM7CisgICAgaWYgKCFlbmRfb2ZfcGFja2V0KSB7CisgICAgICAgIC8qIFJhbiBv dXQgb2Ygd29yZHMhICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBwa3QtPmVuY29k X3BrdF9zaXplX2luX2J5dGVzID0gd29yZHNfcmVhZCAqIDQ7CisKKyAgICAvKiBTaHVmZmxlIC8g c3BsaXQgLyByZW9yZGVyIGZvciBleGVjdXRpb24gKi8KKyAgICBpZiAoKHdvcmRzX3JlYWQgPT0g MikgJiYgKGRlY29kZV9wYXJzZWJpdHNfaXNfbG9vcGVuZCh3b3Jkc1swXSkpKSB7CisgICAgICAg IGRlY29kZV9hZGRfZW5kbG9vcF9pbnNuKCZwa3QtPmluc25bcGt0LT5udW1faW5zbnMrK10sIDAp OworICAgIH0KKyAgICBpZiAod29yZHNfcmVhZCA+PSAzKSB7CisgICAgICAgIHVpbnQzMl90IGhh c19sb29wMCwgaGFzX2xvb3AxOworICAgICAgICBoYXNfbG9vcDAgPSBkZWNvZGVfcGFyc2ViaXRz X2lzX2xvb3BlbmQod29yZHNbMF0pOworICAgICAgICBoYXNfbG9vcDEgPSBkZWNvZGVfcGFyc2Vi aXRzX2lzX2xvb3BlbmQod29yZHNbMV0pOworICAgICAgICBpZiAoaGFzX2xvb3AwICYmIGhhc19s b29wMSkgeworICAgICAgICAgICAgZGVjb2RlX2FkZF9lbmRsb29wX2luc24oJnBrdC0+aW5zbltw a3QtPm51bV9pbnNucysrXSwgMTApOworICAgICAgICB9IGVsc2UgaWYgKGhhc19sb29wMSkgewor ICAgICAgICAgICAgZGVjb2RlX2FkZF9lbmRsb29wX2luc24oJnBrdC0+aW5zbltwa3QtPm51bV9p bnNucysrXSwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoaGFzX2xvb3AwKSB7CisgICAgICAgICAg ICBkZWNvZGVfYWRkX2VuZGxvb3BfaW5zbigmcGt0LT5pbnNuW3BrdC0+bnVtX2luc25zKytdLCAw KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGVycm9ycyArPSBkZWNvZGVfYXBwbHlfZXh0ZW5k ZXJzKHBrdCk7CisgICAgZXJyb3JzICs9IGRlY29kZV9yZW1vdmVfZXh0ZW5kZXJzKHBrdCk7Cisg ICAgZXJyb3JzICs9IGRlY29kZV9zZXRfc2xvdF9udW1iZXIocGt0KTsKKyAgICBlcnJvcnMgKz0g ZGVjb2RlX2ZpbGxfbmV3dmFsdWVfcmVnbm8ocGt0KTsKKworICAgIGVycm9ycyArPSBkZWNvZGVf c2h1ZmZsZV9mb3JfZXhlY3V0aW9uKHBrdCk7CisgICAgZXJyb3JzICs9IGRlY29kZV9zcGxpdF9j bXBqdW1wKHBrdCk7CisgICAgZXJyb3JzICs9IGRlY29kZV9zZXRfaW5zbl9hdHRyX2ZpZWxkcyhw a3QpOworICAgIGlmIChlcnJvcnMpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAg IHJldHVybiB3b3Jkc19yZWFkOworfQotLSAKMi43LjQKCg==