From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 9A828386EC26 for ; Wed, 7 Jul 2021 17:38:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9A828386EC26 Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 167HWHqS011170; Wed, 7 Jul 2021 17:38:07 GMT Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by mx0b-00069f02.pphosted.com with ESMTP id 39m3mhcp6c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jul 2021 17:38:06 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 167HUVxI119622; Wed, 7 Jul 2021 17:38:05 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2107.outbound.protection.outlook.com [104.47.70.107]) by aserp3030.oracle.com with ESMTP id 39nbg2jxxf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jul 2021 17:38:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kdIzIHILUDt9TFlqnxughHCfm8Mxgtrvkq6HQM7AMWI/oSW/uFiBps6oqAq6rGKfxNuPgZrQvJUOLdNn41d1JI7uhhGMP7UEYAIwJA8jtJ7oR36CbjtWVZyp+kITIeNXMPRS7rrNTAx+c6SO8Jd4V2iTqNDSq5qShGMqN7CwjRZaqxCcUlgEKNh6QzjXhLt9m/ioyrJgCGyZ9Sjhylug9N3rRyWBzqoOU1rigu451h7gFlGbdCWCAwIAi+Lnr/zc7pFgGJPB6B8AIaRAGpvlkBNvA0tl/dcB9aqNQUA+s5FoKciMz081j2fJBWAaOMH7vTNzCEAWAtAB+lpxxLEwaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1+PGEdUcPZ2e4hRHFXhs/BLe3nRBLs018Up9pVmm3Ps=; b=b8CoUS4Gil7e3sfgCqlGgUtecx8Uwu++p2vXV2DIvubKmbU+io4tjTDL8sxV8UEVqJpYPa37D1giJ2qjWqCgWdCOFtc29+3/fDcZnHy0UpZLfno7Ro/VSO+MiyABAsseA1DMqp7JmJWg+lGaH3fPhWb2/dsEi+x/LopSEm64YD/wLZV0e037g0QHDKDMM3P7qu22PBGkgFai5/DmzZzBSaAY4aG9Gns9DWk/gXEZmCB8gqm1DuUNhnezGGotISnsOafH5I24CuS4Y7Rno8Brh09oBUqdXcSrSjdT+3oXKctR76Wotwz0fN5VpK1/pa38t41YVLxW0MItLrICvWeYow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by CH0PR10MB5226.namprd10.prod.outlook.com (2603:10b6:610:da::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.19; Wed, 7 Jul 2021 17:38:02 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::40d3:31ef:73a8:802]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::40d3:31ef:73a8:802%3]) with mapi id 15.20.4308.020; Wed, 7 Jul 2021 17:38:02 +0000 From: Qing Zhao To: Richard Biener , Richard Sandiford , kees cook CC: gcc-patches Qing Zhao via Subject: [patch][version 4]add -ftrivial-auto-var-init and variable attribute "uninitialized" to gcc Thread-Topic: [patch][version 4]add -ftrivial-auto-var-init and variable attribute "uninitialized" to gcc Thread-Index: AQHXc1bWYuGRvndBkk+CruaTEsEdLw== Date: Wed, 7 Jul 2021 17:38:02 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3608.120.23.2.7) x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 556637ce-37b4-4659-8f9d-08d9416df8b2 x-ms-traffictypediagnostic: CH0PR10MB5226: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Lt1v/d1CtAjf8/7sSo2zhtlhNEbMLXSebSHuaF3mMP0GOAGV1mprY4GnBhA8YAqggH/C4PMMB2QO/t38ptymVrOFx7ZUPEbmHIstayyce6CnDCD4smlGP6XKyDt1rpn/jcsKl+o1cvCa4kB4yFBgHM5nTN6ArDLmiENnUbgDFEHNbOYF48+/bQZJCHkqrwH/gerLtTAjB+db/zbJx5oHkb0lnckJHHgWn/5OQjayMA9d59z73diX32XUMcNYejxWoJtiu51EBjNvAzYrnzxCoCseal7lioFSmT64DK4u/ZqA8jHB41cX4aZj0IB0XOKxHYbDHqbG4jtHgLX9Gj4pBH0ybK216npuEqcDLBFhXqC7goBLAnzfe1SiYpzL0o3GijNnXoH9qIvH/XgRbcN7Y0krtUV4M6O87/YmeeGZvxHgSM9RpNwNjWLCvlbq661co20/dWeYyHhmezR+ltTqXwuMTpNuanRJ54s83y62bxz81E8ufDJNFMhBPC/Xlnr0z70ynb0Lnzu2cdnq/uVbklorFx1+rYetok9lR22mdV9zscWfym0lCPZ+wozQQhfQG97IBzOt5sv7RFl9rk3aIoTiBQ6BopmOajlvTSaR0zUBa+HeqkEv/XigYg/BR4Rtx919H281XRCWfUMYv1j1AQN7saXKPukfyfHaACO5lyxV2gTh8pusxFVpJYhg7yUXe1KwujWU/snnoOHbFsq+w303OSCyTulGHc7N20hdfKvyWE5ckeJ4m/BMWfVHjCmEte4V6KgoKfc3ydAwAWs4D1rZaewZDWJf3uFJyoOj1LoqJ5gaBatVB6BTCEdbrHC0 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR10MB4344.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(136003)(39860400002)(396003)(346002)(376002)(76116006)(66556008)(66446008)(66476007)(4326008)(99936003)(71200400001)(5660300002)(91956017)(8936002)(6512007)(66946007)(6486002)(64756008)(478600001)(8676002)(122000001)(2616005)(86362001)(316002)(2906002)(6506007)(36756003)(38100700002)(33656002)(110136005)(966005)(83380400001)(186003)(44832011)(66616009)(45980500001)(266184004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?Rvz7xmqdTaaGeafeGq8cscbxz0iAnhI6BMkNKP9KwTGVsZcmQbQ22pSyjv30?= =?us-ascii?Q?efxVd9WdArFJ3d7rB6sy9or7w1rJuzvHiAEDDZpCy4zwqAjBrlaJn7lU3vZw?= =?us-ascii?Q?wJXiv+No5dTvkl4qbDjaaE9cbhUHI5Zd8oQaBrsBao7LlpGJ2un1OXDzgJ1h?= =?us-ascii?Q?eZPB7ZI2vtaLgAUGYhH1f27Ez9S6sfnteu9LEi7nSD+AboOFgDWiUvCWG3/c?= =?us-ascii?Q?3XhQBALYrSw8IpAy44tdYVuEfjRmyziJd5QFd1ttQW81GG72mNX7f0jK1heJ?= =?us-ascii?Q?kRi4LSkrRtLpW0/WPzQhMnPwfN6DascG0LuyusaBuCe8LsTxxcx+Mxm7Y93e?= =?us-ascii?Q?ISLLpsZ25Od79G7Ui65VN62BfblIeOKVFMN9/IH6yXop6vh3USf2g6XCb7gH?= =?us-ascii?Q?FdXlM6IMJhzqdOsERJLF6J9jcaO4ujSVx7yLXvrkyMYZXdaCX9y25knBde6v?= =?us-ascii?Q?XEKLqUVgrgoBO+iSllAR+se1Ia+ScEdoXsyrARTNAwA8mhqLMu4Oh3CAk8Sv?= =?us-ascii?Q?1TxV95tPQ45L0EZtO5NLXUBCvfvlfFiGn1gNU+GyjN8RyVBj2OivpJxvLD/F?= =?us-ascii?Q?AZQeWvh8dqN1Wt/hI4lMx/UTQn4OodgA7dK3SxHJ5hsyyfBZs9kPJpdkHFTM?= =?us-ascii?Q?6MGbUADA6WbLHIj5wDRmGYZngaiZdMwbR3jK7cO+bVoIZolzz2tlKWYtfPX2?= =?us-ascii?Q?KpypnSx1Px0GJzB1HAfgelLpkcD1dnw5uRQVyFxNes5v2R2es5+HgJxGP03B?= =?us-ascii?Q?ySAeuQp8TQRKPQSj/udfKn9x+En1fh4rk4o/0tATSZKB9eXDXirK3HWVFEDx?= =?us-ascii?Q?iT+cQ/ewn1PpbHKLzPXNUn0yadQyCi6TiDmQtVUNlQOX2I7HdwDmfg2lndH0?= =?us-ascii?Q?3hCpKIqWBsMRoeNVaiwnSbQaDHcVNcL186+730Ifi9cG2rCEAerizqmLlwN2?= =?us-ascii?Q?mNjqbUi8T+YacmLnttBurtx9p/gqy2Myk8OtIt4/yfdrGeLAIczQ1L4qXuk3?= =?us-ascii?Q?FSOAhUTbRLQq6NEYpNnXPghTqvh0ynfLObkP4po2GE6AIZ+O/wDKeZkJdPwP?= =?us-ascii?Q?CvSQmVmeRkvJxn49k3SW8EkuQsXWpVOmqn+hyqgNTrRPYSwk6yEzn7//0yvF?= =?us-ascii?Q?c0OVW5/DGWJIHnhth+0Dkx0Nnjqh3zLwTMOSCEhZI3++Wapd/Ym567UJx8oc?= =?us-ascii?Q?rZLGohX9F/IIXFJU9Cx2wS65coLD6E6ugvRSvzulvRzTEqdrT13RjSNYyaWu?= =?us-ascii?Q?XLBGcvHmCStLXhb69e9PzSj/wjnFJXutjgZTbdcirqYdXm9qswXhxQT/hbrd?= =?us-ascii?Q?FzF9xZepnHe450cc8KA9THHg7/4Gr+9jL9P2jT3Fs8FBzVnM5l+YkBNWSuy7?= =?us-ascii?Q?iJOe3TPwnMX3vEpldn7JrZb8xP4/?= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_A1E698BD2DFB486CAD7C9B4300A9AB4Coraclecom_" MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 556637ce-37b4-4659-8f9d-08d9416df8b2 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jul 2021 17:38:02.8641 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Y2NO+PYRlBz/qGwKgIbc9quVUOBBAXH6uPlCM1r67dzNCcnd6X6vv1356+eG8UebdG78XW4b3IXfUeNDIduMLA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB5226 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10037 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 phishscore=0 adultscore=0 suspectscore=0 spamscore=0 malwarescore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2107070101 X-Proofpoint-GUID: OhsPY7-vV_vWYOoXqYSUUtO59Gu98_Yl X-Proofpoint-ORIG-GUID: OhsPY7-vV_vWYOoXqYSUUtO59Gu98_Yl X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Jul 2021 17:38:15 -0000 --_002_A1E698BD2DFB486CAD7C9B4300A9AB4Coraclecom_ Content-Type: text/plain; charset="us-ascii" Content-ID: Content-Transfer-Encoding: quoted-printable Hi,=20 This is the 4th version of the patch for the new security feature for GCC. I have tested it with bootstrap on both x86 and aarch64, regression testing= on both x86 and aarch64. Also compile and run CPU2017, without any issue. Please take a look and let me know your comments and suggestions. thanks. Qing ******Compare with the 3rd version, the following are the major changes: 1. change -ftrivial-auto-var-init as an optimization option in order to ref= er it with "opt_for_fn"; 2. delete option -fauto-var-init-approach; 3. update -ftrivial-auto-var-init doc by adding padding initialization and = some clarification for pattern initializations. 4. delete the changes in the routine "store_constructor" and "gimplify_init= _constructor" about padding initializations. 5. for VLA variable, also generate calls to .DEFERRED_INIT instead of calls= to "meset", consistent with non-VLA. =20 delete all changes on "memset" calls for VLA initialization.=20 6. change the definition of .DEFERRED_INIT: From: temp =3D .DEFERRED_INIT (temp, init_type) To: temp =3D .DEFERRED_INIT (SIZE_of_temp, init_type, IS_VLA)=20 the first argument of .DEFERRED_INIT will be the size of the "temp", and th= e=20 additional 3rd argument is a bool on whether it's a VLA or not. =20 7. in tree-cfg.c, update verifications of call to .DEFERRED_INIT according = to 6. 8. "expand_DEFERRED_INIT" will do rtl expansion for both VLA and nonVLA; pattern initialization will use byte-repeatable pattern "0xFE" for initi= alization; for VLA and varibles that in stack, expand the call to a memset of zeroe= s or "FE"s; for variables that are in registers, expand the call by using "expand_as= signment"=20 in order to generate better code for Integer, pointer and float type va= riables. 9. delete routines "build_pattern_cst_for_auto_init"; type_has_padding"; =20 10. update testing cases accordingly. ******Please see the version 3 at: https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570208.html ******Changelog is: gcc/ChangeLog: 2021-07-06 qing zhao * builtins.c (expand_builtin_memset): Make external visible.=20 * builtins.h (expand_builtin_memset): Declare extern. * common.opt (ftrivial-auto-var-init=3D): New option. * doc/extend.texi: Document the uninitialized attribute. * doc/invoke.texi: Document -ftrivial-auto-var-init. * flag-types.h (enum auto_init_type): New enumerated type auto_init_type. * gimplify.c (gimple_add_init_for_auto_var): New function. (maybe_with_size_expr): Forword declaration. (build_deferred_init): New function. (gimplify_decl_expr): Add initialization to automatic variables per users' requests. * internal-fn.c (INIT_PATTERN_VALUE): New macro. (expand_DEFERRED_INIT): New function. * internal-fn.def (DEFERRED_INIT): New internal function. * tree-cfg.c (verify_gimple_call): Verify calls to .DEFERRED_INIT. * tree-sra.c (generate_subtree_deferred_init): New function. (sra_modify_deferred_init): Likewise; (sra_modify_function_body): Handle calls to DEFERRED_INIT specially. * tree-ssa-structalias.c (find_func_aliases_for_call): * tree-ssa-uninit.c (warn_uninit): Handle calls to DEFERRED_INIT specially. (check_defs): Likewise. (warn_uninitialized_vars): Likewise. * tree-ssa.c (ssa_undefined_value_p): Likewise. gcc/c-family/ChangeLog: 2021-07-06 qing zhao * c-attribs.c (handle_uninitialized_attribute): New function. (c_common_attribute_table): Add "uninitialized" attribute. gcc/testsuite/ChangeLog: 2021-07-06 qing zhao * c-c++-common/auto-init-1.c: New test. * c-c++-common/auto-init-10.c: New test. * c-c++-common/auto-init-11.c: New test. * c-c++-common/auto-init-12.c: New test. * c-c++-common/auto-init-13.c: New test. * c-c++-common/auto-init-14.c: New test. * c-c++-common/auto-init-15.c: New test. * c-c++-common/auto-init-16.c: New test. * c-c++-common/auto-init-2.c: New test. * c-c++-common/auto-init-3.c: New test. * c-c++-common/auto-init-4.c: New test. * c-c++-common/auto-init-5.c: New test. * c-c++-common/auto-init-6.c: New test. * c-c++-common/auto-init-7.c: New test. * c-c++-common/auto-init-8.c: New test. * c-c++-common/auto-init-9.c: New test. * c-c++-common/auto-init-esra.c: New test. * g++.dg/auto-init-uninit-pred-1_a.C: New test. * g++.dg/auto-init-uninit-pred-1_b.C: New test. * g++.dg/auto-init-uninit-pred-2_a.C: New test. * g++.dg/auto-init-uninit-pred-2_b.C: New test. * g++.dg/auto-init-uninit-pred-3_a.C: New test. * g++.dg/auto-init-uninit-pred-3_b.C: New test. * g++.dg/auto-init-uninit-pred-4.C: New test. * g++.dg/auto-init-uninit-pred-loop-1_a.cc: New test. * g++.dg/auto-init-uninit-pred-loop-1_b.cc: New test. * g++.dg/auto-init-uninit-pred-loop-1_c.cc: New test. * g++.dg/auto-init-uninit-pred-loop_1.cc: New test. * gcc.dg/auto-init-uninit-1.c: New test. * gcc.dg/auto-init-uninit-11.c: New test. * gcc.dg/auto-init-uninit-12.c: New test. * gcc.dg/auto-init-uninit-13.c: New test. * gcc.dg/auto-init-uninit-14.c: New test. * gcc.dg/auto-init-uninit-15.c: New test. * gcc.dg/auto-init-uninit-16.c: New test. * gcc.dg/auto-init-uninit-17.c: New test. * gcc.dg/auto-init-uninit-18.c: New test. * gcc.dg/auto-init-uninit-19.c: New test. * gcc.dg/auto-init-uninit-2.c: New test. * gcc.dg/auto-init-uninit-20.c: New test. * gcc.dg/auto-init-uninit-21.c: New test. * gcc.dg/auto-init-uninit-22.c: New test. * gcc.dg/auto-init-uninit-23.c: New test. * gcc.dg/auto-init-uninit-24.c: New test. * gcc.dg/auto-init-uninit-25.c: New test. * gcc.dg/auto-init-uninit-26.c: New test. * gcc.dg/auto-init-uninit-3.c: New test. * gcc.dg/auto-init-uninit-34.c: New test. * gcc.dg/auto-init-uninit-36.c: New test. * gcc.dg/auto-init-uninit-37.c: New test. * gcc.dg/auto-init-uninit-4.c: New test. * gcc.dg/auto-init-uninit-5.c: New test. * gcc.dg/auto-init-uninit-6.c: New test. * gcc.dg/auto-init-uninit-8.c: New test. * gcc.dg/auto-init-uninit-9.c: New test. * gcc.dg/auto-init-uninit-A.c: New test. * gcc.dg/auto-init-uninit-B.c: New test. * gcc.dg/auto-init-uninit-C.c: New test. * gcc.dg/auto-init-uninit-H.c: New test. * gcc.dg/auto-init-uninit-I.c: New test. * gcc.target/aarch64/auto-init-1.c: New test. * gcc.target/aarch64/auto-init-10.c: New test. * gcc.target/aarch64/auto-init-11.c: New test. * gcc.target/aarch64/auto-init-12.c: New test. * gcc.target/aarch64/auto-init-13.c: New test. * gcc.target/aarch64/auto-init-14.c: New test. * gcc.target/aarch64/auto-init-15.c: New test. * gcc.target/aarch64/auto-init-16.c: New test. * gcc.target/aarch64/auto-init-17.c: New test. * gcc.target/aarch64/auto-init-18.c: New test. * gcc.target/aarch64/auto-init-19.c: New test. * gcc.target/aarch64/auto-init-2.c: New test. * gcc.target/aarch64/auto-init-20.c: New test. * gcc.target/aarch64/auto-init-3.c: New test. * gcc.target/aarch64/auto-init-4.c: New test. * gcc.target/aarch64/auto-init-5.c: New test. * gcc.target/aarch64/auto-init-6.c: New test. * gcc.target/aarch64/auto-init-7.c: New test. * gcc.target/aarch64/auto-init-8.c: New test. * gcc.target/aarch64/auto-init-9.c: New test. * gcc.target/i386/auto-init-1.c: New test. * gcc.target/i386/auto-init-10.c: New test. * gcc.target/i386/auto-init-11.c: New test. * gcc.target/i386/auto-init-12.c: New test. * gcc.target/i386/auto-init-13.c: New test. * gcc.target/i386/auto-init-14.c: New test. * gcc.target/i386/auto-init-15.c: New test. * gcc.target/i386/auto-init-16.c: New test. * gcc.target/i386/auto-init-17.c: New test. * gcc.target/i386/auto-init-18.c: New test. * gcc.target/i386/auto-init-19.c: New test. * gcc.target/i386/auto-init-2.c: New test. * gcc.target/i386/auto-init-20.c: New test. * gcc.target/i386/auto-init-21.c: New test. * gcc.target/i386/auto-init-22.c: New test. * gcc.target/i386/auto-init-23.c: New test. * gcc.target/i386/auto-init-24.c: New test. * gcc.target/i386/auto-init-3.c: New test. * gcc.target/i386/auto-init-4.c: New test. * gcc.target/i386/auto-init-5.c: New test. * gcc.target/i386/auto-init-6.c: New test. * gcc.target/i386/auto-init-7.c: New test. * gcc.target/i386/auto-init-8.c: New test. * gcc.target/i386/auto-init-9.c: New test. ******The complete 4th version of the patch is: --_002_A1E698BD2DFB486CAD7C9B4300A9AB4Coraclecom_ Content-Type: application/octet-stream; name="0001-4th-version-master.patch" Content-Description: 0001-4th-version-master.patch Content-Disposition: attachment; filename="0001-4th-version-master.patch"; size=147189; creation-date="Wed, 07 Jul 2021 17:38:02 GMT"; modification-date="Wed, 07 Jul 2021 17:38:02 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSBmNDViYWViYTQwYzFmY2VhMGUzYWVjODZlZGQ1MTY5Yzg3NjVjZDM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBRaW5nIFpoYW8gPHFpbmcuemhhb0BvcmFjbGUuY29tPgpEYXRl OiBTYXQsIDMgSnVsIDIwMjEgMDA6MTE6MTAgKzAwMDAKU3ViamVjdDogW1BBVENIXSA0dGggdmVy c2lvbiBtYXN0ZXIKCi0tLQogZ2NjL2J1aWx0aW5zLmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAzICstCiBnY2MvYnVpbHRpbnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDEgKwogZ2NjL2MtZmFtaWx5L2MtYXR0cmlicy5jICAgICAgICAgICAgICAgICAg ICAgIHwgIDE5ICsrCiBnY2MvY29tbW9uLm9wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgMTYgKysKIGdjYy9kb2MvZXh0ZW5kLnRleGkgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAxNiArKwogZ2NjL2RvYy9pbnZva2UudGV4aSAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDQxICsrLQogZ2NjL2ZsYWctdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICA3ICsKIGdjYy9naW1wbGlmeS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICA2NyArKysrKwogZ2NjL2ludGVybmFsLWZuLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgMTA4ICsrKysrKysrCiBnY2MvaW50ZXJuYWwtZm4uZGVmICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDUgKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTEuYyAg ICAgIHwgIDM5ICsrKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTEwLmMg ICAgIHwgIDE3ICsrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMTEuYyAg ICAgfCAgMTQgKysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0xMi5jICAg ICB8ICAxNCArKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTEzLmMgICAg IHwgIDIzICsrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMTQuYyAgICAg fCAgMjMgKysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0xNS5jICAgICB8 ICAxMyArCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMTYuYyAgICAgfCAg MTMgKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTIuYyAgICAgIHwgIDM5 ICsrKwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTMuYyAgICAgIHwgIDE5 ICsrCiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtNC5jICAgICAgfCAgMTkg KysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC01LmMgICAgICB8ICAyMSAr KwogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTYuYyAgICAgIHwgIDIxICsr CiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtNy5jICAgICAgfCAgMzUgKysr CiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtOC5jICAgICAgfCAgMzUgKysr CiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtOS5jICAgICAgfCAgMTcgKysK IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC1lc3JhLmMgICB8ICAzNSArKysK IC4uLi9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLTFfYS5DICAgICAgICB8ICA2MyArKysr KwogLi4uL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtMV9iLkMgICAgICAgIHwgIDYzICsr KysrCiAuLi4vZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC0yX2EuQyAgICAgICAgfCAgNjIg KysrKysKIC4uLi9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLTJfYi5DICAgICAgICB8ICA2 MiArKysrKwogLi4uL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtM19hLkMgICAgICAgIHwg IDc3ICsrKysrKwogLi4uL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtM19iLkMgICAgICAg IHwgIDg3ICsrKysrKysKIC4uLi9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLTQuQyAgICAg ICAgICB8ICAxNiArKwogLi4uL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtbG9vcC0xX2Eu Y2MgIHwgIDIxICsrCiAuLi4vZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC1sb29wLTFfYi5j YyAgfCAgMjEgKysKIC4uLi9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLWxvb3AtMV9jLmNj ICB8ICAyMyArKwogLi4uL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtbG9vcF8xLmNjICAg IHwgIDIxICsrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTEuYyAgICAg fCAgMzAgKysrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTExLmMgICAg fCAgNDIgKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xMi5jICAg IHwgIDEyICsKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMTMuYyAgICB8 ICAxMCArCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTE0LmMgICAgfCAg MjAgKysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMTUuYyAgICB8ICAy NiArKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xNi5jICAgIHwgIDIz ICsrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTE3LmMgICAgfCAgMTUg KysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMTguYyAgICB8ICAyNCAr KwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xOS5jICAgIHwgIDI2ICsr CiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTIuYyAgICAgfCAgNTIgKysr KwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0yMC5jICAgIHwgIDE4ICsr CiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTIxLmMgICAgfCAgMzMgKysr CiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTIyLmMgICAgfCAgNjkgKysr KysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMjMuYyAgICB8ICAyNyAr KwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0yNC5jICAgIHwgIDEwICsK IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMjUuYyAgICB8ICAyMyArKwog Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0yNi5jICAgIHwgIDIzICsrCiBn Y2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTMuYyAgICAgfCAgMzMgKysrCiBn Y2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTM0LmMgICAgfCAgNTggKysrKysK IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMzYuYyAgICB8IDIzOCArKysr KysrKysrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMzcu YyAgICB8IDE1NCArKysrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11 bmluaXQtNC5jICAgICB8ICA1MiArKysrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQt dW5pbml0LTUuYyAgICAgfCAgMzkgKysrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQt dW5pbml0LTYuYyAgICAgfCAgNDcgKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0 LXVuaW5pdC04LmMgICAgIHwgIDMyICsrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0 LXVuaW5pdC05LmMgICAgIHwgIDQyICsrKysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5p dC11bmluaXQtQS5jICAgICB8IDExNyArKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1 dG8taW5pdC11bmluaXQtQi5jICAgICB8ICAxNSArKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0 by1pbml0LXVuaW5pdC1DLmMgICAgIHwgIDIxICsrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRv LWluaXQtdW5pbml0LUguYyAgICAgfCAgMzMgKysrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRv LWluaXQtdW5pbml0LUkuYyAgICAgfCAgIDggKwogLi4uL2djYy50YXJnZXQvYWFyY2g2NC9hdXRv LWluaXQtMS5jICAgICAgICAgIHwgIDMyICsrKwogLi4uL2djYy50YXJnZXQvYWFyY2g2NC9hdXRv LWluaXQtMTAuYyAgICAgICAgIHwgIDE4ICsrCiAuLi4vZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8t aW5pdC0xMS5jICAgICAgICAgfCAgMjcgKysKIC4uLi9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1p bml0LTEyLmMgICAgICAgICB8ICAyNyArKwogLi4uL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWlu aXQtMTMuYyAgICAgICAgIHwgIDIyICsrCiAuLi4vZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5p dC0xNC5jICAgICAgICAgfCAgMjAgKysKIC4uLi9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0 LTE1LmMgICAgICAgICB8ICAyMCArKwogLi4uL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQt MTYuYyAgICAgICAgIHwgIDIyICsrCiAuLi4vZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0x Ny5jICAgICAgICAgfCAgMjEgKysKIC4uLi9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTE4 LmMgICAgICAgICB8ICAyMiArKwogLi4uL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMTku YyAgICAgICAgIHwgIDI3ICsrCiAuLi4vZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0yLmMg ICAgICAgICAgfCAgMzUgKysrCiAuLi4vZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0yMC5j ICAgICAgICAgfCAgMjcgKysKIC4uLi9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTMuYyAg ICAgICAgICB8ICAxNyArKwogLi4uL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtNC5jICAg ICAgICAgIHwgIDE5ICsrCiAuLi4vZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC01LmMgICAg ICAgICAgfCAgMTkgKysKIC4uLi9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTYuYyAgICAg ICAgICB8ICAxOCArKwogLi4uL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtNy5jICAgICAg ICAgIHwgIDMyICsrKwogLi4uL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtOC5jICAgICAg ICAgIHwgIDMyICsrKwogLi4uL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtOS5jICAgICAg ICAgIHwgIDE3ICsrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMS5j ICAgfCAgMzIgKysrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTAu YyAgfCAgMTkgKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xMS5j ICB8ICAzMCArKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xMi5j ICB8ICAyOCArKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xMy5j ICB8ICAyMiArKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTE0LmMg IHwgIDIyICsrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTUuYyAg fCAgMjIgKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xNi5jICB8 ICAyMiArKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTE3LmMgIHwg IDIzICsrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTguYyAgfCAg MjEgKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xOS5jICB8ICAy NiArKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTIuYyAgIHwgIDM2 ICsrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTIwLmMgIHwgIDI2 ICsrCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMjEuYyAgfCAgMTQg KysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0yMi5jICB8ICAxNCAr KwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTIzLmMgIHwgIDEzICsK IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0yNC5jICB8ICAxMyArCiBn Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMy5jICAgfCAgMTcgKysKIGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC00LmMgICB8ICAyMCArKwogZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTUuYyAgIHwgIDIwICsrCiBnY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtNi5jICAgfCAgMTkgKysKIGdjYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC03LmMgICB8ICAzMiArKysKIGdjYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC04LmMgICB8ICAzNSArKysKIGdjYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC05LmMgICB8ICAxOSArKwogZ2NjL3Ry ZWUtY2ZnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDk5ICsrKysrKy0tCiBn Y2MvdHJlZS1zcmEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMzcgKysrKysr KysrLQogZ2NjL3RyZWUtc3NhLXN0cnVjdGFsaWFzLmMgICAgICAgICAgICAgICAgICAgIHwgICAz ICsKIGdjYy90cmVlLXNzYS11bmluaXQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0NyAr KysrCiBnY2MvdHJlZS1zc2EuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDAg KysrCiAxMTkgZmlsZXMgY2hhbmdlZCwgMzg4MSBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWlu aXQtMS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0 by1pbml0LTEwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9hdXRvLWluaXQtMTEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL2F1dG8taW5pdC0xMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vYXV0by1pbml0LTEzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMTQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0xNS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTE2LmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMi5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC00LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtNS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0 LTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8t aW5pdC03LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9h dXRvLWluaXQtOC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vYXV0by1pbml0LTkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL2F1dG8taW5pdC1lc3JhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRl L2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtMV9hLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtMV9iLkMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtMl9h LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5p bml0LXByZWQtMl9iLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9h dXRvLWluaXQtdW5pbml0LXByZWQtM19hLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtM19iLkMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtNC5DCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLWxv b3AtMV9hLmNjCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXV0by1p bml0LXVuaW5pdC1wcmVkLWxvb3AtMV9iLmNjCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLWxvb3AtMV9jLmNjCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLWxvb3Bf MS5jYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11 bmluaXQtMS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1p bml0LXVuaW5pdC0xMS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv YXV0by1pbml0LXVuaW5pdC0xMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvYXV0by1pbml0LXVuaW5pdC0xMy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xNC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xNS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xNi5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xNy5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xOC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5p dC0xOS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0 LXVuaW5pdC0yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRv LWluaXQtdW5pbml0LTIwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5k Zy9hdXRvLWluaXQtdW5pbml0LTIxLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRl L2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTIyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTIzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTI0LmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTI1LmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTI2LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTMu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmlu aXQtMzQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5p dC11bmluaXQtMzYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1 dG8taW5pdC11bmluaXQtMzcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL2F1dG8taW5pdC11bmluaXQtNC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC01LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtOC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC05LmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LUEuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtQi5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC1D LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5p bml0LUguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5p dC11bmluaXQtSS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvYXV0by1pbml0LTEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0xMC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTExLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMTIuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8t aW5pdC0xMy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2Fh cmNoNjQvYXV0by1pbml0LTE0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMTUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0xNi5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTE3LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWlu aXQtMTguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJj aDY0L2F1dG8taW5pdC0xOS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0yMC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC00 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9h dXRvLWluaXQtNS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvYXV0by1pbml0LTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC03LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtOC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTkuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0x LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRv LWluaXQtMTAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2F1dG8taW5pdC0xMS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvYXV0by1pbml0LTEyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xNC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTE1LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTYu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8t aW5pdC0xNy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvYXV0by1pbml0LTE4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMjAuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0yMS5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTIyLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWlu aXQtMjMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F1dG8taW5pdC0yNC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvYXV0by1pbml0LTMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC00LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtNS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTYuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC03LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtOC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1p bml0LTkuYwoKZGlmZiAtLWdpdCBhL2djYy9idWlsdGlucy5jIGIvZ2NjL2J1aWx0aW5zLmMKaW5k ZXggZTVlMzkzODZhOTNkLi5mMzI1MjQwMzc4MGUgMTAwNjQ0Ci0tLSBhL2djYy9idWlsdGlucy5j CisrKyBiL2djYy9idWlsdGlucy5jCkBAIC0xNDUsNyArMTQ1LDYgQEAgc3RhdGljIHJ0eCBleHBh bmRfYnVpbHRpbl9zdHBjcHkgKHRyZWUsIHJ0eCwgbWFjaGluZV9tb2RlKTsKIHN0YXRpYyBydHgg ZXhwYW5kX2J1aWx0aW5fc3RwbmNweSAodHJlZSwgcnR4KTsKIHN0YXRpYyBydHggZXhwYW5kX2J1 aWx0aW5fc3RybmNhdCAodHJlZSwgcnR4KTsKIHN0YXRpYyBydHggZXhwYW5kX2J1aWx0aW5fc3Ry bmNweSAodHJlZSwgcnR4KTsKLXN0YXRpYyBydHggZXhwYW5kX2J1aWx0aW5fbWVtc2V0ICh0cmVl LCBydHgsIG1hY2hpbmVfbW9kZSk7CiBzdGF0aWMgcnR4IGV4cGFuZF9idWlsdGluX21lbXNldF9h cmdzICh0cmVlLCB0cmVlLCB0cmVlLCBydHgsIG1hY2hpbmVfbW9kZSwgdHJlZSk7CiBzdGF0aWMg cnR4IGV4cGFuZF9idWlsdGluX2J6ZXJvICh0cmVlKTsKIHN0YXRpYyBydHggZXhwYW5kX2J1aWx0 aW5fc3RybGVuICh0cmVlLCBydHgsIG1hY2hpbmVfbW9kZSk7CkBAIC02NzEwLDcgKzY3MDksNyBA QCBidWlsdGluX21lbXNldF9nZW5fc3RyICh2b2lkICpkYXRhLCB2b2lkICpwcmV2cCwKICAgIHRy eSB0byBnZXQgdGhlIHJlc3VsdCBpbiBUQVJHRVQsIGlmIGNvbnZlbmllbnQgKGFuZCBpbiBtb2Rl IE1PREUgaWYgdGhhdCdzCiAgICBjb252ZW5pZW50KS4gICovCiAKLXN0YXRpYyBydHgKK3J0eAog ZXhwYW5kX2J1aWx0aW5fbWVtc2V0ICh0cmVlIGV4cCwgcnR4IHRhcmdldCwgbWFjaGluZV9tb2Rl IG1vZGUpCiB7CiAgIGlmICghdmFsaWRhdGVfYXJnbGlzdCAoZXhwLApkaWZmIC0tZ2l0IGEvZ2Nj L2J1aWx0aW5zLmggYi9nY2MvYnVpbHRpbnMuaAppbmRleCBlNzFmNDBjMzAwYTEuLjdlOTI2OTJk ZGY0MSAxMDA2NDQKLS0tIGEvZ2NjL2J1aWx0aW5zLmgKKysrIGIvZ2NjL2J1aWx0aW5zLmgKQEAg LTExNCw2ICsxMTQsNyBAQCBleHRlcm4gcnR4IGJ1aWx0aW5fc3RybmNweV9yZWFkX3N0ciAodm9p ZCAqLCB2b2lkICosIEhPU1RfV0lERV9JTlQsCiAJCQkJICAgICBzY2FsYXJfaW50X21vZGUpOwog ZXh0ZXJuIHJ0eCBidWlsdGluX21lbXNldF9yZWFkX3N0ciAodm9pZCAqLCB2b2lkICosIEhPU1Rf V0lERV9JTlQsCiAJCQkJICAgIHNjYWxhcl9pbnRfbW9kZSk7CitleHRlcm4gcnR4IGV4cGFuZF9i dWlsdGluX21lbXNldCAodHJlZSwgcnR4LCBtYWNoaW5lX21vZGUpOwogZXh0ZXJuIHJ0eCBleHBh bmRfYnVpbHRpbl9zYXZlcmVncyAodm9pZCk7CiBleHRlcm4gdHJlZSBzdGRfYnVpbGRfYnVpbHRp bl92YV9saXN0ICh2b2lkKTsKIGV4dGVybiB0cmVlIHN0ZF9mbl9hYmlfdmFfbGlzdCAodHJlZSk7 CmRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1hdHRyaWJzLmMgYi9nY2MvYy1mYW1pbHkvYy1h dHRyaWJzLmMKaW5kZXggZTYwZmIzMWQ4YzhlLi45YjU5NDAwNmZlNDQgMTAwNjQ0Ci0tLSBhL2dj Yy9jLWZhbWlseS9jLWF0dHJpYnMuYworKysgYi9nY2MvYy1mYW1pbHkvYy1hdHRyaWJzLmMKQEAg LTgzLDYgKzgzLDcgQEAgc3RhdGljIHRyZWUgaGFuZGxlX2FydGlmaWNpYWxfYXR0cmlidXRlICh0 cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKIHN0YXRpYyB0cmVlIGhhbmRsZV9mbGF0 dGVuX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMg dHJlZSBoYW5kbGVfZXJyb3JfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9v bCAqKTsKIHN0YXRpYyB0cmVlIGhhbmRsZV91c2VkX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0 cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfdW5pbml0aWFsaXplZF9hdHRy aWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGljIHRyZWUgaGFu ZGxlX2V4dGVybmFsbHlfdmlzaWJsZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50 LAogCQkJCQkJIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5kbGVfbm9fcmVvcmRlcl9hdHRyaWJ1 dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LApAQCAtMzMxLDYgKzMzMiw4IEBAIGNvbnN0IHN0 cnVjdCBhdHRyaWJ1dGVfc3BlYyBjX2NvbW1vbl9hdHRyaWJ1dGVfdGFibGVbXSA9CiAJCQkgICAg ICBoYW5kbGVfdXNlZF9hdHRyaWJ1dGUsIE5VTEwgfSwKICAgeyAidW51c2VkIiwgICAgICAgICAg ICAgICAgIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJICAgICAgaGFuZGxl X3VudXNlZF9hdHRyaWJ1dGUsIE5VTEwgfSwKKyAgeyAidW5pbml0aWFsaXplZCIsCSAgICAgIDAs IDAsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkgICAgICBoYW5kbGVfdW5pbml0aWFs aXplZF9hdHRyaWJ1dGUsIE5VTEwgfSwKICAgeyAicmV0YWluIiwgICAgICAgICAgICAgICAgIDAs IDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX3JldGFpbl9h dHRyaWJ1dGUsIE5VTEwgfSwKICAgeyAiZXh0ZXJuYWxseV92aXNpYmxlIiwgICAgIDAsIDAsIHRy dWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLApAQCAtMTYxMyw2ICsxNjE2LDIyIEBAIGhhbmRsZV9y ZXRhaW5fYXR0cmlidXRlICh0cmVlICpwbm9kZSwgdHJlZSBuYW1lLCB0cmVlIEFSR19VTlVTRUQg KGFyZ3MpLAogICByZXR1cm4gTlVMTF9UUkVFOwogfQogCisvKiBIYW5kbGUgYW4gInVuaW5pdGlh bGl6ZWQiIGF0dHJpYnV0ZTsgYXJndW1lbnRzIGFzIGluCisgICBzdHJ1Y3QgYXR0cmlidXRlX3Nw ZWMuaGFuZGxlci4gICovCisKK3N0YXRpYyB0cmVlCitoYW5kbGVfdW5pbml0aWFsaXplZF9hdHRy aWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwgdHJlZSBBUkdfVU5VU0VEIChhcmdzKSwKKwkJ CQlpbnQgQVJHX1VOVVNFRCAoZmxhZ3MpLCBib29sICpub19hZGRfYXR0cnMpCit7CisgIGlmICgh VkFSX1AgKCpub2RlKSkKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICIl cUUgYXR0cmlidXRlIGlnbm9yZWQiLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVl OworICAgIH0KKworICByZXR1cm4gTlVMTF9UUkVFOworfQorCiAvKiBIYW5kbGUgYSAiZXh0ZXJu YWxseV92aXNpYmxlIiBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBhcyBpbgogICAgc3RydWN0IGF0dHJp YnV0ZV9zcGVjLmhhbmRsZXIuICAqLwogCmRpZmYgLS1naXQgYS9nY2MvY29tbW9uLm9wdCBiL2dj Yy9jb21tb24ub3B0CmluZGV4IDViMDNiYmM2NjYyMC4uN2VmMTgyZjFkYTMzIDEwMDY0NAotLS0g YS9nY2MvY29tbW9uLm9wdAorKysgYi9nY2MvY29tbW9uLm9wdApAQCAtMzA3NCw2ICszMDc0LDIy IEBAIGZ0cmVlLXNjZXYtY3Byb3AKIENvbW1vbiBWYXIoZmxhZ190cmVlX3NjZXZfY3Byb3ApIElu aXQoMSkgT3B0aW1pemF0aW9uCiBFbmFibGUgY29weSBwcm9wYWdhdGlvbiBvZiBzY2FsYXItZXZv bHV0aW9uIGluZm9ybWF0aW9uLgogCitmdHJpdmlhbC1hdXRvLXZhci1pbml0PQorQ29tbW9uIEpv aW5lZCBSZWplY3ROZWdhdGl2ZSBFbnVtKGF1dG9faW5pdF90eXBlKSBWYXIoZmxhZ19hdXRvX3Zh cl9pbml0KSBJbml0KEFVVE9fSU5JVF9VTklOSVRJQUxJWkVEKSBPcHRpbWl6YXRpb24KKy1mdHJp dmlhbC1hdXRvLXZhci1pbml0PVt1bmluaXRpYWxpemVkfHBhdHRlcm58emVyb10JQWRkIGluaXRp YWxpemF0aW9ucyB0byBhdXRvbWF0aWMgdmFyaWFibGVzLgorCitFbnVtCitOYW1lKGF1dG9faW5p dF90eXBlKSBUeXBlKGVudW0gYXV0b19pbml0X3R5cGUpIFVua25vd25FcnJvcih1bnJlY29nbml6 ZWQgYXV0b21hdGljIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uIHR5cGUgJXFzKQorCitFbnVtVmFs dWUKK0VudW0oYXV0b19pbml0X3R5cGUpIFN0cmluZyh1bmluaXRpYWxpemVkKSBWYWx1ZShBVVRP X0lOSVRfVU5JTklUSUFMSVpFRCkKKworRW51bVZhbHVlCitFbnVtKGF1dG9faW5pdF90eXBlKSBT dHJpbmcocGF0dGVybikgVmFsdWUoQVVUT19JTklUX1BBVFRFUk4pCisKK0VudW1WYWx1ZQorRW51 bShhdXRvX2luaXRfdHlwZSkgU3RyaW5nKHplcm8pIFZhbHVlKEFVVE9fSU5JVF9aRVJPKQorCiA7 IC1mdmVyYm9zZS1hc20gY2F1c2VzIGV4dHJhIGNvbW1lbnRhcnkgaW5mb3JtYXRpb24gdG8gYmUg cHJvZHVjZWQgaW4KIDsgdGhlIGdlbmVyYXRlZCBhc3NlbWJseSBjb2RlICh0byBtYWtlIGl0IG1v cmUgcmVhZGFibGUpLiAgVGhpcyBvcHRpb24KIDsgaXMgZ2VuZXJhbGx5IG9ubHkgb2YgdXNlIHRv IHRob3NlIHdobyBhY3R1YWxseSBuZWVkIHRvIHJlYWQgdGhlCmRpZmYgLS1naXQgYS9nY2MvZG9j L2V4dGVuZC50ZXhpIGIvZ2NjL2RvYy9leHRlbmQudGV4aQppbmRleCBiODNjZDQ5MTliYjEuLjU0 ZWU5OWQyOTQwNyAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9leHRlbmQudGV4aQorKysgYi9nY2MvZG9j L2V4dGVuZC50ZXhpCkBAIC03NTQwLDYgKzc1NDAsMjIgQEAgd2lsbCBiZSBwbGFjZWQgaW4gbmV3 LCB1bmlxdWUgc2VjdGlvbnMuCiAKIFRoaXMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHJlcXVp cmVzIEJpbnV0aWxzIHZlcnNpb24gMi4zNiBvciBsYXRlci4KIAorQGl0ZW0gdW5pbml0aWFsaXpl ZAorQGNpbmRleCBAY29kZXt1bmluaXRpYWxpemVkfSB2YXJpYWJsZSBhdHRyaWJ1dGUKK1RoaXMg YXR0cmlidXRlLCBhdHRhY2hlZCB0byBhIHZhcmlhYmxlIHdpdGggYXV0b21hdGljIHN0b3JhZ2Us IG1lYW5zIHRoYXQKK3RoZSB2YXJpYWJsZSBzaG91bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgaW5p dGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyIHdoZW4KK3RoZSBvcHRpb24gQGNvZGV7LWZ0cml2aWFs LWF1dG8tdmFyLWluaXR9IHByZXNlbnRzLgorCitXaXRoIHRoZSBvcHRpb24gQGNvZGV7LWZ0cml2 aWFsLWF1dG8tdmFyLWluaXR9LCBhbGwgdGhlIGF1dG9tYXRpYyB2YXJpYWJsZXMKK3RoYXQgZG8g bm90IGhhdmUgZXhwbGljaXQgaW5pdGlhbGl6ZXJzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhl IGNvbXBpbGVyLgorVGhlc2UgYWRkaXRpb25hbCBjb21waWxlciBpbml0aWFsaXphdGlvbnMgbWln aHQgaW5jdXIgcnVuLXRpbWUgb3ZlcmhlYWQsCitzb21ldGltZXMgZHJhbWF0aWNhbGx5LiAgVGhp cyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gbWFyayBzb21lIHZhcmlhYmxlcwordG8gYmUgZXhj bHVkZWQgZnJvbSBzdWNoIGF1dG9tYXRpY2FsIGluaXRpYWxpemF0aW9uIGluIG9yZGVyIHRvIHJl ZHVjZSBydW50aW1lCitvdmVyaGVhZC4KKworVGhpcyBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCB3 aGVuIHRoZSBvcHRpb24gQGNvZGV7LWZ0cml2aWFsLWF1dG8tdmFyLWluaXR9Citkb2VzIG5vdCBw cmVzZW50LgorCiBAaXRlbSB2ZWN0b3Jfc2l6ZSAoQHZhcntieXRlc30pCiBAY2luZGV4IEBjb2Rl e3ZlY3Rvcl9zaXplfSB2YXJpYWJsZSBhdHRyaWJ1dGUKIFRoaXMgYXR0cmlidXRlIHNwZWNpZmll cyB0aGUgdmVjdG9yIHNpemUgZm9yIHRoZSB0eXBlIG9mIHRoZSBkZWNsYXJlZApkaWZmIC0tZ2l0 IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKaW5kZXggYTlmZDVm ZGMxMDRjLi4wZTlhYWM2ZTVkNWEgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysr IGIvZ2NjL2RvYy9pbnZva2UudGV4aQpAQCAtNTcyLDkgKzU3Miw5IEBAIE9iamVjdGl2ZS1DIGFu ZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KIC1mdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz1AdmFy e259ICAtZnRyZWUtcHJlICAtZnRyZWUtcGFydGlhbC1wcmUgIC1mdHJlZS1wdGEgQGdvbAogLWZ0 cmVlLXJlYXNzb2MgIC1mdHJlZS1zY2V2LWNwcm9wICAtZnRyZWUtc2luayAgLWZ0cmVlLXNsc3Ig IC1mdHJlZS1zcmEgQGdvbAogLWZ0cmVlLXN3aXRjaC1jb252ZXJzaW9uICAtZnRyZWUtdGFpbC1t ZXJnZSBAZ29sCi0tZnRyZWUtdGVyICAtZnRyZWUtdmVjdG9yaXplICAtZnRyZWUtdnJwICAtZnVu Y29uc3RyYWluZWQtY29tbW9ucyBAZ29sCi0tZnVuaXQtYXQtYS10aW1lICAtZnVucm9sbC1hbGwt bG9vcHMgIC1mdW5yb2xsLWxvb3BzIEBnb2wKLS1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9ucyAg LWZ1bnN3aXRjaC1sb29wcyBAZ29sCistZnRyZWUtdGVyICAtZnRyZWUtdmVjdG9yaXplICAtZnRy ZWUtdnJwICAtZnRyaXZpYWwtYXV0by12YXItaW5pdCBAZ29sCistZnVuY29uc3RyYWluZWQtY29t bW9ucyAtZnVuaXQtYXQtYS10aW1lICAtZnVucm9sbC1hbGwtbG9vcHMgQGdvbAorLWZ1bnJvbGwt bG9vcHMgLWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zICAtZnVuc3dpdGNoLWxvb3BzIEBnb2wK IC1maXBhLXJhICAtZnZhcmlhYmxlLWV4cGFuc2lvbi1pbi11bnJvbGxlciAgLWZ2ZWN0LWNvc3Qt bW9kZWwgIC1mdnB0IEBnb2wKIC1md2ViICAtZndob2xlLXByb2dyYW0gIC1md3BhICAtZnVzZS1s aW5rZXItcGx1Z2luIC1memVyby1jYWxsLXVzZWQtcmVncyBAZ29sCiAtLXBhcmFtIEB2YXJ7bmFt ZX09QHZhcnt2YWx1ZX0KQEAgLTExODAxLDYgKzExODAxLDQxIEBAIFBlcmZvcm0gYmFzaWMgYmxv Y2sgdmVjdG9yaXphdGlvbiBvbiB0cmVlcy4gVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVs dCBhdAogQG9wdGlvbnstTzN9IGFuZCBieSBAb3B0aW9uey1mdHJlZS12ZWN0b3JpemV9LCBAb3B0 aW9uey1mcHJvZmlsZS11c2V9LAogYW5kIEBvcHRpb257LWZhdXRvLXByb2ZpbGV9LgogCitAaXRl bSAtZnRyaXZpYWwtYXV0by12YXItaW5pdD1AdmFye2Nob2ljZX0KK0BvcGluZGV4IGZ0cml2aWFs LWF1dG8tdmFyLWluaXQKK0luaXRpYWxpemUgYXV0b21hdGljIHZhcmlhYmxlcyB3aXRoIGVpdGhl ciBhIHBhdHRlcm4gb3Igd2l0aCB6ZXJvZXMgdG8gaW5jcmVhc2UKK3RoZSBzZWN1cml0eSBhbmQg cHJlZGljdGFiaWxpdHkgb2YgYSBwcm9ncmFtIGJ5IHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBt ZW1vcnkKK2Rpc2Nsb3N1cmUgYW5kIHVzZS4KK0dDQyBzdGlsbCBjb25zaWRlcnMgYW4gYXV0b21h dGljIHZhcmlhYmxlIHRoYXQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0Citpbml0aWFsaXplciBh cyB1bmluaXRpYWxpemVkLCAtV3VuaW5pdGlhbGl6ZWQgd2lsbCBzdGlsbCByZXBvcnQgd2Fybmlu ZyBtZXNzYWdlcworb24gc3VjaCBhdXRvbWF0aWMgdmFyaWFibGVzLgorV2l0aCB0aGlzIG9wdGlv biwgR0NDIHdpbGwgYWxzbyBpbml0aWFsaXplIGFueSBwYWRkaW5nIG9mIGF1dG9tYXRpYyB2YXJp YWJsZXMKK3RoYXQgaGF2ZSBzdHJ1Y3R1cmUgb3IgdW5pb24gdHlwZXMuCisKK1RoZSB0aHJlZSB2 YWx1ZXMgb2YgQHZhcntjaG9pY2V9IGFyZToKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0Bz YW1we3VuaW5pdGlhbGl6ZWR9IGRvZXNuJ3QgaW5pdGlhbGl6ZSBhbnkgYXV0b21hdGljIHZhcmlh Ymxlcy4KK1RoaXMgaXMgQyBhbmQgQysrJ3MgZGVmYXVsdC4KKworQGl0ZW0KK0BzYW1we3BhdHRl cm59IEluaXRpYWxpemUgYXV0b21hdGljIHZhcmlhYmxlcyB3aXRoIHZhbHVlcyB3aGljaCB3aWxs IGxpa2VseQordHJhbnNmb3JtIGxvZ2ljIGJ1Z3MgaW50byBjcmFzaGVzIGRvd24gdGhlIGxpbmUs IGFyZSBlYXNpbHkgcmVjb2duaXplZCBpbiBhCitjcmFzaCBkdW1wIGFuZCB3aXRob3V0IGJlaW5n IHZhbHVlcyB0aGF0IHByb2dyYW1tZXJzIGNhbiByZWx5IG9uIGZvciB1c2VmdWwKK3Byb2dyYW0g c2VtYW50aWNzLgorVGhlIGN1cnJlbnQgdmFsdWUgaXMgYnl0ZS1yZXBlYXRhYmxlIHBhdHRlcm4g d2l0aCBieXRlICIweEZFIi4KK1RoZSB2YWx1ZXMgdXNlZCBmb3IgcGF0dGVybiBpbml0aWFsaXph dGlvbiBtaWdodCBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUuCisKK0BpdGVtCitAc2FtcHt6ZXJv fSBJbml0aWFsaXplIGF1dG9tYXRpYyB2YXJpYWJsZXMgd2l0aCB6ZXJvZXMuCitAZW5kIGl0ZW1p emUKKworVGhlIGRlZmF1bHQgaXMgQHNhbXB7dW5pbml0aWFsaXplZH0uCisKK1lvdSBjYW4gY29u dHJvbCB0aGlzIGJlaGF2aW9yIGZvciBhIHNwZWNpZmljIHZhcmlhYmxlIGJ5IHVzaW5nIHRoZSB2 YXJpYWJsZQorYXR0cmlidXRlIEBjb2Rle3VuaW5pdGlhbGl6ZWR9IChAcHhyZWZ7VmFyaWFibGUg QXR0cmlidXRlc30pLgorCiBAaXRlbSAtZnZlY3QtY29zdC1tb2RlbD1AdmFye21vZGVsfQogQG9w aW5kZXggZnZlY3QtY29zdC1tb2RlbAogQWx0ZXIgdGhlIGNvc3QgbW9kZWwgdXNlZCBmb3IgdmVj dG9yaXphdGlvbi4gIFRoZSBAdmFye21vZGVsfSBhcmd1bWVudApkaWZmIC0tZ2l0IGEvZ2NjL2Zs YWctdHlwZXMuaCBiL2djYy9mbGFnLXR5cGVzLmgKaW5kZXggZTQzZDFkZTQ5MGRmLi42ZmIwYWVm YmZjN2IgMTAwNjQ0Ci0tLSBhL2djYy9mbGFnLXR5cGVzLmgKKysrIGIvZ2NjL2ZsYWctdHlwZXMu aApAQCAtMjc2LDYgKzI3NiwxMyBAQCBlbnVtIHZlY3RfY29zdF9tb2RlbCB7CiAgIFZFQ1RfQ09T VF9NT0RFTF9ERUZBVUxUID0gMQogfTsKIAorLyogQXV0b21hdGljIHZhcmlhYmxlIGluaXRpYWxp emF0aW9uIHR5cGUuICAqLworZW51bSBhdXRvX2luaXRfdHlwZSB7CisgIEFVVE9fSU5JVF9VTklO SVRJQUxJWkVEID0gMCwKKyAgQVVUT19JTklUX1BBVFRFUk4gPSAxLAorICBBVVRPX0lOSVRfWkVS TyA9IDIKK307CisKIC8qIERpZmZlcmVudCBpbnN0cnVtZW50YXRpb24gbW9kZXMuICAqLwogZW51 bSBzYW5pdGl6ZV9jb2RlIHsKICAgLyogQWRkcmVzc1Nhbml0aXplci4gICovCmRpZmYgLS1naXQg YS9nY2MvZ2ltcGxpZnkuYyBiL2djYy9naW1wbGlmeS5jCmluZGV4IDc1YTRhOWQ1OWZkMy4uNGRi NTNjZGE3N2Y4IDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxpZnkuYworKysgYi9nY2MvZ2ltcGxpZnku YwpAQCAtMjQ5LDYgKzI0OSwxMCBAQCBzdGF0aWMgZW51bSBnaW1wbGlmeV9zdGF0dXMgZ2ltcGxp ZnlfY29tcG91bmRfZXhwciAodHJlZSAqLCBnaW1wbGVfc2VxICosIGJvb2wpOwogc3RhdGljIGhh c2hfbWFwPHRyZWUsIHRyZWU+ICpvYWNjX2RlY2xhcmVfcmV0dXJuczsKIHN0YXRpYyBlbnVtIGdp bXBsaWZ5X3N0YXR1cyBnaW1wbGlmeV9leHByICh0cmVlICosIGdpbXBsZV9zZXEgKiwgZ2ltcGxl X3NlcSAqLAogCQkJCQkgICBib29sICgqKSAodHJlZSksIGZhbGxiYWNrX3QsIGJvb2wpOworc3Rh dGljIHZvaWQgZ2ltcGxlX2FkZF9pbml0X2Zvcl9hdXRvX3ZhciAodHJlZSwgZW51bSBhdXRvX2lu aXRfdHlwZSwgYm9vbCwKKwkJCQkJICBnaW1wbGVfc2VxICopOworc3RhdGljIHZvaWQgbWF5YmVf d2l0aF9zaXplX2V4cHIgKHRyZWUgKik7CisKIAogLyogU2hvcnRlciBhbGlhcyBuYW1lIGZvciB0 aGUgYWJvdmUgZnVuY3Rpb24gZm9yIHVzZSBpbiBnaW1wbGlmeS5jCiAgICBvbmx5LiAgKi8KQEAg LTE3NDMsNiArMTc0Nyw1NyBAQCBmb3JjZV9sYWJlbHNfciAodHJlZSAqdHAsIGludCAqd2Fsa19z dWJ0cmVlcywgdm9pZCAqZGF0YSBBVFRSSUJVVEVfVU5VU0VEKQogICByZXR1cm4gTlVMTF9UUkVF OwogfQogCisKKy8qIEJ1aWxkIGEgY2FsbCB0byBpbnRlcm5hbCBjb25zdCBmdW5jdGlvbiBERUZF UlJFRF9JTklUOgorICAgMXN0IGFyZ3VtZW50OiBTSVpFIG9mIHRoZSBERUNMOworICAgMm5kIGFy Z3VtZW50OiBJTklUX1RZUEU7CisgICAzcmQgYXJndW1lbnQ6IElTX1ZMQSwgMCBOTywgMSBZRVM7 CisKKyAgIGFzIERFRkVSUkVEX0lOSVQgKFNJWkUgb2YgdGhlIERFQ0wsIElOSVRfVFlQRSwgSVNf VkxBKS4gICovCisKK3N0YXRpYyBnaW1wbGUgKgorYnVpbGRfZGVmZXJyZWRfaW5pdCAodHJlZSBk ZWNsLAorCQkgICAgIGVudW0gYXV0b19pbml0X3R5cGUgaW5pdF90eXBlLAorCQkgICAgIGJvb2wg aXNfdmxhKQoreworICBnY2NfYXNzZXJ0ICgoaXNfdmxhICYmIFRSRUVfQ09ERSAoZGVjbCkgPT0g V0lUSF9TSVpFX0VYUFIpCisJICAgICAgfHwgKCFpc192bGEgJiYgVFJFRV9DT0RFIChkZWNsKSAh PSBXSVRIX1NJWkVfRVhQUikpOworCisgIHRyZWUgZGVjbF9zaXplID0gTlVMTF9UUkVFOworICB0 cmVlIGluaXRfdHlwZV9ub2RlCisgICAgPSBidWlsZF9pbnRfY3N0IChpbnRlZ2VyX3R5cGVfbm9k ZSwgKGludCkgaW5pdF90eXBlKTsKKyAgdHJlZSBpc192bGFfbm9kZQorICAgID0gYnVpbGRfaW50 X2NzdCAoaW50ZWdlcl90eXBlX25vZGUsIChpbnQpIGlzX3ZsYSk7CisKKyAgIGlmIChUUkVFX0NP REUgKGRlY2wpID09IFdJVEhfU0laRV9FWFBSKQorICAgICBkZWNsX3NpemUgPSBUUkVFX09QRVJB TkQgKGRlY2wsIDEpOworICAgZWxzZQorICAgICBkZWNsX3NpemUgPSBUWVBFX1NJWkVfVU5JVCAo VFJFRV9UWVBFIChkZWNsKSk7CisKKyAgIHJldHVybiBnaW1wbGVfYnVpbGRfY2FsbF9pbnRlcm5h bCAoSUZOX0RFRkVSUkVEX0lOSVQsIDMsCisJCQkJICAgICAgZGVjbF9zaXplLCBpbml0X3R5cGVf bm9kZSwgaXNfdmxhX25vZGUpOworfQorCisvKiBHZW5lcmF0ZSBpbml0aWFsaXphdGlvbiB0byBh dXRvbWF0aWMgdmFyaWFibGUgREVDTCBiYXNlZCBvbiBJTklUX1RZUEUuICAqLworc3RhdGljIHZv aWQKK2dpbXBsZV9hZGRfaW5pdF9mb3JfYXV0b192YXIgKHRyZWUgZGVjbCwKKwkJCSAgICAgIGVu dW0gYXV0b19pbml0X3R5cGUgaW5pdF90eXBlLAorCQkJICAgICAgYm9vbCBpc192bGEsCisJCQkg ICAgICBnaW1wbGVfc2VxICpzZXFfcCkKK3sKKyAgZ2NjX2Fzc2VydCAoVkFSX1AgKGRlY2wpICYm ICFERUNMX0VYVEVSTkFMIChkZWNsKSAmJiAhVFJFRV9TVEFUSUMgKGRlY2wpKTsKKyAgZ2NjX2Fz c2VydCAoaW5pdF90eXBlID4gQVVUT19JTklUX1VOSU5JVElBTElaRUQpOworCisgIC8qIElmIHRo aXMgREVDTCBpcyBhIHZhcmlhYmxlIHNpemVkIHR5cGUsIHdlIG11c3QgcmVtZW1iZXIgdGhlIHNp emUuICAqLworICB0cmVlIG9yaWdfZGVjbCA9IGRlY2w7CisgIG1heWJlX3dpdGhfc2l6ZV9leHBy ICgmZGVjbCk7CisKKyAgZ2ltcGxlICpjYWxsID0gYnVpbGRfZGVmZXJyZWRfaW5pdCAoZGVjbCwg aW5pdF90eXBlLCBpc192bGEpOworICBnaW1wbGVfY2FsbF9zZXRfbGhzIChjYWxsLCBvcmlnX2Rl Y2wpOworICBnaW1wbGlmeV9zZXFfYWRkX3N0bXQgKHNlcV9wLCBjYWxsKTsKK30KKworCiAvKiBH aW1wbGlmeSBhIERFQ0xfRVhQUiBub2RlICpTVE1UX1AgYnkgbWFraW5nIGFueSBuZWNlc3Nhcnkg YWxsb2NhdGlvbgogICAgYW5kIGluaXRpYWxpemF0aW9uIGV4cGxpY2l0LiAgKi8KIApAQCAtMTgz OSw2ICsxODk0LDE4IEBAIGdpbXBsaWZ5X2RlY2xfZXhwciAodHJlZSAqc3RtdF9wLCBnaW1wbGVf c2VxICpzZXFfcCkKIAkgICAgICAgYXMgdGhleSBtYXkgY29udGFpbiBhIGxhYmVsIGFkZHJlc3Mu ICAqLwogCSAgICB3YWxrX3RyZWUgKCZpbml0LCBmb3JjZV9sYWJlbHNfciwgTlVMTCwgTlVMTCk7 CiAJfQorICAgICAgLyogV2hlbiB0aGVyZSBpcyBubyBleHBsaWNpdCBpbml0aWFsaXplciwgaWYg dGhlIHVzZXIgcmVxdWVzdGVkLAorCSBXZSBzaG91bGQgaW5zZXJ0IGFuIGFydGlmaWNhbCBpbml0 aWFsaXplciBmb3IgdGhpcyBhdXRvbWF0aWMKKwkgdmFyaWFibGUuICAqLworICAgICAgZWxzZSBp ZiAob3B0X2Zvcl9mbiAoY3VycmVudF9mdW5jdGlvbl9kZWNsLCBmbGFnX2F1dG9fdmFyX2luaXQp CisJCSA+IEFVVE9fSU5JVF9VTklOSVRJQUxJWkVECisJICAgICAgICYmICFsb29rdXBfYXR0cmli dXRlICgidW5pbml0aWFsaXplZCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpCisJICAgICAgICYm ICFUUkVFX1NUQVRJQyAoZGVjbCkpCisJZ2ltcGxlX2FkZF9pbml0X2Zvcl9hdXRvX3ZhciAoZGVj bCwKKwkJCQkgICAgICBvcHRfZm9yX2ZuIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wsCisJCQkJCQkg IGZsYWdfYXV0b192YXJfaW5pdCksCisJCQkJICAgICAgaXNfdmxhLAorCQkJCSAgICAgIHNlcV9w KTsKICAgICB9CiAKICAgcmV0dXJuIEdTX0FMTF9ET05FOwpkaWZmIC0tZ2l0IGEvZ2NjL2ludGVy bmFsLWZuLmMgYi9nY2MvaW50ZXJuYWwtZm4uYwppbmRleCBmYjhiNDNkMWNlMmQuLjUzNzk4YWM0 NTE3NyAxMDA2NDQKLS0tIGEvZ2NjL2ludGVybmFsLWZuLmMKKysrIGIvZ2NjL2ludGVybmFsLWZu LmMKQEAgLTI5NzcsNiArMjk3NywxMTQgQEAgZXhwYW5kX1VOSVFVRSAoaW50ZXJuYWxfZm4sIGdj YWxsICpzdG10KQogICAgIGVtaXRfaW5zbiAocGF0dGVybik7CiB9CiAKKy8qIEV4cGFuZCB0aGUg SUZOX0RFRkVSUkVEX0lOSVQgZnVuY3Rpb246CisgICBJbml0aWFsaXplIHRoZSBMSFMgdmFyaWFi bGUgd2l0aCB6ZXJvL3BhdHRlcm4gYWNjb3JkaW5nIHRvIGl0cyBzZWNvbmQKKyAgIGFyZ3VtZW50 IElOSVRfVFlQRS4KKyAgIGlmIElOSVRfVFlQRSBpcyBBVVRPX0lOSVRfWkVSTywgdXNlIHplcm9l cyB0byBpbml0aWFsaXplOworICAgaWYgSU5JVF9UWVBFIGlzIEFVVE9fSU5JVF9QQVRURVJOLCB1 c2UgMHhGRSBieXRlLXJlcGVhdGFibGUgcGF0dGVybgorICAgICB0byBpbml0aWFsaXplOworICAg YWxsIHRoZSBtZW1vcnkgY292ZXJlZCBieSB0aGlzIExIUyB2YXJpYWJsZSBpcyBpbml0aWFsaXpl ZCBpbmNsdWRpbmcKKyAgIHBhZGRpbmdzLgorICAgVGhlIHJlYXNvbnMgdG8gY2hvb3NlIDB4RkUg Zm9yIHBhdHRlcm4gaW5pdGlhbGl6YXRpb24gYXJlOgorICAgICAxLiBJdCBpcyBhIG5vbi1jYW5v bmljYWwgdmlydHVhbCBhZGRyZXNzIG9uIHg4Nl82NCwgYW5kIGF0IHRoZQorCWhpZ2ggZW5kIG9m IHRoZSBpMzg2IGtlcm5lbCBhZGRyZXNzIHNwYWNlLgorICAgICAyLiBJdCBpcyBhIHZlcnkgbGFy Z2UgZmxvYXQgdmFsdWUgKC0xLjY5NDczOTUzMDMxNzM3OWUrMzgpLgorICAgICAzLiBJdCBpcyBh bHNvIGFuIHVudXN1YWwgbnVtYmVyIGZvciBpbnRlZ2Vycy4gICovCisjZGVmaW5lIElOSVRfUEFU VEVSTl9WQUxVRSAgMHhGRQorc3RhdGljIHZvaWQKK2V4cGFuZF9ERUZFUlJFRF9JTklUIChpbnRl cm5hbF9mbiwgZ2NhbGwgKnN0bXQpCit7CisgIHRyZWUgdmFyID0gZ2ltcGxlX2NhbGxfbGhzIChz dG10KTsKKyAgdHJlZSBzaXplX29mX3ZhciA9IGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgMCk7Cisg IHRyZWUgdmxhYWRkciA9IE5VTExfVFJFRTsKKyAgdHJlZSB2YXJfdHlwZSA9IFRSRUVfVFlQRSAo dmFyKTsKKyAgYm9vbCBpc192bGEgPSAoYm9vbCkgVFJFRV9JTlRfQ1NUX0xPVyAoZ2ltcGxlX2Nh bGxfYXJnIChzdG10LCAyKSk7CisgIGVudW0gYXV0b19pbml0X3R5cGUgaW5pdF90eXBlCisgICAg PSAoZW51bSBhdXRvX2luaXRfdHlwZSkgVFJFRV9JTlRfQ1NUX0xPVyAoZ2ltcGxlX2NhbGxfYXJn IChzdG10LCAxKSk7CisKKyAgZ2NjX2Fzc2VydCAoaW5pdF90eXBlID4gQVVUT19JTklUX1VOSU5J VElBTElaRUQpOworCisgIC8qIGlmIHRoaXMgdmFyaWFibGUgaXMgYSBWTEEsIGdldCBpdHMgU0la RSBhbmQgQUREUiBmaXJzdC4gICovCisgIGlmIChpc192bGEpCisgICAgeworICAgICAgLyogVGhl IHRlbXBvcmFyeSBhZGRyZXNzIHZhcmlhYmxlIGZvciB0aGlzIHZsYSBzaG91bGQgaGF2ZSBiZWVu CisJIGNyZWF0ZWQgZHVyaW5nIGdpbXBsaWZpY2F0aW9uIHBoYXNlLiAgUmVmZXIgdG8gZ2ltcGxp ZnlfdmxhX2RlY2wKKwkgZm9yIGRldGFpbHMuICAqLworICAgICAgdHJlZSB2YXJfZGVjbCA9IChU UkVFX0NPREUgKHZhcikgPT0gU1NBX05BTUUpID8KKwkJICAgICAgIFNTQV9OQU1FX1ZBUiAodmFy KSA6IHZhcjsKKyAgICAgIGdjY19hc3NlcnQgKERFQ0xfSEFTX1ZBTFVFX0VYUFJfUCAodmFyX2Rl Y2wpKTsKKyAgICAgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAoREVDTF9WQUxVRV9FWFBSICh2YXJf ZGVjbCkpID09IElORElSRUNUX1JFRik7CisgICAgICAvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhp cyB2bGEgdmFyaWFibGUuICAqLworICAgICAgdmxhYWRkciA9IFRSRUVfT1BFUkFORCAoREVDTF9W QUxVRV9FWFBSICh2YXJfZGVjbCksIDApOworICAgIH0KKworICBpZiAoaXNfdmxhIHx8ICghdXNl X3JlZ2lzdGVyX2Zvcl9kZWNsICh2YXIpKSkKKyAgICB7CisgICAgLyogSWYgdGhpcyBpcyBhIFZM QSBvciB0aGUgdmFyaWFibGUgaXMgbm90IGluIHJlZ2lzdGVyLAorICAgICAgIGV4cGFuZCB0byBh IG1lbXNldCB0byBpbml0aWFsaXplIGl0LiAgKi8KKyAgICAgIGlmIChUUkVFX0NPREUgKHZhcikg PT0gU1NBX05BTUUpCisJdmFyID0gU1NBX05BTUVfVkFSICh2YXIpOworICAgICAgdHJlZSBhZGRy ID0gaXNfdmxhID8gdmxhYWRkcjogYnVpbGRfZm9sZF9hZGRyX2V4cHIgKHZhcik7CisgICAgICB0 cmVlIHZhbHVlID0gKGluaXRfdHlwZSA9PSBBVVRPX0lOSVRfUEFUVEVSTikgPworCQkgICAgYnVp bGRfaW50X2NzdCAodW5zaWduZWRfY2hhcl90eXBlX25vZGUsCisJCQkJICAgSU5JVF9QQVRURVJO X1ZBTFVFKSA6CisJCSAgICBidWlsZF96ZXJvX2NzdCAodW5zaWduZWRfY2hhcl90eXBlX25vZGUp OworICAgICAgdHJlZSBtX2NhbGwgPSBidWlsZF9jYWxsX2V4cHIgKGJ1aWx0aW5fZGVjbF9pbXBs aWNpdCAoQlVJTFRfSU5fTUVNU0VUKSwKKwkJCQkgICAgIDMsIGFkZHIsIHZhbHVlLCBzaXplX29m X3Zhcik7CisgICAgICAvKiBFeHBhbmQgdGhpcyBtZW1zZXQgY2FsbC4gICovCisgICAgICBleHBh bmRfYnVpbHRpbl9tZW1zZXQgKG1fY2FsbCwgTlVMTF9SVFgsIFRZUEVfTU9ERSAodmFyX3R5cGUp KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgLyogSWYgdGhpcyB2YXJpYWJsZSBpcyBpbiBh IHJlZ2lzdGVyLCB1c2UgZXhwYW5kX2Fzc2lnbm1lbnQgbWlnaHQKKyAgICAgICBnZW5lcmF0ZSBi ZXR0ZXIgY29kZS4gICovCisgICAgICB0cmVlIHBhdHRlcm4gPSBOVUxMX1RSRUU7CisgICAgICB1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIHRvdGFsX2J5dGVzCisJPSB0cmVlX3RvX3Vod2kgKFRZUEVf U0laRV9VTklUICh2YXJfdHlwZSkpOworCisgICAgICBpZiAoSU5URUdSQUxfVFlQRV9QICh2YXJf dHlwZSkgfHwgUE9JTlRFUl9UWVBFX1AgKHZhcl90eXBlKSkKKwl7CisJICB1bnNpZ25lZCBjaGFy ICpwdHIgPSAodW5zaWduZWQgY2hhciAqKXhtYWxsb2MgKHRvdGFsX2J5dGVzKTsKKwkgIGZvciAo dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdG90YWxfYnl0ZXM7IGkrKykKKwkgICAgcHRyW2ldID0g SU5JVF9QQVRURVJOX1ZBTFVFOworCSAgd2lkZV9pbnQgcmVzdWx0ID0gd2k6OmZyb21fYnVmZmVy IChwdHIsIHRvdGFsX2J5dGVzKTsKKwkgIHBhdHRlcm4gPSAgd2lkZV9pbnRfdG9fdHJlZSAodmFy X3R5cGUsIHJlc3VsdCk7CisJfQorICAgICAgZWxzZSBpZiAoU0NBTEFSX0ZMT0FUX1RZUEVfUCAo dmFyX3R5cGUpKQorCXsKKwkgIHVuc2lnbmVkIGludCBtYXhfaW5kZXggPSAyICsgMiAqIHRvdGFs X2J5dGVzOworCSAgY2hhciAqcHRyPSAoY2hhciAqKXhtYWxsb2MgKG1heF9pbmRleCk7CisJICBw dHJbMF0gPSAnMCc7CisJICBwdHJbMV0gPSAneCc7CisJICBmb3IgKHVuc2lnbmVkIGludCBpID0g MjsgaSA8IG1heF9pbmRleDsgaSArPSAyKQorCSAgICBwdHJbaV0gPSAnRic7CisJICBmb3IgKHVu c2lnbmVkIGludCBpID0gMzsgaSA8IG1heF9pbmRleDsgaSArPSAyKQorCSAgICBwdHJbaV0gPSAn RSc7CisJICBSRUFMX1ZBTFVFX1RZUEUgcl92YXI7CisJICByZWFsX2Zyb21fc3RyaW5nICgmcl92 YXIsIHB0cik7CisJICBwYXR0ZXJuID0gYnVpbGRfcmVhbCAodmFyX3R5cGUsIHJfdmFyKTsKKwl9 CisgICAgICBlbHNlCisJeworCSAgdHJlZSBpbmRleF90eXBlID0gYnVpbGRfaW5kZXhfdHlwZSAo c2l6ZV9pbnQgKHRvdGFsX2J5dGVzIC0gMSkpOworCSAgdHJlZSBhcnJheV90eXBlID0gYnVpbGRf YXJyYXlfdHlwZSAodW5zaWduZWRfY2hhcl90eXBlX25vZGUsCisJCQkJCSAgICAgIGluZGV4X3R5 cGUpOworCSAgdHJlZSBlbGVtZW50ID0gYnVpbGRfaW50X2NzdCAodW5zaWduZWRfY2hhcl90eXBl X25vZGUsCisJCQkJCUlOSVRfUEFUVEVSTl9WQUxVRSk7CisJICB2ZWM8Y29uc3RydWN0b3JfZWx0 LCB2YV9nYz4gKmVsdHMgPSBOVUxMOworCSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0 b3RhbF9ieXRlczsgaSsrKQorCSAgICBDT05TVFJVQ1RPUl9BUFBFTkRfRUxUIChlbHRzLCBOVUxM X1RSRUUsIGVsZW1lbnQpOworCSAgcGF0dGVybiA9IGJ1aWxkX2NvbnN0cnVjdG9yIChhcnJheV90 eXBlLCBlbHRzKTsKKwkgIHBhdHRlcm4gPSBidWlsZDEgKFZJRVdfQ09OVkVSVF9FWFBSLCB2YXJf dHlwZSwgcGF0dGVybik7CisJfQorCisgICAgICB0cmVlIGluaXQgPSAoaW5pdF90eXBlID09IEFV VE9fSU5JVF9QQVRURVJOKSA/CisJCSAgIHBhdHRlcm4gOgorCQkgICBidWlsZF96ZXJvX2NzdCAo VFJFRV9UWVBFICh2YXIpKTsKKyAgICAgIGV4cGFuZF9hc3NpZ25tZW50ICh2YXIsIGluaXQsIGZh bHNlKTsKKyAgICB9Cit9CisKIC8qIFRoZSBzaXplIG9mIGFuIE9wZW5BQ0MgY29tcHV0ZSBkaW1l bnNpb24uICAqLwogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZ2NjL2ludGVybmFsLWZuLmRl ZiBiL2djYy9pbnRlcm5hbC1mbi5kZWYKaW5kZXggYzNiOGU3MzA5NjBjLi5jYzNjZDAxOGY4OWQg MTAwNjQ0Ci0tLSBhL2djYy9pbnRlcm5hbC1mbi5kZWYKKysrIGIvZ2NjL2ludGVybmFsLWZuLmRl ZgpAQCAtMzU3LDYgKzM1NywxMSBAQCBERUZfSU5URVJOQUxfRk4gKFZFQ19DT05WRVJULCBFQ0Zf Q09OU1QgfCBFQ0ZfTEVBRiB8IEVDRl9OT1RIUk9XLCBOVUxMKQogREVGX0lOVEVSTkFMX0ZOIChV TklRVUUsIEVDRl9OT1RIUk9XLCBOVUxMKQogREVGX0lOVEVSTkFMX0ZOIChQSEksIDAsIE5VTEwp CiAKKy8qIEEgZnVuY3Rpb24gdG8gcmVwcmVzZW50IGFuIGFydGlmaWNhbCBpbml0aWFsaXphdGlv biB0byBhbiB1bmluaXRpYWxpemVkCisgICBhdXRvbWF0aWMgdmFyaWFibGUuICBUaGUgZmlyc3Qg YXJndW1lbnQgaXMgdGhlIHZhcmlhYmxlIGl0c2VsZiwgdGhlCisgICBzZWNvbmQgYXJndW1lbnQg aXMgdGhlIGluaXRpYWxpemF0aW9uIHR5cGUuICAqLworREVGX0lOVEVSTkFMX0ZOIChERUZFUlJF RF9JTklULCBFQ0ZfQ09OU1QgfCBFQ0ZfTEVBRiB8IEVDRl9OT1RIUk9XLCBOVUxMKQorCiAvKiBE SU1fU0laRSBhbmQgRElNX1BPUyByZXR1cm4gdGhlIHNpemUgb2YgYSBwYXJ0aWN1bGFyIGNvbXB1 dGUKICAgIGRpbWVuc2lvbiBhbmQgdGhlIGV4ZWN1dGluZyB0aHJlYWQncyBwb3NpdGlvbiB3aXRo aW4gdGhhdAogICAgZGltZW5zaW9uLiAgRElNX1BPUyBpcyBwdXJlIChhbmQgbm90IGNvbnN0KSBz byB0aGF0IGl0IGlzbid0CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9h dXRvLWluaXQtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTEuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhiOGJhM2RkN2U4ZAotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0xLmMK QEAgLTAsMCArMSwzOSBAQAorLyogVmVyaWZ5IHplcm8gaW5pdGlhbGl6YXRpb24gZm9yIGludGVn ZXIgYW5kIHBvaW50ZXIgdHlwZSBhdXRvbWF0aWMgdmFyaWFibGVzLiAgKi8KKy8qIHsgZGctZG8g Y29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXpl cm8gLWZkdW1wLXRyZWUtZ2ltcGxlIiB9ICovCisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyMgZGVm aW5lIGJvb2wgX0Jvb2wKKyNlbmRpZgorCitlbnVtIEUgeworICBOMSA9IDAsCisgIE4yLAorICBO MworfTsKKworZXh0ZXJuIHZvaWQgYmFyIChjaGFyLCBzaG9ydCwgaW50LCBlbnVtIEUsIGxvbmcs IGxvbmcgbG9uZywgaW50ICosIGJvb2wpOworCit2b2lkIGZvbygpCit7CisgIGNoYXIgdGVtcDE7 CisgIHNob3J0IHRlbXAyOworICBpbnQgdGVtcDM7CisgIGVudW0gRSB0ZW1wNDsKKyAgbG9uZyB0 ZW1wNTsKKyAgbG9uZyBsb25nIHRlbXA2OworICBpbnQgKnRlbXA3OworICBib29sIHRlbXA4Owor CisgIGJhciAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIHRlbXA1LCB0ZW1wNiwgdGVtcDcs IHRlbXA4KTsKKyAgcmV0dXJuOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg InRlbXAxID0gLkRFRkVSUkVEX0lOSVQgXFwoMSwgMiwgMFxcKSIgImdpbXBsZSIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInRlbXAyID0gLkRFRkVSUkVEX0lOSVQgXFwo MiwgMiwgMFxcKSIgImdpbXBsZSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAgInRlbXAzID0gLkRFRkVSUkVEX0lOSVQgXFwoNCwgMiwgMFxcKSIgImdpbXBsZSIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInRlbXA0ID0gLkRFRkVSUkVEX0lOSVQg XFwoNCwgMiwgMFxcKSIgImdpbXBsZSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAgInRlbXA1ID0gLkRFRkVSUkVEX0lOSVQgXFwoOCwgMiwgMFxcKSIgImdpbXBsZSIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInRlbXA2ID0gLkRFRkVSUkVEX0lO SVQgXFwoOCwgMiwgMFxcKSIgImdpbXBsZSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgInRlbXA3ID0gLkRFRkVSUkVEX0lOSVQgXFwoOCwgMiwgMFxcKSIgImdpbXBsZSIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInRlbXA4ID0gLkRFRkVSUkVE X0lOSVQgXFwoMSwgMiwgMFxcKSIgImdpbXBsZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMTAuYyBiL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL2F1dG8taW5pdC0xMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uMGE4ODQxZTZlMGY5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vYXV0by1pbml0LTEwLmMKQEAgLTAsMCArMSwxNyBAQAorLyogVmVyaWZ5IHRoZSB2 YXJpYWJsZSBhdHRyaWJ1dGUgInVuaW5pdGlhbGl6ZWQiLiAgKi8gCisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD1wYXR0ZXJu IC1mZHVtcC10cmVlLWdpbXBsZSIgfSAqLworCitleHRlcm4gdm9pZCBiYXIgKGNoYXIsIGxvbmcg bG9uZyAqKSBfX2F0dHJpYnV0ZV9fICgodW5pbml0aWFsaXplZCkpOyAvKiB7IGRnLXdhcm5pbmcg Iid1bmluaXRpYWxpemVkJyBhdHRyaWJ1dGUgaWdub3JlZCIgfSAqLworCit2b2lkIGZvbygpCit7 CisgIHNob3J0IHRlbXAxOworICBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXyAoKHVuaW5pdGlhbGl6 ZWQpKSB0ZW1wMlsxMF07CisKKyAgYmFyICh0ZW1wMSwgdGVtcDIpOworICByZXR1cm47Cit9CisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAidGVtcDEgPSAuREVGRVJSRURfSU5JVCBc XCgyLCAxLCAwXFwpIiAiZ2ltcGxlIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC1ub3QgInRlbXAyID0gLkRFRkVSUkVEX0lOSVQgXFwoIiAiZ2ltcGxlIiB9IH0gKi8KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0xMS5jIGIvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTExLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hMmQ2NjkwOGQ4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMTEuYwpAQCAtMCwwICsxLDE0IEBA CisvKiBWZXJpZnkgemVybyBpbml0aWFsaXphdGlvbiBmb3IgVkxBIGF1dG9tYXRpYyB2YXJpYWJs ZXMuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2 aWFsLWF1dG8tdmFyLWluaXQ9emVybyAtZmR1bXAtdHJlZS1naW1wbGUiIH0gKi8KKworZXh0ZXJu IHZvaWQgYmFyIChpbnQpOworCit2b2lkIGZvbyhpbnQgbikKK3sKKyAgaW50IGFycltuXTsKKyAg YmFyIChhcnJbMl0pOworICByZXR1cm47Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAiLkRFRkVSUkVEX0lOSVQgXFwoRC5cXGQqLCAyLCAxXFwpIiAiZ2ltcGxlIiB9IH0gKi8K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0xMi5jIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTEyLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMDVkNzQzZmRhMDIKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMTIuYwpAQCAtMCwwICsxLDE0 IEBACisvKiBWZXJpZnkgemVybyBpbml0aWFsaXphdGlvbiBmb3IgVkxBIGF1dG9tYXRpYyB2YXJp YWJsZXMuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0 cml2aWFsLWF1dG8tdmFyLWluaXQ9cGF0dGVybiAtZmR1bXAtdHJlZS1naW1wbGUiIH0gKi8KKwor ZXh0ZXJuIHZvaWQgYmFyIChpbnQpOworCit2b2lkIGZvbyhpbnQgbikKK3sKKyAgaW50IGFycltu XTsKKyAgYmFyIChhcnJbMl0pOworICByZXR1cm47Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAiLkRFRkVSUkVEX0lOSVQgXFwoRC5cXGQqLCAxLCAxXFwpIiAiZ2ltcGxlIiB9 IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0x My5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTEzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMGMwMzY1YjI4OGEKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMTMuYwpAQCAtMCww ICsxLDIzIEBACisvKiBWZXJpZnkgdGhlIGF1dG8gaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJl IG9yIHVuaW9uIHdpdGggYSBmbGV4aWJsZSBhcnJheQorICAgbWVtYmVyLiAgKi8gCisvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12YXItaW5p dD1wYXR0ZXJuIC1mZHVtcC10cmVlLWdpbXBsZSIgfSAqLworCitzdHJ1Y3QgYSB7CisgIGludCBi OworICBpbnQgYXJyYXlbXTsKK307Cit1bmlvbiB0YXIgeworICBzdHJ1Y3QgYSBiYXI7CisgIGNo YXIgYnVmOworfTsKKworaW50IGZvbygpCit7CisgIHN0cnVjdCBhIGQ7CisgIHVuaW9uIHRhciB2 YXI7CisgIHJldHVybiBkLmIgKyB2YXIuYmFyLmI7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAiZCA9IC5ERUZFUlJFRF9JTklUIFxcKDQsIDEsIDBcXCkiICJnaW1wbGUiIH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ2YXIgPSAuREVGRVJSRURfSU5J VCBcXCg0LCAxLCAwXFwpIiAiZ2ltcGxlIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0xNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vYXV0by1pbml0LTE0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li45ODZiYjE5ZmFhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9hdXRvLWluaXQtMTQuYwpAQCAtMCwwICsxLDIzIEBACisvKiBWZXJpZnkgdGhlIGF1dG8g aW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlIG9yIHVuaW9uIHdpdGggYSBmbGV4aWJsZSBhcnJh eQorICAgbWVtYmVyLiAgKi8gCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIC1mZHVtcC10cmVlLWdpbXBsZSIgfSAq LworCitzdHJ1Y3QgYSB7CisgIGludCBiOworICBpbnQgYXJyYXlbXTsKK307Cit1bmlvbiB0YXIg eworICBzdHJ1Y3QgYSBiYXI7CisgIGNoYXIgYnVmOworfTsKKworaW50IGZvbygpCit7CisgIHN0 cnVjdCBhIGQ7CisgIHVuaW9uIHRhciB2YXI7CisgIHJldHVybiBkLmIgKyB2YXIuYmFyLmI7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiZCA9IC5ERUZFUlJFRF9JTklUIFxc KDQsIDIsIDBcXCkiICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wICJ2YXIgPSAuREVGRVJSRURfSU5JVCBcXCg0LCAyLCAwXFwpIiAiZ2ltcGxlIiB9IH0gKi8K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0xNS5jIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTE1LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hYTlkN2ZhYjY4YTYKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMTUuYwpAQCAtMCwwICsxLDEz IEBACisvKiBWZXJpZnkgdGhlIGF1dG8gaW5pdGlhbGl6YXRpb24gb2YgbmVzdGVkIFZMQS4gICov CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0 by12YXItaW5pdD16ZXJvIC1mZHVtcC10cmVlLWdpbXBsZSIgfSAqLworCit2b2lkIGcodm9pZCAq KTsKKwordm9pZCBmb28oaW50IGEpCit7CisgIGludCB4W2FdW2FdOworICBnKHgpOworfQorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIi5ERUZFUlJFRF9JTklUIFxcKEQuXFxkKiwg MiwgMVxcKSIgImdpbXBsZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9hdXRvLWluaXQtMTYuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8t aW5pdC0xNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODY0OTNl ZWY5ZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0 by1pbml0LTE2LmMKQEAgLTAsMCArMSwxMyBAQAorLyogVmVyaWZ5IHRoZSBhdXRvIGluaXRpYWxp emF0aW9uIG9mIG5lc3RlZCBWTEEuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9cGF0dGVybiAtZmR1bXAtdHJlZS1n aW1wbGUiIH0gKi8KKwordm9pZCBnKHZvaWQgKik7CisKK3ZvaWQgZm9vKGludCBhKQoreworICBp bnQgeFthXVthXTsKKyAgZyh4KTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w ICIuREVGRVJSRURfSU5JVCBcXChELlxcZCosIDEsIDFcXCkiICJnaW1wbGUiIH0gfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTIuYyBiL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi43MTk1NWI1NGJhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtMi5jCkBAIC0wLDAgKzEsMzkgQEAKKy8q IFZlcmlmeSBwYXR0ZXJuIGluaXRpYWxpemF0aW9uIGZvciBpbnRlZ2VyIGFuZCBwb2ludGVyIHR5 cGUgYXV0b21hdGljIHZhcmlhYmxlcy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyog eyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD1wYXR0ZXJuIC1mZHVtcC10cmVl LWdpbXBsZSIgfSAqLworCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjIGRlZmluZSBib29sIF9Cb29s CisjZW5kaWYKKworZW51bSBFIHsKKyAgTjEgPSAwLAorICBOMiwKKyAgTjMKK307CisKK2V4dGVy biB2b2lkIGJhciAoY2hhciwgc2hvcnQsIGludCwgZW51bSBFLCBsb25nLCBsb25nIGxvbmcsIGlu dCAqLCBib29sKTsKKwordm9pZCBmb28oKQoreworICBjaGFyIHRlbXAxOworICBzaG9ydCB0ZW1w MjsKKyAgaW50IHRlbXAzOworICBlbnVtIEUgdGVtcDQ7CisgIGxvbmcgdGVtcDU7CisgIGxvbmcg bG9uZyB0ZW1wNjsKKyAgaW50ICp0ZW1wNzsKKyAgYm9vbCB0ZW1wODsKKworICBiYXIgKHRlbXAx LCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCB0ZW1wNSwgdGVtcDYsIHRlbXA3LCB0ZW1wOCk7CisgIHJl dHVybjsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1wMSA9IC5ERUZF UlJFRF9JTklUIFxcKDEsIDEsIDBcXCkiICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wICJ0ZW1wMiA9IC5ERUZFUlJFRF9JTklUIFxcKDIsIDEsIDBcXCkiICJn aW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1wMyA9IC5E RUZFUlJFRF9JTklUIFxcKDQsIDEsIDBcXCkiICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1wNCA9IC5ERUZFUlJFRF9JTklUIFxcKDQsIDEsIDBcXCki ICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1wNSA9 IC5ERUZFUlJFRF9JTklUIFxcKDgsIDEsIDBcXCkiICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1wNiA9IC5ERUZFUlJFRF9JTklUIFxcKDgsIDEsIDBc XCkiICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1w NyA9IC5ERUZFUlJFRF9JTklUIFxcKDgsIDEsIDBcXCkiICJnaW1wbGUiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1wOCA9IC5ERUZFUlJFRF9JTklUIFxcKDEsIDEs IDBcXCkiICJnaW1wbGUiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vYXV0by1pbml0LTMuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5p dC0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zMTIyNzU2NjYz ODEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWlu aXQtMy5jCkBAIC0wLDAgKzEsMTkgQEAKKy8qIFZlcmlmeSB6ZXJvIGluaXRpYWxpemF0aW9uIGZv ciBmbG9hdGluZyBwb2ludCB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMuICAqLworLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9 emVybyAtZmR1bXAtdHJlZS1naW1wbGUiIH0gKi8KKworbG9uZyBkb3VibGUgcmVzdWx0OworCits b25nIGRvdWJsZSBmb28oKQoreworICBmbG9hdCB0ZW1wMTsKKyAgZG91YmxlIHRlbXAyOworICBs b25nIGRvdWJsZSB0ZW1wMzsKKyAgCisgIHJlc3VsdCA9IHRlbXAxICsgdGVtcDIgKyB0ZW1wMzsK KyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ0 ZW1wMSA9IC5ERUZFUlJFRF9JTklUIFxcKDQsIDIsIDBcXCkiICJnaW1wbGUiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1wMiA9IC5ERUZFUlJFRF9JTklUIFxcKDgs IDIsIDBcXCkiICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w ICJ0ZW1wMyA9IC5ERUZFUlJFRF9JTklUIFxcKDE2LCAyLCAwXFwpIiAiZ2ltcGxlIiB9IH0gKi8K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC00LmMgYi9n Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtNC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTVhNDMxNzI2ZGNkCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTQuYwpAQCAtMCwwICsxLDE5IEBA CisvKiBWZXJpZnkgcGF0dGVybiBpbml0aWFsaXphdGlvbiBmb3IgZmxvYXRpbmcgcG9pbnQgdHlw ZSBhdXRvbWF0aWMgdmFyaWFibGVzLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXBhdHRlcm4gLWZkdW1wLXRyZWUt Z2ltcGxlIiB9ICovCisKK2xvbmcgZG91YmxlIHJlc3VsdDsKKworbG9uZyBkb3VibGUgZm9vKCkK K3sKKyAgZmxvYXQgdGVtcDE7CisgIGRvdWJsZSB0ZW1wMjsKKyAgbG9uZyBkb3VibGUgdGVtcDM7 CisgIAorICByZXN1bHQgPSB0ZW1wMSArIHRlbXAyICsgdGVtcDM7CisgIHJldHVybiByZXN1bHQ7 Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAidGVtcDEgPSAuREVGRVJSRURf SU5JVCBcXCg0LCAxLCAwXFwpIiAiZ2ltcGxlIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAidGVtcDIgPSAuREVGRVJSRURfSU5JVCBcXCg4LCAxLCAwXFwpIiAiZ2ltcGxl IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAidGVtcDMgPSAuREVGRVJS RURfSU5JVCBcXCgxNiwgMSwgMFxcKSIgImdpbXBsZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vYXV0by1pbml0LTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjU0ZjkwYmM4OTBiNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL2F1dG8taW5pdC01LmMKQEAgLTAsMCArMSwyMSBAQAorLyogVmVyaWZ5IHplcm8g aW5pdGlhbGl6YXRpb24gZm9yIGNvbXBsZXggdHlwZSBhdXRvbWF0aWMgdmFyaWFibGVzLiAgKi8K Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mdHJpdmlhbC1hdXRv LXZhci1pbml0PXplcm8gLWZkdW1wLXRyZWUtZ2ltcGxlIiB9ICovCisKKworX0NvbXBsZXggbG9u ZyBkb3VibGUgcmVzdWx0OworCitfQ29tcGxleCBsb25nIGRvdWJsZSBmb28oKQoreworICBfQ29t cGxleCBmbG9hdCB0ZW1wMTsKKyAgX0NvbXBsZXggZG91YmxlIHRlbXAyOworICBfQ29tcGxleCBs b25nIGRvdWJsZSB0ZW1wMzsKKworICByZXN1bHQgPSB0ZW1wMSArIHRlbXAyICsgdGVtcDM7Cisg IHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAidGVt cDEgPSAuREVGRVJSRURfSU5JVCBcXCg4LCAyLCAwXFwpIiAiZ2ltcGxlIiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAidGVtcDIgPSAuREVGRVJSRURfSU5JVCBcXCgxNiwg MiwgMFxcKSIgImdpbXBsZSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg InRlbXAzID0gLkRFRkVSUkVEX0lOSVQgXFwoMzIsIDIsIDBcXCkiICJnaW1wbGUiIH0gfSAqLwor CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtNi5jIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LTYuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQxMjRhMmIxODNhYQotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC02LmMKQEAgLTAsMCArMSwyMSBA QAorLyogVmVyaWZ5IHBhdHRlcm4gaW5pdGlhbGl6YXRpb24gZm9yIGNvbXBsZXggdHlwZSBhdXRv bWF0aWMgdmFyaWFibGVzLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXBhdHRlcm4gLWZkdW1wLXRyZWUtZ2ltcGxl IiB9ICovCisKKworX0NvbXBsZXggbG9uZyBkb3VibGUgcmVzdWx0OworCitfQ29tcGxleCBsb25n IGRvdWJsZSBmb28oKQoreworICBfQ29tcGxleCBmbG9hdCB0ZW1wMTsKKyAgX0NvbXBsZXggZG91 YmxlIHRlbXAyOworICBfQ29tcGxleCBsb25nIGRvdWJsZSB0ZW1wMzsKKworICByZXN1bHQgPSB0 ZW1wMSArIHRlbXAyICsgdGVtcDM7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcCAidGVtcDEgPSAuREVGRVJSRURfSU5JVCBcXCg4LCAxLCAwXFwp IiAiZ2ltcGxlIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAidGVtcDIg PSAuREVGRVJSRURfSU5JVCBcXCgxNiwgMSwgMFxcKSIgImdpbXBsZSIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInRlbXAzID0gLkRFRkVSUkVEX0lOSVQgXFwoMzIsIDEs IDBcXCkiICJnaW1wbGUiIH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9hdXRvLWluaXQtNy5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1p bml0LTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE5OTg2OTY5 YThmNwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8t aW5pdC03LmMKQEAgLTAsMCArMSwzNSBAQAorLyogVmVyaWZ5IHplcm8gaW5pdGlhbGl6YXRpb24g Zm9yIGFycmF5LCB1bmlvbiwgYW5kIHN0cnVjdHVyZSB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMu ICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFs LWF1dG8tdmFyLWluaXQ9emVybyAtZmR1bXAtdHJlZS1naW1wbGUiIH0gKi8KKworc3RydWN0IFMK K3sKKyAgaW50IGYxOworICBmbG9hdCBmMjsKKyAgY2hhciBmM1syMF07Cit9OworCit1bmlvbiBV Cit7CisgIGNoYXIgdTFbNV07CisgIGludCB1MjsKKyAgZmxvYXQgdTM7IAorfTsKKworZG91Ymxl IHJlc3VsdDsKKworZG91YmxlIGZvbygpCit7CisgIGludCB0ZW1wMVszXTsKKyAgZG91YmxlIHRl bXAyWzNdOworICBzdHJ1Y3QgUyB0ZW1wMzsKKyAgdW5pb24gVSB0ZW1wNDsKKyAgCisgIHJlc3Vs dCA9IHRlbXAxWzJdICsgdGVtcDJbMV0gKyB0ZW1wMy5mMiArIHRlbXA0LnUzOworICByZXR1cm4g cmVzdWx0OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInRlbXAxID0gLkRF RkVSUkVEX0lOSVQgXFwoMTIsIDIsIDBcXCkiICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1wMiA9IC5ERUZFUlJFRF9JTklUIFxcKDI0LCAyLCAwXFwp IiAiZ2ltcGxlIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAidGVtcDMg PSAuREVGRVJSRURfSU5JVCBcXCgyOCwgMiwgMFxcKSIgImdpbXBsZSIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInRlbXA0ID0gLkRFRkVSUkVEX0lOSVQgXFwoOCwgMiwg MFxcKSIgImdpbXBsZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9hdXRvLWluaXQtOC5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0 LTguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk3NzhlOTExZTNh ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5p dC04LmMKQEAgLTAsMCArMSwzNSBAQAorLyogVmVyaWZ5IHBhdHRlcm4gaW5pdGlhbGl6YXRpb24g Zm9yIGFycmF5LCB1bmlvbiwgYW5kIHN0cnVjdHVyZSB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMu ICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFs LWF1dG8tdmFyLWluaXQ9cGF0dGVybiAtZmR1bXAtdHJlZS1naW1wbGUiIH0gKi8KKworc3RydWN0 IFMKK3sKKyAgaW50IGYxOworICBmbG9hdCBmMjsKKyAgY2hhciBmM1syMF07Cit9OworCit1bmlv biBVCit7CisgIGNoYXIgdTFbNV07CisgIGludCB1MjsKKyAgZmxvYXQgdTM7IAorfTsKKworZG91 YmxlIHJlc3VsdDsKKworZG91YmxlIGZvbygpCit7CisgIGludCB0ZW1wMVszXTsKKyAgZG91Ymxl IHRlbXAyWzNdOworICBzdHJ1Y3QgUyB0ZW1wMzsKKyAgdW5pb24gVSB0ZW1wNDsKKyAgCisgIHJl c3VsdCA9IHRlbXAxWzJdICsgdGVtcDJbMV0gKyB0ZW1wMy5mMiArIHRlbXA0LnUzOworICByZXR1 cm4gcmVzdWx0OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInRlbXAxID0g LkRFRkVSUkVEX0lOSVQgXFwoMTIsIDEsIDBcXCkiICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ0ZW1wMiA9IC5ERUZFUlJFRF9JTklUIFxcKDI0LCAxLCAw XFwpIiAiZ2ltcGxlIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAidGVt cDMgPSAuREVGRVJSRURfSU5JVCBcXCgyOCwgMSwgMFxcKSIgImdpbXBsZSIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInRlbXA0ID0gLkRFRkVSUkVEX0lOSVQgXFwoOCwg MSwgMFxcKSIgImdpbXBsZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9hdXRvLWluaXQtOS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXV0by1p bml0LTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkwYmJkOGNi MWFmZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8t aW5pdC05LmMKQEAgLTAsMCArMSwxNyBAQAorLyogVmVyaWZ5IHRoZSB2YXJpYWJsZSBhdHRyaWJ1 dGUgInVuaW5pdGlhbGl6ZWQiLiAgKi8gCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBk Zy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIC1mZHVtcC10cmVlLWdpbXBs ZSIgfSAqLworCitleHRlcm4gdm9pZCBiYXIgKGNoYXIsIGxvbmcgbG9uZyAqKSBfX2F0dHJpYnV0 ZV9fICgodW5pbml0aWFsaXplZCkpOyAvKiB7IGRnLXdhcm5pbmcgIid1bmluaXRpYWxpemVkJyBh dHRyaWJ1dGUgaWdub3JlZCIgfSAqLworCit2b2lkIGZvbygpCit7CisgIHNob3J0IHRlbXAxOwor ICBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXyAoKHVuaW5pdGlhbGl6ZWQpKSB0ZW1wMlsxMF07CisK KyAgYmFyICh0ZW1wMSwgdGVtcDIpOworICByZXR1cm47Cit9CisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcCAidGVtcDEgPSAuREVGRVJSRURfSU5JVCBcXCgyLCAyLCAwXFwpIiAiZ2lt cGxlIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgInRlbXAyID0g LkRFRkVSUkVEX0lOSVQgXFwoOCwgMiwgMFxcKSIgImdpbXBsZSIgfSB9ICovCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hdXRvLWluaXQtZXNyYS5jIGIvZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vYXV0by1pbml0LWVzcmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjc3ZWMwMjM1NWRmNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2F1dG8taW5pdC1lc3JhLmMKQEAgLTAsMCArMSwzNSBAQAor LyogVmVyaWZ5IHRoZSBzdHJlbmd0aCByZWR1Y3Rpb24gYWRqdXN0bWVudCBmb3IgLWZ0cml2aWFs LWF1dG8tdmFyLWluaXQuICAqLyAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1PMiAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIC1mZHVtcC10cmVlLWdpbXBs ZSAtZmR1bXAtdHJlZS1lc3JhIiB9ICovCisKKwordHlwZWRlZiBkb3VibGUgVkVDVE9SWzNdOwor CitlbnVtCit7CisgWCA9IDAsCisgWSA9IDEsCisgWiA9IDIsCisgVCA9IDMKK307CisKK3ZvaWQg QXNzaWduX1ZlY3RvcihWRUNUT1IgZCwgVkVDVE9SIHMpCit7CisgZFtYXSA9IHNbWF07CisgZFtZ XSA9IHNbWV07CisgZFtaXSA9IHNbWl07Cit9CisKK3ZvaWQgVkNyb3NzKFZFQ1RPUiBhLCBjb25z dCBWRUNUT1IgYiwgY29uc3QgVkVDVE9SIGMpCit7CisgVkVDVE9SIHRtcDsKKworIHRtcFtYXSA9 IGJbWV0gKiBjW1pdIC0gYltaXSAqIGNbWV07CisgdG1wW1ldID0gYltaXSAqIGNbWF0gLSBiW1hd ICogY1taXTsKKyB0bXBbWl0gPSBiW1hdICogY1tZXSAtIGJbWV0gKiBjW1hdOworCisgQXNzaWdu X1ZlY3RvcihhLCB0bXApOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgInRtcCA9IC5ERUZFUlJFRF9JTklUIFxcKDI0LCAyLCAwXFwpIiAxICJnaW1wbGUiIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIuREVGRVJSRURfSU5JVCBc XCg4LCAyLCAwXFwpIiAzICJlc3JhIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv ZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC0xX2EuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRn L2F1dG8taW5pdC11bmluaXQtcHJlZC0xX2EuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjMzYzE3NDQxMzg0ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC0xX2EuQwpAQCAtMCwwICsxLDYzIEBACisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlhbGl6ZWQg LU8yIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKwordHlwZWRlZiBsb25nIGxv bmcgaW50NjQ7Cit2b2lkIGluY3IgKCk7Citib29sIGlzX3ZhbGlkIChpbnQpOworaW50ICBnZXRf dGltZSAoKTsKKworY2xhc3MgQSAKK3sKK3B1YmxpYzoKKyAgQSAoKTsKKyAgfkEgKCkgeworICAg IGlmIChJKSBkZWxldGUgSTsKKyAgfQorCitwcml2YXRlOgorICBpbnQqIEk7Cit9OworCitib29s IGdldF91cmwgKEEgKik7CisKK2NsYXNzIE0geworCisgcHVibGljOgorX19hdHRyaWJ1dGVfXyAo KGFsd2F5c19pbmxpbmUpKSAgaW50IEdldEMgKGludCAqYykgIHsKKworICAgIEEgZGV0YWlsc19z dHI7CisgICAgaWYgKCFnZXRfdXJsICgmZGV0YWlsc19zdHIpKQorICAgICAgeworICAgICAgICBp bmNyICgpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICpjID0gZ2V0X3RpbWUg KCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgdm9pZCBkb19zdGgoKTsKKyAgdm9pZCBkb19z dGgyKCk7CisgICAKKyAgdm9pZCBQIChpbnQ2NCB0KQorICAgIHsKKyAgICAgIGludCBjYzsgLyog eyBkZy1ib2d1cyAidW5pbml0aWFsaXplZCIgInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2Fybmlu ZyIgfSAgKi8gCisgICAgICBpZiAoR2V0QyAoJmNjKSA+PSAwICkKKyAgICAgICAgcmV0dXJuOwor ICAgICAgCisgICAgICBpZiAodCAmJiBjYyA8PSAwICkgIC8qIHsgZGctYm9ndXMgInVuaW5pdGlh bGl6ZWQiICJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmciIH0gKi8KKyAgICAgICAgewor ICAgICAgICAgIHRoaXMtPmRvX3N0aCgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor CisgICAgZG9fc3RoMigpOworICB9Cit9OworCitNKiBtOyAKK3ZvaWQgZm9vKGludCB4KQorewor ICBtID0gbmV3IE07CisgIG0tPlAoeCk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtMV9iLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9h dXRvLWluaXQtdW5pbml0LXByZWQtMV9iLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi42YjZiZGFlZDcxZTAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtMV9iLkMKQEAgLTAsMCArMSw2MyBAQAorLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVd1bmluaXRpYWxpemVkIC1P MiAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKK3R5cGVkZWYgbG9uZyBsb25n IGludDY0Owordm9pZCBpbmNyICgpOworYm9vbCBpc192YWxpZCAoaW50KTsKK2ludCAgZ2V0X3Rp bWUgKCk7CisKK2NsYXNzIEEgCit7CitwdWJsaWM6CisgIEEgKCk7CisgIH5BICgpIHsKKyAgICBp ZiAoSSkgZGVsZXRlIEk7CisgIH0KKworcHJpdmF0ZToKKyAgaW50KiBJOworfTsKKworYm9vbCBn ZXRfdXJsIChBICopOworCitjbGFzcyBNIHsKKworIHB1YmxpYzoKK19fYXR0cmlidXRlX18gKChh bHdheXNfaW5saW5lKSkgIGludCBHZXRDIChpbnQgKmMpICB7CisKKyAgICBBIGRldGFpbHNfc3Ry OworICAgIGlmICghZ2V0X3VybCAoJmRldGFpbHNfc3RyKSkKKyAgICAgIHsKKyAgICAgICAgaW5j ciAoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAqYyA9IGdldF90aW1lICgp OworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHZvaWQgZG9fc3RoKCk7CisgIHZvaWQgZG9fc3Ro MigpOworICAgCisgIHZvaWQgUCAoaW50NjQgdCkKKyAgICB7CisgICAgICBpbnQgY2M7IC8qIHsg ZGctbWVzc2FnZSAibm90ZTogJ2NjJyB3YXMgZGVjbGFyZWQgaGVyZSIgfSAqLworICAgICAgaWYg KEdldEMgKCZjYykgPD0gMCApIC8qIHJldHVybiBmbGFnIGNoZWNrZWQgd3JvbmdseSAqLworICAg ICAgICByZXR1cm47CisgICAgICAKKyAgICAgIGlmICh0ICYmIGNjIDw9IDAgKSAgLyogeyBkZy13 YXJuaW5nICJ1bmluaXRpYWxpemVkIiAidW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIiB9 ICovCisgICAgICAgIHsKKyAgICAgICAgICB0aGlzLT5kb19zdGgoKTsKKyAgICAgICAgICByZXR1 cm47CisgICAgICAgIH0KKworICAgIGRvX3N0aDIoKTsKKyAgfQorfTsKKworTSogbTsgCit2b2lk IGZvbyhpbnQgeCkKK3sKKyAgbSA9IG5ldyBNOworICBtLT5QKHgpOworfQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLTJfYS5DIGIvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLTJfYS5DCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmMxOGNiMWU3YzkxCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLTJfYS5DCkBAIC0w LDAgKzEsNjIgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1X dW5pbml0aWFsaXplZCAtTzIgLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyIgfSAqLworCit0 eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NDsKK3ZvaWQgaW5jciAoKTsKK2Jvb2wgaXNfdmFsaWQgKGlu dCk7CitpbnQgIGdldF90aW1lICgpOworCitjbGFzcyBBIAoreworcHVibGljOgorICBBICgpOwor ICB+QSAoKSB7CisgICAgaWYgKEkpIGRlbGV0ZSBJOworICB9CisKK3ByaXZhdGU6CisgIGludCog STsKK307CisKK2Jvb2wgZ2V0X3VybCAoQSAqKTsKKworY2xhc3MgTSB7CisKKyBwdWJsaWM6Citf X2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpICBib29sIEdldEMgKGludCAqYykgIHsKKwor ICAgIEEgZGV0YWlsc19zdHI7CisgICAgaWYgKGdldF91cmwgKCZkZXRhaWxzX3N0cikpCisgICAg ICB7CisgICAgICAgICpjID0gZ2V0X3RpbWUgKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgdm9pZCBkb19zdGgoKTsKKyAgdm9p ZCBkb19zdGgyKCk7CisgICAKKyAgdm9pZCBQIChpbnQ2NCB0KQorICAgIHsKKyAgICAgIGludCBj YzsgCisgICAgICBpZiAoIUdldEMgKCZjYykpIC8qIHJldHVybiBmbGFnIGNoZWNrZWQgcHJvcGVy bHkgKi8KKyAgICAgICAgcmV0dXJuOworICAgICAgCisgICAgICBpZiAoY2MgPD0gMCkgIC8qIHsg ZGctYm9ndXMgInVuaW5pdGlhbGl6ZWQiICJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmci IH0gKi8KKyAgICAgICAgeworICAgICAgICAgIHRoaXMtPmRvX3N0aCgpOworICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgfQorCisgICAgZG9fc3RoMigpOworICB9Cit9OworCitNKiBtOyAKK3Zv aWQgZm9vKGludCB4KQoreworICBtID0gbmV3IE07CisgIG0tPlAoeCk7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtMl9iLkMgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtMl9iLkMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lODVhMzZmMTZmZmYKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtMl9iLkMKQEAg LTAsMCArMSw2MiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LVd1bmluaXRpYWxpemVkIC1PMiAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisK K3R5cGVkZWYgbG9uZyBsb25nIGludDY0Owordm9pZCBpbmNyICgpOworYm9vbCBpc192YWxpZCAo aW50KTsKK2ludCAgZ2V0X3RpbWUgKCk7CisKK2NsYXNzIEEgCit7CitwdWJsaWM6CisgIEEgKCk7 CisgIH5BICgpIHsKKyAgICBpZiAoSSkgZGVsZXRlIEk7CisgIH0KKworcHJpdmF0ZToKKyAgaW50 KiBJOworfTsKKworYm9vbCBnZXRfdXJsIChBICopOworCitjbGFzcyBNIHsKKworIHB1YmxpYzoK K19fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkgIGJvb2wgR2V0QyAoaW50ICpjKSAgewor CisgICAgQSBkZXRhaWxzX3N0cjsKKyAgICBpZiAoZ2V0X3VybCAoJmRldGFpbHNfc3RyKSkKKyAg ICAgIHsKKyAgICAgICAgKmMgPSBnZXRfdGltZSAoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg ICAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICB2b2lkIGRvX3N0aCgpOworICB2 b2lkIGRvX3N0aDIoKTsKKyAgIAorICB2b2lkIFAgKGludDY0IHQpCisgICAgeworICAgICAgaW50 IGNjOyAvKiB7IGRnLW1lc3NhZ2UgIm5vdGU6ICdjYycgd2FzIGRlY2xhcmVkIGhlcmUiIH0gKi8K KyAgICAgIGlmIChHZXRDICgmY2MpKSAvKiByZXR1cm4gZmxhZyBjaGVja2VkIHdyb25nbHkgKi8K KyAgICAgICAgcmV0dXJuOworICAgICAgCisgICAgICBpZiAoY2MgPD0gMCkgIC8qIHsgZGctd2Fy bmluZyAidW5pbml0aWFsaXplZCIgInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZyIgfSAq LworICAgICAgICB7CisgICAgICAgICAgdGhpcy0+ZG9fc3RoKCk7CisgICAgICAgICAgcmV0dXJu OworICAgICAgICB9CisKKyAgICBkb19zdGgyKCk7CisgIH0KK307CisKK00qIG07IAordm9pZCBm b28oaW50IHgpCit7CisgIG0gPSBuZXcgTTsKKyAgbS0+UCh4KTsKK30KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC0zX2EuQyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC0zX2EuQwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA5ZWQ2OTIxNTMyMAotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC0zX2EuQwpAQCAtMCww ICsxLDc3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItV3Vu aW5pdGlhbGl6ZWQgLU8yIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworLyog TXVsdGlwbGUgaW5pdGlhbGl6YXRpb24gcGF0aHMuICAqLworCit0eXBlZGVmIGxvbmcgbG9uZyBp bnQ2NDsKK3ZvaWQgaW5jciAoKTsKK2Jvb2wgaXNfdmFsaWQgKGludCk7CitpbnQgIGdldF90aW1l ICgpOworCitjbGFzcyBBCit7CitwdWJsaWM6CisgIEEgKCk7CisgIH5BICgpIHsKKyAgICBpZiAo SSkgZGVsZXRlIEk7CisgIH0KKworcHJpdmF0ZToKKyAgaW50KiBJOworfTsKKworYm9vbCBnZXRf dXJsIChBICopOworYm9vbCBnZXRfdXJsMiAoQSAqKTsKKworY2xhc3MgTSB7CisKKyBwdWJsaWM6 CisgX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKQorIGJvb2wgR2V0QyAoaW50ICpjKSAg eworCisgICAgQSBkZXRhaWxzX3N0cjsKKyAgICAvKiBJbnRpYWxpemF0aW9uIHBhdGggMSAgKi8K KyAgICBpZiAoZ2V0X3VybCAoJmRldGFpbHNfc3RyKSkKKyAgICAgIHsKKyAgICAgICAgKmMgPSBn ZXRfdGltZSAoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICAvKiBpbnNl cnQgZHRvciBjYWxscyAoaW5saW5lZCkgaW50byBmb2xsb3dpbmcgcmV0dXJuIHBhdGhzICAqLwor ICAgIEEgdG1wX3N0cjsKKworICAgIC8qIEludGlhbGl6dGlvbiBwYXRoIDIgICovCisgICAgaWYg KGdldF91cmwyICgmZGV0YWlsc19zdHIpKQorICAgICAgeworICAgICAgICAqYyA9IGdldF90aW1l ICgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK KyAgfQorCisgIHZvaWQgZG9fc3RoKCk7CisgIHZvaWQgZG9fc3RoMigpOworCisgIHZvaWQgUCAo aW50NjQgdCkKKyAgICB7CisgICAgICBpbnQgY2M7CisgICAgICBpZiAoIUdldEMgKCZjYykpIC8q IHJldHVybiBmbGFnIGNoZWNrZWQgcHJvcGVybHkgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAg ICBpZiAoY2MgPD0gMCkgICAvKiB7IGRnLWJvZ3VzICJ1bmluaXRpYWxpemVkIiAidW5pbml0aWFs aXplZCB2YXJpYWJsZSB3YXJuaW5nIiB9ICovCisgICAgICAgIHsKKyAgICAgICAgICB0aGlzLT5k b19zdGgoKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgIGRvX3N0aDIoKTsK KyAgfQorfTsKKworTSogbTsKK3ZvaWQgdGVzdChpbnQgeCkKK3sKKyAgbSA9IG5ldyBNOworICBt LT5QKHgpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXV0by1pbml0LXVu aW5pdC1wcmVkLTNfYi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1w cmVkLTNfYi5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGU3Yjg1 NDE3MjVlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXV0by1pbml0 LXVuaW5pdC1wcmVkLTNfYi5DCkBAIC0wLDAgKzEsODcgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1XdW5pbml0aWFsaXplZCAtTzIgLWZ0cml2aWFsLWF1dG8t dmFyLWluaXQ9emVybyIgfSAqLworCisvKiBNdWx0aXBsZSBpbml0aWFsaXphdGlvbiBwYXRocy4g ICovCisKK3R5cGVkZWYgbG9uZyBsb25nIGludDY0Owordm9pZCBpbmNyICgpOworYm9vbCBpc192 YWxpZCAoaW50KTsKK2ludCAgZ2V0X3RpbWUgKCk7CisKK2NsYXNzIEEKK3sKK3B1YmxpYzoKKyAg QSAoKTsKKyAgfkEgKCkgeworICAgIGlmIChJKSBkZWxldGUgSTsKKyAgfQorCitwcml2YXRlOgor ICBpbnQqIEk7Cit9OworCitib29sIGdldF91cmwgKEEgKik7Citib29sIGdldF91cmwyIChBICop OworYm9vbCBnZXRfdXJsMyAoQSAqKTsKKworY2xhc3MgTSB7CisKKyBwdWJsaWM6CisgX19hdHRy aWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKQorIGJvb2wgR2V0QyAoaW50ICpjKSAgeworCisgICAg QSBkZXRhaWxzX3N0cjsKKworICAgIC8qIEluaXRpYWxpemF0aW9uIHBhdGggMSAgKi8KKyAgICBp ZiAoZ2V0X3VybCAoJmRldGFpbHNfc3RyKSkKKyAgICAgIHsKKyAgICAgICAgKmMgPSBnZXRfdGlt ZSAoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICAvKiBEZXN0cnVjdG9y IGNhbGwgYmVmb3JlIHJldHVybiovCisgICAgQSB0bXBfc3RyOworCisgICAgLyogSW5pdGlhbGl6 YXRpb24gcGF0aCAyICAqLworICAgIGlmIChnZXRfdXJsMiAoJmRldGFpbHNfc3RyKSkKKyAgICAg IHsKKyAgICAgICAgKmMgPSBnZXRfdGltZSAoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICB9CisKKyAgICAvKiBGYWlsIHRvIGluaXRpYWxpemUgaW4gdGhpcyBwYXRoIGJ1dAorICAgICAg IHN0aWxsIHJldHVybnMgdHJ1ZSAgKi8KKyAgICBpZiAoZ2V0X3VybDIgKCZkZXRhaWxzX3N0cikp CisgICAgICB7CisgICAgICAgIC8qIEZhaWwgdG8gaW5pdGlhbGl6ZSAqYyAgKi8KKyAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICB2b2lk IGRvX3N0aCgpOworICB2b2lkIGRvX3N0aDIoKTsKKworICB2b2lkIFAgKGludDY0IHQpCisgICAg eworICAgICAgaW50IGNjOworICAgICAgaWYgKCFHZXRDICgmY2MpKQorICAgICAgICByZXR1cm47 CisKKyAgICAgIGlmIChjYyA8PSAwKSAgIC8qIHsgZGctd2FybmluZyAidW5pbml0aWFsaXplZCIg InVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZyIgfSAqLworICAgICAgICB7CisgICAgICAg ICAgdGhpcy0+ZG9fc3RoKCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICBk b19zdGgyKCk7CisgIH0KK307CisKK00qIG07Cit2b2lkIHRlc3QoaW50IHgpCit7CisgIG0gPSBu ZXcgTTsKKyAgbS0+UCh4KTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2F1 dG8taW5pdC11bmluaXQtcHJlZC00LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQt dW5pbml0LXByZWQtNC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u YzQ4NzcwYWU0NGRkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXV0 by1pbml0LXVuaW5pdC1wcmVkLTQuQwpAQCAtMCwwICsxLDE2IEBACisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlhbGl6ZWQgLU9nIC1mdHJpdmlhbC1h dXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworaW50IHBvcCAoKTsKK2ludCBwb3BfZmlyc3RfYnVj a2V0OworCitpbnQgbXlfcG9wICgpCit7CisgIGludCBvdXQ7ICAvLyB7IGRnLWJvZ3VzICJ1bmlu aXRpYWxpemVkIiAidW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIiB9CisKKyAgd2hpbGUg KHBvcF9maXJzdF9idWNrZXQpCisgICAgaWYgKHBvcF9maXJzdF9idWNrZXQgJiYgKG91dCA9IHBv cCgpKSkKKyAgICAgIHJldHVybiBvdXQ7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtbG9vcC0xX2EuY2MgYi9n Y2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQtbG9vcC0xX2EuY2MKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42Mjk2NzdhNjAyNTkKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9hdXRvLWluaXQtdW5pbml0LXByZWQt bG9vcC0xX2EuY2MKQEAgLTAsMCArMSwyMSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLVd1bmluaXRpYWxpemVkIC1PMiAtZnRyaXZpYWwtYXV0by12YXItaW5p dD16ZXJvIiB9ICovCisKK2V4dGVybiBpbnQgYmFyKCk7CitpbnQgZm9vKHZvaWQpCit7CisgZm9y ICg7OykgeworICAgaW50IGVyciA9ICh7aW50IF9lcnI7IC8qICB7IGRnLWJvZ3VzICJ1bmluaXRp YWxpemVkIiAiZmFsc2Ugd2FybmluZyIgfSAqLworICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2 OyArK2kpIHsKKyAgICAgICBfZXJyID0gMTc7CisgICAgICAgX2VyciA9IGJhcigpOworICAgICB9 CisgICAgIF9lcnI7IC8qICB7IGRnLWJvZ3VzICJ1bmluaXRpYWxpemVkIiAiZmFsc2Ugd2Fybmlu ZyIgfSAqLworICAgfSk7CisKKyAgIGlmIChlcnIgPT0gMCkgcmV0dXJuIDE3OyAKKyB9CisKKyBy ZXR1cm4gMTg7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2F1dG8taW5p dC11bmluaXQtcHJlZC1sb29wLTFfYi5jYyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2F1dG8taW5p dC11bmluaXQtcHJlZC1sb29wLTFfYi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjA0YWIzNjRhYzgzZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC1sb29wLTFfYi5jYwpAQCAtMCwwICsxLDIxIEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlhbGl6 ZWQgLU8yIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworZXh0ZXJuIGludCBi YXIoKTsKK2ludCBmb28oaW50IG4pCit7CisgZm9yICg7OykgeworICAgaW50IGVyciA9ICh7aW50 IF9lcnI7IAorICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgIF9lcnIg PSAxNzsKKyAgICAgICBfZXJyID0gYmFyKCk7CisgICAgIH0KKyAgICAgX2VycjsgCisgICB9KTsg LyogeyBkZy13YXJuaW5nICJ1bmluaXRpYWxpemVkIiAid2FybiBvbiBfZXJyIiB9ICovCisKKyAg IGlmIChlcnIgPT0gMCkgcmV0dXJuIDE3OyAKKyB9CisKKyByZXR1cm4gMTg7Cit9CisKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC1sb29wLTFf Yy5jYyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2F1dG8taW5pdC11bmluaXQtcHJlZC1sb29wLTFf Yy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgyYTE4NDZjNmUw YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2F1dG8taW5pdC11bmlu aXQtcHJlZC1sb29wLTFfYy5jYwpAQCAtMCwwICsxLDIzIEBACisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlhbGl6ZWQgLU8yIC1mdHJpdmlhbC1hdXRv LXZhci1pbml0PXplcm8iIH0gKi8KKworZXh0ZXJuIGludCBiYXIoKTsKK2ludCBmb28oaW50IG4s IGludCBtKQoreworIGZvciAoOzspIHsKKyAgIGludCBlcnIgPSAoe2ludCBfZXJyOyAKKyAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgKytpKSB7CisgICAgICAgaWYgKG0raSA+IG4pCisgICAg ICAgICAgYnJlYWs7CisgICAgICAgX2VyciA9IDE3OworICAgICAgIF9lcnIgPSBiYXIoKTsKKyAg ICAgfQorICAgICBfZXJyOyAKKyAgIH0pOyAKKworICAgaWYgKGVyciA9PSAwKSByZXR1cm4gMTc7 IH0pOyAvKiB7IGRnLXdhcm5pbmcgInVuaW5pdGlhbGl6ZWQiICJ3YXJuIG9uIF9lcnIiIH0gKi8K KyB9CisKKyByZXR1cm4gMTg7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRn L2F1dG8taW5pdC11bmluaXQtcHJlZC1sb29wXzEuY2MgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9h dXRvLWluaXQtdW5pbml0LXByZWQtbG9vcF8xLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uNjI5Njc3YTYwMjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvYXV0by1pbml0LXVuaW5pdC1wcmVkLWxvb3BfMS5jYwpAQCAtMCwwICsxLDIx IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItV3VuaW5pdGlh bGl6ZWQgLU8yIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworZXh0ZXJuIGlu dCBiYXIoKTsKK2ludCBmb28odm9pZCkKK3sKKyBmb3IgKDs7KSB7CisgICBpbnQgZXJyID0gKHtp bnQgX2VycjsgLyogIHsgZGctYm9ndXMgInVuaW5pdGlhbGl6ZWQiICJmYWxzZSB3YXJuaW5nIiB9 ICovCisgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7ICsraSkgeworICAgICAgIF9lcnIgPSAx NzsKKyAgICAgICBfZXJyID0gYmFyKCk7CisgICAgIH0KKyAgICAgX2VycjsgLyogIHsgZGctYm9n dXMgInVuaW5pdGlhbGl6ZWQiICJmYWxzZSB3YXJuaW5nIiB9ICovCisgICB9KTsKKworICAgaWYg KGVyciA9PSAwKSByZXR1cm4gMTc7IAorIH0KKworIHJldHVybiAxODsKK30KKwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmNiMGU3Y2M2MjU0NQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMS5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qIFNw dXJpb3VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZ3MsIGNhc2UgMS4KKyAgIFRha2Vu IGZyb20gY3BwZmlsZXMuYyAobWVyZ2VfaW5jbHVkZV9jaGFpbnMpICovCisvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTyAtV3VuaW5pdGlhbGl6ZWQgLWZ0cml2aWFs LWF1dG8tdmFyLWluaXQ9emVybyIgfSAqLworCitzdHJ1Y3QgbGlzdAoreworICBzdHJ1Y3QgbGlz dCAqbmV4dDsKKyAgaW50IGlkOworfTsKKworZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqKTsKKwor dm9pZCByZW1vdmVfZHVwZXMgKHN0cnVjdCBsaXN0ICplbCkKK3sKKyAgc3RydWN0IGxpc3QgKnAs ICpxLCAqcjsgIC8qIHsgZGctYm9ndXMgInIiICJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5p bmciIH0gKi8KKworICBmb3IgKHAgPSBlbDsgcDsgcCA9IHAtPm5leHQpCisgIHsKKyAgICBmb3Ig KHEgPSBlbDsgcSAhPSBwOyBxID0gcS0+bmV4dCkKKyAgICAgIGlmIChxLT5pZCA9PSBwLT5pZCkK KyAgICAgIHsKKwlyLT5uZXh0ID0gcC0+bmV4dDsKKwlmcmVlIChwKTsKKwlwID0gcjsKKwlicmVh azsKKyAgICAgIH0KKyAgICByID0gcDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0 by1pbml0LXVuaW5pdC0xMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uNTU5ZTJkOTYzMzc2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv YXV0by1pbml0LXVuaW5pdC0xMS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIFBvc2l0aXZlIHRlc3Qg Zm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XdW5pbml0aWFsaXplZCAtZnRyaXZpYWwtYXV0by12YXIt aW5pdD16ZXJvIiB9ICovCisKK2ludCBzaW5rOworCit2b2lkIGYxKGludCBwYXJtKQkvKiB7IGRn LWJvZ3VzICJ1bmluaXRpYWxpemVkIiAicGFyYW1ldGVyIiB9ICovCit7CisgIHNpbmsgPSBwYXJt OwkJLyogeyBkZy1ib2d1cyAidW5pbml0aWFsaXplZCIgInBhcmFtZXRlciIgfSAqLworfQorCit2 b2lkIGYyKHZvaWQpCit7CisgIGludCB4OworICBzaW5rID0geDsJCS8qIHsgZGctd2FybmluZyAi aXMgdXNlZCIgInVuY29uZGl0aW9uYWwiIH0gKi8KK30KKwordm9pZCBmMyhpbnQgcCkKK3sKKyAg aW50IHg7CQkKKyAgaWYgKHApCisgICAgeCA9IHA7CisgIHNpbmsgPSB4OyAgICAgICAgICAgIC8q IHsgZGctd2FybmluZyAibWF5IGJlIHVzZWQiICJjb25kaXRpb25hbCIgfSAqLworfQorCit2b2lk IGY0KGludCBwKQoreworICBpbnQgeDsJCS8qIHsgZGctYm9ndXMgInVuaW5pdGlhbGl6ZWQiICJl YXN5IGlmIiB9ICovCisgIGlmIChwKQorICAgIHggPSAxOworICBlbHNlCisgICAgeCA9IDI7Cisg IHNpbmsgPSB4OworfQorCit2b2lkIGY1KHZvaWQpCit7CisgIGludCB4LCBpOwkJLyogeyBkZy1i b2d1cyAidW5pbml0aWFsaXplZCIgImVhc3kgbG9vcCIgfSAqLworICBmb3IgKGkgPSAwOyBpIDwg MTA7ICsraSkKKyAgICB4ID0gMTsKKyAgc2luayA9IHg7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTEyLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9hdXRvLWluaXQtdW5pbml0LTEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5hY2ZmNzI1NzIyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9hdXRvLWluaXQtdW5pbml0LTEyLmMKQEAgLTAsMCArMSwxMiBAQAorLyogUFIgMjM0OTcg Ki8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XdW5pbml0 aWFsaXplZCAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKK3R5cGVkZWYgX0Nv bXBsZXggZmxvYXQgQzsKK0MgZm9vKCkKK3sKKyAgQyBmOworICBfX3JlYWxfXyBmID0gMDsKKyAg X19pbWFnX18gZiA9IDA7CisgIHJldHVybiBmOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0 by1pbml0LXVuaW5pdC0xMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uODdkZDhiNTg3ZTAwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv YXV0by1pbml0LXVuaW5pdC0xMy5jCkBAIC0wLDAgKzEsMTAgQEAKKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XdW5pbml0aWFsaXplZCAtZnRyaXZpYWwtYXV0 by12YXItaW5pdD16ZXJvIiB9ICovCisKK3R5cGVkZWYgX0NvbXBsZXggZmxvYXQgQzsKK0MgZm9v KCkKK3sKKyAgQyBmOworICBfX2ltYWdfXyBmID0gMDsKKyAgcmV0dXJuIGY7CS8qIHsgZGctd2Fy bmluZyAiaXMgdXNlZCIgInVuY29uZGl0aW9uYWwiIH0gKi8KK30KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMTQuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2F1dG8taW5pdC11bmluaXQtMTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjU5MjA1MmE5ZTlkMAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL2F1dG8taW5pdC11bmluaXQtMTQuYwpAQCAtMCwwICsxLDIwIEBACisvKiBQUiAyNDkz MSAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8gLVd1bmlu aXRpYWxpemVkIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworc3RydWN0IHAg eworICAgICAgICBzaG9ydCB4LCB5OworfTsKKworc3RydWN0IHMgeworICAgICAgICBpbnQgaTsK KyAgICAgICAgc3RydWN0IHAgcDsKK307CisKK3N0cnVjdCBzIGYoKQoreworICAgICAgICBzdHJ1 Y3QgcyBzOworICAgICAgICBzLnAgPSAoc3RydWN0IHApe307CisgICAgICAgIHMuaSA9IChzLnAu eCB8fCBzLnAueSk7CisgICAgICAgIHJldHVybiBzOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv YXV0by1pbml0LXVuaW5pdC0xNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uMTIxZjBjZmYyNzRhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvYXV0by1pbml0LXVuaW5pdC0xNS5jCkBAIC0wLDAgKzEsMjYgQEAKKy8qIFBSIHRyZWUtb3B0 aW1pemF0aW9uLzE3NTA2CisgICBXZSBpc3N1ZSBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdh cm5pbmcgYXQgYSB3cm9uZyBsb2NhdGlvbiBhdAorICAgbGluZSAxMSwgd2hpY2ggaXMgdmVyeSBj b25mdXNpbmcuICBNYWtlIHN1cmUgd2UgcHJpbnQgb3V0IGEgbm90ZSB0bworICAgbWFrZSBpdCBs ZXNzIGNvbmZ1c2luZy4gIChub3QgeGZhaWxlZCBhbHRlcm5hdGl2ZSkKKyAgIEJ1dCBpdCBpcyBv ZiBjb3Vyc2Ugb2sgaWYgd2Ugd2FybiBpbiBiYXIgYWJvdXQgdW5pbml0aWFsaXplZCB1c2UKKyAg IG9mIGouICAobm90IHhmYWlsZWQgYWx0ZXJuYXRpdmUpICAqLworLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8xIC1XdW5pbml0aWFsaXplZCAtZnRyaXZpYWwtYXV0 by12YXItaW5pdD16ZXJvIiB9ICovCisKK2lubGluZSBpbnQKK2ZvbyAoaW50IGkpCit7CisgIGlm IChpKSAvKiB7IGRnLXdhcm5pbmcgInVzZWQgdW5pbml0aWFsaXplZCIgfSAqLworICAgIHJldHVy biAxOworICByZXR1cm4gMDsKK30KKwordm9pZCBiYXogKHZvaWQpOworCit2b2lkCitiYXIgKHZv aWQpCit7CisgIGludCBqOyAvKiB7IGRnLW1lc3NhZ2UgIm5vdGU6ICdqJyB3YXMgZGVjbGFyZWQg aGVyZSIgIiIgfSAqLworICBmb3IgKDsgZm9vIChqKTsgKytqKSAgLyogeyBkZy13YXJuaW5nICIn aicgaXMgdXNlZCB1bmluaXRpYWxpemVkIiAiIiB7IHhmYWlsICotKi0qIH0gfSAqLworICAgIGJh eiAoKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmlu aXQtMTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMTYuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBlNGYzMzZmNzI2ZgotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMTYuYwpA QCAtMCwwICsxLDIzIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25z ICItTzIgLVd1bmluaXRpYWxpemVkIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8K KworaW50IGZvbywgYmFyOworCitzdGF0aWMKK3ZvaWQgZGVjb2RlX3JlbG9jKGludCByZWxvYywg aW50ICppc19hbHQpCit7CisgIGlmIChyZWxvYyA+PSAyMCkKKyAgICAgICppc19hbHQgPSAxOwor ICBlbHNlIGlmIChyZWxvYyA+PSAxMCkKKyAgICAgICppc19hbHQgPSAwOworfQorCit2b2lkIHRl c3RmdW5jKCkKK3sKKyAgaW50IGFsdF9yZWxvYzsKKworICBkZWNvZGVfcmVsb2MoZm9vLCAmYWx0 X3JlbG9jKTsKKworICBpZiAoYWx0X3JlbG9jKSAvKiB7IGRnLXdhcm5pbmcgIm1heSBiZSB1c2Vk IHVuaW5pdGlhbGl6ZWQiIH0gKi8KKyAgICBiYXIgPSA0MjsKK30KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMTcuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2F1dG8taW5pdC11bmluaXQtMTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjllZWM5NDQwYzc1ZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL2F1dG8taW5pdC11bmluaXQtMTcuYwpAQCAtMCwwICsxLDE1IEBACisvKiB7IGRnLWRv IGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTyAtV3VuaW5pdGlhbGl6ZWQgLWZ0cml2 aWFsLWF1dG8tdmFyLWluaXQ9emVybyIgfSAqLworCit0eXBlZGVmIF9Db21wbGV4IGZsb2F0IEM7 CitDIGZvbyhpbnQgY29uZCkKK3sKKyAgQyBmOworICBfX2ltYWdfXyBmID0gMDsKKyAgaWYgKGNv bmQpCisgICAgeworICAgICAgX19yZWFsX18gZiA9IDE7CisgICAgICByZXR1cm4gZjsKKyAgICB9 CisgIHJldHVybiBmOwkvKiB7IGRnLXdhcm5pbmcgIm1heSBiZSB1c2VkIiAidW5jb25kaXRpb25h bCIgfSAqLworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVu aW5pdC0xOC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xOC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDkyMjg0OGY2ZGM3Ci0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xOC5j CkBAIC0wLDAgKzEsMjQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICAqLworLyogeyBkZy1vcHRp b25zICItTyAtV3VuaW5pdGlhbGl6ZWQgLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyIgfSAq LworCitjaGFyICpmb28oaW50IGJhciwgY2hhciAqYmF6KQoreworICBjaGFyICp0bXA7CisKKyAg aWYgKGJhciAmIDMpCisgICAgdG1wID0gYmF6OworCisgIHN3aXRjaCAoYmFyKSB7CisgIGNhc2Ug MToKKyAgICB0bXBbNV0gPSA3OyAgICAvKiB7IGRnLWJvZ3VzICJtYXkgYmUgdXNlZCB1bmluaXRp YWxpemVkIiB9ICovCisgICAgYnJlYWs7CisgIGNhc2UgMjoKKyAgICB0bXBbMTFdID0gMTU7ICAv KiB7IGRnLWJvZ3VzICJtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIiB9ICovCisgICAgYnJlYWs7 CisgIGRlZmF1bHQ6CisgICAgdG1wID0gMDsKKyAgICBicmVhazsKKyAgfQorCisgIHJldHVybiB0 bXA7ICAgICAgLyogeyBkZy1ib2d1cyAibWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCIgfSAqLwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xOS5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xOS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzhkMjdlNGY5NTQ4Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0xOS5jCkBAIC0wLDAg KzEsMjYgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1X dW5pbml0aWFsaXplZCAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisvKiB7IGRn LWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZpbmxpbmUtc21hbGwtZnVuY3Rpb25zIiB7IHRhcmdldCBh dnItKi0qIH0gfSAqLworCitpbnQgYSwgbCwgbTsKK2Zsb2F0ICpiOworZmxvYXQgYywgZCwgZSwg ZywgaDsKK3Vuc2lnbmVkIGNoYXIgaSwgazsKK3ZvaWQKK2ZuMSAoaW50IHAxLCBmbG9hdCAqZjEs IGZsb2F0ICpmMiwgZmxvYXQgKmYzLCB1bnNpZ25lZCBjaGFyICpjMSwgZmxvYXQgKmY0LAorICAg ICB1bnNpZ25lZCBjaGFyICpjMiwgZmxvYXQgKnAxMCkKK3sKKyAgaWYgKHAxICYgOCkKKyAgICBi WzNdID0gcDEwW2FdOworICAvKiB7IGRnLXdhcm5pbmcgIm1heSBiZSB1c2VkIHVuaW5pdGlhbGl6 ZWQiICIiIHsgdGFyZ2V0IHsgeyBub25waWMgfHwgcGllX2VuYWJsZWQgfSB8fCB7IGhwcGEqNjQq LSotKiAqLSotZGFyd2luKiB9IH0gfSAuLTEgfSAqLworfQorCit2b2lkCitmbjIgKCkKK3sKKyAg ZmxvYXQgKm47CisgIGlmIChsICYgNikKKyAgICBuID0gJmMgKyBtOworICBmbjEgKGwsICZkLCAm ZSwgJmcsICZpLCAmaCwgJmssIG4pOworICAvKiB7IGRnLXdhcm5pbmcgIm1heSBiZSB1c2VkIHVu aW5pdGlhbGl6ZWQiICIiIHsgdGFyZ2V0IHsgISB7IHsgbm9ucGljIHx8IHBpZV9lbmFibGVkIH0g fHwgeyBocHBhKjY0Ki0qLSogKi0qLWRhcndpbiogfSB9IH0gfSAuLTEgfSAqLworfQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0yLmMgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmRhMDNiZjhmNmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMi5jCkBAIC0wLDAgKzEsNTIgQEAKKy8q IFNwdXJpb3VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZ3MsIGNhc2UgMi4KKyAgIFRh a2VuIGZyb20gY3BwaGFzaC5jIChtYWNyb2V4cGFuZCkgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XdW5pbml0aWFsaXplZCAtZnRyaXZpYWwtYXV0by12 YXItaW5pdD16ZXJvIiB9ICovCisKK3N0cnVjdCBkZWZpbml0aW9uCit7CisgIGludCBuYXJnczsK KyAgaW50IHJlc3RfYXJnczsKK307CisKK3N0cnVjdCBjcHBfcmVhZGVyOworCitlbnVtIGNwcF90 b2tlbgoreworICBDUFBfRU9GLCBDUFBfUE9QLCBDUFBfQ09NTUEsIENQUF9SUEFSRU4KK307CisK K2V4dGVybiBlbnVtIGNwcF90b2tlbiBtYWNhcmcgKHN0cnVjdCBjcHBfcmVhZGVyICosIGludCk7 CisKK3ZvaWQKK21hY3JvZXhwYW5kIChzdHJ1Y3QgY3BwX3JlYWRlciAqcGZpbGUsIHN0cnVjdCBk ZWZpbml0aW9uICpkZWZuKQoreworICBpbnQgbmFyZ3MgPSBkZWZuLT5uYXJnczsKKworICBpZiAo bmFyZ3MgPj0gMCkKKyAgICB7CisgICAgICBlbnVtIGNwcF90b2tlbiB0b2tlbjsgIC8qIHsgZGct Ym9ndXMgInRva2VuIiAidW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIiB9ICovCisgICAg ICBpbnQgaSwgcmVzdF9hcmdzOworICAgICAgaSA9IDA7CisgICAgICByZXN0X2FyZ3MgPSAwOwor ICAgICAgZG8KKwl7CisJICBpZiAocmVzdF9hcmdzKQorCSAgICBjb250aW51ZTsKKwkgIGlmIChp IDwgbmFyZ3MgfHwgKG5hcmdzID09IDAgJiYgaSA9PSAwKSkKKwkgICAgeworCSAgICAgIC8qIGlm IHdlIGFyZSB3b3JraW5nIG9uIGxhc3QgYXJnIHdoaWNoIGFic29yYnMgcmVzdCBvZiBhcmdzLi4u ICovCisJICAgICAgaWYgKGkgPT0gbmFyZ3MgLSAxICYmIGRlZm4tPnJlc3RfYXJncykKKwkJcmVz dF9hcmdzID0gMTsKKwkgICAgICB0b2tlbiA9IG1hY2FyZyAocGZpbGUsIHJlc3RfYXJncyk7CisJ ICAgIH0KKwkgIGVsc2UKKwkgICAgdG9rZW4gPSBtYWNhcmcgKHBmaWxlLCAwKTsKKwkgIGlmICh0 b2tlbiA9PSBDUFBfRU9GIHx8IHRva2VuID09IENQUF9QT1ApCisJICAgIHJldHVybjsKKworCSAg aSsrOworCX0KKyAgICAgIHdoaWxlICh0b2tlbiA9PSBDUFBfQ09NTUEpOworICAgIH0KK30KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMjAuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMjAuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY1MzNjZTljNzBlNwotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMjAuYwpAQCAtMCwwICsxLDE4 IEBACisvKiBTcHVyaW91cyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmdzLCBmcm9tIGdk YiAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1XdW5p bml0aWFsaXplZCAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCitzdHJ1Y3Qgb3Mg eyBzdHJ1Y3QgbyAqbzsgfTsKK3N0cnVjdCBvIHsgc3RydWN0IG8gKm5leHQ7IHN0cnVjdCBvcyAq c2U7IH07Cit2b2lkIGYoc3RydWN0IG8gKm8peworICBzdHJ1Y3Qgb3MgKnM7CisgIGlmKG8pIHMg PSBvLT5zZTsKKyAgd2hpbGUobyAmJiBzID09IG8tPnNlKXsKKyAgICBzKys7IC8vIGhlcmUgYG8n IGlzIG5vbi16ZXJvIGFuZCB0aHVzIHMgaXMgaW5pdGlhbGl6ZWQKKyAgICBzID09IG8tPnNlICAv LyBgPycgaXMgZXNzZW50aWFsLCBgaWYnIGRvZXMgbm90IHRyaWdnZXIgdGhlIHdhcm5pbmcKKyAg ICAgID8gKG8gPSBvLT5uZXh0LCBvID8gcyA9IG8tPnNlIDogMCkKKyAgICAgIDogMDsKKyAgfQor fQorCisKKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5p dC0yMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0yMS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjA0NGVhYjI3ODcwCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0yMS5jCkBA IC0wLDAgKzEsMzMgQEAKKy8qIFBSNjk1MzcsIHNwdXJpb3VzIHdhcm5pbmcgYmVjYXVzZSBvZiBh IG1pc3NlZCBvcHRpbWl6YXRpb24uICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBk Zy1vcHRpb25zICItTzIgLWZuby1zaG9ydC1lbnVtcyAtV3VuaW5pdGlhbGl6ZWQgLWZ0cml2aWFs LWF1dG8tdmFyLWluaXQ9emVybyIgfSAqLworCitlbnVtIGNsbnRfc3RhdCB7CisgUlBDX1NVQ0NF U1M9MCwKKyBSUENfQ0FOVEVOQ09ERUFSR1M9MSwKK307CisgCitpbnQgZG9feXBjYWxsX3RyICgp OworIAorc3RhdGljIGludAoreXBfbWFzdGVyIChjaGFyICoqb3V0bmFtZSkKK3sKKyAgLy8gUmVw bGFjaW5nIGVudW0gY2xudF9zdGF0IHdpdGggaW50IGF2b2lkcyB0aGUgd2FybmluZy4KKyAgZW51 bSBjbG50X3N0YXQgcmVzdWx0OworICByZXN1bHQgPSBkb195cGNhbGxfdHIgKCk7CisgIGlmIChy ZXN1bHQgIT0gMCkKKyAgICByZXR1cm4gcmVzdWx0OworICAqb3V0bmFtZSA9IF9fYnVpbHRpbl9z dHJkdXAgKCJmb28iKTsKKyAgcmV0dXJuIDA7Cit9CisgCitpbnQKK3lwX3VwZGF0ZSAodm9pZCkK K3sKKyAgY2hhciAqbWFzdGVyOworICBpbnQgcjsKKyAgaWYgKChyID0geXBfbWFzdGVyICgmbWFz dGVyKSkgIT0gMCkKKyAgICByZXR1cm4gcjsKKyAgX19idWlsdGluX2ZyZWUgKG1hc3Rlcik7IC8q IHsgZGctYm9ndXMgInVuaW5pdGlhbGl6ZWQiIH0gKi8KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTIyLmMgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTIyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi4wMjAwZDczNGEyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTIyLmMKQEAgLTAsMCArMSw2OSBAQAor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIC1XdW5pbml0aWFs aXplZCAtLXBhcmFtIHZlY3QtbWF4LXZlcnNpb24tZm9yLWFsaWFzLWNoZWNrcz0yMCAtZnRyaXZp YWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2Rl ZmluZSBBMSAgMjg5NiAvKiAoMS9zcXJ0KDIpKTw8MTIgKi8KKyNkZWZpbmUgQTIgIDIyMTcKKyNk ZWZpbmUgQTMgIDM3ODQKKyNkZWZpbmUgQTQgLTUzNTIKKworI2RlZmluZSBJRENUX1RSQU5TRk9S TShkZXN0LHMwLHMxLHMyLHMzLHM0LHM1LHM2LHM3LGQwLGQxLGQyLGQzLGQ0LGQ1LGQ2LGQ3LG11 bmdlLHNyYykge1wKKyAgICBjb25zdCBpbnQgYTAgPSAoc3JjKVtzMF0gKyAoc3JjKVtzNF07IFwK KyAgICBjb25zdCBpbnQgYTEgPSAoc3JjKVtzMF0gLSAoc3JjKVtzNF07IFwKKyAgICBjb25zdCBp bnQgYTIgPSAoc3JjKVtzMl0gKyAoc3JjKVtzNl07IFwKKyAgICBjb25zdCBpbnQgYTMgPSAoQTEq KChzcmMpW3MyXSAtIChzcmMpW3M2XSkpID4+IDExOyBcCisgICAgY29uc3QgaW50IGE0ID0gKHNy YylbczVdICsgKHNyYylbczNdOyBcCisgICAgY29uc3QgaW50IGE1ID0gKHNyYylbczVdIC0gKHNy YylbczNdOyBcCisgICAgY29uc3QgaW50IGE2ID0gKHNyYylbczFdICsgKHNyYylbczddOyBcCisg ICAgY29uc3QgaW50IGE3ID0gKHNyYylbczFdIC0gKHNyYylbczddOyBcCisgICAgY29uc3QgaW50 IGIwID0gYTQgKyBhNjsgXAorICAgIGNvbnN0IGludCBiMSA9IChBMyooYTUgKyBhNykpID4+IDEx OyBcCisgICAgY29uc3QgaW50IGIyID0gKChBNCphNSkgPj4gMTEpIC0gYjAgKyBiMTsgXAorICAg IGNvbnN0IGludCBiMyA9IChBMSooYTYgLSBhNCkgPj4gMTEpIC0gYjI7IFwKKyAgICBjb25zdCBp bnQgYjQgPSAoKEEyKmE3KSA+PiAxMSkgKyBiMyAtIGIxOyBcCisgICAgKGRlc3QpW2QwXSA9IG11 bmdlKGEwK2EyICAgK2IwKTsgXAorICAgIChkZXN0KVtkMV0gPSBtdW5nZShhMSthMy1hMitiMik7 IFwKKyAgICAoZGVzdClbZDJdID0gbXVuZ2UoYTEtYTMrYTIrYjMpOyBcCisgICAgKGRlc3QpW2Qz XSA9IG11bmdlKGEwLWEyICAgLWI0KTsgXAorICAgIChkZXN0KVtkNF0gPSBtdW5nZShhMC1hMiAg ICtiNCk7IFwKKyAgICAoZGVzdClbZDVdID0gbXVuZ2UoYTEtYTMrYTItYjMpOyBcCisgICAgKGRl c3QpW2Q2XSA9IG11bmdlKGExK2EzLWEyLWIyKTsgXAorICAgIChkZXN0KVtkN10gPSBtdW5nZShh MCthMiAgIC1iMCk7IFwKK30KKworI2RlZmluZSBNVU5HRV9OT05FKHgpICh4KQorI2RlZmluZSBJ RENUX0NPTChkZXN0LHNyYykgSURDVF9UUkFOU0ZPUk0oZGVzdCwwLDgsMTYsMjQsMzIsNDAsNDgs NTYsMCw4LDE2LDI0LDMyLDQwLDQ4LDU2LE1VTkdFX05PTkUsc3JjKQorCisjZGVmaW5lIE1VTkdF X1JPVyh4KSAoKCh4KSArIDB4N0YpPj44KQorI2RlZmluZSBJRENUX1JPVyhkZXN0LHNyYykgSURD VF9UUkFOU0ZPUk0oZGVzdCwwLDEsMiwzLDQsNSw2LDcsMCwxLDIsMyw0LDUsNiw3LE1VTkdFX1JP VyxzcmMpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiaW5rX2lkY3RfY29sKGludCAqZGVzdCwgY29u c3QgaW50MzJfdCAqc3JjKQoreworICAgIGlmICgoc3JjWzhdfHNyY1sxNl18c3JjWzI0XXxzcmNb MzJdfHNyY1s0MF18c3JjWzQ4XXxzcmNbNTZdKT09MCkgeworICAgICAgICBkZXN0WzBdICA9Cisg ICAgICAgIGRlc3RbOF0gID0KKyAgICAgICAgZGVzdFsxNl0gPQorICAgICAgICBkZXN0WzI0XSA9 CisgICAgICAgIGRlc3RbMzJdID0KKyAgICAgICAgZGVzdFs0MF0gPQorICAgICAgICBkZXN0WzQ4 XSA9CisgICAgICAgIGRlc3RbNTZdID0gc3JjWzBdOworICAgIH0gZWxzZSB7CisgICAgICAgIElE Q1RfQ09MKGRlc3QsIHNyYyk7CisgICAgfQorfQorCitpbnQgYmlua19pZGN0X3B1dF9jKHVpbnQ4 X3QgKmRlc3QsIGludCBsaW5lc2l6ZSwgaW50MzJfdCAqYmxvY2spCit7CisgICAgaW50IGk7Cisg ICAgaW50IHRlbXBbNjRdOworICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisgICAgICAgIGJp bmtfaWRjdF9jb2woJnRlbXBbaV0sICZibG9ja1tpXSk7CisgICAgZm9yIChpID0gMDsgaSA8IDg7 IGkrKykgeworICAgICAgICBJRENUX1JPVyggKCZkZXN0W2kqbGluZXNpemVdKSwgKCZ0ZW1wWzgq aV0pICk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMjMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L2F1dG8taW5pdC11bmluaXQtMjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjdkY2U4ZDA1MmUxNgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2F1dG8taW5pdC11bmluaXQtMjMuYwpAQCAtMCwwICsxLDI3IEBACisvKiBQUiB0cmVlLW9w dGltaXphdGlvbi83ODQ1NSAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8yIC1XdW5pbml0aWFsaXplZCAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9 ICovCisKK2ludCBpajsKKwordm9pZAorcWwgKHZvaWQpCit7CisgIGludCBtNSA9IDA7CisKKyAg Zm9yICg7OykKKyAgeworICAgIGlmICgwKQorICAgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAg ICAgaW50ICpnbzsKKyAgICAgICAgaW50ICp0NCA9IGdvOyAvKiB7IGRnLXdhcm5pbmcgImlzIHVz ZWQgdW5pbml0aWFsaXplZCIgfSAqLworCisgbDE6CisgICAgICAgICp0NCA9ICgqdDQgIT0gMCkg PyAwIDogMjsKKyAgICAgIH0KKworICAgIGlmIChpaiAhPSAwKQorICAgICAgZ290byBsMTsKKyAg fQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0y NC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0yNC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMWY2NzQwYzEyM2FkCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0yNC5jCkBAIC0w LDAgKzEsMTAgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P IC1XbWF5YmUtdW5pbml0aWFsaXplZCAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICov CisKK2ludCBmb28gKGludCB4KQoreworICBpbnQgeTsKKyAgaWYgKHgpCisgICAgcmV0dXJuICoo JnkgKyAxKTsgLyogeyBkZy1ib2d1cyAibWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCIgfSAqLwor ICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5p dC11bmluaXQtMjUuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMjUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYzNmQ5NWY5ZDI3OQot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQt MjUuYwpAQCAtMCwwICsxLDIzIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1v cHRpb25zICItTyAtV21heWJlLXVuaW5pdGlhbGl6ZWQgLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9 emVybyIgfSAqLworCitleHRlcm4gdW5zaWduZWQgYmFyICh2b2lkKTsKK2V4dGVybiB2b2lkIHF1 dXggKHZvaWQpOworCit1bnNpZ25lZCBmb28gKHVuc2lnbmVkIHYpCit7CisgIHVuc2lnbmVkIHU7 CisgIGlmICh2ICE9IDEpCisgICAgdSA9IGJhciAoKTsKKworICAvLyBQcmV2ZW50IHRoZSAiZG9t IiBwYXNzIGZyb20gY2hhbmdpbmcgdGhlIENGRyBsYXlvdXQgYmFzZWQgb24gdGhlIGluZmVyZW5j ZQorICAvLyAnaWYgKHYgIT0gMSkgaXMgZmFsc2UgdGhlbiAodiAhPSAyKSBpcyB0cnVlJy4gIChO b3cgaXQgd291bGQgaGF2ZSB0bworICAvLyBkdXBsaWNhdGUgdGhlIGxvb3AgaW4gb3JkZXIgdG8g ZG8gc28sIHdoaWNoIGlzIGRlZW1lZCBleHBlbnNpdmUuKQorICBmb3IgKGludCBpID0gMDsgaSA8 IDEwOyBpKyspCisgICAgcXV1eCAoKTsKKworICBpZiAodiAhPSAyKQorICAgIHJldHVybiB1OyAg ICAgICAvKiB7IGRnLXdhcm5pbmcgIm1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQiIH0gKi8KKwor ICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5p dC11bmluaXQtMjYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMjYu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFlOTdlY2ZhNzFlMQot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQt MjYuYwpAQCAtMCwwICsxLDIzIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1v cHRpb25zICItTyAtV21heWJlLXVuaW5pdGlhbGl6ZWQgLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9 emVybyIgfSAqLworCitleHRlcm4gdW5zaWduZWQgYmFyICh2b2lkKTsKK2V4dGVybiB2b2lkIHF1 dXggKHZvaWQpOworCit1bnNpZ25lZCBmb28gKHVuc2lnbmVkIHYpCit7CisgIHVuc2lnbmVkIHU7 CisgIGlmICh2ICE9IDEwMCkKKyAgICB1ID0gYmFyICgpOworCisgIC8vIFByZXZlbnQgdGhlICJk b20iIHBhc3MgZnJvbSBjaGFuZ2luZyB0aGUgQ0ZHIGxheW91dCBiYXNlZCBvbiB0aGUgaW5mZXJl bmNlCisgIC8vICdpZiAodiAhPSAxMDApIGlzIGZhbHNlIHRoZW4gKHYgPCAxMDUpIGlzIHRydWUn LiAgKE5vdyBpdCB3b3VsZCBoYXZlIHRvCisgIC8vIGR1cGxpY2F0ZSB0aGUgbG9vcCBpbiBvcmRl ciB0byBkbyBzbywgd2hpY2ggaXMgZGVlbWVkIGV4cGVuc2l2ZS4pCisgIGZvciAoaW50IGkgPSAw OyBpIDwgMTA7IGkrKykKKyAgICBxdXV4ICgpOworCisgIGlmICh2IDwgMTA1KSAvKiB2ID09IDEw MCBmYWxscyBpbnRvIHRoaXMgcmFuZ2UuICAqLworICAgIHJldHVybiB1OyAgICAgICAvKiB7IGRn LXdhcm5pbmcgIm1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQiIH0gICovCisKKyAgcmV0dXJuIDA7 Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTMu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2ZmMjI4NTAxZjhkCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0zLmMKQEAgLTAsMCAr MSwzMyBAQAorLyogU3B1cmlvdXMgdW5pbml0IHZhcmlhYmxlIHdhcm5pbmdzLCBjYXNlIDMuCisg ICBJbnNwaXJlZCBieSBjcHBleHAuYyAocGFyc2VfY2hhcmNvbnN0KSAqLworLyogeyBkZy1kbyBj b21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8gLVd1bmluaXRpYWxpemVkIC1mdHJpdmlh bC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworZXh0ZXJuIHZvaWQgZXJyb3IgKGNoYXIgKik7 CisKK2ludAorcGFyc2VfY2hhcmNvbnN0IChjb25zdCBjaGFyICpzdGFydCwgY29uc3QgY2hhciAq ZW5kKQoreworICBpbnQgYzsgLyogeyBkZy1ib2d1cyAiYyIgInVuaW5pdGlhbGl6ZWQgdmFyaWFi bGUgd2FybmluZyIgfSAqLworICBpbnQgbmNoYXJzLCByZXR2YWw7CisKKyAgbmNoYXJzID0gMDsK KyAgcmV0dmFsID0gMDsKKyAgd2hpbGUgKHN0YXJ0IDwgZW5kKQorICAgIHsKKyAgICAgIGMgPSAq c3RhcnQrKzsKKyAgICAgIGlmIChjID09ICdcJycpCisJYnJlYWs7CisgICAgICBuY2hhcnMrKzsK KyAgICAgIHJldHZhbCArPSBjOworICAgICAgcmV0dmFsIDw8PSA4OworICAgIH0KKworICBpZiAo bmNoYXJzID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKGMgIT0gJ1wnJykKKyAgICBlcnJv ciAoIm1hbGZvcm1lZCBjaGFyYWN0ZXIgY29uc3RhbnQiKTsKKworICByZXR1cm4gcmV0dmFsOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0zNC5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0zNC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOThmYzM2NmM4NzFmCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC0zNC5jCkBAIC0wLDAg KzEsNTggQEAKKy8qIFBSIG1pZGRsZS1lbmQvMTAxMzggLSB3YXJuIGZvciB1bmluaXRpYWxpemVk IGFycmF5cyBwYXNzZWQgYXMgY29uc3QqCisgICBhcmd1bWVudHMKKyAgIFZlcmlmeSB0aGF0IHBh c3NpbmcgcG9pbnRlcnMgdG8gdW5pbml0aWFsaXplZCBvYmplY3RzIHRvIGFyZ3VtZW50cworICAg dG8gZnVuY3Rpb25zIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIGFjY2VzcyBpcyBkaWFnbm9zZWQg d2hlcmUgZXhwZWN0ZWQuCisgICB7IGRnLWRvIGNvbXBpbGUgfQorICAgeyBkZy1vcHRpb25zICIt TyAtV2FsbCAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKKyNkZWZpbmUgUlco Li4uKSBfX2F0dHJpYnV0ZV9fICgoYWNjZXNzIChyZWFkX3dyaXRlLCBfX1ZBX0FSR1NfXykpKQor CitSVyAoMSkgUlcgKDMpIHZvaWQKK2Y0cGkgKGludCosIGludCosIGludCosIGludCopOyAgICAv LyB7IGRnLW1lc3NhZ2UgImluIGEgY2FsbCB0byAnZjRwaScgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1 dGUgJ2FjY2VzcyBcXFwocmVhZF93cml0ZSwgXFsxM1xdXFxcKSciIH0KKworCit2b2lkIG5vd2Fy bl9zY2FsYXIgKHZvaWQpCit7CisgIGludCBpMSA9IDAsIGkyLCBpMyA9IDEsIGk0OworICBmNHBp ICgmaTEsICZpMiwgJmkzLCAmaTQpOworfQorCit2b2lkIHdhcm5fc2NhbGFyXzEgKHZvaWQpCit7 CisgIGludCBpMTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8geyBkZy1tZXNzYWdlICJkZWNs YXJlZCBoZXJlIiB9CisgIGludCBpMiwgaTMgPSAxLCBpNDsKKworICBmNHBpICgmaTEsICZpMiwg JmkzLCAmaTQpOyAgICAgIC8vIHsgZGctd2FybmluZyAiJ2kxJyBtYXkgYmUgdXNlZCB1bmluaXRp YWxpemVkIiB9Cit9CisKK3ZvaWQgd2Fybl9zY2FsYXJfMiAodm9pZCkKK3sKKyAgaW50IGoxID0g MCwgajIsIGo0OworICBpbnQgajM7CisKKyAgZjRwaSAoJmoxLCAmajIsICZqMywgJmo0KTsgICAg ICAvLyB7IGRnLXdhcm5pbmcgIidqMycgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCIgfQorfQor CisKK3ZvaWQgbm93YXJuX2FycmF5X2luaXQgKHZvaWQpCit7CisgIGludCBhMVs0XSA9IHsgMCB9 LCBhMls1XSwgYTNbNl0gPSB7IDAgfSwgYTRbN107CisKKyAgZjRwaSAoYTEsIGEyLCBhMywgYTQp OworfQorCit2b2lkIHdhcm5fYXJyYXlfMSAodm9pZCkKK3sKKyAgaW50IGExWzRdOyAgICAgICAg ICAgICAgICAgIC8vIHsgZGctbWVzc2FnZSAiJ2ExJyBkZWNsYXJlZCBoZXJlIiB9CisgIGludCBh Mls1XSwgYTNbNl0gPSB7IDAgfSwgYTRbN107CisKKyAgZjRwaSAoYTEsIGEyLCBhMywgYTQpOyAg ICAgIC8vIHsgZGctd2FybmluZyAiJ2ExJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIiB9Cit9 CisKK3ZvaWQgd2Fybl9hcnJheV8yICh2b2lkKQoreworICBpbnQgYTFbNF0gPSB7IDAgfSwgYTJb NV0sIGE0WzddOworICBpbnQgYTNbNl07ICAgICAgICAgICAgICAgICAgLy8geyBkZy1tZXNzYWdl ICInYTMnIGRlY2xhcmVkIGhlcmUiIH0KKworICBmNHBpIChhMSwgYTIsIGEzLCBhNCk7ICAgICAg Ly8geyBkZy13YXJuaW5nICInYTMnIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQiIH0KK30KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMzYuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMzYuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY0Mzc3ZDM4MGVlOQotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMzYuYwpAQCAtMCwwICsxLDIz OCBAQAorLyogUFIgbWlkZGxlLWVuZC8xMDEzOCAtIHdhcm4gZm9yIHVuaW5pdGlhbGl6ZWQgYXJy YXlzIHBhc3NlZCBhcyBjb25zdCoKKyAgIGFyZ3VtZW50cworICAgVmVyaWZ5IHRoYXQgcGFzc2lu ZyBwb2ludGVycyB0byB1bmluaXRpYWxpemVkIG9iamVjdHMgdG8gY29uc3QKKyAgIGFyZ3VtZW50 cyB0byBidWlsdC1pbnMgaXMgZGlhZ25vc2VkIHdoZXJlIGV4cGVjdGVkLgorICAgeyBkZy1kbyBj b21waWxlIH0KKyAgIHsgZGctb3B0aW9ucyAiLU8gLVdhbGwgLWZ0cml2aWFsLWF1dG8tdmFyLWlu aXQ9emVybyIgfQorICAgeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYWxsb2NhIH0gKi8K KwordHlwZWRlZiBfX1NJWkVfVFlQRV9fIHNpemVfdDsKKwordm9pZCogYWxsb2NhIChzaXplX3Qp Owordm9pZCogbWFsbG9jIChzaXplX3QpOwordm9pZCogcmVhbGxvYyAodm9pZCosIHNpemVfdCk7 CisKK3ZvaWQqIG1lbWNweSAodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOworY2hhciogc3Ry Y3B5IChjaGFyKiwgY29uc3QgY2hhciopOworc2l6ZV90IHN0cmxlbiAoY29uc3QgY2hhciopOwor Cit2b2lkIHNpbmsgKHZvaWQqKTsKKwordm9pZCBub3dhcm5fYXJyYXlfbWVtY3B5ICh2b2lkICpk LCB1bnNpZ25lZCBuKQoreworICBpbnQgYVsyXTsKKyAgLyogRGlhZ25vc2UgdGhpcz8gICovCisg IG1lbWNweSAoZCwgYSwgbiAvKiBOb24tY29uc3RhbnQgdG8gYXZvaWQgZm9sZGluZyBpbnRvIE1F TV9SRUYuICAqLyk7Cit9CisKK3ZvaWQgbm93YXJuX2FycmF5X3BsdXNfY3N0X21lbWNweSAodm9p ZCAqZCwgdW5zaWduZWQgbikKK3sKKyAgaW50IGFbM107CisgIC8qIERpYWdub3NlIHRoaXM/ICAq LworICBtZW1jcHkgKGQsIGEgKyAxLCBuKTsKK30KKwordm9pZCBub3dhcm5fYXJyYXlfcGx1c192 YXJfbWVtY3B5ICh2b2lkICpkLCB1bnNpZ25lZCBuLCBpbnQgaSkKK3sKKyAgaW50IGFbNF07Cisg IC8qIERpYWdub3NlIHRoaXM/ICAqLworICBtZW1jcHkgKGQsIGEgKyBpLCBuKTsKK30KKwordm9p ZCBub3dhcm5fYXJyYXlfYXNzaWduX21lbWNweSAoY2hhciAqZCwgdW5zaWduZWQgbikKK3sKKyAg aW50IGFbM107CisgIGFbMV0gPSAzOworICBtZW1jcHkgKGQsIGEsIG4pOworfQorCit2b2lkIG5v d2Fybl9hcnJheV9pbml0X21lbWNweSAoY2hhciAqZCwgdW5zaWduZWQgbikKK3sKKyAgaW50IGFb NF0gPSB7IDAgfTsKKyAgbWVtY3B5IChkLCBhLCBuKTsKK30KKwordm9pZCBub3dhcm5fYXJyYXlf Y29tcG91bmRfbWVtY3B5ICh2b2lkICpkLCB1bnNpZ25lZCBuKQoreworICBtZW1jcHkgKGQsIChp bnRbMl0peyAwIH0sIG4pOworfQorCit2b2lkIG5vd2Fybl9zdHJ1Y3RfYXNzaWduX21lbWNweSAo dm9pZCAqZCwgdW5zaWduZWQgbikKK3sKKyAgc3RydWN0IFMgeyBpbnQgYSwgYiwgYywgZDsgfSBz OworICBzLmIgPSAxOworICBzLmQgPSAyOworICBtZW1jcHkgKGQsICZzLCBuKTsKK30KKworCit2 b2lkIG5vd2Fybl9hcnJheV9pbml0X3N0cmNweSAoY2hhciAqZFtdLCB1bnNpZ25lZCBuKQorewor ICBjaGFyIGFbOF0gPSAiMDEyIjsKKworICBzdHJjcHkgKGRbMF0sIGEpOworICBzdHJjcHkgKGRb MV0sIGEgKyAxKTsKKyAgc3RyY3B5IChkWzFdLCBhICsgMik7CisgIHN0cmNweSAoZFsxXSwgYSAr IDMpOworICBzdHJjcHkgKGRbMV0sIGEgKyA0KTsKKyAgc3RyY3B5IChkWzFdLCBhICsgNSk7Cisg IHN0cmNweSAoZFsxXSwgYSArIDYpOworICBzdHJjcHkgKGRbMV0sIGEgKyA3KTsKK30KKworCit2 b2lkIG5vd2Fybl9hcnJheV9hc3NpZ25fc3RyY3B5IChjaGFyICpkW10sIHVuc2lnbmVkIG4pCit7 CisgIGNoYXIgYVs4XTsKKyAgYVswXSA9ICcwJzsKKyAgYVsxXSA9ICcxJzsKKyAgYVsyXSA9ICcy JzsKKyAgYVszXSA9ICdcMCc7CisKKyAgc3RyY3B5IChkWzBdLCBhKTsKKyAgc3RyY3B5IChkWzFd LCBhICsgMSk7CisgIHN0cmNweSAoZFsxXSwgYSArIDIpOworICBzdHJjcHkgKGRbMV0sIGEgKyAz KTsKK30KKwordm9pZCB3YXJuX2FycmF5X3BsdXNfY3N0X3N0cmNweSAoY2hhciAqZCwgdW5zaWdu ZWQgbikKK3sKKyAgY2hhciBhWzhdOworICBhWzBdID0gJzEnOworICBhWzFdID0gJzInOworICBh WzJdID0gJzMnOworICBhWzNdID0gJ1wwJzsKKworICBzdHJjcHkgKGQsIGEgKyA0KTsgICAgICAg ICAgLy8geyBkZy13YXJuaW5nICJcXFxbLVd1bmluaXRpYWxpemVkIiB9CisgIHN0cmNweSAoZCwg YSArIDUpOyAgICAgICAgICAvLyB7IGRnLXdhcm5pbmcgIlxcXFstV3VuaW5pdGlhbGl6ZWQiIH0K KyAgc3RyY3B5IChkLCBhICsgNik7ICAgICAgICAgIC8vIHsgZGctd2FybmluZyAiXFxcWy1XdW5p bml0aWFsaXplZCIgfQorICBzdHJjcHkgKGQsIGEgKyA3KTsgICAgICAgICAgLy8geyBkZy13YXJu aW5nICJcXFxbLVd1bmluaXRpYWxpemVkIiB9Cit9CisKK3ZvaWQgbm93YXJuX2FycmF5X3BsdXNf dmFyX3N0cmNweSAoY2hhciAqZCwgaW50IGkpCit7CisgIGNoYXIgYVs4XTsKKyAgYVswXSA9ICcx JzsKKyAgYVsxXSA9ICcyJzsKKyAgYVsyXSA9ICczJzsKKyAgYVszXSA9ICdcMCc7CisKKyAgc3Ry Y3B5IChkLCBhICsgaSk7Cit9CisKKworc2l6ZV90IG5vd2Fybl9hcnJheV9hc3NpZ25fc3RybGVu IChjb25zdCBjaGFyICpzKQoreworICBjaGFyIGFbOF07CisgIGFbMF0gPSBzWzBdOworICBhWzFd ID0gc1sxXTsKKyAgYVsyXSA9IHNbMl07CisgIGFbM10gPSBzWzNdOworCisgIHNpemVfdCBuID0g MDsKKworICBuICs9IHN0cmxlbiAoYSk7CisgIG4gKz0gc3RybGVuIChhICsgMSk7CisgIG4gKz0g c3RybGVuIChhICsgMik7CisgIG4gKz0gc3RybGVuIChhICsgMyk7CisgIHJldHVybiBuOworfQor CitzaXplX3Qgd2Fybl9hcnJheV9wbHVzX2NzdF9zdHJsZW4gKGNvbnN0IGNoYXIgKnMpCit7Cisg IGNoYXIgYVs4XTsKKyAgYVswXSA9IHNbMF07CisgIGFbMV0gPSBzWzFdOworICBhWzJdID0gc1sy XTsKKyAgYVszXSA9IHNbM107CisKKyAgcmV0dXJuIHN0cmxlbiAoYSArIDQpOyAgICAgIC8vIHsg ZGctd2FybmluZyAiXFxcWy1XdW5pbml0aWFsaXplZCIgfQorfQorCitzaXplX3Qgbm93YXJuX2Fy cmF5X3BsdXNfdmFyX3N0cmxlbiAoY29uc3QgY2hhciAqcywgaW50IGkpCit7CisgIGNoYXIgYVs4 XTsKKyAgYVswXSA9IHNbMF07CisgIGFbMV0gPSBzWzFdOworICBhWzJdID0gc1syXTsKKyAgYVsz XSA9IHNbM107CisKKyAgcmV0dXJuIHN0cmxlbiAoYSArIGkpOworfQorCisKK3NpemVfdCBub3dh cm5fYWxsb2NhX2Fzc2lnbl9zdHJsZW4gKGludCBpKQoreworICBjaGFyICpwID0gKGNoYXIqKWFs bG9jYSAoOCk7CisgIHBbaV0gPSAnXDAnOworICByZXR1cm4gc3RybGVuIChwKTsKK30KKworc2l6 ZV90IG5vd2Fybl9hbGxvY2FfZXNjYXBlX3N0cmxlbiAoaW50IGkpCit7CisgIGNoYXIgKnAgPSAo Y2hhciopYWxsb2NhICg4KTsKKyAgc2luayAocCk7CisgIHJldHVybiBzdHJsZW4gKHApOworfQor CitzaXplX3Qgd2Fybl9hbGxvY2Ffc3RybGVuICh2b2lkKQoreworICBjaGFyICpwID0gKGNoYXIq KWFsbG9jYSAoOCk7CisgIHJldHVybiBzdHJsZW4gKHApOyAgICAgICAgICAvLyB7IGRnLXdhcm5p bmcgIlxcXFstV3VuaW5pdGlhbGl6ZWQiIH0KK30KKworCitzaXplX3Qgbm93YXJuX21hbGxvY19h c3NpZ25fc3RybGVuIChpbnQgaSkKK3sKKyAgY2hhciAqcCA9IChjaGFyKiltYWxsb2MgKDgpOwor ICBwW2ldID0gJ1wwJzsKKyAgcmV0dXJuIHN0cmxlbiAocCk7Cit9CisKK3NpemVfdCBub3dhcm5f bWFsbG9jX2VzY2FwZV9zdHJsZW4gKGludCBpKQoreworICBjaGFyICpwID0gKGNoYXIqKW1hbGxv YyAoOCk7CisgIHNpbmsgKHApOworICByZXR1cm4gc3RybGVuIChwKTsKK30KKworc2l6ZV90IHdh cm5fbWFsbG9jX3N0cmxlbiAodm9pZCkKK3sKKyAgY2hhciAqcCA9IChjaGFyKiltYWxsb2MgKDgp OworICByZXR1cm4gc3RybGVuIChwKTsgICAgICAgICAgLy8geyBkZy13YXJuaW5nICJcXFxbLVd1 bmluaXRpYWxpemVkIiB9Cit9CisKKworc2l6ZV90IG5vd2Fybl9yZWFsbG9jX3N0cmxlbiAodm9p ZCAqcCkKK3sKKyAgY2hhciAqcSA9IChjaGFyKilyZWFsbG9jIChwLCA4KTsKKyAgcmV0dXJuIHN0 cmxlbiAocSk7Cit9CisKKworc2l6ZV90IG5vd2Fybl92bGFfYXNzaWduX3N0cmxlbiAoaW50IG4s IGludCBpKQoreworICBjaGFyIHZsYVtuXTsKKyAgdmxhW2ldID0gJ1wwJzsKKyAgcmV0dXJuIHN0 cmxlbiAodmxhKTsKK30KKworc2l6ZV90IG5vd2Fybl92bGFfc3RyY3B5X3N0cmxlbiAoaW50IG4s IGNvbnN0IGNoYXIgKnMsIGludCBpKQoreworICBjaGFyIHZsYVtuXTsKKyAgc3RyY3B5ICh2bGEs IHMpOworICByZXR1cm4gc3RybGVuICh2bGEgKyBpKTsKK30KKworc2l6ZV90IG5vd2Fybl92bGFf ZXNjYXBlX3N0cmxlbiAoaW50IG4sIGludCBpKQoreworICBjaGFyIHZsYVtuXTsKKyAgc2luayAo dmxhKTsKKyAgcmV0dXJuIHN0cmxlbiAodmxhKTsKK30KKworc2l6ZV90IHdhcm5fdmxhX3N0cmxl biAodW5zaWduZWQgbikKK3sKKyAgY2hhciB2bGFbbl07CisgIHJldHVybiBzdHJsZW4gKHZsYSk7 ICAgICAgICAvLyB7IGRnLXdhcm5pbmcgIlxcXFstV3VuaW5pdGlhbGl6ZWQiIH0KK30KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMzcuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMzcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmRhM2M5ZGIxODQwYQotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtMzcuYwpAQCAtMCwwICsxLDE1NCBA QAorLyogUFIgbWlkZGxlLWVuZC8xMDEzOCAtIHdhcm4gZm9yIHVuaW5pdGlhbGl6ZWQgYXJyYXlz IHBhc3NlZCBhcyBjb25zdCBhcmd1bWVudHMKKyAgIFZlcmlmeSB0aGF0IC1XdW5pbml0aWFsaXpl ZCBhbmQgLVdtYXliZS11bmluaXRpYWxpemVkIHRyaWdnZXIgKG9yIGRvbid0KQorICAgd2hlbiBw YXNzaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJ5IHJlZmVyZW5jZSB0byBmdW5jdGlvbnMg ZGVjbGFyZWQKKyAgIHdpdGggb3Igd2l0aG91dCBhdHRyaWJ1dGUgYWNjZXNzIGFuZCB3aXRoIChv ciB3aXRob3V0KSBjb25zdCBxdWFsaWZpZWQKKyAgIGFyZ3VtZW50cyBvZiBhcnJheSwgVkxBLCBv ciBwb2ludGVyIHR5cGVzLgorICAgeyBkZy1kbyBjb21waWxlIH0KKyAgIHsgZGctb3B0aW9ucyAi LU8yIC1XYWxsIC1mdHJhY2stbWFjcm8tZXhwYW5zaW9uPTAgLWZ0cml2aWFsLWF1dG8tdmFyLWlu aXQ9emVybyIgfSAqLworCisjZGVmaW5lIE5PTkUgICAgLyogbm9uZSAqLworI2RlZmluZSBSTygu Li4pIF9fYXR0cmlidXRlX18gKChhY2Nlc3MgKHJlYWRfb25seSwgX19WQV9BUkdTX18pKSkKKyNk ZWZpbmUgUlcoLi4uKSBfX2F0dHJpYnV0ZV9fICgoYWNjZXNzIChyZWFkX3dyaXRlLCBfX1ZBX0FS R1NfXykpKQorI2RlZmluZSBXTyguLi4pIF9fYXR0cmlidXRlX18gKChhY2Nlc3MgKHdyaXRlX29u bHksIF9fVkFfQVJHU19fKSkpCisjZGVmaW5lIFgoLi4uKSAgX19hdHRyaWJ1dGVfXyAoKGFjY2Vz cyAobm9uZSwgX19WQV9BUkdTX18pKSkKKworI2RlZmluZSBDT05DQVQoeCwgeSkgeCAjIyB5Cisj ZGVmaW5lIENBVCh4LCB5KSAgICBDT05DQVQgKHgsIHkpCisjZGVmaW5lIFVOSVEocGZ4KSAgICBD QVQgKHBmeCwgX19MSU5FX18pCisKK2V4dGVybiB2b2lkIHNpbmsgKHZvaWQqKTsKKworCisjZGVm aW5lIFQxKGF0dHIsIG5hbWUsIHR5cGUpCQkJXAorICB2b2lkIFVOSVEgKENBVCAodGVzdF8sIG5h bWUpKSh2b2lkKSB7CQlcCisgICAgZXh0ZXJuIGF0dHIgdm9pZCBVTklRIChuYW1lKSh0eXBlKTsJ CVwKKyAgICBpbnQgeDsJCQkJCVwKKyAgICBVTklRIChuYW1lKSgmeCk7CQkJCVwKKyAgICBzaW5r ICgmeCk7CQkJCQlcCisgIH0KKworI2RlZmluZSBUMihhdHRyLCBuYW1lLCB0eXBlcykJCQlcCisg IHZvaWQgVU5JUSAoQ0FUICh0ZXN0XywgbmFtZSkpKHZvaWQpIHsJCVwKKyAgICBleHRlcm4gYXR0 ciB2b2lkIFVOSVEgKG5hbWUpKHR5cGVzKTsJXAorICAgIGludCB4OwkJCQkJXAorICAgIFVOSVEg KG5hbWUpKDEsICZ4KTsJCQkJXAorICAgIHNpbmsgKCZ4KTsJCQkJCVwKKyAgfQorCisKK3R5cGVk ZWYgaW50IElBX1tdOwordHlwZWRlZiBjb25zdCBpbnQgQ0lBX1tdOworCitUMSAoTk9ORSwgICBm aWFfLCAgIElBXyk7CitUMSAoTk9ORSwgICBmY2lhXywgIENJQV8pOyAgICAvLyB7IGRnLXdhcm5p bmcgIlxcXFstV21heWJlLXVuaW5pdGlhbGl6ZWQiIH0KK1QxIChSTyAoMSksIGZyb2lhXywgSUFf KTsgICAgIC8vIHsgZGctd2FybmluZyAiXFxcWy1XdW5pbml0aWFsaXplZCIgfQorVDEgKFJXICgx KSwgZnJ3aWFfLCBJQV8pOyAgICAgLy8geyBkZy13YXJuaW5nICJcXFxbLVdtYXliZS11bmluaXRp YWxpemVkIiB9CitUMSAoV08gKDEpLCBmd29pYV8sIElBXyk7CitUMSAoWCAoMSksICBmeGlhXywg IElBXyk7CisKKwordHlwZWRlZiBpbnQgSUExWzFdOwordHlwZWRlZiBjb25zdCBpbnQgQ0lBMVsx XTsKKworVDEgKE5PTkUsICAgZmlhMSwgICBJQTEpOworVDEgKE5PTkUsICAgZmNpYTEsICBDSUEx KTsgICAgLy8geyBkZy13YXJuaW5nICJcXFxbLVdtYXliZS11bmluaXRpYWxpemVkIiB9CitUMSAo Uk8gKDEpLCBmcm9pYTEsIElBMSk7ICAgICAvLyB7IGRnLXdhcm5pbmcgIlxcXFstV3VuaW5pdGlh bGl6ZWQiIH0KK1QxIChSVyAoMSksIGZyd2lhMSwgSUExKTsgICAgIC8vIHsgZGctd2FybmluZyAi XFxcWy1XbWF5YmUtdW5pbml0aWFsaXplZCIgfQorVDEgKFdPICgxKSwgZndvaWExLCBJQTEpOwor VDEgKFggKDEpLCAgZnhpYTEsICBJQTEpOworCisKKyNkZWZpbmUgSUFSUzEgIGludFtyZXN0cmlj dCBzdGF0aWMgMV0KKyNkZWZpbmUgQ0lBUlMxIGNvbnN0IGludFtyZXN0cmljdCBzdGF0aWMgMV0K KworVDEgKE5PTkUsICAgZmlhcnMxLCAgIElBUlMxKTsKK1QxIChOT05FLCAgIGZjaWFyczEsICBD SUFSUzEpOy8vIHsgZGctd2FybmluZyAiXFxcWy1XbWF5YmUtdW5pbml0aWFsaXplZCIgfQorVDEg KFJPICgxKSwgZnJvaWFyczEsIElBUlMxKTsgLy8geyBkZy13YXJuaW5nICJcXFxbLVd1bmluaXRp YWxpemVkIiB9CitUMSAoUlcgKDEpLCBmcndpYXJzMSwgSUFSUzEpOyAvLyB7IGRnLXdhcm5pbmcg IlxcXFstV21heWJlLXVuaW5pdGlhbGl6ZWQiIH0KK1QxIChXTyAoMSksIGZ3b2lhcnMxLCBJQVJT MSk7CitUMSAoWCAoMSksICBmeGlhcnMxLCAgSUFSUzEpOworCisKKyNkZWZpbmUgSUFTMSAgaW50 W3N0YXRpYyAxXQorI2RlZmluZSBDSUFTMSBjb25zdCBpbnRbc3RhdGljIDFdCisKK1QxIChOT05F LCAgIGZpYXMxLCAgIElBUzEpOworVDEgKE5PTkUsICAgZmNpYXMxLCAgQ0lBUzEpOyAgIC8vIHsg ZGctd2FybmluZyAiXFxcWy1XbWF5YmUtdW5pbml0aWFsaXplZCIgfQorVDEgKFJPICgxKSwgZnJv aWFzMSwgSUFTMSk7ICAgIC8vIHsgZGctd2FybmluZyAiXFxcWy1XdW5pbml0aWFsaXplZCIgfQor VDEgKFJXICgxKSwgZnJ3aWFzMSwgSUFTMSk7ICAgIC8vIHsgZGctd2FybmluZyAiXFxcWy1XbWF5 YmUtdW5pbml0aWFsaXplZCIgfQorVDEgKFdPICgxKSwgZndvaWFzMSwgSUFTMSk7CitUMSAoWCAo MSksICBmeGlhczEsICBJQVMxKTsKKworCisjZGVmaW5lIElBWCAgaW50WypdCisjZGVmaW5lIENJ QVggY29uc3QgaW50WypdCisKK1QxIChOT05FLCAgIGZpYXgsICAgSUFYKTsKK1QxIChOT05FLCAg IGZjaWF4LCAgQ0lBWCk7ICAgIC8vIHsgZGctd2FybmluZyAiXFxcWy1XbWF5YmUtdW5pbml0aWFs aXplZCIgfQorVDEgKFJPICgxKSwgZnJvaWF4LCBJQVgpOyAgICAgLy8geyBkZy13YXJuaW5nICJc XFxbLVd1bmluaXRpYWxpemVkIiB9CitUMSAoUlcgKDEpLCBmcndpYXgsIElBWCk7ICAgICAvLyB7 IGRnLXdhcm5pbmcgIlxcXFstV21heWJlLXVuaW5pdGlhbGl6ZWQiIH0KK1QxIChXTyAoMSksIGZ3 b2lheCwgSUFYKTsKK1QxIChYICgxKSwgIGZ4aWF4LCAgSUFYKTsKKworCisjZGVmaW5lIElBTiAg aW50IG4sIGludFtuXQorI2RlZmluZSBDSUFOIGludCBuLCBjb25zdCBpbnRbbl0KKworVDIgKE5P TkUsICAgICAgZmlhbiwgICBJQU4pOworVDIgKE5PTkUsICAgICAgZmNpYW4sICBDSUFOKTsgLy8g eyBkZy13YXJuaW5nICJcXFxbLVdtYXliZS11bmluaXRpYWxpemVkIiB9CitUMiAoUk8gKDIsIDEp LCBmcm9pYW4sIElBTik7ICAvLyB7IGRnLXdhcm5pbmcgIlxcXFstV3VuaW5pdGlhbGl6ZWQiIH0K K1QyIChSVyAoMiwgMSksIGZyd2lhbiwgSUFOKTsgIC8vIHsgZGctd2FybmluZyAiXFxcWy1XbWF5 YmUtdW5pbml0aWFsaXplZCIgfQorVDIgKFdPICgyLCAxKSwgZndvaWFuLCBJQU4pOworVDIgKFgg KDIsIDEpLCAgZnhpYW4sICBJQU4pOworCisKK3R5cGVkZWYgaW50KiBJUDsKK3R5cGVkZWYgY29u c3QgaW50KiBDSVA7CisKK1QxIChOT05FLCAgIGZpcCwgICBJUCk7CitUMSAoTk9ORSwgICBmY2lw LCAgQ0lQKTsgICAgIC8vIHsgZGctd2FybmluZyAiXFxcWy1XbWF5YmUtdW5pbml0aWFsaXplZCIg fQorVDEgKFJPICgxKSwgZnJvaXAsIElQKTsgICAgICAvLyB7IGRnLXdhcm5pbmcgIlxcXFstV3Vu aW5pdGlhbGl6ZWQiIH0KK1QxIChSVyAoMSksIGZyd2lwLCBJUCk7ICAgICAgLy8geyBkZy13YXJu aW5nICJcXFxbLVdtYXliZS11bmluaXRpYWxpemVkIiB9CitUMSAoV08gKDEpLCBmd29pcCwgSVAp OworVDEgKFggKDEpLCAgZnhpcCwgIElQKTsKKworCisvKiBWZXJpZnkgdGhhdCB0aGUgbm90ZXMg cHJpbnRlZCBhZnRlciB0aGUgd2FybmluZyBtZW50aW9uIGF0dHJpYnV0ZQorICAgYWNjZXNzIG9u bHkgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGV4cGxpY2l0bHkgdXNlZCBpbiB0aGUgZGVjbGFyYXRp b24KKyAgIGFuZCBub3Qgb3RoZXJ3aXNlLiAgKi8KKwordm9pZCB0ZXN0X25vdGVfY3N0X3Jlc3Ry aWN0ICh2b2lkKQoreworICBleHRlcm4gdm9pZAorICAgIGZjY2FyIChjb25zdCBjaGFyW3Jlc3Ry aWN0XSk7ICAgLy8geyBkZy1tZXNzYWdlICJieSBhcmd1bWVudCAxIG9mIHR5cGUgJ2NvbnN0IGNo YXJcXFxbcmVzdHJpY3RdJyB0byAnZmNjYXInIiAibm90ZSIgfQorCisgIGNoYXIgYVsxXTsgICAg ICAgICAgICAgICAgICAvLyB7IGRnLW1lc3NhZ2UgIidhJyBkZWNsYXJlZCBoZXJlIiAibm90ZSIg fQorICBmY2NhciAoYSk7ICAgICAgICAgICAgICAgICAgLy8geyBkZy13YXJuaW5nICInYScgbWF5 IGJlIHVzZWQgdW5pbml0aWFsaXplZCIgfQorfQorCit2b2lkIHRlc3Rfbm90ZV92bGEgKGludCBu KQoreworICBleHRlcm4gdm9pZAorICAgIGZjY3ZsYSAoY29uc3QgY2hhcltuXSk7ICAgLy8geyBk Zy1tZXNzYWdlICJieSBhcmd1bWVudCAxIG9mIHR5cGUgJ2NvbnN0IGNoYXJcXFxbbl0nIHRvICdm Y2N2bGEnIiAibm90ZSIgfQorCisgIGNoYXIgYVsyXTsgICAgICAgICAgICAgICAgICAvLyB7IGRn LW1lc3NhZ2UgIidhJyBkZWNsYXJlZCBoZXJlIiAibm90ZSIgfQorICBmY2N2bGEgKGEpOyAgICAg ICAgICAgICAgICAgLy8geyBkZy13YXJuaW5nICInYScgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXpl ZCIgfQorfQorCit2b2lkIHRlc3Rfbm90ZV9ybyAodm9pZCkKK3sKKyAgZXh0ZXJuIFJPICgxKSB2 b2lkCisgICAgZnJvY2FyIChjaGFyW3Jlc3RyaWN0XSk7ICAvLyB7IGRnLW1lc3NhZ2UgImluIGEg Y2FsbCB0byAnZnJvY2FyJyBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSAnYWNjZXNzIFxcXChyZWFk X29ubHksIDFcXFwpJyIgIm5vdGUiIH0KKworICBjaGFyIGFbM107ICAgICAgICAgICAgICAgICAg Ly8geyBkZy1tZXNzYWdlICInYScgZGVjbGFyZWQgaGVyZSIgIm5vdGUiIH0KKyAgZnJvY2FyIChh KTsgICAgICAgICAgICAgICAgIC8vIHsgZGctd2FybmluZyAiJ2EnIGlzIHVzZWQgdW5pbml0aWFs aXplZCIgfQorfQorCit2b2lkIHRlc3Rfbm90ZV9ydyAodm9pZCkKK3sKKyAgZXh0ZXJuIFJXICgx KSB2b2lkCisgICAgZnJ3Y2FyIChjaGFyW3Jlc3RyaWN0XSk7ICAvLyB7IGRnLW1lc3NhZ2UgImlu IGEgY2FsbCB0byAnZnJ3Y2FyJyBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSAnYWNjZXNzIFxcXChy ZWFkX3dyaXRlLCAxXFxcKSciICJub3RlIiB9CisKKyAgY2hhciBhWzRdOyAgICAgICAgICAgICAg ICAgIC8vIHsgZGctbWVzc2FnZSAiJ2EnIGRlY2xhcmVkIGhlcmUiICJub3RlIiB9CisgIGZyd2Nh ciAoYSk7ICAgICAgICAgICAgICAgICAvLyB7IGRnLXdhcm5pbmcgIidhJyBtYXkgYmUgdXNlZCB1 bmluaXRpYWxpemVkIiB9Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRv LWluaXQtdW5pbml0LTQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQt NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDgyYzgzN2NhY2Iy Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5p dC00LmMKQEAgLTAsMCArMSw1MiBAQAorLyogU3B1cmlvdXMgdW5pbml0IHZhcmlhYmxlIHdhcm5p bmdzLCBjYXNlIDQuCisgICBTaW1wbGlmaWVkIHZlcnNpb24gb2YgY3BwZXhwLmMgKGNwcF9wYXJz ZV9leHByKS4KKworICAgVGhpcyBvbmUgaXMgcmVhbGx5IGZyYWdpbGUsIGl0IGdldHMgaXQgcmln aHQgaWYgeW91IHRha2Ugb3V0IGNhc2UKKyAgIDEsIG9yIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgcmVw bGFjZWQgYnkgYW4gaW50LCBvciBpZiB0aGUgc3RydWN0dXJlCisgICBoYXMgZmV3ZXIgbWVtYmVy cyAoISkgKi8KKworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8g LVd1bmluaXRpYWxpemVkIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworZXh0 ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOworCitzdHJ1Y3Qgb3BlcmF0aW9uIHsKKyAgICBzaG9ydCBv cDsKKyAgICBjaGFyIHJwcmlvOworICAgIGNoYXIgZmxhZ3M7CisgICAgY2hhciB1bnNpZ25lZHA7 CisgICAgbG9uZyB2YWx1ZTsKK307CisKK2V4dGVybiBzdHJ1Y3Qgb3BlcmF0aW9uIGNwcF9sZXgg KHZvaWQpOworCit2b2lkCitjcHBfcGFyc2VfZXhwciAodm9pZCkKK3sKKyAgaW50IHJwcmlvOyAv KiB7IGRnLWJvZ3VzICJycHJpbyIgInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZyBQUjE5 ODMzIiB9ICovCisgIHN0cnVjdCBvcGVyYXRpb24gb3A7CisKKyAgZm9yICg7OykKKyAgICB7Cisg ICAgICBvcCA9IGNwcF9sZXggKCk7CisKKyAgICAgIHN3aXRjaCAob3Aub3ApCisJeworCWNhc2Ug MDoKKwkgIGJyZWFrOworCWNhc2UgMToKKwkgIHJldHVybjsKKwljYXNlIDI6CisJICBycHJpbyA9 IDE7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgcmV0dXJuOworCX0KKworICAgICAgaWYgKG9w Lm9wID09IDApCisJcmV0dXJuOworCisgICAgICBpZiAocnByaW8gIT0gMSkKKwlhYm9ydCgpOwor ICAgIH0KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmlu aXQtNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC01LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZGE4MWM5MTJiZGQKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTUuYwpAQCAt MCwwICsxLDM5IEBACisvKiBTcHVyaW91cyB1bmluaXRpYWxpemVkLXZhcmlhYmxlIHdhcm5pbmdz LiAgKi8KKy8qIERpc2FibGUganVtcCB0aHJlYWRpbmcsIGV0YyB0byB0ZXN0IGNvbXBpbGVyIGFu YWx5c2lzLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P IC1XdW5pbml0aWFsaXplZCAtZm5vLXRyZWUtZGNlIC1mbm8tdHJlZS12cnAgLWZuby10cmVlLWRv bWluYXRvci1vcHRzIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworZXh0ZXJu IHZvaWQgdXNlKGludCk7CitleHRlcm4gdm9pZCBmb28odm9pZCk7CisKK3ZvaWQKK2Z1bmMxKGlu dCBjb25kKQoreworICAgIGludCB4OyAgLyogeyBkZy1ib2d1cyAieCIgInVuaW5pdGlhbGl6ZWQg dmFyaWFibGUgd2FybmluZyIgfSAqLworCisgICAgaWYoY29uZCkKKwl4ID0gMTsKKworICAgIGZv bygpOworCisgICAgaWYoY29uZCkKKwl1c2UoeCk7Cit9CisKK3ZvaWQKK2Z1bmMyIChpbnQgY29u ZCkKK3sKKyAgICBpbnQgeDsgIC8qIHsgZGctYm9ndXMgIngiICJ1bmluaXRpYWxpemVkIHZhcmlh YmxlIHdhcm5pbmciIH0gKi8KKyAgICBpbnQgZmxhZyA9IDA7CisKKyAgICBpZihjb25kKQorICAg IHsKKwl4ID0gMTsKKwlmbGFnID0gMTsKKyAgICB9CisKKyAgICBmb28oKTsKKworICAgIGlmKGZs YWcpCisJdXNlKHgpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1p bml0LXVuaW5pdC02LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LTYu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU2Y2JhNGVmMjJjMAot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQt Ni5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qIFNwdXJpb3VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUg d2FybmluZ3MuCisgICBUaGlzIG9uZSBpbnNwaXJlZCBieSBqYXZhL2NsYXNzLmM6YnVpbGRfdXRm OF9yZWYuICAqLworCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICIt TyAtV3VuaW5pdGlhbGl6ZWQgLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyIgfSAqLworCisj aW5jbHVkZSA8c3RkZGVmLmg+CisKK3N0cnVjdCB0cmVlCit7CisgICAgc3RydWN0IHRyZWUgKmNh cjsKKyAgICBzdHJ1Y3QgdHJlZSAqY2RyOworICAgIGludCB0eXBlLCBkYXRhOworfTsKKworZXh0 ZXJuIHZvaWQgKm1hbGxvYyhzaXplX3QpOworCisjZGVmaW5lIElOVEVHRVJfVCAxCisjZGVmaW5l IFBUUl9UCSAgMgorCisjZGVmaW5lIEFQUEVORChUUkVFLCBMQVNULCBUWVBFLCBWQUxVRSkJCQkJ XAorZG8gewkJCQkJCQkJXAorICAgICBzdHJ1Y3QgdHJlZSAqdG1wID0gbWFsbG9jIChzaXplb2Yg KHN0cnVjdCB0cmVlKSk7CQlcCisgICAgIHRtcC0+Y2FyID0gMDsgdG1wLT5jZHIgPSAwOyB0bXAt PnR5cGUgPSBUWVBFOwkJXAorICAgICB0bXAtPmRhdGEgPSBWQUxVRTsJCQkJCQlcCisgICAgIGlm IChUUkVFLT5jYXIpCQkJCQkJXAorCSBMQVNULT5jZHIgPSB0bXA7CQkJCQlcCisgICAgIGVsc2UJ CQkJCQkJXAorCSBUUkVFLT5jYXIgPSB0bXA7CQkJCQlcCisgICAgIExBU1QgPSB0bXA7CQkJCQkJ XAorfSB3aGlsZSgwKQorIAorc3RydWN0IHRyZWUgKgorbWFrZV9zb21ldGhpbmcoaW50IGEsIGlu dCBiLCBpbnQgYykKK3sKKyAgICBzdHJ1Y3QgdHJlZSAqcnY7CisgICAgc3RydWN0IHRyZWUgKmZp ZWxkOworCisgICAgcnYgPSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IHRyZWUpKTsKKyAgICBydi0+ Y2FyID0gMDsKKworICAgIEFQUEVORChydiwgZmllbGQsIElOVEVHRVJfVCwgYSk7ICAvKiB7IGRn LWJvZ3VzICJmaWVsZCIgInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZyIgfSAqLworICAg IEFQUEVORChydiwgZmllbGQsIFBUUl9ULCBiKTsKKyAgICBBUFBFTkQocnYsIGZpZWxkLCBJTlRF R0VSX1QsIGMpOworCisgICAgcmV0dXJuIHJ2OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC04LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRv LWluaXQtdW5pbml0LTguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjZjMjk4ODcwYzY3OQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1 dG8taW5pdC11bmluaXQtOC5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qIFVuaW5pdGlhbGl6ZWQgdmFy aWFibGUgd2FybmluZyB0ZXN0cy4uLgorICAgSW5zcGlyZWQgYnkgcGFydCBvZiBvcHRhYnMuYzpl eHBhbmRfYmlub3AuCisgICBNYXkgYmUgdGhlIHNhbWUgYXMgdW5pbml0LTEuYy4gICovCisKKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XdW5pbml0aWFsaXpl ZCAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKKyNpbmNsdWRlIDxsaW1pdHMu aD4KKwordm9pZAorYWRkX2JpZ251bXMgKGludCAqb3V0LCBpbnQgKngsIGludCAqeSkKK3sKKyAg ICBpbnQgcCwgc3VtOworICAgIGludCBjYXJyeTsgLyogeyBkZy1ib2d1cyAiY2FycnkiICJ1bmlu aXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmciIH0gKi8KKworICAgIHAgPSAwOworICAgIGZvciAo OyAqeDsgeCsrLCB5KyssIG91dCsrLCBwKyspCisgICAgeworCWlmIChwKQorCSAgICBzdW0gPSAq eCArICp5ICsgY2Fycnk7CisJZWxzZQorCSAgICBzdW0gPSAqeCArICp5OworCisJaWYgKHN1bSA8 IDApCisJeworCSAgICBjYXJyeSA9IDE7CisJICAgIHN1bSAtPSBJTlRfTUFYOworCX0KKwllbHNl CisJICAgIGNhcnJ5ID0gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9hdXRvLWluaXQtdW5pbml0LTkuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5p dC11bmluaXQtOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWQ2 NTQ5M2JkZTJhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1p bml0LXVuaW5pdC05LmMKQEAgLTAsMCArMSw0MiBAQAorLyogU3B1cmlvdXMgdW5pbml0aWFsaXpl ZCB2YXJpYWJsZSB3YXJuaW5ncy4gIFNsaWdodCB2YXJpYW50IG9uIHRoZQorICAgZG9jdW1lbnRl ZCBjYXNlLCBpbnNwaXJlZCBieSByZWctc3RhY2suYzpyZWNvcmRfYXNtX3JlZ19saWZlLiAgKi8K KworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8gLVd1bmluaXRp YWxpemVkIC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IGFsbG9jYSB9ICovCisKK3N0cnVjdCBmb28KK3sKKyAgICBpbnQg dHlwZTsKKyAgICBzdHJ1Y3QgZm9vICpjYXI7CisgICAgc3RydWN0IGZvbyAqY2RyOworICAgIGNo YXIgKmRhdGE7CisgICAgaW50IGRhdGEyOworfTsKKworZXh0ZXJuIHZvaWQgdXNlKHN0cnVjdCBm b28gKik7CisKKyNkZWZpbmUgQ0xPQkJFUiA2CisjZGVmaW5lIFBBUkFMTEVMIDMKKwordm9pZAor ZnVuYyhzdHJ1Y3QgZm9vICpsaXN0LCBpbnQgY291bnQpCit7CisgICAgaW50IG5fY2xvYmJlcnMg PSAwOworICAgIGludCBpOworICAgIHN0cnVjdCBmb28gKipjbG9iX2xpc3Q7ICAgLyogeyBkZy1i b2d1cyAiY2xvYl9saXN0IiAidW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIiB9ICovCisK KyAgICBpZihsaXN0WzBdLnR5cGUgPT0gUEFSQUxMRUwpCisgICAgeworCWNsb2JfbGlzdCA9IF9f YnVpbHRpbl9hbGxvY2EoY291bnQgKiBzaXplb2Yoc3RydWN0IGZvbyAqKSk7CisJCisJZm9yKGkg PSAxOyBpIDwgY291bnQ7IGkrKykKKwl7CisJICAgIGlmKGxpc3RbaV0udHlwZSA9PSBDTE9CQkVS KQorCQljbG9iX2xpc3Rbbl9jbG9iYmVycysrXSA9ICZsaXN0W2ldOworCX0KKyAgICB9CisKKyAg ICBmb3IoaSA9IDA7IGkgPCBuX2Nsb2JiZXJzOyBpKyspCisJdXNlKGNsb2JfbGlzdFtpXSk7Cit9 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0LUEuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmluaXQtQS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDFmY2Y1OWY0NTA0Ci0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5pdC1BLmMKQEAgLTAsMCArMSwx MTcgQEAKKy8qIEluc3BpcmVkIGJ5IHBhcnQgb2YgamF2YS9wYXJzZS55LgorICAgTWF5IGJlIGEg cmVhbCBidWcgaW4gQ1NFLiAqLworCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1v cHRpb25zICItTzIgLVdhbGwgLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyIgfSAqLworCitz dHJ1Y3QgdHJlZQoreworICAgIHN0cnVjdCB0cmVlICpjYXIsICpjZHIsICp3Zmw7CisgICAgaW50 IGNvZGU7CisgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IHJlbnA6MTsKKyAgICAgIHVuc2lnbmVk IGludCBydG5wOjE7CisgICAgICB1bnNpZ25lZCBpbnQgcnBucDoxOyB9IGZsYWdzOworfTsKK3R5 cGVkZWYgc3RydWN0IHRyZWUgKnRyZWU7CisjZGVmaW5lIE5VTExfVFJFRSAoKHRyZWUpMCkKKwor LyogQ29kZXMgKi8KK2VudW0KK3sKKyAgICBDQUxMX0VYUFIsIE5FV19BUlJBWV9FWFBSLCBORVdf Q0xBU1NfRVhQUiwgQ09OVkVSVF9FWFBSLAorICAgIEFSUkFZX1JFRiwgQ09ORElUSU9OQUxfRVhQ UiwgU1RSSU5HX0NTVCwgRVhQUl9XSVRIX0ZJTEVfTE9DQVRJT04KK307CisKKy8qIEZsYWdzICov CisjZGVmaW5lIFJFU09MVkVfRVhQUkVTU0lPTl9OQU1FX1AodCkgKCh0KS0+ZmxhZ3MucmVucCkK KyNkZWZpbmUgUkVTT0xWRV9UWVBFX05BTUVfUCh0KSAoKHQpLT5mbGFncy5ydG5wKQorI2RlZmlu ZSBSRVNPTFZFX1BBQ0tBR0VfTkFNRV9QKHQpICgodCktPmZsYWdzLnJwbnApCisKKy8qIE1hY3Jv cyAqLworI2RlZmluZSBFWFBSX1dGTF9RVUFMSUZJQ0FUSU9OKHQpICgodCktPndmbCkKKyNkZWZp bmUgUVVBTF9XRkwodCkgKCh0KS0+d2ZsKQorI2RlZmluZSBFWFBSX1dGTF9OT0RFKHQpICgodCkt PndmbCkKKyNkZWZpbmUgVFJFRV9DT0RFKHQpICgodCktPmNvZGUpCisjZGVmaW5lIFRSRUVfT1BF UkFORCh0LHgpICgodCktPmNhcikKKyNkZWZpbmUgQ0xBU1NUWVBFX1NVUEVSKHQpICgodCktPmNh cikKKyNkZWZpbmUgSURFTlRJRklFUl9MT0NBTF9WQUxVRSh0KSAoKHQpLT5jYXIpCisjZGVmaW5l IFRSRUVfQ0hBSU4odCkgKCh0KS0+Y2RyKQorI2RlZmluZSBRVUFMX1JFU09MVVRJT04odCkgKCh0 KS0+Y2RyKQorCitleHRlcm4gdHJlZSBjdXJyZW50X2NsYXNzLCB0aGlzX2lkZW50aWZpZXJfbm9k ZTsKK2V4dGVybiB0cmVlIHN1cGVyX2lkZW50aWZpZXJfbm9kZSwgbGVuZ3RoX2lkZW50aWZpZXJf bm9kZTsKKwordHJlZSByZXNvbHZlX2FuZF9sYXlvdXQgKHRyZWUsIHRyZWUpOwordHJlZSBsb29r dXBfZmllbGRfd3JhcHBlciAodHJlZSwgdHJlZSk7CisKK3ZvaWQKK3F1YWxpZnlfYW1iaWd1b3Vz X25hbWUgKGlkKQorICAgICB0cmVlIGlkOworeworICB0cmVlIHF1YWwsIHF1YWxfd2ZsLCBkZWNs OworICB0cmVlIG5hbWU7CSAvKiB7IGRnLWJvZ3VzICJuYW1lIiAidW5pbml0aWFsaXplZCB2YXJp YWJsZSB3YXJuaW5nIiB9ICovCisgIHRyZWUgcHRyX3R5cGU7IC8qIHsgZGctYm9ndXMgInB0cl90 eXBlIiAidW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nIiB9ICovCisgIGludCBhZ2Fpbiwg bmV3X2FycmF5X2ZvdW5kID0gMDsKKyAgaW50IHN1cGVyX2ZvdW5kID0gMCwgdGhpc19mb3VuZCA9 IDA7CisKKyAgcXVhbCA9IEVYUFJfV0ZMX1FVQUxJRklDQVRJT04gKGlkKTsKKyAgZG8geworICAg IHF1YWxfd2ZsID0gUVVBTF9XRkwgKHF1YWwpOworICAgIHN3aXRjaCAoVFJFRV9DT0RFIChxdWFs X3dmbCkpCisgICAgICB7CisgICAgICBjYXNlIENBTExfRVhQUjoKKwlxdWFsX3dmbCA9IFRSRUVf T1BFUkFORCAocXVhbF93ZmwsIDApOworCWlmIChUUkVFX0NPREUgKHF1YWxfd2ZsKSAhPSBFWFBS X1dJVEhfRklMRV9MT0NBVElPTikKKwkgIHsKKwkgICAgcXVhbCA9IEVYUFJfV0ZMX1FVQUxJRklD QVRJT04gKHF1YWxfd2ZsKTsKKwkgICAgcXVhbF93ZmwgPSBRVUFMX1dGTCAocXVhbCk7CisJICB9 CisJYnJlYWs7CisgICAgICBjYXNlIE5FV19BUlJBWV9FWFBSOgorCXF1YWwgPSBUUkVFX0NIQUlO IChxdWFsKTsKKwluZXdfYXJyYXlfZm91bmQgPSBhZ2FpbiA9IDE7CisJY29udGludWU7CisgICAg ICBjYXNlIE5FV19DTEFTU19FWFBSOgorICAgICAgY2FzZSBDT05WRVJUX0VYUFI6CisJcXVhbF93 ZmwgPSBUUkVFX09QRVJBTkQgKHF1YWxfd2ZsLCAwKTsKKwlicmVhazsKKyAgICAgIGNhc2UgQVJS QVlfUkVGOgorCXdoaWxlIChUUkVFX0NPREUgKHF1YWxfd2ZsKSA9PSBBUlJBWV9SRUYpCisJICBx dWFsX3dmbCA9IFRSRUVfT1BFUkFORCAocXVhbF93ZmwsIDApOworCWJyZWFrOworICAgICAgZGVm YXVsdDoKKwlicmVhazsKKyAgICAgIH0KKworICAgIG5hbWUgPSBFWFBSX1dGTF9OT0RFIChxdWFs X3dmbCk7CisgICAgcHRyX3R5cGUgPSBjdXJyZW50X2NsYXNzOworICAgIGFnYWluID0gMDsKKwor ICB9IHdoaWxlIChhZ2Fpbik7CisKKyAgLyogSWYgeW91IHB1dCBzdHJhaWdodGZvcndhcmQgdXNl cyBvZiBuYW1lIGFuZCBwdHJfdHlwZSBoZXJlCisgICAgIGluc3RlYWQgb2YgdGhlIGlmLWVsc2Ug c2VxdWVuY2UgYmVsb3csIHRoZSB3YXJuaW5ncyBnbyBhd2F5LgorICAgICBUaGVyZWZvcmUgSSBz dXNwZWN0IGEgcmVhbCBidWcuICovCisgIAorICBpZiAoIXRoaXNfZm91bmQgJiYgIXN1cGVyX2Zv dW5kICYmIChkZWNsID0gSURFTlRJRklFUl9MT0NBTF9WQUxVRSAobmFtZSkpKQorICAgIHsKKyAg ICAgIFJFU09MVkVfRVhQUkVTU0lPTl9OQU1FX1AgKHF1YWxfd2ZsKSA9IDE7CisgICAgICBRVUFM X1JFU09MVVRJT04gKHF1YWwpID0gZGVjbDsKKyAgICB9CisgIGVsc2UgaWYgKChkZWNsID0gbG9v a3VwX2ZpZWxkX3dyYXBwZXIgKHB0cl90eXBlLCBuYW1lKSkKKwkgICB8fCAobmV3X2FycmF5X2Zv dW5kICYmIG5hbWUgPT0gbGVuZ3RoX2lkZW50aWZpZXJfbm9kZSkpCisgICAgeworICAgICAgUkVT T0xWRV9FWFBSRVNTSU9OX05BTUVfUCAocXVhbF93ZmwpID0gMTsKKyAgICAgIFFVQUxfUkVTT0xV VElPTiAocXVhbCkgPSAobmV3X2FycmF5X2ZvdW5kID8gTlVMTF9UUkVFIDogZGVjbCk7CisgICAg fQorICBlbHNlIGlmICgoZGVjbCA9IHJlc29sdmVfYW5kX2xheW91dCAobmFtZSwgTlVMTF9UUkVF KSkpCisgICAgeworICAgICAgUkVTT0xWRV9UWVBFX05BTUVfUCAocXVhbF93ZmwpID0gMTsKKyAg ICAgIFFVQUxfUkVTT0xVVElPTiAocXVhbCkgPSBkZWNsOworICAgIH0KKyAgZWxzZSBpZiAoVFJF RV9DT0RFIChRVUFMX1dGTCAocXVhbCkpID09IENBTExfRVhQUgorCSAgIHx8IFRSRUVfQ09ERSAo UVVBTF9XRkwgKHF1YWwpKSA9PSBBUlJBWV9SRUYpCisgICAgUkVTT0xWRV9FWFBSRVNTSU9OX05B TUVfUCAocXVhbF93ZmwpID0gMTsKKyAgZWxzZSAKKyAgICBSRVNPTFZFX1BBQ0tBR0VfTkFNRV9Q IChxdWFsX3dmbCkgPSAxOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0 by1pbml0LXVuaW5pdC1CLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5pbml0 LUIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBiMjgzNzEyNzIw OQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5pdC11bmlu aXQtQi5jCkBAIC0wLDAgKzEsMTUgQEAKKy8qIE9yaWdpbjogUFIgYy8xNzkgZnJvbSBHcmF5IFdh dHNvbiA8Z3JheUAyNTYuY29tPiwgYWRhcHRlZCBhcyBhIHRlc3RjYXNlCisgICBieSBKb3NlcGgg TXllcnMgPGpzbTI4QGNhbS5hYy51az4uICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yIC1XdW5pbml0aWFsaXplZCAtZnRyaXZpYWwtYXV0by12YXItaW5p dD16ZXJvIiB9ICovCitleHRlcm4gdm9pZCBmb28gKGludCAqKTsKK2V4dGVybiB2b2lkIGJhciAo aW50KTsKKwordm9pZAorYmF6ICh2b2lkKQoreworICBpbnQgaTsKKyAgaWYgKGkpIC8qIHsgZGct d2FybmluZyAiaXMgdXNlZCB1bmluaXRpYWxpemVkIiAidW5pbml0IGkgd2FybmluZyIgfSAqLwor ICAgIGJhciAoaSk7CisgIGZvbyAoJmkpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvYXV0by1pbml0LXVuaW5pdC1DLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWlu aXQtdW5pbml0LUMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE0 YWE2MjliZjkzMAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8t aW5pdC11bmluaXQtQy5jCkBAIC0wLDAgKzEsMjEgQEAKKy8qIFNwdXJpb3VzIHVuaW5pdGlhbGl6 ZWQgdmFyaWFibGUgd2FybmluZywgaW5zcGlyZWQgYnkgbGliZ2NjMi5jLiAgKi8KKy8qIHsgZGct ZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XdW5pbml0aWFsaXplZCAtZnRy aXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKKy8qIE5vdCBhbGwgcGxhdGZvcm1zIHN1 cHBvcnQgVEltb2RlIGludGVnZXJzLiAgKi8KKyNpZiBkZWZpbmVkKF9fTFA2NF9fKSAmJiAhZGVm aW5lZChfX2hwcGFfXykKK3R5cGVkZWYgaW50IFRJdHlwZSBfX2F0dHJpYnV0ZV9fICgobW9kZSAo VEkpKSk7CisjZWxzZQordHlwZWRlZiBsb25nIFRJdHlwZTsKKyNlbmRpZgorCisKK1RJdHlwZQor X19zdWJ2ZGkzIChUSXR5cGUgYSwgVEl0eXBlIGIpCit7CisgIFRJdHlwZSB3OworICAKKyAgdyA9 IGEgLSBiOworICAKKyAgcmV0dXJuIHc7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9hdXRvLWluaXQtdW5pbml0LUguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1dG8taW5p dC11bmluaXQtSC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzFl MmUyZDY4ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1p bml0LXVuaW5pdC1ILmMKQEAgLTAsMCArMSwzMyBAQAorLyogUFIgMTQyMDQgKi8KKy8qIHsgZGct ZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1XYWxsIC1XZXJyb3IgLWZ0cml2 aWFsLWF1dG8tdmFyLWluaXQ9emVybyIgfSAqLworCisjaWYgZGVmaW5lZCBfX2FscGhhX18KKyMg ZGVmaW5lIEFTTSBfX2FzbV9fKCIkMzAiKQorI2VsaWYgZGVmaW5lZCBfX2kzODZfXworIyBkZWZp bmUgQVNNIF9fYXNtX18oImVzcCIpCisjZWxpZiBkZWZpbmVkIChfX3Bvd2VycGNfXykgfHwgZGVm aW5lZCAoX19QUENfXykgfHwgZGVmaW5lZCAoX19wcGNfXykgfHwgZGVmaW5lZCAoX1BPV0VSKQor IyBkZWZpbmUgQVNNIF9fYXNtX18oInIxIikKKyNlbGlmIGRlZmluZWQgX19zMzkwX18KKyMgZGVm aW5lIEFTTSBfX2FzbV9fKCJyMTUiKQorI2VsaWYgZGVmaW5lZCBfX21pcHMKKyMgZGVmaW5lIEFT TSBfX2FzbV9fKCIkc3AiKQorI2VsaWYgZGVmaW5lZCBfX3NwYXJjX18KKyMgZGVmaW5lIEFTTSBf X2FzbV9fKCJzcCIpCisjZWxpZiBkZWZpbmVkIF9faWE2NF9fCisjIGRlZmluZSBBU00gX19hc21f XygicjEyIikKKyNlbGlmIGRlZmluZWQgX19ocHBhX18KKyMgZGVmaW5lIEFTTSBfX2FzbV9fKCIl cjMwIikKKyNlbGlmIGRlZmluZWQgX194dGVuc2FfXworIyBkZWZpbmUgQVNNIF9fYXNtX18oInNw IikKKyNlbHNlCisvKiBUaGUgcmVnaXN0ZXIgbmFtZSBzaG91bGQgYmUgdGFyZ2V0LWRlcGVuZGVu dCBzbyBmb3Igb3RoZXIgdGFyZ2V0cywKKyAgIHdlIGp1c3Qgc2lsZW5jZSB0aGUgdGVzdC4gICov CisjIGRlZmluZSBBU00gPSAwCisjZW5kaWYKKwordm9pZCAqbG9hZF9QQ0IgKHZvaWQpCit7Cisg IHJlZ2lzdGVyIHZvaWQgKnNwIEFTTTsKKyAgcmV0dXJuIHNwOwkJCS8qIHsgZGctYm9ndXMgInVu aW5pdGlhbGl6ZWQiIH0gKi8KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2F1 dG8taW5pdC11bmluaXQtSS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvYXV0by1pbml0LXVuaW5p dC1JLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wOTY4MGZlOTc5 MGQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9hdXRvLWluaXQtdW5p bml0LUkuYwpAQCAtMCwwICsxLDggQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1PMiAtV3VuaW5pdGlhbGl6ZWQgLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVy byIgfSAqLworCitpbnQgc3lzX21zZ2N0bCAodm9pZCkKK3sKKyAgc3RydWN0IHsgaW50IG1vZGU7 IH0gc2V0YnVmOworICByZXR1cm4gc2V0YnVmLm1vZGU7ICAvKiB7IGRnLXdhcm5pbmcgIidzZXRi dWZcLm1vZGUnIGlzIHVzZWQiIH0gKi8KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YWFyY2g2NC9hdXRvLWluaXQtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uMGZhNDcwODgwYmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTEuYwpAQCAtMCwwICsxLDMyIEBACisvKiBWZXJpZnkg emVybyBpbml0aWFsaXphdGlvbiBmb3IgaW50ZWdlciBhbmQgcG9pbnRlciB0eXBlIGF1dG9tYXRp YyB2YXJpYWJsZXMuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyAtZmR1bXAtcnRsLWV4cGFuZCIgfSAqLwor CisjaWZuZGVmIF9fY3BsdXNwbHVzCisjIGRlZmluZSBib29sIF9Cb29sCisjZW5kaWYKKworZW51 bSBFIHsKKyAgTjEgPSAwLAorICBOMiwKKyAgTjMKK307CisKK2V4dGVybiB2b2lkIGJhciAoY2hh ciwgc2hvcnQsIGludCwgZW51bSBFLCBsb25nLCBsb25nIGxvbmcsIGludCAqLCBib29sKTsKKwor dm9pZCBmb28oKQoreworICBjaGFyIHRlbXAxOworICBzaG9ydCB0ZW1wMjsKKyAgaW50IHRlbXAz OworICBlbnVtIEUgdGVtcDQ7CisgIGxvbmcgdGVtcDU7CisgIGxvbmcgbG9uZyB0ZW1wNjsKKyAg aW50ICp0ZW1wNzsKKyAgYm9vbCB0ZW1wODsKKworICBiYXIgKHRlbXAxLCB0ZW1wMiwgdGVtcDMs IHRlbXA0LCB0ZW1wNSwgdGVtcDYsIHRlbXA3LCB0ZW1wOCk7CisgIHJldHVybjsKK30KKworLyog eyBkZy1maW5hbCB7IHNjYW4tcnRsLWR1bXAtdGltZXMgImNvbnN0X2ludCAwIiAxMSAiZXhwYW5k IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1 dG8taW5pdC0xMC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0 LTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hY2VjZWI4N2Zi ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9h dXRvLWluaXQtMTAuYwpAQCAtMCwwICsxLDE4IEBACisvKiBWZXJpZnkgcGF0dGVybiBpbml0aWFs aXphdGlvbiBmb3Igc3RydWN0dXJlIHR5cGUgYXV0b21hdGljIHZhcmlhYmxlcyB3aXRoCisgICBw YWRkaW5nLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1m dHJpdmlhbC1hdXRvLXZhci1pbml0PXBhdHRlcm4iIH0gKi8KKworc3RydWN0IHRlc3RfYWxpZ25l ZCB7CisgICAgICAgIGludCBpbnRlcm5hbDE7CisgICAgICAgIGxvbmcgbG9uZyBpbnRlcm5hbDI7 Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDY0KSkpOworCitpbnQgZm9vICgpCit7CisgIHN0 cnVjdCB0ZXN0X2FsaWduZWQgdmFyOworICByZXR1cm4gdmFyLmludGVybmFsMTsKK30KKworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJzdHBcdHEwLCBxMCwiIDIgfSB9ICov CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5p dC0xMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTExLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wODVjMzg2MjkyMTAKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWlu aXQtMTEuYwpAQCAtMCwwICsxLDI3IEBACisvKiBWZXJpZnkgemVybyBpbml0aWFsaXphdGlvbiBm b3IgbmVzdGVkIHN0cnVjdHVyZSB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMgd2l0aAorICAgcGFk ZGluZy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRy aXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKK3N0cnVjdCB0ZXN0X2FsaWduZWQgewor ICAgICAgICB1bnNpZ25lZCBpbnRlcm5hbDE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnRlcm5hbDI7Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDY0KSkpOworCitzdHJ1Y3QgdGVz dF9iaWdfaG9sZSB7CisgICAgICAgIGNoYXIgb25lOworICAgICAgICBjaGFyIHR3bzsKKyAgICAg ICAgY2hhciB0aHJlZTsKKyAgICAgICAgLyogNjEgYnl0ZSBwYWRkaW5nIGhvbGUgaGVyZS4gKi8K KyAgICAgICAgc3RydWN0IHRlc3RfYWxpZ25lZCBmb3VyOworfSBfX2F0dHJpYnV0ZV9fICgoYWxp Z25lZCg2NCkpKTsKKworCitpbnQgZm9vICgpCit7CisgIHN0cnVjdCB0ZXN0X2JpZ19ob2xlIHZh cjsKKyAgcmV0dXJuIHZhci5mb3VyLmludGVybmFsMTsKK30KKworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLXRpbWVzICJzdHBcdHEwLCBxMCwiIDQgfSB9ICovCisKZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0xMi5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTEyLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZDEzODNiMGI1YzgKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMTIuYwpAQCAtMCww ICsxLDI3IEBACisvKiBWZXJpZnkgcGF0dGVybiBpbml0aWFsaXphdGlvbiBmb3IgbmVzdGVkIHN0 cnVjdHVyZSB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMgd2l0aAorICAgcGFkZGluZy4gICovCisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12 YXItaW5pdD1wYXR0ZXJuIiB9ICovCisKK3N0cnVjdCB0ZXN0X2FsaWduZWQgeworICAgICAgICB1 bnNpZ25lZCBpbnRlcm5hbDE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnRlcm5hbDI7 Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDY0KSkpOworCitzdHJ1Y3QgdGVzdF9iaWdfaG9s ZSB7CisgICAgICAgIGNoYXIgb25lOworICAgICAgICBjaGFyIHR3bzsKKyAgICAgICAgY2hhciB0 aHJlZTsKKyAgICAgICAgLyogNjEgYnl0ZSBwYWRkaW5nIGhvbGUgaGVyZS4gKi8KKyAgICAgICAg c3RydWN0IHRlc3RfYWxpZ25lZCBmb3VyOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg2NCkp KTsKKworCitpbnQgZm9vICgpCit7CisgIHN0cnVjdCB0ZXN0X2JpZ19ob2xlIHZhcjsKKyAgcmV0 dXJuIHZhci5mb3VyLmludGVybmFsMTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzICJzdHBcdHEwLCBxMCwiIDQgfSB9ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0xMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4zYzQ1YTZjNjI4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMTMuYwpAQCAtMCwwICsxLDIyIEBA CisvKiBWZXJpZnkgemVybyBpbml0aWFsaXphdGlvbiBmb3Igc3RydWN0dXJlIHR5cGUgYXV0b21h dGljIHZhcmlhYmxlcyB3aXRoCisgICB0YWlsIHBhZGRpbmcuICAqLworLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyIg fSAqLworCitzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHsKKyAgICAgICAgY2hhciAqb25lOwor ICAgICAgICBjaGFyICp0d287CisgICAgICAgIGNoYXIgKnRocmVlOworICAgICAgICBjaGFyIGZv dXI7CisgICAgICAgIC8qICJzaXplb2YodW5zaWduZWQgbG9uZykgLSAxIiBieXRlIHBhZGRpbmcg aG9sZSBoZXJlLiAqLworfTsKKworaW50IGZvbyAoKQoreworICBzdHJ1Y3QgdGVzdF90cmFpbGlu Z19ob2xlIHZhcjsKKyAgcmV0dXJuIHZhci5mb3VyOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgInN0cFx0eHpyLCB4enIsIiAyIH0gfSAqLworCisKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0xNC5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTE0LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZmVmMjNkNTJhMTAKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMTQuYwpAQCAt MCwwICsxLDIwIEBACisvKiBWZXJpZnkgcGF0dGVybiBpbml0aWFsaXphdGlvbiBmb3Igc3RydWN0 dXJlIHR5cGUgYXV0b21hdGljIHZhcmlhYmxlcyB3aXRoCisgICB0YWlsIHBhZGRpbmcuICAqLwor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8t dmFyLWluaXQ9cGF0dGVybiAtZmR1bXAtcnRsLWV4cGFuZCIgfSAqLworCitzdHJ1Y3QgdGVzdF90 cmFpbGluZ19ob2xlIHsKKyAgICAgICAgY2hhciAqb25lOworICAgICAgICBjaGFyICp0d287Cisg ICAgICAgIGNoYXIgKnRocmVlOworICAgICAgICBjaGFyIGZvdXI7CisgICAgICAgIC8qICJzaXpl b2YodW5zaWduZWQgbG9uZykgLSAxIiBieXRlIHBhZGRpbmcgaG9sZSBoZXJlLiAqLworfTsKKwor aW50IGZvbyAoKQoreworICBzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHZhcjsKKyAgcmV0dXJu IHZhci5mb3VyOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiMHhm ZmZmZmZmZmZmZmZmZmZlXFxcXVxcXCkgcmVwZWF0ZWQgeDE2IiAxICJleHBhbmQiIH0gfSAqLwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTE1 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMTUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmNiOTZjM2ExZTRiMgotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0x NS5jCkBAIC0wLDAgKzEsMjAgQEAKKy8qIFZlcmlmeSB6ZXJvIGluaXRpYWxpemF0aW9uIGZvciBz dHJ1Y3R1cmUgdHlwZSBhdXRvbWF0aWMgdmFyaWFibGVzIHdpdGgKKyAgIHBhZGRpbmcgYW5kIGhh cyBleHBsaWNpdCBpbml0aWFsaXphdGlvbi4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwor LyogeyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKK3N0 cnVjdCB0ZXN0X3RyYWlsaW5nX2hvbGUgeworICAgICAgICBpbnQgb25lOworICAgICAgICBpbnQg dHdvOworICAgICAgICBpbnQgdGhyZWU7CisgICAgICAgIGNoYXIgZm91cjsKKyAgICAgICAgLyog InNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEiIGJ5dGUgcGFkZGluZyBob2xlIGhlcmUuICovCit9 OworCitpbnQgZm9vICgpCit7CisgIHN0cnVjdCB0ZXN0X3RyYWlsaW5nX2hvbGUgdmFyID0gey5v bmUgPSAxLC50d28gPSAyLCAuZm91ciA9ICdjJ307CisgIHJldHVybiB2YXIuZm91cjsKK30KKwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJzdHBcdHh6ciwgeHpyLCIgfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMTYu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0xNi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2U3YzdjZDMxYzFmCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTE2 LmMKQEAgLTAsMCArMSwyMiBAQAorLyogVmVyaWZ5IHBhdHRlcm4gaW5pdGlhbGl6YXRpb24gZm9y IHN0cnVjdHVyZSB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMgd2l0aAorICAgcGFkZGluZyBhbmQg aGFzIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXBhdHRlcm4iIH0gKi8K Kworc3RydWN0IHRlc3RfdHJhaWxpbmdfaG9sZSB7CisgICAgICAgIGludCBvbmU7CisgICAgICAg IGludCB0d287CisgICAgICAgIGludCB0aHJlZTsKKyAgICAgICAgY2hhciBmb3VyOworICAgICAg ICAvKiAic2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSIgYnl0ZSBwYWRkaW5nIGhvbGUgaGVyZS4g Ki8KK307CisKK2ludCBmb28gKCkKK3sKKyAgc3RydWN0IHRlc3RfdHJhaWxpbmdfaG9sZSB2YXIg PSB7Lm9uZSA9IDEsLnR3byA9IDIsIC5mb3VyID0gJ2MnfTsKKyAgcmV0dXJuIHZhci5mb3VyOwor fQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInN0cFx0eHpyLCB4enIsIiB9IH0g Ki8KKworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRv LWluaXQtMTcuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0x Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzgxZTVmZjI4YjBi Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0 by1pbml0LTE3LmMKQEAgLTAsMCArMSwyMSBAQAorLyogVmVyaWZ5IHplcm8gaW5pdGlhbGl6YXRp b24gZm9yIGFycmF5IHR5cGUgd2l0aCBzdHJ1Y3R1cmUgZWxlbWVudCB3aXRoCisgICBwYWRkaW5n LiAgKi8gCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZp YWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKK3N0cnVjdCB0ZXN0X3RyYWlsaW5nX2hvbGUg eworICAgICAgICBpbnQgb25lOworICAgICAgICBpbnQgdHdvOworICAgICAgICBpbnQgdGhyZWU7 CisgICAgICAgIGNoYXIgZm91cjsKKyAgICAgICAgLyogInNpemVvZih1bnNpZ25lZCBsb25nKSAt IDEiIGJ5dGUgcGFkZGluZyBob2xlIGhlcmUuICovCit9OworCisKK2ludCBmb28gKCkKK3sKKyAg c3RydWN0IHRlc3RfdHJhaWxpbmdfaG9sZSB2YXJbMTBdOyAKKyAgcmV0dXJuIHZhclsyXS5mb3Vy OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInN0cFx0cTAsIHEw LCIgNSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L2F1dG8taW5pdC0xOC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1p bml0LTE4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMGYzYWNi MmY1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2 NC9hdXRvLWluaXQtMTguYwpAQCAtMCwwICsxLDIyIEBACisvKiBWZXJpZnkgcGF0dGVybiBpbml0 aWFsaXphdGlvbiBmb3IgYXJyYXkgdHlwZSB3aXRoIHN0cnVjdHVyZSBlbGVtZW50IHdpdGgKKyAg IHBhZGRpbmcuICAqLyAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXBhdHRlcm4gLWZkdW1wLXJ0bC1leHBhbmQiIH0gKi8K Kworc3RydWN0IHRlc3RfdHJhaWxpbmdfaG9sZSB7CisgICAgICAgIGludCBvbmU7CisgICAgICAg IGludCB0d287CisgICAgICAgIGludCB0aHJlZTsKKyAgICAgICAgY2hhciBmb3VyOworICAgICAg ICAvKiAic2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSIgYnl0ZSBwYWRkaW5nIGhvbGUgaGVyZS4g Ki8KK307CisKKworaW50IGZvbyAoKQoreworICBzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHZh clsxMF07IAorICByZXR1cm4gdmFyWzJdLmZvdXI7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2Fu LXJ0bC1kdW1wLXRpbWVzICIweGZmZmZmZmZmZmZmZmZmZmVcXFxdXFxcKSByZXBlYXRlZCB4MTYi IDEgImV4cGFuZCIgfSB9ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9hYXJjaDY0L2F1dG8taW5pdC0xOS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvYXV0by1pbml0LTE5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li4wMmY3ZWRjNTEwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC9hdXRvLWluaXQtMTkuYwpAQCAtMCwwICsxLDI3IEBACisvKiBWZXJpZnkgemVy byBpbml0aWFsaXphdGlvbiBmb3IgdW5pb24gdHlwZSB3aXRoIHN0cnVjdHVyZSBmaWVsZCB3aXRo CisgICBwYWRkaW5nLiAgKi8gCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9ICovCisKK3N0cnVjdCB0ZXN0X3Ry YWlsaW5nX2hvbGUgeworICAgICAgICBpbnQgb25lOworICAgICAgICBpbnQgdHdvOworICAgICAg ICBpbnQgdGhyZWU7CisgICAgICAgIGNoYXIgZm91cjsKKyAgICAgICAgLyogInNpemVvZih1bnNp Z25lZCBsb25nKSAtIDEiIGJ5dGUgcGFkZGluZyBob2xlIGhlcmUuICovCit9OworCit1bmlvbiB0 ZXN0X3VuaW9uX3BhZGRpbmcgeworICBzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHUxOworICBs b25nIGxvbmcgdTI7Cit9OworCisKK2ludCBmb28gKCkKK3sKKyAgdW5pb24gdGVzdF91bmlvbl9w YWRkaW5nIHZhcjsKKyAgcmV0dXJuIHZhci51MS5mb3VyOworfQorCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIgInN0cFx0eHpyLCB4enIsIiB9IH0gKi8KKwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTIuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi4yYzU0ZTZkNjAzODIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMi5jCkBAIC0wLDAgKzEsMzUg QEAKKy8qIFZlcmlmeSBwYXR0ZXJuIGluaXRpYWxpemF0aW9uIGZvciBpbnRlZ2VyIGFuZCBwb2lu dGVyIHR5cGUgYXV0b21hdGljIHZhcmlhYmxlcy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LworLyogeyBkZy1vcHRpb25zICItTyAtZnRyaXZpYWwtYXV0by12YXItaW5pdD1wYXR0ZXJuIC1m ZHVtcC1ydGwtZXhwYW5kIiB9ICovCisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyMgZGVmaW5lIGJv b2wgX0Jvb2wKKyNlbmRpZgorCitlbnVtIEUgeworICBOMSA9IDAsCisgIE4yLAorICBOMworfTsK KworZXh0ZXJuIHZvaWQgYmFyIChjaGFyLCBzaG9ydCwgaW50LCBlbnVtIEUsIGxvbmcsIGxvbmcg bG9uZywgaW50ICosIGJvb2wpOworCit2b2lkIGZvbygpCit7CisgIGNoYXIgdGVtcDE7CisgIHNo b3J0IHRlbXAyOworICBpbnQgdGVtcDM7CisgIGVudW0gRSB0ZW1wNDsKKyAgbG9uZyB0ZW1wNTsK KyAgbG9uZyBsb25nIHRlbXA2OworICBpbnQgKnRlbXA3OworICBib29sIHRlbXA4OworCisgIGJh ciAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIHRlbXA1LCB0ZW1wNiwgdGVtcDcsIHRlbXA4 KTsKKyAgcmV0dXJuOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAi MHhmZVxcXF0iIDEgImV4cGFuZCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVt cC10aW1lcyAiMHhmZmZmZmZmZmZmZmZmZWZlIiAxICJleHBhbmQiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tcnRsLWR1bXAtdGltZXMgIjB4ZmZmZmZmZmZmZWZlZmVmZSIgMiAiZXhwYW5k IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXJ0bC1kdW1wLXRpbWVzICIweGZlZmVmZWZl ZmVmZWZlZmUiIDIgImV4cGFuZCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMjAuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9hYXJjaDY0L2F1dG8taW5pdC0yMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uNTU1OTcyZjE3MjhmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTIwLmMKQEAgLTAsMCArMSwyNyBAQAorLyogVmVy aWZ5IHBhdHRlcm4gaW5pdGlhbGl6YXRpb24gZm9yIHVuaW9uIHR5cGUgd2l0aCBzdHJ1Y3R1cmUg ZmllbGQgd2l0aAorICAgcGFkZGluZy4gICovIAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9cGF0dGVybiAtZmR1bXAtcnRs LWV4cGFuZCIgfSAqLworCitzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHsKKyAgICAgICAgaW50 IG9uZTsKKyAgICAgICAgaW50IHR3bzsKKyAgICAgICAgaW50IHRocmVlOworICAgICAgICBjaGFy IGZvdXI7CisgICAgICAgIC8qICJzaXplb2YodW5zaWduZWQgbG9uZykgLSAxIiBieXRlIHBhZGRp bmcgaG9sZSBoZXJlLiAqLworfTsKKwordW5pb24gdGVzdF91bmlvbl9wYWRkaW5nIHsKKyAgc3Ry dWN0IHRlc3RfdHJhaWxpbmdfaG9sZSB1MTsKKyAgbG9uZyBsb25nIHUyOworfTsKKworCitpbnQg Zm9vICgpCit7CisgIHVuaW9uIHRlc3RfdW5pb25fcGFkZGluZyB2YXI7CisgIHJldHVybiB2YXIu dTEuZm91cjsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tcnRsLWR1bXAtdGltZXMgIjB4ZmZm ZmZmZmZmZmZmZmZmZVxcXF1cXFwpIHJlcGVhdGVkIHgxNiIgMSAiZXhwYW5kIiB9IH0gKi8KKwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTMu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC0zLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xYWRjMTQ3YTMwMDAKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtMy5j CkBAIC0wLDAgKzEsMTcgQEAKKy8qIFZlcmlmeSB6ZXJvIGluaXRpYWxpemF0aW9uIGZvciBmbG9h dGluZyBwb2ludCB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMuICAqLworLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyAt ZmR1bXAtcnRsLWV4cGFuZCIgfSAqLworCitsb25nIGRvdWJsZSByZXN1bHQ7CisKK2xvbmcgZG91 YmxlIGZvbygpCit7CisgIGZsb2F0IHRlbXAxOworICBkb3VibGUgdGVtcDI7CisgIGxvbmcgZG91 YmxlIHRlbXAzOworICAKKyAgcmVzdWx0ID0gdGVtcDEgKyB0ZW1wMiArIHRlbXAzOworICByZXR1 cm4gcmVzdWx0OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiY29u c3RfaW50IDAiIDcgImV4cGFuZCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvYXV0by1pbml0LTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjllZTgzMzUwNjVmMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC00LmMKQEAgLTAsMCArMSwxOSBAQAorLyogVmVyaWZ5 IHBhdHRlcm4gaW5pdGlhbGl6YXRpb24gZm9yIGZsb2F0aW5nIHBvaW50IHR5cGUgYXV0b21hdGlj IHZhcmlhYmxlcy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25z ICItTyAtZnRyaXZpYWwtYXV0by12YXItaW5pdD1wYXR0ZXJuIC1mZHVtcC1ydGwtZXhwYW5kIiB9 ICovCisKK2xvbmcgZG91YmxlIHJlc3VsdDsKKworbG9uZyBkb3VibGUgZm9vKCkKK3sKKyAgZmxv YXQgdGVtcDE7CisgIGRvdWJsZSB0ZW1wMjsKKyAgbG9uZyBkb3VibGUgdGVtcDM7CisgIAorICBy ZXN1bHQgPSB0ZW1wMSArIHRlbXAyICsgdGVtcDM7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8q IHsgZGctZmluYWwgeyBzY2FuLXJ0bC1kdW1wICJmZWZlZmVmZSIgImV4cGFuZCIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcCAiZmVmZWZlZmVmZWZlZmVmZSIgImV4cGFuZCIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcCAiZmVmZWZlZmVmZWZlZmVmZWZl ZmVmZWZlZmVmZWZlZmUiICJleHBhbmQiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTUuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L2F1dG8taW5pdC01LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi4xODc0ZDk2MWQ1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtNS5jCkBAIC0wLDAgKzEsMTkgQEAKKy8qIFZl cmlmeSB6ZXJvIGluaXRpYWxpemF0aW9uIGZvciBjb21wbGV4IHR5cGUgYXV0b21hdGljIHZhcmlh Ymxlcy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRy aXZpYWwtYXV0by12YXItaW5pdD16ZXJvIC1mZHVtcC1ydGwtZXhwYW5kIiB9ICovCisKKworX0Nv bXBsZXggbG9uZyBkb3VibGUgcmVzdWx0OworCitfQ29tcGxleCBsb25nIGRvdWJsZSBmb28oKQor eworICBfQ29tcGxleCBmbG9hdCB0ZW1wMTsKKyAgX0NvbXBsZXggZG91YmxlIHRlbXAyOworICBf Q29tcGxleCBsb25nIGRvdWJsZSB0ZW1wMzsKKworICByZXN1bHQgPSB0ZW1wMSArIHRlbXAyICsg dGVtcDM7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXJ0bC1k dW1wLXRpbWVzICJjb25zdF9pbnQgMCIgMTIgImV4cGFuZCIgfSB9ICovCisKZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC02LmMgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtNi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjdjMTZiMzM2Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTYuYwpAQCAtMCwwICsx LDE4IEBACisvKiBWZXJpZnkgcGF0dGVybiBpbml0aWFsaXphdGlvbiBmb3IgY29tcGxleCB0eXBl IGF1dG9tYXRpYyB2YXJpYWJsZXMuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9cGF0dGVybiAtZmR1bXAtcnRsLWV4 cGFuZCIgfSAqLworCisKK19Db21wbGV4IGxvbmcgZG91YmxlIHJlc3VsdDsKKworX0NvbXBsZXgg bG9uZyBkb3VibGUgZm9vKCkKK3sKKyAgX0NvbXBsZXggZmxvYXQgdGVtcDE7CisgIF9Db21wbGV4 IGRvdWJsZSB0ZW1wMjsKKyAgX0NvbXBsZXggbG9uZyBkb3VibGUgdGVtcDM7CisKKyAgcmVzdWx0 ID0gdGVtcDEgKyB0ZW1wMiArIHRlbXAzOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiMHhmZmZmZmZmZmZmZmZmZmZlXFxcXVxcXCkg cmVwZWF0ZWQgeDE2IiAzICJleHBhbmQiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTcuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L2F1dG8taW5pdC03LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5hYzI3ZmJlOTJmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtNy5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qIFZl cmlmeSB6ZXJvIGluaXRpYWxpemF0aW9uIGZvciBhcnJheSwgdW5pb24sIGFuZCBzdHJ1Y3R1cmUg dHlwZSBhdXRvbWF0aWMgdmFyaWFibGVzLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8gLWZkdW1wLXJ0bC1l eHBhbmQiIH0gKi8KKworc3RydWN0IFMKK3sKKyAgaW50IGYxOworICBmbG9hdCBmMjsKKyAgY2hh ciBmM1syMF07Cit9OworCit1bmlvbiBVCit7CisgIGNoYXIgdTFbNV07CisgIGludCB1MjsKKyAg ZmxvYXQgdTM7IAorfTsKKworZG91YmxlIHJlc3VsdDsKKworZG91YmxlIGZvbygpCit7CisgIGlu dCB0ZW1wMVszXTsKKyAgZG91YmxlIHRlbXAyWzNdOworICBzdHJ1Y3QgUyB0ZW1wMzsKKyAgdW5p b24gVSB0ZW1wNDsKKyAgCisgIHJlc3VsdCA9IHRlbXAxWzJdICsgdGVtcDJbMV0gKyB0ZW1wMy5m MiArIHRlbXA0LnUzOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1ydGwtZHVtcC10aW1lcyAiY29uc3RfaW50IDAiIDggImV4cGFuZCIgfSB9ICovCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtOC5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTguYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM5NDNmNWE0ZDZiMgotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC04LmMKQEAgLTAs MCArMSwzMiBAQAorLyogVmVyaWZ5IHBhdHRlcm4gaW5pdGlhbGl6YXRpb24gZm9yIGFycmF5LCB1 bmlvbiwgYW5kIHN0cnVjdHVyZSB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMuICAqLworLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWlu aXQ9cGF0dGVybiAtZmR1bXAtcnRsLWV4cGFuZCIgfSAqLworCitzdHJ1Y3QgUworeworICBpbnQg ZjE7CisgIGZsb2F0IGYyOworICBjaGFyIGYzWzIwXTsKK307CisKK3VuaW9uIFUKK3sKKyAgY2hh ciB1MVs1XTsKKyAgaW50IHUyOworICBmbG9hdCB1MzsgCit9OworCitkb3VibGUgcmVzdWx0Owor Citkb3VibGUgZm9vKCkKK3sKKyAgaW50IHRlbXAxWzNdOworICBkb3VibGUgdGVtcDJbM107Cisg IHN0cnVjdCBTIHRlbXAzOworICB1bmlvbiBVIHRlbXA0OworICAKKyAgcmVzdWx0ID0gdGVtcDFb Ml0gKyB0ZW1wMlsxXSArIHRlbXAzLmYyICsgdGVtcDQudTM7CisgIHJldHVybiByZXN1bHQ7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXJ0bC1kdW1wLXRpbWVzICIweGZmZmZmZmZmZmZmZmZm ZmVcXFxdXFxcKSByZXBlYXRlZCB4MTYiIDQgImV4cGFuZCIgfSB9ICovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hdXRvLWluaXQtOS5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYXV0by1pbml0LTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmQzYTg4YzcyNDU0NQotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2F1dG8taW5pdC05LmMKQEAgLTAsMCArMSwx NyBAQAorLyogVmVyaWZ5IHplcm8gaW5pdGlhbGl6YXRpb24gZm9yIHN0cnVjdHVyZSB0eXBlIGF1 dG9tYXRpYyB2YXJpYWJsZXMgd2l0aAorICAgcGFkZGluZy4gICovCisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIiB9 ICovCisKK3N0cnVjdCB0ZXN0X2FsaWduZWQgeworICAgICAgICBpbnQgaW50ZXJuYWwxOworICAg ICAgICBsb25nIGxvbmcgaW50ZXJuYWwyOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg2NCkp KTsKKworaW50IGZvbyAoKQoreworICBzdHJ1Y3QgdGVzdF9hbGlnbmVkIHZhcjsKKyAgcmV0dXJu IHZhci5pbnRlcm5hbDE7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyAic3RwXHRxMCwgcTAsIiAyIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvYXV0by1pbml0LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F1dG8taW5pdC0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5i NzY5MGRmMjQwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9hdXRvLWluaXQtMS5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qIFZlcmlmeSB6ZXJvIGluaXRp YWxpemF0aW9uIGZvciBpbnRlZ2VyIGFuZCBwb2ludGVyIHR5cGUgYXV0b21hdGljIHZhcmlhYmxl cy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZp YWwtYXV0by12YXItaW5pdD16ZXJvIC1mZHVtcC1ydGwtZXhwYW5kIiB9ICovCisKKyNpZm5kZWYg X19jcGx1c3BsdXMKKyMgZGVmaW5lIGJvb2wgX0Jvb2wKKyNlbmRpZgorCitlbnVtIEUgeworICBO MSA9IDAsCisgIE4yLAorICBOMworfTsKKworZXh0ZXJuIHZvaWQgYmFyIChjaGFyLCBzaG9ydCwg aW50LCBlbnVtIEUsIGxvbmcsIGxvbmcgbG9uZywgaW50ICosIGJvb2wpOworCit2b2lkIGZvbygp Cit7CisgIGNoYXIgdGVtcDE7CisgIHNob3J0IHRlbXAyOworICBpbnQgdGVtcDM7CisgIGVudW0g RSB0ZW1wNDsKKyAgbG9uZyB0ZW1wNTsKKyAgbG9uZyBsb25nIHRlbXA2OworICBpbnQgKnRlbXA3 OworICBib29sIHRlbXA4OworCisgIGJhciAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIHRl bXA1LCB0ZW1wNiwgdGVtcDcsIHRlbXA4KTsKKyAgcmV0dXJuOworfQorCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiY29uc3RfaW50IDAiIDEwICJleHBhbmQiIH0gfSAqLwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTEwLmMg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTAuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJkYzJkMDM1YTZjOQotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xMC5jCkBAIC0w LDAgKzEsMTkgQEAKKy8qIFZlcmlmeSBwYXR0ZXJuIGluaXRpYWxpemF0aW9uIGZvciBzdHJ1Y3R1 cmUgdHlwZSBhdXRvbWF0aWMgdmFyaWFibGVzIHdpdGgKKyAgIHBhZGRpbmcuICAqLworLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWlu aXQ9cGF0dGVybiAtZmR1bXAtcnRsLWV4cGFuZCIgfSAqLworCitzdHJ1Y3QgdGVzdF9hbGlnbmVk IHsKKyAgICAgICAgaW50IGludGVybmFsMTsKKyAgICAgICAgbG9uZyBsb25nIGludGVybmFsMjsK K30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNjQpKSk7CisKK2ludCBmb28gKCkKK3sKKyAgc3Ry dWN0IHRlc3RfYWxpZ25lZCB2YXI7CisgIHJldHVybiB2YXIuaW50ZXJuYWwxOworfQorCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiMHhmZWZlZmVmZWZlZmVmZWZlZmVmZWZl ZmVmZWZlZmVmZSIgNCAiZXhwYW5kIiB9IH0gKi8KKworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2F1dG8taW5pdC0xMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uOGE2ZDc2NGI5ZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTExLmMKQEAgLTAsMCArMSwzMCBAQAorLyogVmVyaWZ5 IHplcm8gaW5pdGlhbGl6YXRpb24gZm9yIG5lc3RlZCBzdHJ1Y3R1cmUgdHlwZSBhdXRvbWF0aWMg dmFyaWFibGVzIHdpdGgKKyAgIHBhZGRpbmcuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyIgfSAqLworCitz dHJ1Y3QgdGVzdF9hbGlnbmVkIHsKKyAgICAgICAgdW5zaWduZWQgaW50ZXJuYWwxOworICAgICAg ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50ZXJuYWwyOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25l ZCg2NCkpKTsKKworc3RydWN0IHRlc3RfYmlnX2hvbGUgeworICAgICAgICBjaGFyIG9uZTsKKyAg ICAgICAgY2hhciB0d287CisgICAgICAgIGNoYXIgdGhyZWU7CisgICAgICAgIC8qIDYxIGJ5dGUg cGFkZGluZyBob2xlIGhlcmUuICovCisgICAgICAgIHN0cnVjdCB0ZXN0X2FsaWduZWQgZm91cjsK K30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNjQpKSk7CisKKworaW50IGZvbyAoKQoreworICBz dHJ1Y3QgdGVzdF9iaWdfaG9sZSB2YXI7CisgIHJldHVybiB2YXIuZm91ci5pbnRlcm5hbDE7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibW92bFx0XFxcJDAsIiB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibW92bFx0XFxcJDE2LCIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInJlcCBzdG9zcSIgfSB9ICovCisKKwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTEyLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTIuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFhZDYwMjQzYWE0YwotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xMi5jCkBAIC0wLDAg KzEsMjggQEAKKy8qIFZlcmlmeSBwYXR0ZXJuIGluaXRpYWxpemF0aW9uIGZvciBuZXN0ZWQgc3Ry dWN0dXJlIHR5cGUgYXV0b21hdGljIHZhcmlhYmxlcyB3aXRoCisgICBwYWRkaW5nLiAgKi8KKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mdHJpdmlhbC1hdXRvLXZh ci1pbml0PXBhdHRlcm4gLWZkdW1wLXJ0bC1leHBhbmQiIH0gKi8KKworc3RydWN0IHRlc3RfYWxp Z25lZCB7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsMTsKKyAgICAgICAgdW5zaWduZWQgbG9u ZyBsb25nIGludGVybmFsMjsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNjQpKSk7CisKK3N0 cnVjdCB0ZXN0X2JpZ19ob2xlIHsKKyAgICAgICAgY2hhciBvbmU7CisgICAgICAgIGNoYXIgdHdv OworICAgICAgICBjaGFyIHRocmVlOworICAgICAgICAvKiA2MSBieXRlIHBhZGRpbmcgaG9sZSBo ZXJlLiAqLworICAgICAgICBzdHJ1Y3QgdGVzdF9hbGlnbmVkIGZvdXI7Cit9IF9fYXR0cmlidXRl X18gKChhbGlnbmVkKDY0KSkpOworCisKK2ludCBmb28gKCkKK3sKKyAgc3RydWN0IHRlc3RfYmln X2hvbGUgdmFyOworICByZXR1cm4gdmFyLmZvdXIuaW50ZXJuYWwxOworfQorCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiMHhmZWZlZmVmZWZlZmVmZWZlZmVmZWZlZmVmZWZl ZmVmZSIgOCAiZXhwYW5kIiB9IH0gKi8KKworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2F1dG8taW5pdC0xMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uZTE4YmMzMDczZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvYXV0by1pbml0LTEzLmMKQEAgLTAsMCArMSwyMiBAQAorLyogVmVyaWZ5IHplcm8g aW5pdGlhbGl6YXRpb24gZm9yIHN0cnVjdHVyZSB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMgd2l0 aAorICAgdGFpbCBwYWRkaW5nLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworc3RydWN0IHRl c3RfdHJhaWxpbmdfaG9sZSB7CisgICAgICAgIGNoYXIgKm9uZTsKKyAgICAgICAgY2hhciAqdHdv OworICAgICAgICBjaGFyICp0aHJlZTsKKyAgICAgICAgY2hhciBmb3VyOworICAgICAgICAvKiAi c2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSIgYnl0ZSBwYWRkaW5nIGhvbGUgaGVyZS4gKi8KK307 CisKK2ludCBmb28gKCkKK3sKKyAgc3RydWN0IHRlc3RfdHJhaWxpbmdfaG9sZSB2YXI7CisgIHJl dHVybiB2YXIuZm91cjsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJtb3ZxXHRcXFwkMCwiIDQgfSB9ICovCisKKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTE0LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9hdXRvLWluaXQtMTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjczOGEzNDBlZmI2MQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2F1dG8taW5pdC0xNC5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qIFZlcmlmeSBwYXR0 ZXJuIGluaXRpYWxpemF0aW9uIGZvciBzdHJ1Y3R1cmUgdHlwZSBhdXRvbWF0aWMgdmFyaWFibGVz IHdpdGgKKyAgIHRhaWwgcGFkZGluZy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyog eyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD1wYXR0ZXJuIC1mZHVtcC1ydGwt ZXhwYW5kIiB9ICovCisKK3N0cnVjdCB0ZXN0X3RyYWlsaW5nX2hvbGUgeworICAgICAgICBjaGFy ICpvbmU7CisgICAgICAgIGNoYXIgKnR3bzsKKyAgICAgICAgY2hhciAqdGhyZWU7CisgICAgICAg IGNoYXIgZm91cjsKKyAgICAgICAgLyogInNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEiIGJ5dGUg cGFkZGluZyBob2xlIGhlcmUuICovCit9OworCitpbnQgZm9vICgpCit7CisgIHN0cnVjdCB0ZXN0 X3RyYWlsaW5nX2hvbGUgdmFyOworICByZXR1cm4gdmFyLmZvdXI7Cit9CisKKy8qIHsgZGctZmlu YWwgeyBzY2FuLXJ0bC1kdW1wLXRpbWVzICIweGZlZmVmZWZlZmVmZWZlZmVmZWZlZmVmZWZlZmVm ZWZlIiAyICJleHBhbmQiIH0gfSAqLworCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L2F1dG8taW5pdC0xNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvYXV0by1pbml0LTE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5iNWFiZmZiMGZjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9hdXRvLWluaXQtMTUuYwpAQCAtMCwwICsxLDIyIEBACisvKiBWZXJpZnkgemVybyBp bml0aWFsaXphdGlvbiBmb3Igc3RydWN0dXJlIHR5cGUgYXV0b21hdGljIHZhcmlhYmxlcyB3aXRo CisgICBwYWRkaW5nIGFuZCBoYXMgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uICAqLworLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWlu aXQ9emVybyIgfSAqLworCitzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHsKKyAgICAgICAgaW50 IG9uZTsKKyAgICAgICAgaW50IHR3bzsKKyAgICAgICAgaW50IHRocmVlOworICAgICAgICBjaGFy IGZvdXI7CisgICAgICAgIC8qICJzaXplb2YodW5zaWduZWQgbG9uZykgLSAxIiBieXRlIHBhZGRp bmcgaG9sZSBoZXJlLiAqLworfTsKKworaW50IGZvbyAoKQoreworICBzdHJ1Y3QgdGVzdF90cmFp bGluZ19ob2xlIHZhciA9IHsub25lID0gMSwudHdvID0gMiwgLmZvdXIgPSAnYyd9OworICByZXR1 cm4gdmFyLmZvdXI7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi bW92cVx0XFxcJDAsIiAyIH0gfSAqLworCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L2F1dG8taW5pdC0xNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvYXV0by1pbml0LTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li42NjU5MWNmZjQ0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9hdXRvLWluaXQtMTYuYwpAQCAtMCwwICsxLDIyIEBACisvKiBWZXJpZnkgcGF0dGVy biBpbml0aWFsaXphdGlvbiBmb3Igc3RydWN0dXJlIHR5cGUgYXV0b21hdGljIHZhcmlhYmxlcyB3 aXRoCisgICBwYWRkaW5nIGFuZCBoYXMgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uICAqLworLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFy LWluaXQ9cGF0dGVybiIgfSAqLworCitzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHsKKyAgICAg ICAgaW50IG9uZTsKKyAgICAgICAgaW50IHR3bzsKKyAgICAgICAgaW50IHRocmVlOworICAgICAg ICBjaGFyIGZvdXI7CisgICAgICAgIC8qICJzaXplb2YodW5zaWduZWQgbG9uZykgLSAxIiBieXRl IHBhZGRpbmcgaG9sZSBoZXJlLiAqLworfTsKKworaW50IGZvbyAoKQoreworICBzdHJ1Y3QgdGVz dF90cmFpbGluZ19ob2xlIHZhciA9IHsub25lID0gMSwudHdvID0gMiwgLmZvdXIgPSAnYyd9Owor ICByZXR1cm4gdmFyLmZvdXI7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAibW92cVx0XFxcJDAsIiAyIH0gfSAqLworCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xNy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvYXV0by1pbml0LTE3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi40MGZjY2FkZjkyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMTcuYwpAQCAtMCwwICsxLDIzIEBACisvKiBWZXJpZnkg emVybyBpbml0aWFsaXphdGlvbiBmb3IgYXJyYXkgdHlwZSB3aXRoIHN0cnVjdHVyZSBlbGVtZW50 IHdpdGgKKyAgIHBhZGRpbmcuICAqLyAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iIH0gKi8KKworc3RydWN0IHRl c3RfdHJhaWxpbmdfaG9sZSB7CisgICAgICAgIGludCBvbmU7CisgICAgICAgIGludCB0d287Cisg ICAgICAgIGludCB0aHJlZTsKKyAgICAgICAgY2hhciBmb3VyOworICAgICAgICAvKiAic2l6ZW9m KHVuc2lnbmVkIGxvbmcpIC0gMSIgYnl0ZSBwYWRkaW5nIGhvbGUgaGVyZS4gKi8KK307CisKKwor aW50IGZvbyAoKQoreworICBzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHZhclsxMF07IAorICBy ZXR1cm4gdmFyWzJdLmZvdXI7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAi bW92bFx0XFxcJDAsIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibW92 bFx0XFxcJDIwLCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInJlcCBz dG9zcSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9h dXRvLWluaXQtMTguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0x OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYWY3YTYwMjhjNWNl Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1p bml0LTE4LmMKQEAgLTAsMCArMSwyMSBAQAorLyogVmVyaWZ5IHBhdHRlcm4gaW5pdGlhbGl6YXRp b24gZm9yIGFycmF5IHR5cGUgd2l0aCBzdHJ1Y3R1cmUgZWxlbWVudCB3aXRoCisgICBwYWRkaW5n LiAgKi8gCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZp YWwtYXV0by12YXItaW5pdD1wYXR0ZXJuIC1mZHVtcC1ydGwtZXhwYW5kIiB9ICovCisKK3N0cnVj dCB0ZXN0X3RyYWlsaW5nX2hvbGUgeworICAgICAgICBpbnQgb25lOworICAgICAgICBpbnQgdHdv OworICAgICAgICBpbnQgdGhyZWU7CisgICAgICAgIGNoYXIgZm91cjsKKyAgICAgICAgLyogInNp emVvZih1bnNpZ25lZCBsb25nKSAtIDEiIGJ5dGUgcGFkZGluZyBob2xlIGhlcmUuICovCit9Owor CisKK2ludCBmb28gKCkKK3sKKyAgc3RydWN0IHRlc3RfdHJhaWxpbmdfaG9sZSB2YXJbMTBdOyAK KyAgcmV0dXJuIHZhclsyXS5mb3VyOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVt cC10aW1lcyAiMHhmZWZlZmVmZWZlZmVmZWZlZmVmZWZlZmVmZWZlZmVmZSIgMTAgImV4cGFuZCIg fSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWlu aXQtMTkuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0xOS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzFhM2VlMWZlOTcxCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTE5 LmMKQEAgLTAsMCArMSwyNiBAQAorLyogVmVyaWZ5IHplcm8gaW5pdGlhbGl6YXRpb24gZm9yIHVu aW9uIHR5cGUgd2l0aCBzdHJ1Y3R1cmUgZmllbGQgd2l0aAorICAgcGFkZGluZy4gICovIAorLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFy LWluaXQ9emVybyIgfSAqLworCitzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHsKKyAgICAgICAg aW50IG9uZTsKKyAgICAgICAgaW50IHR3bzsKKyAgICAgICAgaW50IHRocmVlOworICAgICAgICBj aGFyIGZvdXI7CisgICAgICAgIC8qICJzaXplb2YodW5zaWduZWQgbG9uZykgLSAxIiBieXRlIHBh ZGRpbmcgaG9sZSBoZXJlLiAqLworfTsKKwordW5pb24gdGVzdF91bmlvbl9wYWRkaW5nIHsKKyAg c3RydWN0IHRlc3RfdHJhaWxpbmdfaG9sZSB1MTsKKyAgbG9uZyBsb25nIHUyOworfTsKKworCitp bnQgZm9vICgpCit7CisgIHVuaW9uIHRlc3RfdW5pb25fcGFkZGluZyB2YXI7CisgIHJldHVybiB2 YXIudTEuZm91cjsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJt b3ZxXHRcXFwkMCwiIDIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9hdXRvLWluaXQtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0 by1pbml0LTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU3NmZj MjU2NTE2OAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F1dG8taW5pdC0yLmMKQEAgLTAsMCArMSwzNiBAQAorLyogVmVyaWZ5IHBhdHRlcm4gaW5pdGlh bGl6YXRpb24gZm9yIGludGVnZXIgYW5kIHBvaW50ZXIgdHlwZSBhdXRvbWF0aWMgdmFyaWFibGVz LiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mdHJpdmlh bC1hdXRvLXZhci1pbml0PXBhdHRlcm4gLWZkdW1wLXJ0bC1leHBhbmQiIH0gKi8KKworI2lmbmRl ZiBfX2NwbHVzcGx1cworIyBkZWZpbmUgYm9vbCBfQm9vbAorI2VuZGlmCisKK2VudW0gRSB7Cisg IE4xID0gMCwKKyAgTjIsCisgIE4zCit9OworCitleHRlcm4gdm9pZCBiYXIgKGNoYXIsIHNob3J0 LCBpbnQsIGVudW0gRSwgbG9uZywgbG9uZyBsb25nLCBpbnQgKiwgYm9vbCk7CisKK3ZvaWQgZm9v KCkKK3sKKyAgY2hhciB0ZW1wMTsKKyAgc2hvcnQgdGVtcDI7CisgIGludCB0ZW1wMzsKKyAgZW51 bSBFIHRlbXA0OworICBsb25nIHRlbXA1OworICBsb25nIGxvbmcgdGVtcDY7CisgIGludCAqdGVt cDc7CisgIGJvb2wgdGVtcDg7CisKKyAgYmFyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwg dGVtcDUsIHRlbXA2LCB0ZW1wNywgdGVtcDgpOworICByZXR1cm47Cit9CisKKy8qIHsgZGctZmlu YWwgeyBzY2FuLXJ0bC1kdW1wLXRpbWVzICIweGZmZmZmZmZmZmZmZmZmZmUiIDIgImV4cGFuZCIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiMHhmZmZmZmZmZmZm ZmZmZWZlIiAxICJleHBhbmQiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tcnRsLWR1bXAt dGltZXMgIjB4ZmZmZmZmZmZmZWZlZmVmZSIgMiAiZXhwYW5kIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXJ0bC1kdW1wLXRpbWVzICIweGZlZmVmZWZlZmVmZWZlZmUiIDMgImV4cGFuZCIg fSB9ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8t aW5pdC0yMC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTIwLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZjllYTVkNjI5YTMKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQt MjAuYwpAQCAtMCwwICsxLDI2IEBACisvKiBWZXJpZnkgcGF0dGVybiBpbml0aWFsaXphdGlvbiBm b3IgdW5pb24gdHlwZSB3aXRoIHN0cnVjdHVyZSBmaWVsZCB3aXRoCisgICBwYWRkaW5nLiAgKi8g CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0 by12YXItaW5pdD1wYXR0ZXJuIC1mZHVtcC1ydGwtZXhwYW5kIiB9ICovCisKK3N0cnVjdCB0ZXN0 X3RyYWlsaW5nX2hvbGUgeworICAgICAgICBpbnQgb25lOworICAgICAgICBpbnQgdHdvOworICAg ICAgICBpbnQgdGhyZWU7CisgICAgICAgIGNoYXIgZm91cjsKKyAgICAgICAgLyogInNpemVvZih1 bnNpZ25lZCBsb25nKSAtIDEiIGJ5dGUgcGFkZGluZyBob2xlIGhlcmUuICovCit9OworCit1bmlv biB0ZXN0X3VuaW9uX3BhZGRpbmcgeworICBzdHJ1Y3QgdGVzdF90cmFpbGluZ19ob2xlIHUxOwor ICBsb25nIGxvbmcgdTI7Cit9OworCisKK2ludCBmb28gKCkKK3sKKyAgdW5pb24gdGVzdF91bmlv bl9wYWRkaW5nIHZhcjsKKyAgcmV0dXJuIHZhci51MS5mb3VyOworfQorCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiMHhmZWZlZmVmZWZlZmVmZWZlZmVmZWZlZmVmZWZlZmVm ZSIgMSAiZXhwYW5kIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2F1dG8taW5pdC0yMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0 by1pbml0LTIxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMTky YTkwOGY5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9hdXRvLWluaXQtMjEuYwpAQCAtMCwwICsxLDE0IEBACisvKiBWZXJpZnkgemVybyBpbml0aWFs aXphdGlvbiBmb3IgVkxBIGF1dG9tYXRpYyB2YXJpYWJsZXMuICAqLworLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyAt ZmR1bXAtcnRsLWV4cGFuZCIgfSAqLworCitleHRlcm4gdm9pZCBiYXIgKGludCk7CisKK3ZvaWQg Zm9vKGludCBuKQoreworICBpbnQgYXJyW25dOworICBiYXIgKGFyclsyXSk7CisgIHJldHVybjsK K30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tcnRsLWR1bXAgIl9fYnVpbHRpbl9tZW1zZXQiICJl eHBhbmQiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv YXV0by1pbml0LTIyLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQt MjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQzMWQ5NjY0ZTk0 ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8t aW5pdC0yMi5jCkBAIC0wLDAgKzEsMTQgQEAKKy8qIFZlcmlmeSB6ZXJvIGluaXRpYWxpemF0aW9u IGZvciBWTEEgYXV0b21hdGljIHZhcmlhYmxlcy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LworLyogeyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD1wYXR0ZXJuIC1mZHVt cC1ydGwtZXhwYW5kIiB9ICovCisKK2V4dGVybiB2b2lkIGJhciAoaW50KTsKKwordm9pZCBmb28o aW50IG4pCit7CisgIGludCBhcnJbbl07CisgIGJhciAoYXJyWzJdKTsKKyAgcmV0dXJuOworfQor CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcCAiX19idWlsdGluX21lbXNldCIgImV4cGFu ZCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRv LWluaXQtMjMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0yMy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzIwOTRmNmJkYjkyCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0 LTIzLmMKQEAgLTAsMCArMSwxMyBAQAorLyogVmVyaWZ5IHRoZSBhdXRvIGluaXRpYWxpemF0aW9u IG9mIG5lc3RlZCBWTEEuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyAtZmR1bXAtcnRsLWV4cGFuZCIgfSAq LworCit2b2lkIGcodm9pZCAqKTsKKwordm9pZCBmb28oaW50IGEpCit7CisgIGludCB4W2FdW2Fd OworICBnKHgpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcCAiX19idWlsdGlu X21lbXNldCIgImV4cGFuZCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdXRvLWluaXQtMjQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F1dG8taW5pdC0yNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u NWNjM2E3NTZhMWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvYXV0by1pbml0LTI0LmMKQEAgLTAsMCArMSwxMyBAQAorLyogVmVyaWZ5IHRoZSBhdXRv IGluaXRpYWxpemF0aW9uIG9mIG5lc3RlZCBWTEEuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9cGF0dGVybiAtZmR1 bXAtcnRsLWV4cGFuZCIgfSAqLworCit2b2lkIGcodm9pZCAqKTsKKwordm9pZCBmb28oaW50IGEp Cit7CisgIGludCB4W2FdW2FdOworICBnKHgpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1y dGwtZHVtcCAiX19idWlsdGluX21lbXNldCIgImV4cGFuZCIgfSB9ICovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtMy5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjEzMGU1NWZlMmU4NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC0zLmMKQEAgLTAsMCArMSwxNyBAQAorLyog VmVyaWZ5IHplcm8gaW5pdGlhbGl6YXRpb24gZm9yIGZsb2F0aW5nIHBvaW50IHR5cGUgYXV0b21h dGljIHZhcmlhYmxlcy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvIC1mZHVtcC1ydGwtZXhwYW5kIiB9ICov CisKK2xvbmcgZG91YmxlIHJlc3VsdDsKKworbG9uZyBkb3VibGUgZm9vKCkKK3sKKyAgZmxvYXQg dGVtcDE7CisgIGRvdWJsZSB0ZW1wMjsKKyAgbG9uZyBkb3VibGUgdGVtcDM7CisKKyAgcmVzdWx0 ID0gdGVtcDEgKyB0ZW1wMiArIHRlbXAzOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiY29uc3RfaW50IDAiIDMgImV4cGFuZCIgfSB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQt NC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1MTI1YjUzN2JiZAotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC00LmMKQEAg LTAsMCArMSwyMCBAQAorLyogVmVyaWZ5IHBhdHRlcm4gaW5pdGlhbGl6YXRpb24gZm9yIGZsb2F0 aW5nIHBvaW50IHR5cGUgYXV0b21hdGljIHZhcmlhYmxlcy4gICovCisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD1wYXR0ZXJu IC1mZHVtcC1ydGwtZXhwYW5kIiB9ICovCisKK2xvbmcgZG91YmxlIHJlc3VsdDsKKworbG9uZyBk b3VibGUgZm9vKCkKK3sKKyAgZmxvYXQgdGVtcDE7CisgIGRvdWJsZSB0ZW1wMjsKKyAgbG9uZyBk b3VibGUgdGVtcDM7CisKKyAgcmVzdWx0ID0gdGVtcDEgKyB0ZW1wMiArIHRlbXAzOworICByZXR1 cm4gcmVzdWx0OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiMHhm ZmZmZmZmZmZlZmVmZWZlIiAxICJleHBhbmQiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t cnRsLWR1bXAtdGltZXMgIlxcXFsweGZlZmVmZWZlZmVmZWZlZmVcXFxdIiAxICJleHBhbmQiIH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tcnRsLWR1bXAtdGltZXMgIjB4ZmVmZWZlZmVmZWZl ZmVmZWZlZmVmZWZlZmVmZWZlZmUiIDEgImV4cGFuZCIgfSB9ICovCisKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC01LmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uMDZjMTViZjkzNWIyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTUuYwpAQCAtMCwwICsxLDIwIEBACisvKiBW ZXJpZnkgemVybyBpbml0aWFsaXphdGlvbiBmb3IgY29tcGxleCB0eXBlIGF1dG9tYXRpYyB2YXJp YWJsZXMuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0 cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyAtZmR1bXAtcnRsLWV4cGFuZCIgfSAqLworCisKK19D b21wbGV4IGxvbmcgZG91YmxlIHJlc3VsdDsKKworX0NvbXBsZXggbG9uZyBkb3VibGUgZm9vKCkK K3sKKyAgX0NvbXBsZXggZmxvYXQgdGVtcDE7CisgIF9Db21wbGV4IGRvdWJsZSB0ZW1wMjsKKyAg X0NvbXBsZXggbG9uZyBkb3VibGUgdGVtcDM7CisKKyAgcmVzdWx0ID0gdGVtcDEgKyB0ZW1wMiAr IHRlbXAzOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwt ZHVtcC10aW1lcyAiY29uc3RfaW50IDAiIDQgImV4cGFuZCIgfSB9ICovCisKKwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTYuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC02LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi44MGJkNTZiY2I5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtNi5jCkBAIC0wLDAgKzEsMTkgQEAK Ky8qIFZlcmlmeSBwYXR0ZXJuIGluaXRpYWxpemF0aW9uIGZvciBjb21wbGV4IHR5cGUgYXV0b21h dGljIHZhcmlhYmxlcy4gICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRp b25zICItZnRyaXZpYWwtYXV0by12YXItaW5pdD1wYXR0ZXJuIC1mZHVtcC1ydGwtZXhwYW5kIiB9 ICovCisKKworX0NvbXBsZXggbG9uZyBkb3VibGUgcmVzdWx0OworCitfQ29tcGxleCBsb25nIGRv dWJsZSBmb28oKQoreworICBfQ29tcGxleCBmbG9hdCB0ZW1wMTsKKyAgX0NvbXBsZXggZG91Ymxl IHRlbXAyOworICBfQ29tcGxleCBsb25nIGRvdWJsZSB0ZW1wMzsKKworICByZXN1bHQgPSB0ZW1w MSArIHRlbXAyICsgdGVtcDM7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHsgZGctZmluYWwg eyBzY2FuLXJ0bC1kdW1wLXRpbWVzICJcXFxbMHhmZWZlZmVmZWZlZmVmZWZlXFxcXSIgMSAiZXhw YW5kIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXJ0bC1kdW1wLXRpbWVzICIweGZlZmVm ZWZlZmVmZWZlZmVmZWZlZmVmZWZlZmVmZWZlIiAzICJleHBhbmQiIH0gfSAqLwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTcuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC03LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5lOTFhMDI0NjMxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtNy5jCkBAIC0wLDAgKzEsMzIgQEAK Ky8qIFZlcmlmeSB6ZXJvIGluaXRpYWxpemF0aW9uIGZvciBhcnJheSwgdW5pb24sIGFuZCBzdHJ1 Y3R1cmUgdHlwZSBhdXRvbWF0aWMgdmFyaWFibGVzLiAgKi8KKy8qIHsgZGctZG8gY29tcGlsZSB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8gLWZkdW1w LXJ0bC1leHBhbmQiIH0gKi8KKworc3RydWN0IFMKK3sKKyAgaW50IGYxOworICBmbG9hdCBmMjsK KyAgY2hhciBmM1syMF07Cit9OworCit1bmlvbiBVCit7CisgIGNoYXIgdTFbNV07CisgIGludCB1 MjsKKyAgZmxvYXQgdTM7IAorfTsKKworZG91YmxlIHJlc3VsdDsKKworZG91YmxlIGZvbygpCit7 CisgIGludCB0ZW1wMVszXTsKKyAgZG91YmxlIHRlbXAyWzNdOworICBzdHJ1Y3QgUyB0ZW1wMzsK KyAgdW5pb24gVSB0ZW1wNDsKKyAgCisgIHJlc3VsdCA9IHRlbXAxWzJdICsgdGVtcDJbMV0gKyB0 ZW1wMy5mMiArIHRlbXA0LnUzOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiY29uc3RfaW50IDAiIDcgImV4cGFuZCIgfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdXRvLWluaXQtOC5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXV0by1pbml0LTguYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1ZTU1YmUzYmRkMgotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F1dG8taW5pdC04LmMKQEAgLTAsMCAr MSwzNSBAQAorLyogVmVyaWZ5IHBhdHRlcm4gaW5pdGlhbGl6YXRpb24gZm9yIGFycmF5LCB1bmlv biwgYW5kIHN0cnVjdHVyZSB0eXBlIGF1dG9tYXRpYyB2YXJpYWJsZXMuICAqLworLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9 cGF0dGVybiAtZmR1bXAtcnRsLWV4cGFuZCIgfSAqLworCitzdHJ1Y3QgUworeworICBpbnQgZjE7 CisgIGZsb2F0IGYyOworICBjaGFyIGYzWzIwXTsKK307CisKK3VuaW9uIFUKK3sKKyAgY2hhciB1 MVs1XTsKKyAgaW50IHUyOworICBmbG9hdCB1MzsgCit9OworCitkb3VibGUgcmVzdWx0OworCitk b3VibGUgZm9vKCkKK3sKKyAgaW50IHRlbXAxWzNdOworICBkb3VibGUgdGVtcDJbM107CisgIHN0 cnVjdCBTIHRlbXAzOworICB1bmlvbiBVIHRlbXA0OworICAKKyAgcmVzdWx0ID0gdGVtcDFbMl0g KyB0ZW1wMlsxXSArIHRlbXAzLmYyICsgdGVtcDQudTM7CisgIHJldHVybiByZXN1bHQ7Cit9CisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLXJ0bC1kdW1wLXRpbWVzICIweGZmZmZmZmZmZmVmZWZlZmUi IDEgImV4cGFuZCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAi XFxcWzB4ZmVmZWZlZmVmZWZlZmVmZVxcXF0iIDMgImV4cGFuZCIgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1ydGwtZHVtcC10aW1lcyAiMHhmZWZlZmVmZWZlZmVmZWZlZmVmZWZlZmVmZWZl ZmVmZSIgMyAiZXhwYW5kIiB9IH0gKi8KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvYXV0by1pbml0LTkuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F1dG8taW5pdC05LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5i NDA2OTc5N2Q5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9hdXRvLWluaXQtOS5jCkBAIC0wLDAgKzEsMTkgQEAKKy8qIFZlcmlmeSB6ZXJvIGluaXRp YWxpemF0aW9uIGZvciBzdHJ1Y3R1cmUgdHlwZSBhdXRvbWF0aWMgdmFyaWFibGVzIHdpdGgKKyAg IHBhZGRpbmcuICAqLworLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyIgfSAqLworCitzdHJ1Y3QgdGVzdF9hbGlnbmVk IHsKKyAgICAgICAgaW50IGludGVybmFsMTsKKyAgICAgICAgbG9uZyBsb25nIGludGVybmFsMjsK K30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNjQpKSk7CisKK2ludCBmb28gKCkKK3sKKyAgc3Ry dWN0IHRlc3RfYWxpZ25lZCB2YXI7CisgIHJldHVybiB2YXIuaW50ZXJuYWwxOworfQorCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIm1vdnFcdFxcXCQwLCIgOCB9IH0gKi8K KworCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1jZmcuYyBiL2djYy90cmVlLWNmZy5jCmluZGV4IGM3 M2UxY2JkZGE2Yi4uZjZkY2QxNDI5NTRlIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1jZmcuYworKysg Yi9nY2MvdHJlZS1jZmcuYwpAQCAtMzQ1MywzMSArMzQ1Myw5MiBAQCB2ZXJpZnlfZ2ltcGxlX2Nh bGwgKGdjYWxsICpzdG10KQogCX0KICAgICB9CiAKKyAgLyogRm9yIGEgY2FsbCB0byAuREVGRVJS RURfSU5JVCwgd2Ugc2hvdWxkIGd1YXJhbnRlZSB0aGF0IHRoZSAxc3QgYW5kIHRoZSAzcmQKKyAg ICAgYXJndW1lbnQgaXMgY29uc2lzdGVudCwgaS5lLjoKKyAgICAgMXN0IGFyZ3VtZW50OiBTSVpF IG9mIHRoZSBERUNMOworICAgICAzcmQgYXJndW1lbnQ6IElTX1ZMQSwgMCBOTywgMSBZRVM7CisK KyAgICAgaWYgSVNfVkxBIGlzIGZhbHNlLCB0aGUgMXN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIGNv bnN0YW50IGFuZCB0aGUgc2FtZSBhcworICAgICB0aGUgc2l6ZSBvZiB0aGUgTEhTLiAgKi8KKyAg aWYgKGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKHN0bXQsIElGTl9ERUZFUlJFRF9JTklUKSkKKyAg ICB7CisgICAgICB0cmVlIHNpemVfb2ZfYXJnMCA9IGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgMCk7 CisgICAgICB0cmVlIHNpemVfb2ZfbGhzID0gVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAobGhz KSk7CisgICAgICB0cmVlIGlzX3ZsYV9ub2RlID0gZ2ltcGxlX2NhbGxfYXJnIChzdG10LCAyKTsK KyAgICAgIGJvb2wgaXNfdmxhID0gKGJvb2wpIFRSRUVfSU5UX0NTVF9MT1cgKGlzX3ZsYV9ub2Rl KTsKKworICAgICAgaWYgKFRSRUVfQ09ERSAobGhzKSA9PSBTU0FfTkFNRSkKKyAgICAgICBsaHMg PSBTU0FfTkFNRV9WQVIgKGxocyk7CisKKyAgICAgIHBvbHlfdWludDY0IHNpemVfZnJvbV9hcmcw LCBzaXplX2Zyb21fbGhzOworICAgICAgYm9vbCBpc19jb25zdGFudF9zaXplX2FyZzAgPSBwb2x5 X2ludF90cmVlX3AgKHNpemVfb2ZfYXJnMCwKKwkJCQkJCSAgICAmc2l6ZV9mcm9tX2FyZzApOwor ICAgICAgYm9vbCBpc19jb25zdGFudF9zaXplX2xocyA9IHBvbHlfaW50X3RyZWVfcCAoc2l6ZV9v Zl9saHMsCisJCQkJCQkgICAmc2l6ZV9mcm9tX2xocyk7CisgICAgICBpZiAoIWlzX3ZsYSkKKwl7 CisJICBpZiAoIWlzX2NvbnN0YW50X3NpemVfYXJnMCkKKwkgICAgeworCSAgICAgIGVycm9yICgi JTxERUZGRVJFRF9JTklUJT4gY2FsbHMgZm9yIG5vbi1WTEEgc2hvdWxkIGhhdmUgIgorCQkgICAg ICJjb25zdGFudCBzaXplIGZvciB0aGUgZmlyc3QgYXJndW1lbnQiKTsKKwkgICAgICByZXR1cm4g dHJ1ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAoIWlzX2NvbnN0YW50X3NpemVfbGhzKQorCSAgICB7 CisJICAgICAgZXJyb3IgKCIlPERFRkZFUkVEX0lOSVQlPiBjYWxscyBmb3Igbm9uLVZMQSBzaG91 bGQgaGF2ZSAiCisJCSAgICAgImNvbnN0YW50IHNpemUgZm9yIHRoZSBMSFMgIik7CisJICAgICAg cmV0dXJuIHRydWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKG1heWJlX25lIChzaXplX2Zyb21fYXJn MCwgc2l6ZV9mcm9tX2xocykpCisJICAgIHsKKwkgICAgICBlcnJvciAoIiU8REVGRkVSRURfSU5J VCU+IGNhbGxzIGZvciBub24tVkxBIHNob3VsZCBoYXZlIHNhbWUgIgorCQkgICAgICJjb25zdGFu dCBzaXplIGZvciB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIExIUyIpOworCSAgICAgIHJldHVybiB0 cnVlOworCSAgICB9CisJfQorICAgIH0KKworICAvKiBXZSB3aWxsIG5vdCB2ZXJpZnkgdGhlIGFy Z3VtZW50cyBmb3IgdGhlIGNhbGxzIHRvIC5ERUZFUlJFRF9JTklULgorICAgICBTdWNoIGNhbGwg aXMgbm90IGEgcmVhbCBjYWxsLCBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yIGEgbGF0ZXIKKyAgICAg aW5pdGlhbGl6YXRpb24gZHVyaW5nIGV4cGFuZCBwaGFzZS4KKyAgICAgVGhpcyBpcyBtYWlubHkg dG8gYXZvaWQgYXNzZXJ0aW9uIGZhaWx1cmUgZm9yIHRoZSBmb2xsb3dpbmcKKyAgICAgY2FzZToK KworICAgICB1bmlfdmFyID0gLkRFRkVSUkVEX0lOSVQgKHZhcl9zaXplLCBJTklUX1RZUEUsIGlz X3ZsYSk7CisgICAgIGZvbyAoJnVuaV92YXIpOworCisgICAgIGluIHRoZSBhYm92ZSwgdGhlIHVu aW5pdGlhbGl6ZWQgYXV0byB2YXJpYWJsZSAidW5pX3ZhciIgaXMKKyAgICAgYWRkcmVzc2FibGUs IHRoZXJlZm9yZSBzaG91bGQgbm90IGJlIGluIHJlZ2lzdGVycywgcmVzdWx0aW5nCisgICAgIHRo ZSBhc3NlcnRpb24gZmFpbHVyZSBpbiB0aGUgZm9sbG93aW5nIGFyZ3VtZW50IHZlcmlmaWNhdGlv bi4gICovCisgIGlmIChnaW1wbGVfY2FsbF9pbnRlcm5hbF9wIChzdG10LCBJRk5fREVGRVJSRURf SU5JVCkpCisgICAgcmV0dXJuIGZhbHNlOworCiAgIC8qID8/PyAgVGhlIEMgZnJvbnRlbmQgcGFz c2VzIHVucHJvbW90ZWQgYXJndW1lbnRzIGluIGNhc2UgaXQKICAgICAgZGlkbid0IHNlZSBhIGZ1 bmN0aW9uIGRlY2xhcmF0aW9uIGJlZm9yZSB0aGUgY2FsbC4gIFNvIGZvciBub3cKICAgICAgbGVh dmUgdGhlIGNhbGwgYXJndW1lbnRzIG1vc3RseSB1bnZlcmlmaWVkLiAgT25jZSB3ZSBnaW1wbGlm eQogICAgICB1bml0LWF0LWEtdGltZSB3ZSBoYXZlIGEgY2hhbmNlIHRvIGZpeCB0aGlzLiAgKi8K IAotICBmb3IgKGkgPSAwOyBpIDwgZ2ltcGxlX2NhbGxfbnVtX2FyZ3MgKHN0bXQpOyArK2kpCi0g ICAgewotICAgICAgdHJlZSBhcmcgPSBnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIGkpOwotICAgICAg aWYgKChpc19naW1wbGVfcmVnX3R5cGUgKFRSRUVfVFlQRSAoYXJnKSkKLQkgICAmJiAhaXNfZ2lt cGxlX3ZhbCAoYXJnKSkKLQkgIHx8ICghaXNfZ2ltcGxlX3JlZ190eXBlIChUUkVFX1RZUEUgKGFy ZykpCi0JICAgICAgJiYgIWlzX2dpbXBsZV9sdmFsdWUgKGFyZykpKQotCXsKLQkgIGVycm9yICgi aW52YWxpZCBhcmd1bWVudCB0byBnaW1wbGUgY2FsbCIpOwotCSAgZGVidWdfZ2VuZXJpY19leHBy IChhcmcpOwotCSAgcmV0dXJuIHRydWU7Ci0JfQotICAgICAgaWYgKCFpc19naW1wbGVfcmVnIChh cmcpKQotCXsKLQkgIGlmIChUUkVFX0NPREUgKGFyZykgPT0gV0lUSF9TSVpFX0VYUFIpCi0JICAg IGFyZyA9IFRSRUVfT1BFUkFORCAoYXJnLCAwKTsKLQkgIGlmICh2ZXJpZnlfdHlwZXNfaW5fZ2lt cGxlX3JlZmVyZW5jZSAoYXJnLCBmYWxzZSkpCisgIGVsc2UgCisgICAgZm9yIChpID0gMDsgaSA8 IGdpbXBsZV9jYWxsX251bV9hcmdzIChzdG10KTsgKytpKQorICAgICAgeworCXRyZWUgYXJnID0g Z2ltcGxlX2NhbGxfYXJnIChzdG10LCBpKTsKKwlpZiAoKGlzX2dpbXBsZV9yZWdfdHlwZSAoVFJF RV9UWVBFIChhcmcpKQorCSAgICAgJiYgIWlzX2dpbXBsZV92YWwgKGFyZykpCisJICAgIHx8ICgh aXNfZ2ltcGxlX3JlZ190eXBlIChUUkVFX1RZUEUgKGFyZykpCisJCSYmICFpc19naW1wbGVfbHZh bHVlIChhcmcpKSkKKwkgIHsKKwkgICAgZXJyb3IgKCJpbnZhbGlkIGFyZ3VtZW50IHRvIGdpbXBs ZSBjYWxsIik7CisJICAgIGRlYnVnX2dlbmVyaWNfZXhwciAoYXJnKTsKIAkgICAgcmV0dXJuIHRy dWU7Ci0JfQotICAgIH0KKwkgIH0KKwlpZiAoIWlzX2dpbXBsZV9yZWcgKGFyZykpCisJICB7CisJ ICAgIGlmIChUUkVFX0NPREUgKGFyZykgPT0gV0lUSF9TSVpFX0VYUFIpCisJICAgICAgYXJnID0g VFJFRV9PUEVSQU5EIChhcmcsIDApOworCSAgICBpZiAodmVyaWZ5X3R5cGVzX2luX2dpbXBsZV9y ZWZlcmVuY2UgKGFyZywgZmFsc2UpKQorCSAgICAgIHJldHVybiB0cnVlOworCSAgfQorICAgICAg fQogCiAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNyYS5jIGIvZ2Nj L3RyZWUtc3JhLmMKaW5kZXggYzA1ZDIyZjNlOGYxLi4zNTA1MWQ3YzZiOTYgMTAwNjQ0Ci0tLSBh L2djYy90cmVlLXNyYS5jCisrKyBiL2djYy90cmVlLXNyYS5jCkBAIC0zODQsNiArMzg0LDEzIEBA IHN0YXRpYyBzdHJ1Y3QKIAogICAvKiBOdW1iYmVyIG9mIGNvbXBvbmVudHMgY3JlYXRlZCB3aGVu IHNwbGl0dGluZyBhZ2dyZWdhdGUgcGFyYW1ldGVycy4gICovCiAgIGludCBwYXJhbV9yZWR1Y3Rp b25zX2NyZWF0ZWQ7CisKKyAgLyogTnVtYmVyIG9mIGRlZmVycmVkX2luaXQgY2FsbHMgdGhhdCBh cmUgbW9kaWZpZWQuICAqLworICBpbnQgZGVmZXJyZWRfaW5pdDsKKworICAvKiBOdW1iZXIgb2Yg ZGVmZXJyZWRfaW5pdCBjYWxscyB0aGF0IGFyZSBjcmVhdGVkIGJ5CisgICAgIGdlbmVyYXRlX3N1 YnRyZWVfZGVmZXJyZWRfaW5pdC4gICovCisgIGludCBzdWJ0cmVlX2RlZmVycmVkX2luaXQ7CiB9 IHNyYV9zdGF0czsKIAogc3RhdGljIHZvaWQKQEAgLTQwOTYsNiArNDEwMywxMTAgQEAgZ2V0X3Jl cGxfZGVmYXVsdF9kZWZfc3NhX25hbWUgKHN0cnVjdCBhY2Nlc3MgKnJhY2MsIHRyZWUgcmVnX3R5 cGUpCiAgIHJldHVybiBnZXRfb3JfY3JlYXRlX3NzYV9kZWZhdWx0X2RlZiAoY2Z1biwgcmFjYy0+ cmVwbGFjZW1lbnRfZGVjbCk7CiB9CiAKKworLyogR2VuZXJhdGUgc3RhdGVtZW50cyB0byBjYWxs IC5ERUZFUlJFRF9JTklUIHRvIGluaXRpYWxpemUgc2NhbGFyIHJlcGxhY2VtZW50cworICAgb2Yg YWNjZXNzZXMgd2l0aGluIGEgc3VidHJlZSBBQ0NFU1M7IGFsbCBpdHMgY2hpbGRyZW4sIHNpYmxp bmdzIGFuZCB0aGVpcgorICAgY2hpbGRyZW4gYXJlIHRvIGJlIHByb2Nlc3NlZC4KKyAgIEdTSSBp cyBhIHN0YXRlbWVudCBpdGVyYXRvciB1c2VkIHRvIHBsYWNlIHRoZSBuZXcgc3RhdGVtZW50cy4g ICovCitzdGF0aWMgdm9pZAorZ2VuZXJhdGVfc3VidHJlZV9kZWZlcnJlZF9pbml0IChzdHJ1Y3Qg YWNjZXNzICphY2Nlc3MsCisJCQkJdHJlZSBpbml0X3R5cGUsCisJCQkJdHJlZSBpc192bGEsCisJ CQkJZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKKwkJCQlsb2NhdGlvbl90IGxvYykKK3sKKyAg ZG8KKyAgICB7CisgICAgICBpZiAoYWNjZXNzLT5ncnBfdG9fYmVfcmVwbGFjZWQpCisJeworCSAg dHJlZSByZXBsID0gZ2V0X2FjY2Vzc19yZXBsYWNlbWVudCAoYWNjZXNzKTsKKwkgIGdpbXBsZSAq Y2FsbAorCSAgICA9IGdpbXBsZV9idWlsZF9jYWxsX2ludGVybmFsIChJRk5fREVGRVJSRURfSU5J VCwgMywKKwkJCQkJICBUWVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFIChyZXBsKSksCisJCQkJCSAg aW5pdF90eXBlLCBpc192bGEpOworCSAgZ2ltcGxlX2NhbGxfc2V0X2xocyAoY2FsbCwgcmVwbCk7 CisJICBnc2lfaW5zZXJ0X2JlZm9yZSAoZ3NpLCBjYWxsLCBHU0lfU0FNRV9TVE1UKTsKKwkgIHVw ZGF0ZV9zdG10IChjYWxsKTsKKwkgIGdpbXBsZV9zZXRfbG9jYXRpb24gKGNhbGwsIGxvYyk7CisJ ICBzcmFfc3RhdHMuc3VidHJlZV9kZWZlcnJlZF9pbml0Kys7CisJfQorICAgICAgZWxzZSBpZiAo YWNjZXNzLT5ncnBfdG9fYmVfZGVidWdfcmVwbGFjZWQpCisJeworCSAgdHJlZSBkcmVwbCA9IGdl dF9hY2Nlc3NfcmVwbGFjZW1lbnQgKGFjY2Vzcyk7CisJICB0cmVlIGNhbGwgPSBidWlsZF9jYWxs X2V4cHJfaW50ZXJuYWxfbG9jCisJCSAgICAgKFVOS05PV05fTE9DQVRJT04sIElGTl9ERUZFUlJF RF9JTklULAorCQkgICAgICBUUkVFX1RZUEUgKGRyZXBsKSwgMywKKwkJICAgICAgVFlQRV9TSVpF X1VOSVQgKFRSRUVfVFlQRSAoZHJlcGwpKSwKKwkJICAgICAgaW5pdF90eXBlLCBpc192bGEpOwor CSAgZ2RlYnVnICpkcyA9IGdpbXBsZV9idWlsZF9kZWJ1Z19iaW5kIChkcmVwbCwgY2FsbCwKKwkJ CQkJCWdzaV9zdG10ICgqZ3NpKSk7CisJICBnc2lfaW5zZXJ0X2JlZm9yZSAoZ3NpLCBkcywgR1NJ X1NBTUVfU1RNVCk7CisJfQorICAgICAgaWYgKGFjY2Vzcy0+Zmlyc3RfY2hpbGQpCisJZ2VuZXJh dGVfc3VidHJlZV9kZWZlcnJlZF9pbml0IChhY2Nlc3MtPmZpcnN0X2NoaWxkLCBpbml0X3R5cGUs CisJCQkJCWlzX3ZsYSwgZ3NpLCBsb2MpOworCisgICAgICBhY2Nlc3MgPSBhY2Nlc3MgLT5uZXh0 X3NpYmxpbmc7CisgICAgfQorICB3aGlsZSAoYWNjZXNzKTsKK30KKworLyogRm9yIGEgY2FsbCB0 byAuREVGRVJSRURfSU5JVDoKKyAgIHZhciA9IC5ERUZFUlJFRF9JTklUIChzaXplX29mX3Zhciwg aW5pdF90eXBlLCBpc192bGEpOworICAgZXhhbWluZSB0aGUgTEhTIHZhcmlhYmxlIFZBUiBhbmQg cmVwbGFjZSBpdCB3aXRoIGEgc2NhbGFyIHJlcGxhY2VtZW50IGlmCisgICB0aGVyZSBpcyBvbmUs IGFsc28gcmVwbGFjZSB0aGUgUkhTIGNhbGwgdG8gYSBjYWxsIHRvIC5ERUZFUlJFRF9JTklUIG9m CisgICB0aGUgY29ycmVzcG9uZGluZyBzY2FsYXIgcmVsYWNlbWVudCB2YXJpYWJsZS4gIEV4YW1p bmUgdGhlIHN1YnRyZWUgYW5kCisgICBkbyB0aGUgc2NhbGFyIHJlcGxhY2VtZW50cyBpbiB0aGUg c3VidHJlZSB0b28uICBTVE1UIGlzIHRoZSBjYWxsLCBHU0kgaXMKKyAgIHRoZSBzdGF0bWVudCBp dGVyYXRvciB0byBwbGFjZSBuZXdseSBjcmVhdGVkIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBl bnVtIGFzc2lnbm1lbnRfbW9kX3Jlc3VsdAorc3JhX21vZGlmeV9kZWZlcnJlZF9pbml0IChnaW1w bGUgKnN0bXQsIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCit7CisgIHRyZWUgbGhzID0gZ2lt cGxlX2NhbGxfbGhzIChzdG10KTsKKyAgdHJlZSBpbml0X3R5cGUgPSBnaW1wbGVfY2FsbF9hcmcg KHN0bXQsIDEpOworICB0cmVlIGlzX3ZsYSA9IGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgMik7CisK KyAgc3RydWN0IGFjY2VzcyAqbGhzX2FjY2VzcyA9IGdldF9hY2Nlc3NfZm9yX2V4cHIgKGxocyk7 CisgIGlmICghbGhzX2FjY2VzcykKKyAgICByZXR1cm4gU1JBX0FNX05PTkU7CisKKyAgbG9jYXRp b25fdCBsb2MgPSBnaW1wbGVfbG9jYXRpb24gKHN0bXQpOworCisgIGlmIChsaHNfYWNjZXNzLT5n cnBfdG9fYmVfcmVwbGFjZWQpCisgICAgeworICAgICAgdHJlZSBsaHNfcmVwbCA9IGdldF9hY2Nl c3NfcmVwbGFjZW1lbnQgKGxoc19hY2Nlc3MpOworICAgICAgZ2ltcGxlX2NhbGxfc2V0X2xocyAo c3RtdCwgbGhzX3JlcGwpOworICAgICAgdHJlZSBhcmcwX3JlcGwgPSBUWVBFX1NJWkVfVU5JVCAo VFJFRV9UWVBFIChsaHNfcmVwbCkpOworICAgICAgZ2ltcGxlX2NhbGxfc2V0X2FyZyAoc3RtdCwg MCwgYXJnMF9yZXBsKTsKKyAgICAgIHNyYV9zdGF0cy5kZWZlcnJlZF9pbml0Kys7CisgICAgfQor ICBlbHNlIGlmIChsaHNfYWNjZXNzLT5ncnBfdG9fYmVfZGVidWdfcmVwbGFjZWQpCisgICAgewor ICAgICAgdHJlZSBsaHNfZHJlcGwgPSBnZXRfYWNjZXNzX3JlcGxhY2VtZW50IChsaHNfYWNjZXNz KTsKKyAgICAgIHRyZWUgY2FsbCA9IGJ1aWxkX2NhbGxfZXhwcl9pbnRlcm5hbF9sb2MKKwkJICAo VU5LTk9XTl9MT0NBVElPTiwgSUZOX0RFRkVSUkVEX0lOSVQsCisJCSAgVFJFRV9UWVBFIChsaHNf ZHJlcGwpLCAzLAorCQkgIFRZUEVfU0laRV9VTklUIChUUkVFX1RZUEUgKGxoc19kcmVwbCkpLAor CQkgIGluaXRfdHlwZSwgaXNfdmxhKTsKKyAgICAgIGdkZWJ1ZyAqZHMgPSBnaW1wbGVfYnVpbGRf ZGVidWdfYmluZCAobGhzX2RyZXBsLCBjYWxsLAorCQkJCQkgICAgZ3NpX3N0bXQgKCpnc2kpKTsK KyAgICAgIGdzaV9pbnNlcnRfYmVmb3JlIChnc2ksIGRzLCBHU0lfU0FNRV9TVE1UKTsKKyAgICB9 CisKKyAgaWYgKGxoc19hY2Nlc3MtPmZpcnN0X2NoaWxkKQorICAgIGdlbmVyYXRlX3N1YnRyZWVf ZGVmZXJyZWRfaW5pdCAobGhzX2FjY2Vzcy0+Zmlyc3RfY2hpbGQsCisJCQkJICAgIGluaXRfdHlw ZSwgaXNfdmxhLCBnc2ksIGxvYyk7CisgIGlmIChsaHNfYWNjZXNzLT5ncnBfY292ZXJlZCkKKyAg ICB7CisgICAgICB1bmxpbmtfc3RtdF92ZGVmIChzdG10KTsKKyAgICAgIGdzaV9yZW1vdmUgKGdz aSwgdHJ1ZSk7CisgICAgICByZWxlYXNlX2RlZnMgKHN0bXQpOworICAgICAgcmV0dXJuIFNSQV9B TV9SRU1PVkVEOworICAgIH0KKworICByZXR1cm4gU1JBX0FNX01PRElGSUVEOworfQorCiAvKiBF eGFtaW5lIGJvdGggc2lkZXMgb2YgdGhlIGFzc2lnbm1lbnQgc3RhdGVtZW50IHBvaW50ZWQgdG8g YnkgU1RNVCwgcmVwbGFjZQogICAgdGhlbSB3aXRoIGEgc2NhbGFyZSByZXBsYWNlbWVudCBpZiB0 aGVyZSBpcyBvbmUgYW5kIGdlbmVyYXRlIGNvcHlpbmcgb2YKICAgIHJlcGxhY2VtZW50cyBpZiBz Y2FsYXJpemVkIGFnZ3JlZ2F0ZXMgaGF2ZSBiZWVuIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQuICBH U0kKQEAgLTQ0NjAsMTcgKzQ1NzEsMjcgQEAgc3JhX21vZGlmeV9mdW5jdGlvbl9ib2R5ICh2b2lk KQogCSAgICAgIGJyZWFrOwogCiAJICAgIGNhc2UgR0lNUExFX0NBTEw6Ci0JICAgICAgLyogT3Bl cmFuZHMgbXVzdCBiZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBsaHMuICAqLwotCSAgICAgIGZvciAo aSA9IDA7IGkgPCBnaW1wbGVfY2FsbF9udW1fYXJncyAoc3RtdCk7IGkrKykKKwkgICAgICAvKiBI YW5kbGUgY2FsbHMgdG8gLkRFRkVSUkVEX0lOSVQgc3BlY2lhbGx5LiAgKi8KKwkgICAgICBpZiAo Z2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAoc3RtdCwgSUZOX0RFRkVSUkVEX0lOSVQpKQogCQl7Ci0J CSAgdCA9IGdpbXBsZV9jYWxsX2FyZ19wdHIgKHN0bXQsIGkpOwotCQkgIG1vZGlmaWVkIHw9IHNy YV9tb2RpZnlfZXhwciAodCwgJmdzaSwgZmFsc2UpOworCQkgIGFzc2lnbl9yZXN1bHQgPSBzcmFf bW9kaWZ5X2RlZmVycmVkX2luaXQgKHN0bXQsICZnc2kpOworCQkgIG1vZGlmaWVkIHw9IGFzc2ln bl9yZXN1bHQgPT0gU1JBX0FNX01PRElGSUVEOworCQkgIGRlbGV0ZWQgPSBhc3NpZ25fcmVzdWx0 ID09IFNSQV9BTV9SRU1PVkVEOwogCQl9Ci0KLQkgICAgICBpZiAoZ2ltcGxlX2NhbGxfbGhzIChz dG10KSkKKwkgICAgICBlbHNlCiAJCXsKLQkJICB0ID0gZ2ltcGxlX2NhbGxfbGhzX3B0ciAoc3Rt dCk7Ci0JCSAgbW9kaWZpZWQgfD0gc3JhX21vZGlmeV9leHByICh0LCAmZ3NpLCB0cnVlKTsKKwkJ ICAvKiBPcGVyYW5kcyBtdXN0IGJlIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGxocy4gICovCisJCSAg Zm9yIChpID0gMDsgaSA8IGdpbXBsZV9jYWxsX251bV9hcmdzIChzdG10KTsgaSsrKQorCQkgICAg eworCQkgICAgICB0ID0gZ2ltcGxlX2NhbGxfYXJnX3B0ciAoc3RtdCwgaSk7CisJCSAgICAgIG1v ZGlmaWVkIHw9IHNyYV9tb2RpZnlfZXhwciAodCwgJmdzaSwgZmFsc2UpOworCQkgICAgfQorCisJ ICAgICAgCSAgaWYgKGdpbXBsZV9jYWxsX2xocyAoc3RtdCkpCisJCSAgICB7CisJCSAgICAgIHQg PSBnaW1wbGVfY2FsbF9saHNfcHRyIChzdG10KTsKKwkJICAgICAgbW9kaWZpZWQgfD0gc3JhX21v ZGlmeV9leHByICh0LCAmZ3NpLCB0cnVlKTsKKwkJICAgIH0KIAkJfQogCSAgICAgIGJyZWFrOwog CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2Etc3RydWN0YWxpYXMuYyBiL2djYy90cmVlLXNzYS1z dHJ1Y3RhbGlhcy5jCmluZGV4IDcxNjM0MzhlMjNkMy4uNjhlZDE2MzI2ZjMzIDEwMDY0NAotLS0g YS9nY2MvdHJlZS1zc2Etc3RydWN0YWxpYXMuYworKysgYi9nY2MvdHJlZS1zc2Etc3RydWN0YWxp YXMuYwpAQCAtNDg5Myw2ICs0ODkzLDkgQEAgZmluZF9mdW5jX2FsaWFzZXNfZm9yX2NhbGwgKHN0 cnVjdCBmdW5jdGlvbiAqZm4sIGdjYWxsICp0KQogICAgICAgJiYgZmluZF9mdW5jX2FsaWFzZXNf Zm9yX2J1aWx0aW5fY2FsbCAoZm4sIHQpKQogICAgIHJldHVybjsKIAorICBpZiAoZ2ltcGxlX2Nh bGxfaW50ZXJuYWxfcCAodCwgSUZOX0RFRkVSUkVEX0lOSVQpKQorICAgIHJldHVybjsKKwogICBm aSA9IGdldF9maV9mb3JfY2FsbGVlICh0KTsKICAgaWYgKCFpbl9pcGFfbW9kZQogICAgICAgfHwg KGZpLT5kZWNsICYmIGZuZGVjbCAmJiAhZmktPmlzX2ZuX2luZm8pKQpkaWZmIC0tZ2l0IGEvZ2Nj L3RyZWUtc3NhLXVuaW5pdC5jIGIvZ2NjL3RyZWUtc3NhLXVuaW5pdC5jCmluZGV4IDk5NDQyZDdm OTc1Yy4uYTE1NWIyNWM1YzIzIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2EtdW5pbml0LmMKKysr IGIvZ2NjL3RyZWUtc3NhLXVuaW5pdC5jCkBAIC0xNTIsNiArMTUyLDQyIEBAIHdhcm5fdW5pbml0 IChlbnVtIG9wdF9jb2RlIHdjLCB0cmVlIHQsIHRyZWUgZXhwciwgdHJlZSB2YXIsCiAgIGlmIChp c19naW1wbGVfYXNzaWduIChjb250ZXh0KQogICAgICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNfY29k ZSAoY29udGV4dCkgPT0gQ09NUExFWF9FWFBSKQogICAgIHJldHVybjsKKworICAvKiBJZ25vcmUg UkVBTFBBUlRfRVhQUiBvciBJTUFHUEFSVF9FWFBSIGlmIGl0cyBvcGVyYW5kIGlzIGEgY2FsbCB0 bworICAgICAuREVGRVJSRURfSU5JVC4gIFRoaXMgaXMgZm9yIGhhbmRsaW5nIHRoZSBmb2xsb3dp bmcgY2FzZSBjb3JyZWN0bHk6CisKKyAgMSB0eXBlZGVmIF9Db21wbGV4IGZsb2F0IEM7CisgIDIg QyBmb28gKGludCBjb25kKQorICAzIHsKKyAgNCAgIEMgZjsKKyAgNSAgIF9faW1hZ19fIGYgPSAw OworICA2ICAgaWYgKGNvbmQpCisgIDcgICAgIHsKKyAgOCAgICAgICBfX3JlYWxfXyBmID0gMTsK KyAgOSAgICAgICByZXR1cm4gZjsKKyAxMCAgICAgfQorIDExICAgcmV0dXJuIGY7CisgMTIgfQor CisgICAgd2l0aCAtZnRyaXZpYWwtYXV0by12YXItaW5pdCwgY29tcGlsZXIgd2lsbCBpbnNlcnQg dGhlIGZvbGxvd2luZworICAgIGFydGlmaWNpYWwgaW5pdGlhbGl6YXRpb24gYXQgbGluZSA0Ogor ICBmID0gLkRFRkVSUkVEX0lOSVQgKGYsIDIpOworICBfMSA9IFJFQUxQQVJUX0VYUFIgPGY+Owor CisgICAgd2l0aG91dCB0aGUgZm9sbG93aW5nIHNwZWNpYWwgaGFuZGxpbmcsIF8xID0gUkVBTFBB UlRfRVhQUiA8Zj4gd2lsbAorICAgIGJlIHRyZWF0ZWQgYXMgdGhlIHVuaW5pdGlhbGl6ZWQgdXNl IHBvaW50LCB3aGljaCBpcyBpbmNvcnJlY3QuICh0aGUKKyAgICByZWFsIHVuaW5pdGlhbGl6ZWQg dXNlIHBvaW50IGlzIGF0IGxpbmUgMTEpLiAgKi8KKyAgaWYgKGlzX2dpbXBsZV9hc3NpZ24gKGNv bnRleHQpCisgICAgICAmJiAoZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoY29udGV4dCkgPT0gUkVB TFBBUlRfRVhQUgorCSAgfHwgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoY29udGV4dCkgPT0gSU1B R1BBUlRfRVhQUikpCisgICAgeworICAgICAgdHJlZSB2ID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChj b250ZXh0KTsKKyAgICAgIGlmIChUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAodiwgMCkpID09IFNT QV9OQU1FCisJICAmJiBnaW1wbGVfY2FsbF9pbnRlcm5hbF9wIChTU0FfTkFNRV9ERUZfU1RNVCAo VFJFRV9PUEVSQU5EICh2LCAwKSksCisJCQkJICAgICBJRk5fREVGRVJSRURfSU5JVCkpCisJcmV0 dXJuOworICAgIH0KKwogICBpZiAoIWhhc191bmRlZmluZWRfdmFsdWVfcCAodCkpCiAgICAgcmV0 dXJuOwogCkBAIC0yMjcsNiArMjYzLDExIEBAIGNoZWNrX2RlZnMgKGFvX3JlZiAqcmVmLCB0cmVl IHZkZWYsIHZvaWQgKmRhdGFfKQogICBjaGVja19kZWZzX2RhdGEgKmRhdGEgPSAoY2hlY2tfZGVm c19kYXRhICopZGF0YV87CiAgIGdpbXBsZSAqZGVmX3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAo dmRlZik7CiAKKyAgLyogSWdub3JlIHRoZSB2ZGVmIGlmIHRoZSBkZWZpbml0aW9uIHN0YXRlbWVu dCBpcyBhIGNhbGwKKyAgICAgdG8gLkRFRkVSUkVEX0lOSVQgZnVuY3Rpb24uICAqLworICBpZiAo Z2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAoZGVmX3N0bXQsIElGTl9ERUZFUlJFRF9JTklUKSkKKyAg ICByZXR1cm4gZmFsc2U7CisKICAgLyogVGhlIEFTQU5fTUFSSyBpbnRyaW5zaWMgZG9lc24ndCBt b2RpZnkgdGhlIHZhcmlhYmxlLiAgKi8KICAgaWYgKGlzX2dpbXBsZV9jYWxsIChkZWZfc3RtdCkK ICAgICAgICYmIGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKGRlZl9zdG10LCBJRk5fQVNBTl9NQVJL KSkKQEAgLTY0Miw2ICs2ODMsMTIgQEAgd2Fybl91bmluaXRpYWxpemVkX3ZhcnMgKGJvb2wgd21h eWJlX3VuaW5pdCkKIAkgIHNzYV9vcF9pdGVyIG9wX2l0ZXI7CiAJICB0cmVlIHVzZTsKIAorCSAg LyogVGhlIGNhbGwgaXMgYW4gYXJ0aWZpY2lhbCB1c2UsIHdpbGwgbm90IHByb3ZpZGUgbWVhbmlu Z2Z1bAorCSAgICAgZXJyb3IgbWVzc2FnZS4gIElmIHRoZSByZXN1bHQgb2YgdGhlIGNhbGwgaXMg dXNlZCBzb21ld2hlcmUKKwkgICAgIGVsc2UsIHdlIHdhcm4gdGhlcmUgaW5zdGVhZC4gICovCisJ ICBpZiAoZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAoc3RtdCwgSUZOX0RFRkVSUkVEX0lOSVQpKQor CSAgICBjb250aW51ZTsKKwogCSAgaWYgKGlzX2dpbXBsZV9kZWJ1ZyAoc3RtdCkpCiAJICAgIGNv bnRpbnVlOwogCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EuYyBiL2djYy90cmVlLXNzYS5jCmlu ZGV4IDRjYzQwMGQzYzJlYi4uMGZiYTQwNGJhYmU5IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2Eu YworKysgYi9nY2MvdHJlZS1zc2EuYwpAQCAtMTMyNSw2ICsxMzI1LDQ2IEBAIHNzYV91bmRlZmlu ZWRfdmFsdWVfcCAodHJlZSB0LCBib29sIHBhcnRpYWwpCiAgIGlmIChnaW1wbGVfbm9wX3AgKGRl Zl9zdG10KSkKICAgICByZXR1cm4gdHJ1ZTsKIAorICAvKiBUaGUgdmFsdWUgaXMgdW5kZWZpbmVk IGlmIHRoZSBkZWZpbml0aW9uIHN0YXRlbWVudCBpcyBhIGNhbGwKKyAgICAgdG8gLkRFRkVSUkVE X0lOSVQgZnVuY3Rpb24uICAqLworICBpZiAoZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAoZGVmX3N0 bXQsIElGTl9ERUZFUlJFRF9JTklUKSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICAvKiBUaGUgdmFs dWUgaXMgcGFydGlhbGx5IHVuZGVmaW5lZCBpZiB0aGUgZGVmaW5pdGlvbiBzdGF0ZW1lbnQgaXMK KyAgICAgYSBSRUFMUEFSVF9FWFBSIG9yIElNQUdQQVJUX0VYUFIgYW5kIGl0cyBvcGVyYW5kIGlz IGRlZmluZWQgYnkKKyAgICAgdGhlIGNhbGwgdG8gLkRFRkVSUkVEX0lOSVQgZnVuY3Rpb24uICBU aGlzIGlzIGZvciBoYW5kbGluZyB0aGUKKyAgICAgZm9sbG93aW5nIGNhc2U6CisKKyAgMSB0eXBl ZGVmIF9Db21wbGV4IGZsb2F0IEM7CisgIDIgQyBmb28gKGludCBjb25kKQorICAzIHsKKyAgNCAg IEMgZjsKKyAgNSAgIF9faW1hZ19fIGYgPSAwOworICA2ICAgaWYgKGNvbmQpCisgIDcgICAgIHsK KyAgOCAgICAgICBfX3JlYWxfXyBmID0gMTsKKyAgOSAgICAgICByZXR1cm4gZjsKKyAxMCAgICAg fQorIDExICAgcmV0dXJuIGY7CisgMTIgfQorCisgICAgd2l0aCAtZnRyaXZpYWwtYXV0by12YXIt aW5pdCwgY29tcGlsZXIgd2lsbCBpbnNlcnQgdGhlIGZvbGxvd2luZworICAgIGFydGlmaWNpYWwg aW5pdGlhbGl6YXRpb246CisgIGYgPSAuREVGRVJSRURfSU5JVCAoZiwgMik7CisgIF8xID0gUkVB TFBBUlRfRVhQUiA8Zj47CisKKyAgICB3ZSBzaG91bGQgdHJlYXQgdGhlIGRlZmluaXRpb24gXzEg PSBSRUFMUEFSVF9FWFBSIDxmPiBhcyB1bmRlZmluZWQuICAqLworICBpZiAocGFydGlhbCAmJiBp c19naW1wbGVfYXNzaWduIChkZWZfc3RtdCkKKyAgICAgICYmIChnaW1wbGVfYXNzaWduX3Joc19j b2RlIChkZWZfc3RtdCkgPT0gUkVBTFBBUlRfRVhQUgorCSAgfHwgZ2ltcGxlX2Fzc2lnbl9yaHNf Y29kZSAoZGVmX3N0bXQpID09IElNQUdQQVJUX0VYUFIpKQorICAgIHsKKyAgICAgIHRyZWUgcmVh bF9pbWFnX3BhcnQgPSBUUkVFX09QRVJBTkQgKGdpbXBsZV9hc3NpZ25fcmhzMSAoZGVmX3N0bXQp LCAwKTsKKyAgICAgIGlmIChUUkVFX0NPREUgKHJlYWxfaW1hZ19wYXJ0KSA9PSBTU0FfTkFNRQor CSAmJiBnaW1wbGVfY2FsbF9pbnRlcm5hbF9wIChTU0FfTkFNRV9ERUZfU1RNVCAocmVhbF9pbWFn X3BhcnQpLAorCQkJCSAgICBJRk5fREVGRVJSRURfSU5JVCkpCisJcmV0dXJuIHRydWU7CisgICAg fQorCiAgIC8qIENoZWNrIGlmIHRoZSBjb21wbGV4IHdhcyBub3Qgb25seSBwYXJ0aWFsbHkgZGVm aW5lZC4gICovCiAgIGlmIChwYXJ0aWFsICYmIGlzX2dpbXBsZV9hc3NpZ24gKGRlZl9zdG10KQog ICAgICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoZGVmX3N0bXQpID09IENPTVBMRVhfRVhQ UikKLS0gCjIuMjcuMAoK --_002_A1E698BD2DFB486CAD7C9B4300A9AB4Coraclecom_--