From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2134.outbound.protection.outlook.com [40.107.223.134]) by sourceware.org (Postfix) with ESMTPS id 98DF5385801A for ; Tue, 25 Oct 2022 00:18:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 98DF5385801A 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=R3vVS2FTG4M3/6DLq/wz2rw/JfSmcXhtjxcnT8d8rG0RW0i3quUq+k4XXgn+aMVZXjGvc5IuNWWlCmzMaayXnu34LpwqVIOXQUhAMb91MaZEHHFx9QMZytBNQaTtUsfbKEQ1PR8olkGF8Hi1sKKGH2OQMI/mUoCiFD/2CQ6HnYOP/xfJTd4W3D6/uTxypfmqvHjasI8XaIlMOcV6WUzwKNkgDaxWEdjJIEbL8CgvblotjkLlZOkj8YIs5K5k5yaW9a9Hj9u64WeHSptC1pWEOvHkQzqwlAcrE4cCgVbnpUBNHAR2JKiAgQ/CMiuZoCENTey2Z3PJsy5LnWxd4n5XQw== 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=e/U3yRUcvPRNzAllVz9PZu1eGtmy2DTIQ5RUsIVKoKo=; b=hs2oOWlsEHtLrwUN8AuHnKwqJnV59nKfNG4ZIwoPz0Hb2IhnNHU97t4VdkRJd7YUZZMFxOzQDUTbV24ZYLgka+6QCG+ifLtQ9T2EtpZKQK5twJd0skh4p5rvsSdAdzJcl0D5VLF02d9/tR5ruoNbx1ZRnTtbctaepcQtla0k3ba1jHYdB+U8fTd5Ud6hDwKRWkgNVARzHuhgTU301Gqp34KzHGxyMXzz90Y7FdePfuzxNW1GvyxFfxEVubJUVWNUB47WFgsBrxs7eEF1hcpB+UHn+QeXsrkdHEGho6DEGaCpaLKS4KMtOEOrtjAaD3ORh1XyTgDSEm0PfMRfsv5IgA== 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=e/U3yRUcvPRNzAllVz9PZu1eGtmy2DTIQ5RUsIVKoKo=; b=NSq/0PP2Zz6fkOQ66cVvrj1HJq2qjX0ZHcJ89buqqlE29dYu/thsuekDhL4GBhhF7FyvS08x1RH59sJb/cAVBMszGDBVe0mhZTbZfSeX81GJldwo6pMhTfwDgPXy+pcg0pUud4JABoBL81V6Ig+bop5Mtp6+63DHUIOMpFDMl6I= Received: from SN6PR01MB4240.prod.exchangelabs.com (2603:10b6:805:ae::22) by BY5PR01MB5892.prod.exchangelabs.com (2603:10b6:a03:1c9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.21; Tue, 25 Oct 2022 00:18:19 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::c123:44d:18:f7c5]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::c123:44d:18:f7c5%7]) with mapi id 15.20.5746.025; Tue, 25 Oct 2022 00:18:19 +0000 From: Di Zhao OS To: "gcc-patches@gcc.gnu.org" CC: Richard Biener Subject: [PATCH v6] tree-optimization/101186 - extend FRE with "equivalence map" for condition prediction Thread-Topic: [PATCH v6] tree-optimization/101186 - extend FRE with "equivalence map" for condition prediction Thread-Index: AdjoB0XuZRSb0/TaR2C7PpfGqc0blg== Date: Tue, 25 Oct 2022 00:18:19 +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=391a15d4-fb5a-46ae-92eb-f4036d52bc48;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=2022-10-24T23:29:52Z;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_|BY5PR01MB5892:EE_ x-ms-office365-filtering-correlation-id: 0d8cb7e1-fbfb-4e32-fb3a-08dab61e6b73 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 2MQf4Cp6WXQOdlqEx9gpRVSo3i7Yjq8vq1NOegXRmbuA+/AXFD8hFM/cbRkuzOFndLUgN3cTFzW9GpwpnxqpXNnpToMNuNBU/Dwqf3q+PQSEvw3Dt7gBL1V8JrT8urSVHXNRiZ7loKzDcMg57r12rTEw+MpSnJX5PQT18E931RrMfHDcWZY5MBoax+Jj/PzmEn3cb6pcZdH84LW008xES2XNJyj79ypAhmdEuiaUKK9FomcLVPevLhi5n9yN4Oefvqln+UCTaByT8byoKXClpba+cbAsusTMGFMbyWpuCtz3DOwnt08F08SrBNTqoAByjzCbzm6VueE+tq1BrO30e+7KF921kVkXjrctJ++qQcdsD+xs94a6RD/ZWrcVNp6TEyLj+LDdeV2pErA6//7W4XTD2UgMjzvslw6jfXUuCNIbJF+doFaaYAma2hsjzar7ThptUFKZiJ3t30P9ugb2lN2Omf4n9/sFxuB12uwK5RM73/p64QbL1Y7CGTDsggSmOFUyKtix4f4U1WBQD0AC3Hq9kWKMyzwyyplsHziYYbu5Dfr10RNsItf5i1Mz7CAFoLeD24ch64w5/VuJXjemVzhP8rYvezFtgoR/W3PSp7dBJBxb2H/QXxF8Jq3h7OKEOm3OJr66RKuxTndDG0ltqkuuKLTHRcVlzMsVrINLgxVT5OOFGYtJONyt33lNqd7MvaEtJRso/KexFQk7Si5H6JOyKB+2OYRLuH7ILK+HkVylwi2SUBCFSlRWlLiyPlBEsr1RR3a40XOp96h5GQ6V+a5rWyd/mFCRCWPy4/gRmsg= 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:(13230022)(4636009)(366004)(376002)(136003)(346002)(396003)(39850400004)(451199015)(86362001)(33656002)(84970400001)(38070700005)(99936003)(38100700002)(122000001)(186003)(83380400001)(55016003)(2906002)(4001150100001)(9686003)(7696005)(6506007)(26005)(316002)(8936002)(6916009)(76116006)(66946007)(8676002)(4326008)(66556008)(66476007)(478600001)(71200400001)(41300700001)(66446008)(52536014)(64756008)(5660300002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?x/MvOd0MfCZZ7tOlIxATuF4zGP7q75z+eH90/Rcg35WupcE+CFpNwJRfDANg?= =?us-ascii?Q?8XQr8w6CCcUryESl2OUXpogNqyY1+zH8ZKCEYySQf4Hpu5Fk7e39/M6bRO96?= =?us-ascii?Q?ZhZvEb5dmT0VDPtAXe7RNo0+XSCqrC+DWyKrIWEMVwCMYYMIfX3Cmm6ahi5N?= =?us-ascii?Q?uWiNz4aVLZ/u142x7maAUl7df4EcGLAxrJUH74O/pbX4iViXQoskQQxMUL+4?= =?us-ascii?Q?bQHehmVenIQ9bDaOfV+5837Cnn0zzuLiSpxW2ij05AewbjnQaMSvAAsK4uNu?= =?us-ascii?Q?62UsRIcn7NZFgh8f1Q8spXBGHCad2+fwqz+UlwSL8WQ4qzWwR8ttXft35bTs?= =?us-ascii?Q?AuNP17Z7fboPRLbfsZBOMabqCijgl8bpP9DRxifahCZ9zZGm6GZwsbzwK69L?= =?us-ascii?Q?hs/GvhuW9blJdlPMCjFZG3aG3OJUazikHuR/goMz0hyuHUl0NWGz1Y8osxRg?= =?us-ascii?Q?ddK5xTTAkUSFWspyGlF0ZUMljSKBKgznp53GSgz1yeX4uZ3xXfdVE+Y90VXw?= =?us-ascii?Q?28IwcB6B95tdieRVBf/q78gRj/A7CV0ZB5ZHtivdUFP9jR0unIUiDh5osgIv?= =?us-ascii?Q?Vxy57ATx0QZWZRePkG2lULoSDISlKGsHtxD63ASbFq85ToI2kdF1gKit1Sy1?= =?us-ascii?Q?HhICjYimG1mWU/mp0JrF7tJkK5h6S2n68Vd0KOrXGbQ5k8bndsf5XSWpvF6j?= =?us-ascii?Q?7FYu8j+tQFjtVgXAE9DVcV9CJ3B2ikHAua1zePGZBTo3lL4nf8QiH+XyrhHO?= =?us-ascii?Q?Vrxcv6RbMV8Dqga626e0tAvNpczRUXAR7ECLD3CQfWzyfI7CCmON22uC2vU5?= =?us-ascii?Q?McIPQnd0Fj9RgpQgWUAU33cExg77FTDdTYy5L5tfrBJmyvafEEzKiiPu7THg?= =?us-ascii?Q?zmwFzCxcjxQEDFgz4PepAfitlHq79x+YRvjn/cUjHDiC5x3lTick4ejre01f?= =?us-ascii?Q?TH1sZVVjK2xJ1oMsZKZkBBkbC+zKIUhgSqdnI6/vz036kHTbi6DjniwJlj2o?= =?us-ascii?Q?u2AZLdkIQrTlFLJibcxzJucInx0SnIOyaGgL86Iiix7hTR7Nl1PSFLXFj39N?= =?us-ascii?Q?YgEwzAHE09Xb+I7bKZ5JODsKNQofIKoFs9X6G/V8xk1U9/0M0LuUdqzjMxlq?= =?us-ascii?Q?2ZWy8AbxXehUHK4ElJYizgHXAfLXkoCTiBPebHUk4Tz/K0y2EuInP4n25wSF?= =?us-ascii?Q?IaMMrFHddbHrUcHiIAg9djtytt1XuGZqxhkvMzPI5LlPnEZDytdHPSC+K023?= =?us-ascii?Q?n0ZV9ng26q0z/TSQpy0C3M8xtGdsXYzd2/qJBd7GVC3e+G3Nr9XnCALllr4w?= =?us-ascii?Q?fb4QGhHpMnBYr2fFx/xiN5kN31uP5oXNX3JczdZ2oVOknIKvZq6C6jQlci7K?= =?us-ascii?Q?GocxlmqQQaUAfFZnsMfiX6SMpBToD4hd8ukz3mhOoOZ71BT7ryUYGpAq6nan?= =?us-ascii?Q?sDjp1IH2bKyLXvzCnJ/XnUhezxgNUeF0wtUL/xRvR/Guy6EC2gc/1bshY500?= =?us-ascii?Q?ArsVz4SCWclUe+AK81m5RRgsWSYNv8D5+fMAVXw0Yl8daHhoE87CXgGcuDUt?= =?us-ascii?Q?VAdpW1kzAwQFMMFgIxVOW8ZzlgSzNitWdT+RNlHza+KfuvQ7paadCFwC+pW7?= =?us-ascii?Q?2w=3D=3D?= Content-Type: multipart/mixed; boundary="_002_SN6PR01MB424007EDA90A5A4158AB0EE4E8319SN6PR01MB4240prod_" 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: 0d8cb7e1-fbfb-4e32-fb3a-08dab61e6b73 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Oct 2022 00:18:19.3758 (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: +FHbvsGrnL5WfIYzfs0LqqGBCyz+PBwbtt54f2EbxzCqDjTGGWs0U7NlayY/HQwRdWzuh2I6cnGhV67TxkQriTFHxm46QOqUxtyQR/0aYahY+JeZjJ/c7WYeU/nj6+Rp X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR01MB5892 X-Spam-Status: No, score=-2.4 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 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_SN6PR01MB424007EDA90A5A4158AB0EE4E8319SN6PR01MB4240prod_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Sorry for the late update. I've been on a vacation and then I spent some time updating and verifying the patch. Attached is a new version of the patch. There are some changes: 1. Store equivalences in a vn_pval chain in vn_ssa_aux, rather than in the expression hash table. (Following Richard's suggestion.) 2. Extracted insert_single_predicated_value function. 3. Simplify record_equiv_from_prev_phi a bit. 4. Changed some of the functions' names and tried to improve the comments a little. Current status of the new testcases in the patch: ssa-fre-200.c Can also be optimized by evrp ssa-fre-201.c Not optimized in trunk. ssa-fre-202.c foo() can be removed by evrp; while x + b is not folded. ssa-pre-34.c Not optimized in trunk. Initially, this patch is motivated to remove the unreachable codes in case like ssa-pre-34.c, in which we need to use equivalence relation produced from a preceding condition for another condition. VRP didn't optimize that because it needs jump threading to make the relation valid at the second condition. After browsing the mechanisms of VRP and FRE, it seems to me there are two options: 1) Teach VRP to identify related but not threaded conditions. That might require introducing value-numbering into VRP=20 to detect common expressions, and I think is too much for this.=20 2) Introduce temporary equivalence in sccvn, which I thought would change less on current code. (And along the reviews and updating patch I see how ad-hoc it was.) I saw from the talk about VN there's plan to replace predicated values by ranger. So how does it goes? Is there something I can help with? (For the case ssa-pre-34.c, I think maybe it still needs the predicated-value support, to lookup related conditional expressions.) Below are about questions in the last review: > > /* Valid hashtables storing information we have proven to be > > correct. */ > > @@ -490,9 +492,9 @@ VN_INFO (tree name) > > nary->predicated_values =3D 0; > > nary->u.result =3D boolean_true_node; > > vn_nary_op_insert_into (nary, valid_info->nary); > > - gcc_assert (nary->unwind_to =3D=3D NULL); >=20 > why's that? doesn't this mean unwinding will be broken? Previously, predicate "argument_x =3D=3D NULL" or "argument_x !=3D NULL" is always new here (because argument_x's VN is just inserted.) But with the patch, there can be slot for "argument_x =3D=3D NULL" or "argument_x !=3D NULL" already. It won't break unwinding as the new value is not linked to the unwind-chain. >=20 > > /* Also do not link it into the undo chain. */ > > last_inserted_nary =3D nary->next; > > + /* There could be a predicate already. */ > > nary->next =3D (vn_nary_op_t)(void *)-1; > > nary =3D alloc_vn_nary_op_noinit (2, &vn_tables_insert_obstack); > > init_vn_nary_op_from_pieces (nary, 2, EQ_EXPR, > > /* Compute and return the hash value for nary operation VBO1. */ > > =20 > > hashval_t > > @@ -4226,6 +4342,9 @@ init_vn_nary_op_from_stmt (vn_nary_op_t vno, gass= ign *stmt) > > for (i =3D 0; i < vno->length; ++i) > > vno->op[i] =3D gimple_op (stmt, i + 1); > > } > > + /* Insert and lookup N-ary results by the operands' equivalence head= s. */ > > + if (gimple_bb (stmt)) > > + lookup_equiv_heads (vno->length, vno->op, vno->op, gimple_bb (stmt= )); >=20 > That seems like the wrong place, the function didn't even valueize before= . To utilize temp-equivalences and get more simplified result, n-ary expressions should be always inserted and lookup by the operands' equivalence heads. So practically all the places init_vn_nary_op_from_stmt is used, lookup_equiv_heads (changed to get_equiv_heads) should be called. As I haven't found better place to put that, I just left it here in the patch.. > > visit_nary_op (tree lhs, gassign *stmt) > > { > > vn_nary_op_t vnresult; > > - tree result =3D vn_nary_op_lookup_stmt (stmt, &vnresult); > > - if (! result && vnresult) > > + unsigned length =3D vn_nary_length_from_stmt (stmt); > > + vn_nary_op_t vno > > + =3D XALLOCAVAR (struct vn_nary_op_s, sizeof_vn_nary_op (length)); > > + init_vn_nary_op_from_stmt (vno, stmt); > > + tree result =3D NULL_TREE; > > + /* Try to get a simplified result. */ > > + /* Do not simplify variable used in PHI at loop exit, or > > + simplify_peeled_chrec/constant_after_peeling may miss the loop. = */ > > + gimple *use_stmt; > > + use_operand_p use_p; > > + if (!(single_imm_use (lhs, &use_p, &use_stmt) > > + && gimple_code (use_stmt) =3D=3D GIMPLE_PHI > > + && single_succ_p (gimple_bb (use_stmt)) > > + && (single_succ_edge (gimple_bb (use_stmt))->flags & EDGE_DFS_BACK))) > > + result =3D fold_const_from_equiv_heads (vno->length, vno->opcode, = vno->op, > > + vno->type); >=20 > copy propagating conditional equivalences has proved problematic, why > do this at all when there's no actual simplification? It's a bit odd tha= t > we need a special fold_const_from_equiv_heads here, why is general > valueization not handling equivalences? Are they supposed to be only > used for simplifying conditionals? With temporary equivalences introduced, expressions like "a - equiv(a)" and "a =3D=3D equiv (a)" can be folded, and no need to store predicates like "a =3D=3D b is true". The function fold_const_from_equiv_heads is intended to limit the usage of gimple_simplify, to when a constant can be folded using equivalences. The code seems too complex but I haven't figured out how to improve it yet. (I'm not very acquainted on how to=20 use the simplifying utility properly, I hope I can get some advices here.) Also, could I have more details about "copy propagating conditional equivalences has proved problematic" ? Thank you very much, Di Zhao ---- Extend FRE with temporary equivalences. 2022-10-24 Di Zhao gcc/ChangeLog: * tree-ssa-sccvn.cc (VN_INFO): remove assertions (there could be a predicate already). (dominated_by_p_w_unex): Moved upward. (is_pval_valid_at_bb): Check if vn_pval is valid at BB. (get_equiv_head): Returns the "equivalence head" of given node. (get_equiv_heads): Get the "equivalence head"s of given nodes. (init_vn_nary_op_from_stmt): Insert and lookup nary expressions by "equivalence head"s. (insert_single_predicated_value): Extracted utility. (vn_nary_op_insert_into): Use the extracted utility insert_single_predicated_value. (fold_const_from_equiv_heads): Fold N-ary expression to constant by equiv-heads. (push_new_nary_ref): Insert a back-reference to vn_nary_op_t. (alloc_single_predicated_value): Extracted utility. (push_single_equiv): Push a new value to the equivalence list. (record_temporary_equivalence): Record temporary equivalence. (vn_nary_op_insert_pieces_predicated): Record equivalences instead of some predicates; insert back-refs. (record_equiv_from_prev_phi_1): Record temporary equivalences generated by PHI nodes. (record_equiv_from_prev_phi): Given a taken edge of a conditional branch, record equivalences generated by PHI nodes. (visit_nary_op): Lookup previous results of N-ary operations by equivalences. (insert_related_predicates_on_edge): Some predicates can be computed from equivalences, no need to insert them. (process_bb): Add lookup predicated values by equivalences. (struct unwind_state): Unwind state of back-refs and temporary equivalences. (do_unwind): Unwind the back-refs and temporary equivalences. (do_rpo_vn_1): Update unwind state of back-reference and temporary equivalences. * tree-ssa-sccvn.h (struct temp_equiv): In vn_ssa_aux, hold a list of temporary equivalences. (struct nary_ref): In vn_ssa_aux, hold a lists of references to the nary map entries. gcc/testsuite/ChangeLog: * g++.dg/pr83541.C: Disable fre. * gcc.dg/tree-ssa/pr68619-2.c: Disable fre. * gcc.dg/tree-ssa/pr71947-1.c: Disable fre. * gcc.dg/tree-ssa/pr71947-2.c: Disable fre. * gcc.dg/tree-ssa/pr71947-3.c: Disable fre. * gcc.dg/tree-ssa/pr71947-5.c: Disable fre. * gcc.dg/tree-ssa/pr71947-7.c: Disable fre. * gcc.dg/tree-ssa/pr71947-8.c: Disable fre. * gcc.dg/tree-ssa/pr71947-9.c: Disable fre. * gcc.dg/tree-ssa/vrp03.c: Disable fre. * gcc.dg/tree-ssa/ssa-fre-200.c: New test. * gcc.dg/tree-ssa/ssa-fre-201.c: New test. * gcc.dg/tree-ssa/ssa-fre-202.c: New test. * gcc.dg/tree-ssa/ssa-pre-34.c: New test. --_002_SN6PR01MB424007EDA90A5A4158AB0EE4E8319SN6PR01MB4240prod_ Content-Type: application/octet-stream; name="v6-tree-optimization-101186.patch" Content-Description: v6-tree-optimization-101186.patch Content-Disposition: attachment; filename="v6-tree-optimization-101186.patch"; size=41398; creation-date="Tue, 25 Oct 2022 00:12:06 GMT"; modification-date="Tue, 25 Oct 2022 00:18:18 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3ByODM1NDEuQyBiL2djYy90ZXN0c3Vp dGUvZysrLmRnL3ByODM1NDEuQwppbmRleCBmNWIxODFlMDY0YS4uYzlhNTUwYTZkMDggMTAwNjQ0 Ci0tLSBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3ByODM1NDEuQworKysgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy9wcjgzNTQxLkMKQEAgLTEsNiArMSw2IEBACiAvLyBQUiB0cmVlLW9wdGltaXphdGlv bi84MzU0MQogLy8geyBkZy1kbyBjb21waWxlIH0KLS8vIHsgZGctb3B0aW9ucyAiLU8zIC1zdGQ9 YysrMTcgLWZmYXN0LW1hdGggLWZkdW1wLXRyZWUtZXZycCIgIH0KKy8vIHsgZGctb3B0aW9ucyAi LU8zIC1mbm8tdHJlZS1mcmUgLXN0ZD1jKysxNyAtZmZhc3QtbWF0aCAtZmR1bXAtdHJlZS1ldnJw IiAgfQogCiAjaW5jbHVkZSA8bGltaXRzPgogCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9wcjY4NjE5LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3ByNjg2MTktMi5jCmluZGV4IGNjYTcwNmUwYzRmLi4wYTk5YzNjNjIwZSAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI2ODYxOS0yLmMKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI2ODYxOS0yLmMKQEAgLTEsNSArMSw1IEBACiAvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLwotLyogeyBkZy1vcHRpb25zICItTzIgLWZkdW1wLXRyZWUtZG9tMi1k ZXRhaWxzIC13IiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUtZnJlIC1mZHVt cC10cmVlLWRvbTItZGV0YWlscyAtdyIgfSAqLwogCiB0eXBlZGVmIHVuaW9uIHRyZWVfbm9kZSAq dHJlZTsKIHN0cnVjdCBnY2Nfb3B0aW9ucwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdHJlZS1zc2EvcHI3MTk0Ny0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9w cjcxOTQ3LTEuYwppbmRleCBhYzgyNzFjYzU3NC4uZTlhNzk3ZTgyYjAgMTAwNjQ0Ci0tLSBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctMS5jCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctMS5jCkBAIC0xLDUgKzEsNSBAQAogLyogeyBkZy1k byBjb21waWxlIH0gKi8gCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUtdnJwIC1mZHVt cC10cmVlLWRvbS1kZXRhaWxzIiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUt dnJwIC1mbm8tdHJlZS1mcmUgLWZkdW1wLXRyZWUtZG9tLWRldGFpbHMiIH0gKi8KIAogCiBpbnQg ZihpbnQgeCwgaW50IHkpCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS9wcjcxOTQ3LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctMi5j CmluZGV4IGIyYzA5Y2JiMDIxLi5iY2JjNDE5NTc1YyAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny0yLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dHJlZS1zc2EvcHI3MTk0Ny0yLmMKQEAgLTEsNSArMSw1IEBACiAvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLwotLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10cmVlLXZycCAtZmR1bXAtdHJlZS1kb20t ZGV0YWlscyIgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10cmVlLXZycCAtZm5vLXRy ZWUtZnJlIC1mZHVtcC10cmVlLWRvbS1kZXRhaWxzIiB9ICovCiAKIAogaW50IGYoaW50IHgsIGlu dCB5KQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny0z LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTMuYwppbmRleCAyMzE2 ZjdlMWMwNC4uZDYzMjkxZGE0NDAgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Ry ZWUtc3NhL3ByNzE5NDctMy5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3By NzE5NDctMy5jCkBAIC0xLDUgKzEsNSBAQAogLyogeyBkZy1kbyBjb21waWxlIH0gKi8KLS8qIHsg ZGctb3B0aW9ucyAiLU8yIC1mbm8tdHJlZS12cnAgLWZkdW1wLXRyZWUtZG9tLWRldGFpbHMiIH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8tdHJlZS12cnAgLWZuby10cmVlLWZyZSAtZmR1 bXAtdHJlZS1kb20tZGV0YWlscyIgfSAqLwogCiBpbnQgZihpbnQgeCwgaW50IHkpCiB7CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTUuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctNS5jCmluZGV4IGU3MDM4ZDAyMzdmLi5j MWU1NjY3YjQ1YSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3 MTk0Ny01LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny01LmMK QEAgLTEsNSArMSw1IEBACiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotLyogeyBkZy1vcHRpb25z ICItTzIgLWZuby10cmVlLXZycCAtZmR1bXAtdHJlZS1kb20tZGV0YWlscyIgfSAqLworLyogeyBk Zy1vcHRpb25zICItTzIgLWZuby10cmVlLXZycCAtZm5vLXRyZWUtZnJlIC1mZHVtcC10cmVlLWRv bS1kZXRhaWxzIiB9ICovCiAKIAogc3RhdGljIGlubGluZSBsb25nIGxvYWQobG9uZyAqcCkKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctNy5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny03LmMKaW5kZXggYjQ0YzA2NGFhMjMu LjA2OWU0YTEwNmMzIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9w cjcxOTQ3LTcuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTcu YwpAQCAtMSw1ICsxLDUgQEAKIC8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0vKiB7IGRnLW9wdGlv bnMgIi1PMiAtZm5vLXRyZWUtdnJwIC1mZHVtcC10cmVlLWRvbS1kZXRhaWxzIiB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUtdnJwIC1mbm8tdHJlZS1mcmUgLWZkdW1wLXRyZWUt ZG9tLWRldGFpbHMiIH0gKi8KIAogCiBpbnQgZihpbnQgeCwgaW50IHkpCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTguYyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctOC5jCmluZGV4IDI2ZTVhYmJkYzI5Li4yNmIzMDNlODk2 ZSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny04LmMK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny04LmMKQEAgLTEsNSAr MSw1IEBACiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotLyogeyBkZy1vcHRpb25zICItTzIgLWZu by10cmVlLXZycCAtZmR1bXAtdHJlZS1kb20tZGV0YWlscyIgfSAqLworLyogeyBkZy1vcHRpb25z ICItTzIgLWZuby10cmVlLXZycCAtZm5vLXRyZWUtZnJlIC1mZHVtcC10cmVlLWRvbS1kZXRhaWxz IiB9ICovCiAKIAogaW50IGYoaW50IHgsIGludCB5KQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny05LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVl LXNzYS9wcjcxOTQ3LTkuYwppbmRleCAyMmI2OGQ1ZWRlMC4uM2VkM2JmNmFkMjkgMTAwNjQ0Ci0t LSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctOS5jCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctOS5jCkBAIC0xLDUgKzEsNSBAQAogLyog eyBkZy1kbyBjb21waWxlIH0gKi8KLS8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8tdHJlZS12cnAg LWZkdW1wLXRyZWUtZG9tLWRldGFpbHMiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8t dHJlZS12cnAgLWZuby10cmVlLWZyZSAtZmR1bXAtdHJlZS1kb20tZGV0YWlscyIgfSAqLwogCiAK IGludCBmKGludCB4LCBpbnQgeSkKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Ry ZWUtc3NhL3NzYS1mcmUtMjAwLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2Et ZnJlLTIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jY2IwZmRh YTY5OAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3Nz YS1mcmUtMjAwLmMKQEAgLTAsMCArMSw0NSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLWZyZTEiIH0gKi8KKworZXh0ZXJuIHZvaWQg YmFyKHZvaWQpOworZXh0ZXJuIHZvaWQgYm9vKHZvaWQpOworZXh0ZXJuIHZvaWQgZm9vKHZvaWQp OworCisvKiBUZXN0IHRlbXBvcmFyeSBlcXVpdmFsZW5jZXM6IGJhc2ljLiAgKi8KKwordm9pZCBm ICh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgIGlmIChhID09IGIpCisgICAg eworICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGE7IGkrKykKKwl7CisJICBiYXIgKCk7 CisJICBpZiAoaSA+PSBiKQorCSAgICAvKiBVbnJlYWNoYWJsZS4gICovCisJICAgIGZvbyAoKTsK Kwl9CisgICAgfQorfQorCisvKiBUZXN0IHRlbXBvcmFyeSBlcXVpdmFsZW5jZXM6IHRyYW5zaXRp dmUuICAqLworCit2b2lkIGcgKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWdu ZWQgaW50IGMpCit7CisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjOyBpKyspCisgICAgewor ICAgICAgaWYgKGEgPT0gYikKKwl7CisJICBpZiAoYiA9PSBjKQorCSAgICB7CisJICAgICAgYm9v ICgpOworCSAgICAgIGlmIChpID49IGEpCisJCS8qIFVucmVhY2hhYmxlLiAgKi8KKwkJZm9vICgp OworCSAgICB9CisJfQorICAgIH0KK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LW5vdCAiZm9vIiAiZnJlMSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg ImJhciIgImZyZTEiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJib28i ICJmcmUxIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3NzYS1mcmUtMjAxLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtZnJlLTIw MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MjRiMjU1M2VhNQot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NzYS1mcmUt MjAxLmMKQEAgLTAsMCArMSw4MyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLWZyZTEiIH0gKi8KKworZXh0ZXJuIHZvaWQgYmFyKHZv aWQpOworZXh0ZXJuIHZvaWQgYmFnKHZvaWQpOworZXh0ZXJuIHZvaWQgYmFzcyh2b2lkKTsKK2V4 dGVybiB2b2lkIGZvbyh2b2lkKTsKKwordm9pZCBmICh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQg aW50IGIpCit7CisgIGlmIChhID09IGIpCisgICAgeworICAgICAgZm9yICh1bnNpZ25lZCBpID0g YTsgaSA8IDEwMDsgaSsrKQorCXsKKwkgIGlmIChpID4gYikKKwkgICAgLyogU2hvdWxkIG5vdCBi ZSBlbGltaW5hdGVkLiAgKi8KKwkgICAgYmFyICgpOworCX0KKyAgICB9Cit9CisKKy8qIFRlc3Qg dGVtcG9yYXJ5IGVxdWl2YWxlbmNlczogZGVyaXZlZCBjb25kaXRpb24uICAqLworCitpbnQgZ2c7 CisKK3ZvaWQgZyAoaW50IGEsIGludCBiLCBpbnQgZCkKK3sKKyAgaW50IGMgPSAxMDA7CisgIGlm IChhID4gMCkKKyAgICB7CisgICAgICBjID0gYjsKKyAgICAgIGdnKys7CisgICAgfQorICBlbHNl CisgICAgLyogYSA8PSAwICovCisgICAgeworICAgICAgYyA9IGQ7CisgICAgICBnZy0tOworICAg IH0KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBjOyBpKyspCisgICAgeworICAgICAgaWYgKGEgPj0g MCkKKwl7CisJICBpZiAoaSA+PSBiKQorCSAgICAvKiBTaG91bGQgbm90IGJlIGVsaW1pbmF0ZWQu ICgiYSA+PSAwIiBjYW5ub3QgZGVyaXZlICJhID4gMCIuKSAgKi8KKwkgICAgYmFzcyAoKTsKKwl9 CisgICAgICBlbHNlCisJLyogYSA8IDAgKi8KKwl7CisJICBpZiAoaSA+PSBkKQorCSAgICAvKiBT aG91bGQgYmUgZWxpbWluYXRlZCwgYXMgImEgPCAwIiBjYW4gZGVyaXZlICJhIDw9IDAiLiAgKi8K KwkgICAgZm9vICgpOworCX0KKyAgICB9Cit9CisKKy8qIFRlc3QgdGVtcG9yYXJ5IGVxdWl2YWxl bmNlczogbm8gZG9taW5hdGlvbi4gICovCisKK3ZvaWQgaCAodW5zaWduZWQgaW50IGEsIHVuc2ln bmVkIGludCBiKQoreworICB1bnNpZ25lZCBpbnQgYyA9IDEwMDsKKyAgaWYgKGIgJSAyKQorICAg IHsKKyAgICAgIGlmIChhICE9IDApCisJYyA9IGI7CisgICAgfQorICBmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChhICE9IDApCisJeworCSAgaWYgKGkg Pj0gYikKKwkgICAgLyogU2hvdWxkIG5vdCBiZSBlbGltaW5hdGVkLiAgKi8KKwkgICAgYmFnICgp OworCX0KKyAgICAgIGkrKzsKKyAgICB9Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAiYmFyIiAiZnJlMSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg ImJhc3MiICJmcmUxIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiYmFn IiAiZnJlMSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJmb28i ICJmcmUxIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3NzYS1mcmUtMjAyLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtZnJlLTIw Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MDk3MzBmOTM1MQot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NzYS1mcmUt MjAyLmMKQEAgLTAsMCArMSw0MyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLWZyZTEiIH0gKi8KKworZXh0ZXJuIHZvaWQgYmFyKHZv aWQpOworZXh0ZXJuIHZvaWQgYmFnKHZvaWQpOworZXh0ZXJuIHZvaWQgZm9vKHZvaWQpOworaW50 IGc7CisKKy8qIFRlc3QgdGVtcG9yYXJ5IGVxdWl2YWxlbmNlczogb3B0aW1pemUgTi1hcnkgZXhw cmVzc2lvbnMuICAqLworCit2b2lkCitmICh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIs IHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSkKK3sKKyAgaWYgKGEgPT0gYikKKyAgICB7 CisgICAgICBnID0gMTAwOworICAgICAgaWYgKGEgKyB4ID09IDk5KQorCWcgPSB4ICsgYjsgLyog c2hvdWxkIGJlIHNpbXBsaWZpZWQgdG8gOTkgKi8KKyAgICB9CisgIGVsc2UKKyAgICAvLyBhIT0g YgorICAgIHsKKyAgICAgIGlmIChhID09IDEwMCAtIHgpCisJeworCSAgZysrOworCSAgaWYgKGIg PT0gMTAwIC0geCkKKwkgICAgZm9vICgpOyAvKiBzaG91bGQgYmUgcmVtb3ZlZCAqLworCX0KKyAg ICAgIGVsc2UKKwl7CisJICBnLS07CisJICBpZiAoYiA9PSAxMDAgLSB4KQorCSAgICBiYWcgKCk7 IC8qIHNob3VsZCBub3QgYmUgcmVtb3ZlZCAqLworCSAgZWxzZQorCSAgICBiYXIgKCk7IC8qIHNo b3VsZCBub3QgYmUgcmVtb3ZlZCAqLworCX0KKyAgICB9Cit9CisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcCAiYmFnIiAiZnJlMSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgImJhciIgImZyZTEiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLW5vdCAiZm9vIiAiZnJlMSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtbm90ICI9IGJfXFswLTldK1xcKFxbQS1aXStcXCkgXFwrIHhfIiAiZnJlMSIgfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtcHJlLTM0LmMgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtcHJlLTM0LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE0MDAxZTUyNmZlCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Evc3NhLXByZS0zNC5jCkBAIC0wLDAgKzEsNjQg QEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAt dHJlZS1wcmUiIH0gKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorCitleHRlcm4gdm9pZCBiYWcodm9p ZCk7CitleHRlcm4gdm9pZCBiYXNzKHZvaWQpOworCisjZGVmaW5lIFBSSU5UKFgpIGZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgMTA7IGkrKykgcHJpbnRmICgiJXMlcyVzJXNcbiIsIFgsIFgsIFgsIFgp OworI2RlZmluZSBQUklOVDIoWCkgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDsgaSsrKSBwcmlu dGYgKCIlZCVkJWQlZFxuIiwgWCwgWCwgWCwgWCk7CisKK19faW5saW5lX18gX19hdHRyaWJ1dGVf XygoYWx3YXlzX2lubGluZSkpCit2b2lkIGFfbG9uZ19mdW5jICgpCit7CisgIFBSSU5UKCJBIik7 IFBSSU5UKCJYIik7IFBSSU5UKCJDIik7IFBSSU5UKCJEIik7IFBSSU5UKCJYIik7IFBSSU5UKCJG Iik7CisgIFBSSU5UKCJHIik7IFBSSU5UKCJIIik7IFBSSU5UKCJNIik7IFBSSU5UKCJKIik7IFBS SU5UKCJLIik7IFBSSU5UKCJMIik7CisgIFBSSU5UMigxKTsgUFJJTlQyKDcpOyBQUklOVDIoMTEx KTsgUFJJTlQyKDM0MzQpOyBQUklOVDIoMTExMSk7IFBSSU5UMig5OTkpOworICBQUklOVDIoLTkp OyBQUklOVDIoMjMyKTsgUFJJTlQyKDExMTIzMik7IFBSSU5UMig2NjYpOyBQUklOVDIoMTApOyBQ UklOVDIoLTApOworfQorCisvKiBUZXN0IHRlbXBvcmFyeSBlcXVpdmFsZW5jZXM6IGlkZW50aWNh bCBjb25kaXRpb24uICAqLworCit2b2lkIGggKGludCBhLCBpbnQgYiwgaW50IHgsIGludCB5KQor eworICBpbnQgYyA9IHk7CisgIGlmIChhICE9IDApCisgICAgYyA9IHg7CisgIHdoaWxlIChiIDwg MTAwMCkKKyAgICB7CisgICAgICBpZiAoYSAhPSAwKQorCXsKKwkgIGlmIChjID4geCkKKwkgICAg LyogVW5yZWFjaGFibGUuICAqLworCSAgICBhX2xvbmdfZnVuYyAoKTsKKwl9CisgICAgICBlbHNl CisJYmFzcyAoKTsKKyAgICAgIGIrKzsKKyAgICB9Cit9CisKKy8qIFRlc3QgdGVtcG9yYXJ5IGVx dWl2YWxlbmNlczogZGVyaXZlZCBjb25kaXRpb24uICAqLworCit2b2lkIGsgKGludCBhLCBpbnQg YiwgaW50IHgsIGludCB5KQoreworICBpbnQgYyA9IHk7CisgIGlmIChhICE9IGIpCisgICAgYyA9 IHg7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgIHsKKyAgICAgIGlmIChh IDwgYikKKwkvKiBBbGwgcGF0aHMgcmVhY2hpbmcgImE+MCBpcyB0cnVlIiBjb21lIGZyb20gImEh PTAgaXMgdHJ1ZSIuICAqLworCXsKKwkgIGlmIChjID4geCkKKwkgICAgLyogVW5yZWFjaGFibGUu ICAqLworCSAgICBhX2xvbmdfZnVuYyAoKTsKKwl9CisgICAgICBlbHNlCisJYmFnICgpOworICAg IH0KK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAicHJpbnRmIFxcKCIg InByZSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImJhZyBcXChcXCki ICJwcmUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJiYXNzIFxcKFxc KSIgInByZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS92cnAwMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJwMDMuYwppbmRleCA0 Y2JhY2E0MTMzMi4uNjliODNiNmNjMzAgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL3ZycDAzLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJw MDMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0vKiB7IGRnLW9w dGlvbnMgIi1PMiAtZmRpc2FibGUtdHJlZS1ldnJwIC1mZHVtcC10cmVlLXZycDEgLWZuby10aHJl YWQtanVtcHMiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZGlzYWJsZS10cmVlLWV2cnAg LWZkdW1wLXRyZWUtdnJwMSAtZm5vLXRocmVhZC1qdW1wcyAtZm5vLXRyZWUtZnJlIiB9ICovCiAK IHN0cnVjdCBBCiB7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2Etc2Njdm4uY2MgYi9nY2MvdHJl ZS1zc2Etc2Njdm4uY2MKaW5kZXggMzc0ODQ0MDNjNTYuLjEwZGYzYjQ2NDc5IDEwMDY0NAotLS0g YS9nY2MvdHJlZS1zc2Etc2Njdm4uY2MKKysrIGIvZ2NjL3RyZWUtc3NhLXNjY3ZuLmNjCkBAIC0z NTUsNiArMzU1LDEwIEBAIHN0YXRpYyB2bl9yZWZlcmVuY2VfdCBsYXN0X2luc2VydGVkX3JlZjsK IHN0YXRpYyB2bl9waGlfdCBsYXN0X2luc2VydGVkX3BoaTsKIHN0YXRpYyB2bl9uYXJ5X29wX3Qg bGFzdF9pbnNlcnRlZF9uYXJ5Owogc3RhdGljIHZuX3NzYV9hdXhfdCBsYXN0X3B1c2hlZF9hdmFp bDsKK3N0YXRpYyB2bl9zc2FfYXV4X3QgbGFzdF9wdXNoZWRfbmFyeV9yZWY7CitzdGF0aWMgdm5f c3NhX2F1eF90IGxhc3RfcHVzaGVkX2VxdWl2Oworc3RhdGljIG5hcnlfcmVmKiBuYXJ5X3JlZl9m cmVlbGlzdDsKK3N0YXRpYyB0ZW1wX2VxdWl2KiB0ZW1wX2VxdWl2X2ZyZWVsaXN0OwogCiAvKiBW YWxpZCBoYXNodGFibGVzIHN0b3JpbmcgaW5mb3JtYXRpb24gd2UgaGF2ZSBwcm92ZW4gdG8gYmUK ICAgIGNvcnJlY3QuICAqLwpAQCAtNDg5LDggKzQ5Myw4IEBAIFZOX0lORk8gKHRyZWUgbmFtZSkK IAkJCQkJIGJvb2xlYW5fdHlwZV9ub2RlLCBvcHMpOwogCSAgICBuYXJ5LT5wcmVkaWNhdGVkX3Zh bHVlcyA9IDA7CiAJICAgIG5hcnktPnUucmVzdWx0ID0gYm9vbGVhbl90cnVlX25vZGU7CisJICAg IC8qIFRoZXJlIGNvdWxkIGJlIGEgcHJlZGljYXRlIGFscmVhZHkuICAqLwogCSAgICB2bl9uYXJ5 X29wX2luc2VydF9pbnRvIChuYXJ5LCB2YWxpZF9pbmZvLT5uYXJ5KTsKLQkgICAgZ2NjX2Fzc2Vy dCAobmFyeS0+dW53aW5kX3RvID09IE5VTEwpOwogCSAgICAvKiBBbHNvIGRvIG5vdCBsaW5rIGl0 IGludG8gdGhlIHVuZG8gY2hhaW4uICAqLwogCSAgICBsYXN0X2luc2VydGVkX25hcnkgPSBuYXJ5 LT5uZXh0OwogCSAgICBuYXJ5LT5uZXh0ID0gKHZuX25hcnlfb3BfdCkodm9pZCAqKS0xOwpAQCAt NTAwLDcgKzUwNCw2IEBAIFZOX0lORk8gKHRyZWUgbmFtZSkKIAkgICAgbmFyeS0+cHJlZGljYXRl ZF92YWx1ZXMgPSAwOwogCSAgICBuYXJ5LT51LnJlc3VsdCA9IGJvb2xlYW5fZmFsc2Vfbm9kZTsK IAkgICAgdm5fbmFyeV9vcF9pbnNlcnRfaW50byAobmFyeSwgdmFsaWRfaW5mby0+bmFyeSk7Ci0J ICAgIGdjY19hc3NlcnQgKG5hcnktPnVud2luZF90byA9PSBOVUxMKTsKIAkgICAgbGFzdF9pbnNl cnRlZF9uYXJ5ID0gbmFyeS0+bmV4dDsKIAkgICAgbmFyeS0+bmV4dCA9ICh2bl9uYXJ5X29wX3Qp KHZvaWQgKiktMTsKIAkgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRB SUxTKSkKQEAgLTQxNjIsNiArNDE2NSw3NyBAQCB2bl9uYXJ5X29wX2NvbXB1dGVfaGFzaCAoY29u c3Qgdm5fbmFyeV9vcF90IHZubzEpCiAgIHJldHVybiBoc3RhdGUuZW5kICgpOwogfQogCitzdGF0 aWMgYm9vbAorZG9taW5hdGVkX2J5X3Bfd191bmV4IChiYXNpY19ibG9jayBiYjEsIGJhc2ljX2Js b2NrIGJiMiwgYm9vbCk7CisKKy8qIFdoZXRoZXIgYSBwcmVkaWNhdGVkIHZhbHVlIFZBTCBpcyB2 YWxpZCBhdCBCQi4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfcHZhbF92YWxpZF9hdF9i YiAodm5fcHZhbCAqdmFsLCBiYXNpY19ibG9jayBiYikKK3sKKyAgZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IHZhbC0+bjsgKytpKQorICAgIHsKKyAgICAgIGJhc2ljX2Jsb2NrIHZhbF9iYgorCT0g QkFTSUNfQkxPQ0tfRk9SX0ZOIChjZnVuLCB2YWwtPnZhbGlkX2RvbWluYXRlZF9ieV9wW2ldKTsK KyAgICAgIC8qIERvIG5vdCBoYW5kbGUgYmFja2VkZ2UgZXhlY3V0YWJpbGl0eSBvcHRpbWlzdGlj YWxseSBzaW5jZQorCSB3aGVuIGZpZ3VyaW5nIG91dCB3aGV0aGVyIHRvIGl0ZXJhdGUgd2UgZG8g bm90IGNvbnNpZGVyCisJIGNoYW5nZWQgcHJlZGljYXRpb24uICAqLworICAgICAgaWYgKGRvbWlu YXRlZF9ieV9wX3dfdW5leCAoYmIsIHZhbF9iYiwgZmFsc2UpKQorCXJldHVybiB0cnVlOworICAg IH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1cm4gdGhlIHZhcmlhYmxlIHRoYXQgcmVw cmVzZW50cyB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzIG9mIE5BTUUgYXQKKyAgIGJhc2ljLWJsb2Nr IEJCLiAgKi8KKworc3RhdGljIHRyZWUKK2dldF9lcXVpdl9oZWFkICh0cmVlIG5hbWUsIGJhc2lj X2Jsb2NrIGJiKQoreworICBpZiAoVFJFRV9DT0RFIChuYW1lKSAhPSBTU0FfTkFNRSkKKyAgICBy ZXR1cm4gbmFtZTsKKyAgdm5fc3NhX2F1eF90IGluZm8gPSBWTl9JTkZPIChuYW1lKTsKKyAgdHJl ZSByZXN1bHQgPSBpbmZvLT52YWxudW07CisKKyAgaWYgKFRSRUVfQ09ERSAocmVzdWx0KSA9PSBT U0FfTkFNRSAmJiByZXN1bHQgIT0gbmFtZSAmJiByZXN1bHQgIT0gVk5fVE9QKQorICAgIGluZm8g PSBWTl9JTkZPIChyZXN1bHQpOworICBpZiAoaW5mby0+ZXF1aXYpCisgICAgeworICAgICAgLyog QXMgd2UgaW5zZXJ0IG5ldyB2YWx1ZSBhdCBmcm9udCBpbiB0aGUgZXF1aXYgbGlzdCwgdGhlIGZp cnN0IHJlc3VsdCBpcworCSB0aGUgbW9zdCBnZW5lcmFsIHJlc3VsdC4gICovCisgICAgICBmb3Ig KHZuX3B2YWwgKnZhbCA9IGluZm8tPmVxdWl2LT52YWx1ZXM7IHZhbDsgdmFsID0gdmFsLT5uZXh0 KQorCWlmIChpc19wdmFsX3ZhbGlkX2F0X2JiICh2YWwsIGJiKSkKKwkgIHJldHVybiB2YWwtPnJl c3VsdDsKKyAgICB9CisKKyAgLyogVk5fVE9QIGlzIG5vdCBhbGxvd2VkLiAgKi8KKyAgaWYgKHJl c3VsdCA9PSBWTl9UT1ApCisgICAgcmV0dXJuIG5hbWU7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30K KworLyogTG9va3VwIHRoZSAiZXF1aXZhbGVuY2UgaGVhZCJzIG9mIE9QUyBhdCBCQiwgYW5kIHN0 b3JlIHRoZW0gaW4gVE8uICBOIGlzIHRoZQorICAgc2l6ZSBvZiBPUFMuICAqLworCitzdGF0aWMg dm9pZAorZ2V0X2VxdWl2X2hlYWRzICh1bnNpZ25lZCBuLCB0cmVlICpvcHMsIHRyZWUgKnRvLCBi YXNpY19ibG9jayBiYikKK3sKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47IGkrKykKKyAg ICB7CisgICAgICB0cmVlIGVxdWl2X2hlYWQgPSBnZXRfZXF1aXZfaGVhZCAob3BzW2ldLCBiYik7 CisgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpICYmIGVx dWl2X2hlYWQgIT0gb3BzW2ldKQorCXsKKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlVzZSBlcXVp di1oZWFkICIpOworCSAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUsIGVxdWl2X2hlYWQs IFRERl9OT05FKTsKKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIiBmb3IgIik7CisJICBwcmludF9n ZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwgb3BzW2ldLCBUREZfTk9ORSk7CisJICBmcHJpbnRmIChk dW1wX2ZpbGUsICIgYXQgQkIlZFxuIiwgYmItPmluZGV4KTsKKwl9CisgICAgICB0b1tpXSA9IGVx dWl2X2hlYWQ7CisgICAgfQorfQorCiAvKiBDb21wYXJlIG5hcnkgb3BlcmF0aW9ucyBWTk8xIGFu ZCBWTk8yIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGV5IGFyZQogICAgZXF1aXZhbGVudC4gICovCiAK QEAgLTQyNjcsNiArNDM0MSwxMCBAQCBpbml0X3ZuX25hcnlfb3BfZnJvbV9zdG10ICh2bl9uYXJ5 X29wX3Qgdm5vLCBnYXNzaWduICpzdG10KQogICAgICAgZm9yIChpID0gMDsgaSA8IHZuby0+bGVu Z3RoOyArK2kpCiAJdm5vLT5vcFtpXSA9IGdpbXBsZV9vcCAoc3RtdCwgaSArIDEpOwogICAgIH0K KworICAvKiBJbnNlcnQgYW5kIGxvb2t1cCBOLWFyeSByZXN1bHRzIGJ5IHRoZSBvcGVyYW5kcycg ZXF1aXZhbGVuY2UgaGVhZHMuICAqLworICBpZiAoZ2ltcGxlX2JiIChzdG10KSkKKyAgICBnZXRf ZXF1aXZfaGVhZHMgKHZuby0+bGVuZ3RoLCB2bm8tPm9wLCB2bm8tPm9wLCBnaW1wbGVfYmIgKHN0 bXQpKTsKIH0KIAogLyogQ29tcHV0ZSB0aGUgaGFzaGNvZGUgZm9yIFZOTyBhbmQgbG9vayBmb3Ig aXQgaW4gdGhlIGhhc2ggdGFibGU7CkBAIC00MzUxLDYgKzQ0MjksNjQgQEAgYWxsb2Nfdm5fbmFy eV9vcCAodW5zaWduZWQgaW50IGxlbmd0aCwgdHJlZSByZXN1bHQsIHVuc2lnbmVkIGludCB2YWx1 ZV9pZCkKICAgcmV0dXJuIHZubzE7CiB9CiAKKy8qICBQdXNoIHRvIHRoZSB2bl9wdmFsIGxpc3Qg KHN0b3JlZCBhdCBMT0MpOyBvciBhcHBlbmQgdG8gYW4gZXhpc3RpbmcgdmFsdWUsCisgICAgYW5k IG1vdmUgaXQgdG8gdGhlIGZyb250LiAgUmV0dXJucyB3aGV0aGVyIGEgbmV3IHZhbHVlIGlzIGlu c2VydGVkLiAgKi8KKworc3RhdGljIGJvb2wKK2luc2VydF9zaW5nbGVfcHJlZGljYXRlZF92YWx1 ZSAodm5fcHZhbCAqKmxvYywgdm5fcHZhbCAqb2xkX2xpc3QpCit7CisgIHZuX3B2YWwgKipuZXh0 ID0gbG9jOworICB2bl9wdmFsICpuZXdfdmFsID0gKm5leHQ7CisgIGdjY19hc3NlcnQgKCFuZXdf dmFsLT5uZXh0ICYmIG5ld192YWwtPm4gPT0gMSk7CisgIGJhc2ljX2Jsb2NrIHZub19iYgorICAg ID0gQkFTSUNfQkxPQ0tfRk9SX0ZOIChjZnVuLCBuZXdfdmFsLT52YWxpZF9kb21pbmF0ZWRfYnlf cFswXSk7CisgIC8qIEF2b2lkIGluc2VydGluZyBkdXBsaWNhdGVkIHJlc3VsdC4gICovCisgICpu ZXh0ID0gTlVMTDsKKworICBmb3IgKHZuX3B2YWwgKnZhbCA9IG9sZF9saXN0OyB2YWw7IHZhbCA9 IHZhbC0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoZXhwcmVzc2lvbnNfZXF1YWxfcCAodmFsLT5y ZXN1bHQsIG5ld192YWwtPnJlc3VsdCkpCisJeworCSAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8 IHZhbC0+bjsgKytpKQorCSAgICB7CisJICAgICAgYmFzaWNfYmxvY2sgdmFsX2JiCisJCT0gQkFT SUNfQkxPQ0tfRk9SX0ZOIChjZnVuLCB2YWwtPnZhbGlkX2RvbWluYXRlZF9ieV9wW2ldKTsKKwkg ICAgICBpZiAoZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCB2bm9fYmIsIHZhbF9iYikp CisJCS8qIFZhbHVlIHJlZ2lzdGVyZWQgd2l0aCBtb3JlIGdlbmVyaWMgcHJlZGljYXRlLiAgKi8K KwkJcmV0dXJuIGZhbHNlOworCSAgICAgIGVsc2UgaWYgKGZsYWdfY2hlY2tpbmcpCisJCS8qIFNo b3VsZG4ndCBoYXBwZW4sIHdlIGluc2VydCBpbiBSUE8gb3JkZXIuICAqLworCQlnY2NfYXNzZXJ0 ICghZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCB2YWxfYmIsIHZub19iYikpOworCSAg ICB9CisJICAvKiBBcHBlbmQgdmFsdWUuICAqLworCSAgbmV3X3ZhbCA9ICh2bl9wdmFsICopIG9i c3RhY2tfYWxsb2MgKCZ2bl90YWJsZXNfb2JzdGFjaywKKwkJCQkJICAgICAgIHNpemVvZiAodm5f cHZhbCkKKwkJCQkJCSArIHZhbC0+biAqIHNpemVvZiAoaW50KSk7CisJICBuZXdfdmFsLT5uZXh0 ID0gTlVMTDsKKwkgIG5ld192YWwtPnJlc3VsdCA9IHZhbC0+cmVzdWx0OworCSAgbmV3X3ZhbC0+ biA9IHZhbC0+biArIDE7CisJICBtZW1jcHkgKG5ld192YWwtPnZhbGlkX2RvbWluYXRlZF9ieV9w LCB2YWwtPnZhbGlkX2RvbWluYXRlZF9ieV9wLAorCQkgIHZhbC0+biAqIHNpemVvZiAoaW50KSk7 CisJICBuZXdfdmFsLT52YWxpZF9kb21pbmF0ZWRfYnlfcFt2YWwtPm5dID0gdm5vX2JiLT5pbmRl eDsKKwkgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisJICAg IGZwcmludGYgKGR1bXBfZmlsZSwgIkFwcGVuZGluZyBwcmVkaWNhdGUgdG8gdmFsdWUuXG4iKTsK KwkgIGNvbnRpbnVlOworCX0KKyAgICAgIC8qIENvcHkgb3RoZXIgcHJlZGljYXRlZCB2YWx1ZXMu ICAqLworICAgICAgKm5leHQgPSAodm5fcHZhbCAqKSBvYnN0YWNrX2FsbG9jICgmdm5fdGFibGVz X29ic3RhY2ssCisJCQkJCSBzaXplb2YgKHZuX3B2YWwpCisJCQkJCSAgICsgKHZhbC0+biAtIDEp ICogc2l6ZW9mIChpbnQpKTsKKyAgICAgIG1lbWNweSAoKm5leHQsIHZhbCwgc2l6ZW9mICh2bl9w dmFsKSArICh2YWwtPm4gLSAxKSAqIHNpemVvZiAoaW50KSk7CisgICAgICAoKm5leHQpLT5uZXh0 ID0gTlVMTDsKKyAgICAgIG5leHQgPSAmKCpuZXh0KS0+bmV4dDsKKyAgICB9CisgIC8qIFB1dCBu ZXcgdmFsdWUgYXQgZnJvbnQsIHNvIGdldF9lcXVpdl9oZWFkIGNhbiBmaW5kIHRoZSBtb3N0IGdl bmVyYWwKKyAgICAgcmVzdWx0LiAgKi8KKyAgbmV3X3ZhbC0+bmV4dCA9ICpsb2M7CisgICpsb2Mg PSBuZXdfdmFsOworICByZXR1cm4gdHJ1ZTsKK30KKwogLyogSW5zZXJ0IFZOTyBpbnRvIFRBQkxF LiAgKi8KIAogc3RhdGljIHZuX25hcnlfb3BfdApAQCAtNDQwNSw2MyArNDU0MSwxNyBAQCB2bl9u YXJ5X29wX2luc2VydF9pbnRvICh2bl9uYXJ5X29wX3Qgdm5vLCB2bl9uYXJ5X29wX3RhYmxlX3R5 cGUgKnRhYmxlKQogICAgICAgZWxzZSBpZiAodm5vLT5wcmVkaWNhdGVkX3ZhbHVlcwogCSAgICAg ICAmJiAoKnNsb3QpLT5wcmVkaWNhdGVkX3ZhbHVlcykKIAl7Ci0JICAvKiA/Pz8gIEZhY3RvciB0 aGlzIGFsbCBpbnRvIGEgaW5zZXJ0X3NpbmdsZV9wcmVkaWNhdGVkX3ZhbHVlCi0JICAgICByb3V0 aW5lLiAgKi8KIAkgIGdjY19hc3NlcnQgKCF2bm8tPnUudmFsdWVzLT5uZXh0ICYmIHZuby0+dS52 YWx1ZXMtPm4gPT0gMSk7Ci0JICBiYXNpY19ibG9jayB2bm9fYmIKLQkgICAgPSBCQVNJQ19CTE9D S19GT1JfRk4gKGNmdW4sIHZuby0+dS52YWx1ZXMtPnZhbGlkX2RvbWluYXRlZF9ieV9wWzBdKTsK LQkgIHZuX3B2YWwgKm52YWwgPSB2bm8tPnUudmFsdWVzOwotCSAgdm5fcHZhbCAqKm5leHQgPSAm dm5vLT51LnZhbHVlczsKLQkgIGJvb2wgZm91bmQgPSBmYWxzZTsKLQkgIGZvciAodm5fcHZhbCAq dmFsID0gKCpzbG90KS0+dS52YWx1ZXM7IHZhbDsgdmFsID0gdmFsLT5uZXh0KQorCSAgaWYgKGlu c2VydF9zaW5nbGVfcHJlZGljYXRlZF92YWx1ZSAoJnZuby0+dS52YWx1ZXMsCisJCQkJCSAgICAg ICgqc2xvdCktPnUudmFsdWVzKSkKIAkgICAgewotCSAgICAgIGlmIChleHByZXNzaW9uc19lcXVh bF9wICh2YWwtPnJlc3VsdCwgbnZhbC0+cmVzdWx0KSkKLQkJewotCQkgIGZvdW5kID0gdHJ1ZTsK LQkJICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsLT5uOyArK2kpCi0JCSAgICB7Ci0JCSAg ICAgIGJhc2ljX2Jsb2NrIHZhbF9iYgotCQkJPSBCQVNJQ19CTE9DS19GT1JfRk4gKGNmdW4sCi0J CQkJCSAgICAgIHZhbC0+dmFsaWRfZG9taW5hdGVkX2J5X3BbaV0pOwotCQkgICAgICBpZiAoZG9t aW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCB2bm9fYmIsIHZhbF9iYikpCi0JCQkvKiBWYWx1 ZSByZWdpc3RlcmVkIHdpdGggbW9yZSBnZW5lcmljIHByZWRpY2F0ZS4gICovCi0JCQlyZXR1cm4g KnNsb3Q7Ci0JCSAgICAgIGVsc2UgaWYgKGZsYWdfY2hlY2tpbmcpCi0JCQkvKiBTaG91bGRuJ3Qg aGFwcGVuLCB3ZSBpbnNlcnQgaW4gUlBPIG9yZGVyLiAgKi8KLQkJCWdjY19hc3NlcnQgKCFkb21p bmF0ZWRfYnlfcCAoQ0RJX0RPTUlOQVRPUlMsCi0JCQkJCQkgICAgIHZhbF9iYiwgdm5vX2JiKSk7 Ci0JCSAgICB9Ci0JCSAgLyogQXBwZW5kIHZhbHVlLiAgKi8KLQkJICAqbmV4dCA9ICh2bl9wdmFs ICopIG9ic3RhY2tfYWxsb2MgKCZ2bl90YWJsZXNfb2JzdGFjaywKLQkJCQkJCSAgICAgc2l6ZW9m ICh2bl9wdmFsKQotCQkJCQkJICAgICArIHZhbC0+biAqIHNpemVvZiAoaW50KSk7Ci0JCSAgKCpu ZXh0KS0+bmV4dCA9IE5VTEw7Ci0JCSAgKCpuZXh0KS0+cmVzdWx0ID0gdmFsLT5yZXN1bHQ7Ci0J CSAgKCpuZXh0KS0+biA9IHZhbC0+biArIDE7Ci0JCSAgbWVtY3B5ICgoKm5leHQpLT52YWxpZF9k b21pbmF0ZWRfYnlfcCwKLQkJCSAgdmFsLT52YWxpZF9kb21pbmF0ZWRfYnlfcCwKLQkJCSAgdmFs LT5uICogc2l6ZW9mIChpbnQpKTsKLQkJICAoKm5leHQpLT52YWxpZF9kb21pbmF0ZWRfYnlfcFt2 YWwtPm5dID0gdm5vX2JiLT5pbmRleDsKLQkJICBuZXh0ID0gJigqbmV4dCktPm5leHQ7Ci0JCSAg aWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKLQkJICAgIGZwcmlu dGYgKGR1bXBfZmlsZSwgIkFwcGVuZGluZyBwcmVkaWNhdGUgdG8gdmFsdWUuXG4iKTsKLQkJICBj b250aW51ZTsKLQkJfQotCSAgICAgIC8qIENvcHkgb3RoZXIgcHJlZGljYXRlZCB2YWx1ZXMuICAq LwotCSAgICAgICpuZXh0ID0gKHZuX3B2YWwgKikgb2JzdGFja19hbGxvYyAoJnZuX3RhYmxlc19v YnN0YWNrLAotCQkJCQkJIHNpemVvZiAodm5fcHZhbCkKLQkJCQkJCSArICh2YWwtPm4tMSkgKiBz aXplb2YgKGludCkpOwotCSAgICAgIG1lbWNweSAoKm5leHQsIHZhbCwgc2l6ZW9mICh2bl9wdmFs KSArICh2YWwtPm4tMSkgKiBzaXplb2YgKGludCkpOwotCSAgICAgICgqbmV4dCktPm5leHQgPSBO VUxMOwotCSAgICAgIG5leHQgPSAmKCpuZXh0KS0+bmV4dDsKKwkgICAgICAqc2xvdCA9IHZubzsK KwkgICAgICB2bm8tPm5leHQgPSBsYXN0X2luc2VydGVkX25hcnk7CisJICAgICAgbGFzdF9pbnNl cnRlZF9uYXJ5ID0gdm5vOworCSAgICAgIHJldHVybiB2bm87CiAJICAgIH0KLQkgIGlmICghZm91 bmQpCi0JICAgICpuZXh0ID0gbnZhbDsKLQotCSAgKnNsb3QgPSB2bm87Ci0JICB2bm8tPm5leHQg PSBsYXN0X2luc2VydGVkX25hcnk7Ci0JICBsYXN0X2luc2VydGVkX25hcnkgPSB2bm87Ci0JICBy ZXR1cm4gdm5vOworCSAgZWxzZQorCSAgICByZXR1cm4gKnNsb3Q7CiAJfQogCiAgICAgICAvKiBX aGlsZSB3ZSBkbyBub3Qgd2FudCB0byBpbnNlcnQgdGhpbmdzIHR3aWNlIGl0J3MgYXdrd2FyZCB0 bwpAQCAtNDUyNiw2ICs0NjE2LDExMCBAQCBjYW5fdHJhY2tfcHJlZGljYXRlX29uX2VkZ2UgKGVk Z2UgcHJlZF9lKQogICByZXR1cm4gY250ID09IDE7CiB9CiAKKy8qIEZvbGQgTi1hcnkgZXhwcmVz c2lvbiBvZiBlcXVpdi1oZWFkcywgcmV0dXJuIE5VTExfVFJFRSBpZiBub3QgZm9sZGVkLiAgKi8K Kworc3RhdGljIHRyZWUKK2ZvbGRfY29uc3RfZnJvbV9lcXVpdl9oZWFkcyAodW5zaWduZWQgbGVu Z3RoLCB0cmVlX2NvZGUgb3Bjb2RlLCB0cmVlICpvcCwKKwkJCSAgICAgdHJlZSB0eXBlKQorewor ICB0cmVlIHJlc3VsdCA9IE5VTExfVFJFRTsKKyAgLyogV2UncmUgdXNpbmcgZXF1aXYtaGVhZHMs IGkuZS4gdGhlIG1vc3QgZ2VuZXJhbCBvcGVyYW5kcywgc2hvcnRjdXQgZm9yCisgICAgIHNpdHVh dGlvbnMgdGhhdCBjYW4gZm9sZC4gICovCisgIHN3aXRjaCAobGVuZ3RoKQorICAgIHsKKyAgICBj YXNlIDE6CisgICAgICBpZiAoQ09OU1RBTlRfQ0xBU1NfUCAob3BbMF0pKQorCXJlc3VsdAorCSAg PSBnaW1wbGVfc2ltcGxpZnkgKG9wY29kZSwgdHlwZSwgb3BbMF0sIE5VTEwsIG5vX2ZvbGxvd19z c2FfZWRnZXMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgaWYgKChDT05TVEFO VF9DTEFTU19QIChvcFswXSkgJiYgQ09OU1RBTlRfQ0xBU1NfUCAob3BbMV0pKQorCSAgfHwgb3Bb MF0gPT0gb3BbMV0pCisJcmVzdWx0ID0gZ2ltcGxlX3NpbXBsaWZ5IChvcGNvZGUsIHR5cGUsIG9w WzBdLCBvcFsxXSwgTlVMTCwKKwkJCQkgIG5vX2ZvbGxvd19zc2FfZWRnZXMpOworICAgICAgYnJl YWs7CisgICAgY2FzZSAzOgorICAgICAgaWYgKENPTlNUQU5UX0NMQVNTX1AgKG9wWzBdKSAmJiBD T05TVEFOVF9DTEFTU19QIChvcFsxXSkKKwkgICYmIENPTlNUQU5UX0NMQVNTX1AgKG9wWzJdKSkK KwlyZXN1bHQgPSBnaW1wbGVfc2ltcGxpZnkgKG9wY29kZSwgdHlwZSwgb3BbMF0sIG9wWzFdLCBv cFsyXSwgTlVMTCwKKwkJCQkgIG5vX2ZvbGxvd19zc2FfZWRnZXMpOworICAgICAgYnJlYWs7Cisg ICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgaWYgKHJlc3VsdCAmJiAhdXNlbGVz c190eXBlX2NvbnZlcnNpb25fcCAodHlwZSwgVFJFRV9UWVBFIChyZXN1bHQpKSkKKyAgICByZXN1 bHQgPSBmb2xkX2NvbnZlcnQgKHR5cGUsIHJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisK Ky8qIEluc2VydCBhIGJhY2stcmVmZXJlbmNlIGluIElORk8uICAqLworCitzdGF0aWMgaW5saW5l IHZvaWQKK3B1c2hfbmV3X25hcnlfcmVmICh2bl9zc2FfYXV4X3QgaW5mbywgdm5fbmFyeV9vcF90 IHZubywKKwkJICAgdm5fc3NhX2F1eF90IGVxdWl2KQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0 ICgoIXZubyAmJiBlcXVpdikgfHwgKCFlcXVpdiAmJiB2bm8pKTsKKyAgbmFyeV9yZWYgKnJlZjsK KyAgaWYgKG5hcnlfcmVmX2ZyZWVsaXN0KQorICAgIHsKKyAgICAgIHJlZiA9IG5hcnlfcmVmX2Zy ZWVsaXN0OworICAgICAgbmFyeV9yZWZfZnJlZWxpc3QgPSBuYXJ5X3JlZl9mcmVlbGlzdC0+bmV4 dDsKKyAgICB9CisgIGVsc2UKKyAgICByZWYgPSBYT0JORVcgKCZ2bl9zc2FfYXV4X29ic3RhY2ss IG5hcnlfcmVmKTsKKyAgcmVmLT5uZXh0ID0gaW5mby0+cmVmOworICByZWYtPm5leHRfdW5kbyA9 IGxhc3RfcHVzaGVkX25hcnlfcmVmOworICBsYXN0X3B1c2hlZF9uYXJ5X3JlZiA9IGluZm87Cisg IHJlZi0+dm5vID0gdm5vOworICByZWYtPnZuID0gZXF1aXY7CisgIGluZm8tPnJlZiA9IHJlZjsK KyAgKytpbmZvLT5udW1fbmFyeV9yZWY7CisgIGdjY19hc3NlcnQgKGluZm8tPm51bV9uYXJ5X3Jl ZiA+IDApOworfQorCisvKiBBbGxvY2F0ZSB2bl9wdmFsIHdpdGggc2luZ2xlIHJlc3VsdCBhbmQg dmFsaWQgZG9taW5hdG9yLiAgKi8KKworc3RhdGljIHZuX3B2YWwgKgorYWxsb2Nfc2luZ2xlX3By ZWRpY2F0ZWRfdmFsdWUgKG9ic3RhY2sgKnN0YWNrLCB0cmVlIHJlc3VsdCwgYmFzaWNfYmxvY2sg YmIpCit7CisgIHZuX3B2YWwgKm5ld192YWwgPSAodm5fcHZhbCAqKSBvYnN0YWNrX2FsbG9jIChz dGFjaywgc2l6ZW9mICh2bl9wdmFsKSk7CisgIG5ld192YWwtPm5leHQgPSBOVUxMOworICBuZXdf dmFsLT5yZXN1bHQgPSByZXN1bHQ7CisgIG5ld192YWwtPm4gPSAxOworICBuZXdfdmFsLT52YWxp ZF9kb21pbmF0ZWRfYnlfcFswXSA9IGJiLT5pbmRleDsKKyAgcmV0dXJuIG5ld192YWw7Cit9CisK Ky8qIFB1c2ggYSBuZXcgdmFsdWUgdG8gdGhlIGVxdWl2YWxlbmNlIGxpc3QgaW4gSU5GTy4gICov CisKK3N0YXRpYyBib29sCitwdXNoX3NpbmdsZV9lcXVpdiAodm5fc3NhX2F1eF90IGluZm8sIHRy ZWUgZXF1aXZfaGVhZCwgYmFzaWNfYmxvY2sgYmIpCit7CisgIHRlbXBfZXF1aXYgKmVxdWl2Owor ICBpZiAodGVtcF9lcXVpdl9mcmVlbGlzdCkKKyAgICB7CisgICAgICBlcXVpdiA9IHRlbXBfZXF1 aXZfZnJlZWxpc3Q7CisgICAgICB0ZW1wX2VxdWl2X2ZyZWVsaXN0ID0gdGVtcF9lcXVpdl9mcmVl bGlzdC0+bmV4dDsKKyAgICB9CisgIGVsc2UKKyAgICBlcXVpdiA9IFhPQk5FVyAoJnZuX3NzYV9h dXhfb2JzdGFjaywgdGVtcF9lcXVpdik7CisKKyAgZXF1aXYtPnZhbHVlcworICAgID0gYWxsb2Nf c2luZ2xlX3ByZWRpY2F0ZWRfdmFsdWUgKCZ2bl90YWJsZXNfb2JzdGFjaywgZXF1aXZfaGVhZCwg YmIpOworICBpZiAoaW5mby0+ZXF1aXYpCisgICAgaWYgKCFpbnNlcnRfc2luZ2xlX3ByZWRpY2F0 ZWRfdmFsdWUgKCZlcXVpdi0+dmFsdWVzLCBpbmZvLT5lcXVpdi0+dmFsdWVzKSkKKyAgICAgIHJl dHVybiBmYWxzZTsKKworICBlcXVpdi0+bmV4dCA9IGluZm8tPmVxdWl2OworICBpbmZvLT5lcXVp diA9IGVxdWl2OworICBlcXVpdi0+bmV4dF91bmRvID0gbGFzdF9wdXNoZWRfZXF1aXY7CisgIGxh c3RfcHVzaGVkX2VxdWl2ID0gaW5mbzsKKyAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lk CityZWNvcmRfdGVtcG9yYXJ5X2VxdWl2YWxlbmNlICh0cmVlIG9wMSwgdHJlZSBvcDIsIGVkZ2Ug ZSk7CisKIHN0YXRpYyB2bl9uYXJ5X29wX3QKIHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlc19wcmVk aWNhdGVkICh1bnNpZ25lZCBpbnQgbGVuZ3RoLCBlbnVtIHRyZWVfY29kZSBjb2RlLAogCQkJCSAg ICAgdHJlZSB0eXBlLCB0cmVlICpvcHMsCkBAIC00NTM0LDYgKzQ3MjgsMTYgQEAgdm5fbmFyeV9v cF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQgKHVuc2lnbmVkIGludCBsZW5ndGgsIGVudW0gdHJl ZV9jb2RlIGNvZGUsCiB7CiAgIGlmICghY2FuX3RyYWNrX3ByZWRpY2F0ZV9vbl9lZGdlIChwcmVk X2UpKQogICAgIHJldHVybiBOVUxMOworICBpZiAoY29kZSA9PSBFUV9FWFBSICYmIHJlc3VsdCA9 PSBib29sZWFuX3RydWVfbm9kZSkKKyAgICB7CisgICAgICAvKiBDYW4gYmUgcmVwcmVzZW50ZWQg YnkgdGVtcG9yYXJ5IGVxdWl2YWxlbmNlLiAgKi8KKyAgICAgIHJlY29yZF90ZW1wb3JhcnlfZXF1 aXZhbGVuY2UgKG9wc1swXSwgb3BzWzFdLCBwcmVkX2UpOworICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgfQorICAvKiBMZWF2ZSB0aGlzIGZvciBpbnZlcnRlZCBjb25kaXRpb24uICAqLworICBpZiAo Y29kZSA9PSBORV9FWFBSICYmIHJlc3VsdCA9PSBib29sZWFuX2ZhbHNlX25vZGUpCisgICAgcmV0 dXJuIE5VTEw7CisKICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxT KQogICAgICAgLyogPz8/ICBGaXggZHVtcGluZywgYnV0IGN1cnJlbnRseSB3ZSBvbmx5IGdldCBj b21wYXJpc29ucy4gICovCiAgICAgICAmJiBUUkVFX0NPREVfQ0xBU1MgKGNvZGUpID09IHRjY19j b21wYXJpc29uKQpAQCAtNDU0NiwyMCArNDc1MCwxNTQgQEAgdm5fbmFyeV9vcF9pbnNlcnRfcGll Y2VzX3ByZWRpY2F0ZWQgKHVuc2lnbmVkIGludCBsZW5ndGgsIGVudW0gdHJlZV9jb2RlIGNvZGUs CiAgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICIgPT0gJXNcbiIsCiAJICAgICAgIGludGVnZXJf emVyb3AgKHJlc3VsdCkgPyAiZmFsc2UiIDogInRydWUiKTsKICAgICB9CisgIGlmIChDSEVDS0lO R19QKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgIGdj Y19hc3NlcnQgKGdldF9lcXVpdl9oZWFkIChvcHNbaV0sIHByZWRfZS0+ZGVzdCkgPT0gb3BzW2ld KTsKKworICAvKiBTa2lwIGlmIHRoZSByZXN1bHQgaXMga25vd24uIChDYXVzZWQgYnkgcmUtaW5z ZXJ0aW5nIHByZWRpY2F0ZXMuKSAgKi8KKyAgdHJlZSBzaW1wbGlmaWVkID0gZm9sZF9jb25zdF9m cm9tX2VxdWl2X2hlYWRzIChsZW5ndGgsIGNvZGUsIG9wcywgdHlwZSk7CisgIGlmIChzaW1wbGlm aWVkKQorICAgIHsKKyAgICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVU QUlMUykpCisJeworCSAgZnByaW50ZiAoZHVtcF9maWxlLCAiUmVzdWx0IGlzIGtub3duOiAiKTsK KwkgIHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBzaW1wbGlmaWVkLCBUREZfTk9ORSk7 CisJICBmcHJpbnRmIChkdW1wX2ZpbGUsICIsIHNraXBwZWQuXG4iKTsKKwl9CisgICAgICByZXR1 cm4gTlVMTDsKKyAgICB9CisKICAgdm5fbmFyeV9vcF90IHZubzEgPSBhbGxvY192bl9uYXJ5X29w IChsZW5ndGgsIE5VTExfVFJFRSwgdmFsdWVfaWQpOwogICBpbml0X3ZuX25hcnlfb3BfZnJvbV9w aWVjZXMgKHZubzEsIGxlbmd0aCwgY29kZSwgdHlwZSwgb3BzKTsKICAgdm5vMS0+cHJlZGljYXRl ZF92YWx1ZXMgPSAxOwotICB2bm8xLT51LnZhbHVlcyA9ICh2bl9wdmFsICopIG9ic3RhY2tfYWxs b2MgKCZ2bl90YWJsZXNfb2JzdGFjaywKLQkJCQkJICAgICAgc2l6ZW9mICh2bl9wdmFsKSk7Ci0g IHZubzEtPnUudmFsdWVzLT5uZXh0ID0gTlVMTDsKLSAgdm5vMS0+dS52YWx1ZXMtPnJlc3VsdCA9 IHJlc3VsdDsKLSAgdm5vMS0+dS52YWx1ZXMtPm4gPSAxOwotICB2bm8xLT51LnZhbHVlcy0+dmFs aWRfZG9taW5hdGVkX2J5X3BbMF0gPSBwcmVkX2UtPmRlc3QtPmluZGV4OwotICByZXR1cm4gdm5f bmFyeV9vcF9pbnNlcnRfaW50byAodm5vMSwgdmFsaWRfaW5mby0+bmFyeSk7CisgIHZubzEtPnUu dmFsdWVzCisgICAgPSBhbGxvY19zaW5nbGVfcHJlZGljYXRlZF92YWx1ZSAoJnZuX3RhYmxlc19v YnN0YWNrLCByZXN1bHQsIHByZWRfZS0+ZGVzdCk7CisgIHZuX25hcnlfb3BfdCB2YWwgPSB2bl9u YXJ5X29wX2luc2VydF9pbnRvICh2bm8xLCB2YWxpZF9pbmZvLT5uYXJ5KTsKKworICAvKiBJbnNl cnQgYmFjay1yZWZzIChvcGVyYW5kLT52bm8pIHRvIHZuX3NzYV9hdXguICAqLworICBmb3IgKHVu c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgaWYgKFRSRUVfQ09ERSAob3BzW2ld KSA9PSBTU0FfTkFNRSkKKyAgICAgIHsKKwl2bl9zc2FfYXV4X3QgaW5mbyA9IFZOX0lORk8gKG9w c1tpXSk7CisJaWYgKGluZm8tPnZhbG51bSA9PSBvcHNbaV0pCisJICBwdXNoX25ld19uYXJ5X3Jl ZiAoaW5mbywgdmFsLCBOVUxMKTsKKyAgICAgIH0KKyAgcmV0dXJuIHZhbDsKIH0KIAotc3RhdGlj IGJvb2wKLWRvbWluYXRlZF9ieV9wX3dfdW5leCAoYmFzaWNfYmxvY2sgYmIxLCBiYXNpY19ibG9j ayBiYjIsIGJvb2wpOworLyogUmVjb3JkIHRoZSBlcXVpdmFsZW5jZSBvZiBPUDEgYW5kIE9QMiBv biBlZGdlIEUuICAqLworCitzdGF0aWMgdm9pZAorcmVjb3JkX3RlbXBvcmFyeV9lcXVpdmFsZW5j ZSAodHJlZSBvcDEsIHRyZWUgb3AyLCBlZGdlIGUpCit7CisgIC8qIFJlY29yZCBieSBlcXVpdmFs ZW5jZSBoZWFkcy4gICovCisgIGJhc2ljX2Jsb2NrIGJiID0gZS0+ZGVzdDsKKyAgdHJlZSBsaHMg PSBnZXRfZXF1aXZfaGVhZCAob3AxLCBiYik7CisgIHRyZWUgcmhzID0gZ2V0X2VxdWl2X2hlYWQg KG9wMiwgYmIpOworICBpZiAobGhzID09IHJocykKKyAgICByZXR1cm47CisKKyAgLyogRm9sZGlu ZyBleHByZXNzaW9ucyBmcm9tIGVxdWl2YWxlbmNlcyBjYW4gZ2VuZXJhdGUgaW5jb3JyZWN0IHZh bHVlcy4KKyAgICAgRm9yIGV4Y2FtcGxlLCBvcGVyYXRpb25zIG9uIDAuMCBhbmQgLTAuMC4gIFNv IGZvciBmbG9hdGluZy1wb2ludCB2YWx1ZXMsCisgICAgIGVxdWl2YWxlbmNlcyBhcmUgbm90IHVz ZWQuICAqLworICBpZiAoRkxPQVRfVFlQRV9QIChUUkVFX1RZUEUgKGxocykpIHx8IEZMT0FUX1RZ UEVfUCAoVFJFRV9UWVBFIChyaHMpKSkKKyAgICByZXR1cm47CisKKyAgLyogU2V0IFJIUyB0byBi ZSBuZXcgZXF1aXYtaGVhZCBmb3IgTEhTLiAgTEhTIG11c3QgYmUgU1NBX05BTUUuICAqLworICBp ZiAoVFJFRV9DT0RFIChsaHMpICE9IFNTQV9OQU1FKQorICAgIHsKKyAgICAgIGlmIChUUkVFX0NP REUgKHJocykgIT0gU1NBX05BTUUpCisJcmV0dXJuOworICAgICAgc3RkOjpzd2FwIChsaHMsIHJo cyk7CisgICAgfQorICB2bl9zc2FfYXV4X3QgcmhzX2luZm8gPSBOVUxMLCBsaHNfaW5mbyA9IFZO X0lORk8gKGxocyk7CisKKyAgLyogQ2hvb3NlIHRoZSBoYW5kLXNpZGUgd2l0aCBtb3JlIHJlY29y ZGVkIG4tYXJ5IGV4cHJlc3Npb25zIGFzIG5ldworICAgICBlcXVpdmFsZW5jZSBoZWFkLCB0byBt YWtlIGZld2VyIHJlLWluc2VydGlvbnMuICAqLworICBpZiAoVFJFRV9DT0RFIChyaHMpID09IFNT QV9OQU1FKQorICAgIHsKKyAgICAgIHJoc19pbmZvID0gVk5fSU5GTyAocmhzKTsKKyAgICAgIGlm IChyaHNfaW5mby0+bnVtX25hcnlfcmVmIDwgbGhzX2luZm8tPm51bV9uYXJ5X3JlZikKKwl7CisJ ICBzdGQ6OnN3YXAgKGxocywgcmhzKTsKKwkgIHN0ZDo6c3dhcCAocmhzX2luZm8sIGxoc19pbmZv KTsKKwl9CisgICAgfQorCisgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVU QUlMUykpCisgICAgeworICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiUmVjb3JkaW5nIGVxdWl2 YWxlbmNlIG9mICIpOworICAgICAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUsIGxocyk7 CisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICIgYW5kICIpOworICAgICAgcHJpbnRfZ2VuZXJp Y19leHByIChkdW1wX2ZpbGUsIHJocyk7CisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICIgYXQg QkIlZFxuIiwgYmItPmluZGV4KTsKKyAgICB9CisgIGJvb2wgaXNfbmV3ID0gcHVzaF9zaW5nbGVf ZXF1aXYgKGxoc19pbmZvLCByaHMsIGJiKTsKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoaXNfbmV3 KTsKKworICAvKiBCYWNrLXJlZiBmb3IgZXF1aXZhbGVuY2VzIGlzIHJlc3VsdC0+c2xvdCByYXRo ZXIgdGhhbiBvcC0+c2xvdCwgc28gdGhhdAorICAgICB3aGVuIG5ldyBlcXVpdi1oZWFkIGlzIGFw cGVuZGVkLCB3ZSBjYW4gdXBkYXRlIHRoZW0uICAqLworICBpZiAoVFJFRV9DT0RFIChyaHMpID09 IFNTQV9OQU1FKQorICAgIHB1c2hfbmV3X25hcnlfcmVmIChyaHNfaW5mbywgTlVMTCwgbGhzX2lu Zm8pOworCisgIC8qIEl0ZXJhdGUgb24gTEhTJ3MgcmVmZXJlbmNlcywgZmlyc3QgdXBkYXRlIGVx dWl2LWhlYWRzLCB0aGVuIHJlLWluc2VydAorICAgICBmb3JtZXIgcHJlZGljYXRlcywgc28gdGhh dCB0aGUgcmVzdWx0IHdpbGwgYmUgbGF0ZXN0LiAgKi8KKyAgYXV0b192ZWM8dm5fbmFyeV9vcF90 PiBwcmVkaWNhdGVzOworICBhdXRvX3ZlYzx0cmVlPiByZXN1bHRzOworICB2bl9uYXJ5X29wX3Qg dm5vOworICB2bl9zc2FfYXV4X3Qgdm47CisgIHRyZWUgb2xkX2hlYWQgPSBsaHNfaW5mby0+bmFt ZTsKKyAgbmFyeV9yZWYgKnJlZiA9IGxoc19pbmZvLT5yZWY7CisgIGZvciAoOyByZWY7IHJlZiA9 IHJlZi0+bmV4dCkKKyAgICB7CisgICAgICAvKiBVcGRhdGUgcmVjb3JkZWQgZXF1aXZhbGVuY2Vz IHdpdGggbmV3IGVxdWl2LWhlYWQuICAqLworICAgICAgaWYgKCh2biA9IHJlZi0+dm4pKQorCXsK KwkgIGlmICh2bi0+bmFtZSA9PSByaHMpCisJICAgIGNvbnRpbnVlOworCSAgZm9yICh2bl9wdmFs ICpwdmFsID0gdm4tPmVxdWl2LT52YWx1ZXM7IHB2YWw7IHB2YWwgPSBwdmFsLT5uZXh0KQorCSAg ICBpZiAoZXhwcmVzc2lvbnNfZXF1YWxfcCAocHZhbC0+cmVzdWx0LCBvbGRfaGVhZCkKKwkJJiYg aXNfcHZhbF92YWxpZF9hdF9iYiAocHZhbCwgYmIpKQorCSAgICAgIHsKKwkJaWYgKGR1bXBfZmls ZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwkJICB7CisJCSAgICBmcHJpbnRmIChk dW1wX2ZpbGUsICJVcGRhdGluZyBlcXVpdi1oZWFkIG9mICIpOworCQkgICAgcHJpbnRfZ2VuZXJp Y19leHByIChkdW1wX2ZpbGUsIHZuLT5uYW1lLCBUREZfU0xJTSk7CisJCSAgICBmcHJpbnRmIChk dW1wX2ZpbGUsICIgdG8gIik7CisJCSAgICBwcmludF9nZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwg cmhzLCBUREZfU0xJTSk7CisJCSAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICIgYXQgQkIlZFxuIiwg YmItPmluZGV4KTsKKwkJICB9CisJCS8qIFB1c2ggYmFjay1yZWYgKHJlc3VsdC0+c2xvdCkgZm9y IG5ldyBlcXVpdmFsZW5jZS4gICovCisJCWlmIChwdXNoX3NpbmdsZV9lcXVpdiAodm4sIHJocywg YmIpCisJCSAgICAmJiBUUkVFX0NPREUgKHJocykgPT0gU1NBX05BTUUpCisJCSAgcHVzaF9uZXdf bmFyeV9yZWYgKHJoc19pbmZvLCBOVUxMLCB2bik7CisJCWJyZWFrOworCSAgICAgIH0KKwl9Cisg ICAgICBlbHNlIGlmIChyZWYtPnZuby0+cHJlZGljYXRlZF92YWx1ZXMpCisJeworCSAgLyogUHJl ZGljYXRlZCB2YWx1ZXMgYXJlIGNvbGxlY3RlZCwgdG8gYmUgcmUtaW5zZXJ0ZWQgbGF0ZXIuICAq LworCSAgZm9yICh2bl9wdmFsICpwdmFsID0gcmVmLT52bm8tPnUudmFsdWVzOyBwdmFsOyBwdmFs ID0gcHZhbC0+bmV4dCkKKwkgICAgeworCSAgICAgIGlmICghaXNfcHZhbF92YWxpZF9hdF9iYiAo cHZhbCwgYmIpKQorCQljb250aW51ZTsKKwkgICAgICBwcmVkaWNhdGVzLnNhZmVfcHVzaCAocmVm LT52bm8pOworCSAgICAgIHJlc3VsdHMuc2FmZV9wdXNoIChwdmFsLT5yZXN1bHQpOworCSAgICB9 CisJfQorICAgIH0KKyAgdW5zaWduZWQgaTsKKyAgaWYgKHByZWRpY2F0ZXMubGVuZ3RoICgpID4g MCAmJiBkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisgICAgZnByaW50 ZiAoZHVtcF9maWxlLCAiUmUtaW5zZXJ0aW5nICVkIHByZWRpY2F0ZXMuLi5cbiIsCisJICAgICBw cmVkaWNhdGVzLmxlbmd0aCAoKSk7CisgIHRyZWUgb3BzWzNdOworICBGT1JfRUFDSF9WRUNfRUxU IChwcmVkaWNhdGVzLCBpLCB2bm8pCisgICAgeworICAgICAgZ2V0X2VxdWl2X2hlYWRzICh2bm8t Pmxlbmd0aCwgdm5vLT5vcCwgb3BzLCBlLT5kZXN0KTsKKyAgICAgIHZuX25hcnlfb3BfaW5zZXJ0 X3BpZWNlc19wcmVkaWNhdGVkICh2bm8tPmxlbmd0aCwgdm5vLT5vcGNvZGUsIHZuby0+dHlwZSwK KwkJCQkJICAgb3BzLCByZXN1bHRzW2ldLCB2bm8tPnZhbHVlX2lkLCBlKTsKKyAgICB9Cit9CiAK IHN0YXRpYyB0cmVlCiB2bl9uYXJ5X29wX2dldF9wcmVkaWNhdGVkX3ZhbHVlICh2bl9uYXJ5X29w X3Qgdm5vLCBiYXNpY19ibG9jayBiYikKQEAgLTQ1NjcsMTcgKzQ5MDUsMTE0IEBAIHZuX25hcnlf b3BfZ2V0X3ByZWRpY2F0ZWRfdmFsdWUgKHZuX25hcnlfb3BfdCB2bm8sIGJhc2ljX2Jsb2NrIGJi KQogICBpZiAoISB2bm8tPnByZWRpY2F0ZWRfdmFsdWVzKQogICAgIHJldHVybiB2bm8tPnUucmVz dWx0OwogICBmb3IgKHZuX3B2YWwgKnZhbCA9IHZuby0+dS52YWx1ZXM7IHZhbDsgdmFsID0gdmFs LT5uZXh0KQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWwtPm47ICsraSkKLSAgICAg IC8qIERvIG5vdCBoYW5kbGUgYmFja2VkZ2UgZXhlY3V0YWJpbGl0eSBvcHRpbWlzdGljYWxseSBz aW5jZQotCSB3aGVuIGZpZ3VyaW5nIG91dCB3aGV0aGVyIHRvIGl0ZXJhdGUgd2UgZG8gbm90IGNv bnNpZGVyCi0JIGNoYW5nZWQgcHJlZGljYXRpb24uICAqLwotICAgICAgaWYgKGRvbWluYXRlZF9i eV9wX3dfdW5leAotCSAgICAoYmIsIEJBU0lDX0JMT0NLX0ZPUl9GTiAoY2Z1biwgdmFsLT52YWxp ZF9kb21pbmF0ZWRfYnlfcFtpXSksCi0JICAgICBmYWxzZSkpCi0JcmV0dXJuIHZhbC0+cmVzdWx0 OworICAgIGlmIChpc19wdmFsX3ZhbGlkX2F0X2JiICh2YWwsIGJiKSkKKyAgICAgIHJldHVybiB2 YWwtPnJlc3VsdDsKICAgcmV0dXJuIE5VTExfVFJFRTsKIH0KIAorLyogUmVjb3JkIHRlbXBvcmFy eSBlcXVpdmFsZW5jZXMgZ2VuZXJhdGVkIGJ5IFBISSBub2RlcywgYW5kIGFyZSB2YWxpZCB3aGVu CisgICBFIGlzIHRha2VuLiAgVkFMVUVTIGFyZSByZXN1bHRzIG9mIHRoZSBpbnRlcmVzdGVkIGV4 cHJlc3Npb24sIFJFViBpcyB0aGUKKyAgIHJlc3VsdCB0aGF0IG5lZWQgdG8gYmUgcnVsZWQgb3V0 LiAgKi8KKworc3RhdGljIHZvaWQKK3JlY29yZF9lcXVpdl9mcm9tX3ByZXZfcGhpXzEgKHZuX3B2 YWwgKnZhbHVlcywgZWRnZSBlLCB0cmVlIHJldikKK3sKKyAgYmFzaWNfYmxvY2sgYmIgPSBlLT5z cmM7CisgIC8qIFByb2Nlc3MgcHJlZGljYXRlZCB2YWx1ZXMsIGxvb2tpbmcgZm9yIGEgY29uZmxp Y3RpbmcgcmVzdWx0LCBhbmQKKyAgICAgdGhlIGxvY2F0aW9uJ3Mgc2luZ2xlX3ByZWQgZG9taW5h dGVzIEJCLiAgKi8KKyAgZm9yICh2bl9wdmFsICp2YWwgPSB2YWx1ZXM7IHZhbDsgdmFsID0gdmFs LT5uZXh0KQorICAgIHsKKyAgICAgIGlmICghZXhwcmVzc2lvbnNfZXF1YWxfcCAodmFsLT5yZXN1 bHQsIHJldikpCisJY29udGludWU7CisgICAgICAvKiBGb3VuZCBhIHJlc3VsdCB0byBydWxlIG91 dCwgcHJvY2VzcyBlYWNoIGxvY2F0aW9uLiAgKi8KKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCB2YWwtPm47ICsraSkKKwl7CisJICBiYXNpY19ibG9jayBiYjEKKwkgICAgPSBCQVNJQ19C TE9DS19GT1JfRk4gKGNmdW4sIHZhbC0+dmFsaWRfZG9taW5hdGVkX2J5X3BbaV0pOworCSAgaWYg KCFzaW5nbGVfcHJlZF9wIChiYjEpKQorCSAgICBjb250aW51ZTsKKwkgIGJhc2ljX2Jsb2NrIHAg PSBzaW5nbGVfcHJlZCAoYmIxKTsKKwkgIGlmICghZG9taW5hdGVkX2J5X3Bfd191bmV4IChiYiwg cCwgZmFsc2UpKQorCSAgICBjb250aW51ZTsKKwkgIGdjY19hc3NlcnQgKEVER0VfQ09VTlQgKHAt PnN1Y2NzKSA9PSAyKTsKKwkgIC8qIEl0ZXJhdGUgb24gcG9zc2libGUgcGhpX2JicyAoY2FuIGJl IEJCIGl0c2VsZikuIENvbnNpZGVyaW5nCisJICAgICBub24tZXhlY3V0YWJsZSBlZGdlcywgdGhl cmUgY2FuIGJlIG11bHRpcGxlIHBoaV9iYnMuICAqLworCSAgZm9yIChiYXNpY19ibG9jayBwaGlf YmIgOiBnZXRfZG9taW5hdGVkX2J5IChDRElfRE9NSU5BVE9SUywgcCkpCisJICAgIHsKKwkgICAg ICBpZiAoIWRvbWluYXRlZF9ieV9wX3dfdW5leCAoYmIsIHBoaV9iYiwgZmFsc2UpKQorCQljb250 aW51ZTsKKwkgICAgICAvKiBQcm9jZXNzIFBISXMsIHJ1bGUgb3V0IGluY29taW5nIGVkZ2VzIHRo YXQgZGVmaW5pdGVseSBjb21lCisJCSBmcm9tIHAtPmJiMS4gIElmIHRoZXJlJ3MgYSBzaW5nbGUg UEhJIGFyZ3VtZW50IFggbGVmdCwgcmVjb3JkCisJCSB0aGUgZXF1aXZhbGVuY2Ugb2YgWCBhbmQg UEhJIHJlc3VsdCBhdCBlZGdlIGUuICAqLworCSAgICAgIGZvciAoZ3BoaV9pdGVyYXRvciBnc2kg PSBnc2lfc3RhcnRfbm9udmlydHVhbF9waGlzIChwaGlfYmIpOworCQkgICAhZ3NpX2VuZF9wIChn c2kpOyBnc2lfbmV4dF9ub252aXJ0dWFsX3BoaSAoJmdzaSkpCisJCXsKKwkJICBncGhpICpwaGkg PSBnc2kucGhpICgpOworCQkgIHRyZWUgZXF1aXYgPSBOVUxMX1RSRUU7CisJCSAgZm9yICh1bnNp Z25lZCBqID0gMDsgaiA8IGdpbXBsZV9waGlfbnVtX2FyZ3MgKHBoaSk7ICsraikKKwkJICAgIHsK KwkJICAgICAgZWRnZSBpbiA9IGdpbXBsZV9waGlfYXJnX2VkZ2UgKHBoaSwgaik7CisJCSAgICAg IGlmIChpbi0+c3JjID09IGJiMQorCQkJICB8fCBkb21pbmF0ZWRfYnlfcF93X3VuZXggKGluLT5z cmMsIGJiMSwgZmFsc2UpKQorCQkJLyogRGVmaW5pdGVseSBjb21lcyBmcm9tIHAtPmJiMS4gICov CisJCQljb250aW51ZTsKKwkJICAgICAgdHJlZSBhcmcgPSB2bl92YWx1ZWl6ZSAoZ2ltcGxlX3Bo aV9hcmdfZGVmIChwaGksIGopKTsKKwkJICAgICAgaWYgKGVxdWl2ICYmIGVxdWl2ICE9IGFyZykK KwkJCXsKKwkJCSAgZXF1aXYgPSBOVUxMX1RSRUU7CisJCQkgIGJyZWFrOworCQkJfQorCQkgICAg ICBlcXVpdiA9IGFyZzsKKwkJICAgIH0KKwkJICBpZiAoZXF1aXYpCisJCSAgICByZWNvcmRfdGVt cG9yYXJ5X2VxdWl2YWxlbmNlIChlcXVpdiwgUEhJX1JFU1VMVCAocGhpKSwgZSk7CisJCX0KKwkg ICAgfQorCX0KKyAgICB9Cit9CisKKy8qIFJlY29yZCB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzIGdl bmVyYXRlZCBieSBQSEkgbm9kZXMsIGFuZCBhcmUgdmFsaWQgd2hlbgorICAgZWRnZSBFIGlzIHRh a2VuLCBzbyB0aGV5IGNhbiBiZSB1c2VmdWwgdW5kZXIgcmVsYXRlZCBicmFuY2ggY29uZGl0aW9u ICh3aGVuCisgICBqdW1wIHRocmVhZGluZyBpcyBub3QgcGVyZm9ybWVkKS4KKworICAgQ09ERSwg T1BTIGFuZCBSRVNVTFQgYXJlIHRoZSBjb25kaXRpb24gYW5kIHJlc3VsdCBmb3IgRSB0byBiZSB0 YWtlbi4gIFZOTworICAgaXMgdGhlIGNvbmRpdGlvbidzIHNsb3QgaW4gbmFyeSBtYXAuCisKKyAg IFRoZSBpZGVhIGlzIHRvIGZpbmQgYSBjb25mbGljdGluZyBwcmVkaWNhdGUgYXQgc29tZSBsb2Nh dGlvbiBMLCB3aGVyZSBMJ3MKKyAgIHByZWRlY2Vzc29yIFAgZG9taW5hdGVzIEJCLCBzbyB3ZSBr bm93IHBhdGggUC0+TCB3aWxsIG5vdCBiZSB0YWtlbiBpZiBFIGlzCisgICB0YWtlbi4gIElmIGJ5 IHJ1bGluZyBvdXQgUC0+TCBjYW4gZ2VuZXJhdGUgc29tZSBlcXVpdmFsZW5jZXMsIHJlY29yZCB0 aGVtIGF0CisgICBFLT5kZXN0LiAgKi8KKworc3RhdGljIHZvaWQKK3JlY29yZF9lcXVpdl9mcm9t X3ByZXZfcGhpICh2bl9uYXJ5X29wX3Qgdm5vLCBlZGdlIGUsIHRyZWVfY29kZSBjb2RlLCB0cmVl ICpvcHMsCisJCQkgICAgdHJlZSByZXN1bHQpCit7CisgIGlmICghY2FuX3RyYWNrX3ByZWRpY2F0 ZV9vbl9lZGdlIChlKSkKKyAgICByZXR1cm47CisgIHRyZWUgcmV2ZXJzZQorICAgID0gcmVzdWx0 ID09IGJvb2xlYW5fdHJ1ZV9ub2RlID8gYm9vbGVhbl9mYWxzZV9ub2RlIDogYm9vbGVhbl90cnVl X25vZGU7CisgIGlmICh2bm8gJiYgdm5vLT5wcmVkaWNhdGVkX3ZhbHVlcykKKyAgICByZWNvcmRf ZXF1aXZfZnJvbV9wcmV2X3BoaV8xICh2bm8tPnUudmFsdWVzLCBlLCByZXZlcnNlKTsKKworICAv KiBGb3IgcHJlZGljYXRlcyBsaWtlICJhPT1iIGlzIGZhbHNlIiBvciAiYSE9YiBpcyB0cnVlIiwg Y29uZmxpY3RpbmcgcmVzdWx0cworICAgICBhcmUgZXF1aXZhbGVuY2VzLiAgKi8KKyAgaWYgKChy ZXN1bHQgPT0gYm9vbGVhbl90cnVlX25vZGUKKyAgICAgICAmJiAoY29kZSA9PSBORV9FWFBSIHx8 IGNvZGUgPT0gR1RfRVhQUiB8fCBjb2RlID09IExUX0VYUFIpKQorICAgICAgfHwgKHJlc3VsdCA9 PSBib29sZWFuX2ZhbHNlX25vZGUgJiYgY29kZSA9PSBFUV9FWFBSKSkKKyAgICB7CisgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDI7IGkrKywgc3RkOjpzd2FwIChvcHNbMF0sIG9wc1sxXSkpCisJ aWYgKFRSRUVfQ09ERSAob3BzWzBdKSA9PSBTU0FfTkFNRSkKKwkgIHsKKwkgICAgdm5fc3NhX2F1 eF90IGluZm8gPSBWTl9JTkZPIChvcHNbMF0pOworCSAgICBpZiAoVFJFRV9DT0RFIChpbmZvLT52 YWxudW0pID09IFNTQV9OQU1FICYmIGluZm8tPnZhbG51bSAhPSBvcHNbMF0pCisJICAgICAgaW5m byA9IFZOX0lORk8gKGluZm8tPnZhbG51bSk7CisJICAgIGlmIChpbmZvLT5lcXVpdikKKwkgICAg ICByZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaV8xIChpbmZvLT5lcXVpdi0+dmFsdWVzLCBlLCBv cHNbMV0pOworCSAgfQorICAgIH0KK30KKwogLyogSW5zZXJ0IHRoZSByaHMgb2YgU1RNVCBpbnRv IHRoZSBjdXJyZW50IGhhc2ggdGFibGUgd2l0aCBhIHZhbHVlIG51bWJlciBvZgogICAgUkVTVUxU LiAgKi8KIApAQCAtNTIwMSw3ICs1NjM2LDI0IEBAIHN0YXRpYyBib29sCiB2aXNpdF9uYXJ5X29w ICh0cmVlIGxocywgZ2Fzc2lnbiAqc3RtdCkKIHsKICAgdm5fbmFyeV9vcF90IHZucmVzdWx0Owot ICB0cmVlIHJlc3VsdCA9IHZuX25hcnlfb3BfbG9va3VwX3N0bXQgKHN0bXQsICZ2bnJlc3VsdCk7 CisgIHVuc2lnbmVkIGxlbmd0aCA9IHZuX25hcnlfbGVuZ3RoX2Zyb21fc3RtdCAoc3RtdCk7Cisg IHZuX25hcnlfb3BfdCB2bm8KKyAgICA9IFhBTExPQ0FWQVIgKHN0cnVjdCB2bl9uYXJ5X29wX3Ms IHNpemVvZl92bl9uYXJ5X29wIChsZW5ndGgpKTsKKyAgaW5pdF92bl9uYXJ5X29wX2Zyb21fc3Rt dCAodm5vLCBzdG10KTsKKyAgdHJlZSByZXN1bHQgPSBOVUxMX1RSRUU7CisgIC8qIFRyeSB0byBn ZXQgYSBzaW1wbGlmaWVkIHJlc3VsdC4gICovCisgIC8qIERvIG5vdCBzaW1wbGlmeSB2YXJpYWJs ZSB1c2VkIGluIFBISSBhdCBsb29wIGV4aXQsIG9yCisgICAgIHNpbXBsaWZ5X3BlZWxlZF9jaHJl Yy9jb25zdGFudF9hZnRlcl9wZWVsaW5nIG1heSBtaXNzIHRoZSBsb29wLiAgKi8KKyAgZ2ltcGxl ICp1c2Vfc3RtdDsKKyAgdXNlX29wZXJhbmRfcCB1c2VfcDsKKyAgaWYgKCEoc2luZ2xlX2ltbV91 c2UgKGxocywgJnVzZV9wLCAmdXNlX3N0bXQpCisJJiYgZ2ltcGxlX2NvZGUgKHVzZV9zdG10KSA9 PSBHSU1QTEVfUEhJCisJJiYgc2luZ2xlX3N1Y2NfcCAoZ2ltcGxlX2JiICh1c2Vfc3RtdCkpCisJ JiYgKHNpbmdsZV9zdWNjX2VkZ2UgKGdpbXBsZV9iYiAodXNlX3N0bXQpKS0+ZmxhZ3MgJiBFREdF X0RGU19CQUNLKSkpCisgICAgcmVzdWx0ID0gZm9sZF9jb25zdF9mcm9tX2VxdWl2X2hlYWRzICh2 bm8tPmxlbmd0aCwgdm5vLT5vcGNvZGUsIHZuby0+b3AsCisJCQkJCSAgdm5vLT50eXBlKTsKKyAg aWYgKCFyZXN1bHQpCisgICAgcmVzdWx0ID0gdm5fbmFyeV9vcF9sb29rdXBfMSAodm5vLCAmdm5y ZXN1bHQpOwogICBpZiAoISByZXN1bHQgJiYgdm5yZXN1bHQpCiAgICAgcmVzdWx0ID0gdm5fbmFy eV9vcF9nZXRfcHJlZGljYXRlZF92YWx1ZSAodm5yZXN1bHQsIGdpbXBsZV9iYiAoc3RtdCkpOwog ICBpZiAocmVzdWx0KQpAQCAtNzYwMSwxMSArODA1Myw4IEBAIGluc2VydF9yZWxhdGVkX3ByZWRp Y2F0ZXNfb25fZWRnZSAoZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSAqb3BzLCBlZGdlIHByZWRf ZSkKIAkJCQkJICAgb3BzLCBib29sZWFuX2ZhbHNlX25vZGUsIDAsIHByZWRfZSk7CiAgICAgICBi cmVhazsKICAgICBjYXNlIEVRX0VYUFI6Ci0gICAgICAvKiBhID09IGIgLT4gISBhIHs8LD59IGIg Ki8KLSAgICAgIHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlc19wcmVkaWNhdGVkICgyLCBMVF9FWFBS LCBib29sZWFuX3R5cGVfbm9kZSwKLQkJCQkJICAgb3BzLCBib29sZWFuX2ZhbHNlX25vZGUsIDAs IHByZWRfZSk7Ci0gICAgICB2bl9uYXJ5X29wX2luc2VydF9waWVjZXNfcHJlZGljYXRlZCAoMiwg R1RfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsCi0JCQkJCSAgIG9wcywgYm9vbGVhbl9mYWxzZV9u b2RlLCAwLCBwcmVkX2UpOworICAgICAgLyogTm8gbmVlZCB0byBpbnNlcnQgZGVyaXZlZCBwcmVk aWNhdGVzIGZvciAnPT0nLCBhcyB0aGV5IGNhbiBiZSBjb21wdXRlZAorCSBieSBlcXVpdi1oZWFk cyAmIGZvbGRfY29uc3RfZnJvbV9lcXVpdl9oZWFkcy4gICovCiAgICAgICBicmVhazsKICAgICBj YXNlIExFX0VYUFI6CiAgICAgY2FzZSBHRV9FWFBSOgpAQCAtNzc3MywyNCArODIyMiwzMSBAQCBw cm9jZXNzX2JiIChycG9fZWxpbSAmYXZhaWwsIGJhc2ljX2Jsb2NrIGJiLAogICAgICAgc3dpdGNo IChnaW1wbGVfY29kZSAobGFzdCkpCiAJewogCWNhc2UgR0lNUExFX1NXSVRDSDoKKwkgIC8qIFRP RE86IHV0aWxpemUgdGVtcG9yYXJ5IGVxdWl2YWxlbmNlcy4gICovCiAJICBlID0gZmluZF90YWtl bl9lZGdlIChiYiwgdm5fdmFsdWVpemUgKGdpbXBsZV9zd2l0Y2hfaW5kZXgKIAkJCQkJCShhc19h IDxnc3dpdGNoICo+IChsYXN0KSkpKTsKIAkgIGJyZWFrOwogCWNhc2UgR0lNUExFX0NPTkQ6CiAJ ICB7Ci0JICAgIHRyZWUgbGhzID0gdm5fdmFsdWVpemUgKGdpbXBsZV9jb25kX2xocyAobGFzdCkp OwotCSAgICB0cmVlIHJocyA9IHZuX3ZhbHVlaXplIChnaW1wbGVfY29uZF9yaHMgKGxhc3QpKTsK LQkgICAgdHJlZSB2YWwgPSBnaW1wbGVfc2ltcGxpZnkgKGdpbXBsZV9jb25kX2NvZGUgKGxhc3Qp LAotCQkJCQlib29sZWFuX3R5cGVfbm9kZSwgbGhzLCByaHMsCi0JCQkJCU5VTEwsIHZuX3ZhbHVl aXplKTsKKwkgICAgdHJlZSBsaHMgPSBnZXRfZXF1aXZfaGVhZCAoZ2ltcGxlX2NvbmRfbGhzIChs YXN0KSwgYmIpOworCSAgICB0cmVlIHJocyA9IGdldF9lcXVpdl9oZWFkIChnaW1wbGVfY29uZF9y aHMgKGxhc3QpLCBiYik7CisJICAgIHRyZWUgb3BzWzJdOworCSAgICBvcHNbMF0gPSBsaHM7CisJ ICAgIG9wc1sxXSA9IHJoczsKKwkgICAgdHJlZSB2YWwgPSBmb2xkX2NvbnN0X2Zyb21fZXF1aXZf aGVhZHMgKDIsIGdpbXBsZV9jb25kX2NvZGUgKGxhc3QpLAorCQkJCQkJICAgIG9wcywgYm9vbGVh bl90eXBlX25vZGUpOworCSAgICBpZiAodmFsICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMp KQorCSAgICAgIHsKKwkJZnByaW50ZiAoZHVtcF9maWxlLCAiR290IHNpbXBsaWZpZWQgcmVzdWx0 ICIpOworCQlwcmludF9nZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwgdmFsLCBUREZfTk9ORSk7CisJ CWZwcmludGYgKGR1bXBfZmlsZSwgIiBmb3IgIik7CisJCXByaW50X2dpbXBsZV9zdG10IChkdW1w X2ZpbGUsIGxhc3QsIFRERl9TTElNKTsKKwkgICAgICB9CisJICAgIHZuX25hcnlfb3BfdCB2bnJl c3VsdCA9IE5VTEw7CiAJICAgIC8qIElmIHRoZSBjb25kaXRpb24gZGlkbid0IHNpbXBsZnkgc2Vl IGlmIHdlIGhhdmUgcmVjb3JkZWQKIAkgICAgICAgYW4gZXhwcmVzc2lvbiBmcm9tIHNvZmFyIHRh a2VuIGVkZ2VzLiAgKi8KIAkgICAgaWYgKCEgdmFsIHx8IFRSRUVfQ09ERSAodmFsKSAhPSBJTlRF R0VSX0NTVCkKIAkgICAgICB7Ci0JCXZuX25hcnlfb3BfdCB2bnJlc3VsdDsKLQkJdHJlZSBvcHNb Ml07Ci0JCW9wc1swXSA9IGxoczsKLQkJb3BzWzFdID0gcmhzOwogCQl2YWwgPSB2bl9uYXJ5X29w X2xvb2t1cF9waWVjZXMgKDIsIGdpbXBsZV9jb25kX2NvZGUgKGxhc3QpLAogCQkJCQkJYm9vbGVh bl90eXBlX25vZGUsIG9wcywKIAkJCQkJCSZ2bnJlc3VsdCk7CkBAIC03ODIxLDE1ICs4Mjc3LDE0 IEBAIHByb2Nlc3NfYmIgKHJwb19lbGltICZhdmFpbCwgYmFzaWNfYmxvY2sgYmIsCiAJCWVudW0g dHJlZV9jb2RlIGNvZGUgPSBnaW1wbGVfY29uZF9jb2RlIChsYXN0KTsKIAkJZW51bSB0cmVlX2Nv ZGUgaWNvZGUKIAkJICA9IGludmVydF90cmVlX2NvbXBhcmlzb24gKGNvZGUsIEhPTk9SX05BTlMg KGxocykpOwotCQl0cmVlIG9wc1syXTsKLQkJb3BzWzBdID0gbGhzOwotCQlvcHNbMV0gPSByaHM7 CiAJCWlmIChkb19yZWdpb24KIAkJICAgICYmIGJpdG1hcF9iaXRfcCAoZXhpdF9iYnMsIHRydWVf ZS0+ZGVzdC0+aW5kZXgpKQogCQkgIHRydWVfZSA9IE5VTEw7CiAJCWlmIChkb19yZWdpb24KIAkJ ICAgICYmIGJpdG1hcF9iaXRfcCAoZXhpdF9iYnMsIGZhbHNlX2UtPmRlc3QtPmluZGV4KSkKIAkJ ICBmYWxzZV9lID0gTlVMTDsKKwkJaWYgKHRydWVfZSB8fCBmYWxzZV9lKQorCQkgIGdldF9lcXVp dl9oZWFkcyAoMiwgb3BzLCBvcHMsIGJiKTsKIAkJaWYgKHRydWVfZSkKIAkJICB2bl9uYXJ5X29w X2luc2VydF9waWVjZXNfcHJlZGljYXRlZAogCQkgICAgKDIsIGNvZGUsIGJvb2xlYW5fdHlwZV9u b2RlLCBvcHMsCkBAIC03ODU4LDYgKzgzMTMsMTQgQEAgcHJvY2Vzc19iYiAocnBvX2VsaW0gJmF2 YWlsLCBiYXNpY19ibG9jayBiYiwKIAkJICAgIGlmIChmYWxzZV9lKQogCQkgICAgICBpbnNlcnRf cmVsYXRlZF9wcmVkaWNhdGVzX29uX2VkZ2UgKGljb2RlLCBvcHMsIGZhbHNlX2UpOwogCQkgIH0K KwkJLyogVHJ5IHRvIHJlY29yZCBlcXVpdmFsZW5jZXMgZ2VuZXJhdGVkIGJ5IHByZXZpb3VzIFBI SSBub2RlcworCQkgICBvbiBjdXJyZW50IHRydWUgJiBmYWxzZSBlZGdlcy4gICovCisJCWlmICh0 cnVlX2UpCisJCSAgcmVjb3JkX2VxdWl2X2Zyb21fcHJldl9waGkgKHZucmVzdWx0LCB0cnVlX2Us IGNvZGUsIG9wcywKKwkJCQkJICAgICAgYm9vbGVhbl90cnVlX25vZGUpOworCQlpZiAoZmFsc2Vf ZSkKKwkJICByZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaSAodm5yZXN1bHQsIGZhbHNlX2UsIGNv ZGUsIG9wcywKKwkJCQkJICAgICAgYm9vbGVhbl9mYWxzZV9ub2RlKTsKIAkgICAgICB9CiAJICAg IGJyZWFrOwogCSAgfQpAQCAtNzk4MCw2ICs4NDQzLDggQEAgc3RydWN0IHVud2luZF9zdGF0ZQog ICB2bl9waGlfdCBwaGlfdG9wOwogICB2bl9uYXJ5X29wX3QgbmFyeV90b3A7CiAgIHZuX2F2YWls ICphdmFpbF90b3A7CisgIG5hcnlfcmVmICpuYXJ5X3JlZl90b3A7CisgIHRlbXBfZXF1aXYgKnRl bXBfZXF1aXZfdG9wOwogfTsKIAogLyogVW53aW5kIHRoZSBSUE8gVk4gc3RhdGUgZm9yIGl0ZXJh dGlvbi4gICovCkBAIC04MDI5LDYgKzg0OTQsMjcgQEAgZG9fdW53aW5kICh1bndpbmRfc3RhdGUg KnRvLCBycG9fZWxpbSAmYXZhaWwpCiAgICAgICBhdi0+bmV4dCA9IGF2YWlsLm1fYXZhaWxfZnJl ZWxpc3Q7CiAgICAgICBhdmFpbC5tX2F2YWlsX2ZyZWVsaXN0ID0gYXY7CiAgICAgfQorCisgIC8q IERyYWluIG5hcnlfcmVmcyBhbmQgdGVtcF9lcXVpdiB0byBmcmVlbGlzdCwgdG8gcmV1c2UgdGhl IG1lbW9yeS4gICovCisgIGZvciAoOyBsYXN0X3B1c2hlZF9uYXJ5X3JlZiAmJiBsYXN0X3B1c2hl ZF9uYXJ5X3JlZi0+cmVmICE9IHRvLT5uYXJ5X3JlZl90b3A7KQorICAgIHsKKyAgICAgIHZuX3Nz YV9hdXhfdCB2YWwgPSBsYXN0X3B1c2hlZF9uYXJ5X3JlZjsKKyAgICAgIG5hcnlfcmVmICpyZWYg PSB2YWwtPnJlZjsKKyAgICAgIHZhbC0+cmVmID0gcmVmLT5uZXh0OworICAgICAgbGFzdF9wdXNo ZWRfbmFyeV9yZWYgPSByZWYtPm5leHRfdW5kbzsKKyAgICAgIHJlZi0+bmV4dCA9IG5hcnlfcmVm X2ZyZWVsaXN0OworICAgICAgbmFyeV9yZWZfZnJlZWxpc3QgPSByZWY7CisgICAgICAtLXZhbC0+ bnVtX25hcnlfcmVmOworICAgIH0KKyAgZm9yICg7IGxhc3RfcHVzaGVkX2VxdWl2ICYmIGxhc3Rf cHVzaGVkX2VxdWl2LT5lcXVpdiAhPSB0by0+dGVtcF9lcXVpdl90b3A7KQorICAgIHsKKyAgICAg IHZuX3NzYV9hdXhfdCB2YWwgPSBsYXN0X3B1c2hlZF9lcXVpdjsKKyAgICAgIHRlbXBfZXF1aXYg KmVxID0gdmFsLT5lcXVpdjsKKyAgICAgIHZhbC0+ZXF1aXYgPSBlcS0+bmV4dDsKKyAgICAgIGxh c3RfcHVzaGVkX2VxdWl2ID0gZXEtPm5leHRfdW5kbzsKKyAgICAgIGVxLT5uZXh0ID0gdGVtcF9l cXVpdl9mcmVlbGlzdDsKKyAgICAgIHRlbXBfZXF1aXZfZnJlZWxpc3QgPSBlcTsKKyAgICB9CiB9 CiAKIC8qIERvIFZOIG9uIGEgU0VNRSByZWdpb24gc3BlY2lmaWVkIGJ5IEVOVFJZIGFuZCBFWElU X0JCUyBpbiBGTi4KQEAgLTgxNDMsNiArODYyOSwxMCBAQCBkb19ycG9fdm5fMSAoZnVuY3Rpb24g KmZuLCBlZGdlIGVudHJ5LCBiaXRtYXAgZXhpdF9iYnMsCiAgIGxhc3RfaW5zZXJ0ZWRfcGhpID0g TlVMTDsKICAgbGFzdF9pbnNlcnRlZF9uYXJ5ID0gTlVMTDsKICAgbGFzdF9wdXNoZWRfYXZhaWwg PSBOVUxMOworICBsYXN0X3B1c2hlZF9uYXJ5X3JlZiA9IE5VTEw7CisgIG5hcnlfcmVmX2ZyZWVs aXN0ID0gTlVMTDsKKyAgbGFzdF9wdXNoZWRfZXF1aXYgPSBOVUxMOworICB0ZW1wX2VxdWl2X2Zy ZWVsaXN0ID0gTlVMTDsKIAogICB2bl92YWx1ZWl6ZSA9IHJwb192bl92YWx1ZWl6ZTsKIApAQCAt ODIzNyw2ICs4NzI3LDEwIEBAIGRvX3Jwb192bl8xIChmdW5jdGlvbiAqZm4sIGVkZ2UgZW50cnks IGJpdG1hcCBleGl0X2JicywKIAkgICAgcnBvX3N0YXRlW2lkeF0ubmFyeV90b3AgPSBsYXN0X2lu c2VydGVkX25hcnk7CiAJICAgIHJwb19zdGF0ZVtpZHhdLmF2YWlsX3RvcAogCSAgICAgID0gbGFz dF9wdXNoZWRfYXZhaWwgPyBsYXN0X3B1c2hlZF9hdmFpbC0+YXZhaWwgOiBOVUxMOworCSAgICBy cG9fc3RhdGVbaWR4XS5uYXJ5X3JlZl90b3AKKwkgICAgICA9IGxhc3RfcHVzaGVkX25hcnlfcmVm ID8gbGFzdF9wdXNoZWRfbmFyeV9yZWYtPnJlZiA6IE5VTEw7CisJICAgIHJwb19zdGF0ZVtpZHhd LnRlbXBfZXF1aXZfdG9wCisJICAgICAgPSBsYXN0X3B1c2hlZF9lcXVpdiA/IGxhc3RfcHVzaGVk X2VxdWl2LT5lcXVpdiA6IE5VTEw7CiAJICB9CiAKIAlpZiAoIShiYi0+ZmxhZ3MgJiBCQl9FWEVD VVRBQkxFKSkKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1zY2N2bi5oIGIvZ2NjL3RyZWUtc3Nh LXNjY3ZuLmgKaW5kZXggYWJjZjdlNjY2YzIuLmM5Njg0MWVjZDZlIDEwMDY0NAotLS0gYS9nY2Mv dHJlZS1zc2Etc2Njdm4uaAorKysgYi9nY2MvdHJlZS1zc2Etc2Njdm4uaApAQCAtMjE3LDYgKzIx Nyw0MSBAQCBzdHJ1Y3Qgdm5fYXZhaWwKICAgc3RydWN0IHZuX3NzYV9hdXggKm5leHRfdW5kbzsK IH07CiAKKy8qIEluIHZuX3NzYV9hdXgsIGhvbGQgYSBsaXN0IG9mIHRlbXBvcmFyeSBlcXVpdmFs ZW5jZXMgb2YgTkFNRS4gIEVhY2ggdmFsdWUKKyAgIHJlcHJlc2VudHMgYSBzZXQgb2YgdmFsaWQg ZXF1aXZhbGVuY2VzLCBhbmQgaXMgY2FsbGVkICJlcXVpdmFsZW5jZSBoZWFkIiBvZgorICAgTkFN RSkuCisKKyAgIE1vcmUgZ2VuZXJhbCByZXN1bHQgKHJlcHJlc2VudGluZyBhIGxhcmdlciBzZXQp IHNob3VsZCBiZSBjbG9zZXIgdG8gdGhlCisgICBmcm9udC4gICovCisKK3N0cnVjdCB0ZW1wX2Vx dWl2Cit7CisgIHRlbXBfZXF1aXYgKm5leHQ7CisgIHN0cnVjdCB2bl9zc2FfYXV4ICpuZXh0X3Vu ZG87CisgIHZuX3B2YWwgKnZhbHVlczsKK307CisKKy8qIEluIHZuX3NzYV9hdXgsIGhvbGQgYSBs aXN0IG9mIGJhY2stcmVmZXJlbmNlcy4gIFRoZXJlJ3JlIHR3byB0eXBlczoKKworICAgMSkgQmFj ay1yZWZlcmVuY2VzIHRvIHRoZSBuYXJ5IG1hcCBlbnRyaWVzICh3aXRoIE5BTUUgYXMgb3BlcmFu ZCkuICBTbworICAgICAgd2hlbiBuZXcgZXF1aXZhbGVuY2UgaXMgcmVjb3JkZWQgdG8gaXQsIHdl IGNhbiByZS1pbnNlcnQgbmFyeQorICAgICAgZXhwcmVzc2lvbnMnIHJlc3VsdHMgYmFzZWQgb24g dGhpcy4KKworICAgMikgQmFjay1yZWZlcmVuY2VzIHRvIGFub3RoZXIgdm5fc3NhX2F1eCAod2hv J3MgbmFtZSBpcyBYKSwgdGhhdCB0YWtlcworICAgICAgTkFNRSBhcyBlcXVpdmFsZW5jZS1oZWFk LiAgU28gd2hlbiBOQU1FIGlzIGFzc2lnbmVkIHdpdGggbmV3CisgICAgICBlcXVpdmFsZW5jZS1o ZWFkIFksIHdlIGNhbiBhbHNvIHVwZGF0ZSBYJ3MgZXF1aXZhbGVuY2UtaGVhZCB0byBZLgorICAg ICAgSW4gdGhpcyB3YXksIHRoZSBlcXVpdmFsZW5jZS1zZXRzIGFyZSBwYXRoLWNvbXByZXNzZWQu ICAqLworCitzdHJ1Y3QgbmFyeV9yZWYKK3sKKyAgbmFyeV9yZWYgKm5leHQ7CisgIC8qIEJhY2st cmVmZXJlbmNlIHRvIHRoZSBuYXJ5IG1hcCBlbnRyeS4gICovCisgIHZuX25hcnlfb3BfdCB2bm87 CisgIC8qIEJhY2stcmVmZXJlbmNlIHRvIGFub3RoZXIgdm5fc3NhX2F1eC4gICovCisgIHN0cnVj dCB2bl9zc2FfYXV4ICp2bjsKKyAgc3RydWN0IHZuX3NzYV9hdXggKm5leHRfdW5kbzsKK307CisK IHR5cGVkZWYgc3RydWN0IHZuX3NzYV9hdXgKIHsKICAgLyogU1NBIG5hbWUgdGhpcyB2bl9zc2Ff YXV4IGlzIGFzc29jaWF0ZWQgd2l0aCBpbiB0aGUgbGF0dGljZS4gICovCkBAIC0yMzAsMTIgKzI2 NSwyMSBAQCB0eXBlZGVmIHN0cnVjdCB2bl9zc2FfYXV4CiAgICAgIGZvciBTU0EgbmFtZXMgYWxz byBzZXJ2aW5nIGFzIHZhbHVlcyAoTkFNRSA9PSBWQUxOVU0pLiAgKi8KICAgdm5fYXZhaWwgKmF2 YWlsOwogCisgIC8qIFJlZmVyZW5jZXMgdG8gc2xvdHMgaW4gdGhlIG5hcnkgbWFwLCB3aXRoIE5B TUUgYXMgb3BlcmFuZC4gICovCisgIG5hcnlfcmVmICpyZWY7CisKKyAgLyogVGVtcG9yYXJ5IGVx dWl2YWxlbmNlcyBvZiBOQU1FLiAgKi8KKyAgdGVtcF9lcXVpdiAqZXF1aXY7CisKICAgLyogVW5p cXVlIGlkZW50aWZpZXIgdGhhdCBhbGwgZXhwcmVzc2lvbnMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBo YXZlLiAqLwogICB1bnNpZ25lZCBpbnQgdmFsdWVfaWQ7CiAKICAgLyogV2hldGhlciB0aGUgU1NB X05BTUUgaGFzIGJlZW4gcHJvY2Vzc2VkIGF0IGxlYXN0IG9uY2UuICAqLwogICB1bnNpZ25lZCB2 aXNpdGVkIDogMTsKIAorICAvKiBuYXJ5X3JlZiBjb3VudC4gICovCisgIHVuc2lnbmVkIHNob3J0 IG51bV9uYXJ5X3JlZjsKKwogICAvKiBXaGV0aGVyIHRoZSBTU0FfTkFNRSBoYXMgbm8gZGVmaW5p bmcgc3RhdGVtZW50IGFuZCB0aHVzIGFuCiAgICAgIGluc2VydGlvbiBvZiBzdWNoIHdpdGggRVhQ UiBhcyBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZQogICAgICBhIHVzZSBjYW4gYmUgY3Jl YXRlZCBvZiBpdC4gICovCg== --_002_SN6PR01MB424007EDA90A5A4158AB0EE4E8319SN6PR01MB4240prod_--