From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-114.mimecast.com (us-smtp-delivery-114.mimecast.com [170.10.133.114]) by sourceware.org (Postfix) with ESMTPS id D4D243858C1F for ; Tue, 12 Sep 2023 10:58:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D4D243858C1F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=labware.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=labware.com Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2169.outbound.protection.outlook.com [104.47.58.169]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-358-y6ROHSALMReRMw3thyaOVQ-1; Tue, 12 Sep 2023 06:58:32 -0400 X-MC-Unique: y6ROHSALMReRMw3thyaOVQ-1 Received: from SA0PR17MB4314.namprd17.prod.outlook.com (2603:10b6:806:e7::16) by IA1PR17MB6050.namprd17.prod.outlook.com (2603:10b6:208:38a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.30; Tue, 12 Sep 2023 10:58:28 +0000 Received: from SA0PR17MB4314.namprd17.prod.outlook.com ([fe80::30eb:4c4a:cb5a:dd91]) by SA0PR17MB4314.namprd17.prod.outlook.com ([fe80::30eb:4c4a:cb5a:dd91%4]) with mapi id 15.20.6768.036; Tue, 12 Sep 2023 10:58:28 +0000 From: =?utf-8?B?SmFuIFZyYW7DvQ==?= To: "gdb-patches@sourceware.org" , "aburgess@redhat.com" Subject: Re: [PATCH 2/2] gdb/python: implement support for sending custom MI async notifications Thread-Topic: [PATCH 2/2] gdb/python: implement support for sending custom MI async notifications Thread-Index: AQHZ4pg2zA51+UGLX0GD3mZiKN9az7AVrz6AgAFbroA= Date: Tue, 12 Sep 2023 10:58:28 +0000 Message-ID: References: <20230908210504.89194-1-jan.vrany@labware.com> <20230908210504.89194-2-jan.vrany@labware.com> <877cowlrv8.fsf@redhat.com> In-Reply-To: <877cowlrv8.fsf@redhat.com> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SA0PR17MB4314:EE_|IA1PR17MB6050:EE_ x-ms-office365-filtering-correlation-id: 09b519b7-d510-4f64-4604-08dbb37f3208 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0 x-microsoft-antispam-message-info: g399Sz0aybJK0Hy5nMdLrWHY5TfBxlMNptuQRQ1zhpN57CXMS8yoBq+RlyEqE5Ms26RytrhIccbuw6YS7gKkbW7Kr/JDV5g3K+StvBN3XJb7wrqM8YyJAQGTyp/pd/a72lwLM88TyPlbm8+dcfq+628iHKRVeCSGead2x8shKRuVnIcPZq9dJuEBcAw+om2eS4UocghOr6p8hpFlVzKYt7Do9gh9TvJGZkSCMM2O2sVcJzwCbfrwwDrJPgm5g8Xpz2YAhMZ5DcXwDVsskaAf+kYD9JQqM7bKIvH52HsglL4vvJEMWpJrO2K7iY75G9mfDuWOMcDQJVrPO2BdgB93DyXv8Wfs+bE1s2KFYbF4NUYjkudVbArLzwzPjXVfdM0YDQcPFrpGAKiIqkVf1oRJ77/kt2ZxCuLYx32XUbO1Bj08FSIwd94P13FqwH3xUJPXl5arBsbzB/PNeq96MCQdPz17KqGPeCRFWLy/MKtPDVcg0mqf7zUeaUN4BXMTLQzTis/WBHXEVkzLPUYW1XGK4xSGC/o7Q8UXwUNyeJjEX29byWlF7Yj5fZ6tsx5deGWAJ+SdAMZ/GhJmqmI7aa6DZZo9gKVBlWjBDSV2HLAGRcb40iQkaYh31Svb+bLg1fEI x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA0PR17MB4314.namprd17.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39850400004)(366004)(346002)(376002)(396003)(136003)(186009)(1800799009)(451199024)(15650500001)(83380400001)(30864003)(478600001)(26005)(6506007)(85182001)(6512007)(36756003)(71200400001)(122000001)(6486002)(38100700002)(2906002)(38070700005)(2616005)(86362001)(41300700001)(64756008)(66476007)(66556008)(8676002)(76116006)(66446008)(66946007)(110136005)(91956017)(8936002)(5660300002)(316002)(2004002);DIR:OUT;SFP:1101 x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?QzFmcFg0QmlUWm9HUHVyYlE0QWJqMlhCQVNVNVZqUkRtR2RTcjRkTVFoWURG?= =?utf-8?B?UUh5ODJHKytpcExuMk5obi93Ylhyb0F6aHB1STdrZGlNV1UveFBBN1NGZGdL?= =?utf-8?B?bGY3OEUyN293dFlPTHUvYWlhNGk3NUtmRyt6YWR1ZW9LQVNnV0U4RTVjekYz?= =?utf-8?B?UE04V0w4ejRNVHdVdUVjMjBGbmpXdUNRZWk2SldwamQ5V0RqRTQvMUd5NnJr?= =?utf-8?B?dnJIUlFWSjk1NWJjMVF0QTRZcVdOMHY2dW5pYXZyNWpIUlk1Y1dsSTBvWDFU?= =?utf-8?B?eDJWOFVZSDZkWnUrOHQ3VlFhaTl2K2xNdzhvZU4zbWRaN25KMXNHRWltNThq?= =?utf-8?B?cW1GTEZTRzFTNXlxQW1lK3A3OTFGN0dpaUYzdkxwMTFNRUFmTmRGRGswaVd5?= =?utf-8?B?UTduQlEyM2xZdHRnK3dYMThKdE4yNklxRXVnT0R5N3h4RE56ck96MFgwWjVS?= =?utf-8?B?OXFUaUt0eU56d3p4aTFkRXp0YzJQNVUvOE93dVVERURVLzlWUTRiMmtXRlVy?= =?utf-8?B?WnlvQ3R5Rml6U3RrRmVDa3FXMnVsWExVeEdpZXlBZHJBeGdUczlYQTdHc09C?= =?utf-8?B?V1lENHJjelVRQjJMWEUxaTA1MTV4NmpBTkFNVFlxbllRR3ZqZWdMelpnaHVn?= =?utf-8?B?dzk0TGxJRmJEQTZIM2x3bGhVOHpUWXVwZ3N1Nm5DNW1ucmFhelkzbUJzL3hv?= =?utf-8?B?RXlxMklUWEo5SnU0ZCtBL3dwVWlTTWVHR2hRZW9jbjZ5T2RMY0NubFBuVzl5?= =?utf-8?B?QURQbnJWbVlkc2JYcXFhTWxvVEl5bVpBNEIxWkhCVUx5MnRwWHlrZlpTdndi?= =?utf-8?B?c2psK0JSM05yZ2NpUDNrdVFzOVorVlJzUEc1Tnp5Zjd1MWRVSmlkVVdMWE5X?= =?utf-8?B?ZXNKYzJ6UWZKYmd2K2NxUzc2T0o2UFkwUkVjamg2bndNWnlBZGFUQ0FXSGlh?= =?utf-8?B?Y1VYanRNUG1NblRNV0hRZFhtdUdGZVF3MkIzWnhDRDNHRHd4VmgyU2NnN0VT?= =?utf-8?B?MWFPaXlZY0RDb3oyU2JQVGRVanozdWh5OUVVRlVKcjRTME1FWlZQNnZSeDRk?= =?utf-8?B?WnprN3FmNVZNanZ6c0lGMjV2cVdpQ0VoUWxNSmxtamRiY3FWQU9RdzJYK25O?= =?utf-8?B?QkRBMUhwN1lLT01QemxCV1MrU2tWcXRZWjAxUnpIeDYyRllqdzhQbW9LRVJi?= =?utf-8?B?cXlnVUo5T3FJVnVYdWNYdVNPQzl2YWRIaGZ3MXhJK3VOS0p3TXg5c2lkbVZM?= =?utf-8?B?Qy93L0VLVVI5K1haK1Z0QzMvRG03YkhNdVF2S3VtV1ZTckl5YlVwMlYyQjBX?= =?utf-8?B?dkNDdHJEMUxRdlFvZDU3VUZSb2NTTkpvVlBWcDk4VktMZG11SGNmNHlRa0tr?= =?utf-8?B?aTQvY3VDNFN6T3ZnUWtWMHZQaUpZUFMvSFZ5VmdYZFpMRTVrSktIUGMyQWZu?= =?utf-8?B?WUZGeE54YWZhOG5lVUM0UTVxYmdQbXlMVHhpQVU4SkNrS2E1Ym1laUdzTWFv?= =?utf-8?B?Q3pjK28vdGdxN0NrSEswOGhlWjBSV0F6TnZWKzlENzVmeGlEd3dqd3gxRzFq?= =?utf-8?B?NXhxcG9vRFJrdldxUkZKM0ZydU9lQldtS1hPSHZsdXdDaW04NktkUGwzTm9i?= =?utf-8?B?STFNNS9BOTRzUTJmWVJDcDhNdUVuQUJQTkRwYnRxbmovSzBwemFQN1pZbktr?= =?utf-8?B?ZkhkNFJVT0hQS3ljM2pPZjM5T0FhY0lmeGNHMWRuRmtQSmIyUHFER0V5dXgx?= =?utf-8?B?SkovWWRTOWZCN3Yxc1kyQWc2TVVONjFsUzlvR1IzSzV2SllUc2pYcVo3blcv?= =?utf-8?B?SWZVOGFUNzJBMGVNNlRVRnp6ejZSZ0J3bmI5TU5HUE5PbHJIVVhQRDdpYWRo?= =?utf-8?B?MUJQL3Z1ZjZuSXJIR0hKMi9ORmh5bjFjaVhMdG9YdkFjTUxYUW9ZWGNveGNt?= =?utf-8?B?TmhzRGY4QXZ2TWJjU0lWNk5CUkI4NjN0Z1AzM2syeVErMEx3U0ZtNXZqVHhs?= =?utf-8?B?UkNkbTFrbjUrclJPdEU0dkVpUXI2ZjlOVGpwNlY3RUNaR3g2ZkV2ZjNrTmlk?= =?utf-8?B?TlFzaEdxb3hCUUdkdTh2TmhkQW4wTW9sYmNETUNSQTkyWXg4eE5ubXpvVGFK?= =?utf-8?B?OENHNGdsVmIyMUpFVnFzdGkrSlQzN0FsbEFHeCtSWitTMzRmTkpwblhIcTlO?= =?utf-8?B?N1E9PQ==?= MIME-Version: 1.0 X-OriginatorOrg: labware.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SA0PR17MB4314.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09b519b7-d510-4f64-4604-08dbb37f3208 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Sep 2023 10:58:28.4669 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b5db0322-1aa0-4c0a-859c-ad0f96966f4c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: bMNqrsnyQG1fgZ3he0Sk9aM+G2lOLa6Q1+rSU9H+fedJZ4ep9Kf8p3d/lwtF2QtWOhIPu+KYwoh7DDhFbaSmxw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR17MB6050 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: labware.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-ID: <671B5B0D5D278F448454EB9D17A91A5D@namprd17.prod.outlook.com> Content-Transfer-Encoding: base64 X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP 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: T24gTW9uLCAyMDIzLTA5LTExIGF0IDE1OjE0ICswMTAwLCBBbmRyZXcgQnVyZ2VzcyB3cm90ZToN Cj4gSmFuIFZyYW55IHZpYSBHZGItcGF0Y2hlcyA8Z2RiLXBhdGNoZXNAc291cmNld2FyZS5vcmc+ IHdyaXRlczoNCj4gDQo+ID4gVGhpcyBjb21taXQgYWRkcyBhIG5ldyBQeXRob24gZnVuY3Rpb24s IGdkYi5ub3RpZnlfbWksIHRoYXQgY2FuIGJlIHVzZWQNCj4gPiB0byBlbWl0IGN1c3RvbSBhc3lu YyBub3RpZmljYXRpb24gdG8gTUkgY2hhbm5lbC4gIFRoaXMgY2FuIGJlIHVzZWQsIGFtb25nDQo+ ID4gb3RoZXIgdGhpbmdzLCB0byBpbXBsZW1lbnQgbm90aWZpY2F0aW9ucyBhYm91dCBldmVudHMg TUkgZG9lcyBub3Qgc3VwcG9ydCwNCj4gPiBzdWNoIGFzIHJlbW90ZSBjb25uZWN0aW9uIGNsb3Nl ZCBvciByZWdpc3RlciBjaGFuZ2UuDQo+ID4gLS0tDQo+ID4gIGdkYi9ORVdTICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDMgKysNCj4gPiAgZ2RiL2RvYy9weXRob24udGV4aSAg ICAgICAgICAgICAgICAgICAgICAgfCAzOCArKysrKysrKysrKysrKysrKysNCj4gPiAgZ2RiL3B5 dGhvbi9weS1taS5jICAgICAgICAgICAgICAgICAgICAgICAgfCA0OSArKysrKysrKysrKysrKysr KysrKysrKw0KPiA+ICBnZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oICAgICAgICAgICAgICB8 ICAzICsrDQo+ID4gIGdkYi9weXRob24vcHl0aG9uLmMgICAgICAgICAgICAgICAgICAgICAgIHwg IDQgKysNCj4gPiAgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pLW5vdGlmeS5leHAgfCA0 NyArKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIDYgZmlsZXMgY2hhbmdlZCwgMTQ0IGluc2Vy dGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1taS1ub3RpZnkuZXhwDQo+ID4gDQo+ID4gZGlmZiAtLWdpdCBhL2dkYi9ORVdTIGIvZ2Ri L05FV1MNCj4gPiBpbmRleCA5OGZmMDBkNWVmYy4uNGExZjM4M2E2NjYgMTAwNjQ0DQo+ID4gLS0t IGEvZ2RiL05FV1MNCj4gPiArKysgYi9nZGIvTkVXUw0KPiA+IEBAIC0yODYsNiArMjg2LDkgQEAg aW5mbyBtYWluDQo+ID4gICAgICAgbWlnaHQgYmUgYXJyYXktIG9yIHN0cmluZy1saWtlLCBldmVu IGlmIHRoZXkgZG8gbm90IGhhdmUgdGhlDQo+ID4gICAgICAgY29ycmVzcG9uZGluZyB0eXBlIGNv ZGUuDQo+ID4gIA0KPiA+ICsgICoqIE5ldyBmdW5jdGlvbiBnZGIubm90aWZ5X21pKE5BTUUsIERB VEEpLCB0aGF0IGVtaXRzIGN1c3RvbQ0KPiA+ICsgICAgIEdEQi9NSSBhc3luYyBub3RpZmljYXRp b24uDQo+ID4gKw0KPiA+ICAqKiogQ2hhbmdlcyBpbiBHREIgMTMNCj4gPiAgDQo+ID4gICogTUkg dmVyc2lvbiAxIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gR0RCIDE0Lg0K PiA+IGRpZmYgLS1naXQgYS9nZGIvZG9jL3B5dGhvbi50ZXhpIGIvZ2RiL2RvYy9weXRob24udGV4 aQ0KPiA+IGluZGV4IGU5OTM2OTkxYzQ5Li5jYjIwNzM5NzZiYSAxMDA2NDQNCj4gPiAtLS0gYS9n ZGIvZG9jL3B5dGhvbi50ZXhpDQo+ID4gKysrIGIvZ2RiL2RvYy9weXRob24udGV4aQ0KPiA+IEBA IC00NzA0LDYgKzQ3MDQsNDQgQEAgSGVyZSBpcyBob3cgdGhpcyB3b3JrcyB1c2luZyB0aGUgY29t bWFuZHMgZnJvbSB0aGUgZXhhbXBsZSBhYm92ZToNCj4gPiAgQHsnc3RyaW5nJzogJ2FiYywgZGVm LCBnaGknQH0NCj4gPiAgQGVuZCBzbWFsbGV4YW1wbGUNCj4gPiAgDQo+ID4gK0Bub2RlIEdEQi9N SSBOb3RpZmljYXRpb25zIEluIFB5dGhvbg0KPiA+ICtAc3Vic3Vic2VjdGlvbiBAc2N7Z2RiL21p fSBOb3RpZmljYXRpb25zIEluIFB5dGhvbg0KPiA+ICsNCj4gPiArQGNpbmRleCBNSSBub3RpZmlj YXRpb25zIGluIHB5dGhvbg0KPiA+ICtAY2luZGV4IG5vdGlmaWNhdGlvbnMgaW4gcHl0aG9uLCBH REIvTUkNCj4gPiArQGNpbmRleCBweXRob24gbm90aWZpY2F0aW9ucywgR0RCL01JDQo+ID4gKw0K PiA+ICtJdCBpcyBwb3NzaWJsZSB0byBlbWl0IEBzY3tnZGIvbWl9IG5vdGlmaWNhdGlvbnMgZnJv bQ0KPiA+ICtQeXRob24uICBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgQGNvZGV7Z2RiLm5vdGlmeV9t aX0gZnVuY3Rpb24uDQo+ID4gKw0KPiA+ICtAZGVmdW4gZ2RiLm5vdGlmeV9taSAobmFtZSAsIGRh dGEpDQo+ID4gK0VtaXQgYSBAc2N7Z2RiL21pfSBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uLiAg QHZhcntuYW1lfSBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gPiArbm90aWZpY2F0aW9uLCBhIHN0cmlu Zy4gIEB2YXJ7ZGF0YX0gYXJlIGFkZGl0aW9uYWwgdmFsdWVzIGVtaXR0ZWQgd2l0aCB0aGUgbm90 aWZpY2F0aW9uLCBwYXNzZWQNCj4gDQo+IEkgdGhpbmsgdGhpcyByZWFkcyBiZXR0ZXI6DQo+IA0K PiAgIEB2YXJ7ZGF0YX0gaXMgYW55IGFkZGl0aW9uYWwgZGF0YSB0byBiZSBlbWl0dGVkIHdpdGgg dGhlIG5vdGlmaWNhdGlvbiwNCj4gICBwYXNzZWQgYXMgYSBQeXRob24gZGljdGlvbmFyeS4NCj4g DQo+IEVsaSBhbHJlYWR5IGFza2VkIGFib3V0IHdoaWNoIHZhbHVlcyBvZiBAdmFye25hbWV9IGFy ZSB2YWxpZC4gIEkgY2FuIHNlZQ0KPiBmcm9tIHRoZSBjb2RlIHRoYXQgX2FueV8gdmFsdWUgaXMg YWNjZXB0ZWQsIGhvd2V2ZXIsIGEgdXNlciBzaG91bGQNCj4gcHJvYmFibHkgYmUgY2FyZWZ1bCBu b3QgdG8gcmV1c2UgYSBuYW1lIHRoYXQgR0RCIGFscmVhZHkgdXNlcyAtLSBvciBpZg0KPiB0aGV5 IGRvIHRoZW4gdGhleSBzaG91bGQgZW5zdXJlIHRoYXQgYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMg YXJlDQo+IGVtaXR0ZWQuDQo+IA0KPiBOb3Qgc3VyZSBleGFjdGx5IG5lZWRzIHNheWluZyBoZXJl LCBidXQgd2UgcHJvYmFibHkgc2hvdWxkIGF0IGEgbWluaW11bQ0KPiBpbmNsdWRlIGEgY3Jvc3Mt cmVmZXJlbmNlIHRvICdHREIvTUkgQXN5bmMgUmVjb3Jkcycgc28gdXNlcnMgY2FuIGZpbmQNCj4g dGhlIGxpc3Qgb2YgbmFtZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIHVzZS4NCg0KU3VyZSwgd2ls bCBkby4gDQoNCj4gDQo+IEkgYWxzbyB3b25kZXIgaWYgd2Ugc2hvdWxkIHByb3ZpZGUgc29tZSBn dWlkYW5jZSBhYm91dCBob3cgdXNlciBjcmVhdGVkDQo+IGFzeW5jIG5vdGlmaWNhdGlvbnMgYXJl IG5hbWVkLCBzb21ldGhpbmcgbGlrZToNCj4gDQo+ICAgIlVzZXIgY3JlYXRlZCBub3RpZmljYXRp b25zIHNob3VsZCBiZSBwcmVmaXhlZCB3aXRoIGEgJ18nIGNoYXJhY3RlciwNCj4gICBlLmcuIGdk Yi5ub3RpZnlfbWkgKCdfZm9vJywgLi4uLikiDQo+IA0KPiBBbmQgdGhlbiBHREIgY2FuIHByb21p c2UgdG8gbmV2ZXIgY3JlYXRlIGFuIGludGVybmFsIEFzeW5jIHJlY29yZCB0aGF0DQo+IHN0YXJ0 cyB3aXRoIGEgJ18nIGNoYXJhY3Rlci4NCj4gDQo+IEknbSB0aGlua2luZzogdGhlIGV4YW1wbGUg eW91IGdpdmUgY3JlYXRlcyBhICdjb25uZWN0aW9uLXJlbW92ZWQnIGV2ZW50LA0KPiBidXQgd2hh dCBpZiwgYXQgc29tZSBmdXR1cmUgcG9pbnQsIEdEQiBhY3R1YWxseSwgb2ZmaWNpYWxseSwgYWRk cyBhDQo+IGNvbm5lY3Rpb24tcmVtb3ZlZCBldmVudCwgdGhpcyBpcyBnb2luZyB0byBjb25mbGlj dCB3aXRoIHRoZSB1c2VyDQo+IGRlZmluZWQgbm90aWZpY2F0aW9uLiAgSWYgd2UgcmVxdWlyZSAo b3Igc3VnZ2VzdCkgdGhhdCB1c2VyIGRlZmluZWQNCj4gbm90aWZpY2F0aW9ucyBhcmUgcGxhY2Vk IGludG8gdGhlaXIgb3duIG5hbWVzcGFjZSBpbiBzb21lIHdheSwgdGhlbiB3ZQ0KPiBjYW4gZW5z dXJlIEdEQidzIGludGVybmFsIG5vdGlmaWNhdGlvbnMsIGFuZCB1c2VyIG5vdGlmaWNhdGlvbnMg d2lsbA0KPiBhbHdheXMgYmUgc2VwYXJhdGUuICBXaGF0IGRvIHlvdSB0aGluaz8gIChPYnZpb3Vz bHkgJ18nIGlzIGp1c3QgdGhlDQo+IGZpcnN0IGlkZWEgaW4gbXkgaGVhZCwgb3RoZXIgc3RyYXRl Z2llcyBleGlzdCkuDQoNCkdvb2QgcG9pbnQuIEluIGNhc2Ugb2YgcHl0aG9uLWltcGxlbWVudGVk IE1JIGNvbW1hbmRzLCBvdmVycmlkaW5nIGV4aXN0aW5nDQooYnVpbHQtaW4pIGNvbW1hbmQgaXMg Zm9yYmlkZGVuLsKgSSdtIGluY2xpbmVkIHRvIGRvIHRoZSBzYW1lIGluIGNhc2Ugb2bCoA0Kbm90 aWZpY2F0aW9ucywgbW9zdGx5IGJlY2F1c2UgaXQgaXMgY29uc2lzdGVudCB3aXRoIE1JIGNvbW1h bmRzIGFuZMKgDQppcyByZWxhdGl2ZWx5IGVhc3kgdG8gaW1wbGVtZW50ICh0aG91Z2ggaXQnZCB3 b3VsZCByZXF1aXJlIG1hbnVhbGx5IGNvZGVkDQpsaXN0IG9mIGJ1aWx0LWluIG5vdGlmaWNhdGlv bnMpLiANCg0KU3VnZ2VzdGluZyBweXRob24gbm90aWZpY2F0aW9uIHNob3VsZCBnbyBpbnRvIHNl cGFyYXRlIG5hbWVzcGFjZSBhbmQgcHJvbWlzaW5nwqANCmJ1aWx0LWluIG5vdGlmaWNhdGlvbnMg bmV2ZXIgdXNlIHRoYXQgbmFtZXNwYWNlIGlzIGEgZ29vZCBpZGVhLiANCg0KQXMgZm9yIHJlcXVp cmluZyBweXRob24gbm90aWZpY2F0aW9ucyB0byBiZSBpbiBzZXBhcmF0ZSBuYW1lc3BhY2UsIEkn bSBub3Qgc3VyZS4NCkFnYWluLCB3ZSBkaWQgbm90IHJlcXVpcmVkIHRoYXQgZm9yIHB5dGhvbiBN SSBjb21tYW5kcyBzbyBpdCBmZWVscyBpdCdkIGJlIGEgYml0wqANCmluY29uc2lzdGVudC4gKEFs c28sIGlmIGF0IHNvbWUgZnV0dXJlIHBvaW50IEdEQiBhY3R1YWxseSBkZWNpZGVzIHRvIGFkZCAt IHNheSAtDQpjb25uZWN0aW9uLXJlbW92ZWQgZXZlbnQsIHdoeSBub3QgaW1wbGVtZW50IGl0IGlu IHB5dGhvbj8gQnV0IHRoYXQncyBwcm9iYWJseQ0KYSBkaWZmZXJlbnQgZGlzY3Vzc2lvbikNCg0K PiANCj4gPiArYXMgUHl0aG9uIGRpY3Rpb25hcnkuIFRoZSBkaWN0aW9uYXJ5IGlzIGNvbnZlcnRl ZCB0byBjb252ZXJ0ZWQNCj4gPiArdG8gYSBAc2N7Z2RiL21pfSBAdmFye3Jlc3VsdC1yZWNvcmR9 IChAcHhyZWZ7R0RCL01JIE91dHB1dCBTeW50YXh9KSB0aGUgc2FtZSB3YXkNCj4gPiArYXMgcmVz dWx0IG9mIFB5dGhvbiBNSSBjb21tYW5kIChAcHhyZWZ7R0RCL01JIENvbW1hbmRzIEluIFB5dGhv bn0pLg0KPiA+ICsNCj4gPiArSWYgQHZhcntkYXRhfSBpcyBAY29kZXtOb25lfSB0aGVuIG5vIGFk ZGl0aW9uYWwgdmFsdWVzIGFyZSBlbWl0dGVkLg0KPiA+ICtAZW5kIGRlZnVuDQo+ID4gKw0KPiA+ ICtIZXJlIGlzIGhvdyB0byBlbWl0IEBjb2Rlez1jb25uZWN0aW9uLXJlbW92ZWR9IHdoZW5ldmVy IGEgY29ubmVjdGlvbiB0byByZW1vdGUNCj4gPiArR0RCIHNlcnZlciBpcyBjbG9zZWQgKHNlZSBA cHhyZWZ7Q29ubmVjdGlvbnMgSW4gUHl0aG9ufSk6DQo+ID4gKw0KPiA+ICtAc21hbGxleGFtcGxl DQo+ID4gK2RlZiBub3RpZnlfY29ubmVjdGlvbl9yZW1vdmVkIChldmVudCk6DQo+ID4gKyAgICBk YXRhID0gQHsgJ2lkJyAgIDogZXZlbnQuY29ubmVjdGlvbi5udW0sDQo+ID4gKyAgICAgICAgICAg ICAgJ3R5cGUnIDogZXZlbnQuY29ubmVjdGlvbi50eXBlIEB9DQo+ID4gKyAgICBnZGIubm90aWZ5 X21pKCJjb25uZWN0aW9uLXJlbW92ZWQiLCBkYXRhKQ0KPiA+ICsNCj4gPiArZ2RiLmV2ZW50cy5j b25uZWN0aW9uX3JlbW92ZWQuY29ubmVjdCAobm90aWZ5X2Nvbm5lY3Rpb25fcmVtb3ZlZCkNCj4g PiArQGVuZCBzbWFsbGV4YW1wbGUNCj4gPiArDQo+ID4gK1RoZW4sIGVhY2ggdGltZSBhIGNvbm5l Y3Rpb24gaXMgY2xvc2VkLCB0aGVyZSB3aWxsIGJlIGEgbm90aWZpY2F0aW9uIG9uIE1JIGNoYW5u ZWw6DQo+ID4gKw0KPiA+ICtAc21hbGxleGFtcGxlDQo+ID4gKz1jb25uZWN0aW9uLXJlbW92ZWQs aWQ9IjEiLHR5cGU9InJlbW90ZSINCj4gPiArQGVuZCBzbWFsbGV4YW1wbGUNCj4gPiArDQo+ID4g IEBub2RlIFBhcmFtZXRlcnMgSW4gUHl0aG9uDQo+ID4gIEBzdWJzdWJzZWN0aW9uIFBhcmFtZXRl cnMgSW4gUHl0aG9uDQo+ID4gIA0KPiA+IGRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LW1pLmMg Yi9nZGIvcHl0aG9uL3B5LW1pLmMNCj4gPiBpbmRleCA2NmRjNmZiOGEzMi4uZGMyZWM1ZGRkMGYg MTAwNjQ0DQo+ID4gLS0tIGEvZ2RiL3B5dGhvbi9weS1taS5jDQo+ID4gKysrIGIvZ2RiL3B5dGhv bi9weS1taS5jDQo+ID4gQEAgLTE5LDggKzE5LDE0IEBADQo+ID4gIA0KPiA+ICAjaW5jbHVkZSAi ZGVmcy5oIg0KPiA+ICAjaW5jbHVkZSAicHl0aG9uLWludGVybmFsLmgiDQo+ID4gKyNpbmNsdWRl ICJ1dGlscy5oIg0KPiA+ICsjaW5jbHVkZSAidWkuaCINCj4gPiAgI2luY2x1ZGUgInVpLW91dC5o Ig0KPiA+ICsjaW5jbHVkZSAiaW50ZXJwcy5oIg0KPiA+ICsjaW5jbHVkZSAidGFyZ2V0LmgiDQo+ ID4gICNpbmNsdWRlICJtaS9taS1wYXJzZS5oIg0KPiA+ICsjaW5jbHVkZSAibWkvbWktY29uc29s ZS5oIg0KPiA+ICsjaW5jbHVkZSAibWkvbWktaW50ZXJwLmgiDQo+ID4gIA0KPiA+ICAvKiBBIHVp X291dCBzdWJjbGFzcyB0aGF0IGNyZWF0ZXMgYSBQeXRob24gb2JqZWN0IGJhc2VkIG9uIHRoZSBk YXRhDQo+ID4gICAgIHRoYXQgaXMgcGFzc2VkIGluLiAgKi8NCj4gPiBAQCAtMjk2LDMgKzMwMiw0 NiBAQCBnZGJweV9leGVjdXRlX21pX2NvbW1hbmQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAq YXJncywgUHlPYmplY3QgKmt3KQ0KPiA+ICANCj4gPiAgICByZXR1cm4gdWlvdXQucmVzdWx0ICgp Ow0KPiA+ICB9DQo+ID4gKw0KPiA+ICsvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2RiLm5vdGlm eV9taSBmdW5jdGlvbi4gICovDQo+IA0KPiBUaGlzIGNvbW1lbnQgc2hvdWxkIGJlIGluIHRoZSBo ZWFkZXIgZmlsZSwgYW5kIGhlcmUgd2Ugc2hvdWxkIHNheToNCj4gDQo+ICAgLyogU2VlIHB5dGhv bi1pbnRlcm5hbC5oLiAgKi8NCj4gDQo+ID4gKw0KPiA+ICtQeU9iamVjdCAqDQo+ID4gK2dkYnB5 X25vdGlmeV9taSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dh cmdzKQ0KPiA+ICt7DQo+ID4gKyAgc3RhdGljIGNvbnN0IGNoYXIgKmtleXdvcmRzW10gPSB7ICJu YW1lIiwgImRhdGEiLCBudWxscHRyIH07DQo+ID4gKyAgY29uc3QgY2hhciAqbmFtZTsNCj4gPiAr ICBQeU9iamVjdCAqZGF0YTsNCj4gPiArDQo+ID4gKyAgaWYgKCFnZGJfUHlBcmdfUGFyc2VUdXBs ZUFuZEtleXdvcmRzIChhcmdzLCBrd2FyZ3MsICJzTyIsIGtleXdvcmRzLA0KPiA+ICsJCQkJCSZu YW1lLCAmZGF0YSkpDQo+ID4gKyAgICByZXR1cm4gbnVsbHB0cjsgLy8gRklYTUU6IGlzIHRoaXMg dGhlIGNvcnJlY3Qgd2F5IHRvIHNpZ25hbCBlcnJvcj8NCj4gDQo+IFllcyBpdCBpcy4gIElmIGdk Yl9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMgZW5jb3VudGVycyBhbiBlcnJvciB0aGVuDQo+ IGEgUHl0aG9uIGV4Y2VwdGlvbiB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4gIFJldHVybmlu ZyBudWxscHRyIGNhdXNlcw0KPiB0aGUgUHl0aG9uIHJ1bnRpbWUgdG8gdGhyb3cgdGhlIGV4Y2Vw dGlvbi4NCj4gDQo+IEkgd29uZGVyIGlmIHdlIHNob3VsZCBtYWtlIHRoZSBkYXRhIGFyZ3VtZW50 IG9wdGlvbmFsLCB3aXRoIFB5X05vbmUNCj4gYmVpbmcgdGhlIGRlZmF1bHQ/ICBZb3UgY2FuIHdy aXRlOg0KPiANCj4gICBQeU9iamVjdCAqZGF0YSA9IFB5X05vbmU7DQo+IA0KPiAgIGlmICghZ2Ri X1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyAoYXJncywga3dhcmdzLCAic3xPIiwga2V5d29y ZHMsDQo+ICAgCQkJICAgICAgICAgICAgICAgICZuYW1lLCAmZGF0YSkpDQo+ICAgICByZXR1cm4g bnVsbHB0cjsNCj4gDQo+IEFuZCB0aGF0IHNob3VsZCBtYWtlIGl0IHNvLiAgT2J2aW91c2x5IHlv dSdkIG5lZWQgYSBjb3JyZXNwb25kaW5nIGRvY3MNCj4gdXBkYXRlLg0KPiANCj4gPiArDQo+ID4g KyAgU1dJVENIX1RIUlVfQUxMX1VJUyAoKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICBzdHJ1Y3Qg bWlfaW50ZXJwICptaSA9IGFzX21pX2ludGVycCAodG9wX2xldmVsX2ludGVycHJldGVyICgpKTsN Cj4gPiArDQo+ID4gKyAgICAgIGlmIChtaSA9PSBOVUxMKQ0KPiANCj4gcy9OVUxML251bGxwdHIv DQo+IA0KPiA+ICsgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICANCj4gDQo+IFRoZSBgY29u dGludWVgIHNob3VsZCB1c2UgYSB0YWIgdG8gaW5kZW50Lg0KPiANCj4gQW5kIHRoZSBmb2xsb3dp bmcgbGluZSwgYW5kIHNvbWUgb3RoZXIgbGluZXMgaW4gdGhpcyBkaWZmLCBoYXZlIHRyYWlsaW5n DQo+IHdoaXRlc3BhY2UuICBUaGUgLmdpdGF0dHJpYnV0ZXMgZmlsZXMgYXQgdGhlIHRvcC1sZXZl bCBzaG91bGQgdHVybiBvbg0KPiBoaWdobGlnaHRpbmcgb2Ygd2hpdGVzcGFjZSBlcnJvcnMgbGlr ZSB0aGlzLiAgT09JLCBpZiB5b3UgJ2dpdCBzaG93Jw0KPiB0aGlzIHBhdGNoLCBhcmUgdGhlIGVy cm9ycyBub3QgaGlnaGxpZ2h0ZWQgZm9yIHlvdT8gIEkgb25seSBhc2sgYmVjYXVzZQ0KPiBtYXli ZSB3ZSd2ZSBub3Qgc2V0IHVwIG91ciAuZ2l0YXR0cmlidXRlcyBjb3JyZWN0bHkuDQo+IA0KPiA+ ICsgICAgICBnZGJfcHJpbnRmIChtaS0+ZXZlbnRfY2hhbm5lbCwgIiVzIiwgbmFtZSk7DQo+ID4g KyAgICAgIGlmIChkYXRhICE9IFB5X05vbmUpICAgICAgDQo+ID4gKyAgICAgICAgew0KPiA+ICsg ICAgICAgICAgLyogQXQgdGhlIHRvcC1sZXZlbCwgdGhlIGRhdGEgbXVzdCBiZSBhIGRpY3Rpb25h cnkuICAqLw0KPiA+ICsgICAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2sgKGRhdGEpKQ0KPiA+ICsg ICAgICAgICAgICBnZGJweV9lcnJvciAoXygiRGF0YSBwYXNzZWQgdG8gbm90aWZ5X21pIG11c3Qg YmUgZWl0aGVyIE5vbmUgb3IgYSBkaWN0aW9uYXJ5IikpOw0KPiA+ICsNCj4gPiArICAgICAgICAg IHRhcmdldF90ZXJtaW5hbDo6c2NvcGVkX3Jlc3RvcmVfdGVybWluYWxfc3RhdGUgdGVybV9zdGF0 ZTsNCj4gPiArICAgICAgICAgIHRhcmdldF90ZXJtaW5hbDo6b3Vyc19mb3Jfb3V0cHV0ICgpOw0K PiA+ICsNCj4gPiArICAgICAgICAgIHVpX291dCAqbWlfdWlvdXQgPSBtaS0+aW50ZXJwX3VpX291 dCAoKTsNCj4gPiArICAgICAgICAgIHVpX291dF9yZWRpcmVjdF9wb3AgcmVkaXIgKG1pX3Vpb3V0 LCBtaS0+ZXZlbnRfY2hhbm5lbCk7DQo+ID4gKyAgICAgICAgICBzY29wZWRfcmVzdG9yZSByZXN0 b3JlX3Vpb3V0DQo+ID4gKyAgICAgICAgICAgID0gbWFrZV9zY29wZWRfcmVzdG9yZSAoJmN1cnJl bnRfdWlvdXQsIG1pX3Vpb3V0KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICBzZXJpYWxpemVfbWlf ZGF0YSAoZGF0YSk7CSAgDQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICBnZGJfZmx1c2ggKG1p LT5ldmVudF9jaGFubmVsKTsNCj4gPiArICAgIH0NCj4gPiArICAgIA0KPiA+ICsgIFB5X1JFVFVS Tl9OT05FOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLWludGVy bmFsLmggYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oDQo+ID4gaW5kZXggM2Y1M2IwYWI2 ZjAuLjJhN2U4ZDY4MTc5IDEwMDY0NA0KPiA+IC0tLSBhL2dkYi9weXRob24vcHl0aG9uLWludGVy bmFsLmgNCj4gPiArKysgYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oDQo+ID4gQEAgLTUw MSw2ICs1MDEsOSBAQCBleHRlcm4gUHlPYmplY3QgKmdkYnB5X2V4ZWN1dGVfbWlfY29tbWFuZCAo UHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLA0KPiA+ICANCj4gPiAgZXh0ZXJuIHZvaWQg c2VyaWFsaXplX21pX2RhdGEgKFB5T2JqZWN0ICpyZXN1bHQpOw0KPiA+ICANCj4gPiArZXh0ZXJu IFB5T2JqZWN0ICpnZGJweV9ub3RpZnlfbWkgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJn cywNCj4gPiArCQkJCSAgUHlPYmplY3QgKmt3KTsNCj4gPiArDQo+ID4gIC8qIENvbnZlcnQgUHl0 aG9uIG9iamVjdCBPQkogdG8gYSBwcm9ncmFtX3NwYWNlIHBvaW50ZXIuICBPQkogbXVzdCBiZSBh DQo+ID4gICAgIGdkYi5Qcm9nc3BhY2UgcmVmZXJlbmNlLiAgUmV0dXJuIG51bGxwdHIgaWYgdGhl IGdkYi5Qcm9nc3BhY2UgaXMgbm90DQo+ID4gICAgIHZhbGlkIChzZWUgZ2RiLlByb2dzcGFjZS5p c192YWxpZCksIG90aGVyd2lzZSByZXR1cm4gdGhlIHByb2dyYW1fc3BhY2UNCj4gPiBkaWZmIC0t Z2l0IGEvZ2RiL3B5dGhvbi9weXRob24uYyBiL2dkYi9weXRob24vcHl0aG9uLmMNCj4gPiBpbmRl eCA2YTk3OGQ2MzJlOS4uZmFhN2UwYzIxN2QgMTAwNjQ0DQo+ID4gLS0tIGEvZ2RiL3B5dGhvbi9w eXRob24uYw0KPiA+ICsrKyBiL2dkYi9weXRob24vcHl0aG9uLmMNCj4gPiBAQCAtMjY2OSw2ICsy NjY5LDEwIEBAIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGxhbmd1 YWdlLiIgfSwNCj4gPiAgICAgICJwcmludF9vcHRpb25zICgpIC0+IGRpY3RcblwNCj4gPiAgUmV0 dXJuIHRoZSBjdXJyZW50IHByaW50IG9wdGlvbnMuIiB9LA0KPiA+ICANCj4gPiArICB7ICJub3Rp ZnlfbWkiLCAoUHlDRnVuY3Rpb24pIGdkYnB5X25vdGlmeV9taSwNCj4gPiArICAgIE1FVEhfVkFS QVJHUyB8IE1FVEhfS0VZV09SRFMsDQo+ID4gKyAgICAibm90aWZ5X21pIChuYW1lLCBkYXRhKSAt PiBOb25lXG5cDQo+ID4gK091dHB1dCBhc3luYyByZWNvcmQgdG8gTUkgY2hhbm5lbHMgaWYgYW55 LiIgfSwNCj4gPiAgICB7TlVMTCwgTlVMTCwgMCwgTlVMTH0NCj4gPiAgfTsNCj4gPiAgDQo+ID4g ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taS1ub3RpZnkuZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pLW5vdGlmeS5leHANCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwLi44MjIxNzk0YzRmMw0KPiA+IC0tLSAv ZGV2L251bGwNCj4gPiArKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWktbm90aWZ5 LmV4cA0KPiA+IEBAIC0wLDAgKzEsNDcgQEANCj4gPiArIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAy MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCj4gDQo+IENvcHlyaWdodCBkYXRhIHNo b3VsZCBwcm9iYWJseSBiZSBqdXN0ICcyMDIzJyBoZXJlLg0KPiANCj4gVGhhbmtzLA0KPiBBbmRy ZXcNCj4gDQo+ID4gKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCj4gPiArIyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KPiA+ICsjIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yDQo+ID4gKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4gPiAr Iw0KPiA+ICsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLA0KPiA+ICsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ID4gKyMgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KPiA+ICsjIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ID4gKyMNCj4gPiArIyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQ0KPiA+ICsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcz4uDQo+ID4gKw0KPiA+ICsjIFRlc3QgY3VzdG9tIE1J IG5vdGlmaWNhdGlvbnMgaW1wbGVtZW50ZWQgaW4gUHl0aG9uLg0KPiA+ICsNCj4gPiArbG9hZF9s aWIgZ2RiLXB5dGhvbi5leHANCj4gPiArbG9hZF9saWIgbWktc3VwcG9ydC5leHANCj4gPiArc2V0 IE1JRkxBR1MgIi1pPW1pIg0KPiA+ICsNCj4gPiArZ2RiX2V4aXQNCj4gPiAraWYge1ttaV9nZGJf c3RhcnRdfSB7DQo+ID4gKyAgICByZXR1cm4NCj4gPiArfQ0KPiA+ICsNCj4gPiAraWYge1tsc2Vh cmNoIC1leGFjdCBbbWlfZ2V0X2ZlYXR1cmVzXSBweXRob25dIDwgMH0gew0KPiA+ICsgICAgdW5z dXBwb3J0ZWQgInB5dGhvbiBzdXBwb3J0IGlzIGRpc2FibGVkIg0KPiA+ICsgICAgcmV0dXJuIC0x DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YW5kYXJkX3Rlc3RmaWxlDQo+ID4gKw0KPiA+ICttaV9n ZGJfdGVzdCAic2V0IHB5dGhvbiBwcmludC1zdGFjayBmdWxsIiBcDQo+ID4gKyAgICAiLipcXF5k b25lIiBcDQo+ID4gKyAgICAic2V0IHB5dGhvbiBwcmludC1zdGFjayBmdWxsIg0KPiA+ICsNCj4g PiArbWlfZ2RiX3Rlc3QgInB5dGhvbiBnZGIubm90aWZ5X21pKCd0ZXN0LW5vdGlmaWNhdGlvbics IE5vbmUpIiBcDQo+ID4gKyAgICAiLio9dGVzdC1ub3RpZmljYXRpb25cclxuXFxeZG9uZSIgXA0K PiA+ICsgICAgInB5dGhvbiBub3RpZmljYXRpb24sIG5vIGFkZGl0aW9uYWwgZGF0YSINCj4gPiAr DQo+ID4gK21pX2dkYl90ZXN0ICJweXRob24gZ2RiLm5vdGlmeV9taSgndGVzdC1ub3RpZmljYXRp b24nLCBceyAnZGF0YTEnIDogMSAsICdkYXRhMicgOiAyIH0pIiBcDQo+ID4gKyAgICAiLio9dGVz dC1ub3RpZmljYXRpb24sZGF0YTE9XCIxXCIsZGF0YTI9XCIyXCJcclxuXFxeZG9uZSIgXA0KPiA+ ICsgICAgInB5dGhvbiBub3RpZmljYXRpb24sIHdpdGggYWRkaXRpb25hbCBkYXRhIg0KPiA+ICsN Cj4gPiArbWlfZ2RiX3Rlc3QgInB5dGhvbiBnZGIubm90aWZ5X21pKCd0ZXN0LW5vdGlmaWNhdGlv bicsIDEpIiBcDQo+ID4gKyAgICAiLipcXF5lcnJvcixtc2c9XCIuKlwiIiBcDQo+ID4gKyAgICAi cHl0aG9uIG5vdGlmaWNhdGlvbiwgaW52YWxpZCBhZGRpdGlvbmFsIGRhdGEiDQo+ID4gLS0gDQo+ ID4gMi40MC4xDQoNClQNCg==