From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15596 invoked by alias); 13 Sep 2019 16:24:29 -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 15562 invoked by uid 89); 13 Sep 2019 16:24:27 -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.2 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,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.2 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,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: EUR01-DB5-obe.outbound.protection.outlook.com Received: from mail-eopbgr150054.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (40.107.15.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 13 Sep 2019 16:24:19 +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=IXWlMMvj2rMzFdLozuwF2iAHMPOfgEeIC19tNR60LOU=; b=SfpfkQRyKejY5GsWfolYQ4jfNmqGzl8GLOWvdCCtyo1u8Cvo6tBsfJH1NNd04Mtn5APttWcsBif63a7/mhn6k0tHlGbsIi5NNyTth9hmj/yCEMvr85Gwn5YQV0NSbc8fJVw7QVY5Rf0xTTfowVDJ+tqYWqYFjtRG33u3GMSmA9o= Received: from VI1PR08CA0110.eurprd08.prod.outlook.com (2603:10a6:800:d4::12) by AM0PR08MB4051.eurprd08.prod.outlook.com (2603:10a6:208:125::32) 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:24:01 +0000 Received: from DB5EUR03FT059.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::208) by VI1PR08CA0110.outlook.office365.com (2603:10a6:800:d4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13 via Frontend Transport; Fri, 13 Sep 2019 16:24:01 +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 DB5EUR03FT059.mail.protection.outlook.com (10.152.21.175) 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:24:00 +0000 Received: ("Tessian outbound d5a1f2820a4f:v31"); Fri, 13 Sep 2019 16:24:00 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 8a078d51d561234e X-CR-MTA-TID: 64aa7808 Received: from 65accd639d35.1 (ip-172-16-0-2.eu-west-1.compute.internal [104.47.4.52]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id 908DC1BD-7231-4F4B-847E-1B1F4853C82F.1; Fri, 13 Sep 2019 16:23:55 +0000 Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-am5eur02lp2052.outbound.protection.outlook.com [104.47.4.52]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 65accd639d35.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384); Fri, 13 Sep 2019 16:23:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nPZY+gEAB/0yFBPdhk5KkOF19DACg3TRZoyrs04697KhCqa76oLWD0SyP9wLwbxkvJC1udgEhY/3fTL0FLFO1AYcOlWXrycYyOdwL/Xg7HCxNzXpncmUop/iSPfPGcRIJ8D3HkDDGgy1lbH5H77b0k10eLAwyHofcAJGOV9q0zSlL5V8ii4Vy5+qK3Os4KNJTtqhSZ1JB8Z5NVRB7rkjpmShBtQFdVcEb4XRu8MjVtbZF3G4Hh+J99RAfcxD9fp2xGU0n0AkTaHHWnh1AT9q6M2Jxuv7DHpvYmRaGEwMzemQvBsZ9ArJjjiwE2qyqTje55FWhwLDnUHjQFnXSE0hVg== 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=IXWlMMvj2rMzFdLozuwF2iAHMPOfgEeIC19tNR60LOU=; b=ktr+rcERgROGujscdM8LruDbSFuiP+FkrhJpEhSeYbFF5TGbDYjHPuuiYm4XSX/quHW+WDLcDenRNaKrXzS9l5xCed+28WcxrqzFEx/XOItacUbZ99G+Us+h0yqJGUIvwxJKVGeemqL2lBlUdh3zm3/+qXXGGhoiae6bJBvjQcLUUECDPYbNDbv9Rr2n+oMVc2s8QzIKVALHA6U59TflhraN2pAccUQc0OS/40bX4EnMqOvsET2neXBmAUgSWtxMI5Zf4ROarM7TIS26V4MfNQnV+1YA5nAl5UBP5v759vLqG5BGU4t9Nnp/xJOCEcggfW+cAvt5146xkqv0/vTvpA== 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=IXWlMMvj2rMzFdLozuwF2iAHMPOfgEeIC19tNR60LOU=; b=SfpfkQRyKejY5GsWfolYQ4jfNmqGzl8GLOWvdCCtyo1u8Cvo6tBsfJH1NNd04Mtn5APttWcsBif63a7/mhn6k0tHlGbsIi5NNyTth9hmj/yCEMvr85Gwn5YQV0NSbc8fJVw7QVY5Rf0xTTfowVDJ+tqYWqYFjtRG33u3GMSmA9o= 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:23:53 +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:23:53 +0000 From: Wilco Dijkstra To: "libc-stable@sourceware.org" CC: nd Subject: [2.29 COMMITTED] Backport strstr/memmem performance improvements Thread-Topic: [2.29 COMMITTED] Backport strstr/memmem performance improvements Thread-Index: AQHVak9Ky+5TikuN6kKXsua00PjuHqcp2yWo Date: Tue, 01 Jan 2019 00:00:00 -0000 Message-ID: References: In-Reply-To: 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: e9da2ddb-265e-4050-c23a-08d73866c8f9 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:|AM0PR08MB4051: 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)(11346002)(446003)(476003)(5640700003)(4326008)(6436002)(316002)(99286004)(2940100002)(6506007)(86362001)(53936002)(102836004)(26005)(186003)(25786009)(66066001)(7696005)(55016002)(9686003)(6306002)(76176011)(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: QEl9PamTJ1HRSGVhRpKrrkmAIqirfBSnv+7WF/PyCV9KEPMve9dnDc0IIm4bJOyDhtNHPIqJDGycc5GtcgmO+qTHKDiENxpcX1dSb15xgAsABJBX1hLwuDd3ZjXKVL9Nsy3u3Tjw2s/8dvdXQjjO7IQ4Ds5FdlxoyA1gYkIQNxp2Oe81SHzMTER0MEpJ5QAH0kZkxSEDmA9KEaJvSbuiKkJIjlL4Mx179MgWmXRMzF3nhFbpTKVrDz/1uz56ZCLpGlaymkubGsQ1Zq7b+zhI7HBt0iVQQ7nXD0Y93OGjr7aPtmWOR1haLx/CV1DwtVPLDizqrZJ1VD+DKX7+q4jxJX3yAm4SFapJIdq4B/SH5Xi1zHns2IgPWrbDppoSEYdDYow3ur+mz0flY9H4YmXpLvPZWtzpnyHLXTwfDwk7xhY= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_VI1PR0801MB212795F7B1288009FDCBE8A383B30VI1PR0801MB2127_" 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: DB5EUR03FT059.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)(396003)(39860400002)(376002)(346002)(136003)(189003)(199004)(99936001)(7736002)(14454004)(71190400001)(22756006)(2906002)(486006)(2351001)(2940100002)(8676002)(7696005)(4326008)(11346002)(99286004)(336012)(63350400001)(81166006)(16586007)(81156014)(316002)(446003)(66066001)(356004)(5640700003)(76176011)(55016002)(76130400001)(3846002)(6306002)(70206006)(66616009)(70586007)(74316002)(235185007)(6116002)(9686003)(6916009)(2476003)(26005)(126002)(476003)(305945005)(14444005)(5024004)(102836004)(33656002)(2501003)(5660300002)(186003)(6506007)(52536014)(568964002)(26826003)(25786009)(508600001)(86362001)(8936002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM0PR08MB4051;H:64aa7808-outbound-1.mta.getcheckrecipient.com;FPR:;SPF:TempError;LANG:en;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;MX:1;A:1; X-MS-Office365-Filtering-Correlation-Id-Prvs: 38f9eadf-9210-4216-bb60-08d73866c4c8 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:AM0PR08MB4051; NoDisclaimer: True X-Forefront-PRVS: 0159AC2B97 X-Microsoft-Antispam-Message-Info: OKqj/K0+KjGf3IfU5XjjNJdKUrs51i+IMVJ5gs0425KqYa1YR1s0BP+q0lIcZ1Yd8b8KZbk28l1y8J07JWGVvx7EirYntPHv+hZtIKxsua6ygZQ6ji4AoDVrylEdx37nbPi9KM86TGOLDv6TXC/jEBybTj+bLsRTNCYm/XA66KJBT5mXdFi8LyRMCvdZTvNZByO8/15tQsKVYCy+mtFvBdYAr6xqw33qAGOWVwvB0XrU8w4xKtuCt2/dmzhuPEvbxFyhwRhZxyy0hY9Do1IbNd4UMbYHwpkwTDSYyO8M+igTANsqAqIoEnxFSD/TqyvgpBkgktV3YrCL17jYES2trVZk7qIka80P8PMHtTLvWAGQJDfxxiMKCWWxGmsNpNWSKb5S50CMeTEhWezXbI0jQB+wAiv2uwU3SVDpVCxC9v8= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2019 16:24:00.5114 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e9da2ddb-265e-4050-c23a-08d73866c8f9 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: AM0PR08MB4051 X-SW-Source: 2019-09/txt/msg00016.txt.bz2 --_002_VI1PR0801MB212795F7B1288009FDCBE8A383B30VI1PR0801MB2127_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 3008 commit 91372f000197deb148fbd6d6b5a8d93327119c3e Author: Wilco Dijkstra Date: Wed Jun 12 11:42:34 2019 +0100 Improve performance of memmem =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 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 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 The performance gain is 6.6 times on English text on AArch64 using rand= om needles with average size 8. =20=20=20 Tested against GLIBC testsuite and randomized tests. =20=20=20 Reviewed-by: Szabolcs Nagy =20=20=20 * string/memmem.c (__memmem): Rewrite to improve performance. =20=20=20 (cherry picked from commit 680942b0167715e123d934b609060cd382f8e39f) commit 1ad15e008cca9a7189c26d756d20d07acf4855df Author: Wilco Dijkstra Date: Wed Jun 12 11:38:52 2019 +0100 Improve performance of strstr =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 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 Small needles up to size 3 use a dedicated linear search. Very long ne= edles use the Two-Way algorithm. =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 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 Reviewed-by: Szabolcs Nagy =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 (cherry picked from commit 5e0a7ecb6629461b28adc1a5aabcc0ede122f201) --_002_VI1PR0801MB212795F7B1288009FDCBE8A383B30VI1PR0801MB2127_ Content-Type: text/x-patch; name="strstr1.patch" Content-Description: strstr1.patch Content-Disposition: attachment; filename="strstr1.patch"; size=14812; creation-date="Fri, 13 Sep 2019 16:23:44 GMT"; modification-date="Fri, 13 Sep 2019 16:23:44 GMT" Content-Transfer-Encoding: base64 Content-length: 20082 ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4NGFj YjUyLi44YmEzNTQ1IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hh bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDktMTMgIFdpbGNvIERp amtzdHJhICA8d2RpamtzdHJAYXJtLmNvbT4KKworCSogc3RyaW5nL21lbW1l bS5jIChfX21lbW1lbSk6IFJld3JpdGUgdG8gaW1wcm92ZSBwZXJmb3JtYW5j ZS4KKworMjAxOS0wNi0xMiAgV2lsY28gRGlqa3N0cmEgIDx3ZGlqa3N0ckBh cm0uY29tPgorCisJKiBzdHJpbmcvc3RyLXR3by13YXkuaCAodHdvX3dheV9z aG9ydF9uZWVkbGUpOiBBZGQgaW5saW5lIHRvIGF2b2lkCisJd2FybmluZy4K KwkodHdvX3dheV9sb25nX25lZWRsZSk6IEJsb2NrIGlubGluaW5nLgorCSog c3RyaW5nL3N0cnN0ci5jIChzdHJzdHIyKTogQWRkIG5ldyBmdW5jdGlvbi4K Kwkoc3Ryc3RyMyk6IExpa2V3aXNlLgorCShTVFJTVFIpOiBDb21wbGV0ZWx5 IHJld3JpdGUgc3Ryc3RyIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisKIDIw MTktMDktMDMgIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5u ZXQ+CiAKIAkqIHN5c2RlcHMvYWxwaGEvZnB1L2xpYm0tdGVzdC11bHBzOiBS ZWdlbmVyYXRlZCB1c2luZyBHQ0MgOS4yLgpkaWZmIC0tZ2l0IGEvc3RyaW5n L21lbW1lbS5jIGIvc3RyaW5nL21lbW1lbS5jCmluZGV4IDRiZjczM2YuLjgz ZWU3NWUgMTAwNjQ0Ci0tLSBhL3N0cmluZy9tZW1tZW0uYworKysgYi9zdHJp bmcvbWVtbWVtLmMKQEAgLTE1LDE3ICsxNSwxMyBAQAogICAgTGljZW5zZSBh bG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQogICAg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIAotLyogVGhp cyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIGJ5IEVy aWMgQmxha2UsIDIwMDguICAqLwotCiAjaWZuZGVmIF9MSUJDCiAjIGluY2x1 ZGUgPGNvbmZpZy5oPgogI2VuZGlmCiAKLS8qIFNwZWNpZmljYXRpb24gb2Yg bWVtbWVtLiAgKi8KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2lmbmRlZiBf TElCQwotIyBkZWZpbmUgX19idWlsdGluX2V4cGVjdChleHByLCB2YWwpICAg KGV4cHIpCiAjIGRlZmluZSBfX21lbW1lbQltZW1tZW0KICNlbmRpZgogCkBA IC0zNiw1MSArMzIsOTggQEAKIAogI3VuZGVmIG1lbW1lbQogCi0vKiBSZXR1 cm4gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgTkVFRExFIGluIEhBWVNUQUNL LiAgUmV0dXJuIEhBWVNUQUNLCi0gICBpZiBORUVETEVfTEVOIGlzIDAsIG90 aGVyd2lzZSBOVUxMIGlmIE5FRURMRSBpcyBub3QgZm91bmQgaW4KLSAgIEhB WVNUQUNLLiAgKi8KKy8qIEhhc2ggY2hhcmFjdGVyIHBhaXJzIHNvIGEgc21h bGwgc2hpZnQgdGFibGUgY2FuIGJlIHVzZWQuICBBbGwgYml0cyBvZgorICAg cFswXSBhcmUgaW5jbHVkZWQsIGJ1dCBub3QgYWxsIGJpdHMgZnJvbSBwWy0x XS4gIFNvIGlmIHR3byBlcXVhbCBoYXNoZXMKKyAgIG1hdGNoIG9uIHBbLTFd LCBwWzBdIG1hdGNoZXMgdG9vLiAgSGFzaCBjb2xsaXNpb25zIGFyZSBoYXJt bGVzcyBhbmQgcmVzdWx0CisgICBpbiBzbWFsbGVyIHNoaWZ0cy4gICovCisj ZGVmaW5lIGhhc2gyKHApICgoKHNpemVfdCkocClbMF0gLSAoKHNpemVfdCko cClbLTFdIDw8IDMpKSAlIHNpemVvZiAoc2hpZnQpKQorCisvKiBGYXN0IG1l bW1lbSBhbGdvcml0aG0gd2l0aCBndWFyYW50ZWVkIGxpbmVhci10aW1lIHBl cmZvcm1hbmNlLgorICAgU21hbGwgbmVlZGxlcyB1cCB0byBzaXplIDIgdXNl IGEgZGVkaWNhdGVkIGxpbmVhciBzZWFyY2guICBMb25nZXIgbmVlZGxlcwor ICAgdXAgdG8gc2l6ZSAyNTYgdXNlIGEgbm92ZWwgbW9kaWZpZWQgSG9yc3Bv b2wgYWxnb3JpdGhtLiAgSXQgaGFzaGVzIHBhaXJzCisgICBvZiBjaGFyYWN0 ZXJzIHRvIHF1aWNrbHkgc2tpcCBwYXN0IG1pc21hdGNoZXMuICBUaGUgbWFp biBzZWFyY2ggbG9vcCBvbmx5CisgICBleGl0cyBpZiB0aGUgbGFzdCAyIGNo YXJhY3RlcnMgbWF0Y2gsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNhbGxzIHRv IG1lbWNtcAorICAgYW5kIGFsbG93aW5nIGZvciBhIGxhcmdlciBza2lwIGlm IHRoZXJlIGlzIG5vIG1hdGNoLiAgQSBzZWxmLWFkYXB0aW5nCisgICBmaWx0 ZXJpbmcgY2hlY2sgaXMgdXNlZCB0byBxdWlja2x5IGRldGVjdCBtaXNtYXRj aGVzIGluIGxvbmcgbmVlZGxlcy4KKyAgIEJ5IGxpbWl0aW5nIHRoZSBuZWVk bGUgbGVuZ3RoIHRvIDI1NiwgdGhlIHNoaWZ0IHRhYmxlIGNhbiBiZSByZWR1 Y2VkIHRvIDgKKyAgIGJpdHMgcGVyIGVudHJ5LCBsb3dlcmluZyBwcmVwcm9j ZXNzaW5nIG92ZXJoZWFkIGFuZCBtaW5pbWl6aW5nIGNhY2hlIGVmZmVjdHMu CisgICBUaGUgbGltaXQgYWxzbyBpbXBsaWVzIHdvcnN0LWNhc2UgcGVyZm9y bWFuY2UgaXMgbGluZWFyLgorICAgTmVlZGxlcyBsYXJnZXIgdGhhbiAyNTYg Y2hhcmFjdGVycyB1c2UgdGhlIGxpbmVhci10aW1lIFR3by1XYXkgYWxnb3Jp dGhtLiAgKi8KIHZvaWQgKgotX19tZW1tZW0gKGNvbnN0IHZvaWQgKmhheXN0 YWNrX3N0YXJ0LCBzaXplX3QgaGF5c3RhY2tfbGVuLAotCSAgY29uc3Qgdm9p ZCAqbmVlZGxlX3N0YXJ0LCBzaXplX3QgbmVlZGxlX2xlbikKK19fbWVtbWVt IChjb25zdCB2b2lkICpoYXlzdGFjaywgc2l6ZV90IGhzX2xlbiwKKwkgIGNv bnN0IHZvaWQgKm5lZWRsZSwgc2l6ZV90IG5lX2xlbikKIHsKLSAgLyogQWJz dHJhY3QgbWVtb3J5IGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gYXJyYXkgb2Yg J3Vuc2lnbmVkIGNoYXInIHZhbHVlcywKLSAgICAgbm90IGFuIGFycmF5IG9m ICdjaGFyJyB2YWx1ZXMuICBTZWUgSVNPIEMgOTkgc2VjdGlvbiA2LjIuNi4x LiAgKi8KLSAgY29uc3QgdW5zaWduZWQgY2hhciAqaGF5c3RhY2sgPSAoY29u c3QgdW5zaWduZWQgY2hhciAqKSBoYXlzdGFja19zdGFydDsKLSAgY29uc3Qg dW5zaWduZWQgY2hhciAqbmVlZGxlID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIg KikgbmVlZGxlX3N0YXJ0OwotCi0gIGlmIChuZWVkbGVfbGVuID09IDApCi0g ICAgLyogVGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGVtcHR5IHN0cmlu ZyBpcyBkZWVtZWQgdG8gb2NjdXIgYXQKLSAgICAgICB0aGUgYmVnaW5uaW5n IG9mIHRoZSBzdHJpbmcuICAqLwotICAgIHJldHVybiAodm9pZCAqKSBoYXlz dGFjazsKLQotICAvKiBTYW5pdHkgY2hlY2ssIG90aGVyd2lzZSB0aGUgbG9v cCBtaWdodCBzZWFyY2ggdGhyb3VnaCB0aGUgd2hvbGUKLSAgICAgbWVtb3J5 LiAgKi8KLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKGhheXN0YWNrX2xlbiA8 IG5lZWRsZV9sZW4pKQorICBjb25zdCB1bnNpZ25lZCBjaGFyICpocyA9IChj b25zdCB1bnNpZ25lZCBjaGFyICopIGhheXN0YWNrOworICBjb25zdCB1bnNp Z25lZCBjaGFyICpuZSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5lZWRs ZTsKKworICBpZiAobmVfbGVuID09IDApCisgICAgcmV0dXJuICh2b2lkICop IGhzOworICBpZiAobmVfbGVuID09IDEpCisgICAgcmV0dXJuICh2b2lkICop IG1lbWNociAoaHMsIG5lWzBdLCBoc19sZW4pOworCisgIC8qIEVuc3VyZSBo YXlzdGFjayBsZW5ndGggaXMgPj0gbmVlZGxlIGxlbmd0aC4gICovCisgIGlm IChoc19sZW4gPCBuZV9sZW4pCiAgICAgcmV0dXJuIE5VTEw7CiAKLSAgLyog VXNlIG9wdGltaXphdGlvbnMgaW4gbWVtY2hyIHdoZW4gcG9zc2libGUsIHRv IHJlZHVjZSB0aGUgc2VhcmNoCi0gICAgIHNpemUgb2YgaGF5c3RhY2sgdXNp bmcgYSBsaW5lYXIgYWxnb3JpdGhtIHdpdGggYSBzbWFsbGVyCi0gICAgIGNv ZWZmaWNpZW50LiAgSG93ZXZlciwgYXZvaWQgbWVtY2hyIGZvciBsb25nIG5l ZWRsZXMsIHNpbmNlIHdlCi0gICAgIGNhbiBvZnRlbiBhY2hpZXZlIHN1Ymxp bmVhciBwZXJmb3JtYW5jZS4gICovCi0gIGlmIChuZWVkbGVfbGVuIDwgTE9O R19ORUVETEVfVEhSRVNIT0xEKQorICBjb25zdCB1bnNpZ25lZCBjaGFyICpl bmQgPSBocyArIGhzX2xlbiAtIG5lX2xlbjsKKworICBpZiAobmVfbGVuID09 IDIpCisgICAgeworICAgICAgdWludDMyX3QgbncgPSBuZVswXSA8PCAxNiB8 IG5lWzFdLCBodyA9IGhzWzBdIDw8IDE2IHwgaHNbMV07CisgICAgICBmb3Ig KGhzKys7IGhzIDw9IGVuZCAmJiBodyAhPSBudzsgKQorCWh3ID0gaHcgPDwg MTYgfCAqKytoczsKKyAgICAgIHJldHVybiBodyA9PSBudyA/ICh2b2lkICop aHMgLSAxIDogTlVMTDsKKyAgICB9CisKKyAgLyogVXNlIFR3by1XYXkgYWxn b3JpdGhtIGZvciB2ZXJ5IGxvbmcgbmVlZGxlcy4gICovCisgIGlmIChfX2J1 aWx0aW5fZXhwZWN0IChuZV9sZW4gPiAyNTYsIDApKQorICAgIHJldHVybiB0 d29fd2F5X2xvbmdfbmVlZGxlIChocywgaHNfbGVuLCBuZSwgbmVfbGVuKTsK KworICB1aW50OF90IHNoaWZ0WzI1Nl07CisgIHNpemVfdCB0bXAsIHNoaWZ0 MTsKKyAgc2l6ZV90IG0xID0gbmVfbGVuIC0gMTsKKyAgc2l6ZV90IG9mZnNl dCA9IDA7CisKKyAgbWVtc2V0IChzaGlmdCwgMCwgc2l6ZW9mIChzaGlmdCkp OworICBmb3IgKGludCBpID0gMTsgaSA8IG0xOyBpKyspCisgICAgc2hpZnRb aGFzaDIgKG5lICsgaSldID0gaTsKKyAgLyogU2hpZnQxIGlzIHRoZSBhbW91 bnQgd2UgY2FuIHNraXAgYWZ0ZXIgbWF0Y2hpbmcgdGhlIGhhc2ggb2YgdGhl CisgICAgIG5lZWRsZSBlbmQgYnV0IG5vdCB0aGUgZnVsbCBuZWVkbGUuICAq LworICBzaGlmdDEgPSBtMSAtIHNoaWZ0W2hhc2gyIChuZSArIG0xKV07Cisg IHNoaWZ0W2hhc2gyIChuZSArIG0xKV0gPSBtMTsKKworICBmb3IgKCA7IGhz IDw9IGVuZDsgKQogICAgIHsKLSAgICAgIGhheXN0YWNrID0gbWVtY2hyICho YXlzdGFjaywgKm5lZWRsZSwgaGF5c3RhY2tfbGVuKTsKLSAgICAgIGlmICgh aGF5c3RhY2sgfHwgX19idWlsdGluX2V4cGVjdCAobmVlZGxlX2xlbiA9PSAx LCAwKSkKLQlyZXR1cm4gKHZvaWQgKikgaGF5c3RhY2s7Ci0gICAgICBoYXlz dGFja19sZW4gLT0gaGF5c3RhY2sgLSAoY29uc3QgdW5zaWduZWQgY2hhciAq KSBoYXlzdGFja19zdGFydDsKLSAgICAgIGlmIChoYXlzdGFja19sZW4gPCBu ZWVkbGVfbGVuKQotCXJldHVybiBOVUxMOwotICAgICAgLyogQ2hlY2sgd2hl dGhlciB3ZSBoYXZlIGEgbWF0Y2guICBUaGlzIGltcHJvdmVzIHBlcmZvcm1h bmNlIHNpbmNlIHdlCi0JIGF2b2lkIHRoZSBpbml0aWFsaXphdGlvbiBvdmVy aGVhZCBvZiB0aGUgdHdvLXdheSBhbGdvcml0aG0uICAqLwotICAgICAgaWYg KG1lbWNtcCAoaGF5c3RhY2ssIG5lZWRsZSwgbmVlZGxlX2xlbikgPT0gMCkK LQlyZXR1cm4gKHZvaWQgKikgaGF5c3RhY2s7Ci0gICAgICByZXR1cm4gdHdv 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 d2F5LmggYi9zdHJpbmcvc3RyLXR3by13YXkuaAppbmRleCBiNTAxMWJhLi5m NDNjNjEzIDEwMDY0NAotLS0gYS9zdHJpbmcvc3RyLXR3by13YXkuaAorKysg Yi9zdHJpbmcvc3RyLXR3by13YXkuaApAQCAtMjIxLDcgKzIyMSw3IEBAIGNy aXRpY2FsX2ZhY3Rvcml6YXRpb24gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5l ZWRsZSwgc2l6ZV90IG5lZWRsZV9sZW4sCiAgICBtb3N0IDIgKiBIQVlTVEFD S19MRU4gLSBORUVETEVfTEVOIGNvbXBhcmlzb25zIG9jY3VyIGluIHNlYXJj aGluZy4KICAgIElmIEFWQUlMQUJMRSBtb2RpZmllcyBIQVlTVEFDS19MRU4g KGFzIGluIHN0cnN0ciksIHRoZW4gYXQgbW9zdCAzICoKICAgIEhBWVNUQUNL X0xFTiAtIE5FRURMRV9MRU4gY29tcGFyaXNvbnMgb2NjdXIgaW4gc2VhcmNo aW5nLiAgKi8KLXN0YXRpYyBSRVRVUk5fVFlQRQorc3RhdGljIGlubGluZSBS RVRVUk5fVFlQRQogdHdvX3dheV9zaG9ydF9uZWVkbGUgKGNvbnN0IHVuc2ln bmVkIGNoYXIgKmhheXN0YWNrLCBzaXplX3QgaGF5c3RhY2tfbGVuLAogCQkg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZWVkbGUsIHNpemVfdCBuZWVk bGVfbGVuKQogewpAQCAtMzgyLDggKzM4MiwxMSBAQCB0d29fd2F5X3Nob3J0 X25lZWRsZSAoY29uc3QgdW5zaWduZWQgY2hhciAqaGF5c3RhY2ssIHNpemVf dCBoYXlzdGFja19sZW4sCiAgICBhbmQgc3VibGluZWFyIHBlcmZvcm1hbmNl IE8oSEFZU1RBQ0tfTEVOIC8gTkVFRExFX0xFTikgaXMgcG9zc2libGUuCiAg ICBJZiBBVkFJTEFCTEUgbW9kaWZpZXMgSEFZU1RBQ0tfTEVOIChhcyBpbiBz dHJzdHIpLCB0aGVuIGF0IG1vc3QgMyAqCiAgICBIQVlTVEFDS19MRU4gLSBO RUVETEVfTEVOIGNvbXBhcmlzb25zIG9jY3VyIGluIHNlYXJjaGluZywgYW5k Ci0gICBzdWJsaW5lYXIgcGVyZm9ybWFuY2UgaXMgbm90IHBvc3NpYmxlLiAg Ki8KLXN0YXRpYyBSRVRVUk5fVFlQRQorICAgc3VibGluZWFyIHBlcmZvcm1h bmNlIGlzIG5vdCBwb3NzaWJsZS4KKworICAgU2luY2UgdGhpcyBmdW5jdGlv biBpcyBsYXJnZSBhbmQgY29tcGxleCwgYmxvY2sgaW5saW5pbmcgdG8gYXZv aWQKKyAgIHNsb3dpbmcgZG93biB0aGUgY29tbW9uIGNhc2Ugb2Ygc21hbGwg bmVlZGxlcy4gICovCitfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpIHN0YXRp YyBSRVRVUk5fVFlQRQogdHdvX3dheV9sb25nX25lZWRsZSAoY29uc3QgdW5z aWduZWQgY2hhciAqaGF5c3RhY2ssIHNpemVfdCBoYXlzdGFja19sZW4sCiAJ CSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmVlZGxlLCBzaXplX3QgbmVl ZGxlX2xlbikKIHsKZGlmZiAtLWdpdCBhL3N0cmluZy9zdHJzdHIuYyBiL3N0 cmluZy9zdHJzdHIuYwppbmRleCA2NGU0NzhiLi40MDhjY2U4IDEwMDY0NAot LS0gYS9zdHJpbmcvc3Ryc3RyLmMKKysrIGIvc3RyaW5nL3N0cnN0ci5jCkBA IC0xNiwyOSArMTYsMTcgQEAKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUg R05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKICAgIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gICovCiAKLS8qIFRoaXMgcGFydGljdWxhciBp bXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBieSBFcmljIEJsYWtlLCAyMDA4 LiAgKi8KLQogI2lmbmRlZiBfTElCQwogIyBpbmNsdWRlIDxjb25maWcuaD4K ICNlbmRpZgogCi0vKiBTcGVjaWZpY2F0aW9uIG9mIHN0cnN0ci4gICovCiAj aW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0K LSNpZm5kZWYgX0xJQkMKLSMgZGVmaW5lIF9fYnVpbHRpbl9leHBlY3QoZXhw ciwgdmFsKSAgIChleHByKQotI2VuZGlmCi0KICNkZWZpbmUgUkVUVVJOX1RZ UEUgY2hhciAqCiAjZGVmaW5lIEFWQUlMQUJMRShoLCBoX2wsIGosIG5fbCkJ CQlcCiAgICgoKGopICsgKG5fbCkgPD0gKGhfbCkpIFwKICAgIHx8ICgoaF9s KSArPSBfX3N0cm5sZW4gKCh2b2lkKikoKGgpICsgKGhfbCkpLCAobl9sKSAr IDUxMiksIFwKICAgICAgICAoaikgKyAobl9sKSA8PSAoaF9sKSkpCi0jZGVm aW5lIENIRUNLX0VPTCAoMSkKLSNkZWZpbmUgUkVUMF9JRl8wKGEpIGlmICgh YSkgZ290byByZXQwCi0jZGVmaW5lIEZBU1RTRUFSQ0goUyxDLE4pICh2b2lk Kikgc3RyY2hyICgodm9pZCopKFMpLCAoQykpCiAjaW5jbHVkZSAic3RyLXR3 by13YXkuaCIKIAogI3VuZGVmIHN0cnN0cgpAQCAtNDcsNDcgKzM1LDEyOCBA QAogI2RlZmluZSBTVFJTVFIgc3Ryc3RyCiAjZW5kaWYKIAotLyogUmV0dXJu IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIE5FRURMRSBpbiBIQVlTVEFDSy4g IFJldHVybiBIQVlTVEFDSwotICAgaWYgTkVFRExFIGlzIGVtcHR5LCBvdGhl cndpc2UgTlVMTCBpZiBORUVETEUgaXMgbm90IGZvdW5kIGluCi0gICBIQVlT VEFDSy4gICovCi1jaGFyICoKLVNUUlNUUiAoY29uc3QgY2hhciAqaGF5c3Rh Y2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKK3N0YXRpYyBpbmxpbmUgY2hhciAq CitzdHJzdHIyIChjb25zdCB1bnNpZ25lZCBjaGFyICpocywgY29uc3QgdW5z aWduZWQgY2hhciAqbmUpCiB7Ci0gIHNpemVfdCBuZWVkbGVfbGVuOyAvKiBM ZW5ndGggb2YgTkVFRExFLiAgKi8KLSAgc2l6ZV90IGhheXN0YWNrX2xlbjsg LyogS25vd24gbWluaW11bSBsZW5ndGggb2YgSEFZU1RBQ0suICAqLwotCi0g IC8qIEhhbmRsZSBlbXB0eSBORUVETEUgc3BlY2lhbCBjYXNlLiAgKi8KLSAg aWYgKG5lZWRsZVswXSA9PSAnXDAnKQotICAgIHJldHVybiAoY2hhciAqKSBo YXlzdGFjazsKKyAgdWludDMyX3QgaDEgPSAobmVbMF0gPDwgMTYpIHwgbmVb MV07CisgIHVpbnQzMl90IGgyID0gMDsKKyAgZm9yIChpbnQgYyA9IGhzWzBd OyBoMSAhPSBoMiAmJiBjICE9IDA7IGMgPSAqKytocykKKyAgICAgIGgyID0g KGgyIDw8IDE2KSB8IGM7CisgIHJldHVybiBoMSA9PSBoMiA/IChjaGFyICop aHMgLSAyIDogTlVMTDsKK30KIAotICAvKiBTa2lwIHVudGlsIHdlIGZpbmQg dGhlIGZpcnN0IG1hdGNoaW5nIGNoYXIgZnJvbSBORUVETEUuICAqLwotICBo YXlzdGFjayA9IHN0cmNociAoaGF5c3RhY2ssIG5lZWRsZVswXSk7Ci0gIGlm IChoYXlzdGFjayA9PSBOVUxMIHx8IG5lZWRsZVsxXSA9PSAnXDAnKQotICAg IHJldHVybiAoY2hhciAqKSBoYXlzdGFjazsKK3N0YXRpYyBpbmxpbmUgY2hh ciAqCitzdHJzdHIzIChjb25zdCB1bnNpZ25lZCBjaGFyICpocywgY29uc3Qg dW5zaWduZWQgY2hhciAqbmUpCit7CisgIHVpbnQzMl90IGgxID0gKCh1aW50 MzJfdCluZVswXSA8PCAyNCkgfCAobmVbMV0gPDwgMTYpIHwgKG5lWzJdIDw8 IDgpOworICB1aW50MzJfdCBoMiA9IDA7CisgIGZvciAoaW50IGMgPSBoc1sw XTsgaDEgIT0gaDIgJiYgYyAhPSAwOyBjID0gKisraHMpCisgICAgICBoMiA9 IChoMiB8IGMpIDw8IDg7CisgIHJldHVybiBoMSA9PSBoMiA/IChjaGFyICop aHMgLSAzIDogTlVMTDsKK30KIAotICAvKiBFbnN1cmUgSEFZU1RBQ0sgbGVu Z3RoIGlzIGF0IGxlYXN0IGFzIGxvbmcgYXMgTkVFRExFIGxlbmd0aC4KLSAg ICAgU2luY2UgYSBtYXRjaCBtYXkgb2NjdXIgZWFybHkgb24gaW4gYSBodWdl IEhBWVNUQUNLLCB1c2Ugc3RybmxlbgorLyogSGFzaCBjaGFyYWN0ZXIgcGFp cnMgc28gYSBzbWFsbCBzaGlmdCB0YWJsZSBjYW4gYmUgdXNlZC4gIEFsbCBi aXRzIG9mCisgICBwWzBdIGFyZSBpbmNsdWRlZCwgYnV0IG5vdCBhbGwgYml0 cyBmcm9tIHBbLTFdLiAgU28gaWYgdHdvIGVxdWFsIGhhc2hlcworICAgbWF0 Y2ggb24gcFstMV0sIHBbMF0gbWF0Y2hlcyB0b28uICBIYXNoIGNvbGxpc2lv bnMgYXJlIGhhcm1sZXNzIGFuZCByZXN1bHQKKyAgIGluIHNtYWxsZXIgc2hp ZnRzLiAgKi8KKyNkZWZpbmUgaGFzaDIocCkgKCgoc2l6ZV90KShwKVswXSAt ICgoc2l6ZV90KShwKVstMV0gPDwgMykpICUgc2l6ZW9mIChzaGlmdCkpCisK Ky8qIEZhc3Qgc3Ryc3RyIGFsZ29yaXRobSB3aXRoIGd1YXJhbnRlZWQgbGlu ZWFyLXRpbWUgcGVyZm9ybWFuY2UuCisgICBTbWFsbCBuZWVkbGVzIHVwIHRv IHNpemUgMyB1c2UgYSBkZWRpY2F0ZWQgbGluZWFyIHNlYXJjaC4gIExvbmdl ciBuZWVkbGVzCisgICB1cCB0byBzaXplIDI1NiB1c2UgYSBub3ZlbCBtb2Rp ZmllZCBIb3JzcG9vbCBhbGdvcml0aG0uICBJdCBoYXNoZXMgcGFpcnMKKyAg IG9mIGNoYXJhY3RlcnMgdG8gcXVpY2tseSBza2lwIHBhc3QgbWlzbWF0Y2hl cy4gIFRoZSBtYWluIHNlYXJjaCBsb29wIG9ubHkKKyAgIGV4aXRzIGlmIHRo ZSBsYXN0IDIgY2hhcmFjdGVycyBtYXRjaCwgYXZvaWRpbmcgdW5uZWNlc3Nh cnkgY2FsbHMgdG8gbWVtY21wCisgICBhbmQgYWxsb3dpbmcgZm9yIGEgbGFy Z2VyIHNraXAgaWYgdGhlcmUgaXMgbm8gbWF0Y2guICBBIHNlbGYtYWRhcHRp bmcKKyAgIGZpbHRlcmluZyBjaGVjayBpcyB1c2VkIHRvIHF1aWNrbHkgZGV0 ZWN0IG1pc21hdGNoZXMgaW4gbG9uZyBuZWVkbGVzLgorICAgQnkgbGltaXRp bmcgdGhlIG5lZWRsZSBsZW5ndGggdG8gMjU2LCB0aGUgc2hpZnQgdGFibGUg Y2FuIGJlIHJlZHVjZWQgdG8gOAorICAgYml0cyBwZXIgZW50cnksIGxvd2Vy aW5nIHByZXByb2Nlc3Npbmcgb3ZlcmhlYWQgYW5kIG1pbmltaXppbmcgY2Fj aGUgZWZmZWN0cy4KKyAgIFRoZSBsaW1pdCBhbHNvIGltcGxpZXMgd29yc3Qt Y2FzZSBwZXJmb3JtYW5jZSBpcyBsaW5lYXIuCisgICBOZWVkbGVzIGxhcmdl ciB0aGFuIDI1NiBjaGFyYWN0ZXJzIHVzZSB0aGUgbGluZWFyLXRpbWUgVHdv LVdheSBhbGdvcml0aG0uICAqLworY2hhciAqCitTVFJTVFIgKGNvbnN0IGNo YXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCit7CisgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmhzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikg aGF5c3RhY2s7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5lID0gKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKikgbmVlZGxlOworCisgIC8qIEhhbmRsZSBzaG9y dCBuZWVkbGUgc3BlY2lhbCBjYXNlcyBmaXJzdC4gICovCisgIGlmIChuZVsw XSA9PSAnXDAnKQorICAgIHJldHVybiAoY2hhciAqKWhzOworICBocyA9IChj b25zdCB1bnNpZ25lZCBjaGFyICopc3RyY2hyICgoY29uc3QgY2hhciopaHMs IG5lWzBdKTsKKyAgaWYgKGhzID09IE5VTEwgfHwgbmVbMV0gPT0gJ1wwJykK KyAgICByZXR1cm4gKGNoYXIqKWhzOworICBpZiAobmVbMl0gPT0gJ1wwJykK KyAgICByZXR1cm4gc3Ryc3RyMiAoaHMsIG5lKTsKKyAgaWYgKG5lWzNdID09 ICdcMCcpCisgICAgcmV0dXJuIHN0cnN0cjMgKGhzLCBuZSk7CisKKyAgLyog RW5zdXJlIGhheXN0YWNrIGxlbmd0aCBpcyBhdCBsZWFzdCBhcyBsb25nIGFz IG5lZWRsZSBsZW5ndGguCisgICAgIFNpbmNlIGEgbWF0Y2ggbWF5IG9jY3Vy IGVhcmx5IG9uIGluIGEgaHVnZSBoYXlzdGFjaywgdXNlIHN0cm5sZW4KICAg ICAgYW5kIHJlYWQgYWhlYWQgYSBmZXcgY2FjaGVsaW5lcyBmb3IgaW1wcm92 ZWQgcGVyZm9ybWFuY2UuICAqLwotICBuZWVkbGVfbGVuID0gc3RybGVuIChu ZWVkbGUpOwotICBoYXlzdGFja19sZW4gPSBfX3N0cm5sZW4gKGhheXN0YWNr LCBuZWVkbGVfbGVuICsgMjU2KTsKLSAgaWYgKGhheXN0YWNrX2xlbiA8IG5l ZWRsZV9sZW4pCisgIHNpemVfdCBuZV9sZW4gPSBzdHJsZW4gKChjb25zdCBj aGFyKiluZSk7CisgIHNpemVfdCBoc19sZW4gPSBfX3N0cm5sZW4gKChjb25z dCBjaGFyKilocywgbmVfbGVuIHwgNTEyKTsKKyAgaWYgKGhzX2xlbiA8IG5l X2xlbikKICAgICByZXR1cm4gTlVMTDsKIAotICAvKiBDaGVjayB3aGV0aGVy IHdlIGhhdmUgYSBtYXRjaC4gIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2Ug c2luY2Ugd2UgYXZvaWQKLSAgICAgdGhlIGluaXRpYWxpemF0aW9uIG92ZXJo ZWFkIG9mIHRoZSB0d28td2F5IGFsZ29yaXRobS4gICovCi0gIGlmIChtZW1j bXAgKGhheXN0YWNrLCBuZWVkbGUsIG5lZWRsZV9sZW4pID09IDApCi0gICAg cmV0dXJuIChjaGFyICopIGhheXN0YWNrOwotCi0gIC8qIFBlcmZvcm0gdGhl IHNlYXJjaC4gIEFic3RyYWN0IG1lbW9yeSBpcyBjb25zaWRlcmVkIHRvIGJl IGFuIGFycmF5Ci0gICAgIG9mICd1bnNpZ25lZCBjaGFyJyB2YWx1ZXMsIG5v dCBhbiBhcnJheSBvZiAnY2hhcicgdmFsdWVzLiAgU2VlCi0gICAgIElTTyBD IDk5IHNlY3Rpb24gNi4yLjYuMS4gICovCi0gIGlmIChuZWVkbGVfbGVuIDwg TE9OR19ORUVETEVfVEhSRVNIT0xEKQotICAgIHJldHVybiB0d29fd2F5X3No b3J0X25lZWRsZSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgaGF5c3RhY2ss Ci0JCQkJIGhheXN0YWNrX2xlbiwKLQkJCQkgKGNvbnN0IHVuc2lnbmVkIGNo YXIgKikgbmVlZGxlLCBuZWVkbGVfbGVuKTsKLSAgcmV0dXJuIHR3b193YXlf bG9uZ19uZWVkbGUgKChjb25zdCB1bnNpZ25lZCBjaGFyICopIGhheXN0YWNr LCBoYXlzdGFja19sZW4sCi0JCQkgICAgICAoY29uc3QgdW5zaWduZWQgY2hh ciAqKSBuZWVkbGUsIG5lZWRsZV9sZW4pOworICAvKiBDaGVjayB3aGV0aGVy IHdlIGhhdmUgYSBtYXRjaC4gIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2Ug c2luY2Ugd2UKKyAgICAgYXZvaWQgaW5pdGlhbGl6YXRpb24gb3ZlcmhlYWRz LiAgKi8KKyAgaWYgKG1lbWNtcCAoaHMsIG5lLCBuZV9sZW4pID09IDApCisg ICAgcmV0dXJuIChjaGFyICopIGhzOworCisgIC8qIFVzZSBUd28tV2F5IGFs Z29yaXRobSBmb3IgdmVyeSBsb25nIG5lZWRsZXMuICAqLworICBpZiAoX19n bGliY191bmxpa2VseSAobmVfbGVuID4gMjU2KSkKKyAgICByZXR1cm4gdHdv X3dheV9sb25nX25lZWRsZSAoaHMsIGhzX2xlbiwgbmUsIG5lX2xlbik7CisK KyAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gaHMgKyBoc19sZW4gLSBu ZV9sZW47CisgIHVpbnQ4X3Qgc2hpZnRbMjU2XTsKKyAgc2l6ZV90IHRtcCwg c2hpZnQxOworICBzaXplX3QgbTEgPSBuZV9sZW4gLSAxOworICBzaXplX3Qg b2Zmc2V0ID0gMDsKKworICAvKiBJbml0aWFsaXplIGJhZCBjaGFyYWN0ZXIg c2hpZnQgaGFzaCB0YWJsZS4gICovCisgIG1lbXNldCAoc2hpZnQsIDAsIHNp emVvZiAoc2hpZnQpKTsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBtMTsgaSsr KQorICAgIHNoaWZ0W2hhc2gyIChuZSArIGkpXSA9IGk7CisgIC8qIFNoaWZ0 MSBpcyB0aGUgYW1vdW50IHdlIGNhbiBza2lwIGFmdGVyIG1hdGNoaW5nIHRo ZSBoYXNoIG9mIHRoZQorICAgICBuZWVkbGUgZW5kIGJ1dCBub3QgdGhlIGZ1 bGwgbmVlZGxlLiAgKi8KKyAgc2hpZnQxID0gbTEgLSBzaGlmdFtoYXNoMiAo bmUgKyBtMSldOworICBzaGlmdFtoYXNoMiAobmUgKyBtMSldID0gbTE7CisK KyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKF9fZ2xpYmNfdW5saWtl bHkgKGhzID4gZW5kKSkKKwl7CisJICBlbmQgKz0gX19zdHJubGVuICgoY29u c3QgY2hhciopZW5kICsgbTEgKyAxLCAyMDQ4KTsKKwkgIGlmIChocyA+IGVu ZCkKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorCisgICAgICAvKiBTa2lwIHBh c3QgY2hhcmFjdGVyIHBhaXJzIG5vdCBpbiB0aGUgbmVlZGxlLiAgKi8KKyAg ICAgIGRvCisJeworCSAgaHMgKz0gbTE7CisJICB0bXAgPSBzaGlmdFtoYXNo MiAoaHMpXTsKKwl9CisgICAgICB3aGlsZSAodG1wID09IDAgJiYgaHMgPD0g ZW5kKTsKKworICAgICAgLyogSWYgdGhlIG1hdGNoIGlzIG5vdCBhdCB0aGUg ZW5kIG9mIHRoZSBuZWVkbGUsIHNoaWZ0IHRvIHRoZSBlbmQKKwkgYW5kIGNv bnRpbnVlIHVudGlsIHdlIG1hdGNoIHRoZSBoYXNoIG9mIHRoZSBuZWVkbGUg ZW5kLiAgKi8KKyAgICAgIGhzIC09IHRtcDsKKyAgICAgIGlmICh0bXAgPCBt MSkKKwljb250aW51ZTsKKworICAgICAgLyogSGFzaCBvZiB0aGUgbGFzdCAy IGNoYXJhY3RlcnMgbWF0Y2hlcy4gIElmIHRoZSBuZWVkbGUgaXMgbG9uZywK KwkgdHJ5IHRvIHF1aWNrbHkgZmlsdGVyIG91dCBtaXNtYXRjaGVzLiAgKi8K KyAgICAgIGlmIChtMSA8IDE1IHx8IG1lbWNtcCAoaHMgKyBvZmZzZXQsIG5l ICsgb2Zmc2V0LCA4KSA9PSAwKQorCXsKKwkgIGlmIChtZW1jbXAgKGhzLCBu ZSwgbTEpID09IDApCisJICAgIHJldHVybiAodm9pZCAqKSBoczsKKworCSAg LyogQWRqdXN0IGZpbHRlciBvZmZzZXQgd2hlbiBpdCBkb2Vzbid0IGZpbmQg dGhlIG1pc21hdGNoLiAgKi8KKwkgIG9mZnNldCA9IChvZmZzZXQgPj0gOCA/ IG9mZnNldCA6IG0xKSAtIDg7CisJfQorCisgICAgICAvKiBTa2lwIGJhc2Vk IG9uIG1hdGNoaW5nIHRoZSBoYXNoIG9mIHRoZSBuZWVkbGUgZW5kLiAgKi8K KyAgICAgIGhzICs9IHNoaWZ0MTsKKyAgICB9CiB9CiBsaWJjX2hpZGRlbl9i dWlsdGluX2RlZiAoc3Ryc3RyKQotCi0jdW5kZWYgTE9OR19ORUVETEVfVEhS RVNIT0xECg== --_002_VI1PR0801MB212795F7B1288009FDCBE8A383B30VI1PR0801MB2127_--