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 1oqZvk-0002FH-06 for pgsql-hackers@arkaria.postgresql.org; Thu, 03 Nov 2022 13:06:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oqZvi-0002j1-Qc for pgsql-hackers@arkaria.postgresql.org; Thu, 03 Nov 2022 13:06:46 +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 1oqZvi-0002is-2a for pgsql-hackers@lists.postgresql.org; Thu, 03 Nov 2022 13:06:46 +0000 Received: from esa5.fujitsucc.c3s2.iphmx.com ([68.232.159.76]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oqZve-0004XE-QM for pgsql-hackers@lists.postgresql.org; Thu, 03 Nov 2022 13:06:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1667480802; x=1699016802; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=9AGp5f7eF5mrApxoEFOTI+hG/pqFU0wkLZ58cBK1vHQ=; b=rQbvs8nRqsFMs3fiORc1Zp3NIrwacYFa57IrsRfv+tD6jsPbnpojWOuT pPWVOKMDienVRe2kdDJ2cYnzD7zeY87XVONyamKmQkc4DxANuUR1vTqJS 8F+0/TrOq5RMQ1RDzj7Zc2W1XJIFk4dVqK3rhy1wFXsxC9KarXFbiCXqj Nl52+aGB3IZYPuktWDoKoOccHUk8zxIZf5Fg8Yk/jNKBVcv1qP41bKcqz ONikRmVn2mY636/B6uKcv6BkWweH04XJCcLCXUx+cbLgkmYY+Ppl+9ALa whh6dNT2exx4oXvHlyu5Ksz8nA8ORRHlZAl+28dTbYa8AMA3Ue7bZCaLX w==; X-IronPort-AV: E=McAfee;i="6500,9779,10519"; a="69271615" X-IronPort-AV: E=Sophos;i="5.96,235,1665414000"; d="scan'208,223";a="69271615" Received: from mail-os0jpn01lp2112.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.112]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Nov 2022 22:06:39 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AmzlChlwJSdm2pGJ/mdiYIgBSeS4PB7KFk9oaOBaTtHUS8Om36mGY7FBw6O3N9EB/29c3QouED4UcsGkyhspUAKOWFMmDeJJ+zuuCj/G1twVpPaARPuxgI107Q+YT8U1z6l+HNKHz5PHx0r7HlE8umoI1vooXeUnQqtOfsHQGWJRXN+yYEGDKDHqHaEl8Xd7oUFhiO+MysNquRDabl4F96lKypmWksEIeKSgGZMm3cWM9MfvVjX1QB4kP1PS+EgEz22gb04W99OsGJcmKLNCGmcEfHbwaZBStsHS6YU6dwy90645kF9KCN4qbtvDoJqKi7K/OnlgEjEEHDYqclPQUQ== 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=wrSXmM2b9t4Knh9hVu3vqEijfuepU/mpGP9Onbmp0iM=; b=DAqnSlNVfct/ltDYOtEGujd2qwrGAt86dlE4JrX6GreLRS4OAdRiNjYZCfbhQFosBo3y5zceVaotLAr72tJ0IT3RuJ7jwZKNejo3RlwvPDO1Kw3UCHxNaTbIO6pQo1g/iOIC9MVXmNnJ5biMeNeFTb2xpiqJLwt9DACC0Dp935kS6gUXRLTEBbrE/oqBL23DVWMt6KdrH67UdWJhGUlyFQ8ulbBGS1IM9TqF8skwcl0ASzV5xtVJLxNLOQJjvKC+P3eeW9MsLoDJ67tzy7ENnqT5kP/JO9smzb7JMFsGZgK0FN3YvvgMv7Q4nFnkH/sgJ7PV5d63wNlnfC2796xT4w== 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 OSZPR01MB8800.jpnprd01.prod.outlook.com (2603:1096:604:158::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.20; Thu, 3 Nov 2022 13:06:35 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd%7]) with mapi id 15.20.5791.022; Thu, 3 Nov 2022 13:06:35 +0000 From: "houzj.fnst@fujitsu.com" To: Masahiko Sawada , Amit Kapila CC: "wangw.fnst@fujitsu.com" , Peter Smith , Dilip Kumar , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Subject: RE: Perform streaming logical transactions by background workers and parallel apply Thread-Topic: Perform streaming logical transactions by background workers and parallel apply Thread-Index: AQHYSXX5ZKpBKXxeUU2FhEhnmXQum6zlu9SQgAkSooCACBQ0gIABsTcwgAA1vECAAqHFgIAE/jVwgAXct9CAADkRgIALO/aAgAsRZICAB606AIAS+CyAgAAufICAAWQLgIABHxKAgAA3o4CAAeE3gIAJPr0AgAkxzACAAiJoAIAC0hUAgARvDICABQA2gIAAFvcAgAeBmICABO9ggIAJO+YAgABu1YCACQzpAIAJSy6AgAS+zICABq7mgIABSJUAgAAOtoCAACghoIAB8TqAgAqL+oCADJWRgIAGVm0AgAGAQICAAerMgIABYRWAgAgnZ+CAAXRdgIAGBUSQgAGFeoCAAFYagIABb5aggAGsWiCAATu3gIAEyyEAgABeLHCABFBngIAK5WIAgABrY4CABb89gIADiS0AgAEu2oCAAHBpgIADPWcAgAS/1gCADeB2AIAAPUnQgAEERACAABzggIAF+30AgAHyDYCAEzpGgIANkEmAgAI7xKA= Date: Thu, 3 Nov 2022 13:06:35 +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?NTBfQWN0aW9uSWQ9ZTU0N2YwMmYtZmQ5MS00ZTFjLTljMWItNjkwMjFlMTg1?= =?utf-8?B?ZmU4O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?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?ZWNlMDUwX1NldERhdGU9MjAyMi0xMS0wM1QxMjo1NjoyNlo7TVNJUF9MYWJl?= =?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-traffictypediagnostic: OS0PR01MB5716:EE_|OSZPR01MB8800:EE_ x-ms-office365-filtering-correlation-id: 40afe4c2-4a0c-43c4-ca98-08dabd9c3c6a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: s0wndh7e/PtWF7oXuc71ljhwlNK9eGL6WUEvSddHsuw34yEOJ77uQ5PGOKQ7+iNcN7+KNP6UHyMVtjhNEowWfSuxpLSAPpYgXXTH4Ytgpb9d3ou2pR2Gujk8zDv7Ln11MQL43MxeDuZbrsai28fbd14PBC4hIKG1zzh0VSLTf10BA/vCxPG1twGlzoEDk7qRx+7Kz+IssBfF2LcwMlKFYlTvft+8dHzHBxWKG3lmJbXJ0mXMJYGP8viE9yrk+/T5OeD7tkiYf4n/oYozJYXHBzkX+OUhMVIe/CSqto9MkQOh7RUbVfGxoQqbCkWiY2FoA+CXjMGrL3waI7eAxeKoSQk1ZAsDQFjbYvxW+2GfEFBaVgrdrY3CZ7bxtWEcAzEXJi7ur6mgO4bDOJOSGhlK2yyB3X6R2amPXmDngkCP2HzenVLyOxYX1EBsW7u7r5YqLkQiIA5+0wlZWubgf+GggnvQc3wETDXYxr/qt190yUxkdbsjjTERkhwOli7FhFIKatOAtzssx0SRFJCS/SnAHCC99Nf1aZh25GhUJOfOphpvwPlZexvWRe6GKUyXjugKtkjsb8aJM05idO3dvfmX2aN0DmbsFO+I2VGk8m5TC6EHmvGlQmLdrFfX1X4ybV2XNrkLXTSyaRrreaTU3OEF6zfWYyObdkNOODZ2NLZLlGCFdmfGGqAF0LB1IkeeMgfFAh9o6+3Hn28inLKD/05WiskOIu1s4ZZ/ctYdaWemoDJZl1kfc4e7NuvnBb39wxGzAoLqhrPHx8DAKFB7dEnLqRxJMbR1vQcqhtZpuznrQFXoiP3jx3yv5h2YSyO7U119L52gL1OAde8AdcrEHQeCFC6vPnwJmngDm9P7F09LbyzSIxgxJo6mBes3/rt6vws/ 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:(13230022)(4636009)(366004)(396003)(376002)(346002)(39860400002)(136003)(1590799012)(451199015)(1580799009)(85182001)(86362001)(122000001)(38070700005)(5660300002)(2906002)(99936003)(33656002)(83380400001)(38100700002)(9686003)(316002)(66446008)(186003)(26005)(45080400002)(54906003)(55016003)(478600001)(110136005)(71200400001)(966005)(6506007)(7696005)(66476007)(66556008)(76116006)(4326008)(8676002)(8936002)(52536014)(41300700001)(64756008)(66946007)(82960400001)(53546011);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TzljV3I5MUgxQ01HQktnQUpubTFKNG5oUmxyR0N1OXFyQkEwR0thV3FCKzBM?= =?utf-8?B?T0lKbGhOVU5nTXZuUTZhU1VlRm04WnlPL0IxeW5WY2pHeWFQbzhjQXV1eG85?= =?utf-8?B?ZjZKSkhIWUc1K2VSSXQ5U0NQQm1RMmJ4UkNCUmhoWHBjY3RHRi85dG5JN1Y3?= =?utf-8?B?WE5BVzZWeVlucHhzTHFOYkVxYVZkWXJjZ1RoOHQ3QzV3TTNBWUNDdXZxdmps?= =?utf-8?B?cDVRbmxubElTSWhYajBJdXpScytvK3dmTGwwRTBZNDJyL1JZdGFnQUdQMldX?= =?utf-8?B?bjJHaTFJNWpONzRFcmlSYjJIS3gzMkN4aEtHWmdiT0pPSlhGdHp1SDRzaHAz?= =?utf-8?B?UDNuUjY3d0dGb01sZzlTS011R2NqZHNpL0d1WXYwamtlSkRVMjVBbzRKbWxm?= =?utf-8?B?NHdKS01rbmR3aVRMRTlIMG41Y1RJYUZ5aDVxZDR4bDRSNWphOHk0NStNKzdu?= =?utf-8?B?VjFxbHB0Ny9OMldhSlBoZkZ6VDYrOHJwdDcwbWNGNE5yNUg2bXliZlBCWUxH?= =?utf-8?B?NWtKMFdYYXBxd0s2SVZIMThtcjZJRC84SWE2TFI1K1o2ZjlHaCs3ajBYUFQ0?= =?utf-8?B?ZWluMklTTzNScW40cEp1aFRxRmJ2WDBWTzdTM0dBbDZXVDJabmpMNldSdS9W?= =?utf-8?B?Vk1wTzluZHViS3ByN0VjLzlydkptYkU4SUNkUDRMb0RnSmwzSHJ1M2hwRHJz?= =?utf-8?B?eHcyY050andsbnhBU3RLMzFaM014Z085R2JQUTJDU0MwcmE2MjU2cUpsWW9D?= =?utf-8?B?VGRtQ2U2NFN4NndZYnFiaTJwT015QXlLUGNrNW05MFpvY3JrcWJCNU9uRzJr?= =?utf-8?B?TmFXMHdJSHdFKzFQMUYzL0Z0dEQ3RzhwUTBnK1hkNDJYTm0rNitBTnR3eUU0?= =?utf-8?B?dy9lWFdkdDIybVFjSVE0WldLZFVzN2NjMFM5SHppTjFvU3NMR2NxZ1VUYURX?= =?utf-8?B?RlFTTVlMQzBvUXN5VmNnWnpwOGJ2RWhQYkVJYVVlbjdWSENxVTE4TVRKT013?= =?utf-8?B?RTR4dUkreUxaZFFQUXUwL25YMHBjQk1DTUVFZmNhWGU0NzZDbVg2NTJEOCt1?= =?utf-8?B?ZVdrWWMzK09SRWNTYkozeUVXMldDb2l2cjUrSjN1d1ozcTVuR2ZONCtoWnFF?= =?utf-8?B?WnIvUmU2TXdJZU51MVk1TjEwUTlRQTJFb2NuUDJyNU95Mm5sMlhrL0xnN2FN?= =?utf-8?B?MllxeUUxNEhlaHorV2pmUjdZcHZnVTAvR1kvTmE2TEFOYVFlZUxWcFVlRWVi?= =?utf-8?B?ZDc5dlNOQkQrOTRzZGlXMmNtcTBlTmplNGl3a3ZQVHBocVp0Q2NoUkFUcWtz?= =?utf-8?B?S0NjaGNzN2NVMUlBYzR2U0p5eXlxRUM1SngzOTMyY2lQZkRYcW55eEpCdHAy?= =?utf-8?B?enJoWDcrNHJRRWdmVFg1clM0VjAwU2w4VG1oeUp5YVZ3VDNtcHFTclRjTkJy?= =?utf-8?B?UjdYcUZpejByN0dkcy85S2FSakdsRTNrWTdDVkhVL3pMRGVIUy92Zm9xNG1t?= =?utf-8?B?MWpvVDQ2VmpnZFJaNzFKNDF0NFVISC82blVTakFkbklqbDZVRjVycUlnOEx0?= =?utf-8?B?TVZkRmJqN2htYnVHQUpsZ29mWG9vNXlXSEc5Y0FZdFNRa01SM1dDZ01oMWdl?= =?utf-8?B?TkxSeGwzaFBvSWV6SzUxRllEMll1bTFKVFlYOE5lenh4QWFld0lNUjZMUVBj?= =?utf-8?B?MUxnUUFZeHd5dUk2U2tzQlVuMFkrNkF4SXlQZFJ1Y3hka21JSDdlaFlVcmFm?= =?utf-8?B?U05EUDM1cTd1V043RytxRDM0Mzh6WmVCMkJzRkpnQ1E0U2k2M1ZwQ0RXdEhw?= =?utf-8?B?VmZHNnVEYXFrT1J4dzZLVGtHbjY3eW1FMC9GYWxGYllkV0hCUFFQWHNuQldQ?= =?utf-8?B?MjI1Vy9jUzVDZXVuem5wK2doemNaMkk0Ky9lRDhhV01aYWQ3SyszMnNzSENG?= =?utf-8?B?U3NNR2dMR1FWZW9icDFBNVUvU0tDNWJyYnQybldVVlNieU1mQ2xwc3JHRytr?= =?utf-8?B?dDVYWUtzb1VSbStwb2tGS3RlMmdRQ1RPaWR6Z253Wkt0aU9RZ29WcUxpWDJQ?= =?utf-8?B?S2QxZHpuWHhCekJua2VpMmQxcG1FT2c0V0VkZUdMRHhzSkhTSW9FakdGYUdZ?= =?utf-8?Q?EMV06CLfvhQGtqj2LfJwmTFyj?= Content-Type: multipart/mixed; boundary="_003_OS0PR01MB5716410E7551394B730D433294389OS0PR01MB5716jpnp_" 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: 40afe4c2-4a0c-43c4-ca98-08dabd9c3c6a X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Nov 2022 13:06:35.2058 (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: MlBFgPb+QzV+eOaV2EjWHFgsi1uKJgTddTSF84fPD/kSZT2wgyBFmaOojuFnPG1wCRuy4zyDV0q8Bai9qRYT5Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSZPR01MB8800 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_003_OS0PR01MB5716410E7551394B730D433294389OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gV2VkbmVzZGF5LCBOb3ZlbWJlciAyLCAyMDIyIDEwOjUwIEFNIE1hc2FoaWtvIFNhd2FkYSA8 c2F3YWRhLm1zaGtAZ21haWwuY29tPiB3cm90ZToNCj4gDQo+IE9uIE1vbiwgT2N0IDI0LCAyMDIy IGF0IDg6NDIgUE0gTWFzYWhpa28gU2F3YWRhDQo+IDxzYXdhZGEubXNoa0BnbWFpbC5jb20+IHdy b3RlOg0KPiA+DQo+ID4gT24gV2VkLCBPY3QgMTIsIDIwMjIgYXQgMzowNCBQTSBBbWl0IEthcGls YSA8YW1pdC5rYXBpbGExNkBnbWFpbC5jb20+DQo+IHdyb3RlOg0KPiA+ID4NCj4gPiA+IE9uIFR1 ZSwgT2N0IDExLCAyMDIyIGF0IDU6NTIgQU0gTWFzYWhpa28gU2F3YWRhDQo+IDxzYXdhZGEubXNo a0BnbWFpbC5jb20+IHdyb3RlOg0KPiA+ID4gPg0KPiA+ID4gPiBPbiBGcmksIE9jdCA3LCAyMDIy IGF0IDI6MDAgUE0gQW1pdCBLYXBpbGEgPGFtaXQua2FwaWxhMTZAZ21haWwuY29tPg0KPiB3cm90 ZToNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEFib3V0IHlvdXIgcG9pbnQgdGhhdCBoYXZpbmcgZGlm ZmVyZW50IHBhcnRpdGlvbiBzdHJ1Y3R1cmVzIGZvcg0KPiA+ID4gPiA+IHB1Ymxpc2hlciBhbmQg c3Vic2NyaWJlciwgSSBkb24ndCBrbm93IGhvdyBjb21tb24gaXQgd2lsbCBiZSBvbmNlIHdlDQo+ ID4gPiA+ID4gaGF2ZSBEREwgcmVwbGljYXRpb24uIEFsc28sIHRoZSBkZWZhdWx0IHZhbHVlIG9m DQo+ID4gPiA+ID4gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgZmFsc2Ugd2hpY2ggZG9l c24ndCBzZWVtIHRvIGluZGljYXRlDQo+ID4gPiA+ID4gdGhhdCB0aGlzIGlzIGEgcXVpdGUgY29t bW9uIGNhc2UuDQo+ID4gPiA+DQo+ID4gPiA+IFNvIGhvdyBjYW4gd2UgY29uc2lkZXIgdGhlc2Ug Y29uY3VycmVudCBpc3N1ZXMgdGhhdCBjb3VsZCBoYXBwZW4gb25seQ0KPiA+ID4gPiB3aGVuIHN0 cmVhbWluZyA9ICdwYXJhbGxlbCc/IENhbiB3ZSByZXN0cmljdCBzb21lIHVzZSBjYXNlcyB0byBh dm9pZA0KPiA+ID4gPiB0aGUgcHJvYmxlbSBvciBjYW4gd2UgaGF2ZSBhIHNhZmVndWFyZCBhZ2Fp bnN0IHRoZXNlIGNvbmZsaWN0cz8NCj4gPiA+ID4NCj4gPiA+DQo+ID4gPiBZZWFoLCByaWdodCBu b3cgdGhlIHN0cmF0ZWd5IGlzIHRvIGRpc2FsbG93IHBhcmFsbGVsIGFwcGx5IGZvciBzdWNoDQo+ ID4gPiBjYXNlcyBhcyB5b3UgY2FuIHNlZSBpbiAqMDAwMyogcGF0Y2guDQo+ID4NCj4gPiBUaWdo dGVuaW5nIHRoZSByZXN0cmljdGlvbnMgY291bGQgd29yayBpbiBzb21lIGNhc2VzIGJ1dCB0aGVy ZSBtaWdodA0KPiA+IHN0aWxsIGJlIGNvbmVyIGNhc2VzIGFuZCBpdCBjb3VsZCByZWR1Y2UgdGhl IHVzYWJpbGl0eS4gSSdtIG5vdCByZWFsbHkNCj4gPiBzdXJlIHRoYXQgd2UgY2FuIGVuc3VyZSBz dWNoIGEgZGVhZGxvY2sgd29uJ3QgaGFwcGVuIHdpdGggdGhlIGN1cnJlbnQNCj4gPiByZXN0cmlj dGlvbnMuIEkgdGhpbmsgd2UgbmVlZCBzb21ldGhpbmcgc2FmZWd1YXJkIGp1c3QgaW4gY2FzZS4g Rm9yDQo+ID4gZXhhbXBsZSwgaWYgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgaXMgd2FpdGluZyBm b3IgYSBsb2NrIGFjcXVpcmVkIGJ5DQo+ID4gaXRzIHBhcmFsbGVsIHdvcmtlciwgaXQgY2FuY2Vs cyB0aGUgcGFyYWxsZWwgd29ya2VyJ3MgdHJhbnNhY3Rpb24sDQo+ID4gY29tbWl0cyBpdHMgdHJh bnNhY3Rpb24sIGFuZCByZXN0YXJ0cyBsb2dpY2FsIHJlcGxpY2F0aW9uLiBPciB0aGUNCj4gPiBs ZWFkZXIgY2FuIGxvZyB0aGUgZGVhZGxvY2sgdG8gbGV0IHRoZSB1c2VyIGtub3cuDQo+ID4NCj4g DQo+IEFzIGFub3RoZXIgZGlyZWN0aW9uLCB3ZSBjb3VsZCBtYWtlIHRoZSBwYXJhbGxlbCBhcHBs eSBmZWF0dXJlIHJvYnVzdA0KPiBpZiB3ZSBjYW4gZGV0ZWN0IGRlYWRsb2NrcyB0aGF0IGhhcHBl biBhbW9uZyB0aGUgbGVhZGVyIHdvcmtlciBhbmQNCj4gcGFyYWxsZWwgd29ya2Vycy4gSSdkIGxp a2UgdG8gc3VtbWFyaXplIHRoZSBpZGVhIGRpc2N1c3NlZCBvZmYtbGlzdA0KPiAod2l0aCBBbWl0 LCBIb3UtU2FuLCBhbmQgS3Vyb2RhLVNhbikgZm9yIGRpc2N1c3Npb24uIFRoZSBiYXNpYyBpZGVh IGlzDQo+IHRoYXQgd2hlbiB0aGUgbGVhZGVyIHdvcmtlciBvciBwYXJhbGxlbCB3b3JrZXIgbmVl ZHMgdG8gd2FpdCBmb3INCj4gc29tZXRoaW5nIChlZy4gdHJhbnNhY3Rpb24gY29tcGxldGlvbiwg bWVzc2FnZXMpIHdlIHVzZSBsbWdyDQo+IGZ1bmN0aW9uYWxpdHkgc28gdGhhdCB3ZSBjYW4gY3Jl YXRlIHdhaXQtZm9yIGVkZ2VzIGFuZCBkZXRlY3QNCj4gZGVhZGxvY2tzIGluIGxtZ3IuDQo+IA0K PiBGb3IgZXhhbXBsZSwgYSBzY2VuYXJpbyB3aGVyZSBhIGRlYWRsb2NrIG9jY3VycyBpcyB0aGUg Zm9sbG93aW5nOg0KPiANCj4gW1B1Ymxpc2hlcl0NCj4gY3JlYXRlIHRhYmxlIHRhYjEoYSBpbnQp Ow0KPiBjcmVhdGUgcHVibGljYXRpb24gcHViIGZvciB0YWJsZSB0YWIxOw0KPiANCj4gW1N1YmNy aWJlcl0NCj4gY3JlYXQgdGFibGUgdGFiMShhIGludCBwcmltYXJ5IGtleSk7DQo+IGNyZWF0ZSBz dWJzY3JpcHRpb24gc3ViIGNvbm5lY3Rpb24gJ3BvcnQ9MTAwMDAgZGJuYW1lPXBvc3RncmVzJw0K PiBwdWJsaWNhdGlvbiBwdWIgd2l0aCAoc3RyZWFtaW5nID0gcGFyYWxsZWwpOw0KPiANCj4gVFgx Og0KPiBCRUdJTjsNCj4gSU5TRVJUIElOVE8gdGFiMSBTRUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCA1MDAwKSBzKGkpOyAtLSBzdHJlYW1lZA0KPiAgICAgVHgyOg0KPiAgICAgQkVHSU47 DQo+ICAgICBJTlNFUlQgSU5UTyB0YWIxIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDUwMDApIHMoaSk7IC0tIHN0cmVhbWVkDQo+ICAgICBDT01NSVQ7DQo+IENPTU1JVDsNCj4gDQo+ IFN1cHBvc2UgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKFBBLTEpIGlzIGV4ZWN1dGluZyBUWC0x IGFuZCB0aGUNCj4gbGVhZGVyIGFwcGx5IHdvcmtlciAoTEEpIGlzIGV4ZWN1dGluZyBUWC0yIGNv bmN1cnJlbnRseSBvbiB0aGUNCj4gc3Vic2NyaWJlci4gTm93LCBMQSBpcyB3YWl0aW5nIGZvciBQ QS0xIGJlY2F1c2Ugb2YgdGhlIHVuaXF1ZSBrZXkgb2YNCj4gdGFiMSB3aGlsZSBQQS0xIGlzIHdh aXRpbmcgZm9yIExBIHRvIHNlbmQgZnVydGhlciBtZXNzYWdlcy4gVGhlcmUgaXMgYQ0KPiBkZWFk bG9jayBiZXR3ZWVuIFBBLTEgYW5kIExBIGJ1dCBsbWdyIGNhbm5vdCBkZXRlY3QgaXQuDQo+IA0K PiBPbmUgaWRlYSB0byByZXNvbHZlIHRoaXMgaXNzdWUgaXMgdGhhdCB3ZSBoYXZlIExBIGFjcXVp cmUgYSBzZXNzaW9uDQo+IGxvY2sgb24gYSBzaGFyZWQgb2JqZWN0IChieSBMb2NrU2hhcmVkT2Jq ZWN0Rm9yU2Vzc2lvbigpKSBhbmQgaGF2ZQ0KPiBQQS0xIHdhaXQgb24gdGhlIGxvY2sgYmVmb3Jl IHRyeWluZyB0byByZWNlaXZlIG1lc3NhZ2VzLiBJT1csICBMQQ0KPiBhY3F1aXJlcyB0aGUgbG9j ayBiZWZvcmUgc2VuZGluZyBTVFJFQU1fU1RPUCBhbmQgcmVsZWFzZXMgaXQgaWYNCj4gYWxyZWFk eSBhY3F1aXJlZCBiZWZvcmUgc2VuZGluZyBTVFJFQU1fU1RBUlQsIFNUUkVBTV9QUkVQQVJFIGFu ZA0KPiBTVFJFQU1fQ09NTUlULiBGb3IgUEEtMSwgaXQgYWx3YXlzIG5lZWRzIHRvIGFjcXVpcmUg dGhlIGxvY2sgYWZ0ZXINCj4gcHJvY2Vzc2luZyBTVFJFQU1fU1RPUCBhbmQgdGhlbiByZWxlYXNl IGltbWVkaWF0ZWx5IGFmdGVyIGFjcXVpcmluZw0KPiBpdC4gVGhhdCB3YXksIHdoZW4gUEEtMSBp cyB3YWl0aW5nIGZvciBMQSwgd2UgY2FuIGhhdmUgYSB3YWl0LWVkZ2UNCj4gZnJvbSBQQS0xIHRv IExBIGluIGxtZ3IsIHdoaWNoIHdpbGwgbWFrZSBhIGRlYWRsb2NrIGluIGxtZ3IgbGlrZToNCj4g DQo+IExBICh3YWl0aW5nIHRvIGFjcXVpcmUgbG9jaykgLT4gUEEtMSAod2FpdGluZyB0byBhY3F1 aXJlIHRoZSBzaGFyZWQNCj4gb2JqZWN0KSAtPiBMQQ0KPiANCj4gV2Ugd291bGQgbmVlZCB0aGUg c2hhcmVkIG9iamVjdHMgcGVyIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4NCj4gDQo+IEFmdGVyIGRl dGVjdGluZyBhIGRlYWRsb2NrLCB3ZSBjYW4gcmVzdGFydCBsb2dpY2FsIHJlcGxpY2F0aW9uIHdp dGgNCj4gdGVtcG9yYXJpbHkgZGlzYWJsaW5nIHRoZSBwYXJhbGxlbCBhcHBseSwgd2hpY2ggaXMg ZG9uZSBieSAwMDA1IHBhdGNoLg0KPiANCj4gQW5vdGhlciBzY2VuYXJpbyBpcyBzaW1pbGFyIHRv IHRoZSBwcmV2aW91cyBjYXNlIGJ1dCBUWC0xIGFuZCBUWC0yIGFyZQ0KPiBleGVjdXRlZCBieSB0 d28gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAoUEEtMSBhbmQgUEEtMiByZXNwZWN0aXZlbHkpLg0K PiBJbiB0aGlzIHNjZW5hcmlvLCBQQS0yIGlzIHdhaXRpbmcgZm9yIFBBLTEgdG8gY29tcGxldGUg aXRzIHRyYW5zYWN0aW9uDQo+IHdoaWxlIFBBLTEgaXMgd2FpdGluZyBmb3Igc3Vic2VxdWVudCBp bnB1dCBmcm9tIExBLiBBbHNvLCBMQSBpcw0KPiB3YWl0aW5nIGZvciBQQS0yIHRvIGNvbXBsZXRl IGl0cyB0cmFuc2FjdGlvbiBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUNCj4gY29tbWl0IG9yZGVy LiBUaGVyZSBpcyBhIGRlYWRsb2NrIGFtb25nIHRocmVlIHByb2Nlc3NlcyBidXQgaXQgY2Fubm90 DQo+IGJlIGRldGVjdGVkIGluIGxtZ3IgYmVjYXVzZSB0aGUgZmFjdCB0aGF0IExBIGlzIHdhaXRp bmcgZm9yIFBBLTIgdG8NCj4gY29tcGxldGUgaXRzIHRyYW5zYWN0aW9uIGRvZXNuJ3QgYXBwZWFy IGluIGxtZ3IgKHNlZQ0KPiBwYXJhbGxlbF9hcHBseV93YWl0X2Zvcl94YWN0X2ZpbmlzaCgpKS4g VG8gZml4IGl0LCB3ZSBjYW4gdXNlDQo+IFhhY3RMb2NrVGFibGVXYWl0KCkgaW5zdGVhZC4NCj4g DQo+IEhvd2V2ZXIsIHNpbmNlIFhhY3RMb2NrVGFibGVXYWl0KCkgY29uc2lkZXJzIFBSRVBBUkVE IFRSQU5TQUNUSU9OIGFzDQo+IHN0aWxsIGluIHByb2dyZXNzLCBwcm9iYWJseSB3ZSBuZWVkIGEg c2ltaWxhciB0cmljayBhcyBhYm92ZSBpbiBjYXNlDQo+IHdoZXJlIGEgdHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQuIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoYXQgVFgtMiB3YXMNCj4gcHJlcGFyZWQg aW5zdGVhZCBvZiBjb21taXR0ZWQgaW4gdGhlIGFib3ZlIHNjZW5hcmlvLCBQQS0yIGFjcXVpcmVz DQo+IGFub3RoZXIgc2hhcmVkIGxvY2sgYXQgU1RBUlRfU1RSRUFNIGFuZCByZWxlYXNlcyBpdCBh dA0KPiBTVFJFQU1fQ09NTUlUL1BSRVBBUkUuIExBIGNhbiB3YWl0IG9uIHRoZSBsb2NrLg0KPiAN Cj4gWWV0IGFub3RoZXIgc2NlbmFyaW8gd2hlcmUgTEEgaGFzIHRvIHdhaXQgaXMgdGhlIGNhc2Ug d2hlcmUgdGhlIHNobV9tcQ0KPiBidWZmZXIgaXMgZnVsbC4gSW4gdGhlIGFib3ZlIHNjZW5hcmlv IChpZS4gUEEtMSBhbmQgUEEtMiBhcmUgZXhlY3V0aW5nDQo+IHRyYW5zYWN0aW9ucyBjb25jdXJy ZW50bHkpLCBpZiAgdGhlIHNobV9tcSBidWZmZXIgYmV0d2VlbiBMQSBhbmQgUEEtMg0KPiBpcyBm dWxsLCBMQSBoYXMgdG8gd2FpdCB0byBzZW5kIG1lc3NhZ2VzLCBhbmQgdGhpcyB3YWl0IGRvZXNu J3QgYXBwZWFyDQo+IGluIGxtZ3IuIFRvIGZpeCBpdCwgcHJvYmFibHkgd2UgaGF2ZSB0byB1c2Ug bm9uLWJsb2NraW5nIHdyaXRlIGFuZA0KPiB3YWl0IHdpdGggYSB0aW1lb3V0LiBJZiB0aW1lb3V0 IGlzIGV4Y2VlZGVkLCB0aGUgTEEgd2lsbCB3cml0ZSB0byBmaWxlDQo+IGFuZCBpbmRpY2F0ZSBQ QS0yIHRoYXQgaXQgbmVlZHMgdG8gcmVhZCBmaWxlIGZvciByZW1haW5pbmcgbWVzc2FnZXMuDQo+ IFRoZW4gTEEgd2lsbCBzdGFydCB3YWl0aW5nIGZvciBjb21taXQgd2hpY2ggd2lsbCBkZXRlY3Qg ZGVhZGxvY2sgaWYNCj4gYW55Lg0KPiANCj4gSWYgd2UgY2FuIGRldGVjdCBkZWFkbG9ja3MgYnkg aGF2aW5nIHN1Y2ggYSBmdW5jdGlvbmFsaXR5IG9yIHNvbWUNCj4gb3RoZXIgd2F5IHRoZW4gd2Ug ZG9uJ3QgbmVlZCB0byB0aWdodGVuIHRoZSByZXN0cmljdGlvbnMgb2Ygc3Vic2NyaWJlZA0KPiB0 YWJsZXMnIHNjaGVtYXMgZXRjLg0KDQpUaGFua3MgZm9yIHRoZSBhbmFseXNpcyBhbmQgc3VtbWFy eSAhDQoNCkkgdHJpZWQgdG8gaW1wbGVtZW50IHRoZSBhYm92ZSBpZGVhIGFuZCBoZXJlIGlzIHRo ZSBwYXRjaCBzZXQuIEkgaGF2ZSBkb25lIHNvbWUNCmJhc2ljIHRlc3RzIGZvciB0aGUgbmV3IGNv ZGVzIGFuZCBpdCB3b3JrIGZpbmUuIEJ1dCBJIGFtIGdvaW5nIHRvIHRlc3Qgc29tZQ0KY29ubmVy IGNhc2VzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGNvZGVzIHdvcmsgZmluZS4gSSByZW1vdmVkIHRo ZSBvbGQgMDAwMyBwYXRjaA0Kd2hpY2ggd2FzIHVzZWQgdG8gY2hlY2sgdGhlIHBhcmFsbGVsIGFw cGx5IHNhZmV0eSBiZWNhdXNlIG5vdyB3ZSBjYW4gZGV0ZWN0IHRoZQ0KZGVhZGxvY2sgcHJvYmxl bS4NCg0KQmVzaWRlcywgdGhlcmUgYXJlIGZldyB0YXNrcyBsZWZ0IHdoaWNoIEkgd2lsbCBoYW5k bGUgc29vbiBhbmQgdXBkYXRlIHRoZSBwYXRjaCBzZXQ6DQoNCiogQWRkcmVzcyBwcmV2aW91cyBj b21tZW50IGZyb20gQW1pdFsxXSwgU2hpLXNhblsyXSBhbmQgUGV0ZXJbM10gKEFscmVhZHkgZG9u ZSBidXQgaGF2ZW4ndCBtZXJnZWQgdGhlbSkuDQoqIFJlYmFzZSB0aGUgb3JpZ2luYWwgMDAwNSBw YXRjaCB3aGljaCBpcyAicmV0cnkgdG8gYXBwbHkgc3RyZWFtaW5nIHhhY3Qgb25seSBpbiBsZWFk ZXIgYXBwbHkgd29ya2VyIi4NCiogQWRqdXN0IHNvbWUgY29tbWVudHMgYW5kIGRvY3VtZW50YXRp b24gcmVsYXRlZCB0byBuZXcgY29kZXMuDQoNClsxXSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkL0NBQTRlSzFMc24lM0RfZ3oxLTNMcVotd0VEUURtQ2hVc09YOEx2SFM4V1Yz OXdDMWlSUiUzRFElNDBtYWlsLmdtYWlsLmNvbQ0KWzJdIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwu b3JnL21lc3NhZ2UtaWQvT1NaUFIwMU1CNjMxMDQyNTgyODA1QThFODYxNUJDNDEzRkQzMjklNDBP U1pQUjAxTUI2MzEwLmpwbnByZDAxLnByb2Qub3V0bG9vay5jb20NClszXSBodHRwczovL3d3dy5w b3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBSHV0JTJCUHNKV0hSb1J6WHRNckoxUmF4bWtTMkxr aU1SXzRTMnBTaW9ueFhtWXN5T3d3JTQwbWFpbC5nbWFpbC5jb20NCg0KQmVzdCByZWdhcmRzLA0K SG91IHpqDQo= --_003_OS0PR01MB5716410E7551394B730D433294389OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v42-0001-Perform-streaming-logical-transactions-by-parall.patch" Content-Description: v42-0001-Perform-streaming-logical-transactions-by-parall.patch Content-Disposition: attachment; filename="v42-0001-Perform-streaming-logical-transactions-by-parall.patch"; size=165204; creation-date="Thu, 03 Nov 2022 12:57:35 GMT"; modification-date="Thu, 03 Nov 2022 13:06:32 GMT" Content-Transfer-Encoding: base64 RnJvbSAwOTE1Njg0NTQ3MTVkODE3MmM1MTcyNjMzYzVmN2Q2NDUwOTk3YjRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY0Ml0gUGVyZm9ybSBzdHJlYW1pbmcgbG9naWNhbCB0cmFuc2FjdGlvbnMgYnkgcGFyYWxsZWwK IHdvcmtlcnMKCkN1cnJlbnRseSwgZm9yIGxhcmdlIHRyYW5zYWN0aW9ucywgdGhlIHB1Ymxpc2hl ciBzZW5kcyB0aGUgZGF0YSBpbiBtdWx0aXBsZQpzdHJlYW1zIChjaGFuZ2VzIGRpdmlkZWQgaW50 byBjaHVua3MgZGVwZW5kaW5nIHVwb24gbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSksCmFuZCB0 aGVuIG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUsIHRoZSBhcHBseSB3b3JrZXIgd3JpdGVzIHRoZSBj aGFuZ2VzIGludG8KdGVtcG9yYXJ5IGZpbGVzIGFuZCBvbmNlIGl0IHJlY2VpdmVzIHRoZSBjb21t aXQsIGl0IHJlYWRzIGZyb20gdGhvc2UgZmlsZXMgYW5kCmFwcGxpZXMgdGhlIGVudGlyZSB0cmFu c2FjdGlvbi4gVG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc3VjaAp0cmFuc2FjdGlvbnMs IHdlIGNhbiBpbnN0ZWFkIGFsbG93IHRoZW0gdG8gYmUgYXBwbGllZCB2aWEgcGFyYWxsZWwgd29y a2Vycy4KCkluIHRoaXMgYXBwcm9hY2gsIHdlIGFzc2lnbiBhIG5ldyBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgKGlmIGF2YWlsYWJsZSkgYXMKc29vbiBhcyB0aGUgeGFjdCdzIGZpcnN0IHN0cmVhbSBp cyByZWNlaXZlZCBhbmQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbApzZW5kIGNoYW5nZXMg dG8gdGhpcyBuZXcgd29ya2VyIHZpYSBzaGFyZWQgbWVtb3J5LiBUaGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyCndpbGwgZGlyZWN0bHkgYXBwbHkgdGhlIGNoYW5nZSBpbnN0ZWFkIG9mIHdyaXRpbmcg aXQgdG8gdGVtcG9yYXJ5IGZpbGVzLiBXZQprZWVwIHRoaXMgd29ya2VyIGFzc2lnbmVkIHRpbGwg dGhlIHRyYW5zYWN0aW9uIGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0CmZvciB0aGUg d29ya2VyIHRvIGZpbmlzaCBhdCBjb21taXQuIFRoaXMgcHJlc2VydmVzIGNvbW1pdCBvcmRlcmlu ZyBhbmQgYXZvaWRzCndyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSBmaWxlcyBpbiBtb3N0IGNh c2VzLiBXZSBzdGlsbCBuZWVkIHRvIHNwaWxsIGlmCnRoZXJlIGlzIG5vIHdvcmtlciBhdmFpbGFi bGUuCgpUaGlzIHBhdGNoIGFsc28gZXh0ZW5kcyB0aGUgU1VCU0NSSVBUSU9OICdzdHJlYW1pbmcn IHBhcmFtZXRlciBzbyB0aGF0IHRoZSB1c2VyCmNhbiBjb250cm9sIHdoZXRoZXIgdG8gYXBwbHkg dGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpbiBhIHBhcmFsbGVsIGFwcGx5CndvcmtlciBvciBz cGlsbCB0aGUgY2hhbmdlIHRvIGRpc2suIFRoZSB1c2VyIGNhbiBzZXQgdGhlIHN0cmVhbWluZyBw YXJhbWV0ZXIgdG8KJ29uL29mZicsICdwYXJhbGxlbCcuIFRoZSBwYXJhbWV0ZXIgdmFsdWUgJ3Bh cmFsbGVsJyBtZWFucyB0aGUgc3RyZWFtaW5nIHdpbGwKYmUgYXBwbGllZCB2aWEgYSBwYXJhbGxl bCBhcHBseSB3b3JrZXIsIGlmIGF2YWlsYWJsZS4gVGhlIHBhcmFtZXRlciB2YWx1ZQonb24nIG1l YW5zIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gd2lsbCBiZSBzcGlsbGVkIHRvIGRpc2suIFRo ZSBkZWZhdWx0IHZhbHVlCmlzICdvZmYnIChzYW1lIGFzIGN1cnJlbnQgYmVoYXZpb3VyKS4KCklu IGFkZGl0aW9uLCB0aGUgcGF0Y2ggZXh0ZW5kcyB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBTVFJF QU1fQUJPUlQgbWVzc2FnZSBzbwp0aGF0IGFib3J0X3RpbWUgYW5kIGFib3J0X2xzbiBjYW4gYWxz byBiZSBzZW50IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUKcmVwbGljYXRpb24gb3Jp Z2luIGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aGVuIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rp b24gaXMKYWJvcnRlZC4gQmVjYXVzZSB0aGlzIG1lc3NhZ2UgZXh0ZW5zaW9uIGlzIG5lZWRlZCB0 byBzdXBwb3J0IHBhcmFsbGVsCnN0cmVhbWluZywgcGFyYWxsZWwgc3RyZWFtaW5nIGlzIG5vdCBz dXBwb3J0ZWQgZm9yIHB1YmxpY2F0aW9ucyBvbiBzZXJ2ZXJzIDwKUEcxNi4KLS0tCiBkb2Mvc3Jj L3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKy0KIGRv Yy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOCAr LQogZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbCAgICAgICAgICAgICAgfCAg IDIxICstCiBkb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMjkgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sICAg ICAgICAgIHwgICAyNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jICAgICAg ICAgICAgICAgICAgfCAgIDEzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RlZmluZS5jICAgICAg ICAgICAgICAgICAgICAgIHwgICA1OCArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRp b25jbWRzLmMgICAgICAgICAgICB8ICAgMTAgKy0KIHNyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9iZ3dvcmtlci5jICAgICAgICAgICAgICAgICAgfCAgICAzICsKIC4uLi9saWJwcXdhbHJlY2Vp dmVyL2xpYnBxd2FscmVjZWl2ZXIuYyAgICAgICAgICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsKIC4uLi9yZXBs aWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyAgICAgIHwgMTM4MiArKysrKysr KysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAg ICAgICAgICAgfCAgIDEwICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5j aGVyLmMgICAgICAgICB8ICAyMTAgKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L21lc29uLmJ1aWxkICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9wcm90by5jICAgICAgICAgICAgfCAgIDM3ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyAgICB8ICAgMTAgKy0KIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICAgICAgIHwgICAyMCArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgICAgICAgfCAxMTc5ICsrKysrKysrKysr KysrLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAgICAg ICB8ICAgMjEgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAg ICAgICAgIHwgICAgNCArCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVu dC5jICAgICAgICAgICAgfCAgICA2ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jICAgICAgICAgICAgICAgIHwgICAxMiArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUgICAgICB8ICAgIDEgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu YyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3N1YnNjcmlwdGlvbi5oICAgICAgICAgICAgICB8ICAgMjEgKy0KIHNyYy9pbmNsdWRlL2Nv bW1hbmRzL2RlZnJlbS5oICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCAgICAgICAgICB8ICAgIDEgKwogc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggICAgICAgICAgICAgfCAgIDI4ICstCiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmggICAgICAgICAgICB8ICAgIDgg Kwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgICAgICAgfCAg ICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggICAgICAgICAg ICB8ICAgIDcgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggICAgICAg ICAgICAgIHwgICAgMiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFs LmggICAgICAgICAgfCAgMTgyICsrLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgg ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQu aCAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N1YnNjcmlwdGlvbi5vdXQgICAgICAgICB8ICAgMTIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3N1YnNjcmlwdGlvbi5zcWwgICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIDQxIGZpbGVzIGNo YW5nZWQsIDMxMDYgaW5zZXJ0aW9ucygrKSwgMjk2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtl ci5jCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvY2F0YWxvZ3Muc2dtbAppbmRleCAwMGY4MzNkLi5jNTc2OWRhIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbApA QCAtNzg5MiwxMSArNzg5MiwxNiBAQCBTQ1JBTS1TSEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRl cmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT4mbAogCiAgICAgIDxy b3c+CiAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0i Y29sdW1uX2RlZmluaXRpb24iPgotICAgICAgIDxzdHJ1Y3RmaWVsZD5zdWJzdHJlYW08L3N0cnVj dGZpZWxkPiA8dHlwZT5ib29sPC90eXBlPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5zdWJzdHJlYW08 L3N0cnVjdGZpZWxkPiA8dHlwZT5jaGFyPC90eXBlPgogICAgICAgPC9wYXJhPgogICAgICAgPHBh cmE+Ci0gICAgICAgSWYgdHJ1ZSwgdGhlIHN1YnNjcmlwdGlvbiB3aWxsIGFsbG93IHN0cmVhbWlu ZyBvZiBpbi1wcm9ncmVzcwotICAgICAgIHRyYW5zYWN0aW9ucworICAgICAgIENvbnRyb2xzIGhv dyB0byBoYW5kbGUgdGhlIHN0cmVhbWluZyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnM6Cisg ICAgICAgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gPSBkaXNhbGxvdyBzdHJlYW1pbmcgb2YgaW4tcHJv Z3Jlc3MgdHJhbnNhY3Rpb25zLAorICAgICAgIDxsaXRlcmFsPnQ8L2xpdGVyYWw+ID0gc3BpbGwg dGhlIGNoYW5nZXMgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIHRvCisgICAgICAgZGlzayBh bmQgYXBwbHkgYXQgb25jZSBhZnRlciB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHRo ZQorICAgICAgIHB1Ymxpc2hlciwKKyAgICAgICA8bGl0ZXJhbD5wPC9saXRlcmFsPiA9IGFwcGx5 IGNoYW5nZXMgZGlyZWN0bHkgdXNpbmcgYSBwYXJhbGxlbCBhcHBseQorICAgICAgIHdvcmtlciBp ZiBhdmFpbGFibGUgKHNhbWUgYXMgJ3QnIGlmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUpCiAgICAg ICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCA1NTllYjg5Li5h NmFhMWFjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCkBAIC00OTQ4LDcgKzQ5NDgsOCBAQCBBTlkgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUg Y2xhc3M9IgogICAgICAgPGxpc3RpdGVtPgogICAgICAgIDxwYXJhPgogICAgICAgICBTcGVjaWZp ZXMgbWF4aW11bSBudW1iZXIgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXJzLiBUaGlzIGlu Y2x1ZGVzCi0gICAgICAgIGJvdGggYXBwbHkgd29ya2VycyBhbmQgdGFibGUgc3luY2hyb25pemF0 aW9uIHdvcmtlcnMuCisgICAgICAgIGxlYWRlciBhcHBseSB3b3JrZXJzLCBwYXJhbGxlbCBhcHBs eSB3b3JrZXJzLCBhbmQgdGFibGUgc3luY2hyb25pemF0aW9uCisgICAgICAgIHdvcmtlcnMuCiAg ICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICBMb2dpY2FsIHJlcGxpY2F0aW9u IHdvcmtlcnMgYXJlIHRha2VuIGZyb20gdGhlIHBvb2wgZGVmaW5lZCBieQpAQCAtNDk4OCw2ICs0 OTg5LDMxIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3Jl cGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgogICAg ICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbWF4LXBhcmFs bGVsLWFwcGx5LXdvcmtlcnMtcGVyLXN1YnNjcmlwdGlvbiIgeHJlZmxhYmVsPSJtYXhfcGFyYWxs ZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1l Pm1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb248L3Zhcm5hbWU+ICg8 dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjwvdmFy bmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVy bT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAg ICAgTWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBwZXIgc3Vic2NyaXB0 aW9uLiBUaGlzCisgICAgICAgIHBhcmFtZXRlciBjb250cm9scyB0aGUgYW1vdW50IG9mIHBhcmFs bGVsaXNtIGZvciBzdHJlYW1pbmcgb2YKKyAgICAgICAgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25z IHdpdGggc3Vic2NyaXB0aW9uIHBhcmFtZXRlcgorICAgICAgICA8bGl0ZXJhbD5zdHJlYW1pbmcg PSBwYXJhbGxlbDwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAg ICAgICBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBhcmUgdGFrZW4gZnJvbSB0aGUgcG9vbCBk ZWZpbmVkIGJ5CisgICAgICAgIDx2YXJuYW1lPm1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtl cnM8L3Zhcm5hbWU+LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhl IGRlZmF1bHQgdmFsdWUgaXMgMi4gVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGluIHRo ZQorICAgICAgICA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBv biB0aGUgc2VydmVyIGNvbW1hbmQKKyAgICAgICAgbGluZS4KKyAgICAgICA8L3BhcmE+CisgICAg ICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8L3ZhcmlhYmxlbGlz dD4KICAgICA8L3NlY3QyPgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBs aWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRl eCBlOTg1MzhlLi45ZTc1M2ZlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBs aWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwK QEAgLTEzNDAsNiArMTM0MCwxNiBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBm b3IgcmVwbGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogICAgbWlnaHQg bm90IHZpb2xhdGUgYW55IGNvbnN0cmFpbnQuICBUaGlzIGNhbiBlYXNpbHkgbWFrZSB0aGUgc3Vi c2NyaWJlcgogICAgaW5jb25zaXN0ZW50LgogICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVu IHRoZSBzdHJlYW1pbmcgbW9kZSBpcyA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJhbD4sIHRoZSBm aW5pc2ggTFNOIG9mCisgICBmYWlsZWQgdHJhbnNhY3Rpb25zIG1heSBub3QgYmUgbG9nZ2VkLiBJ biB0aGF0IGNhc2UsIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8KKyAgIGNoYW5nZSB0aGUgc3RyZWFt aW5nIG1vZGUgdG8gPGxpdGVyYWw+b248L2xpdGVyYWw+IG9yIDxsaXRlcmFsPm9mZjwvbGl0ZXJh bD4gYW5kCisgICBjYXVzZSB0aGUgc2FtZSBjb25mbGljdHMgYWdhaW4gc28gdGhlIGZpbmlzaCBM U04gb2YgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiB3aWxsCisgICBiZSB3cml0dGVuIHRvIHRoZSBz ZXJ2ZXIgbG9nLiBGb3IgdGhlIHVzYWdlIG9mIGZpbmlzaCBMU04sIHBsZWFzZSByZWZlciB0byA8 bGluaworICAgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uIj48Y29tbWFuZD5BTFRFUiBT VUJTQ1JJUFRJT04gLi4uCisgICBTS0lQPC9jb21tYW5kPjwvbGluaz4uCisgIDwvcGFyYT4KICA8 L3NlY3QxPgogCiAgPHNlY3QxIGlkPSJsb2dpY2FsLXJlcGxpY2F0aW9uLXJlc3RyaWN0aW9ucyI+ CkBAIC0xNTIxLDcgKzE1MzEsOCBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBm b3IgcmVwbGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogICAgc3Vic2Ny aXB0aW9uLiAgQSBkaXNhYmxlZCBzdWJzY3JpcHRpb24gb3IgYSBjcmFzaGVkIHN1YnNjcmlwdGlv biB3aWxsIGhhdmUKICAgIHplcm8gcm93cyBpbiB0aGlzIHZpZXcuICBJZiB0aGUgaW5pdGlhbCBk YXRhIHN5bmNocm9uaXphdGlvbiBvZiBhbnkKICAgIHRhYmxlIGlzIGluIHByb2dyZXNzLCB0aGVy ZSB3aWxsIGJlIGFkZGl0aW9uYWwgd29ya2VycyBmb3IgdGhlIHRhYmxlcwotICAgYmVpbmcgc3lu Y2hyb25pemVkLgorICAgYmVpbmcgc3luY2hyb25pemVkLiBNb3Jlb3ZlciwgaWYgdGhlIHN0cmVh bWluZyB0cmFuc2FjdGlvbiBpcyBhcHBsaWVkIGluCisgICBwYXJhbGxlbCwgdGhlcmUgd2lsbCBi ZSBhZGRpdGlvbmFsIHdvcmtlcnMuCiAgIDwvcGFyYT4KICA8L3NlY3QxPgogCkBAIC0xNjE2LDgg KzE2MjcsMTIgQEAgQ09OVEVYVDogIHByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0 aW9uIG9yaWdpbiAicGdfMTYzOTUiIGR1cmluZyAiSU5TRVIKICAgIHRvIHRoZSBzdWJzY3JpYmVy LCBwbHVzIHNvbWUgcmVzZXJ2ZSBmb3IgdGFibGUgc3luY2hyb25pemF0aW9uLgogICAgPHZhcm5h bWU+bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT4gbXVzdCBiZSBzZXQg dG8gYXQgbGVhc3QKICAgIHRoZSBudW1iZXIgb2Ygc3Vic2NyaXB0aW9ucywgYWdhaW4gcGx1cyBz b21lIHJlc2VydmUgZm9yIHRoZSB0YWJsZQotICAgc3luY2hyb25pemF0aW9uLiAgQWRkaXRpb25h bGx5IHRoZSA8dmFybmFtZT5tYXhfd29ya2VyX3Byb2Nlc3NlczwvdmFybmFtZT4KLSAgIG1heSBu ZWVkIHRvIGJlIGFkanVzdGVkIHRvIGFjY29tbW9kYXRlIGZvciByZXBsaWNhdGlvbiB3b3JrZXJz LCBhdCBsZWFzdAorICAgc3luY2hyb25pemF0aW9uLiBJZiB0aGUgc3Vic2NyaXB0aW9uIHBhcmFt ZXRlciA8bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVyYWw+CisgICBpcyBzZXQgdG8gPGxpdGVyYWw+ cGFyYWxsZWw8L2xpdGVyYWw+LAorICAgPGxpdGVyYWw+bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25f d29ya2VyczwvbGl0ZXJhbD4gc2hvdWxkIGJlIGluY3JlYXNlZAorICAgYWNjb3JkaW5nIHRvIHRo ZSBkZXNpcmVkIG51bWJlciBvZiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiAgQWRkaXRpb25hbGx5 IHRoZQorICAgPHZhcm5hbWU+bWF4X3dvcmtlcl9wcm9jZXNzZXM8L3Zhcm5hbWU+IG1heSBuZWVk IHRvIGJlIGFkanVzdGVkIHRvCisgICBhY2NvbW1vZGF0ZSBmb3IgcmVwbGljYXRpb24gd29ya2Vy cywgYXQgbGVhc3QKICAgICg8dmFybmFtZT5tYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJz PC92YXJuYW1lPgogICAgKyA8bGl0ZXJhbD4xPC9saXRlcmFsPikuICBOb3RlIHRoYXQgc29tZSBl eHRlbnNpb25zIGFuZCBwYXJhbGxlbCBxdWVyaWVzCiAgICBhbHNvIHRha2Ugd29ya2VyIHNsb3Rz IGZyb20gPHZhcm5hbWU+bWF4X3dvcmtlcl9wcm9jZXNzZXM8L3Zhcm5hbWU+LgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dt bAppbmRleCA1ZmRkNDI5Li5jNmEwZTgwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcHJvdG9j b2wuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbApAQCAtMzEwMiw3ICszMTAy LDcgQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAiSURF TlRJRllfU1lTVEVNOyIKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+CiAgICAgICAgUHJv dG9jb2wgdmVyc2lvbi4gQ3VycmVudGx5IHZlcnNpb25zIDxsaXRlcmFsPjE8L2xpdGVyYWw+LCA8 bGl0ZXJhbD4yPC9saXRlcmFsPiwKLSAgICAgICBhbmQgPGxpdGVyYWw+MzwvbGl0ZXJhbD4gYXJl IHN1cHBvcnRlZC4KKyAgICAgICA8bGl0ZXJhbD4zPC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPjQ8 L2xpdGVyYWw+IGFyZSBzdXBwb3J0ZWQuCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KICAg ICAgICBWZXJzaW9uIDxsaXRlcmFsPjI8L2xpdGVyYWw+IGlzIHN1cHBvcnRlZCBvbmx5IGZvciBz ZXJ2ZXIgdmVyc2lvbiAxNApAQCAtMzExMiw2ICszMTEyLDExIEBAIHBzcWwgImRibmFtZT1wb3N0 Z3JlcyByZXBsaWNhdGlvbj1kYXRhYmFzZSIgLWMgIklERU5USUZZX1NZU1RFTTsiCiAgICAgICAg VmVyc2lvbiA8bGl0ZXJhbD4zPC9saXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVy IHZlcnNpb24gMTUKICAgICAgICBhbmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtaW5nIG9m IHR3by1waGFzZSBjb21taXRzLgogICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAg VmVyc2lvbiA8bGl0ZXJhbD40PC9saXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVy IHZlcnNpb24gMTYKKyAgICAgICBhbmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtcyBvZiBs YXJnZSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgdG8KKyAgICAgICBiZSBhcHBsaWVkIGluIHBh cmFsbGVsLgorICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVu dHJ5PgogCkBAIC02ODgyLDYgKzY4ODcsMjggQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxp Y2F0aW9uPWRhdGFiYXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAgICAgICAgPC9wYXJhPgog ICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgICA8dGVybT5JbnQ2NCAoWExvZ1JlY1B0cik8L3Rlcm0+CisgICAgICAg PGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFRoZSBMU04gb2YgdGhlIGFib3J0 LiBUaGlzIGZpZWxkIGlzIGF2YWlsYWJsZSBzaW5jZSBwcm90b2NvbCB2ZXJzaW9uCisgICAgICAg ICA0LgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPkludDY0IChUaW1l c3RhbXBUeik8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAg ICAgIEFib3J0IHRpbWVzdGFtcCBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSB2YWx1ZSBpcyBpbiBu dW1iZXIKKyAgICAgICAgIG9mIG1pY3Jvc2Vjb25kcyBzaW5jZSBQb3N0Z3JlU1FMIGVwb2NoICgy MDAwLTAxLTAxKS4gVGhpcyBmaWVsZCBpcworICAgICAgICAgYXZhaWxhYmxlIHNpbmNlIHByb3Rv Y29sIHZlcnNpb24gNC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L2xpc3RpdGVt PgogICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9zdWJzY3JpcHRpb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlv bi5zZ21sCmluZGV4IGJkMTJlNzEuLjAzZmMwNDcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRl X3N1YnNjcmlwdGlvbi5zZ21sCkBAIC0yMjIsMTMgKzIyMiwyOSBAQCBDUkVBVEUgU1VCU0NSSVBU SU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zdWJzY3JpcHRpb25fbmFtZTwvcmVw bGFjZWFibAogICAgICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAgICAgPHZhcmxpc3RlbnRyeT4K LSAgICAgICAgPHRlcm0+PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFsPiAoPHR5cGU+Ym9vbGVh bjwvdHlwZT4pPC90ZXJtPgorICAgICAgICA8dGVybT48bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVy YWw+ICg8dHlwZT5lbnVtPC90eXBlPik8L3Rlcm0+CiAgICAgICAgIDxsaXN0aXRlbT4KICAgICAg ICAgIDxwYXJhPgogICAgICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBzdHJlYW1p bmcgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zCi0gICAgICAgICAgZm9yIHRoaXMgc3Vic2Ny aXB0aW9uLiAgQnkgZGVmYXVsdCwgYWxsIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGFyZSBmdWxs eSBkZWNvZGVkIG9uIHRoZSBwdWJsaXNoZXIgYW5kIG9ubHkgdGhlbiBzZW50IHRvIHRoZQotICAg ICAgICAgIHN1YnNjcmliZXIgYXMgYSB3aG9sZS4KKyAgICAgICAgICBmb3IgdGhpcyBzdWJzY3Jp cHRpb24uICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD5vZmY8L2xpdGVyYWw+LAorICAg ICAgICAgIG1lYW5pbmcgYWxsIHRyYW5zYWN0aW9ucyBhcmUgZnVsbHkgZGVjb2RlZCBvbiB0aGUg cHVibGlzaGVyIGFuZCBvbmx5CisgICAgICAgICAgdGhlbiBzZW50IHRvIHRoZSBzdWJzY3JpYmVy IGFzIGEgd2hvbGUuCisgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgIDxwYXJhPgorICAgICAg ICAgIElmIHNldCB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIHRoZSBpbmNvbWluZyBjaGFuZ2Vz IGFyZSB3cml0dGVuIHRvCisgICAgICAgICAgdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxp ZWQgb25seSBhZnRlciB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAgICAgICBjb21taXR0ZWQgb24g dGhlIHB1Ymxpc2hlciBhbmQgcmVjZWl2ZWQgYnkgdGhlIHN1YnNjcmliZXIuCisgICAgICAgICA8 L3BhcmE+CisKKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHNldCB0byA8bGl0ZXJhbD5w YXJhbGxlbDwvbGl0ZXJhbD4sIGluY29taW5nIGNoYW5nZXMgYXJlIGRpcmVjdGx5CisgICAgICAg ICAgYXBwbGllZCB2aWEgb25lIG9mIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLCBpZiBhdmFp bGFibGUuIElmIG5vCisgICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGZyZWUgdG8g aGFuZGxlIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgdGhlbgorICAgICAgICAgIHRoZSBjaGFuZ2Vz IGFyZSB3cml0dGVuIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgYXBwbGllZCBhZnRlciB0aGUKKyAg ICAgICAgICB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuIE5vdGUgdGhhdCBpZiBhbiBlcnJvciBo YXBwZW5zIGluIGEKKyAgICAgICAgICBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIHRoZSBmaW5pc2gg TFNOIG9mIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24KKyAgICAgICAgICBtaWdodCBub3QgYmUgcmVw b3J0ZWQgaW4gdGhlIHNlcnZlciBsb2cuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlz dGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMK aW5kZXggODgzZDZjMC4uZTYzNDQ5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwpAQCAt MTcxMiw2ICsxNzEyLDcgQEAgUmVjb3JkVHJhbnNhY3Rpb25BYm9ydChib29sIGlzU3ViWGFjdCkK IAlpbnQJCQluY2hpbGRyZW47CiAJVHJhbnNhY3Rpb25JZCAqY2hpbGRyZW47CiAJVGltZXN0YW1w VHogeGFjdF90aW1lOworCWJvb2wJCXJlcGxvcmlnaW47CiAKIAkvKgogCSAqIElmIHdlIGhhdmVu J3QgYmVlbiBhc3NpZ25lZCBhbiBYSUQsIG5vYm9keSB3aWxsIGNhcmUgd2hldGhlciB3ZSBhYm9y dGVkCkBAIC0xNzQyLDYgKzE3NDMsMTMgQEAgUmVjb3JkVHJhbnNhY3Rpb25BYm9ydChib29sIGlz U3ViWGFjdCkKIAkJZWxvZyhQQU5JQywgImNhbm5vdCBhYm9ydCB0cmFuc2FjdGlvbiAldSwgaXQg d2FzIGFscmVhZHkgY29tbWl0dGVkIiwKIAkJCSB4aWQpOwogCisJLyoKKwkgKiBBcmUgd2UgdXNp bmcgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbnMgZmVhdHVyZT8gIE9yLCBpbiBvdGhlciB3b3Jkcywg YXJlCisJICogd2UgcmVwbGF5aW5nIHJlbW90ZSBhY3Rpb25zPworCSAqLworCXJlcGxvcmlnaW4g PSAocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiAhPSBJbnZhbGlkUmVwT3JpZ2luSWQgJiYKKwkJ CQkgIHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gIT0gRG9Ob3RSZXBsaWNhdGVJZCk7CisKIAkv KiBGZXRjaCB0aGUgZGF0YSB3ZSBuZWVkIGZvciB0aGUgYWJvcnQgcmVjb3JkICovCiAJbnJlbHMg PSBzbWdyR2V0UGVuZGluZ0RlbGV0ZXMoZmFsc2UsICZyZWxzKTsKIAluY2hpbGRyZW4gPSB4YWN0 R2V0Q29tbWl0dGVkQ2hpbGRyZW4oJmNoaWxkcmVuKTsKQEAgLTE3NjUsNiArMTc3MywxMSBAQCBS ZWNvcmRUcmFuc2FjdGlvbkFib3J0KGJvb2wgaXNTdWJYYWN0KQogCQkJCQkgICBNeVhhY3RGbGFn cywgSW52YWxpZFRyYW5zYWN0aW9uSWQsCiAJCQkJCSAgIE5VTEwpOwogCisJaWYgKHJlcGxvcmln aW4pCisJCS8qIE1vdmUgTFNOcyBmb3J3YXJkIGZvciB0aGlzIHJlcGxpY2F0aW9uIG9yaWdpbiAq LworCQlyZXBsb3JpZ2luX3Nlc3Npb25fYWR2YW5jZShyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2lu X2xzbiwKKwkJCQkJCQkJICAgWGFjdExhc3RSZWNFbmQpOworCiAJLyoKIAkgKiBSZXBvcnQgdGhl IGxhdGVzdCBhc3luYyBhYm9ydCBMU04sIHNvIHRoYXQgdGhlIFdBTCB3cml0ZXIga25vd3MgdG8K IAkgKiBmbHVzaCB0aGlzIGFib3J0LiBUaGVyZSdzIG5vdGhpbmcgdG8gYmUgZ2FpbmVkIGJ5IGRl bGF5aW5nIHRoaXMsIHNpbmNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZWZp bmUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RlZmluZS5jCmluZGV4IDg2Yjg5MDcuLjExMzEy ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RlZmluZS5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2RlZmluZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bWF0 aC5oPgogCiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3N1YnNjcmlwdGlvbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgogI2luY2x1 ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV90eXBlLmgiCkBA IC0zNDYsNiArMzQ3LDYzIEBAIGRlZkdldFN0cmluZ0xpc3QoRGVmRWxlbSAqZGVmKQogfQogCiAv KgorICogRXh0cmFjdCB0aGUgc3RyZWFtaW5nIG1vZGUgdmFsdWUgZnJvbSBhIERlZkVsZW0uICBU aGlzIGlzIGxpa2UKKyAqIGRlZkdldEJvb2xlYW4oKSBidXQgYWxzbyBhY2NlcHRzIHRoZSBzcGVj aWFsIHZhbHVlIG9mICJwYXJhbGxlbCIuCisgKi8KK2NoYXIKK2RlZkdldFN0cmVhbWluZ01vZGUo RGVmRWxlbSAqZGVmKQoreworCS8qCisJICogSWYgbm8gcGFyYW1ldGVyIHZhbHVlIGdpdmVuLCBh c3N1bWUgInRydWUiIGlzIG1lYW50LgorCSAqLworCWlmIChkZWYtPmFyZyA9PSBOVUxMKQorCQly ZXR1cm4gU1VCU1RSRUFNX09OOworCisJLyoKKwkgKiBBbGxvdyAwLCAxLCAiZmFsc2UiLCAidHJ1 ZSIsICJvZmYiLCAib24iIG9yICJwYXJhbGxlbCIuCisJICovCisJc3dpdGNoIChub2RlVGFnKGRl Zi0+YXJnKSkKKwl7CisJCWNhc2UgVF9JbnRlZ2VyOgorCQkJc3dpdGNoIChpbnRWYWwoZGVmLT5h cmcpKQorCQkJeworCQkJCWNhc2UgMDoKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PRkY7CisJCQkJ Y2FzZSAxOgorCQkJCQlyZXR1cm4gU1VCU1RSRUFNX09OOworCQkJCWRlZmF1bHQ6CisJCQkJCS8q IG90aGVyd2lzZSwgZXJyb3Igb3V0IGJlbG93ICovCisJCQkJCWJyZWFrOworCQkJfQorCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQl7CisJCQkJY2hhcgkgICAqc3ZhbCA9IGRlZkdldFN0cmluZyhk ZWYpOworCisJCQkJLyoKKwkJCQkgKiBUaGUgc2V0IG9mIHN0cmluZ3MgYWNjZXB0ZWQgaGVyZSBz aG91bGQgbWF0Y2ggdXAgd2l0aCB0aGUKKwkJCQkgKiBncmFtbWFyJ3Mgb3B0X2Jvb2xlYW5fb3Jf c3RyaW5nIHByb2R1Y3Rpb24uCisJCQkJICovCisJCQkJaWYgKHBnX3N0cmNhc2VjbXAoc3ZhbCwg ImZhbHNlIikgPT0gMCB8fAorCQkJCQlwZ19zdHJjYXNlY21wKHN2YWwsICJvZmYiKSA9PSAwKQor CQkJCQlyZXR1cm4gU1VCU1RSRUFNX09GRjsKKwkJCQlpZiAocGdfc3RyY2FzZWNtcChzdmFsLCAi dHJ1ZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib24iKSA9PSAwKQorCQkJ CQlyZXR1cm4gU1VCU1RSRUFNX09OOworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJwYXJh bGxlbCIpID09IDApCisJCQkJCXJldHVybiBTVUJTVFJFQU1fUEFSQUxMRUw7CisJCQl9CisJCQli cmVhazsKKwl9CisKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJIGVycm1zZygiJXMgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yIFwicGFy YWxsZWxcIiIsCisJCQkJCWRlZi0+ZGVmbmFtZSkpKTsKKwlyZXR1cm4gU1VCU1RSRUFNX09GRjsJ CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KK30KKworLyoKICAqIFJhaXNlIGFuIGVycm9yIGFi b3V0IGEgY29uZmxpY3RpbmcgRGVmRWxlbS4KICAqLwogdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv c3Vic2NyaXB0aW9uY21kcy5jCmluZGV4IGYwY2VjMmEuLjVjNThmZTUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKQEAgLTg0LDcgKzg0LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgU3ViT3B0cwogCWJvb2wJCWNvcHlfZGF0YTsKIAlib29sCQlyZWZyZXNoOwogCWJvb2wJCWJp bmFyeTsKLQlib29sCQlzdHJlYW1pbmc7CisJY2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCXR3b3Bo YXNlOwogCWJvb2wJCWRpc2FibGVvbmVycjsKIAljaGFyCSAgICpvcmlnaW47CkBAIC0xMzgsNyAr MTM4LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpzdG10X29wdGlvbnMsCiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfQklO QVJZKSkKIAkJb3B0cy0+YmluYXJ5ID0gZmFsc2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRz LCBTVUJPUFRfU1RSRUFNSU5HKSkKLQkJb3B0cy0+c3RyZWFtaW5nID0gZmFsc2U7CisJCW9wdHMt PnN0cmVhbWluZyA9IFNVQlNUUkVBTV9PRkY7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBT VUJPUFRfVFdPUEhBU0VfQ09NTUlUKSkKIAkJb3B0cy0+dHdvcGhhc2UgPSBmYWxzZTsKIAlpZiAo SXNTZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9ESVNBQkxFX09OX0VSUikpCkBAIC0yNDEsNyAr MjQxLDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpzdG10X29wdGlvbnMsCiAJCQkJZXJyb3JDb25mbGljdGluZ0RlZkVsZW0oZGVmZWwsIHBz dGF0ZSk7CiAKIAkJCW9wdHMtPnNwZWNpZmllZF9vcHRzIHw9IFNVQk9QVF9TVFJFQU1JTkc7Ci0J CQlvcHRzLT5zdHJlYW1pbmcgPSBkZWZHZXRCb29sZWFuKGRlZmVsKTsKKwkJCW9wdHMtPnN0cmVh bWluZyA9IGRlZkdldFN0cmVhbWluZ01vZGUoZGVmZWwpOwogCQl9CiAJCWVsc2UgaWYgKHN0cmNt cChkZWZlbC0+ZGVmbmFtZSwgInR3b19waGFzZSIpID09IDApCiAJCXsKQEAgLTYyOSw3ICs2Mjks NyBAQCBDcmVhdGVTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTdWJzY3Jp cHRpb25TdG10ICpzdG10LAogCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJvd25lciAt IDFdID0gT2JqZWN0SWRHZXREYXR1bShvd25lcik7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0 aW9uX3N1YmVuYWJsZWQgLSAxXSA9IEJvb2xHZXREYXR1bShvcHRzLmVuYWJsZWQpOwogCXZhbHVl c1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJiaW5hcnkgLSAxXSA9IEJvb2xHZXREYXR1bShvcHRz LmJpbmFyeSk7Ci0JdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0g Qm9vbEdldERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRp b25fc3Vic3RyZWFtIC0gMV0gPSBDaGFyR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOwogCXZhbHVl c1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJ0d29waGFzZXN0YXRlIC0gMV0gPQogCQlDaGFyR2V0 RGF0dW0ob3B0cy50d29waGFzZSA/CiAJCQkJCSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX1BF TkRJTkcgOgpAQCAtMTA5OCw3ICsxMDk4LDcgQEAgQWx0ZXJTdWJzY3JpcHRpb24oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJCQkJaWYgKElzU2V0KG9w dHMuc3BlY2lmaWVkX29wdHMsIFNVQk9QVF9TVFJFQU1JTkcpKQogCQkJCXsKIAkJCQkJdmFsdWVz W0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0KLQkJCQkJCUJvb2xHZXREYXR1 bShvcHRzLnN0cmVhbWluZyk7CisJCQkJCQlDaGFyR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOwog CQkJCQlyZXBsYWNlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9IHRydWU7 CiAJCQkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMgYi9zcmMvYmFj a2VuZC9saWJwcS9wcW1xLmMKaW5kZXggNGQwNDE1ZS4uNjM5ODQ1ZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbGlicHEvcHFtcS5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYwpAQCAt MTMsMTEgKzEzLDEzIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNj ZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJw cS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgImxpYnBxL3BxbXEuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fs d29ya2VyLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCiAKQEAgLTE2Miw5ICsxNjQsMTkgQEAgbXFfcHV0bWVzc2FnZShjaGFyIG1zZ3R5 cGUsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4pCiAJCXJlc3VsdCA9IHNobV9tcV9zZW5kdihw cV9tcV9oYW5kbGUsIGlvdiwgMiwgdHJ1ZSwgdHJ1ZSk7CiAKIAkJaWYgKHBxX21xX3BhcmFsbGVs X2xlYWRlcl9waWQgIT0gMCkKLQkJCVNlbmRQcm9jU2lnbmFsKHBxX21xX3BhcmFsbGVsX2xlYWRl cl9waWQsCi0JCQkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0UsCi0JCQkJCQkgICBwcV9t cV9wYXJhbGxlbF9sZWFkZXJfYmFja2VuZF9pZCk7CisJCXsKKwkJCWlmIChJc0xvZ2ljYWxQYXJh bGxlbEFwcGx5V29ya2VyKCkpCisJCQkJU2VuZFByb2NTaWduYWwocHFfbXFfcGFyYWxsZWxfbGVh ZGVyX3BpZCwKKwkJCQkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UsCisJCQkJ CQkJICAgcHFfbXFfcGFyYWxsZWxfbGVhZGVyX2JhY2tlbmRfaWQpOworCQkJZWxzZQorCQkJewor CQkJCUFzc2VydChJc1BhcmFsbGVsV29ya2VyKCkpOworCQkJCVNlbmRQcm9jU2lnbmFsKHBxX21x X3BhcmFsbGVsX2xlYWRlcl9waWQsCisJCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9NRVNTQUdF LAorCQkJCQkJCSAgIHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5kX2lkKTsKKwkJCX0KKwkJ fQogCiAJCWlmIChyZXN1bHQgIT0gU0hNX01RX1dPVUxEX0JMT0NLKQogCQkJYnJlYWs7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggMGQ3MmRlMi4uMmRmYTlhYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYmd3b3JrZXIuYwpAQCAtMTI4LDYgKzEyOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QK IAl9LAogCXsKIAkJIkFwcGx5V29ya2VyTWFpbiIsIEFwcGx5V29ya2VyTWFpbgorCX0sCisJewor CQkiUGFyYWxsZWxBcHBseVdvcmtlck1haW4iLCBQYXJhbGxlbEFwcGx5V29ya2VyTWFpbgogCX0K IH07CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2 ZXIvbGlicHF3YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxy ZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKaW5kZXggN2Y2OTdiMC4uMjI1ZGE4MSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZlci9saWJwcXdhbHJl Y2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZlci9s aWJwcXdhbHJlY2VpdmVyLmMKQEAgLTQ0Myw5ICs0NDMsOSBAQCBsaWJwcXJjdl9zdGFydHN0cmVh bWluZyhXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiAJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgInBy b3RvX3ZlcnNpb24gJyV1JyIsCiAJCQkJCQkgb3B0aW9ucy0+cHJvdG8ubG9naWNhbC5wcm90b192 ZXJzaW9uKTsKIAotCQlpZiAob3B0aW9ucy0+cHJvdG8ubG9naWNhbC5zdHJlYW1pbmcgJiYKLQkJ CVBRc2VydmVyVmVyc2lvbihjb25uLT5zdHJlYW1Db25uKSA+PSAxNDAwMDApCi0JCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsIHN0cmVhbWluZyAnb24nIik7CisJCWlmIChvcHRpb25z LT5wcm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIpCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQs ICIsIHN0cmVhbWluZyAnJXMnIiwKKwkJCQkJCQkgb3B0aW9ucy0+cHJvdG8ubG9naWNhbC5zdHJl YW1pbmdfc3RyKTsKIAogCQlpZiAob3B0aW9ucy0+cHJvdG8ubG9naWNhbC50d29waGFzZSAmJgog CQkJUFFzZXJ2ZXJWZXJzaW9uKGNvbm4tPnN0cmVhbUNvbm4pID49IDE1MDAwMCkKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCmluZGV4IGM0ZTJmZGUuLjJkYzI1ZTMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBA QCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBvdmVycmlkZSBD UFBGTEFHUyA6PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQogCiBPQkpTID0gXAorCWFwcGx5cGFy YWxsZWx3b3JrZXIubyBcCiAJZGVjb2RlLm8gXAogCWxhdW5jaGVyLm8gXAogCWxvZ2ljYWwubyBc CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxs ZWx3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxl bHdvcmtlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OWZiNjIKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFy YWxsZWx3b3JrZXIuYwpAQCAtMCwwICsxLDEzODIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICog YXBwbHlwYXJhbGxlbHdvcmtlci5jCisgKiAgICAgU3VwcG9ydCByb3V0aW5lcyBmb3IgYXBwbHlp bmcgeGFjdCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFy YWxsZWx3b3JrZXIuYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0aGF0IGFy ZSBpbnRlbmRlZCB0byBzdXBwb3J0IHNldHRpbmcgdXAsIHVzaW5nLAorICogYW5kIHRlYXJpbmcg ZG93biBhIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvLgorICoKKyAqIFJlZmVyIHRvIHRoZSBjb21t ZW50cyBpbiB0aGUgZmlsZSBoZWFkZXIgb2YgbG9naWNhbC93b3JrZXIuYyB0byBzZWUgbW9yZQor ICogaW5mb3JtYXRpb24gYWJvdXQgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImxp YnBxL3BxZm9ybWF0LmgiCisjaW5jbHVkZSAibGlicHEvcHFtcS5oIgorI2luY2x1ZGUgIm1iL3Bn X3djaGFyLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRl cnJ1cHQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v b3JpZ2luLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5o IgorI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5 LmgiCisjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL2ludmFsLmgi CisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5o IgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKyNkZWZpbmUgUEdfTE9HSUNBTF9BUFBM WV9TSE1fTUFHSUMgMHg3ODdjYTA2NworCisvKgorICogRFNNIGtleXMgZm9yIHBhcmFsbGVsIGFw cGx5IHdvcmtlci4gIFVubGlrZSBvdGhlciBwYXJhbGxlbCBleGVjdXRpb24gY29kZSwKKyAqIHNp bmNlIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgRFNNIGtleXMgY29uZmxpY3Rpbmcgd2l0 aCBwbGFuX25vZGVfaWQgd2UKKyAqIGNhbiB1c2Ugc21hbGwgaW50ZWdlcnMuCisgKi8KKyNkZWZp bmUgUEFSQUxMRUxfQVBQTFlfS0VZX1NIQVJFRAkJMQorI2RlZmluZSBQQVJBTExFTF9BUFBMWV9L RVlfTVEJCQkyCisjZGVmaW5lIFBBUkFMTEVMX0FQUExZX0tFWV9FUlJPUl9RVUVVRQkzCisKKy8q IFF1ZXVlIHNpemUgb2YgRFNNLCAxNiBNQiBmb3Igbm93LiAqLworI2RlZmluZSBEU01fUVVFVUVf U0laRQkoMTYgKiAxMDI0ICogMTAyNCkKKworLyoKKyAqIEVycm9yIHF1ZXVlIHNpemUgb2YgRFNN LiBJdCBpcyBkZXNpcmFibGUgdG8gbWFrZSBpdCBsYXJnZSBlbm91Z2ggdGhhdCBhCisgKiB0eXBp Y2FsIEVycm9yUmVzcG9uc2UgY2FuIGJlIHNlbnQgd2l0aG91dCBibG9ja2luZy4gIFRoYXQgd2F5 LCBhIHdvcmtlciB0aGF0CisgKiBlcnJvcnMgb3V0IGNhbiB3cml0ZSB0aGUgd2hvbGUgbWVzc2Fn ZSBpbnRvIHRoZSBxdWV1ZSBhbmQgdGVybWluYXRlIHdpdGhvdXQKKyAqIHdhaXRpbmcgZm9yIHRo ZSB1c2VyIGJhY2tlbmQuCisgKi8KKyNkZWZpbmUgRFNNX0VSUk9SX1FVRVVFX1NJWkUJCQkoMTYg KiAxMDI0KQorCisvKgorICogVGhlcmUgYXJlIHRocmVlIGZpZWxkcyBpbiBlYWNoIG1lc3NhZ2Ug cmVjZWl2ZWQgYnkgdGhlIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXI6IHN0YXJ0X2xzbiwgZW5k X2xzbiBhbmQgc2VuZF90aW1lLiBCZWNhdXNlIHdlIGhhdmUgdXBkYXRlZCB0aGVzZQorICogc3Rh dGlzdGljcyBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciwgd2UgY2FuIGlnbm9yZSB0aGVzZSBm aWVsZHMgaW4gdGhlCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKHNlZSBmdW5jdGlvbiBMb2dp Y2FsUmVwQXBwbHlMb29wKS4KKyAqLworI2RlZmluZSBTSVpFX1NUQVRTX01FU1NBR0UgKDIgKiBz aXplb2YoWExvZ1JlY1B0cikgKyBzaXplb2YoVGltZXN0YW1wVHopKQorCisvKgorICogSGFzaCB0 YWJsZSBlbnRyeSB0byBtYXAgeGlkIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgc3RhdGUu CisgKi8KK3R5cGVkZWYgc3RydWN0IFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeQoreworCVRyYW5z YWN0aW9uSWQgeGlkOwkJCS8qIEhhc2gga2V5IC0tIG11c3QgYmUgZmlyc3QgKi8KKwlQYXJhbGxl bEFwcGx5V29ya2VySW5mbyAqd2luZm87Cit9IFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeTsKKwor LyogUGFyYWxsZWwgYXBwbHkgd29ya2VycyBoYXNoIHRhYmxlIChpbml0aWFsaXplZCBvbiBmaXJz dCB1c2UpLiAqLworc3RhdGljIEhUQUIgKlBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCA9IE5VTEw7 CisKKy8qCisgKiBBIGxpc3QgdG8gbWFpbnRhaW4gdGhlIGFjdGl2ZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXJzLiBUaGUgaW5mb3JtYXRpb24gZm9yCisgKiB0aGUgbmV3IHdvcmtlciBpcyBhZGRlZCB0 byB0aGUgbGlzdCBhZnRlciBzdWNjZXNzZnVsbHkgbGF1bmNoaW5nIGl0LiBUaGUKKyAqIGxpc3Qg ZW50cnkgaXMgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbiBpZiB0aGVyZSBh cmUgYWxyZWFkeQorICogZW5vdWdoIHdvcmtlcnMgaW4gdGhlIHdvcmtlciBwb29sLiBGb3IgbW9y ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29ya2VyCisgKiBwb29sLCBzZWUgY29tbWVudHMgYXRv cCB3b3JrZXIuYy4gV2UgYWxzbyByZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGxpc3QgaWYKKyAq IHRoZSB3b3JrZXIgaXMgZXhpdGVkIGR1ZSB0byBzb21lIGVycm9yLgorICovCitzdGF0aWMgTGlz dCAqUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0ID0gTklMOworCitzdGF0aWMgTGlzdCAqUGFyYWxs ZWxBcHBseUxvY2tpZHMgPSBOSUw7CisKKy8qCisgKiBJbmZvcm1hdGlvbiBzaGFyZWQgYmV0d2Vl biBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKi8KK1Bh cmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKk15UGFyYWxsZWxTaGFyZWQgPSBOVUxMOworCisvKgor ICogSXMgdGhlcmUgYSBtZXNzYWdlIHBlbmRpbmcgaW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdo aWNoIHdlIG5lZWQgdG8KKyAqIHJlY2VpdmU/CisgKi8KK3ZvbGF0aWxlIHNpZ19hdG9taWNfdCBQ YXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcgPSBmYWxzZTsKKworLyoKKyAqIENhY2hlIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGFwcGx5aW5nIHRo ZQorICogY3VycmVudCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uIEl0IGlzIHVzZWQgdG8gc2F2ZSB0 aGUgY29zdCBvZiBzZWFyY2hpbmcgdGhlCisgKiBoYXNoIHRhYmxlIHdoZW4gYXBwbHlpbmcgdGhl IGNoYW5nZXMgYmV0d2VlbiBTVFJFQU1fU1RBUlQgYW5kIFNUUkVBTV9TVE9QLgorICovCitQYXJh bGxlbEFwcGx5V29ya2VySW5mbyAqc3RyZWFtX2FwcGx5X3dvcmtlciA9IE5VTEw7CisKKy8qIEEg bGlzdCB0byBtYWludGFpbiBzdWJ0cmFuc2FjdGlvbnMsIGlmIGFueS4gKi8KK0xpc3QJICAgKnN1 YnhhY3RsaXN0ID0gTklMOworCitzdGF0aWMgYm9vbCBwYXJhbGxlbF9hcHBseV9jYW5fc3RhcnQo VHJhbnNhY3Rpb25JZCB4aWQpOworc3RhdGljIGJvb2wgcGFyYWxsZWxfYXBwbHlfc2V0dXBfZHNt KFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyk7CitzdGF0aWMgUGFyYWxsZWxBcHBseVdv cmtlckluZm8gKnBhcmFsbGVsX2FwcGx5X3NldHVwX3dvcmtlcih2b2lkKTsKK3N0YXRpYyBQYXJh bGxlbFRyYW5zU3RhdGUgcGFyYWxsZWxfYXBwbHlfZ2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBs eVdvcmtlclNoYXJlZCAqd3NoYXJlZCk7CitzdGF0aWMgdm9pZCBwYXJhbGxlbF9hcHBseV9mcmVl X3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyk7CitzdGF0aWMgdm9p ZCBwYXJhbGxlbF9hcHBseV93YWl0X2Zvcl9pbl94YWN0KFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFy ZWQgKndzaGFyZWQsCisJCQkJCQkJCQkJCVBhcmFsbGVsVHJhbnNTdGF0ZSB4YWN0X3N0YXRlKTsK Ky8qCisgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgT0sgdG8gc3RhcnQgYSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wKK3BhcmFsbGVsX2Fw cGx5X2Nhbl9zdGFydChUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlpZiAoIVRyYW5zYWN0aW9uSWRJ c1ZhbGlkKHhpZCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRG9uJ3Qgc3RhcnQgYSBu ZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIHRoZSBzdWJzY3JpcHRpb24gaXMgbm90IHVzaW5n CisJICogcGFyYWxsZWwgc3RyZWFtaW5nIG1vZGUsIG9yIGlmIHRoZSBwdWJsaXNoZXIgZG9lcyBu b3Qgc3VwcG9ydCBwYXJhbGxlbAorCSAqIGFwcGx5LgorCSAqLworCWlmICghTXlMb2dpY2FsUmVw V29ya2VyLT5wYXJhbGxlbF9hcHBseSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogT25seSBsZWFk ZXIgYXBwbHkgd29ya2VycyBjYW4gc3RhcnQgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gKi8KKwlp ZiAoIWFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkg KiBEb24ndCBzdGFydCBhIG5ldyBwYXJhbGxlbCB3b3JrZXIgaWYgdXNlciBoYXMgc2V0IHNraXBs c24gYXMgaXQncworCSAqIHBvc3NpYmxlIHRoYXQgdXNlciB3YW50IHRvIHNraXAgdGhlIHN0cmVh bWluZyB0cmFuc2FjdGlvbi4gRm9yCisJICogc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCB3ZSBuZWVk IHRvIHNwaWxsIHRoZSB0cmFuc2FjdGlvbiB0byBkaXNrIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZ2V0 IHRoZSBsYXN0IExTTiBvZiB0aGUgdHJhbnNhY3Rpb24gdG8ganVkZ2Ugd2hldGhlciB0byBza2lw CisJICogYmVmb3JlIHN0YXJ0aW5nIHRvIGFwcGx5IHRoZSBjaGFuZ2UuCisJICovCisJaWYgKCFY TG9nUmVjUHRySXNJbnZhbGlkKE15U3Vic2NyaXB0aW9uLT5za2lwbHNuKSkKKwkJcmV0dXJuIGZh bHNlOworCisJaWYgKHN3aXRjaGluZ190b19zZXJpYWxpemUpCisJCXJldHVybiBmYWxzZTsKKwor CS8qCisJICogRm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgdGhhdCBhcmUgYmVpbmcgYXBwbGll ZCB1c2luZyBhIHBhcmFsbGVsCisJICogYXBwbHkgd29ya2VyLCB3ZSBjYW5ub3QgZGVjaWRlIHdo ZXRoZXIgdG8gYXBwbHkgdGhlIGNoYW5nZSBmb3IgYQorCSAqIHJlbGF0aW9uIHRoYXQgaXMgbm90 IGluIHRoZSBSRUFEWSBzdGF0ZSAoc2VlCisJICogc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3Jl bCkgYXMgd2Ugd29uJ3Qga25vdyByZW1vdGVfZmluYWxfbHNuIGJ5IHRoYXQKKwkgKiB0aW1lLiBT bywgd2UgZG9uJ3Qgc3RhcnQgdGhlIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaW4gdGhpcyBj YXNlLgorCSAqLworCWlmICghQWxsVGFibGVzeW5jc1JlYWR5KCkpCisJCXJldHVybiBmYWxzZTsK KworCXJldHVybiB0cnVlOworfQorCisvKgorICogU3RhcnQgYSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzcGVjaWZpZWQgeGlkLgorICoKKyAqIElmIGEg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGZvdW5kIGJ1dCBub3QgaW4gdXNlIHRoZW4gcmUtdXNl IGl0LCBvdGhlcndpc2UKKyAqIHN0YXJ0IGEgZnJlc2ggb25lLiBDYWNoZSB0aGUgd29ya2VyIGlu Zm9ybWF0aW9uIGluIFBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaAorICoga2V5ZWQgYnkgdGhlIHNw ZWNpZmllZCB4aWQuCisgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3N0YXJ0X3dvcmtlcihUcmFu c2FjdGlvbklkIHhpZCkKK3sKKwlib29sCQlmb3VuZDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlQYXJh bGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8gPSBOVUxMOworCVBhcmFsbGVsQXBwbHlXb3JrZXJF bnRyeSAqZW50cnk7CisKKwlpZiAoIXBhcmFsbGVsX2FwcGx5X2Nhbl9zdGFydCh4aWQpKQorCQly ZXR1cm47CisKKwkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUgYXBwbHkgd29ya2Vy cyBoYXNodGFibGUuICovCisJaWYgKFBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCA9PSBOVUxMKQor CXsKKwkJSEFTSENUTAkJY3RsOworCisJCU1lbVNldCgmY3RsLCAwLCBzaXplb2YoY3RsKSk7CisJ CWN0bC5rZXlzaXplID0gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOworCQljdGwuZW50cnlzaXplID0g c2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeSk7CisJCWN0bC5oY3h0ID0gQXBwbHlDb250 ZXh0OworCisJCVBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCA9IGhhc2hfY3JlYXRlKCJsb2dpY2Fs IGFwcGx5IHdvcmtlcnMgaGFzaCIsCisJCQkJCQkJCQkJCSAgIDE2LCAmY3RsLAorCQkJCQkJCQkJ CQkgICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTIHwgSEFTSF9DT05URVhUKTsKKwl9CisKKwkvKiBU cnkgdG8gZ2V0IGEgZnJlZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCisJZm9yZWFjaChsYywg UGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0KQorCXsKKwkJUGFyYWxsZWxUcmFuc1N0YXRlIHhhY3Rf c3RhdGU7CisJCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp0bXBfd2luZm87CisKKwkJdG1wX3dp bmZvID0gKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICopIGxmaXJzdChsYyk7CisKKwkJaWYgKCF0 bXBfd2luZm8tPmluX3VzZSkKKwkJeworCQkJd2luZm8gPSB0bXBfd2luZm87CisJCQlicmVhazsK KwkJfQorCisJCS8qIENoZWNrIGlmIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGF0IHdvcmtlciBoYXMg YmVlbiBmaW5pc2hlZC4gKi8KKwkJeGFjdF9zdGF0ZSA9IHBhcmFsbGVsX2FwcGx5X2dldF94YWN0 X3N0YXRlKHRtcF93aW5mby0+c2hhcmVkKTsKKwkJaWYgKHhhY3Rfc3RhdGUgPT0gUEFSQUxMRUxf VFJBTlNfRklOSVNIRUQpCisJCXsKKwkJCXBhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyKHRtcF93 aW5mbywgeGlkLCBmYWxzZSk7CisKKwkJCXRtcF93aW5mby0+aW5fdXNlID0gZmFsc2U7CisJCQl3 aW5mbyA9IHRtcF93aW5mbzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHdpbmZvID09IE5V TEwpCisJeworCQkvKiBUcnkgdG8gc3RhcnQgYSBuZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAq LworCQl3aW5mbyA9IHBhcmFsbGVsX2FwcGx5X3NldHVwX3dvcmtlcigpOworCisJCWlmICh3aW5m byA9PSBOVUxMKQorCQkJcmV0dXJuOworCX0KKworCS8qIENyZWF0ZSBlbnRyeSBmb3IgcmVxdWVz dGVkIHRyYW5zYWN0aW9uLiAqLworCWVudHJ5ID0gaGFzaF9zZWFyY2goUGFyYWxsZWxBcHBseVdv cmtlcnNIYXNoLCAmeGlkLCBIQVNIX0VOVEVSLCAmZm91bmQpOworCWlmIChmb3VuZCkKKwkJZWxv ZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVwdGVkIik7CisKKwkvKgorCSAqIFNldCB0aGUgeGFj dF9zdGF0ZSBmbGFnIGluIHRoZSBsZWFkZXIgaW5zdGVhZCBvZiB0aGUKKwkgKiBwYXJhbGxlbCBh cHBseSB3b3JrZXIgdG8gYXZvaWQgdGhlIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBsZWFkZXIg aGFzCisJICogYWxyZWFkeSBzdGFydGVkIHdhaXRpbmcgZm9yIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgdG8gZmluaXNoCisJICogcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gd2hpbGUgdGhl IGNoaWxkIHByb2Nlc3MgaGFzIG5vdCB5ZXQKKwkgKiBwcm9jZXNzZWQgdGhlIGZpcnN0IFNUUkVB TV9TVEFSVCBhbmQgaGFzIG5vdCBzZXQgdGhlCisJICogeGFjdF9zdGF0ZSB0byB0cnVlLgorCSAq LworCVNwaW5Mb2NrQWNxdWlyZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCXdpbmZvLT5zaGFy ZWQtPnhhY3Rfc3RhdGUgPSBQQVJBTExFTF9UUkFOU19VTktOT1dOOworCXdpbmZvLT5zaGFyZWQt PnhpZCA9IHhpZDsKKwl3aW5mby0+c2hhcmVkLT5maWxlc2V0X3ZhbGlkID0gZmFsc2U7CisJd2lu Zm8tPnNoYXJlZC0+cGFydGlhbF9zZW50X21lc3NhZ2UgPSBmYWxzZTsKKwlTcGluTG9ja1JlbGVh c2UoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKworCXdpbmZvLT5pbl91c2UgPSB0cnVlOworCXdp bmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IGZhbHNlOworCWVudHJ5LT53aW5mbyA9IHdpbmZvOwor CWVudHJ5LT54aWQgPSB4aWQ7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBhc3NpZ25lZCB3b3JrZXIg Zm9yIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiwgaWYgYW55LgorICovCitQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqCitwYXJhbGxlbF9hcHBseV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkK K3sKKwlib29sCQlmb3VuZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkgKmVudHJ5OworCisJ aWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChQ YXJhbGxlbEFwcGx5V29ya2Vyc0hhc2ggPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBS ZXR1cm4gdGhlIGNhY2hlZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaWYgdmFsaWQuICovCisJaWYg KHN0cmVhbV9hcHBseV93b3JrZXIgIT0gTlVMTCkKKwkJcmV0dXJuIHN0cmVhbV9hcHBseV93b3Jr ZXI7CisKKwkvKgorCSAqIEZpbmQgZW50cnkgZm9yIHJlcXVlc3RlZCB0cmFuc2FjdGlvbi4KKwkg Ki8KKwllbnRyeSA9IGhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwg SEFTSF9GSU5ELCAmZm91bmQpOworCWlmIChmb3VuZCkKKwl7CisJCUFzc2VydChlbnRyeS0+d2lu Zm8tPmluX3VzZSk7CisKKwkJcmV0dXJuIGVudHJ5LT53aW5mbzsKKwl9CisKKwlyZXR1cm4gTlVM TDsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGVudHJ5IGZy b20gdGhlIGhhc2ggdGFibGUuIFN0b3AgdGhlIHdvcmtlcgorICogaWYgc3RvcF93b3JrZXIgaXMg dHJ1ZSBhbmQgdGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29sLiBJZgorICogc3Rv cF93b3JrZXIgaXMgZmFsc2UsIHNlbmQgYWxsIHBlbmRpbmcgbWVzc2FnZXMgdG8gY2xlYW51cCB0 aGUgbWVtb3J5IHF1ZXVlLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3 b3JrZXIgcG9vbCwgc2VlIGNvbW1lbnRzIGF0b3Agd29ya2VyLmMuCisgKi8KK3ZvaWQKK3BhcmFs bGVsX2FwcGx5X2ZyZWVfd29ya2VyKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgVHJh bnNhY3Rpb25JZCB4aWQsCisJCQkJCQkgICBib29sIHN0b3Bfd29ya2VyKQoreworCWludAkJCW5h cHBseXdvcmtlcnM7CisKKwlBc3NlcnQoIWFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKTsKKwor CS8qCisJICogRG9uJ3QgZnJlZSB0aGUgd29ya2VyIGlmIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUg d29ya2VyIGlzIHN0aWxsIGluCisJICogcHJvZ3Jlc3MuIFRoaXMgY291bGQgaGFwcGVuZCBhcyB3 ZSBkb24ndCB3YWl0IGZvciB0cmFuc2FjdGlvbiByb2xsYmFjaworCSAqIHRvIGZpbmlzaC4KKwkg Ki8KKwlpZiAocGFyYWxsZWxfYXBwbHlfZ2V0X3hhY3Rfc3RhdGUod2luZm8tPnNoYXJlZCkgPCBQ QVJBTExFTF9UUkFOU19GSU5JU0hFRCkKKwkJcmV0dXJuOworCisJaWYgKCFoYXNoX3NlYXJjaChQ YXJhbGxlbEFwcGx5V29ya2Vyc0hhc2gsICZ4aWQsIEhBU0hfUkVNT1ZFLCBOVUxMKSkKKwkJZWxv ZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVwdGVkIik7CisKKwlMV0xvY2tBY3F1aXJlKExvZ2lj YWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOworCW5hcHBseXdvcmtlcnMgPSBsb2dpY2FscmVw X3BhcmFsbGVsX2FwcGx5X3dvcmtlcl9jb3VudChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkKTsK KwlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKKworCXdpbmZvLT5pbl91c2Ug PSBmYWxzZTsKKwl3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSBmYWxzZTsKKworCS8qIEFyZSB0 aGVyZSBlbm91Z2ggd29ya2VycyBpbiB0aGUgcG9vbD8gKi8KKwlpZiAoc3RvcF93b3JrZXIgJiYK KwkJbmFwcGx5d29ya2VycyA+IChtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2Ny aXB0aW9uIC8gMikpCisJeworCQlpbnQJCXNsb3Rfbm87CisJCXVpbnQxNglnZW5lcmF0aW9uOwor CisJCS8qCisJCSAqIERldGFjaCB0aGUgZXJyb3IgcXVldWUgYmVmb3JlIHRlcm1pbmF0aW5nIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKwkJICogdG8gcHJldmVudCB0aGUgbGVhZGVyIGFwcGx5 IHdvcmtlciBmcm9tIHJlY2VpdmluZyB0aGUgd29ya2VyCisJCSAqIHRlcm1pbmF0aW9uIG1lc3Nh Z2Ugd2hpY2ggd2lsbCBjYXVzZSB0aGUgbGVhZGVyIHRvIGV4aXQuCisJCSAqLworCQlzaG1fbXFf ZGV0YWNoKHdpbmZvLT5lcnJvcl9tcV9oYW5kbGUpOworCQl3aW5mby0+ZXJyb3JfbXFfaGFuZGxl ID0gTlVMTDsKKworCQlTcGluTG9ja0FjcXVpcmUoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKwkJ c2xvdF9ubyA9IHdpbmZvLT5zaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX3Nsb3Rfbm87CisJCWdl bmVyYXRpb24gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9nZW5lcmF0aW9uOwor CQlTcGluTG9ja1JlbGVhc2UoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKworCQlsb2dpY2FscmVw X3dvcmtlcl9zdG9wX2J5X3Nsb3Qoc2xvdF9ubywgZ2VuZXJhdGlvbik7CisKKwkJUGFyYWxsZWxB cHBseVdvcmtlcnNMaXN0ID0gbGlzdF9kZWxldGVfcHRyKFBhcmFsbGVsQXBwbHlXb3JrZXJzTGlz dCwKKwkJCQkJCQkJCQkJCSAgIHdpbmZvKTsKKworCQlwYXJhbGxlbF9hcHBseV9mcmVlX3dvcmtl cl9pbmZvKHdpbmZvKTsKKwl9CisJZWxzZSBpZiAod2luZm8tPnBlbmRpbmdfbXNnKQorCXsKKwkJ c2htX21xX3Jlc3VsdCByZXN1bHQ7CisKKwkJd2luZm8tPnNoYXJlZC0+cGFydGlhbF9zZW50X21l c3NhZ2UgPSB0cnVlOworCisJCS8qCisJCSAqIFJlc2VuZCB0aGUgcGVuZGluZyBtZXNzYWdlIHRv IHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0byBjbGVhbnVwIHRoZQorCQkgKiBxdWV1ZS4gTm90ZSB0 aGF0IHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aWxsIGp1c3QgaWdub3JlIHRoaXMgbWVzc2FnZQor CQkgKiBhcyBpdCBoYXMgYWxyZWFkeSBoYW5kbGVkIHRoaXMgbWVzc2FnZSB3aGlsZSBhcHBseWlu ZyBzcG9vbGVkCisJCSAqIG1lc3NhZ2VzLgorCQkgKi8KKwkJcmVzdWx0ID0gc2htX21xX3NlbmQo d2luZm8tPm1xX2hhbmRsZSwgc3RybGVuKHdpbmZvLT5wZW5kaW5nX21zZyksCisJCQkJCQkJIHdp bmZvLT5wZW5kaW5nX21zZywgZmFsc2UsIHRydWUpOworCisJCWlmIChyZXN1bHQgIT0gU0hNX01R X1NVQ0NFU1MpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVD VF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IHNl bmQgZGF0YSB0byBzaGFyZWQtbWVtb3J5IHF1ZXVlIikpKTsKKworCQlwZnJlZSh3aW5mby0+cGVu ZGluZ19tc2cpOworCQl3aW5mby0+cGVuZGluZ19tc2cgPSBOVUxMOworCX0KK30KKworLyogRnJl ZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uLiAqLworc3RhdGljIHZvaWQK K3BhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyX2luZm8oUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvKQoreworCUFzc2VydCh3aW5mbyk7CisKKwlpZiAod2luZm8tPm1xX2hhbmRsZSAhPSBO VUxMKQorCQlzaG1fbXFfZGV0YWNoKHdpbmZvLT5tcV9oYW5kbGUpOworCisJaWYgKHdpbmZvLT5l cnJvcl9tcV9oYW5kbGUgIT0gTlVMTCkKKwkJc2htX21xX2RldGFjaCh3aW5mby0+ZXJyb3JfbXFf aGFuZGxlKTsKKworCWlmICh3aW5mby0+ZHNtX3NlZyAhPSBOVUxMKQorCQlkc21fZGV0YWNoKHdp bmZvLT5kc21fc2VnKTsKKworCWlmICh3aW5mby0+cGVuZGluZ19tc2cpCisJeworCQlwZnJlZSh3 aW5mby0+cGVuZGluZ19tc2cpOworCQl3aW5mby0+cGVuZGluZ19tc2cgPSBOVUxMOworCX0KKwor CXBmcmVlKHdpbmZvKTsKK30KKworc3RhdGljIHZvaWQKK3BhcmFsbGVsX2FwcGx5X3Nwb29sZWRf bWVzc2FnZXModm9pZCkKK3sKKwlib29sCQlmaWxlc2V0X3ZhbGlkID0gZmFsc2U7CisKKwkvKgor CSAqIENoZWNrIGlmIGNoYW5nZXMgaGFzIGJlZW4gc2VyaWFsaXplZCB0byBkaXNrLiBpZiBzbywg cmVhZCBhbmQKKwkgKiBhcHBseSB0aGVtLgorCSAqLworCVNwaW5Mb2NrQWNxdWlyZSgmTXlQYXJh bGxlbFNoYXJlZC0+bXV0ZXgpOworCWZpbGVzZXRfdmFsaWQgPSBNeVBhcmFsbGVsU2hhcmVkLT5m aWxlc2V0X3ZhbGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmTXlQYXJhbGxlbFNoYXJlZC0+bXV0ZXgp OworCisJaWYgKGZpbGVzZXRfdmFsaWQpCisJeworCQlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9 IGZhbHNlOworCisJCXBhcmFsbGVsX2FwcGx5X2xvY2soTXlQYXJhbGxlbFNoYXJlZC0+dHJhbnNh Y3Rpb25fbG9ja19pZCk7CisJCXBhcmFsbGVsX2FwcGx5X3NldF94YWN0X3N0YXRlKE15UGFyYWxs ZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX1NUQVJURUQpOworCisJCWFwcGx5X3Nwb29sZWRfbWVz c2FnZXMoJk15UGFyYWxsZWxTaGFyZWQtPmZpbGVzZXQsCisJCQkJCQkJICAgTXlQYXJhbGxlbFNo YXJlZC0+eGlkLAorCQkJCQkJCSAgIEludmFsaWRYTG9nUmVjUHRyKTsKKwkJcGFyYWxsZWxfYXBw bHlfc2V0X2ZpbGVzZXQoTXlQYXJhbGxlbFNoYXJlZCwgZmFsc2UpOworCX0KK30KKworLyogUGFy YWxsZWwgYXBwbHkgd29ya2VyIG1haW4gbG9vcC4gKi8KK3N0YXRpYyB2b2lkCitMb2dpY2FsUGFy YWxsZWxBcHBseUxvb3Aoc2htX21xX2hhbmRsZSAqbXFoKQoreworCXNobV9tcV9yZXN1bHQgc2ht cV9yZXM7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJTWVtb3J5Q29udGV4 dCBvbGRjeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCS8qCisJICogSW5pdCB0aGUgQXBw bHlNZXNzYWdlQ29udGV4dCB3aGljaCB3ZSBjbGVhbiB1cCBhZnRlciBlYWNoIHJlcGxpY2F0aW9u CisJICogcHJvdG9jb2wgbWVzc2FnZS4KKwkgKi8KKwlBcHBseU1lc3NhZ2VDb250ZXh0ID0gQWxs b2NTZXRDb250ZXh0Q3JlYXRlKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSJBcHBseU1lc3Nh Z2VDb250ZXh0IiwKKwkJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoK KwkgKiBQdXNoIGFwcGx5IGVycm9yIGNvbnRleHQgY2FsbGJhY2suIEZpZWxkcyB3aWxsIGJlIGZp bGxlZCB3aGlsZSBhcHBseWluZworCSAqIGEgY2hhbmdlLgorCSAqLworCWVycmNhbGxiYWNrLmNh bGxiYWNrID0gYXBwbHlfZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBl cnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7 CisKKwlmb3IgKDs7KQorCXsKKwkJdm9pZAkgICAqZGF0YTsKKwkJU2l6ZQkJbGVuOworCisJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogRW5zdXJlIHdlIGFyZSByZWFkaW5nIHRoZSBk YXRhIGludG8gb3VyIG1lbW9yeSBjb250ZXh0LiAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8o QXBwbHlNZXNzYWdlQ29udGV4dCk7CisKKwkJc2htcV9yZXMgPSBzaG1fbXFfcmVjZWl2ZShtcWgs ICZsZW4sICZkYXRhLCB0cnVlKTsKKworCQlpZiAoc2htcV9yZXMgPT0gU0hNX01RX1NVQ0NFU1Mp CisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIHM7CisJCQlpbnQJCQljOworCisJCQlpZiAobGVuID09 IDApCisJCQkJYnJlYWs7CisKKwkJCS8qCisJCQkgKiBJZ25vcmUgcGFydGlhbGx5IHNlbnQgbWVz c2FnZSwgaWYgYW55LiBObyBuZWVkIHRvIGxvY2sgaGVyZSBhcworCQkJICogb25seSB0aGUgbGVh ZGVyIHNob3VsZCBzZXQgdGhpcyBmbGFnIGJlZm9yZSBzZW5kaW5nIGFueSBtZXNzYWdlLgorCQkJ ICovCisJCQlpZiAoTXlQYXJhbGxlbFNoYXJlZC0+cGFydGlhbF9zZW50X21lc3NhZ2UpCisJCQkJ Y29udGludWU7CisKKwkJCXMuY3Vyc29yID0gMDsKKwkJCXMubWF4bGVuID0gLTE7CisJCQlzLmRh dGEgPSAoY2hhciAqKSBkYXRhOworCQkJcy5sZW4gPSBsZW47CisKKwkJCS8qCisJCQkgKiBUaGUg Zmlyc3QgYnl0ZSBvZiBtZXNzYWdlcyBzZW50IGZyb20gbGVhZGVyIGFwcGx5IHdvcmtlciB0bwor CQkJICogcGFyYWxsZWwgYXBwbHkgd29ya2VycyBjYW4gb25seSBiZSAndycuCisJCQkgKi8KKwkJ CWMgPSBwcV9nZXRtc2dieXRlKCZzKTsKKwkJCWlmIChjICE9ICd3JykKKwkJCQllbG9nKEVSUk9S LCAidW5leHBlY3RlZCBtZXNzYWdlIFwiJWNcIiIsIGMpOworCisJCQkvKgorCQkJICogSWdub3Jl IHN0YXRpc3RpY3MgZmllbGRzIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgdGhlIGxlYWRlcgor CQkJICogYXBwbHkgd29ya2VyLgorCQkJICovCisJCQlzLmN1cnNvciArPSBTSVpFX1NUQVRTX01F U1NBR0U7CisKKwkJCWFwcGx5X2Rpc3BhdGNoKCZzKTsKKworCQkJTWVtb3J5Q29udGV4dFJlc2V0 KEFwcGx5TWVzc2FnZUNvbnRleHQpOworCQl9CisJCWVsc2UgaWYgKHNobXFfcmVzID09IFNITV9N UV9XT1VMRF9CTE9DSykKKwkJeworCQkJaW50CQkJcmM7CisKKwkJCXBhcmFsbGVsX2FwcGx5X3Nw b29sZWRfbWVzc2FnZXMoKTsKKworCQkJaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwkJ CXsKKwkJCQkvKgorCQkJCSAqIElmIHdlIGRpZG4ndCBnZXQgYW55IHRyYW5zYWN0aW9ucyBmb3Ig YSB3aGlsZSB0aGVyZSBtaWdodCBiZQorCQkJCSAqIHVuY29uc3VtZWQgaW52YWxpZGF0aW9uIG1l c3NhZ2VzIGluIHRoZSBxdWV1ZSwgY29uc3VtZSB0aGVtCisJCQkJICogbm93LgorCQkJCSAqLwor CQkJCUFjY2VwdEludmFsaWRhdGlvbk1lc3NhZ2VzKCk7CisJCQkJbWF5YmVfcmVyZWFkX3N1YnNj cmlwdGlvbigpOworCQkJfQorCisJCQlNZW1vcnlDb250ZXh0UmVzZXQoQXBwbHlNZXNzYWdlQ29u dGV4dCk7CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCQkJLyogV2FpdCBm b3IgbW9yZSB3b3JrLiAqLworCQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCSAgIFdM X0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJICAg MTAwMEwsCisJCQkJCQkgICBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfTUFJTik7 CisKKwkJCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKKwkJCXsKKwkJCQlSZXNldExhdGNoKE15TGF0 Y2gpOworCQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCQl9CisKKwkJCWlmIChDb25maWdS ZWxvYWRQZW5kaW5nKQorCQkJeworCQkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKKwkJ CQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsK KwkJCUFzc2VydChzaG1xX3JlcyA9PSBTSE1fTVFfREVUQUNIRUQpOworCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NU QVRFKSwKKwkJCQkJIGVycm1zZygibG9zdCBjb25uZWN0aW9uIHRvIHRoZSBsZWFkZXIgYXBwbHkg d29ya2VyIikpKTsKKwkJfQorCX0KKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjay4g Ki8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGUgbGVh ZGVyIGFwcGx5IHdvcmtlciB0cmllcyB0byByZWFkIGZyb20gb3VyIGVycm9yIHF1ZXVlIG9uZSBt b3JlCisgKiB0aW1lLiBUaGlzIGd1YXJkcyBhZ2FpbnN0IHRoZSBjYXNlIHdoZXJlIHdlIGV4aXQg dW5jbGVhbmx5IHdpdGhvdXQgc2VuZGluZworICogYW4gRXJyb3JSZXNwb25zZSwgZm9yIGV4YW1w bGUgYmVjYXVzZSBzb21lIGNvZGUgY2FsbHMgcHJvY19leGl0IGRpcmVjdGx5LgorICovCitzdGF0 aWMgdm9pZAorcGFyYWxsZWxfYXBwbHlfc2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZykKK3sK KwlTZW5kUHJvY1NpZ25hbChNeUxvZ2ljYWxSZXBXb3JrZXItPmFwcGx5X2xlYWRlcl9waWQsCisJ CQkJICAgUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLAorCQkJCSAgIEludmFsaWRCYWNr ZW5kSWQpOworCisJZHNtX2RldGFjaCgoZHNtX3NlZ21lbnQgKikgRGF0dW1HZXRQb2ludGVyKGFy ZykpOworfQorCisvKgorICogUGFyYWxsZWwgYXBwbHkgd29ya2VyIGVudHJ5IHBvaW50LgorICov Cit2b2lkCitQYXJhbGxlbEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKK3sKKwlQYXJh bGxlbEFwcGx5V29ya2VyU2hhcmVkICpzaGFyZWQ7CisJZHNtX2hhbmRsZQloYW5kbGU7CisJZHNt X3NlZ21lbnQgKnNlZzsKKwlzaG1fdG9jICAgICp0b2M7CisJc2htX21xCSAgICptcTsKKwlzaG1f bXFfaGFuZGxlICptcWg7CisJc2htX21xX2hhbmRsZSAqZXJyb3JfbXFoOworCWludAkJCXdvcmtl cl9zbG90ID0gRGF0dW1HZXRJbnQzMihtYWluX2FyZyk7CisJY2hhcgkJb3JpZ2lubmFtZVtOQU1F REFUQUxFTl07CisKKwkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcuICovCisJcHFzaWduYWwoU0lH SFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKKwlwcXNpZ25hbChTSUdURVJNLCBk aWUpOworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyoKKwkgKiBBdHRh Y2ggdG8gdGhlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvciB0aGUgcGFyYWxsZWwg YXBwbHksIGFuZAorCSAqIGZpbmQgaXRzIHRhYmxlIG9mIGNvbnRlbnRzLgorCSAqCisJICogTGlr ZSBwYXJhbGxlbCBxdWVyeSwgd2UgZG9uJ3QgbmVlZCByZXNvdXJjZSBvd25lciBieSB0aGlzIHRp bWUuIFNlZQorCSAqIFBhcmFsbGVsV29ya2VyTWFpbi4KKwkgKi8KKwltZW1jcHkoJmhhbmRsZSwg TXlCZ3dvcmtlckVudHJ5LT5iZ3dfZXh0cmEsIHNpemVvZihkc21faGFuZGxlKSk7CisJc2VnID0g ZHNtX2F0dGFjaChoYW5kbGUpOworCWlmIChzZWcgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwK KwkJCQkgZXJybXNnKCJ1bmFibGUgdG8gbWFwIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50 IikpKTsKKworCXRvYyA9IHNobV90b2NfYXR0YWNoKFBHX0xPR0lDQUxfQVBQTFlfU0hNX01BR0lD LCBkc21fc2VnbWVudF9hZGRyZXNzKHNlZykpOworCWlmICh0b2MgPT0gTlVMTCkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRF X1NUQVRFKSwKKwkJCQkgZXJybXNnKCJiYWQgbWFnaWMgbnVtYmVyIGluIGR5bmFtaWMgc2hhcmVk IG1lbW9yeSBzZWdtZW50IikpKTsKKworCWJlZm9yZV9zaG1lbV9leGl0KHBhcmFsbGVsX2FwcGx5 X3NodXRkb3duLCBQb2ludGVyR2V0RGF0dW0oc2VnKSk7CisKKwkvKiBMb29rIHVwIHRoZSBzaGFy ZWQgaW5mb3JtYXRpb24uICovCisJc2hhcmVkID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExF TF9BUFBMWV9LRVlfU0hBUkVELCBmYWxzZSk7CisJTXlQYXJhbGxlbFNoYXJlZCA9IHNoYXJlZDsK KworCS8qCisJICogQXR0YWNoIHRvIHRoZSBtZXNzYWdlIHF1ZXVlLgorCSAqLworCW1xID0gc2ht X3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlfTVEsIGZhbHNlKTsKKwlzaG1fbXFf c2V0X3JlY2VpdmVyKG1xLCBNeVByb2MpOworCW1xaCA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywg TlVMTCk7CisKKwkvKgorCSAqIFByaW1hcnkgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuIE5v dywgd2UgY2FuIGF0dGFjaCB0byBvdXIgc2xvdC4KKwkgKiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0 IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGRvZXMgbm90IHdyaXRlIGRhdGEgdG8KKwkgKiB0aGUg dW5pbml0aWFsaXplZCBtZW1vcnkgcXVldWUuCisJICovCisJbG9naWNhbHJlcF93b3JrZXJfYXR0 YWNoKHdvcmtlcl9zbG90KTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmTXlQYXJhbGxlbFNoYXJlZC0+ bXV0ZXgpOworCU15UGFyYWxsZWxTaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX2dlbmVyYXRpb24g PSBNeUxvZ2ljYWxSZXBXb3JrZXItPmdlbmVyYXRpb247CisJTXlQYXJhbGxlbFNoYXJlZC0+bG9n aWNhbHJlcF93b3JrZXJfc2xvdF9ubyA9IHdvcmtlcl9zbG90OworCVNwaW5Mb2NrUmVsZWFzZSgm TXlQYXJhbGxlbFNoYXJlZC0+bXV0ZXgpOworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIGVycm9y IHF1ZXVlLgorCSAqLworCW1xID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9BUFBMWV9L RVlfRVJST1JfUVVFVUUsIGZhbHNlKTsKKwlzaG1fbXFfc2V0X3NlbmRlcihtcSwgTXlQcm9jKTsK KwllcnJvcl9tcWggPSBzaG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJcHFfcmVkaXJl Y3RfdG9fc2htX21xKHNlZywgZXJyb3JfbXFoKTsKKwlwcV9zZXRfcGFyYWxsZWxfbGVhZGVyKE15 TG9naWNhbFJlcFdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCwKKwkJCQkJCSAgIEludmFsaWRCYWNr ZW5kSWQpOworCisJTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3NlbmRfdGltZSA9IE15TG9naWNh bFJlcFdvcmtlci0+bGFzdF9yZWN2X3RpbWUgPQorCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnJlcGx5 X3RpbWUgPSAwOworCisJSW5pdGlhbGl6ZUFwcGx5V29ya2VyKCk7CisKKwkvKgorCSAqIFNldHVw IGNhbGxiYWNrIGZvciBzeXNjYWNoZSBzbyB0aGF0IHdlIGtub3cgd2hlbiBzb21ldGhpbmcgY2hh bmdlcyBpbgorCSAqIHRoZSBzdWJzY3JpcHRpb24gcmVsYXRpb24gc3RhdGUuCisJICovCisJQ2Fj aGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soU1VCU0NSSVBUSU9OUkVMTUFQLAorCQkJCQkJCQkg IGludmFsaWRhdGVfc3luY2luZ190YWJsZV9zdGF0ZXMsCisJCQkJCQkJCSAgKERhdHVtKSAwKTsK KworCS8qCisJICogQWxsb2NhdGUgdGhlIG9yaWdpbiBuYW1lIGluIGEgbG9uZy1saXZlZCBjb250 ZXh0IGZvciBlcnJvciBjb250ZXh0CisJICogbWVzc2FnZS4KKwkgKi8KKwlSZXBsaWNhdGlvbk9y aWdpbk5hbWVGb3JMb2dpY2FsUmVwKE15U3Vic2NyaXB0aW9uLT5vaWQsIEludmFsaWRPaWQsCisJ CQkJCQkJCQkgICBvcmlnaW5uYW1lLCBzaXplb2Yob3JpZ2lubmFtZSkpOworCWFwcGx5X2Vycm9y X2NhbGxiYWNrX2FyZy5vcmlnaW5fbmFtZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoQXBwbHlDb250 ZXh0LAorCQkJCQkJCQkJCQkJCQkJICAgb3JpZ2lubmFtZSk7CisKKwlMb2dpY2FsUGFyYWxsZWxB cHBseUxvb3AobXFoKTsKKworCXByb2NfZXhpdCgwKTsKK30KKworLyoKKyAqIEhhbmRsZSByZWNl aXB0IG9mIGFuIGludGVycnVwdCBpbmRpY2F0aW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG1l c3NhZ2UuCisgKgorICogTm90ZTogdGhpcyBpcyBjYWxsZWQgd2l0aGluIGEgc2lnbmFsIGhhbmRs ZXIhICBBbGwgd2UgY2FuIGRvIGlzIHNldCBhIGZsYWcKKyAqIHRoYXQgd2lsbCBjYXVzZSB0aGUg bmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUygpIHRvIGludm9rZQorICogSGFuZGxlUGFyYWxsZWxB cHBseU1lc3NhZ2VzKCkuCisgKi8KK3ZvaWQKK0hhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50 ZXJydXB0KHZvaWQpCit7CisJSW50ZXJydXB0UGVuZGluZyA9IHRydWU7CisJUGFyYWxsZWxBcHBs eU1lc3NhZ2VQZW5kaW5nID0gdHJ1ZTsKKwlTZXRMYXRjaChNeUxhdGNoKTsKK30KKworLyoKKyAq IEhhbmRsZSBhIHNpbmdsZSBwcm90b2NvbCBtZXNzYWdlIHJlY2VpdmVkIGZyb20gYSBzaW5nbGUg cGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlci4KKyAqLworc3RhdGljIHZvaWQKK0hhbmRsZVBhcmFs bGVsQXBwbHlNZXNzYWdlKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU3RyaW5nSW5m byBtc2cpCit7CisJY2hhcgkJbXNndHlwZTsKKworCW1zZ3R5cGUgPSBwcV9nZXRtc2dieXRlKG1z Zyk7CisKKwlzd2l0Y2ggKG1zZ3R5cGUpCisJeworCQljYXNlICdFJzoJCQkJLyogRXJyb3JSZXNw b25zZSAqLworCQkJeworCQkJCUVycm9yRGF0YQllZGF0YTsKKwkJCQlFcnJvckNvbnRleHRDYWxs YmFjayAqc2F2ZV9lcnJvcl9jb250ZXh0X3N0YWNrOworCisJCQkJLyogUGFyc2UgRXJyb3JSZXNw b25zZS4gKi8KKwkJCQlwcV9wYXJzZV9lcnJvcm5vdGljZShtc2csICZlZGF0YSk7CisKKwkJCQkv KiBEZWF0aCBvZiBhIHdvcmtlciBpc24ndCBlbm91Z2gganVzdGlmaWNhdGlvbiBmb3Igc3VpY2lk ZS4gKi8KKwkJCQllZGF0YS5lbGV2ZWwgPSBNaW4oZWRhdGEuZWxldmVsLCBFUlJPUik7CisKKwkJ CQkvKgorCQkJCSAqIElmIGRlc2lyZWQsIGFkZCBhIGNvbnRleHQgbGluZSB0byBzaG93IHRoYXQg dGhpcyBpcyBhCisJCQkJICogbWVzc2FnZSBwcm9wYWdhdGVkIGZyb20gYSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuIE90aGVyd2lzZSwKKwkJCQkgKiBpdCBjYW4gc29tZXRpbWVzIGJlIGNvbmZ1c2lu ZyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkKKwkJCQkgKiBoYXBwZW5lZC4KKwkJCQkgKi8K KwkJCQlpZiAoZWRhdGEuY29udGV4dCkKKwkJCQkJZWRhdGEuY29udGV4dCA9IHBzcHJpbnRmKCIl c1xuJXMiLCBlZGF0YS5jb250ZXh0LAorCQkJCQkJCQkJCQkgXygicGFyYWxsZWwgYXBwbHkgd29y a2VyIikpOworCQkJCWVsc2UKKwkJCQkJZWRhdGEuY29udGV4dCA9IHBzdHJkdXAoXygicGFyYWxs ZWwgYXBwbHkgd29ya2VyIikpOworCisJCQkJLyoKKwkJCQkgKiBDb250ZXh0IGJleW9uZCB0aGF0 IHNob3VsZCB1c2UgdGhlIGVycm9yIGNvbnRleHQgY2FsbGJhY2tzCisJCQkJICogdGhhdCB3ZXJl IGluIGVmZmVjdCBpbiBMb2dpY2FsUmVwQXBwbHlMb29wKCkuCisJCQkJICovCisJCQkJc2F2ZV9l cnJvcl9jb250ZXh0X3N0YWNrID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJCQllcnJvcl9jb250 ZXh0X3N0YWNrID0gYXBwbHlfZXJyb3JfY29udGV4dF9zdGFjazsKKworCQkJCVRocm93RXJyb3JE YXRhKCZlZGF0YSk7CisKKwkJCQkvKiBTaG91bGQgbm90IHJlYWNoIGhlcmUgYWZ0ZXIgcmV0aHJv d2luZyBhbiBlcnJvci4gKi8KKwkJCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc2F2ZV9lcnJvcl9j b250ZXh0X3N0YWNrOworCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBEb24ndCBu ZWVkIHRvIGRvIGFueXRoaW5nIGFib3V0IE5vdGljZVJlc3BvbnNlIGFuZAorCQkJICogTm90aWZ5 UmVzcG9uc2UgYXMgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGRvZXNuJ3QgbmVlZAor CQkJICogdG8gc2VuZCBtZXNzYWdlcyB0byB0aGUgY2xpZW50LgorCQkJICovCisJCWNhc2UgJ04n OgorCQljYXNlICdBJzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1 bnJlY29nbml6ZWQgbWVzc2FnZSB0eXBlIHJlY2VpdmVkIGZyb20gcGFyYWxsZWwgYXBwbHkgd29y a2VyOiAlYyAobWVzc2FnZSBsZW5ndGggJWQgYnl0ZXMpIiwKKwkJCQkJIG1zZ3R5cGUsIG1zZy0+ bGVuKTsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgYW55IHF1ZXVlZCBwcm90b2NvbCBtZXNzYWdl cyByZWNlaXZlZCBmcm9tIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuCisgKi8KK3ZvaWQKK0hhbmRs ZVBhcmFsbGVsQXBwbHlNZXNzYWdlcyh2b2lkKQoreworCUxpc3RDZWxsICAgKmxjOworCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKworCXN0YXRpYyBNZW1vcnlDb250ZXh0IGhwYW1fY29udGV4 dCA9IE5VTEw7CisKKwkvKgorCSAqIFRoaXMgaXMgaW52b2tlZCBmcm9tIFByb2Nlc3NJbnRlcnJ1 cHRzKCksIGFuZCBzaW5jZSBzb21lIG9mIHRoZQorCSAqIGZ1bmN0aW9ucyBpdCBjYWxscyBjb250 YWluIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCksIHRoZXJlIGlzIGEgcG90ZW50aWFsCisJICogZm9y IHJlY3Vyc2l2ZSBjYWxscyBpZiBtb3JlIHNpZ25hbHMgYXJlIHJlY2VpdmVkIHdoaWxlIHRoaXMg cnVucy4gIEl0J3MKKwkgKiB1bmNsZWFyIHRoYXQgcmVjdXJzaXZlIGVudHJ5IHdvdWxkIGJlIHNh ZmUsIGFuZCBpdCBkb2Vzbid0IHNlZW0gdXNlZnVsCisJICogZXZlbiBpZiBpdCBpcyBzYWZlLCBz byBsZXQncyBibG9jayBpbnRlcnJ1cHRzIHVudGlsIGRvbmUuCisJICovCisJSE9MRF9JTlRFUlJV UFRTKCk7CisKKwkvKgorCSAqIE1vcmVvdmVyLCBDdXJyZW50TWVtb3J5Q29udGV4dCBtaWdodCBi ZSBwb2ludGluZyBhbG1vc3QgYW55d2hlcmUuICBXZQorCSAqIGRvbid0IHdhbnQgdG8gcmlzayBs ZWFraW5nIGRhdGEgaW50byBsb25nLWxpdmVkIGNvbnRleHRzLCBzbyBsZXQncyBkbworCSAqIG91 ciB3b3JrIGhlcmUgaW4gYSBwcml2YXRlIGNvbnRleHQgdGhhdCB3ZSBjYW4gcmVzZXQgb24gZWFj aCB1c2UuCisJICovCisJaWYgKGhwYW1fY29udGV4dCA9PSBOVUxMKQkvKiBmaXJzdCB0aW1lIHRo cm91Z2g/ICovCisJCWhwYW1fY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1v cnlDb250ZXh0LAorCQkJCQkJCQkJCQkiSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VzIiwKKwkJ CQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJZWxzZQorCQlNZW1vcnlDb250ZXh0 UmVzZXQoaHBhbV9jb250ZXh0KTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oaHBhbV9jb250ZXh0KTsKKworCVBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZyA9IGZhbHNl OworCisJZm9yZWFjaChsYywgUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0KQorCXsKKwkJc2htX21x X3Jlc3VsdCByZXM7CisJCVNpemUJCW5ieXRlczsKKwkJdm9pZAkgICAqZGF0YTsKKwkJUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKndpbmZvID0gKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICopIGxm aXJzdChsYyk7CisKKwkJaWYgKHdpbmZvLT5lcnJvcl9tcV9oYW5kbGUgPT0gTlVMTCkKKwkJCWNv bnRpbnVlOworCisJCXJlcyA9IHNobV9tcV9yZWNlaXZlKHdpbmZvLT5lcnJvcl9tcV9oYW5kbGUs ICZuYnl0ZXMsICZkYXRhLCB0cnVlKTsKKworCQlpZiAocmVzID09IFNITV9NUV9XT1VMRF9CTE9D SykKKwkJCWNvbnRpbnVlOworCQllbHNlIGlmIChyZXMgPT0gU0hNX01RX1NVQ0NFU1MpCisJCXsK KwkJCVN0cmluZ0luZm9EYXRhIG1zZzsKKworCQkJaW5pdFN0cmluZ0luZm8oJm1zZyk7CisJCQlh cHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZtc2csIGRhdGEsIG5ieXRlcyk7CisJCQlIYW5kbGVQYXJh bGxlbEFwcGx5TWVzc2FnZSh3aW5mbywgJm1zZyk7CisJCQlwZnJlZShtc2cuZGF0YSk7CisJCX0K KwkJZWxzZQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1Rf Tk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImxvc3QgY29ubmVjdGlv biB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIikpKTsKKwl9CisKKwlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkvKiBNaWdodCBhcyB3ZWxsIGNsZWFyIHRoZSBjb250 ZXh0IG9uIG91ciB3YXkgb3V0ICovCisJTWVtb3J5Q29udGV4dFJlc2V0KGhwYW1fY29udGV4dCk7 CisKKwlSRVNVTUVfSU5URVJSVVBUUygpOworfQorCisvKgorICogU2V0IHVwIGEgZHluYW1pYyBz aGFyZWQgbWVtb3J5IHNlZ21lbnQuCisgKgorICogV2Ugc2V0IHVwIGEgY29udHJvbCByZWdpb24g dGhhdCBjb250YWlucyBhIGZpeGVkLXNpemUgd29ya2VyIGluZm8KKyAqIChQYXJhbGxlbEFwcGx5 V29ya2VyU2hhcmVkKSwgYSBtZXNzYWdlIHF1ZXVlLCBhbmQgYW4gZXJyb3IgcXVldWUuCisgKgor ICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRp YyBib29sCitwYXJhbGxlbF9hcHBseV9zZXR1cF9kc20oUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvKQoreworCXNobV90b2NfZXN0aW1hdG9yIGU7CisJU2l6ZQkJc2Vnc2l6ZTsKKwlkc21f c2VnbWVudCAqc2VnOworCXNobV90b2MgICAgKnRvYzsKKwlQYXJhbGxlbEFwcGx5V29ya2VyU2hh cmVkICpzaGFyZWQ7CisJc2htX21xCSAgICptcTsKKwlTaXplCQlxdWV1ZV9zaXplID0gRFNNX1FV RVVFX1NJWkU7CisJU2l6ZQkJZXJyb3JfcXVldWVfc2l6ZSA9IERTTV9FUlJPUl9RVUVVRV9TSVpF OworCisJLyoKKwkgKiBFc3RpbWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVtb3J5IHdlIG5lZWQuCisJ ICoKKwkgKiBCZWNhdXNlIHRoZSBUT0MgbWFjaGluZXJ5IG1heSBjaG9vc2UgdG8gaW5zZXJ0IHBh ZGRpbmcgb2Ygb2RkbHktc2l6ZWQKKwkgKiByZXF1ZXN0cywgd2UgbXVzdCBlc3RpbWF0ZSBlYWNo IGNodW5rIHNlcGFyYXRlbHkuCisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8gcmVnaXN0ZXIg dGhlIGxvY2F0aW9uIG9mIHRoZSBoZWFkZXIsIGFuZCB0d28gb3RoZXIKKwkgKiBrZXlzIHRvIHRy YWNrIHRoZSBsb2NhdGlvbnMgb2YgdGhlIG1lc3NhZ2UgcXVldWUgYW5kIHRoZSBlcnJvciBtZXNz YWdlCisJICogcXVldWUuCisJICovCisJc2htX3RvY19pbml0aWFsaXplX2VzdGltYXRvcigmZSk7 CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmZSwgc2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJT aGFyZWQpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBxdWV1ZV9zaXplKTsKKwlzaG1f dG9jX2VzdGltYXRlX2NodW5rKCZlLCBlcnJvcl9xdWV1ZV9zaXplKTsKKworCXNobV90b2NfZXN0 aW1hdGVfa2V5cygmZSwgMyk7CisJc2Vnc2l6ZSA9IHNobV90b2NfZXN0aW1hdGUoJmUpOworCisJ LyogQ3JlYXRlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYW5kIGVzdGFibGlzaCBhIHRhYmxl IG9mIGNvbnRlbnRzLiAqLworCXNlZyA9IGRzbV9jcmVhdGUoc2htX3RvY19lc3RpbWF0ZSgmZSks IDApOworCWlmIChzZWcgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJdG9jID0gc2htX3Rv Y19jcmVhdGUoUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMsIGRzbV9zZWdtZW50X2FkZHJlc3Mo c2VnKSwKKwkJCQkJCSBzZWdzaXplKTsKKworCS8qIFNldCB1cCB0aGUgaGVhZGVyIHJlZ2lvbi4g Ki8KKwlzaGFyZWQgPSBzaG1fdG9jX2FsbG9jYXRlKHRvYywgc2l6ZW9mKFBhcmFsbGVsQXBwbHlX b3JrZXJTaGFyZWQpKTsKKwlTcGluTG9ja0luaXQoJnNoYXJlZC0+bXV0ZXgpOworCisJc2hhcmVk LT54YWN0X3N0YXRlID0gZmFsc2U7CisJcGdfYXRvbWljX2luaXRfdTMyKCYoc2hhcmVkLT5sZWZ0 X21lc3NhZ2UpLCAwKTsKKworCXNobV90b2NfaW5zZXJ0KHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZ X1NIQVJFRCwgc2hhcmVkKTsKKworCS8qIFNldCB1cCBtZXNzYWdlIHF1ZXVlIGZvciB0aGUgd29y a2VyLiAqLworCW1xID0gc2htX21xX2NyZWF0ZShzaG1fdG9jX2FsbG9jYXRlKHRvYywgcXVldWVf c2l6ZSksIHF1ZXVlX3NpemUpOworCXNobV90b2NfaW5zZXJ0KHRvYywgUEFSQUxMRUxfQVBQTFlf S0VZX01RLCBtcSk7CisJc2htX21xX3NldF9zZW5kZXIobXEsIE15UHJvYyk7CisKKwkvKiBBdHRh Y2ggdGhlIHF1ZXVlLiAqLworCXdpbmZvLT5tcV9oYW5kbGUgPSBzaG1fbXFfYXR0YWNoKG1xLCBz ZWcsIE5VTEwpOworCisJLyogU2V0IHVwIGVycm9yIHF1ZXVlIGZvciB0aGUgd29ya2VyLiAqLwor CW1xID0gc2htX21xX2NyZWF0ZShzaG1fdG9jX2FsbG9jYXRlKHRvYywgZXJyb3JfcXVldWVfc2l6 ZSksCisJCQkJCSAgIGVycm9yX3F1ZXVlX3NpemUpOworCXNobV90b2NfaW5zZXJ0KHRvYywgUEFS QUxMRUxfQVBQTFlfS0VZX0VSUk9SX1FVRVVFLCBtcSk7CisJc2htX21xX3NldF9yZWNlaXZlciht cSwgTXlQcm9jKTsKKworCS8qIEF0dGFjaCB0aGUgcXVldWUuICovCisJd2luZm8tPmVycm9yX21x X2hhbmRsZSA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisKKwkvKiBSZXR1cm4gcmVz dWx0cyB0byBjYWxsZXIuICovCisJd2luZm8tPmRzbV9zZWcgPSBzZWc7CisJd2luZm8tPnNoYXJl ZCA9IHNoYXJlZDsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogUmV0dXJucyB0aGUgdW5p cXVlIGlkIGFtb25nIGFsbCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGluIHRoZSBzdWJzY3JpYmVy LgorICovCitzdGF0aWMgdWludDE2CitwYXJhbGxlbF9hcHBseV9nZXRfdW5pcXVlX2lkKCkKK3sK KwlMaXN0Q2VsbCAqbGM7CisKKwlzdGF0aWMgdWludDE2IGlkID0gMDsKKworCWZvcig7OykKKwl7 CisJCWJvb2wJdW5pcXVlID0gdHJ1ZTsKKworCQlmb3JlYWNoKGxjLCBQYXJhbGxlbEFwcGx5V29y a2Vyc0xpc3QpCisJCXsKKwkJCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyA9IChQYXJh bGxlbEFwcGx5V29ya2VySW5mbyAqKSBsZmlyc3QobGMpOworCisJCQlpZiAoaWQgPT0gd2luZm8t PnNoYXJlZC0+c3RyZWFtX2xvY2tfaWQgfHwKKwkJCQlpZCA9PSB3aW5mby0+c2hhcmVkLT50cmFu c2FjdGlvbl9sb2NrX2lkKQorCQkJeworCQkJCXVuaXF1ZSA9IGZhbHNlOworCQkJCWJyZWFrOwor CQkJfQorCQl9CisKKwkJaWYgKHVuaXF1ZSkKKwkJCWJyZWFrOworCisJCWlkICs9IDE7CisJfQor CisJcmV0dXJuIGlkOworfQorCisvKgorICogU3RhcnQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHBy b2Nlc3MgYW5kIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnkgZm9yIGl0LgorICovCitzdGF0aWMgUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKgorcGFyYWxsZWxfYXBwbHlfc2V0dXBfd29ya2VyKHZvaWQp Cit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCWJvb2wJCWxhdW5jaGVkOworCVBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKKworCXdpbmZvID0gKFBhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvICopIHBhbGxvYzAoc2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvKSk7CisKKwkvKiBT ZXR1cCBzaGFyZWQgbWVtb3J5LiAqLworCWlmICghcGFyYWxsZWxfYXBwbHlfc2V0dXBfZHNtKHdp bmZvKSkKKwl7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJcGZyZWUo d2luZm8pOworCisJCXJldHVybiBOVUxMOworCX0KKworCWxhdW5jaGVkID0gbG9naWNhbHJlcF93 b3JrZXJfbGF1bmNoKE15TG9naWNhbFJlcFdvcmtlci0+ZGJpZCwKKwkJCQkJCQkJCQlNeVN1YnNj cmlwdGlvbi0+b2lkLAorCQkJCQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lLAorCQkJCQkJCQkJ CU15TG9naWNhbFJlcFdvcmtlci0+dXNlcmlkLAorCQkJCQkJCQkJCUludmFsaWRPaWQsCisJCQkJ CQkJCQkJZHNtX3NlZ21lbnRfaGFuZGxlKHdpbmZvLT5kc21fc2VnKSk7CisKKwlpZiAobGF1bmNo ZWQpCisJeworCQlQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QgPSBsYXBwZW5kKFBhcmFsbGVsQXBw bHlXb3JrZXJzTGlzdCwgd2luZm8pOworCQl3aW5mby0+c2hhcmVkLT5zdHJlYW1fbG9ja19pZCA9 IHBhcmFsbGVsX2FwcGx5X2dldF91bmlxdWVfaWQoKTsKKwkJd2luZm8tPnNoYXJlZC0+dHJhbnNh Y3Rpb25fbG9ja19pZCA9IHBhcmFsbGVsX2FwcGx5X2dldF91bmlxdWVfaWQoKTsKKwl9CisJZWxz ZQorCXsKKwkJcGFyYWxsZWxfYXBwbHlfZnJlZV93b3JrZXJfaW5mbyh3aW5mbyk7CisKKwkJd2lu Zm8gPSBOVUxMOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwor CXJldHVybiB3aW5mbzsKK30KKworLyoKKyAqIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmll ZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdmlhIHNoYXJlZC1tZW1vcnkgcXVldWUuCisgKi8KK3Zv aWQKK3BhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2lu Zm8sIFNpemUgbmJ5dGVzLAorCQkJCQkJIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJaW50CXJldHJ5 ID0gMDsKKwlzaG1fbXFfcmVzdWx0IHJlc3VsdDsKKwlUaW1lc3RhbXBUeiBzdGFydFRpbWUgPSAw OworCisJQXNzZXJ0KCF3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpOworCUFzc2VydCghSXNUcmFu c2FjdGlvblN0YXRlKCkpOworCisjZGVmaW5lIENIQU5HRVNfVEhSRVNIT0xECTEwMDAKKyNkZWZp bmUgU0hNX1NFTkRfVElNRU9VVF9NUwkxMDAwMAorCisJZm9yICg7OykKKwl7CisJCXJlc3VsdCA9 IHNobV9tcV9zZW5kKHdpbmZvLT5tcV9oYW5kbGUsIG5ieXRlcywgZGF0YSwgdHJ1ZSwgdHJ1ZSk7 CisKKwkJaWYgKHJlc3VsdCA9PSBTSE1fTVFfU1VDQ0VTUykKKwkJCWJyZWFrOworCQllbHNlIGlm IChyZXN1bHQgPT0gU0hNX01RX0RFVEFDSEVEKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBl cnJtc2coImNvdWxkIG5vdCBzZW5kIGRhdGEgdG8gc2hhcmVkLW1lbW9yeSBxdWV1ZSIpKSk7CisK KwkJQXNzZXJ0KHJlc3VsdCA9PSBTSE1fTVFfV09VTERfQkxPQ0spOworCisJCWlmICgrK3JldHJ5 ID49IENIQU5HRVNfVEhSRVNIT0xEKQorCQl7CisJCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7 CisJCQlTdHJpbmdJbmZvRGF0YSBtc2c7CisJCQlUaW1lc3RhbXBUeiBub3cgPSBHZXRDdXJyZW50 VGltZXN0YW1wKCk7CisKKwkJCWlmIChzdGFydFRpbWUgPT0gMCkKKwkJCQlzdGFydFRpbWUgPSBu b3c7CisKKwkJCWlmICghVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMoc3RhcnRUaW1lLCBub3cs IFNITV9TRU5EX1RJTUVPVVRfTVMpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBTYXZlIHRoZSBt ZXNzYWdlIHRoYXQgd2FzIG9ubHkgcGFydGlhbGx5IHNlbnQuICovCisJCQlvbGRjb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisJCQl3aW5mby0+cGVuZGluZ19t c2cgPSAoY2hhciAqKSBwYWxsb2MobmJ5dGVzKTsKKwkJCW1lbWNweSh3aW5mby0+cGVuZGluZ19t c2csIGRhdGEsIG5ieXRlcyk7CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisKKwkJCS8qCisJCQkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG1pZ2h0IGJlIHN0dWNr IGZvciBzb21lIHJlYXNvbiwgc28KKwkJCSAqIHN0b3Agc2VuZGluZyBkYXRhIHRvIHBhcmFsbGVs IHdvcmtlciBhbmQgc3RhcnQgdG8gc2VyaWFsaXplIGRhdGEKKwkJCSAqIHRvIGZpbGVzLgorCQkJ ICovCisJCQl3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSB0cnVlOworCisJCQkvKiBJbml0aWFs aXplIHRoZSBzdHJlYW0gZmlsZXNldC4gKi8KKwkJCXNlcmlhbGl6ZV9zdHJlYW1fc3RhcnQod2lu Zm8tPnNoYXJlZC0+eGlkLCB0cnVlKTsKKworCQkJLyoKKwkJCSAqIENsb3NlIHRoZSBzdHJlYW0g ZmlsZSBpZiBub3QgaW4gYSBzdHJlYW1pbmcgYmxvY2ssIHRoZSBmaWxlIHdpbGwKKwkJCSAqIGJl IHJlb3BlbmVkIGxhdGVyLgorCQkJICovCisJCQlpZiAoIXN0cmVhbV9hcHBseV93b3JrZXIpCisJ CQkJc2VyaWFsaXplX3N0cmVhbV9zdG9wKHdpbmZvLT5zaGFyZWQtPnhpZCk7CisKKwkJCWluaXRT dHJpbmdJbmZvKCZtc2cpOworCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmbXNnLCBkYXRhLCBu Ynl0ZXMpOworCisJCQkvKiBTa2lwIGZpcnN0IGJ5dGUgYW5kIHN0YXRpc3RpY3MgZmllbGRzLiAq LworCQkJbXNnLmN1cnNvciArPSBTSVpFX1NUQVRTX01FU1NBR0UgKyAxOworCisJCQkvKgorCQkJ ICogRGlzcGF0Y2ggdGhlIHRhc2sgb2Ygc2VyaWFsaXppbmcgZGF0YSB0byB0aGUgYXBwcm9wcmlh dGUKKwkJCSAqIGZ1bmN0aW9uLgorCQkJICovCisJCQlzd2l0Y2hpbmdfdG9fc2VyaWFsaXplID0g dHJ1ZTsKKwkJCWFwcGx5X2Rpc3BhdGNoKCZtc2cpOworCQkJc3dpdGNoaW5nX3RvX3NlcmlhbGl6 ZSA9IGZhbHNlOworCisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIFdhaXQgdW50aWwg dGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcidzIHRyYW5zYWN0aW9uIGZpbmlzaGVzLgorICovCit2 b2lkCitwYXJhbGxlbF9hcHBseV93YWl0X2Zvcl94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29y a2VyU2hhcmVkICp3c2hhcmVkKQoreworCS8qCisJICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwg YXBwbHkgd29ya2VyIGhhbmRsZXMgdGhlIGZpcnN0IG1lc3NhZ2UgYW5kCisJICogc2V0IHRoZSBm bGFnIHRvIHRydWUuCisJICovCisJcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3JfaW5feGFjdCh3c2hh cmVkLCBQQVJBTExFTF9UUkFOU19TVEFSVEVEKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2Fj dGlvbiBsb2NrIHRvIGJlIHJlbGVhc2VkLiAqLworCXBhcmFsbGVsX2FwcGx5X2xvY2sod3NoYXJl ZC0+dHJhbnNhY3Rpb25fbG9ja19pZCk7CisKKwlwYXJhbGxlbF9hcHBseV91bmxvY2sod3NoYXJl ZC0+dHJhbnNhY3Rpb25fbG9ja19pZCk7CisKKwkvKgorCSAqIFdhaXQgdW50aWwgdGhlIGZsYWcg YmVjb21lcyBmYWxzZSBpbiBjYXNlIHRoZSBsb2NrIHdhcyByZWxlYXNlZCBiZWNhdXNlCisJICog b2YgZmFpbHVyZSB3aGlsZSBhcHBseWluZy4KKwkgKi8KKwlwYXJhbGxlbF9hcHBseV93YWl0X2Zv cl9pbl94YWN0KHdzaGFyZWQsIFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKK30KKworLyoKKyAq IFdhaXQgdW50aWwgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcidzIHhhY3Rfc3RhdGUgZmxhZyBi ZWNvbWVzCisgKiB0aGUgc2FtZSBhcyBpbl94YWN0LgorICovCitzdGF0aWMgdm9pZAorcGFyYWxs ZWxfYXBwbHlfd2FpdF9mb3JfaW5feGFjdChQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hh cmVkLAorCQkJCQkJCQlQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0ZSkKK3sKKwlmb3IgKDs7 KQorCXsKKwkJLyogU3RvcCBpZiB0aGUgZmxhZyBiZWNvbWVzIHRoZSBzYW1lIGFzIGluX3hhY3Qu ICovCisJCWlmIChwYXJhbGxlbF9hcHBseV9nZXRfeGFjdF9zdGF0ZSh3c2hhcmVkKSA+PSB4YWN0 X3N0YXRlKQorCQkJYnJlYWs7CisKKwkJLyogV2FpdCB0byBiZSBzaWduYWxsZWQuICovCisJCSh2 b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VU IHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAxMEwsCisJCQkJCQkgV0FJVF9FVkVOVF9M T0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSk7CisKKwkJLyogUmVzZXQgdGhlIGxh dGNoIHNvIHdlIGRvbid0IHNwaW4uICovCisJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJLyog QW4gaW50ZXJydXB0IG1heSBoYXZlIG9jY3VycmVkIHdoaWxlIHdlIHdlcmUgd2FpdGluZy4gKi8K KwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwl9Cit9CisKKy8qCisgKiBTZXQgdGhlIHhhY3Rf c3RhdGUgZmxhZyBmb3IgdGhlIGdpdmVuIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLwordm9p ZAorcGFyYWxsZWxfYXBwbHlfc2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCAqd3NoYXJlZCwKKwkJCQkJCQkgIFBhcmFsbGVsVHJhbnNTdGF0ZSB4YWN0X3N0YXRlKQorewor CVNwaW5Mb2NrQWNxdWlyZSgmd3NoYXJlZC0+bXV0ZXgpOworCXdzaGFyZWQtPnhhY3Rfc3RhdGUg PSB4YWN0X3N0YXRlOworCVNwaW5Mb2NrUmVsZWFzZSgmd3NoYXJlZC0+bXV0ZXgpOworfQorCisv KgorICogR2V0IHRoZSB4YWN0X3N0YXRlIGZsYWcgZm9yIHRoZSBnaXZlbiBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuCisgKi8KK3N0YXRpYyBQYXJhbGxlbFRyYW5zU3RhdGUKK3BhcmFsbGVsX2FwcGx5 X2dldF94YWN0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQpCit7CisJ UGFyYWxsZWxUcmFuc1N0YXRlCQl4YWN0X3N0YXRlOworCisJU3BpbkxvY2tBY3F1aXJlKCZ3c2hh cmVkLT5tdXRleCk7CisJeGFjdF9zdGF0ZSA9IHdzaGFyZWQtPnhhY3Rfc3RhdGU7CisJU3Bpbkxv Y2tSZWxlYXNlKCZ3c2hhcmVkLT5tdXRleCk7CisKKwlyZXR1cm4geGFjdF9zdGF0ZTsKK30KKwor LyoKKyAqIEZvcm0gdGhlIHNhdmVwb2ludCBuYW1lIGZvciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0 aW9uLgorICoKKyAqIFJldHVybiB0aGUgbmFtZSBpbiB0aGUgc3VwcGxpZWQgYnVmZmVyLgorICov CitzdGF0aWMgdm9pZAorcGFyYWxsZWxfYXBwbHlfc2F2ZXBvaW50X25hbWUoT2lkIHN1Ym9pZCwg VHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJICBjaGFyICpzcG5hbWUsIFNpemUgc3pzcCkKK3sK KwlzbnByaW50ZihzcG5hbWUsIHN6c3AsICJwZ19zcF8ldV8ldSIsIHN1Ym9pZCwgeGlkKTsKK30K KworLyoKKyAqIERlZmluZSBhIHNhdmVwb2ludCBmb3IgYSBzdWJ4YWN0IGluIHBhcmFsbGVsIGFw cGx5IHdvcmtlciBpZiBuZWVkZWQuCisgKgorICogVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBj YW4gZmlndXJlIG91dCBpZiBhIG5ldyBzdWJ0cmFuc2FjdGlvbiB3YXMKKyAqIHN0YXJ0ZWQgYnkg Y2hlY2tpbmcgaWYgdGhlIG5ldyBjaGFuZ2UgYXJyaXZlZCB3aXRoIGEgZGlmZmVyZW50IHhpZC4g SW4gdGhhdAorICogY2FzZSBkZWZpbmUgYSBuYW1lZCBzYXZlcG9pbnQsIHNvIHRoYXQgd2UgYXJl IGFibGUgdG8gcm9sbGJhY2sgdG8gaXQKKyAqIGlmIHJlcXVpcmVkLgorICovCit2b2lkCitwYXJh bGxlbF9hcHBseV9zdGFydF9zdWJ0cmFucyhUcmFuc2FjdGlvbklkIGN1cnJlbnRfeGlkLCBUcmFu c2FjdGlvbklkIHRvcF94aWQpCit7CisJaWYgKGN1cnJlbnRfeGlkICE9IHRvcF94aWQgJiYKKwkJ IWxpc3RfbWVtYmVyX3hpZChzdWJ4YWN0bGlzdCwgY3VycmVudF94aWQpKQorCXsKKwkJTWVtb3J5 Q29udGV4dCBvbGRjdHg7CisJCWNoYXIJCXNwbmFtZVtOQU1FREFUQUxFTl07CisKKwkJcGFyYWxs ZWxfYXBwbHlfc2F2ZXBvaW50X25hbWUoTXlTdWJzY3JpcHRpb24tPm9pZCwgY3VycmVudF94aWQs CisJCQkJCQkJCQkgIHNwbmFtZSwgc2l6ZW9mKHNwbmFtZSkpOworCisJCWVsb2coREVCVUcxLCAi ZGVmaW5pbmcgc2F2ZXBvaW50ICVzIGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIsIHNwbmFtZSk7 CisKKwkJLyogV2UgbXVzdCBiZSBpbiB0cmFuc2FjdGlvbiBibG9jayB0byBkZWZpbmUgdGhlIFNB VkVQT0lOVC4gKi8KKwkJaWYgKCFJc1RyYW5zYWN0aW9uQmxvY2soKSkKKwkJeworCQkJaWYgKCFJ c1RyYW5zYWN0aW9uU3RhdGUoKSkKKwkJCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJ CQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgp OworCQl9CisKKwkJRGVmaW5lU2F2ZXBvaW50KHNwbmFtZSk7CisKKwkJLyoKKwkJICogQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kIGlzIG5lZWRlZCB0byBzdGFydCBhIHN1YnRyYW5zYWN0aW9uIGFm dGVyCisJCSAqIGlzc3VpbmcgYSBTQVZFUE9JTlQgaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2sg KHNlZQorCQkgKiBTdGFydFN1YlRyYW5zYWN0aW9uKCkpLgorCQkgKi8KKwkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisKKwkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5 Q29udGV4dCk7CisJCXN1YnhhY3RsaXN0ID0gbGFwcGVuZF94aWQoc3VieGFjdGxpc3QsIGN1cnJl bnRfeGlkKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJfQorfQorCisvKgor ICogSGFuZGxlIFNUUkVBTSBBQk9SVCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIHdhcyBh cHBsaWVkIGluIGEgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlci4KKyAqLwordm9pZAorcGFyYWxs ZWxfYXBwbHlfc3RyZWFtX2Fib3J0KExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFib3J0X2Rh dGEpCit7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBhYm9ydF9kYXRhLT54aWQ7CisJVHJhbnNhY3Rp b25JZCBzdWJ4aWQgPSBhYm9ydF9kYXRhLT5zdWJ4aWQ7CisKKwkvKgorCSAqIFVwZGF0ZSBvcmln aW4gc3RhdGUgc28gd2UgY2FuIHJlc3RhcnQgc3RyZWFtaW5nIGZyb20gY29ycmVjdCBwb3NpdGlv bgorCSAqIGluIGNhc2Ugb2YgY3Jhc2guCisJICovCisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl9sc24gPSBhYm9ydF9kYXRhLT5hYm9ydF9sc247CisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl90aW1lc3RhbXAgPSBhYm9ydF9kYXRhLT5hYm9ydF90aW1lOworCisJLyoKKwkgKiBJZiB0aGUg dHdvIFhJRHMgYXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFj dCwgc28KKwkgKiBqdXN0IGZyZWUgdGhlIHN1YnhhY3RsaXN0LgorCSAqLworCWlmIChzdWJ4aWQg PT0geGlkKQorCXsKKwkJQWJvcnRDdXJyZW50VHJhbnNhY3Rpb24oKTsKKworCQlpZiAoSXNUcmFu c2FjdGlvbkJsb2NrKCkpCisJCXsKKwkJCUVuZFRyYW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCX0KKworCQlwZ3N0YXRfcmVwb3J0X2FjdGl2 aXR5KFNUQVRFX0lETEUsIE5VTEwpOworCisJCWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7CisJCXN1 YnhhY3RsaXN0ID0gTklMOworCisJCXBhcmFsbGVsX2FwcGx5X3VubG9jayhNeVBhcmFsbGVsU2hh cmVkLT50cmFuc2FjdGlvbl9sb2NrX2lkKTsKKwkJcGFyYWxsZWxfYXBwbHlfc2V0X3hhY3Rfc3Rh dGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpOworCX0KKwllbHNl CisJeworCQkvKgorCQkgKiBPSywgc28gaXQncyBhIHN1YnhhY3QuIFJvbGxiYWNrIHRvIHRoZSBz YXZlcG9pbnQuCisJCSAqCisJCSAqIFdlIGFsc28gbmVlZCB0byByZWFkIHRoZSBzdWJ4YWN0bGlz dCwgZGV0ZXJtaW5lIHRoZSBvZmZzZXQgdHJhY2tlZAorCQkgKiBmb3IgdGhlIHN1YnhhY3QsIGFu ZCB0cnVuY2F0ZSB0aGUgbGlzdC4KKwkJICovCisJCWludAkJCWk7CisJCWJvb2wJCWZvdW5kID0g ZmFsc2U7CisJCWNoYXIJCXNwbmFtZVtOQU1FREFUQUxFTl07CisKKwkJcGFyYWxsZWxfYXBwbHlf c2F2ZXBvaW50X25hbWUoTXlTdWJzY3JpcHRpb24tPm9pZCwgc3VieGlkLCBzcG5hbWUsCisJCQkJ CQkJCQkgIHNpemVvZihzcG5hbWUpKTsKKworCQllbG9nKERFQlVHMSwgInJvbGxpbmcgYmFjayB0 byBzYXZlcG9pbnQgJXMgaW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyIiwgc3BuYW1lKTsKKworCQlm b3IgKGkgPSBsaXN0X2xlbmd0aChzdWJ4YWN0bGlzdCkgLSAxOyBpID49IDA7IGktLSkKKwkJewor CQkJVHJhbnNhY3Rpb25JZCB4aWRfdG1wID0gbGZpcnN0X3hpZChsaXN0X250aF9jZWxsKHN1Ynhh Y3RsaXN0LCBpKSk7CisKKwkJCWlmICh4aWRfdG1wID09IHN1YnhpZCkKKwkJCXsKKwkJCQlmb3Vu ZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoZm91bmQpCisJCXsKKwkJ CVJvbGxiYWNrVG9TYXZlcG9pbnQoc3BuYW1lKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFu ZCgpOworCQkJc3VieGFjdGxpc3QgPSBsaXN0X3RydW5jYXRlKHN1YnhhY3RsaXN0LCBpICsgMSk7 CisJCX0KKworCQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEVJTlRSQU5TQUNUSU9O LCBOVUxMKTsKKwl9Cit9CisKKy8qIFNldHVwIHJlcGxpY2F0aW9uIG9yaWdpbiB0cmFja2luZy4g Ki8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3JlcGxvcmlnaW5fc2V0dXAodm9pZCkKK3sKKwlSZXBP cmlnaW5JZCBvcmlnaW5pZDsKKwljaGFyCQlvcmlnaW5uYW1lW05BTUVEQVRBTEVOXTsKKwlib29s CQlzdGFydGVkX3R4ID0gZmFsc2U7CisKKwkvKiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxl ZCBpbnNpZGUgb3Igb3V0c2lkZSBvZiB0cmFuc2FjdGlvbi4gKi8KKwlpZiAoIUlzVHJhbnNhY3Rp b25TdGF0ZSgpKQorCXsKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJc3RhcnRlZF90 eCA9IHRydWU7CisJfQorCisJUmVwbGljYXRpb25PcmlnaW5OYW1lRm9yTG9naWNhbFJlcChNeVN1 YnNjcmlwdGlvbi0+b2lkLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJICAgb3JpZ2lubmFtZSwgc2l6 ZW9mKG9yaWdpbm5hbWUpKTsKKwlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5u YW1lLCBmYWxzZSk7CisJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkKTsKKwlyZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CisKKwlpZiAoc3RhcnRlZF90eCkKKwkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7Cit9CisKKy8qIFJlc2V0IHJlcGxpY2F0aW9uIG9y aWdpbiB0cmFja2luZy4gKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3JlcGxvcmlnaW5fcmVzZXQo dm9pZCkKK3sKKwlyZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQoKTsKKworCXJlcGxvcmlnaW5fc2Vz c2lvbl9vcmlnaW4gPSBJbnZhbGlkUmVwT3JpZ2luSWQ7CisJcmVwbG9yaWdpbl9zZXNzaW9uX29y aWdpbl9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2lu X3RpbWVzdGFtcCA9IDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIGZpbGVzZXRfdmFsaWQgZmxhZyBh bmQgZmlsZXNldCBmb3IgdGhlIGdpdmVuIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLwordm9p ZAorcGFyYWxsZWxfYXBwbHlfc2V0X2ZpbGVzZXQoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAq d3NoYXJlZCwgYm9vbCBmaWxlc2V0X3ZhbGlkKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmd3NoYXJl ZC0+bXV0ZXgpOworCXdzaGFyZWQtPmZpbGVzZXRfdmFsaWQgPSBmaWxlc2V0X3ZhbGlkOworCisJ aWYgKGZpbGVzZXRfdmFsaWQpCisJeworCQlBc3NlcnQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJl YW1fZmlsZXNldCk7CisJCXdzaGFyZWQtPmZpbGVzZXQgPSAqTXlMb2dpY2FsUmVwV29ya2VyLT5z dHJlYW1fZmlsZXNldDsKKwl9CisJZWxzZQorCQltZW1zZXQoJndzaGFyZWQtPmZpbGVzZXQsIDAs IHNpemVvZih3c2hhcmVkLT5maWxlc2V0KSk7CisKKwlTcGluTG9ja1JlbGVhc2UoJndzaGFyZWQt Pm11dGV4KTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbGVhc2UgYSBsb2NrIHdpdGgg bG9ja2lkICovCit2b2lkCitwYXJhbGxlbF9hcHBseV9sb2NrKHVpbnQxNiBsb2NraWQpCit7CisJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJaWYgKGxpc3RfbWVtYmVyX2ludChQYXJhbGxl bEFwcGx5TG9ja2lkcywgbG9ja2lkKSkKKwkJcmV0dXJuOworCisJTG9ja1NoYXJlZE9iamVjdEZv clNlc3Npb24oU3Vic2NyaXB0aW9uUmVsYXRpb25JZCwgTXlTdWJzY3JpcHRpb24tPm9pZCwKKwkJ CQkJCQkgICBsb2NraWQsIGFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSA/CisJCQkJCQkJICAgQWNj ZXNzRXhjbHVzaXZlTG9jazoKKwkJCQkJCQkgICBBY2Nlc3NTaGFyZUxvY2spOworCisJb2xkY29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCVBhcmFsbGVsQXBw bHlMb2NraWRzID0gbGFwcGVuZF9pbnQoUGFyYWxsZWxBcHBseUxvY2tpZHMsIGxvY2tpZCk7CisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCisvKiBIZWxwZXIgZnVuY3Rp b24gdG8gdGFrZSBhIGxvY2sgd2l0aCBsb2NraWQgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3Vu bG9jayh1aW50MTYgbG9ja2lkKQoreworCWlmICghbGlzdF9tZW1iZXJfaW50KFBhcmFsbGVsQXBw bHlMb2NraWRzLCBsb2NraWQpKQorCQlyZXR1cm47CisKKwlVbmxvY2tTaGFyZWRPYmplY3RGb3JT ZXNzaW9uKFN1YnNjcmlwdGlvblJlbGF0aW9uSWQsIE15U3Vic2NyaXB0aW9uLT5vaWQsCisJCQkJ CQkJCSBsb2NraWQsIGFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSA/CisJCQkJCQkJCSBBY2Nlc3NF eGNsdXNpdmVMb2NrOgorCQkJCQkJCQkgQWNjZXNzU2hhcmVMb2NrKTsKKworCVBhcmFsbGVsQXBw bHlMb2NraWRzID0gbGlzdF9kZWxldGVfaW50KFBhcmFsbGVsQXBwbHlMb2NraWRzLCBsb2NraWQp OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggMmNjMGFj OS4uMzAzNTU3ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCkBA IC02NTIsOSArNjUyLDEwIEBAIERlY29kZUNvbW1pdChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZiwKIAl7CiAJCWZvciAoaSA9IDA7IGkgPCBwYXJzZWQt Pm5zdWJ4YWN0czsgaSsrKQogCQl7Ci0JCQlSZW9yZGVyQnVmZmVyRm9yZ2V0KGN0eC0+cmVvcmRl ciwgcGFyc2VkLT5zdWJ4YWN0c1tpXSwgYnVmLT5vcmlncHRyKTsKKwkJCVJlb3JkZXJCdWZmZXJG b3JnZXQoY3R4LT5yZW9yZGVyLCBwYXJzZWQtPnN1YnhhY3RzW2ldLCBidWYtPm9yaWdwdHIsCisJ CQkJCQkJCWNvbW1pdF90aW1lKTsKIAkJfQotCQlSZW9yZGVyQnVmZmVyRm9yZ2V0KGN0eC0+cmVv cmRlciwgeGlkLCBidWYtPm9yaWdwdHIpOworCQlSZW9yZGVyQnVmZmVyRm9yZ2V0KGN0eC0+cmVv cmRlciwgeGlkLCBidWYtPm9yaWdwdHIsIGNvbW1pdF90aW1lKTsKIAogCQlyZXR1cm47CiAJfQpA QCAtODIyLDEwICs4MjMsMTEgQEAgRGVjb2RlQWJvcnQoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYsCiAJCWZvciAoaSA9IDA7IGkgPCBwYXJzZWQtPm5z dWJ4YWN0czsgaSsrKQogCQl7CiAJCQlSZW9yZGVyQnVmZmVyQWJvcnQoY3R4LT5yZW9yZGVyLCBw YXJzZWQtPnN1YnhhY3RzW2ldLAotCQkJCQkJCSAgIGJ1Zi0+cmVjb3JkLT5FbmRSZWNQdHIpOwor CQkJCQkJCSAgIGJ1Zi0+cmVjb3JkLT5FbmRSZWNQdHIsIGFib3J0X3RpbWUpOwogCQl9CiAKLQkJ UmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPnJlY29yZC0+RW5kUmVj UHRyKTsKKwkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPnJlY29y ZC0+RW5kUmVjUHRyLAorCQkJCQkJICAgYWJvcnRfdGltZSk7CiAJfQogCiAJLyogdXBkYXRlIHRo ZSBkZWNvZGluZyBzdGF0cyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9sYXVuY2hlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVu Y2hlci5jCmluZGV4IDczNTk0YzYuLmY0MzIzNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xhdW5jaGVyLmMKQEAgLTU1LDYgKzU1LDcgQEAKIC8qIEdVQyB2YXJpYWJsZXMg Ki8KIGludAkJCW1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSA0OwogaW50CQkJbWF4 X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uID0gMjsKK2ludAkJCW1heF9wYXJhbGxlbF9h cHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyOwogCiBMb2dpY2FsUmVwV29ya2VyICpN eUxvZ2ljYWxSZXBXb3JrZXIgPSBOVUxMOwogCkBAIC0xNTIsOCArMTUzLDEwIEBAIGdldF9zdWJz Y3JpcHRpb25fbGlzdCh2b2lkKQogICoKICAqIFRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGNsZWFu aW5nIHVwIHRoZSBzaGFyZWQgbWVtb3J5IGluIGNhc2UgdGhlIHdvcmtlcgogICogZmFpbHMgdG8g YXR0YWNoLgorICoKKyAqIFJldHVybiB3aGV0aGVyIHRoZSBhdHRhY2ggd2FzIHN1Y2Nlc3NmdWwu CiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgYm9vbAogV2FpdEZvclJlcGxpY2F0aW9uV29ya2Vy QXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIAkJCQkJCQkgICB1aW50MTYgZ2VuZXJh dGlvbiwKIAkJCQkJCQkgICBCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5kbGUpCkBAIC0xNjks MTEgKzE3MiwxMSBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdv cmtlciAqd29ya2VyLAogCiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExX X1NIQVJFRCk7CiAKLQkJLyogV29ya2VyIGVpdGhlciBkaWVkIG9yIGhhcyBzdGFydGVkOyBubyBu ZWVkIHRvIGRvIGFueXRoaW5nLiAqLworCQkvKiBXb3JrZXIgZWl0aGVyIGRpZWQgb3IgaGFzIHN0 YXJ0ZWQuIFJldHVybiBmYWxzZSBpZiBkaWVkLiAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNlIHx8 IHdvcmtlci0+cHJvYykKIAkJewogCQkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9j ayk7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gd29ya2VyLT5pbl91c2U7CiAJCX0KIAogCQlMV0xv Y2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKQEAgLTE4OCw3ICsxOTEsNyBAQCBXYWl0 Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCQkJ aWYgKGdlbmVyYXRpb24gPT0gd29ya2VyLT5nZW5lcmF0aW9uKQogCQkJCWxvZ2ljYWxyZXBfd29y a2VyX2NsZWFudXAod29ya2VyKTsKIAkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxv Y2spOwotCQkJcmV0dXJuOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJLyoKQEAgLTIxMCw2 ICsyMTMsOCBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtl ciAqd29ya2VyLAogLyoKICAqIFdhbGtzIHRoZSB3b3JrZXJzIGFycmF5IGFuZCBzZWFyY2hlcyBm b3Igb25lIHRoYXQgbWF0Y2hlcyBnaXZlbgogICogc3Vic2NyaXB0aW9uIGlkIGFuZCByZWxpZC4K KyAqCisgKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2Vy IG9yIHRhYmxlIHN5bmMgd29ya2VyLgogICovCiBMb2dpY2FsUmVwV29ya2VyICoKIGxvZ2ljYWxy ZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsIGJvb2wgb25seV9ydW5uaW5nKQpA QCAtMjI0LDYgKzIyOSwxMCBAQCBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE9pZCBzdWJpZCwgT2lk IHJlbGlkLCBib29sIG9ubHlfcnVubmluZykKIAl7CiAJCUxvZ2ljYWxSZXBXb3JrZXIgKncgPSAm TG9naWNhbFJlcEN0eC0+d29ya2Vyc1tpXTsKIAorCQkvKiBTa2lwIHBhcmFsbGVsIGFwcGx5IHdv cmtlcnMuICovCisJCWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIodykpCisJCQljb250aW51ZTsK KwogCQlpZiAody0+aW5fdXNlICYmIHctPnN1YmlkID09IHN1YmlkICYmIHctPnJlbGlkID09IHJl bGlkICYmCiAJCQkoIW9ubHlfcnVubmluZyB8fCB3LT5wcm9jKSkKIAkJewpAQCAtMjYwLDExICsy NjksMTMgQEAgbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9ubHlfcnVu bmluZykKIH0KIAogLyoKLSAqIFN0YXJ0IG5ldyBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciwgaWYg cG9zc2libGUuCisgKiBTdGFydCBuZXcgYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBvc3NpYmxlLgor ICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLgogICovCi12 b2lkCitib29sCiBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwg Y29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKLQkJCQkJCSBPaWQgcmVsaWQpCisJCQkJ CQkgT2lkIHJlbGlkLCBkc21faGFuZGxlIHN1Yndvcmtlcl9kc20pCiB7CiAJQmFja2dyb3VuZFdv cmtlciBiZ3c7CiAJQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqYmd3X2hhbmRsZTsKQEAgLTI3Myw3 ICsyODQsMTIgQEAgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQs IGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2VyaWQsCiAJaW50CQkJc2xvdCA9IDA7CiAJTG9n aWNhbFJlcFdvcmtlciAqd29ya2VyID0gTlVMTDsKIAlpbnQJCQluc3luY3dvcmtlcnM7CisJaW50 CQkJbnBhcmFsbGVsYXBwbHl3b3JrZXJzOwogCVRpbWVzdGFtcFR6IG5vdzsKKwlib29sCQlpc19w YXJhbGxlbF9hcHBseV93b3JrZXIgPSAoc3Vid29ya2VyX2RzbSAhPSBEU01fSEFORExFX0lOVkFM SUQpOworCisJLyogU2FuaXR5IGNoZWNrIC0gdGFibGVzeW5jIHdvcmtlciBjYW5ub3QgYmUgYSBz dWJ3b3JrZXIgKi8KKwlBc3NlcnQoIShpc19wYXJhbGxlbF9hcHBseV93b3JrZXIgJiYgT2lkSXNW YWxpZChyZWxpZCkpKTsKIAogCWVyZXBvcnQoREVCVUcxLAogCQkJKGVycm1zZ19pbnRlcm5hbCgi c3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVz XCIiLApAQCAtMzUxLDcgKzM2NywyNiBAQCByZXRyeToKIAlpZiAoT2lkSXNWYWxpZChyZWxpZCkg JiYgbnN5bmN3b3JrZXJzID49IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbikKIAl7 CiAJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwotCQlyZXR1cm47CisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwlucGFyYWxsZWxhcHBseXdvcmtlcnMgPSBsb2dpY2FscmVwX3Bh cmFsbGVsX2FwcGx5X3dvcmtlcl9jb3VudChzdWJpZCk7CisKKwkvKgorCSAqIFJldHVybiBmYWxz ZSBpZiB0aGUgbnVtYmVyIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgcmVhY2hlZCB0aGUgbGlt aXQKKwkgKiBwZXIgc3Vic2NyaXB0aW9uLgorCSAqLworCWlmIChpc19wYXJhbGxlbF9hcHBseV93 b3JrZXIgJiYKKwkJbnBhcmFsbGVsYXBwbHl3b3JrZXJzID49IG1heF9wYXJhbGxlbF9hcHBseV93 b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24pCisJeworCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBX b3JrZXJMb2NrKTsKKworCQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJ R1VSQVRJT05fTElNSVRfRVhDRUVERUQpLAorCQkJCSBlcnJtc2coIm91dCBvZiBwYXJhbGxlbCBh cHBseSB3b3JrZXJzIiksCisJCQkJIGVycmhpbnQoIllvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNl IG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24uIikpKTsKKworCQly ZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTM2NSw3ICs0MDAsNyBAQCByZXRyeToKIAkJCQko ZXJyY29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQpLAogCQkJCSBlcnJt c2coIm91dCBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBzbG90cyIpLAogCQkJCSBlcnJo aW50KCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93 b3JrZXJzLiIpKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFByZXBh cmUgdGhlIHdvcmtlciBzbG90LiAqLwpAQCAtMzgwLDYgKzQxNSw4IEBAIHJldHJ5OgogCXdvcmtl ci0+cmVsc3RhdGUgPSBTVUJSRUxfU1RBVEVfVU5LTk9XTjsKIAl3b3JrZXItPnJlbHN0YXRlX2xz biA9IEludmFsaWRYTG9nUmVjUHRyOwogCXdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPSBOVUxMOwor CXdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCA9IGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlciA/IE15 UHJvY1BpZCA6IEludmFsaWRQaWQ7CisJd29ya2VyLT5wYXJhbGxlbF9hcHBseSA9IGlzX3BhcmFs bGVsX2FwcGx5X3dvcmtlcjsKIAl3b3JrZXItPmxhc3RfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7 CiAJVElNRVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3NlbmRfdGltZSk7CiAJVElNRVNUQU1Q X05PQkVHSU4od29ya2VyLT5sYXN0X3JlY3ZfdGltZSk7CkBAIC0zOTcsMTkgKzQzNCwzNCBAQCBy ZXRyeToKIAkJQkdXT1JLRVJfQkFDS0VORF9EQVRBQkFTRV9DT05ORUNUSU9OOwogCWJndy5iZ3df c3RhcnRfdGltZSA9IEJnV29ya2VyU3RhcnRfUmVjb3ZlcnlGaW5pc2hlZDsKIAlzbnByaW50Zihi Z3cuYmd3X2xpYnJhcnlfbmFtZSwgQkdXX01BWExFTiwgInBvc3RncmVzIik7Ci0Jc25wcmludGYo Ymd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiQXBwbHlXb3JrZXJNYWluIik7CisK KwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0 aW9uX25hbWUsIEJHV19NQVhMRU4sICJQYXJhbGxlbEFwcGx5V29ya2VyTWFpbiIpOworCWVsc2UK KwkJc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiQXBwbHlXb3Jr ZXJNYWluIik7CisKIAlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCiAJCXNucHJpbnRmKGJndy5iZ3df bmFtZSwgQkdXX01BWExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBz dWJzY3JpcHRpb24gJXUgc3luYyAldSIsIHN1YmlkLCByZWxpZCk7CisJZWxzZSBpZiAoaXNfcGFy YWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4s CisJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBmb3Igc3Vi c2NyaXB0aW9uICV1Iiwgc3ViaWQpOwogCWVsc2UKIAkJc25wcmludGYoYmd3LmJnd19uYW1lLCBC R1dfTUFYTEVOLAotCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlw dGlvbiAldSIsIHN1YmlkKTsKLQlzbnByaW50ZihiZ3cuYmd3X3R5cGUsIEJHV19NQVhMRU4sICJs b2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciIpOworCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiBh cHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKKworCWlmIChpc19wYXJh bGxlbF9hcHBseV93b3JrZXIpCisJCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwg ImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgd29ya2VyIik7CisJZWxzZQorCQlzbnByaW50 ZihiZ3cuYmd3X3R5cGUsIEJHV19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciIp OwogCiAJYmd3LmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJfUkVTVEFSVDsKIAliZ3cuYmd3 X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7CiAJYmd3LmJnd19tYWluX2FyZyA9IEludDMyR2V0RGF0 dW0oc2xvdCk7CiAKKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQltZW1jcHkoYmd3 LmJnd19leHRyYSwgJnN1Yndvcmtlcl9kc20sIHNpemVvZihkc21faGFuZGxlKSk7CisKIAlpZiAo IVJlZ2lzdGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJmJndywgJmJnd19oYW5kbGUpKQogCXsK IAkJLyogRmFpbGVkIHRvIHN0YXJ0IHdvcmtlciwgc28gY2xlYW4gdXAgdGhlIHdvcmtlciBzbG90 LiAqLwpAQCAtNDIyLDMzICs0NzQsMjIgQEAgcmV0cnk6CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9D T05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkgZXJybXNnKCJvdXQgb2YgYmFja2dy b3VuZCB3b3JrZXIgc2xvdHMiKSwKIAkJCQkgZXJyaGludCgiWW91IG1pZ2h0IG5lZWQgdG8gaW5j cmVhc2UgbWF4X3dvcmtlcl9wcm9jZXNzZXMuIikpKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFs c2U7CiAJfQogCiAJLyogTm93IHdhaXQgdW50aWwgaXQgYXR0YWNoZXMuICovCi0JV2FpdEZvclJl cGxpY2F0aW9uV29ya2VyQXR0YWNoKHdvcmtlciwgZ2VuZXJhdGlvbiwgYmd3X2hhbmRsZSk7CisJ cmV0dXJuIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaCh3b3JrZXIsIGdlbmVyYXRpb24s IGJnd19oYW5kbGUpOwogfQogCiAvKgotICogU3RvcCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3 b3JrZXIgZm9yIHN1YmlkL3JlbGlkLCBpZiBhbnksIGFuZCB3YWl0IHVudGlsCi0gKiBpdCBkZXRh Y2hlcyBmcm9tIHRoZSBzbG90LgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc3RvcCB0aGUgd29y a2VyIGFuZCB3YWl0IGZvciBpdCB0byBkaWUuCiAgKi8KLXZvaWQKLWxvZ2ljYWxyZXBfd29ya2Vy X3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpCitzdGF0aWMgdm9pZAorbG9naWNhbHJlcF93b3Jr ZXJfc3RvcF9pbnRlcm5hbChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpCiB7Ci0JTG9naWNhbFJl cFdvcmtlciAqd29ya2VyOwogCXVpbnQxNgkJZ2VuZXJhdGlvbjsKIAotCUxXTG9ja0FjcXVpcmUo TG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7Ci0KLQl3b3JrZXIgPSBsb2dpY2FscmVw X3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2UpOwotCi0JLyogTm8gd29ya2VyLCBub3Ro aW5nIHRvIGRvLiAqLwotCWlmICghd29ya2VyKQotCXsKLQkJTFdMb2NrUmVsZWFzZShMb2dpY2Fs UmVwV29ya2VyTG9jayk7Ci0JCXJldHVybjsKLQl9CisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5N b2RlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpKTsKIAogCS8qCiAJICogUmVtZW1i ZXIgd2hpY2ggZ2VuZXJhdGlvbiB3YXMgb3VyIHdvcmtlciBzbyB3ZSBjYW4gY2hlY2sgaWYgd2hh dCB3ZSBzZWUKQEAgLTQ4NiwxMCArNTI3LDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQg c3ViaWQsIE9pZCByZWxpZCkKIAkJICogZGlmZmVyZW50LCBtZWFuaW5nIHRoYXQgYSBkaWZmZXJl bnQgd29ya2VyIGhhcyB0YWtlbiB0aGUgc2xvdC4KIAkJICovCiAJCWlmICghd29ya2VyLT5pbl91 c2UgfHwgd29ya2VyLT5nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pCi0JCXsKLQkJCUxXTG9ja1Jl bGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwogCQkJcmV0dXJuOwotCQl9CiAKIAkJLyogV29y a2VyIGhhcyBhc3NpZ25lZCBwcm9jLCBzbyBpdCBoYXMgc3RhcnRlZC4gKi8KIAkJaWYgKHdvcmtl ci0+cHJvYykKQEAgLTUyMyw2ICs1NjEsNTAgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQg c3ViaWQsIE9pZCByZWxpZCkKIAogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2Nr LCBMV19TSEFSRUQpOwogCX0KK30KKworLyoKKyAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGljYXRp b24gd29ya2VyIGZvciBzdWJpZC9yZWxpZCwgaWYgYW55LCBhbmQgd2FpdCB1bnRpbAorICogaXQg ZGV0YWNoZXMgZnJvbSB0aGUgc2xvdC4KKyAqLwordm9pZAorbG9naWNhbHJlcF93b3JrZXJfc3Rv cChPaWQgc3ViaWQsIE9pZCByZWxpZCkKK3sKKwlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXI7CisK KwlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOworCisJd29y a2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChzdWJpZCwgcmVsaWQsIGZhbHNlKTsKKworCWlm ICh3b3JrZXIpCisJeworCQlBc3NlcnQoIWlzUGFyYWxsZWxBcHBseVdvcmtlcih3b3JrZXIpKTsK KwkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3b3JrZXIpOworCX0KKworCUxXTG9j a1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOworfQorCisvKgorICogU3RvcCB0aGUgbG9n aWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgY29ycmVzcG9uZGluZyB0byB0aGUgaW5wdXQgc2xvdCBu dW1iZXIsCisgKiBhbmQgd2FpdCB1bnRpbCBpdCBkZXRhY2hlcyBmcm9tIHRoZSBzbG90LgorICov Cit2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2J5X3Nsb3QoaW50IHNsb3Rfbm8sIHVpbnQx NiBnZW5lcmF0aW9uKQoreworCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsKKworCUFzc2VydChz bG90X25vID49MCAmJiBzbG90X25vIDwgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vycyk7 CisKKwlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOworCisJ d29ya2VyID0gJkxvZ2ljYWxSZXBDdHgtPndvcmtlcnNbc2xvdF9ub107CisKKwkvKgorCSAqIE9u bHkgc3RvcCB0aGUgd29ya2VyIGlmIHRoZSBnZW5lcmF0aW9uIG1hdGNoZXMgYW5kIHRoZSB3b3Jr ZXIgaXMgYWxpdmUuCisJICovCisJaWYgKHdvcmtlci0+Z2VuZXJhdGlvbiA9PSBnZW5lcmF0aW9u ICYmIHdvcmtlci0+cHJvYykKKwkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3b3Jr ZXIpOwogCiAJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CiB9CkBAIC01OTUs MTEgKzY3NywzMiBAQCBsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2goaW50IHNsb3QpCiB9CiAKIC8q Ci0gKiBEZXRhY2ggdGhlIHdvcmtlciAoY2xlYW5zIHVwIHRoZSB3b3JrZXIgaW5mbykuCisgKiBT dG9wIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGlmIGFueSwgYW5kIGRldGFjaCB0aGUgbGVh ZGVyIGFwcGx5IHdvcmtlcgorICogKGNsZWFucyB1cCB0aGUgd29ya2VyIGluZm8pLgogICovCiBz dGF0aWMgdm9pZAogbG9naWNhbHJlcF93b3JrZXJfZGV0YWNoKHZvaWQpCiB7CisJLyogU3RvcCB0 aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gKi8KKwlpZiAoYW1fbGVhZGVyX2FwcGx5X3dvcmtl cigpKQorCXsKKwkJTGlzdAkgICAqd29ya2VyczsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJTFdM b2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKworCQl3b3JrZXJz ID0gbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgdHJ1 ZSk7CisJCWZvcmVhY2gobGMsIHdvcmtlcnMpCisJCXsKKwkJCUxvZ2ljYWxSZXBXb3JrZXIgKncg PSAoTG9naWNhbFJlcFdvcmtlciAqKSBsZmlyc3QobGMpOworCisJCQlpZiAoaXNQYXJhbGxlbEFw cGx5V29ya2VyKHcpKQorCQkJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwodyk7CisJ CX0KKworCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKKwl9CisKIAkvKiBC bG9jayBjb25jdXJyZW50IGFjY2Vzcy4gKi8KIAlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3Jr ZXJMb2NrLCBMV19FWENMVVNJVkUpOwogCkBAIC02MjIsNiArNzI1LDggQEAgbG9naWNhbHJlcF93 b3JrZXJfY2xlYW51cChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpCiAJd29ya2VyLT51c2VyaWQg PSBJbnZhbGlkT2lkOwogCXdvcmtlci0+c3ViaWQgPSBJbnZhbGlkT2lkOwogCXdvcmtlci0+cmVs aWQgPSBJbnZhbGlkT2lkOworCXdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCA9IEludmFsaWRQaWQ7 CisJd29ya2VyLT5wYXJhbGxlbF9hcHBseSA9IGZhbHNlOwogfQogCiAvKgpAQCAtNjUzLDYgKzc1 OCwxMiBAQCBsb2dpY2FscmVwX3dvcmtlcl9vbmV4aXQoaW50IGNvZGUsIERhdHVtIGFyZykKIAlp ZiAoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCAhPSBOVUxMKQogCQlGaWxlU2V0 RGVsZXRlQWxsKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpOwogCisJLyoKKwkg KiBSZWxlYXNlIGFsbCB0aGUgc2Vzc2lvbiBsZXZlbCBsb2NrIHRoYXQgY291bGQgYmUgaGVsZCBp biBwYXJhbGxlbCBhcHBseQorCSAqIG1vZGUuCisJICovCisJTG9ja1JlbGVhc2VBbGwoREVGQVVM VF9MT0NLTUVUSE9ELCB0cnVlKTsKKwogCUFwcGx5TGF1bmNoZXJXYWtldXAoKTsKIH0KIApAQCAt NjgxLDYgKzc5MiwzMyBAQCBsb2dpY2FscmVwX3N5bmNfd29ya2VyX2NvdW50KE9pZCBzdWJpZCkK IH0KIAogLyoKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCAoYnV0IG5vdCBuZWNl c3NhcmlseSBydW5uaW5nKSBwYXJhbGxlbCBhcHBseQorICogd29ya2VycyBmb3IgYSBzdWJzY3Jp cHRpb24uCisgKi8KK2ludAorbG9naWNhbHJlcF9wYXJhbGxlbF9hcHBseV93b3JrZXJfY291bnQo T2lkIHN1YmlkKQoreworCWludAkJCWk7CisJaW50CQkJcmVzID0gMDsKKworCUFzc2VydChMV0xv Y2tIZWxkQnlNZShMb2dpY2FsUmVwV29ya2VyTG9jaykpOworCisJLyoKKwkgKiBTY2FuIGFsbCBh dHRhY2hlZCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLCBvbmx5IGNvdW50aW5nIHRob3NlIHdoaWNo CisJICogaGF2ZSB0aGUgZ2l2ZW4gc3Vic2NyaXB0aW9uIGlkLgorCSAqLworCWZvciAoaSA9IDA7 IGkgPCBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzOyBpKyspCisJeworCQlMb2dpY2Fs UmVwV29ya2VyICp3ID0gJkxvZ2ljYWxSZXBDdHgtPndvcmtlcnNbaV07CisKKwkJaWYgKHctPnN1 YmlkID09IHN1YmlkICYmIGlzUGFyYWxsZWxBcHBseVdvcmtlcih3KSkKKwkJCXJlcysrOworCX0K KworCXJldHVybiByZXM7Cit9CisKKy8qCiAgKiBBcHBseUxhdW5jaGVyU2htZW1TaXplCiAgKgkJ Q29tcHV0ZSBzcGFjZSBuZWVkZWQgZm9yIHJlcGxpY2F0aW9uIGxhdW5jaGVyIHNoYXJlZCBtZW1v cnkKICAqLwpAQCAtODY5LDcgKzEwMDcsNyBAQCBBcHBseUxhdW5jaGVyTWFpbihEYXR1bSBtYWlu X2FyZykKIAkJCQkJd2FpdF90aW1lID0gd2FsX3JldHJpZXZlX3JldHJ5X2ludGVydmFsOwogCiAJ CQkJCWxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChzdWItPmRiaWQsIHN1Yi0+b2lkLCBzdWItPm5h bWUsCi0JCQkJCQkJCQkJCSBzdWItPm93bmVyLCBJbnZhbGlkT2lkKTsKKwkJCQkJCQkJCQkJIHN1 Yi0+b3duZXIsIEludmFsaWRPaWQsIERTTV9IQU5ETEVfSU5WQUxJRCk7CiAJCQkJfQogCQkJfQog CkBAIC05NTIsNiArMTA5MCwxMCBAQCBwZ19zdGF0X2dldF9zdWJzY3JpcHRpb24oUEdfRlVOQ1RJ T05fQVJHUykKIAkJaWYgKE9pZElzVmFsaWQoc3ViaWQpICYmIHdvcmtlci5zdWJpZCAhPSBzdWJp ZCkKIAkJCWNvbnRpbnVlOwogCisJCS8qIFNraXAgaWYgdGhpcyBpcyBhIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciAqLworCQlpZiAoaXNQYXJhbGxlbEFwcGx5V29ya2VyKCZ3b3JrZXIpKQorCQkJY29u dGludWU7CisKIAkJd29ya2VyX3BpZCA9IHdvcmtlci5wcm9jLT5waWQ7CiAKIAkJdmFsdWVzWzBd ID0gT2JqZWN0SWRHZXREYXR1bSh3b3JrZXIuc3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKaW5kZXggNzczNTgzYS4uMjZiZmMwZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAorKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCkBAIC0xLDQgKzEsNSBAQAog YmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAorICAnYXBwbHlwYXJhbGxlbHdvcmtlci5jJywKICAg J2RlY29kZS5jJywKICAgJ2xhdW5jaGVyLmMnLAogICAnbG9naWNhbC5jJywKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBmZjg1MTNlLi5kNjE2MGU2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCkBAIC0xMTYzLDEwICsxMTYzLDE0IEBA IGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBD b21taXREYXRhICpjb21taXRfZGF0YSkKIC8qCiAgKiBXcml0ZSBTVFJFQU0gQUJPUlQgdG8gdGhl IG91dHB1dCBzdHJlYW0uIE5vdGUgdGhhdCB4aWQgYW5kIHN1YnhpZCB3aWxsIGJlCiAgKiBzYW1l IGZvciB0aGUgdG9wLWxldmVsIHRyYW5zYWN0aW9uIGFib3J0LgorICoKKyAqIElmIHdyaXRlX2Fi b3J0X2luZm8gaXMgdHJ1ZSwgc2VuZCB0aGUgYWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGZpZWxk cywKKyAqIG90aGVyd2lzZSBkb24ndC4KICAqLwogdm9pZAogbG9naWNhbHJlcF93cml0ZV9zdHJl YW1fYWJvcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCSAgVHJh bnNhY3Rpb25JZCBzdWJ4aWQpCisJCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCwgWExvZ1Jl Y1B0ciBhYm9ydF9sc24sCisJCQkJCQkJICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lLCBib29sIHdy aXRlX2Fib3J0X2luZm8pCiB7CiAJcHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FMX1JFUF9NU0dfU1RS RUFNX0FCT1JUKTsKIApAQCAtMTE3NSwxOSArMTE3OSw0MCBAQCBsb2dpY2FscmVwX3dyaXRlX3N0 cmVhbV9hYm9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJLyogdHJhbnNh Y3Rpb24gSUQgKi8KIAlwcV9zZW5kaW50MzIob3V0LCB4aWQpOwogCXBxX3NlbmRpbnQzMihvdXQs IHN1YnhpZCk7CisKKwlpZiAod3JpdGVfYWJvcnRfaW5mbykKKwl7CisJCXBxX3NlbmRpbnQ2NChv dXQsIGFib3J0X2xzbik7CisJCXBxX3NlbmRpbnQ2NChvdXQsIGFib3J0X3RpbWUpOworCX0KIH0K IAogLyoKICAqIFJlYWQgU1RSRUFNIEFCT1JUIGZyb20gdGhlIG91dHB1dCBzdHJlYW0uCisgKgor ICogSWYgcmVhZF9hYm9ydF9pbmZvIGlzIHRydWUsIHJlYWQgdGhlIGFib3J0X2xzbiBhbmQgYWJv cnRfdGltZSBmaWVsZHMsCisgKiBvdGhlcndpc2UgZG9uJ3QuCiAgKi8KIHZvaWQKLWxvZ2ljYWxy ZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwgVHJhbnNhY3Rpb25JZCAqeGlkLAot CQkJCQkJCSBUcmFuc2FjdGlvbklkICpzdWJ4aWQpCitsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fi b3J0KFN0cmluZ0luZm8gaW4sCisJCQkJCQkJIExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFi b3J0X2RhdGEsCisJCQkJCQkJIGJvb2wgcmVhZF9hYm9ydF9pbmZvKQogewotCUFzc2VydCh4aWQg JiYgc3VieGlkKTsKKwlBc3NlcnQoYWJvcnRfZGF0YSk7CisKKwlhYm9ydF9kYXRhLT54aWQgPSBw cV9nZXRtc2dpbnQoaW4sIDQpOworCWFib3J0X2RhdGEtPnN1YnhpZCA9IHBxX2dldG1zZ2ludChp biwgNCk7CiAKLQkqeGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKLQkqc3VieGlkID0gcHFfZ2V0 bXNnaW50KGluLCA0KTsKKwlpZiAocmVhZF9hYm9ydF9pbmZvKQorCXsKKwkJYWJvcnRfZGF0YS0+ YWJvcnRfbHNuID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCQlhYm9ydF9kYXRhLT5hYm9ydF90aW1l ID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCX0KKwllbHNlCisJeworCQlhYm9ydF9kYXRhLT5hYm9y dF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJYWJvcnRfZGF0YS0+YWJvcnRfdGltZSA9IDA7 CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3Jk ZXJidWZmZXIuYwppbmRleCAyMGM5Y2QxLi5mNGZmYmI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtMjg1Myw3ICsyODUzLDggQEAg UmVvcmRlckJ1ZmZlckZpbmlzaFByZXBhcmVkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCwKICAqIGRpc2suCiAgKi8KIHZvaWQKLVJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVy QnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQorUmVvcmRlckJ1 ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0 ciBsc24sCisJCQkJICAgVGltZXN0YW1wVHogYWJvcnRfdGltZSkKIHsKIAlSZW9yZGVyQnVmZmVy VFhOICp0eG47CiAKQEAgLTI4NjQsNiArMjg2NSw4IEBAIFJlb3JkZXJCdWZmZXJBYm9ydChSZW9y ZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCWlmICh0 eG4gPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJdHhuLT54YWN0X3RpbWUuYWJvcnRfdGltZSA9IGFi b3J0X3RpbWU7CisKIAkvKiBGb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zIG5vdGlmeSB0aGUgcmVt b3RlIG5vZGUgYWJvdXQgdGhlIGFib3J0LiAqLwogCWlmIChyYnR4bl9pc19zdHJlYW1lZCh0eG4p KQogCXsKQEAgLTI5MzgsNyArMjk0MSw4IEBAIFJlb3JkZXJCdWZmZXJBYm9ydE9sZChSZW9yZGVy QnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCBvbGRlc3RSdW5uaW5nWGlkKQogICogdG8gdGhpcyB4 aWQgbWlnaHQgcmUtY3JlYXRlIHRoZSB0cmFuc2FjdGlvbiBpbmNvbXBsZXRlbHkuCiAgKi8KIHZv aWQKLVJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQg eGlkLCBYTG9nUmVjUHRyIGxzbikKK1Jlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZlciAq cmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJVGltZXN0YW1wVHog YWJvcnRfdGltZSkKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0eG47CiAKQEAgLTI5NDksNiArMjk1 Myw4IEBAIFJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAlpZiAodHhuID09IE5VTEwpCiAJCXJldHVybjsKIAor CXR4bi0+eGFjdF90aW1lLmFib3J0X3RpbWUgPSBhYm9ydF90aW1lOworCiAJLyogRm9yIHN0cmVh bWVkIHRyYW5zYWN0aW9ucyBub3RpZnkgdGhlIHJlbW90ZSBub2RlIGFib3V0IHRoZSBhYm9ydC4g Ki8KIAlpZiAocmJ0eG5faXNfc3RyZWFtZWQodHhuKSkKIAkJcmItPnN0cmVhbV9hYm9ydChyYiwg dHhuLCBsc24pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90 YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMK aW5kZXggOTRlODEzYS4uMWMxYThlNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC90YWJsZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jCkBAIC0xNCw3ICsxNCw3IEBACiAgKgkgIFRoZSBpbml0aWFsIGRhdGEg c3luY2hyb25pemF0aW9uIGlzIGRvbmUgc2VwYXJhdGVseSBmb3IgZWFjaCB0YWJsZSwKICAqCSAg aW4gYSBzZXBhcmF0ZSBhcHBseSB3b3JrZXIgdGhhdCBvbmx5IGZldGNoZXMgdGhlIGluaXRpYWwg c25hcHNob3QgZGF0YQogICoJICBmcm9tIHRoZSBwdWJsaXNoZXIgYW5kIHRoZW4gc3luY2hyb25p emVzIHRoZSBwb3NpdGlvbiBpbiB0aGUgc3RyZWFtIHdpdGgKLSAqCSAgdGhlIG1haW4gYXBwbHkg d29ya2VyLgorICoJICB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlci4KICAqCiAgKgkgIFRoZXJlIGFy ZSBzZXZlcmFsIHJlYXNvbnMgZm9yIGRvaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gdGhpcyB3YXk6 CiAgKgkgICAtIEl0IGFsbG93cyB1cyB0byBwYXJhbGxlbGl6ZSB0aGUgaW5pdGlhbCBkYXRhIHN5 bmNocm9uaXphdGlvbgpAQCAtMTUzLDcgKzE1Myw3IEBAIGZpbmlzaF9zeW5jX3dvcmtlcih2b2lk KQogCQkJCQlnZXRfcmVsX25hbWUoTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxpZCkpKSk7CiAJQ29t bWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQkvKiBGaW5kIHRoZSBtYWluIGFwcGx5IHdvcmtl ciBhbmQgc2lnbmFsIGl0LiAqLworCS8qIEZpbmQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5k IHNpZ25hbCBpdC4gKi8KIAlsb2dpY2FscmVwX3dvcmtlcl93YWtldXAoTXlMb2dpY2FsUmVwV29y a2VyLT5zdWJpZCwgSW52YWxpZE9pZCk7CiAKIAkvKiBTdG9wIGdyYWNlZnVsbHkgKi8KQEAgLTYw OSw3ICs2MDksOCBAQCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9hcHBseShYTG9nUmVjUHRy IGN1cnJlbnRfbHNuKQogCQkJCQkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5vaWQsCiAJCQkJCQkJ CQkJCQkgTXlTdWJzY3JpcHRpb24tPm5hbWUsCiAJCQkJCQkJCQkJCQkgTXlMb2dpY2FsUmVwV29y a2VyLT51c2VyaWQsCi0JCQkJCQkJCQkJCQkgcnN0YXRlLT5yZWxpZCk7CisJCQkJCQkJCQkJCQkg cnN0YXRlLT5yZWxpZCwKKwkJCQkJCQkJCQkJCSBEU01fSEFORExFX0lOVkFMSUQpOwogCQkJCQkJ aGVudHJ5LT5sYXN0X3N0YXJ0X3RpbWUgPSBub3c7CiAJCQkJCX0KIAkJCQl9CkBAIC02MzAsNiAr NjMxLDEzIEBAIHByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX2FwcGx5KFhMb2dSZWNQdHIgY3Vy cmVudF9sc24pCiB2b2lkCiBwcm9jZXNzX3N5bmNpbmdfdGFibGVzKFhMb2dSZWNQdHIgY3VycmVu dF9sc24pCiB7CisJLyoKKwkgKiBTa2lwIGZvciBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiBTZWUg cGFyYWxsZWxfYXBwbHlfY2FuX3N0YXJ0KCkgZm9yCisJICogZGV0YWlscy4KKwkgKi8KKwlpZiAo YW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCXJldHVybjsKKwogCWlmIChhbV90YWJsZXN5 bmNfd29ya2VyKCkpCiAJCXByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX3N5bmMoY3VycmVudF9s c24pOwogCWVsc2UKQEAgLTEyNDcsNyArMTI1NSw3IEBAIExvZ2ljYWxSZXBTeW5jVGFibGVTdGFy dChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAKIAkvKgogCSAqIEhlcmUgd2UgdXNlIHRo ZSBzbG90IG5hbWUgaW5zdGVhZCBvZiB0aGUgc3Vic2NyaXB0aW9uIG5hbWUgYXMgdGhlCi0JICog YXBwbGljYXRpb25fbmFtZSwgc28gdGhhdCBpdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbWFpbiBh cHBseSB3b3JrZXIsCisJICogYXBwbGljYXRpb25fbmFtZSwgc28gdGhhdCBpdCBpcyBkaWZmZXJl bnQgZnJvbSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciwKIAkgKiBzbyB0aGF0IHN5bmNocm9ub3Vz IHJlcGxpY2F0aW9uIGNhbiBkaXN0aW5ndWlzaCB0aGVtLgogCSAqLwogCUxvZ1JlcFdvcmtlcldh bFJjdkNvbm4gPQpAQCAtMTQ2MSw4ICsxNDY5LDggQEAgY29weV90YWJsZV9kb25lOgogCVNwaW5M b2NrUmVsZWFzZSgmTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxtdXRleCk7CiAKIAkvKgotCSAqIEZp bmFsbHksIHdhaXQgdW50aWwgdGhlIG1haW4gYXBwbHkgd29ya2VyIHRlbGxzIHVzIHRvIGNhdGNo IHVwIGFuZCB0aGVuCi0JICogcmV0dXJuIHRvIGxldCBMb2dpY2FsUmVwQXBwbHlMb29wIGRvIGl0 LgorCSAqIEZpbmFsbHksIHdhaXQgdW50aWwgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgdGVsbHMg dXMgdG8gY2F0Y2ggdXAgYW5kCisJICogdGhlbiByZXR1cm4gdG8gbGV0IExvZ2ljYWxSZXBBcHBs eUxvb3AgZG8gaXQuCiAJICovCiAJd2FpdF9mb3Jfd29ya2VyX3N0YXRlX2NoYW5nZShTVUJSRUxf U1RBVEVfQ0FUQ0hVUCk7CiAJcmV0dXJuIHNsb3RuYW1lOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggNTI1MGFlNy4uZmNlZWZmMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0yMiw4ICsyMiw1NSBAQAogICogU1RSRUFN RUQgVFJBTlNBQ1RJT05TCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFN0cmVhbWVkIHRy YW5zYWN0aW9ucyAobGFyZ2UgdHJhbnNhY3Rpb25zIGV4Y2VlZGluZyBhIG1lbW9yeSBsaW1pdCBv biB0aGUKLSAqIHVwc3RyZWFtKSBhcmUgbm90IGFwcGxpZWQgaW1tZWRpYXRlbHksIGJ1dCBpbnN0 ZWFkLCB0aGUgZGF0YSBpcyB3cml0dGVuCi0gKiB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIHRoZW4g YXBwbGllZCBhdCBvbmNlIHdoZW4gdGhlIGZpbmFsIGNvbW1pdCBhcnJpdmVzLgorICogdXBzdHJl YW0pIGFyZSBhcHBsaWVkIHVzaW5nIG9uZSBvZiB0d28gYXBwcm9hY2hlczoKKyAqCisgKiAxKSBQ YXJhbGxlbCBhcHBseSB3b3JrZXJzCisgKgorICogSWYgc3RyZWFtaW5nID0gcGFyYWxsZWwsIHdl IGFzc2lnbiBhIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKGlmCisgKiBhdmFpbGFibGUpIGFz IHNvb24gYXMgdGhlIHhhY3QncyBmaXJzdCBzdHJlYW0gaXMgcmVjZWl2ZWQuIFRoZSBsZWFkZXIg YXBwbHkKKyAqIHdvcmtlciB3aWxsIHNlbmQgY2hhbmdlcyB0byB0aGlzIG5ldyB3b3JrZXIgdmlh IHNoYXJlZCBtZW1vcnkuIFdlIGtlZXAgdGhpcworICogd29ya2VyIGFzc2lnbmVkIHRpbGwgdGhl IHRyYW5zYWN0aW9uIGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvcgorICogdGhl IHdvcmtlciB0byBmaW5pc2ggYXQgY29tbWl0LiBUaGlzIHByZXNlcnZlcyBjb21taXQgb3JkZXJp bmcgYW5kIGF2b2lkcworICogZmlsZSBJL08gaW4gbW9zdCBjYXNlcywgYWx0aG91Z2ggd2Ugc3Rp bGwgbmVlZCB0byBzcGlsbCB0byBhIGZpbGUgaWYgdGhlcmUKKyAqIGlzIG5vIHdvcmtlciBhdmFp bGFibGUuIEl0IGlzIGltcG9ydGFudCB0byBtYWludGFpbiBjb21taXQgb3JkZXIgdG8gYXZvaWQK KyAqIGZhaWx1cmVzIGR1ZSB0byAoYSkgdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzLCBzYXkgaWYg d2UgaW5zZXJ0IGEgcm93IGluIHRoZQorICogZmlyc3QgdHJhbnNhY3Rpb24gYW5kIHVwZGF0ZSBp dCBpbiB0aGUgc2Vjb25kIHRyYW5zYWN0aW9uIHRoZW4gYWxsb3dpbmcgdG8KKyAqIGFwcGx5IGJv dGggaW4gcGFyYWxsZWwgY2FuIGxlYWQgdG8gZmFpbHVyZSBpbiB0aGUgdXBkYXRlLiAoYikgZGVh ZGxvY2tzLAorICogYWxsb3dpbmcgdHJhbnNhY3Rpb25zIHRoYXQgdXBkYXRlIHRoZSBzYW1lIHNl dCBvZiByb3dzL3RhYmxlcyBpbiBvcHBvc2l0ZQorICogb3JkZXIgdG8gYmUgYXBwbGllZCBpbiBw YXJhbGxlbCBjYW4gbGVhZCB0byBkZWFkbG9ja3MuCisgKgorICogV2UgbWFpbnRhaW4gYSB3b3Jr ZXIgcG9vbCB0byBhdm9pZCByZXN0YXJ0aW5nIHdvcmtlcnMgZm9yIGVhY2ggc3RyZWFtaW5nCisg KiB0cmFuc2FjdGlvbi4gV2UgbWFpbnRhaW4gZWFjaCB3b3JrZXIncyBpbmZvcm1hdGlvbiBpbiB0 aGUKKyAqIFBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdC4gQWZ0ZXIgc3VjY2Vzc2Z1bGx5IGxhdW5j aGluZyBhIG5ldyB3b3JrZXIsIGl0cworICogaW5mb3JtYXRpb24gaXMgYWRkZWQgdG8gdGhlIFBh cmFsbGVsQXBwbHlXb3JrZXJzTGlzdC4gT25jZSB0aGUgd29ya2VyCisgKiBmaW5pc2hlcyBhcHBs eWluZyB0aGUgdHJhbnNhY3Rpb24sIHdlIG1hcmsgaXQgYXZhaWxhYmxlIGZvciByZS11c2UuIE5v dywKKyAqIGJlZm9yZSBzdGFydGluZyBhIG5ldyB3b3JrZXIgdG8gYXBwbHkgdGhlIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbiwgd2UgY2hlY2sKKyAqIHRoZSBsaXN0IGZvciBhbnkgYXZhaWxhYmxlIHdv cmtlci4gTm90ZSB0aGF0IHdlIG1haW50YWluIGEgbWF4aW11bSBvZiBoYWxmCisgKiB0aGUgbWF4 X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiB3b3JrZXJzIGluIHRoZSBw b29sIGFuZAorICogYWZ0ZXIgdGhhdCwgd2Ugc2ltcGx5IGV4aXQgdGhlIHdvcmtlciBhZnRlciBh cHBseWluZyB0aGUgdHJhbnNhY3Rpb24uCisgKgorICogWFhYIFRoaXMgd29ya2VyIHBvb2wgdGhy ZXNob2xkIGlzIGEgYml0IGFyYml0cmFyeSBhbmQgd2UgY2FuIHByb3ZpZGUgYSBHVUMKKyAqIHZh cmlhYmxlIGZvciB0aGlzIGluIHRoZSBmdXR1cmUgaWYgcmVxdWlyZWQuCisgKgorICogVGhlIGxl YWRlciBhcHBseSB3b3JrZXIgd2lsbCBjcmVhdGUgc2VwYXJhdGUgZHluYW1pYyBzaGFyZWQgbWVt b3J5IHNlZ21lbnQKKyAqIHdoZW4gZWFjaCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgc3RhcnRzLiBU aGUgcmVhc29uIGZvciB0aGlzIGRlc2lnbiBpcyB0aGF0CisgKiB3ZSBjYW5ub3QgY291bnQgaG93 IG1hbnkgd29ya2VycyB3aWxsIGJlIHN0YXJ0ZWQuIEl0IG1heSBiZSBwb3NzaWJsZSB0bworICog YWxsb2NhdGUgZW5vdWdoIHNoYXJlZCBtZW1vcnkgaW4gb25lIHNlZ21lbnQgYmFzZWQgb24gdGhl IG1heGltdW0gbnVtYmVyIG9mCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIChtYXhfcGFyYWxs ZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uKSwgYnV0IHRoaXMKKyAqIHdvdWxkIHdh c3RlIG1lbW9yeSBpZiBubyBwcm9jZXNzIGlzIGFjdHVhbGx5IHN0YXJ0ZWQuCisgKgorICogVGhl IGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IHdpbGwgY29udGFpbiAoYSkgYSBzaG1fbXEg dGhhdCBjYW4gYmUgdXNlZAorICogdG8gc2VuZCBjaGFuZ2VzIGluIHRoZSB0cmFuc2FjdGlvbiBm cm9tIGxlYWRlciBhcHBseSB3b3JrZXIgdG8gcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlciAoYikg YW5vdGhlciBzaG1fbXEgdGhhdCBjYW4gYmUgdXNlZCB0byBzZW5kIGVycm9ycyAoYW5kIG90aGVy CisgKiBtZXNzYWdlcyByZXBvcnRlZCB2aWEgZWxvZy9lcmVwb3J0KSBmcm9tIHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIgdG8gbGVhZGVyCisgKiBhcHBseSB3b3JrZXIgKGMpIG5lY2Vzc2FyeSBp bmZvcm1hdGlvbiB0byBiZSBzaGFyZWQgYW1vbmcgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlcnMg YW5kIGxlYWRlciBhcHBseSB3b3JrZXIgKGkuZS4gdGhlIG1lbWJlciBpbgorICogUGFyYWxsZWxB cHBseVdvcmtlclNoYXJlZCkuCisgKgorICogSWYgbm8gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlz IGF2YWlsYWJsZSB0byBoYW5kbGUgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uCisgKiB3ZSBmb2xs b3cgYXBwcm9hY2ggMi4KKyAqCisgKiAyKSBXcml0ZSB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIGFw cGx5IHdoZW4gdGhlIGZpbmFsIGNvbW1pdCBhcnJpdmVzCiAgKgogICogVW5saWtlIHRoZSByZWd1 bGFyIChub24tc3RyZWFtZWQpIGNhc2UsIGhhbmRsaW5nIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBo YXMKICAqIHRvIGhhbmRsZSBhYm9ydHMgb2YgYm90aCB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24g YW5kIHN1YnRyYW5zYWN0aW9ucy4gVGhpcwpAQCAtMjE5LDIwICsyNjYsMzYgQEAgdHlwZWRlZiBz dHJ1Y3QgQXBwbHlFeGVjdXRpb25EYXRhCiAJUGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91dGU7 CS8qIHBhcnRpdGlvbiByb3V0aW5nIGluZm8gKi8KIH0gQXBwbHlFeGVjdXRpb25EYXRhOwogCi0v KiBTdHJ1Y3QgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIGFwcGx5IGVycmNvbnRleHQgaW5mb3Jt YXRpb24gKi8KLXR5cGVkZWYgc3RydWN0IEFwcGx5RXJyb3JDYWxsYmFja0FyZworLyoKKyAqIFdo YXQgYWN0aW9uIHRvIHRha2UgZm9yIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiBUUkFOU19MRUFE RVJfQVBQTFkgbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5k IGNoYW5nZXMKKyAqIG9mIHRoZSB0cmFuc2FjdGlvbiBhcmUgYXBwbGllZCBkaXJlY3RseSBpbiB0 aGUgd29ya2VyLgorICoKKyAqIFRSQU5TX0xFQURFUl9TRVJJQUxJWkUgbWVhbnMgdGhhdCB3ZSBh cmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgb3IgdGFibGUKKyAqIHN5bmMgd29ya2VyLiBD aGFuZ2VzIGFyZSB3cml0dGVuIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhlbiBhcHBsaWVkIHdo ZW4KKyAqIHRoZSBmaW5hbCBjb21taXQgYXJyaXZlcy4KKyAqCisgKiBUUkFOU19MRUFERVJfU0VO RF9UT19QQVJBTExFTCBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtl cgorICogYW5kIG5lZWQgdG8gc2VuZCB0aGUgY2hhbmdlcyB0byB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyLgorICoKKyAqIFRSQU5TX1BBUkFMTEVMX0FQUExZIG1lYW5zIHRoYXQgd2UgYXJlIGlu IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgYW5kCisgKiBjaGFuZ2VzIG9mIHRoZSB0cmFuc2Fj dGlvbiBhcmUgYXBwbGllZCBkaXJlY3RseSBpbiB0aGUgd29ya2VyLgorICovCit0eXBlZGVmIGVu dW0KIHsKLQlMb2dpY2FsUmVwTXNnVHlwZSBjb21tYW5kOwkvKiAwIGlmIGludmFsaWQgKi8KLQlM b2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbDsKLQotCS8qIFJlbW90ZSBub2RlIGluZm9ybWF0aW9u ICovCi0JaW50CQkJcmVtb3RlX2F0dG51bTsJLyogLTEgaWYgaW52YWxpZCAqLwotCVRyYW5zYWN0 aW9uSWQgcmVtb3RlX3hpZDsKLQlYTG9nUmVjUHRyCWZpbmlzaF9sc247Ci0JY2hhcgkgICAqb3Jp Z2luX25hbWU7Ci19IEFwcGx5RXJyb3JDYWxsYmFja0FyZzsKLQotc3RhdGljIEFwcGx5RXJyb3JD YWxsYmFja0FyZyBhcHBseV9lcnJvcl9jYWxsYmFja19hcmcgPQorCS8qIFRoZSBhY3Rpb24gZm9y IG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zLiAqLworCVRSQU5TX0xFQURFUl9BUFBMWSwKKwor CS8qIEFjdGlvbnMgZm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMuICovCisJVFJBTlNfTEVBREVS X1NFUklBTElaRSwKKwlUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkUsCisJVFJBTlNfTEVB REVSX1NFTkRfVE9fUEFSQUxMRUwsCisJVFJBTlNfUEFSQUxMRUxfQVBQTFkKK30gVHJhbnNBcHBs eUFjdGlvbjsKKworLyogZXJyY29udGV4dCB0cmFja2VyICovCitBcHBseUVycm9yQ2FsbGJhY2tB cmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnID0KIHsKIAkuY29tbWFuZCA9IDAsCiAJLnJlbCA9 IE5VTEwsCkBAIC0yNDIsNyArMzA1LDkgQEAgc3RhdGljIEFwcGx5RXJyb3JDYWxsYmFja0FyZyBh cHBseV9lcnJvcl9jYWxsYmFja19hcmcgPQogCS5vcmlnaW5fbmFtZSA9IE5VTEwsCiB9OwogCi1z dGF0aWMgTWVtb3J5Q29udGV4dCBBcHBseU1lc3NhZ2VDb250ZXh0ID0gTlVMTDsKK0Vycm9yQ29u dGV4dENhbGxiYWNrICphcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gTlVMTDsKKworTWVtb3J5 Q29udGV4dCBBcHBseU1lc3NhZ2VDb250ZXh0ID0gTlVMTDsKIE1lbW9yeUNvbnRleHQgQXBwbHlD b250ZXh0ID0gTlVMTDsKIAogLyogcGVyIHN0cmVhbSBjb250ZXh0IGZvciBzdHJlYW1pbmcgdHJh bnNhY3Rpb25zICovCkBAIC0yNTEsMjcgKzMxNiwzOCBAQCBzdGF0aWMgTWVtb3J5Q29udGV4dCBM b2dpY2FsU3RyZWFtaW5nQ29udGV4dCA9IE5VTEw7CiBXYWxSZWNlaXZlckNvbm4gKkxvZ1JlcFdv cmtlcldhbFJjdkNvbm4gPSBOVUxMOwogCiBTdWJzY3JpcHRpb24gKk15U3Vic2NyaXB0aW9uID0g TlVMTDsKLXN0YXRpYyBib29sIE15U3Vic2NyaXB0aW9uVmFsaWQgPSBmYWxzZTsKK2Jvb2wJCU15 U3Vic2NyaXB0aW9uVmFsaWQgPSBmYWxzZTsKIAogYm9vbAkJaW5fcmVtb3RlX3RyYW5zYWN0aW9u ID0gZmFsc2U7CiBzdGF0aWMgWExvZ1JlY1B0ciByZW1vdGVfZmluYWxfbHNuID0gSW52YWxpZFhM b2dSZWNQdHI7CiAKIC8qIGZpZWxkcyB2YWxpZCBvbmx5IHdoZW4gcHJvY2Vzc2luZyBzdHJlYW1l ZCB0cmFuc2FjdGlvbiAqLwotc3RhdGljIGJvb2wgaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBm YWxzZTsKK2Jvb2wgaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKKworLyogSXMgc3dp dGNoaW5nIGZyb20gcGFyYWxsZWwgYXBwbHkgbW9kZSB0byBzZXJpYWxpemUgbW9kZT8gKi8KK2Jv b2wgc3dpdGNoaW5nX3RvX3NlcmlhbGl6ZSA9IGZhbHNlOwogCiBzdGF0aWMgVHJhbnNhY3Rpb25J ZCBzdHJlYW1feGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKIC8qCisgKiBUaGUgbnVtYmVy IG9mIGNoYW5nZXMgc2VudCB0byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGR1cmluZyBvbmUgc3Ry ZWFtaW5nCisgKiBibG9jay4KKyAqLworc3RhdGljIHVpbnQzMiBwYXJhbGxlbF9zdHJlYW1fbmNo YW5nZXMgPSAwOworCisvKgogICogV2UgZW5hYmxlIHNraXBwaW5nIGFsbCBkYXRhIG1vZGlmaWNh dGlvbiBjaGFuZ2VzIChJTlNFUlQsIFVQREFURSwgZXRjLikgZm9yCiAgKiB0aGUgc3Vic2NyaXB0 aW9uIGlmIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24ncyBmaW5pc2ggTFNOIG1hdGNoZXMgdGhlIHN1 YnNraXBsc24uCiAgKiBPbmNlIHdlIHN0YXJ0IHNraXBwaW5nIGNoYW5nZXMsIHdlIGRvbid0IHN0 b3AgaXQgdW50aWwgd2Ugc2tpcCBhbGwgY2hhbmdlcyBvZgogICogdGhlIHRyYW5zYWN0aW9uIGV2 ZW4gaWYgcGdfc3Vic2NyaXB0aW9uIGlzIHVwZGF0ZWQgYW5kIE15U3Vic2NyaXB0aW9uLT5za2lw bHNuCi0gKiBnZXRzIGNoYW5nZWQgb3IgcmVzZXQgZHVyaW5nIHRoYXQuIEFsc28sIGluIHN0cmVh bWluZyB0cmFuc2FjdGlvbiBjYXNlcywgd2UKLSAqIGRvbid0IHNraXAgcmVjZWl2aW5nIGFuZCBz cG9vbGluZyB0aGUgY2hhbmdlcyBzaW5jZSB3ZSBkZWNpZGUgd2hldGhlciBvciBub3QKKyAqIGdl dHMgY2hhbmdlZCBvciByZXNldCBkdXJpbmcgdGhhdC4gQWxzbywgaW4gc3RyZWFtaW5nIHRyYW5z YWN0aW9uIGNhc2VzIChzdHJlYW1pbmcgPSBvbiksCisgKiB3ZSBkb24ndCBza2lwIHJlY2Vpdmlu ZyBhbmQgc3Bvb2xpbmcgdGhlIGNoYW5nZXMgc2luY2Ugd2UgZGVjaWRlIHdoZXRoZXIgb3Igbm90 CiAgKiB0byBza2lwIGFwcGx5aW5nIHRoZSBjaGFuZ2VzIHdoZW4gc3RhcnRpbmcgdG8gYXBwbHkg Y2hhbmdlcy4gVGhlIHN1YnNraXBsc24gaXMKICAqIGNsZWFyZWQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5 IHNraXBwaW5nIHRoZSB0cmFuc2FjdGlvbiBvciBhcHBseWluZyBub24tZW1wdHkKICAqIHRyYW5z YWN0aW9uLiBUaGUgbGF0dGVyIHByZXZlbnRzIHRoZSBtaXN0YWtlbmx5IHNwZWNpZmllZCBzdWJz a2lwbHNuIGZyb20KLSAqIGJlaW5nIGxlZnQuCisgKiBiZWluZyBsZWZ0LiBOb3RlIHRoYXQgd2Ug Y2Fubm90IHNraXAgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgd2hlbiB1c2luZworICogcGFy YWxsZWwgYXBwbHkgd29ya2VycyBiZWNhdXNlIHdlIGNhbm5vdCBnZXQgdGhlIGZpbmlzaCBMU04g YmVmb3JlCisgKiBhcHBseWluZyB0aGUgY2hhbmdlcy4KICAqLwogc3RhdGljIFhMb2dSZWNQdHIg c2tpcF94YWN0X2ZpbmlzaF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKICNkZWZpbmUgaXNfc2tp cHBpbmdfY2hhbmdlcygpICh1bmxpa2VseSghWExvZ1JlY1B0cklzSW52YWxpZChza2lwX3hhY3Rf ZmluaXNoX2xzbikpKQpAQCAtMzE1LDE5ICszOTEsMTYgQEAgc3RhdGljIHZvaWQgc3RyZWFtX2Ns ZWFudXBfZmlsZXMoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCk7CiBzdGF0aWMgdm9pZCBz dHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJIGJv b2wgZmlyc3Rfc2VnbWVudCk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fd3JpdGVfY2hhbmdlKGNoYXIg YWN0aW9uLCBTdHJpbmdJbmZvIHMpOworc3RhdGljIHZvaWQgc3RyZWFtX3dyaXRlX21lc3NhZ2Uo VHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMsCisJCQkJCQkJCSBi b29sIGNyZWF0ZV9maWxlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV9jbG9zZV9maWxlKHZvaWQpOwog CiBzdGF0aWMgdm9pZCBzZW5kX2ZlZWRiYWNrKFhMb2dSZWNQdHIgcmVjdnBvcywgYm9vbCBmb3Jj ZSwgYm9vbCByZXF1ZXN0UmVwbHkpOwogCiBzdGF0aWMgdm9pZCBzdG9yZV9mbHVzaF9wb3NpdGlv bihYTG9nUmVjUHRyIHJlbW90ZV9sc24pOwogCi1zdGF0aWMgdm9pZCBtYXliZV9yZXJlYWRfc3Vi c2NyaXB0aW9uKHZvaWQpOwotCiBzdGF0aWMgdm9pZCBEaXNhYmxlU3Vic2NyaXB0aW9uQW5kRXhp dCh2b2lkKTsKIAotLyogcHJvdG90eXBlIG5lZWRlZCBiZWNhdXNlIG9mIHN0cmVhbV9jb21taXQg Ki8KLXN0YXRpYyB2b2lkIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcyk7Ci0KIHN0YXRpYyB2 b2lkIGFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEgKmNv bW1pdF9kYXRhKTsKIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRsZV9pbnNlcnRfaW50ZXJuYWwoQXBw bHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJCQkJCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVsaW5m bywKQEAgLTM1MSwxOSArNDI0LDE4IEBAIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRsZV90dXBsZV9y b3V0aW5nKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAvKiBDb21wdXRlIEdJRCBmb3IgdHdv X3BoYXNlIHRyYW5zYWN0aW9ucyAqLwogc3RhdGljIHZvaWQgVHdvUGhhc2VUcmFuc2FjdGlvbkdp ZChPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyICpnaWQsIGludCBzemdpZCk7CiAK LS8qIENvbW1vbiBzdHJlYW1pbmcgZnVuY3Rpb24gdG8gYXBwbHkgYWxsIHRoZSBzcG9vbGVkIG1l c3NhZ2VzICovCi1zdGF0aWMgdm9pZCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7Ci0KIC8qIEZ1bmN0aW9ucyBmb3Igc2tpcHBpbmcgY2hh bmdlcyAqLwogc3RhdGljIHZvaWQgbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhYTG9nUmVj UHRyIGZpbmlzaF9sc24pOwogc3RhdGljIHZvaWQgc3RvcF9za2lwcGluZ19jaGFuZ2VzKHZvaWQp Owogc3RhdGljIHZvaWQgY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKFhMb2dSZWNQdHIgZmlu aXNoX2xzbik7CiAKIC8qIEZ1bmN0aW9ucyBmb3IgYXBwbHkgZXJyb3IgY2FsbGJhY2sgKi8KLXN0 YXRpYyB2b2lkIGFwcGx5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CiBzdGF0aWMgaW5saW5l IHZvaWQgc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChUcmFuc2FjdGlvbklkIHhpZCwgWExv Z1JlY1B0ciBsc24pOwogc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2FwcGx5X2Vycm9yX2NvbnRl eHRfaW5mbyh2b2lkKTsKIAorc3RhdGljIFRyYW5zQXBwbHlBY3Rpb24gZ2V0X3RyYW5zYWN0aW9u X2FwcGx5X2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkJCQkJCQkgUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKip3aW5mbyk7CisKIC8qCiAgKiBGb3JtIHRoZSBvcmlnaW4gbmFtZSBm b3IgdGhlIHN1YnNjcmlwdGlvbi4KICAqCkBAIC0zOTMsMTkgKzQ2NSw0MiBAQCBSZXBsaWNhdGlv bk9yaWdpbk5hbWVGb3JMb2dpY2FsUmVwKE9pZCBzdWJvaWQsIE9pZCByZWxpZCwKICAqCiAgKiBU aGlzIGlzIG1haW5seSBuZWVkZWQgZm9yIGluaXRpYWwgcmVsYXRpb24gZGF0YSBzeW5jIGFzIHRo YXQgcnVucyBpbgogICogc2VwYXJhdGUgd29ya2VyIHByb2Nlc3MgcnVubmluZyBpbiBwYXJhbGxl bCBhbmQgd2UgbmVlZCBzb21lIHdheSB0byBza2lwCi0gKiBjaGFuZ2VzIGNvbWluZyB0byB0aGUg bWFpbiBhcHBseSB3b3JrZXIgZHVyaW5nIHRoZSBzeW5jIG9mIGEgdGFibGUuCisgKiBjaGFuZ2Vz IGNvbWluZyB0byB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBkdXJpbmcgdGhlIHN5bmMgb2YgYSB0 YWJsZS4KICAqCiAgKiBOb3RlIHdlIG5lZWQgdG8gZG8gc21hbGxlciBvciBlcXVhbHMgY29tcGFy aXNvbiBmb3IgU1lOQ0RPTkUgc3RhdGUgYmVjYXVzZQogICogaXQgbWlnaHQgaG9sZCBwb3NpdGlv biBvZiBlbmQgb2YgaW5pdGlhbCBzbG90IGNvbnNpc3RlbnQgcG9pbnQgV0FMCiAgKiByZWNvcmQg KyAxIChpZSBzdGFydCBvZiBuZXh0IHJlY29yZCkgYW5kIG5leHQgcmVjb3JkIGNhbiBiZSBDT01N SVQgb2YKICAqIHRyYW5zYWN0aW9uIHdlIGFyZSBub3cgcHJvY2Vzc2luZyAod2hpY2ggaXMgd2hh dCB3ZSBzZXQgcmVtb3RlX2ZpbmFsX2xzbgogICogdG8gaW4gYXBwbHlfaGFuZGxlX2JlZ2luKS4K KyAqCisgKiBOb3RlIHRoYXQgZm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgdGhhdCBhcmUgYmVp bmcgYXBwbGllZCBpbiB0aGUgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlciwgd2UgZGlzYWxsb3cg YXBwbHlpbmcgY2hhbmdlcyBvbiBhIHRhYmxlIHRoYXQgaXMgbm90IGluCisgKiB0aGUgUkVBRFkg c3RhdGUsIGJlY2F1c2Ugd2UgY2Fubm90IGRlY2lkZSB3aGV0aGVyIHRvIGFwcGx5IHRoZSBjaGFu Z2UgYXMgd2UKKyAqIHdvbid0IGtub3cgcmVtb3RlX2ZpbmFsX2xzbiBieSB0aGF0IHRpbWUuCisg KgorICogV2UgYWxyZWFkeSBjaGVja2VkIHRoaXMgaW4gcGFyYWxsZWxfYXBwbHlfY2FuX3N0YXJ0 KCkgYmVmb3JlIGFzc2lnbmluZyB0aGUKKyAqIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB0byB0aGUg cGFyYWxsZWwgd29ya2VyLCBidXQgaXQgYWxzbyBuZWVkcyB0byBiZQorICogY2hlY2tlZCBoZXJl IGJlY2F1c2UgaWYgdGhlIHVzZXIgZXhlY3V0ZXMgQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZS RVNICisgKiBQVUJMSUNBVElPTiBpbiBwYXJhbGxlbCwgdGhlIG5ldyB0YWJsZSBjYW4gYmUgYWRk ZWQgdG8gcGdfc3Vic2NyaXB0aW9uX3JlbAorICogd2hpbGUgYXBwbHlpbmcgdGhpcyB0cmFuc2Fj dGlvbi4KICAqLwogc3RhdGljIGJvb2wKIHNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwoTG9n aWNhbFJlcFJlbE1hcEVudHJ5ICpyZWwpCiB7CiAJaWYgKGFtX3RhYmxlc3luY193b3JrZXIoKSkK IAkJcmV0dXJuIE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQgPT0gcmVsLT5sb2NhbHJlbG9pZDsK KwllbHNlIGlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwl7CisJCWlmIChyZWwtPnN0 YXRlICE9IFNVQlJFTF9TVEFURV9SRUFEWSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJy bXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBmb3Igc3Vic2Ny aXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AiLAorCQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSwK KwkJCQkJIGVycmRldGFpbCgiQ2Fubm90IGhhbmRsZSBzdHJlYW1lZCByZXBsaWNhdGlvbiB0cmFu c2FjdGlvbiB1c2luZyBwYXJhbGxlbCAiCisJCQkJCQkJICAgImFwcGx5IHdvcmtlcnMgdW50aWwg YWxsIHRhYmxlcyBhcmUgc3luY2hyb25pemVkLiIpKSk7CisKKwkJcmV0dXJuIHRydWU7CisJfQog CWVsc2UKIAkJcmV0dXJuIChyZWwtPnN0YXRlID09IFNVQlJFTF9TVEFURV9SRUFEWSB8fAogCQkJ CShyZWwtPnN0YXRlID09IFNVQlJFTF9TVEFURV9TWU5DRE9ORSAmJgpAQCAtNDUxLDQzICs1NDYs OTMgQEAgZW5kX3JlcGxpY2F0aW9uX3N0ZXAodm9pZCkKIH0KIAogLyoKLSAqIEhhbmRsZSBzdHJl YW1lZCB0cmFuc2FjdGlvbnMuCisgKiBIYW5kbGUgc3RyZWFtZWQgdHJhbnNhY3Rpb25zIGZvciBi b3RoIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCB0aGUgcGFyYWxsZWwKKyAqIGFwcGx5IHdv cmtlcnMuCisgKgorICogSW4gc3RyZWFtaW5nIGNhc2UgKHJlY2VpdmluZyBhIGJsb2NrIG9mIHN0 cmVhbWVkIHRyYW5zYWN0aW9uKSwgZm9yCisgKiBTVUJTVFJFQU1fT04gbW9kZSwgc2ltcGx5IHJl ZGlyZWN0IGl0IHRvIGEgZmlsZSBmb3IgdGhlIHByb3BlciB0b3BsZXZlbAorICogdHJhbnNhY3Rp b24sIGFuZCBmb3IgU1VCU1RSRUFNX1BBUkFMTEVMIG1vZGUsIHNlbmQgdGhlIGNoYW5nZXMgdG8g cGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlcnMgKExPR0lDQUxfUkVQX01TR19SRUxBVElPTiBvciBM T0dJQ0FMX1JFUF9NU0dfVFlQRSBjaGFuZ2VzCisgKiB3aWxsIGJlIGFwcGxpZWQgYnkgYm90aCBs ZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzKS4KICAqCi0gKiBJ ZiBpbiBzdHJlYW1pbmcgbW9kZSAocmVjZWl2aW5nIGEgYmxvY2sgb2Ygc3RyZWFtZWQgdHJhbnNh Y3Rpb24pLCB3ZQotICogc2ltcGx5IHJlZGlyZWN0IGl0IHRvIGEgZmlsZSBmb3IgdGhlIHByb3Bl ciB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KKyAqIEZvciBub24tc3RyZWFtZWQgdHJhbnNhY3Rpb25z LCByZXR1cm5zIGZhbHNlLgorICogRm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9ucywgcmV0dXJucyB0 cnVlIGlmIGluIGxlYWRlciBhcHBseSB3b3JrZXIsIGZhbHNlCisgKiBvdGhlcndpc2UuCiAgKgot ICogUmV0dXJucyB0cnVlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbnMsIGZhbHNlIG90aGVyd2lz ZSAocmVndWxhciBtb2RlKS4KKyAqIEV4Y2VwdGlvbjogSWYgdGhlIG1lc3NhZ2UgYmVpbmcgcHJv Y2Vzc2VkIGlzIExPR0lDQUxfUkVQX01TR19SRUxBVElPTgorICogb3IgTE9HSUNBTF9SRVBfTVNH X1RZUEUsIHJldHVybiBmYWxzZSBldmVuIGlmIHRoZSBtZXNzYWdlIG5lZWRzIHRvIGJlIHNlbnQK KyAqIHRvIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgogICovCiBzdGF0aWMgYm9vbAogaGFuZGxl X3N0cmVhbWVkX3RyYW5zYWN0aW9uKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5m byBzKQogewotCVRyYW5zYWN0aW9uSWQgeGlkOworCVRyYW5zYWN0aW9uSWQgY3VycmVudF94aWQ7 CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBw bHlfYWN0aW9uOworCVN0cmluZ0luZm9EYXRhCW9yaWdpbl9tc2c7CisKKwlhcHBseV9hY3Rpb24g PSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHN0cmVhbV94aWQsICZ3aW5mbyk7CiAKIAkv KiBub3QgaW4gc3RyZWFtaW5nIG1vZGUgKi8KLQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9u KQorCWlmIChhcHBseV9hY3Rpb24gPT0gVFJBTlNfTEVBREVSX0FQUExZKQogCQlyZXR1cm4gZmFs c2U7CiAKLQlBc3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwogCUFzc2VydChUcmFuc2FjdGlvbklk SXNWYWxpZChzdHJlYW1feGlkKSk7CiAKKwlvcmlnaW5fbXNnID0gKnM7CisKIAkvKgogCSAqIFdl IHNob3VsZCBoYXZlIHJlY2VpdmVkIFhJRCBvZiB0aGUgc3VieGFjdCBhcyB0aGUgZmlyc3QgcGFy dCBvZiB0aGUKIAkgKiBtZXNzYWdlLCBzbyBleHRyYWN0IGl0LgogCSAqLwotCXhpZCA9IHBxX2dl dG1zZ2ludChzLCA0KTsKKwljdXJyZW50X3hpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKIAotCWlm ICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlk KGN1cnJlbnRfeGlkKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiaW52YWxpZCB0cmFuc2Fj dGlvbiBJRCBpbiBzdHJlYW1lZCByZXBsaWNhdGlvbiB0cmFuc2FjdGlvbiIpKSk7CiAKLQkvKiBB ZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAodW5sZXNzIGFscmVhZHkgdGhlcmUpLiAq LwotCXN1YnhhY3RfaW5mb19hZGQoeGlkKTsKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikKKwl7CisJ CWNhc2UgVFJBTlNfTEVBREVSX1NFUklBTElaRToKKwkJY2FzZSBUUkFOU19MRUFERVJfUEFSVElB TF9TRVJJQUxJWkU6CisJCQl7CisJCQkJQXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAotCS8q IHdyaXRlIHRoZSBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmlsZSAqLwotCXN0cmVhbV93cml0ZV9j aGFuZ2UoYWN0aW9uLCBzKTsKKwkJCQkvKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJh eSAodW5sZXNzIGFscmVhZHkgdGhlcmUpLiAqLworCQkJCXN1YnhhY3RfaW5mb19hZGQoY3VycmVu dF94aWQpOworCisJCQkJLyogV3JpdGUgdGhlIGNoYW5nZSB0byB0aGUgY3VycmVudCBmaWxlICov CisJCQkJc3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sCisJCQkJCQkJCQlhcHBseV9hY3Rpb24g PT0gVFJBTlNfTEVBREVSX1NFUklBTElaRSA/CisJCQkJCQkJCQlzIDogJm9yaWdpbl9tc2cpOwor CQkJCXJldHVybiB0cnVlOworCQkJfQorCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFS QUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQlwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEo d2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQlwYXJhbGxlbF9zdHJlYW1fbmNoYW5nZXMgKz0g MTsKKworCQkJLyoKKwkJCSAqIFhYWCBUaGUgcHVibGlzaGVyIHNpZGUgZG9lc24ndCBhbHdheXMg c2VuZCByZWxhdGlvbi90eXBlIHVwZGF0ZQorCQkJICogbWVzc2FnZXMgYWZ0ZXIgdGhlIHN0cmVh bWluZyB0cmFuc2FjdGlvbiwgc28gYWxzbyB1cGRhdGUgdGhlCisJCQkgKiByZWxhdGlvbi90eXBl IGluIGxlYWRlciBhcHBseSB3b3JrZXIuIFNlZSBmdW5jdGlvbgorCQkJICogY2xlYW51cF9yZWxf c3luY19jYWNoZS4KKwkJCSAqLworCQkJcmV0dXJuIChhY3Rpb24gIT0gTE9HSUNBTF9SRVBfTVNH X1JFTEFUSU9OICYmCisJCQkJCWFjdGlvbiAhPSBMT0dJQ0FMX1JFUF9NU0dfVFlQRSk7CiAKLQly ZXR1cm4gdHJ1ZTsKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJCS8qIERlZmluZSBh IHNhdmVwb2ludCBmb3IgYSBzdWJ4YWN0IGlmIG5lZWRlZC4gKi8KKwkJCXBhcmFsbGVsX2FwcGx5 X3N0YXJ0X3N1YnRyYW5zKGN1cnJlbnRfeGlkLCBzdHJlYW1feGlkKTsKKwkJCXJldHVybiBmYWxz ZTsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCXJldHVybiBmYWxzZTsJCS8q IHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyAqLworCX0KIH0KIAogLyoKQEAgLTkyMyw4ICsxMDY4 LDExIEBAIGFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKExvZ2ljYWxSZXBQcmVwYXJlZFR4 bkRhdGEgKnByZXBhcmVfZGF0YSkKIAkgKiBCZWdpblRyYW5zYWN0aW9uQmxvY2sgaXMgbmVjZXNz YXJ5IHRvIGJhbGFuY2UgdGhlIEVuZFRyYW5zYWN0aW9uQmxvY2sKIAkgKiBjYWxsZWQgd2l0aGlu IHRoZSBQcmVwYXJlVHJhbnNhY3Rpb25CbG9jayBiZWxvdy4KIAkgKi8KLQlCZWdpblRyYW5zYWN0 aW9uQmxvY2soKTsKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsgLyogQ29tcGxldGVzIHRo ZSBwcmVjZWRpbmcgQmVnaW4gY29tbWFuZC4gKi8KKwlpZiAoIUlzVHJhbnNhY3Rpb25CbG9jaygp KQorCXsKKwkJQmVnaW5UcmFuc2FjdGlvbkJsb2NrKCk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpOyAvKiBDb21wbGV0ZXMgdGhlIHByZWNlZGluZyBCZWdpbiBjb21tYW5kLiAqLworCX0K IAogCS8qCiAJICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1p bmcgZnJvbSBjb3JyZWN0IHBvc2l0aW9uCkBAIC05OTMsNiArMTE0MSwxMiBAQCBhcHBseV9oYW5k bGVfcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5kbGUgYSBDT01NSVQgUFJFUEFS RUQgb2YgYSBwcmV2aW91c2x5IFBSRVBBUkVEIHRyYW5zYWN0aW9uLgorICoKKyAqIE5vdGUgdGhh dCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgaGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHByZXBh cmVkIGluIGEKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSW4gdGhhdCBjYXNlLCB3ZSBoYXZl IGFscmVhZHkgd2FpdGVkIGZvciB0aGUgcHJlcGFyZQorICogdG8gZmluaXNoIGluIGFwcGx5X2hh bmRsZV9zdHJlYW1fcHJlcGFyZSgpIHdoaWNoIHdpbGwgZW5zdXJlIGFsbCB0aGUKKyAqIG9wZXJh dGlvbnMgaW4gdGhhdCB0cmFuc2FjdGlvbiBoYXZlIGhhcHBlbmVkIGluIHRoZSBzdWJzY3JpYmVy LCBzbyBubworICogY29uY3VycmVudCB0cmFuc2FjdGlvbiBjYW4gY2F1c2UgZGVhZGxvY2sgb3Ig dHJhbnNhY3Rpb24gZGVwZW5kZW5jeSBpc3N1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBseV9o YW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEwMzYsNiArMTE5MCwxMiBA QCBhcHBseV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAogLyoKICAqIEhh bmRsZSBhIFJPTExCQUNLIFBSRVBBUkVEIG9mIGEgcHJldmlvdXNseSBQUkVQQVJFRCBUUkFOU0FD VElPTi4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGhlcmUgaWYgdGhl IHRyYW5zYWN0aW9uIHdhcyBwcmVwYXJlZCBpbiBhCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIu IEluIHRoYXQgY2FzZSwgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCBmb3IgdGhlIHByZXBhcmUKKyAq IHRvIGZpbmlzaCBpbiBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoKSB3aGljaCB3aWxsIGVu c3VyZSBhbGwgdGhlCisgKiBvcGVyYXRpb25zIGluIHRoYXQgdHJhbnNhY3Rpb24gaGF2ZSBoYXBw ZW5lZCBpbiB0aGUgc3Vic2NyaWJlciwgc28gbm8KKyAqIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24g Y2FuIGNhdXNlIGRlYWRsb2NrIG9yIHRyYW5zYWN0aW9uIGRlcGVuZGVuY3kgaXNzdWVzLgogICov CiBzdGF0aWMgdm9pZAogYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8g cykKQEAgLTEwODksMTUgKzEyNDksMTQgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVk KFN0cmluZ0luZm8gcykKIAogLyoKICAqIEhhbmRsZSBTVFJFQU0gUFJFUEFSRS4KLSAqCi0gKiBM b2dpYyBpcyBpbiB0d28gcGFydHM6Ci0gKiAxLiBSZXBsYXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJh dGlvbnMKLSAqIDIuIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkCiAgKi8KIHN0YXRp YyB2b2lkCiBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogewogCUxv Z2ljYWxSZXBQcmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICp3aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJ bmZvRGF0YQlvcmlnaW5fbXNnID0gKnM7CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24p CiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xMTEzLDI0ICsxMjcyLDEwOSBAQCBhcHBseV9oYW5kbGVf c3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCWxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fcHJl cGFyZShzLCAmcHJlcGFyZV9kYXRhKTsKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHBy ZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CiAKLQllbG9nKERFQlVH MSwgInJlY2VpdmVkIHByZXBhcmUgZm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9uICV1IiwgcHJlcGFy ZV9kYXRhLnhpZCk7CisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlv bihwcmVwYXJlX2RhdGEueGlkLCAmd2luZm8pOwogCi0JLyogUmVwbGF5IGFsbCB0aGUgc3Bvb2xl ZCBvcGVyYXRpb25zLiAqLwotCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMocHJlcGFyZV9kYXRhLnhp ZCwgcHJlcGFyZV9kYXRhLnByZXBhcmVfbHNuKTsKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikKKwl7 CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFUklBTElaRToKIAotCS8qIE1hcmsgdGhlIHRyYW5zYWN0 aW9uIGFzIHByZXBhcmVkLiAqLwotCWFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKCZwcmVw YXJlX2RhdGEpOworCQkJLyoKKwkJCSAqIFRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzZXJpYWxp emVkIHRvIGZpbGUsIHNvIHJlcGxheSBhbGwgdGhlCisJCQkgKiBzcG9vbGVkIG9wZXJhdGlvbnMu CisJCQkgKi8KKwkJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5z dHJlYW1fZmlsZXNldCwKKwkJCQkJCQkJICAgcHJlcGFyZV9kYXRhLnhpZCwgcHJlcGFyZV9kYXRh LnByZXBhcmVfbHNuKTsKIAotCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQkJLyogTWFy ayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCisJCQlhcHBseV9oYW5kbGVfcHJlcGFy ZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKIAotCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7 CisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCXN0b3JlX2ZsdXNoX3Bvc2l0aW9u KHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVf ZGF0YS5lbmRfbHNuKTsKIAotCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCQkJaW5f cmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwkJCS8qIFVubGluayB0aGUgZmlsZXMgd2l0 aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJCXN0cmVhbV9jbGVh bnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0YS54aWQpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJY2Fz ZSBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU6CisJCQlBc3NlcnQod2luZm8pOworCisJ CQkvKgorCQkJICogVGhlIG9yaWdpbiBjYW4gYmUgYWN0aXZlIG9ubHkgaW4gb25lIHByb2Nlc3Mu IFNlZQorCQkJICogYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQuCisJCQkgKi8KKwkJCXBhcmFs bGVsX2FwcGx5X3JlcGxvcmlnaW5fcmVzZXQoKTsKKworCQkJLyoKKwkJCSAqIFVubG9jayB0aGUg c2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisJCQkgKiBj YW4gY29udGludWUgdG8gcmVjZWl2ZSBhbmQgYXBwbHkgY2hhbmdlcy4KKwkJCSAqLworCQkJcGFy YWxsZWxfYXBwbHlfdW5sb2NrKHdpbmZvLT5zaGFyZWQtPnN0cmVhbV9sb2NrX2lkKTsKKworCQkJ LyogU2VuZCBTVFJFQU0gUFJFUEFSRSBtZXNzYWdlIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIuICovCisJCQlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFM TEVMKQorCQkJCXBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRh KTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlzdHJlYW1fd3JpdGVfbWVzc2FnZShwcmVwYXJlX2RhdGEu eGlkLAorCQkJCQkJCQkJIExPR0lDQUxfUkVQX01TR19TVFJFQU1fUFJFUEFSRSwKKwkJCQkJCQkJ CSAmb3JpZ2luX21zZywgZmFsc2UpOworCQkJCXBhcmFsbGVsX2FwcGx5X3NldF9maWxlc2V0KHdp bmZvLT5zaGFyZWQsIHRydWUpOworCQkJfQorCisJCQkvKgorCQkJICogQWZ0ZXIgc2VuZGluZyB0 aGUgZGF0YSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCB3YWl0IGZvcgorCQkJICogdGhh dCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQK KwkJCSAqIG9yZGVyIHdoaWNoIGF2b2lkcyBmYWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVw ZW5kZW5jaWVzIGFuZAorCQkJICogZGVhZGxvY2tzLgorCQkJICovCisJCQlwYXJhbGxlbF9hcHBs eV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mby0+c2hhcmVkKTsKKwkJCXBhcmFsbGVsX2FwcGx5 X3JlcGxvcmlnaW5fc2V0dXAoKTsKKwkJCXBhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyKHdpbmZv LCBwcmVwYXJlX2RhdGEueGlkLCB0cnVlKTsKKworCQkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0g ZmFsc2U7CisKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQlwYXJhbGxlbF9h cHBseV9yZXBsb3JpZ2luX3NldHVwKCk7CisKKwkJCS8qIFVubG9jayB0aGUgc2hhcmVkIG9iamVj dCBsb2NrIGF0IHRyYW5zYWN0aW9uIGVuZC4gKi8KKwkJCXBhcmFsbGVsX2FwcGx5X3VubG9jayhN eVBhcmFsbGVsU2hhcmVkLT5zdHJlYW1fbG9ja19pZCk7CisKKwkJCWlmIChzdHJlYW1fZmQpCisJ CQkJQnVmRmlsZUNsb3NlKHN0cmVhbV9mZCk7CisKKwkJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAo KTsKKworCQkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCisJCQlhcHBs eV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKworCQkJZW5kX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKKworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJCXBh cmFsbGVsX2FwcGx5X3JlcGxvcmlnaW5fcmVzZXQoKTsKIAotCS8qIHVubGluayB0aGUgZmlsZXMg d2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KLQlzdHJlYW1fY2xl YW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBwcmVwYXJlX2RhdGEueGlkKTsK KwkJCWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7CisJCQlzdWJ4YWN0bGlzdCA9IE5JTDsKKworCQkJ cGFyYWxsZWxfYXBwbHlfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxf VFJBTlNfRklOSVNIRUQpOworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrKE15UGFyYWxsZWxTaGFy ZWQtPnRyYW5zYWN0aW9uX2xvY2tfaWQpOworCisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHBy b2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kIik7CisJCQlicmVhazsKKwor CQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXBnc3RhdF9y ZXBvcnRfc3RhdChmYWxzZSk7CiAKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVp bmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMo cHJlcGFyZV9kYXRhLmVuZF9sc24pOwpAQCAtMTE2OCwyNyArMTQxMiw3NCBAQCBhcHBseV9oYW5k bGVfb3JpZ2luKFN0cmluZ0luZm8gcykKIH0KIAogLyoKKyAqIEhhbmRsZSBTVFJFQU0gU1RBUlQg bWVzc2FnZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgc3BpbGxlZCB0byBkaXNrLgorICoKKyAq IEluaW50aWFsaXplIGZpbGVzZXQgaWYgbm90IHlldCBhbmQgb3BlbiB0aGUgZmlsZS4KKyAqLwor dm9pZAorc2VyaWFsaXplX3N0cmVhbV9zdGFydChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJz dF9zZWdtZW50KQoreworCS8qCisJICogU3RhcnQgYSB0cmFuc2FjdGlvbiBvbiBzdHJlYW0gc3Rh cnQsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBiZQorCSAqIGNvbW1pdHRlZCBvbiB0aGUgc3RyZWFt IHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVzeW5jIHdvcmtlciBpbgorCSAqIHdoaWNoIGNhc2Ug aXQgd2lsbCBiZSBjb21taXR0ZWQgYWZ0ZXIgcHJvY2Vzc2luZyBhbGwgdGhlCisJICogbWVzc2Fn ZXMuIFdlIG5lZWQgdGhlIHRyYW5zYWN0aW9uIGZvciBoYW5kbGluZyB0aGUgYnVmZmlsZSwKKwkg KiB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUgc3RyZWFtaW5nIGRhdGEgYW5kIHN1YnhhY3QgaW5m by4KKwkgKi8KKwliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CisKKwkvKgorCSAqIEluaXRpYWxp emUgdGhlIHdvcmtlcidzIHN0cmVhbV9maWxlc2V0IGlmIHdlIGhhdmVuJ3QgeWV0LiBUaGlzCisJ ICogd2lsbCBiZSB1c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3JrZXIgc28g Y3JlYXRlIGl0CisJICogaW4gYSBwZXJtYW5lbnQgY29udGV4dC4gV2UgY3JlYXRlIHRoaXMgb24g dGhlIHZlcnkgZmlyc3QKKwkgKiBzdHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueSB0cmFuc2FjdGlv biBhbmQgdGhlbiB1c2UgaXQgZm9yIHRoaXMKKwkgKiBhbmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5z YWN0aW9ucy4gTm93LCB3ZSBjb3VsZCBjcmVhdGUgYQorCSAqIGZpbGVzZXQgYXQgdGhlIHN0YXJ0 IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQgdGhlbiB3ZSB3b24ndCBiZQorCSAqIHN1cmUgdGhh dCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkgKi8KKwlpZiAoTXlMb2dpY2FsUmVwV29ya2VyLT5z dHJlYW1fZmlsZXNldCA9PSBOVUxMKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisKKwkJ b2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwkJTXlMb2dp Y2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCA9IHBhbGxvYyhzaXplb2YoRmlsZVNldCkpOwor CQlGaWxlU2V0SW5pdChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0KTsKKworCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKwl9CisKKwkvKiBPcGVuIHRoZSBzcG9vbCBm aWxlIGZvciB0aGlzIHRyYW5zYWN0aW9uLiAqLworCXN0cmVhbV9vcGVuX2ZpbGUoTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCwgeGlkLCBmaXJzdF9zZWdtZW50KTsKKworCS8qIElmIHRoaXMgaXMg bm90IHRoZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0aW5nIHN1YnhhY3QgZmlsZS4gKi8KKwlp ZiAoIWZpcnN0X3NlZ21lbnQpCisJCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdvcmtl ci0+c3ViaWQsIHhpZCk7CisKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworfQorCisvKgogICog SGFuZGxlIFNUUkVBTSBTVEFSVCBtZXNzYWdlLgorICoKKyAqIFhYWCBXZSBjYW4gYXZvaWQgc2Vu ZGluZyBwYWlycyBvZiB0aGUgU1RBUlQvU1RPUCBtZXNzYWdlcyB0byB0aGUgcGFyYWxsZWwKKyAq IHdvcmtlciBiZWNhdXNlIHVubGlrZSBhcHBseSB3b3JrZXIgaXQgd2lsbCBwcm9jZXNzIG9ubHkg b25lIHRyYW5zYWN0aW9uIGF0IGEKKyAqIHRpbWUuIEhvd2V2ZXIsIGl0IGlzIG5vdCBjbGVhciB3 aGV0aGVyIGFueSBvcHRpbWl6YXRpb24gaXMgd29ydGh3aGlsZQorICogYmVjYXVzZSB0aGVzZSBt ZXNzYWdlcyBhcmUgc2VudCBvbmx5IHdoZW4gdGhlIGxvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW0K KyAqIHRocmVzaG9sZCBpcyBleGNlZWRlZC4KICAqLwogc3RhdGljIHZvaWQKIGFwcGx5X2hhbmRs ZV9zdHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBzKQogewogCWJvb2wJCWZpcnN0X3NlZ21lbnQ7CisJ UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlf YWN0aW9uOwogCi0JaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCWlmICghc3dpdGNoaW5n X3RvX3NlcmlhbGl6ZSAmJiBpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1z Z19pbnRlcm5hbCgiZHVwbGljYXRlIFNUUkVBTSBTVEFSVCBtZXNzYWdlIikpKTsKIAotCS8qCi0J ICogU3RhcnQgYSB0cmFuc2FjdGlvbiBvbiBzdHJlYW0gc3RhcnQsIHRoaXMgdHJhbnNhY3Rpb24g d2lsbCBiZSBjb21taXR0ZWQKLQkgKiBvbiB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEg dGFibGVzeW5jIHdvcmtlciBpbiB3aGljaCBjYXNlIGl0Ci0JICogd2lsbCBiZSBjb21taXR0ZWQg YWZ0ZXIgcHJvY2Vzc2luZyBhbGwgdGhlIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZQotCSAqIHRyYW5z YWN0aW9uIGZvciBoYW5kbGluZyB0aGUgYnVmZmlsZSwgdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhl Ci0JICogc3RyZWFtaW5nIGRhdGEgYW5kIHN1YnhhY3QgaW5mby4KLQkgKi8KLQliZWdpbl9yZXBs aWNhdGlvbl9zdGVwKCk7Ci0KIAkvKiBub3RpZnkgaGFuZGxlIG1ldGhvZHMgd2UncmUgcHJvY2Vz c2luZyBhIHJlbW90ZSB0cmFuc2FjdGlvbiAqLwogCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0g dHJ1ZTsKIApAQCAtMTIwMyw1MyArMTQ5NCw4NSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0 KFN0cmluZ0luZm8gcykKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN0cmVhbV94aWQs IEludmFsaWRYTG9nUmVjUHRyKTsKIAogCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mg c3RyZWFtX2ZpbGVzZXQgaWYgd2UgaGF2ZW4ndCB5ZXQuIFRoaXMgd2lsbCBiZQotCSAqIHVzZWQg Zm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBw ZXJtYW5lbnQKLQkgKiBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBz dHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueQotCSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBp dCBmb3IgdGhpcyBhbmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4KLQkgKiBOb3csIHdl IGNvdWxkIGNyZWF0ZSBhIGZpbGVzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2Vs bCBidXQKLQkgKiB0aGVuIHdlIHdvbid0IGJlIHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNl ZC4KKwkgKiBGb3IgdGhlIGZpcnN0IHN0cmVhbSBzdGFydCwgY2hlY2sgaWYgdGhlcmUgaXMgYW55 IGZyZWUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgd2UgY2FuIHVzZSB0byBwcm9jZXNzIHRo aXMgdHJhbnNhY3Rpb24sIG90aGVyd2lzZSB0cnkgdG8gc3RhcnQgYQorCSAqIG5ldyBwYXJhbGxl bCBhcHBseSB3b3JrZXIuCiAJICovCi0JaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2Zp bGVzZXQgPT0gTlVMTCkKKwlpZiAoZmlyc3Rfc2VnbWVudCkKKwkJcGFyYWxsZWxfYXBwbHlfc3Rh cnRfd29ya2VyKHN0cmVhbV94aWQpOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9u X2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOworCisJc3dpdGNoIChhcHBseV9hY3Rp b24pCiAJewotCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VS SUFMSVpFOgorCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKKwkJCXNlcmlh bGl6ZV9zdHJlYW1fc3RhcnQoc3RyZWFtX3hpZCwgZmlyc3Rfc2VnbWVudCk7CisJCQlicmVhazsK IAotCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKKwkJY2Fz ZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CiAKLQkJ TXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCA9IHBhbGxvYyhzaXplb2YoRmlsZVNl dCkpOwotCQlGaWxlU2V0SW5pdChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0KTsK KwkJCWlmICghZmlyc3Rfc2VnbWVudCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFVubG9jayB0aGUg c2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisJCQkJICog Y2FuIGNvbnRpbnVlIHRvIHJlY2VpdmUgYW5kIGFwcGx5IGNoYW5nZXMuCisJCQkJICovCisJCQkJ cGFyYWxsZWxfYXBwbHlfdW5sb2NrKHdpbmZvLT5zaGFyZWQtPnN0cmVhbV9sb2NrX2lkKTsKKwkJ CX0KIAotCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKLQl9CisJCQkvKgorCQkJICog SW5jcmVtZW50IHRoZSBudW1iZXIgb2YgbWVzc2FnZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCBi eQorCQkJICogcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCQkJICovCisJCQlwZ19hdG9taWNfYWRk X2ZldGNoX3UzMigmKHdpbmZvLT5zaGFyZWQtPmxlZnRfbWVzc2FnZSksIDEpOwogCi0JLyogb3Bl biB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiAqLwotCXN0cmVhbV9vcGVuX2Zp bGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCwgZmlyc3Rfc2VnbWVudCk7 CisJCQlwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CiAK LQkvKiBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2VnbWVudCwgb3BlbiBleGlzdGluZyBzdWJ4 YWN0IGZpbGUgKi8KLQlpZiAoIWZpcnN0X3NlZ21lbnQpCi0JCXN1YnhhY3RfaW5mb19yZWFkKE15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOworCQkJcGFyYWxsZWxfc3RyZWFt X25jaGFuZ2VzID0gMDsKIAotCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORywg TlVMTCk7CisJCQkvKiBDYWNoZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciB0aGlzIHRy YW5zYWN0aW9uLiAqLworCQkJc3RyZWFtX2FwcGx5X3dvcmtlciA9IHdpbmZvOworCQkJYnJlYWs7 CiAKLQllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZ OgorCQkJaWYgKGZpcnN0X3NlZ21lbnQpCisJCQl7CisJCQkJLyogSG9sZCB0aGUgbG9jayB1bnRp bCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4gKi8KKwkJCQlwYXJhbGxlbF9hcHBseV9sb2Nr KE15UGFyYWxsZWxTaGFyZWQtPnRyYW5zYWN0aW9uX2xvY2tfaWQpOworCQkJCXBhcmFsbGVsX2Fw cGx5X3NldF94YWN0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX1NUQVJU RUQpOworCQkJfQorCisJCQkvKgorCQkJICogVW5sb2NrIHRoZSBzaGFyZWQgb2JqZWN0IGxvY2sg c28gdGhhdCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgorCQkJICogY2FuIGNvbnRpbnVlIHRvIHNl bmQgY2hhbmdlcy4KKwkJCSAqLworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrKE15UGFyYWxsZWxT aGFyZWQtPnN0cmVhbV9sb2NrX2lkKTsKKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUFz c2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNU QVRFX1JVTk5JTkcsIE5VTEwpOwogfQogCiAvKgotICogSGFuZGxlIFNUUkVBTSBTVE9QIG1lc3Nh Z2UuCisgKiBIYW5kbGUgU1RSRUFNIFNUT1AgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3 YXMgc3BpbGxlZCB0byBkaXNrLgorICoKKyAqIFVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQg c3VieGFjdHMgYW5kIGNsb3NlIHRoZSBmaWxlLgogICovCi1zdGF0aWMgdm9pZAotYXBwbHlfaGFu ZGxlX3N0cmVhbV9zdG9wKFN0cmluZ0luZm8gcykKK3ZvaWQKK3NlcmlhbGl6ZV9zdHJlYW1fc3Rv cChUcmFuc2FjdGlvbklkIHhpZCkKIHsKLQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQot CQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9O KSwKLQkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gU1RPUCBtZXNzYWdlIHdpdGhvdXQgU1RS RUFNIFNUQVJUIikpKTsKLQogCS8qCi0JICogQ2xvc2UgdGhlIGZpbGUgd2l0aCBzZXJpYWxpemVk IGNoYW5nZXMsIGFuZCBzZXJpYWxpemUgaW5mb3JtYXRpb24gYWJvdXQKLQkgKiBzdWJ4YWN0cyBm b3IgdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uLgorCSAqIENsb3NlIHRoZSBmaWxlIHdpdGggc2Vy aWFsaXplZCBjaGFuZ2VzLCBhbmQgc2VyaWFsaXplCisJICogaW5mb3JtYXRpb24gYWJvdXQgc3Vi eGFjdHMgZm9yIHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KIAkgKi8KLQlzdWJ4YWN0X2luZm9f d3JpdGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCk7CisJc3VieGFjdF9p bmZvX3dyaXRlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CiAJc3RyZWFtX2Nsb3Nl X2ZpbGUoKTsKIAogCS8qIFdlIG11c3QgYmUgaW4gYSB2YWxpZCB0cmFuc2FjdGlvbiBzdGF0ZSAq LwpAQCAtMTI1OCw0MCArMTU4MSw5MSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AoU3RyaW5n SW5mbyBzKQogCS8qIENvbW1pdCB0aGUgcGVyLXN0cmVhbSB0cmFuc2FjdGlvbiAqLwogCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCi0JaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxz ZTsKLQogCS8qIFJlc2V0IHBlci1zdHJlYW0gY29udGV4dCAqLwogCU1lbW9yeUNvbnRleHRSZXNl dChMb2dpY2FsU3RyZWFtaW5nQ29udGV4dCk7CiAKIAlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNU QVRFX0lETEUsIE5VTEwpOwotCXJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwogfQog CiAvKgotICogSGFuZGxlIFNUUkVBTSBhYm9ydCBtZXNzYWdlLgorICogSGFuZGxlIFNUUkVBTSBT VE9QIG1lc3NhZ2UuCiAgKi8KIHN0YXRpYyB2b2lkCi1hcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0 KFN0cmluZ0luZm8gcykKK2FwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiB7 Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7Ci0JVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOwog Ci0JaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCWlmICghaW5fc3RyZWFtZWRfdHJhbnNh Y3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9W SU9MQVRJT04pLAotCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdp dGhvdXQgU1RSRUFNIFNUT1AiKSkpOworCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9Q IG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RBUlQiKSkpOworCisJYXBwbHlfYWN0aW9uID0gZ2V0 X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOworCisJc3dpdGNo IChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CisJCWNh c2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJc2VyaWFsaXplX3N0cmVhbV9z dG9wKHN0cmVhbV94aWQpOworCisJCQlzdHJlYW1fYXBwbHlfd29ya2VyID0gTlVMTDsKKwkJCWJy ZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCQlBc3NlcnQo d2luZm8pOworCisJCQkvKgorCQkJICogTG9jayBiZWZvcmUgc2VuZGluZyB0aGUgU1RSRUFNX1NU T1AgbWVzc2FnZSBzbyB0aGF0IHRoZSBsZWFkZXIKKwkJCSAqIGNhbiBob2xkIHRoZSBsb2NrIGZp cnN0IGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgd2FpdAorCQkJICogZm9yIGxl YWRlciB0byByZWxlYXNlIHRoZSBsb2NrLgorCQkJICovCisJCQlwYXJhbGxlbF9hcHBseV9sb2Nr KHdpbmZvLT5zaGFyZWQtPnN0cmVhbV9sb2NrX2lkKTsKIAotCWxvZ2ljYWxyZXBfcmVhZF9zdHJl YW1fYWJvcnQocywgJnhpZCwgJnN1YnhpZCk7CisJCQlwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEo d2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisKKwkJCWVsb2coREVCVUcxLCAiYXBwbGllZCAldSBj aGFuZ2VzIGluIHRoZSBzdHJlYW1pbmcgY2h1bmsiLAorCQkJCSBwYXJhbGxlbF9zdHJlYW1fbmNo YW5nZXMpOworCisJCQlzdHJlYW1fYXBwbHlfd29ya2VyID0gTlVMTDsKKworCQkJcGdzdGF0X3Jl cG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJB TlNfUEFSQUxMRUxfQVBQTFk6CisKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpcyBubyBtZXNzYWdl IGxlZnQsIHdhaXQgZm9yIHRoZSBsZWFkZXIgdG8gcmVsZWFzZSB0aGUKKwkJCSAqIGxvY2sgYW5k IHNlbmQgbW9yZSBtZXNzYWdlcy4KKwkJCSAqLworCQkJaWYgKHBnX2F0b21pY19zdWJfZmV0Y2hf dTMyKCYoTXlQYXJhbGxlbFNoYXJlZC0+bGVmdF9tZXNzYWdlKSwgMSkgPT0gMCkKKwkJCQlwYXJh bGxlbF9hcHBseV9sb2NrKE15UGFyYWxsZWxTaGFyZWQtPnN0cmVhbV9sb2NrX2lkKTsKKworCQkJ cGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFSU5UUkFOU0FDVElPTiwgTlVMTCk7CisJ CQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0K KworCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKKwlyZXNldF9hcHBseV9lcnJv cl9jb250ZXh0X2luZm8oKTsKK30KKworLyoKKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2Fn ZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgc3BpbGxlZCB0byBkaXNrLgorICovCitzdGF0aWMg dm9pZAorc2VyaWFsaXplX3N0cmVhbV9hYm9ydChUcmFuc2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rp b25JZCBzdWJ4aWQpCit7CiAJLyoKIAkgKiBJZiB0aGUgdHdvIFhJRHMgYXJlIHRoZSBzYW1lLCBp dCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFjdCwgc28KIAkgKiBqdXN0IGRlbGV0ZSB0 aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGluZm8uCiAJICovCiAJaWYgKHhpZCA9PSBzdWJ4aWQp Ci0JewotCQlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHhpZCwgSW52YWxpZFhMb2dSZWNQ dHIpOwogCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4 aWQpOwotCX0KIAllbHNlCiAJewogCQkvKgpAQCAtMTMxNSw4ICsxNjg5LDYgQEAgYXBwbHlfaGFu ZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCiAJCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAJ CWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAotCQlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0 KHN1YnhpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwotCiAJCXN1YmlkeCA9IC0xOwogCQliZWdpbl9y ZXBsaWNhdGlvbl9zdGVwKCk7CiAJCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdvcmtl ci0+c3ViaWQsIHhpZCk7CkBAIC0xMzQxLDcgKzE3MTMsNiBAQCBhcHBseV9oYW5kbGVfc3RyZWFt X2Fib3J0KFN0cmluZ0luZm8gcykKIAkJCWNsZWFudXBfc3VieGFjdF9pbmZvKCk7CiAJCQllbmRf cmVwbGljYXRpb25fc3RlcCgpOwogCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7Ci0JCQly ZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0x MzY0LDE1ICsxNzM1LDEzNCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8g cykKIAkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7CiAJfQorfQorCisvKgorICogSGFuZGxlIFNUUkVBTSBBQk9SVCBtZXNzYWdlLgorICovCitz dGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCit7CisJ VHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJTG9naWNhbFJlcFN0 cmVhbUFib3J0RGF0YSBhYm9ydF9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5m bzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBvcmln aW5fbXNnID0gKnM7CisKKwlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCSBl cnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUT1Ai KSkpOworCisJLyogV2UgcmVjZWl2ZSBhYm9ydCBpbmZvcm1hdGlvbiBvbmx5IHdoZW4gd2UgY2Fu IGFwcGx5IGluIHBhcmFsbGVsLiAqLworCWxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQocywg JmFib3J0X2RhdGEsCisJCQkJCQkJCSBNeUxvZ2ljYWxSZXBXb3JrZXItPnBhcmFsbGVsX2FwcGx5 KTsKKworCXhpZCA9IGFib3J0X2RhdGEueGlkOworCXN1YnhpZCA9IGFib3J0X2RhdGEuc3VieGlk OworCisJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChzdWJ4aWQsIGFib3J0X2RhdGEuYWJv cnRfbHNuKTsKKworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24o eGlkLCAmd2luZm8pOworCisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5T X0xFQURFUl9TRVJJQUxJWkU6CisKKwkJCS8qCisJCQkgKiBXZSBhcmUgaW4gdGhlIGxlYWRlciBh cHBseSB3b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbgorCQkJICogc2VyaWFsaXpl ZCB0byBmaWxlLgorCQkJICovCisJCQlzZXJpYWxpemVfc3RyZWFtX2Fib3J0KHhpZCwgc3VieGlk KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJ CWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsK KworCQkJaWYgKHN1YnhpZCA9PSB4aWQpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUaGUgb3JpZ2lu IGNhbiBiZSBhY3RpdmUgb25seSBpbiBvbmUgcHJvY2Vzcy4gU2VlCisJCQkJICogYXBwbHlfaGFu ZGxlX3N0cmVhbV9jb21taXQuCisJCQkJICovCisJCQkJcGFyYWxsZWxfYXBwbHlfcmVwbG9yaWdp bl9yZXNldCgpOworCQkJfQorCisJCQkvKiBTZW5kIFNUUkVBTSBBQk9SVCBtZXNzYWdlIHRvIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCisJCQlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5T X0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMKQorCQkJCXBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YSh3 aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlzZXJpYWxpemVfc3Ry ZWFtX2Fib3J0KHhpZCwgc3VieGlkKTsKKworCQkJCS8qCisJCQkJICogUGFyYWxsZWwgYXBwbHkg d29ya2VyIG1pZ2h0IGhhdmUgYXBwbGllZCBzb21lIGNoYW5nZXMsIHNvCisJCQkJICogd3JpdGUg dGhlIFNUUkVBTV9BQk9SVCBtZXNzYWdlIHNvIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5CisJCQkJ ICogd29ya2VyIGNhbiByb2xsYmFjayB0aGUgc3VidHJhbnNhY3Rpb24gaWYgbmVlZGVkLgorCQkJ CSAqCisJCQkJICogVGhlIGZpbGUgd2FzIGRlbGV0ZWQgaWYgYWJvcnRlZCB0aGUgd2hvbGUgdHJh bnNhY3Rpb24sIHNvCisJCQkJICogY3JlYXRlIGl0IGFnYWluIGluIHRoaXMgY2FzZS4KKwkJCQkg Ki8KKwkJCQlzdHJlYW1fd3JpdGVfbWVzc2FnZSh4aWQsIExPR0lDQUxfUkVQX01TR19TVFJFQU1f QUJPUlQsCisJCQkJCQkJCQkgJm9yaWdpbl9tc2csICh4aWQgPT0gc3VieGlkKSk7CisJCQl9CisK KwkJCWlmIChzdWJ4aWQgPT0geGlkKQorCQkJeworCQkJCWlmIChhcHBseV9hY3Rpb24gPT0gVFJB TlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFKQorCQkJCQlwYXJhbGxlbF9hcHBseV9zZXRfZmls ZXNldCh3aW5mby0+c2hhcmVkLCB0cnVlKTsKKworCQkJCS8qCisJCQkJICogVW5sb2NrIHRoZSBz aGFyZWQgb2JqZWN0IGxvY2sgYXQgdHJhbnNhY3Rpb24gZW5kLgorCQkJCSAqLworCQkJCXBhcmFs bGVsX2FwcGx5X3VubG9jayh3aW5mby0+c2hhcmVkLT5zdHJlYW1fbG9ja19pZCk7CisKKwkJCQlw YXJhbGxlbF9hcHBseV9yZXBsb3JpZ2luX3NldHVwKCk7CisJCQkJcGFyYWxsZWxfYXBwbHlfZnJl ZV93b3JrZXIod2luZm8sIHhpZCwgdHJ1ZSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoK KwkJCQkgKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBtZXNzYWdlIHdhaXRpbmcgdG8gYmUgcHJv Y2Vzc2VkIGJ5CisJCQkJICogcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCQkJCSAqLworCQkJCXBn X2F0b21pY19hZGRfZmV0Y2hfdTMyKCYod2luZm8tPnNoYXJlZC0+bGVmdF9tZXNzYWdlKSwgMSk7 CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorCQkJcGFy YWxsZWxfYXBwbHlfdW5sb2NrKE15UGFyYWxsZWxTaGFyZWQtPnN0cmVhbV9sb2NrX2lkKTsKKwor CQkJcGFyYWxsZWxfYXBwbHlfc3RyZWFtX2Fib3J0KCZhYm9ydF9kYXRhKTsKKworCQkJLyoKKwkJ CSAqIElmIHRoZXJlIGlzIG5vIG1lc3NhZ2UgbGVmdCwgd2FpdCBmb3IgdGhlIGxlYWRlciB0byBy ZWxlYXNlIHRoZQorCQkJICogbG9jayBhbmQgc2VuZCBtb3JlIG1lc3NhZ2VzLgorCQkJICovCisJ CQlpZiAoeGlkICE9IHN1YnhpZCAmJgorCQkJCXBnX2F0b21pY19zdWJfZmV0Y2hfdTMyKCYoTXlQ YXJhbGxlbFNoYXJlZC0+bGVmdF9tZXNzYWdlKSwgMSkgPT0gMCkKKwkJCQlwYXJhbGxlbF9hcHBs eV9sb2NrKE15UGFyYWxsZWxTaGFyZWQtPnN0cmVhbV9sb2NrX2lkKTsKKworCQkJZWxvZyhERUJV RzEsICJmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCIp OworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsK Kwl9CiAKIAlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIH0KIAorCiAvKgogICog Q29tbW9uIHNwb29sZmlsZSBwcm9jZXNzaW5nLgogICovCi1zdGF0aWMgdm9pZAotYXBwbHlfc3Bv b2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCit2b2lkCith cHBseV9zcG9vbGVkX21lc3NhZ2VzKEZpbGVTZXQgKnN0cmVhbV9maWxlc2V0LCBUcmFuc2FjdGlv bklkIHhpZCwKKwkJCQkJICAgWExvZ1JlY1B0ciBsc24pCiB7CiAJU3RyaW5nSW5mb0RhdGEgczI7 CiAJaW50CQkJbmNoYW5nZXM7CkBAIC0xMzk3LDggKzE4ODcsMTAgQEAgYXBwbHlfc3Bvb2xlZF9t ZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAJY2hhbmdlc19maWxl bmFtZShwYXRoLCBNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwogCWVsb2coREVCVUcx LCAicmVwbGF5aW5nIGNoYW5nZXMgZnJvbSBmaWxlIFwiJXNcIiIsIHBhdGgpOwogCi0JZmQgPSBC dWZGaWxlT3BlbkZpbGVTZXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCwgcGF0 aCwgT19SRE9OTFksCisJZmQgPSBCdWZGaWxlT3BlbkZpbGVTZXQoc3RyZWFtX2ZpbGVzZXQsIHBh dGgsIE9fUkRPTkxZLAogCQkJCQkJCWZhbHNlKTsKKwlzdHJlYW1fZmQgPSBmZDsKKwlzdHJlYW1f eGlkID0geGlkOwogCiAJYnVmZmVyID0gcGFsbG9jKEJMQ0tTWik7CiAJaW5pdFN0cmluZ0luZm8o JnMyKTsKQEAgLTE0MTYsNiArMTkwOCw5IEBAIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNh Y3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCiAJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsK IAorCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJc2V0X2FwcGx5X2Vycm9yX2Nv bnRleHRfeGFjdCh4aWQsIEludmFsaWRYTG9nUmVjUHRyKTsKKwogCS8qCiAJICogUmVhZCB0aGUg ZW50cmllcyBvbmUgYnkgb25lIGFuZCBwYXNzIHRoZW0gdGhyb3VnaCB0aGUgc2FtZSBsb2dpYyBh cyBpbgogCSAqIGFwcGx5X2Rpc3BhdGNoLgpAQCAtMTQ2OSw2ICsxOTY0LDE5IEBAIGFwcGx5X3Nw b29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCiAJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCisJCS8qCisJCSAqIEJyZWFrIHRoZSBsb29w IGlmIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYXZlIGZpbmlzaGVkIGFwcGx5aW5nIHRoZQorCQkg KiB0cmFuc2FjdGlvbi4gVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBzaG91bGQgaGF2ZSBjbG9z ZSB0aGUgZmlsZQorCQkgKiBiZWZvcmUgY29tbWl0dGluZy4KKwkJICovCisJCWlmIChhbV9wYXJh bGxlbF9hcHBseV93b3JrZXIoKSAmJgorCQkJKE15UGFyYWxsZWxTaGFyZWQtPnhhY3Rfc3RhdGUg PT0gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQgfHwKKwkJCU15UGFyYWxsZWxTaGFyZWQtPnhhY3Rf c3RhdGUgPT0gUEFSQUxMRUxfVFJBTlNfVU5LTk9XTikpCisJCXsKKwkJCXJlc2V0X2FwcGx5X2Vy cm9yX2NvbnRleHRfaW5mbygpOworCQkJZ290byBkb25lOworCQl9CisKIAkJbmNoYW5nZXMrKzsK IAogCQlpZiAobmNoYW5nZXMgJSAxMDAwID09IDApCkBAIC0xNDc3LDEwICsxOTg1LDEzIEBAIGFw cGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQog CX0KIAogCUJ1ZkZpbGVDbG9zZShmZCk7Ci0KIAlwZnJlZShidWZmZXIpOwogCXBmcmVlKHMyLmRh dGEpOwogCitkb25lOgorCXN0cmVhbV9mZCA9IE5VTEw7CisJc3RyZWFtX3hpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOworCiAJZWxvZyhERUJVRzEsICJyZXBsYXllZCAlZCAoYWxsKSBjaGFuZ2Vz IGZyb20gZmlsZSBcIiVzXCIiLAogCQkgbmNoYW5nZXMsIHBhdGgpOwogCkBAIC0xNDk1LDYgKzIw MDYsOSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiB7CiAJVHJh bnNhY3Rpb25JZCB4aWQ7CiAJTG9naWNhbFJlcENvbW1pdERhdGEgY29tbWl0X2RhdGE7CisJUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0 aW9uOworCVN0cmluZ0luZm9EYXRhCW9yaWdpbl9tc2cgPSAqczsKIAogCWlmIChpbl9zdHJlYW1l ZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTE1MDQsMTQgKzIwMTgsMTA1IEBA IGFwcGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykKIAl4aWQgPSBsb2dpY2Fs cmVwX3JlYWRfc3RyZWFtX2NvbW1pdChzLCAmY29tbWl0X2RhdGEpOwogCXNldF9hcHBseV9lcnJv cl9jb250ZXh0X3hhY3QoeGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsKIAotCWVsb2coREVC VUcxLCAicmVjZWl2ZWQgY29tbWl0IGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHhpZCk7 CisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbih4aWQsICZ3aW5m byk7CiAKLQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xz bik7CisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJ QUxJWkU6CiAKLQlhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisJ CQkvKgorCQkJICogVGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHNlcmlhbGl6ZWQgdG8gZmlsZSwg c28gcmVwbGF5IGFsbCB0aGUKKwkJCSAqIHNwb29sZWQgb3BlcmF0aW9ucy4KKwkJCSAqLworCQkJ YXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0 LCB4aWQsCisJCQkJCQkJCSAgIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOwogCi0JLyogdW5saW5r IHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZvICovCi0J c3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKwkJ CWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKKworCQkJLyogVW5s aW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZvLiAq LworCQkJc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlk KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJ CWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsK KworCQkJLyoKKwkJCSAqIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbiBi ZWZvcmUgc2VuZGluZyB0aGUKKwkJCSAqIGNvbW1pdCBtZXNzYWdlIGFuZCBzZXQgaXQgdXAgYWdh aW4gYWZ0ZXIgY29uZmlybWluZyB0aGF0CisJCQkgKiBwYXJhbGxlbCB3b3JrZXIgaGFzIHByb2Nl c3NlZCB0aGUgbWVzc2FnZS4gVGhpcyBpcyByZXF1aXJlZAorCQkJICogYmVjYXVzZSBvcmlnaW4g Y2FuIGJlIGFjdGl2ZSBvbmx5IGluIG9uZSBwcm9jZXNzIGF0LWEtdGltZS4KKwkJCSAqLworCQkJ cGFyYWxsZWxfYXBwbHlfcmVwbG9yaWdpbl9yZXNldCgpOworCisJCQkvKgorCQkJICogVW5sb2Nr IHRoZSBzaGFyZWQgb2JqZWN0IGxvY2sgc28gdGhhdCBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKwkJ CSAqIGNhbiBjb250aW51ZSB0byByZWNlaXZlIGFuZCBhcHBseSBjaGFuZ2VzLgorCQkJICovCisJ CQlwYXJhbGxlbF9hcHBseV91bmxvY2sod2luZm8tPnNoYXJlZC0+c3RyZWFtX2xvY2tfaWQpOwor CisJCQkvKiBTZW5kIFNUUkVBTSBDT01NSVQgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyLiAqLworCQkJaWYgKGFwcGx5X2FjdGlvbiA9PSBUUkFOU19MRUFERVJfU0VORF9UT19Q QVJBTExFTCkKKwkJCQlwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ ZGF0YSk7CisJCQllbHNlCisJCQl7CisJCQkJc3RyZWFtX3dyaXRlX21lc3NhZ2UoeGlkLCBMT0dJ Q0FMX1JFUF9NU0dfU1RSRUFNX0NPTU1JVCwKKwkJCQkJCQkJCSAmb3JpZ2luX21zZywgZmFsc2Up OworCQkJCXBhcmFsbGVsX2FwcGx5X3NldF9maWxlc2V0KHdpbmZvLT5zaGFyZWQsIHRydWUpOwor CQkJfQorCisJCQkvKgorCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFyYWxs ZWwgYXBwbHkgd29ya2VyLCB3YWl0IGZvcgorCQkJICogdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBU aGlzIGlzIG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQKKwkJCSAqIG9yZGVyIHdoaWNoIGF2 b2lkcyBmYWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFuZAorCQkJICog ZGVhZGxvY2tzLgorCQkJICovCisJCQlwYXJhbGxlbF9hcHBseV93YWl0X2Zvcl94YWN0X2Zpbmlz aCh3aW5mby0+c2hhcmVkKTsKKwkJCXBhcmFsbGVsX2FwcGx5X3JlcGxvcmlnaW5fc2V0dXAoKTsK KworCQkJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9u KGNvbW1pdF9kYXRhLmVuZF9sc24pOworCQkJc3RvcF9za2lwcGluZ19jaGFuZ2VzKCk7CisKKwkJ CXBhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyKHdpbmZvLCB4aWQsIHRydWUpOworCisJCQkvKgor CQkJICogVGhlIHRyYW5zYWN0aW9uIGlzIGVpdGhlciBub24tZW1wdHkgb3Igc2tpcHBlZCwgc28g d2UgY2xlYXIgdGhlCisJCQkgKiBzdWJza2lwbHNuLgorCQkJICovCisJCQljbGVhcl9zdWJzY3Jp cHRpb25fc2tpcF9sc24oY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CisKKwkJCWlmIChhcHBseV9h Y3Rpb24gPT0gVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFKQorCQkJCXN0cmVhbV9jbGVh bnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisKKwkJCWJyZWFrOwor CisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQlwYXJhbGxlbF9hcHBseV9yZXBsb3Jp Z2luX3NldHVwKCk7CisKKwkJCS8qIFVubG9jayBhbGwgdGhlIHNoYXJlZCBvYmplY3QgbG9jayBh dCB0cmFuc2FjdGlvbiBlbmQuICovCisJCQlwYXJhbGxlbF9hcHBseV91bmxvY2soTXlQYXJhbGxl bFNoYXJlZC0+c3RyZWFtX2xvY2tfaWQpOworCisJCQlpZiAoc3RyZWFtX2ZkKQorCQkJCUJ1ZkZp bGVDbG9zZShzdHJlYW1fZmQpOworCisJCQlhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZj b21taXRfZGF0YSk7CisKKwkJCXBhcmFsbGVsX2FwcGx5X3JlcGxvcmlnaW5fcmVzZXQoKTsKKwor CQkJbGlzdF9mcmVlKHN1YnhhY3RsaXN0KTsKKwkJCXN1YnhhY3RsaXN0ID0gTklMOworCisJCQlw YXJhbGxlbF9hcHBseV91bmxvY2soTXlQYXJhbGxlbFNoYXJlZC0+dHJhbnNhY3Rpb25fbG9ja19p ZCk7CisJCQlwYXJhbGxlbF9hcHBseV9zZXRfeGFjdF9zdGF0ZShNeVBhcmFsbGVsU2hhcmVkLCBQ QVJBTExFTF9UUkFOU19GSU5JU0hFRCk7CisKKwkJCWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJv Y2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQiKTsKKwkJCWJyZWFrOworCisJ CWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQogCiAJLyogUHJvY2Vz cyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8K IAlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKGNvbW1pdF9kYXRhLmVuZF9sc24pOwpAQCAtMTU1NSw2 ICsyMTYwLDEzIEBAIGFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoTG9naWNhbFJlcENvbW1p dERhdGEgKmNvbW1pdF9kYXRhKQogCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFt cCA9IGNvbW1pdF9kYXRhLT5jb21taXR0aW1lOwogCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFu ZCgpOworCisJCWlmIChJc1RyYW5zYWN0aW9uQmxvY2soKSkKKwkJeworCQkJRW5kVHJhbnNhY3Rp b25CbG9jayhmYWxzZSk7CisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJfQorCiAJ CXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKIAkJc3RvcmVfZmx1c2hfcG9zaXRpb24oY29t bWl0X2RhdGEtPmVuZF9sc24pOwpAQCAtMjQ5Miw3ICszMTA0LDcgQEAgYXBwbHlfaGFuZGxlX3Ry dW5jYXRlKFN0cmluZ0luZm8gcykKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29s IG1lc3NhZ2UgZGlzcGF0Y2hlci4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGFwcGx5X2Rpc3Bh dGNoKFN0cmluZ0luZm8gcykKIHsKIAlMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24gPSBwcV9nZXRt c2dieXRlKHMpOwpAQCAtMjY2MSw2ICszMjczLDEwIEBAIHN0b3JlX2ZsdXNoX3Bvc2l0aW9uKFhM b2dSZWNQdHIgcmVtb3RlX2xzbikKIHsKIAlGbHVzaFBvc2l0aW9uICpmbHVzaHBvczsKIAorCS8q IFNraXAgZm9yIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICovCisJaWYgKGFtX3BhcmFsbGVsX2Fw cGx5X3dvcmtlcigpKQorCQlyZXR1cm47CisKIAkvKiBOZWVkIHRvIGRvIHRoaXMgaW4gcGVybWFu ZW50IGNvbnRleHQgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKIApA QCAtMjcyNSw2ICszMzQxLDcgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChYTG9nUmVjUHRyIGxhc3Rf cmVjZWl2ZWQpCiAJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBhcHBseV9lcnJvcl9jYWxsYmFjazsK IAllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CiAJZXJyb3JfY29u dGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKwlhcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0g ZXJyb3JfY29udGV4dF9zdGFjazsKIAogCS8qIFRoaXMgb3V0ZXIgbG9vcCBpdGVyYXRlcyBvbmNl IHBlciB3YWl0LiAqLwogCWZvciAoOzspCkBAIC0yOTM5LDYgKzM1NTYsNyBAQCBMb2dpY2FsUmVw QXBwbHlMb29wKFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkKIAogCS8qIFBvcCB0aGUgZXJyb3Ig Y29udGV4dCBzdGFjayAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2 aW91czsKKwlhcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyb3JfY29udGV4dF9zdGFjazsK IAogCS8qIEFsbCBkb25lICovCiAJd2FscmN2X2VuZHN0cmVhbWluZyhMb2dSZXBXb3JrZXJXYWxS Y3ZDb25uLCAmdGxpKTsKQEAgLTMwMzksNyArMzY1Nyw3IEBAIHNlbmRfZmVlZGJhY2soWExvZ1Jl Y1B0ciByZWN2cG9zLCBib29sIGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSkKIC8qCiAgKiBSZXJl YWQgc3Vic2NyaXB0aW9uIGluZm8gaWYgbmVlZGVkLiBNb3N0IGNoYW5nZXMgd2lsbCBiZSBleGl0 LgogICovCi1zdGF0aWMgdm9pZAordm9pZAogbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lk KQogewogCU1lbW9yeUNvbnRleHQgb2xkY3R4OwpAQCAtMzA2OCwyMSArMzY4NiwzMiBAQCBtYXli ZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpCiAJICovCiAJaWYgKCFuZXdzdWIpCiAJewotCQll cmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtl ciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsICIKLQkJCQkJCSJzdG9wIGJlY2F1c2UgdGhl IHN1YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkp KTsKLQorCQlpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCQllcmVwb3J0KExPRywK KwkJCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCAiCisJCQkJCQkJInN0b3AgYmVjYXVzZSB0aGUg c3Vic2NyaXB0aW9uIHdhcyByZW1vdmVkIiwKKwkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkp KTsKKwkJZWxzZQorCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGlj YXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgIgorCQkJCQkJ CSJzdG9wIGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCIsCisJCQkJCQkJTXlT dWJzY3JpcHRpb24tPm5hbWUpKSk7CiAJCXByb2NfZXhpdCgwKTsKIAl9CiAKIAkvKiBFeGl0IGlm IHRoZSBzdWJzY3JpcHRpb24gd2FzIGRpc2FibGVkLiAqLwogCWlmICghbmV3c3ViLT5lbmFibGVk KQogCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBh cHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCAiCi0JCQkJCQkic3RvcCBi ZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIGRpc2FibGVkIiwKLQkJCQkJCU15U3Vic2NyaXB0 aW9uLT5uYW1lKSkpOworCQlpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCQllcmVw b3J0KExPRywKKwkJCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCAiCisJCQkJCQkJInN0b3AgYmVj YXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCIsCisJCQkJCQkJTXlTdWJzY3JpcHRp b24tPm5hbWUpKSk7CisJCWVsc2UKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnKCJsb2dp Y2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxs ICIKKwkJCQkJCQkic3RvcCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIGRpc2FibGVkIiwK KwkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAogCQlwcm9jX2V4aXQoMCk7CiAJfQpA QCAtMzA5NSw3ICszNzI0LDkgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogCiAJ LyoKIAkgKiBFeGl0IGlmIGFueSBwYXJhbWV0ZXIgdGhhdCBhZmZlY3RzIHRoZSByZW1vdGUgY29u bmVjdGlvbiB3YXMgY2hhbmdlZC4KLQkgKiBUaGUgbGF1bmNoZXIgd2lsbCBzdGFydCBhIG5ldyB3 b3JrZXIuCisJICogVGhlIGxhdW5jaGVyIHdpbGwgc3RhcnQgYSBuZXcgd29ya2VyLCBidXQgbm90 ZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseQorCSAqIHdvcmtlciBtYXkgb3IgbWF5IG5vdCByZXN0 YXJ0IGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlIHN0cmVhbWluZworCSAqIG9wdGlvbiBh bmQgd2hldGhlciB0aGVyZSB3aWxsIGJlIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgogCSAqLwog CWlmIChzdHJjbXAobmV3c3ViLT5jb25uaW5mbywgTXlTdWJzY3JpcHRpb24tPmNvbm5pbmZvKSAh PSAwIHx8CiAJCXN0cmNtcChuZXdzdWItPm5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSAhPSAw IHx8CkBAIC0zMTA2LDkgKzM3MzcsMTQgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lk KQogCQluZXdzdWItPm93bmVyICE9IE15U3Vic2NyaXB0aW9uLT5vd25lciB8fAogCQkhZXF1YWwo bmV3c3ViLT5wdWJsaWNhdGlvbnMsIE15U3Vic2NyaXB0aW9uLT5wdWJsaWNhdGlvbnMpKQogCXsK LQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3 b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCByZXN0YXJ0IGJlY2F1c2Ugb2YgYSBw YXJhbWV0ZXIgY2hhbmdlIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCQlpZiAo YW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1z ZygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlw dGlvbiBcIiVzXCIgd2lsbCBzdG9wIGJlY2F1c2Ugb2YgYSBwYXJhbWV0ZXIgY2hhbmdlIiwKKwkJ CQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJZWxzZQorCQkJZXJlcG9ydChMT0csCisJ CQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3Jp cHRpb24gXCIlc1wiIHdpbGwgcmVzdGFydCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIs CisJCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CiAKIAkJcHJvY19leGl0KDApOwogCX0K QEAgLTM0ODQsNiArNDEyMCwyNiBAQCBzdHJlYW1fd3JpdGVfY2hhbmdlKGNoYXIgYWN0aW9uLCBT dHJpbmdJbmZvIHMpCiB9CiAKIC8qCisgKiBzdHJlYW1fd3JpdGVfbWVzc2FnZQorICoJICBTZXJp YWxpemUgdGhlIG1lc3NhZ2UgdGhhdCBhcmUgbm90IGluIGEgc3RyZWFtaW5nIGJsb2NrIHRvIGEg ZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3N0cmVhbV93cml0ZV9tZXNzYWdlKFRyYW5zYWN0aW9u SWQgeGlkLCBjaGFyIGFjdGlvbiwgU3RyaW5nSW5mbyBzLAorCQkJCQkgYm9vbCBjcmVhdGVfZmls ZSkKK3sKKwlBc3NlcnQoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKTsKKworCXN0cmVhbV94aWQg PSB4aWQ7CisJaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSB0cnVlOworCisJc2VyaWFsaXplX3N0 cmVhbV9zdGFydCh4aWQsIGNyZWF0ZV9maWxlKTsKKwlzdHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlv biwgcyk7CisJc2VyaWFsaXplX3N0cmVhbV9zdG9wKHhpZCk7CisKKwlpbl9zdHJlYW1lZF90cmFu c2FjdGlvbiA9IGZhbHNlOworfQorCisvKgogICogQ2xlYW51cCB0aGUgbWVtb3J5IGZvciBzdWJ4 YWN0cyBhbmQgcmVzZXQgdGhlIHJlbGF0ZWQgdmFyaWFibGVzLgogICovCiBzdGF0aWMgaW5saW5l IHZvaWQKQEAgLTM1OTQsMzcgKzQyNTAsMTYgQEAgc3RhcnRfYXBwbHkoWExvZ1JlY1B0ciBvcmln aW5fc3RhcnRwb3MpCiAJUEdfRU5EX1RSWSgpOwogfQogCi0vKiBMb2dpY2FsIFJlcGxpY2F0aW9u IEFwcGx5IHdvcmtlciBlbnRyeSBwb2ludCAqLworLyoKKyAqIENvbW1vbiBpbml0aWFsaXphdGlv biBmb3IgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICoK KyAqIEluaXRpYWxpemUgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24sIGluLW1lbW9yeSBzdWJzY3Jp cHRpb24gYW5kIG5lY2Vzc2FyeQorICogY29uZmlnIG9wdGlvbnMuCisgKi8KIHZvaWQKLUFwcGx5 V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKK0luaXRpYWxpemVBcHBseVdvcmtlcih2b2lkKQog ewotCWludAkJCXdvcmtlcl9zbG90ID0gRGF0dW1HZXRJbnQzMihtYWluX2FyZyk7CiAJTWVtb3J5 Q29udGV4dCBvbGRjdHg7Ci0JY2hhcgkJb3JpZ2lubmFtZVtOQU1FREFUQUxFTl07Ci0JWExvZ1Jl Y1B0cglvcmlnaW5fc3RhcnRwb3MgPSBJbnZhbGlkWExvZ1JlY1B0cjsKLQljaGFyCSAgICpteXNs b3RuYW1lID0gTlVMTDsKLQlXYWxSY3ZTdHJlYW1PcHRpb25zIG9wdGlvbnM7Ci0JaW50CQkJc2Vy dmVyX3ZlcnNpb247Ci0KLQkvKiBBdHRhY2ggdG8gc2xvdCAqLwotCWxvZ2ljYWxyZXBfd29ya2Vy X2F0dGFjaCh3b3JrZXJfc2xvdCk7Ci0KLQkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcgKi8KLQlw cXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOwotCXBxc2lnbmFs KFNJR1RFUk0sIGRpZSk7Ci0JQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7Ci0KLQkv KgotCSAqIFdlIGRvbid0IGN1cnJlbnRseSBuZWVkIGFueSBSZXNvdXJjZU93bmVyIGluIGEgd2Fs cmVjZWl2ZXIgcHJvY2VzcywgYnV0Ci0JICogaWYgd2UgZGlkLCB3ZSBjb3VsZCBjYWxsIENyZWF0 ZUF1eFByb2Nlc3NSZXNvdXJjZU93bmVyIGhlcmUuCi0JICovCi0KLQkvKiBJbml0aWFsaXNlIHN0 YXRzIHRvIGEgc2FuaXNoIHZhbHVlICovCi0JTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3NlbmRf dGltZSA9IE15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9yZWN2X3RpbWUgPQotCQlNeUxvZ2ljYWxS ZXBXb3JrZXItPnJlcGx5X3RpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7Ci0KLQkvKiBMb2Fk IHRoZSBsaWJwcS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KLQlsb2FkX2ZpbGUoImxpYnBxd2FscmVj ZWl2ZXIiLCBmYWxzZSk7CiAKIAkvKiBSdW4gYXMgcmVwbGljYSBzZXNzaW9uIHJlcGxpY2F0aW9u IHJvbGUuICovCiAJU2V0Q29uZmlnT3B0aW9uKCJzZXNzaW9uX3JlcGxpY2F0aW9uX3JvbGUiLCAi cmVwbGljYSIsCkBAIC0zNjUxLDEwICs0Mjg2LDE2IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBt YWluX2FyZykKIAlNeVN1YnNjcmlwdGlvbiA9IEdldFN1YnNjcmlwdGlvbihNeUxvZ2ljYWxSZXBX b3JrZXItPnN1YmlkLCB0cnVlKTsKIAlpZiAoIU15U3Vic2NyaXB0aW9uKQogCXsKLQkJZXJlcG9y dChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9y IHN1YnNjcmlwdGlvbiAldSB3aWxsIG5vdCAiCi0JCQkJCQkic3RhcnQgYmVjYXVzZSB0aGUgc3Vi c2NyaXB0aW9uIHdhcyByZW1vdmVkIGR1cmluZyBzdGFydHVwIiwKLQkJCQkJCU15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQpKSk7CisJCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJ CWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVs IGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1IHdpbGwgbm90ICIKKwkJCQkJCQkic3Rh cnQgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyByZW1vdmVkIGR1cmluZyBzdGFydHVwIiwK KwkJCQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkKSkpOworCQllbHNlCisJCQllcmVwb3J0 KExPRywKKwkJCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9y IHN1YnNjcmlwdGlvbiAldSB3aWxsIG5vdCAiCisJCQkJCQkJInN0YXJ0IGJlY2F1c2UgdGhlIHN1 YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCBkdXJpbmcgc3RhcnR1cCIsCisJCQkJCQkJTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCkpKTsKIAkJcHJvY19leGl0KDApOwogCX0KIApAQCAtMzY2MywxMCAr NDMwNCwxNiBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAKIAlpZiAoIU15U3Vi c2NyaXB0aW9uLT5lbmFibGVkKQogCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9n aWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2ls bCBub3QgIgotCQkJCQkJInN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgZGlzYWJs ZWQgZHVyaW5nIHN0YXJ0dXAiLAotCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCWlm IChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJy bXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBmb3Igc3Vic2Ny aXB0aW9uIFwiJXNcIiB3aWxsIG5vdCAiCisJCQkJCQkJInN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNj cmlwdGlvbiB3YXMgZGlzYWJsZWQgZHVyaW5nIHN0YXJ0dXAiLAorCQkJCQkJCU15U3Vic2NyaXB0 aW9uLT5uYW1lKSkpOworCQllbHNlCisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1zZygibG9n aWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2ls bCBub3QgIgorCQkJCQkJCSJzdGFydCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIGRpc2Fi bGVkIGR1cmluZyBzdGFydHVwIiwKKwkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAog CQlwcm9jX2V4aXQoMCk7CiAJfQpAQCAtMzY4NCwxMiArNDMzMSw1MCBAQCBBcHBseVdvcmtlck1h aW4oRGF0dW0gbWFpbl9hcmcpCiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coImxvZ2ljYWwg cmVwbGljYXRpb24gdGFibGUgc3luY2hyb25pemF0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9u IFwiJXNcIiwgdGFibGUgXCIlc1wiIGhhcyBzdGFydGVkIiwKIAkJCQkJCU15U3Vic2NyaXB0aW9u LT5uYW1lLCBnZXRfcmVsX25hbWUoTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxpZCkpKSk7CisJZWxz ZSBpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCWVyZXBvcnQoTE9HLAorCQkJCShl cnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciBzdWJz Y3JpcHRpb24gXCIlc1wiIGhhcyBzdGFydGVkIiwKKwkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1l KSkpOwogCWVsc2UKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNh dGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAog CQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CiAKIAlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKK30KKworLyogTG9naWNhbCBSZXBsaWNhdGlvbiBBcHBseSB3b3JrZXIgZW50cnkgcG9p bnQgKi8KK3ZvaWQKK0FwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKK3sKKwlpbnQJCQl3 b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIobWFpbl9hcmcpOworCWNoYXIJCW9yaWdpbm5hbWVb TkFNRURBVEFMRU5dOworCVhMb2dSZWNQdHIJb3JpZ2luX3N0YXJ0cG9zID0gSW52YWxpZFhMb2dS ZWNQdHI7CisJY2hhcgkgICAqbXlzbG90bmFtZSA9IE5VTEw7CisJV2FsUmN2U3RyZWFtT3B0aW9u cyBvcHRpb25zOworCWludAkJCXNlcnZlcl92ZXJzaW9uOworCisJLyogQXR0YWNoIHRvIHNsb3Qg Ki8KKwlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2VyX3Nsb3QpOworCisJLyogU2V0dXAg c2lnbmFsIGhhbmRsaW5nICovCisJcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29u ZmlnUmVsb2FkKTsKKwlwcXNpZ25hbChTSUdURVJNLCBkaWUpOworCUJhY2tncm91bmRXb3JrZXJV bmJsb2NrU2lnbmFscygpOworCisJLyoKKwkgKiBXZSBkb24ndCBjdXJyZW50bHkgbmVlZCBhbnkg UmVzb3VyY2VPd25lciBpbiBhIHdhbHJlY2VpdmVyIHByb2Nlc3MsIGJ1dAorCSAqIGlmIHdlIGRp ZCwgd2UgY291bGQgY2FsbCBDcmVhdGVBdXhQcm9jZXNzUmVzb3VyY2VPd25lciBoZXJlLgorCSAq LworCisJLyogSW5pdGlhbGlzZSBzdGF0cyB0byBhIHNhbmlzaCB2YWx1ZSAqLworCU15TG9naWNh bFJlcFdvcmtlci0+bGFzdF9zZW5kX3RpbWUgPSBNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3RfcmVj dl90aW1lID0KKwkJTXlMb2dpY2FsUmVwV29ya2VyLT5yZXBseV90aW1lID0gR2V0Q3VycmVudFRp bWVzdGFtcCgpOworCisJLyogTG9hZCB0aGUgbGlicHEtc3BlY2lmaWMgZnVuY3Rpb25zICovCisJ bG9hZF9maWxlKCJsaWJwcXdhbHJlY2VpdmVyIiwgZmFsc2UpOworCisJSW5pdGlhbGl6ZUFwcGx5 V29ya2VyKCk7CiAKIAkvKiBDb25uZWN0IHRvIHRoZSBvcmlnaW4gYW5kIHN0YXJ0IHRoZSByZXBs aWNhdGlvbi4gKi8KIAllbG9nKERFQlVHMSwgImNvbm5lY3RpbmcgdG8gcHVibGlzaGVyIHVzaW5n IGNvbm5lY3Rpb24gc3RyaW5nIFwiJXNcIiIsCkBAIC0zNzEyLDcgKzQzOTcsNyBAQCBBcHBseVdv cmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJfQogCWVsc2UKIAl7Ci0JCS8qIFRoaXMgaXMgbWFp biBhcHBseSB3b3JrZXIgKi8KKwkJLyogVGhpcyBpcyBsZWFkZXIgYXBwbHkgd29ya2VyICovCiAJ CVJlcE9yaWdpbklkIG9yaWdpbmlkOwogCQlUaW1lTGluZUlECXN0YXJ0cG9pbnRUTEk7CiAJCWNo YXIJICAgKmVycjsKQEAgLTM3NzcsMTMgKzQ0NjIsMzYgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVt IG1haW5fYXJnKQogCiAJc2VydmVyX3ZlcnNpb24gPSB3YWxyY3Zfc2VydmVyX3ZlcnNpb24oTG9n UmVwV29ya2VyV2FsUmN2Q29ubik7CiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLnByb3RvX3ZlcnNp b24gPQorCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNjAwMDAgPyBMT0dJQ0FMUkVQX1BST1RPX1NUUkVB TV9QQVJBTExFTF9WRVJTSU9OX05VTSA6CiAJCXNlcnZlcl92ZXJzaW9uID49IDE1MDAwMCA/IExP R0lDQUxSRVBfUFJPVE9fVFdPUEhBU0VfVkVSU0lPTl9OVU0gOgogCQlzZXJ2ZXJfdmVyc2lvbiA+ PSAxNDAwMDAgPyBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSA6CiAJCUxPR0lD QUxSRVBfUFJPVE9fVkVSU0lPTl9OVU07CiAKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwucHVibGlj YXRpb25fbmFtZXMgPSBNeVN1YnNjcmlwdGlvbi0+cHVibGljYXRpb25zOwogCW9wdGlvbnMucHJv dG8ubG9naWNhbC5iaW5hcnkgPSBNeVN1YnNjcmlwdGlvbi0+YmluYXJ5OwotCW9wdGlvbnMucHJv dG8ubG9naWNhbC5zdHJlYW1pbmcgPSBNeVN1YnNjcmlwdGlvbi0+c3RyZWFtOworCisJLyoKKwkg KiBBc3NpZ24gdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiB2YWx1ZSBmb3Igc3RyZWFtaW5nIG9wdGlv biBhY2NvcmRpbmcgdG8KKwkgKiB0aGUgJ3N0cmVhbWluZycgbW9kZSBhbmQgdGhlIHB1Ymxpc2hl cidzIGFiaWxpdHkgdG8gc3VwcG9ydCB0aGF0IG1vZGUuCisJICovCisJaWYgKHNlcnZlcl92ZXJz aW9uID49IDE2MDAwMCAmJgorCQlNeVN1YnNjcmlwdGlvbi0+c3RyZWFtID09IFNVQlNUUkVBTV9Q QVJBTExFTCkKKwl7CisJCW9wdGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyID0gcHN0 cmR1cCgicGFyYWxsZWwiKTsKKwkJTXlMb2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSA9 IHRydWU7CisJfQorCWVsc2UgaWYgKHNlcnZlcl92ZXJzaW9uID49IDE0MDAwMCAmJgorCQkJIE15 U3Vic2NyaXB0aW9uLT5zdHJlYW0gIT0gU1VCU1RSRUFNX09GRikKKwl7CisJCW9wdGlvbnMucHJv dG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyID0gcHN0cmR1cCgib24iKTsKKwkJTXlMb2dpY2FsUmVw V29ya2VyLT5wYXJhbGxlbF9hcHBseSA9IGZhbHNlOworCX0KKwllbHNlCisJeworCQlvcHRpb25z LnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0ciA9IE5VTEw7CisJCU15TG9naWNhbFJlcFdvcmtl ci0+cGFyYWxsZWxfYXBwbHkgPSBmYWxzZTsKKwl9CisKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwu dHdvcGhhc2UgPSBmYWxzZTsKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwub3JpZ2luID0gcHN0cmR1 cChNeVN1YnNjcmlwdGlvbi0+b3JpZ2luKTsKIApAQCAtMzg4MSw2ICs0NTg5LDE1IEBAIElzTG9n aWNhbFdvcmtlcih2b2lkKQogfQogCiAvKgorICogSXMgY3VycmVudCBwcm9jZXNzIGEgbG9naWNh bCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXI/CisgKi8KK2Jvb2wKK0lzTG9naWNh bFBhcmFsbGVsQXBwbHlXb3JrZXIodm9pZCkKK3sKKwlyZXR1cm4gSXNMb2dpY2FsV29ya2VyKCkg JiYgYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCk7Cit9CisKKy8qCiAgKiBTdGFydCBza2lwcGlu ZyBjaGFuZ2VzIG9mIHRoZSB0cmFuc2FjdGlvbiBpZiB0aGUgZ2l2ZW4gTFNOIG1hdGNoZXMgdGhl CiAgKiBMU04gc3BlY2lmaWVkIGJ5IHN1YnNjcmlwdGlvbidzIHNraXBsc24uCiAgKi8KQEAgLTM5 NDIsNyArNDY1OSw3IEBAIGNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihYTG9nUmVjUHRyIGZp bmlzaF9sc24pCiAJWExvZ1JlY1B0cglteXNraXBsc24gPSBNeVN1YnNjcmlwdGlvbi0+c2tpcGxz bjsKIAlib29sCQlzdGFydGVkX3R4ID0gZmFsc2U7CiAKLQlpZiAobGlrZWx5KFhMb2dSZWNQdHJJ c0ludmFsaWQobXlza2lwbHNuKSkpCisJaWYgKGxpa2VseShYTG9nUmVjUHRySXNJbnZhbGlkKG15 c2tpcGxzbikpIHx8IGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQogCQlyZXR1cm47CiAKIAlp ZiAoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQpAQCAtNDAxNCw3ICs0NzMxLDcgQEAgY2xlYXJfc3Vi c2NyaXB0aW9uX3NraXBfbHNuKFhMb2dSZWNQdHIgZmluaXNoX2xzbikKIH0KIAogLyogRXJyb3Ig Y2FsbGJhY2sgdG8gZ2l2ZSBtb3JlIGNvbnRleHQgaW5mbyBhYm91dCB0aGUgY2hhbmdlIGJlaW5n IGFwcGxpZWQgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBhcHBseV9lcnJvcl9jYWxsYmFjayh2b2lk ICphcmcpCiB7CiAJQXBwbHlFcnJvckNhbGxiYWNrQXJnICplcnJhcmcgPSAmYXBwbHlfZXJyb3Jf Y2FsbGJhY2tfYXJnOwpAQCAtNDA0MiwyMyArNDc1OSw0NyBAQCBhcHBseV9lcnJvcl9jYWxsYmFj ayh2b2lkICphcmcpCiAJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKIAkJCQkJICAgTFNOX0ZP Uk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOwogCX0KLQllbHNlIGlmIChlcnJhcmctPnJl bW90ZV9hdHRudW0gPCAwKQotCQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZv ciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZv ciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGluIHRyYW5zYWN0aW9uICV1 LCBmaW5pc2hlZCBhdCAlWC8lWCIsCi0JCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKLQkJCQkg ICBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAotCQkJCSAgIGVycmFy Zy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVs LnJlbG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkLAotCQkJCSAgIExTTl9GT1JNQVRf QVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKIAllbHNlCi0JCWVycmNvbnRleHQoInByb2Nlc3Np bmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3Nh Z2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIg Y29sdW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAotCQkJ CSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCi0JCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUo ZXJyYXJnLT5jb21tYW5kKSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUs Ci0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAotCQkJCSAgIGVycmFyZy0+ cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKLQkJCQkgICBl cnJhcmctPnJlbW90ZV94aWQsCi0JCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNo X2xzbikpOworCXsKKwkJaWYgKGVycmFyZy0+cmVtb3RlX2F0dG51bSA8IDApCisJCXsKKwkJCWlm IChYTG9nUmVjUHRySXNJbnZhbGlkKGVycmFyZy0+ZmluaXNoX2xzbikpCisJCQkJZXJyY29udGV4 dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBk dXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9u IFwiJXMuJXNcIiBpbiB0cmFuc2FjdGlvbiAldSIsCisJCQkJCQkgICBlcnJhcmctPm9yaWdpbl9u YW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwK KwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKKwkJCQkJCSAgIGVycmFy Zy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCk7 CisJCQllbHNlCisJCQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVw bGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVw bGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmlu aXNoZWQgYXQgJVgvJVgiLAorCQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAg IGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJh cmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3Rl cmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCisJCQkJCQkgICBMU05f Rk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNuKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlp ZiAoWExvZ1JlY1B0cklzSW52YWxpZChlcnJhcmctPmZpbmlzaF9sc24pKQorCQkJCWVycmNvbnRl eHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIg ZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlv biBcIiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAldSIsCisJCQkJCQkgICBl cnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJy YXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwK KwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVycmFy Zy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKKwkJCQkJ CSAgIGVycmFyZy0+cmVtb3RlX3hpZCk7CisJCQllbHNlCisJCQkJZXJyY29udGV4dCgicHJvY2Vz c2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVz c2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNc IiBjb2x1bW4gXCIlc1wiIGluIHRyYW5zYWN0aW9uICV1LCBmaW5pc2hlZCBhdCAlWC8lWCIsCisJ CQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdl X3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwu bnNwbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJ CSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVt XSwKKwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJH UyhlcnJhcmctPmZpbmlzaF9sc24pKTsKKwkJfQorCX0KIH0KIAogLyogU2V0IHRyYW5zYWN0aW9u IGluZm9ybWF0aW9uIG9mIGFwcGx5IGVycm9yIGNhbGxiYWNrICovCkBAIC00MDc4LDMgKzQ4MTks NDMgQEAgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKHZvaWQpCiAJYXBwbHlfZXJyb3Jf Y2FsbGJhY2tfYXJnLnJlbW90ZV9hdHRudW0gPSAtMTsKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4 dF94YWN0KEludmFsaWRUcmFuc2FjdGlvbklkLCBJbnZhbGlkWExvZ1JlY1B0cik7CiB9CisKKy8q CisgKiBSZXR1cm4gdGhlIGFjdGlvbiB0byB0YWtlIGZvciB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24u ICp3aW5mbyBpcyBhc3NpZ25lZCB0bworICogdGhlIGRlc3RpbmF0aW9uIHBhcmFsbGVsIHdvcmtl ciBpbmZvIChpZiB0aGUgYWN0aW9uIGlzCisgKiBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExF TCBvciBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkUpLCBvdGhlcndpc2UKKyAqICp3aW5m byBpcyBhc3NpZ25lZCBOVUxMLgorICovCitzdGF0aWMgVHJhbnNBcHBseUFjdGlvbgorZ2V0X3Ry YW5zYWN0aW9uX2FwcGx5X2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwgUGFyYWxsZWxBcHBseVdv cmtlckluZm8gKip3aW5mbykKK3sKKwkqd2luZm8gPSBOVUxMOworCisJaWYgKGFtX3BhcmFsbGVs X2FwcGx5X3dvcmtlcigpKQorCXsKKwkJcmV0dXJuIFRSQU5TX1BBUkFMTEVMX0FQUExZOworCX0K KwllbHNlIGlmIChpbl9yZW1vdGVfdHJhbnNhY3Rpb24pCisJeworCQlyZXR1cm4gVFJBTlNfTEVB REVSX0FQUExZOworCX0KKworCS8qCisJICogQ2hlY2sgaWYgd2UgYXJlIHByb2Nlc3NpbmcgdGhp cyB0cmFuc2FjdGlvbiB1c2luZyBhIHBhcmFsbGVsIGFwcGx5CisJICogd29ya2VyLgorCSAqLwor CSp3aW5mbyA9IHBhcmFsbGVsX2FwcGx5X2ZpbmRfd29ya2VyKHhpZCk7CisKKwlpZiAoKndpbmZv ID09IE5VTEwpCisJeworCQlyZXR1cm4gVFJBTlNfTEVBREVSX1NFUklBTElaRTsKKwl9CisJZWxz ZSBpZiAoKCp3aW5mbyktPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCXsKKwkJcmV0dXJuIFRSQU5TX0xF QURFUl9QQVJUSUFMX1NFUklBTElaRTsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuIFRSQU5TX0xF QURFUl9TRU5EX1RPX1BBUkFMTEVMOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9w Z291dHB1dC9wZ291dHB1dC5jCmluZGV4IDJlY2FhNWIuLmMzYWNjZjIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtMzY5LDcgKzM2OSw3IEBAIHBh cnNlX291dHB1dF9wYXJhbWV0ZXJzKExpc3QgKm9wdGlvbnMsIFBHT3V0cHV0RGF0YSAqZGF0YSkK IAkJCQkJCSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zIikpKTsKIAkJ CXN0cmVhbWluZ19naXZlbiA9IHRydWU7CiAKLQkJCWRhdGEtPnN0cmVhbWluZyA9IGRlZkdldEJv b2xlYW4oZGVmZWwpOworCQkJZGF0YS0+c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShk ZWZlbCk7CiAJCX0KIAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNl IikgPT0gMCkKIAkJewpAQCAtNDYxLDEzICs0NjEsMjAgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAkJICog d2Ugb25seSBhbGxvdyBpdCB3aXRoIHN1ZmZpY2llbnQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2ws IGFuZCB3aGVuCiAJCSAqIHRoZSBvdXRwdXQgcGx1Z2luIHN1cHBvcnRzIGl0LgogCQkgKi8KLQkJ aWYgKCFkYXRhLT5zdHJlYW1pbmcpCisJCWlmIChkYXRhLT5zdHJlYW1pbmcgPT0gU1VCU1RSRUFN X09GRikKIAkJCWN0eC0+c3RyZWFtaW5nID0gZmFsc2U7Ci0JCWVsc2UgaWYgKGRhdGEtPnByb3Rv Y29sX3ZlcnNpb24gPCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSkKKwkJZWxz ZSBpZiAoZGF0YS0+c3RyZWFtaW5nID09IFNVQlNUUkVBTV9PTiAmJgorCQkJCSBkYXRhLT5wcm90 b2NvbF92ZXJzaW9uIDwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9OVU0pCiAJCQll cmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKIAkJCQkJIGVycm1zZygicmVxdWVzdGVkIHByb3RvX3ZlcnNpb249JWQgZG9lcyBub3Qg c3VwcG9ydCBzdHJlYW1pbmcsIG5lZWQgJWQgb3IgaGlnaGVyIiwKIAkJCQkJCQlkYXRhLT5wcm90 b2NvbF92ZXJzaW9uLCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSkpKTsKKwkJ ZWxzZSBpZiAoZGF0YS0+c3RyZWFtaW5nID09IFNVQlNUUkVBTV9QQVJBTExFTCAmJgorCQkJCSBk YXRhLT5wcm90b2NvbF92ZXJzaW9uIDwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fUEFSQUxMRUxf VkVSU0lPTl9OVU0pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygicmVxdWVzdGVkIHByb3RvX3Zl cnNpb249JWQgZG9lcyBub3Qgc3VwcG9ydCBwYXJhbGxlbCBzdHJlYW1pbmcsIG5lZWQgJWQgb3Ig aGlnaGVyIiwKKwkJCQkJCQlkYXRhLT5wcm90b2NvbF92ZXJzaW9uLCBMT0dJQ0FMUkVQX1BST1RP X1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSkpKTsKIAkJZWxzZSBpZiAoIWN0eC0+c3RyZWFt aW5nKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCkBAIC01MTMsNyArNTIwLDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAkJICog RGlzYWJsZSB0aGUgc3RyZWFtaW5nIGFuZCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgZHVyaW5nIHRo ZSBzbG90CiAJCSAqIGluaXRpYWxpemF0aW9uIG1vZGUuCiAJCSAqLwotCQljdHgtPnN0cmVhbWlu ZyA9IGZhbHNlOworCQljdHgtPnN0cmVhbWluZyA9IFNVQlNUUkVBTV9PRkY7CiAJCWN0eC0+dHdv cGhhc2UgPSBmYWxzZTsKIAl9CiB9CkBAIC0xODM5LDYgKzE4NDYsOCBAQCBwZ291dHB1dF9zdHJl YW1fYWJvcnQoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJICBYTG9n UmVjUHRyIGFib3J0X2xzbikKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0b3B0eG47CisJUEdPdXRw dXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0 ZTsKKwlib29sCQl3cml0ZV9hYm9ydF9pbmZvID0gKGRhdGEtPnN0cmVhbWluZyA9PSBTVUJTVFJF QU1fUEFSQUxMRUwpOwogCiAJLyoKIAkgKiBUaGUgYWJvcnQgc2hvdWxkIGhhcHBlbiBvdXRzaWRl IHN0cmVhbWluZyBibG9jaywgZXZlbiBmb3Igc3RyZWFtZWQKQEAgLTE4NTIsNyArMTg2MSw5IEBA IHBnb3V0cHV0X3N0cmVhbV9hYm9ydChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LAogCUFzc2VydChyYnR4bl9pc19zdHJlYW1lZCh0b3B0eG4pKTsKIAogCU91dHB1dFBsdWdpblBy ZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCWxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KGN0 eC0+b3V0LCB0b3B0eG4tPnhpZCwgdHhuLT54aWQpOworCWxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFt X2Fib3J0KGN0eC0+b3V0LCB0b3B0eG4tPnhpZCwgdHhuLT54aWQsIGFib3J0X2xzbiwKKwkJCQkJ CQkJICB0eG4tPnhhY3RfdGltZS5hYm9ydF90aW1lLCB3cml0ZV9hYm9ydF9pbmZvKTsKKwogCU91 dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiAKIAljbGVhbnVwX3JlbF9zeW5jX2NhY2hlKHRv cHR4bi0+eGlkLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXgg Nzc2NzY1Ny4uN2MwMDlkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAt MjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9n aWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHNlbmRlci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMu aCIKQEAgLTY1Nyw2ICs2NTgsOSBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihTSUdOQUxf QVJHUykKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhUKSkK IAkJSGFuZGxlTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKENoZWNrUHJvY1Np Z25hbChQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UpKQorCQlIYW5kbGVQYXJhbGxlbEFw cGx5TWVzc2FnZUludGVycnVwdCgpOworCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1JF Q09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFKSkKIAkJUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQ Uk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4 IDMwODIwOTMuLmY1MmU1YmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMu YworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTMzNzksNiArMzM3OSw5IEBA IFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAKIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcp CiAJCVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CisKKwlpZiAoUGFyYWxsZWxB cHBseU1lc3NhZ2VQZW5kaW5nKQorCQlIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKTsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCA5MmYyNGE2 Li5kY2ZmNTk4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2 ZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0y MzAsNiArMjMwLDkgQEAgcGdzdGF0X2dldF93YWl0X2FjdGl2aXR5KFdhaXRFdmVudEFjdGl2aXR5 IHcpCiAJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX0xBVU5DSEVSX01BSU46CiAJCQlldmVudF9u YW1lID0gIkxvZ2ljYWxMYXVuY2hlck1haW4iOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVO VF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX01BSU46CisJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxQ YXJhbGxlbEFwcGx5TWFpbiI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX1JFQ09WRVJZ X1dBTF9TVFJFQU06CiAJCQlldmVudF9uYW1lID0gIlJlY292ZXJ5V2FsU3RyZWFtIjsKIAkJCWJy ZWFrOwpAQCAtMzg4LDYgKzM5MSw5IEBAIHBnc3RhdF9nZXRfd2FpdF9pcGMoV2FpdEV2ZW50SVBD IHcpCiAJCWNhc2UgV0FJVF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19SRUlOU0VSVDoKIAkJCWV2 ZW50X25hbWUgPSAiSGFzaEdyb3dCdWNrZXRzUmVpbnNlcnQiOwogCQkJYnJlYWs7CisJCWNhc2Ug V0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRToKKwkJCWV2ZW50 X25hbWUgPSAiTG9naWNhbFBhcmFsbGVsQXBwbHlTdGF0ZUNoYW5nZSI7CisJCQlicmVhazsKIAkJ Y2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19EQVRBOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dp Y2FsU3luY0RhdGEiOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmlu ZGV4IDgzNmI0OTQuLjY3NGJhOGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBA IC0yOTYyLDYgKzI5NjIsMTggQEAgc3RydWN0IGNvbmZpZ19pbnQgQ29uZmlndXJlTmFtZXNJbnRb XSA9CiAJfSwKIAogCXsKKwkJeyJtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2Ny aXB0aW9uIiwKKwkJCVBHQ19TSUdIVVAsCisJCQlSRVBMSUNBVElPTl9TVUJTQ1JJQkVSUywKKwkJ CWdldHRleHRfbm9vcCgiTWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBw ZXIgc3Vic2NyaXB0aW9uLiIpLAorCQkJTlVMTCwKKwkJfSwKKwkJJm1heF9wYXJhbGxlbF9hcHBs eV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24sCisJCTIsIDAsIE1BWF9CQUNLRU5EUywKKwkJTlVM TCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CiAJCXsibG9nX3JvdGF0aW9uX2FnZSIsIFBHQ19TSUdI VVAsIExPR0dJTkdfV0hFUkUsCiAJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIGFtb3VudCBvZiB0 aW1lIHRvIHdhaXQgYmVmb3JlIGZvcmNpbmcgIgogCQkJCQkJICJsb2cgZmlsZSByb3RhdGlvbi4i KSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRl eCA4NjhkMjFjLi40ZDAxY2E5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlCkBAIC0zNjAsNiArMzYwLDcgQEAKICNtYXhfbG9naWNhbF9yZXBsaWNh dGlvbl93b3JrZXJzID0gNAkjIHRha2VuIGZyb20gbWF4X3dvcmtlcl9wcm9jZXNzZXMKIAkJCQkJ IyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCiAjbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2Ny aXB0aW9uID0gMgkjIHRha2VuIGZyb20gbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vycwor I21heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyCSMgdGFrZW4g ZnJvbSBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzCiAKIAogIy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggYmQ5YjA2Ni4uMDFiMmI2MCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBA IC00NDgxLDcgKzQ0ODEsNyBAQCBnZXRTdWJzY3JpcHRpb25zKEFyY2hpdmUgKmZvdXQpCiAJaWYg KGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTQwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihx dWVyeSwgIiBzLnN1YnN0cmVhbSxcbiIpOwogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksICIgZmFsc2UgQVMgc3Vic3RyZWFtLFxuIik7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LCAiICdmJyBBUyBzdWJzdHJlYW0sXG4iKTsKIAogCWlmIChmb3V0LT5yZW1vdGVWZXJz aW9uID49IDE1MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCkBAIC00NjE4LDgg KzQ2MTgsMTAgQEAgZHVtcFN1YnNjcmlwdGlvbihBcmNoaXZlICpmb3V0LCBjb25zdCBTdWJzY3Jp cHRpb25JbmZvICpzdWJpbmZvKQogCWlmIChzdHJjbXAoc3ViaW5mby0+c3ViYmluYXJ5LCAidCIp ID09IDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCBiaW5hcnkgPSB0cnVlIik7 CiAKLQlpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN0cmVhbSwgImYiKSAhPSAwKQorCWlmIChzdHJj bXAoc3ViaW5mby0+c3Vic3RyZWFtLCAidCIpID09IDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LCAiLCBzdHJlYW1pbmcgPSBvbiIpOworCWVsc2UgaWYgKHN0cmNtcChzdWJpbmZvLT5z dWJzdHJlYW0sICJwIikgPT0gMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHN0 cmVhbWluZyA9IHBhcmFsbGVsIik7CiAKIAlpZiAoc3RyY21wKHN1YmluZm8tPnN1YnR3b3BoYXNl c3RhdGUsIHR3b19waGFzZV9kaXNhYmxlZCkgIT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksICIsIHR3b19waGFzZSA9IG9uIik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3N1YnNjcmlwdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRp b24uaAppbmRleCA3Yjk4NzE0Li4wMTZhZmJjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3N1YnNjcmlwdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2Ny aXB0aW9uLmgKQEAgLTgwLDcgKzgwLDggQEAgQ0FUQUxPRyhwZ19zdWJzY3JpcHRpb24sNjEwMCxT dWJzY3JpcHRpb25SZWxhdGlvbklkKSBCS0lfU0hBUkVEX1JFTEFUSU9OIEJLSV9ST1cKIAlib29s CQlzdWJiaW5hcnk7CQkvKiBUcnVlIGlmIHRoZSBzdWJzY3JpcHRpb24gd2FudHMgdGhlCiAJCQkJ CQkJCSAqIHB1Ymxpc2hlciB0byBzZW5kIGRhdGEgaW4gYmluYXJ5ICovCiAKLQlib29sCQlzdWJz dHJlYW07CQkvKiBTdHJlYW0gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiAqLworCWNoYXIJCXN1 YnN0cmVhbTsJCS8qIFN0cmVhbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuIFNlZQorCQkJCQkJ CQkgKiBTVUJTVFJFQU1feHh4IGNvbnN0YW50cy4gKi8KIAogCWNoYXIJCXN1YnR3b3BoYXNlc3Rh dGU7CS8qIFN0cmVhbSB0d28tcGhhc2UgdHJhbnNhY3Rpb25zICovCiAKQEAgLTEyNCw3ICsxMjUs OCBAQCB0eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAlib29sCQllbmFibGVkOwkJLyogSW5k aWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gaXMgZW5hYmxlZCAqLwogCWJvb2wJCWJpbmFyeTsJ CQkvKiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyBkYXRhIGluCiAJCQkJCQkJ CSAqIGJpbmFyeSBmb3JtYXQgKi8KLQlib29sCQlzdHJlYW07CQkJLyogQWxsb3cgc3RyZWFtaW5n IGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KKwljaGFyCQlzdHJlYW07CQkJLyogQWxsb3cg c3RyZWFtaW5nIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KKwkJCQkJCQkJICogU2VlIFNVQlNU UkVBTV94eHggY29uc3RhbnRzLiAqLwogCWNoYXIJCXR3b3BoYXNlc3RhdGU7CS8qIEFsbG93IHN0 cmVhbWluZyB0d28tcGhhc2UgdHJhbnNhY3Rpb25zICovCiAJYm9vbAkJZGlzYWJsZW9uZXJyOwkv KiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUKIAkJCQkJCQkJICogYXV0 b21hdGljYWxseSBkaXNhYmxlZCBpZiBhIHdvcmtlciBlcnJvcgpAQCAtMTM3LDYgKzEzOSwyMSBA QCB0eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAkJCQkJCQkJICogc3BlY2lmaWVkIG9yaWdp biAqLwogfSBTdWJzY3JpcHRpb247CiAKKy8qIERpc2FsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVz cyB0cmFuc2FjdGlvbnMuICovCisjZGVmaW5lIFNVQlNUUkVBTV9PRkYgJ2YnCisKKy8qCisgKiBT dHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGFyZSB3cml0dGVuIHRvIGEgdGVtcG9y YXJ5IGZpbGUgYW5kCisgKiBhcHBsaWVkIG9ubHkgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNv bW1pdHRlZCBvbiB1cHN0cmVhbS4KKyAqLworI2RlZmluZSBTVUJTVFJFQU1fT04gJ3QnCisKKy8q CisgKiBTdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGFyZSBhcHBsaWVkIGltbWVk aWF0ZWx5IHZpYSBhIHBhcmFsbGVsCisgKiBhcHBseSB3b3JrZXIuCisgKi8KKyNkZWZpbmUgU1VC U1RSRUFNX1BBUkFMTEVMICdwJworCiBleHRlcm4gU3Vic2NyaXB0aW9uICpHZXRTdWJzY3JpcHRp b24oT2lkIHN1YmlkLCBib29sIG1pc3Npbmdfb2spOwogZXh0ZXJuIHZvaWQgRnJlZVN1YnNjcmlw dGlvbihTdWJzY3JpcHRpb24gKnN1Yik7CiBleHRlcm4gdm9pZCBEaXNhYmxlU3Vic2NyaXB0aW9u KE9pZCBzdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZyZW0uaCBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCmluZGV4IDU2ZDJiYjYuLmY2YmE1ZmYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCisrKyBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2RlZnJlbS5oCkBAIC0xNTQsNiArMTU0LDcgQEAgZXh0ZXJuIExpc3QgKmRlZkdl dFF1YWxpZmllZE5hbWUoRGVmRWxlbSAqZGVmKTsKIGV4dGVybiBUeXBlTmFtZSAqZGVmR2V0VHlw ZU5hbWUoRGVmRWxlbSAqZGVmKTsKIGV4dGVybiBpbnQJZGVmR2V0VHlwZUxlbmd0aChEZWZFbGVt ICpkZWYpOwogZXh0ZXJuIExpc3QgKmRlZkdldFN0cmluZ0xpc3QoRGVmRWxlbSAqZGVmKTsKK2V4 dGVybiBjaGFyIGRlZkdldFN0cmVhbWluZ01vZGUoRGVmRWxlbSAqZGVmKTsKIGV4dGVybiB2b2lk IGVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKERlZkVsZW0gKmRlZmVsLCBQYXJzZVN0YXRlICpwc3Rh dGUpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogCiAjZW5kaWYJCQkJCQkJLyogREVGUkVNX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5o IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgKaW5kZXggZjFlMjgy MS4uZDUxM2VmNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxh dW5jaGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgK QEAgLTE0LDYgKzE0LDcgQEAKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfbG9naWNhbF9y ZXBsaWNhdGlvbl93b3JrZXJzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfc3luY193b3Jr ZXJzX3Blcl9zdWJzY3JpcHRpb247CitleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxl bF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb247CiAKIGV4dGVybiB2b2lkIEFwcGx5TGF1 bmNoZXJSZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIEFwcGx5TGF1bmNoZXJNYWluKERhdHVt IG1haW5fYXJnKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxw cm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggN2Vh YTRjOS4uMWRhN2IwMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAg LTMyLDEyICszMiwxNyBAQAogICoKICAqIExPR0lDQUxSRVBfUFJPVE9fVFdPUEhBU0VfVkVSU0lP Tl9OVU0gaXMgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiB3aXRoCiAgKiBzdXBwb3J0IGZv ciB0d28tcGhhc2UgY29tbWl0IGRlY29kaW5nIChhdCBwcmVwYXJlIHRpbWUpLiBJbnRyb2R1Y2Vk IGluIFBHMTUuCisgKgorICogTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fUEFSQUxMRUxfVkVSU0lP Tl9OVU0gaXMgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbgorICogd2hlcmUgd2Ugc3VwcG9y dCBhcHBseWluZyBsYXJnZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zIGluIHBhcmFsbGVsLgorICog SW50cm9kdWNlZCBpbiBQRzE2LgogICovCiAjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fTUlOX1ZF UlNJT05fTlVNIDEKICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19WRVJTSU9OX05VTSAxCiAjZGVm aW5lIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNIDIKICNkZWZpbmUgTE9HSUNB TFJFUF9QUk9UT19UV09QSEFTRV9WRVJTSU9OX05VTSAzCi0jZGVmaW5lIExPR0lDQUxSRVBfUFJP VE9fTUFYX1ZFUlNJT05fTlVNIExPR0lDQUxSRVBfUFJPVE9fVFdPUEhBU0VfVkVSU0lPTl9OVU0K KyNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0gNAor I2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX01BWF9WRVJTSU9OX05VTSBMT0dJQ0FMUkVQX1BST1RP X1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTQogCiAvKgogICogTG9naWNhbCBtZXNzYWdlIHR5 cGVzCkBAIC0xNzUsNiArMTgwLDE3IEBAIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBSb2xsYmFj a1ByZXBhcmVkVHhuRGF0YQogCWNoYXIJCWdpZFtHSURTSVpFXTsKIH0gTG9naWNhbFJlcFJvbGxi YWNrUHJlcGFyZWRUeG5EYXRhOwogCisvKgorICogVHJhbnNhY3Rpb24gcHJvdG9jb2wgaW5mb3Jt YXRpb24gZm9yIHN0cmVhbSBhYm9ydC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFN0 cmVhbUFib3J0RGF0YQoreworCVRyYW5zYWN0aW9uSWQgeGlkOworCVRyYW5zYWN0aW9uSWQgc3Vi eGlkOworCVhMb2dSZWNQdHIJYWJvcnRfbHNuOworCVRpbWVzdGFtcFR6IGFib3J0X3RpbWU7Cit9 IExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGE7CisKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3Jp dGVfYmVnaW4oU3RyaW5nSW5mbyBvdXQsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CiBleHRlcm4g dm9pZCBsb2dpY2FscmVwX3JlYWRfYmVnaW4oU3RyaW5nSW5mbyBpbiwKIAkJCQkJCQkJICBMb2dp Y2FsUmVwQmVnaW5EYXRhICpiZWdpbl9kYXRhKTsKQEAgLTI0Niw5ICsyNjIsMTMgQEAgZXh0ZXJu IHZvaWQgbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gb3V0LCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4KIGV4dGVybiBUcmFuc2FjdGlvbklkIGxvZ2ljYWxyZXBfcmVhZF9z dHJlYW1fY29tbWl0KFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJCQkJCQkgICBMb2dpY2FsUmVwQ29t bWl0RGF0YSAqY29tbWl0X2RhdGEpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9zdHJl YW1fYWJvcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCQkJCSAg VHJhbnNhY3Rpb25JZCBzdWJ4aWQpOwotZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWFkX3N0cmVh bV9hYm9ydChTdHJpbmdJbmZvIGluLCBUcmFuc2FjdGlvbklkICp4aWQsCi0JCQkJCQkJCQkJIFRy YW5zYWN0aW9uSWQgKnN1YnhpZCk7CisJCQkJCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCwK KwkJCQkJCQkJCQkgIFhMb2dSZWNQdHIgYWJvcnRfbHNuLAorCQkJCQkJCQkJCSAgVGltZXN0YW1w VHogYWJvcnRfdGltZSwKKwkJCQkJCQkJCQkgIGJvb2wgd3JpdGVfYWJvcnRfaW5mbyk7CitleHRl cm4gdm9pZCBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gaW4sCisJCQkJ CQkJCQkJIExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFib3J0X2RhdGEsCisJCQkJCQkJCQkJ IGJvb2wgcmVhZF9hYm9ydF9pbmZvKTsKIGV4dGVybiBjaGFyICpsb2dpY2FscmVwX21lc3NhZ2Vf dHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pOwogCiAjZW5kaWYJCQkJCQkJLyogTE9HSUNB TF9QUk9UT19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fs d29ya2VyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKaW5kZXgg Y2QxYjZlOC4uZGM2OGNkOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHdvcmtlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIu aApAQCAtMTIsOCArMTIsMTYgQEAKICNpZm5kZWYgTE9HSUNBTFdPUktFUl9ICiAjZGVmaW5lIExP R0lDQUxXT1JLRVJfSAogCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK2V4dGVybiBQR0RMTElNUE9S VCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nOworCiBl eHRlcm4gdm9pZCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpOworZXh0ZXJuIHZvaWQg UGFyYWxsZWxBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpOwogCiBleHRlcm4gYm9vbCBJ c0xvZ2ljYWxXb3JrZXIodm9pZCk7CitleHRlcm4gYm9vbCBJc0xvZ2ljYWxQYXJhbGxlbEFwcGx5 V29ya2VyKHZvaWQpOworZXh0ZXJuIHZvaWQgSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRl cnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXModm9p ZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBMT0dJQ0FMV09SS0VSX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9wZ291dHB1dC5oCmluZGV4IDAyMDI3NTUuLjNjMzBkYTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v cGdvdXRwdXQuaApAQCAtMjYsNyArMjYsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEK IAlMaXN0CSAgICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CiAJ Ym9vbAkJYmluYXJ5OwotCWJvb2wJCXN0cmVhbWluZzsKKwljaGFyCQlzdHJlYW1pbmc7CiAJYm9v bAkJbWVzc2FnZXM7CiAJYm9vbAkJdHdvX3BoYXNlOwogCWNoYXIJICAgKm9yaWdpbjsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCAwMmI1OWExLi4xNTQ5MTE2IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0zMDEsNiArMzAxLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlclRYTgogCXsKIAkJVGltZXN0YW1wVHogY29t bWl0X3RpbWU7CiAJCVRpbWVzdGFtcFR6IHByZXBhcmVfdGltZTsKKwkJVGltZXN0YW1wVHogYWJv cnRfdGltZTsKIAl9CQkJeGFjdF90aW1lOwogCiAJLyoKQEAgLTY2NCw5ICs2NjUsMTEgQEAgZXh0 ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFzc2lnbkNoaWxkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFu c2FjdGlvbklkIHhpZCwKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXRDaGlsZChSZW9y ZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQkgVHJhbnNhY3Rpb25J ZCBzdWJ4aWQsIFhMb2dSZWNQdHIgY29tbWl0X2xzbiwKIAkJCQkJCQkJCSBYTG9nUmVjUHRyIGVu ZF9sc24pOwotZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJi LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOworZXh0ZXJuIHZvaWQgUmVvcmRl ckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1Jl Y1B0ciBsc24sCisJCQkJCQkJICAgVGltZXN0YW1wVHogYWJvcnRfdGltZSk7CiBleHRlcm4gdm9p ZCBSZW9yZGVyQnVmZmVyQWJvcnRPbGQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQg b2xkZXN0UnVubmluZ1hpZCk7Ci1leHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3Jk ZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOworZXh0ZXJu IHZvaWQgUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25J ZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQlUaW1lc3RhbXBUeiBhYm9ydF90aW1lKTsK IGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJJbnZhbGlkYXRlKFJlb3JkZXJCdWZmZXIgKnJiLCBU cmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOwogCiBleHRlcm4gdm9pZCBSZW9yZGVy QnVmZmVyU2V0QmFzZVNuYXBzaG90KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhp ZCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCmluZGV4IDkzMzlmMjkuLjBjOGJi ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaApAQCAtMTgyLDcgKzE4Miw3 IEBAIHR5cGVkZWYgc3RydWN0CiAJCQl1aW50MzIJCXByb3RvX3ZlcnNpb247CS8qIExvZ2ljYWwg cHJvdG9jb2wgdmVyc2lvbiAqLwogCQkJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CS8qIFN0 cmluZyBsaXN0IG9mIHB1YmxpY2F0aW9ucyAqLwogCQkJYm9vbAkJYmluYXJ5OyAvKiBBc2sgcHVi bGlzaGVyIHRvIHVzZSBiaW5hcnkgKi8KLQkJCWJvb2wJCXN0cmVhbWluZzsJLyogU3RyZWFtaW5n IG9mIGxhcmdlIHRyYW5zYWN0aW9ucyAqLworCQkJY2hhcgkgICAqc3RyZWFtaW5nX3N0cjsJLyog U3RyZWFtaW5nIG9mIGxhcmdlIHRyYW5zYWN0aW9ucyAqLwogCQkJYm9vbAkJdHdvcGhhc2U7CS8q IFN0cmVhbWluZyBvZiB0d28tcGhhc2UgdHJhbnNhY3Rpb25zIGF0CiAJCQkJCQkJCQkgKiBwcmVw YXJlIHRpbWUgKi8KIAkJCWNoYXIJICAgKm9yaWdpbjsgLyogT25seSBwdWJsaXNoIGRhdGEgb3Jp Z2luYXRpbmcgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dv cmtlcl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFs LmgKaW5kZXggMmI3MTE0Zi4uMjllZTc4YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29y a2VyX2ludGVybmFsLmgKQEAgLTE3LDggKzE3LDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dk ZWZzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCIKICNpbmNsdWRlICJk YXRhdHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZpbGVzZXQu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobV9tcS5o IgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5o IgogCiAKQEAgLTYwLDYgKzY0LDE1IEBAIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBXb3JrZXIK IAkgKi8KIAlGaWxlU2V0ICAgICpzdHJlYW1fZmlsZXNldDsKIAorCS8qCisJICogUElEIG9mIGxl YWRlciBhcHBseSB3b3JrZXIgaWYgdGhpcyBzbG90IGlzIHVzZWQgZm9yIGEgcGFyYWxsZWwgYXBw bHkKKwkgKiB3b3JrZXIsIEludmFsaWRQaWQgb3RoZXJ3aXNlLgorCSAqLworCXBpZF90CQlhcHBs eV9sZWFkZXJfcGlkOworCisJLyogSW5kaWNhdGVzIHdoZXRoZXIgYXBwbHkgY2FuIGJlIHBlcmZv cm1lZCBpbiBwYXJhbGxlbC4gKi8KKwlib29sCQlwYXJhbGxlbF9hcHBseTsKKwogCS8qIFN0YXRz LiAqLwogCVhMb2dSZWNQdHIJbGFzdF9sc247CiAJVGltZXN0YW1wVHogbGFzdF9zZW5kX3RpbWU7 CkBAIC02OCw5ICs4MSwxMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgogCVRp bWVzdGFtcFR6IHJlcGx5X3RpbWU7CiB9IExvZ2ljYWxSZXBXb3JrZXI7CiAKKy8qIFN0cnVjdCBm b3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgYXBwbHkgZXJyY29udGV4dCBpbmZvcm1hdGlvbiAqLwor dHlwZWRlZiBzdHJ1Y3QgQXBwbHlFcnJvckNhbGxiYWNrQXJnCit7CisJTG9naWNhbFJlcE1zZ1R5 cGUgY29tbWFuZDsJLyogMCBpZiBpbnZhbGlkICovCisJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpy ZWw7CisKKwkvKiBSZW1vdGUgbm9kZSBpbmZvcm1hdGlvbiAqLworCWludAkJCXJlbW90ZV9hdHRu dW07CS8qIC0xIGlmIGludmFsaWQgKi8KKwlUcmFuc2FjdGlvbklkIHJlbW90ZV94aWQ7CisJWExv Z1JlY1B0cglmaW5pc2hfbHNuOworCWNoYXIJICAgKm9yaWdpbl9uYW1lOworfSBBcHBseUVycm9y Q2FsbGJhY2tBcmc7CisKKy8qIFN0YXRlIG9mIHRoZSB0cmFuc2FjdGlvbiBpbiBwYXJhbGxlbCBh cHBseSB3b3JrZXIgKi8KK3R5cGVkZWYgZW51bSBQYXJhbGxlbFRyYW5zU3RhdGUKK3sKKwlQQVJB TExFTF9UUkFOU19VTktOT1dOLAorCVBBUkFMTEVMX1RSQU5TX1NUQVJURUQsCisJUEFSQUxMRUxf VFJBTlNfRklOSVNIRUQKK30gUGFyYWxsZWxUcmFuc1N0YXRlOworCisvKgorICogU3RydWN0IGZv ciBzaGFyaW5nIGluZm9ybWF0aW9uIGJldHdlZW4gbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFy YWxsZWwKKyAqIGFwcGx5IHdvcmtlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFBhcmFsbGVsQXBw bHlXb3JrZXJTaGFyZWQKK3sKKwlzbG9ja190CQltdXRleDsKKworCVRyYW5zYWN0aW9uSWQJeGlk OworCisJLyoKKwkgKiBGbGFnIHVzZWQgdG8gZW5zdXJlIGNvbW1pdCBvcmRlcmluZy4KKwkgKgor CSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2lsbCBzZXQgaXQgdG8gZmFsc2UgYWZ0ZXIg aGFuZGxpbmcgdGhlCisJICogdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzIHdoaWxlIHRoZSBh cHBseSBsZWFkZXIgd2lsbCB3YWl0IGZvciBpdCB0bworCSAqIGJlY29tZSBmYWxzZSBiZWZvcmUg cHJvY2VlZGluZyBpbiB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZHMgKGUuZy4KKwkgKiBTVFJF QU1fQ09NTUlUL1NUUkVBTV9BQk9SVC9TVFJFQU1fUFJFUEFSRSkuCisJICovCisJUGFyYWxsZWxU cmFuc1N0YXRlCQl4YWN0X3N0YXRlOworCisJLyogVW5pcXVlIGlkZW50aWZpZXJzIGluIHRoZSBj dXJyZW50IHN1YnNjcmlwdGlvbiB0aGF0IHVzZWQgdG8gbG9jay4gKi8KKwl1aW50MTYJCXN0cmVh bV9sb2NrX2lkOworCXVpbnQxNgkJdHJhbnNhY3Rpb25fbG9ja19pZDsKKworCS8qIEluZm9ybWF0 aW9uIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgTG9naWNhbFJlcFdvcmtlciBzbG90LiAqLworCXVp bnQxNgkJbG9naWNhbHJlcF93b3JrZXJfZ2VuZXJhdGlvbjsKKworCWludAkJCWxvZ2ljYWxyZXBf d29ya2VyX3Nsb3Rfbm87CisKKwlwZ19hdG9taWNfdWludDMyCWxlZnRfbWVzc2FnZTsKKworCS8q IFdoZXRoZXIgdGhlcmUgaXMgcGFydGlhbGx5IHNlbnQgbWVzc2FnZSBsZWZ0IGluIHRoZSBxdWV1 ZS4gKi8KKwlib29sCQlwYXJ0aWFsX3NlbnRfbWVzc2FnZTsKKworCS8qCisJICogRG9uJ3QgdXNl IFNoYXJlZEZpbGVTZXQgaGVyZSBiZWNhdXNlIHRoZSBmaWxlc2V0IGlzIHNoYXJlZCBieSB0aGUg bGVhZGVyCisJICogd29ya2VyIGFuZCB0aGUgZmlsZXNldCBpbiBsZWFkZXIgbmVlZCB0byBzdXJ2 aXZlIGFmdGVyIHJlbGVhc2luZyB0aGUKKwkgKiBzaGFyZWQgbWVtb3J5IHNvIHRoYXQgdGhlIGxl YWRlciBjYW4gcmUtdXNlIHRoZSBmaWxlc2V0IGZvciBuZXh0CisJICogc3RyZWFtaW5nIHRyYW5z YWN0aW9uLgorCSAqLworCWJvb2wJCWZpbGVzZXRfdmFsaWQ7CisJRmlsZVNldAkJZmlsZXNldDsK K30gUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZDsKKworLyoKKyAqIEluZm9ybWF0aW9uIHdoaWNo IGlzIHVzZWQgdG8gbWFuYWdlIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKi8KK3R5cGVk ZWYgc3RydWN0IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvCit7CisJc2htX21xX2hhbmRsZSAqbXFf aGFuZGxlOworCisJLyoKKwkgKiBUaGUgcXVldWUgdXNlZCB0byB0cmFuc2ZlciBtZXNzYWdlcyBm cm9tIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8KKwkgKiB0aGUgbGVhZGVyIGFwcGx5IHdv cmtlci4KKwkgKi8KKwlzaG1fbXFfaGFuZGxlICplcnJvcl9tcV9oYW5kbGU7CisKKwlkc21fc2Vn bWVudCAqZHNtX3NlZzsKKworCWJvb2wJCXNlcmlhbGl6ZV9jaGFuZ2VzOworCisJLyoKKwkgKiBV c2VkIHRvIHNhdmUgdGhlIG1lc3NhZ2UgdGhhdCB3YXMgb25seSBwYXJ0aWFsbHkgc2VudCB0byBw YXJhbGxlbCBhcHBseQorCSAqIHdvcmtlci4KKwkgKi8KKwljaGFyCSpwZW5kaW5nX21zZzsKKwor CS8qCisJICogVHJ1ZSBpZiB0aGUgd29ya2VyIGlzIGJlaW5nIHVzZWQgdG8gcHJvY2VzcyBhIHBh cmFsbGVsIGFwcGx5CisJICogdHJhbnNhY3Rpb24uIEZhbHNlIGluZGljYXRlcyB0aGlzIHdvcmtl ciBpcyBhdmFpbGFibGUgZm9yIHJlLXVzZS4KKwkgKi8KKwlib29sCQlpbl91c2U7CisKKwlQYXJh bGxlbEFwcGx5V29ya2VyU2hhcmVkICpzaGFyZWQ7Cit9IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZv OworCiAvKiBNYWluIG1lbW9yeSBjb250ZXh0IGZvciBhcHBseSB3b3JrZXIuIFBlcm1hbmVudCBk dXJpbmcgd29ya2VyIGxpZmV0aW1lLiAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIE1lbW9yeUNvbnRl eHQgQXBwbHlDb250ZXh0OwogCitleHRlcm4gUEdETExJTVBPUlQgTWVtb3J5Q29udGV4dCBBcHBs eU1lc3NhZ2VDb250ZXh0OworCitleHRlcm4gUEdETExJTVBPUlQgRXJyb3JDb250ZXh0Q2FsbGJh Y2sgKmFwcGx5X2Vycm9yX2NvbnRleHRfc3RhY2s7CitleHRlcm4gUEdETExJTVBPUlQgQXBwbHlF cnJvckNhbGxiYWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZzsKKworZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgTXlTdWJzY3JpcHRpb25WYWxpZDsKKworZXh0ZXJuIFBHRExMSU1QT1JUIFBh cmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKk15UGFyYWxsZWxTaGFyZWQ7CisKK2V4dGVybiBQR0RM TElNUE9SVCBMaXN0ICpzdWJ4YWN0bGlzdDsKKwogLyogbGlicHFyZWNlaXZlciBjb25uZWN0aW9u ICovCiBleHRlcm4gUEdETExJTVBPUlQgc3RydWN0IFdhbFJlY2VpdmVyQ29ubiAqTG9nUmVwV29y a2VyV2FsUmN2Q29ubjsKIApAQCAtNzksMTggKzIwMCwyNCBAQCBleHRlcm4gUEdETExJTVBPUlQg U3Vic2NyaXB0aW9uICpNeVN1YnNjcmlwdGlvbjsKIGV4dGVybiBQR0RMTElNUE9SVCBMb2dpY2Fs UmVwV29ya2VyICpNeUxvZ2ljYWxSZXBXb3JrZXI7CiAKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGluX3JlbW90ZV90cmFuc2FjdGlvbjsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIGluX3N0cmVh bWVkX3RyYW5zYWN0aW9uOworZXh0ZXJuIFBHRExMSU1QT1JUIFBhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvICpzdHJlYW1fYXBwbHlfd29ya2VyOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgc3dpdGNo aW5nX3RvX3NlcmlhbGl6ZTsKIAogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfYXR0YWNo KGludCBzbG90KTsKIGV4dGVybiBMb2dpY2FsUmVwV29ya2VyICpsb2dpY2FscmVwX3dvcmtlcl9m aW5kKE9pZCBzdWJpZCwgT2lkIHJlbGlkLAogCQkJCQkJCQkJCQkJYm9vbCBvbmx5X3J1bm5pbmcp OwogZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfd29ya2Vyc19maW5kKE9pZCBzdWJpZCwgYm9vbCBv bmx5X3J1bm5pbmcpOwotZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBk YmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCi0JCQkJCQkJCQkgT2lkIHVzZXJp ZCwgT2lkIHJlbGlkKTsKK2V4dGVybiBib29sIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQg ZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkJCQkJCQkJIE9pZCB1c2Vy aWQsIE9pZCByZWxpZCwKKwkJCQkJCQkJCSBkc21faGFuZGxlIHN1Yndvcmtlcl9kc20pOwogZXh0 ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCk7Citl eHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2J5X3Nsb3QoaW50IHNsb3Rfbm8sIHVp bnQxNiBnZW5lcmF0aW9uKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChP aWQgc3ViaWQsIE9pZCByZWxpZCk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl93YWtl dXBfcHRyKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcik7CiAKIGV4dGVybiBpbnQJbG9naWNhbHJl cF9zeW5jX3dvcmtlcl9jb3VudChPaWQgc3ViaWQpOworZXh0ZXJuIGludAlsb2dpY2FscmVwX3Bh cmFsbGVsX2FwcGx5X3dvcmtlcl9jb3VudChPaWQgc3ViaWQpOwogCiBleHRlcm4gdm9pZCBSZXBs aWNhdGlvbk9yaWdpbk5hbWVGb3JMb2dpY2FsUmVwKE9pZCBzdWJvaWQsIE9pZCByZWxpZCwKIAkJ CQkJCQkJCQkJICAgY2hhciAqb3JpZ2lubmFtZSwgU2l6ZSBzem9yaWdpbm5hbWUpOwpAQCAtMTAz LDEwICsyMzAsNjEgQEAgZXh0ZXJuIHZvaWQgcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhYTG9nUmVj UHRyIGN1cnJlbnRfbHNuKTsKIGV4dGVybiB2b2lkIGludmFsaWRhdGVfc3luY2luZ190YWJsZV9z dGF0ZXMoRGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwKIAkJCQkJCQkJCQkJdWludDMyIGhhc2h2YWx1 ZSk7CiAKK2V4dGVybiB2b2lkIHNlcmlhbGl6ZV9zdHJlYW1fc3RhcnQoVHJhbnNhY3Rpb25JZCB4 aWQsIGJvb2wgZmlyc3Rfc2VnbWVudCk7CitleHRlcm4gdm9pZCBzZXJpYWxpemVfc3RyZWFtX3N0 b3AoVHJhbnNhY3Rpb25JZCB4aWQpOworCisvKiBDb21tb24gc3RyZWFtaW5nIGZ1bmN0aW9uIHRv IGFwcGx5IGFsbCB0aGUgc3Bvb2xlZCBtZXNzYWdlcyAqLworZXh0ZXJuIHZvaWQgYXBwbHlfc3Bv b2xlZF9tZXNzYWdlcyhGaWxlU2V0ICpzdHJlYW1fZmlsZXNldCwgVHJhbnNhY3Rpb25JZCB4aWQs CisJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbHNuKTsKKworZXh0ZXJuIHZvaWQgYXBwbHlfZGlzcGF0 Y2goU3RyaW5nSW5mbyBzKTsKKworZXh0ZXJuIHZvaWQgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlv bih2b2lkKTsKKworZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZUFwcGx5V29ya2VyKHZvaWQpOworCisv KiBGdW5jdGlvbiBmb3IgYXBwbHkgZXJyb3IgY2FsbGJhY2sgKi8KK2V4dGVybiB2b2lkIGFwcGx5 X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CisKKy8qIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBz ZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCitleHRlcm4gdm9pZCBwYXJhbGxlbF9hcHBseV9zdGFy dF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpOworZXh0ZXJuIFBhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvICpwYXJhbGxlbF9hcHBseV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCk7CitleHRl cm4gdm9pZCBwYXJhbGxlbF9hcHBseV9zZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2Vy U2hhcmVkICp3c2hhcmVkLAorCQkJCQkJCQkJCSAgUGFyYWxsZWxUcmFuc1N0YXRlIGluX3hhY3Qp OworZXh0ZXJuIHZvaWQgcGFyYWxsZWxfYXBwbHlfZnJlZV93b3JrZXIoUGFyYWxsZWxBcHBseVdv cmtlckluZm8gKndpbmZvLAorCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgc3Rv cF93b3JrZXIpOworZXh0ZXJuIHZvaWQgcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3JfeGFjdF9maW5p c2goUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCk7CitleHRlcm4gdm9pZCBwYXJh bGxlbF9hcHBseV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXpl IG5ieXRlcywKKwkJCQkJCQkJCSBjb25zdCB2b2lkICpkYXRhKTsKKworZXh0ZXJuIHZvaWQgcGFy YWxsZWxfYXBwbHlfc3RhcnRfc3VidHJhbnMoVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZCwgVHJh bnNhY3Rpb25JZCB0b3BfeGlkKTsKK2V4dGVybiB2b2lkIHBhcmFsbGVsX2FwcGx5X3N0cmVhbV9h Ym9ydChMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhKTsKK2V4dGVybiB2b2lk IHBhcmFsbGVsX2FwcGx5X3JlcGxvcmlnaW5fc2V0dXAodm9pZCk7CitleHRlcm4gdm9pZCBwYXJh bGxlbF9hcHBseV9yZXBsb3JpZ2luX3Jlc2V0KHZvaWQpOworZXh0ZXJuIHZvaWQgcGFyYWxsZWxf YXBwbHlfc2V0X2ZpbGVzZXQoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJ CQkJCQkJCSAgIGJvb2wgZmlsZXNldF92YWxpZCk7CitleHRlcm4gdm9pZCBwYXJhbGxlbF9hcHBs eV9sb2NrKHVpbnQxNiBsb2NraWQpOworZXh0ZXJuIHZvaWQgcGFyYWxsZWxfYXBwbHlfdW5sb2Nr KHVpbnQxNiBsb2NraWQpOworCisjZGVmaW5lIGlzUGFyYWxsZWxBcHBseVdvcmtlcih3b3JrZXIp ICgod29ya2VyKS0+YXBwbHlfbGVhZGVyX3BpZCAhPSBJbnZhbGlkUGlkKQorCiBzdGF0aWMgaW5s aW5lIGJvb2wKIGFtX3RhYmxlc3luY193b3JrZXIodm9pZCkKIHsKIAlyZXR1cm4gT2lkSXNWYWxp ZChNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sCith bV9sZWFkZXJfYXBwbHlfd29ya2VyKHZvaWQpCit7CisJcmV0dXJuICghT2lkSXNWYWxpZChNeUxv Z2ljYWxSZXBXb3JrZXItPnJlbGlkKSAmJgorCQkJIWlzUGFyYWxsZWxBcHBseVdvcmtlcihNeUxv Z2ljYWxSZXBXb3JrZXIpKTsKK30KKworc3RhdGljIGlubGluZSBib29sCithbV9wYXJhbGxlbF9h cHBseV93b3JrZXIodm9pZCkKK3sKKwlyZXR1cm4gaXNQYXJhbGxlbEFwcGx5V29ya2VyKE15TG9n aWNhbFJlcFdvcmtlcik7Cit9CisKICNlbmRpZgkJCQkJCQkvKiBXT1JLRVJfSU5URVJOQUxfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCBlZTYzNjkwLi45M2E1MWY0IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9z dG9yYWdlL3Byb2NzaWduYWwuaApAQCAtMzUsNiArMzUsNyBAQCB0eXBlZGVmIGVudW0KIAlQUk9D U0lHX1dBTFNORF9JTklUX1NUT1BQSU5HLAkvKiBhc2sgd2Fsc2VuZGVycyB0byBwcmVwYXJlIGZv ciBzaHV0ZG93biAgKi8KIAlQUk9DU0lHX0JBUlJJRVIsCQkJLyogZ2xvYmFsIGJhcnJpZXIgaW50 ZXJydXB0ICAqLwogCVBST0NTSUdfTE9HX01FTU9SWV9DT05URVhULCAvKiBhc2sgYmFja2VuZCB0 byBsb2cgdGhlIG1lbW9yeSBjb250ZXh0cyAqLworCVBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVT U0FHRSwgLyogTWVzc2FnZSBmcm9tIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgKi8KIAogCS8qIFJl Y292ZXJ5IGNvbmZsaWN0IHJlYXNvbnMgKi8KIAlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RB VEFCQVNFLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCmluZGV4IDZmMmQ1NjEuLmM2NTFhZDIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy93YWl0X2V2ZW50LmgKQEAgLTQyLDYgKzQyLDcgQEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9F VkVOVF9DSEVDS1BPSU5URVJfTUFJTiwKIAlXQUlUX0VWRU5UX0xPR0lDQUxfQVBQTFlfTUFJTiwK IAlXQUlUX0VWRU5UX0xPR0lDQUxfTEFVTkNIRVJfTUFJTiwKKwlXQUlUX0VWRU5UX0xPR0lDQUxf UEFSQUxMRUxfQVBQTFlfTUFJTiwKIAlXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJFQU0sCiAJ V0FJVF9FVkVOVF9TWVNMT0dHRVJfTUFJTiwKIAlXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9NQUlO LApAQCAtMTA1LDYgKzEwNiw3IEBAIHR5cGVkZWYgZW51bQogCVdBSVRfRVZFTlRfSEFTSF9HUk9X X0JVQ0tFVFNfQUxMT0NBVEUsCiAJV0FJVF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19FTEVDVCwK IAlXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX1JFSU5TRVJULAorCVdBSVRfRVZFTlRfTE9H SUNBTF9QQVJBTExFTF9BUFBMWV9TVEFURV9DSEFOR0UsCiAJV0FJVF9FVkVOVF9MT0dJQ0FMX1NZ TkNfREFUQSwKIAlXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19TVEFURV9DSEFOR0UsCiAJV0FJVF9F VkVOVF9NUV9JTlRFUk5BTCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c3Vic2NyaXB0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9u Lm91dAppbmRleCBjMTNkMjE4Li4wZjY1Y2M3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zdWJzY3JpcHRpb24ub3V0CkBAIC0yNTUsOSArMjU1LDkgQEAgQUxURVIgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwogKDEgcm93KQogCiBEUk9Q IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI7Ci0tLSBmYWlsIC0gc3RyZWFtaW5nIG11c3Qg YmUgYm9vbGVhbgorLS0gZmFpbCAtIHN0cmVhbWluZyBtdXN0IGJlIGJvb2xlYW4gb3IgJ3BhcmFs bGVsJwogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJu YW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5l Y3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gZm9vKTsKLUVSUk9SOiAgc3RyZWFtaW5nIHJlcXVpcmVz IGEgQm9vbGVhbiB2YWx1ZQorRVJST1I6ICBzdHJlYW1pbmcgcmVxdWlyZXMgYSBCb29sZWFuIHZh bHVlIG9yICJwYXJhbGxlbCIKIC0tIG5vdyBpdCB3b3JrcwogQ1JFQVRFIFNVQlNDUklQVElPTiBy ZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQ VUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gdHJ1 ZSk7CiBXQVJOSU5HOiAgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNvbm5l Y3RlZApAQCAtMjY5LDYgKzI2OSwxNCBAQCBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24s IHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZQogIHJlZ3Jl c3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCBmICAgICAgfCB0ICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2Rv ZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCitBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190 ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0gcGFyYWxsZWwpOworXGRScysKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAgICBOYW1lICAgICAg IHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJp bmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwg T3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAg IHwgU2tpcCBMU04gCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc190ZXN0 c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8 IGYgICAgICB8IHAgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAg IHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4 aXN0IHwgMC8wCisoMSByb3cpCisKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIg U0VUIChzdHJlYW1pbmcgPSBmYWxzZSk7CiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0 c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CiBcZFJzKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNj cmlwdGlvbi5zcWwKaW5kZXggZWFlYWRlOC4uNzk5MWFiZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9z dWJzY3JpcHRpb24uc3FsCkBAIC0xNjcsNyArMTY3LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJl Z3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwogCiBEUk9QIFNVQlNDUklQVElP TiByZWdyZXNzX3Rlc3RzdWI7CiAKLS0tIGZhaWwgLSBzdHJlYW1pbmcgbXVzdCBiZSBib29sZWFu CistLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbiBvciAncGFyYWxsZWwnCiBDUkVB VEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVz c19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9IGZhbHNl LCBzdHJlYW1pbmcgPSBmb28pOwogCiAtLSBub3cgaXQgd29ya3MKQEAgLTE3NSw2ICsxNzUsMTAg QEAgQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUIKIAogXGRScysKIAorQUxURVIgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHBhcmFsbGVsKTsKKworXGRScysKKwog QUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IGZhbHNl KTsKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBO T05FKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAyZjAyY2M4Li4yNmQxMDk5IDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTQ3Miw2ICsxNDcyLDcgQEAgTG9naWNhbFJl cFJlbElkCiBMb2dpY2FsUmVwUmVsTWFwRW50cnkKIExvZ2ljYWxSZXBSZWxhdGlvbgogTG9naWNh bFJlcFJvbGxiYWNrUHJlcGFyZWRUeG5EYXRhCitMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhCiBM b2dpY2FsUmVwVHVwbGVEYXRhCiBMb2dpY2FsUmVwVHlwCiBMb2dpY2FsUmVwV29ya2VyCkBAIC0x NjYzLDYgKzE2NjQsOSBAQCBPdmVycmlkZVN0YWNrRW50cnkKIE92ZXJyaWRpbmdLaW5kCiBQQUNF X0hFQURFUgogUEFDTAorUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5CitQYXJhbGxlbEFwcGx5V29y a2VySW5mbworUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAogUEFUSAogUEJPT0wKIFBDdHh0SGFu ZGxlCkBAIC0yNzg0LDYgKzI3ODgsNyBAQCBUcmFuc2FjdGlvblN0bXRLaW5kCiBUcmFuc2Zvcm1J bmZvCiBUcmFuc2Zvcm1Kc29uU3RyaW5nVmFsdWVzU3RhdGUKIFRyYW5zaXRpb25DYXB0dXJlU3Rh dGUKK1RyYW5zQXBwbHlBY3Rpb24KIFRyZ21BcmMKIFRyZ21BcmNJbmZvCiBUcmdtQm91bmQKLS0g CjIuNy4yLndpbmRvd3MuMQoK --_003_OS0PR01MB5716410E7551394B730D433294389OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v42-0002-Test-streaming-parallel-option-in-tap-test.patch" Content-Description: v42-0002-Test-streaming-parallel-option-in-tap-test.patch Content-Disposition: attachment; filename="v42-0002-Test-streaming-parallel-option-in-tap-test.patch"; size=76275; creation-date="Thu, 03 Nov 2022 12:57:35 GMT"; modification-date="Thu, 03 Nov 2022 13:06:33 GMT" Content-Transfer-Encoding: base64 RnJvbSAwNzA1Mzc5OTExNmUyZGU0YTE2MTBkMjQyZDEyZGNmYTM2Y2IyMGNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAic2hpeS5mbnN0IiA8c2hpeS5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBGcmksIDEzIE1heSAyMDIyIDE0OjUwOjMwICswODAwClN1YmplY3Q6IFtQQVRDSCB2NDAg Mi82XSBUZXN0IHN0cmVhbWluZyBwYXJhbGxlbCBvcHRpb24gaW4gdGFwIHRlc3QKCkNoYW5nZSBh bGwgVEFQIHRlc3RzIHVzaW5nIHRoZSBTVUJTQ1JJUFRJT04gInN0cmVhbWluZyIgcGFyYW1ldGVy LCBzbyB0aGV5Cm5vdyB0ZXN0IGJvdGggJ29uJyBhbmQgJ3BhcmFsbGVsJyB2YWx1ZXMuCi0tLQog c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCAgICAgICAgIHwgMjMyICsrKysr LS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwgfCAxNDMg KysrLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRsLnBsICAgICB8IDIy MSArKysrLS0tCiAuLi4vdC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQucGwgICAgICAgICAgICAg fCAyMzMgKysrKystLS0KIC4uLi90LzAxOV9zdHJlYW1fc3VieGFjdF9kZGxfYWJvcnQucGwgICAg ICAgICB8IDEzNCArKysrLQogLi4uL3N1YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRl LnBsICAgIHwgMzk0ICsrKysrKysrLS0tLS0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhh c2Vfc3RyZWFtLnBsICAgICB8IDU0MCArKysrKysrKysrKy0tLS0tLS0KIDcgZmlsZXMgY2hhbmdl ZCwgMTI1MiBpbnNlcnRpb25zKCspLCA2NDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAxNV9zdHJlYW0ucGwKaW5kZXggY2JhYTMyN2U0NC4uNjVmNDNmMDg4MSAxMDA2NDQKLS0t IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAorKysgYi9zcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCkBAIC04LDYgKzgsMTQ5IEBAIHVzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRl c3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlv biB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuCitzdWIgY2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmli ZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9 CisJICAnZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQn OworCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9y X2xvZyhxci8kcGFyYWxsZWxfbWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1 bGF0ZSBhbGwgdGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJl YW1pbmciCisjIHBhcmFtZXRlciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3Ig dGhlIHN0cmVhbWluZz1vbiBhbmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRl c3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwg JGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsKKworCSMgSW50ZXJsZWF2ZSBhIHBhaXIgb2Yg dHJhbnNhY3Rpb25zLCBlYWNoIGV4Y2VlZGluZyB0aGUgNjRrQiBsaW1pdC4KKwlteSAkaW4gID0g Jyc7CisJbXkgJG91dCA9ICcnOworCisJbXkgJG9mZnNldCA9IDA7CisKKwlteSAkdGltZXIgPSBJ UEM6OlJ1bjo6dGltZW91dCgkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVs dCk7CisKKwlteSAkaCA9ICRub2RlX3B1Ymxpc2hlci0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jl cycsIFwkaW4sIFwkb3V0LCAkdGltZXIsCisJCW9uX2Vycm9yX3N0b3AgPT4gMCk7CisKKwkjIElm ICJzdHJlYW1pbmciIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVl ZCB0byBjaGVjaworCSMgdGhhdCBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCB1c2lu ZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkjIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERF QlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQgdGhhdCwgc28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJi b3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVu ZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEi KTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNj cmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5s b2dmaWxlOworCisJJGluIC49IHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwor CVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVM RVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCX07CisJJGgtPnB1bXBfbmI7 CisKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJ TjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDUwMDEsIDk5OTkpIHMoaSk7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgYSA+IDUwMDA7CisJQ09NTUlUOworCX0pOworCisJJGluIC49IHF7CisJQ09NTUlUOworCVxx CisJfTsKKwkkaC0+ZmluaXNoOyAgICAjIGVycm9ycyBtYWtlIHRoZSBuZXh0IHRlc3QgZmFpbCwg c28gaWdub3JlIHRoZW0gaGVyZQorCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zm c2V0LCAkaXNfcGFyYWxsZWwpOworCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNv dW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8 MzMzNCksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsK KworCSMgVGVzdCB0aGUgc3RyZWFtaW5nIGluIGJpbmFyeSBtb2RlCisJJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBT RVQgKGJpbmFyeSA9IG9uKSIpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBu b3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIElu c2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxp bWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJF R0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBi ID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVS RSBtb2QoYSwzKSA9IDA7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJz Y3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJJHJlc3VsdCA9CisJICAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSg2 NjY3fDY2Njd8NjY2NyksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVm YXVsdHMnKTsKKworCSMgQ2hhbmdlIHRoZSBsb2NhbCB2YWx1ZXMgb2YgdGhlIGV4dHJhIGNvbHVt bnMgb24gdGhlIHN1YnNjcmliZXIsCisJIyB1cGRhdGUgcHVibGlzaGVyLCBhbmQgY2hlY2sgdGhh dCBzdWJzY3JpYmVyIHJldGFpbnMgdGhlIGV4cGVjdGVkCisJIyB2YWx1ZXMuIFRoaXMgaXMgdG8g ZW5zdXJlIHRoYXQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVoYXZlCisJIyBwcm9wZXJs eSBhZnRlciBhIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KKwkkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIlVQREFURSB0ZXN0X3RhYiBTRVQgYyA9ICdlcG9jaCc6OnRp bWVzdGFtcHR6ICsgOTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIKKwkpOworCisJIyBDaGVjayB0 aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGE6OnRleHQpIik7CisKKwkkbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxf bG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkkcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGV4dHJhY3QoZXBvY2ggZnJvbSBjKSA9IDk4NzY1NDMyMSksIGNvdW50KGQg PSA5OTkpIEZST00gdGVzdF90YWIiCisJKTsKKwlpcygkcmVzdWx0LCBxcSg2NjY3fDY2Njd8NjY2 NyksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWxseSBjaGFuZ2VkIGRhdGEn KTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsK Kwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBSZXNl dCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vi c2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNz YWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KK30KKwog IyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQo YWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzcsNiArMTgwLDEwIEBAICRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0 YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsK KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1p bmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFw X3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBw bmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpAQCAt NDksODIgKzE5NiwyNSBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChj KSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwyfDIp LCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIElu dGVybGVhdmUgYSBwYWlyIG9mIHRyYW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0Ig bGltaXQuCi1teSAkaW4gID0gJyc7Ci1teSAkb3V0ID0gJyc7Ci0KLW15ICR0aW1lciA9IElQQzo6 UnVuOjp0aW1lb3V0KCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsK LQotbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBc JGluLCBcJG91dCwgJHRpbWVyLAotCW9uX2Vycm9yX3N0b3AgPT4gMCk7Ci0KLSRpbiAuPSBxewot QkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBt ZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9k KGEsMykgPSAwOwotfTsKLSRoLT5wdW1wX25iOwotCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsIDk5OTkpIHMoaSk7Ci1E RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gNTAwMDsKLUNPTU1JVDsKLX0pOwotCi0kaW4g Lj0gcXsKLUNPTU1JVDsKLVxxCi19OwotJGgtPmZpbmlzaDsgICAgIyBlcnJvcnMgbWFrZSB0aGUg bmV4dCB0ZXN0IGZhaWwsIHNvIGlnbm9yZSB0aGVtIGhlcmUKLQotJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBj b3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8 MzMzNCksICdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKK3Rl c3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUs IDApOwogCi0jIFRlc3QgdGhlIHN0cmVhbWluZyBpbiBiaW5hcnkgbW9kZQotJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3Vi IFNFVCAoYmluYXJ5ID0gb24pIik7Ci0KLSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91 Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsIDEwMDAwKSBzKGkp OwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLUNPTU1JVDsKLX0pOwotCi0k bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0K LSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1 bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwgJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2Nh bCBkZWZhdWx0cycpOworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg VGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdI RVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcn OyIKKyk7CiAKLSMgQ2hhbmdlIHRoZSBsb2NhbCB2YWx1ZXMgb2YgdGhlIGV4dHJhIGNvbHVtbnMg b24gdGhlIHN1YnNjcmliZXIsCi0jIHVwZGF0ZSBwdWJsaXNoZXIsIGFuZCBjaGVjayB0aGF0IHN1 YnNjcmliZXIgcmV0YWlucyB0aGUgZXhwZWN0ZWQKLSMgdmFsdWVzLiBUaGlzIGlzIHRvIGVuc3Vy ZSB0aGF0IG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zIGJlaGF2ZQotIyBwcm9wZXJseSBhZnRl ciBhIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAotCSJVUERBVEUgdGVzdF90YWIgU0VUIGMgPSAnZXBvY2gnOjp0aW1lc3RhbXB0 eiArIDk4NzY1NDMyMSAqIGludGVydmFsICcxcyciCi0pOwotJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKLQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGE6OnRleHQp Iik7CisJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxl bCwgYmluYXJ5ID0gb2ZmKSIpOwogCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUg YXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7Igor ICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJl c3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKIAotJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50 KGV4dHJhY3QoZXBvY2ggZnJvbSBjKSA9IDk4NzY1NDMyMSksIGNvdW50KGQgPSA5OTkpIEZST00g dGVzdF90YWIiCi0pOwotaXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLAotCSdjaGVjayBl eHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWxseSBjaGFuZ2VkIGRhdGEnKTsKK3Rlc3Rfc3RyZWFt aW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwogCiAk bm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsIGIvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsCmluZGV4IGJjMGE5Y2QwNTMu LjAyMGFkOTZkMWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJl YW1fc3VieGFjdC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1 YnhhY3QucGwKQEAgLTgsNiArOCw5NCBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsK IHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisjIENoZWNr IHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNvbXBsZXRlZCBzdWNj ZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorc3ViIGNoZWNr X3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFy YWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2ZpbmlzaGVkIHByb2Nl c3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlmICgkaXNfcGFyYWxs ZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvJHBhcmFsbGVsX21l c3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBzdWxhdGUgYWxsIHRoZSBjb21tb24g dGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgorIyBwYXJhbWV0ZXIg c28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJlYW1pbmc9b24gYW5k CisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15 ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNfcGFyYWxs ZWwpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMgSWYgInN0cmVhbWluZyIgcGFyYW1l dGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVkIHRvIGNoZWNrCisJIyB0aGF0 IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkg d29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdlcyBh Ym91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3Bh cmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9zdWJzY3Jp YmVyLT5yZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cg b24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIEluc2Vy dCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIDY0a0IgbGltaXQuCisJ JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJ SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRl X3NlcmllcygzLCA1MDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdI RVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9 IDA7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLCAxMDAwKSBzKGkpOworCVVQREFURSB0 ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00g dGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEw MDEsIDE1MDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1v ZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJ U0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwgMjAwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlTQVZFUE9JTlQgczQ7CisJSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMDAxLCAy NTAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwy KSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCUNPTU1J VDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7 CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3Bh cmFsbGVsKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5 KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMTY2N3wxNjY3fDE2NjcpLAorCQkn Y2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3RyZWFtaW5nIG1vZGUgYW5k IGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJIyBDbGVhbnVw IHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKSIpOworCSRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9z aXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRf Y29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIp OworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorfQorCiAjIENyZWF0ZSBwdWJsaXNo ZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5n ID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsxMjUsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxF IHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04g JyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElP TiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00OSw0MSArMTQxLDI2IEBA IG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5 KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8MiksICdjaGVjayBpbml0aWFs IGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgSW5zZXJ0LCB1cGRhdGUgYW5k IGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoICAgIDMsICA1 MDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikg PSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5U IHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3Nlcmllcyg1MDEsICAxMDAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0g bWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1v ZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBp LCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwgIDE1MDApIHMoaSk7Ci1V UERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRF IEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5UIHMzOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxNTAxLCAgMjAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVS RSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7 Ci1TQVZFUE9JTlQgczQ7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsIDI1MDApIHMoaSk7Ci1VUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwg Y291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMTY2N3wxNjY3 fDE2NjcpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBpbiBzdHJlYW1p bmcgbW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwordGVzdF9z dHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcg c3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNh dGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwogCisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBU SU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOworCiskbm9kZV9wdWJsaXNo ZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlk IEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBu YW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3IgZGllCisgICJUaW1lZCBv dXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2luZyBTVUJT Q1JJUFRJT04iOworCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNj cmliZXIsICRhcHBuYW1lLCAxKTsKKwogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1 Ymxpc2hlci0+c3RvcDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3 X3N0cmVhbV9kZGwucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5w bAppbmRleCA4NjZmMTUxMmU0Li5kMmNjNDZkMTgyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMTdfc3RyZWFtX2RkbC5wbApAQCAtOCw2ICs4LDEzOCBAQCB1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3Jl OwogCisjIENoZWNrIHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNv bXBsZXRlZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2Vy Lgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zm c2V0LCAkaXNfcGFyYWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2Zp bmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlm ICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIv JHBhcmFsbGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBzdWxhdGUgYWxs IHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgor IyBwYXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJl YW1pbmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVh bWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1l LCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMgYSBzbWFsbCAo bm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBhbmQgRE1MCisJJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8g dGVzdF90YWIgVkFMVUVTICgzLCBtZDUoMzo6dGV4dCkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFi IEFERCBDT0xVTU4gYyBJTlQ7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFZBTFVFUyAoNCwgbWQ1KDQ6OnRleHQpLCAtNCk7CisJQ09NTUlUOworCX0pOworCisJIyBJZiAi c3RyZWFtaW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5lZWQg dG8gY2hlY2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGFwcGxpZWQgdXNpbmcg YSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBERUJV RzEgbG9nIG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9z aXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRf Y29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7 CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkjIENoZWNrIHRoZSBzdWJzY3Jp YmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9n ZmlsZTsKKworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBhbmQgRE1M CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47 CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoNSwgMTAwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQg Q09MVU1OIGQgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsIDIw MDApIHMoaSk7CisJQ09NTUlUOworCX0pOworCisJIyBhIHNtYWxsIChub24tc3RyZWFtZWQpIHRy YW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgK KwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDIwMDEsIG1kNSgyMDAxOjp0ZXh0KSwgLTIwMDEsIDIqMjAwMSk7CisJQUxURVIgVEFCTEUgdGVz dF90YWIgQUREIENPTFVNTiBlIElOVDsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVz dF90YWIgVkFMVUVTICgyMDAyLCBtZDUoMjAwMjo6dGV4dCksIC0yMDAyLCAyKjIwMDIsIC0zKjIw MDIpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9m ZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBj b3VudChkKSwgY291bnQoZSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDIwMDJ8 MTk5OXwxMDAyfDEpLAorCQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4g c3RyZWFtaW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycK KwkpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNl dCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIEEgbGFyZ2UgKHN0cmVhbWVk KSB0cmFuc2FjdGlvbiB3aXRoIERETCBhbmQgRE1MLiBPbmUgb2YgdGhlIERETCBpcyBwZXJmb3Jt ZWQKKwkjIGFmdGVyIERNTCB0byBlbnN1cmUgdGhhdCB3ZSBpbnZhbGlkYXRlIHRoZSBzY2hlbWEg c2VudCBmb3IgdGVzdF90YWIgc28gdGhhdAorCSMgdGhlIG5leHQgdHJhbnNhY3Rpb24gaGFzIHRv IHNlbmQgdGhlIHNjaGVtYSBhZ2Fpbi4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJ J3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDMsNTAw MCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGYgSU5UOworCUNPTU1J VDsKKwl9KTsKKworCSMgQSBzbWFsbCB0cmFuc2FjdGlvbiB0aGF0IHdvbid0IGdldCBzdHJlYW1l ZC4gVGhpcyBpcyBqdXN0IHRvIGVuc3VyZSB0aGF0IHdlCisJIyBzZW5kIHRoZSBzY2hlbWEgYWdh aW4gdG8gcmVmbGVjdCB0aGUgbGFzdCBjb2x1bW4gYWRkZWQgaW4gdGhlIHByZXZpb3VzIHRlc3Qu CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47 CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSwg LTMqaSwgNCppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsNTAwNSkgcyhpKTsKKwlDT01NSVQ7 CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwor CisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJh bGxlbCk7CisKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkKSwgY291bnQoZSksIGNv dW50KGYpIEZST00gdGVzdF90YWIiCisJKTsKKwlpcygkcmVzdWx0LCBxcSg1MDA1fDUwMDJ8NDAw NXwzMDA0fDUpLAorCQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgZm9yIGJv dGggc3RyZWFtaW5nIGFuZCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucycKKwkpOworCisJIyBD bGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bv c3RncmVzJywgcXsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpOworCUFMVEVS IFRBQkxFIHRlc3RfdGFiIERST1AgQ09MVU1OIGMsIERST1AgQ09MVU1OIGQsIERST1AgQ09MVU1O IGUsIERST1AgQ09MVU1OIGY7CisJfSk7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19w YXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3Fs LmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNj cmliZXItPnJlbG9hZDsKKwl9Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9k ZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicp OwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsK QEAgLTM3LDYgKzE2OSwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAog bXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAog CSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25u c3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAo c3RyZWFtaW5nID0gb24pIgogKTsKQEAgLTQ5LDc3ICsxODUsMjYgQEAgbXkgJHJlc3VsdCA9CiAJ IlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIi KTsKIGlzKCRyZXN1bHQsIHFxKDJ8MHwwKSwgJ2NoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVk IHRvIHN1YnNjcmliZXInKTsKIAotIyBhIHNtYWxsIChub24tc3RyZWFtZWQpIHRyYW5zYWN0aW9u IHdpdGggRERMIGFuZCBETUwKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jl cycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMywgbWQ1KDM6OnRl eHQpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gYyBJTlQ7Ci1TQVZFUE9JTlQg czE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDQsIG1kNSg0Ojp0ZXh0KSwgLTQpOwot Q09NTUlUOwotfSk7Ci0KLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBh bmQgRE1MCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVH SU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSBGUk9N IGdlbmVyYXRlX3Nlcmllcyg1LCAxMDAwKSBzKGkpOwotQUxURVIgVEFCTEUgdGVzdF90YWIgQURE IENPTFVNTiBkIElOVDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwgMjAw MCkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0jIGEgc21hbGwgKG5vbi1zdHJlYW1lZCkgdHJhbnNh Y3Rpb24gd2l0aCBEREwgYW5kIERNTAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bv c3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgyMDAxLCBt ZDUoMjAwMTo6dGV4dCksIC0yMDAxLCAyKjIwMDEpOwotQUxURVIgVEFCTEUgdGVzdF90YWIgQURE IENPTFVNTiBlIElOVDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVF UyAoMjAwMiwgbWQ1KDIwMDI6OnRleHQpLCAtMjAwMiwgMioyMDAyLCAtMyoyMDAyKTsKLUNPTU1J VDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwot Ci0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0J IlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQpLCBjb3VudChlKSBGUk9NIHRlc3Rf dGFiIik7Ci1pcygkcmVzdWx0LCBxcSgyMDAyfDE5OTl8MTAwMnwxKSwKLQknY2hlY2sgZGF0YSB3 YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3RyZWFtaW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVt bnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKLSk7Cit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJs aXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKIAotIyBBIGxhcmdlIChzdHJl YW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTC4gT25lIG9mIHRoZSBEREwgaXMgcGVy Zm9ybWVkCi0jIGFmdGVyIERNTCB0byBlbnN1cmUgdGhhdCB3ZSBpbnZhbGlkYXRlIHRoZSBzY2hl bWEgc2VudCBmb3IgdGVzdF90YWIgc28gdGhhdAotIyB0aGUgbmV4dCB0cmFuc2FjdGlvbiBoYXMg dG8gc2VuZCB0aGUgc2NoZW1hIGFnYWluLgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0J J3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSwgLWksIDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMDAzLDUwMDAp IHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGYgSU5UOwotQ09NTUlUOwot fSk7Ci0KLSMgQSBzbWFsbCB0cmFuc2FjdGlvbiB0aGF0IHdvbid0IGdldCBzdHJlYW1lZC4gVGhp cyBpcyBqdXN0IHRvIGVuc3VyZSB0aGF0IHdlCi0jIHNlbmQgdGhlIHNjaGVtYSBhZ2FpbiB0byBy ZWZsZWN0IHRoZSBsYXN0IGNvbHVtbiBhZGRlZCBpbiB0aGUgcHJldmlvdXMgdGVzdC4KLSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmksIDQqaSBG Uk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLDUwMDUpIHMoaSk7Ci1DT01NSVQ7Ci19KTsKLQotJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0g ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQo KiksIGNvdW50KGMpLCBjb3VudChkKSwgY291bnQoZSksIGNvdW50KGYpIEZST00gdGVzdF90YWIi KTsKLWlzKCRyZXN1bHQsIHFxKDUwMDV8NTAwMnw0MDA1fDMwMDR8NSksCi0JJ2NoZWNrIGRhdGEg d2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGZvciBib3RoIHN0cmVhbWluZyBhbmQgbm9uLXN0cmVh bWluZyB0cmFuc2FjdGlvbnMnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRp b24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVh bWluZyc7IgogKTsKIAorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsK KworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVD VCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRp b25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9y IGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0 ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKKwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlz aGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMSk7CisKICRub2RlX3N1YnNjcmliZXIt PnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbAppbmRleCA1NTFmMTZkZjZkLi43 NTJlNzlhMDI5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMThfc3RyZWFt X3N1YnhhY3RfYWJvcnQucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVh bV9zdWJ4YWN0X2Fib3J0LnBsCkBAIC04LDYgKzgsMTQ1IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7 CiAKKyMgQ2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29t cGxldGVkIHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIu CitzdWIgY2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZz ZXQsICRpc19wYXJhbGxlbCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAnZmlu aXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJaWYg KCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8k cGFyYWxsZWxfbWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwg dGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisj IHBhcmFtZXRlciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVh bWluZz1vbiBhbmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFt aW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUs ICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyBJZiAic3RyZWFt aW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5lZWQgdG8gY2hl Y2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGFwcGxpZWQgdXNpbmcgYSBwYXJh bGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBERUJVRzEgbG9n IG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9zaXR5Lgor CWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZign cG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRu b2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxv ZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsK KworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCwgRE1MIGFuZCBST0xM QkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlC RUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDMsNTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUw MSwxMDAwKSBzKGkpOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsMTUwMCkgcyhpKTsK KwlTQVZFUE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMoaSk7CisJUk9MTEJBQ0sgVE8g czI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3NlcmllcygyMDAxLDI1MDApIHMoaSk7CisJUk9MTEJBQ0sgVE8gczE7CisJSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cygyNTAxLDMwMDApIHMoaSk7CisJU0FWRVBPSU5UIHM0OworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMzAwMSwzNTAwKSBz KGkpOworCVNBVkVQT0lOVCBzNTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDM1MDEsNDAwMCkgcyhpKTsKKwlDT01NSVQ7 CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwor CisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJh bGxlbCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7 CisJaXMoJHJlc3VsdCwgcXEoMjAwMHwwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2lu dCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBs b2NhbCBkZWZhdWx0cycKKwkpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBu b3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIGxh cmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2VpdmluZyBvdXQg b2Ygb3JkZXIKKwkjIHN1YnRyYW5zYWN0aW9uIFJPTExCQUNLcworCSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNDAwMSw0NTAw KSBzKGkpOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsNTUwMCkgcyhpKTsKKwlTQVZF UE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3Nlcmllcyg2MDAxLDY1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMzOworCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoNzAwMSw3NTAwKSBzKGkpOworCVJFTEVBU0UgczI7CisJSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4MDAxLDg1MDAp IHMoaSk7CisJUk9MTEJBQ0sgVE8gczE7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygk bm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJJHJlc3VsdCA9CisJ ICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDI1MDB8MCks CisJCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3Jp YmVyJyk7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zm c2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgbGFyZ2UgKHN0cmVhbWVk KSB0cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIHJvbGxiYWNrCisJJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cyg4NTAxLDkwMDApIHMoaSk7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoOTAwMSw5NTAwKSBz KGkpOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDk1MDEsMTAwMDApIHMoaSk7CisJUk9MTEJB Q0s7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCk7CisKKwkkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7 CisJaXMoJHJlc3VsdCwgcXEoMjUwMHwwKSwgJ2NoZWNrIHJvbGxiYWNrIHdhcyByZWZsZWN0ZWQg b24gc3Vic2NyaWJlcicpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgKGEgPiAyKSIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJ eworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJ CSJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxv YWQ7CisJfQorfQorCiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1 Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNiw2ICsx NzUsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRF IFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1l ID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0 IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNV QlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNh dGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9 IG9uKSIKICk7CkBAIC00OCw4MSArMTkxLDI1IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MCksICdj aGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgbGFyZ2Ug KHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCwgRE1MIGFuZCBST0xMQkFDS3MKLSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo Myw1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkpOwotU0FW RVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczM7Ci1JTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDE1MDEsMjAwMCkgcyhpKTsKLVJPTExCQUNLIFRPIHMyOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMDAxLDI1MDAp IHMoaSk7Ci1ST0xMQkFDSyBUTyBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjUwMSwzMDAwKSBzKGkpOwotU0FWRVBP SU5UIHM0OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygzMDAxLDM1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczU7Ci1JTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDM1MDEsNDAwMCkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0 ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMjAwMHwwKSwKLQknY2hlY2sgcm9sbGJhY2sgdG8g c2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29sdW1ucyBj b250YWluIGxvY2FsIGRlZmF1bHRzJwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAk bm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdf c3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQg c3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwogCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rp b24gd2l0aCBzdWJzY3JpYmVyIHJlY2VpdmluZyBvdXQgb2Ygb3JkZXIKLSMgc3VidHJhbnNhY3Rp b24gUk9MTEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBx ewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDQwMDEsNDUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMTsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNTAwMSw1NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg2MDAxLDY1MDApIHMo aSk7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDcwMDEsNzUwMCkgcyhpKTsKLVJFTEVBU0UgczI7 Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDgwMDEsODUwMCkgcyhpKTsKLVJPTExCQUNLIFRPIHMxOwotQ09NTUlUOwotfSk7 Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1 bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgyNTAw fDApLAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJz Y3JpYmVyJyk7Ci0KLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmli ZXIgcmVjZWl2aW5nIHJvbGxiYWNrCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9z dGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1MDEsOTAwMCkgcyhpKTsKLVNBVkVQT0lOVCBz MTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoOTAwMSw5NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5NTAx LDEwMDAwKSBzKGkpOwotUk9MTEJBQ0s7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVz dF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDI1MDB8MCksICdjaGVjayByb2xsYmFjayB3YXMgcmVm bGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFy YWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJF IGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK KyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byBy ZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKK3Rlc3Rfc3RyZWFtaW5nKCRu b2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwogCiAkbm9kZV9z dWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbCBiL3Ny Yy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1fc3VieGFjdF9kZGxfYWJvcnQucGwKaW5k ZXggNGQ3ZGE4MmI3YS4uOWQ2NzhiMzk5OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbAorKysgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsCkBAIC05LDYgKzksOTEg QEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGUgbG9nIHRoYXQgdGhlIHN0cmVh bWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisjIHJlcG9ydGVkIGJ5 IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVja19wYXJhbGxlbF9sb2cKK3sKKwlteSAo JG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKSA9IEBfOworCW15ICRwYXJh bGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBm aW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2Ny aWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdlLywgJG9mZnNldCk7CisJfQor fQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qgc3RlcHMgd2hpY2ggYXJlIHJl bGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRoZSBzYW1lIGNvZGUgY2FuIGJl IHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBzdHJlYW1pbmc9cGFyYWxsZWwg Y2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVfcHVibGlzaGVyLCAkbm9k ZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9IEBfOworCisJbXkgJG9mZnNl dCA9IDA7CisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgYXMgInBh cmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhhdCBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3 YXMgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkjIFdlIGhhdmUgdG8g bG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQgdGhhdCwgc28gYnVtcCB1cCB0 aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1 YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVz c2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSMg Q2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9k ZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9u IHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMyw1MDApIHMoaSk7CisJQUxU RVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBjIElOVDsKKwlTQVZFUE9JTlQgczE7CisJSU5T RVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVN TiBkIElOVDsKKwlTQVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDApIHMo aSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElOVDsKKwlTQVZFUE9JTlQg czM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIq aSwgLTMqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMoaSk7CisJQUxURVIgVEFC TEUgdGVzdF90YWIgRFJPUCBDT0xVTU4gYzsKKwlST0xMQkFDSyBUTyBzMTsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDUwMSwxMDAwKSBzKGkpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vi c2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiks IGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgxMDAwfDUwMCksCisJ CSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVy IGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSMgQ2xl YW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0 Z3JlcycsIHF7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKTsKKwlBTFRFUiBU QUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVNTiBjOworCX0pOworCSRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9zaXR5Lgor CWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZign cG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIpOworCQkk bm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorfQorCiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9k ZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdw dWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICds b2dpY2FsJyk7CkBAIC0zNyw2ICsxMjIsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3Rf dGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJs aXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0YXBf cHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00OSwzNSArMTM4LDI2IEBAIG15ICRy ZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKIGlz KCRyZXN1bHQsIHFxKDJ8MCksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJz Y3JpYmVyJyk7CiAKLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCwgRE1M IGFuZCBST0xMQkFDS3MKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jlcycs IHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMyw1MDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBB REQgQ09MVU1OIGMgSU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSwgLWkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMo aSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGQgSU5UOwotU0FWRVBPSU5UIHMy OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3Rh YiBBREQgQ09MVU1OIGUgSU5UOwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxNTAxLDIwMDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVNTiBjOwot Uk9MTEJBQ0sgVE8gczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkpOwotQ09NTUlUOwotfSk7 Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1 bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgxMDAw fDUwMCksCi0JJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1 YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKK3Rlc3Rf c3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDAp OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5n IHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGlj YXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKIAor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQ VElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKKworJG5vZGVfcHVibGlz aGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBp ZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBw bmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQg b3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VC U0NSSVBUSU9OIjsKKwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJz Y3JpYmVyLCAkYXBwbmFtZSwgMSk7CisKICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9w dWJsaXNoZXItPnN0b3A7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAy Ml90d29waGFzZV9jYXNjYWRlLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3Bo YXNlX2Nhc2NhZGUucGwKaW5kZXggN2E3OTdmMzdiYS4uNDI2NWQzYjNmNSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwKKysrIGIvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwKQEAgLTExLDYgKzEx LDIzOSBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisjIENoZWNrIHRoZSBsb2cgdGhhdCB0aGUg c3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0 ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworewor CW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkc3RyZWFtaW5nX21vZGUpID0gQF87CisJ bXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5z YWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlmICgkc3RyZWFtaW5nX21vZGUgZXEgJ3BhcmFs bGVsJykKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8kcGFyYWxsZWxf bWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1v biB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciIHBhcmFtZXRlcgor IyBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBh bmQgc3RyZWFtaW5nPXBhcmFsbGVsCisjIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJ bXkgKCRub2RlX0EsICRub2RlX0IsICRub2RlX0MsICRhcHBuYW1lX0IsICRhcHBuYW1lX0MsICRz dHJlYW1pbmdfbW9kZSkgPQorCSAgQF87CisKKwlteSAkb2Zmc2V0X0IgPSAwOworCW15ICRvZmZz ZXRfQyA9IDA7CisKKwlteSAkb2xkcGlkX0IgPSAkbm9kZV9BLT5zYWZlX3BzcWwoCisJCSdwb3N0 Z3JlcycsICIKKwkJU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJV0hFUkUg YXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsi KTsKKwlteSAkb2xkcGlkX0MgPSAkbm9kZV9CLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsICIK KwkJU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJV0hFUkUgYXBwbGljYXRp b25fbmFtZSA9ICckYXBwbmFtZV9DJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiKTsKKworCSMg U2V0dXAgbG9naWNhbCByZXBsaWNhdGlvbiBzdHJlYW1pbmcgbW9kZQorCisJJG5vZGVfQi0+c2Fm ZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCUFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViX0IK KwkJU0VUIChzdHJlYW1pbmcgPSAkc3RyZWFtaW5nX21vZGUpOyIpOworCSRub2RlX0MtPnNhZmVf cHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9DCisJ CVNFVCAoc3RyZWFtaW5nID0gJHN0cmVhbWluZ19tb2RlKSIpOworCisJIyBXYWl0IGZvciBzdWJz Y3JpYmVycyB0byBmaW5pc2ggaW5pdGlhbGl6YXRpb24KKworCSRub2RlX0EtPnBvbGxfcXVlcnlf dW50aWwoCisJCSdwb3N0Z3JlcycsICIKKwkJU0VMRUNUIHBpZCAhPSAkb2xkcGlkX0IgRlJPTSBw Z19zdGF0X3JlcGxpY2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVf QicgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorCSkgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUg d2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCI7CisJJG5vZGVfQi0+cG9sbF9xdWVyeV91bnRp bCgKKwkJJ3Bvc3RncmVzJywgIgorCQlTRUxFQ1QgcGlkICE9ICRvbGRwaWRfQyBGUk9NIHBnX3N0 YXRfcmVwbGljYXRpb24KKwkJV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9DJyBB TkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisJKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0 aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IjsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFSRUQuCisJIyAxLiBEYXRh IGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgorCSMgMi4gVGhlbiBkbyBjb21taXQg cHJlcGFyZWQuCisJIworCSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vic2Ny aWJlcihzKSBhZnRlciB0aGUgY29tbWl0LgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKworCSMgSWYgInN0cmVhbWluZyIgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxs ZWwiLCB3ZSBuZWVkIHRvIGNoZWNrCisJIyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBw cmVwYXJlZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkjIFdlIGhhdmUgdG8gbG9v ayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQgdGhhdCwgc28gYnVtcCB1cCB0aGUK KwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRzdHJlYW1pbmdfbW9kZSBlcSAncGFyYWxsZWwnKQor CXsKKwkJJG5vZGVfQi0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJsb2dfbWluX21l c3NhZ2VzID0gZGVidWcxIik7CisJCSRub2RlX0ItPnJlbG9hZDsKKworCQkkbm9kZV9DLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsK KwkJJG5vZGVfQy0+cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZy b20gbm93IG9uLgorCSRvZmZzZXRfQiA9IC1zICRub2RlX0ItPmxvZ2ZpbGU7CisJJG9mZnNldF9D ID0gLXMgJG5vZGVfQy0+bG9nZmlsZTsKKworCSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBl bm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCisJIyBUaGVuIDJQQyBQUkVQQVJF CisJJG5vZGVfQS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5T RVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygzLCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hF UkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9 IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRu b2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7CisJJG5vZGVfQi0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9CLCAkb2Zm c2V0X0IsICRzdHJlYW1pbmdfbW9kZSk7CisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX0MsICRv ZmZzZXRfQywgJHN0cmVhbWluZ19tb2RlKTsKKworCSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0 YXRlIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIocykKKwlteSAkcmVzdWx0ID0KKwkgICRub2Rl X0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJl cGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVw YXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRub2RlX0MtPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7 Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJz Y3JpYmVyIEMnKTsKKworCSMgMlBDIENPTU1JVAorCSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9B LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWVfQyk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gd2FzIGNvbW1pdHRl ZCBvbiBzdWJzY3JpYmVyKHMpCisJJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0 ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKKwkJJ1Jvd3MgaW5z ZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQiwgYW5kIGV4dHJhIGNv bHVtbnMgaGF2ZSBsb2NhbCBkZWZhdWx0cycKKwkpOworCSRyZXN1bHQgPSAkbm9kZV9DLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQg PSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCks CisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEMs IGFuZCBleHRyYSBjb2x1bW5zIGhhdmUgbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSMgY2hlY2sg dGhlIHRyYW5zYWN0aW9uIHN0YXRlIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIocykKKwkkcmVzdWx0 ID0KKwkgICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9CisJICAkbm9k ZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3By ZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29t bWl0dGVkIG9uIHN1YnNjcmliZXIgQycpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSB3aXRoIGEgbmVzdGVkIFJPTExCQUNLIFRPIFNBVkVQ T0lOVC4KKwkjIDAuIENsZWFudXAgZnJvbSBwcmV2aW91cyB0ZXN0IGxlYXZpbmcgb25seSAyIHJv d3MuCisJIyAxLiBJbnNlcnQgb25lIG1vcmUgcm93LgorCSMgMi4gUmVjb3JkIGEgU0FWRVBPSU5U LgorCSMgMy4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCisJIyA0LiBEbyByb2xsYmFjayB0 byBTQVZFUE9JTlQgcHJpb3IgdG8gdGhlIHN0cmVhbWVkIGluc2VydHMuCisJIyA1LiBUaGVuIENP TU1JVCBQUkVQQVJFRC4KKwkjCisJIyBFeHBlY3QgZGF0YSBhZnRlciB0aGUgU0FWRVBPSU5UIGlz IGFib3J0ZWQgbGVhdmluZyBvbmx5IDMgcm93cyAoPSAyIG9yaWdpbmFsICsgMSBmcm9tIHN0ZXAg MSkuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRl IHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzIChkZWxldGUgd2lsbCBiZSByZXBsaWNhdGVkKQor CSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgYSA+IDI7Iik7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4K Kwkkb2Zmc2V0X0IgPSAtcyAkbm9kZV9CLT5sb2dmaWxlOworCSRvZmZzZXRfQyA9IC1zICRub2Rl X0MtPmxvZ2ZpbGU7CisKKwkjIDJQQyBQUkVQQVJFIHdpdGggYSBuZXN0ZWQgUk9MTEJBQ0sgVE8g U0FWRVBPSU5UCisJJG5vZGVfQS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCUJFR0lO OworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTksICdmb29iYXInKTsKKwkJU0FW RVBPSU5UIHNwX2lubmVyOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0 X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRl c3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNwX2lu bmVyOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICdvdXRlcic7CisJCSIpOworCisJJG5vZGVfQS0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKKwkkbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lX0MpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX0IsICRvZmZzZXRfQiwg JHN0cmVhbWluZ19tb2RlKTsKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfQywgJG9mZnNldF9D LCAkc3RyZWFtaW5nX21vZGUpOworCisJIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgcHJl cGFyZWQgb24gc3Vic2NyaWJlcihzKQorCSRyZXN1bHQgPQorCSAgJG5vZGVfQi0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsi KTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNj cmliZXIgQicpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVz dWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQycpOwor CisJIyAyUEMgQ09NTUlUCisJJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQg UFJFUEFSRUQgJ291dGVyJzsiKTsKKworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWVfQik7CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCSMgY2hl Y2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0 ID0KKwkgICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2Fj dGlvbiBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRub2RlX0Mt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFy ZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBlbmRlZCBv biBzdWJzY3JpYmVyIEMnKTsKKworCSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZSBhdCBzdWJz Y3JpYmVyKHMpLgorCSMgQWxsIHRoZSBzdHJlYW1lZCBkYXRhIChwcmlvciB0byB0aGUgU0FWRVBP SU5UKSBzaG91bGQgYmUgcm9sbGVkIGJhY2suCisJIyAoOTk5OSwgJ2Zvb2JhcicpIHNob3VsZCBi ZSBjb21taXR0ZWQuCisJJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIgd2hlcmUgYiA9ICdmb29iYXInOyIpOwor CWlzKCRyZXN1bHQsIHFxKDEpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2Ny aWJlciBCJyk7CisJJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiOyIpOworCWlzKCRyZXN1bHQsIHFxKDMpLCAn Um93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9 ICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00g dGVzdF90YWIgd2hlcmUgYiA9ICdmb29iYXInOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAnUm93 cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7CisJJHJlc3VsdCA9CisJ ICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRl c3RfdGFiOyIpOworCWlzKCRyZXN1bHQsIHFxKDMpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNl bnQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2Rl X0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+ IDI7Iik7CisJJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKKwkkbm9kZV9C LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworCisJIyBSZXNldCB0aGUgbG9nIHZlcmJv c2l0eS4KKwlpZiAoJHN0cmVhbWluZ19tb2RlIGVxICdwYXJhbGxlbCcpCisJeworCQkkbm9kZV9C LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2FnZXMgPSB3YXJu aW5nIik7CisJCSRub2RlX0ItPnJlbG9hZDsKKworCQkkbm9kZV9DLT5hcHBlbmRfY29uZigncG9z dGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX0Mt PnJlbG9hZDsKKwl9Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgU2V0 dXAgYSBjYXNjYWRlIG9mIHB1Yi9zdWIgbm9kZXMuCiAjIG5vZGVfQSAtPiBub2RlX0IgLT4gbm9k ZV9DCkBAIC0yNjAsMTYwICs0OTMsMTUgQEAgaXMoJHJlc3VsdCwgcXEoMjEpLCAnUm93cyBjb21t aXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7CiAjIDJQQyArIFNUUkVBTUlORyBU RVNUUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotbXkgJG9sZHBpZF9CID0gJG5vZGVfQS0+ c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBs aWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQicgQU5EIHN0YXRl ID0gJ3N0cmVhbWluZyc7Iik7Ci1teSAkb2xkcGlkX0MgPSAkbm9kZV9CLT5zYWZlX3BzcWwoCi0J J3Bvc3RncmVzJywgIgotCVNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCi0JV0hF UkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9DJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5n JzsiKTsKLQotIyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uIChzdHJlYW1pbmcgPSBvbikKLQot JG5vZGVfQi0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlBTFRFUiBTVUJTQ1JJUFRJT04g dGFwX3N1Yl9CCi0JU0VUIChzdHJlYW1pbmcgPSBvbik7Iik7Ci0kbm9kZV9DLT5zYWZlX3BzcWwo Ci0JJ3Bvc3RncmVzJywgIgotCUFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViX0MKLQlTRVQgKHN0 cmVhbWluZyA9IG9uKSIpOwotCi0jIFdhaXQgZm9yIHN1YnNjcmliZXJzIHRvIGZpbmlzaCBpbml0 aWFsaXphdGlvbgotCi0kbm9kZV9BLT5wb2xsX3F1ZXJ5X3VudGlsKAotCSdwb3N0Z3JlcycsICIK LQlTRUxFQ1QgcGlkICE9ICRvbGRwaWRfQiBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KLQlXSEVS RSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0InIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcn OyIKLSkgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFy dCI7Ci0kbm9kZV9CLT5wb2xsX3F1ZXJ5X3VudGlsKAotCSdwb3N0Z3JlcycsICIKLQlTRUxFQ1Qg cGlkICE9ICRvbGRwaWRfQyBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KLQlXSEVSRSBhcHBsaWNh dGlvbl9uYW1lID0gJyRhcHBuYW1lX0MnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKLSkgb3Ig ZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCI7Ci0KLSMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSAvIENPTU1J VCBQUkVQQVJFRC4KLSMgMS4gRGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2FjdGlvbi4K LSMgMi4gVGhlbiBkbyBjb21taXQgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBhbGwgZGF0YSBpcyBy ZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIocykgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3Vn aCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSMgVGhlbiAyUEMgUFJFUEFSRQotJG5v ZGVfQS0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1 MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwy KSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBB UkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVfQS0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWVfQyk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0 cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit0ZXN0 X3N0cmVhbWluZygkbm9kZV9BLCAkbm9kZV9CLCAkbm9kZV9DLCAkYXBwbmFtZV9CLCAkYXBwbmFt ZV9DLCAnb24nKTsKIAotIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaXMgcHJlcGFyZWQg b24gc3Vic2NyaWJlcihzKQotJHJlc3VsdCA9Ci0gICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVz dWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQicpOwot JHJlc3VsdCA9Ci0gICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5z YWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQycpOwotCi0jIDJQQyBDT01NSVQKLSRu b2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBh cmVkX3RhYic7Iik7Ci0KLSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7Ci0k bm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOwotCi0jIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gd2FzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyKHMpCi0kcmVzdWx0ID0gJG5vZGVf Qi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNv dW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwz MzM0KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJl ciBCLCBhbmQgZXh0cmEgY29sdW1ucyBoYXZlIGxvY2FsIGRlZmF1bHRzJwotKTsKLSRyZXN1bHQg PSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3Vu dChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMzMz NHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBz dWJzY3JpYmVyIEMsIGFuZCBleHRyYSBjb2x1bW5zIGhhdmUgbG9jYWwgZGVmYXVsdHMnCi0pOwot Ci0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyKHMp Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJh bnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQicpOwotJHJlc3VsdCA9Ci0gICRu b2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJl cGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1p dHRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwotIyBUZXN0IDJQQyBQUkVQQVJFIHdpdGggYSBuZXN0ZWQgUk9MTEJBQ0sgVE8gU0FWRVBPSU5U LgotIyAwLiBDbGVhbnVwIGZyb20gcHJldmlvdXMgdGVzdCBsZWF2aW5nIG9ubHkgMiByb3dzLgot IyAxLiBJbnNlcnQgb25lIG1vcmUgcm93LgotIyAyLiBSZWNvcmQgYSBTQVZFUE9JTlQuCi0jIDMu IERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyA0LiBEbyByb2xsYmFjayB0byBTQVZFUE9J TlQgcHJpb3IgdG8gdGhlIHN0cmVhbWVkIGluc2VydHMuCi0jIDUuIFRoZW4gQ09NTUlUIFBSRVBB UkVELgotIwotIyBFeHBlY3QgZGF0YSBhZnRlciB0aGUgU0FWRVBPSU5UIGlzIGFib3J0ZWQgbGVh dmluZyBvbmx5IDMgcm93cyAoPSAyIG9yaWdpbmFsICsgMSBmcm9tIHN0ZXAgMSkuCi0jIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNl cHQgZm9yIDIgcm93cyAoZGVsZXRlIHdpbGwgYmUgcmVwbGljYXRlZCkKLSRub2RlX0EtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7Ci0K LSMgMlBDIFBSRVBBUkUgd2l0aCBhIG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQKLSRub2Rl X0EtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVz dF90YWIgVkFMVUVTICg5OTk5LCAnZm9vYmFyJyk7Ci0JU0FWRVBPSU5UIHNwX2lubmVyOwotCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hF UkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0g MDsKLQlST0xMQkFDSyBUTyBTQVZFUE9JTlQgc3BfaW5uZXI7Ci0JUFJFUEFSRSBUUkFOU0FDVElP TiAnb3V0ZXInOwotCSIpOwotCi0kbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0Ip OwotJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKLQotIyBjaGVjayB0aGUg dHJhbnNhY3Rpb24gc3RhdGUgcHJlcGFyZWQgb24gc3Vic2NyaWJlcihzKQotJHJlc3VsdCA9Ci0g ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdf cHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHBy ZXBhcmVkIG9uIHN1YnNjcmliZXIgQicpOwotJHJlc3VsdCA9Ci0gICRub2RlX0MtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7 Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmli ZXIgQycpOwotCi0jIDJQQyBDT01NSVQKLSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q09NTUlUIFBSRVBBUkVEICdvdXRlcic7Iik7Ci0KLSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWVfQik7Ci0kbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOwotCi0j IGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyCi0kcmVz dWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rp b24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQy0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0 czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2Ny aWJlciBDJyk7Ci0KLSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZSBhdCBzdWJzY3JpYmVyKHMp LgotIyBBbGwgdGhlIHN0cmVhbWVkIGRhdGEgKHByaW9yIHRvIHRoZSBTQVZFUE9JTlQpIHNob3Vs ZCBiZSByb2xsZWQgYmFjay4KLSMgKDk5OTksICdmb29iYXInKSBzaG91bGQgYmUgY29tbWl0dGVk LgotJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKikgRlJPTSB0ZXN0X3RhYiB3aGVyZSBiID0gJ2Zvb2Jhcic7Iik7Ci1pcygkcmVzdWx0LCBx cSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicpOwotJHJl c3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZS T00gdGVzdF90YWI7Iik7Ci1pcygkcmVzdWx0LCBxcSgzKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBw cmVzZW50IG9uIHN1YnNjcmliZXIgQicpOwotJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiB3aGVyZSBiID0gJ2Zv b2Jhcic7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50 IG9uIHN1YnNjcmliZXIgQycpOwotJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWI7Iik7Ci1pcygkcmVzdWx0LCBxcSgz KSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQycpOworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcg bW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor dGVzdF9zdHJlYW1pbmcoJG5vZGVfQSwgJG5vZGVfQiwgJG5vZGVfQywgJGFwcG5hbWVfQiwgJGFw cG5hbWVfQywgJ3BhcmFsbGVsJyk7CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK ICMgY2hlY2sgYWxsIHRoZSBjbGVhbnVwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIz X3R3b3BoYXNlX3N0cmVhbS5wbAppbmRleCA5YjQ1NDEwNmJkLi44MmI1ZTZjMTJlIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsCisrKyBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwKQEAgLTgsNiAr OCwzMDggQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGUgbG9nIHRoYXQgdGhl IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisjIHJlcG9y dGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVja19wYXJhbGxlbF9sb2cKK3sK KwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKSA9IEBfOworCW15 ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSB0cmFuc2Fj dGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVf c3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdlLywgJG9mZnNldCk7 CisJfQorfQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qgc3RlcHMgd2hpY2gg YXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRoZSBzYW1lIGNvZGUg Y2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBzdHJlYW1pbmc9cGFy YWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVfcHVibGlzaGVy LCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9IEBfOworCisJbXkg JG9mZnNldCA9IDA7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0 IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgorCSMgMS4gRGF0YSBpcyBzdHJlYW1lZCBh cyBhIDJQQyB0cmFuc2FjdGlvbi4KKwkjIDIuIFRoZW4gZG8gY29tbWl0IHByZXBhcmVkLgorCSMK KwkjIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIgc2lkZSBhZnRl ciB0aGUgY29tbWl0LgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMgSWYg InN0cmVhbWluZyIgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVk IHRvIGNoZWNrCisJIyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBwcmVwYXJlZCB1c2lu ZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkjIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERF QlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQgdGhhdCwgc28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJi b3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVu ZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEi KTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNj cmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5s b2dmaWxlOworCisJIyBjaGVjayB0aGF0IDJQQyBnZXRzIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJl cgorCSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhl IDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jlcycs IHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0X3Rh YiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVw YXJlZF90YWInO30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAk aXNfcGFyYWxsZWwpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVk IHN0YXRlIG9uIHN1YnNjcmliZXIKKwlteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94 YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9u IHN1YnNjcmliZXInKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCisJJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNPTU1JVCBQUkVQQVJFRCAn dGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQg b24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZS T00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCisJCSdSb3dz IGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEg Y29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisJJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00g cGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBp cyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAvIFJPTExCQUNLIFBSRVBBUkVELgorCSMgMS4g VGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBz dWJzY3JpYmVyLgorCSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCisJIyAzLiBEbyBy b2xsYmFjayBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3QgZGF0YSByb2xscyBiYWNrIGxlYXZpbmcg b25seSB0aGUgb3JpZ2luYWwgMiByb3dzLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBi ZSByZXBsaWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sgdGhlIHN1 YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVy LT5sb2dmaWxlOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJv d3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwor CQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNB Q1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2Ny aWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlv biBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00g cGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBp cyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFi b3J0ZWQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiUk9MTEJB Q0sgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24g aXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQo ZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwKKwkJJ1Jv d3MgaW5zZXJ0ZWQgYnkgMlBDIGFyZSByb2xsZWQgYmFjaywgbGVhdmluZyBvbmx5IHRoZSBvcmln aW5hbCAyIHJvd3MnCisJKTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3Rz OyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJz Y3JpYmVyJyk7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBDaGVjayB0 aGF0IDJQQyBDT01NSVQgUFJFUEFSRUQgaXMgZGVjb2RlZCBwcm9wZXJseSBvbiBjcmFzaCByZXN0 YXJ0LgorCSMgMS4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNl ZWQgdGhlIDY0a0IgbGltaXQuCisJIyAyLiBUaGVuIHNlcnZlciBjcmFzaGVzIGJlZm9yZSB0aGUg MlBDIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KKwkjIDMuIEFmdGVyIHNlcnZlcnMgYXJlIHJl c3RhcnRlZCB0aGUgcGVuZGluZyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCisJIworCSMgRXhw ZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlciBzaWRlIGFmdGVyIHRoZSBj b21taXQuCisJIyBOb3RlOiBib3RoIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBkbyBjcmFzaC9y ZXN0YXJ0LgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMgQ2hlY2sgdGhl IHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3Jp YmVyLT5sb2dmaWxlOworCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jl cycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0 X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRl c3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9w cmVwYXJlZF90YWInO30pOworCisJJG5vZGVfc3Vic2NyaWJlci0+c3RvcCgnaW1tZWRpYXRlJyk7 CisJJG5vZGVfcHVibGlzaGVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKKworCSRub2RlX3B1Ymxpc2hl ci0+c3RhcnQ7CisJJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKKwljaGVja19wYXJhbGxlbF9s b2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSMgY29tbWl0 IHBvc3QgdGhlIHJlc3RhcnQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisJJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgaW5zZXJ0cyBh cmUgdmlzaWJsZQorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00g dGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCisJCSdSb3dzIGlu c2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29s dW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisJIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBS T0xMQkFDSyBQUkVQQVJFRC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mg d2hpY2ggYXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFt ZWQgdXNpbmcgMlBDLgorCSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlz IGFmdGVyIHRoZSBQUkVQQVJFLgorCSMgNC4gVGhlbiBkbyBhIFJPTExCQUNLIFBSRVBBUkVELgor CSMKKwkjIEV4cGVjdCB0aGUgMlBDIGRhdGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgMyByb3dz IG9uIHRoZSBzdWJzY3JpYmVyCisJIyAodGhlIG9yaWdpbmFsIDIgKyBpbnNlcnRlZCAxKS4KKwkj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRh dGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUg YSA+IDI7Iik7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkk b2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgVGhlbiBpbnNlcnQs IHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4K Kwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47 CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1 KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9k KGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7 CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hl Y2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7 CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vi c2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRy ZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwor CisJIyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhl IDJQQyB0cmFuc2FjdGlvbikKKwkjIE5vdGU6IHRoZSAyUEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9s ZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGluc2VydCBpcyBmb3IgYSBzZXBhcmF0ZSBw cmltYXJ5IGtleQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFyJykiKTsKKworCSMgMlBD IHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJST0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwor CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hl Y2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIsCisJIyBidXQgdGhl IGV4dHJhIElOU0VSVCBvdXRzaWRlIG9mIHRoZSAyUEMgc3RpbGwgd2FzIHJlcGxpY2F0ZWQKKwkk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxF Q1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJ aXMoJHJlc3VsdCwgcXEoM3wzfDMpLAorCQknY2hlY2sgdGhlIG91dHNpZGUgaW5zZXJ0IHdhcyBj b3BpZWQgdG8gc3Vic2NyaWJlcicpOworCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRf eGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9u IHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIERv IElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENPTU1JVCBQUkVQQVJFRC4KKwkj IDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0ZWQg b24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgorCSMgMy4g QSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJFLgor CSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJFRC4KKwkjCisJIyBFeHBlY3QgMlBDIGRhdGEg KyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgorCSMgKHRoZSAzMzM0ICsgaW5z ZXJ0ZWQgMSA9IDMzMzUpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMg Rmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNh dGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIg bG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxl OworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhj ZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9z dGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCQlVUERBVEUg dGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rl c3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9m ZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBw cmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFy ZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJl ZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQgKG5vdyB3 ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQorCSMgTm90ZTogdGhlIDJQQyB0 cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5zZXJ0 IGlzIGZvciBhIHNlcGFyYXJlIHByaW1hcnkga2V5CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTksICdm b29iYXInKSIpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0 X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBz dWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0 ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzV8MzMzNXwzMzM1KSwKKwkJJ1Jvd3MgaW5z ZXJ0ZWQgYnkgMlBDIChhcyB3ZWxsIGFzIG91dHNpZGUgaW5zZXJ0KSBoYXZlIGNvbW1pdHRlZCBv biBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwor CSk7CisKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVz dWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7CisK KwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKwkkbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBSZXNldCB0aGUg bG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJl ci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9 IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KK30KKwogIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTZXR1cAogIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwpAQCAtNDgsNiArMzUwLDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0 X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAog CSdwb3N0Z3JlcycsICIKIAlDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIKQEAgLTY0LDIzNiAr MzcwLDMwIEBAIG15ICR0d29waGFzZV9xdWVyeSA9CiAkbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1 ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICR0d29waGFzZV9xdWVyeSkKICAgb3IgZGllICJUaW1lZCBv dXQgd2hpbGUgd2FpdGluZyBmb3Igc3Vic2NyaWJlciB0byBlbmFibGUgdHdvcGhhc2UiOwogCi0j IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIENoZWNrIGluaXRpYWwgZGF0YSB3YXMg Y29waWVkIHRvIHN1YnNjcmliZXIKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIG15 ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiU0VM RUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwog aXMoJHJlc3VsdCwgcXEoMnwyfDIpLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8g c3Vic2NyaWJlcicpOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3Qg MlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFSRUQuCi0jIDEuIERhdGEgaXMgc3RyZWFtZWQgYXMg YSAyUEMgdHJhbnNhY3Rpb24uCi0jIDIuIFRoZW4gZG8gY29tbWl0IHByZXBhcmVkLgotIwotIyBF eHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhl IGNvbW1pdC4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3Rfc3RyZWFtaW5n KCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDApOwogCi0jIGNo ZWNrIHRoYXQgMlBDIGdldHMgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyCi0jIEluc2VydCwgdXBk YXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgotJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJF IG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7 Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rp b24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIDJQQyB0cmFuc2FjdGlvbiBnZXRz IGNvbW1pdHRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ09N TUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBp cyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChk ID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCks Ci0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFu ZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJh bGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlk ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBG Uk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFt ZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJl cGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1p dHRlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK LSMgVGVzdCAyUEMgUFJFUEFSRSAvIFJPTExCQUNLIFBSRVBBUkVELgotIyAxLiBUYWJsZSBpcyBk ZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIu Ci0jIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyAzLiBEbyByb2xsYmFjayBwcmVw YXJlZC4KLSMKLSMgRXhwZWN0IGRhdGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgdGhlIG9yaWdp bmFsIDIgcm93cy4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBGaXJzdCwg ZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCi0k bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgYSA+IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVu b3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkp OwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0J REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNB Q1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKIAotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHBy ZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRf eGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9u IHN1YnNjcmliZXInKTsKLQotIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJST0xMQkFDSyBQUkVQQVJFRCAndGVz dF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJz Y3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs Ci0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90 YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgYXJl IHJvbGxlZCBiYWNrLCBsZWF2aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cycpOwotCi0kcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0 cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwotIyBDaGVjayB0aGF0IDJQQyBDT01NSVQgUFJFUEFSRUQgaXMgZGVj b2RlZCBwcm9wZXJseSBvbiBjcmFzaCByZXN0YXJ0LgotIyAxLiBpbnNlcnQsIHVwZGF0ZSBhbmQg ZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSMgMi4gVGhlbiBz ZXJ2ZXIgY3Jhc2hlcyBiZWZvcmUgdGhlIDJQQyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCi0j IDMuIEFmdGVyIHNlcnZlcnMgYXJlIHJlc3RhcnRlZCB0aGUgcGVuZGluZyB0cmFuc2FjdGlvbiBp cyBjb21taXR0ZWQuCi0jCi0jIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNj cmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgotIyBOb3RlOiBib3RoIHB1Ymxpc2hlciBhbmQg c3Vic2NyaWJlciBkbyBjcmFzaC9yZXN0YXJ0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwotCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJF R0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBt ZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1v ZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7 Ci0KLSRub2RlX3N1YnNjcmliZXItPnN0b3AoJ2ltbWVkaWF0ZScpOwotJG5vZGVfcHVibGlzaGVy LT5zdG9wKCdpbW1lZGlhdGUnKTsKLQotJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKLSRub2RlX3N1 YnNjcmliZXItPnN0YXJ0OwotCi0jIGNvbW1pdCBwb3N0IHRoZSByZXN0YXJ0Ci0kbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJl cGFyZWRfdGFiJzsiKTsKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7Ci0KLSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZQotJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMz MzR8MzMzNCksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNj cmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCi0pOwotCi0j IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIERvIElOU0VSVCBhZnRlciB0aGUgUFJF UEFSRSBidXQgYmVmb3JlIFJPTExCQUNLIFBSRVBBUkVELgotIyAxLiBUYWJsZSBpcyBkZWxldGVk IGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCi0jIDIu IERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyAzLiBBIHNpbmdsZSByb3cgSU5TRVJUIGlz IGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBSRVBBUkUuCi0jIDQuIFRoZW4gZG8gYSBST0xMQkFD SyBQUkVQQVJFRC4KLSMKLSMgRXhwZWN0IHRoZSAyUEMgZGF0YSByb2xscyBiYWNrIGxlYXZpbmcg b25seSAzIHJvd3Mgb24gdGhlIHN1YnNjcmliZXIKLSMgKHRoZSBvcmlnaW5hbCAyICsgaW5zZXJ0 ZWQgMSkuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgRmlyc3QsIGRlbGV0 ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVkKQotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2gg cm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlV UERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVU RSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9O ICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJl ZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3Rz OyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJz Y3JpYmVyJyk7Ci0KLSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAobm93IHdlIGFyZSBvdXRz aWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCi0jIE5vdGU6IHRoZSAyUEMgdHJhbnNhY3Rpb24g c3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGluc2VydCBpcyBmb3IgYSBz ZXBhcmF0ZSBwcmltYXJ5IGtleQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwgJ2Zvb2JhcicpIik7Ci0K LSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKLQkiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsi KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBj aGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlciwKLSMgYnV0IHRo ZSBleHRyYSBJTlNFUlQgb3V0c2lkZSBvZiB0aGUgMlBDIHN0aWxsIHdhcyByZXBsaWNhdGVkCi0k cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVD VCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlz KCRyZXN1bHQsIHFxKDN8M3wzKSwgJ2NoZWNrIHRoZSBvdXRzaWRlIGluc2VydCB3YXMgY29waWVk IHRvIHN1YnNjcmliZXInKTsKLQotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsi KTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3Jp YmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRG8gSU5TRVJUIGFm dGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgQ09NTUlUIFBSRVBBUkVELgotIyAxLiBUYWJsZSBp cyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmli ZXIuCi0jIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyAzLiBBIHNpbmdsZSByb3cg SU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBSRVBBUkUuCi0jIDQuIFRoZW4gZG8g YSBDT01NSVQgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCAyUEMgZGF0YSArIHRoZSBleHRyYSByb3cg YXJlIG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0aGUgMzMzNCArIGluc2VydGVkIDEgPSAzMzM1KS4K LSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBGaXJzdCwgZGVsZXRlIHRoZSBk YXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCi0kbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+ IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRv IGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdw b3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0 ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00g dGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3Rf cHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRl IG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1p cygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIn KTsKLQotIyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2Yg dGhlIDJQQyB0cmFuc2FjdGlvbikKLSMgTm90ZTogdGhlIDJQQyB0cmFuc2FjdGlvbiBzdGlsbCBo b2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5zZXJ0IGlzIGZvciBhIHNlcGFyYXJl IHByaW1hcnkga2V5Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFyJykiKTsKLQotIyAyUEMg dHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0k bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3Vi IFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKIAotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9u IGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50 KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzV8MzMzNXwzMzM1 KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgKGFzIHdlbGwgYXMgb3V0c2lkZSBpbnNlcnQpIGhh dmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9j YWwgZGVmYXVsdHMnCi0pOworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24g V0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWlu Zyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5 IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKIAotJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rp b24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1 Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwogCiAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiAjIGNoZWNrIGFsbCB0aGUgY2xlYW51cAotLSAKMi4yMy4wLndp bmRvd3MuMQoK --_003_OS0PR01MB5716410E7551394B730D433294389OS0PR01MB5716jpnp_--