Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wCeMJ-002Bwf-0f for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Apr 2026 14:03:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wCeMG-00CCf6-1R for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Apr 2026 14:03:17 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wCeMF-00CCex-1i for pgsql-hackers@lists.postgresql.org; Tue, 14 Apr 2026 14:03:17 +0000 Received: from mail-westeuropeazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c201::3] helo=AS8PR04CU009.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wCeMC-00000000yw2-30NW for pgsql-hackers@lists.postgresql.org; Tue, 14 Apr 2026 14:03:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HRogPOFG27i2rj7MUTpm0EufW7PumKswQCH8qmBZULGyiGUixRQzSYHN1f3IgUJxeeV6a7uDybiRH+ocVHmtfl6qfWnkrCkLxxGtrab+Vtas6AuW+UtbZwre7j5iTx2jQJCeGlMqAcs4lBcVw3E8tITUX07rvAntGujGVS9pzsLv6j0uiIGSRRFmK3noU/cjJAPgffU/RiI6flfoLzxwGN6FTDkKL6jM31cPnyYlM+W8mKanYAMRs0v8g3SPvgO77lvmMpTuBzqkdSXwi8ngc9i3XV6z6n9/lo03pnPzGZ0W7R8WdGnr6+kaKsYhbKx86+eI2bVghdg2JI5wg8CGhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bLYUUwvYLZEmJ0aTKMhPoz4J4vSit80hIY705SgG04c=; b=U/lC5pojaunZGKNkdjFPvf0c+4EGW/G3olmtp7TPh4cVlJS+fz8GLkrJKexRkpAtZbH+G0sGY8wK68sHE+SNeiLnW/qPNAcQGEx1VV3+gKuH3/I1/QaL2qcZu36GHJNLaMAtX1ZZD8WlHjuylYVtDf4xHmHIM7XgB/0juUjkLmv45UTtaLjXa44c9wyQYYtHTMzlRkL3XINVTJ3yjnHV+QOpSj2z7579fy+sIrKUk5XB51kg3Nc1IIF4dNwb1i4kS+oyw668xYD6ZS9siaj3J+VmqJfk23V4H9OJ3l36uwd+r9B3CVrr9ed6b78PAvPVYylIw6UoSQjjGS3mVWNhtw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ulb.be; dmarc=pass action=none header.from=ulb.be; dkim=pass header.d=ulb.be; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ulb.be; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bLYUUwvYLZEmJ0aTKMhPoz4J4vSit80hIY705SgG04c=; b=XR4A5nma7gnvrciaT0+VdbsPTJHqsqnAH1N4xBbR9iBmdelVm/Rj+Ad3Jmzkc58ImOpFAq9G1VPv0FzCVMxk4RhMPbbvg0V1XHF76zT+Wh+q+NQ5rvvl27C9wnnzYDbBgAfRAZiwI+k+if57osbjm9RrWhqykITcb7j9/YY+3SE= Received: from DB8P190MB0731.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:125::14) by DU0P190MB2448.EURP190.PROD.OUTLOOK.COM (2603:10a6:10:5a3::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 14:03:07 +0000 Received: from DB8P190MB0731.EURP190.PROD.OUTLOOK.COM ([fe80::3f82:98a0:536f:f5af]) by DB8P190MB0731.EURP190.PROD.OUTLOOK.COM ([fe80::3f82:98a0:536f:f5af%5]) with mapi id 15.20.9769.046; Tue, 14 Apr 2026 14:03:07 +0000 From: SCHOEMANS Maxime To: Haibo Yan CC: vignesh C , Tom Lane , Damir Belyalov , jian he , PostgreSQL Hackers , SAKR Mahmoud , Diogo Repas , LUO Zhicheng , Tomas Vondra , Andrey Lepikhov Subject: Re: Implement missing join selectivity estimation for range types Thread-Topic: Implement missing join selectivity estimation for range types Thread-Index: AQHZK2HTFElV4cAAG0qhvSWvkCiFBa6keKmAgAAVOQCAAtFcgIACBB+AgAYni4CAVKFYAICOo58AgABu2wCAG78GAIAAfkQAgMyTtICACXamgIBHqSyAgAB2DQCAEmj+gIAHr52AhPImLgCAC/F48Q== Date: Tue, 14 Apr 2026 14:03:07 +0000 Message-ID: References: <8afecd87-d1e5-241c-5e3e-75e1c62c279b@enterprisedb.com> <1bc5e1e4-380b-213d-6e6a-d5e8f7f0c7f5@enterprisedb.com> <84ffb566-8038-ab35-c841-7a5e5728a247@enterprisedb.com> <525ea957-88ff-e2c6-2975-474c849aa234@ulb.be> <48a78946-f380-a279-e75f-711846e509f8@ulb.be> <4c443cf6-96af-0953-fd5b-bd2b5c0c6f00@ulb.be> <2516071.1699991181@sss.pgh.pa.us> <08b2dea8-6dca-06e4-a53d-3e6334e7645b@ulb.be> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ulb.be; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DB8P190MB0731:EE_|DU0P190MB2448:EE_ x-ms-office365-filtering-correlation-id: 28c89b6a-b83f-4e5e-7a3a-08de9a2e8e0c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|6049299003|1800799024|786006|366016|56012099003|22082099003|18002099003|8096899003|38070700021|4053099003; x-microsoft-antispam-message-info: psqmfi8SyfLv8xfjGgqtEn0kzui/pdqTXyiAVFuNdxmH/F4eTCr48/pBd2TtXMdXaRfmcI7a1bQxP29W6OtCh79wdXSQiFZeQCXpeybNUeKsEKHMTHCHqS8de5ZOHgdXby+FXXXtcZJpmWOUau32SjMGF5aK7cXe05SIf0ww9JYmWGvT1plpgXxiJkKwOLwCXcBkFYzTHSzz1cGsx2H8EHzDuDf0TkD/WYAxu898y1ODObNyXt2nZ0nRFXklF7R3C0m3jMfoNepdJT4nzRPNTgWWUc5dKfWZxPnSoekGoYDMfQ7md6AH2hTcZV2tclj8++aMycihbLLuL3Wk3P7lY7CuEQm5gjkKgN7dqycbksFFaeedFfeuuaLRhCwk0PxYR1KacSnPxsy1dgrCao98B01YJbgMzlfncarG6IZx1/l9jquWNyUsCejjLT1tggVjLfFSfFirCtMOpVUf/RUumQ0Gn22CCJhktKI5J50bvbOCA4jnm8/MaElyBaQMpZG+jIOZIm4w0lxdmg2npy8DizW4F0Z94Lw+NOli0WRXIVvYRyf/wewCc9UI8aO75zH3r5kKKR3stW14SdPoSPJFVGo0n+LT3QbYvAV3AZ8XMfaqyuCRuMWM95jG6qm2HJZLVXGsnTq9KlF/ZR//kh0iaTozigu2aFizhjTMpDBC8WhgQQsHp1DB5p+0pMvGqZzDJKqyKvsb820AG2Vo3E3IrJ1VbAp5N5tQKFmq4eUus1OfHrqXN/O0uVFotC7V0FqxYBeGvG0U3P1MTFi8s876nz4Cs/vyheuK6CB2xft00wM= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB8P190MB0731.EURP190.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(6049299003)(1800799024)(786006)(366016)(56012099003)(22082099003)(18002099003)(8096899003)(38070700021)(4053099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?x9WKwp86w7S9nEEwTNdLqtkvd+g8IScKXzwznYvy+JJoiMv/0+vLI6Fkii?= =?iso-8859-1?Q?KliiEYjBGpZ1RWm9KWDvUbk2ynSy+8AD5a1X3mt2HwdZqzBTXWf1KMRiTb?= =?iso-8859-1?Q?F6MZHeaR7Gtt3DgT0fbSJRGOn1jk6tmcmVOxaOoIljVCfG7/fSz1Afs/wG?= =?iso-8859-1?Q?w30R0MWct9yHX9PyFyZCKCqXl9DyFFugKS4KdlRtR2IyGbFShN0ligN85y?= =?iso-8859-1?Q?OnXpb0us2ZEMW4/Vnyt3/q6Bm8Pf12/U3D6UHJOQY90uE+xRO2B/p+D03H?= =?iso-8859-1?Q?aRkRZ8FnIAxb67lIjeQCOTNeVz9WWXVl3h3Cz4UtY87eP7qcABriLxqMx1?= =?iso-8859-1?Q?eLOe8oBuFW7j1BtDi3iSFNBf66RtbQ5Z9yIXgNvErfa1acJjFVxhZkAycl?= =?iso-8859-1?Q?oirt7FtrOl2scqXK5yqvKpwdKiKzY/AUGjr9RQT1N1rHywZxU7goyzJ8VD?= =?iso-8859-1?Q?Luo6IfFA2UkFNJIdnaCKOBxoLfe1IOmWtCtXi0YrIPsqcX4McmpkUpDQen?= =?iso-8859-1?Q?HpjswOfbW1lb5UZ96gAyA9QUCGSY8myPZO/8WTH1qT2eEHfLHGWxlBXjSj?= =?iso-8859-1?Q?qce9dl3BzGntMM46yuon/1TJYZySzK4YmJlsu25XkRy0c4aVhc+VHT1UuP?= =?iso-8859-1?Q?vzG/cwADWH8zXZx1PD9KRW6CtsMw8E2JcklPZqLWlMO5z44g/3FZQK2pgq?= =?iso-8859-1?Q?PgaoO6+mlrYXhKQeEOtwLmH1haNUBs87RWAxZabmNYYZ7TWQevvJYld2Dx?= =?iso-8859-1?Q?z0YQSlhNAT4jJv+BGMiZ6/VXfZYcRf82ewZVwOEcdpeG2pTJDRJLHpxvdO?= =?iso-8859-1?Q?wdS4FhrzQvg7gJDE8qK3wlHgeteVX02134s0Qu+AuqUU4R/WPrcebLReRJ?= =?iso-8859-1?Q?QeBRZNOePkh8A+FBaY7Jvz/bsnS9eNdDWuyTIQn6pXWXrj0Lxjxs54thAy?= =?iso-8859-1?Q?7fxO/ky0OOWN5+vaHD3dvnL0QQTbgP5JII1l5K/juhIRuUELdEWeUUS8rN?= =?iso-8859-1?Q?neh9CnT4w3o52V27rT21aSpy8j6LHhtyDg/ZfbMOixj7hYkF06gkOjLQld?= =?iso-8859-1?Q?xqWZGvbKySoIO4i1zTgeTSST1r9/O0c6bZnZgpRYknTO/nC8BIH1cBN5Lj?= =?iso-8859-1?Q?oYOWEH8pp0LcQQtsdbduA9tnUJ4n3ciLnp6CduXqZy11Tv9OHFKyA255DQ?= =?iso-8859-1?Q?PO3RtRsHbr1bIpYUwQpDd6g9IRyZDSyCyAUMcCuUP/27/8t3kLlkJmLZ+k?= =?iso-8859-1?Q?F3XElIoVagdRnSOZQPk7owv+CU4/TdXnlVDUDZ1jD/0AL9ciyKseZe/fCK?= =?iso-8859-1?Q?/W+YAqvfKNdidfNHoisCM2UBe+ZFmlMkuai/+SWvimAVXsFKaRP4znqU1K?= =?iso-8859-1?Q?ePUkQcMOQUw4ggBE2R2ltLXdQkOilG1iOjzAPat6ZUs0pPWRpA4Xt1Gjpa?= =?iso-8859-1?Q?T25bfaV9JzfV6ogLau6V+0Dt9mPZc2KgFlRQJiKuRumE7KIqEzr4kf/Hwe?= =?iso-8859-1?Q?iibnkTU0LeMdXgPK5mty36bV8YZ6HEtsz3eut5oY1pTqmBoSI+YHOzPZxF?= =?iso-8859-1?Q?FhZZboL/WqMCqOUUnDDNDsP+WyvsEqj2XJeXeUeocigD+7i0hwddXreabb?= =?iso-8859-1?Q?TRj2cLDrWImfhsNKwLv+jJUhH048cZwR7rhLvOxGDVPX1iXdWhegBNBRD0?= =?iso-8859-1?Q?VTGcF/Jr7+bqbxccseesSsfI6R1USbFfgiLlOL47km4rsC7MMGDVwTKWbN?= =?iso-8859-1?Q?BHQEPDKM7p262vVGSFPFANLy1YRjwYDDX1lg4KIa53kEL4S8h28pFko7aS?= =?iso-8859-1?Q?tWmITeuQ8w=3D=3D?= Content-Type: multipart/mixed; boundary="_006_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_" MIME-Version: 1.0 X-OriginatorOrg: ulb.be X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB8P190MB0731.EURP190.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 28c89b6a-b83f-4e5e-7a3a-08de9a2e8e0c X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Apr 2026 14:03:07.5496 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 30a5145e-75bd-4212-bb02-8ff9c0ea4ae9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: FP3xrM0SfD8lsJ5AoYC+Q59V7QIl6ksBakQSuIDP5GkEQVuRlkKBbPzprXk/gkxThTlFbSqUM1bwSG3EIF8eSA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0P190MB2448 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_006_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_ Content-Type: multipart/alternative; boundary="_000_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_" --_000_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Haibo, Thank you for picking this up again. I agree with the changes you made in v5, in particular scoping the patch to the three strict operators and reworking the tests to check plan structure rather than exact row counts. Attached is v6 as a 3-patch series building on your v5. Patch 1 is your range join selectivity patch with one small change: the range_cmp_bounds result in the merge walk is stored in a local cmp variable to avoid calling it twice per iteration, as jian he suggested. Patch 2 adds the same estimation for multirange types, covering all type combinations (multirange x multirange, multirange x range, range x multirange). Since both range and multirange types use the same bound histogram format and the same RangeBound representation, the core algorithm is identical. Patch 3 removes the duplication between rangetypes_selfuncs.c and multirangetypes_selfuncs.c that Tom raised as a concern. It makes the 10 shared helper functions non-static, exports them via selfuncs.h, and deletes the copies from the multirange file. This covers all the pre-existing duplication between the two files, not just the functions added in this patch set. Regards, Maxime --_000_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi Haibo,

Thank you for picking this up again. I agree with the changes you made
in v5, in particular scoping the patch to the three strict operators and
reworking the tests to check plan structure rather than exact row counts.

Attached is v6 as a 3-patch series building on your v5.

Patch 1 is your range join selectivity patch with one small change: the
range_cmp_bounds result in the merge walk is stored in a local cmp
variable to avoid calling it twice per iteration, as jian he suggested.

Patch 2 adds the same estimation for multirange types, covering all type
combinations (multirange x multirange, multirange x range, range x
multirange). Since both range and multirange types use the same bound
histogram format and the same RangeBound representation, the core
algorithm is identical.

Patch 3 removes the duplication between rangetypes_selfuncs.c and
multirangetypes_selfuncs.c that Tom raised as a concern. It makes the
10 shared helper functions non-static, exports them via selfuncs.h,
and deletes the copies from the multirange file. This covers all the
pre-existing duplication between the two files, not just the functions
added in this patch set.

Regards,
Maxime
--_000_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_-- --_006_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_ Content-Type: application/octet-stream; name="v6-0001-Improve-range-join-selectivity-estimation-for.patch" Content-Description: v6-0001-Improve-range-join-selectivity-estimation-for.patch Content-Disposition: attachment; filename="v6-0001-Improve-range-join-selectivity-estimation-for.patch"; size=21197; creation-date="Tue, 14 Apr 2026 14:02:20 GMT"; modification-date="Tue, 14 Apr 2026 14:03:07 GMT" Content-Transfer-Encoding: base64 RnJvbSBkNjljMTgwMTFiNTYzMzE3MmY3ZWVmYzIxODU4MzhlMWEwNjA2MmFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2Nob2VtYW5zIDxtYXhpbWUuc2Nob2VtYW5zQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMTY6MDQ6MjMgKzAyMDAKU3Vi amVjdDogW1BBVENIIHY2IDEvM10gSW1wcm92ZSByYW5nZSBqb2luIHNlbGVjdGl2aXR5IGVzdGlt YXRpb24gZm9yIDw8LCA+PiwKICYmCgpUZWFjaCByYW5nZWpvaW5zZWwgdG8gZXN0aW1hdGUgam9p biBzZWxlY3Rpdml0eSBmb3IgcmFuZ2Ugb3BlcmF0b3JzCnVzaW5nIGJvdW5kIGhpc3RvZ3JhbSBz dGF0aXN0aWNzIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGZpeGVkCmRlZmF1bHRzLiBUaGUg ZXN0aW1hdGlvbiBpcyBiYXNlZCBvbiBhIHRyYXBlem9pZGFsIGFwcHJveGltYXRpb24gb2YKUChY IDwgWSkgYnkgcGFyYWxsZWwtc2Nhbm5pbmcgdGhlIGJvdW5kIGhpc3RvZ3JhbXMgb2YgYm90aCBz aWRlcy4KClRoaXMgaW1wcm92ZXMgcGxhbm5lciByb3cgZXN0aW1hdGVzIGVzcGVjaWFsbHkgd2hl biB0aGUgdHdvIHJhbmdlCmNvbHVtbnMgaGF2ZSBjbGVhcmx5IHNlcGFyYXRlZCBvciBzdHJvbmds eSBvdmVybGFwcGluZyBkaXN0cmlidXRpb25zLgoKUmVncmVzc2lvbiB0ZXN0cyBjb3ZlciBwbGFu IGNoYW5nZXMgZm9yIHJlcHJlc2VudGF0aXZlIHJhbmdlIGpvaW4gY2FzZXMuCgpCYXNlZCBvbjog UmVwYXMsIEx1bywgU2Nob2VtYW5zLCBTYWtyICgyMDIyKSAiU2VsZWN0aXZpdHkgRXN0aW1hdGlv bgpvZiBJbmVxdWFsaXR5IEpvaW5zIEluIERhdGFiYXNlcyIKaHR0cHM6Ly9kb2kub3JnLzEwLjQ4 NTUwL2FyWGl2LjIyMDYuMDczOTYKLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0eXBl c19zZWxmdW5jcy5jIHwgMzAwICsrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jYXRh bG9nL3BnX29wZXJhdG9yLmRhdCAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0ICAgICAgICAgICAgIHwgICA0ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcmFuZ2V0eXBlcy5vdXQgICAgfCAxMTQgKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3JhbmdldHlwZXMuc3FsICAgICAgICAgfCAgNTMgKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA0NzQg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcmFuZ2V0eXBlc19zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jh bmdldHlwZXNfc2VsZnVuY3MuYwppbmRleCA3NWYxZTc1NjdkNS4uOWYyMTJlOWQxNzggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVzX3NlbGZ1bmNzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JhbmdldHlwZXNfc2VsZnVuY3MuYwpAQCAtMTIyMSwzICsx MjIxLDMwMyBAQCBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfY29udGFpbnMoVHlwZUNhY2hlRW50cnkg KnR5cGNhY2hlLAogCiAJcmV0dXJuIHN1bV9mcmFjOwogfQorCisvKgorICogRXN0aW1hdGUgam9p biBzZWxlY3Rpdml0eSBQKFggPCBZKSB1c2luZyByYW5nZWJvdW5kIGhpc3RvZ3JhbXMuCisgKgor ICogQmFzZWQgb246IERpb2dvIFJlcGFzLCBaaGljaGVuZyBMdW8sIE1heGltZSBTY2hvZW1hbnMs IE1haG1vdWQgU2FrciwgMjAyMgorICogIlNlbGVjdGl2aXR5IEVzdGltYXRpb24gb2YgSW5lcXVh bGl0eSBKb2lucyBJbiBEYXRhYmFzZXMiCisgKiBodHRwczovL2RvaS5vcmcvMTAuNDg1NTAvYXJY aXYuMjIwNi4wNzM5NgorICoKKyAqIGhpc3QxIGFuZCBoaXN0MiBhcmUgYXJyYXlzIG9mIFJhbmdl Qm91bmQgZW50cmllcyBmcm9tIHRoZSBib3VuZHMgaGlzdG9ncmFtcworICogb2YgdHdvIHJhbmdl LXR5cGVkIGF0dHJpYnV0ZXMgWCBhbmQgWSwgcmVzcGVjdGl2ZWx5LiAgRWFjaCBhcnJheSBoYXMg YXQKKyAqIGxlYXN0IDIgZW50cmllcyAob25lIGhpc3RvZ3JhbSBiaW4pLiAgVGhlIGVudHJpZXMg Y2FycnkgZnVsbCBib3VuZCBtZXRhZGF0YQorICogKGxvd2VyL3VwcGVyIGZsYWcsIGluY2x1c2l2 ZS9leGNsdXNpdmUpLCBhbmQgYWxsIGNvbXBhcmlzb25zIHVzZQorICogcmFuZ2VfY21wX2JvdW5k cygpIHNvIHRoYXQgYm91bmQgc2VtYW50aWNzIGFyZSBwcmVzZXJ2ZWQuCisgKgorICogVGhlIGFs Z29yaXRobSBtb2RlbHMgZWFjaCBhdHRyaWJ1dGUncyBkaXN0cmlidXRpb24gYXMgYSBwaWVjZXdp c2UgZnVuY3Rpb24KKyAqIGRlcml2ZWQgZnJvbSBpdHMgaGlzdG9ncmFtLCB0aGVuIGNvbXB1dGVz OgorICogICBQKFggPCBZKSA9IDAuNSAqIHN1bSggKEZfWChwcmV2KSArIEZfWChjdXIpKSAqIChG X1koY3VyKSAtIEZfWShwcmV2KSkgKQorICogYnkgcGFyYWxsZWwtc2Nhbm5pbmcgYm90aCBoaXN0 b2dyYW1zLgorICoKKyAqIFRoZSBpbml0aWFsIGZhc3QtZm9yd2FyZCBsb29wcyBza2lwIGhpc3Rv Z3JhbSBlbnRyaWVzIHRoYXQgZmFsbCBlbnRpcmVseQorICogYmVmb3JlIHRoZSBvdGhlciBoaXN0 b2dyYW0ncyByYW5nZSwgc28gdGhlIG1haW4gbG9vcCBvbmx5IHByb2Nlc3NlcyB0aGUKKyAqIG92 ZXJsYXBwaW5nIHJlZ2lvbi4gIEJvdW5kcyBjaGVja3MgYXJlIHJlcXVpcmVkIGJlY2F1c2UgdGhl IGhpc3RvZ3JhbXMgbWF5CisgKiBiZSBjb21wbGV0ZWx5IGRpc2pvaW50IChlLmcuLCBhbGwgb2Yg WCBpcyBiZWxvdyBhbGwgb2YgWSkuCisgKi8KK3N0YXRpYyBkb3VibGUKK2NhbGNfaGlzdF9qb2lu X3NlbGVjdGl2aXR5KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKKwkJCQkJCSAgIGNvbnN0IFJh bmdlQm91bmQgKmhpc3QxLCBpbnQgbmhpc3QxLAorCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAq aGlzdDIsIGludCBuaGlzdDIpCit7CisJaW50CQkJaSwKKwkJCQlqOworCWRvdWJsZQkJc2VsZWN0 aXZpdHkgPSAwLjA7CisJZG91YmxlCQlwcmV2X3NlbDEgPSAtMS4wOwkvKiBuZWdhdGl2ZSBzZW50 aW5lbCBza2lwcyBmaXJzdCBpdGVyICovCisJZG91YmxlCQlwcmV2X3NlbDIgPSAwLjA7CisKKwlB c3NlcnQobmhpc3QxID4gMSk7CisJQXNzZXJ0KG5oaXN0MiA+IDEpOworCisJLyoKKwkgKiBGYXN0 LWZvcndhcmQgcGFzdCBoaXN0MSBlbnRyaWVzIHRoYXQgYXJlIGVudGlyZWx5IGJlbG93IGhpc3Qy WzBdLCBhbmQKKwkgKiB2aWNlIHZlcnNhLiAgQm91bmRzIGNoZWNrcyBwcmV2ZW50IG91dC1vZi1i b3VuZHMgYWNjZXNzIHdoZW4gdGhlCisJICogaGlzdG9ncmFtcyBhcmUgZnVsbHkgZGlzam9pbnQu CisJICovCisJZm9yIChpID0gMDsgaSA8IG5oaXN0MSAmJgorCQkgcmFuZ2VfY21wX2JvdW5kcyh0 eXBjYWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbMF0pIDwgMDsgaSsrKQorCQk7CisJZm9yIChqID0g MDsgaiA8IG5oaXN0MiAmJgorCQkgcmFuZ2VfY21wX2JvdW5kcyh0eXBjYWNoZSwgJmhpc3QyW2pd LCAmaGlzdDFbMF0pIDwgMDsgaisrKQorCQk7CisKKwkvKgorCSAqIEhhbmRsZSBmdWxseS1zZXBh cmF0ZWQgaGlzdG9ncmFtcy4gIFdoZW4gYWxsIGJvdW5kcyBpbiBoaXN0MSBhcmUgYmVsb3cKKwkg KiBhbGwgYm91bmRzIGluIGhpc3QyLCBQKFggPCBZKSBpcyB+MS4wLiAgV2hlbiBhbGwgb2YgaGlz dDIgaXMgYmVsb3cKKwkgKiBoaXN0MSwgUChYIDwgWSkgaXMgfjAuMC4gIFdlIHJldHVybiBpbW1l ZGlhdGVseSByYXRoZXIgdGhhbiBmYWxsaW5nCisJICogaW50byB0aGUgb3ZlcmxhcCB3YWxrIHdp dGggaW52YWxpZCBpbmRpY2VzLgorCSAqLworCWlmIChpID49IG5oaXN0MSkKKwkJcmV0dXJuIDEu MDsKKwlpZiAoaiA+PSBuaGlzdDIpCisJCXJldHVybiAwLjA7CisKKwkvKiBXYWxrIHRoZSBvdmVy bGFwcGluZyByZWdpb24gb2YgYm90aCBoaXN0b2dyYW1zICovCisJd2hpbGUgKGkgPCBuaGlzdDEg JiYgaiA8IG5oaXN0MikKKwl7CisJCWRvdWJsZQkJY3VyX3NlbDEsCisJCQkJCWN1cl9zZWwyOwor CQlSYW5nZUJvdW5kCWN1cl9zeW5jOworCQlpbnQJCQljbXA7CisKKwkJY21wID0gcmFuZ2VfY21w X2JvdW5kcyh0eXBjYWNoZSwgJmhpc3QxW2ldLCAmaGlzdDJbal0pOworCQlpZiAoY21wIDwgMCkK KwkJCWN1cl9zeW5jID0gaGlzdDFbaSsrXTsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCWN1cl9z eW5jID0gaGlzdDJbaisrXTsKKwkJZWxzZQorCQl7CisJCQkvKiBFcXVhbCBib3VuZHM6IGFkdmFu Y2UgYm90aCAqLworCQkJY3VyX3N5bmMgPSBoaXN0MVtpXTsKKwkJCWkrKzsKKwkJCWorKzsKKwkJ fQorCQljdXJfc2VsMSA9IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIodHlwY2FjaGUsICZj dXJfc3luYywKKwkJCQkJCQkJCQkJCWhpc3QxLCBuaGlzdDEsIGZhbHNlKTsKKwkJY3VyX3NlbDIg PSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKHR5cGNhY2hlLCAmY3VyX3N5bmMsCisJCQkJ CQkJCQkJCQloaXN0Miwgbmhpc3QyLCBmYWxzZSk7CisKKwkJLyogU2tpcCB0aGUgZmlyc3QgaXRl cmF0aW9uIChubyBwcmV2aW91cyBwb2ludCB5ZXQpICovCisJCWlmIChwcmV2X3NlbDEgPj0gMCkK KwkJCXNlbGVjdGl2aXR5ICs9IChwcmV2X3NlbDEgKyBjdXJfc2VsMSkgKiAoY3VyX3NlbDIgLSBw cmV2X3NlbDIpOworCisJCXByZXZfc2VsMSA9IGN1cl9zZWwxOworCQlwcmV2X3NlbDIgPSBjdXJf c2VsMjsKKwl9CisKKwkvKiBQKFggPCBZKSA9IDAuNSAqIFN1bSguLi4pICovCisJc2VsZWN0aXZp dHkgLz0gMjsKKworCS8qIEluY2x1ZGUgcmVtYWluZGVyIG9mIGhpc3QyIGlmIGhpc3QxIHdhcyBl eGhhdXN0ZWQgZmlyc3QgKi8KKwlpZiAoaiA8IG5oaXN0MikKKwkJc2VsZWN0aXZpdHkgKz0gMSAt IHByZXZfc2VsMjsKKworCXJldHVybiBzZWxlY3Rpdml0eTsKK30KKworLyoKKyAqIHJhbmdlam9p bnNlbCAtLSBqb2luIHNlbGVjdGl2aXR5IGZvciByYW5nZS12cy1yYW5nZSBvcGVyYXRvcnMKKyAq CisgKiBTdXBwb3J0czogPDwsID4+LCAmJgorICogVGhlc2Ugb3BlcmF0b3JzIG1hcCBkaXJlY3Rs eSB0byBzdHJpY3QgYm91bmQgY29tcGFyaXNvbnMgUChYIDwgWSksCisgKiB3aGljaCBjYWxjX2hp c3Rfam9pbl9zZWxlY3Rpdml0eSgpIGVzdGltYXRlcyBmcm9tIGJvdW5kIGhpc3RvZ3JhbXMuCisg KiBPdGhlciByYW5nZSBvcGVyYXRvcnMgYXJlIGxlZnQgdG8gdGhlaXIgZXhpc3RpbmcgZ2VuZXJp YyBlc3RpbWF0b3JzLgorICovCitEYXR1bQorcmFuZ2Vqb2luc2VsKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJUGxhbm5lckluZm8gKnJvb3QgPSAoUGxhbm5lckluZm8gKikgUEdfR0VUQVJHX1BPSU5U RVIoMCk7CisJT2lkCQkJb3BlcmF0b3IgPSBQR19HRVRBUkdfT0lEKDEpOworCUxpc3QJICAgKmFy Z3MgPSAoTGlzdCAqKSBQR19HRVRBUkdfUE9JTlRFUigyKTsKKwlTcGVjaWFsSm9pbkluZm8gKnNq aW5mbyA9IChTcGVjaWFsSm9pbkluZm8gKikgUEdfR0VUQVJHX1BPSU5URVIoNCk7CisJVmFyaWFi bGVTdGF0RGF0YSB2YXJkYXRhMTsKKwlWYXJpYWJsZVN0YXREYXRhIHZhcmRhdGEyOworCVNlbGVj dGl2aXR5IHNlbGVjOworCUF0dFN0YXRzU2xvdCBoaXN0MTsKKwlBdHRTdGF0c1Nsb3QgaGlzdDI7 CisJQXR0U3RhdHNTbG90IHNzbG90OworCWJvb2wJCWhhdmVfaGlzdDEgPSBmYWxzZTsKKwlib29s CQloYXZlX2hpc3QyID0gZmFsc2U7CisJVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlOworCUZvcm1f cGdfc3RhdGlzdGljIHN0YXRzMTsKKwlGb3JtX3BnX3N0YXRpc3RpYyBzdGF0czI7CisJZG91Ymxl CQllbXB0eV9mcmFjMTsKKwlkb3VibGUJCWVtcHR5X2ZyYWMyOworCWRvdWJsZQkJbnVsbF9mcmFj MTsKKwlkb3VibGUJCW51bGxfZnJhYzI7CisJaW50CQkJbmhpc3QxOworCWludAkJCW5oaXN0MjsK KwlSYW5nZUJvdW5kICpoaXN0MV9sb3dlcjsKKwlSYW5nZUJvdW5kICpoaXN0MV91cHBlcjsKKwlS YW5nZUJvdW5kICpoaXN0Ml9sb3dlcjsKKwlSYW5nZUJvdW5kICpoaXN0Ml91cHBlcjsKKwlib29s CQlqb2luX2lzX3JldmVyc2VkOworCWJvb2wJCWVtcHR5OworCWludAkJCWk7CisKKwlnZXRfam9p bl92YXJpYWJsZXMocm9vdCwgYXJncywgc2ppbmZvLCAmdmFyZGF0YTEsICZ2YXJkYXRhMiwKKwkJ CQkJICAgJmpvaW5faXNfcmV2ZXJzZWQpOworCisJc2VsZWMgPSBkZWZhdWx0X3JhbmdlX3NlbGVj dGl2aXR5KG9wZXJhdG9yKTsKKworCS8qCisJICogQWNxdWlyZSBoaXN0b2dyYW0gc3RhdHMgZm9y IGJvdGggc2lkZXMuICBFYWNoIHNsb3QgaXMgdHJhY2tlZAorCSAqIGluZGVwZW5kZW50bHkgc28g d2UgY2FuIHJlbGVhc2UgZXhhY3RseSB3aGF0IHdhcyBhY3F1aXJlZCBvbiBhbnkKKwkgKiBmYWls dXJlIHBhdGguCisJICovCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGExLnN0YXRzVHVw bGUpIHx8CisJCSFIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGEyLnN0YXRzVHVwbGUpKQorCQlnb3Rv IGNsZWFudXA7CisKKwlpZiAodmFyZGF0YTEudmFydHlwZSAhPSB2YXJkYXRhMi52YXJ0eXBlKQor CQlnb3RvIGNsZWFudXA7CisKKwltZW1zZXQoJmhpc3QxLCAwLCBzaXplb2YoaGlzdDEpKTsKKwlt ZW1zZXQoJmhpc3QyLCAwLCBzaXplb2YoaGlzdDIpKTsKKworCWlmICghZ2V0X2F0dHN0YXRzc2xv dCgmaGlzdDEsIHZhcmRhdGExLnN0YXRzVHVwbGUsCisJCQkJCQkgIFNUQVRJU1RJQ19LSU5EX0JP VU5EU19ISVNUT0dSQU0sIEludmFsaWRPaWQsCisJCQkJCQkgIEFUVFNUQVRTU0xPVF9WQUxVRVMp KQorCQlnb3RvIGNsZWFudXA7CisJaGF2ZV9oaXN0MSA9IHRydWU7CisKKwlpZiAoIWdldF9hdHRz dGF0c3Nsb3QoJmhpc3QyLCB2YXJkYXRhMi5zdGF0c1R1cGxlLAorCQkJCQkJICBTVEFUSVNUSUNf S0lORF9CT1VORFNfSElTVE9HUkFNLCBJbnZhbGlkT2lkLAorCQkJCQkJICBBVFRTVEFUU1NMT1Rf VkFMVUVTKSkKKwkJZ290byBjbGVhbnVwOworCWhhdmVfaGlzdDIgPSB0cnVlOworCisJLyogSW5p dGlhbGl6ZSB0eXBlIGNhY2hlICovCisJdHlwY2FjaGUgPSByYW5nZV9nZXRfdHlwY2FjaGUoZmNp bmZvLCB2YXJkYXRhMS52YXJ0eXBlKTsKKworCS8qIExvb2sgdXAgTlVMTCBhbmQgZW1wdHktcmFu Z2UgZnJhY3Rpb25zICovCisJc3RhdHMxID0gKEZvcm1fcGdfc3RhdGlzdGljKSBHRVRTVFJVQ1Qo dmFyZGF0YTEuc3RhdHNUdXBsZSk7CisJc3RhdHMyID0gKEZvcm1fcGdfc3RhdGlzdGljKSBHRVRT VFJVQ1QodmFyZGF0YTIuc3RhdHNUdXBsZSk7CisKKwludWxsX2ZyYWMxID0gc3RhdHMxLT5zdGFu dWxsZnJhYzsKKwludWxsX2ZyYWMyID0gc3RhdHMyLT5zdGFudWxsZnJhYzsKKworCS8qIFRyeSB0 byBnZXQgZnJhY3Rpb24gb2YgZW1wdHkgcmFuZ2VzIGZvciB0aGUgZmlyc3QgdmFyaWFibGUgKi8K KwlpZiAoZ2V0X2F0dHN0YXRzc2xvdCgmc3Nsb3QsIHZhcmRhdGExLnN0YXRzVHVwbGUsCisJCQkJ CQkgU1RBVElTVElDX0tJTkRfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwKKwkJCQkJCSBJbnZhbGlk T2lkLCBBVFRTVEFUU1NMT1RfTlVNQkVSUykpCisJeworCQlpZiAoc3Nsb3Qubm51bWJlcnMgIT0g MSkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGVtcHR5IGZyYWN0aW9uIHN0YXRpc3RpYyIpOwor CQllbXB0eV9mcmFjMSA9IHNzbG90Lm51bWJlcnNbMF07CisJCWZyZWVfYXR0c3RhdHNzbG90KCZz c2xvdCk7CisJfQorCWVsc2UKKwl7CisJCWVtcHR5X2ZyYWMxID0gMC4wOworCX0KKworCS8qIFRy eSB0byBnZXQgZnJhY3Rpb24gb2YgZW1wdHkgcmFuZ2VzIGZvciB0aGUgc2Vjb25kIHZhcmlhYmxl ICovCisJaWYgKGdldF9hdHRzdGF0c3Nsb3QoJnNzbG90LCB2YXJkYXRhMi5zdGF0c1R1cGxlLAor CQkJCQkJIFNUQVRJU1RJQ19LSU5EX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0sCisJCQkJCQkgSW52 YWxpZE9pZCwgQVRUU1RBVFNTTE9UX05VTUJFUlMpKQorCXsKKwkJaWYgKHNzbG90Lm5udW1iZXJz ICE9IDEpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBlbXB0eSBmcmFjdGlvbiBzdGF0aXN0aWMi KTsKKwkJZW1wdHlfZnJhYzIgPSBzc2xvdC5udW1iZXJzWzBdOworCQlmcmVlX2F0dHN0YXRzc2xv dCgmc3Nsb3QpOworCX0KKwllbHNlCisJeworCQllbXB0eV9mcmFjMiA9IDAuMDsKKwl9CisKKwkv KiBDb252ZXJ0IHJhbmdlIGhpc3RvZ3JhbXMgdG8gc2VwYXJhdGUgbG93ZXIvdXBwZXIgYm91bmQg YXJyYXlzICovCisJbmhpc3QxID0gaGlzdDEubnZhbHVlczsKKwloaXN0MV9sb3dlciA9IChSYW5n ZUJvdW5kICopIHBhbGxvYyhzaXplb2YoUmFuZ2VCb3VuZCkgKiBuaGlzdDEpOworCWhpc3QxX3Vw cGVyID0gKFJhbmdlQm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0MSk7 CisJZm9yIChpID0gMDsgaSA8IG5oaXN0MTsgaSsrKQorCXsKKwkJcmFuZ2VfZGVzZXJpYWxpemUo dHlwY2FjaGUsIERhdHVtR2V0UmFuZ2VUeXBlUChoaXN0MS52YWx1ZXNbaV0pLAorCQkJCQkJICAm aGlzdDFfbG93ZXJbaV0sICZoaXN0MV91cHBlcltpXSwgJmVtcHR5KTsKKwkJaWYgKGVtcHR5KQor CQkJZWxvZyhFUlJPUiwgImJvdW5kcyBoaXN0b2dyYW0gY29udGFpbnMgYW4gZW1wdHkgcmFuZ2Ui KTsKKwl9CisKKwluaGlzdDIgPSBoaXN0Mi5udmFsdWVzOworCWhpc3QyX2xvd2VyID0gKFJhbmdl Qm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0Mik7CisJaGlzdDJfdXBw ZXIgPSAoUmFuZ2VCb3VuZCAqKSBwYWxsb2Moc2l6ZW9mKFJhbmdlQm91bmQpICogbmhpc3QyKTsK Kwlmb3IgKGkgPSAwOyBpIDwgbmhpc3QyOyBpKyspCisJeworCQlyYW5nZV9kZXNlcmlhbGl6ZSh0 eXBjYWNoZSwgRGF0dW1HZXRSYW5nZVR5cGVQKGhpc3QyLnZhbHVlc1tpXSksCisJCQkJCQkgICZo aXN0Ml9sb3dlcltpXSwgJmhpc3QyX3VwcGVyW2ldLCAmZW1wdHkpOworCQlpZiAoZW1wdHkpCisJ CQllbG9nKEVSUk9SLCAiYm91bmRzIGhpc3RvZ3JhbSBjb250YWlucyBhbiBlbXB0eSByYW5nZSIp OworCX0KKworCS8qIEVzdGltYXRlIHNlbGVjdGl2aXR5IGJhc2VkIG9uIHRoZSBvcGVyYXRvciAq LworCXN3aXRjaCAob3BlcmF0b3IpCisJeworCQljYXNlIE9JRF9SQU5HRV9PVkVSTEFQX09QOgor CisJCQkvKgorCQkJICogQSAmJiBCIGlmZiBOT1QoQSA8PCBCKSBBTkQgTk9UKEEgPj4gQikKKwkJ CSAqID0gMSAtIFAoQS51cHBlciA8IEIubG93ZXIpIC0gUChCLnVwcGVyIDwgQS5sb3dlcikKKwkJ CSAqLworCQkJc2VsZWMgPSAxOworCQkJc2VsZWMgLT0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZp dHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCQloaXN0MV91cHBlciwgbmhpc3QxLAorCQkJCQkJCQkJ CQkJaGlzdDJfbG93ZXIsIG5oaXN0Mik7CisJCQlzZWxlYyAtPSBjYWxjX2hpc3Rfam9pbl9zZWxl Y3Rpdml0eSh0eXBjYWNoZSwKKwkJCQkJCQkJCQkJCWhpc3QyX3VwcGVyLCBuaGlzdDIsCisJCQkJ CQkJCQkJCQloaXN0MV9sb3dlciwgbmhpc3QxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEX1JB TkdFX0xFRlRfT1A6CisJCQkvKiBBIDw8IEIgaWZmIHVwcGVyKEEpIDwgbG93ZXIoQikgKi8KKwkJ CXNlbGVjID0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJ CSAgIGhpc3QxX3VwcGVyLCBuaGlzdDEsCisJCQkJCQkJCQkJCSAgIGhpc3QyX2xvd2VyLCBuaGlz dDIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfUkFOR0VfUklHSFRfT1A6CisJCQkvKiBBID4+ IEIgaWZmIHVwcGVyKEIpIDwgbG93ZXIoQSkgKi8KKwkJCXNlbGVjID0gY2FsY19oaXN0X2pvaW5f c2VsZWN0aXZpdHkodHlwY2FjaGUsCisJCQkJCQkJCQkJCSAgIGhpc3QyX3VwcGVyLCBuaGlzdDIs CisJCQkJCQkJCQkJCSAgIGhpc3QxX2xvd2VyLCBuaGlzdDEpOworCQkJYnJlYWs7CisKKwkJZGVm YXVsdDoKKwkJCS8qIFVuc3VwcG9ydGVkIG9wZXJhdG9yOyBrZWVwIHRoZSBkZWZhdWx0IHNlbGVj dGl2aXR5ICovCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogVGhlIGhpc3RvZ3JhbS1iYXNl ZCBzZWxlY3Rpdml0eSBhcHBsaWVzIHRvIG5vbi1lbXB0eSByYW5nZXMgb25seSAqLworCXNlbGVj ICo9ICgxIC0gZW1wdHlfZnJhYzEpICogKDEgLSBlbXB0eV9mcmFjMik7CisKKwkvKgorCSAqIEZv ciB0aGUgc3VwcG9ydGVkIG9wZXJhdG9ycyAoPDwsID4+LCAmJiksIGVtcHR5IHJhbmdlcyBhbHdh eXMgcHJvZHVjZQorCSAqIGZhbHNlLCBzbyBubyBlbXB0eS1mcmFjdGlvbiBhZGp1c3RtZW50IGlz IG5lZWRlZC4KKwkgKi8KKworCS8qIEFsbCByYW5nZSBvcGVyYXRvcnMgYXJlIHN0cmljdCAqLwor CXNlbGVjICo9ICgxIC0gbnVsbF9mcmFjMSkgKiAoMSAtIG51bGxfZnJhYzIpOworCitjbGVhbnVw OgorCWlmIChoYXZlX2hpc3QyKQorCQlmcmVlX2F0dHN0YXRzc2xvdCgmaGlzdDIpOworCWlmICho YXZlX2hpc3QxKQorCQlmcmVlX2F0dHN0YXRzc2xvdCgmaGlzdDEpOworCisJUmVsZWFzZVZhcmlh YmxlU3RhdHModmFyZGF0YTEpOworCVJlbGVhc2VWYXJpYWJsZVN0YXRzKHZhcmRhdGEyKTsKKwor CUNMQU1QX1BST0JBQklMSVRZKHNlbGVjKTsKKworCVBHX1JFVFVSTl9GTE9BVDgoKGZsb2F0OCkg c2VsZWMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGVyYXRvci5k YXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZXJhdG9yLmRhdAppbmRleCAxNDY1ZjEzMTIw YS4uNWVhNDQzNGY5ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0 b3IuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0CkBAIC0zMDk0 LDcgKzMwOTQsNyBAQAogICBvcHJuYW1lID0+ICcmJicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywg b3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3ByY29tID0+ ICcmJihhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9vdmVybGFwcycs IG9wcnJlc3QgPT4gJ3Jhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnYXJlYWpvaW5zZWwnIH0sCisg IG9wcmpvaW4gPT4gJ3Jhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICczODg5Jywgb2lkX3N5bWJv bCA9PiAnT0lEX1JBTkdFX0NPTlRBSU5TX0VMRU1fT1AnLAogICBkZXNjciA9PiAnY29udGFpbnMn LAogICBvcHJuYW1lID0+ICdAPicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4g J2FueWVsZW1lbnQnLApAQCAtMzEyMiwxMiArMzEyMiwxMiBAQAogICBvcHJuYW1lID0+ICc8PCcs IG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVz dWx0ID0+ICdib29sJywgb3ByY29tID0+ICc+PihhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJj b2RlID0+ICdyYW5nZV9iZWZvcmUnLCBvcHJyZXN0ID0+ICdyYW5nZXNlbCcsCi0gIG9wcmpvaW4g PT4gJ3NjYWxhcmx0am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAncmFuZ2Vqb2luc2VsJyB9LAog eyBvaWQgPT4gJzM4OTQnLCBvaWRfc3ltYm9sID0+ICdPSURfUkFOR0VfUklHSFRfT1AnLCBkZXNj ciA9PiAnaXMgcmlnaHQgb2YnLAogICBvcHJuYW1lID0+ICc+PicsIG9wcmxlZnQgPT4gJ2FueXJh bmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKICAgb3BycmVzdWx0ID0+ICdib29sJywgb3By Y29tID0+ICc8PChhbnlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9hZnRl cicsIG9wcnJlc3QgPT4gJ3Jhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFyZ3Rqb2luc2Vs JyB9LAorICBvcHJqb2luID0+ICdyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMzg5NScsIG9p ZF9zeW1ib2wgPT4gJ09JRF9SQU5HRV9PVkVSTEFQU19MRUZUX09QJywKICAgZGVzY3IgPT4gJ292 ZXJsYXBzIG9yIGlzIGxlZnQgb2YnLAogICBvcHJuYW1lID0+ICcmPCcsIG9wcmxlZnQgPT4gJ2Fu eXJhbmdlJywgb3BycmlnaHQgPT4gJ2FueXJhbmdlJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cmlu ZGV4IDk5ZmE5YTZlZGUyLi5jNmE3MDdhY2FlNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBA IC0xMjkxOSw0ICsxMjkxOSw4IEBACiAgIHByb25hbWUgPT4gJ2hhc2hvaWQ4ZXh0ZW5kZWQnLCBw cm9yZXR0eXBlID0+ICdpbnQ4JywKICAgcHJvYXJndHlwZXMgPT4gJ29pZDggaW50OCcsIHByb3Ny YyA9PiAnaGFzaG9pZDhleHRlbmRlZCcgfSwKIAoreyBvaWQgPT4gJzgzNTUnLCBkZXNjciA9PiAn am9pbiBzZWxlY3Rpdml0eSBmb3IgcmFuZ2Ugb3BlcmF0b3JzJywKKyAgcHJvbmFtZSA9PiAncmFu Z2Vqb2luc2VsJywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDgnLAor ICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgb2lkIGludGVybmFsIGludDIgaW50ZXJuYWwnLAor ICBwcm9zcmMgPT4gJ3Jhbmdlam9pbnNlbCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcmFuZ2V0eXBlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3JhbmdldHlwZXMub3V0CmluZGV4IGUwNjJhNGU1YzJjLi4yZmM1Yjc3MGY5MCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yYW5nZXR5cGVzLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3JhbmdldHlwZXMub3V0CkBAIC0yMDMzLDMgKzIwMzMsMTE3IEBA IHNlbGVjdCAqIGZyb20gdGV4dF9zdXBwb3J0X3Rlc3Qgd2hlcmUgdCA8QCB0ZXh0cmFuZ2Vfc3Vw cCgnYScsICdkJyk7CiAKIGRyb3AgdGFibGUgdGV4dF9zdXBwb3J0X3Rlc3Q7CiBkcm9wIHR5cGUg dGV4dHJhbmdlX3N1cHA7CistLQorLS0gdGVzdCBzZWxlY3Rpdml0eSBvZiByYW5nZSBqb2luIG9w ZXJhdG9ycworLS0KK2NyZWF0ZSB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMSAoaXIxIGludDRyYW5n ZSk7CitjcmVhdGUgdGFibGUgdGVzdF9yYW5nZV9qb2luXzIgKGlyMiBpbnQ0cmFuZ2UpOworY3Jl YXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8zIChpcjMgaW50NHJhbmdlKTsKK2luc2VydCBpbnRv IHRlc3RfcmFuZ2Vfam9pbl8xIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9pbl8xIHNlbGVj dCBpbnQ0cmFuZ2UoZywgZysxMDApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAsIDEwKSBn OworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzIgc2VsZWN0IGludDRyYW5nZShnLCBnKzEw KSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCA1MDApIGc7CitpbnNlcnQgaW50byB0ZXN0X3Jhbmdl X2pvaW5fMiBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTAwKSBmcm9tIGdlbmVyYXRlX3Nlcmllcygx LCA1MDAsIDEwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzMgc2VsZWN0IGludDRy YW5nZShnLCBnKzEwKSBmcm9tIGdlbmVyYXRlX3Nlcmllcyg1MDEsIDEwMDApIGc7CitpbnNlcnQg aW50byB0ZXN0X3JhbmdlX2pvaW5fMyBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTAwKSBmcm9tIGdl bmVyYXRlX3Nlcmllcyg1MDEsIDEwMDAsIDEwKSBnOworYW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5f MTsKK2FuYWx5emUgdGVzdF9yYW5nZV9qb2luXzI7CithbmFseXplIHRlc3RfcmFuZ2Vfam9pbl8z OworLS0gcmVvcmRlciBqb2lucyBiYXNlZCBvbiBjb21wdXRlZCBzZWxlY3Rpdml0eQorZXhwbGFp biAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3JhbmdlX2pvaW5fMSwgdGVz dF9yYW5nZV9qb2luXzIsIHRlc3RfcmFuZ2Vfam9pbl8zIHdoZXJlIGlyMSAmJiBpcjIgYW5kIGly MiAmJiBpcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgSm9pbiBG aWx0ZXI6ICh0ZXN0X3JhbmdlX2pvaW5fMS5pcjEgJiYgdGVzdF9yYW5nZV9qb2luXzIuaXIyKQor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9pbl8xCisgICAgICAgICAtPiAg TWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAg ICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0ZXN0X3JhbmdlX2pvaW5fMi5pcjIgJiYgdGVzdF9yYW5n ZV9qb2luXzMuaXIzKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3Rf cmFuZ2Vfam9pbl8yCisgICAgICAgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X3JhbmdlX2pvaW5fMwor KDEwIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVz dF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vfam9pbl8yLCB0ZXN0X3JhbmdlX2pvaW5fMyB3aGVy ZSBpcjEgPDwgaXIyIGFuZCBpcjIgPDwgaXIzOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg IEpvaW4gRmlsdGVyOiAodGVzdF9yYW5nZV9qb2luXzIuaXIyIDw8IHRlc3RfcmFuZ2Vfam9pbl8z LmlyMykKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgSm9pbiBGaWx0 ZXI6ICh0ZXN0X3JhbmdlX2pvaW5fMS5pcjEgPDwgdGVzdF9yYW5nZV9qb2luXzIuaXIyKQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9pbl8xCisgICAgICAgICAg ICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biB0ZXN0X3JhbmdlX2pvaW5fMgorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2luXzMKKygxMCByb3dzKQorCitleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl8xLCB0 ZXN0X3JhbmdlX2pvaW5fMiwgdGVzdF9yYW5nZV9qb2luXzMgd2hlcmUgaXIxID4+IGlyMiBhbmQg aXIyID4+IGlyMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKHRl c3RfcmFuZ2Vfam9pbl8xLmlyMSA+PiB0ZXN0X3JhbmdlX2pvaW5fMi5pcjIpCisgICAgICAgICAt PiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIEpvaW4gRmlsdGVyOiAodGVzdF9yYW5nZV9q b2luXzIuaXIyID4+IHRlc3RfcmFuZ2Vfam9pbl8zLmlyMykKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiB0ZXN0X3JhbmdlX2pvaW5fMgorICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFs aXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2lu XzMKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X3JhbmdlX2pvaW5fMQorKDkgcm93cykK KworZHJvcCB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMTsKK2Ryb3AgdGFibGUgdGVzdF9yYW5nZV9q b2luXzI7Citkcm9wIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8zOworLS0KKy0tIHRlc3QgcmFuZ2Ug am9pbiBzZWxlY3Rpdml0eSB3aXRoIGZ1bGx5IGRpc2pvaW50IGhpc3RvZ3JhbXMKKy0tIChleGVy Y2lzZXMgdGhlIGJvdW5kcy1jaGVjayBsb2dpYyB3aGVuIGhpc3RvZ3JhbXMgZG8gbm90IG92ZXJs YXApCistLQorY3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl9sbyAociBpbnQ0cmFuZ2UpOwor Y3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl9oaSAociBpbnQ0cmFuZ2UpOworLS0gbG93IHJh bmdlczogWzEsMTEpLCBbMiwxMiksIC4uLiBbNTAwLDUxMCkKK2luc2VydCBpbnRvIHRlc3RfcmFu Z2Vfam9pbl9sbyBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsIDUwMCkgZzsKKy0tIGhpZ2ggcmFuZ2VzOiBbMTAwMDEsMTAwMTEpLCBbMTAwMDIsMTAwMTIp LCAuLi4gWzEwNTAwLDEwNTEwKQoraW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luX2hpIHNlbGVj dCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMTAwMDEsIDEwNTAwKSBn OworYW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5fbG87CithbmFseXplIHRlc3RfcmFuZ2Vfam9pbl9o aTsKKy0tIGxvIDw8IGhpIHNob3VsZCBwcm9kdWNlIGEgbGFyZ2Ugc2VsZWN0aXZpdHkgKG1vc3Qg cGFpcnMgbWF0Y2gpCistLSBsbyA+PiBoaSBzaG91bGQgcHJvZHVjZSBhIG5lYXItemVybyBzZWxl Y3Rpdml0eQorLS0gbG8gJiYgaGkgc2hvdWxkIHByb2R1Y2UgYSBuZWFyLXplcm8gc2VsZWN0aXZp dHkgKG5vIG92ZXJsYXApCistLSBUaGVzZSBzaG91bGQgbm90IGNyYXNoIGFuZCBzaG91bGQgcHJv ZHVjZSBzdGFibGUgcGxhbnMuCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBm cm9tIHRlc3RfcmFuZ2Vfam9pbl9sbyBhLCB0ZXN0X3JhbmdlX2pvaW5faGkgYiB3aGVyZSBhLnIg PDwgYi5yOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjog KGEuciA8PCBiLnIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2luX2xv IGEKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHRlc3RfcmFuZ2Vfam9pbl9oaSBiCisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYp IHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl9sbyBhLCB0ZXN0X3JhbmdlX2pv aW5faGkgYiB3aGVyZSBhLnIgPj4gYi5yOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAg ICAgICBKb2luIEZpbHRlcjogKGEuciA+PiBiLnIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g dGVzdF9yYW5nZV9qb2luX2xvIGEKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9pbl9oaSBiCisoNiByb3dzKQorCitl eHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl9s byBhLCB0ZXN0X3JhbmdlX2pvaW5faGkgYiB3aGVyZSBhLnIgJiYgYi5yOworICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKGEuciAmJiBiLnIpCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gdGVzdF9yYW5nZV9qb2luX2xvIGEKKyAgICAgICAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfcmFuZ2Vfam9pbl9o aSBiCisoNiByb3dzKQorCitkcm9wIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl9sbzsKK2Ryb3AgdGFi bGUgdGVzdF9yYW5nZV9qb2luX2hpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv cmFuZ2V0eXBlcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yYW5nZXR5cGVzLnNxbAppbmRl eCA1YzRiMDMzN2I3YS4uZjY5MTA5ZGEzMzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3JhbmdldHlwZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3JhbmdldHlwZXMu c3FsCkBAIC03MDgsMyArNzA4LDU2IEBAIHNlbGVjdCAqIGZyb20gdGV4dF9zdXBwb3J0X3Rlc3Qg d2hlcmUgdCA8QCB0ZXh0cmFuZ2Vfc3VwcCgnYScsICdkJyk7CiBkcm9wIHRhYmxlIHRleHRfc3Vw cG9ydF90ZXN0OwogCiBkcm9wIHR5cGUgdGV4dHJhbmdlX3N1cHA7CisKKy0tCistLSB0ZXN0IHNl bGVjdGl2aXR5IG9mIHJhbmdlIGpvaW4gb3BlcmF0b3JzCistLQorY3JlYXRlIHRhYmxlIHRlc3Rf cmFuZ2Vfam9pbl8xIChpcjEgaW50NHJhbmdlKTsKK2NyZWF0ZSB0YWJsZSB0ZXN0X3JhbmdlX2pv aW5fMiAoaXIyIGludDRyYW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9yYW5nZV9qb2luXzMgKGly MyBpbnQ0cmFuZ2UpOworCitpbnNlcnQgaW50byB0ZXN0X3JhbmdlX2pvaW5fMSBzZWxlY3QgaW50 NHJhbmdlKGcsIGcrMTApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitpbnNlcnQg aW50byB0ZXN0X3JhbmdlX2pvaW5fMSBzZWxlY3QgaW50NHJhbmdlKGcsIGcrMTAwKSBmcm9tIGdl bmVyYXRlX3NlcmllcygxLCAxMDAwLCAxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfcmFuZ2Vfam9p bl8yIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAw KSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzIgc2VsZWN0IGludDRyYW5nZShnLCBn KzEwMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwLCAxMCkgZzsKK2luc2VydCBpbnRvIHRl c3RfcmFuZ2Vfam9pbl8zIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoNTAxLCAxMDAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luXzMgc2VsZWN0 IGludDRyYW5nZShnLCBnKzEwMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoNTAxLCAxMDAwLCAxMCkg ZzsKKworYW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5fMTsKK2FuYWx5emUgdGVzdF9yYW5nZV9qb2lu XzI7CithbmFseXplIHRlc3RfcmFuZ2Vfam9pbl8zOworCistLSByZW9yZGVyIGpvaW5zIGJhc2Vk IG9uIGNvbXB1dGVkIHNlbGVjdGl2aXR5CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3Vu dCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl8xLCB0ZXN0X3JhbmdlX2pvaW5fMiwgdGVzdF9yYW5n ZV9qb2luXzMgd2hlcmUgaXIxICYmIGlyMiBhbmQgaXIyICYmIGlyMzsKK2V4cGxhaW4gKGNvc3Rz IG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9yYW5nZV9qb2luXzEsIHRlc3RfcmFuZ2Vf am9pbl8yLCB0ZXN0X3JhbmdlX2pvaW5fMyB3aGVyZSBpcjEgPDwgaXIyIGFuZCBpcjIgPDwgaXIz OworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3JhbmdlX2pv aW5fMSwgdGVzdF9yYW5nZV9qb2luXzIsIHRlc3RfcmFuZ2Vfam9pbl8zIHdoZXJlIGlyMSA+PiBp cjIgYW5kIGlyMiA+PiBpcjM7CisKK2Ryb3AgdGFibGUgdGVzdF9yYW5nZV9qb2luXzE7Citkcm9w IHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl8yOworZHJvcCB0YWJsZSB0ZXN0X3JhbmdlX2pvaW5fMzsK KworLS0KKy0tIHRlc3QgcmFuZ2Ugam9pbiBzZWxlY3Rpdml0eSB3aXRoIGZ1bGx5IGRpc2pvaW50 IGhpc3RvZ3JhbXMKKy0tIChleGVyY2lzZXMgdGhlIGJvdW5kcy1jaGVjayBsb2dpYyB3aGVuIGhp c3RvZ3JhbXMgZG8gbm90IG92ZXJsYXApCistLQorY3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9p bl9sbyAociBpbnQ0cmFuZ2UpOworY3JlYXRlIHRhYmxlIHRlc3RfcmFuZ2Vfam9pbl9oaSAociBp bnQ0cmFuZ2UpOworCistLSBsb3cgcmFuZ2VzOiBbMSwxMSksIFsyLDEyKSwgLi4uIFs1MDAsNTEw KQoraW5zZXJ0IGludG8gdGVzdF9yYW5nZV9qb2luX2xvIHNlbGVjdCBpbnQ0cmFuZ2UoZywgZysx MCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnOworLS0gaGlnaCByYW5nZXM6IFsxMDAw MSwxMDAxMSksIFsxMDAwMiwxMDAxMiksIC4uLiBbMTA1MDAsMTA1MTApCitpbnNlcnQgaW50byB0 ZXN0X3JhbmdlX2pvaW5faGkgc2VsZWN0IGludDRyYW5nZShnLCBnKzEwKSBmcm9tIGdlbmVyYXRl X3NlcmllcygxMDAwMSwgMTA1MDApIGc7CisKK2FuYWx5emUgdGVzdF9yYW5nZV9qb2luX2xvOwor YW5hbHl6ZSB0ZXN0X3JhbmdlX2pvaW5faGk7CisKKy0tIGxvIDw8IGhpIHNob3VsZCBwcm9kdWNl IGEgbGFyZ2Ugc2VsZWN0aXZpdHkgKG1vc3QgcGFpcnMgbWF0Y2gpCistLSBsbyA+PiBoaSBzaG91 bGQgcHJvZHVjZSBhIG5lYXItemVybyBzZWxlY3Rpdml0eQorLS0gbG8gJiYgaGkgc2hvdWxkIHBy b2R1Y2UgYSBuZWFyLXplcm8gc2VsZWN0aXZpdHkgKG5vIG92ZXJsYXApCistLSBUaGVzZSBzaG91 bGQgbm90IGNyYXNoIGFuZCBzaG91bGQgcHJvZHVjZSBzdGFibGUgcGxhbnMuCitleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfcmFuZ2Vfam9pbl9sbyBhLCB0ZXN0 X3JhbmdlX2pvaW5faGkgYiB3aGVyZSBhLnIgPDwgYi5yOworZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3JhbmdlX2pvaW5fbG8gYSwgdGVzdF9yYW5nZV9qb2lu X2hpIGIgd2hlcmUgYS5yID4+IGIucjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50 KCopIGZyb20gdGVzdF9yYW5nZV9qb2luX2xvIGEsIHRlc3RfcmFuZ2Vfam9pbl9oaSBiIHdoZXJl IGEuciAmJiBiLnI7CisKK2Ryb3AgdGFibGUgdGVzdF9yYW5nZV9qb2luX2xvOworZHJvcCB0YWJs ZSB0ZXN0X3JhbmdlX2pvaW5faGk7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --_006_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_ Content-Type: application/octet-stream; name="v6-0002-Improve-multirange-join-selectivity-estimation-fo.patch" Content-Description: v6-0002-Improve-multirange-join-selectivity-estimation-fo.patch Content-Disposition: attachment; filename="v6-0002-Improve-multirange-join-selectivity-estimation-fo.patch"; size=26481; creation-date="Tue, 14 Apr 2026 14:02:20 GMT"; modification-date="Tue, 14 Apr 2026 14:03:07 GMT" Content-Transfer-Encoding: base64 RnJvbSAzYjVlOTA1MjBiMTNjNzRmODI0ODkwMTM4ZmQ0YmMyMzlmMzUwNDYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2Nob2VtYW5zIDxtYXhpbWUuc2Nob2VtYW5zQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMTY6MDY6MDMgKzAyMDAKU3Vi amVjdDogW1BBVENIIHY2IDIvM10gSW1wcm92ZSBtdWx0aXJhbmdlIGpvaW4gc2VsZWN0aXZpdHkg ZXN0aW1hdGlvbiBmb3IgPDwsCiA+PiwgJiYKCkFkZCBtdWx0aXJhbmdlam9pbnNlbCwgdGhlIG11 bHRpcmFuZ2UgZXF1aXZhbGVudCBvZiByYW5nZWpvaW5zZWwsCnN1cHBvcnRpbmcgYWxsIHR5cGUg Y29tYmluYXRpb25zOiBtdWx0aXJhbmdlIHZzIG11bHRpcmFuZ2UsIHJhbmdlIHZzCm11bHRpcmFu Z2UsIGFuZCBtdWx0aXJhbmdlIHZzIHJhbmdlLgoKVGhlIGNvZGUgaXMgaW50ZW50aW9uYWxseSBk dXBsaWNhdGVkIGZyb20gcmFuZ2V0eXBlc19zZWxmdW5jcy5jIGZvcgpyZXZpZXdhYmlsaXR5LiBB IGZvbGxvdy11cCBjb21taXQgd2lsbCByZW1vdmUgdGhlIGR1cGxpY2F0aW9uLgotLS0KIC4uLi91 dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMgICAgICB8IDMxOCArKysrKysrKysr KysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0ICAgICAgICAgICB8 ICAxOCArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgIHwg ICA0ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXVsdGlyYW5nZXR5cGVzLm91dCB8IDE1 NyArKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL211bHRpcmFuZ2V0eXBlcy5zcWwgICAg ICB8ICA3MiArKysrCiA1IGZpbGVzIGNoYW5nZWQsIDU2MCBpbnNlcnRpb25zKCspLCA5IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlw ZXNfc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2Vs ZnVuY3MuYwppbmRleCA1MzMxMTE0NDVlNy4uODdmM2RiMTYyYTYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2VsZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMKQEAgLTEzMzQsMyArMTMz NCwzMjEgQEAgY2FsY19oaXN0X3NlbGVjdGl2aXR5X2NvbnRhaW5zKFR5cGVDYWNoZUVudHJ5ICp0 eXBjYWNoZSwKIAogCXJldHVybiBzdW1fZnJhYzsKIH0KKworLyoKKyAqIEVzdGltYXRlIGpvaW4g c2VsZWN0aXZpdHkgUChYIDwgWSkgdXNpbmcgcmFuZ2Vib3VuZCBoaXN0b2dyYW1zLgorICoKKyAq IEJhc2VkIG9uOiBEaW9nbyBSZXBhcywgWmhpY2hlbmcgTHVvLCBNYXhpbWUgU2Nob2VtYW5zLCBN YWhtb3VkIFNha3IsIDIwMjIKKyAqICJTZWxlY3Rpdml0eSBFc3RpbWF0aW9uIG9mIEluZXF1YWxp dHkgSm9pbnMgSW4gRGF0YWJhc2VzIgorICogaHR0cHM6Ly9kb2kub3JnLzEwLjQ4NTUwL2FyWGl2 LjIyMDYuMDczOTYKKyAqCisgKiBoaXN0MSBhbmQgaGlzdDIgYXJlIGFycmF5cyBvZiBSYW5nZUJv dW5kIGVudHJpZXMgZnJvbSB0aGUgYm91bmRzIGhpc3RvZ3JhbXMKKyAqIG9mIHR3byByYW5nZS10 eXBlZCBvciBtdWx0aXJhbmdlLXR5cGVkIGF0dHJpYnV0ZXMgWCBhbmQgWSwgcmVzcGVjdGl2ZWx5 LgorICogRWFjaCBhcnJheSBoYXMgYXQgbGVhc3QgMiBlbnRyaWVzIChvbmUgaGlzdG9ncmFtIGJp bikuICBUaGUgZW50cmllcyBjYXJyeQorICogZnVsbCBib3VuZCBtZXRhZGF0YSAobG93ZXIvdXBw ZXIgZmxhZywgaW5jbHVzaXZlL2V4Y2x1c2l2ZSksIGFuZCBhbGwKKyAqIGNvbXBhcmlzb25zIHVz ZSByYW5nZV9jbXBfYm91bmRzKCkgc28gdGhhdCBib3VuZCBzZW1hbnRpY3MgYXJlIHByZXNlcnZl ZC4KKyAqCisgKiBUaGUgYWxnb3JpdGhtIG1vZGVscyBlYWNoIGF0dHJpYnV0ZSdzIGRpc3RyaWJ1 dGlvbiBhcyBhIHBpZWNld2lzZSBmdW5jdGlvbgorICogZGVyaXZlZCBmcm9tIGl0cyBoaXN0b2dy YW0sIHRoZW4gY29tcHV0ZXM6CisgKiAgIFAoWCA8IFkpID0gMC41ICogc3VtKCAoRl9YKHByZXYp ICsgRl9YKGN1cikpICogKEZfWShjdXIpIC0gRl9ZKHByZXYpKSApCisgKiBieSBwYXJhbGxlbC1z Y2FubmluZyBib3RoIGhpc3RvZ3JhbXMuCisgKgorICogVGhlIGluaXRpYWwgZmFzdC1mb3J3YXJk IGxvb3BzIHNraXAgaGlzdG9ncmFtIGVudHJpZXMgdGhhdCBmYWxsIGVudGlyZWx5CisgKiBiZWZv cmUgdGhlIG90aGVyIGhpc3RvZ3JhbSdzIHJhbmdlLCBzbyB0aGUgbWFpbiBsb29wIG9ubHkgcHJv Y2Vzc2VzIHRoZQorICogb3ZlcmxhcHBpbmcgcmVnaW9uLiAgQm91bmRzIGNoZWNrcyBhcmUgcmVx dWlyZWQgYmVjYXVzZSB0aGUgaGlzdG9ncmFtcyBtYXkKKyAqIGJlIGNvbXBsZXRlbHkgZGlzam9p bnQgKGUuZy4sIGFsbCBvZiBYIGlzIGJlbG93IGFsbCBvZiBZKS4KKyAqLworc3RhdGljIGRvdWJs ZQorY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAor CQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdDEsIGludCBuaGlzdDEsCisJCQkJCQkgICBj b25zdCBSYW5nZUJvdW5kICpoaXN0MiwgaW50IG5oaXN0MikKK3sKKwlpbnQJCQlpLAorCQkJCWo7 CisJZG91YmxlCQlzZWxlY3Rpdml0eSA9IDAuMDsKKwlkb3VibGUJCXByZXZfc2VsMSA9IC0xLjA7 CS8qIG5lZ2F0aXZlIHNlbnRpbmVsIHNraXBzIGZpcnN0IGl0ZXIgKi8KKwlkb3VibGUJCXByZXZf c2VsMiA9IDAuMDsKKworCUFzc2VydChuaGlzdDEgPiAxKTsKKwlBc3NlcnQobmhpc3QyID4gMSk7 CisKKwkvKgorCSAqIEZhc3QtZm9yd2FyZCBwYXN0IGhpc3QxIGVudHJpZXMgdGhhdCBhcmUgZW50 aXJlbHkgYmVsb3cgaGlzdDJbMF0sIGFuZAorCSAqIHZpY2UgdmVyc2EuICBCb3VuZHMgY2hlY2tz IHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiB0aGUKKwkgKiBoaXN0b2dyYW1zIGFy ZSBmdWxseSBkaXNqb2ludC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmhpc3QxICYmCisJCSBy YW5nZV9jbXBfYm91bmRzKHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MlswXSkgPCAwOyBpKysp CisJCTsKKwlmb3IgKGogPSAwOyBqIDwgbmhpc3QyICYmCisJCSByYW5nZV9jbXBfYm91bmRzKHR5 cGNhY2hlLCAmaGlzdDJbal0sICZoaXN0MVswXSkgPCAwOyBqKyspCisJCTsKKworCS8qCisJICog SGFuZGxlIGZ1bGx5LXNlcGFyYXRlZCBoaXN0b2dyYW1zLiAgV2hlbiBhbGwgYm91bmRzIGluIGhp c3QxIGFyZSBiZWxvdworCSAqIGFsbCBib3VuZHMgaW4gaGlzdDIsIFAoWCA8IFkpIGlzIH4xLjAu ICBXaGVuIGFsbCBvZiBoaXN0MiBpcyBiZWxvdworCSAqIGhpc3QxLCBQKFggPCBZKSBpcyB+MC4w LiAgV2UgcmV0dXJuIGltbWVkaWF0ZWx5IHJhdGhlciB0aGFuIGZhbGxpbmcKKwkgKiBpbnRvIHRo ZSBvdmVybGFwIHdhbGsgd2l0aCBpbnZhbGlkIGluZGljZXMuCisJICovCisJaWYgKGkgPj0gbmhp c3QxKQorCQlyZXR1cm4gMS4wOworCWlmIChqID49IG5oaXN0MikKKwkJcmV0dXJuIDAuMDsKKwor CS8qIFdhbGsgdGhlIG92ZXJsYXBwaW5nIHJlZ2lvbiBvZiBib3RoIGhpc3RvZ3JhbXMgKi8KKwl3 aGlsZSAoaSA8IG5oaXN0MSAmJiBqIDwgbmhpc3QyKQorCXsKKwkJZG91YmxlCQljdXJfc2VsMSwK KwkJCQkJY3VyX3NlbDI7CisJCVJhbmdlQm91bmQJY3VyX3N5bmM7CisJCWludAkJCWNtcDsKKwor CQljbXAgPSByYW5nZV9jbXBfYm91bmRzKHR5cGNhY2hlLCAmaGlzdDFbaV0sICZoaXN0MltqXSk7 CisJCWlmIChjbXAgPCAwKQorCQkJY3VyX3N5bmMgPSBoaXN0MVtpKytdOworCQllbHNlIGlmIChj bXAgPiAwKQorCQkJY3VyX3N5bmMgPSBoaXN0MltqKytdOworCQllbHNlCisJCXsKKwkJCS8qIEVx dWFsIGJvdW5kczogYWR2YW5jZSBib3RoICovCisJCQljdXJfc3luYyA9IGhpc3QxW2ldOworCQkJ aSsrOworCQkJaisrOworCQl9CisJCWN1cl9zZWwxID0gY2FsY19oaXN0X3NlbGVjdGl2aXR5X3Nj YWxhcih0eXBjYWNoZSwgJmN1cl9zeW5jLAorCQkJCQkJCQkJCQkJaGlzdDEsIG5oaXN0MSwgZmFs c2UpOworCQljdXJfc2VsMiA9IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIodHlwY2FjaGUs ICZjdXJfc3luYywKKwkJCQkJCQkJCQkJCWhpc3QyLCBuaGlzdDIsIGZhbHNlKTsKKworCQkvKiBT a2lwIHRoZSBmaXJzdCBpdGVyYXRpb24gKG5vIHByZXZpb3VzIHBvaW50IHlldCkgKi8KKwkJaWYg KHByZXZfc2VsMSA+PSAwKQorCQkJc2VsZWN0aXZpdHkgKz0gKHByZXZfc2VsMSArIGN1cl9zZWwx KSAqIChjdXJfc2VsMiAtIHByZXZfc2VsMik7CisKKwkJcHJldl9zZWwxID0gY3VyX3NlbDE7CisJ CXByZXZfc2VsMiA9IGN1cl9zZWwyOworCX0KKworCS8qIFAoWCA8IFkpID0gMC41ICogU3VtKC4u LikgKi8KKwlzZWxlY3Rpdml0eSAvPSAyOworCisJLyogSW5jbHVkZSByZW1haW5kZXIgb2YgaGlz dDIgaWYgaGlzdDEgd2FzIGV4aGF1c3RlZCBmaXJzdCAqLworCWlmIChqIDwgbmhpc3QyKQorCQlz ZWxlY3Rpdml0eSArPSAxIC0gcHJldl9zZWwyOworCisJcmV0dXJuIHNlbGVjdGl2aXR5OworfQor CisvKgorICogbXVsdGlyYW5nZWpvaW5zZWwgLS0gam9pbiBzZWxlY3Rpdml0eSBmb3IgbXVsdGly YW5nZSBvcGVyYXRvcnMKKyAqCisgKiBTdXBwb3J0czogPDwsID4+LCAmJiBmb3IgYWxsIHR5cGUg Y29tYmluYXRpb25zOgorICogICBtdWx0aXJhbmdlIHZzIG11bHRpcmFuZ2UsIG11bHRpcmFuZ2Ug dnMgcmFuZ2UsIHJhbmdlIHZzIG11bHRpcmFuZ2UKKyAqCisgKiBUaGVzZSBvcGVyYXRvcnMgbWFw IGRpcmVjdGx5IHRvIHN0cmljdCBib3VuZCBjb21wYXJpc29ucyBQKFggPCBZKSwKKyAqIHdoaWNo IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KCkgZXN0aW1hdGVzIGZyb20gYm91bmQgaGlzdG9n cmFtcy4KKyAqIEJvdGggcmFuZ2UgYW5kIG11bHRpcmFuZ2UgdHlwZXMgc3RvcmUgYm91bmQgaGlz dG9ncmFtcyBpbiB0aGUgc2FtZQorICogZm9ybWF0LCBzbyB0aGUgZXN0aW1hdGlvbiBpcyBpZGVu dGljYWwgcmVnYXJkbGVzcyBvZiB0eXBlIGNvbWJpbmF0aW9uLgorICovCitEYXR1bQorbXVsdGly YW5nZWpvaW5zZWwoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQbGFubmVySW5mbyAqcm9vdCA9IChQ bGFubmVySW5mbyAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwlPaWQJCQlvcGVyYXRvciA9IFBH X0dFVEFSR19PSUQoMSk7CisJTGlzdAkgICAqYXJncyA9IChMaXN0ICopIFBHX0dFVEFSR19QT0lO VEVSKDIpOworCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvID0gKFNwZWNpYWxKb2luSW5mbyAqKSBQ R19HRVRBUkdfUE9JTlRFUig0KTsKKwlWYXJpYWJsZVN0YXREYXRhIHZhcmRhdGExOworCVZhcmlh YmxlU3RhdERhdGEgdmFyZGF0YTI7CisJU2VsZWN0aXZpdHkgc2VsZWM7CisJQXR0U3RhdHNTbG90 IGhpc3QxOworCUF0dFN0YXRzU2xvdCBoaXN0MjsKKwlBdHRTdGF0c1Nsb3Qgc3Nsb3Q7CisJYm9v bAkJaGF2ZV9oaXN0MSA9IGZhbHNlOworCWJvb2wJCWhhdmVfaGlzdDIgPSBmYWxzZTsKKwlUeXBl Q2FjaGVFbnRyeSAqdHlwY2FjaGU7CisJVHlwZUNhY2hlRW50cnkgKnJuZ190eXBjYWNoZTsKKwlG b3JtX3BnX3N0YXRpc3RpYyBzdGF0czE7CisJRm9ybV9wZ19zdGF0aXN0aWMgc3RhdHMyOworCWRv dWJsZQkJZW1wdHlfZnJhYzE7CisJZG91YmxlCQllbXB0eV9mcmFjMjsKKwlkb3VibGUJCW51bGxf ZnJhYzE7CisJZG91YmxlCQludWxsX2ZyYWMyOworCWludAkJCW5oaXN0MTsKKwlpbnQJCQluaGlz dDI7CisJUmFuZ2VCb3VuZCAqaGlzdDFfbG93ZXI7CisJUmFuZ2VCb3VuZCAqaGlzdDFfdXBwZXI7 CisJUmFuZ2VCb3VuZCAqaGlzdDJfbG93ZXI7CisJUmFuZ2VCb3VuZCAqaGlzdDJfdXBwZXI7CisJ Ym9vbAkJam9pbl9pc19yZXZlcnNlZDsKKwlib29sCQllbXB0eTsKKwlpbnQJCQlpOworCisJZ2V0 X2pvaW5fdmFyaWFibGVzKHJvb3QsIGFyZ3MsIHNqaW5mbywgJnZhcmRhdGExLCAmdmFyZGF0YTIs CisJCQkJCSAgICZqb2luX2lzX3JldmVyc2VkKTsKKworCXNlbGVjID0gZGVmYXVsdF9tdWx0aXJh bmdlX3NlbGVjdGl2aXR5KG9wZXJhdG9yKTsKKworCS8qCisJICogQWNxdWlyZSBoaXN0b2dyYW0g c3RhdHMgZm9yIGJvdGggc2lkZXMuICBFYWNoIHNsb3QgaXMgdHJhY2tlZAorCSAqIGluZGVwZW5k ZW50bHkgc28gd2UgY2FuIHJlbGVhc2UgZXhhY3RseSB3aGF0IHdhcyBhY3F1aXJlZCBvbiBhbnkK KwkgKiBmYWlsdXJlIHBhdGguCisJICovCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGEx LnN0YXRzVHVwbGUpIHx8CisJCSFIZWFwVHVwbGVJc1ZhbGlkKHZhcmRhdGEyLnN0YXRzVHVwbGUp KQorCQlnb3RvIGNsZWFudXA7CisKKwltZW1zZXQoJmhpc3QxLCAwLCBzaXplb2YoaGlzdDEpKTsK KwltZW1zZXQoJmhpc3QyLCAwLCBzaXplb2YoaGlzdDIpKTsKKworCWlmICghZ2V0X2F0dHN0YXRz c2xvdCgmaGlzdDEsIHZhcmRhdGExLnN0YXRzVHVwbGUsCisJCQkJCQkgIFNUQVRJU1RJQ19LSU5E X0JPVU5EU19ISVNUT0dSQU0sIEludmFsaWRPaWQsCisJCQkJCQkgIEFUVFNUQVRTU0xPVF9WQUxV RVMpKQorCQlnb3RvIGNsZWFudXA7CisJaGF2ZV9oaXN0MSA9IHRydWU7CisKKwlpZiAoIWdldF9h dHRzdGF0c3Nsb3QoJmhpc3QyLCB2YXJkYXRhMi5zdGF0c1R1cGxlLAorCQkJCQkJICBTVEFUSVNU SUNfS0lORF9CT1VORFNfSElTVE9HUkFNLCBJbnZhbGlkT2lkLAorCQkJCQkJICBBVFRTVEFUU1NM T1RfVkFMVUVTKSkKKwkJZ290byBjbGVhbnVwOworCWhhdmVfaGlzdDIgPSB0cnVlOworCisJLyoK KwkgKiBEZXRlcm1pbmUgdGhlIHJhbmdlIHR5cGUgY2FjaGUgZm9yIGJvdW5kIGNvbXBhcmlzb25z LiAgQXQgbGVhc3Qgb25lCisJICogc2lkZSBpcyBhIG11bHRpcmFuZ2UgdHlwZTsgdHJ5IHZhcmRh dGExIGZpcnN0LCB0aGVuIHZhcmRhdGEyLgorCSAqLworCXR5cGNhY2hlID0gbG9va3VwX3R5cGVf Y2FjaGUodmFyZGF0YTEudmFydHlwZSwgVFlQRUNBQ0hFX01VTFRJUkFOR0VfSU5GTyk7CisJaWYg KHR5cGNhY2hlLT5ybmd0eXBlICE9IE5VTEwpCisJCXJuZ190eXBjYWNoZSA9IHR5cGNhY2hlLT5y bmd0eXBlOworCWVsc2UKKwl7CisJCXR5cGNhY2hlID0gbG9va3VwX3R5cGVfY2FjaGUodmFyZGF0 YTIudmFydHlwZSwKKwkJCQkJCQkJCSBUWVBFQ0FDSEVfTVVMVElSQU5HRV9JTkZPKTsKKwkJcm5n X3R5cGNhY2hlID0gdHlwY2FjaGUtPnJuZ3R5cGU7CisJfQorCisJLyogTG9vayB1cCBOVUxMIGFu ZCBlbXB0eS1yYW5nZSBmcmFjdGlvbnMgKi8KKwlzdGF0czEgPSAoRm9ybV9wZ19zdGF0aXN0aWMp IEdFVFNUUlVDVCh2YXJkYXRhMS5zdGF0c1R1cGxlKTsKKwlzdGF0czIgPSAoRm9ybV9wZ19zdGF0 aXN0aWMpIEdFVFNUUlVDVCh2YXJkYXRhMi5zdGF0c1R1cGxlKTsKKworCW51bGxfZnJhYzEgPSBz dGF0czEtPnN0YW51bGxmcmFjOworCW51bGxfZnJhYzIgPSBzdGF0czItPnN0YW51bGxmcmFjOwor CisJLyogVHJ5IHRvIGdldCBmcmFjdGlvbiBvZiBlbXB0eSByYW5nZXMgZm9yIHRoZSBmaXJzdCB2 YXJpYWJsZSAqLworCWlmIChnZXRfYXR0c3RhdHNzbG90KCZzc2xvdCwgdmFyZGF0YTEuc3RhdHNU dXBsZSwKKwkJCQkJCSBTVEFUSVNUSUNfS0lORF9SQU5HRV9MRU5HVEhfSElTVE9HUkFNLAorCQkJ CQkJIEludmFsaWRPaWQsIEFUVFNUQVRTU0xPVF9OVU1CRVJTKSkKKwl7CisJCWlmIChzc2xvdC5u bnVtYmVycyAhPSAxKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZW1wdHkgZnJhY3Rpb24gc3Rh dGlzdGljIik7CisJCWVtcHR5X2ZyYWMxID0gc3Nsb3QubnVtYmVyc1swXTsKKwkJZnJlZV9hdHRz dGF0c3Nsb3QoJnNzbG90KTsKKwl9CisJZWxzZQorCXsKKwkJZW1wdHlfZnJhYzEgPSAwLjA7CisJ fQorCisJLyogVHJ5IHRvIGdldCBmcmFjdGlvbiBvZiBlbXB0eSByYW5nZXMgZm9yIHRoZSBzZWNv bmQgdmFyaWFibGUgKi8KKwlpZiAoZ2V0X2F0dHN0YXRzc2xvdCgmc3Nsb3QsIHZhcmRhdGEyLnN0 YXRzVHVwbGUsCisJCQkJCQkgU1RBVElTVElDX0tJTkRfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTSwK KwkJCQkJCSBJbnZhbGlkT2lkLCBBVFRTVEFUU1NMT1RfTlVNQkVSUykpCisJeworCQlpZiAoc3Ns b3Qubm51bWJlcnMgIT0gMSkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGVtcHR5IGZyYWN0aW9u IHN0YXRpc3RpYyIpOworCQllbXB0eV9mcmFjMiA9IHNzbG90Lm51bWJlcnNbMF07CisJCWZyZWVf YXR0c3RhdHNzbG90KCZzc2xvdCk7CisJfQorCWVsc2UKKwl7CisJCWVtcHR5X2ZyYWMyID0gMC4w OworCX0KKworCS8qIENvbnZlcnQgcmFuZ2UgaGlzdG9ncmFtcyB0byBzZXBhcmF0ZSBsb3dlci91 cHBlciBib3VuZCBhcnJheXMgKi8KKwluaGlzdDEgPSBoaXN0MS5udmFsdWVzOworCWhpc3QxX2xv d2VyID0gKFJhbmdlQm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0MSk7 CisJaGlzdDFfdXBwZXIgPSAoUmFuZ2VCb3VuZCAqKSBwYWxsb2Moc2l6ZW9mKFJhbmdlQm91bmQp ICogbmhpc3QxKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmhpc3QxOyBpKyspCisJeworCQlyYW5nZV9k ZXNlcmlhbGl6ZShybmdfdHlwY2FjaGUsIERhdHVtR2V0UmFuZ2VUeXBlUChoaXN0MS52YWx1ZXNb aV0pLAorCQkJCQkJICAmaGlzdDFfbG93ZXJbaV0sICZoaXN0MV91cHBlcltpXSwgJmVtcHR5KTsK KwkJaWYgKGVtcHR5KQorCQkJZWxvZyhFUlJPUiwgImJvdW5kcyBoaXN0b2dyYW0gY29udGFpbnMg YW4gZW1wdHkgcmFuZ2UiKTsKKwl9CisKKwluaGlzdDIgPSBoaXN0Mi5udmFsdWVzOworCWhpc3Qy X2xvd2VyID0gKFJhbmdlQm91bmQgKikgcGFsbG9jKHNpemVvZihSYW5nZUJvdW5kKSAqIG5oaXN0 Mik7CisJaGlzdDJfdXBwZXIgPSAoUmFuZ2VCb3VuZCAqKSBwYWxsb2Moc2l6ZW9mKFJhbmdlQm91 bmQpICogbmhpc3QyKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmhpc3QyOyBpKyspCisJeworCQlyYW5n ZV9kZXNlcmlhbGl6ZShybmdfdHlwY2FjaGUsIERhdHVtR2V0UmFuZ2VUeXBlUChoaXN0Mi52YWx1 ZXNbaV0pLAorCQkJCQkJICAmaGlzdDJfbG93ZXJbaV0sICZoaXN0Ml91cHBlcltpXSwgJmVtcHR5 KTsKKwkJaWYgKGVtcHR5KQorCQkJZWxvZyhFUlJPUiwgImJvdW5kcyBoaXN0b2dyYW0gY29udGFp bnMgYW4gZW1wdHkgcmFuZ2UiKTsKKwl9CisKKwkvKiBFc3RpbWF0ZSBzZWxlY3Rpdml0eSBiYXNl ZCBvbiB0aGUgb3BlcmF0b3IgKi8KKwlzd2l0Y2ggKG9wZXJhdG9yKQorCXsKKwkJY2FzZSBPSURf UkFOR0VfT1ZFUkxBUFNfTVVMVElSQU5HRV9PUDoKKwkJY2FzZSBPSURfTVVMVElSQU5HRV9PVkVS TEFQU19SQU5HRV9PUDoKKwkJY2FzZSBPSURfTVVMVElSQU5HRV9PVkVSTEFQU19NVUxUSVJBTkdF X09QOgorCisJCQkvKgorCQkJICogQSAmJiBCIGlmZiBOT1QoQSA8PCBCKSBBTkQgTk9UKEEgPj4g QikgPSAxIC0gUChBLnVwcGVyIDwKKwkJCSAqIEIubG93ZXIpIC0gUChCLnVwcGVyIDwgQS5sb3dl cikKKwkJCSAqLworCQkJc2VsZWMgPSAxOworCQkJc2VsZWMgLT0gY2FsY19oaXN0X2pvaW5fc2Vs ZWN0aXZpdHkocm5nX3R5cGNhY2hlLAorCQkJCQkJCQkJCQkJaGlzdDFfdXBwZXIsIG5oaXN0MSwK KwkJCQkJCQkJCQkJCWhpc3QyX2xvd2VyLCBuaGlzdDIpOworCQkJc2VsZWMgLT0gY2FsY19oaXN0 X2pvaW5fc2VsZWN0aXZpdHkocm5nX3R5cGNhY2hlLAorCQkJCQkJCQkJCQkJaGlzdDJfdXBwZXIs IG5oaXN0MiwKKwkJCQkJCQkJCQkJCWhpc3QxX2xvd2VyLCBuaGlzdDEpOworCQkJYnJlYWs7CisK KwkJY2FzZSBPSURfUkFOR0VfTEVGVF9NVUxUSVJBTkdFX09QOgorCQljYXNlIE9JRF9NVUxUSVJB TkdFX0xFRlRfUkFOR0VfT1A6CisJCWNhc2UgT0lEX01VTFRJUkFOR0VfTEVGVF9NVUxUSVJBTkdF X09QOgorCQkJLyogQSA8PCBCIGlmZiB1cHBlcihBKSA8IGxvd2VyKEIpICovCisJCQlzZWxlYyA9 IGNhbGNfaGlzdF9qb2luX3NlbGVjdGl2aXR5KHJuZ190eXBjYWNoZSwKKwkJCQkJCQkJCQkJICAg aGlzdDFfdXBwZXIsIG5oaXN0MSwKKwkJCQkJCQkJCQkJICAgaGlzdDJfbG93ZXIsIG5oaXN0Mik7 CisJCQlicmVhazsKKworCQljYXNlIE9JRF9SQU5HRV9SSUdIVF9NVUxUSVJBTkdFX09QOgorCQlj YXNlIE9JRF9NVUxUSVJBTkdFX1JJR0hUX1JBTkdFX09QOgorCQljYXNlIE9JRF9NVUxUSVJBTkdF X1JJR0hUX01VTFRJUkFOR0VfT1A6CisJCQkvKiBBID4+IEIgaWZmIHVwcGVyKEIpIDwgbG93ZXIo QSkgKi8KKwkJCXNlbGVjID0gY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkocm5nX3R5cGNhY2hl LAorCQkJCQkJCQkJCQkgICBoaXN0Ml91cHBlciwgbmhpc3QyLAorCQkJCQkJCQkJCQkgICBoaXN0 MV9sb3dlciwgbmhpc3QxKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBVbnN1cHBv cnRlZCBvcGVyYXRvcjsga2VlcCB0aGUgZGVmYXVsdCBzZWxlY3Rpdml0eSAqLworCQkJZ290byBj bGVhbnVwOworCX0KKworCS8qIFRoZSBoaXN0b2dyYW0tYmFzZWQgc2VsZWN0aXZpdHkgYXBwbGll cyB0byBub24tZW1wdHkgcmFuZ2VzIG9ubHkgKi8KKwlzZWxlYyAqPSAoMSAtIGVtcHR5X2ZyYWMx KSAqICgxIC0gZW1wdHlfZnJhYzIpOworCisJLyoKKwkgKiBGb3IgdGhlIHN1cHBvcnRlZCBvcGVy YXRvcnMgKDw8LCA+PiwgJiYpLCBlbXB0eSByYW5nZXMgYWx3YXlzIHByb2R1Y2UKKwkgKiBmYWxz ZSwgc28gbm8gZW1wdHktZnJhY3Rpb24gYWRqdXN0bWVudCBpcyBuZWVkZWQuCisJICovCisKKwkv KiBBbGwgbXVsdGlyYW5nZSBvcGVyYXRvcnMgYXJlIHN0cmljdCAqLworCXNlbGVjICo9ICgxIC0g bnVsbF9mcmFjMSkgKiAoMSAtIG51bGxfZnJhYzIpOworCitjbGVhbnVwOgorCWlmIChoYXZlX2hp c3QyKQorCQlmcmVlX2F0dHN0YXRzc2xvdCgmaGlzdDIpOworCWlmIChoYXZlX2hpc3QxKQorCQlm cmVlX2F0dHN0YXRzc2xvdCgmaGlzdDEpOworCisJUmVsZWFzZVZhcmlhYmxlU3RhdHModmFyZGF0 YTEpOworCVJlbGVhc2VWYXJpYWJsZVN0YXRzKHZhcmRhdGEyKTsKKworCUNMQU1QX1BST0JBQklM SVRZKHNlbGVjKTsKKworCVBHX1JFVFVSTl9GTE9BVDgoKGZsb2F0OCkgc2VsZWMpOworfQpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGVyYXRvci5kYXQgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX29wZXJhdG9yLmRhdAppbmRleCA1ZWE0NDM0ZjlmYS4uMjhmNjk2YTlmNDEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0CisrKyBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BlcmF0b3IuZGF0CkBAIC0zMzAyLDE5ICszMzAyLDE5IEBA CiAgIG9wcm5hbWUgPT4gJyYmJywgb3BybGVmdCA9PiAnYW55cmFuZ2UnLCBvcHJyaWdodCA9PiAn YW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnJiYoYW55 bXVsdGlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ICdyYW5nZV9vdmVybGFwc19tdWx0 aXJhbmdlJywgb3BycmVzdCA9PiAnbXVsdGlyYW5nZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ2FyZWFq b2luc2VsJyB9LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ ICcyODY3Jywgb2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0VfT1ZFUkxBUFNfUkFOR0VfT1An LAogICBkZXNjciA9PiAnb3ZlcmxhcHMnLAogICBvcHJuYW1lID0+ICcmJicsIG9wcmxlZnQgPT4g J2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFuZ2UnLAogICBvcHJyZXN1bHQgPT4g J2Jvb2wnLCBvcHJjb20gPT4gJyYmKGFueXJhbmdlLGFueW11bHRpcmFuZ2UpJywKICAgb3ByY29k ZSA9PiAnbXVsdGlyYW5nZV9vdmVybGFwc19yYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2Vz ZWwnLAotICBvcHJqb2luID0+ICdhcmVham9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGly YW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnMjg2OCcsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxU SVJBTkdFX09WRVJMQVBTX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnb3ZlcmxhcHMnLAog ICBvcHJuYW1lID0+ICcmJicsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9 PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnJiYo YW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ211bHRpcmFuZ2Vf b3ZlcmxhcHNfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJq b2luID0+ICdhcmVham9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAnbXVsdGlyYW5nZWpvaW5zZWwn IH0sCiB7IG9pZCA9PiAnMjg2OScsIG9pZF9zeW1ib2wgPT4gJ09JRF9NVUxUSVJBTkdFX0NPTlRB SU5TX0VMRU1fT1AnLAogICBkZXNjciA9PiAnY29udGFpbnMnLAogICBvcHJuYW1lID0+ICdAPics IG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55ZWxlbWVudCcsCkBA IC0zNDI4LDM3ICszNDI4LDM3IEBACiAgIG9wcm5hbWUgPT4gJzw8Jywgb3BybGVmdCA9PiAnYW55 cmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9v bCcsIG9wcmNvbSA9PiAnPj4oYW55bXVsdGlyYW5nZSxhbnlyYW5nZSknLAogICBvcHJjb2RlID0+ ICdyYW5nZV9iZWZvcmVfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAot ICBvcHJqb2luID0+ICdzY2FsYXJsdGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFu Z2Vqb2luc2VsJyB9LAogeyBvaWQgPT4gJzQzOTYnLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElS QU5HRV9MRUZUX1JBTkdFX09QJywKICAgZGVzY3IgPT4gJ2lzIGxlZnQgb2YnLAogICBvcHJuYW1l ID0+ICc8PCcsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55cmFu Z2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJz4+KGFueXJhbmdlLGFueW11 bHRpcmFuZ2UpJywKICAgb3ByY29kZSA9PiAnbXVsdGlyYW5nZV9iZWZvcmVfcmFuZ2UnLCBvcHJy ZXN0ID0+ICdtdWx0aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9 LAorICBvcHJqb2luID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0Mzk3Jywg b2lkX3N5bWJvbCA9PiAnT0lEX01VTFRJUkFOR0VfTEVGVF9NVUxUSVJBTkdFX09QJywKICAgZGVz Y3IgPT4gJ2lzIGxlZnQgb2YnLAogICBvcHJuYW1lID0+ICc8PCcsIG9wcmxlZnQgPT4gJ2FueW11 bHRpcmFuZ2UnLCBvcHJyaWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAn Ym9vbCcsIG9wcmNvbSA9PiAnPj4oYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9w cmNvZGUgPT4gJ211bHRpcmFuZ2VfYmVmb3JlX211bHRpcmFuZ2UnLCBvcHJyZXN0ID0+ICdtdWx0 aXJhbmdlc2VsJywKLSAgb3Byam9pbiA9PiAnc2NhbGFybHRqb2luc2VsJyB9LAorICBvcHJqb2lu ID0+ICdtdWx0aXJhbmdlam9pbnNlbCcgfSwKIHsgb2lkID0+ICc0Mzk4Jywgb2lkX3N5bWJvbCA9 PiAnT0lEX1JBTkdFX1JJR0hUX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnaXMgcmlnaHQg b2YnLAogICBvcHJuYW1lID0+ICc+PicsIG9wcmxlZnQgPT4gJ2FueXJhbmdlJywgb3BycmlnaHQg PT4gJ2FueW11bHRpcmFuZ2UnLAogICBvcHJyZXN1bHQgPT4gJ2Jvb2wnLCBvcHJjb20gPT4gJzw8 KGFueW11bHRpcmFuZ2UsYW55cmFuZ2UpJywKICAgb3ByY29kZSA9PiAncmFuZ2VfYWZ0ZXJfbXVs dGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBvcHJqb2luID0+ICdzY2Fs YXJndGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vqb2luc2VsJyB9LAogeyBv aWQgPT4gJzQzOTknLCBvaWRfc3ltYm9sID0+ICdPSURfTVVMVElSQU5HRV9SSUdIVF9SQU5HRV9P UCcsCiAgIGRlc2NyID0+ICdpcyByaWdodCBvZicsCiAgIG9wcm5hbWUgPT4gJz4+Jywgb3BybGVm dCA9PiAnYW55bXVsdGlyYW5nZScsIG9wcnJpZ2h0ID0+ICdhbnlyYW5nZScsCiAgIG9wcnJlc3Vs dCA9PiAnYm9vbCcsIG9wcmNvbSA9PiAnPDwoYW55cmFuZ2UsYW55bXVsdGlyYW5nZSknLAogICBv cHJjb2RlID0+ICdtdWx0aXJhbmdlX2FmdGVyX3JhbmdlJywgb3BycmVzdCA9PiAnbXVsdGlyYW5n ZXNlbCcsCi0gIG9wcmpvaW4gPT4gJ3NjYWxhcmd0am9pbnNlbCcgfSwKKyAgb3Byam9pbiA9PiAn bXVsdGlyYW5nZWpvaW5zZWwnIH0sCiB7IG9pZCA9PiAnNDQwMCcsIG9pZF9zeW1ib2wgPT4gJ09J RF9NVUxUSVJBTkdFX1JJR0hUX01VTFRJUkFOR0VfT1AnLAogICBkZXNjciA9PiAnaXMgcmlnaHQg b2YnLAogICBvcHJuYW1lID0+ICc+PicsIG9wcmxlZnQgPT4gJ2FueW11bHRpcmFuZ2UnLCBvcHJy aWdodCA9PiAnYW55bXVsdGlyYW5nZScsCiAgIG9wcnJlc3VsdCA9PiAnYm9vbCcsIG9wcmNvbSA9 PiAnPDwoYW55bXVsdGlyYW5nZSxhbnltdWx0aXJhbmdlKScsCiAgIG9wcmNvZGUgPT4gJ211bHRp cmFuZ2VfYWZ0ZXJfbXVsdGlyYW5nZScsIG9wcnJlc3QgPT4gJ211bHRpcmFuZ2VzZWwnLAotICBv cHJqb2luID0+ICdzY2FsYXJndGpvaW5zZWwnIH0sCisgIG9wcmpvaW4gPT4gJ211bHRpcmFuZ2Vq b2luc2VsJyB9LAogCiB7IG9pZCA9PiAnODI2MicsIGRlc2NyID0+ICdlcXVhbCcsCiAgIG9wcm5h bWUgPT4gJz0nLCBvcHJjYW5tZXJnZSA9PiAndCcsIG9wcmNhbmhhc2ggPT4gJ3QnLCBvcHJsZWZ0 ID0+ICdvaWQ4JywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGM2YTcwN2FjYWU0Li4xMGZi YzIyYzRhNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjkyMyw0ICsxMjkyMyw4IEBA CiAgIHByb25hbWUgPT4gJ3Jhbmdlam9pbnNlbCcsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0 dHlwZSA9PiAnZmxvYXQ4JywKICAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIG9pZCBpbnRlcm5h bCBpbnQyIGludGVybmFsJywKICAgcHJvc3JjID0+ICdyYW5nZWpvaW5zZWwnIH0sCit7IG9pZCA9 PiAnODM1NicsIGRlc2NyID0+ICdqb2luIHNlbGVjdGl2aXR5IGZvciBtdWx0aXJhbmdlIG9wZXJh dG9ycycsCisgIHByb25hbWUgPT4gJ211bHRpcmFuZ2Vqb2luc2VsJywgcHJvdm9sYXRpbGUgPT4g J3MnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDgnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwg b2lkIGludGVybmFsIGludDIgaW50ZXJuYWwnLAorICBwcm9zcmMgPT4gJ211bHRpcmFuZ2Vqb2lu c2VsJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdWx0aXJh bmdldHlwZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdWx0aXJhbmdldHlwZXMu b3V0CmluZGV4IGY1ZTdkZjhkZjQzLi5hYWI5YzVlMjYwNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9tdWx0aXJhbmdldHlwZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvbXVsdGlyYW5nZXR5cGVzLm91dApAQCAtMzUxMiwzICszNTEyLDE2MCBAQCBj cmVhdGUgZnVuY3Rpb24gbXJfdGFibGVfZmFpbChpIGFueWVsZW1lbnQpIHJldHVybnMgdGFibGUo aSBhbnllbGVtZW50LCByIGFueW11bAogICBhcyAkJCBzZWxlY3QgJDEsICdbMSwxMF0nICQkIGxh bmd1YWdlIHNxbDsKIEVSUk9SOiAgY2Fubm90IGRldGVybWluZSByZXN1bHQgZGF0YSB0eXBlCiBE RVRBSUw6ICBBIHJlc3VsdCBvZiB0eXBlIGFueW11bHRpcmFuZ2UgcmVxdWlyZXMgYXQgbGVhc3Qg b25lIGlucHV0IG9mIHR5cGUgYW55cmFuZ2Ugb3IgYW55bXVsdGlyYW5nZS4KKy0tIFJlc3RvcmUg R1VDcyBjaGFuZ2VkIGJ5IGVhcmxpZXIgaW5kZXggdGVzdHMKK1JFU0VUIGVuYWJsZV9zZXFzY2Fu OworUkVTRVQgZW5hYmxlX2luZGV4c2NhbjsKK1JFU0VUIGVuYWJsZV9iaXRtYXBzY2FuOworLS0K Ky0tIHRlc3Qgc2VsZWN0aXZpdHkgb2YgbXVsdGlyYW5nZSBqb2luIG9wZXJhdG9ycworLS0KK2Ny ZWF0ZSB0YWJsZSB0ZXN0X21yX2pvaW5fMSAobXIxIGludDRtdWx0aXJhbmdlKTsKK2NyZWF0ZSB0 YWJsZSB0ZXN0X21yX2pvaW5fMiAobXIyIGludDRtdWx0aXJhbmdlKTsKK2NyZWF0ZSB0YWJsZSB0 ZXN0X21yX2pvaW5fMyAobXIzIGludDRtdWx0aXJhbmdlKTsKK2luc2VydCBpbnRvIHRlc3RfbXJf am9pbl8xIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMCkpIGZyb20gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitpbnNlcnQgaW50byB0ZXN0X21yX2pvaW5fMSBzZWxl Y3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTAwKSkgZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwMCwgMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X21yX2pvaW5fMiBzZWxlY3QgaW50 NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCA1 MDApIGc7CitpbnNlcnQgaW50byB0ZXN0X21yX2pvaW5fMiBzZWxlY3QgaW50NG11bHRpcmFuZ2Uo aW50NHJhbmdlKGcsIGcrMTAwKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwLCAxMCkgZzsK K2luc2VydCBpbnRvIHRlc3RfbXJfam9pbl8zIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFu Z2UoZywgZysxMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCkgZzsKK2luc2VydCBp bnRvIHRlc3RfbXJfam9pbl8zIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysx MDApKSBmcm9tIGdlbmVyYXRlX3Nlcmllcyg1MDEsIDEwMDAsIDEwKSBnOworYW5hbHl6ZSB0ZXN0 X21yX2pvaW5fMTsKK2FuYWx5emUgdGVzdF9tcl9qb2luXzI7CithbmFseXplIHRlc3RfbXJfam9p bl8zOworLS0gbXVsdGlyYW5nZSB2cyBtdWx0aXJhbmdlOiByZW9yZGVyIGpvaW5zIGJhc2VkIG9u IGNvbXB1dGVkIHNlbGVjdGl2aXR5CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgq KSBmcm9tIHRlc3RfbXJfam9pbl8xLCB0ZXN0X21yX2pvaW5fMiwgdGVzdF9tcl9qb2luXzMgd2hl cmUgbXIxICYmIG1yMiBhbmQgbXIyICYmIG1yMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICBKb2luIEZpbHRlcjogKHRlc3RfbXJfam9pbl8xLm1yMSAmJiB0ZXN0X21yX2pvaW5fMi5tcjIp CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2luXzEKKyAgICAgICAgIC0+ICBN YXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAg ICAgICAgICBKb2luIEZpbHRlcjogKHRlc3RfbXJfam9pbl8yLm1yMiAmJiB0ZXN0X21yX2pvaW5f My5tcjMpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2lu XzIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl8zCisoMTAgcm93cykKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X21yX2pvaW5fMSwg dGVzdF9tcl9qb2luXzIsIHRlc3RfbXJfam9pbl8zIHdoZXJlIG1yMSA8PCBtcjIgYW5kIG1yMiA8 PCBtcjM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ ICBOZXN0ZWQgTG9vcAorICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0ZXN0X21yX2pvaW5fMi5tcjIg PDwgdGVzdF9tcl9qb2luXzMubXIzKQorICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICAgICAgICBKb2luIEZpbHRlcjogKHRlc3RfbXJfam9pbl8xLm1yMSA8PCB0ZXN0X21yX2pvaW5f Mi5tcjIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2luXzEKKyAg ICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHRlc3RfbXJfam9pbl8yCisgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X21yX2pvaW5fMworKDEwIHJvd3MpCisKK2V4 cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luXzEsIHRl c3RfbXJfam9pbl8yLCB0ZXN0X21yX2pvaW5fMyB3aGVyZSBtcjEgPj4gbXIyIGFuZCBtcjIgPj4g bXIzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAg TmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmlsdGVyOiAodGVzdF9tcl9qb2luXzEubXIxID4+ IHRlc3RfbXJfam9pbl8yLm1yMikKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAg ICAgICAgSm9pbiBGaWx0ZXI6ICh0ZXN0X21yX2pvaW5fMi5tcjIgPj4gdGVzdF9tcl9qb2luXzMu bXIzKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJfam9pbl8yCisgICAg ICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiB0ZXN0X21yX2pvaW5fMworICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlc3RfbXJf am9pbl8xCisoOSByb3dzKQorCitkcm9wIHRhYmxlIHRlc3RfbXJfam9pbl8xOworZHJvcCB0YWJs ZSB0ZXN0X21yX2pvaW5fMjsKK2Ryb3AgdGFibGUgdGVzdF9tcl9qb2luXzM7CistLQorLS0gdGVz dCBtdWx0aXJhbmdlIGpvaW4gc2VsZWN0aXZpdHkgd2l0aCBmdWxseSBkaXNqb2ludCBoaXN0b2dy YW1zCistLQorY3JlYXRlIHRhYmxlIHRlc3RfbXJfam9pbl9sbyAociBpbnQ0bXVsdGlyYW5nZSk7 CitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luX2hpIChyIGludDRtdWx0aXJhbmdlKTsKK2luc2Vy dCBpbnRvIHRlc3RfbXJfam9pbl9sbyBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcs IGcrMTApKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCA1MDApIGc7CitpbnNlcnQgaW50byB0ZXN0 X21yX2pvaW5faGkgc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5nZShnLCBnKzEwKSkgZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMTAwMDEsIDEwNTAwKSBnOworYW5hbHl6ZSB0ZXN0X21yX2pvaW5f bG87CithbmFseXplIHRlc3RfbXJfam9pbl9oaTsKKy0tIFRoZXNlIHNob3VsZCBub3QgY3Jhc2gg YW5kIHNob3VsZCBwcm9kdWNlIHN0YWJsZSBwbGFucy4KK2V4cGxhaW4gKGNvc3RzIG9mZikgc2Vs ZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luX2xvIGEsIHRlc3RfbXJfam9pbl9oaSBiIHdo ZXJlIGEuciA8PCBiLnI7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmlsdGVy OiAoYS5yIDw8IGIucikKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X21yX2pvaW5fbG8g YQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gdGVzdF9tcl9qb2luX2hpIGIKKyg2IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2Vs ZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luX2xvIGEsIHRlc3RfbXJfam9pbl9oaSBiIHdo ZXJlIGEuciA+PiBiLnI7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmlsdGVy OiAoYS5yID4+IGIucikKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X21yX2pvaW5fbG8g YQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gdGVzdF9tcl9qb2luX2hpIGIKKyg2IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2Vs ZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luX2xvIGEsIHRlc3RfbXJfam9pbl9oaSBiIHdo ZXJlIGEuciAmJiBiLnI7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmlsdGVy OiAoYS5yICYmIGIucikKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0ZXN0X21yX2pvaW5fbG8g YQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gdGVzdF9tcl9qb2luX2hpIGIKKyg2IHJvd3MpCisKK2Ryb3AgdGFibGUgdGVzdF9tcl9qb2lu X2xvOworZHJvcCB0YWJsZSB0ZXN0X21yX2pvaW5faGk7CistLQorLS0gdGVzdCByYW5nZSB2cyBt dWx0aXJhbmdlIGpvaW4gc2VsZWN0aXZpdHkKKy0tCitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2lu X3IgKHIgaW50NHJhbmdlKTsKK2NyZWF0ZSB0YWJsZSB0ZXN0X21yX2pvaW5fbXIgKG1yIGludDRt dWx0aXJhbmdlKTsKK2luc2VydCBpbnRvIHRlc3RfbXJfam9pbl9yIHNlbGVjdCBpbnQ0cmFuZ2Uo ZywgZysxMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnOworaW5zZXJ0IGludG8gdGVz dF9tcl9qb2luX21yIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMCkpIGZy b20gZ2VuZXJhdGVfc2VyaWVzKDEwMDAxLCAxMDUwMCkgZzsKK2FuYWx5emUgdGVzdF9tcl9qb2lu X3I7CithbmFseXplIHRlc3RfbXJfam9pbl9tcjsKKy0tIHJhbmdlIHZzIG11bHRpcmFuZ2Ugb3Bl cmF0b3JzIHNob3VsZCB1c2UgbXVsdGlyYW5nZWpvaW5zZWwKK2V4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luX3IgYSwgdGVzdF9tcl9qb2luX21yIGIg d2hlcmUgYS5yIDw8IGIubXI7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmls dGVyOiAoYS5yIDw8IGIubXIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2lu X3IgYQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdGVzdF9tcl9qb2luX21yIGIKKyg2IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luX3IgYSwgdGVzdF9tcl9qb2luX21yIGIg d2hlcmUgYS5yID4+IGIubXI7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmls dGVyOiAoYS5yID4+IGIubXIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2lu X3IgYQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdGVzdF9tcl9qb2luX21yIGIKKyg2IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luX3IgYSwgdGVzdF9tcl9qb2luX21yIGIg d2hlcmUgYS5yICYmIGIubXI7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmls dGVyOiAoYS5yICYmIGIubXIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdGVzdF9tcl9qb2lu X3IgYQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gdGVzdF9tcl9qb2luX21yIGIKKyg2IHJvd3MpCisKK2Ryb3AgdGFibGUgdGVzdF9tcl9q b2luX3I7Citkcm9wIHRhYmxlIHRlc3RfbXJfam9pbl9tcjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL211bHRpcmFuZ2V0eXBlcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9t dWx0aXJhbmdldHlwZXMuc3FsCmluZGV4IDExMjMzNGIwM2ViLi5lM2Y4Y2Q2ZjRlMyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXVsdGlyYW5nZXR5cGVzLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9tdWx0aXJhbmdldHlwZXMuc3FsCkBAIC05MDQsMyArOTA0LDc1IEBA IGNyZWF0ZSBmdW5jdGlvbiBtcl9pbm91dHBhcmFtX2ZhaWwoaW5vdXQgaSBhbnllbGVtZW50LCBv dXQgciBhbnltdWx0aXJhbmdlKQogLS1zaG91bGQgZmFpbAogY3JlYXRlIGZ1bmN0aW9uIG1yX3Rh YmxlX2ZhaWwoaSBhbnllbGVtZW50KSByZXR1cm5zIHRhYmxlKGkgYW55ZWxlbWVudCwgciBhbnlt dWx0aXJhbmdlKQogICBhcyAkJCBzZWxlY3QgJDEsICdbMSwxMF0nICQkIGxhbmd1YWdlIHNxbDsK KworLS0gUmVzdG9yZSBHVUNzIGNoYW5nZWQgYnkgZWFybGllciBpbmRleCB0ZXN0cworUkVTRVQg ZW5hYmxlX3NlcXNjYW47CitSRVNFVCBlbmFibGVfaW5kZXhzY2FuOworUkVTRVQgZW5hYmxlX2Jp dG1hcHNjYW47CisKKy0tCistLSB0ZXN0IHNlbGVjdGl2aXR5IG9mIG11bHRpcmFuZ2Ugam9pbiBv cGVyYXRvcnMKKy0tCitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luXzEgKG1yMSBpbnQ0bXVsdGly YW5nZSk7CitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luXzIgKG1yMiBpbnQ0bXVsdGlyYW5nZSk7 CitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luXzMgKG1yMyBpbnQ0bXVsdGlyYW5nZSk7CisKK2lu c2VydCBpbnRvIHRlc3RfbXJfam9pbl8xIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2Uo ZywgZysxMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitpbnNlcnQgaW50byB0 ZXN0X21yX2pvaW5fMSBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTAwKSkg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCwgMTApIGc7CitpbnNlcnQgaW50byB0ZXN0X21y X2pvaW5fMiBzZWxlY3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTApKSBmcm9tIGdl bmVyYXRlX3NlcmllcygxLCA1MDApIGc7CitpbnNlcnQgaW50byB0ZXN0X21yX2pvaW5fMiBzZWxl Y3QgaW50NG11bHRpcmFuZ2UoaW50NHJhbmdlKGcsIGcrMTAwKSkgZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMSwgNTAwLCAxMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfbXJfam9pbl8zIHNlbGVjdCBpbnQ0 bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMCkpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDUwMSwg MTAwMCkgZzsKK2luc2VydCBpbnRvIHRlc3RfbXJfam9pbl8zIHNlbGVjdCBpbnQ0bXVsdGlyYW5n ZShpbnQ0cmFuZ2UoZywgZysxMDApKSBmcm9tIGdlbmVyYXRlX3Nlcmllcyg1MDEsIDEwMDAsIDEw KSBnOworCithbmFseXplIHRlc3RfbXJfam9pbl8xOworYW5hbHl6ZSB0ZXN0X21yX2pvaW5fMjsK K2FuYWx5emUgdGVzdF9tcl9qb2luXzM7CisKKy0tIG11bHRpcmFuZ2UgdnMgbXVsdGlyYW5nZTog cmVvcmRlciBqb2lucyBiYXNlZCBvbiBjb21wdXRlZCBzZWxlY3Rpdml0eQorZXhwbGFpbiAoY29z dHMgb2ZmKSBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X21yX2pvaW5fMSwgdGVzdF9tcl9qb2lu XzIsIHRlc3RfbXJfam9pbl8zIHdoZXJlIG1yMSAmJiBtcjIgYW5kIG1yMiAmJiBtcjM7CitleHBs YWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfbXJfam9pbl8xLCB0ZXN0 X21yX2pvaW5fMiwgdGVzdF9tcl9qb2luXzMgd2hlcmUgbXIxIDw8IG1yMiBhbmQgbXIyIDw8IG1y MzsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2lu XzEsIHRlc3RfbXJfam9pbl8yLCB0ZXN0X21yX2pvaW5fMyB3aGVyZSBtcjEgPj4gbXIyIGFuZCBt cjIgPj4gbXIzOworCitkcm9wIHRhYmxlIHRlc3RfbXJfam9pbl8xOworZHJvcCB0YWJsZSB0ZXN0 X21yX2pvaW5fMjsKK2Ryb3AgdGFibGUgdGVzdF9tcl9qb2luXzM7CisKKy0tCistLSB0ZXN0IG11 bHRpcmFuZ2Ugam9pbiBzZWxlY3Rpdml0eSB3aXRoIGZ1bGx5IGRpc2pvaW50IGhpc3RvZ3JhbXMK Ky0tCitjcmVhdGUgdGFibGUgdGVzdF9tcl9qb2luX2xvIChyIGludDRtdWx0aXJhbmdlKTsKK2Ny ZWF0ZSB0YWJsZSB0ZXN0X21yX2pvaW5faGkgKHIgaW50NG11bHRpcmFuZ2UpOworCitpbnNlcnQg aW50byB0ZXN0X21yX2pvaW5fbG8gc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5nZShnLCBn KzEwKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnOworaW5zZXJ0IGludG8gdGVzdF9t cl9qb2luX2hpIHNlbGVjdCBpbnQ0bXVsdGlyYW5nZShpbnQ0cmFuZ2UoZywgZysxMCkpIGZyb20g Z2VuZXJhdGVfc2VyaWVzKDEwMDAxLCAxMDUwMCkgZzsKKworYW5hbHl6ZSB0ZXN0X21yX2pvaW5f bG87CithbmFseXplIHRlc3RfbXJfam9pbl9oaTsKKworLS0gVGhlc2Ugc2hvdWxkIG5vdCBjcmFz aCBhbmQgc2hvdWxkIHByb2R1Y2Ugc3RhYmxlIHBsYW5zLgorZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X21yX2pvaW5fbG8gYSwgdGVzdF9tcl9qb2luX2hpIGIg d2hlcmUgYS5yIDw8IGIucjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZy b20gdGVzdF9tcl9qb2luX2xvIGEsIHRlc3RfbXJfam9pbl9oaSBiIHdoZXJlIGEuciA+PiBiLnI7 CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfbXJfam9pbl9s byBhLCB0ZXN0X21yX2pvaW5faGkgYiB3aGVyZSBhLnIgJiYgYi5yOworCitkcm9wIHRhYmxlIHRl c3RfbXJfam9pbl9sbzsKK2Ryb3AgdGFibGUgdGVzdF9tcl9qb2luX2hpOworCistLQorLS0gdGVz dCByYW5nZSB2cyBtdWx0aXJhbmdlIGpvaW4gc2VsZWN0aXZpdHkKKy0tCitjcmVhdGUgdGFibGUg dGVzdF9tcl9qb2luX3IgKHIgaW50NHJhbmdlKTsKK2NyZWF0ZSB0YWJsZSB0ZXN0X21yX2pvaW5f bXIgKG1yIGludDRtdWx0aXJhbmdlKTsKKworaW5zZXJ0IGludG8gdGVzdF9tcl9qb2luX3Igc2Vs ZWN0IGludDRyYW5nZShnLCBnKzEwKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCA1MDApIGc7Citp bnNlcnQgaW50byB0ZXN0X21yX2pvaW5fbXIgc2VsZWN0IGludDRtdWx0aXJhbmdlKGludDRyYW5n ZShnLCBnKzEwKSkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMTAwMDEsIDEwNTAwKSBnOworCithbmFs eXplIHRlc3RfbXJfam9pbl9yOworYW5hbHl6ZSB0ZXN0X21yX2pvaW5fbXI7CisKKy0tIHJhbmdl IHZzIG11bHRpcmFuZ2Ugb3BlcmF0b3JzIHNob3VsZCB1c2UgbXVsdGlyYW5nZWpvaW5zZWwKK2V4 cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF9tcl9qb2luX3IgYSwg dGVzdF9tcl9qb2luX21yIGIgd2hlcmUgYS5yIDw8IGIubXI7CitleHBsYWluIChjb3N0cyBvZmYp IHNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfbXJfam9pbl9yIGEsIHRlc3RfbXJfam9pbl9tciBi IHdoZXJlIGEuciA+PiBiLm1yOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgY291bnQoKikg ZnJvbSB0ZXN0X21yX2pvaW5fciBhLCB0ZXN0X21yX2pvaW5fbXIgYiB3aGVyZSBhLnIgJiYgYi5t cjsKKworZHJvcCB0YWJsZSB0ZXN0X21yX2pvaW5fcjsKK2Ryb3AgdGFibGUgdGVzdF9tcl9qb2lu X21yOwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --_006_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_ Content-Type: application/octet-stream; name="v6-0003-Remove-duplicate-selectivity-functions-between-ra.patch" Content-Description: v6-0003-Remove-duplicate-selectivity-functions-between-ra.patch Content-Disposition: attachment; filename="v6-0003-Remove-duplicate-selectivity-functions-between-ra.patch"; size=34469; creation-date="Tue, 14 Apr 2026 14:02:20 GMT"; modification-date="Tue, 14 Apr 2026 14:03:07 GMT" Content-Transfer-Encoding: base64 RnJvbSA5OTkzZjA2YjllY2YyODhmMDY5NTRkNmFmODY1MzI1ODVkMjY5OTkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2Nob2VtYW5zIDxtYXhpbWUuc2Nob2VtYW5zQGVu dGVycHJpc2VkYi5jb20+CkRhdGU6IE1vbiwgMTMgQXByIDIwMjYgMTg6MjU6MjMgKzAyMDAKU3Vi amVjdDogW1BBVENIIHY2IDMvM10gUmVtb3ZlIGR1cGxpY2F0ZSBzZWxlY3Rpdml0eSBmdW5jdGlv bnMgYmV0d2VlbiByYW5nZQogYW5kIG11bHRpcmFuZ2UKClRoZSBtdWx0aXJhbmdlIHNlbGVjdGl2 aXR5IGNvZGUgZHVwbGljYXRlZCAxMCBoZWxwZXIgZnVuY3Rpb25zIGZyb20KcmFuZ2V0eXBlc19z ZWxmdW5jcy5jLiBTaW5jZSBib3RoIHJhbmdlIGFuZCBtdWx0aXJhbmdlIHR5cGVzIHVzZSB0aGUK c2FtZSBoaXN0b2dyYW0gZm9ybWF0IChTVEFUSVNUSUNfS0lORF9CT1VORFNfSElTVE9HUkFNKSBh bmQgdGhlIHNhbWUKUmFuZ2VCb3VuZCByZXByZXNlbnRhdGlvbiwgdGhlIGZ1bmN0aW9ucyBhcmUg aWRlbnRpY2FsLgoKTWFrZSB0aGUgMTAgc2hhcmVkIGZ1bmN0aW9ucyBub24tc3RhdGljIGluIHJh bmdldHlwZXNfc2VsZnVuY3MuYywKZXhwb3J0IHRoZW0gdmlhIHNlbGZ1bmNzLmgsIGFuZCByZW1v dmUgdGhlIGNvcGllcyBmcm9tCm11bHRpcmFuZ2V0eXBlc19zZWxmdW5jcy5jLgotLS0KIC4uLi91 dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMgICAgICB8IDc3MSAtLS0tLS0tLS0t LS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVzX3NlbGZ1bmNzLmMgICB8 ICA0NSArLQogc3JjL2luY2x1ZGUvdXRpbHMvc2VsZnVuY3MuaCAgICAgICAgICAgICAgICAgIHwg IDM2ICsKIDMgZmlsZXMgY2hhbmdlZCwgNDcgaW5zZXJ0aW9ucygrKSwgODA1IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2Vs ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2VsZnVuY3Mu YwppbmRleCA4N2YzZGIxNjJhNi4uYjU1OGU2OTEyZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9tdWx0aXJhbmdldHlwZXNfc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzX3NlbGZ1bmNzLmMKQEAgLTM4LDM3ICszOCw2IEBAIHN0 YXRpYyBkb3VibGUgY2FsY19oaXN0X3NlbGVjdGl2aXR5KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNo ZSwKIAkJCQkJCQkJCVZhcmlhYmxlU3RhdERhdGEgKnZhcmRhdGEsCiAJCQkJCQkJCQljb25zdCBN dWx0aXJhbmdlVHlwZSAqY29uc3R2YWwsCiAJCQkJCQkJCQlPaWQgb3BlcmF0b3IpOwotc3RhdGlj IGRvdWJsZSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKFR5cGVDYWNoZUVudHJ5ICp0eXBj YWNoZSwKLQkJCQkJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpjb25zdGJvdW5kLAotCQkJCQkJ CQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QsCi0JCQkJCQkJCQkJICAgaW50IGhpc3RfbnZh bHVlcywgYm9vbCBlcXVhbCk7Ci1zdGF0aWMgaW50CXJib3VuZF9ic2VhcmNoKFR5cGVDYWNoZUVu dHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFuZ2VCb3VuZCAqdmFsdWUsCi0JCQkJCQkgICBjb25zdCBS YW5nZUJvdW5kICpoaXN0LCBpbnQgaGlzdF9sZW5ndGgsIGJvb2wgZXF1YWwpOwotc3RhdGljIGZs b2F0OCBnZXRfcG9zaXRpb24oVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLCBjb25zdCBSYW5nZUJv dW5kICp2YWx1ZSwKLQkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QxLCBjb25zdCBSYW5n ZUJvdW5kICpoaXN0Mik7Ci1zdGF0aWMgZmxvYXQ4IGdldF9sZW5fcG9zaXRpb24oZG91YmxlIHZh bHVlLCBkb3VibGUgaGlzdDEsIGRvdWJsZSBoaXN0Mik7Ci1zdGF0aWMgZmxvYXQ4IGdldF9kaXN0 YW5jZShUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKmJvdW5kMSwK LQkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmJvdW5kMik7Ci1zdGF0aWMgaW50CWxlbmd0aF9o aXN0X2JzZWFyY2goY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywKLQkJCQkJCQkJaW50 IGxlbmd0aF9oaXN0X252YWx1ZXMsIGRvdWJsZSB2YWx1ZSwKLQkJCQkJCQkJYm9vbCBlcXVhbCk7 Ci1zdGF0aWMgZG91YmxlIGNhbGNfbGVuZ3RoX2hpc3RfZnJhYyhjb25zdCBEYXR1bSAqbGVuZ3Ro X2hpc3RfdmFsdWVzLAotCQkJCQkJCQkJaW50IGxlbmd0aF9oaXN0X252YWx1ZXMsIGRvdWJsZSBs ZW5ndGgxLAotCQkJCQkJCQkJZG91YmxlIGxlbmd0aDIsIGJvb2wgZXF1YWwpOwotc3RhdGljIGRv dWJsZSBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfY29udGFpbmVkKFR5cGVDYWNoZUVudHJ5ICp0eXBj YWNoZSwKLQkJCQkJCQkJCQkJICBjb25zdCBSYW5nZUJvdW5kICpsb3dlciwKLQkJCQkJCQkJCQkJ ICBSYW5nZUJvdW5kICp1cHBlciwKLQkJCQkJCQkJCQkJICBjb25zdCBSYW5nZUJvdW5kICpoaXN0 X2xvd2VyLAotCQkJCQkJCQkJCQkgIGludCBoaXN0X252YWx1ZXMsCi0JCQkJCQkJCQkJCSAgY29u c3QgRGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywKLQkJCQkJCQkJCQkJICBpbnQgbGVuZ3RoX2hp c3RfbnZhbHVlcyk7Ci1zdGF0aWMgZG91YmxlIGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9jb250YWlu cyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCi0JCQkJCQkJCQkJCSBjb25zdCBSYW5nZUJvdW5k ICpsb3dlciwKLQkJCQkJCQkJCQkJIGNvbnN0IFJhbmdlQm91bmQgKnVwcGVyLAotCQkJCQkJCQkJ CQkgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdF9sb3dlciwKLQkJCQkJCQkJCQkJIGludCBoaXN0X252 YWx1ZXMsCi0JCQkJCQkJCQkJCSBjb25zdCBEYXR1bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLAotCQkJ CQkJCQkJCQkgaW50IGxlbmd0aF9oaXN0X252YWx1ZXMpOwogCiAvKgogICogUmV0dXJucyBhIGRl ZmF1bHQgc2VsZWN0aXZpdHkgZXN0aW1hdGUgZm9yIGdpdmVuIG9wZXJhdG9yLCB3aGVuIHdlIGRv bid0CkBAIC02OTgsNzQ2ICs2NjcsNiBAQCBjYWxjX2hpc3Rfc2VsZWN0aXZpdHkoVHlwZUNhY2hl RW50cnkgKnR5cGNhY2hlLCBWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRhLAogCXJldHVybiBoaXN0 X3NlbGVjOwogfQogCi0KLS8qCi0gKiBMb29rIHVwIHRoZSBmcmFjdGlvbiBvZiB2YWx1ZXMgbGVz cyB0aGFuIChvciBlcXVhbCwgaWYgJ2VxdWFsJyBhcmd1bWVudAotICogaXMgdHJ1ZSkgYSBnaXZl biBjb25zdCBpbiBhIGhpc3RvZ3JhbSBvZiByYW5nZSBib3VuZHMuCi0gKi8KLXN0YXRpYyBkb3Vi bGUKLWNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2FsYXIoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hl LCBjb25zdCBSYW5nZUJvdW5kICpjb25zdGJvdW5kLAotCQkJCQkJCSBjb25zdCBSYW5nZUJvdW5k ICpoaXN0LCBpbnQgaGlzdF9udmFsdWVzLCBib29sIGVxdWFsKQotewotCVNlbGVjdGl2aXR5IHNl bGVjOwotCWludAkJCWluZGV4OwotCi0JLyoKLQkgKiBGaW5kIHRoZSBoaXN0b2dyYW0gYmluIHRo ZSBnaXZlbiBjb25zdGFudCBmYWxscyBpbnRvLiBFc3RpbWF0ZQotCSAqIHNlbGVjdGl2aXR5IGFz IHRoZSBudW1iZXIgb2YgcHJlY2VkaW5nIHdob2xlIGJpbnMuCi0JICovCi0JaW5kZXggPSByYm91 bmRfYnNlYXJjaCh0eXBjYWNoZSwgY29uc3Rib3VuZCwgaGlzdCwgaGlzdF9udmFsdWVzLCBlcXVh bCk7Ci0Jc2VsZWMgPSAoU2VsZWN0aXZpdHkpIChNYXgoaW5kZXgsIDApKSAvIChTZWxlY3Rpdml0 eSkgKGhpc3RfbnZhbHVlcyAtIDEpOwotCi0JLyogQWRqdXN0IHVzaW5nIGxpbmVhciBpbnRlcnBv bGF0aW9uIHdpdGhpbiB0aGUgYmluICovCi0JaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBoaXN0 X252YWx1ZXMgLSAxKQotCQlzZWxlYyArPSBnZXRfcG9zaXRpb24odHlwY2FjaGUsIGNvbnN0Ym91 bmQsICZoaXN0W2luZGV4XSwKLQkJCQkJCQkgICZoaXN0W2luZGV4ICsgMV0pIC8gKFNlbGVjdGl2 aXR5KSAoaGlzdF9udmFsdWVzIC0gMSk7Ci0KLQlyZXR1cm4gc2VsZWM7Ci19Ci0KLS8qCi0gKiBC aW5hcnkgc2VhcmNoIG9uIGFuIGFycmF5IG9mIHJhbmdlIGJvdW5kcy4gUmV0dXJucyBncmVhdGVz dCBpbmRleCBvZiByYW5nZQotICogYm91bmQgaW4gYXJyYXkgd2hpY2ggaXMgbGVzcyhsZXNzIG9y IGVxdWFsKSB0aGFuIGdpdmVuIHJhbmdlIGJvdW5kLiBJZiBhbGwKLSAqIHJhbmdlIGJvdW5kcyBp biBhcnJheSBhcmUgZ3JlYXRlciBvciBlcXVhbChncmVhdGVyKSB0aGFuIGdpdmVuIHJhbmdlIGJv dW5kLAotICogcmV0dXJuIC0xLiBXaGVuICJlcXVhbCIgZmxhZyBpcyBzZXQgY29uZGl0aW9ucyBp biBicmFja2V0cyBhcmUgdXNlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gc2Nh bGFyIG9wZXJhdG9yIHNlbGVjdGl2aXR5IGVzdGltYXRpb24uIEFub3RoZXIKLSAqIGdvYWwgb2Yg dGhpcyBmdW5jdGlvbiBpcyB0byBmaW5kIGEgaGlzdG9ncmFtIGJpbiB3aGVyZSB0byBzdG9wCi0g KiBpbnRlcnBvbGF0aW9uIG9mIHBvcnRpb24gb2YgYm91bmRzIHdoaWNoIGFyZSBsZXNzIHRoYW4g b3IgZXF1YWwgdG8gZ2l2ZW4gYm91bmQuCi0gKi8KLXN0YXRpYyBpbnQKLXJib3VuZF9ic2VhcmNo KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFuZ2VCb3VuZCAqdmFsdWUsIGNvbnN0 IFJhbmdlQm91bmQgKmhpc3QsCi0JCQkgICBpbnQgaGlzdF9sZW5ndGgsIGJvb2wgZXF1YWwpCi17 Ci0JaW50CQkJbG93ZXIgPSAtMSwKLQkJCQl1cHBlciA9IGhpc3RfbGVuZ3RoIC0gMSwKLQkJCQlj bXAsCi0JCQkJbWlkZGxlOwotCi0Jd2hpbGUgKGxvd2VyIDwgdXBwZXIpCi0JewotCQltaWRkbGUg PSAobG93ZXIgKyB1cHBlciArIDEpIC8gMjsKLQkJY21wID0gcmFuZ2VfY21wX2JvdW5kcyh0eXBj YWNoZSwgJmhpc3RbbWlkZGxlXSwgdmFsdWUpOwotCi0JCWlmIChjbXAgPCAwIHx8IChlcXVhbCAm JiBjbXAgPT0gMCkpCi0JCQlsb3dlciA9IG1pZGRsZTsKLQkJZWxzZQotCQkJdXBwZXIgPSBtaWRk bGUgLSAxOwotCX0KLQlyZXR1cm4gbG93ZXI7Ci19Ci0KLQotLyoKLSAqIEJpbmFyeSBzZWFyY2gg b24gbGVuZ3RoIGhpc3RvZ3JhbS4gUmV0dXJucyBncmVhdGVzdCBpbmRleCBvZiByYW5nZSBsZW5n dGggaW4KLSAqIGhpc3RvZ3JhbSB3aGljaCBpcyBsZXNzIHRoYW4gKGxlc3MgdGhhbiBvciBlcXVh bCkgdGhlIGdpdmVuIGxlbmd0aCB2YWx1ZS4gSWYKLSAqIGFsbCBsZW5ndGhzIGluIHRoZSBoaXN0 b2dyYW0gYXJlIGdyZWF0ZXIgdGhhbiAoZ3JlYXRlciB0aGFuIG9yIGVxdWFsKSB0aGUKLSAqIGdp dmVuIGxlbmd0aCwgcmV0dXJucyAtMS4KLSAqLwotc3RhdGljIGludAotbGVuZ3RoX2hpc3RfYnNl YXJjaChjb25zdCBEYXR1bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLCBpbnQgbGVuZ3RoX2hpc3RfbnZh bHVlcywKLQkJCQkJZG91YmxlIHZhbHVlLCBib29sIGVxdWFsKQotewotCWludAkJCWxvd2VyID0g LTEsCi0JCQkJdXBwZXIgPSBsZW5ndGhfaGlzdF9udmFsdWVzIC0gMSwKLQkJCQltaWRkbGU7Ci0K LQl3aGlsZSAobG93ZXIgPCB1cHBlcikKLQl7Ci0JCWRvdWJsZQkJbWlkZGxldmFsOwotCi0JCW1p ZGRsZSA9IChsb3dlciArIHVwcGVyICsgMSkgLyAyOwotCi0JCW1pZGRsZXZhbCA9IERhdHVtR2V0 RmxvYXQ4KGxlbmd0aF9oaXN0X3ZhbHVlc1ttaWRkbGVdKTsKLQkJaWYgKG1pZGRsZXZhbCA8IHZh bHVlIHx8IChlcXVhbCAmJiBtaWRkbGV2YWwgPD0gdmFsdWUpKQotCQkJbG93ZXIgPSBtaWRkbGU7 Ci0JCWVsc2UKLQkJCXVwcGVyID0gbWlkZGxlIC0gMTsKLQl9Ci0JcmV0dXJuIGxvd2VyOwotfQot Ci0vKgotICogR2V0IHJlbGF0aXZlIHBvc2l0aW9uIG9mIHZhbHVlIGluIGhpc3RvZ3JhbSBiaW4g aW4gWzAsMV0gcmFuZ2UuCi0gKi8KLXN0YXRpYyBmbG9hdDgKLWdldF9wb3NpdGlvbihUeXBlQ2Fj aGVFbnRyeSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVlLCBjb25zdCBSYW5nZUJv dW5kICpoaXN0MSwKLQkJCSBjb25zdCBSYW5nZUJvdW5kICpoaXN0MikKLXsKLQlib29sCQloYXNf c3ViZGlmZiA9IE9pZElzVmFsaWQodHlwY2FjaGUtPnJuZ19zdWJkaWZmX2ZpbmZvLmZuX29pZCk7 Ci0JZmxvYXQ4CQlwb3NpdGlvbjsKLQotCWlmICghaGlzdDEtPmluZmluaXRlICYmICFoaXN0Mi0+ aW5maW5pdGUpCi0JewotCQlmbG9hdDgJCWJpbl93aWR0aDsKLQotCQkvKgotCQkgKiBCb3RoIGJv dW5kcyBhcmUgZmluaXRlLiBBc3N1bWluZyB0aGUgc3VidHlwZSdzIGNvbXBhcmlzb24gZnVuY3Rp b24KLQkJICogd29ya3Mgc2FuZWx5LCB0aGUgdmFsdWUgbXVzdCBiZSBmaW5pdGUsIHRvbywgYmVj YXVzZSBpdCBsaWVzCi0JCSAqIHNvbWV3aGVyZSBiZXR3ZWVuIHRoZSBib3VuZHMuICBJZiBpdCBk b2Vzbid0LCBhcmJpdHJhcmlseSByZXR1cm4KLQkJICogMC41LgotCQkgKi8KLQkJaWYgKHZhbHVl LT5pbmZpbml0ZSkKLQkJCXJldHVybiAwLjU7Ci0KLQkJLyogQ2FuJ3QgaW50ZXJwb2xhdGUgd2l0 aG91dCBzdWJkaWZmIGZ1bmN0aW9uICovCi0JCWlmICghaGFzX3N1YmRpZmYpCi0JCQlyZXR1cm4g MC41OwotCi0JCS8qIENhbGN1bGF0ZSByZWxhdGl2ZSBwb3NpdGlvbiB1c2luZyBzdWJkaWZmIGZ1 bmN0aW9uLiAqLwotCQliaW5fd2lkdGggPSBEYXR1bUdldEZsb2F0OChGdW5jdGlvbkNhbGwyQ29s bCgmdHlwY2FjaGUtPnJuZ19zdWJkaWZmX2ZpbmZvLAotCQkJCQkJCQkJCQkJCSB0eXBjYWNoZS0+ cm5nX2NvbGxhdGlvbiwKLQkJCQkJCQkJCQkJCQkgaGlzdDItPnZhbCwKLQkJCQkJCQkJCQkJCQkg aGlzdDEtPnZhbCkpOwotCQlpZiAoaXNuYW4oYmluX3dpZHRoKSB8fCBiaW5fd2lkdGggPD0gMC4w KQotCQkJcmV0dXJuIDAuNTsJCQkvKiBwdW50IGZvciBOYU4gb3IgemVyby13aWR0aCBiaW4gKi8K LQotCQlwb3NpdGlvbiA9IERhdHVtR2V0RmxvYXQ4KEZ1bmN0aW9uQ2FsbDJDb2xsKCZ0eXBjYWNo ZS0+cm5nX3N1YmRpZmZfZmluZm8sCi0JCQkJCQkJCQkJCQkJdHlwY2FjaGUtPnJuZ19jb2xsYXRp b24sCi0JCQkJCQkJCQkJCQkJdmFsdWUtPnZhbCwKLQkJCQkJCQkJCQkJCQloaXN0MS0+dmFsKSkK LQkJCS8gYmluX3dpZHRoOwotCi0JCWlmIChpc25hbihwb3NpdGlvbikpCi0JCQlyZXR1cm4gMC41 OwkJCS8qIHB1bnQgZm9yIE5hTiBmcm9tIHN1YmRpZmYsIEluZi9JbmYsIGV0YyAqLwotCi0JCS8q IFJlbGF0aXZlIHBvc2l0aW9uIG11c3QgYmUgaW4gWzAsMV0gcmFuZ2UgKi8KLQkJcG9zaXRpb24g PSBNYXgocG9zaXRpb24sIDAuMCk7Ci0JCXBvc2l0aW9uID0gTWluKHBvc2l0aW9uLCAxLjApOwot CQlyZXR1cm4gcG9zaXRpb247Ci0JfQotCWVsc2UgaWYgKGhpc3QxLT5pbmZpbml0ZSAmJiAhaGlz dDItPmluZmluaXRlKQotCXsKLQkJLyoKLQkJICogTG93ZXIgYmluIGJvdW5kYXJ5IGlzIC1pbmZp bml0ZSwgdXBwZXIgaXMgZmluaXRlLiBJZiB0aGUgdmFsdWUgaXMKLQkJICogLWluZmluaXRlLCBy ZXR1cm4gMC4wIHRvIGluZGljYXRlIGl0J3MgZXF1YWwgdG8gdGhlIGxvd2VyIGJvdW5kLgotCQkg KiBPdGhlcndpc2UgcmV0dXJuIDEuMCB0byBpbmRpY2F0ZSBpdCdzIGluZmluaXRlbHkgZmFyIGZy b20gdGhlIGxvd2VyCi0JCSAqIGJvdW5kLgotCQkgKi8KLQkJcmV0dXJuICgodmFsdWUtPmluZmlu aXRlICYmIHZhbHVlLT5sb3dlcikgPyAwLjAgOiAxLjApOwotCX0KLQllbHNlIGlmICghaGlzdDEt PmluZmluaXRlICYmIGhpc3QyLT5pbmZpbml0ZSkKLQl7Ci0JCS8qIHNhbWUgYXMgYWJvdmUsIGJ1 dCBpbiByZXZlcnNlICovCi0JCXJldHVybiAoKHZhbHVlLT5pbmZpbml0ZSAmJiAhdmFsdWUtPmxv d2VyKSA/IDEuMCA6IDAuMCk7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIElmIGJvdGggYmlu IGJvdW5kYXJpZXMgYXJlIGluZmluaXRlLCB0aGV5IHNob3VsZCBiZSBlcXVhbCB0byBlYWNoCi0J CSAqIG90aGVyLCBhbmQgdGhlIHZhbHVlIHNob3VsZCBhbHNvIGJlIGluZmluaXRlIGFuZCBlcXVh bCB0byBib3RoCi0JCSAqIGJvdW5kcy4gKEJ1dCBkb24ndCBBc3NlcnQgdGhhdCwgdG8gYXZvaWQg Y3Jhc2hpbmcgaWYgYSB1c2VyIGNyZWF0ZXMKLQkJICogYSBkYXRhdHlwZSB3aXRoIGEgYnJva2Vu IGNvbXBhcmlzb24gZnVuY3Rpb24pLgotCQkgKgotCQkgKiBBc3N1bWUgdGhlIHZhbHVlIHRvIGxp ZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBpbmZpbml0ZSBib3VuZHMuCi0JCSAqLwotCQlyZXR1cm4g MC41OwotCX0KLX0KLQotCi0vKgotICogR2V0IHJlbGF0aXZlIHBvc2l0aW9uIG9mIHZhbHVlIGlu IGEgbGVuZ3RoIGhpc3RvZ3JhbSBiaW4gaW4gWzAsMV0gcmFuZ2UuCi0gKi8KLXN0YXRpYyBkb3Vi bGUKLWdldF9sZW5fcG9zaXRpb24oZG91YmxlIHZhbHVlLCBkb3VibGUgaGlzdDEsIGRvdWJsZSBo aXN0MikKLXsKLQlpZiAoIWlzaW5mKGhpc3QxKSAmJiAhaXNpbmYoaGlzdDIpKQotCXsKLQkJLyoK LQkJICogQm90aCBib3VuZHMgYXJlIGZpbml0ZS4gVGhlIHZhbHVlIHNob3VsZCBiZSBmaW5pdGUg dG9vLCBiZWNhdXNlIGl0Ci0JCSAqIGxpZXMgc29tZXdoZXJlIGJldHdlZW4gdGhlIGJvdW5kcy4g SWYgaXQgZG9lc24ndCwganVzdCByZXR1cm4KLQkJICogc29tZXRoaW5nLgotCQkgKi8KLQkJaWYg KGlzaW5mKHZhbHVlKSkKLQkJCXJldHVybiAwLjU7Ci0KLQkJcmV0dXJuIDEuMCAtIChoaXN0MiAt IHZhbHVlKSAvIChoaXN0MiAtIGhpc3QxKTsKLQl9Ci0JZWxzZSBpZiAoaXNpbmYoaGlzdDEpICYm ICFpc2luZihoaXN0MikpCi0JewotCQkvKgotCQkgKiBMb3dlciBiaW4gYm91bmRhcnkgaXMgLWlu ZmluaXRlLCB1cHBlciBpcyBmaW5pdGUuIFJldHVybiAxLjAgdG8KLQkJICogaW5kaWNhdGUgdGhl IHZhbHVlIGlzIGluZmluaXRlbHkgZmFyIGZyb20gdGhlIGxvd2VyIGJvdW5kLgotCQkgKi8KLQkJ cmV0dXJuIDEuMDsKLQl9Ci0JZWxzZSBpZiAoaXNpbmYoaGlzdDEpICYmIGlzaW5mKGhpc3QyKSkK LQl7Ci0JCS8qIHNhbWUgYXMgYWJvdmUsIGJ1dCBpbiByZXZlcnNlICovCi0JCXJldHVybiAwLjA7 Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIElmIGJvdGggYmluIGJvdW5kYXJpZXMgYXJlIGlu ZmluaXRlLCB0aGV5IHNob3VsZCBiZSBlcXVhbCB0byBlYWNoCi0JCSAqIG90aGVyLCBhbmQgdGhl IHZhbHVlIHNob3VsZCBhbHNvIGJlIGluZmluaXRlIGFuZCBlcXVhbCB0byBib3RoCi0JCSAqIGJv dW5kcy4gKEJ1dCBkb24ndCBBc3NlcnQgdGhhdCwgdG8gYXZvaWQgY3Jhc2hpbmcgdW5uZWNlc3Nh cmlseSBpZgotCQkgKiB0aGUgY2FsbGVyIG1lc3NlcyB1cCkKLQkJICoKLQkJICogQXNzdW1lIHRo ZSB2YWx1ZSB0byBsaWUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgaW5maW5pdGUgYm91bmRzLgotCQkg Ki8KLQkJcmV0dXJuIDAuNTsKLQl9Ci19Ci0KLS8qCi0gKiBNZWFzdXJlIGRpc3RhbmNlIGJldHdl ZW4gdHdvIHJhbmdlIGJvdW5kcy4KLSAqLwotc3RhdGljIGZsb2F0OAotZ2V0X2Rpc3RhbmNlKFR5 cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFuZ2VCb3VuZCAqYm91bmQxLCBjb25zdCBS YW5nZUJvdW5kICpib3VuZDIpCi17Ci0JYm9vbAkJaGFzX3N1YmRpZmYgPSBPaWRJc1ZhbGlkKHR5 cGNhY2hlLT5ybmdfc3ViZGlmZl9maW5mby5mbl9vaWQpOwotCi0JaWYgKCFib3VuZDEtPmluZmlu aXRlICYmICFib3VuZDItPmluZmluaXRlKQotCXsKLQkJLyoKLQkJICogTmVpdGhlciBib3VuZCBp cyBpbmZpbml0ZSwgdXNlIHN1YmRpZmYgZnVuY3Rpb24gb3IgcmV0dXJuIGRlZmF1bHQKLQkJICog dmFsdWUgb2YgMS4wIGlmIG5vIHN1YmRpZmYgaXMgYXZhaWxhYmxlLgotCQkgKi8KLQkJaWYgKGhh c19zdWJkaWZmKQotCQl7Ci0JCQlmbG9hdDgJCXJlczsKLQotCQkJcmVzID0gRGF0dW1HZXRGbG9h dDgoRnVuY3Rpb25DYWxsMkNvbGwoJnR5cGNhY2hlLT5ybmdfc3ViZGlmZl9maW5mbywKLQkJCQkJ CQkJCQkJCSAgIHR5cGNhY2hlLT5ybmdfY29sbGF0aW9uLAotCQkJCQkJCQkJCQkJICAgYm91bmQy LT52YWwsCi0JCQkJCQkJCQkJCQkgICBib3VuZDEtPnZhbCkpOwotCQkJLyogUmVqZWN0IHBvc3Np YmxlIE5hTiByZXN1bHQsIGFsc28gbmVnYXRpdmUgcmVzdWx0ICovCi0JCQlpZiAoaXNuYW4ocmVz KSB8fCByZXMgPCAwLjApCi0JCQkJcmV0dXJuIDEuMDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gcmVz OwotCQl9Ci0JCWVsc2UKLQkJCXJldHVybiAxLjA7Ci0JfQotCWVsc2UgaWYgKGJvdW5kMS0+aW5m aW5pdGUgJiYgYm91bmQyLT5pbmZpbml0ZSkKLQl7Ci0JCS8qIEJvdGggYm91bmRzIGFyZSBpbmZp bml0ZSAqLwotCQlpZiAoYm91bmQxLT5sb3dlciA9PSBib3VuZDItPmxvd2VyKQotCQkJcmV0dXJu IDAuMDsKLQkJZWxzZQotCQkJcmV0dXJuIGdldF9mbG9hdDhfaW5maW5pdHkoKTsKLQl9Ci0JZWxz ZQotCXsKLQkJLyogT25lIGJvdW5kIGlzIGluZmluaXRlLCB0aGUgb3RoZXIgaXMgbm90ICovCi0J CXJldHVybiBnZXRfZmxvYXQ4X2luZmluaXR5KCk7Ci0JfQotfQotCi0vKgotICogQ2FsY3VsYXRl IHRoZSBhdmVyYWdlIG9mIGZ1bmN0aW9uIFAoeCksIGluIHRoZSBpbnRlcnZhbCBbbGVuZ3RoMSwg bGVuZ3RoMl0sCi0gKiB3aGVyZSBQKHgpIGlzIHRoZSBmcmFjdGlvbiBvZiB0dXBsZXMgd2l0aCBs ZW5ndGggPCB4IChvciBsZW5ndGggPD0geCBpZgotICogJ2VxdWFsJyBpcyB0cnVlKS4KLSAqLwot c3RhdGljIGRvdWJsZQotY2FsY19sZW5ndGhfaGlzdF9mcmFjKGNvbnN0IERhdHVtICpsZW5ndGhf aGlzdF92YWx1ZXMsIGludCBsZW5ndGhfaGlzdF9udmFsdWVzLAotCQkJCQkgIGRvdWJsZSBsZW5n dGgxLCBkb3VibGUgbGVuZ3RoMiwgYm9vbCBlcXVhbCkKLXsKLQlkb3VibGUJCWZyYWM7Ci0JZG91 YmxlCQlBLAotCQkJCUIsCi0JCQkJUEEsCi0JCQkJUEI7Ci0JZG91YmxlCQlwb3M7Ci0JaW50CQkJ aTsKLQlkb3VibGUJCWFyZWE7Ci0KLQlBc3NlcnQobGVuZ3RoMiA+PSBsZW5ndGgxKTsKLQotCWlm IChsZW5ndGgyIDwgMC4wKQotCQlyZXR1cm4gMC4wOwkJCQkvKiBzaG91bGRuJ3QgaGFwcGVuLCBi dXQgZG9lc24ndCBodXJ0IHRvIGNoZWNrICovCi0KLQkvKiBBbGwgbGVuZ3RocyBpbiB0aGUgdGFi bGUgYXJlIDw9IGluZmluaXRlLiAqLwotCWlmIChpc2luZihsZW5ndGgyKSAmJiBlcXVhbCkKLQkJ cmV0dXJuIDEuMDsKLQotCS8qLS0tLS0tLS0tLQotCSAqIFRoZSBhdmVyYWdlIG9mIGEgZnVuY3Rp b24gYmV0d2VlbiBBIGFuZCBCIGNhbiBiZSBjYWxjdWxhdGVkIGJ5IHRoZQotCSAqIGZvcm11bGE6 Ci0JICoKLQkgKgkJCUIKLQkgKgkgIDEJCS8KLQkgKiAtLS0tLS0tCXwgUCh4KWR4Ci0JICoJQiAt IEEJLwotCSAqCQkJQQotCSAqCi0JICogVGhlIGdlb21ldHJpY2FsIGludGVycHJldGF0aW9uIG9m IHRoZSBpbnRlZ3JhbCBpcyB0aGUgYXJlYSB1bmRlciB0aGUKLQkgKiBncmFwaCBvZiBQKHgpLiBQ KHgpIGlzIGRlZmluZWQgYnkgdGhlIGxlbmd0aCBoaXN0b2dyYW0uIFdlIGNhbGN1bGF0ZQotCSAq IHRoZSBhcmVhIGluIGEgcGllY2V3aXNlIGZhc2hpb24sIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBs ZW5ndGggaGlzdG9ncmFtCi0JICogYmlucy4gRWFjaCBiaW4gaXMgYSB0cmFwZXpvaWQ6Ci0JICoK LQkgKgkJIFAoeDIpCi0JICoJCSAgL3wKLQkgKgkJIC8gfAotCSAqIFAoeDEpLyAgfAotCSAqCSAg IHwgICB8Ci0JICoJICAgfCAgIHwKLQkgKgktLS0rLS0tKy0tCi0JICoJICAgeDEgIHgyCi0JICoK LQkgKiB3aGVyZSB4MSBhbmQgeDIgYXJlIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBjdXJyZW50IGhp c3RvZ3JhbSwgYW5kIFAoeDEpCi0JICogYW5kIFAoeDEpIGFyZSB0aGUgY3VtdWxhdGl2ZSBmcmFj dGlvbiBvZiB0dXBsZXMgYXQgdGhlIGJvdW5kYXJpZXMuCi0JICoKLQkgKiBUaGUgYXJlYSBvZiBl YWNoIHRyYXBlem9pZCBpcyAxLzIgKiAoUCh4MikgKyBQKHgxKSkgKiAoeDIgLSB4MSkKLQkgKgot CSAqIFRoZSBmaXJzdCBiaW4gY29udGFpbnMgdGhlIGxvd2VyIGJvdW5kIHBhc3NlZCBieSB0aGUg Y2FsbGVyLCBzbyB3ZQotCSAqIHVzZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHRoZSBw cmV2aW91cyBhbmQgbmV4dCBoaXN0b2dyYW0gYmluCi0JICogYm91bmRhcnkgdG8gY2FsY3VsYXRl IFAoeDEpLiBMaWtld2lzZSBmb3IgdGhlIGxhc3QgYmluOiB3ZSB1c2UgbGluZWFyCi0JICogaW50 ZXJwb2xhdGlvbiB0byBjYWxjdWxhdGUgUCh4MikuIEZvciB0aGUgYmlucyBpbiBiZXR3ZWVuLCB4 MSBhbmQgeDIKLQkgKiBsaWUgb24gaGlzdG9ncmFtIGJpbiBib3VuZGFyaWVzLCBzbyBQKHgxKSBh bmQgUCh4MikgYXJlIHNpbXBseToKLQkgKiBQKHgxKSA9CSAgKGJpbiBpbmRleCkgLyAobnVtYmVy IG9mIGJpbnMpCi0JICogUCh4MikgPSAoYmluIGluZGV4ICsgMSAvIChudW1iZXIgb2YgYmlucykK LQkgKi8KLQotCS8qIEZpcnN0IGJpbiwgdGhlIG9uZSB0aGF0IGNvbnRhaW5zIGxvd2VyIGJvdW5k ICovCi0JaSA9IGxlbmd0aF9oaXN0X2JzZWFyY2gobGVuZ3RoX2hpc3RfdmFsdWVzLCBsZW5ndGhf aGlzdF9udmFsdWVzLCBsZW5ndGgxLCBlcXVhbCk7Ci0JaWYgKGkgPj0gbGVuZ3RoX2hpc3RfbnZh bHVlcyAtIDEpCi0JCXJldHVybiAxLjA7Ci0KLQlpZiAoaSA8IDApCi0JewotCQlpID0gMDsKLQkJ cG9zID0gMC4wOwotCX0KLQllbHNlCi0JewotCQkvKiBpbnRlcnBvbGF0ZSBsZW5ndGgxJ3MgcG9z aXRpb24gaW4gdGhlIGJpbiAqLwotCQlwb3MgPSBnZXRfbGVuX3Bvc2l0aW9uKGxlbmd0aDEsCi0J CQkJCQkJICAgRGF0dW1HZXRGbG9hdDgobGVuZ3RoX2hpc3RfdmFsdWVzW2ldKSwKLQkJCQkJCQkg ICBEYXR1bUdldEZsb2F0OChsZW5ndGhfaGlzdF92YWx1ZXNbaSArIDFdKSk7Ci0JfQotCVBCID0g KCgoZG91YmxlKSBpKSArIHBvcykgLyAoZG91YmxlKSAobGVuZ3RoX2hpc3RfbnZhbHVlcyAtIDEp OwotCUIgPSBsZW5ndGgxOwotCi0JLyoKLQkgKiBJbiB0aGUgZGVnZW5lcmF0ZSBjYXNlIHRoYXQg bGVuZ3RoMSA9PSBsZW5ndGgyLCBzaW1wbHkgcmV0dXJuCi0JICogUChsZW5ndGgxKS4gVGhpcyBp cyBub3QgbWVyZWx5IGFuIG9wdGltaXphdGlvbjogaWYgbGVuZ3RoMSA9PSBsZW5ndGgyLAotCSAq IHdlJ2QgZGl2aWRlIGJ5IHplcm8gbGF0ZXIgb24uCi0JICovCi0JaWYgKGxlbmd0aDIgPT0gbGVu Z3RoMSkKLQkJcmV0dXJuIFBCOwotCi0JLyoKLQkgKiBMb29wIHRocm91Z2ggYWxsIHRoZSBiaW5z LCB1bnRpbCB3ZSBoaXQgdGhlIGxhc3QgYmluLCB0aGUgb25lIHRoYXQKLQkgKiBjb250YWlucyB0 aGUgdXBwZXIgYm91bmQuIChpZiBsb3dlciBhbmQgdXBwZXIgYm91bmRzIGFyZSBpbiB0aGUgc2Ft ZQotCSAqIGJpbiwgdGhpcyBmYWxscyBvdXQgaW1tZWRpYXRlbHkpCi0JICovCi0JYXJlYSA9IDAu MDsKLQlmb3IgKDsgaSA8IGxlbmd0aF9oaXN0X252YWx1ZXMgLSAxOyBpKyspCi0JewotCQlkb3Vi bGUJCWJpbl91cHBlciA9IERhdHVtR2V0RmxvYXQ4KGxlbmd0aF9oaXN0X3ZhbHVlc1tpICsgMV0p OwotCi0JCS8qIGNoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGxhc3QgYmluICovCi0JCWlmICgh KGJpbl91cHBlciA8IGxlbmd0aDIgfHwgKGVxdWFsICYmIGJpbl91cHBlciA8PSBsZW5ndGgyKSkp Ci0JCQlicmVhazsKLQotCQkvKiB0aGUgdXBwZXIgYm91bmQgb2YgcHJldmlvdXMgYmluIGlzIHRo ZSBsb3dlciBib3VuZCBvZiB0aGlzIGJpbiAqLwotCQlBID0gQjsKLQkJUEEgPSBQQjsKLQotCQlC ID0gYmluX3VwcGVyOwotCQlQQiA9IChkb3VibGUpIGkgLyAoZG91YmxlKSAobGVuZ3RoX2hpc3Rf bnZhbHVlcyAtIDEpOwotCi0JCS8qCi0JCSAqIEFkZCB0aGUgYXJlYSBvZiB0aGlzIHRyYXBlem9p ZCB0byB0aGUgdG90YWwuIFRoZSBwb2ludCBvZiB0aGUKLQkJICogaWYtY2hlY2sgaXMgdG8gYXZv aWQgTmFOLCBpbiB0aGUgY29ybmVyIGNhc2UgdGhhdCBQQSA9PSBQQiA9PSAwLAotCQkgKiBhbmQg QiAtIEEgPT0gSW5mLiBUaGUgYXJlYSBvZiBhIHplcm8taGVpZ2h0IHRyYXBlem9pZCAoUEEgPT0g UEIgPT0KLQkJICogMCkgaXMgemVybywgcmVnYXJkbGVzcyBvZiB0aGUgd2lkdGggKEIgLSBBKS4K LQkJICovCi0JCWlmIChQQSA+IDAgfHwgUEIgPiAwKQotCQkJYXJlYSArPSAwLjUgKiAoUEIgKyBQ QSkgKiAoQiAtIEEpOwotCX0KLQotCS8qIExhc3QgYmluICovCi0JQSA9IEI7Ci0JUEEgPSBQQjsK LQotCUIgPSBsZW5ndGgyOwkJCQkvKiBsYXN0IGJpbiBlbmRzIGF0IHRoZSBxdWVyeSB1cHBlciBi b3VuZCAqLwotCWlmIChpID49IGxlbmd0aF9oaXN0X252YWx1ZXMgLSAxKQotCQlwb3MgPSAwLjA7 Ci0JZWxzZQotCXsKLQkJaWYgKERhdHVtR2V0RmxvYXQ4KGxlbmd0aF9oaXN0X3ZhbHVlc1tpXSkg PT0gRGF0dW1HZXRGbG9hdDgobGVuZ3RoX2hpc3RfdmFsdWVzW2kgKyAxXSkpCi0JCQlwb3MgPSAw LjA7Ci0JCWVsc2UKLQkJCXBvcyA9IGdldF9sZW5fcG9zaXRpb24obGVuZ3RoMiwKLQkJCQkJCQkJ ICAgRGF0dW1HZXRGbG9hdDgobGVuZ3RoX2hpc3RfdmFsdWVzW2ldKSwKLQkJCQkJCQkJICAgRGF0 dW1HZXRGbG9hdDgobGVuZ3RoX2hpc3RfdmFsdWVzW2kgKyAxXSkpOwotCX0KLQlQQiA9ICgoKGRv dWJsZSkgaSkgKyBwb3MpIC8gKGRvdWJsZSkgKGxlbmd0aF9oaXN0X252YWx1ZXMgLSAxKTsKLQot CWlmIChQQSA+IDAgfHwgUEIgPiAwKQotCQlhcmVhICs9IDAuNSAqIChQQiArIFBBKSAqIChCIC0g QSk7Ci0KLQkvKgotCSAqIE9rLCB3ZSBoYXZlIGNhbGN1bGF0ZWQgdGhlIGFyZWEsIGllLiB0aGUg aW50ZWdyYWwuIERpdmlkZSBieSB3aWR0aCB0bwotCSAqIGdldCB0aGUgcmVxdWVzdGVkIGF2ZXJh Z2UuCi0JICoKLQkgKiBBdm9pZCBOYU4gYXJpc2luZyBmcm9tIGluZmluaXRlIC8gaW5maW5pdGUu IFRoaXMgaGFwcGVucyBhdCBsZWFzdCBpZgotCSAqIGxlbmd0aDIgaXMgaW5maW5pdGUuIEl0J3Mg bm90IGNsZWFyIHdoYXQgdGhlIGNvcnJlY3QgdmFsdWUgd291bGQgYmUgaW4KLQkgKiB0aGF0IGNh c2UsIHNvIDAuNSBzZWVtcyBhcyBnb29kIGFzIGFueSB2YWx1ZS4KLQkgKi8KLQlpZiAoaXNpbmYo YXJlYSkgJiYgaXNpbmYobGVuZ3RoMikpCi0JCWZyYWMgPSAwLjU7Ci0JZWxzZQotCQlmcmFjID0g YXJlYSAvIChsZW5ndGgyIC0gbGVuZ3RoMSk7Ci0KLQlyZXR1cm4gZnJhYzsKLX0KLQotLyoKLSAq IENhbGN1bGF0ZSBzZWxlY3Rpdml0eSBvZiAidmFyIDxAIGNvbnN0IiBvcGVyYXRvciwgaWUuIGVz dGltYXRlIHRoZSBmcmFjdGlvbgotICogb2YgbXVsdGlyYW5nZXMgdGhhdCBmYWxsIHdpdGhpbiB0 aGUgY29uc3RhbnQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcy4gVGhpcyB1c2VzCi0gKiB0aGUgaGlz dG9ncmFtcyBvZiByYW5nZSBsb3dlciBib3VuZHMgYW5kIHJhbmdlIGxlbmd0aHMsIG9uIHRoZSBh c3N1bXB0aW9uCi0gKiB0aGF0IHRoZSByYW5nZSBsZW5ndGhzIGFyZSBpbmRlcGVuZGVudCBvZiB0 aGUgbG93ZXIgYm91bmRzLgotICoKLSAqIFRoZSBjYWxsZXIgaGFzIGFscmVhZHkgY2hlY2tlZCB0 aGF0IGNvbnN0YW50IGxvd2VyIGFuZCB1cHBlciBib3VuZHMgYXJlCi0gKiBmaW5pdGUuCi0gKi8K LXN0YXRpYyBkb3VibGUKLWNhbGNfaGlzdF9zZWxlY3Rpdml0eV9jb250YWluZWQoVHlwZUNhY2hl RW50cnkgKnR5cGNhY2hlLAotCQkJCQkJCQljb25zdCBSYW5nZUJvdW5kICpsb3dlciwgUmFuZ2VC b3VuZCAqdXBwZXIsCi0JCQkJCQkJCWNvbnN0IFJhbmdlQm91bmQgKmhpc3RfbG93ZXIsIGludCBo aXN0X252YWx1ZXMsCi0JCQkJCQkJCWNvbnN0IERhdHVtICpsZW5ndGhfaGlzdF92YWx1ZXMsIGlu dCBsZW5ndGhfaGlzdF9udmFsdWVzKQotewotCWludAkJCWksCi0JCQkJdXBwZXJfaW5kZXg7Ci0J ZmxvYXQ4CQlwcmV2X2Rpc3Q7Ci0JZG91YmxlCQliaW5fd2lkdGg7Ci0JZG91YmxlCQl1cHBlcl9i aW5fd2lkdGg7Ci0JZG91YmxlCQlzdW1fZnJhYzsKLQotCS8qCi0JICogQmVnaW4gYnkgZmluZGlu ZyB0aGUgYmluIGNvbnRhaW5pbmcgdGhlIHVwcGVyIGJvdW5kLCBpbiB0aGUgbG93ZXIgYm91bmQK LQkgKiBoaXN0b2dyYW0uIEFueSByYW5nZSB3aXRoIGEgbG93ZXIgYm91bmQgPiBjb25zdGFudCB1 cHBlciBib3VuZCBjYW4ndAotCSAqIG1hdGNoLCBpZS4gdGhlcmUgYXJlIG5vIG1hdGNoZXMgaW4g YmlucyBncmVhdGVyIHRoYW4gdXBwZXJfaW5kZXguCi0JICovCi0JdXBwZXItPmluY2x1c2l2ZSA9 ICF1cHBlci0+aW5jbHVzaXZlOwotCXVwcGVyLT5sb3dlciA9IHRydWU7Ci0JdXBwZXJfaW5kZXgg PSByYm91bmRfYnNlYXJjaCh0eXBjYWNoZSwgdXBwZXIsIGhpc3RfbG93ZXIsIGhpc3RfbnZhbHVl cywKLQkJCQkJCQkJIGZhbHNlKTsKLQotCS8qCi0JICogSWYgdGhlIHVwcGVyIGJvdW5kIHZhbHVl IGlzIGJlbG93IHRoZSBoaXN0b2dyYW0ncyBsb3dlciBsaW1pdCwgdGhlcmUKLQkgKiBhcmUgbm8g bWF0Y2hlcy4KLQkgKi8KLQlpZiAodXBwZXJfaW5kZXggPCAwKQotCQlyZXR1cm4gMC4wOwotCi0J LyoKLQkgKiBJZiB0aGUgdXBwZXIgYm91bmQgdmFsdWUgaXMgYXQgb3IgYmV5b25kIHRoZSBoaXN0 b2dyYW0ncyB1cHBlciBsaW1pdCwKLQkgKiBzdGFydCBvdXIgbG9vcCBhdCB0aGUgbGFzdCBhY3R1 YWwgYmluLCBhcyB0aG91Z2ggdGhlIHVwcGVyIGJvdW5kIHdlcmUKLQkgKiB3aXRoaW4gdGhhdCBi aW47IGdldF9wb3NpdGlvbiB3aWxsIGNsYW1wIGl0cyByZXN1bHQgdG8gMS4wIGFueXdheS4KLQkg KiAoVGhpcyBjb3JyZXNwb25kcyB0byBhc3N1bWluZyB0aGF0IHRoZSBkYXRhIHBvcHVsYXRpb24g YWJvdmUgdGhlCi0JICogaGlzdG9ncmFtJ3MgdXBwZXIgbGltaXQgaXMgZW1wdHksIGV4YWN0bHkg bGlrZSB3aGF0IHdlIGp1c3QgYXNzdW1lZCBmb3IKLQkgKiB0aGUgbG93ZXIgbGltaXQuKQotCSAq LwotCXVwcGVyX2luZGV4ID0gTWluKHVwcGVyX2luZGV4LCBoaXN0X252YWx1ZXMgLSAyKTsKLQot CS8qCi0JICogQ2FsY3VsYXRlIHVwcGVyX2Jpbl93aWR0aCwgaWUuIHRoZSBmcmFjdGlvbiBvZiB0 aGUgKHVwcGVyX2luZGV4LAotCSAqIHVwcGVyX2luZGV4ICsgMSkgYmluIHdoaWNoIGlzIGdyZWF0 ZXIgdGhhbiB1cHBlciBib3VuZCBvZiBxdWVyeSByYW5nZQotCSAqIHVzaW5nIGxpbmVhciBpbnRl cnBvbGF0aW9uIG9mIHN1YmRpZmYgZnVuY3Rpb24uCi0JICovCi0JdXBwZXJfYmluX3dpZHRoID0g Z2V0X3Bvc2l0aW9uKHR5cGNhY2hlLCB1cHBlciwKLQkJCQkJCQkJICAgJmhpc3RfbG93ZXJbdXBw ZXJfaW5kZXhdLAotCQkJCQkJCQkgICAmaGlzdF9sb3dlclt1cHBlcl9pbmRleCArIDFdKTsKLQot CS8qCi0JICogSW4gdGhlIGxvb3AsIGRpc3QgYW5kIHByZXZfZGlzdCBhcmUgdGhlIGRpc3RhbmNl IG9mIHRoZSAiY3VycmVudCIgYmluJ3MKLQkgKiBsb3dlciBhbmQgdXBwZXIgYm91bmRzIGZyb20g dGhlIGNvbnN0YW50IHVwcGVyIGJvdW5kLgotCSAqCi0JICogYmluX3dpZHRoIHJlcHJlc2VudHMg dGhlIHdpZHRoIG9mIHRoZSBjdXJyZW50IGJpbi4gTm9ybWFsbHkgaXQgaXMgMS4wLAotCSAqIG1l YW5pbmcgYSBmdWxsIHdpZHRoIGJpbiwgYnV0IGNhbiBiZSBsZXNzIGluIHRoZSBjb3JuZXIgY2Fz ZXM6IHN0YXJ0Ci0JICogYW5kIGVuZCBvZiB0aGUgbG9vcC4gV2Ugc3RhcnQgd2l0aCBiaW5fd2lk dGggPSB1cHBlcl9iaW5fd2lkdGgsIGJlY2F1c2UKLQkgKiB3ZSBiZWdpbiBhdCB0aGUgYmluIGNv bnRhaW5pbmcgdGhlIHVwcGVyIGJvdW5kLgotCSAqLwotCXByZXZfZGlzdCA9IDAuMDsKLQliaW5f d2lkdGggPSB1cHBlcl9iaW5fd2lkdGg7Ci0KLQlzdW1fZnJhYyA9IDAuMDsKLQlmb3IgKGkgPSB1 cHBlcl9pbmRleDsgaSA+PSAwOyBpLS0pCi0JewotCQlkb3VibGUJCWRpc3Q7Ci0JCWRvdWJsZQkJ bGVuZ3RoX2hpc3RfZnJhYzsKLQkJYm9vbAkJZmluYWxfYmluID0gZmFsc2U7Ci0KLQkJLyoKLQkJ ICogZGlzdCAtLSBkaXN0YW5jZSBmcm9tIHVwcGVyIGJvdW5kIG9mIHF1ZXJ5IHJhbmdlIHRvIGxv d2VyIGJvdW5kIG9mCi0JCSAqIHRoZSBjdXJyZW50IGJpbiBpbiB0aGUgbG93ZXIgYm91bmQgaGlz dG9ncmFtLiBPciB0byB0aGUgbG93ZXIgYm91bmQKLQkJICogb2YgdGhlIGNvbnN0YW50IHJhbmdl LCBpZiB0aGlzIGlzIHRoZSBmaW5hbCBiaW4sIGNvbnRhaW5pbmcgdGhlCi0JCSAqIGNvbnN0YW50 IGxvd2VyIGJvdW5kLgotCQkgKi8KLQkJaWYgKHJhbmdlX2NtcF9ib3VuZHModHlwY2FjaGUsICZo aXN0X2xvd2VyW2ldLCBsb3dlcikgPCAwKQotCQl7Ci0JCQlkaXN0ID0gZ2V0X2Rpc3RhbmNlKHR5 cGNhY2hlLCBsb3dlciwgdXBwZXIpOwotCi0JCQkvKgotCQkJICogU3VidHJhY3QgZnJvbSBiaW5f d2lkdGggdGhlIHBvcnRpb24gb2YgdGhpcyBiaW4gdGhhdCB3ZSB3YW50IHRvCi0JCQkgKiBpZ25v cmUuCi0JCQkgKi8KLQkJCWJpbl93aWR0aCAtPSBnZXRfcG9zaXRpb24odHlwY2FjaGUsIGxvd2Vy LCAmaGlzdF9sb3dlcltpXSwKLQkJCQkJCQkJCSAgJmhpc3RfbG93ZXJbaSArIDFdKTsKLQkJCWlm IChiaW5fd2lkdGggPCAwLjApCi0JCQkJYmluX3dpZHRoID0gMC4wOwotCQkJZmluYWxfYmluID0g dHJ1ZTsKLQkJfQotCQllbHNlCi0JCQlkaXN0ID0gZ2V0X2Rpc3RhbmNlKHR5cGNhY2hlLCAmaGlz dF9sb3dlcltpXSwgdXBwZXIpOwotCi0JCS8qCi0JCSAqIEVzdGltYXRlIHRoZSBmcmFjdGlvbiBv ZiB0dXBsZXMgaW4gdGhpcyBiaW4gdGhhdCBhcmUgbmFycm93IGVub3VnaAotCQkgKiB0byBub3Qg ZXhjZWVkIHRoZSBkaXN0YW5jZSB0byB0aGUgdXBwZXIgYm91bmQgb2YgdGhlIHF1ZXJ5IHJhbmdl LgotCQkgKi8KLQkJbGVuZ3RoX2hpc3RfZnJhYyA9IGNhbGNfbGVuZ3RoX2hpc3RfZnJhYyhsZW5n dGhfaGlzdF92YWx1ZXMsCi0JCQkJCQkJCQkJCQkgbGVuZ3RoX2hpc3RfbnZhbHVlcywKLQkJCQkJ CQkJCQkJCSBwcmV2X2Rpc3QsIGRpc3QsIHRydWUpOwotCi0JCS8qCi0JCSAqIEFkZCB0aGUgZnJh Y3Rpb24gb2YgdHVwbGVzIGluIHRoaXMgYmluLCB3aXRoIGEgc3VpdGFibGUgbGVuZ3RoLCB0bwot CQkgKiB0aGUgdG90YWwuCi0JCSAqLwotCQlzdW1fZnJhYyArPSBsZW5ndGhfaGlzdF9mcmFjICog YmluX3dpZHRoIC8gKGRvdWJsZSkgKGhpc3RfbnZhbHVlcyAtIDEpOwotCi0JCWlmIChmaW5hbF9i aW4pCi0JCQlicmVhazsKLQotCQliaW5fd2lkdGggPSAxLjA7Ci0JCXByZXZfZGlzdCA9IGRpc3Q7 Ci0JfQotCi0JcmV0dXJuIHN1bV9mcmFjOwotfQotCi0vKgotICogQ2FsY3VsYXRlIHNlbGVjdGl2 aXR5IG9mICJ2YXIgQD4gY29uc3QiIG9wZXJhdG9yLCBpZS4gZXN0aW1hdGUgdGhlIGZyYWN0aW9u Ci0gKiBvZiBtdWx0aXJhbmdlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbnN0YW50IGxvd2VyIGFuZCB1 cHBlciBib3VuZHMuIFRoaXMgdXNlcwotICogdGhlIGhpc3RvZ3JhbXMgb2YgcmFuZ2UgbG93ZXIg Ym91bmRzIGFuZCByYW5nZSBsZW5ndGhzLCBvbiB0aGUgYXNzdW1wdGlvbgotICogdGhhdCB0aGUg cmFuZ2UgbGVuZ3RocyBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIGxvd2VyIGJvdW5kcy4KLSAqLwot c3RhdGljIGRvdWJsZQotY2FsY19oaXN0X3NlbGVjdGl2aXR5X2NvbnRhaW5zKFR5cGVDYWNoZUVu dHJ5ICp0eXBjYWNoZSwKLQkJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpsb3dlciwgY29uc3Qg UmFuZ2VCb3VuZCAqdXBwZXIsCi0JCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdF9sb3dl ciwgaW50IGhpc3RfbnZhbHVlcywKLQkJCQkJCQkgICBjb25zdCBEYXR1bSAqbGVuZ3RoX2hpc3Rf dmFsdWVzLCBpbnQgbGVuZ3RoX2hpc3RfbnZhbHVlcykKLXsKLQlpbnQJCQlpLAotCQkJCWxvd2Vy X2luZGV4OwotCWRvdWJsZQkJYmluX3dpZHRoLAotCQkJCWxvd2VyX2Jpbl93aWR0aDsKLQlkb3Vi bGUJCXN1bV9mcmFjOwotCWZsb2F0OAkJcHJldl9kaXN0OwotCi0JLyogRmluZCB0aGUgYmluIGNv bnRhaW5pbmcgdGhlIGxvd2VyIGJvdW5kIG9mIHF1ZXJ5IHJhbmdlLiAqLwotCWxvd2VyX2luZGV4 ID0gcmJvdW5kX2JzZWFyY2godHlwY2FjaGUsIGxvd2VyLCBoaXN0X2xvd2VyLCBoaXN0X252YWx1 ZXMsCi0JCQkJCQkJCSB0cnVlKTsKLQotCS8qCi0JICogSWYgdGhlIGxvd2VyIGJvdW5kIHZhbHVl IGlzIGJlbG93IHRoZSBoaXN0b2dyYW0ncyBsb3dlciBsaW1pdCwgdGhlcmUKLQkgKiBhcmUgbm8g bWF0Y2hlcy4KLQkgKi8KLQlpZiAobG93ZXJfaW5kZXggPCAwKQotCQlyZXR1cm4gMC4wOwotCi0J LyoKLQkgKiBJZiB0aGUgbG93ZXIgYm91bmQgdmFsdWUgaXMgYXQgb3IgYmV5b25kIHRoZSBoaXN0 b2dyYW0ncyB1cHBlciBsaW1pdCwKLQkgKiBzdGFydCBvdXIgbG9vcCBhdCB0aGUgbGFzdCBhY3R1 YWwgYmluLCBhcyB0aG91Z2ggdGhlIHVwcGVyIGJvdW5kIHdlcmUKLQkgKiB3aXRoaW4gdGhhdCBi aW47IGdldF9wb3NpdGlvbiB3aWxsIGNsYW1wIGl0cyByZXN1bHQgdG8gMS4wIGFueXdheS4KLQkg KiAoVGhpcyBjb3JyZXNwb25kcyB0byBhc3N1bWluZyB0aGF0IHRoZSBkYXRhIHBvcHVsYXRpb24g YWJvdmUgdGhlCi0JICogaGlzdG9ncmFtJ3MgdXBwZXIgbGltaXQgaXMgZW1wdHksIGV4YWN0bHkg bGlrZSB3aGF0IHdlIGp1c3QgYXNzdW1lZCBmb3IKLQkgKiB0aGUgbG93ZXIgbGltaXQuKQotCSAq LwotCWxvd2VyX2luZGV4ID0gTWluKGxvd2VyX2luZGV4LCBoaXN0X252YWx1ZXMgLSAyKTsKLQot CS8qCi0JICogQ2FsY3VsYXRlIGxvd2VyX2Jpbl93aWR0aCwgaWUuIHRoZSBmcmFjdGlvbiBvZiB0 aGUgb2YgKGxvd2VyX2luZGV4LAotCSAqIGxvd2VyX2luZGV4ICsgMSkgYmluIHdoaWNoIGlzIGdy ZWF0ZXIgdGhhbiBsb3dlciBib3VuZCBvZiBxdWVyeSByYW5nZQotCSAqIHVzaW5nIGxpbmVhciBp bnRlcnBvbGF0aW9uIG9mIHN1YmRpZmYgZnVuY3Rpb24uCi0JICovCi0JbG93ZXJfYmluX3dpZHRo ID0gZ2V0X3Bvc2l0aW9uKHR5cGNhY2hlLCBsb3dlciwgJmhpc3RfbG93ZXJbbG93ZXJfaW5kZXhd LAotCQkJCQkJCQkgICAmaGlzdF9sb3dlcltsb3dlcl9pbmRleCArIDFdKTsKLQotCS8qCi0JICog TG9vcCB0aHJvdWdoIGFsbCB0aGUgbG93ZXIgYm91bmQgYmlucywgc21hbGxlciB0aGFuIHRoZSBx dWVyeSBsb3dlcgotCSAqIGJvdW5kLiBJbiB0aGUgbG9vcCwgZGlzdCBhbmQgcHJldl9kaXN0IGFy ZSB0aGUgZGlzdGFuY2Ugb2YgdGhlCi0JICogImN1cnJlbnQiIGJpbidzIGxvd2VyIGFuZCB1cHBl ciBib3VuZHMgZnJvbSB0aGUgY29uc3RhbnQgdXBwZXIgYm91bmQuCi0JICogV2UgYmVnaW4gZnJv bSBxdWVyeSBsb3dlciBib3VuZCwgYW5kIHdhbGsgYmFja3dhcmRzLCBzbyB0aGUgZmlyc3QgYmlu J3MKLQkgKiB1cHBlciBib3VuZCBpcyB0aGUgcXVlcnkgbG93ZXIgYm91bmQsIGFuZCBpdHMgZGlz dGFuY2UgdG8gdGhlIHF1ZXJ5Ci0JICogdXBwZXIgYm91bmQgaXMgdGhlIGxlbmd0aCBvZiB0aGUg cXVlcnkgcmFuZ2UuCi0JICoKLQkgKiBiaW5fd2lkdGggcmVwcmVzZW50cyB0aGUgd2lkdGggb2Yg dGhlIGN1cnJlbnQgYmluLiBOb3JtYWxseSBpdCBpcyAxLjAsCi0JICogbWVhbmluZyBhIGZ1bGwg d2lkdGggYmluLCBleGNlcHQgZm9yIHRoZSBmaXJzdCBiaW4sIHdoaWNoIGlzIG9ubHkKLQkgKiBj b3VudGVkIHVwIHRvIHRoZSBjb25zdGFudCBsb3dlciBib3VuZC4KLQkgKi8KLQlwcmV2X2Rpc3Qg PSBnZXRfZGlzdGFuY2UodHlwY2FjaGUsIGxvd2VyLCB1cHBlcik7Ci0Jc3VtX2ZyYWMgPSAwLjA7 Ci0JYmluX3dpZHRoID0gbG93ZXJfYmluX3dpZHRoOwotCWZvciAoaSA9IGxvd2VyX2luZGV4OyBp ID49IDA7IGktLSkKLQl7Ci0JCWZsb2F0OAkJZGlzdDsKLQkJZG91YmxlCQlsZW5ndGhfaGlzdF9m cmFjOwotCi0JCS8qCi0JCSAqIGRpc3QgLS0gZGlzdGFuY2UgZnJvbSB1cHBlciBib3VuZCBvZiBx dWVyeSByYW5nZSB0byBjdXJyZW50IHZhbHVlCi0JCSAqIG9mIGxvd2VyIGJvdW5kIGhpc3RvZ3Jh bSBvciBsb3dlciBib3VuZCBvZiBxdWVyeSByYW5nZSAoaWYgd2UndmUKLQkJICogcmVhY2ggaXQp LgotCQkgKi8KLQkJZGlzdCA9IGdldF9kaXN0YW5jZSh0eXBjYWNoZSwgJmhpc3RfbG93ZXJbaV0s IHVwcGVyKTsKLQotCQkvKgotCQkgKiBHZXQgYXZlcmFnZSBmcmFjdGlvbiBvZiBsZW5ndGggaGlz dG9ncmFtIHdoaWNoIGNvdmVycyBpbnRlcnZhbHMKLQkJICogbG9uZ2VyIHRoYW4gKG9yIGVxdWFs IHRvKSBkaXN0YW5jZSB0byB1cHBlciBib3VuZCBvZiBxdWVyeSByYW5nZS4KLQkJICovCi0JCWxl bmd0aF9oaXN0X2ZyYWMgPQotCQkJMS4wIC0gY2FsY19sZW5ndGhfaGlzdF9mcmFjKGxlbmd0aF9o aXN0X3ZhbHVlcywKLQkJCQkJCQkJCQlsZW5ndGhfaGlzdF9udmFsdWVzLAotCQkJCQkJCQkJCXBy ZXZfZGlzdCwgZGlzdCwgZmFsc2UpOwotCi0JCXN1bV9mcmFjICs9IGxlbmd0aF9oaXN0X2ZyYWMg KiBiaW5fd2lkdGggLyAoZG91YmxlKSAoaGlzdF9udmFsdWVzIC0gMSk7Ci0KLQkJYmluX3dpZHRo ID0gMS4wOwotCQlwcmV2X2Rpc3QgPSBkaXN0OwotCX0KLQotCXJldHVybiBzdW1fZnJhYzsKLX0K LQotLyoKLSAqIEVzdGltYXRlIGpvaW4gc2VsZWN0aXZpdHkgUChYIDwgWSkgdXNpbmcgcmFuZ2Vi b3VuZCBoaXN0b2dyYW1zLgotICoKLSAqIEJhc2VkIG9uOiBEaW9nbyBSZXBhcywgWmhpY2hlbmcg THVvLCBNYXhpbWUgU2Nob2VtYW5zLCBNYWhtb3VkIFNha3IsIDIwMjIKLSAqICJTZWxlY3Rpdml0 eSBFc3RpbWF0aW9uIG9mIEluZXF1YWxpdHkgSm9pbnMgSW4gRGF0YWJhc2VzIgotICogaHR0cHM6 Ly9kb2kub3JnLzEwLjQ4NTUwL2FyWGl2LjIyMDYuMDczOTYKLSAqCi0gKiBoaXN0MSBhbmQgaGlz dDIgYXJlIGFycmF5cyBvZiBSYW5nZUJvdW5kIGVudHJpZXMgZnJvbSB0aGUgYm91bmRzIGhpc3Rv Z3JhbXMKLSAqIG9mIHR3byByYW5nZS10eXBlZCBvciBtdWx0aXJhbmdlLXR5cGVkIGF0dHJpYnV0 ZXMgWCBhbmQgWSwgcmVzcGVjdGl2ZWx5LgotICogRWFjaCBhcnJheSBoYXMgYXQgbGVhc3QgMiBl bnRyaWVzIChvbmUgaGlzdG9ncmFtIGJpbikuICBUaGUgZW50cmllcyBjYXJyeQotICogZnVsbCBi b3VuZCBtZXRhZGF0YSAobG93ZXIvdXBwZXIgZmxhZywgaW5jbHVzaXZlL2V4Y2x1c2l2ZSksIGFu ZCBhbGwKLSAqIGNvbXBhcmlzb25zIHVzZSByYW5nZV9jbXBfYm91bmRzKCkgc28gdGhhdCBib3Vu ZCBzZW1hbnRpY3MgYXJlIHByZXNlcnZlZC4KLSAqCi0gKiBUaGUgYWxnb3JpdGhtIG1vZGVscyBl YWNoIGF0dHJpYnV0ZSdzIGRpc3RyaWJ1dGlvbiBhcyBhIHBpZWNld2lzZSBmdW5jdGlvbgotICog ZGVyaXZlZCBmcm9tIGl0cyBoaXN0b2dyYW0sIHRoZW4gY29tcHV0ZXM6Ci0gKiAgIFAoWCA8IFkp ID0gMC41ICogc3VtKCAoRl9YKHByZXYpICsgRl9YKGN1cikpICogKEZfWShjdXIpIC0gRl9ZKHBy ZXYpKSApCi0gKiBieSBwYXJhbGxlbC1zY2FubmluZyBib3RoIGhpc3RvZ3JhbXMuCi0gKgotICog VGhlIGluaXRpYWwgZmFzdC1mb3J3YXJkIGxvb3BzIHNraXAgaGlzdG9ncmFtIGVudHJpZXMgdGhh dCBmYWxsIGVudGlyZWx5Ci0gKiBiZWZvcmUgdGhlIG90aGVyIGhpc3RvZ3JhbSdzIHJhbmdlLCBz byB0aGUgbWFpbiBsb29wIG9ubHkgcHJvY2Vzc2VzIHRoZQotICogb3ZlcmxhcHBpbmcgcmVnaW9u LiAgQm91bmRzIGNoZWNrcyBhcmUgcmVxdWlyZWQgYmVjYXVzZSB0aGUgaGlzdG9ncmFtcyBtYXkK LSAqIGJlIGNvbXBsZXRlbHkgZGlzam9pbnQgKGUuZy4sIGFsbCBvZiBYIGlzIGJlbG93IGFsbCBv ZiBZKS4KLSAqLwotc3RhdGljIGRvdWJsZQotY2FsY19oaXN0X2pvaW5fc2VsZWN0aXZpdHkoVHlw ZUNhY2hlRW50cnkgKnR5cGNhY2hlLAotCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdDEs IGludCBuaGlzdDEsCi0JCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpoaXN0MiwgaW50IG5oaXN0 MikKLXsKLQlpbnQJCQlpLAotCQkJCWo7Ci0JZG91YmxlCQlzZWxlY3Rpdml0eSA9IDAuMDsKLQlk b3VibGUJCXByZXZfc2VsMSA9IC0xLjA7CS8qIG5lZ2F0aXZlIHNlbnRpbmVsIHNraXBzIGZpcnN0 IGl0ZXIgKi8KLQlkb3VibGUJCXByZXZfc2VsMiA9IDAuMDsKLQotCUFzc2VydChuaGlzdDEgPiAx KTsKLQlBc3NlcnQobmhpc3QyID4gMSk7Ci0KLQkvKgotCSAqIEZhc3QtZm9yd2FyZCBwYXN0IGhp c3QxIGVudHJpZXMgdGhhdCBhcmUgZW50aXJlbHkgYmVsb3cgaGlzdDJbMF0sIGFuZAotCSAqIHZp Y2UgdmVyc2EuICBCb3VuZHMgY2hlY2tzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hl biB0aGUKLQkgKiBoaXN0b2dyYW1zIGFyZSBmdWxseSBkaXNqb2ludC4KLQkgKi8KLQlmb3IgKGkg PSAwOyBpIDwgbmhpc3QxICYmCi0JCSByYW5nZV9jbXBfYm91bmRzKHR5cGNhY2hlLCAmaGlzdDFb aV0sICZoaXN0MlswXSkgPCAwOyBpKyspCi0JCTsKLQlmb3IgKGogPSAwOyBqIDwgbmhpc3QyICYm Ci0JCSByYW5nZV9jbXBfYm91bmRzKHR5cGNhY2hlLCAmaGlzdDJbal0sICZoaXN0MVswXSkgPCAw OyBqKyspCi0JCTsKLQotCS8qCi0JICogSGFuZGxlIGZ1bGx5LXNlcGFyYXRlZCBoaXN0b2dyYW1z LiAgV2hlbiBhbGwgYm91bmRzIGluIGhpc3QxIGFyZSBiZWxvdwotCSAqIGFsbCBib3VuZHMgaW4g aGlzdDIsIFAoWCA8IFkpIGlzIH4xLjAuICBXaGVuIGFsbCBvZiBoaXN0MiBpcyBiZWxvdwotCSAq IGhpc3QxLCBQKFggPCBZKSBpcyB+MC4wLiAgV2UgcmV0dXJuIGltbWVkaWF0ZWx5IHJhdGhlciB0 aGFuIGZhbGxpbmcKLQkgKiBpbnRvIHRoZSBvdmVybGFwIHdhbGsgd2l0aCBpbnZhbGlkIGluZGlj ZXMuCi0JICovCi0JaWYgKGkgPj0gbmhpc3QxKQotCQlyZXR1cm4gMS4wOwotCWlmIChqID49IG5o aXN0MikKLQkJcmV0dXJuIDAuMDsKLQotCS8qIFdhbGsgdGhlIG92ZXJsYXBwaW5nIHJlZ2lvbiBv ZiBib3RoIGhpc3RvZ3JhbXMgKi8KLQl3aGlsZSAoaSA8IG5oaXN0MSAmJiBqIDwgbmhpc3QyKQot CXsKLQkJZG91YmxlCQljdXJfc2VsMSwKLQkJCQkJY3VyX3NlbDI7Ci0JCVJhbmdlQm91bmQJY3Vy X3N5bmM7Ci0JCWludAkJCWNtcDsKLQotCQljbXAgPSByYW5nZV9jbXBfYm91bmRzKHR5cGNhY2hl LCAmaGlzdDFbaV0sICZoaXN0MltqXSk7Ci0JCWlmIChjbXAgPCAwKQotCQkJY3VyX3N5bmMgPSBo aXN0MVtpKytdOwotCQllbHNlIGlmIChjbXAgPiAwKQotCQkJY3VyX3N5bmMgPSBoaXN0MltqKytd OwotCQllbHNlCi0JCXsKLQkJCS8qIEVxdWFsIGJvdW5kczogYWR2YW5jZSBib3RoICovCi0JCQlj dXJfc3luYyA9IGhpc3QxW2ldOwotCQkJaSsrOwotCQkJaisrOwotCQl9Ci0JCWN1cl9zZWwxID0g Y2FsY19oaXN0X3NlbGVjdGl2aXR5X3NjYWxhcih0eXBjYWNoZSwgJmN1cl9zeW5jLAotCQkJCQkJ CQkJCQkJaGlzdDEsIG5oaXN0MSwgZmFsc2UpOwotCQljdXJfc2VsMiA9IGNhbGNfaGlzdF9zZWxl Y3Rpdml0eV9zY2FsYXIodHlwY2FjaGUsICZjdXJfc3luYywKLQkJCQkJCQkJCQkJCWhpc3QyLCBu aGlzdDIsIGZhbHNlKTsKLQotCQkvKiBTa2lwIHRoZSBmaXJzdCBpdGVyYXRpb24gKG5vIHByZXZp b3VzIHBvaW50IHlldCkgKi8KLQkJaWYgKHByZXZfc2VsMSA+PSAwKQotCQkJc2VsZWN0aXZpdHkg Kz0gKHByZXZfc2VsMSArIGN1cl9zZWwxKSAqIChjdXJfc2VsMiAtIHByZXZfc2VsMik7Ci0KLQkJ cHJldl9zZWwxID0gY3VyX3NlbDE7Ci0JCXByZXZfc2VsMiA9IGN1cl9zZWwyOwotCX0KLQotCS8q IFAoWCA8IFkpID0gMC41ICogU3VtKC4uLikgKi8KLQlzZWxlY3Rpdml0eSAvPSAyOwotCi0JLyog SW5jbHVkZSByZW1haW5kZXIgb2YgaGlzdDIgaWYgaGlzdDEgd2FzIGV4aGF1c3RlZCBmaXJzdCAq LwotCWlmIChqIDwgbmhpc3QyKQotCQlzZWxlY3Rpdml0eSArPSAxIC0gcHJldl9zZWwyOwotCi0J cmV0dXJuIHNlbGVjdGl2aXR5OwotfQotCiAvKgogICogbXVsdGlyYW5nZWpvaW5zZWwgLS0gam9p biBzZWxlY3Rpdml0eSBmb3IgbXVsdGlyYW5nZSBvcGVyYXRvcnMKICAqCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0eXBlc19zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JhbmdldHlwZXNfc2VsZnVuY3MuYwppbmRleCA5ZjIxMmU5ZDE3OC4uOGNkZTMz NmI1NWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVzX3NlbGZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JhbmdldHlwZXNfc2VsZnVuY3MuYwpA QCAtMzUsMjkgKzM1LDYgQEAgc3RhdGljIGRvdWJsZSBkZWZhdWx0X3JhbmdlX3NlbGVjdGl2aXR5 KE9pZCBvcGVyYXRvcik7CiBzdGF0aWMgZG91YmxlIGNhbGNfaGlzdF9zZWxlY3Rpdml0eShUeXBl Q2FjaGVFbnRyeSAqdHlwY2FjaGUsCiAJCQkJCQkJCQlWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRh LCBjb25zdCBSYW5nZVR5cGUgKmNvbnN0dmFsLAogCQkJCQkJCQkJT2lkIG9wZXJhdG9yKTsKLXN0 YXRpYyBkb3VibGUgY2FsY19oaXN0X3NlbGVjdGl2aXR5X3NjYWxhcihUeXBlQ2FjaGVFbnRyeSAq dHlwY2FjaGUsCi0JCQkJCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAqY29uc3Rib3VuZCwKLQkJ CQkJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpoaXN0LCBpbnQgaGlzdF9udmFsdWVzLAotCQkJ CQkJCQkJCSAgIGJvb2wgZXF1YWwpOwotc3RhdGljIGludAlyYm91bmRfYnNlYXJjaChUeXBlQ2Fj aGVFbnRyeSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVlLAotCQkJCQkJICAgY29u c3QgUmFuZ2VCb3VuZCAqaGlzdCwgaW50IGhpc3RfbGVuZ3RoLCBib29sIGVxdWFsKTsKLXN0YXRp YyBmbG9hdDggZ2V0X3Bvc2l0aW9uKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFu Z2VCb3VuZCAqdmFsdWUsCi0JCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpoaXN0MSwgY29uc3Qg UmFuZ2VCb3VuZCAqaGlzdDIpOwotc3RhdGljIGZsb2F0OCBnZXRfbGVuX3Bvc2l0aW9uKGRvdWJs ZSB2YWx1ZSwgZG91YmxlIGhpc3QxLCBkb3VibGUgaGlzdDIpOwotc3RhdGljIGZsb2F0OCBnZXRf ZGlzdGFuY2UoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLCBjb25zdCBSYW5nZUJvdW5kICpib3Vu ZDEsCi0JCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpib3VuZDIpOwotc3RhdGljIGludAlsZW5n dGhfaGlzdF9ic2VhcmNoKGNvbnN0IERhdHVtICpsZW5ndGhfaGlzdF92YWx1ZXMsCi0JCQkJCQkJ CWludCBsZW5ndGhfaGlzdF9udmFsdWVzLCBkb3VibGUgdmFsdWUsIGJvb2wgZXF1YWwpOwotc3Rh dGljIGRvdWJsZSBjYWxjX2xlbmd0aF9oaXN0X2ZyYWMoY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0 X3ZhbHVlcywKLQkJCQkJCQkJCWludCBsZW5ndGhfaGlzdF9udmFsdWVzLCBkb3VibGUgbGVuZ3Ro MSwgZG91YmxlIGxlbmd0aDIsIGJvb2wgZXF1YWwpOwotc3RhdGljIGRvdWJsZSBjYWxjX2hpc3Rf c2VsZWN0aXZpdHlfY29udGFpbmVkKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKLQkJCQkJCQkJ CQkJICBjb25zdCBSYW5nZUJvdW5kICpsb3dlciwgUmFuZ2VCb3VuZCAqdXBwZXIsCi0JCQkJCQkJ CQkJCSAgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdF9sb3dlciwgaW50IGhpc3RfbnZhbHVlcywKLQkJ CQkJCQkJCQkJICBjb25zdCBEYXR1bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLCBpbnQgbGVuZ3RoX2hp c3RfbnZhbHVlcyk7Ci1zdGF0aWMgZG91YmxlIGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9jb250YWlu cyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCi0JCQkJCQkJCQkJCSBjb25zdCBSYW5nZUJvdW5k ICpsb3dlciwgY29uc3QgUmFuZ2VCb3VuZCAqdXBwZXIsCi0JCQkJCQkJCQkJCSBjb25zdCBSYW5n ZUJvdW5kICpoaXN0X2xvd2VyLCBpbnQgaGlzdF9udmFsdWVzLAotCQkJCQkJCQkJCQkgY29uc3Qg RGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywgaW50IGxlbmd0aF9oaXN0X252YWx1ZXMpOwogCiAv KgogICogUmV0dXJucyBhIGRlZmF1bHQgc2VsZWN0aXZpdHkgZXN0aW1hdGUgZm9yIGdpdmVuIG9w ZXJhdG9yLCB3aGVuIHdlIGRvbid0CkBAIC01OTIsNyArNTY5LDcgQEAgY2FsY19oaXN0X3NlbGVj dGl2aXR5KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgVmFyaWFibGVTdGF0RGF0YSAqdmFyZGF0 YSwKICAqIExvb2sgdXAgdGhlIGZyYWN0aW9uIG9mIHZhbHVlcyBsZXNzIHRoYW4gKG9yIGVxdWFs LCBpZiAnZXF1YWwnIGFyZ3VtZW50CiAgKiBpcyB0cnVlKSBhIGdpdmVuIGNvbnN0IGluIGEgaGlz dG9ncmFtIG9mIHJhbmdlIGJvdW5kcy4KICAqLwotc3RhdGljIGRvdWJsZQorZG91YmxlCiBjYWxj X2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3Qg UmFuZ2VCb3VuZCAqY29uc3Rib3VuZCwKIAkJCQkJCQkgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdCwg aW50IGhpc3RfbnZhbHVlcywgYm9vbCBlcXVhbCkKIHsKQEAgLTYyNCw3ICs2MDEsNyBAQCBjYWxj X2hpc3Rfc2VsZWN0aXZpdHlfc2NhbGFyKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3Qg UmFuZ2VCb3VuZCAqY29uc3RibwogICogZ29hbCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGZpbmQg YSBoaXN0b2dyYW0gYmluIHdoZXJlIHRvIHN0b3AKICAqIGludGVycG9sYXRpb24gb2YgcG9ydGlv biBvZiBib3VuZHMgd2hpY2ggYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBnaXZlbiBib3VuZC4K ICAqLwotc3RhdGljIGludAoraW50CiByYm91bmRfYnNlYXJjaChUeXBlQ2FjaGVFbnRyeSAqdHlw Y2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVlLCBjb25zdCBSYW5nZUJvdW5kICpoaXN0LAog CQkJICAgaW50IGhpc3RfbGVuZ3RoLCBib29sIGVxdWFsKQogewpAQCAtNjUzLDcgKzYzMCw3IEBA IHJib3VuZF9ic2VhcmNoKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3QgUmFuZ2VCb3Vu ZCAqdmFsdWUsIGNvbnN0IFJhbmdlQm91CiAgKiBhbGwgbGVuZ3RocyBpbiB0aGUgaGlzdG9ncmFt IGFyZSBncmVhdGVyIHRoYW4gKGdyZWF0ZXIgdGhhbiBvciBlcXVhbCkgdGhlCiAgKiBnaXZlbiBs ZW5ndGgsIHJldHVybnMgLTEuCiAgKi8KLXN0YXRpYyBpbnQKK2ludAogbGVuZ3RoX2hpc3RfYnNl YXJjaChjb25zdCBEYXR1bSAqbGVuZ3RoX2hpc3RfdmFsdWVzLCBpbnQgbGVuZ3RoX2hpc3RfbnZh bHVlcywKIAkJCQkJZG91YmxlIHZhbHVlLCBib29sIGVxdWFsKQogewpAQCAtNjc5LDcgKzY1Niw3 IEBAIGxlbmd0aF9oaXN0X2JzZWFyY2goY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywg aW50IGxlbmd0aF9oaXN0X252YWx1ZXMsCiAvKgogICogR2V0IHJlbGF0aXZlIHBvc2l0aW9uIG9m IHZhbHVlIGluIGhpc3RvZ3JhbSBiaW4gaW4gWzAsMV0gcmFuZ2UuCiAgKi8KLXN0YXRpYyBmbG9h dDgKK2Zsb2F0OAogZ2V0X3Bvc2l0aW9uKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwgY29uc3Qg UmFuZ2VCb3VuZCAqdmFsdWUsIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QxLAogCQkJIGNvbnN0IFJh bmdlQm91bmQgKmhpc3QyKQogewpAQCAtNzU4LDcgKzczNSw3IEBAIGdldF9wb3NpdGlvbihUeXBl Q2FjaGVFbnRyeSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKnZhbHVlLCBjb25zdCBSYW5n ZUJvdW5kCiAvKgogICogR2V0IHJlbGF0aXZlIHBvc2l0aW9uIG9mIHZhbHVlIGluIGEgbGVuZ3Ro IGhpc3RvZ3JhbSBiaW4gaW4gWzAsMV0gcmFuZ2UuCiAgKi8KLXN0YXRpYyBkb3VibGUKK2RvdWJs ZQogZ2V0X2xlbl9wb3NpdGlvbihkb3VibGUgdmFsdWUsIGRvdWJsZSBoaXN0MSwgZG91YmxlIGhp c3QyKQogewogCWlmICghaXNpbmYoaGlzdDEpICYmICFpc2luZihoaXN0MikpCkBAIC04MDMsNyAr NzgwLDcgQEAgZ2V0X2xlbl9wb3NpdGlvbihkb3VibGUgdmFsdWUsIGRvdWJsZSBoaXN0MSwgZG91 YmxlIGhpc3QyKQogLyoKICAqIE1lYXN1cmUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcmFuZ2UgYm91 bmRzLgogICovCi1zdGF0aWMgZmxvYXQ4CitmbG9hdDgKIGdldF9kaXN0YW5jZShUeXBlQ2FjaGVF bnRyeSAqdHlwY2FjaGUsIGNvbnN0IFJhbmdlQm91bmQgKmJvdW5kMSwgY29uc3QgUmFuZ2VCb3Vu ZCAqYm91bmQyKQogewogCWJvb2wJCWhhc19zdWJkaWZmID0gT2lkSXNWYWxpZCh0eXBjYWNoZS0+ cm5nX3N1YmRpZmZfZmluZm8uZm5fb2lkKTsKQEAgLTg1MSw3ICs4MjgsNyBAQCBnZXRfZGlzdGFu Y2UoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLCBjb25zdCBSYW5nZUJvdW5kICpib3VuZDEsIGNv bnN0IFJhbmdlQm91bgogICogd2hlcmUgUCh4KSBpcyB0aGUgZnJhY3Rpb24gb2YgdHVwbGVzIHdp dGggbGVuZ3RoIDwgeCAob3IgbGVuZ3RoIDw9IHggaWYKICAqICdlcXVhbCcgaXMgdHJ1ZSkuCiAg Ki8KLXN0YXRpYyBkb3VibGUKK2RvdWJsZQogY2FsY19sZW5ndGhfaGlzdF9mcmFjKGNvbnN0IERh dHVtICpsZW5ndGhfaGlzdF92YWx1ZXMsIGludCBsZW5ndGhfaGlzdF9udmFsdWVzLAogCQkJCQkg IGRvdWJsZSBsZW5ndGgxLCBkb3VibGUgbGVuZ3RoMiwgYm9vbCBlcXVhbCkKIHsKQEAgLTEwMTQs NyArOTkxLDcgQEAgY2FsY19sZW5ndGhfaGlzdF9mcmFjKGNvbnN0IERhdHVtICpsZW5ndGhfaGlz dF92YWx1ZXMsIGludCBsZW5ndGhfaGlzdF9udmFsdWVzLAogICogVGhlIGNhbGxlciBoYXMgYWxy ZWFkeSBjaGVja2VkIHRoYXQgY29uc3RhbnQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBhcmUKICAq IGZpbml0ZS4KICAqLwotc3RhdGljIGRvdWJsZQorZG91YmxlCiBjYWxjX2hpc3Rfc2VsZWN0aXZp dHlfY29udGFpbmVkKFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKIAkJCQkJCQkJY29uc3QgUmFu Z2VCb3VuZCAqbG93ZXIsIFJhbmdlQm91bmQgKnVwcGVyLAogCQkJCQkJCQljb25zdCBSYW5nZUJv dW5kICpoaXN0X2xvd2VyLCBpbnQgaGlzdF9udmFsdWVzLApAQCAtMTEzNSw3ICsxMTEyLDcgQEAg Y2FsY19oaXN0X3NlbGVjdGl2aXR5X2NvbnRhaW5lZChUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUs CiAgKiB0aGUgaGlzdG9ncmFtcyBvZiByYW5nZSBsb3dlciBib3VuZHMgYW5kIHJhbmdlIGxlbmd0 aHMsIG9uIHRoZSBhc3N1bXB0aW9uCiAgKiB0aGF0IHRoZSByYW5nZSBsZW5ndGhzIGFyZSBpbmRl cGVuZGVudCBvZiB0aGUgbG93ZXIgYm91bmRzLgogICovCi1zdGF0aWMgZG91YmxlCitkb3VibGUK IGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9jb250YWlucyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUs CiAJCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAqbG93ZXIsIGNvbnN0IFJhbmdlQm91bmQgKnVw cGVyLAogCQkJCQkJCSAgIGNvbnN0IFJhbmdlQm91bmQgKmhpc3RfbG93ZXIsIGludCBoaXN0X252 YWx1ZXMsCkBAIC0xMjMwLDcgKzEyMDcsNyBAQCBjYWxjX2hpc3Rfc2VsZWN0aXZpdHlfY29udGFp bnMoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAogICogaHR0cHM6Ly9kb2kub3JnLzEwLjQ4NTUw L2FyWGl2LjIyMDYuMDczOTYKICAqCiAgKiBoaXN0MSBhbmQgaGlzdDIgYXJlIGFycmF5cyBvZiBS YW5nZUJvdW5kIGVudHJpZXMgZnJvbSB0aGUgYm91bmRzIGhpc3RvZ3JhbXMKLSAqIG9mIHR3byBy YW5nZS10eXBlZCBhdHRyaWJ1dGVzIFggYW5kIFksIHJlc3BlY3RpdmVseS4gIEVhY2ggYXJyYXkg aGFzIGF0CisgKiBvZiB0d28gcmFuZ2UtIG9yIG11bHRpcmFuZ2UtdHlwZWQgYXR0cmlidXRlcyBY IGFuZCBZLCByZXNwZWN0aXZlbHkuICBFYWNoIGFycmF5IGhhcyBhdAogICogbGVhc3QgMiBlbnRy aWVzIChvbmUgaGlzdG9ncmFtIGJpbikuICBUaGUgZW50cmllcyBjYXJyeSBmdWxsIGJvdW5kIG1l dGFkYXRhCiAgKiAobG93ZXIvdXBwZXIgZmxhZywgaW5jbHVzaXZlL2V4Y2x1c2l2ZSksIGFuZCBh bGwgY29tcGFyaXNvbnMgdXNlCiAgKiByYW5nZV9jbXBfYm91bmRzKCkgc28gdGhhdCBib3VuZCBz ZW1hbnRpY3MgYXJlIHByZXNlcnZlZC4KQEAgLTEyNDUsNyArMTIyMiw3IEBAIGNhbGNfaGlzdF9z ZWxlY3Rpdml0eV9jb250YWlucyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCiAgKiBvdmVybGFw cGluZyByZWdpb24uICBCb3VuZHMgY2hlY2tzIGFyZSByZXF1aXJlZCBiZWNhdXNlIHRoZSBoaXN0 b2dyYW1zIG1heQogICogYmUgY29tcGxldGVseSBkaXNqb2ludCAoZS5nLiwgYWxsIG9mIFggaXMg YmVsb3cgYWxsIG9mIFkpLgogICovCi1zdGF0aWMgZG91YmxlCitkb3VibGUKIGNhbGNfaGlzdF9q b2luX3NlbGVjdGl2aXR5KFR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZSwKIAkJCQkJCSAgIGNvbnN0 IFJhbmdlQm91bmQgKmhpc3QxLCBpbnQgbmhpc3QxLAogCQkJCQkJICAgY29uc3QgUmFuZ2VCb3Vu ZCAqaGlzdDIsIGludCBuaGlzdDIpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zZWxm dW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvc2VsZnVuY3MuaAppbmRleCA4ZDlmZmY5NWExOS4u MWVmYWIzNzBlZmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmgKKysr IGIvc3JjL2luY2x1ZGUvdXRpbHMvc2VsZnVuY3MuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1 ZGUgImFjY2Vzcy9odHVwLmgiCiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm5vZGVzL3Bh dGhub2Rlcy5oIgorI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMuaCIKIAogCiAvKgpAQCAtMjQ4 LDYgKzI0OSw0MSBAQCBleHRlcm4gdm9pZCBnZW5lcmljY29zdGVzdGltYXRlKFBsYW5uZXJJbmZv ICpyb290LCBJbmRleFBhdGggKnBhdGgsCiAJCQkJCQkJCWRvdWJsZSBsb29wX2NvdW50LAogCQkJ CQkJCQlHZW5lcmljQ29zdHMgKmNvc3RzKTsKIAorLyogRnVuY3Rpb25zIGluIHJhbmdldHlwZXNf c2VsZnVuY3MuYyAqLworCitleHRlcm4gZG91YmxlIGNhbGNfaGlzdF9zZWxlY3Rpdml0eV9zY2Fs YXIoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJCQkJCSAgIGNvbnN0IFJhbmdlQm91 bmQgKmNvbnN0Ym91bmQsCisJCQkJCQkJCQkJICAgY29uc3QgUmFuZ2VCb3VuZCAqaGlzdCwgaW50 IGhpc3RfbnZhbHVlcywKKwkJCQkJCQkJCQkgICBib29sIGVxdWFsKTsKK2V4dGVybiBpbnQJcmJv dW5kX2JzZWFyY2goVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJICAgY29uc3QgUmFu Z2VCb3VuZCAqdmFsdWUsIGNvbnN0IFJhbmdlQm91bmQgKmhpc3QsCisJCQkJCQkgICBpbnQgaGlz dF9sZW5ndGgsIGJvb2wgZXF1YWwpOworZXh0ZXJuIGludAlsZW5ndGhfaGlzdF9ic2VhcmNoKGNv bnN0IERhdHVtICpsZW5ndGhfaGlzdF92YWx1ZXMsCisJCQkJCQkJCWludCBsZW5ndGhfaGlzdF9u dmFsdWVzLAorCQkJCQkJCQlkb3VibGUgdmFsdWUsIGJvb2wgZXF1YWwpOworZXh0ZXJuIGZsb2F0 OCBnZXRfcG9zaXRpb24oVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJICAgY29uc3Qg UmFuZ2VCb3VuZCAqdmFsdWUsCisJCQkJCQkgICBjb25zdCBSYW5nZUJvdW5kICpoaXN0MSwgY29u c3QgUmFuZ2VCb3VuZCAqaGlzdDIpOworZXh0ZXJuIGRvdWJsZSBnZXRfbGVuX3Bvc2l0aW9uKGRv dWJsZSB2YWx1ZSwgZG91YmxlIGhpc3QxLCBkb3VibGUgaGlzdDIpOworZXh0ZXJuIGZsb2F0OCBn ZXRfZGlzdGFuY2UoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJICAgY29uc3QgUmFu Z2VCb3VuZCAqYm91bmQxLCBjb25zdCBSYW5nZUJvdW5kICpib3VuZDIpOworZXh0ZXJuIGRvdWJs ZSBjYWxjX2xlbmd0aF9oaXN0X2ZyYWMoY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywK KwkJCQkJCQkJCWludCBsZW5ndGhfaGlzdF9udmFsdWVzLAorCQkJCQkJCQkJZG91YmxlIGxlbmd0 aDEsIGRvdWJsZSBsZW5ndGgyLCBib29sIGVxdWFsKTsKK2V4dGVybiBkb3VibGUgY2FsY19oaXN0 X3NlbGVjdGl2aXR5X2NvbnRhaW5lZChUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCisJCQkJCQkJ CQkJCSAgY29uc3QgUmFuZ2VCb3VuZCAqbG93ZXIsIFJhbmdlQm91bmQgKnVwcGVyLAorCQkJCQkJ CQkJCQkgIGNvbnN0IFJhbmdlQm91bmQgKmhpc3RfbG93ZXIsIGludCBoaXN0X252YWx1ZXMsCisJ CQkJCQkJCQkJCSAgY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywKKwkJCQkJCQkJCQkJ ICBpbnQgbGVuZ3RoX2hpc3RfbnZhbHVlcyk7CitleHRlcm4gZG91YmxlIGNhbGNfaGlzdF9zZWxl Y3Rpdml0eV9jb250YWlucyhUeXBlQ2FjaGVFbnRyeSAqdHlwY2FjaGUsCisJCQkJCQkJCQkJCSBj b25zdCBSYW5nZUJvdW5kICpsb3dlciwgY29uc3QgUmFuZ2VCb3VuZCAqdXBwZXIsCisJCQkJCQkJ CQkJCSBjb25zdCBSYW5nZUJvdW5kICpoaXN0X2xvd2VyLCBpbnQgaGlzdF9udmFsdWVzLAorCQkJ CQkJCQkJCQkgY29uc3QgRGF0dW0gKmxlbmd0aF9oaXN0X3ZhbHVlcywKKwkJCQkJCQkJCQkJIGlu dCBsZW5ndGhfaGlzdF9udmFsdWVzKTsKK2V4dGVybiBkb3VibGUgY2FsY19oaXN0X2pvaW5fc2Vs ZWN0aXZpdHkoVHlwZUNhY2hlRW50cnkgKnR5cGNhY2hlLAorCQkJCQkJCQkJCSBjb25zdCBSYW5n ZUJvdW5kICpoaXN0MSwgaW50IG5oaXN0MSwKKwkJCQkJCQkJCQkgY29uc3QgUmFuZ2VCb3VuZCAq aGlzdDIsIGludCBuaGlzdDIpOworCiAvKiBGdW5jdGlvbnMgaW4gYXJyYXlfc2VsZnVuY3MuYyAq LwogCiBleHRlcm4gU2VsZWN0aXZpdHkgc2NhbGFyYXJyYXlzZWxfY29udGFpbm1lbnQoUGxhbm5l ckluZm8gKnJvb3QsCi0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --_006_DB8P190MB0731FF1A358E9AB16FB1F14FF0252DB8P190MB0731EURP_--