From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2092.outbound.protection.outlook.com [40.107.94.92]) by sourceware.org (Postfix) with ESMTPS id 79750387100E for ; Fri, 7 Jul 2023 08:26:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 79750387100E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=os.amperecomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=os.amperecomputing.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XEpcKQrvQbL+pmIdPbSH6vaeaBdyOvveJYxK0z5qM/5SPeosiqbnWTo9/h877WM3YoboyVaXjcP+qiRiDxOBFsN3pMuu2gMllrZWWilRbOxTqfOUDoki001qUfXFbgfL6Oyiyo4zz6arOmoiakkPn8g5K4DkN8Rs2mdPoiJw0AjPoIgbvvz0j+q+yY3Sth4CeD1Ggltv/tiILpDyDafz3YKPDyDnyMZThc6QnIP4RDfIyblJH9vQRZGbd4w6AGV2sKBVwZKQh2I/WJMm2yHN4CxYDPDRvlWGtXjQIsMAlVXnZEQPhVdJB8CHjZhooIrZmO9CsIwP6TWQNhDDj0FmCg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5HCv+pSjCpK2HD5ZyNph8VPkQIA3m48G23O+zuYxa/0=; b=DaEI/2TQNr7u1CMM4Z/sWyPh8qp5ZSjwHv6OtMM6/8fm55DILw7GmLS/4NDgFKzhfnFG1qA0STNfK9vqKc/9t1pWlhk9+N0cCD8+JB84Q/XqqjhByS29dw/0TTuzCP3Kjv9xkalyXyiFbTtO6hKFmjd1Jxal6RKOzUxvE3XwKo5QSG3hfdjpYu9Dztu+FmWuQC5nEE8JP++iHgHLXbDUOIWiRqMhI9SpqQzPi4rQyrVyw+GeZMYiSgyDcuq+H39AHLf780FcDvKP4AXNZY6TDYYe+8FxRhdnEsxiP48JoxkBfTdIQlWzEy1vNwWuaJR/NHfWw8s4T0XDh9l1b1D9DQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5HCv+pSjCpK2HD5ZyNph8VPkQIA3m48G23O+zuYxa/0=; b=Vy/EpYwKNpehmlqJkA16B6t8Yb0MtnoejyHGHvMQ5FOIGvEZaa/M+nXp8Py1+wFYLk5J5KZnRDLNGKCyTUhCAVSbZawD+fLPpUhY86ZNhUAMAFEGzUIRjqCXaL9O//6DC19Z0iLSqHIe0O6F5aDhW3mxdf/EV85sSCPpI5F38Mg= Received: from SN6PR01MB4240.prod.exchangelabs.com (2603:10b6:805:ae::22) by CO6PR01MB7499.prod.exchangelabs.com (2603:10b6:303:146::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.25; Fri, 7 Jul 2023 08:26:09 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::b7:d4b4:c870:c85d]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::b7:d4b4:c870:c85d%4]) with mapi id 15.20.6565.019; Fri, 7 Jul 2023 08:26:09 +0000 From: Di Zhao OS To: "gcc-patches@gcc.gnu.org" Subject: [PING][PATCH] tree-optimization/110279- Check for nested FMA chains in reassoc Thread-Topic: [PING][PATCH] tree-optimization/110279- Check for nested FMA chains in reassoc Thread-Index: AdmgLZ4LEuSVXmH+Rp+4f1BgeMsxPwQfw2tg Content-Class: Date: Fri, 7 Jul 2023 08:26:08 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: zh-CN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ActionId=3f0c3fda-cf93-44da-96a2-3c72647166de;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ContentBits=0;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Enabled=true;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Method=Privileged;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Name=Confidential (Default);MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SetDate=2023-07-07T08:22:41Z;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SiteId=3bc2b170-fd94-476d-b0ce-4229bdc904a7; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR01MB4240:EE_|CO6PR01MB7499:EE_ x-ms-office365-filtering-correlation-id: f526a463-4213-41b1-9f4e-08db7ec3d06c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 5iWGrPTsFzdUAOhyUzvhkcpbKkhWVFtxN8ij07rcSoWVUY3XG4h7T5vy2vDctZAbmIeI2Umaqn3Yrj1KP905v4uxUTnXqMcVbTsQw2YkkLfJEDu20JjTe4N3zyOjVS+3ymgxwdPAN8aiiP0NR5tuQQkAJxf3d8f+jlI0GjLn19rOlm8NQq0lYtJrKjMWjxYSNIoCvpMCdCWqvd/dqrZRy3W0lNd6HsqA/qURaOGqPZnpPLqHEAUEocac0/IpDwJojDu1x88jswf5SBCV1toZJh0V+Vr5zq42jfFQ7aQeu9d/xGgcVn3IJ6/hMSRovASPx5cX/K5LRa2KgHomMjhqp+Y1atBv082sEX87SA4gPS5KMQmSYzbnJD3lb6kgeh2zSCBpsn/THWPck7eALQmytU9emmVlVjhcFPkiHobYKehKWIB35BD8LnZhA5HDQB3cJKj7ub2iTuYs+RWdZu3+QbgBJrkE9WYCS7uf0MsCG6fISJLi7JuqYO8mE/SvG3htORsF+Mlp8Xw0I+MqYylgtJMkI1lQ7FZC9SpIltQP8vo3XoVi5zzoO4JsMBSThJ27rBghIHPa4PT3Sj+YjJhaadKzNTI19Aw12n2C0XaAkIWnNzkXaHbPJ0yvXcbgxC3O x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR01MB4240.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(346002)(366004)(136003)(396003)(39850400004)(451199021)(478600001)(7696005)(71200400001)(53546011)(9686003)(6506007)(26005)(186003)(76116006)(2906002)(41300700001)(316002)(66946007)(66556008)(66476007)(66446008)(64756008)(6916009)(5660300002)(52536014)(8936002)(8676002)(38100700002)(122000001)(99936003)(86362001)(33656002)(38070700005)(83380400001)(55016003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?fnn+CLyNM2caMeISI8k+BTJWcsG1zoHQYAjSWZ5jU1apIv6UPDPbgyPAUh+L?= =?us-ascii?Q?mG3laoe9Dg7RgDl0Ghmh3EUyog60Fye4tmnY/ZAyzz0/yrGZNeqhRo+U4SNK?= =?us-ascii?Q?tXQJIUsTyRCpUEqfHyJcktKZB8yajy6+bvHFqRZxJjKf0mo4MiY6DX8WMTaU?= =?us-ascii?Q?/EgQVjEmGS74HJ+6KoMJ3OCet7X2GSNXtCAagj8dHacax3/6+Vb0cyR9ZcUU?= =?us-ascii?Q?wZfFKcQ5LzVgxmj3Fp7FmMXTiWRcYt14n6p0dXAmyCmlehxuWwyDdGW8U7FY?= =?us-ascii?Q?tkvCjwoF56mxU/Xu/QZeBrg++7nkfqtdFPMeoOL4X798TZoPoLFm1dPZHVsd?= =?us-ascii?Q?3FZmXBH6aW4Yn0Kj+6Aflep2pMC8XxpMkfz7gkGRVd26zRZmAD+qYB0OhTGa?= =?us-ascii?Q?DZqBXG5hUe6HaUKHIpDCrK9cgtLWgD8vUfWKxTQk90fnEFfSApaySUA5v+Sf?= =?us-ascii?Q?jFQezSw/YAPBJ7dFEE5uz7lT9oqvRg98qryEwBMA7tRBn5fxp4FZju5LwCFx?= =?us-ascii?Q?nbzeoEmcMpHIit8IEOpQmrMTDfUcehsFjl30UFQY78RufXyyCX8fo/WcjKGc?= =?us-ascii?Q?umCnHeaUT/Ry8NYXVhmHjKryWYd0TB6az8gRXEVQ2TSXMJMrr59Gqzvz1YBx?= =?us-ascii?Q?NmLkZxVkUFAHsv5RL9bStQQic4E7tQNydsPTBHlAXacQ1tM/OKNfEx85xgmG?= =?us-ascii?Q?e2Tsy+qGAySHl7OlTiBj4CrZAjC3VklJVx09tkCsncnBbs0Tjlo0eFpl/tcc?= =?us-ascii?Q?iAshyd6qCZWpLZ7n+SrqVEC3B/enud/wlObMuvPHT08eGP3mX4kO09B8UJ2N?= =?us-ascii?Q?D3VmjsoL2OAeWVtMmd0eYJj8nNbsy+U6rUs8VaJUc/kuDBk+tcN1cfYf8woE?= =?us-ascii?Q?oC5GUk67Ctrc1Q13gpKfEu7HlneJVI4zhREy2xig2e4i+usnH5+wRsRyOoif?= =?us-ascii?Q?S3LrZpYrUDjQg89sJYzOwsoTHGe+hXrmMP8gzx+++w1QFq8prazerorT28dT?= =?us-ascii?Q?pXMRmIV2AXM/9JNqLDhHANbsUP89YCpuXKNIGlv+0mfhOdryBoNRvqiLS5Th?= =?us-ascii?Q?8attVqOn+6ledqXqE1bgiBLEQ9nAQCHtd2TzY1V3yYj+XcRXQxLBSERMDSCk?= =?us-ascii?Q?eeyZjkaQz15IyVTiW8cM5jkz1D9lGhavjLwInxj0jttqzg2wvuvlVh898zCJ?= =?us-ascii?Q?cjfWaIYtsl9gM/9yKzl3SfsfJH3mt80qDCojaWAeXe6/Ap9l6ixGZP1T5bWg?= =?us-ascii?Q?BWg/VVQc4asNOvG83XA9wjWr7kgaCBeRntsI8X6OK8TZo1uveoUMu6j3WJHu?= =?us-ascii?Q?k+7pXe2jaAxM3mq7Tb7QzoalvAmjqlxaFchAdau4bqgUKowtu68ysXE7Igik?= =?us-ascii?Q?qyOFKPNLbmgROGnSD0CZzHjuLHBv7BkbllDlEokr4FAiMl8wV9YggChaLl8B?= =?us-ascii?Q?a4GdAH/B7YMcmTNUYJtCeH6uRDX69dVjBk+E3yH8fmW9u+AanHGSdoaH0vrD?= =?us-ascii?Q?P9Ne5eE0l1sp8Fa0WftD+0jGsSD5GyVV/8ciClA9PT4yEjllaJpUyS08SEzG?= =?us-ascii?Q?FpW7G56+pBlwzC2r420k67AUk/DvZYB4RSLVkLKrDp6mfhX9q8SVqzMwh1yc?= =?us-ascii?Q?pg=3D=3D?= Content-Type: multipart/mixed; boundary="_002_SN6PR01MB4240BCADC30D5B7F3CB37C97E82DASN6PR01MB4240prod_" MIME-Version: 1.0 X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR01MB4240.prod.exchangelabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: f526a463-4213-41b1-9f4e-08db7ec3d06c X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jul 2023 08:26:08.3558 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 6bfa/r+hFjHqe1orJzjaKkQHzv+HX780Z7mazY1yLlepEB5VhYnAwZkdYqInDpHKor5WtEmF27QjwWxkWPLV2oWFwa0K8nvP42r5LYX1IrPnPGnU0vSrlz6RKFUqAEVF X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR01MB7499 X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_002_SN6PR01MB4240BCADC30D5B7F3CB37C97E82DASN6PR01MB4240prod_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Update the patch so it can apply. Tested on spec2017 fprate cases again. With option "-funroll-loops -Ofast -= flto", the improvements of 1-copy run are: Ampere1: 508.namd_r 4.26%=20 510.parest_r 2.55% Overall 0.54% Intel Xeon: 503.bwaves_r 1.3%=09 508.namd_r 1.58% overall 0.42% Thanks, Di Zhao > -----Original Message----- > From: Di Zhao OS > Sent: Friday, June 16, 2023 4:51 PM > To: gcc-patches@gcc.gnu.org > Subject: [PATCH] tree-optimization/110279- Check for nested FMA chains in > reassoc >=20 > This patch is to fix the regressions found in SPEC2017 fprate cases > on aarch64. >=20 > 1. Reused code in pass widening_mul to check for nested FMA chains > (those connected by MULT_EXPRs), since re-writing to parallel > generates worse codes. >=20 > 2. Avoid re-arrange to produce less FMA chains that can be slow. >=20 > Tested on ampere1 and neoverse-n1, this fixed the regressions in > 508.namd_r and 510.parest_r 1 copy run. While I'm still collecting data > on x86 machines we have, I'd like to know what do you think of this. >=20 > (Previously I tried to improve things with FMA by adding a widening_mul > pass before reassoc2 for it's easier to recognize different patterns > of FMA chains and decide whether to split them. But I suppose handling > them all in reassoc pass is more efficient.) >=20 > Thanks, > Di Zhao >=20 > --- > gcc/ChangeLog: >=20 > * tree-ssa-math-opts.cc (convert_mult_to_fma_1): Add new paramete= r. > Support new mode that merely do the checking. > (struct fma_transformation_info): Moved to header. > (class fma_deferring_state): Moved to header. > (convert_mult_to_fma): Add new parameter. > * tree-ssa-math-opts.h (struct fma_transformation_info): > (class fma_deferring_state): Moved from .cc. > (convert_mult_to_fma): Add function decl. > * tree-ssa-reassoc.cc (rewrite_expr_tree_parallel): > (rank_ops_for_fma): Return -1 if nested FMAs are found. > (reassociate_bb): Avoid rewriting to parallel if nested FMAs are > found. --_002_SN6PR01MB4240BCADC30D5B7F3CB37C97E82DASN6PR01MB4240prod_ Content-Type: application/octet-stream; name="0001-Check-for-nested-FMA-chains-in-reassoc.patch" Content-Description: 0001-Check-for-nested-FMA-chains-in-reassoc.patch Content-Disposition: attachment; filename="0001-Check-for-nested-FMA-chains-in-reassoc.patch"; size=11274; creation-date="Fri, 07 Jul 2023 08:24:07 GMT"; modification-date="Fri, 07 Jul 2023 08:26:07 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1tYXRoLW9wdHMuY2MgYi9nY2MvdHJlZS1zc2EtbWF0 aC1vcHRzLmNjCmluZGV4IDY4ZmM1MThiMWFiLi4xOWUyYmVmOTMwNyAxMDA2NDQKLS0tIGEvZ2Nj L3RyZWUtc3NhLW1hdGgtb3B0cy5jYworKysgYi9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmNjCkBA IC0zMDY3LDcgKzMwNjcsOCBAQCBjb252ZXJ0X3BsdXNtaW51c190b193aWRlbiAoZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgKmdzaSwgZ2ltcGxlICpzdG10LAogICAgbXVsdGlwbGljYXRpb24sIGNvbnZl cnRlZCB0byBGTUFzLCBwZXJmb3JtIHRoZSB0cmFuc2Zvcm1hdGlvbi4gICovCiAKIHN0YXRpYyB2 b2lkCi1jb252ZXJ0X211bHRfdG9fZm1hXzEgKHRyZWUgbXVsX3Jlc3VsdCwgdHJlZSBvcDEsIHRy ZWUgb3AyKQorY29udmVydF9tdWx0X3RvX2ZtYV8xICh0cmVlIG11bF9yZXN1bHQsIHRyZWUgb3Ax LCB0cmVlIG9wMiwKKwkJICAgICAgIHRyZWUgKnJldHVybl9saHMgPSBOVUxMKQogewogICB0cmVl IHR5cGUgPSBUUkVFX1RZUEUgKG11bF9yZXN1bHQpOwogICBnaW1wbGUgKnVzZV9zdG10OwpAQCAt MzA5MSw4ICszMDkyLDExIEBAIGNvbnZlcnRfbXVsdF90b19mbWFfMSAodHJlZSBtdWxfcmVzdWx0 LCB0cmVlIG9wMSwgdHJlZSBvcDIpCiAJICB1c2Vfb3BlcmFuZF9wIHVzZV9wOwogCSAgZ2ltcGxl ICpuZWd1c2Vfc3RtdDsKIAkgIHNpbmdsZV9pbW1fdXNlIChnaW1wbGVfYXNzaWduX2xocyAodXNl X3N0bXQpLCAmdXNlX3AsICZuZWd1c2Vfc3RtdCk7Ci0JICBnc2lfcmVtb3ZlICgmZ3NpLCB0cnVl KTsKLQkgIHJlbGVhc2VfZGVmcyAodXNlX3N0bXQpOworCSAgaWYgKCFyZXR1cm5fbGhzKQorCSAg ICB7CisJICAgICAgZ3NpX3JlbW92ZSAoJmdzaSwgdHJ1ZSk7CisJICAgICAgcmVsZWFzZV9kZWZz ICh1c2Vfc3RtdCk7CisJICAgIH0KIAogCSAgdXNlX3N0bXQgPSBuZWd1c2Vfc3RtdDsKIAkgIGdz aSA9IGdzaV9mb3Jfc3RtdCAodXNlX3N0bXQpOwpAQCAtMzEwNiw2ICszMTEwLDEyIEBAIGNvbnZl cnRfbXVsdF90b19mbWFfMSAodHJlZSBtdWxfcmVzdWx0LCB0cmVlIG9wMSwgdHJlZSBvcDIpCiAJ Z2NjX3VucmVhY2hhYmxlICgpOwogICAgICAgYWRkb3AgPSBvcHNbMF0gPT0gcmVzdWx0ID8gb3Bz WzFdIDogb3BzWzBdOwogCisgICAgICBpZiAocmV0dXJuX2xocykKKwl7CisJICAqcmV0dXJuX2xo cyA9IGdpbXBsZV9nZXRfbGhzICh1c2Vfc3RtdCk7CisJICByZXR1cm47CisJfQorCiAgICAgICBp ZiAoY29kZSA9PSBNSU5VU19FWFBSKQogCXsKIAkgIGlmIChvcHNbMF0gPT0gcmVzdWx0KQpAQCAt MzE4MSw1NCArMzE5MSw2IEBAIGNvbnZlcnRfbXVsdF90b19mbWFfMSAodHJlZSBtdWxfcmVzdWx0 LCB0cmVlIG9wMSwgdHJlZSBvcDIpCiAgICAgfQogfQogCi0vKiBEYXRhIG5lY2Vzc2FyeSB0byBw ZXJmb3JtIHRoZSBhY3R1YWwgdHJhbnNmb3JtYXRpb24gZnJvbSBhIG11bHRpcGxpY2F0aW9uCi0g ICBhbmQgYW4gYWRkaXRpb24gdG8gYW4gRk1BIGFmdGVyIGRlY2lzaW9uIGlzIHRha2VuIGl0IHNo b3VsZCBiZSBkb25lIGFuZCB0bwotICAgdGhlbiBkZWxldGUgdGhlIG11bHRpcGxpY2F0aW9uIHN0 YXRlbWVudCBmcm9tIHRoZSBmdW5jdGlvbiBJTC4gICovCi0KLXN0cnVjdCBmbWFfdHJhbnNmb3Jt YXRpb25faW5mbwotewotICBnaW1wbGUgKm11bF9zdG10OwotICB0cmVlIG11bF9yZXN1bHQ7Ci0g IHRyZWUgb3AxOwotICB0cmVlIG9wMjsKLX07Ci0KLS8qIFN0cnVjdHVyZSBjb250YWluaW5nIHRo ZSBjdXJyZW50IHN0YXRlIG9mIEZNQSBkZWZlcnJpbmcsIGkuZS4gd2hldGhlciB3ZSBhcmUKLSAg IGRlZmVycmluZywgd2hldGhlciB0byBjb250aW51ZSBkZWZlcnJpbmcsIGFuZCBhbGwgZGF0YSBu ZWNlc3NhcnkgdG8gY29tZQotICAgYmFjayBhbmQgcGVyZm9ybSBhbGwgZGVmZXJyZWQgdHJhbnNm b3JtYXRpb25zLiAgKi8KLQotY2xhc3MgZm1hX2RlZmVycmluZ19zdGF0ZQotewotcHVibGljOgot ICAvKiBDbGFzcyBjb25zdHJ1Y3Rvci4gIFBhc3MgdHJ1ZSBhcyBQRVJGT1JNX0RFRkVSUklORyBp biBvcmRlciB0byBhY3R1YWxseQotICAgICBkbyBhbnkgZGVmZXJyaW5nLiAgKi8KLQotICBmbWFf ZGVmZXJyaW5nX3N0YXRlIChib29sIHBlcmZvcm1fZGVmZXJyaW5nKQotICAgIDogbV9jYW5kaWRh dGVzICgpLCBtX211bF9yZXN1bHRfc2V0ICgpLCBtX2luaXRpYWxfcGhpIChOVUxMKSwKLSAgICAg IG1fbGFzdF9yZXN1bHQgKE5VTExfVFJFRSksIG1fZGVmZXJyaW5nX3AgKHBlcmZvcm1fZGVmZXJy aW5nKSB7fQotCi0gIC8qIExpc3Qgb2YgRk1BIGNhbmRpZGF0ZXMgZm9yIHdoaWNoIHdlIHRoZSB0 cmFuc2Zvcm1hdGlvbiBoYXMgYmVlbiBkZXRlcm1pbmVkCi0gICAgIHBvc3NpYmxlIGJ1dCB3ZSBh dCB0aGlzIHBvaW50IGluIEJCIGFuYWx5c2lzIHdlIGRvIG5vdCBjb25zaWRlciB0aGVtCi0gICAg IGJlbmVmaWNpYWwuICAqLwotICBhdXRvX3ZlYzxmbWFfdHJhbnNmb3JtYXRpb25faW5mbywgOD4g bV9jYW5kaWRhdGVzOwotCi0gIC8qIFNldCBvZiByZXN1bHRzIG9mIG11bHRpcGxpY2F0aW9uIHRo YXQgYXJlIHBhcnQgb2YgYW4gYWxyZWFkeSBkZWZlcnJlZCBGTUEKLSAgICAgY2FuZGlkYXRlcy4g ICovCi0gIGhhc2hfc2V0PHRyZWU+IG1fbXVsX3Jlc3VsdF9zZXQ7Ci0KLSAgLyogVGhlIFBISSB0 aGF0IHN1cHBvc2VkbHkgZmVlZHMgYmFjayByZXN1bHQgb2YgYSBGTUEgdG8gYW5vdGhlciBvdmVy IGxvb3AKLSAgICAgYm91bmRhcnkuICAqLwotICBncGhpICptX2luaXRpYWxfcGhpOwotCi0gIC8q IFJlc3VsdCBvZiB0aGUgbGFzdCBwcm9kdWNlZCBGTUEgY2FuZGlkYXRlIG9yIE5VTEwgaWYgdGhl cmUgaGFzIG5vdCBiZWVuCi0gICAgIG9uZS4gICovCi0gIHRyZWUgbV9sYXN0X3Jlc3VsdDsKLQot ICAvKiBJZiB0cnVlLCBkZWZlcnJpbmcgbWlnaHQgc3RpbGwgYmUgcHJvZml0YWJsZS4gIElmIGZh bHNlLCB0cmFuc2Zvcm0gYWxsCi0gICAgIGNhbmRpZGF0ZXMgYW5kIG5vIGxvbmdlciBkZWZlci4g ICovCi0gIGJvb2wgbV9kZWZlcnJpbmdfcDsKLX07Ci0KIC8qIFRyYW5zZm9ybSBhbGwgZGVmZXJy ZWQgRk1BIGNhbmRpZGF0ZXMgYW5kIG1hcmsgU1RBVEUgYXMgbm8gbG9uZ2VyCiAgICBkZWZlcnJp bmcuICAqLwogCkBAIC0zMzAzLDEyICszMjY1LDE4IEBAIGxhc3RfZm1hX2NhbmRpZGF0ZV9mZWVk c19pbml0aWFsX3BoaSAoZm1hX2RlZmVycmluZ19zdGF0ZSAqc3RhdGUsCiAgIG9yIGl0cyB1bnJv bGxlZCB2ZXJzaW9uLCBpLmUuIHdpdGggc2V2ZXJhbCBGTUEgY2FuZGlkYXRlcyB0aGF0IGZlZWQg cmVzdWx0CiAgIG9mIG9uZSBpbnRvIHRoZSBhZGRlbmQgb2YgYW5vdGhlci4gIEluc3RlYWQsIHdl IGFkZCB0aGVtIHRvIGEgbGlzdCBpbiBTVEFURQogICBhbmQgaWYgd2UgbGF0ZXIgZGlzY292ZXIg YW4gRk1BIGNhbmRpZGF0ZSB0aGF0IGlzIG5vdCBwYXJ0IG9mIHN1Y2ggYSBjaGFpbiwKLSAgd2Ug Z28gYmFjayBhbmQgcGVyZm9ybSBhbGwgZGVmZXJyZWQgcGFzdCBjYW5kaWRhdGVzLiAgKi8KKyAg d2UgZ28gYmFjayBhbmQgcGVyZm9ybSBhbGwgZGVmZXJyZWQgcGFzdCBjYW5kaWRhdGVzLgogCi1z dGF0aWMgYm9vbAorICBJZiBSRVRVUk5fTEhTIGlzIG5vdCBOVUxMLCBpbnN0ZWFkIG9mIHRoZSBh Y3R1YWwgY29udmVyc2lvbiwgc2V0IFJFVFVSTl9MSFMKKyAgYW5kIHJldHVybiB0cnVlLiAgKi8K KworYm9vbAogY29udmVydF9tdWx0X3RvX2ZtYSAoZ2ltcGxlICptdWxfc3RtdCwgdHJlZSBvcDEs IHRyZWUgb3AyLAotCQkgICAgIGZtYV9kZWZlcnJpbmdfc3RhdGUgKnN0YXRlLCB0cmVlIG11bF9j b25kID0gTlVMTF9UUkVFKQorCQkgICAgIGZtYV9kZWZlcnJpbmdfc3RhdGUgKnN0YXRlLCB0cmVl IG11bF9jb25kLAorCQkgICAgIHRyZWUgKnJldHVybl9saHMpCiB7CisgIGlmIChyZXR1cm5fbGhz KQorICAgICpyZXR1cm5fbGhzID0gTlVMTF9UUkVFOwogICB0cmVlIG11bF9yZXN1bHQgPSBnaW1w bGVfZ2V0X2xocyAobXVsX3N0bXQpOwogICAvKiBJZiB0aGVyZSBpc24ndCBhIExIUyB0aGVuIHRo aXMgY2FuJ3QgYmUgYW4gRk1BLiAgVGhlcmUgY2FuIGJlIG5vIExIUwogICAgICBpZiB0aGUgc3Rh dGVtZW50IHdhcyBsZWZ0IGp1c3QgZm9yIHRoZSBzaWRlLWVmZmVjdHMuICAqLwpAQCAtMzU1MCw3 ICszNTE4LDcgQEAgY29udmVydF9tdWx0X3RvX2ZtYSAoZ2ltcGxlICptdWxfc3RtdCwgdHJlZSBv cDEsIHRyZWUgb3AyLAogICAgIHsKICAgICAgIGlmIChzdGF0ZS0+bV9kZWZlcnJpbmdfcCkKIAlj YW5jZWxfZm1hX2RlZmVycmluZyAoc3RhdGUpOwotICAgICAgY29udmVydF9tdWx0X3RvX2ZtYV8x IChtdWxfcmVzdWx0LCBvcDEsIG9wMik7CisgICAgICBjb252ZXJ0X211bHRfdG9fZm1hXzEgKG11 bF9yZXN1bHQsIG9wMSwgb3AyLCByZXR1cm5fbGhzKTsKICAgICAgIHJldHVybiB0cnVlOwogICAg IH0KIH0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1tYXRoLW9wdHMuaCBiL2djYy90cmVlLXNz YS1tYXRoLW9wdHMuaAppbmRleCA1MmI3OTM4YjU5OS4uMjUyNTk3YmE0MjggMTAwNjQ0Ci0tLSBh L2djYy90cmVlLXNzYS1tYXRoLW9wdHMuaAorKysgYi9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmgK QEAgLTIzLDQgKzIzLDU3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMu ICBJZiBub3Qgc2VlCiBleHRlcm4gdHJlZSBwb3dpX2FzX211bHRzIChnaW1wbGVfc3RtdF9pdGVy YXRvciAqLCBsb2NhdGlvbl90LAogCQkJICAgdHJlZSwgSE9TVF9XSURFX0lOVCk7CiAKKy8qIERh dGEgbmVjZXNzYXJ5IHRvIHBlcmZvcm0gdGhlIGFjdHVhbCB0cmFuc2Zvcm1hdGlvbiBmcm9tIGEg bXVsdGlwbGljYXRpb24KKyAgIGFuZCBhbiBhZGRpdGlvbiB0byBhbiBGTUEgYWZ0ZXIgZGVjaXNp b24gaXMgdGFrZW4gaXQgc2hvdWxkIGJlIGRvbmUgYW5kIHRvCisgICB0aGVuIGRlbGV0ZSB0aGUg bXVsdGlwbGljYXRpb24gc3RhdGVtZW50IGZyb20gdGhlIGZ1bmN0aW9uIElMLiAgKi8KKworc3Ry dWN0IGZtYV90cmFuc2Zvcm1hdGlvbl9pbmZvCit7CisgIGdpbXBsZSAqbXVsX3N0bXQ7CisgIHRy ZWUgbXVsX3Jlc3VsdDsKKyAgdHJlZSBvcDE7CisgIHRyZWUgb3AyOworfTsKKworLyogU3RydWN0 dXJlIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgRk1BIGRlZmVycmluZywgaS5lLiB3 aGV0aGVyIHdlIGFyZQorICAgZGVmZXJyaW5nLCB3aGV0aGVyIHRvIGNvbnRpbnVlIGRlZmVycmlu ZywgYW5kIGFsbCBkYXRhIG5lY2Vzc2FyeSB0byBjb21lCisgICBiYWNrIGFuZCBwZXJmb3JtIGFs bCBkZWZlcnJlZCB0cmFuc2Zvcm1hdGlvbnMuICAqLworCitjbGFzcyBmbWFfZGVmZXJyaW5nX3N0 YXRlCit7CitwdWJsaWM6CisgIC8qIENsYXNzIGNvbnN0cnVjdG9yLiAgUGFzcyB0cnVlIGFzIFBF UkZPUk1fREVGRVJSSU5HIGluIG9yZGVyIHRvIGFjdHVhbGx5CisgICAgIGRvIGFueSBkZWZlcnJp bmcuICAqLworCisgIGZtYV9kZWZlcnJpbmdfc3RhdGUgKGJvb2wgcGVyZm9ybV9kZWZlcnJpbmcp CisgICAgOiBtX2NhbmRpZGF0ZXMgKCksIG1fbXVsX3Jlc3VsdF9zZXQgKCksIG1faW5pdGlhbF9w aGkgKE5VTEwpLAorICAgICAgbV9sYXN0X3Jlc3VsdCAoTlVMTF9UUkVFKSwgbV9kZWZlcnJpbmdf cCAocGVyZm9ybV9kZWZlcnJpbmcpIHt9CisKKyAgLyogTGlzdCBvZiBGTUEgY2FuZGlkYXRlcyBm b3Igd2hpY2ggd2UgdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBiZWVuIGRldGVybWluZWQKKyAgICAg cG9zc2libGUgYnV0IHdlIGF0IHRoaXMgcG9pbnQgaW4gQkIgYW5hbHlzaXMgd2UgZG8gbm90IGNv bnNpZGVyIHRoZW0KKyAgICAgYmVuZWZpY2lhbC4gICovCisgIGF1dG9fdmVjPGZtYV90cmFuc2Zv cm1hdGlvbl9pbmZvLCA4PiBtX2NhbmRpZGF0ZXM7CisKKyAgLyogU2V0IG9mIHJlc3VsdHMgb2Yg bXVsdGlwbGljYXRpb24gdGhhdCBhcmUgcGFydCBvZiBhbiBhbHJlYWR5IGRlZmVycmVkIEZNQQor ICAgICBjYW5kaWRhdGVzLiAgKi8KKyAgaGFzaF9zZXQ8dHJlZT4gbV9tdWxfcmVzdWx0X3NldDsK KworICAvKiBUaGUgUEhJIHRoYXQgc3VwcG9zZWRseSBmZWVkcyBiYWNrIHJlc3VsdCBvZiBhIEZN QSB0byBhbm90aGVyIG92ZXIgbG9vcAorICAgICBib3VuZGFyeS4gICovCisgIGdwaGkgKm1faW5p dGlhbF9waGk7CisKKyAgLyogUmVzdWx0IG9mIHRoZSBsYXN0IHByb2R1Y2VkIEZNQSBjYW5kaWRh dGUgb3IgTlVMTCBpZiB0aGVyZSBoYXMgbm90IGJlZW4KKyAgICAgb25lLiAgKi8KKyAgdHJlZSBt X2xhc3RfcmVzdWx0OworCisgIC8qIElmIHRydWUsIGRlZmVycmluZyBtaWdodCBzdGlsbCBiZSBw cm9maXRhYmxlLiAgSWYgZmFsc2UsIHRyYW5zZm9ybSBhbGwKKyAgICAgY2FuZGlkYXRlcyBhbmQg bm8gbG9uZ2VyIGRlZmVyLiAgKi8KKyAgYm9vbCBtX2RlZmVycmluZ19wOworfTsKKworYm9vbAor Y29udmVydF9tdWx0X3RvX2ZtYSAoZ2ltcGxlICptdWxfc3RtdCwgdHJlZSBvcDEsIHRyZWUgb3Ay LAorCQkgICAgIGZtYV9kZWZlcnJpbmdfc3RhdGUgKnN0YXRlLCB0cmVlIG11bF9jb25kID0gTlVM TF9UUkVFLAorCQkgICAgIHRyZWUgKnJldHVybl9saHMgPSBOVUxMKTsKKwogI2VuZGlmICAvKiBH Q0NfVFJFRV9TU0FfTUFUSF9PUFRTX0ggICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtcmVh c3NvYy5jYyBiL2djYy90cmVlLXNzYS1yZWFzc29jLmNjCmluZGV4IGVkYTAzYmY5OGE2Li43M2Y1 YzkzNTk1YyAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLXJlYXNzb2MuY2MKKysrIGIvZ2NjL3Ry ZWUtc3NhLXJlYXNzb2MuY2MKQEAgLTY3ODEsOCArNjc4MSw4IEBAIHRyYW5zZm9ybV9zdG10X3Rv X211bHRpcGx5IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLCBnaW1wbGUgKnN0bXQsCiAKICAg IF80ICA9IC5GTUEgKGNfNyhEKSwgZF84KEQpLCBfMyk7CiAgICBfMTEgPSAuRk1BIChhXzUoRCks IGJfNihEKSwgXzQpOyAgKi8KLXN0YXRpYyBib29sCi1yYW5rX29wc19mb3JfZm1hICh2ZWM8b3Bl cmFuZF9lbnRyeSAqPiAqb3BzKQorc3RhdGljIGludAorcmFua19vcHNfZm9yX2ZtYSAodmVjPG9w ZXJhbmRfZW50cnkgKj4gKm9wcywgdHJlZSB0eXBlKQogewogICBvcGVyYW5kX2VudHJ5ICpvZTsK ICAgdW5zaWduZWQgaW50IGk7CkBAIC02ODA0LDYgKzY4MDQsNTkgQEAgcmFua19vcHNfZm9yX2Zt YSAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcykKICAgICAgIGVsc2UKIAlvcHNfb3RoZXJzLnNh ZmVfcHVzaCAob2UpOwogICAgIH0KKworICAvKiBDaGVjayB0aGUgbGhzIG9mIE1VTFRfRVhQUnMs IGlmIHRoZXJlJ3MgYSBGTUEgY2hhaW4gd2l0aCBwYXR0ZXJuOgorCisJZCA9IC5GTUEgKGEsIGIs IGMpOworCWcgPSAuRk1BIChkLCBlLCBmKTsKKwkuLi4KKworICAgICB0aGVuIHJldHVybiAtMSwg dG8gYXZvaWQgcmV3cml0ZV9leHByX3RyZWVfcGFyYWxsZWwuICAqLworICBmbWFfZGVmZXJyaW5n X3N0YXRlIGZtYV9zdGF0ZSAoZmFsc2UpOworICBGT1JfRUFDSF9WRUNfRUxUIChvcHNfbXVsdCwg aSwgb2UpCisgICAgeworICAgICAgZ2ltcGxlICptdWxfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1U IChvZS0+b3ApOworICAgICAgdHJlZSBsaHMsIGxoczI7CisgICAgICBpZiAoY29udmVydF9tdWx0 X3RvX2ZtYSAobXVsX3N0bXQsIGdpbXBsZV9hc3NpZ25fcmhzMSAobXVsX3N0bXQpLAorCQkJICAg ICAgIGdpbXBsZV9hc3NpZ25fcmhzMiAobXVsX3N0bXQpLCAmZm1hX3N0YXRlLCBOVUxMLAorCQkJ ICAgICAgICZsaHMpKQorCXsKKwkgIC8qIENoZWNrIGZvciBNVUxUX0VYUFIgdGhhdCB1c2VzIExI Uy4gICovCisJICBpbW1fdXNlX2l0ZXJhdG9yIGltbV9pdGVyOworCSAgZ2ltcGxlICp1c2Vfc3Rt dDsKKwkgIHVzZV9vcGVyYW5kX3AgdXNlX3A7CisJICBGT1JfRUFDSF9JTU1fVVNFX0ZBU1QgKHVz ZV9wLCBpbW1faXRlciwgbGhzKQorCSAgICB7CisJICAgICAgdXNlX3N0bXQgPSBVU0VfU1RNVCAo dXNlX3ApOworCSAgICAgIGlmIChpc19naW1wbGVfZGVidWcgKHVzZV9zdG10KSkKKwkJY29udGlu dWU7CisJICAgICAgaWYgKGdpbXBsZV9iYiAodXNlX3N0bXQpICE9IGdpbXBsZV9iYiAobXVsX3N0 bXQpKQorCQljb250aW51ZTsKKworCSAgICAgIGlmIChpc19naW1wbGVfYXNzaWduICh1c2Vfc3Rt dCkKKwkJICAmJiBnaW1wbGVfYXNzaWduX3Joc19jb2RlICh1c2Vfc3RtdCkgPT0gTVVMVF9FWFBS CisJCSAgJiYgY29udmVydF9tdWx0X3RvX2ZtYSAodXNlX3N0bXQsCisJCQkJCSAgZ2ltcGxlX2Fz c2lnbl9yaHMxICh1c2Vfc3RtdCksCisJCQkJCSAgZ2ltcGxlX2Fzc2lnbl9yaHMyICh1c2Vfc3Rt dCksCisJCQkJCSAgJmZtYV9zdGF0ZSwgTlVMTCwgJmxoczIpCisJCSAgJiYgZ2ltcGxlX2JiIChT U0FfTkFNRV9ERUZfU1RNVCAobGhzMikpCisJCSAgICAgICA9PSBnaW1wbGVfYmIgKG11bF9zdG10 KSkKKwkJeworCQkgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykp CisJCSAgICB7CisJCSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwKKwkJCSAgICAgICAiRm91bmQg cG9zc2libGUgbm9uLWZsYXQgRk1BIGNoYWluLiBMSFMxOiAiKTsKKwkJICAgICAgcHJpbnRfZ2Vu ZXJpY19leHByIChkdW1wX2ZpbGUsIGxocyk7CisJCSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwg IiwgTEhTMjogIik7CisJCSAgICAgIHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBsaHMy KTsKKwkJICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG4iKTsKKwkJICAgIH0KKwkJICByZXR1 cm4gLTE7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKICAgLyogMS4gV2hlbiBvcHNfbXVsdC5s ZW5ndGggPT0gMiwgbGlrZSB0aGUgZm9sbG93aW5nIGNhc2UsCiAKICAgICAgYSAqIGIgKyBjICog ZCArIGUuCkBAIC02ODE1LDYgKzY4NjgsMTEgQEAgcmFua19vcHNfZm9yX2ZtYSAodmVjPG9wZXJh bmRfZW50cnkgKj4gKm9wcykKICAgICAgMi4gSWYgYWxsIG9wcyBhcmUgZGVmaW5lZCB3aXRoIG11 bHQsIHdlIGRvbid0IG5lZWQgdG8gcmVhcnJhbmdlIHRoZW0uICAqLwogICBpZiAob3BzX211bHQu bGVuZ3RoICgpID49IDIgJiYgb3BzX211bHQubGVuZ3RoICgpICE9IG9wc19sZW5ndGgpCiAgICAg eworICAgICAgaWYgKG1heWJlX2xlICh0cmVlX3RvX3BvbHlfaW50NjQgKFRZUEVfU0laRSAodHlw ZSkpLAorCQkgICAgcGFyYW1fYXZvaWRfZm1hX21heF9iaXRzKSkKKwkvKiBBdm9pZCByZS1hcnJh bmdlIHRvIHByb2R1Y2UgbGVzcyBGTUEgY2hhaW5zIHRoYXQgY2FuIGJlIHNsb3cuICAqLworCXJl dHVybiAxOworCiAgICAgICAvKiBQdXQgbm8tbXVsdCBvcHMgYW5kIG11bHQgb3BzIGFsdGVybmF0 ZWx5IGF0IHRoZSBlbmQgb2YgdGhlCiAJIHF1ZXVlLCB3aGljaCBpcyBjb25kdWNpdmUgdG8gZ2Vu ZXJhdGluZyBtb3JlIEZNQSBhbmQgcmVkdWNpbmcgdGhlCiAJIGxvc3Mgb2YgRk1BIHdoZW4gYnJl YWtpbmcgdGhlIGNoYWluLiAgKi8KQEAgLTY4MjksOSArNjg4Nyw5IEBAIHJhbmtfb3BzX2Zvcl9m bWEgKHZlYzxvcGVyYW5kX2VudHJ5ICo+ICpvcHMpCiAJICBpZiAob3BpbmRleCA+IDApCiAJICAg IG9waW5kZXgtLTsKIAl9Ci0gICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIHJldHVybiAxOwogICAg IH0KLSAgcmV0dXJuIGZhbHNlOworICByZXR1cm4gMDsKIH0KIC8qIFJlYXNzb2NpYXRlIGV4cHJl c3Npb25zIGluIGJhc2ljIGJsb2NrIEJCIGFuZCBpdHMgcG9zdC1kb21pbmF0b3IgYXMKICAgIGNo aWxkcmVuLgpAQCAtNjk5Nyw3ICs3MDU1LDcgQEAgcmVhc3NvY2lhdGVfYmIgKGJhc2ljX2Jsb2Nr IGJiKQogCQkgIG1hY2hpbmVfbW9kZSBtb2RlID0gVFlQRV9NT0RFIChUUkVFX1RZUEUgKGxocykp OwogCQkgIGludCBvcHNfbnVtID0gb3BzLmxlbmd0aCAoKTsKIAkJICBpbnQgd2lkdGg7Ci0JCSAg Ym9vbCBoYXNfZm1hID0gZmFsc2U7CisJCSAgaW50IGhhc19mbWEgPSAwOwogCiAJCSAgLyogRm9y IGJpbmFyeSBiaXQgb3BlcmF0aW9ucywgaWYgdGhlcmUgYXJlIGF0IGxlYXN0IDMKIAkJICAgICBv cGVyYW5kcyBhbmQgdGhlIGxhc3Qgb3BlcmFuZCBpbiBPUFMgaXMgYSBjb25zdGFudCwKQEAgLTcw MjAsNyArNzA3OCw3IEBAIHJlYXNzb2NpYXRlX2JiIChiYXNpY19ibG9jayBiYikKIAkJCQkJCSAg ICAgIG9wdF90eXBlKQogCQkgICAgICAmJiAocmhzX2NvZGUgPT0gUExVU19FWFBSIHx8IHJoc19j b2RlID09IE1JTlVTX0VYUFIpKQogCQkgICAgewotCQkgICAgICBoYXNfZm1hID0gcmFua19vcHNf Zm9yX2ZtYSAoJm9wcyk7CisJCSAgICAgIGhhc19mbWEgPSByYW5rX29wc19mb3JfZm1hICgmb3Bz LCBUUkVFX1RZUEUgKGxocykpOwogCQkgICAgfQogCiAJCSAgLyogT25seSByZXdyaXRlIHRoZSBl eHByZXNzaW9uIHRyZWUgdG8gcGFyYWxsZWwgaW4gdGhlCkBAIC03MDI4LDYgKzcwODYsNyBAQCBy ZWFzc29jaWF0ZV9iYiAoYmFzaWNfYmxvY2sgYmIpCiAJCSAgICAgd2l0aCBpbml0aWFsIGxpbmVh cml6YXRpb24uICAqLwogCQkgIGlmICghcmVhc3NvY19pbnNlcnRfcG93aV9wCiAJCSAgICAgICYm IG9wcy5sZW5ndGggKCkgPiAzCisJCSAgICAgICYmIGhhc19mbWEgPj0gMAogCQkgICAgICAmJiAo d2lkdGggPSBnZXRfcmVhc3NvY2lhdGlvbl93aWR0aCAob3BzX251bSwgcmhzX2NvZGUsCiAJCQkJ CQkJICAgbW9kZSkpID4gMSkKIAkJICAgIHsKQEAgLTcwMzcsNyArNzA5Niw3IEBAIHJlYXNzb2Np YXRlX2JiIChiYXNpY19ibG9jayBiYikKIAkJCQkgd2lkdGgpOwogCQkgICAgICByZXdyaXRlX2V4 cHJfdHJlZV9wYXJhbGxlbCAoYXNfYSA8Z2Fzc2lnbiAqPiAoc3RtdCksCiAJCQkJCQkgIHdpZHRo LAotCQkJCQkJICBoYXNfZm1hLAorCQkJCQkJICBoYXNfZm1hID4gMCwKIAkJCQkJCSAgb3BzKTsK IAkJICAgIH0KIAkJICBlbHNlCkBAIC03MDQ2LDcgKzcxMDUsNyBAQCByZWFzc29jaWF0ZV9iYiAo YmFzaWNfYmxvY2sgYmIpCiAJCQkgdG8gbWFrZSBzdXJlIHRoZSBvbmVzIHRoYXQgZ2V0IHRoZSBk b3VibGUKIAkJCSBiaW5hcnkgb3AgYXJlIGNob3NlbiB3aXNlbHkuICAqLwogCQkgICAgICBpbnQg bGVuID0gb3BzLmxlbmd0aCAoKTsKLQkJICAgICAgaWYgKGxlbiA+PSAzICYmICFoYXNfZm1hKQor CQkgICAgICBpZiAobGVuID49IDMgJiYgaGFzX2ZtYSA9PSAwKQogCQkJc3dhcF9vcHNfZm9yX2Jp bmFyeV9zdG10IChvcHMsIGxlbiAtIDMpOwogCiAJCSAgICAgIG5ld19saHMgPSByZXdyaXRlX2V4 cHJfdHJlZSAoc3RtdCwgcmhzX2NvZGUsIDAsIG9wcywKLS0gCjIuMjUuMQoK --_002_SN6PR01MB4240BCADC30D5B7F3CB37C97E82DASN6PR01MB4240prod_--