From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Drew Adams Newsgroups: gmane.emacs.devel Subject: RE: [External] : Improvement proposals for `completing-read' Date: Wed, 7 Apr 2021 23:49:16 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="21195"; mail-complaints-to="usenet@ciao.gmane.io" To: Daniel Mendler , "emacs-devel@gnu.org" Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Apr 08 01:51:01 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lUHwr-0005Nb-FK for ged-emacs-devel@m.gmane-mx.org; Thu, 08 Apr 2021 01:51:01 +0200 Original-Received: from localhost ([::1]:43116 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lUHwq-0001zF-H9 for ged-emacs-devel@m.gmane-mx.org; Wed, 07 Apr 2021 19:51:00 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:42476) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUHvg-0001Wb-JJ for emacs-devel@gnu.org; Wed, 07 Apr 2021 19:49:48 -0400 Original-Received: from aserp2130.oracle.com ([141.146.126.79]:53118) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUHvc-0005cz-OY for emacs-devel@gnu.org; Wed, 07 Apr 2021 19:49:48 -0400 Original-Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 137NkO5i027329; Wed, 7 Apr 2021 23:49:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=corp-2020-01-29; bh=8bbpnswUlpnbqn+WZAYa0vXHTNMivaA/q6uJqk7rIGU=; b=MwB0HgwJZiyVzXGVZE3XPP+MGxOVvICrHhVprMxiHxcU8wiOFL1SfNgV6RcVPehITQQY Fibd36oGpIC4LmeARD7czNAcnTm6aMmFDTuPhm9dEIWOWJCzVxLKBM+sjSyZ/oPpcdJc lRvizqRI0W5O5RSED9uMn3/H27ic8n5JmqZBaB7Z8njRbp8fnItjFjaqnHJgg6NRxCXS VsAK5PYtkK3amVKXD9mpxGW0jQqZ1qkNO75SBFJl97HmBI9kpVxfMEmOgnVnZirPCA8p /r02/W1ivHTXx+T8/y684BoUX0IYrjWbrKRwcN3tvppk2eSJm5K0aD6Baf1yn0rigzSx bw== Original-Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by aserp2130.oracle.com with ESMTP id 37rvaw47yc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Apr 2021 23:49:21 +0000 Original-Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 137Nj86r181521; Wed, 7 Apr 2021 23:49:20 GMT Original-Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2105.outbound.protection.outlook.com [104.47.58.105]) by userp3020.oracle.com with ESMTP id 37rvb0guxs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Apr 2021 23:49:20 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WRXNbRfhNrIoPMB49gZuKCqPTmGwLOA+yVNf7HT2TM6X7cXeqoLvEp/Z2s2XxE8upbOwC0/PpS7T1wZPGAYLtZL4OirppaTcYAq43LogqiY+0ayCPYSKiy+Lnb+qG+hHpaMpaZykTwUA/ulk5KOD7srjHbVCTI8MBYBxwuAZvsEHVJesQ/0rXdlUScdcgEKsaOsK9Gf+gCnbO8GxrhN6ZWIF9Dk7GEIhHuwUXnFtsN1gVVAl4aM0oG0/JvG7EFe421oqFmz42gm2oYhIWDSGxKGzsWiC+H2Bsd0QyynO3D3tSjXV+OOm9T6CKJFWaA8MYR5Ut40vj5akSQv43ToZoA== 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=8bbpnswUlpnbqn+WZAYa0vXHTNMivaA/q6uJqk7rIGU=; b=aaD4MdeUKU+8ESlCuG4WnqKMpxRxS8mDi6Nvu2aaKIhro9WE2fIEA6mhqwEOOrPauDhuc1IOpAbiV8oWY74zm9lUTRNU8cpE8LAW9p56p6v1zAZD82Z9A/m0n3Cr/G7FafmCH5pZ2CAsWMqbrw4KjtuuhEq8cBzNOS6eYk5JR0R3wMiXBtEKczoP/60NuJmznp/ERBNiAvpvmRrRXMCEk5xFDMIE4wpCuVTRnTiAtknGzWBP6OuuS5EU3ZjNi9VT4IaB8wTJQo9arpdkhOreFCSNzc00avOzkHyD0wtFSXibCtUNQfcSz4n3BDC+PfUh4zGHMtudLjb3towSHMG7Mw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8bbpnswUlpnbqn+WZAYa0vXHTNMivaA/q6uJqk7rIGU=; b=kZK+cq1lMrjP48f2r0rQKvHSaULEcnH+XlkQ+NBhJDIhZFZZqCYhNePcnHQC3cBNyh6uq0rJnLpm6SFVO7bdEvxDwo53yU45NqYM8uHvjNwO52qwgQLaDsRJRa0/zCh+x068m7l0W7ivszxAz3US3dAXmW/5udi0nur8PAo70YQ= Original-Received: from SA2PR10MB4474.namprd10.prod.outlook.com (2603:10b6:806:11b::15) by SA2PR10MB4570.namprd10.prod.outlook.com (2603:10b6:806:11e::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.27; Wed, 7 Apr 2021 23:49:17 +0000 Original-Received: from SA2PR10MB4474.namprd10.prod.outlook.com ([fe80::b8d2:db6d:3e4b:d315]) by SA2PR10MB4474.namprd10.prod.outlook.com ([fe80::b8d2:db6d:3e4b:d315%5]) with mapi id 15.20.3999.032; Wed, 7 Apr 2021 23:49:17 +0000 Thread-Topic: [External] : Improvement proposals for `completing-read' Thread-Index: AQHXK5+ggB5M9PI2TESMfBu2shXXLaqpi0Cw In-Reply-To: Accept-Language: en-US Content-Language: en-US authentication-results: daniel-mendler.de; dkim=none (message not signed) header.d=none;daniel-mendler.de; dmarc=none action=none header.from=oracle.com; x-originating-ip: [73.170.83.28] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: bbb9f5e7-9ed9-485f-8931-08d8fa1fc188 x-ms-traffictypediagnostic: SA2PR10MB4570: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6430; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: byFxoash8oj3u0cnrmI5QdbaM6NDug5T1FlSMlcztSpyKVJh4HczM0utyiSVWRKtu+5Vk7YK+f06NvHQc1z3nLnJihmYXuYifhSNJR/0rlMBpcX7RznHUlUJnRJ4+pTPk1ga6kfdkq0eSLMeoUsR9PVakKVbsvzbFhxUSTAECJPOQBseGaxJgxObJWwoBBiMC3V9Z6h7bF7MseUcqFxtMWHf8VJTJAduaLSk3GGJ15BbMPlM2kgQ85TF5fywcOvQv/RD4+La8og6heOk1N6PKRUhwETTnNdIrKXz2h2CvI0y0x1v2LZTigZMtj/EofqlhEmLIoy4m+tyTDo5TV8Wf7flnM0w/HJTXb+djcI4xeboxWYGjjM5QBBk8ToBkJsxSigqEukwy9ofCG+kYBJtLHmAbW8cjQ5sQ6SVJuMrkA6OT7yon33yC6ASQnGd2YYScysM0fB3UysY2hIJtIZkdeYpyblsM/9oUcpvug4w2arRPiqS6dMzWaX8bSkALmfvoX42MmMURtYe6BdW8OwdRiMkKu1VhRR1xOv4yK5bX0YoWmj8wVvQpvax9CU+B/jNCPc+YSC29PHizg3/coRY5cw9924YCzVGhCJ4DrdkYWwEBYEB+PZvaDql8iVZaUln1r9oyvXv9zqFv21ilGVjbXHOAOPINZ0XLVthlxWAhRPS3yDFYrmKjjfV057Pi9CLoHTfqVGEzLsS8yxv1XWGuZV4McR+RT7IjK57fpKrqmg3DO0p2k8nnuuX/GJP2 zr0M1jzKHBXb8snwdbEgVVY4g== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA2PR10MB4474.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(39860400002)(366004)(396003)(376002)(136003)(346002)(64756008)(66556008)(66446008)(44832011)(66476007)(316002)(66946007)(52536014)(9686003)(71200400001)(55016002)(186003)(966005)(30864003)(7696005)(8936002)(76116006)(86362001)(38100700001)(33656002)(83380400001)(8676002)(5660300002)(110136005)(26005)(66574015)(2906002)(478600001)(6506007)(81973001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?REh4Y1hhYTRQd2JqR2ZpVHl4cWcxZmJnd25qekU2YVlrSHkrT01UaXNtZzRr?= =?utf-8?B?N1JMSGl6OXVrK1JQT1JTRHIwWThIeGdVV1NJSFNBaVpFZkRJN2NlU3kxQm52?= =?utf-8?B?V0pLTENqaXdMMmx2MGpJV2tYQTVSWk5NNW50czFKYU9CSlZlNEEzNExYUjBl?= =?utf-8?B?WDJYRkozSjB1UXI4UUdQbUE1OWZIY3E5empoNXBpa3J0ZVBMMFNwcEtMTm5Y?= =?utf-8?B?RGt2VU5mRDNjekFtTENIc1M3djJkeENYYUFWbUVqNHYwbjhjZXZpV3lCcHFO?= =?utf-8?B?d29qWDEyb3hHR281c242bDM3MVRPRmw1djhuWkZmei9reDRNSXpjb2s0Wjh6?= =?utf-8?B?enZaQWtUaDR1UndPc0F3UDhlN1pjVWY2MDRSV0pZMDRxU2hWckhTRCtRWWtC?= =?utf-8?B?SmFrbVpXTElxMnluS0RjU2ZhVmhJTlVKK1k2Smc5VWxvTDRRRWJNVkk2eXYz?= =?utf-8?B?eXBuVXNwOVFndTUydVZSaHJ6WCtsbU54RlZab1MzdnlRNDhVeUgwb2krSjh4?= =?utf-8?B?R3JRcEU3azZnSEdYV2MzQ2lOMzB6ZjJIUkMxNEJGMWZsTWM2NVVxYVo0R0dC?= =?utf-8?B?VzQ1WTQvT0ZMeE92VG55Z1FvdVdjS1lYQ29wbTNIM2MrNXgwUkxBdnF5dGJR?= =?utf-8?B?cW1Gd3hxUHlrUlFKU01rblJEMUsvdVVicmVXRHRM x-ms-exchange-transport-forked: True X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SA2PR10MB4474.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bbb9f5e7-9ed9-485f-8931-08d8fa1fc188 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Apr 2021 23:49:16.9840 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: KoAPWu7yj9Br8oii4CoVhY2p5/Xy1SOtXWR12eCPtq3tVmKQUJv3Pq1isjvP6OEFShUY8j2p/4ALwHac7vRMvg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4570 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=9947 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 adultscore=0 bulkscore=0 mlxlogscore=999 suspectscore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104060000 definitions=main-2104070170 X-Proofpoint-ORIG-GUID: lsJ0C7IJobI0bYa4R80NJE4MLQUvxyxp X-Proofpoint-GUID: lsJ0C7IJobI0bYa4R80NJE4MLQUvxyxp X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=9947 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 phishscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 mlxscore=0 bulkscore=0 impostorscore=0 adultscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104060000 definitions=main-2104070170 Received-SPF: pass client-ip=141.146.126.79; envelope-from=drew.adams@oracle.com; helo=aserp2130.oracle.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:267590 Archived-At: PiBJIHNlZSBgY29tcGxldGluZy1yZWFkJyBhcyBhIGNvbXBhcmF0aXZlbHkgY29tcGxpY2F0ZWQg QVBJLCB3aGljaCBpcw0KPiBoYXJkIHVzZSBhbmQgaGFyZCB0byBpbXBsZW1lbnQgaW4gaXRzIGZ1 bGwgZXh0ZW50Lg0KDQpZb3Ugc2VlIHRoYXQuICBPSy4gIFNwZWNpZmljcz8gIENvbXBsaWNhdGVk LCBzdXJlLA0KbWF5YmUuICBMaWtlIEVtYWNzLiAgQnV0IGhhcmQgdG8gdXNlIGFuZCBoYXJkIHRv DQppbXBsZW1lbnQ/ICBIb3cgc28/DQoNCj4gRm9yIHRoZSBlbmQtdXNlciBpdCBoZWxwcyB0byB3 cmFwIHRoZSBmdW5jdGlvbiBpbiBhIG1vcmUgZnJpZW5kbHkgQVBJLg0KDQpIb3cgZG9lcyBpdCBo ZWxwPyAgV2hhdCdzIG1vcmUgZnJpZW5kbHkgYWJvdXQgaXQ/DQpXaGF0J3MgdGhlIHByb2JsZW0g eW91IGl0IHRyaWVzIHRvIHNvbHZlPw0KDQo+IEVyaWMgQWJyYWhhbXNlbiBoYXMgdXNlZCBzdWNo IGFuIGFwcHJvYWNoIGluIGhpcyBHbm9yYiBwYWNrYWdlLCBzZWUNCj4gYGdub3JiLXNlbGVjdC1m cm9tLWxpc3QnLiBJIGhhdmUgZG9uZSB0aGUgc2FtZSBpbiBteSBDb25zdWx0IHBhY2thZ2UsDQo+ IHNlZSBgY29uc3VsdC0tcmVhZCcuIE1heWJlIG1vdmluZyB0byBhIG1vcmUgY29tZm9ydGFibGUg KGJ1dCBtb3N0bHkNCj4gYGNvbXBsZXRpbmctcmVhZCcgY29tcGF0aWJsZSkgQVBJIHdvdWxkIG1p dGlnYXRlIHRoZSB1c2FiaWxpdHkgaXNzdWVzDQo+IHBlb3BsZSBhcmUgb2JzZXJ2aW5nPw0KDQpN b3JlICJjb21mb3J0YWJsZSIgaW4gd2hhdCB3YXk/DQoNCldoYXQgdXNhYmlsaXR5IGlzc3Vlcz8g IChUaGlzIHNvdW5kcyBsaWtlIHRoZQ0KY2xhc3NpYywgIldoZW4gZGlkIHlvdSBzdG9wIGJlYXRp bmcgeW91ciB3aWZlPyIpDQoNCj4gRm9yIG5vdyBJIHdhbnQgdG8gYmUgYSBiaXQgbW9yZSBjb25j cmV0ZQ0KDQpUaGFuayBnb29kbmVzcy4NCg0KPiBhbmQgbG9vayBhdCBgY29tcGxldGluZy1yZWFk Jw0KPiBhbmQgYG1pbmlidWZmZXIuZWwnIGRpcmVjdGx5IGFuZCBwcm9wb3NlIGEgZmV3IG1vZGVy YXRlIGltcHJvdmVtZW50cy4NCj4gVGhlIGltcHJvdmVtZW50cyBjYW4gaGVscCBwYWNrYWdlIGF1 dGhvcnMgaW4gdGhlIHNob3J0IHRlcm0sIHNpbmNlIHRoZXkNCj4gYWRkcmVzcyBpc3N1ZXMgd2l0 aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgQVBJLg0KDQpQbGVhc2Ugc3BlY2lmeSB0aGUgaXNz dWVzIC0gImEgYml0IG1vcmUgY29uY3JldGUiLA0KcGxlYXNlLg0KDQo+IFRoZSBwcm9wb3NhbHMg aGF2ZSBiZWVuIGluc3BpcmVkIGJ5IHRoZSB3b3JrIG9uIHRoZSBhZm9yZW1lbnRpb25lZA0KPiBw YWNrYWdlcyBhbmQgY2FtZSB0byBsaWdodCBpbiBkaXNjdXNzaW9ucyB3aXRoIHRoZSByZXNwZWN0 aXZlIGF1dGhvcnMgb2YNCj4gdGhlIHBhY2thZ2VzOiBDbGVtZW5zIFJhZGVybWFjaGVyIG9mIFNl bGVjdHJ1bSwgT21hciBBbnRvbMOtbiBDYW1hcmVuYSBvZg0KPiBFbWJhcmsgYW5kIE9yZGVybGVz cywgYW5kIGFsc28gRG1pdHJ5IEd1dG92IGFuZCBQcm90ZXNpbGFvcyBTdGF2cm91Lg0KDQpIb3cg YWJvdXQgc3BlY2lmeWluZyB3aGF0ZXZlcidzIHJlbGV2YW50IHRoYXQgeW91DQpmZWVsIGNhbWUg b3V0IG9mIHRob3NlIGRpc2N1c3Npb25zPyAgT3Igc2hvdWxkIHdlDQpqdXN0IGFjY2VwdCB0aGF0 IHRoZSBTdW1taXQgTWVldGluZyBoYXMgZGVjaWRlZD8NCg0KPiBJIGFtIHZlcnkgbXVjaCBpbnRl cmVzdGVkIGluIHlvdXIgb3BpbmlvbiByZWdhcmRpbmcNCj4gdGhlIGZvbGxvd2luZyBwcm9wb3Nh bHMuDQoNCkknZCBsaWtlIHRvIGhlYXIgYWJvdXQgdGhlIHByb2JsZW1zIHRoZSBwcm9wb3NhbHMN CmFyZSBtZWFudCB0byBzb2x2ZS4NCg0KPiBJbXByb3ZlbWVudCBwcm9wb3NhbHMgZm9yIGBjb21w bGV0aW5nLXJlYWQnDQo+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCj4gDQo+IFByb3Bvc2FsIDE6IERpc2FibGluZyB0aGUgaGlzdG9yeQ0KPiB+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gDQo+ICAgIEkgcHJvcG9zZSB0byBhbGxvdyB0aGUg c3ltYm9sIGB0JyBhcyBgSElTVCcgYXJndW1lbnQgdG8NCj4gICAgYGNvbXBsZXRpbmctcmVhZCcg aW4gb3JkZXIgdG8gZGlzYWJsZSB0aGUgaGlzdG9yeS4gVGhpcyBhbGlnbnMNCj4gICAgYGNvbXBs ZXRpbmctcmVhZCcgd2l0aCBgcmVhZC1mcm9tLW1pbmlidWZmZXInLiBUaGlzIGNoYW5nZSByZXF1 aXJlcyBhDQo+ICAgIG1vZGlmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gYGNvbXBsZXRpb24tYWxs LXNvcnRlZC1jb21wbGV0aW9ucycsDQo+ICAgIHdoaWNoIHNvcnRzIHRoZSBjYW5kaWRhdGVzIGJ5 IGhpc3RvcnkgcG9zaXRpb24gYW5kIGN1cnJlbnRseSBhc3N1bWVzDQo+ICAgIHRoYXQgdGhlIGBt aW5pYnVmZmVyLWhpc3RvcnktdmFyaWFibGUnIGlzIGEgdmFyaWFibGUgc3ltYm9sLg0KDQpXaGF0 J3MgdGhlIHByb2JsZW0/ICBIb3cgZG9lcyBpdCBodXJ0IGZvciB1c2VycyB0bw0KaGF2ZSB0aGUg ZGVmYXVsdCBoaXN0b3J5LCBgbWluaWJ1ZmZlci1oaXN0b3J5JywNCmF2YWlsYWJsZT8gIFRoZXkg ZG9uJ3QgaGF2ZSB0byB1c2UgaXQsIHJpZ2h0Pw0KDQpJcyB5b3VyIGNvbXBsYWludCBhYm91dCB0 aGUgdGltZSB0byBzb3J0IGl0IChzZWUgbmV4dCk/DQoNCkknbSBub3Qgc2F5aW5nIEknbSBvcHBv c2VkIHRvIHlvdXIgcHJvcG9zZWQgc29sdXRpb24uDQpJJ20gc2F5aW5nIEkgaGF2ZW4ndCBzZWVu IHRoZSBwcm9ibGVtIHNwZWNpZmllZCB0aGF0DQp5b3UncmUgdHJ5aW5nIHRvIHNvbHZlLg0KDQo+ IFByb3Bvc2FsIDI6IE1vcmUgZWZmaWNpZW50IHNvcnRpbmcNCj4gfn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fg0KPiANCj4gICAgQ3VycmVudGx5IGNhbmRpZGF0ZSBzb3J0aW5nIGlz IGBPKG0qbipsb2cobikpJyB3aXRoIGhpc3RvcnkgbGVuZ3RoIG0NCj4gICAgYW5kIGNhbmRpZGF0 ZSBsaXN0IGxlbmd0aCBuLiBUaGlzIGxlYWRzIHRvIGEgbm90aWNlYWJsZSBzbG93ZG93biBmb3IN Cj4gICAgbGFyZ2UgdmFsdWVzIG9mIGBoaXN0b3J5LWxlbmd0aCcuIEkgcHJvcG9zZSB0byBpbXBy b3ZlIHRoZSBzcGVlZCBvZg0KPiAgICBgY29tcGxldGlvbi1hbGwtc29ydGVkLWNvbXBsZXRpb25z JyBieSB1c2luZyBhIGhhc2ggdGFibGUuIFRoZSBWZXJ0aWNvDQo+ICAgIHBhY2thZ2UgcHJvdmlk ZXMgYW4gb3B0aW1pemVkIHNvcnRpbmcgZnVuY3Rpb24sIHNlZSBgdmVydGljby0tc29ydCcuDQoN CkknbSBhbGwgZm9yIG1vcmUgc29ydCBvcmRlcnMgYW5kIGZhc3RlciBzb3J0IG9yZGVycy4NCldo byB3b3VsZG4ndCBiZT8NCg0KQnV0IEknZCBwcm9wb3NlIHRvIG5vdCBzb3J0IGluIGFueSBoYXJk LWNvZGVkIHdheSwgYW5kDQp0byBsZXQgX3VzZXJzXyBjb250cm9sIHdoYXQgc29ydCBvcmRlcnMg YXJlIHVzZWQgd2hlcmUuDQoNCkEgZ2l2ZW4gY29tbWFuZCAob3IgY2F0ZWdvcnkgb2YgY29tcGxl dGlvbiBjYW5kaWRhdGVzLA0Kb3IuLi4pIGNhbiBwcm92aWRlIGEgZ2l2ZW4gc2V0IG9mIHNvcnQg b3JkZXJzIGZvcg0KdXNlcnMgdG8gY2hvb3NlIGZyb20uDQoNCkluIEljaWNsZXMgdGhhdCdzIHRo ZSBjYXNlLiAgQW5kIHVzZXJzIGNhbiBjaGFuZ2UNCnRoZSBwb3NzaWJsZSBzb3J0IG9yZGVycyBh bmQgZ3JvdXBzIG9mIG9yZGVycy4gIFRoZXkNCmNhbiBldmVuIGN1c3RvbWl6ZSB0aGUgc29ydCBv cmRlcnMgdXNlZCBmb3IgY2hvb3NpbmcNCmFtb25nIHNvcnQgb3JkZXJzICh0aGF0IHRvbyBpcyBv biB0aGUgZmx5IHdpdGgNCmNvbXBsZXRpb24pLg0KDQo+IFByb3Bvc2FsIDM6IFNvcnQgZmlsZSBu YW1lcyBieSBoaXN0b3J5DQo+IH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ DQo+IA0KPiAgICBDdXJyZW50bHkgYGNvbXBsZXRpb24tYWxsLXNvcnRlZC1jb21wbGV0aW9ucycg ZG9lcyBub3Qgc29ydCBmaWxlDQo+ICAgIGNhbmRpZGF0ZXMgYmFzZWQgb24gaGlzdG9yeSwgd2hl biB0aGUgY2FuZGlkYXRlcyBhcmUgZmlsZSBuYW1lcyBhbmQNCj4gICAgdGhlIGhpc3RvcnkgZWxl bWVudHMgYXJlIHBhdGhzLiBUaGUgVmVydGljbyBwYWNrYWdlIGNvbnRhaW5zIHRoZQ0KPiAgICBm dW5jdGlvbiBgdmVydGljby0tc29ydCcgd2hpY2ggc3BlY2lhbCBjYXNlcyBmaWxlIG5hbWVzLiBU aGlzIGFwcHJvYWNoDQo+ICAgIGNvdWxkIGJlIGFkb3B0ZWQgYnkgYGNvbXBsZXRpb24tYWxsLXNv cnRlZC1jb21wbGV0aW9ucycuDQoNClNlZSBhYm92ZS4gIExpa2Ugb3RoZXIga2luZHMgb2YgY2Fu ZGlkYXRlcywgdGhlcmUgYXJlDQp1bXB0ZWVuIGludGVyZXN0aW5nL3VzZWZ1bCB3YXlzIHRvIHNv cnQgZmlsZS1uYW1lDQpjYW5kaWRhdGVzLg0KDQpUaGVzZSBhcmUgdGhlIHNvcnQgb3JkZXJzIElj aWNsZXMgcHJvdmlkZXMgYnkgZGVmYXVsdA0KZm9yIGZpbGUtbmFtZSBjYW5kaWRhdGVzLg0KDQog YWxwaGFiZXRpY2FsDQogYnkgMm5kIHBhcnRzIGFscGhhYmV0aWNhbGx5DQogYnkgZGlyZWN0b3Jp ZXMgZmlyc3QgDQogYnkgZGlyZWN0b3JpZXMgbGFzdCANCiBieSBmaWxlIHR5cGUNCiBieSBmbHgg c2NvcmUNCiBieSBsYXN0IGZpbGUNCiBhY2Nlc3MgdGltZSANCiBieSBsYXN0IGZpbGUgbW9kaWZp Y2F0aW9uIHRpbWUNCiBieSBsYXN0IHVzZQ0KIGJ5IGxhc3QgdXNlIGFzIGlucHV0DQogYnkgbGFz dCB1c2UsIGRpcnMgZmlyc3QgDQogYnkgcHJldmlvdXMgdXNlIGFscGhhYmV0aWNhbGx5DQogY2Fz ZSBpbnNlbnNpdGl2ZQ0KIGV4dHJhIGNhbmRpZGF0ZXMgZmlyc3QNCiBzcGVjaWFsIGNhbmRpZGF0 ZXMgZmlyc3QgDQogdHVybmVkIE9GRg0KDQpbYGJ5IDJuZCBwYXJ0cyBhbHBoYWJldGljYWxseScg aXMgZ2VuZXJpYyBmb3IgY29tbWFuZHMNCiB0aGF0IGxldCB5b3UgaW5wdXQgdHdvIG9yIG1vcmUg cGF0dGVybnMsIHRvIGNvbXBsZXRlDQogYWdhaW5zdCB0d28gb3IgbW9yZSAicGFydHMiIG9mIGNv bXBsZXRpb24gY2FuZGlkYXRlcw0KIChlYWNoIHBhcnQgaXMgb3B0aW9uYWwpLg0KDQogSW4gdGhl IGNhc2Ugb2YgZmlsZXMsIHRoZSB0d28gcGFydHMgYXJlICgxKSBmaWxlIG5hbWUNCiBhbmQgKDIp IGZpbGUgY29udGVudHMuICBTbyBzb3J0aW5nIGBieSAybmQgcGFydHMNCiBhbHBoYWJldGljYWxs eScgZm9yIGZpbGUtbmFtZSBjYW5kaWRhdGVzIHNvcnRzIGZpcnN0DQogYnkgdGhlIG1hdGNoZXMg YWdhaW5zdCBmaWxlIGNvbnRlbnQsIGFscGhhYmV0aWNhbGx5Ll0NCg0KQW5kIGl0J3MgdHJpdmlh bCB0byBkZWZpbmUgbmV3IHNvcnQgb3JkZXJzLCB1c2luZw0KbWFjcm8gYGljaWNsZS1kZWZpbmUt c29ydC1jb21tYW5kJy4NCg0KVG8gYmUgY2xlYXI6IHRoaXMgaXMgbm90IGFuIGFkdmVydGlzZW1l bnQgZm9yIEljaWNsZXMuDQpJdCdzIGFuIGFyZ3VtZW50IHRoYXQgdGhlcmUgYXJlIG1hbnkgdXNl ZnVsIHdheXMgdG8NCnNvcnQsIGFuZCB1c2VycyBzaG91bGQgYmUgYWJsZSB0byBjaG9vc2UsIG9u IHRoZSBmbHkuDQoNCj4gUHJvcG9zYWwgNDogQWRkIHN1cHBvcnQgZm9yIGBncm91cC1mdW5jdGlv bicNCj4gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gDQo+ ICAgIEdyb3VwaW5nIGNhbiBiZSBhZGRlZCB0byB0aGUgZGVmYXVsdCBjb21wbGV0aW9uIHN5c3Rl bSBieSBtb2RpZnlpbmcNCj4gICAgYGNvbXBsZXRpb24tYWxsLXNvcnRlZC1jb21wbGV0aW9ucycg YW5kIGBjb21wbGV0aW9uLS1pbnNlcnQtc3RyaW5ncycuDQoNClNvIHRoZSBvdmVyYWxsIHByb2Js ZW0geW91IHNheSB5b3Ugd2FudCB0byBzb2x2ZSBpcw0KdGhhdCBgY29tcGxldGluZy1yZWFkJyBp cyB0b28gY29tcGxleCwgaGFyZCB0byB1c2UsDQphbmQgaGFyZCB0byBpbXBsZW1lbnQuICBZZXQg eW91IHdhbnQgdG8gYWRkIHNvbWV0aGluZw0KbGlrZSB0aGlzLCB0byBtYWtlIGl0IGV2ZW4gbW9y ZSBjb21wbGV4IGFuZCBoYXJkIHRvDQppbXBsZW1lbnQ/IDstKQ0KDQpEb24ndCBnZXQgbWUgd3Jv bmcuICBJJ20gYWN0dWFsbHkgaW5jbGluZWQgdG93YXJkDQpzb21lIHN1Y2ggZ3JvdXBpbmcgYmVo YXZpb3IsIEZXSVcuDQoNCk15IG1haW4gY29uY2VybiBhYm91dCBmdXJ0aGVyIGNvbXBsaWNhdGlu ZyB0aGUgY29kZQ0KaW1wbGVtZW50aW5nIGBjb21wbGV0aW5nLXJlYWQnIGlzIHRoYXQgdGhpbmdz IHdpbGwNCmVuZCB1cCBoYXJkLWNvZGVkIC0gYW5kIGhlbmNlIGRpZmZpY3VsdCB0byB1c2UgYnkN CnVzZXJzIGFuZCBieSBpbXBsZW1lbnRlcnMgb2YgM3JkLXBhcnR5IGNvZGUuDQoNCk9uZSBwZXJz b24ncyBicmlsbGlhbnQgb25jZS1hbmQtZm9yLWFsbCBvcHRpbWl6YXRpb24NCmNhbiBiZSBhbm90 aGVyIHBlcnNvbidzIGhhcmQtY29kZWQgYmFsbCAmIGNoYWluLg0KDQo+IFByb3Bvc2FsIDU6IEZv cmJpZCB0aGUgbnVsbCBjb21wbGV0aW9ucyBmb3IgYFJFUVVJUkUtTUFUQ0g9dCcNCj4gfn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0K PiANCj4gICAgSWYgYGNvbXBsZXRpbmctcmVhZCcgaXMgcGFzc2VkIGB0JyBhcyBhcmd1bWVudCB0 byBgUkVRVUlSRS1NQVRDSCcsIHRoZQ0KPiAgICBjb21wbGV0aW9uIG11c3QgbWF0Y2ggYSBjYW5k aWRhdGUgZnJvbSB0aGUgY29tcGxldGlvbiB0YWJsZS4gSG93ZXZlcg0KPiAgICB0aGVyZSBpcyBh bHNvIHRoZSBwb3NzaWJpbGl0eSB0byBleGl0IHRoZSBtaW5pYnVmZmVyIHdpdGggYSBudWxsDQo+ ICAgIGNvbXBsZXRpb24uIEkgcHJvcG9zZSB0byBkaXNhbGxvdyB0aGlzIHBvc3NpYmlsaXR5LiBU aGlzIGNoYW5nZSBtYWtlcw0KPiAgICBpdCBlYXNpZXIgZm9yIHVzZXJzIG9mIGBjb21wbGV0aW5n LXJlYWQnIHNpbmNlIHRoZXkgY2FuIHJlbHkgb24NCj4gICAgc2V0dGluZyBgUkVRVUlSRS1NQVRD SCcgdG8gYHQnIGFuZCBkbyBub3QgaGF2ZSB0byBoYW5kbGUgdGhlIG51bGwNCj4gICAgY29tcGxl dGlvbiBzcGVjaWFsbHkuDQoNCldoZW4geW91IHNheSB1c2VycywgaGVyZSwgeW91IG1lYW4gcGVv cGxlIHdobyB3cml0ZQ0KY29kZSB0aGF0IHVzZXMgYGNvbXBsZXRpbmctcmVhZCcsIG5vdCB1c2Vy cyBvZiBzdWNoDQpjb2RlLCByaWdodD8NCg0KV2h5IGlzIHRoaXMgYSBwcm9ibGVtIGZvciB0aGVz ZSBjb2RlcnM/ICBJJ3ZlIG5ldmVyDQplbmNvdW50ZXJlZCBhIHByb2JsZW0gaW4gdGhpcyByZWdh cmQuICBDYW4geW91IHNwZWNpZnkNCmEgcHJvYmxlbSBoZXJlPw0KDQpFbXB0eSBjb21wbGV0aW9u IHJldHVybmluZyBhIHNwZWNpYWwgdmFsdWUgKG5hbWVseSAiIikNCmxldHMgY29kZSBrbm93IHRo YXQgdGhlIHVzZXIgcHJvdmlkZWQgZW1wdHkgY29tcGxldGlvbi4NClRoYXQncyBhIF9mZWF0dXJl Xy4NCg0KQ29kZSBjYW4gZG8gX2FueXRoaW5nXyBpdCB3YW50cyBpbiB0aGF0IGNhc2UuICBXaHkN CndvdWxkIHdlIGhhcmQtY29kZSB0aGUgYmVoYXZpb3IsIGJ5IGRpc2FsbG93aW5nDQpgY29tcGxl dGluZy1yZWFkJyBjYWxsZXJzIGZyb20ga25vd2luZyB0aGF0IGEgdXNlcg0KcHJvdmlkZWQgZW1w dHkgaW5wdXQ/DQoNCkFnYWluLCBtYXliZSB5b3UgaGF2ZSBhIGdvb2QgcmVhc29uIG9yIHR3byB3 aHkgdGhpcw0KaXMgbmVlZGVkLiAgQnV0IHNvIGZhciB5b3UndmUgbWVudGlvbmVkIG9ubHkgdGhl DQpkaWZmaWN1bHR5IGZvciBjb2RlcnMgLSBhbmQgeW91J3ZlIHNob3duIG5vIGV4YW1wbGUNCm9m IGV2ZW4gdGhhdCBkaWZmaWN1bHR5Lg0KDQpZb3UgcHJvcG9zZSB0byB0YWtlIGF3YXkga25vd2xl ZGdlIGJ5IGNvZGUgb2Ygd2hhdA0KYSB1c2VyIGlucHV0IGFjdGlvbiB3YXMuICBXaHk/ICBXaGF0 IHJlYWwgcHJvYmxlbQ0KaXMgdGhpcyBtZWFudCB0byBzb2x2ZT8NCg0KPiAgICBOb3RlIHRoYXQg bnVsbCBjb21wbGV0aW9uIGNhbm5vdCBvY2N1ciBpZiBhIGRlZmF1bHQgdmFsdWUgaXMgcGFzc2Vk IHRvDQo+ICAgIGBjb21wbGV0aW5nLXJlYWQnLiBUaGVyZWZvcmUgbnVsbCBjb21wbGV0aW9uIGNh biBiZSBhdm9pZGVkIGJ5IGENCj4gICAgd3JhcHBlciwgd2hpY2ggcGFzc2VzIGEgc3BlY2lhbCBk ZWZhdWx0IGFyZ3VtZW50LiBVbmZvcnR1bmF0ZWx5IHRoaXMNCj4gICAgbGVhZHMgdG8gZmxpY2tl ci4NCg0KTW9zdCBvZiB3aGF0IHlvdSB3cml0ZSBoZXJlICg5MCUpIHNlZW1zIHRvIGJlIGFib3V0 DQpzb2x1dGlvbnMgc28gZmFyLCB3aXRob3V0IHRoZSBwcm9ibGVtcyBoYXZpbmcgYmVlbg0KcHJl c2VudGVkIHlldC4gIEkgdGhpbmsgSSBzZWUgbW9yZSBhYm91dCB3aGF0IHlvdQ0KdGhpbmsgYXJl IGhhbmRpY2FwcyBmb3IgaW1wbGVtZW50ZXJzIGFuZCBsZXNzIGFib3V0DQp3aGF0IG1pZ2h0IGJl bmVmaXQgdXNlcnMuICBUaGF0IHNlZW1zIGJhY2t3YXJkcywgYXMNCmFuIEVtYWNzIHByaW9yaXR5 Lg0KDQo+ICAgIElmIGl0IGlzIGRlc2lyZWQgdG8gYXZvaWQgYSBiYWNrd2FyZCBpbmNvbXBhdGli bGUgY2hhbmdlIG9uZSBjb3VsZA0KPiAgICBjb25zaWRlciBhZGRpbmcgYSBuZXcgc3BlY2lhbCB2 YWx1ZSBmb3IgYFJFUVVJUkUtTUFUQ0gnLCBmb3IgZXhhbXBsZQ0KPiAgICBgJ3JlcXVpcmUtY2Fu ZGlkYXRlJywgd2hpY2ggZXhwbGljaXRseSBmb3JiaWRzIG51bGwgY29tcGxldGlvbi4NCg0KTXVj aCBiZXR0ZXIhICBCdXQgSSBzdGlsbCB3b25kZXIgd2hhdCB0aGUgdXNlIGNhc2UNCihwcm9ibGVt KSBpcy4NCg0KPiBQcm9wb3NhbCA2OiBSZXR1cm4gdGV4dCBwcm9wZXJ0aWVzIGZyb20gYGNvbXBs ZXRpbmctcmVhZCcNCj4gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+DQoNCjEwMCUgYWdyZWVtZW50LiAgSSBwcm9wb3NlZCB0aGlzIGEgemls bGlvbiB5ZWFycyBhZ28NCihhbmQgYWRkZWQgaXQgdG8gSWNpY2xlcykuICBSZWplY3RlZCBmb3Ig RW1hY3MuICBCdXQNCnRoaXMgZmVhdHVyZSBzaG91bGQgb25seSBiZSBfcG9zc2libGVfLCBub3Qg aW1wb3NlZC4NCg0KSSBkaWQgZmluYWxseSBnZXQgdmFuaWxsYSBFbWFjcyB0byBub3Qgc3RyaXAg dGV4dA0KcHJvcGVydGllcyBieSBkZWZhdWx0IGZvciBgcmVhZC1mcm9tLW1pbmlidWZmZXInIGFu ZA0KYHJlYWQtc3RyaW5nJy4gIEJ1dCB0aGlzIHdhcyByZWZ1c2VkIGZvciAiYW55IG9mIHRoZQ0K ZnVuY3Rpb25zIHRoYXQgZG8gbWluaWJ1ZmZlciBpbnB1dCB3aXRoIGNvbXBsZXRpb247DQp0aGV5 IGFsd2F5cyBkaXNjYXJkIHRleHQgcHJvcGVydGllcy4iICAoYEMtaCB2DQptaW5pYnVmZmVyLWFs bG93LXRleHQtcHJvcGVydGllcycpDQoNCkluIEljaWNsZXMgdGhpcyBpcyBnb3Zlcm5lZCBieSBv cHRpb24NCmBpY2ljbGUtdW5wcm9wZXJ0aXplLWNvbXBsZXRpb24tcmVzdWx0LWZsYWcnOg0KDQog IE5vbi1uaWwgbWVhbnMgc3RyaXAgdGV4dCBwcm9wZXJ0aWVzIGZyb20gdGhlIGNvbXBsZXRpb24g cmVzdWx0Lg0KICBTZXQgb3IgYmluZCB0aGlzIG9wdGlvbiB0byBub24tbmlsIG9ubHkgaWYgeW91 IG5lZWQgdG8gZW5zdXJlLA0KICBmb3Igc29tZSBvdGhlciBsaWJyYXJ5LCB0aGF0IHRoZSBzdHJp bmcgcmV0dXJuZWQgYnkNCiAgYGNvbXBsZXRpbmctcmVhZCcgYW5kIGByZWFkLWZpbGUtbmFtZScg aGFzIG5vIHRleHQgcHJvcGVydGllcy4NCg0KICBUeXBpY2FsbHksIHlvdSB3aWxsIG5vdCB1c2Ug YSBub24tbmlsIHZhbHVlLiAgSW50ZXJuYWwgdGV4dA0KICBwcm9wZXJ0aWVzIGFkZGVkIGJ5IElj aWNsZXMgYXJlIGFsd2F5cyByZW1vdmVkIGFueXdheS4gIEENCiAgbm9uLW5pbCB2YWx1ZSBsZXRz IHlvdSBhbHNvIHJlbW92ZSBwcm9wZXJ0aWVzIHN1Y2ggYXMgYGZhY2UnLg0KDQogIFJlbWVtYmVy IHRoYXQgeW91IGNhbiB1c2UgbXVsdGktY29tbWFuZCBgaWNpY2xlLXRvZ2dsZS1vcHRpb24nDQog IGFueXRpbWUgKGBNLWkgTS1pJyBkdXJpbmcgY29tcGxldGlvbikgdG8gdG9nZ2xlIGFuIG9wdGlv bg0KICB2YWx1ZS4NCg0KPiBQcm9wb3NhbCA3OiBBbGxvdyBkdXBsaWNhdGVzIGFuZCByZXRhaW4g b2JqZWN0IGlkZW50aXR5DQo+IH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn4NCj4gDQo+ICAgIElmIGEgY29tcGxldGlvbiB0YWJsZSBjb250YWlu cyBkdXBsaWNhdGVzLCB0aGVzZQ0KPiAgICBkdXBsaWNhdGVzIHNob3VsZCBub3QgYmUgcmVtb3Zl ZC4NCg0KQWJzb2x1dGVseS4gIFRoaXMgbWFuaWEgd2FzIHBlcmhhcHMgYSBzaWRlIGVmZmVjdCBv Zg0KdGhvc2UgZW5hbW91cmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgaGFzaCB0YWJsZXMgdG8N CkVtYWNzLiAgU3VjaCBuby1kdXBsaWNhdGUta2V5cyBtYXBzIGFyZSBncmVhdDsgdGhleQ0KaGF2 ZSB0aGVpciBwbGFjZS4gIEJ1dCBpdCBkb2Vzbid0IGZvbGxvdyB0aGF0IHRoZXJlDQphcmUgbm8g dXNlIGNhc2VzIGZvciBjb21wbGV0aW9uIHdoZXJlIHRoZSBjYW5kaWRhdGVzDQp5b3UgY2hvb3Nl IGFtb25nIGFyZSBkdXBsaWNhdGVzLg0KDQpJdCdzIGEgZ3JlYXQgdGhpbmcgKHRob3VnaCBhZG1p dHRlZGx5IHNvbWV0aW1lcyBhIGJpdA0Kb2YgYSBib3RoZXIpIHRoYXQgZm9yIEVtYWNzIGEgY29t cGxldGlvbiBjYW5kaWRhdGUNCnRoYXQgeW91IGNob29zZSBpcyBhIHN0cmluZyBidXQgdGhlICJm dWxsIGNhbmRpZGF0ZSINCmZvciB0aGUgdW5kZXJseWluZyBwcm9ncmFtIGNhbiBiZSBhbiBhbGlz dCBlbnRyeSwgYQ0KaGFzaC10YWJsZSBrZXkrdmFsdWUgcGFpciwgZXRjLg0KDQooRXZlbiBjYXNl cyB3aGVyZSBib3RoIHRoZSBrZXkgYW5kIHZhbHVlIGFyZSBlcXVhbCAtDQppbiB3aGF0ZXZlciBz ZW5zZSAtIGFyZSBwb3NzaWJsZS4gIEJ1dCB0eXBpY2FsbHkgb25seQ0KdGhlIGtleXMgYXJlIGR1 cGxpY2F0ZXMuKQ0KDQpUaGlzIGZlYXR1cmUgaXMgdXNlZCBvZnRlbiBpbiBteSBjb2RlLiAgQW5k IGluIG1hbnkNCmNhc2VzIEkgcHV0IHRoZSAiZnVsbCBjYW5kaWRhdGUiIHRoaW5neSBvbiB0aGUg c3RyaW5nDQp0aGF0IGdldHMgZGlzcGxheWVkIHRvIHVzZXJzIGFzIGEgdGV4dCBwcm9wZXJ0eSwg Zm9yDQp1bmFtYmlndW91cyByZXRyaWV2YWwgb2YgdGhlIGZ1bGwgdmFsdWUgZnJvbSB0aGUNCnJl dHVybmVkIGNob3NlbiBzdHJpbmcuDQoNCihPZiBjb3Vyc2UsIGlmIHRoZSByZXR1cm5lZCBzdHJp bmcgZG9lc24ndCByZXN1bHQNCmZyb20gY2hvb3NpbmcgYSBjYW5kaWRhdGUgYnV0IGZyb20gdXNl ciB0ZXh0IGlucHV0LA0KdGhhdCBjaGFuZ2VzIHBvc3NpYmlsaXRpZXMgLSBpdCB3b24ndCBjYXJy eSB0aGUgZnVsbA0KY2FuZGlkYXRlIG9uIGl0cyBzaG91bGRlci4pDQoNCj4gICAgVGhlcmUgYXJl IG5vdCBtYW55IGNvbXBsZXRpb24gdGFibGVzIHdoaWNoIGdlbmVyYXRlDQo+ICAgIGR1cGxpY2F0 ZSBjYW5kaWRhdGVzDQoNCkRvIHlvdSBtZWFuIG5vdCBtYW55IF9raW5kc18gb2YgY29tcGxldGlv biB0YWJsZXMsDQpvciBub3QgbWFueSBjb21wbGV0aW9uIHRhYmxlcyAoaW4gcHJhY3RpY2UpPyAg SWYNCnlvdSBtZWFuIHRoZSBsYXR0ZXIsIEknZCBsaWtlIHRvIGtub3cgd2h5IHlvdSB0aGluaw0K dGhhdCwgYXMgSSBkb3VidCBpdCdzIHRoZSBjYXNlLiAgKE5vLCBJIGRvbid0IGhhdmUNCm51bWJl cnMgZWl0aGVyLikNCg0KPiAgICBhbmQgdGhlcmUgZXhpc3QgbXVsdGlwbGUgY29tcGxldGlvbiBz eXN0ZW1zDQo+ICAgIHdoaWNoIGRvIG5vdCBwZXJmb3JtIGRlZHVwbGljYXRpb24gYXQgYWxsLg0K DQpJY2ljbGVzIGFtb25nIHRoZW0uDQoNCk9yLCByYXRoZXIsIHRoaXMgaXMgdW5kZXIgcHJvZ3Jh bSBjb250cm9sLiAgQW5kDQpldmVuIHVuZGVyIHVzZXIgY29udHJvbC4gIFtZb3UgbWF5IGJlIHNl bnNpbmcgYQ0KcGF0dGVybiwgaGVyZS4uLiAgTW9yZSB1c2VyIGNvbnRyb2wsIGxlc3MNCmRlY2lk aW5nIGF0IGRlc2lnbiB0aW1lIChha2EgaGFyZC1jb2RpbmcpLl0NCg0KVmFyaWFibGUgYGljaWNs ZS10cmFuc2Zvcm0tZnVuY3Rpb24nOg0KDQogIEZ1bmN0aW9uIHVzZWQgdG8gdHJhbnNmb3JtIHRo ZSBsaXN0IG9mIGNvbXBsZXRpb24gY2FuZGlkYXRlcy4NCiAgVGhpcyBpcyBhcHBsaWVkIHRvIHRo ZSBsaXN0IG9mIGluaXRpYWwgY2FuZGlkYXRlcy4NCiAgSWYgdGhpcyBpcyBuaWwsIHRoZW4gbm8g dHJhbnNmb3JtYXRpb24gdGFrZXMgcGxhY2UuDQoNCiAgWW91IGNhbiB0b2dnbGUgdGhpcyBhdCBh bnkgdGltZSBmcm9tIHRoZSBtaW5pYnVmZmVyIHVzaW5nIGBDLSQsJy4NCg0KICBUaGUgdmFsdWUg aXMgY2hhbmdlZCBieSBwcm9ncmFtIGxvY2FsbHksIGZvciB1c2UgaW4gcGFydGljdWxhcg0KICBj b250ZXh0cy4gIEUuZy4sIHdoZW4geW91IHVzZSBgQy1jIEMtYCcgKGBpY2ljbGUtc2VhcmNoLWdl bmVyaWMnKQ0KICBpbiBhIGAqc2hlbGwqJyBidWZmZXIsIEljaWNsZXMgdXNlcyB0aGlzIHZhcmlh YmxlIHdpdGggYSB2YWx1ZSBvZg0KICBgaWNpY2xlLXJlbW92ZS1kdXBsaWNhdGVzJywgdG8gcmVt b3ZlIGR1cGxpY2F0ZSBzaGVsbCBjb21tYW5kcw0KICBmcm9tIHlvdXIgaW5wdXQgaGlzdG9yeSBs aXN0Lg0KDQogIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgaW4geW91ciBMaXNwIGNvZGUgdG8g dHJhbnNmb3JtIHRoZSBsaXN0DQogIG9mIGNhbmRpZGF0ZXMgYW55IHdheSB5b3UgbGlrZS4gIEEg dHlwaWNhbCB1c2UgaXMgdG8gcmVtb3ZlDQogIGR1cGxpY2F0ZXMsIGJ5IGJpbmRpbmcgaXQgdG8g YGljaWNsZS1yZW1vdmUtZHVwbGljYXRlcycgb3INCiAgYGljaWNsZS1yZW1vdmUtZHVwcy1pZi1l eHRyYXMnLg0KDQpJbnRlcmFjdGl2ZWx5LCBgQy0kJyBjYW4gYmVoYXZlIGRpZmZlcmVudGx5LA0K ZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbW1hbmQgKGFjdHVhbGx5LCB0aGUNCmN1cnJlbnQg dXNlIG9mIGBjb21wbGV0aW5nLXJlYWQnKS4NCg0KPiAgICBJdCBpcyByZWFzb25hYmxlIHRvIGhh bmRsZSB0aGUgZGVkdXBsaWNhdGlvbiBvbiBhDQo+ICAgIGNhc2UgYnkgY2FzZSBiYXNpcyBpbiBl YWNoIGNvbXBsZXRpb24gdGFibGUuIA0KDQpBbWVuLg0KDQo+ICAgIEFsbG93aW5nIGR1cGxpY2F0 ZXMgaXMgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgYW5kDQo+ICAgIGFsbG93cyB0byByZXRhaW4g dGhlIG9iamVjdCBpZGVudGl0eSBvZiB0aGUgY2FuZGlkYXRlcy4NCg0KVGhlIGxhdHRlciBpcyB0 aGUgcmVhc29uIHRvIHJldGFpbiB0aGlzIGZlYXR1cmUuDQpJdCdzIGltcG9ydGFudC4gIFRoZSBm b3JtZXIgaXNuJ3QgaW1wb3J0YW50LCBJTU8uDQoNCj4gICAgSWYgYSBjYW5kaWRhdGUgaXMgc2Vs ZWN0ZWQNCj4gICAgd2hpY2ggaXMgcGFydCBvZiB0aGUgY29sbGVjdGlvbiwgdGhpcyBleGFjdCBj YW5kaWRhdGUgc2hvdWxkIGJlDQo+ICAgIHJldHVybmVkLiBUaGlzIHN1YnN1bWVzIFByb3Bvc2Fs IDYgYW5kIGFsbG93cyB0byB1c2UgdGV4dCBwcm9wZXJ0aWVzDQo+ICAgIGZvciBkaXNhbWJpZ3Vh dGlvbiBvZiBjYW5kaWRhdGVzLg0KPiANCj4gICAgTm90ZSB0aGF0IHRoaXMgcHJvcG9zYWwgaXMg dXNlZnVsIG1haW5seSBmb3IgY29tcGxldGlvbiB0YWJsZXMgd2hpY2gNCj4gICAgZGlzYWJsZSBz b3J0aW5nIGJ5IHNldHRpbmcgYGRpc3BsYXkvY3ljbGUtc29ydC1mdW5jdGlvbicgdG8gdGhlDQo+ ICAgIGlkZW50aXR5IGZ1bmN0aW9uLg0KDQpXaHk/ICAoSSdtIHByZXR0eSBzdXJlIEkgZGlzYWdy ZWUuKQ0KDQpCdXQgbWF5YmUgeW91IGp1c3QgbWVhbiB0aGF0IGlmIHlvdSBzb3J0IHRoZQ0KY2Fu ZGlkYXRlcyBieSB0YWtpbmcgdGhlaXIgIm9iamVjdCBpZGVudGl0eSIgaW50bw0KYWNjb3VudCB0 aGVuIHRoYXQgY2FuIGhlbHAgZGV0ZXJtaW5lIGp1c3Qgd2hpY2gNCmR1cGxpY2F0ZSBhIHVzZXIg Y2hvc2UuDQoNCklmIHNvLCB0aGF0J3MganVzdCBpbXBsZW1lbnRhdGlvbi4gIEFuZCBpdCBjYW4N Cm1lYW4ganVtcGluZyB0aHJvdWdoIGFkZGl0aW9uYWwgaG9vcHMuDQoNCj4gICAgQ3VycmVudGx5 IGlmIGlkZW50aWNhbCBjYW5kaWRhdGUgc3RyaW5ncyBhcmUgdXNlZCBmb3INCj4gICAgY29tcGxl dGlvbiwgdGhlc2Ugc3RyaW5ncyBtdXN0IGJlIG1hbnVhbGx5IGRpc2FtYmlndWF0ZWQNCg0KWWVz LiAgQW5kIHJlbHlpbmcgb24gYSBzb3J0IG9yZGVyIHRvIGRpc2FtYmlndWF0ZQ0KdGhlbSBpcyB5 ZXQgYW5vdGhlciByb3VuZGFib3V0IGhhY2suICBNw6ptZSBjb21iYXQuDQoNCj4gICAgRnVydGhl cm1vcmUgdGhlIGRpc2FtYmlndWF0aW9uIGlzc3VlIG9jY3VycyB3aGVuDQo+ICAgIG1peGluZyBj YW5kaWRhdGVzIGZyb20gZGlmZmVyZW50IGNhbmRpZGF0ZSBzb3VyY2VzLg0KDQpJbmRlZWQuDQoN Cj4gUHJvcG9zYWwgODogQ29tcGxldGlvbiBzdHlsZSBvcHRpbWl6YXRpb24gb2YgZmlsdGVyaW5n IGFuZCBoaWdobGlnaHRpbmcNCj4gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gDQo+ICAgIFdoaWxlIHdvcmtp bmcgb24gU2VsZWN0cnVtIGFuZCBWZXJ0aWNvIGl0IGhhcyBiZWVuIGZvdW5kIHRoYXQNCj4gICAg aGlnaGxpZ2h0aW5nIGhhcyBhIHNpZ25pZmljYW50IGNvc3QuIA0KDQpBZ2FpbiwgcGxlYXNlIGV4 cGxhaW4ganVzdCB3aGF0J3MgYmVlbiBmb3VuZCwNCmluc3RlYWQgb2YgcmVwb3J0aW5nIHdoYXQg eW91J3ZlIGRlY2lkZWQuICBEZXRhaWxzDQptYXR0ZXIuICBXaGF0IGtpbmQgb2YgaGlnaGxpZ2h0 aW5nPyAgV2hlbiBhbmQgaG93DQp3YXMgaGlnaGxpZ2h0aW5nIGRvbmUsIGFuZCB0byB3aGF0PyAg V2hhdCB3YXMgdHJpZWQ/DQpJbiB3aGF0IGNvbnRleHRzPyAgSnVzdCB3aGF0IHByb2JsZW1zIHdl cmUgZm91bmQ/DQoNCj4gICAgVGhpcyBtYXR0ZXJzIGlmIHRoZSBudW1iZXIgb2YNCj4gICAgZGlz cGxheWVkIGNhbmRpZGF0ZXMgZGlmZmVycyBncmVhdGx5IGZyb20gdGhlIG51bWJlciBvZiBmaWx0 ZXJlZA0KPiAgICBjYW5kaWRhdGVzLiBUaGVyZWZvcmUgaXQgd291bGQgYmUgZ29vZCB0byBoYXZl IGEgcG9zc2liaWxpdHkgdG8NCj4gICAgc2VwYXJhdGUgaGlnaGxpZ2h0aW5nIGFuZCBmaWx0ZXJp bmcuIA0KDQpJZiB5b3UncmUgY3JpdGlxdWluZyB0aGUgaGlnaGxpZ2h0aW5nIGRvbmUgYnkNCnZh bmlsbGEgYGNvbXBsZXRpbmctcmVhZCcsIHRoZW4gSSBhZ3JlZSB0aGF0IHN1Y2gNCmhpZ2hsaWdo dGluZyBpc24ndCBncmVhdC4gIFRvbyBlYWdlciAodG9vIGVhcmx5KSwNCmFuZCB0b28gYmxhbmtl dCAoaGFyZC1jb2RlZCkuDQoNCkFzIFN0ZWZhbiBzYWlkIHJlY2VudGx5LCB0aGF0IG9sZCBoaWdo bGlnaHRpbmcNCndhcyBPSyBmb3Igc2ltcGxlIHByZWZpeCBtYXRjaGluZy4gIEl0IGp1c3QgZ2V0 cw0KaW4gdGhlIHdheSBmb3Igb3RoZXIga2luZHMgb2YgbWF0Y2hpbmcuDQoNCkljaWNsZXMganVz dCB0b3NzZXMgdGhhdCBoaWdobGlnaHRpbmcNCihib3RoIGBjb21wbGV0aW9ucy1jb21tb24tcGFy dCcgYW5kDQpgY29tcGxldGlvbnMtZmlyc3QtZGlmZmVyZW5jZScpIG91dCB0aGUgd2luZG93DQph bmQgdXNlcyBpdHMgb3duLg0KDQooZGVmdW4gaWNpY2xlLXVuZG8tc3RkLWNvbXBsZXRpb24tZmFj ZXMgKCkNCiAgIkdldCByaWQgb2Ygc3RhbmRhcmQgY29tcGxldGlvbi1yb290IGhpZ2hsaWdodGlu ZyBpbiBgKkNvbXBsZXRpb25zKicuIg0KICAod2hlbiAoZmJvdW5kcCAnZmFjZS1zcGVjLXJlc2V0 LWZhY2UpDQogICAgKHdoZW4gKGZhY2VwICdjb21wbGV0aW9ucy1jb21tb24tcGFydCkNCiAgICAg IChmYWNlLXNwZWMtcmVzZXQtZmFjZSAnY29tcGxldGlvbnMtY29tbW9uLXBhcnQpDQogICAgICAo c2V0LWZhY2UtYXR0cmlidXRlICdjb21wbGV0aW9ucy1jb21tb24tcGFydCBuaWwgOmluaGVyaXQg bmlsKSkNCiAgICAod2hlbiAoZmFjZXAgJ2NvbXBsZXRpb25zLWZpcnN0LWRpZmZlcmVuY2UpDQog ICAgICAoZmFjZS1zcGVjLXJlc2V0LWZhY2UgJ2NvbXBsZXRpb25zLWZpcnN0LWRpZmZlcmVuY2Up DQogICAgICAoc2V0LWZhY2UtYXR0cmlidXRlICdjb21wbGV0aW9ucy1maXJzdC1kaWZmZXJlbmNl IG5pbCA6aW5oZXJpdCBuaWwpKSkpDQoNCkljaWNsZXMgZG9lcyB0aGUgZm9sbG93aW5nIGtpbmQg b2YgY29tbW9uLW1hdGNoDQpleHBhbnNpb24gKGJ5IGRlZmF1bHQpLCBhbmQgeWVzLCBoaWdobGln aHRpbmcgY2FuDQpiZSBoYXJkL3Byb2JsZW1hdGljIGZvciBzb21lIGtpbmRzIG9mIG1hdGNoaW5n Lg0KDQpodHRwczovL3d3dy5lbWFjc3dpa2kub3JnL2VtYWNzL0ljaWNsZXNfLV9FeHBhbmRlZC1D b21tb24tTWF0Y2hfQ29tcGxldGlvbg0KDQo+ICAgIEluIHRoZSBPcmRlcmxlc3MNCj4gICAgY29t cGxldGlvbi1zdHlsZSwgdGhlcmUgaXMgYSB2YXJpYWJsZSBgb3JkZXJsZXNzLXNraXAtaGlnaGxp Z2h0aW5nJw0KPiAgICB3aGljaCBjYW4gYmUgc2V0IHRvIGB0JyBvciB0byBhIHByZWRpY2F0ZSBm dW5jdGlvbi4gRGVwZW5kaW5nIG9uIHRoZQ0KPiAgICB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGhp Z2hsaWdodGluZyBpcyBhcHBsaWVkIG9yIG5vdCBhcHBsaWVkIGJ5DQo+ICAgIGBjb21wbGV0aW9u LWFsbC1jb21wbGV0aW9ucycuDQo+IA0KPiAgICBJbiB0aGUgZmlyc3Qgc3RlcCwgYWxsIHRoZSBj YW5kaWRhdGVzIGNhbiBiZSBjb21wdXRlZCBhbmQgZmlsdGVyZWQNCj4gICAgd2l0aCBgb3JkZXJs ZXNzLXNraXAtaGlnaGxpZ2h0aW5nPXQnLCBzZWUNCj4gICAgYHZlcnRpY28tLXJlY29tcHV0ZS1j YW5kaWRhdGVzJy4gQWZ0ZXJ3YXJkcywgd2hlbiBkaXNwbGF5aW5nIHRoZQ0KPiAgICBjYW5kaWRh dGVzLCB0aGUgY29tcGxldGlvbiBVSSBoYXMgdG8gcGFzcyB0aGUgc21hbGwgc3Vic2V0IG9mDQo+ ICAgIGNhbmRpZGF0ZXMgb25jZSBhZ2FpbiB0aHJvdWdoIGBjb21wbGV0aW9uLWFsbC1jb21wbGV0 aW9ucycsIHRoaXMgdGltZQ0KPiAgICB3aXRoIGBvcmRlcmxlc3Mtc2tpcC1oaWdobGlnaHRpbmc9 bmlsJywgc2VlIGB2ZXJ0aWNvLS1oaWdobGlnaHQnLg0KPiANCj4gICAgSSBwcm9wb3NlIHRvIGdl bmVyYWxpemUgdGhpcyBPcmRlcmxlc3MgZmVhdHVyZSBieSBpbnRyb2R1Y2luZyBhDQo+ICAgIHZh cmlhYmxlIGBjb21wbGV0aW9uLXNraXAtaGlnaGxpZ2h0aW5nJywgd2hpY2ggYmVoYXZlcyB0aGUg c2FtZSBhcw0KPiAgICBgb3JkZXJsZXNzLXNraXAtaGlnaGxpZ2h0aW5nJyBhbmQgaXMgaW1wbGVt ZW50ZWQgZm9yIGFsbCBidWlsdC1pbg0KPiAgICBjb21wbGV0aW9uIHN0eWxlcy4gSW4gT3JkZXJs ZXNzLCB0aGUgZmlsdGVyaW5nIGFuZCBoaWdobGlnaHRpbmcgaXMNCj4gICAgYWxyZWFkeSBzZXBh cmF0ZSBpbnRlcm5hbGx5LCB0aGVyZWZvcmUgc2tpcHBpbmcgdGhlIGhpZ2hsaWdodGluZw0KPiAg ICB0dXJuZWQgb3V0IHRvIGJlIGEgbmF0dXJhbCBkZWNpc2lvbiBpbiBPcmRlcmxlc3MuIFRoZSBz aXR1YXRpb24gY291bGQNCj4gICAgYmUgZGlmZmVyZW50IGZvciB0aGUgYnVpbHQtaW4gc3R5bGVz Lg0KPiANCj4gICAgQXMgYW4gYWx0ZXJuYXRpdmUsIG9uZSBjYW4gaW50cm9kdWNlIGEgdGhpcmQg ZnVuY3Rpb24NCj4gICAgYGNvbXBsZXRpb24taGlnaGxpZ2h0LWNvbXBsZXRpb25zJywgd2hpY2gg aXMgc3BlY2lmaWVkIGluDQo+ICAgIGBjb21wbGV0aW9uLXN0eWxlcy1hbGlzdCcuIEJ1dCBJIHN1 c3BlY3QgdGhhdCB0aGUgaW50cm9kdWN0aW9uIG9mIGFuDQo+ICAgIGV4dHJhIGZ1bmN0aW9uIHJl cXVpcmVzIG1vcmUgZWZmb3J0Lg0KDQpJIGRvIGl0IGluIChJIHRoaW5rKSBhIHNpbXBsZXIgd2F5 IGluIEljaWNsZXMuDQpgY29tcGxldGlvbi1hbGwtY29tcGxldGlvbnMnIHNob3VsZG4ndCBiZSBp bnZvbHZlZA0KYXQgYWxsLCBJTU8uICBJY2ljbGVzIGRvZXMgaXQgb25seSBpbiB0aGUgZnVuY3Rp b24NCnRoYXQgZGlzcGxheXMgdGhlIF9jdXJyZW50XyBzZXQgb2YgY2FuZGlkYXRlcywNCmBpY2lj bGUtZGlzcGxheS1jYW5kaWRhdGVzLWluLUNvbXBsZXRpb25zJy4NCg0KQW5kIHVzZXJzIGNhbiBp biByYXJlIGNhc2VzIGNvbnRyb2wgd2hldGhlciBzdWNoDQpoaWdobGlnaHRpbmcgaXMgZG9uZS4g IEZvciBJbmZvIGNvbW1hbmRzIHdoZXJlDQpjb21wbGV0aW9uIGNhbmRpZGF0ZXMgYXJlIG5vZGUg bmFtZXMsIHlvdSBjYW4NCm9wdGlvbmFsbHkgaGF2ZSBjYW5kaWRhdGVzIGZvciBhbHJlYWR5LXZp c2l0ZWQgbm9kZXMNCmJlIGhpZ2hsaWdodGVkIGRpZmZlcmVudGx5IGluICpDb21wbGV0aW9ucyou ICBCdXQNCnRoYXQncyBjb3N0bHkuICBZb3UgY2FuIGhhdmUgdGhpcyBvZmYgYnkgZGVmYXVsdCBh bmQNCmp1c3QgaGlnaGxpZ2h0IHRoZW0gb24gZGVtYW5kIHdpdGggYEMteCBDLU0tbCcuDQpfX19f Xw0KDQoNCkdlbmVyYWwgY3JpdGlxdWU6IFBsZWFzZSBwcmVzZW50IF9vbmVfIHByb3Bvc2FsIHBl cg0KdGhyZWFkLCBmb3IgY29uc2lkZXJhdGlvbi4gIFRoaXMgdGhpbmcgYWJvdXQgYSBZYWx0YQ0K bWVldGluZyBoYXZpbmcgdGFrZW4gcGxhY2UgYW5kIHNvbWVvbmUgZGVzY2VuZGluZw0KZnJvbSB0 aGUgc3VtbWl0IHdpdGggc3RvbmUgdGFibGVzIHByZXNlbnRpbmcgdGhlDQpJWCBQcm9wb3NhbHMg aXNuJ3Qgc28gaGVscGZ1bCwgSU1PLg0KDQpBZG1pdHRlZGx5LCB0aGVyZSBhcmUgc29tZSByZWxh dGlvbnMgYW1vbmcgc29tZSBvZg0KdGhlbS4gIEJ1dCBzdGlsbC4NCg0KSSBwcm9wb3NlIHRoYXQg ZWFjaCBwcm9wb3NhbCBiZSBzdWJtaXR0ZWQgYXMgYQ0Kc2VwYXJhdGUgZW5oYW5jZW1lbnQgcmVx dWVzdDogYE0teCByZXBvcnQtZW1hY3MtYnVnJy4NCkl0IGNvdWxkIHN0aWxsIGJlIGRpc2N1c3Nl ZCBtb3JlIHdpZGVseSBoZXJlLCB0aG91Z2guDQoNCkFuZCBJJ20gZ2xhZCBwZW9wbGUgYXJlIHRo aW5raW5nIGFib3V0LCBkaXNjdXNzaW5nLA0KYW5kIGltcGxlbWVudGluZyBzdWNoIHRoaW5ncy4g IEhvb3JheSEgIFNvIHBsZWFzZQ0KZG9uJ3QgdGFrZSBteSBjb21tZW50cyBoZXJlIHRvbyBuZWdh dGl2ZWx5Lg0KQ29udHJhZGljdGlvbiB+PiBwcm9ncmVzcy4NCg==