Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oE8oi-0001dN-Az for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Jul 2022 12:28:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oE8oh-00031A-5l for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Jul 2022 12:28:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oE8og-00030z-Ct for pgsql-hackers@lists.postgresql.org; Wed, 20 Jul 2022 12:28:38 +0000 Received: from esa19.fujitsucc.c3s2.iphmx.com ([216.71.158.62]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oE8od-0004pS-6U for pgsql-hackers@lists.postgresql.org; Wed, 20 Jul 2022 12:28:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1658320114; x=1689856114; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=Hem+BK/g9KrVoUaQQOF4WDjTAOdAzQSkU2vWnHmAbFo=; b=vGYX4G8PQ9Amh6QhpLtSyxVtPmharLPOoeTaLOxs1DwH8aAmFq3k/Ijz BHte3PJCjmvkCxPmg4Yn2qtKeWOuVDsjH0kcP/SxZg8kGuCmb/ExH3cQn 4KJNzaXLc4sCAttr6b0gY94XA2qHgHxjFzW1zXGaXazzOTUCkuMz57t5z +xrylED0Nm17WFrLHKayaK8qvQ+UKBN3V7IeuhEKrTeXkjLqSq1uENQUq +wJH6Y0wKP0/8u0HnjDGLwL5kbLeqCWKDUv9HodJr9gb7nPmPlDjiHmqb ScRgDLTrwhmLpXB2lsxiOhqBvjTAiCsWSKbdYuySyvNwL52UXDnOMslHT Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10413"; a="60492772" X-IronPort-AV: E=Sophos;i="5.92,286,1650898800"; d="scan'208,223";a="60492772" Received: from mail-os0jpn01lp2109.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.109]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jul 2022 21:28:29 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KQpWiWz5RRl0dzWOvyH347bLWF1Ru472Fz3sTFv8WUuWr08pJcebcUxD+yIgpNXkf0qOsblTZSKJvKwZ9jH76FIpw04eor3WN48wMcxmBA4oDFvBPuT9tdiNCyMifzQ5q4pmBqd1tLHs/OZOjinvD6qcfoMNgnC6+yoGpMWq6oddDY6rfU/b60mzdZXF1FY1MzjT/hroXO+GBNTgKC8dHFouEMfh/wuESRGpwRkrVh7oVx0x2l5RqlMWNEUU+4TuXuOBtw8t7BGmmwJJGXx44WXxBHSQu8A+S6j3krDcqvAYcGJK8W0T73VhDUufmLuVqxS0qoEGMBJwX/5z5z0DsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=OHDb93d0mYMZwyCpoYKNRjkXcxV9n/lz+9Agf3cjHd8=; b=buU/p9KpK0KTTs6EhghN6WmbstfaC5IEkQK0v9Mau/ThP46FkteKHD4YLNqxt+4dy73AWBXMHr6pP5xZ3tqV3uO8E83XnOSXlz0mwhLydSLmcGluk55fKdsQikBosGIaX7XjNHY2ESW03Euc3MmS1RdHAo17q7ygcqrnhL0b0P9w00zi5oRfifywwQZVx36a5MlOPy3xjzIQBV+Knxm3uhSdchDBUryDqGyyaLkgjh/fj+z600W1xBx1dZmIs2FVpikpp763k1RVlKMpfWNlEZmiTjBU3kiEg9du5lIahOtzI3syRhwwd3UWly1KbvEgeXZNKNpQ8AZ2TVOFXnqmzw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by TYAPR01MB3197.jpnprd01.prod.outlook.com (2603:1096:404:80::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5438.14; Wed, 20 Jul 2022 12:28:26 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::c943:3fe1:8fba:a589]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::c943:3fe1:8fba:a589%2]) with mapi id 15.20.5438.025; Wed, 20 Jul 2022 12:28:26 +0000 From: "houzj.fnst@fujitsu.com" To: Amit Kapila CC: Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers , Zheng Li , Peter Smith Subject: RE: Support logical replication of DDLs Thread-Topic: Support logical replication of DDLs Thread-Index: AQHYJz33Pggarn88u0G0lS13R7uLfKy9TlgAgAVZmgCAAA2xAIABMlkAgACE3QCAAKgDAIAAduOAgABm6oCABIs+AIACG98AgBfo2QCABsLLgIAyhVqAgBOd9QCAAOYWgIAAPoOAgAUH2oCABQvawIAPYMWAgAHJ99CAAn9yAIAAPzmAgAQqm4CAA6XiQIACJNSQgAsCywCAAPmNAIAAalXwgAAWjQCACT8UwIAEWbkAgAam+gCADNiE8A== Date: Wed, 20 Jul 2022 12:28:26 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9NzAxYjAwZGMtNWE4Mi00NjA0LWEwZDEtYzQ2ODY2Yjky?= =?utf-8?B?ZDc3O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFRO+/ou++gA==?= =?utf-8?B?776LO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX1NldERhdGU9MjAyMi0wNy0xMlQwODowMTozOVo7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1f7aad42-da5e-4cd1-0ce3-08da6a4b5842 x-ms-traffictypediagnostic: TYAPR01MB3197:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pcWr/S5q9OVGGlnFu4siIL4xEl6wgHudL7C/xlNqC0QPevqmwoK9VLu8EacWA8FD8h9FWIenVYTUXsrQSxZ8hJUW1I9elnvvkDwmBaMxun5vKiYz7wsk1b9DgCWARGVIgHheaHDWgxJHEHFYkF1L/rvtv7Y6vYsQkuvpc042lPSxLams9d9aGmHNZqTUkhS1B2YScXOKFXp9FHJFjslxevyt4DwDMR0xKEtFaAFvbHCDlTf/ld4Asbnz45lDV4x6YNnWVQkvCvAxOMH0m8fHnLnQXGo/T+V3SDvO42S4LMizzA+66A1Bfq4lRRiomZnehCZsayeD/UQ0RCdJXZjVpgrw/kpmfMBoPhjAe3g5j6j8gw3TbIZcvaFzQ86exTrrlsRpO/fyRenZxnPrtZ+IFrt1RkLzMMEwh42SykP0wq2iTjKoBVruTz+cvU5hLemi73pGhkdn7aE7k6thIWYrtMNqtBtbyqY3sYVS9wUvuWKbAuPRpO1htjpgkdRJgVpbG7imzhT9oSvKaOPir05lmpj8/u4VB/aCQh7mVpcqbovXNWBiWTmTeLt3XSsJxqEJcQK3669OEU2e+csLBKzC/ZQGKhR9ZkBfiwCnEqlFlY16v03/2ajLDy2OLu7V4EiDtl6pmTPOBtXx+JHDZF6Fvmtk08MJxJL/YPy9fTJsEX79/NeqdkwM9pGkbnbTyP/dDnkL/6dpVFD9u1aCJ+nHY7wR+lzEDLrUis9nS5kWz3xH5NEtsN5iIY0IMPjRi02XZnod2Aja5PC5+LOUrVFKJ5UNQKR2aHuZUkQrStYYtC0dM/PBNBLEulg7CS3Y2BTG x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(136003)(396003)(39860400002)(366004)(346002)(52536014)(8936002)(82960400001)(4744005)(316002)(38070700005)(186003)(5660300002)(76116006)(2906002)(4326008)(66556008)(64756008)(66446008)(99936003)(66476007)(38100700002)(71200400001)(8676002)(122000001)(9686003)(26005)(66946007)(55016003)(85182001)(6506007)(33656002)(6916009)(41300700001)(478600001)(53546011)(7696005)(86362001)(54906003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?blhiRnAwWUZFcFQrWmJ4RFd3Si81QWNQK01nelFvcmpmcDcxVTJHSExYVWlV?= =?utf-8?B?WlM3NXUvVldpTTVUZ1JZS2E5SWF2Z3NsaHFDRFdMVnZMVGFlM2ZsdFZiMCtF?= =?utf-8?B?N2R5SGhwUGQ0WFczQm5XejBWbjNMbHA5aG1WcENRdzV5b012anArSmJHQ3lK?= =?utf-8?B?RVF3aG84Y3FFOUtUNFNtYmVyV1JGYmdRc2NPY21sY0FIRGExTXZzc2ZHMnBH?= =?utf-8?B?MU9iY1dObEhmcXRQY0hBbGlSWElVR2QyVldxbGhUTEdSVlhKaFQxQXBXVXhr?= =?utf-8?B?M3F0dHA2K1pYQ0VjSGFyVHdYZjJuNTdoZjE0bUEyNCtIQUdsVGw1Qm0yVjhH?= =?utf-8?B?RjFkWHh0czdKT3Q2VUs0Qk0vdmdEL3U0N0JGdVFrcEZyc1VycTFDeThvTEpv?= =?utf-8?B?QmtVajAxL2kvVHVaOG10RVZicVBIU3dndnk5ZUhaQ01WNWJ4UXE3YnprdXhE?= =?utf-8?B?eHU4VzIvd3IxUjd6Qy9BaStNQ1R2MnhZa1p6dlQ3eW05WjJmOE5SK05QWStU?= =?utf-8?B?REZXeTVjNkhzakhGL3JRbzhVSDA5dzZ1aVNxREF1cFd1QnlwS3ZKS1Byb3h6?= =?utf-8?B?WmlYMldHSUZBQU5rZ0pXbGgwU21vdTNjRVNaaktuNXhGZmQ0ZWo3Qlpsc0dS?= =?utf-8?B?UUcrLzRXd0c5UlhiWGlLRFpGTmdMblBmOHh0RmtaRW9HNGZZb3JjdnZuaGRr?= =?utf-8?B?bGdjVHNtTm5HS3E1M3VGMEU4T1l6MWlkTFZBVXNSYjFwaUIvQnZiMElkdnN2?= =?utf-8?B?Wmh1VnFIK2tJN2xyMlI3cnpFdjh4cDFPRGNKeWRDb1JKSWRnSzJmaDViREFs?= =?utf-8?B?V3FtYmNPZGw0U1FvVExsUlpoZjM1RVZHN3FQOHZmTWZDMUtIc0FXZ1ZkSUc1?= =?utf-8?B?Z3NQYU1aR21VK0xtSnB5eFVpc1J3aDNhN1o2ejE1VmtCYUczeE14ODhRUUpS?= =?utf-8?B?WjZrODJwWWcwRUFxZkR3bDdHdEk2WXVDMkorUStBTy9raTBnTDY0bTBjYXNN?= =?utf-8?B?bk4wb3R1N2tJWHh2SHluampQUVV4bThIdjhwOEtlWW0rZ3RKemljUkV4a3lO?= =?utf-8?B?OHdES042Y0VGT2E5bmlxaWhPeDQrQnNQVjFDaFg0bUlRb05yOXlXclRiS29h?= =?utf-8?B?WnlIVU9EdCtWUGI4RzQwTCtueUZwZksvZW56T1lzdnBJVEtqOHpQaTVXZnBz?= =?utf-8?B?UW4zdi9SbWx0Q2RGWmxieEpWbTlIRnlVcFFCWFp4ejdPVUJsc3k1NVF0OFRv?= =?utf-8?B?RGl2K25vNi8xUktGVUNXRWZNTERyU0lUaVQvVElKZW14VmZaV0hiUHhyQWJV?= =?utf-8?B?Y3lzOG5xbHJjTm1zT3QwV0t0MnUvV281UHpVMUl3bzg4UGpZc2c4aDhQNUlZ?= =?utf-8?B?T1ZQSUcza0UwRzVWRFNYNE9FNlJpWXc1NWJhMHBtR3Q2WnpDSmNnSk0yNVQw?= =?utf-8?B?YWpocVpSblRTUStHcUhqNmZpZUxmUU01T0llQ2YveVE2VC84dG5BMUNSNGMy?= =?utf-8?B?QzdmNFVTSk84S2ZzMlZZeEhDanJWSXRHNENoL0ZMaFhMejRjZFk0ODdJaU1w?= =?utf-8?B?ekI3bmlZL2sweVlaWDc5dlRCdFdKNXJtSkl6S2k2UFpPRHhRY1JuT24yM0dy?= =?utf-8?B?UGszcmcrZU15cWt6cnJSSG9LeWtUZkhNZkc1Y2wzT3BPQ0ZRUlBoYndkK3VR?= =?utf-8?B?MXY4cEwyYzIvYlZwbER5dWtHUEtEeTRxcXdHS28wUW82cXg4c2x3UlFacTV5?= =?utf-8?B?MUtWN3lLRUVmMFA3K3I3MFBsTHN5RGJlZ0NqOGg1T1QwQmgvVmc4dFNiR0RX?= =?utf-8?B?dEtDUnFtZU83L2lBQkNNM0FZQTQ1L2NDU3VEbFFmV2EySUhIZjZTLzkyT3lB?= =?utf-8?B?Q25OQ21WOE9OMjRlb2lWeXVvMWJlSUhXdnVwbDJhczUwenlBdURJOFUxeG9T?= =?utf-8?B?U0hEaGpIY2tZVW9xL2ZSTkxXQWtHbHJFWEhnV3Rkd0hRWVczK1lRY3VndUxW?= =?utf-8?B?Z0hyRENBUVVVMWNjQ0ZKTTNRU0JXUEFZVjZUMGVTdTZUbC9McVE2dmduZGZ5?= =?utf-8?B?M0VXTEVYQ054ZCtzVTdkOWlncW1PemtLLzhmclI3Q1AvUXBLdEh0czc3TGJq?= =?utf-8?Q?XKDgh+0/tnQLHWWI5MFKcqo+C?= Content-Type: multipart/mixed; boundary="_005_OS0PR01MB5716FCCEF8009E4464042476948E9OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB5716.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1f7aad42-da5e-4cd1-0ce3-08da6a4b5842 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jul 2022 12:28:26.2005 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9dZH2+izzrkBBWLyVxKSAkGe/n0BO+lD+cZzI5yitwFIpm1nM77lKVjRmc/laTx9pGi6xB0qJEY5i4H6FeCqBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB3197 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS0PR01MB5716FCCEF8009E4464042476948E9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gVHVlc2RheSwgSnVseSAxMiwgMjAyMiA1OjA0IFBNIGhvdXpqLmZuc3RAZnVqaXRzdS5jb20g PGhvdXpqLmZuc3RAZnVqaXRzdS5jb20+IHdyb3RlOg0KPiBPbiBGcmlkYXksIEp1bHkgOCwgMjAy MiAxMDoyNiBBTSBQZXRlciBTbWl0aCA8c21pdGhwYjIyNTBAZ21haWwuY29tPg0KPiB3cm90ZToN Cj4gDQo+IA0KPiA+IEhlcmUgYXJlIHNvbWUgcmV2aWV3IGNvbW1lbnRzIGZvciB0aGUgcGF0Y2gg djExLTAwMDE6DQo+IA0KPiBBdHRhY2ggdGhlIFYxMiBwYXRjaCBzZXQgd2hpY2ggaW5jbHVkZSB0 aGUgZm9sbG93aW5nIGNoYW5nZXM6DQo+IA0KPiAqIEFkZHJlc3MgY29tbWVudHMgZnJvbSBwZXRl clsxXQ0KPiAqIFJlZmFjdG9yIHRoZSBkZXBhcnNlciBhbmQgcHJvdmlkZSBhbiBvcHRpb24gdG8g Y29udHJvbCB3aGV0aGVyIG91dHB1dCB0aGUNCj4gIm5vdCBwcmVzZW50IiBzeW50YXggcGFydC4N Cj4gICBBbmQgZm9yIERETCByZXBsaWNhdGlvbiwgd2UgZG9uJ3QgV0FMIGxvZyB0aGUgIm5vdCBw cmVzZW50IiBzeW50YXggc3RyaW5nIGZvcg0KPiBub3cuDQo+ICogQWRkcmVzcyBtb3N0IGNvbW1l bnRzIGZyb20gVmlnbmVzaFsyXSBleGNlcHQgdGhlIG9uZSBhYm91dCBwZ19kdW1wDQo+ICAgdnMg dGhlIGV2ZW50IHRyaWdnZXIgZm9yIGRkbCByZXBsaWNhdGlvbiB3aGljaCBuZWVkIHNvbWUgbW9y ZSByZXNlYXJjaC4NCg0KQXR0YWNoIHRoZSBuZXcgdmVyc2lvbiBwYXRjaCBzZXQgd2hpY2ggYWRk ZWQgc3VwcG9ydCBmb3IgQ1JFQVRFL0FMVEVSIEZVTkNUSU9OLA0KQ1JFQVRFL0FMVEVSIFBST0NF RFVSRSwgQ1JFQVRFL0FMVEVSIFRSSUdHRVIsIFJFTkFNRSBUQUJMRS9JTkRFWC9TRVFVRU5DRS4N Cg0KVGhhbmtzIHRvIFZpZ25lc2ggZm9yIGhlbHBpbmcgb2ZmIGxpc3QuDQoNCkJlc3QgcmVnYXJk cywNCkhvdSB6ag0KDQo= --_005_OS0PR01MB5716FCCEF8009E4464042476948E9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v13-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Description: v13-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch Content-Disposition: attachment; filename="v13-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch"; size=15404; creation-date="Wed, 20 Jul 2022 12:26:00 GMT"; modification-date="Wed, 20 Jul 2022 12:28:22 GMT" Content-Transfer-Encoding: base64 RnJvbSBkZDg2YWNiZjU2ZTMyOWNiMGJlNjUzYWMyZGVkZTA4MDEyYjQ0NjMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjkgSnVuIDIwMjIgMTc6MDQ6MzIgKzA4MDAKU3ViamVjdDogW1BBVENI XSBTdXBwb3J0IENSRUFURSBUQUJMRSBBUyBTRUxFQ1QgSU5UTwoKVGhlIG1haW4gaWRlYSBvZiBy ZXBsaWNhdGluZyB0aGUgQ1JFQVRFIFRBQkxFIEFTIGlzIHRoYXQgd2UgZGVwcmFzZSB0aGUgQ1JF QVRFClRBQkxFIEFTIGludG8gYSBzaW1wbGUgQ1JFQVRFIFRBQkxFKHdpdGhvdXQgc3VicXVlcnkp IGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQKYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZCBiZWZv cmUgd3JpdGluZyBkYXRhIGludG8gdGhlIHRhYmxlIGFuZCByZXBsaWNhdGUKdGhlIGluY29taW5n IHdyaXRlcyBsYXRlciBhcyBub3JtYWwgSU5TRVJUcy4gSW4gdGhpcyBhcHBvcmFjaCwgd2UgZG9u J3QgZXhlY3V0ZQp0aGUgc3VicXVlcnkgb24gc3Vic2NyaWJlciBzbyB0aGF0IGRvbid0IG5lZWQg dG8gbWFrZSBzdXJlIGFsbCB0aGUgb2JqZWN0cwpyZWZlcmVuY2VkIGluIHRoZSBzdWJxdWVyeSBh bHNvIGV4aXN0cyBpbiBzdWJzY3JpYmVyLiBBbmQgVGhpcyBhcHByb2FjaCB3b3Jrcwpmb3IgYWxs IGtpbmQgb2YgY29tbWFuZHMoZS5nLiBDUkFFVEUgVEFCTEUgQVMgW1NFTEVDVF1bRVhFQ1VURV1b VkFMVUVTXSkKCkludHJvZHVjaW5nIGEgbmV3IHR5cGUgb2YgZXZlbnQgdHJpZ2dlciAidGFibGVf aW5pdF93cml0ZSIuIHdoaWNoIHdvdWxkIGJlIGZpcmVkCmZvciBDUkVBVEUgVEFCTEUgQVMvU0VM RUNUIElOVE8gYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZApiZWZvcmUgYW55IG90aGVyIG1v ZGlmaWNhdGlvbi4gd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBpbiB0aGUgdGFibGVfaW5pdF93cml0 ZSBldmVudAp0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhl IHdhbHNlbmRlciB3aWxsIHNlbmQgdGhlCnN0cmluZyB0byBzdWJzY3JpYmVyLiBBbmQgaW5jb21p bmcgSU5TRVJUcyB3aWxsIGFsc28gYmUgcmVwbGljYXRlZC4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jICAgICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYyAgICAgfCAgMjQgKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYyAgIHwgMTcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgfCAgIDkgKysKIHNyYy9iYWNrZW5kL3Rj b3AvdXRpbGl0eS5jICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L2V2dGNhY2hlLmMgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgIHwg ICA0ICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICAgIHwgICA5ICstCiBz cmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oICAgICAgICAgICB8ICAgMyArLQogMTAgZmlsZXMg Y2hhbmdlZCwgMjMyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKaW5kZXggOWFiYmI2Yi4uOTg5ZTg5NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5j CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNs dWRlICJjYXRhbG9nL3RvYXN0aW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY3JlYXRlYXMuaCIK KyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv bWF0dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJjb21t YW5kcy90YWJsZWNtZHMuaCIKQEAgLTE0Myw2ICsxNDQsMTUgQEAgY3JlYXRlX2N0YXNfaW50ZXJu YWwoTGlzdCAqYXR0ckxpc3QsIEludG9DbGF1c2UgKmludG8pCiAJCVN0b3JlVmlld1F1ZXJ5KGlu dG9SZWxhdGlvbkFkZHIub2JqZWN0SWQsIHF1ZXJ5LCBmYWxzZSk7CiAJCUNvbW1hbmRDb3VudGVy SW5jcmVtZW50KCk7CiAJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEZpcmUgdGhlIHRyaWdnZXIg Zm9yIHRhYmxlX2luaXRfd3JpdGUgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIHNvCisJCSAqIHRo YXQgd2UgY2FuIGFjY2VzcyB0aGUgY2F0YWxvZyBpbmZvIGFib3V0IHRoZSBuZXdseSBjcmVhdGVk IHRhYmxlIGluCisJCSAqIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uLgorCQkgKi8KKwkJRXZlbnRUcmln Z2VyVGFibGVJbml0V3JpdGUoKE5vZGUgKikgY3JlYXRlLCBpbnRvUmVsYXRpb25BZGRyKTsKKwl9 CiAKIAlyZXR1cm4gaW50b1JlbGF0aW9uQWRkcjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCmluZGV4IGNiYWExNDYuLmFjZWI4MTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2Uu YwpAQCAtMzQwOSw2ICszNDA5LDI3IEBAIGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoQ29sbGVjdGVk Q29tbWFuZCAqY21kKQogfQogCiAvKgorICogRGVwYXJzZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFu ZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8gdGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRl cGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisgKiBDUkVBVEUgVEFCTEUgQVMgY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xs ZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0 cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQ3JlYXRlVGFibGVBcyk7CisKKwlwYXJz ZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFz LmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworfQorCisKKy8qCiAgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBj b21tYW5kcy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFu ZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCkBAIC0zNTQ1LDYgKzM1NjYsOSBAQCBkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2Rl KQogCQljYXNlIFNDVF9BbHRlclRhYmxlOgogCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0 bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9 IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0Ogog CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5 cGUpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBiZDZhMzU5Li5l ZDZjYzYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0xMzMsNyArMTMz LDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJaWYg KHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpICE9IDAgJiYKIAkJ c3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpICE9IDAgJiYKIAkJc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgIT0gMCAmJgotCQlzdHJjbXAoc3RtdC0+ ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDApCisJCXN0cmNtcChzdG10LT5ldmVudG5h bWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCAmJgorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAi dGFibGVfaW5pdF93cml0ZSIpICE9IDApCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBldmVudCBu YW1lIFwiJXNcIiIsCkBAIC0xNTksNyArMTYwLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0 ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUgdGFnIGxpc3QsIGlmIGFueS4gKi8K IAlpZiAoKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpID09IDAg fHwKIAkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSA9PSAwIHx8 Ci0JCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSA9PSAwKQorCQkgc3RyY21w KHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8fAorCQkgc3RyY21wKHN0bXQtPmV2 ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQogCQkmJiB0YWdzICE9IE5VTEwpCiAJ CXZhbGlkYXRlX2RkbF90YWdzKCJ0YWciLCB0YWdzKTsKIAllbHNlIGlmIChzdHJjbXAoc3RtdC0+ ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpID09IDAKQEAgLTU4NSw3ICs1ODcsOCBAQCBFdmVu dFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUsCiAJCWRiZ3RhZyA9IENyZWF0ZUNv bW1hbmRUYWcocGFyc2V0cmVlKTsKIAkJaWYgKGV2ZW50ID09IEVWVF9ERExDb21tYW5kU3RhcnQg fHwKIAkJCWV2ZW50ID09IEVWVF9ERExDb21tYW5kRW5kIHx8Ci0JCQlldmVudCA9PSBFVlRfU1FM RHJvcCkKKwkJCWV2ZW50ID09IEVWVF9TUUxEcm9wIHx8CisJCQlldmVudCA9PSBFVlRfVGFibGVJ bml0V3JpdGUpCiAJCXsKIAkJCWlmICghY29tbWFuZF90YWdfZXZlbnRfdHJpZ2dlcl9vayhkYmd0 YWcpKQogCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGNvbW1hbmQgdGFnIFwiJXNcIiIsIEdl dENvbW1hbmRUYWdOYW1lKGRiZ3RhZykpOwpAQCAtODY4LDYgKzg3MSwxNjMgQEAgRXZlbnRUcmln Z2VyVGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29u KQogCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiB9CiAKKworLyoKKyAqIEV2ZW50VHJpZ2dl clRhYmxlSW5pdFdyaXRlU3RhcnQKKyAqICAgICBQcmVwYXJlIHRvIHJlY2VpdmUgZGF0YSBvbiBh biBDUkVBVEUgVEFCTEUgQVMvU0VMRVQgSU5UTyBjb21tYW5kIGFib3V0CisgKiAgICAgdG8gYmUg ZXhlY3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9k ZSAqcGFyc2V0cmVlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZENvbW1h bmQgKmNvbW1hbmQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBz ZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5o aWJpdGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJY29tbWFuZCA9IHBhbGxvYyhzaXplb2Yo Q29sbGVjdGVkQ29tbWFuZCkpOworCisJY29tbWFuZC0+dHlwZSA9IFNDVF9DcmVhdGVUYWJsZUFz OworCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21tYW5k LT5kLmN0YXMuYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRyZXNzOworCWNvbW1hbmQtPmQuY3Rh cy5yZWFsX2NyZWF0ZSA9IE5VTEw7CisJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChw YXJzZXRyZWUpOworCisJY29tbWFuZC0+cGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jdXJyZW50Q29tbWFuZDsKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21t YW5kID0gY29tbWFuZDsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCisv KgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQKKyAqCQlGaW5pc2ggdXAgc2F2aW5n IGFuIENSRUFURSBUQUJMRSBBUy9TRUxFQ1QgSU5UTyBjb21tYW5kLgorICoKKyAqIEZJWE1FIHRo aXMgQVBJIGlzbid0IGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGFuIHhhY3Qvc3Vi eGFjdCBpcworICogYWJvcnRlZCBwYXJ0d2F5IHRocm91Z2guICBQcm9iYWJseSBpdCdzIGJlc3Qg dG8gYWRkIGFuCisgKiBBdEVPU3ViWGFjdF9FdmVudFRyaWdnZXJzKCkgdG8gZml4IHRoaXMuCisg Ki8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKHZvaWQpCit7CisJQ29sbGVj dGVkQ29tbWFuZCAqcGFyZW50OworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4 dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVj dGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJcGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFyZW50OworCisJcGZyZWUoY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmN1cnJlbnRDb21tYW5kID0gcGFyZW50OworfQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJz ZV90YWJsZV9pbml0X3dyaXRlCisgKgorICogRGVwYXJzZSB0aGUgZGRsIHRhYmxlIGNyZWF0ZSBj b21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxl X2luaXRfd3JpdGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7CisJ Q29sbGVjdGVkQ29tbWFuZCAgICpjbWQ7CisJY2hhciAgIAkJCSAgICpqc29uX3N0cmluZzsKKwor CWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5v dCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJQXNzZXJ0KGNtZCk7CisKKwlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQp OworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2Ug dGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3aWxs IGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZCB0 YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3Jp YmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkg dGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBtZXNz YWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNpc3Qg PT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsK KworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRl Y29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2Nv bW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9nTG9n aWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQs IERDVF9TaW1wbGVDbWQsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcp ICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogRmly ZSB0YWJsZV9pbml0X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRh YmxlSW5pdFdyaXRlKE5vZGUgKnJlYWxfY3JlYXRlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCit7 CisJTGlzdAkgICAqcnVubGlzdDsKKwlFdmVudFRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUNvbGxl Y3RlZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKgorCSAqIFNlZSBFdmVudFRyaWdnZXJERExDb21t YW5kU3RhcnQgZm9yIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkgZXZlbnQKKwkgKiB0cmlnZ2VycyBh cmUgZGlzYWJsZWQgaW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAoIUlzVW5kZXJQb3N0 bWFzdGVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsc28gZG8gbm90aGluZyBpZiBvdXIgc3Rh dGUgaXNuJ3Qgc2V0IHVwLCB3aGljaCBpdCB3b24ndCBiZSBpZiB0aGVyZQorCSAqIHdlcmVuJ3Qg YW55IHJlbGV2YW50IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBE REwKKwkgKiBjb21tYW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRoZXJlZm9yZSBzZWVtIG9wdGlvbmFs LCBidXQgaXQncworCSAqICpuZWNlc3NhcnkqLCBiZWNhdXNlIEV2ZW50VHJpZ2dlckNvbW1vblNl dHVwIG1pZ2h0IGZpbmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRpZG4ndCBleGlzdCBhdCB0aGUgdGlt ZSB0aGUgY29tbWFuZCBzdGFydGVkLgorCSAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlKQorCQlyZXR1cm47CisKKwkvKiBEbyBub3RoaW5nIGlmIG5vIGNvbW1hbmQgd2FzIGNvbGxl Y3RlZC4gKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQp CisJCXJldHVybjsKKworCWNvbW1hbmQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJl bnRDb21tYW5kOworCisJcnVubGlzdCA9IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKGNvbW1hbmQt PnBhcnNldHJlZSwKKwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5pdFdyaXRlLAorCQkJCQkJCQkJICAi dGFibGVfaW5pdF93cml0ZSIsCisJCQkJCQkJCQkgICZ0cmlnZGF0YSk7CisJaWYgKHJ1bmxpc3Qg PT0gTklMKQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIHJlYWwgQ3JlYXRlVGFibGUgc3RhdG1l bnQgYW5kIG9iamVjdCBhZGRyZXNzICovCisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0g cmVhbF9jcmVhdGU7CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBhZGRyZXNzOworCisJLyog UnVuIHRoZSB0cmlnZ2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJbnZva2UocnVubGlzdCwgJnRyaWdk YXRhKTsKKworCS8qIENsZWFudXAuICovCisJbGlzdF9mcmVlKHJ1bmxpc3QpOworCisJLyoKKwkg KiBNYWtlIHN1cmUgYW55dGhpbmcgdGhlIGV2ZW50IHRyaWdnZXJzIGRpZCB3aWxsIGJlIHZpc2li bGUgdG8gdGhlIG1haW4KKwkgKiBjb21tYW5kLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5jcmVt ZW50KCk7Cit9CisKIC8qCiAgKiBJbnZva2UgZWFjaCBldmVudCB0cmlnZ2VyIGluIGEgbGlzdCBv ZiBldmVudCB0cmlnZ2Vycy4KICAqLwpAQCAtMTE0OCw3ICsxMzA4LDggQEAgdHJhY2tEcm9wcGVk T2JqZWN0c05lZWRlZCh2b2lkKQogCSAqLwogCXJldHVybiBsaXN0X2xlbmd0aChFdmVudENhY2hl TG9va3VwKEVWVF9TUUxEcm9wKSkgPiAwIHx8CiAJCWxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVMb29r dXAoRVZUX1RhYmxlUmV3cml0ZSkpID4gMCB8fAotCQlsaXN0X2xlbmd0aChFdmVudENhY2hlTG9v a3VwKEVWVF9ERExDb21tYW5kRW5kKSkgPiAwOworCQlsaXN0X2xlbmd0aChFdmVudENhY2hlTG9v a3VwKEVWVF9ERExDb21tYW5kRW5kKSkgPiAwIHx8CisJCWxpc3RfbGVuZ3RoKEV2ZW50Q2FjaGVM b29rdXAoRVZUX1RhYmxlSW5pdFdyaXRlKSkgPiAwOwogfQogCiAvKgpAQCAtMTg3Miw2ICsyMDMz LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJ CWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJ Y2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJ ewogCQkJCQljaGFyCSAgICppZGVudGl0eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODks NiArMjA1MSw4IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlm IChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0 c2NmZy5hZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25m aWcpCisJCQkJCQlhZGRyID0gY21kLT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkg KiBJZiBhbiBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5k CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDEyZDRiMmUuLmZmNzU5 OTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC05NjYsNiArOTY2 LDExIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGlj YXRpb25TdG10ICpzdG10KQogCQkJQ01EVEFHX0FMVEVSX0lOREVYCiAJCX07CiAKKwkJQ29tbWFu ZFRhZwlpbml0X2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLAorCQkJ Q01EVEFHX1NFTEVDVF9JTlRPCisJCX07CisKIAkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9l bmQgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxf Y29tbWFuZF9lbmQiLCBlbmRfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1h bmRzKSwgbXlzZWxmLCBwdWJvaWQpOwpAQCAtOTc3LDYgKzk4MiwxMCBAQCBDcmVhdGVQdWJsaWNh dGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJ LyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERM UmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJ CQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKwor CQkvKiBDcmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVh dGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5k cywKKwkJCQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwog CX0KIAogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmlu ZGV4IDZiMGE4NjUuLjQ5MGI3M2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY1LDggKzE2NjUsMTAg QEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAog CQkJY2FzZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdy aXRlU3RhcnQocGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0 YXRlLCAoQ3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMs IHF1ZXJ5RW52LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoKTsKIAkJ CQlicmVhazsKIAogCQkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9ldnRjYWNoZS5jCmluZGV4IGY3ZjcxNjUuLjdmYjhjYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv ZXZ0Y2FjaGUuYwpAQCAtMTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9p ZCkKIAkJCWV2ZW50ID0gRVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwg InRhYmxlX3Jld3JpdGUiKSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQll bHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2 ZW50ID0gRVZUX1RhYmxlSW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggNTcxYjliNi4uYTRhZGM5YSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CkBAIC0xMTkwMSw0ICsxMTkwMSw3IEBACiB7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAogICBwcm9u YW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ ICdldmVudF90cmlnZ2VyJywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGlj YXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9 PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFt ZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9 PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1Ymxp Y2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaAppbmRleCBmZDJlZTdmLi5hOWUwZjcxIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oCkBAIC01NSw2ICs1NSwxMCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdn ZXJERExDb21tYW5kRW5kKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdn ZXJTUUxEcm9wKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJs ZVJld3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pOwogCitl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJl ZSk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRy ZWUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJs ZUluaXRXcml0ZUVuZCh2b2lkKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21w bGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVy eSh2b2lkKTsKIGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1 ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiLi4zZDI5NGEwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRl L3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENv bGxlY3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVs dFByaXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlT Q1RfQWx0ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5k VHlwZTsKIAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVk Q29tbWFuZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKwor CQlzdHJ1Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFs X2NyZWF0ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFu ZCAqcGFyZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvZXZ0Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZGRiNjdh Ni4uMWU2NDgzMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYg ZW51bQogCUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZUX1NR TERyb3AsCi0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1RhYmxl SW5pdFdyaXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdAotLSAKMi43 LjIud2luZG93cy4xCgo= --_005_OS0PR01MB5716FCCEF8009E4464042476948E9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v13-0002-Support-DDL-replication.patch" Content-Description: v13-0002-Support-DDL-replication.patch Content-Disposition: attachment; filename="v13-0002-Support-DDL-replication.patch"; size=126439; creation-date="Wed, 20 Jul 2022 12:26:00 GMT"; modification-date="Wed, 20 Jul 2022 12:28:23 GMT" Content-Transfer-Encoding: base64 RnJvbSAyZDExNDgxNzNjNWZiNDVjZDMxZTcwZWRjMTcxNTM4ZmI2N2E1ZjViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMTIgSnVsIDIwMjIgMTU6MDc6NDcgKzA4MDAKU3ViamVjdDogW1BBVENI XSBTdXBwb3J0IERETCByZXBsaWNhdGlvbi4KClRvIHN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLCB3 ZSB1c2UgZXZlbnQgdHJpZ2dlciBhbmQgRERMIGRlcGFyc2luZwpmYWNpbGl0aWVzLiBXaGlsZSBj cmVhdGluZyBhIHB1YmxpY2F0aW9uLCB3ZSByZWdpc3RlciBhIGNvbW1hbmQgZW5kCnRyaWdnZXIg dGhhdCBkZXBhcnNlcyB0aGUgRERMIGFzIGEgSlNPTiBibG9iLCBhbmQgV0FMIGxvZ3MgaXQuIFRo ZSBldmVudAp0cmlnZ2VyIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBhdCB0aGUgdGltZSBvZiBk cm9wIHB1YmxpY2F0aW9uLiBUaGUKV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMg aXQgZG93bnN0cmVhbSBzaW1pbGFyIHRvIG90aGVyIERNTApjb21tYW5kcy4gVGhlIHN1YnNjcmli ZXIgdGhlbiBjb252ZXJ0cyBKU09OIGJhY2sgdG8gdGhlIERETCBjb21tYW5kIHN0cmluZwphbmQg ZXhlY3V0ZXMgaXQuIEluIHRoZSBzdWJzY3JpYmVyLCB3ZSBhbHNvIGFkZCB0aGUgbmV3bHkgYWRk ZWQgcmVsIHRvCnBnX3N1YnNjcmlwdGlvbl9yZWwgc28gdGhhdCB0aGUgRE1MIGNoYW5nZXMgb24g dGhlIG5ldyB0YWJsZSBjYW4gYmUKcmVwbGljYXRlZCB3aXRob3V0IGhhdmluZyB0byBtYW51YWxs eSBydW4KIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTiIuCgpUaGlz IGlzIGEgUE9DIHBhdGNoIHRvIHNob3cgaG93IHVzaW5nIGV2ZW50IHRyaWdnZXJzIGFuZCBEREwg ZGVwYXJzaW5nCmZhY2lsaXRpZXMgd2UgY2FuIGltcGxlbWVudCBEREwgcmVwbGljYXRpb24uIFNv LCB0aGUgaW1wbGVtZW50YXRpb24gaXMKcmVzdHJpY3RlZCB0byBDUkVBVEUgVEFCTEUvQUxURVIg VEFCTEUvRFJPUCBUQUJMRSBjb21tYW5kcy4KCi0gRm9yIG5vbi1yZXdyaXRlIEFMVEVSIFtUQUJM RXxTRVFVRU5DRXxTQ0hFTUFdIGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBbVEFCTEV8U0VRVUVO Q0V8U0NIRU1BfElOREVYXSBjb21tYW5kOgotIEFuZCBvdGhlciB0YWJsZSB1bnJlbGF0ZWQgY29t bWFuZAp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGF0IGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmln Z2VyIGFuZCBXQUwgbG9nIHRoZQpkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhlIFdBTFNlbmRlciBk ZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGNyZWF0ZWQv YWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIEl0IHN1cHBvcnRzIG1vc3Qgb2YKQUxURVIgVEFC TEUgY29tbWFuZCBleGNlcHQgc29tZSBjb21tYW5kcyhEREwgcmVsYXRlZCB0byBQQVJUSVRJT05F RCBUQUJMRQouLi4pIHRoYXQgaW50cm9kdWNlZCByZWNlbnRseSB3aGljaCBoYXZlbid0IGJlZW4g c3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50CmRkbF9kZXBhcnNlciwgd2Ugd2lsbCBzdXBwb3J0IHRo YXQgbGF0ZXIuCgpOb3RlIHRoYXQgdGhlIHJlcGxpY2F0aW9uIGZvciBBTFRFUiBJTkRFWCBjb21t YW5kIGlzIHN0aWxsIHVuZGVyCnByb2dyZXNzLgoKLSBGb3IgRFJPUCBbVEFCTEV8U0VRVUVOQ0V8 U0NIRU1BfElOREVYXToKVGhlICdjb21tYW5kIHN0YXJ0JyBldmVudCBoYW5kbGVyIGxvZ3MgYSBk ZGwgbWVzc2FnZSB3aXRoIHRoZSByZWxpZHMgb2YKdGhlIHRhYmxlcyB0aGF0IGFyZSBkcm9wcGVk IHdoaWNoIHRoZSBvdXRwdXQgcGx1Z2luIChwZ291dHB1dCkgc3RvcmVzIGluCml0cyBpbnRlcm5h bCBkYXRhIHN0cnVjdHVyZSBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBpcyBmb3IgYSB0YWJsZSB0 aGF0IGlzCnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uLiBMYXRlciB0aGUgJ2NvbW1hbmQgZW5kJyBl dmVudCBoYW5kbGVyIHNlbmRzIHRoZQphY3R1YWwgZHJvcCBtZXNzYWdlLiBQZ291dHB1dCBvbiBy ZWNlaXZpbmcgdGhlIGNvbW1hbmQgZW5kLCBvbmx5IHNlbmRzIG91dAp0aGUgZHJvcCBjb21tYW5k IG9ubHkgaWYgaXQgaXMgZm9yIG9uZSBvZiB0aGUgcmVsaWRzIG1hcmtlZCBmb3IgZGVsZXRpbmcu ClRoZSByZWFzb24gd2UgaGF2ZSB0byBkbyB0aGlzIGlzIGJlY2F1c2UsIG9uY2UgdGhlIGxvZ2lj YWwgZGVjb2RlcgpyZWNlaXZlcyB0aGUgJ2NvbW1hbmQgZW5kJyBtZXNzYWdlLCAgdGhlIHJlbGlk IG9mIHRoZSB0YWJsZSBpcyBubyBsb25nZXIKdmFsaWQgYXMgaXQgaGFzIGJlZW4gZGVsZXRlZCBh cyBwYXJ0IG9mIGludmFsaWRhdGlvbnMgcmVjZWl2ZWQgZm9yIHRoZQpkcm9wIHRhYmxlIGNvbW1h bmQuIEl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byB2ZXJpZnkgaWYgdGhlIHRhYmxlIGlzCnBh cnQgb2YgdGhlIHB1YmxpY2F0aW9uIGxpc3Qgb3Igbm90LiBUbyBtYWtlIHRoaXMgcG9zc2libGUs IEkgaGF2ZSBhZGRlZAp0d28gbW9yZSBlbGVtZW50cyB0byB0aGUgZGRsIHhsb2cgYW5kIGRkbCBt ZXNzYWdlLCAocmVsaWQgYW5kIGNtZHR5cGUpLgoKV2UgY291bGQgaGF2ZSBhbHNvIGhhbmRsZWQg YWxsIHRoaXMgb24gdGhlIHN1YnNjcmliZXIgc2lkZSBhcyB3ZWxsLCBidXQKdGhhdCB3b3VsZCBt ZWFuIHNlbmRpbmcgc3B1cmlvdXMgZGRsIG1lc3NhZ2VzIGZvciB0YWJsZXMgdGhhdCBhcmUgbm90 IHBhcnQKb2YgdGhlIHB1YmxpY2F0aW9uLgoKLSBGb3IgdGFibGVfcmV3cml0ZSBBTFRFUiBUQUJM RSBjb21tYW5kOgooQUxURVIgQ09MVU1OIFRZUEUsIEFERCBDT0xVTU4gREVGQVVMVCwgU0VUIExP R0dFRCwgU0VUIEFDQ0VTUyBNRVRIT0QpCgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGFuZCBXQUwg bG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZyBhdAp0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdn ZXIuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3Jp YmVyIGlmIHRoZSBhbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hlZC4gVGhlbiwgdGhlIFdBTFNlbmRl ciB3aWxsCmNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUcyB0byBVUERBVEVzIGFu ZCBzZW5kIHRoZW0gdG8Kc3Vic2NyaWJlciBzbyB0aGF0IHRoZSBkYXRhIGJldHdlZW4gcHVibGlz aGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUKY29uc2lzdGVudC4gTm90ZSB0aGF0IHRo ZSB0YWJsZXMgdGhhdCBwdWJsaXNoIHJld3JpdGUgZGRsIG11c3QgaGF2ZSBhCnJlcGxpY2EgaWRl bnRpdHkgY29uZmlndXJlZCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlcGxpY2F0ZSB0aGUgdXBj b21pbmcKcmV3cml0ZSBVUERBVEVzLgoKV2UgZG8gdGhpcyB3YXkgYmVjYXVzZSBvZiB0d28gcmVh c29uOgooMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJl IGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0 aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3JpYmVyIHdoaWNoCmRvZXNuJ3QgZXhpc3QgaW4gcHVibGlz aGVyIGFsc28gZ2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0byBsZXQgdGhlCnN1YnNjcmliZXIgZXhl Y3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3cml0ZSBhbGwgdGhlIGRhdGEgYXQK Zmlyc3QuCgooMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJl IGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVu dCBmdW5jdGlvbnMvb3BlcmF0b3JzIHVzZWQgZHVyaW5nCnJld3JpdGUpLCBzbyB3ZSBuZWVkIHRv IHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtlZXAgdGhlIGRhdGEKY29uc2lzdGVu dC4KClRPIElNUFJPVkU6ClRoaXMgYXBwcm9hY2ggY291bGQgYmUgaW1wcm92ZWQgYnkgbGV0dGlu ZyB0aGUgc3Vic2NyaWJlciB0cnkgdG8gdXBkYXRlCnRoZSBleHRyYSBkYXRhIGl0c2VsZiBpbnN0 ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3JpdGUgZGRsIGFuZCB1c2UgdGhlCnVwY29taW5nIHJld3Jp dGUgVVBEQVRFcyB0byByZXdyaXRlIHRoZSByZXN0IGRhdGEuIFRvIGFjaGlldmUgdGhpcywgd2UK Y291bGQgbW9kaWZ5IHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZyB0byB0ZW1wb3JhcmlseSByZW1v dmUgdGhlIHJld3JpdGUKcGFydCBhbmQgYWRkIHNvbWUgbG9naWMgaW4gc3Vic2NyaWJlciB0byB1 cGRhdGUgdGhlIGV4dHJhIGRhdGEuCkJlc2lkZXMsIHdlIG1heSBub3QgbmVlZCB0byBzZW5kIHJl d3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUgb2YgcmV3cml0ZQpkZGwsIGZvciBleGFtcGxlLCBp dCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSClRB QkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRvZXNuJ3QgYWN0dWFsbHkg YmUgY2hhbmdlZC4gV2UKY291bGQgdXNlIHRoZSBkZXBhcnNlciBhbmQgZXZlbnQgdHJpZ2dlciB0 byBmaWx0ZXIgdGhlc2UgZGRscyBhbmQgc2tpcApzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3Ig dGhlbS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgICAgICAgICAg ICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2Mu YyB8ICA1MiArKysrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAg ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgICAgICAg ICAgICB8IDIxNCArKysrKysrKysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuYyAgICAgICAgICB8IDEwNiArKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGxtZXNzYWdlLmMgICAgfCAgODYgKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgICB8ICA0MSArKysKIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICAgIHwgIDkzICsrKysrKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgICAgfCAgNDggKysrCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyB8IDEzNiArKysrKysrKysKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICAgIHwgMjMyICsrKysr KysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAg ICB8IDE5MiArKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAg ICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAg ICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaCAgICAgICAgICAgIHwgIDYwICsrKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29k ZS5oICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxwcm90by5oICAgICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRw dXRfcGx1Z2luLmggICAgICAgICB8ICAyNyArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdv dXRwdXQuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVv cmRlcmJ1ZmZlci5oICAgICAgICAgfCAgMzkgKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BzcWwub3V0ICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wdWJsaWNhdGlvbi5vdXQgICAgICAgfCAzODggKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiAz MSBmaWxlcyBjaGFuZ2VkLCAxNTg1IGluc2VydGlvbnMoKyksIDIxMyBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1z Z2Rlc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvZGRsbWVzc2FnZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vZGRsbWVzc2FnZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCmluZGV4IGY4 OGQ3MmYuLmI4ZTI5ZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9N YWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE5 LDYgKzE5LDcgQEAgT0JKUyA9IFwKIAloYXNoZGVzYy5vIFwKIAloZWFwZGVzYy5vIFwKIAlsb2dp Y2FsbXNnZGVzYy5vIFwKKwlsb2dpY2FsZGRsbXNnZGVzYy5vIFwKIAlteGFjdGRlc2MubyBcCiAJ bmJ0ZGVzYy5vIFwKIAlyZWxtYXBkZXNjLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1n cmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi44MWRlZTUyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYworICoJICBybWdyIGRlc2NyaXB0b3Igcm91 dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAgKnJlYyA9IFhMb2dSZWNHZXREYXRhKHJl Y29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZP X01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJeworCQl4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICop IHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMtPm1lc3NhZ2U7CisJCWNoYXIJICAgKm1l c3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5wcmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAq c2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJlYy0+cHJlZml4X3NpemVdICE9ICdcMCcp OworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJlZml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1 IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVjLT5tZXNzYWdlX3NpemUpOworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhs cmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2FnZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9m IGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9z aXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyUwMlgiLCBzZXAs ICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOworCQkJc2VwID0gIiAiOworCQl9CisJfQor fQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbykKK3sK KwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdF KQorCQlyZXR1cm4gIkRETCBNRVNTQUdFIjsKKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IGMzNjVkZTMuLjk4OWM0OWEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEwMDUsNiArMTAwNSw3IEBAIEdldFB1YmxpY2F0 aW9uKE9pZCBwdWJpZCkKIAlwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlID0gcHViZm9ybS0+cHVi dXBkYXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBwdWJmb3JtLT5wdWJkZWxldGU7 CiAJcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJ cHViLT5wdWJhY3Rpb25zLnB1YmRkbCA9IHB1YmZvcm0tPnB1YmRkbDsKIAlwdWItPnB1YnZpYXJv b3QgPSBwdWJmb3JtLT5wdWJ2aWFyb290OwogCiAJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggZjQ2Zjg2NC4uZGI2NTNhMyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMzcsOCArMzcsMTEgQEAKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZnVuYy5oIgogI2luY2x1ZGUg InBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHku aCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNl LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ICNpbmNsdWRlICJ1dGlscy9ldnRjYWNoZS5oIgpAQCAtMTUzOSw2ICsxNTQyLDcgQEAgRXZlbnRU cmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKIAogCWNvbW1hbmQtPmQuYWx0 ZXJUYWJsZS5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwogCWNvbW1hbmQtPmQuYWx0ZXJU YWJsZS5vYmplY3RJZCA9IEludmFsaWRPaWQ7CisJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3Jp dGUgPSBmYWxzZTsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IE5JTDsKIAljb21t YW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CiAKQEAgLTE1NzIsNyArMTU3 Niw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpCiAgKiBpbnRl cm5hbGx5LCBzbyB0aGF0J3MgYWxsIHRoYXQgdGhpcyBjb2RlIG5lZWRzIHRvIGhhbmRsZSBhdCB0 aGUgbW9tZW50LgogICovCiB2b2lkCi1FdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNt ZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK0V2ZW50VHJpZ2dlckNvbGxl Y3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBi b29sIHJld3JpdGUpCiB7CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJQ29sbGVjdGVkQVRTdWJj bWQgKm5ld3N1YjsKQEAgLTE1OTIsNiArMTU5Niw3IEBAIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRl clRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQogCW5ld3N1 Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CiAJbmV3c3ViLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHN1 YmNtZCk7CiAKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFs dGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOwogCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0KIAkJbGFwcGVuZChjdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcywg bmV3c3ViKTsKIApAQCAtMjE3OSwzICsyMTg0LDIxMCBAQCBzdHJpbmdpZnlfYWRlZnByaXZzX29i anR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKQogCiAJcmV0dXJuICI/Pz8iOwkJCQkvKiBrZWVwIGNv bXBpbGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21t YW5kX3N0YXJ0CisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAq LworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwljaGFyCQkqY29tbWFu ZCA9IHBzcHJpbnRmKCJEcm9wIHRhYmxlIGNvbW1hbmQgc3RhcnQiKTsKKwlEcm9wU3RtdAkqc3Rt dDsKKwlMaXN0Q2VsbAkqY2VsbDE7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZj aW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2Vy Iik7CisKKwl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsK KwlzdG10CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJLyogZXh0cmFj dCB0aGUgcmVsaWQgZnJvbSB0aGUgcGFyc2UgdHJlZSAqLworCWZvcmVhY2goY2VsbDEsIHN0bXQt Pm9iamVjdHMpCisJeworCQljaGFyCXJlbHBlcnNpc3Q7CisJCU5vZGUJKm9iamVjdCA9IGxmaXJz dChjZWxsMSk7CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRpb24gcmVsYXRpb24g PSBOVUxMOworCisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlw ZSwKKwkJCQkJCQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFj Y2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisKKwkJcmVscGVyc2lzdCA9IGdl dF9yZWxfcGVyc2lzdGVuY2UoYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJLyoKKwkJICogRG8gbm90 IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJ CSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9n cyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQKKwkJICogdGFibGVzIGNhbiBh bHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcwor CQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQg Y29tbWFuZCBhbmQgdGhlCisJCSAqIGluY29taW5nIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNy ZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lT VEVOQ0VfVEVNUCkKKwkJeworCQkJdGFibGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJCQlj b250aW51ZTsKKwkJfQorCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgYWRkcmVz cy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0LAorCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4o Y29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0YWJsZV9jbG9zZShyZWxhdGlv biwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoK KyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQorICoKKyAqIERlcGFyc2UgdGhl IGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1Ymxp Y2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJ CQkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICAgKmNtZDsKKwljaGFyCQkJICAgKmpz b25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQll bG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJY21k ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCUFzc2VydChj bWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3Jl bF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisKKwkvKgorCSAqIERv IG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMg YSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxv Z3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBh bHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBt YWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBj b21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVh dGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5D RV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCisJLyogRGVwYXJzZSB0 aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNh bWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNl KTsKKworCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgi ZGVwYXJzZSIsIGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBEQ1RfVGFibGVBbHRlciwKKwkJ CQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKworCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX2Rk bF9jb21tYW5kX2VuZAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQu CisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5D VElPTl9BUkdTKQoreworCUxpc3RDZWxsICAgKmxjOworCXNsaXN0X2l0ZXIgIGl0ZXI7CisJRGVw YXJzZWRDb21tYW5kVHlwZSB0eXBlOworCU9pZCByZWxpZDsKKworCWlmICghQ0FMTEVEX0FTX0VW RU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0 cmlnZ2VyIG1hbmFnZXIiKTsKKworCWZvcmVhY2gobGMsIGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+Y29tbWFuZExpc3QpCisJeworCQljaGFyCQkJCXJlbHBlcnNpc3QgPSBSRUxQRVJTSVNURU5D RV9QRVJNQU5FTlQ7CisJCUNvbGxlY3RlZENvbW1hbmQgICAqY21kID0gbGZpcnN0KGxjKTsKKwkJ Y2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCQkvKiBSZXdyaXRlIERETCBoYXMgYmVlbiBoYW5k bGVkIGluIHRhYmxlX3Jld3JpdGUgdHJpZ2dlciAqLworCQlpZiAoY21kLT5kLmFsdGVyVGFibGUu cmV3cml0ZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSAm JgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkKSkKKwkJCWNv bnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpCisJCXsKKwkJCXJl bGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJCQl0eXBlID0gRENUX1RhYmxlQWx0 ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFNDVF9TaW1wbGUgZm9yIG5vdyAqLwor CQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisJCQl0eXBlID0gRENU X1NpbXBsZUNtZDsKKwkJfQorCisJCWlmIChnZXRfcmVsX3JlbGtpbmQocmVsaWQpKQorCQkJcmVs cGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVsaWQpOworCisJCS8qCisJCSAqIERvIG5v dCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYQor CQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxv Z3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCQkgKiBjYW4g YWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMg bWFrZXMgaXQKKwkJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VE IGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCQkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBj cmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJ U1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBEZXBhcnNlIHRoZSBEREwg Y29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUKKwkJICogc2Ft ZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBm YWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlM b2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlkLCB0eXBlLCBqc29uX3N0cmluZywK KwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCX0KKworCXNsaXN0X2ZvcmVhY2go aXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPlNRTERyb3BMaXN0KSkKKwl7CisJCXZv bGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJvcFN0bXQJCQkgICAqc3RtdDsKKwkJRXZl bnRUcmlnZ2VyRGF0YSAJICAgKnRyaWdkYXRhOworCQljaGFyCQkJCSAgICpjb21tYW5kOworCQlE ZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOworCisJCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dl ckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCQlzdG10CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0 YS0+cGFyc2V0cmVlOworCisJCW9iaiA9IHNsaXN0X2NvbnRhaW5lcihTUUxEcm9wT2JqZWN0LCBu ZXh0LCBpdGVyLmN1cik7CisKKwkJaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAidGFibGUi LCA1KSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9UYWJsZURyb3BFbmQ7CisJCWVsc2UgaWYgKHN0 cm5jbXAob2JqLT5vYmplY3R0eXBlLCAic2VxdWVuY2UiLCA1KSA9PSAwIHx8CisJCQkJIHN0cm5j bXAob2JqLT5vYmplY3R0eXBlLCAic2NoZW1hIiwgNSkgPT0gMCB8fAorCQkJCSBzdHJuY21wKG9i ai0+b2JqZWN0dHlwZSwgImluZGV4IiwgNSkgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0 RHJvcDsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9j b21tYW5kKG9iai0+b2JqaWRlbnRpdHksIG9iai0+b2JqZWN0dHlwZSwKKwkJCQkJCQkJCSAgIHN0 bXQtPmJlaGF2aW9yKTsKKworCQlpZiAoY29tbWFuZCA9PSBOVUxMKQorCQkJY29udGludWU7CisK KwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQs IGNtZHR5cGUsCisJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCX0KKwor CXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1Ymxp Y2F0aW9uY21kcy5jCmluZGV4IDhlNjQ1NzQuLjMyNmVjNjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCkBAIC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMv bm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9u LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5o IgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05 NSw2ICs5Nyw3IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRl LAogCXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRl ID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+ cHViZGRsID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAK IAkvKiBQYXJzZSBvcHRpb25zICovCkBAIC0xNDEsNiArMTQ0LDggQEAgcGFyc2VfcHVibGljYXRp b25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0 ZSA9IHRydWU7CiAJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9 PSAwKQogCQkJCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAo c3RyY21wKHB1Ymxpc2hfb3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRs ID0gdHJ1ZTsKIAkJCQllbHNlCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtNzQ5LDYgKzc1NCw1MyBAQCBDaGVja1B1YlJlbGF0 aW9uQ29sdW1uTGlzdChMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogfQog CiAvKgorICogQ3JlYXRlIGV2ZW50IHRyaWdnZXIgd2hpY2ggaXMgdXNlZCBmb3IgRERMIHJlcGxp Y2F0aW9uLgorICovCitzdGF0aWMgdm9pZAorQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcihj aGFyICpldmVudG5hbWUsIENvbW1hbmRUYWcgKmNvbW1hbmRzLAorCQkJCQkJCSBpbnQgbmNvbW1h bmRzLCBPYmplY3RBZGRyZXNzIHB1YmFkZHJlc3MsCisJCQkJCQkJIE9pZCBwdWJvaWQpCit7CisJ aW50CQkJCQlpOworCUxpc3QJCQkgICAqdGFncyA9IE5JTDsKKwlPaWQJCQkJCXRyaWdnZXJfaWQ7 CisJT2JqZWN0QWRkcmVzcwkJcmVmZXJlbmNlZDsKKwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxf dHJpZ2dlcjsKKwljaGFyCQkJCXRyaWdnZXJfbmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJCQl0 cmlnZ2VyX2Z1bmNfbmFtZVtOQU1FREFUQUxFTl07CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJp Z2dlcl9uYW1lX3ByZWZpeCA9ICJwZ19kZXBhcnNlX3RyaWdfJXNfJXUiOworCXN0YXRpYyBjb25z dCBjaGFyICAgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7 CisKKwlkZGxfdHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJc25w cmludGYodHJpZ2dlcl9uYW1lLCBzaXplb2YodHJpZ2dlcl9uYW1lKSwgdHJpZ2dlcl9uYW1lX3By ZWZpeCwKKwkJCSBldmVudG5hbWUsIHB1Ym9pZCk7CisJc25wcmludGYodHJpZ2dlcl9mdW5jX25h bWUsIHNpemVvZih0cmlnZ2VyX2Z1bmNfbmFtZSksIHRyaWdnZXJfZnVuY19wcmVmaXgsCisJCQkg ZXZlbnRuYW1lKTsKKworCWRkbF90cmlnZ2VyLT50cmlnbmFtZSA9IHBzdHJkdXAodHJpZ2dlcl9u YW1lKTsKKwlkZGxfdHJpZ2dlci0+ZXZlbnRuYW1lID0gZXZlbnRuYW1lOworCWRkbF90cmlnZ2Vy LT5mdW5jbmFtZSA9IFN5c3RlbUZ1bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsKKworCWZvciAo aSA9IDA7IGkgPCBuY29tbWFuZHM7IGkrKykKKwl7CisJCVN0cmluZyAqdGFnID0gbWFrZVN0cmlu Zyhwc3RyZHVwKEdldENvbW1hbmRUYWdOYW1lKGNvbW1hbmRzW2ldKSkpOworCQl0YWdzID0gbGFw cGVuZCh0YWdzLCB0YWcpOworCX0KKworCWRkbF90cmlnZ2VyLT53aGVuY2xhdXNlID0gbGlzdF9t YWtlMShtYWtlRGVmRWxlbSgidGFnIiwgKE5vZGUgKikgdGFncywgLTEpKTsKKworCXRyaWdnZXJf aWQgPSBDcmVhdGVFdmVudFRyaWdnZXIoZGRsX3RyaWdnZXIpOworCisJLyoKKwkgKiBSZWdpc3Rl ciB0aGUgZXZlbnQgdHJpZ2dlcnMgYXMgaW50ZXJuYWxseSBkZXBlbmRlbnQgb24gdGhlCisJICog cHVibGljYXRpb24uCisJICovCisJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBFdmVudFRy aWdnZXJSZWxhdGlvbklkLCB0cmlnZ2VyX2lkKTsKKwlyZWNvcmREZXBlbmRlbmN5T24oJnJlZmVy ZW5jZWQsICZwdWJhZGRyZXNzLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKK30KKworLyoKICAqIENy ZWF0ZSBuZXcgcHVibGljYXRpb24uCiAgKi8KIE9iamVjdEFkZHJlc3MKQEAgLTgyMCw2ICs4NzIs OCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0 aW9uU3RtdCAqc3RtdCkKIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGVsZXRlKTsKIAl2 YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0KIAkJQm9vbEdldERh dHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOworCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9u X3B1YmRkbCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsKIAl2YWx1 ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29sR2V0RGF0dW0o cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBAIC04ODIsNiArOTM2LDU1IEBAIENyZWF0 ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpz dG10KQogCQl9CiAJfQogCisJLyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dlciB0byBhbGxv dyBsb2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgorCSAqCisJICogVE9ETzogV2UgbmVlZCB0byBm aW5kIGEgYmV0dGVyIHN5bnRheCB0byBhbGxvdyByZXBsaWNhdGlvbiBvZiBEREwKKwkgKiBzdGF0 ZW1lbnRzLgorCSAqCisJICogWFhYOiBUaGlzIGNvZGUgaXMganVzdCB0byBzaG93IHRoZSByZXBs aWNhdGlvbiBvZiBDUkVBVEUvQUxURVIvRFJPUAorCSAqIFRBQkxFIHdvcmtzLiBXZSBuZWVkIHRv IGVuaGFuY2UgdGhpcyBvbmNlIHRoZSBhcHByb2FjaCBmb3IgRERMCisJICogcmVwbGljYXRpb24g aXMgZmluYWxpemVkLgorCSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRkbCkKKwl7CisJCUNvbW1h bmRUYWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJMRX07CisJCUNvbW1hbmRU YWcJcmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRBR19BTFRFUl9UQUJMRX07CisKKwkJQ29tbWFu ZFRhZwllbmRfY29tbWFuZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfUFJPQ0VEVVJFLAorCQkJ Q01EVEFHX0FMVEVSX1BST0NFRFVSRSwKKwkJCUNNRFRBR19DUkVBVEVfRlVOQ1RJT04sCisJCQlD TURUQUdfQUxURVJfRlVOQ1RJT04sCisJCQlDTURUQUdfQ1JFQVRFX1RSSUdHRVIsCisJCQlDTURU QUdfQUxURVJfVFJJR0dFUiwKKwkJCUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFHX0NSRUFU RV9UQUJMRSwKKwkJCUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfU0VRVUVO Q0UsCisJCQlDTURUQUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURUQUdfRFJPUF9TRVFVRU5DRSwK KwkJCUNNRFRBR19DUkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVNQSwKKwkJCUNN RFRBR19EUk9QX1NDSEVNQSwKKwkJCUNNRFRBR19DUkVBVEVfSU5ERVgsCisJCQlDTURUQUdfRFJP UF9JTkRFWCwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWAorCQl9OworCisJCS8qIENyZWF0ZSB0aGUg ZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50 VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0 aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIGRk bF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50 VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBzdGFydF9jb21tYW5kcywKKwkJCQkJCQkJCSBs ZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUg dGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZl bnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBs ZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0KKwogCXRhYmxl X2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRl SG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC0xMDIyLDYgKzExMjUs OSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVi bGljYXRpb25TdG10ICpzdG10LAogCiAJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRy dW5jYXRlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CiAJCXJl cGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IHRydWU7CisKKwkJ dmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSBCb29sR2V0RGF0dW0ocHVi YWN0aW9ucy5wdWJkZGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAt IDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4p CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDM5ZDhkMWUuLjQxMDY5YjUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RhYmxlY21kcy5jCkBAIC01MjE5LDcgKzUyMTksNyBAQCBBVEV4ZWNDbWQoTGlzdCAq KndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFu ZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwogCWlmIChjbWQpCi0JCUV2ZW50 VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJ CUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVz cywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVyIHRv IGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZS4uZjNlZWI2NyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIG92 ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCiAJ ZGVjb2RlLm8gXAorCWRkbG1lc3NhZ2Uub1wKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXAog CWxvZ2ljYWxmdW5jcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxt ZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5MzUyMwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2Fn ZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbG1lc3Nh Z2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklD QVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMK KyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2VzIGFsbG93IFhMT0cgbG9n Z2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBwYXNzZWQgdG8gdGhlIGxv Z2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9jZXNzaW5nIHRoZXkKKyAq IGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMgbG9naWNhbCBtZXNzYWdl cywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlvbmFsCisgKiBtb2RlLk5v dGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9uYWwuCisgKgor ICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgd2ls bCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1lIHdheSBhcyBE TUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJlZml4IHRvIGF2 b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1Z2lucy4gVGhl IHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlxdWUgcHJlZml4 LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVzZSB0aGUgbmFt ZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRl ICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisj aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1l c3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICogV3JpdGUgbG9n aWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dSZWNQdHIKK0xv Z0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNl ZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBzaXplX3Qg c2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJLyoKKwkgKiBFbnN1 cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAqLworCUFzc2VydChJc1RyYW5z YWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKKworCXhscmVjLmRi SWQgPSBNeURhdGFiYXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBpcyBjcml0aWNhbDsgc2VlIGxv Z2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0gc3RybGVuKHByZWZpeCkg KyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMucmVsaWQgPSByZWxpZDsK Kwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbkluc2VydCgpOworCVhMb2dS ZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZSk7CisJ WExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4KSwgeGxyZWMucHJlZml4 X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIG1lc3NhZ2UpLCBz aXplKTsKKworCS8qIGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlYTG9nU2V0UmVjb3JkRmxh Z3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0luc2VydChSTV9MT0dJQ0FM RERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQorCisvKgorICogUmVkbyBp cyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5nIGRkbCBtZXNzYWdlcy4K KyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQor eworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNL OworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9nKFBBTklD LCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKKworCS8q IFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNvZGluZywgc2VlIGRlY29k ZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXgg YzVjNmEyYi4uZTRlMGI2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29k ZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29k ZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjA0LDYgKzYwNSw0NiBAQCBsb2dpY2Fs bXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIg KmJ1ZikKIH0KIAogLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxERExNU0dfSUQgcmVjb3JkcyBm b3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAqLwordm9pZAorbG9naWNhbGRk bG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVy ICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3RfYnVpbGRlcjsK KwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9 IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyKSAmIH5Y TFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNHZXRPcmlnaW4o cik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKworCWlmIChpbmZvICE9IFhM T0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgUk1fTE9H SUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKworCVJlb3JkZXJCdWZmZXJQ cm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwgYnVmLT5vcmlncHRyKTsK KworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVzdCBmYXN0 LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2RpbmcgZGRsIG1lc3Nh Z2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVpbGRlcikgPCBTTkFQQlVJ TERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0dXJuOworCisJ bWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dSZWNHZXREYXRhKHIpOwor CisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNlIHx8CisJCUZp bHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOworCisJaWYgKFNuYXBCdWls ZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIpKQorCQlSZW9yZGVyQnVm ZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0ciwKKwkJCQkJ CQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2UgaXMgcHJlZml4 ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2Ut Pm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5yZWxp ZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKKy8qCiAgKiBDb25zb2xpZGF0ZWQgY29tbWl0IHJl Y29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21taXQKICAqIHJl Y29yZHMuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9s b2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwppbmRl eCA2MjVhN2Y0Li45ODk2OWM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9k ZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpA QCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVy QnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3RhdGljIHZvaWQgbWVzc2Fn ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAog CQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNo YXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1JlY1B0 ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkgIE9pZCByZWxpZCwg RGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXpl LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNrcyAqLwogc3Rh dGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBAIHN0YXRpYyB2b2lkIHN0cmVh bV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29uc3QgY2hhciAq cHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMg dm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s CisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lkIHJlbGlkLCBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXpl LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVuY2F0ZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJ CQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJlb3JkZXJCdWZm ZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBAQCBTdGFydHVwRGVjb2RpbmdD b250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPmFwcGx5 X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPmNvbW1pdCA9 IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1lc3NhZ2VfY2Jf d3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBkZGxtZXNzYWdlX2NiX3dyYXBw ZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3ZSByZXF1aXJlIHN0YXJ0L3N0 b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3IEBAIFN0YXJ0dXBEZWNvZGlu Z0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCQkoY3R4LT5jYWxsYmFja3Mu c3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2No YW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX21lc3NhZ2VfY2Ig IT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiICE9IE5V TEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0gTlVMTCk7CiAK IAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0 cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1pdCA9IHN0cmVh bV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jaGFuZ2UgPSBzdHJl YW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVzc2FnZSA9IHN0 cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1fZGRsbWVzc2Fn ZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1f dHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0xMjIxLDYgKzEy MzQsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiB9CiAKIHN0YXRpYyB2b2lkCitkZGxtZXNzYWdlX2NiX3dyYXBwZXIo UmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJICBYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlk LCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUs CisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUg c3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0 eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5kZGxtZXNzYWdlX2NiID09 IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJv ciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25h bWUgPSAiZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247 CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOwor CWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91 cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxs YmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0 cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRU cmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8q IGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLmRk bG1lc3NhZ2VfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0eXBl LAorCQkJCQkJCQkgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3Ig Y29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2 aW91czsKK30KKworc3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGZp cnN0X2xzbikKIHsKQEAgLTE1MzYsNiArMTU4Nyw0OCBAQCBzdHJlYW1fbWVzc2FnZV9jYl93cmFw cGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIHN0 YXRpYyB2b2lkCitzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNh Y2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9s c24sCisJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1h bmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCSBjb25z dCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hl LT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJv ckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2Zvcndh cmQpOworCisJLyogV2UncmUgb25seSBzdXBwb3NlZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1p bmcgaXMgc3VwcG9ydGVkLiAqLworCUFzc2VydChjdHgtPnN0cmVhbWluZyk7CisKKwkvKiB0aGlz IGNhbGxiYWNrIGlzIG9wdGlvbmFsICovCisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxt ZXNzYWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZv IG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRl LmNhbGxiYWNrX25hbWUgPSAic3RyZWFtX2RkbG1lc3NhZ2UiOworCXN0YXRlLnJlcG9ydF9sb2Nh dGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdp bl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJ ZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRl eHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4 LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8g dHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0g bWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8K KwljdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYihjdHgsIHR4biwgbWVzc2FnZV9s c24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21kdHlwZSwgbWVzc2FnZV9zaXplLCBtZXNz YWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRl eHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKworc3RhdGljIHZvaWQKIHN0cmVh bV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10s CiAJCQkJCQkgICBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZS4uZjM1NDA2MiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjYzLDYgKzY2Myw1MiBAQCBsb2dpY2Fs cmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9n UmVjUHRyIGxzbiwKIH0KIAogLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAq LworY2hhciAqCitsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9n UmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJICAgU2l6 ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRvdWJsZSBj aGVjayB3aGVuIGRvIHdlIG5lZWQgdG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFncyA9IHBx X2dldG1zZ2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJl Y29nbml6ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9IHBxX2dl dG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBw cV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVzKGluLCAq c3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdFIHRvIHN0 cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBv dXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25zdCBjaGFy ICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJCWZsYWdz ID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UpOwor CisJLyogdHJhbnNhY3Rpb24gSUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVhbWluZykg Ki8KKwlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMyKG91dCwg eGlkKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxz bik7CisJcHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91dCwgc3op OworCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKworLyoKICAqIFdyaXRlIHJl bGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCiB2b2lkCkBAIC0x MjE4LDYgKzEyNjQsOCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlw ZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19NRVNT QUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVT U0FHRToKKwkJCXJldHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJF UEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNH X1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jl b3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1 ZmZlci5jCmluZGV4IDg4YTM3ZmQuLjFmNmQ0ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVk ZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJw Z3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZm ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTIsNiArNTEzLDE0IEBA IFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZm ZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwog CQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxt c2cucHJlZml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgp OworCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxMOworCQkJ YnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCWlm IChjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFuZ2UtPmRh dGEuaW52YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04NjcsNiArODc2LDM2IEBAIFJlb3JkZXJCdWZm ZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogfQog CiAvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9j ZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3Nh Z2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSBYTG9nUmVj UHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwg Y29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlb3JkZXJCdWZm ZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydCh4aWQgIT0gSW52YWxpZFRyYW5zYWN0aW9uSWQp OworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4dCk7CisK KwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFjdGlvbiA9 IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cu cHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQgPSBy ZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUgPSBjbWR0eXBlOworCWNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ZGF0YS5k ZGxtc2cubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFuZ2UtPmRh dGEuZGRsbXNnLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVm ZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKICAqIEFzc2VydFRYTkxzbk9yZGVy CiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVv cmRlcmJ1ZmZlcgogICoKQEAgLTE5NTgsNiArMTk5NywyOSBAQCBSZW9yZGVyQnVmZmVyQXBwbHlN ZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIC8q CisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOIGZvciBhcHBs eWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorUmVvcmRlckJ1 ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJvb2wgc3RyZWFtaW5n KQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsbWVzc2FnZShyYiwgdHhuLCBj aGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LAorCQkJCQkJ CSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxt c2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLAor CQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwllbHNlCisJCXJiLT5kZGxt ZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNn LnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJICAgY2hh bmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1l c3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKK30KKwor LyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0 aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhl IHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCiAgKi8KQEAgLTIzMzUsNiArMjM5 NywxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4s IGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVG RkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdl KHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUgdGhlIGlu dmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJFeGVjdXRl SW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBAIC0zNzEw LDYgKzM3NzYsNDAgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVy ICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJCWNhc2Ug UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0 YTsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsbXNnLnBy ZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsbXNn Lm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9m KGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUo cmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVv cmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2Nh dGVkIGFib3ZlICovCisJCQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJi LT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBp bmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXpl b2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAm Y2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6 ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUs IHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRh LCBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgcHJlZml4X3NpemUpOworCQkJ CWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRp bmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cubWVz c2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJ CW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5n ZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5k ZGxtc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQljaGFyCSAgICpkYXRhOwpAQCAt NDAyNCw2ICs0MTI0LDE1IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2VTaXplKFJlb3JkZXJCdWZmZXJD aGFuZ2UgKmNoYW5nZSkKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVS X0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplID0gc3RybGVu KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6 ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNpemUp ICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KTsKKworCQkJCWJyZWFr OworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQl7 CiAJCQkJc3ogKz0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UpICoKQEAgLTQyOTks NiArNDQwOCwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVyQnVmZmVyICpy YiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJCWNhc2UgUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJcHJlZml4X3Np emU7CisKKwkJCQkvKiByZWFkIHByZWZpeCAqLworCQkJCW1lbWNweSgmcHJlZml4X3NpemUsIGRh dGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5 KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLCBkYXRhLCBzaXplb2YoT2lkKSk7CisJCQkJZGF0 YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlw ZSwgZGF0YSwgc2l6ZW9mKGludCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJCQkJY2hh bmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNvbnRleHQs IHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsIGRh dGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXhb cHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXplOworCisJ CQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLm1zZy5t ZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6 ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29udGV4dEFsbG9jKHJi LT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6 ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0YSwKKwkJCQkJICAg Y2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlX3NpemU7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBSRU9SREVSX0JV RkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewogCQkJCVNpemUJCWludmFsX3NpemUgPSBz aXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggMzhlM2IxYy4uMmM2NjdiYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcgQEAKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJv cHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCiAjaW5jbHVk ZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKQEAgLTE3OSw3ICsxODAsMTAgQEAKICNpbmNsdWRl ICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJz dG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNs dWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRl ICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0yNDYzLDYgKzI0 NjcsMjMwIEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5kX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKIH0KIAorLyogUmVtb3ZlIHRoZSBkYXRhIHBvcHVsYXRpb24gZnJvbSB0 aGUgY29tbWFuZCAqLworc3RhdGljIHZvaWQKK3ByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKFJhd1N0 bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCisJY29tbWFuZFRhZyA9 IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKiljb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFuZFRh ZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2FzZSBDTURUQUdfU0VM RUNUX0lOVE86CisJCQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3RtdCA9IChDcmVhdGVU YWJsZUFzU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQkJCWlmIChjYXN0bXQtPm9ianR5cGUgPT0g T0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0 YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBz aG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4K KwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tpcERhdGEgPSB0cnVlOworCQkJCX0KKwkJ CX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxFQ1Q6CisJCQl7CisJCQkJU2VsZWN0U3Rt dCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJaWYgKHNzdG10 LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3JjZSBza2lw cGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5 LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxpc2hlciBp bnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmludG9DbGF1c2UtPnNraXBEYXRhID0gdHJ1 ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisK Ky8qCisgKiBIYW5kbGUgQ1JFQVRFIFRBQkxFIGNvbW1hbmQKKyAqCisgKiBDYWxsIEFkZFN1YnNj cmlwdGlvblJlbFN0YXRlIGZvciBDUkVBVEUgVEFCRUwgY29tbWFuZCB0byBzZXQgdGhlIHJlbHN0 YXRlIHRvCisgKiBTVUJSRUxfU1RBVEVfUkVBRFkgc28gRE1MIGNoYW5nZXMgb24gdGhpcyBuZXcg dGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dAorICogaGF2aW5nIHRvIG1hbnVhbGx5IHJ1 biAiYWx0ZXIgc3Vic2NyaXB0aW9uIC4uLiByZWZyZXNoIHB1YmxpY2F0aW9uIgorICovCitzdGF0 aWMgdm9pZAoraGFuZGxlX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1h bmRUYWcJY29tbWFuZFRhZzsKKwlSYW5nZVZhcgkgKnJ2ID0gTlVMTDsKKwlPaWQJCQlyZWxpZDsK KwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lkOworCWNoYXIgCQkgKnNjaGVtYW5hbWUg PSBOVUxMOworCWNoYXIJCSAqcmVsbmFtZSA9IE5VTEw7CisKKwljb21tYW5kVGFnID0gQ3JlYXRl Q29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFuZFRhZykKKwl7 CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRToKKwkJCXsKKwkJCQlDcmVhdGVTdG10ICpjc3Rt dCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCQkJcnYgPSBjc3RtdC0+cmVsYXRp b247CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCWlmICgh cnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwlyZWxuYW1l ID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxuYW1lc3Bh Y2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAocmVsbmFt ZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQocmVsbmFt ZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlkKHJlbG5h bWUpOworCisJaWYgKHJlbGlkICE9IEludmFsaWRPaWQpCisJeworCQlBZGRTdWJzY3JpcHRpb25S ZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJCQkJCQkJU1VCUkVMX1NUQVRF X1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJCWVyZXBvcnQoREVCVUcxLAor CQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRlZCB0byBzdWJzY3JpcHRpb24g XCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCX0K K30KKworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwoU3RyaW5nSW5mbyBzKQoreworCVhM b2dSZWNQdHIgbHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJY2hhciAqbWVzc2Fn ZSA9IE5VTEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7CisJU2l6ZQkJc3o7CisJTGlzdAkgICAq cGFyc2V0cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFyc2V0cmVlX2l0ZW07CisJRGVzdFJlY2Vp dmVyICpyZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJY29uc3QgY2hhciAq c2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19xdWVyeV9zdHJpbmc7CisKKwltZXNzYWdl ID0gbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UocywgJmxzbiwgJnByZWZpeCwgJnN6KTsKKwor CS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJYmVnaW5f cmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBkZGxfZGVwYXJzZV9qc29uX3Rv X3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFuZDsKKwor CS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2ZXIgPSBDcmVh dGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdfcGFyc2VfcXVl cnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFyc2V0cmVlX2xp c3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpxdWVyeXRyZWVf bGlzdDsKKwkJUmF3U3RtdAkgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJzdChwYXJzZXRy ZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29udGV4dCBwZXJf cGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJYm9vbAkJIHNu YXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChO b2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgaW4gcGFy c2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7 CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5kICovCisJCXBy ZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8qCisJCSAqIFNldCB1cCBhIHNu YXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5nIHdpbGwgbmVlZCBvbmUuCisJCSAqLwor CQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChjb21tYW5kKSkKKwkJeworCQkJUHVzaEFj dGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQlzbmFwc2hvdF9zZXQg PSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8gdGhlIHdvcmsgZm9yIGVhY2ggcGFyc2V0 cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8KKwkJICogbGltaXQgdGhlIG1lbW9yeSB1 c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMgaW4gdGhlIHN0cmluZy4KKwkJICovCisJ CXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVu dE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1dGVfc3FsX3N0cmluZyBwZXItc3RhdGVt ZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQlvbGRj b250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7CisK KwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX2ZpeGVkcGFyYW1zKGNv bW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCU5VTEws IDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocXVlcnl0cmVl X2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKworCQkvKiBEb25lIHdpdGggdGhlIHNuYXBz aG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8KKwkJaWYgKHNuYXBzaG90X3NldCkKKwkJ CVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFsID0gQ3JlYXRlUG9ydGFsKCJsb2dpY2Fs IHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2ZSB0 byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwgYmVjYXVzZSBldmVyeXRoaW5nCisJCSAq IHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlNZXNzYWdlQ29udGV4dCBvciB0aGUKKwkJ ICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28gd2lsbCBvdXRsaXZlIHRoZSBwb3J0YWwg YW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVlcnkocG9ydGFsLAorCQkJCQkJICBOVUxM LAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAgY29tbWFuZFRhZywKKwkJCQkJCSAgcGxh bnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJLyoKKwkJICogU3RhcnQgdGhlIHBvcnRh bC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJCVBvcnRhbFN0YXJ0KHBvcnRhbCwgTlVM TCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgorCQkgKiBTd2l0Y2ggYmFjayB0byB0cmFu c2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJCSAqLworCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBvcnRhbFJ1bihwb3J0YWwsCisJCQkJCQkg RkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSByZWNlaXZlciwK KwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsKKworCQlQb3J0YWxEcm9wKHBvcnRhbCwg ZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisKKwkJLyoKKwkJICogVGFi bGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRhdGFiYXNlIGxldmVsKSBpcyBhdXRvbWF0 aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gaGVyZS4KKwkJICovCisJCWhh bmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyogTm93IHdlIG1heSBkcm9wIHRoZSBw ZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMgY3JlYXRlZC4gKi8KKwkJTWVtb3J5Q29u dGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCX0KKworCWRlYnVnX3F1ZXJ5X3N0 cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOworCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7 Cit9CisKIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2FnZSBkaXNw YXRjaGVyLgpAQCAtMjUyOCw2ICsyNzU2LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8g cykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FH RToKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7CisJCQlicmVhazsKKwogCQljYXNlIExPR0lDQUxf UkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KHMpOwog CQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9w Z291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpp bmRleCAyY2JjYTRhLi45MTYzMThmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKQEAgLTU0LDYgKzU0LDExIEBAIHN0YXRpYyB2b2lkIHBnb3V0cHV0X21l c3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSBSZW9yZGVyQnVmZmVy VFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCiAJCQkJCQkJIGJvb2wgdHJhbnNhY3Rp b25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCSBTaXplIHN6LCBjb25zdCBjaGFyICpt ZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2RkbG1lc3NhZ2UoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LAorCQkJCQkJCQlSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sCisJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLAorCQkJ CQkJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCVNpemUgc3osIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdvdXRwdXRfb3JpZ2luX2ZpbHRlcihMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCSAgIFJlcE9yaWdpbklkIG9yaWdpbl9p ZCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bihMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsCkBAIC0yNTYsNiArMjYxLDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5p dChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5jaGFuZ2VfY2IgPSBwZ291dHB1dF9j aGFuZ2U7CiAJY2ItPnRydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJY2ItPm1lc3Nh Z2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5kZGxtZXNzYWdlX2NiID0gcGdvdXRwdXRf ZGRsbWVzc2FnZTsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29tbWl0X3R4bjsKIAogCWNi LT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG47CkBAIC0yNzIs NiArMjc4LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3Mg KmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3RyZWFtX2NvbW1pdDsKIAlj Yi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+c3RyZWFtX21lc3Nh Z2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fZGRsbWVzc2FnZV9jYiA9IHBn b3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPnN0cmVhbV90cnVuY2F0ZV9jYiA9IHBnb3V0cHV0X3Ry dW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3by1waGFzZSBjb21taXQgKi8K IAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJlYW1fcHJlcGFyZV90eG47CkBA IC00MDcsNiArNDE0LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCS8qIFRoaXMgcGx1Z2luIHVzZXMg YmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5cGUgPSBPVVRQVVRfUExVR0lOX0JJ TkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVzID0gdHJ1ZTsKIAogCS8qCiAJICog VGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNsb3QgaW5pdGlhbGl6YXRpb24uCkBA IC00ODAsNiArNDg4LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCQkvKiBJbml0IHB1YmxpY2F0aW9u IHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7CisJCWRhdGEtPmRlbGV0ZWRf cmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBmYWxzZTsKIAkJQ2FjaGVSZWdp c3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQsCiAJCQkJCQkJCQkgIHB1YmxpY2F0 aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTEzNjIsOSArMTM3MSwyMiBAQCBwZ291dHB1dF9jaGFu Z2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ UmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hhbmdlLT5hY3Rpb247CiAJVHVwbGVU YWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3X3Nsb3QgPSBO VUxMOworCWJvb2wJCQl0YWJsZV9yZXdyaXRlID0gZmFsc2U7CiAKIAl1cGRhdGVfcmVwbGljYXRp b25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7CiAKKwkvKgorCSAqIEZvciBoZWFwIHJld3JpdGVzLCB3 ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0ZSB0aGVtIGlmIHRoZSByZXdyaXR0ZW4KKwkgKiB0YWJs ZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwgbWVzc2FnZS4gU28gZ2V0IHRoZSBhY3R1YWwgcmVsYXRp b24gaGVyZSBhbmQKKwkgKiBjaGVjayB0aGUgcHViYWN0aW9uIGxhdGVyLgorCSAqLworCWlmIChy ZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKQorCXsKKwkJdGFibGVfcmV3cml0ZSA9IHRydWU7 CisJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGF0aW9uLT5yZF9yZWwtPnJl bHJld3JpdGUpOworCQl0YXJnZXRyZWwgPSByZWxhdGlvbjsKKwl9CisKIAlpZiAoIWlzX3B1Ymxp c2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9uKSkKIAkJcmV0dXJuOwogCkBAIC0xMzk4LDYgKzE0MjAs MTMgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNzZXJ0KGZhbHNlKTsKIAl9CiAKKwkvKgorCSAqIFdlIGRv bid0IHB1Ymxpc2ggdGFibGUgcmV3cml0ZSBjaGFuZ2UgdW5sZXNzIHdlIHB1Ymxpc2ggdGhlIHJl d3JpdGUgZGRsCisJICogbWVzc2FnZS4KKwkgKi8KKwlpZiAodGFibGVfcmV3cml0ZSAmJiAhcmVs ZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQlyZXR1cm47CisKIAkvKiBBdm9pZCBsZWFraW5n IG1lbW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91ciBvd24gY29udGV4dCAqLwogCW9sZCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250ZXh0KTsKIApAQCAtMTQyNyw4ICsxNDU2 LDggQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCiAJCQkvKiBDaGVjayByb3cgZmlsdGVyICovCi0JCQlp ZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVu dHJ5LAotCQkJCQkJCQkJICZhY3Rpb24pKQorCQkJaWYgKCF0YWJsZV9yZXdyaXRlICYmCisJCQkJ IXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5 LCAmYWN0aW9uKSkKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTE0NDgsOCArMTQ3NywxOSBAQCBw Z291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQltYXliZV9zZW5kX3NjaGVtYShjdHgsIGNoYW5nZSwgcmVsYXRpb24sIHJl bGVudHJ5KTsKIAogCQkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JCQls b2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90 LAotCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CisKKwkJCS8qCisJ CQkgKiBDb252ZXJ0IHRoZSByZXdyaXRlIGluc2VydHMgdG8gdXBkYXRlcyBzbyB0aGF0IHRoZSBz dWJzY3JpYmVyCisJCQkgKiBjYW4gcmVwbGF5IGl0LiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHN1 cmUgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGlzIGNv bnNpc3RlbnQuCisJCQkgKi8KKwkJCWlmICh0YWJsZV9yZXdyaXRlKQorCQkJCWxvZ2ljYWxyZXBf d3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwKKwkJCQkJCQkJCQlOVUxMLCBu ZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1bW5zKTsKKwkJ CWVsc2UKKwkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRy ZWwsIG5ld19zbG90LAorCQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMp OwogCQkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xNTc5LDYgKzE2MTksOSBAQCBwZ291dHB1 dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJCWFuY2VzdG9yID0gTlVMTDsKIAl9CiAKKwlpZiAodGFibGVfcmV3cml0ZSkKKwkJUmVs YXRpb25DbG9zZShyZWxhdGlvbik7CisKIAkvKiBDbGVhbnVwICovCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZCk7CiAJTWVtb3J5Q29udGV4dFJlc2V0KGRhdGEtPmNvbnRleHQpOwpAQCAtMTY1 Niw4ICsxNjk5LDggQEAgcGdvdXRwdXRfdHJ1bmNhdGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIHN0YXRpYyB2b2lkCiBwZ291dHB1dF9tZXNz YWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAot CQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNo YXIgKnByZWZpeCwgU2l6ZSBzeiwKLQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkKKwkJCQkgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAorCQkJCSBjb25zdCBjaGFy ICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJUEdPdXRwdXREYXRh ICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKIAlU cmFuc2FjdGlvbklkIHhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwpAQCAtMTY5Nyw2ICsxNzQw LDEzNyBAQCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiB9CiAK K3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQlYTG9nUmVjUHRyIG1lc3NhZ2VfbHNu LAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCVBHT3V0 cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZh dGU7CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0gKFBHT3V0cHV0VHhuRGF0YSAqKSB0eG4t Pm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IE5VTEw7CisJVHJh bnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlSZWxhdGlvblN5bmNFbnRy eSAqcmVsZW50cnk7CisKKwkvKgorCSAqIFJlbWVtYmVyIHRoZSB4aWQgZm9yIHRoZSBtZXNzYWdl IGluIHN0cmVhbWluZyBtb2RlLiBTZWUKKwkgKiBwZ291dHB1dF9jaGFuZ2UuCisJICovCisJaWYg KGluX3N0cmVhbWluZykKKwkJeGlkID0gdHhuLT54aWQ7CisKKwlzd2l0Y2ggKGNtZHR5cGUpCisJ eworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJCS8qCisJCQkgKiBPbiBEUk9QIHN0YXJ0 LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0IGlmIHRoZQorCQkJICogcmVs aWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9ydHMgZGRsIHB1YmxpY2F0aW9u LiBXZQorCQkJICogbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBlbmQsIHRoZSByZWxpZCB3aWxs IG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERyb3AgZW5kLCB2ZXJpZnkgdGhh dCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBpcyBvbiB0aGUgZGVsZXRlZF9y aWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJCSAqIG1lc3NhZ2UuCisJCQkg Ki8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJQXNz ZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJl bGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJCQlkYXRh LT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxp ZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJcmV0dXJuOworCQljYXNlIERD VF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChkYXRhLT5kZWxldGVkX3Jl bGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJCQlkYXRhLT5kZWxldGVkX3Jl bGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCQkJ YnJlYWs7CisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCQkvKgorCQkJICogRm9yIHRhYmxlIHJl d3JpdGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmlnaW5hbCBkZGwgbWVzc2FnZSB0bworCQkJ ICogc3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElOU0VSVCB0 byBVUERBVEUgYW5kCisJCQkgKiBzZW5kIHRoZW0gdG8gc3Vic2NyaWJlciBzbyB0aGF0IHRoZSBk YXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZAorCQkJICogc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJl IGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8gdGhpcyB3YXkgYmVjYXVzZSBvZiB0d28g cmVhc29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3JpdGUgZGRs IGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1 YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3JpYmVyCisJCQkg KiB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sIHdl IG5lZWQgdG8gbGV0CisJCQkgKiB0aGUgc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCBy ZXdyaXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUKKwkJCSAqIGRhdGEgYXQgZmlyc3QuCisJCQkg KgorCQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyByZXdyaXRlIGRkbCBjb3VsZCBi ZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlcihkdWUgdG8g ZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZAorCQkJICogZHVyaW5nIHJld3JpdGUp LCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtlZXAKKwkJ CSAqIHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogVE8gSU1QUk9WRTogV2UgY291 bGQgaW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgb25seQorCQkJICogcmV3 cml0ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3JpdGUgYW5kIHVz ZSB0aGUKKwkJCSAqIHVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRlIHRoZSByZXN0 IGRhdGEuIEJlc2lkZXMsIHdlIG1heQorCQkJICogbm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNo YW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUgZGRsLCBmb3IKKwkJCSAqIGV4YW1wbGUsIGl0 IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3IgQUxURVIKKwkJ CSAqIFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRvZXNuJ3QgYWN0 dWFsbHkgYmUKKwkJCSAqIGNoYW5nZWQuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25J ZEdldFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChyZWxhdGlvbik7CisKKwkJCXJlbGVudHJ5 ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJLyoKKwkJCSAqIFNr aXAgc2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBwdWJsaXNoIGRkbCBtZXNzYWdlIG9yIHRo ZSBkZGwKKwkJCSAqIG5lZWQgdG8gYmUgcHVibGlzaGVkIHZpYSBpdHMgcm9vdCByZWxhdGlvbi4K KwkJCSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfHwKKwkJCQlyZWxl bnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkKKwkJCXsKKwkJCQlSZWxhdGlvbkNsb3Nl KHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlIERDVF9T aW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisK KwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQlyZWxlbnRyeSA9IGdl dF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmICghcmVsZW50cnktPnB1 YmFjdGlvbnMucHViZGRsKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJ CXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX09iamVjdERyb3A6CisJCQkv KiBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bnN1cHBvcnRlZCB0eXBlICVkIiwgY21kdHlwZSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBTZW5k IEJFR0lOIGlmIHdlIGhhdmVuJ3QgeWV0ICovCisJaWYgKHR4bmRhdGEgJiYgIXR4bmRhdGEtPnNl bnRfYmVnaW5fdHhuKQorCQlwZ291dHB1dF9zZW5kX2JlZ2luKGN0eCwgdHhuKTsKKworCU91dHB1 dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWxvZ2ljYWxyZXBfd3JpdGVfZGRsbWVz c2FnZShjdHgtPm91dCwKKwkJCQkJCQkJeGlkLAorCQkJCQkJCQltZXNzYWdlX2xzbiwKKwkJCQkJ CQkJcHJlZml4LAorCQkJCQkJCQlzeiwKKwkJCQkJCQkJbWVzc2FnZSk7CisJT3V0cHV0UGx1Z2lu V3JpdGUoY3R4LCB0cnVlKTsKKworCWlmIChyZWxhdGlvbikKKwkJUmVsYXRpb25DbG9zZShyZWxh dGlvbik7Cit9CisKIC8qCiAgKiBDdXJyZW50bHkgd2UgYWx3YXlzIGZvcndhcmQuCiAgKi8KQEAg LTE5NzQsNyArMjE0OCw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEs IFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2NoZW1hX3NlbnQgPSBmYWxzZTsKIAkJZW50 cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9 IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9Ci0JCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQkJZW50cnkt PnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPQor CQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFsc2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9 IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0 YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwpAQCAtMjAzMiw2ICsyMjA3LDcgQEAg Z2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24p CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUg PSBmYWxzZTsKKwkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFsc2U7CiAKIAkJLyoKIAkJ ICogVHVwbGUgc2xvdHMgY2xlYW51cHMuIChXaWxsIGJlIHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVk KS4KQEAgLTIxNDUsNiArMjMyMSw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEg KmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0 ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRy eS0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRkbDsKIAogCQkJCS8q CiAJCQkJICogV2Ugd2FudCB0byBwdWJsaXNoIHRoZSBjaGFuZ2VzIGFzIHRoZSB0b3AtbW9zdCBh bmNlc3RvcgpAQCAtMjMzMCw2ICsyNTA3LDcgQEAgcmVsX3N5bmNfY2FjaGVfcHVibGljYXRpb25f Y2IoRGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwgdWludDMyIGhhc2h2YWx1ZSkKIAl7CiAJCWVudHJ5 LT5yZXBsaWNhdGVfdmFsaWQgPSBmYWxzZTsKIAl9CisKIH0KIAogLyogU2VuZCBSZXBsaWNhdGlv biBvcmlnaW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hl LmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IGJkYjc3MWQuLjZj MTA5NzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNTYyNyw2ICs1NjI3LDcg QEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGlj YXRpb25EZXNjICpwdWJkZXNjKQogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBw dWJmb3JtLT5wdWJ1cGRhdGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1 YmZvcm0tPnB1YmRlbGV0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBw dWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHVi Zm9ybS0+cHViZGRsOwogCiAJCS8qCiAJCSAqIENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5j ZWQgaW4gdGhlIGZpbHRlciBleHByZXNzaW9uIGFyZSBwYXJ0CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBlNGZk YjZiLi4zMTg5YTRmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTM4NzMsNiArMzg3Myw3IEBAIGdldFB1Ymxp Y2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpbnQJCQlpX3B1 YnVwZGF0ZTsKIAlpbnQJCQlpX3B1YmRlbGV0ZTsKIAlpbnQJCQlpX3B1YnRydW5jYXRlOworCWlu dAkJCWlfcHViZGRsOwogCWludAkJCWlfcHVidmlhcm9vdDsKIAlpbnQJCQlpLAogCQkJCW50dXBz OwpAQCAtMzg4OCwyMyArMzg4OSwyOSBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwg aW50ICpudW1QdWJsaWNhdGlvbnMpCiAJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CiAKIAkvKiBH ZXQgdGhlIHB1YmxpY2F0aW9ucy4gKi8KLQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAw MDApCisJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1 ZmZlcihxdWVyeSwKIAkJCQkJCSAgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1l LCAiCiAJCQkJCQkgICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5w dWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJ2 aWFyb290ICIKKwkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRh dGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YmRkbCwgcC5wdWJ2aWFyb290ICIK KwkJCQkJCSAgIkZST00gcGdfcHVibGljYXRpb24gcCIpOworCWVsc2UgaWYgKGZvdXQtPnJlbW90 ZVZlcnNpb24gPj0gMTMwMDAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKKwkJCQkJCSAg IlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCisJCQkJCQkgICJwLnB1Ym93 bmVyLCAiCisJCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRl LCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIHAucHVidmlh cm9vdCAiCiAJCQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlIGlmIChmb3V0 LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksCiAJ CQkJCQkgICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJICAi cC5wdWJvd25lciwgIgotCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1 YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3Qg IgorCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5w dWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBmYWxzZSBBUyBwdWJ2 aWFyb290ICIKIAkJCQkJCSAgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVsc2UKIAkJYXBw ZW5kUFFFeHBCdWZmZXIocXVlcnksCiAJCQkJCQkgICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQs IHAucHVibmFtZSwgIgogCQkJCQkJICAicC5wdWJvd25lciwgIgotCQkJCQkJICAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1 YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCSAgInAucHViYWxsdGFibGVz LCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVu Y2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJICAi RlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwg cXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBAIC0zOTIwLDYgKzM5MjcsNyBAQCBnZXRQ dWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaV9wdWJ1 cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRlIik7CiAJaV9wdWJkZWxldGUgPSBQUWZu dW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0cnVuY2F0ZSA9IFBRZm51bWJlcihyZXMs ICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsID0gUFFmbnVtYmVyKHJlcywgInB1YmRkbCIpOwog CWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFyb290Iik7CiAKIAlwdWJpbmZv ID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykpOwpAQCAtMzk0Myw2 ICszOTUxLDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGlj YXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZWxldGUpLCAidCIp ID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRlID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1 ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09IDApOworCQlwdWJpbmZvW2ldLnB1YmRk bCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRkbCksICJ0IikgPT0gMCk7 CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBp LCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCkBAIC00MDIyLDYgKzQwMzIsMTUgQEAgZHVt cFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9uSW5mbyAqcHViaW5m bykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAKKwlpZiAocHViaW5mby0+cHViZGRsKQorCXsKKwkJ aWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCAiKTsKKworCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImRkbCIpOworCQlmaXJzdCA9IGZhbHNlOworCX0K KwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiJyIpOwogCiAJaWYgKHB1YmluZm8tPnB1 YnZpYXJvb3QpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCAxZDIxYzI5Li42OWI5NGFlIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgK QEAgLTYyMCw2ICs2MjAsNyBAQCB0eXBlZGVmIHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9v bAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRlOwogCWJvb2wJCXB1YnZpYXJvb3Q7CisJ Ym9vbAkJcHViZGRsOwogfSBQdWJsaWNhdGlvbkluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5j CmluZGV4IDZiOGMxN2IuLjc5MmY0MzggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9y bWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNyw2ICsy Nyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5k cy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmln aW4uaCIKICNpbmNsdWRlICJybWdyZGVzYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRl ZnMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMKaW5kZXggODhkOTJhMC4uOGI5YzlhNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTYwNDcsNyAr NjA0Nyw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQUUV4cEJ1 ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5T3B0IG15b3B0ID0g cHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKwlz dGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJaWYgKHBz ZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjA4Miw2ICs2MDgyLDEwIEBAIGxpc3RQdWJs aWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwK IAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBnZXR0ZXh0X25v b3AoIlZpYSByb290IikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE0MDAwMCkKKwkJYXBwZW5k UFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsIEFTIFwiJXNcIiIsCisJCQkJ CQkgIGdldHRleHRfbm9vcCgiRERMcyIpKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYs CiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKQEAgLTYxNjks NiArNjE3Myw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJ UEdyZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVuY2F0ZTsKIAlib29sCQloYXNfcHVi dmlhcm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJUFFFeHBCdWZmZXJEYXRhIHRpdGxlOwog CXByaW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02MTg1LDYgKzYxOTAsNyBAQCBkZXNjcmliZVB1 YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRlID0gKHBz ZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2ZXJzaW9u ID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNTAwMDApOwog CiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCkBAIC02MTk4LDYgKzYyMDQsOSBAQCBkZXNjcmli ZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCWlmIChoYXNfcHVidmlhcm9vdCkK IAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVidmlhcm9vdCIpOwor CWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJCSAi LCBwdWJkZGwiKTsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJICJcbkZST00g cGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CiAKQEAgLTYyNDYsNiArNjI1NSw4IEBAIGRl c2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQluY29scysrOwogCQlp ZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQluY29scysrOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCW5j b2xzKys7CiAKIAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVy KCZ0aXRsZSwgXygiUHVibGljYXRpb24gJXMiKSwgcHVibmFtZSk7CkBAIC02MjYwLDYgKzYyNzEs OCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRU YWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJUcnVuY2F0ZXMiKSwgdHJ1ZSwgYWxp Z24pOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250 LCBnZXR0ZXh0X25vb3AoIlZpYSByb290IiksIHRydWUsIGFsaWduKTsKKwkJaWYgKGhhc19wdWJk ZGwpCisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkRETHMiKSwg dHJ1ZSwgYWxpZ24pOwogCiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJl cywgaSwgMiksIGZhbHNlLCBmYWxzZSk7CiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdl dHZhbHVlKHJlcywgaSwgMyksIGZhbHNlLCBmYWxzZSk7CkBAIC02MjcwLDYgKzYyODMsOCBAQCBk ZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFk ZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3KSwgZmFsc2UsIGZhbHNlKTsKIAkJaWYg KGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUo cmVzLCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlwcmludFRh YmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBmYWxzZSwgZmFsc2UpOwog CiAJCWlmICghcHViYWxsdGFibGVzKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCmluZGV4IDlhNzQ3 MjEuLjlkZTNiOGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCkBAIC00NywzICs0Nyw0IEBAIFBHX1JN R1IoUk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCBjb21taXRfdHNfcmVkbywgY29tbWl0X3Rz X2Rlc2MsIGNvbW1pdF90c19pCiBQR19STUdSKFJNX1JFUExPUklHSU5fSUQsICJSZXBsaWNhdGlv bk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9yaWdpbl9kZXNjLCByZXBsb3JpZ2luX2lk ZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQogUEdfUk1HUihSTV9HRU5FUklDX0lELCAi R2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19kZXNjLCBnZW5lcmljX2lkZW50aWZ5LCBO VUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCiBQR19STUdSKFJNX0xPR0lDQUxNU0dfSUQs ICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVkbywgbG9naWNhbG1zZ19kZXNjLCBsb2dp Y2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsbXNnX2RlY29kZSkKK1BH X1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2ljYWxERExNZXNzYWdlIiwgbG9naWNhbGRk bG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxvZ2ljYWxkZGxtc2dfaWRlbnRpZnksIE5V TEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKaW5kZXggZTM4MjMwZC4uNTcxYjliNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0x MTg5Miw0ICsxMTg5MiwxMyBAQAogeyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9PiAnZXhwYW5kIGpz b24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKICAgcHJvbmFtZSA9PiAnZGRs X2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAgcHJvYXJn dHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJyB9 LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVw YXJzZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5k JywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBw cm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJyB9LAoreyBvaWQg PT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSBzdGFy dCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQn LCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHBy b3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcgfSwKK3sgb2lk ID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFi bGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3 cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAn JywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCiBdCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggNDgyMDViYS4uNjA2YzAwOSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtNTQsNiArNTQsOSBAQCBDQVRBTE9H KHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25SZWxhdGlvbklkKQogCiAJLyogdHJ1ZSBp ZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVkIHVzaW5nIHJvb3Qgc2NoZW1hICovCiAJ Ym9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYgdGFibGUgY3JlYXRpb25zIGFyZSBwdWJs aXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1EYXRhX3BnX3B1YmxpY2F0aW9uOwogCiAv KiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3IEBAIHR5cGVkZWYgc3RydWN0IFB1Ymxp Y2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlwdWJkZWxldGU7CiAJYm9v bAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwogfSBQdWJsaWNhdGlvbkFjdGlvbnM7CiAK IHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5oCmluZGV4IDEwMDkxYzMuLmZkMmVlN2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmgKQEAgLTcxLDcgKzcxLDggQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVj dFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVjdElkKTsKIGV4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwKLQkJCQkJCQkJCQkJ CU9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisJCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJl c3MsCisJCQkJCQkJCQkJCQlib29sIHJld3JpdGUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2Vy QWx0ZXJUYWJsZUVuZCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEdy YW50KEludGVybmFsR3JhbnQgKmlzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGRjYTg2Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCkBAIC0wLDAgKzEs NjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRsbWVzc2FnZS5oCisgKgkgICBFeHBvcnRz IGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKyNkZWZpbmUgUEdfTE9HSUNBTF9E RExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgorI2luY2x1ZGUgImFjY2Vz cy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAi bm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9ydCBmb3Iga2VlcGluZyB0cmFjayBvZiBk ZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBlbnVtIERlcGFyc2VkQ29tbWFuZFR5cGUK K3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURyb3BTdGFydCwKKwlEQ1RfVGFibGVEcm9w RW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmplY3RDcmVhdGUsCisJRENUX09iamVjdERy b3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoKKyAqIEdlbmVyaWMgbG9naWNhbCBkZWNv ZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICovCit0eXBlZGVmIHN0cnVjdCB4bF9sb2dp Y2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJCQkJZGJJZDsJCQkvKiBkYXRhYmFzZSBPaWQgZW1p dHRlZCBmcm9tICovCisJU2l6ZQkJCQkJcHJlZml4X3NpemU7CS8qIGxlbmd0aCBvZiBwcmVmaXgg Ki8KKwlPaWQJCQkJCQlyZWxpZDsJCQkvKiBpZCBvZiB0aGUgdGFibGUgKi8KKwlEZXBhcnNlZENv bW1hbmRUeXBlCQljbWR0eXBlOwkJLyogdHlwZSBvZiBzcWwgY29tbWFuZCAqLworCVNpemUJCQkJ CW1lc3NhZ2Vfc2l6ZTsJICAvKiBzaXplIG9mIHRoZSBtZXNzYWdlICovCisKKwkvKgorCSAqIHBh eWxvYWQsIGluY2x1ZGluZyBudWxsLXRlcm1pbmF0ZWQgcHJlZml4IG9mIGxlbmd0aCBwcmVmaXhf c2l6ZQorCSAqLworCWNoYXIJCW1lc3NhZ2VbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30geGxf bG9naWNhbF9kZGxfbWVzc2FnZTsKKworI2RlZmluZSBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZQko b2Zmc2V0b2YoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSwgbWVzc2FnZSkpCisKK2V4dGVybiBYTG9n UmVjUHRyIExvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlk LCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkgICBjb25zdCBjaGFyICpk ZGxfbWVzc2FnZSwgc2l6ZV90IHNpemUpOworCisvKiBSTUdSIEFQSSovCisjZGVmaW5lIFhMT0df TE9HSUNBTF9ERExfTUVTU0FHRQkweDAwCit2b2lkCQlsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1Jl YWRlclN0YXRlICpyZWNvcmQpOwordm9pZAkJbG9naWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8g YnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Citjb25zdCBjaGFyICpsb2dpY2FsZGRsbXNn X2lkZW50aWZ5KHVpbnQ4IGluZm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RlY29kZS5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgK aW5kZXggNzQxYmY2NS4uNDI3YTdiOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vZGVjb2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKQEAgLTI3 LDYgKzI3LDcgQEAgZXh0ZXJuIHZvaWQgaGVhcDJfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHhhY3RfZGVjb2Rl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4 dGVybiB2b2lkIHN0YW5kYnlfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExv Z1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKK2V4dGVybiB2 b2lkIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExv Z1JlY29yZEJ1ZmZlciAqYnVmKTsKIAogZXh0ZXJuIHZvaWQgTG9naWNhbERlY29kaW5nUHJvY2Vz c1JlY29yZChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJIFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5k ZXggYTc3MWFiOC4uMmFiY2NiOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3Rv LmgKQEAgLTYxLDYgKzYxLDcgQEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9H SUNBTF9SRVBfTVNHX1JFTEFUSU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1kn LAogCUxPR0lDQUxfUkVQX01TR19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19ERExN RVNTQUdFID0gJ0wnLAogCUxPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFID0gJ2InLAogCUxP R0lDQUxfUkVQX01TR19QUkVQQVJFID0gJ1AnLAogCUxPR0lDQUxfUkVQX01TR19DT01NSVRfUFJF UEFSRUQgPSAnSycsCkBAIC0yMjksNyArMjMwLDExIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBf d3JpdGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJu IExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJ ICBib29sICpjYXNjYWRlLCBib29sICpyZXN0YXJ0X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExv Z1JlY1B0ciBsc24sCi0JCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpw cmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCQkJCQkJCQkJIGJvb2wgdHJh bnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJIFNpemUgc3osIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdl KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJ CQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsK K2V4dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBY TG9nUmVjUHRyICpsc24sIGNvbnN0IGNoYXIgKipwcmVmaXgsIFNpemUgKnN6KTsKIGV4dGVybiB2 b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhp ZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBM b2dpY2FsUmVwUmVsYXRpb24gKmxvZ2ljYWxyZXBfcmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggNTM5ZGM4ZS4uOTMzZDI5 NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtODksNiArODks MTggQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7 CiAKIC8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcy4K KyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZURETE1lc3NhZ2VDQikgKHN0cnVjdCBM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJ ICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJ CQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBtZXNz YWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKKy8qCiAgKiBG aWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8KIHR5cGVkZWYgYm9vbCAoKkxvZ2ljYWxEZWNv ZGVGaWx0ZXJCeU9yaWdpbkNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK QEAgLTIwMCw2ICsyMTIsMTkgQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbU1l c3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgKIAkJCQkJCQkJCQkJ ICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoKKyAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcg bG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJvbSBpbi1wcm9ncmVzcworICogdHJhbnNh Y3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2Fn ZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkJCSBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xz biwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJl bGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJ CQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdl KTsKKworLyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJv Z3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCiB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3Ry ZWFtVHJ1bmNhdGVDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0y MTksNiArMjQ0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9n aWNhbERlY29kZVRydW5jYXRlQ0IgdHJ1bmNhdGVfY2I7CiAJTG9naWNhbERlY29kZUNvbW1pdENC IGNvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlTWVzc2FnZUNCIG1lc3NhZ2VfY2I7CisJTG9naWNh bERlY29kZURETE1lc3NhZ2VDQiBkZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVGaWx0ZXJC eU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRkb3duQ0Ig c2h1dGRvd25fY2I7CiAKQEAgLTIzNyw2ICsyNjMsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQ bHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1p dF9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9jYjsKIAlM b2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxvZ2ljYWxE ZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2VfY2I7CiAJTG9naWNhbERl Y29kZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5D YWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IGVhZmVkZDYuLjhl YmNjMTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247CiAJ TGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOworCUxp c3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29sCQlzdHJlYW1pbmc7 CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgK aW5kZXggZDEwOWQwYi4uNzM3Mjg0YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJi dWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWls cy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisj aW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2lu dmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNh Y2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51bSBSZW9yZGVyQnVmZmVyQ2hhbmdl VHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFLAorCVJFT1JERVJfQlVG RkVSX0NIQU5HRV9ERExNRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9NRVNTQUdFLAog CVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT04sCiAJUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0lOVEVSTkFMX1NOQVBTSE9ULApAQCAtMTMwLDYgKzEzMywxNiBAQCB0eXBlZGVmIHN0cnVj dCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCQljaGFyCSAgICptZXNzYWdlOwogCQl9CQkJbXNnOwog CisJCS8qIERETCBNZXNzYWdlLiAqLworCQlzdHJ1Y3QKKwkJeworCQkJY2hhcgkgICAqcHJlZml4 OworCQkJU2l6ZQkJbWVzc2FnZV9zaXplOworCQkJY2hhcgkgICAqbWVzc2FnZTsKKwkJCU9pZAkJ CXJlbGlkOworCQkJRGVwYXJzZWRDb21tYW5kVHlwZQljbWR0eXBlOworCQl9CQkJZGRsbXNnOwor CiAJCS8qIE5ldyBzbmFwc2hvdCwgc2V0IHdoZW4gYWN0aW9uID09ICpfSU5URVJOQUxfU05BUFNI T1QgKi8KIAkJU25hcHNob3QJc25hcHNob3Q7CiAKQEAgLTQzMCw2ICs0NDMsMTYgQEAgdHlwZWRl ZiB2b2lkICgqUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJ CQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQljb25zdCBjaGFy ICptZXNzYWdlKTsKIAorLyogRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBl ZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIs CisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJ CQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNt ZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBzeiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpt ZXNzYWdlKTsKKwogLyogYmVnaW4gcHJlcGFyZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVk ZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJCZWdpblByZXBhcmVDQikgKFJlb3JkZXJCdWZmZXIgKnJi LAogCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsKQEAgLTQ5Niw2ICs1MTksMTcg QEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQikgKAogCQkJCQkJ CQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQkJICBjb25zdCBj aGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVy ZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQikgKAor CQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJ CQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJ CQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUg c3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIHN0cmVhbSB0cnVu Y2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJT dHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXIgKnJiLApAQCAt NTQxLDYgKzU3NSw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlckFwcGx5 VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVmZmVyQ29tbWl0Q0IgY29tbWl0 OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyRERMTWVz c2FnZUNCIGRkbG1lc3NhZ2U7CiAKIAkvKgogCSAqIENhbGxiYWNrcyB0byBiZSBjYWxsZWQgd2hl biBzdHJlYW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVwYXJlIHRpbWUuCkBAIC01NjAsNiArNTk1 LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ29tbWl0Q0Ig c3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5n ZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlOworCVJlb3Jk ZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2U7CiAJUmVvcmRlckJ1 ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlOwogCiAJLyoKQEAgLTYzNSw2ICs2 NzEsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UoUmVvcmRlckJ1ZmZl ciAqLCBUcmFuc2FjdGlvbklkLAogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2Fn ZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFNuYXBzaG90IHNuYXBzaG90LCBYTG9n UmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpw cmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdl KTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZl ciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVz c2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpOwogZXh0ZXJuIHZv aWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsCiAJ CQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwgWExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJ CQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVwT3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVj UHRyIG9yaWdpbl9sc24pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w c3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKaW5kZXggNjBhY2Jk MS4uZDUzNGNiZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CkBAIC01OTY5LDkgKzU5 NjksOSBAQCBMaXN0IG9mIHNjaGVtYXMKICgwIHJvd3MpCiAKIFxkUnAgIm5vLnN1Y2gucHVibGlj YXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9u cwotIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworIE5hbWUg fCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K ICgwIHJvd3MpCiAKIFxkUnMgIm5vLnN1Y2guc3Vic2NyaXB0aW9uIgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCAyNzRiMzdkLi4wOWIxNGUwIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMzAsMjAgKzMwLDIwIEBA IEVSUk9SOiAgY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMKIExJTkUgMTogLi4udWJf eHh4IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gJ3RydWUnLCBwdWJsaXNoX3Zp Li4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXgogXGRScAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJf aW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0 cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAo MiByb3dzKQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgU0VUIChwdWJsaXNo ID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUnKTsKIFxkUnAKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBO YW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBp Yl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1 bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAg ICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3LDEw ICs4NywxMCBAQCBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFibGUg dG8gYWRkIHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBc ZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJs aWMudGVzdHB1Yl90YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTk5LDIwICs5OSwyMCBA QCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gZHJvcCBzY2hlbWEg ZnJvbSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3J0YWJsZSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1 Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf dGJsMSIKIAogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHNjaGVtYSB0byAnRk9SIFRBQkxFJyBw dWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgQUxMIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTEzNCwx MCArMTM0LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIgaXMgbm90IHBhcnQg b2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGFibGUgdG8gc2No ZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQg VEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAKQEAg LTE1OSwxMCArMTU5LDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3JhbGx0YWJs ZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgx IHJvdykKIAogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7CkBAIC0xNzQsMTkgKzE3NCwxOSBAQCBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgog ICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzYSIKIAog XGRScCsgdGVzdHB1YjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWI0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymwz IgogCkBAIC0yMDcsMTAgKzIwNywxMCBAQCBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0g MTsKIC0tIG9ubHkgcGFyZW50IGlzIGxpc3RlZCBhcyBiZWluZyBpbiBwdWJsaWNhdGlvbiwgbm90 IHRoZSBwYXJ0aXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIEFERCBU QUJMRSB0ZXN0cHViX3BhcnRlZDsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yMjMsMTAg KzIyMywxMCBAQCBBTFRFUiBUQUJMRSB0ZXN0cHViX3BhcnRlZCBERVRBQ0ggUEFSVElUSU9OIHRl c3RwdWJfcGFydGVkMTsKIFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdCA9IHRydWUpOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQgICAgICAgIHwgZgog VGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI1NSwxMCArMjU1LDEw IEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3RibDIgV0hF UkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJF U0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6 CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3Ri bDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMjcxLDEwICsy NzEsMTAgQEAgVGFibGVzOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBBREQgVEFCTEUg dGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMTAwMCBBTkQgZSA8IDIwMDApOwogXGRScCsgdGVz dHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQg KGQgPCA1KSkKQEAgLTI5MCwxMCArMjkwLDEwIEBAIFB1YmxpY2F0aW9uczoKIAogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjUgRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDI7CiBcZFJwKyB0ZXN0 cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAg InB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDAp KQpAQCAtMzAxLDEwICszMDEsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJs MSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9u KQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBX SEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDMwMCkgQU5EIChl IDwgNTAwKSkKIApAQCAtMzM3LDEwICszMzcsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMg PSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MSBGT1IgVEFCTEUg dGVzdHB1Yl9yZl90YmwxLCBPTkxZIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA8IDk5OSkgV0lU SCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJw KyB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9zeW50YXgxCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5 OTkpCkBAIC0zNTAsMTAgKzM1MCwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJP Uic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHVi X3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5 OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3Jm X3RibDUiIFdIRVJFIChoIDwgOTk5KQpAQCAtNjc2LDEwICs2NzYsMTAgQEAgQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0 ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRl c3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfdGJsNSIgKGEpCiAKQEAgLTgyMSwxMCArODIxLDEwIEBAIENSRUFURSBUQUJMRSB0ZXN0 cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGludCwgYyBpbnQsIFBSSU1BUlkgS0VZIChh LGMpKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyBSRVBMSUNBIElERU5U SVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyc19wa2V5OwogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxkUnArIHRlc3RwdWJfYm90aF9maWx0ZXJz Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhf ZmlsdGVycwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9m aWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsX2Jv dGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAKQEAgLTEwMjksMTAgKzEwMjksMTAg QEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBw dWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2Zv cnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1 Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2ZvcnRibAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRl c3RwdWJfdGJsMSIKQEAgLTEwNzAsMTAgKzEwNzAsMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0 ZXN0cHViX2ZvcnRibCIKIAogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJf dGJsMSIKQEAgLTExNTEsMTAgKzExNTEsMTAgQEAgUkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSBy ZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVz dHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnArIHRlc3RwdWJfZGVm YXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Rl ZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBmYWlsIC0gbXVzdCBiZSBvd25lciBv ZiBwdWJsaWNhdGlvbgpAQCAtMTE2NCwyMCArMTE2NCwyMCBAQCBFUlJPUjogIG11c3QgYmUgb3du ZXIgb2YgcHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CiBSRVNFVCBST0xFOwogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBUTyB0ZXN0cHViX2ZvbzsKIFxkUnAgdGVz dHB1Yl9mb28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHB1YmxpY2F0aW9ucwotICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9u cworICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBm CiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlcjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAg ICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0 IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgIE5hbWUg ICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwg ZgogKDEgcm93KQogCiAtLSBhZGRpbmcgc2NoZW1hcyBhbmQgdGFibGVzCkBAIC0xMTkzLDE5ICsx MTkzLDE5IEBAIENSRUFURSBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSIo aWQgaW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz IGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1YjJfZm9yc2NoZW1hIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90 ZXN0MiwgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0 MiIKQEAgLTEyMTksNDQgKzEyMTksNDQgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2X2Zv cnNjaGVtYSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgIkNVUlJFTlRfU0NIRU1BIiwKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEi LiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVz dHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI0X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAKIFxkUnArIHRl c3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjZfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2 X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJS RU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJDVVJSRU5UX1NDSEVNQS5DVVJSRU5UX1NDSEVNQSIK IApAQCAtMTI5MCwxMCArMTI5MCwxMCBAQCBFUlJPUjogIHNjaGVtYSAidGVzdHB1Yl92aWV3IiBk b2VzIG5vdCBleGlzdAogLS0gZHJvcHBpbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUg Y2hhbmdlIGluIHB1YmxpY2F0aW9uCiBEUk9QIFNDSEVNQSBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0 cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTMwMSwyMCArMTMwMSwyMCBAQCBU YWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVuYW1pbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVj dCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFN RSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxX3JlbmFtZWQi CiAgICAgInB1Yl90ZXN0MiIKIAogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MV9yZW5hbWVkIFJFTkFN RSB0byBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3Qy IgpAQCAtMTMyMiwxMCArMTMyMiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIg cHVibGljYXRpb24gYWRkIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTMzNCwxMCArMTMzNCwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBB TEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEg Im5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM0NiwxMCArMTM0NiwxMCBAQCBUYWJsZXMgZnJv bSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwg VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBFUlJPUjogIHNjaGVtYSAicHViX3Rlc3QxIiBp cyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1YjFfZm9yc2NoZW1hIgogXGRS cCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzNTcsMTAgKzEzNTcs MTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGRyb3Agc2No ZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVT IElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAg ICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTM2 OCwxMCArMTM2OCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwog RVJST1I6ICB0YWJsZXMgZnJvbSBzY2hlbWEgInB1Yl90ZXN0MiIgYXJlIG5vdCBwYXJ0IG9mIHRo ZSBwdWJsaWNhdGlvbgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTEzNzksMjkgKzEz NzksMjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIx X2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7 CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxk UnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9wIGFsbCBzY2hlbWFzCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJf dGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJv dykKIAogLS0gYWx0ZXIgcHVibGljYXRpb24gc2V0IG11bHRpcGxlIHNjaGVtYQogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJf dGVzdDEsIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVz dDIiCkBAIC0xNDEwLDEwICsxNDEwLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIG5v bl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIg ZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIi CkBAIC0xNDIyLDEwICsxNDIyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW1vdmlu ZyB0aGUgZHVwbGljYXRlIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNj aGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTUwNCwxOCArMTUwNCwxOCBAQCBTRVQgY2xpZW50 X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9y c2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIz X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViM19mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnAr IHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTI1LDIwICsxNTI1LDIwIEBAIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hl bWEgRk9SIFRBQkxFIHB1Yl90ZXN0Mi50YmwxLCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVz dDE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWFf Zm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JzY2hlbWFfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVz dDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsg dGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6Ci0tIAoyLjcu Mi53aW5kb3dzLjEKCg== --_005_OS0PR01MB5716FCCEF8009E4464042476948E9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v13-0001-Functions-to-deparse-DDL-commands.patch" Content-Description: v13-0001-Functions-to-deparse-DDL-commands.patch Content-Disposition: attachment; filename="v13-0001-Functions-to-deparse-DDL-commands.patch"; size=170600; creation-date="Wed, 20 Jul 2022 12:26:00 GMT"; modification-date="Wed, 20 Jul 2022 12:28:24 GMT" Content-Transfer-Encoding: base64 RnJvbSBmNmMwYmEwMzYwOTU0YzhhYmEwOGVmMTIzMWEwZGQ3YjViNjMxZmU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IEZyaSwgMjcgTWF5IDIwMjIgMTM6NDc6MDUgKzA4MDAKU3ViamVjdDogW1BBVENI XSBGdW5jdGlvbnMgdG8gZGVwYXJzZSBEREwgY29tbWFuZHMuCgpUaGlzIHBhdGNoIHByb3ZpZGVz IEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCmxhdGVyIGJl IHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNwcmludGYt bGlrZQpleHBhbnNpb24uIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cg Zm9yIG1hY2hpbmUtZWRpdGluZyBvZgp0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWlu IG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KCk11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRo ZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQpjYXRhbG9ncywgbm90IGZy b20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZWxpYWJs eQpjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVu ZGVudCBvbiBzZWFyY2hfcGF0aApldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4K ClRoaXMgcHJvdmlkZXMgYSBiYXNlIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETCBzdGF0 ZW1lbnRzLiBDdXJyZW50bHksCnRoZSBwYXRjaCBoYXMgc3VwcG9ydCBmb3I6CgpDUkVBVEUvQUxU RVIvRFJPUCBUQUJMRSAoKikKQ1JFQVRFL0FMVEVSL0RST1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVS L0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElPTi9QUk9DRURVUkUKQ1JFQVRFL0FMVEVS IFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKCigqKSBOb3RlIHRoYXQgc29tZSByZWNlbnRseSBp bnRyb2R1Y2VkIERETHMoZS5nLiBERExzIHJlbGF0ZWQgdG8KUEFSVElUSU9ORUQgVEFCTEUpIGFy ZSB1bnN1cHBvcnRlZC4gV2UgY2FuIGV4dGVuZCBpdCBhcyB3ZSBuZWVkIG1vcmUKZnVuY3Rpb25h bGl0eSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKKCopIE5vdGUgdGhhdCwgZm9yIEFUVEFDSC9ERVRB Q0ggUEFSVElUSU9OLCB3ZSBoYXZlbid0IGFkZGVkIGV4dHJhIGxvZ2ljIG9uCnN1YnNjcmliZXIg dG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSB0YWJsZSBvbiBwdWJsaXNoZXIgaXMgYSBQQVJU SVRJT05FRApUQUJMRSB3aGlsZSB0aGUgdGFyZ2V0IHRhYmxlIG9uIHN1YmNyaWJlciBzaWRlIGlz IE5PUk1BTCB0YWJsZS4gV2Ugd2lsbApyZXNlYXJjaCB0aGlzIG1vcmUgYW5kIGltcHJvdmUgdGhp cyBsYXRlci4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSAgICAgICB8ICAgIDIg Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyAgfCA0NTIzICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5j ICAgICB8ICA3NjAgKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICB8 ICAgMzMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgfCAgIDE3ICstCiBz cmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyB8ICAgIDMgKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgIHwgIDE0OSArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdCAgICAgfCAgICA2ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgg ICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICB8ICAgMjMg Kwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgfCAgICAxICsKIHNyYy9pbmNs dWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9y dWxldXRpbHMuaCAgICAgICB8ICAgMTMgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgICAgfCAgICA0ICsKIDE0IGZpbGVzIGNoYW5nZWQsIDU0NTggaW5zZXJ0aW9ucygrKSwgNzgg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9q c29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4ZjczNDguLjE3MWRmYjIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01h a2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMgPSBcCiAJY29weXRvLm8gXAogCWNyZWF0ZWFz Lm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRsX2RlcGFyc2UubyBcCisJZGRsX2pzb24ubyBcCiAJ ZGVmaW5lLm8gXAogCWRpc2NhcmQubyBcCiAJZHJvcGNtZHMubyBcCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzAyMTlkCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAt MCwwICsxLDQ1MjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmMK KyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQgdXRpbGl0eSBjb21tYW5kcyB0byBtYWNoaW5lLXBh cnNlYWJsZQorICoJICByZXByZXNlbnRhdGlvbgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlk ZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgorICogbGF0 ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQgc3By aW50Zi1saWtlCisgKiBleHBhbnNpb24uICBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVk IHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKKyAqIHRoZSBjb21tYW5kcywgYnkgcmVw bGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgorICoKKyAqIE11Y2ggb2Yg dGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5 c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0 IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKKyAqIGNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmll ZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCisgKiBldGMp IGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4KKyAqCisgKiBJREVOVElGSUNBVElPTgor ICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAidGNvcC9kZGxf ZGVwYXJzZS5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNz L3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19hdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0 cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVuZC5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2Mu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVk ZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVzL21h a2VmdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVz L3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVk ZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgi CisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNp bmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVk ZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworLyog RXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGpzb25iIHN0cmluZyAqLworI2RlZmlu ZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAorCisvKgorICogQmVmb3JlIHRoZXkgYXJlIHR1cm5l ZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9uLCBlYWNoIGNvbW1hbmQgaXMKKyAqIHJlcHJlc2Vu dGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2luZyB0aGUgc3RydWN0cyBiZWxvdy4KKyAqLwordHlw ZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGwsCisJT2JqVHlwZUJvb2wsCisJT2JqVHlwZVN0cmlu ZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlwZUludGVnZXIsCisJT2JqVHlwZUZsb2F0LAorCU9i alR5cGVPYmplY3QKK30gT2JqVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgT2JqVHJlZQoreworCXNs aXN0X2hlYWQJcGFyYW1zOworCWludAkJCW51bVBhcmFtczsKKwlTdHJpbmdJbmZvCWZtdGluZm87 CisJYm9vbAkJcHJlc2VudDsKK30gT2JqVHJlZTsKKwordHlwZWRlZiBzdHJ1Y3QgT2JqRWxlbQor eworCWNoYXIJICAgKm5hbWU7CisJT2JqVHlwZQkJb2JqdHlwZTsKKworCXVuaW9uCisJeworCQli b29sCQlib29sZWFuOworCQljaGFyCSAgICpzdHJpbmc7CisJCWludDY0CQlpbnRlZ2VyOworCQlm bG9hdDgJCWZsdDsKKwkJT2JqVHJlZQkgICAqb2JqZWN0OworCQlMaXN0CSAgICphcnJheTsKKwl9 IHZhbHVlOworCXNsaXN0X25vZGUJbm9kZTsKK30gT2JqRWxlbTsKKworYm9vbCB2ZXJib3NlID0g dHJ1ZTsKKworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpu YW1lKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSk7Citz dGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpOworc3RhdGlj IHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUpOworc3Rh dGljIHZvaWQgYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGJv b2wgdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJl ZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9v YmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgT2JqVHJlZSAqdmFsdWUpOworc3RhdGlj IHZvaWQgYXBwZW5kX2FycmF5X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBMaXN0 ICphcnJheSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUs IGNoYXIgKm5hbWUsIGZsb2F0OCB2YWx1ZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX3By ZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pOworc3RhdGljIEpzb25i VmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0 ZSAqc3RhdGUpOworc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lk LCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNo YXIgKip0eXBlbW9kc3RyLAorCQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOworc3RhdGljIGNvbnN0 IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSk7CisKK3N0YXRpYyBj aGFyICpSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0 dG5vLAorCQkJCQkJCQkJICBMaXN0ICpkcGNvbnRleHQsIExpc3QgKipleHBycyk7CitzdGF0aWMg TGlzdCAqRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cyk7CisKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ2FjaGUoT2JqVHJlZSAqcGFyZW50LCBGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVu Y2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRl cGFyc2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBz ZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJz ZV9TZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEs IGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9N YXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBh bHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0 aChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90 YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1Jlc3RhcnQoT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSk7CisKKy8qCisgKiBTaW1p bGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9m IGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNjaGVt YSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWlyZAor ICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyBjYWxsZXIgaXMgZXhwZWN0 ZWQgdG8gbm90IHNjaGVtYS0KKyAqICAgcXVhbGlmeSB0aGUgbmFtZSBub3IgYWRkIHF1b3RlcyB0 byB0aGUgdHlwZSBuYW1lIGluIHRoaXMgY2FzZS4KKyAqCisgKiAtIHR5cGVuYW1lIGlzIHNldCB0 byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwbW9kIGlzIHNldCB0 byB0aGUgdHlwZW1vZCwgaWYgYW55LCBhcyBhIHN0cmluZyB3aXRoIHBhcmVucworICoKKyAqIC0g dHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRkZWQKKyAqCisgKiBXZSBk b24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3RhbmRhcmQtbWFuZGF0ZWQg bmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdpdGggdW51c3VhbCB0eXBt b2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlw ZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwg Y2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCSBib29sICp0eXBhcnJheSkKK3sKKwlIZWFwVHVwbGUJ CXR1cGxlOworCUZvcm1fcGdfdHlwZQl0eXBlZm9ybTsKKwlPaWQJCQkJYXJyYXlfYmFzZV90eXBl OworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0 eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1IiwgdHlwZV9vaWQpOworCisJdHlwZWZv cm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCisJLyoKKwkgKiBDaGVjayBp ZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0eXBlLiAgQXMgYWJvdmUs CisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5hbWUiIHNob3VsZG4ndCBn ZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5cGUgPSB0eXBlZm9ybS0+dHlw ZWxlbTsKKworCWlmIChJc1RydWVBcnJheVR5cGUodHlwZWZvcm0pICYmCisJCXR5cGVmb3JtLT50 eXBzdG9yYWdlICE9IFRZUFNUT1JBR0VfUExBSU4pCisJeworCQkvKiBTd2l0Y2ggb3VyIGF0dGVu dGlvbiB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlICovCisJCVJlbGVhc2VTeXNDYWNoZSh0dXBs ZSk7CisJCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0o YXJyYXlfYmFzZV90eXBlKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIsIHR5cGVfb2lkKTsK KworCQl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBsZSk7CisJCXR5cGVf b2lkID0gYXJyYXlfYmFzZV90eXBlOworCQkqdHlwYXJyYXkgPSB0cnVlOworCX0KKwllbHNlCisJ CSp0eXBhcnJheSA9IGZhbHNlOworCisJLyoKKwkgKiBTcGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5 cGVzIHdpdGggc3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hlcmUgd2UgcHV0CisJICogdHlwbW9kIGF0 IHRoZSBtaWRkbGUgb2YgbmFtZShlLmcuIFRJTUUoNikgd2l0aCB0aW1lIHpvbmUgKS4gV2UgY2Fu bm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBp biB0aGVzZSBjYXNlcy4KKwkgKi8KKwlpZiAodHlwZV9vaWQgPT0gSU5URVJWQUxPSUQgfHwKKwkJ dHlwZV9vaWQgPT0gVElNRVNUQU1QT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVTVEFNUFRaT0lE IHx8CisJCXR5cGVfb2lkID09IFRJTUVPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVRaT0lEKQor CXsKKwkJc3dpdGNoICh0eXBlX29pZCkKKwkJeworCQkJY2FzZSBJTlRFUlZBTE9JRDoKKwkJCQkq dHlwbmFtZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVT VEFNUFRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJUSU1FU1RBTVAgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCQllbHNlCisJCQkJCS8qIG90aGVyd2lz ZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2QuICovCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1 cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkq dHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1F VFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJ TUUgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCQllbHNlCisJCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBU WiBpcyBhZGRlZCBieSB0eXBtb2RlLiAqLworCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUi KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRU9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAo IlRJTUUiKTsKKwkJCQlicmVhazsKKwkJfQorCQkqbnNwaWQgPSBJbnZhbGlkT2lkOworCX0KKwll bHNlCisJeworCQkvKgorCQkgKiBObyBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQg Zm9yIG90aGVyIHR5cGVzLCBzbyBnZXQgdGhlIHR5cGUKKwkJICogbmFtZSBhbmQgc2NoZW1hIGRp cmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCSAqLworCQkqbnNwaWQgPSB0eXBlZm9ybS0+dHlw bmFtZXNwYWNlOworCQkqdHlwbmFtZSA9IHBzdHJkdXAoTmFtZVN0cih0eXBlZm9ybS0+dHlwbmFt ZSkpOworCX0KKworCWlmICh0eXBlbW9kID49IDApCisJCSp0eXBlbW9kc3RyID0gcHJpbnRUeXBt b2QoIiIsIHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2RvdXQpOworCWVsc2UKKwkJKnR5cGVtb2Rz dHIgPSBwc3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Cit9CisKKy8qCisg KiBPYnRhaW4gdGhlIGRlcGFyc2VkIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb2x1bW4g b2YgdGhlIGdpdmVuIHRhYmxlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgc2V0IGEgY29ycmVj dCBkZXBhcnNlIGNvbnRleHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0Q29sdW1u RGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sIExpc3QgKmRwY29udGV4dCwK KwkJCQkJCSBMaXN0ICoqZXhwcnMpCit7CisJTm9kZSAqZGVmdmFsOworCWNoYXIgKmRlZnN0cjsK KworCWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwgYXR0bm8pOworCWRlZnN0ciA9 IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwor CS8qIENvbGxlY3QgdGhlIGV4cHJlc3Npb24gZm9yIGxhdGVyIHJlcGxpY2F0aW9uIHNhZmV0eSBj aGVja3MgKi8KKwlpZiAoZXhwcnMpCisJCSpleHBycyA9IGxhcHBlbmQoKmV4cHJzLCBkZWZ2YWwp OworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdHMgdmFs dWVzIG9mIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uLCBhcyBhIGxpc3Qgb2YKKyAqIGRlcGFyc2Vk IGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgTGlzdCAqCitGdW5jdGlvbkdldERlZmF1bHRzKHRl eHQgKnByb2FyZ2RlZmF1bHRzKQoreworCUxpc3QgICAqbm9kZWRlZnM7CisJTGlzdCAgICpzdHJk ZWZzID0gTklMOworCUxpc3RDZWxsICpjZWxsOworCisJbm9kZWRlZnMgPSAoTGlzdCAqKSBzdHJp bmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhwcm9hcmdkZWZhdWx0cykpOworCWlmICghSXNB KG5vZGVkZWZzLCBMaXN0KSkKKwkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGlzIG5vdCBh IGxpc3QiKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZWRlZnMpCisJeworCQlOb2RlICAgKm9uZWRl ZiA9IGxmaXJzdChjZWxsKTsKKworCQlzdHJkZWZzID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNl X2V4cHJlc3Npb24ob25lZGVmLCBOSUwsIGZhbHNlLCBmYWxzZSkpOworCX0KKworCXJldHVybiBz dHJkZWZzOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUg cGFyYW1ldGVyIHZhbHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWUoY2hh ciAqZm10KQoreworCU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9IHBhbGxvYzAoc2l6ZW9m KE9ialRyZWUpKTsKKwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNsaXN0X2luaXQoJnBhcmFt cy0+cGFyYW1zKTsKKworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZtdGluZm8gPSBtYWtlU3Ry aW5nSW5mbygpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFtcy0+Zm10aW5mbywgZm10 KTsKKwl9CisKKwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2Jq ZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisg KgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxl bWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVy IG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChz dHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1 cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5z dGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmlu ZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAq IE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4g IEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lm aWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRo ZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9y bWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9W QShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlCSAgICp0cmVlOworCXZh X2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0 IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFuZCBw cm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisJ Zm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJCU9i alR5cGUJCXR5cGU7CisJCU9iakVsZW0JICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhhcmdz LCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0gbmV3 X29iamVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIG90aGVyIHBhcmFtIHR5 cGVzIHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbiB0aGUgdmFyYXJncy4KKwkJICogRmV0Y2ggaXQg YW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRvIHRoZSBtYWluIG9iamVjdC4K KwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkv KiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQlicmVh azsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZhX2Fy ZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVs ZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOworCQkJ Y2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJncywg TGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxlbS0+ dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQ2NCk7CisJCQkJYnJlYWs7CisJCQljYXNl IE9ialR5cGVGbG9hdDoKKwkJCQllbGVtLT52YWx1ZS5mbHQgPSB2YV9hcmcoYXJncywgZG91Ymxl KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCQllbGVtLT52YWx1ZS5v YmplY3QgPSB2YV9hcmcoYXJncywgT2JqVHJlZSAqKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6 CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT2JqVHJlZSBlbGVtZW50IHR5cGUgJWQiLCB0eXBl KTsKKwkJfQorCisJCWVsZW0tPm5hbWUgPSBuYW1lOworCQlhcHBlbmRfcHJlbWFkZV9vYmplY3Qo dHJlZSwgZWxlbSk7CisJfQorCisJdmFfZW5kKGFyZ3MpOworCXJldHVybiB0cmVlOworfQorCisv KgorICogQXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICov CitzdGF0aWMgdm9pZAorYXBwZW5kX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCkKK3sKKwlpbnQJCQkJbGVuOworCWNoYXIJCSAgICpmbXQ7CisKKwlpZiAoIXRyZWUt PmZtdGluZm8pCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJbGVu ID0gdHJlZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5lY2Vzc2Fy eSAqLworCWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVuZFN0cmlu Z0luZm9TcGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KHRyZWUtPmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKgorICogUmV0dXJuIHRoZSBvYmplY3Qg bmFtZSB3aGljaCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgIiole25hbWVbOi5dfSoiCisg KiBzdHlsZSBzdHJpbmcuIEFuZCBhcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhl IE9ialRyZWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2FwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0 cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCVN0cmluZ0luZm9EYXRhCW9i amVjdF9uYW1lOworCWNvbnN0IGNoYXIJICAgKmVuZF9wdHI7CisJY29uc3QgY2hhcgkgICAqY3A7 CisJYm9vbAkJCXN0YXJ0X2NvcHkgPSBmYWxzZTsKKworCWlmIChzdWJfZm10ID09IE5VTEwgfHwg dHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gc3ViX2ZtdDsKKworCWluaXRTdHJpbmdJ bmZvKCZvYmplY3RfbmFtZSk7CisJZW5kX3B0ciA9IHN1Yl9mbXQgKyBzdHJsZW4oc3ViX2ZtdCk7 CisKKwlmb3IgKGNwID0gc3ViX2ZtdDsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJaWYgKCpj cCA9PSAneycpCisJCXsKKwkJCXN0YXJ0X2NvcHkgPSB0cnVlOworCQkJY29udGludWU7CisJCX0K KworCQlpZiAoIXN0YXJ0X2NvcHkpCisJCQljb250aW51ZTsKKworCQlpZiAoKmNwID09ICc6JyB8 fCAqY3AgPT0gJ30nKQorCQkJYnJlYWs7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygm b2JqZWN0X25hbWUsICpjcCk7CisJfQorCisJaWYgKG9iamVjdF9uYW1lLmxlbiA9PSAwKQorCQll bG9nKEVSUk9SLCAib2JqZWN0IG5hbWUgbm90IGZvdW5kIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXJldHVybiBvYmplY3RfbmFtZS5kYXRhOworfQorCisv KiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmpl Y3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFy YW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBh cmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQXBwZW5kIGEg TlVMTCBvYmplY3QgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJY2hhciAqb2JqZWN0X25hbWU7CisK KwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCW9iamVj dF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOwor CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIG5ld19vYmplY3QoT2JqVHlwZU51bGwsIG9i amVjdF9uYW1lKSk7Cit9CisKKy8qIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJl ZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0gICpwYXJhbTsKKwljaGFyCSAqb2Jq ZWN0X25hbWUgPSBzdWJfZm10OworCWJvb2wJICBpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsKKwor CUFzc2VydChzdWJfZm10KTsKKworCWlmIChzdHJjbXAoc3ViX2ZtdCwgInByZXNlbnQiKSA9PSAw KQorCXsKKwkJaXNfcHJlc2VudF9mbGFnID0gdHJ1ZTsKKwkJdHJlZS0+cHJlc2VudCA9IHZhbHVl OworCX0KKworCWlmICghdmVyYm9zZSAmJiAhdHJlZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJ aWYgKCFpc19wcmVzZW50X2ZsYWcpCisJCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19m b3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5 cGVCb29sLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmJvb2xlYW4gPSB2YWx1ZTsKKwlh cHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKiBBbGxvY2F0ZSBhIG5l dyBzdHJpbmcgb2JqZWN0ICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfc3RyaW5nX29iamVjdChj aGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCUFzc2VydCh2YWx1ZSk7CisK KwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgTlVMTCk7CisJcGFyYW0tPnZhbHVl LnN0cmluZyA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKiBBcHBlbmQgYSBzdHJp bmcgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9zdHJpbmdfb2Jq ZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNoYXIgKnZhbHVlKQoreworCU9iakVs ZW0JICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQp OworCisJaWYgKCF2ZXJib3NlICYmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlWzBdID09ICdcMCcp KQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0 cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5n LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCWFwcGVuZF9w cmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IG9iamVj dCBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3Rfb2JqZWN0KE9ialRy ZWUgKnZhbHVlKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9i alR5cGVPYmplY3QsIE5VTEwpOworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJl dHVybiBwYXJhbTsKK30KKworLyogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIgdG8gYSB0cmVl ICovCitzdGF0aWMgdm9pZAorYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisJY2hhciAg ICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAmJiAh dmFsdWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVj dF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0 KE9ialR5cGVPYmplY3QsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFs dWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyogQXBwZW5k IGFuIGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJy YXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KQorewor CU9iakVsZW0JKnBhcmFtOworCWNoYXIgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQp OworCisJaWYgKCF2ZXJib3NlICYmIGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQlyZXR1cm47 CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBz dWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQXJyYXksIG9iamVjdF9uYW1l KTsKKwlwYXJhbS0+dmFsdWUuYXJyYXkgPSBhcnJheTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3Qo dHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBwZW5kIGEgZmxvYXQ4IHBhcmFtZXRlciB0byBh IHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRy ZWUsIGNoYXIgKnN1Yl9mbXQsIGZsb2F0OCB2YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsK KwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCW9iamVjdF9u YW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJ cGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVGbG9hdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52 YWx1ZS5mbHQgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOwor fQorCisvKiBBcHBlbmQgYSBwcmVhbGxvY2F0ZWQgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3Rh dGljIGlubGluZSB2b2lkCithcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2Jq RWxlbSAqZWxlbSkKK3sKKwlzbGlzdF9wdXNoX2hlYWQoJnRyZWUtPnBhcmFtcywgJmVsZW0tPm5v ZGUpOworCXRyZWUtPm51bVBhcmFtcysrOworfQorCisvKgorICogUHJvY2VzcyB0aGUgcHJlLWJ1 aWx0IGZvcm1hdCBzdHJpbmcgZnJvbSB0aGUgT2JqVHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UK KyAqIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVu dChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUJ a2V5OworCUpzb25iVmFsdWUJdmFsOworCisJaWYgKCF0cmVlLT5mbXRpbmZvKQorCQlyZXR1cm47 CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlr ZXkudmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4o a2V5LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZr ZXkpOworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyAqLwor CXZhbC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUtPmZtdGlu Zm8tPmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIEhlbHBl ciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJv bSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4K KyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVs ZW1fdG9rZW4pCit7CisJTGlzdENlbGwgICAqY2VsbDsKKwlKc29uYlZhbHVlCXZhbDsKKworCXN3 aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCXZhbC50 eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQl2YWwudHlwZSA9IGpi dlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPnZhbHVlLnN0 cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPnZhbHVlLnN0cmluZzsKKwkJ CXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKwor CQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFs LnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0 aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdl cikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOwor CQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVj dEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1 ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCXZhbC50eXBlID0gamJ2Qm9v bDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+dmFsdWUuYm9vbGVhbjsKKwkJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNl IE9ialR5cGVPYmplY3Q6CisJCQkvKiByZWN1cnNpdmVseSBhZGQgdGhlIG9iamVjdCBpbnRvIHRo ZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2JqdHJlZV90b19qc29uYl9yZWMob2JqZWN0 LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUFycmF5 OgorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJ Zm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJeworCQkJCU9iakVsZW0gICAq ZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQkJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0 ZSwgZWxlbSwgV0pCX0VMRU0pOworCQkJfQorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf RU5EX0FSUkFZLCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlICVkIiwgb2JqZWN0LT5vYmp0eXBlKTsKKwkJCWJy ZWFrOworCX0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIG9ianRyZWVfdG9fanNv bmIuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK29ianRyZWVfdG9fanNvbmJfcmVjKE9ialRy ZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpCit7CisJc2xpc3RfaXRlcglpdGVyOwor CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCW9i anRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIHRyZWUpOworCisJc2xpc3RfZm9yZWFj aChpdGVyLCAmdHJlZS0+cGFyYW1zKQorCXsKKwkJT2JqRWxlbQkqb2JqZWN0ID0gc2xpc3RfY29u dGFpbmVyKE9iakVsZW0sIG5vZGUsIGl0ZXIuY3VyKTsKKwkJSnNvbmJWYWx1ZQlrZXk7CisKKwkJ LyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXku dmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT5uYW1lKTsKKwkJa2V5LnZhbC5zdHJpbmcu dmFsID0gb2JqZWN0LT5uYW1lOworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZr ZXkpOworCisJCS8qIFRoZW4gcHJvY2VzcyB0aGUgdmFsdWUgYWNjb3JkaW5nIHRvIGl0cyB0eXBl ICovCisJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgb2JqZWN0LCBXSkJfVkFMVUUp OworCX0KKworCXJldHVybiBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBO VUxMKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4g T2JqVHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAq dHJlZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29u Yl9yZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30K KworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIg dHlwbW9kKQoreworCU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFy CSAgICp0eXBuc3A7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1v ZHN0cjsKKwlib29sCQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5cGVJZCwg dHlwbW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAmdHlwYXJy YXkpOworCisJaWYgKE9pZElzVmFsaWQodHlwbnNwaWQpKQorCQl0eXBuc3AgPSBnZXRfbmFtZXNw YWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBuc3AgPSBwc3RyZHVwKCIi KTsKKworCXR5cGVQYXJhbSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkJICAgInNj aGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBuc3AsCisJCQkJCQkJICAgInR5cGVuYW1lIiwg T2JqVHlwZVN0cmluZywgdHlwZW5hbWUsCisJCQkJCQkJICAgInR5cG1vZCIsIE9ialR5cGVTdHJp bmcsIHR5cG1vZHN0ciwKKwkJCQkJCQkgICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwgdHlwYXJy YXkpOworCisJcmV0dXJuIHR5cGVQYXJhbTsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUg dG8gc2V0dXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cy4KKyAqCisgKiBFbGVtZW50cyAic2NoZW1h bmFtZSIgYW5kICJvYmpuYW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAqIGNv cnJlc3BvbmRzIHRvIGEgdGVtcCBzY2hlbWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgorICoK KyAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMgd2hl dGhlciB0aGUgb2JqbmFtZSB3aWxsCisgKiBiZSBxdW90ZWQgYXMgYW4gaWRlbnRpZmllciBvciBu b3QsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB0aGlzIHJvdXRpbmUKKyAqIGNvbmNlcm5z IGl0c2VsZiB3aXRoOyB0aGF0IHdpbGwgYmUgdXAgdG8gdGhlIGV4cGFuZCBmdW5jdGlvbi4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKE9pZCBuc3BpZCwg Y2hhciAqbmFtZSkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJY2hhcgkgICAqbmFtZXNwYWNl OworCisJaWYgKGlzQW55VGVtcE5hbWVzcGFjZShuc3BpZCkpCisJCW5hbWVzcGFjZSA9IHBzdHJk dXAoInBnX3RlbXAiKTsKKwllbHNlCisJCW5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZShu c3BpZCk7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9WQShOVUxMLCAyLAorCQkJCQkJCSAg InNjaGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lc3BhY2UsCisJCQkJCQkJICAib2JqbmFt ZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1YWxpZmllZDsK K30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9RCBhbmQgJXt9TyBlbGVt ZW50cywgd2l0aCB0aGUgb2JqZWN0IHNwZWNpZmllZAorICogYnkgY2xhc3NJZC9vYmpJZC4KKyAq CisgKiBFbGVtZW50cyAic2NoZW1hbmFtZSIgYW5kICJvYmpuYW1lIiBhcmUgc2V0LiAgSWYgdGhl IG9iamVjdCBpcyBhIHRlbXBvcmFyeQorICogb2JqZWN0LCB0aGUgc2NoZW1hIG5hbWUgaXMgc2V0 IHRvICJwZ190ZW1wIi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlm aWVkOworCVJlbGF0aW9uCWNhdGFsb2c7CisJSGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2Jq bnNwOworCURhdHVtCQlvYmpuYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1i ZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0 bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3Bl bihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFs b2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxv ZykpOworCUFudW1fbmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51 bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlv Ympuc3AgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXRE ZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lc3BhY2UiKTsKKwlvYmpuYW1lID0gaGVhcF9nZXRh dHRyKGNhdG9iaiwgQW51bV9uYW1lLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJ ICAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgTlVM TCBuYW1lIik7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1H ZXRPYmplY3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCSBOYW1lU3RyKCpEYXR1bUdldE5hbWUob2Jq bmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0 dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0 aW9uIG9mIHRoZSBnaXZlbiBSRUxQRVJTSVNURU5DRSB2YWx1ZS4KKyAqLworc3RhdGljIGNoYXIg KgorZ2V0X3BlcnNpc3RlbmNlX3N0cihjaGFyIHBlcnNpc3RlbmNlKQoreworCXN3aXRjaCAocGVy c2lzdGVuY2UpCisJeworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1RFTVA6CisJCQlyZXR1cm4gIlRF TVBPUkFSWSI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQ6CisJCQlyZXR1cm4gIlVO TE9HR0VEIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ6CisJCQlyZXR1cm4gIiI7 CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBwZXJzaXN0ZW5jZSBtYXJr aW5nICVjIiwgcGVyc2lzdGVuY2UpOworCQkJcmV0dXJuICIiOwkJLyogbWFrZSBjb21waWxlciBo YXBweSAqLworCX0KK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRlZmluaXRpb24gb2YgY29sdW1u IGlkZW50aXR5LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbklkZW50aXR5 KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpU cmVlCSAgICpjb2x1bW47CisJT2JqVHJlZQkgICAqaWRlbnRvYmo7CisJTGlzdAkgICAqZWxlbXMg PSBOSUw7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlGb3JtX3BnX3Nl cXVlbmNlIHNlcWZvcm07CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJY2hhcgkg ICAqaWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJY29sdW1uID0gbmV3X29ianRyZWUo IiIpOworCisJaWYgKCFPaWRJc1ZhbGlkKHNlcXJlbGlkKSkKKwl7CisJCWFwcGVuZF9ib29sX29i amVjdChjb2x1bW4sICJwcmVzZW50IiwgZmFsc2UpOworCQlyZXR1cm4gY29sdW1uOworCX0KKwor CWlmIChhbHRlcl90YWJsZSkKKwl7CisJCWlkZW50Zm10ID0gIlNFVCBHRU5FUkFURUQgIjsKKwkJ b2JqZm10ID0gIiV7b3B0aW9ufXMiOworCX0KKwllbHNlCisJeworCQlpZGVudGZtdCA9ICJHRU5F UkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMgQVMgSURFTlRJVFkiOworCX0KKworCWlk ZW50b2JqID0gbmV3X29ianRyZWUoaWRlbnRmbXQpOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJ QlVURV9JREVOVElUWV9BTFdBWVMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50b2JqLCBv YmpmbXQsICJBTFdBWVMiKTsKKwllbHNlIGlmIChpZGVudGl0eSA9PSAgQVRUUklCVVRFX0lERU5U SVRZX0JZX0RFRkFVTFQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50b2JqLCBvYmpmbXQs ICJCWSBERUZBVUxUIik7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QoaWRlbnRvYmosICJw cmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtpZGVu dGl0eV90eXBlfXMiLCBpZGVudG9iaik7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNv cHkxKFNFUVJFTElELCBzZXFyZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxl KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwK KwkJCSBzZXFyZWxpZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVD VChzZXF0dXBsZSk7CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMoc2VxcmVsaWQpOwor CisJLyogRGVmaW5pdGlvbiBlbGVtZXRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBh cnNlX1NlcV9DYWNoZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFw cGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUp KTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE5VTEws IHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9NaW52YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFw cGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFi bGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChOVUxM LCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJz ZV9TZXFfUmVzdGFydChOVUxMLCBzZXFkYXRhKSk7CisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5v dCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCWlmIChhbHRlcl90YWJsZSkKKwkJYXBwZW5kX2Fy cmF5X29iamVjdChjb2x1bW4sICIle3NlcV9kZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKwllbHNl CisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29sdW1uLCAiKCAle3NlcV9kZWZpbml0aW9uOiB9cyAp IiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJl dHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFU RSBUUklHR0VSKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRy aWdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyaWdTdG10 ICpub2RlID0gKENyZWF0ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ190cmln Z2VyOworCUhlYXBUdXBsZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwlP YmpUcmVlCSAgICp0cmlnZ2VyOworCU9ialRyZWUJICAgKnRtcDsKKwlpbnQJCQl0Z25hcmdzOwor CUxpc3QJICAgKmxpc3Q7CisJTGlzdAkgICAqZXZlbnRzOworCisJcGdfdHJpZ2dlciA9IHRhYmxl X29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmlnVHVwID0g Z2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdnZXJfb2lk LCBvYmplY3RJZCk7CisJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJp Z1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtjb25z dHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyAle2V2ZW50czogT1IgfXMKKwkgKiBP TiAle3JlbGF0aW9ufUQgJXtmcm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9cworCSAq IEZPUiBFQUNIICV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0 aW9ufXMKKwkgKi8KKwl0cmlnZ2VyID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludH1zIiwKKwkJCQkJCSBub2RlLT5p c2NvbnN0cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dCh0cmlnZ2VyLCAiVFJJR0dFUiAle25hbWV9SSIsIG5vZGUtPnRyaWduYW1lKTsKKworCWlmIChu b2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIkJFRk9SRSIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWlu ZyA9PSBUUklHR0VSX1RZUEVfQUZURVIpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIs ICIle3RpbWV9cyIsICJBRlRFUiIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBUUklHR0VS X1RZUEVfSU5TVEVBRCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1z IiwgIklOU1RFQUQgT0YiKTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdHJp Z2dlciB0aW1pbmcgdmFsdWUgJWQiLCBub2RlLT50aW1pbmcpOworCisJLyoKKwkgKiBEZWNvZGUg dGhlIGV2ZW50cyB0aGF0IHRoZSB0cmlnZ2VyIGZpcmVzIGZvci4gIFRoZSBvdXRwdXQgaXMgYSBs aXN0OworCSAqIGluIG1vc3QgY2FzZXMgaXQgd2lsbCBqdXN0IGJlIGEgc3RyaW5nIHdpdGggdGhl IGV2ZW4gbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRoIGEgbGlzdCBv ZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVudHMgPSBOSUw7 CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2ZW50cyA9IGxh cHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlmIChub2RlLT5l dmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywg bmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dF Ul9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19v YmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVVBE QVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQlldmVudHMgPSBs YXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCU9ialRyZWUJICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQlM aXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9ubHkgVVBEQVRF IE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkgKiB3ZSBhZGQg YSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vpc2gKKwkJCSAq IHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVwZGF0ZSA9IG5l d19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBPYmpUeXBlU3Ry aW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29sdW1ucykKKwkJ CXsKKwkJCQljaGFyICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGNlbGwpKTsKKworCQkJCWNv bHMgPSBsYXBwZW5kKGNvbHMsCisJCQkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoY29sbmFtZSkp OworCQkJfQorCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHVwZGF0ZSwgIiV7Y29sdW1uczosIH1J IiwgY29scyk7CisKKwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLAorCQkJCQkJCSBuZXdfb2Jq ZWN0X29iamVjdCh1cGRhdGUpKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRyaWdn ZXIsICIle2V2ZW50czogT1IgfXMiLCBldmVudHMpOworCisJdG1wID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCSAgdHJpZ0Zvcm0tPnRn cmVsaWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICJPTiAle3JlbGF0aW9ufUQi LCB0bXApOworCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkZST00iLCAwKTsKKwlpZiAodHJpZ0Zv cm0tPnRnY29uc3RycmVsaWQpCisJeworCQlPYmpUcmVlCSAgICpyZWw7CisKKwkJcmVsID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkg IHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtyZWxhdGlvbn1EIiwgcmVsKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w LCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiJXtm cm9tX3RhYmxlfXMiLCB0bXApOworCisJbGlzdCA9IE5JTDsKKwlpZiAobm9kZS0+ZGVmZXJyYWJs ZSkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoIkRF RkVSUkFCTEUiKSk7CisJaWYgKG5vZGUtPmluaXRkZWZlcnJlZCkKKwkJbGlzdCA9IGxhcHBlbmQo bGlzdCwKKwkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoIklOSVRJQUxMWSBERUZFUlJFRCIpKTsK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRyaWdnZXIsICIle2NvbnN0cmFpbnRfYXR0cnM6IH1zIiwg bGlzdCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiRk9SIEVBQ0ggJXtmb3Jf ZWFjaH1zIiwKKwkJCQkJCSBub2RlLT5yb3cgPyAiUk9XIiA6ICJTVEFURU1FTlQiKTsKKworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJXSEVOIiwgMCk7CisJaWYgKG5vZGUtPndoZW5DbGF1c2UpCisJ eworCQlOb2RlCSAgICp3aGVuQ2xhdXNlOworCQlEYXR1bQkJdmFsdWU7CisJCWJvb2wJCWlzbnVs bDsKKworCQl2YWx1ZSA9IGZhc3RnZXRhdHRyKHRyaWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90Z3F1 YWwsCisJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJCWlm IChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiYm9ndXMgTlVMTCB0Z3F1YWwiKTsKKworCQl3aGVu Q2xhdXNlID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiKCV7Y2xhdXNlfXMpIiwKKwkJCQkJCQkgcGdfZ2V0X3Ry aWdnZXJfd2hlbmNsYXVzZSh0cmlnRm9ybSwKKwkJCQkJCQkJCQkJCQkgICB3aGVuQ2xhdXNlLAor CQkJCQkJCQkJCQkJCSAgIGZhbHNlKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwg IiV7d2hlbn1zIiwgdG1wKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2Z1bmNuYW1lfUQi LCAxLAorCQkJCQkJICJmdW5jbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRy aWdGb3JtLT50Z2ZvaWQpKTsKKwlsaXN0ID0gTklMOworCXRnbmFyZ3MgPSB0cmlnRm9ybS0+dGdu YXJnczsKKwlpZiAodGduYXJncyA+IDApCisJeworCQlieXRlYSAgKnRnYXJnczsKKwkJY2hhciAg ICphcmdzdHI7CisJCWJvb2wJaXNudWxsOworCQlpbnQJCWZpbmR4OworCQlpbnQJCWxlbnRnYXJn czsKKwkJY2hhciAgICpwOworCisJCXRnYXJncyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRhdHRy KHRyaWdUdXAsCisJCQkJCQkJCQkJCUFudW1fcGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJCQkJ CVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsKKwkJ aWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgdGdhcmdzIik7CisJCWFy Z3N0ciA9IChjaGFyICopIFZBUkRBVEEodGdhcmdzKTsKKwkJbGVudGdhcmdzID0gVkFSU0laRV9B TllfRVhIRFIodGdhcmdzKTsKKworCQlwID0gYXJnc3RyOworCQlmb3IgKGZpbmR4ID0gMDsgZmlu ZHggPCB0Z25hcmdzOyBmaW5keCsrKQorCQl7CisJCQlzaXplX3QJdGxlbjsKKworCQkJLyogdmVy aWZ5IHRoYXQgdGhlIGFyZ3VtZW50IGVuY29kaW5nIGlzIGNvcnJlY3QgKi8KKwkJCXRsZW4gPSBz dHJsZW4ocCk7CisJCQlpZiAocCArIHRsZW4gPj0gYXJnc3RyICsgbGVudGdhcmdzKQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgYXJndW1lbnQgc3RyaW5nICglcykgZm9yIHRy aWdnZXIgXCIlc1wiIiwKKwkJCQkJCQkJYXJnc3RyLCBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUp KSkpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7CisK KwkJCXAgKz0gdGxlbiArIDE7CisJCX0KKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXAs ICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIle2FyZ3M6LCB9TCIsIGxpc3QpOwkJ LyogbWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wLCAiKSIpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIkVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rp b259cyIsIHRtcCk7CisKKwl0YWJsZV9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJcmV0dXJuIHRyaWdnZXI7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUg VEFCTEUgZGVwYXJzaW5nLgorICoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4g YSByZWd1bGFyIChub24gdHlwZWQpIHRhYmxlIGNyZWF0aW9uLgorICoKKyAqIE5PVCBOVUxMIGNv bnN0cmFpbnRzIGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBkaXJlY3RseSBp biB0aGUKKyAqIGNvbHVtbiBkZWZpbml0aW9uIGJ5IHRoaXMgcm91dGluZTsgb3RoZXIgY29uc3Ry YWludHMgbXVzdCBiZSBlbWl0dGVkCisgKiBlbHNld2hlcmUgKHRoZSBpbmZvIGluIHRoZSBwYXJz ZSBub2RlIGlzIGluY29tcGxldGUgYW55d2F5LikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wg Y29tcG9zaXRlLAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3Qg KipleHBycykKK3sKKwlPYmpUcmVlCSAgICpjb2x1bW47CisJT2JqVHJlZQkgICAqdG1wOworCU9p ZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJU dXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJ CXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlz dENlbGwgICAqY2VsbDsKKworCS8qCisJICogSW5oZXJpdGVkIGNvbHVtbnMgd2l0aG91dCBsb2Nh bCBkZWZpbml0aW9ucyBtdXN0IG5vdCBiZSBlbWl0dGVkLgorCSAqCisJICogWFhYIG1heWJlIGl0 IGlzIHVzZWZ1bCB0byBoYXZlIHRoZW0gd2l0aCAicHJlc2VudCA9IGZhbHNlIiBvciBzb21lIHN1 Y2g/CisJICovCisJaWYgKCFjb2xkZWYtPmlzX2xvY2FsKQorCQlyZXR1cm4gTlVMTDsKKworCWF0 dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90 IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJ IGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRl KSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0 dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiAle25hbWV9SSAle2NvbHR5cGV9 VCAle2NvbXByZXNzaW9ufXMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zCisJICogJXtjb2xsYXRp b259cworCSAqLworCWNvbHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle2NvbHR5cGV9 VCIsIDMsCisJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCQki bmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCQkiY29sdHlwZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUodHlwaWQsIHR5cG1v ZCkpOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIkNPTVBSRVNT SU9OIik7CisJaWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgIiV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCBjb2xkZWYtPmNvbXByZXNzaW9uKTsKKwll bHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9 SSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtjb21wcmVzc2lvbn1zIiwgdG1wKTsKKwor CXRtcCA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwY29sbGF0 aW9uKSkKKwl7CisJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5 cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7bmFtZX1EIiwgY29s bG5hbWUpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Y29sbGF0aW9ufXMiLCB0 bXApOworCisJaWYgKCFjb21wb3NpdGUpCisJeworCQlPaWQJc2VxcmVsaWQgPSBJbnZhbGlkT2lk OworCisJCS8qCisJCSAqIEVtaXQgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbiBpZiBuZWNlc3Nhcnku ICBOb3RlIHRoYXQgd2UgY2Fubm90IHRydXN0CisJCSAqIHBnX2F0dHJpYnV0ZS5hdHRub3RudWxs IGhlcmUsIGJlY2F1c2UgdGhhdCBiaXQgaXMgYWxzbyBzZXQgd2hlbgorCQkgKiBwcmltYXJ5IGtl eXMgYXJlIHNwZWNpZmllZDsgYW5kIHdlIG11c3Qgbm90IGVtaXQgYSBOT1QgTlVMTAorCQkgKiBj b25zdHJhaW50IGluIHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0ZWx5IHNwZWNpZmllZC4gIFRo ZXJlZm9yZSwKKwkJICogd2Ugc2NhbiB0aGUgbGlzdCBvZiBjb25zdHJhaW50cyBhdHRhY2hlZCB0 byB0aGlzIGNvbHVtbiB0byBkZXRlcm1pbmUKKwkJICogd2hldGhlciB3ZSBuZWVkIHRvIGVtaXQg YW55dGhpbmcuCisJCSAqIChGb3J0dW5hdGVseSwgTk9UIE5VTEwgY29uc3RyYWludHMgY2Fubm90 IGJlIHRhYmxlIGNvbnN0cmFpbnRzLikKKwkJICoKKwkJICogSW4gdGhlIEFMVEVSIFRBQkxFIGNh c2VzLCB3ZSBhbHNvIGFkZCBhIE5PVCBOVUxMIGlmIHRoZSBjb2xEZWYgaXMKKwkJICogbWFya2Vk IGlzX25vdF9udWxsLgorCQkgKi8KKwkJc2F3X25vdG51bGwgPSBmYWxzZTsKKwkJZm9yZWFjaChj ZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCQl7CisJCQlDb25zdHJhaW50ICpjb25zdHIgPSAo Q29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChjb25zdHItPmNvbnR5cGUgPT0g Q09OU1RSX05PVE5VTEwpCisJCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQl9CisJCWlmIChpc19h bHRlciAmJiBjb2xkZWYtPmlzX25vdF9udWxsKQorCQkJc2F3X25vdG51bGwgPSB0cnVlOworCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7bm90X251bGx9cyIsCisJCQkJCQkJIHNh d19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCQl0bXAgPSBuZXdfb2JqdHJlZSgiREVG QVVMVCIpOworCQlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwkJeworCQkJY2hhciAqZGVmc3Ry OworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJG b3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgZGVmc3RyKTsKKwkJfQorCQllbHNl CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJYXBwZW5k X29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtkZWZhdWx0fXMiLCB0bXApOworCisJCS8qIElERU5U SVRZIENPTFVNTiAqLworCQlpZiAoY29sZGVmLT5pZGVudGl0eSkKKwkJeworCQkJT2lkCWF0dG5v ID0gZ2V0X2F0dG51bShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwkJCXNlcXJlbGlkID0gZ2V0 SWRlbnRpdHlTZXF1ZW5jZShyZWxpZCwgYXR0bm8sIGZhbHNlKTsKKwkJfQorCisJCXRtcCA9IGRl cGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxcmVsaWQsIGNvbGRlZi0+aWRlbnRpdHksIGlzX2FsdGVy KTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtpZGVudGl0eV9jb2x1bW59cyIs IHRtcCk7CisKKwkJLyogR0VORVJBVEVEIENPTFVNTiBFWFBSRVNTSU9OICovCisJCXRtcCA9IG5l d19vYmp0cmVlKCJHRU5FUkFURUQgQUxXQVlTIEFTIik7CisJCWlmIChjb2xkZWYtPmdlbmVyYXRl ZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhciAqZGVmc3RyOwor CisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3Jt LT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisJCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle2dlbmVyYXRpb25fZXhwcn1zIFNUT1JFRCIsIGRlZnN0cik7CisJ CX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtnZW5lcmF0ZWRfY29sdW1ufXMi LCB0bXApOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1 bW47Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgT0YgZGVwYXJzaW5n LgorICoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSB0eXBlZCB0YWJsZSBj cmVhdGlvbi4JVGhpcyBpcyBzaW1wbGVyCisgKiB0aGFuIHRoZSByZWd1bGFyIGNhc2UsIGJlY2F1 c2Ugd2UgZG9uJ3QgaGF2ZSB0byBlbWl0IHRoZSB0eXBlIGRlY2xhcmF0aW9uLAorICogY29sbGF0 aW9uLCBvciBkZWZhdWx0LiAgSGVyZSB3ZSBvbmx5IHJldHVybiBzb21ldGhpbmcgaWYgdGhlIGNv bHVtbiBpcyBiZWluZworICogZGVjbGFyZWQgTk9UIE5VTEwuCisgKgorICogQXMgaW4gZGVwYXJz ZV9Db2x1bW5EZWYsIGFueSBvdGhlciBjb25zdHJhaW50IGlzIHByb2Nlc3NlZCBlbHNld2hlcmUu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKFJlbGF0aW9u IHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIENvbHVtbkRlZiAqY29sZGVmKQoreworCU9ialRy ZWUJKmNvbHVtbiA9IE5VTEw7CisJT2JqVHJlZQkqdG1wOworCU9pZAkJCXJlbGlkID0gUmVsYXRp b25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRy aWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0 eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKwor CWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQg bm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAor CQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmli dXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQs IGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlv bik7CisKKwkvKgorCSAqIFNlYXJjaCBmb3IgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbi4gIEFzIGlu IGRlcGFyc2VfQ29sdW1uRGVmLCB3ZSByZWx5IG9uCisJICogZmluZGluZyBhIGNvbnN0cmFpbnQg b24gdGhlIGNvbHVtbiByYXRoZXIgdGhhbiBjb2xkZWYtPmlzX25vdF9udWxsLgorCSAqIChUaGlz IHJvdXRpbmUgaXMgbmV2ZXIgdXNlZCBmb3IgQUxURVIgY2FzZXMuKQorCSAqLworCXNhd19ub3Ru dWxsID0gZmFsc2U7CisJZm9yZWFjaChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCXsKKwkJ Q29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCWlm IChjb25zdHItPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCXsKKwkJCXNhd19ub3RudWxs ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFzYXdfbm90bnVsbCAmJiAhYXR0 ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogJXtuYW1l fUkgV0lUSCBPUFRJT05TICV7ZGVmYXVsdH1zICV7bm90X251bGx9cy4KKwkgKi8KKwljb2x1bW4g PSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgV0lUSCBPUFRJT05TIiwgMiwKKwkJCQkJCQkidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmlu ZywgY29sZGVmLT5jb2xuYW1lKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7 bm90X251bGx9cyIsCisJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJ dG1wID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikK Kwl7CisJCWNoYXIgKmRlZnN0cjsKKworCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1 bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQsIE5V TEwpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgZGVmc3Ry KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNl KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcCk7CisK KwkvKgorCSAqIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHR5cGVkIHRh Ymxlcywgc28gd2UgYXJlIGRvbmUuCisJICovCisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7 CisKKwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRB QkxFIGRlcGFyc2luZy4KKyAqCisgKiBEZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAo Y29sdW1ucyBhbmQgY29uc3RyYWludHMpLgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFp bnRzIGluIHRoZSBwYXJzZSBub2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBz eXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9UYWJs ZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpk cGNvbnRleHQsCisJCQkJCSAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpCit7CisJTGlzdAkg ICAqZWxlbWVudHMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJs ZUVsZW1lbnRzKQorCXsKKwkJTm9kZQkgICAqZWx0ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKwor CQlzd2l0Y2ggKG5vZGVUYWcoZWx0KSkKKwkJeworCQkJY2FzZSBUX0NvbHVtbkRlZjoKKwkJCQl7 CisJCQkJCU9ialRyZWUJICAgKnRyZWU7CisKKwkJCQkJdHJlZSA9IHR5cGVkID8KKwkJCQkJCWRl cGFyc2VfQ29sdW1uRGVmX3R5cGVkKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCQko Q29sdW1uRGVmICopIGVsdCkgOgorCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYocmVsYXRpb24sIGRw Y29udGV4dCwKKwkJCQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJ CQkJCQkJCQkgIGZhbHNlLCBOVUxMKTsKKwkJCQkJaWYgKHRyZWUgIT0gTlVMTCkKKwkJCQkJewor CQkJCQkJT2JqRWxlbQkqY29sdW1uOworCisJCQkJCQljb2x1bW4gPSBuZXdfb2JqZWN0X29iamVj dCh0cmVlKTsKKwkJCQkJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgY29sdW1uKTsKKwkJ CQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVF9Db25zdHJhaW50OgorCQkJCWJyZWFr OworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBub2RlIHR5cGUgJWQiLCBu b2RlVGFnKGVsdCkpOworCQl9CisJfQorCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICog U3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFL0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoK KyAqIEdpdmVuIGEgdGFibGUgT0lEIG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWlu dHMgYW5kIGFwcGVuZCB0aGVtIHRvCisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1 cGRhdGVkIGxpc3QgaXMgcmV0dXJuZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFi bGVzLCByZWd1bGFyIHRhYmxlcywgYW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNU UkFJTlRfRk9SRUlHTiBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRp YyBMaXN0ICoKK29idGFpbkNvbnN0cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25J ZCwgT2lkIGRvbWFpbklkKQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7 CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqY29uc3Ry OworCisJLyogb25seSBvbmUgbWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVs YXRpb25JZCkgXiBPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIHNjYW4gcGdfY29u c3RyYWludCB0byBmZXRjaCBhbGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAq IHJlbGF0aW9uLgorCSAqLworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9u SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJewor CQlTY2FuS2V5SW5pdCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJ CQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1 bShyZWxhdGlvbklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25z dHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZr ZXkpOworCX0KKwllbHNlCisJeworCQlBc3NlcnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlT Y2FuS2V5SW5pdCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShk b21haW5JZCkpOworCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWlu dFR5cGlkSW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkv KgorCSAqIEZvciBlYWNoIGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFi bGUgZWxlbWVudHMuICBJbgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhl IHByaW50YWJsZSBpbmZvcm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0 dHJpYnV0ZXMgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0 b21hdGljIHByb2Nlc3NpbmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUg PSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25z dHJGb3JtOworCQljaGFyCSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19j b25zdHJhaW50KSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29u dHlwZSkKKwkJeworCQkJY2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hl Y2siOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGlu dWU7CS8qIG5vdCBoZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250 eXBlID0gInByaW1hcnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklR VUU6CisJCQkJY29udHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJB SU5UX1RSSUdHRVI6CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNh c2UgQ09OU1RSQUlOVF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJ CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0 cmFpbnQgdHlwZSIpOworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJl IG5vdCBwYXJ0IG9mIHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0 byBwcm9ncmFtbWF0aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1v bmcKKwkJICogZGlmZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBt aWdodCBiZSB1c2VmdWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRj LgorCQkgKi8KKwkJY29uc3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkg JXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQk0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJjb25zdHJhaW50IiwKKwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250 eXBlLAorCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+ Y29ubmFtZSksCisJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ IHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOwor CQllbGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikp OworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgT04gQ09NTU1JVCAuLi4gY2xhdXNlIGZvciBDUkVBVEUgLi4uIFRFTVBPUkFSWSAuLi4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNvbW1pdEFj dGlvbiBvcHRpb24pCit7CisJT2JqVHJlZQkgICAqb25jb21taXQ7CisKKwlvbmNvbW1pdCA9IG5l d19vYmp0cmVlKCJPTiBDT01NSVQiKTsKKwlzd2l0Y2ggKG9wdGlvbikKKwl7CisJCWNhc2UgT05D T01NSVRfRFJPUDoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21t aXRfdmFsdWV9cyIsICJEUk9QIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX0RFTEVU RV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92 YWx1ZX1zIiwgIkRFTEVURSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX1BS RVNFUlZFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29t bWl0X3ZhbHVlfXMiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNP TU1JVF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRf dmFsdWV9cyIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KG9uY29tbWl0LCAicHJlc2VudCIsIGZh bHNlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBvbmNvbW1pdDsKK30KKworLyoKKyAqIERl cGFyc2UgRGVmRWxlbXMsIGFzIHVzZWQgZS5nLiBieSBBTFRFUiBDT0xVTU4gLi4uIFNFVCwgaW50 byBhIGxpc3Qgb2YgU0VUCisgKiAoLi4uKSAgb3IgUkVTRVQgKC4uLikgY29udGVudHMuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlz X3Jlc2V0KQoreworCU9ialRyZWUJICAgKnNldDsKKwlPYmpUcmVlCSAgICpvcHRuYW1lOworCisJ c2V0ID0gbmV3X29ianRyZWUoIiIpOworCW9wdG5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlp ZiAoZWxlbS0+ZGVmbmFtZXNwYWNlICE9IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9w dG5hbWUsICIle3NjaGVtYX1JLiIsIGVsZW0tPmRlZm5hbWVzcGFjZSk7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdChvcHRuYW1lLCAiJXtsYWJlbH1JIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChzZXQsICIle2xhYmVsfXMiLCBvcHRuYW1lKTsKKworCWlmICghaXNf cmVzZXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHNldCwgIiA9ICV7dmFsdWV9TCIsCisJCQkJ CQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJIGRlZkdldEJvb2xl YW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKworCXJldHVybiBzZXQ7Cit9CisKKy8qCisg KiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4uLikKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sK KwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZQkgICAq Y29sc2V0OworCWNoYXIJICAgKmZtdDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlw ZSA9PSBBVF9SZXNldE9wdGlvbnM7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkg KiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQorCSAq LworCWlmIChpc19yZXNldCkKKwkJZm10ID0gIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VU ICI7CisJZWxzZQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUICI7CisKKwlj b2xzZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7 CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJICAgKnNldDsKKworCQllbGVtID0gKERl ZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNf cmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsK Kwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBwZW5kX2FycmF5X29iamVjdChjb2xzZXQsICIoJXtv cHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwlyZXR1cm4gY29sc2V0OworfQorCisvKgorICogLi4u IEFMVEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdAkg ICAqc2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUJICAgKnJlbHNldDsK KwljaGFyCSAgICpmbXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRf UmVzZXRSZWxPcHRpb25zOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogUkVT RVR8U0VUICgle29wdGlvbnM6LCB9cykKKwkgKi8KKwlpZiAoaXNfcmVzZXQpCisJCWZtdCA9ICJS RVNFVCAiOworCWVsc2UKKwkJZm10ID0gIlNFVCAiOworCisJcmVsc2V0ID0gbmV3X29ianRyZWUo Zm10KTsKKworCWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZF bGVtCSAgICplbGVtOworCQlPYmpUcmVlCSAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICop IGxmaXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsK KwkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJ QXNzZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QocmVsc2V0LCAiKCV7b3B0aW9uczos IH1zKSIsIHNldHMpOworCisJcmV0dXJuIHJlbHNldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IGluaGVyaXRzIHJlbGF0aW9ucy4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEg c2NoZW1hIHF1YWxpZmllZCB0YWJsZSBsaXN0IHJlcHJlc2VudGluZworICogdGhlIHBhcmVudCB0 YWJsZXMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmpl Y3RJZCkKK3sKKwlMaXN0CSAgICpwYXJlbnRzID0gTklMOworCVJlbGF0aW9uCWluaFJlbDsKKwlT eXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleTsKKwlIZWFwVHVwbGUJdHVwbGU7CisK KwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhl cml0c1JlbGlkU2Vxbm9JbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisK Kwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbikp KQorCXsKKwkJT2JqVHJlZQkqcGFyZW50OworCQlGb3JtX3BnX2luaGVyaXRzIGZvcm1JbmggPSAo Rm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlwYXJlbnQgPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgZm9y bUluaC0+aW5ocGFyZW50KTsKKwkJcGFyZW50cyA9IGxhcHBlbmQocGFyZW50cywgbmV3X29iamVj dF9vYmplY3QocGFyZW50KSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJs ZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHBhcmVudHM7Cit9 CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIHBhcnRpdGlvbiBib3VuZCBleHByZXNzaW9u IGZvciB0aGUgZ2l2ZW4gdGFibGUuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0UGFy dGl0aW9uQm91bmQoT2lkIHJlbGlkKQoreworCURhdHVtCQlkZXBhcnNlZDsKKwlEYXR1bQkJYm91 bmREYXR1bTsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCXR1cGxlOworCisJdHVwbGUgPSBT ZWFyY2hTeXNDYWNoZTEoUkVMT0lELCByZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1 cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1 IiwKKwkJCSByZWxpZCk7CisKKwlib3VuZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwg dHVwbGUsCisJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZp c251bGwpOworCisJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAor CQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKFRleHREYXR1bUdldENTdHJpbmcoYm91bmRE YXR1bSkpLAorCQkJCQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwor CisJcmV0dXJuIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQorCisvKgorICogUmV0 dXJuIGFuIGluZGV4IGRlZmluaXRpb24sIHNwbGl0IGluIHNldmVyYWwgcGllY2VzLgorICoKKyAq IFRoZXJlIGlzIGEgaHVnZSBsb3Qgb2YgY29kZSB0aGF0J3MgYSBkdXBlIG9mIHBnX2dldF9pbmRl eGRlZl93b3JrZXIsIGJ1dAorICogY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhh dCBpdCBkb2Vzbid0IHNlZW0gd29ydGgga2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLwor c3RhdGljIHZvaWQKK3BnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJ CQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkg Y2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hh ciAqKndoZXJlQ2xhdXNlKQoreworCUhlYXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lk eHJlbDsKKwlIZWFwVHVwbGUJaHRfYW07CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9w Z19jbGFzcyBpZHhyZWxyZWM7CisJRm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAq YW1yb3V0aW5lOworCUxpc3QJICAgKmluZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRl bTsKKwlMaXN0CSAgICpjb250ZXh0OworCU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOwor CURhdHVtCQlpbmRjb2xsRGF0dW07CisJRGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWlu ZG9wdGlvbkRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247 CisJb2lkdmVjdG9yICAqaW5kY2xhc3M7CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmlu Z0luZm9EYXRhIGRlZmluaXRpb25CdWY7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19pbmRleCB0 dXBsZSBieSB0aGUgT2lkIG9mIHRoZSBpbmRleAorCSAqLworCWh0X2lkeCA9IFNlYXJjaFN5c0Nh Y2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGluZGV4ICV1IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgp IEdFVFNUUlVDVChodF9pZHgpOworCisJaW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFz c2VydChpbmRleHJlbGlkID09IGlkeHJlYy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBp bmRjb2xsYXRpb24sIGluZGNsYXNzLCBhbmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWlu ZGNvbGxEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJ CSAgIEFudW1fcGdfaW5kZXhfaW5kY29sbGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVs bCk7CisJaW5kY29sbGF0aW9uID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29s bERhdHVtKTsKKworCWluZGNsYXNzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwg aHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNz ZXJ0KCFpc251bGwpOworCWluZGNsYXNzID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIo aW5kY2xhc3NEYXR1bSk7CisKKwlpbmRvcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRF WFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251 bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1 bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0dW0pOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfY2xh c3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uCisJICovCisJaHRfaWR4cmVsID0gU2VhcmNo U3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJlbCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3Jt X3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsKKworCisJLyoKKwkgKiBGZXRjaCB0aGUg cGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4JyBhY2Nlc3MgbWV0aG9kCisJICovCisJaHRfYW0gPSBT ZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0oaWR4cmVscmVjLT5yZWxhbSkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9hbSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFt KTsKKwlhbXJlYyA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoaHRfYW0pOworCisJLyoKKwkgKiBH ZXQgdGhlIGluZGV4IGV4cHJlc3Npb25zLCBpZiBhbnkuICAoTk9URTogd2UgZG8gbm90IHVzZSB0 aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9ucyBvZiB0aGUgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0 ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRpc3BsYXkKKwkgKiBub24tY29uc3QtZm9sZGVkIGV4cHJl c3Npb25zLikKKwkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRl eF9pbmRleHBycywgTlVMTCkpCisJeworCQlEYXR1bQkJZXhwcnNEYXR1bTsKKwkJYm9vbAkJaXNu dWxsOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlleHByc0RhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZGV4 cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQlleHByc1N0cmluZyA9IFRleHRE YXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWluZGV4cHJzID0gKExpc3QgKikgc3RyaW5n VG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCX0KKwllbHNlCisJ CWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVtID0gbGlzdF9oZWFkKGluZGV4cHJzKTsK KworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKGdldF9yZWxfbmFtZShpbmRyZWxpZCks IGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmKTsKKworCS8qIE91 dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihO YW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBGZXRjaCB0aGUgaW5kZXggQU0ncyBBUEkg c3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhBbVJvdXRpbmUoYW1yZWMtPmFtaGFuZGxl cik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZpbml0aW9uLiAgTm90ZSB0aGUgb3V0ZXIg cGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBjYWxsZXIuCisJICovCisJZm9yIChrZXlu byA9IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRuYXR0czsga2V5bm8rKykKKwl7CisJCUF0dHJOdW1i ZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXkudmFsdWVzW2tleW5vXTsKKwkJaW50MTYJCW9wdCA9 IGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJT2lkCQkJa2V5Y29sdHlwZTsKKwkJT2lkCQkJ a2V5Y29sY29sbGF0aW9uOworCQlPaWQJCQlpbmRjb2xsOworCisJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmRlZmluaXRpb25CdWYsIGtleW5vID09IDAgPyAiIiA6ICIsICIpOworCisJCWlmIChh dHRudW0gIT0gMCkKKwkJeworCQkJLyogU2ltcGxlIGluZGV4IGNvbHVtbiAqLworCQkJY2hhcgkg ICAqYXR0bmFtZTsKKwkJCWludDMyCQlrZXljb2x0eXBtb2Q7CisKKwkJCWF0dG5hbWUgPSBnZXRf YXR0bmFtZShpbmRyZWxpZCwgYXR0bnVtLCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZkZWZpbml0aW9uQnVmLCBxdW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsKKwkJCWdldF9h dHR0eXBldHlwbW9kY29sbChpbmRyZWxpZCwgYXR0bnVtLAorCQkJCQkJCQkgICZrZXljb2x0eXBl LCAma2V5Y29sdHlwbW9kLAorCQkJCQkJCQkgICZrZXljb2xjb2xsYXRpb24pOworCQl9CisJCWVs c2UKKwkJeworCQkJLyogRXhwcmVzc2lvbmFsIGluZGV4ICovCisJCQlOb2RlCSAgICppbmRleGtl eTsKKwkJCWNoYXIJICAgKnN0cjsKKworCQkJaWYgKGluZGV4cHJfaXRlbSA9PSBOVUxMKQorCQkJ CWVsb2coRVJST1IsICJ0b28gZmV3IGVudHJpZXMgaW4gaW5kZXhwcnMgbGlzdCIpOworCQkJaW5k ZXhrZXkgPSAoTm9kZSAqKSBsZmlyc3QoaW5kZXhwcl9pdGVtKTsKKwkJCWluZGV4cHJfaXRlbSA9 IGxuZXh0KGluZGV4cHJzLCBpbmRleHByX2l0ZW0pOworCQkJLyogRGVwYXJzZSAqLworCQkJc3Ry ID0gZGVwYXJzZV9leHByZXNzaW9uKGluZGV4a2V5LCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOwor CisJCQkvKiBOZWVkIHBhcmVucyBpZiBpdCdzIG5vdCBhIGJhcmUgZnVuY3Rpb24gY2FsbCAqLwor CQkJaWYgKGluZGV4a2V5ICYmIElzQShpbmRleGtleSwgRnVuY0V4cHIpICYmCisJCQkJKChGdW5j RXhwciAqKSBpbmRleGtleSktPmZ1bmNmb3JtYXQgPT0gQ09FUkNFX0VYUExJQ0lUX0NBTEwpCisJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwgc3RyKTsKKwkJCWVsc2UK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiKCVzKSIsIHN0cik7CisKKwkJ CWtleWNvbHR5cGUgPSBleHByVHlwZShpbmRleGtleSk7CisJCQlrZXljb2xjb2xsYXRpb24gPSBl eHByQ29sbGF0aW9uKGluZGV4a2V5KTsKKwkJfQorCisJCS8qIEFkZCBjb2xsYXRpb24sIGV2ZW4g aWYgZGVmYXVsdCAqLworCQlpbmRjb2xsID0gaW5kY29sbGF0aW9uLT52YWx1ZXNba2V5bm9dOwor CQlpZiAoT2lkSXNWYWxpZChpbmRjb2xsKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRp b25CdWYsICIgQ09MTEFURSAlcyIsCisJCQkJCQkJIGdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKChp bmRjb2xsKSkpOworCisJCS8qIEFkZCB0aGUgb3BlcmF0b3IgY2xhc3MgbmFtZSwgZXZlbiBpZiBk ZWZhdWx0ICovCisJCWdldF9vcGNsYXNzX25hbWUoaW5kY2xhc3MtPnZhbHVlc1trZXlub10sIElu dmFsaWRPaWQsICZkZWZpbml0aW9uQnVmKTsKKworCQkvKiBBZGQgb3B0aW9ucyBpZiByZWxldmFu dCAqLworCQlpZiAoYW1yb3V0aW5lLT5hbWNhbm9yZGVyKQorCQl7CisJCQkvKiBJZiBpdCBzdXBw b3J0cyBzb3J0IG9yZGVyaW5nLCByZXBvcnQgREVTQyBhbmQgTlVMTFMgb3B0cyAqLworCQkJaWYg KG9wdCAmIElORE9QVElPTl9ERVNDKQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmRlZmluaXRpb25CdWYsICIgREVTQyIpOworCQkJCS8qIE5VTExTIEZJUlNUIGlzIHRoZSBkZWZh dWx0IGluIHRoaXMgY2FzZSAqLworCQkJCWlmICghKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJT VCkpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMg TEFTVCIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChvcHQgJiBJTkRPUFRJT05fTlVM TFNfRklSU1QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIg TlVMTFMgRklSU1QiKTsKKwkJCX0KKwkJfQorCisJCS8qIFhYWCBleGNsdWRlT3BzIHRoaW5neSB3 YXMgaGVyZTsgZG8gd2UgbmVlZCBhbnl0aGluZz8gKi8KKwl9CisJKmRlZmluaXRpb24gPSBkZWZp bml0aW9uQnVmLmRhdGE7CisKKwkvKiBPdXRwdXQgcmVsb3B0aW9ucyAqLworCSpyZWxvcHRpb25z ID0gZmxhdHRlbl9yZWxvcHRpb25zKGluZGV4cmVsaWQpOworCisJLyogT3V0cHV0IHRhYmxlc3Bh Y2UgKi8KKwl7CisJCU9pZAkJCXRibHNwYzsKKworCQl0YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3Bh Y2UoaW5kZXhyZWxpZCk7CisJCWlmIChPaWRJc1ZhbGlkKHRibHNwYykpCisJCQkqdGFibGVzcGFj ZSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihnZXRfdGFibGVzcGFjZV9uYW1lKHRibHNwYykp KTsKKwkJZWxzZQorCQkJKnRhYmxlc3BhY2UgPSBOVUxMOworCX0KKworCS8qIFJlcG9ydCBpbmRl eCBwcmVkaWNhdGUsIGlmIGFueSAqLworCWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVt X3BnX2luZGV4X2luZHByZWQsIE5VTEwpKQorCXsKKwkJTm9kZQkgICAqbm9kZTsKKwkJRGF0dW0J CXByZWREYXR1bTsKKwkJYm9vbAkJaXNudWxsOworCQljaGFyCSAgICpwcmVkU3RyaW5nOworCisJ CS8qIENvbnZlcnQgdGV4dCBzdHJpbmcgdG8gbm9kZSB0cmVlICovCisJCXByZWREYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4 X2luZHByZWQsICZpc251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7CisJCXByZWRTdHJpbmcgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKHByZWREYXR1bSk7CisJCW5vZGUgPSAoTm9kZSAqKSBzdHJpbmdU b05vZGUocHJlZFN0cmluZyk7CisJCXBmcmVlKHByZWRTdHJpbmcpOworCisJCS8qIERlcGFyc2Ug Ki8KKwkJKndoZXJlQ2xhdXNlID0KKwkJCWRlcGFyc2VfZXhwcmVzc2lvbihub2RlLCBjb250ZXh0 LCBmYWxzZSwgZmFsc2UpOworCX0KKwllbHNlCisJCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisKKwkv KiBDbGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNoZShodF9pZHgpOworCVJlbGVhc2VTeXNDYWNo ZShodF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNoZShodF9hbSk7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFuIEluZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBhbiBpbmRleCBPSUQgYW5kIHRoZSBwYXJz ZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIElmIHRoZSBpbmRleCBjb3JyZXNwb25kcyB0 byBhIGNvbnN0cmFpbnQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfSW5kZXhTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUlu ZGV4U3RtdCAgKm5vZGUgPSAoSW5kZXhTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpp bmRleFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCVJlbGF0aW9uCWlkeHJlbDsKKwlSZWxhdGlv bgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2FtOworCWNoYXIJICAgKmRlZmluaXRpb247CisJ Y2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAgICp0YWJsZXNwYWNlOworCWNoYXIJICAgKndo ZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1hcnkgfHwgbm9kZS0+aXNjb25zdHJhaW50KQor CXsKKwkJLyoKKwkJICogaW5kZXhlcyBmb3IgUFJJTUFSWSBLRVkgYW5kIG90aGVyIGNvbnN0cmFp bnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVseTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJCSAq LworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhyZWwgPSByZWxhdGlvbl9vcGVuKG9iamVjdElk LCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwgPSByZWxhdGlvbl9vcGVuKGlkeHJlbC0+cmRf aW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcGdfZ2V0X2luZGV4ZGVmX2Rl dGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5kZXhfYW0sICZkZWZpbml0aW9uLCAmcmVsb3B0 aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3aGVyZUNsYXVzZSk7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJl bnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OCisJICogJXt0YWJsZX1EIFVTSU5H ICV7aW5kZXhfYW19cyAoJXtkZWZpbml0aW9ufXMpICV7d2l0aH1zICV7dGFibGVzcGFjZX1zCisJ ICogJXt3aGVyZV9jbGF1c2V9cworCSAqLworCWluZGV4U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVB VEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7dW5pcXVlfXMiLAor CQkJCQkJIG5vZGUtPnVuaXF1ZSA/ICJVTklRVUUiIDogIiIpOworCisJYXBwZW5kX2Zvcm1hdF9z dHJpbmcoaW5kZXhTdG10LCAiSU5ERVgiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4 U3RtdCwgIiV7Y29uY3VycmVudGx5fXMiLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09O Q1VSUkVOVExZIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7 aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBF WElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtuYW1l fUkiLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeHJlbCkpOworCisJYXBwZW5k X29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUoaGVhcHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkpKTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGluZGV4U3RtdCwgIlVTSU5HICV7aW5kZXhfYW19cyIsIGluZGV4X2FtKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIigle2RlZmluaXRpb259cykiLCBkZWZpbml0aW9u KTsKKworCS8qIHJlbG9wdGlvbnMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWlm IChyZWxvcHRpb25zKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIoJXtvcHRzfXMpIiwg cmVsb3B0aW9ucyk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIs IGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3dpdGh9cyIsIHRt cCk7CisKKwkvKiB0YWJsZXNwYWNlICovCisJdG1wID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0Ui KTsKKwlpZiAodGFibGVzcGFjZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt0YWJs ZXNwYWNlfXMiLCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7 dGFibGVzcGFjZX1zIiwgdG1wKTsKKworCS8qIFdIRVJFIGNsYXVzZSAqLworCXRtcCA9IG5ld19v Ymp0cmVlKCJXSEVSRSIpOworCWlmICh3aGVyZUNsYXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wLCAiJXt3aGVyZX1zIiwgd2hlcmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5k ZXhTdG10LCAiJXt3aGVyZV9jbGF1c2V9cyIsIHRtcCk7CisKKwl0YWJsZV9jbG9zZShpZHhyZWws IEFjY2Vzc1NoYXJlTG9jayk7CisJdGFibGVfY2xvc2UoaGVhcHJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiBpbmRleFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU3Rt dCAoQ1JFQVRFIFRBQkxFKS4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNl dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTdG10ICpu b2RlID0gKENyZWF0ZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVs YXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRl eHQ7CisJT2JqVHJlZQkqY3JlYXRlU3RtdDsKKwlPYmpUcmVlCSp0bXA7CisJTGlzdAkgICAqbGlz dDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50 aXR5fUQgW09GCisJICogJXtvZl90eXBlfVQgfCBQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRlbnRp dHl9RF0gJXt0YWJsZV9lbGVtZW50c31zCisJICogJXtpbmhlcml0c31zICV7cGFydGl0aW9uX2J5 fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zCisJICogJXtvbl9jb21taXR9cyAl e3RhYmxlc3BhY2V9cworCSAqLworCWNyZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwZXJzaXN0ZW5jZX1zIiwK KwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3Rl bmNlKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiVEFCTEUiKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJ CQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCXRt cCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3Bh Y2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcCk7CisKKwlk cGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKworCS8qCisJICogVHlwZWQgdGFibGVzIGFu ZCBwYXJ0aXRpb25zIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtYXQgc3RyaW5nOiB3ZQor CSAqIG11c3Qgbm90IHB1dCB0YWJsZV9lbGVtZW50cyB3aXRoIHBhcmVudHMgZGlyZWN0bHkgaW4g dGhlIGZtdCBzdHJpbmcsCisJICogYmVjYXVzZSBpZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyB0aGUg cGFyZW5zIG11c3Qgbm90IGJlIGVtaXR0ZWQ7IGFuZAorCSAqIGFsc28sIHR5cGVkIHRhYmxlcyBk byBub3QgYWxsb3cgZm9yIGluaGVyaXRhbmNlLgorCSAqLworCWlmIChub2RlLT5vZlR5cGVuYW1l IHx8IG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKwor CQkvKgorCQkgKiBXZSBjYW4ndCBwdXQgdGFibGUgZWxlbWVudHMgZGlyZWN0bHkgaW4gdGhlIGZt dCBzdHJpbmcgYXMgYW4gYXJyYXkKKwkJICogc3Vycm91bmRlZCBieSBwYXJlbnMgaGVyZSwgYmVj YXVzZSBhbiBlbXB0eSBjbGF1c2Ugd291bGQgY2F1c2UgYQorCQkgKiBzeW50YXggZXJyb3IuICBU aGVyZWZvcmUsIHdlIHVzZSBhbiBpbmRpcmVjdGlvbiBlbGVtZW50IGFuZCBzZXQKKwkJICogcHJl c2VudD1mYWxzZSB3aGVuIHRoZXJlIGFyZSBubyBlbGVtZW50cy4KKwkJICovCisJCWlmIChub2Rl LT5vZlR5cGVuYW1lKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlv bi0+cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICJPRiAle29mX3R5cGV9VCIsIHRtcCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0 CSAqcGFyZW50czsKKwkJCU9iakVsZW0JICplbGVtOworCisJCQlwYXJlbnRzID0gZGVwYXJzZV9J bmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQkJZWxlbSA9IChPYmpFbGVtICopIGxpbml0aWFsKHBh cmVudHMpOworCisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJ CQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNl X1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJ CQkJCQkJCSB0cnVlLAkJLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgZmFsc2UpOwkvKiBu b3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0 cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCQlpZiAodGFibGVlbHRzID09IE5JTCkKKwkJewor CQkJdG1wID0gbmV3X29ianRyZWUoIiIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInBy ZXNlbnQiLCBmYWxzZSk7CisJCX0KKwkJZWxzZQorCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIigl e2VsZW1lbnRzOiwgfXMpIiwgMSwKKwkJCQkJCQkJICJlbGVtZW50cyIsIE9ialR5cGVBcnJheSwg dGFibGVlbHRzKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIigle3RhYmxl X2VsZW1lbnRzOiwgfXMpIiwgdG1wKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqdGFibGVl bHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyBMSUtF IGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFscmVhZHkgYmVlbiB0cmFuc2Zv cm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkgKi8KKworCQkvKgorCQkgKiBQ cm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlvbnMgYW5kIGNvbnN0cmFpbnRz LglPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFpbmVkIGZyb20gdGhl IHBhcnNlIG5vZGUgaXRzZWxmLglUbworCQkgKiBnZXQgY29uc3RyYWludHMgd2UgcmVseSBvbiBw Z19jb25zdHJhaW50LCBiZWNhdXNlIHRoZSBwYXJzZSBub2RlCisJCSAqIG1pZ2h0IGJlIG1pc3Np bmcgc29tZSB0aGluZ3Mgc3VjaCBhcyB0aGUgbmFtZSBvZiB0aGUgY29uc3RyYWludHMuCisJCSAq LworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRh YmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSBmYWxzZSwJCS8qIG5vdCB0eXBlZCB0YWJs ZSAqLworCQkJCQkJCQkJCSBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRz ID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisK KwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9 cykiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0 aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSAqIHBhcmVudHMgZnJv bSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUgYWN0dWFsCisJCSAq IHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJhdGhlciB0aGFuIHRy eWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gdGhl IHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUgYW5kIGNvbnZlbmllbnQg dG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1wID0gbmV3X29ianRyZWUo IklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xlbmd0aChub2RlLT5pbmhSZWxhdGlvbnMpID4gMCkK KwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiKCV7cGFyZW50czosIH1EKSIsIGRlcGFyc2Vf SW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2Jq ZWN0KHRtcCwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0 bXQsICIle2luaGVyaXRzfXMiLCB0bXApOworCX0KKworCXRtcCA9IG5ld19vYmp0cmVlKCJUQUJM RVNQQUNFIik7CisJaWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXAsICIle3RhYmxlc3BhY2V9SSIsIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNl CisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcCk7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtvbl9jb21taXR9cyIsCisJCQkJCQkgZGVwYXJz ZV9PbkNvbW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJLyogRk9SIFZBTFVFUyBjbGF1 c2UgKi8KKwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoKKwkJICogR2V0IHBnX2NsYXNz LnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlCisJCSAqIHBhcnNl dHJlZSBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbgor CQkgKiB3aGljaCBoYXZlbid0IGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3Ry aW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJIFJl bGF0aW9uR2V0UGFydGl0aW9uQm91bmQob2JqZWN0SWQpKTsKKwl9CisKKwkvKiBQQVJUSVRJT04g QlkgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIlBBUlRJVElPTiBCWSIpOworCWlmIChy ZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmaW5pdGlvbn1zIiwgcGdfZ2V0X3BhcnRr ZXlkZWZfc2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0 KHRtcCwgIiV7ZGVmaW5pdGlvbn1zIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtw YXJ0aXRpb25fYnl9cyIsIHRtcCk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle2FjY2Vzc19tZXRob2R9SSIsIG5vZGUtPmFjY2Vzc01ldGhvZCk7 CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgIiV7YWNjZXNzX21ldGhvZH1J Iik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXthY2Nlc3NfbWV0aG9kfXMiLCB0bXAp OworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWxp c3QgPSBOSUw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpUcmVl CSAgICp0bXAyOworCQlEZWZFbGVtCSpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisK KwkJdG1wMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wMikpOworCX0KKworCWlmIChsaXN0KQorCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHRtcCwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcCk7CisKKwlyZWxhdGlv bl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10 OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0 S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlCSAgICpyOwor CisJaWYgKGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwl7CisJCXIgPSBuZXdfb2JqdHJlZSgiUkVT RVQgQUxMIik7CisJfQorCWVsc2UgaWYgKHZhbHVlICE9IE5VTEwpCisJeworCQlyID0gbmV3X29i anRyZWVfVkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJICAgInNldF9uYW1lIiwgT2Jq VHlwZVN0cmluZywgbmFtZSk7CisKKwkJLyoKKwkJICogU29tZSBHVUMgdmFyaWFibGUgbmFtZXMg YXJlICdMSVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkgKiBxdW90ZWQuCisJCSAq LworCQlpZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkgJiBHVUNfTElTVF9RVU9U RSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHIsICJUTyAle3NldF92YWx1ZX1zIiwgdmFsdWUp OworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyLCAiVE8gJXtzZXRfdmFsdWV9TCIs IHZhbHVlKTsKKwl9CisJZWxzZQorCXsKKwkJciA9IG5ld19vYmp0cmVlKCJSRVNFVCIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChyLCAiJXtzZXRfbmFtZX1JIiwgbmFtZSk7CisJfQorCisJcmV0 dXJuIHI7Cit9CisKKy8qCisgKiBkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uU3RtdAorICoJCURlcGFy c2UgYSBDcmVhdGVGdW5jdGlvblN0bXQgKENSRUFURSBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBh IGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0 aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRnVuY3Rpb24oT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRnVuY3Rpb25TdG10ICpub2RlID0gKENyZWF0ZUZ1 bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY3JlYXRlRnVuYzsKKwlPYmpU cmVlCSAgICp0bXA7CisJRGF0dW0JCXRtcGRhdHVtOworCWNoYXIJICAgKnNvdXJjZTsKKwljaGFy CSAgICpwcm9iaW47CisJTGlzdAkgICAqcGFyYW1zOworCUxpc3QJICAgKmRlZmF1bHRzOworCUxp c3QJICAgKnNldHMgPSBOSUw7CisJTGlzdAkgICAqdHlwZXMgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKwlMaXN0Q2VsbCAgICpjdXJkZWY7CisJTGlzdENlbGwgICAqdGFibGVfcGFyYW1zID0g TlVMTDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJSGVh cFR1cGxlCWxhbmdUdXA7CisJT2lkCQkgICAqdHlwYXJyYXk7CisJT2lkCQkgICAqdHJmdHlwZXM7 CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlpbnQJCQlpOworCWludAkJCXR5cG51bTsK KwlpbnQJCQludHlwZXM7CisJYm9vbAkJaXNudWxsOworCWJvb2wJCWlzZnVuY3Rpb247CisKKwkv KiBnZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBS T0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUi LAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChw cm9jVHVwKTsKKworCS8qIGdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAq LworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgcHJvY0Zvcm0tPnByb2xhbmcp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsdXJlIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgcHJvY0Zvcm0t PnByb2xhbmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5n VHVwKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHVzZWZ1bCB2YWx1ZXMgZm9yIHByb3NyYyBhbmQg cHJvYmluLiAgV2UgY29wZSB3aXRoIHByb2JpbgorCSAqIGJlaW5nIGVpdGhlciBOVUxMIG9yICIt IiwgYnV0IHByb3NyYyBtdXN0IGhhdmUgYSB2YWxpZCB2YWx1ZS4KKwkgKi8KKwl0bXBkYXR1bSA9 IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJv Y19wcm9zcmMsICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxsIHBy b3NyYyBpbiBmdW5jdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlzb3VyY2UgPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKworCS8qIERldGVybWluZSBhIHVzZWZ1bCB2YWx1 ZSBmb3IgcHJvYmluICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJv Y1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYmluLCAmaXNudWxsKTsKKwlpZiAoaXNu dWxsKQorCQlwcm9iaW4gPSBOVUxMOworCWVsc2UKKwl7CisJCXByb2JpbiA9IFRleHREYXR1bUdl dENTdHJpbmcodG1wZGF0dW0pOworCQlpZiAocHJvYmluWzBdID09ICdcMCcgfHwgc3RyY21wKHBy b2JpbiwgIi0iKSA9PSAwKQorCQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJv c2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgRlVOQ1RJT04gJXtzaWdu YXR1cmV9cyBSRVRVUk5TICV7cmV0dXJuX3R5cGV9cworCSAqIExBTkdVQUdFICV7dHJhbnNmb3Jt X3R5cGV9cyAle2xhbmd1YWdlfUkgJXt3aW5kb3d9cyAle3ZvbGF0aWxpdHl9cworCSAqICV7cGFy YWxsZWxfc2FmZXR5fXMgJXtsZWFrcHJvb2Z9cyAle3N0cmljdH1zICV7c2VjdXJpdHlfZGVmaW5l cn1zCisJICogJXtjb3N0fXMgJXtyb3dzfXMgJXtzdXBwb3J0fXMgJXtzZXRfb3B0aW9uczogfXMg QVMgJXtvYmpmaWxlfUwsCisJICogJXtzeW1ib2x9TAorCSAqLworCWNyZWF0ZUZ1bmMgPSBuZXdf b2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAi JXtvcl9yZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAi Iik7CisKKwkvKgorCSAqIFRvIGNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGFycmF5LCBleHRyYWN0 IHRoZSB0eXBlIE9JRHMgZnJvbSB0aGUKKwkgKiBmdW5jdGlvbidzIHBnX3Byb2MgZW50cnkuICBJ ZiBwcm9uYXJncyBlcXVhbHMgdGhlIHBhcmFtZXRlciBsaXN0IGxlbmd0aCwKKwkgKiB0aGVyZSBh cmUgbm8gT1VUIHBhcmFtZXRlcnMgYW5kIHRodXMgd2UgY2FuIGV4dHJhY3QgdGhlIHR5cGUgT0lE IGZyb20KKwkgKiBwcm9hcmd0eXBlczsgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gZGVjb2RlIHByb2Fs bGFyZ3R5cGVzLCB3aGljaCBpcworCSAqIGEgYml0IG1vcmUgaW52b2x2ZWQuCisJICovCisJdHlw YXJyYXkgPSBwYWxsb2MobGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykgKiBzaXplb2YoT2lk KSk7CisJaWYgKGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpID4gcHJvY0Zvcm0tPnByb25h cmdzKQorCXsKKwkJYm9vbAlpc251bGw7CisJCURhdHVtCWFsbHR5cGVzOworCQlEYXR1bSAgKnZh bHVlczsKKwkJYm9vbCAgICpudWxsczsKKwkJaW50CQluZWxlbXM7CisKKwkJYWxsdHlwZXMgPSBT eXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19wcm9j X3Byb2FsbGFyZ3R5cGVzLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1Is ICJOVUxMIHByb2FsbGFyZ3R5cGVzLCBidXQgbW9yZSBwYXJhbWV0ZXJzIHRoYW4gYXJncyIpOwor CQlkZWNvbnN0cnVjdF9hcnJheShEYXR1bUdldEFycmF5VHlwZVAoYWxsdHlwZXMpLAorCQkJCQkJ ICBPSURPSUQsIDQsICd0JywgJ2knLAorCQkJCQkJICAmdmFsdWVzLCAmbnVsbHMsICZuZWxlbXMp OworCQlpZiAobmVsZW1zICE9IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpKQorCQkJZWxv ZyhFUlJPUiwgIm1pc21hdGNoZWQgcHJvYWxsYXJnYXR5cGVzIik7CisJCWZvciAoaSA9IDA7IGkg PCBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJdHlwYXJyYXlbaV0gPSB2 YWx1ZXNbaV07CisJfQorCWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0X2xlbmd0aChu b2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJIHR5cGFycmF5W2ldID0gcHJvY0Zvcm0tPnByb2Fy Z3R5cGVzLnZhbHVlc1tpXTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgZGVmYXVs dCBleHByZXNzaW9ucywgd2UgcmVhZCB0aGUgZGVwYXJzZWQgZXhwcmVzc2lvbiBhcworCSAqIGEg bGlzdCBzbyB0aGF0IHdlIGNhbiBhdHRhY2ggdGhlbSB0byBlYWNoIGFyZ3VtZW50LgorCSAqLwor CXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAg QW51bV9wZ19wcm9jX3Byb2FyZ2RlZmF1bHRzLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7 CisJCWRlZmF1bHRzID0gRnVuY3Rpb25HZXREZWZhdWx0cyhEYXR1bUdldFRleHRQKHRtcGRhdHVt KSk7CisJCWN1cmRlZiA9IGxpc3RfaGVhZChkZWZhdWx0cyk7CisJfQorCWVsc2UKKwl7CisJCWRl ZmF1bHRzID0gTklMOworCQljdXJkZWYgPSBOVUxMOworCX0KKworCS8qCisJICogTm93IGl0ZXJh dGUgb3ZlciBlYWNoIHBhcmFtZXRlciBpbiB0aGUgcGFyc2V0cmVlIHRvIGNyZWF0ZSB0aGUKKwkg KiBwYXJhbWV0ZXJzIGFycmF5LgorCSAqLworCXBhcmFtcyA9IE5JTDsKKwl0eXBudW0gPSAwOwor CWZvcmVhY2goY2VsbCwgbm9kZS0+cGFyYW1ldGVycykKKwl7CisJCUZ1bmN0aW9uUGFyYW1ldGVy ICpwYXJhbSA9IChGdW5jdGlvblBhcmFtZXRlciAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJ ICAgKnBhcmFtb2JqOworCQlPYmpUcmVlCSAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVlCSAgICpu YW1lOworCisJCS8qCisJCSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRlcyBlbmQg b2YgaW5wdXQgYXJndW1lbnRzOyB0aGUKKwkJICogZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHBh cnQgb2YgdGhlIHJldHVybiB0eXBlLiAgV2UgaWdub3JlIHRoZW0KKwkJICogaGVyZSwgYnV0IGtl ZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3Qgc28gdGhhdAorCQkg KiB3ZSBjYW4gZWFzaWx5IHByb2R1Y2UgdGhlIHJldHVybiB0eXBlIGJlbG93LgorCQkgKi8KKwkJ aWYgKHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVEFCTEUpCisJCXsKKwkJCXRhYmxlX3BhcmFt cyA9IGNlbGw7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4IGZv ciBwYXJhbWF0ZXI6ICV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UICV7ZGVmYXVsdH1zCisJCSAq CisJCSAqIE5vdGUgdGhhdCAle25hbWV9cyBpcyBhIHN0cmluZyBoZXJlLCBub3QgYW4gaWRlbnRp ZmllcjsgdGhlIHJlYXNvbgorCQkgKiBmb3IgdGhpcyBpcyB0aGF0IGFuIGFic2VudCBwYXJhbWV0 ZXIgbmFtZSBtdXN0IHByb2R1Y2UgYW4gZW1wdHkKKwkJICogc3RyaW5nLCBub3QgIiIsIHdoaWNo IGlzIHdoYXQgd291bGQgaGFwcGVuIGlmIHdlIHdlcmUgdG8gdXNlCisJCSAqICV7bmFtZX1JIGhl cmUuICBTbyB3ZSBhZGQgYW5vdGhlciBsZXZlbCBvZiBpbmRpcmVjdGlvbiB0byBhbGxvdyB1cwor CQkgKiB0byBpbmplY3QgYSAicHJlc2VudCIgcGFyYW1ldGVyLgorCQkgKi8KKwkJcGFyYW1vYmog PSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXtt b2RlfXMiLAorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOID8gIklOIiA6CisJ CQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fT1VUID8gIk9VVCIgOgorCQkJCQkJCSBw YXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOT1VUID8gIklOT1VUIiA6CisJCQkJCQkJIHBhcmFt LT5tb2RlID09IEZVTkNfUEFSQU1fVkFSSUFESUMgPyAiVkFSSUFESUMiIDoKKwkJCQkJCQkgIklO Iik7CisKKwkJLyogb3B0aW9uYWwgd2hvbGVzYWxlIHN1cHByZXNzaW9uIG9mICJuYW1lIiBvY2N1 cnMgaGVyZSAqLworCisJCW5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KG5hbWUsICIle25hbWV9SSIsCisJCQkJCQkJIHBhcmFtLT5uYW1lID8gcGFyYW0tPm5h bWUgOiAiTlVMTCIpOworCisJCWFwcGVuZF9ib29sX29iamVjdChuYW1lLCAicHJlc2VudCIsCisJ CQkJCQkgICBwYXJhbS0+bmFtZSA/IHRydWUgOiBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9v YmplY3QocGFyYW1vYmosICIle25hbWV9cyIsIG5hbWUpOworCisJCWRlZmF1bHR2YWwgPSBuZXdf b2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAoUG9pbnRlcklzVmFsaWQocGFyYW0tPmRlZmV4cHIp KQorCQl7CisJCQljaGFyICpleHByOworCisJCQlpZiAoY3VyZGVmID09IE5VTEwpCisJCQkJZWxv ZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGxpc3QgdG9vIHNob3J0Iik7CisJCQlleHByID0gbGZp cnN0KGN1cmRlZik7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGRlZmF1bHR2YWwsICIle3Zh bHVlfXMiLCBleHByKTsKKwkJCWN1cmRlZiA9IGxuZXh0KGRlZmF1bHRzLCBjdXJkZWYpOworCQl9 CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdChkZWZhdWx0dmFsLCAicHJlc2VudCIsIGZh bHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZhdWx0dmFs KTsKKworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1v YmopKTsKKwl9CisKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EIiwgMSwKKwkJ CQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJICBvYmplY3RJ ZCkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wLCAiKCIpOworCWFwcGVuZF9hcnJheV9v YmplY3QodG1wLCAiJXthcmd1bWVudHM6LCB9cyIsIHBhcmFtcyk7CisJYXBwZW5kX2Zvcm1hdF9z dHJpbmcodG1wLCAiKSIpOworCisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+cHJva2luZCAhPSBQ Uk9LSU5EX1BST0NFRFVSRSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlRnVuYywgIkZVTkNUSU9OICV7c2lnbmF0dXJlfXMiLCB0bXApOworCWVsc2UK KwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIlBST0NFRFVSRSAle3NpZ25hdHVy ZX1zIiwgdG1wKTsKKworCS8qCisJICogQSByZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9mIHR3 byBmb3JtczogZWl0aGVyIGEgW1NFVE9GXSBzb21lX3R5cGUsIG9yCisJICogYSBUQUJMRShsaXN0 LW9mLXR5cGVzKS4gIFdlIGNhbiB0ZWxsIHRoZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNhdyBh CisJICogdGFibGUgcGFyYW0gYWJvdmUgd2hpbGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxpc3Qu CisJICovCisJaWYgKHRhYmxlX3BhcmFtcyA9PSBOVUxMKQorCXsKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIiIsIDEsCisJCQkJCQkJICJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJwbGFp biIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3NldG9mfXMiLAorCQkJCQkJCSBw cm9jRm9ybS0+cHJvcmV0c2V0ID8gIlNFVE9GIiA6ICIiKTsKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wLCAiJXtyZXR0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9j Rm9ybS0+cHJvcmV0dHlwZSwgLTEpKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcmV0dHlw ZXMgPSBOSUw7CisJCU9ialRyZWUJICAgKnBhcmFtb2JqOworCisJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJUQUJMRSIsIDEsCisJCQkJCQkJICJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJ0 YWJsZSIpOworCQlmb3IgKDsgdGFibGVfcGFyYW1zICE9IE5VTEw7IHRhYmxlX3BhcmFtcyA9IGxu ZXh0KG5vZGUtPnBhcmFtZXRlcnMsIHRhYmxlX3BhcmFtcykpCisJCXsKKwkJCUZ1bmN0aW9uUGFy YW1ldGVyICpwYXJhbSA9IGxmaXJzdCh0YWJsZV9wYXJhbXMpOworCisJCQlwYXJhbW9iaiA9IG5l d19vYmp0cmVlKCIiKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1l fUkiLCBwYXJhbS0+bmFtZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7 dHlwZX1UIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsr XSwgLTEpKTsKKwkJCXJldHR5cGVzID0gbGFwcGVuZChyZXR0eXBlcywgbmV3X29iamVjdF9vYmpl Y3QocGFyYW1vYmopKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiKCV7cmV0 dHlwZXM6LCB9cykiLCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJSRVRVUk5TICV7cmV0dXJuX3R5cGV9cyIsIHRt cCk7CisKKwkvKiBUUkFOU0ZPUk0gRk9SIFRZUEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVFJB TlNGT1JNIik7CisKKwludHlwZXMgPSBnZXRfZnVuY190cmZ0eXBlcyhwcm9jVHVwLCAmdHJmdHlw ZXMpOworCWZvciAoaSA9IDA7IGkgPCBudHlwZXM7IGkrKykKKwl7CisJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJGT1IgVFlQRSAle3R5cGV9VCIsIDEsCisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJ CXR5cGVzID0gbGFwcGVuZCh0eXBlcywgdG1wKTsKKwl9CisKKwlpZiAodHlwZXMpCisJCWFwcGVu ZF9hcnJheV9vYmplY3QodG1wLCAiJXtmb3JfdHlwZTosIH1zIiwgdHlwZXMpOworCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXt0cmFuc2Zvcm1fdHlwZX1zIiwgdG1wKTsKKworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJMQU5HVUFHRSAle2xhbmd1YWdlfUkiLAor CQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChpc2Z1bmN0aW9uKQor CXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7d2luZG93fXMiLAorCQkJ CQkJCSBwcm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ICJXSU5ET1ciIDogIiIp OworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXt2b2xhdGlsaXR5fXMiLAor CQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUgPwor CQkJCQkJCSAiVk9MQVRJTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBS T1ZPTEFUSUxFX1NUQUJMRSA/CisJCQkJCQkJICJTVEFCTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0t PnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX0lNTVVUQUJMRSA/CisJCQkJCQkJICJJTU1VVEFC TEUiIDogIklOVkFMSUQgVk9MQVRJTElUWSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUZ1bmMsICIle3BhcmFsbGVsX3NhZmV0eX1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3Bh cmFsbGVsID09IFBST1BBUkFMTEVMX1NBRkUgPworCQkJCQkJCSAiUEFSQUxMRUwgU0FGRSIgOgor CQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfUkVTVFJJQ1RFRCA/ CisJCQkJCQkJICJQQVJBTExFTCBSRVNUUklDVEVEIiA6ICJQQVJBTExFTCBVTlNBRkUiKTsKKwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtsZWFrcHJvb2Z9cyIsCisJCQkJ CQkJIHByb2NGb3JtLT5wcm9sZWFrcHJvb2YgPyAiTEVBS1BST09GIiA6ICIiKTsKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7c3RyaWN0fXMiLAorCQkJCQkJCSBwcm9jRm9y bS0+cHJvaXNzdHJpY3QgPworCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoK KwkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlRnVuYywgIiV7c2VjdXJpdHlfZGVmaW5lcn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0t PnByb3NlY2RlZiA/CisJCQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZP S0VSIik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7Y29zdH1zIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQki Y29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKwor CQl0bXAgPSBuZXdfb2JqdHJlZSgiUk9XUyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3Jvd3MgPT0g MCkKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCQllbHNl CisJCQlhcHBlbmRfZmxvYXRfb2JqZWN0KHRtcCwgIiV7cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jv d3MpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtyb3dzfXMiLCB0bXAp OworCisJCXRtcCA9IG5ld19vYmp0cmVlKCJTVVBQT1JUICV7bmFtZX1zIik7CisJCWlmIChwcm9j Rm9ybS0+cHJvc3VwcG9ydCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCS8qCisJ CQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQg d291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFy Y2ggcGF0aC4KKwkJCSAqLworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7bmFtZX1zIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0 aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJn dHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJ TkRfTk9ORSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3N1 cHBvcnR9cyIsIHRtcCk7CisJfQorCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsK KwkJRGVmRWxlbQkqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJ ICAgKnRtcCA9IE5VTEw7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09 IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICop IGRlZmVsLT5hcmc7CisJCQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0 bXQpOworCisJCQl0bXAgPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+ bmFtZSwgdmFsdWUpOworCQkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVGdW5jLCAiJXtzZXRf b3B0aW9uczogfXMiLCBzZXRzKTsKKworCS8qIEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiAq LworCSh2b2lkKSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwgQW51bV9wZ19wcm9j X3Byb3NxbGJvZHksICZpc251bGwpOworCWlmIChwcm9jRm9ybS0+cHJvbGFuZyA9PSBTUUxsYW5n dWFnZUlkICYmICFpc251bGwpCisJeworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJaW5pdFN0 cmluZ0luZm8oJmJ1Zik7CisJCXByaW50X2Z1bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJvY1R1cCk7 CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7ZGVmaW5pdGlvbn1zIiwg YnVmLmRhdGEpOworCX0KKwllbHNlIGlmIChwcm9iaW4gPT0gTlVMTCkKKwl7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJBUyAle2RlZmluaXRpb259TCIsCisJCQkJCQkJIHNv dXJjZSk7CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMs ICJBUyAle29iamZpbGV9TCIsIHByb2Jpbik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZUZ1bmMsICIsICV7c3ltYm9sfUwiLCBzb3VyY2UpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShs YW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gY3JlYXRlRnVu YzsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlckZ1bmN0aW9uU3RtdCAoQUxURVIgRlVOQ1RJ T04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBhbHRl ciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRnVuY3Rpb24o T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGdW5jdGlvblN0bXQgKm5v ZGUgPSAoQWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmFsdGVy RnVuYzsKKwlPYmpUcmVlCSAgICpzaWduOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdf cHJvYyBwcm9jRm9ybTsKKwlMaXN0CSAgICpwYXJhbXM7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7 CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyogZ2V0IHRoZSBwZ19wcm9jIHR1 cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJ cHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkvKgorCSAq IFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBGVU5DVElPTiAle3NpZ25hdHVyZX1zICV7 ZGVmaW5pdGlvbjogfXMKKwkgKi8KKwlhbHRlckZ1bmMgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg RlVOQ1RJT04iLCAwKTsKKworCXBhcmFtcyA9IE5JTDsKKworCS8qCisJICogQUxURVIgRlVOQ1RJ T04gZG9lcyBub3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkgKiB0 byBnZXQgaW5wdXQgdHlwZSBPaWRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+ cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9ialRyZWUJICAgKnRtcCA9IG5ld19vYmp0cmVlX1ZBKCIl e3R5cGV9VCIsIDApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgInR5cGUiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ld LCAtMSkpOworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCisJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHNpZ24sICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCWFw cGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50czosIH1zKSIsIHBhcmFtcyk7CisK KwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckZ1bmMsICIle3NpZ25hdHVyZX1zIiwgc2lnbik7 CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmFjdGlvbnMpCisJeworCQlEZWZFbGVtCSpkZWZlbCA9 IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wID0gTlVMTDsKKwor CQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidm9sYXRpbGl0eSIpID09IDApCisJCXsKKwkJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKHN0clZhbChkZWZlbC0+YXJnKSwgMCk7CisJCX0KKwkJZWxz ZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1w ID0gbmV3X29ianRyZWVfVkEoaW50VmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJSRVRVUk5T IE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIiwg MCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VjdXJpdHkiKSA9 PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykgPwor CQkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiLCAwKTsKKwkJ fQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJsZWFrcHJvb2YiKSA9PSAwKQor CQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJ CQkgIkxFQUtQUk9PRiIgOiAiTk9UIExFQUtQUk9PRiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgImNvc3QiKSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCSAiY29zdCIsIE9ialR5cGVGbG9h dCwKKwkJCQkJCQkJIGRlZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJfQorCQllbHNlIGlmIChzdHJj bXAoZGVmZWwtPmRlZm5hbWUsICJyb3dzIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIlJPV1MiLCAwKTsKKwkJCWlmIChkZWZHZXROdW1lcmljKGRlZmVsKSA9PSAwKQorCQkJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCQkJZWxzZQorCQkJ CWFwcGVuZF9mbG9hdF9vYmplY3QodG1wLCAiJXtyb3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVt ZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNl dCIpID09IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRT dG10ICopIGRlZmVsLT5hcmc7CisJCQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFy Z3Moc3N0bXQpOworCisJCQl0bXAgPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBz c3RtdC0+bmFtZSwgdmFsdWUpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgInN1cHBvcnQiKSA9PSAwKQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJdG1w ID0gbmV3X29ianRyZWUoIlNVUFBPUlQiKTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBw b3J0KTsKKworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0 aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGlu IHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVS TkFMT0lEOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtuYW1lfXMiLAorCQkJCQkJ CQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJ CQkJCQkJCQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJ CQkJCQkJCQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVs LT5kZWZuYW1lLCAicGFyYWxsZWwiKSA9PSAwKQorCQl7CisJCQljaGFyICpmbXQgPSBwc3ByaW50 ZigiUEFSQUxMRUwgJXMiLCBzdHJWYWwoZGVmZWwtPmFyZykpOworCQkJdG1wID0gbmV3X29ianRy ZWUoZm10KTsKKwkJfQorCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlckZ1bmMsICIle2RlZmlu aXRpb246IH1zIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0 dXJuIGFsdGVyRnVuYzsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlck93bmVyU3RtdCAoQUxU RVIgLi4uIE9XTkVSIFRPIC4uLikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJPd25lclN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ QWx0ZXJPd25lclN0bXQgKm5vZGUgPSAoQWx0ZXJPd25lclN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUJCSAgICpvd25lclN0bXQ7CisJY2hhcgkJICAgKmZtdDsKKworCWZtdCA9IHBzcHJpbnRm KCJBTFRFUiAlcyAlJXtpZGVudGl0eX1zIE9XTkVSIFRPICUle25ld293bmVyfUkiLAorCQkJCSAg IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUpKTsKKworCW93bmVyU3RtdCA9IG5l d19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCSAgIGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSksCisJCQkJCQkJ ICAgIm5ld293bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRfcm9sZXNwZWNfbmFt ZShub2RlLT5uZXdvd25lcikpOworCisJcmV0dXJuIG93bmVyU3RtdDsKK30KKworLyoKKyAqIFJl dHVybiB0aGUgZ2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25z dCBjaGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0 Y2ggKG9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFH R1JFR0FURSI7CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNl IE9CSkVDVF9DT0xVTU46CisJCQlyZXR1cm4gIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTExB VElPTjoKKwkJCXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoK KwkJCXJldHVybiAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0 dXJuICJEQVRBQkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlO IjsKKwkJY2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dF UiI7CisJCWNhc2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJ Y2FzZSBPQkpFQ1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNh c2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJuICJTRVJWRVIiOworCQljYXNlIE9C SkVDVF9GT1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBP QkpFQ1RfRlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5E RVg6CisJCQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1 cm4gIkxBTkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxB UkdFIE9CSkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFM SVpFRCBWSUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1Ig Q0xBU1MiOworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOwor CQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJ Y2FzZSBPQkpFQ1RfUk9MRToKKwkJCXJldHVybiAiUk9MRSI7CisJCWNhc2UgT0JKRUNUX1JVTEU6 CisJCQlyZXR1cm4gIlJVTEUiOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4gIlND SEVNQSI7CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJcmV0dXJuICJTRVFVRU5DRSI7CisJ CWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RB QkxFU1BBQ0U6CisJCQlyZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VS OgorCQkJcmV0dXJuICJUUklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgor CQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKwkJLyoKKwkJY2FzZSBPQkpF Q1RfVFNDT05GSUdfTUFQUElORzoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElP TiBNQVBQSU5HIjsKKwkJKi8KKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJu ICJURVhUIFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQly ZXR1cm4gIlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJ CQlyZXR1cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJ CXJldHVybiAiVFlQRSI7CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJldHVybiAi VVNFUiBNQVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklFVyI7CisK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIs IG9ianR5cGUpOworCX0KK30KKworLyoKKyAqIERlcGFyc2UgYSBSZW5hbWVTdG10LgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbmFtZVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNz LCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3RtdCAqbm9kZSA9IChSZW5hbWVTdG10ICop IHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpyZW5hbWVTdG10OworCWNoYXIJICAgKmZtdHN0cjsK Kwljb25zdCBjaGFyICpvYmp0eXBlOworCVJlbGF0aW9uCXJlbGF0aW9uOworCU9pZAkJCXNjaGVt YUlkOworCisJLyoKKwkgKiBJbiBhIEFMVEVSIC4uIFJFTkFNRSBjb21tYW5kLCB3ZSBkb24ndCBo YXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAqIG9iamVjdCBpbiBzeXN0ZW0gY2F0YWxv Z3M6IHNpbmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0aGUgY29tbWFuZCBoYXMKKwkgKiBleGVj dXRlZCwgdGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29uZS4gIFRoZXJlZm9yZSwgd2UgZXh0cmFj dCBpdCBmcm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBOb3RlIHdlIHN0aWxsIGV4dHJhY3QgdGhl IHNjaGVtYSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkgKiAoaXQgbWlnaHQgbm90IGJlIHByZXNl bnQgaW4gdGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3QgcG9zc2libHkgaGF2ZQorCSAqIGNoYW5n ZWQgYW55d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+cmVuYW1lVHlwZSkKKwl7CisJCWNhc2Ug T0JKRUNUX1RBQkxFOgorCQljYXNlIE9CSkVDVF9JTkRFWDoKKwkJY2FzZSBPQkpFQ1RfU0VRVUVO Q0U6CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJCSAqIEFMVEVSICVz ICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorCQkJICov CisJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSk7CisJCQlm bXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJCXJlbGF0aW9uID0gcmVs YXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1h SWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7CisJCQlyZW5hbWVTdG10ID0gbmV3 X29ianRyZWVfVkEoZm10c3RyLCAwKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0 bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJ U1RTIiA6ICIiKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50 aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJ CQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJIG5v ZGUtPm5ld25hbWUpOworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNhc2UgT0JKRUNU X0NPTFVNTjoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBB Y2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxh dGlvbik7CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJCSAqIENvbXBv c2l0ZSB0eXBlczogQUxURVIgb2JqdHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVURQor CQkJICogJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkgJXtjYXNjYWRlfXMKKwkJCSAqCisJCQkg KiBOb3JtYWwgdHlwZXM6IEFMVEVSIG9ianR5cGUgJXtpZl9leGlzdHN9cyAlJXtpZGVudGl0eX1E IFJFTkFNRQorCQkJICogQ09MVU1OICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JCisJCQkgKi8K KwkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKTsKKwkJCWZt dHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCQkJcmVuYW1lU3RtdCA9IG5l d19vYmp0cmVlKGZtdHN0cik7CisKKwkJCS8qIENvbXBvc2l0ZSB0eXBlcyBkbyBub3Qgc3VwcG9y dCBJRiBFWElTVFMgKi8KKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xVTU4p CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZfZXhpc3RzfXMiLAor CQkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCSAgbm9kZS0+ cmVsYXRpb24tPnJlbG5hbWUpKTsKKworCQkJZm10c3RyID0gcHNwcmludGYoIlJFTkFNRSAlcyAl JXtjb2xuYW1lfUkiLCBvYmp0eXBlKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1l U3RtdCwgZm10c3RyLCBub2RlLT5zdWJuYW1lKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl bmFtZVN0bXQsICJUTyAle25ld25hbWV9SSIsIG5vZGUtPm5ld25hbWUpOworCisJCQlpZiAobm9k ZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJlbmFtZVN0bXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfVkEo IkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJ CQkJCQkJCQkJbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKSk7CisKKwkJCXJlbGF0aW9u X2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQlicmVhazsKKwkJY2FzZSBP QkpFQ1RfU0NIRU1BOgorCQkJcmVuYW1lU3RtdCA9CisJCQkJbmV3X29ianRyZWVfVkEoIkFMVEVS IFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkgICAx LAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJ CQkJCQkJICAgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCWJy ZWFrOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJeworCQkJCUhlYXBUdXBsZQl0cmlnVHVw OworCQkJCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwkJCQlSZWxhdGlvbglwZ190cmlnZ2Vy OworCisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0aW9uX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQo cGdfdHJpZ2dlciwgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFkZHJl c3Mub2JqZWN0SWQpOworCQkJCXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNU KHRyaWdUdXApOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUUklH R0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1J IiwKKwkJCQkJCQkJCQkJMywKKwkJCQkJCQkJCQkJInRyaWdnZXJuYW1lIiwgT2JqVHlwZVN0cmlu Zywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJCQkJCXRyaWdGb3JtLT50Z3JlbGlkKSwKKwkJCQkJCQkJCQkJIm5l d25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCXJlbGF0aW9uX2Ns b3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG5vZGUt PnJlbmFtZVR5cGUpOworCX0KKworCXJldHVybiByZW5hbWVTdG10OworfQorCisvKgorICogRGVw YXJzZSB0aGUgc2VxdWVuY2UgQ0FDSEUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9TZXFfQ2FjaGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNl IHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY2FjaGU7CisJY2hh cgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0 X0ZPUk1BVCwgc2VxZGF0YS0+c2VxY2FjaGUpOworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQg PSAiU0VUIENBQ0hFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiQ0FDSEUgJXt2YWx1ZX1z IjsKKworCWNhY2hlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImNhY2hlIiwKKwkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg dG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChjYWNoZSk7Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDWUNMRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DeWNsZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2Vx dWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpjeWNsZTsK KwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgJXtub31z IENZQ0xFIjsKKwllbHNlCisJCWZtdCA9ICIle25vfXMgQ1lDTEUiOworCisJY3ljbGUgPSBuZXdf b2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN5 Y2xlIiwKKwkJCQkJCSAgICJubyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgICBzZXFkYXRhLT5z ZXFjeWNsZSA/ICIiIDogIk5PIik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGN5Y2xlKTsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIElOQ1JFTUVOVCBCWSBvcHRpb24uCisg Ki8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkK K3sKKwlPYmpUcmVlCSAgICppbmNyZW1lbnRhbGJ5OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFy CSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgSU5DUkVNRU5UIEJZ ICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisK Kwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCk7 CisJaW5jcmVtZW50YWxieSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkJICAgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZXFpbmNyZW1lbnQiLAorCQkJCQkJCQkgICAidmFsdWUi LCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChpbmNy ZW1lbnRhbGJ5KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1JTlZBTFVFIG9w dGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVl KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKQoreworCU9ialRyZWUJICAgKm1pbnZhbHVlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFy CSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUlOVkFMVUUgJXt2 YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJNSU5WQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3Ry ID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtaW4pOworCW1pbnZhbHVlID0g bmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJtaW52YWx1ZSIsCisJCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChtaW52YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSBzZXF1ZW5jZSBNQVhWQUxVRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqCitkZXBhcnNlX1NlcV9NYXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVu Y2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICptYXh2YWx1ZTsK KwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQor CQlmbXQgPSAiU0VUIE1BWFZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUFYVkFM VUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0 YS0+c2VxbWF4KTsKKwltYXh2YWx1ZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkg ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWF4dmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwg T2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QobWF4dmFs dWUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgU1RBUlQgV0lUSCBvcHRpb24u CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9TdGFydHdpdGgoT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUp Cit7CisJT2JqVHJlZQkgICAqc3RhcnR3aXRoOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAg ICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgU1RBUlQgV0lUSCAle3Zh bHVlfXMiOworCWVsc2UKKwkJZm10ID0gIlNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKworCXRtcHN0 ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpOworCXN0YXJ0d2l0 aCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInN0YXJ0IiwKKwkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIp OworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzdGFydHdpdGgpOworfQorCisvKgorICogRGVw YXJzZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1 ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJlZQkgICAqcmVzdGFydDsKKwljaGFyCSAgICp0 bXBzdHI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPmxhc3Rf dmFsdWUpOworCXJlc3RhcnQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLCAy LAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RhcnQiLAorCQkJCQkJCSAi dmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVj dChyZXN0YXJ0KTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTY2hlbWFTdG10LgorICoK KyAqIEdpdmVuIGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKgorICogTm90ZSB3ZSBkb24ndCBvdXRwdXQgdGhlIHNjaGVtYSBlbGVtZW50cyBnaXZlbiBp biB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqIFRoZXkgbXVzdCBiZSBvdXRwdXQgc2VwYXJhdGVs eS4JIChJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwKKyAqIENyZWF0ZVNjaGVtYUNvbW1h bmQgcGFzc2VzIHRoZW0gYmFjayB0byBQcm9jZXNzVXRpbGl0eSwgd2hpY2ggd2lsbCBsZWFkIHRv CisgKiB0aGlzIGZpbGUgaWYgYXBwcm9wcmlhdGUuKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlU2NoZW1hU3RtdCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlCQkJICpjcmVhdGVTY2hlbWE7CisJT2JqVHJlZQkJCSAqYXV0aDsKKworCS8q CisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhp c3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMKKwkgKi8KKwljcmVhdGVTY2hlbWEgPSBu ZXdfb2JqdHJlZSgiQ1JFQVRFIFNDSEVNQSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3Jl YXRlU2NoZW1hLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlz dHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVh dGVTY2hlbWEsICIle25hbWV9SSIsIG5vZGUtPnNjaGVtYW5hbWUpOworCisJYXV0aCA9IG5ld19v Ymp0cmVlKCJBVVRIT1JJWkFUSU9OIik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJIGdl dF9yb2xlc3BlY19uYW1lKG5vZGUtPmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251 bGxfb2JqZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9sZX1JICIpOworCQlhcHBlbmRfYm9v bF9vYmplY3QoYXV0aCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZVNjaGVtYSwgIiV7YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4g Y3JlYXRlU2NoZW1hOworfQorCitzdGF0aWMgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9Pd25lZEJ5 KE9ialRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJ T2JqVHJlZQkgICAqb3duZWRieSA9IE5VTEw7CisJUmVsYXRpb24JZGVwUmVsOworCVN5c1NjYW5E ZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5c1szXTsKKwlIZWFwVHVwbGUgICB0dXBsZTsKKwor CWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlTY2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9jbGFzc2lkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJl bGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzFdLAorCQkJCUFudW1fcGdf ZGVwZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlP YmplY3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1syXSwKKwkJ CQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf SU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2lu c2NhbihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEws IDMsIGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0 bmV4dChzY2FuKSkpCisJeworCQlPaWQJCSBvd25lcklkOworCQlGb3JtX3BnX2RlcGVuZCBkZXBm b3JtOworCQlPYmpUcmVlCSp0bXA7CisJCWNoYXIJICAgKmNvbG5hbWU7CisKKwkJZGVwZm9ybSA9 IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBvbmx5IGNvbnNpZGVy IEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICovCisJCWlmIChkZXBmb3JtLT5kZXB0eXBl ICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmY2xh c3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0t PnJlZm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsKKworCQlvd25lcklkID0gZGVwZm9ybS0+ cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFtZShvd25lcklkLCBkZXBmb3JtLT5yZWZv YmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7CisK KwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwg b3duZXJJZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImF0dHJuYW1lIiwgY29sbmFt ZSk7CisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwKKwkJ CQkJCQkJIDIsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJ CQkJCQkJICJvd25lciIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJfQorCisJc3lzdGFibGVfZW5k c2NhbihzY2FuKTsKKwlyZWxhdGlvbl9jbG9zZShkZXBSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIgY29sdW1uLCBlbWl0IGFuIGVtcHR5IE9XTkVE IEJZIGVsZW1lbnQsIHNldCB1cCBzbworCSAqIHRoYXQgaXQgd29uJ3QgcHJpbnQgYW55dGhpbmcu CisJICovCisJaWYgKCFvd25lZGJ5KQorCQkvKiBYWFggdGhpcyBzaG91bGRuJ3QgaGFwcGVuIC4u LiAqLworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsCisJ CQkJCQkJCSAzLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvd25lZCIsCisJ CQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlw ZUJvb2wsIGZhbHNlKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qob3duZWRieSk7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNl IE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCU9ialRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVlCSp0bXA7CisJUmVsYXRpb24JcmVs YXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkgICAqZWxlbXMg PSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFw VHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9IChDcmVhdGVT ZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENP TFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFC TEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lk ZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVz KG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhj bHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAor CQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2Vx dWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7aWRlbnRpdHl9RAorCSAq LworCWNyZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3Rl bmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJdG1wID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJ CQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5DRSAle2lkZW50aXR5fUQiLCB0bXApOworCisJ LyogZGVmaW5pdGlvbiBlbGVtZXRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9DYWNoZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShjcmVhdGVTZXEs IHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9N aW52YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoY3JlYXRlU2VxLCBz ZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfUmVz dGFydChjcmVhdGVTZXEsIHNlcWRhdGEpKTsKKwkvKiB3ZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVt aXQgT1dORUQgQlkgaGVyZSAqLworCisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTZXEsICIl e2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiBjcmVhdGVTZXE7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU2VxU3RtdC4K KyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmll ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJ CSp0bXA7CisJUmVsYXRpb24JIHJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFk YXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9w Z19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7 CisJQWx0ZXJTZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJl ZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJh dGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkg aGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBO VUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVs YXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9 IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0 dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJ IG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNl cXR1cGxlKTsKKworCWFsdGVyU2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVFTkNFIik7CisK Kwl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFt ZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1EIiwgdG1wKTsKKwor CWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9ucykKKwl7 CisJCURlZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9iakVsZW0g Km5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOwor CQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2Ug aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9 IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVs c2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxz ZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQluZXdlbG0g PSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNl IGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRl cGFyc2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlm IChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVsc2UgaWYgKHN0cmNtcChl bGVtLT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFf T3duZWRCeShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwkJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3Qo YWx0ZXJTZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVs LCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworLyoKKyAqIERlcGFyc2UgYWxsIHRo ZSBjb2xsZWN0ZWQgc3ViY29tbWFuZHMgYW5kIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGlu ZyB0aGUKKyAqIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJUYWJsZVN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUJICAgKmFs dGVyVGFibGVTdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlPYmpUcmVlCSAgICp0bXAyOworCUxp c3QJICAgKmRwY29udGV4dDsKKwlSZWxhdGlvbglyZWw7CisJTGlzdAkgICAqc3ViY21kcyA9IE5J TDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNoYXIJICAgKmZtdHN0cjsKKwljb25zdCBjaGFyICpy ZWx0eXBlOworCWJvb2wJCWlzdHlwZSA9IGZhbHNlOworCUxpc3QJICAgKmV4cHJzID0gTklMOwor CisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSk7CisKKwlyZWwgPSByZWxhdGlv bl9vcGVuKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWRw Y29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSwKKwkJCQkJCQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKworCXN3aXRjaCAocmVs LT5yZF9yZWwtPnJlbGtpbmQpCisJeworCQljYXNlIFJFTEtJTkRfUkVMQVRJT046CisJCWNhc2Ug UkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRToKKwkJCXJlbHR5cGUgPSAiVEFCTEUiOworCQkJYnJl YWs7CisJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX0lO REVYOgorCQkJcmVsdHlwZSA9ICJJTkRFWCI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX1ZJ RVc6CisJCQlyZWx0eXBlID0gIlZJRVciOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9DT01Q T1NJVEVfVFlQRToKKwkJCXJlbHR5cGUgPSAiVFlQRSI7CisJCQlpc3R5cGUgPSB0cnVlOworCQkJ YnJlYWs7CisJCWNhc2UgUkVMS0lORF9GT1JFSUdOX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJGT1JF SUdOIFRBQkxFIjsKKwkJCWJyZWFrOworCisJCS8qIFRPRE8gc3VwcG9ydCBmb3IgcGFydGl0aW9u ZWQgdGFibGUgKi8KKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcmVs a2luZCAlZCIsIHJlbC0+cmRfcmVsLT5yZWxraW5kKTsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ug c3ludGF4CisJICoKKwkgKiBBTFRFUiByZWx0eXBlICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9 cworCSAqLworCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIHJlbHR5cGUpOworCWFsdGVy VGFibGVTdG10ID0gbmV3X29ianRyZWUoZm10c3RyKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShyZWwtPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclRhYmxl U3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcCk7CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5hbHRl clRhYmxlLnN1YmNtZHMpCisJeworCQlDb2xsZWN0ZWRBVFN1YmNtZCAqc3ViID0gKENvbGxlY3Rl ZEFUU3ViY21kICopIGxmaXJzdChjZWxsKTsKKwkJQWx0ZXJUYWJsZUNtZAkqc3ViY21kID0gKEFs dGVyVGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7CisJCU9ialRyZWUJICAgKnRyZWU7CisKKwkJ QXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKworCQlzd2l0Y2ggKHN1YmNtZC0+ c3VidHlwZSkKKwkJeworCQkJY2FzZSBBVF9BZGRDb2x1bW46CisJCQljYXNlIEFUX0FkZENvbHVt blJlY3Vyc2U6CisJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3 aGVyZT8gKi8KKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb2x1bW5EZWYpKTsKKwkJCQl0 cmVlID0gZGVwYXJzZV9Db2x1bW5EZWYocmVsLCBkcGNvbnRleHQsIGZhbHNlLAorCQkJCQkJCQkJ CSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmLCB0cnVlLCAmZXhwcnMpOworCQkJCWZtdHN0ciA9 IHBzcHJpbnRmKCJBREQgJXMgJSV7ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAi QVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbHVtbiIsCisJCQkJ CQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlT2JqZWN0LCB0cmVlKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9BZGRJbmRleENvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlJbmRleFN0bXQgICpp c3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFk ZHJlc3Mub2JqZWN0SWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10 KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlBc3Nl cnQoaXN0bXQtPmlzY29uc3RyYWludCAmJiBpc3RtdC0+dW5pcXVlKTsKKworCQkJCQlpZHggPSBy ZWxhdGlvbl9vcGVuKGlzdG10LT5pbmRleE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJCQkv KgorCQkJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBBREQgQ09OU1RSQUlO VCAle25hbWV9SSAle2NvbnN0cmFpbnRfdHlwZX1zIFVTSU5HIElOREVYCisJCQkJCSAqICVpbmRl eF9uYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICovCisJCQkJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSIsCisJCQkJCQkJ CQkJIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50 IHVzaW5nIGluZGV4IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29u c3RyYWludF9uYW1lKGNvbnN0ck9pZCkpOworCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cCwgIiV7Y29uc3RyYWludF90eXBlfXMiLCBpc3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJ ICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXAsICJVU0lORyBJTkRFWCAle2luZGV4X25hbWV9SSIsCisJCQkJCQkJCQkJIFJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKGlkeCkpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAs ICIle2RlZmVycmFibGV9cyIsIGlzdG10LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVS UkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cCwgIiV7aW5pdF9kZWZlcnJlZH1zIiwgaXN0bXQtPmluaXRkZWZlcnJlZCA/CisJCQkJCQkJCQkJ ICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCQkJ CQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFr OworCisJCQljYXNlIEFUX1JlQWRkSW5kZXg6CisJCQljYXNlIEFUX1JlQWRkQ29uc3RyYWludDoK KwkJCWNhc2UgQVRfUmVBZGRDb21tZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoK KwkJCQkvKiBTdWJ0eXBlcyB1c2VkIGZvciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5nIHRv IGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6CisJ CQkJLyogQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyAtLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9Db2x1bW5EZWZhdWx0OgorCQkJCWlmIChzdWJjbWQtPmRl ZiA9PSBOVUxMKQorCQkJCXsKKwkJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIERST1AgREVGQVVMVCIsCisJCQkJCQkJCQkJIDIsCisJCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCQkJICJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJewor CQkJCQlMaXN0CSAgICpkcGNvbnRleHQ7CisJCQkJCUhlYXBUdXBsZQlhdHRydHVwOworCQkJCQlB dHRyTnVtYmVyCWF0dG5vOworCisJCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xV TU4gJXtjb2x1bW59SSBTRVQgREVGQVVMVCIsCisJCQkJCQkJCQkJIDIsCisJCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJZHBjb250ZXh0ID0gZGVwYXJz ZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkJ CVJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0 dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9 ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkJCSBS ZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsLCBhdHRubywgZHBjb250ZXh0LCBOVUxMKSk7CisJ CQkJCVJlbGVhc2VTeXNDYWNoZShhdHRydHVwKTsKKwkJCQl9CisKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9Ecm9wTm90TnVsbDoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09M VU1OICV7Y29sdW1ufUkgRFJPUCBOT1QgTlVMTCIsCisJCQkJCQkJCQkgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIG5vdCBudWxsIiwKKwkJCQkJCQkJCSAiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9TZXROb3ROdWxsOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBTRVQgTk9UIE5VTEwiLAorCQkJCQkJCQkJIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wRXhw cmVzc2lvbjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgRFJPUCBFWFBSRVNTSU9OIiwKKwkJCQkJCQkJCSAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAi JXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBF WElTVFMiOiAiIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RhdGlzdGljczoKKwkJ CQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEludGVnZXIpKTsKKwkJCQkJaWYgKHN1 YmNtZC0+bmFtZSkKKwkJCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJCQkJCSAzLAor CQkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJ CQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJ CQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCSBpbnRWYWwoKElu dGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJZWxzZQorCQkJCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1uIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGlj c31uIiwKKwkJCQkJCQkJCQkJIDMsCisJCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZUludGVnZXIs IHN1YmNtZC0+bnVtLAorCQkJCQkJCQkJCQkgInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwK KwkJCQkJCQkJCQkJIGludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQl9CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0T3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRPcHRp b25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAor CQkJCQkJCQkJICBkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX1NldFN0b3JhZ2U6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwg U3RyaW5nKSk7CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVt bn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwKKwkJCQkJCQkJCSAzLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdG9yYWdlIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJICJzdG9yYWdlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1NldENvbXByZXNzaW9uOgorCQkJCUFzc2VydChJc0Eoc3Vi Y21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xV TU4gJXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9cyIsCisJ CQkJCQkJCQkgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgY29tcHJl c3Npb24iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUs CisJCQkJCQkJCQkgImNvbXByZXNzaW9uX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9Ecm9wQ29sdW1uUmVjdXJzZToKKwkJCWNhc2UgQVRfRHJvcENvbHVtbjoKKwkJCQlmbXRz dHIgPSBwc3ByaW50ZigiRFJPUCAlcyAlJXtjb2x1bW59SSIsCisJCQkJCQkJCSAgaXN0eXBlID8g IkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoZm10c3Ry LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29sdW1uIiwKKwkJ CQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQl0bXAy ID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJICAicHJlc2VudCIsIE9i alR5cGVCb29sLCBzdWJjbWQtPmJlaGF2aW9yKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICIle2Nhc2NhZGV9cyIsIHRtcDIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRk SW5kZXg6CisJCQkJeworCQkJCQlPaWQJCQlpZHhPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7 CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCWNvbnN0 IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZDsKKworCQkJCQlBc3NlcnQoSXNB KHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1 YmNtZC0+ZGVmOworCisJCQkJCWlmICghaXN0bXQtPmlzY29uc3RyYWludCkKKwkJCQkJCWJyZWFr OworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaWR4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCQlpZHhuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQljb25z dHJPaWQgPSBnZXRfcmVsYXRpb25fY29uc3RyYWludF9vaWQoCisJCQkJCQljbWQtPmQuYWx0ZXJU YWJsZS5vYmplY3RJZCwgaWR4bmFtZSwgZmFsc2UpOworCisJCQkJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsCisJCQkJCQkJCQkJ IDMsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwK KwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCSAi ZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50 ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShp ZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Fk ZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnRSZWN1cnNlOgorCQkJCXsKKwkJ CQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJ CQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlib29sCQlp c251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7CisJCQkJCURhdHVtCQl2YWw7CisJCQkJCUNvbnN0 cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50 KSk7CisJCQkJCWNvbnN0ciA9ICBjYXN0Tm9kZShDb25zdHJhaW50LCBzdWJjbWQtPmRlZik7CisK KwkJCQkJaWYgKCFjb25zdHItPnNraXBfdmFsaWRhdGlvbikKKwkJCQkJeworCQkJCQkJdHVwID0g U2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwgT2JqZWN0SWRHZXREYXR1bShjb25zdHJPaWQpKTsK KworCQkJCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJCQkJCXsKKwkJCQkJCQljaGFy CSAgICpjb25iaW47CisKKwkJCQkJCQkvKiBGZXRjaCBjb25zdHJhaW50IGV4cHJlc3Npb24gaW4g cGFyc2V0cmVlIGZvcm0gKi8KKwkJCQkJCQl2YWwgPSBTeXNDYWNoZUdldEF0dHIoQ09OU1RST0lE LCB0dXAsCisJCQkJCQkJCQkJCQkgIEFudW1fcGdfY29uc3RyYWludF9jb25iaW4sICZpc251bGwp OworCisJCQkJCQkJaWYgKCFpc251bGwpCisJCQkJCQkJeworCQkJCQkJCQljb25iaW4gPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKHZhbCk7CisJCQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgc3Ry aW5nVG9Ob2RlKGNvbmJpbikpOworCQkJCQkJCX0KKworCQkJCQkJCVJlbGVhc2VTeXNDYWNoZSh0 dXApOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFERCBD T05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJCQkgMywKKwkJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJ CSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwK KwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBwZ19n ZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJfQorCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoKKwkJCQl7CisJCQkJCU9pZAkJ Y29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlDb25zdHJhaW50ICpjID0g KENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJLyogSWYgbm8gY29uc3RyYWludCB3 YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAqLworCQkJCQlpZiAoIU9pZElzVmFsaWQoY29u c3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCUFzc2VydChJc0EoYywgQ29uc3RyYWludCkp OworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09OU1RSQUlOVCAle25hbWV9SSAl e2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsCisJCQkJCQkJCQkJIDQsCisJCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJ CSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwK KwkJCQkJCQkJCQkgImRlZmVycmFibGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBjLT5k ZWZlcnJhYmxlID8gIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJCQkJCQkg ImluaXRfZGVmZXJyZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBjLT5pbml0ZGVmZXJy ZWQgPyAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ CQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3RyYWludFJlY3Vyc2U6 CisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3RyYWludDoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiVkFMSURBVEUgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSIsCisJCQkJCQkJCQkgMiwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJ CQkJCQkJCSAiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9E cm9wQ29uc3RyYWludDoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5U ICV7Y29uc3RyYWludH1JIiwKKwkJCQkJCQkJCSAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVy Q29sdW1uVHlwZToKKwkJCQl7CisJCQkJCVR1cGxlRGVzYyB0dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihyZWwpOworCQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZgkg ICAqZGVmOworCisJCQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVj dFN1YklkIC0gMV0pOworCQkJCQlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJ CQlBc3NlcnQoSXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9z ZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBl ICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRp b259cyBBVFRSSUJVVEUgJXtjYXNjYWRlfXMKKwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVz OiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0 eXBlfVQgJXtjb2xsYXRpb259cyBDT0xVTU4gJXt1c2luZ31zCisJCQkJCSAqLworCQkJCQlmbXRz dHIgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSIsCisJCQkJ CQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOworCisJCQkJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiYWx0ZXIgY29sdW1uIHR5cGUiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQkJLyogQWRkIHRoZSBUWVBFIGNsYXVzZSAqLworCQkJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle2RhdGF0eXBlfVQiLAorCQkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfdHlwZShhdHQtPmF0dHR5cGlkLAorCQkJCQkJCQkJCQkJCQkJICBhdHQtPmF0 dHR5cG1vZCkpOworCisJCQkJCS8qIEFkZCBhIENPTExBVEUgY2xhdXNlLCBpZiBuZWVkZWQgKi8K KwkJCQkJdG1wMiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJCQkJCWlmIChPaWRJc1ZhbGlk KGF0dC0+YXR0Y29sbGF0aW9uKSkKKwkJCQkJeworCQkJCQkJT2JqVHJlZSAqY29sbG5hbWU7CisK KwkJCQkJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgICBhdHQtPmF0dGNvbGxhdGlvbik7CisJCQkJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXAyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0K KwkJCQkJZWxzZQorCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcDIsICJwcmVzZW50IiwgZmFs c2UpOworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle2NvbGxhdGlvbn1zIiwgdG1w Mik7CisKKwkJCQkJLyogSWYgbm90IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgVVNJTkcgY2xh dXNlICovCisJCQkJCWlmICghaXN0eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogSWYg dGhlcmUncyBhIFVTSU5HIGNsYXVzZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQKKwkJCQkJCSAq IHJhbiBpdCB0aHJvdWdoIHRyYW5zZm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJCQkJCSAqIHJl c3VsdGluZyBub2RlIGluIGNvb2tlZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNlCisJCQkJCQkg KiBoZXJlLgorCQkJCQkJICovCisJCQkJCQl0bXAyID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJ CQkJCQlpZiAoZGVmLT5yYXdfZGVmYXVsdCkKKwkJCQkJCXsKKwkJCQkJCQlEYXR1bQlkZXBhcnNl ZDsKKwkJCQkJCQljaGFyICAgKmRlZmV4cHI7CisKKwkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhw cnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlZmV4cHIgPSBub2RlVG9TdHJpbmco ZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNh bGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKGRl ZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcDIsICIle2V4cHJlc3Npb259cyIsCisJCQkJCQkJCQkJ CQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCQkJCQkJfQorCQkJCQkJZWxzZQor CQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAyLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7dXNpbmd9cyIsIHRtcDIpOworCQkJCQl9CisK KwkJCQkJLyogSWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIENBU0NBREUgY2xhdXNl ICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJCXRtcDIgPSBuZXdfb2JqdHJlZSgi Q0FTQ0FERSIpOworCQkJCQkJaWYgKHN1YmNtZC0+YmVoYXZpb3IgIT0gRFJPUF9DQVNDQURFKQor CQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAyLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7Y2FzY2FkZX1zIiwgdG1wMik7CisJCQkJCX0K KworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBBVF9BbHRl ckNvbHVtbkdlbmVyaWNPcHRpb25zOgorCQkJCXRtcCA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlz dCAqKSBzdWJjbWQtPmRlZiwKKwkJCQkJCQkJCQkgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsK KyNlbmRpZgorCQkJY2FzZSBBVF9DaGFuZ2VPd25lcjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiT1dORVIgVE8gJXtvd25lcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJjaGFuZ2Ugb3duZXIiLAorCQkJCQkJCQkJICJvd25lciIsICBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKHN1YmNtZC0+bmV3b3duZXIpKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9DbHVzdGVyT246CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkNM VVNURVIgT04gJXtpbmRleH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJjbHVzdGVyIG9uIiwKKwkJCQkJCQkJCSAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDbHVzdGVyOgorCQkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfU2V0TG9nZ2VkOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgTE9H R0VEIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbG9nZ2VkIik7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wID0gbmV3X29i anRyZWVfVkEoIlNFVCBVTkxPR0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IHVubG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE9pZHM6 CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIE9JRFMiLCAxLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IG9pZHMiKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVh azsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9kOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vzc19tZXRob2R9SSIsIDIsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFjY2VzcyBtZXRob2QiLAorCQkJCQkJCQkJICJhY2Nl c3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFRB QkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInNldCB0YWJsZXNwYWNlIiwKKwkJCQkJCQkJCSAidGFibGVzcGFjZSIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0UmVsT3B0 aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRSZWxPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJICBkZXBhcnNlX1JlbFNldE9w dGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWc6CisJ CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciIsCisJCQkJ CQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1RyaWc6CisJCQkJdG1wID0gbmV3X29ianRyZWVf VkEoIkVOQUJMRSBBTFdBWVMgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAi dHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRW5hYmxlUmVwbGljYVRyaWc6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVO QUJMRSBSRVBMSUNBIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmln Z2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9EaXNhYmxlVHJpZzoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklH R0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk aXNhYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgorCQkJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnQWxsOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5h YmxlVHJpZ1VzZXI6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSIFVT RVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2Vy IHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ1VzZXI6CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJ1bGU6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IkVOQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1J1bGU6CisJ CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgUlVMRSAle3J1bGV9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyBydWxlIiwK KwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVJ1bGU6CisJCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHJ1bGUiLAorCQkJCQkJCQkJICJydWxl IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9EaXNhYmxlUnVsZToKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBSVUxFICV7 cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJ1 bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmhlcml0OgorCQkJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJJTkhFUklUICV7cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImluaGVyaXQiLAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0Ryb3BJbmhlcml0OgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBJTkhF UklUICV7cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRy b3AgaW5oZXJpdCIsCisJCQkJCQkJCQkgInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfQWRkT2Y6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwg MiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgb2YiLAorCQkJCQkJCQkJ ICJ0eXBlX29mIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZShzdWItPmFkZHJlc3Mub2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RHJvcE9mOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJOT1QgT0YiLCAxLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgIm5vdCBvZiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVQTElDQSBJ REVOVElUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAicmVwbGljYSBp ZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9E RUZBVUxUOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtpZGVudH1zIiwgIkRF RkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoK KwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7aWRlbnR9cyIsICJGVUxMIik7CisJ CQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkc6CisJCQkJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2lkZW50fXMiLCAiTk9USElORyIpOworCQkJCQkJ YnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9JTkRFWDoKKwkJCQkJCXRtcDIgPSBu ZXdfb2JqdHJlZV9WQSgiVVNJTkcgSU5ERVggJXtpbmRleH1JIiwgMSwKKwkJCQkJCQkJCQkJICAi aW5kZXgiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQkgICgoUmVwbGljYUlkZW50aXR5U3Rt dCAqKSBzdWJjbWQtPmRlZiktPm5hbWUpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w LCAiJXtpZGVudH1zIiwgdG1wMik7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRW5hYmxlUm93U2VjdXJpdHk6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IkVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImVuYWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9EaXNhYmxlUm93U2VjdXJpdHk6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUg Uk9XIExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJkaXNhYmxlIHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJ CQljYXNlIEFUX0dlbmVyaWNPcHRpb25zOgorCQkJCXRtcCA9IGRlcGFyc2VfRmR3T3B0aW9ucygo TGlzdCAqKSBzdWJjbWQtPmRlZiwgTlVMTCk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2Ug QVRfQXR0YWNoUGFydGl0aW9uOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBVFRBQ0ggUEFS VElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQgJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJ CQkJCQkgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhdHRhY2ggcGFydGl0 aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpLAorCQkJCQkJCQkJInBhcnRp dGlvbl9ib3VuZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQlSZWxhdGlvbkdldFBhcnRpdGlv bkJvdW5kKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFU X0RldGFjaFBhcnRpdGlvbjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJ VElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwKKwkJCQkJCQkJCSAyLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJICJwYXJ0 aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+ YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRp b25GaW5hbGl6ZToKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAl e3BhcnRpdGlvbl9pZGVudGl0eX1EIEZJTkFMSVpFIiwKKwkJCQkJCQkJCSAyLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJ CQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9B ZGRJZGVudGl0eToKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlz ZXFfcmVsaWQ7CisJCQkJCU9ialRyZWUJKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVm ID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLAorCQkJ CQkJCQkJCSAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRp dHkiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21k LT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdl dFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1u SWRlbnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisKKwkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wLCAiaWRlbnRpdHlfY29sdW1uIiwgc2VxZGVmKTsKKworCQkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJ CQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVm RWxlbQkqZGVmZWw7CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZQkgICAq c2VxZGVmOworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOwor CisKKwkJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwK KwkJCQkJCQkJCQkgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlk ZW50aXR5IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYg PSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwg TGlzdCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJ CQkJCWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVt ID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJ CXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBh dHRudW0sIHRydWUpOworCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9y ZWxpZCwgaWRlbnRpdHksIHRydWUpOworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwg IiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2Fz ZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIERST1AgSURFTlRJVFkiLAorCQkJCQkJCQkJIDIsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpZGVudGl0eSIsCisJCQkJCQkJCQkgImNvbHVtbiIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXAsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJCQkgc3ViY21kLT5taXNzaW5nX29r ID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxv ZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJCQkJCSBz dWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qg c3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBUQUJMRSB3aGljaCBjb250YWlucyB2b2xhdGlsZQor CQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdzIHBvc3NpYmxlIHRoZSBmdW5jdGlvbnMgY29udGFp biBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNhc2UgdGhlc2Ugb3BlcnRpb25zIHdpbGwgYmUgZXhl Y3V0ZWQgdHdpY2UgYW5kIGNhdXNlCisJCSAqIGR1cGxpY2F0ZSBkYXRhLiBJbiBhZGRpdGlvbiwg d2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSB0YWJsZXMgYmVpbmcKKwkJICogYWNjZXNzZWQgYnkg dGhlc2UgRERML0RNTCBhcmUgcHVibGlzaGVkIG9yIG5vdC4gU28gYmxpbmRseSBhbGxvd2luZwor CQkgKiBzdWNoIGZ1bmN0aW9ucyBjYW4gYWxsb3cgdW5pbnRlbmRlZCBjbGF1c2VzIGxpa2UgdGhl IHRhYmxlcyBhY2Nlc3NlZAorCQkgKiBpbiB0aG9zZSBmdW5jdGlvbnMgbWF5IG5vdCBldmVuIGV4 aXN0IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUuCisJCSAqLworCQlpZiAoY29udGFpbl92b2xhdGls ZV9mdW5jdGlvbnMoKE5vZGUgKikgZXhwcnMpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkgZXJybXNnKCJBTFRF UiBUQUJMRSBjb21tYW5kIHVzaW5nIHZvbGF0aWxlIGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNh dGVkIikpKTsKKworCQkvKgorCQkgKiBDbGVhbiB0aGUgbGlzdCBhcyB3ZSBhbHJlYWR5IGNvbmZp cm1lZCB0aGVyZSBpcyBubyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbi4KKwkJICovCisJCWxpc3Rf ZnJlZShleHBycyk7CisJCWV4cHJzID0gTklMOworCX0KKworCXRhYmxlX2Nsb3NlKHJlbCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCWlmIChsaXN0X2xlbmd0aChzdWJjbWRzKSA9PSAwKQorCQlyZXR1 cm4gTlVMTDsKKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUYWJsZVN0bXQsICIle3N1YmNt ZHM6LCB9cyIsIHN1YmNtZHMpOworCXJldHVybiBhbHRlclRhYmxlU3RtdDsKK30KKworLyoKKyAq IEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rp b24gc2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRD b21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmNvbW1hbmQ7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9TaW1wbGUp OworCisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2JqZWN0SWQgPSBjbWQtPmQuc2lt cGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUg ZXZlcnl0aGluZyB0aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChub2Rl VGFnKHBhcnNldHJlZSkpCisJeworCQljYXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0 ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRl VHJpZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTZXFTdG10OgorCQkJY29t bWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRl clNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfSW5k ZXhTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfSW5kZXhTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUZ1bmN0aW9uU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0FsdGVyRnVuY3Rpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf QWx0ZXJGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9SZW5hbWVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfUmVuYW1lU3RtdChjbWQtPmQuc2lt cGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJPd25l clN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlck93bmVyU3RtdChjbWQtPmQuc2ltcGxl LmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbW1hbmQg PSBOVUxMOworCQkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2Ug Y29tbWFuZDogJWQiLAorCQkJCSAoaW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCX0KKworCXJl dHVybiBjb21tYW5kOworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBEUk9QIGNvbW1h bmRzLgorICovCitjaGFyICoKK2RlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlk ZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkgRHJvcEJlaGF2aW9yIGJlaGF2 aW9yKQoreworCVN0cmluZ0luZm9EYXRhICBzdHI7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJY2hh cgkJICAgKmlkZW50aXR5ID0gKGNoYXIgKikgb2JqaWRlbnRpdHk7CisJY2hhcgkJICAgKmZtdDsK KwlPYmpUcmVlCQkqc3RtdCwgKnN0bXQyOworCUpzb25iCQkgICpqc29uYjsKKworCWluaXRTdHJp bmdJbmZvKCZzdHIpOworCisJZm10ID0gcHNwcmludGYoIkRST1AgJXMgSUYgRVhJU1RTICUle29i amlkZW50aXR5fXMiLCBvYmplY3R0eXBlKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQs IDEsICJvYmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50aXR5KTsKKwlzdG10MiA9IG5l d19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCSAgICJwcmVzZW50IiwgT2JqVHlwZUJv b2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChz dG10LCAiJXtjYXNjYWRlfXMiLCBzdG10Mik7CisKKwlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIo c3RtdCk7CisJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNP TkJfRVNUSU1BVEVEX0xFTik7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIFdvcmto b3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2Rl KQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRleHQJ b2xkY3h0OworCU1lbW9yeUNvbnRleHQJdG1wY3h0OworCU9ialRyZWUJCSAgICp0cmVlOworCWNo YXIJCSAgICpjb21tYW5kOworCVN0cmluZ0luZm9EYXRhICBzdHI7CisKKwkvKgorCSAqIEFsbG9j YXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1w IGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1v cnkgaGFuZGxpbmcgY29kZTsgYnV0IGFsbG9jYXRlCisJICogdGhlIG91dHB1dCBTdHJpbmdJbmZv IGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0 ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkg ICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VU X0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4 dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGlu dm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogaW4gb3JkZXIgdG8gb2J0YWluIGRl cGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRzLAorCSAqIHdl IHdhbnQgYWxsIG9iamVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBh cmUgInBvcnRhYmxlIgorCSAqIHRvIGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hf cGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFuIGluamVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVw ZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBw bGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0 T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgt PnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3Zl cnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJy aWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5 cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29t bWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0g ZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7 CisJfQorCisJUG9wT3ZlcnJpZGVTZWFyY2hQYXRoKCk7CisKKwlpZiAodHJlZSkKKwl7CisJCUpz b25iICpqc29uYjsKKworCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIodHJlZSk7CisJCWNvbW1h bmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9M RU4pOworCX0KKwllbHNlCisJCWNvbW1hbmQgPSBOVUxMOworCisJLyoKKwkgKiBDbGVhbiB1cC4g IE5vdGUgdGhhdCBzaW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJbmZvIGluIHRoZSBjYWxsZXIn cworCSAqIGNvbnRleHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5vdCBkZWxldGVkIGhlcmUuCisJ ICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0 ZSh0bXBjeHQpOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIENvbGxl Y3RlZENvbW1hbmQsIHJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgaXQuCisgKgorICog VGhlIGNvbW1hbmQgaXMgZXhwYW5kZWQgZnVsbHksIHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFtYmln dWl0aWVzIGV2ZW4gaW4gdGhlCisgKiBmYWNlIG9mIHNlYXJjaF9wYXRoIGNoYW5nZXMuCisgKi8K K0RhdHVtCitkZGxfZGVwYXJzZV90b19qc29uKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQ29sbGVj dGVkQ29tbWFuZCAqY21kID0gKENvbGxlY3RlZENvbW1hbmQgKikgUEdfR0VUQVJHX1BPSU5URVIo MCk7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisKKwljb21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2Nv bW1hbmQoY21kLCB0cnVlKTsKKworCWlmIChjb21tYW5kKQorCQlQR19SRVRVUk5fVEVYVF9QKENT dHJpbmdHZXRUZXh0RGF0dW0oY29tbWFuZCkpOworCisJUEdfUkVUVVJOX05VTEwoKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2 NDcxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5j CkBAIC0wLDAgKzEsNzYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfanNvbi5j CisgKgkgIEpTT04gY29kZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRlcGFyc2luZworICoKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8u aCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgi CisKKworLyoKKyAqIENvbnZlcnNpb24gc3BlY2lmaWVyLCBpdCBkZXRlcm1pbmVzIGhvdyB3ZSBl eHBhbmQgdGhlIGpzb24gZWxlbWVudCBpbnRvCisgKiBzdHJpbmcuCisgKi8KK3R5cGVkZWYgZW51 bQoreworCVNwZWNUeXBlbmFtZSwKKwlTcGVjT3BlcmF0b3JuYW1lLAorCVNwZWNEb3R0ZWROYW1l LAorCVNwZWNTdHJpbmcsCisJU3BlY051bWJlciwKKwlTcGVjU3RyaW5nTGl0ZXJhbCwKKwlTcGVj SWRlbnRpZmllciwKKwlTcGVjUm9sZQorfSBjb252U3BlY2lmaWVyOworCisvKgorICogQSB0ZXJu YXJ5IHZhbHVlIHdoaWNoIHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4KKyAq LwordHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UKK30g dHJpdmFsdWU7CisKK3N0YXRpYyBib29sIGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJ bmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJCQkgSnNvbmJWYWx1ZSAqanNvbnZhbCwgY29udlNw ZWNpZmllciBzcGVjaWZpZXIsCisJCQkJCQkgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lk IGV4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAg SnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlzZXAsCisJCQkJICAgY29udlNwZWNpZmll ciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBmbXRzdHJfZXJyb3Jf Y2FsbGJhY2sodm9pZCAqYXJnKTsKK2NoYXIgKmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNo YXIgKmpzb25iKTsKKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpz b25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEg dHlwZSBvdGhlciB0aGFuIGpidkJvb2wsIGFuIGVycm9yIGlzIHJhaXNlZC4gSWYgaXQgZG9lc24n dAorICogZXhpc3QsIHR2X2Fic2VudCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIHJldHVybiB0aGUg YWN0dWFsIHRyaXZhbHVlLgorICovCitzdGF0aWMgdHJpdmFsdWUKK2ZpbmRfYm9vbF9pbl9qc29u YmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lKQorewor CUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCXRyaXZhbHVlCXJlc3VsdDsK KworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtleW5hbWU7 CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUpOworCXZhbHVlID0gZmluZEpz b25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNULCAm a2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwkJcmV0dXJuIHR2X2Fic2VudDsKKwlpZiAodmFs dWUtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNc IiBpcyBub3Qgb2YgdHlwZSBib29sZWFuIiwKKwkJCQkJCWtleW5hbWUpKSk7CisJcmVzdWx0ID0g dmFsdWUtPnZhbC5ib29sZWFuID8gdHZfdHJ1ZSA6IHR2X2ZhbHNlOworCXBmcmVlKHZhbHVlKTsK KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBm aW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYg aXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZTdHJpbmcsIGFuIGVycm9yIGlzIHJhaXNlZC4g IElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCBhbiBlcnJvciBpcyByYWlzZWQgdW5sZXNzIG1pc3Np bmdfb2s7IG90aGVyd2lzZSByZXR1cm4gTlVMTC4KKyAqCisgKiBJZiBpdCBleGlzdHMgYW5kIGlz IGEgc3RyaW5nLCBhIGZyZXNobHkgcGFsbG9jJ2VkIGNvcHkgaXMgcmV0dXJuZWQuCisgKgorICog SWYgKmxlbmd0aCBpcyBub3QgTlVMTCwgaXQgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIHN0 cmluZy4KKyAqLworc3RhdGljIGNoYXIgKgorZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIo SnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFtZSwKKwkJCQkJCQkgIGJvb2wg bWlzc2luZ19vaywgaW50ICpsZW5ndGgpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1 ZSAqdmFsdWU7CisJY2hhcgkgICAqc3RyOworCisJLyogWFhYIHZlcmlmeSB0aGF0IHRoaXMgaXMg YW4gb2JqZWN0LCBub3QgYW4gYXJyYXkgKi8KKworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtl eS52YWwuc3RyaW5nLnZhbCA9IGtleW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVu KGtleW5hbWUpOworCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5l ciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwl7 CisJCWlmIChtaXNzaW5nX29rKQorCQkJcmV0dXJuIE5VTEw7CisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1z ZygibWlzc2luZyBlbGVtZW50IFwiJXNcIiBpbiBqc29uIG9iamVjdCIsIGtleW5hbWUpKSk7CisJ fQorCisJc3RyID0gcG5zdHJkdXAodmFsdWUtPnZhbC5zdHJpbmcudmFsLCB2YWx1ZS0+dmFsLnN0 cmluZy5sZW4pOworCWlmIChsZW5ndGgpCisJCSpsZW5ndGggPSB2YWx1ZS0+dmFsLnN0cmluZy5s ZW47CisJcGZyZWUodmFsdWUpOworCXJldHVybiBzdHI7Cit9CisKKyNkZWZpbmUgQURWQU5DRV9Q QVJTRV9QT0lOVEVSKHB0cixlbmRfcHRyKSBcCisJZG8geyBcCisJCWlmICgrKyhwdHIpID49IChl bmRfcHRyKSkgXAorCQkJZXJlcG9ydChFUlJPUiwgXAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwgXAorCQkJCQkgZXJybXNnKCJ1bnRlcm1pbmF0ZWQgZm9y bWF0IHNwZWNpZmllciIpKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogUmVjdXJzaXZlIGhl bHBlciBmb3IgcGdfZXZlbnRfdHJpZ2dlcl9leHBhbmRfY29tbWFuZAorICoKKyAqIEZpbmQgdGhl ICJmbXQiIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGNvbnRhaW5lciwgYW5kIGV4cGFuZCBpdCBpbnRv IHRoZQorICogcHJvdmlkZWQgU3RyaW5nSW5mby4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9m bXRfcmVjdXJzaXZlKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIFN0cmluZ0luZm8gYnVmKQor eworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNvbnN0IGNoYXIgKmNw OworCWNvbnN0IGNoYXIgKnN0YXJ0X3B0cjsKKwljb25zdCBjaGFyICplbmRfcHRyOworCWludAkJ CWxlbjsKKworCXN0YXJ0X3B0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGNvbnRh aW5lciwgImZtdCIsIGZhbHNlLCAmbGVuKTsKKwllbmRfcHRyID0gc3RhcnRfcHRyICsgbGVuOwor CisJZm9yIChjcCA9IHN0YXJ0X3B0cjsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJY29udlNw ZWNpZmllciBzcGVjaWZpZXI7CisJCWJvb2wJCWlzX2FycmF5OworCQljaGFyCSAgICpwYXJhbSA9 IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2VwID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51 ZTsKKwkJfQorCisJCWlzX2FycmF5ID0gZmFsc2U7CisKKwkJQURWQU5DRV9QQVJTRV9QT0lOVEVS KGNwLCBlbmRfcHRyKTsKKworCQkvKiBFYXN5IGNhc2U6ICUlIG91dHB1dHMgYSBzaW5nbGUgJSAq LworCQlpZiAoKmNwID09ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhi dWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNjYW4gdGhlIG1hbmRh dG9yeSBlbGVtZW50IG5hbWUuICBBbGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJhdG9yCisJCSAqICh3 aGljaCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZykgdG8gYmUgc3BlY2lmaWVkIGFmdGVyIGNvbG9u LgorCQkgKi8KKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIHBhcmJ1 ZjsKKwkJCVN0cmluZ0luZm9EYXRhIGFycmF5c2VwYnVmOworCQkJU3RyaW5nSW5mbwlhcHBlbmRU bzsKKworCQkJaW5pdFN0cmluZ0luZm8oJnBhcmJ1Zik7CisJCQlhcHBlbmRUbyA9ICZwYXJidWY7 CisKKwkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQlmb3IgKDsgY3Ag PCBlbmRfcHRyOykKKwkJCXsKKwkJCQlpZiAoKmNwID09ICc6JykKKwkJCQl7CisJCQkJCS8qCisJ CQkJCSAqIEZvdW5kIGFycmF5IHNlcGFyYXRvciBkZWxpbWl0ZXI7IGVsZW1lbnQgbmFtZSBpcyBu b3cKKwkJCQkJICogY29tcGxldGUsIHN0YXJ0IGZpbGxpbmcgdGhlIHNlcGFyYXRvci4KKwkJCQkJ ICovCisJCQkJCWluaXRTdHJpbmdJbmZvKCZhcnJheXNlcGJ1Zik7CisJCQkJCWFwcGVuZFRvID0g JmFycmF5c2VwYnVmOworCQkJCQlpc19hcnJheSA9IHRydWU7CisJCQkJCUFEVkFOQ0VfUEFSU0Vf UE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWlmICgq Y3AgPT0gJ30nKQorCQkJCXsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRy KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYXBw ZW5kVG8sICpjcCk7CisJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJ CX0KKwkJCXBhcmFtID0gcGFyYnVmLmRhdGE7CisJCQlpZiAoaXNfYXJyYXkpCisJCQkJYXJyYXlz ZXAgPSBhcnJheXNlcGJ1Zi5kYXRhOworCQl9CisJCWlmIChwYXJhbSA9PSBOVUxMKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJIGVycm1zZygibWlzc2luZyBjb252ZXJzaW9uIG5hbWUgaW4gY29udmVyc2lvbiBz cGVjaWZpZXIiKSkpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNlICdJJzoKKwkJCQlz cGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJ CXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJ CQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJ CXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6 CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVuYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnTyc6 CisJCQkJc3BlY2lmaWVyID0gU3BlY09wZXJhdG9ybmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug J24nOgorCQkJCXNwZWNpZmllciA9IFNwZWNOdW1iZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdS JzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9sZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBjb252ZXJzaW9uIHNwZWNpZmllciBc IiVjXCIiLCAqY3ApKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhlIGVsZW1lbnQgdG8g YmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5z dHJpbmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihwYXJhbSk7 CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBKQl9G T0JKRUNULCAma2V5KTsKKworCQkvKgorCQkgKiBWYWxpZGF0ZSB0aGF0IHdlIGdvdCBhbiBhcnJh eSBpZiB0aGUgZm9ybWF0IHN0cmluZyBzcGVjaWZpZWQgb25lLgorCQkgKiBBbmQgZmluYWxseSBw cmludCBvdXQgdGhlIGRhdGEKKwkJICovCisJCWlmIChpc19hcnJheSkKKwkJCWV4cGFuZF9qc29u Yl9hcnJheShidWYsIHBhcmFtLCB2YWx1ZSwgYXJyYXlzZXAsIHNwZWNpZmllciwgc3RhcnRfcHRy KTsKKwkJZWxzZQorCQkJZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVl LCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2 YWx1ZSBhcyBhbiBpZGVudGlmaWVyLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcu CisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKFN0cmluZ0luZm8g YnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChq c29udmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52 YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7Cit9CisK Ky8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgZG90LXNlcGFyYXRlZC1uYW1lLiAgVGhl IHZhbHVlIG11c3QgYmUgb2YgdHlwZQorICogb2JqZWN0IGFuZCBtYXkgY29udGFpbiBlbGVtZW50 cyAic2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwgIm9iam5hbWUiCisgKiAobWFuZGF0b3J5KSwgImF0 dHJuYW1lIiAob3B0aW9uYWwpLiAgRG91YmxlIHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFjaCBlbGVt ZW50CisgKiBhcyBuZWNlc3NhcnksIGFuZCBkb3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVkZWQuCisg KgorICogT25lIGRheSB3ZSBtaWdodCBuZWVkIGEgImNhdGFsb2ciIGVsZW1lbnQgYXMgd2VsbCwg YnV0IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAqIG5lZWRzIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lk CitleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpq c29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25i Y29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFt ZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1Ziwg IiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3Ry ID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIg PSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEs CisJCQkJCQkJCQkJImF0dHJuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZy ZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgdHlwZSBu YW1lLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5m byBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsK KwljaGFyCSAgICp0eXBlbmFtZTsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJdHJpdmFsdWUJaXNf YXJyYXk7CisJY2hhcgkgICAqYXJyYXlfZGVjb3I7CisKKwkvKgorCSAqIFdlIG9taXQgc2NoZW1h LXF1YWxpZnlpbmcgdGhlIG91dHB1dCBuYW1lIGlmIHRoZSBzY2hlbWEgZWxlbWVudCBpcworCSAq IGVpdGhlciB0aGUgZW1wdHkgc3RyaW5nIG9yIE5VTEw7IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g dGhvc2UgdHdvIGNhc2VzCisJICogaXMgdGhhdCBpbiB0aGUgbGF0dGVyIHdlIHF1b3RlIHRoZSB0 eXBlIG5hbWUsIGluIHRoZSBmb3JtZXIgd2UgZG9uJ3QuCisJICogVGhpcyBhbGxvd3MgZm9yIHR5 cGVzIHdpdGggc3BlY2lhbCB0eXBtb2QgbmVlZHMsIHN1Y2ggYXMgaW50ZXJ2YWwgYW5kCisJICog dGltZXN0YW1wIChzZWUgZm9ybWF0X3R5cGVfZGV0YWlsZWQpLCB3aGlsZSBhdCB0aGUgc2FtZSB0 aW1lIGFsbG93aW5nCisJICogZm9yIHRoZSBzY2hlbWEgbmFtZSB0byBiZSBvbWl0dGVkIGZyb20g dHlwZSBuYW1lcyB0aGF0IHJlcXVpcmUgcXVvdGVzCisJICogYnV0IGFyZSB0byBiZSBvYnRhaW5l ZCBmcm9tIGEgdXNlciBzY2hlbWEuCisJICovCisKKwlzY2hlbWEgPSBmaW5kX3N0cmluZ19pbl9q c29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInNj aGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwl0eXBlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25i Y29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICJ0eXBlbmFt ZSIsIGZhbHNlLCBOVUxMKTsKKwl0eXBtb2RzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInR5cG1vZCIsIHRy dWUsIE5VTEwpOworCWlzX2FycmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252 YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAidHlwYXJyYXkiKTsKKwlzd2l0Y2gg KGlzX2FycmF5KQorCXsKKwkJZGVmYXVsdDoKKwkJY2FzZSB0dl9hYnNlbnQ6CisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkJIGVycm1zZygibWlzc2luZyB0eXBhcnJheSBlbGVtZW50IikpKTsKKwkJCWJyZWFrOwor CQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJbXSI7CisJCQlicmVhazsKKwkJY2Fz ZSB0dl9mYWxzZToKKwkJCWFycmF5X2RlY29yID0gIiI7CisJCQlicmVhazsKKwl9CisKKwlpZiAo c2NoZW1hID09IE5VTEwpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyVzIiwKKwkJCQkJ CSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSwKKwkJCQkJCSB0eXBtb2RzdHIgPyB0eXBtb2Rz dHIgOiAiIiwKKwkJCQkJCSBhcnJheV9kZWNvcik7CisKKwkvKiBTcGVjaWFsIHR5cG1vZCBuZWVk cyAqLworCWVsc2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiVzJXMlcyIsCisJCQkJCQkgdHlwZW5hbWUsCisJCQkJCQkgdHlwbW9kc3RyID8gdHlwbW9k c3RyIDogIiIsCisJCQkJCQkgYXJyYXlfZGVjb3IpOworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIlcy4lcyVzJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoc2NoZW1hKSwKKwkJ CQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSwKKwkJCQkJCSB0eXBtb2RzdHIgPyB0eXBt b2RzdHIgOiAiIiwKKwkJCQkJCSBhcnJheV9kZWNvcik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBq c29uIHZhbHVlIGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9q c29udmFsX29wZXJhdG9yKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQorewor CWNoYXIJICAgKnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5V TEwpOworCS8qIHNjaGVtYSBtaWdodCBiZSBOVUxMIG9yIGVtcHR5ICovCisJaWYgKHN0ciAhPSBO VUxMICYmIHN0clswXSAhPSAnXDAnKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1 b3RlX2lkZW50aWZpZXIoc3RyKSk7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxz ZSwgTlVMTCk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cik7Cit9CisKKy8qCisg KiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgc3RyaW5nLiAgVGhlIHZhbHVlIG11c3QgYmUgb2Yg dHlwZSBzdHJpbmcgb3Igb2YKKyAqIHR5cGUgb2JqZWN0LiAgSW4gdGhlIGxhdHRlciBjYXNlIGl0 IG11c3QgY29udGFpbiBhICJmbXQiIGVsZW1lbnQgd2hpY2ggd2lsbAorICogYmUgcmVjdXJzaXZl bHkgZXhwYW5kZWQ7IGFsc28sIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYW4gZWxlbWVudCAicHJl c2VudCIKKyAqIGFuZCBpdCBpcyBzZXQgdG8gZmFsc2UsIHRoZSBleHBhbnNpb24gaXMgdGhlIGVt cHR5IHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24g d2FzIG1hZGUgZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJmYWxz ZSIuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfanNvbnZhbF9zdHJpbmcoU3RyaW5nSW5mbyBi dWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2U3Ry aW5nKQorCXsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGpzb252YWwtPnZhbC5zdHJp bmcudmFsLAorCQkJCQkJCSAgIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwl9CisJZWxzZSBp ZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZCaW5hcnkpCisJeworCQl0cml2YWx1ZQlwcmVzZW50Owor CisJCXByZXNlbnQgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJp bmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgICJwcmVzZW50Iik7CisJCS8qCisJCSAqIElmICJwcmVz ZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBleHBhbmRzIHRvIGVtcHR5OworCQkg KiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCksIGZhbGwgdGhyb3VnaCB0byBleHBh bmQgImZtdCIuCisJCSAqLworCQlpZiAocHJlc2VudCA9PSB0dl9mYWxzZSkKKwkJCXJldHVybiBm YWxzZTsKKworCQlleHBhbmRfZm10X3JlY3Vyc2l2ZShqc29udmFsLT52YWwuYmluYXJ5LmRhdGEs IGJ1Zik7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1 ZSBhcyBhIHN0cmluZyBsaXRlcmFsLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxf c3RybGl0KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIgICAq c3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFzdWZm aXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQgICAgICAgICBkcW5leHRjaGFyID0gMDsKKworCXN0 ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5n Lmxlbik7CisKKwkvKiBFYXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFuZCBubyBcLCBqdXN0 IHVzZSBhIHNpbmdsZSBxdW90ZSAqLworCWlmIChzdHJjaHIoc3RyLCAnXCcnKSA9PSBOVUxMICYm CisJCXN0cmNocihzdHIsICdcXCcpID09IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJfQorCisJLyogT3Ro ZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVsaW1pdGVyICovCisJ aW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRxZGVs aW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkgIT0gTlVMTCkKKwl7 CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVzW2RxbmV4dGNoYXIr K10pOworCQlkcW5leHRjaGFyID0gZHFuZXh0Y2hhciAlIChzaXplb2YoZHFzdWZmaXhlcykgLSAx KTsKKwl9CisJLyogQWRkIHRyYWlsaW5nICQgKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFk ZWxpbSwgJyQnKTsKKworCS8qIEFuZCBmaW5hbGx5IHByb2R1Y2UgdGhlIHF1b3RlZCBsaXRlcmFs IGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvICovCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIl cyVzJXMiLCBkcWRlbGltLmRhdGEsIHN0ciwgZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShkcWRlbGlt LmRhdGEpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFz IGFuIGludGVnZXIgcXVhbnRpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9u dW1iZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAqc3Ry ZGF0dW07CisKKwlzdHJkYXR1bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwx KG51bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZh bC5udW1lcmljKSkpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7Cit9 CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcm9sZSBuYW1lLiAgSWYgdGhlIGlz X3B1YmxpYyBlbGVtZW50IGlzIHNldCB0bworICogdHJ1ZSwgUFVCTElDIGlzIGV4cGFuZGVkIChu byBxdW90ZXMpOyBvdGhlcndpc2UsIGV4cGFuZCB0aGUgZ2l2ZW4gcm9sZSBuYW1lLAorICogcXVv dGluZyBhcyBhbiBpZGVudGlmaWVyLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxf cm9sZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwl0cml2YWx1ZQlp c19wdWJsaWM7CisKKwlpc19wdWJsaWMgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkiaXNfcHVibGljIik7CisJaWYgKGlz X3B1YmxpYyA9PSB0dl90cnVlKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlBVQkxJ QyIpOworCWVsc2UKKwl7CisJCWNoYXIgKnJvbGVuYW1lOworCisJCXJvbGVuYW1lID0gZmluZF9z dHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJ CQkJCQkJICJyb2xlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwl9Cit9CisKKy8qCisgKiBFeHBh bmQgb25lIGpzb24gZWxlbWVudCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBhY2NvcmRpbmcg dG8gdGhlCisgKiBjb252ZXJzaW9uIHNwZWNpZmllci4gIFRoZSBlbGVtZW50IHR5cGUgaXMgdmFs aWRhdGVkLCBhbmQgYW4gZXJyb3IgaXMgcmFpc2VkCisgKiBpZiBpdCBkb2Vzbid0IG1hdGNoIHdo YXQgd2UgZXhwZWN0IGZvciB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIuCisgKgorICogUmV0dXJu cyBmYWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIChkdWUgdG8gdGhlICJwcmVz ZW50IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIiBpbiBmb3JtYXR0ZWQgc3RyaW5nIGV4 cGFuc2lvbikuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3Ry aW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNv bnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbCByZXN1bHQg PSB0cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkvKiBJZiB3 ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQg Y2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZt dHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7 CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJv cl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29udmFsKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkp OworCisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQljYXNlIFNwZWNJZGVudGlmaWVyOgorCQkJ aWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRl bnRpZmllcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFt ZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBn b3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29u dmFsX2RvdHRlZG5hbWUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0 cmluZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpzb252YWwt PnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVk IEpTT04gc3RyaW5nIG9yIG9iamVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAor CQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFuZF9qc29u dmFsX3N0cmluZyhidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5n TGl0ZXJhbDoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIl c1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFu ZF9qc29udmFsX3N0cmxpdChidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVj VHlwZW5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlVCBlbGVtZW50IFwi JXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBh bmRfanNvbnZhbF90eXBlbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBT cGVjT3BlcmF0b3JuYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJU8gZWxl bWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOwor CQkJZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgU3BlY051bWJlcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4g ZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkp OworCQkJZXhwYW5kX2pzb252YWxfbnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwor CQljYXNlIFNwZWNSb2xlOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJVIgZWxl bWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOwor CQkJZXhwYW5kX2pzb252YWxfcm9sZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJ aWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMg b2YgYSBKU09OIGFycmF5LCBleHBhbmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBT dHJpbmdJbmZvIHBlciB0aGUgZ2l2ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBi eSB0aGUgZ2l2ZW4KKyAqIHNlcGFyYXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29u Yl9hcnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAq anNvbmFyciwgY2hhciAqYXJyYXlzZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAg IGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0 OworCUpzb25iQ29udGFpbmVyICpjb250YWluZXI7CisJSnNvbmJJdGVyYXRvciAgKml0OworCUpz b25iVmFsdWUJdjsKKwlpbnQJCQl0eXBlOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlTdHJpbmdJ bmZvRGF0YSBhcnJheWVsZW07CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmlu Zywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsK KwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3Fs ZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMg PSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNv bnRleHQ7CisJfQorCisJaWYgKGpzb25hcnItPnR5cGUgIT0gamJ2QmluYXJ5KQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkp KTsKKworCWNvbnRhaW5lciA9IGpzb25hcnItPnZhbC5iaW5hcnkuZGF0YTsKKwlpZiAoIUpzb25D b250YWluZXJJc0FycmF5KGNvbnRhaW5lcikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVu dCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJaW5pdFN0cmluZ0lu Zm8oJmFycmF5ZWxlbSk7CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGNvbnRhaW5lcik7CisJ d2hpbGUgKCh0eXBlID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmdiwgdHJ1ZSkpICE9IFdKQl9E T05FKQorCXsKKwkJaWYgKHR5cGUgPT0gV0pCX0VMRU0pCisJCXsKKwkJCXJlc2V0U3RyaW5nSW5m bygmYXJyYXllbGVtKTsKKworCQkJaWYgKGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudCgmYXJyYXll bGVtLCBwYXJhbSwgJnYsIHNwZWNpZmllciwgTlVMTCkpCisJCQl7CisJCQkJaWYgKCFmaXJzdCkK KwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIGFycmF5c2VwKTsKKworCQkJCWFwcGVu ZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBhcnJheWVsZW0uZGF0YSwgYXJyYXllbGVtLmxlbik7CisJ CQkJZmlyc3QgPSBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmbXQpCisJCWVycm9yX2Nv bnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOworfQorCisvKgorICogV29ya2hv cnNlIGZvciBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZC4KKyAqLworY2hhciAqCitkZGxfZGVw YXJzZV9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uX3N0cikKK3sKKwlEYXR1bQkJZDsKKwlKc29u YgkgICAqanNvbmI7CisJU3RyaW5nSW5mbyBidWYgPSAoU3RyaW5nSW5mbykgcGFsbG9jMChzaXpl b2YoU3RyaW5nSW5mb0RhdGEpKTsKKworCWluaXRTdHJpbmdJbmZvKGJ1Zik7CisKKwlkID0gRGly ZWN0RnVuY3Rpb25DYWxsMShqc29uYl9pbiwKKwkJCQkJCQlQb2ludGVyR2V0RGF0dW0oanNvbl9z dHIpKTsKKwlqc29uYiA9IChKc29uYiAqKSBEYXR1bUdldFBvaW50ZXIoZCk7CisKKwlleHBhbmRf Zm10X3JlY3Vyc2l2ZSgmanNvbmItPnJvb3QsIGJ1Zik7CisKKwlyZXR1cm4gYnVmLT5kYXRhOwor fQorCisvKi0tLS0tLQorICogUmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpTT04g b2JqZWN0LgorICoKKyAqIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgZWxlbWVudCBuYW1lZCAi Zm10IiAod2hpY2ggbXVzdCBiZSBhIHN0cmluZykuCisgKiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5 IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNjYXBlcywgd2hpY2ggY29uc2lzdCBvZiBhbgorICog ZWxlbWVudCBuYW1lIGVuY2xvc2VkIGluIHsgfSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBjb252 ZXJzaW9uIG1vZGlmaWVyLAorICogZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNpZmllci4g IFBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lmaWVycyBhcmU6CisgKgorICogJQkJZXhwYW5kIHRv IGEgbGl0ZXJhbCAlLgorICogSQkJZXhwYW5kIGFzIGEgc2luZ2xlLCBub24tcXVhbGlmaWVkIGlk ZW50aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBhIHBvc3NpYmx5LXF1YWxpZmllZCBpZGVudGlmaWVy CisgKiBUCQlleHBhbmQgYXMgYSB0eXBlIG5hbWUKKyAqIE8JCWV4cGFuZCBhcyBhbiBvcGVyYXRv ciBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJpbmcgbGl0ZXJhbCAocXVvdGUgdXNpbmcgc2lu Z2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1b3Rpbmcp CisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVtYmVyIChubyBxdW90aW5nKQorICogUgkJZXhw YW5kIGFzIGEgcm9sZSBuYW1lIChwb3NzaWJseSBxdW90ZWQgbmFtZSwgb3IgUFVCTElDKQorICoK KyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUgYW4gb3B0aW9uYWwgc2VwYXJhdG9yIHNwZWNp ZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29sb24uICBJdHMgcHJlc2VuY2UgaW5kaWNhdGVz IHRoYXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIGFuIGFycmF5OyB0aGUgc3Bl Y2lmaWVkIHNlcGFyYXRvciBpcyB1c2VkIHRvIGpvaW4gdGhlIGFycmF5IGVsZW1lbnRzLgorICot LS0tLS0KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJdGV4dAkgICAqanNvbiA9IFBHX0dFVEFSR19URVhUX1AoMCk7CisJY2hhcgkg ICAqanNvbl9zdHI7CisKKwlqc29uX3N0ciA9IFRleHREYXR1bUdldENTdHJpbmcoanNvbik7CisK KwlQR19SRVRVUk5fVEVYVF9QKENTdHJpbmdHZXRUZXh0RGF0dW0oZGRsX2RlcGFyc2VfanNvbl90 b19zdHJpbmcoanNvbl9zdHIpKSk7Cit9CisKKy8qCisgKiBFcnJvciBjb250ZXh0IGNhbGxiYWNr IGZvciBKU09OIGZvcm1hdCBzdHJpbmcgZXhwYW5zaW9uLgorICoKKyAqIFBvc3NpYmxlIGltcHJv dmVtZW50OiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFuZGluZywgaWYgYXBwbGlj YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcp Cit7CisJZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBzdHJpbmcgXCIlc1wiIiwg KGNoYXIgKikgYXJnKTsKKworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vx dWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggYjBiMjExOC4u Mjg5YTVkZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0xNzAwLDYgKzE3MDAsMzkgQEAg cHJvY2Vzc19vd25lZF9ieShSZWxhdGlvbiBzZXFyZWwsIExpc3QgKm93bmVkX2J5LCBib29sIGZv cl9pZGVudGl0eSkKIAkJcmVsYXRpb25fY2xvc2UodGFibGVyZWwsIE5vTG9jayk7CiB9CiAKKy8q CisgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycywgZGV0YWlsZWQKKyAqLworRm9ybV9wZ19z ZXF1ZW5jZV9kYXRhCitnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKQoreworCUJ1 ZmZlciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAgICBlbG07CisJUmVsYXRpb24gICAgc2VxcmVsOwor CUhlYXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcTsKKwlG b3JtX3BnX3NlcXVlbmNlX2RhdGEgcmV0U2VxOworCisJLyogT3BlbiBhbmQgQWNjZXNzU2hhcmVM b2NrIHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAmZWxtLCAmc2VxcmVs KTsKKworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRVc2VySWQoKSwKKwkJ CUFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVDS19PSykKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklM RUdFKSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQgZm9yIHNlcXVlbmNlICVzIiwK KwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkpOworCisJc2VxID0gcmVh ZF9zZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCXJldFNlcSA9IHBhbGxvYyhz aXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJbWVtY3B5KHJldFNlcSwgc2Vx LCBzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJVW5sb2NrUmVsZWFzZUJ1 ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKworCXJldHVybiBy ZXRTZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBpbiBhIGxpc3Qg b2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwppbmRleCBlZjViMzRhLi4zOWQ4ZDFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAt NTE4OSwxMSArNTE4OSwxMiBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxl SW5mbyAqdGFiLAogCQkJCQkJCQkJICBjdXJfcGFzcywgY29udGV4dCk7CiAJCQlBc3NlcnQoY21k ICE9IE5VTEwpOwogCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElU SU9ORURfVEFCTEUpCi0JCQkJQVRFeGVjQXR0YWNoUGFydGl0aW9uKHdxdWV1ZSwgcmVsLCAoUGFy dGl0aW9uQ21kICopIGNtZC0+ZGVmLAotCQkJCQkJCQkJICBjb250ZXh0KTsKKwkJCQlhZGRyZXNz ID0gQVRFeGVjQXR0YWNoUGFydGl0aW9uKHdxdWV1ZSwgcmVsLAorCQkJCQkJCQkJCQkJKFBhcnRp dGlvbkNtZCAqKSBjbWQtPmRlZiwKKwkJCQkJCQkJCQkJCWNvbnRleHQpOwogCQkJZWxzZQotCQkJ CUFURXhlY0F0dGFjaFBhcnRpdGlvbklkeCh3cXVldWUsIHJlbCwKLQkJCQkJCQkJCQkgKChQYXJ0 aXRpb25DbWQgKikgY21kLT5kZWYpLT5uYW1lKTsKKwkJCQlhZGRyZXNzID0gQVRFeGVjQXR0YWNo UGFydGl0aW9uSWR4KHdxdWV1ZSwgcmVsLAorCQkJCQkJCQkJCQkJICAgKChQYXJ0aXRpb25DbWQg KikgY21kLT5kZWYpLT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUX0RldGFjaFBhcnRpdGlv bjoKIAkJCWNtZCA9IEFUUGFyc2VUcmFuc2Zvcm1DbWQod3F1ZXVlLCB0YWIsIHJlbCwgY21kLCBm YWxzZSwgbG9ja21vZGUsCkBAIC01MjAxLDEyICs1MjAyLDEyIEBAIEFURXhlY0NtZChMaXN0ICoq d3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJCQlBc3NlcnQoY21kICE9IE5VTEwpOwog CQkJLyogQVRQcmVwQ21kIGVuc3VyZXMgaXQgbXVzdCBiZSBhIHRhYmxlICovCiAJCQlBc3NlcnQo cmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSk7Ci0JCQlB VEV4ZWNEZXRhY2hQYXJ0aXRpb24od3F1ZXVlLCB0YWIsIHJlbCwKLQkJCQkJCQkJICAoKFBhcnRp dGlvbkNtZCAqKSBjbWQtPmRlZiktPm5hbWUsCi0JCQkJCQkJCSAgKChQYXJ0aXRpb25DbWQgKikg Y21kLT5kZWYpLT5jb25jdXJyZW50KTsKKwkJCWFkZHJlc3MgPSBBVEV4ZWNEZXRhY2hQYXJ0aXRp b24od3F1ZXVlLCB0YWIsIHJlbCwKKwkJCQkJCQkJCQkJKChQYXJ0aXRpb25DbWQgKikgY21kLT5k ZWYpLT5uYW1lLAorCQkJCQkJCQkJCQkoKFBhcnRpdGlvbkNtZCAqKSBjbWQtPmRlZiktPmNvbmN1 cnJlbnQpOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uRmluYWxpemU6Ci0J CQlBVEV4ZWNEZXRhY2hQYXJ0aXRpb25GaW5hbGl6ZShyZWwsICgoUGFydGl0aW9uQ21kICopIGNt ZC0+ZGVmKS0+bmFtZSk7CisJCQlhZGRyZXNzID0gQVRFeGVjRGV0YWNoUGFydGl0aW9uRmluYWxp emUocmVsLCAoKFBhcnRpdGlvbkNtZCAqKSBjbWQtPmRlZiktPm5hbWUpOwogCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CQkJCS8qIG9vcHMgKi8KIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgYWx0 ZXIgdGFibGUgdHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zv cm1hdF90eXBlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwppbmRleCAw NjBmZDdlLi42YWYyMjU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0 X3R5cGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcs NyArMjcsNiBAQAogI2luY2x1ZGUgInV0aWxzL251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9z eXNjYWNoZS5oIgogCi1zdGF0aWMgY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFt ZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKIAogCiAvKgpAQCAtMzY3LDcgKzM2Niw3 IEBAIGZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2Qp CiAvKgogICogQWRkIHR5cG1vZCBkZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAq Lwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1l LCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDI2Y2Y0ZmEuLjA1Zjc4YzEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMKQEAgLTM1Nyw3ICszNTcsNiBAQCBzdGF0aWMgaW50CXByaW50X2Z1bmN0 aW9uX2FyZ3VtZW50cyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJCQkJCQkJ CQkgYm9vbCBwcmludF90YWJsZV9hcmdzLCBib29sIHByaW50X2RlZmF1bHRzKTsKIHN0YXRpYyB2 b2lkIHByaW50X2Z1bmN0aW9uX3JldHR5cGUoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9j dHVwKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0luZm8gYnVm LCBIZWFwVHVwbGUgcHJvY3R1cCk7Ci1zdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5 KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBzZXRfcnRh YmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNwYWNl cywKIAkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogc3RhdGljIHZvaWQgc2V0X2RlcGFy c2VfZm9yX3F1ZXJ5KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBRdWVyeSAqcXVlcnksCkBAIC00 ODcsMjIgKzQ4NiwxNSBAQCBzdGF0aWMgdm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChS YW5nZVRibEZ1bmN0aW9uICpydGZ1bmMsCiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNv bnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVz ZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0 aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBl LAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0 aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBw cmludFN1YnNjcmlwdHMoU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAq Y29udGV4dCk7CiBzdGF0aWMgY2hhciAqZ2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0 YXRpYyBjaGFyICpnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNw YWNlcyk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lk IHJlbGlkKTsKLXN0YXRpYyBjaGFyICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQs IGludCBuYXJncywKLQkJCQkJCQkJCUxpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJ CQkJCQkJYm9vbCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJ UGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9v cGVyYXRvcl9uYW1lKE9pZCBvcGVyaWQsIE9pZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9p ZCBhZGRfY2FzdF90byhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpn ZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3Ry aW5nX3RvX3RleHQoY2hhciAqc3RyKTsKLXN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMo T2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBE YXR1bSByZWxvcHRpb25zKTsKIHN0YXRpYyB2b2lkIGdldF9qc29uX3BhdGhfc3BlYyhOb2RlICpw YXRoX3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkgICBib29sIHNob3dp bXBsaWNpdCk7CkBAIC0xMDI0LDY1ICsxMDE2LDEyIEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtl cihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAlpZiAoIWlzbnVsbCkKIAl7CiAJCU5vZGUJICAg KnF1YWw7Ci0JCWNoYXIJCXJlbGtpbmQ7Ci0JCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OwotCQlk ZXBhcnNlX25hbWVzcGFjZSBkcG5zOwotCQlSYW5nZVRibEVudHJ5ICpvbGRydGU7Ci0JCVJhbmdl VGJsRW50cnkgKm5ld3J0ZTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICJXSEVO ICgiKTsKKwkJY2hhciAgICAgICAqcXVhbHN0cjsKIAogCQlxdWFsID0gc3RyaW5nVG9Ob2RlKFRl eHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJcXVhbHN0ciA9IHBnX2dldF90cmlnZ2VyX3do ZW5jbGF1c2UodHJpZ3JlYywgcXVhbCwgcHJldHR5KTsKIAotCQlyZWxraW5kID0gZ2V0X3JlbF9y ZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOwotCi0JCS8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBO RVcgUlRFcyBmb3IgdGhlIHJlbCAqLwotCQlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5 KTsKLQkJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQlvbGRydGUtPnJlbGlkID0g dHJpZ3JlYy0+dGdyZWxpZDsKLQkJb2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJb2xkcnRl LT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJb2xkcnRlLT5hbGlhcyA9IG1ha2VB bGlhcygib2xkIiwgTklMKTsKLQkJb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKLQkJb2xk cnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5oID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+ aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwot CQluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0JCW5ld3J0ZS0+cmVsaWQgPSB0cmln cmVjLT50Z3JlbGlkOwotCQluZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQluZXdydGUtPnJl bGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQluZXdydGUtPmFsaWFzID0gbWFrZUFsaWFz KCJuZXciLCBOSUwpOwotCQluZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOwotCQluZXdydGUt PmxhdGVyYWwgPSBmYWxzZTsKLQkJbmV3cnRlLT5pbmggPSBmYWxzZTsKLQkJbmV3cnRlLT5pbkZy b21DbCA9IHRydWU7Ci0KLQkJLyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCi0JCW1lbXNl dCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKLQkJZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9s ZHJ0ZSwgbmV3cnRlKTsKLQkJZHBucy5zdWJwbGFucyA9IE5JTDsKLQkJZHBucy5jdGVzID0gTklM OwotCQlkcG5zLmFwcGVuZHJlbHMgPSBOVUxMOwotCQlzZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBO SUwsIE5VTEwpOwotCQlzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7Ci0KLQkJLyogU2V0 IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KLQkJY29udGV4dC5i dWYgPSAmYnVmOwotCQljb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKLQkJ Y29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7Ci0JCWNvbnRleHQud2luZG93VExpc3QgPSBOSUw7 Ci0JCWNvbnRleHQudmFycHJlZml4ID0gdHJ1ZTsKLQkJY29udGV4dC5wcmV0dHlGbGFncyA9IEdF VF9QUkVUVFlfRkxBR1MocHJldHR5KTsKLQkJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xV TU5fREVGQVVMVDsKLQkJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7Ci0J CWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOwotCQljb250ZXh0LmFw cGVuZHBhcmVudHMgPSBOVUxMOwotCi0JCWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZh bHNlKTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIpICIpOworCQlhcHBlbmRT dHJpbmdJbmZvKCZidWYsICJXSEVOICglcykgIiwgcXVhbHN0cik7CiAJfQogCiAJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAiRVhFQ1VURSBGVU5DVElPTiAlcygiLApAQCAtMTEyMyw2ICsxMDYyLDY0 IEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAly ZXR1cm4gYnVmLmRhdGE7CiB9CiAKK2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShG b3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpCit7 CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWNoYXIgICAgICAgIHJlbGtpbmQ7CisJZGVwYXJzZV9j b250ZXh0IGNvbnRleHQ7CisJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKKwlSYW5nZVRibEVudHJ5 ICpvbGRydGU7CisJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOworCisgICBpbml0U3RyaW5nSW5mbygm YnVmKTsKKworICAgcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsK KworICAgLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVsICovCisg ICBvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKyAgIG9sZHJ0ZS0+cnRla2luZCA9 IFJURV9SRUxBVElPTjsKKyAgIG9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworICAg b2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKKyAgIG9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxpYXMo Im9sZCIsIE5JTCk7CisgICBvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOworICAgb2xkcnRl LT5sYXRlcmFsID0gZmFsc2U7CisgICBvbGRydGUtPmluaCA9IGZhbHNlOworICAgb2xkcnRlLT5p bkZyb21DbCA9IHRydWU7CisKKyAgIG5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwor ICAgbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworICAgbmV3cnRlLT5yZWxpZCA9IHRy aWdyZWMtPnRncmVsaWQ7CisgICBuZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOworICAgbmV3cnRl LT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsKKyAgIG5ld3J0ZS0+ZXJlZiA9IG5ld3J0 ZS0+YWxpYXM7CisgICBuZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKKyAgIG5ld3J0ZS0+aW5oID0g ZmFsc2U7CisgICBuZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworICAgLyogQnVpbGQgdHdvLWVs ZW1lbnQgcnRhYmxlICovCisgICBtZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7CisgICBk cG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOworICAgZHBucy5jdGVzID0g TklMOworICAgc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKKyAgIHNldF9zaW1w bGVfY29sdW1uX25hbWVzKCZkcG5zKTsKKworICAgLyogU2V0IHVwIGNvbnRleHQgd2l0aCBvbmUt ZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KKyAgIGNvbnRleHQuYnVmID0gJmJ1ZjsKKyAgIGNvbnRl eHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworICAgY29udGV4dC53aW5kb3dDbGF1 c2UgPSBOSUw7CisgICBjb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworICAgY29udGV4dC52YXJw cmVmaXggPSB0cnVlOworICAgY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eSA/IFBSRVRUWUZM QUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCA6IFBSRVRUWUZMQUdfSU5ERU5UOworICAgY29u dGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKKyAgIGNvbnRleHQuaW5kZW50 TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOworICAgY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0g RVhQUl9LSU5EX05PTkU7CisKKyAgIGdldF9ydWxlX2V4cHIod2hlbkNsYXVzZSwgJmNvbnRleHQs IGZhbHNlKTsKKworICAgcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKiAtLS0tLS0tLS0tCiAgKiBw Z19nZXRfaW5kZXhkZWYJCQktIEdldCB0aGUgZGVmaW5pdGlvbiBvZiBhbiBpbmRleAogICoKQEAg LTE4OTAsNiArMTg4NywxMyBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwg Ym9vbCBwcmV0dHkpCiAJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgcHJl dHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJl cG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uICovCitjaGFyICoKK3BnX2dl dF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBnX2dldF9wYXJ0a2V5 ZGVmX3dvcmtlcihyZWxpZCwgMCwgZmFsc2UsIGZhbHNlKTsKK30KKwogLyoKICAqIEludGVybmFs IHdvcmtob3JzZSB0byBkZWNvbXBpbGUgYSBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24uCiAgKi8K QEAgLTIxNDMsNiArMjE0NywxNSBAQCBwZ19nZXRfY29uc3RyYWludGRlZl9leHQoUEdfRlVOQ1RJ T05fQVJHUykKIH0KIAogLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGRlZmlu aXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3Ry YWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19n ZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOwor fQorCisvKgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRB QkxFIC4uLiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KIGNoYXIgKgpAQCAtMzUxMiw3ICsz NTI1LDcgQEAgcGdfZ2V0X2Z1bmN0aW9uX2FyZ19kZWZhdWx0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJ UEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChzdHIpKTsKIH0KIAotc3RhdGljIHZvaWQK K3ZvaWQKIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBw cm9jdHVwKQogewogCWludAkJCW51bWFyZ3M7CkBAIC0xMjAxNyw3ICsxMjAzMCw3IEBAIGdldF90 YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLCBkZXBhcnNlX2Nv bnRleHQgKmNvbnRleHQpCiAgKiBhY3R1YWxfZGF0YXR5cGUuICAoSWYgeW91IGRvbid0IHdhbnQg dGhpcyBiZWhhdmlvciwganVzdCBwYXNzCiAgKiBJbnZhbGlkT2lkIGZvciBhY3R1YWxfZGF0YXR5 cGUuKQogICovCi1zdGF0aWMgdm9pZAordm9pZAogZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFz cywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKIAkJCQkgU3RyaW5nSW5mbyBidWYpCiB7CkBAIC0xMjQx MSw3ICsxMjQyNCw3IEBAIGdlbmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxp ZCkKICAqCiAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGFsbCBuZWNlc3NhcnkgcXVvdGluZyBhbmQg c2NoZW1hLXByZWZpeGluZy4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBnZW5lcmF0ZV9m dW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMsIE9pZCAq YXJndHlwZXMsCiAJCQkJCSAgIGJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFkaWNf cCwKIAkJCQkJICAgUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKQpAQCAtMTI3OTcsNyAr MTI4MTAsNyBAQCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9u cykKIC8qCiAgKiBHZW5lcmF0ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0aW9uJ3Mg cmVsb3B0aW9ucywgb3IgTlVMTCBpZiBub25lLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoK IGZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0ID0gTlVM TDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDJlNDFmNGQuLmUzODIzMGQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4ODYsNCArMTE4ODYsMTAgQEAKICAgcHJvcmV0dHlwZSA9 PiAnYnl0ZWEnLCBwcm9hcmd0eXBlcyA9PiAncGdfYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeScs CiAgIHByb3NyYyA9PiAnYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeV9zZW5kJyB9LAogCit7IG9p ZCA9PiAnNDY0MicsIGRlc2NyID0+ICdkZXBhcnNlIHRoZSBEREwgY29tbWFuZCBpbnRvIGpzb24g Zm9ybWF0IHN0cmluZycsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24nLCBwcm9y ZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3BnX2RkbF9jb21tYW5kJywgcHJv c3JjID0+ICdkZGxfZGVwYXJzZV90b19qc29uJyB9LAoreyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9 PiAnZXhwYW5kIGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKKyAgcHJv bmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0 JywKKyAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFu ZF9jb21tYW5kJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVu Y2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggZDM4YzBlMi4uNGNh ODRiMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAorKysgYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBAIC01NCw2ICs1NCw3IEBAIHR5cGVkZWYg c3RydWN0IHhsX3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBuZXh0dmFsX2ludGVybmFsKE9pZCByZWxp ZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucyk7CiBleHRlcm4gRGF0dW0gbmV4dHZhbChQR19GVU5D VElPTl9BUkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5jZV9vcHRpb25zKE9pZCByZWxpZCk7Citl eHRlcm4gRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVl bmNlSWQpOwogCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVNlcVN0bXQgKnN0bXQpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0 ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29w L2RkbF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmZGY0 NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApAQCAt MCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5oCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2Vu dHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL3Rj b3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIERE TF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9kZXBh cnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENv bGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIgKmRk bF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpkZXBh cnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2Jq ZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNlbmRpZgkJ LyogRERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNl X3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXggOTRk ZTEzZC4uYjUzMjk0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxp dHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC02Miw2ICs2 Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJb2Jq ZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJICAg KnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCAyMjFj M2U2Li44NWE2MmExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTExOCw2ICsxMTgsNyBAQCBleHRl cm4gY2hhciAqZm9ybWF0X3R5cGVfZXh0ZW5kZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9k LCBiaXRzMTYgZmxhZ3MpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlKE9pZCB0eXBlX29p ZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKE9pZCB0eXBlX29pZCk7 CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKE9pZCB0eXBlX29pZCwgaW50 MzIgdHlwZW1vZCk7CitleHRlcm4gY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFt ZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKIAogZXh0ZXJuIGludDMyIHR5cGVfbWF4 aW11bV9zaXplKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxz LmgKaW5kZXggN2Q0ODk3MS4uM2Q2OWE2MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMv cnVsZXV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKQEAgLTEzLDYg KzEzLDcgQEAKICNpZm5kZWYgUlVMRVVUSUxTX0gKICNkZWZpbmUgUlVMRVVUSUxTX0gKIAorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAj aW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIK QEAgLTIzLDEyICsyNCwxNiBAQCBzdHJ1Y3QgUGxhbm5lZFN0bXQ7CiAKIGV4dGVybiBjaGFyICpw Z19nZXRfaW5kZXhkZWZfc3RyaW5nKE9pZCBpbmRleHJlbGlkKTsKIGV4dGVybiBjaGFyICpwZ19n ZXRfaW5kZXhkZWZfY29sdW1ucyhPaWQgaW5kZXhyZWxpZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJu IGNoYXIgKnBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMs CisJCQkJCQkJCQkgICBOb2RlICp3aGVuQ2xhdXNlLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hh ciAqcGdfZ2V0X3F1ZXJ5ZGVmKFF1ZXJ5ICpxdWVyeSwgYm9vbCBwcmV0dHkpOwogCiBleHRlcm4g Y2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KTsK K2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKTsKIGV4dGVy biBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklkLCBjaGFy ICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFu ZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl9j b21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKTsKIGV4dGVybiBjaGFyICpkZXBhcnNlX2V4 cHJlc3Npb24oTm9kZSAqZXhwciwgTGlzdCAqZHBjb250ZXh0LAogCQkJCQkJCQlib29sIGZvcmNl cHJlZml4LCBib29sIHNob3dpbXBsaWNpdCk7CiBleHRlcm4gTGlzdCAqZGVwYXJzZV9jb250ZXh0 X2Zvcihjb25zdCBjaGFyICphbGlhc25hbWUsIE9pZCByZWxpZCk7CkBAIC00MCw4ICs0NSwxNiBA QCBleHRlcm4gTGlzdCAqc2VsZWN0X3J0YWJsZV9uYW1lc19mb3JfZXhwbGFpbihMaXN0ICpydGFi bGUsCiAJCQkJCQkJCQkJCSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBleHRlcm4gY2hhciAqZ2Vu ZXJhdGVfY29sbGF0aW9uX25hbWUoT2lkIGNvbGxpZCk7CiBleHRlcm4gY2hhciAqZ2VuZXJhdGVf b3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzKTsKK2V4dGVybiBjaGFyICpnZW5lcmF0ZV9mdW5jdGlv bl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMsCisJCQkJCQkJCQlP aWQgKmFyZ3R5cGVzLCBib29sIGhhc192YXJpYWRpYywKKwkJCQkJCQkJCWJvb2wgKnVzZV92YXJp YWRpY19wLAorCQkJCQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIGV4dGVy biBjaGFyICpnZXRfcmFuZ2VfcGFydGJvdW5kX3N0cmluZyhMaXN0ICpib3VuZF9kYXR1bXMpOwor ZXh0ZXJuIHZvaWQgZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRh dHlwZSwKKwkJCQkJCQkgIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpmbGF0dGVuX3Jl bG9wdGlvbnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2Jq ZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiB2b2lkIHByaW50X2Z1bmN0aW9uX3Nx bGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIAogI2VuZGlmCQkJCQkJ CS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDM0YTc2Y2Uu LjhlZDRmOGMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNjIxLDYgKzE2MjEsOSBA QCBPU0luZm8KIE9TU0xDaXBoZXIKIE9TU0xEaWdlc3QKIE9WRVJMQVBQRUQKK09iakVsZW0KK09i alRyZWUKK09ialR5cGUKIE9iamVjdEFjY2Vzc0Ryb3AKIE9iamVjdEFjY2Vzc05hbWVzcGFjZVNl YXJjaAogT2JqZWN0QWNjZXNzUG9zdEFsdGVyCkBAIC0zMTgyLDYgKzMxODUsNyBAQCBjb2xvcm1h cHJhbmdlCiBjb21wYXJlX2NvbnRleHQKIGNvbmZpZ192YXJfdmFsdWUKIGNvbnRhaW5fYWdnc19v Zl9sZXZlbF9jb250ZXh0Citjb252U3BlY2lmaWVyCiBjb252ZXJ0X3Rlc3RleHByX2NvbnRleHQK IGNvcHlfZGF0YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQRQotLSAKMi43LjIud2luZG93cy4xCgo= --_005_OS0PR01MB5716FCCEF8009E4464042476948E9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v13-0004-Test-cases-for-DDL-replication.patch" Content-Description: v13-0004-Test-cases-for-DDL-replication.patch Content-Disposition: attachment; filename="v13-0004-Test-cases-for-DDL-replication.patch"; size=23037; creation-date="Wed, 20 Jul 2022 12:26:00 GMT"; modification-date="Wed, 20 Jul 2022 12:28:25 GMT" Content-Transfer-Encoding: base64 RnJvbSBiMjU5MjBhODIxM2UzOGRlOWViOGJiMDk2YmRjMjlkNjRmM2U5NDgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthbWljaGkgT3N1bWkgPG9zdW1pLnRha2FtaWNoaUBmdWpp dHN1LmNvbT4KRGF0ZTogV2VkLCAxNSBKdW4gMjAyMiAwOTo0NTo0MiArMDAwMApTdWJqZWN0OiBb UEFUQ0ggNC80XSBUZXN0IGNhc2VzIGZvciBEREwgcmVwbGljYXRpb24KCkF1dGhvcjogVGFrYW1p Y2hpIE9zdW1pCi0tLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlv bi5wbCB8IDQxNCArKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDE0 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OTRkZThlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9k ZGxfcmVwbGljYXRpb24ucGwKQEAgLTAsMCArMSw0MTQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3Rz IGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVy LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c3RhcnQ7CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVh bWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwg PSAiQ1JFQVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFy LCB2YWx1ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJGRkbCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3Ry ID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15 cHViIEZPUiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0 ZSwgZGRsJyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIn IFBVQkxJQ0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUg dGFibGUuCisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJl aW5nIGV4ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3Jp YmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0g MCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4g KCdzJywgJ3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgy LCAnZGF0YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBE Uk9QIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBB TFRFUiB2YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUg ZGVmYXVsdCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUu Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVz dF9yZXAgQUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0 Jyk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0 LCAnZm9vJywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBk b24ndCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRF UiBDT0xVTU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVl IElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5n IHJlY29yZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0 ZGVycik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDYsICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAg c3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVy ciA9fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24g XCJ0ZXN0X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1Ag Tk9UIE5VTEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CisjIEluc2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVm b3JlIGJ1dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1 bHQsIHEodCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQi KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsn KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDcsICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7Citp cygkcmVzdWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVk Jyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMg KDgsICdkYXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IHZhbHVlcyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwg Q2hhbmdlcyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJ TkhFUklUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRh dGEgdG8gaW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBMSUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g dG1wMzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxl IGRlZmluZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDApLCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dF RCBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBV TkxPR0dFRCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJs ZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBVTkxPR0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dl ZCB0YWJsZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEg dG8gYSB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2 ZSB0aGUgdGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2Nl ZWQKKyMgaW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg dG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0 ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0 IG5vdCBvbiB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlk IGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JF QVRFIFRBQkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVS RSB0YWJsZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJM RSB3aXRoIGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0 aCBuYW1lZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0 aGFuIDEwXCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRl cyBjaGVjayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50 cy4KKyMgTk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxs IHZhbHVlIGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51 bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNv bnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlk IGludCwgbmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCBy ZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2Ft ZSB0ZXh0LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZv ciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hl Y2siLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgREVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBuYW1lIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3 aXRoIGRlZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3Ag PT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRz dGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVz IHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZ Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdi YXInKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRp bmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcg Z2lzdCAoYyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAo JzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1 c2lvbiBjb25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VT Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHBy b2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwg J2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBS SU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNl cnQgb3IgdXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgUkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZF UlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJs ZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRF IHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hv dWxkIGZhaWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9 IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBG Uk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0 ZGVyciA9PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9U IERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlk ID0gaWQgKyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0 bXBfcGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVS UkVECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBu YW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNo ZWNrIG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRl IGEgdGVzdCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRt cCBTRVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7 CitERUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVz dCBDUkVBVEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBj aGVja3MgYW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZl bHkuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFC TEUgdG1wIChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRl ZF9wcmljZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAg b3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRp dGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJy b3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91 dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9u ICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAi ZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFn ZV9wYXJhbWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBn X2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8g cmVwbGljYXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGlj YXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEg dGFibGVzcGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMg Zm9yIHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0 YWJsZXNwYWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOwor JHRhYmxlc3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3Bh Y2VfZGlyKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNl ZGlyID0gJG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFz ZWRpci90YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBM T0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRi bHNwYzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIE9GIChjcmVhdGluZyBhIHR5cGUgaXMgbm90IHJlcGxpY2F0ZWQpCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXl0eXBlIEFTIChpZCBp bnQsIG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15dHlwZSBBUyAoaWQgaW50LCBuYW1lIHRleHQsIGFn ZSBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgT0YgbXl0eXBlOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOwor CitwYXNzICJEREwgcmVwbGljYXRpb24gdGVzdHMgcGFzc2VkOiI7CisKKyRub2RlX3N1YnNjcmli ZXItPnN0b3A7Ciskbm9kZV9wdWJsaXNoZXItPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwotLSAK MS44LjMuMQoK --_005_OS0PR01MB5716FCCEF8009E4464042476948E9OS0PR01MB5716jpnp_--