From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80042.outbound.protection.outlook.com [40.107.8.42]) by dpdk.org (Postfix) with ESMTP id 748171B4EC for ; Fri, 1 Feb 2019 19:20:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WdqICTlQDkp56E3GUM0WuSt1anqqzIWumlxSrW9Fi8c=; b=A6NbxWKDYamos/s/nvNOgdImqar7iaHAIGBqNZl6MYA5DR1mFbFJLpF2cziZa1zp4j/uerDRykXE85RAnRBwIm0LgA7Hbdya+Lv78oSS1n3qgAImgyid7UkcILPNzA6hDwz2pTcZKVZOu8ioknRM9UuieAhhODE2VBkvaCmpSvM= Received: from HE1PR0801MB2076.eurprd08.prod.outlook.com (10.168.95.140) by HE1PR0801MB1787.eurprd08.prod.outlook.com (10.168.150.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1558.21; Fri, 1 Feb 2019 18:19:58 +0000 Received: from HE1PR0801MB2076.eurprd08.prod.outlook.com ([fe80::f5e3:70fc:e834:3c42]) by HE1PR0801MB2076.eurprd08.prod.outlook.com ([fe80::f5e3:70fc:e834:3c42%3]) with mapi id 15.20.1558.025; Fri, 1 Feb 2019 18:19:58 +0000 From: Ola Liljedahl To: Honnappa Nagarahalli , "bruce.richardson@intel.com" , "gage.eads@intel.com" , "dev@dpdk.org" CC: nd Thread-Topic: [RFC] lfring: lock-free ring buffer Thread-Index: AQHUtwUD27HnS9OItk2iqwDKLNhf3qXFCdhggAA5FICAAfcNcIAAeAQAgANX1fCAAD2sAA== Date: Fri, 1 Feb 2019 18:19:58 +0000 Message-ID: <1549045210.20325.15.camel@arm.com> References: <1548678513-14348-1-git-send-email-ola.liljedahl@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CC413@FMSMSX108.amr.corp.intel.com> <1548714375.11472.76.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CD01D@FMSMSX108.amr.corp.intel.com> <1548848178.2915.40.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CDFAB@FMSMSX108.amr.corp.intel.com> In-Reply-To: <9184057F7FC11744A2107296B6B8EB1E541CDFAB@FMSMSX108.amr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.18.5.2-0ubuntu3.2 authentication-results: spf=none (sender IP is ) smtp.mailfrom=Ola.Liljedahl@arm.com; x-originating-ip: [158.174.8.16] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1PR0801MB1787; 6:d0gSj3sjkKaF+BKFLunH9SCQ23ye7qztjqM3R+AiSeNFEOGUhprDzCXZ3vEb5HQuneNopql4+aHmKiK7Ih6QwVa8Qi/+hzHA4PVgfnBIizMGuNI+sC7XCpbbVEO/FWKQgVcIhYQOanbHjt5kqG5rtaWdBf8b0vM0g+AdMz88xIpS3e1cUP1ShuPffx3oKjc4u/oewo9sUo2mjSnPMhRMH8mZkkGRJ4/KDmJOfehTNUZVwiGP09Fsxe1ipshwq6nzRlZwoc8kOENz+OSbhEmDvh3r4qG3J0M+zicJ1RPWUsMJIUHnX90It/5EjiiWvvgqxdP3cpKDPw5pV41Ce1qJ5f4C/1OMPvFPMrEnYKdMUK7m1TNPJmbpMFOJp1Hhf5CLj7akM1vt8ZV+LUUNzk4xpAWCS6iwj2lox9ooQHPv9T5KTvAS3c/GtSNI8saFNqI4lcIJ/moMRi+EK+nRdRUIdQ==; 5:xA5YZwWm99NRccLXw3yRZXlrZATJM1h/rMTRG4KkcfEcSlpqvVcgth1jEtkgHzdvwvtD/k748udwa2Z6Ioen30COzeu85Gcxgm97C+C3OcXx1YNlMbOw+yQspNLgNFbmUEuZcyNPJAyEy9b4LB2u1GNIE+aQE/QFDY0JImf+roTwBpLdIZpbmPVTIiUtKZ0KaNIckqikxpqJFq6evRRyDQ==; 7:LBI4VN7RhcOoQqAVQYxs2RSCGwSPu32ZDH9+CxArxLI0nWpO9rSAm5vsF+ZC/UIo4mUNhORtGFvjfnS/FLqHdsvlRrNWU3qVIGfLf1Fe2uMyUhqc+dEc9jyEYC0wvP6f1CtvQC7folUpLHhHAPKNYQ== x-ms-office365-filtering-correlation-id: 693b343b-8899-4fcf-b8e6-08d68871dff0 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4618075)(2017052603328)(7153060)(7193020); SRVR:HE1PR0801MB1787; x-ms-traffictypediagnostic: HE1PR0801MB1787: nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 09352FD734 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(396003)(366004)(376002)(346002)(199004)(189003)(13464003)(40224003)(97736004)(8936002)(76176011)(93886005)(6512007)(6506007)(4326008)(102836004)(53936002)(99286004)(2201001)(6246003)(81166006)(68736007)(2501003)(476003)(478600001)(36756003)(86362001)(486006)(446003)(8676002)(25786009)(81156014)(50226002)(2616005)(14454004)(72206003)(14444005)(106356001)(30864003)(26005)(105586002)(186003)(2906002)(66066001)(53546011)(256004)(103116003)(71200400001)(3846002)(7736002)(6486002)(110136005)(6436002)(229853002)(6116002)(316002)(305945005)(71190400001)(11346002)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0801MB1787; H:HE1PR0801MB2076.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 6S9+srmzXEDbGBGaXPQPXqprrX88Eh7tR/Ymyodb4tk+f5E8KKYJHDNy7pL1RlV7Oh/cCpxF6ckB2lHGq6+JoCXVb5jenjZOzMpb74UApkbz3S5Zlj6My/3104v9BaOkKmgdFuUhSmTHjMvg9DxcjWX6LMK6Fn4Wu4vXkCeZ7y5VhjN6NVO7Spd8MBsmVetQUiTDQowLYzRZVr/UakLu1PeiAIjCe1+ubxIJkyfp1kLmdCDQfw20uhT6flVvBHslNQ+59c0j2oGNFpNesUJyerW/VrvalkFCTOLyECYdDatV7TGgazNXY09oEs3K9FEfnbwjmD7SEsQFThLecHdSy7DnfjJpEF75P6Rg8kJT9nRS+BSExqLXg2Khxe6+ie8BrNgD1OsmNyHUEkA7hdqYsatItcQ/VSGneab52GvQzxU= Content-Type: text/plain; charset="utf-8" Content-ID: <93AA1805DC6E7140970C35749B462053@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 693b343b-8899-4fcf-b8e6-08d68871dff0 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Feb 2019 18:19:58.5497 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1787 Subject: Re: [dpdk-dev] [RFC] lfring: lock-free ring buffer X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Feb 2019 18:20:01 -0000 T24gRnJpLCAyMDE5LTAyLTAxIGF0IDE1OjQwICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0KPiAN Cj4gPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IE9sYSBMaWxq ZWRhaGwgW21haWx0bzpPbGEuTGlsamVkYWhsQGFybS5jb21dDQo+ID4gU2VudDogV2VkbmVzZGF5 LCBKYW51YXJ5IDMwLCAyMDE5IDU6MzYgQU0NCj4gPiBUbzogSG9ubmFwcGEgTmFnYXJhaGFsbGkg PEhvbm5hcHBhLk5hZ2FyYWhhbGxpQGFybS5jb20+OyBSaWNoYXJkc29uLA0KPiA+IEJydWNlIDxi cnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IEVhZHMsIEdhZ2UgPGdhZ2UuZWFkc0BpbnRlbC5j b20+Ow0KPiA+IGRldkBkcGRrLm9yZw0KPiA+IENjOiBuZCA8bmRAYXJtLmNvbT4NCj4gPiBTdWJq ZWN0OiBSZTogW1JGQ10gbGZyaW5nOiBsb2NrLWZyZWUgcmluZyBidWZmZXINCj4gPiANCj4gPiBP biBXZWQsIDIwMTktMDEtMzAgYXQgMDU6MTcgKzAwMDAsIEVhZHMsIEdhZ2Ugd3JvdGU6DQo+ID4g PFNOSVA+DQo+ID4gPiANCj4gPiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiAy LiBPbiB0aGUgcGx1cyBzaWRlLCB0aGUgZW5xdWV1ZSBmdW5jdGlvbiBkZXNpZ24gdGhhdCBhbGxv d3MgaXQgdG8NCj4gPiA+ID4gPiB1c2UNCj4gPiA+ID4gPiAxLzIgdGhlIGF0b21pY3Mgb2YgbWlu ZSBhcHBlYXJzIHRvIGJlIGluZGVwZW5kZW50IG9mIHJlc2VydmluZw0KPiA+ID4gPiA+IHJpbmcg c2xvdHMsIGFuZCBzaG91bGQgdHJhbnNmZXIgb3ZlciBmYWlybHkgY2xlYW5seS4gSSdtIGEgbGl0 dGxlDQo+ID4gPiA+ID4gY29uY2VybmVkIGFib3V0IHRoZSBwZXJmb3JtYW5jZSB2YXJpYWJpbGl0 eSBpdCBpbnRyb2R1Y2VzIChpLmUuIGlmDQo+ID4gPiA+ID4gdGhlIHRocmVhZCBnZXRzIGludG8g ImNhdGNoIHVwIiBtb2RlKSwNCj4gPiA+ID4gSWYgYSB0aHJlYWQgaGFzIHRvIGNhdGNoIHVwLCBp dCBtZWFucyBpdCBpcyB1c2luZyBhIHN0YWxlDQo+ID4gPiA+IChoZWFkL3RhaWwpIGluZGV4ICht b3JlIHRoYW4gb25lIHJpbmcgbGFwIGJlaGFpbmQpLiBCZXR0ZXIgdG8gdHJ5IHRvDQo+ID4gPiA+ IGxvYWQgYSBmcmVzaCB2YWx1ZSAoaWYgb25lIGlzDQo+ID4gPiA+IGF2YWlsYWJsZSkgdGhhbiB0 byBpdGVyYXRlIG92ZXIgdGhlIHJpbmcgdW50aWwgaXQgaGFzIGNhdWdodCB1cC4gU28NCj4gPiA+ ID4gSSB0aGluayB0aGlzIGlzIHRoZSBiZXR0ZXIvZmFzdGVyIGRlc2lnbi4NCj4gPiA+ID4gDQo+ ID4gPiA+IENhdGNoIHVwIG1vZGUgaXMgbm90IHRyaWdnZXJlZCBieSBmaW5kaW5nIGFuIG9jY3Vw aWVkIHNsb3QgZm9yIHRoZQ0KPiA+ID4gPiBjdXJyZW50IGxhcCAodGhhdCB3YXMganVzdCB3cml0 dGVuIGJ5IHNvbWUgb3RoZXIgdGhyZWFkKS4gT3IgYXQNCj4gPiA+ID4gbGVhc3QgdGhpcyBpcyB0 aGUgaWRlYS4NCj4gPiA+ID4gSWYgd2UNCj4gPiA+ID4gZmluZCBhIGZyZXNobHkgd3JpdHRlbiBz bG90LCB3ZSBqdXN0IG1vdmUgdG8gdGhlIG5leHQgc2xvdC4NCj4gPiA+ID4gDQo+ID4gPiA+ID4g DQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gcGFydGljdWxhcmx5IGZvciBsYXJnZXIgcmluZ3MsIHNp bmNlIHJlYWwtdGltZSBzb2Z0d2FyZSB2YWx1ZXMNCj4gPiA+ID4gPiBwcmVkaWN0YWJpbGl0eS4N Cj4gPiA+ID4gPiBXaGF0IGlmIHRoZSByZWxvYWQgY3JpdGVyaWEgd2FzIGluc3RlYWQgc29tZXRo aW5nIGxpa2U6DQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gI2RlZmluZSBFTlFfUkVUUllfTElNSVQg MzIgLy9hcmJpdHJhcnkNCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBpZiAob2xkLmUuaWR4ICE9IHRh aWwgLSBzaXplKSB7DQo+ID4gPiA+ID4gwqDCoMKgwqBpZiAoKytmYWlsX2NudCA8IEVOUV9SRVRS WV9MSU1JVCkgew0KPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqB0YWlsKys7DQo+ID4gPiA+ID4g wqDCoMKgwqB9IGVsc2Ugew0KPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqBmYWlsX2NudCA9IDA7 DQo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoHRhaWwgPSBydGVfbGZyaW5nX3JlbG9hZCguLi4p Ow0KPiA+ID4gPiA+IMKgwqDCoMKgfQ0KPiA+ID4gPiA+IMKgwqDCoMKgZ290byByZXN0YXJ0Ow0K PiA+ID4gPiA+IH0NCj4gPiA+ID4gPiBmYWlsX2NudCA9IDA7DQo+ID4gPiA+IFRoZXJlIGFyZSB0 aHJlZSBjYXNlcyAoc2xvdCBpbmRleCBtdXN0IGJlIGJldHdlZW4gcS0+dGFpbCBhbmQNCj4gPiA+ ID4gcS0+aGVhZCArIHEtDQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gc2l6ZSk6 DQo+ID4gPiA+IHNsb3QuaWR4ID09IHRhaWwgLSBzaXplOiBzbG90IGlzIGZyZWUsIHRyeSB0byB3 cml0ZSBpdCBzbG90LmlkeCA9PSB0YWlsOg0KPiA+ID4gPiBzbG90IGhhcyBqdXN0IGJlZW4NCj4g PiA+ID4gd3JpdHRlbiAoYnkgb3RoZXIgdGhyZWFkKSwgc2tpcCB0byBuZXh0IHNsb3QgKHRhaWwr Kykgbm9uZSBvZiB0aGUgYWJvdmU6DQo+ID4gPiA+IHRocmVhZCBpcw0KPiA+ID4gPiBiZWhpbmQg KGF0IGxlYXN0IG9uZSBsYXApLCByZS1sb2FkIHRhaWwgZnJvbSBxLQ0KPiA+ID4gPiA+IA0KPiA+ ID4gPiA+IA0KPiA+ID4gPiA+IHRhaWwNCj4gPiA+ID4gSSB0aGluayB1c2luZyB0aGUgcmV0cnkg Y291bnQgYWN0dWFsbHkgZGVsYXlzIGNhdGNoaW5nIHVwIHRvIGEgZnJlc2gNCj4gPiA+ID4gcG9z aXRpb24uDQo+ID4gPiA+IA0KPiA+ID4gTWlzY29tbXVuaWNhdGlvbiBoZXJlIC0tIGJ5ICJjYXRj aCB1cCIsIEkgbWVhbnQgdGhlIGNhc2Ugd2hlcmUgdGhlDQo+ID4gPiB0aHJlYWQgaXMgYmVoaW5k IGJ1dCBieSBsZXNzIHRoYW4gb25lIGxhcCAodGhlIHNlY29uZCBjYXNlIHlvdQ0KPiA+ID4gZGVz Y3JpYmUpLiBJbiB0aGUgd29yc3QgY2FzZSwgdGhlIHRocmVhZCB3b3VsZCBoYXZlIHRvIHJlYWQg Ti0xIChOID0NCj4gPiA+IHJpbmcgc2l6ZSkgZW50cmllcyBiZWZvcmUgcmVhY2hpbmcgdGhlIG5l eHQgYXZhaWxhYmxlIGVudHJ5LCBhbmQgTiBjb3VsZA0KPiA+ID4gZWFzaWx5DQo+ID4gYmUgaW4g dGhlIHRob3VzYW5kcy4NCj4gPiA+IA0KPiA+ID4gVGhhdCdzIHRoZSBwZXJmb3JtYW5jZSB2YXJp YWJpbGl0eSBJIHdhcyByZWZlcnJpbmcgdG8sIGFuZCB3aHkgSQ0KPiA+ID4gc3VnZ2VzdGVkIGNh cHBpbmcgdGhlIGZhaWxlZCBzbG90IHJlYWRzIGF0IDMyLiBNYWludGFpbmluZyBhIGxvY2FsDQo+ ID4gPiBmYWlsX2NudCB2YXJpYWJsZSBpcyBhIHNtYWxsIHByaWNlIHRvIHBheSAocmVsYXRpdmUg dG8gYSBDQVMpIHRvDQo+ID4gPiBwcmV2ZW50IGEgcmluZyBlbnF1ZXVlIGxhdGVuY3kgc3Bpa2Uu DQo+ID4gT0ssIEkgbWlzdW5kZXJzdG9vZC4gV2UgY2FuIHJlbG9hZCB0aGUgcHJpdmF0ZSB0YWls IGZyb20gdGhlIHNoYXJlZCByaW5nDQo+ID4gYnVmZmVyDQo+ID4gdGFpbCBlYXJsaWVyLiBZb3Ug Y291bGQgYWN0dWFsbHkgZG8gdGhpcyBvbiBldmVyeSBmYWlsZWQgQ0FTIGJ1dCBJIHRoaW5rDQo+ ID4gdGhhdCB3b3VsZA0KPiA+IGJlIG92ZXJraWxsLiBZb3VyIGRlc2lnbiB3aXRoIGEgcmV0cnkg bGltaXQgaXMgYmV0dGVyLCB3ZSBuZWVkIHRvIGZpbmQgb3V0DQo+ID4gd2hhdCBpcyBhDQo+ID4g c3VpdGFibGUgdmFsdWUgZm9yIHRoZSByZXRyeSBsaW1pdC4NCj4gPiANCj4gVG9vIGxhdGUgZm9y IGxmcmluZyB2MiB1bmZvcnR1bmF0ZWx5LCBidXQgdGhpcyBpZGVhIHdpbGwgYWN0dWFsbHkgYnJl YWsgbG9jay0NCj4gZnJlZWRvbS4gRm9yIGV4YW1wbGUsIHNheSB0aGUgdGFpbCBpbmRleCBpcyAz MyBzbG90cyBiZWhpbmQgdGhlIG5leHQgYXZhaWxhYmxlDQo+IHNsb3QuIEFuIGVucXVldWVpbmcg dGhyZWFkIHdvdWxkIGdldCBzdHVjayByZXRyeWluZyBzbG90cyBmcm9tIHRhaWwgaW5kZXggLT4N Cj4gdGFpbCBpbmRleCArIDMyIHVudGlsIGFub3RoZXIgdGhyZWFkIHVwZGF0ZXMgdGhlIHRhaWwg aW5kZXguwqANCkkgZG9uJ3QgdGhpbmsgdGhpcyBpcyB0cnVlLg0KDQpJZiB3ZSBoaXQgdGhlIHJl dHJ5IGxpbWl0LCB3ZSBkbzogdGFpbCA9IF9ydGVfbGZyaW5nX3JlbG9hZCgmci0+dGFpbCwgdGFp bCk7DQp3aGVyZSB3ZSBvYnRhaW4gYSBmcmVzaCBjb3B5IG9mIHRoZSBzaGFyZWQgcmluZy0+dGFp bCB2YWx1ZSBidXQgb25seSB1c2UgdGhpcyBpZg0KaXQgaXMgImxhcmdlciIgKHVzaW5nIHNlcmlh bCBudW1iZXIgYXJpdGhtZXRpYykgdGhhbiBvdXIgcHJpdmF0ZSB0YWlsIHZhcmlhYmxlLg0KSWYg cmluZy0+dGFpbCBoYXNuJ3QgYmVlbiB1cGRhdGVkIHlldCwgd2UgY29udGludWUgdG8gdXNlIG91 ciBwcml2YXRlIHRhaWwgYnV0DQppbmNyZW1lbnQgaXQgdG8gdGhlIG5leHQgc2xvdC4gV2UgbmV2 ZXIgZ28gYmFja3dhcmRzLg0KDQpzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50NjRfdA0K X3J0ZV9sZnJpbmdfcmVsb2FkKGNvbnN0IHVpbnQ2NF90ICpsb2MsIHVpbnQ2NF90IGlkeCkNCnsN CsKgwqDCoMKgwqDCoMKgwqB1aW50NjRfdCBmcmVzaCA9IF9fYXRvbWljX2xvYWRfbihsb2MsIF9f QVRPTUlDX1JFTEFYRUQpOw0KwqDCoMKgwqDCoMKgwqDCoGlmIChfcnRlX2xmcmluZ19iZWZvcmUo aWR4LCBmcmVzaCkpIHsNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogZnJlc2gg aXMgYWZ0ZXIgaWR4LCB1c2UgdGhpcyBpbnN0ZWFkICovDQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlkeCA9IGZyZXNoOw0KwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7DQrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIENvbnRpbnVlIHdpdGggbmV4dCBzbG90ICovDQrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlkeCsrOw0KwqDCoMKgwqDCoMKgwqDCoH0N CsKgwqDCoMKgwqDCoMKgwqByZXR1cm4gaWR4Ow0KfQ0KPiANCj4gPiANCj4gPiA+IA0KPiA+ID4g DQo+ID4gPiBCdXQgeW91J3JlIHJpZ2h0IHRoYXQgd2Ugc2hvdWxkIHN0aWxsIGNhdGNoIHRoZSAx KyBsYXAgYmVoaW5kIGNhc2UsIHNvDQo+ID4gPiB0aGUgcmVsb2FkIGNyaXRlcmlhIGNvdWxkIGJl Og0KPiA+ID4gDQo+ID4gPiAjZGVmaW5lIEVOUV9SRVRSWV9MSU1JVCAzMiAvL2FyYml0cmFyeQ0K PiA+ID4gDQo+ID4gPiBpZiAob2xkLmUuaWR4ICE9IHRhaWwgLSBzaXplKSB7DQo+ID4gPiDCoMKg wqDCoGlmICgrK2ZhaWxfY250IDwgRU5RX1JFVFJZX0xJTUlUICYmIG9sZC5lLmlkeCA9PSB0YWls KSB7DQo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgdGFpbCsrOw0KPiA+ID4gwqDCoMKgwqB9IGVsc2Ug ew0KPiA+ID4gwqDCoMKgwqDCoMKgwqDCoGZhaWxfY250ID0gMDsNCj4gPiA+IMKgwqDCoMKgwqDC oMKgwqB0YWlsID0gcnRlX2xmcmluZ19yZWxvYWQoLi4uKTsNCj4gPiA+IMKgwqDCoMKgfQ0KPiA+ ID4gwqDCoMKgwqBnb3RvIHJlc3RhcnQ7DQo+ID4gPiB9DQo+ID4gPiBmYWlsX2NudCA9IDA7DQo+ ID4gQWdyZWUuDQo+ID4gDQo+ID4gPiANCj4gPiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gDQo+ID4g PiA+ID4gDQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gDQo+ID4gPiA+ID4gMy4gVXNpbmcgYSB6ZXJv LWxlbmd0aCBhcnJheSB0byBtYXJrIHRoZSBzdGFydCBvZiB0aGUgcmluZyBpcyBhDQo+ID4gPiA+ ID4gbmljZSBhcHByb2FjaA0KPiA+ID4gPiA+IC0tIEknbGwgaW5jb3Jwb3JhdGUgdGhhdCBpbnRv IHRoZSBwYXRjaHNldC4NCj4gPiA+ID4gPiANCj4gPiA+ID4gPiBBdCBhbiBhbGdvcml0aG0gbGV2 ZWwsIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBkaWZmZXJlbmNlcy4NCj4gPiA+ID4gPiBJbXBsZW1l bnRhdGlvbi13aXNlLCB3ZSdsbCBuZWVkIHRvIG5haWwgdGhlIG1lbW9yeSBvcmRlcmluZyBmbGFn cw0KPiA+ID4gPiA+IHRvIGJlc3Qgc3VwcG9ydCB3ZWFrIGNvbnNpc3RlbmN5IG1hY2hpbmVzLCBh cyB5b3UgcG9pbnRlZCBvdXQNCj4gPiA+ID4gPiBlbHNld2hlcmUuDQo+ID4gPiA+IFRoZXJlIGlz IG5vIHByZS1hY3F1aXNpdGlvbiBvZiBzbG90cyBpbiBlbnF1ZXVlIGFuZCBkZXF1ZXVlLiBUaGF0 DQo+ID4gPiA+IHNlcGFyYXRlIHN0ZXAgbWFrZXMgbG9jay1mcmVlZG9tIGltcG9zc2libGUgKEkg dGhpbmspLg0KPiA+ID4gPiANCj4gPiA+IENhbiB5b3UgZWxhYm9yYXRlPw0KPiA+IEkgdGhpbmsg bG9jay1mcmVlZG9tIGlzIGltcG9zc2libGUgd2l0aCB0aGUgaW5pdGlhbCBhY3F1aXNpdGlvbiBv ZiBlbGVtZW50cy4NCj4gPiBUaGlzIGFjcXVpc2l0aW9uIGNyZWF0ZXMgYSBzaWRlIGVmZmVjdCB0 aGF0IGNhbm5vdCBiZSB1bmRvbmUgb3IgaGVscGVkIGJ5DQo+ID4gb3RoZXINCj4gPiB0aHJlYWRz Lg0KPiA+IA0KPiA+IFlvdSBjYW4gc3RpbGwgaW1wbGVtZW50IGEgIm5vbi1ibG9ja2luZyIgcmlu ZyBidWZmZXIgKGxpa2UgeW91ciBvcmlnaW5hbA0KPiA+IGRlc2lnbikNCj4gPiB3aGljaCBoaWRl cyBhbnkgZGVsYXkgaW4gdGhyZWFkcyB0aGF0IGFjY2VzcyB0aGUgcmluZyBidWZmZXIgYnV0IGlz bid0DQo+ID4gcHJvcGVybHkNCj4gPiBsb2NrLWZyZWUgKHdoaWNoIGNvdWxkIGJlIGNvbnNpZGVy ZWQgdW5uZWNlc3NhcnkgaW4gYSBEUERLIGVudmlyb25tZW50LA0KPiA+IHRocmVhZHMgbWF5IGdl dCBkZWxheWVkIGJ1dCBzaG91bGRuJ3QgZGllIG9yIGJsb2NrIGZvcmV2ZXIpLg0KPiA+IA0KPiBJ IHRoaW5rIEkgc2VlIHdoYXQgeW91J3JlIHNheWluZy4gRm9yIGV4YW1wbGUgSWYgYSBkZXF1ZXVl aW5nIHRocmVhZCByZXNlcnZlcw0KPiBOIGVsZW1lbnRzIGFuZCB0aGVuIGlzIHByZWVtcHRlZCwg aXQncyBlZmZlY3RpdmVseSByZWR1Y2VkIHRoZSBudW1iZXIgb2YNCj4gYXZhaWxhYmxlIGVsZW1l bnRzIGJ5IE4gZHVyaW5nIHRoYXQgcGVyaW9kLg0KPiANCj4gUHJhY3RpY2FsbHkgc3BlYWtpbmcs IEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBhIHByb2JsZW0uIE5vdCBqdXN0IGJlY2F1c2UNCj4gdGhy ZWFkcyBzaG91bGRuJ3QgZGllIG9yIGJsb2NrIGZvcmV2ZXIsIGJ1dCBpZiBhIHRocmVhZCBjYW4g YmUgcHJlZW1wdGVkIGFmdGVyDQo+IHJlc2VydmluZyBOIHJpbmcgc2xvdHMgKGJ1dCBiZWZvcmUg ZW5xdWV1ZWluZyB0byBvciBkZXF1ZXVlaW5nIGZyb20gdGhlbSksIHRoZQ0KPiBuZXQgZWZmZWN0 IGlzIHRob3NlIE4gYnVmZmVycyBhcmUgdGFrZW4gb3V0IG9mIHRoZSBzeXN0ZW0uIFRoaXMgaXNu J3QgcmVhbGx5DQo+IGRpZmZlcmVudCB0aGFuIGlmIGl0IHRoYXQgdGhyZWFkIHdhcyBwcmVlbXB0 ZWQgKm91dHNpZGUqIG9mIHRoZSByaW5nIGZ1bmN0aW9ucw0KPiB3aGlsZSBob2xkaW5nIE4gYnVm ZmVycyAtLSB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIGRlc2lnbmVkIHRvIGJlIHJlc2lsaWVu dA0KPiB0byB0aGF0Lg0KWWVzLCBwcmFjdGljYWxseSBzcGVha2luZywgdGhpcyBiZWhhdmlvdXIg aXMgdW5saWtlbHkgdG8gcG9zZSBhIHByb2JsZW0gZm9yIERQREsNCmFwcGxpY2F0aW9ucy4gQnV0 IHRoZSB1cGRhdGUgb2YgYW5vdGhlciBwaWVjZSBvZiBtZXRhZGF0YSB3aWxsIGRlY3JlYXNlDQpz Y2FsYWJpbGl0eSAodW5sZXNzIGVhY2ggb2YgcHJvZC9jb25zIGhlYWQvdGFpbCBpcyBpbiBhIHNl cGFyYXRlIGNhY2hlIGxpbmUgYnV0DQp0aGF0J3MgYSBsb3Qgb2YgbW9zdGx5IGVtcHR5IGNhY2hl IGxpbmVzKS4NCg0KSWYgd2Ugb25seSBuZWVkIHRoZSBub24tYmxvY2tpbmcgYmVoYXZpb3IgaW4g RFBESyAodG8gaGFuZGxlIHZhcmlhYmxlIGxhdGVuY3kNCmFuZCB1bmV4cGVjdGVkIGRlbGF5cyBm cm9tIHRocmVhZHMgdGhhdCBhY2Nlc3MgdGhlIHJpbmcgYnVmZmVyIG9yIGFueSBkYXRhDQpzdHJ1 Y3R1cmUgdGhhdCB1c2VzIHRoZSByaW5nIGJ1ZmZlciksIHRoZXJlIGFyZSBvdGhlciB3YXlzIHRv IGFjaGlldmUgdGhhdCB0aGF0DQp3aWxsIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4gYSBsb2NrLWZy ZWUgcmluZyBsaWtlIHRoaXMgb3IgeW91ciBuYmxrIHJpbmcgd2hpY2gNCm5lZWQgdG8gcGVyZm9y bSBhIENBUyBwZXIgZWxlbWVudCBhbmQgdGhlbiBzb21lIGV4dHJhIENBUyBvcGVyYXRpb25zLg0K DQo+IA0KPiA+IA0KPiA+ID4gDQo+ID4gPiDCoEkgZG9uJ3QgY3VycmVudGx5IHNlZSBhbnkgb3Ro ZXIgd2F5IHRvIHN1cHBvcnQgcnRlX3JpbmcgYnVsaw0KPiA+ID4gc2VtYW50aWNzLCB3aGljaCBp cyBuZWNlc3NhcnkgZm9yIGNyZWF0aW5nIGEgbm9uLWJsb2NraW5nIG1lbXBvb2wNCj4gPiA+IGhh bmRsZXIsIHNvIHdlIHNob3VsZCBjbGVhciB1cCBhbnkgZG91YnQuDQo+ID4gT0ssIEkgd2Fzbid0 IGF3YXJlIG9mIHRoaXMgc3RyaWN0IGRlcGVuZGVuY3kgb24gYnVsayBlbnF1ZXVlIGFuZCBkZXF1 ZXVlLg0KPiA+IEJ1bGsNCj4gPiBkZXF1ZXVlIChtZW1wb29sIGFsbG9jYXRlcyBidWZmZXJzIGZy b20gdGhlIHJpbmcpIHNob3VsZCBiZSBlYXN5IHRvIHN1cHBvcnQNCj4gPiB0aG91Z2guIEJ1bGsg ZW5xdWV1ZSAobWVtcG9vbCBmcmVlcyBidWZmZXJzIHRvIHRoZSByaW5nKSB3aWxsIHdvcmsgYXMg bG9uZw0KPiA+IGFzDQo+ID4gdGhlIHJpbmcgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIGZy ZWUgYnVmZmVycyBzbyBpdCBjYW4gbmV2ZXIgYmVjb21lDQo+ID4gZnVsbCAobmVlZA0KPiA+IHRv IHJlbG9hZCBoZWFkL3RhaWwgcG9pbnRlcnMgYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlcyB0byBh dm9pZCBzcHVyaW91cw0KPiA+IGZ1bGwvZW1wdHkgc3RhdHVzKS4gSSBhc3N1bWUgdGhpcyBpcyB0 aGUgY2FzZSwgaW5pdGlhbGx5IGFsbCBmcmVlIGJ1ZmZlcnMNCj4gPiB3aWxsIGJlIHN0b3JlZA0K PiA+IGluIHRoZSByaW5nPw0KPiA+IA0KPiA+ID4gDQo+ID4gPiANCj4gPiA+IEluIHRoZSBOQiBy aW5nIHBhdGNoc2V0IGVhY2ggdGhyZWFkIHJlc2VydmVzIGEgbnVtYmVyIG9mIHNsb3RzIGJlZm9y ZQ0KPiA+ID4gcGVyZm9ybWluZyB0aGUgZW5xL2RlcSwgYnV0IGRvZXNuJ3QgcmVzZXJ2ZSAqc3Bl Y2lmaWMqIHNsb3RzICh1bmxpa2UNCj4gPiA+IHJ0ZV9yaW5nKS4gVGhpcyByZXNlcnZhdGlvbiBp cyBhdG9taWMsIHNvIHRoYXQgd2UgbmV2ZXIgb3Zlci1zdWJzY3JpYmUNCj4gPiA+IHZhbGlkIHJp bmcgZW50cmllcyAoZm9yIGRlcXVldWUpIG9yIHVudXNlZCByaW5nIGVudHJpZXMgKGZvciBlbnF1 ZXVlKS4NCj4gPiA+IFRoaXMgZ3VhcmFudGVlcyB0aGF0IHRoZSBlbnEvZGVxIG9wZXJhdGlvbiB3 aWxsIGV2ZW50dWFsbHkgY29tcGxldGUsDQo+ID4gPiByZWdhcmRsZXNzIG9mIHRoZSBiZWhhdmlv ciBvZiBvdGhlciB0aHJlYWRzLiBUaGlzIGlzIHdoeSB0aGUgZW5xdWV1ZQ0KPiA+ID4gbG9vcCBk b2Vzbid0IGNoZWNrIGlmIHNwYWNlIGlzIGF2YWlsYWJsZSBhbmQgdGhlIGRlcXVldWUgbG9vcCBk b2Vzbid0DQo+ID4gPiBjaGVjayBpZiBhbnkgbW9yZSB2YWxpZCBlbnRyaWVzIHJlbWFpbi4NCj4g PiBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXNlIGFjcXVpc2l0aW9ucyB3ZXJlIGp1c3QgZm9yIGNv bXBhdGliaWxpdHkgd2l0aA0KPiA+IHJ0ZV9yaW5nDQo+ID4gKHVwZGF0ZSB0aGUgc2FtZSBtZXRh ZGF0YSBzbyB0aGF0IHRoZSB1c2VyIGNhbiBtaXggTVAvTUMgYW5kIFNQL1NDIGNhbGxzKQ0KPiA+ IGJ1dA0KPiA+IHJlYWxpc2UgdGhleSBhcmUgdGhlcmUgZm9yIHRoZSBidWxrIGVucXVldWUvZGVx dWV1ZS4gQnV0IGRvaW5nIHRoaXMNCj4gPiBhY3F1aXNpdGlvbg0KPiA+IG1lYW5zIGVhY2ggZW5x dWV1ZSBvciBkZXF1ZXVlIHdpbGwgdXBkYXRlIHR3byBtZXRhZGF0YSB2YXJpYWJsZXMgc28gY3Jl YXRlcw0KPiA+IG1vcmUgY29udGVudGlvbiBhbmQgbGVzcyBzY2FsYWJpbGl0eS4gSSB0aGluayBp dCB3b3VsZCBiZSBnb29kIGlmIHdlIGNvdWxkDQo+ID4gcHJvdmlkZQ0KPiA+IHRoZSBidWxrIGJl aGF2aW91ciAqd2l0aG91dCogdGhpcyBpbml0aWFsIGFjcXVpc2l0aW9uIGFuZCBvbmx5IHVwZGF0 ZSBvbmUNCj4gPiBtZXRhZGF0YSBsb2NhdGlvbiBwZXIgZW5xdWV1ZS9kZXF1ZXVlIG9wZXJhdGlv bi4NCj4gPiANCj4gQWdyZWVkLiBJIHNlZSBsZnJpbmcgdjIgaGFzIGF2b2lkZWQgdGhpcyBvbiB0 aGUgZGVxdWV1ZSBzaWRlLCBidXQgSSB0aGluayBpdCdzDQo+IHVuYXZvaWRhYmxlIG9uIHRoZSBl bnF1ZXVlIHNpZGUgLS0gc2luY2Ugd2UgY2FuJ3Qgd3JpdGUgcmluZyBlbnRyaWVzIGFuZCBDQVMN Cj4gdGhlIHRhaWwgcG9pbnRlciBpbiBvbmUgYmlnIGF0b21pYyBvcGVyYXRpb24uIEFGQUlDVCwg c2xvdCByZXNlcnZhdGlvbnMgYXJlDQo+IHVuYXZvaWRhYmxlIHRoZXJlIHRvIGFjaGlldmUgYnVs ayBzZW1hbnRpY3MuDQpGb3IgZW5xdWV1ZSwgeWVzIHVubGVzcyB5b3UgdHJ1c3QgdGhlIHJpbmcg dG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGJlIGFibGUgdG8gaG9sZA0KYWxsIGVsZW1lbnRzIHRoYXQg bWlnaHQgYmUgZW5xdWV1ZWQuIElzbid0IHRoaXMgdGhlIGNhc2UgZm9yIGEgbWVtcG9vbD8gQWxs DQpidWZmZXJzIHdpbGwgb3JpZ2luYWxseSBiZSBvbiB0aGUgcmluZz8NCg0KPiANCj4gPiANCj4g PiA+IA0KPiA+ID4gDQo+ID4gPiBUaGlzIHNvcnQgb2YgcmVzZXJ2YXRpb24gc2hvdWxkIGJlIGNv bXBhdGlibGUgd2l0aCBsZnJpbmcsIGJ1dA0KPiA+ID4gcmVxdWlyZXMgY2hhbmdlcyAoZS5nLiB0 d28gc2V0cyBvZiBoZWFkL3RhaWwgcG9pbnRlcnMpLg0KPiA+ID4gDQo+ID4gPFNOSVA+DQo+ID4g PiANCj4gPiA+IA0KPiA+IC0tDQo+ID4gT2xhIExpbGplZGFobCwgTmV0d29ya2luZyBTeXN0ZW0g QXJjaGl0ZWN0LCBBcm0gUGhvbmUgKzQ2NzA2ODY2MzczLCBTa3lwZQ0KPiA+IG9sYS5saWxqZWRh aGwNCi0tIA0KT2xhIExpbGplZGFobCwgTmV0d29ya2luZyBTeXN0ZW0gQXJjaGl0ZWN0LCBBcm0N ClBob25lICs0NjcwNjg2NjM3MywgU2t5cGUgb2xhLmxpbGplZGFobA0KDQo=