From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 67228A0C4B; Thu, 17 Jun 2021 17:17:52 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DAD444067A; Thu, 17 Jun 2021 17:17:51 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id B61D640150 for ; Thu, 17 Jun 2021 17:17:50 +0200 (CEST) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Date: Thu, 17 Jun 2021 17:17:47 +0200 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35C61868@smartserver.smartshare.dk> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [dpdk-dev] [PATCH] parray: introduce internal API for dynamic arrays Thread-Index: AQHXYQxT3nKj3OToOE+g04oypCLg2asTbdkAgAAOoICAAATCgIAAFeZggAAOq/CABIvGAIAAHL6ggAAEMgA= References: <20210614105839.3379790-1-thomas@monjalon.net> <98CBD80474FA8B44BF855DF32C47DC35C6184E@smartserver.smartshare.dk> <2004320.XGyPsaEoyj@thomas> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Ananyev, Konstantin" , "Yigit, Ferruh" , "Thomas Monjalon" , "Richardson, Bruce" Cc: , , , , , Subject: Re: [dpdk-dev] [PATCH] parray: introduce internal API for dynamic arrays X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" PiBGcm9tOiBBbmFueWV2LCBLb25zdGFudGluIFttYWlsdG86a29uc3RhbnRpbi5hbmFueWV2QGlu dGVsLmNvbV0NCj4gU2VudDogVGh1cnNkYXksIDE3IEp1bmUgMjAyMSAxNi41OQ0KPiANCj4gPiA+ Pj4NCj4gPiA+Pj4gMTQvMDYvMjAyMSAxNToxNSwgQnJ1Y2UgUmljaGFyZHNvbjoNCj4gPiA+Pj4+ IE9uIE1vbiwgSnVuIDE0LCAyMDIxIGF0IDAyOjIyOjQyUE0gKzAyMDAsIE1vcnRlbiBCcsO4cnVw IHdyb3RlOg0KPiA+ID4+Pj4+PiBGcm9tOiBkZXYgW21haWx0bzpkZXYtYm91bmNlc0BkcGRrLm9y Z10gT24gQmVoYWxmIE9mIFRob21hcw0KPiBNb25qYWxvbg0KPiA+ID4+Pj4+PiBTZW50OiBNb25k YXksIDE0IEp1bmUgMjAyMSAxMi41OQ0KPiA+ID4+Pj4+Pg0KPiA+ID4+Pj4+PiBQZXJmb3JtYW5j ZSBvZiBhY2Nlc3MgaW4gYSBmaXhlZC1zaXplIGFycmF5IGlzIHZlcnkgZ29vZA0KPiA+ID4+Pj4+ PiBiZWNhdXNlIG9mIGNhY2hlIGxvY2FsaXR5DQo+ID4gPj4+Pj4+IGFuZCBiZWNhdXNlIHRoZXJl IGlzIGEgc2luZ2xlIHBvaW50ZXIgdG8gZGVyZWZlcmVuY2UuDQo+ID4gPj4+Pj4+IFRoZSBvbmx5 IGRyYXdiYWNrIGlzIHRoZSBsYWNrIG9mIGZsZXhpYmlsaXR5Og0KPiA+ID4+Pj4+PiB0aGUgc2l6 ZSBvZiBzdWNoIGFuIGFycmF5IGNhbm5vdCBiZSBpbmNyZWFzZSBhdCBydW50aW1lLg0KPiA+ID4+ Pj4+Pg0KPiA+ID4+Pj4+PiBBbiBhcHByb2FjaCB0byB0aGlzIHByb2JsZW0gaXMgdG8gYWxsb2Nh dGUgdGhlIGFycmF5IGF0DQo+IHJ1bnRpbWUsDQo+ID4gPj4+Pj4+IGJlaW5nIGFzIGVmZmljaWVu dCBhcyBzdGF0aWMgYXJyYXlzLCBidXQgc3RpbGwgbGltaXRlZCB0byBhDQo+IG1heGltdW0uDQo+ ID4gPj4+Pj4+DQo+ID4gPj4+Pj4+IFRoYXQncyB3aHkgdGhlIEFQSSBydGVfcGFycmF5IGlzIGlu dHJvZHVjZWQsDQo+ID4gPj4+Pj4+IGFsbG93aW5nIHRvIGRlY2xhcmUgYW4gYXJyYXkgb2YgcG9p bnRlciB3aGljaCBjYW4gYmUgcmVzaXplZA0KPiA+ID4+Pj4+PiBkeW5hbWljYWxseQ0KPiA+ID4+ Pj4+PiBhbmQgYXV0b21hdGljYWxseSBhdCBydW50aW1lIHdoaWxlIGtlZXBpbmcgYSBnb29kIHJl YWQNCj4gcGVyZm9ybWFuY2UuDQo+ID4gPj4+Pj4+DQo+ID4gPj4+Pj4+IEFmdGVyIHJlc2l6ZSwg dGhlIHByZXZpb3VzIGFycmF5IGlzIGtlcHQgdW50aWwgdGhlIG5leHQgcmVzaXplDQo+ID4gPj4+ Pj4+IHRvIGF2b2lkIGNyYXNocyBkdXJpbmcgYSByZWFkIHdpdGhvdXQgYW55IGxvY2suDQo+ID4g Pj4+Pj4+DQo+ID4gPj4+Pj4+IEVhY2ggZWxlbWVudCBpcyBhIHBvaW50ZXIgdG8gYSBtZW1vcnkg Y2h1bmsgZHluYW1pY2FsbHkNCj4gYWxsb2NhdGVkLg0KPiA+ID4+Pj4+PiBUaGlzIGlzIG5vdCBn b29kIGZvciBjYWNoZSBsb2NhbGl0eSBidXQgaXQgYWxsb3dzIHRvIGtlZXAgdGhlDQo+IHNhbWUN Cj4gPiA+Pj4+Pj4gbWVtb3J5IHBlciBlbGVtZW50LCBubyBtYXR0ZXIgaG93IHRoZSBhcnJheSBp cyByZXNpemVkLg0KPiA+ID4+Pj4+PiBDYWNoZSBsb2NhbGl0eSBjb3VsZCBiZSBpbXByb3ZlZCB3 aXRoIG1lbXBvb2xzLg0KPiA+ID4+Pj4+PiBUaGUgb3RoZXIgZHJhd2JhY2sgaXMgaGF2aW5nIHRv IGRlcmVmZXJlbmNlIG9uZSBtb3JlIHBvaW50ZXINCj4gPiA+Pj4+Pj4gdG8gcmVhZCBhbiBlbGVt ZW50Lg0KPiA+ID4+Pj4+Pg0KPiA+ID4+Pj4+PiBUaGVyZSBpcyBub3QgbXVjaCBsb2Nrcywgc28g dGhlIEFQSSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuDQo+ID4gPj4+Pj4+IFRoaXMgQVBJIG1h eSBiZSB1c2VkIHRvIGNvbXBsZXRlbHkgcmVtb3ZlIHNvbWUgY29tcGlsYXRpb24tDQo+IHRpbWUN Cj4gPiA+Pj4+Pj4gbWF4aW11bXMuDQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiBJIGdldCB0aGUgcHVy cG9zZSBhbmQgb3ZlcmFsbCBpbnRlbnRpb24gb2YgdGhpcyBsaWJyYXJ5Lg0KPiA+ID4+Pj4+DQo+ ID4gPj4+Pj4gSSBwcm9iYWJseSBhbHJlYWR5IG1lbnRpb25lZCB0aGF0IEkgcHJlZmVyICJlbWJl ZGRlZCBzdHlsZQ0KPiBwcm9ncmFtbWluZyIgd2l0aCBmaXhlZCBzaXplIGFycmF5cywgcmF0aGVy IHRoYW4gcnVudGltZQ0KPiBjb25maWd1cmFiaWxpdHkuDQo+ID4gPj4gSXQncw0KPiA+ID4+PiBt eSBwZXJzb25hbCBvcGluaW9uLCBhbmQgdGhlIERQREsgVGVjaCBCb2FyZCBjbGVhcmx5IHByZWZl cnMNCj4gcmVkdWNpbmcgdGhlIGFtb3VudCBvZiBjb21waWxlIHRpbWUgY29uZmlndXJhYmlsaXR5 LCBzbyB0aGVyZSBpcyBubyB3YXkNCj4gPiBmb3INCj4gPiA+Pj4gbWUgdG8gc3RvcCB0aGlzIHBy b2dyZXNzLCBhbmQgSSBkbyBub3QgaW50ZW5kIHRvIG9wcG9zZSB0byB0aGlzDQo+IGxpYnJhcnku IDotKQ0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gVGhpcyBsaWJyYXJ5IGlzIGxpa2VseSB0byBiZWNv bWUgYSBjb3JlIGxpYnJhcnkgb2YgRFBESywgc28gSQ0KPiB0aGluayBpdCBpcyBpbXBvcnRhbnQg Z2V0dGluZyBpdCByaWdodC4gQ291bGQgeW91IHBsZWFzZSBtZW50aW9uIGEgZmV3DQo+ID4gPj4g ZXhhbXBsZXMNCj4gPiA+Pj4gd2hlcmUgeW91IHRoaW5rIHRoaXMgaW50ZXJuYWwgbGlicmFyeSBz aG91bGQgYmUgdXNlZCwgYW5kIHdoZXJlDQo+IGl0IHNob3VsZCBub3QgYmUgdXNlZC4gVGhlbiBp dCBpcyBlYXNpZXIgdG8gZGlzY3VzcyBpZiB0aGUgYm9yZGVyIGxpbmUNCj4gPiBiZXR3ZWVuDQo+ ID4gPj4+IGNvbnRyb2wgcGF0aCBhbmQgZGF0YSBwbGFuZSBpcyBjb3JyZWN0LiBFLmcuIHRoaXMg bGlicmFyeSBpcyBub3QNCj4gaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgZHluYW1pY2FsbHkgc2l6 ZWQgcGFja2V0IHF1ZXVlcyB0aGF0IGdyb3cgYW5kDQo+ID4gc2hyaW5rDQo+ID4gPj4gaW4NCj4g PiA+Pj4gdGhlIGZhc3QgcGF0aC4NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IElmIHRoZSBsaWJyYXJ5 IGJlY29tZXMgYSBjb3JlIERQREsgbGlicmFyeSwgaXQgc2hvdWxkIHByb2JhYmx5DQo+IGJlIHB1 YmxpYyBpbnN0ZWFkIG9mIGludGVybmFsLiBFLmcuIGlmIHRoZSBsaWJyYXJ5IGlzIHVzZWQgdG8g bWFrZQ0KPiA+ID4+PiBSVEVfTUFYX0VUSFBPUlRTIGR5bmFtaWMgaW5zdGVhZCBvZiBjb21waWxl IHRpbWUgZml4ZWQsIHRoZW4gc29tZQ0KPiBhcHBsaWNhdGlvbnMgbWlnaHQgYWxzbyBuZWVkIGR5 bmFtaWNhbGx5IHNpemVkIGFycmF5cyBmb3IgdGhlaXINCj4gPiA+Pj4gYXBwbGljYXRpb24gc3Bl Y2lmaWMgcGVyLXBvcnQgcnVudGltZSBkYXRhLCBhbmQgdGhpcyBsaWJyYXJ5DQo+IGNvdWxkIHNl cnZlIHRoYXQgcHVycG9zZSB0b28uDQo+ID4gPj4+Pj4NCj4gPiA+Pj4+DQo+ID4gPj4+PiBUaGFu a3MgVGhvbWFzIGZvciBzdGFydGluZyB0aGlzIGRpc2N1c3Npb24gYW5kIE1vcnRlbiBmb3INCj4g Zm9sbG93LXVwLg0KPiA+ID4+Pj4NCj4gPiA+Pj4+IE15IHRoaW5raW5nIGlzIGFzIGZvbGxvd3Ms IGFuZCBJJ20gcGFydGljdWxhcmx5IGtlZXBpbmcgaW4gbWluZA0KPiB0aGUgY2FzZXMNCj4gPiA+ Pj4+IG9mIGUuZy4gUlRFX01BWF9FVEhQT1JUUywgYXMgYSBsZWFkaW5nIGNhbmRpZGF0ZSBoZXJl Lg0KPiA+ID4+Pj4NCj4gPiA+Pj4+IFdoaWxlIEkgZGlzbGlrZSB0aGUgaGFyZC1jb2RlZCBsaW1p dHMgaW4gRFBESywgSSdtIGFsc28gbm90DQo+IGNvbnZpbmNlZCB0aGF0DQo+ID4gPj4+PiB3ZSBz aG91bGQgc3dpdGNoIGF3YXkgZnJvbSB0aGUgZmxhdCBhcnJheXMgb3IgdGhhdCB3ZSBuZWVkIGZ1 bGx5DQo+IGR5bmFtaWMNCj4gPiA+Pj4+IGFycmF5cyB0aGF0IGdyb3cvc2hyaW5rIGF0IHJ1bnRp bWUgZm9yIGV0aGRldnMuIEkgd291bGQgc3VnZ2VzdA0KPiBhIGhhbGYtd2F5DQo+ID4gPj4+PiBo b3VzZSBoZXJlLCB3aGVyZSB3ZSBrZWVwIHRoZSBldGhkZXZzIGFzIGFuIGFycmF5LCBidXQgb25l DQo+IGFsbG9jYXRlZC9zaXplZA0KPiA+ID4+Pj4gYXQgcnVudGltZSByYXRoZXIgdGhhbiBzdGF0 aWNhbGx5LiBUaGlzIHdvdWxkIGFsbG93IHVzIHRvIGhhdmUgYQ0KPiA+ID4+Pj4gY29tcGlsZS10 aW1lIGRlZmF1bHQgdmFsdWUsIGJ1dCwgZm9yIHVzZSBjYXNlcyB0aGF0IG5lZWQgaXQsDQo+IGFs bG93IHVzZSBvZiBhDQo+ID4gPj4+PiBmbGFnIGUuZy4gICJtYXgtZXRoZGV2cyIgdG8gY2hhbmdl IHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXINCj4gZ2l2ZW4gdG8gdGhlDQo+ID4gPj4+PiBtYWxs b2MgY2FsbCBmb3IgdGhlIGFycmF5LiAgVGhpcyBtYXggbGltaXQgY291bGQgdGhlbiBiZQ0KPiBw cm92aWRlZCB0byBhcHBzDQo+ID4gPj4+PiB0b28gaWYgdGhleSB3YW50IHRvIG1hdGNoIGFueSBh cnJheSBzaXplcy4gW0FsdGVybmF0aXZlbHkgdGhvc2UNCj4gYXBwcyBjb3VsZA0KPiA+ID4+Pj4g Y2hlY2sgdGhlIHByb3ZpZGVkIHNpemUgYW5kIGVycm9yIG91dCBpZiB0aGUgc2l6ZSBoYXMgYmVl bg0KPiBpbmNyZWFzZWQgYmV5b25kDQo+ID4gPj4+PiB3aGF0IHRoZSBhcHAgaXMgZGVzaWduZWQg dG8gdXNlP10uIFRoZXJlIHdvdWxkIGJlIG5vIGV4dHJhDQo+IGRlcmVmZXJlbmNlcyBwZXINCj4g PiA+Pj4+IHJ4L3R4IGJ1cnN0IGNhbGwgaW4gdGhpcyBzY2VuYXJpbyBzbyBwZXJmb3JtYW5jZSBz aG91bGQgYmUgdGhlDQo+IHNhbWUgYXMNCj4gPiA+Pj4+IGJlZm9yZSAocG90ZW50aWFsbHkgYmV0 dGVyIGlmIGFycmF5IGlzIGluIGh1Z2VwYWdlIG1lbW9yeSwgSQ0KPiBzdXBwb3NlKS4NCj4gPiA+ Pj4NCj4gPiA+Pj4gSSB0aGluayB3ZSBuZWVkIHNvbWUgYmVuY2htYXJrcyB0byBkZWNpZGUgd2hh dCBpcyB0aGUgYmVzdA0KPiB0cmFkZW9mZi4NCj4gPiA+Pj4gSSBzcGVudCB0aW1lIG9uIHRoaXMg aW1wbGVtZW50YXRpb24sIGJ1dCBzb3JyeSBJIHdvbid0IGhhdmUgdGltZQ0KPiBmb3IgYmVuY2ht YXJrcy4NCj4gPiA+Pj4gVm9sdW50ZWVycz8NCj4gPiA+Pg0KPiA+ID4+IEkgaGFkIG9ubHkgYSBx dWljayBsb29rIGF0IHlvdXIgYXBwcm9hY2ggc28gZmFyLg0KPiA+ID4+IEJ1dCBmcm9tIHdoYXQg SSBjYW4gcmVhZCwgaW4gTVQgZW52aXJvbm1lbnQgeW91ciBzdWdnZXN0aW9uIHdpbGwNCj4gcmVx dWlyZQ0KPiA+ID4+IGV4dHJhIHN5bmNocm9uaXphdGlvbiBmb3IgZWFjaCByZWFkLXdyaXRlIGFj Y2VzcyB0byBzdWNoIHBhcnJheQ0KPiBlbGVtZW50IChsb2NrLCByY3UsIC4uLikuDQo+ID4gPj4g SSB0aGluayB3aGF0IEJydWNlIHN1Z2dlc3RzIHdpbGwgYmUgbXVjaCBsaWd0aGVyLCBlYXNpZXIg dG8NCj4gaW1wbGVtZW50IGFuZCBsZXNzIGVycm9yIHByb25lLg0KPiA+ID4+IEF0IGxlYXN0IGZv ciBydGVfZXRoZGV2c1tdIGFuZCBmcmllbmRzLg0KPiA+ID4+IEtvbnN0YW50aW4NCj4gPiA+DQo+ ID4gPiBPbmUgbW9yZSB0aG91Z2h0IGhlcmUgLSBpZiB3ZSBhcmUgdGFsa2luZyBhYm91dCBydGVf ZXRoZGV2W10gaW4NCj4gcGFydGljdWxhciwgSSB0aGluayAgd2UgY2FuOg0KPiA+ID4gMS4gbW92 ZSBwdWJsaWMgZnVuY3Rpb24gcG9pbnRlcnMgKHJ4X3BrdF9idXJzdCgpLCBldGMuKSBmcm9tDQo+ IHJ0ZV9ldGhkZXYgaW50byBhIHNlcGFyYXRlIGZsYXQgYXJyYXkuDQo+ID4gPiBXZSBjYW4ga2Vl cCBpdCBwdWJsaWMgdG8gc3RpbGwgdXNlIGlubGluZSBmdW5jdGlvbnMgZm9yICdmYXN0Jw0KPiBj YWxscyBydGVfZXRoX3J4X2J1cnN0KCksIGV0Yy4gdG8gYXZvaWQNCj4gPiA+IGFueSByZWdyZXNz aW9ucy4NCj4gPiA+IFRoYXQgY291bGQgc3RpbGwgYmUgZmxhdCBhcnJheSB3aXRoIG1heF9zaXpl IHNwZWNpZmllZCBhdA0KPiBhcHBsaWNhdGlvbiBzdGFydHVwLg0KPiA+ID4gMi4gSGlkZSByZXN0 IG9mIHJ0ZV9ldGhkZXYgc3RydWN0IGluIC5jLg0KPiA+ID4gVGhhdCB3aWxsIGFsbG93IHVzIHRv IGNoYW5nZSB0aGUgc3RydWN0IGl0c2VsZiBhbmQgdGhlIHdob2xlDQo+IHJ0ZV9ldGhkZXZbXSB0 YWJsZSBpbiBhIHdheSB3ZSBsaWtlDQo+ID4gPiAoZmxhdCBhcnJheSwgdmVjdG9yLCBoYXNoLCBs aW5rZWQgbGlzdCkgd2l0aG91dCBBQkkvQVBJIGJyZWFrYWdlcy4NCj4gPiA+DQo+ID4gPiBZZXMs IGl0IHdvdWxkIHJlcXVpcmUgYWxsIFBNRHMgdG8gY2hhbmdlIHByb3RvdHlwZSBmb3INCj4gcGt0 X3J4X2J1cnN0KCkgZnVuY3Rpb24NCj4gPiA+ICh0byBhY2NlcHQgcG9ydF9pZCwgcXVldWVfaWQg aW5zdGVhZCBvZiBxdWV1ZSBwb2ludGVyKSwgYnV0IHRoZQ0KPiBjaGFuZ2UgaXMgbWVjaGFuaWNh bCBvbmUuDQo+ID4gPiBQcm9iYWJseSBzb21lIG1hY3JvIGNhbiBiZSBwcm92aWRlZCB0byBzaW1w bGlmeSBpdC4NCj4gPiA+DQo+ID4NCj4gPiBXZSBhcmUgYWxyZWFkeSBwbGFubmluZyBzb21lIHRh c2tzIGZvciBBQkkgc3RhYmlsaXR5IGZvciB2MjEuMTEsIEkNCj4gdGhpbmsNCj4gPiBzcGxpdHRp bmcgJ3N0cnVjdCBydGVfZXRoX2RldicgY2FuIGJlIHBhcnQgb2YgdGhhdCB0YXNrLCBpdCBlbmFi bGVzDQo+IGhpZGluZyBtb3JlDQo+ID4gaW50ZXJuYWwgZGF0YS4NCj4gDQo+IE9rLCBzb3VuZHMg Z29vZC4NCj4gDQo+ID4NCj4gPiA+IFRoZSBvbmx5IHNpZ25pZmljYW50IGNvbXBsaWNhdGlvbiBJ IGNhbiBmb3Jlc2VlIHdpdGggaW1wbGVtZW50aW5nDQo+IHRoYXQgYXBwcm9hY2ggLQ0KPiA+ID4g d2UnbGwgbmVlZCBhIGFuIGFycmF5IG9mICdmYXN0JyBmdW5jdGlvbiBwb2ludGVycyBwZXIgcXVl dWUsIG5vdA0KPiBwZXIgZGV2aWNlIGFzIHdlIGhhdmUgbm93DQo+ID4gPiAodG8gYXZvaWQgZXh0 cmEgaW5kaXJlY3Rpb24gZm9yIGNhbGxiYWNrIGltcGxlbWVudGF0aW9uKS4NCj4gPiA+IFRob3Vn aCBhcyBhIGJvbnVzIHdlJ2xsIGhhdmUgYWJpbGl0eSB0byB1c2UgZGlmZmVyZW50IFJYL1RYDQo+ IGZ1bmNpb25zIHBlciBxdWV1ZS4NCj4gPiA+DQo+ID4NCj4gPiBXaGF0IGRvIHlvdSB0aGluayBz cGxpdCBSeC9UeCBjYWxsYmFjayBpbnRvIGl0cyBvd24gc3RydWN0IHRvbz8NCj4gPg0KPiA+IE92 ZXJhbGwgJ3J0ZV9ldGhfZGV2JyBjYW4gYmUgc3BsaXQgaW50byB0aHJlZSBhczoNCj4gPiAxLiBy dGVfZXRoX2Rldg0KPiA+IDIuIHJ0ZV9ldGhfZGV2X2J1cnN0DQo+ID4gMy4gcnRlX2V0aF9kZXZf Y2INCj4gPg0KPiA+IEFuZCB3ZSBjYW4gaGlkZSAxIGZyb20gYXBwbGljYXRpb25zIGV2ZW4gd2l0 aCB0aGUgaW5saW5lIGZ1bmN0aW9ucy4NCj4gDQo+IEFzIGRpc2N1c3NlZCBvZmYtbGluZSwgSSB0 aGluazoNCj4gaXQgaXMgcG9zc2libGUuDQo+IE15IGFic29sdXRlIHByZWZlcmVuY2Ugd291bGQg YmUgdG8gaGF2ZSBqdXN0IDEvMiAod2l0aCBDQiBoaWRkZW4pLg0KPiBCdXQgZXZlbiB3aXRoIDEv Mi8zIGluIHBsYWNlIEkgdGhpbmsgaXQgd291bGQgYmUgIGEgZ29vZCBzdGVwIGZvcndhcmQuDQo+ IFByb2JhYmx5IHdvcnRoIHRvIHN0YXJ0IHdpdGggMS8yLzMgZmlyc3QgYW5kIHRoZW4gc2VlIGhv dyBkaWZmaWN1bHQgaXQNCj4gd291bGQgYmUgdG8gc3dpdGNoIHRvIDEvMi4NCj4gRG8geW91IHBs YW4gdG8gc3RhcnQgd29ya2luZyBvbiBpdD8NCj4gDQo+IEtvbnN0YW50aW4NCg0KSWYgeW91IGRv IHByb2NlZWQgd2l0aCB0aGlzLCBiZSB2ZXJ5IGNhcmVmdWwuIEUuZy4gdGhlIGlubGluZWQgcngv dHggYnVyc3QgZnVuY3Rpb25zIHNob3VsZCBub3QgdG91Y2ggbW9yZSBjYWNoZSBsaW5lcyB0aGFu IHRoZXkgZG8gdG9kYXkgLSBlc3BlY2lhbGx5IGlmIHRoZXJlIGFyZSBtYW55IGFjdGl2ZSBwb3J0 cy4gVGhlIGlubGluZWQgcngvdHggYnVyc3QgZnVuY3Rpb25zIGFyZSB2ZXJ5IHNpbXBsZSwgc28g dGhvcm91Z2ggY29kZSByZXZpZXcgKGFuZCBwb3NzaWJseSBhbHNvIG9mIHRoZSByZXN1bHRpbmcg YXNzZW1ibHkpIGlzIGFwcHJvcHJpYXRlLiBTaW1wbGUgcGVyZm9ybWFuY2UgdGVzdGluZyBtaWdo dCBub3QgZGV0ZWN0IGlmIG1vcmUgY2FjaGUgbGluZXMgYXJlIGFjY2Vzc2VkIHRoYW4gYmVmb3Jl IHRoZSBtb2RpZmljYXRpb25zLg0KDQpEb24ndCBnZXQgbWUgd3JvbmcuLi4gSSBkbyBjb25zaWRl ciB0aGlzIGFuIGltcHJvdmVtZW50IG9mIHRoZSBldGhkZXYgbGlicmFyeTsgSSdtIG9ubHkgYXNr aW5nIHlvdSB0byB0YWtlIGV4dHJhIGNhcmUhDQoNCi1Nb3J0ZW4NCg0K