From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28492 invoked by alias); 13 Sep 2019 16:27:42 -0000 Mailing-List: contact libc-stable-help@sourceware.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Subscribe: List-Archive: Sender: libc-stable-owner@sourceware.org Received: (qmail 28481 invoked by uid 89); 13 Sep 2019 16:27:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.100.3 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-19.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS,UNSUBSCRIBE_BODY autolearn=ham version=3.3.1 spammy= X-Spam-Status: No, score=-19.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS,UNSUBSCRIBE_BODY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on sourceware.org X-Spam-Level: X-HELO: EUR03-DB5-obe.outbound.protection.outlook.com Received: from mail-eopbgr40047.outbound.protection.outlook.com (HELO EUR03-DB5-obe.outbound.protection.outlook.com) (40.107.4.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 13 Sep 2019 16:27:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KGEq1wSshD/gHnD5aTaUAxn0QcAElmM3XLxh+x3t0hw=; b=Z5rtoJdOzKApINpc/po1EYZE5SyEn8HR0n6ZA4YLNM24SeNlDSBzkSbLNzhUT+1U7my0y/STUPMgAnZxjAUjuqRt7GJQSItlQ8SnC+77E7lzpRWQhC1MBPxRtHgoDTY6jAB+FShIbwXDoMpjamxQJZhdEJfE0TYunreqVTZ2XHA= Received: from VI1PR08CA0140.eurprd08.prod.outlook.com (2603:10a6:800:d5::18) by AM6PR08MB3559.eurprd08.prod.outlook.com (2603:10a6:20b:48::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Fri, 13 Sep 2019 16:27:32 +0000 Received: from DB5EUR03FT044.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::209) by VI1PR08CA0140.outlook.office365.com (2603:10a6:800:d5::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17 via Frontend Transport; Fri, 13 Sep 2019 16:27:32 +0000 Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; sourceware.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;sourceware.org; dmarc=none action=none header.from=arm.com; Received-SPF: TempError (protection.outlook.com: error in processing during lookup of arm.com: DNS Timeout) Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT044.mail.protection.outlook.com (10.152.21.167) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.14 via Frontend Transport; Fri, 13 Sep 2019 16:27:30 +0000 Received: ("Tessian outbound 0d576b67b9f5:v31"); Fri, 13 Sep 2019 16:27:30 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 4b0bbb06dd41c98c X-CR-MTA-TID: 64aa7808 Received: from 38d0929863e5.1 (ip-172-16-0-2.eu-west-1.compute.internal [104.47.8.59]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id 8CA3DEF8-5B52-4F66-B827-6602008996C3.1; Fri, 13 Sep 2019 16:27:25 +0000 Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-am5eur03lp2059.outbound.protection.outlook.com [104.47.8.59]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 38d0929863e5.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384); Fri, 13 Sep 2019 16:27:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MXuViKsVw4/khvXB+5dUdq8P/poHze9t8QA9SOzrdLgqHBBNeoTWM92E2wN+cOHt6eWxyg5OuiBb1Ucm65LwLKZ+/DauPQX5fey/mC8F5K6/bqKZGsHCJ9JzZM2bjVLzX5u+rOFaxKjxHyRDznZcjeXs4ZzeAuHKLBSkZgW44bgKgQf1nX5zSDLVy7o6pyOUP/D35tOr39xdJnsF11OCEEWdH7H2jdUsPQT1TlVhV8EZ9p5NooFghlAGScDK/30xPBXATlvgld7tYDKMry03gApqxDyKA/gdGvnTtxKLo495lIfQlUQMI0liLdQwthN2wcaR5C7ekOkxMtCTD72aVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KGEq1wSshD/gHnD5aTaUAxn0QcAElmM3XLxh+x3t0hw=; b=CBPw1ekY5zMxkS3jVXXDu+OX82k97BcdakrkDMXH8OdT+mSpEbFOuwY2Zr2z/ICAAoRp7Dyxl1domPhJCM4ECLT9NiD/OgdzVV0k4RtZIzCY7/f/IIyM3xkfIcCymDxDcoO2gBZzYZH73MQOGLJFbfKMWj1JifWmDXtmDrgt7IeXYsIQU83E4na1FAiRhI0diBkvC+XZcQlX0rJKpdBNwRP65OYTtyS0e/3G/v3qx4RK3ezFGRuX5S+wptEWFCGXjw2pTuVscIQ48BLe8p9OLgHCiZvDhZqMTdAy3aSLTcUbqLsPYEMt7nIGYaChai5uEryJ5c0Q/0uyFHWZ7Dj8Rw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KGEq1wSshD/gHnD5aTaUAxn0QcAElmM3XLxh+x3t0hw=; b=Z5rtoJdOzKApINpc/po1EYZE5SyEn8HR0n6ZA4YLNM24SeNlDSBzkSbLNzhUT+1U7my0y/STUPMgAnZxjAUjuqRt7GJQSItlQ8SnC+77E7lzpRWQhC1MBPxRtHgoDTY6jAB+FShIbwXDoMpjamxQJZhdEJfE0TYunreqVTZ2XHA= Received: from VI1PR0801MB2127.eurprd08.prod.outlook.com (10.168.62.22) by VI1PR0801MB2094.eurprd08.prod.outlook.com (10.173.76.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.21; Fri, 13 Sep 2019 16:27:24 +0000 Received: from VI1PR0801MB2127.eurprd08.prod.outlook.com ([fe80::5543:6255:419c:6a7d]) by VI1PR0801MB2127.eurprd08.prod.outlook.com ([fe80::5543:6255:419c:6a7d%8]) with mapi id 15.20.2263.021; Fri, 13 Sep 2019 16:27:24 +0000 From: Wilco Dijkstra To: "libc-stable@sourceware.org" CC: nd Subject: [2.27 COMMITTED] Backport strstr/memmem performance improvements Thread-Topic: [2.27 COMMITTED] Backport strstr/memmem performance improvements Thread-Index: AQHVak/6zQwYBOzMBU26Vi90CqniwQ== Date: Tue, 01 Jan 2019 00:00:00 -0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Wilco.Dijkstra@arm.com; x-originating-ip: [217.140.106.54] x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: 4c78bced-a413-4144-b497-08d738674656 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam-Untrusted: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(4618075)(2017052603328)(49563074)(7193020);SRVR:VI1PR0801MB2094; X-MS-TrafficTypeDiagnostic: VI1PR0801MB2094:|AM6PR08MB3559: X-MS-Exchange-PUrlCount: 1 X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:5797;OLM:5797; x-forefront-prvs: 0159AC2B97 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4636009)(366004)(39860400002)(346002)(396003)(376002)(136003)(189003)(199004)(81156014)(66946007)(8676002)(81166006)(8936002)(64756008)(76116006)(66446008)(66556008)(66476007)(66616009)(71200400001)(71190400001)(3846002)(6116002)(33656002)(5660300002)(52536014)(2906002)(2351001)(476003)(5640700003)(4326008)(6436002)(316002)(99286004)(6506007)(86362001)(53936002)(102836004)(26005)(186003)(25786009)(66066001)(7696005)(55016002)(9686003)(6306002)(256004)(14444005)(305945005)(74316002)(486006)(99936001)(14454004)(508600001)(6916009)(2501003)(7736002);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0801MB2094;H:VI1PR0801MB2127.eurprd08.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info-Original: kTBlEN+nTwA44f9YQCYnbTPuwb9kHCwf8yPzqSGp2aCCBFReONNZ05xCVBqKUskUd4oIwZzi6rUXMGyrmPoqr5s3tfmxvg7Z795btYTXWZyD7v7m5p3sqflNgP59jcRvwBk9GDy6xq91LCgkCQKfVrdi2csvnYM1RkWbwZCV1QQ9Kc2OA7GTPQBaZtMiGlNN/0+QOtOrej5YO7IPdNJEM91M24VhwzkwSVx/o7drZkr0JNgIv4j01m8KSLfmYfBkHnS2xim4CcxET3Qprvbyzk25AMIR0s+tDClxwqi5tcV0gQ9VCko1Q6Yh8IoLMnMO1GXF6mBAn9vjjW5VEzTOwh7IUcInvHP97aXLDMrrxLUtXAXXDe+uKEX9CEwtRhsiJU3TW//lV+l/yRC4C+zlWbA0rsF6Y0LjkC3KwD575cE= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_VI1PR0801MB2127304134E8527B8CE2DDB483B30VI1PR0801MB2127_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB2094 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Wilco.Dijkstra@arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT044.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123;IPV:CAL;SCL:-1;CTRY:IE;EFV:NLI;SFV:NSPM;SFS:(10009020)(4636009)(39860400002)(396003)(136003)(346002)(376002)(199004)(189003)(52536014)(55016002)(126002)(25786009)(63350400001)(5640700003)(14454004)(6916009)(186003)(2476003)(26826003)(6306002)(33656002)(568964002)(486006)(3846002)(2351001)(4326008)(9686003)(6116002)(81166006)(305945005)(508600001)(7736002)(81156014)(16586007)(102836004)(76130400001)(8676002)(5660300002)(235185007)(86362001)(66066001)(8936002)(316002)(2501003)(22756006)(2906002)(476003)(71190400001)(99936001)(14444005)(5024004)(74316002)(7696005)(99286004)(70586007)(26005)(356004)(6506007)(336012)(70206006)(66616009);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR08MB3559;H:64aa7808-outbound-1.mta.getcheckrecipient.com;FPR:;SPF:TempError;LANG:en;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;A:1;MX:1; X-MS-Office365-Filtering-Correlation-Id-Prvs: 06f3d04f-840d-4709-df89-08d73867426e X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(710020)(711020)(4605104)(1401327)(4618075)(2017052603328)(49563074)(7193020);SRVR:AM6PR08MB3559; NoDisclaimer: True X-Forefront-PRVS: 0159AC2B97 X-Microsoft-Antispam-Message-Info: 6XwGLjgVCzR85PWavki1zXr4FJSrCFYx0hRJ2K9ow4vcxcWmXiNgMAkt2u4spVSBsNQPO3eM0l1B4Xw8uwDexeNJ7x+NPFGCrj41TIpB3rmHpHRMi0ftL92iq0QNGCaBLMo5XGTaB3IQnLamcJIt/6SOTiItVpAG1qfDOhxLGODX9ne4rgOW6rer3SDXITUqdctss9sOrMApolvYyhgdaJZXGD3/imqVBeTi6vMajmr0AaFn43uEXiHFnKZJdSYkSU4DcAYD7N0Ur4p021Zkw5ZJCOR/WJFKlNMDzuhAPPDzyXacOJGggpFQlBywxPHz6K8vm10HhddL4D94QE3XgaMRYQVEgaqxofOHewG5cB1rFeEubBCq3Is0LfNNloDuHrBwayiFKBxL9QN8kQnWmhMVezfZLEQPN0hVIQNApbM= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2019 16:27:30.8358 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4c78bced-a413-4144-b497-08d738674656 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3559 X-SW-Source: 2019-09/txt/msg00018.txt.bz2 --_002_VI1PR0801MB2127304134E8527B8CE2DDB483B30VI1PR0801MB2127_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 6554 commit 5b4f7382af46b4187a958e40fb3123ac3ce16810 Author: Wilco Dijkstra Date: Fri Sep 13 16:35:12 2019 +0100 Add undef to fix test failure. commit 9456483fb2bb47be63cfcac462d0b2366fc4562a Author: Wilco Dijkstra Date: Wed Jun 12 11:42:34 2019 +0100 Improve performance of memmem =20=20=20=20 This patch significantly improves performance of memmem using a novel modified Horspool algorithm. Needles up to size 256 use a bad-character table indexed by hashed pairs of characters to quickly skip past mismat= ches. Long needles use a self-adapting filtering step to avoid comparing the = whole needle repeatedly. =20=20=20=20 By limiting the needle length to 256, the shift table only requires 8 b= its per entry, lowering preprocessing overhead and minimizing cache effects. This limit also implies worst-case performance is linear. =20=20=20=20 Small needles up to size 2 use a dedicated linear search. Very long ne= edles use the Two-Way algorithm (to avoid increasing stack size or slowing do= wn the common case, inlining is disabled). =20=20=20=20 The performance gain is 6.6 times on English text on AArch64 using rand= om needles with average size 8. =20=20=20=20 Tested against GLIBC testsuite and randomized tests. =20=20=20=20 Reviewed-by: Szabolcs Nagy =20=20=20=20 * string/memmem.c (__memmem): Rewrite to improve performance. =20=20=20=20 (cherry picked from commit 680942b0167715e123d934b609060cd382f8e39f) commit 373f8b06a3ea763efd36e8b08af7ed7e726de6f8 Author: Wilco Dijkstra Date: Wed Jun 12 11:38:52 2019 +0100 Improve performance of strstr =20=20=20=20 This patch significantly improves performance of strstr using a novel modified Horspool algorithm. Needles up to size 256 use a bad-character table indexed by hashed pairs of characters to quickly skip past mismat= ches. Long needles use a self-adapting filtering step to avoid comparing the = whole needle repeatedly. =20=20=20=20 By limiting the needle length to 256, the shift table only requires 8 b= its per entry, lowering preprocessing overhead and minimizing cache effects. This limit also implies worst-case performance is linear. =20=20=20=20 Small needles up to size 3 use a dedicated linear search. Very long ne= edles use the Two-Way algorithm. =20=20=20=20 The performance gain using the improved bench-strstr on Cortex-A72 is 5= .8 times basic_strstr and 3.7 times twoway_strstr. =20=20=20=20 Tested against GLIBC testsuite, randomized tests and the GNULIB strstr = test (https://git.savannah.gnu.org/cgit/gnulib.git/tree/tests/test-strstr.c). =20=20=20=20 Reviewed-by: Szabolcs Nagy =20=20=20=20 * string/str-two-way.h (two_way_short_needle): Add inline to avoid warning. (two_way_long_needle): Block inlining. * string/strstr.c (strstr2): Add new function. (strstr3): Likewise. (STRSTR): Completely rewrite strstr to improve performance. =20=20=20=20 (cherry picked from commit 5e0a7ecb6629461b28adc1a5aabcc0ede122f201) commit 4ec1b9e91382e66fb9a89361c93f9f560abc67f7 Author: Wilco Dijkstra Date: Wed Sep 19 16:50:18 2018 +0100 Fix strstr bug with huge needles (bug 23637) =20=20=20=20 The generic strstr in GLIBC 2.28 fails to match huge needles. The opti= mized AVAILABLE macro reads ahead a large fixed amount to reduce the overhead= of repeatedly checking for the end of the string. However if the needle l= ength is larger than this, two_way_long_needle may confuse this as meaning th= e end of the string and return NULL. This is fixed by adding the needle leng= th to the amount to read ahead. =20=20=20=20 [BZ #23637] * string/test-strstr.c (pr23637): New function. (test_main): Add tests with longer needles. * string/strcasestr.c (AVAILABLE): Fix readahead distance. * string/strstr.c (AVAILABLE): Likewise. =20=20=20=20 (cherry picked from commit 83a552b0bb9fc2a5e80a0ab3723c0a80ce1db9f2) commit ecd6271ed80e71b3b1f286e2977f534d54c33af4 Author: Rajalakshmi Srinivasaraghavan Date: Tue Aug 28 12:42:19 2018 +0530 Speedup first memmem match =20=20=20=20 As done in commit 284f42bc778e487dfd5dff5c01959f93b9e0c4f5, memcmp can be used after memchr to avoid the initialization overhead of the two-way algorithm for the first match. This has shown improvement >40% for first match. =20=20=20=20 (cherry picked from commit c8dd67e7c958de04c3783cbea7c384431707b5f8) commit bba6b9288f5192b67947e478ef9033920d22216a Author: Wilco Dijkstra Date: Fri Aug 3 17:24:12 2018 +0100 Simplify and speedup strstr/strcasestr first match =20=20=20=20 Looking at the benchtests, both strstr and strcasestr spend a lot of ti= me in a slow initialization loop handling one character per iteration. This can be simplified and use the much faster strlen/strnlen/strchr/me= mcmp. Read ahead a few cachelines to reduce the number of strnlen calls, which improves performance by ~3-4%. This patch improves the time taken for = the full strstr benchtest by >40%. =20=20=20=20 * string/strcasestr.c (STRCASESTR): Simplify and speedup first matc= h. * string/strstr.c (AVAILABLE): Likewise. =20=20=20=20 (cherry picked from commit 284f42bc778e487dfd5dff5c01959f93b9e0c4f5) commit 7a4da6ef7abd8491fa52e8a58a484cfe268575a7 Author: Wilco Dijkstra Date: Mon Jul 16 17:50:09 2018 +0100 Improve strstr performance =20=20=20=20 Improve strstr performance. Strstr tends to be slow because it uses many calls to memchr and a slow byte loop to scan for the next match. Performance is significantly improved by using strnlen on larger blocks and using strchr to search for the next matching character. strcasestr can also use strnlen to scan ahead, and memmem can use memchr to check for the next match. =20=20=20=20 On the GLIBC bench tests the performance gains on Cortex-A72 are: strstr: +25% strcasestr: +4.3% memmem: +18% =20=20=20=20 On a 256KB dataset strstr performance improves by 67%, strcasestr by 47= %. =20=20=20=20 Reviewd-by: Adhemerval Zanella =20=20=20=20 (cherry picked from commit 3ae725dfb6d7f61447d27d00ed83e573bd5454f4) --_002_VI1PR0801MB2127304134E8527B8CE2DDB483B30VI1PR0801MB2127_ Content-Type: text/x-patch; name="strstr3.patch" Content-Description: strstr3.patch Content-Disposition: attachment; filename="strstr3.patch"; size=23789; creation-date="Fri, 13 Sep 2019 16:27:04 GMT"; modification-date="Fri, 13 Sep 2019 16:27:04 GMT" Content-Transfer-Encoding: base64 Content-length: 32249 ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzMjY1 ZTYxLi4zNjgyNjM3IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hh bmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTktMDktMTMgIFdpbGNvIERp amtzdHJhICA8d2RpamtzdHJAYXJtLmNvbT4KKworCSogc3RyaW5nL21lbW1l bS5jIChfX21lbW1lbSk6IFJld3JpdGUgdG8gaW1wcm92ZSBwZXJmb3JtYW5j ZS4KKworMjAxOS0wNi0xMiAgV2lsY28gRGlqa3N0cmEgIDx3ZGlqa3N0ckBh cm0uY29tPgorCisJKiBzdHJpbmcvc3RyLXR3by13YXkuaCAodHdvX3dheV9z aG9ydF9uZWVkbGUpOiBBZGQgaW5saW5lIHRvIGF2b2lkCisJd2FybmluZy4K KwkodHdvX3dheV9sb25nX25lZWRsZSk6IEJsb2NrIGlubGluaW5nLgorCSog c3RyaW5nL3N0cnN0ci5jIChzdHJzdHIyKTogQWRkIG5ldyBmdW5jdGlvbi4K Kwkoc3Ryc3RyMyk6IExpa2V3aXNlLgorCShTVFJTVFIpOiBDb21wbGV0ZWx5 IHJld3JpdGUgc3Ryc3RyIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisKKzIw MTktMDktMTMgIFdpbGNvIERpamtzdHJhICA8d2RpamtzdHJAYXJtLmNvbT4K KworCVtCWiAjMjM2MzddCisJKiBzdHJpbmcvdGVzdC1zdHJzdHIuYyAocHIy MzYzNyk6IE5ldyBmdW5jdGlvbi4KKwkodGVzdF9tYWluKTogQWRkIHRlc3Rz IHdpdGggbG9uZ2VyIG5lZWRsZXMuCisJKiBzdHJpbmcvc3RyY2FzZXN0ci5j IChBVkFJTEFCTEUpOiBGaXggcmVhZGFoZWFkIGRpc3RhbmNlLgorCSogc3Ry aW5nL3N0cnN0ci5jIChBVkFJTEFCTEUpOiBMaWtld2lzZS4KKworMjAxOS0w OS0xMyAgUmFqYWxha3NobWkgU3Jpbml2YXNhcmFnaGF2YW4gIDxyYWppQGxp bnV4LnZuZXQuaWJtLmNvbT4KKworCSogc3RyaW5nL21lbW1lbS5jOiBVc2Ug bWVtY21wIGZvciBmaXJzdCBtYXRjaC4KKworMjAxOS0wOS0xMyAgV2lsY28g RGlqa3N0cmEgIDx3ZGlqa3N0ckBhcm0uY29tPgorCisJKiBzdHJpbmcvc3Ry Y2FzZXN0ci5jIChTVFJDQVNFU1RSKTogU2ltcGxpZnkgYW5kIHNwZWVkdXAg Zmlyc3QgbWF0Y2guCisJKiBzdHJpbmcvc3Ryc3RyLmMgKEFWQUlMQUJMRSk6 IExpa2V3aXNlLgorCisyMDE5LTA5LTEzICBXaWxjbyBEaWprc3RyYSAgPHdk aWprc3RyQGFybS5jb20+CisKKwkqIGJlbmNodGVzdHMvYmVuY2gtc3RyY2Fz ZXN0ci5jOiBSZW5hbWUgX19zdHJubGVuIHRvIHN0cm5sZW4uCisJKiBiZW5j aHRlc3RzL2JlbmNoLXN0cnN0ci5jOiBMaWtld2lzZS4KKwkqIHN0cmluZy9t ZW1tZW0uYyAoRkFTVFNFQVJDSCk6IERlZmluZS4KKwkqIHN0cmluZy9zdHIt dHdvLXdheS5oICh0d29fd2F5X3Nob3J0X25lZWRsZSk6IE1pbm9yIGNsZWFu dXBzLgorCUFkZCBzdXBwb3J0IGZvciBGQVNUU0VBUkNILgorCSogc3RyaW5n L3N0cmNhc2VzdHIuYyAoQVZBSUxBQkxFKTogVXNlIHJlYWQtYWhlYWQgX19z dHJubGVuLgorCSogc3RyaW5nL3N0cnN0ci5jIChBVkFJTEFCTEUpOiBVc2Ug cmVhZC1haGVhZCBfX3N0cm5sZW4uCisJKEZBU1RTRUFSQ0gpOiBEZWZpbmUu CisJKiBzdHJpbmcvdGVzdC1zdHJjYXNlc3RyLmM6IFJlbmFtZSBfX3N0cm5s ZW4gdG8gc3Rybmxlbi4KKwkqIHN0cmluZy90ZXN0LXN0cnN0ci5jOiBMaWtl d2lzZS4KKwogMjAxOS0wOS0wNiAgV2lsY28gRGlqa3N0cmEgIDx3ZGlqa3N0 ckBhcm0uY29tPgogCiAJKiBtYW51YWwvdHVuYWJsZXMudGV4aSAoZ2xpYmMu Y3B1Lm5hbWUpOiBBZGQgYXJlcyB0dW5hYmxlLgpkaWZmIC0tZ2l0IGEvYmVu Y2h0ZXN0cy9iZW5jaC1zdHJjYXNlc3RyLmMgYi9iZW5jaHRlc3RzL2JlbmNo LXN0cmNhc2VzdHIuYwppbmRleCBlNjY1OWVhLi40MzM3ZTBjIDEwMDY0NAot LS0gYS9iZW5jaHRlc3RzL2JlbmNoLXN0cmNhc2VzdHIuYworKysgYi9iZW5j aHRlc3RzL2JlbmNoLXN0cmNhc2VzdHIuYwpAQCAtMjQsNiArMjQsNyBAQAog I2RlZmluZSBTVFJDQVNFU1RSIHNpbXBsZV9zdHJjYXNlc3RyCiAjZGVmaW5l IE5PX0FMSUFTCiAjZGVmaW5lIF9fc3RybmNhc2VjbXAgc3RybmNhc2VjbXAK KyNkZWZpbmUgX19zdHJubGVuIHN0cm5sZW4KICNpbmNsdWRlICIuLi9zdHJp bmcvc3RyY2FzZXN0ci5jIgogCiAKZGlmZiAtLWdpdCBhL2JlbmNodGVzdHMv YmVuY2gtc3Ryc3RyLmMgYi9iZW5jaHRlc3RzL2JlbmNoLXN0cnN0ci5jCmlu ZGV4IDg2ZDVlODIuLmI3NDMxZGUgMTAwNjQ0Ci0tLSBhL2JlbmNodGVzdHMv YmVuY2gtc3Ryc3RyLmMKKysrIGIvYmVuY2h0ZXN0cy9iZW5jaC1zdHJzdHIu YwpAQCAtMjIsNiArMjIsOSBAQAogCiAKICNkZWZpbmUgU1RSU1RSIHNpbXBs ZV9zdHJzdHIKKyN1bmRlZiBsaWJjX2hpZGRlbl9idWlsdGluX2RlZgorI2Rl ZmluZSBsaWJjX2hpZGRlbl9idWlsdGluX2RlZihYKQorI2RlZmluZSBfX3N0 cm5sZW4gc3RybmxlbgogI2luY2x1ZGUgIi4uL3N0cmluZy9zdHJzdHIuYyIK IAogCmRpZmYgLS1naXQgYS9zdHJpbmcvbWVtbWVtLmMgYi9zdHJpbmcvbWVt bWVtLmMKaW5kZXggYzE3ZTFjZi4uN2ZiZTFjYiAxMDA2NDQKLS0tIGEvc3Ry aW5nL21lbW1lbS5jCisrKyBiL3N0cmluZy9tZW1tZW0uYwpAQCAtMTUsNjcg KzE1LDExNSBAQAogICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBM aWJyYXJ5OyBpZiBub3QsIHNlZQogICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KIAotLyogVGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVu dGF0aW9uIHdhcyB3cml0dGVuIGJ5IEVyaWMgQmxha2UsIDIwMDguICAqLwot CiAjaWZuZGVmIF9MSUJDCiAjIGluY2x1ZGUgPGNvbmZpZy5oPgogI2VuZGlm CiAKLS8qIFNwZWNpZmljYXRpb24gb2YgbWVtbWVtLiAgKi8KICNpbmNsdWRl IDxzdHJpbmcuaD4KIAogI2lmbmRlZiBfTElCQwotIyBkZWZpbmUgX19idWls dGluX2V4cGVjdChleHByLCB2YWwpICAgKGV4cHIpCiAjIGRlZmluZSBfX21l bW1lbQltZW1tZW0KICNlbmRpZgogCiAjZGVmaW5lIFJFVFVSTl9UWVBFIHZv aWQgKgogI2RlZmluZSBBVkFJTEFCTEUoaCwgaF9sLCBqLCBuX2wpICgoaikg PD0gKGhfbCkgLSAobl9sKSkKKyNkZWZpbmUgRkFTVFNFQVJDSChTLEMsTikg KHZvaWQqKSBtZW1jaHIgKCh2b2lkICopKFMpLCAoQyksIChOKSkKICNpbmNs dWRlICJzdHItdHdvLXdheS5oIgogCiAjdW5kZWYgbWVtbWVtCiAKLS8qIFJl dHVybiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBORUVETEUgaW4gSEFZU1RB Q0suICBSZXR1cm4gSEFZU1RBQ0sKLSAgIGlmIE5FRURMRV9MRU4gaXMgMCwg b3RoZXJ3aXNlIE5VTEwgaWYgTkVFRExFIGlzIG5vdCBmb3VuZCBpbgotICAg SEFZU1RBQ0suICAqLworLyogSGFzaCBjaGFyYWN0ZXIgcGFpcnMgc28gYSBz bWFsbCBzaGlmdCB0YWJsZSBjYW4gYmUgdXNlZC4gIEFsbCBiaXRzIG9mCisg ICBwWzBdIGFyZSBpbmNsdWRlZCwgYnV0IG5vdCBhbGwgYml0cyBmcm9tIHBb LTFdLiAgU28gaWYgdHdvIGVxdWFsIGhhc2hlcworICAgbWF0Y2ggb24gcFst MV0sIHBbMF0gbWF0Y2hlcyB0b28uICBIYXNoIGNvbGxpc2lvbnMgYXJlIGhh cm1sZXNzIGFuZCByZXN1bHQKKyAgIGluIHNtYWxsZXIgc2hpZnRzLiAgKi8K KyNkZWZpbmUgaGFzaDIocCkgKCgoc2l6ZV90KShwKVswXSAtICgoc2l6ZV90 KShwKVstMV0gPDwgMykpICUgc2l6ZW9mIChzaGlmdCkpCisKKy8qIEZhc3Qg bWVtbWVtIGFsZ29yaXRobSB3aXRoIGd1YXJhbnRlZWQgbGluZWFyLXRpbWUg cGVyZm9ybWFuY2UuCisgICBTbWFsbCBuZWVkbGVzIHVwIHRvIHNpemUgMiB1 c2UgYSBkZWRpY2F0ZWQgbGluZWFyIHNlYXJjaC4gIExvbmdlciBuZWVkbGVz CisgICB1cCB0byBzaXplIDI1NiB1c2UgYSBub3ZlbCBtb2RpZmllZCBIb3Jz cG9vbCBhbGdvcml0aG0uICBJdCBoYXNoZXMgcGFpcnMKKyAgIG9mIGNoYXJh Y3RlcnMgdG8gcXVpY2tseSBza2lwIHBhc3QgbWlzbWF0Y2hlcy4gIFRoZSBt YWluIHNlYXJjaCBsb29wIG9ubHkKKyAgIGV4aXRzIGlmIHRoZSBsYXN0IDIg Y2hhcmFjdGVycyBtYXRjaCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgY2FsbHMg dG8gbWVtY21wCisgICBhbmQgYWxsb3dpbmcgZm9yIGEgbGFyZ2VyIHNraXAg aWYgdGhlcmUgaXMgbm8gbWF0Y2guICBBIHNlbGYtYWRhcHRpbmcKKyAgIGZp bHRlcmluZyBjaGVjayBpcyB1c2VkIHRvIHF1aWNrbHkgZGV0ZWN0IG1pc21h dGNoZXMgaW4gbG9uZyBuZWVkbGVzLgorICAgQnkgbGltaXRpbmcgdGhlIG5l ZWRsZSBsZW5ndGggdG8gMjU2LCB0aGUgc2hpZnQgdGFibGUgY2FuIGJlIHJl ZHVjZWQgdG8gOAorICAgYml0cyBwZXIgZW50cnksIGxvd2VyaW5nIHByZXBy b2Nlc3Npbmcgb3ZlcmhlYWQgYW5kIG1pbmltaXppbmcgY2FjaGUgZWZmZWN0 cy4KKyAgIFRoZSBsaW1pdCBhbHNvIGltcGxpZXMgd29yc3QtY2FzZSBwZXJm b3JtYW5jZSBpcyBsaW5lYXIuCisgICBOZWVkbGVzIGxhcmdlciB0aGFuIDI1 NiBjaGFyYWN0ZXJzIHVzZSB0aGUgbGluZWFyLXRpbWUgVHdvLVdheSBhbGdv cml0aG0uICAqLwogdm9pZCAqCi1fX21lbW1lbSAoY29uc3Qgdm9pZCAqaGF5 c3RhY2tfc3RhcnQsIHNpemVfdCBoYXlzdGFja19sZW4sCi0JICBjb25zdCB2 b2lkICpuZWVkbGVfc3RhcnQsIHNpemVfdCBuZWVkbGVfbGVuKQorX19tZW1t ZW0gKGNvbnN0IHZvaWQgKmhheXN0YWNrLCBzaXplX3QgaHNfbGVuLAorCSAg Y29uc3Qgdm9pZCAqbmVlZGxlLCBzaXplX3QgbmVfbGVuKQogewotICAvKiBB YnN0cmFjdCBtZW1vcnkgaXMgY29uc2lkZXJlZCB0byBiZSBhbiBhcnJheSBv ZiAndW5zaWduZWQgY2hhcicgdmFsdWVzLAotICAgICBub3QgYW4gYXJyYXkg b2YgJ2NoYXInIHZhbHVlcy4gIFNlZSBJU08gQyA5OSBzZWN0aW9uIDYuMi42 LjEuICAqLwotICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXlzdGFjayA9IChj b25zdCB1bnNpZ25lZCBjaGFyICopIGhheXN0YWNrX3N0YXJ0OwotICBjb25z dCB1bnNpZ25lZCBjaGFyICpuZWVkbGUgPSAoY29uc3QgdW5zaWduZWQgY2hh ciAqKSBuZWVkbGVfc3RhcnQ7Ci0KLSAgaWYgKG5lZWRsZV9sZW4gPT0gMCkK LSAgICAvKiBUaGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZW1wdHkgc3Ry aW5nIGlzIGRlZW1lZCB0byBvY2N1ciBhdAotICAgICAgIHRoZSBiZWdpbm5p bmcgb2YgdGhlIHN0cmluZy4gICovCi0gICAgcmV0dXJuICh2b2lkICopIGhh eXN0YWNrOwotCi0gIC8qIFNhbml0eSBjaGVjaywgb3RoZXJ3aXNlIHRoZSBs b29wIG1pZ2h0IHNlYXJjaCB0aHJvdWdoIHRoZSB3aG9sZQotICAgICBtZW1v cnkuICAqLwotICBpZiAoX19nbGliY191bmxpa2VseSAoaGF5c3RhY2tfbGVu IDwgbmVlZGxlX2xlbikpCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhzID0g KGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgaGF5c3RhY2s7CisgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKm5lID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbmVl ZGxlOworCisgIGlmIChuZV9sZW4gPT0gMCkKKyAgICByZXR1cm4gKHZvaWQg KikgaHM7CisgIGlmIChuZV9sZW4gPT0gMSkKKyAgICByZXR1cm4gKHZvaWQg KikgbWVtY2hyIChocywgbmVbMF0sIGhzX2xlbik7CisKKyAgLyogRW5zdXJl IGhheXN0YWNrIGxlbmd0aCBpcyA+PSBuZWVkbGUgbGVuZ3RoLiAgKi8KKyAg aWYgKGhzX2xlbiA8IG5lX2xlbikKICAgICByZXR1cm4gTlVMTDsKIAotICAv KiBVc2Ugb3B0aW1pemF0aW9ucyBpbiBtZW1jaHIgd2hlbiBwb3NzaWJsZSwg dG8gcmVkdWNlIHRoZSBzZWFyY2gKLSAgICAgc2l6ZSBvZiBoYXlzdGFjayB1 c2luZyBhIGxpbmVhciBhbGdvcml0aG0gd2l0aCBhIHNtYWxsZXIKLSAgICAg Y29lZmZpY2llbnQuICBIb3dldmVyLCBhdm9pZCBtZW1jaHIgZm9yIGxvbmcg bmVlZGxlcywgc2luY2Ugd2UKLSAgICAgY2FuIG9mdGVuIGFjaGlldmUgc3Vi bGluZWFyIHBlcmZvcm1hbmNlLiAgKi8KLSAgaWYgKG5lZWRsZV9sZW4gPCBM T05HX05FRURMRV9USFJFU0hPTEQpCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmVuZCA9IGhzICsgaHNfbGVuIC0gbmVfbGVuOworCisgIGlmIChuZV9sZW4g PT0gMikKKyAgICB7CisgICAgICB1aW50MzJfdCBudyA9IG5lWzBdIDw8IDE2 IHwgbmVbMV0sIGh3ID0gaHNbMF0gPDwgMTYgfCBoc1sxXTsKKyAgICAgIGZv ciAoaHMrKzsgaHMgPD0gZW5kICYmIGh3ICE9IG53OyApCisJaHcgPSBodyA8 PCAxNiB8ICorK2hzOworICAgICAgcmV0dXJuIGh3ID09IG53ID8gKHZvaWQg KilocyAtIDEgOiBOVUxMOworICAgIH0KKworICAvKiBVc2UgVHdvLVdheSBh bGdvcml0aG0gZm9yIHZlcnkgbG9uZyBuZWVkbGVzLiAgKi8KKyAgaWYgKF9f YnVpbHRpbl9leHBlY3QgKG5lX2xlbiA+IDI1NiwgMCkpCisgICAgcmV0dXJu IHR3b193YXlfbG9uZ19uZWVkbGUgKGhzLCBoc19sZW4sIG5lLCBuZV9sZW4p OworCisgIHVpbnQ4X3Qgc2hpZnRbMjU2XTsKKyAgc2l6ZV90IHRtcCwgc2hp ZnQxOworICBzaXplX3QgbTEgPSBuZV9sZW4gLSAxOworICBzaXplX3Qgb2Zm c2V0ID0gMDsKKworICBtZW1zZXQgKHNoaWZ0LCAwLCBzaXplb2YgKHNoaWZ0 KSk7CisgIGZvciAoaW50IGkgPSAxOyBpIDwgbTE7IGkrKykKKyAgICBzaGlm dFtoYXNoMiAobmUgKyBpKV0gPSBpOworICAvKiBTaGlmdDEgaXMgdGhlIGFt b3VudCB3ZSBjYW4gc2tpcCBhZnRlciBtYXRjaGluZyB0aGUgaGFzaCBvZiB0 aGUKKyAgICAgbmVlZGxlIGVuZCBidXQgbm90IHRoZSBmdWxsIG5lZWRsZS4g ICovCisgIHNoaWZ0MSA9IG0xIC0gc2hpZnRbaGFzaDIgKG5lICsgbTEpXTsK KyAgc2hpZnRbaGFzaDIgKG5lICsgbTEpXSA9IG0xOworCisgIGZvciAoIDsg aHMgPD0gZW5kOyApCiAgICAgewotICAgICAgaGF5c3RhY2sgPSBtZW1jaHIg KGhheXN0YWNrLCAqbmVlZGxlLCBoYXlzdGFja19sZW4pOwotICAgICAgaWYg KCFoYXlzdGFjayB8fCBfX2J1aWx0aW5fZXhwZWN0IChuZWVkbGVfbGVuID09 IDEsIDApKQotCXJldHVybiAodm9pZCAqKSBoYXlzdGFjazsKLSAgICAgIGhh eXN0YWNrX2xlbiAtPSBoYXlzdGFjayAtIChjb25zdCB1bnNpZ25lZCBjaGFy ICopIGhheXN0YWNrX3N0YXJ0OwotICAgICAgaWYgKGhheXN0YWNrX2xlbiA8 IG5lZWRsZV9sZW4pCi0JcmV0dXJuIE5VTEw7Ci0gICAgICByZXR1cm4gdHdv X3dheV9zaG9ydF9uZWVkbGUgKGhheXN0YWNrLCBoYXlzdGFja19sZW4sIG5l ZWRsZSwgbmVlZGxlX2xlbik7CisgICAgICAvKiBTa2lwIHBhc3QgY2hhcmFj dGVyIHBhaXJzIG5vdCBpbiB0aGUgbmVlZGxlLiAgKi8KKyAgICAgIGRvCisJ eworCSAgaHMgKz0gbTE7CisJICB0bXAgPSBzaGlmdFtoYXNoMiAoaHMpXTsK Kwl9CisgICAgICB3aGlsZSAodG1wID09IDAgJiYgaHMgPD0gZW5kKTsKKwor ICAgICAgLyogSWYgdGhlIG1hdGNoIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRo ZSBuZWVkbGUsIHNoaWZ0IHRvIHRoZSBlbmQKKwkgYW5kIGNvbnRpbnVlIHVu dGlsIHdlIG1hdGNoIHRoZSBoYXNoIG9mIHRoZSBuZWVkbGUgZW5kLiAgKi8K KyAgICAgIGhzIC09IHRtcDsKKyAgICAgIGlmICh0bXAgPCBtMSkKKwljb250 aW51ZTsKKworICAgICAgLyogSGFzaCBvZiB0aGUgbGFzdCAyIGNoYXJhY3Rl cnMgbWF0Y2hlcy4gIElmIHRoZSBuZWVkbGUgaXMgbG9uZywKKwkgdHJ5IHRv IHF1aWNrbHkgZmlsdGVyIG91dCBtaXNtYXRjaGVzLiAgKi8KKyAgICAgIGlm IChtMSA8IDE1IHx8IG1lbWNtcCAoaHMgKyBvZmZzZXQsIG5lICsgb2Zmc2V0 LCA4KSA9PSAwKQorCXsKKwkgIGlmIChtZW1jbXAgKGhzLCBuZSwgbTEpID09 IDApCisJICAgIHJldHVybiAodm9pZCAqKSBoczsKKworCSAgLyogQWRqdXN0 IGZpbHRlciBvZmZzZXQgd2hlbiBpdCBkb2Vzbid0IGZpbmQgdGhlIG1pc21h dGNoLiAgKi8KKwkgIG9mZnNldCA9IChvZmZzZXQgPj0gOCA/IG9mZnNldCA6 IG0xKSAtIDg7CisJfQorCisgICAgICAvKiBTa2lwIGJhc2VkIG9uIG1hdGNo aW5nIHRoZSBoYXNoIG9mIHRoZSBuZWVkbGUgZW5kLiAgKi8KKyAgICAgIGhz ICs9IHNoaWZ0MTsKICAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gdHdvX3dh eV9sb25nX25lZWRsZSAoaGF5c3RhY2ssIGhheXN0YWNrX2xlbiwgbmVlZGxl LCBuZWVkbGVfbGVuKTsKKyAgcmV0dXJuIE5VTEw7CiB9CiBsaWJjX2hpZGRl bl9kZWYgKF9fbWVtbWVtKQogd2Vha19hbGlhcyAoX19tZW1tZW0sIG1lbW1l bSkKIGxpYmNfaGlkZGVuX3dlYWsgKG1lbW1lbSkKLQotI3VuZGVmIExPTkdf TkVFRExFX1RIUkVTSE9MRApkaWZmIC0tZ2l0IGEvc3RyaW5nL3N0ci10d28t d2F5LmggYi9zdHJpbmcvc3RyLXR3by13YXkuaAppbmRleCBjZDI2MDU4NS4u MzU4OTU5YiAxMDA2NDQKLS0tIGEvc3RyaW5nL3N0ci10d28td2F5LmgKKysr IGIvc3RyaW5nL3N0ci10d28td2F5LmgKQEAgLTIyMSw3ICsyMjEsNyBAQCBj cml0aWNhbF9mYWN0b3JpemF0aW9uIChjb25zdCB1bnNpZ25lZCBjaGFyICpu ZWVkbGUsIHNpemVfdCBuZWVkbGVfbGVuLAogICAgbW9zdCAyICogSEFZU1RB Q0tfTEVOIC0gTkVFRExFX0xFTiBjb21wYXJpc29ucyBvY2N1ciBpbiBzZWFy Y2hpbmcuCiAgICBJZiBBVkFJTEFCTEUgbW9kaWZpZXMgSEFZU1RBQ0tfTEVO IChhcyBpbiBzdHJzdHIpLCB0aGVuIGF0IG1vc3QgMyAqCiAgICBIQVlTVEFD S19MRU4gLSBORUVETEVfTEVOIGNvbXBhcmlzb25zIG9jY3VyIGluIHNlYXJj aGluZy4gICovCi1zdGF0aWMgUkVUVVJOX1RZUEUKK3N0YXRpYyBpbmxpbmUg UkVUVVJOX1RZUEUKIHR3b193YXlfc2hvcnRfbmVlZGxlIChjb25zdCB1bnNp Z25lZCBjaGFyICpoYXlzdGFjaywgc2l6ZV90IGhheXN0YWNrX2xlbiwKIAkJ ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmVlZGxlLCBzaXplX3QgbmVl ZGxlX2xlbikKIHsKQEAgLTI4MSw1MCArMjgxLDUwIEBAIHR3b193YXlfc2hv cnRfbmVlZGxlIChjb25zdCB1bnNpZ25lZCBjaGFyICpoYXlzdGFjaywgc2l6 ZV90IGhheXN0YWNrX2xlbiwKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICpwaGF5c3RhY2sgPSAmaGF5c3RhY2tb c3VmZml4XTsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBoYXlzdGFj azsKICAgICAgIC8qIFRoZSBjb21wYXJpc29uIGFsd2F5cyBzdGFydHMgZnJv bSBuZWVkbGVbc3VmZml4XSwgc28gY2FjaGUgaXQKIAkgYW5kIHVzZSBhbiBv cHRpbWl6ZWQgZmlyc3QtY2hhcmFjdGVyIGxvb3AuICAqLwogICAgICAgdW5z aWduZWQgY2hhciBuZWVkbGVfc3VmZml4ID0gQ0FOT05fRUxFTUVOVCAobmVl ZGxlW3N1ZmZpeF0pOwogCi0jaWYgQ0hFQ0tfRU9MCi0gICAgICAvKiBXZSBz dGFydCBtYXRjaGluZyBmcm9tIHRoZSBTVUZGSVgndGggZWxlbWVudCwgc28g bWFrZSBzdXJlIHdlCi0JIGRvbid0IGhpdCAnXDAnIGJlZm9yZSB0aGF0LiAg Ki8KLSAgICAgIGlmIChoYXlzdGFja19sZW4gPCBzdWZmaXggKyAxCi0JICAm JiAhQVZBSUxBQkxFIChoYXlzdGFjaywgaGF5c3RhY2tfbGVuLCAwLCBzdWZm aXggKyAxKSkKLQlyZXR1cm4gTlVMTDsKLSNlbmRpZgotCiAgICAgICAvKiBU aGUgdHdvIGhhbHZlcyBvZiBuZWVkbGUgYXJlIGRpc3RpbmN0OyBubyBleHRy YSBtZW1vcnkgaXMKIAkgcmVxdWlyZWQsIGFuZCBhbnkgbWlzbWF0Y2ggcmVz dWx0cyBpbiBhIG1heGltYWwgc2hpZnQuICAqLwogICAgICAgcGVyaW9kID0g TUFYIChzdWZmaXgsIG5lZWRsZV9sZW4gLSBzdWZmaXgpICsgMTsKICAgICAg IGogPSAwOwotICAgICAgd2hpbGUgKDEKLSNpZiAhQ0hFQ0tfRU9MCi0JICAg ICAmJiBBVkFJTEFCTEUgKGhheXN0YWNrLCBoYXlzdGFja19sZW4sIGosIG5l ZWRsZV9sZW4pCi0jZW5kaWYKLQkgICAgICkKKyAgICAgIHdoaWxlIChBVkFJ TEFCTEUgKGhheXN0YWNrLCBoYXlzdGFja19sZW4sIGosIG5lZWRsZV9sZW4p KQogCXsKIAkgIHVuc2lnbmVkIGNoYXIgaGF5c3RhY2tfY2hhcjsKIAkgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnBuZWVkbGU7CiAKLQkgIC8qIFRPRE86IFRo ZSBmaXJzdC1jaGFyYWN0ZXIgbG9vcCBjYW4gYmUgc3BlZCB1cCBieSBhZGFw dGluZwotCSAgICAgbG9uZ3dvcmQtYXQtYS10aW1lIGltcGxlbWVudGF0aW9u IG9mIG1lbWNoci9zdHJjaHIuICAqLwotCSAgaWYgKG5lZWRsZV9zdWZmaXgK KwkgIHBoYXlzdGFjayA9ICZoYXlzdGFja1tzdWZmaXggKyBqXTsKKworI2lm ZGVmIEZBU1RTRUFSQ0gKKwkgIGlmICgqcGhheXN0YWNrKysgIT0gbmVlZGxl X3N1ZmZpeCkKKwkgICAgeworCSAgICAgIHBoYXlzdGFjayA9IEZBU1RTRUFS Q0ggKHBoYXlzdGFjaywgbmVlZGxlX3N1ZmZpeCwKKwkJCQkgICAgICBoYXlz dGFja19sZW4gLSBuZWVkbGVfbGVuIC0gaik7CisJICAgICAgaWYgKHBoYXlz dGFjayA9PSBOVUxMKQorCQlnb3RvIHJldDA7CisJICAgICAgaiA9IHBoYXlz dGFjayAtICZoYXlzdGFja1tzdWZmaXhdOworCSAgICAgIHBoYXlzdGFjaysr OworCSAgICB9CisjZWxzZQorCSAgd2hpbGUgKG5lZWRsZV9zdWZmaXgKIAkg ICAgICAhPSAoaGF5c3RhY2tfY2hhciA9IENBTk9OX0VMRU1FTlQgKCpwaGF5 c3RhY2srKykpKQogCSAgICB7CiAJICAgICAgUkVUMF9JRl8wIChoYXlzdGFj a19jaGFyKTsKLSNpZiAhQ0hFQ0tfRU9MCisjIGlmICFDSEVDS19FT0wKIAkg ICAgICArK2o7Ci0jZW5kaWYKLQkgICAgICBjb250aW51ZTsKKwkgICAgICBp ZiAoIUFWQUlMQUJMRSAoaGF5c3RhY2ssIGhheXN0YWNrX2xlbiwgaiwgbmVl ZGxlX2xlbikpCisJCWdvdG8gcmV0MDsKKyMgZW5kaWYKIAkgICAgfQogCi0j aWYgQ0hFQ0tfRU9MCisjIGlmIENIRUNLX0VPTAogCSAgLyogQ2FsY3VsYXRl IEogaWYgaXQgd2Fzbid0IGtlcHQgdXAtdG8tZGF0ZSBpbiB0aGUgZmlyc3Qt Y2hhcmFjdGVyCiAJICAgICBsb29wLiAgKi8KIAkgIGogPSBwaGF5c3RhY2sg LSAmaGF5c3RhY2tbc3VmZml4XSAtIDE7CisjIGVuZGlmCiAjZW5kaWYKLQog CSAgLyogU2NhbiBmb3IgbWF0Y2hlcyBpbiByaWdodCBoYWxmLiAgKi8KIAkg IGkgPSBzdWZmaXggKyAxOwogCSAgcG5lZWRsZSA9ICZuZWVkbGVbaV07CkBA IC0zMzgsNiArMzM4LDExIEBAIHR3b193YXlfc2hvcnRfbmVlZGxlIChjb25z dCB1bnNpZ25lZCBjaGFyICpoYXlzdGFjaywgc2l6ZV90IGhheXN0YWNrX2xl biwKIAkJfQogCSAgICAgICsraTsKIAkgICAgfQorI2lmIENIRUNLX0VPTAor CSAgLyogVXBkYXRlIG1pbmltYWwgbGVuZ3RoIG9mIGhheXN0YWNrLiAgKi8K KwkgIGlmIChwaGF5c3RhY2sgPiBoYXlzdGFjayArIGhheXN0YWNrX2xlbikK KwkgICAgaGF5c3RhY2tfbGVuID0gcGhheXN0YWNrIC0gaGF5c3RhY2s7Cisj ZW5kaWYKIAkgIGlmIChuZWVkbGVfbGVuIDw9IGkpCiAJICAgIHsKIAkgICAg ICAvKiBTY2FuIGZvciBtYXRjaGVzIGluIGxlZnQgaGFsZi4gICovCkBAIC0z NjAsMTMgKzM2NSw2IEBAIHR3b193YXlfc2hvcnRfbmVlZGxlIChjb25zdCB1 bnNpZ25lZCBjaGFyICpoYXlzdGFjaywgc2l6ZV90IGhheXN0YWNrX2xlbiwK IAkgICAgfQogCSAgZWxzZQogCSAgICBqICs9IGkgLSBzdWZmaXggKyAxOwot Ci0jaWYgQ0hFQ0tfRU9MCi0JICBpZiAoIUFWQUlMQUJMRSAoaGF5c3RhY2ss IGhheXN0YWNrX2xlbiwgaiwgbmVlZGxlX2xlbikpCi0JICAgIGJyZWFrOwot I2VuZGlmCi0KLQkgIHBoYXlzdGFjayA9ICZoYXlzdGFja1tzdWZmaXggKyBq XTsKIAl9CiAgICAgfQogIHJldDA6IF9fYXR0cmlidXRlX18gKCh1bnVzZWQp KQpAQCAtMzg0LDggKzM4MiwxMSBAQCB0d29fd2F5X3Nob3J0X25lZWRsZSAo Y29uc3QgdW5zaWduZWQgY2hhciAqaGF5c3RhY2ssIHNpemVfdCBoYXlzdGFj a19sZW4sCiAgICBhbmQgc3VibGluZWFyIHBlcmZvcm1hbmNlIE8oSEFZU1RB Q0tfTEVOIC8gTkVFRExFX0xFTikgaXMgcG9zc2libGUuCiAgICBJZiBBVkFJ TEFCTEUgbW9kaWZpZXMgSEFZU1RBQ0tfTEVOIChhcyBpbiBzdHJzdHIpLCB0 aGVuIGF0IG1vc3QgMyAqCiAgICBIQVlTVEFDS19MRU4gLSBORUVETEVfTEVO IGNvbXBhcmlzb25zIG9jY3VyIGluIHNlYXJjaGluZywgYW5kCi0gICBzdWJs aW5lYXIgcGVyZm9ybWFuY2UgaXMgbm90IHBvc3NpYmxlLiAgKi8KLXN0YXRp YyBSRVRVUk5fVFlQRQorICAgc3VibGluZWFyIHBlcmZvcm1hbmNlIGlzIG5v dCBwb3NzaWJsZS4KKworICAgU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBsYXJn ZSBhbmQgY29tcGxleCwgYmxvY2sgaW5saW5pbmcgdG8gYXZvaWQKKyAgIHNs b3dpbmcgZG93biB0aGUgY29tbW9uIGNhc2Ugb2Ygc21hbGwgbmVlZGxlcy4g ICovCitfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpIHN0YXRpYyBSRVRVUk5f VFlQRQogdHdvX3dheV9sb25nX25lZWRsZSAoY29uc3QgdW5zaWduZWQgY2hh ciAqaGF5c3RhY2ssIHNpemVfdCBoYXlzdGFja19sZW4sCiAJCSAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqbmVlZGxlLCBzaXplX3QgbmVlZGxlX2xlbikK IHsKZGlmZiAtLWdpdCBhL3N0cmluZy9zdHJjYXNlc3RyLmMgYi9zdHJpbmcv c3RyY2FzZXN0ci5jCmluZGV4IDkwYmExODkuLjhhYTc2MDMgMTAwNjQ0Ci0t LSBhL3N0cmluZy9zdHJjYXNlc3RyLmMKKysrIGIvc3RyaW5nL3N0cmNhc2Vz dHIuYwpAQCAtMzcsOCArMzcsOSBAQAogLyogVHdvLVdheSBhbGdvcml0aG0u ICAqLwogI2RlZmluZSBSRVRVUk5fVFlQRSBjaGFyICoKICNkZWZpbmUgQVZB SUxBQkxFKGgsIGhfbCwgaiwgbl9sKQkJCVwKLSAgKCFtZW1jaHIgKChoKSAr IChoX2wpLCAnXDAnLCAoaikgKyAobl9sKSAtIChoX2wpKQlcCi0gICAmJiAo KGhfbCkgPSAoaikgKyAobl9sKSkpCisgICgoKGopICsgKG5fbCkgPD0gKGhf bCkpIFwKKyAgIHx8ICgoaF9sKSArPSBfX3N0cm5sZW4gKCh2b2lkKikoKGgp ICsgKGhfbCkpLCAobl9sKSArIDUxMiksIFwKKyAgICAgICAoaikgKyAobl9s KSA8PSAoaF9sKSkpCiAjZGVmaW5lIENIRUNLX0VPTCAoMSkKICNkZWZpbmUg UkVUMF9JRl8wKGEpIGlmICghYSkgZ290byByZXQwCiAjZGVmaW5lIENBTk9O X0VMRU1FTlQoYykgVE9MT1dFUiAoYykKQEAgLTU4LDMxICs1OSwyMiBAQAog ICAgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uLiAgVGhpcyBmdW5jdGlv biBnaXZlcyB1bnNwZWNpZmllZAogICAgcmVzdWx0cyBpbiBtdWx0aWJ5dGUg bG9jYWxlcy4gICovCiBjaGFyICoKLVNUUkNBU0VTVFIgKGNvbnN0IGNoYXIg KmhheXN0YWNrX3N0YXJ0LCBjb25zdCBjaGFyICpuZWVkbGVfc3RhcnQpCitT VFJDQVNFU1RSIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAq bmVlZGxlKQogewotICBjb25zdCBjaGFyICpoYXlzdGFjayA9IGhheXN0YWNr X3N0YXJ0OwotICBjb25zdCBjaGFyICpuZWVkbGUgPSBuZWVkbGVfc3RhcnQ7 CiAgIHNpemVfdCBuZWVkbGVfbGVuOyAvKiBMZW5ndGggb2YgTkVFRExFLiAg Ki8KICAgc2l6ZV90IGhheXN0YWNrX2xlbjsgLyogS25vd24gbWluaW11bSBs ZW5ndGggb2YgSEFZU1RBQ0suICAqLwotICBib29sIG9rID0gdHJ1ZTsgLyog VHJ1ZSBpZiBORUVETEUgaXMgcHJlZml4IG9mIEhBWVNUQUNLLiAgKi8KLQot ICAvKiBEZXRlcm1pbmUgbGVuZ3RoIG9mIE5FRURMRSwgYW5kIGluIHRoZSBw cm9jZXNzLCBtYWtlIHN1cmUKLSAgICAgSEFZU1RBQ0sgaXMgYXQgbGVhc3Qg YXMgbG9uZyAobm8gcG9pbnQgcHJvY2Vzc2luZyBhbGwgb2YgYSBsb25nCi0g ICAgIE5FRURMRSBpZiBIQVlTVEFDSyBpcyB0b28gc2hvcnQpLiAgKi8KLSAg d2hpbGUgKCpoYXlzdGFjayAmJiAqbmVlZGxlKQotICAgIHsKLSAgICAgIG9r ICY9IChUT0xPV0VSICgodW5zaWduZWQgY2hhcikgKmhheXN0YWNrKQotCSAg ICAgPT0gVE9MT1dFUiAoKHVuc2lnbmVkIGNoYXIpICpuZWVkbGUpKTsKLSAg ICAgIGhheXN0YWNrKys7Ci0gICAgICBuZWVkbGUrKzsKLSAgICB9Ci0gIGlm ICgqbmVlZGxlKQorCisgIC8qIEhhbmRsZSBlbXB0eSBORUVETEUgc3BlY2lh bCBjYXNlLiAgKi8KKyAgaWYgKG5lZWRsZVswXSA9PSAnXDAnKQorICAgIHJl dHVybiAoY2hhciAqKSBoYXlzdGFjazsKKworICAvKiBFbnN1cmUgSEFZU1RB Q0sgbGVuZ3RoIGlzIGF0IGxlYXN0IGFzIGxvbmcgYXMgTkVFRExFIGxlbmd0 aC4KKyAgICAgU2luY2UgYSBtYXRjaCBtYXkgb2NjdXIgZWFybHkgb24gaW4g YSBodWdlIEhBWVNUQUNLLCB1c2Ugc3RybmxlbgorICAgICBhbmQgcmVhZCBh aGVhZCBhIGZldyBjYWNoZWxpbmVzIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5j ZS4gICovCisgIG5lZWRsZV9sZW4gPSBzdHJsZW4gKG5lZWRsZSk7CisgIGhh eXN0YWNrX2xlbiA9IF9fc3RybmxlbiAoaGF5c3RhY2ssIG5lZWRsZV9sZW4g KyAyNTYpOworICBpZiAoaGF5c3RhY2tfbGVuIDwgbmVlZGxlX2xlbikKICAg ICByZXR1cm4gTlVMTDsKLSAgaWYgKG9rKQotICAgIHJldHVybiAoY2hhciAq KSBoYXlzdGFja19zdGFydDsKLSAgbmVlZGxlX2xlbiA9IG5lZWRsZSAtIG5l ZWRsZV9zdGFydDsKLSAgaGF5c3RhY2sgPSBoYXlzdGFja19zdGFydCArIDE7 Ci0gIGhheXN0YWNrX2xlbiA9IG5lZWRsZV9sZW4gLSAxOwogCiAgIC8qIFBl cmZvcm0gdGhlIHNlYXJjaC4gIEFic3RyYWN0IG1lbW9yeSBpcyBjb25zaWRl cmVkIHRvIGJlIGFuIGFycmF5CiAgICAgIG9mICd1bnNpZ25lZCBjaGFyJyB2 YWx1ZXMsIG5vdCBhbiBhcnJheSBvZiAnY2hhcicgdmFsdWVzLiAgU2VlCkBA IC05MCwxMCArODIsMTAgQEAgU1RSQ0FTRVNUUiAoY29uc3QgY2hhciAqaGF5 c3RhY2tfc3RhcnQsIGNvbnN0IGNoYXIgKm5lZWRsZV9zdGFydCkKICAgaWYg KG5lZWRsZV9sZW4gPCBMT05HX05FRURMRV9USFJFU0hPTEQpCiAgICAgcmV0 dXJuIHR3b193YXlfc2hvcnRfbmVlZGxlICgoY29uc3QgdW5zaWduZWQgY2hh ciAqKSBoYXlzdGFjaywKIAkJCQkgaGF5c3RhY2tfbGVuLAotCQkJCSAoY29u c3QgdW5zaWduZWQgY2hhciAqKSBuZWVkbGVfc3RhcnQsCisJCQkJIChjb25z dCB1bnNpZ25lZCBjaGFyICopIG5lZWRsZSwKIAkJCQkgbmVlZGxlX2xlbik7 CiAgIHJldHVybiB0d29fd2F5X2xvbmdfbmVlZGxlICgoY29uc3QgdW5zaWdu ZWQgY2hhciAqKSBoYXlzdGFjaywgaGF5c3RhY2tfbGVuLAotCQkJICAgICAg KGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbmVlZGxlX3N0YXJ0LAorCQkJICAg ICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbmVlZGxlLAogCQkJICAgICAg bmVlZGxlX2xlbik7CiB9CiAKZGlmZiAtLWdpdCBhL3N0cmluZy9zdHJzdHIu YyBiL3N0cmluZy9zdHJzdHIuYwppbmRleCBiM2I1ZGViLi43ZmZiMThhIDEw MDY0NAotLS0gYS9zdHJpbmcvc3Ryc3RyLmMKKysrIGIvc3RyaW5nL3N0cnN0 ci5jCkBAIC0xNiwyNyArMTYsMTcgQEAKICAgIExpY2Vuc2UgYWxvbmcgd2l0 aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKICAgIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKLS8qIFRoaXMgcGFydGlj dWxhciBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBieSBFcmljIEJsYWtl LCAyMDA4LiAgKi8KLQogI2lmbmRlZiBfTElCQwogIyBpbmNsdWRlIDxjb25m aWcuaD4KICNlbmRpZgogCi0vKiBTcGVjaWZpY2F0aW9uIG9mIHN0cnN0ci4g ICovCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlIDxzdGRib29s Lmg+Ci0KLSNpZm5kZWYgX0xJQkMKLSMgZGVmaW5lIF9fYnVpbHRpbl9leHBl Y3QoZXhwciwgdmFsKSAgIChleHByKQotI2VuZGlmCi0KICNkZWZpbmUgUkVU VVJOX1RZUEUgY2hhciAqCiAjZGVmaW5lIEFWQUlMQUJMRShoLCBoX2wsIGos IG5fbCkJCQlcCi0gICghbWVtY2hyICgoaCkgKyAoaF9sKSwgJ1wwJywgKGop ICsgKG5fbCkgLSAoaF9sKSkJXAotICAgJiYgKChoX2wpID0gKGopICsgKG5f bCkpKQotI2RlZmluZSBDSEVDS19FT0wgKDEpCi0jZGVmaW5lIFJFVDBfSUZf MChhKSBpZiAoIWEpIGdvdG8gcmV0MAorICAoKChqKSArIChuX2wpIDw9ICho X2wpKSBcCisgICB8fCAoKGhfbCkgKz0gX19zdHJubGVuICgodm9pZCopKCho KSArIChoX2wpKSwgKG5fbCkgKyA1MTIpLCBcCisgICAgICAgKGopICsgKG5f bCkgPD0gKGhfbCkpKQogI2luY2x1ZGUgInN0ci10d28td2F5LmgiCiAKICN1 bmRlZiBzdHJzdHIKQEAgLTQ1LDQ4ICszNSwxMjggQEAKICNkZWZpbmUgU1RS U1RSIHN0cnN0cgogI2VuZGlmCiAKLS8qIFJldHVybiB0aGUgZmlyc3Qgb2Nj dXJyZW5jZSBvZiBORUVETEUgaW4gSEFZU1RBQ0suICBSZXR1cm4gSEFZU1RB Q0sKLSAgIGlmIE5FRURMRSBpcyBlbXB0eSwgb3RoZXJ3aXNlIE5VTEwgaWYg TkVFRExFIGlzIG5vdCBmb3VuZCBpbgotICAgSEFZU1RBQ0suICAqLworc3Rh dGljIGlubGluZSBjaGFyICoKK3N0cnN0cjIgKGNvbnN0IHVuc2lnbmVkIGNo YXIgKmhzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZSkKK3sKKyAgdWludDMy X3QgaDEgPSAobmVbMF0gPDwgMTYpIHwgbmVbMV07CisgIHVpbnQzMl90IGgy ID0gMDsKKyAgZm9yIChpbnQgYyA9IGhzWzBdOyBoMSAhPSBoMiAmJiBjICE9 IDA7IGMgPSAqKytocykKKyAgICAgIGgyID0gKGgyIDw8IDE2KSB8IGM7Cisg IHJldHVybiBoMSA9PSBoMiA/IChjaGFyICopaHMgLSAyIDogTlVMTDsKK30K Kworc3RhdGljIGlubGluZSBjaGFyICoKK3N0cnN0cjMgKGNvbnN0IHVuc2ln bmVkIGNoYXIgKmhzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZSkKK3sKKyAg dWludDMyX3QgaDEgPSAoKHVpbnQzMl90KW5lWzBdIDw8IDI0KSB8IChuZVsx XSA8PCAxNikgfCAobmVbMl0gPDwgOCk7CisgIHVpbnQzMl90IGgyID0gMDsK KyAgZm9yIChpbnQgYyA9IGhzWzBdOyBoMSAhPSBoMiAmJiBjICE9IDA7IGMg PSAqKytocykKKyAgICAgIGgyID0gKGgyIHwgYykgPDwgODsKKyAgcmV0dXJu IGgxID09IGgyID8gKGNoYXIgKilocyAtIDMgOiBOVUxMOworfQorCisvKiBI YXNoIGNoYXJhY3RlciBwYWlycyBzbyBhIHNtYWxsIHNoaWZ0IHRhYmxlIGNh biBiZSB1c2VkLiAgQWxsIGJpdHMgb2YKKyAgIHBbMF0gYXJlIGluY2x1ZGVk LCBidXQgbm90IGFsbCBiaXRzIGZyb20gcFstMV0uICBTbyBpZiB0d28gZXF1 YWwgaGFzaGVzCisgICBtYXRjaCBvbiBwWy0xXSwgcFswXSBtYXRjaGVzIHRv by4gIEhhc2ggY29sbGlzaW9ucyBhcmUgaGFybWxlc3MgYW5kIHJlc3VsdAor ICAgaW4gc21hbGxlciBzaGlmdHMuICAqLworI2RlZmluZSBoYXNoMihwKSAo KChzaXplX3QpKHApWzBdIC0gKChzaXplX3QpKHApWy0xXSA8PCAzKSkgJSBz aXplb2YgKHNoaWZ0KSkKKworLyogRmFzdCBzdHJzdHIgYWxnb3JpdGhtIHdp dGggZ3VhcmFudGVlZCBsaW5lYXItdGltZSBwZXJmb3JtYW5jZS4KKyAgIFNt YWxsIG5lZWRsZXMgdXAgdG8gc2l6ZSAzIHVzZSBhIGRlZGljYXRlZCBsaW5l YXIgc2VhcmNoLiAgTG9uZ2VyIG5lZWRsZXMKKyAgIHVwIHRvIHNpemUgMjU2 IHVzZSBhIG5vdmVsIG1vZGlmaWVkIEhvcnNwb29sIGFsZ29yaXRobS4gIEl0 IGhhc2hlcyBwYWlycworICAgb2YgY2hhcmFjdGVycyB0byBxdWlja2x5IHNr aXAgcGFzdCBtaXNtYXRjaGVzLiAgVGhlIG1haW4gc2VhcmNoIGxvb3Agb25s eQorICAgZXhpdHMgaWYgdGhlIGxhc3QgMiBjaGFyYWN0ZXJzIG1hdGNoLCBh dm9pZGluZyB1bm5lY2Vzc2FyeSBjYWxscyB0byBtZW1jbXAKKyAgIGFuZCBh bGxvd2luZyBmb3IgYSBsYXJnZXIgc2tpcCBpZiB0aGVyZSBpcyBubyBtYXRj aC4gIEEgc2VsZi1hZGFwdGluZworICAgZmlsdGVyaW5nIGNoZWNrIGlzIHVz ZWQgdG8gcXVpY2tseSBkZXRlY3QgbWlzbWF0Y2hlcyBpbiBsb25nIG5lZWRs ZXMuCisgICBCeSBsaW1pdGluZyB0aGUgbmVlZGxlIGxlbmd0aCB0byAyNTYs IHRoZSBzaGlmdCB0YWJsZSBjYW4gYmUgcmVkdWNlZCB0byA4CisgICBiaXRz IHBlciBlbnRyeSwgbG93ZXJpbmcgcHJlcHJvY2Vzc2luZyBvdmVyaGVhZCBh bmQgbWluaW1pemluZyBjYWNoZSBlZmZlY3RzLgorICAgVGhlIGxpbWl0IGFs c28gaW1wbGllcyB3b3JzdC1jYXNlIHBlcmZvcm1hbmNlIGlzIGxpbmVhci4K KyAgIE5lZWRsZXMgbGFyZ2VyIHRoYW4gMjU2IGNoYXJhY3RlcnMgdXNlIHRo ZSBsaW5lYXItdGltZSBUd28tV2F5IGFsZ29yaXRobS4gICovCiBjaGFyICoK LVNUUlNUUiAoY29uc3QgY2hhciAqaGF5c3RhY2tfc3RhcnQsIGNvbnN0IGNo YXIgKm5lZWRsZV9zdGFydCkKK1NUUlNUUiAoY29uc3QgY2hhciAqaGF5c3Rh Y2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKIHsKLSAgY29uc3QgY2hhciAqaGF5 c3RhY2sgPSBoYXlzdGFja19zdGFydDsKLSAgY29uc3QgY2hhciAqbmVlZGxl ID0gbmVlZGxlX3N0YXJ0OwotICBzaXplX3QgbmVlZGxlX2xlbjsgLyogTGVu Z3RoIG9mIE5FRURMRS4gICovCi0gIHNpemVfdCBoYXlzdGFja19sZW47IC8q IEtub3duIG1pbmltdW0gbGVuZ3RoIG9mIEhBWVNUQUNLLiAgKi8KLSAgYm9v bCBvayA9IHRydWU7IC8qIFRydWUgaWYgTkVFRExFIGlzIHByZWZpeCBvZiBI QVlTVEFDSy4gICovCi0KLSAgLyogRGV0ZXJtaW5lIGxlbmd0aCBvZiBORUVE TEUsIGFuZCBpbiB0aGUgcHJvY2VzcywgbWFrZSBzdXJlCi0gICAgIEhBWVNU QUNLIGlzIGF0IGxlYXN0IGFzIGxvbmcgKG5vIHBvaW50IHByb2Nlc3Npbmcg YWxsIG9mIGEgbG9uZwotICAgICBORUVETEUgaWYgSEFZU1RBQ0sgaXMgdG9v IHNob3J0KS4gICovCi0gIHdoaWxlICgqaGF5c3RhY2sgJiYgKm5lZWRsZSkK LSAgICBvayAmPSAqaGF5c3RhY2srKyA9PSAqbmVlZGxlKys7Ci0gIGlmICgq bmVlZGxlKQorICBjb25zdCB1bnNpZ25lZCBjaGFyICpocyA9IChjb25zdCB1 bnNpZ25lZCBjaGFyICopIGhheXN0YWNrOworICBjb25zdCB1bnNpZ25lZCBj aGFyICpuZSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5lZWRsZTsKKwor ICAvKiBIYW5kbGUgc2hvcnQgbmVlZGxlIHNwZWNpYWwgY2FzZXMgZmlyc3Qu ICAqLworICBpZiAobmVbMF0gPT0gJ1wwJykKKyAgICByZXR1cm4gKGNoYXIg KiloczsKKyAgaHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXN0cmNociAo KGNvbnN0IGNoYXIqKWhzLCBuZVswXSk7CisgIGlmIChocyA9PSBOVUxMIHx8 IG5lWzFdID09ICdcMCcpCisgICAgcmV0dXJuIChjaGFyKiloczsKKyAgaWYg KG5lWzJdID09ICdcMCcpCisgICAgcmV0dXJuIHN0cnN0cjIgKGhzLCBuZSk7 CisgIGlmIChuZVszXSA9PSAnXDAnKQorICAgIHJldHVybiBzdHJzdHIzICho cywgbmUpOworCisgIC8qIEVuc3VyZSBoYXlzdGFjayBsZW5ndGggaXMgYXQg bGVhc3QgYXMgbG9uZyBhcyBuZWVkbGUgbGVuZ3RoLgorICAgICBTaW5jZSBh IG1hdGNoIG1heSBvY2N1ciBlYXJseSBvbiBpbiBhIGh1Z2UgaGF5c3RhY2ss IHVzZSBzdHJubGVuCisgICAgIGFuZCByZWFkIGFoZWFkIGEgZmV3IGNhY2hl bGluZXMgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLiAgKi8KKyAgc2l6ZV90 IG5lX2xlbiA9IHN0cmxlbiAoKGNvbnN0IGNoYXIqKW5lKTsKKyAgc2l6ZV90 IGhzX2xlbiA9IF9fc3RybmxlbiAoKGNvbnN0IGNoYXIqKWhzLCBuZV9sZW4g fCA1MTIpOworICBpZiAoaHNfbGVuIDwgbmVfbGVuKQogICAgIHJldHVybiBO VUxMOwotICBpZiAob2spCi0gICAgcmV0dXJuIChjaGFyICopIGhheXN0YWNr X3N0YXJ0OwotCi0gIC8qIFJlZHVjZSB0aGUgc2l6ZSBvZiBoYXlzdGFjayB1 c2luZyBzdHJjaHIsIHNpbmNlIGl0IGhhcyBhIHNtYWxsZXIKLSAgICAgbGlu ZWFyIGNvZWZmaWNpZW50IHRoYW4gdGhlIFR3by1XYXkgYWxnb3JpdGhtLiAg Ki8KLSAgbmVlZGxlX2xlbiA9IG5lZWRsZSAtIG5lZWRsZV9zdGFydDsKLSAg aGF5c3RhY2sgPSBzdHJjaHIgKGhheXN0YWNrX3N0YXJ0ICsgMSwgKm5lZWRs ZV9zdGFydCk7Ci0gIGlmICghaGF5c3RhY2sgfHwgX19idWlsdGluX2V4cGVj dCAobmVlZGxlX2xlbiA9PSAxLCAwKSkKLSAgICByZXR1cm4gKGNoYXIgKikg aGF5c3RhY2s7Ci0gIG5lZWRsZSAtPSBuZWVkbGVfbGVuOwotICBoYXlzdGFj a19sZW4gPSAoaGF5c3RhY2sgPiBoYXlzdGFja19zdGFydCArIG5lZWRsZV9s ZW4gPyAxCi0JCSAgOiBuZWVkbGVfbGVuICsgaGF5c3RhY2tfc3RhcnQgLSBo YXlzdGFjayk7Ci0KLSAgLyogUGVyZm9ybSB0aGUgc2VhcmNoLiAgQWJzdHJh Y3QgbWVtb3J5IGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gYXJyYXkKLSAgICAg b2YgJ3Vuc2lnbmVkIGNoYXInIHZhbHVlcywgbm90IGFuIGFycmF5IG9mICdj aGFyJyB2YWx1ZXMuICBTZWUKLSAgICAgSVNPIEMgOTkgc2VjdGlvbiA2LjIu Ni4xLiAgKi8KLSAgaWYgKG5lZWRsZV9sZW4gPCBMT05HX05FRURMRV9USFJF U0hPTEQpCi0gICAgcmV0dXJuIHR3b193YXlfc2hvcnRfbmVlZGxlICgoY29u c3QgdW5zaWduZWQgY2hhciAqKSBoYXlzdGFjaywKLQkJCQkgaGF5c3RhY2tf bGVuLAotCQkJCSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBuZWVkbGUsIG5l ZWRsZV9sZW4pOwotICByZXR1cm4gdHdvX3dheV9sb25nX25lZWRsZSAoKGNv bnN0IHVuc2lnbmVkIGNoYXIgKikgaGF5c3RhY2ssIGhheXN0YWNrX2xlbiwK LQkJCSAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5lZWRsZSwgbmVl ZGxlX2xlbik7CisKKyAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgbWF0 Y2guICBUaGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlIHNpbmNlIHdlCisgICAg IGF2b2lkIGluaXRpYWxpemF0aW9uIG92ZXJoZWFkcy4gICovCisgIGlmICht ZW1jbXAgKGhzLCBuZSwgbmVfbGVuKSA9PSAwKQorICAgIHJldHVybiAoY2hh ciAqKSBoczsKKworICAvKiBVc2UgVHdvLVdheSBhbGdvcml0aG0gZm9yIHZl cnkgbG9uZyBuZWVkbGVzLiAgKi8KKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkg KG5lX2xlbiA+IDI1NikpCisgICAgcmV0dXJuIHR3b193YXlfbG9uZ19uZWVk bGUgKGhzLCBoc19sZW4sIG5lLCBuZV9sZW4pOworCisgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmVuZCA9IGhzICsgaHNfbGVuIC0gbmVfbGVuOworICB1aW50 OF90IHNoaWZ0WzI1Nl07CisgIHNpemVfdCB0bXAsIHNoaWZ0MTsKKyAgc2l6 ZV90IG0xID0gbmVfbGVuIC0gMTsKKyAgc2l6ZV90IG9mZnNldCA9IDA7CisK KyAgLyogSW5pdGlhbGl6ZSBiYWQgY2hhcmFjdGVyIHNoaWZ0IGhhc2ggdGFi bGUuICAqLworICBtZW1zZXQgKHNoaWZ0LCAwLCBzaXplb2YgKHNoaWZ0KSk7 CisgIGZvciAoaW50IGkgPSAxOyBpIDwgbTE7IGkrKykKKyAgICBzaGlmdFto YXNoMiAobmUgKyBpKV0gPSBpOworICAvKiBTaGlmdDEgaXMgdGhlIGFtb3Vu dCB3ZSBjYW4gc2tpcCBhZnRlciBtYXRjaGluZyB0aGUgaGFzaCBvZiB0aGUK KyAgICAgbmVlZGxlIGVuZCBidXQgbm90IHRoZSBmdWxsIG5lZWRsZS4gICov CisgIHNoaWZ0MSA9IG0xIC0gc2hpZnRbaGFzaDIgKG5lICsgbTEpXTsKKyAg c2hpZnRbaGFzaDIgKG5lICsgbTEpXSA9IG0xOworCisgIHdoaWxlICgxKQor ICAgIHsKKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChocyA+IGVuZCkp CisJeworCSAgZW5kICs9IF9fc3RybmxlbiAoKGNvbnN0IGNoYXIqKWVuZCAr IG0xICsgMSwgMjA0OCk7CisJICBpZiAoaHMgPiBlbmQpCisJICAgIHJldHVy biBOVUxMOworCX0KKworICAgICAgLyogU2tpcCBwYXN0IGNoYXJhY3RlciBw YWlycyBub3QgaW4gdGhlIG5lZWRsZS4gICovCisgICAgICBkbworCXsKKwkg IGhzICs9IG0xOworCSAgdG1wID0gc2hpZnRbaGFzaDIgKGhzKV07CisJfQor ICAgICAgd2hpbGUgKHRtcCA9PSAwICYmIGhzIDw9IGVuZCk7CisKKyAgICAg IC8qIElmIHRoZSBtYXRjaCBpcyBub3QgYXQgdGhlIGVuZCBvZiB0aGUgbmVl ZGxlLCBzaGlmdCB0byB0aGUgZW5kCisJIGFuZCBjb250aW51ZSB1bnRpbCB3 ZSBtYXRjaCB0aGUgaGFzaCBvZiB0aGUgbmVlZGxlIGVuZC4gICovCisgICAg ICBocyAtPSB0bXA7CisgICAgICBpZiAodG1wIDwgbTEpCisJY29udGludWU7 CisKKyAgICAgIC8qIEhhc2ggb2YgdGhlIGxhc3QgMiBjaGFyYWN0ZXJzIG1h dGNoZXMuICBJZiB0aGUgbmVlZGxlIGlzIGxvbmcsCisJIHRyeSB0byBxdWlj a2x5IGZpbHRlciBvdXQgbWlzbWF0Y2hlcy4gICovCisgICAgICBpZiAobTEg PCAxNSB8fCBtZW1jbXAgKGhzICsgb2Zmc2V0LCBuZSArIG9mZnNldCwgOCkg PT0gMCkKKwl7CisJICBpZiAobWVtY21wIChocywgbmUsIG0xKSA9PSAwKQor CSAgICByZXR1cm4gKHZvaWQgKikgaHM7CisKKwkgIC8qIEFkanVzdCBmaWx0 ZXIgb2Zmc2V0IHdoZW4gaXQgZG9lc24ndCBmaW5kIHRoZSBtaXNtYXRjaC4g ICovCisJICBvZmZzZXQgPSAob2Zmc2V0ID49IDggPyBvZmZzZXQgOiBtMSkg LSA4OworCX0KKworICAgICAgLyogU2tpcCBiYXNlZCBvbiBtYXRjaGluZyB0 aGUgaGFzaCBvZiB0aGUgbmVlZGxlIGVuZC4gICovCisgICAgICBocyArPSBz aGlmdDE7CisgICAgfQogfQogbGliY19oaWRkZW5fYnVpbHRpbl9kZWYgKHN0 cnN0cikKLQotI3VuZGVmIExPTkdfTkVFRExFX1RIUkVTSE9MRApkaWZmIC0t Z2l0IGEvc3RyaW5nL3Rlc3Qtc3RyY2FzZXN0ci5jIGIvc3RyaW5nL3Rlc3Qt c3RyY2FzZXN0ci5jCmluZGV4IDJiMGEzOGUuLjliMTA4OGQgMTAwNjQ0Ci0t LSBhL3N0cmluZy90ZXN0LXN0cmNhc2VzdHIuYworKysgYi9zdHJpbmcvdGVz dC1zdHJjYXNlc3RyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgU1RS Q0FTRVNUUiBzaW1wbGVfc3RyY2FzZXN0cgogI2RlZmluZSBOT19BTElBUwog I2RlZmluZSBfX3N0cm5jYXNlY21wIHN0cm5jYXNlY21wCisjZGVmaW5lIF9f c3RybmxlbiBzdHJubGVuCiAjaW5jbHVkZSAic3RyY2FzZXN0ci5jIgogCiAK ZGlmZiAtLWdpdCBhL3N0cmluZy90ZXN0LXN0cnN0ci5jIGIvc3RyaW5nL3Rl c3Qtc3Ryc3RyLmMKaW5kZXggYWNmNmZmOC4uNTg2MWIwMSAxMDA2NDQKLS0t IGEvc3RyaW5nL3Rlc3Qtc3Ryc3RyLmMKKysrIGIvc3RyaW5nL3Rlc3Qtc3Ry c3RyLmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2RlZmluZSBTVFJTVFIgc2lt cGxlX3N0cnN0cgogI2RlZmluZSBsaWJjX2hpZGRlbl9idWlsdGluX2RlZihh cmcpIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgX19zdHJubGVuIHN0cm5sZW4K ICNpbmNsdWRlICJzdHJzdHIuYyIKIAogCkBAIC0xNTAsNiArMTUxLDMyIEBA IGNoZWNrMiAodm9pZCkKICAgICB9CiB9CiAKKyNkZWZpbmUgTiAxMDI0CisK K3N0YXRpYyB2b2lkCitwcjIzNjM3ICh2b2lkKQoreworICBjaGFyICpoID0g KGNoYXIqKSBidWYxOworICBjaGFyICpuID0gKGNoYXIqKSBidWYyOworCisg IGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIG5b aV0gPSAneCc7CisgICAgICBoW2ldID0gJyAnOworICAgICAgaFtpICsgTl0g PSAneCc7CisgICAgfQorCisgIG5bTl0gPSAnXDAnOworICBoW04gKiAyXSA9 ICdcMCc7CisKKyAgLyogRW5zdXJlIHdlIGRvbid0IG1hdGNoIGF0IHRoZSBm aXJzdCAneCcuICAqLworICBoWzBdID0gJ3gnOworCisgIGNoYXIgKmV4cF9y ZXN1bHQgPSBzdHVwaWRfc3Ryc3RyIChoLCBuKTsKKyAgRk9SX0VBQ0hfSU1Q TCAoaW1wbCwgMCkKKyAgICBjaGVja19yZXN1bHQgKGltcGwsIGgsIG4sIGV4 cF9yZXN1bHQpOworfQorCiBzdGF0aWMgaW50CiB0ZXN0X21haW4gKHZvaWQp CiB7CkBAIC0xNTcsNiArMTg0LDcgQEAgdGVzdF9tYWluICh2b2lkKQogCiAg IGNoZWNrMSAoKTsKICAgY2hlY2syICgpOworICBwcjIzNjM3ICgpOwogCiAg IHByaW50ZiAoIiUyM3MiLCAiIik7CiAgIEZPUl9FQUNIX0lNUEwgKGltcGws IDApCkBAIC0yMDEsNiArMjI5LDkgQEAgdGVzdF9tYWluICh2b2lkKQogCWRv X3Rlc3QgKDE1LCA5LCBobGVuLCBrbGVuLCAxKTsKIAlkb190ZXN0ICgxNSwg MTUsIGhsZW4sIGtsZW4sIDApOwogCWRvX3Rlc3QgKDE1LCAxNSwgaGxlbiwg a2xlbiwgMSk7CisKKwlkb190ZXN0ICgxNSwgMTUsIGhsZW4gKyBrbGVuICog NCwga2xlbiAqIDQsIDApOworCWRvX3Rlc3QgKDE1LCAxNSwgaGxlbiArIGts ZW4gKiA0LCBrbGVuICogNCwgMSk7CiAgICAgICB9CiAKICAgZG9fdGVzdCAo MCwgMCwgcGFnZV9zaXplIC0gMSwgMTYsIDApOwo= --_002_VI1PR0801MB2127304134E8527B8CE2DDB483B30VI1PR0801MB2127_--