From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140047.outbound.protection.outlook.com [40.107.14.47]) by sourceware.org (Postfix) with ESMTPS id 1AF413858C27 for ; Tue, 31 Aug 2021 16:45:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1AF413858C27 Received: from AM6PR05CA0018.eurprd05.prod.outlook.com (2603:10a6:20b:2e::31) by VI1PR0802MB2158.eurprd08.prod.outlook.com (2603:10a6:800:99::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.21; Tue, 31 Aug 2021 16:45:43 +0000 Received: from VE1EUR03FT011.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:2e:cafe::8d) by AM6PR05CA0018.outlook.office365.com (2603:10a6:20b:2e::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4478.17 via Frontend Transport; Tue, 31 Aug 2021 16:45:43 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; gcc.gnu.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;gcc.gnu.org; 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; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT011.mail.protection.outlook.com (10.152.18.134) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.17 via Frontend Transport; Tue, 31 Aug 2021 16:45:42 +0000 Received: ("Tessian outbound 5918cb94a4b5:v103"); Tue, 31 Aug 2021 16:45:42 +0000 X-CR-MTA-TID: 64aa7808 Received: from 222deac1b0f0.3 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 3AAF2427-F2BB-4109-BA05-3909D29316CE.1; Tue, 31 Aug 2021 16:45:36 +0000 Received: from EUR02-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 222deac1b0f0.3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 31 Aug 2021 16:45:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HTxxlvnFR5KVJam+/cZcRY9kDgyKM5JF4uXVHJa1crBzVx4SYYNgDsOfXpiNeOk4/zzUEd7Y3eFR9x524J8gVzjSQ5JwXltQsXqT2QT4ICgpUCwgKL6wBVr8OWVXqhj7mQMWJiYevuvHAdWYoS9q8x7ZXeBvD3Iv+8r4GMyx9m/pG9xDrzc0kUT2hFKM0V0vMyxhzCWlaiSginGmgP32T4/B/c6SexOoh91CSvk7z2XZYaglQoWCnV0vH8SqXGQAE77ohfhml6ug2xvPfl6I8nPUg+p6cVDKk4F9LlGj2R4GRv2Ol2OYd33eEEgIvffOnRW4zn6Ks9seEk0+sF4Z4g== 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-SenderADCheck; bh=NpnS7FVIKjsvXqzyQmSEmRvBqOzojOR8YuCdsDh0VP8=; b=H6ANCBB8iIMXRvA7y3F9NFDnS4ptMgOfwEfEpV8Va3YOegqU+IkH/F6wPS0p9Wx6J0gddJHie56Y7hyj1hteHtYUm4Zn3GoVzo5UKtoYZM8lbBnUT7LrSCVxfzxcs9GqZRhvZQQBxYXdTmVVM73nKcOkUsayz3fmOQGnrJ+dlFa4HJ2khyrkRCxmWssW4HdCADzr3nONNvm5Rk1J2CL55Qcf4IBMxPkhxxF1auYWCKFdpD35kAkd9yCydKGE6sZYLSsq+0UthPvl+pDEJHBpUA0jT+pHHbvwBMUQPil0XwgubzaLnXPPHYCSMFzN9I7lXgNkYjHoh1JqRNSzrP0P5Q== 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 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by VI1PR08MB5328.eurprd08.prod.outlook.com (2603:10a6:803:13a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.23; Tue, 31 Aug 2021 16:45:33 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd45:5ad5:f666:272a]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd45:5ad5:f666:272a%4]) with mapi id 15.20.4457.024; Tue, 31 Aug 2021 16:45:33 +0000 From: Tamar Christina To: Richard Sandiford CC: "gcc-patches@gcc.gnu.org" , nd , Richard Earnshaw , Marcus Shawcroft , Kyrylo Tkachov Subject: RE: [PATCH 2/2]AArch64: Add better costing for vector constants and operations Thread-Topic: [PATCH 2/2]AArch64: Add better costing for vector constants and operations Thread-Index: AQHXnmxMS8vPR1UI0UqiAQ/zUoepGquNuNUzgAAAlFCAAA5bl4AAATdA Date: Tue, 31 Aug 2021 16:45:32 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 844913BE9C32F64498B4F386D46331DD.0 x-checkrecipientchecked: true Authentication-Results-Original: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: 0a7e3f57-906d-4f56-25a4-08d96c9ec5e7 x-ms-traffictypediagnostic: VI1PR08MB5328:|VI1PR0802MB2158: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: /L9KsTuTxcA5tMnR+xNDpsFO0De1i4pD9atScSukDL1lRWa7c/Xmg2UjJ5pJcZYuMWEIVC8serMPaOWaEq7AbQ/3pL4qR8CaWM/Vc1Jz2gCBEEuXcDSeYryTguguErBD3rsePS6jIYHNcTYTGZRsAixi9Vk6gmCBPBKfzGgZrK5F5PwN49DzOxyZ5/TZBhFY++JJv16bLaAzPkPaOgLG8heiur3Ej+q/WdDXKJKzgDn68Y2P2sV4Tk2KypDNGXp85fM3ehB9eAyvzwYXpH05qeoNH03vO2dQG8brxPLeCLx5OnT1W0X4b6Pc3ead0K1L7ApYThXWn1rqENnZU14pKelBOUkh4WVpY7lGpHh7C9MZmgGu0U7bHcGL0WNeOFrUraysQbmwOUl8HjNnoPBtMtknxjbT9L+9CcsG93ApbFsBInnUq7ZMUjwqEbxP87AUtkbEhqQ3lLK6INb/sEtxRrv5XVpIsfrUCHPHx0KRu8N3JCk4AYjppQWxgpovTgExqJX2/R69/B7mMWcRXu46nuCR4l8R+ScLG6ean2jhPvFROjJ39BsnG9oHk4NGoMQNCfe99c+7laEuj7mKmhYE3lStVtyi3BwhnVOFOsmp22NcUCRvBlW+CNQNJcSuJmbCPXMxNsP6/gy1A76TfyINPkHhqFTv4XaUf8/9VGhXH0I5w5km7477GTxpLLI5Y3Ght17966t/zc7AwX6028xIFg== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR08MB5325.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(376002)(136003)(396003)(366004)(39860400002)(52536014)(2906002)(26005)(66946007)(64756008)(83380400001)(66446008)(7696005)(53546011)(8936002)(4326008)(66476007)(76116006)(186003)(6862004)(66556008)(316002)(6506007)(5660300002)(71200400001)(38070700005)(9686003)(55016002)(38100700002)(30864003)(33656002)(478600001)(8676002)(122000001)(6636002)(86362001)(54906003); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TjFuUVp3UDlQMUczNTZEMzV3bGlVVnl1Zm0vVUNmWTc2YjZJVjc0ZTNsb2Rv?= =?utf-8?B?emtjdDFwYmlGUlFNVnRxNkQ4bXJrbFJXWnEvc0NTUVBpTllSTjgybEoyb3BW?= =?utf-8?B?VnRlYWFEallsbEYxckJjUnpQVjg2R1ZOTUxlWTVDNnVYa0JpWXA3V3d5T1F3?= =?utf-8?B?WFY1d2NTMTdCNVNEU0JINUxSLzU5VnBLSC9kbVA0WW5KbmE5TUttaGhOYUlY?= =?utf-8?B?Rk9nR1crNHI4ZUx4aDRkbE5TYkRXSC9GQWUrTDY0aGpnc0ZRTFZpUXlIanFC?= =?utf-8?B?N0lnZXhBbFVPMnd2UHlLQ0ZqRHEzNjZDWnNYRVhXRXd3OGJobC9PTU5DY2VE?= =?utf-8?B?OGp5MDU4V3k2cnVXM3U1TGRGZHUzcGl3Y3JNOWVXenplV1RhME5pZ2tpM2Vk?= =?utf-8?B?cTkwRXZxbVRvTlJTRUxGTDlyUmhOVnJQMnBlaUx3WFBabzJGS0xQSkNEZExj?= =?utf-8?B?TXJ5MDVvV0drU3JVbTVwRkI5WUhBVUlFK3BQTFg0Qzg0UGdFSExyYWNTcnZJ?= =?utf-8?B?VERJcWtLSUozWWJzdmtraDBBQmlxdEs4dXRTaCsvUXorTjRRWGdOTVBMd2ti?= =?utf-8?B?TGp2MDc4c3dUdFZiemFFRUJCVkthUUt1SHRxWGlBWkJKQjNhWkdLRllyL1Js?= =?utf-8?B?TVZUUUNiR2JXS2U2Z1h1TmJlVmJ3a0ltVUFvcGxZaVRPYXk4U25nSTBEME5o?= =?utf-8?B?VG9lWGR1MVB5WWhRSUwzdkw1N0NNV2gxKzZOa0pGaDI5VU9DbE1Lczl2bWxC?= =?utf-8?B?MHplRy94ZlZzbXA5MkwxbTFNVnk2NDdIWkk4WTVzNGtiT2lJWWdUM085NmE4?= =?utf-8?B?ckpLd2x2S1lSNWoyMU9kQ2lhRHR4YVpPQ1pTcm5ESzN4UUxCR0JtVzU2clIv?= =?utf-8?B?Uy9PcVozOXAzTnFTYk8rMGN5eUlSVG9pQ09UOVlxTlJsUmlrNWZHWnRacUQ1?= =?utf-8?B?Rm1jd0R4WWNWYkk5RDZPL09nM2R6dUJBYWJveVRvMEZSa3hYc21sNEM0WnF5?= =?utf-8?B?U1ZwTGk5eWgySVNCUXBGNnlXTUJWSDI0Q1JrbEM3OUJRcXhPd3NTMndTWnF2?= =?utf-8?B?UWMyVU1ETEZ0M1RrTHRVMHRjcERTemt6VUtETXhKOC9GRitpUkFJcjJjN1VJ?= =?utf-8?B?WEpEaVIvTzVkNG5VY1VNVFNXaFhWd09pTldTTVdwUjJKYVBtY2EzYzZaVlVu?= =?utf-8?B?Vmg5MXFSYktsZFZWcVYzTHVtbE5TYnVPQWNFQzA4ZVBST0gxWjhiMDRaek1U?= =?utf-8?B?eWZUaUkrSStaNGxpYUh6Q0xZK2F2eGI1REswQkZzNXlxRDFDU2NkVFROSGx0?= =?utf-8?B?NWt1dnVBY2RlNHNDUERQTVhiK2h4SThGcXlKSlEzT0s4bXhhTTZXak80Um1v?= =?utf-8?B?UTVCanVSNGRYekNaeFV1OGU5S1Y0aWwxaE12MncyaUVST3g4OWdQZy9GNUtF?= =?utf-8?B?S2s5SWd1R284b0hadmRWbC96dTB4dmVDcGdsZDRvK05rT0x4ekNOUFhVNGZa?= =?utf-8?B?Kzk1dFZ2a1JET0E3MFUwNmwyT2NkVmM4NjBtUk0yR0JlZmtLVkZHa1RSMWQ4?= =?utf-8?B?N1hQOHY0OUxpSm8xd1AxM2JXdzhCY28yMy9HbG1ldzB0WmVXV09UaGw4Y2x0?= =?utf-8?B?MVZjVjZoWkQ1Zjh2V2NjbFhLZWtDbkxSNmlNRStoaTlYY0VJT1VSS3dvYjc5?= =?utf-8?B?elU3Y3hyeHNMelhXc0s0QWRUd2t4UDkyZHhIcmdGUG9PejNJelhKU054R2Ev?= =?utf-8?Q?6+o1YznWon3p2rT488jy+5kn4euiPgKJT+tM08J?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB5328 Original-Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT011.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 2585822f-348a-448c-f831-08d96c9ec016 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rZGlJdfkSGwaPX36ak/zw0d4gkfaMiApWhjn7VrQn3zVL2U+r79voKHx9mLvTlT938HoHo91oUMtbVhOUamG5LjZdywcWw6cs5v0OU3ubWEnlkxIOJLpLhR9GsAqn4lMN9cZENmbQYYCUXlBixg7GFkn0JPectei6NQuBgRaA4jjKePzV+vTmtvhtBeAibqMsODTugpiaUXszqQC2FwUUdrK/YgU1MrEuctmjgiYlT0mFRqmmQ9E9M9OKiR/2+sll5rGCTefrH4axLud7N8emJpi3c1+5Dsra7MsEbcZFt8MSkYVA58qau/MfQtzGIwkorgHX5OQZKrAO3rTTKETnS6YJyiD0M6hzvF916pgKMdn/g0ZAVkA9kg5doUJvqKsr7cPS/yp2RnyZ+I4XmWzTj/VoXWQuKb+VOjl/zDVkF8U2NziLjorD5EQsZ5ynE7c70hA9C5LmAg6/0oLDACZ7jdXveO109UhVtcKEACzjxkN/o43FGS21FlaQVstiQHJQAgZ12brhrx/ohtBKqXu3dXMxQT2YkeB8GZCkxvTw2eTHDTBR2Oz2jCuOrdnAEGxdYJUJiwvKtOT7seuQkxMUQ6S55Ms684Rmyu80qOERuhN6OJb6FNXIATdvz4oDmarKPT9ZBOA/sXITIV52/L4+lulsPkywW9arALYDntKZmxjHfXqqEXixlrY6y5/EulC2bZE2qwNN97dFQwMXyzBIg== 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:(4636009)(46966006)(36840700001)(316002)(81166007)(356005)(30864003)(6862004)(4326008)(508600001)(54906003)(2906002)(83380400001)(6636002)(8936002)(8676002)(336012)(7696005)(53546011)(6506007)(52536014)(5660300002)(55016002)(186003)(82310400003)(36860700001)(86362001)(47076005)(9686003)(70586007)(26005)(70206006)(33656002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2021 16:45:42.9188 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0a7e3f57-906d-4f56-25a4-08d96c9ec5e7 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: VE1EUR03FT011.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2158 X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Aug 2021 16:45:57 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUmljaGFyZCBTYW5kaWZv cmQgPHJpY2hhcmQuc2FuZGlmb3JkQGFybS5jb20+DQo+IFNlbnQ6IFR1ZXNkYXksIEF1Z3VzdCAz MSwgMjAyMSA1OjA3IFBNDQo+IFRvOiBUYW1hciBDaHJpc3RpbmEgPFRhbWFyLkNocmlzdGluYUBh cm0uY29tPg0KPiBDYzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmc7IG5kIDxuZEBhcm0uY29tPjsg UmljaGFyZCBFYXJuc2hhdw0KPiA8UmljaGFyZC5FYXJuc2hhd0Bhcm0uY29tPjsgTWFyY3VzIFNo YXdjcm9mdA0KPiA8TWFyY3VzLlNoYXdjcm9mdEBhcm0uY29tPjsgS3lyeWxvIFRrYWNob3YgPEt5 cnlsby5Ua2FjaG92QGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMi8yXUFBcmNoNjQ6 IEFkZCBiZXR0ZXIgY29zdGluZyBmb3IgdmVjdG9yIGNvbnN0YW50cw0KPiBhbmQgb3BlcmF0aW9u cw0KPiANCj4gVGFtYXIgQ2hyaXN0aW5hIDxUYW1hci5DaHJpc3RpbmFAYXJtLmNvbT4gd3JpdGVz Og0KPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBSaWNoYXJkIFNh bmRpZm9yZCA8cmljaGFyZC5zYW5kaWZvcmRAYXJtLmNvbT4NCj4gPj4gU2VudDogVHVlc2RheSwg QXVndXN0IDMxLCAyMDIxIDQ6MTQgUE0NCj4gPj4gVG86IFRhbWFyIENocmlzdGluYSA8VGFtYXIu Q2hyaXN0aW5hQGFybS5jb20+DQo+ID4+IENjOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZzsgbmQg PG5kQGFybS5jb20+OyBSaWNoYXJkIEVhcm5zaGF3DQo+ID4+IDxSaWNoYXJkLkVhcm5zaGF3QGFy bS5jb20+OyBNYXJjdXMgU2hhd2Nyb2Z0DQo+ID4+IDxNYXJjdXMuU2hhd2Nyb2Z0QGFybS5jb20+ OyBLeXJ5bG8gVGthY2hvdg0KPiA8S3lyeWxvLlRrYWNob3ZAYXJtLmNvbT4NCj4gPj4gU3ViamVj dDogUmU6IFtQQVRDSCAyLzJdQUFyY2g2NDogQWRkIGJldHRlciBjb3N0aW5nIGZvciB2ZWN0b3IN Cj4gPj4gY29uc3RhbnRzIGFuZCBvcGVyYXRpb25zDQo+ID4+DQo+ID4+IFRhbWFyIENocmlzdGlu YSA8dGFtYXIuY2hyaXN0aW5hQGFybS5jb20+IHdyaXRlczoNCj4gPj4gPiBAQCAtMTM5MzYsOCAr MTM5MzcsNjUgQEAgY29zdF9wbHVzOg0KPiA+PiA+ICAJCQkgICAgIG1vZGUsIE1VTFQsIDEsIHNw ZWVkKTsNCj4gPj4gPiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KPiA+PiA+ICAgICAgICAgIH0N Cj4gPj4gPiArCWJyZWFrOw0KPiA+PiA+ICsgICAgY2FzZSBQQVJBTExFTDoNCj4gPj4gPiArICAg ICAgLyogRmFsbCB0aHJvdWdoICovDQo+ID4+DQo+ID4+IFdoaWNoIGNvZGUgcGF0aHMgbGVhZCB0 byBnZXR0aW5nIGEgUEFSQUxMRUwgaGVyZT8NCj4gPg0KPiA+IEhpLA0KPiA+DQo+ID4gVGhhbmtz IGZvciB0aGUgcmV2aWV3IQ0KPiA+DQo+ID4gSSBhZGRlZCBpdCBmb3IgY29tcGxldGVuZXNzIGJl Y2F1c2UgQ1NFIHRyZWF0cyBhIHBhcmFsbGVsIGFuZA0KPiA+IENPTlNUX1ZFQ1RPUiBhcyBlcXVp dmFsZW50IHdoZW4gdGhleSBlYWNoIGVudHJ5IGluIHRoZSBwYXJhbGxlbCBkZWZpbmVzDQo+IGEg Y29uc3RhbnQuDQo+IA0KPiBDb3VsZCB5b3UgdGVzdCB3aGV0aGVyIGl0IGV2ZXIgdHJpZ2dlcnMg aW4gcHJhY3RpY2UgdGhvdWdoPw0KPiBUaGUgY29kZSB3b3VsZCBiZSBtdWNoIHNpbXBsZXIgd2l0 aG91dCBpdC4NCg0KV2lsbCBjaGVjayDwn5iKDQoNCj4gDQo+ID4+ID4gKyAgICBjYXNlIENPTlNU X1ZFQ1RPUjoNCj4gPj4gPiArCXsNCj4gPj4gPiArCSAgcnR4IGdlbl9pbnNuID0gYWFyY2g2NF9z aW1kX21ha2VfY29uc3RhbnQgKHgsIHRydWUpOw0KPiA+PiA+ICsJICAvKiBOb3QgYSB2YWxpZCBj b25zdCB2ZWN0b3IuICAqLw0KPiA+PiA+ICsJICBpZiAoIWdlbl9pbnNuKQ0KPiA+PiA+ICsJICAg IGJyZWFrOw0KPiA+PiA+DQo+ID4+ID4gLSAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovDQo+ID4+ ID4gKwkgIHN3aXRjaCAoR0VUX0NPREUgKGdlbl9pbnNuKSkNCj4gPj4gPiArCSAgew0KPiA+PiA+ ICsJICBjYXNlIENPTlNUX1ZFQ1RPUjoNCj4gPj4gPiArCSAgICAvKiBMb2FkIHVzaW5nIE1PVkkv TVZOSS4gICovDQo+ID4+ID4gKwkgICAgaWYgKGFhcmNoNjRfc2ltZF92YWxpZF9pbW1lZGlhdGUg KHgsIE5VTEwpKQ0KPiA+PiA+ICsJICAgICAgKmNvc3QgKz0gZXh0cmFfY29zdC0+dmVjdC5tb3Zp Ow0KPiA+PiA+ICsJICAgIGVsc2UgLyogTG9hZCB1c2luZyBjb25zdGFudCBwb29sLiAgKi8NCj4g Pj4gPiArCSAgICAgICpjb3N0ICs9IGV4dHJhX2Nvc3QtPmxkc3QubG9hZDsNCj4gPj4gPiArCSAg ICBicmVhazsNCj4gPj4gPiArCSAgLyogTG9hZCB1c2luZyBhIERVUC4gICovDQo+ID4+ID4gKwkg IGNhc2UgVkVDX0RVUExJQ0FURToNCj4gPj4gPiArCSAgICAqY29zdCArPSBleHRyYV9jb3N0LT52 ZWN0LmR1cDsNCj4gPj4gPiArCSAgICBicmVhazsNCj4gPj4NCj4gPj4gRG9lcyB0aGlzIHRyaWdn ZXIgaW4gcHJhY3RpY2U/ICBUaGUgbmV3IGNoZWNrPT10cnVlIHBhdGggKHJpZ2h0bHkpDQo+ID4+ IHN0b3BzIHRoZSBkdXBsaWNhdGVkIGVsZW1lbnQgZnJvbSBiZWluZyBmb3JjZWQgaW50byBhIHJl Z2lzdGVyLCBidXQNCj4gPj4gdGhlbiBJIHdvdWxkIGhhdmUNCj4gPj4gZXhwZWN0ZWQ6DQo+ID4+ DQo+ID4+IHJ0eA0KPiA+PiBnZW5fdmVjX2R1cGxpY2F0ZSAobWFjaGluZV9tb2RlIG1vZGUsIHJ0 eCB4KSB7DQo+ID4+ICAgaWYgKHZhbGlkX2Zvcl9jb25zdF92ZWN0b3JfcCAobW9kZSwgeCkpDQo+ ID4+ICAgICByZXR1cm4gZ2VuX2NvbnN0X3ZlY19kdXBsaWNhdGUgKG1vZGUsIHgpOw0KPiA+PiAg IHJldHVybiBnZW5fcnR4X1ZFQ19EVVBMSUNBVEUgKG1vZGUsIHgpOyB9DQo+ID4+DQo+ID4+IHRv IGdlbmVyYXRlIHRoZSBvcmlnaW5hbCBDT05TVF9WRUNUT1IgYWdhaW4uDQo+ID4NCj4gPiBZZXMs IGJ1dCBDU0UgaXMgdHJ5aW5nIHRvIHNlZSB3aGV0aGVyIHVzaW5nIGEgRFVQIGlzIGNoZWFwZXIg dGhhbiBhbm90aGVyDQo+IGluc3RydWN0aW9uLg0KPiA+IE5vcm1hbCBjb2RlIHdvbid0IGhpdCB0 aGlzIGJ1dCBDU0UgaXMganVzdCBjb3N0aW5nIGFsbCB0aGUgZGlmZmVyZW50DQo+ID4gd2F5cyBv bmUgY2FuIHNlbWFudGljYWxseSBjb25zdHJ1Y3QgYSB2ZWN0b3IsIHdoaWNoIFJUTCBhY3R1YWxs eSBjb21lcyBvdXQNCj4gb2YgaXQgZGVwZW5kcyBvbiBob3cgaXQncyBmb2xkZWQgYXMgeW91IHNh eS4NCj4gDQo+IEJ1dCB3aGF0IEkgbWVhbiBpcywgeW91IGNhbGw6DQo+IA0KPiAJICBydHggZ2Vu X2luc24gPSBhYXJjaDY0X3NpbWRfbWFrZV9jb25zdGFudCAoeCwgdHJ1ZSk7DQo+IAkgIC8qIE5v dCBhIHZhbGlkIGNvbnN0IHZlY3Rvci4gICovDQo+IAkgIGlmICghZ2VuX2luc24pDQo+IAkgICAg YnJlYWs7DQo+IA0KPiB3aGVyZSBhYXJjaDY0X3NpbWRfbWFrZV9jb25zdGFudCBkb2VzOg0KPiAN Cj4gICBpZiAoQ09OU1RfVkVDVE9SX1AgKHZhbHMpKQ0KPiAgICAgY29uc3RfdmVjID0gdmFsczsN Cj4gICBlbHNlIGlmIChHRVRfQ09ERSAodmFscykgPT0gUEFSQUxMRUwpDQo+ICAgICB7DQo+ICAg ICAgIC8qIEEgQ09OU1RfVkVDVE9SIG11c3QgY29udGFpbiBvbmx5IENPTlNUX0lOVHMgYW5kDQo+ IAkgQ09OU1RfRE9VQkxFcywgYnV0IENPTlNUQU5UX1AgYWxsb3dzIG1vcmUgKGUuZy4gU1lNQk9M X1JFRikuDQo+IAkgT25seSBzdG9yZSB2YWxpZCBjb25zdGFudHMgaW4gYSBDT05TVF9WRUNUT1Iu ICAqLw0KPiAgICAgICBpbnQgbl9lbHRzID0gWFZFQ0xFTiAodmFscywgMCk7DQo+ICAgICAgIGZv ciAoaSA9IDA7IGkgPCBuX2VsdHM7ICsraSkNCj4gCXsNCj4gCSAgcnR4IHggPSBYVkVDRVhQICh2 YWxzLCAwLCBpKTsNCj4gCSAgaWYgKENPTlNUX0lOVF9QICh4KSB8fCBDT05TVF9ET1VCTEVfUCAo eCkpDQo+IAkgICAgbl9jb25zdCsrOw0KPiAJfQ0KPiAgICAgICBpZiAobl9jb25zdCA9PSBuX2Vs dHMpDQo+IAljb25zdF92ZWMgPSBnZW5fcnR4X0NPTlNUX1ZFQ1RPUiAobW9kZSwgWFZFQyAodmFs cywgMCkpOw0KPiAgICAgfQ0KPiAgIGVsc2UNCj4gICAgIGdjY191bnJlYWNoYWJsZSAoKTsNCj4g DQo+ICAgaWYgKGNvbnN0X3ZlYyAhPSBOVUxMX1JUWA0KPiAgICAgICAmJiBhYXJjaDY0X3NpbWRf dmFsaWRfaW1tZWRpYXRlIChjb25zdF92ZWMsIE5VTEwpKQ0KPiAgICAgLyogTG9hZCB1c2luZyBN T1ZJL01WTkkuICAqLw0KPiAgICAgcmV0dXJuIGNvbnN0X3ZlYzsNCj4gICBlbHNlIGlmICgoY29u c3RfZHVwID0gYWFyY2g2NF9zaW1kX2R1cF9jb25zdGFudCAodmFscywgY2hlY2spKSAhPQ0KPiBO VUxMX1JUWCkNCj4gICAgIC8qIExvYWRlZCB1c2luZyBEVVAuICAqLw0KPiAgICAgcmV0dXJuIGNv bnN0X2R1cDsNCj4gDQo+IGFuZCBhYXJjaDY0X3NpbWRfZHVwX2NvbnN0YW50IGRvZXM6DQo+IA0K PiAgIG1hY2hpbmVfbW9kZSBtb2RlID0gR0VUX01PREUgKHZhbHMpOw0KPiAgIG1hY2hpbmVfbW9k ZSBpbm5lcl9tb2RlID0gR0VUX01PREVfSU5ORVIgKG1vZGUpOw0KPiAgIHJ0eCB4Ow0KPiANCj4g ICBpZiAoIWNvbnN0X3ZlY19kdXBsaWNhdGVfcCAodmFscywgJngpKQ0KPiAgICAgcmV0dXJuIE5V TExfUlRYOw0KPiANCj4gICAvKiBXZSBjYW4gbG9hZCB0aGlzIGNvbnN0YW50IGJ5IHVzaW5nIERV UCBhbmQgYSBjb25zdGFudCBpbiBhDQo+ICAgICAgc2luZ2xlIEFSTSByZWdpc3Rlci4gIFRoaXMg d2lsbCBiZSBjaGVhcGVyIHRoYW4gYSB2ZWN0b3INCj4gICAgICBsb2FkLiAgKi8NCj4gICBpZiAo IWNoZWNrKQ0KPiAgICAgeCA9IGNvcHlfdG9fbW9kZV9yZWcgKGlubmVyX21vZGUsIHgpOw0KPiAg IHJldHVybiBnZW5fdmVjX2R1cGxpY2F0ZSAobW9kZSwgeCk7DQo+IA0KPiBGb3IgdGhlIOKAnGNo ZWNr4oCdIGNhc2UsIOKAnHjigJ0gd2lsbCBiZSBhIGNvbnN0YW50LCBhbmQgc28gZ2VuX3ZlY19k dXBsaWNhdGUgd2lsbCBjYWxsDQo+IGdlbl9jb25zdF92ZWNfZHVwbGljYXRlLCB3aGljaCB3aWxs IHJldHVybiBhIENPTlNUX1ZFQ1RPUi4NCj4gSXQgZGlkbid0IHNlZW0gdG8gYmUgcG9zc2libGUg Zm9yIGdlbl9pbnNuIHRvIGJlIGEgVkVDX0RVUExJQ0FURS4NCj4NCg0KWWVzLCBidXQgQ1NFIGNh biBhc2sgdGhlIGNvc3Qgb2YgYSBWRUNfRFVQTElDQVRFIGRpcmVjdGx5IG9uIGEgcmVnaXN0ZXIg d2l0aG91dCBnb2luZyB0aHJvdWdoIGdlbl9jb25zdF92ZWNfZHVwbGljYXRlDQp3aGljaCBpcyBp bnRlbmRlZCBhcyB0aGUgZ2VuXyBmdW5jdGlvbnMgY2FuIGhhdmUgc2lkZSBlZmZlY3RzIChlLmcu IGNyZWF0aW5nIG5ldyBwc3VlZG9zIGV0YykNCg0KSWYgc2F5IGl0IHNlZXMgYSBjb25zdGFudCB4 IGFuZCBhIHZlY3RvciBbeCB4IHggeF0gaXQgd2FudHMgdG8ga25vdyB3aGF0IHRoZSBjb3N0IGtl ZXBpbmcNCnggYW5kIG1hdGVyaWFsaXppbmcgW3ggeCB4IHhdIHZzIGRvaW5nIGEgZHVwbGljYXRl IG9mIHggaW50byBbeCB4IHggeF0gaXMuDQoNCkluIHRoaXMgY2FzZSBzaW5jZSBib3RoIHRoZSBj b25zdGFudCBhbmQgdGhlIHZlY3RvcnMgYXJlIG5lZWRlZCB5b3Ugd29uJ3QgZ2V0IGEgY29uc3Rh bnQgdGhlcmUgYnV0IGEgcmVnaXN0ZXIgc28geW91J2xsIGFjdHVhbGx5IHNlZSBhDQp2ZWNfZHVw LiBJZiBDU0UgcHVzaGVzIGluIHRoZSBjb25zdGFudCB0aGF0IHdvdWxkIGRlZmVhdCB0aGUgcG9p bnQg8J+Yii4gUmlnaHQgbm93IGl0J3MgQ1NFIHRoYXQncyBwdXNoaW5nIGNvbnN0YW50cyBvZiB2 ZWNfZHVwIGludG8gdmVjX2NvbnN0YW50cy4NCg0KTXkgY2hhbmdlIGlzIG1ha2luZyBpdCBleHBs aWNpdGx5IGFzayBmb3IgdGhlIGNvc3Qgb2YgZG9pbmcgdGhpcyBpbnN0ZWFkIG9mIGFzc3VtaW5n IGl0IGFsd2F5cyBjaGVhcGVyIGJlY2F1c2UgZm9yIGEgbGFyZ2UgbWFqb3JpdHkgb2YNCmNhc2Vz IGl0J3Mgbm90IGFjdHVhbGx5IGNoZWFwZXIgYW5kIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gdGhl IHRhcmdldHMgYWJpbGl0eSB0byBjcmVhdGUgc2FpZCBjb25zdGFudC4NCg0KU28gdGhpcyBob29r IHdpbGwgc2VlIGJvdGggdmVyc2lvbnMsIHRoZSBkdXAgb2YgdGhlIHJlZ2lzdGVyIGFuZCB0aGUg dmVjX2NvbnN0YW50IHdoaWxlIENTRSBpcyB0cnlpbmcgdG8gZGVjaWRlIHdoaWNoIG9uZSB0byBr ZWVwLg0KDQo+IFRoaXMgd291bGQgYmUgbXVjaCBzaW1wbGVyIGlmIHdlIGNvdWxkIGNhbGwgYWFy Y2g2NF9zaW1kX3ZhbGlkX2ltbWVkaWF0ZQ0KPiBhbmQgYWFyY2g2NF9zaW1kX2R1cF9jb25zdGFu dCBkaXJlY3RseSBmcm9tIHRoZSBydHggY29zdCBjb2RlLA0KDQpBZ3JlZWQuLi4gSSB0cmllZCB0 byBzZXBhcmF0ZSB0aGVtIGJlZm9yZSwgYnV0IHRoZSBsb2dpYyB3YXMgYW5ub3lpbmcgdG8gc3Bs aXQgYW5kIEkgdGhvdWdodCBub3Qgd29ydGggdGhlIGVmZm9ydCwgc28gaW5zdGVhZCBJIGp1c3QN CmNoYW5nZWQgaXQgdG8gaGF2ZSBhIGNoZWNraW5nIG9ubHkgbW9kZS4NCg0KPiBoZW5jZSB0aGUN Cj4gcXVlc3Rpb24gYWJvdXQgd2hldGhlciB0aGUgUEFSQUxMRUwgc3R1ZmYgd2FzIHJlYWxseSBu ZWVkZWQgaW4gcHJhY3RpY2UuDQo+IA0KPiA+PiA+ICsJICBkZWZhdWx0Og0KPiA+PiA+ICsJICAg ICpjb3N0ICs9IGV4dHJhX2Nvc3QtPmxkc3QubG9hZDsNCj4gPj4gPiArCSAgICBicmVhazsNCj4g Pj4gPiArCSAgfQ0KPiA+PiA+ICsJICByZXR1cm4gdHJ1ZTsNCj4gPj4gPiArCX0NCj4gPj4gPiAr ICAgIGNhc2UgVkVDX0NPTkNBVDoNCj4gPj4gPiArCS8qIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0 aW9uLCBlaXRoZXIgRFVQIG9yIElOUy4NCj4gPj4gPiArCSAgIEZvciBub3csIGtlZXAgZGVmYXVs dCBjb3N0aW5nLiAgKi8NCj4gPj4gPiArCWJyZWFrOw0KPiA+PiA+ICsgICAgY2FzZSBWRUNfRFVQ TElDQVRFOg0KPiA+PiA+ICsJKmNvc3QgKz0gZXh0cmFfY29zdC0+dmVjdC5kdXA7DQo+ID4+ID4g KwlyZXR1cm4gdHJ1ZTsNCj4gPj4gPiArICAgIGNhc2UgVkVDX1NFTEVDVDoNCj4gPj4gPiArCXsN Cj4gPj4gPiArCSAgLyogY29zdCBzdWJyZWcgb2YgMCBhcyBmcmVlLCBvdGhlcndpc2UgYXMgRFVQ ICovDQo+ID4+ID4gKwkgIHJ0eCBvcDEgPSBYRVhQICh4LCAxKTsNCj4gPj4gPiArCSAgaW50IG5l bHRzOw0KPiA+PiA+ICsJICBpZiAoKG9wMSA9PSBjb25zdDBfcnR4ICYmICFCWVRFU19CSUdfRU5E SUFOKQ0KPiA+PiA+ICsJICAgICAgfHwgKEJZVEVTX0JJR19FTkRJQU4NCj4gPj4gPiArCQkgICYm IEdFVF9NT0RFX05VTklUUyAobW9kZSkuaXNfY29uc3RhbnQoJm5lbHRzKQ0KPiA+PiA+ICsJCSAg JiYgSU5UVkFMIChvcDEpID09IG5lbHRzIC0gMSkpDQo+ID4+ID4gKwkgICAgOw0KPiA+PiA+ICsJ ICBlbHNlIGlmICh2ZWNfc2VyaWVzX2xvd3BhcnRfcCAobW9kZSwgR0VUX01PREUgKG9wMSksIG9w MSkpDQo+ID4+ID4gKwkgICAgOw0KPiA+PiA+ICsJICBlbHNlIGlmICh2ZWNfc2VyaWVzX2hpZ2hw YXJ0X3AgKG1vZGUsIEdFVF9NT0RFIChvcDEpLCBvcDEpKQ0KPiA+PiA+ICsJICAvKiBTZWxlY3Rp bmcgdGhlIGhpZ2ggcGFydCBpcyBub3QgdGVjaG5pY2FsbHkgZnJlZSwgYnV0IHdlIGxhY2sNCj4g Pj4gPiArCSAgICAgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRlY2lkZSB0aGF0IGhlcmUuICBGb3Ig aW5zdGFuY2Ugc2VsZWN0aW5nDQo+ID4+ID4gKwkgICAgIHRoZSBoaWdoLXBhcnQgb2YgYSB2ZWNf ZHVwICppcyogZnJlZSBvciB0byBmZWVkIGludG8gYW55IF9oaWdoDQo+ID4+ID4gKwkgICAgIGlu c3RydWN0aW9uLiAgIEJvdGggb2Ygd2hpY2ggd2UgY2FuJ3QgcmVhbGx5IHRlbGwuICBUaGF0IHNh aWQNCj4gPj4gPiArCSAgICAgaGF2ZSBhIGJldHRlciBjaGFuY2UgdG8gb3B0aW1pemUgYW4gZHVw IHZzIG11bHRpcGxlIGNvbnN0YW50cy4gICovDQo+ID4+ID4gKwkgICAgOw0KPiA+Pg0KPiA+PiBO b3Qgc3VyZSBhYm91dCB0aGlzLiAgV2UgYWxyZWFkeSB0cnkgdG8gZGV0ZWN0IHRoZSBsYXR0ZXIg Y2FzZSAoX2hpZ2gNCj4gPj4gaW5zdHJ1Y3Rpb25zKSB2aWEgYWFyY2g2NF9zdHJpcF9leHRlbmRf dmVjX2hhbGYuICBXZSBtaWdodCBiZSBtaXNzaW5nDQo+ID4+IHNvbWUgY2FzZXMsIGJ1dCB0aGF0 IHN0aWxsIGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHdheSB0byBnbyBJTU8uDQo+ID4NCj4gPiBUaGF0 J3MgYSBkaWZmZXJlbnQgcHJvYmxlbSBmcm9tIHdoYXQgSSB1bmRlcnN0YW5kLiAgV2hhdCB0aGlz IGlzDQo+ID4gdHJ5aW5nIHRvIHNheSBpcyB0aGF0IElmIHlvdSBoYXZlIGEgdmVjdG9yIFt4IHkg YSBiXSBhbmQgeW91IG5lZWQNCj4gPiB2ZWN0b3IgW3ggeV0gdGhhdCB5b3UgY2FuIHVzZSB0aGUg dG9wIHBhcnQgb2YgdGhlIG9yaWdpbmFsIHZlY3RvciBmb3IgdGhpcy4NCj4gPg0KPiA+IFRoaXMg aXMgYW4gYXBwcm94aW1hdGlvbiwgYmVjYXVzZSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgY3JlYXRl ZCB3aXRoIGENCj4gPiBtb3ZpIGlzIHByb2JhYmx5IENoZWFwZXIgdG8ga2VlcCBkaXN0aW5jdCBp ZiBpdCdzIG5vdCBnb2luZyB0byBiZSBwYWlyZWQgd2l0aCBhDQo+IF9oaWdoIG9wZXJhdGlvbiAo c2luY2UgeW91IHdpbGwgaGF2ZSBhIGR1cCB0aGVuKS4NCj4gPg0KPiA+IFRoZSBwcm9ibGVtIGlz IHRoYXQgdGhlIGZyb250IGVuZCBoYXMgYWxyZWFkeSBzcGl0IHRoZSB0d28gVmVjdG9ycyBpbnRv IFt4IHkNCj4gYSBiXSBhbmQgW3ggeV0uDQo+ID4gVGhlcmUncyBub3RoaW5nIGVsc2UgdGhhdCB0 cmllcyB0byBjb25zb2xpZGF0ZSB0aGVtIGJhY2sgdXAgaWYgYm90aCBzdXJ2aXZlLg0KPiA+DQo+ ID4gQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzLCB0aGUgdGVzdGNhc2UgdGVzdDAgaXMgbm90IGhh bmRsZWQgb3B0aW1hbGx5Lg0KPiA+IEl0IHdvdWxkIGluc3RlYWQgY3JlYXRlDQo+ID4gMiB2ZWN0 b3JzLCBib3RoIG9mIG1vdmkgMHgzLCBqdXN0IG9uZSBiZWluZyA2NC1iaXRzIGFuZCBvbmUgYmVp bmcgMTI4LWJpdHMuDQo+ID4NCj4gPiBTbyBpZiB0aGUgY29zdCBvZiBzZWxlY3RpbmcgaXQgaXMg Y2hlYXBlciB0aGFuIHRoZSBtb3ZpLCBjc2Ugd2lsbCBub3QNCj4gPiBjb25zb2xpZGF0ZSB0aGUg dmVjdG9ycywgYW5kIGJlY2F1c2UgbW92aSdzIGFyZSBzbyBjaGVhcCwgdGhlIG9ubHkNCj4gPiBj b3N0IHRoYXQgd29ya2VkIHdhcyAwLiAgQnV0IGluY3JlYXNpbmcgdGhlIGNvc3RzIG9mIG1vdmkn cyByZXF1aXJlcyB0aGUNCj4gY29zdHMgb2YgZXZlcnl0aGluZyB0byBiZSBpbmNyZWFzZWQgKGlu Y2x1ZGluZyBsb2FkcykuDQo+ID4NCj4gPiBJIHByZWZlcnJlZCB0byAwIG91dCB0aGUgY29zdCwg YmVjYXVzZSB0aGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuIGlzIGFuDQo+ID4gZHVwIGluc3RlYWQg b2YgYSBtb3ZpLCBBbmQgYXQgYmVzdCBhIGR1cCBpbnN0ZWFkIG9mIGEgbG9hZCBmcm9tIGEgcG9v bCAoaWYNCj4gdGhlIGNvbnN0YW50IGlzIGNvbXBsaWNhdGVkKS4NCj4gDQo+IEhtbSwgd2lsbCBu ZWVkIHRvIGxvb2sgYXQgdGhpcyBtb3JlIHRvbW9ycm93Lg0KPiANCj4gPj4gU2VsZWN0aW5nIHRo ZSBoaWdoIHBhcnQgb2YgYSB2ZWNfZHVwIHNob3VsZCBnZXQgZm9sZGVkIGludG8gYW5vdGhlcg0K PiB2ZWNfZHVwLg0KPiA+Pg0KPiA+PiBUaGUgbG93cGFydCBiaXRzIGxvb2sgT0ssIGJ1dCB3aGlj aCBwYXRocyBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dA0KPiA+PiBmaXJzdCBzaW1wbGlmeWlu ZyB0aGUgc2VsZWN0IHRvIGEgc3VicmVnPyAgVGhlIHN1YnJlZyBpcyBub3cgdGhlDQo+ID4+IGNh bm9uaWNhbCBmb3JtICh0aGFua3MgdG8gcjEyLTIyODgpLg0KPiA+DQo+ID4gVGhlIHNpbXBsaWZp Y2F0aW9uIHdpbGwgaGFwcGVuIGR1cmluZyBmb2xkaW5nIGluIGNzZSBvciBpbiBjb21iaW5lLg0K PiA+IFRoaXMgY29zdGluZyBoYXBwZW5zIGJlZm9yZSB0aGUgZm9sZGluZywgV2hlbiBDU0UgaXMg dHJ5aW5nIHRvIGRlY2lkZQ0KPiB3aGV0aGVyIHRvIHVuZG8gdGhlIGZyb250IGVuZCdzIGxvd2Vy aW5nIG9mIGNvbnN0YW50cy4NCj4gPg0KPiA+IFRvIGRvIHNvIGl0IG1vZGVscyB0aGUgY29uc3Rh bnRzIGFuZCB0aGUgc2VtYW50aWMgb3BlcmF0aW9uIHJlcXVpcmVkDQo+ID4gdG8gZXh0cmFjdCB0 aGVtLiBFLmcuIHRvIGdldA0KPiA+IDIgb3V0IG9mIFswIDIgNCA1XSBpdCB3b3VsZCBuZWVkIGEg VkVDX1NFTEVDVCBvZiAxLiBBbmQgSSBkb24ndCB0cmVhdA0KPiA+IHRoZSBmaXJzdCBlbGVtZW50 L2JvdHRvbSBwYXJ0IHNwZWNpYWwgSGVyZS4gIENvc3Rpbmcgd2lzZSB0aGV5IHdvdWxkIGJlDQo+ IHRoZSBzYW1lLg0KPiANCj4gQnV0IHdoaWNoIGNvZGUgcGF0aCBjcmVhdGVzIHRoZSBWRUNfU0VM RUNUPyAgV2UgZG9uJ3QgbmVlZCBhbnkgY29udGV4dCB0bw0KPiBrbm93IHRoYXQgdGhlIFZFQ19T RUxFQ1QgaXMgbm9uLWNhbm9uaWNhbC4gIEl0J3Mgb2J2aW91cyBmcm9tIHRoZSBvcGVyYW5kcw0K PiBvZiB0aGUgVkVDX1NFTEVDVCBpbiBpc29sYXRpb24uDQoNClRoZSBub24tY2Fubm9uaWNhbCBS VEwgaXMgbmV2ZXIgZ2VuZXJhdGVkLiBJIGFzc3VtZSB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSAw IGNhc2UgaGVyZQ0KU2luY2Ugc3VicmVncyBjYW4ndCBzZWxlY3QgYXJiaXRyYXJ5IGVsZW1lbnRz IChhcyBJIGFza2VkIGJlZm9yZSkuDQoNCkZvciB0aGUgMCBjYXNlIGl0J3Mgb25seSB0ZW1wb3Jh cmlseSBtb2RlbGxlZCBhcyBzdWNoIGFzIHN1Y2ggdG8ga2VlcCB0aGUgQ1NFIGFsdGVybmF0aXZl IGNvc3Rpbmcgc2ltcGxlLg0KQ3VycmVudGx5IGl0J3MganVzdCBhIGZvciBsb29wIGZvciBJID0g MCB0byB2ZWNfZWxlbXMuDQoNCldoZW4gaXQgY29tZXMgdGltZSB0byBnZW5lcmF0ZSB0aGUgYWN0 dWFsIGluc24gZm9sZF9ydHggaXMgY2FsbGVkIHdoaWNoIHdpbGwgZm9sZCB0aGUgVkVDX1NFTEVD VA0KSW50byBhIHN1YnJlZy4NCg0KU28gaXQncyBuZXZlciBlbWl0dGVkIGludG8gdGhlIGluc3Ry dWN0aW9uIHN0cmVhbSBpbiBpdHMgbm9uIGNhbm9uaWNhbCBmb3JtLg0KDQo+IA0KPiBJJ2QganVz dCByYXRoZXIgdGFja2xlIHRoaXMgYXQgc291cmNlIHRoYW4gdHJ5IHRvIGdldCB0aGUgY29zdCBj b2RlIHRvIGhhbmRsZQ0KPiBub24tY2Fub25pY2FsIHJ0bC4NCg0KSWYgdGhhdCdzIHdoYXQgaXMg cHJlZmVycmVkIEkgY2FuIGNoYW5nZSB0aGUgQ1NFIHBhdGNoIHRvIGdlbmVyYXRlIGEgc3VicmVn IGZvciB0aGUgMCBjYXNlLCBJJ20gbm90IHN1cmUgSSBhZ3JlZSB3aXRoIGl0DQphcyBDU0UgaXMg anVzdCB0cnlpbmcgdG8gYXNrICJ3aGF0IElzIHRoZSBjb3N0IG9mIHNlbGVjdGluZyB0aGUgZWxl bWVudCAwIGluIHRoaXMgdmVjdG9yIi4gIEFuZCBhcyBJIG1lbnRpb25lZCBiZWZvcmUNCml0IG5l dmVyIGVtaXRzIHRoZSBpbnN0cnVjdGlvbiB1bmZvbGRlZC4gIFRoaXMgcmVwcmVzZW50YXRpb24g c2VlbXMgdG8gYSBtb3JlIGxvZ2ljYWwgcmVwcmVzZW50YXRpb24gZm9yIGNvc3RpbmcgdG8gbWUu DQoNCkl0J3MgaG93ZXZlciB1bmZvcnR1bmF0ZSB0aGF0IHRoZXJlJ3Mgb25seSBvbmUgY29zdGlu ZyBjYWxsYmFjaywgYXMgZmFyIGFzIENTRSBpcyBjb25jZXJuZWQgdGhlIHJlcHJlc2VudGF0aW9u L2Zvcm0NCmRvZXNuJ3QgbWF0dGVyLCBpdCdzIGp1c3QgbG9va2luZyBhdCB0aGUgaGlnaCBsZXZl bCBvcGVyYXRpb24uDQoNCk9yIGlzIHRoZSBjb25jZXJuIGhlcmUgdGhhdCBtb3N0IHRhcmdldHMg d2lsbCBoYXZlIGNvc3RpbmcgZm9yIHN1YnJlZyAwIGJ1dCBub3QgVkVDX1NFTEVDVD8gSW4gd2hp Y2ggY2FzZSB3aXRob3V0DQpBY3R1YWxseSBoYW5kbGluZyB0aGUgY29zdHMgb2YgdGhlIG90aGVy IG9wZXJhdGlvbnMgdGhlIENTRSBjaGFuZ2VzIHdvbid0IGRvIGFueXRoaW5nIGZvciB0YXJnZXRz IGFueXdheS4gIEFuZCBpdCB3b3VsZA0KYmUgb2RkIGZvciBhIHRhcmdldCB0byBjb3N0IFZFQ19T RUxFQ1QgZnJvbSAxIHRvIDxOPiBpbnN0ZWFkIG9mIGp1c3QgY29zdGluZyAwIHRvby4NCg0KUmVn YXJkcywNClRhbWFyDQoNCj4gDQo+IFRoYW5rcywNCj4gUmljaGFyZA0K