From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (EUR04-DB3-obe.outbound.protection.outlook.com [40.107.6.87]) by mx.groups.io with SMTP id smtpd.web10.10270.1678358588574748613 for ; Thu, 09 Mar 2023 02:43:09 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=eEwZlhrm; spf=pass (domain: arm.com, ip: 40.107.6.87, mailfrom: sami.mujawar@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=tiblAvxOBuAzQr/LzOV4rbEE+63yQAxqk9GLNsYtv8A=; b=eEwZlhrmeee5dZBp8TjjDxHmi60sZ/ElXHsfN6FVBdGEBQc7llTZ7v/Ea3FsaRkLCIOHiC8rVS2hXieerYLSVVmx+8+01n8pP/V/IQzJlEF4Bn3ZqALP+5Y7BekSYG/5hxBty3sqrcOmeVdN1IgclAx8K7LgaDzaYkHixdqaWXw= Received: from FR3P281CA0137.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:95::11) by PAXPR08MB6526.eurprd08.prod.outlook.com (2603:10a6:102:df::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Thu, 9 Mar 2023 10:43:00 +0000 Received: from VI1EUR03FT041.eop-EUR03.prod.protection.outlook.com (2603:10a6:d10:95:cafe::7b) by FR3P281CA0137.outlook.office365.com (2603:10a6:d10:95::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19 via Frontend Transport; Thu, 9 Mar 2023 10:43:00 +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 VI1EUR03FT041.mail.protection.outlook.com (100.127.145.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19 via Frontend Transport; Thu, 9 Mar 2023 10:42:59 +0000 Received: ("Tessian outbound cfb430c87a1e:v135"); Thu, 09 Mar 2023 10:42:59 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 6a4c06397c82ebe7 X-CR-MTA-TID: 64aa7808 Received: from ad2b20d3e480.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 7B2BF8BB-2BD0-4638-B3EF-B36B05B24635.1; Thu, 09 Mar 2023 10:42:48 +0000 Received: from EUR03-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ad2b20d3e480.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 09 Mar 2023 10:42:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ONNWXCKXOUiPC9/3jE7m059vuJtVj1oW21k3RC9ix8bskCVzUfjGsiADnEMPRfREFEwaQawUcadfPQQL2CMcGSBMdVTw4h1drzBHZu5LhYP4ut4V6QlgjsbamnR3bq8NtgTG7I+5moBAfwhlLNfzO5yGePIKixlLOV0rYHMDHF6zi7pvAEUmTyizeIAA2g/BcjfaVROJq2xpv+vQkzA54tsTjCK7yriGmHJMklalTF6sYy47HQDQSh/F6JUbfaKjb/RZaCrg2l/htIS2ziOzx3HPYpqDE5nX+DUdmT9wsxoWawqIQaU0mV3NjUvyC4SlsMTTr5bGgdwAd56XPQJyAg== 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=tiblAvxOBuAzQr/LzOV4rbEE+63yQAxqk9GLNsYtv8A=; b=NuVR9YX+NVguB0YKgls3IPLxhp9L5jG9uyou3OAFaGx9NkdM7bEVJIiPAlwbiZ0cwvOmJ0N3BOIblMJyzi4Lp+ThD50aW3lw/b0Qnud6q9uXXgIiVeiTCscJxX7GnfPpXksV/2LQEC3a9a5/lR7npQgOzdo+YJAJrojxdWDJ0ujty0TLsd4BnNoWWI4eCnje1d4qCNFwabrxc9xyFeuSWd0pQtH8lfadnH8f0Ya4BwJGVnkVswGmFzMWePit7/kIrbsWguY/vzsFuuTjq+WQgO8V+pV3FPDxMzIqLXbUHXMTS17ysgL6S9Vr/uVO6O2SISaYYRPGZxSzp2tqooenvw== 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=tiblAvxOBuAzQr/LzOV4rbEE+63yQAxqk9GLNsYtv8A=; b=eEwZlhrmeee5dZBp8TjjDxHmi60sZ/ElXHsfN6FVBdGEBQc7llTZ7v/Ea3FsaRkLCIOHiC8rVS2hXieerYLSVVmx+8+01n8pP/V/IQzJlEF4Bn3ZqALP+5Y7BekSYG/5hxBty3sqrcOmeVdN1IgclAx8K7LgaDzaYkHixdqaWXw= Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by AM9PR08MB6721.eurprd08.prod.outlook.com (2603:10a6:20b:305::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Thu, 9 Mar 2023 10:42:43 +0000 Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::c224:ef61:cd4c:7727]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::c224:ef61:cd4c:7727%3]) with mapi id 15.20.6178.016; Thu, 9 Mar 2023 10:42:43 +0000 From: "Sami Mujawar" To: Girish Mahadevan , "devel@edk2.groups.io" , Pierre Gondois CC: "Jeff Brasen (jbrasen@nvidia.com)" , "ashishsingha@nvidia.com" , "nramirez@nvidia.com" , nd , Jose Marinho , Alexei Fedorov Subject: Re: [PATCH v2 1/1] DynamicTablesPkg: Add SMBIOS table generation Thread-Topic: [PATCH v2 1/1] DynamicTablesPkg: Add SMBIOS table generation Thread-Index: AQHZMqtIOAMOpz4qJUerNmGOWWWEMa7wy4GAgAC1SQCAAQGfAA== Date: Thu, 9 Mar 2023 10:42:42 +0000 Message-ID: <89906673-C482-4112-9DFA-EBF81C5DDCB2@arm.com> References: <20230127235800.1290243-1-gmahadevan@nvidia.com> <2573ae43-5332-6307-313a-090005875558@nvidia.com> In-Reply-To: <2573ae43-5332-6307-313a-090005875558@nvidia.com> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/16.70.23021201 Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: AS8PR08MB6806:EE_|AM9PR08MB6721:EE_|VI1EUR03FT041:EE_|PAXPR08MB6526:EE_ X-MS-Office365-Filtering-Correlation-Id: be93a787-1f15-4a7b-ed64-08db208b0d3b x-ld-processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr 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: fFEM2CX4OZcUkPINFUaG/9gBi9fWL/kP0ZRtQw5kIRH79zKwQCe+D8+TXHtNaPU7PkQtoRH6ksoyl1grmQynnDUzoPmzMk2IIKCSqqh0ZjtT99fzTETVpu3/RO8hG8yxS6i1SFNUcjd3GdO/q4Fv1JopJPf1+x3VxSk+7EOjTF5/s4vrDgHSbEAgKQBA7F9tRLZN2XLYmofpFqqz+Q+LdAQ41OA9PyAEjMZI50M9AgkCQz6P9dCKElGZztHiTLNjblpc5aGBkbriwonlGCGiwdDp2RolFxDK2joqPLRskdIw6Aj5ygAxykF2xuN7KcD3EcHIvMIog39rQMng8ok7fuDX2Cf0F3VbU4IHctxqdcOc3bVyAJ4oNMKN4SvBYtBa+A9iFDb7WFp/RpPKjPnvEdNzTeY5JkZShpwAo0SmdeTAOvvVF1cJxeYCTxCG9ndmVJJcA/QWuFdITNVKkFJ+9aojmMbWdnMoI6Jm/mD4kvS+JVlOpH5Yab18K4GZ7490lIl7csID0BwSsH56+TWKkI8x+AS/Lp8ZiWg0K5S2FpIJ7OKwQfPPGLOKrrMXpu84esULuMwHa4oMtTr4XHn7ed8JuoMVk0vyTVjMGJ11bkT13hyCZ0fzfNxMUOJO176UAm9fH2wPmjZF2VWFG2RnHKYk/kYHpU54yluMNAzHUBFsCrRp586VhdOG3jE54i5a7PC0DpeFhmpj4++epeLuTOUBJIuDiyxxu9HLdaJqj7B01KjM3n3HERoWvX+kM3SpFwGl1rxpTyTueE3mEN2F5Q== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(39860400002)(366004)(136003)(376002)(346002)(396003)(451199018)(110136005)(316002)(54906003)(6636002)(33656002)(36756003)(38070700005)(38100700002)(86362001)(122000001)(26005)(6512007)(6506007)(53546011)(83380400001)(186003)(2616005)(71200400001)(8936002)(5660300002)(966005)(478600001)(6486002)(41300700001)(30864003)(2906002)(8676002)(66946007)(66446008)(64756008)(66556008)(91956017)(4326008)(66476007)(76116006)(45980500001)(559001)(579004);DIR:OUT;SFP:1101; MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6721 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VI1EUR03FT041.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: de0c3e5d-42f7-44a3-4e5e-08db208b032c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hbdyTX0h1H/PnzJfZkfuBJS4l9xU34u80wX4qrQe8aF3kiFtxHwgj1js98EuJeRRSryh+BqPMOvdKK5d2BeUFL4M0LIkjtKS/0ViQxG4YlTBSL9lRHr+Fxi0lluJCYZm/W/t2nMe9TVAmik2d3s7cMomR24LsIHMRDGkZfpJat3lLd3bt3voOS273YDsp6JxQpyY5bsS6zgtVdyw2HHKSgJPSjx9BB3AGX7gi3Hk9+cZ82IbCkzrhTp1qsA6CbH3LNwJ+cz6ACWCmFkbu/2bcUw6pFcAZbkSzWqDMc4lnyY0xdtOeBBwXc4egPlesNk9LhZ4G3aFw1dIhAymg+lSsEkDMKrJkkr8T53QsCopfKA4GkfPG7qkweQjEFml3d7S4JpmZjZuXi1Q3d3AN2tvp9mPqg/BAkLMXq9kMjCbPHVy/dvv7LNK6I5ZbLDROwFMxd+jWX+B40HwMj6hvC0vZmsKsirSqiSkQhcS+NlXJ29g12l7IPpRTN8HQuGcVc2cLhpvRpaH9WvEwo6nzadw+diSOH7NDy2ElMiVLHOuI2rbkXjqimftiagD3xot6LEB2KvgoITYST7MQCC+wwUHsukSWNrzwUsUg+mHwE+lxYr7JGet1AyNOtgac2HXTB/J9xw+wFyFcfkOCKHfnReAQfwcHuvHp0Wg6mZi6z3N7AouUS+TTIi63ML+is1JFSbVbFKTXAOeB1W3JJ6jqe4QYIfZLCF2vFXlJ89gi8TJVYQ= 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:(13230025)(4636009)(376002)(346002)(396003)(136003)(39860400002)(451199018)(46966006)(40470700004)(36840700001)(33656002)(40460700003)(36756003)(6636002)(54906003)(110136005)(186003)(478600001)(6486002)(966005)(316002)(5660300002)(2906002)(8936002)(30864003)(8676002)(70206006)(70586007)(41300700001)(4326008)(82740400003)(81166007)(36860700001)(40480700001)(356005)(86362001)(6506007)(2616005)(53546011)(26005)(6512007)(83380400001)(82310400005)(336012)(47076005)(559001)(579004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Mar 2023 10:42:59.6068 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: be93a787-1f15-4a7b-ed64-08db208b0d3b 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: VI1EUR03FT041.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6526 Content-Language: en-GB Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 SGkgR2lyaXNoLA0KDQoNCu+7v09uIDA4LzAzLzIwMjMsIDE5OjIxLCAiR2lyaXNoIE1haGFkZXZh biIgPGdtYWhhZGV2YW5AbnZpZGlhLmNvbSA8bWFpbHRvOmdtYWhhZGV2YW5AbnZpZGlhLmNvbT4+ IHdyb3RlOg0KDQoNCkhpIFNhbWksDQoNCg0KVGhhbmtzIGZvciB5b3VyIHJlc3BvbnNlLg0KDQoN Ckkgd2lsbCB1cGRhdGUgbXkgcGF0Y2ggc2VyaWVzIGJhc2VkIG9uIHYyIG9mIHlvdXIgZGlzcGF0 Y2hlciBjb2RlIGFuZCANCnBvaW50IHlvdSB0byB2My4gKG1pZC9sYXRlIG5leHQgd2VlaykNCg0K DQpDYW4geW91IGFsc28gbWVyZ2UgdGhlIFNtYmlvcyBTdHJpbmcgcmVsYXRlZCBwYXRjaCAodGhl IA0KU21iaW9zU3RyaW5nTGlicmFyeSkuDQpJdCB3b3JrcyB3ZWxsLiAoSSB0aGluayBJJ3ZlIGFj aydkIHRoYXQgcGF0Y2gpLg0KW1NBTUldIEkgd2lsbCBnZXQgdGhlIFNtYmlvc1N0cmluZ0xpYnJh cnkgbWVyZ2VkIHNvb24uIA0KDQpSZWdhcmRzLA0KDQpTYW1pIE11amF3YXINCg0KTXkgcmVzcG9u c2VzIGlubGluZSBbR01dLg0KDQoNCkJlc3QgUmVnYXJkcw0KR2lyaXNoDQoNCg0KT24gMy84LzIw MjMgMTozMSBBTSwgU2FtaSBNdWphd2FyIHdyb3RlOg0KPiAqRXh0ZXJuYWwgZW1haWw6IFVzZSBj YXV0aW9uIG9wZW5pbmcgbGlua3Mgb3IgYXR0YWNobWVudHMqDQo+IA0KPiANCj4gSGkgR2lyaXNo LA0KPiANCj4gQXBvbG9naWVzIGZvciB0aGUgZGVsYXkgaW4gcmVwbHkgYW5kIHRoYW5rIHlvdSBm b3IgdGhpcyBwYXRjaCBhbmQgZm9yIA0KPiBzaGFyaW5nIHRoZSBsaW5rIHRvIHRoZSBnaXRodWIg YnJhbmNoLg0KPiANCj4gSSBoYXZlIGFsc28gcG9zdGVkIGEgdjIgc2VyaWVzIGZvciB0aGUgU01C SU9TIGRpc3BhdGNoZXIgYXQgDQo+IGh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNz YWdlLzEwMDgzMyA8aHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL21lc3NhZ2UvMTAwODMz Pi4gQW55IGZlZWRiYWNrIHdvdWxkIGJlIA0KPiBtb3N0IGFwcHJlY2lhdGVkLg0KPiANCj4gSXQg YXBwZWFycyB0aGF0IER5bmFtaWNUYWJsZU1hbmFnZXJEeGUuYyBhbmQgQWNwaVRhYmxlQnVpbGRl ci5jIGFyZSBhIA0KPiBtaXggb2YgbGF0ZXN0IGVkazIgdXBzdHJlYW0gYW5kIGFuIG9sZGVyIHZl cnNpb24uIENhbiB5b3UgY2hlY2ssIHBsZWFzZT8gDQo+IEFsc28sIHRoaXMgcGF0Y2ggY291bGQg YmUgc3BsaXQgaW50byBzbWFsbGVyIGNodW5rcy4NCj4gDQo+IE90aGVyIHRoYW4gdGhhdCwgcGxl YXNlIHNlZSBteSByZXNwb25zZSBpbmxpbmUgbWFya2VkIFtTQU1JXS4NCj4gDQo+IFJlZ2FyZHMs DQo+IA0KPiBTYW1pIE11amF3YXINCj4gDQo+IE9uIDI3LzAxLzIwMjMgMTE6NTggcG0sIEdpcmlz aCBNYWhhZGV2YW4gd3JvdGU6DQo+PiBBZGQgdGhlIFNNQklPUyBUYWJsZSBnZW5lcmF0b3IgY29k ZSB0byB0aGUgRHluYW1pY1RhYmxlc1BrZy4NCj4+DQo+PiBUaGlzIGNoYW5nZSBpbmNsdWRlcyBh ZGRpbmcgbmV3IGxvZ2ljIHRvIHRoZSBEeW5hbWljVGFibGVNYW5hZ2VyDQo+PiB0byBwcm9jZXNz IGFuZCBhZGQgU01CSU9TIHRhYmxlcyBhbmQgYXVnbWVudGluZyB0aGUgZXhpc3RpbmcgU01CSU9T DQo+PiBGYWN0b3J5IGdlbmVyYXRvciB0byBpbmNsdWRlIGluc3RhbGxpbmcgbXVsdGlwbGUgU01C SU9TIHRhYmxlcyAuDQo+PiBBbHNvIGluY2x1ZGVkIGlzIHJ1bm5pbmcgdGhlIFNNQklPUyBhbmQg QUNQSSB0YWJsZSBnZW5lcmF0aW9uIGFzIHBhcnQNCj4+IG9mIHRoZSBTTUJJT1MgYW5kIEFDUEkg cHJvdG9jb2wgR1VJRCBjYWxsYmFjayBub3RpZmljYXRpb25zIHJlc3BlY3RpdmVseS4NCj4+DQo+ PiBUaGUgY2hhbmdlIGNhbiBiZSBzZWVuIGF0DQo+PiBodHRwczovL2dpdGh1Yi5jb20vZ21haGFk ZXZhbi9lZGsyLXVwc3RyZWFtL2NvbW1pdHMvUkZDL3NtYmlvcy1keW50YWJsZXMgPGh0dHBzOi8v Z2l0aHViLmNvbS9nbWFoYWRldmFuL2VkazItdXBzdHJlYW0vY29tbWl0cy9SRkMvc21iaW9zLWR5 bnRhYmxlcz4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBHaXJpc2ggTWFoYWRldmFuPGdtYWhhZGV2 YW5AbnZpZGlhLmNvbSA8bWFpbHRvOmdtYWhhZGV2YW5AbnZpZGlhLmNvbT4+DQo+PiBSZXZpZXdl ZC1ieTogSmVmZiBCcmFzZW48amJyYXNlbkBudmlkaWEuY29tIDxtYWlsdG86amJyYXNlbkBudmlk aWEuY29tPj4NCj4+IC0tLQ0KPj4gLi4uL0R5bmFtaWNUYWJsZUZhY3RvcnkuaCB8IDUgKw0KPj4g Li4uL0R5bmFtaWNUYWJsZUZhY3RvcnlEeGUuYyB8IDcgKw0KPj4gLi4uL1NtYmlvc1RhYmxlRmFj dG9yeS9TbWJpb3NUYWJsZUZhY3RvcnkuYyB8IDY2ICsrDQo+PiAuLi4vRHluYW1pY1RhYmxlTWFu YWdlckR4ZS9BY3BpVGFibGVCdWlsZGVyLmMgfCA3MzIgKysrKysrKysrKysrKysrKw0KPj4gLi4u L0R5bmFtaWNUYWJsZU1hbmFnZXJEeGUuYyB8IDc5NCArLS0tLS0tLS0tLS0tLS0tLS0NCj4+IC4u Li9EeW5hbWljVGFibGVNYW5hZ2VyRHhlLmluZiB8IDUgKy0NCj4+IC4uLi9TbWJpb3NUYWJsZUJ1 aWxkZXIuYyB8IDYwOCArKysrKysrKysrKysrKw0KPj4gLi4uL0luY2x1ZGUvQ29uZmlndXJhdGlv bk1hbmFnZXJPYmplY3QuaCB8IDE4ICstDQo+PiAuLi4vUHJvdG9jb2wvRHluYW1pY1RhYmxlRmFj dG9yeVByb3RvY29sLmggfCA4ICsNCj4+IC4uLi9JbmNsdWRlL1NtYmlvc1RhYmxlR2VuZXJhdG9y LmggfCAxNjUgKysrLQ0KPj4gMTAgZmlsZXMgY2hhbmdlZCwgMTY1MyBpbnNlcnRpb25zKCspLCA3 NTUgZGVsZXRpb25zKC0pDQo+PiBjcmVhdGUgbW9kZSAxMDA2NDQgRHluYW1pY1RhYmxlc1BrZy9E cml2ZXJzL0R5bmFtaWNUYWJsZU1hbmFnZXJEeGUvQWNwaVRhYmxlQnVpbGRlci5jDQo+PiBjcmVh dGUgbW9kZSAxMDA2NDQgRHluYW1pY1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZU1hbmFn ZXJEeGUvU21iaW9zVGFibGVCdWlsZGVyLmMNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvRHluYW1pY1Rh Ymxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZUZhY3RvcnlEeGUvRHluYW1pY1RhYmxlRmFjdG9y eS5oIGIvRHluYW1pY1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZUZhY3RvcnlEeGUvRHlu YW1pY1RhYmxlRmFjdG9yeS5oDQo+PiBpbmRleCBiMTYwZGNmOGFkLi4yMGU0MzhlYTcwIDEwMDY0 NA0KPj4gLS0tIGEvRHluYW1pY1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZUZhY3RvcnlE eGUvRHluYW1pY1RhYmxlRmFjdG9yeS5oDQo+PiArKysgYi9EeW5hbWljVGFibGVzUGtnL0RyaXZl cnMvRHluYW1pY1RhYmxlRmFjdG9yeUR4ZS9EeW5hbWljVGFibGVGYWN0b3J5LmgNCj4+IEBAIC00 OSw2ICs0OSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBEeW5hbWljVGFibGVGYWN0b3J5SW5mbyB7DQo+ PiBDdXN0b21EdFRhYmxlR2VuZXJhdG9yTGlzdFtGaXhlZFBjZEdldDE2ICgNCj4+IFBjZE1heEN1 c3RvbURUR2VuZXJhdG9ycw0KPj4gKV07DQo+PiArDQo+PiArIC8vLyBBbiBhcnJheSBmb3IgaG9s ZGluZyBhIG1hcCBvZiBTTUJJT1MgaGFuZGxlcyBhbmQgdGhlIENNIE9iamVjdA0KPj4gKyAvLy8g dG9rZW4gdXNlZCB0byBidWlsZCB0aGUgU01CSU9TIHJlY29yZC4NCj4+ICsgU01CSU9TX0hBTkRM RV9NQVANCj4+ICsgU21iaW9zSGFuZGxlTWFwW01BWF9TTUJJT1NfSEFORExFU107DQo+PiB9IEVE S0lJX0RZTkFNSUNfVEFCTEVfRkFDVE9SWV9JTkZPOw0KPj4gDQo+PiAvKiogUmV0dXJuIGEgcG9p bnRlciB0byB0aGUgQUNQSSB0YWJsZSBnZW5lcmF0b3IuDQo+PiBkaWZmIC0tZ2l0IGEvRHluYW1p Y1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZUZhY3RvcnlEeGUvRHluYW1pY1RhYmxlRmFj dG9yeUR4ZS5jIGIvRHluYW1pY1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZUZhY3RvcnlE eGUvRHluYW1pY1RhYmxlRmFjdG9yeUR4ZS5jDQo+PiBpbmRleCA2ZDZkM2ZhNzQ2Li5kMGVlNWQ3 YjNiIDEwMDY0NA0KPj4gLS0tIGEvRHluYW1pY1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJs ZUZhY3RvcnlEeGUvRHluYW1pY1RhYmxlRmFjdG9yeUR4ZS5jDQo+PiArKysgYi9EeW5hbWljVGFi bGVzUGtnL0RyaXZlcnMvRHluYW1pY1RhYmxlRmFjdG9yeUR4ZS9EeW5hbWljVGFibGVGYWN0b3J5 RHhlLmMNCj4+IEBAIC00NCw2ICs0NCw4IEBAIEVES0lJX0RZTkFNSUNfVEFCTEVfRkFDVE9SWV9Q Uk9UT0NPTCBEeW5hbWljVGFibGVGYWN0b3J5UHJvdG9jb2wgPSB7DQo+PiBHZXREdFRhYmxlR2Vu ZXJhdG9yLA0KPj4gUmVnaXN0ZXJEdFRhYmxlR2VuZXJhdG9yLA0KPj4gRGVyZWdpc3RlckR0VGFi bGVHZW5lcmF0b3IsDQo+PiArIEFkZFNtYmlvc0hhbmRsZSwNCj4+ICsgRmluZFNtYmlvc0hhbmRs ZSwNCj4+ICZUYWJsZUZhY3RvcnlJbmZvDQo+PiB9Ow0KPj4gDQo+PiBAQCAtNjUsNyArNjcsMTIg QEAgRHluYW1pY1RhYmxlRmFjdG9yeUR4ZUluaXRpYWxpemUgKA0KPj4gKQ0KPj4gew0KPj4gRUZJ X1NUQVRVUyBTdGF0dXM7DQo+PiArIFVJTlROIElkeDsNCj4+IA0KPj4gKyBmb3IgKElkeCA9IDA7 IElkeCA8IE1BWF9TTUJJT1NfSEFORExFUzsgSWR4KyspIHsNCj4+ICsgVGFibGVGYWN0b3J5SW5m by5TbWJpb3NIYW5kbGVNYXBbSWR4XS5TbWJpb3NUYmxIYW5kbGUgPSBTTUJJT1NfSEFORExFX1BJ X1JFU0VSVkVEOw0KPj4gKyBUYWJsZUZhY3RvcnlJbmZvLlNtYmlvc0hhbmRsZU1hcFtJZHhdLlNt Ymlvc0NtVG9rZW4gPSAwOw0KPj4gKyB9DQo+PiBTdGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2Nv bEludGVyZmFjZSAoDQo+PiAmSW1hZ2VIYW5kbGUsDQo+PiAmZ0Vka2lpRHluYW1pY1RhYmxlRmFj dG9yeVByb3RvY29sR3VpZCwNCj4+IGRpZmYgLS1naXQgYS9EeW5hbWljVGFibGVzUGtnL0RyaXZl cnMvRHluYW1pY1RhYmxlRmFjdG9yeUR4ZS9TbWJpb3NUYWJsZUZhY3RvcnkvU21iaW9zVGFibGVG YWN0b3J5LmMgYi9EeW5hbWljVGFibGVzUGtnL0RyaXZlcnMvRHluYW1pY1RhYmxlRmFjdG9yeUR4 ZS9TbWJpb3NUYWJsZUZhY3RvcnkvU21iaW9zVGFibGVGYWN0b3J5LmMNCj4+IGluZGV4IDg3Nzk1 OTE5ZjguLmI4MTcyNGQyYTAgMTAwNjQ0DQo+PiAtLS0gYS9EeW5hbWljVGFibGVzUGtnL0RyaXZl cnMvRHluYW1pY1RhYmxlRmFjdG9yeUR4ZS9TbWJpb3NUYWJsZUZhY3RvcnkvU21iaW9zVGFibGVG YWN0b3J5LmMNCj4+ICsrKyBiL0R5bmFtaWNUYWJsZXNQa2cvRHJpdmVycy9EeW5hbWljVGFibGVG YWN0b3J5RHhlL1NtYmlvc1RhYmxlRmFjdG9yeS9TbWJpb3NUYWJsZUZhY3RvcnkuYw0KPj4gQEAg LTEyLDYgKzEyLDcgQEANCj4+ICNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL1NtQmlvcy5oPg0K Pj4gI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPj4gI2luY2x1ZGUgPExpYnJhcnkvQmFz ZU1lbW9yeUxpYi5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIu aD4NCj4+ICNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+PiANCj4+IC8vIE1vZHVsZSBz cGVjaWZpYyBpbmNsdWRlIGZpbGVzLg0KPj4gQEAgLTI0LDYgKzI1LDcxIEBADQo+PiANCj4+IGV4 dGVybiBFREtJSV9EWU5BTUlDX1RBQkxFX0ZBQ1RPUllfSU5GTyBUYWJsZUZhY3RvcnlJbmZvOw0K Pj4gDQo+PiArLyoqIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgU01CSU9TIHRhYmxlIE1hcC4NCj4+ ICsNCj4+ICsgQHBhcmFtIFtpbl0gU21iaW9zIFNNQklPUyBQcm90b2NvbCBwb2ludGVyLg0KPj4g KyBAcGFyYW0gW2luXSBTbWJpb3NIYW5kbGUgU01CSU9TIEhhbmRsZSB0byBiZSBhZGRlZCwgaWYg dGhlIHZhbHVlIFNNQklPU19IQU5ETEVfUElfUkVTRVJWRUQNCj4+ICsgaXMgcGFzc2VkIHRoZW4g YSBuZXcgU21iaW9zSGFuZGxlIGlzIGFzc2lnbmVkLg0KPiBbU0FNSV0gSSB0aGluayB0aGUgU21i aW9zSGFuZGxlIGRvY3VtZW50YXRpb24gbmVlZHMgdXBkYXRpbmcuDQo+PiArIEBwYXJhbSBbaW5d IENtT2JqZWN0VG9rZW4gQ21PYmplY3RUb2tlbiBvZiB0aGUgQ01fT0JKRUNUIHVzZWQgdG8gYnVp bGQgdGhlIFNNQklPUyBUYWJsZQ0KPj4gKyBAcGFyYW0gW2luXSBTbWJpb3NJZCBTbWJpb3MgVGFi bGUgR2VuZXJhdG9yIElkLg0KPj4gKw0KPj4gKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFN1Y2Nlc3Nm dWxseSBhZGRlZC9nZW5lcmF0ZWQgdGhlIGhhbmRsZS4NCj4+ICsgQHJldHZhbCBFRklfT1VUX09G X1JFU09VUkNFU05VTEwgRmFpbHVyZSB0byBhZGQvZ2VuZXJhdGUgdGhlIGhhbmRsZS4NCj4+ICsq Ki8NCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArQWRkU21iaW9zSGFuZGxlICgNCj4+ ICsgSU4gRUZJX1NNQklPU19QUk9UT0NPTCAqU21iaW9zLA0KPj4gKyBJTiBTTUJJT1NfSEFORExF ICpTbWJpb3NIYW5kbGUsDQo+PiArIElOIENNX09CSkVDVF9UT0tFTiBDbU9iamVjdFRva2VuLA0K Pj4gKyBJTiBFU1REX1NNQklPU19UQUJMRV9JRCBTbWJpb3NJZA0KPj4gKyApDQo+PiArew0KPj4g KyBFRklfU1RBVFVTIFN0YXR1czsNCj4+ICsgVUlOVE4gSW5kZXg7DQo+PiArDQo+PiArIFN0YXR1 cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4gKw0KPj4gKyBmb3IgKEluZGV4ID0gMDsgSW5k ZXggPCBNQVhfU01CSU9TX0hBTkRMRVM7IEluZGV4KyspIHsNCj4+ICsgaWYgKFRhYmxlRmFjdG9y eUluZm8uU21iaW9zSGFuZGxlTWFwW0luZGV4XS5TbWJpb3NUYmxIYW5kbGUgPT0gU01CSU9TX0hB TkRMRV9QSV9SRVNFUlZFRCkgew0KPj4gKyBUYWJsZUZhY3RvcnlJbmZvLlNtYmlvc0hhbmRsZU1h cFtJbmRleF0uU21iaW9zVGJsSGFuZGxlID0gKlNtYmlvc0hhbmRsZTsNCj4+ICsgVGFibGVGYWN0 b3J5SW5mby5TbWJpb3NIYW5kbGVNYXBbSW5kZXhdLlNtYmlvc0NtVG9rZW4gPSBDbU9iamVjdFRv a2VuOw0KPj4gKyBUYWJsZUZhY3RvcnlJbmZvLlNtYmlvc0hhbmRsZU1hcFtJbmRleF0uU21iaW9z VGFibGVJZCA9IFNtYmlvc0lkOw0KPj4gKyBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4+ICsgYnJl YWs7DQo+PiArIH0NCj4+ICsgfQ0KPj4gKw0KPj4gKyByZXR1cm4gU3RhdHVzOw0KPj4gK30NCj4+ ICsNCj4+ICsvKiogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgU01CSU9TIHRhYmxlIE1hcC4NCj4+ ICsNCj4+ICsgQHBhcmFtIFtpbl0gR2VuZXJhdG9ySWQgVGhlIENtT2JqZWN0VG9rZW4gdG8gbG9v ayB1cCBhbiBTTUJJT1MgSGFuZGxlLg0KPiBbU0FNSV0gR2VuZXJhdG9ySWQgPT0+IENtT2JqZWN0 VG9rZW4NCj4+ICsNCj4+ICsgQHJldHZhbCBTTUJJT1NfSEFORExFX01BUCBpZiB0aGUgQ21PYmpl Y3RUb2tlbiBpcyBmb3VuZC4NCj4+ICsgQHJldHZhbCBOVUxMIGlmIG5vdCBmb3VuZC4NCj4+ICsq Ki8NCj4+ICtTTUJJT1NfSEFORExFX01BUCAqDQo+PiArRUZJQVBJDQo+PiArRmluZFNtYmlvc0hh bmRsZSAoDQo+PiArIENNX09CSkVDVF9UT0tFTiBDbU9iamVjdFRva2VuDQo+PiArICkNCj4+ICt7 DQo+PiArIFVJTlROIEluZGV4Ow0KPj4gKyBTTUJJT1NfSEFORExFX01BUCAqU21iaW9zSGFuZGxl TWFwOw0KPj4gKw0KPj4gKyBTbWJpb3NIYW5kbGVNYXAgPSBOVUxMOw0KPj4gKyBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBNQVhfU01CSU9TX0hBTkRMRVM7IEluZGV4KyspIHsNCj4+ICsgaWYgKFRh YmxlRmFjdG9yeUluZm8uU21iaW9zSGFuZGxlTWFwW0luZGV4XS5TbWJpb3NDbVRva2VuID09IENt T2JqZWN0VG9rZW4pIHsNCj4+ICsgU21iaW9zSGFuZGxlTWFwID0gJlRhYmxlRmFjdG9yeUluZm8u U21iaW9zSGFuZGxlTWFwW0luZGV4XTsNCj4+ICsgYnJlYWs7DQo+PiArIH0NCj4+ICsgfQ0KPj4g Kw0KPj4gKyByZXR1cm4gU21iaW9zSGFuZGxlTWFwOw0KPj4gK30NCj4+ICsNCj4+IC8qKiBSZXR1 cm4gYSBwb2ludGVyIHRvIHRoZSBTTUJJT1MgdGFibGUgZ2VuZXJhdG9yLg0KPj4gDQo+PiBAcGFy YW0gW2luXSBUaGlzIFBvaW50ZXIgdG8gdGhlIER5bmFtaWMgVGFibGUgRmFjdG9yeSBQcm90b2Nv bC4NCj4+IGRpZmYgLS1naXQgYS9EeW5hbWljVGFibGVzUGtnL0RyaXZlcnMvRHluYW1pY1RhYmxl TWFuYWdlckR4ZS9BY3BpVGFibGVCdWlsZGVyLmMgYi9EeW5hbWljVGFibGVzUGtnL0RyaXZlcnMv RHluYW1pY1RhYmxlTWFuYWdlckR4ZS9BY3BpVGFibGVCdWlsZGVyLmMNCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwLi41MDIxZWFiNzQ4DQo+PiAtLS0gL2Rldi9u dWxsDQo+PiArKysgYi9EeW5hbWljVGFibGVzUGtnL0RyaXZlcnMvRHluYW1pY1RhYmxlTWFuYWdl ckR4ZS9BY3BpVGFibGVCdWlsZGVyLmMNCj4+IEBAIC0wLDAgKzEsNzMyIEBADQo+PiArLyoqIEBm aWxlDQo+PiArIER5bmFtaWMgVGFibGUgTWFuYWdlciBEeGUNCj4+ICsNCj4+ICsgQ29weXJpZ2h0 IChjKSAyMDE3IC0gMjAxOSwgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+PiAr IENvcHlyaWdodCAoYykgMjAyMiAtIDIwMjMsIE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFU RVMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+PiArDQo+PiArIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+PiArDQo+PiArKiovDQo+PiArDQo+PiArI2luY2x1 ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+ DQo+PiArI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQo+PiArI2luY2x1ZGUgPExpYnJhcnkv VWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+PiArI2luY2x1ZGUgPFByb3RvY29sL0FjcGlU YWJsZS5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4+ICsNCj4+ ICsvLyBNb2R1bGUgc3BlY2lmaWMgaW5jbHVkZSBmaWxlcy4NCj4+ICsjaW5jbHVkZSA8QWNwaVRh YmxlR2VuZXJhdG9yLmg+DQo+PiArI2luY2x1ZGUgPENvbmZpZ3VyYXRpb25NYW5hZ2VyT2JqZWN0 Lmg+DQo+PiArI2luY2x1ZGUgPENvbmZpZ3VyYXRpb25NYW5hZ2VySGVscGVyLmg+DQo+PiArI2lu Y2x1ZGUgPERldmljZVRyZWVUYWJsZUdlbmVyYXRvci5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L1RhYmxlSGVscGVyTGliLmg+DQo+PiArI2luY2x1ZGUgPFByb3RvY29sL0NvbmZpZ3VyYXRpb25N YW5hZ2VyUHJvdG9jb2wuaD4NCj4+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRHluYW1pY1RhYmxlRmFj dG9yeVByb3RvY29sLmg+DQo+PiArDQo+PiArLyoqIFRoaXMgbWFjcm8gZXhwYW5kcyB0byBhIGZ1 bmN0aW9uIHRoYXQgcmV0cmlldmVzIHRoZSBBQ1BJIFRhYmxlDQo+PiArIExpc3QgZnJvbSB0aGUg Q29uZmlndXJhdGlvbiBNYW5hZ2VyLg0KPj4gKyovDQo+PiArR0VUX09CSkVDVF9MSVNUICgNCj4+ ICsgRU9iak5hbWVTcGFjZVN0YW5kYXJkLA0KPj4gKyBFU3RkT2JqQWNwaVRhYmxlTGlzdCwNCj4+ ICsgQ01fU1REX09CSl9BQ1BJX1RBQkxFX0lORk8NCj4+ICsgKQ0KPj4gKw0KPj4gKy8qKiBBIGhl bHBlciBmdW5jdGlvbiB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNpbmdsZSBBQ1BJIHRhYmxlLg0K Pj4gKw0KPj4gKyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgVGFi bGUgZ2VuZXJhdG9yIGludGVyZmFjZQ0KPj4gKyBmb3IgYnVpbGRpbmcgYW4gQUNQSSB0YWJsZS4g SXQgdXNlcyB0aGUgQWNwaVRhYmxlUHJvdG9jb2wgdG8gaW5zdGFsbCB0aGUNCj4+ICsgdGFibGUs IHRoZW4gZnJlZXMgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIGdlbmVyYXRpbmcgaXQuDQo+ PiArDQo+PiArIEBwYXJhbSBbaW5dIFRhYmxlRmFjdG9yeVByb3RvY29sIFBvaW50ZXIgdG8gdGhl IFRhYmxlIEZhY3RvcnkgUHJvdG9jb2wNCj4+ICsgaW50ZXJmYWNlLg0KPj4gKyBAcGFyYW0gW2lu XSBDZmdNZ3JQcm90b2NvbCBQb2ludGVyIHRvIHRoZSBDb25maWd1cmF0aW9uIE1hbmFnZXINCj4+ ICsgUHJvdG9jb2wgSW50ZXJmYWNlLg0KPj4gKyBAcGFyYW0gW2luXSBHZW5lcmF0b3IgUG9pbnRl ciB0byB0aGUgQWNwaVRhYmxlIGdlbmVyYXRvci4NCj4+ICsgQHBhcmFtIFtpbl0gQWNwaVRhYmxl UHJvdG9jb2wgUG9pbnRlciB0byB0aGUgQWNwaVRhYmxlIHByb3RvY29sLg0KPj4gKyBAcGFyYW0g W2luXSBBY3BpVGFibGVJbmZvIFBvaW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgSW5mby4NCj4+ICsN Cj4+ICsgQHJldHZhbCBFRklfU1VDQ0VTUyBTdWNjZXNzLg0KPj4gKyBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBBIHBhcmFtZXRlciBpcyBpbnZhbGlkLg0KPj4gKyBAcmV0dmFsIEVGSV9O T1RfRk9VTkQgUmVxdWlyZWQgb2JqZWN0IGlzIG5vdCBmb3VuZC4NCj4+ICsgQHJldHZhbCBFRklf QkFEX0JVRkZFUl9TSVpFIFNpemUgcmV0dXJuZWQgYnkgdGhlIENvbmZpZ3VyYXRpb24gTWFuYWdl cg0KPj4gKyBpcyBsZXNzIHRoYW4gdGhlIE9iamVjdCBzaXplIGZvciB0aGUNCj4+ICsgcmVxdWVz dGVkIG9iamVjdC4NCj4+ICsqKi8NCj4+ICtTVEFUSUMNCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJ QVBJDQo+PiArQnVpbGRBbmRJbnN0YWxsU2luZ2xlQWNwaVRhYmxlICgNCj4+ICsgSU4gQ09OU1Qg RURLSUlfRFlOQU1JQ19UQUJMRV9GQUNUT1JZX1BST1RPQ09MICpDT05TVCBUYWJsZUZhY3RvcnlQ cm90b2NvbCwNCj4+ICsgSU4gQ09OU1QgRURLSUlfQ09ORklHVVJBVElPTl9NQU5BR0VSX1BST1RP Q09MICpDT05TVCBDZmdNZ3JQcm90b2NvbCwNCj4+ICsgSU4gQ09OU1QgQUNQSV9UQUJMRV9HRU5F UkFUT1IgKkNPTlNUIEdlbmVyYXRvciwNCj4+ICsgSU4gRUZJX0FDUElfVEFCTEVfUFJPVE9DT0wg KkFjcGlUYWJsZVByb3RvY29sLA0KPj4gKyBJTiBDT05TVCBDTV9TVERfT0JKX0FDUElfVEFCTEVf SU5GTyAqQ09OU1QgQWNwaVRhYmxlSW5mbw0KPj4gKyApDQo+PiArew0KPj4gKyBFRklfU1RBVFVT IFN0YXR1czsNCj4+ICsgRUZJX1NUQVRVUyBTdGF0dXMxOw0KPj4gKyBFRklfQUNQSV9ERVNDUklQ VElPTl9IRUFERVIgKkFjcGlUYWJsZTsNCj4+ICsgVUlOVE4gVGFibGVIYW5kbGU7DQo+PiArDQo+ PiArIEFjcGlUYWJsZSA9IE5VTEw7DQo+PiArIFN0YXR1cyA9IEdlbmVyYXRvci0+QnVpbGRBY3Bp VGFibGUgKA0KPj4gKyBHZW5lcmF0b3IsDQo+PiArIEFjcGlUYWJsZUluZm8sDQo+PiArIENmZ01n clByb3RvY29sLA0KPj4gKyAmQWNwaVRhYmxlDQo+PiArICk7DQo+PiArIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJP UjogRmFpbGVkIHRvIEJ1aWxkIFRhYmxlLiIgXA0KPj4gKyAiIFRhYmxlR2VuZXJhdG9ySWQgPSAw eCV4LiBTdGF0dXMgPSAlclxuIiwNCj4+ICsgQWNwaVRhYmxlSW5mby0+VGFibGVHZW5lcmF0b3JJ ZCwNCj4+ICsgU3RhdHVzDQo+PiArICkpOw0KPj4gKyAvLyBGcmVlIGFueSBhbGxvY2F0ZWQgcmVz b3VyY2VzLg0KPj4gKyBnb3RvIGV4aXRfaGFuZGxlcjsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBpZiAo QWNwaVRhYmxlID09IE5VTEwpIHsNCj4+ICsgU3RhdHVzID0gRUZJX05PVF9GT1VORDsNCj4+ICsg Z290byBleGl0X2hhbmRsZXI7DQo+PiArIH0NCj4+ICsNCj4+ICsgLy8gRHVtcCBBQ1BJIFRhYmxl IEhlYWRlcg0KPj4gKyBEVU1QX0FDUElfVEFCTEVfSEVBREVSIChBY3BpVGFibGUpOw0KPj4gKw0K Pj4gKyAvLyBJbnN0YWxsIEFDUEkgdGFibGUNCj4+ICsgU3RhdHVzID0gQWNwaVRhYmxlUHJvdG9j b2wtPkluc3RhbGxBY3BpVGFibGUgKA0KPj4gKyBBY3BpVGFibGVQcm90b2NvbCwNCj4+ICsgQWNw aVRhYmxlLA0KPj4gKyBBY3BpVGFibGUtPkxlbmd0aCwNCj4+ICsgJlRhYmxlSGFuZGxlDQo+PiAr ICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ICsg REVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogRmFpbGVkIHRvIEluc3RhbGwgQUNQSSBUYWJsZS4g U3RhdHVzID0gJXJcbiIsDQo+PiArIFN0YXR1cw0KPj4gKyApKTsNCj4+ICsgLy8gRnJlZSBhbnkg YWxsb2NhdGVkIHJlc291cmNlcy4NCj4+ICsgZ290byBleGl0X2hhbmRsZXI7DQo+PiArIH0NCj4+ ICsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfSU5GTywNCj4+ICsgIklORk86IEFDUEkgVGFi bGUgaW5zdGFsbGVkLiBTdGF0dXMgPSAlclxuIiwNCj4+ICsgU3RhdHVzDQo+PiArICkpOw0KPj4g Kw0KPj4gK2V4aXRfaGFuZGxlcjoNCj4+ICsgLy8gRnJlZSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRl ZCBmb3IgZ2VuZXJhdGluZyB0aGUgdGFibGVzLg0KPj4gKyBpZiAoR2VuZXJhdG9yLT5GcmVlVGFi bGVSZXNvdXJjZXMgIT0gTlVMTCkgew0KPj4gKyBTdGF0dXMxID0gR2VuZXJhdG9yLT5GcmVlVGFi bGVSZXNvdXJjZXMgKA0KPj4gKyBHZW5lcmF0b3IsDQo+PiArIEFjcGlUYWJsZUluZm8sDQo+PiAr IENmZ01nclByb3RvY29sLA0KPj4gKyAmQWNwaVRhYmxlDQo+PiArICk7DQo+PiArIGlmIChFRklf RVJST1IgKFN0YXR1czEpKSB7DQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX0VSUk9SLA0KPj4g KyAiRVJST1I6IEZhaWxlZCB0byBGcmVlIFRhYmxlIFJlc291cmNlcy4iIFwNCj4+ICsgIlRhYmxl R2VuZXJhdG9ySWQgPSAweCV4LiBTdGF0dXMgPSAlclxuIiwNCj4+ICsgQWNwaVRhYmxlSW5mby0+ VGFibGVHZW5lcmF0b3JJZCwNCj4+ICsgU3RhdHVzMQ0KPj4gKyApKTsNCj4+ICsgfQ0KPj4gKw0K Pj4gKyAvLyBSZXR1cm4gdGhlIGZpcnN0IGVycm9yIHN0YXR1cyBpbiBjYXNlIG9mIGZhaWx1cmUN Cj4+ICsgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgU3RhdHVzID0gU3RhdHVzMTsN Cj4+ICsgfQ0KPj4gKyB9DQo+PiArDQo+PiArIHJldHVybiBTdGF0dXM7DQo+PiArfQ0KPj4gKw0K Pj4gKy8qKiBBIGhlbHBlciBmdW5jdGlvbiB0byBidWlsZCBhbmQgaW5zdGFsbCBtdWx0aXBsZSBB Q1BJIHRhYmxlcy4NCj4+ICsNCj4+ICsgVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB0aGF0IGlu dm9rZXMgdGhlIFRhYmxlIGdlbmVyYXRvciBpbnRlcmZhY2UNCj4+ICsgZm9yIGJ1aWxkaW5nIGFu IEFDUEkgdGFibGUuIEl0IHVzZXMgdGhlIEFjcGlUYWJsZVByb3RvY29sIHRvIGluc3RhbGwgdGhl DQo+PiArIHRhYmxlLCB0aGVuIGZyZWVzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBnZW5l cmF0aW5nIGl0Lg0KPj4gKw0KPj4gKyBAcGFyYW0gW2luXSBUYWJsZUZhY3RvcnlQcm90b2NvbCBQ b2ludGVyIHRvIHRoZSBUYWJsZSBGYWN0b3J5IFByb3RvY29sDQo+PiArIGludGVyZmFjZS4NCj4+ ICsgQHBhcmFtIFtpbl0gQ2ZnTWdyUHJvdG9jb2wgUG9pbnRlciB0byB0aGUgQ29uZmlndXJhdGlv biBNYW5hZ2VyDQo+PiArIFByb3RvY29sIEludGVyZmFjZS4NCj4+ICsgQHBhcmFtIFtpbl0gR2Vu ZXJhdG9yIFBvaW50ZXIgdG8gdGhlIEFjcGlUYWJsZSBnZW5lcmF0b3IuDQo+PiArIEBwYXJhbSBb aW5dIEFjcGlUYWJsZVByb3RvY29sIFBvaW50ZXIgdG8gdGhlIEFjcGlUYWJsZSBwcm90b2NvbC4N Cj4+ICsgQHBhcmFtIFtpbl0gQWNwaVRhYmxlSW5mbyBQb2ludGVyIHRvIHRoZSBBQ1BJIHRhYmxl IEluZm8uDQo+PiArDQo+PiArIEByZXR2YWwgRUZJX1NVQ0NFU1MgU3VjY2Vzcy4NCj4+ICsgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQSBwYXJhbWV0ZXIgaXMgaW52YWxpZC4NCj4+ICsg QHJldHZhbCBFRklfTk9UX0ZPVU5EIFJlcXVpcmVkIG9iamVjdCBpcyBub3QgZm91bmQuDQo+PiAr IEByZXR2YWwgRUZJX0JBRF9CVUZGRVJfU0laRSBTaXplIHJldHVybmVkIGJ5IHRoZSBDb25maWd1 cmF0aW9uIE1hbmFnZXINCj4+ICsgaXMgbGVzcyB0aGFuIHRoZSBPYmplY3Qgc2l6ZSBmb3IgdGhl DQo+PiArIHJlcXVlc3RlZCBvYmplY3QuDQo+PiArKiovDQo+PiArU1RBVElDDQo+PiArRUZJX1NU QVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0J1aWxkQW5kSW5zdGFsbE11bHRpcGxlQWNwaVRhYmxlICgN Cj4+ICsgSU4gQ09OU1QgRURLSUlfRFlOQU1JQ19UQUJMRV9GQUNUT1JZX1BST1RPQ09MICpDT05T VCBUYWJsZUZhY3RvcnlQcm90b2NvbCwNCj4+ICsgSU4gQ09OU1QgRURLSUlfQ09ORklHVVJBVElP Tl9NQU5BR0VSX1BST1RPQ09MICpDT05TVCBDZmdNZ3JQcm90b2NvbCwNCj4+ICsgSU4gQ09OU1Qg QUNQSV9UQUJMRV9HRU5FUkFUT1IgKkNPTlNUIEdlbmVyYXRvciwNCj4+ICsgSU4gRUZJX0FDUElf VEFCTEVfUFJPVE9DT0wgKkFjcGlUYWJsZVByb3RvY29sLA0KPj4gKyBJTiBDT05TVCBDTV9TVERf T0JKX0FDUElfVEFCTEVfSU5GTyAqQ09OU1QgQWNwaVRhYmxlSW5mbw0KPj4gKyApDQo+PiArew0K Pj4gKyBFRklfU1RBVFVTIFN0YXR1czsNCj4+ICsgRUZJX1NUQVRVUyBTdGF0dXMxOw0KPj4gKyBF RklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgKipBY3BpVGFibGU7DQo+PiArIFVJTlROIFRhYmxl Q291bnQ7DQo+PiArIFVJTlROIFRhYmxlSGFuZGxlOw0KPj4gKyBVSU5UTiBJbmRleDsNCj4+ICsN Cj4+ICsgQWNwaVRhYmxlID0gTlVMTDsNCj4+ICsgVGFibGVDb3VudCA9IDA7DQo+PiArIFN0YXR1 cyA9IEdlbmVyYXRvci0+QnVpbGRBY3BpVGFibGVFeCAoDQo+PiArIEdlbmVyYXRvciwNCj4+ICsg QWNwaVRhYmxlSW5mbywNCj4+ICsgQ2ZnTWdyUHJvdG9jb2wsDQo+PiArICZBY3BpVGFibGUsDQo+ PiArICZUYWJsZUNvdW50DQo+PiArICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogRmFpbGVkIHRv IEJ1aWxkIFRhYmxlLiIgXA0KPj4gKyAiIFRhYmxlR2VuZXJhdG9ySWQgPSAweCV4LiBTdGF0dXMg PSAlclxuIiwNCj4+ICsgQWNwaVRhYmxlSW5mby0+VGFibGVHZW5lcmF0b3JJZCwNCj4+ICsgU3Rh dHVzDQo+PiArICkpOw0KPj4gKyAvLyBGcmVlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzLg0KPj4g KyBnb3RvIGV4aXRfaGFuZGxlcjsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBpZiAoKEFjcGlUYWJsZSA9 PSBOVUxMKSB8fCAoVGFibGVDb3VudCA9PSAwKSkgew0KPj4gKyBTdGF0dXMgPSBFRklfTk9UX0ZP VU5EOw0KPj4gKyBnb3RvIGV4aXRfaGFuZGxlcjsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBUYWJsZUNvdW50OyBJbmRleCsrKSB7DQo+PiArIC8vIER1bXAgQUNQ SSBUYWJsZSBIZWFkZXINCj4+ICsgRFVNUF9BQ1BJX1RBQkxFX0hFQURFUiAoQWNwaVRhYmxlW0lu ZGV4XSk7DQo+PiArIC8vIEluc3RhbGwgQUNQSSB0YWJsZQ0KPj4gKyBTdGF0dXMgPSBBY3BpVGFi bGVQcm90b2NvbC0+SW5zdGFsbEFjcGlUYWJsZSAoDQo+PiArIEFjcGlUYWJsZVByb3RvY29sLA0K Pj4gKyBBY3BpVGFibGVbSW5kZXhdLA0KPj4gKyBBY3BpVGFibGVbSW5kZXhdLT5MZW5ndGgsDQo+ PiArICZUYWJsZUhhbmRsZQ0KPj4gKyApOw0KPj4gKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX0VSUk9SLA0KPj4gKyAiRVJST1I6IEZhaWxlZCB0 byBJbnN0YWxsIEFDUEkgVGFibGUuIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0dXMNCj4+ICsg KSk7DQo+PiArIC8vIEZyZWUgYW55IGFsbG9jYXRlZCByZXNvdXJjZXMuDQo+PiArIGdvdG8gZXhp dF9oYW5kbGVyOw0KPj4gKyB9DQo+PiArDQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX0lORk8s DQo+PiArICJJTkZPOiBBQ1BJIFRhYmxlIGluc3RhbGxlZC4gU3RhdHVzID0gJXJcbiIsDQo+PiAr IFN0YXR1cw0KPj4gKyApKTsNCj4+ICsgfQ0KPj4gKw0KPj4gK2V4aXRfaGFuZGxlcjoNCj4+ICsg Ly8gRnJlZSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgdGFibGVz Lg0KPj4gKyBpZiAoR2VuZXJhdG9yLT5GcmVlVGFibGVSZXNvdXJjZXNFeCAhPSBOVUxMKSB7DQo+ PiArIFN0YXR1czEgPSBHZW5lcmF0b3ItPkZyZWVUYWJsZVJlc291cmNlc0V4ICgNCj4+ICsgR2Vu ZXJhdG9yLA0KPj4gKyBBY3BpVGFibGVJbmZvLA0KPj4gKyBDZmdNZ3JQcm90b2NvbCwNCj4+ICsg JkFjcGlUYWJsZSwNCj4+ICsgVGFibGVDb3VudA0KPj4gKyApOw0KPj4gKyBpZiAoRUZJX0VSUk9S IChTdGF0dXMxKSkgew0KPj4gKyBERUJVRyAoKA0KPj4gKyBERUJVR19FUlJPUiwNCj4+ICsgIkVS Uk9SOiBGYWlsZWQgdG8gRnJlZSBUYWJsZSBSZXNvdXJjZXMuIiBcDQo+PiArICJUYWJsZUdlbmVy YXRvcklkID0gMHgleC4gU3RhdHVzID0gJXJcbiIsDQo+PiArIEFjcGlUYWJsZUluZm8tPlRhYmxl R2VuZXJhdG9ySWQsDQo+PiArIFN0YXR1czENCj4+ICsgKSk7DQo+PiArIH0NCj4+ICsNCj4+ICsg Ly8gUmV0dXJuIHRoZSBmaXJzdCBlcnJvciBzdGF0dXMgaW4gY2FzZSBvZiBmYWlsdXJlDQo+PiAr IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiArIFN0YXR1cyA9IFN0YXR1czE7DQo+PiAr IH0NCj4+ICsgfQ0KPj4gKw0KPj4gKyByZXR1cm4gU3RhdHVzOw0KPj4gK30NCj4+ICsNCj4+ICsv KiogQSBoZWxwZXIgZnVuY3Rpb24gdG8gaW52b2tlIGEgVGFibGUgZ2VuZXJhdG9yDQo+PiArDQo+ PiArIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBUYWJsZSBnZW5l cmF0b3IgaW50ZXJmYWNlDQo+PiArIGZvciBidWlsZGluZyBhbiBBQ1BJIHRhYmxlLiBJdCB1c2Vz IHRoZSBBY3BpVGFibGVQcm90b2NvbCB0byBpbnN0YWxsIHRoZQ0KPj4gKyB0YWJsZSwgdGhlbiBm cmVlcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgZ2VuZXJhdGluZyBpdC4NCj4+ICsNCj4+ ICsgQHBhcmFtIFtpbl0gVGFibGVGYWN0b3J5UHJvdG9jb2wgUG9pbnRlciB0byB0aGUgVGFibGUg RmFjdG9yeSBQcm90b2NvbA0KPj4gKyBpbnRlcmZhY2UuDQo+PiArIEBwYXJhbSBbaW5dIENmZ01n clByb3RvY29sIFBvaW50ZXIgdG8gdGhlIENvbmZpZ3VyYXRpb24gTWFuYWdlcg0KPj4gKyBQcm90 b2NvbCBJbnRlcmZhY2UuDQo+PiArIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVByb3RvY29sIFBvaW50 ZXIgdG8gdGhlIEFjcGlUYWJsZSBwcm90b2NvbC4NCj4+ICsgQHBhcmFtIFtpbl0gQWNwaVRhYmxl SW5mbyBQb2ludGVyIHRvIHRoZSBBQ1BJIHRhYmxlIEluZm8uDQo+PiArDQo+PiArIEByZXR2YWwg RUZJX1NVQ0NFU1MgU3VjY2Vzcy4NCj4+ICsgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg QSBwYXJhbWV0ZXIgaXMgaW52YWxpZC4NCj4+ICsgQHJldHZhbCBFRklfTk9UX0ZPVU5EIFJlcXVp cmVkIG9iamVjdCBpcyBub3QgZm91bmQuDQo+PiArIEByZXR2YWwgRUZJX0JBRF9CVUZGRVJfU0la RSBTaXplIHJldHVybmVkIGJ5IHRoZSBDb25maWd1cmF0aW9uIE1hbmFnZXINCj4+ICsgaXMgbGVz cyB0aGFuIHRoZSBPYmplY3Qgc2l6ZSBmb3IgdGhlDQo+PiArIHJlcXVlc3RlZCBvYmplY3QuDQo+ PiArKiovDQo+PiArU1RBVElDDQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0J1aWxk QW5kSW5zdGFsbEFjcGlUYWJsZSAoDQo+PiArIElOIENPTlNUIEVES0lJX0RZTkFNSUNfVEFCTEVf RkFDVE9SWV9QUk9UT0NPTCAqQ09OU1QgVGFibGVGYWN0b3J5UHJvdG9jb2wsDQo+PiArIElOIENP TlNUIEVES0lJX0NPTkZJR1VSQVRJT05fTUFOQUdFUl9QUk9UT0NPTCAqQ09OU1QgQ2ZnTWdyUHJv dG9jb2wsDQo+PiArIElOIEVGSV9BQ1BJX1RBQkxFX1BST1RPQ09MICpBY3BpVGFibGVQcm90b2Nv bCwNCj4+ICsgSU4gQ09OU1QgQ01fU1REX09CSl9BQ1BJX1RBQkxFX0lORk8gKkNPTlNUIEFjcGlU YWJsZUluZm8NCj4+ICsgKQ0KPj4gK3sNCj4+ICsgRUZJX1NUQVRVUyBTdGF0dXM7DQo+PiArIENP TlNUIEFDUElfVEFCTEVfR0VORVJBVE9SICpHZW5lcmF0b3I7DQo+PiArDQo+PiArIEFTU0VSVCAo VGFibGVGYWN0b3J5UHJvdG9jb2wgIT0gTlVMTCk7DQo+PiArIEFTU0VSVCAoQ2ZnTWdyUHJvdG9j b2wgIT0gTlVMTCk7DQo+PiArIEFTU0VSVCAoQWNwaVRhYmxlUHJvdG9jb2wgIT0gTlVMTCk7DQo+ PiArIEFTU0VSVCAoQWNwaVRhYmxlSW5mbyAhPSBOVUxMKTsNCj4+ICsNCj4+ICsgREVCVUcgKCgN Cj4+ICsgREVCVUdfSU5GTywNCj4+ICsgIklORk86IEVTdGRPYmpBY3BpVGFibGVMaXN0OiBBZGRy ZXNzID0gMHglcCwiIFwNCj4+ICsgIiBUYWJsZUdlbmVyYXRvcklkID0gMHgleFxuIiwNCj4+ICsg QWNwaVRhYmxlSW5mbywNCj4+ICsgQWNwaVRhYmxlSW5mby0+VGFibGVHZW5lcmF0b3JJZA0KPj4g KyApKTsNCj4+ICsNCj4+ICsgR2VuZXJhdG9yID0gTlVMTDsNCj4+ICsgU3RhdHVzID0gVGFibGVG YWN0b3J5UHJvdG9jb2wtPkdldEFjcGlUYWJsZUdlbmVyYXRvciAoDQo+PiArIFRhYmxlRmFjdG9y eVByb3RvY29sLA0KPj4gKyBBY3BpVGFibGVJbmZvLT5UYWJsZUdlbmVyYXRvcklkLA0KPj4gKyAm R2VuZXJhdG9yDQo+PiArICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsg REVCVUcgKCgNCj4+ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogVGFibGUgR2VuZXJhdG9y IG5vdCBmb3VuZC4iIFwNCj4+ICsgIiBUYWJsZUdlbmVyYXRvcklkID0gMHgleC4gU3RhdHVzID0g JXJcbiIsDQo+PiArIEFjcGlUYWJsZUluZm8tPlRhYmxlR2VuZXJhdG9ySWQsDQo+PiArIFN0YXR1 cw0KPj4gKyApKTsNCj4+ICsgcmV0dXJuIFN0YXR1czsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBpZiAo R2VuZXJhdG9yID09IE5VTEwpIHsNCj4+ICsgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+PiArIH0N Cj4+ICsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfSU5GTywNCj4+ICsgIklORk86IEdlbmVy YXRvciBmb3VuZCA6ICVzXG4iLA0KPj4gKyBHZW5lcmF0b3ItPkRlc2NyaXB0aW9uDQo+PiArICkp Ow0KPj4gKw0KPj4gKyBpZiAoR2VuZXJhdG9yLT5CdWlsZEFjcGlUYWJsZUV4ICE9IE5VTEwpIHsN Cj4+ICsgU3RhdHVzID0gQnVpbGRBbmRJbnN0YWxsTXVsdGlwbGVBY3BpVGFibGUgKA0KPj4gKyBU YWJsZUZhY3RvcnlQcm90b2NvbCwNCj4+ICsgQ2ZnTWdyUHJvdG9jb2wsDQo+PiArIEdlbmVyYXRv ciwNCj4+ICsgQWNwaVRhYmxlUHJvdG9jb2wsDQo+PiArIEFjcGlUYWJsZUluZm8NCj4+ICsgKTsN Cj4+ICsgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gKyBERUJVRyAoKA0KPj4gKyBERUJV R19FUlJPUiwNCj4+ICsgIkVSUk9SOiBGYWlsZWQgdG8gZmluZCBidWlsZCBhbmQgaW5zdGFsbCBB Q1BJIFRhYmxlLiIgXA0KPj4gKyAiIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0dXMNCj4+ICsg KSk7DQo+PiArIH0NCj4+ICsgfSBlbHNlIGlmIChHZW5lcmF0b3ItPkJ1aWxkQWNwaVRhYmxlICE9 IE5VTEwpIHsNCj4+ICsgU3RhdHVzID0gQnVpbGRBbmRJbnN0YWxsU2luZ2xlQWNwaVRhYmxlICgN Cj4+ICsgVGFibGVGYWN0b3J5UHJvdG9jb2wsDQo+PiArIENmZ01nclByb3RvY29sLA0KPj4gKyBH ZW5lcmF0b3IsDQo+PiArIEFjcGlUYWJsZVByb3RvY29sLA0KPj4gKyBBY3BpVGFibGVJbmZvDQo+ PiArICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogRmFpbGVkIHRvIGZpbmQgYnVpbGQgYW5kIGlu c3RhbGwgQUNQSSBUYWJsZS4iIFwNCj4+ICsgIiBTdGF0dXMgPSAlclxuIiwNCj4+ICsgU3RhdHVz DQo+PiArICkpOw0KPj4gKyB9DQo+PiArIH0gZWxzZSB7DQo+PiArIFN0YXR1cyA9IEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfRVJST1IsDQo+PiArICJF UlJPUjogVGFibGUgR2VuZXJhdG9yIGRvZXMgbm90IGltcGxlbWVudCB0aGUiIFwNCj4+ICsgIiBB Q1BJX1RBQkxFX0dFTkVSQVRPUl9CVUlMRF9UQUJMRSBpbnRlcmZhY2UuIiBcDQo+PiArICIgVGFi bGVHZW5lcmF0b3JJZCA9IDB4JXguIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBBY3BpVGFibGVJbmZv LT5UYWJsZUdlbmVyYXRvcklkLA0KPj4gKyBTdGF0dXMNCj4+ICsgKSk7DQo+PiArIH0NCj4+ICsN Cj4+ICsgcmV0dXJuIFN0YXR1czsNCj4+ICt9DQo+PiArDQo+PiArLyoqIFRoZSBmdW5jdGlvbiBj aGVja3MgaWYgdGhlIENvbmZpZ3VyYXRpb24gTWFuYWdlciBoYXMgcHJvdmlkZWQgdGhlDQo+PiAr IG1hbmRhdG9yeSBBQ1BJIHRhYmxlcyBmb3IgaW5zdGFsbGF0aW9uLg0KPj4gKw0KPj4gKyBAcGFy YW0gW2luXSBBY3BpVGFibGVJbmZvIFBvaW50ZXIgdG8gdGhlIEFDUEkgVGFibGUgSW5mbyBsaXN0 Lg0KPj4gKyBAcGFyYW0gW2luXSBBY3BpVGFibGVDb3VudCBDb3VudCBvZiBBQ1BJIFRhYmxlIElu Zm8uDQo+PiArDQo+PiArIEByZXR2YWwgRUZJX1NVQ0NFU1MgU3VjY2Vzcy4NCj4+ICsgQHJldHZh bCBFRklfTk9UX0ZPVU5EIElmIG1hbmRhdG9yeSB0YWJsZSBpcyBub3QgZm91bmQuDQo+PiArKiov DQo+PiArU1RBVElDDQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK1ZlcmlmeU1hbmRh dG9yeVRhYmxlc0FyZVByZXNlbnQgKA0KPj4gKyBJTiBDT05TVCBDTV9TVERfT0JKX0FDUElfVEFC TEVfSU5GTyAqQ09OU1QgQWNwaVRhYmxlSW5mbywNCj4+ICsgSU4gVUlOVDMyIEFjcGlUYWJsZUNv dW50DQo+PiArICkNCj4+ICt7DQo+PiArIEVGSV9TVEFUVVMgU3RhdHVzOw0KPj4gKyBCT09MRUFO IEZhZHRGb3VuZDsNCj4+ICsgQk9PTEVBTiBNYWR0Rm91bmQ7DQo+PiArIEJPT0xFQU4gR3RkdEZv dW5kOw0KPj4gKyBCT09MRUFOIERzZHRGb3VuZDsNCj4+ICsgQk9PTEVBTiBEYmcyRm91bmQ7DQo+ PiArIEJPT0xFQU4gU3BjckZvdW5kOw0KPj4gKw0KPj4gKyBTdGF0dXMgPSBFRklfU1VDQ0VTUzsN Cj4+ICsgRmFkdEZvdW5kID0gRkFMU0U7DQo+PiArIE1hZHRGb3VuZCA9IEZBTFNFOw0KPj4gKyBH dGR0Rm91bmQgPSBGQUxTRTsNCj4+ICsgRHNkdEZvdW5kID0gRkFMU0U7DQo+PiArIERiZzJGb3Vu ZCA9IEZBTFNFOw0KPj4gKyBTcGNyRm91bmQgPSBGQUxTRTsNCj4+ICsgQVNTRVJUIChBY3BpVGFi bGVJbmZvICE9IE5VTEwpOw0KPj4gKw0KPj4gKyB3aGlsZSAoQWNwaVRhYmxlQ291bnQtLSAhPSAw KSB7DQo+PiArIHN3aXRjaCAoQWNwaVRhYmxlSW5mb1tBY3BpVGFibGVDb3VudF0uQWNwaVRhYmxl U2lnbmF0dXJlKSB7DQo+PiArIGNhc2UgRUZJX0FDUElfNl8yX0ZJWEVEX0FDUElfREVTQ1JJUFRJ T05fVEFCTEVfU0lHTkFUVVJFOg0KPj4gKyBGYWR0Rm91bmQgPSBUUlVFOw0KPj4gKyBicmVhazsN Cj4+ICsgY2FzZSBFRklfQUNQSV82XzJfTVVMVElQTEVfQVBJQ19ERVNDUklQVElPTl9UQUJMRV9T SUdOQVRVUkU6DQo+PiArIE1hZHRGb3VuZCA9IFRSVUU7DQo+PiArIGJyZWFrOw0KPj4gKyBjYXNl IEVGSV9BQ1BJXzZfMl9HRU5FUklDX1RJTUVSX0RFU0NSSVBUSU9OX1RBQkxFX1NJR05BVFVSRToN Cj4+ICsgR3RkdEZvdW5kID0gVFJVRTsNCj4+ICsgYnJlYWs7DQo+PiArIGNhc2UgRUZJX0FDUElf Nl8yX0RJRkZFUkVOVElBVEVEX1NZU1RFTV9ERVNDUklQVElPTl9UQUJMRV9TSUdOQVRVUkU6DQo+ PiArIERzZHRGb3VuZCA9IFRSVUU7DQo+PiArIGJyZWFrOw0KPj4gKyBjYXNlIEVGSV9BQ1BJXzZf Ml9ERUJVR19QT1JUXzJfVEFCTEVfU0lHTkFUVVJFOg0KPj4gKyBEYmcyRm91bmQgPSBUUlVFOw0K Pj4gKyBicmVhazsNCj4+ICsgY2FzZSBFRklfQUNQSV82XzJfU0VSSUFMX1BPUlRfQ09OU09MRV9S RURJUkVDVElPTl9UQUJMRV9TSUdOQVRVUkU6DQo+PiArIFNwY3JGb3VuZCA9IFRSVUU7DQo+PiAr IGJyZWFrOw0KPj4gKyBkZWZhdWx0Og0KPj4gKyBicmVhazsNCj4+ICsgfQ0KPj4gKyB9DQo+PiAr DQo+PiArIC8vIFdlIG5lZWQgYXQgbGVhc3QgdGhlIEZBRFQsIE1BRFQsIEdURFQgYW5kIHRoZSBE U0RUIHRhYmxlcyB0byBib290DQo+PiArIGlmICghRmFkdEZvdW5kKSB7DQo+PiArIERFQlVHICgo REVCVUdfRVJST1IsICJFUlJPUjogRkFEVCBUYWJsZSBub3QgZm91bmRcbiIpKTsNCj4+ICsgU3Rh dHVzID0gRUZJX05PVF9GT1VORDsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBpZiAoIU1hZHRGb3VuZCkg ew0KPj4gKyBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IE1BRFQgVGFibGUgbm90IGZvdW5k LlxuIikpOw0KPj4gKyBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPj4gKyB9DQo+PiArDQo+PiAr IGlmICghR3RkdEZvdW5kKSB7DQo+PiArIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogR1RE VCBUYWJsZSBub3QgZm91bmQuXG4iKSk7DQo+PiArIFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7DQo+ PiArIH0NCj4+ICsNCj4+ICsgaWYgKCFEc2R0Rm91bmQpIHsNCj4+ICsgREVCVUcgKChERUJVR19F UlJPUiwgIkVSUk9SOiBEU0RUIFRhYmxlIG5vdCBmb3VuZC5cbiIpKTsNCj4+ICsgU3RhdHVzID0g RUZJX05PVF9GT1VORDsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBpZiAoIURiZzJGb3VuZCkgew0KPj4g KyBERUJVRyAoKERFQlVHX1dBUk4sICJXQVJOSU5HOiBEQkcyIFRhYmxlIG5vdCBmb3VuZC5cbiIp KTsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBpZiAoIVNwY3JGb3VuZCkgew0KPj4gKyBERUJVRyAoKERF QlVHX1dBUk4sICJXQVJOSU5HOiBTUENSIFRhYmxlIG5vdCBmb3VuZC5cbiIpKTsNCj4+ICsgfQ0K Pj4gKw0KPj4gKyByZXR1cm4gU3RhdHVzOw0KPj4gK30NCj4+ICsNCj4+ICsvKiogR2VuZXJhdGUg YW5kIGluc3RhbGwgQUNQSSB0YWJsZXMuDQo+PiArDQo+PiArIFRoZSBmdW5jdGlvbiBnYXRoZXJz IHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIGluc3RhbGxpbmcgdGhlDQo+PiArIEFDUEkg dGFibGVzIGZyb20gdGhlIENvbmZpZ3VyYXRpb24gTWFuYWdlciwgaW52b2tlcyB0aGUgZ2VuZXJh dG9ycw0KPj4gKyBhbmQgaW5zdGFsbHMgdGhlbSAodmlhIEJ1aWxkQW5kSW5zdGFsbEFjcGlUYWJs ZSkuDQo+PiArDQo+PiArIEBwYXJhbSBbaW5dIFRhYmxlRmFjdG9yeVByb3RvY29sIFBvaW50ZXIg dG8gdGhlIFRhYmxlIEZhY3RvcnkgUHJvdG9jb2wNCj4+ICsgaW50ZXJmYWNlLg0KPj4gKyBAcGFy YW0gW2luXSBDZmdNZ3JQcm90b2NvbCBQb2ludGVyIHRvIHRoZSBDb25maWd1cmF0aW9uIE1hbmFn ZXINCj4+ICsgUHJvdG9jb2wgSW50ZXJmYWNlLg0KPj4gKw0KPj4gKyBAcmV0dmFsIEVGSV9TVUND RVNTIFN1Y2Nlc3MuDQo+PiArIEByZXR2YWwgRUZJX05PVF9GT1VORCBJZiBhIG1hbmRhdG9yeSB0 YWJsZSBvciBhIGdlbmVyYXRvciBpcyBub3QgZm91bmQuDQo+PiArKiovDQo+PiArU1RBVElDDQo+ PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK1Byb2Nlc3NBY3BpVGFibGVzICgNCj4+ICsg SU4gQ09OU1QgRURLSUlfRFlOQU1JQ19UQUJMRV9GQUNUT1JZX1BST1RPQ09MICpDT05TVCBUYWJs ZUZhY3RvcnlQcm90b2NvbCwNCj4+ICsgSU4gQ09OU1QgRURLSUlfQ09ORklHVVJBVElPTl9NQU5B R0VSX1BST1RPQ09MICpDT05TVCBDZmdNZ3JQcm90b2NvbA0KPj4gKyApDQo+PiArew0KPj4gKyBF RklfU1RBVFVTIFN0YXR1czsNCj4+ICsgRUZJX0FDUElfVEFCTEVfUFJPVE9DT0wgKkFjcGlUYWJs ZVByb3RvY29sOw0KPj4gKyBDTV9TVERfT0JKX0FDUElfVEFCTEVfSU5GTyAqQWNwaVRhYmxlSW5m bzsNCj4+ICsgVUlOVDMyIEFjcGlUYWJsZUNvdW50Ow0KPj4gKyBVSU5UMzIgSWR4Ow0KPj4gKw0K Pj4gKyBBU1NFUlQgKFRhYmxlRmFjdG9yeVByb3RvY29sICE9IE5VTEwpOw0KPj4gKyBBU1NFUlQg KENmZ01nclByb3RvY29sICE9IE5VTEwpOw0KPj4gKw0KPj4gKyAvLyBGaW5kIHRoZSBBY3BpVGFi bGUgcHJvdG9jb2wNCj4+ICsgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoDQo+PiArICZn RWZpQWNwaVRhYmxlUHJvdG9jb2xHdWlkLA0KPj4gKyBOVUxMLA0KPj4gKyAoVk9JRCAqKikmQWNw aVRhYmxlUHJvdG9jb2wNCj4+ICsgKTsNCj4+ICsgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K Pj4gKyBERUJVRyAoKA0KPj4gKyBERUJVR19FUlJPUiwNCj4+ICsgIkVSUk9SOiBGYWlsZWQgdG8g ZmluZCBBY3BpVGFibGUgcHJvdG9jb2wuIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0dXMNCj4+ ICsgKSk7DQo+PiArIHJldHVybiBTdGF0dXM7DQo+PiArIH0NCj4+ICsNCj4+ICsgU3RhdHVzID0g R2V0RVN0ZE9iakFjcGlUYWJsZUxpc3QgKA0KPj4gKyBDZmdNZ3JQcm90b2NvbCwNCj4+ICsgQ01f TlVMTF9UT0tFTiwNCj4+ICsgJkFjcGlUYWJsZUluZm8sDQo+PiArICZBY3BpVGFibGVDb3VudA0K Pj4gKyApOw0KPj4gKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiArIERFQlVHICgoDQo+ PiArIERFQlVHX0VSUk9SLA0KPj4gKyAiRVJST1I6IEZhaWxlZCB0byBnZXQgQUNQSSBUYWJsZSBM aXN0LiBTdGF0dXMgPSAlclxuIiwNCj4+ICsgU3RhdHVzDQo+PiArICkpOw0KPj4gKyByZXR1cm4g U3RhdHVzOw0KPj4gKyB9DQo+PiArDQo+PiArIGlmICgwID09IEFjcGlUYWJsZUNvdW50KSB7DQo+ PiArIERFQlVHICgoDQo+PiArIERFQlVHX0VSUk9SLA0KPj4gKyAiRVJST1I6IEVTdGRPYmpBY3Bp VGFibGVMaXN0OiBBY3BpVGFibGVDb3VudCA9ICVkXG4iLA0KPj4gKyBBY3BpVGFibGVDb3VudA0K Pj4gKyApKTsNCj4+ICsgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+PiArIH0NCj4+ICsNCj4+ICsg REVCVUcgKCgNCj4+ICsgREVCVUdfSU5GTywNCj4+ICsgIklORk86IEVTdGRPYmpBY3BpVGFibGVM aXN0OiBBY3BpVGFibGVDb3VudCA9ICVkXG4iLA0KPj4gKyBBY3BpVGFibGVDb3VudA0KPj4gKyAp KTsNCj4+ICsNCj4+ICsgLy8gQ2hlY2sgaWYgbWFuZGF0b3J5IEFDUEkgdGFibGVzIGFyZSBwcmVz ZW50Lg0KPj4gKyBTdGF0dXMgPSBWZXJpZnlNYW5kYXRvcnlUYWJsZXNBcmVQcmVzZW50ICgNCj4+ ICsgQWNwaVRhYmxlSW5mbywNCj4+ICsgQWNwaVRhYmxlQ291bnQNCj4+ICsgKTsNCj4+ICsgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gKyBERUJVRyAoKA0KPj4gKyBERUJVR19FUlJPUiwN Cj4+ICsgIkVSUk9SOiBGYWlsZWQgdG8gZmluZCBtYW5kYXRvcnkgQUNQSSBUYWJsZShzKS4iDQo+ PiArICIgU3RhdHVzID0gJXJcbiIsDQo+PiArIFN0YXR1cw0KPj4gKyApKTsNCj4+ICsgcmV0dXJu IFN0YXR1czsNCj4+ICsgfQ0KPj4gKw0KPj4gKyAvLyBBZGQgdGhlIEZBRFQgVGFibGUgZmlyc3Qu DQo+PiArIGZvciAoSWR4ID0gMDsgSWR4IDwgQWNwaVRhYmxlQ291bnQ7IElkeCsrKSB7DQo+PiAr IGlmIChDUkVBVEVfU1REX0FDUElfVEFCTEVfR0VOX0lEIChFU3RkQWNwaVRhYmxlSWRGYWR0KSA9 PQ0KPj4gKyBBY3BpVGFibGVJbmZvW0lkeF0uVGFibGVHZW5lcmF0b3JJZCkNCj4+ICsgew0KPj4g KyBTdGF0dXMgPSBCdWlsZEFuZEluc3RhbGxBY3BpVGFibGUgKA0KPj4gKyBUYWJsZUZhY3RvcnlQ cm90b2NvbCwNCj4+ICsgQ2ZnTWdyUHJvdG9jb2wsDQo+PiArIEFjcGlUYWJsZVByb3RvY29sLA0K Pj4gKyAmQWNwaVRhYmxlSW5mb1tJZHhdDQo+PiArICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJPUjog RmFpbGVkIHRvIGZpbmQgYnVpbGQgYW5kIGluc3RhbGwgQUNQSSBGQURUIFRhYmxlLiIgXA0KPj4g KyAiIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0dXMNCj4+ICsgKSk7DQo+PiArIHJldHVybiBT dGF0dXM7DQo+PiArIH0NCj4+ICsNCj4+ICsgYnJlYWs7DQo+PiArIH0NCj4+ICsgfSAvLyBmb3IN Cj4+ICsNCj4+ICsgLy8gQWRkIHJlbWFpbmluZyBBQ1BJIFRhYmxlcw0KPj4gKyBmb3IgKElkeCA9 IDA7IElkeCA8IEFjcGlUYWJsZUNvdW50OyBJZHgrKykgew0KPj4gKyBERUJVRyAoKA0KPj4gKyBE RUJVR19JTkZPLA0KPj4gKyAiSU5GTzogQWNwaVRhYmxlSW5mb1slZF0uVGFibGVHZW5lcmF0b3JJ ZCA9IDB4JXhcbiIsDQo+PiArIElkeCwNCj4+ICsgQWNwaVRhYmxlSW5mb1tJZHhdLlRhYmxlR2Vu ZXJhdG9ySWQNCj4+ICsgKSk7DQo+PiArDQo+PiArIC8vIFNraXAgRkFEVCBUYWJsZSBzaW5jZSB3 ZSBoYXZlIGFscmVhZHkgYWRkZWQNCj4+ICsgaWYgKENSRUFURV9TVERfQUNQSV9UQUJMRV9HRU5f SUQgKEVTdGRBY3BpVGFibGVJZEZhZHQpID09DQo+PiArIEFjcGlUYWJsZUluZm9bSWR4XS5UYWJs ZUdlbmVyYXRvcklkKQ0KPj4gKyB7DQo+PiArIGNvbnRpbnVlOw0KPj4gKyB9DQo+PiArDQo+PiAr IC8vIFNraXAgdGhlIFJlc2VydmVkIHRhYmxlIEdlbmVyYXRvciBJRCBmb3Igc3RhbmRhcmQgZ2Vu ZXJhdG9ycw0KPj4gKyBpZiAoKElTX0dFTkVSQVRPUl9OQU1FU1BBQ0VfU1REIChBY3BpVGFibGVJ bmZvW0lkeF0uVGFibGVHZW5lcmF0b3JJZCkpICYmDQo+PiArICgoQ1JFQVRFX1NURF9BQ1BJX1RB QkxFX0dFTl9JRCAoRVN0ZEFjcGlUYWJsZUlkUmVzZXJ2ZWQpID49DQo+PiArIEFjcGlUYWJsZUlu Zm9bSWR4XS5UYWJsZUdlbmVyYXRvcklkKSB8fA0KPj4gKyAoQ1JFQVRFX1NURF9BQ1BJX1RBQkxF X0dFTl9JRCAoRVN0ZEFjcGlUYWJsZUlkTWF4KSA8PQ0KPj4gKyBBY3BpVGFibGVJbmZvW0lkeF0u VGFibGVHZW5lcmF0b3JJZCkpKQ0KPj4gKyB7DQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX1dB Uk4sDQo+PiArICJXQVJOSU5HOiBJbnZhbGlkIEFDUEkgR2VuZXJhdG9yIHRhYmxlIElEID0gMHgl eCwgU2tpcHBpbmcuLi5cbiIsDQo+PiArIEFjcGlUYWJsZUluZm9bSWR4XS5UYWJsZUdlbmVyYXRv cklkDQo+PiArICkpOw0KPj4gKyBjb250aW51ZTsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBTdGF0dXMg PSBCdWlsZEFuZEluc3RhbGxBY3BpVGFibGUgKA0KPj4gKyBUYWJsZUZhY3RvcnlQcm90b2NvbCwN Cj4+ICsgQ2ZnTWdyUHJvdG9jb2wsDQo+PiArIEFjcGlUYWJsZVByb3RvY29sLA0KPj4gKyAmQWNw aVRhYmxlSW5mb1tJZHhdDQo+PiArICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogRmFpbGVkIHRv IGZpbmQsIGJ1aWxkLCBhbmQgaW5zdGFsbCBBQ1BJIFRhYmxlLiIgXA0KPj4gKyAiIFN0YXR1cyA9 ICVyXG4iLA0KPj4gKyBTdGF0dXMNCj4+ICsgKSk7DQo+PiArIHJldHVybiBTdGF0dXM7DQo+PiAr IH0NCj4+ICsgfSAvLyBmb3INCj4+ICsNCj4+ICsgcmV0dXJuIFN0YXR1czsNCj4+ICt9DQo+PiAr DQo+PiArLyoqIENhbGxiYWNrIEZ1bmN0aW9uIGZvciBTbWJpb3MgdGFibGUgZ2VuZXJhdGlvbi4N Cj4+ICsNCj4+ICsgQ2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBTTUJJT1MgcHJvdG9jb2wgaXMgaW5z dGFsbGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdGhlbg0KPj4gKyBpbnZva2UgdGhlIGNvZGUgdG8g aW5zdGFsbCB0aGUgYXZhaWxhYmxlIFNNQklPUyB0YWJsZXMuDQo+PiArDQo+PiArIEBwYXJhbSBF dmVudA0KPj4gKyBAcGFyYW0gQ29udGV4dA0KPj4gKw0KPj4gKyBAcmV0dmFsIE5vbmUuDQo+PiAr KiovDQo+PiArVk9JRA0KPj4gK0FjcGlUYWJsZVByb3RvY29sUmVhZHkgKA0KPj4gKyBJTiBFRklf RVZFTlQgRXZlbnQsDQo+PiArIElOIFZPSUQgKkNvbnRleHQNCj4+ICsgKQ0KPj4gK3sNCj4+ICsg RUZJX1NUQVRVUyBTdGF0dXM7DQo+PiArIEVES0lJX0NPTkZJR1VSQVRJT05fTUFOQUdFUl9QUk9U T0NPTCAqQ2ZnTWdyUHJvdG9jb2w7DQo+PiArIENNX1NURF9PQkpfQ09ORklHVVJBVElPTl9NQU5B R0VSX0lORk8gKkNmZ01mckluZm87DQo+PiArIEVES0lJX0RZTkFNSUNfVEFCTEVfRkFDVE9SWV9Q Uk9UT0NPTCAqVGFibGVGYWN0b3J5UHJvdG9jb2w7DQo+PiArDQo+PiArIC8vIExvY2F0ZSB0aGUg RHluYW1pYyBUYWJsZSBGYWN0b3J5DQo+PiArIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wg KA0KPj4gKyAmZ0Vka2lpRHluYW1pY1RhYmxlRmFjdG9yeVByb3RvY29sR3VpZCwNCj4+ICsgTlVM TCwNCj4+ICsgKFZPSUQgKiopJlRhYmxlRmFjdG9yeVByb3RvY29sDQo+PiArICk7DQo+PiArIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfRVJST1Is DQo+PiArICJFUlJPUjogRmFpbGVkIHRvIGZpbmQgRHluYW1pYyBUYWJsZSBGYWN0b3J5IHByb3Rv Y29sLiIgXA0KPj4gKyAiIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0dXMNCj4+ICsgKSk7DQo+ PiArIHJldHVybjsNCj4+ICsgfQ0KPj4gKw0KPj4gKyAvLyBMb2NhdGUgdGhlIENvbmZpZ3VyYXRp b24gTWFuYWdlciBmb3IgdGhlIFBsYXRmb3JtDQo+PiArIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJv dG9jb2wgKA0KPj4gKyAmZ0Vka2lpQ29uZmlndXJhdGlvbk1hbmFnZXJQcm90b2NvbEd1aWQsDQo+ PiArIE5VTEwsDQo+PiArIChWT0lEICoqKSZDZmdNZ3JQcm90b2NvbA0KPj4gKyApOw0KPj4gKyBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX0VSUk9S LA0KPj4gKyAiRVJST1I6IEZhaWxlZCB0byBmaW5kIENvbmZpZ3VyYXRpb24gTWFuYWdlciBwcm90 b2NvbC4gU3RhdHVzID0gJXJcbiIsDQo+PiArIFN0YXR1cw0KPj4gKyApKTsNCj4+ICsgcmV0dXJu Ow0KPj4gKyB9DQo+PiArDQo+PiArIFN0YXR1cyA9IEdldENnZk1nckluZm8gKENmZ01nclByb3Rv Y29sLCAmQ2ZnTWZySW5mbyk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsg REVCVUcgKCgNCj4+ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogRmFpbGVkIHRvIGdldCBD b25maWd1cmF0aW9uIE1hbmFnZXIgaW5mby4gU3RhdHVzID0gJXJcbiIsDQo+PiArIFN0YXR1cw0K Pj4gKyApKTsNCj4+ICsgcmV0dXJuOw0KPj4gKyB9DQo+PiArDQo+PiArIERFQlVHICgoDQo+PiAr IERFQlVHX0lORk8sDQo+PiArICJJTkZPOiBDb25maWd1cmF0aW9uIE1hbmFnZXIgVmVyc2lvbiA9 IDB4JXgsIE9lbUlEID0gJWMlYyVjJWMlYyVjXG4iLA0KPj4gKyBDZmdNZnJJbmZvLT5SZXZpc2lv biwNCj4+ICsgQ2ZnTWZySW5mby0+T2VtSWRbMF0sDQo+PiArIENmZ01mckluZm8tPk9lbUlkWzFd LA0KPj4gKyBDZmdNZnJJbmZvLT5PZW1JZFsyXSwNCj4+ICsgQ2ZnTWZySW5mby0+T2VtSWRbM10s DQo+PiArIENmZ01mckluZm8tPk9lbUlkWzRdLA0KPj4gKyBDZmdNZnJJbmZvLT5PZW1JZFs1XQ0K Pj4gKyApKTsNCj4+ICsNCj4+ICsgU3RhdHVzID0gUHJvY2Vzc0FjcGlUYWJsZXMgKFRhYmxlRmFj dG9yeVByb3RvY29sLCBDZmdNZ3JQcm90b2NvbCk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogQUNQ SSBUYWJsZSBwcm9jZXNzaW5nIGZhaWx1cmUuIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0dXMN Cj4+ICsgKSk7DQo+PiArIH0NCj4+ICt9DQo+PiBkaWZmIC0tZ2l0IGEvRHluYW1pY1RhYmxlc1Br Zy9Ecml2ZXJzL0R5bmFtaWNUYWJsZU1hbmFnZXJEeGUvRHluYW1pY1RhYmxlTWFuYWdlckR4ZS5j IGIvRHluYW1pY1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZU1hbmFnZXJEeGUvRHluYW1p Y1RhYmxlTWFuYWdlckR4ZS5jDQo+PiBpbmRleCAxZTliODExYzQwLi4yNDJjNDBiZTNiIDEwMDY0 NA0KPj4gLS0tIGEvRHluYW1pY1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZU1hbmFnZXJE eGUvRHluYW1pY1RhYmxlTWFuYWdlckR4ZS5jDQo+PiArKysgYi9EeW5hbWljVGFibGVzUGtnL0Ry aXZlcnMvRHluYW1pY1RhYmxlTWFuYWdlckR4ZS9EeW5hbWljVGFibGVNYW5hZ2VyRHhlLmMNCj4+ IEBAIC0yLDcwNCArMiwzOSBAQA0KPj4gRHluYW1pYyBUYWJsZSBNYW5hZ2VyIER4ZQ0KPj4gDQo+ PiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE5LCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl cnZlZC4NCj4+ICsgQ29weXJpZ2h0IChjKSAyMDIyIC0gMjAyMywgTlZJRElBIENPUlBPUkFUSU9O ICYgQUZGSUxJQVRFUy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4+IA0KPj4gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4+IA0KPj4gKiovDQo+PiANCj4+ICNp bmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+PiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxp Yi5oPg0KPj4gI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQo+PiAjaW5jbHVkZSA8TGlicmFy eS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4+IC0jaW5jbHVkZSA8UHJvdG9jb2wvQWNw aVN5c3RlbURlc2NyaXB0aW9uVGFibGUuaD4NCj4+IC0jaW5jbHVkZSA8UHJvdG9jb2wvQWNwaVRh YmxlLmg+DQo+PiANCj4+IC8vIE1vZHVsZSBzcGVjaWZpYyBpbmNsdWRlIGZpbGVzLg0KPj4gLSNp bmNsdWRlIDxBY3BpVGFibGVHZW5lcmF0b3IuaD4NCj4+ICNpbmNsdWRlIDxDb25maWd1cmF0aW9u TWFuYWdlck9iamVjdC5oPg0KPj4gI2luY2x1ZGUgPENvbmZpZ3VyYXRpb25NYW5hZ2VySGVscGVy Lmg+DQo+PiAtI2luY2x1ZGUgPERldmljZVRyZWVUYWJsZUdlbmVyYXRvci5oPg0KPj4gI2luY2x1 ZGUgPExpYnJhcnkvVGFibGVIZWxwZXJMaWIuaD4NCj4+ICNpbmNsdWRlIDxQcm90b2NvbC9Db25m aWd1cmF0aW9uTWFuYWdlclByb3RvY29sLmg+DQo+PiAtI2luY2x1ZGUgPFByb3RvY29sL0R5bmFt aWNUYWJsZUZhY3RvcnlQcm90b2NvbC5oPg0KPj4gLSNpbmNsdWRlIDxTbWJpb3NUYWJsZUdlbmVy YXRvci5oPg0KPj4gDQo+PiAtLy8vDQo+PiAtLy8vIEJpdCBkZWZpbml0aW9ucyBmb3IgYWNjZXB0 YWJsZSBBQ1BJIHRhYmxlIHByZXNlbmNlIGZvcm1hdHMuDQo+PiAtLy8vIEN1cnJlbnRseSBvbmx5 IEFDUEkgdGFibGVzIHByZXNlbnQgaW4gdGhlIEFDUEkgaW5mbyBsaXN0IGFuZA0KPj4gLS8vLyBh bHJlYWR5IGluc3RhbGxlZCB3aWxsIGNvdW50IHRvd2FyZHMgIlRhYmxlIFByZXNlbnQiIGR1cmlu Zw0KPj4gLS8vLyB2ZXJpZmljYXRpb24gcm91dGluZS4NCj4+IC0vLy8NCj4+IC0jZGVmaW5lIEFD UElfVEFCTEVfUFJFU0VOVF9JTkZPX0xJU1QgQklUMA0KPj4gLSNkZWZpbmUgQUNQSV9UQUJMRV9Q UkVTRU5UX0lOU1RBTExFRCBCSVQxDQo+PiArU1RBVElDIFZPSUQgKkFjcGlUYWJsZVByb3RvY29s UmVnaXN0cmF0aW9uOw0KPj4gK1NUQVRJQyBWT0lEICpTbWJpb3NQcm90b2NvbFJlZ2lzdHJhdGlv bjsNCj4+IA0KPj4gLS8vLw0KPj4gLS8vLyBPcmRlciBvZiBBQ1BJIHRhYmxlIGJlaW5nIHZlcmlm aWVkIGR1cmluZyBwcmVzZW5jZSBpbnNwZWN0aW9uLg0KPj4gLS8vLw0KPj4gLSNkZWZpbmUgQUNQ SV9UQUJMRV9WRVJJRllfRkFEVCAwDQo+PiAtI2RlZmluZSBBQ1BJX1RBQkxFX1ZFUklGWV9NQURU IDENCj4+IC0jZGVmaW5lIEFDUElfVEFCTEVfVkVSSUZZX0dURFQgMg0KPj4gLSNkZWZpbmUgQUNQ SV9UQUJMRV9WRVJJRllfRFNEVCAzDQo+PiAtI2RlZmluZSBBQ1BJX1RBQkxFX1ZFUklGWV9EQkcy IDQNCj4+IC0jZGVmaW5lIEFDUElfVEFCTEVfVkVSSUZZX1NQQ1IgNQ0KPj4gLSNkZWZpbmUgQUNQ SV9UQUJMRV9WRVJJRllfQ09VTlQgNg0KPj4gK2V4dGVybg0KPj4gK1ZPSUQNCj4+ICtTbWJpb3NQ cm90b2NvbFJlYWR5ICgNCj4+ICsgSU4gRUZJX0VWRU5UIEV2ZW50LA0KPj4gKyBJTiBWT0lEICpD b250ZXh0DQo+PiArICk7DQo+PiANCj4+IC0vLy8NCj4+IC0vLy8gUHJpdmF0ZSBkYXRhIHN0cnVj dHVyZSB0byB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mIG1hbmRhdG9yeQ0KPj4gLS8vLyBvciBvcHRp b25hbCBBQ1BJIHRhYmxlcy4NCj4+IC0vLy8NCj4+IC10eXBlZGVmIHN0cnVjdCB7DQo+PiAtIC8v LyBFU1REIElEIGZvciB0aGUgQUNQSSB0YWJsZSBvZiBpbnRlcmVzdC4NCj4+IC0gRVNURF9BQ1BJ X1RBQkxFX0lEIEVzdGRUYWJsZUlkOw0KPj4gLSAvLy8gU3RhbmRhcmQgVUlOVDMyIEFDUEkgc2ln bmF0dXJlLg0KPj4gLSBVSU5UMzIgQWNwaVRhYmxlU2lnbmF0dXJlOw0KPj4gLSAvLy8gNCBjaGFy YWN0ZXIgQUNQSSB0YWJsZSBuYW1lICh0aGUgNXRoIGNoYXI4IGlzIGZvciBudWxsIHRlcm1pbmF0 b3IpLg0KPj4gLSBDSEFSOCBBY3BpVGFibGVOYW1lW3NpemVvZiAoVUlOVDMyKSArIDFdOw0KPj4g LSAvLy8gSW5kaWNhdG9yIG9uIHdoZXRoZXIgdGhlIEFDUEkgdGFibGUgaXMgcmVxdWlyZWQuDQo+ PiAtIEJPT0xFQU4gSXNNYW5kYXRvcnk7DQo+PiAtIC8vLyBGb3JtYXRzIG9mIHZlcmlmaWVkIHBy ZXNlbmNlcywgYXMgZGVmaW5lZCBieSBBQ1BJX1RBQkxFX1BSRVNFTlRfKg0KPj4gLSAvLy8gVGhp cyBmaWVsZCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgd2lsbCBiZSBwb3B1bGF0ZWQg ZHVyaW5nDQo+PiAtIC8vLyB2ZXJpZmljYXRpb24gcm91dGluZS4NCj4+IC0gVUlOVDE2IFByZXNl bmNlOw0KPj4gLX0gQUNQSV9UQUJMRV9QUkVTRU5DRV9JTkZPOw0KPj4gLQ0KPj4gLS8vLw0KPj4g LS8vLyBXZSByZXF1aXJlIHRoZSBGQURULCBNQURULCBHVERUIGFuZCB0aGUgRFNEVCB0YWJsZXMg dG8gYm9vdC4NCj4+IC0vLy8gVGhpcyBsaXN0IGFsc28gaW5jbHVkZSBvcHRpb25hbCBBQ1BJIHRh YmxlczogREJHMiwgU1BDUi4NCj4+IC0vLy8NCj4+IC1BQ1BJX1RBQkxFX1BSRVNFTkNFX0lORk8g bUFjcGlWZXJpZnlUYWJsZXNbQUNQSV9UQUJMRV9WRVJJRllfQ09VTlRdID0gew0KPj4gLSB7IEVT dGRBY3BpVGFibGVJZEZhZHQsIEVGSV9BQ1BJXzZfMl9GSVhFRF9BQ1BJX0RFU0NSSVBUSU9OX1RB QkxFX1NJR05BVFVSRSwgIkZBRFQiLCBUUlVFLCAwIH0sDQo+PiAtIHsgRVN0ZEFjcGlUYWJsZUlk TWFkdCwgRUZJX0FDUElfNl8yX01VTFRJUExFX0FQSUNfREVTQ1JJUFRJT05fVEFCTEVfU0lHTkFU VVJFLCAiTUFEVCIsIFRSVUUsIDAgfSwNCj4+IC0geyBFU3RkQWNwaVRhYmxlSWRHdGR0LCBFRklf QUNQSV82XzJfR0VORVJJQ19USU1FUl9ERVNDUklQVElPTl9UQUJMRV9TSUdOQVRVUkUsICJHVERU IiwgVFJVRSwgMCB9LA0KPj4gLSB7IEVTdGRBY3BpVGFibGVJZERzZHQsIEVGSV9BQ1BJXzZfMl9E SUZGRVJFTlRJQVRFRF9TWVNURU1fREVTQ1JJUFRJT05fVEFCTEVfU0lHTkFUVVJFLCAiRFNEVCIs IFRSVUUsIDAgfSwNCj4+IC0geyBFU3RkQWNwaVRhYmxlSWREYmcyLCBFRklfQUNQSV82XzJfREVC VUdfUE9SVF8yX1RBQkxFX1NJR05BVFVSRSwgIkRCRzIiLCBGQUxTRSwgMCB9LA0KPj4gLSB7IEVT dGRBY3BpVGFibGVJZFNwY3IsIEVGSV9BQ1BJXzZfMl9TRVJJQUxfUE9SVF9DT05TT0xFX1JFRElS RUNUSU9OX1RBQkxFX1NJR05BVFVSRSwgIlNQQ1IiLCBGQUxTRSwgMCB9LA0KPj4gLX07DQo+PiAt DQo+PiAtLyoqIFRoaXMgbWFjcm8gZXhwYW5kcyB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0cmlldmVz IHRoZSBBQ1BJIFRhYmxlDQo+PiAtIExpc3QgZnJvbSB0aGUgQ29uZmlndXJhdGlvbiBNYW5hZ2Vy Lg0KPj4gLSovDQo+PiAtR0VUX09CSkVDVF9MSVNUICgNCj4+IC0gRU9iak5hbWVTcGFjZVN0YW5k YXJkLA0KPj4gLSBFU3RkT2JqQWNwaVRhYmxlTGlzdCwNCj4+IC0gQ01fU1REX09CSl9BQ1BJX1RB QkxFX0lORk8NCj4+IC0gKQ0KPj4gLQ0KPj4gLS8qKiBBIGhlbHBlciBmdW5jdGlvbiB0byBidWls ZCBhbmQgaW5zdGFsbCBhIHNpbmdsZSBBQ1BJIHRhYmxlLg0KPj4gLQ0KPj4gLSBUaGlzIGlzIGEg aGVscGVyIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgVGFibGUgZ2VuZXJhdG9yIGludGVyZmFj ZQ0KPj4gLSBmb3IgYnVpbGRpbmcgYW4gQUNQSSB0YWJsZS4gSXQgdXNlcyB0aGUgQWNwaVRhYmxl UHJvdG9jb2wgdG8gaW5zdGFsbCB0aGUNCj4+IC0gdGFibGUsIHRoZW4gZnJlZXMgdGhlIHJlc291 cmNlcyBhbGxvY2F0ZWQgZm9yIGdlbmVyYXRpbmcgaXQuDQo+PiAtDQo+PiAtIEBwYXJhbSBbaW5d IFRhYmxlRmFjdG9yeVByb3RvY29sIFBvaW50ZXIgdG8gdGhlIFRhYmxlIEZhY3RvcnkgUHJvdG9j b2wNCj4+IC0gaW50ZXJmYWNlLg0KPj4gLSBAcGFyYW0gW2luXSBDZmdNZ3JQcm90b2NvbCBQb2lu dGVyIHRvIHRoZSBDb25maWd1cmF0aW9uIE1hbmFnZXINCj4+IC0gUHJvdG9jb2wgSW50ZXJmYWNl Lg0KPj4gLSBAcGFyYW0gW2luXSBHZW5lcmF0b3IgUG9pbnRlciB0byB0aGUgQWNwaVRhYmxlIGdl bmVyYXRvci4NCj4+IC0gQHBhcmFtIFtpbl0gQWNwaVRhYmxlUHJvdG9jb2wgUG9pbnRlciB0byB0 aGUgQWNwaVRhYmxlIHByb3RvY29sLg0KPj4gLSBAcGFyYW0gW2luXSBBY3BpVGFibGVJbmZvIFBv aW50ZXIgdG8gdGhlIEFDUEkgdGFibGUgSW5mby4NCj4+IC0NCj4+IC0gQHJldHZhbCBFRklfU1VD Q0VTUyBTdWNjZXNzLg0KPj4gLSBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBBIHBhcmFt ZXRlciBpcyBpbnZhbGlkLg0KPj4gLSBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgUmVxdWlyZWQgb2Jq ZWN0IGlzIG5vdCBmb3VuZC4NCj4+IC0gQHJldHZhbCBFRklfQkFEX0JVRkZFUl9TSVpFIFNpemUg cmV0dXJuZWQgYnkgdGhlIENvbmZpZ3VyYXRpb24gTWFuYWdlcg0KPj4gLSBpcyBsZXNzIHRoYW4g dGhlIE9iamVjdCBzaXplIGZvciB0aGUNCj4+IC0gcmVxdWVzdGVkIG9iamVjdC4NCj4+IC0qKi8N Cj4+IC1TVEFUSUMNCj4+IC1FRklfU1RBVFVTDQo+PiAtRUZJQVBJDQo+PiAtQnVpbGRBbmRJbnN0 YWxsU2luZ2xlQWNwaVRhYmxlICgNCj4+IC0gSU4gQ09OU1QgRURLSUlfRFlOQU1JQ19UQUJMRV9G QUNUT1JZX1BST1RPQ09MICpDT05TVCBUYWJsZUZhY3RvcnlQcm90b2NvbCwNCj4+IC0gSU4gQ09O U1QgRURLSUlfQ09ORklHVVJBVElPTl9NQU5BR0VSX1BST1RPQ09MICpDT05TVCBDZmdNZ3JQcm90 b2NvbCwNCj4+IC0gSU4gQ09OU1QgQUNQSV9UQUJMRV9HRU5FUkFUT1IgKkNPTlNUIEdlbmVyYXRv ciwNCj4+IC0gSU4gRUZJX0FDUElfVEFCTEVfUFJPVE9DT0wgKkFjcGlUYWJsZVByb3RvY29sLA0K Pj4gLSBJTiBDT05TVCBDTV9TVERfT0JKX0FDUElfVEFCTEVfSU5GTyAqQ09OU1QgQWNwaVRhYmxl SW5mbw0KPj4gLSApDQo+PiAtew0KPj4gLSBFRklfU1RBVFVTIFN0YXR1czsNCj4+IC0gRUZJX1NU QVRVUyBTdGF0dXMxOw0KPj4gLSBFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIgKkFjcGlUYWJs ZTsNCj4+IC0gVUlOVE4gVGFibGVIYW5kbGU7DQo+PiAtDQo+PiAtIEFjcGlUYWJsZSA9IE5VTEw7 DQo+PiAtIFN0YXR1cyA9IEdlbmVyYXRvci0+QnVpbGRBY3BpVGFibGUgKA0KPj4gLSBHZW5lcmF0 b3IsDQo+PiAtIEFjcGlUYWJsZUluZm8sDQo+PiAtIENmZ01nclByb3RvY29sLA0KPj4gLSAmQWNw aVRhYmxlDQo+PiAtICk7DQo+PiAtIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+IC0gREVC VUcgKCgNCj4+IC0gREVCVUdfRVJST1IsDQo+PiAtICJFUlJPUjogRmFpbGVkIHRvIEJ1aWxkIFRh YmxlLiIgXA0KPj4gLSAiIFRhYmxlR2VuZXJhdG9ySWQgPSAweCV4LiBTdGF0dXMgPSAlclxuIiwN Cj4+IC0gQWNwaVRhYmxlSW5mby0+VGFibGVHZW5lcmF0b3JJZCwNCj4+IC0gU3RhdHVzDQo+PiAt ICkpOw0KPj4gLSAvLyBGcmVlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzLg0KPj4gLSBnb3RvIGV4 aXRfaGFuZGxlcjsNCj4+IC0gfQ0KPj4gLQ0KPj4gLSBpZiAoQWNwaVRhYmxlID09IE5VTEwpIHsN Cj4+IC0gU3RhdHVzID0gRUZJX05PVF9GT1VORDsNCj4+IC0gZ290byBleGl0X2hhbmRsZXI7DQo+ PiAtIH0NCj4+IC0NCj4+IC0gLy8gRHVtcCBBQ1BJIFRhYmxlIEhlYWRlcg0KPj4gLSBEVU1QX0FD UElfVEFCTEVfSEVBREVSIChBY3BpVGFibGUpOw0KPj4gLQ0KPj4gLSAvLyBJbnN0YWxsIEFDUEkg dGFibGUNCj4+IC0gU3RhdHVzID0gQWNwaVRhYmxlUHJvdG9jb2wtPkluc3RhbGxBY3BpVGFibGUg KA0KPj4gLSBBY3BpVGFibGVQcm90b2NvbCwNCj4+IC0gQWNwaVRhYmxlLA0KPj4gLSBBY3BpVGFi bGUtPkxlbmd0aCwNCj4+IC0gJlRhYmxlSGFuZGxlDQo+PiAtICk7DQo+PiAtIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4+IC0gREVCVUcgKCgNCj4+IC0gREVCVUdfRVJST1IsDQo+PiAtICJF UlJPUjogRmFpbGVkIHRvIEluc3RhbGwgQUNQSSBUYWJsZS4gU3RhdHVzID0gJXJcbiIsDQo+PiAt IFN0YXR1cw0KPj4gLSApKTsNCj4+IC0gLy8gRnJlZSBhbnkgYWxsb2NhdGVkIHJlc291cmNlcy4N Cj4+IC0gZ290byBleGl0X2hhbmRsZXI7DQo+PiAtIH0NCj4+IC0NCj4+IC0gREVCVUcgKCgNCj4+ IC0gREVCVUdfSU5GTywNCj4+IC0gIklORk86IEFDUEkgVGFibGUgaW5zdGFsbGVkLiBTdGF0dXMg PSAlclxuIiwNCj4+IC0gU3RhdHVzDQo+PiAtICkpOw0KPj4gLQ0KPj4gLWV4aXRfaGFuZGxlcjoN Cj4+IC0gLy8gRnJlZSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgZ2VuZXJhdGluZyB0aGUg dGFibGVzLg0KPj4gLSBpZiAoR2VuZXJhdG9yLT5GcmVlVGFibGVSZXNvdXJjZXMgIT0gTlVMTCkg ew0KPj4gLSBTdGF0dXMxID0gR2VuZXJhdG9yLT5GcmVlVGFibGVSZXNvdXJjZXMgKA0KPj4gLSBH ZW5lcmF0b3IsDQo+PiAtIEFjcGlUYWJsZUluZm8sDQo+PiAtIENmZ01nclByb3RvY29sLA0KPj4g LSAmQWNwaVRhYmxlDQo+PiAtICk7DQo+PiAtIGlmIChFRklfRVJST1IgKFN0YXR1czEpKSB7DQo+ PiAtIERFQlVHICgoDQo+PiAtIERFQlVHX0VSUk9SLA0KPj4gLSAiRVJST1I6IEZhaWxlZCB0byBG cmVlIFRhYmxlIFJlc291cmNlcy4iIFwNCj4+IC0gIlRhYmxlR2VuZXJhdG9ySWQgPSAweCV4LiBT dGF0dXMgPSAlclxuIiwNCj4+IC0gQWNwaVRhYmxlSW5mby0+VGFibGVHZW5lcmF0b3JJZCwNCj4+ IC0gU3RhdHVzMQ0KPj4gLSApKTsNCj4+IC0gfQ0KPj4gLQ0KPj4gLSAvLyBSZXR1cm4gdGhlIGZp cnN0IGVycm9yIHN0YXR1cyBpbiBjYXNlIG9mIGZhaWx1cmUNCj4+IC0gaWYgKCFFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4+IC0gU3RhdHVzID0gU3RhdHVzMTsNCj4+IC0gfQ0KPj4gLSB9DQo+PiAt DQo+PiAtIHJldHVybiBTdGF0dXM7DQo+PiAtfQ0KPj4gLQ0KPj4gLS8qKiBBIGhlbHBlciBmdW5j dGlvbiB0byBidWlsZCBhbmQgaW5zdGFsbCBtdWx0aXBsZSBBQ1BJIHRhYmxlcy4NCj4+IC0NCj4+ IC0gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIFRhYmxlIGdlbmVy YXRvciBpbnRlcmZhY2UNCj4+IC0gZm9yIGJ1aWxkaW5nIGFuIEFDUEkgdGFibGUuIEl0IHVzZXMg dGhlIEFjcGlUYWJsZVByb3RvY29sIHRvIGluc3RhbGwgdGhlDQo+PiAtIHRhYmxlLCB0aGVuIGZy ZWVzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBnZW5lcmF0aW5nIGl0Lg0KPj4gLQ0KPj4g LSBAcGFyYW0gW2luXSBUYWJsZUZhY3RvcnlQcm90b2NvbCBQb2ludGVyIHRvIHRoZSBUYWJsZSBG YWN0b3J5IFByb3RvY29sDQo+PiAtIGludGVyZmFjZS4NCj4+IC0gQHBhcmFtIFtpbl0gQ2ZnTWdy UHJvdG9jb2wgUG9pbnRlciB0byB0aGUgQ29uZmlndXJhdGlvbiBNYW5hZ2VyDQo+PiAtIFByb3Rv Y29sIEludGVyZmFjZS4NCj4+IC0gQHBhcmFtIFtpbl0gR2VuZXJhdG9yIFBvaW50ZXIgdG8gdGhl IEFjcGlUYWJsZSBnZW5lcmF0b3IuDQo+PiAtIEBwYXJhbSBbaW5dIEFjcGlUYWJsZVByb3RvY29s IFBvaW50ZXIgdG8gdGhlIEFjcGlUYWJsZSBwcm90b2NvbC4NCj4+IC0gQHBhcmFtIFtpbl0gQWNw aVRhYmxlSW5mbyBQb2ludGVyIHRvIHRoZSBBQ1BJIHRhYmxlIEluZm8uDQo+PiAtDQo+PiAtIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgU3VjY2Vzcy4NCj4+IC0gQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgQSBwYXJhbWV0ZXIgaXMgaW52YWxpZC4NCj4+IC0gQHJldHZhbCBFRklfTk9UX0ZPVU5E IFJlcXVpcmVkIG9iamVjdCBpcyBub3QgZm91bmQuDQo+PiAtIEByZXR2YWwgRUZJX0JBRF9CVUZG RVJfU0laRSBTaXplIHJldHVybmVkIGJ5IHRoZSBDb25maWd1cmF0aW9uIE1hbmFnZXINCj4+IC0g aXMgbGVzcyB0aGFuIHRoZSBPYmplY3Qgc2l6ZSBmb3IgdGhlDQo+PiAtIHJlcXVlc3RlZCBvYmpl Y3QuDQo+PiAtKiovDQo+PiAtU1RBVElDDQo+PiAtRUZJX1NUQVRVUw0KPj4gLUVGSUFQSQ0KPj4g LUJ1aWxkQW5kSW5zdGFsbE11bHRpcGxlQWNwaVRhYmxlICgNCj4+IC0gSU4gQ09OU1QgRURLSUlf RFlOQU1JQ19UQUJMRV9GQUNUT1JZX1BST1RPQ09MICpDT05TVCBUYWJsZUZhY3RvcnlQcm90b2Nv bCwNCj4+IC0gSU4gQ09OU1QgRURLSUlfQ09ORklHVVJBVElPTl9NQU5BR0VSX1BST1RPQ09MICpD T05TVCBDZmdNZ3JQcm90b2NvbCwNCj4+IC0gSU4gQ09OU1QgQUNQSV9UQUJMRV9HRU5FUkFUT1Ig KkNPTlNUIEdlbmVyYXRvciwNCj4+IC0gSU4gRUZJX0FDUElfVEFCTEVfUFJPVE9DT0wgKkFjcGlU YWJsZVByb3RvY29sLA0KPj4gLSBJTiBDT05TVCBDTV9TVERfT0JKX0FDUElfVEFCTEVfSU5GTyAq Q09OU1QgQWNwaVRhYmxlSW5mbw0KPj4gLSApDQo+PiAtew0KPj4gLSBFRklfU1RBVFVTIFN0YXR1 czsNCj4+IC0gRUZJX1NUQVRVUyBTdGF0dXMxOw0KPj4gLSBFRklfQUNQSV9ERVNDUklQVElPTl9I RUFERVIgKipBY3BpVGFibGU7DQo+PiAtIFVJTlROIFRhYmxlQ291bnQ7DQo+PiAtIFVJTlROIFRh YmxlSGFuZGxlOw0KPj4gLSBVSU5UTiBJbmRleDsNCj4+IC0NCj4+IC0gQWNwaVRhYmxlID0gTlVM TDsNCj4+IC0gVGFibGVDb3VudCA9IDA7DQo+PiAtIFN0YXR1cyA9IEdlbmVyYXRvci0+QnVpbGRB Y3BpVGFibGVFeCAoDQo+PiAtIEdlbmVyYXRvciwNCj4+IC0gQWNwaVRhYmxlSW5mbywNCj4+IC0g Q2ZnTWdyUHJvdG9jb2wsDQo+PiAtICZBY3BpVGFibGUsDQo+PiAtICZUYWJsZUNvdW50DQo+PiAt ICk7DQo+PiAtIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+IC0gREVCVUcgKCgNCj4+IC0g REVCVUdfRVJST1IsDQo+PiAtICJFUlJPUjogRmFpbGVkIHRvIEJ1aWxkIFRhYmxlLiIgXA0KPj4g LSAiIFRhYmxlR2VuZXJhdG9ySWQgPSAweCV4LiBTdGF0dXMgPSAlclxuIiwNCj4+IC0gQWNwaVRh YmxlSW5mby0+VGFibGVHZW5lcmF0b3JJZCwNCj4+IC0gU3RhdHVzDQo+PiAtICkpOw0KPj4gLSAv LyBGcmVlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzLg0KPj4gLSBnb3RvIGV4aXRfaGFuZGxlcjsN Cj4+IC0gfQ0KPj4gLQ0KPj4gLSBpZiAoKEFjcGlUYWJsZSA9PSBOVUxMKSB8fCAoVGFibGVDb3Vu dCA9PSAwKSkgew0KPj4gLSBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPj4gLSBnb3RvIGV4aXRf aGFuZGxlcjsNCj4+IC0gfQ0KPj4gLQ0KPj4gLSBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBUYWJs ZUNvdW50OyBJbmRleCsrKSB7DQo+PiAtIC8vIER1bXAgQUNQSSBUYWJsZSBIZWFkZXINCj4+IC0g RFVNUF9BQ1BJX1RBQkxFX0hFQURFUiAoQWNwaVRhYmxlW0luZGV4XSk7DQo+PiAtIC8vIEluc3Rh bGwgQUNQSSB0YWJsZQ0KPj4gLSBTdGF0dXMgPSBBY3BpVGFibGVQcm90b2NvbC0+SW5zdGFsbEFj cGlUYWJsZSAoDQo+PiAtIEFjcGlUYWJsZVByb3RvY29sLA0KPj4gLSBBY3BpVGFibGVbSW5kZXhd LA0KPj4gLSBBY3BpVGFibGVbSW5kZXhdLT5MZW5ndGgsDQo+PiAtICZUYWJsZUhhbmRsZQ0KPj4g LSApOw0KPj4gLSBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiAtIERFQlVHICgoDQo+PiAt IERFQlVHX0VSUk9SLA0KPj4gLSAiRVJST1I6IEZhaWxlZCB0byBJbnN0YWxsIEFDUEkgVGFibGUu IFN0YXR1cyA9ICVyXG4iLA0KPj4gLSBTdGF0dXMNCj4+IC0gKSk7DQo+PiAtIC8vIEZyZWUgYW55 IGFsbG9jYXRlZCByZXNvdXJjZXMuDQo+PiAtIGdvdG8gZXhpdF9oYW5kbGVyOw0KPj4gLSB9DQo+ PiAtDQo+PiAtIERFQlVHICgoDQo+PiAtIERFQlVHX0lORk8sDQo+PiAtICJJTkZPOiBBQ1BJIFRh YmxlIGluc3RhbGxlZC4gU3RhdHVzID0gJXJcbiIsDQo+PiAtIFN0YXR1cw0KPj4gLSApKTsNCj4+ IC0gfQ0KPj4gLQ0KPj4gLWV4aXRfaGFuZGxlcjoNCj4+IC0gLy8gRnJlZSBhbnkgcmVzb3VyY2Vz IGFsbG9jYXRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgdGFibGVzLg0KPj4gLSBpZiAoR2VuZXJhdG9y LT5GcmVlVGFibGVSZXNvdXJjZXNFeCAhPSBOVUxMKSB7DQo+PiAtIFN0YXR1czEgPSBHZW5lcmF0 b3ItPkZyZWVUYWJsZVJlc291cmNlc0V4ICgNCj4+IC0gR2VuZXJhdG9yLA0KPj4gLSBBY3BpVGFi bGVJbmZvLA0KPj4gLSBDZmdNZ3JQcm90b2NvbCwNCj4+IC0gJkFjcGlUYWJsZSwNCj4+IC0gVGFi bGVDb3VudA0KPj4gLSApOw0KPj4gLSBpZiAoRUZJX0VSUk9SIChTdGF0dXMxKSkgew0KPj4gLSBE RUJVRyAoKA0KPj4gLSBERUJVR19FUlJPUiwNCj4+IC0gIkVSUk9SOiBGYWlsZWQgdG8gRnJlZSBU YWJsZSBSZXNvdXJjZXMuIiBcDQo+PiAtICJUYWJsZUdlbmVyYXRvcklkID0gMHgleC4gU3RhdHVz ID0gJXJcbiIsDQo+PiAtIEFjcGlUYWJsZUluZm8tPlRhYmxlR2VuZXJhdG9ySWQsDQo+PiAtIFN0 YXR1czENCj4+IC0gKSk7DQo+PiAtIH0NCj4+IC0NCj4+IC0gLy8gUmV0dXJuIHRoZSBmaXJzdCBl cnJvciBzdGF0dXMgaW4gY2FzZSBvZiBmYWlsdXJlDQo+PiAtIGlmICghRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+PiAtIFN0YXR1cyA9IFN0YXR1czE7DQo+PiAtIH0NCj4+IC0gfQ0KPj4gLQ0KPj4g LSByZXR1cm4gU3RhdHVzOw0KPj4gLX0NCj4+IC0NCj4+IC0vKiogQSBoZWxwZXIgZnVuY3Rpb24g dG8gaW52b2tlIGEgVGFibGUgZ2VuZXJhdG9yDQo+PiAtDQo+PiAtIFRoaXMgaXMgYSBoZWxwZXIg ZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBUYWJsZSBnZW5lcmF0b3IgaW50ZXJmYWNlDQo+PiAt IGZvciBidWlsZGluZyBhbiBBQ1BJIHRhYmxlLiBJdCB1c2VzIHRoZSBBY3BpVGFibGVQcm90b2Nv bCB0byBpbnN0YWxsIHRoZQ0KPj4gLSB0YWJsZSwgdGhlbiBmcmVlcyB0aGUgcmVzb3VyY2VzIGFs bG9jYXRlZCBmb3IgZ2VuZXJhdGluZyBpdC4NCj4+IC0NCj4+IC0gQHBhcmFtIFtpbl0gVGFibGVG YWN0b3J5UHJvdG9jb2wgUG9pbnRlciB0byB0aGUgVGFibGUgRmFjdG9yeSBQcm90b2NvbA0KPj4g LSBpbnRlcmZhY2UuDQo+PiAtIEBwYXJhbSBbaW5dIENmZ01nclByb3RvY29sIFBvaW50ZXIgdG8g dGhlIENvbmZpZ3VyYXRpb24gTWFuYWdlcg0KPj4gLSBQcm90b2NvbCBJbnRlcmZhY2UuDQo+PiAt IEBwYXJhbSBbaW5dIEFjcGlUYWJsZVByb3RvY29sIFBvaW50ZXIgdG8gdGhlIEFjcGlUYWJsZSBw cm90b2NvbC4NCj4+IC0gQHBhcmFtIFtpbl0gQWNwaVRhYmxlSW5mbyBQb2ludGVyIHRvIHRoZSBB Q1BJIHRhYmxlIEluZm8uDQo+PiAtDQo+PiAtIEByZXR2YWwgRUZJX1NVQ0NFU1MgU3VjY2Vzcy4N Cj4+IC0gQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQSBwYXJhbWV0ZXIgaXMgaW52YWxp ZC4NCj4+IC0gQHJldHZhbCBFRklfTk9UX0ZPVU5EIFJlcXVpcmVkIG9iamVjdCBpcyBub3QgZm91 bmQuDQo+PiAtIEByZXR2YWwgRUZJX0JBRF9CVUZGRVJfU0laRSBTaXplIHJldHVybmVkIGJ5IHRo ZSBDb25maWd1cmF0aW9uIE1hbmFnZXINCj4+IC0gaXMgbGVzcyB0aGFuIHRoZSBPYmplY3Qgc2l6 ZSBmb3IgdGhlDQo+PiAtIHJlcXVlc3RlZCBvYmplY3QuDQo+PiAtKiovDQo+PiAtU1RBVElDDQo+ PiAtRUZJX1NUQVRVUw0KPj4gLUVGSUFQSQ0KPj4gLUJ1aWxkQW5kSW5zdGFsbEFjcGlUYWJsZSAo DQo+PiAtIElOIENPTlNUIEVES0lJX0RZTkFNSUNfVEFCTEVfRkFDVE9SWV9QUk9UT0NPTCAqQ09O U1QgVGFibGVGYWN0b3J5UHJvdG9jb2wsDQo+PiAtIElOIENPTlNUIEVES0lJX0NPTkZJR1VSQVRJ T05fTUFOQUdFUl9QUk9UT0NPTCAqQ09OU1QgQ2ZnTWdyUHJvdG9jb2wsDQo+PiAtIElOIEVGSV9B Q1BJX1RBQkxFX1BST1RPQ09MICpBY3BpVGFibGVQcm90b2NvbCwNCj4+IC0gSU4gQ09OU1QgQ01f U1REX09CSl9BQ1BJX1RBQkxFX0lORk8gKkNPTlNUIEFjcGlUYWJsZUluZm8NCj4+IC0gKQ0KPj4g LXsNCj4+IC0gRUZJX1NUQVRVUyBTdGF0dXM7DQo+PiAtIENPTlNUIEFDUElfVEFCTEVfR0VORVJB VE9SICpHZW5lcmF0b3I7DQo+PiAtDQo+PiAtIEFTU0VSVCAoVGFibGVGYWN0b3J5UHJvdG9jb2wg IT0gTlVMTCk7DQo+PiAtIEFTU0VSVCAoQ2ZnTWdyUHJvdG9jb2wgIT0gTlVMTCk7DQo+PiAtIEFT U0VSVCAoQWNwaVRhYmxlUHJvdG9jb2wgIT0gTlVMTCk7DQo+PiAtIEFTU0VSVCAoQWNwaVRhYmxl SW5mbyAhPSBOVUxMKTsNCj4+IC0NCj4+IC0gREVCVUcgKCgNCj4+IC0gREVCVUdfSU5GTywNCj4+ IC0gIklORk86IEVTdGRPYmpBY3BpVGFibGVMaXN0OiBBZGRyZXNzID0gMHglcCwiIFwNCj4+IC0g IiBUYWJsZUdlbmVyYXRvcklkID0gMHgleFxuIiwNCj4+IC0gQWNwaVRhYmxlSW5mbywNCj4+IC0g QWNwaVRhYmxlSW5mby0+VGFibGVHZW5lcmF0b3JJZA0KPj4gLSApKTsNCj4+IC0NCj4+IC0gR2Vu ZXJhdG9yID0gTlVMTDsNCj4+IC0gU3RhdHVzID0gVGFibGVGYWN0b3J5UHJvdG9jb2wtPkdldEFj cGlUYWJsZUdlbmVyYXRvciAoDQo+PiAtIFRhYmxlRmFjdG9yeVByb3RvY29sLA0KPj4gLSBBY3Bp VGFibGVJbmZvLT5UYWJsZUdlbmVyYXRvcklkLA0KPj4gLSAmR2VuZXJhdG9yDQo+PiAtICk7DQo+ PiAtIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+IC0gREVCVUcgKCgNCj4+IC0gREVCVUdf RVJST1IsDQo+PiAtICJFUlJPUjogVGFibGUgR2VuZXJhdG9yIG5vdCBmb3VuZC4iIFwNCj4+IC0g IiBUYWJsZUdlbmVyYXRvcklkID0gMHgleC4gU3RhdHVzID0gJXJcbiIsDQo+PiAtIEFjcGlUYWJs ZUluZm8tPlRhYmxlR2VuZXJhdG9ySWQsDQo+PiAtIFN0YXR1cw0KPj4gLSApKTsNCj4+IC0gcmV0 dXJuIFN0YXR1czsNCj4+IC0gfQ0KPj4gLQ0KPj4gLSBpZiAoR2VuZXJhdG9yID09IE5VTEwpIHsN Cj4+IC0gcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+PiAtIH0NCj4+IC0NCj4+IC0gREVCVUcgKCgN Cj4+IC0gREVCVUdfSU5GTywNCj4+IC0gIklORk86IEdlbmVyYXRvciBmb3VuZCA6ICVzXG4iLA0K Pj4gLSBHZW5lcmF0b3ItPkRlc2NyaXB0aW9uDQo+PiAtICkpOw0KPj4gLQ0KPj4gLSBpZiAoR2Vu ZXJhdG9yLT5CdWlsZEFjcGlUYWJsZUV4ICE9IE5VTEwpIHsNCj4+IC0gU3RhdHVzID0gQnVpbGRB bmRJbnN0YWxsTXVsdGlwbGVBY3BpVGFibGUgKA0KPj4gLSBUYWJsZUZhY3RvcnlQcm90b2NvbCwN Cj4+IC0gQ2ZnTWdyUHJvdG9jb2wsDQo+PiAtIEdlbmVyYXRvciwNCj4+IC0gQWNwaVRhYmxlUHJv dG9jb2wsDQo+PiAtIEFjcGlUYWJsZUluZm8NCj4+IC0gKTsNCj4+IC0gaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPj4gLSBERUJVRyAoKA0KPj4gLSBERUJVR19FUlJPUiwNCj4+IC0gIkVSUk9S OiBGYWlsZWQgdG8gZmluZCBidWlsZCBhbmQgaW5zdGFsbCBBQ1BJIFRhYmxlLiIgXA0KPj4gLSAi IFN0YXR1cyA9ICVyXG4iLA0KPj4gLSBTdGF0dXMNCj4+IC0gKSk7DQo+PiAtIH0NCj4+IC0gfSBl bHNlIGlmIChHZW5lcmF0b3ItPkJ1aWxkQWNwaVRhYmxlICE9IE5VTEwpIHsNCj4+IC0gU3RhdHVz ID0gQnVpbGRBbmRJbnN0YWxsU2luZ2xlQWNwaVRhYmxlICgNCj4+IC0gVGFibGVGYWN0b3J5UHJv dG9jb2wsDQo+PiAtIENmZ01nclByb3RvY29sLA0KPj4gLSBHZW5lcmF0b3IsDQo+PiAtIEFjcGlU YWJsZVByb3RvY29sLA0KPj4gLSBBY3BpVGFibGVJbmZvDQo+PiAtICk7DQo+PiAtIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4+IC0gREVCVUcgKCgNCj4+IC0gREVCVUdfRVJST1IsDQo+PiAt ICJFUlJPUjogRmFpbGVkIHRvIGZpbmQgYnVpbGQgYW5kIGluc3RhbGwgQUNQSSBUYWJsZS4iIFwN Cj4+IC0gIiBTdGF0dXMgPSAlclxuIiwNCj4+IC0gU3RhdHVzDQo+PiAtICkpOw0KPj4gLSB9DQo+ PiAtIH0gZWxzZSB7DQo+PiAtIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+IC0g REVCVUcgKCgNCj4+IC0gREVCVUdfRVJST1IsDQo+PiAtICJFUlJPUjogVGFibGUgR2VuZXJhdG9y IGRvZXMgbm90IGltcGxlbWVudCB0aGUiIFwNCj4+IC0gIiBBQ1BJX1RBQkxFX0dFTkVSQVRPUl9C VUlMRF9UQUJMRSBpbnRlcmZhY2UuIiBcDQo+PiAtICIgVGFibGVHZW5lcmF0b3JJZCA9IDB4JXgu IFN0YXR1cyA9ICVyXG4iLA0KPj4gLSBBY3BpVGFibGVJbmZvLT5UYWJsZUdlbmVyYXRvcklkLA0K Pj4gLSBTdGF0dXMNCj4+IC0gKSk7DQo+PiAtIH0NCj4+IC0NCj4+IC0gcmV0dXJuIFN0YXR1czsN Cj4+IC19DQo+PiAtDQo+PiAtLyoqIFRoZSBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIENvbmZpZ3Vy YXRpb24gTWFuYWdlciBoYXMgcHJvdmlkZWQgdGhlDQo+PiAtIG1hbmRhdG9yeSBBQ1BJIHRhYmxl cyBmb3IgaW5zdGFsbGF0aW9uLg0KPj4gLQ0KPj4gLSBAcGFyYW0gW2luXSBBY3BpVGFibGVJbmZv IFBvaW50ZXIgdG8gdGhlIEFDUEkgVGFibGUgSW5mbyBsaXN0Lg0KPj4gLSBAcGFyYW0gW2luXSBB Y3BpVGFibGVDb3VudCBDb3VudCBvZiBBQ1BJIFRhYmxlIEluZm8uDQo+PiAtDQo+PiAtIEByZXR2 YWwgRUZJX1NVQ0NFU1MgU3VjY2Vzcy4NCj4+IC0gQHJldHZhbCBFRklfTk9UX0ZPVU5EIElmIG1h bmRhdG9yeSB0YWJsZSBpcyBub3QgZm91bmQuDQo+PiAtIEByZXR2YWwgRUZJX0FMUkVBRFlfU1RB UlRFRCBJZiBtYW5kYXRvcnkgdGFibGUgZm91bmQgaW4gQWNwaVRhYmxlSW5mbyBpcyBhbHJlYWR5 IGluc3RhbGxlZC4NCj4+IC0qKi8NCj4+IC1TVEFUSUMNCj4+IC1FRklfU1RBVFVTDQo+PiAtRUZJ QVBJDQo+PiAtVmVyaWZ5TWFuZGF0b3J5VGFibGVzQXJlUHJlc2VudCAoDQo+PiAtIElOIENPTlNU IENNX1NURF9PQkpfQUNQSV9UQUJMRV9JTkZPICpDT05TVCBBY3BpVGFibGVJbmZvLA0KPj4gLSBJ TiBVSU5UMzIgQWNwaVRhYmxlQ291bnQNCj4+IC0gKQ0KPj4gLXsNCj4+IC0gRUZJX1NUQVRVUyBT dGF0dXM7DQo+PiAtIFVJTlROIEhhbmRsZTsNCj4+IC0gVUlOVE4gSW5kZXg7DQo+PiAtIFVJTlRO IEluc3RhbGxlZFRhYmxlSW5kZXg7DQo+PiAtIEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAq RGVzY0hlYWRlcjsNCj4+IC0gRUZJX0FDUElfVEFCTEVfVkVSU0lPTiBWZXJzaW9uOw0KPj4gLSBF RklfQUNQSV9TRFRfUFJPVE9DT0wgKkFjcGlTZHQ7DQo+PiAtDQo+PiAtIEFTU0VSVCAoQWNwaVRh YmxlSW5mbyAhPSBOVUxMKTsNCj4+IC0NCj4+IC0gU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+PiAt DQo+PiAtIC8vIENoZWNrIGFnYWluc3QgdGhlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgQUNQSSB0 YWJsZXMgdG8gc2VlIGlmIHRoZXkgYXJlIGluIEFDUEkgaW5mbyBsaXN0DQo+PiAtIHdoaWxlIChB Y3BpVGFibGVDb3VudC0tICE9IDApIHsNCj4+IC0gZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQUNQ SV9UQUJMRV9WRVJJRllfQ09VTlQ7IEluZGV4KyspIHsNCj4+IC0gaWYgKEFjcGlUYWJsZUluZm9b QWNwaVRhYmxlQ291bnRdLkFjcGlUYWJsZVNpZ25hdHVyZSA9PSBtQWNwaVZlcmlmeVRhYmxlc1tJ bmRleF0uQWNwaVRhYmxlU2lnbmF0dXJlKSB7DQo+PiAtIG1BY3BpVmVyaWZ5VGFibGVzW0luZGV4 XS5QcmVzZW5jZSB8PSBBQ1BJX1RBQkxFX1BSRVNFTlRfSU5GT19MSVNUOw0KPj4gLSAvLyBGb3Vu ZCB0aGlzIHRhYmxlLCBza2lwIHRoZSByZXN0Lg0KPj4gLSBicmVhazsNCj4+IC0gfQ0KPj4gLSB9 DQo+PiAtIH0NCj4+IC0NCj4+IC0gLy8gVGhleSBhbHNvIG1pZ2h0IGJlIHB1Ymxpc2hlZCBhbHJl YWR5LCBzbyB3ZSBjYW4gc2VhcmNoIGZyb20gdGhlcmUNCj4+IC0gaWYgKEZlYXR1cmVQY2RHZXQg KFBjZEluc3RhbGxBY3BpU2R0UHJvdG9jb2wpKSB7DQo+PiAtIEFjcGlTZHQgPSBOVUxMOw0KPj4g LSBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgmZ0VmaUFjcGlTZHRQcm90b2NvbEd1aWQs IE5VTEwsIChWT0lEICoqKSZBY3BpU2R0KTsNCj4+IC0NCj4+IC0gaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSB8fCAoQWNwaVNkdCA9PSBOVUxMKSkgew0KPj4gLSBERUJVRyAoKERFQlVHX0VSUk9SLCAi RVJST1I6IEZhaWxlZCB0byBsb2NhdGUgQUNQSSBTRFQgcHJvdG9jb2wgKDB4JXApIC0gJXJcbiIs IEFjcGlTZHQsIFN0YXR1cykpOw0KPj4gLSByZXR1cm4gU3RhdHVzOw0KPj4gLSB9DQo+PiAtDQo+ PiAtIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEFDUElfVEFCTEVfVkVSSUZZX0NPVU5UOyBJbmRl eCsrKSB7DQo+PiAtIEhhbmRsZSA9IDA7DQo+PiAtIEluc3RhbGxlZFRhYmxlSW5kZXggPSAwOw0K Pj4gLSBkbyB7DQo+PiAtIFN0YXR1cyA9IEFjcGlTZHQtPkdldEFjcGlUYWJsZSAoSW5zdGFsbGVk VGFibGVJbmRleCwgKEVGSV9BQ1BJX1NEVF9IRUFERVIgKiopJkRlc2NIZWFkZXIsICZWZXJzaW9u LCAmSGFuZGxlKTsNCj4+IC0gaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gLSBicmVhazsN Cj4+IC0gfQ0KPj4gLQ0KPj4gLSBJbnN0YWxsZWRUYWJsZUluZGV4Kys7DQo+PiAtIH0gd2hpbGUg KERlc2NIZWFkZXItPlNpZ25hdHVyZSAhPSBtQWNwaVZlcmlmeVRhYmxlc1tJbmRleF0uQWNwaVRh YmxlU2lnbmF0dXJlKTsNCj4+IC0NCj4+IC0gaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ IC0gbUFjcGlWZXJpZnlUYWJsZXNbSW5kZXhdLlByZXNlbmNlIHw9IEFDUElfVEFCTEVfUFJFU0VO VF9JTlNUQUxMRUQ7DQo+PiAtIH0NCj4+IC0gfQ0KPj4gLSB9DQo+PiAtDQo+PiAtIC8vIFJlc2V0 IHRoZSByZXR1cm4gU3RhdHVzIHZhbHVlIHRvIEVGSV9TVUNDRVNTLiBXZSBkbyBub3QgZnVsbHkg Y2FyZSBpZiB0aGUgdGFibGUgbG9vayB1cCBoYXMgZmFpbGVkLg0KPj4gLSBTdGF0dXMgPSBFRklf U1VDQ0VTUzsNCj4+IC0gZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQUNQSV9UQUJMRV9WRVJJRllf Q09VTlQ7IEluZGV4KyspIHsNCj4+IC0gaWYgKG1BY3BpVmVyaWZ5VGFibGVzW0luZGV4XS5QcmVz ZW5jZSA9PSAwKSB7DQo+PiAtIGlmIChtQWNwaVZlcmlmeVRhYmxlc1tJbmRleF0uSXNNYW5kYXRv cnkpIHsNCj4+IC0gREVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiAlYSBUYWJsZSBub3QgZm91 bmQuXG4iLCBtQWNwaVZlcmlmeVRhYmxlc1tJbmRleF0uQWNwaVRhYmxlTmFtZSkpOw0KPj4gLSBT dGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPj4gLSB9IGVsc2Ugew0KPj4gLSBERUJVRyAoKERFQlVH X1dBUk4sICJXQVJOSU5HOiAlYSBUYWJsZSBub3QgZm91bmQuXG4iLCBtQWNwaVZlcmlmeVRhYmxl c1tJbmRleF0uQWNwaVRhYmxlTmFtZSkpOw0KPj4gLSB9DQo+PiAtIH0gZWxzZSBpZiAobUFjcGlW ZXJpZnlUYWJsZXNbSW5kZXhdLlByZXNlbmNlID09DQo+PiAtIChBQ1BJX1RBQkxFX1BSRVNFTlRf SU5GT19MSVNUIHwgQUNQSV9UQUJMRV9QUkVTRU5UX0lOU1RBTExFRCkpDQo+PiAtIHsNCj4+IC0g REVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiAlYSBUYWJsZSBmb3VuZCB3aGlsZSBhbHJlYWR5 IHB1Ymxpc2hlZC5cbiIsIG1BY3BpVmVyaWZ5VGFibGVzW0luZGV4XS5BY3BpVGFibGVOYW1lKSk7 DQo+PiAtIFN0YXR1cyA9IEVGSV9BTFJFQURZX1NUQVJURUQ7DQo+PiAtIH0NCj4+IC0gfQ0KPj4g LQ0KPj4gLSByZXR1cm4gU3RhdHVzOw0KPj4gLX0NCj4+IC0NCj4+IC0vKiogR2VuZXJhdGUgYW5k IGluc3RhbGwgQUNQSSB0YWJsZXMuDQo+PiAtDQo+PiAtIFRoZSBmdW5jdGlvbiBnYXRoZXJzIHRo ZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIGluc3RhbGxpbmcgdGhlDQo+PiAtIEFDUEkgdGFi bGVzIGZyb20gdGhlIENvbmZpZ3VyYXRpb24gTWFuYWdlciwgaW52b2tlcyB0aGUgZ2VuZXJhdG9y cw0KPj4gLSBhbmQgaW5zdGFsbHMgdGhlbSAodmlhIEJ1aWxkQW5kSW5zdGFsbEFjcGlUYWJsZSku DQo+PiAtDQo+PiAtIEBwYXJhbSBbaW5dIFRhYmxlRmFjdG9yeVByb3RvY29sIFBvaW50ZXIgdG8g dGhlIFRhYmxlIEZhY3RvcnkgUHJvdG9jb2wNCj4+IC0gaW50ZXJmYWNlLg0KPj4gLSBAcGFyYW0g W2luXSBDZmdNZ3JQcm90b2NvbCBQb2ludGVyIHRvIHRoZSBDb25maWd1cmF0aW9uIE1hbmFnZXIN Cj4+IC0gUHJvdG9jb2wgSW50ZXJmYWNlLg0KPj4gLQ0KPj4gLSBAcmV0dmFsIEVGSV9TVUNDRVNT IFN1Y2Nlc3MuDQo+PiAtIEByZXR2YWwgRUZJX05PVF9GT1VORCBJZiBhIG1hbmRhdG9yeSB0YWJs ZSBvciBhIGdlbmVyYXRvciBpcyBub3QgZm91bmQuDQo+PiAtIEByZXR2YWwgRUZJX0FMUkVBRFlf U1RBUlRFRCBJZiBtYW5kYXRvcnkgdGFibGUgZm91bmQgaW4gQWNwaVRhYmxlSW5mbyBpcyBhbHJl YWR5IGluc3RhbGxlZC4NCj4+IC0qKi8NCj4+IC1TVEFUSUMNCj4+IC1FRklfU1RBVFVTDQo+PiAt RUZJQVBJDQo+PiAtUHJvY2Vzc0FjcGlUYWJsZXMgKA0KPj4gLSBJTiBDT05TVCBFREtJSV9EWU5B TUlDX1RBQkxFX0ZBQ1RPUllfUFJPVE9DT0wgKkNPTlNUIFRhYmxlRmFjdG9yeVByb3RvY29sLA0K Pj4gLSBJTiBDT05TVCBFREtJSV9DT05GSUdVUkFUSU9OX01BTkFHRVJfUFJPVE9DT0wgKkNPTlNU IENmZ01nclByb3RvY29sDQo+PiAtICkNCj4+IC17DQo+PiAtIEVGSV9TVEFUVVMgU3RhdHVzOw0K Pj4gLSBFRklfQUNQSV9UQUJMRV9QUk9UT0NPTCAqQWNwaVRhYmxlUHJvdG9jb2w7DQo+PiAtIENN X1NURF9PQkpfQUNQSV9UQUJMRV9JTkZPICpBY3BpVGFibGVJbmZvOw0KPj4gLSBVSU5UMzIgQWNw aVRhYmxlQ291bnQ7DQo+PiAtIFVJTlQzMiBJZHg7DQo+PiAtDQo+PiAtIEFTU0VSVCAoVGFibGVG YWN0b3J5UHJvdG9jb2wgIT0gTlVMTCk7DQo+PiAtIEFTU0VSVCAoQ2ZnTWdyUHJvdG9jb2wgIT0g TlVMTCk7DQo+PiAtDQo+PiAtIC8vIEZpbmQgdGhlIEFjcGlUYWJsZSBwcm90b2NvbA0KPj4gLSBT dGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgNCj4+IC0gJmdFZmlBY3BpVGFibGVQcm90b2Nv bEd1aWQsDQo+PiAtIE5VTEwsDQo+PiAtIChWT0lEICoqKSZBY3BpVGFibGVQcm90b2NvbA0KPj4g LSApOw0KPj4gLSBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiAtIERFQlVHICgoDQo+PiAt IERFQlVHX0VSUk9SLA0KPj4gLSAiRVJST1I6IEZhaWxlZCB0byBmaW5kIEFjcGlUYWJsZSBwcm90 b2NvbC4gU3RhdHVzID0gJXJcbiIsDQo+PiAtIFN0YXR1cw0KPj4gLSApKTsNCj4+IC0gcmV0dXJu IFN0YXR1czsNCj4+IC0gfQ0KPj4gLQ0KPj4gLSBTdGF0dXMgPSBHZXRFU3RkT2JqQWNwaVRhYmxl TGlzdCAoDQo+PiAtIENmZ01nclByb3RvY29sLA0KPj4gLSBDTV9OVUxMX1RPS0VOLA0KPj4gLSAm QWNwaVRhYmxlSW5mbywNCj4+IC0gJkFjcGlUYWJsZUNvdW50DQo+PiAtICk7DQo+PiAtIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4+IC0gREVCVUcgKCgNCj4+IC0gREVCVUdfRVJST1IsDQo+ PiAtICJFUlJPUjogRmFpbGVkIHRvIGdldCBBQ1BJIFRhYmxlIExpc3QuIFN0YXR1cyA9ICVyXG4i LA0KPj4gLSBTdGF0dXMNCj4+IC0gKSk7DQo+PiAtIHJldHVybiBTdGF0dXM7DQo+PiAtIH0NCj4+ IC0NCj4+IC0gaWYgKDAgPT0gQWNwaVRhYmxlQ291bnQpIHsNCj4+IC0gREVCVUcgKCgNCj4+IC0g REVCVUdfRVJST1IsDQo+PiAtICJFUlJPUjogRVN0ZE9iakFjcGlUYWJsZUxpc3Q6IEFjcGlUYWJs ZUNvdW50ID0gJWRcbiIsDQo+PiAtIEFjcGlUYWJsZUNvdW50DQo+PiAtICkpOw0KPj4gLSByZXR1 cm4gRUZJX05PVF9GT1VORDsNCj4+IC0gfQ0KPj4gLQ0KPj4gLSBERUJVRyAoKA0KPj4gLSBERUJV R19JTkZPLA0KPj4gLSAiSU5GTzogRVN0ZE9iakFjcGlUYWJsZUxpc3Q6IEFjcGlUYWJsZUNvdW50 ID0gJWRcbiIsDQo+PiAtIEFjcGlUYWJsZUNvdW50DQo+PiAtICkpOw0KPj4gLQ0KPj4gLSAvLyBD aGVjayBpZiBtYW5kYXRvcnkgQUNQSSB0YWJsZXMgYXJlIHByZXNlbnQuDQo+PiAtIFN0YXR1cyA9 IFZlcmlmeU1hbmRhdG9yeVRhYmxlc0FyZVByZXNlbnQgKA0KPj4gLSBBY3BpVGFibGVJbmZvLA0K Pj4gLSBBY3BpVGFibGVDb3VudA0KPj4gLSApOw0KPj4gLSBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+PiAtIERFQlVHICgoDQo+PiAtIERFQlVHX0VSUk9SLA0KPj4gLSAiRVJST1I6IEZhaWxl ZCB0byB2ZXJpZnkgbWFuZGF0b3J5IEFDUEkgVGFibGUocykgcHJlc2VuY2UuIg0KPj4gLSAiIFN0 YXR1cyA9ICVyXG4iLA0KPj4gLSBTdGF0dXMNCj4+IC0gKSk7DQo+PiAtIHJldHVybiBTdGF0dXM7 DQo+PiAtIH0NCj4+IC0NCj4+IC0gLy8gQWRkIHRoZSBGQURUIFRhYmxlIGZpcnN0Lg0KPj4gLSBp ZiAoKG1BY3BpVmVyaWZ5VGFibGVzW0FDUElfVEFCTEVfVkVSSUZZX0ZBRFRdLlByZXNlbmNlICYg QUNQSV9UQUJMRV9QUkVTRU5UX0lOU1RBTExFRCkgPT0gMCkgew0KPj4gLSAvLyBGQURUIGlzIG5v dCB5ZXQgaW5zdGFsbGVkDQo+PiAtIGZvciAoSWR4ID0gMDsgSWR4IDwgQWNwaVRhYmxlQ291bnQ7 IElkeCsrKSB7DQo+PiAtIGlmIChDUkVBVEVfU1REX0FDUElfVEFCTEVfR0VOX0lEIChFU3RkQWNw aVRhYmxlSWRGYWR0KSA9PQ0KPj4gLSBBY3BpVGFibGVJbmZvW0lkeF0uVGFibGVHZW5lcmF0b3JJ ZCkNCj4+IC0gew0KPj4gLSBTdGF0dXMgPSBCdWlsZEFuZEluc3RhbGxBY3BpVGFibGUgKA0KPj4g LSBUYWJsZUZhY3RvcnlQcm90b2NvbCwNCj4+IC0gQ2ZnTWdyUHJvdG9jb2wsDQo+PiAtIEFjcGlU YWJsZVByb3RvY29sLA0KPj4gLSAmQWNwaVRhYmxlSW5mb1tJZHhdDQo+PiAtICk7DQo+PiAtIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+IC0gREVCVUcgKCgNCj4+IC0gREVCVUdfRVJST1Is DQo+PiAtICJFUlJPUjogRmFpbGVkIHRvIGZpbmQgYnVpbGQgYW5kIGluc3RhbGwgQUNQSSBGQURU IFRhYmxlLiIgXA0KPj4gLSAiIFN0YXR1cyA9ICVyXG4iLA0KPj4gLSBTdGF0dXMNCj4+IC0gKSk7 DQo+PiAtIHJldHVybiBTdGF0dXM7DQo+PiAtIH0NCj4+IC0NCj4+IC0gYnJlYWs7DQo+PiAtIH0N Cj4+IC0gfSAvLyBmb3INCj4+IC0gfQ0KPj4gLQ0KPj4gLSAvLyBBZGQgcmVtYWluaW5nIEFDUEkg VGFibGVzDQo+PiAtIGZvciAoSWR4ID0gMDsgSWR4IDwgQWNwaVRhYmxlQ291bnQ7IElkeCsrKSB7 DQo+PiAtIERFQlVHICgoDQo+PiAtIERFQlVHX0lORk8sDQo+PiAtICJJTkZPOiBBY3BpVGFibGVJ bmZvWyVkXS5UYWJsZUdlbmVyYXRvcklkID0gMHgleFxuIiwNCj4+IC0gSWR4LA0KPj4gLSBBY3Bp VGFibGVJbmZvW0lkeF0uVGFibGVHZW5lcmF0b3JJZA0KPj4gLSApKTsNCj4+IC0NCj4+IC0gLy8g U2tpcCBGQURUIFRhYmxlIHNpbmNlIHdlIGhhdmUgYWxyZWFkeSBhZGRlZA0KPj4gLSBpZiAoQ1JF QVRFX1NURF9BQ1BJX1RBQkxFX0dFTl9JRCAoRVN0ZEFjcGlUYWJsZUlkRmFkdCkgPT0NCj4+IC0g QWNwaVRhYmxlSW5mb1tJZHhdLlRhYmxlR2VuZXJhdG9ySWQpDQo+PiAtIHsNCj4+IC0gY29udGlu dWU7DQo+PiAtIH0NCj4+IC0NCj4+IC0gLy8gU2tpcCB0aGUgUmVzZXJ2ZWQgdGFibGUgR2VuZXJh dG9yIElEIGZvciBzdGFuZGFyZCBnZW5lcmF0b3JzDQo+PiAtIGlmICgoSVNfR0VORVJBVE9SX05B TUVTUEFDRV9TVEQgKEFjcGlUYWJsZUluZm9bSWR4XS5UYWJsZUdlbmVyYXRvcklkKSkgJiYNCj4+ IC0gKChDUkVBVEVfU1REX0FDUElfVEFCTEVfR0VOX0lEIChFU3RkQWNwaVRhYmxlSWRSZXNlcnZl ZCkgPj0NCj4+IC0gQWNwaVRhYmxlSW5mb1tJZHhdLlRhYmxlR2VuZXJhdG9ySWQpIHx8DQo+PiAt IChDUkVBVEVfU1REX0FDUElfVEFCTEVfR0VOX0lEIChFU3RkQWNwaVRhYmxlSWRNYXgpIDw9DQo+ PiAtIEFjcGlUYWJsZUluZm9bSWR4XS5UYWJsZUdlbmVyYXRvcklkKSkpDQo+PiAtIHsNCj4+IC0g REVCVUcgKCgNCj4+IC0gREVCVUdfV0FSTiwNCj4+IC0gIldBUk5JTkc6IEludmFsaWQgQUNQSSBH ZW5lcmF0b3IgdGFibGUgSUQgPSAweCV4LCBTa2lwcGluZy4uLlxuIiwNCj4+IC0gQWNwaVRhYmxl SW5mb1tJZHhdLlRhYmxlR2VuZXJhdG9ySWQNCj4+IC0gKSk7DQo+PiAtIGNvbnRpbnVlOw0KPj4g LSB9DQo+PiAtDQo+PiAtIFN0YXR1cyA9IEJ1aWxkQW5kSW5zdGFsbEFjcGlUYWJsZSAoDQo+PiAt IFRhYmxlRmFjdG9yeVByb3RvY29sLA0KPj4gLSBDZmdNZ3JQcm90b2NvbCwNCj4+IC0gQWNwaVRh YmxlUHJvdG9jb2wsDQo+PiAtICZBY3BpVGFibGVJbmZvW0lkeF0NCj4+IC0gKTsNCj4+IC0gaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gLSBERUJVRyAoKA0KPj4gLSBERUJVR19FUlJPUiwN Cj4+IC0gIkVSUk9SOiBGYWlsZWQgdG8gZmluZCwgYnVpbGQsIGFuZCBpbnN0YWxsIEFDUEkgVGFi bGUuIiBcDQo+PiAtICIgU3RhdHVzID0gJXJcbiIsDQo+PiAtIFN0YXR1cw0KPj4gLSApKTsNCj4+ IC0gcmV0dXJuIFN0YXR1czsNCj4+IC0gfQ0KPj4gLSB9IC8vIGZvcg0KPj4gLQ0KPj4gLSByZXR1 cm4gU3RhdHVzOw0KPj4gLX0NCj4+ICtleHRlcm4NCj4+ICtWT0lEDQo+PiArQWNwaVRhYmxlUHJv dG9jb2xSZWFkeSAoDQo+PiArIElOIEVGSV9FVkVOVCBFdmVudCwNCj4+ICsgSU4gVk9JRCAqQ29u dGV4dA0KPj4gKyApOw0KPiBbU0FNSV0gSSBzZWUgeW91IGhhdmUgaW50cm9kdWNlZCB0aGUgUHJv dG9jb2wgUmVhZHkgZXZlbnQgLiBDYW4geW91IA0KPiBwbGVhc2UgZXhwbGFpbiB3aHkgdGhpcyB3 YXMgZG9uZS9uZWVkZWQ/IEFsc28sIGl0IHdvdWxkIGJlIGdvb2QgdG8gc3BsaXQgDQo+IHRoZXNl IGNoYW5nZXMgYXMgYSBzZXBhcmF0ZSBwYXRjaC4NCg0KDQpbR01dDQoNCg0KQmFzaWNhbGx5IHdl IHdhbnRlZCB0byByZW1vdmUgdGhlIERlcGV4IG9uIGdFZmlBY3BpVGFibGVQcm90b2NvbEd1aWQg DQpzaW5jZSBTTUJJT1MgdGFibGUgaW5zdGFsbGF0aW9uIHZpYSBEeW5hbWljVGFibGVzUGtnIHNo b3VsZG4ndCBkZXBlbmQgb24gDQpBQ1BJIHByb3RvY29sIHByZXNlbmNlLihlc3BlY2lhbGx5IHdo ZW4gQUNQSSBpc24ndCBwcmVzZW50KQ0KSGVuY2Ugd2UgYWRkZWQgcHJvdG9jb2wgcmVhZHkgZm9y IGJvdGggQUNQSSBhbmQgU01CSU9TIHByb3RvY29sLg0KDQoNCk9rLi5JIGNhbiBzcGxpdCB0aGlz IHBhdGNoIGludG8ganVzdCB0aGUgcHJvdG9jb2wgcmVhZHkgZm9yIEFDUEkgYW5kIA0KdGhlbiBh ZGQgb24gdGhlIFNNQklPUyB0YWJsZSBnZW5lcmF0aW9uLg0KDQoNCj4+IA0KPj4gLyoqIEVudHJ5 cG9pbnQgb2YgRHluYW1pYyBUYWJsZSBNYW5hZ2VyIER4ZS4NCj4+IA0KPj4gQEAgLTcyNyw3MiAr NjIsMzMgQEAgRHluYW1pY1RhYmxlTWFuYWdlckR4ZUluaXRpYWxpemUgKA0KPj4gSU4gRUZJX1NZ U1RFTV9UQUJMRSAqU3lzdGVtVGFibGUNCj4+ICkNCj4+IHsNCj4+IC0gRUZJX1NUQVRVUyBTdGF0 dXM7DQo+PiAtIEVES0lJX0NPTkZJR1VSQVRJT05fTUFOQUdFUl9QUk9UT0NPTCAqQ2ZnTWdyUHJv dG9jb2w7DQo+PiAtIENNX1NURF9PQkpfQ09ORklHVVJBVElPTl9NQU5BR0VSX0lORk8gKkNmZ01m ckluZm87DQo+PiAtIEVES0lJX0RZTkFNSUNfVEFCTEVfRkFDVE9SWV9QUk9UT0NPTCAqVGFibGVG YWN0b3J5UHJvdG9jb2w7DQo+PiAtDQo+PiAtIC8vIExvY2F0ZSB0aGUgRHluYW1pYyBUYWJsZSBG YWN0b3J5DQo+PiAtIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKA0KPj4gLSAmZ0Vka2lp RHluYW1pY1RhYmxlRmFjdG9yeVByb3RvY29sR3VpZCwNCj4+IC0gTlVMTCwNCj4+IC0gKFZPSUQg KiopJlRhYmxlRmFjdG9yeVByb3RvY29sDQo+PiAtICk7DQo+PiAtIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4+IC0gREVCVUcgKCgNCj4+IC0gREVCVUdfRVJST1IsDQo+PiAtICJFUlJPUjog RmFpbGVkIHRvIGZpbmQgRHluYW1pYyBUYWJsZSBGYWN0b3J5IHByb3RvY29sLiIgXA0KPj4gLSAi IFN0YXR1cyA9ICVyXG4iLA0KPj4gLSBTdGF0dXMNCj4+IC0gKSk7DQo+PiAtIHJldHVybiBTdGF0 dXM7DQo+PiAtIH0NCj4+IC0NCj4+IC0gLy8gTG9jYXRlIHRoZSBDb25maWd1cmF0aW9uIE1hbmFn ZXIgZm9yIHRoZSBQbGF0Zm9ybQ0KPj4gLSBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgN Cj4+IC0gJmdFZGtpaUNvbmZpZ3VyYXRpb25NYW5hZ2VyUHJvdG9jb2xHdWlkLA0KPj4gLSBOVUxM LA0KPj4gLSAoVk9JRCAqKikmQ2ZnTWdyUHJvdG9jb2wNCj4+IC0gKTsNCj4+IC0gaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPj4gLSBERUJVRyAoKA0KPj4gLSBERUJVR19FUlJPUiwNCj4+IC0g IkVSUk9SOiBGYWlsZWQgdG8gZmluZCBDb25maWd1cmF0aW9uIE1hbmFnZXIgcHJvdG9jb2wuIFN0 YXR1cyA9ICVyXG4iLA0KPj4gLSBTdGF0dXMNCj4+IC0gKSk7DQo+PiAtIHJldHVybiBTdGF0dXM7 DQo+PiAtIH0NCj4+IC0NCj4+IC0gU3RhdHVzID0gR2V0Q2dmTWdySW5mbyAoQ2ZnTWdyUHJvdG9j b2wsICZDZmdNZnJJbmZvKTsNCj4+IC0gaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gLSBE RUJVRyAoKA0KPj4gLSBERUJVR19FUlJPUiwNCj4+IC0gIkVSUk9SOiBGYWlsZWQgdG8gZ2V0IENv bmZpZ3VyYXRpb24gTWFuYWdlciBpbmZvLiBTdGF0dXMgPSAlclxuIiwNCj4+IC0gU3RhdHVzDQo+ PiAtICkpOw0KPj4gLSByZXR1cm4gU3RhdHVzOw0KPj4gLSB9DQo+PiAtDQo+PiAtIERFQlVHICgo DQo+PiAtIERFQlVHX0lORk8sDQo+PiAtICJJTkZPOiBDb25maWd1cmF0aW9uIE1hbmFnZXIgVmVy c2lvbiA9IDB4JXgsIE9lbUlEID0gJWMlYyVjJWMlYyVjXG4iLA0KPj4gLSBDZmdNZnJJbmZvLT5S ZXZpc2lvbiwNCj4+IC0gQ2ZnTWZySW5mby0+T2VtSWRbMF0sDQo+PiAtIENmZ01mckluZm8tPk9l bUlkWzFdLA0KPj4gLSBDZmdNZnJJbmZvLT5PZW1JZFsyXSwNCj4+IC0gQ2ZnTWZySW5mby0+T2Vt SWRbM10sDQo+PiAtIENmZ01mckluZm8tPk9lbUlkWzRdLA0KPj4gLSBDZmdNZnJJbmZvLT5PZW1J ZFs1XQ0KPj4gLSApKTsNCj4+IC0NCj4+IC0gU3RhdHVzID0gUHJvY2Vzc0FjcGlUYWJsZXMgKFRh YmxlRmFjdG9yeVByb3RvY29sLCBDZmdNZ3JQcm90b2NvbCk7DQo+PiAtIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4+IC0gREVCVUcgKCgNCj4+IC0gREVCVUdfRVJST1IsDQo+PiAtICJFUlJP UjogQUNQSSBUYWJsZSBwcm9jZXNzaW5nIGZhaWx1cmUuIFN0YXR1cyA9ICVyXG4iLA0KPj4gLSBT dGF0dXMNCj4+IC0gKSk7DQo+PiAtIH0NCj4+IC0NCj4+IC0gcmV0dXJuIFN0YXR1czsNCj4+ICsg RUZJX0VWRU5UIEFjcGlFdmVudDsNCj4+ICsgRUZJX0VWRU5UIFNtYmlvc0V2ZW50Ow0KPj4gKw0K Pj4gKyBBY3BpRXZlbnQgPSBFZmlDcmVhdGVQcm90b2NvbE5vdGlmeUV2ZW50ICgNCj4+ICsgJmdF ZmlBY3BpVGFibGVQcm90b2NvbEd1aWQsDQo+PiArIFRQTF9DQUxMQkFDSywNCj4+ICsgQWNwaVRh YmxlUHJvdG9jb2xSZWFkeSwNCj4+ICsgTlVMTCwNCj4+ICsgJkFjcGlUYWJsZVByb3RvY29sUmVn aXN0cmF0aW9uDQo+PiArICk7DQo+PiArIGlmIChBY3BpRXZlbnQgPT0gTlVMTCkgew0KPj4gKyBE RUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IEZhaWxlZCB0byBBQ1BJIGNyZWF0ZSBwcm90b2NvbCBl dmVudFxyXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4+ICsgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPj4gKyB9DQo+PiArDQo+PiArIFNtYmlvc0V2ZW50ID0gRWZpQ3JlYXRlUHJvdG9jb2xO b3RpZnlFdmVudCAoDQo+PiArICZnRWZpU21iaW9zUHJvdG9jb2xHdWlkLA0KPj4gKyBUUExfQ0FM TEJBQ0ssDQo+PiArIFNtYmlvc1Byb3RvY29sUmVhZHksDQo+PiArIE5VTEwsDQo+PiArICZTbWJp b3NQcm90b2NvbFJlZ2lzdHJhdGlvbg0KPj4gKyApOw0KPj4gKyBpZiAoU21iaW9zRXZlbnQgPT0g TlVMTCkgew0KPj4gKyBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IEZhaWxlZCB0byBTTUJJT1Mg Y3JlYXRlIHByb3RvY29sIGV2ZW50XHJcbiIsIF9fRlVOQ1RJT05fXykpOw0KPj4gKyBnQlMtPkNs b3NlRXZlbnQgKEFjcGlFdmVudCk7DQo+PiArIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsN Cj4+ICsgfQ0KPj4gKw0KPj4gKyByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+PiB9DQo+PiBkaWZmIC0t Z2l0IGEvRHluYW1pY1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZU1hbmFnZXJEeGUvRHlu YW1pY1RhYmxlTWFuYWdlckR4ZS5pbmYgYi9EeW5hbWljVGFibGVzUGtnL0RyaXZlcnMvRHluYW1p Y1RhYmxlTWFuYWdlckR4ZS9EeW5hbWljVGFibGVNYW5hZ2VyRHhlLmluZg0KPj4gaW5kZXggYjA5 MjcyZDg4My4uOWQwMjBmMDI2NCAxMDA2NDQNCj4+IC0tLSBhL0R5bmFtaWNUYWJsZXNQa2cvRHJp dmVycy9EeW5hbWljVGFibGVNYW5hZ2VyRHhlL0R5bmFtaWNUYWJsZU1hbmFnZXJEeGUuaW5mDQo+ PiArKysgYi9EeW5hbWljVGFibGVzUGtnL0RyaXZlcnMvRHluYW1pY1RhYmxlTWFuYWdlckR4ZS9E eW5hbWljVGFibGVNYW5hZ2VyRHhlLmluZg0KPj4gQEAgLTIyLDYgKzIyLDggQEANCj4+IA0KPj4g W1NvdXJjZXNdDQo+PiBEeW5hbWljVGFibGVNYW5hZ2VyRHhlLmMNCj4+ICsgU21iaW9zVGFibGVC dWlsZGVyLmMNCj4+ICsgQWNwaVRhYmxlQnVpbGRlci5jDQo+PiBTbWJpb3NUYWJsZURpc3BhdGNo ZXIuYw0KPj4gU21iaW9zVGFibGVEaXNwYXRjaGVyLmgNCj4+IA0KPj4gQEAgLTMzLDYgKzM1LDcg QEANCj4+IFtMaWJyYXJ5Q2xhc3Nlc10NCj4+IFByaW50TGliDQo+PiBUYWJsZUhlbHBlckxpYg0K Pj4gKyBVZWZpTGliDQo+PiBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4+IFVlZmlEcml2ZXJF bnRyeVBvaW50DQo+PiANCj4+IEBAIC00MiwxMiArNDUsMTIgQEANCj4+IFtQcm90b2NvbHNdDQo+ PiBnRWZpQWNwaVRhYmxlUHJvdG9jb2xHdWlkICMgUFJPVE9DT0wgQUxXQVlTX0NPTlNVTUVEDQo+ PiBnRWZpQWNwaVNkdFByb3RvY29sR3VpZCAjIFBST1RPQ09MIEFMV0FZU19DT05TVU1FRA0KPj4g KyBnRWZpU21iaW9zUHJvdG9jb2xHdWlkICMgUFJPVE9DT0wgQUxXQVlTX0NPTlNVTUVEDQo+PiAN Cj4+IGdFZGtpaUNvbmZpZ3VyYXRpb25NYW5hZ2VyUHJvdG9jb2xHdWlkICMgUFJPVE9DT0wgQUxX QVlTX0NPTlNVTUVEDQo+PiBnRWRraWlEeW5hbWljVGFibGVGYWN0b3J5UHJvdG9jb2xHdWlkICMg UFJPVE9DT0wgQUxXQVlTX0NPTlNVTUVEDQo+PiANCj4+IFtEZXBleF0NCj4+IC0gZ0VmaUFjcGlU YWJsZVByb3RvY29sR3VpZCBBTkQNCj4+IGdFZGtpaUNvbmZpZ3VyYXRpb25NYW5hZ2VyUHJvdG9j b2xHdWlkIEFORA0KPj4gZ0Vka2lpRHluYW1pY1RhYmxlRmFjdG9yeVByb3RvY29sR3VpZA0KPj4g DQo+PiBkaWZmIC0tZ2l0IGEvRHluYW1pY1RhYmxlc1BrZy9Ecml2ZXJzL0R5bmFtaWNUYWJsZU1h bmFnZXJEeGUvU21iaW9zVGFibGVCdWlsZGVyLmMgYi9EeW5hbWljVGFibGVzUGtnL0RyaXZlcnMv RHluYW1pY1RhYmxlTWFuYWdlckR4ZS9TbWJpb3NUYWJsZUJ1aWxkZXIuYw0KPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAwMDAuLjljYTY5MGMxNmINCj4+IC0tLSAvZGV2 L251bGwNCj4+ICsrKyBiL0R5bmFtaWNUYWJsZXNQa2cvRHJpdmVycy9EeW5hbWljVGFibGVNYW5h Z2VyRHhlL1NtYmlvc1RhYmxlQnVpbGRlci5jDQo+PiBAQCAtMCwwICsxLDYwOCBAQA0KPj4gKy8q KiBAZmlsZQ0KPj4gKyBTTUJJT1MgVGFibGUgQnVpbGRlcg0KPj4gKw0KPj4gKyBDb3B5cmlnaHQg KGMpIDIwMTcgLSAyMDE5LCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4+ICsg Q29weXJpZ2h0IChjKSAyMDIyIC0gMjAyMywgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRF Uy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4+ICsNCj4+ICsgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4+ICsNCj4+ICsqKi8NCj4+ICsNCj4+ICsjaW5jbHVk ZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4N Cj4+ICsjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9V ZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4+ICsjaW5jbHVkZSA8UHJvdG9jb2wvU21iaW9z Lmg+DQo+PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPj4gKw0KPj4gKy8v IE1vZHVsZSBzcGVjaWZpYyBpbmNsdWRlIGZpbGVzLg0KPj4gKyNpbmNsdWRlIDxDb25maWd1cmF0 aW9uTWFuYWdlck9iamVjdC5oPg0KPj4gKyNpbmNsdWRlIDxDb25maWd1cmF0aW9uTWFuYWdlckhl bHBlci5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1RhYmxlSGVscGVyTGliLmg+DQo+PiArI2lu Y2x1ZGUgPFByb3RvY29sL0NvbmZpZ3VyYXRpb25NYW5hZ2VyUHJvdG9jb2wuaD4NCj4+ICsjaW5j bHVkZSA8UHJvdG9jb2wvRHluYW1pY1RhYmxlRmFjdG9yeVByb3RvY29sLmg+DQo+PiArI2luY2x1 ZGUgPFNtYmlvc1RhYmxlR2VuZXJhdG9yLmg+DQo+PiArI2luY2x1ZGUgPFNtYmlvc1RhYmxlRGlz cGF0Y2hlci5oPg0KPj4gKw0KPj4gKy8qKiBUaGlzIG1hY3JvIGV4cGFuZHMgdG8gYSBmdW5jdGlv biB0aGF0IHJldHJpZXZlcyB0aGUgU01CSU9TIFRhYmxlDQo+PiArIExpc3QgZnJvbSB0aGUgQ29u ZmlndXJhdGlvbiBNYW5hZ2VyLg0KPj4gKyovDQo+PiArR0VUX09CSkVDVF9MSVNUICgNCj4+ICsg RU9iak5hbWVTcGFjZVN0YW5kYXJkLA0KPj4gKyBFU3RkT2JqU21iaW9zVGFibGVMaXN0LA0KPj4g KyBDTV9TVERfT0JKX1NNQklPU19UQUJMRV9JTkZPDQo+PiArICkNCj4+ICsNCj4+ICsvKiogQSBo ZWxwZXIgZnVuY3Rpb24gdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gU01CSU9TIHRhYmxlLg0KPj4g Kw0KPj4gKyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgVGFibGUg Z2VuZXJhdG9yIGludGVyZmFjZQ0KPj4gKyBmb3IgYnVpbGRpbmcgYW4gU01CSU9TIHRhYmxlLiBJ dCB1c2VzIHRoZSBTbWJpb3NQcm90b2NvbCB0byBpbnN0YWxsIHRoZQ0KPj4gKyB0YWJsZSwgdGhl biBmcmVlcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgZ2VuZXJhdGluZyBpdC4NCj4+ICsN Cj4+ICsgQHBhcmFtIFtpbl0gVGFibGVGYWN0b3J5UHJvdG9jb2wgUG9pbnRlciB0byB0aGUgVGFi bGUgRmFjdG9yeSBQcm90b2NvbA0KPj4gKyBpbnRlcmZhY2UuDQo+PiArIEBwYXJhbSBbaW5dIENm Z01nclByb3RvY29sIFBvaW50ZXIgdG8gdGhlIENvbmZpZ3VyYXRpb24gTWFuYWdlcg0KPj4gKyBQ cm90b2NvbCBJbnRlcmZhY2UuDQo+PiArIEBwYXJhbSBbaW5dIFNtYmlvc1Byb3RvY29sIFBvaW50 ZXIgdG8gdGhlIFNNQklPUyBwcm90b2NvbC4NCj4+ICsgQHBhcmFtIFtpbl0gU21iaW9zVGFibGVJ bmZvIFBvaW50ZXIgdG8gdGhlIFNNQklPUyB0YWJsZSBJbmZvLg0KPj4gKw0KPj4gKyBAcmV0dmFs IEVGSV9TVUNDRVNTIFN1Y2Nlc3MuDQo+PiArIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IEEgcGFyYW1ldGVyIGlzIGludmFsaWQuDQo+PiArIEByZXR2YWwgRUZJX05PVF9GT1VORCBSZXF1 aXJlZCBvYmplY3QgaXMgbm90IGZvdW5kLg0KPj4gKyBAcmV0dmFsIEVGSV9CQURfQlVGRkVSX1NJ WkUgU2l6ZSByZXR1cm5lZCBieSB0aGUgQ29uZmlndXJhdGlvbiBNYW5hZ2VyDQo+PiArIGlzIGxl c3MgdGhhbiB0aGUgT2JqZWN0IHNpemUgZm9yIHRoZQ0KPj4gKyByZXF1ZXN0ZWQgb2JqZWN0Lg0K Pj4gKyoqLw0KPj4gK1NUQVRJQw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtCdWls ZEFuZEluc3RhbGxTaW5nbGVTbWJpb3NUYWJsZSAoDQo+PiArIElOIENPTlNUIEVES0lJX0RZTkFN SUNfVEFCTEVfRkFDVE9SWV9QUk9UT0NPTCAqQ09OU1QgVGFibGVGYWN0b3J5UHJvdG9jb2wsDQo+ PiArIElOIENPTlNUIEVES0lJX0NPTkZJR1VSQVRJT05fTUFOQUdFUl9QUk9UT0NPTCAqQ09OU1Qg Q2ZnTWdyUHJvdG9jb2wsDQo+PiArIElOIENPTlNUIFNNQklPU19UQUJMRV9HRU5FUkFUT1IgKkNP TlNUIEdlbmVyYXRvciwNCj4+ICsgSU4gRUZJX1NNQklPU19QUk9UT0NPTCAqU21iaW9zUHJvdG9j b2wsDQo+PiArIElOIENNX1NURF9PQkpfU01CSU9TX1RBQkxFX0lORk8gKkNPTlNUIFNtYmlvc1Rh YmxlSW5mbw0KPj4gKyApDQo+PiArew0KPj4gKyBFRklfU1RBVFVTIFN0YXR1czsNCj4+ICsgRUZJ X1NUQVRVUyBTdGF0dXMxOw0KPj4gKyBTTUJJT1NfU1RSVUNUVVJFICpTbWJpb3NUYWJsZTsNCj4+ ICsgQ01fT0JKRUNUX1RPS0VOIENtT2JqVG9rZW47DQo+PiArIEVGSV9TTUJJT1NfSEFORExFIFRh YmxlSGFuZGxlOw0KPj4gKyBTTUJJT1NfSEFORExFX01BUCAqSGFuZGxlTWFwOw0KPj4gKw0KPj4g KyBTbWJpb3NUYWJsZSA9IE5VTEw7DQo+PiArIFN0YXR1cyA9IEdlbmVyYXRvci0+QnVpbGRTbWJp b3NUYWJsZSAoDQo+PiArIEdlbmVyYXRvciwNCj4+ICsgVGFibGVGYWN0b3J5UHJvdG9jb2wsDQo+ PiArIFNtYmlvc1RhYmxlSW5mbywNCj4+ICsgQ2ZnTWdyUHJvdG9jb2wsDQo+PiArICZTbWJpb3NU YWJsZSwNCj4+ICsgJkNtT2JqVG9rZW4NCj4+ICsgKTsNCj4+ICsgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPj4gKyBERUJVRyAoKA0KPj4gKyBERUJVR19FUlJPUiwNCj4+ICsgIkVSUk9SOiBG YWlsZWQgdG8gQnVpbGQgVGFibGUuIiBcDQo+PiArICIgVGFibGVHZW5lcmF0b3JJZCA9IDB4JXgu IFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTbWJpb3NUYWJsZUluZm8tPlRhYmxlR2VuZXJhdG9ySWQs DQo+PiArIFN0YXR1cw0KPj4gKyApKTsNCj4+ICsgLy8gRnJlZSBhbnkgYWxsb2NhdGVkIHJlc291 cmNlcy4NCj4+ICsgZ290byBleGl0X2hhbmRsZXI7DQo+PiArIH0NCj4+ICsNCj4+ICsgaWYgKFNt Ymlvc1RhYmxlID09IE5VTEwpIHsNCj4+ICsgU3RhdHVzID0gRUZJX05PVF9GT1VORDsNCj4+ICsg Z290byBleGl0X2hhbmRsZXI7DQo+PiArIH0NCj4+ICsNCj4+ICsgSGFuZGxlTWFwID0gVGFibGVG YWN0b3J5UHJvdG9jb2wtPkdldFNtYmlvc0hhbmRsZSAoQ21PYmpUb2tlbik7DQo+IFtTQU1JXSBB IEhhbmRsZU1hcCB3b3VsZCBiZSByZXR1cm5lZCBpZiB0aGUgU01CSU9TIHRhYmxlIGlzIGFscmVh ZHkgDQo+IGluc3RhbGxlZCByaWdodD8gRG9lcyB0aGlzIGNvZGUgcmVxdWlyZSBjaGFuZ2luZz8N Cg0KDQpbR01dDQpUaGlzIGlzIGEgbWlzdGFrZSAocmVtbmFudCBvZiBob3cgSSdkIHN1Z2dlc3Rl ZCBoYW5kbGluZyBkZXBlbmRlbmNpZXMgDQpiZXR3ZWVuIHRhYmxlcyBieSBnZW5lcmF0aW5nIG91 ciBvd24gU01CSU9TIGhhbmRsZXMgd2l0aG91dCBpbnN0YWxsaW5nIA0KdGhlIFNNQklPUyB0YWJs ZSkuDQoNCg0KPj4gKyBpZiAoSGFuZGxlTWFwID09IE5VTEwpIHsNCj4+ICsgVGFibGVIYW5kbGUg PSBTTUJJT1NfSEFORExFX1BJX1JFU0VSVkVEOw0KPj4gKyB9IGVsc2Ugew0KPj4gKyBUYWJsZUhh bmRsZSA9IEhhbmRsZU1hcC0+U21iaW9zVGJsSGFuZGxlOw0KPj4gKyB9DQo+PiArDQo+PiArIC8v IEluc3RhbGwgU01CSU9TIHRhYmxlDQo+PiArIFN0YXR1cyA9IFNtYmlvc1Byb3RvY29sLT5BZGQg KA0KPj4gKyBTbWJpb3NQcm90b2NvbCwNCj4+ICsgTlVMTCwNCj4+ICsgJlRhYmxlSGFuZGxlLA0K Pj4gKyBTbWJpb3NUYWJsZQ0KPj4gKyApOw0KPj4gKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX0VSUk9SLA0KPj4gKyAiRVJST1I6IEZhaWxlZCB0 byBJbnN0YWxsIFNNQklPUyBUYWJsZS4gU3RhdHVzID0gJXJcbiIsDQo+PiArIFN0YXR1cw0KPj4g KyApKTsNCj4+ICsgLy8gRnJlZSBhbnkgYWxsb2NhdGVkIHJlc291cmNlcy4NCj4+ICsgZ290byBl eGl0X2hhbmRsZXI7DQo+PiArIH0NCj4+ICsNCj4+ICsgLy8gSWYgYSBuZXcgaGFuZGxlIHdhcyBn ZW5lcmF0ZWQgdGhlbiBhZGQgaXQgdG8gdGhlIGhhbmRsZSBtYXAuDQo+PiArIGlmIChIYW5kbGVN YXAgPT0gTlVMTCkgew0KPiBbU0FNSV0gVW5sZXNzIEkgYW0gbWlzc2luZyBzb21ldGhpbmcsIHdl IHdvdWxkIGFkZCB0aGUgU01CSU9TIGhhbmRsZSANCj4gcmV0dXJuZWQgaW4gU21iaW9zUHJvdG9j b2wtPkFkZCgpIHRvIHRoZSBIYW5kbGUgTWFwcGluZyB0YWJsZSBoZXJlLiBTbyANCj4gdGhlIGNh c2Ugb2YgYSBoYW5kbGUgYmVpbmcgZ2VuZXJhdGUgd291bGQgbm90IGJlIGFwcGxpY2FibGUgcmln aHQ/DQoNCg0KW0dNXQ0KQWdyZWUgLCBvYnNvbGV0ZWQgYnkgeW91ciBkaXNwYXRjaGVyIGNvZGUu DQoNCg0KPj4gKyBUYWJsZUZhY3RvcnlQcm90b2NvbC0+QWRkU21iaW9zSGFuZGxlICgNCj4+ICsg U21iaW9zUHJvdG9jb2wsDQo+PiArICZUYWJsZUhhbmRsZSwNCj4+ICsgQ21PYmpUb2tlbiwNCj4+ ICsgU21iaW9zVGFibGVJbmZvLT5UYWJsZUdlbmVyYXRvcklkDQo+PiArICk7DQo+PiArIH0NCj4+ ICsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfSU5GTywNCj4+ICsgIklORk86IFNNQklPUyBU YWJsZSBpbnN0YWxsZWQuIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0dXMNCj4+ICsgKSk7DQo+ PiArDQo+PiArZXhpdF9oYW5kbGVyOg0KPj4gKyAvLyBGcmVlIGFueSByZXNvdXJjZXMgYWxsb2Nh dGVkIGZvciBnZW5lcmF0aW5nIHRoZSB0YWJsZXMuDQo+PiArIGlmIChHZW5lcmF0b3ItPkZyZWVU YWJsZVJlc291cmNlcyAhPSBOVUxMKSB7DQo+PiArIFN0YXR1czEgPSBHZW5lcmF0b3ItPkZyZWVU YWJsZVJlc291cmNlcyAoDQo+PiArIEdlbmVyYXRvciwNCj4+ICsgVGFibGVGYWN0b3J5UHJvdG9j b2wsDQo+PiArIFNtYmlvc1RhYmxlSW5mbywNCj4+ICsgQ2ZnTWdyUHJvdG9jb2wsDQo+PiArICZT bWJpb3NUYWJsZQ0KPj4gKyApOw0KPj4gKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMxKSkgew0KPj4g KyBERUJVRyAoKA0KPj4gKyBERUJVR19FUlJPUiwNCj4+ICsgIkVSUk9SOiBGYWlsZWQgdG8gRnJl ZSBUYWJsZSBSZXNvdXJjZXMuIiBcDQo+PiArICJUYWJsZUdlbmVyYXRvcklkID0gMHgleC4gU3Rh dHVzID0gJXJcbiIsDQo+PiArIFNtYmlvc1RhYmxlSW5mby0+VGFibGVHZW5lcmF0b3JJZCwNCj4+ ICsgU3RhdHVzMQ0KPj4gKyApKTsNCj4+ICsgfQ0KPj4gKw0KPj4gKyAvLyBSZXR1cm4gdGhlIGZp cnN0IGVycm9yIHN0YXR1cyBpbiBjYXNlIG9mIGZhaWx1cmUNCj4+ICsgaWYgKCFFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4+ICsgU3RhdHVzID0gU3RhdHVzMTsNCj4+ICsgfQ0KPj4gKyB9DQo+PiAr DQo+PiArIHJldHVybiBTdGF0dXM7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKiBBIGhlbHBlciBmdW5j dGlvbiB0byBidWlsZCBhbmQgaW5zdGFsbCBtdWx0aXBsZSBTTUJJT1MgdGFibGVzLg0KPj4gKw0K Pj4gKyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgVGFibGUgZ2Vu ZXJhdG9yIGludGVyZmFjZQ0KPj4gKyBmb3IgYnVpbGRpbmcgU01CSU9TIHRhYmxlcy4gSXQgdXNl cyB0aGUgU21iaW9zUHJvdG9jb2wgdG8gaW5zdGFsbCB0aGUNCj4+ICsgdGFibGVzLCB0aGVuIGZy ZWVzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBnZW5lcmF0aW5nIGl0Lg0KPj4gKw0KPj4g KyBAcGFyYW0gW2luXSBUYWJsZUZhY3RvcnlQcm90b2NvbCBQb2ludGVyIHRvIHRoZSBUYWJsZSBG YWN0b3J5IFByb3RvY29sDQo+PiArIGludGVyZmFjZS4NCj4+ICsgQHBhcmFtIFtpbl0gQ2ZnTWdy UHJvdG9jb2wgUG9pbnRlciB0byB0aGUgQ29uZmlndXJhdGlvbiBNYW5hZ2VyDQo+PiArIFByb3Rv Y29sIEludGVyZmFjZS4NCj4+ICsgQHBhcmFtIFtpbl0gR2VuZXJhdG9yIFBvaW50ZXIgdG8gdGhl IFNtYmlvc1RhYmxlIGdlbmVyYXRvci4NCj4+ICsgQHBhcmFtIFtpbl0gU21iaW9zUHJvdG9jb2wg UG9pbnRlciB0byB0aGUgU21iaW9zIHByb3RvY29sLg0KPj4gKyBAcGFyYW0gW2luXSBBY3BpVGFi bGVJbmZvIFBvaW50ZXIgdG8gdGhlIFNNQklPUyB0YWJsZSBJbmZvLg0KPj4gKw0KPj4gKyBAcmV0 dmFsIEVGSV9TVUNDRVNTIFN1Y2Nlc3MuDQo+PiArIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIEEgcGFyYW1ldGVyIGlzIGludmFsaWQuDQo+PiArIEByZXR2YWwgRUZJX05PVF9GT1VORCBS ZXF1aXJlZCBvYmplY3QgaXMgbm90IGZvdW5kLg0KPj4gKyBAcmV0dmFsIEVGSV9CQURfQlVGRkVS X1NJWkUgU2l6ZSByZXR1cm5lZCBieSB0aGUgQ29uZmlndXJhdGlvbiBNYW5hZ2VyDQo+PiArIGlz IGxlc3MgdGhhbiB0aGUgT2JqZWN0IHNpemUgZm9yIHRoZQ0KPj4gKyByZXF1ZXN0ZWQgb2JqZWN0 Lg0KPj4gKyoqLw0KPj4gK1NUQVRJQw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ICtC dWlsZEFuZEluc3RhbGxNdWx0aXBsZVNtYmlvc1RhYmxlcyAoDQo+PiArIElOIENPTlNUIEVES0lJ X0RZTkFNSUNfVEFCTEVfRkFDVE9SWV9QUk9UT0NPTCAqQ09OU1QgVGFibGVGYWN0b3J5UHJvdG9j b2wsDQo+PiArIElOIENPTlNUIEVES0lJX0NPTkZJR1VSQVRJT05fTUFOQUdFUl9QUk9UT0NPTCAq Q09OU1QgQ2ZnTWdyUHJvdG9jb2wsDQo+PiArIElOIENPTlNUIFNNQklPU19UQUJMRV9HRU5FUkFU T1IgKkNPTlNUIEdlbmVyYXRvciwNCj4+ICsgSU4gRUZJX1NNQklPU19QUk9UT0NPTCAqU21iaW9z UHJvdG9jb2wsDQo+PiArIElOIENNX1NURF9PQkpfU01CSU9TX1RBQkxFX0lORk8gKkNPTlNUIFNt Ymlvc1RhYmxlSW5mbw0KPj4gKyApDQo+PiArew0KPj4gKyBFRklfU1RBVFVTIFN0YXR1czsNCj4+ ICsgRUZJX1NUQVRVUyBTdGF0dXMxOw0KPj4gKyBTTUJJT1NfU1RSVUNUVVJFICoqU21iaW9zVGFi bGU7DQo+PiArIENNX09CSkVDVF9UT0tFTiAqQ21PYmpUb2tlbjsNCj4+ICsgRUZJX1NNQklPU19I QU5ETEUgVGFibGVIYW5kbGU7DQo+PiArIFVJTlROIFRhYmxlQ291bnQ7DQo+PiArIFVJTlROIElu ZGV4Ow0KPj4gKyBTTUJJT1NfSEFORExFX01BUCAqSGFuZGxlTWFwOw0KPj4gKw0KPj4gKyBUYWJs ZUNvdW50ID0gMDsNCj4+ICsgU3RhdHVzID0gR2VuZXJhdG9yLT5CdWlsZFNtYmlvc1RhYmxlRXgg KA0KPj4gKyBHZW5lcmF0b3IsDQo+PiArIFRhYmxlRmFjdG9yeVByb3RvY29sLA0KPj4gKyBTbWJp b3NUYWJsZUluZm8sDQo+PiArIENmZ01nclByb3RvY29sLA0KPj4gKyAmU21iaW9zVGFibGUsDQo+ PiArICZDbU9ialRva2VuLA0KPj4gKyAmVGFibGVDb3VudA0KPj4gKyApOw0KPj4gKyBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX0VSUk9SLA0KPj4g KyAiRVJST1I6IEZhaWxlZCB0byBCdWlsZCBUYWJsZS4iIFwNCj4+ICsgIiBUYWJsZUdlbmVyYXRv cklkID0gMHgleC4gU3RhdHVzID0gJXJcbiIsDQo+PiArIFNtYmlvc1RhYmxlSW5mby0+VGFibGVH ZW5lcmF0b3JJZCwNCj4+ICsgU3RhdHVzDQo+PiArICkpOw0KPj4gKyAvLyBGcmVlIGFueSBhbGxv Y2F0ZWQgcmVzb3VyY2VzLg0KPj4gKyBnb3RvIGV4aXRfaGFuZGxlcjsNCj4+ICsgfQ0KPj4gKw0K Pj4gKyBpZiAoKFNtYmlvc1RhYmxlID09IE5VTEwpIHx8IChUYWJsZUNvdW50ID09IDApKSB7DQo+ PiArIFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7DQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX0VS Uk9SLA0KPj4gKyAiJWE6IFRhYmxlQ291bnQgJXUgU21iaW9zVGFibGUgJXAgXG4iLA0KPj4gKyBf X0ZVTkNUSU9OX18sDQo+PiArIFRhYmxlQ291bnQsDQo+PiArIFNtYmlvc1RhYmxlDQo+PiArICkp Ow0KPj4gKyBnb3RvIGV4aXRfaGFuZGxlcjsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBUYWJsZUNvdW50OyBJbmRleCsrKSB7DQo+PiArIEhhbmRsZU1hcCA9IFRh YmxlRmFjdG9yeVByb3RvY29sLT5HZXRTbWJpb3NIYW5kbGUgKENtT2JqVG9rZW5bSW5kZXhdKTsN Cj4gW1NBTUldIFNhbWUgY29tbWVudCBhcyBpbiB0aGUgZnVuY3Rpb24gYWJvdmUuDQo+PiArIGlm IChIYW5kbGVNYXAgPT0gTlVMTCkgew0KPj4gKyBUYWJsZUhhbmRsZSA9IFNNQklPU19IQU5ETEVf UElfUkVTRVJWRUQ7DQo+PiArIH0gZWxzZSB7DQo+PiArIFRhYmxlSGFuZGxlID0gSGFuZGxlTWFw LT5TbWJpb3NUYmxIYW5kbGU7DQo+PiArIH0NCj4+ICsNCj4+ICsgLy8gSW5zdGFsbCBTTUJJT1Mg dGFibGUNCj4+ICsgU3RhdHVzID0gU21iaW9zUHJvdG9jb2wtPkFkZCAoDQo+PiArIFNtYmlvc1By b3RvY29sLA0KPj4gKyBOVUxMLA0KPj4gKyAmVGFibGVIYW5kbGUsDQo+PiArIFNtYmlvc1RhYmxl W0luZGV4XQ0KPj4gKyApOw0KPj4gKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiArIERF QlVHICgoDQo+PiArIERFQlVHX0VSUk9SLA0KPj4gKyAiRVJST1I6IEZhaWxlZCB0byBJbnN0YWxs IFNNQklPUyBUYWJsZS4gU3RhdHVzID0gJXJcbiIsDQo+PiArIFN0YXR1cw0KPj4gKyApKTsNCj4+ ICsgLy8gRnJlZSBhbnkgYWxsb2NhdGVkIHJlc291cmNlcy4NCj4+ICsgZ290byBleGl0X2hhbmRs ZXI7DQo+PiArIH0NCj4+ICsNCj4+ICsgLy8gSWYgYSBuZXcgaGFuZGxlIHdhcyBnZW5lcmF0ZWQg dGhlbiBhZGQgaXQgdG8gdGhlIGhhbmRsZSBtYXAuDQo+PiArIGlmIChIYW5kbGVNYXAgPT0gTlVM TCkgew0KPj4gKyBUYWJsZUZhY3RvcnlQcm90b2NvbC0+QWRkU21iaW9zSGFuZGxlICgNCj4+ICsg U21iaW9zUHJvdG9jb2wsDQo+PiArICZUYWJsZUhhbmRsZSwNCj4+ICsgQ21PYmpUb2tlbltJbmRl eF0sDQo+PiArIFNtYmlvc1RhYmxlSW5mby0+VGFibGVHZW5lcmF0b3JJZA0KPj4gKyApOw0KPj4g KyB9DQo+PiArDQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX0lORk8sDQo+PiArICJJTkZPOiBT TUJJT1MgVGFibGUgaW5zdGFsbGVkLiBTdGF0dXMgPSAlclxuIiwNCj4+ICsgU3RhdHVzDQo+PiAr ICkpOw0KPj4gKyB9DQo+PiArDQo+PiArZXhpdF9oYW5kbGVyOg0KPj4gKyAvLyBGcmVlIGFueSBy ZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBnZW5lcmF0aW5nIHRoZSB0YWJsZXMuDQo+PiArIGlmIChH ZW5lcmF0b3ItPkZyZWVUYWJsZVJlc291cmNlc0V4ICE9IE5VTEwpIHsNCj4+ICsgU3RhdHVzMSA9 IEdlbmVyYXRvci0+RnJlZVRhYmxlUmVzb3VyY2VzRXggKA0KPj4gKyBHZW5lcmF0b3IsDQo+PiAr IFRhYmxlRmFjdG9yeVByb3RvY29sLA0KPj4gKyBTbWJpb3NUYWJsZUluZm8sDQo+PiArIENmZ01n clByb3RvY29sLA0KPj4gKyAmU21iaW9zVGFibGUsDQo+PiArICZDbU9ialRva2VuLA0KPj4gKyBU YWJsZUNvdW50DQo+PiArICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1czEpKSB7DQo+PiAr IERFQlVHICgoDQo+PiArIERFQlVHX0VSUk9SLA0KPj4gKyAiRVJST1I6IEZhaWxlZCB0byBGcmVl IFRhYmxlIFJlc291cmNlcy4iIFwNCj4+ICsgIlRhYmxlR2VuZXJhdG9ySWQgPSAweCV4LiBTdGF0 dXMgPSAlclxuIiwNCj4+ICsgU21iaW9zVGFibGVJbmZvLT5UYWJsZUdlbmVyYXRvcklkLA0KPj4g KyBTdGF0dXMxDQo+PiArICkpOw0KPj4gKyB9DQo+PiArDQo+PiArIC8vIFJldHVybiB0aGUgZmly c3QgZXJyb3Igc3RhdHVzIGluIGNhc2Ugb2YgZmFpbHVyZQ0KPj4gKyBpZiAoIUVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPj4gKyBTdGF0dXMgPSBTdGF0dXMxOw0KPj4gKyB9DQo+PiArIH0NCj4+ICsN Cj4+ICsgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBSZXR1cm5pbmcgJXJcbiIsIF9fRlVOQ1RJ T05fXywgU3RhdHVzKSk7DQo+PiArIHJldHVybiBTdGF0dXM7DQo+PiArfQ0KPj4gKw0KPj4gKy8q KiBBIGhlbHBlciBmdW5jdGlvbiB0byBpbnZva2UgYSBUYWJsZSBnZW5lcmF0b3INCj4+ICsNCj4+ ICsgVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIFRhYmxlIGdlbmVy YXRvciBpbnRlcmZhY2UNCj4+ICsgZm9yIGJ1aWxkaW5nIGFuIFNNQklPUyB0YWJsZS4gSXQgdXNl cyB0aGUgU21iaW9zUHJvdG9jb2wgdG8gaW5zdGFsbCB0aGUNCj4+ICsgdGFibGUsIHRoZW4gZnJl ZXMgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIGdlbmVyYXRpbmcgaXQuDQo+PiArDQo+PiAr IEBwYXJhbSBbaW5dIFRhYmxlRmFjdG9yeVByb3RvY29sIFBvaW50ZXIgdG8gdGhlIFRhYmxlIEZh Y3RvcnkgUHJvdG9jb2wNCj4+ICsgaW50ZXJmYWNlLg0KPj4gKyBAcGFyYW0gW2luXSBDZmdNZ3JQ cm90b2NvbCBQb2ludGVyIHRvIHRoZSBDb25maWd1cmF0aW9uIE1hbmFnZXINCj4+ICsgUHJvdG9j b2wgSW50ZXJmYWNlLg0KPj4gKyBAcGFyYW0gW2luXSBTbWJpb3NQcm90b2NvbCBQb2ludGVyIHRv IHRoZSBTTUJJT1MgcHJvdG9jb2wuDQo+PiArIEBwYXJhbSBbaW5dIFNtYmlvc1RhYmxlSW5mbyBQ b2ludGVyIHRvIHRoZSBTTUJJT1MgdGFibGUgSW5mby4NCj4+ICsNCj4+ICsgQHJldHZhbCBFRklf U1VDQ0VTUyBTdWNjZXNzLg0KPj4gKyBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBBIHBh cmFtZXRlciBpcyBpbnZhbGlkLg0KPj4gKyBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgUmVxdWlyZWQg b2JqZWN0IGlzIG5vdCBmb3VuZC4NCj4+ICsgQHJldHZhbCBFRklfQkFEX0JVRkZFUl9TSVpFIFNp emUgcmV0dXJuZWQgYnkgdGhlIENvbmZpZ3VyYXRpb24gTWFuYWdlcg0KPj4gKyBpcyBsZXNzIHRo YW4gdGhlIE9iamVjdCBzaXplIGZvciB0aGUNCj4+ICsgcmVxdWVzdGVkIG9iamVjdC4NCj4+ICsq Ki8NCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArQnVpbGRBbmRJbnN0YWxsU21iaW9z VGFibGUgKA0KPj4gKyBJTiBDT05TVCBFREtJSV9EWU5BTUlDX1RBQkxFX0ZBQ1RPUllfUFJPVE9D T0wgKkNPTlNUIFRhYmxlRmFjdG9yeVByb3RvY29sLA0KPj4gKyBJTiBDT05TVCBFREtJSV9DT05G SUdVUkFUSU9OX01BTkFHRVJfUFJPVE9DT0wgKkNPTlNUIENmZ01nclByb3RvY29sLA0KPj4gKyBJ TiBFRklfU01CSU9TX1BST1RPQ09MICpTbWJpb3NQcm90b2NvbCwNCj4+ICsgSU4gQ01fU1REX09C Sl9TTUJJT1NfVEFCTEVfSU5GTyAqQ09OU1QgU21iaW9zVGFibGVJbmZvDQo+PiArICkNCj4+ICt7 DQo+PiArIEVGSV9TVEFUVVMgU3RhdHVzOw0KPj4gKyBDT05TVCBTTUJJT1NfVEFCTEVfR0VORVJB VE9SICpHZW5lcmF0b3I7DQo+PiArDQo+PiArIEFTU0VSVCAoVGFibGVGYWN0b3J5UHJvdG9jb2wg IT0gTlVMTCk7DQo+PiArIEFTU0VSVCAoQ2ZnTWdyUHJvdG9jb2wgIT0gTlVMTCk7DQo+PiArIEFT U0VSVCAoU21iaW9zUHJvdG9jb2wgIT0gTlVMTCk7DQo+PiArIEFTU0VSVCAoU21iaW9zVGFibGVJ bmZvICE9IE5VTEwpOw0KPj4gKw0KPj4gKyBERUJVRyAoKA0KPj4gKyBERUJVR19JTkZPLA0KPj4g KyAiSU5GTzogRVN0ZE9ialNtYmlvc1RhYmxlTGlzdDogQWRkcmVzcyA9IDB4JXAsIiBcDQo+PiAr ICIgVGFibGVHZW5lcmF0b3JJZCA9IDB4JXhcbiIsDQo+PiArIFNtYmlvc1RhYmxlSW5mbywNCj4+ ICsgU21iaW9zVGFibGVJbmZvLT5UYWJsZUdlbmVyYXRvcklkDQo+PiArICkpOw0KPj4gKw0KPj4g KyBHZW5lcmF0b3IgPSBOVUxMOw0KPj4gKyBTdGF0dXMgPSBUYWJsZUZhY3RvcnlQcm90b2NvbC0+ R2V0U21iaW9zVGFibGVHZW5lcmF0b3IgKA0KPj4gKyBUYWJsZUZhY3RvcnlQcm90b2NvbCwNCj4+ ICsgU21iaW9zVGFibGVJbmZvLT5UYWJsZUdlbmVyYXRvcklkLA0KPj4gKyAmR2VuZXJhdG9yDQo+ PiArICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogVGFibGUgR2VuZXJhdG9yIG5vdCBmb3VuZC4i IFwNCj4+ICsgIiBUYWJsZUdlbmVyYXRvcklkID0gMHgleC4gU3RhdHVzID0gJXJcbiIsDQo+PiAr IFNtYmlvc1RhYmxlSW5mby0+VGFibGVHZW5lcmF0b3JJZCwNCj4+ICsgU3RhdHVzDQo+PiArICkp Ow0KPj4gKyByZXR1cm4gU3RhdHVzOw0KPj4gKyB9DQo+PiArDQo+PiArIGlmIChHZW5lcmF0b3Ig PT0gTlVMTCkgew0KPj4gKyByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+ICsgfQ0KPj4gKw0KPj4g KyBERUJVRyAoKA0KPj4gKyBERUJVR19JTkZPLA0KPj4gKyAiSU5GTzogR2VuZXJhdG9yIGZvdW5k IDogJXNcbiIsDQo+PiArIEdlbmVyYXRvci0+RGVzY3JpcHRpb24NCj4+ICsgKSk7DQo+PiArDQo+ PiArIGlmIChHZW5lcmF0b3ItPkJ1aWxkU21iaW9zVGFibGVFeCAhPSBOVUxMKSB7DQo+PiArIFN0 YXR1cyA9IEJ1aWxkQW5kSW5zdGFsbE11bHRpcGxlU21iaW9zVGFibGVzICgNCj4+ICsgVGFibGVG YWN0b3J5UHJvdG9jb2wsDQo+PiArIENmZ01nclByb3RvY29sLA0KPj4gKyBHZW5lcmF0b3IsDQo+ PiArIFNtYmlvc1Byb3RvY29sLA0KPj4gKyBTbWJpb3NUYWJsZUluZm8NCj4+ICsgKTsNCj4+ICsg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gKyBERUJVRyAoKA0KPj4gKyBERUJVR19FUlJP UiwNCj4+ICsgIkVSUk9SOiBGYWlsZWQgdG8gZmluZCBidWlsZCBhbmQgaW5zdGFsbCBTTUJJT1Mg VGFibGVzLiIgXA0KPj4gKyAiIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0dXMNCj4+ICsgKSk7 DQo+PiArIH0NCj4+ICsgfSBlbHNlIGlmIChHZW5lcmF0b3ItPkJ1aWxkU21iaW9zVGFibGUgIT0g TlVMTCkgew0KPj4gKyBTdGF0dXMgPSBCdWlsZEFuZEluc3RhbGxTaW5nbGVTbWJpb3NUYWJsZSAo DQo+PiArIFRhYmxlRmFjdG9yeVByb3RvY29sLA0KPj4gKyBDZmdNZ3JQcm90b2NvbCwNCj4+ICsg R2VuZXJhdG9yLA0KPj4gKyBTbWJpb3NQcm90b2NvbCwNCj4+ICsgU21iaW9zVGFibGVJbmZvDQo+ PiArICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ ICsgREVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogRmFpbGVkIHRvIGZpbmQgYnVpbGQgYW5kIGlu c3RhbGwgU01CSU9TIFRhYmxlLiIgXA0KPj4gKyAiIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0 dXMNCj4+ICsgKSk7DQo+PiArIH0NCj4+ICsgfSBlbHNlIHsNCj4+ICsgU3RhdHVzID0gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPj4gKyBERUJVRyAoKA0KPj4gKyBERUJVR19FUlJPUiwNCj4+ICsg IkVSUk9SOiBUYWJsZSBHZW5lcmF0b3IgZG9lcyBub3QgaW1wbGVtZW50IHRoZSIgXA0KPj4gKyAi U01CSU9TX1RBQkxFX0dFTkVSQVRPUl9CVUlMRF9UQUJMRSBpbnRlcmZhY2UuIiBcDQo+PiArICIg VGFibGVHZW5lcmF0b3JJZCA9IDB4JXguIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTbWJpb3NUYWJs ZUluZm8tPlRhYmxlR2VuZXJhdG9ySWQsDQo+PiArIFN0YXR1cw0KPj4gKyApKTsNCj4+ICsgfQ0K Pj4gKw0KPj4gKyBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IFJldHVybmluZyAlclxuIiwgX19G VU5DVElPTl9fLCBTdGF0dXMpKTsNCj4+ICsgcmV0dXJuIFN0YXR1czsNCj4+ICt9DQo+PiArDQo+ PiArLyoqIEdlbmVyYXRlIGFuZCBpbnN0YWxsIFNNQklPUyB0YWJsZXMuDQo+PiArDQo+PiArIFRo ZSBmdW5jdGlvbiBnYXRoZXJzIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIGluc3RhbGxp bmcgdGhlDQo+PiArIFNNQklPUyB0YWJsZXMgZnJvbSB0aGUgQ29uZmlndXJhdGlvbiBNYW5hZ2Vy LCBpbnZva2VzIHRoZSBnZW5lcmF0b3JzDQo+PiArIGFuZCBpbnN0YWxscyB0aGVtICh2aWEgQnVp bGRBbmRJbnN0YWxsQWNwaVRhYmxlKS4NCj4+ICsNCj4+ICsgQHBhcmFtIFtpbl0gVGFibGVGYWN0 b3J5UHJvdG9jb2wgUG9pbnRlciB0byB0aGUgVGFibGUgRmFjdG9yeSBQcm90b2NvbA0KPj4gKyBp bnRlcmZhY2UuDQo+PiArIEBwYXJhbSBbaW5dIENmZ01nclByb3RvY29sIFBvaW50ZXIgdG8gdGhl IENvbmZpZ3VyYXRpb24gTWFuYWdlcg0KPj4gKyBQcm90b2NvbCBJbnRlcmZhY2UuDQo+PiArDQo+ PiArIEByZXR2YWwgRUZJX1NVQ0NFU1MgU3VjY2Vzcy4NCj4+ICsgQHJldHZhbCBFRklfTk9UX0ZP VU5EIElmIGEgbWFuZGF0b3J5IHRhYmxlIG9yIGEgZ2VuZXJhdG9yIGlzIG5vdCBmb3VuZC4NCj4+ ICsqKi8NCj4+ICtTVEFUSUMNCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArUHJvY2Vz c1NtYmlvc1RhYmxlcyAoDQo+PiArIElOIENPTlNUIEVES0lJX0RZTkFNSUNfVEFCTEVfRkFDVE9S WV9QUk9UT0NPTCAqQ09OU1QgVGFibGVGYWN0b3J5UHJvdG9jb2wsDQo+PiArIElOIENPTlNUIEVE S0lJX0NPTkZJR1VSQVRJT05fTUFOQUdFUl9QUk9UT0NPTCAqQ09OU1QgQ2ZnTWdyUHJvdG9jb2wN Cj4+ICsgKQ0KPj4gK3sNCj4+ICsgRUZJX1NUQVRVUyBTdGF0dXM7DQo+PiArIEVGSV9TTUJJT1Nf UFJPVE9DT0wgKlNtYmlvc1Byb3RvY29sOw0KPj4gKyBDTV9TVERfT0JKX1NNQklPU19UQUJMRV9J TkZPICpTbWJpb3NUYWJsZUluZm87DQo+PiArIFVJTlQzMiBTbWJpb3NUYWJsZUNvdW50Ow0KPj4g KyBVSU5UMzIgSWR4Ow0KPj4gKw0KPj4gKyBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgm Z0VmaVNtYmlvc1Byb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopJlNtYmlvc1Byb3RvY29sKTsN Cj4+ICsgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gKyBERUJVRyAoKERFQlVHX0VSUk9S LCAiQ291bGQgbm90IGxvY2F0ZSBTTUJJT1MgcHJvdG9jb2wuICVyXG4iLCBTdGF0dXMpKTsNCj4+ ICsgcmV0dXJuIFN0YXR1czsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBTdGF0dXMgPSBHZXRFU3RkT2Jq U21iaW9zVGFibGVMaXN0ICgNCj4+ICsgQ2ZnTWdyUHJvdG9jb2wsDQo+PiArIENNX05VTExfVE9L RU4sDQo+PiArICZTbWJpb3NUYWJsZUluZm8sDQo+PiArICZTbWJpb3NUYWJsZUNvdW50DQo+PiAr ICk7DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ICsg REVCVUdfRVJST1IsDQo+PiArICJFUlJPUjogRmFpbGVkIHRvIGdldCBTTUJJT1MgVGFibGUgTGlz dC4gU3RhdHVzID0gJXJcbiIsDQo+PiArIFN0YXR1cw0KPj4gKyApKTsNCj4+ICsgcmV0dXJuIFN0 YXR1czsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBpZiAoU21iaW9zVGFibGVDb3VudCA9PSAwKSB7DQo+ PiArIERFQlVHICgoDQo+PiArIERFQlVHX0VSUk9SLA0KPj4gKyAiRVJST1I6IEVTdGRPYmpTbWJp b3NUYWJsZUxpc3Q6IFNtYmlvc1RhYmxlQ291bnQgPSAlZFxuIiwNCj4+ICsgU21iaW9zVGFibGVD b3VudA0KPj4gKyApKTsNCj4+ICsgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+PiArIH0NCj4+ICsN Cj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfSU5GTywNCj4+ICsgIklORk86IEVTdGRPYmpTbWJp b3NUYWJsZUxpc3Q6IFNtYmlvc1RhYmxlQ291bnQgPSAlZFxuIiwNCj4+ICsgU21iaW9zVGFibGVD b3VudA0KPj4gKyApKTsNCj4+ICsNCj4gPFNOSVA+DQo+PiArIGZvciAoSWR4ID0gMDsgSWR4IDwg U21iaW9zVGFibGVDb3VudDsgSWR4KyspIHsNCj4+ICsgU3RhdHVzID0gRGlzcGF0Y2hTbWJpb3NU YWJsZSAoDQo+PiArIFNtYmlvc1RhYmxlSW5mb1tJZHhdLlRhYmxlVHlwZSwNCj4+ICsgVGFibGVG YWN0b3J5UHJvdG9jb2wsDQo+PiArIENmZ01nclByb3RvY29sLA0KPj4gKyBTbWJpb3NQcm90b2Nv bCwNCj4+ICsgU21iaW9zVGFibGVJbmZvLA0KPj4gKyBTbWJpb3NUYWJsZUNvdW50DQo+PiArICk7 DQo+PiArIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVC VUdfRVJST1IsDQo+PiArICJFUlJPUjogRmFpbGVkIHRvIGluc3RhbGwgU01CSU9TIFRhYmxlLiIg XA0KPj4gKyAiIElkID0gJXUgU3RhdHVzID0gJXJcbiIsDQo+PiArIFNtYmlvc1RhYmxlSW5mb1tJ ZHhdLlRhYmxlR2VuZXJhdG9ySWQsDQo+PiArIFN0YXR1cw0KPj4gKyApKTsNCj4+ICsgfQ0KPj4g KyB9DQo+PiArDQo+IA0KPiA8U05JUD4NCj4gDQo+IFtTQU1JXSBJIHRoaW5rIHRoZSBhYm92ZSBj b2RlIG1heSBuZWVkIHNvbWUgYWRqdXN0bWVudCBiYXNlZCBvbiB0aGUgdjIgDQo+IHNlcmllcyBv ZiB0aGUgU01CSU9TIGRpc3BhdGNoZXIgYXQgDQo+IGh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9k ZXZlbC9tZXNzYWdlLzEwMDgzMyA8aHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL21lc3Nh Z2UvMTAwODMzPg0KPiANCj4gSW4gdGhlIHYyIHNlcmllcyB0aGVEaXNwYXRjaFNtYmlvc1RhYmxl cygpIGludGVybmFsbHkgaXRlcmF0ZXMgdGhyb3VnaCANCj4gdGhlIGxpc3Qgb2YgU01CSU9TIHRh YmxlcyBhbmQgZGlzcGF0Y2hlcyB0aGVtLiBTbyBsb29rcyBsaWtlIHlvdSBtYXkgbm90IA0KPiBu ZWVkIHRoZSBmb3IgbG9vcC4NCj4gDQo+IENhbiB5b3UgY2hlY2ssIHBsZWFzZT8NCj4gDQo+IFsv U0FNSV0NCj4gDQoNCg0KW0dNXQ0KQWNrLg0KDQoNCj4+ICsgREVCVUcgKChERUJVR19FUlJPUiwg IiVhOiBSZXR1cm5pbmcgJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+PiArIHJldHVy biBTdGF0dXM7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKiBDYWxsYmFjayBGdW5jdGlvbiBmb3IgU21i aW9zIHRhYmxlIGdlbmVyYXRpb24uDQo+PiArDQo+PiArIENhbGxiYWNrIGZ1bmN0aW9uIHdoZW4g U01CSU9TIHByb3RvY29sIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4NCj4+ ICsgaW52b2tlIHRoZSBjb2RlIHRvIGluc3RhbGwgdGhlIGF2YWlsYWJsZSBTTUJJT1MgdGFibGVz Lg0KPj4gKw0KPj4gKyBAcGFyYW0gRXZlbnQNCj4+ICsgQHBhcmFtIENvbnRleHQNCj4+ICsNCj4+ ICsgQHJldHZhbCBOb25lLg0KPj4gKyoqLw0KPj4gK1ZPSUQNCj4+ICtTbWJpb3NQcm90b2NvbFJl YWR5ICgNCj4+ICsgSU4gRUZJX0VWRU5UIEV2ZW50LA0KPj4gKyBJTiBWT0lEICpDb250ZXh0DQo+ PiArICkNCj4+ICt7DQo+PiArIEVGSV9TVEFUVVMgU3RhdHVzOw0KPj4gKyBFREtJSV9DT05GSUdV UkFUSU9OX01BTkFHRVJfUFJPVE9DT0wgKkNmZ01nclByb3RvY29sOw0KPj4gKyBDTV9TVERfT0JK X0NPTkZJR1VSQVRJT05fTUFOQUdFUl9JTkZPICpDZmdNZnJJbmZvOw0KPj4gKyBFREtJSV9EWU5B TUlDX1RBQkxFX0ZBQ1RPUllfUFJPVE9DT0wgKlRhYmxlRmFjdG9yeVByb3RvY29sOw0KPj4gKw0K Pj4gKyAvLyBMb2NhdGUgdGhlIER5bmFtaWMgVGFibGUgRmFjdG9yeQ0KPj4gKyBTdGF0dXMgPSBn QlMtPkxvY2F0ZVByb3RvY29sICgNCj4+ICsgJmdFZGtpaUR5bmFtaWNUYWJsZUZhY3RvcnlQcm90 b2NvbEd1aWQsDQo+PiArIE5VTEwsDQo+PiArIChWT0lEICoqKSZUYWJsZUZhY3RvcnlQcm90b2Nv bA0KPj4gKyApOw0KPj4gKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+PiArIERFQlVHICgo DQo+PiArIERFQlVHX0VSUk9SLA0KPj4gKyAiRVJST1I6IEZhaWxlZCB0byBmaW5kIER5bmFtaWMg VGFibGUgRmFjdG9yeSBwcm90b2NvbC4iIFwNCj4+ICsgIiBTdGF0dXMgPSAlclxuIiwNCj4+ICsg U3RhdHVzDQo+PiArICkpOw0KPj4gKyByZXR1cm47DQo+PiArIH0NCj4+ICsNCj4+ICsgLy8gTG9j YXRlIHRoZSBDb25maWd1cmF0aW9uIE1hbmFnZXIgZm9yIHRoZSBQbGF0Zm9ybQ0KPj4gKyBTdGF0 dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgNCj4+ICsgJmdFZGtpaUNvbmZpZ3VyYXRpb25NYW5h Z2VyUHJvdG9jb2xHdWlkLA0KPj4gKyBOVUxMLA0KPj4gKyAoVk9JRCAqKikmQ2ZnTWdyUHJvdG9j b2wNCj4+ICsgKTsNCj4+ICsgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gKyBERUJVRyAo KA0KPj4gKyBERUJVR19FUlJPUiwNCj4+ICsgIkVSUk9SOiBGYWlsZWQgdG8gZmluZCBDb25maWd1 cmF0aW9uIE1hbmFnZXIgcHJvdG9jb2wuIFN0YXR1cyA9ICVyXG4iLA0KPj4gKyBTdGF0dXMNCj4+ ICsgKSk7DQo+PiArIHJldHVybjsNCj4+ICsgfQ0KPj4gKw0KPj4gKyBTdGF0dXMgPSBHZXRDZ2ZN Z3JJbmZvIChDZmdNZ3JQcm90b2NvbCwgJkNmZ01mckluZm8pOw0KPj4gKyBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+PiArIERFQlVHICgoDQo+PiArIERFQlVHX0VSUk9SLA0KPj4gKyAiRVJS T1I6IEZhaWxlZCB0byBnZXQgQ29uZmlndXJhdGlvbiBNYW5hZ2VyIGluZm8uIFN0YXR1cyA9ICVy XG4iLA0KPj4gKyBTdGF0dXMNCj4+ICsgKSk7DQo+PiArIHJldHVybjsNCj4+ICsgfQ0KPj4gKw0K Pj4gKyBERUJVRyAoKA0KPj4gKyBERUJVR19JTkZPLA0KPj4gKyAiSU5GTzogQ29uZmlndXJhdGlv biBNYW5hZ2VyIFZlcnNpb24gPSAweCV4LCBPZW1JRCA9ICVjJWMlYyVjJWMlY1xuIiwNCj4+ICsg Q2ZnTWZySW5mby0+UmV2aXNpb24sDQo+PiArIENmZ01mckluZm8tPk9lbUlkWzBdLA0KPj4gKyBD ZmdNZnJJbmZvLT5PZW1JZFsxXSwNCj4+ICsgQ2ZnTWZySW5mby0+T2VtSWRbMl0sDQo+PiArIENm Z01mckluZm8tPk9lbUlkWzNdLA0KPj4gKyBDZmdNZnJJbmZvLT5PZW1JZFs0XSwNCj4+ICsgQ2Zn TWZySW5mby0+T2VtSWRbNV0NCj4+ICsgKSk7DQo+PiArDQo+PiArIFN0YXR1cyA9IFByb2Nlc3NT bWJpb3NUYWJsZXMgKFRhYmxlRmFjdG9yeVByb3RvY29sLCBDZmdNZ3JQcm90b2NvbCk7DQo+PiAr IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ICsgREVCVUcgKCgNCj4+ICsgREVCVUdfRVJS T1IsDQo+PiArICJFUlJPUjogU01CSU9TIFRhYmxlIHByb2Nlc3NpbmcgZmFpbHVyZS4gU3RhdHVz ID0gJXJcbiIsDQo+PiArIFN0YXR1cw0KPj4gKyApKTsNCj4+ICsgfQ0KPj4gK30NCj4+IGRpZmYg LS1naXQgYS9EeW5hbWljVGFibGVzUGtnL0luY2x1ZGUvQ29uZmlndXJhdGlvbk1hbmFnZXJPYmpl Y3QuaCBiL0R5bmFtaWNUYWJsZXNQa2cvSW5jbHVkZS9Db25maWd1cmF0aW9uTWFuYWdlck9iamVj dC5oDQo+PiBpbmRleCA3NGFkMjVkNWQ5Li4wYzk3ZTcwOTk2IDEwMDY0NA0KPj4gLS0tIGEvRHlu YW1pY1RhYmxlc1BrZy9JbmNsdWRlL0NvbmZpZ3VyYXRpb25NYW5hZ2VyT2JqZWN0LmgNCj4+ICsr KyBiL0R5bmFtaWNUYWJsZXNQa2cvSW5jbHVkZS9Db25maWd1cmF0aW9uTWFuYWdlck9iamVjdC5o DQo+PiBAQCAtMzEsNiArMzEsNyBAQCBCaXRzOiBbMzE6MjhdIC0gTmFtZSBTcGFjZSBJRA0KPj4g MDAwMCAtIFN0YW5kYXJkDQo+PiAwMDAxIC0gQVJNDQo+PiAxMDAwIC0gQ3VzdG9tL09FTQ0KPj4g KyAxMDEwIC0gU01CSU9TDQo+PiBBbGwgb3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZC4NCj4+IA0K Pj4gQml0czogWzI3OjE2XSAtIFJlc2VydmVkLg0KPj4gQEAgLTEwNSw5ICsxMDYsMTAgQEAgdHlw ZWRlZiBVSU5UMzIgQ01fT0JKRUNUX0lEOw0KPj4gZm9yIHRoZSBDb25maWd1cmF0aW9uIE1hbmFn ZXIgT2JqZWN0cy4NCj4+ICovDQo+PiB0eXBlZGVmIGVudW0gT2JqZWN0TmFtZVNwYWNlSUQgew0K Pj4gLSBFT2JqTmFtZVNwYWNlU3RhbmRhcmQsIC8vLzwgU3RhbmRhcmQgT2JqZWN0cyBOYW1lc3Bh Y2UNCj4+IC0gRU9iak5hbWVTcGFjZUFybSwgLy8vPCBBUk0gT2JqZWN0cyBOYW1lc3BhY2UNCj4+ IC0gRU9iak5hbWVTcGFjZU9lbSA9IDB4OCwgLy8vPCBPRU0gT2JqZWN0cyBOYW1lc3BhY2UNCj4+ ICsgRU9iak5hbWVTcGFjZVN0YW5kYXJkLCAvLy88IFN0YW5kYXJkIE9iamVjdHMgTmFtZXNwYWNl DQo+PiArIEVPYmpOYW1lU3BhY2VBcm0sIC8vLzwgQVJNIE9iamVjdHMgTmFtZXNwYWNlDQo+PiAr IEVPYmpOYW1lU3BhY2VPZW0gPSAweDgsIC8vLzwgT0VNIE9iamVjdHMgTmFtZXNwYWNlDQo+PiAr IEVPYmpOYW1lU3BhY2VTbWJpb3MgPSAweEEsIC8vLzwgU01CSU9TIE9iamVjdHMgTmFtZXNwYWNl DQo+PiBFT2JqTmFtZVNwYWNlTWF4DQo+PiB9IEVPQkpFQ1RfTkFNRVNQQUNFX0lEOw0KPj4gDQo+ PiBAQCAtMTkyLDQgKzE5NCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBDbU9iakRlc2NyaXB0b3Igew0K Pj4gI2RlZmluZSBDUkVBVEVfQ01fT0VNX09CSkVDVF9JRChPYmplY3RJZCkgXA0KPj4gKENSRUFU RV9DTV9PQkpFQ1RfSUQgKEVPYmpOYW1lU3BhY2VPZW0sIE9iamVjdElkKSkNCj4+IA0KPj4gKy8q KiBUaGlzIG1hY3JvIHJldHVybnMgYSBDb25maWd1cmF0aW9uIE1hbmFnZXIgT2JqZWN0IElEDQo+ PiArIGluIHRoZSBTTUJJT1MgT2JqZWN0IE5hbWVzcGFjZS4NCj4+ICsNCj4+ICsgQHBhcmFtIFtp bl0gT2JqZWN0SWQgVGhlIE9iamVjdCBJRC4NCj4+ICsNCj4+ICsgQHJldHZhbCBSZXR1cm5zIGFu IFNNQklPUyBDb25maWd1cmF0aW9uIE1hbmFnZXIgT2JqZWN0IElELg0KPj4gKyoqLw0KPj4gKyNk ZWZpbmUgQ1JFQVRFX0NNX1NNQklPU19PQkpFQ1RfSUQoT2JqZWN0SWQpIFwNCj4+ICsgKENSRUFU RV9DTV9PQkpFQ1RfSUQgKEVPYmpOYW1lU3BhY2VTbWJpb3MsIE9iamVjdElkKSkNCj4+ICsNCj4+ ICNlbmRpZiAvLyBDT05GSUdVUkFUSU9OX01BTkFHRVJfT0JKRUNUX0hfDQo+PiBkaWZmIC0tZ2l0 IGEvRHluYW1pY1RhYmxlc1BrZy9JbmNsdWRlL1Byb3RvY29sL0R5bmFtaWNUYWJsZUZhY3RvcnlQ cm90b2NvbC5oIGIvRHluYW1pY1RhYmxlc1BrZy9JbmNsdWRlL1Byb3RvY29sL0R5bmFtaWNUYWJs ZUZhY3RvcnlQcm90b2NvbC5oDQo+PiBpbmRleCBiMTFmYzBjOWYxLi4wNjcwYThmYjI3IDEwMDY0 NA0KPj4gLS0tIGEvRHluYW1pY1RhYmxlc1BrZy9JbmNsdWRlL1Byb3RvY29sL0R5bmFtaWNUYWJs ZUZhY3RvcnlQcm90b2NvbC5oDQo+PiArKysgYi9EeW5hbWljVGFibGVzUGtnL0luY2x1ZGUvUHJv dG9jb2wvRHluYW1pY1RhYmxlRmFjdG9yeVByb3RvY29sLmgNCj4+IEBAIC0yMzksMTIgKzIzOSwy MCBAQCB0eXBlZGVmIHN0cnVjdCBEeW5hbWljVGFibGVGYWN0b3J5UHJvdG9jb2wgew0KPj4gRURL SUlfRFlOQU1JQ19UQUJMRV9GQUNUT1JZX0RFUkVHSVNURVJfRFRfVEFCTEVfR0VORVJBVE9SDQo+ PiBEZXJlZ2lzdGVyRHRUYWJsZUdlbmVyYXRvcjsNCj4+IA0KPj4gKyBFREtJSV9EWU5BTUlDX1RB QkxFX0ZBQ1RPUllfU01CSU9TX1RBQkxFX0FERF9IQU5ETEUNCj4+ICsgQWRkU21iaW9zSGFuZGxl Ow0KPj4gKw0KPj4gKyBFREtJSV9EWU5BTUlDX1RBQkxFX0ZBQ1RPUllfU01CSU9TX1RBQkxFX0dF VF9IQU5ETEUNCj4+ICsgR2V0U21iaW9zSGFuZGxlOw0KPj4gKw0KPj4gLyoqIFBvaW50ZXIgdG8g dGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlDQo+PiBsaXN0IG9mIHJlZ2lzdGVyZWQg dGFibGUgZ2VuZXJhdG9ycw0KPj4gKi8NCj4+IEVES0lJX0RZTkFNSUNfVEFCTEVfRkFDVE9SWV9J TkZPICpUYWJsZUZhY3RvcnlJbmZvOw0KPj4gfSBFREtJSV9EWU5BTUlDX1RBQkxFX0ZBQ1RPUllf UFJPVE9DT0w7DQo+PiANCj4+ICsNCj4+ICsNCj4+IC8qKiBUaGUgRHluYW1pYyBUYWJsZSBGYWN0 b3J5IFByb3RvY29sIEdVSUQuDQo+PiAqLw0KPj4gZXh0ZXJuIEVGSV9HVUlEIGdFZGtpaUR5bmFt aWNUYWJsZUZhY3RvcnlQcm90b2NvbEd1aWQ7DQo+PiBkaWZmIC0tZ2l0IGEvRHluYW1pY1RhYmxl c1BrZy9JbmNsdWRlL1NtYmlvc1RhYmxlR2VuZXJhdG9yLmggYi9EeW5hbWljVGFibGVzUGtnL0lu Y2x1ZGUvU21iaW9zVGFibGVHZW5lcmF0b3IuaA0KPj4gaW5kZXggOTM0ZDU2YzkwZC4uZDgxZWI4 ZjEyNCAxMDA2NDQNCj4+IC0tLSBhL0R5bmFtaWNUYWJsZXNQa2cvSW5jbHVkZS9TbWJpb3NUYWJs ZUdlbmVyYXRvci5oDQo+PiArKysgYi9EeW5hbWljVGFibGVzUGtnL0luY2x1ZGUvU21iaW9zVGFi bGVHZW5lcmF0b3IuaA0KPj4gQEAgLTEwLDcgKzEwLDcgQEANCj4+ICNkZWZpbmUgU01CSU9TX1RB QkxFX0dFTkVSQVRPUl9IXw0KPj4gDQo+PiAjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9TbUJp b3MuaD4NCj4+IC0NCj4+ICsjaW5jbHVkZSA8UHJvdG9jb2wvU21iaW9zLmg+DQo+PiAjaW5jbHVk ZSA8VGFibGVHZW5lcmF0b3IuaD4NCj4+IA0KPj4gI3ByYWdtYSBwYWNrKDEpDQo+PiBAQCAtMTIx LDEyICsxMjEsMjEgQEAgdHlwZWRlZiBlbnVtIFN0ZFNtYmlvc1RhYmxlR2VuZXJhdG9ySWQgew0K Pj4gRVRhYmxlR2VuZXJhdG9yTmFtZVNwYWNlU3RkLCBcDQo+PiBUYWJsZUlkIFwNCj4+ICkNCj4+ ICsjZGVmaW5lIE1BWF9TTUJJT1NfSEFORExFUyAoMjU1KQ0KPiBbU0FNSV0gTWF5YmUgd2UgY291 bGQgZGVmaW5lIGEgRml4ZWRQY2QgaW5zdGVhZCBvZiBoYXJkY29kaW5nIHRvIDI1NS4NCg0KDQpb R01dDQpUaGlzIHNob3VsZCBiZSByZW1vdmVkIGFsdG9nZXRoZXIgKHdlIGRvbid0IGdlbmVyYXRl IGhhbmRsZXMpDQoNCg0KPj4gDQo+PiAvKiogRm9yd2FyZCBkZWNsYXJhdGlvbnMuDQo+PiAqLw0K Pj4gdHlwZWRlZiBzdHJ1Y3QgQ29uZmlndXJhdGlvbk1hbmFnZXJQcm90b2NvbCBFREtJSV9DT05G SUdVUkFUSU9OX01BTkFHRVJfUFJPVE9DT0w7DQo+PiB0eXBlZGVmIHN0cnVjdCBDbVN0ZE9ialNt Ymlvc1RhYmxlSW5mbyBDTV9TVERfT0JKX1NNQklPU19UQUJMRV9JTkZPOw0KPj4gdHlwZWRlZiBz dHJ1Y3QgU21iaW9zVGFibGVHZW5lcmF0b3IgU01CSU9TX1RBQkxFX0dFTkVSQVRPUjsNCj4+ICt0 eXBlZGVmIHN0cnVjdCBEeW5hbWljVGFibGVGYWN0b3J5UHJvdG9jb2wgRURLSUlfRFlOQU1JQ19U QUJMRV9GQUNUT1JZX1BST1RPQ09MOw0KPj4gK3R5cGVkZWYgVUlOVE4gQ01fT0JKRUNUX1RPS0VO Ow0KPj4gKw0KPj4gK3R5cGVkZWYgc3RydWN0IFNtYmlvc0hhbmRsZUNtT2JqTWFwIHsNCj4+ICsg RVNURF9TTUJJT1NfVEFCTEVfSUQgU21iaW9zVGFibGVJZDsNCj4+ICsgU01CSU9TX0hBTkRMRSBT bWJpb3NUYmxIYW5kbGU7DQo+PiArIENNX09CSkVDVF9UT0tFTiBTbWJpb3NDbVRva2VuOw0KPj4g K30gU01CSU9TX0hBTkRMRV9NQVA7DQo+PiANCj4+IC8qKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIg ZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgdG8gU01CSU9TIHRhYmxlIGJ1aWxkDQo+PiBmdW5jdGlv bnMgcHJvdmlkZWQgYnkgdGhlIFNNQklPUyB0YWJsZSBnZW5lcmF0b3IgYW5kIGNhbGxlZCBieSB0 aGUNCj4+IEBAIC0xNDMsOSArMTUyLDExIEBAIHR5cGVkZWYgc3RydWN0IFNtYmlvc1RhYmxlR2Vu ZXJhdG9yIFNNQklPU19UQUJMRV9HRU5FUkFUT1I7DQo+PiAqKi8NCj4+IHR5cGVkZWYgRUZJX1NU QVRVUyAoKlNNQklPU19UQUJMRV9HRU5FUkFUT1JfQlVJTERfVEFCTEUpICgNCj4+IElOIENPTlNU IFNNQklPU19UQUJMRV9HRU5FUkFUT1IgKkdlbmVyYXRvciwNCj4+ICsgSU4gQ09OU1QgRURLSUlf RFlOQU1JQ19UQUJMRV9GQUNUT1JZX1BST1RPQ09MICpDT05TVCBUYWJsZUZhY3RvcnlQcm90b2Nv bCwNCj4+IElOIENNX1NURF9PQkpfU01CSU9TX1RBQkxFX0lORk8gKkNPTlNUIFNtYmlvc1RhYmxl SW5mbywNCj4+IElOIENPTlNUIEVES0lJX0NPTkZJR1VSQVRJT05fTUFOQUdFUl9QUk9UT0NPTCAq Q09OU1QgQ2ZnTWdyUHJvdG9jb2wsDQo+PiAtIE9VVCBTTUJJT1NfU1RSVUNUVVJFICoqVGFibGUN Cj4+ICsgT1VUIFNNQklPU19TVFJVQ1RVUkUgKipUYWJsZSwNCj4+ICsgT1VUIENNX09CSkVDVF9U T0tFTiAqQ21PYmpUb2tlbg0KPj4gKTsNCj4+IA0KPj4gLyoqIFRoaXMgZnVuY3Rpb24gcG9pbnRl ciBkZXNjcmliZXMgdGhlIGludGVyZmFjZSB0byB1c2VkIGJ5IHRoZQ0KPj4gQEAgLTE2MywxMSAr MTc0LDEwNSBAQCB0eXBlZGVmIEVGSV9TVEFUVVMgKCpTTUJJT1NfVEFCTEVfR0VORVJBVE9SX0JV SUxEX1RBQkxFKSAoDQo+PiAqKi8NCj4+IHR5cGVkZWYgRUZJX1NUQVRVUyAoKlNNQklPU19UQUJM RV9HRU5FUkFUT1JfRlJFRV9UQUJMRSkgKA0KPj4gSU4gQ09OU1QgU01CSU9TX1RBQkxFX0dFTkVS QVRPUiAqR2VuZXJhdG9yLA0KPj4gKyBJTiBDT05TVCBFREtJSV9EWU5BTUlDX1RBQkxFX0ZBQ1RP UllfUFJPVE9DT0wgKkNPTlNUIFRhYmxlRmFjdG9yeVByb3RvY29sLA0KPj4gSU4gQ09OU1QgQ01f U1REX09CSl9TTUJJT1NfVEFCTEVfSU5GTyAqQ09OU1QgU21iaW9zVGFibGVJbmZvLA0KPj4gSU4g Q09OU1QgRURLSUlfQ09ORklHVVJBVElPTl9NQU5BR0VSX1BST1RPQ09MICpDT05TVCBDZmdNZ3JQ cm90b2NvbCwNCj4+IElOIFNNQklPU19TVFJVQ1RVUkUgKipUYWJsZQ0KPj4gKTsNCj4+IA0KPj4g Ky8qKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgdG8gU01C SU9TIHRhYmxlIGJ1aWxkDQo+PiArIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgU01CSU9TIHRh YmxlIGdlbmVyYXRvciBhbmQgY2FsbGVkIGJ5IHRoZQ0KPj4gKyBUYWJsZSBNYW5hZ2VyIHRvIGJ1 aWxkIGFuIFNNQklPUyB0YWJsZS4NCj4+ICsNCj4+ICsgQHBhcmFtIFtpbl0gR2VuZXJhdG9yIFBv aW50ZXIgdG8gdGhlIFNNQklPUyB0YWJsZSBnZW5lcmF0b3IuDQo+PiArIEBwYXJhbSBbaW5dIFNt Ymlvc1RhYmxlSW5mbyBQb2ludGVyIHRvIHRoZSBTTUJJT1MgdGFibGUgaW5mb3JtYXRpb24uDQo+ PiArIEBwYXJhbSBbaW5dIENmZ01nclByb3RvY29sIFBvaW50ZXIgdG8gdGhlIENvbmZpZ3VyYXRp b24gTWFuYWdlcg0KPj4gKyBQcm90b2NvbCBpbnRlcmZhY2UuDQo+PiArIEBwYXJhbSBbb3V0XSBU YWJsZSBQb2ludGVyIHRvIHRoZSBnZW5lcmF0ZWQgU01CSU9TIHRhYmxlLg0KPj4gKw0KPj4gKyBA cmV0dXJuIEVGSV9TVUNDRVNTIElmIHRoZSB0YWJsZSBpcyBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5 IG9yIG90aGVyDQo+PiArIGZhaWx1cmUgY29kZXMgYXMgcmV0dXJuZWQgYnkgdGhlIGdlbmVyYXRv ci4NCj4+ICsqKi8NCj4+ICt0eXBlZGVmIEVGSV9TVEFUVVMgKCpTTUJJT1NfVEFCTEVfR0VORVJB VE9SX0JVSUxEX1RBQkxFRVgpICgNCj4+ICsgSU4gQ09OU1QgU01CSU9TX1RBQkxFX0dFTkVSQVRP UiAqR2VuZXJhdG9yLA0KPj4gKyBJTiBDT05TVCBFREtJSV9EWU5BTUlDX1RBQkxFX0ZBQ1RPUllf UFJPVE9DT0wgKkNPTlNUIFRhYmxlRmFjdG9yeVByb3RvY29sLA0KPj4gKyBJTiBDTV9TVERfT0JK X1NNQklPU19UQUJMRV9JTkZPICpDT05TVCBTbWJpb3NUYWJsZUluZm8sDQo+PiArIElOIENPTlNU IEVES0lJX0NPTkZJR1VSQVRJT05fTUFOQUdFUl9QUk9UT0NPTCAqQ09OU1QgQ2ZnTWdyUHJvdG9j b2wsDQo+PiArIE9VVCBTTUJJT1NfU1RSVUNUVVJFICoqKlRhYmxlLA0KPj4gKyBPVVQgQ01fT0JK RUNUX1RPS0VOICoqQ21PYmplY3RUb2tlbiwNCj4+ICsgT1VUIFVJTlROICpDT05TVCBUYWJsZUNv dW50DQo+PiArICk7DQo+PiArDQo+PiArLyoqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBkZXNjcmli ZXMgdGhlIGludGVyZmFjZSB0byB1c2VkIGJ5IHRoZQ0KPj4gKyBUYWJsZSBNYW5hZ2VyIHRvIGdp dmUgdGhlIGdlbmVyYXRvciBhbiBvcHBvcnR1bml0eSB0byBmcmVlDQo+PiArIGFueSByZXNvdXJj ZXMgYWxsb2NhdGVkIGZvciBidWlsZGluZyB0aGUgU01CSU9TIHRhYmxlLg0KPj4gKw0KPj4gKyBA cGFyYW0gW2luXSBHZW5lcmF0b3IgUG9pbnRlciB0byB0aGUgU01CSU9TIHRhYmxlIGdlbmVyYXRv ci4NCj4+ICsgQHBhcmFtIFtpbl0gU21iaW9zVGFibGVJbmZvIFBvaW50ZXIgdG8gdGhlIFNNQklP UyB0YWJsZSBpbmZvcm1hdGlvbi4NCj4+ICsgQHBhcmFtIFtpbl0gQ2ZnTWdyUHJvdG9jb2wgUG9p bnRlciB0byB0aGUgQ29uZmlndXJhdGlvbiBNYW5hZ2VyDQo+PiArIFByb3RvY29sIGludGVyZmFj ZS4NCj4+ICsgQHBhcmFtIFtpbl0gVGFibGUgUG9pbnRlciB0byB0aGUgZ2VuZXJhdGVkIFNNQklP UyB0YWJsZS4NCj4+ICsNCj4+ICsgQHJldHVybiBFRklfU1VDQ0VTUyBJZiBmcmVlZCBzdWNjZXNz ZnVsbHkgb3Igb3RoZXIgZmFpbHVyZSBjb2Rlcw0KPj4gKyBhcyByZXR1cm5lZCBieSB0aGUgZ2Vu ZXJhdG9yLg0KPj4gKyoqLw0KPj4gK3R5cGVkZWYgRUZJX1NUQVRVUyAoKlNNQklPU19UQUJMRV9H RU5FUkFUT1JfRlJFRV9UQUJMRUVYKSAoDQo+PiArIElOIENPTlNUIFNNQklPU19UQUJMRV9HRU5F UkFUT1IgKkdlbmVyYXRvciwNCj4+ICsgSU4gQ09OU1QgRURLSUlfRFlOQU1JQ19UQUJMRV9GQUNU T1JZX1BST1RPQ09MICpDT05TVCBUYWJsZUZhY3RvcnlQcm90b2NvbCwNCj4+ICsgSU4gQ09OU1Qg Q01fU1REX09CSl9TTUJJT1NfVEFCTEVfSU5GTyAqQ09OU1QgU21iaW9zVGFibGVJbmZvLA0KPj4g KyBJTiBDT05TVCBFREtJSV9DT05GSUdVUkFUSU9OX01BTkFHRVJfUFJPVE9DT0wgKkNPTlNUIENm Z01nclByb3RvY29sLA0KPj4gKyBJTiBTTUJJT1NfU1RSVUNUVVJFICoqKlRhYmxlLA0KPj4gKyBJ TiBDTV9PQkpFQ1RfVE9LRU4gKipDbU9iamVjdFRva2VuLA0KPj4gKyBJTiBDT05TVCBVSU5UTiBU YWJsZUNvdW50DQo+PiArICk7DQo+PiArDQo+PiArLyoqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBk ZXNjcmliZXMgdGhlIGludGVyZmFjZSB0byB1c2VkIGJ5IHRoZQ0KPj4gKyBUYWJsZSBNYW5hZ2Vy IHRvIGdpdmUgdGhlIGdlbmVyYXRvciBhbiBvcHBvcnR1bml0eSB0byBhZGQNCj4+ICsgYW4gU01C SU9TIEhhbmRsZS4NCj4+ICsNCj4+ICsgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIER5 bmFtaWMgVGFibGUgTWFuYWdlciB0byBhZGQgYSBuZXdseSBhZGRlZA0KPj4gKyBTTUJJT1MgVGFi bGUgT1IgaXQgY2FuIGJlIGNhbGxlZCBieSBhbiBTTUJJT1MgVGFibGUgZ2VuZXJhdG9yIHRvIGNy ZWF0ZQ0KPj4gKyBhbmQgYWRkIGEgbmV3IFNNQklPUyBIYW5kbGUgaWYgdGhlcmUgaXMgYSByZWZl cmVuY2UgdG8gYW5vdGhlciB0YWJsZSBhbmQNCj4+ICsgaWYgdGhlcmUgaXMgYSBnZW5lcmF0b3Ig Zm9yIHRoYXQgdGFibGUgdGhhdCBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0Lg0KPj4gKw0KPj4gKyBA cGFyYW0gW2luXSBTbWJpb3MgUG9pbnRlciB0byB0aGUgU01CSU9TIHByb3RvY29sLg0KPj4gKyBA cGFyYW0gW2luXSBTbWJpb3NIYW5kbGUgUG9pbnRlciB0byBhbiBTTUJJT1MgaGFuZGxlIChlaXRo ZXIgZ2VuZXJhdGVkIGJ5DQo+PiArIFNtYmlvc0R4ZSBEcml2ZXIgb3IgU01CSU9TX0hBTkRMRV9Q SV9SRVNFUlZFRA0KPj4gKyBpZiBhIGhhbmRsZSBuZWVkcyB0byBiZSBnZW5lcmF0ZWQpLg0KPj4g KyBAcGFyYW0gW2luXSBDbU9iamVjdFRva2VuIFRoZSBDTSBPYmplY3QgdG9rZW4gZm9yIHRoYXQg aXMgdXNlZCB0byBnZW5lcmF0ZQ0KPj4gKyBTTUJJT1MgcmVjb3JkLg0KPj4gKyBAcGFyYW0gW2lu XSBTbWJpb3NJZCBUaGUgU01CSU9TIHRhYmxlIGdlbmVyYXRvciBJZC4NCj4+ICsNCj4+ICsgQHJl dHZhbCBFRklfU1VDQ0VTUyBTdWNjZXNzLg0KPj4gKyBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VS Q0VTIFVuYWJsZSB0byBhZGQgdGhlIGhhbmRsZS4NCj4+ICsgQHJldHZhbCBFRklfTk9UX0ZPVU5E IFRoZSByZXF1ZXN0ZWQgZ2VuZXJhdG9yIGlzIG5vdCBmb3VuZA0KPj4gKyBpbiB0aGUgbGlzdCBv ZiByZWdpc3RlcmVkIGdlbmVyYXRvcnMuDQo+PiArKiovDQo+PiArdHlwZWRlZiBFRklfU1RBVFVT ICgqRURLSUlfRFlOQU1JQ19UQUJMRV9GQUNUT1JZX1NNQklPU19UQUJMRV9BRERfSEFORExFKSAo DQo+PiArIElOIEVGSV9TTUJJT1NfUFJPVE9DT0wgKlNtYmlvcywNCj4+ICsgSU4gU01CSU9TX0hB TkRMRSAqU21iaW9zSGFuZGxlLA0KPj4gKyBJTiBDTV9PQkpFQ1RfVE9LRU4gQ21PYmplY3RUb2tl biwNCj4+ICsgSU4gRVNURF9TTUJJT1NfVEFCTEVfSUQgU21iaW9zSWQNCj4+ICsgKTsNCj4+ICsN Cj4+ICsvKiogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlIHRv IHVzZWQgYnkgdGhlDQo+PiArIFRhYmxlIE1hbmFnZXIgdG8gZ2l2ZSB0aGUgZ2VuZXJhdG9yIGFu IG9wcG9ydHVuaXR5IHRvIGZpbmQNCj4+ICsgYW4gU01CSU9TIEhhbmRsZS4NCj4+ICsNCj4+ICsg VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFNNQklPUyB0YWJsZSBnZW5lcmF0b3IgdG8g ZmluZCBhbiBTTUJJT1MNCj4+ICsgaGFuZGxlIG5lZWRlZCBhcyBwYXJ0IG9mIGdlbmVyYXRpbmcg YW4gU01CSU9TIFRhYmxlLg0KPj4gKw0KPj4gKyBAcGFyYW0gW2luXSBDbU9iamVjdFRva2VuIFRo ZSBDTSBPYmplY3QgdG9rZW4gdXNlZCB0byBnZW5lcmF0ZSB0aGUgU01CSU9TDQo+PiArIHJlY29y ZC4NCj4+ICsNCj4+ICsgQHJldHZhbCBFRklfU1VDQ0VTUyBTdWNjZXNzLg0KPj4gKyBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgVGhlIHJlcXVlc3RlZCBnZW5lcmF0b3IgaXMgbm90IGZvdW5kDQo+PiAr IGluIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgZ2VuZXJhdG9ycy4NCj4+ICsqKi8NCj4+ICt0eXBl ZGVmIFNNQklPU19IQU5ETEVfTUFQICogKCpFREtJSV9EWU5BTUlDX1RBQkxFX0ZBQ1RPUllfU01C SU9TX1RBQkxFX0dFVF9IQU5ETEUpICgNCj4+ICsgSU4gQ01fT0JKRUNUX1RPS0VOIENtT2JqZWN0 VG9rZW4NCj4+ICsgKTsNCj4+ICsNCj4+IC8qKiBUaGUgU01CSU9TX1RBQkxFX0dFTkVSQVRPUiBz dHJ1Y3R1cmUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRoYXQgdGhlDQo+PiBUYWJsZSBNYW5hZ2Vy IGNhbiB1c2UgdG8gaW52b2tlIHRoZSBmdW5jdGlvbnMgdG8gYnVpbGQgU01CSU9TIHRhYmxlcy4N Cj4+ICovDQo+PiBAQCAtMTg5LDYgKzI5NCwxNCBAQCB0eXBlZGVmIHN0cnVjdCBTbWJpb3NUYWJs ZUdlbmVyYXRvciB7DQo+PiBhbGxvY2F0ZWQgZm9yIGJ1aWxkaW5nIHRoZSBTTUJJT1MgdGFibGUu DQo+PiAqLw0KPj4gU01CSU9TX1RBQkxFX0dFTkVSQVRPUl9GUkVFX1RBQkxFIEZyZWVUYWJsZVJl c291cmNlczsNCj4+ICsNCj4+ICsgLy8vIFNNQklPUyB0YWJsZSBleHRlbmRlZCBidWlsZCBmdW5j dGlvbiBwb2ludGVyLg0KPj4gKyBTTUJJT1NfVEFCTEVfR0VORVJBVE9SX0JVSUxEX1RBQkxFRVgg QnVpbGRTbWJpb3NUYWJsZUV4Ow0KPj4gKw0KPj4gKyAvKiogVGhlIGZ1bmN0aW9uIHRvIGZyZWUg YW55IHJlc291cmNlcw0KPj4gKyBhbGxvY2F0ZWQgZm9yIGJ1aWxkaW5nIHRoZSBTTUJJT1MgdGFi bGUuDQo+PiArICovDQo+PiArIFNNQklPU19UQUJMRV9HRU5FUkFUT1JfRlJFRV9UQUJMRUVYIEZy ZWVUYWJsZVJlc291cmNlc0V4Ow0KPj4gfSBTTUJJT1NfVEFCTEVfR0VORVJBVE9SOw0KPj4gDQo+ PiAvKiogUmVnaXN0ZXIgU01CSU9TIHRhYmxlIGZhY3RvcnkgZ2VuZXJhdG9yLg0KPj4gQEAgLTIy OSw2ICszNDIsNTQgQEAgRGVyZWdpc3RlclNtYmlvc1RhYmxlR2VuZXJhdG9yICgNCj4+IElOIENP TlNUIFNNQklPU19UQUJMRV9HRU5FUkFUT1IgKkNPTlNUIEdlbmVyYXRvcg0KPj4gKTsNCj4+IA0K Pj4gKy8qKiBBZGQgU01CSU9TIEhhbmRsZS4NCj4+ICsNCj4+ICsgVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgYnkgdGhlIER5bmFtaWMgVGFibGUgTWFuYWdlciB0byBhZGQgYSBuZXdseSBhZGRlZA0K Pj4gKyBTTUJJT1MgVGFibGUgT1IgaXQgY2FuIGJlIGNhbGxlZCBieSBhbiBTTUJJT1MgVGFibGUg Z2VuZXJhdG9yIHRvIGNyZWF0ZQ0KPj4gKyBhbmQgYWRkIGEgbmV3IFNNQklPUyBIYW5kbGUgaWYg dGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gYW5vdGhlciB0YWJsZSBhbmQNCj4+ICsgaWYgdGhlcmUg aXMgYSBnZW5lcmF0b3IgZm9yIHRoYXQgdGFibGUgdGhhdCBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0 Lg0KPj4gKw0KPj4gKyBAcGFyYW0gW2luXSBTbWJpb3MgUG9pbnRlciB0byB0aGUgU01CSU9TIHBy b3RvY29sLg0KPj4gKyBAcGFyYW0gW2luXSBTbWJpb3NIYW5kbGUgUG9pbnRlciB0byBhbiBTTUJJ T1MgaGFuZGxlIChlaXRoZXIgZ2VuZXJhdGVkIGJ5DQo+PiArIFNtYmlvc0R4ZSBEcml2ZXIgb3Ig U01CSU9TX0hBTkRMRV9QSV9SRVNFUlZFRA0KPj4gKyBpZiBhIGhhbmRsZSBuZWVkcyB0byBiZSBn ZW5lcmF0ZWQpLg0KPj4gKyBAcGFyYW0gW2luXSBDbU9iamVjdFRva2VuIFRoZSBDTSBPYmplY3Qg dG9rZW4gZm9yIHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZQ0KPj4gKyBTTUJJT1MgcmVjb3JkLg0K Pj4gKyBAcGFyYW0gW2luXSBTbWJpb3NJZCBUaGUgU01CSU9TIHRhYmxlIGdlbmVyYXRvciBJZC4N Cj4+ICsNCj4+ICsgQHJldHZhbCBFRklfU1VDQ0VTUyBTdWNjZXNzLg0KPj4gKyBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTIFVuYWJsZSB0byBhZGQgdGhlIGhhbmRsZS4NCj4+ICsgQHJldHZh bCBFRklfTk9UX0ZPVU5EIFRoZSByZXF1ZXN0ZWQgZ2VuZXJhdG9yIGlzIG5vdCBmb3VuZA0KPj4g KyBpbiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGdlbmVyYXRvcnMuDQo+PiArKiovDQo+PiArRUZJ X1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0FkZFNtYmlvc0hhbmRsZSAoDQo+PiArIElOIEVGSV9T TUJJT1NfUFJPVE9DT0wgKlNtYmlvcywNCj4+ICsgSU4gU01CSU9TX0hBTkRMRSAqU21iaW9zSGFu ZGxlLA0KPj4gKyBJTiBDTV9PQkpFQ1RfVE9LRU4gQ21PYmplY3RUb2tlbiwNCj4+ICsgSU4gRVNU RF9TTUJJT1NfVEFCTEVfSUQgU21iaW9zSWQNCj4+ICsgKTsNCj4+ICsNCj4+ICsvKiogRmluZCBT TUJJT1MgSGFuZGxlIGdpdmVuIHRoZSBDTSBPYmplY3QgdG9rZW4gdXNlZCB0byBnZW5lcmF0ZSB0 aGUgU01CSU9TDQo+PiArIHJlY29yZC4uDQo+PiArDQo+PiArIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGJ5IHRoZSBTTUJJT1MgdGFibGUgZ2VuZXJhdG9yIHRvIGZpbmQgYW4gU01CSU9TDQo+PiAr IGhhbmRsZSBuZWVkZWQgYXMgcGFydCBvZiBnZW5lcmF0aW5nIGFuIFNNQklPUyBUYWJsZS4NCj4+ ICsNCj4+ICsgQHBhcmFtIFtpbl0gQ21PYmplY3RUb2tlbiBUaGUgQ00gT2JqZWN0IHRva2VuIHVz ZWQgdG8gZ2VuZXJhdGUgdGhlIFNNQklPUw0KPj4gKyByZWNvcmQuDQo+PiArDQo+PiArIEByZXR2 YWwgRUZJX1NVQ0NFU1MgU3VjY2Vzcy4NCj4+ICsgQHJldHZhbCBFRklfTk9UX0ZPVU5EIFRoZSBy ZXF1ZXN0ZWQgZ2VuZXJhdG9yIGlzIG5vdCBmb3VuZA0KPj4gKyBpbiB0aGUgbGlzdCBvZiByZWdp c3RlcmVkIGdlbmVyYXRvcnMuDQo+PiArKiovDQo+PiArU01CSU9TX0hBTkRMRV9NQVAgKg0KPj4g K0VGSUFQSQ0KPj4gK0ZpbmRTbWJpb3NIYW5kbGUgKA0KPj4gKyBJTiBDTV9PQkpFQ1RfVE9LRU4g Q21PYmplY3RUb2tlbg0KPj4gKyApOw0KPj4gKw0KPj4gI3ByYWdtYSBwYWNrKCkNCj4+IA0KPj4g I2VuZGlmIC8vIFNNQklPU19UQUJMRV9HRU5FUkFUT1JfSF8NCg0KDQoNCg==