From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2109.outbound.protection.outlook.com [40.107.220.109]) by sourceware.org (Postfix) with ESMTPS id 761AE3858C5E for ; Tue, 11 Jul 2023 02:59:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 761AE3858C5E 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=ItYNCedWF46jQWpVOnTm1H+z+XJ5TKWnJmj1E2GWSbIDq+uiCHULvAhnxNMtFXDsRvICfzOiDfbAdDH4uhWE/vk3//HCzz5VsIS34/CjvzGXgaoQiUjbHDXjSejEVWSB9Kwkq4Xw8bObBHumaczFHIjgatkO9whdfO+kFPJuCdgqCC8SW0Gr9km3mV2Q1lhKrdA4fGj9fqEbXzZTqoe6m1Q3RAYqA7iAn6NKwf0waZ/HGLdFZPVXCC8eEE4lkI+h5EZ7/h+ao/ubXjtt2OYW3UoxgyxgOJPzyf07lpaAdybS5eBlD5UVQezYUmVKludXhVku4SCric2uPT1tvXN/FA== 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=Cvu78Y0axUIQbHLPef2X1PFw+98/v3Ordl9GEJuDmb4=; b=ZXlE8Z96Bil6+BaTb/CH6SzByOSRPDQ3A56KXbIvKpmQ5k0ZsA86/3rO33UKKHsLoziFZ2mm0bmJ7tS52VCO4+HlQG3/iiIMiRsgB5J3e9kw1s8wW2QcAmyhus7/inWBeVMwjqS23dI1Z8GCBDpLS43t6KoWlPeHLIeNBEpA01qIRXz+bUAGxJkVUkeSx+EeujXot1xjwD75mKyXfRSlhbvMBRrHnsKOuA2aO0IMZ3D+lvQaDjnCItK4i0m45tp9polLG9QA/fTa5UhBJ2TQlo4tBjZziy71qMa6LMxBmRMt++6sWQXB/C9tvmpP1uiWZd0PgZium7UflHjNh0eA4A== 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=Cvu78Y0axUIQbHLPef2X1PFw+98/v3Ordl9GEJuDmb4=; b=c5PAK7ZOn5rkvomuOzJPr/68+pWlHXe0DzctjgB/g1MunLKERAYjK50MruI3k0wnBQVUNs/BbpLVtVfuey/lMudFTsYtPpxJW4Wv7rVAZ0QzEvyjbtLflidwgG1KYqO/25xGIRKRp22TSSp1UQRH0s4PR89uE/Y5JVTOmZgToxw= Received: from SN6PR01MB4240.prod.exchangelabs.com (2603:10b6:805:ae::22) by CH3PR01MB8538.prod.exchangelabs.com (2603:10b6:610:19d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.32; Tue, 11 Jul 2023 02:59:34 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::9274:f5f:383f:d4fb]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::9274:f5f:383f:d4fb%4]) with mapi id 15.20.6565.026; Tue, 11 Jul 2023 02:59:34 +0000 From: Di Zhao OS To: "gcc-patches@gcc.gnu.org" CC: Philipp Tomsich Subject: [PATCH v2] tree-optimization/110279- Check for nested FMA chains in reassoc Thread-Topic: [PATCH v2] tree-optimization/110279- Check for nested FMA chains in reassoc Thread-Index: AdmzYLkHfGvX/4AYTW614oCRZqZA4w== Date: Tue, 11 Jul 2023 02:59:33 +0000 Message-ID: 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=fb335f7c-2175-4681-ab26-e7823c16c0f8;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=Standard;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Name=Confidential (Default);MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SetDate=2023-07-10T18:59:34Z;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_|CH3PR01MB8538:EE_ x-ms-office365-filtering-correlation-id: 73ae73ea-aeee-4661-1081-08db81badae4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: O+eTxOLsB3rPzp3f3TnKKu3w1ND3EOKCOR/Y7C2NcLhnW4hgbXrCDuw74TKTwyPO/zzQ+SvG22WJmKuuhjdoB7Co91RG3cN0yIjlylh1IbMBplFRRiiXGVmWQCCyw3JQEFEeXxpoNci12v8MyHYs6zoUwLKTRg17RZEC68XQEGkhcI8JrfdoneeyZo7W8yspqTTprx033a1IJY+LrdYwlr792gXOwXhq5RU/NhXsCLEIH0TC3c60n93ugSBVsb0BIblUwVNU73M+A302tOBgQMGNhCND5m6uEhvnlgG03r6PxpOp5WTqo1N/dtDdDxSPJJmKwSbH1Qe2I9rS+It1sSshITajTpYCmw8HlRlU7ktEcMgMkF04+dKEF/cOlroZGTnMn76foxVrY1OCEA9PsH3oY6hhkBewynZeU6LFpabKFPHs6T7rJZujrs+SaNP4Tst0ZLQMtiB5U/HYIhn8/6Ee+YUmh8kFWh9MjPqSIvfAC7+9D7eDt/uYB3u0RgSYXhEpYcZzots98TRR5/avMaVGUR/Vv4T/mqUAANZAf2M5ZffCMfYDulCE+s+WjPUSdMZZgEgKrKXq8oeE2mz4lLv9EcVtmU38uXxNkQjAUmJQu4O/KVx86kAGXCBROOtC 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)(346002)(376002)(39850400004)(366004)(396003)(136003)(451199021)(52536014)(5660300002)(8936002)(76116006)(66946007)(66556008)(66476007)(66446008)(64756008)(41300700001)(316002)(2906002)(6916009)(4326008)(71200400001)(7696005)(9686003)(8676002)(26005)(6506007)(186003)(83380400001)(38100700002)(478600001)(122000001)(33656002)(38070700005)(55016003)(99936003)(86362001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?GjC4riAvNSmhE91BMl2pPJeOmYo9eZO5/kuyNzbBza5zbCTkyh4EQrmchGeV?= =?us-ascii?Q?5E+Lk5FnkYyTGxbAZiUmOs8PINQKLFppDdpWaixn9BzimXZkXNxo2JRQbmHL?= =?us-ascii?Q?WvmbFr9bxYhPGZd28+TtdfnCKhhevqwRryTutt3VkN+zfmHDjc86MjUA9gS5?= =?us-ascii?Q?T9ZZQ8PeLhxbSh394iosJ2OLSTmXz+J125UfBlo/+WqUd5oKpMzYXRQdbHQ1?= =?us-ascii?Q?z2PKiDRHwsDtJ18rpCp3z8ZHVZG51Ebhx7JBhShUYr98ShqzZS4IbIbopyIR?= =?us-ascii?Q?FKUwtq9wH2anPFFZe90ZAVR1iUpEpM3PiEynIosrJhjCNaQGAfx6hlM70pI1?= =?us-ascii?Q?DJpCzOJ6E44V6aFB5+QAbiM0+IOVk3CTCo28MTBLmDb/TO9xGwYe7QlswGeV?= =?us-ascii?Q?hoMeJ/OMXVFx6oA1I62ViCS9tzus2shaA5hvDQcv6VGCBZTgaEETaMQhZBA9?= =?us-ascii?Q?NVV0u6NRSIG6fKATf6McZvakKuILvvCd/pJh9dr1+dBv558RNoY4WQStJSYn?= =?us-ascii?Q?Jr+osiD+3YvYCl8gRczYvFt0K2294tgmnfgBE89lE3VJxBLKldVcYJTHpJNn?= =?us-ascii?Q?NzyQ0b+g9QUflB3EnKoswEONx8PC7sajqDC+Wg8SKBKt1TJE+D04uqG/SzpL?= =?us-ascii?Q?bEMkFC/MIhg0RdrysIRAdOtLesi2lKqXOeWYXmZAAxIQvKUAbyCMcy3vUezb?= =?us-ascii?Q?UMd6VHezfWKrXCMzHjnjpSBl62J6z0dvFUnUBlABq+4v0Syn0SoyXxrctP1W?= =?us-ascii?Q?XibmlSRu6I9nHUEU4B4+GHvbRzLpla7skb4vKxzm46M012XoLaJzGeFeDlFl?= =?us-ascii?Q?BHTYfd5S6cWMAJyiz/+vLHvIJ5tQGVMQugOj3ngP7+/Y5jMbdQNZInEBz6py?= =?us-ascii?Q?0I4CGqmIHH1XzR2WvNOmAJZQqnZdfHcr5FFkyUTyrTU1ykQh1TxBpex/3MFY?= =?us-ascii?Q?ayC2CTbpRdYuvFmWfXmCIZ4RPegD43HMetGqnL/6TqdpzseLq6vGEjLE/FrF?= =?us-ascii?Q?OyFZFMdAcyPL7Bmg7qHCfWOmens4OeFSFn5xFjhoggCAf3Vcls5dnyejjK1H?= =?us-ascii?Q?CgFTYtbt0tlpJN8wyLojhYWkXbVz8oBdnHLt6svnB8ELkpI6+pA/OiIWaslr?= =?us-ascii?Q?TByu3scWmlqaV5fSaHjrw2lzjGAFVmLR4l1kBEdDz/92WFUyphDlK3nqETGw?= =?us-ascii?Q?mfL0daVWjt41VYP5jqnY6Gek9TxuGIeqzu5ysyxcAkFJi7Nigv9I8sJ1EPWb?= =?us-ascii?Q?1oHKKXBtSG4PE3JE+5A/bWQzhtweLap6nRcwxgSeQ8jBpYFx5IibVNsddxo4?= =?us-ascii?Q?xZlOsdV1tuqQ/M5qvMlIyYpRTmBc+fNaOt8ESODyId4+sM50Km6WaeB87MDB?= =?us-ascii?Q?iw5qxvo7bt5mWfe1CXiJlnAGtVqP7TL/tDVfHqeyX7wARVS15+KycGyLllGN?= =?us-ascii?Q?+LdUSNISFQCWX7AqaxX2JF7r9NIrq81cS2A2YlSjgzg/AzUoeycJhZQoGJAs?= =?us-ascii?Q?nxKGPvixw5SmZeWL02QKbhHYRFAl2BwOayVPHyWyK6DWJaEXPcegu5VLx8Vn?= =?us-ascii?Q?q5zgWHEk8sS+TEFK+F2mq3hN10wqLru2ZT6b+Rb+ufqeE47hzgQH9CXXfhvi?= =?us-ascii?Q?RA=3D=3D?= Content-Type: multipart/mixed; boundary="_002_SN6PR01MB4240D86D91F517459328C1A8E831ASN6PR01MB4240prod_" 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: 73ae73ea-aeee-4661-1081-08db81badae4 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jul 2023 02:59:33.9293 (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: i7nnZfjcvy86C2oOhKyAQXHWuZJxDiMA1pQe4fkORlgSHQqb0dK/zlT7i39xLPvhfW9Hvu3sHt0fj3koVV2puuKK+kq/GWyWK5YDB0HonZiWT0tjzOghH+QWLnFhOXeP X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR01MB8538 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_SN6PR01MB4240D86D91F517459328C1A8E831ASN6PR01MB4240prod_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Attached is an updated version of the patch. Based on Philipp's review, some changes: 1. Defined new enum fma_state to describe the state of FMA candidates for a list of operands. (Since the tests seems simple after the change, I didn't add predicates on it.) 2. Changed return type of convert_mult_to_fma_1 and convert_mult_to_fma to tree, to remove the in/out parameter. 3. Added description of return value values of rank_ops_for_fma. --- gcc/ChangeLog: * tree-ssa-math-opts.cc (convert_mult_to_fma_1): Added new paramete= r check_only_p. Changed return type to tree. (struct fma_transformation_info): Moved to header. (class fma_deferring_state): Moved to header. (convert_mult_to_fma): Added new parameter check_only_p. Changed return type to tree. * tree-ssa-math-opts.h (struct fma_transformation_info): Moved from= .cc. (class fma_deferring_state): Moved from .cc. (convert_mult_to_fma): Add function decl. * tree-ssa-reassoc.cc (enum fma_state): Defined new enum to describ= e the state of FMA candidates for a list of operands. (rewrite_expr_tree_parallel): Changed boolean parameter to enum typ= e. (rank_ops_for_fma): Return enum fma_state. (reassociate_bb): Avoid rewriting to parallel if nested FMAs are fo= und. Thanks, Di Zhao=20 --_002_SN6PR01MB4240D86D91F517459328C1A8E831ASN6PR01MB4240prod_ 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=20766; creation-date="Fri, 07 Jul 2023 08:21:12 GMT"; modification-date="Tue, 11 Jul 2023 02:59:33 GMT" Content-Transfer-Encoding: base64 RnJvbSA1N2Y0YzE4MzkzN2NhNzFiMTJjMTY1MjQ3YWE0M2JlNjY5NzEzZDVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiRGkgWmhhbyBPUyIgPGRpemhhb0Bvcy5hbXBlcmVjb21wdXRp bmcuY29tPgpEYXRlOiBNb24sIDEwIEp1bCAyMDIzIDE3OjA4OjUxICswODAwClN1YmplY3Q6IFtQ QVRDSF0gQ2hlY2sgZm9yIG5lc3RlZCBGTUEgY2hhaW5zIGluIHJlYXNzb2MKCjEuIFJldXNlZCBj b2RlIGluIHBhc3Mgd2lkZW5pbmdfbXVsIHRvIGNoZWNrIGZvciBuZXN0ZWQgRk1BIGNoYWlucwog ICAodGhvc2UgY29ubmVjdGVkIGJ5IE1VTFRfRVhQUnMpLCBzaW5jZSByZS13cml0aW5nIHRvIHBh cmFsbGVsCiAgIGdlbmVyYXRlcyB3b3JzZSBjb2Rlcy4KCjIuIEF2b2lkIHJlLWFycmFuZ2UgdG8g cHJvZHVjZSBsZXNzIEZNQSBjaGFpbnMgdGhhdCBjYW4gYmUgc2xvdy4KCldpdGggb3B0aW9uICIt ZnVucm9sbC1sb29wcyAtT2Zhc3QgLWZsdG8iLCB0aGUgaW1wcm92ZW1lbnRzIG9mCnNwZWMyMDE3 IGZwcmF0ZSAxLWNvcHkgcnVuIGFyZToKCkFtcGVyZTE6CiAgICA1MDgubmFtZF9yICAgICAgICAg IDQuMjYlCiAgICA1MTAucGFyZXN0X3IgICAgICAgIDIuNTUlCiAgICBPdmVyYWxsICAgICAgICAg ICAgIDAuNTQlCkludGVsIFhlb246CiAgICA1MDMuYndhdmVzX3IgICAgICAgIDEuMyUKICAgIDUw OC5uYW1kX3IgICAgICAgICAgMS41OCUKICAgIG92ZXJhbGwgICAgICAgICAgICAgMC40MiUKLS0t CiBnY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmNjIHwgMTMxICsrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiBnY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmggIHwgIDUzICsrKysrKysr KysrKysrKwogZ2NjL3RyZWUtc3NhLXJlYXNzb2MuY2MgICB8IDEwMSArKysrKysrKysrKysrKysr KysrKysrKysrKy0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxOTUgaW5zZXJ0aW9ucygrKSwgOTAgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLW1hdGgtb3B0cy5jYyBiL2djYy90 cmVlLXNzYS1tYXRoLW9wdHMuY2MKaW5kZXggNjhmYzUxOGIxYWIuLjM2NGYyZjEzY2ZiIDEwMDY0 NAotLS0gYS9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmNjCisrKyBiL2djYy90cmVlLXNzYS1tYXRo LW9wdHMuY2MKQEAgLTMwNjQsMTUgKzMwNjQsMjAgQEAgY29udmVydF9wbHVzbWludXNfdG9fd2lk ZW4gKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIGdpbXBsZSAqc3RtdCwKIAogLyogR2l2ZW4g YSByZXN1bHQgTVVMX1JFU1VMVCB3aGljaCBpcyBhIHJlc3VsdCBvZiBhIG11bHRpcGxpY2F0aW9u IG9mIE9QMSBhbmQKICAgIE9QMiBhbmQgd2hpY2ggd2Uga25vdyBpcyB1c2VkIGluIHN0YXRlbWVu dHMgdGhhdCBjYW4gYmUsIHRvZ2V0aGVyIHdpdGggdGhlCi0gICBtdWx0aXBsaWNhdGlvbiwgY29u dmVydGVkIHRvIEZNQXMsIHBlcmZvcm0gdGhlIHRyYW5zZm9ybWF0aW9uLiAgKi8KKyAgIG11bHRp cGxpY2F0aW9uLCBjb252ZXJ0ZWQgdG8gRk1BcywgcGVyZm9ybSB0aGUgdHJhbnNmb3JtYXRpb24u ICBSZXR1cm5zIExIUworICAgb2YgYSBjb252ZXJ0ZWQgRk1BLgogCi1zdGF0aWMgdm9pZAotY29u dmVydF9tdWx0X3RvX2ZtYV8xICh0cmVlIG11bF9yZXN1bHQsIHRyZWUgb3AxLCB0cmVlIG9wMikK KyAgIElmIENIRUNLX09OTFlfUCBpcyB0cnVlLCBza2lwIHRoZSBhY3R1YWwgdHJhbnNmb3JtYXRp b24uICAqLworCitzdGF0aWMgdHJlZQorY29udmVydF9tdWx0X3RvX2ZtYV8xICh0cmVlIG11bF9y ZXN1bHQsIHRyZWUgb3AxLCB0cmVlIG9wMiwKKwkJICAgICAgIGJvb2wgY2hlY2tfb25seV9wID0g ZmFsc2UpCiB7CiAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAobXVsX3Jlc3VsdCk7CiAgIGdpbXBs ZSAqdXNlX3N0bXQ7CiAgIGltbV91c2VfaXRlcmF0b3IgaW1tX2l0ZXI7CiAgIGdjYWxsICpmbWFf c3RtdDsKKyAgdHJlZSBsaHMgPSBOVUxMX1RSRUU7CiAKICAgRk9SX0VBQ0hfSU1NX1VTRV9TVE1U ICh1c2Vfc3RtdCwgaW1tX2l0ZXIsIG11bF9yZXN1bHQpCiAgICAgewpAQCAtMzA5MSw4ICszMDk2 LDExIEBAIGNvbnZlcnRfbXVsdF90b19mbWFfMSAodHJlZSBtdWxfcmVzdWx0LCB0cmVlIG9wMSwg dHJlZSBvcDIpCiAJICB1c2Vfb3BlcmFuZF9wIHVzZV9wOwogCSAgZ2ltcGxlICpuZWd1c2Vfc3Rt dDsKIAkgIHNpbmdsZV9pbW1fdXNlIChnaW1wbGVfYXNzaWduX2xocyAodXNlX3N0bXQpLCAmdXNl X3AsICZuZWd1c2Vfc3RtdCk7Ci0JICBnc2lfcmVtb3ZlICgmZ3NpLCB0cnVlKTsKLQkgIHJlbGVh c2VfZGVmcyAodXNlX3N0bXQpOworCSAgaWYgKCFjaGVja19vbmx5X3ApCisJICAgIHsKKwkgICAg ICBnc2lfcmVtb3ZlICgmZ3NpLCB0cnVlKTsKKwkgICAgICByZWxlYXNlX2RlZnMgKHVzZV9zdG10 KTsKKwkgICAgfQogCiAJICB1c2Vfc3RtdCA9IG5lZ3VzZV9zdG10OwogCSAgZ3NpID0gZ3NpX2Zv cl9zdG10ICh1c2Vfc3RtdCk7CkBAIC0zMTA2LDYgKzMxMTQsMTAgQEAgY29udmVydF9tdWx0X3Rv X2ZtYV8xICh0cmVlIG11bF9yZXN1bHQsIHRyZWUgb3AxLCB0cmVlIG9wMikKIAlnY2NfdW5yZWFj aGFibGUgKCk7CiAgICAgICBhZGRvcCA9IG9wc1swXSA9PSByZXN1bHQgPyBvcHNbMV0gOiBvcHNb MF07CiAKKyAgICAgIGxocyA9IGdpbXBsZV9nZXRfbGhzICh1c2Vfc3RtdCk7CisgICAgICBpZiAo Y2hlY2tfb25seV9wKQorCXJldHVybiBsaHM7CisKICAgICAgIGlmIChjb2RlID09IE1JTlVTX0VY UFIpCiAJewogCSAgaWYgKG9wc1swXSA9PSByZXN1bHQpCkBAIC0zMTI3LDcgKzMxMzksNyBAQCBj b252ZXJ0X211bHRfdG9fZm1hXzEgKHRyZWUgbXVsX3Jlc3VsdCwgdHJlZSBvcDEsIHRyZWUgb3Ay KQogCQkJCQkgICAgICAgb3AyLCBhZGRvcCwgZWxzZV92YWx1ZSk7CiAgICAgICBlbHNlCiAJZm1h X3N0bXQgPSBnaW1wbGVfYnVpbGRfY2FsbF9pbnRlcm5hbCAoSUZOX0ZNQSwgMywgbXVsb3AxLCBv cDIsIGFkZG9wKTsKLSAgICAgIGdpbXBsZV9zZXRfbGhzIChmbWFfc3RtdCwgZ2ltcGxlX2dldF9s aHMgKHVzZV9zdG10KSk7CisgICAgICBnaW1wbGVfc2V0X2xocyAoZm1hX3N0bXQsIGxocyk7CiAg ICAgICBnaW1wbGVfY2FsbF9zZXRfbm90aHJvdyAoZm1hX3N0bXQsICFzdG10X2Nhbl90aHJvd19p bnRlcm5hbCAoY2Z1biwKIAkJCQkJCQkJICAgdXNlX3N0bXQpKTsKICAgICAgIGdzaV9yZXBsYWNl ICgmZ3NpLCBmbWFfc3RtdCwgdHJ1ZSk7CkBAIC0zMTc5LDU1ICszMTkxLDkgQEAgY29udmVydF9t dWx0X3RvX2ZtYV8xICh0cmVlIG11bF9yZXN1bHQsIHRyZWUgb3AxLCB0cmVlIG9wMikKIAogICAg ICAgd2lkZW5fbXVsX3N0YXRzLmZtYXNfaW5zZXJ0ZWQrKzsKICAgICB9Ci19Ci0KLS8qIERhdGEg bmVjZXNzYXJ5IHRvIHBlcmZvcm0gdGhlIGFjdHVhbCB0cmFuc2Zvcm1hdGlvbiBmcm9tIGEgbXVs dGlwbGljYXRpb24KLSAgIGFuZCBhbiBhZGRpdGlvbiB0byBhbiBGTUEgYWZ0ZXIgZGVjaXNpb24g aXMgdGFrZW4gaXQgc2hvdWxkIGJlIGRvbmUgYW5kIHRvCi0gICB0aGVuIGRlbGV0ZSB0aGUgbXVs dGlwbGljYXRpb24gc3RhdGVtZW50IGZyb20gdGhlIGZ1bmN0aW9uIElMLiAgKi8KLQotc3RydWN0 IGZtYV90cmFuc2Zvcm1hdGlvbl9pbmZvCi17Ci0gIGdpbXBsZSAqbXVsX3N0bXQ7Ci0gIHRyZWUg bXVsX3Jlc3VsdDsKLSAgdHJlZSBvcDE7Ci0gIHRyZWUgb3AyOwotfTsKLQotLyogU3RydWN0dXJl IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgRk1BIGRlZmVycmluZywgaS5lLiB3aGV0 aGVyIHdlIGFyZQotICAgZGVmZXJyaW5nLCB3aGV0aGVyIHRvIGNvbnRpbnVlIGRlZmVycmluZywg YW5kIGFsbCBkYXRhIG5lY2Vzc2FyeSB0byBjb21lCi0gICBiYWNrIGFuZCBwZXJmb3JtIGFsbCBk ZWZlcnJlZCB0cmFuc2Zvcm1hdGlvbnMuICAqLwotCi1jbGFzcyBmbWFfZGVmZXJyaW5nX3N0YXRl Ci17Ci1wdWJsaWM6Ci0gIC8qIENsYXNzIGNvbnN0cnVjdG9yLiAgUGFzcyB0cnVlIGFzIFBFUkZP Uk1fREVGRVJSSU5HIGluIG9yZGVyIHRvIGFjdHVhbGx5Ci0gICAgIGRvIGFueSBkZWZlcnJpbmcu ICAqLwogCi0gIGZtYV9kZWZlcnJpbmdfc3RhdGUgKGJvb2wgcGVyZm9ybV9kZWZlcnJpbmcpCi0g ICAgOiBtX2NhbmRpZGF0ZXMgKCksIG1fbXVsX3Jlc3VsdF9zZXQgKCksIG1faW5pdGlhbF9waGkg KE5VTEwpLAotICAgICAgbV9sYXN0X3Jlc3VsdCAoTlVMTF9UUkVFKSwgbV9kZWZlcnJpbmdfcCAo cGVyZm9ybV9kZWZlcnJpbmcpIHt9Ci0KLSAgLyogTGlzdCBvZiBGTUEgY2FuZGlkYXRlcyBmb3Ig d2hpY2ggd2UgdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBiZWVuIGRldGVybWluZWQKLSAgICAgcG9z c2libGUgYnV0IHdlIGF0IHRoaXMgcG9pbnQgaW4gQkIgYW5hbHlzaXMgd2UgZG8gbm90IGNvbnNp ZGVyIHRoZW0KLSAgICAgYmVuZWZpY2lhbC4gICovCi0gIGF1dG9fdmVjPGZtYV90cmFuc2Zvcm1h dGlvbl9pbmZvLCA4PiBtX2NhbmRpZGF0ZXM7Ci0KLSAgLyogU2V0IG9mIHJlc3VsdHMgb2YgbXVs dGlwbGljYXRpb24gdGhhdCBhcmUgcGFydCBvZiBhbiBhbHJlYWR5IGRlZmVycmVkIEZNQQotICAg ICBjYW5kaWRhdGVzLiAgKi8KLSAgaGFzaF9zZXQ8dHJlZT4gbV9tdWxfcmVzdWx0X3NldDsKLQot ICAvKiBUaGUgUEhJIHRoYXQgc3VwcG9zZWRseSBmZWVkcyBiYWNrIHJlc3VsdCBvZiBhIEZNQSB0 byBhbm90aGVyIG92ZXIgbG9vcAotICAgICBib3VuZGFyeS4gICovCi0gIGdwaGkgKm1faW5pdGlh bF9waGk7Ci0KLSAgLyogUmVzdWx0IG9mIHRoZSBsYXN0IHByb2R1Y2VkIEZNQSBjYW5kaWRhdGUg b3IgTlVMTCBpZiB0aGVyZSBoYXMgbm90IGJlZW4KLSAgICAgb25lLiAgKi8KLSAgdHJlZSBtX2xh c3RfcmVzdWx0OwotCi0gIC8qIElmIHRydWUsIGRlZmVycmluZyBtaWdodCBzdGlsbCBiZSBwcm9m aXRhYmxlLiAgSWYgZmFsc2UsIHRyYW5zZm9ybSBhbGwKLSAgICAgY2FuZGlkYXRlcyBhbmQgbm8g bG9uZ2VyIGRlZmVyLiAgKi8KLSAgYm9vbCBtX2RlZmVycmluZ19wOwotfTsKKyAgcmV0dXJuIGxo czsKK30KIAogLyogVHJhbnNmb3JtIGFsbCBkZWZlcnJlZCBGTUEgY2FuZGlkYXRlcyBhbmQgbWFy ayBTVEFURSBhcyBubyBsb25nZXIKICAgIGRlZmVycmluZy4gICovCkBAIC0zMjg4LDcgKzMyNTQs OSBAQCBsYXN0X2ZtYV9jYW5kaWRhdGVfZmVlZHNfaW5pdGlhbF9waGkgKGZtYV9kZWZlcnJpbmdf c3RhdGUgKnN0YXRlLAogCiAvKiBDb21iaW5lIHRoZSBtdWx0aXBsaWNhdGlvbiBhdCBNVUxfU1RN VCB3aXRoIG9wZXJhbmRzIE1VTE9QMSBhbmQgTVVMT1AyCiAgICB3aXRoIHVzZXMgaW4gYWRkaXRp b25zIGFuZCBzdWJ0cmFjdGlvbnMgdG8gZm9ybSBmdXNlZCBtdWx0aXBseS1hZGQKLSAgIG9wZXJh dGlvbnMuICBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCBhbmQgTVVMX1NUTVQgc2hvdWxkIGJl IHJlbW92ZWQuCisgICBvcGVyYXRpb25zLiAgUmV0dXJucyB0aGUgTEhTIG9mIEZNQSBpZiBzdWNj ZXNzZnVsIGFuZCBNVUxfU1RNVCBzaG91bGQgYmUKKyAgIHJlbW92ZWQsIG90aGVyd2lzZSByZXR1 cm5zIE5VTExfVFJFRS4KKwogICAgSWYgTVVMX0NPTkQgaXMgbm9ubnVsbCwgdGhlIG11bHRpcGxp Y2F0aW9uIGluIE1VTF9TVE1UIGlzIGNvbmRpdGlvbmFsCiAgICBvbiBNVUxfQ09ORCwgb3RoZXJ3 aXNlIGl0IGlzIHVuY29uZGl0aW9uYWwuCiAKQEAgLTMzMDMsMTcgKzMyNzEsMjEgQEAgbGFzdF9m bWFfY2FuZGlkYXRlX2ZlZWRzX2luaXRpYWxfcGhpIChmbWFfZGVmZXJyaW5nX3N0YXRlICpzdGF0 ZSwKICAgb3IgaXRzIHVucm9sbGVkIHZlcnNpb24sIGkuZS4gd2l0aCBzZXZlcmFsIEZNQSBjYW5k aWRhdGVzIHRoYXQgZmVlZCByZXN1bHQKICAgb2Ygb25lIGludG8gdGhlIGFkZGVuZCBvZiBhbm90 aGVyLiAgSW5zdGVhZCwgd2UgYWRkIHRoZW0gdG8gYSBsaXN0IGluIFNUQVRFCiAgIGFuZCBpZiB3 ZSBsYXRlciBkaXNjb3ZlciBhbiBGTUEgY2FuZGlkYXRlIHRoYXQgaXMgbm90IHBhcnQgb2Ygc3Vj aCBhIGNoYWluLAotICB3ZSBnbyBiYWNrIGFuZCBwZXJmb3JtIGFsbCBkZWZlcnJlZCBwYXN0IGNh bmRpZGF0ZXMuICAqLworICB3ZSBnbyBiYWNrIGFuZCBwZXJmb3JtIGFsbCBkZWZlcnJlZCBwYXN0 IGNhbmRpZGF0ZXMuCiAKLXN0YXRpYyBib29sCisgIElmIENIRUNLX09OTFlfUCBpcyB0cnVlLCBz a2lwIHRoZSBhY3R1YWwgdHJhbnNmb3JtYXRpb24gYW5kIGp1c3QgcmV0dXJuIHRoZQorICByZXN1 bHQuICAqLworCit0cmVlCiBjb252ZXJ0X211bHRfdG9fZm1hIChnaW1wbGUgKm11bF9zdG10LCB0 cmVlIG9wMSwgdHJlZSBvcDIsCi0JCSAgICAgZm1hX2RlZmVycmluZ19zdGF0ZSAqc3RhdGUsIHRy ZWUgbXVsX2NvbmQgPSBOVUxMX1RSRUUpCisJCSAgICAgZm1hX2RlZmVycmluZ19zdGF0ZSAqc3Rh dGUsIHRyZWUgbXVsX2NvbmQsCisJCSAgICAgYm9vbCBjaGVja19vbmx5X3ApCiB7CiAgIHRyZWUg bXVsX3Jlc3VsdCA9IGdpbXBsZV9nZXRfbGhzIChtdWxfc3RtdCk7CiAgIC8qIElmIHRoZXJlIGlz bid0IGEgTEhTIHRoZW4gdGhpcyBjYW4ndCBiZSBhbiBGTUEuICBUaGVyZSBjYW4gYmUgbm8gTEhT CiAgICAgIGlmIHRoZSBzdGF0ZW1lbnQgd2FzIGxlZnQganVzdCBmb3IgdGhlIHNpZGUtZWZmZWN0 cy4gICovCiAgIGlmICghbXVsX3Jlc3VsdCkKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu IE5VTExfVFJFRTsKICAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChtdWxfcmVzdWx0KTsKICAgZ2lt cGxlICp1c2Vfc3RtdCwgKm5lZ3VzZV9zdG10OwogICB1c2Vfb3BlcmFuZF9wIHVzZV9wOwpAQCAt MzMyMSwyNCArMzI5MywyNCBAQCBjb252ZXJ0X211bHRfdG9fZm1hIChnaW1wbGUgKm11bF9zdG10 LCB0cmVlIG9wMSwgdHJlZSBvcDIsCiAKICAgaWYgKEZMT0FUX1RZUEVfUCAodHlwZSkKICAgICAg ICYmIGZsYWdfZnBfY29udHJhY3RfbW9kZSAhPSBGUF9DT05UUkFDVF9GQVNUKQotICAgIHJldHVy biBmYWxzZTsKKyAgICByZXR1cm4gTlVMTF9UUkVFOwogCiAgIC8qIFdlIGRvbid0IHdhbnQgdG8g ZG8gYml0ZmllbGQgcmVkdWN0aW9uIG9wcy4gICovCiAgIGlmIChJTlRFR1JBTF9UWVBFX1AgKHR5 cGUpCiAgICAgICAmJiAoIXR5cGVfaGFzX21vZGVfcHJlY2lzaW9uX3AgKHR5cGUpIHx8IFRZUEVf T1ZFUkZMT1dfVFJBUFMgKHR5cGUpKSkKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIE5V TExfVFJFRTsKIAogICAvKiBJZiB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBpdCwgZG9uJ3Qg Z2VuZXJhdGUgaXQuICBXZSBhc3N1bWUgdGhhdAogICAgICBpZiBmbWEgaXNuJ3QgYXZhaWxhYmxl IHRoZW4gZm1zLCBmbm1hIG9yIGZubXMgYXJlIG5vdCBlaXRoZXIuICAqLwogICBvcHRpbWl6YXRp b25fdHlwZSBvcHRfdHlwZSA9IGJiX29wdGltaXphdGlvbl90eXBlIChnaW1wbGVfYmIgKG11bF9z dG10KSk7CiAgIGlmICghZGlyZWN0X2ludGVybmFsX2ZuX3N1cHBvcnRlZF9wIChJRk5fRk1BLCB0 eXBlLCBvcHRfdHlwZSkpCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBOVUxMX1RSRUU7 CiAKICAgLyogSWYgdGhlIG11bHRpcGxpY2F0aW9uIGhhcyB6ZXJvIHVzZXMsIGl0IGlzIGtlcHQg YXJvdW5kIHByb2JhYmx5IGJlY2F1c2UKICAgICAgb2YgLWZub24tY2FsbC1leGNlcHRpb25zLiAg RG9uJ3Qgb3B0aW1pemUgaXQgYXdheSBpbiB0aGF0IGNhc2UsCiAgICAgIGl0IGlzIERDRSBqb2Iu ICAqLwogICBpZiAoaGFzX3plcm9fdXNlcyAobXVsX3Jlc3VsdCkpCi0gICAgcmV0dXJuIGZhbHNl OworICAgIHJldHVybiBOVUxMX1RSRUU7CiAKICAgYm9vbCBjaGVja19kZWZlcgogICAgID0gKHN0 YXRlLT5tX2RlZmVycmluZ19wCkBAIC0zMzU4LDcgKzMzMzAsNyBAQCBjb252ZXJ0X211bHRfdG9f Zm1hIChnaW1wbGUgKm11bF9zdG10LCB0cmVlIG9wMSwgdHJlZSBvcDIsCiAgICAgIGJlY2F1c2Ug dGhlIHJlc3VsdCBpcyBub3QgYSBuYXR1cmFsIEZNQSBjaGFpbi4gICovCiAgIGlmIChBTllfSU5U RUdSQUxfVFlQRV9QICh0eXBlKQogICAgICAgJiYgIWhhc19zaW5nbGVfdXNlIChtdWxfcmVzdWx0 KSkKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIE5VTExfVFJFRTsKIAogICAvKiBNYWtl IHN1cmUgdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gc3RhdGVtZW50IGJlY29tZXMgZGVhZCBhZnRl cgogICAgICB0aGUgdHJhbnNmb3JtYXRpb24sIHRodXMgdGhhdCBhbGwgdXNlcyBhcmUgdHJhbnNm b3JtZWQgdG8gRk1Bcy4KQEAgLTMzODQsNyArMzM1Niw3IEBAIGNvbnZlcnRfbXVsdF90b19mbWEg KGdpbXBsZSAqbXVsX3N0bXQsIHRyZWUgb3AxLCB0cmVlIG9wMiwKIAkgdG8gZm9ybSBhIGZtYSBp biB0aGUgdGhlbiBibG9jayBhbmQgc2luayB0aGUgbXVsdGlwbGljYXRpb24gdG8gdGhlCiAJIGVs c2UgYmxvY2suICAqLwogICAgICAgaWYgKGdpbXBsZV9iYiAodXNlX3N0bXQpICE9IGdpbXBsZV9i YiAobXVsX3N0bXQpKQotCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gTlVMTF9UUkVFOwogCiAgICAg ICAvKiBBIG5lZ2F0ZSBvbiB0aGUgbXVsdGlwbGljYXRpb24gbGVhZHMgdG8gRk5NQS4gICovCiAg ICAgICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAodXNlX3N0bXQpCkBAIC0zMzk3LDcgKzMzNjksNyBA QCBjb252ZXJ0X211bHRfdG9fZm1hIChnaW1wbGUgKm11bF9zdG10LCB0cmVlIG9wMSwgdHJlZSBv cDIsCiAJICAgICBuZWdhdGVzIG9mIHRoZSBzYW1lIHZhbHVlLCB0cmVhdCB0aGVtIGFzIGVxdWl2 YWxlbnQKIAkgICAgIHRvIGEgc2luZ2xlIG5lZ2F0ZSB3aXRoIG11bHRpcGxlIHVzZXMuICAqLwog CSAgaWYgKHNlZW5fbmVnYXRlX3ApCi0JICAgIHJldHVybiBmYWxzZTsKKwkgICAgcmV0dXJuIE5V TExfVFJFRTsKIAogCSAgcmVzdWx0ID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHVzZV9zdG10KTsKIApA QCAtMzQwNSwxNyArMzM3NywxNyBAQCBjb252ZXJ0X211bHRfdG9fZm1hIChnaW1wbGUgKm11bF9z dG10LCB0cmVlIG9wMSwgdHJlZSBvcDIsCiAJICAgICBzaW5nbGUgdHJhbnNmb3JtYXRpb24uICAq LwogCSAgaWYgKCFzaW5nbGVfaW1tX3VzZSAoZ2ltcGxlX2Fzc2lnbl9saHMgKHVzZV9zdG10KSwK IAkJCSAgICAgICAmdXNlX3AsICZuZWd1c2Vfc3RtdCkpCi0JICAgIHJldHVybiBmYWxzZTsKKwkg ICAgcmV0dXJuIE5VTExfVFJFRTsKIAogCSAgLyogTWFrZSBzdXJlIHRoZSBtdWx0aXBsaWNhdGlv biBpc24ndCBhbHNvIHVzZWQgb24gdGhhdCBzdG10LiAgKi8KIAkgIEZPUl9FQUNIX1BISV9PUl9T VE1UX1VTRSAodXNlcCwgbmVndXNlX3N0bXQsIGl0ZXIsIFNTQV9PUF9VU0UpCiAJICAgIGlmIChV U0VfRlJPTV9QVFIgKHVzZXApID09IG11bF9yZXN1bHQpCi0JICAgICAgcmV0dXJuIGZhbHNlOwor CSAgICAgIHJldHVybiBOVUxMX1RSRUU7CiAKIAkgIC8qIFJlLXZhbGlkYXRlLiAgKi8KIAkgIHVz ZV9zdG10ID0gbmVndXNlX3N0bXQ7CiAJICBpZiAoZ2ltcGxlX2JiICh1c2Vfc3RtdCkgIT0gZ2lt cGxlX2JiIChtdWxfc3RtdCkpCi0JICAgIHJldHVybiBmYWxzZTsKKwkgICAgcmV0dXJuIE5VTExf VFJFRTsKIAogCSAgbmVnYXRlX3AgPSBzZWVuX25lZ2F0ZV9wID0gdHJ1ZTsKIAl9CkBAIC0zNDI0 LDcgKzMzOTYsNyBAQCBjb252ZXJ0X211bHRfdG9fZm1hIChnaW1wbGUgKm11bF9zdG10LCB0cmVl IG9wMSwgdHJlZSBvcDIsCiAgICAgICB0cmVlX2NvZGUgY29kZTsKICAgICAgIGlmICghY2FuX2lu dGVycHJldF9hc19jb25kaXRpb25hbF9vcF9wICh1c2Vfc3RtdCwgJmNvbmQsICZjb2RlLCBvcHMs CiAJCQkJCSAgICAgICZlbHNlX3ZhbHVlKSkKLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIE5VTExf VFJFRTsKIAogICAgICAgc3dpdGNoIChjb2RlKQogCXsKQEAgLTM0MzYsMTggKzM0MDgsMTggQEAg Y29udmVydF9tdWx0X3RvX2ZtYSAoZ2ltcGxlICptdWxfc3RtdCwgdHJlZSBvcDEsIHRyZWUgb3Ay LAogCSAgYnJlYWs7CiAJZGVmYXVsdDoKIAkgIC8qIEZNQSBjYW4gb25seSBiZSBmb3JtZWQgZnJv bSBQTFVTIGFuZCBNSU5VUy4gICovCi0JICByZXR1cm4gZmFsc2U7CisJICByZXR1cm4gTlVMTF9U UkVFOwogCX0KIAogICAgICAgaWYgKG11bF9jb25kICYmIGNvbmQgIT0gbXVsX2NvbmQpCi0JcmV0 dXJuIGZhbHNlOworCXJldHVybiBOVUxMX1RSRUU7CiAKICAgICAgIGlmIChjb25kKQogCXsKIAkg IGlmIChjb25kID09IHJlc3VsdCB8fCBlbHNlX3ZhbHVlID09IHJlc3VsdCkKLQkgICAgcmV0dXJu IGZhbHNlOworCSAgICByZXR1cm4gTlVMTF9UUkVFOwogCSAgaWYgKCFkaXJlY3RfaW50ZXJuYWxf Zm5fc3VwcG9ydGVkX3AgKElGTl9DT05EX0ZNQSwgdHlwZSwgb3B0X3R5cGUpKQotCSAgICByZXR1 cm4gZmFsc2U7CisJICAgIHJldHVybiBOVUxMX1RSRUU7CiAJfQogCiAgICAgICAvKiBJZiB0aGUg c3VidHJhaGVuZCAoT1BTWzFdKSBpcyBjb21wdXRlZCBieSBhIE1VTFRfRVhQUiB0aGF0CkBAIC0z NDY2LDE4ICszNDM4LDE4IEBAIGNvbnZlcnRfbXVsdF90b19mbWEgKGdpbXBsZSAqbXVsX3N0bXQs IHRyZWUgb3AxLCB0cmVlIG9wMiwKIAkgIGdpbXBsZSAqc3RtdDIgPSBTU0FfTkFNRV9ERUZfU1RN VCAob3BzWzFdKTsKIAkgIGlmIChpc19naW1wbGVfYXNzaWduIChzdG10MikKIAkgICAgICAmJiBn aW1wbGVfYXNzaWduX3Joc19jb2RlIChzdG10MikgPT0gTVVMVF9FWFBSKQotCSAgICByZXR1cm4g ZmFsc2U7CisJICAgIHJldHVybiBOVUxMX1RSRUU7CiAJfQogCiAgICAgICAvKiBXZSBjYW4ndCBo YW5kbGUgYSAqIGIgKyBhICogYi4gICovCiAgICAgICBpZiAob3BzWzBdID09IG9wc1sxXSkKLQly ZXR1cm4gZmFsc2U7CisJcmV0dXJuIE5VTExfVFJFRTsKICAgICAgIC8qIElmIGRlZmVycmluZywg bWFrZSBzdXJlIHdlIGFyZSBub3QgbG9va2luZyBhdCBhbiBpbnN0cnVjdGlvbiB0aGF0CiAJIHdv dWxkbid0IGhhdmUgZXhpc3RlZCBpZiB3ZSB3ZXJlIG5vdC4gICovCiAgICAgICBpZiAoc3RhdGUt Pm1fZGVmZXJyaW5nX3AKIAkgICYmIChzdGF0ZS0+bV9tdWxfcmVzdWx0X3NldC5jb250YWlucyAo b3BzWzBdKQogCSAgICAgIHx8IHN0YXRlLT5tX211bF9yZXN1bHRfc2V0LmNvbnRhaW5zIChvcHNb MV0pKSkKLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIE5VTExfVFJFRTsKIAogICAgICAgaWYgKGNo ZWNrX2RlZmVyKQogCXsKQEAgLTM1NDQsMTQgKzM1MTYsMTMgQEAgY29udmVydF9tdWx0X3RvX2Zt YSAoZ2ltcGxlICptdWxfc3RtdCwgdHJlZSBvcDEsIHRyZWUgb3AyLAogCSAgZnByaW50ZiAoZHVt cF9maWxlLCAiXG4iKTsKIAl9CiAKLSAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIHJldHVybiBO VUxMX1RSRUU7CiAgICAgfQogICBlbHNlCiAgICAgewogICAgICAgaWYgKHN0YXRlLT5tX2RlZmVy cmluZ19wKQogCWNhbmNlbF9mbWFfZGVmZXJyaW5nIChzdGF0ZSk7Ci0gICAgICBjb252ZXJ0X211 bHRfdG9fZm1hXzEgKG11bF9yZXN1bHQsIG9wMSwgb3AyKTsKLSAgICAgIHJldHVybiB0cnVlOwor ICAgICAgcmV0dXJuIGNvbnZlcnRfbXVsdF90b19mbWFfMSAobXVsX3Jlc3VsdCwgb3AxLCBvcDIs IGNoZWNrX29ubHlfcCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbWF0 aC1vcHRzLmggYi9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmgKaW5kZXggNTJiNzkzOGI1OTkuLmE0 ZjhlYzU3ZGE2IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmgKKysrIGIvZ2Nj L3RyZWUtc3NhLW1hdGgtb3B0cy5oCkBAIC0yMyw0ICsyMyw1NyBAQCBhbG9uZyB3aXRoIEdDQzsg c2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogZXh0ZXJuIHRyZWUgcG93aV9hc19t dWx0cyAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgbG9jYXRpb25fdCwKIAkJCSAgIHRyZWUsIEhP U1RfV0lERV9JTlQpOwogCisvKiBEYXRhIG5lY2Vzc2FyeSB0byBwZXJmb3JtIHRoZSBhY3R1YWwg dHJhbnNmb3JtYXRpb24gZnJvbSBhIG11bHRpcGxpY2F0aW9uCisgICBhbmQgYW4gYWRkaXRpb24g dG8gYW4gRk1BIGFmdGVyIGRlY2lzaW9uIGlzIHRha2VuIGl0IHNob3VsZCBiZSBkb25lIGFuZCB0 bworICAgdGhlbiBkZWxldGUgdGhlIG11bHRpcGxpY2F0aW9uIHN0YXRlbWVudCBmcm9tIHRoZSBm dW5jdGlvbiBJTC4gICovCisKK3N0cnVjdCBmbWFfdHJhbnNmb3JtYXRpb25faW5mbworeworICBn aW1wbGUgKm11bF9zdG10OworICB0cmVlIG11bF9yZXN1bHQ7CisgIHRyZWUgb3AxOworICB0cmVl IG9wMjsKK307CisKKy8qIFN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9m IEZNQSBkZWZlcnJpbmcsIGkuZS4gd2hldGhlciB3ZSBhcmUKKyAgIGRlZmVycmluZywgd2hldGhl ciB0byBjb250aW51ZSBkZWZlcnJpbmcsIGFuZCBhbGwgZGF0YSBuZWNlc3NhcnkgdG8gY29tZQor ICAgYmFjayBhbmQgcGVyZm9ybSBhbGwgZGVmZXJyZWQgdHJhbnNmb3JtYXRpb25zLiAgKi8KKwor Y2xhc3MgZm1hX2RlZmVycmluZ19zdGF0ZQoreworcHVibGljOgorICAvKiBDbGFzcyBjb25zdHJ1 Y3Rvci4gIFBhc3MgdHJ1ZSBhcyBQRVJGT1JNX0RFRkVSUklORyBpbiBvcmRlciB0byBhY3R1YWxs eQorICAgICBkbyBhbnkgZGVmZXJyaW5nLiAgKi8KKworICBmbWFfZGVmZXJyaW5nX3N0YXRlIChi b29sIHBlcmZvcm1fZGVmZXJyaW5nKQorICAgIDogbV9jYW5kaWRhdGVzICgpLCBtX211bF9yZXN1 bHRfc2V0ICgpLCBtX2luaXRpYWxfcGhpIChOVUxMKSwKKyAgICAgIG1fbGFzdF9yZXN1bHQgKE5V TExfVFJFRSksIG1fZGVmZXJyaW5nX3AgKHBlcmZvcm1fZGVmZXJyaW5nKSB7fQorCisgIC8qIExp c3Qgb2YgRk1BIGNhbmRpZGF0ZXMgZm9yIHdoaWNoIHdlIHRoZSB0cmFuc2Zvcm1hdGlvbiBoYXMg YmVlbiBkZXRlcm1pbmVkCisgICAgIHBvc3NpYmxlIGJ1dCB3ZSBhdCB0aGlzIHBvaW50IGluIEJC IGFuYWx5c2lzIHdlIGRvIG5vdCBjb25zaWRlciB0aGVtCisgICAgIGJlbmVmaWNpYWwuICAqLwor ICBhdXRvX3ZlYzxmbWFfdHJhbnNmb3JtYXRpb25faW5mbywgOD4gbV9jYW5kaWRhdGVzOworCisg IC8qIFNldCBvZiByZXN1bHRzIG9mIG11bHRpcGxpY2F0aW9uIHRoYXQgYXJlIHBhcnQgb2YgYW4g YWxyZWFkeSBkZWZlcnJlZCBGTUEKKyAgICAgY2FuZGlkYXRlcy4gICovCisgIGhhc2hfc2V0PHRy ZWU+IG1fbXVsX3Jlc3VsdF9zZXQ7CisKKyAgLyogVGhlIFBISSB0aGF0IHN1cHBvc2VkbHkgZmVl ZHMgYmFjayByZXN1bHQgb2YgYSBGTUEgdG8gYW5vdGhlciBvdmVyIGxvb3AKKyAgICAgYm91bmRh cnkuICAqLworICBncGhpICptX2luaXRpYWxfcGhpOworCisgIC8qIFJlc3VsdCBvZiB0aGUgbGFz dCBwcm9kdWNlZCBGTUEgY2FuZGlkYXRlIG9yIE5VTEwgaWYgdGhlcmUgaGFzIG5vdCBiZWVuCisg ICAgIG9uZS4gICovCisgIHRyZWUgbV9sYXN0X3Jlc3VsdDsKKworICAvKiBJZiB0cnVlLCBkZWZl cnJpbmcgbWlnaHQgc3RpbGwgYmUgcHJvZml0YWJsZS4gIElmIGZhbHNlLCB0cmFuc2Zvcm0gYWxs CisgICAgIGNhbmRpZGF0ZXMgYW5kIG5vIGxvbmdlciBkZWZlci4gICovCisgIGJvb2wgbV9kZWZl cnJpbmdfcDsKK307CisKK3RyZWUKK2NvbnZlcnRfbXVsdF90b19mbWEgKGdpbXBsZSAqbXVsX3N0 bXQsIHRyZWUgb3AxLCB0cmVlIG9wMiwKKwkJICAgICBmbWFfZGVmZXJyaW5nX3N0YXRlICpzdGF0 ZSwgdHJlZSBtdWxfY29uZCA9IE5VTExfVFJFRSwKKwkJICAgICBib29sIGNoZWNrX29ubHlfcCA9 IGZhbHNlKTsKKwogI2VuZGlmICAvKiBHQ0NfVFJFRV9TU0FfTUFUSF9PUFRTX0ggICovCmRpZmYg LS1naXQgYS9nY2MvdHJlZS1zc2EtcmVhc3NvYy5jYyBiL2djYy90cmVlLXNzYS1yZWFzc29jLmNj CmluZGV4IGVkYTAzYmY5OGE2Li45ZDUzNDcyZTM5MCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3Nh LXJlYXNzb2MuY2MKKysrIGIvZ2NjL3RyZWUtc3NhLXJlYXNzb2MuY2MKQEAgLTU0NzEsNiArNTQ3 MSwyMiBAQCBnZXRfcmVhc3NvY2lhdGlvbl93aWR0aCAoaW50IG9wc19udW0sIGVudW0gdHJlZV9j b2RlIG9wYywKICAgcmV0dXJuIHdpZHRoOwogfQogCisvKiBUaGlzIGVudW0gZGVzY3JpYmVzIHRo ZSBzdGF0ZSBvZiBGTUEgY2FuZGlkYXRlcyBmb3IgYSBsaXN0IG9mIG9wZXJhbmRzLiAgKi8KKwor ZW51bSBmbWFfc3RhdGUgeworICAvKiBUaGVyZSBpcyBhdCBtb3N0IG9uZSBGTUEgY2FuZGlkYXRl IGluIHRoZSBvcCBsaXN0LiAgSW4gdGhpcyBjYXNlLCBubworICAgICBzcGVjaWFsIHRyZWF0bWVu dCBpcyBuZWVkZWQgd2hlbiByZXdyaXRpbmcgZXhwcmVzc2lvbiB0cmVlLiAgKi8KKyAgRk1BX1NU QVRFX05PTkVfT1JfU0lOR0xFID0gMCwKKworICAvKiBUaGUgcmVzdWx0IG9mIGEgRk1BIGlzIHRo ZSBmaXJzdCBvciBzZWNvbmQgb3BlcmFuZCBvZiBhbm90aGVyIEZNQS4gIEluCisgICAgIHRoaXMg Y2FzZSwgcmV3cml0aW5nIGV4cHJlc3Npb24gdHJlZSBzaG91bGQgYmUgYXZvaWRlZC4gICovCisg IEZNQV9TVEFURV9ORVNURUQsCisKKyAgLyogVGhlcmUgYXJlIG11bHRpcGxlIEZNQSBjYW5kaWRh dGVzIGluIHRoZSBvcCBsaXN0LiAgQXZvaWQgc3dhcHBpbmcgb3BlcmFuZHMKKyAgICAgaW4gdGhp cyBjYXNlLiAgKi8KKyAgRk1BX1NUQVRFX01VTFRJUExFCit9OworCiAjZGVmaW5lIFNQRUNJQUxf QklBU0VEX0VORF9TVE1UIDAgLyogSXQgaXMgdGhlIGVuZCBzdG10IG9mIGFsbCBvcHMuICAqLwog I2RlZmluZSBCSUFTRURfRU5EX1NUTVQgMSAvKiBJdCBpcyB0aGUgZW5kIHN0bXQgb2Ygbm9ybWFs IG9yIGJpYXNlZCBvcHMuICAqLwogI2RlZmluZSBOT1JNQUxfRU5EX1NUTVQgMiAvKiBJdCBpcyB0 aGUgZW5kIHN0bXQgb2Ygbm9ybWFsIG9wcy4gICovCkBAIC01NTA3LDcgKzU1MjMsNyBAQCBnZXRf cmVhc3NvY2lhdGlvbl93aWR0aCAoaW50IG9wc19udW0sIGVudW0gdHJlZV9jb2RlIG9wYywKICAg IFNTQTYgPSBTU0E0ICsgU1NBNTsKICAqLwogc3RhdGljIHZvaWQKLXJld3JpdGVfZXhwcl90cmVl X3BhcmFsbGVsIChnYXNzaWduICpzdG10LCBpbnQgd2lkdGgsIGJvb2wgaGFzX2ZtYSwKK3Jld3Jp dGVfZXhwcl90cmVlX3BhcmFsbGVsIChnYXNzaWduICpzdG10LCBpbnQgd2lkdGgsIGVudW0gZm1h X3N0YXRlIGZzLAogCQkJICAgIGNvbnN0IHZlYzxvcGVyYW5kX2VudHJ5ICo+ICZvcHMpCiB7CiAg IGVudW0gdHJlZV9jb2RlIG9wY29kZSA9IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQpOwpA QCAtNTU4Miw3ICs1NTk4LDcgQEAgcmV3cml0ZV9leHByX3RyZWVfcGFyYWxsZWwgKGdhc3NpZ24g KnN0bXQsIGludCB3aWR0aCwgYm9vbCBoYXNfZm1hLAogCX0KIAogICAgICAgLyogU3dhcCB0aGUg b3BlcmFuZHMgaWYgbm8gRk1BIGluIHRoZSBjaGFpbi4gICovCi0gICAgICBpZiAob3BzMS0+bGVu Z3RoICgpID4gMiAmJiAhaGFzX2ZtYSkKKyAgICAgIGlmIChvcHMxLT5sZW5ndGggKCkgPiAyICYm IGZzID09IEZNQV9TVEFURV9OT05FX09SX1NJTkdMRSkKIAlzd2FwX29wc19mb3JfYmluYXJ5X3N0 bXQgKCpvcHMxLCBvcHMxLT5sZW5ndGggKCkgLSAzKTsKIAogICAgICAgaWYgKGkgPCB3aWR0aF9h Y3RpdmUKQEAgLTY3NjcsNiArNjc4MywxMiBAQCB0cmFuc2Zvcm1fc3RtdF90b19tdWx0aXBseSAo Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwgZ2ltcGxlICpzdG10LAogfQogCiAvKiBSZWFycmFu Z2Ugb3BzIG1heSBoYXZlIG1vcmUgRk1BIHdoZW4gdGhlIGNoYWluIG1heSBoYXMgbW9yZSB0aGFu IDIgRk1Bcy4KKyAgIFJldHVybnMgdGhlIHN0YXRlIG9mIEZNQSBjYW5kaWRhdGVzIGluIE9QUzoK KyAgIC0gRk1BX1NUQVRFX05PTkVfT1JfU0lOR0xFIGlmIHRoZXJlJ3MgYXQgbW9zdCBvbmUgRk1B IGNhbmRpZGF0ZSBpbiBPUFMsCisgICAtIEZNQV9TVEFURV9ORVNURUQgaWYgYSBGTUEncyByZXN1 bHQgaXMgdGhlIGZpcnN0IG9yIHNlY29uZCBvcGVyYW5kIG9mCisgICAgIGFub3RoZXIgRk1BLAor ICAgLSBGTUFfU1RBVEVfTVVMVElQTEUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIEZNQSBjYW5kaWRh dGVzIGluIHRoZSBvcCBsaXN0LgorCiAgICBQdXQgbm8tbXVsdCBvcHMgYW5kIG11bHQgb3BzIGFs dGVybmF0ZWx5IGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLCB3aGljaCBpcwogICAgY29uZHVjaXZl IHRvIGdlbmVyYXRpbmcgbW9yZSBGTUEgYW5kIHJlZHVjaW5nIHRoZSBsb3NzIG9mIEZNQSB3aGVu IGJyZWFraW5nCiAgICB0aGUgY2hhaW4uCkBAIC02NzgxLDggKzY4MDMsOCBAQCB0cmFuc2Zvcm1f c3RtdF90b19tdWx0aXBseSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwgZ2ltcGxlICpzdG10 LAogCiAgICBfNCAgPSAuRk1BIChjXzcoRCksIGRfOChEKSwgXzMpOwogICAgXzExID0gLkZNQSAo YV81KEQpLCBiXzYoRCksIF80KTsgICovCi1zdGF0aWMgYm9vbAotcmFua19vcHNfZm9yX2ZtYSAo dmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcykKK3N0YXRpYyBlbnVtIGZtYV9zdGF0ZQorcmFua19v cHNfZm9yX2ZtYSAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcywgdHJlZSB0eXBlKQogewogICBv cGVyYW5kX2VudHJ5ICpvZTsKICAgdW5zaWduZWQgaW50IGk7CkBAIC02ODA0LDYgKzY4MjYsNTkg QEAgcmFua19vcHNfZm9yX2ZtYSAodmVjPG9wZXJhbmRfZW50cnkgKj4gKm9wcykKICAgICAgIGVs c2UKIAlvcHNfb3RoZXJzLnNhZmVfcHVzaCAob2UpOwogICAgIH0KKworICAvKiBDaGVjayB0aGUg bGhzIG9mIE1VTFRfRVhQUnMsIGlmIHRoZXJlJ3MgYSBGTUEgY2hhaW4gd2l0aCBwYXR0ZXJuOgor CisJZCA9IC5GTUEgKGEsIGIsIGMpOworCWcgPSAuRk1BIChkLCBlLCBmKTsKKwkuLi4KKworICAg ICB0aGVuIHJldHVybiBGTUFfU1RBVEVfTkVTVEVEIHRvIGF2b2lkIHJld3JpdGVfZXhwcl90cmVl X3BhcmFsbGVsLiAgKi8KKyAgZm1hX2RlZmVycmluZ19zdGF0ZSBmZHMgKGZhbHNlKTsKKyAgRk9S X0VBQ0hfVkVDX0VMVCAob3BzX211bHQsIGksIG9lKQorICAgIHsKKyAgICAgIGdpbXBsZSAqbXVs X3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAob2UtPm9wKTsKKyAgICAgIHRyZWUgbGhzLCBsaHMy OworICAgICAgaWYgKChsaHMgPSBjb252ZXJ0X211bHRfdG9fZm1hIChtdWxfc3RtdCwgZ2ltcGxl X2Fzc2lnbl9yaHMxIChtdWxfc3RtdCksCisJCQkJICAgICAgZ2ltcGxlX2Fzc2lnbl9yaHMyICht dWxfc3RtdCksICZmZHMsCisJCQkJICAgICAgTlVMTCwgdHJ1ZSkpKQorCXsKKwkgIC8qIENoZWNr IGZvciBNVUxUX0VYUFIgdGhhdCB1c2VzIExIUy4gICovCisJICBpbW1fdXNlX2l0ZXJhdG9yIGlt bV9pdGVyOworCSAgZ2ltcGxlICp1c2Vfc3RtdDsKKwkgIHVzZV9vcGVyYW5kX3AgdXNlX3A7CisJ ICBGT1JfRUFDSF9JTU1fVVNFX0ZBU1QgKHVzZV9wLCBpbW1faXRlciwgbGhzKQorCSAgICB7CisJ ICAgICAgdXNlX3N0bXQgPSBVU0VfU1RNVCAodXNlX3ApOworCSAgICAgIGlmIChpc19naW1wbGVf ZGVidWcgKHVzZV9zdG10KSkKKwkJY29udGludWU7CisJICAgICAgaWYgKGdpbXBsZV9iYiAodXNl X3N0bXQpICE9IGdpbXBsZV9iYiAobXVsX3N0bXQpKQorCQljb250aW51ZTsKKworCSAgICAgIGlm IChpc19naW1wbGVfYXNzaWduICh1c2Vfc3RtdCkKKwkJICAmJiBnaW1wbGVfYXNzaWduX3Joc19j b2RlICh1c2Vfc3RtdCkgPT0gTVVMVF9FWFBSCisJCSAgJiYgKGxoczIgPSBjb252ZXJ0X211bHRf dG9fZm1hICh1c2Vfc3RtdCwKKwkJCQkJCSAgZ2ltcGxlX2Fzc2lnbl9yaHMxICh1c2Vfc3RtdCks CisJCQkJCQkgIGdpbXBsZV9hc3NpZ25fcmhzMiAodXNlX3N0bXQpLAorCQkJCQkJICAmZmRzLCBO VUxMLCB0cnVlKSkKKwkJICAmJiBnaW1wbGVfYmIgKFNTQV9OQU1FX0RFRl9TVE1UIChsaHMyKSkK KwkJICAgICAgID09IGdpbXBsZV9iYiAobXVsX3N0bXQpKQorCQl7CisJCSAgaWYgKGR1bXBfZmls ZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwkJICAgIHsKKwkJICAgICAgZnByaW50 ZiAoZHVtcF9maWxlLAorCQkJICAgICAgICJGb3VuZCBwb3NzaWJsZSBuZXN0ZWQgRk1BIGNoYWlu LiBMSFMxOiAiKTsKKwkJICAgICAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUsIGxocyk7 CisJCSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIiwgTEhTMjogIik7CisJCSAgICAgIHByaW50 X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBsaHMyKTsKKwkJICAgICAgZnByaW50ZiAoZHVtcF9m aWxlLCAiXG4iKTsKKwkJICAgIH0KKwkJICByZXR1cm4gRk1BX1NUQVRFX05FU1RFRDsKKwkJfQor CSAgICB9CisJfQorICAgIH0KKwogICAvKiAxLiBXaGVuIG9wc19tdWx0Lmxlbmd0aCA9PSAyLCBs aWtlIHRoZSBmb2xsb3dpbmcgY2FzZSwKIAogICAgICBhICogYiArIGMgKiBkICsgZS4KQEAgLTY4 MTUsNiArNjg5MCwxMSBAQCByYW5rX29wc19mb3JfZm1hICh2ZWM8b3BlcmFuZF9lbnRyeSAqPiAq b3BzKQogICAgICAyLiBJZiBhbGwgb3BzIGFyZSBkZWZpbmVkIHdpdGggbXVsdCwgd2UgZG9uJ3Qg bmVlZCB0byByZWFycmFuZ2UgdGhlbS4gICovCiAgIGlmIChvcHNfbXVsdC5sZW5ndGggKCkgPj0g MiAmJiBvcHNfbXVsdC5sZW5ndGggKCkgIT0gb3BzX2xlbmd0aCkKICAgICB7CisgICAgICBpZiAo bWF5YmVfbGUgKHRyZWVfdG9fcG9seV9pbnQ2NCAoVFlQRV9TSVpFICh0eXBlKSksCisJCSAgICBw YXJhbV9hdm9pZF9mbWFfbWF4X2JpdHMpKQorCS8qIEF2b2lkIHJlLWFycmFuZ2UgdG8gcHJvZHVj ZSBsZXNzIEZNQSBjaGFpbnMgdGhhdCBjYW4gYmUgc2xvdy4gICovCisJcmV0dXJuIEZNQV9TVEFU RV9NVUxUSVBMRTsKKwogICAgICAgLyogUHV0IG5vLW11bHQgb3BzIGFuZCBtdWx0IG9wcyBhbHRl cm5hdGVseSBhdCB0aGUgZW5kIG9mIHRoZQogCSBxdWV1ZSwgd2hpY2ggaXMgY29uZHVjaXZlIHRv IGdlbmVyYXRpbmcgbW9yZSBGTUEgYW5kIHJlZHVjaW5nIHRoZQogCSBsb3NzIG9mIEZNQSB3aGVu IGJyZWFraW5nIHRoZSBjaGFpbi4gICovCkBAIC02ODI5LDkgKzY5MDksOSBAQCByYW5rX29wc19m b3JfZm1hICh2ZWM8b3BlcmFuZF9lbnRyeSAqPiAqb3BzKQogCSAgaWYgKG9waW5kZXggPiAwKQog CSAgICBvcGluZGV4LS07CiAJfQotICAgICAgcmV0dXJuIHRydWU7CisgICAgICByZXR1cm4gRk1B X1NUQVRFX01VTFRJUExFOwogICAgIH0KLSAgcmV0dXJuIGZhbHNlOworICByZXR1cm4gRk1BX1NU QVRFX05PTkVfT1JfU0lOR0xFOwogfQogLyogUmVhc3NvY2lhdGUgZXhwcmVzc2lvbnMgaW4gYmFz aWMgYmxvY2sgQkIgYW5kIGl0cyBwb3N0LWRvbWluYXRvciBhcwogICAgY2hpbGRyZW4uCkBAIC02 OTk3LDcgKzcwNzcsNyBAQCByZWFzc29jaWF0ZV9iYiAoYmFzaWNfYmxvY2sgYmIpCiAJCSAgbWFj aGluZV9tb2RlIG1vZGUgPSBUWVBFX01PREUgKFRSRUVfVFlQRSAobGhzKSk7CiAJCSAgaW50IG9w c19udW0gPSBvcHMubGVuZ3RoICgpOwogCQkgIGludCB3aWR0aDsKLQkJICBib29sIGhhc19mbWEg PSBmYWxzZTsKKwkJICBlbnVtIGZtYV9zdGF0ZSBmcyA9IEZNQV9TVEFURV9OT05FX09SX1NJTkdM RTsKIAogCQkgIC8qIEZvciBiaW5hcnkgYml0IG9wZXJhdGlvbnMsIGlmIHRoZXJlIGFyZSBhdCBs ZWFzdCAzCiAJCSAgICAgb3BlcmFuZHMgYW5kIHRoZSBsYXN0IG9wZXJhbmQgaW4gT1BTIGlzIGEg Y29uc3RhbnQsCkBAIC03MDIwLDcgKzcxMDAsNyBAQCByZWFzc29jaWF0ZV9iYiAoYmFzaWNfYmxv Y2sgYmIpCiAJCQkJCQkgICAgICBvcHRfdHlwZSkKIAkJICAgICAgJiYgKHJoc19jb2RlID09IFBM VVNfRVhQUiB8fCByaHNfY29kZSA9PSBNSU5VU19FWFBSKSkKIAkJICAgIHsKLQkJICAgICAgaGFz X2ZtYSA9IHJhbmtfb3BzX2Zvcl9mbWEgKCZvcHMpOworCQkgICAgICBmcyA9IHJhbmtfb3BzX2Zv cl9mbWEgKCZvcHMsIFRSRUVfVFlQRSAobGhzKSk7CiAJCSAgICB9CiAKIAkJICAvKiBPbmx5IHJl d3JpdGUgdGhlIGV4cHJlc3Npb24gdHJlZSB0byBwYXJhbGxlbCBpbiB0aGUKQEAgLTcwMjgsNiAr NzEwOCw3IEBAIHJlYXNzb2NpYXRlX2JiIChiYXNpY19ibG9jayBiYikKIAkJICAgICB3aXRoIGlu aXRpYWwgbGluZWFyaXphdGlvbi4gICovCiAJCSAgaWYgKCFyZWFzc29jX2luc2VydF9wb3dpX3AK IAkJICAgICAgJiYgb3BzLmxlbmd0aCAoKSA+IDMKKwkJICAgICAgJiYgZnMgIT0gRk1BX1NUQVRF X05FU1RFRAogCQkgICAgICAmJiAod2lkdGggPSBnZXRfcmVhc3NvY2lhdGlvbl93aWR0aCAob3Bz X251bSwgcmhzX2NvZGUsCiAJCQkJCQkJICAgbW9kZSkpID4gMSkKIAkJICAgIHsKQEAgLTcwMzcs NyArNzExOCw3IEBAIHJlYXNzb2NpYXRlX2JiIChiYXNpY19ibG9jayBiYikKIAkJCQkgd2lkdGgp OwogCQkgICAgICByZXdyaXRlX2V4cHJfdHJlZV9wYXJhbGxlbCAoYXNfYSA8Z2Fzc2lnbiAqPiAo c3RtdCksCiAJCQkJCQkgIHdpZHRoLAotCQkJCQkJICBoYXNfZm1hLAorCQkJCQkJICBmcywKIAkJ CQkJCSAgb3BzKTsKIAkJICAgIH0KIAkJICBlbHNlCkBAIC03MDQ2LDcgKzcxMjcsNyBAQCByZWFz c29jaWF0ZV9iYiAoYmFzaWNfYmxvY2sgYmIpCiAJCQkgdG8gbWFrZSBzdXJlIHRoZSBvbmVzIHRo YXQgZ2V0IHRoZSBkb3VibGUKIAkJCSBiaW5hcnkgb3AgYXJlIGNob3NlbiB3aXNlbHkuICAqLwog CQkgICAgICBpbnQgbGVuID0gb3BzLmxlbmd0aCAoKTsKLQkJICAgICAgaWYgKGxlbiA+PSAzICYm ICFoYXNfZm1hKQorCQkgICAgICBpZiAobGVuID49IDMgJiYgZnMgPT0gRk1BX1NUQVRFX05PTkVf T1JfU0lOR0xFKQogCQkJc3dhcF9vcHNfZm9yX2JpbmFyeV9zdG10IChvcHMsIGxlbiAtIDMpOwog CiAJCSAgICAgIG5ld19saHMgPSByZXdyaXRlX2V4cHJfdHJlZSAoc3RtdCwgcmhzX2NvZGUsIDAs IG9wcywKLS0gCjIuMjUuMQoK --_002_SN6PR01MB4240D86D91F517459328C1A8E831ASN6PR01MB4240prod_--