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 1pD1Qy-0005eX-Jm for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Jan 2023 10:55:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pD1Qx-0003K9-FK for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Jan 2023 10:55:47 +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 1pD1Qw-0003IQ-Lr for pgsql-hackers@lists.postgresql.org; Wed, 04 Jan 2023 10:55:47 +0000 Received: from esa2.fujitsucc.c3s2.iphmx.com ([68.232.152.246]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pD1Qs-0007Mw-RM for pgsql-hackers@lists.postgresql.org; Wed, 04 Jan 2023 10:55:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1672829742; x=1704365742; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=7NoIY/be1fPbJyTSImXYEP5avpMh005T4jYpA1+SnT4=; b=njQrCdsFe0dEzOISsJ2uOJlnY8KLOm2lNb7Kwty+ypqr1sPE36xyi8e2 NaGf9kD6J25Al0dtoPb4xOUlAJhFbNkSktOM4J4oGL78O8sbGA8yyYJVS PzXM+lt/1fYsimU24A8eOdOc5AoWriX7NFmKz6/U/y3E5UjZe58VqF6j9 04WjO8V6udSeTwHe1uof7/Y1hAcpLObQEqfmCdckauwlF5y8LLtq2rQyQ YF/X/yDtRk8q00WDuOQMysBwv3rWKPKUAwwjHEcAuqqmdMXkiLqCUGisu vow/5zKRoLGB01BWO1yvNHcUyb/pH1goRT//5Fi/bqA1r09vTTpjss+sY w==; X-IronPort-AV: E=McAfee;i="6500,9779,10579"; a="82027719" X-IronPort-AV: E=Sophos;i="5.96,299,1665414000"; d="scan'208,223";a="82027719" Received: from mail-os0jpn01lp2105.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.105]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jan 2023 19:55:38 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AADsst1IX4o3KMyXHJ2iAFweVgQTy0zx5bAmWxaTjO1bdcQHHva+NC3Lga0INesnSALwmmRSnsBiV+zHNp5DWcG9QKQHYgtCYMYj/5qG029+8mRuMmBjbPWg6R6PLGZ+9jtfvGfvsptGfZZZ09g9cgqwxfqKMPaAlnTkAn24DOLGPQreDDpp6xtXO1rShLQo/3JmImHM6MAOsn3LVnY58IIhYjT/n4KBnMtD9CRm/D+jd7KKRDhIfRlwTOcl13DKBcGSO2XxtzInpQFLNc03FCOj6Ot9sAQV+zqS4+f0pBECdOMulxw1ifw44J/q33j4ims4qe73SsRiXRe9Ku0agg== 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=j1QJMNJq6ooJFDs5vuQE4dWKB0uLPkJiYrUZErwlU+U=; b=LgGNW5w8X5QUUBodtZ7o3tOgdfJxDYVSZtuYKX/g5KzwFJ+OGoJP4kqWQE7Vv7m/A9Aq5bJ5nmgyXgOyJ/TMF8i2VifBSxMErqhu+iSBvkZK0SMJGnlJ35erqEiEfTpoc3tkhcN1CPeRPCy12Sv0iT1uvq2FaYWTQqa7hBifwsme2HSlJ01J1A7EbaKWsvkFpc/NXLQD/giJqac8pXeloQIltc3to+lFVM3Lu4eUjlP7LRQAMKZwG7dcr+5rpCHeIYqzkeJMvxkOsG6NfZIsW4oHjX0fLAdVcZZJ0fhGr3c6+p7IwNX5e0+pivTjuaZxuQOKmGwO6O0LvC4sBEgx5Q== 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 TYCPR01MB9505.jpnprd01.prod.outlook.com (2603:1096:400:191::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Wed, 4 Jan 2023 10:55:35 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::db62:a054:b1fa:4cb3]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::db62:a054:b1fa:4cb3%3]) with mapi id 15.20.5944.019; Wed, 4 Jan 2023 10:55:35 +0000 From: "houzj.fnst@fujitsu.com" To: Masahiko Sawada , "wangw.fnst@fujitsu.com" CC: Amit Kapila , 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: AQHZD4gmc8Gf0xrGM0OFaEbpojAcOq5uQq1wgAHYoYCAAB++4IAAIlOAgAGmKgCAABa30IADFsaAgAFWGwCAABBJYIAA+pYAgABJqTCAAgB9AIAA8s2ggABurUCABGXB4IAAfjmAgAEdzwCAAHCvAIABHXEAgAIlRYCAAWA5AIAEvuWAgAE6wQCAAY/VgIAAWFEw Date: Wed, 4 Jan 2023 10:55:34 +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?NTBfQWN0aW9uSWQ9MzcxYjlmZjMtN2ZmNC00OGJlLWJjMDAtMjYyZDVmZjNj?= =?utf-8?B?Mzg2O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?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?ZWNlMDUwX1NldERhdGU9MjAyMy0wMS0wNFQxMDo0NzozMFo7TVNJUF9MYWJl?= =?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_|TYCPR01MB9505:EE_ x-ms-office365-filtering-correlation-id: 84ac52ae-6e1e-41c7-f512-08daee4234ef x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: r7ZHCRu0XPq8kEoWWKN+/R0G9hieFINM4cWpC84pPlTq2L/+sxFCJMzcaQmM2FByxcld5GztMb+og7735OmzM94B+OpUcep0WZFkQcdOPTXuRgnp+MsbqKEaBSUWDf+6vuaHAXcYL/00KHqdQwAwc5x5tKI/IW7uO/9xzQQUQVNI6epnAiJgTHdQ5lDISluLGh16S56L7nv0u+NnjJHnpz8YUyiwKrni934L+2R97tLcQIGVEupJLhsC+Wa0O4k97Rp8tR2PQzA3joGm+HxfYvAuiiL22gAKKLSIAk5codwJ+7iJN1Ii5xNEYy2K9FltQb7g1N0g9KWuCivmJ+bjaKspIqCgq7o1LgE7dw1R0JSj2fk8tAK5R6JtWMBNoNk/ZeZKTjl+dFSTUK2yMp8gZjxinEMDvORltiXjydBS656454NeepOGYhOSKaM9IvGmElUsW7flg5qRKaupPlNgw2+aPzXXeoIB1TLWgR9KtHtfud0mmoUcWFCSAto1SBrdRP7TMq6zI8Cbc5qc3Nm26EG8BPxRThnH73/fopNMBMDASFdg/itM4bTCH75/AyTeNSe6+E4iZQ1cQzJWferI/IoPOCSrWiY5Bb5GIKXmq8xB4oWJv/QDhJeX6fRFv+QlvQdxYmgtIFOXBxYPs0t/BBr5Bnvh0x7A9o4ff2Da/Y24baxyBEsjQCdZRpfhE9kC1oVb/q+0IstfaWw8h4AcMc1PWUypjnhkbZD6SxIk0H4= 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)(396003)(39860400002)(366004)(346002)(376002)(136003)(451199015)(1590799012)(66946007)(4326008)(66476007)(8676002)(64756008)(52536014)(5660300002)(66446008)(66556008)(8936002)(316002)(110136005)(6636002)(2906002)(76116006)(6506007)(1580799009)(7696005)(478600001)(71200400001)(54906003)(41300700001)(53546011)(85182001)(186003)(26005)(9686003)(82960400001)(33656002)(83380400001)(99936003)(122000001)(38100700002)(38070700005)(86362001)(55016003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Ni9zL3NmempqMDhuZGJHNXEybUhQcU9JUitTcU9HZ1d0VlJJNlpsOWgydGFW?= =?utf-8?B?NjlmSmo0UGcwclprMjZQeHdOSGszV1ViQjFxVXJZcEdDOVhlYkhwSTViMzBu?= =?utf-8?B?U2NmelBTRWw4MFVGbUFVVWlGQ3NvV3QzL25JRHZpTlM2UVdnS09lYloybko0?= =?utf-8?B?eVN6V2c0WWRBNVh3dE1BTzk5SjJVaUdxWGg5V3dGbnJaSkhWRHBiUTNRQSts?= =?utf-8?B?cG16VUs4cUF4L3k3a3IrVmtVUHpwckp3ZHdla2d4T1ZTL3R3cllMb0RzWG8x?= =?utf-8?B?ZFkzM3FGSUl6N21laTd3Qkl6MytPNXdvYmdFNmtOSnFuSlYrQ1pqV05BMUZ2?= =?utf-8?B?VUo1OUhNak5QMVpxdHlpWFZqK2paZWRXV3ZKVWE4NVpGRERJTTZsTEdOZFp1?= =?utf-8?B?b0FIRTVjbGN5ZTMzMVpZMlhBOXp2V2pvTmZ5UC8xUytVWE9GcUFPT0Y2U0x6?= =?utf-8?B?c3VFODZYd2lRV05sendONmtKbjl3Q2VKT1BUUUo0VVIzaTRmb3NwcUFjdmJ5?= =?utf-8?B?a01zVUZTd040M1FWTTNqMThHM080WDhRcGFsTzFBN01iZ2x0bjNid1F2K0h0?= =?utf-8?B?QXhDNTVEYU1uWEkwQnRHM1dXTTEwdy80YVZmaE82aFN0SjBXVldPYkJaWitG?= =?utf-8?B?YkVjSUZwenQ4YkNPU3IyNFZBOUtTUjlUaUg2R0tMZ0ZjUkFtKzhrcjFGVE5E?= =?utf-8?B?ZGtOMlpXV0xEZlE0RklCYmZiNTZ4ZFNSYUpDenBQalVpbVdmMlZUSkJBVmtF?= =?utf-8?B?cEVNREtzak9yRGZGMmtMcmQ0VTdVQTRkZktYMUowa2NjQW5heWVuV1RHVnA2?= =?utf-8?B?TCtDbWhGNTQrckp0a3E0MVJ6ZE5rOVE4dVdyamZJNkVlYUZKemlZVjdPQXFC?= =?utf-8?B?Um8rSXMyYnlubzlmSHhDYUpwdTROMlZzYnErZ1FDNTVwUmRhS0pjMzdvK0h1?= =?utf-8?B?SHlDenpLeXpKZndyYmd6TDdLRWticG9SekVoWXNGRysxeVBBbnd4dXp0RWtU?= =?utf-8?B?YVNtZnd4Q3FyQXFueklNR3o4aDgrUWk3Y3R1TWJJRmxHclNGTlBCOGhzQjAw?= =?utf-8?B?b25MMnFFRWJ6aXhVekwzczZPTXdKS2N3YTRMQlpUL1A5NytyMU1kVVpmS2JS?= =?utf-8?B?aG9sNTAwVENQM0Q5eU1YZWZ5WkNNZE1VZWtoVTFNdHZPWUMrbTMvRStHek1a?= =?utf-8?B?a00xRGluY1BDWGNETCt1NGd3c2xweHZsQzBzRXRUSW9sVXgxSEg3VThvcjBU?= =?utf-8?B?NHBkWFpidTdIdjV3RGZ4OWVZekpBRWE5Z3g3M3JiM093VUM2dW5XWE5laWU3?= =?utf-8?B?cVhSWFM1Q0U4eUxOVXdoUnovRTNPL0hNc1VwRE1WVDNRR3cvN3ZZYUZjbjRq?= =?utf-8?B?dkJuZEYrdE50UGpZamR3YURLekc3QWY2NlZDajMvcE9WRTZtNitKby9wQ1Qw?= =?utf-8?B?VzRuQlV6MmM1cDRMMXlUeFJRZ1JmOHNVQkd2dU5xU3Y2WXU3NHZJMTlJN1Nl?= =?utf-8?B?NFl0eXoxdmZKSFRPbk5yclM3MTNUclRFTG5JK3FyVnFhUGdmdEtRcTRWT2h2?= =?utf-8?B?OHVFV053YndEb0pyVjBOZTIzSXJJMHBpcmVWQTczNndXaVBxY3IweHFwc2Iv?= =?utf-8?B?SmhzT2VHdzVaUTVFMU4rc3FOSHpPY3A3OHZZeUQ4eldrZ0pQMXVLZkQrYlkr?= =?utf-8?B?NkZsanNXNWlZaVU1OVBPWVArOXZ3MVdDWFY0MTZLV1gwV05YL1JtNXBSY0RV?= =?utf-8?B?ZWFIaHlrWjlBQXdkS1RvWmtGZE1EbDlZZFZhSloxZWtsVXp3RjlqVjhtM01N?= =?utf-8?B?Ym5OY2NkamRSRnoxT3hRb2pUQkhqMERoR08xSmROSzkrWFVBK0hFNGxOQTlT?= =?utf-8?B?TXVlNzh1ZVNqL1RWMHFNck5IMkdDMUVIdWlTZXY1YnE3S1hsMDdPR2d6dFBO?= =?utf-8?B?UjB3S3laVnpBNXJqZDZFMUdrR0VTSlN4K1VWUTZPeDFxb2ZTMm1mSmx6R2NK?= =?utf-8?B?WVlrdE41bHgxTktrVm83RDU1NE5uWnZ1N1Y5N1hFb2EwNGl2QUdzRmtBMzhS?= =?utf-8?B?OFRNOFJKelVwb0U2WkNMdUV2Sm5uQmc0dlc0UVd1NS90SHdDaHNNblpUZ3Jj?= =?utf-8?Q?hKcnd0RPts84wmO63ooHyZOfK?= Content-Type: multipart/mixed; boundary="_006_OS0PR01MB5716087C537FA8311F208B6094F59OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: AJP+E9UeESshHxEHOjV4RgzoGMsX//QCs7WcYBllIxv7Xa4aLzrGDuKwoKgHrSiylYKlV5qVdx2wq60//GdB/vr7JO8//8JH7HX/LDHkRI8j7d6R1r1akY0kbonfkQOdpSYTDALUUoTF7xXp+qyTJJGvEbXZgka1oyMVssp4x7G5Jz4hOL9MGbWoDuxnQNpUfR3hdf6vBBQ8TnMN3gsEbA2ztvCjvLXW03wOWQJsfuub7z6F4Xf81mLneRsXzUQ0/KKSBdcE9GKq/+jgkFF+MTjonGxhgnYcNnQcksNZeuibBbxmXw4ajU+RVy0F8j5GMxhWTSrKLk/I2tcHYyR7J5KGI5zeXz08DTY3XvroNjZZsWS6xCOuPjDdgPQE818UTeQpcK7mfc3Yph0ADAMBP6ce4nE+GrITT0KVFALp3/xxNkTDC2pljBtbHBpF2Tj0xYKUd0miLx0/xnpKfuFAJa0ieRxplHtCGpPn1HETFn5UXYrlxaN3w8dPbD44eLwG4oeEmgIDV3h72PfMAT9Z7P9TIkrWrDRA2NWuVZso+VSg2v/kEYA+FLUmWdLqbfA3riGQqFpOeG0hMOlQAJqkr06ci/0Eyv6YCXOace2s9G9xP0yA7yzRLjfX8bkFprliCndGNgw+FV/wg5J2BkzFl11Wa/CC3HPE9+q1FecZsnAyCWINg+Kj3MLDIc1IDAt9WrcXyB9QoyudIQVEQrvpkdSUZGLORJHaA7rw1iw/GEhiRkKCNxR38Ies75g9A6iSOS5dKYXTLLVuQFegXPY4zfwoogrUM42/r97Mu6DSWfcm9EdVgNP1RzHaR5VE4YyvDakFeuB/7rmjuIVkPz9sX7DDhTv23mG2NJaqNNLDv9FI6oP/dDNzZg7d+NRJHkQD3SgCuerVBoe9BZkc3U3mSg== 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: 84ac52ae-6e1e-41c7-f512-08daee4234ef X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Jan 2023 10:55:34.9427 (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: SY/qwHgUCkBPUXHWQNLoFaUQtsdcrh2hBzLthFluYpUy3y66slulT2/taTFwLlD+IMRZnfOKUIDpEN/Lz++awQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB9505 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_006_OS0PR01MB5716087C537FA8311F208B6094F59OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gV2VkLCBKYW4gNCwgMjAyMyBhdCAxMzozMSBQTSBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5t c2hrQGdtYWlsLmNvbT4gd3JvdGU6DQo+IE9uIFR1ZSwgSmFuIDMsIDIwMjMgYXQgMjo0MCBQTSB3 YW5ndy5mbnN0QGZ1aml0c3UuY29tIA0KPiA8d2FuZ3cuZm5zdEBmdWppdHN1LmNvbT4gd3JvdGU6 DQo+ID4NCj4gPiBPbiBNb24sIEphbiAyLCAyMDIzIGF0IDE4OjU0IFBNIEFtaXQgS2FwaWxhIA0K PiA+IDxhbWl0LmthcGlsYTE2QGdtYWlsLmNvbT4NCj4gd3JvdGU6DQo+ID4gPiBPbiBGcmksIERl YyAzMCwgMjAyMiBhdCAzOjU1IFBNIHdhbmd3LmZuc3RAZnVqaXRzdS5jb20gDQo+ID4gPiA8d2Fu Z3cuZm5zdEBmdWppdHN1LmNvbT4gd3JvdGU6DQo+ID4gPiA+DQo+ID4gPiA+IEkndmUgY2hlY2tl ZCBpdCBhbmQgaXQgbG9va3MgZ29vZCB0byBtZS4NCj4gPiA+ID4gUmViYXNlZCB0aGUgb3RoZXIg cGF0Y2hlcyBhbmQgcmFuIHRoZSBwZ2lkZW50IGZvciB0aGUgcGF0Y2ggc2V0Lg0KPiA+ID4gPg0K PiA+ID4gPiBBdHRhY2ggdGhlIG5ldyBwYXRjaCBzZXQuDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4g SSBoYXZlIGFkZGVkIGEgZmV3IERFQlVHIG1lc3NhZ2VzIGFuZCBjaGFuZ2VkIGEgZmV3IGNvbW1l bnRzIGluIA0KPiA+ID4gdGhlDQo+ID4gPiAwMDAxIHBhdGNoLiBXaXRoIHRoYXQgdjcxLTAwMDEq IGxvb2tzIGdvb2QgdG8gbWUgYW5kIEknbGwgY29tbWl0IA0KPiA+ID4gaXQgbGF0ZXIgdGhpcyB3 ZWVrIChieSBUaHVyc2RheSBvciBGcmlkYXkpIHVubGVzcyB0aGVyZSBhcmUgYW55IA0KPiA+ID4g bWFqb3IgY29tbWVudHMgb3Igb2JqZWN0aW9ucy4NCj4gPg0KPiA+IFRoYW5rcyBmb3IgeW91ciBp bXByb3ZlbWVudC4NCj4gPg0KPiA+IFJlYmFzZWQgdGhlIHBhdGNoIHNldCBiZWNhdXNlIHRoZSBu ZXcgY2hhbmdlIGluIEhFQUQgKGM4ZTFiYTcpLg0KPiA+IEF0dGFjaCB0aGUgbmV3IHBhdGNoIHNl dC4NCj4gDQo+IFRoZXJlIGFyZSBzb21lIHVudXNlZCBwYXJhbWV0ZXJzIGluIHY3MiBwYXRjaGVz Og0KDQpUaGFua3MgZm9yIHlvdXIgY29tbWVudHMhDQoNCj4gK3N0YXRpYyBib29sDQo+ICtwYV9j YW5fc3RhcnQoVHJhbnNhY3Rpb25JZCB4aWQpDQo+ICt7DQo+ICsgICAgICAgIEFzc2VydChUcmFu c2FjdGlvbklkSXNWYWxpZCh4aWQpKTsNCj4gDQo+ICd4aWQnIGlzIHVzZWQgb25seSBmb3IgdGhl IGFzc2VydGlvbiBjaGVjayBidXQgSSBkb24ndCB0aGluayBpdCdzIG5lY2Vzc2FyeS4NCg0KQWdy ZWUuIFJlbW92ZWQgdGhpcyBjaGVjay4NCg0KPiAtLS0NCj4gKy8qDQo+ICsgKiBIYW5kbGUgYSBz aW5nbGUgcHJvdG9jb2wgbWVzc2FnZSByZWNlaXZlZCBmcm9tIGEgc2luZ2xlIHBhcmFsbGVsIA0K PiArYXBwbHkNCj4gKyAqIHdvcmtlci4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQNCj4gK0hhbmRs ZVBhcmFsbGVsQXBwbHlNZXNzYWdlKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU3Ry aW5nSW5mbyANCj4gK21zZykNCj4gDQo+IEluIGFkZGl0aW9uLCB0aGUgc2FtZSBpcyB0cnVlIGZv ciAnd2luZm8nLg0KDQpBZ3JlZS4gUmVtb3ZlZCB0aGlzIHBhcmFtZXRlci4NCg0KQXR0YWNoIHRo ZSBuZXcgcGF0Y2ggc2V0Lg0KQXBhcnQgZnJvbSBhZGRyZXNzaW5nIFNhd2FkYS1TYW4ncyBjb21t ZW50cywgSSBhbHNvIGRpZCBzb21lIG90aGVyIG1pbm9yDQpjaGFuZ2VzIGluIHRoZSBwYXRjaDoN Cg0KKiBBZGp1c3RlZCBhIHRlc3RjYXNlIGFib3V0IGNyYXNoIHJlc3RhcnQgaW4gMDIzX3R3b3Bo YXNlX3N0cmVhbS5wbCwgSQ0KICBza2lwcGVkIHRoZSBjaGVjayBmb3IgREVCVUcgbXNnIGFzIHRo ZSBtc2cgbWlnaHQgbm90IGJlIG91dHB1dCBpZiB0aGUgY3Jhc2ggaGFwcGVucw0KICBiZWZvcmUg dGhhdC4NCiogQWRqdXN0ZWQgdGhlIGNvZGUgaW4gcGdfbG9ja19zdGF0dXMoKSB0byBtYWtlIHRo ZSBmaWVsZHMgb2YNCiAgYXBwbHl0cmFuc2FjdGlvbiBsb2NrIGRpc3BsYXkgaW4gbW9yZSBhcHBy b3ByaWF0ZSBwbGFjZXMuDQoqIEFkZCBhIGNvbW1lbnQgdG8gZXhwbGFpbiB3aHkgd2UgdW5sb2Nr IHRoZSB0cmFuc2FjdGlvbiBiZWZvcmUgYWJvcnRpbmcgdGhlDQogIHRyYW5zYWN0aW9uIGluIHBh cmFsbGVsIGFwcGx5IHdvcmtlci4NCg0KQmVzdCByZWdhcmRzLA0KSG91IHpqDQo= --_006_OS0PR01MB5716087C537FA8311F208B6094F59OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v73-0005-Add-a-main_worker_pid-to-pg_stat_subscription.patch" Content-Description: v73-0005-Add-a-main_worker_pid-to-pg_stat_subscription.patch Content-Disposition: attachment; filename="v73-0005-Add-a-main_worker_pid-to-pg_stat_subscription.patch"; size=9720; creation-date="Wed, 04 Jan 2023 10:54:25 GMT"; modification-date="Wed, 04 Jan 2023 10:55:29 GMT" Content-Transfer-Encoding: base64 RnJvbSBjMjQyYjU3YmRlZWE0MzM1NjJlNDQxMTg2ODgyMzkxZTNmNzQyODJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgNiBPY3QgMjAyMiAxNDo0MjoyNCArMDgwMApTdWJqZWN0OiBbUEFUQ0gg djczIDUvNV0gQWRkIGEgbWFpbl93b3JrZXJfcGlkIHRvIHBnX3N0YXRfc3Vic2NyaXB0aW9uCgpt YWluX3dvcmtlcl9waWQgaXMgUHJvY2VzcyBJRCBvZiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciwg aWYgdGhpcyBwcm9jZXNzIGlzIGEKYXBwbHkgcGFyYWxsZWwgd29ya2VyLiBOVUxMIGlmIHRoaXMg cHJvY2VzcyBpcyBhIGxlYWRlciBhcHBseSB3b3JrZXIgb3IgYQpzeW5jaHJvbml6YXRpb24gd29y a2VyLgoKVGhlIG5ldyBjb2x1bW4gY2FuIG1ha2UgaXQgZWFzaWVyIHRvIGRpc3Rpbmd1aXNoIGxl YWRlciBhcHBseSB3b3JrZXIgYW5kIGFwcGx5CnBhcmFsbGVsIHdvcmtlciB3aGljaCBpcyBhbHNv IHNpbWlsYXIgdG8gdGhlICdsZWFkZXJfcGlkJyBjb2x1bW4gaW4KcGdfc3RhdF9hY3Rpdml0eS4K LS0tCiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgfCAgMyArLQog ZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCAgICAgICAgICAgICAgIHwgMjYgKysrKysrKysr KysrKystLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgICAgfCAg MSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgfCAzMiArKysr KysrKysrKystLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAg ICAgICAgfCAgNiArKy0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAgICAg ICAgfCAgMyArLQogNiBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21s IGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCBjYjRmNWM2ZjE5 Li42MjU0Mzg4YjA0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlv bi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTE2 OTEsNyArMTY5MSw4IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBs aWNhdGlvbiBvcmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICBzdWJzY3JpcHRpb24u ICBBIGRpc2FibGVkIHN1YnNjcmlwdGlvbiBvciBhIGNyYXNoZWQgc3Vic2NyaXB0aW9uIHdpbGwg aGF2ZQogICAgemVybyByb3dzIGluIHRoaXMgdmlldy4gIElmIHRoZSBpbml0aWFsIGRhdGEgc3lu Y2hyb25pemF0aW9uIG9mIGFueQogICAgdGFibGUgaXMgaW4gcHJvZ3Jlc3MsIHRoZXJlIHdpbGwg YmUgYWRkaXRpb25hbCB3b3JrZXJzIGZvciB0aGUgdGFibGVzCi0gICBiZWluZyBzeW5jaHJvbml6 ZWQuCisgICBiZWluZyBzeW5jaHJvbml6ZWQuIE1vcmVvdmVyLCBpZiB0aGUgc3RyZWFtaW5nIHRy YW5zYWN0aW9uIGlzIGFwcGxpZWQgaW4KKyAgIHBhcmFsbGVsLCB0aGVyZSB3aWxsIGJlIGFkZGl0 aW9uYWwgd29ya2Vycy4KICAgPC9wYXJhPgogIDwvc2VjdDE+CiAKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCmlu ZGV4IGNmMjIwYzNiY2IuLmMyZTdiZGI3N2QgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25p dG9yaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbApAQCAtMzE5Niwx MyArMzE5NiwyNCBAQCBTRUxFQ1QgcGlkLCB3YWl0X2V2ZW50X3R5cGUsIHdhaXRfZXZlbnQgRlJP TSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHdhaXRfZXZlbnQgaQogICAgICAgPC9wYXJhPjwvZW50 cnk+CiAgICAgIDwvcm93PgogCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxv Z190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxz dHJ1Y3RmaWVsZD5hcHBseV9sZWFkZXJfcGlkPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50ZWdlcjwv dHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFByb2Nlc3MgSUQgb2Yg dGhlIGxlYWRlciBhcHBseSB3b3JrZXIsIGlmIHRoaXMgcHJvY2VzcyBpcyBhIGFwcGx5CisgICAg ICAgcGFyYWxsZWwgd29ya2VyLiBOVUxMIGlmIHRoaXMgcHJvY2VzcyBpcyBhIGxlYWRlciBhcHBs eSB3b3JrZXIgb3IgYQorICAgICAgIHN5bmNocm9uaXphdGlvbiB3b3JrZXIuCisgICAgICA8L3Bh cmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKICAgICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xl PSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CiAg ICAgICAgPHN0cnVjdGZpZWxkPnJlbGlkPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+b2lkPC90eXBlPgog ICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CiAgICAgICAgT0lEIG9mIHRoZSByZWxhdGlvbiB0 aGF0IHRoZSB3b3JrZXIgaXMgc3luY2hyb25pemluZzsgbnVsbCBmb3IgdGhlCi0gICAgICAgbWFp biBhcHBseSB3b3JrZXIKKyAgICAgICBtYWluIGFwcGx5IHdvcmtlciBhbmQgdGhlIHBhcmFsbGVs IGFwcGx5IHdvcmtlcgogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgogCkBAIC0z MjEyLDcgKzMyMjMsNyBAQCBTRUxFQ1QgcGlkLCB3YWl0X2V2ZW50X3R5cGUsIHdhaXRfZXZlbnQg RlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHdhaXRfZXZlbnQgaQogICAgICAgPC9wYXJhPgog ICAgICAgPHBhcmE+CiAgICAgICAgTGFzdCB3cml0ZS1haGVhZCBsb2cgbG9jYXRpb24gcmVjZWl2 ZWQsIHRoZSBpbml0aWFsIHZhbHVlIG9mCi0gICAgICAgdGhpcyBmaWVsZCBiZWluZyAwCisgICAg ICAgdGhpcyBmaWVsZCBiZWluZyAwOyBudWxsIGZvciB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy CiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKQEAgLTMyMjEsNyArMzIzMiw4 IEBAIFNFTEVDVCBwaWQsIHdhaXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRf YWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVudCBpCiAgICAgICAgPHN0cnVjdGZpZWxkPmxhc3RfbXNn X3NlbmRfdGltZTwvc3RydWN0ZmllbGQ+IDx0eXBlPnRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZTwv dHlwZT4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgIFNlbmQgdGltZSBvZiBs YXN0IG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBvcmlnaW4gV0FMIHNlbmRlcgorICAgICAgIFNlbmQg dGltZSBvZiBsYXN0IG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBvcmlnaW4gV0FMIHNlbmRlcjsgbnVs bCBmb3IgdGhlCisgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyCiAgICAgICA8L3BhcmE+PC9l bnRyeT4KICAgICAgPC9yb3c+CiAKQEAgLTMyMzAsNyArMzI0Miw4IEBAIFNFTEVDVCBwaWQsIHdh aXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2Fp dF9ldmVudCBpCiAgICAgICAgPHN0cnVjdGZpZWxkPmxhc3RfbXNnX3JlY2VpcHRfdGltZTwvc3Ry dWN0ZmllbGQ+IDx0eXBlPnRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZTwvdHlwZT4KICAgICAgIDwv cGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgIFJlY2VpcHQgdGltZSBvZiBsYXN0IG1lc3NhZ2Ug cmVjZWl2ZWQgZnJvbSBvcmlnaW4gV0FMIHNlbmRlcgorICAgICAgIFJlY2VpcHQgdGltZSBvZiBs YXN0IG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBvcmlnaW4gV0FMIHNlbmRlcjsgbnVsbCBmb3IKKyAg ICAgICB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyCiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAg ICAgPC9yb3c+CiAKQEAgLTMyMzksNyArMzI1Miw4IEBAIFNFTEVDVCBwaWQsIHdhaXRfZXZlbnRf dHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVudCBp CiAgICAgICAgPHN0cnVjdGZpZWxkPmxhdGVzdF9lbmRfbHNuPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+ cGdfbHNuPC90eXBlPgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+Ci0gICAgICAgTGFzdCB3 cml0ZS1haGVhZCBsb2cgbG9jYXRpb24gcmVwb3J0ZWQgdG8gb3JpZ2luIFdBTCBzZW5kZXIKKyAg ICAgICBMYXN0IHdyaXRlLWFoZWFkIGxvZyBsb2NhdGlvbiByZXBvcnRlZCB0byBvcmlnaW4gV0FM IHNlbmRlcjsgbnVsbCBmb3IKKyAgICAgICB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyCiAgICAg ICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKQEAgLTMyNDksNyArMzI2Myw3IEBAIFNF TEVDVCBwaWQsIHdhaXRfZXZlbnRfdHlwZSwgd2FpdF9ldmVudCBGUk9NIHBnX3N0YXRfYWN0aXZp dHkgV0hFUkUgd2FpdF9ldmVudCBpCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KICAgICAg ICBUaW1lIG9mIGxhc3Qgd3JpdGUtYWhlYWQgbG9nIGxvY2F0aW9uIHJlcG9ydGVkIHRvIG9yaWdp biBXQUwKLSAgICAgICBzZW5kZXIKKyAgICAgICBzZW5kZXI7IG51bGwgZm9yIHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICA8 L3Rib2R5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IGFmMDc2ODRiMjAu LmFlZjkyNmFmN2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdz LnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKQEAgLTk0OSw2 ICs5NDksNyBAQCBDUkVBVEUgVklFVyBwZ19zdGF0X3N1YnNjcmlwdGlvbiBBUwogICAgICAgICAg ICAgc3Uub2lkIEFTIHN1YmlkLAogICAgICAgICAgICAgc3Uuc3VibmFtZSwKICAgICAgICAgICAg IHN0LnBpZCwKKyAgICAgICAgICAgIHN0LmFwcGx5X2xlYWRlcl9waWQsCiAgICAgICAgICAgICBz dC5yZWxpZCwKICAgICAgICAgICAgIHN0LnJlY2VpdmVkX2xzbiwKICAgICAgICAgICAgIHN0Lmxh c3RfbXNnX3NlbmRfdGltZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbGF1bmNoZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNo ZXIuYwppbmRleCBhZmI3YWNkZGFhLi5iMzllMGYxY2ZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9sYXVuY2hlci5jCkBAIC0xMDcyLDcgKzEwNzIsNyBAQCBJc0xvZ2ljYWxM YXVuY2hlcih2b2lkKQogRGF0dW0KIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5DVElP Tl9BUkdTKQogewotI2RlZmluZSBQR19TVEFUX0dFVF9TVUJTQ1JJUFRJT05fQ09MUwk4CisjZGVm aW5lIFBHX1NUQVRfR0VUX1NVQlNDUklQVElPTl9DT0xTCTkKIAlPaWQJCQlzdWJpZCA9IFBHX0FS R0lTTlVMTCgwKSA/IEludmFsaWRPaWQgOiBQR19HRVRBUkdfT0lEKDApOwogCWludAkJCWk7CiAJ UmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRp bmZvOwpAQCAtMTA5OCwxMCArMTA5OCw2IEBAIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19G VU5DVElPTl9BUkdTKQogCQlpZiAoT2lkSXNWYWxpZChzdWJpZCkgJiYgd29ya2VyLnN1YmlkICE9 IHN1YmlkKQogCQkJY29udGludWU7CiAKLQkJLyogU2tpcCBpZiB0aGlzIGlzIGEgcGFyYWxsZWwg YXBwbHkgd29ya2VyICovCi0JCWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIoJndvcmtlcikpCi0J CQljb250aW51ZTsKLQogCQl3b3JrZXJfcGlkID0gd29ya2VyLnByb2MtPnBpZDsKIAogCQl2YWx1 ZXNbMF0gPSBPYmplY3RJZEdldERhdHVtKHdvcmtlci5zdWJpZCk7CkBAIC0xMTEwLDI2ICsxMTA2 LDMyIEBAIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5DVElPTl9BUkdTKQogCQllbHNl CiAJCQludWxsc1sxXSA9IHRydWU7CiAJCXZhbHVlc1syXSA9IEludDMyR2V0RGF0dW0od29ya2Vy X3BpZCk7Ci0JCWlmIChYTG9nUmVjUHRySXNJbnZhbGlkKHdvcmtlci5sYXN0X2xzbikpCisKKwkJ aWYgKHdvcmtlci5hcHBseV9sZWFkZXJfcGlkID09IEludmFsaWRQaWQpCiAJCQludWxsc1szXSA9 IHRydWU7CiAJCWVsc2UKLQkJCXZhbHVlc1szXSA9IExTTkdldERhdHVtKHdvcmtlci5sYXN0X2xz bik7Ci0JCWlmICh3b3JrZXIubGFzdF9zZW5kX3RpbWUgPT0gMCkKKwkJCXZhbHVlc1szXSA9IElu dDMyR2V0RGF0dW0od29ya2VyLmFwcGx5X2xlYWRlcl9waWQpOworCisJCWlmIChYTG9nUmVjUHRy SXNJbnZhbGlkKHdvcmtlci5sYXN0X2xzbikpCiAJCQludWxsc1s0XSA9IHRydWU7CiAJCWVsc2UK LQkJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0od29ya2VyLmxhc3Rfc2VuZF90aW1l KTsKLQkJaWYgKHdvcmtlci5sYXN0X3JlY3ZfdGltZSA9PSAwKQorCQkJdmFsdWVzWzRdID0gTFNO R2V0RGF0dW0od29ya2VyLmxhc3RfbHNuKTsKKwkJaWYgKHdvcmtlci5sYXN0X3NlbmRfdGltZSA9 PSAwKQogCQkJbnVsbHNbNV0gPSB0cnVlOwogCQllbHNlCi0JCQl2YWx1ZXNbNV0gPSBUaW1lc3Rh bXBUekdldERhdHVtKHdvcmtlci5sYXN0X3JlY3ZfdGltZSk7Ci0JCWlmIChYTG9nUmVjUHRySXNJ bnZhbGlkKHdvcmtlci5yZXBseV9sc24pKQorCQkJdmFsdWVzWzVdID0gVGltZXN0YW1wVHpHZXRE YXR1bSh3b3JrZXIubGFzdF9zZW5kX3RpbWUpOworCQlpZiAod29ya2VyLmxhc3RfcmVjdl90aW1l ID09IDApCiAJCQludWxsc1s2XSA9IHRydWU7CiAJCWVsc2UKLQkJCXZhbHVlc1s2XSA9IExTTkdl dERhdHVtKHdvcmtlci5yZXBseV9sc24pOwotCQlpZiAod29ya2VyLnJlcGx5X3RpbWUgPT0gMCkK KwkJCXZhbHVlc1s2XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0od29ya2VyLmxhc3RfcmVjdl90aW1l KTsKKwkJaWYgKFhMb2dSZWNQdHJJc0ludmFsaWQod29ya2VyLnJlcGx5X2xzbikpCiAJCQludWxs c1s3XSA9IHRydWU7CiAJCWVsc2UKLQkJCXZhbHVlc1s3XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0o d29ya2VyLnJlcGx5X3RpbWUpOworCQkJdmFsdWVzWzddID0gTFNOR2V0RGF0dW0od29ya2VyLnJl cGx5X2xzbik7CisJCWlmICh3b3JrZXIucmVwbHlfdGltZSA9PSAwKQorCQkJbnVsbHNbOF0gPSB0 cnVlOworCQllbHNlCisJCQl2YWx1ZXNbOF0gPSBUaW1lc3RhbXBUekdldERhdHVtKHdvcmtlci5y ZXBseV90aW1lKTsKIAogCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwg cnNpbmZvLT5zZXREZXNjLAogCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CmluZGV4IDdiZTlhNTAxNDcuLjYzNGM2ZDQ3NTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdApAQCAtNTQyNiw5ICs1NDI2LDkgQEAKICAgcHJvbmFtZSA9PiAncGdfc3RhdF9nZXRfc3Vi c2NyaXB0aW9uJywgcHJvcm93cyA9PiAnMTAnLCBwcm9pc3N0cmljdCA9PiAnZicsCiAgIHByb3Jl dHNldCA9PiAndCcsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcGFyYWxsZWwgPT4gJ3InLAogICBw cm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnb2lkJywKLSAgcHJvYWxsYXJn dHlwZXMgPT4gJ3tvaWQsb2lkLG9pZCxpbnQ0LHBnX2xzbix0aW1lc3RhbXB0eix0aW1lc3RhbXB0 eixwZ19sc24sdGltZXN0YW1wdHp9JywKLSAgcHJvYXJnbW9kZXMgPT4gJ3tpLG8sbyxvLG8sbyxv LG8sb30nLAotICBwcm9hcmduYW1lcyA9PiAne3N1YmlkLHN1YmlkLHJlbGlkLHBpZCxyZWNlaXZl ZF9sc24sbGFzdF9tc2dfc2VuZF90aW1lLGxhc3RfbXNnX3JlY2VpcHRfdGltZSxsYXRlc3RfZW5k X2xzbixsYXRlc3RfZW5kX3RpbWV9JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3tvaWQsb2lkLG9p ZCxpbnQ0LGludDQscGdfbHNuLHRpbWVzdGFtcHR6LHRpbWVzdGFtcHR6LHBnX2xzbix0aW1lc3Rh bXB0en0nLAorICBwcm9hcmdtb2RlcyA9PiAne2ksbyxvLG8sbyxvLG8sbyxvLG99JywKKyAgcHJv YXJnbmFtZXMgPT4gJ3tzdWJpZCxzdWJpZCxyZWxpZCxwaWQsYXBwbHlfbGVhZGVyX3BpZCxyZWNl aXZlZF9sc24sbGFzdF9tc2dfc2VuZF90aW1lLGxhc3RfbXNnX3JlY2VpcHRfdGltZSxsYXRlc3Rf ZW5kX2xzbixsYXRlc3RfZW5kX3RpbWV9JywKICAgcHJvc3JjID0+ICdwZ19zdGF0X2dldF9zdWJz Y3JpcHRpb24nIH0sCiB7IG9pZCA9PiAnMjAyNicsIGRlc2NyID0+ICdzdGF0aXN0aWNzOiBjdXJy ZW50IGJhY2tlbmQgUElEJywKICAgcHJvbmFtZSA9PiAncGdfYmFja2VuZF9waWQnLCBwcm92b2xh dGlsZSA9PiAncycsIHByb3BhcmFsbGVsID0+ICdyJywKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxl cy5vdXQKaW5kZXggZmI5ZjkzNmQ0My4uN2U2ZWE2MGY5ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ydWxlcy5vdXQKQEAgLTIwOTQsNiArMjA5NCw3IEBAIHBnX3N0YXRfc3NsfCBTRUxFQ1Qgcy5w aWQsCiBwZ19zdGF0X3N1YnNjcmlwdGlvbnwgU0VMRUNUIHN1Lm9pZCBBUyBzdWJpZCwKICAgICBz dS5zdWJuYW1lLAogICAgIHN0LnBpZCwKKyAgICBzdC5hcHBseV9sZWFkZXJfcGlkLAogICAgIHN0 LnJlbGlkLAogICAgIHN0LnJlY2VpdmVkX2xzbiwKICAgICBzdC5sYXN0X21zZ19zZW5kX3RpbWUs CkBAIC0yMTAxLDcgKzIxMDIsNyBAQCBwZ19zdGF0X3N1YnNjcmlwdGlvbnwgU0VMRUNUIHN1Lm9p ZCBBUyBzdWJpZCwKICAgICBzdC5sYXRlc3RfZW5kX2xzbiwKICAgICBzdC5sYXRlc3RfZW5kX3Rp bWUKICAgIEZST00gKHBnX3N1YnNjcmlwdGlvbiBzdQotICAgICBMRUZUIEpPSU4gcGdfc3RhdF9n ZXRfc3Vic2NyaXB0aW9uKE5VTEw6Om9pZCkgc3Qoc3ViaWQsIHJlbGlkLCBwaWQsIHJlY2VpdmVk X2xzbiwgbGFzdF9tc2dfc2VuZF90aW1lLCBsYXN0X21zZ19yZWNlaXB0X3RpbWUsIGxhdGVzdF9l bmRfbHNuLCBsYXRlc3RfZW5kX3RpbWUpIE9OICgoc3Quc3ViaWQgPSBzdS5vaWQpKSk7CisgICAg IExFRlQgSk9JTiBwZ19zdGF0X2dldF9zdWJzY3JpcHRpb24oTlVMTDo6b2lkKSBzdChzdWJpZCwg cmVsaWQsIHBpZCwgYXBwbHlfbGVhZGVyX3BpZCwgcmVjZWl2ZWRfbHNuLCBsYXN0X21zZ19zZW5k X3RpbWUsIGxhc3RfbXNnX3JlY2VpcHRfdGltZSwgbGF0ZXN0X2VuZF9sc24sIGxhdGVzdF9lbmRf dGltZSkgT04gKChzdC5zdWJpZCA9IHN1Lm9pZCkpKTsKIHBnX3N0YXRfc3Vic2NyaXB0aW9uX3N0 YXRzfCBTRUxFQ1Qgc3Muc3ViaWQsCiAgICAgcy5zdWJuYW1lLAogICAgIHNzLmFwcGx5X2Vycm9y X2NvdW50LAotLSAKMi4yMy4wLndpbmRvd3MuMQoK --_006_OS0PR01MB5716087C537FA8311F208B6094F59OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v73-0001-Perform-apply-of-large-transactions-by-parallel-.patch" Content-Description: v73-0001-Perform-apply-of-large-transactions-by-parallel-.patch Content-Disposition: attachment; filename="v73-0001-Perform-apply-of-large-transactions-by-parallel-.patch"; size=270946; creation-date="Wed, 04 Jan 2023 10:54:25 GMT"; modification-date="Wed, 04 Jan 2023 10:55:31 GMT" Content-Transfer-Encoding: base64 RnJvbSA1MWM0OGIzOTE2M2RmMDdkOGQ0YTNlZGU0Y2NjODBmYjc2ZWJmNTRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY3MyAxLzVdIFBlcmZvcm0gYXBwbHkgb2YgbGFyZ2UgdHJhbnNhY3Rpb25zIGJ5IHBhcmFsbGVs CiB3b3JrZXJzLgoKQ3VycmVudGx5LCBmb3IgbGFyZ2UgdHJhbnNhY3Rpb25zLCB0aGUgcHVibGlz aGVyIHNlbmRzIHRoZSBkYXRhIGluCm11bHRpcGxlIHN0cmVhbXMgKGNoYW5nZXMgZGl2aWRlZCBp bnRvIGNodW5rcyBkZXBlbmRpbmcgdXBvbgpsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtKSwgYW5k IHRoZW4gb24gdGhlIHN1YnNjcmliZXItc2lkZSwgdGhlIGFwcGx5CndvcmtlciB3cml0ZXMgdGhl IGNoYW5nZXMgaW50byB0ZW1wb3JhcnkgZmlsZXMgYW5kIG9uY2UgaXQgcmVjZWl2ZXMgdGhlCmNv bW1pdCwgaXQgcmVhZHMgZnJvbSB0aG9zZSBmaWxlcyBhbmQgYXBwbGllcyB0aGUgZW50aXJlIHRy YW5zYWN0aW9uLiBUbwppbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzdWNoIHRyYW5zYWN0aW9u cywgd2UgY2FuIGluc3RlYWQgYWxsb3cgdGhlbSB0bwpiZSBhcHBsaWVkIHZpYSBwYXJhbGxlbCB3 b3JrZXJzLgoKSW4gdGhpcyBhcHByb2FjaCwgd2UgYXNzaWduIGEgbmV3IHBhcmFsbGVsIGFwcGx5 IHdvcmtlciAoaWYgYXZhaWxhYmxlKSBhcwpzb29uIGFzIHRoZSB4YWN0J3MgZmlyc3Qgc3RyZWFt IGlzIHJlY2VpdmVkIGFuZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgp3aWxsIHNlbmQgY2hhbmdl cyB0byB0aGlzIG5ldyB3b3JrZXIgdmlhIHNoYXJlZCBtZW1vcnkuIFRoZSBwYXJhbGxlbCBhcHBs eQp3b3JrZXIgd2lsbCBkaXJlY3RseSBhcHBseSB0aGUgY2hhbmdlIGluc3RlYWQgb2Ygd3JpdGlu ZyBpdCB0byB0ZW1wb3JhcnkKZmlsZXMuIEhvd2V2ZXIsIGlmIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyIHRpbWVzIG91dCB3aGlsZSBhdHRlbXB0aW5nIHRvCnNlbmQgYSBtZXNzYWdlIHRvIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIsIGl0IHdpbGwgc3dpdGNoIHRvCiJwYXJ0aWFsIHNlcmlhbGl6 ZSIgbW9kZSAtICBpbiB0aGlzIG1vZGUsIHRoZSBsZWFkZXIgc2VyaWFsaXplcyBhbGwKcmVtYWlu aW5nIGNoYW5nZXMgdG8gYSBmaWxlIGFuZCBub3RpZmllcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VycyB0bwpyZWFkIGFuZCBhcHBseSB0aGVtIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9u LiBXZSB1c2UgYSBub24tYmxvY2tpbmcKd2F5IHRvIHNlbmQgdGhlIG1lc3NhZ2VzIGZyb20gdGhl IGxlYWRlciBhcHBseSB3b3JrZXIgdG8gdGhlIHBhcmFsbGVsCmFwcGx5IHRvIGF2b2lkIGRlYWRs b2Nrcy4gV2Uga2VlcCB0aGlzIHBhcmFsbGVsIGFwcGx5IGFzc2lnbmVkIHRpbGwgdGhlCnRyYW5z YWN0aW9uIGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvciB0aGUgd29ya2VyIHRv IGZpbmlzaCBhdApjb21taXQuIFRoaXMgcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZv aWQgd3JpdGluZyB0byBhbmQgcmVhZGluZwpmcm9tIGZpbGVzIGluIG1vc3QgY2FzZXMuIFdlIHN0 aWxsIG5lZWQgdG8gc3BpbGwgaWYgdGhlcmUgaXMgbm8gd29ya2VyCmF2YWlsYWJsZS4KClRoaXMg cGF0Y2ggYWxzbyBleHRlbmRzIHRoZSBTVUJTQ1JJUFRJT04gJ3N0cmVhbWluZycgcGFyYW1ldGVy IHNvIHRoYXQgdGhlCnVzZXIgY2FuIGNvbnRyb2wgd2hldGhlciB0byBhcHBseSB0aGUgc3RyZWFt aW5nIHRyYW5zYWN0aW9uIGluIGEgcGFyYWxsZWwKYXBwbHkgd29ya2VyIG9yIHNwaWxsIHRoZSBj aGFuZ2UgdG8gZGlzay4gVGhlIHVzZXIgY2FuIHNldCB0aGUgc3RyZWFtaW5nCnBhcmFtZXRlciB0 byAnb24vb2ZmJywgb3IgJ3BhcmFsbGVsJy4gVGhlIHBhcmFtZXRlciB2YWx1ZSAncGFyYWxsZWwn IG1lYW5zCnRoZSBzdHJlYW1pbmcgd2lsbCBiZSBhcHBsaWVkIHZpYSBhIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciwgaWYgYXZhaWxhYmxlLgpUaGUgcGFyYW1ldGVyIHZhbHVlICdvbicgbWVhbnMgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHNwaWxsZWQKdG8gZGlzay4gVGhlIGRlZmF1 bHQgdmFsdWUgaXMgJ29mZicgKHNhbWUgYXMgY3VycmVudCBiZWhhdmlvdXIpLgoKSW4gYWRkaXRp b24sIHRoZSBwYXRjaCBleHRlbmRzIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIFNUUkVBTV9BQk9S VAptZXNzYWdlIHNvIHRoYXQgYWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGNhbiBhbHNvIGJlIHNl bnQgd2hpY2ggY2FuIGJlCnVzZWQgdG8gdXBkYXRlIHRoZSByZXBsaWNhdGlvbiBvcmlnaW4gaW4g cGFyYWxsZWwgYXBwbHkgd29ya2VyIHdoZW4gdGhlCnN0cmVhbWluZyB0cmFuc2FjdGlvbiBpcyBh Ym9ydGVkLiBCZWNhdXNlIHRoaXMgbWVzc2FnZSBleHRlbnNpb24gaXMgbmVlZGVkCnRvIHN1cHBv cnQgcGFyYWxsZWwgc3RyZWFtaW5nLCBwYXJhbGxlbCBzdHJlYW1pbmcgaXMgbm90IHN1cHBvcnRl ZCBmb3IKcHVibGljYXRpb25zIG9uIHNlcnZlcnMgPCBQRzE2LgoKTm90ZTogU2luY2UgdGhlIGZp ZWxkICdzdWJzdHJlYW0nIG9mIGNhdGFsb2cgJ3BnX3N1YnNjcmlwdGlvbicgaGFzIGJlZW4KZXhw YW5kZWQsIHdlIG5lZWQgYnVtcCBjYXRhbG9nIHZlcnNpb24uCgpBdXRob3I6IEhvdSBaaGlqaWUs IFdhbmcgd2VpLCBBbWl0IEthcGlsYSB3aXRoIGRlc2lnbiBpbnB1dHMgZnJvbSBTYXdhZGEgTWFz YWhpa28KUmV2aWV3ZWQtYnk6IFNhd2FkYSBNYXNhaGlrbywgUGV0ZXIgU21pdGgsIFNoaSB5dSwg RGlsaXAgS3VtYXIsIEt1cm9kYSBIYXlhdG8KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9DQUE0ZUsxK3d5TjZ6cGFIVWtDTG9yRVdOeDc1TUcweGhNd2NGaHZqcW0yS1VSWkVBR3dAbWFp bC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgICAg ICAgICAgfCAgIDExICstCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAg ICAgICAgfCAgIDI4ICstCiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAg ICAgICAgfCAgIDIyICstCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAg ICAgICAgfCAgICA1ICsKIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAgICAgICAgICAg ICAgICB8ICAgMjkgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21s ICAgICB8ICAgMjQgKy0KIGRvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAg ICAgICB8ICAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyAgICAgICAg ICAgICB8ICAgMjQgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAg ICAgICB8ICAgNjcgKy0KIHNyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYyAgICAgICAgICAgICAgICAg ICAgICB8ICAgMTggKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyAgICAgICAg ICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYyAgICAgICAg ICAgIHwgICAgNSArLQogLi4uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jICAg ICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAg ICAgIHwgICAgMSArCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2Vy LmMgfCAxNjIyICsrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RlY29kZS5jICAgICAgfCAgICA1ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMgICAgfCAgMjIwICsrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9tZXNvbi5idWlsZCAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL29yaWdpbi5jICAgICAgfCAgIDI2ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Byb3RvLmMgICAgICAgfCAgIDM3ICstCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9y ZGVyYnVmZmVyLmMgICAgICAgfCAgICA1ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jICAgfCAgIDI1ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jICAgICAgfCAxMzgwICsrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAgfCAgIDIyICstCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9sbWdyLmMgICAgICAgICAgICAgICB8ICAgNDYgKwogc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50LmMgICAgICAgfCAgICA2ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9sb2NrZnVuY3MuYyAgICAgICAgICAgICB8ICAgMTYgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUu YyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3N1YnNjcmlwdGlvbi5oICAgICAgICAgfCAgIDIxICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9z dWJzY3JpcHRpb25jbWRzLmggICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2xvZ2ljYWxsYXVuY2hlci5oICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmggICAgICAgIHwgICAyOCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHdvcmtlci5oICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v cmlnaW4uaCAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9w Z291dHB1dC5oICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmggICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 YWxyZWNlaXZlci5oICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaCAgICAgfCAgMjI3ICsrLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdy LmggICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2su aCAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nz aWduYWwuaCAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZl bnQuaCAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z dWJzY3JpcHRpb24ub3V0ICAgIHwgICA0NiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2Ny aXB0aW9uLnNxbCAgICAgICAgIHwgICAgNiArLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1 X3N0cmVhbS5wbCAgICAgICAgIHwgIDI3NCArKy0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx Nl9zdHJlYW1fc3VieGFjdC5wbCB8ICAxMzAgKy0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx N19zdHJlYW1fZGRsLnBsICAgICB8ICAgIDMgKwogLi4uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fi b3J0LnBsICAgICAgICAgICAgIHwgIDIyMCArKy0KIC4uLi90LzAxOV9zdHJlYW1fc3VieGFjdF9k ZGxfYWJvcnQucGwgICAgICAgICB8ICAgIDMgKwogLi4uL3N1YnNjcmlwdGlvbi90LzAyMl90d29w aGFzZV9jYXNjYWRlLnBsICAgIHwgICAgMiArCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3Bo YXNlX3N0cmVhbS5wbCAgICAgfCAgNTI1ICsrKy0tLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAgNyArCiA1NyBmaWxlcyBjaGFuZ2VkLCA0NDg2IGlu c2VydGlvbnMoKyksIDc1OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNn bWwKaW5kZXggOTMxNmI4MTFhYy4uYzFlNDA0ODA1NCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKQEAgLTc5MTMs MTEgKzc5MTMsMTYgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBj b3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKIAogICAgICA8cm93PgogICAg ICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9k ZWZpbml0aW9uIj4KLSAgICAgICA8c3RydWN0ZmllbGQ+c3Vic3RyZWFtPC9zdHJ1Y3RmaWVsZD4g PHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICA8c3RydWN0ZmllbGQ+c3Vic3RyZWFtPC9zdHJ1Y3Rm aWVsZD4gPHR5cGU+Y2hhcjwvdHlwZT4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAg ICAgIElmIHRydWUsIHRoZSBzdWJzY3JpcHRpb24gd2lsbCBhbGxvdyBzdHJlYW1pbmcgb2YgaW4t cHJvZ3Jlc3MKLSAgICAgICB0cmFuc2FjdGlvbnMKKyAgICAgICBDb250cm9scyBob3cgdG8gaGFu ZGxlIHRoZSBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zOgorICAgICAgIDxs aXRlcmFsPmY8L2xpdGVyYWw+ID0gZGlzYWxsb3cgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRy YW5zYWN0aW9ucywKKyAgICAgICA8bGl0ZXJhbD50PC9saXRlcmFsPiA9IHNwaWxsIHRoZSBjaGFu Z2VzIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyB0bworICAgICAgIGRpc2sgYW5kIGFwcGx5 IGF0IG9uY2UgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB0aGUKKyAgICAg ICBwdWJsaXNoZXIgYW5kIHJlY2VpdmVkIGJ5IHRoZSBzdWJzY3JpYmVyLAorICAgICAgIDxsaXRl cmFsPnA8L2xpdGVyYWw+ID0gYXBwbHkgY2hhbmdlcyBkaXJlY3RseSB1c2luZyBhIHBhcmFsbGVs IGFwcGx5CisgICAgICAgd29ya2VyIGlmIGF2YWlsYWJsZSAoc2FtZSBhcyAndCcgaWYgbm8gd29y a2VyIGlzIGF2YWlsYWJsZSkKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIApk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZp Zy5zZ21sCmluZGV4IDA1YjM4NjJkMDkuLmEzM2E5MzU3MGIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTQ5Njgs NyArNDk2OCw4IEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8 L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8bGlzdGl0ZW0+CiAg ICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNpZmllcyBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2Fs IHJlcGxpY2F0aW9uIHdvcmtlcnMuIFRoaXMgaW5jbHVkZXMKLSAgICAgICAgYm90aCBhcHBseSB3 b3JrZXJzIGFuZCB0YWJsZSBzeW5jaHJvbml6YXRpb24gd29ya2Vycy4KKyAgICAgICAgbGVhZGVy IGFwcGx5IHdvcmtlcnMsIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIGFuZCB0YWJsZSBzeW5jaHJv bml6YXRpb24KKyAgICAgICAgd29ya2Vycy4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+ CiAgICAgICAgIExvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VycyBhcmUgdGFrZW4gZnJvbSB0aGUg cG9vbCBkZWZpbmVkIGJ5CkBAIC01MDA4LDYgKzUwMDksMzEgQEAgQU5ZIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNs YXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtcGFyYWxsZWwtYXBwbHktd29ya2Vycy1wZXItc3Vic2Ny aXB0aW9uIiB4cmVmbGFiZWw9Im1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3Jp cHRpb24iPgorICAgICAgPHRlcm0+PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNf cGVyX3N1YnNjcmlwdGlvbjwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5tYXhfcGFyYWxsZWxfYXBwbHlf d29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRl cjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBwYXJhbGxl bCBhcHBseSB3b3JrZXJzIHBlciBzdWJzY3JpcHRpb24uIFRoaXMKKyAgICAgICAgcGFyYW1ldGVy IGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgcGFyYWxsZWxpc20gZm9yIHN0cmVhbWluZyBvZgorICAg ICAgICBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgd2l0aCBzdWJzY3JpcHRpb24gcGFyYW1ldGVy CisgICAgICAgIDxsaXRlcmFsPnN0cmVhbWluZyA9IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgICAg ICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXJzIGFyZSB0YWtlbiBmcm9tIHRoZSBwb29sIGRlZmluZWQgYnkKKyAgICAgICAgPHZhcm5hbWU+ bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT4uCisgICAgICAgPC9wYXJh PgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLiBUaGlzIHBh cmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jl c3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAgICAg ICBsaW5lLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgIDwvc2VjdDI+CiAKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwv bG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IDdiOWJiMDBlNWEuLjU0ZjQ4YmU4N2YgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTUwMSw2ICsxNTAxLDE2IEBA IENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4g InBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICBtaWdodCBub3QgdmlvbGF0ZSBhbnkgY29uc3Ry YWludC4gIFRoaXMgY2FuIGVhc2lseSBtYWtlIHRoZSBzdWJzY3JpYmVyCiAgICBpbmNvbnNpc3Rl bnQuCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gdGhlIHN0cmVhbWluZyBtb2RlIGlz IDxsaXRlcmFsPnBhcmFsbGVsPC9saXRlcmFsPiwgdGhlIGZpbmlzaCBMU04gb2YKKyAgIGZhaWxl ZCB0cmFuc2FjdGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIEluIHRoYXQgY2FzZSwgaXQgbWF5IGJl IG5lY2Vzc2FyeSB0bworICAgY2hhbmdlIHRoZSBzdHJlYW1pbmcgbW9kZSB0byA8bGl0ZXJhbD5v bjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiBhbmQKKyAgIGNhdXNlIHRoZSBz YW1lIGNvbmZsaWN0cyBhZ2FpbiBzbyB0aGUgZmluaXNoIExTTiBvZiB0aGUgZmFpbGVkIHRyYW5z YWN0aW9uIHdpbGwKKyAgIGJlIHdyaXR0ZW4gdG8gdGhlIHNlcnZlciBsb2cuIEZvciB0aGUgdXNh Z2Ugb2YgZmluaXNoIExTTiwgcGxlYXNlIHJlZmVyIHRvIDxsaW5rCisgICBsaW5rZW5kPSJzcWwt YWx0ZXJzdWJzY3JpcHRpb24iPjxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4KKyAgIFNL SVA8L2NvbW1hbmQ+PC9saW5rPi4KKyAgPC9wYXJhPgogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9 ImxvZ2ljYWwtcmVwbGljYXRpb24tcmVzdHJpY3Rpb25zIj4KQEAgLTE4MDksOCArMTgxOSw5IEBA IENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4g InBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAKICAgIDxwYXJhPgogICAgIDxsaW5rIGxpbmtlbmQ9 Imd1Yy1tYXgtbG9naWNhbC1yZXBsaWNhdGlvbi13b3JrZXJzIj48dmFybmFtZT5tYXhfbG9naWNh bF9yZXBsaWNhdGlvbl93b3JrZXJzPC92YXJuYW1lPjwvbGluaz4KLSAgICBtdXN0IGJlIHNldCB0 byBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgKGZvciBhcHBseSB3b3JrZXJz KSwgcGx1cwotICAgIHNvbWUgcmVzZXJ2ZSBmb3IgdGhlIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3 b3JrZXJzLgorICAgIG11c3QgYmUgc2V0IHRvIGF0IGxlYXN0IHRoZSBudW1iZXIgb2Ygc3Vic2Ny aXB0aW9ucyAoZm9yIGxlYWRlciBhcHBseQorICAgIHdvcmtlcnMpLCBwbHVzIHNvbWUgcmVzZXJ2 ZSBmb3IgdGhlIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3b3JrZXJzIGFuZAorICAgIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMuCiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgpAQCAtMTgyNyw2ICsxODM4 LDEzIEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBv cmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICAgIHN1YnNjcmlwdGlvbiBpbml0aWFs aXphdGlvbiBvciB3aGVuIG5ldyB0YWJsZXMgYXJlIGFkZGVkLgogICAgPC9wYXJhPgogCisgICA8 cGFyYT4KKyAgICA8bGluayBsaW5rZW5kPSJndWMtbWF4LXBhcmFsbGVsLWFwcGx5LXdvcmtlcnMt cGVyLXN1YnNjcmlwdGlvbiI+PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVy X3N1YnNjcmlwdGlvbjwvdmFybmFtZT48L2xpbms+CisgICAgIGNvbnRyb2xzIHRoZSBhbW91bnQg b2YgcGFyYWxsZWxpc20gZm9yIHN0cmVhbWluZyBvZiBpbi1wcm9ncmVzcworICAgICB0cmFuc2Fj dGlvbnMgd2l0aCBzdWJzY3JpcHRpb24gcGFyYW1ldGVyCisgICAgIDxsaXRlcmFsPnN0cmVhbWlu ZyA9IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgIDwvcGFyYT4KKwogICAgPHBhcmE+CiAgICAgTG9n aWNhbCByZXBsaWNhdGlvbiB3b3JrZXJzIGFyZSBhbHNvIGFmZmVjdGVkIGJ5CiAgICAgPGxpbmsg bGlua2VuZD0iZ3VjLXdhbC1yZWNlaXZlci10aW1lb3V0Ij48dmFybmFtZT53YWxfcmVjZWl2ZXJf dGltZW91dDwvdmFybmFtZT48L2xpbms+LApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL21vbml0 b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKaW5kZXggNWJjYmEwZmRl Yy4uY2YyMjBjM2JjYiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCkBAIC0xODU4LDYgKzE4NTgsMTEgQEAg cG9zdGdyZXMgICAyNzA5MyAgMC4wICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6 MzQgICAwOjAwIHBvc3RncmVzOiBzZXIKICAgICAgIDxlbnRyeT48bGl0ZXJhbD5hZHZpc29yeTwv bGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBhbiBhZHZp c29yeSB1c2VyIGxvY2suPC9lbnRyeT4KICAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8 ZW50cnk+PGxpdGVyYWw+YXBwbHl0cmFuc2FjdGlvbjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg PGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBhIGxvY2sgb24gYSByZW1vdGUgdHJhbnNhY3Rpb24g YmVpbmcgYXBwbGllZAorICAgICAgYnkgYSBsb2dpY2FsIHJlcGxpY2F0aW9uIHN1YnNjcmliZXIu PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnk+PGxpdGVyYWw+ ZXh0ZW5kPC9saXRlcmFsPjwvZW50cnk+CiAgICAgICA8ZW50cnk+V2FpdGluZyB0byBleHRlbmQg YSByZWxhdGlvbi48L2VudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNn bWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAppbmRleCAwMzMxMmUwN2UyLi40MzllZjY3 NWYzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvcHJvdG9jb2wuc2dtbApAQCAtMzEwMyw3ICszMTAzLDcgQEAgcHNxbCAiZGJuYW1lPXBv c3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAgICAg PGxpc3RpdGVtPgogICAgICAgPHBhcmE+CiAgICAgICAgUHJvdG9jb2wgdmVyc2lvbi4gQ3VycmVu dGx5IHZlcnNpb25zIDxsaXRlcmFsPjE8L2xpdGVyYWw+LCA8bGl0ZXJhbD4yPC9saXRlcmFsPiwK LSAgICAgICBhbmQgPGxpdGVyYWw+MzwvbGl0ZXJhbD4gYXJlIHN1cHBvcnRlZC4KKyAgICAgICA8 bGl0ZXJhbD4zPC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPjQ8L2xpdGVyYWw+IGFyZSBzdXBwb3J0 ZWQuCiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KICAgICAgICBWZXJzaW9uIDxsaXRlcmFs PjI8L2xpdGVyYWw+IGlzIHN1cHBvcnRlZCBvbmx5IGZvciBzZXJ2ZXIgdmVyc2lvbiAxNApAQCAt MzExMyw2ICszMTEzLDExIEBAIHBzcWwgImRibmFtZT1wb3N0Z3JlcyByZXBsaWNhdGlvbj1kYXRh YmFzZSIgLWMgIklERU5USUZZX1NZU1RFTTsiCiAgICAgICAgVmVyc2lvbiA8bGl0ZXJhbD4zPC9s aXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVyIHZlcnNpb24gMTUKICAgICAgICBh bmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtaW5nIG9mIHR3by1waGFzZSBjb21taXRzLgog ICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVmVyc2lvbiA8bGl0ZXJhbD40PC9s aXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVyIHZlcnNpb24gMTYKKyAgICAgICBh bmQgYWJvdmUsIGFuZCBpdCBhbGxvd3Mgc3RyZWFtcyBvZiBsYXJnZSBpbi1wcm9ncmVzcyB0cmFu c2FjdGlvbnMgdG8KKyAgICAgICBiZSBhcHBsaWVkIGluIHBhcmFsbGVsLgorICAgICAgPC9wYXJh PgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVudHJ5PgogCkBAIC02ODgzLDYgKzY4 ODgsMjggQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFiYXNlIiAtYyAi SURFTlRJRllfU1lTVEVNOyIKICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVy bT5JbnQ2NCAoWExvZ1JlY1B0cik8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8 cGFyYT4KKyAgICAgICAgIFRoZSBMU04gb2YgdGhlIGFib3J0LiBUaGlzIGZpZWxkIGlzIGF2YWls YWJsZSBzaW5jZSBwcm90b2NvbCB2ZXJzaW9uCisgICAgICAgICA0LgorICAgICAgICA8L3BhcmE+ CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPkludDY0IChUaW1lc3RhbXBUeik8L3Rlcm0+CisgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIEFib3J0IHRpbWVzdGFtcCBv ZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSB2YWx1ZSBpcyBpbiBudW1iZXIKKyAgICAgICAgIG9mIG1p Y3Jvc2Vjb25kcyBzaW5jZSBQb3N0Z3JlU1FMIGVwb2NoICgyMDAwLTAxLTAxKS4gVGhpcyBmaWVs ZCBpcworICAgICAgICAgYXZhaWxhYmxlIHNpbmNlIHByb3RvY29sIHZlcnNpb24gNC4KKyAgICAg ICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+ CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCmluZGV4IDkwYmQ3MDA1 MGQuLmViYTcyYzZhZjYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNj cmlwdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5z Z21sCkBAIC0yMjgsMTMgKzIyOCwyOSBAQCBDUkVBVEUgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5zdWJzY3JpcHRpb25fbmFtZTwvcmVwbGFjZWFibAogICAgICAg IDwvdmFybGlzdGVudHJ5PgogCiAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+ PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFsPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pPC90ZXJt PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVyYWw+ICg8dHlwZT5lbnVt PC90eXBlPik8L3Rlcm0+CiAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgIDxwYXJhPgogICAg ICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jl c3MgdHJhbnNhY3Rpb25zCi0gICAgICAgICAgZm9yIHRoaXMgc3Vic2NyaXB0aW9uLiAgQnkgZGVm YXVsdCwgYWxsIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGFyZSBmdWxseSBkZWNvZGVkIG9uIHRo ZSBwdWJsaXNoZXIgYW5kIG9ubHkgdGhlbiBzZW50IHRvIHRoZQotICAgICAgICAgIHN1YnNjcmli ZXIgYXMgYSB3aG9sZS4KKyAgICAgICAgICBmb3IgdGhpcyBzdWJzY3JpcHRpb24uICBUaGUgZGVm YXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD5vZmY8L2xpdGVyYWw+LAorICAgICAgICAgIG1lYW5pbmcg YWxsIHRyYW5zYWN0aW9ucyBhcmUgZnVsbHkgZGVjb2RlZCBvbiB0aGUgcHVibGlzaGVyIGFuZCBv bmx5CisgICAgICAgICAgdGhlbiBzZW50IHRvIHRoZSBzdWJzY3JpYmVyIGFzIGEgd2hvbGUuCisg ICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHNldCB0byA8 bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIHRoZSBpbmNvbWluZyBjaGFuZ2VzIGFyZSB3cml0dGVuIHRv CisgICAgICAgICAgdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgb25seSBhZnRlciB0 aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAgICAgICBjb21taXR0ZWQgb24gdGhlIHB1Ymxpc2hlciBh bmQgcmVjZWl2ZWQgYnkgdGhlIHN1YnNjcmliZXIuCisgICAgICAgICA8L3BhcmE+CisKKyAgICAg ICAgIDxwYXJhPgorICAgICAgICAgIElmIHNldCB0byA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJh bD4sIGluY29taW5nIGNoYW5nZXMgYXJlIGRpcmVjdGx5CisgICAgICAgICAgYXBwbGllZCB2aWEg b25lIG9mIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLCBpZiBhdmFpbGFibGUuIElmIG5vCisg ICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGZyZWUgdG8gaGFuZGxlIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbnMgdGhlbgorICAgICAgICAgIHRoZSBjaGFuZ2VzIGFyZSB3cml0dGVuIHRv IHRlbXBvcmFyeSBmaWxlcyBhbmQgYXBwbGllZCBhZnRlciB0aGUKKyAgICAgICAgICB0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQuIE5vdGUgdGhhdCBpZiBhbiBlcnJvciBoYXBwZW5zIGluIGEKKyAg ICAgICAgICBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIHRoZSBmaW5pc2ggTFNOIG9mIHRoZSByZW1v dGUgdHJhbnNhY3Rpb24KKyAgICAgICAgICBtaWdodCBub3QgYmUgcmVwb3J0ZWQgaW4gdGhlIHNl cnZlciBsb2cuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAg PC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNn bWwgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKaW5kZXggMTQzYWU1YjdiYi4uODQy OGVlNzg2NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtMTM3OSw4ICsxMzc5LDkgQEAKICAg ICAgICA8bGl0ZXJhbD52aXJ0dWFseGlkPC9saXRlcmFsPiwKICAgICAgICA8bGl0ZXJhbD5zcGVj dG9rZW48L2xpdGVyYWw+LAogICAgICAgIDxsaXRlcmFsPm9iamVjdDwvbGl0ZXJhbD4sCi0gICAg ICAgPGxpdGVyYWw+dXNlcmxvY2s8L2xpdGVyYWw+LCBvcgotICAgICAgIDxsaXRlcmFsPmFkdmlz b3J5PC9saXRlcmFsPi4KKyAgICAgICA8bGl0ZXJhbD51c2VybG9jazwvbGl0ZXJhbD4sCisgICAg ICAgPGxpdGVyYWw+YWR2aXNvcnk8L2xpdGVyYWw+LCBvcgorICAgICAgIDxsaXRlcmFsPmFwcGx5 dHJhbnNhY3Rpb248L2xpdGVyYWw+LgogICAgICAgIChTZWUgYWxzbyA8eHJlZiBsaW5rZW5kPSJ3 YWl0LWV2ZW50LWxvY2stdGFibGUiLz4uKQogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwv cm93PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IDI0MjIxNTQyZTcuLmZjZDJjMTk4 YTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKQEAgLTE3MTIsNiArMTcxMiw3IEBAIFJl Y29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJaW50CQkJbmNoaWxkcmVuOwog CVRyYW5zYWN0aW9uSWQgKmNoaWxkcmVuOwogCVRpbWVzdGFtcFR6IHhhY3RfdGltZTsKKwlib29s CQlyZXBsb3JpZ2luOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlbid0IGJlZW4gYXNzaWduZWQgYW4g WElELCBub2JvZHkgd2lsbCBjYXJlIHdoZXRoZXIgd2UgYWJvcnRlZApAQCAtMTc0Miw2ICsxNzQz LDEzIEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJCWVsb2coUEFO SUMsICJjYW5ub3QgYWJvcnQgdHJhbnNhY3Rpb24gJXUsIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRl ZCIsCiAJCQkgeGlkKTsKIAorCS8qCisJICogQXJlIHdlIHVzaW5nIHRoZSByZXBsaWNhdGlvbiBv cmlnaW5zIGZlYXR1cmU/ICBPciwgaW4gb3RoZXIgd29yZHMsIGFyZQorCSAqIHdlIHJlcGxheWlu ZyByZW1vdGUgYWN0aW9ucz8KKwkgKi8KKwlyZXBsb3JpZ2luID0gKHJlcGxvcmlnaW5fc2Vzc2lv bl9vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklkICYmCisJCQkJICByZXBsb3JpZ2luX3Nlc3Np b25fb3JpZ2luICE9IERvTm90UmVwbGljYXRlSWQpOworCiAJLyogRmV0Y2ggdGhlIGRhdGEgd2Ug bmVlZCBmb3IgdGhlIGFib3J0IHJlY29yZCAqLwogCW5yZWxzID0gc21nckdldFBlbmRpbmdEZWxl dGVzKGZhbHNlLCAmcmVscyk7CiAJbmNoaWxkcmVuID0geGFjdEdldENvbW1pdHRlZENoaWxkcmVu KCZjaGlsZHJlbik7CkBAIC0xNzY1LDYgKzE3NzMsMTEgQEAgUmVjb3JkVHJhbnNhY3Rpb25BYm9y dChib29sIGlzU3ViWGFjdCkKIAkJCQkJICAgTXlYYWN0RmxhZ3MsIEludmFsaWRUcmFuc2FjdGlv bklkLAogCQkJCQkgICBOVUxMKTsKIAorCWlmIChyZXBsb3JpZ2luKQorCQkvKiBNb3ZlIExTTnMg Zm9yd2FyZCBmb3IgdGhpcyByZXBsaWNhdGlvbiBvcmlnaW4gKi8KKwkJcmVwbG9yaWdpbl9zZXNz aW9uX2FkdmFuY2UocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24sCisJCQkJCQkJCSAgIFhh Y3RMYXN0UmVjRW5kKTsKKwogCS8qCiAJICogUmVwb3J0IHRoZSBsYXRlc3QgYXN5bmMgYWJvcnQg TFNOLCBzbyB0aGF0IHRoZSBXQUwgd3JpdGVyIGtub3dzIHRvCiAJICogZmx1c2ggdGhpcyBhYm9y dC4gVGhlcmUncyBub3RoaW5nIHRvIGJlIGdhaW5lZCBieSBkZWxheWluZyB0aGlzLCBzaW5jZQpA QCAtNTg2NywxMSArNTg4MCwxMCBAQCBYYWN0TG9nQWJvcnRSZWNvcmQoVGltZXN0YW1wVHogYWJv cnRfdGltZSwKIAl9CiAKIAkvKgotCSAqIER1bXAgdHJhbnNhY3Rpb24gb3JpZ2luIGluZm9ybWF0 aW9uIG9ubHkgZm9yIGFib3J0IHByZXBhcmVkLiBXZSBuZWVkCi0JICogdGhpcyBkdXJpbmcgcmVj b3ZlcnkgdG8gdXBkYXRlIHRoZSByZXBsaWNhdGlvbiBvcmlnaW4gcHJvZ3Jlc3MuCisJICogRHVt cCB0cmFuc2FjdGlvbiBvcmlnaW4gaW5mb3JtYXRpb24uIFdlIG5lZWQgdGhpcyBkdXJpbmcgcmVj b3ZlcnkgdG8KKwkgKiB1cGRhdGUgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbiBwcm9ncmVzcy4KIAkg Ki8KLQlpZiAoKHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklk KSAmJgotCQlUcmFuc2FjdGlvbklkSXNWYWxpZCh0d29waGFzZV94aWQpKQorCWlmIChyZXBsb3Jp Z2luX3Nlc3Npb25fb3JpZ2luICE9IEludmFsaWRSZXBPcmlnaW5JZCkKIAl7CiAJCXhsX3hpbmZv LnhpbmZvIHw9IFhBQ1RfWElORk9fSEFTX09SSUdJTjsKIApAQCAtNTkyOCw4ICs1OTQwLDggQEAg WGFjdExvZ0Fib3J0UmVjb3JkKFRpbWVzdGFtcFR6IGFib3J0X3RpbWUsCiAJaWYgKHhsX3hpbmZv LnhpbmZvICYgWEFDVF9YSU5GT19IQVNfT1JJR0lOKQogCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFy ICopICgmeGxfb3JpZ2luKSwgc2l6ZW9mKHhsX3hhY3Rfb3JpZ2luKSk7CiAKLQlpZiAoVHJhbnNh Y3Rpb25JZElzVmFsaWQodHdvcGhhc2VfeGlkKSkKLQkJWExvZ1NldFJlY29yZEZsYWdzKFhMT0df SU5DTFVERV9PUklHSU4pOworCS8qIEluY2x1ZGUgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbiAqLwor CVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKIAogCXJldHVybiBYTG9n SW5zZXJ0KFJNX1hBQ1RfSUQsIGluZm8pOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0 aW9uY21kcy5jCmluZGV4IGI5YzVkZjc5NmYuLmJjMWIxOTg1OGMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKQEAgLTg0LDcgKzg0LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg U3ViT3B0cwogCWJvb2wJCWNvcHlfZGF0YTsKIAlib29sCQlyZWZyZXNoOwogCWJvb2wJCWJpbmFy eTsKLQlib29sCQlzdHJlYW1pbmc7CisJY2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCXR3b3BoYXNl OwogCWJvb2wJCWRpc2FibGVvbmVycjsKIAljaGFyCSAgICpvcmlnaW47CkBAIC0xMzgsNyArMTM4 LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpzdG10X29wdGlvbnMsCiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfQklOQVJZ KSkKIAkJb3B0cy0+YmluYXJ5ID0gZmFsc2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBT VUJPUFRfU1RSRUFNSU5HKSkKLQkJb3B0cy0+c3RyZWFtaW5nID0gZmFsc2U7CisJCW9wdHMtPnN0 cmVhbWluZyA9IExPR0lDQUxSRVBfU1RSRUFNX09GRjsKIAlpZiAoSXNTZXQoc3VwcG9ydGVkX29w dHMsIFNVQk9QVF9UV09QSEFTRV9DT01NSVQpKQogCQlvcHRzLT50d29waGFzZSA9IGZhbHNlOwog CWlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX0RJU0FCTEVfT05fRVJSKSkKQEAgLTI0 MSw3ICsyNDEsNyBAQCBwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsIExpc3QgKnN0bXRfb3B0aW9ucywKIAkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZl bCwgcHN0YXRlKTsKIAogCQkJb3B0cy0+c3BlY2lmaWVkX29wdHMgfD0gU1VCT1BUX1NUUkVBTUlO RzsKLQkJCW9wdHMtPnN0cmVhbWluZyA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQkJb3B0cy0+ c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFtaW5nTW9kZShkZWZlbCk7CiAJCX0KIAkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHdvX3BoYXNlIikgPT0gMCkKIAkJewpAQCAtNjI5LDcg KzYyOSw3IEBAIENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1 YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1Ym93 bmVyIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKG93bmVyKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJz Y3JpcHRpb25fc3ViZW5hYmxlZCAtIDFdID0gQm9vbEdldERhdHVtKG9wdHMuZW5hYmxlZCk7CiAJ dmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YmJpbmFyeSAtIDFdID0gQm9vbEdldERhdHVt KG9wdHMuYmluYXJ5KTsKLQl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0g MV0gPSBCb29sR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOworCXZhbHVlc1tBbnVtX3BnX3N1YnNj cmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9IENoYXJHZXREYXR1bShvcHRzLnN0cmVhbWluZyk7CiAJ dmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnR3b3BoYXNlc3RhdGUgLSAxXSA9CiAJCUNo YXJHZXREYXR1bShvcHRzLnR3b3BoYXNlID8KIAkJCQkJIExPR0lDQUxSRVBfVFdPUEhBU0VfU1RB VEVfUEVORElORyA6CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCBBbHRlclN1YnNjcmlwdGlvbihQYXJz ZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAkJCQlpZiAoSXNT ZXQob3B0cy5zcGVjaWZpZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlORykpCiAJCQkJewogCQkJCQl2 YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0gMV0gPQotCQkJCQkJQm9vbEdl dERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwkJCQkJCUNoYXJHZXREYXR1bShvcHRzLnN0cmVhbWlu Zyk7CiAJCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0g dHJ1ZTsKIAkJCQl9CiAKQEAgLTIxMjIsMyArMjEyMiw2MCBAQCBtZXJnZV9wdWJsaWNhdGlvbnMo TGlzdCAqb2xkcHVibGlzdCwgTGlzdCAqbmV3cHVibGlzdCwgYm9vbCBhZGRwdWIsIGNvbnN0IGNo YXIgKgogCiAJcmV0dXJuIG9sZHB1Ymxpc3Q7CiB9CisKKy8qCisgKiBFeHRyYWN0IHRoZSBzdHJl YW1pbmcgbW9kZSB2YWx1ZSBmcm9tIGEgRGVmRWxlbS4gIFRoaXMgaXMgbGlrZQorICogZGVmR2V0 Qm9vbGVhbigpIGJ1dCBhbHNvIGFjY2VwdHMgdGhlIHNwZWNpYWwgdmFsdWUgb2YgInBhcmFsbGVs Ii4KKyAqLworY2hhcgorZGVmR2V0U3RyZWFtaW5nTW9kZShEZWZFbGVtICpkZWYpCit7CisJLyoK KwkgKiBJZiBubyBwYXJhbWV0ZXIgdmFsdWUgZ2l2ZW4sIGFzc3VtZSAidHJ1ZSIgaXMgbWVhbnQu CisJICovCisJaWYgKCFkZWYtPmFyZykKKwkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09OOwor CisJLyoKKwkgKiBBbGxvdyAwLCAxLCAiZmFsc2UiLCAidHJ1ZSIsICJvZmYiLCAib24iIG9yICJw YXJhbGxlbCIuCisJICovCisJc3dpdGNoIChub2RlVGFnKGRlZi0+YXJnKSkKKwl7CisJCWNhc2Ug VF9JbnRlZ2VyOgorCQkJc3dpdGNoIChpbnRWYWwoZGVmLT5hcmcpKQorCQkJeworCQkJCWNhc2Ug MDoKKwkJCQkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09GRjsKKwkJCQljYXNlIDE6CisJCQkJ CXJldHVybiBMT0dJQ0FMUkVQX1NUUkVBTV9PTjsKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBvdGhl cndpc2UsIGVycm9yIG91dCBiZWxvdyAqLworCQkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJeworCQkJCWNoYXIJICAgKnN2YWwgPSBkZWZHZXRTdHJpbmcoZGVmKTsK KworCQkJCS8qCisJCQkJICogVGhlIHNldCBvZiBzdHJpbmdzIGFjY2VwdGVkIGhlcmUgc2hvdWxk IG1hdGNoIHVwIHdpdGggdGhlCisJCQkJICogZ3JhbW1hcidzIG9wdF9ib29sZWFuX29yX3N0cmlu ZyBwcm9kdWN0aW9uLgorCQkJCSAqLworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJmYWxz ZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib2ZmIikgPT0gMCkKKwkJCQkJ cmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09GRjsKKwkJCQlpZiAocGdfc3RyY2FzZWNtcChzdmFs LCAidHJ1ZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib24iKSA9PSAwKQor CQkJCQlyZXR1cm4gTE9HSUNBTFJFUF9TVFJFQU1fT047CisJCQkJaWYgKHBnX3N0cmNhc2VjbXAo c3ZhbCwgInBhcmFsbGVsIikgPT0gMCkKKwkJCQkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX1BB UkFMTEVMOworCQkJfQorCQkJYnJlYWs7CisJfQorCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCSBlcnJtc2coIiVzIHJlcXVpcmVzIGEgQm9v bGVhbiB2YWx1ZSBvciBcInBhcmFsbGVsXCIiLAorCQkJCQlkZWYtPmRlZm5hbWUpKSk7CisJcmV0 dXJuIExPR0lDQUxSRVBfU1RSRUFNX09GRjsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jIGIvc3JjL2JhY2tlbmQvbGlicHEv cHFtcS5jCmluZGV4IDc2NmVjYTk2NTcuLjM5ZTc3ZWY5NDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2xpYnBxL3BxbXEuYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMKQEAgLTEzLDEx ICsxMywxMyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9w YXJhbGxlbC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFm b3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtl ci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogCkBAIC0xNjIsOSArMTY0LDE5IEBAIG1xX3B1dG1lc3NhZ2UoY2hhciBtc2d0eXBlLCBj b25zdCBjaGFyICpzLCBzaXplX3QgbGVuKQogCQlyZXN1bHQgPSBzaG1fbXFfc2VuZHYocHFfbXFf aGFuZGxlLCBpb3YsIDIsIHRydWUsIHRydWUpOwogCiAJCWlmIChwcV9tcV9wYXJhbGxlbF9sZWFk ZXJfcGlkICE9IDApCi0JCQlTZW5kUHJvY1NpZ25hbChwcV9tcV9wYXJhbGxlbF9sZWFkZXJfcGlk LAotCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9NRVNTQUdFLAotCQkJCQkJICAgcHFfbXFfcGFy YWxsZWxfbGVhZGVyX2JhY2tlbmRfaWQpOworCQl7CisJCQlpZiAoSXNMb2dpY2FsUGFyYWxsZWxB cHBseVdvcmtlcigpKQorCQkJCVNlbmRQcm9jU2lnbmFsKHBxX21xX3BhcmFsbGVsX2xlYWRlcl9w aWQsCisJCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLAorCQkJCQkJCSAg IHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5kX2lkKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlB c3NlcnQoSXNQYXJhbGxlbFdvcmtlcigpKTsKKwkJCQlTZW5kUHJvY1NpZ25hbChwcV9tcV9wYXJh bGxlbF9sZWFkZXJfcGlkLAorCQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FHRSwKKwkJ CQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfYmFja2VuZF9pZCk7CisJCQl9CisJCX0KIAog CQlpZiAocmVzdWx0ICE9IFNITV9NUV9XT1VMRF9CTE9DSykKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dvcmtlci5jCmluZGV4IDZmOGUzNDQ1MDkuLmU3YTRhNzEzNmEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTEyOCw2ICsxMjgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 CiAJfSwKIAl7CiAJCSJBcHBseVdvcmtlck1haW4iLCBBcHBseVdvcmtlck1haW4KKwl9LAorCXsK KwkJIlBhcmFsbGVsQXBwbHlXb3JrZXJNYWluIiwgUGFyYWxsZWxBcHBseVdvcmtlck1haW4KIAl9 CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYwppbmRleCAyZWU4OTZmYzgwLi42ZDRi ZDc2YmY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50ZXJydXB0LmMKQEAgLTk4LDggKzk4LDkgQEAg U2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdChTSUdOQUxfQVJHUykKICAqIHNodXQgZG93biBhbmQg ZXhpdC4KICAqCiAgKiBUeXBpY2FsbHksIHRoaXMgaGFuZGxlciB3b3VsZCBiZSB1c2VkIGZvciBT SUdURVJNLCBidXQgc29tZSBwcm9jZXNzZXMgdXNlCi0gKiBvdGhlciBzaWduYWxzLiBJbiBwYXJ0 aWN1bGFyLCB0aGUgY2hlY2twb2ludGVyIGV4aXRzIG9uIFNJR1VTUjIsIGFuZCB0aGUKLSAqIFdB TCB3cml0ZXIgZXhpdHMgb24gZWl0aGVyIFNJR0lOVCBvciBTSUdURVJNLgorICogb3RoZXIgc2ln bmFscy4gSW4gcGFydGljdWxhciwgdGhlIGNoZWNrcG9pbnRlciBleGl0cyBvbiBTSUdVU1IyLCBh bmQgdGhlIFdBTAorICogd3JpdGVyIGFuZCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxl bCBhcHBseSB3b3JrZXIgZXhpdHMgb24gZWl0aGVyCisgKiBTSUdJTlQgb3IgU0lHVEVSTS4KICAq CiAgKiBTaHV0ZG93blJlcXVlc3RQZW5kaW5nIHNob3VsZCBiZSBjaGVja2VkIGF0IGEgY29udmVu aWVudCBwbGFjZSB3aXRoaW4gdGhlCiAgKiBtYWluIGxvb3AsIG9yIGVsc2UgdGhlIG1haW4gbG9v cCBzaG91bGQgY2FsbCBIYW5kbGVNYWluTG9vcEludGVycnVwdHMuCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZl ci5jCmluZGV4IDIxOWNkNzNiN2YuLmM0MGM2MjIwZGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5j CkBAIC00NDMsOSArNDQzLDkgQEAgbGlicHFyY3Zfc3RhcnRzdHJlYW1pbmcoV2FsUmVjZWl2ZXJD b25uICpjb25uLAogCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJwcm90b192ZXJzaW9uICcldSci LAogCQkJCQkJIG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwucHJvdG9fdmVyc2lvbik7CiAKLQkJaWYg KG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nICYmCi0JCQlQUXNlcnZlclZlcnNpb24o Y29ubi0+c3RyZWFtQ29ubikgPj0gMTQwMDAwKQotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y21kLCAiLCBzdHJlYW1pbmcgJ29uJyIpOworCQlpZiAob3B0aW9ucy0+cHJvdG8ubG9naWNhbC5z dHJlYW1pbmdfc3RyKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiLCBzdHJlYW1pbmcgJyVz JyIsCisJCQkJCQkJIG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0cik7CiAKIAkJ aWYgKG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwudHdvcGhhc2UgJiYKIAkJCVBRc2VydmVyVmVyc2lv bihjb25uLT5zdHJlYW1Db25uKSA+PSAxNTAwMDApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9NYWtlZmlsZQppbmRleCBjNGUyZmRlYjcxLi4yZGMyNWUzN2JiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAk KHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0g LUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKKwlhcHBseXBhcmFsbGVsd29ya2Vy Lm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iOTE4NDVlZDhlCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVs d29ya2VyLmMKQEAgLTAsMCArMSwxNjIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGFwcGx5 cGFyYWxsZWx3b3JrZXIuYworICoJICAgU3VwcG9ydCByb3V0aW5lcyBmb3IgYXBwbHlpbmcgeGFj dCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04K KyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2Vy LmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdG8gbGF1bmNoLCBzZXQgdXAs IGFuZCB0ZWFyZG93biBhIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXIgd2hpY2ggcmVjZWl2ZXMg dGhlIGNoYW5nZXMgZnJvbSB0aGUgbGVhZGVyIHdvcmtlciBhbmQgaW52b2tlcyByb3V0aW5lcwor ICogdG8gYXBwbHkgdGhvc2Ugb24gdGhlIHN1YnNjcmliZXIgZGF0YWJhc2UuIEFkZGl0aW9uYWxs eSwgdGhpcyBmaWxlIGNvbnRhaW5zCisgKiByb3V0aW5lcyB0aGF0IGFyZSBpbnRlbmRlZCB0byBz dXBwb3J0IHNldHRpbmcgdXAsIHVzaW5nLCBhbmQgdGVhcmluZyBkb3duIGEKKyAqIFBhcmFsbGVs QXBwbHlXb3JrZXJJbmZvIHdoaWNoIGlzIHJlcXVpcmVkIHNvIHRoZSBsZWFkZXIgd29ya2VyIGFu ZCBwYXJhbGxlbAorICogYXBwbHkgd29ya2VycyBjYW4gY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90 aGVyLgorICoKKyAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFyZSBhc3NpZ25lZCAoaWYg YXZhaWxhYmxlKSBhcyBzb29uIGFzIHhhY3QncworICogZmlyc3Qgc3RyZWFtIGlzIHJlY2VpdmVk IGZvciBzdWJzY3JpcHRpb25zIHRoYXQgaGF2ZSBzZXQgdGhlaXIgJ3N0cmVhbWluZycKKyAqIG9w dGlvbiBhcyBwYXJhbGxlbC4gVGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBzZW5kIGNoYW5n ZXMgdG8gdGhpcyBuZXcKKyAqIHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gV2Uga2VlcCB0aGlz IHdvcmtlciBhc3NpZ25lZCB0aWxsIHRoZSB0cmFuc2FjdGlvbgorICogY29tbWl0IGlzIHJlY2Vp dmVkIGFuZCBhbHNvIHdhaXQgZm9yIHRoZSB3b3JrZXIgdG8gZmluaXNoIGF0IGNvbW1pdC4gVGhp cworICogcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZvaWQgZmlsZSBJL08gaW4gbW9z dCBjYXNlcywgYWx0aG91Z2ggd2UKKyAqIHN0aWxsIG5lZWQgdG8gc3BpbGwgdG8gYSBmaWxlIGlm IHRoZXJlIGlzIG5vIHdvcmtlciBhdmFpbGFibGUuIFNlZSBjb21tZW50cworICogYXRvcCBsb2dp Y2FsL3dvcmtlciB0byBrbm93IG1vcmUgYWJvdXQgc3RyZWFtZWQgeGFjdHMgd2hvc2UgY2hhbmdl cyBhcmUKKyAqIHNwaWxsZWQgdG8gZGlzay4gSXQgaXMgaW1wb3J0YW50IHRvIG1haW50YWluIGNv bW1pdCBvcmRlciB0byBhdm9pZCBmYWlsdXJlcworICogZHVlIHRvOiAoYSkgdHJhbnNhY3Rpb24g ZGVwZW5kZW5jaWVzIC0gc2F5IGlmIHdlIGluc2VydCBhIHJvdyBpbiB0aGUgZmlyc3QKKyAqIHRy YW5zYWN0aW9uIGFuZCB1cGRhdGUgaXQgaW4gdGhlIHNlY29uZCB0cmFuc2FjdGlvbiBvbiBwdWJs aXNoZXIgdGhlbgorICogYWxsb3dpbmcgdGhlIHN1YnNjcmliZXIgdG8gYXBwbHkgYm90aCBpbiBw YXJhbGxlbCBjYW4gbGVhZCB0byBmYWlsdXJlIGluIHRoZQorICogdXBkYXRlOyAoYikgZGVhZGxv Y2tzIC0gYWxsb3dpbmcgdHJhbnNhY3Rpb25zIHRoYXQgdXBkYXRlIHRoZSBzYW1lIHNldCBvZgor ICogcm93cy90YWJsZXMgaW4gdGhlIG9wcG9zaXRlIG9yZGVyIHRvIGJlIGFwcGxpZWQgaW4gcGFy YWxsZWwgY2FuIGxlYWQgdG8KKyAqIGRlYWRsb2Nrcy4KKyAqCisgKiBBIHdvcmtlciBwb29sIGlz IHVzZWQgdG8gYXZvaWQgcmVzdGFydGluZyB3b3JrZXJzIGZvciBlYWNoIHN0cmVhbWluZworICog dHJhbnNhY3Rpb24uIFdlIG1haW50YWluIGVhY2ggd29ya2VyJ3MgaW5mb3JtYXRpb24gKFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvKQorICogaW4gdGhlIFBhcmFsbGVsQXBwbHlXb3JrZXJQb29sLiBB ZnRlciBzdWNjZXNzZnVsbHkgbGF1bmNoaW5nIGEgbmV3IHdvcmtlciwKKyAqIGl0cyBpbmZvcm1h dGlvbiBpcyBhZGRlZCB0byB0aGUgUGFyYWxsZWxBcHBseVdvcmtlclBvb2wuIE9uY2UgdGhlIHdv cmtlcgorICogZmluaXNoZXMgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uLCBpdCBpcyBtYXJrZWQg YXMgYXZhaWxhYmxlIGZvciByZS11c2UuCisgKiBOb3csIGJlZm9yZSBzdGFydGluZyBhIG5ldyB3 b3JrZXIgdG8gYXBwbHkgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgd2UKKyAqIGNoZWNrIHRo ZSBsaXN0IGZvciBhbnkgYXZhaWxhYmxlIHdvcmtlci4gTm90ZSB0aGF0IHdlIHJldGFpbiBhIG1h eGltdW0gb2YKKyAqIGhhbGYgdGhlIG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJz Y3JpcHRpb24gd29ya2VycyBpbiB0aGUgcG9vbCBhbmQKKyAqIGFmdGVyIHRoYXQsIHdlIHNpbXBs eSBleGl0IHRoZSB3b3JrZXIgYWZ0ZXIgYXBwbHlpbmcgdGhlIHRyYW5zYWN0aW9uLgorICoKKyAq IFhYWCBUaGlzIHdvcmtlciBwb29sIHRocmVzaG9sZCBpcyBhcmJpdHJhcnkgYW5kIHdlIGNhbiBw cm92aWRlIGEgR1VDCisgKiB2YXJpYWJsZSBmb3IgdGhpcyBpbiB0aGUgZnV0dXJlIGlmIHJlcXVp cmVkLgorICoKKyAqIFRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwgY3JlYXRlIGEgc2VwYXJh dGUgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKKyAqIHdoZW4gZWFjaCBwYXJhbGxlbCBh cHBseSB3b3JrZXIgc3RhcnRzLiBUaGUgcmVhc29uIGZvciB0aGlzIGRlc2lnbiBpcyB0aGF0Cisg KiB3ZSBjYW5ub3QgcHJlZGljdCBob3cgbWFueSB3b3JrZXJzIHdpbGwgYmUgbmVlZGVkLiBJdCBt YXkgYmUgcG9zc2libGUgdG8KKyAqIGFsbG9jYXRlIGVub3VnaCBzaGFyZWQgbWVtb3J5IGluIG9u ZSBzZWdtZW50IGJhc2VkIG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZgorICogcGFyYWxsZWwgYXBw bHkgd29ya2VycyAobWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiks IGJ1dAorICogdGhpcyB3b3VsZCB3YXN0ZSBtZW1vcnkgaWYgbm8gcHJvY2VzcyBpcyBhY3R1YWxs eSBzdGFydGVkLgorICoKKyAqIFRoZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBjb250 YWluczogKGEpIGEgc2htX21xIHRoYXQgaXMgdXNlZCB0bworICogc2VuZCBjaGFuZ2VzIGluIHRo ZSB0cmFuc2FjdGlvbiBmcm9tIGxlYWRlciBhcHBseSB3b3JrZXIgdG8gcGFyYWxsZWwgYXBwbHkK KyAqIHdvcmtlcjsgKGIpIGFub3RoZXIgc2htX21xIHRoYXQgaXMgdXNlZCB0byBzZW5kIGVycm9y cyAoYW5kIG90aGVyIG1lc3NhZ2VzCisgKiByZXBvcnRlZCB2aWEgZWxvZy9lcmVwb3J0KSBmcm9t IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gbGVhZGVyIGFwcGx5CisgKiB3b3JrZXI7IChj KSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gYmUgc2hhcmVkIGFtb25nIHBhcmFsbGVsIGFwcGx5 IHdvcmtlcnMKKyAqIGFuZCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciAoaS5lLiBtZW1iZXJzIG9m IFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQpLgorICoKKyAqIExvY2tpbmcgQ29uc2lkZXJhdGlv bnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNpbmNlIHRoZSBkYXRhYmFzZSBzdHJ1 Y3R1cmUgKHNjaGVtYSBvZiBzdWJzY3JpcHRpb24gdGFibGVzLCBjb25zdHJhaW50cywKKyAqIGV0 Yy4pIG9mIHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY291bGQgYmUgZGlmZmVyZW50LCBh cHBseWluZworICogdHJhbnNhY3Rpb25zIGluIHBhcmFsbGVsIG1vZGUgb24gdGhlIHN1YnNjcmli ZXIgc2lkZSBjYW4gY2F1c2Ugc29tZQorICogZGVhZGxvY2tzIHRoYXQgZG8gbm90IG9jY3VyIG9u IHRoZSBwdWJsaXNoZXIgc2lkZS4gVGhpcyBjYW4gaGFwcGVuIGV2ZW4KKyAqIHdpdGhvdXQgcGFy YWxsZWwgbW9kZSB3aGVuIHRoZXJlIGFyZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlCisg KiBzdWJzY3JpYmVyLiBJbiBvcmRlciB0byBkZXRlY3QgdGhlIGRlYWRsb2NrcyBhbW9uZyBsZWFk ZXIgKExBKSBhbmQgcGFyYWxsZWwKKyAqIGFwcGx5IChQQSkgd29ya2Vycywgd2UgdXNlZCBsbWdy IGxvY2tzIHdoZW4gdGhlIFBBIHdhaXRzIGZvciB0aGUgbmV4dCBzdHJlYW0KKyAqIChzZXQgb2Yg Y2hhbmdlcykgYW5kIExBIHdhaXRzIGZvciBQQSB0byBmaW5pc2ggdGhlIHRyYW5zYWN0aW9uLiBB biBhbHRlcm5hdGl2ZQorICogYXBwcm9hY2ggY291bGQgYmUgdG8gbm90IGFsbG93IHBhcmFsbGVs aXNtIHdoZW4gdGhlIHNjaGVtYSBvZiB0YWJsZXMgaXMKKyAqIGRpZmZlcmVudCBiZXR3ZWVuIHRo ZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgYnV0IHRoYXQgd291bGQgYmUgdG9vCisgKiByZXN0 cmljdGl2ZSBhbmQgd291bGQgcmVxdWlyZSB0aGUgcHVibGlzaGVyIHRvIHNlbmQgbXVjaCBtb3Jl IGluZm9ybWF0aW9uCisgKiB0aGFuIGl0IGlzIGN1cnJlbnRseSBzZW5kaW5nLgorICoKKyAqIENv bnNpZGVyIGEgY2FzZSB3aGVyZSB0aGUgc3Vic2NyaWJlZCB0YWJsZSBkb2VzIG5vdCBoYXZlIGEg dW5pcXVlIGtleSBvbiB0aGUKKyAqIHB1Ymxpc2hlciBhbmQgaGFzIGEgdW5pcXVlIGtleSBvbiB0 aGUgc3Vic2NyaWJlci4gVGhlIGRlYWRsb2NrIGNhbiBoYXBwZW4gaW4KKyAqIHRoZSBmb2xsb3dp bmcgd2F5czoKKyAqCisgKiAxKSBEZWFkbG9jayBiZXR3ZWVuIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyIGFuZCBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlcgorICoKKyAqIENvbnNpZGVyIHRoYXQgdGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlciAoUEEpIGlzIGV4ZWN1dGluZyBUWC0xIGFuZCB0aGUKKyAq IGxlYWRlciBhcHBseSB3b3JrZXIgKExBKSBpcyBleGVjdXRpbmcgVFgtMiBjb25jdXJyZW50bHkg b24gdGhlIHN1YnNjcmliZXIuCisgKiBOb3csIExBIGlzIHdhaXRpbmcgZm9yIFBBIGJlY2F1c2Ug b2YgdGhlIHVuaXF1ZSBrZXkgY29uc3RyYWludCBvZiB0aGUKKyAqIHN1YnNjcmliZWQgdGFibGUg d2hpbGUgUEEgaXMgd2FpdGluZyBmb3IgTEEgdG8gc2VuZCB0aGUgbmV4dCBzdHJlYW0gb2YKKyAq IGNoYW5nZXMgb3IgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQgbWVzc2FnZS4KKyAqCisgKiBJ biBvcmRlciBmb3IgbG1nciB0byBkZXRlY3QgdGhpcywgd2UgaGF2ZSBMQSBhY3F1aXJlIGEgc2Vz c2lvbiBsb2NrIG9uIHRoZQorICogcmVtb3RlIHRyYW5zYWN0aW9uIChieSBwYV9sb2NrX3N0cmVh bSgpKSBhbmQgaGF2ZSBQQSB3YWl0IG9uIHRoZSBsb2NrIGJlZm9yZQorICogdHJ5aW5nIHRvIHJl Y2VpdmUgdGhlIG5leHQgc3RyZWFtIG9mIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgTEEgd2lsbCBh Y3F1aXJlCisgKiB0aGUgbG9jayBpbiBBY2Nlc3NFeGNsdXNpdmUgbW9kZSBiZWZvcmUgc2VuZGlu ZyB0aGUgU1RSRUFNX1NUT1AgYW5kIHdpbGwKKyAqIHJlbGVhc2UgaXQgaWYgYWxyZWFkeSBhY3F1 aXJlZCBhZnRlciBzZW5kaW5nIHRoZSBTVFJFQU1fU1RBUlQsIFNUUkVBTV9BQk9SVAorICogKGZv ciB0b3BsZXZlbCB0cmFuc2FjdGlvbiksIFNUUkVBTV9QUkVQQVJFLCBhbmQgU1RSRUFNX0NPTU1J VC4gVGhlIFBBIHdpbGwKKyAqIGFjcXVpcmUgdGhlIGxvY2sgaW4gQWNjZXNzU2hhcmUgbW9kZSBh ZnRlciBwcm9jZXNzaW5nIFNUUkVBTV9TVE9QIGFuZAorICogU1RSRUFNX0FCT1JUIChmb3Igc3Vi dHJhbnNhY3Rpb24pIGFuZCB0aGVuIHJlbGVhc2UgdGhlIGxvY2sgaW1tZWRpYXRlbHkKKyAqIGFm dGVyIGFjcXVpcmluZyBpdC4KKyAqCisgKiBUaGUgbG9jayBncmFwaCBmb3IgdGhlIGFib3ZlIGV4 YW1wbGUgd2lsbCBsb29rIGFzIGZvbGxvd3M6CisgKiBMQSAod2FpdGluZyB0byBhY3F1aXJlIHRo ZSBsb2NrIG9uIHRoZSB1bmlxdWUgaW5kZXgpIC0+IFBBICh3YWl0aW5nIHRvCisgKiBhY3F1aXJl IHRoZSBzdHJlYW0gbG9jaykgLT4gTEEKKyAqCisgKiBUaGlzIHdheSwgd2hlbiBQQSBpcyB3YWl0 aW5nIGZvciBMQSBmb3IgdGhlIG5leHQgc3RyZWFtIG9mIGNoYW5nZXMsIHdlIGNhbgorICogaGF2 ZSBhIHdhaXQtZWRnZSBmcm9tIFBBIHRvIExBIGluIGxtZ3IsIHdoaWNoIHdpbGwgbWFrZSB1cyBk ZXRlY3QgdGhlCisgKiBkZWFkbG9jayBiZXR3ZWVuIExBIGFuZCBQQS4KKyAqCisgKiAyKSBEZWFk bG9jayBiZXR3ZWVuIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbCBhcHBseSB3 b3JrZXJzCisgKgorICogVGhpcyBzY2VuYXJpbyBpcyBzaW1pbGFyIHRvIHRoZSBmaXJzdCBjYXNl IGJ1dCBUWC0xIGFuZCBUWC0yIGFyZSBleGVjdXRlZCBieQorICogdHdvIHBhcmFsbGVsIGFwcGx5 IHdvcmtlcnMgKFBBLTEgYW5kIFBBLTIgcmVzcGVjdGl2ZWx5KS4gSW4gdGhpcyBzY2VuYXJpbywK KyAqIFBBLTIgaXMgd2FpdGluZyBmb3IgUEEtMSB0byBjb21wbGV0ZSBpdHMgdHJhbnNhY3Rpb24g d2hpbGUgUEEtMSBpcyB3YWl0aW5nCisgKiBmb3Igc3Vic2VxdWVudCBpbnB1dCBmcm9tIExBLiBB bHNvLCBMQSBpcyB3YWl0aW5nIGZvciBQQS0yIHRvIGNvbXBsZXRlIGl0cworICogdHJhbnNhY3Rp b24gaW4gb3JkZXIgdG8gcHJlc2VydmUgdGhlIGNvbW1pdCBvcmRlci4gVGhlcmUgaXMgYSBkZWFk bG9jayBhbW9uZworICogdGhlIHRocmVlIHByb2Nlc3Nlcy4KKyAqCisgKiBJbiBvcmRlciBmb3Ig bG1nciB0byBkZXRlY3QgdGhpcywgd2UgaGF2ZSBQQSBhY3F1aXJlIGEgc2Vzc2lvbiBsb2NrICh0 aGlzIGlzCisgKiBhIGRpZmZlcmVudCBsb2NrIHRoYW4gcmVmZXJyZWQgaW4gdGhlIHByZXZpb3Vz IGNhc2UsIHNlZQorICogcGFfbG9ja190cmFuc2FjdGlvbigpKSBvbiB0aGUgdHJhbnNhY3Rpb24g YmVpbmcgYXBwbGllZCBhbmQgaGF2ZSBMQSB3YWl0IG9uCisgKiB0aGUgbG9jayBiZWZvcmUgcHJv Y2VlZGluZyBpbiB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzLiBTcGVjaWZpY2FsbHks CisgKiBQQSB3aWxsIGFjcXVpcmUgdGhpcyBsb2NrIGluIEFjY2Vzc0V4Y2x1c2l2ZSBtb2RlIGJl Zm9yZSBleGVjdXRpbmcgdGhlIGZpcnN0CisgKiBtZXNzYWdlIG9mIHRoZSB0cmFuc2FjdGlvbiBh bmQgcmVsZWFzZSBpdCBhdCB0aGUgeGFjdCBlbmQuIExBIHdpbGwgYWNxdWlyZQorICogdGhpcyBs b2NrIGluIEFjY2Vzc1NoYXJlIG1vZGUgYXQgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzIGFu ZCByZWxlYXNlIGl0CisgKiBpbW1lZGlhdGVseS4KKyAqCisgKiBUaGUgbG9jayBncmFwaCBmb3Ig dGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBsb29rIGFzIGZvbGxvd3M6CisgKiBMQSAod2FpdGluZyB0 byBhY3F1aXJlIHRoZSB0cmFuc2FjdGlvbiBsb2NrKSAtPiBQQS0yICh3YWl0aW5nIHRvIGFjcXVp cmUgdGhlCisgKiBsb2NrIGR1ZSB0byB1bmlxdWUgaW5kZXggY29uc3RyYWludCkgLT4gUEEtMSAo d2FpdGluZyB0byBhY3F1aXJlIHRoZSBzdHJlYW0KKyAqIGxvY2spIC0+IExBCisgKgorICogVGhp cyB3YXkgd2hlbiBMQSBpcyB3YWl0aW5nIHRvIGZpbmlzaCB0aGUgdHJhbnNhY3Rpb24gZW5kIGNv bW1hbmQgdG8gcHJlc2VydmUKKyAqIHRoZSBjb21taXQgb3JkZXIsIHdlIHdpbGwgYmUgYWJsZSB0 byBkZXRlY3QgZGVhZGxvY2ssIGlmIGFueS4KKyAqCisgKiBPbmUgbWlnaHQgdGhpbmsgd2UgY2Fu IHVzZSBYYWN0TG9ja1RhYmxlV2FpdCgpLCBidXQgWGFjdExvY2tUYWJsZVdhaXQoKQorICogY29u c2lkZXJzIFBSRVBBUkVEIFRSQU5TQUNUSU9OIGFzIHN0aWxsIGluIHByb2dyZXNzIHdoaWNoIG1l YW5zIHRoZSBsb2NrCisgKiB3b24ndCBiZSByZWxlYXNlZCBldmVuIGFmdGVyIHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXIgaGFzIHByZXBhcmVkIHRoZQorICogdHJhbnNhY3Rpb24uCisgKgorICog MykgRGVhZGxvY2sgd2hlbiB0aGUgc2htX21xIGJ1ZmZlciBpcyBmdWxsCisgKgorICogSW4gdGhl IHByZXZpb3VzIHNjZW5hcmlvIChpZS4gUEEtMSBhbmQgUEEtMiBhcmUgZXhlY3V0aW5nIHRyYW5z YWN0aW9ucworICogY29uY3VycmVudGx5KSwgaWYgdGhlIHNobV9tcSBidWZmZXIgYmV0d2VlbiBM QSBhbmQgUEEtMiBpcyBmdWxsLCBMQSBoYXMgdG8KKyAqIHdhaXQgdG8gc2VuZCBtZXNzYWdlcywg YW5kIHRoaXMgd2FpdCBkb2Vzbid0IGFwcGVhciBpbiBsbWdyLgorICoKKyAqIFRvIGF2b2lkIHRo aXMgd2FpdCwgd2UgdXNlIGEgbm9uLWJsb2NraW5nIHdyaXRlIGFuZCB3YWl0IHdpdGggYSB0aW1l b3V0LiBJZgorICogdGhlIHRpbWVvdXQgaXMgZXhjZWVkZWQsIHRoZSBMQSB3aWxsIHNlcmlhbGl6 ZSBhbGwgdGhlIHBlbmRpbmcgbWVzc2FnZXMgdG8KKyAqIGEgZmlsZSBhbmQgaW5kaWNhdGUgUEEt MiB0aGF0IGl0IG5lZWRzIHRvIHJlYWQgdGhhdCBmaWxlIGZvciB0aGUgcmVtYWluaW5nCisgKiBt ZXNzYWdlcy4gVGhlbiBMQSB3aWxsIHN0YXJ0IHdhaXRpbmcgZm9yIGNvbW1pdCBhcyBpbiB0aGUg cHJldmlvdXMgY2FzZQorICogd2hpY2ggd2lsbCBkZXRlY3QgZGVhZGxvY2sgaWYgYW55LiBTZWUg cGFfc2VuZF9kYXRhKCkgYW5kCisgKiBlbnVtIFRyYW5zQXBwbHlBY3Rpb24uCisgKgorICogNCkg TG9jayB0eXBlcworICoKKyAqIEJvdGggdGhlIHN0cmVhbSBsb2NrIGFuZCB0aGUgdHJhbnNhY3Rp b24gbG9jayBtZW50aW9uZWQgYWJvdmUgYXJlCisgKiBzZXNzaW9uLWxldmVsIGxvY2tzIGJlY2F1 c2UgYm90aCBsb2NrcyBjb3VsZCBiZSBhY3F1aXJlZCBvdXRzaWRlIHRoZQorICogdHJhbnNhY3Rp b24sIGFuZCB0aGUgc3RyZWFtIGxvY2sgaW4gdGhlIGxlYWRlciBuZWVkcyB0byBwZXJzaXN0IGFj cm9zcworICogdHJhbnNhY3Rpb24gYm91bmRhcmllcyBpLmUuIHVudGlsIHRoZSBlbmQgb2YgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKKyNpbmNsdWRl ICJsaWJwcS9wcW1xLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rl ci9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCisjaW5jbHVkZSAicmVwbGlj YXRpb24vb3JpZ2luLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgi CisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNp bmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNs dWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKyNk ZWZpbmUgUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMgMHg3ODdjYTA2NworCisvKgorICogRFNN IGtleXMgZm9yIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gVW5saWtlIG90aGVyIHBhcmFsbGVsIGV4 ZWN1dGlvbiBjb2RlLAorICogc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBEU00g a2V5cyBjb25mbGljdGluZyB3aXRoIHBsYW5fbm9kZV9pZCB3ZQorICogY2FuIHVzZSBzbWFsbCBp bnRlZ2Vycy4KKyAqLworI2RlZmluZSBQQVJBTExFTF9BUFBMWV9LRVlfU0hBUkVECQkxCisjZGVm aW5lIFBBUkFMTEVMX0FQUExZX0tFWV9NUQkJCTIKKyNkZWZpbmUgUEFSQUxMRUxfQVBQTFlfS0VZ X0VSUk9SX1FVRVVFCTMKKworLyogUXVldWUgc2l6ZSBvZiBEU00sIDE2IE1CIGZvciBub3cuICov CisjZGVmaW5lIERTTV9RVUVVRV9TSVpFCSgxNiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogRXJy b3IgcXVldWUgc2l6ZSBvZiBEU00uIEl0IGlzIGRlc2lyYWJsZSB0byBtYWtlIGl0IGxhcmdlIGVu b3VnaCB0aGF0IGEKKyAqIHR5cGljYWwgRXJyb3JSZXNwb25zZSBjYW4gYmUgc2VudCB3aXRob3V0 IGJsb2NraW5nLiBUaGF0IHdheSwgYSB3b3JrZXIgdGhhdAorICogZXJyb3JzIG91dCBjYW4gd3Jp dGUgdGhlIHdob2xlIG1lc3NhZ2UgaW50byB0aGUgcXVldWUgYW5kIHRlcm1pbmF0ZSB3aXRob3V0 CisgKiB3YWl0aW5nIGZvciB0aGUgdXNlciBiYWNrZW5kLgorICovCisjZGVmaW5lIERTTV9FUlJP Ul9RVUVVRV9TSVpFCQkJKDE2ICogMTAyNCkKKworLyoKKyAqIFRoZXJlIGFyZSB0aHJlZSBmaWVs ZHMgaW4gZWFjaCBtZXNzYWdlIHJlY2VpdmVkIGJ5IHRoZSBwYXJhbGxlbCBhcHBseQorICogd29y a2VyOiBzdGFydF9sc24sIGVuZF9sc24gYW5kIHNlbmRfdGltZS4gQmVjYXVzZSB3ZSBoYXZlIHVw ZGF0ZWQgdGhlc2UKKyAqIHN0YXRpc3RpY3MgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIsIHdl IGNhbiBpZ25vcmUgdGhlc2UgZmllbGRzIGluIHRoZQorICogcGFyYWxsZWwgYXBwbHkgd29ya2Vy IChzZWUgZnVuY3Rpb24gTG9naWNhbFJlcEFwcGx5TG9vcCkuCisgKi8KKyNkZWZpbmUgU0laRV9T VEFUU19NRVNTQUdFICgyICogc2l6ZW9mKFhMb2dSZWNQdHIpICsgc2l6ZW9mKFRpbWVzdGFtcFR6 KSkKKworLyoKKyAqIFRoZSB0eXBlIG9mIHNlc3Npb24tbGV2ZWwgbG9jayBvbiBhIHRyYW5zYWN0 aW9uIGJlaW5nIGFwcGxpZWQgb24gYSBsb2dpY2FsCisgKiByZXBsaWNhdGlvbiBzdWJzY3JpYmVy LgorICovCisjZGVmaW5lIFBBUkFMTEVMX0FQUExZX0xPQ0tfU1RSRUFNCTAKKyNkZWZpbmUgUEFS QUxMRUxfQVBQTFlfTE9DS19YQUNUCTEKKworLyoKKyAqIEhhc2ggdGFibGUgZW50cnkgdG8gbWFw IHhpZCB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHN0YXRlLgorICovCit0eXBlZGVmIHN0 cnVjdCBQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsJCQkv KiBIYXNoIGtleSAtLSBtdXN0IGJlIGZpcnN0ICovCisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvOworfSBQYXJhbGxlbEFwcGx5V29ya2VyRW50cnk7CisKKy8qCisgKiBBIGhhc2ggdGFi bGUgdXNlZCB0byBjYWNoZSB0aGUgc3RhdGUgb2Ygc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWlu ZyBhcHBsaWVkCisgKiBieSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKyAqLworc3RhdGlj IEhUQUIgKlBhcmFsbGVsQXBwbHlUeG5IYXNoID0gTlVMTDsKKworLyoKKyogQSBsaXN0IChwb29s KSBvZiBhY3RpdmUgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gVGhlIGluZm9ybWF0aW9uIGZvcgor KiB0aGUgbmV3IHdvcmtlciBpcyBhZGRlZCB0byB0aGUgbGlzdCBhZnRlciBzdWNjZXNzZnVsbHkg bGF1bmNoaW5nIGl0LiBUaGUKKyogbGlzdCBlbnRyeSBpcyByZW1vdmVkIGlmIHRoZXJlIGFyZSBh bHJlYWR5IGVub3VnaCB3b3JrZXJzIGluIHRoZSB3b3JrZXIKKyogcG9vbCBhdCB0aGUgZW5kIG9m IHRoZSB0cmFuc2FjdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdvcmtlcgor KiBwb29sLCBzZWUgY29tbWVudHMgYXRvcCB0aGlzIGZpbGUuCisgKi8KK3N0YXRpYyBMaXN0ICpQ YXJhbGxlbEFwcGx5V29ya2VyUG9vbCA9IE5JTDsKKworLyoKKyAqIEluZm9ybWF0aW9uIHNoYXJl ZCBiZXR3ZWVuIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4K KyAqLworUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQYXJhbGxlbFNoYXJlZCA9IE5VTEw7 CisKKy8qCisgKiBJcyB0aGVyZSBhIG1lc3NhZ2Ugc2VudCBieSBhIHBhcmFsbGVsIGFwcGx5IHdv cmtlciB0aGF0IHRoZSBsZWFkZXIgYXBwbHkKKyAqIHdvcmtlciBuZWVkcyB0byByZWNlaXZlPwor ICovCit2b2xhdGlsZSBzaWdfYXRvbWljX3QgUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0g ZmFsc2U7CisKKy8qCisgKiBDYWNoZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0 aW9uIHJlcXVpcmVkIGZvciBhcHBseWluZyB0aGUKKyAqIGN1cnJlbnQgc3RyZWFtaW5nIHRyYW5z YWN0aW9uLiBJdCBpcyB1c2VkIHRvIHNhdmUgdGhlIGNvc3Qgb2Ygc2VhcmNoaW5nIHRoZQorICog aGFzaCB0YWJsZSB3aGVuIGFwcGx5aW5nIHRoZSBjaGFuZ2VzIGJldHdlZW4gU1RSRUFNX1NUQVJU IGFuZCBTVFJFQU1fU1RPUC4KKyAqLworc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICpz dHJlYW1fYXBwbHlfd29ya2VyID0gTlVMTDsKKworLyogQSBsaXN0IHRvIG1haW50YWluIHN1YnRy YW5zYWN0aW9ucywgaWYgYW55LiAqLworc3RhdGljIExpc3QgKnN1YnhhY3RsaXN0ID0gTklMOwor CitzdGF0aWMgdm9pZCBwYV9mcmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZv ICp3aW5mbyk7CitzdGF0aWMgUGFyYWxsZWxUcmFuc1N0YXRlIHBhX2dldF94YWN0X3N0YXRlKFBh cmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQpOworc3RhdGljIFBhcnRpYWxGaWxlU2V0 U3RhdGUgcGFfZ2V0X2ZpbGVzZXRfc3RhdGUodm9pZCk7CisKKy8qCisgKiBSZXR1cm5zIHRydWUg aWYgaXQgaXMgT0sgdG8gc3RhcnQgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIGZhbHNlIG90aGVy d2lzZS4KKyAqLworc3RhdGljIGJvb2wKK3BhX2Nhbl9zdGFydCh2b2lkKQoreworCS8qIE9ubHkg bGVhZGVyIGFwcGx5IHdvcmtlcnMgY2FuIHN0YXJ0IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICov CisJaWYgKCFhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpCisJCXJldHVybiBmYWxzZTsKKworCS8q CisJICogSXQgaXMgZ29vZCB0byBjaGVjayBmb3IgYW55IGNoYW5nZSBpbiB0aGUgc3Vic2NyaXB0 aW9uIHBhcmFtZXRlciB0bworCSAqIGF2b2lkIHRoZSBjYXNlIHdoZXJlIGZvciBhIHZlcnkgbG9u ZyB0aW1lIHRoZSBjaGFuZ2UgZG9lc24ndCBnZXQKKwkgKiByZWZsZWN0ZWQuIFRoaXMgY2FuIGhh cHBlbiB3aGVuIHRoZXJlIGlzIGEgY29uc3RhbnQgZmxvdyBvZiBzdHJlYW1pbmcKKwkgKiB0cmFu c2FjdGlvbnMgdGhhdCBhcmUgaGFuZGxlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorCSAq CisJICogSXQgaXMgYmV0dGVyIHRvIGRvIGl0IGJlZm9yZSB0aGUgYmVsb3cgY2hlY2tzIHNvIHRo YXQgdGhlIGxhdGVzdCB2YWx1ZXMKKwkgKiBvZiBzdWJzY3JpcHRpb24gY2FuIGJlIHVzZWQgZm9y IHRoZSBjaGVja3MuCisJICovCisJbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbigpOworCisJLyoK KwkgKiBEb24ndCBzdGFydCBhIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaWYgdGhlIHN1YnNj cmlwdGlvbiBpcyBub3QKKwkgKiB1c2luZyBwYXJhbGxlbCBzdHJlYW1pbmcgbW9kZSwgb3IgaWYg dGhlIHB1Ymxpc2hlciBkb2VzIG5vdCBzdXBwb3J0CisJICogcGFyYWxsZWwgYXBwbHkuCisJICov CisJaWYgKCFNeUxvZ2ljYWxSZXBXb3JrZXItPnBhcmFsbGVsX2FwcGx5KQorCQlyZXR1cm4gZmFs c2U7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IGEgbmV3IHBhcmFsbGVsIHdvcmtlciBpZiB1c2Vy IGhhcyBzZXQgc2tpcGxzbiBhcyBpdCdzCisJICogcG9zc2libGUgdGhhdCB0aGV5IHdhbnQgdG8g c2tpcCB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiBGb3IKKwkgKiBzdHJlYW1pbmcgdHJhbnNh Y3Rpb25zLCB3ZSBuZWVkIHRvIHNlcmlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gdG8gYSBmaWxlCisJ ICogc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBsYXN0IExTTiBvZiB0aGUgdHJhbnNhY3Rpb24gdG8g anVkZ2Ugd2hldGhlciB0bworCSAqIHNraXAgYmVmb3JlIHN0YXJ0aW5nIHRvIGFwcGx5IHRoZSBj aGFuZ2UuCisJICovCisJaWYgKCFYTG9nUmVjUHRySXNJbnZhbGlkKE15U3Vic2NyaXB0aW9uLT5z a2lwbHNuKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBGb3Igc3RyZWFtaW5nIHRyYW5z YWN0aW9ucyB0aGF0IGFyZSBiZWluZyBhcHBsaWVkIHVzaW5nIGEgcGFyYWxsZWwKKwkgKiBhcHBs eSB3b3JrZXIsIHdlIGNhbm5vdCBkZWNpZGUgd2hldGhlciB0byBhcHBseSB0aGUgY2hhbmdlIGZv ciBhCisJICogcmVsYXRpb24gdGhhdCBpcyBub3QgaW4gdGhlIFJFQURZIHN0YXRlIChzZWUKKwkg KiBzaG91bGRfYXBwbHlfY2hhbmdlc19mb3JfcmVsKSBhcyB3ZSB3b24ndCBrbm93IHJlbW90ZV9m aW5hbF9sc24gYnkgdGhhdAorCSAqIHRpbWUuIFNvLCB3ZSBkb24ndCBzdGFydCB0aGUgbmV3IHBh cmFsbGVsIGFwcGx5IHdvcmtlciBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKCFBbGxUYWJsZXN5 bmNzUmVhZHkoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisg KiBTZXQgdXAgYSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4KKyAqCisgKiBXZSBzZXQg dXAgYSBjb250cm9sIHJlZ2lvbiB0aGF0IGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSB3b3JrZXIgaW5m bworICogKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQpLCBhIG1lc3NhZ2UgcXVldWUsIGFuZCBh biBlcnJvciBxdWV1ZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24g ZmFpbHVyZS4KKyAqLworc3RhdGljIGJvb2wKK3BhX3NldHVwX2RzbShQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqd2luZm8pCit7CisJc2htX3RvY19lc3RpbWF0b3IgZTsKKwlTaXplCQlzZWdzaXpl OworCWRzbV9zZWdtZW50ICpzZWc7CisJc2htX3RvYyAgICAqdG9jOworCVBhcmFsbGVsQXBwbHlX b3JrZXJTaGFyZWQgKnNoYXJlZDsKKwlzaG1fbXEJICAgKm1xOworCVNpemUJCXF1ZXVlX3NpemUg PSBEU01fUVVFVUVfU0laRTsKKwlTaXplCQllcnJvcl9xdWV1ZV9zaXplID0gRFNNX0VSUk9SX1FV RVVFX1NJWkU7CisKKwkvKgorCSAqIEVzdGltYXRlIGhvdyBtdWNoIHNoYXJlZCBtZW1vcnkgd2Ug bmVlZC4KKwkgKgorCSAqIEJlY2F1c2UgdGhlIFRPQyBtYWNoaW5lcnkgbWF5IGNob29zZSB0byBp bnNlcnQgcGFkZGluZyBvZiBvZGRseS1zaXplZAorCSAqIHJlcXVlc3RzLCB3ZSBtdXN0IGVzdGlt YXRlIGVhY2ggY2h1bmsgc2VwYXJhdGVseS4KKwkgKgorCSAqIFdlIG5lZWQgb25lIGtleSB0byBy ZWdpc3RlciB0aGUgbG9jYXRpb24gb2YgdGhlIGhlYWRlciwgYW5kIHR3byBvdGhlcgorCSAqIGtl eXMgdG8gdHJhY2sgdGhlIGxvY2F0aW9ucyBvZiB0aGUgbWVzc2FnZSBxdWV1ZSBhbmQgdGhlIGVy cm9yIG1lc3NhZ2UKKwkgKiBxdWV1ZS4KKwkgKi8KKwlzaG1fdG9jX2luaXRpYWxpemVfZXN0aW1h dG9yKCZlKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBzaXplb2YoUGFyYWxsZWxBcHBs eVdvcmtlclNoYXJlZCkpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUsIHF1ZXVlX3NpemUp OworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUsIGVycm9yX3F1ZXVlX3NpemUpOworCisJc2ht X3RvY19lc3RpbWF0ZV9rZXlzKCZlLCAzKTsKKwlzZWdzaXplID0gc2htX3RvY19lc3RpbWF0ZSgm ZSk7CisKKwkvKiBDcmVhdGUgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBhbmQgZXN0YWJsaXNo IGEgdGFibGUgb2YgY29udGVudHMuICovCisJc2VnID0gZHNtX2NyZWF0ZShzaG1fdG9jX2VzdGlt YXRlKCZlKSwgMCk7CisJaWYgKCFzZWcpCisJCXJldHVybiBmYWxzZTsKKworCXRvYyA9IHNobV90 b2NfY3JlYXRlKFBHX0xPR0lDQUxfQVBQTFlfU0hNX01BR0lDLCBkc21fc2VnbWVudF9hZGRyZXNz KHNlZyksCisJCQkJCQkgc2Vnc2l6ZSk7CisKKwkvKiBTZXQgdXAgdGhlIGhlYWRlciByZWdpb24u ICovCisJc2hhcmVkID0gc2htX3RvY19hbGxvY2F0ZSh0b2MsIHNpemVvZihQYXJhbGxlbEFwcGx5 V29ya2VyU2hhcmVkKSk7CisJU3BpbkxvY2tJbml0KCZzaGFyZWQtPm11dGV4KTsKKworCXNoYXJl ZC0+eGFjdF9zdGF0ZSA9IFBBUkFMTEVMX1RSQU5TX1VOS05PV047CisJcGdfYXRvbWljX2luaXRf dTMyKCYoc2hhcmVkLT5wZW5kaW5nX3N0cmVhbV9jb3VudCksIDApOworCXNoYXJlZC0+bGFzdF9j b21taXRfZW5kID0gSW52YWxpZFhMb2dSZWNQdHI7CisJc2hhcmVkLT5maWxlc2V0X3N0YXRlID0g RlNfRU1QVFk7CisKKwlzaG1fdG9jX2luc2VydCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9TSEFS RUQsIHNoYXJlZCk7CisKKwkvKiBTZXQgdXAgbWVzc2FnZSBxdWV1ZSBmb3IgdGhlIHdvcmtlci4g Ki8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2htX3RvY19hbGxvY2F0ZSh0b2MsIHF1ZXVlX3NpemUp LCBxdWV1ZV9zaXplKTsKKwlzaG1fdG9jX2luc2VydCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9N USwgbXEpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBNeVByb2MpOworCisJLyogQXR0YWNoIHRo ZSBxdWV1ZS4gKi8KKwl3aW5mby0+bXFfaGFuZGxlID0gc2htX21xX2F0dGFjaChtcSwgc2VnLCBO VUxMKTsKKworCS8qIFNldCB1cCBlcnJvciBxdWV1ZSBmb3IgdGhlIHdvcmtlci4gKi8KKwltcSA9 IHNobV9tcV9jcmVhdGUoc2htX3RvY19hbGxvY2F0ZSh0b2MsIGVycm9yX3F1ZXVlX3NpemUpLAor CQkJCQkgICBlcnJvcl9xdWV1ZV9zaXplKTsKKwlzaG1fdG9jX2luc2VydCh0b2MsIFBBUkFMTEVM X0FQUExZX0tFWV9FUlJPUl9RVUVVRSwgbXEpOworCXNobV9tcV9zZXRfcmVjZWl2ZXIobXEsIE15 UHJvYyk7CisKKwkvKiBBdHRhY2ggdGhlIHF1ZXVlLiAqLworCXdpbmZvLT5lcnJvcl9tcV9oYW5k bGUgPSBzaG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJLyogUmV0dXJuIHJlc3VsdHMg dG8gY2FsbGVyLiAqLworCXdpbmZvLT5kc21fc2VnID0gc2VnOworCXdpbmZvLT5zaGFyZWQgPSBz aGFyZWQ7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFRyeSB0byBnZXQgYSBwYXJhbGxl bCBhcHBseSB3b3JrZXIgZnJvbSB0aGUgcG9vbC4gSWYgbm9uZSBpcyBhdmFpbGFibGUgdGhlbgor ICogc3RhcnQgYSBuZXcgb25lLgorICovCitzdGF0aWMgUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KgorcGFfbGF1bmNoX3BhcmFsbGVsX3dvcmtlcih2b2lkKQoreworCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKKwlib29sCQlsYXVuY2hlZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2lu Zm87CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBUcnkgdG8gZ2V0IGFuIGF2YWlsYWJsZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgZnJvbSB0aGUgd29ya2VyIHBvb2wuICovCisJZm9yZWFjaChsYywg UGFyYWxsZWxBcHBseVdvcmtlclBvb2wpCisJeworCQl3aW5mbyA9IChQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqKSBsZmlyc3QobGMpOworCisJCWlmICghd2luZm8tPmluX3VzZSkKKwkJCXJldHVy biB3aW5mbzsKKwl9CisKKwkvKgorCSAqIFN0YXJ0IGEgbmV3IHBhcmFsbGVsIGFwcGx5IHdvcmtl ci4KKwkgKgorCSAqIFRoZSB3b3JrZXIgaW5mbyBjYW4gYmUgdXNlZCBmb3IgdGhlIGxpZmV0aW1l IG9mIHRoZSB3b3JrZXIgcHJvY2Vzcywgc28KKwkgKiBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQg Y29udGV4dC4KKwkgKi8KKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5 Q29udGV4dCk7CisKKwl3aW5mbyA9IChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKSBwYWxsb2Mw KHNpemVvZihQYXJhbGxlbEFwcGx5V29ya2VySW5mbykpOworCisJLyogU2V0dXAgc2hhcmVkIG1l bW9yeS4gKi8KKwlpZiAoIXBhX3NldHVwX2RzbSh3aW5mbykpCisJeworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCXBmcmVlKHdpbmZvKTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJbGF1bmNoZWQgPSBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goTXlMb2dpY2FsUmVwV29y a2VyLT5kYmlkLAorCQkJCQkJCQkJCU15U3Vic2NyaXB0aW9uLT5vaWQsCisJCQkJCQkJCQkJTXlT dWJzY3JpcHRpb24tPm5hbWUsCisJCQkJCQkJCQkJTXlMb2dpY2FsUmVwV29ya2VyLT51c2VyaWQs CisJCQkJCQkJCQkJSW52YWxpZE9pZCwKKwkJCQkJCQkJCQlkc21fc2VnbWVudF9oYW5kbGUod2lu Zm8tPmRzbV9zZWcpKTsKKworCWlmIChsYXVuY2hlZCkKKwl7CisJCVBhcmFsbGVsQXBwbHlXb3Jr ZXJQb29sID0gbGFwcGVuZChQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCwgd2luZm8pOworCX0KKwll bHNlCisJeworCQlwYV9mcmVlX3dvcmtlcl9pbmZvKHdpbmZvKTsKKwkJd2luZm8gPSBOVUxMOwor CX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXJldHVybiB3aW5m bzsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRoYXQgd2ls bCBiZSB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIHhpZC4KKyAqCisgKiBXZSBmaXJzdCB0cnkgdG8g Z2V0IGFuIGF2YWlsYWJsZSB3b3JrZXIgZnJvbSB0aGUgcG9vbCwgaWYgYW55IGFuZCB0aGVuIHRy eQorICogdG8gbGF1bmNoIGEgbmV3IHdvcmtlci4gT24gc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBy ZW1lbWJlciB0aGUgd29ya2VyCisgKiBpbmZvcm1hdGlvbiBpbiB0aGUgaGFzaCB0YWJsZSBzbyB0 aGF0IHdlIGNhbiBnZXQgaXQgbGF0ZXIgZm9yIHByb2Nlc3NpbmcgdGhlCisgKiBzdHJlYW1pbmcg Y2hhbmdlcy4KKyAqLwordm9pZAorcGFfYWxsb2NhdGVfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlk KQoreworCWJvb2wJCWZvdW5kOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyA9IE5V TEw7CisJUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5ICplbnRyeTsKKworCWlmICghcGFfY2FuX3N0 YXJ0KCkpCisJCXJldHVybjsKKworCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgc3RhdGUgaGFzaHRhYmxlLiAqLworCWlmICghUGFyYWxsZWxB cHBseVR4bkhhc2gpCisJeworCQlIQVNIQ1RMCQljdGw7CisKKwkJTWVtU2V0KCZjdGwsIDAsIHNp emVvZihjdGwpKTsKKwkJY3RsLmtleXNpemUgPSBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CisJCWN0 bC5lbnRyeXNpemUgPSBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5KTsKKwkJY3RsLmhj eHQgPSBBcHBseUNvbnRleHQ7CisKKwkJUGFyYWxsZWxBcHBseVR4bkhhc2ggPSBoYXNoX2NyZWF0 ZSgibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGhhc2giLAorCQkJ CQkJCQkJCSAgIDE2LCAmY3RsLAorCQkJCQkJCQkJCSAgIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMg fCBIQVNIX0NPTlRFWFQpOworCX0KKworCXdpbmZvID0gcGFfbGF1bmNoX3BhcmFsbGVsX3dvcmtl cigpOworCWlmICghd2luZm8pCisJCXJldHVybjsKKworCS8qIENyZWF0ZSBhbiBlbnRyeSBmb3Ig dGhlIHJlcXVlc3RlZCB0cmFuc2FjdGlvbi4gKi8KKwllbnRyeSA9IGhhc2hfc2VhcmNoKFBhcmFs bGVsQXBwbHlUeG5IYXNoLCAmeGlkLCBIQVNIX0VOVEVSLCAmZm91bmQpOworCWlmIChmb3VuZCkK KwkJZWxvZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVwdGVkIik7CisKKwkvKiBVcGRhdGUgdGhl IHRyYW5zYWN0aW9uIGluZm9ybWF0aW9uIGluIHNoYXJlZCBtZW1vcnkuICovCisJU3BpbkxvY2tB Y3F1aXJlKCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7CisJd2luZm8tPnNoYXJlZC0+eGFjdF9zdGF0 ZSA9IFBBUkFMTEVMX1RSQU5TX1VOS05PV047CisJd2luZm8tPnNoYXJlZC0+eGlkID0geGlkOwor CVNwaW5Mb2NrUmVsZWFzZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCisJd2luZm8tPmluX3Vz ZSA9IHRydWU7CisJd2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzID0gZmFsc2U7CisJZW50cnktPndp bmZvID0gd2luZm87CisJZW50cnktPnhpZCA9IHhpZDsKK30KKworLyoKKyAqIEZpbmQgdGhlIGFz c2lnbmVkIHdvcmtlciBmb3IgdGhlIGdpdmVuIHRyYW5zYWN0aW9uLCBpZiBhbnkuCisgKi8KK1Bh cmFsbGVsQXBwbHlXb3JrZXJJbmZvICoKK3BhX2ZpbmRfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlk KQoreworCWJvb2wJCWZvdW5kOworCVBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeSAqZW50cnk7CisK KwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJCXJldHVybiBOVUxMOworCisJaWYg KCFQYXJhbGxlbEFwcGx5VHhuSGFzaCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBSZXR1cm4gdGhl IGNhY2hlZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaWYgdmFsaWQuICovCisJaWYgKHN0cmVhbV9h cHBseV93b3JrZXIpCisJCXJldHVybiBzdHJlYW1fYXBwbHlfd29ya2VyOworCisJLyogRmluZCBh biBlbnRyeSBmb3IgdGhlIHJlcXVlc3RlZCB0cmFuc2FjdGlvbi4gKi8KKwllbnRyeSA9IGhhc2hf c2VhcmNoKFBhcmFsbGVsQXBwbHlUeG5IYXNoLCAmeGlkLCBIQVNIX0ZJTkQsICZmb3VuZCk7CisJ aWYgKGZvdW5kKQorCXsKKwkJLyogVGhlIHdvcmtlciBtdXN0IG5vdCBoYXZlIGV4aXRlZC4gICov CisJCUFzc2VydChlbnRyeS0+d2luZm8tPmluX3VzZSk7CisJCXJldHVybiBlbnRyeS0+d2luZm87 CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBNYWtlcyB0aGUgd29ya2VyIGF2YWls YWJsZSBmb3IgcmV1c2UuCisgKgorICogVGhpcyByZW1vdmVzIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZSBzbyB0aGF0IGl0CisgKiBjYW4ndCBiZSB1 c2VkLiBJZiB0aGVyZSBhcmUgZW5vdWdoIHdvcmtlcnMgaW4gdGhlIHBvb2wsIGl0IHN0b3BzIHRo ZSB3b3JrZXIKKyAqIGFuZCBmcmVlcyB0aGUgY29ycmVzcG9uZGluZyBpbmZvLiBPdGhlcndpc2Ug aXQganVzdCBtYXJrcyB0aGUgd29ya2VyIGFzCisgKiBhdmFpbGFibGUgZm9yIHJldXNlLgorICoK KyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3b3JrZXIgcG9vbCwgc2VlIGNvbW1l bnRzIGF0b3AgdGhpcyBmaWxlLgorICovCitzdGF0aWMgdm9pZAorcGFfZnJlZV93b3JrZXIoUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKQoreworCUFzc2VydCghYW1fcGFyYWxsZWxfYXBw bHlfd29ya2VyKCkpOworCUFzc2VydCh3aW5mby0+aW5fdXNlKTsKKwlBc3NlcnQocGFfZ2V0X3hh Y3Rfc3RhdGUod2luZm8tPnNoYXJlZCkgPT0gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpOworCisJ aWYgKCFoYXNoX3NlYXJjaChQYXJhbGxlbEFwcGx5VHhuSGFzaCwgJndpbmZvLT5zaGFyZWQtPnhp ZCwgSEFTSF9SRU1PVkUsIE5VTEwpKQorCQllbG9nKEVSUk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0 ZWQiKTsKKworCS8qCisJICogU3RvcCB0aGUgd29ya2VyIGlmIHRoZXJlIGFyZSBlbm91Z2ggd29y a2VycyBpbiB0aGUgcG9vbC4KKwkgKgorCSAqIFhYWCBBZGRpdGlvbmFsbHksIHdlIGFsc28gc3Rv cCB0aGUgd29ya2VyIGlmIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyCisJICogc2VyaWFsaXplIHBh cnQgb2YgdGhlIHRyYW5zYWN0aW9uIGRhdGEgZHVlIHRvIGEgc2VuZCB0aW1lb3V0LiBUaGlzIGlz CisJICogYmVjYXVzZSB0aGUgbWVzc2FnZSBjb3VsZCBiZSBwYXJ0aWFsbHkgd3JpdHRlbiB0byB0 aGUgcXVldWUgYW5kIHRoZXJlCisJICogaXMgbm8gd2F5IHRvIGNsZWFuIHRoZSBxdWV1ZSBvdGhl ciB0aGFuIHJlc2VuZGluZyB0aGUgbWVzc2FnZSB1bnRpbCBpdAorCSAqIHN1Y2NlZWRzLiBJbnN0 ZWFkIG9mIHRyeWluZyB0byBzZW5kIHRoZSBkYXRhIHdoaWNoIGFueXdheSB3b3VsZCBoYXZlCisJ ICogYmVlbiBzZXJpYWxpemVkIGFuZCB0aGVuIGxldHRpbmcgdGhlIHBhcmFsbGVsIGFwcGx5IHdv cmtlciBkZWFsIHdpdGgKKwkgKiB0aGUgc3B1cmlvdXMgbWVzc2FnZSwgd2Ugc3RvcCB0aGUgd29y a2VyLgorCSAqLworCWlmICh3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgfHwKKwkJbGlzdF9sZW5n dGgoUGFyYWxsZWxBcHBseVdvcmtlclBvb2wpID4KKwkJKG1heF9wYXJhbGxlbF9hcHBseV93b3Jr ZXJzX3Blcl9zdWJzY3JpcHRpb24gLyAyKSkKKwl7CisJCWludAkJCXNsb3Rfbm87CisJCXVpbnQx NgkJZ2VuZXJhdGlvbjsKKworCQlTcGluTG9ja0FjcXVpcmUoJndpbmZvLT5zaGFyZWQtPm11dGV4 KTsKKwkJZ2VuZXJhdGlvbiA9IHdpbmZvLT5zaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX2dlbmVy YXRpb247CisJCXNsb3Rfbm8gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90 X25vOworCQlTcGluTG9ja1JlbGVhc2UoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKworCQlsb2dp Y2FscmVwX3BhX3dvcmtlcl9zdG9wKHNsb3Rfbm8sIGdlbmVyYXRpb24pOworCisJCXBhX2ZyZWVf d29ya2VyX2luZm8od2luZm8pOworCisJCXJldHVybjsKKwl9CisKKwl3aW5mby0+aW5fdXNlID0g ZmFsc2U7CisJd2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzID0gZmFsc2U7Cit9CisKKy8qCisgKiBG cmVlIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaW5mb3JtYXRpb24gYW5kIHVubGluayB0aGUg ZmlsZXMgd2l0aAorICogc2VyaWFsaXplZCBjaGFuZ2VzIGlmIGFueS4KKyAqLworc3RhdGljIHZv aWQKK3BhX2ZyZWVfd29ya2VyX2luZm8oUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKQor eworCUFzc2VydCh3aW5mbyk7CisKKwlpZiAod2luZm8tPm1xX2hhbmRsZSkKKwkJc2htX21xX2Rl dGFjaCh3aW5mby0+bXFfaGFuZGxlKTsKKworCWlmICh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlKQor CQlzaG1fbXFfZGV0YWNoKHdpbmZvLT5lcnJvcl9tcV9oYW5kbGUpOworCisJLyogVW5saW5rIHRo ZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcy4gKi8KKwlpZiAod2luZm8tPnNlcmlhbGl6 ZV9jaGFuZ2VzKQorCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1 YmlkLCB3aW5mby0+c2hhcmVkLT54aWQpOworCisJaWYgKHdpbmZvLT5kc21fc2VnKQorCQlkc21f ZGV0YWNoKHdpbmZvLT5kc21fc2VnKTsKKworCS8qIFJlbW92ZSBmcm9tIHRoZSB3b3JrZXIgcG9v bC4gKi8KKwlQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCA9IGxpc3RfZGVsZXRlX3B0cihQYXJhbGxl bEFwcGx5V29ya2VyUG9vbCwgd2luZm8pOworCisJcGZyZWUod2luZm8pOworfQorCisvKgorICog RGV0YWNoIHRoZSBlcnJvciBxdWV1ZSBmb3IgYWxsIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuCisg Ki8KK3ZvaWQKK3BhX2RldGFjaF9hbGxfZXJyb3JfbXEodm9pZCkKK3sKKwlMaXN0Q2VsbCAgICps YzsKKworCWZvcmVhY2gobGMsIFBhcmFsbGVsQXBwbHlXb3JrZXJQb29sKQorCXsKKwkJUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKndpbmZvID0gKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICopIGxm aXJzdChsYyk7CisKKwkJc2htX21xX2RldGFjaCh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlKTsKKwkJ d2luZm8tPmVycm9yX21xX2hhbmRsZSA9IE5VTEw7CisJfQorfQorCisvKgorICogQ2hlY2sgaWYg dGhlcmUgYXJlIGFueSBwZW5kaW5nIHNwb29sZWQgbWVzc2FnZXMuCisgKi8KK3N0YXRpYyBib29s CitwYV9oYXNfc3Bvb2xlZF9tZXNzYWdlX3BlbmRpbmcoKQoreworCVBhcnRpYWxGaWxlU2V0U3Rh dGUgZmlsZXNldF9zdGF0ZTsKKworCWZpbGVzZXRfc3RhdGUgPSBwYV9nZXRfZmlsZXNldF9zdGF0 ZSgpOworCisJcmV0dXJuIChmaWxlc2V0X3N0YXRlICE9IEZTX0VNUFRZKTsKK30KKworLyoKKyAq IFJlcGxheSB0aGUgc3Bvb2xlZCBtZXNzYWdlcyBvbmNlIHRoZSBsZWFkZXIgYXBwbHkgd29ya2Vy IGhhcyBmaW5pc2hlZAorICogc2VyaWFsaXppbmcgY2hhbmdlcyB0byB0aGUgZmlsZS4KKyAqLwor c3RhdGljIHZvaWQKK3BhX3Nwb29sZWRfbWVzc2FnZXModm9pZCkKK3sKKwlQYXJ0aWFsRmlsZVNl dFN0YXRlIGZpbGVzZXRfc3RhdGU7CisKKwlmaWxlc2V0X3N0YXRlID0gcGFfZ2V0X2ZpbGVzZXRf c3RhdGUoKTsKKworCS8qCisJICogSWYgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgaXMgYnVzeSBz ZXJpYWxpemluZyB0aGUgcGFydGlhbCBjaGFuZ2VzIHRoZW4KKwkgKiBhY3F1aXJlIHRoZSBzdHJl YW0gbG9jayBub3cgYW5kIHdhaXQgZm9yIHRoZSBsZWFkZXIgd29ya2VyIHRvIGZpbmlzaAorCSAq IHNlcmlhbGl6aW5nIHRoZSBjaGFuZ2VzLiBPdGhlcndpc2UsIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgd29uJ3QgZ2V0CisJICogYSBjaGFuY2UgdG8gcmVjZWl2ZSBhIFNUUkVBTV9TVE9QIChh bmQgYWNxdWlyZSB0aGUgc3RyZWFtIGxvY2spIHVudGlsCisJICogdGhlIGxlYWRlciBoYWQgc2Vy aWFsaXplZCBhbGwgY2hhbmdlcyB3aGljaCBjYW4gbGVhZCB0byB1bmRldGVjdGVkCisJICogZGVh ZGxvY2suCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIGZpbGVzZXQgc3RhdGUgY2FuIGJlIEZTX1NF UklBTElaRV9ET05FIG9uY2UgdGhlIGxlYWRlcgorCSAqIHdvcmtlciBoYXMgZmluaXNoZWQgc2Vy aWFsaXppbmcgdGhlIGNoYW5nZXMuCisJICovCisJaWYgKGZpbGVzZXRfc3RhdGUgPT0gRlNfU0VS SUFMSVpFX0lOX1BST0dSRVNTKQorCXsKKwkJcGFfbG9ja19zdHJlYW0oTXlQYXJhbGxlbFNoYXJl ZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlwYV91bmxvY2tfc3RyZWFtKE15UGFyYWxsZWxT aGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlmaWxlc2V0X3N0YXRlID0gcGFfZ2V0 X2ZpbGVzZXRfc3RhdGUoKTsKKwl9CisKKwkvKgorCSAqIFdlIGNhbm5vdCByZWFkIHRoZSBmaWxl IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsZWFkZXIgaGFzIHNlcmlhbGl6ZWQgYWxsCisJICogY2hh bmdlcyB0byB0aGUgZmlsZSBiZWNhdXNlIHRoZXJlIG1heSBzdGlsbCBiZSBtZXNzYWdlcyBpbiB0 aGUgbWVtb3J5CisJICogcXVldWUuIFdlIHdpbGwgYXBwbHkgYWxsIHNwb29sZWQgbWVzc2FnZXMg dGhlIG5leHQgdGltZSB3ZSBjYWxsIHRoaXMKKwkgKiBmdW5jdGlvbiBhbmQgdGhhdCB3aWxsIGVu c3VyZSB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgbGVmdCBpbiB0aGUgbWVtb3J5CisJICogcXVldWUu CisJICovCisJaWYgKGZpbGVzZXRfc3RhdGUgPT0gRlNfU0VSSUFMSVpFX0RPTkUpCisJeworCQlw YV9zZXRfZmlsZXNldF9zdGF0ZShNeVBhcmFsbGVsU2hhcmVkLCBGU19SRUFEWSk7CisJfQorCWVs c2UgaWYgKGZpbGVzZXRfc3RhdGUgPT0gRlNfUkVBRFkpCisJeworCQlhcHBseV9zcG9vbGVkX21l c3NhZ2VzKCZNeVBhcmFsbGVsU2hhcmVkLT5maWxlc2V0LAorCQkJCQkJCSAgIE15UGFyYWxsZWxT aGFyZWQtPnhpZCwKKwkJCQkJCQkgICBJbnZhbGlkWExvZ1JlY1B0cik7CisJCXBhX3NldF9maWxl c2V0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIEZTX0VNUFRZKTsKKwl9Cit9CisKKy8qCisgKiBJ bnRlcnJ1cHQgaGFuZGxlciBmb3IgbWFpbiBsb29wIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4K KyAqLworc3RhdGljIHZvaWQKK1Byb2Nlc3NQYXJhbGxlbEFwcGx5SW50ZXJydXB0cyh2b2lkKQor eworCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwlpZiAoU2h1dGRvd25SZXF1ZXN0UGVuZGlu ZykKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24g cGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIGhhcyBmaW5pc2hl ZCIsCisJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKworCQlwcm9jX2V4aXQoMCk7CisJ fQorCisJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCisJeworCQlDb25maWdSZWxvYWRQZW5kaW5n ID0gZmFsc2U7CisJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOworCX0KK30KKworLyog UGFyYWxsZWwgYXBwbHkgd29ya2VyIG1haW4gbG9vcC4gKi8KK3N0YXRpYyB2b2lkCitMb2dpY2Fs UGFyYWxsZWxBcHBseUxvb3Aoc2htX21xX2hhbmRsZSAqbXFoKQoreworCXNobV9tcV9yZXN1bHQg c2htcV9yZXM7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJTWVtb3J5Q29u dGV4dCBvbGRjeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCS8qCisJICogSW5pdCB0aGUg QXBwbHlNZXNzYWdlQ29udGV4dCB3aGljaCB3ZSBjbGVhbiB1cCBhZnRlciBlYWNoIHJlcGxpY2F0 aW9uCisJICogcHJvdG9jb2wgbWVzc2FnZS4KKwkgKi8KKwlBcHBseU1lc3NhZ2VDb250ZXh0ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSJBcHBseU1l c3NhZ2VDb250ZXh0IiwKKwkJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJ LyoKKwkgKiBQdXNoIGFwcGx5IGVycm9yIGNvbnRleHQgY2FsbGJhY2suIEZpZWxkcyB3aWxsIGJl IGZpbGxlZCB3aGlsZSBhcHBseWluZworCSAqIGEgY2hhbmdlLgorCSAqLworCWVycmNhbGxiYWNr LmNhbGxiYWNrID0gYXBwbHlfZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2sucHJldmlvdXMg PSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJh Y2s7CisKKwlmb3IgKDs7KQorCXsKKwkJdm9pZAkgICAqZGF0YTsKKwkJU2l6ZQkJbGVuOworCisJ CVByb2Nlc3NQYXJhbGxlbEFwcGx5SW50ZXJydXB0cygpOworCisJCS8qIEVuc3VyZSB3ZSBhcmUg cmVhZGluZyB0aGUgZGF0YSBpbnRvIG91ciBtZW1vcnkgY29udGV4dC4gKi8KKwkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKEFwcGx5TWVzc2FnZUNvbnRleHQpOworCisJCXNobXFfcmVzID0gc2htX21x X3JlY2VpdmUobXFoLCAmbGVuLCAmZGF0YSwgdHJ1ZSk7CisKKwkJaWYgKHNobXFfcmVzID09IFNI TV9NUV9TVUNDRVNTKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBzOworCQkJaW50CQkJYzsKKwor CQkJaWYgKGxlbiA9PSAwKQorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIG1lc3NhZ2UgbGVuZ3Ro Iik7CisKKwkJCXMuY3Vyc29yID0gMDsKKwkJCXMubWF4bGVuID0gLTE7CisJCQlzLmRhdGEgPSAo Y2hhciAqKSBkYXRhOworCQkJcy5sZW4gPSBsZW47CisKKwkJCS8qCisJCQkgKiBUaGUgZmlyc3Qg Ynl0ZSBvZiBtZXNzYWdlcyBzZW50IGZyb20gbGVhZGVyIGFwcGx5IHdvcmtlciB0bworCQkJICog cGFyYWxsZWwgYXBwbHkgd29ya2VycyBjYW4gb25seSBiZSAndycuCisJCQkgKi8KKwkJCWMgPSBw cV9nZXRtc2dieXRlKCZzKTsKKwkJCWlmIChjICE9ICd3JykKKwkJCQllbG9nKEVSUk9SLCAidW5l eHBlY3RlZCBtZXNzYWdlIFwiJWNcIiIsIGMpOworCisJCQkvKgorCQkJICogSWdub3JlIHN0YXRp c3RpY3MgZmllbGRzIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgdGhlIGxlYWRlcgorCQkJICog YXBwbHkgd29ya2VyLgorCQkJICoKKwkJCSAqIFhYWCBXZSBjYW4gYXZvaWQgc2VuZGluZyB0aGUg c3RhdGlzdGljcyBmaWVsZHMgZnJvbSB0aGUgbGVhZGVyCisJCQkgKiBhcHBseSB3b3JrZXIgYnV0 IGZvciB0aGF0LCBpdCBuZWVkcyB0byByZWJ1aWxkIHRoZSBlbnRpcmUKKwkJCSAqIG1lc3NhZ2Ug YnkgcmVtb3ZpbmcgdGhlc2UgZmllbGRzIHdoaWNoIGNvdWxkIGJlIG1vcmUgd29yayB0aGFuCisJ CQkgKiBzaW1wbHkgaWdub3JpbmcgdGhlc2UgZmllbGRzIGluIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIuCisJCQkgKi8KKwkJCXMuY3Vyc29yICs9IFNJWkVfU1RBVFNfTUVTU0FHRTsKKworCQkJ YXBwbHlfZGlzcGF0Y2goJnMpOworCQl9CisJCWVsc2UgaWYgKHNobXFfcmVzID09IFNITV9NUV9X T1VMRF9CTE9DSykKKwkJeworCQkJLyogUmVwbGF5IHRoZSBjaGFuZ2VzIGZyb20gdGhlIGZpbGUs IGlmIGFueS4gKi8KKwkJCWlmIChwYV9oYXNfc3Bvb2xlZF9tZXNzYWdlX3BlbmRpbmcoKSkKKwkJ CXsKKwkJCQlwYV9zcG9vbGVkX21lc3NhZ2VzKCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ aW50CQkJcmM7CisKKwkJCQkvKiBXYWl0IGZvciBtb3JlIHdvcmsuICovCisJCQkJcmMgPSBXYWl0 TGF0Y2goTXlMYXRjaCwKKwkJCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xf RVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgICAxMDAwTCwKKwkJCQkJCQkgICBXQUlUX0VWRU5U X0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfTUFJTik7CisKKwkJCQlpZiAocmMgJiBXTF9MQVRDSF9T RVQpCisJCQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJ CQlBc3NlcnQoc2htcV9yZXMgPT0gU0hNX01RX0RFVEFDSEVEKTsKKworCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFU RSksCisJCQkJCSBlcnJtc2coImxvc3QgY29ubmVjdGlvbiB0byB0aGUgbG9naWNhbCByZXBsaWNh dGlvbiBhcHBseSB3b3JrZXIiKSkpOworCQl9CisKKwkJTWVtb3J5Q29udGV4dFJlc2V0KEFwcGx5 TWVzc2FnZUNvbnRleHQpOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwl9CisK KwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2suICovCisJZXJyb3JfY29udGV4dF9zdGFj ayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4 dCk7Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgdHJpZXMg dG8gcmVhZCBmcm9tIG91ciBlcnJvciBxdWV1ZSBvbmUgbW9yZQorICogdGltZS4gVGhpcyBndWFy ZHMgYWdhaW5zdCB0aGUgY2FzZSB3aGVyZSB3ZSBleGl0IHVuY2xlYW5seSB3aXRob3V0IHNlbmRp bmcKKyAqIGFuIEVycm9yUmVzcG9uc2UsIGZvciBleGFtcGxlIGJlY2F1c2Ugc29tZSBjb2RlIGNh bGxzIHByb2NfZXhpdCBkaXJlY3RseS4KKyAqLworc3RhdGljIHZvaWQKK3BhX3NodXRkb3duKGlu dCBjb2RlLCBEYXR1bSBhcmcpCit7CisJU2VuZFByb2NTaWduYWwoTXlMb2dpY2FsUmVwV29ya2Vy LT5hcHBseV9sZWFkZXJfcGlkLAorCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FH RSwKKwkJCQkgICBJbnZhbGlkQmFja2VuZElkKTsKKworCWRzbV9kZXRhY2goKGRzbV9zZWdtZW50 ICopIERhdHVtR2V0UG9pbnRlcihhcmcpKTsKK30KKworLyoKKyAqIFBhcmFsbGVsIGFwcGx5IHdv cmtlciBlbnRyeSBwb2ludC4KKyAqLwordm9pZAorUGFyYWxsZWxBcHBseVdvcmtlck1haW4oRGF0 dW0gbWFpbl9hcmcpCit7CisJUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqc2hhcmVkOworCWRz bV9oYW5kbGUJaGFuZGxlOworCWRzbV9zZWdtZW50ICpzZWc7CisJc2htX3RvYyAgICAqdG9jOwor CXNobV9tcQkgICAqbXE7CisJc2htX21xX2hhbmRsZSAqbXFoOworCXNobV9tcV9oYW5kbGUgKmVy cm9yX21xaDsKKwlSZXBPcmlnaW5JZCBvcmlnaW5pZDsKKwlpbnQJCQl3b3JrZXJfc2xvdCA9IERh dHVtR2V0SW50MzIobWFpbl9hcmcpOworCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5dOwor CisJLyogU2V0dXAgc2lnbmFsIGhhbmRsaW5nLiAqLworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFs SGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7CisJcHFzaWduYWwoU0lHSU5ULCBTaWduYWxIYW5kbGVy Rm9yU2h1dGRvd25SZXF1ZXN0KTsKKwlwcXNpZ25hbChTSUdURVJNLCBkaWUpOworCUJhY2tncm91 bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIGR5bmFt aWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGZvciB0aGUgcGFyYWxsZWwgYXBwbHksIGFuZAorCSAq IGZpbmQgaXRzIHRhYmxlIG9mIGNvbnRlbnRzLgorCSAqCisJICogTGlrZSBwYXJhbGxlbCBxdWVy eSwgd2UgZG9uJ3QgbmVlZCByZXNvdXJjZSBvd25lciBieSB0aGlzIHRpbWUuIFNlZQorCSAqIFBh cmFsbGVsV29ya2VyTWFpbi4KKwkgKi8KKwltZW1jcHkoJmhhbmRsZSwgTXlCZ3dvcmtlckVudHJ5 LT5iZ3dfZXh0cmEsIHNpemVvZihkc21faGFuZGxlKSk7CisJc2VnID0gZHNtX2F0dGFjaChoYW5k bGUpOworCWlmICghc2VnKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf T0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInVuYWJsZSB0 byBtYXAgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiKSkpOworCisJdG9jID0gc2htX3Rv Y19hdHRhY2goUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMsIGRzbV9zZWdtZW50X2FkZHJlc3Mo c2VnKSk7CisJaWYgKCF0b2MpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygiYmFkIG1h Z2ljIG51bWJlciBpbiBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIpKSk7CisKKwliZWZv cmVfc2htZW1fZXhpdChwYV9zaHV0ZG93biwgUG9pbnRlckdldERhdHVtKHNlZykpOworCisJLyog TG9vayB1cCB0aGUgc2hhcmVkIGluZm9ybWF0aW9uLiAqLworCXNoYXJlZCA9IHNobV90b2NfbG9v a3VwKHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX1NIQVJFRCwgZmFsc2UpOworCU15UGFyYWxsZWxT aGFyZWQgPSBzaGFyZWQ7CisKKwkvKgorCSAqIEF0dGFjaCB0byB0aGUgbWVzc2FnZSBxdWV1ZS4K KwkgKi8KKwltcSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX01RLCBm YWxzZSk7CisJc2htX21xX3NldF9yZWNlaXZlcihtcSwgTXlQcm9jKTsKKwltcWggPSBzaG1fbXFf YXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJLyoKKwkgKiBQcmltYXJ5IGluaXRpYWxpemF0aW9u IGlzIGNvbXBsZXRlLiBOb3csIHdlIGNhbiBhdHRhY2ggdG8gb3VyIHNsb3QuCisJICogVGhpcyBp cyB0byBlbnN1cmUgdGhhdCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBkb2VzIG5vdCB3cml0ZSBk YXRhIHRvCisJICogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHF1ZXVlLgorCSAqLworCWxvZ2lj YWxyZXBfd29ya2VyX2F0dGFjaCh3b3JrZXJfc2xvdCk7CisKKwlTcGluTG9ja0FjcXVpcmUoJk15 UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsKKwlNeVBhcmFsbGVsU2hhcmVkLT5sb2dpY2FscmVwX3dv cmtlcl9nZW5lcmF0aW9uID0gTXlMb2dpY2FsUmVwV29ya2VyLT5nZW5lcmF0aW9uOworCU15UGFy YWxsZWxTaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX3Nsb3Rfbm8gPSB3b3JrZXJfc2xvdDsKKwlT cGluTG9ja1JlbGVhc2UoJk15UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsKKworCS8qCisJICogQXR0 YWNoIHRvIHRoZSBlcnJvciBxdWV1ZS4KKwkgKi8KKwltcSA9IHNobV90b2NfbG9va3VwKHRvYywg UEFSQUxMRUxfQVBQTFlfS0VZX0VSUk9SX1FVRVVFLCBmYWxzZSk7CisJc2htX21xX3NldF9zZW5k ZXIobXEsIE15UHJvYyk7CisJZXJyb3JfbXFoID0gc2htX21xX2F0dGFjaChtcSwgc2VnLCBOVUxM KTsKKworCXBxX3JlZGlyZWN0X3RvX3NobV9tcShzZWcsIGVycm9yX21xaCk7CisJcHFfc2V0X3Bh cmFsbGVsX2xlYWRlcihNeUxvZ2ljYWxSZXBXb3JrZXItPmFwcGx5X2xlYWRlcl9waWQsCisJCQkJ CQkgICBJbnZhbGlkQmFja2VuZElkKTsKKworCU15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9zZW5k X3RpbWUgPSBNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3RfcmVjdl90aW1lID0KKwkJTXlMb2dpY2Fs UmVwV29ya2VyLT5yZXBseV90aW1lID0gMDsKKworCUluaXRpYWxpemVBcHBseVdvcmtlcigpOwor CisJLyogU2V0dXAgcmVwbGljYXRpb24gb3JpZ2luIHRyYWNraW5nLiAqLworCVN0YXJ0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisJUmVwbGljYXRpb25PcmlnaW5OYW1lRm9yTG9naWNhbFJlcChNeVN1 YnNjcmlwdGlvbi0+b2lkLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJICAgb3JpZ2lubmFtZSwgc2l6 ZW9mKG9yaWdpbm5hbWUpKTsKKwlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5u YW1lLCBmYWxzZSk7CisKKwkvKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZG9lc24n dCBuZWVkIHRvIG1vbm9wb2xpemUgdGhpcyByZXBsaWNhdGlvbgorCSAqIG9yaWdpbiB3aGljaCB3 YXMgYWxyZWFkeSBhY3F1aXJlZCBieSBpdHMgbGVhZGVyIHByb2Nlc3MuCisJICovCisJcmVwbG9y aWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCBNeUxvZ2ljYWxSZXBXb3JrZXItPmFwcGx5X2xl YWRlcl9waWQpOworCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW5pZDsKKwlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICogU2V0dXAgY2FsbGJhY2sgZm9yIHN5 c2NhY2hlIHNvIHRoYXQgd2Uga25vdyB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzIGluCisJICogdGhl IHN1YnNjcmlwdGlvbiByZWxhdGlvbiBzdGF0ZS4KKwkgKi8KKwlDYWNoZVJlZ2lzdGVyU3lzY2Fj aGVDYWxsYmFjayhTVUJTQ1JJUFRJT05SRUxNQVAsCisJCQkJCQkJCSAgaW52YWxpZGF0ZV9zeW5j aW5nX3RhYmxlX3N0YXRlcywKKwkJCQkJCQkJICAoRGF0dW0pIDApOworCisJc2V0X2FwcGx5X2Vy cm9yX2NvbnRleHRfb3JpZ2luKG9yaWdpbm5hbWUpOworCisJTG9naWNhbFBhcmFsbGVsQXBwbHlM b29wKG1xaCk7CisKKwkvKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgbXVzdCBub3Qg Z2V0IGhlcmUgYmVjYXVzZSB0aGUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgd2lsbCBvbmx5 IHN0b3Agd2hlbiBpdCByZWNlaXZlcyBhIFNJR1RFUk0gb3IgU0lHSU5UIGZyb20gdGhlCisJICog bGVhZGVyLCBvciB3aGVuIHRoZXJlIHRoZXJlIGlzIGFuIGVycm9yLiBOb25lIG9mIHRoZXNlIGNh c2VzIHdpbGwgYWxsb3cKKwkgKiB0aGUgY29kZSB0byByZWFjaCBoZXJlLgorCSAqLworCUFzc2Vy dChmYWxzZSk7Cit9CisKKy8qCisgKiBIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5k aWNhdGluZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBtZXNzYWdlLgorICoKKyAqIE5vdGU6IHRo aXMgaXMgY2FsbGVkIHdpdGhpbiBhIHNpZ25hbCBoYW5kbGVyISBBbGwgd2UgY2FuIGRvIGlzIHNl dCBhIGZsYWcKKyAqIHRoYXQgd2lsbCBjYXVzZSB0aGUgbmV4dCBDSEVDS19GT1JfSU5URVJSVVBU UygpIHRvIGludm9rZQorICogSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VzKCkuCisgKi8KK3Zv aWQKK0hhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KHZvaWQpCit7CisJSW50ZXJy dXB0UGVuZGluZyA9IHRydWU7CisJUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gdHJ1ZTsK KwlTZXRMYXRjaChNeUxhdGNoKTsKK30KKworLyoKKyAqIEhhbmRsZSBhIHNpbmdsZSBwcm90b2Nv bCBtZXNzYWdlIHJlY2VpdmVkIGZyb20gYSBzaW5nbGUgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtl ci4KKyAqLworc3RhdGljIHZvaWQKK0hhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlKFN0cmluZ0lu Zm8gbXNnKQoreworCWNoYXIJCW1zZ3R5cGU7CisKKwltc2d0eXBlID0gcHFfZ2V0bXNnYnl0ZSht c2cpOworCisJc3dpdGNoIChtc2d0eXBlKQorCXsKKwkJY2FzZSAnRSc6CQkJCS8qIEVycm9yUmVz cG9uc2UgKi8KKwkJCXsKKwkJCQlFcnJvckRhdGEJZWRhdGE7CisKKwkJCQkvKiBQYXJzZSBFcnJv clJlc3BvbnNlLiAqLworCQkJCXBxX3BhcnNlX2Vycm9ybm90aWNlKG1zZywgJmVkYXRhKTsKKwor CQkJCS8qCisJCQkJICogSWYgZGVzaXJlZCwgYWRkIGEgY29udGV4dCBsaW5lIHRvIHNob3cgdGhh dCB0aGlzIGlzIGEKKwkJCQkgKiBtZXNzYWdlIHByb3BhZ2F0ZWQgZnJvbSBhIHBhcmFsbGVsIGFw cGx5IHdvcmtlci4gT3RoZXJ3aXNlLAorCQkJCSAqIGl0IGNhbiBzb21ldGltZXMgYmUgY29uZnVz aW5nIHRvIHVuZGVyc3RhbmQgd2hhdCBhY3R1YWxseQorCQkJCSAqIGhhcHBlbmVkLgorCQkJCSAq LworCQkJCWlmIChlZGF0YS5jb250ZXh0KQorCQkJCQllZGF0YS5jb250ZXh0ID0gcHNwcmludGYo IiVzXG4lcyIsIGVkYXRhLmNvbnRleHQsCisJCQkJCQkJCQkJCSBfKCJsb2dpY2FsIHJlcGxpY2F0 aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIpKTsKKwkJCQllbHNlCisJCQkJCWVkYXRhLmNvbnRl eHQgPSBwc3RyZHVwKF8oImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2Vy IikpOworCisJCQkJLyoKKwkJCQkgKiBDb250ZXh0IGJleW9uZCB0aGF0IHNob3VsZCB1c2UgdGhl IGVycm9yIGNvbnRleHQgY2FsbGJhY2tzCisJCQkJICogdGhhdCB3ZXJlIGluIGVmZmVjdCBpbiBM b2dpY2FsUmVwQXBwbHlMb29wKCkuCisJCQkJICovCisJCQkJZXJyb3JfY29udGV4dF9zdGFjayA9 IGFwcGx5X2Vycm9yX2NvbnRleHRfc3RhY2s7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBhY3R1YWwg ZXJyb3IgbXVzdCBoYXZlIGJlZW4gcmVwb3J0ZWQgYnkgdGhlIHBhcmFsbGVsCisJCQkJICogYXBw bHkgd29ya2VyLgorCQkJCSAqLworCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJCSBlcnJtc2co ImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGV4aXRlZCBkdWUgdG8g ZXJyb3IiKSwKKwkJCQkJCSBlcnJjb250ZXh0KCIlcyIsIGVkYXRhLmNvbnRleHQpKSk7CisJCQl9 CisKKwkJCS8qCisJCQkgKiBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGFib3V0IE5vdGljZVJl c3BvbnNlIGFuZAorCQkJICogTm90aWZ5UmVzcG9uc2UgYXMgdGhlIGxvZ2ljYWwgcmVwbGljYXRp b24gd29ya2VyIGRvZXNuJ3QgbmVlZAorCQkJICogdG8gc2VuZCBtZXNzYWdlcyB0byB0aGUgY2xp ZW50LgorCQkJICovCisJCWNhc2UgJ04nOgorCQljYXNlICdBJzoKKwkJCWJyZWFrOworCisJCWRl ZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG1lc3NhZ2UgdHlwZSByZWNlaXZl ZCBmcm9tIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyOiAlYyAobWVz c2FnZSBsZW5ndGggJWQgYnl0ZXMpIiwKKwkJCQkgbXNndHlwZSwgbXNnLT5sZW4pOworCX0KK30K KworLyoKKyAqIEhhbmRsZSBhbnkgcXVldWVkIHByb3RvY29sIG1lc3NhZ2VzIHJlY2VpdmVkIGZy b20gcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKyAqLwordm9pZAorSGFuZGxlUGFyYWxsZWxBcHBs eU1lc3NhZ2VzKHZvaWQpCit7CisJTGlzdENlbGwgICAqbGM7CisJTWVtb3J5Q29udGV4dCBvbGRj b250ZXh0OworCisJc3RhdGljIE1lbW9yeUNvbnRleHQgaHBhbV9jb250ZXh0ID0gTlVMTDsKKwor CS8qCisJICogVGhpcyBpcyBpbnZva2VkIGZyb20gUHJvY2Vzc0ludGVycnVwdHMoKSwgYW5kIHNp bmNlIHNvbWUgb2YgdGhlCisJICogZnVuY3Rpb25zIGl0IGNhbGxzIGNvbnRhaW4gQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKSwgdGhlcmUgaXMgYSBwb3RlbnRpYWwKKwkgKiBmb3IgcmVjdXJzaXZlIGNh bGxzIGlmIG1vcmUgc2lnbmFscyBhcmUgcmVjZWl2ZWQgd2hpbGUgdGhpcyBydW5zLiBJdCdzCisJ ICogdW5jbGVhciB0aGF0IHJlY3Vyc2l2ZSBlbnRyeSB3b3VsZCBiZSBzYWZlLCBhbmQgaXQgZG9l c24ndCBzZWVtIHVzZWZ1bAorCSAqIGV2ZW4gaWYgaXQgaXMgc2FmZSwgc28gbGV0J3MgYmxvY2sg aW50ZXJydXB0cyB1bnRpbCBkb25lLgorCSAqLworCUhPTERfSU5URVJSVVBUUygpOworCisJLyoK KwkgKiBNb3Jlb3ZlciwgQ3VycmVudE1lbW9yeUNvbnRleHQgbWlnaHQgYmUgcG9pbnRpbmcgYWxt b3N0IGFueXdoZXJlLiBXZQorCSAqIGRvbid0IHdhbnQgdG8gcmlzayBsZWFraW5nIGRhdGEgaW50 byBsb25nLWxpdmVkIGNvbnRleHRzLCBzbyBsZXQncyBkbworCSAqIG91ciB3b3JrIGhlcmUgaW4g YSBwcml2YXRlIGNvbnRleHQgdGhhdCB3ZSBjYW4gcmVzZXQgb24gZWFjaCB1c2UuCisJICovCisJ aWYgKCFocGFtX2NvbnRleHQpCQkJLyogZmlyc3QgdGltZSB0aHJvdWdoPyAqLworCQlocGFtX2Nv bnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJ CQkJICJIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMiLAorCQkJCQkJCQkJCQkgQUxMT0NTRVRf REVGQVVMVF9TSVpFUyk7CisJZWxzZQorCQlNZW1vcnlDb250ZXh0UmVzZXQoaHBhbV9jb250ZXh0 KTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaHBhbV9jb250ZXh0KTsK KworCVBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZyA9IGZhbHNlOworCisJZm9yZWFjaChsYywg UGFyYWxsZWxBcHBseVdvcmtlclBvb2wpCisJeworCQlzaG1fbXFfcmVzdWx0IHJlczsKKwkJU2l6 ZQkJbmJ5dGVzOworCQl2b2lkCSAgICpkYXRhOworCQlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAq d2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgbGZpcnN0KGxjKTsKKworCQkvKgor CQkgKiBUaGUgbGVhZGVyIHdpbGwgZGV0YWNoIGZyb20gdGhlIGVycm9yIHF1ZXVlIGFuZCBzZXQg aXQgdG8gTlVMTAorCQkgKiBiZWZvcmUgcHJlcGFyaW5nIHRvIHN0b3AgYWxsIHBhcmFsbGVsIGFw cGx5IHdvcmtlcnMsIHNvIHdlIGRvbid0CisJCSAqIG5lZWQgdG8gaGFuZGxlIGVycm9yIG1lc3Nh Z2VzIGFueW1vcmUuIFNlZQorCQkgKiBsb2dpY2FscmVwX3dvcmtlcl9kZXRhY2guCisJCSAqLwor CQlpZiAoIXdpbmZvLT5lcnJvcl9tcV9oYW5kbGUpCisJCQljb250aW51ZTsKKworCQlyZXMgPSBz aG1fbXFfcmVjZWl2ZSh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlLCAmbmJ5dGVzLCAmZGF0YSwgdHJ1 ZSk7CisKKwkJaWYgKHJlcyA9PSBTSE1fTVFfV09VTERfQkxPQ0spCisJCQljb250aW51ZTsKKwkJ ZWxzZSBpZiAocmVzID09IFNITV9NUV9TVUNDRVNTKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBt c2c7CisKKwkJCWluaXRTdHJpbmdJbmZvKCZtc2cpOworCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5m bygmbXNnLCBkYXRhLCBuYnl0ZXMpOworCQkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2UoJm1z Zyk7CisJCQlwZnJlZShtc2cuZGF0YSk7CisJCX0KKwkJZWxzZQorCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSks CisJCQkJCSBlcnJtc2coImxvc3QgY29ubmVjdGlvbiB0byB0aGUgbG9naWNhbCByZXBsaWNhdGlv biBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKSkpOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjb250ZXh0KTsKKworCS8qIE1pZ2h0IGFzIHdlbGwgY2xlYXIgdGhlIGNvbnRleHQgb24g b3VyIHdheSBvdXQgKi8KKwlNZW1vcnlDb250ZXh0UmVzZXQoaHBhbV9jb250ZXh0KTsKKworCVJF U1VNRV9JTlRFUlJVUFRTKCk7Cit9CisKKy8qCisgKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzcGVj aWZpZWQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHZpYSBzaGFyZWQtbWVtb3J5CisgKiBxdWV1ZS4K KyAqCisgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIGF0dGVtcHQgdG8gc2VuZCBkYXRhIHZpYSBzaGFy ZWQgbWVtb3J5IHRpbWVzIG91dCwgdHJ1ZQorICogb3RoZXJ3aXNlLgorICovCitib29sCitwYV9z ZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRlcywgY29u c3Qgdm9pZCAqZGF0YSkKK3sKKwlpbnQJCQlyYzsKKwlzaG1fbXFfcmVzdWx0IHJlc3VsdDsKKwlU aW1lc3RhbXBUeiBzdGFydFRpbWUgPSAwOworCisJQXNzZXJ0KCFJc1RyYW5zYWN0aW9uU3RhdGUo KSk7CisJQXNzZXJ0KCF3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpOworCisvKgorICogVGhpcyB0 aW1lb3V0IGlzIGEgYml0IGFyYml0cmFyeSBidXQgdGVzdGluZyByZXZlYWxlZCB0aGF0IGl0IGlz IHN1ZmZpY2llbnQKKyAqIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdW5sZXNzIHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXIgaXMgd2FpdGluZyBvbiBzb21lCisgKiBsb2NrIG9yIHRoZXJlIGlzIGEgc2Vy aW91cyByZXNvdXJjZSBjcnVuY2guIFNlZSB0aGUgY29tbWVudHMgYXRvcCB0aGlzIGZpbGUKKyAq IHRvIGtub3cgd2h5IHdlIGFyZSB1c2luZyBhIG5vbi1ibG9ja2luZyB3YXkgdG8gc2VuZCB0aGUg bWVzc2FnZS4KKyAqLworI2RlZmluZSBTSE1fU0VORF9SRVRSWV9JTlRFUlZBTF9NUyAxMDAwCisj ZGVmaW5lIFNITV9TRU5EX1RJTUVPVVRfTVMJCSgxMDAwMCAtIFNITV9TRU5EX1JFVFJZX0lOVEVS VkFMX01TKQorCisJZm9yICg7OykKKwl7CisJCXJlc3VsdCA9IHNobV9tcV9zZW5kKHdpbmZvLT5t cV9oYW5kbGUsIG5ieXRlcywgZGF0YSwgdHJ1ZSwgdHJ1ZSk7CisKKwkJaWYgKHJlc3VsdCA9PSBT SE1fTVFfU1VDQ0VTUykKKwkJCXJldHVybiB0cnVlOworCQllbHNlIGlmIChyZXN1bHQgPT0gU0hN X01RX0RFVEFDSEVEKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9P QkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImNvdWxkIG5v dCBzZW5kIGRhdGEgdG8gc2hhcmVkLW1lbW9yeSBxdWV1ZSIpKSk7CisKKwkJQXNzZXJ0KHJlc3Vs dCA9PSBTSE1fTVFfV09VTERfQkxPQ0spOworCisJCS8qIFdhaXQgYmVmb3JlIHJldHJ5aW5nLiAq LworCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNoLAorCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9U SU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJICAgU0hNX1NFTkRfUkVUUllfSU5U RVJWQUxfTVMsCisJCQkJCSAgIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9TVEFU RV9DSEFOR0UpOworCisJCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKKwkJeworCQkJUmVzZXRMYXRj aChNeUxhdGNoKTsKKwkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCX0KKworCQlpZiAoc3Rh cnRUaW1lID09IDApCisJCQlzdGFydFRpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisJCWVs c2UgaWYgKFRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHN0YXJ0VGltZSwgR2V0Q3VycmVudFRp bWVzdGFtcCgpLAorCQkJCQkJCQkJCQlTSE1fU0VORF9USU1FT1VUX01TKSkKKwkJeworCQkJZXJl cG9ydChMT0csCisJCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2Vy IHdpbGwgc2VyaWFsaXplIHRoZSByZW1haW5pbmcgY2hhbmdlcyBvZiByZW1vdGUgdHJhbnNhY3Rp b24gJXUgdG8gYSBmaWxlIiwKKwkJCQkJCQl3aW5mby0+c2hhcmVkLT54aWQpKSk7CisJCQlyZXR1 cm4gZmFsc2U7CisJCX0KKwl9Cit9CisKKy8qCisgKiBTd2l0Y2ggdG8gUEFSVElBTF9TRVJJQUxJ WkUgbW9kZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gLS0gdGhpcyBtZWFucworICogdGhh dCB0aGUgY3VycmVudCBkYXRhIGFuZCBhbnkgc3Vic2VxdWVudCBkYXRhIGZvciB0aGlzIHRyYW5z YWN0aW9uIHdpbGwgYmUKKyAqIHNlcmlhbGl6ZWQgdG8gYSBmaWxlLiBUaGlzIGlzIGRvbmUgdG8g cHJldmVudCBwb3NzaWJsZSBkZWFkbG9ja3Mgd2l0aAorICogYW5vdGhlciBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgKHJlZmVyIHRvIHRoZSBjb21tZW50cyBhdG9wIHRoaXMgZmlsZSkuCisgKi8KK3Zv aWQKK3BhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6ZShQYXJhbGxlbEFwcGx5V29ya2VySW5m byAqd2luZm8sCisJCQkJCQkJICAgYm9vbCBzdHJlYW1fbG9ja2VkKQoreworCS8qCisJICogVGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjb3VsZCBiZSBzdHVjayBmb3Igc29tZSByZWFzb24gKHNh eSB3YWl0aW5nCisJICogb24gc29tZSBsb2NrIGJ5IG90aGVyIGJhY2tlbmQpLCBzbyBzdG9wIHRy eWluZyB0byBzZW5kIGRhdGEgZGlyZWN0bHkgdG8KKwkgKiBpdCBhbmQgc3RhcnQgc2VyaWFsaXpp bmcgZGF0YSB0byB0aGUgZmlsZSBpbnN0ZWFkLgorCSAqLworCXdpbmZvLT5zZXJpYWxpemVfY2hh bmdlcyA9IHRydWU7CisKKwkvKiBJbml0aWFsaXplIHRoZSBzdHJlYW0gZmlsZXNldC4gKi8KKwlz dHJlYW1fc3RhcnRfaW50ZXJuYWwod2luZm8tPnNoYXJlZC0+eGlkLCB0cnVlKTsKKworCS8qCisJ ICogQWNxdWlyZXMgdGhlIHN0cmVhbSBsb2NrIGlmIG5vdCBhbHJlYWR5IHRvIG1ha2Ugc3VyZSB0 aGF0IHRoZSBwYXJhbGxlbAorCSAqIGFwcGx5IHdvcmtlciB3aWxsIHdhaXQgZm9yIHRoZSBsZWFk ZXIgdG8gcmVsZWFzZSB0aGUgc3RyZWFtIGxvY2sgdW50aWwKKwkgKiB0aGUgZW5kIG9mIHRoZSB0 cmFuc2FjdGlvbi4KKwkgKi8KKwlpZiAoIXN0cmVhbV9sb2NrZWQpCisJCXBhX2xvY2tfc3RyZWFt KHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwlwYV9zZXRfZmls ZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLCBGU19TRVJJQUxJWkVfSU5fUFJPR1JFU1MpOworfQor CisvKgorICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyJ3MgdHJhbnNhY3Rp b24gc3RhdGUgaGFzIHJlYWNoZWQgb3IKKyAqIGV4Y2VlZGVkIHRoZSBnaXZlbiB4YWN0X3N0YXRl LgorICovCitzdGF0aWMgdm9pZAorcGFfd2FpdF9mb3JfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5 V29ya2VySW5mbyAqd2luZm8sCisJCQkJCSAgIFBhcmFsbGVsVHJhbnNTdGF0ZSB4YWN0X3N0YXRl KQoreworCWZvciAoOzspCisJeworCQkvKgorCQkgKiBTdG9wIGlmIHRoZSB0cmFuc2FjdGlvbiBz dGF0ZSBoYXMgcmVhY2hlZCBvciBleGNlZWRlZCB0aGUgZ2l2ZW4KKwkJICogeGFjdF9zdGF0ZS4K KwkJICovCisJCWlmIChwYV9nZXRfeGFjdF9zdGF0ZSh3aW5mby0+c2hhcmVkKSA+PSB4YWN0X3N0 YXRlKQorCQkJYnJlYWs7CisKKwkJLyogV2FpdCB0byBiZSBzaWduYWxsZWQuICovCisJCSh2b2lk KSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwg V0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAxMEwsCisJCQkJCQkgV0FJVF9FVkVOVF9MT0dJ Q0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSk7CisKKwkJLyogUmVzZXQgdGhlIGxhdGNo IHNvIHdlIGRvbid0IHNwaW4uICovCisJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJLyogQW4g aW50ZXJydXB0IG1heSBoYXZlIG9jY3VycmVkIHdoaWxlIHdlIHdlcmUgd2FpdGluZy4gKi8KKwkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwl9Cit9CisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIncyB0cmFuc2FjdGlvbiBmaW5pc2hlcy4KKyAqLworc3RhdGlj IHZvaWQKK3BhX3dhaXRfZm9yX3hhY3RfZmluaXNoKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3 aW5mbykKK3sKKwkvKgorCSAqIFdhaXQgdW50aWwgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBz ZXQgdGhlIHN0YXRlIHRvCisJICogUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCB3aGljaCBtZWFucyBp dCBoYXMgYWNxdWlyZWQgdGhlIHRyYW5zYWN0aW9uCisJICogbG9jay4gVGhpcyBpcyB0byBwcmV2 ZW50IGxlYWRlciBhcHBseSB3b3JrZXIgZnJvbSBhY3F1aXJpbmcgdGhlCisJICogdHJhbnNhY3Rp b24gbG9jayBlYXJsaWVyIHRoYW4gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkgKi8KKwlw YV93YWl0X2Zvcl94YWN0X3N0YXRlKHdpbmZvLCBQQVJBTExFTF9UUkFOU19TVEFSVEVEKTsKKwor CS8qCisJICogV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIGxvY2sgdG8gYmUgcmVsZWFzZWQuIFRo aXMgaXMgcmVxdWlyZWQgdG8KKwkgKiBkZXRlY3QgZGVhZGxvY2sgYW1vbmcgbGVhZGVyIGFuZCBw YXJhbGxlbCBhcHBseSB3b3JrZXJzLiBSZWZlciB0byB0aGUKKwkgKiBjb21tZW50cyBhdG9wIHRo aXMgZmlsZS4KKwkgKi8KKwlwYV9sb2NrX3RyYW5zYWN0aW9uKHdpbmZvLT5zaGFyZWQtPnhpZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwlwYV91bmxvY2tfdHJhbnNhY3Rpb24od2luZm8tPnNoYXJlZC0+ eGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgc3RhdGUgYmVj b21lcyBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCBpbiBjYXNlIHRoZSBwYXJhbGxlbAorCSAqIGFw cGx5IHdvcmtlciBmYWlsZWQgd2hpbGUgYXBwbHlpbmcgY2hhbmdlcyBjYXVzaW5nIHRoZSBsb2Nr IHRvIGJlCisJICogcmVsZWFzZWQuCisJICovCisJaWYgKHBhX2dldF94YWN0X3N0YXRlKHdpbmZv LT5zaGFyZWQpICE9IFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAor CQkJCSBlcnJtc2coImxvc3QgY29ubmVjdGlvbiB0byB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBw YXJhbGxlbCBhcHBseSB3b3JrZXIiKSkpOworfQorCisvKgorICogU2V0IHRoZSB0cmFuc2FjdGlv biBzdGF0ZSBmb3IgYSBnaXZlbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKi8KK3ZvaWQKK3Bh X3NldF94YWN0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJ ICBQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0ZSkKK3sKKwlTcGluTG9ja0FjcXVpcmUoJndz aGFyZWQtPm11dGV4KTsKKwl3c2hhcmVkLT54YWN0X3N0YXRlID0geGFjdF9zdGF0ZTsKKwlTcGlu TG9ja1JlbGVhc2UoJndzaGFyZWQtPm11dGV4KTsKK30KKworLyoKKyAqIEdldCB0aGUgdHJhbnNh Y3Rpb24gc3RhdGUgZm9yIGEgZ2l2ZW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICovCitzdGF0 aWMgUGFyYWxsZWxUcmFuc1N0YXRlCitwYV9nZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29y a2VyU2hhcmVkICp3c2hhcmVkKQoreworCVBhcmFsbGVsVHJhbnNTdGF0ZSB4YWN0X3N0YXRlOwor CisJU3BpbkxvY2tBY3F1aXJlKCZ3c2hhcmVkLT5tdXRleCk7CisJeGFjdF9zdGF0ZSA9IHdzaGFy ZWQtPnhhY3Rfc3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZ3c2hhcmVkLT5tdXRleCk7CisKKwly ZXR1cm4geGFjdF9zdGF0ZTsKK30KKworLyoKKyAqIENhY2hlIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQKK3BhX3NldF9zdHJlYW1fYXBwbHlfd29ya2Vy KFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKK3sKKwlzdHJlYW1fYXBwbHlfd29ya2Vy ID0gd2luZm87Cit9CisKKy8qCisgKiBGb3JtIGEgdW5pcXVlIHNhdmVwb2ludCBuYW1lIGZvciB0 aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorICoKKyAqIE5vdGUgdGhhdCBkaWZmZXJlbnQgc3Vi c2NyaXB0aW9ucyBmb3IgcHVibGljYXRpb25zIG9uIGRpZmZlcmVudCBub2RlcyBjYW4KKyAqIHJl Y2VpdmUgc2FtZSByZW1vdGUgeGlkLCBzbyB3ZSBuZWVkIHRvIHVzZSBzdWJzY3JpcHRpb24gaWQg YWxvbmcgd2l0aCBpdC4KKyAqCisgKiBSZXR1cm4gdGhlIG5hbWUgaW4gdGhlIHN1cHBsaWVkIGJ1 ZmZlci4KKyAqLworc3RhdGljIHZvaWQKK3BhX3NhdmVwb2ludF9uYW1lKE9pZCBzdWJvaWQsIFRy YW5zYWN0aW9uSWQgeGlkLCBjaGFyICpzcG5hbWUsIFNpemUgc3pzcCkKK3sKKwlzbnByaW50Zihz cG5hbWUsIHN6c3AsICJwZ19zcF8ldV8ldSIsIHN1Ym9pZCwgeGlkKTsKK30KKworLyoKKyAqIERl ZmluZSBhIHNhdmVwb2ludCBmb3IgYSBzdWJ4YWN0IGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBp ZiBuZWVkZWQuCisgKgorICogVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjYW4gZmlndXJlIG91 dCBpZiBhIG5ldyBzdWJ0cmFuc2FjdGlvbiB3YXMKKyAqIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgaWYg dGhlIG5ldyBjaGFuZ2UgYXJyaXZlZCB3aXRoIGEgZGlmZmVyZW50IHhpZC4gSW4gdGhhdAorICog Y2FzZSBkZWZpbmUgYSBuYW1lZCBzYXZlcG9pbnQsIHNvIHRoYXQgd2UgYXJlIGFibGUgdG8gcm9s bGJhY2sgdG8gaXQKKyAqIGlmIHJlcXVpcmVkLgorICovCit2b2lkCitwYV9zdGFydF9zdWJ0cmFu cyhUcmFuc2FjdGlvbklkIGN1cnJlbnRfeGlkLCBUcmFuc2FjdGlvbklkIHRvcF94aWQpCit7CisJ aWYgKGN1cnJlbnRfeGlkICE9IHRvcF94aWQgJiYKKwkJIWxpc3RfbWVtYmVyX3hpZChzdWJ4YWN0 bGlzdCwgY3VycmVudF94aWQpKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJCWNoYXIJ CXNwbmFtZVtOQU1FREFUQUxFTl07CisKKwkJcGFfc2F2ZXBvaW50X25hbWUoTXlTdWJzY3JpcHRp b24tPm9pZCwgY3VycmVudF94aWQsCisJCQkJCQkgIHNwbmFtZSwgc2l6ZW9mKHNwbmFtZSkpOwor CisJCWVsb2coREVCVUcxLCAiZGVmaW5pbmcgc2F2ZXBvaW50ICVzIGluIGxvZ2ljYWwgcmVwbGlj YXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIiwgc3BuYW1lKTsKKworCQkvKiBXZSBtdXN0IGJl IGluIHRyYW5zYWN0aW9uIGJsb2NrIHRvIGRlZmluZSB0aGUgU0FWRVBPSU5ULiAqLworCQlpZiAo IUlzVHJhbnNhY3Rpb25CbG9jaygpKQorCQl7CisJCQlpZiAoIUlzVHJhbnNhY3Rpb25TdGF0ZSgp KQorCQkJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJCUJlZ2luVHJhbnNhY3Rpb25C bG9jaygpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCX0KKworCQlEZWZpbmVT YXZlcG9pbnQoc3BuYW1lKTsKKworCQkvKgorCQkgKiBDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQg aXMgbmVlZGVkIHRvIHN0YXJ0IGEgc3VidHJhbnNhY3Rpb24gYWZ0ZXIKKwkJICogaXNzdWluZyBh IFNBVkVQT0lOVCBpbnNpZGUgYSB0cmFuc2FjdGlvbiBibG9jayAoc2VlCisJCSAqIFN0YXJ0U3Vi VHJhbnNhY3Rpb24oKSkuCisJCSAqLworCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwor CQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wVHJhbnNhY3Rpb25Db250ZXh0KTsK KwkJc3VieGFjdGxpc3QgPSBsYXBwZW5kX3hpZChzdWJ4YWN0bGlzdCwgY3VycmVudF94aWQpOwor CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKwl9Cit9CisKKy8qIFJlc2V0IHRoZSBs aXN0IHRoYXQgbWFpbnRhaW5zIHN1YnRyYW5zYWN0aW9ucy4gKi8KK3ZvaWQKK3BhX3Jlc2V0X3N1 YnRyYW5zKHZvaWQpCit7CisJLyoKKwkgKiBXZSBkb24ndCBuZWVkIHRvIGZyZWUgdGhpcyBleHBs aWNpdGx5IGFzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHdpbGwgYmUKKwkgKiBmcmVlZCBhdCB0aGUg dHJhbnNhY3Rpb24gZW5kLgorCSAqLworCXN1YnhhY3RsaXN0ID0gTklMOworfQorCisvKgorICog SGFuZGxlIFNUUkVBTSBBQk9SVCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIHdhcyBhcHBs aWVkIGluIGEgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlci4KKyAqLwordm9pZAorcGFfc3RyZWFt X2Fib3J0KExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFib3J0X2RhdGEpCit7CisJVHJhbnNh Y3Rpb25JZCB4aWQgPSBhYm9ydF9kYXRhLT54aWQ7CisJVHJhbnNhY3Rpb25JZCBzdWJ4aWQgPSBh Ym9ydF9kYXRhLT5zdWJ4aWQ7CisKKwkvKgorCSAqIFVwZGF0ZSBvcmlnaW4gc3RhdGUgc28gd2Ug Y2FuIHJlc3RhcnQgc3RyZWFtaW5nIGZyb20gY29ycmVjdCBwb3NpdGlvbgorCSAqIGluIGNhc2Ug b2YgY3Jhc2guCisJICovCisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24gPSBhYm9ydF9k YXRhLT5hYm9ydF9sc247CisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl90aW1lc3RhbXAgPSBh Ym9ydF9kYXRhLT5hYm9ydF90aW1lOworCisJLyoKKwkgKiBJZiB0aGUgdHdvIFhJRHMgYXJlIHRo ZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFjdCwgc28KKwkgKiBqdXN0 IGZyZWUgdGhlIHN1YnhhY3RsaXN0LgorCSAqLworCWlmIChzdWJ4aWQgPT0geGlkKQorCXsKKwkJ cGFfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfRklOSVNI RUQpOworCisJCS8qCisJCSAqIFJlbGVhc2UgdGhlIGxvY2sgYXMgd2UgbWlnaHQgYmUgcHJvY2Vz c2luZyBhbiBlbXB0eSBzdHJlYW1pbmcKKwkJICogdHJhbnNhY3Rpb24gaW4gd2hpY2ggY2FzZSB0 aGUgbG9jayB3b24ndCBiZSByZWxlYXNlZCBkdXJpbmcKKwkJICogdHJhbnNhY3Rpb24gcm9sbGJh Y2suCisJCSAqCisJCSAqIE5vdGUgdGhhdCBpdCdzIG9rIHRvIHJlbGVhc2UgdGhlIHRyYW5zYWN0 aW9uIGxvY2sgYmVmb3JlIGFib3J0aW5nCisJCSAqIHRoZSB0cmFuc2FjdGlvbiBiZWNhdXNlIGV2 ZW4gaWYgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBkaWVzIGR1ZQorCQkgKiB0byBjcmFzaCBv ciBzb21lIG90aGVyIHJlYXNvbiwgc3VjaCBhIHRyYW5zYWN0aW9uIHdvdWxkIHN0aWxsIGJlCisJ CSAqIGNvbnNpZGVyZWQgYWJvcnRlZCBhbnl3YXkuCisJCSAqLworCQlwYV91bmxvY2tfdHJhbnNh Y3Rpb24oeGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCQlBYm9ydEN1cnJlbnRUcmFuc2Fj dGlvbigpOworCisJCWlmIChJc1RyYW5zYWN0aW9uQmxvY2soKSkKKwkJeworCQkJRW5kVHJhbnNh Y3Rpb25CbG9jayhmYWxzZSk7CisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJfQor CisJCXBhX3Jlc2V0X3N1YnRyYW5zKCk7CisKKwkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFU RV9JRExFLCBOVUxMKTsKKwl9CisJZWxzZQorCXsKKwkJLyogT0ssIHNvIGl0J3MgYSBzdWJ4YWN0 LiBSb2xsYmFjayB0byB0aGUgc2F2ZXBvaW50LiAqLworCQlpbnQJCQlpOworCQljaGFyCQlzcG5h bWVbTkFNRURBVEFMRU5dOworCisJCXBhX3NhdmVwb2ludF9uYW1lKE15U3Vic2NyaXB0aW9uLT5v aWQsIHN1YnhpZCwgc3BuYW1lLCBzaXplb2Yoc3BuYW1lKSk7CisKKwkJZWxvZyhERUJVRzEsICJy b2xsaW5nIGJhY2sgdG8gc2F2ZXBvaW50ICVzIGluIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxs ZWwgYXBwbHkgd29ya2VyIiwgc3BuYW1lKTsKKworCQkvKgorCQkgKiBTZWFyY2ggdGhlIHN1Ynhh Y3RsaXN0LCBkZXRlcm1pbmUgdGhlIG9mZnNldCB0cmFja2VkIGZvciB0aGUKKwkJICogc3VieGFj dCwgYW5kIHRydW5jYXRlIHRoZSBsaXN0LgorCQkgKgorCQkgKiBOb3RlIHRoYXQgZm9yIGFuIGVt cHR5IHN1Yi10cmFuc2FjdGlvbiB3ZSB3b24ndCBmaW5kIHRoZSBzdWJ4aWQKKwkJICogaGVyZS4K KwkJICovCisJCWZvciAoaSA9IGxpc3RfbGVuZ3RoKHN1YnhhY3RsaXN0KSAtIDE7IGkgPj0gMDsg aS0tKQorCQl7CisJCQlUcmFuc2FjdGlvbklkIHhpZF90bXAgPSBsZmlyc3RfeGlkKGxpc3RfbnRo X2NlbGwoc3VieGFjdGxpc3QsIGkpKTsKKworCQkJaWYgKHhpZF90bXAgPT0gc3VieGlkKQorCQkJ eworCQkJCVJvbGxiYWNrVG9TYXZlcG9pbnQoc3BuYW1lKTsKKwkJCQlDb21taXRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKKwkJCQlzdWJ4YWN0bGlzdCA9IGxpc3RfdHJ1bmNhdGUoc3VieGFjdGxpc3Qs IGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCisvKgorICogU2V0IHRoZSBmaWxl c2V0IHN0YXRlIGZvciBhIHBhcnRpY3VsYXIgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBUaGUgZmls ZXNldAorICogd2lsbCBiZSBzZXQgb25jZSB0aGUgbGVhZGVyIHdvcmtlciBzZXJpYWxpemVkIGFs bCBjaGFuZ2VzIHRvIHRoZSBmaWxlCisgKiBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IHBhcmFs bGVsIGFwcGx5IHdvcmtlci4KKyAqLwordm9pZAorcGFfc2V0X2ZpbGVzZXRfc3RhdGUoUGFyYWxs ZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJIFBhcnRpYWxGaWxlU2V0U3RhdGUg ZmlsZXNldF9zdGF0ZSkKK3sKKwlTcGluTG9ja0FjcXVpcmUoJndzaGFyZWQtPm11dGV4KTsKKwl3 c2hhcmVkLT5maWxlc2V0X3N0YXRlID0gZmlsZXNldF9zdGF0ZTsKKworCWlmIChmaWxlc2V0X3N0 YXRlID09IEZTX1NFUklBTElaRV9ET05FKQorCXsKKwkJQXNzZXJ0KGFtX2xlYWRlcl9hcHBseV93 b3JrZXIoKSk7CisJCUFzc2VydChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0KTsK KwkJd3NoYXJlZC0+ZmlsZXNldCA9ICpNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0 OworCX0KKworCVNwaW5Mb2NrUmVsZWFzZSgmd3NoYXJlZC0+bXV0ZXgpOworfQorCisvKgorICog R2V0IHRoZSBmaWxlc2V0IHN0YXRlIGZvciB0aGUgY3VycmVudCBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIuCisgKi8KK3N0YXRpYyBQYXJ0aWFsRmlsZVNldFN0YXRlCitwYV9nZXRfZmlsZXNldF9zdGF0 ZSh2b2lkKQoreworCVBhcnRpYWxGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0ZTsKKworCUFzc2Vy dChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSk7CisKKwlTcGluTG9ja0FjcXVpcmUoJk15UGFy YWxsZWxTaGFyZWQtPm11dGV4KTsKKwlmaWxlc2V0X3N0YXRlID0gTXlQYXJhbGxlbFNoYXJlZC0+ ZmlsZXNldF9zdGF0ZTsKKwlTcGluTG9ja1JlbGVhc2UoJk15UGFyYWxsZWxTaGFyZWQtPm11dGV4 KTsKKworCXJldHVybiBmaWxlc2V0X3N0YXRlOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9u cyB0byBhY3F1aXJlIGFuZCByZWxlYXNlIGEgbG9jayBmb3IgZWFjaCBzdHJlYW0gYmxvY2suCisg KgorICogU2V0IGxvY2t0YWdfZmllbGQ0IHRvIFBBUkFMTEVMX0FQUExZX0xPQ0tfU1RSRUFNIHRv IGluZGljYXRlIHRoYXQgaXQncyBhCisgKiBzdHJlYW0gbG9jay4KKyAqCisgKiBSZWZlciB0byB0 aGUgY29tbWVudHMgYXRvcCB0aGlzIGZpbGUgdG8gc2VlIGhvdyB0aGUgc3RyZWFtIGxvY2sgaXMg dXNlZC4KKyAqLwordm9pZAorcGFfbG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tN T0RFIGxvY2ttb2RlKQoreworCUxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihNeUxvZ2lj YWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsCisJCQkJCQkJCSAgIFBBUkFMTEVMX0FQUExZX0xPQ0tf U1RSRUFNLCBsb2NrbW9kZSk7Cit9CisKK3ZvaWQKK3BhX3VubG9ja19zdHJlYW0oVHJhbnNhY3Rp b25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCVVubG9ja0FwcGx5VHJhbnNhY3Rpb25G b3JTZXNzaW9uKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCwKKwkJCQkJCQkJCSBQQVJB TExFTF9BUFBMWV9MT0NLX1NUUkVBTSwgbG9ja21vZGUpOworfQorCisvKgorICogSGVscGVyIGZ1 bmN0aW9ucyB0byBhY3F1aXJlIGFuZCByZWxlYXNlIGEgbG9jayBmb3IgZWFjaCBsb2NhbCB0cmFu c2FjdGlvbgorICogYXBwbHkuCisgKgorICogU2V0IGxvY2t0YWdfZmllbGQ0IHRvIFBBUkFMTEVM X0FQUExZX0xPQ0tfWEFDVCB0byBpbmRpY2F0ZSB0aGF0IGl0J3MgYQorICogdHJhbnNhY3Rpb24g bG9jay4KKyAqCisgKiBOb3RlIHRoYXQgYWxsIHRoZSBjYWxsZXJzIG11c3QgcGFzcyBhIHJlbW90 ZSB0cmFuc2FjdGlvbiBJRCBpbnN0ZWFkIG9mIGEKKyAqIGxvY2FsIHRyYW5zYWN0aW9uIElEIGFz IHhpZC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBsb2NhbCB0cmFuc2FjdGlvbiBJRCB3aWxsCisgKiBv bmx5IGJlIGFzc2lnbmVkIHdoaWxlIGFwcGx5aW5nIHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIHBh cmFsbGVsIGFwcGx5IGJ1dAorICogaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBmaXJzdCBjaGFuZ2Ug aW4gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBibG9ja2VkCisgKiBieSBhIGNvbmN1cnJl bnRseSBleGVjdXRpbmcgdHJhbnNhY3Rpb24gaW4gYW5vdGhlciBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIuIFdlCisgKiBjYW4gb25seSBjb21tdW5pY2F0ZSB0aGUgbG9jYWwgdHJhbnNhY3Rpb24gaWQg dG8gdGhlIGxlYWRlciBhZnRlciBhcHBseWluZworICogdGhlIGZpcnN0IGNoYW5nZSBzbyBpdCB3 b24ndCBiZSBhYmxlIHRvIHdhaXQgYWZ0ZXIgc2VuZGluZyB0aGUgeGFjdCBmaW5pc2gKKyAqIGNv bW1hbmQgdXNpbmcgdGhpcyBsb2NrLgorICoKKyAqIFJlZmVyIHRvIHRoZSBjb21tZW50cyBhdG9w IHRoaXMgZmlsZSB0byBzZWUgaG93IHRoZSB0cmFuc2FjdGlvbiBsb2NrIGlzCisgKiB1c2VkLgor ICovCit2b2lkCitwYV9sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9E RSBsb2NrbW9kZSkKK3sKKwlMb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCwgeGlkLAorCQkJCQkJCQkgICBQQVJBTExFTF9BUFBMWV9MT0NLX1hB Q1QsIGxvY2ttb2RlKTsKK30KKwordm9pZAorcGFfdW5sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0 aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlVbmxvY2tBcHBseVRyYW5zYWN0aW9u Rm9yU2Vzc2lvbihNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsCisJCQkJCQkJCQkgUEFS QUxMRUxfQVBQTFlfTE9DS19YQUNULCBsb2NrbW9kZSk7Cit9CisKKy8qCisgKiBEZWNyZW1lbnQg dGhlIG51bWJlciBvZiBwZW5kaW5nIHN0cmVhbWluZyBibG9ja3MgYW5kIHdhaXQgb24gdGhlIHN0 cmVhbSBsb2NrCisgKiBpZiB0aGVyZSBpcyBubyBwZW5kaW5nIGJsb2NrIGF2YWlsYWJsZS4KKyAq Lwordm9pZAorcGFfZGVjcl9hbmRfd2FpdF9zdHJlYW1fYmxvY2sodm9pZCkKK3sKKwlBc3NlcnQo YW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpOworCisJLyoKKwkgKiBJdCBpcyBvbmx5IHBvc3Np YmxlIHRvIG5vdCBoYXZlIGFueSBwZW5kaW5nIHN0cmVhbSBjaHVua3Mgd2hlbiB3ZSBhcmUKKwkg KiBhcHBseWluZyBzcG9vbGVkIG1lc3NhZ2VzLgorCSAqLworCWlmIChwZ19hdG9taWNfcmVhZF91 MzIoJk15UGFyYWxsZWxTaGFyZWQtPnBlbmRpbmdfc3RyZWFtX2NvdW50KSA9PSAwKQorCXsKKwkJ aWYgKHBhX2hhc19zcG9vbGVkX21lc3NhZ2VfcGVuZGluZygpKQorCQkJcmV0dXJuOworCisJCWVs b2coRVJST1IsICJpbnZhbGlkIHBlbmRpbmcgc3RyZWFtaW5nIGNodW5rIDAiKTsKKwl9CisKKwlp ZiAocGdfYXRvbWljX3N1Yl9mZXRjaF91MzIoJk15UGFyYWxsZWxTaGFyZWQtPnBlbmRpbmdfc3Ry ZWFtX2NvdW50LCAxKSA9PSAwKQorCXsKKwkJcGFfbG9ja19zdHJlYW0oTXlQYXJhbGxlbFNoYXJl ZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlwYV91bmxvY2tfc3RyZWFtKE15UGFyYWxsZWxT aGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9Cit9CisKKy8qCisgKiBGaW5pc2ggcHJv Y2Vzc2luZyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIGluIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyLgorICovCit2b2lkCitwYV94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAq d2luZm8sIFhMb2dSZWNQdHIgcmVtb3RlX2xzbikKK3sKKwlBc3NlcnQoYW1fbGVhZGVyX2FwcGx5 X3dvcmtlcigpKTsKKworCS8qCisJICogVW5sb2NrIHRoZSBzaGFyZWQgb2JqZWN0IGxvY2sgc28g dGhhdCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2FuCisJICogY29udGludWUgdG8gcmVjZWl2ZSBh bmQgYXBwbHkgY2hhbmdlcy4KKwkgKi8KKwlwYV91bmxvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQt PnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoYXQgd29y a2VyIHRvIGZpbmlzaC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gY29tbWl0CisJICog b3JkZXIgd2hpY2ggYXZvaWRzIGZhaWx1cmVzIGR1ZSB0byB0cmFuc2FjdGlvbiBkZXBlbmRlbmNp ZXMgYW5kCisJICogZGVhZGxvY2tzLgorCSAqLworCXBhX3dhaXRfZm9yX3hhY3RfZmluaXNoKHdp bmZvKTsKKworCWlmICghWExvZ1JlY1B0cklzSW52YWxpZChyZW1vdGVfbHNuKSkKKwkJc3RvcmVf Zmx1c2hfcG9zaXRpb24ocmVtb3RlX2xzbiwgd2luZm8tPnNoYXJlZC0+bGFzdF9jb21taXRfZW5k KTsKKworCXBhX2ZyZWVfd29ya2VyKHdpbmZvKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2RlY29kZS5jCmluZGV4IGMzYmM4ZWNjOTIuLmE1M2UyM2M2NzkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpAQCAtODIyLDEwICs4MjIsMTEgQEAgRGVj b2RlQWJvcnQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpi dWYsCiAJCWZvciAoaSA9IDA7IGkgPCBwYXJzZWQtPm5zdWJ4YWN0czsgaSsrKQogCQl7CiAJCQlS ZW9yZGVyQnVmZmVyQWJvcnQoY3R4LT5yZW9yZGVyLCBwYXJzZWQtPnN1YnhhY3RzW2ldLAotCQkJ CQkJCSAgIGJ1Zi0+cmVjb3JkLT5FbmRSZWNQdHIpOworCQkJCQkJCSAgIGJ1Zi0+cmVjb3JkLT5F bmRSZWNQdHIsIGFib3J0X3RpbWUpOwogCQl9CiAKLQkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+ cmVvcmRlciwgeGlkLCBidWYtPnJlY29yZC0+RW5kUmVjUHRyKTsKKwkJUmVvcmRlckJ1ZmZlckFi b3J0KGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPnJlY29yZC0+RW5kUmVjUHRyLAorCQkJCQkJICAg YWJvcnRfdGltZSk7CiAJfQogCiAJLyogdXBkYXRlIHRoZSBkZWNvZGluZyBzdGF0cyAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCmluZGV4IGE2OWUzNzFjMDUu LmFmYjdhY2RkYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv bGF1bmNoZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVy LmMKQEAgLTU1LDYgKzU1LDcgQEAKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGludAkJCW1heF9sb2dp Y2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSA0OwogaW50CQkJbWF4X3N5bmNfd29ya2Vyc19wZXJf c3Vic2NyaXB0aW9uID0gMjsKK2ludAkJCW1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9z dWJzY3JpcHRpb24gPSAyOwogCiBMb2dpY2FsUmVwV29ya2VyICpNeUxvZ2ljYWxSZXBXb3JrZXIg PSBOVUxMOwogCkBAIC03NCw2ICs3NSw3IEBAIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfbGF1bmNo ZXJfb25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93 b3JrZXJfb25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgbG9naWNhbHJl cF93b3JrZXJfZGV0YWNoKHZvaWQpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfY2xl YW51cChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpOworc3RhdGljIGludAlsb2dpY2FscmVwX3Bh X3dvcmtlcl9jb3VudChPaWQgc3ViaWQpOwogCiBzdGF0aWMgYm9vbCBvbl9jb21taXRfbGF1bmNo ZXJfd2FrZXVwID0gZmFsc2U7CiAKQEAgLTE1Miw4ICsxNTQsMTAgQEAgZ2V0X3N1YnNjcmlwdGlv bl9saXN0KHZvaWQpCiAgKgogICogVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgY2xlYW5pbmcgdXAg dGhlIHNoYXJlZCBtZW1vcnkgaW4gY2FzZSB0aGUgd29ya2VyCiAgKiBmYWlscyB0byBhdHRhY2gu CisgKgorICogUmV0dXJucyB3aGV0aGVyIHRoZSBhdHRhY2ggd2FzIHN1Y2Nlc3NmdWwuCiAgKi8K LXN0YXRpYyB2b2lkCitzdGF0aWMgYm9vbAogV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNo KExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIAkJCQkJCQkgICB1aW50MTYgZ2VuZXJhdGlvbiwK IAkJCQkJCQkgICBCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5kbGUpCkBAIC0xNjksMTEgKzE3 MywxMSBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAq d29ya2VyLAogCiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJF RCk7CiAKLQkJLyogV29ya2VyIGVpdGhlciBkaWVkIG9yIGhhcyBzdGFydGVkOyBubyBuZWVkIHRv IGRvIGFueXRoaW5nLiAqLworCQkvKiBXb3JrZXIgZWl0aGVyIGRpZWQgb3IgaGFzIHN0YXJ0ZWQu IFJldHVybiBmYWxzZSBpZiBkaWVkLiAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNlIHx8IHdvcmtl ci0+cHJvYykKIAkJewogCQkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0J CQlyZXR1cm47CisJCQlyZXR1cm4gd29ya2VyLT5pbl91c2U7CiAJCX0KIAogCQlMV0xvY2tSZWxl YXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKQEAgLTE4OCw3ICsxOTIsNyBAQCBXYWl0Rm9yUmVw bGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCQkJaWYgKGdl bmVyYXRpb24gPT0gd29ya2VyLT5nZW5lcmF0aW9uKQogCQkJCWxvZ2ljYWxyZXBfd29ya2VyX2Ns ZWFudXAod29ya2VyKTsKIAkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwot CQkJcmV0dXJuOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJLyoKQEAgLTIxMCw2ICsyMTQs OCBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29y a2VyLAogLyoKICAqIFdhbGtzIHRoZSB3b3JrZXJzIGFycmF5IGFuZCBzZWFyY2hlcyBmb3Igb25l IHRoYXQgbWF0Y2hlcyBnaXZlbgogICogc3Vic2NyaXB0aW9uIGlkIGFuZCByZWxpZC4KKyAqCisg KiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIG9yIHRh YmxlIHN5bmMgd29ya2VyLgogICovCiBMb2dpY2FsUmVwV29ya2VyICoKIGxvZ2ljYWxyZXBfd29y a2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsIGJvb2wgb25seV9ydW5uaW5nKQpAQCAtMjI0 LDYgKzIzMCwxMCBAQCBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE9pZCBzdWJpZCwgT2lkIHJlbGlk LCBib29sIG9ubHlfcnVubmluZykKIAl7CiAJCUxvZ2ljYWxSZXBXb3JrZXIgKncgPSAmTG9naWNh bFJlcEN0eC0+d29ya2Vyc1tpXTsKIAorCQkvKiBTa2lwIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMu ICovCisJCWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIodykpCisJCQljb250aW51ZTsKKwogCQlp ZiAody0+aW5fdXNlICYmIHctPnN1YmlkID09IHN1YmlkICYmIHctPnJlbGlkID09IHJlbGlkICYm CiAJCQkoIW9ubHlfcnVubmluZyB8fCB3LT5wcm9jKSkKIAkJewpAQCAtMjYwLDExICsyNzAsMTMg QEAgbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9ubHlfcnVubmluZykK IH0KIAogLyoKLSAqIFN0YXJ0IG5ldyBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciwgaWYgcG9zc2li bGUuCisgKiBTdGFydCBuZXcgbG9naWNhbCByZXBsaWNhdGlvbiBiYWNrZ3JvdW5kIHdvcmtlciwg aWYgcG9zc2libGUuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZh aWx1cmUuCiAgKi8KLXZvaWQKK2Jvb2wKIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJp ZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLCBPaWQgdXNlcmlkLAotCQkJCQkJIE9p ZCByZWxpZCkKKwkJCQkJCSBPaWQgcmVsaWQsIGRzbV9oYW5kbGUgc3Vid29ya2VyX2RzbSkKIHsK IAlCYWNrZ3JvdW5kV29ya2VyIGJndzsKIAlCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpiZ3dfaGFu ZGxlOwpAQCAtMjczLDcgKzI4NSwxMiBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRi aWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKIAlpbnQJCQlz bG90ID0gMDsKIAlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIgPSBOVUxMOwogCWludAkJCW5zeW5j d29ya2VyczsKKwlpbnQJCQlucGFyYWxsZWxhcHBseXdvcmtlcnM7CiAJVGltZXN0YW1wVHogbm93 OworCWJvb2wJCWlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlciA9IChzdWJ3b3JrZXJfZHNtICE9IERT TV9IQU5ETEVfSU5WQUxJRCk7CisKKwkvKiBTYW5pdHkgY2hlY2sgLSB0YWJsZXN5bmMgd29ya2Vy IGNhbm5vdCBiZSBhIHN1YndvcmtlciAqLworCUFzc2VydCghKGlzX3BhcmFsbGVsX2FwcGx5X3dv cmtlciAmJiBPaWRJc1ZhbGlkKHJlbGlkKSkpOwogCiAJZXJlcG9ydChERUJVRzEsCiAJCQkoZXJy bXNnX2ludGVybmFsKCJzdGFydGluZyBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vi c2NyaXB0aW9uIFwiJXNcIiIsCkBAIC0zNTEsNyArMzY4LDIwIEBAIHJldHJ5OgogCWlmIChPaWRJ c1ZhbGlkKHJlbGlkKSAmJiBuc3luY3dvcmtlcnMgPj0gbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vi c2NyaXB0aW9uKQogCXsKIAkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0J CXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW5wYXJhbGxlbGFwcGx5d29ya2VycyA9 IGxvZ2ljYWxyZXBfcGFfd29ya2VyX2NvdW50KHN1YmlkKTsKKworCS8qCisJICogUmV0dXJuIGZh bHNlIGlmIHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyByZWFjaGVkIHRoZSBs aW1pdAorCSAqIHBlciBzdWJzY3JpcHRpb24uCisJICovCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5 X3dvcmtlciAmJgorCQlucGFyYWxsZWxhcHBseXdvcmtlcnMgPj0gbWF4X3BhcmFsbGVsX2FwcGx5 X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbikKKwl7CisJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJl cFdvcmtlckxvY2spOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTM2NSw3ICszOTUs NyBAQCByZXRyeToKIAkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhD RUVERUQpLAogCQkJCSBlcnJtc2coIm91dCBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBz bG90cyIpLAogCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBtYXhfbG9n aWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzLiIpKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNl OwogCX0KIAogCS8qIFByZXBhcmUgdGhlIHdvcmtlciBzbG90LiAqLwpAQCAtMzgwLDYgKzQxMCw4 IEBAIHJldHJ5OgogCXdvcmtlci0+cmVsc3RhdGUgPSBTVUJSRUxfU1RBVEVfVU5LTk9XTjsKIAl3 b3JrZXItPnJlbHN0YXRlX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCXdvcmtlci0+c3RyZWFt X2ZpbGVzZXQgPSBOVUxMOworCXdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCA9IGlzX3BhcmFsbGVs X2FwcGx5X3dvcmtlciA/IE15UHJvY1BpZCA6IEludmFsaWRQaWQ7CisJd29ya2VyLT5wYXJhbGxl bF9hcHBseSA9IGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcjsKIAl3b3JrZXItPmxhc3RfbHNuID0g SW52YWxpZFhMb2dSZWNQdHI7CiAJVElNRVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3NlbmRf dGltZSk7CiAJVElNRVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3JlY3ZfdGltZSk7CkBAIC0z OTcsMTkgKzQyOSwzNCBAQCByZXRyeToKIAkJQkdXT1JLRVJfQkFDS0VORF9EQVRBQkFTRV9DT05O RUNUSU9OOwogCWJndy5iZ3dfc3RhcnRfdGltZSA9IEJnV29ya2VyU3RhcnRfUmVjb3ZlcnlGaW5p c2hlZDsKIAlzbnByaW50ZihiZ3cuYmd3X2xpYnJhcnlfbmFtZSwgQkdXX01BWExFTiwgInBvc3Rn cmVzIik7Ci0Jc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiQXBw bHlXb3JrZXJNYWluIik7CisKKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnBy aW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJQYXJhbGxlbEFwcGx5V29y a2VyTWFpbiIpOworCWVsc2UKKwkJc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1df TUFYTEVOLCAiQXBwbHlXb3JrZXJNYWluIik7CisKIAlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCiAJ CXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGlj YXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUgc3luYyAldSIsIHN1YmlkLCByZWxpZCk7 CisJZWxzZSBpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50ZihiZ3cuYmd3 X25hbWUsIEJHV19NQVhMRU4sCisJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFw cGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1Iiwgc3ViaWQpOwogCWVsc2UKIAkJc25wcmlu dGYoYmd3LmJnd19uYW1lLCBCR1dfTUFYTEVOLAotCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiB3 b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKLQlzbnByaW50ZihiZ3cuYmd3X3R5 cGUsIEJHV19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciIpOworCQkJCSAibG9n aWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1Ymlk KTsKKworCWlmIChpc19wYXJhbGxlbF9hcHBseV93b3JrZXIpCisJCXNucHJpbnRmKGJndy5iZ3df dHlwZSwgQkdXX01BWExFTiwgImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgd29ya2VyIik7 CisJZWxzZQorCQlzbnByaW50ZihiZ3cuYmd3X3R5cGUsIEJHV19NQVhMRU4sICJsb2dpY2FsIHJl cGxpY2F0aW9uIHdvcmtlciIpOwogCiAJYmd3LmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJf UkVTVEFSVDsKIAliZ3cuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7CiAJYmd3LmJnd19tYWlu X2FyZyA9IEludDMyR2V0RGF0dW0oc2xvdCk7CiAKKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29y a2VyKQorCQltZW1jcHkoYmd3LmJnd19leHRyYSwgJnN1Yndvcmtlcl9kc20sIHNpemVvZihkc21f aGFuZGxlKSk7CisKIAlpZiAoIVJlZ2lzdGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJmJndywg JmJnd19oYW5kbGUpKQogCXsKIAkJLyogRmFpbGVkIHRvIHN0YXJ0IHdvcmtlciwgc28gY2xlYW4g dXAgdGhlIHdvcmtlciBzbG90LiAqLwpAQCAtNDIyLDMzICs0NjksMjMgQEAgcmV0cnk6CiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9DT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkgZXJy bXNnKCJvdXQgb2YgYmFja2dyb3VuZCB3b3JrZXIgc2xvdHMiKSwKIAkJCQkgZXJyaGludCgiWW91 IG1pZ2h0IG5lZWQgdG8gaW5jcmVhc2UgbWF4X3dvcmtlcl9wcm9jZXNzZXMuIikpKTsKLQkJcmV0 dXJuOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyogTm93IHdhaXQgdW50aWwgaXQgYXR0YWNo ZXMuICovCi0JV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKHdvcmtlciwgZ2VuZXJhdGlv biwgYmd3X2hhbmRsZSk7CisJcmV0dXJuIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaCh3 b3JrZXIsIGdlbmVyYXRpb24sIGJnd19oYW5kbGUpOwogfQogCiAvKgotICogU3RvcCB0aGUgbG9n aWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YmlkL3JlbGlkLCBpZiBhbnksIGFuZCB3YWl0 IHVudGlsCi0gKiBpdCBkZXRhY2hlcyBmcm9tIHRoZSBzbG90LgorICogSW50ZXJuYWwgZnVuY3Rp b24gdG8gc3RvcCB0aGUgd29ya2VyIGFuZCB3YWl0IHVudGlsIGl0IGRldGFjaGVzIGZyb20gdGhl CisgKiBzbG90LgogICovCi12b2lkCi1sb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwg T2lkIHJlbGlkKQorc3RhdGljIHZvaWQKK2xvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwo TG9naWNhbFJlcFdvcmtlciAqd29ya2VyLCBpbnQgc2lnbm8pCiB7Ci0JTG9naWNhbFJlcFdvcmtl ciAqd29ya2VyOwogCXVpbnQxNgkJZ2VuZXJhdGlvbjsKIAotCUxXTG9ja0FjcXVpcmUoTG9naWNh bFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7Ci0KLQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtl cl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2UpOwotCi0JLyogTm8gd29ya2VyLCBub3RoaW5nIHRv IGRvLiAqLwotCWlmICghd29ya2VyKQotCXsKLQkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29y a2VyTG9jayk7Ci0JCXJldHVybjsKLQl9CisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKExv Z2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpKTsKIAogCS8qCiAJICogUmVtZW1iZXIgd2hp Y2ggZ2VuZXJhdGlvbiB3YXMgb3VyIHdvcmtlciBzbyB3ZSBjYW4gY2hlY2sgaWYgd2hhdCB3ZSBz ZWUKQEAgLTQ4NiwxMCArNTIzLDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQs IE9pZCByZWxpZCkKIAkJICogZGlmZmVyZW50LCBtZWFuaW5nIHRoYXQgYSBkaWZmZXJlbnQgd29y a2VyIGhhcyB0YWtlbiB0aGUgc2xvdC4KIAkJICovCiAJCWlmICghd29ya2VyLT5pbl91c2UgfHwg d29ya2VyLT5nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pCi0JCXsKLQkJCUxXTG9ja1JlbGVhc2Uo TG9naWNhbFJlcFdvcmtlckxvY2spOwogCQkJcmV0dXJuOwotCQl9CiAKIAkJLyogV29ya2VyIGhh cyBhc3NpZ25lZCBwcm9jLCBzbyBpdCBoYXMgc3RhcnRlZC4gKi8KIAkJaWYgKHdvcmtlci0+cHJv YykKQEAgLTQ5Nyw3ICs1MzEsNyBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwg T2lkIHJlbGlkKQogCX0KIAogCS8qIE5vdyB0ZXJtaW5hdGUgdGhlIHdvcmtlciAuLi4gKi8KLQlr aWxsKHdvcmtlci0+cHJvYy0+cGlkLCBTSUdURVJNKTsKKwlraWxsKHdvcmtlci0+cHJvYy0+cGlk LCBzaWdubyk7CiAKIAkvKiAuLi4gYW5kIHdhaXQgZm9yIGl0IHRvIGRpZS4gKi8KIAlmb3IgKDs7 KQpAQCAtNTIzLDYgKzU1Nyw1MyBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwg T2lkIHJlbGlkKQogCiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NI QVJFRCk7CiAJfQorfQorCisvKgorICogU3RvcCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3Jr ZXIgZm9yIHN1YmlkL3JlbGlkLCBpZiBhbnkuCisgKi8KK3ZvaWQKK2xvZ2ljYWxyZXBfd29ya2Vy X3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpCit7CisJTG9naWNhbFJlcFdvcmtlciAqd29ya2Vy OworCisJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKwor CXdvcmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoc3ViaWQsIHJlbGlkLCBmYWxzZSk7CisK KwlpZiAod29ya2VyKQorCXsKKwkJQXNzZXJ0KCFpc1BhcmFsbGVsQXBwbHlXb3JrZXIod29ya2Vy KSk7CisJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwod29ya2VyLCBTSUdURVJNKTsK Kwl9CisKKwlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKK30KKworLyoKKyAq IFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNvcnJl c3BvbmRpbmcgdG8gdGhlCisgKiBpbnB1dCBzbG90IG51bWJlci4KKyAqCisgKiBOb2RlIHRoYXQg dGhlIGZ1bmN0aW9uIHNlbmRzIFNJR0lOVCBpbnN0ZWFkIG9mIFNJR1RFUk0gdG8gdGhlIHBhcmFs bGVsIGFwcGx5CisgKiB3b3JrZXIgc28gdGhhdCB0aGUgd29ya2VyIGV4aXRzIGNsZWFubHkuCisg Ki8KK3ZvaWQKK2xvZ2ljYWxyZXBfcGFfd29ya2VyX3N0b3AoaW50IHNsb3Rfbm8sIHVpbnQxNiBn ZW5lcmF0aW9uKQoreworCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsKKworCUFzc2VydChzbG90 X25vID49IDAgJiYgc2xvdF9ubyA8IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMpOwor CisJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKworCXdv cmtlciA9ICZMb2dpY2FsUmVwQ3R4LT53b3JrZXJzW3Nsb3Rfbm9dOworCUFzc2VydChpc1BhcmFs bGVsQXBwbHlXb3JrZXIod29ya2VyKSk7CisKKwkvKgorCSAqIE9ubHkgc3RvcCB0aGUgd29ya2Vy IGlmIHRoZSBnZW5lcmF0aW9uIG1hdGNoZXMgYW5kIHRoZSB3b3JrZXIgaXMgYWxpdmUuCisJICov CisJaWYgKHdvcmtlci0+Z2VuZXJhdGlvbiA9PSBnZW5lcmF0aW9uICYmIHdvcmtlci0+cHJvYykK KwkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3b3JrZXIsIFNJR0lOVCk7CiAKIAlM V0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIH0KQEAgLTU5NSwxMSArNjc2LDQw IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCkKIH0KIAogLyoKLSAqIERldGFj aCB0aGUgd29ya2VyIChjbGVhbnMgdXAgdGhlIHdvcmtlciBpbmZvKS4KKyAqIFN0b3AgdGhlIHBh cmFsbGVsIGFwcGx5IHdvcmtlcnMgaWYgYW55LCBhbmQgZGV0YWNoIHRoZSBsZWFkZXIgYXBwbHkg d29ya2VyCisgKiAoY2xlYW5zIHVwIHRoZSB3b3JrZXIgaW5mbykuCiAgKi8KIHN0YXRpYyB2b2lk CiBsb2dpY2FscmVwX3dvcmtlcl9kZXRhY2godm9pZCkKIHsKKwkvKiBTdG9wIHRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXJzLiAqLworCWlmIChhbV9sZWFkZXJfYXBwbHlfd29ya2VyKCkpCisJewor CQlMaXN0CSAgICp3b3JrZXJzOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKgorCQkgKiBEZXRh Y2ggZnJvbSB0aGUgZXJyb3JfbXFfaGFuZGxlIGZvciBhbGwgcGFyYWxsZWwgYXBwbHkgd29ya2Vy cworCQkgKiBiZWZvcmUgdGVybWluYXRpbmcgdGhlbS4gVGhpcyBwcmV2ZW50cyB0aGUgbGVhZGVy IGFwcGx5IHdvcmtlciBmcm9tCisJCSAqIHJlY2VpdmluZyB0aGUgd29ya2VyIHRlcm1pbmF0aW9u IG1lc3NhZ2UgYW5kIHNlbmRpbmcgaXQgdG8gbG9ncworCQkgKiB3aGVuIHRoZSBzYW1lIGlzIGFs cmVhZHkgZG9uZSBieSB0aGUgcGFyYWxsZWwgd29ya2VyLgorCQkgKi8KKwkJcGFfZGV0YWNoX2Fs bF9lcnJvcl9tcSgpOworCisJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExX X1NIQVJFRCk7CisKKwkJd29ya2VycyA9IGxvZ2ljYWxyZXBfd29ya2Vyc19maW5kKE15TG9naWNh bFJlcFdvcmtlci0+c3ViaWQsIHRydWUpOworCQlmb3JlYWNoKGxjLCB3b3JrZXJzKQorCQl7CisJ CQlMb2dpY2FsUmVwV29ya2VyICp3ID0gKExvZ2ljYWxSZXBXb3JrZXIgKikgbGZpcnN0KGxjKTsK KworCQkJaWYgKGlzUGFyYWxsZWxBcHBseVdvcmtlcih3KSkKKwkJCQlsb2dpY2FscmVwX3dvcmtl cl9zdG9wX2ludGVybmFsKHcsIFNJR1RFUk0pOworCQl9CisKKwkJTFdMb2NrUmVsZWFzZShMb2dp Y2FsUmVwV29ya2VyTG9jayk7CisJfQorCiAJLyogQmxvY2sgY29uY3VycmVudCBhY2Nlc3MuICov CiAJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfRVhDTFVTSVZFKTsKIApA QCAtNjIyLDYgKzczMiw4IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2NsZWFudXAoTG9naWNhbFJlcFdv cmtlciAqd29ya2VyKQogCXdvcmtlci0+dXNlcmlkID0gSW52YWxpZE9pZDsKIAl3b3JrZXItPnN1 YmlkID0gSW52YWxpZE9pZDsKIAl3b3JrZXItPnJlbGlkID0gSW52YWxpZE9pZDsKKwl3b3JrZXIt PmFwcGx5X2xlYWRlcl9waWQgPSBJbnZhbGlkUGlkOworCXdvcmtlci0+cGFyYWxsZWxfYXBwbHkg PSBmYWxzZTsKIH0KIAogLyoKQEAgLTY1Myw2ICs3NjUsMTMgQEAgbG9naWNhbHJlcF93b3JrZXJf b25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpCiAJaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3Ry ZWFtX2ZpbGVzZXQgIT0gTlVMTCkKIAkJRmlsZVNldERlbGV0ZUFsbChNeUxvZ2ljYWxSZXBXb3Jr ZXItPnN0cmVhbV9maWxlc2V0KTsKIAorCS8qCisJICogU2Vzc2lvbiBsZXZlbCBsb2NrcyBtYXkg YmUgYWNxdWlyZWQgb3V0c2lkZSBvZiBhIHRyYW5zYWN0aW9uIGluCisJICogcGFyYWxsZWwgYXBw bHkgbW9kZSBhbmQgd2lsbCBub3QgYmUgcmVsZWFzZWQgd2hlbiB0aGUgd29ya2VyCisJICogdGVy bWluYXRlcywgc28gbWFudWFsbHkgcmVsZWFzZSBhbGwgbG9ja3MgYmVmb3JlIHRoZSB3b3JrZXIg ZXhpdHMuCisJICovCisJTG9ja1JlbGVhc2VBbGwoREVGQVVMVF9MT0NLTUVUSE9ELCB0cnVlKTsK KwogCUFwcGx5TGF1bmNoZXJXYWtldXAoKTsKIH0KIApAQCAtNjgwLDYgKzc5OSwzMyBAQCBsb2dp Y2FscmVwX3N5bmNfd29ya2VyX2NvdW50KE9pZCBzdWJpZCkKIAlyZXR1cm4gcmVzOwogfQogCisv KgorICogQ291bnQgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIChidXQgbm90IG5lY2Vzc2FyaWx5 IHJ1bm5pbmcpIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXJzIGZvciBhIHN1YnNjcmlwdGlvbi4K KyAqLworc3RhdGljIGludAorbG9naWNhbHJlcF9wYV93b3JrZXJfY291bnQoT2lkIHN1YmlkKQor eworCWludAkJCWk7CisJaW50CQkJcmVzID0gMDsKKworCUFzc2VydChMV0xvY2tIZWxkQnlNZShM b2dpY2FsUmVwV29ya2VyTG9jaykpOworCisJLyoKKwkgKiBTY2FuIGFsbCBhdHRhY2hlZCBwYXJh bGxlbCBhcHBseSB3b3JrZXJzLCBvbmx5IGNvdW50aW5nIHRob3NlIHdoaWNoCisJICogaGF2ZSB0 aGUgZ2l2ZW4gc3Vic2NyaXB0aW9uIGlkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfbG9n aWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzOyBpKyspCisJeworCQlMb2dpY2FsUmVwV29ya2VyICp3 ID0gJkxvZ2ljYWxSZXBDdHgtPndvcmtlcnNbaV07CisKKwkJaWYgKHctPnN1YmlkID09IHN1Ymlk ICYmIGlzUGFyYWxsZWxBcHBseVdvcmtlcih3KSkKKwkJCXJlcysrOworCX0KKworCXJldHVybiBy ZXM7Cit9CisKIC8qCiAgKiBBcHBseUxhdW5jaGVyU2htZW1TaXplCiAgKgkJQ29tcHV0ZSBzcGFj ZSBuZWVkZWQgZm9yIHJlcGxpY2F0aW9uIGxhdW5jaGVyIHNoYXJlZCBtZW1vcnkKQEAgLTg2OSw3 ICsxMDE1LDcgQEAgQXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJCQkJCXdhaXRf dGltZSA9IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbDsKIAogCQkJCQlsb2dpY2FscmVwX3dv cmtlcl9sYXVuY2goc3ViLT5kYmlkLCBzdWItPm9pZCwgc3ViLT5uYW1lLAotCQkJCQkJCQkJCQkg c3ViLT5vd25lciwgSW52YWxpZE9pZCk7CisJCQkJCQkJCQkJCSBzdWItPm93bmVyLCBJbnZhbGlk T2lkLCBEU01fSEFORExFX0lOVkFMSUQpOwogCQkJCX0KIAkJCX0KIApAQCAtOTUyLDYgKzEwOTgs MTAgQEAgcGdfc3RhdF9nZXRfc3Vic2NyaXB0aW9uKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWlmIChP aWRJc1ZhbGlkKHN1YmlkKSAmJiB3b3JrZXIuc3ViaWQgIT0gc3ViaWQpCiAJCQljb250aW51ZTsK IAorCQkvKiBTa2lwIGlmIHRoaXMgaXMgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKi8KKwkJaWYg KGlzUGFyYWxsZWxBcHBseVdvcmtlcigmd29ya2VyKSkKKwkJCWNvbnRpbnVlOworCiAJCXdvcmtl cl9waWQgPSB3b3JrZXIucHJvYy0+cGlkOwogCiAJCXZhbHVlc1swXSA9IE9iamVjdElkR2V0RGF0 dW0od29ya2VyLnN1YmlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29u LmJ1aWxkCmluZGV4IDcxNDRkN2E4YTQuLmQ0OGNkNGM1OTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZApAQCAtMSw2ICsxLDcgQEAKICMgQ29weXJpZ2h0 IChjKSAyMDIyLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKIGJh Y2tlbmRfc291cmNlcyArPSBmaWxlcygKKyAgJ2FwcGx5cGFyYWxsZWx3b3JrZXIuYycsCiAgICdk ZWNvZGUuYycsCiAgICdsYXVuY2hlci5jJywKICAgJ2xvZ2ljYWwuYycsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9vcmlnaW4uYwppbmRleCBmYzg2NzY4ZWQ2Li5iNzU0YzQzODQwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKQEAgLTEwNzUsMTIgKzEw NzUsMjAgQEAgUmVwbGljYXRpb25PcmlnaW5FeGl0Q2xlYW51cChpbnQgY29kZSwgRGF0dW0gYXJn KQogICogYXJyYXkgZG9lc24ndCBoYXZlIHRvIGJlIHNlYXJjaGVkIHdoZW4gY2FsbGluZwogICog cmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UoKS4KICAqCi0gKiBPYnZpb3VzbHkgb25seSBvbmUg c3VjaCBjYWNoZWQgb3JpZ2luIGNhbiBleGlzdCBwZXIgcHJvY2VzcyBhbmQgdGhlIGN1cnJlbnQK LSAqIGNhY2hlZCB2YWx1ZSBjYW4gb25seSBiZSBzZXQgYWdhaW4gYWZ0ZXIgdGhlIHByZXZpb3Vz IHZhbHVlIGlzIHRvcm4gZG93bgotICogd2l0aCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQoKS4K KyAqIE5vcm1hbGx5IG9ubHkgb25lIHN1Y2ggY2FjaGVkIG9yaWdpbiBjYW4gZXhpc3QgcGVyIHBy b2Nlc3Mgc28gdGhlIGNhY2hlZAorICogdmFsdWUgY2FuIG9ubHkgYmUgc2V0IGFnYWluIGFmdGVy IHRoZSBwcmV2aW91cyB2YWx1ZSBpcyB0b3JuIGRvd24gd2l0aAorICogcmVwbG9yaWdpbl9zZXNz aW9uX3Jlc2V0KCkuIEZvciB0aGlzIG5vcm1hbCBjYXNlIHBhc3MgYWNxdWlyZWRfYnkgPSAwCisg KiAobWVhbmluZyB0aGUgc2xvdCBpcyBub3QgYWxsb3dlZCB0byBiZSBhbHJlYWR5IGFjcXVpcmVk IGJ5IGFub3RoZXIgcHJvY2VzcykuCisgKgorICogSG93ZXZlciwgc29tZXRpbWVzIG11bHRpcGxl IHByb2Nlc3NlcyBjYW4gc2FmZWx5IHJlLXVzZSB0aGUgc2FtZSBvcmlnaW4gc2xvdAorICogKGZv ciBleGFtcGxlLCBtdWx0aXBsZSBwYXJhbGxlbCBhcHBseSBwcm9jZXNzZXMgY2FuIHNhZmVseSB1 c2UgdGhlIHNhbWUKKyAqIG9yaWdpbiwgcHJvdmlkZWQgdGhleSBtYWludGFpbiBjb21taXQgb3Jk ZXIgYnkgYWxsb3dpbmcgb25seSBvbmUgcHJvY2VzcyB0bworICogY29tbWl0IGF0IGEgdGltZSku IEZvciB0aGlzIGNhc2UgdGhlIGZpcnN0IHByb2Nlc3MgbXVzdCBwYXNzIGFjcXVpcmVkX2J5ID0K KyAqIDAsIGFuZCB0aGVuIHRoZSBvdGhlciBwcm9jZXNzZXMgc2hhcmluZyB0aGF0IHNhbWUgb3Jp Z2luIGNhbiBwYXNzCisgKiBhY3F1aXJlZF9ieSA9IFBJRCBvZiB0aGUgZmlyc3QgcHJvY2Vzcy4K ICAqLwogdm9pZAotcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpCity ZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSwgaW50IGFjcXVpcmVkX2J5 KQogewogCXN0YXRpYyBib29sIHJlZ2lzdGVyZWRfY2xlYW51cDsKIAlpbnQJCQlpOwpAQCAtMTEy Miw3ICsxMTMwLDcgQEAgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUp CiAJCWlmIChjdXJzdGF0ZS0+cm9pZGVudCAhPSBub2RlKQogCQkJY29udGludWU7CiAKLQkJZWxz ZSBpZiAoY3Vyc3RhdGUtPmFjcXVpcmVkX2J5ICE9IDApCisJCWVsc2UgaWYgKGN1cnN0YXRlLT5h Y3F1aXJlZF9ieSAhPSAwICYmIGFjcXVpcmVkX2J5ID09IDApCiAJCXsKIAkJCWVyZXBvcnQoRVJS T1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX0lOX1VTRSksCkBAIC0xMTUzLDcgKzEx NjEsMTEgQEAgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpCiAKIAlB c3NlcnQoc2Vzc2lvbl9yZXBsaWNhdGlvbl9zdGF0ZS0+cm9pZGVudCAhPSBJbnZhbGlkUmVwT3Jp Z2luSWQpOwogCi0Jc2Vzc2lvbl9yZXBsaWNhdGlvbl9zdGF0ZS0+YWNxdWlyZWRfYnkgPSBNeVBy b2NQaWQ7CisJaWYgKGFjcXVpcmVkX2J5ID09IDApCisJCXNlc3Npb25fcmVwbGljYXRpb25fc3Rh dGUtPmFjcXVpcmVkX2J5ID0gTXlQcm9jUGlkOworCWVsc2UgaWYgKHNlc3Npb25fcmVwbGljYXRp b25fc3RhdGUtPmFjcXVpcmVkX2J5ICE9IGFjcXVpcmVkX2J5KQorCQllbG9nKEVSUk9SLCAiY291 bGQgbm90IGZpbmQgcmVwbGljYXRpb24gc3RhdGUgc2xvdCBmb3IgcmVwbGljYXRpb24gb3JpZ2lu IHdpdGggT0lEICV1IHdoaWNoIHdhcyBhY3F1aXJlZCBieSAlZCIsCisJCQkgbm9kZSwgYWNxdWly ZWRfYnkpOwogCiAJTFdMb2NrUmVsZWFzZShSZXBsaWNhdGlvbk9yaWdpbkxvY2spOwogCkBAIC0x MzM3LDcgKzEzNDksNyBAQCBwZ19yZXBsaWNhdGlvbl9vcmlnaW5fc2Vzc2lvbl9zZXR1cChQR19G VU5DVElPTl9BUkdTKQogCiAJbmFtZSA9IHRleHRfdG9fY3N0cmluZygodGV4dCAqKSBEYXR1bUdl dFBvaW50ZXIoUEdfR0VUQVJHX0RBVFVNKDApKSk7CiAJb3JpZ2luID0gcmVwbG9yaWdpbl9ieV9u YW1lKG5hbWUsIGZhbHNlKTsKLQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luKTsKKwly ZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luLCAwKTsKIAogCXJlcGxvcmlnaW5fc2Vzc2lv bl9vcmlnaW4gPSBvcmlnaW47CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8u YwppbmRleCBkMDBlOTBkZDVlLi4zYTlkNTNhNjFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9wcm90by5jCkBAIC0xMTY0LDEwICsxMTY0LDE0IEBAIGxvZ2ljYWxyZXBfcmVhZF9z dHJlYW1fY29tbWl0KFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBDb21taXREYXRhICpjb21taXRf ZGF0YSkKIC8qCiAgKiBXcml0ZSBTVFJFQU0gQUJPUlQgdG8gdGhlIG91dHB1dCBzdHJlYW0uIE5v dGUgdGhhdCB4aWQgYW5kIHN1YnhpZCB3aWxsIGJlCiAgKiBzYW1lIGZvciB0aGUgdG9wLWxldmVs IHRyYW5zYWN0aW9uIGFib3J0LgorICoKKyAqIElmIHdyaXRlX2Fib3J0X2luZm8gaXMgdHJ1ZSwg c2VuZCB0aGUgYWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGZpZWxkcywKKyAqIG90aGVyd2lzZSBk b24ndC4KICAqLwogdm9pZAogbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5m byBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCBzdWJ4aWQp CisJCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCwgWExvZ1JlY1B0ciBhYm9ydF9sc24sCisJ CQkJCQkJICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lLCBib29sIHdyaXRlX2Fib3J0X2luZm8pCiB7 CiAJcHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX0FCT1JUKTsKIApAQCAt MTE3NiwxOSArMTE4MCw0MCBAQCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChTdHJpbmdJ bmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJLyogdHJhbnNhY3Rpb24gSUQgKi8KIAlwcV9z ZW5kaW50MzIob3V0LCB4aWQpOwogCXBxX3NlbmRpbnQzMihvdXQsIHN1YnhpZCk7CisKKwlpZiAo d3JpdGVfYWJvcnRfaW5mbykKKwl7CisJCXBxX3NlbmRpbnQ2NChvdXQsIGFib3J0X2xzbik7CisJ CXBxX3NlbmRpbnQ2NChvdXQsIGFib3J0X3RpbWUpOworCX0KIH0KIAogLyoKICAqIFJlYWQgU1RS RUFNIEFCT1JUIGZyb20gdGhlIG91dHB1dCBzdHJlYW0uCisgKgorICogSWYgcmVhZF9hYm9ydF9p bmZvIGlzIHRydWUsIHJlYWQgdGhlIGFib3J0X2xzbiBhbmQgYWJvcnRfdGltZSBmaWVsZHMsCisg KiBvdGhlcndpc2UgZG9uJ3QuCiAgKi8KIHZvaWQKLWxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJv cnQoU3RyaW5nSW5mbyBpbiwgVHJhbnNhY3Rpb25JZCAqeGlkLAotCQkJCQkJCSBUcmFuc2FjdGlv bklkICpzdWJ4aWQpCitsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gaW4s CisJCQkJCQkJIExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFib3J0X2RhdGEsCisJCQkJCQkJ IGJvb2wgcmVhZF9hYm9ydF9pbmZvKQogewotCUFzc2VydCh4aWQgJiYgc3VieGlkKTsKKwlBc3Nl cnQoYWJvcnRfZGF0YSk7CisKKwlhYm9ydF9kYXRhLT54aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQp OworCWFib3J0X2RhdGEtPnN1YnhpZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7CiAKLQkqeGlkID0g cHFfZ2V0bXNnaW50KGluLCA0KTsKLQkqc3VieGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKKwlp ZiAocmVhZF9hYm9ydF9pbmZvKQorCXsKKwkJYWJvcnRfZGF0YS0+YWJvcnRfbHNuID0gcHFfZ2V0 bXNnaW50NjQoaW4pOworCQlhYm9ydF9kYXRhLT5hYm9ydF90aW1lID0gcHFfZ2V0bXNnaW50NjQo aW4pOworCX0KKwllbHNlCisJeworCQlhYm9ydF9kYXRhLT5hYm9ydF9sc24gPSBJbnZhbGlkWExv Z1JlY1B0cjsKKwkJYWJvcnRfZGF0YS0+YWJvcnRfdGltZSA9IDA7CisJfQogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCBm Mjg0ZmMyZTMwLi42NmZiMDM5MDNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtMjg3Myw3ICsyODczLDggQEAgUmVvcmRlckJ1ZmZl ckZpbmlzaFByZXBhcmVkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKICAq IGRpc2suCiAgKi8KIHZvaWQKLVJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVmZmVyICpyYiwg VHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQorUmVvcmRlckJ1ZmZlckFib3J0KFJl b3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJ ICAgVGltZXN0YW1wVHogYWJvcnRfdGltZSkKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0eG47CiAK QEAgLTI4ODQsNiArMjg4NSw4IEBAIFJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVmZmVyICpy YiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCWlmICh0eG4gPT0gTlVMTCkK IAkJcmV0dXJuOwogCisJdHhuLT54YWN0X3RpbWUuYWJvcnRfdGltZSA9IGFib3J0X3RpbWU7CisK IAkvKiBGb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zIG5vdGlmeSB0aGUgcmVtb3RlIG5vZGUgYWJv dXQgdGhlIGFib3J0LiAqLwogCWlmIChyYnR4bl9pc19zdHJlYW1lZCh0eG4pKQogCXsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCmluZGV4IDJmZGZlYjViNGMu LjAxNmQwYTQ4MzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv dGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5 bmMuYwpAQCAtMTQsNyArMTQsNyBAQAogICoJICBUaGUgaW5pdGlhbCBkYXRhIHN5bmNocm9uaXph dGlvbiBpcyBkb25lIHNlcGFyYXRlbHkgZm9yIGVhY2ggdGFibGUsCiAgKgkgIGluIGEgc2VwYXJh dGUgYXBwbHkgd29ya2VyIHRoYXQgb25seSBmZXRjaGVzIHRoZSBpbml0aWFsIHNuYXBzaG90IGRh dGEKICAqCSAgZnJvbSB0aGUgcHVibGlzaGVyIGFuZCB0aGVuIHN5bmNocm9uaXplcyB0aGUgcG9z aXRpb24gaW4gdGhlIHN0cmVhbSB3aXRoCi0gKgkgIHRoZSBtYWluIGFwcGx5IHdvcmtlci4KKyAq CSAgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIuCiAgKgogICoJICBUaGVyZSBhcmUgc2V2ZXJhbCBy ZWFzb25zIGZvciBkb2luZyB0aGUgc3luY2hyb25pemF0aW9uIHRoaXMgd2F5OgogICoJICAgLSBJ dCBhbGxvd3MgdXMgdG8gcGFyYWxsZWxpemUgdGhlIGluaXRpYWwgZGF0YSBzeW5jaHJvbml6YXRp b24KQEAgLTE1Myw3ICsxNTMsNyBAQCBmaW5pc2hfc3luY193b3JrZXIodm9pZCkKIAkJCQkJZ2V0 X3JlbF9uYW1lKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpKSkpOwogCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOwogCi0JLyogRmluZCB0aGUgbWFpbiBhcHBseSB3b3JrZXIgYW5kIHNpZ25h bCBpdC4gKi8KKwkvKiBGaW5kIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBzaWduYWwgaXQu ICovCiAJbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQs IEludmFsaWRPaWQpOwogCiAJLyogU3RvcCBncmFjZWZ1bGx5ICovCkBAIC02MDksNyArNjA5LDgg QEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3JfYXBwbHkoWExvZ1JlY1B0ciBjdXJyZW50X2xz bikKIAkJCQkJCQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+b2lkLAogCQkJCQkJCQkJCQkJIE15U3Vi c2NyaXB0aW9uLT5uYW1lLAogCQkJCQkJCQkJCQkJIE15TG9naWNhbFJlcFdvcmtlci0+dXNlcmlk LAotCQkJCQkJCQkJCQkJIHJzdGF0ZS0+cmVsaWQpOworCQkJCQkJCQkJCQkJIHJzdGF0ZS0+cmVs aWQsCisJCQkJCQkJCQkJCQkgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQkJCWhlbnRyeS0+bGFz dF9zdGFydF90aW1lID0gbm93OwogCQkJCQl9CiAJCQkJfQpAQCAtNjMwLDYgKzYzMSwxNCBAQCBw cm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9hcHBseShYTG9nUmVjUHRyIGN1cnJlbnRfbHNuKQog dm9pZAogcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhYTG9nUmVjUHRyIGN1cnJlbnRfbHNuKQogewor CS8qCisJICogU2tpcCBmb3IgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBiZWNhdXNlIHRoZXkgb25s eSBvcGVyYXRlIG9uIHRhYmxlcworCSAqIHRoYXQgYXJlIGluIGEgUkVBRFkgc3RhdGUuIFNlZSBw YV9jYW5fc3RhcnQoKSBhbmQKKwkgKiBzaG91bGRfYXBwbHlfY2hhbmdlc19mb3JfcmVsKCkuCisJ ICovCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm47CisKIAlpZiAo YW1fdGFibGVzeW5jX3dvcmtlcigpKQogCQlwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9zeW5j KGN1cnJlbnRfbHNuKTsKIAllbHNlCkBAIC0xMjQ3LDcgKzEyNTYsNyBAQCBMb2dpY2FsUmVwU3lu Y1RhYmxlU3RhcnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCiAJLyoKIAkgKiBIZXJl IHdlIHVzZSB0aGUgc2xvdCBuYW1lIGluc3RlYWQgb2YgdGhlIHN1YnNjcmlwdGlvbiBuYW1lIGFz IHRoZQotCSAqIGFwcGxpY2F0aW9uX25hbWUsIHNvIHRoYXQgaXQgaXMgZGlmZmVyZW50IGZyb20g dGhlIG1haW4gYXBwbHkgd29ya2VyLAorCSAqIGFwcGxpY2F0aW9uX25hbWUsIHNvIHRoYXQgaXQg aXMgZGlmZmVyZW50IGZyb20gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIsCiAJICogc28gdGhhdCBz eW5jaHJvbm91cyByZXBsaWNhdGlvbiBjYW4gZGlzdGluZ3Vpc2ggdGhlbS4KIAkgKi8KIAlMb2dS ZXBXb3JrZXJXYWxSY3ZDb25uID0KQEAgLTEyOTUsNyArMTMwNCw3IEBAIExvZ2ljYWxSZXBTeW5j VGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAJCSAqIHRpbWUgdGhpcyB0 YWJsZXN5bmMgd2FzIGxhdW5jaGVkLgogCQkgKi8KIAkJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5 X25hbWUob3JpZ2lubmFtZSwgZmFsc2UpOwotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3Jp Z2luaWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIDApOwogCQlyZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCSpvcmlnaW5fc3RhcnRwb3MgPSBy ZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGZhbHNlKTsKIApAQCAtMTQwNiw3ICsxNDE1 LDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0YXJ0KFhMb2dSZWNQdHIgKm9yaWdpbl9zdGFydHBv cykKIAkJCQkJCSAgIHRydWUgLyogZ28gYmFja3dhcmQgKi8gLCB0cnVlIC8qIFdBTCBsb2cgKi8g KTsKIAkJVW5sb2NrUmVsYXRpb25PaWQoUmVwbGljYXRpb25PcmlnaW5SZWxhdGlvbklkLCBSb3dF eGNsdXNpdmVMb2NrKTsKIAotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQpOwor CQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIDApOwogCQlyZXBsb3JpZ2luX3Nl c3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJfQogCWVsc2UKQEAgLTE0NjEsOCArMTQ3MCw4IEBA IGNvcHlfdGFibGVfZG9uZToKIAlTcGluTG9ja1JlbGVhc2UoJk15TG9naWNhbFJlcFdvcmtlci0+ cmVsbXV0ZXgpOwogCiAJLyoKLQkgKiBGaW5hbGx5LCB3YWl0IHVudGlsIHRoZSBtYWluIGFwcGx5 IHdvcmtlciB0ZWxscyB1cyB0byBjYXRjaCB1cCBhbmQgdGhlbgotCSAqIHJldHVybiB0byBsZXQg TG9naWNhbFJlcEFwcGx5TG9vcCBkbyBpdC4KKwkgKiBGaW5hbGx5LCB3YWl0IHVudGlsIHRoZSBs ZWFkZXIgYXBwbHkgd29ya2VyIHRlbGxzIHVzIHRvIGNhdGNoIHVwIGFuZAorCSAqIHRoZW4gcmV0 dXJuIHRvIGxldCBMb2dpY2FsUmVwQXBwbHlMb29wIGRvIGl0LgogCSAqLwogCXdhaXRfZm9yX3dv cmtlcl9zdGF0ZV9jaGFuZ2UoU1VCUkVMX1NUQVRFX0NBVENIVVApOwogCXJldHVybiBzbG90bmFt ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDQ0NmY4NGZh OTcuLjE5NzY3YjRkZmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YwpAQCAtMjIsOCArMjIsMTIgQEAKICAqIFNUUkVBTUVEIFRSQU5TQUNUSU9OUwogICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgKiBTdHJlYW1lZCB0cmFuc2FjdGlvbnMgKGxhcmdlIHRyYW5zYWN0 aW9ucyBleGNlZWRpbmcgYSBtZW1vcnkgbGltaXQgb24gdGhlCi0gKiB1cHN0cmVhbSkgYXJlIG5v dCBhcHBsaWVkIGltbWVkaWF0ZWx5LCBidXQgaW5zdGVhZCwgdGhlIGRhdGEgaXMgd3JpdHRlbgot ICogdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgYXQgb25jZSB3aGVuIHRoZSBm aW5hbCBjb21taXQgYXJyaXZlcy4KKyAqIHVwc3RyZWFtKSBhcmUgYXBwbGllZCB1c2luZyBvbmUg b2YgdHdvIGFwcHJvYWNoZXM6CisgKgorICogMSkgV3JpdGUgdG8gdGVtcG9yYXJ5IGZpbGVzIGFu ZCBhcHBseSB3aGVuIHRoZSBmaW5hbCBjb21taXQgYXJyaXZlcworICoKKyAqIFRoaXMgYXBwcm9h Y2ggaXMgdXNlZCB3aGVuIHRoZSB1c2VyIGhhcyBzZXQgdGhlIHN1YnNjcmlwdGlvbidzIHN0cmVh bWluZworICogb3B0aW9uIGFzIG9uLgogICoKICAqIFVubGlrZSB0aGUgcmVndWxhciAobm9uLXN0 cmVhbWVkKSBjYXNlLCBoYW5kbGluZyBzdHJlYW1lZCB0cmFuc2FjdGlvbnMgaGFzCiAgKiB0byBo YW5kbGUgYWJvcnRzIG9mIGJvdGggdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uIGFuZCBzdWJ0cmFu c2FjdGlvbnMuIFRoaXMKQEAgLTUwLDYgKzU0LDEyIEBACiAgKiB0aGUgZmlsZSB3ZSBkZXNpcmVk IGFjcm9zcyBtdWx0aXBsZSBzdHJlYW0tb3BlbiBjYWxscyBmb3IgdGhlIHNhbWUKICAqIHRyYW5z YWN0aW9uLgogICoKKyAqIDIpIFBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuCisgKgorICogVGhpcyBh cHByb2FjaCBpcyB1c2VkIHdoZW4gdGhlIHVzZXIgaGFzIHNldCB0aGUgc3Vic2NyaXB0aW9uJ3Mg c3RyZWFtaW5nCisgKiBvcHRpb24gYXMgcGFyYWxsZWwuIFNlZSBsb2dpY2FsL2FwcGx5cGFyYWxs ZWx3b3JrZXIuYyBmb3IgaW5mb3JtYXRpb24gYWJvdXQKKyAqIHRoaXMgYXBwcm9hY2guCisgKgog ICogVFdPX1BIQVNFIFRSQU5TQUNUSU9OUwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICog VHdvIHBoYXNlIHRyYW5zYWN0aW9ucyBhcmUgcmVwbGF5ZWQgYXQgcHJlcGFyZSBhbmQgdGhlbiBj b21taXR0ZWQgb3IKQEAgLTIzMyw3ICsyNDMsNTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwbHlFcnJv ckNhbGxiYWNrQXJnCiAJY2hhcgkgICAqb3JpZ2luX25hbWU7CiB9IEFwcGx5RXJyb3JDYWxsYmFj a0FyZzsKIAotc3RhdGljIEFwcGx5RXJyb3JDYWxsYmFja0FyZyBhcHBseV9lcnJvcl9jYWxsYmFj a19hcmcgPQorLyoKKyAqIFRoZSBhY3Rpb24gdG8gYmUgdGFrZW4gZm9yIHRoZSBjaGFuZ2VzIGlu IHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiBUUkFOU19MRUFERVJfQVBQTFk6CisgKiBUaGlzIGFj dGlvbiBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgY2hh bmdlcyBvZiB0aGUKKyAqIHRyYW5zYWN0aW9uIGFyZSBhcHBsaWVkIGRpcmVjdGx5IGJ5IHRoZSB3 b3JrZXIuCisgKgorICogVFJBTlNfTEVBREVSX1NFUklBTElaRToKKyAqIFRoaXMgYWN0aW9uIG1l YW5zIHRoYXQgd2UgYXJlIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIG9yIHRhYmxlIHN5bmMK KyAqIHdvcmtlci4gQ2hhbmdlcyBhcmUgd3JpdHRlbiB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIHRo ZW4gYXBwbGllZCB3aGVuIHRoZQorICogZmluYWwgY29tbWl0IGFycml2ZXMuCisgKgorICogVFJB TlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisgKiBUaGlzIGFjdGlvbiBtZWFucyB0aGF0IHdl IGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgbmVlZCB0byBzZW5kCisgKiB0aGUg Y2hhbmdlcyB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICoKKyAqIFRSQU5TX0xFQURF Ul9QQVJUSUFMX1NFUklBTElaRToKKyAqIFRoaXMgYWN0aW9uIG1lYW5zIHRoYXQgd2UgYXJlIGlu IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBoYXZlIHNlbnQgc29tZQorICogY2hhbmdlcyBk aXJlY3RseSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGFuZCB0aGUgcmVtYWluaW5nIGNo YW5nZXMgYXJlCisgKiBzZXJpYWxpemVkIHRvIGEgZmlsZSwgZHVlIHRvIHRpbWVvdXQgd2hpbGUg c2VuZGluZyBkYXRhLiBUaGUgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlciB3aWxsIGFwcGx5IHRo ZXNlIHNlcmlhbGl6ZWQgY2hhbmdlcyB3aGVuIHRoZSBmaW5hbCBjb21taXQgYXJyaXZlcy4KKyAq CisgKiBXZSBjYW4ndCB1c2UgVFJBTlNfTEVBREVSX1NFUklBTElaRSBmb3IgdGhpcyBjYXNlIGJl Y2F1c2UsIGluIGFkZGl0aW9uIHRvCisgKiBzZXJpYWxpemluZyBjaGFuZ2VzLCB0aGUgbGVhZGVy IHdvcmtlciBhbHNvIG5lZWRzIHRvIHNlcmlhbGl6ZSB0aGUKKyAqIFNUUkVBTV9YWFggbWVzc2Fn ZSB0byBhIGZpbGUsIGFuZCB3YWl0IGZvciB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRvCisg KiBmaW5pc2ggdGhlIHRyYW5zYWN0aW9uIHdoZW4gcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24g ZmluaXNoIGNvbW1hbmQuIFNvCisgKiB0aGlzIG5ldyBhY3Rpb24gd2FzIGludHJvZHVjZWQgdG8g a2VlcCB0aGUgY29kZSBhbmQgbG9naWMgY2xlYXIuCisgKgorICogVFJBTlNfUEFSQUxMRUxfQVBQ TFk6CisgKiBUaGlzIGFjdGlvbiBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyIGFuZCBjaGFuZ2VzIG9mCisgKiB0aGUgdHJhbnNhY3Rpb24gYXJlIGFwcGxpZWQg ZGlyZWN0bHkgYnkgdGhlIHdvcmtlci4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJLyogVGhlIGFj dGlvbiBmb3Igbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMuICovCisJVFJBTlNfTEVBREVSX0FQ UExZLAorCisJLyogQWN0aW9ucyBmb3Igc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4gKi8KKwlUUkFO U19MRUFERVJfU0VSSUFMSVpFLAorCVRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMLAorCVRS QU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRSwKKwlUUkFOU19QQVJBTExFTF9BUFBMWQorfSBU cmFuc0FwcGx5QWN0aW9uOworCisvKiBlcnJjb250ZXh0IHRyYWNrZXIgKi8KK0FwcGx5RXJyb3JD YWxsYmFja0FyZyBhcHBseV9lcnJvcl9jYWxsYmFja19hcmcgPQogewogCS5jb21tYW5kID0gMCwK IAkucmVsID0gTlVMTCwKQEAgLTI0Myw3ICsyOTgsOSBAQCBzdGF0aWMgQXBwbHlFcnJvckNhbGxi YWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZyA9CiAJLm9yaWdpbl9uYW1lID0gTlVMTCwK IH07CiAKLXN0YXRpYyBNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQgPSBOVUxMOwor RXJyb3JDb250ZXh0Q2FsbGJhY2sgKmFwcGx5X2Vycm9yX2NvbnRleHRfc3RhY2sgPSBOVUxMOwor CitNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQgPSBOVUxMOwogTWVtb3J5Q29udGV4 dCBBcHBseUNvbnRleHQgPSBOVUxMOwogCiAvKiBwZXIgc3RyZWFtIGNvbnRleHQgZm9yIHN0cmVh bWluZyB0cmFuc2FjdGlvbnMgKi8KQEAgLTI2MiwxNyArMzE5LDI2IEBAIHN0YXRpYyBib29sIGlu X3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKIHN0YXRpYyBUcmFuc2FjdGlvbklkIHN0 cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAorLyoKKyAqIFRoZSBudW1iZXIgb2Yg Y2hhbmdlcyBhcHBsaWVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBkdXJpbmcgb25lIHN0cmVh bWluZworICogYmxvY2suCisgKi8KK3N0YXRpYyB1aW50MzIgcGFyYWxsZWxfc3RyZWFtX25jaGFu Z2VzID0gMDsKKwogLyoKICAqIFdlIGVuYWJsZSBza2lwcGluZyBhbGwgZGF0YSBtb2RpZmljYXRp b24gY2hhbmdlcyAoSU5TRVJULCBVUERBVEUsIGV0Yy4pIGZvcgogICogdGhlIHN1YnNjcmlwdGlv biBpZiB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uJ3MgZmluaXNoIExTTiBtYXRjaGVzIHRoZSBzdWJz a2lwbHNuLgogICogT25jZSB3ZSBzdGFydCBza2lwcGluZyBjaGFuZ2VzLCB3ZSBkb24ndCBzdG9w IGl0IHVudGlsIHdlIHNraXAgYWxsIGNoYW5nZXMgb2YKICAqIHRoZSB0cmFuc2FjdGlvbiBldmVu IGlmIHBnX3N1YnNjcmlwdGlvbiBpcyB1cGRhdGVkIGFuZCBNeVN1YnNjcmlwdGlvbi0+c2tpcGxz bgotICogZ2V0cyBjaGFuZ2VkIG9yIHJlc2V0IGR1cmluZyB0aGF0LiBBbHNvLCBpbiBzdHJlYW1p bmcgdHJhbnNhY3Rpb24gY2FzZXMsIHdlCi0gKiBkb24ndCBza2lwIHJlY2VpdmluZyBhbmQgc3Bv b2xpbmcgdGhlIGNoYW5nZXMgc2luY2Ugd2UgZGVjaWRlIHdoZXRoZXIgb3Igbm90CisgKiBnZXRz IGNoYW5nZWQgb3IgcmVzZXQgZHVyaW5nIHRoYXQuIEFsc28sIGluIHN0cmVhbWluZyB0cmFuc2Fj dGlvbiBjYXNlcyAoc3RyZWFtaW5nID0gb24pLAorICogd2UgZG9uJ3Qgc2tpcCByZWNlaXZpbmcg YW5kIHNwb29saW5nIHRoZSBjaGFuZ2VzIHNpbmNlIHdlIGRlY2lkZSB3aGV0aGVyIG9yIG5vdAog ICogdG8gc2tpcCBhcHBseWluZyB0aGUgY2hhbmdlcyB3aGVuIHN0YXJ0aW5nIHRvIGFwcGx5IGNo YW5nZXMuIFRoZSBzdWJza2lwbHNuIGlzCiAgKiBjbGVhcmVkIGFmdGVyIHN1Y2Nlc3NmdWxseSBz a2lwcGluZyB0aGUgdHJhbnNhY3Rpb24gb3IgYXBwbHlpbmcgbm9uLWVtcHR5CiAgKiB0cmFuc2Fj dGlvbi4gVGhlIGxhdHRlciBwcmV2ZW50cyB0aGUgbWlzdGFrZW5seSBzcGVjaWZpZWQgc3Vic2tp cGxzbiBmcm9tCi0gKiBiZWluZyBsZWZ0LgorICogYmVpbmcgbGVmdC4gTm90ZSB0aGF0IHdlIGNh bm5vdCBza2lwIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zIHdoZW4gdXNpbmcKKyAqIHBhcmFs bGVsIGFwcGx5IHdvcmtlcnMgYmVjYXVzZSB3ZSBjYW5ub3QgZ2V0IHRoZSBmaW5pc2ggTFNOIGJl Zm9yZSBhcHBseWluZworICogdGhlIGNoYW5nZXMuIFNvLCB3ZSBkb24ndCBzdGFydCBwYXJhbGxl bCBhcHBseSB3b3JrZXIgd2hlbiBmaW5pc2ggTFNOIGlzIHNldAorICogYnkgdGhlIHVzZXIuCiAg Ki8KIHN0YXRpYyBYTG9nUmVjUHRyIHNraXBfeGFjdF9maW5pc2hfbHNuID0gSW52YWxpZFhMb2dS ZWNQdHI7CiAjZGVmaW5lIGlzX3NraXBwaW5nX2NoYW5nZXMoKSAodW5saWtlbHkoIVhMb2dSZWNQ dHJJc0ludmFsaWQoc2tpcF94YWN0X2ZpbmlzaF9sc24pKSkKQEAgLTMxMiwyMyArMzc4LDE2IEBA IHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbnVwX3N1YnhhY3RfaW5mbyh2b2lkKTsKIC8qCiAgKiBT ZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIGNoYW5nZXMgZm9yIGEgdG9wbGV2ZWwgdHJhbnNhY3Rp b24uCiAgKi8KLXN0YXRpYyB2b2lkIHN0cmVhbV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJpZCwgVHJh bnNhY3Rpb25JZCB4aWQpOwogc3RhdGljIHZvaWQgc3RyZWFtX29wZW5fZmlsZShPaWQgc3ViaWQs IFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCSBib29sIGZpcnN0X3NlZ21lbnQpOwogc3RhdGlj IHZvaWQgc3RyZWFtX3dyaXRlX2NoYW5nZShjaGFyIGFjdGlvbiwgU3RyaW5nSW5mbyBzKTsKK3N0 YXRpYyB2b2lkIHN0cmVhbV9vcGVuX2FuZF93cml0ZV9jaGFuZ2UoVHJhbnNhY3Rpb25JZCB4aWQs IGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpOwogc3RhdGljIHZvaWQgc3RyZWFtX2Nsb3NlX2Zp bGUodm9pZCk7CiAKIHN0YXRpYyB2b2lkIHNlbmRfZmVlZGJhY2soWExvZ1JlY1B0ciByZWN2cG9z LCBib29sIGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSk7CiAKLXN0YXRpYyB2b2lkIHN0b3JlX2Zs dXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbik7Ci0KLXN0YXRpYyB2b2lkIG1heWJl X3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCk7Ci0KIHN0YXRpYyB2b2lkIERpc2FibGVTdWJzY3Jp cHRpb25BbmRFeGl0KHZvaWQpOwogCi0vKiBwcm90b3R5cGUgbmVlZGVkIGJlY2F1c2Ugb2Ygc3Ry ZWFtX2NvbW1pdCAqLwotc3RhdGljIHZvaWQgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKTsK LQogc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbChMb2dpY2FsUmVwQ29t bWl0RGF0YSAqY29tbWl0X2RhdGEpOwogc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX2luc2VydF9p bnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCQkJCQkJCQkJCSBSZXN1bHRSZWxJ bmZvICpyZWxpbmZvLApAQCAtMzUyLDE5ICs0MTEsMzIgQEAgc3RhdGljIHZvaWQgYXBwbHlfaGFu ZGxlX3R1cGxlX3JvdXRpbmcoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIC8qIENvbXB1dGUg R0lEIGZvciB0d29fcGhhc2UgdHJhbnNhY3Rpb25zICovCiBzdGF0aWMgdm9pZCBUd29QaGFzZVRy YW5zYWN0aW9uR2lkKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgKmdpZCwgaW50 IHN6Z2lkKTsKIAotLyogQ29tbW9uIHN0cmVhbWluZyBmdW5jdGlvbiB0byBhcHBseSBhbGwgdGhl IHNwb29sZWQgbWVzc2FnZXMgKi8KLXN0YXRpYyB2b2lkIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMo VHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKTsKLQogLyogRnVuY3Rpb25zIGZvciBz a2lwcGluZyBjaGFuZ2VzICovCiBzdGF0aWMgdm9pZCBtYXliZV9zdGFydF9za2lwcGluZ19jaGFu Z2VzKFhMb2dSZWNQdHIgZmluaXNoX2xzbik7CiBzdGF0aWMgdm9pZCBzdG9wX3NraXBwaW5nX2No YW5nZXModm9pZCk7CiBzdGF0aWMgdm9pZCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExv Z1JlY1B0ciBmaW5pc2hfbHNuKTsKIAogLyogRnVuY3Rpb25zIGZvciBhcHBseSBlcnJvciBjYWxs YmFjayAqLwotc3RhdGljIHZvaWQgYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKIHN0 YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7CiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF9pbmZvKHZvaWQpOwogCitzdGF0aWMgVHJhbnNBcHBseUFjdGlvbiBnZXRf dHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkJCQkJ CSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKndpbmZvKTsKKworLyoKKyAqIFJldHVybiB0aGUg bmFtZSBvZiB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIuCisgKi8KK3N0YXRpYyBjb25z dCBjaGFyICoKK2dldF93b3JrZXJfbmFtZSh2b2lkKQoreworCWlmIChhbV90YWJsZXN5bmNfd29y a2VyKCkpCisJCXJldHVybiBfKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHRhYmxlIHN5bmNocm9uaXph dGlvbiB3b3JrZXIiKTsKKwllbHNlIGlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJ cmV0dXJuIF8oImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIik7CisJ ZWxzZQorCQlyZXR1cm4gXygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIiKTsKK30K KwogLyoKICAqIEZvcm0gdGhlIG9yaWdpbiBuYW1lIGZvciB0aGUgc3Vic2NyaXB0aW9uLgogICoK QEAgLTM5NCwxOSArNDY2LDQzIEBAIFJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAo T2lkIHN1Ym9pZCwgT2lkIHJlbGlkLAogICoKICAqIFRoaXMgaXMgbWFpbmx5IG5lZWRlZCBmb3Ig aW5pdGlhbCByZWxhdGlvbiBkYXRhIHN5bmMgYXMgdGhhdCBydW5zIGluCiAgKiBzZXBhcmF0ZSB3 b3JrZXIgcHJvY2VzcyBydW5uaW5nIGluIHBhcmFsbGVsIGFuZCB3ZSBuZWVkIHNvbWUgd2F5IHRv IHNraXAKLSAqIGNoYW5nZXMgY29taW5nIHRvIHRoZSBtYWluIGFwcGx5IHdvcmtlciBkdXJpbmcg dGhlIHN5bmMgb2YgYSB0YWJsZS4KKyAqIGNoYW5nZXMgY29taW5nIHRvIHRoZSBsZWFkZXIgYXBw bHkgd29ya2VyIGR1cmluZyB0aGUgc3luYyBvZiBhIHRhYmxlLgogICoKICAqIE5vdGUgd2UgbmVl ZCB0byBkbyBzbWFsbGVyIG9yIGVxdWFscyBjb21wYXJpc29uIGZvciBTWU5DRE9ORSBzdGF0ZSBi ZWNhdXNlCiAgKiBpdCBtaWdodCBob2xkIHBvc2l0aW9uIG9mIGVuZCBvZiBpbml0aWFsIHNsb3Qg Y29uc2lzdGVudCBwb2ludCBXQUwKICAqIHJlY29yZCArIDEgKGllIHN0YXJ0IG9mIG5leHQgcmVj b3JkKSBhbmQgbmV4dCByZWNvcmQgY2FuIGJlIENPTU1JVCBvZgogICogdHJhbnNhY3Rpb24gd2Ug YXJlIG5vdyBwcm9jZXNzaW5nICh3aGljaCBpcyB3aGF0IHdlIHNldCByZW1vdGVfZmluYWxfbHNu CiAgKiB0byBpbiBhcHBseV9oYW5kbGVfYmVnaW4pLgorICoKKyAqIE5vdGUgdGhhdCBmb3Igc3Ry ZWFtaW5nIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBiZWluZyBhcHBsaWVkIGluIHRoZSBwYXJhbGxl bAorICogYXBwbHkgd29ya2VyLCB3ZSBkaXNhbGxvdyBhcHBseWluZyBjaGFuZ2VzIGlmIHRoZSB0 YXJnZXQgdGFibGUgaW4gdGhlCisgKiBzdWJzY3JpcHRpb24gaXMgbm90IGluIHRoZSBSRUFEWSBz dGF0ZSwgYmVjYXVzZSB3ZSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8KKyAqIGFwcGx5IHRoZSBj aGFuZ2UgYXMgd2Ugd29uJ3Qga25vdyByZW1vdGVfZmluYWxfbHNuIGJ5IHRoYXQgdGltZS4KKyAq CisgKiBXZSBhbHJlYWR5IGNoZWNrZWQgdGhpcyBpbiBwYV9jYW5fc3RhcnQoKSBiZWZvcmUgYXNz aWduaW5nIHRoZQorICogc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIHRoZSBwYXJhbGxlbCB3b3Jr ZXIsIGJ1dCBpdCBhbHNvIG5lZWRzIHRvIGJlCisgKiBjaGVja2VkIGhlcmUgYmVjYXVzZSBpZiB0 aGUgdXNlciBleGVjdXRlcyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0gKKyAqIFBVQkxJ Q0FUSU9OIGluIHBhcmFsbGVsLCB0aGUgbmV3IHRhYmxlIGNhbiBiZSBhZGRlZCB0byBwZ19zdWJz Y3JpcHRpb25fcmVsCisgKiB3aGlsZSBhcHBseWluZyB0aGlzIHRyYW5zYWN0aW9uLgogICovCiBz dGF0aWMgYm9vbAogc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbChMb2dpY2FsUmVwUmVsTWFw RW50cnkgKnJlbCkKIHsKIAlpZiAoYW1fdGFibGVzeW5jX3dvcmtlcigpKQogCQlyZXR1cm4gTXlM b2dpY2FsUmVwV29ya2VyLT5yZWxpZCA9PSByZWwtPmxvY2FscmVsb2lkOworCWVsc2UgaWYgKGFt X3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCXsKKwkJLyogV2UgZG9uJ3Qgc3luY2hyb25pemUg cmVsJ3MgdGhhdCBhcmUgaW4gdW5rbm93biBzdGF0ZS4gKi8KKwkJaWYgKHJlbC0+c3RhdGUgIT0g U1VCUkVMX1NUQVRFX1JFQURZICYmCisJCQlyZWwtPnN0YXRlICE9IFNVQlJFTF9TVEFURV9VTktO T1dOKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9U X0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRp b24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgc3Rv cCIsCisJCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpLAorCQkJCQkgZXJyZGV0YWlsKCJDYW5u b3QgaGFuZGxlIHN0cmVhbWVkIHJlcGxpY2F0aW9uIHRyYW5zYWN0aW9ucyB1c2luZyBwYXJhbGxl bCBhcHBseSB3b3JrZXJzIHVudGlsIGFsbCB0YWJsZXMgaGF2ZSBiZWVuIHN5bmNocm9uaXplZC4i KSkpOworCisJCXJldHVybiByZWwtPnN0YXRlID09IFNVQlJFTF9TVEFURV9SRUFEWTsKKwl9CiAJ ZWxzZQogCQlyZXR1cm4gKHJlbC0+c3RhdGUgPT0gU1VCUkVMX1NUQVRFX1JFQURZIHx8CiAJCQkJ KHJlbC0+c3RhdGUgPT0gU1VCUkVMX1NUQVRFX1NZTkNET05FICYmCkBAIC00NTIsNDMgKzU0OCwx MTAgQEAgZW5kX3JlcGxpY2F0aW9uX3N0ZXAodm9pZCkKIH0KIAogLyoKLSAqIEhhbmRsZSBzdHJl YW1lZCB0cmFuc2FjdGlvbnMuCisgKiBIYW5kbGUgc3RyZWFtZWQgdHJhbnNhY3Rpb25zIGZvciBi b3RoIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCB0aGUKKyAqIHBhcmFsbGVsIGFwcGx5IHdv cmtlcnMuCisgKgorICogSW4gdGhlIHN0cmVhbWluZyBjYXNlIChyZWNlaXZpbmcgYSBibG9jayBv ZiB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24pLCBmb3IKKyAqIHNlcmlhbGl6ZSBtb2RlLCBzaW1w bHkgcmVkaXJlY3QgaXQgdG8gYSBmaWxlIGZvciB0aGUgcHJvcGVyIHRvcGxldmVsCisgKiB0cmFu c2FjdGlvbiwgYW5kIGZvciBwYXJhbGxlbCBtb2RlLCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciB3 aWxsIHNlbmQgdGhlCisgKiBjaGFuZ2VzIHRvIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYW5kIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2lsbCBkZWZpbmUKKyAqIHNhdmVwb2ludHMgaWYgbmVl ZGVkLiAoTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OIG9yIExPR0lDQUxfUkVQX01TR19UWVBFCisg KiBtZXNzYWdlcyB3aWxsIGJlIGFwcGxpZWQgYnkgYm90aCBsZWFkZXIgYXBwbHkgd29ya2VyIGFu ZCBwYXJhbGxlbCBhcHBseQorICogd29ya2VycykuCiAgKgotICogSWYgaW4gc3RyZWFtaW5nIG1v ZGUgKHJlY2VpdmluZyBhIGJsb2NrIG9mIHN0cmVhbWVkIHRyYW5zYWN0aW9uKSwgd2UKLSAqIHNp bXBseSByZWRpcmVjdCBpdCB0byBhIGZpbGUgZm9yIHRoZSBwcm9wZXIgdG9wbGV2ZWwgdHJhbnNh Y3Rpb24uCisgKiBSZXR1cm5zIHRydWUgZm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyAod2hlbiB0 aGUgY2hhbmdlIGlzIGVpdGhlciBzZXJpYWxpemVkCisgKiB0byBmaWxlIG9yIHNlbnQgdG8gcGFy YWxsZWwgYXBwbHkgd29ya2VyKSwgZmFsc2Ugb3RoZXJ3aXNlIChyZWd1bGFyIG1vZGUgb3IKKyAq IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIpLgogICoKLSAq IFJldHVybnMgdHJ1ZSBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zLCBmYWxzZSBvdGhlcndpc2Ug KHJlZ3VsYXIgbW9kZSkuCisgKiBFeGNlcHRpb246IElmIHRoZSBtZXNzYWdlIGJlaW5nIHByb2Nl c3NlZCBpcyBMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04KKyAqIG9yIExPR0lDQUxfUkVQX01TR19U WVBFLCByZXR1cm4gZmFsc2UgZXZlbiBpZiB0aGUgbWVzc2FnZSBuZWVkcyB0byBiZSBzZW50Cisg KiB0byBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KICAqLwogc3RhdGljIGJvb2wKIGhhbmRsZV9z dHJlYW1lZF90cmFuc2FjdGlvbihMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24sIFN0cmluZ0luZm8g cykKIHsKLQlUcmFuc2FjdGlvbklkIHhpZDsKKwlUcmFuc2FjdGlvbklkIGN1cnJlbnRfeGlkOwor CVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5 X2FjdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2c7CisKKwlhcHBseV9hY3Rpb24g PSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHN0cmVhbV94aWQsICZ3aW5mbyk7CiAKIAkv KiBub3QgaW4gc3RyZWFtaW5nIG1vZGUgKi8KLQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9u KQorCWlmIChhcHBseV9hY3Rpb24gPT0gVFJBTlNfTEVBREVSX0FQUExZKQogCQlyZXR1cm4gZmFs c2U7CiAKLQlBc3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwogCUFzc2VydChUcmFuc2FjdGlvbklk SXNWYWxpZChzdHJlYW1feGlkKSk7CiAKKwkvKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgbmVlZHMgdGhlIHhpZCBpbiB0aGlzIG1lc3NhZ2UgdG8gZGVjaWRlCisJICogd2hldGhlciB0 byBkZWZpbmUgYSBzYXZlcG9pbnQsIHNvIHNhdmUgdGhlIG9yaWdpbmFsIG1lc3NhZ2UgdGhhdCBo YXMKKwkgKiBub3QgbW92ZWQgdGhlIGN1cnNvciBhZnRlciB0aGUgeGlkLiBXZSB3aWxsIHNlcmlh bGl6ZSB0aGlzIG1lc3NhZ2UgdG8gYQorCSAqIGZpbGUgaW4gUEFSVElBTF9TRVJJQUxJWkUgbW9k ZS4KKwkgKi8KKwlvcmlnaW5hbF9tc2cgPSAqczsKKwogCS8qCiAJICogV2Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgWElEIG9mIHRoZSBzdWJ4YWN0IGFzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZQogCSAq IG1lc3NhZ2UsIHNvIGV4dHJhY3QgaXQuCiAJICovCi0JeGlkID0gcHFfZ2V0bXNnaW50KHMsIDQp OworCWN1cnJlbnRfeGlkID0gcHFfZ2V0bXNnaW50KHMsIDQpOwogCi0JaWYgKCFUcmFuc2FjdGlv bklkSXNWYWxpZCh4aWQpKQorCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoY3VycmVudF94aWQp KQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFU SU9OKSwKIAkJCQkgZXJybXNnX2ludGVybmFsKCJpbnZhbGlkIHRyYW5zYWN0aW9uIElEIGluIHN0 cmVhbWVkIHJlcGxpY2F0aW9uIHRyYW5zYWN0aW9uIikpKTsKIAotCS8qIEFkZCB0aGUgbmV3IHN1 YnhhY3QgdG8gdGhlIGFycmF5ICh1bmxlc3MgYWxyZWFkeSB0aGVyZSkuICovCi0Jc3VieGFjdF9p bmZvX2FkZCh4aWQpOworCXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19M RUFERVJfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHN0cmVhbV9mZCk7CiAKLQkvKiB3cml0ZSB0aGUg Y2hhbmdlIHRvIHRoZSBjdXJyZW50IGZpbGUgKi8KLQlzdHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlv biwgcyk7CisJCQkvKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAodW5sZXNzIGFs cmVhZHkgdGhlcmUpLiAqLworCQkJc3VieGFjdF9pbmZvX2FkZChjdXJyZW50X3hpZCk7CisKKwkJ CS8qIFdyaXRlIHRoZSBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmlsZSAqLworCQkJc3RyZWFtX3dy aXRlX2NoYW5nZShhY3Rpb24sIHMpOworCQkJcmV0dXJuIHRydWU7CisKKwkJY2FzZSBUUkFOU19M RUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkg KiBYWFggVGhlIHB1Ymxpc2hlciBzaWRlIGRvZXNuJ3QgYWx3YXlzIHNlbmQgcmVsYXRpb24vdHlw ZSB1cGRhdGUKKwkJCSAqIG1lc3NhZ2VzIGFmdGVyIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24s IHNvIGFsc28gdXBkYXRlIHRoZQorCQkJICogcmVsYXRpb24vdHlwZSBpbiBsZWFkZXIgYXBwbHkg d29ya2VyLiBTZWUgZnVuY3Rpb24KKwkJCSAqIGNsZWFudXBfcmVsX3N5bmNfY2FjaGUuCisJCQkg Ki8KKwkJCWlmIChwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQkJcmV0 dXJuIChhY3Rpb24gIT0gTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OICYmCisJCQkJCQlhY3Rpb24g IT0gTE9HSUNBTF9SRVBfTVNHX1RZUEUpOworCisJCQkvKgorCQkJICogU3dpdGNoIHRvIHNlcmlh bGl6ZSBtb2RlIHdoZW4gd2UgYXJlIG5vdCBhYmxlIHRvIHNlbmQgdGhlCisJCQkgKiBjaGFuZ2Ug dG8gcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCQkJICovCisJCQlwYV9zd2l0Y2hfdG9fcGFydGlh bF9zZXJpYWxpemUod2luZm8sIGZhbHNlKTsKKworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNh c2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJc3RyZWFtX3dyaXRlX2NoYW5n ZShhY3Rpb24sICZvcmlnaW5hbF9tc2cpOwogCi0JcmV0dXJuIHRydWU7CisJCQkvKiBTYW1lIHJl YXNvbiBhcyBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCBjYXNlLiAqLworCQkJcmV0dXJu IChhY3Rpb24gIT0gTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OICYmCisJCQkJCWFjdGlvbiAhPSBM T0dJQ0FMX1JFUF9NU0dfVFlQRSk7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJ CXBhcmFsbGVsX3N0cmVhbV9uY2hhbmdlcyArPSAxOworCisJCQkvKiBEZWZpbmUgYSBzYXZlcG9p bnQgZm9yIGEgc3VieGFjdCBpZiBuZWVkZWQuICovCisJCQlwYV9zdGFydF9zdWJ0cmFucyhjdXJy ZW50X3hpZCwgc3RyZWFtX3hpZCk7CisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZGVmYXVsdDoKKwkJ CUFzc2VydChmYWxzZSk7CisJCQlyZXR1cm4gZmFsc2U7CQkvKiBzaWxlbmNlIGNvbXBpbGVyIHdh cm5pbmcgKi8KKwl9CiB9CiAKIC8qCkBAIC05MjYsOCArMTA4OSwxMSBAQCBhcHBseV9oYW5kbGVf cHJlcGFyZV9pbnRlcm5hbChMb2dpY2FsUmVwUHJlcGFyZWRUeG5EYXRhICpwcmVwYXJlX2RhdGEp CiAJICogQmVnaW5UcmFuc2FjdGlvbkJsb2NrIGlzIG5lY2Vzc2FyeSB0byBiYWxhbmNlIHRoZSBF bmRUcmFuc2FjdGlvbkJsb2NrCiAJICogY2FsbGVkIHdpdGhpbiB0aGUgUHJlcGFyZVRyYW5zYWN0 aW9uQmxvY2sgYmVsb3cuCiAJICovCi0JQmVnaW5UcmFuc2FjdGlvbkJsb2NrKCk7Ci0JQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kKCk7IC8qIENvbXBsZXRlcyB0aGUgcHJlY2VkaW5nIEJlZ2luIGNv bW1hbmQuICovCisJaWYgKCFJc1RyYW5zYWN0aW9uQmxvY2soKSkKKwl7CisJCUJlZ2luVHJhbnNh Y3Rpb25CbG9jaygpOworCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsgLyogQ29tcGxldGVz IHRoZSBwcmVjZWRpbmcgQmVnaW4gY29tbWFuZC4gKi8KKwl9CiAKIAkvKgogCSAqIFVwZGF0ZSBv cmlnaW4gc3RhdGUgc28gd2UgY2FuIHJlc3RhcnQgc3RyZWFtaW5nIGZyb20gY29ycmVjdCBwb3Np dGlvbgpAQCAtOTc0LDcgKzExNDAsNyBAQCBhcHBseV9oYW5kbGVfcHJlcGFyZShTdHJpbmdJbmZv IHMpCiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJcGdzdGF0X3JlcG9ydF9zdGF0KGZh bHNlKTsKIAotCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKwlz dG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbiwgWGFjdExhc3RDb21taXRF bmQpOwogCiAJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKQEAgLTk5Niw2ICsxMTYy LDEyIEBAIGFwcGx5X2hhbmRsZV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAogLyoKICAqIEhhbmRs ZSBhIENPTU1JVCBQUkVQQVJFRCBvZiBhIHByZXZpb3VzbHkgUFJFUEFSRUQgdHJhbnNhY3Rpb24u CisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gd2FpdCBoZXJlIGlmIHRoZSB0cmFu c2FjdGlvbiB3YXMgcHJlcGFyZWQgaW4gYQorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBJbiB0 aGF0IGNhc2UsIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQgZm9yIHRoZSBwcmVwYXJlCisgKiB0byBm aW5pc2ggaW4gYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKCkgd2hpY2ggd2lsbCBlbnN1cmUg YWxsIHRoZQorICogb3BlcmF0aW9ucyBpbiB0aGF0IHRyYW5zYWN0aW9uIGhhdmUgaGFwcGVuZWQg aW4gdGhlIHN1YnNjcmliZXIsIHNvIG5vCisgKiBjb25jdXJyZW50IHRyYW5zYWN0aW9uIGNhbiBj YXVzZSBkZWFkbG9jayBvciB0cmFuc2FjdGlvbiBkZXBlbmRlbmN5IGlzc3Vlcy4KICAqLwogc3Rh dGljIHZvaWQKIGFwcGx5X2hhbmRsZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQpAQCAt MTAyNSw3ICsxMTk3LDcgQEAgYXBwbHlfaGFuZGxlX2NvbW1pdF9wcmVwYXJlZChTdHJpbmdJbmZv IHMpCiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJcGdzdGF0X3JlcG9ydF9zdGF0KGZh bHNlKTsKIAotCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKwlz dG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbiwgWGFjdExhc3RDb21taXRF bmQpOwogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCiAJLyogUHJvY2VzcyBhbnkg dGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KQEAgLTEw MzksNiArMTIxMSwxMiBAQCBhcHBseV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8g cykKIAogLyoKICAqIEhhbmRsZSBhIFJPTExCQUNLIFBSRVBBUkVEIG9mIGEgcHJldmlvdXNseSBQ UkVQQVJFRCBUUkFOU0FDVElPTi4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byB3 YWl0IGhlcmUgaWYgdGhlIHRyYW5zYWN0aW9uIHdhcyBwcmVwYXJlZCBpbiBhCisgKiBwYXJhbGxl bCBhcHBseSB3b3JrZXIuIEluIHRoYXQgY2FzZSwgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCBmb3Ig dGhlIHByZXBhcmUKKyAqIHRvIGZpbmlzaCBpbiBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUo KSB3aGljaCB3aWxsIGVuc3VyZSBhbGwgdGhlCisgKiBvcGVyYXRpb25zIGluIHRoYXQgdHJhbnNh Y3Rpb24gaGF2ZSBoYXBwZW5lZCBpbiB0aGUgc3Vic2NyaWJlciwgc28gbm8KKyAqIGNvbmN1cnJl bnQgdHJhbnNhY3Rpb24gY2FuIGNhdXNlIGRlYWRsb2NrIG9yIHRyYW5zYWN0aW9uIGRlcGVuZGVu Y3kgaXNzdWVzLgogICovCiBzdGF0aWMgdm9pZAogYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBh cmVkKFN0cmluZ0luZm8gcykKQEAgLTEwODAsNyArMTI1OCw3IEBAIGFwcGx5X2hhbmRsZV9yb2xs YmFja19wcmVwYXJlZChTdHJpbmdJbmZvIHMpCiAKIAlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2Up OwogCi0Jc3RvcmVfZmx1c2hfcG9zaXRpb24ocm9sbGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNu KTsKKwlzdG9yZV9mbHVzaF9wb3NpdGlvbihyb2xsYmFja19kYXRhLnJvbGxiYWNrX2VuZF9sc24s IFhhY3RMYXN0Q29tbWl0RW5kKTsKIAlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKIAog CS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFy YWxsZWwuICovCkBAIC0xMDkyLDE1ICsxMjcwLDE2IEBAIGFwcGx5X2hhbmRsZV9yb2xsYmFja19w cmVwYXJlZChTdHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5kbGUgU1RSRUFNIFBSRVBBUkUuCi0g KgotICogTG9naWMgaXMgaW4gdHdvIHBhcnRzOgotICogMS4gUmVwbGF5IGFsbCB0aGUgc3Bvb2xl ZCBvcGVyYXRpb25zCi0gKiAyLiBNYXJrIHRoZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJlZAogICov CiBzdGF0aWMgdm9pZAogYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykK IHsKIAlMb2dpY2FsUmVwUHJlcGFyZWRUeG5EYXRhIHByZXBhcmVfZGF0YTsKKwlQYXJhbGxlbEFw cGx5V29ya2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisK KwkvKiBTYXZlIHRoZSBtZXNzYWdlIGJlZm9yZSBpdCBpcyBjb25zdW1lZC4gKi8KKwlTdHJpbmdJ bmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKIAogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlv bikKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTExMTYsMjQgKzEyOTUsOTggQEAgYXBwbHlfaGFuZGxl X3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX3By ZXBhcmUocywgJnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChw cmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0JZWxvZyhERUJV RzEsICJyZWNlaXZlZCBwcmVwYXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHByZXBh cmVfZGF0YS54aWQpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rp b24ocHJlcGFyZV9kYXRhLnhpZCwgJndpbmZvKTsKIAotCS8qIFJlcGxheSBhbGwgdGhlIHNwb29s ZWQgb3BlcmF0aW9ucy4gKi8KLQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHByZXBhcmVfZGF0YS54 aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJ eworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQkvKiBNYXJrIHRoZSB0cmFuc2Fj dGlvbiBhcyBwcmVwYXJlZC4gKi8KLQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJl cGFyZV9kYXRhKTsKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2VyaWFs aXplZCB0byBmaWxlLCBzbyByZXBsYXkgYWxsIHRoZQorCQkJICogc3Bvb2xlZCBvcGVyYXRpb25z LgorCQkJICovCisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJlcFdvcmtlci0+ c3RyZWFtX2ZpbGVzZXQsCisJCQkJCQkJCSAgIHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0 YS5wcmVwYXJlX2xzbik7CiAKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCS8qIE1h cmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLworCQkJYXBwbHlfaGFuZGxlX3ByZXBh cmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CiAKLQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2Up OworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQlzdG9yZV9mbHVzaF9wb3NpdGlv bihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCQlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJl X2RhdGEuZW5kX2xzbiwgWGFjdExhc3RDb21taXRFbmQpOwogCi0JaW5fcmVtb3RlX3RyYW5zYWN0 aW9uID0gZmFsc2U7CisJCQlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKKworCQkJLyog VW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZv LiAqLworCQkJc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg cHJlcGFyZV9kYXRhLnhpZCk7CisKKwkJCWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2lu ZyB0aGUgU1RSRUFNIFBSRVBBUkUgY29tbWFuZCIpOworCQkJYnJlYWs7CiAKLQkvKiB1bmxpbmsg dGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCi0J c3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgcHJlcGFyZV9k YXRhLnhpZCk7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCQlBc3Nl cnQod2luZm8pOworCisJCQlpZiAocGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEp KQorCQkJeworCQkJCS8qIEZpbmlzaCBwcm9jZXNzaW5nIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rp b24uICovCisJCQkJcGFfeGFjdF9maW5pc2god2luZm8sIHByZXBhcmVfZGF0YS5lbmRfbHNuKTsK KwkJCQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFN3aXRjaCB0byBzZXJpYWxpemUgbW9k ZSB3aGVuIHdlIGFyZSBub3QgYWJsZSB0byBzZW5kIHRoZQorCQkJICogY2hhbmdlIHRvIHBhcmFs bGVsIGFwcGx5IHdvcmtlci4KKwkJCSAqLworCQkJcGFfc3dpdGNoX3RvX3BhcnRpYWxfc2VyaWFs aXplKHdpbmZvLCB0cnVlKTsKKworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgVFJBTlNf TEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJc3RyZWFt X29wZW5fYW5kX3dyaXRlX2NoYW5nZShwcmVwYXJlX2RhdGEueGlkLAorCQkJCQkJCQkJCSBMT0dJ Q0FMX1JFUF9NU0dfU1RSRUFNX1BSRVBBUkUsCisJCQkJCQkJCQkJICZvcmlnaW5hbF9tc2cpOwor CisJCQlwYV9zZXRfZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLCBGU19TRVJJQUxJWkVfRE9O RSk7CisKKwkJCS8qIEZpbmlzaCBwcm9jZXNzaW5nIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24u ICovCisJCQlwYV94YWN0X2ZpbmlzaCh3aW5mbywgcHJlcGFyZV9kYXRhLmVuZF9sc24pOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKworCQkJLyoKKwkJCSAqIElm IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcgc3Bvb2xlZCBtZXNzYWdlcyB0 aGVuCisJCQkgKiBjbG9zZSB0aGUgZmlsZSBiZWZvcmUgcHJlcGFyaW5nLgorCQkJICovCisJCQlp ZiAoc3RyZWFtX2ZkKQorCQkJCXN0cmVhbV9jbG9zZV9maWxlKCk7CisKKwkJCWJlZ2luX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKKworCQkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQu ICovCisJCQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKwor CQkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7CisKKwkJCU15UGFyYWxsZWxTaGFyZWQtPmxhc3RfY29tbWl0X2VuZCA9IFhhY3RMYXN0Q29t bWl0RW5kOworCisJCQlwYV9zZXRfeGFjdF9zdGF0ZShNeVBhcmFsbGVsU2hhcmVkLCBQQVJBTExF TF9UUkFOU19GSU5JU0hFRCk7CisJCQlwYV91bmxvY2tfdHJhbnNhY3Rpb24oTXlQYXJhbGxlbFNo YXJlZC0+eGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCQkJcGFfcmVzZXRfc3VidHJhbnMo KTsKKworCQkJZWxvZyhERUJVRzEsICJmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBTVFJFQU0gUFJF UEFSRSBjb21tYW5kIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNl KTsKKwkJCWJyZWFrOworCX0KKworCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKIAkvKiBQ cm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVs LiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMocHJlcGFyZV9kYXRhLmVuZF9sc24pOwpAQCAt MTE3MCw2ICsxNDIzLDQ3IEBAIGFwcGx5X2hhbmRsZV9vcmlnaW4oU3RyaW5nSW5mbyBzKQogCQkJ CSBlcnJtc2dfaW50ZXJuYWwoIk9SSUdJTiBtZXNzYWdlIHNlbnQgb3V0IG9mIG9yZGVyIikpKTsK IH0KIAorLyoKKyAqIEluaXRpYWxpemUgZmlsZXNldCAoaWYgbm90IGFscmVhZHkgZG9uZSkuCisg KgorICogQ3JlYXRlIGEgbmV3IGZpbGUgd2hlbiBmaXJzdF9zZWdtZW50IGlzIHRydWUsIG90aGVy d2lzZSBvcGVuIHRoZSBleGlzdGluZworICogZmlsZS4KKyAqLwordm9pZAorc3RyZWFtX3N0YXJ0 X2ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3NlZ21lbnQpCit7CisJYmVn aW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIn cyBzdHJlYW1fZmlsZXNldCBpZiB3ZSBoYXZlbid0IHlldC4gVGhpcyB3aWxsIGJlCisJICogdXNl ZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBvZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdCBpbiBh IHBlcm1hbmVudAorCSAqIGNvbnRleHQuIFdlIGNyZWF0ZSB0aGlzIG9uIHRoZSB2ZXJ5IGZpcnN0 IHN0cmVhbWluZyBtZXNzYWdlIGZyb20gYW55CisJICogdHJhbnNhY3Rpb24gYW5kIHRoZW4gdXNl IGl0IGZvciB0aGlzIGFuZCBvdGhlciBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zLgorCSAqIE5vdywg d2UgY291bGQgY3JlYXRlIGEgZmlsZXNldCBhdCB0aGUgc3RhcnQgb2YgdGhlIHdvcmtlciBhcyB3 ZWxsIGJ1dAorCSAqIHRoZW4gd2Ugd29uJ3QgYmUgc3VyZSB0aGF0IGl0IHdpbGwgZXZlciBiZSB1 c2VkLgorCSAqLworCWlmICghTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCkKKwl7 CisJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhBcHBseUNvbnRleHQpOworCisJCU15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVz ZXQgPSBwYWxsb2Moc2l6ZW9mKEZpbGVTZXQpKTsKKwkJRmlsZVNldEluaXQoTXlMb2dpY2FsUmVw V29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0 eCk7CisJfQorCisJLyogT3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbi4g Ki8KKwlzdHJlYW1fb3Blbl9maWxlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCwgZmly c3Rfc2VnbWVudCk7CisKKwkvKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2VnbWVudCwgb3Bl biBleGlzdGluZyBzdWJ4YWN0IGZpbGUuICovCisJaWYgKCFmaXJzdF9zZWdtZW50KQorCQlzdWJ4 YWN0X2luZm9fcmVhZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCisJZW5kX3Jl cGxpY2F0aW9uX3N0ZXAoKTsKK30KKwogLyoKICAqIEhhbmRsZSBTVFJFQU0gU1RBUlQgbWVzc2Fn ZS4KICAqLwpAQCAtMTE3NywyMSArMTQ3MSwxNyBAQCBzdGF0aWMgdm9pZAogYXBwbHlfaGFuZGxl X3N0cmVhbV9zdGFydChTdHJpbmdJbmZvIHMpCiB7CiAJYm9vbAkJZmlyc3Rfc2VnbWVudDsKKwlQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9h Y3Rpb247CisKKwkvKiBTYXZlIHRoZSBtZXNzYWdlIGJlZm9yZSBpdCBpcyBjb25zdW1lZC4gKi8K KwlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKIAogCWlmIChpbl9zdHJlYW1lZF90 cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RP Q09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiZHVwbGljYXRlIFNUUkVBTSBT VEFSVCBtZXNzYWdlIikpKTsKIAotCS8qCi0JICogU3RhcnQgYSB0cmFuc2FjdGlvbiBvbiBzdHJl YW0gc3RhcnQsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb21taXR0ZWQKLQkgKiBvbiB0aGUg c3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVzeW5jIHdvcmtlciBpbiB3aGljaCBjYXNl IGl0Ci0JICogd2lsbCBiZSBjb21taXR0ZWQgYWZ0ZXIgcHJvY2Vzc2luZyBhbGwgdGhlIG1lc3Nh Z2VzLiBXZSBuZWVkIHRoZQotCSAqIHRyYW5zYWN0aW9uIGZvciBoYW5kbGluZyB0aGUgYnVmZmls ZSwgdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlCi0JICogc3RyZWFtaW5nIGRhdGEgYW5kIHN1Ynhh Y3QgaW5mby4KLQkgKi8KLQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0KIAkvKiBub3RpZnkg aGFuZGxlIG1ldGhvZHMgd2UncmUgcHJvY2Vzc2luZyBhIHJlbW90ZSB0cmFuc2FjdGlvbiAqLwog CWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIwNSw1NCArMTQ5NSwxMTMg QEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJbmZvIHMpCiAKIAlzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF94YWN0KHN0cmVhbV94aWQsIEludmFsaWRYTG9nUmVjUHRyKTsKIAotCS8q Ci0JICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFtX2ZpbGVzZXQgaWYgd2UgaGF2ZW4n dCB5ZXQuIFRoaXMgd2lsbCBiZQotCSAqIHVzZWQgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2Yg dGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQKLQkgKiBjb250ZXh0LiBXZSBj cmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueQot CSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3IgdGhpcyBhbmQgb3RoZXIgc3RyZWFt aW5nIHRyYW5zYWN0aW9ucy4KLQkgKiBOb3csIHdlIGNvdWxkIGNyZWF0ZSBhIGZpbGVzZXQgYXQg dGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQKLQkgKiB0aGVuIHdlIHdvbid0IGJl IHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KLQkgKi8KLQlpZiAoTXlMb2dpY2FsUmVw V29ya2VyLT5zdHJlYW1fZmlsZXNldCA9PSBOVUxMKQorCS8qIFRyeSB0byBhbGxvY2F0ZSBhIHdv cmtlciBmb3IgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4gKi8KKwlpZiAoZmlyc3Rfc2VnbWVu dCkKKwkJcGFfYWxsb2NhdGVfd29ya2VyKHN0cmVhbV94aWQpOworCisJYXBwbHlfYWN0aW9uID0g Z2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOworCisJc3dp dGNoIChhcHBseV9hY3Rpb24pCiAJewotCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJY2FzZSBU UkFOU19MRUFERVJfU0VSSUFMSVpFOgogCi0JCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhBcHBseUNvbnRleHQpOworCQkJLyoKKwkJCSAqIEZ1bmN0aW9uIHN0cmVhbV9zdGFydF9pbnRl cm5hbCBzdGFydHMgYSB0cmFuc2FjdGlvbi4gVGhpcworCQkJICogdHJhbnNhY3Rpb24gd2lsbCBi ZSBjb21taXR0ZWQgb24gdGhlIHN0cmVhbSBzdG9wIHVubGVzcyBpdCBpcyBhCisJCQkgKiB0YWJs ZXN5bmMgd29ya2VyIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSBjb21taXR0ZWQgYWZ0ZXIKKwkJ CSAqIHByb2Nlc3NpbmcgYWxsIHRoZSBtZXNzYWdlcy4gV2UgbmVlZCB0aGlzIHRyYW5zYWN0aW9u IGZvcgorCQkJICogaGFuZGxpbmcgdGhlIEJ1ZkZpbGUsIHVzZWQgZm9yIHNlcmlhbGl6aW5nIHRo ZSBzdHJlYW1pbmcgZGF0YQorCQkJICogYW5kIHN1YnhhY3QgaW5mby4KKwkJCSAqLworCQkJc3Ry ZWFtX3N0YXJ0X2ludGVybmFsKHN0cmVhbV94aWQsIGZpcnN0X3NlZ21lbnQpOworCQkJYnJlYWs7 CiAKLQkJTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCA9IHBhbGxvYyhzaXplb2Yo RmlsZVNldCkpOwotCQlGaWxlU2V0SW5pdChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxl c2V0KTsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3 aW5mbyk7CiAKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7Ci0JfQorCQkJLyoKKwkJ CSAqIE9uY2Ugd2Ugc3RhcnQgc2VyaWFsaXppbmcgdGhlIGNoYW5nZXMsIHRoZSBwYXJhbGxlbCBh cHBseQorCQkJICogd29ya2VyIHdpbGwgd2FpdCBmb3IgdGhlIGxlYWRlciB0byByZWxlYXNlIHRo ZSBzdHJlYW0gbG9jaworCQkJICogdW50aWwgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uIFNv LCB3ZSBkb24ndCBuZWVkIHRvIHJlbGVhc2UKKwkJCSAqIHRoZSBsb2NrIG9yIGluY3JlbWVudCB0 aGUgc3RyZWFtIGNvdW50IGluIHRoYXQgY2FzZS4KKwkJCSAqLworCQkJaWYgKHBhX3NlbmRfZGF0 YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFVubG9jayB0 aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5CisJCQkJICog d29ya2VyIGNhbiBjb250aW51ZSB0byByZWNlaXZlIGNoYW5nZXMuCisJCQkJICovCisJCQkJaWYg KCFmaXJzdF9zZWdtZW50KQorCQkJCQlwYV91bmxvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhp ZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CiAKLQkvKiBvcGVuIHRoZSBzcG9vbCBmaWxlIGZvciB0 aGlzIHRyYW5zYWN0aW9uICovCi0Jc3RyZWFtX29wZW5fZmlsZShNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkLCBzdHJlYW1feGlkLCBmaXJzdF9zZWdtZW50KTsKKwkJCQkvKgorCQkJCSAqIEluY3Jl bWVudCB0aGUgbnVtYmVyIG9mIHN0cmVhbWluZyBibG9ja3Mgd2FpdGluZyB0byBiZQorCQkJCSAq IHByb2Nlc3NlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJCQkJICovCisJCQkJcGdfYXRv bWljX2FkZF9mZXRjaF91MzIoJndpbmZvLT5zaGFyZWQtPnBlbmRpbmdfc3RyZWFtX2NvdW50LCAx KTsKIAotCS8qIGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0aW5n IHN1YnhhY3QgZmlsZSAqLwotCWlmICghZmlyc3Rfc2VnbWVudCkKLQkJc3VieGFjdF9pbmZvX3Jl YWQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCk7CisJCQkJLyogQ2FjaGUg dGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBmb3IgdGhpcyB0cmFuc2FjdGlvbi4gKi8KKwkJCQlw YV9zZXRfc3RyZWFtX2FwcGx5X3dvcmtlcih3aW5mbyk7CisJCQkJYnJlYWs7CisJCQl9CiAKLQlw Z3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIE5VTEwpOworCQkJLyoKKwkJCSAq IFN3aXRjaCB0byBzZXJpYWxpemUgbW9kZSB3aGVuIHdlIGFyZSBub3QgYWJsZSB0byBzZW5kIHRo ZQorCQkJICogY2hhbmdlIHRvIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkJCSAqLworCQkJcGFf c3dpdGNoX3RvX3BhcnRpYWxfc2VyaWFsaXplKHdpbmZvLCAhZmlyc3Rfc2VnbWVudCk7CiAKLQll bmRfcmVwbGljYXRpb25fc3RlcCgpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgVFJB TlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyoK KwkJCSAqIE9wZW4gdGhlIHNwb29sIGZpbGUgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IG9wZW5lZCB3 aGVuIHN3aXRjaGluZworCQkJICogdG8gc2VyaWFsaXplIG1vZGUuIFRoZSB0cmFuc2FjdGlvbiBz dGFydGVkIGluCisJCQkgKiBzdHJlYW1fc3RhcnRfaW50ZXJuYWwgd2lsbCBiZSBjb21taXR0ZWQg b24gdGhlIHN0cmVhbSBzdG9wLgorCQkJICovCisJCQlpZiAoYXBwbHlfYWN0aW9uICE9IFRSQU5T X0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMKQorCQkJCXN0cmVhbV9zdGFydF9pbnRlcm5hbChzdHJl YW1feGlkLCBmaXJzdF9zZWdtZW50KTsKKworCQkJc3RyZWFtX3dyaXRlX2NoYW5nZShMT0dJQ0FM X1JFUF9NU0dfU1RSRUFNX1NUQVJULCAmb3JpZ2luYWxfbXNnKTsKKworCQkJLyogQ2FjaGUgdGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBmb3IgdGhpcyB0cmFuc2FjdGlvbi4gKi8KKwkJCXBhX3Nl dF9zdHJlYW1fYXBwbHlfd29ya2VyKHdpbmZvKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNf UEFSQUxMRUxfQVBQTFk6CisJCQlpZiAoZmlyc3Rfc2VnbWVudCkKKwkJCXsKKwkJCQkvKiBIb2xk IHRoZSBsb2NrIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiAqLworCQkJCXBhX2xv Y2tfdHJhbnNhY3Rpb24oTXlQYXJhbGxlbFNoYXJlZC0+eGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2Nr KTsKKwkJCQlwYV9zZXRfeGFjdF9zdGF0ZShNeVBhcmFsbGVsU2hhcmVkLCBQQVJBTExFTF9UUkFO U19TVEFSVEVEKTsKKwkJCX0KKworCQkJcGFyYWxsZWxfc3RyZWFtX25jaGFuZ2VzID0gMDsKKwkJ CWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQor CisJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9SVU5OSU5HLCBOVUxMKTsKIH0KIAogLyoK LSAqIEhhbmRsZSBTVFJFQU0gU1RPUCBtZXNzYWdlLgorICogVXBkYXRlIHRoZSBpbmZvcm1hdGlv biBhYm91dCBzdWJ4YWN0cyBhbmQgY2xvc2UgdGhlIGZpbGUuCisgKgorICogVGhpcyBmdW5jdGlv biBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbV9zdGFydF9pbnRlcm5hbCBmdW5jdGlv biBoYXMKKyAqIGJlZW4gY2FsbGVkLgogICovCi1zdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxlX3N0 cmVhbV9zdG9wKFN0cmluZ0luZm8gcykKK3ZvaWQKK3N0cmVhbV9zdG9wX2ludGVybmFsKFRyYW5z YWN0aW9uSWQgeGlkKQogewotCWlmICghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCi0JCWVyZXBv cnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAotCQkJ CSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9QIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RB UlQiKSkpOwotCiAJLyoKLQkgKiBDbG9zZSB0aGUgZmlsZSB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdl cywgYW5kIHNlcmlhbGl6ZSBpbmZvcm1hdGlvbiBhYm91dAotCSAqIHN1YnhhY3RzIGZvciB0aGUg dG9wbGV2ZWwgdHJhbnNhY3Rpb24uCisJICogU2VyaWFsaXplIGluZm9ybWF0aW9uIGFib3V0IHN1 YnhhY3RzIGZvciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24sIHRoZW4KKwkgKiBjbG9zZSB0aGUg c3RyZWFtIG1lc3NhZ2VzIHNwb29sIGZpbGUuCiAJICovCi0Jc3VieGFjdF9pbmZvX3dyaXRlKE15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOworCXN1YnhhY3RfaW5mb193cml0 ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwogCXN0cmVhbV9jbG9zZV9maWxlKCk7 CiAKIAkvKiBXZSBtdXN0IGJlIGluIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RhdGUgKi8KQEAgLTEy NjEsNDAgKzE2MTAsMTI0IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMp CiAJLyogQ29tbWl0IHRoZSBwZXItc3RyZWFtIHRyYW5zYWN0aW9uICovCiAJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CiAKLQlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOwotCiAJ LyogUmVzZXQgcGVyLXN0cmVhbSBjb250ZXh0ICovCiAJTWVtb3J5Q29udGV4dFJlc2V0KExvZ2lj YWxTdHJlYW1pbmdDb250ZXh0KTsKLQotCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURM RSwgTlVMTCk7Ci0JcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7CiB9CiAKIC8qCi0g KiBIYW5kbGUgU1RSRUFNIGFib3J0IG1lc3NhZ2UuCisgKiBIYW5kbGUgU1RSRUFNIFNUT1AgbWVz c2FnZS4KICAqLwogc3RhdGljIHZvaWQKLWFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5n SW5mbyBzKQorYXBwbHlfaGFuZGxlX3N0cmVhbV9zdG9wKFN0cmluZ0luZm8gcykKIHsKLQlUcmFu c2FjdGlvbklkIHhpZDsKLQlUcmFuc2FjdGlvbklkIHN1YnhpZDsKKwlQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CiAKLQlpZiAo aW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCisJaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElP TiksCi0JCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIEFCT1JUIG1lc3NhZ2Ugd2l0aG91dCBT VFJFQU0gU1RPUCIpKSk7CisJCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIFNUT1AgbWVzc2Fn ZSB3aXRob3V0IFNUUkVBTSBTVEFSVCIpKSk7CisKKwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNh Y3Rpb25fYXBwbHlfYWN0aW9uKHN0cmVhbV94aWQsICZ3aW5mbyk7CisKKwlzd2l0Y2ggKGFwcGx5 X2FjdGlvbikKKwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFUklBTElaRToKKwkJCXN0cmVhbV9z dG9wX2ludGVybmFsKHN0cmVhbV94aWQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19MRUFE RVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkgKiBM b2NrIGJlZm9yZSBzZW5kaW5nIHRoZSBTVFJFQU1fU1RPUCBtZXNzYWdlIHNvIHRoYXQgdGhlIGxl YWRlcgorCQkJICogY2FuIGhvbGQgdGhlIGxvY2sgZmlyc3QgYW5kIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgd2lsbCB3YWl0CisJCQkgKiBmb3IgbGVhZGVyIHRvIHJlbGVhc2UgdGhlIGxvY2su IFNlZSBMb2NraW5nIENvbnNpZGVyYXRpb25zIGF0b3AKKwkJCSAqIGFwcGx5cGFyYWxsZWx3b3Jr ZXIuYy4KKwkJCSAqLworCQkJcGFfbG9ja19zdHJlYW0od2luZm8tPnNoYXJlZC0+eGlkLCBBY2Nl c3NFeGNsdXNpdmVMb2NrKTsKKworCQkJaWYgKHBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBz LT5kYXRhKSkKKwkJCXsKKwkJCQlwYV9zZXRfc3RyZWFtX2FwcGx5X3dvcmtlcihOVUxMKTsKKwkJ CQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFN3aXRjaCB0byBzZXJpYWxpemUgbW9kZSB3 aGVuIHdlIGFyZSBub3QgYWJsZSB0byBzZW5kIHRoZQorCQkJICogY2hhbmdlIHRvIHBhcmFsbGVs IGFwcGx5IHdvcmtlci4KKwkJCSAqLworCQkJcGFfc3dpdGNoX3RvX3BhcnRpYWxfc2VyaWFsaXpl KHdpbmZvLCB0cnVlKTsKKworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgVFJBTlNfTEVB REVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJc3RyZWFtX3dyaXRlX2NoYW5nZShMT0dJQ0FMX1JF UF9NU0dfU1RSRUFNX1NUT1AsIHMpOworCQkJc3RyZWFtX3N0b3BfaW50ZXJuYWwoc3RyZWFtX3hp ZCk7CisJCQlwYV9zZXRfc3RyZWFtX2FwcGx5X3dvcmtlcihOVUxMKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQllbG9nKERFQlVHMSwgImFwcGxpZWQgJXUg Y2hhbmdlcyBpbiB0aGUgc3RyZWFtaW5nIGNodW5rIiwKKwkJCQkgcGFyYWxsZWxfc3RyZWFtX25j aGFuZ2VzKTsKKworCQkJLyoKKwkJCSAqIEJ5IHRoZSB0aW1lIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBpcyBwcm9jZXNzaW5nIHRoZSBjaGFuZ2VzIGluCisJCQkgKiB0aGUgY3VycmVudCBzdHJlYW1p bmcgYmxvY2ssIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIG1heSBoYXZlCisJCQkgKiBzZW50IG11 bHRpcGxlIHN0cmVhbWluZyBibG9ja3MuIFRoaXMgY2FuIGxlYWQgdG8gcGFyYWxsZWwgYXBwbHkK KwkJCSAqIHdvcmtlciBzdGFydCB3YWl0aW5nIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbW9yZSBjaHVu ayBvZiBzdHJlYW1zCisJCQkgKiBpbiB0aGUgcXVldWUuIFNvLCB0cnkgdG8gbG9jayBvbmx5IGlm IHRoZXJlIGlzIG5vIG1lc3NhZ2UgbGVmdAorCQkJICogaW4gdGhlIHF1ZXVlLiBTZWUgTG9ja2lu ZyBDb25zaWRlcmF0aW9ucyBhdG9wCisJCQkgKiBhcHBseXBhcmFsbGVsd29ya2VyLmMuCisJCQkg KgorCQkJICogTm90ZSB0aGF0IGhlcmUgd2UgaGF2ZSBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHdl IGNhbiBzdGFydAorCQkJICogd2FpdGluZyBldmVuIHdoZW4gdGhlcmUgYXJlIHBlbmRpbmcgc3Ry ZWFtaW5nIGNodW5rcy4gVGhpcyBjYW4KKwkJCSAqIGhhcHBlbiBpZiB0aGUgbGVhZGVyIHNlbmRz IGFub3RoZXIgc3RyZWFtaW5nIGJsb2NrIGFuZCBhY3F1aXJlcworCQkJICogdGhlIHN0cmVhbSBs b2NrIGFnYWluIGFmdGVyIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2hlY2tzCisJCQkgKiB0 aGF0IHRoZXJlIGlzIG5vIHBlbmRpbmcgc3RyZWFtaW5nIGJsb2NrIGFuZCBiZWZvcmUgaXQgYWN0 dWFsbHkKKwkJCSAqIHN0YXJ0cyB3YWl0aW5nIG9uIGEgbG9jay4gV2UgY2FuIGhhbmRsZSB0aGlz IGNhc2UgYnkgbm90CisJCQkgKiBhbGxvd2luZyB0aGUgbGVhZGVyIHRvIGluY3JlbWVudCB0aGUg c3RyZWFtIGJsb2NrIGNvdW50IGR1cmluZworCQkJICogdGhlIHRpbWUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIGFjcXVpcmVzIHRoZSBsb2NrIGJ1dCBpdCBpcyBub3QKKwkJCSAqIGNsZWFyIHdoZXRo ZXIgdGhhdCBpcyB3b3J0aCB0aGUgY29tcGxleGl0eS4KKwkJCSAqCisJCQkgKiBOb3csIGlmIHRo aXMgbWlzc2VkIGNodW5rIGNvbnRhaW5zIHJvbGxiYWNrIHRvIHNhdmVwb2ludCwgdGhlbgorCQkJ ICogdGhlcmUgaXMgYSByaXNrIG9mIGRlYWRsb2NrIHdoaWNoIHByb2JhYmx5IHNob3VsZG4ndCBo YXBwZW4KKwkJCSAqIGFmdGVyIHJlc3RhcnQuCisJCQkgKi8KKwkJCXBhX2RlY3JfYW5kX3dhaXRf c3RyZWFtX2Jsb2NrKCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNl KTsKKwkJCWJyZWFrOworCX0KKworCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CisK KwkvKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY291bGQgYmUgaW4gYSB0cmFuc2Fj dGlvbiBpbiB3aGljaCBjYXNlIHdlCisJICogbmVlZCB0byByZXBvcnQgdGhlIHN0YXRlIGFzIFNU QVRFX0lETEVJTlRSQU5TQUNUSU9OLgorCSAqLworCWlmIChJc1RyYW5zYWN0aW9uT3JUcmFuc2Fj dGlvbkJsb2NrKCkpCisJCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRUlOVFJBTlNB Q1RJT04sIE5VTEwpOworCWVsc2UKKwkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExF LCBOVUxMKTsKIAotCWxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQocywgJnhpZCwgJnN1Ynhp ZCk7CisJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7Cit9CiAKKy8qCisgKiBIZWxw ZXIgZnVuY3Rpb24gdG8gaGFuZGxlIFNUUkVBTSBBQk9SVCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5z YWN0aW9uIHdhcworICogc2VyaWFsaXplZCB0byBmaWxlLgorICovCitzdGF0aWMgdm9pZAorc3Ry ZWFtX2Fib3J0X2ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHN1Ynhp ZCkKK3sKIAkvKgogCSAqIElmIHRoZSB0d28gWElEcyBhcmUgdGhlIHNhbWUsIGl0J3MgaW4gZmFj dCBhYm9ydCBvZiB0b3BsZXZlbCB4YWN0LCBzbwogCSAqIGp1c3QgZGVsZXRlIHRoZSBmaWxlcyB3 aXRoIHNlcmlhbGl6ZWQgaW5mby4KIAkgKi8KIAlpZiAoeGlkID09IHN1YnhpZCkKLQl7Ci0JCXNl dF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoeGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CiAJCXN0 cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7Ci0JfQog CWVsc2UKIAl7CiAJCS8qCkBAIC0xMzE4LDggKzE3NTEsNiBAQCBhcHBseV9oYW5kbGVfc3RyZWFt X2Fib3J0KFN0cmluZ0luZm8gcykKIAkJYm9vbAkJZm91bmQgPSBmYWxzZTsKIAkJY2hhcgkJcGF0 aFtNQVhQR1BBVEhdOwogCi0JCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qoc3VieGlkLCBJ bnZhbGlkWExvZ1JlY1B0cik7Ci0KIAkJc3ViaWR4ID0gLTE7CiAJCWJlZ2luX3JlcGxpY2F0aW9u X3N0ZXAoKTsKIAkJc3VieGFjdF9pbmZvX3JlYWQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg eGlkKTsKQEAgLTEzNDQsNDcgKzE3NzUsMjM3IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQo U3RyaW5nSW5mbyBzKQogCQkJY2xlYW51cF9zdWJ4YWN0X2luZm8oKTsKIAkJCWVuZF9yZXBsaWNh dGlvbl9zdGVwKCk7CiAJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKLQkJCXJlc2V0X2Fw cGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJLyogb3BlbiB0 aGUgY2hhbmdlcyBmaWxlICovCi0JCWNoYW5nZXNfZmlsZW5hbWUocGF0aCwgTXlMb2dpY2FsUmVw V29ya2VyLT5zdWJpZCwgeGlkKTsKLQkJZmQgPSBCdWZGaWxlT3BlbkZpbGVTZXQoTXlMb2dpY2Fs UmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCwgcGF0aCwKLQkJCQkJCQkJT19SRFdSLCBmYWxzZSk7 CisJCS8qIG9wZW4gdGhlIGNoYW5nZXMgZmlsZSAqLworCQljaGFuZ2VzX2ZpbGVuYW1lKHBhdGgs IE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisJCWZkID0gQnVmRmlsZU9wZW5GaWxl U2V0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQsIHBhdGgsCisJCQkJCQkJCU9f UkRXUiwgZmFsc2UpOworCisJCS8qIE9LLCB0cnVuY2F0ZSB0aGUgZmlsZSBhdCB0aGUgcmlnaHQg b2Zmc2V0ICovCisJCUJ1ZkZpbGVUcnVuY2F0ZUZpbGVTZXQoZmQsIHN1YnhhY3RfZGF0YS5zdWJ4 YWN0c1tzdWJpZHhdLmZpbGVubywKKwkJCQkJCQkgICBzdWJ4YWN0X2RhdGEuc3VieGFjdHNbc3Vi aWR4XS5vZmZzZXQpOworCQlCdWZGaWxlQ2xvc2UoZmQpOworCisJCS8qIGRpc2NhcmQgdGhlIHN1 YnhhY3RzIGFkZGVkIGxhdGVyICovCisJCXN1YnhhY3RfZGF0YS5uc3VieGFjdHMgPSBzdWJpZHg7 CisKKwkJLyogd3JpdGUgdGhlIHVwZGF0ZWQgc3VieGFjdCBsaXN0ICovCisJCXN1YnhhY3RfaW5m b193cml0ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCisJCWVuZF9yZXBsaWNh dGlvbl9zdGVwKCk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCX0KK30KKworLyoK KyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2FnZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGx5 X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQoreworCVRyYW5zYWN0aW9uSWQgeGlk OworCVRyYW5zYWN0aW9uSWQgc3VieGlkOworCUxvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgYWJv cnRfZGF0YTsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJVHJhbnNBcHBseUFj dGlvbiBhcHBseV9hY3Rpb247CisKKwkvKiBTYXZlIHRoZSBtZXNzYWdlIGJlZm9yZSBpdCBpcyBj b25zdW1lZC4gKi8KKwlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKKwlib29sCQl0 b3BsZXZlbF94YWN0OworCisJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkg ZXJybXNnX2ludGVybmFsKCJTVFJFQU0gQUJPUlQgbWVzc2FnZSB3aXRob3V0IFNUUkVBTSBTVE9Q IikpKTsKKworCS8qIFdlIHJlY2VpdmUgYWJvcnQgaW5mb3JtYXRpb24gb25seSB3aGVuIHdlIGNh biBhcHBseSBpbiBwYXJhbGxlbC4gKi8KKwlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KHMs ICZhYm9ydF9kYXRhLAorCQkJCQkJCQkgTXlMb2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9hcHBs eSk7CisKKwl4aWQgPSBhYm9ydF9kYXRhLnhpZDsKKwlzdWJ4aWQgPSBhYm9ydF9kYXRhLnN1Ynhp ZDsKKwl0b3BsZXZlbF94YWN0ID0gKHhpZCA9PSBzdWJ4aWQpOworCisJc2V0X2FwcGx5X2Vycm9y X2NvbnRleHRfeGFjdChzdWJ4aWQsIGFib3J0X2RhdGEuYWJvcnRfbHNuKTsKKworCWFwcGx5X2Fj dGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oeGlkLCAmd2luZm8pOworCisJc3dp dGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CisK KwkJCS8qCisJCQkgKiBXZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRoZSB0 cmFuc2FjdGlvbiBoYXMgYmVlbgorCQkJICogc2VyaWFsaXplZCB0byBmaWxlLgorCQkJICovCisJ CQlzdHJlYW1fYWJvcnRfaW50ZXJuYWwoeGlkLCBzdWJ4aWQpOworCisJCQllbG9nKERFQlVHMSwg ImZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIFNUUkVBTSBBQk9SVCBjb21tYW5kIik7CisJCQlicmVh azsKKworCQljYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdp bmZvKTsKKworCQkJLyoKKwkJCSAqIEZvciB0aGUgY2FzZSBvZiBhYm9ydGluZyB0aGUgc3VidHJh bnNhY3Rpb24sIHdlIGluY3JlbWVudCB0aGUKKwkJCSAqIG51bWJlciBvZiBzdHJlYW1pbmcgYmxv Y2tzIGFuZCB0YWtlIHRoZSBsb2NrIGFnYWluIGJlZm9yZQorCQkJICogc2VuZGluZyB0aGUgU1RS RUFNX0FCT1JUIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseQorCQkJICogd29ya2Vy IHdpbGwgd2FpdCBvbiB0aGUgbG9jayBmb3IgdGhlIG5leHQgc2V0IG9mIGNoYW5nZXMgYWZ0ZXIK KwkJCSAqIHByb2Nlc3NpbmcgdGhlIFNUUkVBTV9BQk9SVCBtZXNzYWdlIGlmIGl0IGlzIG5vdCBh bHJlYWR5CisJCQkgKiB3YWl0aW5nIGZvciBTVFJFQU1fU1RPUCBtZXNzYWdlLgorCQkJICoKKwkJ CSAqIEl0IGlzIGltcG9ydGFudCB0byBwZXJmb3JtIHRoaXMgbG9ja2luZyBiZWZvcmUgc2VuZGlu ZyB0aGUKKwkJCSAqIFNUUkVBTV9BQk9SVCBtZXNzYWdlIHNvIHRoYXQgdGhlIGxlYWRlciBjYW4g aG9sZCB0aGUgbG9jayBmaXJzdAorCQkJICogYW5kIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIg d2lsbCB3YWl0IGZvciB0aGUgbGVhZGVyIHRvCisJCQkgKiByZWxlYXNlIHRoZSBsb2NrLiBUaGlz IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UgZG8gaW4KKwkJCSAqIGFwcGx5X2hhbmRsZV9zdHJlYW1f c3RvcC4gU2VlIExvY2tpbmcgQ29uc2lkZXJhdGlvbnMgYXRvcAorCQkJICogYXBwbHlwYXJhbGxl bHdvcmtlci5jLgorCQkJICovCisJCQlpZiAoIXRvcGxldmVsX3hhY3QpCisJCQl7CisJCQkJcGFf dW5sb2NrX3N0cmVhbSh4aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQkJCXBnX2F0b21pY19h ZGRfZmV0Y2hfdTMyKCZ3aW5mby0+c2hhcmVkLT5wZW5kaW5nX3N0cmVhbV9jb3VudCwgMSk7CisJ CQkJcGFfbG9ja19zdHJlYW0oeGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJCX0KKworCQkJ aWYgKHBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKSkKKwkJCXsKKwkJCQkvKgor CQkJCSAqIFVubGlrZSBTVFJFQU1fQ09NTUlUIGFuZCBTVFJFQU1fUFJFUEFSRSwgd2UgZG9uJ3Qg bmVlZCB0bworCQkJCSAqIHdhaXQgaGVyZSBmb3IgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0 byBmaW5pc2ggYXMgdGhhdAorCQkJCSAqIGlzIG5vdCByZXF1aXJlZCB0byBtYWludGFpbiB0aGUg Y29tbWl0IG9yZGVyIGFuZCB3b24ndCBoYXZlCisJCQkJICogdGhlIHJpc2sgb2YgZmFpbHVyZXMg ZHVlIHRvIHRyYW5zYWN0aW9uIGRlcGVuZGVuY2llcyBhbmQKKwkJCQkgKiBkZWFkbG9ja3MuIEhv d2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYmVmb3JlIHRoZSBwYXJhbGxlbAorCQkJCSAqIHdv cmtlciBmaW5pc2hlcyBhbmQgd2UgY2xlYXIgdGhlIHdvcmtlciBpbmZvLCB0aGUgeGlkCisJCQkJ ICogd3JhcGFyb3VuZCBoYXBwZW5zIG9uIHRoZSB1cHN0cmVhbSBhbmQgYSBuZXcgdHJhbnNhY3Rp b24KKwkJCQkgKiB3aXRoIHRoZSBzYW1lIHhpZCBjYW4gYXBwZWFyIGFuZCB0aGF0IGNhbiBsZWFk IHRvIGR1cGxpY2F0ZQorCQkJCSAqIGVudHJpZXMgaW4gUGFyYWxsZWxBcHBseVR4bkhhc2guIFll dCBhbm90aGVyIHByb2JsZW0gY291bGQKKwkJCQkgKiBiZSB0aGF0IHdlIG1heSBoYXZlIHNlcmlh bGl6ZWQgdGhlIGNoYW5nZXMgaW4gcGFydGlhbAorCQkJCSAqIHNlcmlhbGl6ZSBtb2RlIGFuZCB0 aGUgZmlsZSBjb250YWluaW5nIHhhY3QgY2hhbmdlcyBtYXkKKwkJCQkgKiBhbHJlYWR5IGV4aXN0 LCBhbmQgYWZ0ZXIgeGlkIHdyYXBhcm91bmQgdHJ5aW5nIHRvIGNyZWF0ZQorCQkJCSAqIHRoZSBm aWxlIGZvciB0aGUgc2FtZSB4aWQgY2FuIGxlYWQgdG8gYW4gZXJyb3IuIFRvIGF2b2lkCisJCQkJ ICogdGhlc2UgcHJvYmxlbXMsIHdlIGRlY2lkZSB0byB3YWl0IGZvciB0aGUgYWJvcnRzIHRvIGZp bmlzaC4KKwkJCQkgKgorCQkJCSAqIE5vdGUsIGl0IGlzIG9rYXkgdG8gbm90IHVwZGF0ZSB0aGUg Zmx1c2ggbG9jYXRpb24gcG9zaXRpb24KKwkJCQkgKiBmb3IgYWJvcnRzIGFzIGluIHdvcnN0IGNh c2UgdGhhdCBtZWFucyBzdWNoIGEgdHJhbnNhY3Rpb24KKwkJCQkgKiB3b24ndCBiZSBzZW50IGFn YWluIGFmdGVyIHJlc3RhcnQuCisJCQkJICovCisJCQkJaWYgKHRvcGxldmVsX3hhY3QpCisJCQkJ CXBhX3hhY3RfZmluaXNoKHdpbmZvLCBJbnZhbGlkWExvZ1JlY1B0cik7CisKKwkJCQlicmVhazsK KwkJCX0KKworCQkJLyoKKwkJCSAqIFN3aXRjaCB0byBzZXJpYWxpemUgbW9kZSB3aGVuIHdlIGFy ZSBub3QgYWJsZSB0byBzZW5kIHRoZQorCQkJICogY2hhbmdlIHRvIHBhcmFsbGVsIGFwcGx5IHdv cmtlci4KKwkJCSAqLworCQkJcGFfc3dpdGNoX3RvX3BhcnRpYWxfc2VyaWFsaXplKHdpbmZvLCB0 cnVlKTsKKworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJ QUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyoKKwkJCSAqIFBhcmFsbGVs IGFwcGx5IHdvcmtlciBtaWdodCBoYXZlIGFwcGxpZWQgc29tZSBjaGFuZ2VzLCBzbyB3cml0ZQor CQkJICogdGhlIFNUUkVBTV9BQk9SVCBtZXNzYWdlIHNvIHRoYXQgaXQgY2FuIHJvbGxiYWNrIHRo ZQorCQkJICogc3VidHJhbnNhY3Rpb24gaWYgbmVlZGVkLgorCQkJICovCisJCQlzdHJlYW1fb3Bl bl9hbmRfd3JpdGVfY2hhbmdlKHhpZCwgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9BQk9SVCwKKwkJ CQkJCQkJCQkgJm9yaWdpbmFsX21zZyk7CisKKwkJCWlmICh0b3BsZXZlbF94YWN0KQorCQkJewor CQkJCXBhX3NldF9maWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsIEZTX1NFUklBTElaRV9ET05F KTsKKwkJCQlwYV94YWN0X2ZpbmlzaCh3aW5mbywgSW52YWxpZFhMb2dSZWNQdHIpOworCQkJfQor CQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKworCQkJLyoKKwkJCSAq IElmIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcgc3Bvb2xlZCBtZXNzYWdl cyB0aGVuCisJCQkgKiBjbG9zZSB0aGUgZmlsZSBiZWZvcmUgYWJvcnRpbmcuCisJCQkgKi8KKwkJ CWlmICh0b3BsZXZlbF94YWN0ICYmIHN0cmVhbV9mZCkKKwkJCQlzdHJlYW1fY2xvc2VfZmlsZSgp OworCisJCQlwYV9zdHJlYW1fYWJvcnQoJmFib3J0X2RhdGEpOworCisJCQkvKgorCQkJICogV2Ug bmVlZCB0byB3YWl0IGFmdGVyIHByb2Nlc3Npbmcgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IGZvciB0 aGUKKwkJCSAqIG5leHQgc2V0IG9mIGNoYW5nZXMuCisJCQkgKgorCQkJICogV2UgaGF2ZSBhIHJh Y2UgY29uZGl0aW9uIGhlcmUgZHVlIHRvIHdoaWNoIHdlIGNhbiBzdGFydCB3YWl0aW5nCisJCQkg KiBoZXJlIHdoZW4gdGhlcmUgYXJlIG1vcmUgY2h1bmsgb2Ygc3RyZWFtcyBpbiB0aGUgcXVldWUu IFNlZQorCQkJICogYXBwbHlfaGFuZGxlX3N0cmVhbV9zdG9wLgorCQkJICovCisJCQlpZiAoIXRv cGxldmVsX3hhY3QpCisJCQkJcGFfZGVjcl9hbmRfd2FpdF9zdHJlYW1fYmxvY2soKTsKKworCQkJ ZWxvZyhERUJVRzEsICJmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBTVFJFQU0gQUJPUlQgY29tbWFu ZCIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVh azsKKwl9CisKKwlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKK30KKworLyoKKyAq IEVuc3VyZSB0aGF0IHRoZSBwYXNzZWQgbG9jYXRpb24gaXMgZmlsZXNldCdzIGVuZC4KKyAqLwor c3RhdGljIHZvaWQKK2Vuc3VyZV9sYXN0X21lc3NhZ2UoRmlsZVNldCAqc3RyZWFtX2ZpbGVzZXQs IFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgZmlsZW5vLAorCQkJCQlvZmZfdCBvZmZzZXQpCit7CisJ Y2hhcgkJcGF0aFtNQVhQR1BBVEhdOworCUJ1ZkZpbGUgICAgKmZkOworCWludAkJCWxhc3RfZmls ZW5vOworCW9mZl90CQlsYXN0X29mZnNldDsKKworCUFzc2VydCghSXNUcmFuc2FjdGlvblN0YXRl KCkpOwogCi0JCS8qIE9LLCB0cnVuY2F0ZSB0aGUgZmlsZSBhdCB0aGUgcmlnaHQgb2Zmc2V0ICov Ci0JCUJ1ZkZpbGVUcnVuY2F0ZUZpbGVTZXQoZmQsIHN1YnhhY3RfZGF0YS5zdWJ4YWN0c1tzdWJp ZHhdLmZpbGVubywKLQkJCQkJCQkgICBzdWJ4YWN0X2RhdGEuc3VieGFjdHNbc3ViaWR4XS5vZmZz ZXQpOwotCQlCdWZGaWxlQ2xvc2UoZmQpOworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAot CQkvKiBkaXNjYXJkIHRoZSBzdWJ4YWN0cyBhZGRlZCBsYXRlciAqLwotCQlzdWJ4YWN0X2RhdGEu bnN1YnhhY3RzID0gc3ViaWR4OworCWNoYW5nZXNfZmlsZW5hbWUocGF0aCwgTXlMb2dpY2FsUmVw V29ya2VyLT5zdWJpZCwgeGlkKTsKIAotCQkvKiB3cml0ZSB0aGUgdXBkYXRlZCBzdWJ4YWN0IGxp c3QgKi8KLQkJc3VieGFjdF9pbmZvX3dyaXRlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhp ZCk7CisJZmQgPSBCdWZGaWxlT3BlbkZpbGVTZXQoc3RyZWFtX2ZpbGVzZXQsIHBhdGgsIE9fUkRP TkxZLCBmYWxzZSk7CiAKLQkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKLQkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7Ci0JfQorCUJ1ZkZpbGVTZWVrKGZkLCAwLCAwLCBTRUVLX0VORCk7CisJ QnVmRmlsZVRlbGwoZmQsICZsYXN0X2ZpbGVubywgJmxhc3Rfb2Zmc2V0KTsKIAotCXJlc2V0X2Fw cGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOworCUJ1ZkZpbGVDbG9zZShmZCk7CisKKwllbmRfcmVw bGljYXRpb25fc3RlcCgpOworCisJaWYgKGxhc3RfZmlsZW5vICE9IGZpbGVubyB8fCBsYXN0X29m ZnNldCAhPSBvZmZzZXQpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIG1lc3NhZ2UgbGVmdCBp biBzdHJlYW1pbmcgdHJhbnNhY3Rpb24ncyBjaGFuZ2VzIGZpbGUgXCIlc1wiIiwKKwkJCSBwYXRo KTsKIH0KIAogLyoKICAqIENvbW1vbiBzcG9vbGZpbGUgcHJvY2Vzc2luZy4KICAqLwotc3RhdGlj IHZvaWQKLWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQ dHIgbHNuKQordm9pZAorYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhGaWxlU2V0ICpzdHJlYW1fZmls ZXNldCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCSAgIFhMb2dSZWNQdHIgbHNuKQogewogCVN0 cmluZ0luZm9EYXRhIHMyOwogCWludAkJCW5jaGFuZ2VzOwogCWNoYXIJCXBhdGhbTUFYUEdQQVRI XTsKIAljaGFyCSAgICpidWZmZXIgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwotCUJ1 ZkZpbGUgICAgKmZkOworCVJlc291cmNlT3duZXIgb2xkb3duZXI7CisJaW50CQkJZmlsZW5vOwor CW9mZl90CQlvZmZzZXQ7CiAKLQltYXliZV9zdGFydF9za2lwcGluZ19jaGFuZ2VzKGxzbik7CisJ aWYgKCFhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJbWF5YmVfc3RhcnRfc2tpcHBpbmdf Y2hhbmdlcyhsc24pOwogCiAJLyogTWFrZSBzdXJlIHdlIGhhdmUgYW4gb3BlbiB0cmFuc2FjdGlv biAqLwogCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKQEAgLTE0MDAsOCArMjAyMSwxNiBAQCBh cHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikK IAljaGFuZ2VzX2ZpbGVuYW1lKHBhdGgsIE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7 CiAJZWxvZyhERUJVRzEsICJyZXBsYXlpbmcgY2hhbmdlcyBmcm9tIGZpbGUgXCIlc1wiIiwgcGF0 aCk7CiAKLQlmZCA9IEJ1ZkZpbGVPcGVuRmlsZVNldChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVh bV9maWxlc2V0LCBwYXRoLCBPX1JET05MWSwKLQkJCQkJCQlmYWxzZSk7CisJLyoKKwkgKiBNYWtl IHN1cmUgdGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uIHNvIHRo YXQgdGhlCisJICogZmlsZSB3aWxsIG5vdCBiZSBhY2NpZGVudGFsbHkgY2xvc2VkIHdoZW4gYWJv cnRpbmcgYSBzdWJ0cmFuc2FjdGlvbi4KKwkgKi8KKwlvbGRvd25lciA9IEN1cnJlbnRSZXNvdXJj ZU93bmVyOworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gVG9wVHJhbnNhY3Rpb25SZXNvdXJjZU93 bmVyOworCisJc3RyZWFtX2ZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KHN0cmVhbV9maWxlc2V0LCBw YXRoLCBPX1JET05MWSwgZmFsc2UpOworCisJQ3VycmVudFJlc291cmNlT3duZXIgPSBvbGRvd25l cjsKIAogCWJ1ZmZlciA9IHBhbGxvYyhCTENLU1opOwogCWluaXRTdHJpbmdJbmZvKCZzMik7CkBA IC0xNDMyLDcgKzIwNjEsNyBAQCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQg eGlkLCBYTG9nUmVjUHRyIGxzbikKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKiBy ZWFkIGxlbmd0aCBvZiB0aGUgb24tZGlzayByZWNvcmQgKi8KLQkJbmJ5dGVzID0gQnVmRmlsZVJl YWQoZmQsICZsZW4sIHNpemVvZihsZW4pKTsKKwkJbmJ5dGVzID0gQnVmRmlsZVJlYWQoc3RyZWFt X2ZkLCAmbGVuLCBzaXplb2YobGVuKSk7CiAKIAkJLyogaGF2ZSB3ZSByZWFjaGVkIGVuZCBvZiB0 aGUgZmlsZT8gKi8KIAkJaWYgKG5ieXRlcyA9PSAwKQpAQCAtMTQ1MywxMiArMjA4MiwxNCBAQCBh cHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikK IAkJYnVmZmVyID0gcmVwYWxsb2MoYnVmZmVyLCBsZW4pOwogCiAJCS8qIGFuZCBmaW5hbGx5IHJl YWQgdGhlIGRhdGEgaW50byB0aGUgYnVmZmVyICovCi0JCWlmIChCdWZGaWxlUmVhZChmZCwgYnVm ZmVyLCBsZW4pICE9IGxlbikKKwkJaWYgKEJ1ZkZpbGVSZWFkKHN0cmVhbV9mZCwgYnVmZmVyLCBs ZW4pICE9IGxlbikKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2Fj Y2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmcm9tIHN0cmVhbWluZyB0cmFu c2FjdGlvbidzIGNoYW5nZXMgZmlsZSBcIiVzXCI6ICVtIiwKIAkJCQkJCQlwYXRoKSkpOwogCisJ CUJ1ZkZpbGVUZWxsKHN0cmVhbV9mZCwgJmZpbGVubywgJm9mZnNldCk7CisKIAkJLyogY29weSB0 aGUgYnVmZmVyIHRvIHRoZSBzdHJpbmdpbmZvIGFuZCBjYWxsIGFwcGx5X2Rpc3BhdGNoICovCiAJ CXJlc2V0U3RyaW5nSW5mbygmczIpOwogCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZzMiwgYnVm ZmVyLCBsZW4pOwpAQCAtMTQ3NCwxNSArMjEwNSwyNCBAQCBhcHBseV9zcG9vbGVkX21lc3NhZ2Vz KFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAogCQluY2hhbmdlcysrOwogCisJ CS8qCisJCSAqIEl0IGlzIHBvc3NpYmxlIHRoZSBmaWxlIGhhcyBiZWVuIGNsb3NlZCBiZWNhdXNl IHdlIGhhdmUgcHJvY2Vzc2VkCisJCSAqIHRoZSB0cmFuc2FjdGlvbiBlbmQgbWVzc2FnZSBsaWtl IHN0cmVhbV9jb21taXQgaW4gd2hpY2ggY2FzZSB0aGF0CisJCSAqIG11c3QgYmUgdGhlIGxhc3Qg bWVzc2FnZS4KKwkJICovCisJCWlmICghc3RyZWFtX2ZkKQorCQl7CisJCQllbnN1cmVfbGFzdF9t ZXNzYWdlKHN0cmVhbV9maWxlc2V0LCB4aWQsIGZpbGVubywgb2Zmc2V0KTsKKwkJCWJyZWFrOwor CQl9CisKIAkJaWYgKG5jaGFuZ2VzICUgMTAwMCA9PSAwKQogCQkJZWxvZyhERUJVRzEsICJyZXBs YXllZCAlZCBjaGFuZ2VzIGZyb20gZmlsZSBcIiVzXCIiLAogCQkJCSBuY2hhbmdlcywgcGF0aCk7 CiAJfQogCi0JQnVmRmlsZUNsb3NlKGZkKTsKLQotCXBmcmVlKGJ1ZmZlcik7Ci0JcGZyZWUoczIu ZGF0YSk7CisJaWYgKHN0cmVhbV9mZCkKKwkJc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKIAogCWVsb2co REVCVUcxLCAicmVwbGF5ZWQgJWQgKGFsbCkgY2hhbmdlcyBmcm9tIGZpbGUgXCIlc1wiIiwKIAkJ IG5jaGFuZ2VzLCBwYXRoKTsKQEAgLTE0OTgsNiArMjEzOCwxMSBAQCBhcHBseV9oYW5kbGVfc3Ry ZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiB7CiAJVHJhbnNhY3Rpb25JZCB4aWQ7CiAJTG9naWNh bFJlcENvbW1pdERhdGEgY29tbWl0X2RhdGE7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndp bmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCisJLyogU2F2ZSB0aGUgbWVz c2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCisJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxf bXNnID0gKnM7CiAKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJS T1IsCkBAIC0xNTA3LDE0ICsyMTUyLDg1IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0KFN0 cmluZ0luZm8gcykKIAl4aWQgPSBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChzLCAmY29t bWl0X2RhdGEpOwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoeGlkLCBjb21taXRfZGF0 YS5jb21taXRfbHNuKTsKIAotCWVsb2coREVCVUcxLCAicmVjZWl2ZWQgY29tbWl0IGZvciBzdHJl YW1lZCB0cmFuc2FjdGlvbiAldSIsIHhpZCk7CisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0 aW9uX2FwcGx5X2FjdGlvbih4aWQsICZ3aW5mbyk7CiAKLQlhcHBseV9zcG9vbGVkX21lc3NhZ2Vz KHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJ eworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQlhcHBseV9oYW5kbGVfY29tbWl0 X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisJCQkvKgorCQkJICogVGhlIHRyYW5zYWN0aW9uIGhh cyBiZWVuIHNlcmlhbGl6ZWQgdG8gZmlsZSwgc28gcmVwbGF5IGFsbCB0aGUKKwkJCSAqIHNwb29s ZWQgb3BlcmF0aW9ucy4KKwkJCSAqLworCQkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2lj YWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LCB4aWQsCisJCQkJCQkJCSAgIGNvbW1pdF9kYXRh LmNvbW1pdF9sc24pOworCisJCQlhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRf ZGF0YSk7CisKKwkJCS8qIFVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMg YW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQsIHhpZCk7CisKKwkJCWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vz c2luZyB0aGUgU1RSRUFNIENPTU1JVCBjb21tYW5kIik7CisJCQlicmVhazsKKworCQljYXNlIFRS QU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJaWYg KHBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKSkKKwkJCXsKKwkJCQkvKiBGaW5p c2ggcHJvY2Vzc2luZyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiAqLworCQkJCXBhX3hhY3Rf ZmluaXNoKHdpbmZvLCBjb21taXRfZGF0YS5lbmRfbHNuKTsKKwkJCQlicmVhazsKKwkJCX0KKwor CQkJLyoKKwkJCSAqIFN3aXRjaCB0byBzZXJpYWxpemUgbW9kZSB3aGVuIHdlIGFyZSBub3QgYWJs ZSB0byBzZW5kIHRoZQorCQkJICogY2hhbmdlIHRvIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkJ CSAqLworCQkJcGFfc3dpdGNoX3RvX3BhcnRpYWxfc2VyaWFsaXplKHdpbmZvLCB0cnVlKTsKKwor CQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFM SVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJc3RyZWFtX29wZW5fYW5kX3dyaXRlX2NoYW5n ZSh4aWQsIExPR0lDQUxfUkVQX01TR19TVFJFQU1fQ09NTUlULAorCQkJCQkJCQkJCSAmb3JpZ2lu YWxfbXNnKTsKKworCQkJcGFfc2V0X2ZpbGVzZXRfc3RhdGUod2luZm8tPnNoYXJlZCwgRlNfU0VS SUFMSVpFX0RPTkUpOwogCi0JLyogdW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hh bmdlcyBhbmQgc3VieGFjdCBpbmZvICovCi0Jc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKwkJCS8qIEZpbmlzaCBwcm9jZXNzaW5nIHRoZSBzdHJl YW1pbmcgdHJhbnNhY3Rpb24uICovCisJCQlwYV94YWN0X2ZpbmlzaCh3aW5mbywgY29tbWl0X2Rh dGEuZW5kX2xzbik7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZOgor CisJCQkvKgorCQkJICogSWYgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBhcHBseWluZyBz cG9vbGVkIG1lc3NhZ2VzIHRoZW4KKwkJCSAqIGNsb3NlIHRoZSBmaWxlIGJlZm9yZSBjb21taXR0 aW5nLgorCQkJICovCisJCQlpZiAoc3RyZWFtX2ZkKQorCQkJCXN0cmVhbV9jbG9zZV9maWxlKCk7 CisKKwkJCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKKworCQkJ TXlQYXJhbGxlbFNoYXJlZC0+bGFzdF9jb21taXRfZW5kID0gWGFjdExhc3RDb21taXRFbmQ7CisK KwkJCS8qCisJCQkgKiBJdCBpcyBpbXBvcnRhbnQgdG8gc2V0IHRoZSB0cmFuc2FjdGlvbiBzdGF0 ZSBhcyBmaW5pc2hlZCBiZWZvcmUKKwkJCSAqIHJlbGVhc2luZyB0aGUgbG9jay4gU2VlIHBhX3dh aXRfZm9yX3hhY3RfZmluaXNoLgorCQkJICovCisJCQlwYV9zZXRfeGFjdF9zdGF0ZShNeVBhcmFs bGVsU2hhcmVkLCBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCk7CisJCQlwYV91bmxvY2tfdHJhbnNh Y3Rpb24oeGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCQkJcGFfcmVzZXRfc3VidHJhbnMo KTsKKworCQkJZWxvZyhERUJVRzEsICJmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBTVFJFQU0gQ09N TUlUIGNvbW1hbmQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2Up OworCQkJYnJlYWs7CisJfQogCiAJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5n IHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKGNv bW1pdF9kYXRhLmVuZF9sc24pOwpAQCAtMTU1OCw5ICsyMjc0LDE2IEBAIGFwcGx5X2hhbmRsZV9j b21taXRfaW50ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKQogCQlyZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcCA9IGNvbW1pdF9kYXRhLT5jb21taXR0aW1l OwogCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCWlmIChJc1RyYW5zYWN0aW9u QmxvY2soKSkKKwkJeworCQkJRW5kVHJhbnNhY3Rpb25CbG9jayhmYWxzZSk7CisJCQlDb21taXRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJfQorCiAJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7 CiAKLQkJc3RvcmVfZmx1c2hfcG9zaXRpb24oY29tbWl0X2RhdGEtPmVuZF9sc24pOworCQlzdG9y ZV9mbHVzaF9wb3NpdGlvbihjb21taXRfZGF0YS0+ZW5kX2xzbiwgWGFjdExhc3RDb21taXRFbmQp OwogCX0KIAllbHNlCiAJewpAQCAtMjUxMSw3ICszMjM0LDcgQEAgYXBwbHlfaGFuZGxlX3RydW5j YXRlKFN0cmluZ0luZm8gcykKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1l c3NhZ2UgZGlzcGF0Y2hlci4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGFwcGx5X2Rpc3BhdGNo KFN0cmluZ0luZm8gcykKIHsKIAlMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24gPSBwcV9nZXRtc2di eXRlKHMpOwpAQCAtMjY3NSwxNyArMzM5OCwyNCBAQCBnZXRfZmx1c2hfcG9zaXRpb24oWExvZ1Jl Y1B0ciAqd3JpdGUsIFhMb2dSZWNQdHIgKmZsdXNoLAogLyoKICAqIFN0b3JlIGN1cnJlbnQgcmVt b3RlL2xvY2FsIGxzbiBwYWlyIGluIHRoZSB0cmFja2luZyBsaXN0LgogICovCi1zdGF0aWMgdm9p ZAotc3RvcmVfZmx1c2hfcG9zaXRpb24oWExvZ1JlY1B0ciByZW1vdGVfbHNuKQordm9pZAorc3Rv cmVfZmx1c2hfcG9zaXRpb24oWExvZ1JlY1B0ciByZW1vdGVfbHNuLCBYTG9nUmVjUHRyIGxvY2Fs X2xzbikKIHsKIAlGbHVzaFBvc2l0aW9uICpmbHVzaHBvczsKIAorCS8qCisJICogU2tpcCBmb3Ig cGFyYWxsZWwgYXBwbHkgd29ya2VycywgYmVjYXVzZSB0aGUgbHNuX21hcHBpbmcgaXMgbWFpbnRh aW5lZAorCSAqIGJ5IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLgorCSAqLworCWlmIChhbV9wYXJh bGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuOworCiAJLyogTmVlZCB0byBkbyB0aGlzIGlu IHBlcm1hbmVudCBjb250ZXh0ICovCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4 dCk7CiAKIAkvKiBUcmFjayBjb21taXQgbHNuICAqLwogCWZsdXNocG9zID0gKEZsdXNoUG9zaXRp b24gKikgcGFsbG9jKHNpemVvZihGbHVzaFBvc2l0aW9uKSk7Ci0JZmx1c2hwb3MtPmxvY2FsX2Vu ZCA9IFhhY3RMYXN0Q29tbWl0RW5kOworCWZsdXNocG9zLT5sb2NhbF9lbmQgPSBsb2NhbF9sc247 CiAJZmx1c2hwb3MtPnJlbW90ZV9lbmQgPSByZW1vdGVfbHNuOwogCiAJZGxpc3RfcHVzaF90YWls KCZsc25fbWFwcGluZywgJmZsdXNocG9zLT5ub2RlKTsKQEAgLTI3NDQsNiArMzQ3NCw3IEBAIExv Z2ljYWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0X3JlY2VpdmVkKQogCWVycmNhbGxiYWNr LmNhbGxiYWNrID0gYXBwbHlfZXJyb3JfY2FsbGJhY2s7CiAJZXJyY2FsbGJhY2sucHJldmlvdXMg PSBlcnJvcl9jb250ZXh0X3N0YWNrOwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJh Y2s7CisJYXBwbHlfZXJyb3JfY29udGV4dF9zdGFjayA9IGVycm9yX2NvbnRleHRfc3RhY2s7CiAK IAkvKiBUaGlzIG91dGVyIGxvb3AgaXRlcmF0ZXMgb25jZSBwZXIgd2FpdC4gKi8KIAlmb3IgKDs7 KQpAQCAtMjk1OCw2ICszNjg5LDcgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChYTG9nUmVjUHRyIGxh c3RfcmVjZWl2ZWQpCiAKIAkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KIAllcnJv cl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CisJYXBwbHlfZXJyb3JfY29u dGV4dF9zdGFjayA9IGVycm9yX2NvbnRleHRfc3RhY2s7CiAKIAkvKiBBbGwgZG9uZSAqLwogCXdh bHJjdl9lbmRzdHJlYW1pbmcoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgJnRsaSk7CkBAIC0zMDU2 LDkgKzM3ODgsMzEgQEAgc2VuZF9mZWVkYmFjayhYTG9nUmVjUHRyIHJlY3Zwb3MsIGJvb2wgZm9y Y2UsIGJvb2wgcmVxdWVzdFJlcGx5KQogfQogCiAvKgotICogUmVyZWFkIHN1YnNjcmlwdGlvbiBp bmZvIGlmIG5lZWRlZC4gTW9zdCBjaGFuZ2VzIHdpbGwgYmUgZXhpdC4KKyAqIEV4aXQgcm91dGlu ZSBmb3IgYXBwbHkgd29ya2VycyBkdWUgdG8gc3Vic2NyaXB0aW9uIHBhcmFtZXRlciBjaGFuZ2Vz LgogICovCiBzdGF0aWMgdm9pZAorYXBwbHlfd29ya2VyX2V4aXQodm9pZCkKK3sKKwlpZiAoYW1f cGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJeworCQkvKgorCQkgKiBEb24ndCBzdG9wIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgYXMgdGhlIGxlYWRlciB3aWxsIGRldGVjdCB0aGUKKwkJICog c3Vic2NyaXB0aW9uIHBhcmFtZXRlciBjaGFuZ2UgYW5kIHJlc3RhcnQgbG9naWNhbCByZXBsaWNh dGlvbiBsYXRlcgorCQkgKiBhbnl3YXkuIFRoaXMgYWxzbyBwcmV2ZW50cyB0aGUgbGVhZGVyIGZy b20gcmVwb3J0aW5nIGVycm9ycyB3aGVuCisJCSAqIHRyeWluZyB0byBjb21tdW5pY2F0ZSB3aXRo IGEgc3RvcHBlZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIHdoaWNoCisJCSAqIHdvdWxkIGFjY2lk ZW50YWxseSBkaXNhYmxlIHN1YnNjcmlwdGlvbnMgaWYgZGlzYWJsZV9vbl9lcnJvciB3YXMKKwkJ ICogc2V0LgorCQkgKi8KKwkJcmV0dXJuOworCX0KKworCXByb2NfZXhpdCgwKTsKK30KKworLyoK KyAqIFJlcmVhZCBzdWJzY3JpcHRpb24gaW5mbyBpZiBuZWVkZWQuIE1vc3QgY2hhbmdlcyB3aWxs IGJlIGV4aXQuCisgKi8KK3ZvaWQKIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIHsK IAlNZW1vcnlDb250ZXh0IG9sZGN0eDsKQEAgLTMwODgsOSArMzg0Miw5IEBAIG1heWJlX3JlcmVh ZF9zdWJzY3JpcHRpb24odm9pZCkKIAlpZiAoIW5ld3N1YikKIAl7CiAJCWVyZXBvcnQoTE9HLAot CQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3Jp cHRpb24gXCIlc1wiIHdpbGwgIgotCQkJCQkJInN0b3AgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9u IHdhcyByZW1vdmVkIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCQkvKiB0cmFu c2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtl ciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgc3RvcCBi ZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIHJlbW92ZWQiLAorCQkJCQkJZ2V0X3dvcmtlcl9u YW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwogCiAJCXByb2NfZXhpdCgwKTsKIAl9CkBA IC0zMDk5LDExICszODUzLDExIEBAIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIAlp ZiAoIW5ld3N1Yi0+ZW5hYmxlZCkKIAl7CiAJCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImxv Z2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdp bGwgIgotCQkJCQkJInN0b3AgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCIs Ci0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJLyogdHJhbnNsYXRvcjogZmlyc3Qg JXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJy bXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AgYmVjYXVzZSB0aGUgc3Vi c2NyaXB0aW9uIHdhcyBkaXNhYmxlZCIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwgTXlTdWJz Y3JpcHRpb24tPm5hbWUpKSk7CiAKLQkJcHJvY19leGl0KDApOworCQlhcHBseV93b3JrZXJfZXhp dCgpOwogCX0KIAogCS8qICFzbG90bmFtZSBzaG91bGQgbmV2ZXIgaGFwcGVuIHdoZW4gZW5hYmxl ZCBpcyB0cnVlLiAqLwpAQCAtMzExNCw3ICszODY4LDEwIEBAIG1heWJlX3JlcmVhZF9zdWJzY3Jp cHRpb24odm9pZCkKIAogCS8qCiAJICogRXhpdCBpZiBhbnkgcGFyYW1ldGVyIHRoYXQgYWZmZWN0 cyB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gd2FzIGNoYW5nZWQuCi0JICogVGhlIGxhdW5jaGVyIHdp bGwgc3RhcnQgYSBuZXcgd29ya2VyLgorCSAqIFRoZSBsYXVuY2hlciB3aWxsIHN0YXJ0IGEgbmV3 IHdvcmtlciBidXQgbm90ZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseQorCSAqIHdvcmtlciB3b24n dCByZXN0YXJ0IGlmIHRoZSBzdHJlYW1pbmcgb3B0aW9uJ3MgdmFsdWUgaXMgY2hhbmdlZCBmcm9t CisJICogJ3BhcmFsbGVsJyB0byBhbnkgb3RoZXIgdmFsdWUgb3IgdGhlIHNlcnZlciBkZWNpZGVz IG5vdCB0byBzdHJlYW0gdGhlCisJICogaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24uCiAJICovCiAJ aWYgKHN0cmNtcChuZXdzdWItPmNvbm5pbmZvLCBNeVN1YnNjcmlwdGlvbi0+Y29ubmluZm8pICE9 IDAgfHwKIAkJc3RyY21wKG5ld3N1Yi0+bmFtZSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpICE9IDAg fHwKQEAgLTMxMjUsMTEgKzM4ODIsMTcgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lk KQogCQluZXdzdWItPm93bmVyICE9IE15U3Vic2NyaXB0aW9uLT5vd25lciB8fAogCQkhZXF1YWwo bmV3c3ViLT5wdWJsaWNhdGlvbnMsIE15U3Vic2NyaXB0aW9uLT5wdWJsaWNhdGlvbnMpKQogCXsK LQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3 b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCByZXN0YXJ0IGJlY2F1c2Ugb2YgYSBw YXJhbWV0ZXIgY2hhbmdlIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCQlpZiAo YW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1z ZygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlw dGlvbiBcIiVzXCIgd2lsbCBzdG9wIGJlY2F1c2Ugb2YgYSBwYXJhbWV0ZXIgY2hhbmdlIiwKKwkJ CQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJZWxzZQorCQkJZXJlcG9ydChMT0csCisJ CQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0 aW9uIHdvcmtlciAqLworCQkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3 aWxsIHJlc3RhcnQgYmVjYXVzZSBvZiBhIHBhcmFtZXRlciBjaGFuZ2UiLAorCQkJCQkJCWdldF93 b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAotCQlwcm9jX2V4aXQoMCk7 CisJCWFwcGx5X3dvcmtlcl9leGl0KCk7CiAJfQogCiAJLyogQ2hlY2sgZm9yIG90aGVyIGNoYW5n ZXMgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuIHRvby4gKi8KQEAgLTMzODEsNyArNDE0NCw3IEBA IGNoYW5nZXNfZmlsZW5hbWUoY2hhciAqcGF0aCwgT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhp ZCkKICAqIHRvcGxldmVsIHRyYW5zYWN0aW9uLiBFYWNoIHN1YnNjcmlwdGlvbiBoYXMgYSBzZXBh cmF0ZSBzZXQgb2YgZmlsZXMKICAqIGZvciBhbnkgdG9wbGV2ZWwgdHJhbnNhY3Rpb24uCiAgKi8K LXN0YXRpYyB2b2lkCit2b2lkCiBzdHJlYW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5z YWN0aW9uSWQgeGlkKQogewogCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKQEAgLTM0MDQsOSArNDE2 Nyw2IEBAIHN0cmVhbV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQp CiAgKiBieSBzdHJlYW1feGlkIChnbG9iYWwgdmFyaWFibGUpLiBJZiBpdCdzIHRoZSBmaXJzdCBj aHVuayBvZiBzdHJlYW1lZAogICogY2hhbmdlcyBmb3IgdGhpcyB0cmFuc2FjdGlvbiwgY3JlYXRl IHRoZSBidWZmaWxlLCBvdGhlcndpc2Ugb3BlbiB0aGUKICAqIHByZXZpb3VzbHkgY3JlYXRlZCBm aWxlLgotICoKLSAqIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2Yg YSAic3RyZWFtaW5nIiBibG9jaywgaS5lLgotICogYmV0d2VlbiBzdHJlYW1fc3RhcnQvc3RyZWFt X3N0b3AgbWVzc2FnZXMgZnJvbSB0aGUgdXBzdHJlYW0uCiAgKi8KIHN0YXRpYyB2b2lkCiBzdHJl YW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZmlyc3Rfc2Vn bWVudCkKQEAgLTM0MTQsNyArNDE3NCw2IEBAIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBU cmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KQogCWNoYXIJCXBhdGhbTUFYUEdQ QVRIXTsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAotCUFzc2VydChpbl9zdHJlYW1lZF90cmFu c2FjdGlvbik7CiAJQXNzZXJ0KE9pZElzVmFsaWQoc3ViaWQpKTsKIAlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoeGlkKSk7CiAJQXNzZXJ0KHN0cmVhbV9mZCA9PSBOVUxMKTsKQEAgLTM0NTMs MTUgKzQyMTIsMTAgQEAgc3RyZWFtX29wZW5fZmlsZShPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQg eGlkLCBib29sIGZpcnN0X3NlZ21lbnQpCiAvKgogICogc3RyZWFtX2Nsb3NlX2ZpbGUKICAqCSAg Q2xvc2UgdGhlIGN1cnJlbnRseSBvcGVuIGZpbGUgd2l0aCBzdHJlYW1lZCBjaGFuZ2VzLgotICoK LSAqIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYSBzdHJlYW1pbmcgYmxv Y2ssIGkuZS4gYXQgc3RyZWFtX3N0b3AKLSAqIG1lc3NhZ2UgZnJvbSB0aGUgdXBzdHJlYW0uCiAg Ki8KIHN0YXRpYyB2b2lkCiBzdHJlYW1fY2xvc2VfZmlsZSh2b2lkKQogewotCUFzc2VydChpbl9z dHJlYW1lZF90cmFuc2FjdGlvbik7Ci0JQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN0cmVh bV94aWQpKTsKIAlBc3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwogCiAJQnVmRmlsZUNsb3NlKHN0 cmVhbV9mZCk7CkBAIC0zNDgzLDggKzQyMzcsNiBAQCBzdHJlYW1fd3JpdGVfY2hhbmdlKGNoYXIg YWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB7CiAJaW50CQkJbGVuOwogCi0JQXNzZXJ0KGluX3N0cmVh bWVkX3RyYW5zYWN0aW9uKTsKLQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3RyZWFtX3hp ZCkpOwogCUFzc2VydChzdHJlYW1fZmQgIT0gTlVMTCk7CiAKIAkvKiB0b3RhbCBvbi1kaXNrIHNp emUsIGluY2x1ZGluZyB0aGUgYWN0aW9uIHR5cGUgY2hhcmFjdGVyICovCkBAIC0zNTAyLDYgKzQy NTQsMjYgQEAgc3RyZWFtX3dyaXRlX2NoYW5nZShjaGFyIGFjdGlvbiwgU3RyaW5nSW5mbyBzKQog CUJ1ZkZpbGVXcml0ZShzdHJlYW1fZmQsICZzLT5kYXRhW3MtPmN1cnNvcl0sIGxlbik7CiB9CiAK Ky8qCisgKiBzdHJlYW1fb3Blbl9hbmRfd3JpdGVfY2hhbmdlCisgKgkgIFNlcmlhbGl6ZSBhIG1l c3NhZ2UgdG8gYSBmaWxlIGZvciB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24uCisgKgorICogVGhpcyBm dW5jdGlvbiBpcyBzaW1pbGFyIHRvIHN0cmVhbV93cml0ZV9jaGFuZ2UgZXhjZXB0IHRoYXQgaXQg d2lsbCBvcGVuIHRoZQorICogdGFyZ2V0IGZpbGUgaWYgbm90IGFscmVhZHkgYmVmb3JlIHdyaXRp bmcgdGhlIG1lc3NhZ2UgYW5kIGNsb3NlIHRoZSBmaWxlIGF0CisgKiB0aGUgZW5kLgorICovCitz dGF0aWMgdm9pZAorc3RyZWFtX29wZW5fYW5kX3dyaXRlX2NoYW5nZShUcmFuc2FjdGlvbklkIHhp ZCwgY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcykKK3sKKwlBc3NlcnQoIWluX3N0cmVhbWVkX3Ry YW5zYWN0aW9uKTsKKworCWlmICghc3RyZWFtX2ZkKQorCQlzdHJlYW1fc3RhcnRfaW50ZXJuYWwo eGlkLCBmYWxzZSk7CisKKwlzdHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlvbiwgcyk7CisJc3RyZWFt X3N0b3BfaW50ZXJuYWwoeGlkKTsKK30KKwogLyoKICAqIENsZWFudXAgdGhlIG1lbW9yeSBmb3Ig c3VieGFjdHMgYW5kIHJlc2V0IHRoZSByZWxhdGVkIHZhcmlhYmxlcy4KICAqLwpAQCAtMzYxMywz NyArNDM4NSwxNiBAQCBzdGFydF9hcHBseShYTG9nUmVjUHRyIG9yaWdpbl9zdGFydHBvcykKIAlQ R19FTkRfVFJZKCk7CiB9CiAKLS8qIExvZ2ljYWwgUmVwbGljYXRpb24gQXBwbHkgd29ya2VyIGVu dHJ5IHBvaW50ICovCisvKgorICogQ29tbW9uIGluaXRpYWxpemF0aW9uIGZvciBsZWFkZXIgYXBw bHkgd29ya2VyIGFuZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKgorICogSW5pdGlhbGl6ZSB0 aGUgZGF0YWJhc2UgY29ubmVjdGlvbiwgaW4tbWVtb3J5IHN1YnNjcmlwdGlvbiBhbmQgbmVjZXNz YXJ5CisgKiBjb25maWcgb3B0aW9ucy4KKyAqLwogdm9pZAotQXBwbHlXb3JrZXJNYWluKERhdHVt IG1haW5fYXJnKQorSW5pdGlhbGl6ZUFwcGx5V29ya2VyKHZvaWQpCiB7Ci0JaW50CQkJd29ya2Vy X3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKIAlNZW1vcnlDb250ZXh0IG9sZGN0eDsK LQljaGFyCQlvcmlnaW5uYW1lW05BTUVEQVRBTEVOXTsKLQlYTG9nUmVjUHRyCW9yaWdpbl9zdGFy dHBvcyA9IEludmFsaWRYTG9nUmVjUHRyOwotCWNoYXIJICAgKm15c2xvdG5hbWUgPSBOVUxMOwot CVdhbFJjdlN0cmVhbU9wdGlvbnMgb3B0aW9uczsKLQlpbnQJCQlzZXJ2ZXJfdmVyc2lvbjsKLQot CS8qIEF0dGFjaCB0byBzbG90ICovCi0JbG9naWNhbHJlcF93b3JrZXJfYXR0YWNoKHdvcmtlcl9z bG90KTsKLQotCS8qIFNldHVwIHNpZ25hbCBoYW5kbGluZyAqLwotCXBxc2lnbmFsKFNJR0hVUCwg U2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7Ci0JcHFzaWduYWwoU0lHVEVSTSwgZGllKTsK LQlCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKLQotCS8qCi0JICogV2UgZG9uJ3Qg Y3VycmVudGx5IG5lZWQgYW55IFJlc291cmNlT3duZXIgaW4gYSB3YWxyZWNlaXZlciBwcm9jZXNz LCBidXQKLQkgKiBpZiB3ZSBkaWQsIHdlIGNvdWxkIGNhbGwgQ3JlYXRlQXV4UHJvY2Vzc1Jlc291 cmNlT3duZXIgaGVyZS4KLQkgKi8KLQotCS8qIEluaXRpYWxpc2Ugc3RhdHMgdG8gYSBzYW5pc2gg dmFsdWUgKi8KLQlNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3Rfc2VuZF90aW1lID0gTXlMb2dpY2Fs UmVwV29ya2VyLT5sYXN0X3JlY3ZfdGltZSA9Ci0JCU15TG9naWNhbFJlcFdvcmtlci0+cmVwbHlf dGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKLQotCS8qIExvYWQgdGhlIGxpYnBxLXNwZWNp ZmljIGZ1bmN0aW9ucyAqLwotCWxvYWRfZmlsZSgibGlicHF3YWxyZWNlaXZlciIsIGZhbHNlKTsK IAogCS8qIFJ1biBhcyByZXBsaWNhIHNlc3Npb24gcmVwbGljYXRpb24gcm9sZS4gKi8KIAlTZXRD b25maWdPcHRpb24oInNlc3Npb25fcmVwbGljYXRpb25fcm9sZSIsICJyZXBsaWNhIiwKQEAgLTM2 NzEsOSArNDQyMiwxMCBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJaWYgKCFN eVN1YnNjcmlwdGlvbikKIAl7CiAJCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImxvZ2ljYWwg cmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUgd2lsbCBub3QgIgot CQkJCQkJInN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCBkdXJpbmcg c3RhcnR1cCIsCi0JCQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkKSkpOworCQkvKiB0cmFu c2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLwor CQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gJXUgd2lsbCBub3Qgc3RhcnQgYmVjYXVz ZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyByZW1vdmVkIGR1cmluZyBzdGFydHVwIiwKKwkJCQkJCWdl dF93b3JrZXJfbmFtZSgpLCBNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkKSkpOworCiAJCXByb2Nf ZXhpdCgwKTsKIAl9CiAKQEAgLTM2ODMsMTEgKzQ0MzUsMTEgQEAgQXBwbHlXb3JrZXJNYWluKERh dHVtIG1haW5fYXJnKQogCWlmICghTXlTdWJzY3JpcHRpb24tPmVuYWJsZWQpCiAJewogCQllcmVw b3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBm b3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIG5vdCAiCi0JCQkJCQkic3RhcnQgYmVjYXVzZSB0 aGUgc3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCBkdXJpbmcgc3RhcnR1cCIsCi0JCQkJCQlNeVN1 YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJLyogdHJhbnNsYXRvcjogZmlyc3QgJXMgaXMgdGhlIG5h bWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJybXNnKCIlcyBmb3Ig c3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIG5vdCBzdGFydCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRp b24gd2FzIGRpc2FibGVkIGR1cmluZyBzdGFydHVwIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgp LCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAotCQlwcm9jX2V4aXQoMCk7CisJCWFwcGx5X3dv cmtlcl9leGl0KCk7CiAJfQogCiAJLyogU2V0dXAgc3luY2hyb25vdXMgY29tbWl0IGFjY29yZGlu ZyB0byB0aGUgdXNlcidzIHdpc2hlcyAqLwpAQCAtMzcwMiwxMyArNDQ1NCw0OSBAQCBBcHBseVdv cmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJaWYgKGFtX3RhYmxlc3luY193b3JrZXIoKSkKIAkJ ZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiB0YWJsZSBzeW5j aHJvbml6YXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiLCB0YWJsZSBcIiVzXCIg aGFzIHN0YXJ0ZWQiLAotCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUsIGdldF9yZWxfbmFtZShN eUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKSkpKTsKKwkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1l LAorCQkJCQkJZ2V0X3JlbF9uYW1lKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpKSkpOwogCWVs c2UKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBs eSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAotCQkJCQkJTXlT dWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBu YW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMgZm9y IHN1YnNjcmlwdGlvbiBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAorCQkJCQkJZ2V0X3dvcmtlcl9uYW1l KCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwogCiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7Cit9CisKKy8qIExvZ2ljYWwgUmVwbGljYXRpb24gQXBwbHkgd29ya2VyIGVudHJ5IHBvaW50 ICovCit2b2lkCitBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJaW50CQkJd29y a2VyX3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKKwljaGFyCQlvcmlnaW5uYW1lW05B TUVEQVRBTEVOXTsKKwlYTG9nUmVjUHRyCW9yaWdpbl9zdGFydHBvcyA9IEludmFsaWRYTG9nUmVj UHRyOworCWNoYXIJICAgKm15c2xvdG5hbWUgPSBOVUxMOworCVdhbFJjdlN0cmVhbU9wdGlvbnMg b3B0aW9uczsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbjsKKworCS8qIEF0dGFjaCB0byBzbG90ICov CisJbG9naWNhbHJlcF93b3JrZXJfYXR0YWNoKHdvcmtlcl9zbG90KTsKKworCS8qIFNldHVwIHNp Z25hbCBoYW5kbGluZyAqLworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZp Z1JlbG9hZCk7CisJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKwlCYWNrZ3JvdW5kV29ya2VyVW5i bG9ja1NpZ25hbHMoKTsKKworCS8qCisJICogV2UgZG9uJ3QgY3VycmVudGx5IG5lZWQgYW55IFJl c291cmNlT3duZXIgaW4gYSB3YWxyZWNlaXZlciBwcm9jZXNzLCBidXQKKwkgKiBpZiB3ZSBkaWQs IHdlIGNvdWxkIGNhbGwgQ3JlYXRlQXV4UHJvY2Vzc1Jlc291cmNlT3duZXIgaGVyZS4KKwkgKi8K KworCS8qIEluaXRpYWxpc2Ugc3RhdHMgdG8gYSBzYW5pc2ggdmFsdWUgKi8KKwlNeUxvZ2ljYWxS ZXBXb3JrZXItPmxhc3Rfc2VuZF90aW1lID0gTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3JlY3Zf dGltZSA9CisJCU15TG9naWNhbFJlcFdvcmtlci0+cmVwbHlfdGltZSA9IEdldEN1cnJlbnRUaW1l c3RhbXAoKTsKKworCS8qIExvYWQgdGhlIGxpYnBxLXNwZWNpZmljIGZ1bmN0aW9ucyAqLworCWxv YWRfZmlsZSgibGlicHF3YWxyZWNlaXZlciIsIGZhbHNlKTsKKworCUluaXRpYWxpemVBcHBseVdv cmtlcigpOwogCiAJLyogQ29ubmVjdCB0byB0aGUgb3JpZ2luIGFuZCBzdGFydCB0aGUgcmVwbGlj YXRpb24uICovCiAJZWxvZyhERUJVRzEsICJjb25uZWN0aW5nIHRvIHB1Ymxpc2hlciB1c2luZyBj b25uZWN0aW9uIHN0cmluZyBcIiVzXCIiLApAQCAtMzcxOCwyMCArNDUwNiwxNSBAQCBBcHBseVdv cmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJewogCQlzdGFydF90YWJsZV9zeW5jKCZvcmlnaW5f c3RhcnRwb3MsICZteXNsb3RuYW1lKTsKIAotCQkvKgotCQkgKiBBbGxvY2F0ZSB0aGUgb3JpZ2lu IG5hbWUgaW4gbG9uZy1saXZlZCBjb250ZXh0IGZvciBlcnJvciBjb250ZXh0Ci0JCSAqIG1lc3Nh Z2UuCi0JCSAqLwogCQlSZXBsaWNhdGlvbk9yaWdpbk5hbWVGb3JMb2dpY2FsUmVwKE15U3Vic2Ny aXB0aW9uLT5vaWQsCiAJCQkJCQkJCQkJICAgTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxpZCwKIAkJ CQkJCQkJCQkgICBvcmlnaW5uYW1lLAogCQkJCQkJCQkJCSAgIHNpemVvZihvcmlnaW5uYW1lKSk7 Ci0JCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5vcmlnaW5fbmFtZSA9IE1lbW9yeUNvbnRleHRT dHJkdXAoQXBwbHlDb250ZXh0LAotCQkJCQkJCQkJCQkJCQkJCSAgIG9yaWdpbm5hbWUpOworCQlz ZXRfYXBwbHlfZXJyb3JfY29udGV4dF9vcmlnaW4ob3JpZ2lubmFtZSk7CiAJfQogCWVsc2UKIAl7 Ci0JCS8qIFRoaXMgaXMgbWFpbiBhcHBseSB3b3JrZXIgKi8KKwkJLyogVGhpcyBpcyB0aGUgbGVh ZGVyIGFwcGx5IHdvcmtlciAqLwogCQlSZXBPcmlnaW5JZCBvcmlnaW5pZDsKIAkJVGltZUxpbmVJ RAlzdGFydHBvaW50VExJOwogCQljaGFyCSAgICplcnI7CkBAIC0zNzU1LDcgKzQ1MzgsNyBAQCBB cHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9i eV9uYW1lKG9yaWdpbm5hbWUsIHRydWUpOwogCQlpZiAoIU9pZElzVmFsaWQob3JpZ2luaWQpKQog CQkJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2NyZWF0ZShvcmlnaW5uYW1lKTsKLQkJcmVwbG9yaWdp bl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkKTsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9y aWdpbmlkLCAwKTsKIAkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCQlv cmlnaW5fc3RhcnRwb3MgPSByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGZhbHNlKTsK IAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC0zNzczLDEyICs0NTU2LDcgQEAgQXBw bHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQkgKi8KIAkJKHZvaWQpIHdhbHJjdl9pZGVu dGlmeV9zeXN0ZW0oTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgJnN0YXJ0cG9pbnRUTEkpOwogCi0J CS8qCi0JCSAqIEFsbG9jYXRlIHRoZSBvcmlnaW4gbmFtZSBpbiBsb25nLWxpdmVkIGNvbnRleHQg Zm9yIGVycm9yIGNvbnRleHQKLQkJICogbWVzc2FnZS4KLQkJICovCi0JCWFwcGx5X2Vycm9yX2Nh bGxiYWNrX2FyZy5vcmlnaW5fbmFtZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoQXBwbHlDb250ZXh0 LAotCQkJCQkJCQkJCQkJCQkJCSAgIG9yaWdpbm5hbWUpOworCQlzZXRfYXBwbHlfZXJyb3JfY29u dGV4dF9vcmlnaW4ob3JpZ2lubmFtZSk7CiAJfQogCiAJLyoKQEAgLTM3OTYsMTMgKzQ1NzQsMzYg QEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCiAJc2VydmVyX3ZlcnNpb24gPSB3 YWxyY3Zfc2VydmVyX3ZlcnNpb24oTG9nUmVwV29ya2VyV2FsUmN2Q29ubik7CiAJb3B0aW9ucy5w cm90by5sb2dpY2FsLnByb3RvX3ZlcnNpb24gPQorCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNjAwMDAg PyBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSA6CiAJCXNlcnZl cl92ZXJzaW9uID49IDE1MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9fVFdPUEhBU0VfVkVSU0lPTl9O VU0gOgogCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNDAwMDAgPyBMT0dJQ0FMUkVQX1BST1RPX1NUUkVB TV9WRVJTSU9OX05VTSA6CiAJCUxPR0lDQUxSRVBfUFJPVE9fVkVSU0lPTl9OVU07CiAKIAlvcHRp b25zLnByb3RvLmxvZ2ljYWwucHVibGljYXRpb25fbmFtZXMgPSBNeVN1YnNjcmlwdGlvbi0+cHVi bGljYXRpb25zOwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5iaW5hcnkgPSBNeVN1YnNjcmlwdGlv bi0+YmluYXJ5OwotCW9wdGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmcgPSBNeVN1YnNjcmlw dGlvbi0+c3RyZWFtOworCisJLyoKKwkgKiBBc3NpZ24gdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiB2 YWx1ZSBmb3Igc3RyZWFtaW5nIG9wdGlvbiBhY2NvcmRpbmcgdG8KKwkgKiB0aGUgJ3N0cmVhbWlu ZycgbW9kZSBhbmQgdGhlIHB1Ymxpc2hlcidzIGFiaWxpdHkgdG8gc3VwcG9ydCB0aGF0IG1vZGUu CisJICovCisJaWYgKHNlcnZlcl92ZXJzaW9uID49IDE2MDAwMCAmJgorCQlNeVN1YnNjcmlwdGlv bi0+c3RyZWFtID09IExPR0lDQUxSRVBfU1RSRUFNX1BBUkFMTEVMKQorCXsKKwkJb3B0aW9ucy5w cm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIgPSAicGFyYWxsZWwiOworCQlNeUxvZ2ljYWxSZXBX b3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoc2VydmVyX3ZlcnNp b24gPj0gMTQwMDAwICYmCisJCQkgTXlTdWJzY3JpcHRpb24tPnN0cmVhbSAhPSBMT0dJQ0FMUkVQ X1NUUkVBTV9PRkYpCisJeworCQlvcHRpb25zLnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0ciA9 ICJvbiI7CisJCU15TG9naWNhbFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBmYWxzZTsKKwl9 CisJZWxzZQorCXsKKwkJb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIgPSBOVUxM OworCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gZmFsc2U7CisJfQorCiAJ b3B0aW9ucy5wcm90by5sb2dpY2FsLnR3b3BoYXNlID0gZmFsc2U7CiAJb3B0aW9ucy5wcm90by5s b2dpY2FsLm9yaWdpbiA9IHBzdHJkdXAoTXlTdWJzY3JpcHRpb24tPm9yaWdpbik7CiAKQEAgLTM4 OTksNiArNDcwMCwxNSBAQCBJc0xvZ2ljYWxXb3JrZXIodm9pZCkKIAlyZXR1cm4gTXlMb2dpY2Fs UmVwV29ya2VyICE9IE5VTEw7CiB9CiAKKy8qCisgKiBJcyBjdXJyZW50IHByb2Nlc3MgYSBsb2dp Y2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlcj8KKyAqLworYm9vbAorSXNMb2dp Y2FsUGFyYWxsZWxBcHBseVdvcmtlcih2b2lkKQoreworCXJldHVybiBJc0xvZ2ljYWxXb3JrZXIo KSAmJiBhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKTsKK30KKwogLyoKICAqIFN0YXJ0IHNraXBw aW5nIGNoYW5nZXMgb2YgdGhlIHRyYW5zYWN0aW9uIGlmIHRoZSBnaXZlbiBMU04gbWF0Y2hlcyB0 aGUKICAqIExTTiBzcGVjaWZpZWQgYnkgc3Vic2NyaXB0aW9uJ3Mgc2tpcGxzbi4KQEAgLTM5NjEs NyArNDc3MSw3IEBAIGNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihYTG9nUmVjUHRyIGZpbmlz aF9sc24pCiAJWExvZ1JlY1B0cglteXNraXBsc24gPSBNeVN1YnNjcmlwdGlvbi0+c2tpcGxzbjsK IAlib29sCQlzdGFydGVkX3R4ID0gZmFsc2U7CiAKLQlpZiAobGlrZWx5KFhMb2dSZWNQdHJJc0lu dmFsaWQobXlza2lwbHNuKSkpCisJaWYgKGxpa2VseShYTG9nUmVjUHRySXNJbnZhbGlkKG15c2tp cGxzbikpIHx8IGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQogCQlyZXR1cm47CiAKIAlpZiAo IUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQpAQCAtNDAzMyw3ICs0ODQzLDcgQEAgY2xlYXJfc3Vic2Ny aXB0aW9uX3NraXBfbHNuKFhMb2dSZWNQdHIgZmluaXNoX2xzbikKIH0KIAogLyogRXJyb3IgY2Fs bGJhY2sgdG8gZ2l2ZSBtb3JlIGNvbnRleHQgaW5mbyBhYm91dCB0aGUgY2hhbmdlIGJlaW5nIGFw cGxpZWQgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBhcHBseV9lcnJvcl9jYWxsYmFjayh2b2lkICph cmcpCiB7CiAJQXBwbHlFcnJvckNhbGxiYWNrQXJnICplcnJhcmcgPSAmYXBwbHlfZXJyb3JfY2Fs bGJhY2tfYXJnOwpAQCAtNDA2MSwyMyArNDg3MSw0NyBAQCBhcHBseV9lcnJvcl9jYWxsYmFjayh2 b2lkICphcmcpCiAJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKIAkJCQkJICAgTFNOX0ZPUk1B VF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOwogCX0KLQllbHNlIGlmIChlcnJhcmctPnJlbW90 ZV9hdHRudW0gPCAwKQotCQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciBy ZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciBy ZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGluIHRyYW5zYWN0aW9uICV1LCBm aW5pc2hlZCBhdCAlWC8lWCIsCi0JCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKLQkJCQkgICBs b2dpY2FscmVwX21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAotCQkJCSAgIGVycmFyZy0+ cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJl bG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkLAotCQkJCSAgIExTTl9GT1JNQVRfQVJH UyhlcnJhcmctPmZpbmlzaF9sc24pKTsKIAllbHNlCi0JCWVycmNvbnRleHQoInByb2Nlc3Npbmcg cmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2Ug dHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgY29s dW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAotCQkJCSAg IGVycmFyZy0+b3JpZ2luX25hbWUsCi0JCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJy YXJnLT5jb21tYW5kKSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCi0J CQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVs LT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKLQkJCQkgICBlcnJh cmctPnJlbW90ZV94aWQsCi0JCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xz bikpOworCXsKKwkJaWYgKGVycmFyZy0+cmVtb3RlX2F0dG51bSA8IDApCisJCXsKKwkJCWlmIChY TG9nUmVjUHRySXNJbnZhbGlkKGVycmFyZy0+ZmluaXNoX2xzbikpCisJCQkJZXJyY29udGV4dCgi cHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJp bmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwi JXMuJXNcIiBpbiB0cmFuc2FjdGlvbiAldSIsCisJCQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1l LAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJ CQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+ cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCk7CisJ CQllbHNlCisJCQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGlj YXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGlj YXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNo ZWQgYXQgJVgvJVgiLAorCQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxv Z2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmct PnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVs LnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCisJCQkJCQkgICBMU05fRk9S TUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNuKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAo WExvZ1JlY1B0cklzSW52YWxpZChlcnJhcmctPmZpbmlzaF9sc24pKQorCQkJCWVycmNvbnRleHQo InByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVy aW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBc IiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAldSIsCisJCQkJCQkgICBlcnJh cmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJn LT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKKwkJ CQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+ cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKKwkJCQkJCSAg IGVycmFyZy0+cmVtb3RlX3hpZCk7CisJCQllbHNlCisJCQkJZXJyY29udGV4dCgicHJvY2Vzc2lu ZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2Fn ZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBj b2x1bW4gXCIlc1wiIGluIHRyYW5zYWN0aW9uICV1LCBmaW5pc2hlZCBhdCAlWC8lWCIsCisJCQkJ CQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5 cGUoZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNw bmFtZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAg IGVycmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwK KwkJCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhl cnJhcmctPmZpbmlzaF9sc24pKTsKKwkJfQorCX0KIH0KIAogLyogU2V0IHRyYW5zYWN0aW9uIGlu Zm9ybWF0aW9uIG9mIGFwcGx5IGVycm9yIGNhbGxiYWNrICovCkBAIC00MDk3LDMgKzQ5MzEsNTMg QEAgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKHZvaWQpCiAJYXBwbHlfZXJyb3JfY2Fs bGJhY2tfYXJnLnJlbW90ZV9hdHRudW0gPSAtMTsKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94 YWN0KEludmFsaWRUcmFuc2FjdGlvbklkLCBJbnZhbGlkWExvZ1JlY1B0cik7CiB9CisKKy8qCisg KiBBbGxvY2F0ZSB0aGUgb3JpZ2luIG5hbWUgaW4gbG9uZy1saXZlZCBjb250ZXh0IGZvciBlcnJv ciBjb250ZXh0IG1lc3NhZ2UuCisgKi8KK3ZvaWQKK3NldF9hcHBseV9lcnJvcl9jb250ZXh0X29y aWdpbihjaGFyICpvcmlnaW5uYW1lKQoreworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5vcmln aW5fbmFtZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoQXBwbHlDb250ZXh0LAorCQkJCQkJCQkJCQkJ CQkJICAgb3JpZ2lubmFtZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGFjdGlvbiB0byBiZSB0 YWtlbiBmb3IgdGhlIGdpdmVuIHRyYW5zYWN0aW9uLiAqd2luZm8gaXMKKyAqIGFzc2lnbmVkIHRv IHRoZSBkZXN0aW5hdGlvbiBwYXJhbGxlbCB3b3JrZXIgaW5mbyB3aGVuIHRoZSBsZWFkZXIgYXBw bHkKKyAqIHdvcmtlciBoYXMgdG8gcGFzcyBhbGwgdGhlIHRyYW5zYWN0aW9uJ3MgY2hhbmdlcyB0 byB0aGUgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlci4KKyAqLworc3RhdGljIFRyYW5zQXBwbHlB Y3Rpb24KK2dldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQsIFBh cmFsbGVsQXBwbHlXb3JrZXJJbmZvICoqd2luZm8pCit7CisJKndpbmZvID0gTlVMTDsKKworCWlm IChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwl7CisJCXJldHVybiBUUkFOU19QQVJBTExF TF9BUFBMWTsKKwl9CisJZWxzZSBpZiAoaW5fcmVtb3RlX3RyYW5zYWN0aW9uKQorCXsKKwkJcmV0 dXJuIFRSQU5TX0xFQURFUl9BUFBMWTsKKwl9CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGFyZSBw cm9jZXNzaW5nIHRoaXMgdHJhbnNhY3Rpb24gdXNpbmcgYSBwYXJhbGxlbCBhcHBseQorCSAqIHdv cmtlci4KKwkgKi8KKwkqd2luZm8gPSBwYV9maW5kX3dvcmtlcih4aWQpOworCisJaWYgKCEqd2lu Zm8pCisJeworCQlyZXR1cm4gVFJBTlNfTEVBREVSX1NFUklBTElaRTsKKwl9CisJZWxzZSBpZiAo KCp3aW5mbyktPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9Q QVJUSUFMX1NFUklBTElaRTsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9T RU5EX1RPX1BBUkFMTEVMOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dC9wZ291dHB1dC5jCmluZGV4IDc3MzcyNDI1MTYuLmU1MzdmYzkxZTEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtMTgsNiArMTgsNyBAQAogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19zdWJzY3JpcHRpb24uaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRl ICJjb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0 b3IuaCIKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCkBA IC0yOTAsNyArMjkxLDcgQEAgcGFyc2Vfb3V0cHV0X3BhcmFtZXRlcnMoTGlzdCAqb3B0aW9ucywg UEdPdXRwdXREYXRhICpkYXRhKQogCWJvb2wJCW9yaWdpbl9vcHRpb25fZ2l2ZW4gPSBmYWxzZTsK IAogCWRhdGEtPmJpbmFyeSA9IGZhbHNlOwotCWRhdGEtPnN0cmVhbWluZyA9IGZhbHNlOworCWRh dGEtPnN0cmVhbWluZyA9IExPR0lDQUxSRVBfU1RSRUFNX09GRjsKIAlkYXRhLT5tZXNzYWdlcyA9 IGZhbHNlOwogCWRhdGEtPnR3b19waGFzZSA9IGZhbHNlOwogCkBAIC0zNjksNyArMzcwLDcgQEAg cGFyc2Vfb3V0cHV0X3BhcmFtZXRlcnMoTGlzdCAqb3B0aW9ucywgUEdPdXRwdXREYXRhICpkYXRh KQogCQkJCQkJIGVycm1zZygiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMiKSkpOwog CQkJc3RyZWFtaW5nX2dpdmVuID0gdHJ1ZTsKIAotCQkJZGF0YS0+c3RyZWFtaW5nID0gZGVmR2V0 Qm9vbGVhbihkZWZlbCk7CisJCQlkYXRhLT5zdHJlYW1pbmcgPSBkZWZHZXRTdHJlYW1pbmdNb2Rl KGRlZmVsKTsKIAkJfQogCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0d29fcGhh c2UiKSA9PSAwKQogCQl7CkBAIC00NjEsMTMgKzQ2MiwyMCBAQCBwZ291dHB1dF9zdGFydHVwKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCQkg KiB3ZSBvbmx5IGFsbG93IGl0IHdpdGggc3VmZmljaWVudCB2ZXJzaW9uIG9mIHRoZSBwcm90b2Nv bCwgYW5kIHdoZW4KIAkJICogdGhlIG91dHB1dCBwbHVnaW4gc3VwcG9ydHMgaXQuCiAJCSAqLwot CQlpZiAoIWRhdGEtPnN0cmVhbWluZykKKwkJaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBMT0dJQ0FM UkVQX1NUUkVBTV9PRkYpCiAJCQljdHgtPnN0cmVhbWluZyA9IGZhbHNlOwotCQllbHNlIGlmIChk YXRhLT5wcm90b2NvbF92ZXJzaW9uIDwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9O VU0pCisJCWVsc2UgaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBMT0dJQ0FMUkVQX1NUUkVBTV9PTiAm JgorCQkJCSBkYXRhLT5wcm90b2NvbF92ZXJzaW9uIDwgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1f VkVSU0lPTl9OVU0pCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkJIGVycm1zZygicmVxdWVzdGVkIHByb3RvX3Zl cnNpb249JWQgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcsIG5lZWQgJWQgb3IgaGlnaGVyIiwK IAkJCQkJCQlkYXRhLT5wcm90b2NvbF92ZXJzaW9uLCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9W RVJTSU9OX05VTSkpKTsKKwkJZWxzZSBpZiAoZGF0YS0+c3RyZWFtaW5nID09IExPR0lDQUxSRVBf U1RSRUFNX1BBUkFMTEVMICYmCisJCQkJIGRhdGEtPnByb3RvY29sX3ZlcnNpb24gPCBMT0dJQ0FM UkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSkKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkg ZXJybXNnKCJyZXF1ZXN0ZWQgcHJvdG9fdmVyc2lvbj0lZCBkb2VzIG5vdCBzdXBwb3J0IHBhcmFs bGVsIHN0cmVhbWluZywgbmVlZCAlZCBvciBoaWdoZXIiLAorCQkJCQkJCWRhdGEtPnByb3RvY29s X3ZlcnNpb24sIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNKSkp OwogCQllbHNlIGlmICghY3R4LT5zdHJlYW1pbmcpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKQEAgLTE4NDEsNiArMTg0 OSw4IEBAIHBnb3V0cHV0X3N0cmVhbV9hYm9ydChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LAogCQkJCQkgIFhMb2dSZWNQdHIgYWJvcnRfbHNuKQogewogCVJlb3JkZXJCdWZmZXJU WE4gKnRvcHR4bjsKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0eC0+ b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCWJvb2wJCXdyaXRlX2Fib3J0X2luZm8gPSAoZGF0YS0+ c3RyZWFtaW5nID09IExPR0lDQUxSRVBfU1RSRUFNX1BBUkFMTEVMKTsKIAogCS8qCiAJICogVGhl IGFib3J0IHNob3VsZCBoYXBwZW4gb3V0c2lkZSBzdHJlYW1pbmcgYmxvY2ssIGV2ZW4gZm9yIHN0 cmVhbWVkCkBAIC0xODU0LDcgKzE4NjQsOSBAQCBwZ291dHB1dF9zdHJlYW1fYWJvcnQoc3RydWN0 IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAlBc3NlcnQocmJ0eG5faXNfc3RyZWFtZWQo dG9wdHhuKSk7CiAKIAlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQlsb2dp Y2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChjdHgtPm91dCwgdG9wdHhuLT54aWQsIHR4bi0+eGlk KTsKKwlsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChjdHgtPm91dCwgdG9wdHhuLT54aWQs IHR4bi0+eGlkLCBhYm9ydF9sc24sCisJCQkJCQkJCSAgdHhuLT54YWN0X3RpbWUuYWJvcnRfdGlt ZSwgd3JpdGVfYWJvcnRfaW5mbyk7CisKIAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwog CiAJY2xlYW51cF9yZWxfc3luY19jYWNoZSh0b3B0eG4tPnhpZCwgZmFsc2UpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4IDQzZmJiZGJjODYuLjM5NWIyY2Y2OTAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRl ICJjb21tYW5kcy9hc3luYy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBn c3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2NvbmRpdGlvbl92 YXJpYWJsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCkBAIC02NTcsNiArNjU4LDkgQEAg cHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpCiAJaWYgKENoZWNrUHJvY1Np Z25hbChQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCkpCiAJCUhhbmRsZUxvZ01lbW9yeUNvbnRl eHRJbnRlcnJ1cHQoKTsKIAorCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19QQVJBTExFTF9B UFBMWV9NRVNTQUdFKSkKKwkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQoKTsK KwogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFT RSkpCiAJCVJlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElD VF9EQVRBQkFTRSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdy LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5jCmluZGV4IDIwZGNjYTM4ZDkuLmVl OWI4OWE2NzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xtZ3IuYwpAQCAtMTExNyw2ICsxMTE3LDQ1IEBA IFVubG9ja1NoYXJlZE9iamVjdEZvclNlc3Npb24oT2lkIGNsYXNzaWQsIE9pZCBvYmppZCwgdWlu dDE2IG9ianN1YmlkLAogCUxvY2tSZWxlYXNlKCZ0YWcsIGxvY2ttb2RlLCB0cnVlKTsKIH0KIAor LyoKKyAqCQlMb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24KKyAqCisgKiBPYnRhaW4gYSBz ZXNzaW9uLWxldmVsIGxvY2sgb24gYSB0cmFuc2FjdGlvbiBiZWluZyBhcHBsaWVkIG9uIGEgbG9n aWNhbAorICogcmVwbGljYXRpb24gc3Vic2NyaWJlci4gU2VlIExvY2tSZWxhdGlvbklkRm9yU2Vz c2lvbiBmb3Igbm90ZXMgYWJvdXQKKyAqIHNlc3Npb24tbGV2ZWwgbG9ja3MuCisgKi8KK3ZvaWQK K0xvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihPaWQgc3Vib2lkLCBUcmFuc2FjdGlvbklk IHhpZCwgdWludDE2IG9iamlkLAorCQkJCQkJCSAgIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCUxP Q0tUQUcJCXRhZzsKKworCVNFVF9MT0NLVEFHX0FQUExZX1RSQU5TQUNUSU9OKHRhZywKKwkJCQkJ CQkJICBNeURhdGFiYXNlSWQsCisJCQkJCQkJCSAgc3Vib2lkLAorCQkJCQkJCQkgIHhpZCwKKwkJ CQkJCQkJICBvYmppZCk7CisKKwkodm9pZCkgTG9ja0FjcXVpcmUoJnRhZywgbG9ja21vZGUsIHRy dWUsIGZhbHNlKTsKK30KKworLyoKKyAqCQlVbmxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lv bgorICovCit2b2lkCitVbmxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihPaWQgc3Vib2lk LCBUcmFuc2FjdGlvbklkIHhpZCwgdWludDE2IG9iamlkLAorCQkJCQkJCQkgTE9DS01PREUgbG9j a21vZGUpCit7CisJTE9DS1RBRwkJdGFnOworCisJU0VUX0xPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJ T04odGFnLAorCQkJCQkJCQkgIE15RGF0YWJhc2VJZCwKKwkJCQkJCQkJICBzdWJvaWQsCisJCQkJ CQkJCSAgeGlkLAorCQkJCQkJCQkgIG9iamlkKTsKKworCUxvY2tSZWxlYXNlKCZ0YWcsIGxvY2tt b2RlLCB0cnVlKTsKK30KIAogLyoKICAqIEFwcGVuZCBhIGRlc2NyaXB0aW9uIG9mIGEgbG9ja2Fi bGUgb2JqZWN0IHRvIGJ1Zi4KQEAgLTEyMDIsNiArMTI0MSwxMyBAQCBEZXNjcmliZUxvY2tUYWco U3RyaW5nSW5mbyBidWYsIGNvbnN0IExPQ0tUQUcgKnRhZykKIAkJCQkJCQkgdGFnLT5sb2NrdGFn X2ZpZWxkMywKIAkJCQkJCQkgdGFnLT5sb2NrdGFnX2ZpZWxkNCk7CiAJCQlicmVhazsKKwkJY2Fz ZSBMT0NLVEFHX0FQUExZX1RSQU5TQUNUSU9OOgorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsCisJ CQkJCQkJIF8oInJlbW90ZSB0cmFuc2FjdGlvbiAldSBvZiBzdWJzY3JpcHRpb24gJXUgb2YgZGF0 YWJhc2UgJXUiKSwKKwkJCQkJCQkgdGFnLT5sb2NrdGFnX2ZpZWxkMywKKwkJCQkJCQkgdGFnLT5s b2NrdGFnX2ZpZWxkMiwKKwkJCQkJCQkgdGFnLT5sb2NrdGFnX2ZpZWxkMSk7CisJCQlicmVhazsK IAkJZGVmYXVsdDoKIAkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLAogCQkJCQkJCSBfKCJ1bnJlY29n bml6ZWQgbG9ja3RhZyB0eXBlICVkIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggMzE0NzllODIxMi4u MjI0YWIyOTBhZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBi L3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtMzM5MSw2ICszMzkxLDkgQEAgUHJvY2Vz c0ludGVycnVwdHModm9pZCkKIAogCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKIAkJUHJv Y2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKKworCWlmIChQYXJhbGxlbEFwcGx5TWVz c2FnZVBlbmRpbmcpCisJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlcygpOwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCmluZGV4IGY5NTc0ZTgwMGYuLjZl NDU5OTI3OGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZl bnQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKQEAgLTIz MCw2ICsyMzAsOSBAQCBwZ3N0YXRfZ2V0X3dhaXRfYWN0aXZpdHkoV2FpdEV2ZW50QWN0aXZpdHkg dykKIAkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfTEFVTkNIRVJfTUFJTjoKIAkJCWV2ZW50X25h bWUgPSAiTG9naWNhbExhdW5jaGVyTWFpbiI7CiAJCQlicmVhazsKKwkJY2FzZSBXQUlUX0VWRU5U X0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfTUFJTjoKKwkJCWV2ZW50X25hbWUgPSAiTG9naWNhbFBh cmFsbGVsQXBwbHlNYWluIjsKKwkJCWJyZWFrOwogCQljYXNlIFdBSVRfRVZFTlRfUkVDT1ZFUllf V0FMX1NUUkVBTToKIAkJCWV2ZW50X25hbWUgPSAiUmVjb3ZlcnlXYWxTdHJlYW0iOwogCQkJYnJl YWs7CkBAIC0zODgsNiArMzkxLDkgQEAgcGdzdGF0X2dldF93YWl0X2lwYyhXYWl0RXZlbnRJUEMg dykKIAkJY2FzZSBXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX1JFSU5TRVJUOgogCQkJZXZl bnRfbmFtZSA9ICJIYXNoR3Jvd0J1Y2tldHNSZWluc2VydCI7CiAJCQlicmVhazsKKwkJY2FzZSBX QUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfU1RBVEVfQ0hBTkdFOgorCQkJZXZlbnRf bmFtZSA9ICJMb2dpY2FsUGFyYWxsZWxBcHBseVN0YXRlQ2hhbmdlIjsKKwkJCWJyZWFrOwogCQlj YXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX0RBVEE6CiAJCQlldmVudF9uYW1lID0gIkxvZ2lj YWxTeW5jRGF0YSI7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9sb2NrZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYwppbmRleCAz Y2NlNGJkYmMxLi5jOGFhYzA2OTRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv bG9ja2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCkBAIC0z NywxMCArMzcsMTEgQEAgY29uc3QgY2hhciAqY29uc3QgTG9ja1RhZ1R5cGVOYW1lc1tdID0gewog CSJzcGVjdG9rZW4iLAogCSJvYmplY3QiLAogCSJ1c2VybG9jayIsCi0JImFkdmlzb3J5IgorCSJh ZHZpc29yeSIsCisJImFwcGx5dHJhbnNhY3Rpb24iCiB9OwogCi1TdGF0aWNBc3NlcnREZWNsKGxl bmd0aG9mKExvY2tUYWdUeXBlTmFtZXMpID09IChMT0NLVEFHX0FEVklTT1JZICsgMSksCitTdGF0 aWNBc3NlcnREZWNsKGxlbmd0aG9mKExvY2tUYWdUeXBlTmFtZXMpID09IChMT0NLVEFHX0xBU1Rf VFlQRSArIDEpLAogCQkJCSAiYXJyYXkgbGVuZ3RoIG1pc21hdGNoIik7CiAKIC8qIFRoaXMgbXVz dCBtYXRjaCBlbnVtIFByZWRpY2F0ZUxvY2tUYXJnZXRUeXBlIChwcmVkaWNhdGVfaW50ZXJuYWxz LmgpICovCkBAIC0zMTIsNiArMzEzLDE3IEBAIHBnX2xvY2tfc3RhdHVzKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCQkJbnVsbHNbOF0gPSB0cnVlOwogCQkJCW51bGxzWzldID0gdHJ1ZTsKIAkJCQlicmVh azsKKwkJCWNhc2UgTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTjoKKwkJCQl2YWx1ZXNbMV0gPSBP YmplY3RJZEdldERhdHVtKGluc3RhbmNlLT5sb2NrdGFnLmxvY2t0YWdfZmllbGQxKTsKKwkJCQl2 YWx1ZXNbOF0gPSBPYmplY3RJZEdldERhdHVtKGluc3RhbmNlLT5sb2NrdGFnLmxvY2t0YWdfZmll bGQyKTsKKwkJCQl2YWx1ZXNbNl0gPSBPYmplY3RJZEdldERhdHVtKGluc3RhbmNlLT5sb2NrdGFn LmxvY2t0YWdfZmllbGQzKTsKKwkJCQl2YWx1ZXNbOV0gPSBJbnQxNkdldERhdHVtKGluc3RhbmNl LT5sb2NrdGFnLmxvY2t0YWdfZmllbGQ0KTsKKwkJCQludWxsc1syXSA9IHRydWU7CisJCQkJbnVs bHNbM10gPSB0cnVlOworCQkJCW51bGxzWzRdID0gdHJ1ZTsKKwkJCQludWxsc1s1XSA9IHRydWU7 CisJCQkJbnVsbHNbN10gPSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSBMT0NLVEFHX09CSkVD VDoKIAkJCWNhc2UgTE9DS1RBR19VU0VSTE9DSzoKIAkJCWNhc2UgTE9DS1RBR19BRFZJU09SWToK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggNjgzMjhiMTQwMi4uOTI1NDViNDk1 OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTMwMDIsNiArMzAwMiwxOCBA QCBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwg TlVMTAogCX0sCiAKKwl7CisJCXsibWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNj cmlwdGlvbiIsCisJCQlQR0NfU0lHSFVQLAorCQkJUkVQTElDQVRJT05fU1VCU0NSSUJFUlMsCisJ CQlnZXR0ZXh0X25vb3AoIk1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMg cGVyIHN1YnNjcmlwdGlvbi4iKSwKKwkJCU5VTEwsCisJCX0sCisJCSZtYXhfcGFyYWxsZWxfYXBw bHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLAorCQkyLCAwLCBNQVhfUEFSQUxMRUxfV09SS0VS X0xJTUlULAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwogCXsKIAkJeyJsb2dfcm90YXRpb25f YWdlIiwgUEdDX1NJR0hVUCwgTE9HR0lOR19XSEVSRSwKIAkJCWdldHRleHRfbm9vcCgiU2V0cyB0 aGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2luZyAiCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggNWFmZGViMDRkZS4uYzJh ZGE5MjA1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZQpAQCAtMzU5LDYgKzM1OSw3IEBACiAjbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vy cyA9IDQJIyB0YWtlbiBmcm9tIG1heF93b3JrZXJfcHJvY2Vzc2VzCiAJCQkJCSMgKGNoYW5nZSBy ZXF1aXJlcyByZXN0YXJ0KQogI21heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiA9IDIJ IyB0YWtlbiBmcm9tIG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMKKyNtYXhfcGFyYWxs ZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uID0gMgkjIHRha2VuIGZyb20gbWF4X2xv Z2ljYWxfcmVwbGljYXRpb25fd29ya2VycwogCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jCmluZGV4IDMwNzE4ZGQ3NTguLjVlODAwZGM3OWEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtNDUz Myw3ICs0NTMzLDcgQEAgZ2V0U3Vic2NyaXB0aW9ucyhBcmNoaXZlICpmb3V0KQogCWlmIChmb3V0 LT5yZW1vdGVWZXJzaW9uID49IDE0MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnks ICIgcy5zdWJzdHJlYW0sXG4iKTsKIAllbHNlCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5 LCAiIGZhbHNlIEFTIHN1YnN0cmVhbSxcbiIpOworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwgIiAnZicgQVMgc3Vic3RyZWFtLFxuIik7CiAKIAlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+ PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LApAQCAtNDY3MCw4ICs0Njcw LDEwIEBAIGR1bXBTdWJzY3JpcHRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgU3Vic2NyaXB0aW9u SW5mbyAqc3ViaW5mbykKIAlpZiAoc3RyY21wKHN1YmluZm8tPnN1YmJpbmFyeSwgInQiKSA9PSAw KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgYmluYXJ5ID0gdHJ1ZSIpOwogCi0J aWYgKHN0cmNtcChzdWJpbmZvLT5zdWJzdHJlYW0sICJmIikgIT0gMCkKKwlpZiAoc3RyY21wKHN1 YmluZm8tPnN1YnN0cmVhbSwgInQiKSA9PSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwgIiwgc3RyZWFtaW5nID0gb24iKTsKKwllbHNlIGlmIChzdHJjbXAoc3ViaW5mby0+c3Vic3Ry ZWFtLCAicCIpID09IDApCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCBzdHJlYW1p bmcgPSBwYXJhbGxlbCIpOwogCiAJaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJ0d29waGFzZXN0YXRl LCB0d29fcGhhc2VfZGlzYWJsZWQpICE9IDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5 LCAiLCB0d29fcGhhc2UgPSBvbiIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJl LmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCA1MjNmYWI2MWI5Li42NjU1ZjA3NzIy IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwv ZGVzY3JpYmUuYwpAQCAtNjUwMiwxMSArNjUwMiwyNCBAQCBkZXNjcmliZVN1YnNjcmlwdGlvbnMo Y29uc3QgY2hhciAqcGF0dGVybiwgYm9vbCB2ZXJib3NlKQogCXsKIAkJLyogQmluYXJ5IG1vZGUg YW5kIHN0cmVhbWluZyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gdjE0IGFuZCBoaWdoZXIgKi8KIAkJ aWYgKHBzZXQuc3ZlcnNpb24gPj0gMTQwMDAwKQorCQl7CiAJCQlhcHBlbmRQUUV4cEJ1ZmZlcigm YnVmLAotCQkJCQkJCSAgIiwgc3ViYmluYXJ5IEFTIFwiJXNcIlxuIgotCQkJCQkJCSAgIiwgc3Vi c3RyZWFtIEFTIFwiJXNcIlxuIiwKLQkJCQkJCQkgIGdldHRleHRfbm9vcCgiQmluYXJ5IiksCi0J CQkJCQkJICBnZXR0ZXh0X25vb3AoIlN0cmVhbWluZyIpKTsKKwkJCQkJCQkgICIsIHN1YmJpbmFy eSBBUyBcIiVzXCJcbiIsCisJCQkJCQkJICBnZXR0ZXh0X25vb3AoIkJpbmFyeSIpKTsKKworCQkJ aWYgKHBzZXQuc3ZlcnNpb24gPj0gMTYwMDAwKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYs CisJCQkJCQkJCSAgIiwgKENBU0Ugc3Vic3RyZWFtXG4iCisJCQkJCQkJCSAgIiAgICBXSEVOICdm JyBUSEVOICdvZmYnXG4iCisJCQkJCQkJCSAgIiAgICBXSEVOICd0JyBUSEVOICdvbidcbiIKKwkJ CQkJCQkJICAiICAgIFdIRU4gJ3AnIFRIRU4gJ3BhcmFsbGVsJ1xuIgorCQkJCQkJCQkgICIgICBF TkQpIEFTIFwiJXNcIlxuIiwKKwkJCQkJCQkJICBnZXR0ZXh0X25vb3AoIlN0cmVhbWluZyIpKTsK KwkJCWVsc2UKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJCQkgICIsIHN1YnN0 cmVhbSBBUyBcIiVzXCJcbiIsCisJCQkJCQkJCSAgZ2V0dGV4dF9ub29wKCJTdHJlYW1pbmciKSk7 CisJCX0KIAogCQkvKiBUd29fcGhhc2UgYW5kIGRpc2FibGVfb25fZXJyb3IgYXJlIG9ubHkgc3Vw cG9ydGVkIGluIHYxNSBhbmQgaGlnaGVyICovCiAJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE1MDAw MCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmggYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCmluZGV4IGViNGVlYjQ0OGIuLmIw ZjJhMTcwNWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9u LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaApAQCAtODAsNyAr ODAsOCBAQCBDQVRBTE9HKHBnX3N1YnNjcmlwdGlvbiw2MTAwLFN1YnNjcmlwdGlvblJlbGF0aW9u SWQpIEJLSV9TSEFSRURfUkVMQVRJT04gQktJX1JPVwogCWJvb2wJCXN1YmJpbmFyeTsJCS8qIFRy dWUgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyB0aGUKIAkJCQkJCQkJICogcHVibGlzaGVyIHRv IHNlbmQgZGF0YSBpbiBiaW5hcnkgKi8KIAotCWJvb2wJCXN1YnN0cmVhbTsJCS8qIFN0cmVhbSBp bi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCisJY2hhcgkJc3Vic3RyZWFtOwkJLyogU3RyZWFt IGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gU2VlCisJCQkJCQkJCSAqIExPR0lDQUxSRVBfU1RS RUFNX3h4eCBjb25zdGFudHMuICovCiAKIAljaGFyCQlzdWJ0d29waGFzZXN0YXRlOwkvKiBTdHJl YW0gdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyAqLwogCkBAIC0xMjQsNyArMTI1LDggQEAgdHlwZWRl ZiBzdHJ1Y3QgU3Vic2NyaXB0aW9uCiAJYm9vbAkJZW5hYmxlZDsJCS8qIEluZGljYXRlcyBpZiB0 aGUgc3Vic2NyaXB0aW9uIGlzIGVuYWJsZWQgKi8KIAlib29sCQliaW5hcnk7CQkJLyogSW5kaWNh dGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gd2FudHMgZGF0YSBpbgogCQkJCQkJCQkgKiBiaW5hcnkg Zm9ybWF0ICovCi0JYm9vbAkJc3RyZWFtOwkJCS8qIEFsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVz cyB0cmFuc2FjdGlvbnMuICovCisJY2hhcgkJc3RyZWFtOwkJCS8qIEFsbG93IHN0cmVhbWluZyBp bi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuCisJCQkJCQkJCSAqIFNlZSBMT0dJQ0FMUkVQX1NUUkVB TV94eHggY29uc3RhbnRzLiAqLwogCWNoYXIJCXR3b3BoYXNlc3RhdGU7CS8qIEFsbG93IHN0cmVh bWluZyB0d28tcGhhc2UgdHJhbnNhY3Rpb25zICovCiAJYm9vbAkJZGlzYWJsZW9uZXJyOwkvKiBJ bmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUKIAkJCQkJCQkJICogYXV0b21h dGljYWxseSBkaXNhYmxlZCBpZiBhIHdvcmtlciBlcnJvcgpAQCAtMTM3LDYgKzEzOSwyMSBAQCB0 eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAkJCQkJCQkJICogc3BlY2lmaWVkIG9yaWdpbiAq LwogfSBTdWJzY3JpcHRpb247CiAKKy8qIERpc2FsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVzcyB0 cmFuc2FjdGlvbnMuICovCisjZGVmaW5lIExPR0lDQUxSRVBfU1RSRUFNX09GRiAnZicKKworLyoK KyAqIFN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgYXJlIHdyaXR0ZW4gdG8gYSB0 ZW1wb3JhcnkgZmlsZSBhbmQKKyAqIGFwcGxpZWQgb25seSBhZnRlciB0aGUgdHJhbnNhY3Rpb24g aXMgY29tbWl0dGVkIG9uIHVwc3RyZWFtLgorICovCisjZGVmaW5lIExPR0lDQUxSRVBfU1RSRUFN X09OICd0JworCisvKgorICogU3RyZWFtaW5nIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyBhcmUg YXBwbGllZCBpbW1lZGlhdGVseSB2aWEgYSBwYXJhbGxlbAorICogYXBwbHkgd29ya2VyLgorICov CisjZGVmaW5lIExPR0lDQUxSRVBfU1RSRUFNX1BBUkFMTEVMICdwJworCiBleHRlcm4gU3Vic2Ny aXB0aW9uICpHZXRTdWJzY3JpcHRpb24oT2lkIHN1YmlkLCBib29sIG1pc3Npbmdfb2spOwogZXh0 ZXJuIHZvaWQgRnJlZVN1YnNjcmlwdGlvbihTdWJzY3JpcHRpb24gKnN1Yik7CiBleHRlcm4gdm9p ZCBEaXNhYmxlU3Vic2NyaXB0aW9uKE9pZCBzdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJz Y3JpcHRpb25jbWRzLmgKaW5kZXggZjU5YWFmNDg1Ny4uMjE0ZGM2YzI5ZSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oCisrKyBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaApAQCAtMjYsNCArMjYsNiBAQCBleHRlcm4gdm9p ZCBEcm9wU3Vic2NyaXB0aW9uKERyb3BTdWJzY3JpcHRpb25TdG10ICpzdG10LCBib29sIGlzVG9w TGV2ZWwpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJTdWJzY3JpcHRpb25Pd25lcihjb25z dCBjaGFyICpuYW1lLCBPaWQgbmV3T3duZXJJZCk7CiBleHRlcm4gdm9pZCBBbHRlclN1YnNjcmlw dGlvbk93bmVyX29pZChPaWQgc3ViaWQsIE9pZCBuZXdPd25lcklkKTsKIAorZXh0ZXJuIGNoYXIg ZGVmR2V0U3RyZWFtaW5nTW9kZShEZWZFbGVtICpkZWYpOworCiAjZW5kaWYJCQkJCQkJLyogU1VC U0NSSVBUSU9OQ01EU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FsbGF1bmNoZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hl ci5oCmluZGV4IGUxNjYxYjZjOTEuLmM4NTU5M2FkMTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWxsYXVuY2hlci5oCkBAIC0xNCw2ICsxNCw3IEBACiAKIGV4dGVybiBQR0RMTElN UE9SVCBpbnQgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczsKIGV4dGVybiBQR0RMTElN UE9SVCBpbnQgbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uOworZXh0ZXJuIFBHRExM SU1QT1JUIGludCBtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uOwog CiBleHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBB cHBseUxhdW5jaGVyTWFpbihEYXR1bSBtYWluX2FyZyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWxwcm90by5oCmluZGV4IGQ2NDI2NDNhYWUuLjBlYTJkZjUwODggMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC0zMiwxMiArMzIsMTcgQEAKICAqCiAgKiBMT0dJ Q0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIGlzIHRoZSBtaW5pbXVtIHByb3RvY29s IHZlcnNpb24gd2l0aAogICogc3VwcG9ydCBmb3IgdHdvLXBoYXNlIGNvbW1pdCBkZWNvZGluZyAo YXQgcHJlcGFyZSB0aW1lKS4gSW50cm9kdWNlZCBpbiBQRzE1LgorICoKKyAqIExPR0lDQUxSRVBf UFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNIGlzIHRoZSBtaW5pbXVtIHByb3RvY29s IHZlcnNpb24KKyAqIHdoZXJlIHdlIHN1cHBvcnQgYXBwbHlpbmcgbGFyZ2Ugc3RyZWFtaW5nIHRy YW5zYWN0aW9ucyBpbiBwYXJhbGxlbC4KKyAqIEludHJvZHVjZWQgaW4gUEcxNi4KICAqLwogI2Rl ZmluZSBMT0dJQ0FMUkVQX1BST1RPX01JTl9WRVJTSU9OX05VTSAxCiAjZGVmaW5lIExPR0lDQUxS RVBfUFJPVE9fVkVSU0lPTl9OVU0gMQogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9W RVJTSU9OX05VTSAyCiAjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fVFdPUEhBU0VfVkVSU0lPTl9O VU0gMwotI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX01BWF9WRVJTSU9OX05VTSBMT0dJQ0FMUkVQ X1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNCisjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fU1RS RUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNIDQKKyNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19NQVhf VkVSU0lPTl9OVU0gTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0K IAogLyoKICAqIExvZ2ljYWwgbWVzc2FnZSB0eXBlcwpAQCAtMTc1LDYgKzE4MCwxNyBAQCB0eXBl ZGVmIHN0cnVjdCBMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGEKIAljaGFyCQlnaWRb R0lEU0laRV07CiB9IExvZ2ljYWxSZXBSb2xsYmFja1ByZXBhcmVkVHhuRGF0YTsKIAorLyoKKyAq IFRyYW5zYWN0aW9uIHByb3RvY29sIGluZm9ybWF0aW9uIGZvciBzdHJlYW0gYWJvcnQuCisgKi8K K3R5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEKK3sKKwlUcmFuc2FjdGlv bklkIHhpZDsKKwlUcmFuc2FjdGlvbklkIHN1YnhpZDsKKwlYTG9nUmVjUHRyCWFib3J0X2xzbjsK KwlUaW1lc3RhbXBUeiBhYm9ydF90aW1lOworfSBMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhOwor CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2JlZ2luKFN0cmluZ0luZm8gb3V0LCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWFkX2JlZ2luKFN0 cmluZ0luZm8gaW4sCiAJCQkJCQkJCSAgTG9naWNhbFJlcEJlZ2luRGF0YSAqYmVnaW5fZGF0YSk7 CkBAIC0yNDYsOSArMjYyLDEzIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFt X2NvbW1pdChTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBleHRlcm4gVHJh bnNhY3Rpb25JZCBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIGluLAog CQkJCQkJCQkJCQkJICAgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKTsKIGV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwKLQkJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3VieGlkKTsKLWV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwgVHJhbnNh Y3Rpb25JZCAqeGlkLAotCQkJCQkJCQkJCSBUcmFuc2FjdGlvbklkICpzdWJ4aWQpOworCQkJCQkJ CQkJCSAgVHJhbnNhY3Rpb25JZCBzdWJ4aWQsCisJCQkJCQkJCQkJICBYTG9nUmVjUHRyIGFib3J0 X2xzbiwKKwkJCQkJCQkJCQkgIFRpbWVzdGFtcFR6IGFib3J0X3RpbWUsCisJCQkJCQkJCQkJICBi b29sIHdyaXRlX2Fib3J0X2luZm8pOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9yZWFkX3N0cmVh bV9hYm9ydChTdHJpbmdJbmZvIGluLAorCQkJCQkJCQkJCSBMb2dpY2FsUmVwU3RyZWFtQWJvcnRE YXRhICphYm9ydF9kYXRhLAorCQkJCQkJCQkJCSBib29sIHJlYWRfYWJvcnRfaW5mbyk7CiBleHRl cm4gY2hhciAqbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9u KTsKIAogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxfUFJPVE9fSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbHdvcmtlci5oCmluZGV4IGYxZTdlOGEzNDguLjY5MzVjYjM5NDcgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaAorKysgYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKQEAgLTEyLDggKzEyLDE2IEBACiAj aWZuZGVmIExPR0lDQUxXT1JLRVJfSAogI2RlZmluZSBMT0dJQ0FMV09SS0VSX0gKIAorI2luY2x1 ZGUgPHNpZ25hbC5oPgorCitleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190 IFBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZzsKKwogZXh0ZXJuIHZvaWQgQXBwbHlXb3JrZXJN YWluKERhdHVtIG1haW5fYXJnKTsKK2V4dGVybiB2b2lkIFBhcmFsbGVsQXBwbHlXb3JrZXJNYWlu KERhdHVtIG1haW5fYXJnKTsKIAogZXh0ZXJuIGJvb2wgSXNMb2dpY2FsV29ya2VyKHZvaWQpOwor ZXh0ZXJuIGJvb2wgSXNMb2dpY2FsUGFyYWxsZWxBcHBseVdvcmtlcih2b2lkKTsKK2V4dGVybiB2 b2lkIEhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZv aWQgSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VzKHZvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyog TE9HSUNBTFdPUktFUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v cmlnaW4uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCmluZGV4IDM3ODVmOTVm YTEuLjUzMTM1MTA5M2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdp bi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCkBAIC01Myw3ICs1Myw3 IEBAIGV4dGVybiBYTG9nUmVjUHRyIHJlcGxvcmlnaW5fZ2V0X3Byb2dyZXNzKFJlcE9yaWdpbklk IG5vZGUsIGJvb2wgZmx1c2gpOwogCiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fYWR2 YW5jZShYTG9nUmVjUHRyIHJlbW90ZV9jb21taXQsCiAJCQkJCQkJCQkgICBYTG9nUmVjUHRyIGxv Y2FsX2NvbW1pdCk7Ci1leHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3Jp Z2luSWQgbm9kZSk7CitleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3Jp Z2luSWQgbm9kZSwgaW50IGFjcXVpcmVkX2J5KTsKIGV4dGVybiB2b2lkIHJlcGxvcmlnaW5fc2Vz c2lvbl9yZXNldCh2b2lkKTsKIGV4dGVybiBYTG9nUmVjUHRyIHJlcGxvcmlnaW5fc2Vzc2lvbl9n ZXRfcHJvZ3Jlc3MoYm9vbCBmbHVzaCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmlu ZGV4IDY2MzMxMWFmYTkuLmI0YTgwMTU0MDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQu aApAQCAtMjYsNyArMjYsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAlMaXN0CSAg ICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CiAJYm9vbAkJYmlu YXJ5OwotCWJvb2wJCXN0cmVhbWluZzsKKwljaGFyCQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2Fn ZXM7CiAJYm9vbAkJdHdvX3BoYXNlOwogCWNoYXIJICAgKm9yaWdpbjsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCBhNDJhMTIwNGQzLi5mNmM0ZGQ3NWRiIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0zMTYsNiArMzE2LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlclRYTgogCXsKIAkJVGltZXN0YW1wVHogY29tbWl0 X3RpbWU7CiAJCVRpbWVzdGFtcFR6IHByZXBhcmVfdGltZTsKKwkJVGltZXN0YW1wVHogYWJvcnRf dGltZTsKIAl9CQkJeGFjdF90aW1lOwogCiAJLyoKQEAgLTY3OCw3ICs2NzksOCBAQCBleHRlcm4g dm9pZCBSZW9yZGVyQnVmZmVyQXNzaWduQ2hpbGQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0 aW9uSWQgeGlkLAogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdENoaWxkKFJlb3JkZXJC dWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSBUcmFuc2FjdGlvbklkIHN1 YnhpZCwgWExvZ1JlY1B0ciBjb21taXRfbHNuLAogCQkJCQkJCQkJIFhMb2dSZWNQdHIgZW5kX2xz bik7Ci1leHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVm ZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRy IGxzbiwKKwkJCQkJCQkgICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lKTsKIGV4dGVybiB2b2lkIFJl b3JkZXJCdWZmZXJBYm9ydE9sZChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCBvbGRl c3RSdW5uaW5nWGlkKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1 ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7CiBleHRlcm4gdm9p ZCBSZW9yZGVyQnVmZmVySW52YWxpZGF0ZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25J ZCB4aWQsIFhMb2dSZWNQdHIgbHNuKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3dhbHJlY2VpdmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5o CmluZGV4IGZkNjEzNjhkNTQuLmRlY2ZmZTM1MmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fs cmVjZWl2ZXIuaApAQCAtMTgyLDcgKzE4Miw3IEBAIHR5cGVkZWYgc3RydWN0CiAJCQl1aW50MzIJ CXByb3RvX3ZlcnNpb247CS8qIExvZ2ljYWwgcHJvdG9jb2wgdmVyc2lvbiAqLwogCQkJTGlzdAkg ICAqcHVibGljYXRpb25fbmFtZXM7CS8qIFN0cmluZyBsaXN0IG9mIHB1YmxpY2F0aW9ucyAqLwog CQkJYm9vbAkJYmluYXJ5OyAvKiBBc2sgcHVibGlzaGVyIHRvIHVzZSBiaW5hcnkgKi8KLQkJCWJv b2wJCXN0cmVhbWluZzsJLyogU3RyZWFtaW5nIG9mIGxhcmdlIHRyYW5zYWN0aW9ucyAqLworCQkJ Y2hhcgkgICAqc3RyZWFtaW5nX3N0cjsJLyogU3RyZWFtaW5nIG9mIGxhcmdlIHRyYW5zYWN0aW9u cyAqLwogCQkJYm9vbAkJdHdvcGhhc2U7CS8qIFN0cmVhbWluZyBvZiB0d28tcGhhc2UgdHJhbnNh Y3Rpb25zIGF0CiAJCQkJCQkJCQkgKiBwcmVwYXJlIHRpbWUgKi8KIAkJCWNoYXIJICAgKm9yaWdp bjsgLyogT25seSBwdWJsaXNoIGRhdGEgb3JpZ2luYXRpbmcgZnJvbSB0aGUKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKaW5kZXggMmEzZWM1YzJkOC4uZGI4OTFlZWE4 YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTE3LDgg KzE3LDEzIEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19zdWJzY3JpcHRpb24uaCIKICNpbmNsdWRlICJkYXRhdHlwZS90aW1lc3RhbXAuaCIKKyNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRp b24uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZmZpbGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Zp bGVzZXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3No bV9tcS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c3Bpbi5oIgogCiAKQEAgLTUzLDEzICs1OCwyNCBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVw V29ya2VyCiAKIAkvKgogCSAqIFVzZWQgdG8gY3JlYXRlIHRoZSBjaGFuZ2VzIGFuZCBzdWJ4YWN0 IGZpbGVzIGZvciB0aGUgc3RyZWFtaW5nCi0JICogdHJhbnNhY3Rpb25zLiAgVXBvbiB0aGUgYXJy aXZhbCBvZiB0aGUgZmlyc3Qgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCB0aGUKLQkgKiBmaWxlc2V0 IHdpbGwgYmUgaW5pdGlhbGl6ZWQsIGFuZCBpdCB3aWxsIGJlIGRlbGV0ZWQgd2hlbiB0aGUgd29y a2VyCi0JICogZXhpdHMuICBVbmRlciB0aGlzLCBzZXBhcmF0ZSBidWZmaWxlcyB3b3VsZCBiZSBj cmVhdGVkIGZvciBlYWNoCi0JICogdHJhbnNhY3Rpb24gd2hpY2ggd2lsbCBiZSBkZWxldGVkIGFm dGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZC4KKwkgKiB0cmFuc2FjdGlvbnMuICBVcG9u IHRoZSBhcnJpdmFsIG9mIHRoZSBmaXJzdCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gb3IKKwkgKiB3 aGVuIHRoZSBmaXJzdC10aW1lIGxlYWRlciBhcHBseSB3b3JrZXIgdGltZXMgb3V0IHdoaWxlIHNl bmRpbmcgY2hhbmdlcworCSAqIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIHRoZSBmaWxl c2V0IHdpbGwgYmUgaW5pdGlhbGl6ZWQsIGFuZCBpdAorCSAqIHdpbGwgYmUgZGVsZXRlZCB3aGVu IHRoZSB3b3JrZXIgZXhpdHMuICBVbmRlciB0aGlzLCBzZXBhcmF0ZSBidWZmaWxlcworCSAqIHdv dWxkIGJlIGNyZWF0ZWQgZm9yIGVhY2ggdHJhbnNhY3Rpb24gd2hpY2ggd2lsbCBiZSBkZWxldGVk IGFmdGVyIHRoZQorCSAqIHRyYW5zYWN0aW9uIGlzIGZpbmlzaGVkLgogCSAqLwogCUZpbGVTZXQg ICAgKnN0cmVhbV9maWxlc2V0OwogCisJLyoKKwkgKiBQSUQgb2YgbGVhZGVyIGFwcGx5IHdvcmtl ciBpZiB0aGlzIHNsb3QgaXMgdXNlZCBmb3IgYSBwYXJhbGxlbCBhcHBseQorCSAqIHdvcmtlciwg SW52YWxpZFBpZCBvdGhlcndpc2UuCisJICovCisJcGlkX3QJCWFwcGx5X2xlYWRlcl9waWQ7CisK KwkvKiBJbmRpY2F0ZXMgd2hldGhlciBhcHBseSBjYW4gYmUgcGVyZm9ybWVkIGluIHBhcmFsbGVs LiAqLworCWJvb2wJCXBhcmFsbGVsX2FwcGx5OworCiAJLyogU3RhdHMuICovCiAJWExvZ1JlY1B0 cglsYXN0X2xzbjsKIAlUaW1lc3RhbXBUeiBsYXN0X3NlbmRfdGltZTsKQEAgLTY4LDkgKzg0LDEz OCBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwV29ya2VyCiAJVGltZXN0YW1wVHogcmVwbHlf dGltZTsKIH0gTG9naWNhbFJlcFdvcmtlcjsKIAorLyoKKyAqIFN0YXRlIG9mIHRoZSB0cmFuc2Fj dGlvbiBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKgorICogVGhlIGVudW0gdmFsdWVzIG11 c3QgaGF2ZSB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUKKyAqIHRyYW5z aXRpb25zLgorICovCit0eXBlZGVmIGVudW0gUGFyYWxsZWxUcmFuc1N0YXRlCit7CisJUEFSQUxM RUxfVFJBTlNfVU5LTk9XTiwKKwlQQVJBTExFTF9UUkFOU19TVEFSVEVELAorCVBBUkFMTEVMX1RS QU5TX0ZJTklTSEVECit9IFBhcmFsbGVsVHJhbnNTdGF0ZTsKKworLyoKKyAqIFN0YXRlIG9mIGZp bGVzZXQgdXNlZCB0byBjb21tdW5pY2F0ZSBjaGFuZ2VzIGZyb20gbGVhZGVyIHRvIHBhcmFsbGVs CisgKiBhcHBseSB3b3JrZXIuCisgKgorICogRlNfRU1QVFkgaW5kaWNhdGVzIGFuIGluaXRpYWwg c3RhdGUgd2hlcmUgdGhlIGxlYWRlciBkb2Vzbid0IG5lZWQgdG8gdXNlCisgKiB0aGUgZmlsZSB0 byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKgorICogRlNf U0VSSUFMSVpFX0lOX1BST0dSRVNTIGluZGljYXRlcyB0aGF0IHRoZSBsZWFkZXIgaXMgc2VyaWFs aXppbmcgY2hhbmdlcworICogdG8gdGhlIGZpbGUuCisgKgorICogRlNfU0VSSUFMSVpFX0RPTkUg aW5kaWNhdGVzIHRoYXQgdGhlIGxlYWRlciBoYXMgc2VyaWFsaXplZCBhbGwgY2hhbmdlcyB0bwor ICogdGhlIGZpbGUuCisgKgorICogRlNfUkVBRFkgaW5kaWNhdGVzIHRoYXQgaXQgaXMgbm93IG9r IGZvciBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0bworICogcmVhZCB0aGUgZmlsZS4KKyAqLwor dHlwZWRlZiBlbnVtIFBhcnRpYWxGaWxlU2V0U3RhdGUKK3sKKwlGU19FTVBUWSwKKwlGU19TRVJJ QUxJWkVfSU5fUFJPR1JFU1MsCisJRlNfU0VSSUFMSVpFX0RPTkUsCisJRlNfUkVBRFkKK30gUGFy dGlhbEZpbGVTZXRTdGF0ZTsKKworLyoKKyAqIFN0cnVjdCBmb3Igc2hhcmluZyBpbmZvcm1hdGlv biBiZXR3ZWVuIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBhcmFsbGVsCisgKiBhcHBseSB3b3Jr ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkCit7CisJ c2xvY2tfdAkJbXV0ZXg7CisKKwlUcmFuc2FjdGlvbklkIHhpZDsKKworCS8qCisJICogU3RhdGUg dXNlZCB0byBlbnN1cmUgY29tbWl0IG9yZGVyaW5nLgorCSAqCisJICogVGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlciB3aWxsIHNldCBpdCB0byBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCBhZnRlcgor CSAqIGhhbmRsaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZHMgd2hpbGUgdGhlIGFw cGx5IGxlYWRlciB3aWxsCisJICogd2FpdCBmb3IgaXQgdG8gYmVjb21lIFBBUkFMTEVMX1RSQU5T X0ZJTklTSEVEIGJlZm9yZSBwcm9jZWVkaW5nIGluCisJICogdHJhbnNhY3Rpb24gZmluaXNoIGNv bW1hbmRzIChlLmcuIFNUUkVBTV9DT01NSVQvU1RSRUFNX1BSRVBBUkUvCisJICogU1RSRUFNX0FC T1JUKS4KKwkgKi8KKwlQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0ZTsKKworCS8qIEluZm9y bWF0aW9uIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgTG9naWNhbFJlcFdvcmtlciBzbG90LiAqLwor CXVpbnQxNgkJbG9naWNhbHJlcF93b3JrZXJfZ2VuZXJhdGlvbjsKKwlpbnQJCQlsb2dpY2FscmVw X3dvcmtlcl9zbG90X25vOworCisJLyoKKwkgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGVyZSBhcmUg cGVuZGluZyBzdHJlYW1pbmcgYmxvY2tzIGluIHRoZSBxdWV1ZS4gVGhlCisJICogcGFyYWxsZWwg YXBwbHkgd29ya2VyIHdpbGwgY2hlY2sgaXQgYmVmb3JlIHN0YXJ0aW5nIHRvIHdhaXQuCisJICov CisJcGdfYXRvbWljX3VpbnQzMiBwZW5kaW5nX3N0cmVhbV9jb3VudDsKKworCS8qCisJICogWGFj dExhc3RDb21taXRFbmQgZnJvbSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBUaGlzIGlzIHJl cXVpcmVkIGJ5CisJICogdGhlIGxlYWRlciB3b3JrZXIgc28gaXQgY2FuIHVwZGF0ZSB0aGUgbHNu X21hcHBpbmdzLgorCSAqLworCVhMb2dSZWNQdHIJbGFzdF9jb21taXRfZW5kOworCisJLyoKKwkg KiBBZnRlciBlbnRlcmluZyBQQVJUSUFMX1NFUklBTElaRSBtb2RlLCB0aGUgbGVhZGVyIGFwcGx5 IHdvcmtlciB3aWxsCisJICogc2VyaWFsaXplIGNoYW5nZXMgdG8gdGhlIGZpbGUsIGFuZCBzaGFy ZSB0aGUgZmlsZXNldCB3aXRoIHRoZSBwYXJhbGxlbAorCSAqIGFwcGx5IHdvcmtlciB3aGVuIHBy b2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kLiBUaGVuIHRoZQorCSAqIHBh cmFsbGVsIGFwcGx5IHdvcmtlciB3aWxsIGFwcGx5IGFsbCB0aGUgc3Bvb2xlZCBtZXNzYWdlcy4K KwkgKgorCSAqIEZpbGVTZXQgaXMgdXNlZCBoZXJlIGluc3RlYWQgb2YgU2hhcmVkRmlsZVNldCBi ZWNhdXNlIHdlIG5lZWQgaXQgdG8KKwkgKiBzdXJ2aXZlIGFmdGVyIHJlbGVhc2luZyB0aGUgc2hh cmVkIG1lbW9yeSBzbyB0aGF0IHRoZSBsZWFkZXIgYXBwbHkKKwkgKiB3b3JrZXIgY2FuIHJlLXVz ZSB0aGUgc2FtZSBmaWxlc2V0IGZvciB0aGUgbmV4dCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uCisJ ICovCisJUGFydGlhbEZpbGVTZXRTdGF0ZSBmaWxlc2V0X3N0YXRlOworCUZpbGVTZXQJCWZpbGVz ZXQ7Cit9IFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQ7CisKKy8qCisgKiBJbmZvcm1hdGlvbiB3 aGljaCBpcyB1c2VkIHRvIG1hbmFnZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICovCit0 eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEFwcGx5V29ya2VySW5mbworeworCS8qCisJICogVGhpcyBx dWV1ZSBpcyB1c2VkIHRvIHNlbmQgY2hhbmdlcyBmcm9tIHRoZSBsZWFkZXIgYXBwbHkgd29ya2Vy IHRvIHRoZQorCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkgKi8KKwlzaG1fbXFfaGFuZGxl ICptcV9oYW5kbGU7CisKKwkvKgorCSAqIFRoaXMgcXVldWUgaXMgdXNlZCB0byB0cmFuc2ZlciBl cnJvciBtZXNzYWdlcyBmcm9tIHRoZSBwYXJhbGxlbCBhcHBseQorCSAqIHdvcmtlciB0byB0aGUg bGVhZGVyIGFwcGx5IHdvcmtlci4KKwkgKi8KKwlzaG1fbXFfaGFuZGxlICplcnJvcl9tcV9oYW5k bGU7CisKKwlkc21fc2VnbWVudCAqZHNtX3NlZzsKKworCS8qCisJICogSW5kaWNhdGVzIHdoZXRo ZXIgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgbmVlZHMgdG8gc2VyaWFsaXplIHRoZQorCSAqIHJl bWFpbmluZyBjaGFuZ2VzIHRvIGEgZmlsZSBkdWUgdG8gdGltZW91dCB3aGVuIGF0dGVtcHRpbmcg dG8gc2VuZCBkYXRhCisJICogdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB2aWEgc2hhcmVk IG1lbW9yeS4KKwkgKi8KKwlib29sCQlzZXJpYWxpemVfY2hhbmdlczsKKworCS8qCisJICogVHJ1 ZSBpZiB0aGUgd29ya2VyIGlzIGJlaW5nIHVzZWQgdG8gcHJvY2VzcyBhIHBhcmFsbGVsIGFwcGx5 CisJICogdHJhbnNhY3Rpb24uIEZhbHNlIGluZGljYXRlcyB0aGlzIHdvcmtlciBpcyBhdmFpbGFi bGUgZm9yIHJlLXVzZS4KKwkgKi8KKwlib29sCQlpbl91c2U7CisKKwlQYXJhbGxlbEFwcGx5V29y a2VyU2hhcmVkICpzaGFyZWQ7Cit9IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvOworCiAvKiBNYWlu IG1lbW9yeSBjb250ZXh0IGZvciBhcHBseSB3b3JrZXIuIFBlcm1hbmVudCBkdXJpbmcgd29ya2Vy IGxpZmV0aW1lLiAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIE1lbW9yeUNvbnRleHQgQXBwbHlDb250 ZXh0OwogCitleHRlcm4gUEdETExJTVBPUlQgTWVtb3J5Q29udGV4dCBBcHBseU1lc3NhZ2VDb250 ZXh0OworCitleHRlcm4gUEdETExJTVBPUlQgRXJyb3JDb250ZXh0Q2FsbGJhY2sgKmFwcGx5X2Vy cm9yX2NvbnRleHRfc3RhY2s7CisKK2V4dGVybiBQR0RMTElNUE9SVCBQYXJhbGxlbEFwcGx5V29y a2VyU2hhcmVkICpNeVBhcmFsbGVsU2hhcmVkOworCiAvKiBsaWJwcXJlY2VpdmVyIGNvbm5lY3Rp b24gKi8KIGV4dGVybiBQR0RMTElNUE9SVCBzdHJ1Y3QgV2FsUmVjZWl2ZXJDb25uICpMb2dSZXBX b3JrZXJXYWxSY3ZDb25uOwogCkBAIC04NCw5ICsyMjksMTEgQEAgZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93b3JrZXJfYXR0YWNoKGludCBzbG90KTsKIGV4dGVybiBMb2dpY2FsUmVwV29ya2VyICps b2dpY2FscmVwX3dvcmtlcl9maW5kKE9pZCBzdWJpZCwgT2lkIHJlbGlkLAogCQkJCQkJCQkJCQkJ Ym9vbCBvbmx5X3J1bm5pbmcpOwogZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfd29ya2Vyc19maW5k KE9pZCBzdWJpZCwgYm9vbCBvbmx5X3J1bm5pbmcpOwotZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93 b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCi0J CQkJCQkJCQkgT2lkIHVzZXJpZCwgT2lkIHJlbGlkKTsKK2V4dGVybiBib29sIGxvZ2ljYWxyZXBf d29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLAor CQkJCQkJCQkJIE9pZCB1c2VyaWQsIE9pZCByZWxpZCwKKwkJCQkJCQkJCSBkc21faGFuZGxlIHN1 Yndvcmtlcl9kc20pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3Vi aWQsIE9pZCByZWxpZCk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3BhX3dvcmtlcl9zdG9wKGlu dCBzbG90X25vLCB1aW50MTYgZ2VuZXJhdGlvbik7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dv cmtlcl93YWtldXAoT2lkIHN1YmlkLCBPaWQgcmVsaWQpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJl cF93b3JrZXJfd2FrZXVwX3B0cihMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpOwogCkBAIC0xMDMs MTAgKzI1MCw3OCBAQCBleHRlcm4gdm9pZCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzKFhMb2dSZWNQ dHIgY3VycmVudF9sc24pOwogZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9zeW5jaW5nX3RhYmxlX3N0 YXRlcyhEYXR1bSBhcmcsIGludCBjYWNoZWlkLAogCQkJCQkJCQkJCQl1aW50MzIgaGFzaHZhbHVl KTsKIAorZXh0ZXJuIHZvaWQgc3RyZWFtX3N0YXJ0X2ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlk LCBib29sIGZpcnN0X3NlZ21lbnQpOworZXh0ZXJuIHZvaWQgc3RyZWFtX3N0b3BfaW50ZXJuYWwo VHJhbnNhY3Rpb25JZCB4aWQpOworCisvKiBDb21tb24gc3RyZWFtaW5nIGZ1bmN0aW9uIHRvIGFw cGx5IGFsbCB0aGUgc3Bvb2xlZCBtZXNzYWdlcyAqLworZXh0ZXJuIHZvaWQgYXBwbHlfc3Bvb2xl ZF9tZXNzYWdlcyhGaWxlU2V0ICpzdHJlYW1fZmlsZXNldCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJ CQkJCQkJCSAgIFhMb2dSZWNQdHIgbHNuKTsKKworZXh0ZXJuIHZvaWQgYXBwbHlfZGlzcGF0Y2go U3RyaW5nSW5mbyBzKTsKKworZXh0ZXJuIHZvaWQgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2 b2lkKTsKKworZXh0ZXJuIHZvaWQgc3RyZWFtX2NsZWFudXBfZmlsZXMoT2lkIHN1YmlkLCBUcmFu c2FjdGlvbklkIHhpZCk7CisKK2V4dGVybiB2b2lkIEluaXRpYWxpemVBcHBseVdvcmtlcih2b2lk KTsKKworZXh0ZXJuIHZvaWQgc3RvcmVfZmx1c2hfcG9zaXRpb24oWExvZ1JlY1B0ciByZW1vdGVf bHNuLCBYTG9nUmVjUHRyIGxvY2FsX2xzbik7CisKKy8qIEZ1bmN0aW9uIGZvciBhcHBseSBlcnJv ciBjYWxsYmFjayAqLworZXh0ZXJuIHZvaWQgYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJn KTsKK2V4dGVybiB2b2lkIHNldF9hcHBseV9lcnJvcl9jb250ZXh0X29yaWdpbihjaGFyICpvcmln aW5uYW1lKTsKKworLyogUGFyYWxsZWwgYXBwbHkgd29ya2VyIHNldHVwIGFuZCBpbnRlcmFjdGlv bnMgKi8KK2V4dGVybiB2b2lkIHBhX2FsbG9jYXRlX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCk7 CitleHRlcm4gUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKnBhX2ZpbmRfd29ya2VyKFRyYW5zYWN0 aW9uSWQgeGlkKTsKK2V4dGVybiB2b2lkIHBhX2RldGFjaF9hbGxfZXJyb3JfbXEodm9pZCk7CisK K2V4dGVybiBib29sIHBhX3NlbmRfZGF0YShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8s IFNpemUgbmJ5dGVzLAorCQkJCQkJIGNvbnN0IHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgcGFf c3dpdGNoX3RvX3BhcnRpYWxfc2VyaWFsaXplKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5m bywKKwkJCQkJCQkJCQkgICBib29sIHN0cmVhbV9sb2NrZWQpOworCitleHRlcm4gdm9pZCBwYV9z ZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkLAorCQkJCQkJ CSAgUGFyYWxsZWxUcmFuc1N0YXRlIGluX3hhY3QpOworZXh0ZXJuIHZvaWQgcGFfc2V0X3N0cmVh bV9hcHBseV93b3JrZXIoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvKTsKKworZXh0ZXJu IHZvaWQgcGFfc3RhcnRfc3VidHJhbnMoVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZCwKKwkJCQkJ CQkgIFRyYW5zYWN0aW9uSWQgdG9wX3hpZCk7CitleHRlcm4gdm9pZCBwYV9yZXNldF9zdWJ0cmFu cyh2b2lkKTsKK2V4dGVybiB2b2lkIHBhX3N0cmVhbV9hYm9ydChMb2dpY2FsUmVwU3RyZWFtQWJv cnREYXRhICphYm9ydF9kYXRhKTsKK2V4dGVybiB2b2lkIHBhX3NldF9maWxlc2V0X3N0YXRlKFBh cmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJCQkJCSBQYXJ0aWFsRmlsZVNl dFN0YXRlIGZpbGVzZXRfc3RhdGUpOworCitleHRlcm4gdm9pZCBwYV9sb2NrX3N0cmVhbShUcmFu c2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21vZGUpOworZXh0ZXJuIHZvaWQgcGFfdW5sb2Nr X3N0cmVhbShUcmFuc2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21vZGUpOworCitleHRlcm4g dm9pZCBwYV9sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2Nr bW9kZSk7CitleHRlcm4gdm9pZCBwYV91bmxvY2tfdHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4 aWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKKworZXh0ZXJuIHZvaWQgcGFfZGVjcl9hbmRfd2FpdF9z dHJlYW1fYmxvY2sodm9pZCk7CisKK2V4dGVybiB2b2lkIHBhX3hhY3RfZmluaXNoKFBhcmFsbGVs QXBwbHlXb3JrZXJJbmZvICp3aW5mbywKKwkJCQkJCSAgIFhMb2dSZWNQdHIgcmVtb3RlX2xzbik7 CisKKyNkZWZpbmUgaXNQYXJhbGxlbEFwcGx5V29ya2VyKHdvcmtlcikgKCh3b3JrZXIpLT5hcHBs eV9sZWFkZXJfcGlkICE9IEludmFsaWRQaWQpCisKIHN0YXRpYyBpbmxpbmUgYm9vbAogYW1fdGFi bGVzeW5jX3dvcmtlcih2b2lkKQogewogCXJldHVybiBPaWRJc1ZhbGlkKE15TG9naWNhbFJlcFdv cmtlci0+cmVsaWQpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wKK2FtX2xlYWRlcl9hcHBseV93 b3JrZXIodm9pZCkKK3sKKwlyZXR1cm4gKCFhbV90YWJsZXN5bmNfd29ya2VyKCkgJiYKKwkJCSFp c1BhcmFsbGVsQXBwbHlXb3JrZXIoTXlMb2dpY2FsUmVwV29ya2VyKSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgYm9vbAorYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKHZvaWQpCit7CisJcmV0dXJuIGlz UGFyYWxsZWxBcHBseVdvcmtlcihNeUxvZ2ljYWxSZXBXb3JrZXIpOworfQorCiAjZW5kaWYJCQkJ CQkJLyogV09SS0VSX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvbG1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdyLmgKaW5kZXggOTk1YzhlOGZkMy4u NGVlOTFlM2NmOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdyLmgKKysrIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9sbWdyLmgKQEAgLTEwNyw2ICsxMDcsMTEgQEAgZXh0ZXJuIHZv aWQgTG9ja1NoYXJlZE9iamVjdEZvclNlc3Npb24oT2lkIGNsYXNzaWQsIE9pZCBvYmppZCwgdWlu dDE2IG9ianN1YmlkLAogZXh0ZXJuIHZvaWQgVW5sb2NrU2hhcmVkT2JqZWN0Rm9yU2Vzc2lvbihP aWQgY2xhc3NpZCwgT2lkIG9iamlkLCB1aW50MTYgb2Jqc3ViaWQsCiAJCQkJCQkJCQkJIExPQ0tN T0RFIGxvY2ttb2RlKTsKIAorZXh0ZXJuIHZvaWQgTG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNz aW9uKE9pZCBzdWJvaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCB1aW50MTYgb2JqaWQsCisJCQkJCQkJ CQkJICAgTE9DS01PREUgbG9ja21vZGUpOworZXh0ZXJuIHZvaWQgVW5sb2NrQXBwbHlUcmFuc2Fj dGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4aWQsIHVpbnQxNiBvYmpp ZCwKKwkJCQkJCQkJCQkJIExPQ0tNT0RFIGxvY2ttb2RlKTsKKwogLyogRGVzY3JpYmUgYSBsb2Nr dGFnIGZvciBlcnJvciBtZXNzYWdlcyAqLwogZXh0ZXJuIHZvaWQgRGVzY3JpYmVMb2NrVGFnKFN0 cmluZ0luZm8gYnVmLCBjb25zdCBMT0NLVEFHICp0YWcpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL2xvY2suaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCmluZGV4IDlh NzE5MzQ4YmMuLjE5MGJkZGI3NjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9j ay5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCkBAIC0xNDksMTAgKzE0OSwxMiBA QCB0eXBlZGVmIGVudW0gTG9ja1RhZ1R5cGUKIAlMT0NLVEFHX1NQRUNVTEFUSVZFX1RPS0VOLAkv KiBzcGVjdWxhdGl2ZSBpbnNlcnRpb24gWGlkIGFuZCB0b2tlbiAqLwogCUxPQ0tUQUdfT0JKRUNU LAkJCQkvKiBub24tcmVsYXRpb24gZGF0YWJhc2Ugb2JqZWN0ICovCiAJTE9DS1RBR19VU0VSTE9D SywJCQkvKiByZXNlcnZlZCBmb3Igb2xkIGNvbnRyaWIvdXNlcmxvY2sgY29kZSAqLwotCUxPQ0tU QUdfQURWSVNPUlkJCQkvKiBhZHZpc29yeSB1c2VyIGxvY2tzICovCisJTE9DS1RBR19BRFZJU09S WSwJCQkvKiBhZHZpc29yeSB1c2VyIGxvY2tzICovCisJTE9DS1RBR19BUFBMWV9UUkFOU0FDVElP TgkvKiB0cmFuc2FjdGlvbiBiZWluZyBhcHBsaWVkIG9uIGEgbG9naWNhbAorCQkJCQkJCQkgKiBy ZXBsaWNhdGlvbiBzdWJzY3JpYmVyICovCiB9IExvY2tUYWdUeXBlOwogCi0jZGVmaW5lIExPQ0tU QUdfTEFTVF9UWVBFCUxPQ0tUQUdfQURWSVNPUlkKKyNkZWZpbmUgTE9DS1RBR19MQVNUX1RZUEUJ TE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTgogCiBleHRlcm4gUEdETExJTVBPUlQgY29uc3QgY2hh ciAqY29uc3QgTG9ja1RhZ1R5cGVOYW1lc1tdOwogCkBAIC0yNzgsNiArMjgwLDE3IEBAIHR5cGVk ZWYgc3RydWN0IExPQ0tUQUcKIAkgKGxvY2t0YWcpLmxvY2t0YWdfdHlwZSA9IExPQ0tUQUdfQURW SVNPUlksIFwKIAkgKGxvY2t0YWcpLmxvY2t0YWdfbG9ja21ldGhvZGlkID0gVVNFUl9MT0NLTUVU SE9EKQogCisvKgorICogSUQgaW5mbyBmb3IgYSByZW1vdGUgdHJhbnNhY3Rpb24gb24gYSBsb2dp Y2FsIHJlcGxpY2F0aW9uIHN1YnNjcmliZXIgaXM6IERCCisgKiBPSUQgKyBTVUJTQ1JJUFRJT04g T0lEICsgVFJBTlNBQ1RJT04gSUQgKyBPQkpJRAorICovCisjZGVmaW5lIFNFVF9MT0NLVEFHX0FQ UExZX1RSQU5TQUNUSU9OKGxvY2t0YWcsZGJvaWQsc3Vib2lkLHhpZCxvYmppZCkgXAorCSgobG9j a3RhZykubG9ja3RhZ19maWVsZDEgPSAoZGJvaWQpLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX2Zp ZWxkMiA9IChzdWJvaWQpLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX2ZpZWxkMyA9ICh4aWQpLCBc CisJIChsb2NrdGFnKS5sb2NrdGFnX2ZpZWxkNCA9IChvYmppZCksIFwKKwkgKGxvY2t0YWcpLmxv Y2t0YWdfdHlwZSA9IExPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04sIFwKKwkgKGxvY2t0YWcpLmxv Y2t0YWdfbG9ja21ldGhvZGlkID0gREVGQVVMVF9MT0NLTUVUSE9EKQogCiAvKgogICogUGVyLWxv Y2tlZC1vYmplY3QgbG9jayBpbmZvcm1hdGlvbjoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcHJvY3NpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKaW5k ZXggNDVlMmYxZmU5ZC4uOTA1YWYyMjMxYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKQEAg LTM1LDYgKzM1LDcgQEAgdHlwZWRlZiBlbnVtCiAJUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElO RywJLyogYXNrIHdhbHNlbmRlcnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICovCiAJUFJPQ1NJ R19CQVJSSUVSLAkJCS8qIGdsb2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8KIAlQUk9DU0lHX0xP R19NRU1PUllfQ09OVEVYVCwgLyogYXNrIGJhY2tlbmQgdG8gbG9nIHRoZSBtZW1vcnkgY29udGV4 dHMgKi8KKwlQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UsIC8qIE1lc3NhZ2UgZnJvbSBw YXJhbGxlbCBhcHBseSB3b3JrZXJzICovCiAKIAkvKiBSZWNvdmVyeSBjb25mbGljdCByZWFzb25z ICovCiAJUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZl bnQuaAppbmRleCBmNTMyNTRhZDFmLi42Y2FjZDZlZGFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS91dGlscy93YWl0X2V2ZW50LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5o CkBAIC00Miw2ICs0Miw3IEBAIHR5cGVkZWYgZW51bQogCVdBSVRfRVZFTlRfQ0hFQ0tQT0lOVEVS X01BSU4sCiAJV0FJVF9FVkVOVF9MT0dJQ0FMX0FQUExZX01BSU4sCiAJV0FJVF9FVkVOVF9MT0dJ Q0FMX0xBVU5DSEVSX01BSU4sCisJV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX01B SU4sCiAJV0FJVF9FVkVOVF9SRUNPVkVSWV9XQUxfU1RSRUFNLAogCVdBSVRfRVZFTlRfU1lTTE9H R0VSX01BSU4sCiAJV0FJVF9FVkVOVF9XQUxfUkVDRUlWRVJfTUFJTiwKQEAgLTEwNSw2ICsxMDYs NyBAQCB0eXBlZGVmIGVudW0KIAlXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX0FMTE9DQVRF LAogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfRUxFQ1QsCiAJV0FJVF9FVkVOVF9IQVNI X0dST1dfQlVDS0VUU19SRUlOU0VSVCwKKwlXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQ TFlfU1RBVEVfQ0hBTkdFLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX0RBVEEsCiAJV0FJVF9F VkVOVF9MT0dJQ0FMX1NZTkNfU1RBVEVfQ0hBTkdFLAogCVdBSVRfRVZFTlRfTVFfSU5URVJOQUws CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKaW5kZXggYzEzZDIx OGRjZi4uMWVkNmY0YzM5YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z dWJzY3JpcHRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0 aW9uLm91dApAQCAtMTE3LDcgKzExNyw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlv biwgeW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAg IE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1Ymxp Y2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUg b24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5m byAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViNCB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IG5vbmUgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdyZXNzX3N1YnNj cmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAg IHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBub25lICAgfCBvZmYgICAg ICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykK IAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YjQgU0VUIChvcmlnaW4gPSBhbnkp OwpAQCAtMTI1LDcgKzEyNSw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI0 IFNFVCAob3JpZ2luID0gYW55KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBU d28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3Vz IGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWI0IHwgcmVncmVzc19zdWJz Y3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAg ICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAg ICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVz c190ZXN0c3ViNCB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2Rv ZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rl c3RzdWIzOwpAQCAtMTM4LDcgKzEzOCw3IEBAIEVSUk9SOiAgaW52YWxpZCBjb25uZWN0aW9uIHN0 cmluZyBzeW50YXg6IG1pc3NpbmcgIj0iIGFmdGVyICJmb29iYXIiIGluIGNvbm5lY3RpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAg TmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGlj YXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBv biBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZv ICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rl c3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAg ICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNz X2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0 aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBk ICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAg ICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBB TFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCBQVUJMSUNBVElPTiB0ZXN0cHVi MiwgdGVzdHB1YjMgV0lUSCAocmVmcmVzaCA9IGZhbHNlKTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBB TFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNLSVAgKGxzbiA9ICcwLzEyMzQ1Jyk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlv bnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxl ZCB8ICAgICBQdWJsaWNhdGlvbiAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2Ug Y29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8 ICAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNj cmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAgfCBm ICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdDIgfCAwLzEy MzQ1CisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAg ICAgfCB7dGVzdHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAg fCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8xMjM0NQogKDEgcm93KQogCiAtLSBv ayAtIHdpdGggbHNuID0gTk9ORQpAQCAtMTcwLDcgKzE3MCw3IEBAIEVSUk9SOiAgaW52YWxpZCBX QUwgbG9jYXRpb24gKExTTik6IDAvMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgUHVibGljYXRpb24gICAgIHwgQmluYXJ5IHwg U3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4g fCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tp cCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190 ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1YjIs dGVzdHB1YjN9IHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAg ICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVz c19kb2Vzbm90ZXhpc3QyIHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3Jp cHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgb2Zm ICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBv ZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8wCiAo MSByb3cpCiAKIEJFR0lOOwpAQCAtMjA1LDcgKzIwNSw3IEBAIEhJTlQ6ICBBdmFpbGFibGUgdmFs dWVzOiBsb2NhbCwgcmVtb3RlX3dyaXRlLCByZW1vdGVfYXBwbHksIG9uLCBvZmYuCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAg ICAgICBOYW1lICAgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8 ICAgICBQdWJsaWNhdGlvbiAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29t bWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAg ICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViX2ZvbyB8IHJlZ3Jlc3Nf c3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAg ICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55 ICAgIHwgbG9jYWwgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8 IDAvMAorIHJlZ3Jlc3NfdGVzdHN1Yl9mb28gfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwg ZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAg ICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IGxvY2FsICAgICAgICAg ICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdDIgfCAwLzAKICgxIHJvdykKIAogLS0g cmVuYW1lIGJhY2sgdG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKQEAgLTI0Miw3ICsyNDIsNyBAQCBI SU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0 aGUgcmVwbGljYXRpb24gc2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwg VHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91 cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNj cmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgdCAgICAgIHwgZiAgICAgICAg IHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAg ICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNz X3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVi fSAgIHwgdCAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAg ICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVz dHN1YiBTRVQgKGJpbmFyeSA9IGZhbHNlKTsKQEAgLTI1MSwxMyArMjUxLDEzIEBAIEFMVEVSIFNV QlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBO YW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNh dGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9u IGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8g ICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVz dHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAg ICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3Nf ZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRp b25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQg ICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAg ICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIERS T1AgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YjsKLS0tIGZhaWwgLSBzdHJlYW1pbmcgbXVz dCBiZSBib29sZWFuCistLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbiBvciAncGFy YWxsZWwnCiBDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdk Ym5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29u bmVjdCA9IGZhbHNlLCBzdHJlYW1pbmcgPSBmb28pOwotRVJST1I6ICBzdHJlYW1pbmcgcmVxdWly ZXMgYSBCb29sZWFuIHZhbHVlCitFUlJPUjogIHN0cmVhbWluZyByZXF1aXJlcyBhIEJvb2xlYW4g dmFsdWUgb3IgInBhcmFsbGVsIgogLS0gbm93IGl0IHdvcmtzCiBDUkVBVEUgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3Qn IFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBzdHJlYW1pbmcgPSB0 cnVlKTsKIFdBUk5JTkc6ICBzdWJzY3JpcHRpb24gd2FzIGNyZWF0ZWQsIGJ1dCBpcyBub3QgY29u bmVjdGVkCkBAIC0yNjYsNyArMjY2LDE1IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlv biwgeW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAg TmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGlj YXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBv biBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZv ICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rl c3RwdWJ9ICAgfCBmICAgICAgfCB0ICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAg ICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNz X2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0 aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvbiAgICAgICAgfCBk ICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAg ICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorKDEgcm93KQorCitB TFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0gcGFyYWxs ZWwpOworXGRScysKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJz Y3JpcHRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBj b21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwg ICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCistLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNl ciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IHBhcmFsbGVsICB8IGQgICAgICAg ICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAg IHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNV QlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcgPSBmYWxzZSk7CkBAIC0y NzUsNyArMjgzLDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNs b3RfbmFtZSA9IE5PTkUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBo YXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21t aXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlv bl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAg ICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAg ICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3Rz dWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwg ZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAg fCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhp c3QgfCAwLzAKICgxIHJvdykKIAogLS0gZmFpbCAtIHB1YmxpY2F0aW9uIGFscmVhZHkgZXhpc3Rz CkBAIC0yOTMsNyArMzAxLDcgQEAgRVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1YjEiIGlzIGFs cmVhZHkgaW4gc3Vic2NyaXB0aW9uICJyZWdyZXNzX3Rlc3RzdWIiCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1l ICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgICAgIFB1 YmxpY2F0aW9uICAgICAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0 IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAg ICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNj cmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViLHRlc3RwdWIxLHRlc3RwdWIyfSB8IGYg ICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwg YW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYg ICAgICAgfCB7dGVzdHB1Yix0ZXN0cHViMSx0ZXN0cHViMn0gfCBmICAgICAgfCBvZmYgICAgICAg fCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAg ICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQog CiAtLSBmYWlsIC0gcHVibGljYXRpb24gdXNlZCBtb3JlIHRoZW4gb25jZQpAQCAtMzExLDcgKzMx OSw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgRFJPUCBQVUJMSUNBVElP TiB0ZXN0cHViMSwgdGVzdHB1YjIgV0lUSCAocmVmCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJl YW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5 bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNO IAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBm ICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAor IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBEUk9QIFNVQlNDUklQVElPTiByZWdy ZXNzX3Rlc3RzdWI7CkBAIC0zNTAsNyArMzU4LDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxp Y2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAg ICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQ dWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNh YmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29u bmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IHAgICAgICAgICAgICAgICAgfCBm ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJl Z3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJz Y3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAg ICB8IHAgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAg ICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cp CiAKIC0tZmFpbCAtIGFsdGVyIG9mIHR3b19waGFzZSBvcHRpb24gbm90IHN1cHBvcnRlZC4KQEAg LTM2Miw3ICszNzAsNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAo c3RyZWFtaW5nID0gdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qg b2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28t cGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNv bW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0 aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCB0ICAgICAgICAgfCBw ICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAg ICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVz dHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAg fCBmICAgICAgfCBvbiAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3Vi IFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CkBAIC0zNzUsNyArMzgzLDcgQEAgSElOVDogIFRvIGlu aXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0 aW9uIHNsb3QsIGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJz Y3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBj b21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwg ICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNl ciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IHQgICAgICAgICB8IHAgICAgICAg ICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAg IHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwg cmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAg ICB8IG9uICAgICAgICB8IHAgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55 ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwg MC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChz bG90X25hbWUgPSBOT05FKTsKQEAgLTM5MSw3ICszOTksNyBAQCBISU5UOiAgVG8gaW5pdGlhdGUg cmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xv dCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlv bnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxl ZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8 IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAg ICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAg ICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAg ICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5h bWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNz X3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2Zm ICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBv ZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgx IHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKGRpc2FibGVf b25fZXJyb3IgPSB0cnVlKTsKQEAgLTM5OSw3ICs0MDcsNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04g cmVncmVzc190ZXN0c3ViIFNFVCAoZGlzYWJsZV9vbl9lcnJvciA9IHRydWUpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUg ICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9u IHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJy b3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAg ICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVi fSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAg ICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91 c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAg ICAgICAgICAgICB8IHQgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAg ICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIg U1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwKaW5kZXggZWFlYWRlOGNjZS4uNzk5MWFiZmU4 ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24uc3FsCkBAIC0xNjcsNyArMTY3LDcg QEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5P TkUpOwogCiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI7CiAKLS0tIGZhaWwgLSBz dHJlYW1pbmcgbXVzdCBiZSBib29sZWFuCistLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9v bGVhbiBvciAncGFyYWxsZWwnCiBDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBD T05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3Rw dWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBzdHJlYW1pbmcgPSBmb28pOwogCiAtLSBub3cgaXQg d29ya3MKQEAgLTE3NSw2ICsxNzUsMTAgQEAgQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rl c3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUIKIAogXGRS cysKIAorQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9 IHBhcmFsbGVsKTsKKworXGRScysKKwogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1 YiBTRVQgKHN0cmVhbWluZyA9IGZhbHNlKTsKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rl c3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9z dHJlYW0ucGwKaW5kZXggZTI1OWMxMDBkNS4uOTFlOGFhOGMwYSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMTVfc3RyZWFtLnBsCkBAIC04LDYgKzgsMTI4IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7 CiAKKyMgQ2hlY2sgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGhhcyBmaW5pc2hlZCBh cHBseWluZyB0aGUgc3RyZWFtaW5nCisjIHRyYW5zYWN0aW9uLgorc3ViIGNoZWNrX3BhcmFsbGVs X2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICR0 eXBlKSA9IEBfOworCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXIt PndhaXRfZm9yX2xvZygKKwkJCXFyL0RFQlVHOiAoIFtBLVowLTldKzopPyBmaW5pc2hlZCBwcm9j ZXNzaW5nIHRoZSBTVFJFQU0gJHR5cGUgY29tbWFuZC8sCisJCQkkb2Zmc2V0KTsKKwl9Cit9CisK KyMgQ29tbW9uIHRlc3Qgc3RlcHMgZm9yIGJvdGggdGhlIHN0cmVhbWluZz1vbiBhbmQgc3RyZWFt aW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1 Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsK KworCSMgSW50ZXJsZWF2ZSBhIHBhaXIgb2YgdHJhbnNhY3Rpb25zLCBlYWNoIGV4Y2VlZGluZyB0 aGUgNjRrQiBsaW1pdC4KKwlteSAkaW4gID0gJyc7CisJbXkgJG91dCA9ICcnOworCisJbXkgJG9m ZnNldCA9IDA7CisKKwlteSAkdGltZXIgPSBJUEM6OlJ1bjo6dGltZW91dCgkUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCk7CisKKwlteSAkaCA9ICRub2RlX3B1Ymxpc2hl ci0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycsIFwkaW4sIFwkb3V0LCAkdGltZXIsCisJCW9u X2Vycm9yX3N0b3AgPT4gMCk7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5v dyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSRpbiAu PSBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIg U0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFi IFdIRVJFIG1vZChhLDMpID0gMDsKKwl9OworCSRoLT5wdW1wX25iOworCisJJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAx LCA5OTk5KSBzKGkpOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiA1MDAwOworCUNP TU1JVDsKKwl9KTsKKworCSRpbiAuPSBxeworCUNPTU1JVDsKKwlccQorCX07CisJJGgtPmZpbmlz aDsgICAgIyBlcnJvcnMgbWFrZSB0aGUgbmV4dCB0ZXN0IGZhaWwsIHNvIGlnbm9yZSB0aGVtIGhl cmUKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwlj aGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVs LCAnQ09NTUlUJyk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9 IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwK KwkJJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycpOworCisJIyBU ZXN0IHRoZSBzdHJlYW1pbmcgaW4gYmluYXJ5IG1vZGUKKwkkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVCAoYmlu YXJ5ID0gb24pIik7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4K Kwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgSW5zZXJ0LCB1 cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCisJ JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJ SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRl X3Nlcmllcyg1MDAxLCAxMDAwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUo YikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChh LDMpID0gMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIs ICRvZmZzZXQsICRpc19wYXJhbGxlbCwgJ0NPTU1JVCcpOworCisJJHJlc3VsdCA9CisJICAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwg Y291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBx cSg2NjY3fDY2Njd8NjY2NyksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwg ZGVmYXVsdHMnKTsKKworCSMgQ2hhbmdlIHRoZSBsb2NhbCB2YWx1ZXMgb2YgdGhlIGV4dHJhIGNv bHVtbnMgb24gdGhlIHN1YnNjcmliZXIsCisJIyB1cGRhdGUgcHVibGlzaGVyLCBhbmQgY2hlY2sg dGhhdCBzdWJzY3JpYmVyIHJldGFpbnMgdGhlIGV4cGVjdGVkCisJIyB2YWx1ZXMuIFRoaXMgaXMg dG8gZW5zdXJlIHRoYXQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVoYXZlCisJIyBwcm9w ZXJseSBhZnRlciBhIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KKwkkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlVQREFURSB0ZXN0X3RhYiBTRVQgYyA9ICdlcG9jaCc6 OnRpbWVzdGFtcHR6ICsgOTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIKKwkpOworCisJIyBDaGVj ayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1 YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGE6OnRleHQpIik7CisKKwkkbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxs ZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCwgJ0NPTU1JVCcp OworCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChleHRyYWN0KGVwb2NoIGZyb20gYykgPSA5ODc2NTQz MjEpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIgorCSk7CisJaXMoJHJlc3VsdCwgcXEo NjY2N3w2NjY3fDY2NjcpLAorCQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsbHkg Y2hhbmdlZCBkYXRhJyk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVS RSAoYSA+IDIpIik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNo ZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMjYsMTcgKzE0OCwy NyBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVT ICgxLCAnZm9vJyksICgyLCAnYmFyJykiKTsKIAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0X3RhYl8yIChhIGludCkiKTsKKwogIyBTZXR1 cCBzdHJ1Y3R1cmUgb24gc3Vic2NyaWJlcgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiAJIkNSRUFURSBUQUJMRSB0ZXN0X3RhYiAoYSBpbnQgcHJpbWFyeSBrZXksIGIg dGV4dCwgYyB0aW1lc3RhbXB0eiBERUZBVUxUIG5vdygpLCBkIGJpZ2ludCBERUZBVUxUIDk5OSki CiApOwogCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0ZXN0X3RhYl8yIChhIGludCkiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJDUkVBVEUgVU5JUVVFIElOREVYIGlkeF90YWIgb24gdGVzdF90YWJfMihh KSIpOworCiAjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24KIG15ICRwdWJsaXNoZXJfY29ubnN0 ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKICRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNSRUFURSBQVUJMSUNBVElPTiB0 YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOworCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1 YiBGT1IgVEFCTEUgdGVzdF90YWIsIHRlc3RfdGFiXzIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFw X3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcg c3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgU1VCU0NSSVBU SU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25h bWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5nID0gb24pIgog KTsKQEAgLTQ5LDYgKzE4MSw0MyBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50KCopLCBj b3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEo MnwyfDIpLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwog Cit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBu YW1lLCAwKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVz dCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJF IGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK Kyk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBT VUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFyYWxsZWwsIGJpbmFyeSA9IG9m ZikiKTsKKworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJ IlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBw bGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICAp CisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3Rh cnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKKworIyBXZSBuZWVkIHRvIGNoZWNrIERF QlVHIGxvZ3MgdG8gZW5zdXJlIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYXMKKyMg YXBwbGllZCB0aGUgdHJhbnNhY3Rpb24uIFNvLCBidW1wIHVwIHRoZSBsb2cgdmVyYm9zaXR5Lgor JG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJsb2dfbWlu X21lc3NhZ2VzID0gZGVidWcxIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisKKyMgUnVu IGEgcXVlcnkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlbG9hZCBoYXMgdGFrZW4gZWZmZWN0Lgor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7U0VMRUNUIDF9KTsKKwor dGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFt ZSwgMSk7CisKKyMgVGVzdCB0aGF0IHRoZSBkZWFkbG9jayBpcyBkZXRlY3RlZCBhbW9uZyB0aGUg bGVhZGVyIGFuZCBwYXJhbGxlbCBhcHBseQorIyB3b3JrZXJzLgorCiskbm9kZV9zdWJzY3JpYmVy LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImRlYWRsb2NrX3RpbWVvdXQgPSAxMG1z Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisKKyMgUnVuIGEgcXVlcnkgdG8gbWFrZSBz dXJlIHRoYXQgdGhlIHJlbG9hZCBoYXMgdGFrZW4gZWZmZWN0LgorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7U0VMRUNUIDF9KTsKKwogIyBJbnRlcmxlYXZlIGEgcGFp ciBvZiB0cmFuc2FjdGlvbnMsIGVhY2ggZXhjZWVkaW5nIHRoZSA2NGtCIGxpbWl0LgogbXkgJGlu ICA9ICcnOwogbXkgJG91dCA9ICcnOwpAQCAtNTgsNzMgKzIyNyw5MCBAQCBteSAkdGltZXIgPSBJ UEM6OlJ1bjo6dGltZW91dCgkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVs dCk7CiBteSAkaCA9ICRub2RlX3B1Ymxpc2hlci0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jlcycs IFwkaW4sIFwkb3V0LCAkdGltZXIsCiAJb25fZXJyb3Jfc3RvcCA9PiAwKTsKIAorIyBDb25maXJt IGlmIGEgZGVhZGxvY2sgYmV0d2VlbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgdGhlIHBh cmFsbGVsIGFwcGx5CisjIHdvcmtlciBjYW4gYmUgZGV0ZWN0ZWQuCisKK215ICRvZmZzZXQgPSAt cyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCiAkaW4gLj0gcXsKIEJFR0lOOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cygzLCA1MDAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1v ZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKK0lO U0VSVCBJTlRPIHRlc3RfdGFiXzIgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAw MCkgcyhpKTsKIH07CiAkaC0+cHVtcF9uYjsKIAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo Ci0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLCA5OTk5KSBzKGkpOwotREVM RVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDUwMDA7Ci1DT01NSVQ7Ci19KTsKKyMgRW5zdXJl IHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBleGVjdXRlcyB0aGUgaW5zZXJ0IGNvbW1h bmQgYmVmb3JlIHRoZQorIyBsZWFkZXIgd29ya2VyLgorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9m b3JfbG9nKAorCXFyL0RFQlVHOiAoIFtBLVowLTldKzopPyBhcHBsaWVkIFswLTldKyBjaGFuZ2Vz IGluIHRoZSBzdHJlYW1pbmcgY2h1bmsvLAorCSRvZmZzZXQpOworCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF90YWJfMiB2YWx1ZXMoMSki KTsKIAogJGluIC49IHF7CiBDT01NSVQ7CiBccQogfTsKLSRoLT5maW5pc2g7ICAgICMgZXJyb3Jz IG1ha2UgdGhlIG5leHQgdGVzdCBmYWlsLCBzbyBpZ25vcmUgdGhlbSBoZXJlCiskaC0+ZmluaXNo OwogCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvRVJST1I6ICggW0EtWjAtOV0r Oik/IGRlYWRsb2NrIGRldGVjdGVkLywKKwkkb2Zmc2V0KTsKKworIyBJbiBvcmRlciBmb3IgdGhl IHR3byB0cmFuc2FjdGlvbnMgdG8gYmUgY29tcGxldGVkIG5vcm1hbGx5IHdpdGhvdXQgY2F1c2lu ZworIyBjb25mbGljdHMgZHVlIHRvIHRoZSB1bmlxdWUgaW5kZXgsIHdlIHRlbXBvcmFyaWx5IGRy b3AgaXQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgSU5E RVggaWR4X3RhYiIpOworCisjIFdhaXQgZm9yIHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRv IGJlIGFwcGxpZWQgaW4gdGhlIGFwcGx5IHdvcmtlci4KICRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZSk7CiAKICRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQo ZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQp LCAnY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7CisgICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00g dGVzdF90YWJfMiIpOworaXMoJHJlc3VsdCwgcXEoNTAwMSksICdkYXRhIHJlcGxpY2F0ZWQgdG8g c3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcpOwogCi0jIFRlc3QgdGhlIHN0cmVhbWlu ZyBpbiBiaW5hcnkgbW9kZQorIyBDbGVhbiB1cCB0ZXN0IGRhdGEgZnJvbSB0aGUgZW52aXJvbm1l bnQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFC TEUgdGVzdF90YWJfMiIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJBTFRFUiBT VUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQgKGJpbmFyeSA9IG9uKSIpOworCSJDUkVBVEUgVU5JUVVF IElOREVYIGlkeF90YWIgb24gdGVzdF90YWJfMihhKSIpOwogCi0jIEluc2VydCwgdXBkYXRlIGFu ZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgotJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAx LCAxMDAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2Qo YSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1DT01N SVQ7Ci19KTsKKyMgQ29uZmlybSBpZiBhIGRlYWRsb2NrIGJldHdlZW4gdHdvIHBhcmFsbGVsIGFw cGx5IHdvcmtlcnMgY2FuIGJlIGRldGVjdGVkLgogCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJGFwcG5hbWUpOworIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cg b24uCiskb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKIAotJHJlc3VsdCA9 Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksICdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9j YWwgZGVmYXVsdHMnKTsKKyRpbiAuPSBxeworQkVHSU47CitJTlNFUlQgSU5UTyB0ZXN0X3RhYl8y IFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSk7Cit9OworJGgtPnB1 bXBfbmI7CisKKyMgRW5zdXJlIHRoYXQgdGhlIGZpcnN0IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBl eGVjdXRlcyB0aGUgaW5zZXJ0IGNvbW1hbmQKKyMgYmVmb3JlIHRoZSBzZWNvbmQgb25lLgorJG5v ZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0RFQlVHOiAoIFtBLVowLTldKzopPyBh cHBsaWVkIFswLTldKyBjaGFuZ2VzIGluIHRoZSBzdHJlYW1pbmcgY2h1bmsvLAorCSRvZmZzZXQp OwogCi0jIENoYW5nZSB0aGUgbG9jYWwgdmFsdWVzIG9mIHRoZSBleHRyYSBjb2x1bW5zIG9uIHRo ZSBzdWJzY3JpYmVyLAotIyB1cGRhdGUgcHVibGlzaGVyLCBhbmQgY2hlY2sgdGhhdCBzdWJzY3Jp YmVyIHJldGFpbnMgdGhlIGV4cGVjdGVkCi0jIHZhbHVlcy4gVGhpcyBpcyB0byBlbnN1cmUgdGhh dCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWhhdmUKLSMgcHJvcGVybHkgYWZ0ZXIgYSBz dHJlYW1pbmcgdHJhbnNhY3Rpb24uCi0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKLQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBjID0gJ2Vwb2NoJzo6dGltZXN0YW1wdHogKyA5 ODc2NTQzMjEgKiBpbnRlcnZhbCAnMXMnIgotKTsKICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCi0JIlVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShhOjp0ZXh0KSIpOwor CSJJTlNFUlQgSU5UTyB0ZXN0X3RhYl8yIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDUwMDApIHMoaSkiKTsKIAorJGluIC49IHF7CitDT01NSVQ7CitccQorfTsKKyRoLT5maW5pc2g7 CisKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci9FUlJPUjogKCBbQS1aMC05XSs6 KT8gZGVhZGxvY2sgZGV0ZWN0ZWQvLAorCSRvZmZzZXQpOworCisjIEluIG9yZGVyIGZvciB0aGUg dHdvIHRyYW5zYWN0aW9ucyB0byBiZSBjb21wbGV0ZWQgbm9ybWFsbHkgd2l0aG91dCBjYXVzaW5n CisjIGNvbmZsaWN0cyBkdWUgdG8gdGhlIHVuaXF1ZSBpbmRleCwgd2UgdGVtcG9yYXJpbHkgZHJv cCBpdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBJTkRF WCBpZHhfdGFiIik7CisKKyMgV2FpdCBmb3IgdGhpcyBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdG8g YmUgYXBwbGllZCBpbiB0aGUgYXBwbHkgd29ya2VyLgogJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCRhcHBuYW1lKTsKIAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGV4dHJhY3QoZXBvY2gg ZnJvbSBjKSA9IDk4NzY1NDMyMSksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiCi0pOwot aXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLAotCSdjaGVjayBleHRyYSBjb2x1bW5zIGNv bnRhaW4gbG9jYWxseSBjaGFuZ2VkIGRhdGEnKTsKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFi XzIiKTsKK2lzKCRyZXN1bHQsIHFxKDEwMDAwKSwgJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3Jp YmVyIGFmdGVyIGRyb3BwaW5nIGluZGV4Jyk7CiAKICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAk bm9kZV9wdWJsaXNoZXItPnN0b3A7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMTZfc3RyZWFtX3N1YnhhY3QucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3Ry ZWFtX3N1YnhhY3QucGwKaW5kZXggNjQ5ZGQ5NWY3YS4uMmYwMTQ4YzNhOCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsCisrKyBiL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbApAQCAtOCw2ICs4LDczIEBA IHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIGhhcyBmaW5pc2hlZCBhcHBseWluZyB0aGUgc3RyZWFtaW5nCisjIHRyYW5zYWN0aW9u Lgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zm c2V0LCAkaXNfcGFyYWxsZWwsICR0eXBlKSA9IEBfOworCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7 CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwkJCXFyL0RFQlVHOiAoIFtBLVow LTldKzopPyBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBTVFJFQU0gJHR5cGUgY29tbWFuZC8sCisJ CQkkb2Zmc2V0KTsKKwl9Cit9CisKKyMgQ29tbW9uIHRlc3Qgc3RlcHMgZm9yIGJvdGggdGhlIHN0 cmVhbWluZz1vbiBhbmQgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFt aW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUs ICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyBDaGVjayB0aGUg c3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmli ZXItPmxvZ2ZpbGU7CisKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgor CSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOwor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMywgNSkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hF UkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0g MDsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg2LCA4KSBzKGkpOworCVVQREFURSB0ZXN0X3Rh YiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0 X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDksIDExKSBz KGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7 CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQT0lOVCBz MzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEyLCAxNCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUo YikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChh LDMpID0gMDsKKwlTQVZFUE9JTlQgczQ7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNSwgMTcpIHMoaSk7CisJVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVs X2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICdDT01NSVQnKTsK KworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRl c3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMTJ8MTJ8MTIpLAorCQknY2hlY2sgZGF0YSB3YXMg Y29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3RyZWFtaW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVtbnMg Y29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEK Kwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00g dGVzdF90YWIgV0hFUkUgKGEgPiAyKSIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9w dWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwog JG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAg LTM3LDYgKzEwNCwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAog CSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkg JGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJD UkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3Ry IGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3Ry ZWFtaW5nID0gb24pIgogKTsKQEAgLTQ5LDQxICsxMjAsMzQgQEAgbXkgJHJlc3VsdCA9CiAJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK IGlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwgJ2NoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRv IHN1YnNjcmliZXInKTsKIAotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIHNvbWUgcm93cy4K LSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMywgNSkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBt b2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1T QVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDYsIDgpIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIg PSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUg bW9kKGEsMykgPSAwOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5LCAxMSkgcyhpKTsKLVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEy LCAxNCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwy KSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1TQVZFUE9J TlQgczQ7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDE1LCAxNykgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1k NShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2Qo YSwzKSA9IDA7Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5 KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgxMnwxMnwxMiksCi0JJ2NoZWNrIGRh dGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBtb2RlIGFuZCBleHRyYSBj b2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJs aXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKKworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFy YWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBp ZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQg RlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3Ry ZWFtaW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRp bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxp Y2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdz dHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZv ciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKKyMgV2Ug bmVlZCB0byBjaGVjayBERUJVRyBsb2dzIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaGFzCisjIGFwcGxpZWQgdGhlIHRyYW5zYWN0aW9uLiBTbywgYnVtcCB1cCB0aGUg bG9nIHZlcmJvc2l0eS4KKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3Fs LmNvbmYnLCAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworJG5vZGVfc3Vic2NyaWJlci0+ cmVsb2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFz IHRha2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx e1NFTEVDVCAxfSk7CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vi c2NyaWJlciwgJGFwcG5hbWUsIDEpOworCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVf cHVibGlzaGVyLT5zdG9wOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MTdfc3RyZWFtX2RkbC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRs LnBsCmluZGV4IDJmYmQ2NDNlOTguLjYyNjY3NmEzODMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRsLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAxN19zdHJlYW1fZGRsLnBsCkBAIC0yLDYgKzIsOSBAQAogIyBDb3B5cmlnaHQgKGMpIDIw MjEtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAogIyBUZXN0IHN0 cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbiB3aXRoIERETCBhbmQgc3VidHJhbnNhY3Rpb25z CisjCisjIFRoaXMgZmlsZSBpcyBtYWlubHkgdG8gdGVzdCB0aGUgRERML0RNTCBpbnRlcmFjdGlv biBvZiB0aGUgcHVibGlzaGVyIHNpZGUsCisjIHNvIHdlIGRpZG4ndCBhZGQgYSBwYXJhbGxlbCBh cHBseSB2ZXJzaW9uIGZvciB0aGUgdGVzdHMgaW4gdGhpcyBmaWxlLgogdXNlIHN0cmljdDsKIHVz ZSB3YXJuaW5nczsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsIGIvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsCmluZGV4IDE3 MGVlMTBjMWQuLmRjZTE0YjE1MGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQucGwKQEAgLTgsNiArOCwxMjQgQEAgdXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2Ug VGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaGFz IGZpbmlzaGVkIGFwcGx5aW5nIHRoZSBzdHJlYW1pbmcKKyMgdHJhbnNhY3Rpb24uCitzdWIgY2hl Y2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCwgJHR5cGUpID0gQF87CisKKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVf c3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCQkJcXIvREVCVUc6ICggW0EtWjAtOV0rOik/IGZp bmlzaGVkIHByb2Nlc3NpbmcgdGhlIFNUUkVBTSAkdHlwZSBjb21tYW5kLywKKwkJCSRvZmZzZXQp OworCX0KK30KKworIyBDb21tb24gdGVzdCBzdGVwcyBmb3IgYm90aCB0aGUgc3RyZWFtaW5nPW9u IGFuZCBzdHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlt eSAoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFs bGVsKSA9IEBfOworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVy IGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmls ZTsKKworCSMgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tz CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47 CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgzLCBtZDUoMzo6dGV4dCkpOworCVNBVkVQ T0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDQsIG1kNSg0Ojp0ZXh0KSk7 CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoNSwgbWQ1KDU6 OnRleHQpKTsKKwlTQVZFUE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg2 LCBtZDUoNjo6dGV4dCkpOworCVJPTExCQUNLIFRPIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFZBTFVFUyAoNywgbWQ1KDc6OnRleHQpKTsKKwlST0xMQkFDSyBUTyBzMTsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBWQUxVRVMgKDgsIG1kNSg4Ojp0ZXh0KSk7CisJU0FWRVBPSU5UIHM0OworCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOSwgbWQ1KDk6OnRleHQpKTsKKwlTQVZFUE9JTlQg czU7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgxMCwgbWQ1KDEwOjp0ZXh0KSk7CisJ Q09NTUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAk aXNfcGFyYWxsZWwsICdDT01NSVQnKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp IEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSg2fDApLAorCQknY2hlY2sgcm9sbGJh Y2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29s dW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIENoZWNrIHRoZSBzdWJzY3Jp YmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9n ZmlsZTsKKworCSMgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2Vpdmlu ZyBvdXQgb2Ygb3JkZXIKKwkjIHN1YnRyYW5zYWN0aW9uIFJPTExCQUNLcworCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFZBTFVFUyAoMTEsIG1kNSgxMTo6dGV4dCkpOworCVNBVkVQT0lOVCBzMTsKKwlJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDEyLCBtZDUoMTI6OnRleHQpKTsKKwlTQVZFUE9J TlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgxMywgbWQ1KDEzOjp0ZXh0KSk7 CisJU0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTQsIG1kNSgx NDo6dGV4dCkpOworCVJFTEVBU0UgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgx NSwgbWQ1KDE1Ojp0ZXh0KSk7CisJUk9MTEJBQ0sgVE8gczE7CisJQ09NTUlUOworCX0pOworCisJ JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3Bh cmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICdDT01N SVQnKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlp cygkcmVzdWx0LCBxcSg3fDApLAorCQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdhcyBy ZWZsZWN0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cg ZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisK KwkjIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgcm9sbGJh Y2sKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJ TjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE2LCBtZDUoMTY6OnRleHQpKTsKKwlT QVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgxNywgbWQ1KDE3Ojp0 ZXh0KSk7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTgs IG1kNSgxODo6dGV4dCkpOworCVJPTExCQUNLOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9z dWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICdBQk9SVCcpOworCisJJHJlc3VsdCA9 CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBj b3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDd8MCks ICdjaGVjayByb2xsYmFjayB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgQ2xl YW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsKKwkkbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworfQorCiAjIENyZWF0ZSBwdWJsaXNo ZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5n ID0+ICdsb2dpY2FsJyk7CkBAIC0zNiw2ICsxNTQsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxF IHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04g JyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElP TiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00OCw4MSArMTcwLDMzIEBA IG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIi KTsKIGlzKCRyZXN1bHQsIHFxKDJ8MCksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0 byBzdWJzY3JpYmVyJyk7CiAKLSMgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBh bmQgUk9MTEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBx ewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDMsIG1kNSgzOjp0ZXh0KSk7 Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDQsIG1kNSg0Ojp0 ZXh0KSk7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDUsIG1k NSg1Ojp0ZXh0KSk7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDYsIG1kNSg2Ojp0ZXh0KSk7Ci1ST0xMQkFDSyBUTyBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFi IFZBTFVFUyAoNywgbWQ1KDc6OnRleHQpKTsKLVJPTExCQUNLIFRPIHMxOwotSU5TRVJUIElOVE8g dGVzdF90YWIgVkFMVUVTICg4LCBtZDUoODo6dGV4dCkpOwotU0FWRVBPSU5UIHM0OwotSU5TRVJU IElOVE8gdGVzdF90YWIgVkFMVUVTICg5LCBtZDUoOTo6dGV4dCkpOwotU0FWRVBPSU5UIHM1Owot SU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgxMCwgbWQ1KDEwOjp0ZXh0KSk7Ci1DT01NSVQ7 Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQot JHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJT RUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFx KDZ8MCksCi0JJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1 YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKK3Rlc3Rf c3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDAp OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5n IHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGlj YXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKIAot IyBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIG91dCBvZiBv cmRlciBzdWJ0cmFuc2FjdGlvbgotIyBST0xMQkFDS3MKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVF UyAoMTEsIG1kNSgxMTo6dGV4dCkpOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgVkFMVUVTICgxMiwgbWQ1KDEyOjp0ZXh0KSk7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBWQUxVRVMgKDEzLCBtZDUoMTM6OnRleHQpKTsKLVNBVkVQT0lOVCBzMzsKLUlO U0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTQsIG1kNSgxNDo6dGV4dCkpOwotUkVMRUFTRSBz MjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTUsIG1kNSgxNTo6dGV4dCkpOwotUk9M TEJBQ0sgVE8gczE7Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90 YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDd8MCksCi0JJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2lu dCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKLQotIyBzdHJlYW1lZCB0cmFuc2FjdGlv biB3aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIHJvbGxiYWNrCi0kbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBW QUxVRVMgKDE2LCBtZDUoMTY6OnRleHQpKTsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRl c3RfdGFiIFZBTFVFUyAoMTcsIG1kNSgxNzo6dGV4dCkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJU IElOVE8gdGVzdF90YWIgVkFMVUVTICgxOCwgbWQ1KDE4Ojp0ZXh0KSk7Ci1ST0xMQkFDSzsKLX0p OwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVz dWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVD VCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoN3ww KSwgJ2NoZWNrIHJvbGxiYWNrIHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlcicpOworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiB0 YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKKworJG5vZGVfcHVibGlzaGVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9N IHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScg QU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdo aWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBU SU9OIjsKKworIyBXZSBuZWVkIHRvIGNoZWNrIERFQlVHIGxvZ3MgdG8gZW5zdXJlIHRoYXQgdGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYXMKKyMgYXBwbGllZCB0aGUgdHJhbnNhY3Rpb24uIFNv LCBidW1wIHVwIHRoZSBsb2cgdmVyYm9zaXR5LgorJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2Nv bmYoJ3Bvc3RncmVzcWwuY29uZicsICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7Ciskbm9k ZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisKKyMgUnVuIGEgcXVlcnkgdG8gbWFrZSBzdXJlIHRoYXQg dGhlIHJlbG9hZCBoYXMgdGFrZW4gZWZmZWN0LgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHF7U0VMRUNUIDF9KTsKKwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlz aGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMSk7CiAKICRub2RlX3N1YnNjcmliZXIt PnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsIGIvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbAppbmRleCA5NjJlMzQ3 Mjg4Li5iMzAyMjNkZTUxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTlf c3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAxOV9zdHJlYW1fc3VieGFjdF9kZGxfYWJvcnQucGwKQEAgLTMsNiArMyw5IEBACiAKICMgVGVz dCBzdHJlYW1pbmcgb2YgdHJhbnNhY3Rpb24gd2l0aCBzdWJ0cmFuc2FjdGlvbnMsIERETHMsIERN THMsIGFuZAogIyByb2xsYmFja3MKKyMKKyMgVGhpcyBmaWxlIGlzIG1haW5seSB0byB0ZXN0IHRo ZSBEREwvRE1MIGludGVyYWN0aW9uIG9mIHRoZSBwdWJsaXNoZXIgc2lkZSwKKyMgc28gd2UgZGlk bid0IGFkZCBhIHBhcmFsbGVsIGFwcGx5IHZlcnNpb24gZm9yIHRoZSB0ZXN0cyBpbiB0aGlzIGZp bGUuCiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2Vf Y2FzY2FkZS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRl LnBsCmluZGV4IDhlM2U3NGIxMzQuLmU2MjRlYmU1NWMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsCkBAIC01LDYgKzUsOCBAQAogIwogIyBJ bmNsdWRlcyB0ZXN0cyBmb3Igb3B0aW9ucyAyUEMgKG5vdC1zdHJlYW1pbmcpIGFuZCBhbHNvIGZv ciAyUEMgKHN0cmVhbWluZykuCiAjCisjIFR3by1waGFzZSBhbmQgcGFyYWxsZWwgYXBwbHkgd2ls bCBiZSB0ZXN0ZWQgaW4gMDIzX3R3b3BoYXNlX3N0cmVhbSwgc28gd2UKKyMgZGlkbid0IGFkZCBh IHBhcmFsbGVsIGFwcGx5IHZlcnNpb24gZm9yIHRoZSB0ZXN0cyBpbiB0aGlzIGZpbGUuCiB1c2Ug c3RyaWN0OwogdXNlIHdhcm5pbmdzOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBs IGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbAppbmRleCA3 Y2Q4MDE3NGExLi43NWNhODM3NjVlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAy M190d29waGFzZV9zdHJlYW0ucGwKQEAgLTgsNiArOCwyODkgQEAgdXNlIFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9y ZTsKIAorIyBDaGVjayB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaGFzIGZpbmlzaGVk IGFwcGx5aW5nIHRoZSBzdHJlYW1pbmcKKyMgdHJhbnNhY3Rpb24uCitzdWIgY2hlY2tfcGFyYWxs ZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCwg JHR5cGUpID0gQF87CisKKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJl ci0+d2FpdF9mb3JfbG9nKAorCQkJcXIvREVCVUc6ICggW0EtWjAtOV0rOik/IGZpbmlzaGVkIHBy b2Nlc3NpbmcgdGhlIFNUUkVBTSAkdHlwZSBjb21tYW5kLywKKwkJCSRvZmZzZXQpOworCX0KK30K KworIyBDb21tb24gdGVzdCBzdGVwcyBmb3IgYm90aCB0aGUgc3RyZWFtaW5nPW9uIGFuZCBzdHJl YW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVf cHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9IEBf OworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisJIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgorCSMgMS4gRGF0YSBpcyBz dHJlYW1lZCBhcyBhIDJQQyB0cmFuc2FjdGlvbi4KKwkjIDIuIFRoZW4gZG8gY29tbWl0IHByZXBh cmVkLgorCSMKKwkjIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIg c2lkZSBhZnRlciB0aGUgY29tbWl0LgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAt cyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBjaGVjayB0aGF0IDJQQyBnZXRzIHJl cGxpY2F0ZWQgdG8gc3Vic2NyaWJlcgorCSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21l IHJvd3MuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ CUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9 IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJF IG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWIn O30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKwor CWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxs ZWwsICdQUkVQQVJFJyk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFy ZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCW15ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVk X3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQg b24gc3Vic2NyaWJlcicpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKKwkk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ09NTUlUIFBSRVBBUkVE ICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRl ZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkg RlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDR8NHw0KSwKKwkJJ1Jvd3MgaW5zZXJ0 ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5z IGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVw YXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1p dHRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisJIyBUZXN0IDJQQyBQUkVQQVJFIC8gUk9MTEJBQ0sgUFJFUEFSRUQuCisJIyAxLiBUYWJsZSBp cyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmli ZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KKwkjIDMuIERvIHJvbGxiYWNr IHByZXBhcmVkLgorCSMKKwkjIEV4cGVjdCBkYXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IHRo ZSBvcmlnaW5hbCAyIHJvd3MuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJ IyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxp Y2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVU RSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJl ciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2Zp bGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21lIHJvd3MuCisJJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDMsIDUpIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVS RSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0g MDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFs bGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICdQUkVQQVJF Jyk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24g c3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlz KCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicp OworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVk X3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgor CSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK KwlpcygkcmVzdWx0LCBxcSgyfDJ8MiksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9s bGVkIGJhY2ssIGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzJworCSk7CisKKwkkcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1Qg Y291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwg J3RyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCSMgQ2hlY2sgdGhhdCAyUEMgQ09NTUlUIFBSRVBBUkVEIGlz IGRlY29kZWQgcHJvcGVybHkgb24gY3Jhc2ggcmVzdGFydC4KKwkjIDEuIGluc2VydCwgdXBkYXRl IGFuZCBkZWxldGUgc29tZSByb3dzLgorCSMgMi4gVGhlbiBzZXJ2ZXIgY3Jhc2hlcyBiZWZvcmUg dGhlIDJQQyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCisJIyAzLiBBZnRlciBzZXJ2ZXJzIGFy ZSByZXN0YXJ0ZWQgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgorCSMKKwkj IEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIgc2lkZSBhZnRlciB0 aGUgY29tbWl0LgorCSMgTm90ZTogYm90aCBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZG8gY3Jh c2gvcmVzdGFydC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIENoZWNr IHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vi c2NyaWJlci0+bG9nZmlsZTsKKworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9z dGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBzKGkpOworCQlVUERBVEUgdGVz dF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0 ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3Rf cHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3N1YnNjcmliZXItPnN0b3AoJ2ltbWVkaWF0ZScp OworCSRub2RlX3B1Ymxpc2hlci0+c3RvcCgnaW1tZWRpYXRlJyk7CisKKwkkbm9kZV9wdWJsaXNo ZXItPnN0YXJ0OworCSRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCisJIyBXZSBkb24ndCB0cnkg dG8gY2hlY2sgdGhlIGxvZyBmb3IgcGFyYWxsZWwgb3B0aW9uIGhlcmUgYXMgdGhlIHN1YnNjcmli ZXIKKwkjIG1heSBoYXZlIHN0b3BwZWQgYWZ0ZXIgZmluaXNoaW5nIHRoZSBwcmVwYXJlIGFuZCBi ZWZvcmUgbG9nZ2luZyB0aGUKKwkjIGFwcHJvcHJpYXRlIG1lc3NhZ2UuCisKKwkjIGNvbW1pdCBw b3N0IHRoZSByZXN0YXJ0CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkJIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIGluc2VydHMgYXJl IHZpc2libGUKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRl c3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoNHw0fDQpLAorCQknUm93cyBpbnNlcnRlZCBieSAy UEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFp biBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworCSMgRG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgUk9MTEJBQ0sgUFJF UEFSRUQuCisJIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSBy ZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQ Qy4KKwkjIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUg UFJFUEFSRS4KKwkjIDQuIFRoZW4gZG8gYSBST0xMQkFDSyBQUkVQQVJFRC4KKwkjCisJIyBFeHBl Y3QgdGhlIDJQQyBkYXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IDMgcm93cyBvbiB0aGUgc3Vi c2NyaWJlcgorCSMgKHRoZSBvcmlnaW5hbCAyICsgaW5zZXJ0ZWQgMSkuCisJIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBm b3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwor CisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1z ICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5k IGRlbGV0ZSBzb21lIHJvd3MuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0 Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7CisJCVVQREFURSB0ZXN0 X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRl c3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9w cmVwYXJlZF90YWInO30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0 LCAkaXNfcGFyYWxsZWwsICdQUkVQQVJFJyk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24g aXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVjb3Jk IChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKKwkjIE5vdGU6IHRo ZSAyUEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlz IGluc2VydCBpcyBmb3IgYSBzZXBhcmF0ZSBwcmltYXJ5IGtleQorCSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5 OTk5LCAnZm9vYmFyJykiKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAorCSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJST0xMQkFDSyBQUkVQQVJF RCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVk IG9uIHN1YnNjcmliZXIsCisJIyBidXQgdGhlIGV4dHJhIElOU0VSVCBvdXRzaWRlIG9mIHRoZSAy UEMgc3RpbGwgd2FzIHJlcGxpY2F0ZWQKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChk ID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoM3wzfDMpLAorCQknY2hl Y2sgdGhlIG91dHNpZGUgaW5zZXJ0IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOworCisJJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNU IGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCks ICd0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQg YmVmb3JlIENPTU1JVCBQUkVQQVJFRC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAy IHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMg c3RyZWFtZWQgdXNpbmcgMlBDLgorCSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdo aWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJFLgorCSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJF RC4KKwkjCisJIyBFeHBlY3QgMlBDIGRhdGEgKyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vi c2NyaWJlcgorCSMgKHRoZSAzMzM0ICsgaW5zZXJ0ZWQgMSA9IDMzMzUpLgorCSMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQg Zm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsK KworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAt cyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFu ZCBkZWxldGUgc29tZSByb3dzLgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9z dGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBzKGkpOworCQlVUERBVEUgdGVz dF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0 ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3Rf cHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNl dCwgJGlzX3BhcmFsbGVsLCAnUFJFUEFSRScpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9u IGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlz IHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29y ZCAobm93IHdlIGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCisJIyBOb3RlOiB0 aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhp cyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKKwkkbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5 OTk5OSwgJ2Zvb2JhcicpIik7CisKKwkjIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGNvbW1pdHRlZAor CSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDT01NSVQgUFJFUEFS RUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0 dGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5 KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoNXw1fDUpLAorCQknUm93cyBpbnNl cnRlZCBieSAyUEMgKGFzIHdlbGwgYXMgb3V0c2lkZSBpbnNlcnQpIGhhdmUgY29tbWl0dGVkIG9u IHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJ KTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1 bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKKwor CSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit9CisKICMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgU2V0dXAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKQEAgLTQ4LDYgKzMzMSwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIi KTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKIAkncG9z dGdyZXMnLCAiCiAJQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViCkBAIC02NCwyMzYgKzM1MSwz OCBAQCBteSAkdHdvcGhhc2VfcXVlcnkgPQogJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91 bnRpbCgncG9zdGdyZXMnLCAkdHdvcGhhc2VfcXVlcnkpCiAgIG9yIGRpZSAiVGltZWQgb3V0IHdo aWxlIHdhaXRpbmcgZm9yIHN1YnNjcmliZXIgdG8gZW5hYmxlIHR3b3BoYXNlIjsKIAotIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBDaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGll ZCB0byBzdWJzY3JpYmVyCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBteSAkcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIlNFTEVDVCBj b3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKIGlzKCRy ZXN1bHQsIHFxKDJ8MnwyKSwgJ2NoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNj cmliZXInKTsKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUZXN0IDJQQyBQ UkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgotIyAxLiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBD IHRyYW5zYWN0aW9uLgotIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KLSMKLSMgRXhwZWN0 IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21t aXQuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgY2hlY2sgdGhhdCAyUEMg Z2V0cyByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIKLSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0 ZSBzb21lIHJvd3MuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBx ewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNSkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIg PSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJF IG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7 fSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMg Y2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVy Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEo MSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgMlBDIHRy YW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAotCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKK3Rlc3Rfc3RyZWFtaW5n KCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDApOwogCi0jIGNo ZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50 KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3Vs dCwgcXEoNHw0fDQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBz dWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1p bmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25h bWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7Ci0kcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgLyBST0xMQkFDSyBQUkVQQVJFRC4KLSMg MS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBv biBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4gRG8g cm9sbGJhY2sgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBkYXRhIHJvbGxzIGJhY2sgbGVhdmluZyBv bmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Ci0KLSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSBy ZXBsaWNhdGVkKQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVU RSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUg YW5kIGRlbGV0ZSBzb21lIHJvd3MuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9z dGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNSkgcyhpKTsKLQlVUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBh cmVkX3RhYic7fSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBz dWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJl c3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0K LSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKLQkiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsi KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBj aGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQo KiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0 LCBxcSgyfDJ8MiksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGFyZSByb2xsZWQgYmFjaywgbGVh dmluZyBvbmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MnKTsKLQotJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19w cmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgYWJv cnRlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK LSMgQ2hlY2sgdGhhdCAyUEMgQ09NTUlUIFBSRVBBUkVEIGlzIGRlY29kZWQgcHJvcGVybHkgb24g Y3Jhc2ggcmVzdGFydC4KLSMgMS4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21lIHJvd3Mu Ci0jIDIuIFRoZW4gc2VydmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMgdHJhbnNhY3Rpb24gaXMg Y29tbWl0dGVkLgotIyAzLiBBZnRlciBzZXJ2ZXJzIGFyZSByZXN0YXJ0ZWQgdGhlIHBlbmRpbmcg dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgotIwotIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGlj YXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMgTm90ZTogYm90aCBw dWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZG8gY3Jhc2gvcmVzdGFydC4KLSMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKLQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3Rn cmVzJywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFi IFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3Rh YiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJl ZF90YWInO30pOwotCi0kbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKLSRub2Rl X3B1Ymxpc2hlci0+c3RvcCgnaW1tZWRpYXRlJyk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 Ci0kbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKIAotIyBjb21taXQgcG9zdCB0aGUgcmVzdGFydAot JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ09NTUlUIFBSRVBBUkVE ICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUKLSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCop LCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwg cXEoNHw0fDQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJz Y3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwotKTsKLQot IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBS RVBBUkUgYnV0IGJlZm9yZSBST0xMQkFDSyBQUkVQQVJFRC4KLSMgMS4gVGFibGUgaXMgZGVsZXRl ZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgotIyAy LiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBp cyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJFLgotIyA0LiBUaGVuIGRvIGEgUk9MTEJB Q0sgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCB0aGUgMlBDIGRhdGEgcm9sbHMgYmFjayBsZWF2aW5n IG9ubHkgMyByb3dzIG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0aGUgb3JpZ2luYWwgMiArIGluc2Vy dGVkIDEpLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIEZpcnN0LCBkZWxl dGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKLSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSBy b3dzLgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJ TjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIp IFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwz KSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0k bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRo YXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIEluc2VydCBhIGRpZmZl cmVudCByZWNvcmQgKG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQot IyBOb3RlOiB0aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtl IHN1cmUgdGhpcyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhdGUgcHJpbWFyeSBrZXkKLSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZB TFVFUyAoOTk5OTksICdmb29iYXInKSIpOwotCi0jIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFib3J0 ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlJPTExCQUNLIFBS RVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9y dGVkIG9uIHN1YnNjcmliZXIsCi0jIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhl IDJQQyBzdGlsbCB3YXMgcmVwbGljYXRlZAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChk ID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzfDN8MyksICdjaGVjayB0 aGUgb3V0c2lkZSBpbnNlcnQgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7Ci0KLSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5z YWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCi0jIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENP TU1JVCBQUkVQQVJFRC4KLSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGlj aCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVz aW5nIDJQQy4KLSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVy IHRoZSBQUkVQQVJFLgotIyA0LiBUaGVuIGRvIGEgQ09NTUlUIFBSRVBBUkVELgotIwotIyBFeHBl Y3QgMlBDIGRhdGEgKyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgotIyAodGhl IDMzMzQgKyBpbnNlcnRlZCAxID0gMzMzNSkuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCi0KLSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBi ZSByZXBsaWNhdGVkKQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRh dGUgYW5kIGRlbGV0ZSBzb21lIHJvd3MuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkn cG9zdGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNSkgcyhpKTsKLQlVUERBVEUgdGVz dF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRl c3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3By ZXBhcmVkX3RhYic7fSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBv biBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMo JHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NS SVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOwogCi0jIEluc2VydCBh IGRpZmZlcmVudCByZWNvcmQgKG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0 aW9uKQotIyBOb3RlOiB0aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBz byBtYWtlIHN1cmUgdGhpcyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3Rf dGFiIFZBTFVFUyAoOTk5OTksICdmb29iYXInKSIpOworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1 ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0 YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0 YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdh aXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsK IAotIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWIn OyIpOworIyBXZSBuZWVkIHRvIGNoZWNrIERFQlVHIGxvZ3MgdG8gZW5zdXJlIHRoYXQgdGhlIHBh cmFsbGVsIGFwcGx5IHdvcmtlciBoYXMKKyMgYXBwbGllZCB0aGUgdHJhbnNhY3Rpb24uIFNvLCBi dW1wIHVwIHRoZSBsb2cgdmVyYm9zaXR5LgorJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7Ciskbm9kZV9z dWJzY3JpYmVyLT5yZWxvYWQ7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7CisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFz IHRha2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx e1NFTEVDVCAxfSk7CiAKLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24g c3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRl c3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSg1fDV8NSksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBD IChhcyB3ZWxsIGFzIG91dHNpZGUgaW5zZXJ0KSBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVy LCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwotKTsKLQotJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJh bnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rfc3RyZWFtaW5nKCRu b2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwogCiAjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIGNoZWNrIGFsbCB0aGUgY2xlYW51cApkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAppbmRleCA1MGQ4NmNiMDFiLi4yM2JhZmVjNWY3IDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMTQ3Myw2ICsxNDczLDcgQEAgTG9naWNhbFJlcFJlbElkCiBM b2dpY2FsUmVwUmVsTWFwRW50cnkKIExvZ2ljYWxSZXBSZWxhdGlvbgogTG9naWNhbFJlcFJvbGxi YWNrUHJlcGFyZWRUeG5EYXRhCitMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhCiBMb2dpY2FsUmVw VHVwbGVEYXRhCiBMb2dpY2FsUmVwVHlwCiBMb2dpY2FsUmVwV29ya2VyCkBAIC0xODc2LDYgKzE4 NzcsOSBAQCBQYWdlWExvZ1JlY1B0cgogUGFnZXRhYmxlRW50cnkKIFBhaXJzCiBQYXJhbGxlbEFw cGVuZFN0YXRlCitQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkKK1BhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvCitQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkCiBQYXJhbGxlbEJpdG1hcEhlYXBTdGF0ZQog UGFyYWxsZWxCbG9ja1RhYmxlU2NhbkRlc2MKIFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXIK QEAgLTE4OTUsNiArMTg5OSw3IEBAIFBhcmFsbGVsU2xvdFJlc3VsdEhhbmRsZXIKIFBhcmFsbGVs U3RhdGUKIFBhcmFsbGVsVGFibGVTY2FuRGVzYwogUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YQor UGFyYWxsZWxUcmFuc1N0YXRlCiBQYXJhbGxlbFZhY3V1bVN0YXRlCiBQYXJhbGxlbFdvcmtlckNv bnRleHQKIFBhcmFsbGVsV29ya2VySW5mbwpAQCAtMTkyNCw2ICsxOTI5LDcgQEAgUGFyc2VyU3Rh dGUKIFBhcnRDbGF1c2VJbmZvCiBQYXJ0Q2xhdXNlTWF0Y2hTdGF0dXMKIFBhcnRDbGF1c2VUYXJn ZXQKK1BhcnRpYWxGaWxlU2V0U3RhdGUKIFBhcnRpdGlvbkJvdW5kSW5mbwogUGFydGl0aW9uQm91 bmRJbmZvRGF0YQogUGFydGl0aW9uQm91bmRTcGVjCkBAIC0yNzc0LDYgKzI3ODAsNyBAQCBUb2NF bnRyeQogVG9rZW5BdXhEYXRhCiBUb2tlbml6ZWRBdXRoTGluZQogVHJhY2tJdGVtCitUcmFuc0Fw cGx5QWN0aW9uCiBUcmFuc0ludmFsaWRhdGlvbkluZm8KIFRyYW5zU3RhdGUKIFRyYW5zYWN0aW9u SWQKLS0gCjIuMjMuMC53aW5kb3dzLjEKCg== --_006_OS0PR01MB5716087C537FA8311F208B6094F59OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v73-0002-Add-GUC-stream_serialize_threshold-and-test-seri.patch" Content-Description: v73-0002-Add-GUC-stream_serialize_threshold-and-test-seri.patch Content-Disposition: attachment; filename="v73-0002-Add-GUC-stream_serialize_threshold-and-test-seri.patch"; size=12715; creation-date="Wed, 04 Jan 2023 10:54:25 GMT"; modification-date="Wed, 04 Jan 2023 10:55:31 GMT" Content-Transfer-Encoding: base64 RnJvbSA4YmM1ZjI2NDFlMjM1N2M3NzlmZjczZmRjYzQ3MjJkN2EwYzU0NGNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IEthcGlsYSA8YWthcGlsYUBwb3N0Z3Jlc3FsLm9yZz4K RGF0ZTogTW9uLCAyIEphbiAyMDIzIDE1OjM3OjI1ICswNTMwClN1YmplY3Q6IFtQQVRDSCB2NzMg Mi81XSBBZGQgR1VDIHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkIGFuZCB0ZXN0CiBzZXJpYWxp emluZyBtZXNzYWdlcyB0byBkaXNrLgoKLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAg ICAgICAgICAgICAgICAgICAgfCAgMzIgKysrKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBw bHlwYXJhbGxlbHdvcmtlci5jIHwgIDEyICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jICAgICAgfCAgIDkgKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jICAgICAgICAgICB8ICAxNCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2Vy X2ludGVybmFsLmggICAgIHwgICA0ICsKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJl YW0ucGwgICAgICAgICB8IDE0NCArKysrKysrKysrKysrKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwg MjEyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGEzM2E5MzU3 MGIuLjY2OWJhYmY3ZWIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTExNjUwLDYgKzExNjUwLDM4IEBAIExPRzog IENsZWFuVXBMb2NrOiBkZWxldGluZzogbG9jaygweGI3YWNkODQ0KSBpZCgyNDY4OCwyNDY5Niww LDAsMCwxKQogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAg PHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXN0cmVhbS1zZXJpYWxpemUtdGhyZXNob2xkIiB4cmVmbGFi ZWw9InN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPnN0 cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4p CisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnN0cmVhbV9zZXJp YWxpemVfdGhyZXNob2xkPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFy eT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBGb3JjZXMgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgdG8g c2VyaWFsaXplIG1lc3NhZ2VzIHRvIGZpbGVzIGFmdGVyCisgICAgICAgIHNlbmRpbmcgc3BlY2lm aWVkIGFtb3VudCBvZiBzdHJlYW1pbmcgY2h1bmtzIHRvIHRoZSBwYXJhbGxlbCBhcHBseQorICAg ICAgICB3b3JrZXIuIFNldHRpbmcgdGhpcyB0byB6ZXJvIHNlcmlhbGl6ZSBhbGwgbWVzc2FnZXMu IEEgdmFsdWUgb2YKKyAgICAgICAgPGxpdGVyYWw+LTE8L2xpdGVyYWw+ICh0aGUgZGVmYXVsdCkg ZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiBUaGlzIGlzCisgICAgICAgIGludGVuZGVkIHRvIHRlc3Qg c2VyaWFsaXphdGlvbiB0byBmaWxlcyB3aXRoCisgICAgICAgIDxsaXRlcmFsPnN0cmVhbWluZyA9 IHBhcmFsbGVsPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAg ICAgICAgV2hlbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHN1YnNjcmlwdGlvbiA8bGl0ZXJhbD5zdHJl YW1pbmc8L2xpdGVyYWw+CisgICAgICAgIHBhcmFtZXRlciBpcyBzZXQgdG8gPGxpdGVyYWw+cGFy YWxsZWw8L2xpdGVyYWw+LCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgorICAgICAgICBzZW5kcyBt ZXNzYWdlcyB0byBwYXJhbGxlbCB3b3JrZXJzIHdpdGggYSB0aW1lb3V0LiBCeSBkZWZhdWx0LCB0 aGUKKyAgICAgICAgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxsIHNlcmlhbGl6ZSB0aGUgcmVtYWlu aW5nIG1lc3NhZ2VzIHRvIGZpbGVzIGlmCisgICAgICAgIHRoZSB0aW1lb3V0IGlzIGV4Y2VlZGVk LiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYW55IHZhbHVlIG90aGVyIHRoYW4KKyAgICAgICAg PGxpdGVyYWw+LTE8L2xpdGVyYWw+LCBzZXJpYWxpemUgdG8gZmlsZXMgZXZlbiB3aXRob3V0IHRp bWVvdXQuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgcGFy YW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwv ZmlsZW5hbWU+CisgICAgICAgIGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21tYW5kIGxpbmUuCisg ICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9zZWN0MT4KICAgPHNlY3QxIGlkPSJydW50aW1lLWNv bmZpZy1zaG9ydCI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2FwcGx5cGFyYWxsZWx3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv YXBwbHlwYXJhbGxlbHdvcmtlci5jCmluZGV4IGI5MTg0NWVkOGUuLjU4OTg1Mjc1OTMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdv cmtlci5jCkBAIC0yNTQsNiArMjU0LDkgQEAgc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZv ICpzdHJlYW1fYXBwbHlfd29ya2VyID0gTlVMTDsKIC8qIEEgbGlzdCB0byBtYWludGFpbiBzdWJ0 cmFuc2FjdGlvbnMsIGlmIGFueS4gKi8KIHN0YXRpYyBMaXN0ICpzdWJ4YWN0bGlzdCA9IE5JTDsK IAorLyogR1VDIHZhcmlhYmxlICovCitpbnQJCQlzdHJlYW1fc2VyaWFsaXplX3RocmVzaG9sZCA9 IC0xOworCiBzdGF0aWMgdm9pZCBwYV9mcmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICp3aW5mbyk7CiBzdGF0aWMgUGFyYWxsZWxUcmFuc1N0YXRlIHBhX2dldF94YWN0X3N0 YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQpOwogc3RhdGljIFBhcnRpYWxG aWxlU2V0U3RhdGUgcGFfZ2V0X2ZpbGVzZXRfc3RhdGUodm9pZCk7CkBAIC0xMTQxLDYgKzExNDQs MTUgQEAgcGFfc2VuZF9kYXRhKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU2l6ZSBu Ynl0ZXMsIGNvbnN0IHZvaWQgKmRhdGEpCiAJQXNzZXJ0KCFJc1RyYW5zYWN0aW9uU3RhdGUoKSk7 CiAJQXNzZXJ0KCF3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpOwogCisJLyogRm9yY2UgdG8gc2Vy aWFsaXplIG1lc3NhZ2VzIGlmIHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkIGlzIHJlYWNoZWQu ICovCisJaWYgKHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkICE9IC0xICYmCisJCShzdHJlYW1f c2VyaWFsaXplX3RocmVzaG9sZCA9PSAwIHx8CisJCSBzdHJlYW1fc2VyaWFsaXplX3RocmVzaG9s ZCA8IHBhcmFsbGVsX3N0cmVhbV9uY2h1bmtzKSkKKwl7CisJCXBhcmFsbGVsX3N0cmVhbV9uY2h1 bmtzID0gMDsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogLyoKICAqIFRoaXMgdGltZW91dCBpcyBh IGJpdCBhcmJpdHJhcnkgYnV0IHRlc3RpbmcgcmV2ZWFsZWQgdGhhdCBpdCBpcyBzdWZmaWNpZW50 CiAgKiB0byBzZW5kIHRoZSBtZXNzYWdlIHVubGVzcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy IGlzIHdhaXRpbmcgb24gc29tZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKaW5kZXggMTk3NjdiNGRmYy4uZDYzNDFmOWQ2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3dvcmtlci5jCkBAIC0zMjUsNiArMzI1LDEyIEBAIHN0YXRpYyBUcmFuc2FjdGlv bklkIHN0cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKICAqLwogc3RhdGljIHVpbnQz MiBwYXJhbGxlbF9zdHJlYW1fbmNoYW5nZXMgPSAwOwogCisvKgorICogVGhlIG51bWJlciBvZiBz dHJlYW1pbmcgY2h1bmtzIHNlbnQgYnkgbGVhZGVyIGFwcGx5IHdvcmtlciBkdXJpbmcgb25lCisg KiBzdHJlYW1lZCB0cmFuc2FjdGlvbi4gVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiBzdHJlYW1fc2Vy aWFsaXplX3RocmVzaG9sZCA+IDAuCisgKi8KK3VpbnQzMgkJcGFyYWxsZWxfc3RyZWFtX25jaHVu a3MgPSAwOworCiAvKgogICogV2UgZW5hYmxlIHNraXBwaW5nIGFsbCBkYXRhIG1vZGlmaWNhdGlv biBjaGFuZ2VzIChJTlNFUlQsIFVQREFURSwgZXRjLikgZm9yCiAgKiB0aGUgc3Vic2NyaXB0aW9u IGlmIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24ncyBmaW5pc2ggTFNOIG1hdGNoZXMgdGhlIHN1YnNr aXBsc24uCkBAIC0xNTE5LDYgKzE1MjUsOSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0 cmluZ0luZm8gcykKIAkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKIAkJCUFz c2VydCh3aW5mbyk7CiAKKwkJCWlmIChzdHJlYW1fc2VyaWFsaXplX3RocmVzaG9sZCA+IDApCisJ CQkJcGFyYWxsZWxfc3RyZWFtX25jaHVua3MrKzsKKwogCQkJLyoKIAkJCSAqIE9uY2Ugd2Ugc3Rh cnQgc2VyaWFsaXppbmcgdGhlIGNoYW5nZXMsIHRoZSBwYXJhbGxlbCBhcHBseQogCQkJICogd29y a2VyIHdpbGwgd2FpdCBmb3IgdGhlIGxlYWRlciB0byByZWxlYXNlIHRoZSBzdHJlYW0gbG9jawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA5MjU0NWI0OTU4Li4zMDJjZWI3OTBi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNjEsNiArNjEsNyBAQAogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3Nsb3QuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zeW5jcmVwLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3Iu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xhcmdlX29iamVjdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cGdfc2htZW0uaCIKQEAgLTMwMTQsNiArMzAxNSwxOSBAQCBzdHJ1Y3QgY29uZmlnX2ludCBDb25m aWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsic3Ry ZWFtX3NlcmlhbGl6ZV90aHJlc2hvbGQiLCBQR0NfU0lHSFVQLCBERVZFTE9QRVJfT1BUSU9OUywK KwkJCWdldHRleHRfbm9vcCgiRm9yY2VzIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRvIHNlcmlh bGl6ZSBtZXNzYWdlcyAiCisJCQkJCQkgInRvIGZpbGVzIGFmdGVyIHNlbmRpbmcgc3BlY2lmaWVk IGFtb3VudCBvZiBzdHJlYW1pbmcgIgorCQkJCQkJICJjaHVua3MgaW4gc3RyZWFtaW5nIHBhcmFs bGVsIG1vZGUuIiksCisJCQlnZXR0ZXh0X25vb3AoIkEgdmFsdWUgb2YgLTEgZGlzYWJsZXMgdGhp cyBmZWF0dXJlLiIpLAorCQkJR1VDX05PVF9JTl9TQU1QTEUKKwkJfSwKKwkJJnN0cmVhbV9zZXJp YWxpemVfdGhyZXNob2xkLAorCQktMSwgLTEsIElOVF9NQVgsCisJCU5VTEwsIE5VTEwsIE5VTEwK Kwl9LAorCiAJewogCQl7ImxvZ19yb3RhdGlvbl9hZ2UiLCBQR0NfU0lHSFVQLCBMT0dHSU5HX1dI RVJFLAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJl Zm9yZSBmb3JjaW5nICIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtl cl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgK aW5kZXggZGI4OTFlZWE4YS4uYTY4Mjc5MTQ5MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v d29ya2VyX2ludGVybmFsLmgKQEAgLTIyNSw2ICsyMjUsMTAgQEAgZXh0ZXJuIFBHRExMSU1QT1JU IExvZ2ljYWxSZXBXb3JrZXIgKk15TG9naWNhbFJlcFdvcmtlcjsKIAogZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgaW5fcmVtb3RlX3RyYW5zYWN0aW9uOwogCitleHRlcm4gUEdETExJTVBPUlQgaW50 IHN0cmVhbV9zZXJpYWxpemVfdGhyZXNob2xkOworCitleHRlcm4gUEdETExJTVBPUlQgdWludDMy IHBhcmFsbGVsX3N0cmVhbV9uY2h1bmtzOworCiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtl cl9hdHRhY2goaW50IHNsb3QpOwogZXh0ZXJuIExvZ2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxyZXBf d29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJCQlib29sIG9ubHlf cnVubmluZyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFt LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAppbmRleCA5MWU4YWE4 YzBhLi44M2Q2OTU2ZWU2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVf c3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKQEAg LTEzMywxMyArMTMzLDIwIEBAIHN1YiB0ZXN0X3N0cmVhbWluZwogIyBDcmVhdGUgcHVibGlzaGVy IG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOwotJG5vZGVfcHVibGlzaGVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5j b25mJywKLQknbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSA9IDY0a0InKTsKKyRub2RlX3B1Ymxp c2hlci0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAorbWF4X3ByZXBhcmVk X3RyYW5zYWN0aW9ucyA9IDEwCitsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtID0gNjRrQgorKSk7 CiAkbm9kZV9wdWJsaXNoZXItPnN0YXJ0OwogCiAjIENyZWF0ZSBzdWJzY3JpYmVyIG5vZGUKIG15 ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNj cmliZXInKTsKICRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9n aWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29u ZicsIHFxKAorbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDEwCispKTsKICRub2RlX3N1YnNj cmliZXItPnN0YXJ0OwogCiAjIENyZWF0ZSBzb21lIHByZWV4aXN0aW5nIGNvbnRlbnQgb24gcHVi bGlzaGVyCkBAIC0xNzAsNyArMTc3LDcgQEAgbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CiAjIFRl c3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDUkVBVEUg U1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxp Y2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5n ID0gb24pIgorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxp c2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9w dWIgV0lUSCAoc3RyZWFtaW5nID0gb24sIHR3b19waGFzZSA9IG9uKSIKICk7CiAKICMgV2FpdCBm b3IgaW5pdGlhbCB0YWJsZSBzeW5jIHRvIGZpbmlzaApAQCAtMzEyLDYgKzMxOSwxMzcgQEAgJHJl c3VsdCA9CiAgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIEZST00gdGVzdF90YWJfMiIpOwogaXMoJHJlc3VsdCwgcXEoMTAwMDApLCAnZGF0 YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKIAorIyBD bGVhbiB1cCB0ZXN0IGRhdGEgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFCTEUgdGVzdF90YWJfMiIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBUZXN0IHNlcmlh bGl6aW5nIG1lc3NhZ2VzIHRvIGRpc2sKKworIyBTZXQgc3RyZWFtX3NlcmlhbGl6ZV90aHJlc2hv bGQgdG8gemVybywgc28gdGhlIG1lc3NhZ2VzIHdpbGwgYmUgc2VyaWFsaXplZCB0byBkaXNrLgor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJJ0FMVEVSIFNZU1RFTSBT RVQgc3RyZWFtX3NlcmlhbGl6ZV90aHJlc2hvbGQgPSAwOycpOworJG5vZGVfc3Vic2NyaWJlci0+ cmVsb2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFz IHRha2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx e1NFTEVDVCAxfSk7CisKKyMgU2VyaWFsaXplIHRoZSBDT01NSVQgdHJhbnNhY3Rpb24uCisjIENo ZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9z dWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYl8yIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDUwMDApIHMoaSkiKTsKKworIyBFbnN1cmUgdGhhdCB0aGUgbWVzc2FnZXMgYXJlIHNl cmlhbGl6ZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJcXIvREVCVUc6ICgg W0EtWjAtOV0rOik/IG9wZW5pbmcgZmlsZSAiLipcLmNoYW5nZXMiIGZvciBzdHJlYW1lZCBjaGFu Z2VzLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKKworIyBDaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJz Y3JpYmVyCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYl8yIik7CitpcygkcmVzdWx0LCBxcSg1 MDAwKSwKKwknZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYnkgc2VyaWFsaXppbmcgbWVz c2FnZXMgdG8gZGlzaycpOworCisjIENsZWFuIHVwIHRlc3QgZGF0YSBmcm9tIHRoZSBlbnZpcm9u bWVudC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FURSBU QUJMRSB0ZXN0X3RhYl8yIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWUpOworCisjIFNlcmlhbGl6ZSB0aGUgUFJFUEFSRSB0cmFuc2FjdGlvbi4KKyMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWJfMiBTRUxFQ1QgaSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpOworCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3hhY3Qn OworCX0pOworCisjIEVuc3VyZSB0aGF0IHRoZSBtZXNzYWdlcyBhcmUgc2VyaWFsaXplZC4KKyRu b2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8g b3BlbmluZyBmaWxlICIuKlwuY2hhbmdlcyIgZm9yIHN0cmVhbWVkIGNoYW5nZXMvLAorCSRvZmZz ZXQpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisj IENoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJl cgorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisjIENoZWNr IHRoYXQgMlBDIGdldHMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3hhY3QnOyIpOworCiskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisjIENoZWNrIHRoYXQg dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKyRyZXN1bHQgPQorICAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9N IHRlc3RfdGFiXzIiKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDApLAorCSdkYXRhIHJlcGxpY2F0ZWQg dG8gc3Vic2NyaWJlciBieSBzZXJpYWxpemluZyBtZXNzYWdlcyB0byBkaXNrJyk7CisKKyMgQ2xl YW4gdXAgdGVzdCBkYXRhIGZyb20gdGhlIGVudmlyb25tZW50LgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIFRBQkxFIHRlc3RfdGFiXzIiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyMgU2VyaWFsaXplIHRo ZSBBQk9SVCB0b3AtdHJhbnNhY3Rpb24uCisjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9t IG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiXzIgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkg cyhpKTsKKwlST0xMQkFDSzsKKwl9KTsKKworIyBFbnN1cmUgdGhhdCB0aGUgbWVzc2FnZXMgYXJl IHNlcmlhbGl6ZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJcXIvREVCVUc6 ICggW0EtWjAtOV0rOik/IG9wZW5pbmcgZmlsZSAiLipcLmNoYW5nZXMiIGZvciBzdHJlYW1lZCBj aGFuZ2VzLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKKworIyBDaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vi c2NyaWJlcgorJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWJfMiIpOworaXMoJHJlc3VsdCwgcXEo MCksCisJJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGJ5IHNlcmlhbGl6aW5nIG1lc3Nh Z2VzIHRvIGRpc2snKTsKKworIyBDbGVhbiB1cCB0ZXN0IGRhdGEgZnJvbSB0aGUgZW52aXJvbm1l bnQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgVEFC TEUgdGVzdF90YWJfMiIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworIyBTZXJpYWxpemUgdGhlIEFCT1JUIHN1Yi10cmFuc2FjdGlvbi4KKyMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWJfMiBTRUxFQ1QgaSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpOworCVNBVkVQT0lOVCBzcDsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYl8yIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsIDEwMDAwKSBz KGkpOworCVJPTExCQUNLIFRPIHNwOworCUNPTU1JVDsKKwl9KTsKKworIyBFbnN1cmUgdGhhdCB0 aGUgbWVzc2FnZXMgYXJlIHNlcmlhbGl6ZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9s b2coCisJcXIvREVCVUc6ICggW0EtWjAtOV0rOik/IG9wZW5pbmcgZmlsZSAiLipcLmNoYW5nZXMi IGZvciBzdHJlYW1lZCBjaGFuZ2VzLywKKwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBDaGVjayB0aGF0IG9ubHkgc3ViLXRyYW5z YWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlci4KKyRyZXN1bHQgPQorICAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3Rf dGFiXzIiKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDApLAorCSdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vi c2NyaWJlciBieSBzZXJpYWxpemluZyBtZXNzYWdlcyB0byBkaXNrJyk7CisKICRub2RlX3N1YnNj cmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CiAKLS0gCjIuMjMuMC53aW5kb3dz LjEKCg== --_006_OS0PR01MB5716087C537FA8311F208B6094F59OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v73-0003-Stop-extra-worker-if-GUC-was-changed.patch" Content-Description: v73-0003-Stop-extra-worker-if-GUC-was-changed.patch Content-Disposition: attachment; filename="v73-0003-Stop-extra-worker-if-GUC-was-changed.patch"; size=4230; creation-date="Wed, 04 Jan 2023 10:54:25 GMT"; modification-date="Wed, 04 Jan 2023 10:55:32 GMT" Content-Transfer-Encoding: base64 RnJvbSBjYTdkNGFiNzYwZDk5NDJjMjBjZDUwZDhjMjllNjVhNzE3ZmNkMDc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzaGVybG9ja2NwcCA8c2hlcmxvY2tjcHBAZm94bWFpbC5jb20+ CkRhdGU6IFNhdCwgMTcgRGVjIDIwMjIgMjA6NDM6MjEgKzA4MDAKU3ViamVjdDogW1BBVENIIHY3 MyAzLzVdIFN0b3AgZXh0cmEgd29ya2VyIGlmIEdVQyB3YXMgY2hhbmdlZAoKSWYgdGhlIG1heF9w YXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gaXMgY2hhbmdlZCB0byBhCmxv d2VyIHZhbHVlLCB0cnkgdG8gc3RvcCBmcmVlIHdvcmtlcnMgaW4gdGhlIHBvb2wgdG8ga2VlcCB0 aGUgbnVtYmVyIG9mCndvcmtlcnMgbG93ZXIgdGhhbiBoYWxmIG9mIHRoZSBtYXhfcGFyYWxsZWxf YXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uCi0tLQogLi4uL3JlcGxpY2F0aW9uL2xvZ2lj YWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIHwgNjAgKysrKysrKysrKysrKysrLS0tLQogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgIDcgKysrCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCAgICAgfCAgMSArCiAzIGZpbGVzIGNo YW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKaW5kZXgg NTg5ODUyNzU5My4uMjRiMzk2ZDkwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTU0MCw2ICs1NDAsMjUgQEAg cGFfZmluZF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8q CisgKiBTdG9wIHRoZSBnaXZlbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgYW5kIGZyZWUgdGhlIGNv cnJlc3BvbmRpbmcgaW5mby4KKyAqLworc3RhdGljIHZvaWQKK3BhX3N0b3Bfd29ya2VyKFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKK3sKKwlpbnQJCQlzbG90X25vOworCXVpbnQxNgkJ Z2VuZXJhdGlvbjsKKworCVNwaW5Mb2NrQWNxdWlyZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOwor CWdlbmVyYXRpb24gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9nZW5lcmF0aW9u OworCXNsb3Rfbm8gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90X25vOwor CVNwaW5Mb2NrUmVsZWFzZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCisJbG9naWNhbHJlcF9w YV93b3JrZXJfc3RvcChzbG90X25vLCBnZW5lcmF0aW9uKTsKKworCXBhX2ZyZWVfd29ya2VyX2lu Zm8od2luZm8pOworfQorCiAvKgogICogTWFrZXMgdGhlIHdvcmtlciBhdmFpbGFibGUgZm9yIHJl dXNlLgogICoKQEAgLTU3NSwyMyArNTk0LDQyIEBAIHBhX2ZyZWVfd29ya2VyKFBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbykKIAkJbGlzdF9sZW5ndGgoUGFyYWxsZWxBcHBseVdvcmtlclBv b2wpID4KIAkJKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gLyAy KSkKIAl7Ci0JCWludAkJCXNsb3Rfbm87Ci0JCXVpbnQxNgkJZ2VuZXJhdGlvbjsKLQotCQlTcGlu TG9ja0FjcXVpcmUoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKLQkJZ2VuZXJhdGlvbiA9IHdpbmZv LT5zaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX2dlbmVyYXRpb247Ci0JCXNsb3Rfbm8gPSB3aW5m by0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90X25vOwotCQlTcGluTG9ja1JlbGVhc2Uo JndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKwkJcGFfc3RvcF93b3JrZXIod2luZm8pOworCQlyZXR1 cm47CisJfQogCi0JCWxvZ2ljYWxyZXBfcGFfd29ya2VyX3N0b3Aoc2xvdF9ubywgZ2VuZXJhdGlv bik7CisJd2luZm8tPmluX3VzZSA9IGZhbHNlOworCXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9 IGZhbHNlOworfQogCi0JCXBhX2ZyZWVfd29ya2VyX2luZm8od2luZm8pOworLyoKKyAqIFRyeSB0 byBzdG9wIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgdGhhdCBhcmUgbm90IGluIHVzZSB0byBrZWVw IHRoZSBudW1iZXIgb2YKKyAqIHdvcmtlcnMgbG93ZXIgdGhhbiBoYWxmIG9mIHRoZSBtYXhfcGFy YWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLgorICovCit2b2lkCitwYV9zdG9w X2lkbGVfd29ya2Vycyh2b2lkKQoreworCUxpc3QJICAgKmFjdGl2ZV93b3JrZXJzOworCUxpc3RD ZWxsICAgKmxjOworCWludAkJCW1heF9hcHBseXdvcmtlcnMgPSBtYXhfcGFyYWxsZWxfYXBwbHlf d29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIC8gMjsKIAorCWlmIChsaXN0X2xlbmd0aChQYXJhbGxl bEFwcGx5V29ya2VyUG9vbCkgPD0gbWF4X2FwcGx5d29ya2VycykKIAkJcmV0dXJuOworCisJYWN0 aXZlX3dvcmtlcnMgPSBsaXN0X2NvcHkoUGFyYWxsZWxBcHBseVdvcmtlclBvb2wpOworCisJZm9y ZWFjaChsYywgYWN0aXZlX3dvcmtlcnMpCisJeworCQlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAq d2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgbGZpcnN0KGxjKTsKKworCQlwYV9z dG9wX3dvcmtlcih3aW5mbyk7CisKKwkJLyogUmVjaGVjayB0aGUgbnVtYmVyIG9mIHdvcmtlcnMu ICovCisJCWlmIChsaXN0X2xlbmd0aChQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCkgPD0gbWF4X2Fw cGx5d29ya2VycykKKwkJCWJyZWFrOwogCX0KIAotCXdpbmZvLT5pbl91c2UgPSBmYWxzZTsKLQl3 aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSBmYWxzZTsKKwlsaXN0X2ZyZWUoYWN0aXZlX3dvcmtl cnMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5k ZXggZDYzNDFmOWQ2NS4uOTgyOTk2NGFkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCkBAIC0zNjM2LDYgKzM2MzYsMTMgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChY TG9nUmVjUHRyIGxhc3RfcmVjZWl2ZWQpCiAJCXsKIAkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBm YWxzZTsKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOworCisJCQkvKgorCQkJICog VHJ5IHRvIHN0b3AgZnJlZSB3b3JrZXJzIGluIHRoZSBwb29sIGluIGNhc2UgdGhlCisJCQkgKiBt YXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIGlzIGNoYW5nZWQgdG8g YQorCQkJICogbG93ZXIgdmFsdWUuCisJCQkgKi8KKwkJCXBhX3N0b3BfaWRsZV93b3JrZXJzKCk7 CiAJCX0KIAogCQlpZiAocmMgJiBXTF9USU1FT1VUKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaAppbmRleCBhNjgyNzkxNDkwLi5mM2IyZjJkZTMxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApAQCAtMjc4LDYgKzI3OCw3IEBAIGV4 dGVybiB2b2lkIHNldF9hcHBseV9lcnJvcl9jb250ZXh0X29yaWdpbihjaGFyICpvcmlnaW5uYW1l KTsKIC8qIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBzZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCiBl eHRlcm4gdm9pZCBwYV9hbGxvY2F0ZV93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJu IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICpwYV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhp ZCk7CitleHRlcm4gdm9pZCBwYV9zdG9wX2lkbGVfd29ya2Vycyh2b2lkKTsKIGV4dGVybiB2b2lk IHBhX2RldGFjaF9hbGxfZXJyb3JfbXEodm9pZCk7CiAKIGV4dGVybiBib29sIHBhX3NlbmRfZGF0 YShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFNpemUgbmJ5dGVzLAotLSAKMi4yMy4w LndpbmRvd3MuMQoK --_006_OS0PR01MB5716087C537FA8311F208B6094F59OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v73-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch" Content-Description: v73-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch Content-Disposition: attachment; filename="v73-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch"; size=21643; creation-date="Wed, 04 Jan 2023 10:54:25 GMT"; modification-date="Wed, 04 Jan 2023 10:55:33 GMT" Content-Transfer-Encoding: base64 RnJvbSAxMDZjNDlhNzQzNDY5ZDM2YjQxNjhlNGJlYTk3MDQzZWYwOGNjMGEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb3UgWmhpamllIDxob3V6ai5mbnN0QGNuLmZ1aml0c3UuY29t PgpEYXRlOiBTdW4sIDExIERlYyAyMDIyIDE5OjE2OjM0ICswODAwClN1YmplY3Q6IFtQQVRDSCB2 NzMgNC81XSBSZXRyeSB0byBhcHBseSBzdHJlYW1pbmcgeGFjdCBvbmx5IGluIGFwcGx5IHdvcmtl cgoKV2hlbiB0aGUgc3Vic2NyaXB0aW9uIHBhcmFtZXRlciBpcyBzZXQgc3RyZWFtaW5nPXBhcmFs bGVsLCB0aGUgbG9naWMgdHJpZXMgdG8KYXBwbHkgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB1 c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSWYgdGhpcwpmYWlscyB0aGUgcGFyYWxsZWwg d29ya2VyIGV4aXRzIHdpdGggYW4gZXJyb3IuCgpJbiB0aGlzIGNhc2UsIHJldHJ5IGFwcGx5aW5n IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIG5vcm1hbApzdHJlYW1pbmc9b24g bW9kZS4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIGdldHRpbmcgY2F1Z2h0IGluIGEgbG9vcCBvZiB0 aGUgc2FtZQpyZXRyeSBlcnJvcnMuCgpBIG5ldyBmbGFnIGZpZWxkICJzdWJyZXRyeSIgaGFzIGJl ZW4gaW50cm9kdWNlZCB0byBjYXRhbG9nICJwZ19zdWJzY3JpcHRpb24iLgpJZiB0aGVyZSBhcmUg YW55IGFjdGl2ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGFuZCB0aGUgc3Vic2NyaWJlciBleGl0 cyB3aXRoIGFuCmVycm9yLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdHJ1ZSwgYW5kIHdoZW5ldmVy IHRoZSB0cmFuc2FjdGlvbiBpcyBhcHBsaWVkCnN1Y2Nlc3NmdWxseSwgdGhpcyBmbGFnIGlzIHJl c2V0IGZhbHNlLgpOb3csIHdoZW4gZGVjaWRpbmcgaG93IHRvIGFwcGx5IGEgc3RyZWFtaW5nIHRy YW5zYWN0aW9uLCB0aGUgbG9naWMgY2FuIGtub3cgaWYKdGhpcyB0cmFuc2FjdGlvbiBoYXMgcHJl dmlvdXNseSBmYWlsZWQgb3Igbm90IChieSBjaGVja2luZyB0aGUgInN1YnJldHJ5IgpmaWVsZCku CgpOb3RlOiBTaW5jZSB3ZSBhZGQgYSBuZXcgZmllbGQgJ3N1YnJldHJ5JyB0byBjYXRhbG9nICdw Z19zdWJzY3JpcHRpb24nIGhhcyBiZWVuCmV4cGFuZGVkLCB3ZSBuZWVkIGJ1bXAgY2F0YWxvZyB2 ZXJzaW9uLgotLS0KIGRvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAg ICB8ICAxMCArCiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgICAg fCAgMTEgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sICAgICB8 ICAgNSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5jICAgICAgICAgfCAg IDEgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgICAgICAgfCAgIDEg KwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIHwgIDMwICsr Kwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMTgyICsr KysrKysrKysrKystLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAg ICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oICAg ICAgICAgfCAgIDcgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgg ICAgIHwgICAyICsKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwgICAgICAg ICB8ICA2MyArKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDI2MyBpbnNlcnRpb25zKCspLCA1NiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2Rv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IGMxZTQwNDgwNTQuLmQ5MTgzMjdlYzIgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9j YXRhbG9ncy5zZ21sCkBAIC03OTQ4LDYgKzc5NDgsMTYgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFj ZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+ JmwKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8cm93PgorICAg ICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9k ZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+c3VicmV0cnk8L3N0cnVjdGZpZWxkPiA8 dHlwZT5ib29sPC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVHJ1 ZSBpZiBwcmV2aW91cyBjaGFuZ2UgZmFpbGVkIHRvIGJlIGFwcGxpZWQgd2hpbGUgdGhlcmUgd2Vy ZSBhbnkKKyAgICAgICBhY3RpdmUgcGFyYWxsZWwgYXBwbHkgd29ya2VycywgbmVjZXNzaXRhdGlu ZyBhIHJldHJ5LgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCiAgICAgIDxy b3c+CiAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0i Y29sdW1uX2RlZmluaXRpb24iPgogICAgICAgIDxzdHJ1Y3RmaWVsZD5zdWJjb25uaW5mbzwvc3Ry dWN0ZmllbGQ+IDx0eXBlPnRleHQ8L3R5cGU+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9n aWNhbC1yZXBsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24u c2dtbAppbmRleCA1NGY0OGJlODdmLi5jYjRmNWM2ZjE5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJl cGxpY2F0aW9uLnNnbWwKQEAgLTE1MDQsMTIgKzE1MDQsMTEgQEAgQ09OVEVYVDogIHByb2Nlc3Np bmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiAicGdfMTYzOTUiIGR1cmluZyAi SU5TRVIKIAogICA8cGFyYT4KICAgIFdoZW4gdGhlIHN0cmVhbWluZyBtb2RlIGlzIDxsaXRlcmFs PnBhcmFsbGVsPC9saXRlcmFsPiwgdGhlIGZpbmlzaCBMU04gb2YKLSAgIGZhaWxlZCB0cmFuc2Fj dGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIEluIHRoYXQgY2FzZSwgaXQgbWF5IGJlIG5lY2Vzc2Fy eSB0bwotICAgY2hhbmdlIHRoZSBzdHJlYW1pbmcgbW9kZSB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJh bD4gb3IgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiBhbmQKLSAgIGNhdXNlIHRoZSBzYW1lIGNvbmZs aWN0cyBhZ2FpbiBzbyB0aGUgZmluaXNoIExTTiBvZiB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIHdp bGwKLSAgIGJlIHdyaXR0ZW4gdG8gdGhlIHNlcnZlciBsb2cuIEZvciB0aGUgdXNhZ2Ugb2YgZmlu aXNoIExTTiwgcGxlYXNlIHJlZmVyIHRvIDxsaW5rCi0gICBsaW5rZW5kPSJzcWwtYWx0ZXJzdWJz Y3JpcHRpb24iPjxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4KLSAgIFNLSVA8L2NvbW1h bmQ+PC9saW5rPi4KKyAgIGZhaWxlZCB0cmFuc2FjdGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIElu IHRoYXQgY2FzZSwgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbgorICAgd2lsbCBiZSByZXRyaWVkIGlu IDxsaXRlcmFsPnN0cmVhbWluZyA9IG9uPC9saXRlcmFsPiBtb2RlLiBJZiBpdCBmYWlscworICAg YWdhaW4sIHRoZSBmaW5pc2ggTFNOIG9mIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSB3 cml0dGVuIHRvIHRoZQorICAgc2VydmVyIGxvZy4gRm9yIHRoZSB1c2FnZSBvZiBmaW5pc2ggTFNO LCBwbGVhc2UgcmVmZXIgdG8KKyAgIDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlv biI+PGNvbW1hbmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBTS0lQPC9jb21tYW5kPjwvbGluaz4u CiAgIDwvcGFyYT4KICA8L3NlY3QxPgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV9zdWJzY3JpcHRpb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlw dGlvbi5zZ21sCmluZGV4IGViYTcyYzZhZjYuLmRlY2Q1NTQ0NTcgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCkBAIC0yNTEsNiArMjUxLDExIEBAIENSRUFURSBT VUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnN1YnNjcmlwdGlvbl9u YW1lPC9yZXBsYWNlYWJsCiAgICAgICAgICAgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLiBOb3Rl IHRoYXQgaWYgYW4gZXJyb3IgaGFwcGVucyBpbiBhCiAgICAgICAgICAgcGFyYWxsZWwgYXBwbHkg d29ya2VyLCB0aGUgZmluaXNoIExTTiBvZiB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uCiAgICAgICAg ICAgbWlnaHQgbm90IGJlIHJlcG9ydGVkIGluIHRoZSBzZXJ2ZXIgbG9nLgorICAgICAgICAgIFdo ZW4gYXBwbHlpbmcgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucywgaWYgYSBkZWFkbG9jayBpcyBkZXRl Y3RlZCwgdGhlCisgICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgZXhpdCB3aXRo IGFuIGVycm9yLiBUaGUKKyAgICAgICAgICA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJhbD4gbW9k ZSBpcyBkaXNyZWdhcmRlZCB3aGVuIHJldHJ5aW5nOworICAgICAgICAgIGluc3RlYWQgdGhlIHRy YW5zYWN0aW9uIHdpbGwgYmUgYXBwbGllZCB1c2luZyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4KKyAg ICAgICAgICBtb2RlLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAg ICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19z dWJzY3JpcHRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMKaW5k ZXggYTU2YWUzMTFjMy4uMGViNWZmYjNlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19zdWJzY3JpcHRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlw dGlvbi5jCkBAIC03MSw2ICs3MSw3IEBAIEdldFN1YnNjcmlwdGlvbihPaWQgc3ViaWQsIGJvb2wg bWlzc2luZ19vaykKIAlzdWItPnN0cmVhbSA9IHN1YmZvcm0tPnN1YnN0cmVhbTsKIAlzdWItPnR3 b3BoYXNlc3RhdGUgPSBzdWJmb3JtLT5zdWJ0d29waGFzZXN0YXRlOwogCXN1Yi0+ZGlzYWJsZW9u ZXJyID0gc3ViZm9ybS0+c3ViZGlzYWJsZW9uZXJyOworCXN1Yi0+cmV0cnkgPSBzdWJmb3JtLT5z dWJyZXRyeTsKIAogCS8qIEdldCBjb25uaW5mbyAqLwogCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRy KFNVQlNDUklQVElPTk9JRCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVt X3ZpZXdzLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAppbmRleCA0 NDdjOWI5NzBmLi5hZjA3Njg0YjIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV92aWV3cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs CkBAIC0xMzAxLDcgKzEzMDEsNyBAQCBSRVZPS0UgQUxMIE9OIHBnX3JlcGxpY2F0aW9uX29yaWdp bl9zdGF0dXMgRlJPTSBwdWJsaWM7CiBSRVZPS0UgQUxMIE9OIHBnX3N1YnNjcmlwdGlvbiBGUk9N IHB1YmxpYzsKIEdSQU5UIFNFTEVDVCAob2lkLCBzdWJkYmlkLCBzdWJza2lwbHNuLCBzdWJuYW1l LCBzdWJvd25lciwgc3ViZW5hYmxlZCwKICAgICAgICAgICAgICAgc3ViYmluYXJ5LCBzdWJzdHJl YW0sIHN1YnR3b3BoYXNlc3RhdGUsIHN1YmRpc2FibGVvbmVyciwKLSAgICAgICAgICAgICAgc3Vi c2xvdG5hbWUsIHN1YnN5bmNjb21taXQsIHN1YnB1YmxpY2F0aW9ucywgc3Vib3JpZ2luKQorICAg ICAgICAgICAgICBzdWJyZXRyeSwgc3Vic2xvdG5hbWUsIHN1YnN5bmNjb21taXQsIHN1YnB1Ymxp Y2F0aW9ucywgc3Vib3JpZ2luKQogICAgIE9OIHBnX3N1YnNjcmlwdGlvbiBUTyBwdWJsaWM7CiAK IENSRUFURSBWSUVXIHBnX3N0YXRfc3Vic2NyaXB0aW9uX3N0YXRzIEFTCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggYmMxYjE5ODU4Yy4uODM2N2JjNmY0ZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtNjM1LDYgKzYzNSw3IEBA IENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlv blN0bXQgKnN0bXQsCiAJCQkJCSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX1BFTkRJTkcgOgog CQkJCQkgTE9HSUNBTFJFUF9UV09QSEFTRV9TVEFURV9ESVNBQkxFRCk7CiAJdmFsdWVzW0FudW1f cGdfc3Vic2NyaXB0aW9uX3N1YmRpc2FibGVvbmVyciAtIDFdID0gQm9vbEdldERhdHVtKG9wdHMu ZGlzYWJsZW9uZXJyKTsKKwl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3VicmV0cnkgLSAx XSA9IEJvb2xHZXREYXR1bShmYWxzZSk7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1 YmNvbm5pbmZvIC0gMV0gPQogCQlDU3RyaW5nR2V0VGV4dERhdHVtKGNvbm5pbmZvKTsKIAlpZiAo b3B0cy5zbG90X25hbWUpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCmluZGV4IDI0YjM5NmQ5MDguLjg2NTNhN2ZhY2YgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdv cmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxl bHdvcmtlci5jCkBAIC0zMTAsNiArMzEwLDE3IEBAIHBhX2Nhbl9zdGFydCh2b2lkKQogCWlmICgh QWxsVGFibGVzeW5jc1JlYWR5KCkpCiAJCXJldHVybiBmYWxzZTsKIAorCS8qCisJICogRG9uJ3Qg dXNlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgZm9yIHJldHJpZXMsIGJlY2F1c2UgaXQgaXMgcG9z c2libGUKKwkgKiB0aGF0IGEgZGVhZGxvY2sgd2FzIGRldGVjdGVkIHRoZSBsYXN0IHRpbWUgd2Ug dHJpZWQgdG8gYXBwbHkgYQorCSAqIHRyYW5zYWN0aW9uIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkg d29ya2VyLgorCSAqLworCWlmIChNeVN1YnNjcmlwdGlvbi0+cmV0cnkpCisJeworCQllbG9nKERF QlVHMSwgInBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYXJlIG5vdCB1c2VkIGZvciByZXRyaWVzIik7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY3MCwzICsx NjgxLDIyIEBAIHBhX3hhY3RfZmluaXNoKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywg WExvZ1JlY1B0ciByZW1vdGVfbHNuKQogCiAJcGFfZnJlZV93b3JrZXIod2luZm8pOwogfQorCisv KiBDaGVjayBpZiBhbnkgYWN0aXZlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICovCitib29sCitw YV9oYXZlX2FjdGl2ZV93b3JrZXIodm9pZCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVh Y2gobGMsIFBhcmFsbGVsQXBwbHlXb3JrZXJQb29sKQorCXsKKwkJUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKnRtcF93aW5mbzsKKworCQl0bXBfd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKikgbGZpcnN0KGxjKTsKKworCQlpZiAodG1wX3dpbmZvLT5pbl91c2UpCisJCQlyZXR1cm4g dHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC93b3JrZXIuYwppbmRleCA5ODI5OTY0YWQzLi5hNWFkNzA0YTNlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTM5Miw3ICszOTIsNyBAQCBzdGF0aWMg dm9pZCBzdHJlYW1fY2xvc2VfZmlsZSh2b2lkKTsKIAogc3RhdGljIHZvaWQgc2VuZF9mZWVkYmFj ayhYTG9nUmVjUHRyIHJlY3Zwb3MsIGJvb2wgZm9yY2UsIGJvb2wgcmVxdWVzdFJlcGx5KTsKIAot c3RhdGljIHZvaWQgRGlzYWJsZVN1YnNjcmlwdGlvbkFuZEV4aXQodm9pZCk7CitzdGF0aWMgdm9p ZCBEaXNhYmxlU3Vic2NyaXB0aW9uT25FcnJvcih2b2lkKTsKIAogc3RhdGljIHZvaWQgYXBwbHlf aGFuZGxlX2NvbW1pdF9pbnRlcm5hbChMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEp Owogc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX2luc2VydF9pbnRlcm5hbChBcHBseUV4ZWN1dGlv bkRhdGEgKmVkYXRhLApAQCAtNDI5LDYgKzQyOSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNl dF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8odm9pZCk7CiBzdGF0aWMgVHJhbnNBcHBseUFjdGlv biBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJ CQkJCQkJCSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKndpbmZvKTsKIAorc3RhdGljIHZvaWQg c2V0X3N1YnNjcmlwdGlvbl9yZXRyeShib29sIHJldHJ5KTsKKwogLyoKICAqIFJldHVybiB0aGUg bmFtZSBvZiB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIuCiAgKi8KQEAgLTEwNDQsNiAr MTA0Niw5IEBAIGFwcGx5X2hhbmRsZV9jb21taXQoU3RyaW5nSW5mbyBzKQogCS8qIFByb2Nlc3Mg YW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCiAJ cHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0YS5lbmRfbHNuKTsKIAorCS8qIFJlc2V0 IHRoZSByZXRyeSBmbGFnLiAqLworCXNldF9zdWJzY3JpcHRpb25fcmV0cnkoZmFsc2UpOworCiAJ cGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKIAlyZXNldF9hcHBseV9l cnJvcl9jb250ZXh0X2luZm8oKTsKIH0KQEAgLTExNTAsNiArMTE1NSw5IEBAIGFwcGx5X2hhbmRs ZV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNl OwogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICovCisJc2V0X3N1YnNjcmlwdGlvbl9yZXRy eShmYWxzZSk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hy b25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMocHJlcGFyZV9k YXRhLmVuZF9sc24pOwogCkBAIC0xMjA2LDYgKzEyMTQsOSBAQCBhcHBseV9oYW5kbGVfY29tbWl0 X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2Rh dGEuZW5kX2xzbiwgWGFjdExhc3RDb21taXRFbmQpOwogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9 IGZhbHNlOwogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICovCisJc2V0X3N1YnNjcmlwdGlv bl9yZXRyeShmYWxzZSk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcg c3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMocHJl cGFyZV9kYXRhLmVuZF9sc24pOwogCkBAIC0xMjY3LDYgKzEyNzgsOSBAQCBhcHBseV9oYW5kbGVf cm9sbGJhY2tfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHJv bGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbiwgWGFjdExhc3RDb21taXRFbmQpOwogCWluX3Jl bW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICov CisJc2V0X3N1YnNjcmlwdGlvbl9yZXRyeShmYWxzZSk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJs ZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nf c3luY2luZ190YWJsZXMocm9sbGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuKTsKIApAQCAtMTM5 Miw2ICsxNDA2LDkgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykK IAkJCWJyZWFrOwogCX0KIAorCS8qIFJlc2V0IHRoZSByZXRyeSBmbGFnLiAqLworCXNldF9zdWJz Y3JpcHRpb25fcmV0cnkoZmFsc2UpOworCiAJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAog CS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFy YWxsZWwuICovCkBAIC0xOTYyLDYgKzE5NzksMTAgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9y dChTdHJpbmdJbmZvIHMpCiAJCQlicmVhazsKIAl9CiAKKwkvKiBSZXNldCB0aGUgcmV0cnkgZmxh Zy4gKi8KKwlpZiAodG9wbGV2ZWxfeGFjdCkKKwkJc2V0X3N1YnNjcmlwdGlvbl9yZXRyeShmYWxz ZSk7CisKIAlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIH0KIApAQCAtMjI0NCw2 ICsyMjY1LDkgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQogCS8q IFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxs ZWwuICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0YS5lbmRfbHNuKTsKIAor CS8qIFJlc2V0IHRoZSByZXRyeSBmbGFnLiAqLworCXNldF9zdWJzY3JpcHRpb25fcmV0cnkoZmFs c2UpOworCiAJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKIAogCXJl c2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwpAQCAtNDM0NSwyMCArNDM2OSwyOCBAQCBz dGFydF90YWJsZV9zeW5jKFhMb2dSZWNQdHIgKm9yaWdpbl9zdGFydHBvcywgY2hhciAqKm15c2xv dG5hbWUpCiAJfQogCVBHX0NBVENIKCk7CiAJeworCQkvKgorCQkgKiBFbWl0IHRoZSBlcnJvciBt ZXNzYWdlLCBhbmQgcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBzdGF0ZSB0byBhbiBpZGxlCisJCSAq IHN0YXRlCisJCSAqLworCQlIT0xEX0lOVEVSUlVQVFMoKTsKKworCQlFbWl0RXJyb3JSZXBvcnQo KTsKKwkJQWJvcnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7CisJCUZsdXNoRXJyb3JTdGF0ZSgpOwor CisJCVJFU1VNRV9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVk IGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24gKi8KKwkJcGdzdGF0X3JlcG9ydF9zdWJzY3Jp cHRpb25fZXJyb3IoTXlTdWJzY3JpcHRpb24tPm9pZCwgZmFsc2UpOworCiAJCWlmIChNeVN1YnNj cmlwdGlvbi0+ZGlzYWJsZW9uZXJyKQotCQkJRGlzYWJsZVN1YnNjcmlwdGlvbkFuZEV4aXQoKTsK LQkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVkIGR1cmlu ZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uIEFib3J0Ci0JCQkgKiB0aGUgY3VycmVudCB0cmFuc2Fj dGlvbiBzbyB0aGF0IHRoZSBzdGF0cyBtZXNzYWdlIGlzIHNlbnQgaW4gYW4KLQkJCSAqIGlkbGUg c3RhdGUuCi0JCQkgKi8KLQkJCUFib3J0T3V0T2ZBbnlUcmFuc2FjdGlvbigpOwotCQkJcGdzdGF0 X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3IoTXlTdWJzY3JpcHRpb24tPm9pZCwgZmFsc2UpOwor CQkJRGlzYWJsZVN1YnNjcmlwdGlvbk9uRXJyb3IoKTsKIAotCQkJUEdfUkVfVEhST1coKTsKLQkJ fQorCQkvKiBTZXQgdGhlIHJldHJ5IGZsYWcuICovCisJCXNldF9zdWJzY3JpcHRpb25fcmV0cnko dHJ1ZSk7CisKKwkJcHJvY19leGl0KDApOwogCX0KIAlQR19FTkRfVFJZKCk7CiAKQEAgLTQzODMs MjAgKzQ0MTUsMjcgQEAgc3RhcnRfYXBwbHkoWExvZ1JlY1B0ciBvcmlnaW5fc3RhcnRwb3MpCiAJ fQogCVBHX0NBVENIKCk7CiAJeworCQkvKgorCQkgKiBFbWl0IHRoZSBlcnJvciBtZXNzYWdlLCBh bmQgcmVjb3ZlciBmcm9tIHRoZSBlcnJvciBzdGF0ZSB0byBhbiBpZGxlCisJCSAqIHN0YXRlCisJ CSAqLworCQlIT0xEX0lOVEVSUlVQVFMoKTsKKworCQlFbWl0RXJyb3JSZXBvcnQoKTsKKwkJQWJv cnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7CisJCUZsdXNoRXJyb3JTdGF0ZSgpOworCisJCVJFU1VN RV9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVkIHdoaWxlIGFw cGx5aW5nIGNoYW5nZXMgKi8KKwkJcGdzdGF0X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3IoTXlT dWJzY3JpcHRpb24tPm9pZCwKKwkJCQkJCQkJCQkgIWFtX3RhYmxlc3luY193b3JrZXIoKSk7CisK IAkJaWYgKE15U3Vic2NyaXB0aW9uLT5kaXNhYmxlb25lcnIpCi0JCQlEaXNhYmxlU3Vic2NyaXB0 aW9uQW5kRXhpdCgpOwotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBSZXBvcnQgdGhlIHdvcmtl ciBmYWlsZWQgd2hpbGUgYXBwbHlpbmcgY2hhbmdlcy4gQWJvcnQgdGhlCi0JCQkgKiBjdXJyZW50 IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIHN0YXRzIG1lc3NhZ2UgaXMgc2VudCBpbiBhbgotCQkJ ICogaWRsZSBzdGF0ZS4KLQkJCSAqLwotCQkJQWJvcnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7Ci0J CQlwZ3N0YXRfcmVwb3J0X3N1YnNjcmlwdGlvbl9lcnJvcihNeVN1YnNjcmlwdGlvbi0+b2lkLCAh YW1fdGFibGVzeW5jX3dvcmtlcigpKTsKKwkJCURpc2FibGVTdWJzY3JpcHRpb25PbkVycm9yKCk7 CiAKLQkJCVBHX1JFX1RIUk9XKCk7Ci0JCX0KKwkJLyogU2V0IHRoZSByZXRyeSBmbGFnLiAqLwor CQlzZXRfc3Vic2NyaXB0aW9uX3JldHJ5KHRydWUpOwogCX0KIAlQR19FTkRfVFJZKCk7CiB9CkBA IC00NjcyLDM5ICs0NzExLDIwIEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIH0K IAogLyoKLSAqIEFmdGVyIGVycm9yIHJlY292ZXJ5LCBkaXNhYmxlIHRoZSBzdWJzY3JpcHRpb24g aW4gYSBuZXcgdHJhbnNhY3Rpb24KLSAqIGFuZCBleGl0IGNsZWFubHkuCisgKiBEaXNhYmxlIHRo ZSBzdWJzY3JpcHRpb24gaW4gYSBuZXcgdHJhbnNhY3Rpb24uCiAgKi8KIHN0YXRpYyB2b2lkCi1E aXNhYmxlU3Vic2NyaXB0aW9uQW5kRXhpdCh2b2lkKQorRGlzYWJsZVN1YnNjcmlwdGlvbk9uRXJy b3Iodm9pZCkKIHsKLQkvKgotCSAqIEVtaXQgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCByZWNvdmVy IGZyb20gdGhlIGVycm9yIHN0YXRlIHRvIGFuIGlkbGUKLQkgKiBzdGF0ZQotCSAqLwotCUhPTERf SU5URVJSVVBUUygpOwotCi0JRW1pdEVycm9yUmVwb3J0KCk7Ci0JQWJvcnRPdXRPZkFueVRyYW5z YWN0aW9uKCk7Ci0JRmx1c2hFcnJvclN0YXRlKCk7Ci0KLQlSRVNVTUVfSU5URVJSVVBUUygpOwot Ci0JLyogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVkIGR1cmluZyBlaXRoZXIgdGFibGUgc3luY2hy b25pemF0aW9uIG9yIGFwcGx5ICovCi0JcGdzdGF0X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3Io TXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwKLQkJCQkJCQkJCSAhYW1fdGFibGVzeW5jX3dvcmtl cigpKTsKLQogCS8qIERpc2FibGUgdGhlIHN1YnNjcmlwdGlvbiAqLwogCVN0YXJ0VHJhbnNhY3Rp b25Db21tYW5kKCk7CiAJRGlzYWJsZVN1YnNjcmlwdGlvbihNeVN1YnNjcmlwdGlvbi0+b2lkKTsK IAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCS8qIE5vdGlmeSB0aGUgc3Vic2NyaXB0 aW9uIGhhcyBiZWVuIGRpc2FibGVkIGFuZCBleGl0ICovCisJLyogTm90aWZ5IHRoZSBzdWJzY3Jp cHRpb24gaGFzIGJlZW4gZGlzYWJsZWQgKi8KIAllcmVwb3J0KExPRywKIAkJCWVycm1zZygic3Vi c2NyaXB0aW9uIFwiJXNcIiBoYXMgYmVlbiBkaXNhYmxlZCBiZWNhdXNlIG9mIGFuIGVycm9yIiwK IAkJCQkgICBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpOwotCi0JcHJvY19leGl0KDApOwogfQogCiAv KgpAQCAtNDk5NywzICs1MDE3LDcxIEBAIGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oVHJh bnNhY3Rpb25JZCB4aWQsIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoqd2luZm8pCiAJCXJldHVy biBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDsKIAl9CiB9CisKKy8qCisgKiBTZXQgc3Vi cmV0cnkgb2YgcGdfc3Vic2NyaXB0aW9uIGNhdGFsb2cuCisgKgorICogSWYgcmV0cnkgaXMgdHJ1 ZSwgc3Vic2NyaWJlciBpcyBhYm91dCB0byBleGl0IHdpdGggYW4gZXJyb3IuIE90aGVyd2lzZSwg aXQKKyAqIG1lYW5zIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHN1Y2Nlc3NmdWxs eS4KKyAqLworc3RhdGljIHZvaWQKK3NldF9zdWJzY3JpcHRpb25fcmV0cnkoYm9vbCByZXRyeSkK K3sKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXR1cDsKKwlib29sCQlzdGFydGVkX3R4ID0g ZmFsc2U7CisJYm9vbAkJbnVsbHNbTmF0dHNfcGdfc3Vic2NyaXB0aW9uXTsKKwlib29sCQlyZXBs YWNlc1tOYXR0c19wZ19zdWJzY3JpcHRpb25dOworCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfc3Vi c2NyaXB0aW9uXTsKKworCS8qIEZhc3QgcGF0aCAtIGlmIG5vIHN0YXRlIGNoYW5nZSB0aGVuIG5v dGhpbmcgdG8gZG8gKi8KKwlpZiAoTXlTdWJzY3JpcHRpb24tPnJldHJ5ID09IHJldHJ5KQorCQly ZXR1cm47CisKKwkvKiBGYXN0IHBhdGggLSBza2lwIGZvciBwYXJhbGxlbCBhcHBseSB3b3JrZXJz ICovCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm47CisKKwkvKiBG YXN0IHBhdGggLSBza2lwIHNldCByZXRyeSBpZiBubyBhY3RpdmUgcGFyYWxsZWwgYXBwbHkgd29y a2VycyAqLworCWlmIChyZXRyeSAmJiAhcGFfaGF2ZV9hY3RpdmVfd29ya2VyKCkpCisJCXJldHVy bjsKKworCWlmICghSXNUcmFuc2FjdGlvblN0YXRlKCkpCisJeworCQlTdGFydFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCQlzdGFydGVkX3R4ID0gdHJ1ZTsKKwl9CisKKwkvKiBMb29rIHVwIHRoZSBz dWJzY3JpcHRpb24gaW4gdGhlIGNhdGFsb2cgKi8KKwlyZWwgPSB0YWJsZV9vcGVuKFN1YnNjcmlw dGlvblJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXR1cCA9IFNlYXJjaFN5c0NhY2hl Q29weTEoU1VCU0NSSVBUSU9OT0lELAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShNeVN1YnNj cmlwdGlvbi0+b2lkKSk7CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJZWxvZyhF UlJPUiwgInN1YnNjcmlwdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLCBNeVN1YnNjcmlwdGlv bi0+bmFtZSk7CisKKwlMb2NrU2hhcmVkT2JqZWN0KFN1YnNjcmlwdGlvblJlbGF0aW9uSWQsIE15 U3Vic2NyaXB0aW9uLT5vaWQsIDAsCisJCQkJCSBBY2Nlc3NTaGFyZUxvY2spOworCisJLyogRm9y bSBhIG5ldyB0dXBsZS4gKi8KKwltZW1zZXQodmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7CisJ bWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9mKG51bGxzKSk7CisJbWVtc2V0KHJlcGxhY2VzLCBm YWxzZSwgc2l6ZW9mKHJlcGxhY2VzKSk7CisKKwkvKiBTZXQgc3VicmV0cnkgKi8KKwl2YWx1ZXNb QW51bV9wZ19zdWJzY3JpcHRpb25fc3VicmV0cnkgLSAxXSA9IEJvb2xHZXREYXR1bShyZXRyeSk7 CisJcmVwbGFjZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3VicmV0cnkgLSAxXSA9IHRydWU7CisK Kwl0dXAgPSBoZWFwX21vZGlmeV90dXBsZSh0dXAsIFJlbGF0aW9uR2V0RGVzY3IocmVsKSwgdmFs dWVzLCBudWxscywKKwkJCQkJCQlyZXBsYWNlcyk7CisKKwkvKiBVcGRhdGUgdGhlIGNhdGFsb2cu ICovCisJQ2F0YWxvZ1R1cGxlVXBkYXRlKHJlbCwgJnR1cC0+dF9zZWxmLCB0dXApOworCisJLyog Q2xlYW51cC4gKi8KKwloZWFwX2ZyZWV0dXBsZSh0dXApOworCXRhYmxlX2Nsb3NlKHJlbCwgTm9M b2NrKTsKKworCWlmIChzdGFydGVkX3R4KQorCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK K30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCmluZGV4IDVlODAwZGM3OWEuLjkzMTIzM2ZjNmUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpA QCAtNDU2MCw4ICs0NTYwLDkgQEAgZ2V0U3Vic2NyaXB0aW9ucyhBcmNoaXZlICpmb3V0KQogCW50 dXBzID0gUFFudHVwbGVzKHJlcyk7CiAKIAkvKgotCSAqIEdldCBzdWJzY3JpcHRpb24gZmllbGRz LiBXZSBkb24ndCBpbmNsdWRlIHN1YnNraXBsc24gaW4gdGhlIGR1bXAgYXMKLQkgKiBhZnRlciBy ZXN0b3JpbmcgdGhlIGR1bXAgdGhpcyB2YWx1ZSBtYXkgbm8gbG9uZ2VyIGJlIHJlbGV2YW50Lgor CSAqIEdldCBzdWJzY3JpcHRpb24gZmllbGRzLiBXZSBkb24ndCBpbmNsdWRlIHN1YnNraXBsc24g YW5kIHN1YnJldHJ5IGluCisJICogdGhlIGR1bXAgYXMgYWZ0ZXIgcmVzdG9yaW5nIHRoZSBkdW1w IHRoaXMgdmFsdWUgbWF5IG5vIGxvbmdlciBiZQorCSAqIHJlbGV2YW50LgogCSAqLwogCWlfdGFi bGVvaWQgPSBQUWZudW1iZXIocmVzLCAidGFibGVvaWQiKTsKIAlpX29pZCA9IFBRZm51bWJlcihy ZXMsICJvaWQiKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0 aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCmluZGV4IGIwZjJh MTcwNWQuLjhlZGJiY2E0NDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vi c2NyaXB0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaApA QCAtODgsNiArODgsMTEgQEAgQ0FUQUxPRyhwZ19zdWJzY3JpcHRpb24sNjEwMCxTdWJzY3JpcHRp b25SZWxhdGlvbklkKSBCS0lfU0hBUkVEX1JFTEFUSU9OIEJLSV9ST1cKIAlib29sCQlzdWJkaXNh Ymxlb25lcnI7CS8qIFRydWUgaWYgYSB3b3JrZXIgZXJyb3Igc2hvdWxkIGNhdXNlIHRoZQogCQkJ CQkJCQkJICogc3Vic2NyaXB0aW9uIHRvIGJlIGRpc2FibGVkICovCiAKKwlib29sCQlzdWJyZXRy eSBCS0lfREVGQVVMVChmKTsJLyogVHJ1ZSBpZiBwcmV2aW91cyBjaGFuZ2UgZmFpbGVkCisJCQkJ CQkJCQkJCSAqIHRvIGJlIGFwcGxpZWQgd2hpbGUgdGhlcmUgd2VyZQorCQkJCQkJCQkJCQkgKiBh bnkgYWN0aXZlIHBhcmFsbGVsIGFwcGx5CisJCQkJCQkJCQkJCSAqIHdvcmtlcnMgKi8KKwogI2lm ZGVmIENBVEFMT0dfVkFSTEVOCQkJLyogdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBzdGFydCBoZXJl ICovCiAJLyogQ29ubmVjdGlvbiBzdHJpbmcgdG8gdGhlIHB1Ymxpc2hlciAqLwogCXRleHQJCXN1 YmNvbm5pbmZvIEJLSV9GT1JDRV9OT1RfTlVMTDsKQEAgLTEzMSw2ICsxMzYsOCBAQCB0eXBlZGVm IHN0cnVjdCBTdWJzY3JpcHRpb24KIAlib29sCQlkaXNhYmxlb25lcnI7CS8qIEluZGljYXRlcyBp ZiB0aGUgc3Vic2NyaXB0aW9uIHNob3VsZCBiZQogCQkJCQkJCQkgKiBhdXRvbWF0aWNhbGx5IGRp c2FibGVkIGlmIGEgd29ya2VyIGVycm9yCiAJCQkJCQkJCSAqIG9jY3VycyAqLworCWJvb2wJCXJl dHJ5OwkJCS8qIEluZGljYXRlcyBpZiBwcmV2aW91cyBjaGFuZ2UgZmFpbGVkIHRvIGJlCisJCQkJ CQkJCSAqIGFwcGxpZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKi8KIAljaGFyCSAg ICpjb25uaW5mbzsJCS8qIENvbm5lY3Rpb24gc3RyaW5nIHRvIHRoZSBwdWJsaXNoZXIgKi8KIAlj aGFyCSAgICpzbG90bmFtZTsJCS8qIE5hbWUgb2YgdGhlIHJlcGxpY2F0aW9uIHNsb3QgKi8KIAlj aGFyCSAgICpzeW5jY29tbWl0OwkJLyogU3luY2hyb25vdXMgY29tbWl0IHNldHRpbmcgZm9yIHdv cmtlciAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVy bmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAppbmRleCBm M2IyZjJkZTMxLi40MmMzM2E0MTc5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJf aW50ZXJuYWwuaApAQCAtMzA4LDYgKzMwOCw4IEBAIGV4dGVybiB2b2lkIHBhX2RlY3JfYW5kX3dh aXRfc3RyZWFtX2Jsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGFfeGFjdF9maW5pc2goUGFyYWxs ZWxBcHBseVdvcmtlckluZm8gKndpbmZvLAogCQkJCQkJICAgWExvZ1JlY1B0ciByZW1vdGVfbHNu KTsKIAorZXh0ZXJuIGJvb2wgcGFfaGF2ZV9hY3RpdmVfd29ya2VyKHZvaWQpOworCiAjZGVmaW5l IGlzUGFyYWxsZWxBcHBseVdvcmtlcih3b3JrZXIpICgod29ya2VyKS0+YXBwbHlfbGVhZGVyX3Bp ZCAhPSBJbnZhbGlkUGlkKQogCiBzdGF0aWMgaW5saW5lIGJvb2wKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMTVfc3RyZWFtLnBsCmluZGV4IDgzZDY5NTZlZTYuLjQwNTRhNWYzNDggMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbApAQCAtNzQsOCArNzQsMTYgQEAgc3ViIHRlc3Rfc3Ry ZWFtaW5nCiAJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsK IAogCSMgVGVzdCB0aGUgc3RyZWFtaW5nIGluIGJpbmFyeSBtb2RlCisJbXkgJG9sZHBpZCA9ICRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgcGlkIEZST00g cGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBB TkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisJKTsKIAkkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKIAkJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVCAoYmluYXJ5 ID0gb24pIik7CisJJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3Jlcycs CisJCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJF IGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK KwkgICkKKwkgIG9yIGRpZQorCSAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0 byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CiAKIAkjIENoZWNrIHRoZSBz dWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KIAkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJl ci0+bG9nZmlsZTsKQEAgLTQ1MCw2ICs0NTgsNjEgQEAgJHJlc3VsdCA9CiBpcygkcmVzdWx0LCBx cSg1MDAwKSwKIAknZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYnkgc2VyaWFsaXppbmcg bWVzc2FnZXMgdG8gZGlzaycpOwogCisjIENsZWFuIHVwIHRlc3QgZGF0YSBmcm9tIHRoZSBlbnZp cm9ubWVudC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FU RSBUQUJMRSB0ZXN0X3RhYl8yIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdCByZS1hcHBseSBhIGZh aWxlZCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIGxlYWRlciBhcHBseQorIyB3b3Jr ZXIgYW5kIGFwcGx5IHN1YnNlcXVlbnQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHVzaW5nIHRoZSBw YXJhbGxlbCBhcHBseQorIyB3b3JrZXIgYWZ0ZXIgdGhpcyByZXRyeSBzdWNjZWVkcy4KKyMgPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFiXzIoYSkiKTsKKwor IyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCiskb2Zmc2V0ID0gLXMgJG5v ZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJ J3Bvc3RncmVzJywgcXF7CitCRUdJTjsKK0lOU0VSVCBJTlRPIHRlc3RfdGFiXzIgU0VMRUNUIGkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgcyhpKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFi XzIgdmFsdWVzKDEpOworQ09NTUlUO30pOworCisjIENoZWNrIGlmIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaXMgbm90IHN0YXJ0ZWQgYmVjYXVzZSB0aGUgYWJvdmUKKyMgdHJhbnNhY3Rpb24g ZmFpbGVkIHRvIGJlIGFwcGxpZWQuCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJ cXIvREVCVUc6ICggW0EtWjAtOV0rOik/IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYXJlIG5vdCB1 c2VkIGZvciByZXRyaWVzLywKKwkkb2Zmc2V0KTsKKworIyBEcm9wIHRoZSB1bmlxdWUgaW5kZXgg b24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jrcy4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBJTkRFWCBpZHhfdGFiIik7CisKKyMgV2FpdCBmb3IgdGhp cyBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdG8gYmUgYXBwbGllZCBpbiB0aGUgYXBwbHkgd29ya2Vy LgorJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworJHJlc3Vs dCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIEZST00gdGVzdF90YWJfMiIpOworaXMoJHJlc3VsdCwgcXEoNTAwMSksICdkYXRhIHJl cGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcpOworCisjIEFmdGVy IHN1Y2Nlc3NmdWxseSByZXRyeWluZyB0byBhcHBseSBhIGZhaWxlZCBzdHJlYW1pbmcgdHJhbnNh Y3Rpb24sIGFwcGx5CisjIHRoZSBmb2xsb3dpbmcgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHVzaW5n IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisKKyMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9n IGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRl c3RfdGFiXzIgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMoaSki KTsKKworY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsIDEsICdD T01NSVQnKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWJfMiIpOworaXMoJHJlc3VsdCwg cXEoMTAwMDEpLAorCSdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciB1c2luZyB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyJyk7CisKICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9w dWJsaXNoZXItPnN0b3A7CiAKLS0gCjIuMjMuMC53aW5kb3dzLjEKCg== --_006_OS0PR01MB5716087C537FA8311F208B6094F59OS0PR01MB5716jpnp_--