From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2123.outbound.protection.outlook.com [40.107.244.123]) by sourceware.org (Postfix) with ESMTPS id 14212385842D for ; Thu, 14 Dec 2023 20:55:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 14212385842D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=os.amperecomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=os.amperecomputing.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 14212385842D Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.244.123 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1702587330; cv=pass; b=XOUurKFJcTaPhpXoUhXpWBuRhYgNjmjrjQeMejsAk4jIEW3BXr9VKLuePKI2VYjFNSmigrXAMepL0HobsVP9qjAWHintIeGsbFhIOJD3Nvyrs+rp+0beHYkhqPiKlJ9EwAbwZgnRnuaaGr1L7PK8npiYpzWdkyAKHFMFpXkry9E= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1702587330; c=relaxed/simple; bh=5YRLHHbpzQxCJQfjhWibe/rqyqg1/pDYzmkPvBMeN/I=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=BDdG0m/LosHFltavXdKwStOlCCNRFu/UgaZtn0k8de2dg9nGe717Iq+DqEqU8rlgAW3eE729DnXGo8z1beUqcCs03jikO0M3kBlMuBsZOhK5oWkdrJ6v5ZUcWtznnU8vLAkdZBe6Vk9xGwTSEvj601mRd/Cl/tIbnsmUQGAidIk= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KmK0RftgjrGaN0bA953pxBfpwzC4+NWrmYinYnME0DloVFC/qkDSUGN59o4VVhEt54v/GqmEsacVP2/3pm3yntGmM3+QYQHZxcG6cEWhcEquh3DK2YYscQhIKIIALx4tM9gXqNMdKlz7jjctGTdwQGc3kK1FawhJGkf5WXXmJ8iVjOuWqpBDoYnDgLGbcunCSma8ReEU7JIIKGVEwXnD2Rs2hThPyqAy9XFGhedcNpN8qexjZFNgcdYMXnisdkswOw+VdH3Kk/CP2hyTpEWg+HE4KU6kWHDbL/0H5BMBgILSouwd1DCYlEQc5YyMtQiKOkKDJJDcwV7s+IF1M3xDgw== 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=5YRLHHbpzQxCJQfjhWibe/rqyqg1/pDYzmkPvBMeN/I=; b=eAXexhrpE0iN/A91gJEB1wshEDoI6Z8s/TYHWIiSm2TF8mLFlhCSWyF74iIzGPuTBx+MLss8LqjlCZ3VjDD/S0yg6of8bdJi3lompw0rBAYIe/zvBwNxgHC6zGREadoZ4E1+3hABPToKQqVsjL5g0vXENNpvTS6pgP/j1Y3GQhikVWsrZTmTEjy/p6k56lm+Z2ju0hYHG0vHk+xxRK+kOirTYSQYuvzqBUGPxlpgzkhdYaw5wrnV/Ag66RWtBdvMAI/wlq+9m7dSaI9+L1I5IVCCbC6X4iRgDx41hsAikQhRjsWc+RQmf11T2hdcAYy+hUQweo3cVq4ay2+ISA2U6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5YRLHHbpzQxCJQfjhWibe/rqyqg1/pDYzmkPvBMeN/I=; b=e7biE9UtLeJanLE/AW/YmkSeugw5wkVZvyaGISTP+yuB4oT2eawSKslYw36Mj5Y97uU9OxkAZL1OPZDcqmDcnvKeXnHF1QNUO96P+eH4G20tLlJi7VYsU63kLswYK9NDx0lDiQrtPOblWHB1l4fZG0BEA6c1+a1Vqcy5Usz25i0= Received: from SN6PR01MB4240.prod.exchangelabs.com (2603:10b6:805:ae::22) by SJ0PR01MB6350.prod.exchangelabs.com (2603:10b6:a03:291::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7091.28; Thu, 14 Dec 2023 20:55:19 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::5669:ba60:a9d7:6ab0]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::5669:ba60:a9d7:6ab0%4]) with mapi id 15.20.7091.028; Thu, 14 Dec 2023 20:55:19 +0000 From: Di Zhao OS To: Richard Biener CC: "gcc-patches@gcc.gnu.org" Subject: RE: [PATCH v4] [tree-optimization/110279] Consider FMA in get_reassociation_width Thread-Topic: [PATCH v4] [tree-optimization/110279] Consider FMA in get_reassociation_width Thread-Index: AdnnBSPtK+NgbkElQ86FLpG1NcmCuQRMvhQAAHJVX2AEf9pAgAEvAawgAu98zgABhes98AJjtNGAACyQqeAAM9AWgABLHNZQ Date: Thu, 14 Dec 2023 20:55:19 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ActionId=64c1164d-8526-44e0-85d0-c5cecdf36a83;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_ContentBits=0;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Enabled=true;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Method=Standard;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_Name=Confidential (Default);MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SetDate=2023-12-14T20:51:21Z;MSIP_Label_5b82cb1d-c2e0-4643-920a-bbe7b2d7cc47_SiteId=3bc2b170-fd94-476d-b0ce-4229bdc904a7; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR01MB4240:EE_|SJ0PR01MB6350:EE_ x-ms-office365-filtering-correlation-id: dafb2176-5ff8-4ff9-eede-08dbfce6fb9d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: J9G09hlV1zlrMuv+ADxDbe21ORPFeF48cks5SiaZGAdYj9r9x9Pn9SW9k8OsidUAz8rKfBc5jyPAnGENF3jZpI/JNlLTAujfgtYWZ3se2Quizat6ruCpmSL2sr3OTLhc5S+/6p5kcJ1/vkNJd/jOmdsuEXG50DMgVkURA9mdMQX/f0tnWPcP6WaZAZLXigXqyiZYNkJw9IcGcwv6AFUIyNmN5qWyA1dU8S/aB9gBTcGF7ioja+MzKFI2yKQ2s18gjcheOIQ0hdnGempUCv3AG3uNxPnnwUJpCl77hAXx4pCCNsIwETub8k+hyllP9P9LWMc3mHnqd9aQkLeA4d4lZmB5ozMhdBs0xMHRknwswHy9m+SUSWwLbBBHzs7z7wnEQw+2xEQwNJimO14s1vfiFegygfEvbFF6FC14cctwfWoUgiR/fjz1EIIrti+DSYugMy8eMo/5QILLnZ+T1foXp7gazJBKFQZCJPeDLUGlUv0SuE54TS7rMtWrWhQw0u1SARzs9vYI1I7bH0uKgeNzZRRgSgiEYdFazX8D7qfubcPzwROScqZ/xF9CjC4AdEso9h+lGbfFmUYrRYYAeU3fwy27/60IYFx2eHqttJInxXI= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR01MB4240.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(346002)(366004)(136003)(376002)(39850400004)(230922051799003)(64100799003)(1800799012)(186009)(451199024)(5660300002)(478600001)(84970400001)(966005)(64756008)(6506007)(7696005)(9686003)(66556008)(66446008)(316002)(6916009)(53546011)(66476007)(30864003)(2906002)(66899024)(122000001)(52536014)(66574015)(38070700009)(86362001)(26005)(71200400001)(55016003)(76116006)(66946007)(4326008)(8936002)(8676002)(41300700001)(83380400001)(38100700002)(33656002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?blJUWmFYNGdqaUFsZDh2SXg5dkM3RG9OY3phZzdTVnRDcFNWaTFHMU1xSU1E?= =?utf-8?B?MkV0aVhTSFozVHAraTREc2haUWVZYXkvVHN6RGtWU1VNanBIYmxGUXdtSG9m?= =?utf-8?B?aFFjVjNjNWtTa1pjbFZ2RW5LN0Y1UzBaNlJzdkhNL05mUEhXbE11ODlNM0xP?= =?utf-8?B?dkR6WDViSlB6eHhRREZ2RG5lOCtnUk5YNGozMU1CdVlWWlhRMFg0Mm9YSHp3?= =?utf-8?B?T1Rxeks5RnJTY09xSXA4bVhWTndXRG5YVWxuUFpQWktLSU1pRm9BbTZ6QzBk?= =?utf-8?B?ZHhHalNVVmxveEFDYjRxV3FZamJBWGthYkZsU0JIeWFCQlc4ZXJ4WTdqUU40?= =?utf-8?B?TU1yTVQxWlpiQVg3VVNmRnZCam9Zc3JoeXVJazBuU1ZuWE9IaTQ0MUVWWXZX?= =?utf-8?B?NU9LbHZmM1R0OEtTOFVWTUVvVnFLUDZNYjJRb3dWMVhBWlRTcGJycGhRcEFH?= =?utf-8?B?bHVTS1VJY2JtRUFYdmo4WktMUElmYk5Mdk1CMTJPRWpPWDMyWkh2T0hZdGlX?= =?utf-8?B?ZFpYOHJmUXpxejRDL1JqMkY0SEFmdEdwMWw3enhPOUZtU2dSY3BxRVJGaEJp?= =?utf-8?B?YWh0YlQ5ckZyTmh0WTVDVmtNWnQwN2d1bGV3RC9qU1llbTIwTFJSK1plNTRi?= =?utf-8?B?YU5xZ3RabVpRY2dHVXVaUVhqT2VpNjViSFEvZ0JTbmpGZUhyTjVQVGdReld1?= =?utf-8?B?WWlQbHpIK05iSTF6QjFxRitSWVgxMzh6d0hxY3g5TVBRd0w3MWF1VmpQaGF6?= =?utf-8?B?MXlKcmJsVDZublVnZWd0NW00cVRVdytybkZYOW9td1l5OXJUblJZRy9sM1BK?= =?utf-8?B?d2RLeU1OQ1o2WkR4QUtQSlU4NnB0bGo1VSswNVFYaSt1QkpRU0kybzVaY3Fh?= =?utf-8?B?WDc0VU1zS1JBTWR4UGY3cFBWQ09nREF1RGRwZVlRRXQ3cGxrUmF4NEFNVjZE?= =?utf-8?B?U05KdDBmcDdOVUNBUUVkVjFldWkwQ3lhT0tvNlRmU2V4cFE4RFNlYXY4Slpi?= =?utf-8?B?bkNSVDFFOEJEdnRKSGY1amFVL1BWMnkwek1ST3dqRnVrSng5aTJhc0VjazNO?= =?utf-8?B?R1o2aytmQmR1T2I2cHg5aXlJMkNsdGpPMFFWc0lRVlZYeFZJb2JnZlBLemhY?= =?utf-8?B?SHRHNUtwd2l4dk9jcjJyZE5qWXc2eGMxVmM2a0huMkpLSnBVTWZiT0hSSUZC?= =?utf-8?B?ZFFwZlkzN0NhQ3ZqakhuejJTejVWcS9LN0U3YWZkUUtFNHhoalRmYytrNUov?= =?utf-8?B?V25vdDVRQ2lLMWtjTWVneGhPQ0FlQ3I5RlhJcjBxUTRsZUg3OEc0VFF1Nldy?= =?utf-8?B?VjBoemtlTHhpbitKbTFvNEtybFNDTjVveHZwV1FiZlI4SzR1V2J2UmR5em1M?= =?utf-8?B?NWlPY2dIWmZOQ2pKTW1lK2xkL2l0ZW9tMExHQk9HcldnRG1GT0k3aUU1eVBy?= =?utf-8?B?QlAxZUtBRTVUeWlMSVJvR0lZUmQrcmc3NnhmZFdUUGc0SzJuNmdhN2MyY05i?= =?utf-8?B?aGF6SnFxZUYrYTZKei9talNEUW51VnpvbnkyRkw1S2Rta25neG1NSW84ekkv?= =?utf-8?B?a2hiOWJGMVpFdXJqNGVPNGQ5Z2lQOXJLU2haT2tvcnRvRWJPRmZnVUNmVkRa?= =?utf-8?B?WU8zZUFlVTVQcW9WaUdFQU42aERaakNST3VEdFVXVWNkUjVtUjhhOVRFNStk?= =?utf-8?B?WUJwUC9nRUF1MnJrbmNTdXpNeDJyT2JYQU5QaUR2cGVTZTU1U2swNUNYS3N4?= =?utf-8?B?eU5rMldwbGxzbGhFMWhxNm04dEd2TGNJdFlVQnFMRkx3OENlQ2p2MUM0Q0Vj?= =?utf-8?B?SWVQU3pRaXlTYjNQN1hTWnUvMGxiMmNWa1QwSGFoTWhWeHlXejN2dSt0Rnlj?= =?utf-8?B?dDJPalV3U3Y4cEpIenZLeHlQZ0dxUUF1K2JKaHJSNERCN0V4K2pmb1drK3Yz?= =?utf-8?B?cWJpeUxFWEZOVmtTRmNpeEdZQVJOR0xBckFMb1A4bVpDQVNIUy9IRDNEMFNr?= =?utf-8?B?d1BDR0J0c0cyd2dIR3J3dDFaRFlHSmxGb2lOdXRnZ2ZsUUVxdlJZaGRwM3Jk?= =?utf-8?B?dk1lMktONXJaYzVIWVFkVkwxQUFPZEJrTlhXcWtqRTFoRkVCMXJyOHFVR1Y3?= =?utf-8?B?R0JRZlV3c2l5cWRGdDl6cDNadUZBenhra2ZpM2h6a21abCs5Qm1zVzBieE9t?= =?utf-8?B?VVE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR01MB4240.prod.exchangelabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: dafb2176-5ff8-4ff9-eede-08dbfce6fb9d X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Dec 2023 20:55:19.6575 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5CA+5tFCf/XT5cl+fM1WlvWb/CWJ4UCL8CAFKaE+/TbDIxUIjTXYcsb6dROPpCzBEYxFtXOoMd+nX8RV19xG17SvDJR9r4mI/WQoTKIMSPSozcO3KfSPNP4+ENjFcCXO X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR01MB6350 X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFJpY2hhcmQgQmllbmVyIDxy aWNoYXJkLmd1ZW50aGVyQGdtYWlsLmNvbT4NCj4gU2VudDogV2VkbmVzZGF5LCBEZWNlbWJlciAx MywgMjAyMyA1OjAxIFBNDQo+IFRvOiBEaSBaaGFvIE9TIDxkaXpoYW9Ab3MuYW1wZXJlY29tcHV0 aW5nLmNvbT4NCj4gQ2M6IGdjYy1wYXRjaGVzQGdjYy5nbnUub3JnDQo+IFN1YmplY3Q6IFJlOiBb UEFUQ0ggdjRdIFt0cmVlLW9wdGltaXphdGlvbi8xMTAyNzldIENvbnNpZGVyIEZNQSBpbg0KPiBn ZXRfcmVhc3NvY2lhdGlvbl93aWR0aA0KPiANCj4gT24gV2VkLCBEZWMgMTMsIDIwMjMgYXQgOTox NOKAr0FNIERpIFpoYW8gT1MNCj4gPGRpemhhb0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tPiB3cm90 ZToNCj4gPg0KPiA+IEhlbGxvIFJpY2hhcmQsDQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmljaGFyZC5ndWVudGhlckBn bWFpbC5jb20+DQo+ID4gPiBTZW50OiBNb25kYXksIERlY2VtYmVyIDExLCAyMDIzIDc6MDEgUE0N Cj4gPiA+IFRvOiBEaSBaaGFvIE9TIDxkaXpoYW9Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NCj4g PiA+IENjOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZw0KPiA+ID4gU3ViamVjdDogUmU6IFtQQVRD SCB2NF0gW3RyZWUtb3B0aW1pemF0aW9uLzExMDI3OV0gQ29uc2lkZXIgRk1BIGluDQo+ID4gPiBn ZXRfcmVhc3NvY2lhdGlvbl93aWR0aA0KPiA+ID4NCj4gPiA+IE9uIFdlZCwgTm92IDI5LCAyMDIz IGF0IDM6MzbigK9QTSBEaSBaaGFvIE9TDQo+ID4gPiA8ZGl6aGFvQG9zLmFtcGVyZWNvbXB1dGlu Zy5jb20+IHdyb3RlOg0KPiA+ID4gPg0KPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+ID4gPiA+ID4gRnJvbTogUmljaGFyZCBCaWVuZXIgPHJpY2hhcmQuZ3VlbnRoZXJAZ21h aWwuY29tPg0KPiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVyIDIxLCAyMDIzIDk6MDEg UE0NCj4gPiA+ID4gPiBUbzogRGkgWmhhbyBPUyA8ZGl6aGFvQG9zLmFtcGVyZWNvbXB1dGluZy5j b20+DQo+ID4gPiA+ID4gQ2M6IGdjYy1wYXRjaGVzQGdjYy5nbnUub3JnDQo+ID4gPiA+ID4gU3Vi amVjdDogUmU6IFtQQVRDSCB2NF0gW3RyZWUtb3B0aW1pemF0aW9uLzExMDI3OV0gQ29uc2lkZXIg Rk1BIGluDQo+ID4gPiA+ID4gZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGgNCj4gPiA+ID4gPg0KPiA+ ID4gPiA+IE9uIFRodSwgTm92IDksIDIwMjMgYXQgNjo1M+KAr1BNIERpIFpoYW8gT1MNCj4gPGRp emhhb0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tPg0KPiA+ID4gPiA+IHdyb3RlOg0KPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ ID4gRnJvbTogUmljaGFyZCBCaWVuZXIgPHJpY2hhcmQuZ3VlbnRoZXJAZ21haWwuY29tPg0KPiA+ ID4gPiA+ID4gPiBTZW50OiBUdWVzZGF5LCBPY3RvYmVyIDMxLCAyMDIzIDk6NDggUE0NCj4gPiA+ ID4gPiA+ID4gVG86IERpIFpoYW8gT1MgPGRpemhhb0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tPg0K PiA+ID4gPiA+ID4gPiBDYzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcNCj4gPiA+ID4gPiA+ID4g U3ViamVjdDogUmU6IFtQQVRDSCB2NF0gW3RyZWUtb3B0aW1pemF0aW9uLzExMDI3OV0gQ29uc2lk ZXIgRk1BIGluDQo+ID4gPiA+ID4gPiA+IGdldF9yZWFzc29jaWF0aW9uX3dpZHRoDQo+ID4gPiA+ ID4gPiA+DQo+ID4gPiA+ID4gPiA+IE9uIFN1biwgT2N0IDgsIDIwMjMgYXQgNjo0MOKAr1BNIERp IFpoYW8gT1MNCj4gPiA+IDxkaXpoYW9Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NCj4gPiA+ID4g PiA+ID4gd3JvdGU6DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBBdHRhY2hlZCBp cyBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBwYXRjaC4NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ID4gPiA+IEZy b206IFJpY2hhcmQgQmllbmVyIDxyaWNoYXJkLmd1ZW50aGVyQGdtYWlsLmNvbT4NCj4gPiA+ID4g PiA+ID4gPiA+IFNlbnQ6IEZyaWRheSwgT2N0b2JlciA2LCAyMDIzIDU6MzMgUE0NCj4gPiA+ID4g PiA+ID4gPiA+IFRvOiBEaSBaaGFvIE9TIDxkaXpoYW9Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4N Cj4gPiA+ID4gPiA+ID4gPiA+IENjOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZw0KPiA+ID4gPiA+ ID4gPiA+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2NF0gW3RyZWUtb3B0aW1pemF0aW9uLzExMDI3 OV0gQ29uc2lkZXINCj4gRk1BIGluDQo+ID4gPiA+ID4gPiA+ID4gPiBnZXRfcmVhc3NvY2lhdGlv bl93aWR0aA0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+IE9uIFRodSwgU2Vw IDE0LCAyMDIzIGF0IDI6NDPigK9QTSBEaSBaaGFvIE9TDQo+ID4gPiA+ID4gPiA+ID4gPiA8ZGl6 aGFvQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+IHdyb3RlOg0KPiA+ID4gPiA+ID4gPiA+ID4gPg0K PiA+ID4gPiA+ID4gPiA+ID4gPiBUaGlzIGlzIGEgbmV3IHZlcnNpb24gb2YgdGhlIHBhdGNoIG9u ICJuZXN0ZWQgRk1BIi4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gU29ycnkgZm9yIHVwZGF0aW5nIHRo aXMgYWZ0ZXIgc28gbG9uZywgSSd2ZSBiZWVuIHN0dWR5aW5nDQo+IGFuZA0KPiA+ID4gPiA+ID4g PiA+ID4gPiB3cml0aW5nIG1pY3JvIGNhc2VzIHRvIHNvcnQgb3V0IHRoZSBjYXVzZSBvZiB0aGUg cmVncmVzc2lvbi4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiBTb3JyeSBm b3IgdGFraW5nIHNvIGxvbmcgdG8gcmVwbHkuDQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ ID4gPiA+ID4gPiBGaXJzdCwgZm9sbG93aW5nIHByZXZpb3VzIGRpc2N1c3Npb246DQo+ID4gPiA+ ID4gPiA+ID4gPiA+IChodHRwczovL2djYy5nbnUub3JnL3BpcGVybWFpbC9nY2MtcGF0Y2hlcy8y MDIzLQ0KPiA+ID4gPiA+IFNlcHRlbWJlci82MjkwODAuaHRtbCkNCj4gPiA+ID4gPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gMS4gRnJvbSB0ZXN0aW5nIG1vcmUgYWx0ZXJlZCBjYXNl cywgSSBkb24ndCB0aGluayB0aGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gcHJvYmxlbSBpcyB0aGF0 IHJlYXNzb2NpYXRpb24gd29ya3MgbG9jYWxseS4gSW4gdGhhdDoNCj4gPiA+ID4gPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gICAxKSBPbiB0aGUgZXhhbXBsZSB3aXRoIG11bHRpcGxp Y2F0aW9uczoNCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAg ICB0bXAxID0gYSArIGMgKiBjICsgZCAqIGQgKyB4ICogeTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4g ICAgICAgICB0bXAyID0geCAqIHRtcDE7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgcmVz dWx0ICs9IChhICsgYyArIGQgKyB0bXAyKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ID4gPiA+ID4gICBHaXZlbiAicmVzdWx0IiByZXdyaXR0ZW4gYnkgd2lkdGg9MiwgdGhlIHBl cmZvcm1hbmNlIGlzDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICAgd29yc2UgaWYgd2UgcmV3cml0ZSAi dG1wMSIgd2l0aCB3aWR0aD0yLiBJbiBjb250cmFzdCwgaWYNCj4gd2UNCj4gPiA+ID4gPiA+ID4g PiA+ID4gICByZW1vdmUgdGhlIG11bHRpcGxpY2F0aW9ucyBmcm9tIHRoZSBleGFtcGxlIChhbmQg bWFrZQ0KPiAidG1wMSINCj4gPiA+ID4gPiA+ID4gPiA+ID4gICBub3Qgc2luZ2UgdXNlZCksIGFu ZCBzdGlsbCByZXdyaXRlICJyZXN1bHQiIGJ5IHdpZHRoPTIsDQo+IHRoZW4NCj4gPiA+ID4gPiA+ ID4gPiA+ID4gICByZXdyaXRpbmcgInRtcDEiIHdpdGggd2lkdGg9MiBpcyBiZXR0ZXIuIChNYWtl IHNlbnNlDQo+IGJlY2F1c2UNCj4gPiA+ID4gPiA+ID4gPiA+ID4gICB0aGUgdHJlZSdzIGRlcHRo IGF0ICJyZXN1bHQiIGlzIHN0aWxsIHNtYWxsZXIgaWYgd2UNCj4gcmV3cml0ZQ0KPiA+ID4gPiA+ ID4gPiA+ID4gPiAgICJ0bXAxIi4pDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ ID4gPiA+ICAgMikgSSB0cmllZCB0byBtb2RpZnkgdGhlIGFzc2VtYmx5IGNvZGUgb2YgdGhlIGV4 YW1wbGUNCj4gd2l0aG91dA0KPiA+ID4gPiA+ID4gPiA+ID4gPiAgIEZNQSwgc28gdGhlIHdpZHRo IG9mICJyZXN1bHQiIGlzIDQuIE9uIEFtcGVyZTEgdGhlcmUncyBubw0KPiA+ID4gPiA+ID4gPiA+ ID4gPiAgIG9idmlvdXMgaW1wcm92ZW1lbnQuIFNvIGFsdGhvdWdoIHRoaXMgaXMgYW4gaW50ZXJl c3RpbmcNCj4gPiA+ID4gPiA+ID4gPiA+ID4gICBwcm9ibGVtLCBpdCBkb2Vzbid0IHNlZW0gbGlr ZSB0aGUgY2F1c2Ugb2YgdGhlIHJlZ3Jlc3Npb24uDQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gPiA+ID4gT0ssIEkgc2VlLg0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4g PiA+ID4gMi4gRnJvbSBhc3NlbWJseSBjb2RlIG9mIHRoZSBjYXNlIHdpdGggRk1BLCBvbmUgcHJv YmxlbSBpcw0KPiA+ID4gPiA+ID4gPiA+ID4gPiB0aGF0LCByZXdyaXRpbmcgInRtcDEiIHRvIHBh cmFsbGVsIGRpZG4ndCBkZWNyZWFzZSB0aGUNCj4gPiA+ID4gPiA+ID4gPiA+ID4gbWluaW11bSBD UFUgY3ljbGVzICh0YWtpbmcgTVVMVF9FWFBScyBpbnRvIGFjY291bnQpLCBidXQNCj4gPiA+ID4g PiA+ID4gPiA+ID4gaW5jcmVhc2VkIGNvZGUgc2l6ZSwgc28gdGhlIG92ZXJoZWFkIGlzIGluY3Jl YXNlZC4NCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gICAgYSkgV2hl biAidG1wMSIgaXMgbm90IHJlLXdyaXR0ZW4gdG8gcGFyYWxsZWw6DQo+ID4gPiA+ID4gPiA+ID4g PiA+ICAgICAgICAgZm1hZGQgZDMxLCBkMiwgZDIsIGQzMA0KPiA+ID4gPiA+ID4gPiA+ID4gPiAg ICAgICAgIGZtYWRkIGQzMSwgZDMsIGQzLCBkMzENCj4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAg ICBmbWFkZCBkMzEsIGQ0LCBkNSwgZDMxICAvLyJ0bXAxIg0KPiA+ID4gPiA+ID4gPiA+ID4gPiAg ICAgICAgIGZtYWRkIGQzMSwgZDMxLCBkNCwgZDMNCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+ID4gPiA+ID4gICAgYikgV2hlbiAidG1wMSIgaXMgcmUtd3JpdHRlbiB0byBwYXJhbGxl bDoNCj4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICBmbXVsICBkMzEsIGQ0LCBkNQ0KPiA+ID4g PiA+ID4gPiA+ID4gPiAgICAgICAgIGZtYWRkIGQyNywgZDIsIGQyLCBkMzANCj4gPiA+ID4gPiA+ ID4gPiA+ID4gICAgICAgICBmbWFkZCBkMzEsIGQzLCBkMywgZDMxDQo+ID4gPiA+ID4gPiA+ID4g PiA+ICAgICAgICAgZmFkZCAgZDMxLCBkMzEsIGQyNyAgICAgLy8idG1wMSINCj4gPiA+ID4gPiA+ ID4gPiA+ID4gICAgICAgICBmbWFkZCBkMzEsIGQzMSwgZDQsIGQzDQo+ID4gPiA+ID4gPiA+ID4g PiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+IEZvciB2ZXJzaW9uIGEpLCB0aGVyZSBhcmUgMyBkZXBl bmRlbnQgRk1BcyB0byBjYWxjdWxhdGUNCj4gInRtcDEiLg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBG b3IgdmVyc2lvbiBiKSwgdGhlcmUgYXJlIGFsc28gMyBkZXBlbmRlbnQgaW5zdHJ1Y3Rpb25zIGlu DQo+IHRoZQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiBsb25nZXIgcGF0aDogdGhlIDFzdCwgM3JkIGFu ZCA0dGguDQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gWWVzLCBpdCBkb2Vz bid0IHJlYWxseSBjaGFuZ2UgYW55dGhpbmcuICBUaGUgcGF0Y2ggaGFzDQo+ID4gPiA+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gKyAgLyogSWYgdGhlcmUncyBjb2RlIGxpa2UgImFjYyA9 IGEgKiBiICsgYyAqIGQgKyBhY2MiIGluIGENCj4gdGlnaHQNCj4gPiA+IGxvb3AsDQo+ID4gPiA+ ID4gPiA+IHNvbWUNCj4gPiA+ID4gPiA+ID4gPiA+ICsgICAgIHVhcmNocyBjYW4gZXhlY3V0ZSBy ZXN1bHRzIGxpa2U6DQo+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiArICAg ICAgIF8xID0gYSAqIGI7DQo+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgIF8yID0gLkZNQSAoYywg ZCwgXzEpOw0KPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAgICBhY2NfMSA9IGFjY18wICsgXzI7DQo+ ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gPiArICAgICBpbiBwYXJhbGxlbCwg d2hpbGUgdHVybmluZyBpdCBpbnRvDQo+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ ID4gPiArICAgICAgIF8xID0gLkZNQShhLCBiLCBhY2NfMCk7DQo+ID4gPiA+ID4gPiA+ID4gPiAr ICAgICAgIGFjY18xID0gLkZNQShjLCBkLCBfMSk7DQo+ID4gPiA+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiA+ID4gPiArICAgICBoaW5kZXJzIHRoYXQsIGJlY2F1c2UgdGhlbiB0aGUgZmlyc3Qg Rk1BIGRlcGVuZHMgb24gdGhlDQo+ID4gPiByZXN1bHQNCj4gPiA+ID4gPiA+ID4gPiA+IG9mIHBy ZWNlZGluZw0KPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAgaXRlcmF0aW9uLiAgKi8NCj4gPiA+ID4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiBJIGNhbid0IHNlZSB3aGF0IGNhbiBiZSBydW4g aW4gcGFyYWxsZWwgZm9yIHRoZSBmaXJzdCBjYXNlLg0KPiA+ID4gVGhlIC5GTUENCj4gPiA+ID4g PiA+ID4gPiA+IGRlcGVuZHMgb24gdGhlIG11bHRpcGxpY2F0aW9uIGEgKiBiLiAgSWZmIHRoZSB1 YXJjaCBzb21laG93DQo+ID4gPiBkZWNvbXBvc2VzDQo+ID4gPiA+ID4gPiA+ID4gPiAuRk1BIGlu dG8gbXVsdGlwbHkgKyBhZGQgdGhlbiB0aGUgYyAqIGQgbXVsdGlwbHkgY291bGQgcnVuIGluDQo+ ID4gPiBwYXJhbGxlbA0KPiA+ID4gPiA+ID4gPiA+ID4gd2l0aCB0aGUgYSAqIGIgbXVsdGlwbHkg d2hpY2ggX21pZ2h0XyBiZSBhYmxlIHRvIGhpZGUgc29tZSBvZg0KPiB0aGUNCj4gPiA+ID4gPiA+ ID4gPiA+IGxhdGVuY3kgb2YgdGhlIGZ1bGwgLkZNQS4gIExpa2Ugb24geDg2IFplbiBGTUEgaGFz IGEgbGF0ZW5jeQ0KPiBvZiA0DQo+ID4gPiA+ID4gPiA+ID4gPiBjeWNsZXMgYnV0IGEgbXVsdGlw bHkgb25seSAzLiAgQnV0IEkgbmV2ZXIgZ290IGNvbmZpcm1hdGlvbg0KPiBmcm9tDQo+ID4gPiBh bnkNCj4gPiA+ID4gPiA+ID4gPiA+IG9mIHRoZSBDUFUgZGVzaWduZXJzIHRoYXQgLkZNQXMgYXJl IGlzc3VlZCB3aGVuIHRoZSBtdWx0aXBseQ0KPiA+ID4gPiA+ID4gPiA+ID4gb3BlcmFuZHMgYXJl IHJlYWR5IGFuZCB0aGUgYWRkIG9wZXJhbmQgY2FuIGJlIGZvcndhcmRlZC4NCj4gPiA+ID4gPiA+ ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiBJIGFsc28gd29uZGVyIHdoeSB0aGUgbXVsdGlwbGlj YXRpb25zIG9mIHRoZSB0d28tRk1BIHNlcXVlbmNlDQo+ID4gPiA+ID4gPiA+ID4gPiB0aGVuIGNh bm5vdCBiZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lPyAgU28gSSBoYXZlIHNvbWUNCj4gZG91 YnQNCj4gPiA+ID4gPiA+ID4gPiA+IG9mIHRoZSB0aGVvcnkgYWJvdmUuDQo+ID4gPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ID4gPiBUaGUgcGFyYWxsZWwgZXhlY3V0aW9uIGZvciB0aGUgY29kZSBz bmlwcGV0IGFib3ZlIHdhcyB0aGUgb3RoZXINCj4gPiA+ID4gPiA+ID4gPiBpc3N1ZSAocHJldmlv dXNseSBkaXNjdXNzZWQgaGVyZToNCj4gPiA+ID4gPiA+ID4gPiBodHRwczovL2djYy5nbnUub3Jn L3BpcGVybWFpbC9nY2MtcGF0Y2hlcy8yMDIzLQ0KPiBBdWd1c3QvNjI4OTYwLmh0bWwpLg0KPiA+ ID4gPiA+ID4gPiA+IFNvcnJ5IGl0J3MgYSBiaXQgY29uZnVzaW5nIHRvIGluY2x1ZGUgdGhhdCBo ZXJlLCBidXQgdGhlc2UgMg0KPiBmaXhlcw0KPiA+ID4gPiA+ID4gPiA+IG5lZWRzIHRvIGJlIGNv bWJpbmVkIHRvIGF2b2lkIG5ldyByZWdyZXNzaW9ucy4gU2luY2UgY29uc2lkZXJpbmcNCj4gPiA+ ID4gPiA+ID4gPiBGTUEgaW4gZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGggcHJvZHVjZXMgbW9yZSBy ZXN1bHRzIG9mIHdpZHRoPTEsDQo+ID4gPiA+ID4gPiA+ID4gc28gdGhlcmUgd291bGQgYmUgbW9y ZSBsb29wIGRlcGVuZGluZyBGTUEgY2hhaW5zLg0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g PiA+ID4gPiBJZmYgdGhpcyByZWFsbHkgaXMgdGhlIHJlYXNvbiBmb3IgdGhlIHNlcXVlbmNlIHRv IGV4ZWN1dGUgd2l0aA0KPiA+ID4gbG93ZXINCj4gPiA+ID4gPiA+ID4gPiA+IG92ZXJhbGwgbGF0 ZW5jeSBhbmQgd2Ugd2FudCB0byBhdHRhY2sgdGhpcyBvbiBHSU1QTEUgdGhlbiBJDQo+IHRoaW5r DQo+ID4gPiA+ID4gPiA+ID4gPiB3ZSBuZWVkIGEgdGFyZ2V0IGhvb2sgdGVsbGluZyB1cyB0aGlz IGZhY3QgKEkgYWxzbyB3b25kZXIgaWYNCj4gc3VjaA0KPiA+ID4gPiA+ID4gPiA+ID4gYmVoYXZp b3IgY2FuIGJlIG1vZGVsZWQgaW4gdGhlIHNjaGVkdWxlciBwaXBlbGluZSBkZXNjcmlwdGlvbg0K PiBhdA0KPiA+ID4gYWxsPykNCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ IFNvIGl0IHNlZW1zIHRvIG1lIHRoZSBjdXJyZW50IGdldF9yZWFzc29jaWF0aW9uX3dpZHRoDQo+ IGFsZ29yaXRobQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiBpc24ndCBvcHRpbWFsIGluIHRoZSBwcmVz ZW5jZSBvZiBGTUEuIFNvIEkgbW9kaWZpZWQgdGhlDQo+IHBhdGNoIHRvDQo+ID4gPiA+ID4gPiA+ ID4gPiA+IGltcHJvdmUgZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGgsIHJhdGhlciB0aGFuIGNoZWNr IGZvciBjb2RlDQo+ID4gPiA+ID4gPiA+ID4gPiA+IHBhdHRlcm5zLiAoQWx0aG91Z2ggdGhlcmUg Y291bGQgYmUgc29tZSBvdGhlciBjb21wbGljYXRlZA0KPiA+ID4gPiA+ID4gPiA+ID4gPiBmYWN0 b3JzIHNvIHRoZSByZWdyZXNzaW9uIGlzIG1vcmUgb2J2aW91cyB3aGVuIHRoZXJlJ3MNCj4gIm5l c3RlZA0KPiA+ID4gPiA+ID4gPiA+ID4gPiBGTUEiLiBCdXQgd2l0aCB0aGlzIHBhdGNoIHRoYXQg c2hvdWxkIGJlIGF2b2lkZWQgb3IgcmVkdWNlZC4pDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiA+ID4gPiA+IFdpdGggdGhpcyBwYXRjaCA1MDgubmFtZF9yIDEtY29weSBydW4gaGFz IDclIGltcHJvdmVtZW50IG9uDQo+ID4gPiA+ID4gPiA+ID4gPiA+IEFtcGVyZTEsIG9uIEludGVs IFhlb24gdGhlcmUncyBhYm91dCAzJS4gV2hpbGUgSSdtIHN0aWxsDQo+ID4gPiA+ID4gPiA+ID4g PiA+IGNvbGxlY3RpbmcgZGF0YSBvbiBvdGhlciBDUFVzLCBJJ2QgbGlrZSB0byBrbm93IGhvdyBk byB5b3UNCj4gPiA+ID4gPiA+ID4gPiA+ID4gdGhpbmsgb2YgdGhpcy4NCj4gPiA+ID4gPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gQWJvdXQgY2hhbmdlcyBpbiB0aGUgcGF0Y2g6DQo+ ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+IDEuIFdoZW4gdGhlIG9wIGxp c3QgZm9ybXMgYSBjb21wbGV0ZSBGTUEgY2hhaW4sIHRyeSB0bw0KPiBzZWFyY2gNCj4gPiA+ID4g PiA+ID4gPiA+ID4gZm9yIGEgc21hbGxlciB3aWR0aCBjb25zaWRlcmluZyB0aGUgYmVuZWZpdCBv ZiB1c2luZyBGTUEuDQo+IFdpdGgNCj4gPiA+ID4gPiA+ID4gPiA+ID4gYSBzbWFsbGVyIHdpZHRo LCB0aGUgaW5jcmVtZW50IG9mIGNvZGUgc2l6ZSBpcyBzbWFsbGVyIHdoZW4NCj4gPiA+ID4gPiA+ ID4gPiA+ID4gYnJlYWtpbmcgdGhlIGNoYWluLg0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ID4gPiA+IEJ1dCB0aGlzIGlzIGFsbCBoaWdobHkgdGFyZ2V0IHNwZWNpZmljIChjb2RlIHNp emUgZXZlbiBtb3JlDQo+IHNvKS4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g PiBIb3cgSSB1bmRlcnN0YW5kIHlvdXIgYXBwcm9hY2ggdG8gZml4aW5nIHRoZSBpc3N1ZSBsZWFk cyBtZSB0bw0KPiA+ID4gPiA+ID4gPiA+ID4gdGhlIHN1Z2dlc3Rpb24gdG8gcHJpb3JpdGl6ZSBw YXJhbGxlbCByZXdyaXRpbmcsIHRodXMgYWx0ZXINCj4gPiA+ID4gPiA+ID4gcmFua19vcHNfZm9y X2ZtYSwNCj4gPiA+ID4gPiA+ID4gPiA+IHRha2luZyB0aGUgcmVhc3NvYyB3aWR0aCBpbnRvIGFj Y291bnQgKHRoZSBjb21wdXRlZCB3aWR0aA0KPiBzaG91bGQNCj4gPiA+IGJlDQo+ID4gPiA+ID4g PiA+ID4gPiB1bmNoYW5nZWQgZnJvbSByYW5rX29wc19mb3JfZm1hKSBpbnN0ZWFkIG9mICJmaXhp bmcgdXAiIHRoZQ0KPiA+ID4gcGFyYWxsZWwNCj4gPiA+ID4gPiA+ID4gPiA+IHJld3JpdGluZyBv ZiBGTUFzICh3ZWxsLCB0aGV5IGFyZSBub3QgeWV0IGZvcm1lZCBvZiBjb3Vyc2UpLg0KPiA+ID4g PiA+ID4gPiA+ID4gZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGggaGFzICdnZXRfcmVxdWlyZWRfY3lj bGVzJywgdGhlIGFib3ZlDQo+ID4gPiB0aGVvcnkNCj4gPiA+ID4gPiA+ID4gPiA+IGNvdWxkIGJl IHZlcmlmaWVkIHdpdGggYSB2ZXJ5IHNpbXBsZSB0b3kgcGlwZWxpbmUgbW9kZWwuICBXZSdkDQo+ ID4gPiBoYXZlDQo+ID4gPiA+ID4gPiA+ID4gPiB0byBhc2sgdGhlIHRhcmdldCBmb3IgdGhlIHJl YXNzb2Mgd2lkdGggZm9yIE1VTFRfRVhQUnMgYXMgd2VsbA0KPiAob3INCj4gPiA+ID4gPiBtYXli ZQ0KPiA+ID4gPiA+ID4gPiA+ID4gZXZlbiBGTUFfRVhQUnMpLg0KPiA+ID4gPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+ID4gPiA+IFRha2luZyB0aGUgd2lkdGggb2YgRk1BcyBpbnRvIGFjY291bnQg d2hlbiBjb21wdXRpbmcgdGhlDQo+IHJlYXNzb2MNCj4gPiA+IHdpZHRoDQo+ID4gPiA+ID4gPiA+ ID4gPiBtaWdodCBiZSBhbm90aGVyIHdheSB0byBhdHRhY2sgdGhpcy4NCj4gPiA+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gPiA+IFByZXZpb3VzbHkgSSB0cmllZCB0byBzb2x2ZSB0aGlzIGdlbmVy YWxseSwgb24gdGhlIGFzc3VtcHRpb24NCj4gdGhhdA0KPiA+ID4gPiA+ID4gPiA+IEZNQSAoc21h bGxlciBjb2RlIHNpemUpIGlzIHByZWZlcnJlZC4gTm93IEkgYWdyZWUgaXQncyBkaWZmaWN1bHQN Cj4gPiA+ID4gPiA+ID4gPiBzaW5jZTogMSkgQXMgeW91IG1lbnRpb25lZCwgdGhlIGxhdGVuY3kg b2YgRk1BLCBGTVVMIGFuZCBGQUREDQo+IGNhbg0KPiA+ID4gPiA+ID4gPiA+IGJlIGRpZmZlcmVu dC4gMikgRnJvbSBteSB0ZXN0IHJlc3VsdCBvbiBkaWZmZXJlbnQgbWFjaGluZXMgd2UNCj4gPiA+ ID4gPiA+ID4gPiBoYXZlLCBpdCBzZWVtcyBzaW1wbHkgYWRkaW5nIHRoZSBjeWNsZXMgdG9nZXRo ZXIgaXMgbm90IGEgZ29vZA0KPiB3YXkNCj4gPiA+ID4gPiA+ID4gPiB0byBlc3RpbWF0ZSB0aGUg bGF0ZW5jeSBvZiBjb25zZWN1dGl2ZSBGTUEuDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ ID4gPiBJIHRoaW5rIGFuIGVhc2llciB3YXkgdG8gZml4IHRoaXMgaXMgdG8gYWRkIGEgcGFyYW1l dGVyIHRvDQo+IHN1Z2dlc3QNCj4gPiA+ID4gPiA+ID4gPiB0aGUgbGVuZ3RoIG9mIGNvbXBsZXRl IEZNQSBjaGFpbiB0byBrZWVwLiAoSXQgY2FuIGJlIHNldCBieQ0KPiB0YXJnZXQNCj4gPiA+ID4g PiA+ID4gPiBzcGVjaWZpYyB0dW5pbmcgdGhlbi4pIEFuZCB3ZSBjYW4gYnJlYWsgbG9uZ2VyIEZN QSBjaGFpbnMgZm9yDQo+ID4gPiA+ID4gPiA+ID4gYmV0dGVyIHBhcmFsbGVsaXNtLiBBdHRhY2hl ZCBpcyB0aGUgbmV3IGltcGxlbWVudGF0aW9uLiBXaXRoDQo+ID4gPiA+ID4gPiA+ID4gbWF4LWZt YS1jaGFpbi1sZW49OCwgdGhlcmUncyBhYm91dCA3JSBpbXByb3ZlbWVudCBpbiBzcGVjMjAxNw0K PiA+ID4gPiA+ID4gPiA+IDUwOC5uYW1kX3Igb24gYW1wZXJlMSwgYW5kIHRoZSBvdmVyYWxsIGlt cHJvdmVtZW50IG9uIGZwcmF0ZSBpcw0KPiA+ID4gPiA+ID4gPiA+IGFib3V0IDElLg0KPiA+ID4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gU2luY2UgdGhlcmUncyBjb2RlIGluIHJhbmtfb3Bz X2Zvcl9mbWEgdG8gaWRlbnRpZnkgTVVMVF9FWFBScw0KPiBmcm9tDQo+ID4gPiA+ID4gPiA+ID4g b3RoZXJzLCBJIGxlZnQgaXQgYmVmb3JlIGdldF9yZWFzc29jaWF0aW9uX3dpZHRoIHNvIHRoZSBu dW1iZXINCj4gb2YNCj4gPiA+ID4gPiA+ID4gPiBNVUxUX0VYUFJzIGNhbiBiZSB1c2VkLg0KPiA+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBTb3JyeSBhZ2FpbiBmb3IgdGhlIGRlbGF5IGluIHJl cGx5aW5nLg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiArICAvKiBDaGVjayBpZiBrZWVw aW5nIGNvbXBsZXRlIEZNQSBjaGFpbnMgaXMgcHJlZmVycmVkLiAgKi8NCj4gPiA+ID4gPiA+ID4g KyAgaWYgKHdpZHRoID4gMSAmJiBtdWx0X251bSA+PSAyICYmIHBhcmFtX21heF9mbWFfY2hhaW5f bGVuKQ0KPiA+ID4gPiA+ID4gPiArICAgIHsNCj4gPiA+ID4gPiA+ID4gKyAgICAgIC8qIG51bV9m bWFfY2hhaW4gKyAobnVtX2ZtYV9jaGFpbiAtIDEpID49IG51bV9wbHVzIC4gICovDQo+ID4gPiA+ ID4gPiA+ICsgICAgICBpbnQgbnVtX290aGVycyA9IG9wc19udW0gLSBtdWx0X251bTsNCj4gPiA+ ID4gPiA+ID4gKyAgICAgIGludCBudW1fZm1hX2NoYWluID0gQ0VJTCAobnVtX290aGVycyArIDEs IDIpOw0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsgICAgICBpZiAobnVtX2ZtYV9j aGFpbiA8IHdpZHRoDQo+ID4gPiA+ID4gPiA+ICsgICAgICAgICAmJiBDRUlMIChtdWx0X251bSwg bnVtX2ZtYV9jaGFpbikgPD0NCj4gcGFyYW1fbWF4X2ZtYV9jaGFpbl9sZW4pDQo+ID4gPiA+ID4g PiA+ICsgICAgICAgd2lkdGggPSBudW1fZm1hX2NoYWluOw0KPiA+ID4gPiA+ID4gPiArICAgIH0N Cj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gc28gaGVyZSAnbXVsdF9udW0nIHNlcnZlcyBh cyBhIGhldXJpc3RpY2FsIHZhbHVlIGhvdyBtYW55DQo+ID4gPiA+ID4gPiA+IEZNQXMgd2UgY291 bGQgYnVpbGQuICBJZiB0aGF0IHdlcmUgY2xvc2UgdG8gb3BzX251bSAtIDEgdGhlbg0KPiA+ID4g PiA+ID4gPiB3ZSdkIGhhdmUgYSBjaGFpbiBvZiBGTUFzLiAgTm90IHN1cmUgaG93IHlvdSBnZXQg YXQNCj4gPiA+ID4gPiA+ID4gbnVtX290aGVycyAvIDIgaGVyZS4gIE1heWJlIHdlIG5lZWQgdG8g ZWxhYm9yYXRlIG9uIHdoYXQgYW4NCj4gPiA+ID4gPiA+ID4gRk1BIGNoYWluIGlzPyAgSSB0aG91 Z2h0IGl0IGlzIEZNQSAoRk1BIChGTUEgKC4uLiwgYiwgYyksIGQsIGUpLCBmLA0KPiBnKQ0KPiA+ ID4gPiA+ID4gPiB3aGVyZSBlYWNoIChiLGMpIHBhaXIgaXMgcmVhbGx5IGp1c3Qgb25lIG9wZXJh bmQgaW4gdGhlIG9wcyBhcnJheSwNCj4gPiA+ID4gPiA+ID4gb25lIG9mIHRoZSAnbXVsdCdzLiAg VGh1cyBhIEZNQSBjaGFpbiBpcyBfbm90Xw0KPiA+ID4gPiA+ID4gPiBGTUEgKGEsIGIsIGMpICsg Rk1BIChkLCBlLCBmKSArIEZNQSAoLi4uKSArIC4uLiwgcmlnaHQ/DQo+ID4gPiA+ID4gPg0KPiA+ ID4gPiA+ID4gVGhlICJGTUEgY2hhaW4iIGhlcmUgcmVmZXJzIHRvIGNvbnNlY3V0aXZlIEZNQXMs IGVhY2ggdGFraW5nDQo+ID4gPiA+ID4gPiBUaGUgcHJldmlvdXMgb25lJ3MgcmVzdWx0IGFzIHRo ZSB0aGlyZCBvcGVyYXRvciwgaS5lLg0KPiA+ID4gPiA+ID4gLi4uIEZNQShlLCBmLCBGTUEoYywg ZCwgRk1BIChhLCBiLCByKSkpLi4uIC4gU28gb3JpZ2luYWwgb3ANCj4gPiA+ID4gPiA+IGxpc3Qg bG9va3MgbGlrZSAiciArIGEgKiBiICsgYyAqIGQgKyBlICogZiArIC4uLiIuIFRoZXNlIEZNQXMN Cj4gPiA+ID4gPiA+IHdpbGwgZW5kIHVwIHVzaW5nIHRoZSBzYW1lIGFjY3VtdWxhdGUgcmVnaXN0 ZXIuDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gV2hlbiBudW1fb3RoZXJzPTIgb3IgMywgdGhl cmUgY2FuIGJlIDIgY29tcGxldGUgY2hhaW5zLCBlLmcuDQo+ID4gPiA+ID4gPiAgICAgICAgIEZN QSAoZCwgZSwgRk1BIChhLCBiLCBjKSkgKyBGTUEgKGYsIGcsIGgpDQo+ID4gPiA+ID4gPiBvcg0K PiA+ID4gPiA+ID4gICAgICAgICBGTUEgKGQsIGUsIEZNQSAoYSwgYiwgYykpICsgRk1BIChmLCBn LCBoKSArIGkgLg0KPiA+ID4gPiA+ID4gQW5kIHNvIG9uLCB0aGF0J3Mgd2hlcmUgdGhlICJDRUlM IChudW1fb3RoZXJzICsgMSwgMikiIGNvbWVzIGZyb20uDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gPiBGb3JtaW5nIGFuIEZNQSBjaGFpbiBlZmZlY3RpdmVseSByZWR1 Y2VzIHRoZSByZWFzc29jaWF0aW9uIHdpZHRoDQo+ID4gPiA+ID4gPiA+IG9mIHRoZSBwYXJ0aWNp cGF0aW5nIG11bHRpcGxpZXMuICBJZiB3ZSB3ZXJlIG5vdCB0byBmb3JtIEZNQXMgYWxsDQo+ID4g PiA+ID4gPiA+IHRoZSBtdWx0aXBsaWVzIGNvdWxkIGV4ZWN1dGUgaW4gcGFyYWxsZWwuDQo+ID4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IFNvIHdoYXQgZG9lcyB0aGUgYWJvdmUgZG8sIGluIHRl cm1zIG9mIGFkanVzdGluZyB0aGUgcmVhc3NvY2lhdGlvbg0KPiA+ID4gPiA+ID4gPiB3aWR0aCBm b3IgdGhlIF9hZGRzXywgYW5kIHdoYXQncyB0aGUgcmlwcGxlLWRvd24gZWZmZWN0IG9uIGxhdGVy DQo+ID4gPiA+ID4gPiA+IEZNQSBmb3JtaW5nPw0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+IFRoZSBhYm92ZSBjb2RlIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBzdWNo IEZNQSBjaGFpbnMgaW4gdGhlIG9wDQo+ID4gPiA+ID4gPiBsaXN0LiBBbmQgaWYgdGhlIGxlbmd0 aCBvZiBlYWNoIGNoYWluIGRvZXNuJ3QgZXhjZWVkDQo+ID4gPiA+ID4gPiBwYXJhbV9tYXhfZm1h X2NoYWluX2xlbiwgdGhlbiB3aWR0aCBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiBjaGFpbnMsDQo+ ID4gPiA+ID4gPiBzbyB3ZSB3b24ndCBicmVhayB0aGVtIChiZWNhdXNlIHJld3JpdGVfZXhwcl90 cmVlX3BhcmFsbGVsIGhhbmRsZXMNCj4gPiA+ID4gPiA+IHRoaXMgd2VsbCkuDQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gPiBUaGUgY2hhbmdlIHN0aWxsIGZlZWxzIGxpa2Ugd2hhY2stYS1tb2xl IHBsYXlpbmcgcmF0aGVyIHRoYW4NCj4gPiA+IHVuZGVyc3RhbmRpbmcNCj4gPiA+ID4gPiA+ID4g dGhlIGZ1bmRhbWVudGFsIGlzc3VlIG9uIHRoZSB0YXJnZXRzLg0KPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+IEkgdGhpbmsgdGhlIGNvbXBsZXhpdHkgaXMgaW4gaG93IHRoZSBpbnN0cnVjdGlvbnMg YXJlIHBpcGVkLg0KPiA+ID4gPiA+ID4gU29tZSBBcm0gQ1BVcyBzdWNoIGFzIE5lb3ZlcnNlIFYy IHN1cHBvcnRzICJsYXRlLWZvcndhcmRpbmciOg0KPiA+ID4gPiA+ID4gIkZQIG11bHRpcGx5LWFj Y3VtdWxhdGUgcGlwZWxpbmVzIHN1cHBvcnQgbGF0ZS1mb3J3YXJkaW5nIG9mDQo+ID4gPiA+ID4g PiBhY2N1bXVsYXRlIG9wZXJhbmRzIGZyb20gc2ltaWxhciDOvE9QcywgYWxsb3dpbmcgYSB0eXBp Y2FsDQo+ID4gPiA+ID4gPiBzZXF1ZW5jZSBvZiBtdWx0aXBseS1hY2N1bXVsYXRlIM68T1BzIHRv IGlzc3VlIG9uZSBldmVyeSBODQo+ID4gPiA+ID4gPiBjeWNsZXMiLiAoIk4iIGlzIHNtYWxsZXIg dGhhbiB0aGUgbGF0ZW5jeSBvZiBhIHNpbmdsZSBGTUENCj4gPiA+ID4gPiA+IGluc3RydWN0aW9u LikgU28ga2VlcGluZyBzdWNoIEZNQSBjaGFpbnMgY2FuIHV0aWxpemUgc3VjaA0KPiA+ID4gPiA+ ID4gZmVhdHVyZSBhbmQgdXNlcyBsZXNzIEZQIHVuaXRzLiBJIGd1ZXNzIHRoZSBjYXNlIGlzIHNp bWlsYXIgb24NCj4gPiA+ID4gPiA+IHNvbWUgbGF0ZSBYODYgQ1BVcy4NCj4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiBJZiB3ZSB0cnkgdG8gY29tcHV0ZSB0aGUgbWluaW11bSBjaXJjbGVzIG9mIGVh Y2ggb3B0aW9uLCBJIHRoaW5rDQo+ID4gPiA+ID4gPiBhdCBsZWFzdCB3ZSdsbCBuZWVkIHRvIGtu b3cgd2hldGhlciB0aGUgdGFyZ2V0IGhhcyBzaW1pbGFyDQo+ID4gPiA+ID4gPiBmZWF0dXJlLCBh bmQgdGhlIGxhdGVuY3kgb2YgZWFjaCB1b3AuIFdoaWxlIHVzaW5nIGFuDQo+ID4gPiA+ID4gPiBl eHBlcmllbnRpYWwgbGVuZ3RoIG9mIGJlbmVmaWNpYWwgRk1BIGNoYWluIGNvdWxkIGJlIGEgc2hv cnRjdXQuDQo+ID4gPiA+ID4gPiAoTWF5YmUgYWxsb3dpbmcgZGlmZmVyZW50IGxlbmd0aHMgZm9y IGRpZmZlcmVudCBkYXRhIHdpZHRocyBpcw0KPiA+ID4gPiA+ID4gYmV0dGVyLikNCj4gPiA+ID4g Pg0KPiA+ID4gPiA+IEhtLiAgU28gZXZlbiB3aGVuIHdlIGNhbiBsYXRlLWZvcndhcmQgaW4gYW4g Rk1BIGNoYWluDQo+ID4gPiA+ID4gaW5jcmVhc2luZyB0aGUgd2lkdGggc2hvdWxkIHR5cGljYWxs eSBiZSBzdGlsbCBiZXR0ZXI/DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBfMSA9IEZNQSAoXzIgKiBf MyArIF80KTsNCj4gPiA+ID4gPiBfNSA9IEZNQSAoXzYgKiBfNyArIF8xKTsNCj4gPiA+ID4gPg0K PiA+ID4gPiA+IHNheSB3aXRoIGxhdGUtZm9yd2FyZGluZyB3ZSBjYW4gaGlkZSB0aGUgbGF0ZW5j eSBvZiB0aGUgXzYgKiBfNw0KPiA+ID4gPiA+IG11bHRpcGx5IGFuZCB0aGUgb3ZlcmFsbCBsYXRl bmN5IG9mIHRoZSB0d28gRk1BcyBhYm92ZSBiZWNvbWUNCj4gPiA+ID4gPiBsYXQgKEZNQSkgKyBs YXQgKEFERCkgaW4gdGhlIGlkZWFsIGNhc2UuICBBbHRlcm5hdGl2ZWx5IHdlIGRvDQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiBfMSA9IEZNQSAoXzIgKiBfIDMgKyBfNCk7DQo+ID4gPiA+ID4gXzggPSBf NiAqIF8gNzsNCj4gPiA+ID4gPiBfNSA9IF8xICsgXzg7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiB3 aGVyZSBpZiB0aGUgRk1BIGFuZCB0aGUgbXVsdGlwbHkgY2FuIGV4ZWN1dGUgaW4gcGFyYWxsZWwN Cj4gPiA+ID4gPiAod2UgaGF2ZSB0d28gRk1BIHBpcGVzKSB0aGUgbGF0ZW5jeSB3b3VsZCBiZSBs YXQgKEZNQSkgKyBsYXQgKEFERCkuDQo+ID4gPiA+ID4gQnV0IHdoZW4gd2Ugb25seSBoYXZlIGEg c2luZ2xlIHBpcGVsaW5lIGNhcGFibGUgb2YNCj4gPiA+ID4gPiBGTUEgb3IgbXVsdGlwbGllcyB0 aGVuIGl0IGlzIGF0IGxlYXN0IE1JTiAobGF0IChGTUEpICsgMSwgbGF0IChNVUwpICsNCj4gMSkN Cj4gPiA+ID4gPiArIGxhdCAoQUREKSwgaXQgZGVwZW5kcyBvbiBsdWNrIHdoZXRoZXIgdGhlIEZN QSBvciB0aGUgTVVMIGlzDQo+ID4gPiA+ID4gaXNzdWVkIGZpcnN0IHRoZXJlLg0KPiA+ID4gPiA+ DQo+ID4gPiA+ID4gU28gaWYgbGF0ZS1mb3J3YXJkIHdvcmtzIHJlYWxseSB3ZWxsIGFuZCB0aGUg YWRkIHBhcnQgb2YgdGhlIEZNQQ0KPiA+ID4gPiA+IGhhcyB2ZXJ5IGxvdyBsYXRlbmN5IGNvbXBh cmVkIHRvIHRoZSBtdWx0aXBsaWNhdGlvbiBwYXJ0IGhhdmluZw0KPiA+ID4gPiA+IGEgc21hbGxl ciByZWFzc29jIHdpZHRoIHNob3VsZCBwYXkgb2ZmIGhlcmUgYW5kIHdlIG1pZ2h0IGJlDQo+ID4g PiA+ID4gYWJsZSB0byBzaW1wbHkgY29udHJvbCB0aGlzIHZpYSB0aGUgZXhpc3RpbmcgdGFyZ2V0 IGhvb2s/DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJJ20gbm90IGF3YXJlIG9mIHg4NiBDUFVzIGhh dmluZyBsYXRlLWZvcndhcmRpbmcgY2FwYWJpbGl0aWVzDQo+ID4gPiA+ID4gYnV0IHVzdWFsbHkg dGhlIGxhdGVuY3kgb2YgbXVsdGlwbGljYXRpb24gYW5kIEZNQSBpcyB2ZXJ5IHNpbWlsYXINCj4g PiA+ID4gPiBhbmQgb25lIGNhbiBpc3N1ZSB0d28gRk1BcyBhbmQgcG9zc2libHkgbW9yZSBBRERz IGluIHBhcmFsbGVsLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gQXMgc2FpZCBJIHRoaW5rIHRoaXMg ZGV0YWlsIChsYXRlLWZvcndhcmQpIHNob3VsZCBtYXliZSByZWZsZWN0ZWQNCj4gPiA+ID4gPiBp bnRvIGdldF9yZXF1aXJlZF9jeWNsZXMsIHBvc3NpYmx5IGd1aWRlZCBieSBhIGRpZmZlcmVudA0K PiA+ID4gPiA+IHRhcmdldG0uc2NoZWQucmVhc3NvY2lhdGlvbl93aWR0aCBmb3IgTVVMVF9FWFBS IHZzIFBMVVNfRVhQUj8NCj4gPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiBUbyBteSB1bmRlcnN0 YW5kaW5nLCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgdGFyZ2V0IGZ1bGx5DQo+ID4gPiA+ IHBpcGVsaW5lcyBGTUEgaW5zdHJ1Y3Rpb25zLCBzbyB0aGUgTVVMVCBwYXJ0IGNhbiBzdGFydCBm aXJzdCBpZg0KPiA+ID4gPiBpdHMgb3BlcmFuZHMgYXJlIHJlYWR5LiBXaGlsZSB0YXJnZXRtLnNj aGVkLnJlYXNzb2NpYXRpb25fd2lkdGgNCj4gPiA+ID4gcmVmbGVjdHMgdGhlIG51bWJlciBvZiBw aXBlcyBmb3Igc29tZSBvcGVyYXRpb24sIHNvIGl0IGNhbiBndWlkZQ0KPiA+ID4gPiBnZXRfcmVx dWlyZWRfY3ljbGVzIGZvciBhIHNlcXVlbmNlIG9mIGlkZW50aWNhbCBvcGVyYXRpb25zDQo+ID4g PiA+IChlLmcuIEEgKiBCICogQyAqIEQgb3IgQSArIEIgKyBDICsgRCkuIFNpbmNlIHRoZSBwcm9i bGVtIGluDQo+ID4gPiA+IHRoaXMgY2FzZSBpcyBub3QgdGhlIG51bWJlciBvZiBwaXBlcyBmb3Ig Rk1BLCBJIHRoaW5rIGFub3RoZXINCj4gPiA+ID4gaW5kaWNhdG9yIG1heWJlIGJldHRlci4NCj4g PiA+ID4NCj4gPiA+ID4gKEN1cnJlbnRseSB0aGUgZm1hX3JlYXNzb2Nfd2lkdGggZm9yIEFBcmNo NjQgaXMgdG8gY29udHJvbA0KPiA+ID4gPiB3aGV0aGVyIHJlYXNzb2NpYXRpb24gb24gRkFERCBp cyBPSy4gVGhpcyB3b3JrYXJvdW5kIGRvZXNuJ3QNCj4gPiA+ID4gd29yayB3ZWxsIG9uIHNvbWUg Y2FzZXMsIGZvciBleGFtcGxlIGl0IHR1cm5zIGRvd24gcmVhc3NvY2lhdGlvbg0KPiA+ID4gPiBl dmVuIHdoZW4gdGhlcmUncyBubyBGTUEgYXQgYWxsLiBTbyBJIHRoaW5rIHdlJ2QgYmV0dGVyIG5v dA0KPiA+ID4gPiBmb2xsb3cgdGhlIHNjaGVtYS4pDQo+ID4gPiA+DQo+ID4gPiA+IEF0dGFjaGVk IGlzIGEgbmV3IHZlcnNpb24gb2YgdGhlIHBhdGNoIHdpdGggYSBmbGFnIHRvIGluZGljYXRlDQo+ ID4gPiA+IHdoZXRoZXIgRk1BIGlzIGZ1bGx5IHBpcGVsaW5lZCwgYW5kOiAxKSBsYXQgKE1VTCkg Pj0gbGF0IChBREQpOw0KPiA+ID4gPiAyKSBzeW1tZXRyaWMgdW5pdHMgYXJlIHVzZWQgb3IgRk1V TC9GQUREL0ZNQS4gT3RoZXJ3aXNlIHRoZQ0KPiA+ID4gPiBwYXRjaCBtYXkgbm90IGJlIGJlbmVm aWNpYWwuDQo+ID4gPiA+DQo+ID4gPiA+IEl0IHRyaWVzIHRvIGNhbGN1bGF0ZSB0aGUgbGF0ZW5j aWVzIGluY2x1ZGluZyBNVUxUX0VYUFJzLiBTaW5jZQ0KPiA+ID4gPiB0aGUgY29kZSBpcyBkaWZm ZXJlbnQgd2l0aCB0aGUgY3VycmVudCBjb2RlICh0aGUgcXVpY2stc2VhcmNoDQo+ID4gPiA+IHBh cnQpLCBJIGhhdmVuJ3QgaW5jbHVkZWQgaXQgaW5zaWRlIGdldF9yZXF1aXJlZF9jeWNsZXMuDQo+ ID4gPg0KPiA+ID4gKzsgSWYgdGhlIGZsYWcgJ2Z1bGx5LXBpcGVsaW5lZC1mbWEnIGlzIHNldCwg cmVhc3NvY2lhdGlvbiB0YWtlcyBpbnRvDQo+IGFjY291bnQNCj4gPiA+ICs7IHRoZSBiZW5pZml0 IG9mIHBhcmFsbGVsaXppbmcgRk1BJ3MgbXVsdGlwbHkgcGFydCBhbmQgYWRkaXRpb24gcGFydC4N Cj4gPiA+ICtmZnVsbHktcGlwZWxpbmVkLWZtYQ0KPiA+ID4gK0NvbW1vbiBWYXIoZmxhZ19mdWxs eV9waXBlbGluZWRfZm1hKQ0KPiA+ID4gK0Fzc3VtZSB0aGUgdGFyZ2V0IGZ1bGx5IHBpcGVsaW5l cyBGTUEgaW5zdHJ1Y3Rpb24sIGFuZCBzeW1tZXRyaWMgdW5pdHMNCj4gYXJlDQo+ID4gPiB1c2Vk DQo+ID4gPiArZm9yIEZNVUwvRkFERC9GTUEuDQo+ID4gPg0KPiA+ID4gcGxlYXNlIHVzZSBhIC0t cGFyYW0gZm9yIG5vdywgSSB0aGluayB0YXJnZXRzIG1pZ2h0IHdhbnQgdG8gc2V0IHRoaXMgYmFz ZWQNCj4gPiA+IG9uIGFjdGl2ZSBjb3JlIHR1bmluZy4NCj4gPiA+DQo+ID4gPiArLyogR2l2ZW4g dGhhdCB0aGUgdGFyZ2V0IGZ1bGx5IHBpcGVsaW5lcyBGTUEgaW5zdHJ1Y3Rpb25zLCByZXR1cm4g bGF0ZW5jeQ0KPiBvZg0KPiA+ID4gKyAgIE1VTFRfRVhQUnMgdGhhdCBjYW4ndCBiZSBoaWRlZCBi eSBGTUEuICBXSURUSCBpcyB0aGUgbnVtYmVyIG9mIHBpcGVzLg0KPiAqLw0KPiA+ID4gKw0KPiA+ ID4NCj4gPiA+IHJldHVybiB0aGUgbGF0ZW5jeSAuLiBjYW4ndCBiZSBoaWRkZW4gYnkgdGhlIEZN QQ0KPiA+ID4NCj4gPiA+IEZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzIGl0IHNob3VsZCBiZSBz dGF0ZWQgdGhhdCBtdWx0X251bSA8PSBvcHNfbnVtDQo+ID4gPg0KPiA+ID4gKyAgLyogSWYgdGhl IHRhcmdldCBmdWxseSBwaXBlbGluZXMgRk1BIGluc3RydWN0aW9uLCB0aGUgbXVsdGlwbHkgcGFy dCBjYW4NCj4gPiA+IHN0YXJ0DQo+ID4gPg0KPiA+ID4gaW5zdHJ1Y3Rpb25zDQo+ID4gPg0KPiA+ ID4gKyAgICAgZmlyc3QgaWYgaXRzIG9wZXJhbmRzIGFyZSByZWFkeS4gIEFzc3VtaW5nIHN5bW1l dHJpYyBwaXBlcyBhcmUgdXNlZA0KPiBmb3INCj4gPiA+DQo+ID4gPiBzL2ZpcnN0L2FscmVhZHkv DQo+ID4gPg0KPiA+ID4gKyAgICAgRk1VTC9GQUREL0ZNQSwgdGhlbiBmb3IgYSBzZXF1ZW5jZSBv ZiBGTUEgbGlrZToNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgXzggPSAuRk1BIChfMiwgXzMsIF8x KTsNCj4gPiA+ICsgICAgICAgXzkgPSAuRk1BIChfNSwgXzQsIF84KTsNCj4gPiA+ICsgICAgICAg XzEwID0gLkZNQSAoXzcsIF82LCBfOSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAsIGlmIHdpZHRo PTEsIHRoZSBsYXRlbmN5IGlzIGxhdGVuY3koTVVMVCkgKyBsYXRlbmN5KEFERCkqMy4NCj4gPiA+ ICsgICAgIFdoaWxlIHdpdGggd2lkdGg9MjoNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgXzggPSBf NCAqIF81Ow0KPiA+ID4gKyAgICAgICBfOSA9IC5GTUEgKF8yLCBfMywgXzEpOw0KPiA+ID4gKyAg ICAgICBfMTAgPSAuRk1BIChfNiwgXzcsIF84KTsNCj4gPiA+ICsgICAgICAgXzExID0gXzkgKyBf MTA7DQo+ID4gPiArDQo+ID4gPiArICAgICAsIGl0IGlzIGxhdGVuY3koTVVMVCkqMiArIGxhdGVu Y3koQUREKSoyLiAgQXNzdW1pbmcgbGF0ZW5jeShNVUxUKSA8PQ0KPiA+ID4gKyAgICAgbGF0ZW5j eShBREQpLCB0aGUgcHJldmlvdXMgb25lIGlzIHByZWZlcnJlZC4NCj4gPiA+DQo+ID4gPiBsYXRl bmN5IChNVUxUKSA+PSBsYXRlbmN5IChBREQpPw0KPiA+ID4NCj4gPiA+ICIuLiB0aGUgZmlyc3Qg dmFyaWFudCBpcyBwcmVmZXJyZWQuIg0KPiA+ID4NCj4gPiA+ICsNCj4gPiA+ICsgICAgIEZpbmQg b3V0IGlmIHdlIGNhbiBnZXQgYSBzbWFsbGVyIHdpZHRoIGNvbnNpZGVyaW5nIEZNQS4gICovDQo+ ID4NCj4gPiBDb3JyZWN0ZWQgdGhlc2UgZXJyb3JzLiBUaGFuayB5b3UgZm9yIHRoZSBjb3JyZWN0 aW9ucy4NCj4gPg0KPiA+ID4gKyAgICAgIC8qIFdoZW4gZmxhZ19mdWxseV9waXBlbGluZWRfZm1h IGlzIHNldCwgYXNzdW1lcyBzeW1tZXRyaWMgcGlwZXMNCj4gYXJlDQo+ID4gPiB1c2VkDQo+ID4g PiArICAgICAgICBmb3IgRk1VTC9GQUREL0ZNQS4gICovDQo+ID4gPiArICAgICAgaW50IGxhdF9t dWwgPSBnZXRfbXVsdF9sYXRlbmN5X2NvbnNpZGVyX2ZtYSAob3BzX251bSwgbXVsdF9udW0sDQo+ IHdpZHRoKTsNCj4gPiA+DQo+ID4gPiB3aGF0IGRvZXMgInN5bW1ldHJpYyBwaXBlcyIgYWN0dWFs bHkgbWVhbj8gIEZvciB4ODYgWmVuMyB3ZSBoYXZlDQo+ID4gPiB0d28gRk1BIHBpcGVzICh0aGF0 IGNhbiBhbHNvIGRvIEFERCBhbmQgTVVMKSBhbmQgb25lIHBpcGUgdGhhdCBjYW4NCj4gPiA+IGRv IEFERC4gIElzIHRoYXQgdGhlbiBub24tc3ltbWV0cmljIGJlY2F1c2Ugd2UgY2FuIGlzc3VlIG1v cmUgYWRkcw0KPiA+ID4gaW4gcGFyYWxsZWwgdGhhbiBGTUEvTVVMPw0KPiANCj4gYnR3LCBJIGRv dWJsZS1jaGVja2VkIGFuZCBaZW4zLzQgaGF2ZSB0d28gcGlwZXMgZm9yIEZNVUwvRk1BIGFuZCB0 d28NCj4gc2VwYXJhdGUgcGlwZXMgZm9yIEZBREQsIHRoZSBGTVVML0ZNQSBwaXBlcyBjYW5ub3Qg ZG8gRkFERC4gIEZBREQNCj4gaGFzIGEgbGF0ZW5jeSBvZiAzIGN5Y2xlcyB3aGlsZSBGTVVML0ZN QSBoYXMgYSBsYXRlbmN5IG9mIDQgY3ljbGVzLg0KPiANCj4gSSdkIHNheSBaZW4gaXMgdGhlbiBu b3QgInN5bW1ldHJpYyIgYXMgaW4geW91ciBkZWZpbml0aW9uPyAgSSBkbyB3b25kZXINCj4gd2hh dCBwYXJ0IG9mIHRoZSBwaXBlbGluZSBjaGFyYWN0ZXJpc3RpYyBjb3VsZCBiZSBkZXJpdmVkIGZy b20gdGhlDQo+IHJlYXNzb2Nfd2lkdGggdGFyZ2V0IGhvb2sgKG1heWJlIHRoZSBudW1iZXIgb2Yg cGlwZXMgYnV0IG5vdCB3aGV0aGVyDQo+IHRoZXkgYXJlIHNoYXJlZCB3aXRoIGFub3RoZXIgb3Ap LiAgSW4gdGhlb3J5IHRoZSBzY2hlZHVsaW5nIGRlc2NyaXB0aW9uDQo+IGNvdWxkIG9mZmVyIHRo ZSBpbmZvIChpZiBjb3JyZWN0IGFuZCBwcmVjaXNlIGVub3VnaCksIGJ1dCBJIGRvbid0IHRoaW5r DQo+IHRoZXJlJ3MNCj4gYSBnb29kIHdheSB0byBxdWVyeSB0aGlzIGRldGFpbHMuDQoNClllcywg dGhhdCdzIG5vdCAic3ltbWV0cmljIi4gVGhlIGN1cnJlbnQgY29kZSBpcyBhdCBsZWFzdCBjb25m dXNpbmcNCmluIHRoYXQgc2NlbmFyaW8uIEZvciBpbnN0YW5jZSwgZ2V0X211bHRfbGF0ZW5jeV9j b25zaWRlcl9mbWEgdXNlcw0KdGhlIHdpZHRoIG9mIEZNVUwsIGFuZCBnZXRfcmVxdWlyZWRfY3lj bGVzIHNob3VsZCB1c2UgdGhlIHdpZHRoIG9mDQpGQURELCBJIHRoaW5rLg0KDQpBcyB5b3UgcG9p bnRlZCBvdXQgZWFybGllciwgYSBwcm9ibGVtIHdpdGggcmVhc3NvY2lhdGlvbiBpcyB0aGF0IGl0 DQp3b3JrcyBsb2NhbGx5IG9uIHNpbmdsZSB1c2VkIG9wZXJhdG9yIGxpc3RzLCBzbyB0aGUgcmVz dWx0IG1heSBub3QNCmJlIGdsb2JhbGx5IG9wdGltdW0uIEZvciBleGFtcGxlLCBpZiB1c2luZyAy IHBpcGVzIHJlc3VsdHMgaW4gNCBjaXJjbGVzLA0KYW5kIHVzaW5nIDEgcGlwZSByZXN1bHRzIGlu IDUgY2lyY2xlczsgdGhlIGxhdHRlciBtaWdodCBiZSBwcmVmZXJhYmxlDQpmb3Igc2F2aW5nIDEg cGlwZSBmb3Igb3RoZXIgY2FsY3VsYXRpb25zIChpbiB0aGUgYmFzaWMgYmxvY2spLCBpZg0KdGhl cmUgaXMgYW55LiBJZiB0byBlbmhhbmNlIHJlYXNzb2NpYXRpb24gZm9yIHRoaXMsIGl0IHNlZW1z IHdlIG5lZWQNCnRvIGtub3cgdGhlIGFycmFuZ2VtZW50IG9mIHBpcGVzIGZvciBlYWNoIGtpbmQg b2Ygb3BlcmF0b3I/IChQZXJoYXBzIA0KdGFyZ2V0bS5zY2hlZC5yZWFzc29jaWF0aW9uX3dpZHRo IGNvdWxkIHJldHVybiBhbiBpbmRleCBudW1iZXINCmluZGljYXRpbmcgdGhlIHNldCBvZiBwaXBl cyBmb3IgdGhlIG9wZXJhdG9yLCBhbG9uZyB3aXRoIHRoZSB3aWR0aC4NCkJ1dCB0aGlzIG1heSBu b3QgY292ZXIgY2FzZXMgbGlrZSBIYXN3ZWxsLCB3aGljaCBoYXMgcG9ydHMgMCBhbmQgMQ0KZm9y IG11bHRpcGx5IGFuZCBwb3J0IDEgZm9yIGFkZGl0aW9uLiBCZXNpZGVzLCBJJ20gbm90IHlldCBj bGVhcg0KYWJvdXQgaG93IHRoZSBhbGdvcml0aG0gc2hvdWxkIGJlLikNCg0KQ29tbWl0dGVkIHRo ZSBwYXRjaCBhdCA4YWZkYmNkZC4NCg0KVGhhbmtzLA0KRGkNCg0KPiANCj4gPiAic3ltbWV0cmlj IHBpcGVzIiB3YXMgdG8gaW5kaWNhdGUgdGhhdCBGQUREL0ZNQS9GTVVMIHVzZSB0aGUgc2FtZSB1 bml0DQo+ID4gc2V0LCBzbyB0aGUgd2lkdGhzIGFyZSB1bmlmb3JtLCBhbmQgdGhlIGNhbGN1bGF0 aW9ucyBpbiB0aGlzIHBhdGNoIGNhbg0KPiA+IGFwcGx5LiBJIHRoaW5rIHRoaXMgY2FuIGJlIHJl bGF4ZWQgZm9yIHNjZW5hcmlvcyBsaWtlIFplbjMsIGJ5IHNlYXJjaGluZw0KPiA+IGZvciBhIHNt YWxsZXIgd2lkdGggb25seSB1c2luZyB0aGUgcGlwZXMgZm9yIEZNVUwvRk1BLiBCdXQgaWYgdGhl IHBpcGVzDQo+ID4gZm9yIEZNVUwgYW5kIEZBREQgYXJlIHNlcGFyYXRlZCwgZm9yIGV4YW1wbGUg MSBmb3IgRk1BL0ZNVUwgYW5kIDIgb3RoZXINCj4gPiBwaXBlcyBmb3IgRkFERCwgdGhlbiB0aGUg bWluaW11bSBjaXJjbGUgbWlnaHQgYmUgaW5jb3JyZWN0Lg0KPiA+DQo+ID4gQ2hhbmdlZCB0aGUg ZGVzY3JpcHRpb25zIGFuZCBjb2RlIGluIGdldF9yZWFzc29jaWF0aW9uX3dpZHRoIGEgYml0IHRv DQo+ID4gaW5jbHVkZSB0aGUgY2FzZSBsaWtlIFplbjM6DQo+ID4NCj4gPiArICAgICAgLyogV2hl biBwYXJhbV9mdWxseV9waXBlbGluZWRfZm1hIGlzIHNldCwgYXNzdW1lIEZNVUwgYW5kIEZNQSB1 c2UgdGhlDQo+ID4gKyAgICAgICAgc2FtZSB1bml0cyB0aGF0IGNhbiBhbHNvIGRvIEZBREQuICBG b3Igb3RoZXIgc2NlbmFyaW9zLCBzdWNoIGFzDQo+IHdoZW4NCj4gPiArICAgICAgICBGTVVMIGFu ZCBGQUREIGFyZSB1c2luZyBkaXN0aW5jdCB1bml0cywgdGhlIGZvbGxvd2luZyBjb2RlIG1heSBu b3QNCj4gPiArICAgICAgICBhcHBseS4gICovDQo+ID4gKyAgICAgIGludCB3aWR0aF9tdWx0ID0g dGFyZ2V0bS5zY2hlZC5yZWFzc29jaWF0aW9uX3dpZHRoIChNVUxUX0VYUFIsIG1vZGUpOw0KPiA+ ICsgICAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICh3aWR0aF9tdWx0IDw9IHdpZHRoKTsNCj4gPiAr DQo+ID4gKyAgICAgIC8qIExhdGVuY3kgb2YgTVVMVF9FWFBScy4gICovDQo+ID4gKyAgICAgIGlu dCBsYXRfbXVsDQo+ID4gKyAgICAgICA9IGdldF9tdWx0X2xhdGVuY3lfY29uc2lkZXJfZm1hIChv cHNfbnVtLCBtdWx0X251bSwgd2lkdGhfbXVsdCk7DQo+IA0KPiBUaGUgdXBkYXRlZCBwYXRjaCBp cyBPSy4NCj4gDQo+IFRoYW5rcyBmb3IgeW91ciBwYXRpZW5jZS4NCj4gDQo+IFRoYW5rcywNCj4g UmljaGFyZC4NCj4gDQo+ID4gPiBPdGhlcndpc2UgdGhpcyBsb29rcyBPSyBub3cuDQo+ID4gPg0K PiA+ID4gVGhhbmtzLA0KPiA+ID4gUmljaGFyZC4NCj4gPiA+DQo+ID4gPiA+ID4gPiA+ICsgIC8q IElmIHRoZXJlJ3MgbG9vcCBkZXBlbmRlbnQgRk1BIHJlc3VsdCwgcmV0dXJuIHdpZHRoPTIgdG8N Cj4gYXZvaWQgaXQuDQo+ID4gPiA+ID4gVGhpcw0KPiA+ID4gPiA+ID4gPiBpcw0KPiA+ID4gPiA+ ID4gPiArICAgICBiZXR0ZXIgdGhhbiBza2lwcGluZyB0aGVzZSBGTUEgY2FuZGlkYXRlcyBpbiB3 aWRlbmluZ19tdWwuDQo+ICovDQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IGJldHRlciB0 aGFuIHNraXBwaW5nLCBidXQgeW91IGRvbid0IHRvdWNoIGl0IHRoZXJlPyAgSSBzdXBwb3NlDQo+ IHdpZHRoDQo+ID4gPiA9PSAyDQo+ID4gPiA+ID4gPiA+IHdpbGwgYnlwYXNzIHRoZSBza2lwcGlu ZywgcmlnaHQ/ICBUaGlzIGhldXJpc3RpYyBvbmx5IGNvbWVzIGluDQo+IHdoZW4NCj4gPiA+IHRo ZQ0KPiA+ID4gPiA+IGFib3ZlDQo+ID4gPiA+ID4gPiA+IGNoYW5nZSBtYWRlIHdpZHRoID09IDEs IHNpbmNlIG90aGVyd2lzZSB3ZSBoYXZlIGFuIGVhcmxpZXINCj4gPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+ID4gICBpZiAod2lkdGggPT0gMSkNCj4gPiA+ID4gPiA+ID4gICAgIHJldHVybiB3aWR0 aDsNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gd2hpY2ggYWxzIGd1YXJhbnRlZXMgd2lk dGggPT0gMiB3YXMgYWxsb3dlZCBieSB0aGUgaG9vay9wYXJhbSwNCj4gcmlnaHQ/DQo+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gWWVzLCB0aGF0J3MgcmlnaHQuDQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiArICBpZiAod2lkdGggPT0gMSAmJiBtdWx0X251bQ0KPiA+ ID4gPiA+ID4gPiArICAgICAgJiYgbWF5YmVfbGUgKHRyZWVfdG9fcG9seV9pbnQ2NCAoVFlQRV9T SVpFIChUUkVFX1RZUEUNCj4gKGxocykpKSwNCj4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAg ICAgIHBhcmFtX2F2b2lkX2ZtYV9tYXhfYml0cykpDQo+ID4gPiA+ID4gPiA+ICsgICAgew0KPiA+ ID4gPiA+ID4gPiArICAgICAgLyogTG9vayBmb3IgY3Jvc3MgYmFja2VkZ2UgZGVwZW5kZW5jeToN Cj4gPiA+ID4gPiA+ID4gKyAgICAgICAxLiBMSFMgaXMgYSBwaGkgYXJndW1lbnQgaW4gdGhlIHNh bWUgYmFzaWMgYmxvY2sgaXQgaXMNCj4gZGVmaW5lZC4NCj4gPiA+ID4gPiA+ID4gKyAgICAgICAy LiBBbmQgdGhlIHJlc3VsdCBvZiB0aGUgcGhpIG5vZGUgaXMgdXNlZCBpbiBPUFMuICAqLw0KPiA+ ID4gPiA+ID4gPiArICAgICAgYmFzaWNfYmxvY2sgYmIgPSBnaW1wbGVfYmIgKFNTQV9OQU1FX0RF Rl9TVE1UIChsaHMpKTsNCj4gPiA+ID4gPiA+ID4gKyAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9y IGdzaTsNCj4gPiA+ID4gPiA+ID4gKyAgICAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGJi KTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQNCj4gPiA+ICgmZ3NpKSkNCj4gPiA+ID4gPiA+ ID4gKyAgICAgICB7DQo+ID4gPiA+ID4gPiA+ICsgICAgICAgICBncGhpICpwaGkgPSBkeW5fY2Fz dDxncGhpICo+IChnc2lfc3RtdCAoZ3NpKSk7DQo+ID4gPiA+ID4gPiA+ICsgICAgICAgICBmb3Ig KHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKTsgKytpKQ0KPiA+ ID4gPiA+ID4gPiArICAgICAgICAgICB7DQo+ID4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgdHJl ZSBvcCA9IFBISV9BUkdfREVGIChwaGksIGkpOw0KPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAg IGlmICghKG9wID09IGxocyAmJiBnaW1wbGVfcGhpX2FyZ19lZGdlIChwaGksIGkpLT5zcmMNCj4g PT0NCj4gPiA+IGJiKSkNCj4gPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIGNvbnRpbnVlOw0K PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBJIHRoaW5rIGl0J3MgZWFzaWVyIHRvIGl0ZXJh dGUgb3ZlciB0aGUgaW1tZWRpYXRlIHVzZXMgb2YgTEhTIGxpa2UNCj4gPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+ID4gICBGT1JfRUFDSF9JTU1fVVNFX0ZBU1QgKHVzZV9wLCBpdGVyLCBsaHMpDQo+ ID4gPiA+ID4gPiA+ICAgICAgaWYgKGdwaGkgKnBoaSA9IGR5bl9jYXN0IDxncGhpICo+IChVU0Vf U1RNVCAodXNlX3ApKSkNCj4gPiA+ID4gPiA+ID4gICAgICAgIHsNCj4gPiA+ID4gPiA+ID4gICAg ICAgICAgIGlmIChnaW1wbGVfcGhpX2FyZ19lZGdlIChwaGksIHBoaV9hcmdfaW5kZXhfZnJvbV91 c2UNCj4gPiA+ID4gPiA+ID4gKHVzZV9wKSktPnNyYyAhPSBiYikNCj4gPiA+ID4gPiA+ID4gICAg ICAgICAgICAgY29udGludWU7DQo+ID4gPiA+ID4gPiA+IC4uLg0KPiA+ID4gPiA+ID4gPiAgICAg ICAgfQ0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBvdGhlcndpc2UgSSB0aGluayBfdGhp c18gcGFydCBvZiB0aGUgcGF0Y2ggbG9va3MgcmVhc29uYWJsZS4NCj4gPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+ID4gQXMgeW91IHNheSBoZXVyaXN0aWNhbGx5IHRoZXkgbWlnaHQgZ28gdG9nZXRo ZXIgYnV0IEkgdGhpbmsgd2UNCj4gc2hvdWxkDQo+ID4gPiA+ID4gc3BsaXQNCj4gPiA+ID4gPiA+ ID4gdGhlDQo+ID4gPiA+ID4gPiA+IHBhdGNoIC0gdGhlIGNyb3NzLWxvb3AgcGFydCBjYW4gcHJv YmFibHkgc3RhbmQgaW5kZXBlbmRlbnRseS4gIENhbg0KPiB5b3UNCj4gPiA+ID4gPiBhZGp1c3QN Cj4gPiA+ID4gPiA+ID4gYW5kIHJlLXBvc3Q/DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gQXR0 YWNoZWQgaXMgdGhlIHNlcGFyYXRlZCBwYXJ0IGZvciBjcm9zcy1sb29wIEZNQS4gVGhhbmsgeW91 IGZvciB0aGUNCj4gPiA+ID4gPiBjb3JyZWN0aW9uLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gVGhh dCBjcm9zcy1sb29wIEZNQSBwYXRjaCBpcyBPSy4NCj4gPiA+ID4NCj4gPiA+ID4gQ29tbWl0dGVk IHRoaXMgcGFydCBhdCA3NDYzNDRkZC4NCj4gPiA+ID4NCj4gPiA+ID4gVGhhbmtzLA0KPiA+ID4g PiBEaQ0KPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gVGhhbmtzLA0KPiA+ID4gPiA+IFJp Y2hhcmQuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gQXMgZm9yIHRo ZSBmaXJzdCBwYXJ0IEkgc3RpbGwgZG9uJ3QgdW5kZXJzdGFuZCB2ZXJ5IHdlbGwgYW5kIGFtDQo+ IHN0aWxsDQo+ID4gPiA+ID4gaG9waW5nDQo+ID4gPiA+ID4gPiA+IHdlDQo+ID4gPiA+ID4gPiA+ IGNhbiBnZXQgYXdheSB3aXRob3V0IHlldCBhbm90aGVyIGtub2IgdG8gdHVuZS4NCj4gPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+ID4gUmljaGFyZC4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+IDIuIFRvIGF2b2lkIHJlZ3Jlc3Npb25zLCBpbmNs dWRlZCB0aGUgb3RoZXIgcGF0Y2gNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKGh0dHBzOi8vZ2NjLmdu dS5vcmcvcGlwZXJtYWlsL2djYy1wYXRjaGVzLzIwMjMtDQo+ID4gPiA+ID4gU2VwdGVtYmVyLzYy OTIwMy5odG1sKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiBvbiB0aGlzIHRyYWNrZXIgYWdhaW4uIFRo aXMgaXMgYmVjYXVzZSBtb3JlIEZNQSB3aWxsIGJlIGtlcHQNCj4gPiA+ID4gPiA+ID4gPiA+ID4g d2l0aCAxLiwgc28gd2UgbmVlZCB0byBydWxlIG91dCB0aGUgbG9vcCBkZXBlbmRlbnQNCj4gPiA+ ID4gPiA+ID4gPiA+ID4gRk1BIGNoYWlucyB3aGVuIHBhcmFtX2F2b2lkX2ZtYV9tYXhfYml0cyBp cyBzZXQuDQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gU29ycnkgYWdhaW4g Zm9yIHRha2luZyBzbyBsb25nIHRvIHJlcGx5Lg0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ID4gPiA+IEknbGwgbm90ZSB3ZSBoYXZlIGFuIG9kZCBjYXNlIG9uIHg4NiBaZW4yKD8pIGFz IHdlbGwgd2hpY2ggd2UNCj4gPiA+IGRvbid0DQo+ID4gPiA+ID4gcmVhbGx5DQo+ID4gPiA+ID4g PiA+ID4gPiB1bmRlcnN0YW5kIGZyb20gYSBDUFUgYmVoYXZpb3IgcGVyc3BlY3RpdmUuDQo+ID4g PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gVGhhbmtzLA0KPiA+ID4gPiA+ID4gPiA+ ID4gUmljaGFyZC4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+IFRoYW5r cywNCj4gPiA+ID4gPiA+ID4gPiA+ID4gRGkgWmhhbw0KPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ ID4gPiA+ID4gPiA+ID4gPiAtLS0tDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ ID4gPiA+ICAgICAgICAgUFIgdHJlZS1vcHRpbWl6YXRpb24vMTEwMjc5DQo+ID4gPiA+ID4gPiA+ ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+IGdjYy9DaGFuZ2VMb2c6DQo+ID4gPiA+ID4gPiA+ ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgKiB0cmVlLXNzYS1yZWFzc29jLmNj DQo+ID4gPiAocmFua19vcHNfZm9yX2JldHRlcl9wYXJhbGxlbGlzbV9wKToNCj4gPiA+ID4gPiA+ ID4gPiA+ID4gICAgICAgICBOZXcgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciByYW5raW5nIHRo ZSBvcHMNCj4gcmVzdWx0cyBpbg0KPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgIGJldHRlciBw YXJhbGxlbGlzbS4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICAoZ2V0X3JlYXNzb2NpYXRp b25fd2lkdGgpOiBBZGQgbmV3IHBhcmFtZXRlcnMuDQo+IFNlYXJjaA0KPiA+ID4gZm9yDQo+ID4g PiA+ID4gPiA+ID4gPiA+ICAgICAgICAgc21hbGxlciB3aWR0aCBjb25zaWRlcmluZyB0aGUgYmVu ZWZpdCBvZiBGTUEuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgKHJhbmtfb3BzX2Zvcl9m bWEpOiBDaGFuZ2UgcmV0dXJuIHZhbHVlIHRvIGJlIG51bWJlcg0KPiBvZg0KPiA+ID4gPiA+ID4g PiA+ID4gPiAgICAgICAgIE1VTFRfRVhQUnMuDQo+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAg KHJlYXNzb2NpYXRlX2JiKTogRm9yIDMgb3BzLCByZWZpbmUgdGhlIGNvbmRpdGlvbiB0bw0KPiA+ ID4gY2FsbA0KPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgIHN3YXBfb3BzX2Zvcl9iaW5hcnlf c3RtdC4NCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+ID4gZ2NjL3Rlc3Rz dWl0ZS9DaGFuZ2VMb2c6DQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ ICAgICAgICAgKiBnY2MuZGcvcHIxMTAyNzkuYzogTmV3IHRlc3QuDQo+ID4gPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+ID4gPiBUaGFua3MsDQo+ID4gPiA+ID4gPiA+ID4gRGkgWmhhbw0KPiA+ID4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gLS0tLQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ ID4gPiA+ID4gICAgICAgICBQUiB0cmVlLW9wdGltaXphdGlvbi8xMTAyNzkNCj4gPiA+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gPiA+IGdjYy9DaGFuZ2VMb2c6DQo+ID4gPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+ID4gPiAgICAgICAgICogZG9jL2ludm9rZS50ZXhpOiBEZXNjcmlwdGlvbiBvZg0K PiBwYXJhbV9tYXhfZm1hX2NoYWluX2xlbi4NCj4gPiA+ID4gPiA+ID4gPiAgICAgICAgICogcGFy YW1zLm9wdDogTmV3IHBhcmFtZXRlciBwYXJhbV9tYXhfZm1hX2NoYWluX2xlbi4NCj4gPiA+ID4g PiA+ID4gPiAgICAgICAgICogdHJlZS1zc2EtcmVhc3NvYy5jYyAoZ2V0X3JlYXNzb2NpYXRpb25f d2lkdGgpOg0KPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgU3VwcG9ydCBwYXJhbV9tYXhfZm1hX2No YWluX2xlbjsgY2hlY2sgZm9yIGxvb3ANCj4gZGVwZW5kZW50DQo+ID4gPiA+ID4gPiA+ID4gICAg ICAgICBGTUFzLg0KPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgKHJhbmtfb3BzX2Zvcl9mbWEpOiBS ZXR1cm4gdGhlIG51bWJlciBvZiBNVUxUX0VYUFJzLg0KPiA+ID4gPiA+ID4gPiA+ICAgICAgICAg KHJlYXNzb2NpYXRlX2JiKTogRm9yIDMgb3BzLCByZWZpbmUgdGhlIGNvbmRpdGlvbiB0bw0KPiBj YWxsDQo+ID4gPiA+ID4gPiA+ID4gICAgICAgICBzd2FwX29wc19mb3JfYmluYXJ5X3N0bXQuDQo+ ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoN Cj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgKiBnY2MuZGcvcHIxMTAy NzktMS5jOiBOZXcgdGVzdC4NCj4gPiA+ID4gPiA+ID4gPiAgICAgICAgICogZ2NjLmRnL3ByMTEw Mjc5LTIuYzogTmV3IHRlc3QuDQo+ID4gPiA+ID4gPiA+ID4gICAgICAgICAqIGdjYy5kZy9wcjEx MDI3OS0zLmM6IE5ldyB0ZXN0Lg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IC0tLQ0KPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+ICAgICAgICAgUFIgdHJlZS1vcHRpbWl6YXRpb24vMTEwMjc5DQo+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gZ2NjL0NoYW5nZUxvZzoNCj4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiAgICAgICAgICogdHJlZS1zc2EtcmVhc3NvYy5jYyAoZ2V0X3JlYXNzb2NpYXRpb25f d2lkdGgpOiBjaGVjaw0KPiA+ID4gPiA+ID4gICAgICAgICBmb3IgbG9vcCBkZXBlbmRlbnQgRk1B cy4NCj4gPiA+ID4gPiA+ICAgICAgICAgKHJlYXNzb2NpYXRlX2JiKTogRm9yIDMgb3BzLCByZWZp bmUgdGhlIGNvbmRpdGlvbiB0byBjYWxsDQo+ID4gPiA+ID4gPiAgICAgICAgIHN3YXBfb3BzX2Zv cl9iaW5hcnlfc3RtdC4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBnY2MvdGVzdHN1aXRlL0No YW5nZUxvZzoNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgICAgICAgICogZ2NjLmRnL3ByMTEw Mjc5LTEuYzogTmV3IHRlc3QuDQo+ID4gPiA+IC0tLQ0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAg IFBSIHRyZWUtb3B0aW1pemF0aW9uLzExMDI3OQ0KPiA+ID4gPg0KPiA+ID4gPiBnY2MvQ2hhbmdl TG9nOg0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgICogY29tbW9uLm9wdDogTmV3IGZsYWcgZnVs bHktcGlwZWxpbmVkLWZtYS4NCj4gPiA+ID4gICAgICAgICAqIHRyZWUtc3NhLXJlYXNzb2MuY2Mg KGdldF9tdWx0X2xhdGVuY3lfY29uc2lkZXJfZm1hKToNCj4gPiA+ID4gICAgICAgICBSZXR1cm4g bGF0ZW5jeSBvZiBNVUxUX0VYUFJzIHRoYXQgY2FuJ3QgYmUgaGlkZWQgYnkgRk1BLg0KPiA+ID4g PiAgICAgICAgIChnZXRfcmVhc3NvY2lhdGlvbl93aWR0aCk6IFNlYXJjaCBmb3Igc21hbGxlciB3 aWR0aHMNCj4gPiA+ID4gICAgICAgICBjb25zaWRlcmluZyB0aGUgYmVuZWZpdCBvZiBmdWxseSBw aXBlbGluZWQgRk1BLg0KPiA+ID4gPiAgICAgICAgIChyYW5rX29wc19mb3JfZm1hKTogUmV0dXJu IHRoZSBudW1iZXIgb2YgTVVMVF9FWFBScy4NCj4gPiA+ID4gICAgICAgICAocmVhc3NvY2lhdGVf YmIpOiBQYXNzIHRoZSBudW1iZXIgb2YgTVVMVF9FWFBScyB0bw0KPiA+ID4gPiAgICAgICAgIGdl dF9yZWFzc29jaWF0aW9uX3dpZHRoOyBhdm9pZCBjYWxsaW5nDQo+ID4gPiA+ICAgICAgICAgZ2V0 X3JlYXNzb2NpYXRpb25fd2lkdGggdHdpY2UuDQo+ID4gPiA+DQo+ID4gPiA+IGdjYy90ZXN0c3Vp dGUvQ2hhbmdlTG9nOg0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgICogZ2NjLmRnL3ByMTEwMjc5 LTIuYzogTmV3IHRlc3QuDQo+ID4NCj4gPiBUaGFua3MsDQo+ID4gRGkNCj4gPg0KPiA+IC0tLQ0K PiA+DQo+ID4gICAgICAgICBQUiB0cmVlLW9wdGltaXphdGlvbi8xMTAyNzkNCj4gPg0KPiA+IGdj Yy9DaGFuZ2VMb2c6DQo+ID4NCj4gPiAgICAgICAgICogZG9jL2ludm9rZS50ZXhpOiBOZXcgcGFy YW1ldGVyIGZ1bGx5LXBpcGVsaW5lZC1mbWEuDQo+ID4gICAgICAgICAqIHBhcmFtcy5vcHQ6IE5l dyBwYXJhbWV0ZXIgZnVsbHktcGlwZWxpbmVkLWZtYS4NCj4gPiAgICAgICAgICogdHJlZS1zc2Et cmVhc3NvYy5jYyAoZ2V0X211bHRfbGF0ZW5jeV9jb25zaWRlcl9mbWEpOiBSZXR1cm4NCj4gPiAg ICAgICAgIHRoZSBsYXRlbmN5IG9mIE1VTFRfRVhQUnMgdGhhdCBjYW4ndCBiZSBoaWRkZW4gYnkg dGhlIEZNQXMuDQo+ID4gICAgICAgICAoZ2V0X3JlYXNzb2NpYXRpb25fd2lkdGgpOiBTZWFyY2gg Zm9yIGEgc21hbGxlciB3aWR0aA0KPiA+ICAgICAgICAgY29uc2lkZXJpbmcgdGhlIGJlbmVmaXQg b2YgZnVsbHkgcGlwZWxpbmVkIEZNQS4NCj4gPiAgICAgICAgIChyYW5rX29wc19mb3JfZm1hKTog UmV0dXJuIHRoZSBudW1iZXIgb2YgTVVMVF9FWFBScy4NCj4gPiAgICAgICAgIChyZWFzc29jaWF0 ZV9iYik6IFBhc3MgdGhlIG51bWJlciBvZiBNVUxUX0VYUFJzIHRvDQo+ID4gICAgICAgICBnZXRf cmVhc3NvY2lhdGlvbl93aWR0aDsgYXZvaWQgY2FsbGluZw0KPiA+ICAgICAgICAgZ2V0X3JlYXNz b2NpYXRpb25fd2lkdGggdHdpY2UuDQo+ID4NCj4gPiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoN Cj4gPg0KPiA+ICAgICAgICAgKiBnY2MuZGcvcHIxMTAyNzktMi5jOiBOZXcgdGVzdC4NCg==