From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2060.outbound.protection.outlook.com [40.107.21.60]) by sourceware.org (Postfix) with ESMTPS id A72353858D20 for ; Wed, 9 Nov 2022 08:33:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A72353858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=UGkwh4rs+tgzH57mvdjqhQTVKNqjaBEMzfmhCYeWLJJDIhqQNpEmlWh2lSBuzC8NTRS21HsU345EuuspRPUsYYTmCa21S25+OfOblrgg1C5WsdmcLn+j92x+fUClXG5u57dLnqc9AZxvIjiUUEJsbCdFl3RnKSM2x1CByuhMsYQXVf0CCT42OdKPGpzL0SWuYrA4JyIpAR4ESFnZ1O65K1Pc2rqwGtrusM+PnEirvaDlXupkmJydnIan44raZ4QtaGgwzYu1ZfFHqjNZR3ZzYrYVpGF90hRy1BuSLpIGn08pmG9+GZs0ug+tXpqC5piXs4yHEgNkC/RPmsOA5hzNCg== ARC-Message-Signature: i=2; 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=VG7ZrhKxZr5UAWOdQWHW5oTpuFbZaLdhtcCRrNLfzQQ=; b=njONBAsryc7X4sxs8wBbqR+rqKd8yFsDfWxjGMqrB8h75rDt1q/n6UeAheOtI9LmaELZW6oq0MuU52umQ08ZdCeNJyuDxj6rQuM0YJ89QX1V3lT8he9MYm0ucDzdDo2WePdVz2gW8YTzpR0F4wa71XzqLAIEyDl2WeOWRxMy6RamrL69WO3fQ65+WYaewTXQArQI31RjhnaGv3JvlIstEYUJ3btibL7p5W8qYoQBc2MWD3vsbmo7VPn54z1PV2H6MfcfHrLOiJYvEjzGO08j0StVSWNPhWgp9NUgCd0V0dgTTmTwgyscnkpyP7SOUr3Dkapec+AMpRwTVmfIxcYrZQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VG7ZrhKxZr5UAWOdQWHW5oTpuFbZaLdhtcCRrNLfzQQ=; b=PIPl1E5SzGcZ4N3m6r5NS+OuWz34Rs9eIiI3IMH6+rbbKSECjF544SSN3LDBx+bcFqhcZOAoH1jdtcw0rgtW3ES2RPlrIZ2AcCDpLGbgKIVmXPBjyJH4X8tITbtB8l4YyG0EWgqYFB0DGz2AjuAqDAnGXVvFtnfkYzV29xhDDks= Received: from AS9PR06CA0498.eurprd06.prod.outlook.com (2603:10a6:20b:49b::24) by AS8PR08MB9815.eurprd08.prod.outlook.com (2603:10a6:20b:614::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12; Wed, 9 Nov 2022 08:33:17 +0000 Received: from AM7EUR03FT015.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:49b:cafe::bd) by AS9PR06CA0498.outlook.office365.com (2603:10a6:20b:49b::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.27 via Frontend Transport; Wed, 9 Nov 2022 08:33:17 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM7EUR03FT015.mail.protection.outlook.com (100.127.140.173) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12 via Frontend Transport; Wed, 9 Nov 2022 08:33:17 +0000 Received: ("Tessian outbound aeae1c7b66fd:v130"); Wed, 09 Nov 2022 08:33:17 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 5206b28639379caa X-CR-MTA-TID: 64aa7808 Received: from b58c7c0ac706.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id EC3C83C5-54BF-4E7B-A182-B17850281ADA.1; Wed, 09 Nov 2022 08:33:16 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b58c7c0ac706.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 09 Nov 2022 08:33:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=THXpshad+F4r8dQV78DYJzrvMi0fJfpttFvzrr0uTnka5Mopsoi2dVmpfwEhxhkOvTm+HAfr9CPNB4/TAg3SsFLZvIaKu7XDKjr41UVWgBfSGPnWaIKzuygrsTs3xPZEmq6ABSnqRBCAyQa+TY8Yxmu+T0RNK2tlevN7oQooZLFlBBnkVwFHur+9tdklDYdD+Ps8dPET4sIaaSJOgSFGqzOSU8RRFnlYs6igW6jUr/VDCcbx/hQQyyi06Hsp/mVumSpipHyyohgg3yPr6iaxScU3VgGuS8CuvQsBX32ZfrJdLyn/WEkkfVcOfnUWAgAfiQcax18/5pVk4h6luejOmg== 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=VG7ZrhKxZr5UAWOdQWHW5oTpuFbZaLdhtcCRrNLfzQQ=; b=SSarvnDKmpgTVOB78zZlbUvqphEJBYbjaT1tAaHYGGhplE9z/JHd3lcP9bpv8iFarivfFC5NelqEv/8P8mzers0w++sJKD7DhWExQoBvvoK04iAsssKZflZ92aWOq9LZ7syZ+pggvgJ+45tU7sAX26lNOcpuvXrH8duUF1iq4oPD4cJsjPwVYsllZO0hHQnxhVtqinBsBAphmj7/dmJirTiQCTGuRyK5nVP9JDJbnicdb9va3Z9ymZjBe9fD+Y+Ta0qXfgw2/hBzk6hOUqi9/L9vco6wz2qx78JC7n7fQKl0IHoiYRYosdjNVDnWzJjuaiU9VI+hpmuNrKaBGuz23Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VG7ZrhKxZr5UAWOdQWHW5oTpuFbZaLdhtcCRrNLfzQQ=; b=PIPl1E5SzGcZ4N3m6r5NS+OuWz34Rs9eIiI3IMH6+rbbKSECjF544SSN3LDBx+bcFqhcZOAoH1jdtcw0rgtW3ES2RPlrIZ2AcCDpLGbgKIVmXPBjyJH4X8tITbtB8l4YyG0EWgqYFB0DGz2AjuAqDAnGXVvFtnfkYzV29xhDDks= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by VE1PR08MB5630.eurprd08.prod.outlook.com (2603:10a6:800:1ae::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.11; Wed, 9 Nov 2022 08:33:07 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%5]) with mapi id 15.20.5813.012; Wed, 9 Nov 2022 08:33:07 +0000 From: Tamar Christina To: "gcc-patches@gcc.gnu.org" CC: nd , Richard Earnshaw , Marcus Shawcroft , Kyrylo Tkachov , Richard Sandiford Subject: RE: [PATCH 2/4]AArch64 Add implementation for pow2 bitmask division. Thread-Topic: [PATCH 2/4]AArch64 Add implementation for pow2 bitmask division. Thread-Index: AQHYzy+Kfb5k+Bz5BUWOgiTGQFH6ta4omxcwgA3yRUA= Date: Wed, 9 Nov 2022 08:33:07 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: F3BD36871DDF8245BD09EADC817D2456.0 Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|VE1PR08MB5630:EE_|AM7EUR03FT015:EE_|AS8PR08MB9815:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b1b3748-3d6b-45d3-c53d-08dac22d0d27 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: gr8C7X6YVNAqI/cF5Qg2jyhFz2Wbnnj1E1nVup2L/ug43LtzvsuxWZG8MSorujcjsMuC6rrqxRkXosBWjL32r61HuXemAm7rUfMkarE0dg4+jz3poRt7pfKzL9/cBiEOGRauYCuI7pO7d45Neub9nzRHkQjCJuwIDhdYC9AgCif/gloLPODqpmh8zvUNJjFI0CVS7Hi5qMy10iyESxo1zaoP7BH8asbZb1WMgBdujnWR87A3sdrj1KN/y1SkusY51IwzSrF82WW3KIYjjktpgeI9VMThXNGNzQfeXQPVRGfjwrXpn35YNCW8HE25OBh4Cq8ErIVt9jA+9SD6g8UhbRJXxGi9hH8JsedvVYWDW1JyTPpv02F2o09CCbdGqZWzjbk3JyFO2gyN18va2YWiDmBoKJg9Ok5YfDNPlLKIHXg/HbJLkDtT4AMlfKdW7jZdWU8OWCRLvvNzctII43x3cqGMziWjkvLZHMOAR1FbWX4mYw5G+TTp24KKNz0z/LZa75vE2fWH5/zXQnl593s8BjFifEI9iTPfc5K84tQnedbPXXX2fZV8y452s3H8wLGCwGVwk9UfCP2VLlNgPXtFqcNeVAToQuIrtZngH7MgcYKp52fAQJqgjs5DkFFtnDVT5YjdIGCASymV3m2BUcATrosnWfxWSSqnnPZNR9k5QbX4TEnRGcmrfPqrKPBG4jzM+Qn7FjetHVO1S6wNWCn5zz8LMG4XabV4lHzHQwXaV2i8XyM4PW3fSuTMp6IEYtb87ZktUEvo1mw7VLhLwS5ScB297QhwWO9CF5EuB/6qnHw= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(376002)(136003)(39860400002)(396003)(346002)(366004)(451199015)(86362001)(55016003)(66446008)(30864003)(41300700001)(52536014)(2906002)(8936002)(4326008)(71200400001)(33656002)(64756008)(26005)(5660300002)(76116006)(66556008)(66946007)(66476007)(8676002)(9686003)(84970400001)(54906003)(53546011)(6506007)(316002)(478600001)(7696005)(6916009)(186003)(38070700005)(83380400001)(4743002)(38100700002)(122000001)(559001)(579004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5630 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT015.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 656325ed-99f7-43ce-b142-08dac22d06f8 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HFWrYpYv5FvTwctXLpt+auB6A0P4ZwP5DGTWQUEECbbM0Cv5f+tfFnl8zxuJ8wQjDc2sYsDCbRWVI0xnJz9ICVMHABIg9mNO+I8WsMnn9bby2Oq8iuhUplphqjDnxSIb/hshjZk8y+AZeXR5VF/RZJc0NBmAO9bd1nxnuoZAkQAcm9hQCAbMl3nFRmUCF909lo8+2g+J1Ij7m4oNDT/lt9z+XWbU7TW4VtmNtLOfRHx2m6LvXVfWr3684piX9ZqgD22oiEDKTMhR5r944uTbutg8gLoZdFH8lzfRRIuGBa9zdriVoE5wHvrixB0xjnZ8mqPcuEHtrZO3vHlNmXdpOFbSiyMAcT8/JjYHaFlcG9hscH2Tbgb6DKPaJqdghsH8gihwmdLoyWstSWxSegwgOEaPSUqoOwqzAI4/17yBd1H7rUiYMWHWJrqL1JkZSjO/+p0Znpq/5u55nuXaAxW6f7rA88w7enUA5iwDHK6Oy87YpPznIDndDxk5S0VOjPD0Pwa1UCREFGxMCbzp5psqD0vngxaaXz6+w43wgONNeXTHw3AFu6bZQgxTKnNN0e6cZOMPaZTrLK69JriJI1nDrkIsANYV00dg/JIK4CqVxJHUPMYwZL5F+f5w8qnLOE95TPKrS84lG3jcRUADbwlRVg9bcULeHYyk/u/7emWOTlW8tNFe1wCJT9DVxe6ae/MUzv5Pv2mgaPOMalxlGWTdPnd/OicJDSkD5VujyPiO+AtN9w4+2nSHYC32qb4z+zcjpkaw0WbTmBTZ4g7YA9C4lNeJrS/3XSgh4D8ADm9xhqA= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(376002)(396003)(136003)(346002)(451199015)(40470700004)(36840700001)(46966006)(6506007)(82740400003)(26005)(356005)(55016003)(40480700001)(53546011)(9686003)(8936002)(81166007)(4743002)(478600001)(84970400001)(2906002)(36860700001)(30864003)(7696005)(5660300002)(52536014)(83380400001)(316002)(40460700003)(86362001)(186003)(4326008)(33656002)(41300700001)(54906003)(336012)(70586007)(70206006)(82310400005)(47076005)(8676002)(6916009)(579004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Nov 2022 08:33:17.5592 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8b1b3748-3d6b-45d3-c53d-08dac22d0d27 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM7EUR03FT015.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9815 X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: UGluZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFRhbWFyIENocmlz dGluYQ0KPiBTZW50OiBNb25kYXksIE9jdG9iZXIgMzEsIDIwMjIgMTE6MzUgQU0NCj4gVG86ICdU YW1hciBDaHJpc3RpbmEnIDx0YW1hci5jaHJpc3RpbmFAYXJtLmNvbT47IGdjYy1wYXRjaGVzQGdj Yy5nbnUub3JnDQo+IENjOiBuZCA8bmRAYXJtLmNvbT47IFJpY2hhcmQgRWFybnNoYXcgPFJpY2hh cmQuRWFybnNoYXdAYXJtLmNvbT47DQo+IE1hcmN1cyBTaGF3Y3JvZnQgPE1hcmN1cy5TaGF3Y3Jv ZnRAYXJtLmNvbT47IEt5cnlsbyBUa2FjaG92DQo+IDxLeXJ5bG8uVGthY2hvdkBhcm0uY29tPjsg UmljaGFyZCBTYW5kaWZvcmQNCj4gPFJpY2hhcmQuU2FuZGlmb3JkQGFybS5jb20+DQo+IFN1Ympl Y3Q6IFJFOiBbUEFUQ0ggMi80XUFBcmNoNjQgQWRkIGltcGxlbWVudGF0aW9uIGZvciBwb3cyIGJp dG1hc2sNCj4gZGl2aXNpb24uDQo+IA0KPiBIaSBBbGwsDQo+IA0KPiBQaW5nLCBhbmQgdXBkYXRl ZCBwYXRjaCBiYXNlZCBvbiBtaWQtZW5kIGNoYW5nZXMuDQo+IA0KPiBCb290c3RyYXBwZWQgUmVn dGVzdGVkIG9uIGFhcmNoNjQtbm9uZS1saW51eC1nbnUgYW5kIG5vIGlzc3Vlcy4NCj4gDQo+IE9r IGZvciBtYXN0ZXI/DQo+IA0KPiBUaGFua3MsDQo+IFRhbWFyDQo+IA0KPiBnY2MvQ2hhbmdlTG9n Og0KPiANCj4gCSogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kDQo+IChAYWFyY2g2NF9i aXRtYXNrX3VkaXY8bW9kZT4zKTogTmV3Lg0KPiAJKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LmNj DQo+IChhYXJjaDY0X3ZlY3Rvcml6ZV9jYW5fc3BlY2lhbF9kaXZfYnlfY29uc3RhbnQpOiBOZXcu DQo+IA0KPiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoNCj4gDQo+IAkqIGdjYy50YXJnZXQvYWFy Y2g2NC9kaXYtYnktYml0bWFzay5jOiBOZXcgdGVzdC4NCj4gDQo+IC0tLSBpbmxpbmUgY29weSBv ZiBwYXRjaCAtLS0NCj4gDQo+IGRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2 NC1zaW1kLm1kDQo+IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC5tZA0KPiBpbmRl eA0KPiA1ODdhNDVkNzc3MjFlMWIzOWFjY2JhZDdkYmVjYTRkNzQxZWNjYjEwLi5mNDE1MjE2MDA4 NGQ2YjZmMzRiZDY5ZjBiDQo+IGE2Mzg2YzFhYjUwZjc3ZSAxMDA2NDQNCj4gLS0tIGEvZ2NjL2Nv bmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC5tZA0KPiArKysgYi9nY2MvY29uZmlnL2FhcmNoNjQv YWFyY2g2NC1zaW1kLm1kDQo+IEBAIC00ODMxLDYgKzQ4MzEsNjUgQEAgKGRlZmluZV9leHBhbmQN Cj4gImFhcmNoNjRfPHN1cj48YWRkc3ViPmhuMjxtb2RlPiINCj4gICAgfQ0KPiAgKQ0KPiANCj4g Kzs7IGRpdiBvcHRpbWl6YXRpb25zIHVzaW5nIG5hcnJvd2luZ3MNCj4gKzs7IHdlIGNhbiBkbyB0 aGUgZGl2aXNpb24gZS5nLiBzaG9ydHMgYnkgMjU1IGZhc3RlciBieSBjYWxjdWxhdGluZyBpdA0K PiArYXMgOzsgKHggKyAoKHggKyAyNTcpID4+IDgpKSA+PiA4IGFzc3VtaW5nIHRoZSBvcGVyYXRp b24gaXMgZG9uZSBpbiA7Ow0KPiArZG91YmxlIHRoZSBwcmVjaXNpb24gb2YgeC4NCj4gKzs7DQo+ ICs7OyBJZiB3ZSBpbWFnaW5lIGEgc2hvcnQgYXMgYmVpbmcgY29tcG9zZWQgb2YgdHdvIGJsb2Nr cyBvZiBieXRlcyB0aGVuDQo+ICs7OyBhZGRpbmcgMjU3IG9yIDBiMDAwMF8wMDAxXzAwMDBfMDAw MSB0byB0aGUgbnVtYmVyIGlzIGVxdWl2YWxlbiB0byA7Ow0KPiArYWRkaW5nIDEgdG8gZWFjaCBz dWIgY29tcG9uZW50Og0KPiArOzsNCj4gKzs7ICAgICAgc2hvcnQgdmFsdWUgb2YgMTYtYml0cw0K PiArOzsg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQDQo+ICs7OyDi lIIgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICDilIINCj4gKzs7IOKUlOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmA0KPiArOzsgICA4LWJpdCBwYXJ0MSDilrIg IDgtYml0IHBhcnQyICAg4payDQo+ICs7OyAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAg ICDilIINCj4gKzs7ICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgIOKUgg0KPiArOzsg ICAgICAgICAgICAgICsxICAgICAgICAgICAgICAgKzENCj4gKzs7DQo+ICs7OyBhZnRlciB0aGUg Zmlyc3QgYWRkaXRpb24sIHdlIGhhdmUgdG8gc2hpZnQgcmlnaHQgYnkgOCwgYW5kIG5hcnJvdw0K PiArdGhlIDs7IHJlc3VsdHMgYmFjayB0byBhIGJ5dGUuICBSZW1lbWJlciB0aGF0IHRoZSBhZGRp dGlvbiBtdXN0IGJlIGRvbmUNCj4gK2luIDs7IGRvdWJsZSB0aGUgcHJlY2lzaW9uIG9mIHRoZSBp bnB1dC4gIFNpbmNlIDggaXMgaGFsZiB0aGUgc2l6ZSBvZiBhDQo+ICtzaG9ydCA7OyB3ZSBjYW4g dXNlIGEgbmFycm93aW5nIGhhbGZpbmcgaW5zdHJ1Y3Rpb24gaW4gQUFyY2g2NCwgYWRkaG4NCj4g K3doaWNoIGFsc28gOzsgZG9lcyB0aGUgYWRkaXRpb24gaW4gYSB3aWRlciBwcmVjaXNpb24gYW5k IG5hcnJvd3MgYmFjaw0KPiArdG8gYSBieXRlLiAgVGhlIDs7IHNoaWZ0IGl0c2VsZiBpcyBpbXBs aWNpdCBpbiB0aGUgb3BlcmF0aW9uIGFzIGl0DQo+ICt3cml0ZXMgYmFjayBvbmx5IHRoZSB0b3Ag OzsgaGFsZiBvZiB0aGUgcmVzdWx0LiBpLmUuIGJpdHMgMiplc2l6ZS0xOmVzaXplLg0KPiArOzsN Cj4gKzs7IFNpbmNlIHdlIGhhdmUgbmFycm93ZWQgdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3QgcGFy dCBiYWNrIHRvIGEgYnl0ZSwNCj4gK2ZvciA7OyB0aGUgc2Vjb25kIGFkZGl0aW9uIHdlIGNhbiB1 c2UgYSB3aWRlbmluZyBhZGRpdGlvbiwgdWFkZHcuDQo+ICs7Ow0KPiArOzsgRm9yIHRoZSBmaW5h bHkgc2hpZnQsIHNpbmNlIGl0J3MgdW5zaWduZWQgYXJpdGhtYXRpYyB3ZSBlbWl0IGFuIHVzaHIN Cj4gK2J5IDggOzsgdG8gc2hpZnQgYW5kIHRoZSB2ZWN0b3JpemVyLg0KPiArOzsNCj4gKzs7IFRo ZSBzaGlmdCBpcyBsYXRlciBvcHRpbWl6ZWQgYnkgY29tYmluZSB0byBhIHV6cDIgd2l0aCBtb3Zp ICMwLg0KPiArKGRlZmluZV9leHBhbmQgIkBhYXJjaDY0X2JpdG1hc2tfdWRpdjxtb2RlPjMiDQo+ ICsgIFsobWF0Y2hfb3BlcmFuZDpWUU4gMCAicmVnaXN0ZXJfb3BlcmFuZCIpDQo+ICsgICAobWF0 Y2hfb3BlcmFuZDpWUU4gMSAicmVnaXN0ZXJfb3BlcmFuZCIpDQo+ICsgICAobWF0Y2hfb3BlcmFu ZDpWUU4gMiAiaW1tZWRpYXRlX29wZXJhbmQiKV0NCj4gKyAgIlRBUkdFVF9TSU1EIg0KPiArew0K PiArICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHNpemUNCj4gKyAgICA9ICgxVUxMIDw8IEdFVF9N T0RFX1VOSVRfQklUU0laRSAoPFZOQVJST1dRPm1vZGUpKSAtIDE7DQo+ICsgIGlmICghQ09OU1Rf VkVDVE9SX1AgKG9wZXJhbmRzWzJdKQ0KPiArICAgICAgfHwgY29uc3RfdmVjdG9yX2VuY29kZWRf bmVsdHMgKG9wZXJhbmRzWzJdKSAhPSAxDQo+ICsgICAgICB8fCBzaXplICE9IFVJTlRWQUwgKENP TlNUX1ZFQ1RPUl9FTFQgKG9wZXJhbmRzWzJdLCAwKSkpDQo+ICsgICAgRkFJTDsNCj4gKw0KPiAr ICBydHggYWRkZW5kID0gZ2VuX3JlZ19ydHggKDxNT0RFPm1vZGUpOw0KPiArICBydHggdmFsID0g YWFyY2g2NF9zaW1kX2dlbl9jb25zdF92ZWN0b3JfZHVwICg8Vk5BUlJPV1EyPm1vZGUsIDEpOw0K PiArICBlbWl0X21vdmVfaW5zbiAoYWRkZW5kLCBsb3dwYXJ0X3N1YnJlZyAoPE1PREU+bW9kZSwg dmFsLA0KPiArPFZOQVJST1dRMj5tb2RlKSk7DQo+ICsgIHJ0eCB0bXAxID0gZ2VuX3JlZ19ydHgg KDxWTkFSUk9XUT5tb2RlKTsNCj4gKyAgcnR4IHRtcDIgPSBnZW5fcmVnX3J0eCAoPE1PREU+bW9k ZSk7DQo+ICsgIGVtaXRfaW5zbiAoZ2VuX2FhcmNoNjRfYWRkaG48bW9kZT4gKHRtcDEsIG9wZXJh bmRzWzFdLCBhZGRlbmQpKTsNCj4gKyAgdW5zaWduZWQgYml0c2l6ZSA9IEdFVF9NT0RFX1VOSVRf QklUU0laRSAoPFZOQVJST1dRPm1vZGUpOw0KPiArICBydHggc2hpZnRfdmVjdG9yID0gYWFyY2g2 NF9zaW1kX2dlbl9jb25zdF92ZWN0b3JfZHVwICg8TU9ERT5tb2RlLA0KPiArYml0c2l6ZSk7DQo+ ICsgIGVtaXRfaW5zbiAoZ2VuX2FhcmNoNjRfdWFkZHc8Vm5hcnJvd3E+ICh0bXAyLCBvcGVyYW5k c1sxXSwgdG1wMSkpOw0KPiArICBlbWl0X2luc24gKGdlbl9hYXJjaDY0X3NpbWRfbHNocjxtb2Rl PiAob3BlcmFuZHNbMF0sIHRtcDIsDQo+ICtzaGlmdF92ZWN0b3IpKTsNCj4gKyAgRE9ORTsNCj4g K30pDQo+ICsNCj4gIDs7IHBtdWwuDQo+IA0KPiAgKGRlZmluZV9pbnNuICJhYXJjaDY0X3BtdWw8 bW9kZT4iDQo+IGRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYyBiL2dj Yy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmNjDQo+IGluZGV4DQo+IDRiNDg2YWVlYTkwZWEyYWZi OWNkZDk2YTRkYmUxNWM1YmIyYWJkN2EuLmQzYzM2NTBkN2Q3MjhmNTZhZGI2NTE1NA0KPiAxMjdk YzdiNzIzODZjNWE3IDEwMDY0NA0KPiAtLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5j Yw0KPiArKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYw0KPiBAQCAtMjQxNDYsNiAr MjQxNDYsNDAgQEAgYWFyY2g2NF92ZWN0b3JpemVfdmVjX3Blcm1fY29uc3QNCj4gKG1hY2hpbmVf bW9kZSB2bW9kZSwgbWFjaGluZV9tb2RlIG9wX21vZGUsDQo+ICAgIHJldHVybiByZXQ7DQo+ICB9 DQo+IA0KPiArLyogSW1wbGVtZW50IFRBUkdFVF9WRUNUT1JJWkVfQ0FOX1NQRUNJQUxfRElWX0JZ X0NPTlNULiAgKi8NCj4gKw0KPiArYm9vbA0KPiArYWFyY2g2NF92ZWN0b3JpemVfY2FuX3NwZWNp YWxfZGl2X2J5X2NvbnN0YW50IChlbnVtIHRyZWVfY29kZSBjb2RlLA0KPiArCQkJCQkgICAgICAg dHJlZSB2ZWN0eXBlLCB3aWRlX2ludCBjc3QsDQo+ICsJCQkJCSAgICAgICBydHggKm91dHB1dCwg cnR4IGluMCwgcnR4IGluMSkgew0KPiArICBpZiAoY29kZSAhPSBUUlVOQ19ESVZfRVhQUg0KPiAr ICAgICAgfHwgIVRZUEVfVU5TSUdORUQgKHZlY3R5cGUpKQ0KPiArICAgIHJldHVybiBmYWxzZTsN Cj4gKw0KPiArICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSBhYXJjaDY0X2NsYXNzaWZ5X3ZlY3Rvcl9t b2RlIChUWVBFX01PREUNCj4gKyAodmVjdHlwZSkpOyAgaWYgKChmbGFncyAmIFZFQ19BTllfU1ZF KSAmJiAhVEFSR0VUX1NWRTIpDQo+ICsgICAgcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsgIGlmIChp bjAgPT0gTlVMTF9SVFggJiYgaW4xID09IE5VTExfUlRYKQ0KPiArICAgIHsNCj4gKyAgICAgIHdp ZGVfaW50IHZhbCA9IHdpOjphZGQgKGNzdCwgMSk7DQo+ICsgICAgICBpbnQgcG93ID0gd2k6OmV4 YWN0X2xvZzIgKHZhbCk7DQo+ICsgICAgICByZXR1cm4gcG93ID09IChpbnQpKGVsZW1lbnRfcHJl Y2lzaW9uICh2ZWN0eXBlKSAvIDIpOw0KPiArICAgIH0NCj4gKw0KPiArICBpZiAoIVZFQ1RPUl9U WVBFX1AgKHZlY3R5cGUpKQ0KPiArICAgcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsgIGdjY19hc3Nl cnQgKG91dHB1dCk7DQo+ICsNCj4gKyAgaWYgKCEqb3V0cHV0KQ0KPiArICAgICpvdXRwdXQgPSBn ZW5fcmVnX3J0eCAoVFlQRV9NT0RFICh2ZWN0eXBlKSk7DQo+ICsNCj4gKyAgZW1pdF9pbnNuIChn ZW5fYWFyY2g2NF9iaXRtYXNrX3VkaXYzIChUWVBFX01PREUgKHZlY3R5cGUpLCAqb3V0cHV0LA0K PiAraW4wLCBpbjEpKTsNCj4gKyAgcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gIC8qIEdlbmVy YXRlIGEgYnl0ZSBwZXJtdXRlIG1hc2sgZm9yIGEgcmVnaXN0ZXIgb2YgbW9kZSBNT0RFLA0KPiAg ICAgd2hpY2ggaGFzIE5VTklUUyB1bml0cy4gICovDQo+IA0KPiBAQCAtMjc2MDYsNiArMjc2NDAs MTAgQEAgYWFyY2g2NF9saWJnY2NfZmxvYXRpbmdfbW9kZV9zdXBwb3J0ZWRfcA0KPiAgI3VuZGVm IFRBUkdFVF9WRUNUT1JfQUxJR05NRU5UDQo+ICAjZGVmaW5lIFRBUkdFVF9WRUNUT1JfQUxJR05N RU5UIGFhcmNoNjRfc2ltZF92ZWN0b3JfYWxpZ25tZW50DQo+IA0KPiArI3VuZGVmIFRBUkdFVF9W RUNUT1JJWkVfQ0FOX1NQRUNJQUxfRElWX0JZX0NPTlNUDQo+ICsjZGVmaW5lIFRBUkdFVF9WRUNU T1JJWkVfQ0FOX1NQRUNJQUxfRElWX0JZX0NPTlNUIFwNCj4gKyAgYWFyY2g2NF92ZWN0b3JpemVf Y2FuX3NwZWNpYWxfZGl2X2J5X2NvbnN0YW50DQo+ICsNCj4gICN1bmRlZiBUQVJHRVRfVkVDVE9S SVpFX1BSRUZFUlJFRF9WRUNUT1JfQUxJR05NRU5UDQo+ICAjZGVmaW5lIFRBUkdFVF9WRUNUT1JJ WkVfUFJFRkVSUkVEX1ZFQ1RPUl9BTElHTk1FTlQgXA0KPiAgICBhYXJjaDY0X3ZlY3Rvcml6ZV9w cmVmZXJyZWRfdmVjdG9yX2FsaWdubWVudA0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FhcmNoNjQvZGl2LWJ5LWJpdG1hc2suYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L2Rpdi1ieS1iaXRtYXNrLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmE1 MzU3OTFiYTcyNTgzMDJlMGMyY2Y0NGENCj4gYjIxMWNkMjQ2ZDgyZDUNCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9kaXYtYnktYml0bWFz ay5jDQo+IEBAIC0wLDAgKzEsNjEgQEANCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ICsv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU8zIC1zdGQ9Yzk5IiB9ICovDQo+ICsvKiB7IGRn LWZpbmFsIHsgY2hlY2stZnVuY3Rpb24tYm9kaWVzICIqKiIgIiIgIiIgeyB0YXJnZXQgeyBsZSB9 IH0gfSB9DQo+ICsqLw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ICsNCj4gKyNwcmFn bWEgR0NDIHRhcmdldCAiK25vc3ZlIg0KPiArDQo+ICsvKg0KPiArKiogZHJhd19iaXRtYXAxOg0K PiArKiogLi4uDQo+ICsqKiAJYWRkaG4JdlswLTldKy44YiwgdlswLTldKy44aCwgdlswLTldKy44 aA0KPiArKiogCWFkZGhuCXZbMC05XSsuOGIsIHZbMC05XSsuOGgsIHZbMC05XSsuOGgNCj4gKyoq IAl1YWRkdwl2WzAtOV0rLjhoLCB2WzAtOV0rLjhoLCB2WzAtOV0rLjhiDQo+ICsqKiAJdWFkZHcJ dlswLTldKy44aCwgdlswLTldKy44aCwgdlswLTldKy44Yg0KPiArKiogCXV6cDIJdlswLTldKy4x NmIsIHZbMC05XSsuMTZiLCB2WzAtOV0rLjE2Yg0KPiArKiogLi4uDQo+ICsqLw0KPiArdm9pZCBk cmF3X2JpdG1hcDEodWludDhfdCogcmVzdHJpY3QgcGl4ZWwsIHVpbnQ4X3QgbGV2ZWwsIGludCBu KSB7DQo+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgKG4gJiAtMTYpOyBpKz0xKQ0KPiArICAgIHBp eGVsW2ldID0gKHBpeGVsW2ldICogbGV2ZWwpIC8gMHhmZjsgfQ0KPiArDQo+ICt2b2lkIGRyYXdf Yml0bWFwMih1aW50OF90KiByZXN0cmljdCBwaXhlbCwgdWludDhfdCBsZXZlbCwgaW50IG4pIHsN Cj4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAobiAmIC0xNik7IGkrPTEpDQo+ICsgICAgcGl4ZWxb aV0gPSAocGl4ZWxbaV0gKiBsZXZlbCkgLyAweGZlOyB9DQo+ICsNCj4gKy8qDQo+ICsqKiBkcmF3 X2JpdG1hcDM6DQo+ICsqKiAuLi4NCj4gKyoqIAlhZGRobgl2WzAtOV0rLjRoLCB2WzAtOV0rLjRz LCB2WzAtOV0rLjRzDQo+ICsqKiAJYWRkaG4JdlswLTldKy40aCwgdlswLTldKy40cywgdlswLTld Ky40cw0KPiArKiogCXVhZGR3CXZbMC05XSsuNHMsIHZbMC05XSsuNHMsIHZbMC05XSsuNGgNCj4g KyoqIAl1YWRkdwl2WzAtOV0rLjRzLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRoDQo+ICsqKiAJdXpw Mgl2WzAtOV0rLjhoLCB2WzAtOV0rLjhoLCB2WzAtOV0rLjhoDQo+ICsqKiAuLi4NCj4gKyovDQo+ ICt2b2lkIGRyYXdfYml0bWFwMyh1aW50MTZfdCogcmVzdHJpY3QgcGl4ZWwsIHVpbnQxNl90IGxl dmVsLCBpbnQgbikgew0KPiArICBmb3IgKGludCBpID0gMDsgaSA8IChuICYgLTE2KTsgaSs9MSkN Cj4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtpXSAqIGxldmVsKSAvIDB4ZmZmZlU7IH0NCj4gKw0K PiArLyoNCj4gKyoqIGRyYXdfYml0bWFwNDoNCj4gKyoqIC4uLg0KPiArKiogCWFkZGhuCXZbMC05 XSsuMnMsIHZbMC05XSsuMmQsIHZbMC05XSsuMmQNCj4gKyoqIAlhZGRobgl2WzAtOV0rLjJzLCB2 WzAtOV0rLjJkLCB2WzAtOV0rLjJkDQo+ICsqKiAJdWFkZHcJdlswLTldKy4yZCwgdlswLTldKy4y ZCwgdlswLTldKy4ycw0KPiArKiogCXVhZGR3CXZbMC05XSsuMmQsIHZbMC05XSsuMmQsIHZbMC05 XSsuMnMNCj4gKyoqIAl1enAyCXZbMC05XSsuNHMsIHZbMC05XSsuNHMsIHZbMC05XSsuNHMNCj4g KyoqIC4uLg0KPiArKi8NCj4gK3ZvaWQgZHJhd19iaXRtYXA0KHVpbnQzMl90KiByZXN0cmljdCBw aXhlbCwgdWludDMyX3QgbGV2ZWwsIGludCBuKSB7DQo+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwg KG4gJiAtMTYpOyBpKz0xKQ0KPiArICAgIHBpeGVsW2ldID0gKHBpeGVsW2ldICogKHVpbnQ2NF90 KWxldmVsKSAvIDB4ZmZmZmZmZmZVTDsgfQ0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2Ut LS0tLQ0KPiA+IEZyb206IFRhbWFyIENocmlzdGluYSA8dGFtYXIuY2hyaXN0aW5hQGFybS5jb20+ DQo+ID4gU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMjMsIDIwMjIgMTA6MzQgQU0NCj4gPiBUbzog Z2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcNCj4gPiBDYzogbmQgPG5kQGFybS5jb20+OyBSaWNoYXJk IEVhcm5zaGF3IDxSaWNoYXJkLkVhcm5zaGF3QGFybS5jb20+Ow0KPiA+IE1hcmN1cyBTaGF3Y3Jv ZnQgPE1hcmN1cy5TaGF3Y3JvZnRAYXJtLmNvbT47IEt5cnlsbyBUa2FjaG92DQo+ID4gPEt5cnls by5Ua2FjaG92QGFybS5jb20+OyBSaWNoYXJkIFNhbmRpZm9yZA0KPiA+IDxSaWNoYXJkLlNhbmRp Zm9yZEBhcm0uY29tPg0KPiA+IFN1YmplY3Q6IFtQQVRDSCAyLzRdQUFyY2g2NCBBZGQgaW1wbGVt ZW50YXRpb24gZm9yIHBvdzIgYml0bWFzaw0KPiBkaXZpc2lvbi4NCj4gPg0KPiA+IEhpIEFsbCwN Cj4gPg0KPiA+IFRoaXMgYWRkcyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG5ldyBvcHRhYiBm b3IgdW5zaWduZWQgcG93Mg0KPiA+IGJpdG1hc2sgZm9yIEFBcmNoNjQuDQo+ID4NCj4gPiBUaGUg aW1wbGVtZW50YXRpb24gcmV3cml0ZXM6DQo+ID4NCj4gPiAgICB4ID0geSAvICgyIF4gKHNpemVv ZiAoeSkvMiktMQ0KPiA+DQo+ID4gaW50byBlLmcuIChmb3IgYnl0ZXMpDQo+ID4NCj4gPiAgICAo eCArICgoeCArIDI1NykgPj4gOCkpID4+IDgNCj4gPg0KPiA+IHdoZXJlIGl0J3MgcmVxdWlyZWQg dGhhdCB0aGUgYWRkaXRpb25zIGJlIGRvbmUgaW4gZG91YmxlIHRoZSBwcmVjaXNpb24NCj4gPiBv ZiB4IHN1Y2ggdGhhdCB3ZSBkb24ndCBsb3NlIGFueSBiaXRzIGR1cmluZyBhbiBvdmVyZmxvdy4N Cj4gPg0KPiA+IEVzc2VudGlhbGx5IHRoZSBzZXF1ZW5jZSBkZWNvbXBvc2VzIHRoZSBkaXZpc2lv biBpbnRvIGRvaW5nIHR3bw0KPiA+IHNtYWxsZXIgZGl2aXNpb25zLCBvbmUgZm9yIHRoZSB0b3Ag YW5kIGJvdHRvbSBwYXJ0cyBvZiB0aGUgbnVtYmVyIGFuZA0KPiA+IGFkZGluZyB0aGUgcmVzdWx0 cyBiYWNrIHRvZ2V0aGVyLg0KPiA+DQo+ID4gVG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBz aGlmdCBieSA4IHdvdWxkIGJlIGRpdmlzaW9uIGJ5IDI1NiB3ZQ0KPiA+IGFkZCAxIHRvIGJvdGgg cGFydHMgb2YgeCBzdWNoIHRoYXQgd2hlbiAyNTUgd2Ugc3RpbGwgZ2V0IDEgYXMgdGhlIGFuc3dl ci4NCj4gPg0KPiA+IEJlY2F1c2UgdGhlIGFtb3VudCB3ZSBzaGlmdCBhcmUgaGFsZiB0aGUgb3Jp Z2luYWwgZGF0YXR5cGUgd2UgY2FuIHVzZQ0KPiA+IHRoZSBoYWxmaW5nIGluc3RydWN0aW9ucyB0 aGUgSVNBIHByb3ZpZGVzIHRvIGRvIHRoZSBvcGVyYXRpb24gaW5zdGVhZA0KPiA+IG9mIHVzaW5n IGFjdHVhbCBzaGlmdHMuDQo+ID4NCj4gPiBGb3IgQUFyY2g2NCB0aGlzIG1lYW5zIHdlIGdlbmVy YXRlIGZvcjoNCj4gPg0KPiA+IHZvaWQgZHJhd19iaXRtYXAxKHVpbnQ4X3QqIHJlc3RyaWN0IHBp eGVsLCB1aW50OF90IGxldmVsLCBpbnQgbikgew0KPiA+ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAo biAmIC0xNik7IGkrPTEpDQo+ID4gICAgIHBpeGVsW2ldID0gKHBpeGVsW2ldICogbGV2ZWwpIC8g MHhmZjsgfQ0KPiA+DQo+ID4gdGhlIGZvbGxvd2luZzoNCj4gPg0KPiA+IAltb3ZpICAgIHYzLjE2 YiwgMHgxDQo+ID4gCXVtdWxsMiAgdjEuOGgsIHYwLjE2YiwgdjIuMTZiDQo+ID4gCXVtdWxsICAg djAuOGgsIHYwLjhiLCB2Mi44Yg0KPiA+IAlhZGRobiAgIHY1LjhiLCB2MS44aCwgdjMuOGgNCj4g PiAJYWRkaG4gICB2NC44YiwgdjAuOGgsIHYzLjhoDQo+ID4gCXVhZGR3ICAgdjEuOGgsIHYxLjho LCB2NS44Yg0KPiA+IAl1YWRkdyAgIHYwLjhoLCB2MC44aCwgdjQuOGINCj4gPiAJdXpwMiAgICB2 MC4xNmIsIHYwLjE2YiwgdjEuMTZiDQo+ID4NCj4gPiBpbnN0ZWFkIG9mOg0KPiA+DQo+ID4gCXVt dWxsICAgdjIuOGgsIHYxLjhiLCB2NS44Yg0KPiA+IAl1bXVsbDIgIHYxLjhoLCB2MS4xNmIsIHY1 LjE2Yg0KPiA+IAl1bXVsbCAgIHYwLjRzLCB2Mi40aCwgdjMuNGgNCj4gPiAJdW11bGwyICB2Mi40 cywgdjIuOGgsIHYzLjhoDQo+ID4gCXVtdWxsICAgdjQuNHMsIHYxLjRoLCB2My40aA0KPiA+IAl1 bXVsbDIgIHYxLjRzLCB2MS44aCwgdjMuOGgNCj4gPiAJdXpwMiAgICB2MC44aCwgdjAuOGgsIHYy LjhoDQo+ID4gCXV6cDIgICAgdjEuOGgsIHY0LjhoLCB2MS44aA0KPiA+IAlzaHJuICAgIHYwLjhi LCB2MC44aCwgNw0KPiA+IAlzaHJuMiAgIHYwLjE2YiwgdjEuOGgsIDcNCj4gPg0KPiA+IFdoaWNo IHJlc3VsdHMgaW4gc2lnbmlmaWNhbnRseSBmYXN0ZXIgY29kZS4NCj4gPg0KPiA+IFRoYW5rcyBm b3IgV2lsY28gZm9yIHRoZSBjb25jZXB0Lg0KPiA+DQo+ID4gQm9vdHN0cmFwcGVkIFJlZ3Rlc3Rl ZCBvbiBhYXJjaDY0LW5vbmUtbGludXgtZ251IGFuZCBubyBpc3N1ZXMuDQo+ID4NCj4gPiBPayBm b3IgbWFzdGVyPw0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+IFRhbWFyDQo+ID4NCj4gPiBnY2MvQ2hh bmdlTG9nOg0KPiA+DQo+ID4gCSogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kDQo+ID4g KEBhYXJjaDY0X2JpdG1hc2tfdWRpdjxtb2RlPjMpOiBOZXcuDQo+ID4gCSogY29uZmlnL2FhcmNo NjQvYWFyY2g2NC5jYw0KPiA+IChhYXJjaDY0X3ZlY3Rvcml6ZV9jYW5fc3BlY2lhbF9kaXZfYnlf Y29uc3RhbnQpOiBOZXcuDQo+ID4NCj4gPiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoNCj4gPg0K PiA+IAkqIGdjYy50YXJnZXQvYWFyY2g2NC9kaXYtYnktYml0bWFzay5jOiBOZXcgdGVzdC4NCj4g Pg0KPiA+IC0tLSBpbmxpbmUgY29weSBvZiBwYXRjaCAtLQ0KPiA+IGRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kDQo+ID4gYi9nY2MvY29uZmlnL2FhcmNoNjQv YWFyY2g2NC1zaW1kLm1kDQo+ID4gaW5kZXgNCj4gPg0KPiA1ODdhNDVkNzc3MjFlMWIzOWFjY2Jh ZDdkYmVjYTRkNzQxZWNjYjEwLi5mNDE1MjE2MDA4NGQ2YjZmMzRiZDY5ZjBiDQo+ID4gYTYzODZj MWFiNTBmNzdlIDEwMDY0NA0KPiA+IC0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNp bWQubWQNCj4gPiArKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kDQo+ID4g QEAgLTQ4MzEsNiArNDgzMSw2NSBAQCAoZGVmaW5lX2V4cGFuZA0KPiA+ICJhYXJjaDY0XzxzdXI+ PGFkZHN1Yj5objI8bW9kZT4iDQo+ID4gICAgfQ0KPiA+ICApDQo+ID4NCj4gPiArOzsgZGl2IG9w dGltaXphdGlvbnMgdXNpbmcgbmFycm93aW5ncyA7OyB3ZSBjYW4gZG8gdGhlIGRpdmlzaW9uIGUu Zy4NCj4gPiArc2hvcnRzIGJ5IDI1NSBmYXN0ZXIgYnkgY2FsY3VsYXRpbmcgaXQgYXMgOzsgKHgg KyAoKHggKyAyNTcpID4+IDgpKQ0KPiA+ICs+PiA4IGFzc3VtaW5nIHRoZSBvcGVyYXRpb24gaXMg ZG9uZSBpbiA7OyBkb3VibGUgdGhlIHByZWNpc2lvbiBvZiB4Lg0KPiA+ICs7Ow0KPiA+ICs7OyBJ ZiB3ZSBpbWFnaW5lIGEgc2hvcnQgYXMgYmVpbmcgY29tcG9zZWQgb2YgdHdvIGJsb2NrcyBvZiBi eXRlcw0KPiA+ICt0aGVuIDs7IGFkZGluZyAyNTcgb3IgMGIwMDAwXzAwMDFfMDAwMF8wMDAxIHRv IHRoZSBudW1iZXIgaXMNCj4gPiArZXF1aXZhbGVuIHRvIDs7IGFkZGluZyAxIHRvIGVhY2ggc3Vi IGNvbXBvbmVudDoNCj4gPiArOzsNCj4gPiArOzsgICAgICBzaG9ydCB2YWx1ZSBvZiAxNi1iaXRz DQo+ID4gKzs7IOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU rOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkA0KPiA+ ICs7OyDilIIgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICDilIINCj4gPiArOzsg4pSU 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYDQo+ID4gKzs7ICAgOC1iaXQg cGFydDEg4payICA4LWJpdCBwYXJ0MiAgIOKWsg0KPiA+ICs7OyAgICAgICAgICAgICAgIOKUgiAg ICAgICAgICAgICAgICDilIINCj4gPiArOzsgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAg ICAg4pSCDQo+ID4gKzs7ICAgICAgICAgICAgICArMSAgICAgICAgICAgICAgICsxDQo+ID4gKzs7 DQo+ID4gKzs7IGFmdGVyIHRoZSBmaXJzdCBhZGRpdGlvbiwgd2UgaGF2ZSB0byBzaGlmdCByaWdo dCBieSA4LCBhbmQgbmFycm93DQo+ID4gK3RoZSA7OyByZXN1bHRzIGJhY2sgdG8gYSBieXRlLiAg UmVtZW1iZXIgdGhhdCB0aGUgYWRkaXRpb24gbXVzdCBiZQ0KPiA+ICtkb25lIGluIDs7IGRvdWJs ZSB0aGUgcHJlY2lzaW9uIG9mIHRoZSBpbnB1dC4gIFNpbmNlIDggaXMgaGFsZiB0aGUNCj4gPiAr c2l6ZSBvZiBhIHNob3J0IDs7IHdlIGNhbiB1c2UgYSBuYXJyb3dpbmcgaGFsZmluZyBpbnN0cnVj dGlvbiBpbg0KPiA+ICtBQXJjaDY0LCBhZGRobiB3aGljaCBhbHNvIDs7IGRvZXMgdGhlIGFkZGl0 aW9uIGluIGEgd2lkZXIgcHJlY2lzaW9uDQo+ID4gK2FuZCBuYXJyb3dzIGJhY2sgdG8gYSBieXRl LiAgVGhlIDs7IHNoaWZ0IGl0c2VsZiBpcyBpbXBsaWNpdCBpbiB0aGUNCj4gPiArb3BlcmF0aW9u IGFzIGl0IHdyaXRlcyBiYWNrIG9ubHkgdGhlIHRvcCA7OyBoYWxmIG9mIHRoZSByZXN1bHQuIGku ZS4gYml0cw0KPiAyKmVzaXplLTE6ZXNpemUuDQo+ID4gKzs7DQo+ID4gKzs7IFNpbmNlIHdlIGhh dmUgbmFycm93ZWQgdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3QgcGFydCBiYWNrIHRvIGENCj4gPiAr Ynl0ZSwgZm9yIDs7IHRoZSBzZWNvbmQgYWRkaXRpb24gd2UgY2FuIHVzZSBhIHdpZGVuaW5nIGFk ZGl0aW9uLCB1YWRkdy4NCj4gPiArOzsNCj4gPiArOzsgRm9yIHRoZSBmaW5hbHkgc2hpZnQsIHNp bmNlIGl0J3MgdW5zaWduZWQgYXJpdGhtYXRpYyB3ZSBlbWl0IGFuDQo+ID4gK3VzaHIgYnkgOCA7 OyB0byBzaGlmdCBhbmQgdGhlIHZlY3Rvcml6ZXIuDQo+ID4gKzs7DQo+ID4gKzs7IFRoZSBzaGlm dCBpcyBsYXRlciBvcHRpbWl6ZWQgYnkgY29tYmluZSB0byBhIHV6cDIgd2l0aCBtb3ZpICMwLg0K PiA+ICsoZGVmaW5lX2V4cGFuZCAiQGFhcmNoNjRfYml0bWFza191ZGl2PG1vZGU+MyINCj4gPiAr ICBbKG1hdGNoX29wZXJhbmQ6VlFOIDAgInJlZ2lzdGVyX29wZXJhbmQiKQ0KPiA+ICsgICAobWF0 Y2hfb3BlcmFuZDpWUU4gMSAicmVnaXN0ZXJfb3BlcmFuZCIpDQo+ID4gKyAgIChtYXRjaF9vcGVy YW5kOlZRTiAyICJpbW1lZGlhdGVfb3BlcmFuZCIpXQ0KPiA+ICsgICJUQVJHRVRfU0lNRCINCj4g PiArew0KPiA+ICsgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgc2l6ZQ0KPiA+ICsgICAgPSAoMVVM TCA8PCBHRVRfTU9ERV9VTklUX0JJVFNJWkUgKDxWTkFSUk9XUT5tb2RlKSkgLSAxOw0KPiA+ICsg IGlmICghQ09OU1RfVkVDVE9SX1AgKG9wZXJhbmRzWzJdKQ0KPiA+ICsgICAgICB8fCBjb25zdF92 ZWN0b3JfZW5jb2RlZF9uZWx0cyAob3BlcmFuZHNbMl0pICE9IDENCj4gPiArICAgICAgfHwgc2l6 ZSAhPSBVSU5UVkFMIChDT05TVF9WRUNUT1JfRUxUIChvcGVyYW5kc1syXSwgMCkpKQ0KPiA+ICsg ICAgRkFJTDsNCj4gPiArDQo+ID4gKyAgcnR4IGFkZGVuZCA9IGdlbl9yZWdfcnR4ICg8TU9ERT5t b2RlKTsNCj4gPiArICBydHggdmFsID0gYWFyY2g2NF9zaW1kX2dlbl9jb25zdF92ZWN0b3JfZHVw ICg8Vk5BUlJPV1EyPm1vZGUsDQo+IDEpOw0KPiA+ICsgIGVtaXRfbW92ZV9pbnNuIChhZGRlbmQs IGxvd3BhcnRfc3VicmVnICg8TU9ERT5tb2RlLCB2YWwsDQo+ID4gKzxWTkFSUk9XUTI+bW9kZSkp Ow0KPiA+ICsgIHJ0eCB0bXAxID0gZ2VuX3JlZ19ydHggKDxWTkFSUk9XUT5tb2RlKTsNCj4gPiAr ICBydHggdG1wMiA9IGdlbl9yZWdfcnR4ICg8TU9ERT5tb2RlKTsNCj4gPiArICBlbWl0X2luc24g KGdlbl9hYXJjaDY0X2FkZGhuPG1vZGU+ICh0bXAxLCBvcGVyYW5kc1sxXSwgYWRkZW5kKSk7DQo+ ID4gKyAgdW5zaWduZWQgYml0c2l6ZSA9IEdFVF9NT0RFX1VOSVRfQklUU0laRSAoPFZOQVJST1dR Pm1vZGUpOw0KPiA+ICsgIHJ0eCBzaGlmdF92ZWN0b3IgPSBhYXJjaDY0X3NpbWRfZ2VuX2NvbnN0 X3ZlY3Rvcl9kdXANCj4gKDxNT0RFPm1vZGUsDQo+ID4gK2JpdHNpemUpOw0KPiA+ICsgIGVtaXRf aW5zbiAoZ2VuX2FhcmNoNjRfdWFkZHc8Vm5hcnJvd3E+ICh0bXAyLCBvcGVyYW5kc1sxXSwNCj4g dG1wMSkpOw0KPiA+ICsgIGVtaXRfaW5zbiAoZ2VuX2FhcmNoNjRfc2ltZF9sc2hyPG1vZGU+IChv cGVyYW5kc1swXSwgdG1wMiwNCj4gPiArc2hpZnRfdmVjdG9yKSk7DQo+ID4gKyAgRE9ORTsNCj4g PiArfSkNCj4gPiArDQo+ID4gIDs7IHBtdWwuDQo+ID4NCj4gPiAgKGRlZmluZV9pbnNuICJhYXJj aDY0X3BtdWw8bW9kZT4iDQo+ID4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJj aDY0LmNjDQo+ID4gYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYyBpbmRleA0KPiA+DQo+ IDRiNDg2YWVlYTkwZWEyYWZiOWNkZDk2YTRkYmUxNWM1YmIyYWJkN2EuLjkxYmI3ZDMwNmYzNmRj NGM5ZWVhYWZjMw0KPiA+IDc0ODRiNmZjNjkwMWJmYjQgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL2Nv bmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MNCj4gPiArKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFy Y2g2NC5jYw0KPiA+IEBAIC0yNDE0Niw2ICsyNDE0Niw1MSBAQCBhYXJjaDY0X3ZlY3Rvcml6ZV92 ZWNfcGVybV9jb25zdA0KPiA+IChtYWNoaW5lX21vZGUgdm1vZGUsIG1hY2hpbmVfbW9kZSBvcF9t b2RlLA0KPiA+ICAgIHJldHVybiByZXQ7DQo+ID4gIH0NCj4gPg0KPiA+ICsvKiBJbXBsZW1lbnQg VEFSR0VUX1ZFQ1RPUklaRV9DQU5fU1BFQ0lBTF9ESVZfQllfQ09OU1QuICAqLw0KPiA+ICsNCj4g PiArYm9vbA0KPiA+ICthYXJjaDY0X3ZlY3Rvcml6ZV9jYW5fc3BlY2lhbF9kaXZfYnlfY29uc3Rh bnQgKGVudW0gdHJlZV9jb2RlIGNvZGUsDQo+ID4gKwkJCQkJICAgICAgIHRyZWUgdmVjdHlwZSwN Cj4gPiArCQkJCQkgICAgICAgdHJlZSB0cmVlb3AwLCB0cmVlIHRyZWVvcDEsDQo+ID4gKwkJCQkJ ICAgICAgIHJ0eCAqb3V0cHV0LCBydHggaW4wLCBydHggaW4xKSB7DQo+ID4gKw0KPiA+ICsgIGlm ICgoIXRyZWVvcDAgfHwgIXRyZWVvcDEpICYmIChpbjAgPT0gTlVMTF9SVFggfHwgaW4xID09IE5V TExfUlRYKSkNCj4gPiArICAgIHJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKyAgdHJlZSBjc3Qg PSB1bmlmb3JtX2ludGVnZXJfY3N0X3AgKHRyZWVvcDEpOyAgdHJlZSB0eXBlOyAgaWYgKGNvZGUN Cj4gPiArICE9IFRSVU5DX0RJVl9FWFBSDQo+ID4gKyAgICAgIHx8ICFjc3QNCj4gPiArICAgICAg fHwgIVRZUEVfVU5TSUdORUQgKCh0eXBlID0gVFJFRV9UWVBFIChjc3QpKSkNCj4gPiArICAgICAg fHwgdHJlZV9pbnRfY3N0X3NnbiAoY3N0KSAhPSAxKQ0KPiA+ICsgICAgcmV0dXJuIGZhbHNlOw0K PiA+ICsNCj4gPiArICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSBhYXJjaDY0X2NsYXNzaWZ5X3ZlY3Rv cl9tb2RlIChUWVBFX01PREUNCj4gPiArICh2ZWN0eXBlKSk7ICBpZiAoKGZsYWdzICYgVkVDX0FO WV9TVkUpICYmICFUQVJHRVRfU1ZFMikNCj4gPiArICAgIHJldHVybiBmYWxzZTsNCj4gPiArDQo+ ID4gKyAgaWYgKGluMCA9PSBOVUxMX1JUWCAmJiBpbjEgPT0gTlVMTF9SVFgpDQo+ID4gKyAgICB7 DQo+ID4gKyAgICAgIGdjY19hc3NlcnQgKHRyZWVvcDAgJiYgdHJlZW9wMSk7DQo+ID4gKyAgICAg IHdpZGVfaW50IGljc3QgPSB3aTo6dG9fd2lkZSAoY3N0KTsNCj4gPiArICAgICAgd2lkZV9pbnQg dmFsID0gd2k6OmFkZCAoaWNzdCwgMSk7DQo+ID4gKyAgICAgIGludCBwb3cgPSB3aTo6ZXhhY3Rf bG9nMiAodmFsKTsNCj4gPiArICAgICAgcmV0dXJuIHBvdyA9PSAoVFlQRV9QUkVDSVNJT04gKHR5 cGUpIC8gMik7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgIGlmICghVkVDVE9SX1RZUEVfUCAo dmVjdHlwZSkpDQo+ID4gKyAgIHJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKyAgZ2NjX2Fzc2Vy dCAob3V0cHV0KTsNCj4gPiArDQo+ID4gKyAgaWYgKCEqb3V0cHV0KQ0KPiA+ICsgICAgKm91dHB1 dCA9IGdlbl9yZWdfcnR4IChUWVBFX01PREUgKHZlY3R5cGUpKTsNCj4gPiArDQo+ID4gKyAgZW1p dF9pbnNuIChnZW5fYWFyY2g2NF9iaXRtYXNrX3VkaXYzIChUWVBFX01PREUgKHZlY3R5cGUpLA0K PiAqb3V0cHV0LA0KPiA+ICtpbjAsIGluMSkpOw0KPiA+ICsgIHJldHVybiB0cnVlOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICAvKiBHZW5lcmF0ZSBhIGJ5dGUgcGVybXV0ZSBtYXNrIGZvciBhIHJlZ2lz dGVyIG9mIG1vZGUgTU9ERSwNCj4gPiAgICAgd2hpY2ggaGFzIE5VTklUUyB1bml0cy4gICovDQo+ ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL2RvYy90bS50ZXhpIGIvZ2NjL2RvYy90bS50ZXhpIGlu ZGV4DQo+ID4NCj4gOTJiZGExYTdlMTRhM2M5ZWE2M2UxNTFlNGE0OWE4MThiZjRkMWJkYi4uYWRi YTlmZTk3YTliNDM3MjljNWU4NmQyDQo+ID4gNDRhMmEyM2U3NmNhYzA5NyAxMDA2NDQNCj4gPiAt LS0gYS9nY2MvZG9jL3RtLnRleGkNCj4gPiArKysgYi9nY2MvZG9jL3RtLnRleGkNCj4gPiBAQCAt NjExMiw2ICs2MTEyLDIyIEBAIGluc3RydWN0aW9uIHBhdHRlcm4uICBUaGVyZSBpcyBubyBuZWVk IGZvciB0aGUNCj4gPiBob29rIHRvIGhhbmRsZSB0aGVzZSB0d28gIGltcGxlbWVudGF0aW9uIGFw cHJvYWNoZXMgaXRzZWxmLg0KPiA+ICBAZW5kIGRlZnR5cGVmbg0KPiA+DQo+ID4gK0BkZWZ0eXBl Zm4ge1RhcmdldCBIb29rfSBib29sDQo+ID4gVEFSR0VUX1ZFQ1RPUklaRV9DQU5fU1BFQ0lBTF9E SVZfQllfQ09OU1QNCj4gPiArKGVudW0gQHZhcnt0cmVlX2NvZGV9LCB0cmVlIEB2YXJ7dmVjdHlw ZX0sIHRyZWUgQHZhcnt0cmVlb3AwfSwgdHJlZQ0KPiA+ICtAdmFye3RyZWVvcDF9LCBydHggKkB2 YXJ7b3V0cHV0fSwgcnR4IEB2YXJ7aW4wfSwgcnR4IEB2YXJ7aW4xfSkgVGhpcw0KPiA+ICtob29r IGlzIHVzZWQgdG8gdGVzdCB3aGV0aGVyIHRoZSB0YXJnZXQgaGFzIGEgc3BlY2lhbCBtZXRob2Qg b2YNCj4gPiArZGl2aXNpb24gb2YgdmVjdG9ycyBvZiB0eXBlIEB2YXJ7dmVjdHlwZX0gdXNpbmcg dGhlIHR3byBvcGVyYW5kcw0KPiA+IEBjb2Rle3RyZWVvcDB9LCBhbmQgQGNvZGV7dHJlZW9wMX0g YW5kIHByb2R1Y2luZyBhIHZlY3RvciBvZiB0eXBlDQo+ID4gQHZhcnt2ZWN0eXBlfS4gIFRoZSBk aXZpc2lvbiB3aWxsIHRoZW4gbm90IGJlIGRlY29tcG9zZWQgYnkgdGhlIGFuZA0KPiA+IGtlcHQg YXMgYSBkaXYuDQo+ID4gKw0KPiA+ICtXaGVuIHRoZSBob29rIGlzIGJlaW5nIHVzZWQgdG8gdGVz dCB3aGV0aGVyIHRoZSB0YXJnZXQgc3VwcG9ydHMgYQ0KPiA+ICtzcGVjaWFsIGRpdmlkZSwgQHZh cntpbjB9LCBAdmFye2luMX0sIGFuZCBAdmFye291dHB1dH0gYXJlIGFsbCBudWxsLg0KPiA+ICtX aGVuIHRoZSBob29rIGlzIGJlaW5nIHVzZWQgdG8gZW1pdCBhIGRpdmlzaW9uLCBAdmFye2luMH0g YW5kDQo+ID4gK0B2YXJ7aW4xfSBhcmUgdGhlIHNvdXJjZSB2ZWN0b3JzIG9mIHR5cGUgQHZhcnt2 ZWN0dHlwZX0gYW5kDQo+ID4gK0B2YXJ7b3V0cHV0fSBpcyB0aGUgZGVzdGluYXRpb24gdmVjdG9y IG9mIHR5cGUgQHZhcnt2ZWN0eXBlfS4NCj4gPiArDQo+ID4gK1JldHVybiB0cnVlIGlmIHRoZSBv cGVyYXRpb24gaXMgcG9zc2libGUsIGVtaXR0aW5nIGluc3RydWN0aW9ucyBmb3INCj4gPiAraXQg aWYgcnR4ZXMgYXJlIHByb3ZpZGVkIGFuZCB1cGRhdGluZyBAdmFye291dHB1dH0uDQo+ID4gK0Bl bmQgZGVmdHlwZWZuDQo+ID4gKw0KPiA+ICBAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30gdHJlZQ0K PiA+IFRBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9WRUNUT1JJWkVEX0ZVTkNUSU9OICh1bnNpZ25l ZA0KPiBAdmFye2NvZGV9LA0KPiA+IHRyZWUgQHZhcnt2ZWNfdHlwZV9vdXR9LCB0cmVlIEB2YXJ7 dmVjX3R5cGVfaW59KSAgVGhpcyBob29rIHNob3VsZA0KPiA+IHJldHVybiB0aGUgZGVjbCBvZiBh IGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgIHZlY3Rvcml6ZWQgdmFyaWFudA0KPiA+IG9m IHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBAY29kZXtjb21iaW5lZF9mbn0gY29kZSBkaWZmIC0tZ2l0 DQo+ID4gYS9nY2MvZG9jL3RtLnRleGkuaW4gYi9nY2MvZG9jL3RtLnRleGkuaW4gaW5kZXgNCj4g Pg0KPiAxMTI0NjIzMTBiMTM0NzA1ZDg2MDE1MzI5NDI4N2NmZDdkNGFmODFkLi5kNWE3NDVhMDJh Y2RmMDUxZWExZGExYjA0DQo+ID4gMDc2ZDA1OGMyNGNlMDkzIDEwMDY0NA0KPiA+IC0tLSBhL2dj Yy9kb2MvdG0udGV4aS5pbg0KPiA+ICsrKyBiL2djYy9kb2MvdG0udGV4aS5pbg0KPiA+IEBAIC00 MTY0LDYgKzQxNjQsOCBAQCBhZGRyZXNzOyAgYnV0IG9mdGVuIGEgbWFjaGluZS1kZXBlbmRlbnQN Cj4gc3RyYXRlZ3kNCj4gPiBjYW4gZ2VuZXJhdGUgYmV0dGVyIGNvZGUuDQo+ID4NCj4gPiAgQGhv b2sgVEFSR0VUX1ZFQ1RPUklaRV9WRUNfUEVSTV9DT05TVA0KPiA+DQo+ID4gK0Bob29rIFRBUkdF VF9WRUNUT1JJWkVfQ0FOX1NQRUNJQUxfRElWX0JZX0NPTlNUDQo+ID4gKw0KPiA+ICBAaG9vayBU QVJHRVRfVkVDVE9SSVpFX0JVSUxUSU5fVkVDVE9SSVpFRF9GVU5DVElPTg0KPiA+DQo+ID4gIEBo b29rIFRBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9NRF9WRUNUT1JJWkVEX0ZVTkNUSU9ODQo+ID4g ZGlmZiAtLWdpdCBhL2djYy9leHBsb3cuY2MgYi9nY2MvZXhwbG93LmNjIGluZGV4DQo+ID4NCj4g ZGRiNGQ2YWUzNjAwNTQyZjhkMmJiNTYxN2NkZDM5MzNhOWZhZTZjMC4uNTY4ZTBlYjFhMTU4YzY5 NjQ1OGFlNjc4Zg0KPiA+IDVlMzQ2YmYzNGJhMDAzNiAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvZXhw bG93LmNjDQo+ID4gKysrIGIvZ2NjL2V4cGxvdy5jYw0KPiA+IEBAIC0xMDM3LDcgKzEwMzcsNyBA QCByb3VuZF9wdXNoIChydHggc2l6ZSkNCj4gPiAgICAgICBUUlVOQ19ESVZfRVhQUi4gICovDQo+ ID4gICAgc2l6ZSA9IGV4cGFuZF9iaW5vcCAoUG1vZGUsIGFkZF9vcHRhYiwgc2l6ZSwgYWxpZ25t MV9ydHgsDQo+ID4gIAkJICAgICAgIE5VTExfUlRYLCAxLCBPUFRBQl9MSUJfV0lERU4pOw0KPiA+ IC0gIHNpemUgPSBleHBhbmRfZGl2bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwgUG1vZGUsIHNpemUs IGFsaWduX3J0eCwNCj4gPiArICBzaXplID0gZXhwYW5kX2Rpdm1vZCAoMCwgVFJVTkNfRElWX0VY UFIsIFBtb2RlLCBOVUxMLCBOVUxMLCBzaXplLA0KPiA+ICsgYWxpZ25fcnR4LA0KPiA+ICAJCQlO VUxMX1JUWCwgMSk7DQo+ID4gICAgc2l6ZSA9IGV4cGFuZF9tdWx0IChQbW9kZSwgc2l6ZSwgYWxp Z25fcnR4LCBOVUxMX1JUWCwgMSk7DQo+ID4NCj4gPiBAQCAtMTIwMyw3ICsxMjAzLDcgQEAgYWxp Z25fZHluYW1pY19hZGRyZXNzIChydHggdGFyZ2V0LCB1bnNpZ25lZA0KPiA+IHJlcXVpcmVkX2Fs aWduKQ0KPiA+ICAJCQkgZ2VuX2ludF9tb2RlIChyZXF1aXJlZF9hbGlnbiAvIEJJVFNfUEVSX1VO SVQgLSAxLA0KPiA+ICAJCQkJICAgICAgIFBtb2RlKSwNCj4gPiAgCQkJIE5VTExfUlRYLCAxLCBP UFRBQl9MSUJfV0lERU4pOw0KPiA+IC0gIHRhcmdldCA9IGV4cGFuZF9kaXZtb2QgKDAsIFRSVU5D X0RJVl9FWFBSLCBQbW9kZSwgdGFyZ2V0LA0KPiA+ICsgIHRhcmdldCA9IGV4cGFuZF9kaXZtb2Qg KDAsIFRSVU5DX0RJVl9FWFBSLCBQbW9kZSwgTlVMTCwgTlVMTCwNCj4gPiB0YXJnZXQsDQo+ID4g IAkJCSAgZ2VuX2ludF9tb2RlIChyZXF1aXJlZF9hbGlnbiAvIEJJVFNfUEVSX1VOSVQsDQo+ID4g IAkJCQkJUG1vZGUpLA0KPiA+ICAJCQkgIE5VTExfUlRYLCAxKTsNCj4gPiBkaWZmIC0tZ2l0IGEv Z2NjL2V4cG1lZC5oIGIvZ2NjL2V4cG1lZC5oIGluZGV4DQo+ID4NCj4gMGIyNTM4YzRjNmJkNTFk ZmRjNzcyZWY3MGJkZjYzMWMwYmVkODcxNy4uMGRiMjk4NmYxMWZmNGE0YjEwYjU5NTAxYzYNCj4g PiBmMzNjYjM1OTU2NTliNSAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvZXhwbWVkLmgNCj4gPiArKysg Yi9nY2MvZXhwbWVkLmgNCj4gPiBAQCAtNzA4LDggKzcwOCw5IEBAIGV4dGVybiBydHggZXhwYW5k X3ZhcmlhYmxlX3NoaWZ0IChlbnVtIHRyZWVfY29kZSwNCj4gPiBtYWNoaW5lX21vZGUsICBleHRl cm4gcnR4IGV4cGFuZF9zaGlmdCAoZW51bSB0cmVlX2NvZGUsDQo+IG1hY2hpbmVfbW9kZSwNCj4g PiBydHgsIHBvbHlfaW50NjQsIHJ0eCwNCj4gPiAgCQkJIGludCk7DQo+ID4gICNpZmRlZiBHQ0Nf T1BUQUJTX0gNCj4gPiAtZXh0ZXJuIHJ0eCBleHBhbmRfZGl2bW9kIChpbnQsIGVudW0gdHJlZV9j b2RlLCBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4LA0KPiA+IC0JCQkgIHJ0eCwgaW50LCBlbnVtIG9w dGFiX21ldGhvZHMgPQ0KPiA+IE9QVEFCX0xJQl9XSURFTik7DQo+ID4gK2V4dGVybiBydHggZXhw YW5kX2Rpdm1vZCAoaW50LCBlbnVtIHRyZWVfY29kZSwgbWFjaGluZV9tb2RlLCB0cmVlLA0KPiA+ IHRyZWUsDQo+ID4gKwkJCSAgcnR4LCBydHgsIHJ0eCwgaW50LA0KPiA+ICsJCQkgIGVudW0gb3B0 YWJfbWV0aG9kcyA9IE9QVEFCX0xJQl9XSURFTik7DQo+ID4gICNlbmRpZg0KPiA+ICAjZW5kaWYN Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9nY2MvZXhwbWVkLmNjIGIvZ2NjL2V4cG1lZC5jYyBpbmRl eA0KPiA+DQo+IDhkNzQxOGJlNDE4NDA2ZTcyYTg5NWVjZGRmMmRjN2ZkYjk1MGM3NmMuLmI2NGVh NWFjNDZhOWRhODU3NzBhNWJiMDkNCj4gPiA5MGRiOGI5N2QzYWY0MTQgMTAwNjQ0DQo+ID4gLS0t IGEvZ2NjL2V4cG1lZC5jYw0KPiA+ICsrKyBiL2djYy9leHBtZWQuY2MNCj4gPiBAQCAtNDIyMiw4 ICs0MjIyLDggQEAgZXhwYW5kX3NkaXZfcG93MiAoc2NhbGFyX2ludF9tb2RlIG1vZGUsIHJ0eA0K PiBvcDAsDQo+ID4gSE9TVF9XSURFX0lOVCBkKQ0KPiA+DQo+ID4gIHJ0eA0KPiA+ICBleHBhbmRf ZGl2bW9kIChpbnQgcmVtX2ZsYWcsIGVudW0gdHJlZV9jb2RlIGNvZGUsIG1hY2hpbmVfbW9kZQ0K PiBtb2RlLA0KPiA+IC0JICAgICAgIHJ0eCBvcDAsIHJ0eCBvcDEsIHJ0eCB0YXJnZXQsIGludCB1 bnNpZ25lZHAsDQo+ID4gLQkgICAgICAgZW51bSBvcHRhYl9tZXRob2RzIG1ldGhvZHMpDQo+ID4g KwkgICAgICAgdHJlZSB0cmVlb3AwLCB0cmVlIHRyZWVvcDEsIHJ0eCBvcDAsIHJ0eCBvcDEsIHJ0 eCB0YXJnZXQsDQo+ID4gKwkgICAgICAgaW50IHVuc2lnbmVkcCwgZW51bSBvcHRhYl9tZXRob2Rz IG1ldGhvZHMpDQo+ID4gIHsNCj4gPiAgICBtYWNoaW5lX21vZGUgY29tcHV0ZV9tb2RlOw0KPiA+ ICAgIHJ0eCB0cXVvdGllbnQ7DQo+ID4gQEAgLTQzNzUsNiArNDM3NSwxNCBAQCBleHBhbmRfZGl2 bW9kIChpbnQgcmVtX2ZsYWcsIGVudW0gdHJlZV9jb2RlDQo+ID4gY29kZSwgbWFjaGluZV9tb2Rl IG1vZGUsDQo+ID4NCj4gPiAgICBsYXN0X2Rpdl9jb25zdCA9ICEgcmVtX2ZsYWcgJiYgb3AxX2lz X2NvbnN0YW50ID8gSU5UVkFMIChvcDEpIDogMDsNCj4gPg0KPiA+ICsgIC8qIENoZWNrIGlmIHRo ZSB0YXJnZXQgaGFzIHNwZWNpZmljIGV4cGFuc2lvbnMgZm9yIHRoZSBkaXZpc2lvbi4NCj4gPiAr ICovICBpZiAodHJlZW9wMA0KPiA+ICsgICAgICAmJiB0YXJnZXRtLnZlY3Rvcml6ZS5jYW5fc3Bl Y2lhbF9kaXZfYnlfY29uc3QgKGNvZGUsIFRSRUVfVFlQRQ0KPiA+ICh0cmVlb3AwKSwNCj4gPiAr CQkJCQkJICAgICB0cmVlb3AwLCB0cmVlb3AxLA0KPiA+ICsJCQkJCQkgICAgICZ0YXJnZXQsIG9w MCwgb3AxKSkNCj4gPiArICAgIHJldHVybiB0YXJnZXQ7DQo+ID4gKw0KPiA+ICsNCj4gPiAgICAv KiBOb3cgY29udmVydCB0byB0aGUgYmVzdCBtb2RlIHRvIHVzZS4gICovDQo+ID4gICAgaWYgKGNv bXB1dGVfbW9kZSAhPSBtb2RlKQ0KPiA+ICAgICAgew0KPiA+IEBAIC00NjE4LDggKzQ2MjYsOCBA QCBleHBhbmRfZGl2bW9kIChpbnQgcmVtX2ZsYWcsIGVudW0gdHJlZV9jb2RlDQo+ID4gY29kZSwg bWFjaGluZV9tb2RlIG1vZGUsDQo+ID4gIAkJCSAgICB8fCAob3B0YWJfaGFuZGxlciAoc2Rpdm1v ZF9vcHRhYiwgaW50X21vZGUpDQo+ID4gIAkJCQkhPSBDT0RFX0ZPUl9ub3RoaW5nKSkpDQo+ID4g IAkJICAgICAgcXVvdGllbnQgPSBleHBhbmRfZGl2bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwNCj4g PiAtCQkJCQkJaW50X21vZGUsIG9wMCwNCj4gPiAtCQkJCQkJZ2VuX2ludF9tb2RlIChhYnNfZCwN Cj4gPiArCQkJCQkJaW50X21vZGUsIHRyZWVvcDAsIHRyZWVvcDEsDQo+ID4gKwkJCQkJCW9wMCwg Z2VuX2ludF9tb2RlIChhYnNfZCwNCj4gPiAgCQkJCQkJCSAgICAgIGludF9tb2RlKSwNCj4gPiAg CQkJCQkJTlVMTF9SVFgsIDApOw0KPiA+ICAJCSAgICBlbHNlDQo+ID4gQEAgLTQ4MDgsOCArNDgx Niw4IEBAIGV4cGFuZF9kaXZtb2QgKGludCByZW1fZmxhZywgZW51bSB0cmVlX2NvZGUNCj4gPiBj b2RlLCBtYWNoaW5lX21vZGUgbW9kZSwNCj4gPiAgCQkJCSAgICAgIHNpemUgLSAxLCBOVUxMX1JU WCwgMCk7DQo+ID4gIAkJdDMgPSBmb3JjZV9vcGVyYW5kIChnZW5fcnR4X01JTlVTIChpbnRfbW9k ZSwgdDEsIG5zaWduKSwNCj4gPiAgCQkJCSAgICBOVUxMX1JUWCk7DQo+ID4gLQkJdDQgPSBleHBh bmRfZGl2bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwgaW50X21vZGUsIHQzLA0KPiA+IG9wMSwNCj4g PiAtCQkJCSAgICBOVUxMX1JUWCwgMCk7DQo+ID4gKwkJdDQgPSBleHBhbmRfZGl2bW9kICgwLCBU UlVOQ19ESVZfRVhQUiwgaW50X21vZGUsDQo+ID4gdHJlZW9wMCwNCj4gPiArCQkJCSAgICB0cmVl b3AxLCB0Mywgb3AxLCBOVUxMX1JUWCwgMCk7DQo+ID4gIAkJaWYgKHQ0KQ0KPiA+ICAJCSAgew0K PiA+ICAJCSAgICBydHggdDU7DQo+ID4gZGlmZiAtLWdpdCBhL2djYy9leHByLmNjIGIvZ2NjL2V4 cHIuY2MgaW5kZXgNCj4gPg0KPiA4MGJiMWI4YTRjNWI4MzUwZmIxYjhmNTdhOTlmZDUyZTU4ODJm Y2I2Li5iNzg2ZjFkNzVlMjVmMzQxMGMwNjQwY2Q5Ng0KPiA+IGE4YWJjMDU1ZmEzNGQ5IDEwMDY0 NA0KPiA+IC0tLSBhL2djYy9leHByLmNjDQo+ID4gKysrIGIvZ2NjL2V4cHIuY2MNCj4gPiBAQCAt ODAyOCwxNiArODAyOCwxNyBAQCBmb3JjZV9vcGVyYW5kIChydHggdmFsdWUsIHJ0eCB0YXJnZXQp DQo+ID4gIAkgICAgcmV0dXJuIGV4cGFuZF9kaXZtb2QgKDAsDQo+ID4gIAkJCQkgIEZMT0FUX01P REVfUCAoR0VUX01PREUgKHZhbHVlKSkNCj4gPiAgCQkJCSAgPyBSRElWX0VYUFIgOiBUUlVOQ19E SVZfRVhQUiwNCj4gPiAtCQkJCSAgR0VUX01PREUgKHZhbHVlKSwgb3AxLCBvcDIsIHRhcmdldCwg MCk7DQo+ID4gKwkJCQkgIEdFVF9NT0RFICh2YWx1ZSksIE5VTEwsIE5VTEwsIG9wMSwgb3AyLA0K PiA+ICsJCQkJICB0YXJnZXQsIDApOw0KPiA+ICAJY2FzZSBNT0Q6DQo+ID4gLQkgIHJldHVybiBl eHBhbmRfZGl2bW9kICgxLCBUUlVOQ19NT0RfRVhQUiwgR0VUX01PREUgKHZhbHVlKSwNCj4gPiBv cDEsIG9wMiwNCj4gPiAtCQkJCXRhcmdldCwgMCk7DQo+ID4gKwkgIHJldHVybiBleHBhbmRfZGl2 bW9kICgxLCBUUlVOQ19NT0RfRVhQUiwgR0VUX01PREUgKHZhbHVlKSwNCj4gPiBOVUxMLCBOVUxM LA0KPiA+ICsJCQkJb3AxLCBvcDIsIHRhcmdldCwgMCk7DQo+ID4gIAljYXNlIFVESVY6DQo+ID4g LQkgIHJldHVybiBleHBhbmRfZGl2bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwgR0VUX01PREUgKHZh bHVlKSwNCj4gPiBvcDEsIG9wMiwNCj4gPiAtCQkJCXRhcmdldCwgMSk7DQo+ID4gKwkgIHJldHVy biBleHBhbmRfZGl2bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwgR0VUX01PREUgKHZhbHVlKSwNCj4g PiBOVUxMLCBOVUxMLA0KPiA+ICsJCQkJb3AxLCBvcDIsIHRhcmdldCwgMSk7DQo+ID4gIAljYXNl IFVNT0Q6DQo+ID4gLQkgIHJldHVybiBleHBhbmRfZGl2bW9kICgxLCBUUlVOQ19NT0RfRVhQUiwg R0VUX01PREUgKHZhbHVlKSwNCj4gPiBvcDEsIG9wMiwNCj4gPiAtCQkJCXRhcmdldCwgMSk7DQo+ ID4gKwkgIHJldHVybiBleHBhbmRfZGl2bW9kICgxLCBUUlVOQ19NT0RfRVhQUiwgR0VUX01PREUg KHZhbHVlKSwNCj4gPiBOVUxMLCBOVUxMLA0KPiA+ICsJCQkJb3AxLCBvcDIsIHRhcmdldCwgMSk7 DQo+ID4gIAljYXNlIEFTSElGVFJUOg0KPiA+ICAJICByZXR1cm4gZXhwYW5kX3NpbXBsZV9iaW5v cCAoR0VUX01PREUgKHZhbHVlKSwgY29kZSwgb3AxLCBvcDIsDQo+ID4gIAkJCQkgICAgICB0YXJn ZXQsIDAsIE9QVEFCX0xJQl9XSURFTik7IEBAIC0NCj4gODk5MCwxMSArODk5MSwxMyBAQA0KPiA+ IGV4cGFuZF9leHByX2Rpdm1vZCAodHJlZV9jb2RlIGNvZGUsIG1hY2hpbmVfbW9kZSBtb2RlLCB0 cmVlDQo+IHRyZWVvcDAsDQo+ID4gICAgICAgIGJvb2wgc3BlZWRfcCA9IG9wdGltaXplX2luc25f Zm9yX3NwZWVkX3AgKCk7DQo+ID4gICAgICAgIGRvX3BlbmRpbmdfc3RhY2tfYWRqdXN0ICgpOw0K PiA+ICAgICAgICBzdGFydF9zZXF1ZW5jZSAoKTsNCj4gPiAtICAgICAgcnR4IHVuc19yZXQgPSBl eHBhbmRfZGl2bW9kIChtb2RfcCwgY29kZSwgbW9kZSwgb3AwLCBvcDEsIHRhcmdldCwNCj4gMSk7 DQo+ID4gKyAgICAgIHJ0eCB1bnNfcmV0ID0gZXhwYW5kX2Rpdm1vZCAobW9kX3AsIGNvZGUsIG1v ZGUsIHRyZWVvcDAsIHRyZWVvcDEsDQo+ID4gKwkJCQkgICBvcDAsIG9wMSwgdGFyZ2V0LCAxKTsN Cj4gPiAgICAgICAgcnR4X2luc24gKnVuc19pbnNucyA9IGdldF9pbnNucyAoKTsNCj4gPiAgICAg ICAgZW5kX3NlcXVlbmNlICgpOw0KPiA+ICAgICAgICBzdGFydF9zZXF1ZW5jZSAoKTsNCj4gPiAt ICAgICAgcnR4IHNnbl9yZXQgPSBleHBhbmRfZGl2bW9kIChtb2RfcCwgY29kZSwgbW9kZSwgb3Aw LCBvcDEsIHRhcmdldCwNCj4gMCk7DQo+ID4gKyAgICAgIHJ0eCBzZ25fcmV0ID0gZXhwYW5kX2Rp dm1vZCAobW9kX3AsIGNvZGUsIG1vZGUsIHRyZWVvcDAsIHRyZWVvcDEsDQo+ID4gKwkJCQkgICBv cDAsIG9wMSwgdGFyZ2V0LCAwKTsNCj4gPiAgICAgICAgcnR4X2luc24gKnNnbl9pbnNucyA9IGdl dF9pbnNucyAoKTsNCj4gPiAgICAgICAgZW5kX3NlcXVlbmNlICgpOw0KPiA+ICAgICAgICB1bnNp Z25lZCB1bnNfY29zdCA9IHNlcV9jb3N0ICh1bnNfaW5zbnMsIHNwZWVkX3ApOyBAQCAtOTAxNiw3 DQo+ID4gKzkwMTksOCBAQCBleHBhbmRfZXhwcl9kaXZtb2QgKHRyZWVfY29kZSBjb2RlLCBtYWNo aW5lX21vZGUNCj4gbW9kZSwgdHJlZQ0KPiA+IHRyZWVvcDAsDQo+ID4gICAgICAgIGVtaXRfaW5z biAoc2duX2luc25zKTsNCj4gPiAgICAgICAgcmV0dXJuIHNnbl9yZXQ7DQo+ID4gICAgICB9DQo+ ID4gLSAgcmV0dXJuIGV4cGFuZF9kaXZtb2QgKG1vZF9wLCBjb2RlLCBtb2RlLCBvcDAsIG9wMSwg dGFyZ2V0LA0KPiA+IHVuc2lnbmVkcCk7DQo+ID4gKyAgcmV0dXJuIGV4cGFuZF9kaXZtb2QgKG1v ZF9wLCBjb2RlLCBtb2RlLCB0cmVlb3AwLCB0cmVlb3AxLA0KPiA+ICsJCQlvcDAsIG9wMSwgdGFy Z2V0LCB1bnNpZ25lZHApOw0KPiA+ICB9DQo+ID4NCj4gPiAgcnR4DQo+ID4gZGlmZiAtLWdpdCBh L2djYy9vcHRhYnMuY2MgYi9nY2Mvb3B0YWJzLmNjIGluZGV4DQo+ID4NCj4gMTY1ZjhkMWZhMjI0 MzJiOTY5NjdjNjlhNThkYmI3YjRiZjE4MTIwZC4uY2ZmMzdjY2IwZGZjM2RkNzliOTdkMGFiZmQN Cj4gPiA4NzJmMzQwODU1ZGM5NiAxMDA2NDQNCj4gPiAtLS0gYS9nY2Mvb3B0YWJzLmNjDQo+ID4g KysrIGIvZ2NjL29wdGFicy5jYw0KPiA+IEBAIC0xMTA0LDggKzExMDQsOSBAQCBleHBhbmRfZG91 Ymxld29yZF9tb2QgKG1hY2hpbmVfbW9kZQ0KPiBtb2RlLCBydHgNCj4gPiBvcDAsIHJ0eCBvcDEs IGJvb2wgdW5zaWduZWRwKQ0KPiA+ICAJCXJldHVybiBOVUxMX1JUWDsNCj4gPiAgCSAgICB9DQo+ ID4gIAl9DQo+ID4gLSAgICAgIHJ0eCByZW1haW5kZXIgPSBleHBhbmRfZGl2bW9kICgxLCBUUlVO Q19NT0RfRVhQUiwgd29yZF9tb2RlLA0KPiA+IHN1bSwNCj4gPiAtCQkJCSAgICAgZ2VuX2ludF9t b2RlIChJTlRWQUwgKG9wMSksDQo+ID4gd29yZF9tb2RlKSwNCj4gPiArICAgICAgcnR4IHJlbWFp bmRlciA9IGV4cGFuZF9kaXZtb2QgKDEsIFRSVU5DX01PRF9FWFBSLCB3b3JkX21vZGUsDQo+ID4g TlVMTCwgTlVMTCwNCj4gPiArCQkJCSAgICAgc3VtLCBnZW5faW50X21vZGUgKElOVFZBTCAob3Ax KSwNCj4gPiArCQkJCQkJCXdvcmRfbW9kZSksDQo+ID4gIAkJCQkgICAgIE5VTExfUlRYLCAxLCBP UFRBQl9ESVJFQ1QpOw0KPiA+ICAgICAgICBpZiAocmVtYWluZGVyID09IE5VTExfUlRYKQ0KPiA+ ICAJcmV0dXJuIE5VTExfUlRYOw0KPiA+IEBAIC0xMjA4LDggKzEyMDksOCBAQCBleHBhbmRfZG91 Ymxld29yZF9kaXZtb2QgKG1hY2hpbmVfbW9kZQ0KPiBtb2RlLCBydHgNCj4gPiBvcDAsIHJ0eCBv cDEsIHJ0eCAqcmVtLA0KPiA+DQo+ID4gICAgaWYgKG9wMTEgIT0gY29uc3QxX3J0eCkNCj4gPiAg ICAgIHsNCj4gPiAtICAgICAgcnR4IHJlbTIgPSBleHBhbmRfZGl2bW9kICgxLCBUUlVOQ19NT0Rf RVhQUiwgbW9kZSwgcXVvdDEsDQo+IG9wMTEsDQo+ID4gLQkJCQlOVUxMX1JUWCwgdW5zaWduZWRw LCBPUFRBQl9ESVJFQ1QpOw0KPiA+ICsgICAgICBydHggcmVtMiA9IGV4cGFuZF9kaXZtb2QgKDEs IFRSVU5DX01PRF9FWFBSLCBtb2RlLCBOVUxMLA0KPiBOVUxMLA0KPiA+IHF1b3QxLA0KPiA+ICsJ CQkJb3AxMSwgTlVMTF9SVFgsIHVuc2lnbmVkcCwNCj4gPiBPUFRBQl9ESVJFQ1QpOw0KPiA+ICAg ICAgICBpZiAocmVtMiA9PSBOVUxMX1JUWCkNCj4gPiAgCXJldHVybiBOVUxMX1JUWDsNCj4gPg0K PiA+IEBAIC0xMjIzLDggKzEyMjQsOCBAQCBleHBhbmRfZG91Ymxld29yZF9kaXZtb2QgKG1hY2hp bmVfbW9kZQ0KPiBtb2RlLCBydHgNCj4gPiBvcDAsIHJ0eCBvcDEsIHJ0eCAqcmVtLA0KPiA+ICAg ICAgICBpZiAocmVtMiA9PSBOVUxMX1JUWCkNCj4gPiAgCXJldHVybiBOVUxMX1JUWDsNCj4gPg0K PiA+IC0gICAgICBydHggcXVvdDIgPSBleHBhbmRfZGl2bW9kICgwLCBUUlVOQ19ESVZfRVhQUiwg bW9kZSwgcXVvdDEsIG9wMTEsDQo+ID4gLQkJCQkgTlVMTF9SVFgsIHVuc2lnbmVkcCwgT1BUQUJf RElSRUNUKTsNCj4gPiArICAgICAgcnR4IHF1b3QyID0gZXhwYW5kX2Rpdm1vZCAoMCwgVFJVTkNf RElWX0VYUFIsIG1vZGUsIE5VTEwsIE5VTEwsDQo+ID4gcXVvdDEsDQo+ID4gKwkJCQkgb3AxMSwg TlVMTF9SVFgsIHVuc2lnbmVkcCwNCj4gPiBPUFRBQl9ESVJFQ1QpOw0KPiA+ICAgICAgICBpZiAo cXVvdDIgPT0gTlVMTF9SVFgpDQo+ID4gIAlyZXR1cm4gTlVMTF9SVFg7DQo+ID4NCj4gPiBkaWZm IC0tZ2l0IGEvZ2NjL3RhcmdldC5kZWYgYi9nY2MvdGFyZ2V0LmRlZiBpbmRleA0KPiA+DQo+IDJh N2ZhNjhmODNkZDE1ZGNkZDJjMzMyZTg0MzFlNjE0MmVjN2QzMDUuLjkyZWJkMmFmMThmZThhYmI2 ZWQ5NWIwNzANCj4gPiA4MWNkZDcwMTEzZGI5YjEgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL3Rhcmdl dC5kZWYNCj4gPiArKysgYi9nY2MvdGFyZ2V0LmRlZg0KPiA+IEBAIC0xOTAyLDYgKzE5MDIsMjUg QEAgaW1wbGVtZW50YXRpb24gYXBwcm9hY2hlcyBpdHNlbGYuIiwNCj4gPiAgCWNvbnN0IHZlY19w ZXJtX2luZGljZXMgJnNlbCksDQo+ID4gICBOVUxMKQ0KPiA+DQo+ID4gK0RFRkhPT0sNCj4gPiAr KGNhbl9zcGVjaWFsX2Rpdl9ieV9jb25zdCwNCj4gPiArICJUaGlzIGhvb2sgaXMgdXNlZCB0byB0 ZXN0IHdoZXRoZXIgdGhlIHRhcmdldCBoYXMgYSBzcGVjaWFsIG1ldGhvZA0KPiA+ICtvZlxuXCBk aXZpc2lvbiBvZiB2ZWN0b3JzIG9mIHR5cGUgQHZhcnt2ZWN0eXBlfSB1c2luZyB0aGUgdHdvDQo+ ID4gK29wZXJhbmRzIEBjb2Rle3RyZWVvcDB9LFxuXCBhbmQgQGNvZGV7dHJlZW9wMX0gYW5kIHBy b2R1Y2luZyBhDQo+IHZlY3Rvcg0KPiA+ICtvZiB0eXBlIEB2YXJ7dmVjdHlwZX0uICBUaGUgZGl2 aXNpb25cblwgd2lsbCB0aGVuIG5vdCBiZSBkZWNvbXBvc2VkDQo+ID4gK2J5IHRoZSBhbmQga2Vw dCBhcyBhIGRpdi5cblwgXG5cIFdoZW4gdGhlIGhvb2sgaXMgYmVpbmcgdXNlZCB0byB0ZXN0DQo+ ID4gK3doZXRoZXIgdGhlIHRhcmdldCBzdXBwb3J0cyBhIHNwZWNpYWxcblwgZGl2aWRlLCBAdmFy e2luMH0sDQo+ID4gK0B2YXJ7aW4xfSwgYW5kIEB2YXJ7b3V0cHV0fSBhcmUgYWxsIG51bGwuICBX aGVuIHRoZSBob29rXG5cIGlzIGJlaW5nDQo+ID4gK3VzZWQgdG8gZW1pdCBhIGRpdmlzaW9uLCBA dmFye2luMH0gYW5kIEB2YXJ7aW4xfSBhcmUgdGhlIHNvdXJjZVxuXA0KPiA+ICt2ZWN0b3JzIG9m IHR5cGUgQHZhcnt2ZWN0dHlwZX0gYW5kIEB2YXJ7b3V0cHV0fSBpcyB0aGUgZGVzdGluYXRpb24N Cj4gPiArdmVjdG9yIG9mXG5cIHR5cGUgQHZhcnt2ZWN0eXBlfS5cblwgXG5cIFJldHVybiB0cnVl IGlmIHRoZSBvcGVyYXRpb24NCj4gPiAraXMgcG9zc2libGUsIGVtaXR0aW5nIGluc3RydWN0aW9u cyBmb3IgaXRcblwgaWYgcnR4ZXMgYXJlIHByb3ZpZGVkDQo+ID4gK2FuZCB1cGRhdGluZyBAdmFy e291dHB1dH0uIiwgIGJvb2wsIChlbnVtIHRyZWVfY29kZSwgdHJlZSB2ZWN0eXBlLA0KPiA+ICt0 cmVlIHRyZWVvcDAsIHRyZWUgdHJlZW9wMSwgcnR4ICpvdXRwdXQsDQo+ID4gKwlydHggaW4wLCBy dHggaW4xKSwNCj4gPiArIGRlZmF1bHRfY2FuX3NwZWNpYWxfZGl2X2J5X2NvbnN0KQ0KPiA+ICsN Cj4gPiAgLyogUmV0dXJuIHRydWUgaWYgdGhlIHRhcmdldCBzdXBwb3J0cyBtaXNhbGlnbmVkIHN0 b3JlL2xvYWQgb2YgYQ0KPiA+ICAgICBzcGVjaWZpYyBmYWN0b3IgZGVub3RlZCBpbiB0aGUgdGhp cmQgcGFyYW1ldGVyLiAgVGhlIGxhc3QgcGFyYW1ldGVyDQo+ID4gICAgIGlzIHRydWUgaWYgdGhl IGFjY2VzcyBpcyBkZWZpbmVkIGluIGEgcGFja2VkIHN0cnVjdC4gICovIGRpZmYNCj4gPiAtLWdp dCBhL2djYy90YXJnZXQuaCBiL2djYy90YXJnZXQuaCBpbmRleA0KPiA+DQo+IGQ2ZmE2OTMxNDk5 ZDE1ZWRmZjNlNWFmM2U0Mjk1NDBkMDAxYzcwNTguLmM4MzYwMzZhYzdmYTc5MTBkNjJiZDNkYTU2 DQo+ID4gZjM5YzA2MWY2OGI2NjUgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL3RhcmdldC5oDQo+ID4g KysrIGIvZ2NjL3RhcmdldC5oDQo+ID4gQEAgLTUxLDYgKzUxLDcgQEANCj4gPiAgI2luY2x1ZGUg Imluc24tY29kZXMuaCINCj4gPiAgI2luY2x1ZGUgInRtLmgiDQo+ID4gICNpbmNsdWRlICJoYXJk LXJlZy1zZXQuaCINCj4gPiArI2luY2x1ZGUgInRyZWUtY29yZS5oIg0KPiA+DQo+ID4gICNpZiBD SEVDS0lOR19QDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rhcmdob29rcy5oIGIvZ2NjL3Rh cmdob29rcy5oIGluZGV4DQo+ID4NCj4gZWNjZTU1ZWJlNzk3Y2VkYzk0MDYyMGU4ZDg5ODE2OTcz YTA0NWQ0OS4uNDI0NTFhM2UyMmU4NmZlZTlkYTJmNTZlDQo+ID4gMjY0MGQ2M2Y5MzZiMzM2ZCAx MDA2NDQNCj4gPiAtLS0gYS9nY2MvdGFyZ2hvb2tzLmgNCj4gPiArKysgYi9nY2MvdGFyZ2hvb2tz LmgNCj4gPiBAQCAtMjA3LDYgKzIwNyw4IEBAIGV4dGVybiB2b2lkIGRlZmF1bHRfYWRkcl9zcGFj ZV9kaWFnbm9zZV91c2FnZQ0KPiA+IChhZGRyX3NwYWNlX3QsIGxvY2F0aW9uX3QpOyAgZXh0ZXJu IHJ0eCBkZWZhdWx0X2FkZHJfc3BhY2VfY29udmVydA0KPiA+IChydHgsIHRyZWUsIHRyZWUpOyAg ZXh0ZXJuIHVuc2lnbmVkIGludCBkZWZhdWx0X2Nhc2VfdmFsdWVzX3RocmVzaG9sZA0KPiA+ICh2 b2lkKTsgZXh0ZXJuIGJvb2wgZGVmYXVsdF9oYXZlX2NvbmRpdGlvbmFsX2V4ZWN1dGlvbiAodm9p ZCk7DQo+ID4gK2V4dGVybiBib29sIGRlZmF1bHRfY2FuX3NwZWNpYWxfZGl2X2J5X2NvbnN0IChl bnVtIHRyZWVfY29kZSwgdHJlZSwNCj4gPiB0cmVlLCB0cmVlLA0KPiA+ICsJCQkJCSAgICAgIHJ0 eCAqLCBydHgsIHJ0eCk7DQo+ID4NCj4gPiAgZXh0ZXJuIGJvb2wgZGVmYXVsdF9saWJjX2hhc19m dW5jdGlvbiAoZW51bSBmdW5jdGlvbl9jbGFzcywgdHJlZSk7DQo+ID4gZXh0ZXJuIGJvb2wgZGVm YXVsdF9saWJjX2hhc19mYXN0X2Z1bmN0aW9uIChpbnQgZmNvZGUpOyBkaWZmIC0tZ2l0DQo+ID4g YS9nY2MvdGFyZ2hvb2tzLmNjIGIvZ2NjL3Rhcmdob29rcy5jYyBpbmRleA0KPiA+DQo+IGIxNWFl MTliY2I2MGM1OWFlODExMmU2N2I1ZjA2YTI0MWE5YmRiZjEuLjgyMDY1MzMzODI2MTFhNzY0MGVm YmEyNDENCj4gPiAyNzk5MzZjZWQ0MWVlOTUgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL3Rhcmdob29r cy5jYw0KPiA+ICsrKyBiL2djYy90YXJnaG9va3MuY2MNCj4gPiBAQCAtMTgwNyw2ICsxODA3LDE0 IEBAIGRlZmF1bHRfaGF2ZV9jb25kaXRpb25hbF9leGVjdXRpb24gKHZvaWQpDQo+ID4gICAgcmV0 dXJuIEhBVkVfY29uZGl0aW9uYWxfZXhlY3V0aW9uOw0KPiA+ICB9DQo+ID4NCj4gPiArLyogRGVm YXVsdCB0aGF0IG5vIGRpdmlzaW9uIGJ5IGNvbnN0YW50IG9wZXJhdGlvbnMgYXJlIHNwZWNpYWwu ICAqLw0KPiA+ICtib29sIGRlZmF1bHRfY2FuX3NwZWNpYWxfZGl2X2J5X2NvbnN0IChlbnVtIHRy ZWVfY29kZSwgdHJlZSwgdHJlZSwNCj4gPiArdHJlZSwgcnR4ICosIHJ0eCwNCj4gPiArCQkJCSAg cnR4KQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAv KiBCeSBkZWZhdWx0IHdlIGFzc3VtZSB0aGF0IGM5OSBmdW5jdGlvbnMgYXJlIHByZXNlbnQgYXQg dGhlIHJ1bnRpbWUsDQo+ID4gICAgIGJ1dCBzaW5jb3MgaXMgbm90LiAgKi8NCj4gPiAgYm9vbA0K PiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZGl2LWJpdG1h c2stMS5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZGl2LWJpdG1hc2st MS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MmNkNzEwNTM0YmM4YWE5YjFiNDkx NmYzDQo+ID4gZDdiNGQ1YjY0YTE5YjkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWRpdi1iaXRtYXNrLTEuYw0KPiA+IEBAIC0wLDAg KzEsMjUgQEANCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQg fSAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiA+ICsjaW5jbHVkZSAidHJl ZS12ZWN0LmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE4gNTANCj4gPiArI2RlZmluZSBUWVBFIHVp bnQ4X3QNCj4gPiArDQo+ID4gK19fYXR0cmlidXRlX18oKG5vaXBhLCBub2lubGluZSwgb3B0aW1p emUoIk8xIikpKSB2b2lkIGZ1bjEoVFlQRSoNCj4gPiArcmVzdHJpY3QgcGl4ZWwsIFRZUEUgbGV2 ZWwsIGludCBuKSB7DQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKz0xKQ0KPiA+ICsg ICAgcGl4ZWxbaV0gPSAocGl4ZWxbaV0gKiBsZXZlbCkgLyAweGZmOyB9DQo+ID4gKw0KPiA+ICtf X2F0dHJpYnV0ZV9fKChub2lwYSwgbm9pbmxpbmUsIG9wdGltaXplKCJPMyIpKSkgdm9pZCBmdW4y KFRZUEUqDQo+ID4gK3Jlc3RyaWN0IHBpeGVsLCBUWVBFIGxldmVsLCBpbnQgbikgew0KPiA+ICsg IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSs9MSkNCj4gPiArICAgIHBpeGVsW2ldID0gKHBpeGVs W2ldICogbGV2ZWwpIC8gMHhmZjsgfQ0KPiA+ICsNCj4gPiArI2luY2x1ZGUgInZlY3QtZGl2LWJp dG1hc2suaCINCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3Qg InZlY3RfcmVjb2dfZGl2bW9kX3BhdHRlcm46DQo+ID4gK2RldGVjdGVkIiAidmVjdCIgeyB0YXJn ZXQgYWFyY2g2NCotKi0qIH0gfSB9ICovDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3ZlY3QvdmVjdC1kaXYtYml0bWFzay0yLmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1kaXYtYml0bWFzay0yLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uZTkwNGE3MTg4NWIyZTg0ODc1OTNhMmNkMw0KPiA+IGRiNzViM2U0MTEyZTJjYw0KPiA+IC0t LSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZGl2 LWJpdG1hc2stMi5jDQo+ID4gQEAgLTAsMCArMSwyNSBAQA0KPiA+ICsvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8c3Rk aW50Lmg+DQo+ID4gKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCINCj4gPiArDQo+ID4gKyNkZWZpbmUg TiA1MA0KPiA+ICsjZGVmaW5lIFRZUEUgdWludDE2X3QNCj4gPiArDQo+ID4gK19fYXR0cmlidXRl X18oKG5vaXBhLCBub2lubGluZSwgb3B0aW1pemUoIk8xIikpKSB2b2lkIGZ1bjEoVFlQRSoNCj4g PiArcmVzdHJpY3QgcGl4ZWwsIFRZUEUgbGV2ZWwsIGludCBuKSB7DQo+ID4gKyAgZm9yIChpbnQg aSA9IDA7IGkgPCBuOyBpKz0xKQ0KPiA+ICsgICAgcGl4ZWxbaV0gPSAocGl4ZWxbaV0gKiBsZXZl bCkgLyAweGZmZmZVOyB9DQo+ID4gKw0KPiA+ICtfX2F0dHJpYnV0ZV9fKChub2lwYSwgbm9pbmxp bmUsIG9wdGltaXplKCJPMyIpKSkgdm9pZCBmdW4yKFRZUEUqDQo+ID4gK3Jlc3RyaWN0IHBpeGVs LCBUWVBFIGxldmVsLCBpbnQgbikgew0KPiA+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSs9 MSkNCj4gPiArICAgIHBpeGVsW2ldID0gKHBpeGVsW2ldICogbGV2ZWwpIC8gMHhmZmZmVTsgfQ0K PiA+ICsNCj4gPiArI2luY2x1ZGUgInZlY3QtZGl2LWJpdG1hc2suaCINCj4gPiArDQo+ID4gKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgInZlY3RfcmVjb2dfZGl2bW9kX3BhdHRl cm46DQo+ID4gK2RldGVjdGVkIiAidmVjdCIgeyB0YXJnZXQgYWFyY2g2NCotKi0qIH0gfSB9ICov DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1kaXYtYml0 bWFzay0zLmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1kaXYtYml0bWFz ay0zLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE0MThlYmJmNWVhODczMWVkNGUz ZTcyMA0KPiA+IDE1NzcwMWQ5ZDFjZjg1Mg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZGl2LWJpdG1hc2stMy5jDQo+ID4gQEAgLTAs MCArMSwyNiBAQA0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2lu dCB9ICovDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZm5vLXZlY3QtY29zdC1t b2RlbCIgeyB0YXJnZXQNCj4gPiArYWFyY2g2NCotKi0qIH0gfSAqLw0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgPHN0ZGludC5oPg0KPiA+ICsjaW5jbHVkZSAidHJlZS12ZWN0LmgiDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIE4gNTANCj4gPiArI2RlZmluZSBUWVBFIHVpbnQzMl90DQo+ID4gKw0KPiA+ICtf X2F0dHJpYnV0ZV9fKChub2lwYSwgbm9pbmxpbmUsIG9wdGltaXplKCJPMSIpKSkgdm9pZCBmdW4x KFRZUEUqDQo+ID4gK3Jlc3RyaWN0IHBpeGVsLCBUWVBFIGxldmVsLCBpbnQgbikgew0KPiA+ICsg IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSs9MSkNCj4gPiArICAgIHBpeGVsW2ldID0gKHBpeGVs W2ldICogKHVpbnQ2NF90KWxldmVsKSAvIDB4ZmZmZmZmZmZVTDsgfQ0KPiA+ICsNCj4gPiArX19h dHRyaWJ1dGVfXygobm9pcGEsIG5vaW5saW5lLCBvcHRpbWl6ZSgiTzMiKSkpIHZvaWQgZnVuMihU WVBFKg0KPiA+ICtyZXN0cmljdCBwaXhlbCwgVFlQRSBsZXZlbCwgaW50IG4pIHsNCj4gPiArICBm b3IgKGludCBpID0gMDsgaSA8IG47IGkrPTEpDQo+ID4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtp XSAqICh1aW50NjRfdClsZXZlbCkgLyAweGZmZmZmZmZmVUw7IH0NCj4gPiArDQo+ID4gKyNpbmNs dWRlICJ2ZWN0LWRpdi1iaXRtYXNrLmgiDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtbm90ICJ2ZWN0X3JlY29nX2Rpdm1vZF9wYXR0ZXJuOg0KPiA+ICtkZXRlY3Rl ZCIgInZlY3QiIHsgdGFyZ2V0IGFhcmNoNjQqLSotKiB9IH0gfSAqLw0KPiA+IGRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZGl2LWJpdG1hc2suaA0KPiA+IGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWRpdi1iaXRtYXNrLmgNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uMjlhMTY3MzlhYTRiNzA2NjE2MzY3YmZkMQ0KPiA+IDgzMmYyOGViZDA3 OTkzZQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZGl2LWJpdG1hc2suaA0KPiA+IEBAIC0wLDAgKzEsNDMgQEANCj4gPiArI2luY2x1 ZGUgPHN0ZGlvLmg+DQo+ID4gKw0KPiA+ICsjaWZuZGVmIE4NCj4gPiArI2RlZmluZSBOIDY1DQo+ ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2lmbmRlZiBUWVBFDQo+ID4gKyNkZWZpbmUgVFlQRSB1 aW50MzJfdA0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNpZm5kZWYgREVCVUcNCj4gPiArI2Rl ZmluZSBERUJVRyAwDQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2RlZmluZSBCQVNFICgoVFlQ RSkgLTEgPCAwID8gLTEyNiA6IDQpDQo+ID4gKw0KPiA+ICtpbnQgbWFpbiAoKQ0KPiA+ICt7DQo+ ID4gKyAgVFlQRSBhW05dOw0KPiA+ICsgIFRZUEUgYltOXTsNCj4gPiArDQo+ID4gKyAgZm9yIChp bnQgaSA9IDA7IGkgPCBOOyArK2kpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIGFbaV0gPSBCQVNF ICsgaSAqIDEzOw0KPiA+ICsgICAgICBiW2ldID0gQkFTRSArIGkgKiAxMzsNCj4gPiArICAgICAg aWYgKERFQlVHKQ0KPiA+ICsgICAgICAgIHByaW50ZiAoIiVkOiAweCV4XG4iLCBpLCBhW2ldKTsN Cj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgZnVuMSAoYSwgTiAvIDIsIE4pOw0KPiA+ICsgIGZ1 bjIgKGIsIE4gLyAyLCBOKTsNCj4gPiArDQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyAr K2kpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIGlmIChERUJVRykNCj4gPiArICAgICAgICBwcmlu dGYgKCIlZCA9IDB4JXggPT0gMHgleFxuIiwgaSwgYVtpXSwgYltpXSk7DQo+ID4gKw0KPiA+ICsg ICAgICBpZiAoYVtpXSAhPSBiW2ldKQ0KPiA+ICsgICAgICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsN Cj4gPiArICAgIH0NCj4gPiArICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiBkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZGl2LWJ5LWJpdG1hc2suYw0K PiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZGl2LWJ5LWJpdG1hc2suYw0K PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTUzNTc5MWJhNzI1ODMwMmUwYzJjZjQ0YQ0K PiA+IGIyMTFjZDI0NmQ4MmQ1DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2Rpdi1ieS1iaXRtYXNrLmMNCj4gPiBAQCAtMCwwICsx LDYxIEBADQo+ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctYWRkaXRp b25hbC1vcHRpb25zICItTzMgLXN0ZD1jOTkiIH0gKi8NCj4gPiArLyogeyBkZy1maW5hbCB7IGNo ZWNrLWZ1bmN0aW9uLWJvZGllcyAiKioiICIiICIiIHsgdGFyZ2V0IHsgbGUgfSB9IH0NCj4gPiAr fSAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiA+ICsNCj4gPiArI3ByYWdt YSBHQ0MgdGFyZ2V0ICIrbm9zdmUiDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsqKiBkcmF3X2JpdG1h cDE6DQo+ID4gKyoqIC4uLg0KPiA+ICsqKiAJYWRkaG4JdlswLTldKy44YiwgdlswLTldKy44aCwg dlswLTldKy44aA0KPiA+ICsqKiAJYWRkaG4JdlswLTldKy44YiwgdlswLTldKy44aCwgdlswLTld Ky44aA0KPiA+ICsqKiAJdWFkZHcJdlswLTldKy44aCwgdlswLTldKy44aCwgdlswLTldKy44Yg0K PiA+ICsqKiAJdWFkZHcJdlswLTldKy44aCwgdlswLTldKy44aCwgdlswLTldKy44Yg0KPiA+ICsq KiAJdXpwMgl2WzAtOV0rLjE2YiwgdlswLTldKy4xNmIsIHZbMC05XSsuMTZiDQo+ID4gKyoqIC4u Lg0KPiA+ICsqLw0KPiA+ICt2b2lkIGRyYXdfYml0bWFwMSh1aW50OF90KiByZXN0cmljdCBwaXhl bCwgdWludDhfdCBsZXZlbCwgaW50IG4pIHsNCj4gPiArICBmb3IgKGludCBpID0gMDsgaSA8IChu ICYgLTE2KTsgaSs9MSkNCj4gPiArICAgIHBpeGVsW2ldID0gKHBpeGVsW2ldICogbGV2ZWwpIC8g MHhmZjsgfQ0KPiA+ICsNCj4gPiArdm9pZCBkcmF3X2JpdG1hcDIodWludDhfdCogcmVzdHJpY3Qg cGl4ZWwsIHVpbnQ4X3QgbGV2ZWwsIGludCBuKSB7DQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkg PCAobiAmIC0xNik7IGkrPTEpDQo+ID4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtpXSAqIGxldmVs KSAvIDB4ZmU7IH0NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyoqIGRyYXdfYml0bWFwMzoNCj4gPiAr KiogLi4uDQo+ID4gKyoqIAlhZGRobgl2WzAtOV0rLjRoLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRz DQo+ID4gKyoqIAlhZGRobgl2WzAtOV0rLjRoLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRzDQo+ID4g KyoqIAl1YWRkdwl2WzAtOV0rLjRzLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRoDQo+ID4gKyoqIAl1 YWRkdwl2WzAtOV0rLjRzLCB2WzAtOV0rLjRzLCB2WzAtOV0rLjRoDQo+ID4gKyoqIAl1enAyCXZb MC05XSsuOGgsIHZbMC05XSsuOGgsIHZbMC05XSsuOGgNCj4gPiArKiogLi4uDQo+ID4gKyovDQo+ ID4gK3ZvaWQgZHJhd19iaXRtYXAzKHVpbnQxNl90KiByZXN0cmljdCBwaXhlbCwgdWludDE2X3Qg bGV2ZWwsIGludCBuKSB7DQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAobiAmIC0xNik7IGkr PTEpDQo+ID4gKyAgICBwaXhlbFtpXSA9IChwaXhlbFtpXSAqIGxldmVsKSAvIDB4ZmZmZlU7IH0N Cj4gPiArDQo+ID4gKy8qDQo+ID4gKyoqIGRyYXdfYml0bWFwNDoNCj4gPiArKiogLi4uDQo+ID4g KyoqIAlhZGRobgl2WzAtOV0rLjJzLCB2WzAtOV0rLjJkLCB2WzAtOV0rLjJkDQo+ID4gKyoqIAlh ZGRobgl2WzAtOV0rLjJzLCB2WzAtOV0rLjJkLCB2WzAtOV0rLjJkDQo+ID4gKyoqIAl1YWRkdwl2 WzAtOV0rLjJkLCB2WzAtOV0rLjJkLCB2WzAtOV0rLjJzDQo+ID4gKyoqIAl1YWRkdwl2WzAtOV0r LjJkLCB2WzAtOV0rLjJkLCB2WzAtOV0rLjJzDQo+ID4gKyoqIAl1enAyCXZbMC05XSsuNHMsIHZb MC05XSsuNHMsIHZbMC05XSsuNHMNCj4gPiArKiogLi4uDQo+ID4gKyovDQo+ID4gK3ZvaWQgZHJh d19iaXRtYXA0KHVpbnQzMl90KiByZXN0cmljdCBwaXhlbCwgdWludDMyX3QgbGV2ZWwsIGludCBu KSB7DQo+ID4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAobiAmIC0xNik7IGkrPTEpDQo+ID4gKyAg ICBwaXhlbFtpXSA9IChwaXhlbFtpXSAqICh1aW50NjRfdClsZXZlbCkgLyAweGZmZmZmZmZmVUw7 IH0NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1nZW5lcmljLmNjIGIvZ2NjL3RyZWUt dmVjdC1nZW5lcmljLmNjIGluZGV4DQo+ID4NCj4gMzUwMTI5NTU1YTBjNzFjMDg5NmM0ZjEwMDMx NjNmM2IzNTU3YzExYi4uZWJlZTVlMjRiMTg2OTE1ZWJjYjNhODE3Yw0KPiA+IDlhMTIwNDZiNmVj OTRmMyAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJlZS12ZWN0LWdlbmVyaWMuY2MNCj4gPiArKysg Yi9nY2MvdHJlZS12ZWN0LWdlbmVyaWMuY2MNCj4gPiBAQCAtMTIzNyw2ICsxMjM3LDE0IEBAIGV4 cGFuZF92ZWN0b3Jfb3BlcmF0aW9uDQo+IChnaW1wbGVfc3RtdF9pdGVyYXRvcg0KPiA+ICpnc2ks IHRyZWUgdHlwZSwgdHJlZSBjb21wdXRlX3R5cGUNCj4gPiAgCSAgdHJlZSByaHMyID0gZ2ltcGxl X2Fzc2lnbl9yaHMyIChhc3NpZ24pOw0KPiA+ICAJICB0cmVlIHJldDsNCj4gPg0KPiA+ICsJICAv KiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBnb2luZyB0byBoYW5kbGUgaXQgdGhyb3VnaCB0aGUg c3BlY2lhbA0KPiA+ICsJICAgICBkaXZpc2lvbiBjYWxsYmFjayBob29rLiAgKi8NCj4gPiArCSAg aWYgKHRhcmdldG0udmVjdG9yaXplLmNhbl9zcGVjaWFsX2Rpdl9ieV9jb25zdCAoY29kZSwgdHlw ZSwgcmhzMSwNCj4gPiArCQkJCQkJCSAgcmhzMiwgTlVMTCwNCj4gPiArCQkJCQkJCSAgTlVMTF9S VFgsDQo+ID4gTlVMTF9SVFgpKQ0KPiA+ICsJICAgIHJldHVybiBOVUxMX1RSRUU7DQo+ID4gKw0K PiA+ICsNCj4gPiAgCSAgaWYgKCFvcHRpbWl6ZQ0KPiA+ICAJICAgICAgfHwgIVZFQ1RPUl9JTlRF R0VSX1RZUEVfUCAodHlwZSkNCj4gPiAgCSAgICAgIHx8IFRSRUVfQ09ERSAocmhzMikgIT0gVkVD VE9SX0NTVCBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC0NCj4gPiBwYXR0ZXJucy5jYyBiL2dj Yy90cmVlLXZlY3QtcGF0dGVybnMuY2MgaW5kZXgNCj4gPg0KPiAwOTU3NGJiMWEyNjk2YjM0Mzhh NGNlOWYwOWY3NGI0MmU3ODRhY2EwLi42MDdhY2RmOTVlYjMwMzM1ZDhiYzBlODVhZg0KPiA+IDBi MWJmZWExMGZlNDQzIDEwMDY0NA0KPiA+IC0tLSBhL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MN Cj4gPiArKysgYi9nY2MvdHJlZS12ZWN0LXBhdHRlcm5zLmNjDQo+ID4gQEAgLTM1OTYsNiArMzU5 NiwxMiBAQCB2ZWN0X3JlY29nX2Rpdm1vZF9wYXR0ZXJuICh2ZWNfaW5mbyAqdmluZm8sDQo+ID4N Cj4gPiAgICAgICAgcmV0dXJuIHBhdHRlcm5fc3RtdDsNCj4gPiAgICAgIH0NCj4gPiArICBlbHNl IGlmICh0YXJnZXRtLnZlY3Rvcml6ZS5jYW5fc3BlY2lhbF9kaXZfYnlfY29uc3QgKHJoc19jb2Rl LCB2ZWN0eXBlLA0KPiA+ICsJCQkJCQkgICAgICAgb3BybmQwLCBvcHJuZDEsIE5VTEwsDQo+ID4g KwkJCQkJCSAgICAgICBOVUxMX1JUWCwgTlVMTF9SVFgpKQ0KPiA+ICsgICAgew0KPiA+ICsgICAg ICByZXR1cm4gTlVMTDsNCj4gPiArICAgIH0NCj4gPg0KPiA+ICAgIGlmIChwcmVjID4gSE9TVF9C SVRTX1BFUl9XSURFX0lOVA0KPiA+ICAgICAgICB8fCBpbnRlZ2VyX3plcm9wIChvcHJuZDEpKQ0K PiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjIGIvZ2NjL3RyZWUtdmVjdC1z dG10cy5jYyBpbmRleA0KPiA+DQo+IGM5ZGFiMjE3ZjA1OWYxN2U5MWU5YTc1ODI1MjNlNjI3ZDdh NDViNjYuLjZkMDVjNDhhNzMzOWRlMDk0ZDcyODhiZDYNCj4gPiA4ZTBlMWMxZTkzZmFhZmUgMTAw NjQ0DQo+ID4gLS0tIGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYw0KPiA+ICsrKyBiL2djYy90cmVl LXZlY3Qtc3RtdHMuY2MNCj4gPiBAQCAtNjI2MCw2ICs2MjYwLDExIEBAIHZlY3Rvcml6YWJsZV9v cGVyYXRpb24gKHZlY19pbmZvICp2aW5mbywNCj4gPiAgCX0NCj4gPiAgICAgICAgdGFyZ2V0X3N1 cHBvcnRfcCA9IChvcHRhYl9oYW5kbGVyIChvcHRhYiwgdmVjX21vZGUpDQo+ID4gIAkJCSAgIT0g Q09ERV9GT1Jfbm90aGluZyk7DQo+ID4gKyAgICAgIGlmICghdGFyZ2V0X3N1cHBvcnRfcCkNCj4g PiArCXRhcmdldF9zdXBwb3J0X3ANCj4gPiArCSAgPSB0YXJnZXRtLnZlY3Rvcml6ZS5jYW5fc3Bl Y2lhbF9kaXZfYnlfY29uc3QgKGNvZGUsIHZlY3R5cGUsDQo+ID4gKwkJCQkJCQlvcDAsIG9wMSwg TlVMTCwNCj4gPiArCQkJCQkJCU5VTExfUlRYLA0KPiA+IE5VTExfUlRYKTsNCj4gPiAgICAgIH0N Cj4gPg0KPiA+ICAgIGJvb2wgdXNpbmdfZW11bGF0ZWRfdmVjdG9yc19wID0gdmVjdF9lbXVsYXRl ZF92ZWN0b3JfcCAodmVjdHlwZSk7DQo+ID4NCj4gPg0KPiA+DQo+ID4NCj4gPiAtLQ0K