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 1w0I7o-001maF-2m for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 11:53:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0I7n-008p6U-11 for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 11:53:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0I7m-008p6L-2m for pgsql-hackers@lists.postgresql.org; Wed, 11 Mar 2026 11:53:15 +0000 Received: from mail-southcentralusazolkn190110001.outbound.protection.outlook.com ([2a01:111:f403:d10c::1] helo=SN4PR0501CU005.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w0I7k-0000000286X-2Xzc for pgsql-hackers@postgresql.org; Wed, 11 Mar 2026 11:53:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jGsrZh1PkJxoQIIsaXduUghnS+ipHg7SfezoscrEV5Dk8tRcaMtM3iVPneLE7rODffFsU/jI0uYTerESSef+/OyAvN1iKVIK1FZSWWWI8S2yi/Ekssl9NZ6wY3f3YpVrWJD0ielTJxXN/UB7dbqJBDQPqxS/OHYSabGJVZWFTaTNikRvLMAx6WL6+iXQGnWoCogA11h9TterfWml10/r8cFVH2xcCTHKnZ4DvFDf+ifHBvL10VVHAajLruK1NFzRUemsTWH7AR0vGR4kb5T1Oyza/cB/L+Tuctdh0TpXHqsgELWKwI8I5TtLMVxfLBgwWkN3wI9R9OLJ5f7J/8lq/g== 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=C15yZs2x1vLT8XaaY3UytxTiTRNC2T3HiC0DwEVIYDA=; b=JgnZJDbzHkX2rXtezyoiCuKAd2LBA9RqAz/xbzwCxSUPuZnUtHF0znxn/nJO7/wShok7igN0BpvOVifVGTJgSCOWdy2Ydr8eV4afuXEy/7RTj8yTNxBuaISRoNTGa9xd1bAJuW0ilqC2OHl0nxOWZ7MxQ1wIrepytOUvBLnJtxwpZJ3xft+FT7pXdOnbEgpR9cdiVTC4puUkqiBR1wewlvn5an5W8vmT46rjqg89OeKtLh2snkrPg8uCkG4RrV+xvy7W4LmUzqoKkIE9eYIIFJPs0M3blzPW+yBs1Y3aZpU3nk6mZhHJ1ESqikrLE1i3X7cKQBmYT1A9KYRdURtfyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C15yZs2x1vLT8XaaY3UytxTiTRNC2T3HiC0DwEVIYDA=; b=Ilr51JTG4aYfvUbjCY7R6eiJ8rWPM5yv7kpva1FKt4jP1is8WZSGIIl/neuw1DcMbZ0EX/wz47Vyay16t5JssF027PoWL5Sck5OOb/J2JpXphqQ9o0dchxl+wxiH9I6b8J2lnLKo6pf/4rJdkkDhQi6JOUW6MUCsAqEEWcTYTm+zxThr5xxCDOydMKmBTAGVLy1SWf5jKBVBDQK7FRm/w8FAywXrLAXqb/e9iTdiHETNlqyT/MJlSRIIsm4d3Ji0VVg5y/slOmqslcUz2lRotHQlBYufRwlPbrUpWYkL2DlOQxLrs9V7JbesVq9ilaKe3ny7ttQVcej4uf5sOemccg== Received: from SA1PR08MB7023.namprd08.prod.outlook.com (2603:10b6:806:18b::24) by SJ0PR08MB6621.namprd08.prod.outlook.com (2603:10b6:a03:2ac::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.12; Wed, 11 Mar 2026 11:53:08 +0000 Received: from SA1PR08MB7023.namprd08.prod.outlook.com ([fe80::8961:87f9:a70c:a7a]) by SA1PR08MB7023.namprd08.prod.outlook.com ([fe80::8961:87f9:a70c:a7a%4]) with mapi id 15.20.9700.010; Wed, 11 Mar 2026 11:53:08 +0000 From: Boris Mironov To: Madyshev Egor , "Hayato Kuroda (Fujitsu)" , "pgsql-hackers@postgresql.org" Subject: Re: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Topic: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Index: AQHcUwuRPlzLCtdZw06GAdoL15fmHbTwZ0aAgAGpzjGAACRkgIAAEcrGgAQQLgCAAG6d+YAGXmPMgAFzjL6AAV1tS4BpseD8gAEgG5GAAGN+EIAAFWg0gArDj2mAAAeBfoAE2r6AgBXReIKACYuvB4ABsvMggADncVaAAHeCloAEeaRAgAAKHACAAGj/4IAEH5EogAAqmtCAAB2CY4AB1oUwgAFzVZY= Date: Wed, 11 Mar 2026 11:53:07 +0000 Message-ID: References: <408cd5617d954ba1aca99f26b4693fa2@localhost.localdomain> In-Reply-To: <408cd5617d954ba1aca99f26b4693fa2@localhost.localdomain> Accept-Language: en-CA, en-US Content-Language: en-CA X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SA1PR08MB7023:EE_|SJ0PR08MB6621:EE_ x-ms-office365-filtering-correlation-id: 7278e9e8-4cca-45e2-7587-08de7f64c320 x-microsoft-antispam: BCL:0;ARA:14566002|461199028|31061999003|25031999004|37011999003|19110799012|8060799015|8062599012|51005399006|15030799006|15080799012|6092099016|40105399003|440099028|3412199025|102099032; x-microsoft-antispam-message-info: =?iso-8859-1?Q?XGXhuNlbrA/3tXx0TgSGW4Jz2mzF9Afn4yB3iD1oYiBKoQTLSDeAWVURkt?= =?iso-8859-1?Q?wn5GmOLwqEnySv0huUIQsldR6hZviJ3swEMks/KIPtjxIPH8K2fW5tedm1?= =?iso-8859-1?Q?byvgnQrt7c1Zoy7ssXYBvnF3sDzRsKYRiY7LLaMmafBB7wBQpmAutLLNoI?= =?iso-8859-1?Q?0SL10ecPjdGEaCMXzTiXCwGlxbK+iLa/Ct8VAAXbM/Y8hJ8adRILxBgaw3?= =?iso-8859-1?Q?gVPYjzlvwBNlwbPGIMq+OlP+7gSiBYMPu+nyAvhC/KNFdGlcs5+Jhh1/v0?= =?iso-8859-1?Q?9nsFb+N/rUDIbDftGBzqjpPluG0aa3CDAf3+4x0InlLoEZbfK15HpjhWZc?= =?iso-8859-1?Q?3oNLCilYjzGOebwZ67coXYK7gAsYMUhzUjCRLtE3SxyhqexLXMw2Ki8a62?= =?iso-8859-1?Q?DKrDR/WIq1/BmdR3XkQT2N20ygIhdf3MpPqyp/UCN7HLGQfaYfGoM+NnEm?= =?iso-8859-1?Q?bbBcbJ7zpx7D3JxWfebJHv3tDJmtLKsKlMeizZAgv4LMdOfTPsYcP79YYQ?= =?iso-8859-1?Q?v2kwsl3YQUKSPQARJpVAi7fPJPsV1AV4SyDINl/CGG7cBXSPgYMLLMpBoN?= =?iso-8859-1?Q?YPHM1b0jgvAmDAbiUTrS3ZCq8nXSNLsQAqQ/XNgBfe7DeNOtNWvEpfALV7?= =?iso-8859-1?Q?N7i8/1rHsvZBavpA591/H6dfUJdH593cPTyIDdzmaILgVejeQRY4lTVQOe?= =?iso-8859-1?Q?5OEWMv/SFk/8mOc4i1LVeRHRrAGCdnx/pkPQqqT0n2CgVly1ZBclULSKOi?= =?iso-8859-1?Q?hDA4IG3lfOp7nz6s8/Ow7XE8hXEFnn3z8KWOxCwcHHY7NMogXB79KfI6Iw?= =?iso-8859-1?Q?Mita+q1iVYfGoREe/fD/RN+nuSFYhzu7MnJOvGs7In6g3PJ+iA9vv6MYxt?= =?iso-8859-1?Q?wFmNGkukQeqyfomvY6XuhiVVQSdzn5IIj5Afpn9FUpea5Tzt0JCEUfKdhA?= =?iso-8859-1?Q?XoEhCFoFC4BmEbXUBWpAh01zjR7JFOHNshNxxbvdxJOZkuybv9EuXUp8z3?= =?iso-8859-1?Q?QBqDQkB/L3AfcNu43+I4chYi5/Qfta6qA69mlZpur94aSiVb77G4zqKQNe?= =?iso-8859-1?Q?hkTf8r1j9yU3Dva5MwCUKdg=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?mUPObE9NvWoc78jTRSy7BpRMbPxnlmD6Uu0seyxlJBhM0hH85CrYA2+owS?= =?iso-8859-1?Q?1InedaFuHL7vERIxPPHJ9Os6L11lyKeijcQtVtvbwfebFTzCZkZjaqxW4B?= =?iso-8859-1?Q?q6RZy2VopDO97Dio6xTHrtfAugI1UzvAefKM3wqQcMDpnQ6VNkiHFK4FXO?= =?iso-8859-1?Q?L1itaWnbrkpqkJBHPwLrNTKyrK8pzLInfiJFDpK1vq8cSIBjZ7dg2ABu7S?= =?iso-8859-1?Q?RzWPKYVYit3yheseuhkFNBezTVdZCgwNBHdNnBD2jS/AsrQtutDXXNEZGi?= =?iso-8859-1?Q?eS0wwUr3by+CdDeXCg7uH6XHLPxs+zYTK+uwpNud3QtzoHQRcOCKgkgqYR?= =?iso-8859-1?Q?JnRwFzttZO+XsPFRw9lcmZxL0W+sawI50taFYypaikI2s/3V8Cjww+pzNE?= =?iso-8859-1?Q?FOO/y8uv9jXfG0/7qQeWH63JViYwy3zVknCLz3CV0GIgqzIsHUAiJk7Jbg?= =?iso-8859-1?Q?FwCkvkBYA10j9/BEYKZTxK6jUxEex2AHMPHz1LR86vkSw0W1sJe3qxTZhw?= =?iso-8859-1?Q?HuVxG14PETp2uVKos+QSvo7McvXqLgh9hVDWIycYpKGkKTGemHEi0RMEla?= =?iso-8859-1?Q?l8vDLIgyrDlgle214+EdclUFgmQ1bT9v1Sc9TXRnXy4b6uftG1gz4TVn2P?= =?iso-8859-1?Q?wnnKKSIifJgwM/3ISWMRgNEyUUASPRR2px+E8t0JWpZR7O00iW1yuPd2sa?= =?iso-8859-1?Q?lpL1tahUHzRA4H7C9Z58MS1Z5dP795b8raH7d9GuN1m0DgqeU3+At+NtEt?= =?iso-8859-1?Q?ONJxykfnCWaB6Nxw892tOrMUlBykbUtJzgAukBamvry++y0Ey65maxh+JE?= =?iso-8859-1?Q?8iZQImcO4nThUmT1o4CKu9TAkHGwlMJF64YfUZjBuEpcA6uQtRBs5YvIOI?= =?iso-8859-1?Q?lkirT+B+pgyAA7msQiZ9OJ52QqxFrZicnInurivehXuGZsTBaIvCzEKDLm?= =?iso-8859-1?Q?jeNP7q/95ByC98ncxTbGF6cwlAp4f5NEUmvbg91HdwK4h/FC+4mv2wfNM0?= =?iso-8859-1?Q?ypDI6Q5vLBJl449EAuSG2ixhIhyunoN/IWufTWpgQpxExkMcB0IwgBbYXH?= =?iso-8859-1?Q?icXFdFtR4f3Q94Vk6OE68NBHnmYMiKw13FqSDwENsfmshvWuKzoxI9h11l?= =?iso-8859-1?Q?ZLTEFBjdy7fyz4kP54uIRlP4pklENJU6e+XXMza7Zze5GBrfUik5Pd+hBS?= =?iso-8859-1?Q?GW4vH4sEFJjNUbHyqf08kguLb7lr8stx5LLE/PJVaYbZwOUaUzw6+urQ5o?= =?iso-8859-1?Q?hu/M30izDPbgOY6HDz+PDDptqFdnmMgUK21kGYx+jEIH7UifQBU8K+vb+y?= =?iso-8859-1?Q?+A8xq0zX840r9H5bNRN4lk8jo9IyaC22PxUDDc7wOZ4yZRr/HrVWg5/3Ee?= =?iso-8859-1?Q?54YkI/pimPPUEEJpHHBReQQuGhD7dmKnw1lKsDm8lxinTB/EFYLw216lvf?= =?iso-8859-1?Q?/T7nsqAyWpwdGtzJMJHd+oHxCycDLqJREvzpXg=3D=3D?= Content-Type: multipart/mixed; boundary="_004_SA1PR08MB702308B377B110460FCDADA18847ASA1PR08MB7023namp_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SA1PR08MB7023.namprd08.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 7278e9e8-4cca-45e2-7587-08de7f64c320 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Mar 2026 11:53:08.0053 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR08MB6621 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_SA1PR08MB702308B377B110460FCDADA18847ASA1PR08MB7023namp_ Content-Type: multipart/alternative; boundary="_000_SA1PR08MB702308B377B110460FCDADA18847ASA1PR08MB7023namp_" --_000_SA1PR08MB702308B377B110460FCDADA18847ASA1PR08MB7023namp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Egor, > The patch is applied with warnings in the documentation.: > "warning: squelched 1 whitespace error > warning: 6 lines add whitespace errors." v15 of the patch fixes 6 trailing spaces in pgbench.sgml > I've checked everything else is fine for me. Hopefully there is enough time to get into list of accepted changes from this CommitFest. Cheers, Boris --_000_SA1PR08MB702308B377B110460FCDADA18847ASA1PR08MB7023namp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi Egor,

> The patch is applied with warnings in the documentation.:
> "warning: squelched 1 whitespace error
> warning: 6 lines add whitespace errors."

v15 of the patch fixes 6 trailing spaces in pgbench.sgml

> I've checked everything else is fine for me.

Hopefully there is enough time to get into list of accepted changes
from this CommitFest.


Cheers,
Boris
--_000_SA1PR08MB702308B377B110460FCDADA18847ASA1PR08MB7023namp_-- --_004_SA1PR08MB702308B377B110460FCDADA18847ASA1PR08MB7023namp_ Content-Type: application/octet-stream; name="v15-pgbench-faster-modes.patch" Content-Description: v15-pgbench-faster-modes.patch Content-Disposition: attachment; filename="v15-pgbench-faster-modes.patch"; size=45910; creation-date="Wed, 11 Mar 2026 11:47:03 GMT"; modification-date="Wed, 11 Mar 2026 11:47:22 GMT" Content-Transfer-Encoding: base64 RnJvbSBkOWU0ZjUwOTZhZTk1MzBiNjI5NjI5ZmI0N2VjMDhiOTIyODA1NzM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRyYXV0Lm9y Zz4KRGF0ZTogRnJpLCA2IE1hciAyMDI2IDEwOjMxOjM1ICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 MTJdIEFkZGluZyBuZXcgaW5pdCBtb2RlcyB0byBwZ2JlbmNoIGluY2x1ZGluZyBDT1BZIEZST00K IEJJTkFSWSBhcyB3ZWxsIGFzIHBvcHVsYXRpbmcgZGF0YSBpbiBtdWx0aXBsZSB0cmFuc2FjdGlv bnMKCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwgICAgICAgICAgICAgICAgfCAg OTAgKystCiBzcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jICAgICAgICAgICAgICAgICAgICB8IDgw MiArKysrKysrKysrKysrKysrLS0tCiBzcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRo X3NlcnZlci5wbCB8IDIzNiArKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgOTc4IGluc2VydGlvbnMo KyksIDE1MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sCmluZGV4IDJlNDAxZDFjZWI4 Li4yMGY0MWYzMzJhNSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwKQEAgLTIxNyw0MSArMjE3LDkzIEBA IHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFibGU+IDwv b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICA8 L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICAgICA8dmFybGlzdGVu dHJ5IGlkPSJwZ2JlbmNoLW9wdGlvbi1pbml0LXN0ZXBzLWciPgotICAgICAgICAgIDx0ZXJtPjxs aXRlcmFsPmc8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkc8L2xpdGVyYWw+IChHZW5lcmF0ZSBkYXRh LCBjbGllbnQtc2lkZSBvciBzZXJ2ZXItc2lkZSk8L3Rlcm0+CisKKyAgICAgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9InBnYmVuY2gtb3B0aW9uLWluaXQtc3RlcHMtY2xpZW50Ij4KKyAgICAgICAgICA8 dGVybT48bGl0ZXJhbD5nPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5jPC9saXRlcmFsPiAoR2VuZXJh dGUgZGF0YSwgY2xpZW50LXNpZGUpPC90ZXJtPgogICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAg ICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBHZW5lcmF0ZSBkYXRhIGFuZCBsb2FkIGl0IGludG8g dGhlIHN0YW5kYXJkIHRhYmxlcywKLSAgICAgICAgICAgIHJlcGxhY2luZyBhbnkgZGF0YSBhbHJl YWR5IHByZXNlbnQuCi0gICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgPHBhcmE+Ci0gICAg ICAgICAgICBXaXRoIDxsaXRlcmFsPmc8L2xpdGVyYWw+IChjbGllbnQtc2lkZSBkYXRhIGdlbmVy YXRpb24pLAotICAgICAgICAgICAgZGF0YSBpcyBnZW5lcmF0ZWQgaW4gPGNvbW1hbmQ+cGdiZW5j aDwvY29tbWFuZD4gY2xpZW50IGFuZCB0aGVuCi0gICAgICAgICAgICBzZW50IHRvIHRoZSBzZXJ2 ZXIuIFRoaXMgdXNlcyB0aGUgY2xpZW50L3NlcnZlciBiYW5kd2lkdGgKKyAgICAgICAgICAgIEdl bmVyYXRlIGRhdGEgYW5kIGxvYWQgaXQgaW50byB0aGUgc3RhbmRhcmQgdGFibGVzIHVzaW5nIGNs aWVudC1zaWRlCisgICAgICAgICAgICBnZW5lcmF0aW9uLiBEYXRhIGlzIGdlbmVyYXRlZCBpbiB0 aGUgPGNvbW1hbmQ+cGdiZW5jaDwvY29tbWFuZD4gY2xpZW50CisgICAgICAgICAgICBhbmQgdGhl biBzZW50IHRvIHRoZSBzZXJ2ZXIuIFRoaXMgdXNlcyB0aGUgY2xpZW50L3NlcnZlciBiYW5kd2lk dGgKICAgICAgICAgICAgIGV4dGVuc2l2ZWx5IHRocm91Z2ggYSA8Y29tbWFuZD5DT1BZPC9jb21t YW5kPi4KICAgICAgICAgICAgIDxjb21tYW5kPnBnYmVuY2g8L2NvbW1hbmQ+IHVzZXMgdGhlIDxv cHRpb24+RlJFRVpFPC9vcHRpb24+IG9wdGlvbgogICAgICAgICAgICAgdG8gbG9hZCBkYXRhIGlu dG8gb3JkaW5hcnkgKG5vbi1wYXJ0aXRpb24pIHRhYmxlcyB3aXRoIHZlcnNpb24gMTQKICAgICAg ICAgICAgIG9yIGxhdGVyIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g dG8gc3BlZWQgdXAKLSAgICAgICAgICAgIHN1YnNlcXVlbnQgPGNvbW1hbmQ+VkFDVVVNPC9jb21t YW5kPi4KLSAgICAgICAgICAgIFVzaW5nIDxsaXRlcmFsPmc8L2xpdGVyYWw+IGNhdXNlcyBsb2dn aW5nIHRvCi0gICAgICAgICAgICBwcmludCBvbmUgbWVzc2FnZSBldmVyeSAxMDAsMDAwIHJvd3Mg d2hpbGUgZ2VuZXJhdGluZyBkYXRhIGZvciBhbGwKLSAgICAgICAgICAgIHRhYmxlcy4KKyAgICAg ICAgICAgIHN1YnNlcXVlbnQgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4gVXNpbmcgPGxpdGVy YWw+ZzwvbGl0ZXJhbD4KKyAgICAgICAgICAgIG9yIDxsaXRlcmFsPmM8L2xpdGVyYWw+IGNhdXNl cyBsb2dnaW5nIHRvIHByaW50IG9uZSBtZXNzYWdlCisgICAgICAgICAgICBldmVyeSAxMDAsMDAw IHJvd3Mgd2hpbGUgZ2VuZXJhdGluZyBkYXRhIGZvciBhbGwgdGFibGVzLgorICAgICAgICAgICA8 L3BhcmE+CisgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2l0aCA8bGl0ZXJhbD5nPC9s aXRlcmFsPiAodGV4dCBmb3JtYXQpLCB0aGUgY2xpZW50IHNlbmRzIGRhdGEgaW4KKyAgICAgICAg ICAgIDxjb21tYW5kPkNPUFkgLi4uIEZST00gU1RESU4gKEZPUk1BVCBURVhUKTwvY29tbWFuZD4u CisgICAgICAgICAgICBUaGlzIGlzIGRlZmF1bHQgbW9kZSBmb3IgZGF0YSBpbml0aWFsaXphdGlv bi4KKyAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdp dGggPGxpdGVyYWw+YzwvbGl0ZXJhbD4gKGJpbmFyeSBmb3JtYXQpLCB0aGUgY2xpZW50IHNlbmRz IGRhdGEgdXNpbmcKKyAgICAgICAgICAgIDxjb21tYW5kPkNPUFkgLi4uIEZST00gU1RESU4gKEZP Uk1BVCBCSU5BUlkpPC9jb21tYW5kPi4gQmluYXJ5IHRyYW5zZmVyCisgICAgICAgICAgICBjYW4g YmUgZmFzdGVyIHRoYW4gdGV4dCwgYnV0IG1heSBiZSBsZXNzIHBvcnRhYmxlIGFjcm9zcyBkaWZm ZXJlbnQKKyAgICAgICAgICAgIHZlcnNpb25zIG9yIHBsYXRmb3Jtcy4KICAgICAgICAgICAgPC9w YXJhPgogICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdpdGggPGxpdGVyYWw+RzwvbGl0 ZXJhbD4gKHNlcnZlci1zaWRlIGRhdGEgZ2VuZXJhdGlvbiksCisgICAgICAgICAgICBUaGUgZGVm YXVsdCBpbml0aWFsaXphdGlvbiBiZWhhdmlvciB1c2VzIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJh dGlvbgorICAgICAgICAgICAgd2l0aCB0ZXh0IGZvcm1hdCAoZXF1aXZhbGVudCB0byA8bGl0ZXJh bD5nPC9saXRlcmFsPikuCisgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVt PgorICAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 InBnYmVuY2gtb3B0aW9uLWluaXQtc3RlcHMtc2VydmVyIj4KKyAgICAgICAgICA8dGVybT48bGl0 ZXJhbD5HPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5VPC9saXRlcmFsPiAoR2VuZXJhdGUgZGF0YSwg c2VydmVyLXNpZGUpPC90ZXJtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgPHBh cmE+CisgICAgICAgICAgICBXaXRoIDxsaXRlcmFsPkc8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPlU8 L2xpdGVyYWw+IChzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24pLAogICAgICAgICAgICAgb25s eSBzbWFsbCBxdWVyaWVzIGFyZSBzZW50IGZyb20gdGhlIDxjb21tYW5kPnBnYmVuY2g8L2NvbW1h bmQ+CiAgICAgICAgICAgICBjbGllbnQgYW5kIHRoZW4gZGF0YSBpcyBhY3R1YWxseSBnZW5lcmF0 ZWQgaW4gdGhlIHNlcnZlci4KICAgICAgICAgICAgIE5vIHNpZ25pZmljYW50IGJhbmR3aWR0aCBp cyByZXF1aXJlZCBmb3IgdGhpcyB2YXJpYW50LCBidXQKICAgICAgICAgICAgIHRoZSBzZXJ2ZXIg d2lsbCBkbyBtb3JlIHdvcmsuCi0gICAgICAgICAgICBVc2luZyA8bGl0ZXJhbD5HPC9saXRlcmFs PiBjYXVzZXMgbG9nZ2luZyBub3QgdG8gcHJpbnQgYW55IHByb2dyZXNzCi0gICAgICAgICAgICBt ZXNzYWdlIHdoaWxlIGdlbmVyYXRpbmcgZGF0YS4KKyAgICAgICAgICAgIFVzaW5nIDxsaXRlcmFs Pkc8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPlU8L2xpdGVyYWw+IGNhdXNlcyBsb2dnaW5nIG5vdCB0 byBwcmludAorICAgICAgICAgICAgYW55IHByb2dyZXNzIG1lc3NhZ2Ugd2hpbGUgZ2VuZXJhdGlu ZyBkYXRhLgorICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgIDxwYXJhPgorICAgICAgICAg ICAgV2l0aCA8bGl0ZXJhbD5HPC9saXRlcmFsPiwgdGhlIHNlcnZlciB1c2VzIDxsaXRlcmFsPklO U0VSVCAuLi4KKyAgICAgICAgICAgIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoLi4uKTwvbGl0ZXJh bD4gdG8gcHJvZHVjZSB0aGUgcm93cy4gVGhpcyBtZXRob2QKKyAgICAgICAgICAgIGlzIHNpbXBs ZSBhbmQgd2lkZWx5IHVzZWQuCisgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgPHBhcmE+ CisgICAgICAgICAgICBXaXRoIDxsaXRlcmFsPlU8L2xpdGVyYWw+LCB0aGUgc2VydmVyIHVzZXMg PGxpdGVyYWw+SU5TRVJUIC4uLgorICAgICAgICAgICAgU0VMRUNUIHVubmVzdCguLi4pPC9saXRl cmFsPiB0byBleHBhbmQgYXJyYXlzIG9mIGdlbmVyYXRlZCB2YWx1ZXMuIFRoaXMgY2FuCisgICAg ICAgICAgICBiZSBtb3JlIGVmZmljaWVudCB3aGVuIG11bHRpcGxlIGNvbHVtbnMgYXJlIGdlbmVy YXRlZCB0b2dldGhlciBmb3IgY29sdW1uLWJhc2VkCisgICAgICAgICAgICB0YWJsZSwgYXMgdGhl IHdvcmsgaXMgZG9uZSBpbiBhIHNpbmdsZSBzY2FuLgorICAgICAgICAgICA8L3BhcmE+CisgICAg ICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICA8 dmFybGlzdGVudHJ5IGlkPSJwZ2JlbmNoLW9wdGlvbi1pbml0LXN0ZXBzLXRyYW5zYWN0aW9uLW1v ZGUiPgorICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPlM8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPk08 L2xpdGVyYWw+IChUcmFuc2FjdGlvbiBtb2RlIGZvciBpbml0aWFsaXphdGlvbik8L3Rlcm0+Cisg ICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNwZWNp ZmllcyB3aGV0aGVyIHRoZSBpbml0aWFsaXphdGlvbiBzdGVwcyBhcmUgcGVyZm9ybWVkIGluIGEg c2luZ2xlCisgICAgICAgICAgICB0cmFuc2FjdGlvbiBvciBpbiBtdWx0aXBsZSB0cmFuc2FjdGlv bnMuCisgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBX aXRoIDxsaXRlcmFsPlM8L2xpdGVyYWw+IChzaW5nbGUgdHJhbnNhY3Rpb24pLCBhbGwgZGF0YSBn ZW5lcmF0aW9uCisgICAgICAgICAgICBhcmUgZXhlY3V0ZWQgd2l0aGluIG9uZSB0cmFuc2FjdGlv bi4gVGhpcyBpcyB0aGUgZGVmYXVsdAorICAgICAgICAgICAgYmVoYXZpb3IuIFVzaW5nIGEgc2lu Z2xlIHRyYW5zYWN0aW9uIGFsbG93cyB0aGUgdXNlIG9mIHRoZQorICAgICAgICAgICAgPG9wdGlv bj5GUkVFWkU8L29wdGlvbj4gb3B0aW9uIHdpdGggY2xpZW50LXNpZGUgPGNvbW1hbmQ+Q09QWTwv Y29tbWFuZD4uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAg ICAgICBUaGUgZGVmYXVsdCBpbml0aWFsaXphdGlvbiBiZWhhdmlvciB1c2VzIGNsaWVudC1zaWRl IGRhdGEKLSAgICAgICAgICAgIGdlbmVyYXRpb24gKGVxdWl2YWxlbnQgdG8gPGxpdGVyYWw+Zzwv bGl0ZXJhbD4pLgorICAgICAgICAgICAgV2l0aCA8bGl0ZXJhbD5NPC9saXRlcmFsPiAobXVsdGlw bGUgdHJhbnNhY3Rpb25zKSwgZGF0YSBmb3IgZWFjaCBzY2FsZSBmYWN0b3IKKyAgICAgICAgICAg IHVuaXQgKGUuZy4sIGZvciBlYWNoIGluY3JlbWVudCBvZiA8b3B0aW9uPi0tc2NhbGU9PC9vcHRp b24+KSBpcyBsb2FkZWQgaW4gYQorICAgICAgICAgICAgc2VwYXJhdGUgdHJhbnNhY3Rpb24uIEZv ciBleGFtcGxlLCBpZiB5b3Ugc2V0IDxvcHRpb24+LS1zY2FsZT0yMDwvb3B0aW9uPgorICAgICAg ICAgICAgZGF0YSB3aWxsIGJlIGFkZGVkIHRvIHRocmVlIG1haW4gdGFibGVzIGluIDIwIHNlcGFy YXRlIHRyYW5zYWN0aW9ucy4KKyAgICAgICAgICAgIEluIHRoaXMgbW9kZSwgdGhlIDxvcHRpb24+ RlJFRVpFPC9vcHRpb24+IG9wdGlvbgorICAgICAgICAgICAgY2Fubm90IGJlIHVzZWQgd2l0aCBj bGllbnQtc2lkZSA8Y29tbWFuZD5DT1BZPC9jb21tYW5kPi4KKyAgICAgICAgICAgIFVzaW5nIG11 bHRpcGxlIHRyYW5zYWN0aW9ucyBjYW4gc3BlZWQgdXAgZGF0YSBnZW5lcmF0aW9uIGJ5CisgICAg ICAgICAgICBjb21taXR0aW5nIGRhdGEgaW4gc21hbGxlciBiYXRjaGVzLCB3aGljaCBtYXkgcmVk dWNlIHRoZSBvdmVyaGVhZCBvZiBhCisgICAgICAgICAgICBzaW5nbGUgaHVnZSB0cmFuc2FjdGlv biwgYnV0IGFsc28gYWRkcyBwZXItdHJhbnNhY3Rpb24gY29tbWl0IGNvc3RzLgogICAgICAgICAg ICA8L3BhcmE+CiAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5 PgorCiAgICAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJwZ2JlbmNoLW9wdGlvbi1pbml0LXN0ZXBz LXYiPgogICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnY8L2xpdGVyYWw+IChWYWN1dW0pPC90ZXJt PgogICAgICAgICAgIDxsaXN0aXRlbT4KQEAgLTI2MCw2ICszMTIsNyBAQCBwZ2JlbmNoIDxvcHRp b25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8cmVw bGFjZWFibGU+ZAogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgPC9saXN0aXRlbT4KICAg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJwZ2Jl bmNoLW9wdGlvbi1pbml0LXN0ZXBzLXAiPgogICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xp dGVyYWw+IChjcmVhdGUgUHJpbWFyeSBrZXlzKTwvdGVybT4KICAgICAgICAgICA8bGlzdGl0ZW0+ CkBAIC0yNjgsNiArMzIxLDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRp b25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmQKICAgICAgICAgICAg PC9wYXJhPgogICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4K KwogICAgICAgICAgPHZhcmxpc3RlbnRyeSBpZD0icGdiZW5jaC1vcHRpb24taW5pdC1zdGVwcy1m Ij4KICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmY8L2xpdGVyYWw+IChjcmVhdGUgRm9yZWlnbiBr ZXlzKTwvdGVybT4KICAgICAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn YmVuY2gvcGdiZW5jaC5jIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCAxZGFlOTE4 Y2MwOS4uNDhmMjk1MGUyNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMK KysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtMTU5LDE4ICsxNTksMzYgQEAgdHlw ZWRlZiBzdHJ1Y3Qgc29ja2V0X3NldAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHNvbWUgY29uZmlndXJh YmxlIHBhcmFtZXRlcnMgKi8KLQogI2RlZmluZSBERUZBVUxUX0lOSVRfU1RFUFMgImR0Z3ZwIgkv KiBkZWZhdWx0IC1JIHNldHRpbmcgKi8KLSNkZWZpbmUgQUxMX0lOSVRfU1RFUFMgImR0Z0d2cGYi CS8qIGFsbCBwb3NzaWJsZSBzdGVwcyAqLworI2RlZmluZSBBTExfSU5JVF9TVEVQUyAiZHRNU2Nn R1V2cGYiCS8qIGFsbCBwb3NzaWJsZSBzdGVwcyAqLwogCiAjZGVmaW5lIExPR19TVEVQX1NFQ09O RFMJNQkvKiBzZWNvbmRzIGJldHdlZW4gbG9nIG1lc3NhZ2VzICovCi0jZGVmaW5lIERFRkFVTFRf TlhBQ1RTCTEwCQkvKiBkZWZhdWx0IG54YWN0cyAqLworI2RlZmluZSBERUZBVUxUX05YQUNUUwkJ MTAJLyogZGVmYXVsdCBueGFjdHMgKi8KIAogI2RlZmluZSBNSU5fR0FVU1NJQU5fUEFSQU0JCTIu MCAvKiBtaW5pbXVtIHBhcmFtZXRlciBmb3IgZ2F1c3MgKi8KIAogI2RlZmluZSBNSU5fWklQRklB Tl9QQVJBTQkJMS4wMDEJLyogbWluaW11bSBwYXJhbWV0ZXIgZm9yIHppcGZpYW4gKi8KICNkZWZp bmUgTUFYX1pJUEZJQU5fUEFSQU0JCTEwMDAuMAkvKiBtYXhpbXVtIHBhcmFtZXRlciBmb3Igemlw ZmlhbiAqLwogCisvKiBzZXJ2ZXItc2lkZSBtZXRob2RzIHRvIGdlbmVyYXRlIGRhdGEgKi8KKyNk ZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX0lOU0VSVF9TRVJJRVMJJ0cnIC8qIHVzZSBJTlNFUlQg Li4gU0VMRUNUCisJCQkJCQkJCQkJCQkgKiBnZW5lcmF0ZV9zZXJpZXMgdG8gZ2VuZXJhdGUKKwkJ CQkJCQkJCQkJCSAqIGRhdGEgKi8KKyNkZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX0lOU0VSVF9V Tk5FU1QJJ1UnIC8qIHVzZSBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdAorCQkJCQkJCQkJCQkJICog dG8gZ2VuZXJhdGUgZGF0YSAqLworLyogY2xpZW50LXNpZGUgbWV0aG9kcyB0byBnZW5lcmF0ZSBk YXRhICovCisjZGVmaW5lIElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX1RFWFQJCSdnJyAvKiB1c2Ug Q09QWSAuLiBGUk9NIFNURElOIC4uCisJCQkJCQkJCQkJCQkgKiBURVhUIHRvIGdlbmVyYXRlIGRh dGEgKi8KKyNkZWZpbmUgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfQklOQVJZCQknYycgLyogdXNl IENPUFkgLi4gRlJPTSBTVERJTiAuLgorCQkJCQkJCQkJCQkJICogQklOQVJZIHRvIGdlbmVyYXRl IGRhdGEgKi8KKy8qIGRhdGEgaW5pdCBwc2V1ZG8gc3RlcHMgKi8KKyNkZWZpbmUgSU5JVF9TVEVQ X0dFTl9UWVBFX1NJTkdMRV9YQUNUCQknUycgLyogc3dpdGNoIHRvIGluaXQgZGF0YSBhcworCQkJ CQkJCQkJCQkJICogc2luZ2xlIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIElOSVRfU1RFUF9HRU5f VFlQRV9NVUxUSV9YQUNUCQknTScgLyogc3dpdGNoIHRvIGluaXQgZGF0YSBhcworCQkJCQkJCQkJ CQkJICogbXVsdGlwbGUgdHJhbnNhY3Rpb25zICovCisKK3N0YXRpYyBib29sIG11bHRpX3hhY3Qg PSBmYWxzZTsgLyogaW5pdCBkYXRhIHR5cGUgKGFzIHNpbmdsZSBvciBtdWx0aXBsZQorCQkJCQkJ CQkgKiB0cmFuc2FjdGlvbnMpICovCiBzdGF0aWMgaW50CW54YWN0cyA9IDA7CQkJLyogbnVtYmVy IG9mIHRyYW5zYWN0aW9ucyBwZXIgY2xpZW50ICovCiBzdGF0aWMgaW50CWR1cmF0aW9uID0gMDsJ CS8qIGR1cmF0aW9uIGluIHNlY29uZHMgKi8KIHN0YXRpYyBpbnQ2NCBlbmRfdGltZSA9IDA7CQkv KiB3aGVuIHRvIHN0b3AgaW4gbWljcm8gc2Vjb25kcywgdW5kZXIgLVQgKi8KQEAgLTE4MSw2ICsx OTksMTkgQEAgc3RhdGljIGludDY0IGVuZF90aW1lID0gMDsJCS8qIHdoZW4gdG8gc3RvcCBpbiBt aWNybyBzZWNvbmRzLCB1bmRlciAtVCAqLwogICovCiBzdGF0aWMgaW50CXNjYWxlID0gMTsKIAor LyoKKyAqIG1vZGUgb2YgZGF0YSBnZW5lcmF0aW9uIHRvIHVzZQorICovCitzdGF0aWMgY2hhciBk YXRhX2dlbmVyYXRpb25fdHlwZSA9IElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX1RFWFQ7CisKKy8q CisgKiBDT1BZIEZST00gQklOQVJZIGV4ZWN1dGlvbiBidWZmZXIKKyAqLworI2RlZmluZSBCSU5f Q09QWV9CVUZfU0laRQkxMDI0MDAJLyogbWF4aW11bSBidWZmZXIgc2l6ZSBmb3IgQ09QWSBGUk9N CisJCQkJCQkJCQkgKiBCSU5BUlkgKi8KK3N0YXRpYyBjaGFyICpiaW5fY29weV9idWZmZXIgPSBO VUxMOwkvKiBidWZmZXIgZm9yIENPUFkgRlJPTSBCSU5BUlkgKi8KK3N0YXRpYyBpbnQzMl90IGJp bl9jb3B5X2J1ZmZlcl9sZW5ndGggPSAwOwkvKiBjdXJyZW50IGJ1ZmZlciBzaXplICovCisKIC8q CiAgKiBmaWxsZmFjdG9yLiBmb3IgZXhhbXBsZSwgZmlsbGZhY3RvciA9IDkwIHdpbGwgdXNlIG9u bHkgOTAgcGVyY2VudAogICogc3BhY2UgZHVyaW5nIGluc2VydHMgYW5kIGxlYXZlIDEwIHBlcmNl bnQgZnJlZS4KQEAgLTQ1Niw2ICs0ODcsOSBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0c0RhdGEKICAq Lwogc3RhdGljIHBnX3RpbWVfdXNlY190IGVwb2NoX3NoaWZ0OwogCisvKiB1c2VkIHRvIHRyYWNr IGVsYXBzZWQgdGltZSBhbmQgZXN0aW1hdGUgb2YgdGhlIHJlbWFpbmluZyB0aW1lIG9mIGRhdGEg bG9hZCAqLworc3RhdGljIHBnX3RpbWVfdXNlY190IGRhdGFfbG9hZF9zdGFydDsKKwogLyoKICAq IEVycm9yIHN0YXR1cyBmb3IgZXJyb3JzIGR1cmluZyBzY3JpcHQgZXhlY3V0aW9uLgogICovCkBA IC04NTEsNiArODg1LDcgQEAgc3RhdGljIGJvb2wgc29ja2V0X2hhc19pbnB1dChzb2NrZXRfc2V0 ICpzYSwgaW50IGZkLCBpbnQgaWR4KTsKIAogLyogY2FsbGJhY2sgdXNlZCB0byBidWlsZCByb3dz IGZvciBDT1BZIGR1cmluZyBkYXRhIGxvYWRpbmcgKi8KIHR5cGVkZWYgdm9pZCAoKmluaXRSb3dN ZXRob2QpIChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3Vycik7Cit0eXBlZGVmIHZvaWQg KCppbml0Um93TWV0aG9kQmluYXJ5KSAoUEdjb25uICpjb24sIGludDY0X3QgY3VyciwgaW50MzJf dCBwYXJlbnQpOwogCiAvKiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIG91ciBmbGV4IGxleGVyICov CiBzdGF0aWMgY29uc3QgUHNxbFNjYW5DYWxsYmFja3MgcGdiZW5jaF9jYWxsYmFja3MgPSB7CkBA IC05MTMsOCArOTQ4LDE0IEBAIHVzYWdlKHZvaWQpCiAJCSAgICIgICAgICAgICAgICAgICAgICAg ICAgICAgICBydW4gc2VsZWN0ZWQgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGluIHRoZSBzcGVjaWZp ZWQgb3JkZXJcbiIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IGRyb3AgYW55 IGV4aXN0aW5nIHBnYmVuY2ggdGFibGVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAg ICAgICB0OiBjcmVhdGUgdGhlIHRhYmxlcyB1c2VkIGJ5IHRoZSBzdGFuZGFyZCBwZ2JlbmNoIHNj ZW5hcmlvXG4iCi0JCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiBnZW5lcmF0ZSBk YXRhLCBjbGllbnQtc2lkZVxuIgotCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgRzog Z2VuZXJhdGUgZGF0YSwgc2VydmVyLXNpZGVcbiIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRvIGdlbmVyYXRlIGRhdGEsIGNsaWVudC1zaWRlOlxuIgorCQkgICAiICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnOiAgIENPUFkgLi4gRlJPTSBTVERJTiAuLiBURVhUXG4iCisJ CSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6ICAgQ09QWSAuLiBGUk9NIFNURElO IC4uIEJJTkFSWVxuIgorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2VuZXJh dGUgZGF0YSwgc2VydmVyLXNpZGU6XG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEc6ICAgSU5TRVJUIC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXNcbiIKKwkJICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVTogICBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdFxuIgor CQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgUzogZmxhZyB0byB1c2Ugc2luZ2xlIHRy YW5zYWN0aW9uIHRvIGluaXRpYWxpemUgZGF0YVxuIgorCQkgICAiICAgICAgICAgICAgICAgICAg ICAgICAgICAgTTogZmxhZyB0byB1c2UgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIHRvIGluaXRpYWxp emUgZGF0YVxuIgogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogaW52b2tlIFZB Q1VVTSBvbiB0aGUgc3RhbmRhcmQgdGFibGVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAg ICAgICAgICBwOiBjcmVhdGUgcHJpbWFyeSBrZXkgaW5kZXhlcyBvbiB0aGUgc3RhbmRhcmQgdGFi bGVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiBjcmVhdGUgZm9yZWln biBrZXlzIGJldHdlZW4gdGhlIHN0YW5kYXJkIHRhYmxlc1xuIgpAQCAtNDkxNiw4ICs0OTU3LDgg QEAgaW5pdENyZWF0ZVRhYmxlcyhQR2Nvbm4gKmNvbikKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGRk bGluZm8gRERMc1tdID0gewogCQl7CiAJCQkicGdiZW5jaF9oaXN0b3J5IiwKLQkJCSJ0aWQgaW50 LGJpZCBpbnQsYWlkICAgIGludCxkZWx0YSBpbnQsbXRpbWUgdGltZXN0YW1wLGZpbGxlciBjaGFy KDIyKSIsCi0JCQkidGlkIGludCxiaWQgaW50LGFpZCBiaWdpbnQsZGVsdGEgaW50LG10aW1lIHRp bWVzdGFtcCxmaWxsZXIgY2hhcigyMikiLAorCQkJInRpZCBpbnQsYmlkIGludCxhaWQgICAgaW50 LGRlbHRhIGludCxtdGltZSB0aW1lc3RhbXAsZmlsbGVyIGNoYXIoMjIpIGRlZmF1bHQgJyciLAor CQkJInRpZCBpbnQsYmlkIGludCxhaWQgYmlnaW50LGRlbHRhIGludCxtdGltZSB0aW1lc3RhbXAs ZmlsbGVyIGNoYXIoMjIpIGRlZmF1bHQgJyciLAogCQkJMAogCQl9LAogCQl7CkBAIC00OTI4LDgg KzQ5NjksOCBAQCBpbml0Q3JlYXRlVGFibGVzKFBHY29ubiAqY29uKQogCQl9LAogCQl7CiAJCQki cGdiZW5jaF9hY2NvdW50cyIsCi0JCQkiYWlkICAgIGludCBub3QgbnVsbCxiaWQgaW50LGFiYWxh bmNlIGludCxmaWxsZXIgY2hhcig4NCkiLAotCQkJImFpZCBiaWdpbnQgbm90IG51bGwsYmlkIGlu dCxhYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODQpIiwKKwkJCSJhaWQgICAgaW50IG5vdCBudWxs LGJpZCBpbnQsYWJhbGFuY2UgaW50LGZpbGxlciBjaGFyKDg0KSBkZWZhdWx0ICcnIiwKKwkJCSJh aWQgYmlnaW50IG5vdCBudWxsLGJpZCBpbnQsYWJhbGFuY2UgaW50LGZpbGxlciBjaGFyKDg0KSBk ZWZhdWx0ICcnIiwKIAkJCTEKIAkJfSwKIAkJewpAQCAtNTAyNSwzMSArNTA2Niw4OSBAQCBpbml0 QWNjb3VudChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3VycikKIH0KIAogc3RhdGljIHZv aWQKLWluaXRQb3B1bGF0ZVRhYmxlKFBHY29ubiAqY29uLCBjb25zdCBjaGFyICp0YWJsZSwgaW50 NjQgYmFzZSwKLQkJCQkgIGluaXRSb3dNZXRob2QgaW5pdF9yb3cpCitzaG93UG9wdWxhdGVUYWJs ZUNvcHlQcm9ncmVzcyhjb25zdCBjaGFyICp0YWJsZSwgaW50NjQgY3VycmVudCwgaW50NjQgdG90 YWwpCit7CisJc3RhdGljIGludAljaGFycyA9IDA7CisJc3RhdGljIGludAlwcmV2X2NoYXJzID0g MDsKKwlzdGF0aWMgaW50CWxvZ19pbnRlcnZhbCA9IDE7CisKKwkvKiBTdGF5IG9uIHRoZSBzYW1l IGxpbmUgaWYgcmVwb3J0aW5nIHRvIGEgdGVybWluYWwgKi8KKwljaGFyCQllb2wgPSBpc2F0dHko ZmlsZW5vKHN0ZGVycikpID8gJ1xyJyA6ICdcbic7CisKKwlkb3VibGUJCWVsYXBzZWRfc2VjID0g UEdfVElNRV9HRVRfRE9VQkxFKHBnX3RpbWVfbm93KCkgLSBkYXRhX2xvYWRfc3RhcnQpOworCWRv dWJsZQkJcmVtYWluaW5nX3NlYyA9ICgoZG91YmxlKSB0b3RhbCAtIGN1cnJlbnQpICogZWxhcHNl ZF9zZWMgLyBjdXJyZW50OworCisJLyoKKwkgKiBJZiB3ZSB3YW50IHRvIHN0aWNrIHdpdGggdGhl IG9yaWdpbmFsIGxvZ2dpbmcsIHByaW50IGEgbWVzc2FnZSBlYWNoCisJICogMTAwayBpbnNlcnRl ZCByb3dzLgorCSAqLworCWlmICgoIXVzZV9xdWlldCkgJiYgKGN1cnJlbnQgJSAxMDAwMDAgPT0g MCkpCisJeworCQljaGFycyA9IGZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElO VDY0X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgb2YgJXMgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJl bWFpbmluZyAlLjJmIHMpIiwKKwkJCQkJCWN1cnJlbnQsIHRvdGFsLAorCQkJCQkJKGludCkgKChj dXJyZW50ICogMTAwKSAvIHRvdGFsKSwKKwkJCQkJCXRhYmxlLCBlbGFwc2VkX3NlYywgcmVtYWlu aW5nX3NlYyk7CisKKwkJLyoKKwkJICogSWYgdGhlIHByZXZpb3VzIHByb2dyZXNzIG1lc3NhZ2Ug aXMgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQgb25lLAorCQkgKiBhZGQgc3BhY2VzIHRvIHRoZSBj dXJyZW50IGxpbmUgdG8gZnVsbHkgb3ZlcndyaXRlIGFueSByZW1haW5pbmcKKwkJICogY2hhcmFj dGVycyBmcm9tIHRoZSBwcmV2aW91cyBtZXNzYWdlLgorCQkgKi8KKwkJaWYgKHByZXZfY2hhcnMg PiBjaGFycykKKwkJCWZwcmludGYoc3RkZXJyLCAiJSpjIiwgcHJldl9jaGFycyAtIGNoYXJzLCAn ICcpOworCQlmcHV0Yyhlb2wsIHN0ZGVycik7CisJCXByZXZfY2hhcnMgPSBjaGFyczsKKwl9CisJ LyogbGV0J3Mgbm90IGNhbGwgdGhlIHRpbWluZyBmb3IgZWFjaCByb3csIGJ1dCBvbmx5IGVhY2gg MTAwIHJvd3MgKi8KKwllbHNlIGlmICh1c2VfcXVpZXQgJiYgKGN1cnJlbnQgJSAxMDAgPT0gMCkp CisJeworCQkvKiBoYXZlIHdlIHJlYWNoZWQgdGhlIG5leHQgaW50ZXJ2YWwgKG9yIGVuZCk/ICov CisJCWlmICgoY3VycmVudCA9PSB0b3RhbCkgfHwgKGVsYXBzZWRfc2VjID49IGxvZ19pbnRlcnZh bCAqIExPR19TVEVQX1NFQ09ORFMpKQorCQl7CisJCQljaGFycyA9IGZwcmludGYoc3RkZXJyLCBJ TlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0X0ZPUk1BVCAiIHR1cGxlcyAoJWQlJSkgb2YgJXMgZG9u ZSAoZWxhcHNlZCAlLjJmIHMsIHJlbWFpbmluZyAlLjJmIHMpIiwKKwkJCQkJCQljdXJyZW50LCB0 b3RhbCwKKwkJCQkJCQkoaW50KSAoKGN1cnJlbnQgKiAxMDApIC8gdG90YWwpLAorCQkJCQkJCXRh YmxlLCBlbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYyk7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUg cHJldmlvdXMgcHJvZ3Jlc3MgbWVzc2FnZSBpcyBsb25nZXIgdGhhbiB0aGUgY3VycmVudAorCQkJ ICogb25lLCBhZGQgc3BhY2VzIHRvIHRoZSBjdXJyZW50IGxpbmUgdG8gZnVsbHkgb3ZlcndyaXRl IGFueQorCQkJICogcmVtYWluaW5nIGNoYXJhY3RlcnMgZnJvbSB0aGUgcHJldmlvdXMgbWVzc2Fn ZS4KKwkJCSAqLworCQkJaWYgKHByZXZfY2hhcnMgPiBjaGFycykKKwkJCQlmcHJpbnRmKHN0ZGVy ciwgIiUqYyIsIHByZXZfY2hhcnMgLSBjaGFycywgJyAnKTsKKwkJCWZwdXRjKGVvbCwgc3RkZXJy KTsKKwkJCXByZXZfY2hhcnMgPSBjaGFyczsKKworCQkJLyogc2tpcCB0byB0aGUgbmV4dCBpbnRl cnZhbCAqLworCQkJbG9nX2ludGVydmFsID0gKGludCkgY2VpbChlbGFwc2VkX3NlYyAvIExPR19T VEVQX1NFQ09ORFMpOworCQl9CisJfQorCisJaWYgKGN1cnJlbnQgKyAxID09IHRvdGFsICYmIGNo YXJzICE9IDApCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIiUqYyIsIGNoYXJzLCAnICcpOyAvKiBD bGVhciB0aGUgY3VycmVudCBsaW5lICovCisJCWZwdXRjKGVvbCwgc3RkZXJyKTsKKwl9Cit9CisK K3N0YXRpYyB2b2lkCitpbml0UG9wdWxhdGVUYWJsZUNvcHlUZXh0KFBHY29ubiAqY29uLCBjb25z dCBjaGFyICp0YWJsZSwgaW50IGNvdW50ZXIsIGludDY0IGJhc2UsCisJCQkJCQkgIGluaXRSb3dN ZXRob2QgaW5pdF9yb3cpCiB7CiAJaW50CQkJbjsKLQlpbnQ2NAkJazsKLQlpbnQJCQljaGFycyA9 IDA7Ci0JaW50CQkJcHJldl9jaGFycyA9IDA7CiAJUEdyZXN1bHQgICAqcmVzOwogCVBRRXhwQnVm ZmVyRGF0YSBzcWw7CiAJY2hhcgkJY29weV9zdGF0ZW1lbnRbMjU2XTsKIAljb25zdCBjaGFyICpj b3B5X3N0YXRlbWVudF9mbXQgPSAiY29weSAlcyBmcm9tIHN0ZGluIjsKLQlpbnQ2NAkJdG90YWwg PSBiYXNlICogc2NhbGU7Ci0KLQkvKiB1c2VkIHRvIHRyYWNrIGVsYXBzZWQgdGltZSBhbmQgZXN0 aW1hdGUgb2YgdGhlIHJlbWFpbmluZyB0aW1lICovCi0JcGdfdGltZV91c2VjX3Qgc3RhcnQ7Ci0J aW50CQkJbG9nX2ludGVydmFsID0gMTsKLQotCS8qIFN0YXkgb24gdGhlIHNhbWUgbGluZSBpZiBy ZXBvcnRpbmcgdG8gYSB0ZXJtaW5hbCAqLwotCWNoYXIJCWVvbCA9IGlzYXR0eShmaWxlbm8oc3Rk ZXJyKSkgPyAnXHInIDogJ1xuJzsKKwlpbnQ2NAkJc3RhcnQgPSBiYXNlICogY291bnRlcjsKIAog CWluaXRQUUV4cEJ1ZmZlcigmc3FsKTsKIAogCS8qIFVzZSBDT1BZIHdpdGggRlJFRVpFIG9uIHYx NCBhbmQgbGF0ZXIgZm9yIGFsbCBvcmRpbmFyeSB0YWJsZXMgKi8KIAlpZiAoKFBRc2VydmVyVmVy c2lvbihjb24pID49IDE0MDAwMCkgJiYKLQkJZ2V0X3RhYmxlX3JlbGtpbmQoY29uLCB0YWJsZSkg PT0gUkVMS0lORF9SRUxBVElPTikKKwkJZ2V0X3RhYmxlX3JlbGtpbmQoY29uLCB0YWJsZSkgPT0g UkVMS0lORF9SRUxBVElPTiAmJgorCQkhbXVsdGlfeGFjdCkKIAkJY29weV9zdGF0ZW1lbnRfZm10 ID0gImNvcHkgJXMgZnJvbSBzdGRpbiB3aXRoIChmcmVlemUgb24pIjsKIAogCkBAIC01MDY1LDc1 ICs1MTY0LDE4IEBAIGluaXRQb3B1bGF0ZVRhYmxlKFBHY29ubiAqY29uLCBjb25zdCBjaGFyICp0 YWJsZSwgaW50NjQgYmFzZSwKIAkJcGdfZmF0YWwoInVuZXhwZWN0ZWQgY29weSBpbiByZXN1bHQ6 ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29uKSk7CiAJUFFjbGVhcihyZXMpOwogCi0Jc3RhcnQgPSBw Z190aW1lX25vdygpOwotCi0JZm9yIChrID0gMDsgayA8IHRvdGFsOyBrKyspCisJZm9yIChpbnQ2 NF90IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgYmFzZTsgaSsrKQogCXsKLQkJaW50NjQJCWogPSBr ICsgMTsKLQotCQlpbml0X3Jvdygmc3FsLCBrKTsKKwkJaW5pdF9yb3coJnNxbCwgaSk7CiAJCWlm IChQUXB1dGxpbmUoY29uLCBzcWwuZGF0YSkpCiAJCQlwZ19mYXRhbCgiUFFwdXRsaW5lIGZhaWxl ZCIpOwogCiAJCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCiAJCQlicmVhazsKIAotCQkvKgotCQkgKiBJ ZiB3ZSB3YW50IHRvIHN0aWNrIHdpdGggdGhlIG9yaWdpbmFsIGxvZ2dpbmcsIHByaW50IGEgbWVz c2FnZSBlYWNoCi0JCSAqIDEwMGsgaW5zZXJ0ZWQgcm93cy4KLQkJICovCi0JCWlmICgoIXVzZV9x dWlldCkgJiYgKGogJSAxMDAwMDAgPT0gMCkpCi0JCXsKLQkJCWRvdWJsZQkJZWxhcHNlZF9zZWMg PSBQR19USU1FX0dFVF9ET1VCTEUocGdfdGltZV9ub3coKSAtIHN0YXJ0KTsKLQkJCWRvdWJsZQkJ cmVtYWluaW5nX3NlYyA9ICgoZG91YmxlKSB0b3RhbCAtIGopICogZWxhcHNlZF9zZWMgLyBqOwot Ci0JCQljaGFycyA9IGZwcmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0X0ZP Uk1BVCAiIHR1cGxlcyAoJWQlJSkgb2YgJXMgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJlbWFpbmlu ZyAlLjJmIHMpIiwKLQkJCQkJCQlqLCB0b3RhbCwKLQkJCQkJCQkoaW50KSAoKGogKiAxMDApIC8g dG90YWwpLAotCQkJCQkJCXRhYmxlLCBlbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYyk7Ci0KLQkJ CS8qCi0JCQkgKiBJZiB0aGUgcHJldmlvdXMgcHJvZ3Jlc3MgbWVzc2FnZSBpcyBsb25nZXIgdGhh biB0aGUgY3VycmVudAotCQkJICogb25lLCBhZGQgc3BhY2VzIHRvIHRoZSBjdXJyZW50IGxpbmUg dG8gZnVsbHkgb3ZlcndyaXRlIGFueQotCQkJICogcmVtYWluaW5nIGNoYXJhY3RlcnMgZnJvbSB0 aGUgcHJldmlvdXMgbWVzc2FnZS4KLQkJCSAqLwotCQkJaWYgKHByZXZfY2hhcnMgPiBjaGFycykK LQkJCQlmcHJpbnRmKHN0ZGVyciwgIiUqYyIsIHByZXZfY2hhcnMgLSBjaGFycywgJyAnKTsKLQkJ CWZwdXRjKGVvbCwgc3RkZXJyKTsKLQkJCXByZXZfY2hhcnMgPSBjaGFyczsKLQkJfQotCQkvKiBs ZXQncyBub3QgY2FsbCB0aGUgdGltaW5nIGZvciBlYWNoIHJvdywgYnV0IG9ubHkgZWFjaCAxMDAg cm93cyAqLwotCQllbHNlIGlmICh1c2VfcXVpZXQgJiYgKGogJSAxMDAgPT0gMCkpCi0JCXsKLQkJ CWRvdWJsZQkJZWxhcHNlZF9zZWMgPSBQR19USU1FX0dFVF9ET1VCTEUocGdfdGltZV9ub3coKSAt IHN0YXJ0KTsKLQkJCWRvdWJsZQkJcmVtYWluaW5nX3NlYyA9ICgoZG91YmxlKSB0b3RhbCAtIGop ICogZWxhcHNlZF9zZWMgLyBqOwotCi0JCQkvKiBoYXZlIHdlIHJlYWNoZWQgdGhlIG5leHQgaW50 ZXJ2YWwgKG9yIGVuZCk/ICovCi0JCQlpZiAoKGogPT0gdG90YWwpIHx8IChlbGFwc2VkX3NlYyA+ PSBsb2dfaW50ZXJ2YWwgKiBMT0dfU1RFUF9TRUNPTkRTKSkKLQkJCXsKLQkJCQljaGFycyA9IGZw cmludGYoc3RkZXJyLCBJTlQ2NF9GT1JNQVQgIiBvZiAiIElOVDY0X0ZPUk1BVCAiIHR1cGxlcyAo JWQlJSkgb2YgJXMgZG9uZSAoZWxhcHNlZCAlLjJmIHMsIHJlbWFpbmluZyAlLjJmIHMpIiwKLQkJ CQkJCQkJaiwgdG90YWwsCi0JCQkJCQkJCShpbnQpICgoaiAqIDEwMCkgLyB0b3RhbCksCi0JCQkJ CQkJCXRhYmxlLCBlbGFwc2VkX3NlYywgcmVtYWluaW5nX3NlYyk7Ci0KLQkJCQkvKgotCQkJCSAq IElmIHRoZSBwcmV2aW91cyBwcm9ncmVzcyBtZXNzYWdlIGlzIGxvbmdlciB0aGFuIHRoZSBjdXJy ZW50Ci0JCQkJICogb25lLCBhZGQgc3BhY2VzIHRvIHRoZSBjdXJyZW50IGxpbmUgdG8gZnVsbHkg b3ZlcndyaXRlIGFueQotCQkJCSAqIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGZyb20gdGhlIHByZXZp b3VzIG1lc3NhZ2UuCi0JCQkJICovCi0JCQkJaWYgKHByZXZfY2hhcnMgPiBjaGFycykKLQkJCQkJ ZnByaW50ZihzdGRlcnIsICIlKmMiLCBwcmV2X2NoYXJzIC0gY2hhcnMsICcgJyk7Ci0JCQkJZnB1 dGMoZW9sLCBzdGRlcnIpOwotCQkJCXByZXZfY2hhcnMgPSBjaGFyczsKLQotCQkJCS8qIHNraXAg dG8gdGhlIG5leHQgaW50ZXJ2YWwgKi8KLQkJCQlsb2dfaW50ZXJ2YWwgPSAoaW50KSBjZWlsKGVs YXBzZWRfc2VjIC8gTE9HX1NURVBfU0VDT05EUyk7Ci0JCQl9Ci0JCX0KKwkJc2hvd1BvcHVsYXRl VGFibGVDb3B5UHJvZ3Jlc3ModGFibGUsIGksIGJhc2UgKiBzY2FsZSk7CiAJfQogCi0JaWYgKGNo YXJzICE9IDAgJiYgZW9sICE9ICdcbicpCi0JCWZwcmludGYoc3RkZXJyLCAiJSpjXHIiLCBjaGFy cywgJyAnKTsJLyogQ2xlYXIgdGhlIGN1cnJlbnQgbGluZSAqLwogCiAJaWYgKFBRcHV0bGluZShj b24sICJcXC5cbiIpKQogCQlwZ19mYXRhbCgidmVyeSBsYXN0IFBRcHV0bGluZSBmYWlsZWQiKTsK QEAgLTUxNTAsOSArNTE5Miw5IEBAIGluaXRQb3B1bGF0ZVRhYmxlKFBHY29ubiAqY29uLCBjb25z dCBjaGFyICp0YWJsZSwgaW50NjQgYmFzZSwKICAqIGEgYmxhbmstcGFkZGVkIHN0cmluZyBpbiBw Z2JlbmNoX2FjY291bnRzLgogICovCiBzdGF0aWMgdm9pZAotaW5pdEdlbmVyYXRlRGF0YUNsaWVu dFNpZGUoUEdjb25uICpjb24pCitpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZVRleHRGcm10KFBH Y29ubiAqY29uKQogewotCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChjbGllbnQt c2lkZSkuLi5cbiIpOworCWZwcmludGYoc3RkZXJyLCAiVEVYVCBtb2RlLi4uXG4iKTsKIAogCS8q CiAJICogd2UgZG8gYWxsIG9mIHRoaXMgaW4gb25lIHRyYW5zYWN0aW9uIHRvIGVuYWJsZSB0aGUg YmFja2VuZCdzCkBAIC01MTYzLDY0ICs1MjA1LDU0OSBAQCBpbml0R2VuZXJhdGVEYXRhQ2xpZW50 U2lkZShQR2Nvbm4gKmNvbikKIAkvKiB0cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0YSAqLwogCWlu aXRUcnVuY2F0ZVRhYmxlcyhjb24pOwogCi0JLyoKLQkgKiBmaWxsIGJyYW5jaGVzLCB0ZWxsZXJz LCBhY2NvdW50cyBpbiB0aGF0IG9yZGVyIGluIGNhc2UgZm9yZWlnbiBrZXlzCi0JICogYWxyZWFk eSBleGlzdAorCWlmIChtdWx0aV94YWN0KQorCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1p dCIpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FsZTsgaSsrKQorCXsKKwkJaWYgKG11bHRp X3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImJlZ2luIik7CisKKwkJLyoKKwkJICog ZmlsbCBicmFuY2hlcywgdGVsbGVycywgYWNjb3VudHMgaW4gdGhhdCBvcmRlciBpbiBjYXNlIGZv cmVpZ24ga2V5cworCQkgKiBhbHJlYWR5IGV4aXN0CisJCSAqLworCQlpbml0UG9wdWxhdGVUYWJs ZUNvcHlUZXh0KGNvbiwgInBnYmVuY2hfYnJhbmNoZXMiLCBpLCBuYnJhbmNoZXMsIGluaXRCcmFu Y2gpOworCQlpbml0UG9wdWxhdGVUYWJsZUNvcHlUZXh0KGNvbiwgInBnYmVuY2hfdGVsbGVycyIs IGksIG50ZWxsZXJzLCBpbml0VGVsbGVyKTsKKwkJaW5pdFBvcHVsYXRlVGFibGVDb3B5VGV4dChj b24sICJwZ2JlbmNoX2FjY291bnRzIiwgaSwgbmFjY291bnRzLCBpbml0QWNjb3VudCk7CisKKwkJ aWYgKG11bHRpX3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCX0K KworCWlmICghbXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsK K30KKworCisvKgorICogU2F2ZSBjaGFyIGRhdGEgdG8gYnVmZmVyCisgKiBLZXB0IGFzIHNlcGFy YXRlIHByb2MgZm9yIHBvc3NpYmxlIGFkZGl0aW9uIG9mIHNvbWV0aGluZworICogbGlrZSBhZGRD aGFyQ29sdW1uIGluIGZ1dHVyZQorICovCitzdGF0aWMgdm9pZAorYnVmZmVyQ2hhckRhdGEoY2hh ciAqc3JjLCBpbnQzMl90IGxlbikKK3sKKwlBc3NlcnQoYmluX2NvcHlfYnVmZmVyX2xlbmd0aCAr IGxlbiA8PSBCSU5fQ09QWV9CVUZfU0laRSk7CisKKwltZW1jcHkoKGNoYXIgKikgYmluX2NvcHlf YnVmZmVyICsgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCwgKGNoYXIgKikgc3JjLCBsZW4pOworCWJp bl9jb3B5X2J1ZmZlcl9sZW5ndGggKz0gbGVuOworfQorCisvKgorICogQ29udmVydHMgcGxhdGZv cm0gYnl0ZSBvcmRlciBpbnRvIG5ldHdvcmsgYnl0ZSBvcmRlcgorICogU1BBUkMgZG9lc24ndCBy ZXFpcmUgdGhhdAorICovCitzdGF0aWMgdm9pZAorYnVmZmVyRGF0YSh2b2lkICpzcmMsIGludDMy X3QgbGVuKQoreworCUFzc2VydChiaW5fY29weV9idWZmZXJfbGVuZ3RoICsgbGVuIDw9IEJJTl9D T1BZX0JVRl9TSVpFKTsKKworI2lmZGVmIF9fc3BhcmNfXworCWJ1ZmZlckNoYXJEYXRhKHNyYywg bGVuKTsKKyNlbHNlCisKKwlpZiAobGVuID09IDEpCisJCWJ1ZmZlckNoYXJEYXRhKHNyYywgbGVu KTsKKwllbHNlCisJeworCQlmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJewor CQkJKChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciArIGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgpW2ld ID0KKwkJCQkoKGNoYXIgKikgc3JjKVtsZW4gLSBpIC0gMV07CisJCX0KKworCQliaW5fY29weV9i dWZmZXJfbGVuZ3RoICs9IGxlbjsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIGFkZHMgY29sdW1u IGNvdW50ZXIKKyAqLworc3RhdGljIHZvaWQKK2FkZENvbHVtbkNvdW50ZXIoaW50MTZfdCBuKQor eworCWJ1ZmZlckRhdGEoKHZvaWQgKikgJm4sIHNpemVvZihuKSk7Cit9CisKKy8qCisgKiBhZGRz IGNvbHVtbiB3aXRoIGludGkzMiB2YWx1ZQorICovCitzdGF0aWMgdm9pZAorYWRkSW50MzJDb2x1 bW4oaW50MzJfdCB2YWx1ZSkKK3sKKwlpbnQzMl90CQlkYXRhID0gdmFsdWU7CisJaW50MzJfdAkJ c2l6ZSA9IHNpemVvZihkYXRhKTsKKworCWJ1ZmZlckRhdGEoKHZvaWQgKikgJnNpemUsIHNpemVv ZihzaXplKSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKK30K KworLyoKKyAqIGFkZHMgY29sdW1uIHdpdGggaW50aTY0IHZhbHVlCisgKi8KK3N0YXRpYyB2b2lk CithZGRJbnQ2NENvbHVtbihpbnQ2NF90IHZhbHVlKQoreworCWludDY0X3QJCWRhdGEgPSB2YWx1 ZTsKKwlpbnQzMl90CQlzaXplID0gc2l6ZW9mKGRhdGEpOworCisJYnVmZmVyRGF0YSgodm9pZCAq KSAmc2l6ZSwgc2l6ZW9mKHNpemUpKTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZkYXRhLCBzaXpl b2YoZGF0YSkpOworfQorCisvKgorICogU3RhcnRzIGNvbW11bmljYXRpb24gd2l0aCBzZXJ2ZXIg Zm9yIENPUFkgRlJPTSBCSU5BUlkgc3RhdGVtZW50CisgKi8KK3N0YXRpYyB2b2lkCitzZW5kQmlu YXJ5Q29weUhlYWRlcihQR2Nvbm4gKmNvbikKK3sKKwlzdGF0aWMgY2hhciBoZWFkZXJbXSA9IHsn UCcsICdHJywgJ0MnLCAnTycsICdQJywgJ1knLCAnXG4nLCAnXDM3NycsICdccicsICdcbicsICdc MCcsCisJCSdcMCcsICdcMCcsICdcMCcsICdcMCcsCisJJ1wwJywgJ1wwJywgJ1wwJywgJ1wwJ307 CisKKwlQUXB1dENvcHlEYXRhKGNvbiwgaGVhZGVyLCAxOSk7Cit9CisKKy8qCisgKiBGaW5pc2hl cyBjb21tdW5pY2F0aW9uIHdpdGggc2VydmVyIGZvciBDT1BZIEZST00gQklOQVJZIHN0YXRlbWVu dAorICovCitzdGF0aWMgdm9pZAorc2VuZEJpbmFyeUNvcHlUcmFpbGVyKFBHY29ubiAqY29uKQor eworCXN0YXRpYyBjaGFyIHRyYWlsZXJbXSA9IHsweEZGLCAweEZGfTsKKworCVBRcHV0Q29weURh dGEoY29uLCB0cmFpbGVyLCAyKTsKK30KKworLyoKKyAqIEZsYXNoZXMgY3VycmVudCBidWZmZXIg b3ZlciBuZXR3b3JrIGlmIG5lZWRlZAorICovCitzdGF0aWMgdm9pZAorZmx1c2hCdWZmZXIoUEdj b25uICpjb24sIGludDE2X3Qgcm93X2xlbikKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlpZiAo YmluX2NvcHlfYnVmZmVyX2xlbmd0aCArIHJvd19sZW4gPiBCSU5fQ09QWV9CVUZfU0laRSkKKwl7 CisJCXJlcyA9IFBRZ2V0UmVzdWx0KGNvbik7CisKKwkJQXNzZXJ0KGJpbl9jb3B5X2J1ZmZlcl9s ZW5ndGggPD0gQklOX0NPUFlfQlVGX1NJWkUpOworCisJCS8qIGZsdXNoIGN1cnJlbnQgYnVmZmVy ICovCisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4pCisJCQlQUXB1 dENvcHlEYXRhKGNvbiwgKGNoYXIgKikgYmluX2NvcHlfYnVmZmVyLCBiaW5fY29weV9idWZmZXJf bGVuZ3RoKTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoIkl0IGlzIE5PVCBhIENPUFkgY29tbWFuZCB0 aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nIik7CisKKwkJUFFjbGVhcihyZXMpOworCQliaW5fY29w eV9idWZmZXJfbGVuZ3RoID0gMDsKKwl9Cit9CisKKy8qCisgKiBTZW5kcyBjdXJyZW50IGJyYW5j aCByb3cgdG8gYnVmZmVyCisgKi8KK3N0YXRpYyB2b2lkCitpbml0QnJhbmNoQmluYXJ5KFBHY29u biAqY29uLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50KQoreworCS8qLS0tCisJICogQ2hl Y2sgZG9jdW1lbnRhdGlvbiBhYm91dCBDT1BZIGNvbW1hbmQ6CisJICogaHR0cHM6Ly93d3cucG9z dGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3NxbC1jb3B5Lmh0bWwKKwkgKgorCSAqIEVhY2ggcm93 IG9mIGJyYW5jaGVzIHRhYmxlIGlzIHNlbnQgYXM6CisJICogLSAyIGJ5dGVzIGZvciBudW1iZXIg b2YgY29sdW1ucyBpbiB0dXBsZSBvciBzaXplb2YoaW50MTZfdCkKKwkgKiAtIHRoZW4gNCBieXRl cyBvciBzaXplb2YoaW50MzJfdCkgaW4gZnJvbnQgb2YgZWFjaCBmaWVsZCB3aXRoIGxlbmd0aCBv ZiB0aGUgZmllbGQKKwkgKgorCSAqIC0gYnJhbmNoZXMgdGFibGUgaGFzIGZvbGxvd2luZyBjb2x1 bW5zOgorCSAqIC0gNCBieXRlcyBmb3IgYmlkIGNvbHVtbiBvciBzaXplb2YoaW50MzJfdCkKKwkg KiAtIDQgYnl0ZXMgZm9yIGJiYWxhbmNlIGNvbHVtbiBvciBzaXplb2YoaW50MzJfdCkKKwkgKiAt IDg4IGJ5dGVzIGZvciBmaWxsZXIgY29sdW1uIChvcHRpb25hbCBzaW5jZSBubyByZXF1aXJlbWVu dCBmb3Igcm93IGxlbmd0aCkKKwkgKi0tLQogCSAqLwotCWluaXRQb3B1bGF0ZVRhYmxlKGNvbiwg InBnYmVuY2hfYnJhbmNoZXMiLCBuYnJhbmNoZXMsIGluaXRCcmFuY2gpOwotCWluaXRQb3B1bGF0 ZVRhYmxlKGNvbiwgInBnYmVuY2hfdGVsbGVycyIsIG50ZWxsZXJzLCBpbml0VGVsbGVyKTsKLQlp bml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX2FjY291bnRzIiwgbmFjY291bnRzLCBpbml0 QWNjb3VudCk7CisJLyogZm9sbG93aW5nIGlzIG91ciBtYXggaW50ZW50IGF0IHRoZSBtb21lbnQg Ki8KKwlpbnQxNl90CQltYXhfcm93X2xlbiA9IDIgKyAoNCArIDQpICsgKDQgKyA0KSArICg0ICsg ODgpOwogCi0JZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwlmbHVzaEJ1ZmZlcihj b24sIG1heF9yb3dfbGVuKTsKKworCWFkZENvbHVtbkNvdW50ZXIoMik7CisKKwlhZGRJbnQzMkNv bHVtbihjdXJyICsgMSk7CisJYWRkSW50MzJDb2x1bW4oMCk7CisJLyogd2UgZG9uJ3Qgc2VuZCBm aWxsZXIgY29sdW1uIGhlcmUgdG8gbWluaW1pemUgbmV0d29yayB0cmFmZmljIGFuZCBXQUwgKi8K IH0KIAogLyoKLSAqIEZpbGwgdGhlIHN0YW5kYXJkIHRhYmxlcyB3aXRoIHNvbWUgZGF0YSBnZW5l cmF0ZWQgb24gdGhlIHNlcnZlcgotICoKLSAqIEFzIGFscmVhZHkgdGhlIGNhc2Ugd2l0aCB0aGUg Y2xpZW50LXNpZGUgZGF0YSBnZW5lcmF0aW9uLCB0aGUgZmlsbGVyCi0gKiBjb2x1bW4gZGVmYXVs dHMgdG8gTlVMTCBpbiBwZ2JlbmNoX2JyYW5jaGVzIGFuZCBwZ2JlbmNoX3RlbGxlcnMsCi0gKiBh bmQgaXMgYSBibGFuay1wYWRkZWQgc3RyaW5nIGluIHBnYmVuY2hfYWNjb3VudHMuCisgKiBTZW5k cyBjdXJyZW50IHRlbGxlciByb3cgdG8gYnVmZmVyCiAgKi8KIHN0YXRpYyB2b2lkCi1pbml0R2Vu ZXJhdGVEYXRhU2VydmVyU2lkZShQR2Nvbm4gKmNvbikKK2luaXRUZWxsZXJCaW5hcnkoUEdjb25u ICpjb24sIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQpCiB7Ci0JUFFFeHBCdWZmZXJEYXRh IHNxbDsKKwkvKi0tLQorCSAqIENoZWNrIGRvY3VtZW50YXRpb24gYWJvdXQgQ09QWSBjb21tYW5k OgorCSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9zcWwtY29weS5o dG1sCisJICoKKwkgKiBFYWNoIHJvdyBvZiB0ZWxsZXJzIHRhYmxlIGlzIHNlbnQgYXM6CisJICog LSAyIGJ5dGVzIGZvciBudW1iZXIgb2YgY29sdW1ucyBpbiB0dXBsZSBvciBzaXplb2YoaW50MTZf dCkKKwkgKiAtIHRoZW4gNCBieXRlcyBvciBzaXplb2YoaW50MzJfdCkgaW4gZnJvbnQgb2YgZWFj aCBmaWVsZCB3aXRoIGxlbmd0aCBvZiB0aGUgZmllbGQKKwkgKgorCSAqIC0gdGVsbGVycyB0YWJs ZSBoYXMgZm9sbG93aW5nIGNvbHVtbnM6CisJICogLSA0IGJ5dGVzIGZvciB0aWQgY29sdW1uIG9y IHNpemVvZihpbnQzMl90KQorCSAqIC0gNCBieXRlcyBmb3IgYmlkIGNvbHVtbiBvciBzaXplb2Yo aW50MzJfdCkKKwkgKiAtIDQgYnl0ZXMgZm9yIHRiYWxhbmNlIGNvbHVtbiBvciBzaXplb2YoaW50 MzJfdCkKKwkgKiAtIDg0IGJ5dGVzIGZvciBmaWxsZXIgY29sdW1uIChvcHRpb25hbCBzaW5jZSBu byByZXF1aXJlbWVudCBmb3Igcm93IGxlbmd0aCkKKwkgKi0tLQorCSAqLworCS8qIGZvbGxvd2lu ZyBpcyBvdXIgbWF4IGludGVudCBhdCB0aGUgbW9tZW50ICovCisJaW50MTZfdAkJbWF4X3Jvd19s ZW4gPSAyICsgKDQgKyA0KSArICg0ICsgNCkgKyAoNCArIDQpICsgKDQgKyA4NCk7CisKKwlmbHVz aEJ1ZmZlcihjb24sIG1heF9yb3dfbGVuKTsKKworCWFkZENvbHVtbkNvdW50ZXIoMyk7CisKKwlh ZGRJbnQzMkNvbHVtbihjdXJyICsgMSk7CisJYWRkSW50MzJDb2x1bW4oY3VyciAvIHBhcmVudCAr IDEpOworCWFkZEludDMyQ29sdW1uKDApOworCS8qIHdlIGRvbid0IHNlbmQgZmlsbGVyIGNvbHVt biBoZXJlIHRvIG1pbmltaXplIG5ldHdvcmsgdHJhZmZpYyBhbmQgV0FMICovCit9CisKKy8qCisg KiBTZW5kcyBjdXJyZW50IGFjY291bnQgcm93IHRvIGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZAor aW5pdEFjY291bnRCaW5hcnkoUEdjb25uICpjb24sIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJl bnQpCit7CisJLyotLS0KKwkgKiBDaGVjayBkb2N1bWVudGF0aW9uIGFib3V0IENPUFkgY29tbWFu ZDoKKwkgKiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvc3FsLWNvcHku aHRtbAorCSAqCisJICogRWFjaCByb3cgb2YgYWNjb3VudHMgdGFibGUgaXMgc2VudCBhczoKKwkg KiAtIDIgYnl0ZXMgZm9yIG51bWJlciBvZiBjb2x1bW5zIGluIHR1cGxlIG9yIHNpemVvZihpbnQx Nl90KQorCSAqIC0gdGhlbiA0IGJ5dGVzIG9yIHNpemVvZihpbnQzMl90KSBpbiBmcm9udCBvZiBl YWNoIGZpZWxkIHdpdGggbGVuZ3RoIG9mIHRoZSBmaWVsZAorCSAqCisJICogLSBhY2NvdW50cyB0 YWJsZSBoYXMgZm9sbG93aW5nIGNvbHVtbnMgKHRha2luZyBpbnRvIGFjY291bnQgc2NhbGUgPiAy MDAwMCk6CisJICogLSA4IGJ5dGVzIGZvciBhaWQgY29sdW1uIG9yIHNpemVvZihpbnQ2NF90KQor CSAqIC0gNCBieXRlcyBmb3IgYmlkIGNvbHVtbiBvciBzaXplb2YoaW50MzJfdCkKKwkgKiAtIDQg Ynl0ZXMgZm9yIGFiYWxhbmNlIGNvbHVtbiBvciBzaXplb2YoaW50MzJfdCkKKwkgKiAtIDg0IGJ5 dGVzIGZvciBmaWxsZXIgY29sdW1uIChvcHRpb25hbCBzaW5jZSBubyByZXF1aXJlbWVudCBmb3Ig cm93IGxlbmd0aCkKKwkgKi0tLQorCSAqLworCS8qIGZvbGxvd2luZyBpcyBvdXIgbWF4IGludGVu dCBhdCB0aGUgbW9tZW50ICovCisJaW50MTZfdAkJbWF4X3Jvd19sZW4gPSAyICsgKDQgKyA4KSAr ICg0ICsgNCkgKyAoNCArIDQpICsgKDQgKyA4NCk7CisKKwlmbHVzaEJ1ZmZlcihjb24sIG1heF9y b3dfbGVuKTsKKworCWFkZENvbHVtbkNvdW50ZXIoMyk7CisKKwlpZiAoc2NhbGUgPD0gU0NBTEVf MzJCSVRfVEhSRVNIT0xEKQorCQlhZGRJbnQzMkNvbHVtbihjdXJyICsgMSk7CisJZWxzZQorCQlh ZGRJbnQ2NENvbHVtbihjdXJyKTsKKworCWFkZEludDMyQ29sdW1uKGN1cnIgLyBwYXJlbnQgKyAx KTsKKwlhZGRJbnQzMkNvbHVtbigwKTsKKwkvKiB3ZSBkb24ndCBzZW5kIGZpbGxlciBjb2x1bW4g aGVyZSB0byBtaW5pbWl6ZSBuZXR3b3JrIHRyYWZmaWMgYW5kIFdBTCAqLworfQorCisvKgorICog VW5pdmVyc2FsIHdyYXBwZXIgZm9yIHNlbmRpbmcgZGF0YSBpbiBiaW5hcnkgZm9ybWF0CisgKi8K K3N0YXRpYyB2b2lkCitpbml0UG9wdWxhdGVUYWJsZUNvcHlCaW5hcnkoUEdjb25uICpjb24sIGNo YXIgKnRhYmxlLCBjaGFyICpjb2x1bW5zLAorCQkJCQkJCWludCBjb3VudGVyLCBpbnQ2NF90IGJh c2UsIGluaXRSb3dNZXRob2RCaW5hcnkgaW5pdF9yb3cpCit7CisJaW50CQkJbjsKKwlQR3Jlc3Vs dCAgICpyZXM7CisJY2hhcgkJY29weV9zdGF0ZW1lbnRbMjU2XTsKKwljb25zdCBjaGFyICpjb3B5 X3N0YXRlbWVudF9mbXQgPSAiY29weSAlcyAoJXMpIGZyb20gc3RkaW4gKGZvcm1hdCBiaW5hcnkp IjsKKwlpbnQ2NF90CQlzdGFydCA9IGJhc2UgKiBjb3VudGVyOworCisJYmluX2NvcHlfYnVmZmVy X2xlbmd0aCA9IDA7CisKKwkvKiBVc2UgQ09QWSB3aXRoIEZSRUVaRSBvbiB2MTQgYW5kIGxhdGVy IGZvciBhbGwgb3JkaW5hcnkgdGFibGVzICovCisJaWYgKChQUXNlcnZlclZlcnNpb24oY29uKSA+ PSAxNDAwMDApICYmCisJCWdldF90YWJsZV9yZWxraW5kKGNvbiwgdGFibGUpID09IFJFTEtJTkRf UkVMQVRJT04gJiYKKwkJIW11bHRpX3hhY3QpCisJCWNvcHlfc3RhdGVtZW50X2ZtdCA9ICJjb3B5 ICVzICglcykgZnJvbSBzdGRpbiB3aXRoIChmb3JtYXQgYmluYXJ5LCBmcmVlemUgb24pIjsKKwor CW4gPSBwZ19zbnByaW50Zihjb3B5X3N0YXRlbWVudCwgc2l6ZW9mKGNvcHlfc3RhdGVtZW50KSwg Y29weV9zdGF0ZW1lbnRfZm10LCB0YWJsZSwgY29sdW1ucyk7CisJaWYgKG4gPj0gc2l6ZW9mKGNv cHlfc3RhdGVtZW50KSkKKwkJcGdfZmF0YWwoImludmFsaWQgYnVmZmVyIHNpemU6IG11c3QgYmUg YXQgbGVhc3QgJWQgY2hhcmFjdGVycyBsb25nIiwgbik7CisJZWxzZSBpZiAobiA9PSAtMSkKKwkJ cGdfZmF0YWwoImludmFsaWQgZm9ybWF0IHN0cmluZyIpOworCisJcmVzID0gUFFleGVjKGNvbiwg Y29weV9zdGF0ZW1lbnQpOworCisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09Q WV9JTikKKwkJcGdfZmF0YWwoInVuZXhwZWN0ZWQgY29weSBpbiByZXN1bHQ6ICVzIiwgUFFlcnJv ck1lc3NhZ2UoY29uKSk7CisJUFFjbGVhcihyZXMpOworCisKKwlzZW5kQmluYXJ5Q29weUhlYWRl cihjb24pOworCisKKwlmb3IgKGludDY0X3QgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBiYXNlOyBp KyspCisJeworCQlpbml0X3Jvdyhjb24sIGksIGJhc2UpOworCisJCWlmIChDYW5jZWxSZXF1ZXN0 ZWQpCisJCQlicmVhazsKKworCQlzaG93UG9wdWxhdGVUYWJsZUNvcHlQcm9ncmVzcyh0YWJsZSwg aSwgYmFzZSAqIHNjYWxlKTsKKwl9CisKKwlyZXMgPSBQUWdldFJlc3VsdChjb24pOworCisJQXNz ZXJ0KGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggPD0gQklOX0NPUFlfQlVGX1NJWkUpOworCisJaWYg KFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfQ09QWV9JTikKKwkJUFFwdXRDb3B5RGF0YShj b24sIChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciwgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCk7CisJ ZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgbW9kZSAlZCBpbnN0ZWFkIG9mICVk XG4iLCBQUXJlc3VsdFN0YXR1cyhyZXMpLCBQR1JFU19DT1BZX0lOKTsKKwlQUWNsZWFyKHJlcyk7 CisKKworCXNlbmRCaW5hcnlDb3B5VHJhaWxlcihjb24pOworCisKKwlyZXMgPSBQUWdldFJlc3Vs dChjb24pOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4pCisJewor CQlpZiAoUFFwdXRDb3B5RW5kKGNvbiwgTlVMTCkgPT0gMSkJLyogc3VjY2VzcyAqLworCQl7CisJ CQlQUWNsZWFyKHJlcyk7CisJCQlyZXMgPSBQUWdldFJlc3VsdChjb24pOworCQkJaWYgKFBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJCQlmcHJpbnRmKHN0ZGVyciwg IkVycm9yOiAlc1xuIiwgUFFlcnJvck1lc3NhZ2UoY29uKSk7CisJCX0KKwkJZWxzZQorCQkJZnBy aW50ZihzdGRlcnIsICJFcnJvcjogJXNcbiIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOworCX0KKwlQ UWNsZWFyKHJlcyk7Cit9CisKKy8qCisgKiBXcmFwcGVyIGZvciBiaW5hcnkgZGF0YSBsb2FkCisg Ki8KK3N0YXRpYyB2b2lkCitpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZUJpbmFyeUZybXQoUEdj b25uICpjb24pCit7CisKKwlmcHJpbnRmKHN0ZGVyciwgIkJJTkFSWSBtb2RlLi4uXG4iKTsKIAot CWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChzZXJ2ZXItc2lkZSkuLi5cbiIpOwor CWJpbl9jb3B5X2J1ZmZlciA9IHBnX21hbGxvYyhCSU5fQ09QWV9CVUZfU0laRSk7CisJYmluX2Nv cHlfYnVmZmVyX2xlbmd0aCA9IDA7CiAKIAkvKgotCSAqIHdlIGRvIGFsbCBvZiB0aGlzIGluIG9u ZSB0cmFuc2FjdGlvbiB0byBlbmFibGUgdGhlIGJhY2tlbmQncwotCSAqIGRhdGEtbG9hZGluZyBv cHRpbWl6YXRpb25zCisJICogd2UgZG8gYWxsIG9mIHRoaXMgaW4gbXVsdGlwbGUgdHJhbnNhY3Rp b25zIHRvIG1pbmltaXplIGxvYWQgb24gREIKKwkgKiBzZXJ2ZXIgYW5kIHBlcmhhcHMgaW4gZnV0 dXJlIGFsbG93IGxvYWQgaW4gcGFyYWxsZWwgc2Vzc2lvbnMKIAkgKi8KIAlleGVjdXRlU3RhdGVt ZW50KGNvbiwgImJlZ2luIik7CiAKIAkvKiB0cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0YSAqLwog CWluaXRUcnVuY2F0ZVRhYmxlcyhjb24pOwogCisJaWYgKG11bHRpX3hhY3QpCisJCWV4ZWN1dGVT dGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHNjYWxlOyBp KyspCisJeworCQlpZiAobXVsdGlfeGFjdCkKKwkJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVn aW4iKTsKKworCQlpbml0UG9wdWxhdGVUYWJsZUNvcHlCaW5hcnkoY29uLCAicGdiZW5jaF9icmFu Y2hlcyIsICJiaWQsIGJiYWxhbmNlIiwKKwkJCQkJCQkJCWksIG5icmFuY2hlcywgaW5pdEJyYW5j aEJpbmFyeSk7CisJCWluaXRQb3B1bGF0ZVRhYmxlQ29weUJpbmFyeShjb24sICJwZ2JlbmNoX3Rl bGxlcnMiLCAidGlkLCBiaWQsIHRiYWxhbmNlIiwKKwkJCQkJCQkJCWksIG50ZWxsZXJzLCBpbml0 VGVsbGVyQmluYXJ5KTsKKwkJaW5pdFBvcHVsYXRlVGFibGVDb3B5QmluYXJ5KGNvbiwgInBnYmVu Y2hfYWNjb3VudHMiLCAiYWlkLCBiaWQsIGFiYWxhbmNlIiwKKwkJCQkJCQkJCWksIG5hY2NvdW50 cywgaW5pdEFjY291bnRCaW5hcnkpOworCisJCWlmIChtdWx0aV94YWN0KQorCQkJZXhlY3V0ZVN0 YXRlbWVudChjb24sICJjb21taXQiKTsKKwl9CisKKwlpZiAoIW11bHRpX3hhY3QpCisJCWV4ZWN1 dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisKKwlwZ19mcmVlKGJpbl9jb3B5X2J1ZmZlcik7 Cit9CisKKy8qCisgKiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJsZXMgd2l0aCBzb21lIGRhdGEgZ2Vu ZXJhdGVkIGFuZCBzZW50IGZyb20gdGhlIGNsaWVudC4KKyAqLworc3RhdGljIHZvaWQKK2luaXRH ZW5lcmF0ZURhdGFDbGllbnRTaWRlKFBHY29ubiAqY29uKQoreworCWZwcmludGYoc3RkZXJyLCAi Z2VuZXJhdGluZyBkYXRhIChjbGllbnQtc2lkZSBhcyAlcyB0cmFuc2FjdGlvbiVzKSBpbiAiLAor CQkJbXVsdGlfeGFjdCA/ICJtdWx0aXBsZSIgOiAic2luZ2xlIiwgbXVsdGlfeGFjdCA/ICJzIiA6 ICIiKTsKKworCWRhdGFfbG9hZF9zdGFydCA9IHBnX3RpbWVfbm93KCk7CisKKwlzd2l0Y2ggKGRh dGFfZ2VuZXJhdGlvbl90eXBlKQorCXsKKwkJY2FzZSBJTklUX1NURVBfR0VOX1RZUEVfQ09QWV9U RVhUOgorCQkJaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVUZXh0RnJtdChjb24pOworCQkJYnJl YWs7CisJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfQklOQVJZOgorCQkJaW5pdEdlbmVy YXRlRGF0YUNsaWVudFNpZGVCaW5hcnlGcm10KGNvbik7CisJCQlicmVhazsKKwl9Cit9CisKKy8q CisgKiBHZW5lcmF0aW5nIGRhdGEgdmlhIElOU0VSVCAuLiBTRUxFQ1QgLi4gRlJPTSBnZW5lcmF0 ZV9zZXJpZXMKKyAqIFBvc3NpYmx5IGFzICJPbmUgdHJhbnNhY3Rpb24gcGVyIHNjYWxlIiBpbiBt dWx0aS10cmFuc2FjdGlvbiBtb2RlCisgKi8KK3N0YXRpYyB2b2lkCitnZW5lcmF0ZURhdGFJbnNl cnRTZXJpZXMoUEdjb25uICpjb24pCit7CisJUFFFeHBCdWZmZXJEYXRhIHNxbDsKKworCWZwcmlu dGYoc3RkZXJyLCAidmlhIElOU0VSVCAuLiBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzLi4uIGluIG11 bHRpcGxlIFRYTihzKVxuIik7CisKIAlpbml0UFFFeHBCdWZmZXIoJnNxbCk7CiAKLQlwcmludGZQ UUV4cEJ1ZmZlcigmc3FsLAotCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2JyYW5jaGVzKGJp ZCxiYmFsYW5jZSkgIgotCQkJCQkgICJzZWxlY3QgYmlkLCAwICIKLQkJCQkJICAiZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMSwgJWQpIGFzIGJpZCIsIG5icmFuY2hlcyAqIHNjYWxlKTsKLQlleGVjdXRl U3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwotCi0JcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKLQkJ CQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJzKHRpZCxiaWQsdGJhbGFuY2UpICIKLQkJ CQkJICAic2VsZWN0IHRpZCwgKHRpZCAtIDEpIC8gJWQgKyAxLCAwICIKLQkJCQkJICAiZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMSwgJWQpIGFzIHRpZCIsIG50ZWxsZXJzLCBudGVsbGVycyAqIHNjYWxl KTsKLQlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOwotCi0JcHJpbnRmUFFFeHBCdWZm ZXIoJnNxbCwKLQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhhaWQsYmlkLGFi YWxhbmNlLGZpbGxlcikgIgotCQkJCQkgICJzZWxlY3QgYWlkLCAoYWlkIC0gMSkgLyAlZCArIDEs IDAsICcnICIKLQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgIiBJTlQ2NF9GT1JNQVQg IikgYXMgYWlkIiwKLQkJCQkJICBuYWNjb3VudHMsIChpbnQ2NCkgbmFjY291bnRzICogc2NhbGUp OwotCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisJZXhlY3V0ZVN0YXRlbWVudChj b24sICJiZWdpbiIpOworCisJLyogdHJ1bmNhdGUgYXdheSBhbnkgb2xkIGRhdGEgKi8KKwlpbml0 VHJ1bmNhdGVUYWJsZXMoY29uKTsKKworCWlmIChtdWx0aV94YWN0KQorCQlleGVjdXRlU3RhdGVt ZW50KGNvbiwgImNvbW1pdCIpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FsZTsgaSsrKQor CXsKKwkJaWYgKG11bHRpX3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImJlZ2luIik7 CisKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKKwkJCQkJCSAgImluc2VydCBpbnRvIHBnYmVu Y2hfYnJhbmNoZXMoYmlkLCBiYmFsYW5jZSkgIgorCQkJCQkJICAidmFsdWVzKCVkLCAwKSIsIGkg KyAxKTsKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKKworCQlwcmludGZQUUV4 cEJ1ZmZlcigmc3FsLAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJzKHRpZCwg YmlkLCB0YmFsYW5jZSkgIgorCQkJCQkJICAic2VsZWN0IHRpZCArIDEsIHRpZCAvICVkICsgMSwg MCAiCisJCQkJCQkgICJmcm9tIGdlbmVyYXRlX3NlcmllcyglZCwgJWQpIGFzIHRpZCIsCisJCQkJ CQkgIG50ZWxsZXJzLCBpICogbnRlbGxlcnMsIChpICsgMSkgKiBudGVsbGVycyAtIDEpOworCQll eGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOworCisJCXByaW50ZlBRRXhwQnVmZmVyKCZz cWwsCisJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2FjY291bnRzKGFpZCwgYmlkLCBhYmFs YW5jZSwgIgorCQkJCQkJICAiZmlsbGVyKSAiCisJCQkJCQkgICJzZWxlY3QgYWlkICsgMSwgYWlk IC8gJWQgKyAxLCAwLCAnJyAiCisJCQkJCQkgICJmcm9tIGdlbmVyYXRlX3NlcmllcygiIElOVDY0 X0ZPUk1BVCAiLCAiCisJCQkJCQkgIElOVDY0X0ZPUk1BVCAiKSBhcyBhaWQiLAorCQkJCQkJICBu YWNjb3VudHMsIChpbnQ2NCkgaSAqIG5hY2NvdW50cywKKwkJCQkJCSAgKGludDY0KSAoaSArIDEp ICogbmFjY291bnRzIC0gMSk7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisK KwkJaWYgKG11bHRpX3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOwor CX0KKworCWlmICghbXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQi KTsKIAogCXRlcm1QUUV4cEJ1ZmZlcigmc3FsKTsKK30KKworLyoKKyAqIEdlbmVyYXRpbmcgZGF0 YSB2aWEgSU5TRVJUIC4uIFNFTEVDVCAuLiBGUk9NIHVubmVzdAorICogUG9zc2libHkgYXMgIk9u ZSB0cmFuc2FjdGlvbiBwZXIgc2NhbGUiIGluIG11bHRpLXRhbnNhY3Rpb24gbW9kZQorICovCitz dGF0aWMgdm9pZAorZ2VuZXJhdGVEYXRhSW5zZXJ0VW5uZXN0KFBHY29ubiAqY29uKQoreworCVBR RXhwQnVmZmVyRGF0YSBzcWw7CiAKLQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOwor CWZwcmludGYoc3RkZXJyLCAidmlhIElOU0VSVCAuLiBTRUxFQ1QgdW5uZXN0Li4uXG4iKTsKKwor CWluaXRQUUV4cEJ1ZmZlcigmc3FsKTsKKworCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4i KTsKKworCS8qIHRydW5jYXRlIGF3YXkgYW55IG9sZCBkYXRhICovCisJaW5pdFRydW5jYXRlVGFi bGVzKGNvbik7CisKKwlpZiAobXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJj b21taXQiKTsKKworCWZvciAoaW50IHMgPSAwOyBzIDwgc2NhbGU7IHMrKykKKwl7CisJCWlmICht dWx0aV94YWN0KQorCQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIpOworCisJCXByaW50 ZlBRRXhwQnVmZmVyKCZzcWwsCisJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2JyYW5jaGVz KGJpZCxiYmFsYW5jZSkgIgorCQkJCQkJICAidmFsdWVzKCVkLCAwKSIsIHMgKyAxKTsKKwkJZXhl Y3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKKworCQlwcmludGZQUUV4cEJ1ZmZlcigmc3Fs LAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJzKHRpZCwgYmlkLCB0YmFsYW5j ZSkgIgorCQkJCQkJICAic2VsZWN0IHVubmVzdChhcnJheV9hZ2cocy5pIG9yZGVyIGJ5IHMuaSkp IGFzIHRpZCwgIgorCQkJCQkJICAiJWQgYXMgYmlkLCAwIGFzIHRiYWxhbmNlICIKKwkJCQkJCSAg ImZyb20gZ2VuZXJhdGVfc2VyaWVzKCVkLCAlZCkgYXMgcyhpKSIsCisJCQkJCQkgIHMgKyAxLCBz ICogbnRlbGxlcnMgKyAxLCAocyArIDEpICogbnRlbGxlcnMpOworCQlleGVjdXRlU3RhdGVtZW50 KGNvbiwgc3FsLmRhdGEpOworCisJCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCisJCQkJCQkgICJ3 aXRoIGRhdGEgYXMgKCIKKwkJCQkJCSAgIiAgIHNlbGVjdCBnZW5lcmF0ZV9zZXJpZXMoIiBJTlQ2 NF9GT1JNQVQgIiwgIgorCQkJCQkJICBJTlQ2NF9GT1JNQVQgIikgYXMgaSkgIgorCQkJCQkJICAi aW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhhaWQsIGJpZCwgIgorCQkJCQkJICAiYWJhbGFu Y2UsIGZpbGxlcikgIgorCQkJCQkJICAic2VsZWN0IHVubmVzdChhaWQpLCB1bm5lc3QoYmlkKSwg MCBhcyBhYmFsYW5jZSwgIgorCQkJCQkJICAiJycgYXMgZmlsbGVyICIKKwkJCQkJCSAgImZyb20g KHNlbGVjdCBhcnJheV9hZ2coaSsxKSBhaWQsICIKKwkJCQkJCSAgImFycmF5X2FnZyhpLyVkICsg MSkgYmlkIGZyb20gZGF0YSkiLAorCQkJCQkJICAoaW50NjQpIHMgKiBuYWNjb3VudHMgKyAxLAor CQkJCQkJICAoaW50NjQpIChzICsgMSkgKiBuYWNjb3VudHMsIG5hY2NvdW50cyk7CisJCWV4ZWN1 dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJaWYgKG11bHRpX3hhY3QpCisJCQlleGVj dXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCX0KKworCWlmICghbXVsdGlfeGFjdCkKKwkJ ZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKworCXRlcm1QUUV4cEJ1ZmZlcigmc3Fs KTsKK30KKworLyoKKyAqIEZpbGwgdGhlIHN0YW5kYXJkIHRhYmxlcyB3aXRoIHNvbWUgZGF0YSBn ZW5lcmF0ZWQgb24gdGhlIHNlcnZlciBzaWRlCisgKgorICogQXMgYWxyZWFkeSB0aGUgY2FzZSB3 aXRoIHRoZSBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24sIHRoZSBmaWxsZXIKKyAqIGNvbHVt biBkZWZhdWx0cyB0byBOVUxMIGluIHBnYmVuY2hfYnJhbmNoZXMgYW5kIHBnYmVuY2hfdGVsbGVy cywKKyAqIGFuZCBpcyBhIGJsYW5rLXBhZGRlZCBzdHJpbmcgaW4gcGdiZW5jaF9hY2NvdW50cy4K KyAqLworc3RhdGljIHZvaWQKK2luaXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKFBHY29ubiAqY29u KQoreworCWZwcmludGYoc3RkZXJyLCAiZ2VuZXJhdGluZyBkYXRhIChzZXJ2ZXItc2lkZSBhcyAl cyB0cmFuc2FjdGlvbiVzKSAiLAorCQkJbXVsdGlfeGFjdCA/ICJtdWx0aXBsZSIgOiAic2luZ2xl IiwgbXVsdGlfeGFjdCA/ICJzIiA6ICIiKTsKKworCXN3aXRjaCAoZGF0YV9nZW5lcmF0aW9uX3R5 cGUpCisJeworCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfU0VSSUVTOgorCQkJZ2Vu ZXJhdGVEYXRhSW5zZXJ0U2VyaWVzKGNvbik7CisJCQlicmVhazsKKwkJY2FzZSBJTklUX1NURVBf R0VOX1RZUEVfSU5TRVJUX1VOTkVTVDoKKwkJCWdlbmVyYXRlRGF0YUluc2VydFVubmVzdChjb24p OworCQkJYnJlYWs7CisJfQogfQogCiAvKgpAQCAtNTMwNiw2ICs1ODMzLDggQEAgaW5pdENyZWF0 ZUZLZXlzKFBHY29ubiAqY29uKQogc3RhdGljIHZvaWQKIGNoZWNrSW5pdFN0ZXBzKGNvbnN0IGNo YXIgKmluaXRpYWxpemVfc3RlcHMpCiB7CisJY2hhcgkJZGF0YV9pbml0X3R5cGUgPSAwOworCiAJ aWYgKGluaXRpYWxpemVfc3RlcHNbMF0gPT0gJ1wwJykKIAkJcGdfZmF0YWwoIm5vIGluaXRpYWxp emF0aW9uIHN0ZXBzIHNwZWNpZmllZCIpOwogCkBAIC01MzE3LDcgKzU4NDYsMjIgQEAgY2hlY2tJ bml0U3RlcHMoY29uc3QgY2hhciAqaW5pdGlhbGl6ZV9zdGVwcykKIAkJCXBnX2xvZ19lcnJvcl9k ZXRhaWwoIkFsbG93ZWQgc3RlcCBjaGFyYWN0ZXJzIGFyZTogXCIiIEFMTF9JTklUX1NURVBTICJc Ii4iKTsKIAkJCWV4aXQoMSk7CiAJCX0KKworCQlzd2l0Y2ggKCpzdGVwKQorCQl7CisJCQljYXNl IElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX1RFWFQ6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQ RV9DT1BZX0JJTkFSWToKKwkJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0lOU0VSVF9TRVJJRVM6 CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfVU5ORVNUOgorCQkJCWRhdGFfaW5p dF90eXBlKys7CisJCQkJYnJlYWs7CisJCX0KIAl9CisKKwlpZiAoZGF0YV9pbml0X3R5cGUgPT0g MCkKKwkJcGdfbG9nX3dhcm5pbmcoIk5vIGRhdGEgZ2VuZXJhdGlvbiB0eXBlIGlzIHByb3ZpZGVk Iik7CisJaWYgKGRhdGFfaW5pdF90eXBlID4gMSkKKwkJcGdfbG9nX3dhcm5pbmcoIk1vcmUgdGhh biBvbmUgdHlwZSBvZiBkYXRhIGluaXRpYWxpemF0aW9uIGlzIHJlcXVlc3RlZCIpOwogfQogCiAv KgpAQCAtNTM1NSwxNCArNTg5OSwyNCBAQCBydW5Jbml0U3RlcHMoY29uc3QgY2hhciAqaW5pdGlh bGl6ZV9zdGVwcykKIAkJCQlvcCA9ICJjcmVhdGUgdGFibGVzIjsKIAkJCQlpbml0Q3JlYXRlVGFi bGVzKGNvbik7CiAJCQkJYnJlYWs7Ci0JCQljYXNlICdnJzoKKwkJCWNhc2UgSU5JVF9TVEVQX0dF Tl9UWVBFX0NPUFlfVEVYVDoKKwkJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfQklOQVJZ OgogCQkJCW9wID0gImNsaWVudC1zaWRlIGdlbmVyYXRlIjsKKwkJCQlkYXRhX2dlbmVyYXRpb25f dHlwZSA9ICpzdGVwOwogCQkJCWluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlKGNvbik7CiAJCQkJ YnJlYWs7Ci0JCQljYXNlICdHJzoKKwkJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0lOU0VSVF9T RVJJRVM6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfVU5ORVNUOgogCQkJCW9w ID0gInNlcnZlci1zaWRlIGdlbmVyYXRlIjsKKwkJCQlkYXRhX2dlbmVyYXRpb25fdHlwZSA9ICpz dGVwOwogCQkJCWluaXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKGNvbik7CiAJCQkJYnJlYWs7CisJ CQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9TSU5HTEVfWEFDVDoKKwkJCQltdWx0aV94YWN0ID0g ZmFsc2U7CisJCQkJYnJlYWs7CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9NVUxUSV9YQUNU OgorCQkJCW11bHRpX3hhY3QgPSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSAndic6CiAJCQkJ b3AgPSAidmFjdXVtIjsKIAkJCQlpbml0VmFjdXVtKGNvbik7CkBAIC02OTQwLDcgKzc0OTQsNiBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWNhc2UgJ0knOgogCQkJCXBnX2ZyZWUo aW5pdGlhbGl6ZV9zdGVwcyk7CiAJCQkJaW5pdGlhbGl6ZV9zdGVwcyA9IHBnX3N0cmR1cChvcHRh cmcpOwotCQkJCWNoZWNrSW5pdFN0ZXBzKGluaXRpYWxpemVfc3RlcHMpOwogCQkJCWluaXRpYWxp emF0aW9uX29wdGlvbl9zZXQgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnaic6CQkJLyog am9icyAqLwpAQCAtNzI0NSw2ICs3Nzk4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCQl9CiAJCX0KIAorCQljaGVja0luaXRTdGVwcyhpbml0aWFsaXplX3N0ZXBzKTsKIAkJcnVu SW5pdFN0ZXBzKGluaXRpYWxpemVfc3RlcHMpOwogCQlleGl0KDApOwogCX0KZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsIGIvc3JjL2Jpbi9w Z2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwKaW5kZXggYjc2ODVlYTVkMjAuLjZj Nzc4M2E3N2Y3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRo X3NlcnZlci5wbAorKysgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZl ci5wbApAQCAtMTYsMjUgKzE2LDMwIEBAIHN1YiBjaGVja19kYXRhX3N0YXRlCiAJbG9jYWwgJFRl c3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxkZXI6OkxldmVsICsgMTsKIAlteSAkbm9k ZSA9IHNoaWZ0OwogCW15ICR0eXBlID0gc2hpZnQ7CisJbXkgJHNxbF9yZXN1bHQ7CiAKLQlteSAk c3FsX3Jlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkJJ1NFTEVDVCBjb3Vu dCgqKSBBUyBudWxsX2NvdW50IEZST00gcGdiZW5jaF9hY2NvdW50cyBXSEVSRSBmaWxsZXIgSVMg TlVMTCBMSU1JVCAxMDsnCi0JKTsKLQlpcygkc3FsX3Jlc3VsdCwgJzAnLAotCQkiJHR5cGU6IGZp bGxlciBjb2x1bW4gb2YgcGdiZW5jaF9hY2NvdW50cyBoYXMgbm8gTlVMTCBkYXRhIik7CiAJJHNx bF9yZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJCSdTRUxFQ1QgY291bnQo KikgQVMgbnVsbF9jb3VudCBGUk9NIHBnYmVuY2hfYnJhbmNoZXMgV0hFUkUgZmlsbGVyIElTIE5V TEw7JwogCSk7CiAJaXMoJHNxbF9yZXN1bHQsICcxJywKIAkJIiR0eXBlOiBmaWxsZXIgY29sdW1u IG9mIHBnYmVuY2hfYnJhbmNoZXMgaGFzIG9ubHkgTlVMTCBkYXRhIik7CisKIAkkc3FsX3Jlc3Vs dCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkJJ1NFTEVDVCBjb3VudCgqKSBBUyBu dWxsX2NvdW50IEZST00gcGdiZW5jaF90ZWxsZXJzIFdIRVJFIGZpbGxlciBJUyBOVUxMOycKIAkp OwogCWlzKCRzcWxfcmVzdWx0LCAnMTAnLAogCQkiJHR5cGU6IGZpbGxlciBjb2x1bW4gb2YgcGdi ZW5jaF90ZWxsZXJzIGhhcyBvbmx5IE5VTEwgZGF0YSIpOworCisJJHNxbF9yZXN1bHQgPSAkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSdTRUxFQ1QgY291bnQoKikgQVMgbnVsbF9jb3Vu dCBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgZmlsbGVyIElTIE5VTEwgTElNSVQgMTA7Jwor CSk7CisJaXMoJHNxbF9yZXN1bHQsICcwJywKKwkJIiR0eXBlOiBmaWxsZXIgY29sdW1uIG9mIHBn YmVuY2hfYWNjb3VudHMgaGFzIG5vIE5VTEwgZGF0YSIpOworCiAJJHNxbF9yZXN1bHQgPSAkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJCSdTRUxFQ1QgY291bnQoKikgQVMgZGF0YV9jb3Vu dCBGUk9NIHBnYmVuY2hfaGlzdG9yeTsnKTsKLQlpcygkc3FsX3Jlc3VsdCwgJzAnLCAiJHR5cGU6 IHBnYmVuY2hfaGlzdG9yeSBoYXMgbm8gZGF0YSIpOworCWlzKCRzcWxfcmVzdWx0LCAnMCcsCisJ CSIkdHlwZTogcGdiZW5jaF9oaXN0b3J5IGhhcyBubyBkYXRhIik7CiB9CiAKICMgc3RhcnQgYSBw Z2JlbmNoIHNwZWNpZmljIHNlcnZlcgpAQCAtMTEyLDYgKzExNyw3IEBAICRub2RlLT5wZ2JlbmNo KAogCVtxcntQZXJoYXBzIHlvdSBuZWVkIHRvIGRvIGluaXRpYWxpemF0aW9ufV0sCiAJJ3J1biB3 aXRob3V0IGluaXQnKTsKIAorCiAjIEluaXRpYWxpemUgcGdiZW5jaCB0YWJsZXMgc2NhbGUgMQog JG5vZGUtPnBnYmVuY2goCiAJJy1pJywgMCwKQEAgLTEyNSw3ICsxMzEsNyBAQCAkbm9kZS0+cGdi ZW5jaCgKIAkncGdiZW5jaCBzY2FsZSAxIGluaXRpYWxpemF0aW9uJywpOwogCiAjIENoZWNrIGRh dGEgc3RhdGUsIGFmdGVyIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KLWNoZWNrX2RhdGFf c3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZScpOworY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2Ns aWVudC1zaWRlIChkZWZhdWx0IG9wdGlvbnMpJyk7CiAKICMgQWdhaW4sIHdpdGggYWxsIHBvc3Np YmxlIG9wdGlvbnMKICRub2RlLT5wZ2JlbmNoKApAQCAtMTQzLDYgKzE0OSw3IEBAICRub2RlLT5w Z2JlbmNoKAogCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KIAldLAogCSdwZ2JlbmNoIHNjYWxl IDEgaW5pdGlhbGl6YXRpb24nKTsKK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lk ZSAoYWxsIG9wdGlvbnMpJyk7CiAKICMgVGVzdCBpbnRlcmFjdGlvbiBvZiAtLWluaXQtc3RlcHMg d2l0aCBsZWdhY3kgc3RlcC1zZWxlY3Rpb24gb3B0aW9ucwogJG5vZGUtPnBnYmVuY2goCkBAIC0x NTQsNyArMTYxLDcgQEAgJG5vZGUtPnBnYmVuY2goCiAJCXFye2NyZWF0aW5nIHRhYmxlc30sCiAJ CXFye2NyZWF0aW5nIDMgcGFydGl0aW9uc30sCiAJCXFye2NyZWF0aW5nIHByaW1hcnkga2V5c30s Ci0JCXFye2dlbmVyYXRpbmcgZGF0YSBcKHNlcnZlci1zaWRlXCl9LAorCQlxcntnZW5lcmF0aW5n IGRhdGEgXChzZXJ2ZXItc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb25cKX0sCiAJCXFye2NyZWF0 aW5nIGZvcmVpZ24ga2V5c30sCiAJCXFyeyg/IXZhY3V1bWluZyl9LCAgICAjIG5vIHZhY3V1bQog CQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KQEAgLTE2NCw2ICsxNzEsMjE5IEBAICRub2RlLT5w Z2JlbmNoKAogIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVy YXRpb24uCiBjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnc2VydmVyLXNpZGUnKTsKIAorCisjIFRl c3Qgc2VydmVyLXNpZGUgZ2VuZXJhdGlvbiB3aXRoIGdlbmVyYXRlX3NlcmllcworJG5vZGUtPnBn YmVuY2goCisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRHJywKKwkwLAorCVtxcnteJH1d LAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30sCisJCXFye2NyZWF0aW5nIHRhYmxlc30s CisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKHNlcnZlci1zaWRlIGFzIHNpbmdsZSB0cmFuc2FjdGlv blwpfSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQt c3RlcHMgc2VydmVyLXNpZGUgZ2VuZXJhdGVfc2VyaWVzJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0 ZSwgYWZ0ZXIgc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgk bm9kZSwgJ3NlcnZlci1zaWRlIChnZW5lcmF0ZV9zZXJpZXMpJyk7CisKKyRub2RlLT5wZ2JlbmNo KAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0U0cnLAorCTAsCisJW3Fye14kfV0sCisJ WworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJ cXJ7Z2VuZXJhdGluZyBkYXRhIFwoc2VydmVyLXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9uXCl9 LAorCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVw cyBzZXJ2ZXItc2lkZSBnZW5lcmF0ZV9zZXJpZXMnKTsKKworIyBDaGVjayBkYXRhIHN0YXRlLCBh ZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRub2Rl LCAnc2VydmVyLXNpZGUgKGdlbmVyYXRlX3NlcmllcyBzaW5nbGUgWEFDVCknKTsKKworJG5vZGUt PnBnYmVuY2goCisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRNRycsCisJMCwKKwlbcXJ7 XiR9XSwKKwlbCisJCXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0YWJs ZXN9LAorCQlxcntnZW5lcmF0aW5nIGRhdGEgXChzZXJ2ZXItc2lkZSBhcyBtdWx0aXBsZSB0cmFu c2FjdGlvbnNcKX0sCisJCXFye2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVuY2gg LS1pbml0LXN0ZXBzIHNlcnZlci1zaWRlIGdlbmVyYXRlX3NlcmllcycpOworCisjIENoZWNrIGRh dGEgc3RhdGUsIGFmdGVyIHNlcnZlci1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFf c3RhdGUoJG5vZGUsICdzZXJ2ZXItc2lkZSAoZ2VuZXJhdGVfc2VyaWVzIG11bHRpcGxlIFhBQ1Rz KScpOworCisKKyMgVGVzdCBzZXJ2ZXItc2lkZSBnZW5lcmF0aW9uIHdpdGggVU5ORVNUCiskbm9k ZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1kdFUnLAorCTAsCisJW3Fy e14kfV0sCisJWworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFi bGVzfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoc2VydmVyLXNpZGUgYXMgc2luZ2xlIHRyYW5z YWN0aW9uXCl9LAorCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0t aW5pdC1zdGVwcyBzZXJ2ZXItc2lkZSBVTk5FU1QnKTsKKworIyBDaGVjayBkYXRhIHN0YXRlLCBh ZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRub2Rl LCAnc2VydmVyLXNpZGUgKHVubmVzdCknKTsKKworJG5vZGUtPnBnYmVuY2goCisJJy0taW5pdGlh bGl6ZSAtLWluaXQtc3RlcHM9ZHRTVScsCisJMCwKKwlbcXJ7XiR9XSwKKwlbCisJCXFye2Ryb3Bw aW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQlxcntnZW5lcmF0aW5n IGRhdGEgXChzZXJ2ZXItc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb25cKX0sCisJCXFye2RvbmUg aW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIHNlcnZlci1zaWRl IFVOTkVTVCcpOworCisjIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIHNlcnZlci1zaWRlIGRhdGEg Z2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdzZXJ2ZXItc2lkZSAodW5uZXN0 KScpOworCiskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1kdE1V JywKKwkwLAorCVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30sCisJCXFy e2NyZWF0aW5nIHRhYmxlc30sCisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKHNlcnZlci1zaWRlIGFz IG11bHRpcGxlIHRyYW5zYWN0aW9uc1wpfSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJ XSwKKwkncGdiZW5jaCAtLWluaXQtc3RlcHMgc2VydmVyLXNpZGUgVU5ORVNUJyk7CisKKyMgQ2hl Y2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tf ZGF0YV9zdGF0ZSgkbm9kZSwgJ3NlcnZlci1zaWRlICh1bm5lc3QpJyk7CisKKworIyBUZXN0IGNs aWVudC1zaWRlIGdlbmVyYXRpb24gd2l0aCBDT1BZIFRFWFQKKyRub2RlLT5wZ2JlbmNoKAorCSct LWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0ZycsCisJMCwKKwlbcXJ7XiR9XSwKKwlbCisJCXFy e2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQlxcntnZW5l cmF0aW5nIGRhdGEgXChjbGllbnQtc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb259LAorCQlxcntk b25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBjbGllbnQt c2lkZSBURVhUIChzaW5nbGUgWEFDVCAjMSknKTsKKworIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRl ciBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRub2RlLCAn Y2xpZW50LXNpZGUgKHRleHQpJyk7CisKKyRub2RlLT5wZ2JlbmNoKAorCSctLWluaXRpYWxpemUg LS1pbml0LXN0ZXBzPWR0U2cnLAorCTAsCisJW3Fye14kfV0sCisJWworCQlxcntkcm9wcGluZyBv bGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRh IFwoY2xpZW50LXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9ufSwKKwkJcXJ7XGQgb2YgXGQrIHR1 cGxlcyBcKFxkJVwpIG9mIHBnYmVuY2hfYnJhbmNoZXMgZG9uZX0sCisJCXFye1xkIG9mIFxkKyB0 dXBsZXMgXChcZCVcKSBvZiBwZ2JlbmNoX3RlbGxlcnMgZG9uZX0sCisJCXFye1xkIG9mIFxkKyB0 dXBsZXMgXChcZCVcKSBvZiBwZ2JlbmNoX2FjY291bnRzIGRvbmV9LAorCQlxcntkb25lIGluIFxk K1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBjbGllbnQtc2lkZSBURVhU IChzaW5nbGUgWEFDVCAjMiknKTsKKworIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBjbGllbnQt c2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnY2xpZW50LXNp ZGUgKHRleHQpJyk7CisKKyRub2RlLT5wZ2JlbmNoKAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0 ZXBzPWR0TWcnLAorCTAsCisJW3Fye14kfV0sCisJWworCQlxcntkcm9wcGluZyBvbGQgdGFibGVz fSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50 LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rpb25zfSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQg cyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQtc3RlcHMgY2xpZW50LXNpZGUgVEVYVCAobXVsdGlw bGUgWEFDVHMpJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xpZW50LXNpZGUgZGF0 YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1zaWRlICh0ZXh0 KScpOworCisKKyMgVGVzdCBjbGllbnQtc2lkZSBnZW5lcmF0aW9uIHdpdGggQ09QWSBCSU5BUlkK KyRub2RlLT5wZ2JlbmNoKAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0YycsCisJMCwK KwlbcXJ7XiR9XSwKKwlbCisJCXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGlu ZyB0YWJsZXN9LAorCQlxcntnZW5lcmF0aW5nIGRhdGEgXChjbGllbnQtc2lkZSBhcyBzaW5nbGUg dHJhbnNhY3Rpb259LAorCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNo IC0taW5pdC1zdGVwcyBjbGllbnQtc2lkZSBCSU5BUlkgKHNpbmdsZSBYQUNUICMxKScpOworCisj IENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2No ZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZSAoYmluYXJ5KScpOworCiskbm9kZS0+ cGdiZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1kdFNjJywKKwkwLAorCVtxcnte JH1dLAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30sCisJCXFye2NyZWF0aW5nIHRhYmxl c30sCisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKGNsaWVudC1zaWRlIGFzIHNpbmdsZSB0cmFuc2Fj dGlvbn0sCisJCXFye2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVuY2ggLS1pbml0 LXN0ZXBzIGNsaWVudC1zaWRlIEJJTkFSWSAoc2luZ2xlIFhBQ1QgIzIpJyk7CisKKyMgQ2hlY2sg ZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xpZW50LXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0 YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1zaWRlIChiaW5hcnkpJyk7CisKKyRub2RlLT5wZ2JlbmNo KAorCSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0TWMnLAorCTAsCisJW3Fye14kfV0sCisJ WworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJ cXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rpb25z fSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQtc3Rl cHMgY2xpZW50LXNpZGUgQklOQVJZJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xp ZW50LXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2NsaWVu dC1zaWRlIChiaW5hcnkpJyk7CisKKworIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBkaWZmZXJl bnQgbW9kZXMgb2YgY2xpZW50LXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0 ZSgkbm9kZSwgJ2NsaWVudC1zaWRlIChiaW5hcnkpJyk7CisKKyRub2RlLT5wZ2JlbmNoKAorCSct LWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0TWNjU2MnLAorCTAsCisJW3Fye14kfV0sCisJWwor CQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJcXJ7 Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rpb25zfSwK KwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rp b25zfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgc2luZ2xlIHRyYW5z YWN0aW9ufSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWlu aXQtc3RlcHMgY2xpZW50LXNpZGUgQklOQVJZIChtdWx0aXBsZSBYQUNUIG1vZGVzKScpOworCisj IENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2No ZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZSAoYmluYXJ5IGRpZmZlcmVudCBYQUNU IG1vZGVzIGluIGxpc3Qgb2YgLS1pbml0LXN0ZXBzKScpOworCisKICMgUnVuIGFsbCBidWlsdGlu IHNjcmlwdHMsIGZvciBhIGZldyB0cmFuc2FjdGlvbnMgZWFjaAogJG5vZGUtPnBnYmVuY2goCiAJ Jy0tdHJhbnNhY3Rpb25zPTUgLURmb289YmxhIC0tY2xpZW50PTIgLS1wcm90b2NvbD1zaW1wbGUg LS1idWlsdGluPXQnCi0tIAoyLjQzLjAKCg== --_004_SA1PR08MB702308B377B110460FCDADA18847ASA1PR08MB7023namp_--