From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00047.outbound.protection.outlook.com [40.107.0.47]) by dpdk.org (Postfix) with ESMTP id 2EB2F4CA0 for ; Mon, 28 Jan 2019 23:26:08 +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=sfpkZ6BPQs+lOF6ZHYe/1WZA8knJIDhKdttwJv3drX8=; b=UKI5djLRtQ+PdLY/RSjGH8e2E/pg+ICvvLOTxTHQ83f8KlnPVwRUDUCw721hjD+JbRFSd/T1NIiD+/LUrSLgkd4WRcYhTMnbFqXpDP/sf3r2uYHgMm8Xb6CUYFfySwK3YUhaTL1mFlJjsL5rGF24c25t9u8d4FfhkRTriExvp9w= Received: from HE1PR0801MB2076.eurprd08.prod.outlook.com (10.168.95.140) by HE1PR0801MB1404.eurprd08.prod.outlook.com (10.167.248.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1558.17; Mon, 28 Jan 2019 22:26:05 +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.023; Mon, 28 Jan 2019 22:26:05 +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: AQHUtwUD27HnS9OItk2iqwDKLNhf3qXFCdhggAA5FIA= Date: Mon, 28 Jan 2019 22:26:04 +0000 Message-ID: <1548714375.11472.76.camel@arm.com> References: <1548678513-14348-1-git-send-email-ola.liljedahl@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CC413@FMSMSX108.amr.corp.intel.com> In-Reply-To: <9184057F7FC11744A2107296B6B8EB1E541CC413@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: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1PR0801MB1404; 6:O/+tl7lG0MQrvmjf5deQiCr3sHOrDi8oWZ/U/vLo/tuqVu9XXJBgGIuCBQzdiJmlG1/Cr/zYAFHcHe+dKhfS6QWz6FSipdW2U4AfNNyMyQJyLltO0z7/fhZ/ni9uKkNHC+Od7x1YK0t8pxDPgYZ3dUCmXJ7LlcwAdZ+CbkSaa3CqDxycD4jwJwjCwkQgDvGEoDCGpkVZbEtXMxfJ/RWtVFScdafwnkAzhMCydf4kBSl28Ay3pODwprBxtbegZeLbAyDxvR2eL8NSLALgvliqMJRPvXZsJj8ZqdNKuDvuNiSrzeW3IBvFsAJrBLq9IXw5x+yMCgbdVFHBgMAteUhLm899KACBrAdjKflQ9/cS+ZGldf/jPvdVVJXQZEO9D4cUPsyWT7YpAtoLt31EK71TW5u48KDVTJLWFZ2+ve7w2adCKUb3yVhHeeBneT6Ffx7f+ezRWcjUJl+E6Y8ukdiJ8A==; 5:XyWk4B2uCNQBtLx0SH2TYv/Zi3nwexEWS5VN2uRAdoyKS6bJy1JA7UmXLzGQl7TvT7WlktFkv0wNeqU/zgk/1VTA60qk9vPmdgCuYs7/ePClCgUML/wTF+c8kDXZh1eGchyWsANbYuUAzyG+J5wxXcd3cjycaBGx55m5AEYpw7ShduYap5Mv83i+9KC2FgVMp4cwEVNDcDTqHQGMmnyrag==; 7:0/hrrlDJRyVMUq4KeHTvkaKFABhV1brb+MAP66ZLIf5ONF8VvSJX/pWGz47NaBDacdnfSH9k2qww6JmLVhFsjBv4APS7nfNQKQ7tFNz2fJFUAgsv9IDng70UJpEcO0VALSBwmWPbsk/ZYebJ3UMDNQ== x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-correlation-id: aef6b918-6a00-4cfd-9f58-08d6856f97d2 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:HE1PR0801MB1404; x-ms-traffictypediagnostic: HE1PR0801MB1404: nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 0931CB1479 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(366004)(39860400002)(376002)(136003)(396003)(13464003)(189003)(199004)(71190400001)(486006)(71200400001)(99286004)(6306002)(6512007)(102836004)(68736007)(105586002)(2201001)(476003)(2616005)(106356001)(103116003)(446003)(966005)(30864003)(14454004)(72206003)(11346002)(478600001)(8936002)(2906002)(6116002)(3846002)(86362001)(6246003)(81166006)(26005)(81156014)(66066001)(76176011)(256004)(2501003)(53546011)(316002)(6486002)(36756003)(7736002)(53936002)(97736004)(8676002)(50226002)(4326008)(6436002)(110136005)(186003)(25786009)(305945005)(14444005)(229853002)(6506007)(66574012)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0801MB1404; H:HE1PR0801MB2076.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A: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: OC83z1vo2GdSV/z2tBq7Cu4Cro+T/or2SnGY6VZb92ATAIKLLPlVwDR/3aGrIpRV1OmixUk+CfQtC95TbCO5ONYaS7Y0GfSwJPi3zpHirBu6H8ztAwWuAOWH0Of4NQvaZTujgpya0OcxE8Bd3dqK95mlxFoCf/hKZrkqOyOe4DohAAClJvALOxjt7vPy5Txnj9qd8ahxq1wR6jPIztzR/mLi5UC50YByvERYDMIvHppbfdbJGfMeQVFqAyjUtjCB6qPKWFBeDqTYhgPWHdRW8pDsYJMMtBGJaShODtZnnT0CUDfh+rmTBH0nx0fvAmUhebjhWO/utpIuPEew3XxG9THuGEp2lLS7lfov3vqaLaZRk7SJSpRdXjqpOZAF95oTw8jOHQ3/YwsGx7n0E5xhuh8/iqTpNJfFC6I9SkpkH/0= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: aef6b918-6a00-4cfd-9f58-08d6856f97d2 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jan 2019 22:26:05.2259 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1404 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: Mon, 28 Jan 2019 22:26:08 -0000 T24gTW9uLCAyMDE5LTAxLTI4IGF0IDIxOjA0ICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0KPiBI ZXkgT2xhLA0KPiANCj4gPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZy b206IE9sYSBMaWxqZWRhaGwgW21haWx0bzpPbGEuTGlsamVkYWhsQGFybS5jb21dDQo+ID4gU2Vu dDogTW9uZGF5LCBKYW51YXJ5IDI4LCAyMDE5IDY6MjkgQU0NCj4gPiBUbzogZGV2QGRwZGsub3Jn OyBFYWRzLCBHYWdlIDxnYWdlLmVhZHNAaW50ZWwuY29tPjsgSG9ubmFwcGEgTmFnYXJhaGFsbGkN Cj4gPiA8SG9ubmFwcGEuTmFnYXJhaGFsbGlAYXJtLmNvbT47IFJpY2hhcmRzb24sIEJydWNlDQo+ ID4gPGJydWNlLnJpY2hhcmRzb25AaW50ZWwuY29tPg0KPiA+IENjOiBuZCA8bmRAYXJtLmNvbT47 IE9sYSBMaWxqZWRhaGwgPE9sYS5MaWxqZWRhaGxAYXJtLmNvbT4NCj4gPiBTdWJqZWN0OiBbUkZD XSBsZnJpbmc6IGxvY2stZnJlZSByaW5nIGJ1ZmZlcg0KPiA+IA0KPiA+IExvY2stZnJlZSBNUC9N QyByaW5nIGJ1ZmZlciB3aXRoIFNQL1NDIG9wdGlvbnMuDQo+ID4gVGhlIHJpbmcgYnVmZmVyIG1l dGFkYXRhIG9ubHkgbWFpbnRhaW5zIG9uZSBzZXQgb2YgaGVhZCBhbmQgdGFpbCBwb2ludGVycy4N Cj4gPiBUYWlsIGlzDQo+ID4gdXBkYXRlZCBvbiBlbnF1ZXVlLCBoZWFkIGlzIHVwZGF0ZWQgb24g ZGVxdWV1ZS4NCj4gPiBUaGUgcmluZyBzbG90cyBiZXR3ZWVuIGhlYWQgYW5kIHRhaWwgYWx3YXlz IGNvbnRhaW5zIHZhbGlkICh1bmNvbnN1bWVkKQ0KPiA+IHNsb3RzLg0KPiA+IEVhY2ggcmluZyBz bG90IGNvbnNpc3RzIG9mIGEgc3RydWN0IG9mIGRhdGEgcG9pbnRlciAoInB0ciIpIGFuZCByaW5n IGluZGV4DQo+ID4gKCJpZHgiKS4NCj4gPiBTbG90LmlkeCBpcyBvbmx5IHVwZGF0ZWQgb24gZW5x dWV1ZSB3aXRoIHRoZSBuZXcgcmluZyBpbmRleC4gVGhlIHNsb3QgaW5kZXgNCj4gPiBpcw0KPiA+ IHVzZWQgdG8gZW5zdXJlIHRoYXQgc2xvdHMgYXJlIHdyaXR0ZW4gc2VxdWVudGlhbGx5IChpbXBv cnRhbnQgZm9yIEZJRk8NCj4gPiBvcmRlcmluZykuDQo+ID4gSXQgaXMgYWxzbyB1c2VkIHRvIHN5 bmNocm9uaXNlIG11bHRpcGxlIHByb2R1Y2Vycy4NCj4gPiANCj4gPiBNUCBlbnF1ZXVlIHNjYW5z IHRoZSByaW5nIGZyb20gdGhlIHRhaWwgdW50aWwgaGVhZCtzaXplLCBsb29raW5nIGZvciBhbg0K PiA+IGVtcHR5DQo+ID4gc2xvdCBhcyBpbmRpY2F0ZWQgYnkgc2xvdC5pZHggZXF1YWxpbmcgdGhl IHJpbmcgaW5kZXggb2YgdGhlIHByZXZpb3VzIGxhcA0KPiA+IChpbmRleCAtDQo+ID4gcmluZyBz aXplKS4gVGhlIGVtcHR5IHNsb3QgaXMgd3JpdHRlbiAoLnB0ciA9IGRhdGEsIC5pZHggPSBpbmRl eCkgdXNpbmcgQ0FTLg0KPiA+IElmIENBUw0KPiA+IGZhaWxzLCBzb21lIG90aGVyIHRocmVhZCB3 cm90ZSB0aGUgc2xvdCBhbmQgdGhlIHRocmVhZCBjb250aW51ZXMgd2l0aCB0aGUNCj4gPiBuZXh0 DQo+ID4gc2xvdC4NCj4gPiANCj4gPiBXaGVuIGFsbCBlbGVtZW50cyBoYXZlIGJlZW4gZW5xdWV1 ZWQgb3IgaWYgdGhlIHJpbmcgYnVmZmVyIGlzIGZ1bGwsIHRoZQ0KPiA+IHRocmVhZA0KPiA+IHVw ZGF0ZXMgdGhlIHJpbmcgYnVmZmVyIHRhaWwgcG9pbnRlciAodW5sZXNzIHRoaXMgaGFzIG5vdCBh bHJlYWR5IGJlZW4NCj4gPiB1cGRhdGVkIGJ5DQo+ID4gc29tZSBvdGhlciB0aHJlYWQpLiBUaHVz IHRoaXMgdGhyZWFkIHdpbGwgaGVscCBvdGhlciB0aHJlYWRzIHRoYXQgaGF2ZQ0KPiA+IHdyaXR0 ZW4NCj4gPiByaW5nIHNsb3RzIGJ1dCBub3QgeWV0IHVwZGF0ZWQgdGhlIHRhaWwgcG9pbnRlci4N Cj4gPiANCj4gPiBJZiBhIHNsb3Qgd2l0aCBhbiBpbmRleCBkaWZmZXJlbnQgZnJvbSBjdXJyZW50 IG9yIHByZXZpb3VzIGxhcCBpcyBmb3VuZCwgaXQNCj4gPiBpcw0KPiA+IGFzc3VtZWQgdGhhdCB0 aGUgdGhyZWFkIGhhcyBmYWxsZW4gYmVoaW5kIChlLmcuIGJlZW4gcHJlZW1wdGVkKSBhbmQgdGhl DQo+ID4gbG9jYWwNCj4gPiB0YWlsIHBvaW50ZXIgaXMgKGNvbmRpdGlvbmFsbHkpIHVwZGF0ZWQg ZnJvbSB0aGUgcmluZyBidWZmZXIgbWV0YWRhdGEgaW4NCj4gPiBvcmRlciB0bw0KPiA+IHF1aWNr bHkgY2F0Y2ggdXAuDQo+ID4gDQo+ID4gTVAgZGVxdWV1ZSByZWFkcyAodXAgdG8pIE4gc2xvdHMg ZnJvbSB0aGUgaGVhZCBpbmRleCBhbmQgYXR0ZW1wdHMgdG8gY29tbWl0DQo+ID4gdGhlIG9wZXJh dGlvbiB1c2luZyBDQVMgb24gdGhlIGhlYWQgcG9pbnRlci4NCj4gPiANCj4gPiBFbnF1ZXVlIE4g ZWxlbWVudHM6IE4rMSBDQVMgb3BlcmF0aW9ucyAoYnV0IHRoZSBsYXN0IENBUyBvcGVyYXRpb24g bWlnaHQgbm90DQo+ID4gYmUgbmVjZXNzYXJ5IGR1cmluZyBjb250ZW50aW9uIGFzIHByb2R1Y2Vy cyB3aWxsIGhlbHAgZWFjaCBvdGhlcikgRGVxdWV1ZSBODQo+ID4gZWxlbWVudHM6IDEgQ0FTIG9w ZXJhdGlvbg0KPiA+IA0KPiA+IEFzIHRoZSBsb2NrLWZyZWUgcmluZyBzdXBwb3J0cyBib3RoIE1U LXNhZmUgKE1QL01DKSBhbmQgc2luZ2xlLXRocmVhZGVkDQo+ID4gKFNQL1NDKSBvcGVyYXRpb25z LCB0aGVyZSBpcyBhIHF1ZXN0aW9uIHdoZXRoZXIgdGhlIG1vZGVzIHNob3VsZCBiZSBjaG9zZW4N Cj4gPiBvbmx5IHdoZW4gY3JlYXRpbmcgYSByaW5nIGJ1ZmZlciBvciBpZiB0aGUgYXBwbGljYXRp b24gY2FuIG1peCBNVC1zYWZlIGFuZA0KPiA+IHNpbmdsZS0NCj4gPiB0aHJlYWRlZCBlbnF1ZXVl IChvciBkZXF1ZXVlKSBjYWxscy4gVG8gZm9sbG93IHRoZSBwYXR0ZXJuIHNldCBieSBydGVfcmlu ZywNCj4gPiBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIE1QIGFuZCBTUCBlbnF1ZXVlIGFuZCBNQyBh bmQgU0MgZGVxdWV1ZSBhcmUgbWFkZQ0KPiA+IGF2YWlsYWJsZS4gVGhlIHdpc2RvbSBvZiB0aGlz IGFiaWxpdHkgY2FuIGJlIHF1ZXN0aW9uZWQuIFRoZSBsb2NrLWZyZWUNCj4gPiBkZXNpZ24NCj4g PiBhbGxvd3MgdGhyZWFkcyB0byBiZSBibG9ja2VkIGZvciBsb25nIHBlcmlvZHMgb2YgdGltZSB3 aXRob3V0IGludGVyZmVyaW5nDQo+ID4gd2l0aA0KPiA+IHRoZSBvcGVyYXRpb24gb2YgdGhlIHJp bmcgYnVmZmVyIGJ1dCBtaXhpbmcgKGxvY2stZnJlZSkgTVQtc2FmZSBhbmQgc2luZ2xlLQ0KPiA+ IHRocmVhZGVkIGNhbGxzIHJlcXVpcmVzIHRoYXQgdGhlcmUgYXJlIG9uIHN1Y2ggdGhyZWFkcyB0 aGF0IHdha2UgdXAgYXQgdGhlDQo+ID4gd3JvbmcNCj4gPiBtb21lbnQgKHdoZW4gYSBzaW5nbGUt dGhyZWFkZWQgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzKS4NCj4gPiANCj4gSSBzZWUgdGhpcyBh cyBhIHVzZXIgZXJyb3IuIFRoZSBydGVfcmluZyBkb2N1bWVudGF0aW9uIGlzIGNsZWFyIHRoYXQN Cj4gcmluZ19zcF9lbnF1ZXVlIGFuZCByaW5nX3NjX2RlcXVldWUgZnVuY3Rpb25zIGFyZSBub3Qg TVQtc2FmZSwgYW5kIChpZiBJJ20NCj4gcmVhZGluZyB0aGlzIGNvcnJlY3RseSkgdGhpcyBzY2Vu YXJpbyBpbnZvbHZlcyBoYXZpbmcgMisgdGhyZWFkcyBleGVjdXRpbmcgYW4NCj4gb3BlcmF0aW9u IGluIHBhcmFsbGVsLg0KU28gdGhlIGluZGl2aWR1YWwgTVAvU1AvTUMvU0MgZnVuY3Rpb25zIHNo b3VsZCBhbHNvIGJlIGRpcmVjdGx5IGF2YWlsYWJsZSB0byB0aGUNCnVzZXI/IFRoaXMgaXMgd2hh dCBJIGhhdmUgaW1wbGVtZW50ZWQgaGVyZSAoYnV0IG5vdCBpbiBteSBvcmlnaW5hbCBQUk9HUkVT UzY0DQppbXBsZW1lbnRhdGlvbiB3aGVyZSBNUC9TUC9NQy9TQyBtb2RlIGlzIGZpeGVkIGF0IGNy ZWF0aW9uKS4gQnV0IEkgZG9uJ3QgbGlrZQ0KaXQuDQoNCj4gDQo+ID4gDQo+ID4gMTI4LWJpdCBs b2NrLWZyZWUgYXRvbWljIGNvbXBhcmUgZXhjaGFuZ2Ugb3BlcmF0aW9ucyBmb3IgQUFyY2g2NA0K PiA+IChBUk12OC4wKSBhbmQgeDg2LTY0IGFyZSBwcm92aWRlZCBpbiBsb2NrZnJlZTE2LmguIEkg ZXhwZWN0IHRoZXNlIGZ1bmN0aW9ucw0KPiA+IHRvDQo+ID4gZmluZCBhIGRpZmZlcmVudCBob21l IGFuZCBwb3NzaWJseSBhIGRpZmZlcmVudCBBUEkuDQo+ID4gTm90ZSB0aGF0IGEgJ2ZyYWlsJyB2 ZXJzaW9uIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlIGlzIGltcGxlbWVudGVkLCB0aGlzDQo+ID4g bWVhbnMgdGhhdCBpbiB0aGUgY2FzZSBvZiBmYWlsdXJlLCB0aGUgb2xkIHZhbHVlIHJldHVybmVk IGlzIG5vdCBndWFyYW50ZWVkDQo+ID4gdG8gYmUNCj4gPiBhdG9taWNhbGx5IHJlYWQgKGFzIHRo aXMgaXMgbm90IHBvc3NpYmxlIG9uIEFSTXY4LjAgd2l0aG91dCBhbHNvIHdyaXRpbmcgdG8NCj4g PiB0aGUNCj4gPiBsb2NhdGlvbikuIEF0b21pY2FsbHkgcmVhZCB2YWx1ZXMgYXJlIG9mdGVuIG5v dCBuZWNlc3NhcnksIGl0IGlzIGENCj4gPiBzdWNjZXNzZnVsDQo+ID4gY29tcGFyZSBhbmQgZXhj aGFuZ2Ugb3BlcmF0aW9uIHdoaWNoIHByb3ZpZGVzIGF0b21pY2l0eS4NCj4gPiANCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBPbGEgTGlsamVkYWhsIDxvbGEubGlsamVkYWhsQGFybS5jb20+DQo+IEEgZmV3 IGhpZ2gtbGV2ZWwgdGhvdWdodHM6DQo+IDEuIFRoZSBlbnF1ZXVlIGFuZCBkZXF1ZXVlIGZ1bmN0 aW9ucyBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcnRlX3Jpbmcncw0KPiBidWxrIHNlbWFu dGljcywNCkkgd2Fzbid0IGNvbnNpZGVyaW5nIDEwMCUgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVy IG1vZHVsZXMgdGhhdCBhbHJlYWR5IHVzZQ0KcnRlX3JpbmcsIHRoZSBjb2RlIHJhdGhlciByZWZs ZWN0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIG15IG93biB1c2UgY2FzZXMuIElmIHdlDQp3YW50IHRo aXMsIHRoZW4gd2UgbmVlZCB0byBwcm92aWRlIHRoZSBzYW1lIGJ1bGsgZW5xdWV1ZS9kZXF1ZXVl IGJlaGF2aW91ciBhcw0KcnRlX3JpbmcuDQoNCj4gIHdoZXJlIGVpdGhlciBhbGwgcG9pbnRlcnMg b3Igbm9uZSBhcmUgb3BlcmF0ZWQgb24uIFRoaXMgaXMgbmVjZXNzYXJ5IHRvDQo+IGltcGxlbWVu dCB0aGUgcmluZyBBUEkgb2YgY291cnNlLCBidXQgaW4gYSBicm9hZGVyIHNlbnNlIEkgdGhpbmsg aXQncw0KPiBuZWNlc3NhcnkgZm9yIHVzYWJpbGl0eSBpbiBnZW5lcmFsLiBGb3IgZXhhbXBsZSwg aG93IHdvdWxkIGEgdXNlciAob3IgdGhlIHJpbmcNCj4gbWVtcG9vbCBoYW5kbGVyKSBkaXN0aW5n dWlzaCBiZXR3ZWVuIHBhcnRpYWwgZGVxdWV1ZXMgdGhhdCBvY2N1ciBiZWNhdXNlIHRoZQ0KPiBy aW5nIGlzIGVtcHR5IHZzLiB0aG9zZSB0aGF0IG9jY3VyIGR1ZSB0byBhIHJhY2U/IGRlcXVldWVf YnVsa19tYyBjb3VsZCByZXR1cm4NCj4gMCBldmVuIHRob3VnaCB0aGUgcmluZyBpcyBmdWxsLCBp ZiBpdHMgZmlyc3QgQ0FTIGZhaWxzIGFuZCB0aGUgaGVhZCBoYXMNCj4gYWR2YW5jZWQgYmV5b25k IGl0cyBsb2NhbCB0YWlsIHZhcmlhYmxlLg0KVGFpbCBjb3VsZCBiZSByZS1yZWFkIG9uIGEgQ0FT KCZoZWFkKSBmYWlsdXJlLiBUaGlzIGlzIGhvdyBJIG9yaWdpbmFsbHkgY29kZWQNCnJpbmcgYnVm ZmVyIGVucXVldWUgYW5kIGRlcXVldWUgZnVuY3Rpb25zLiBCdXQgQ0FTKCZoZWFkKSBmYWlsdXJl IGRvZXNuJ3QgYnkNCml0c2VsZiBtZWFuIHRoYXQgKnRhaWwqIGhhcyBjaGFuZ2VkLiBTbyBJIGhv aXN0ZWQgdGhlIHJlYWQgb2YgdGFpbCBiZWZvcmUgdGhlDQpDQVMtbG9vcCB3aGljaCBtYWRlIHRo ZSBjb2RlIHNsaWdodGx5IGZhc3RlciBzaW5jZSB3ZSBhdm9pZCB1bm5lY2Vzc2FyaWx5DQpyZWFk aW5nIGEgbG9jYXRpb24gd2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFuZCB0aHVzIGNv dWxkIGNhdXNlIGEgY2FjaGUNCm1pc3MuIE1heWJlIHRoaXMgbWljcm9wdGltaXNhdGlvbiBpc24n dCBhbHdheXMgYSBnb29kIGlkZWEgKGl0IGNvdWxkIGxlYWQgdG8NCnNwdXJpb3VzIHF1ZXVlIGZ1 bGwvZW1wdHkgZmFpbHVyZXMpLiBBbm90aGVyIHNvbHV0aW9uIGlzIHRvIG9ubHkgcmUtcmVhZCB0 YWlsIGlmDQp3ZSBzZWUgdGhlIHF1ZXVlIGFzIGVtcHR5IChvciB3ZSBjYW4ndCBhY3F1aXJlIGFz IG1hbnkgc2xvdHMgYXMgdGhlIHVzZXINCnJlcXVlc3RlZCkuDQoNCsKgIMKgIMKgIMKgIHVpbnQ2 NF90IGhlYWQgPSBfX2F0b21pY19sb2FkX24oJnItPmhlYWQsIF9fQVRPTUlDX1JFTEFYRUQpOw0K wqDCoMKgwqDCoMKgwqDCoHVpbnQ2NF90IHRhaWwgPSBfX2F0b21pY19sb2FkX24oJnItPnRhaWws IF9fQVRPTUlDX0FDUVVJUkUpOw0KwqDCoMKgwqDCoMKgwqDCoGRvIHsNCsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgYWN0dWFsID0gUlRFX01JTigoaW50NjRfdCkodGFpbCAtIGhlYWQp LCAoaW50NjRfdCluZWxlbXMpOw0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo dW5saWtlbHkoYWN0dWFsIDw9IDApKSB7DQoJCQkvKiBSZS1sb2FkIHRhaWwgb25seSB3aGVuIHF1 ZXVlIGxvb2tzIGVtcHR5ICovDQrCoCDCoCDCoCDCoCAJCXRhaWwgPSBfX2F0b21pY19sb2FkX24o JnItPnRhaWwsIF9fQVRPTUlDX0FDUVVJUkUpOw0KCcKgIMKgIMKgDQrCoCDCoCDCoCDCoCDCoCBh Y3R1YWwgPSBSVEVfTUlOKChpbnQ2NF90KSh0YWlsIC0gaGVhZCksIChpbnQ2NF90KW5lbGVtcyk7 DQoJCQlpZg0KKHVubGlrZWx5KGFjdHVhbCA8PSAwKSkNCgnCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCgkJfQ0KwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBydGVfbGZyaW5nX2RlcV9lbGVtcyhlbGVtcywgci0+cmluZywgbWFz aywgaGVhZCwgYWN0dWFsKTsNCsKgwqDCoMKgwqDCoMKgwqB9IHdoaWxlICghX19hdG9taWNfY29t cGFyZV9leGNoYW5nZV9uKCZyLT5oZWFkLA0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAmaGVhZCwNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaGVhZCArIGFj dHVhbCwNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyp3ZWFrKi9mYWxzZSwN CsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX19BVE9NSUNfUkVMRUFTRSwNCsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX19BVE9NSUNfUkVMQVhFRCkpOw0KPiAg VGhlIHVzZXIgY291bGQgcmV0cnkgZGVxdWV1ZSwgb2YgY291cnNlLCBidXQgaG93IG1hbnkgdGlt ZXMgdW50aWwgdGhleSBmZWVsDQo+IGNvbmZpZGVudCB0aGF0IHRoZSByaW5nIGlzIHRydWx5IGVt cHR5IGFuZCBnaXZlIHVwPyBJIGRvbid0IHRoaW5rIHdlIGNhbiBhdm9pZA0KPiByZXNlcnZpbmcg cmluZyBzbG90cyBwcmlvciB0byBlbnF1ZXVlaW5nL2RlcXVldWVpbmcuDQpJZiB0YWlsIGlzIChy ZS0pIHJlYWQgaW5zaWRlIHRoZSBDQVMtbG9vcCwgdGhlcmUgc2hvdWxkIGJlIG5vIHNwdXJpb3Vz IHF1ZXVlDQplbXB0eSBmYWlsdXJlcyBhbmQgbm8gbmVlZCB0byByZXBlYXRlZGx5IGNhbGwgdGhl IGRlcXVldWUgZnVuY3Rpb24gImp1c3QgdG8gYmUNCnN1cmUiLiBUaGUgYnVsayBkZXF1ZXVlL2Vu cXVldWUgYmVoYXZpb3VyIGlzIHNlcGFyYXRlLg0KDQo+IA0KPiAyLiBPbiB0aGUgcGx1cyBzaWRl LCB0aGUgZW5xdWV1ZSBmdW5jdGlvbiBkZXNpZ24gdGhhdCBhbGxvd3MgaXQgdG8gdXNlIDEvMiB0 aGUNCj4gYXRvbWljcyBvZiBtaW5lIGFwcGVhcnMgdG8gYmUgaW5kZXBlbmRlbnQgb2YgcmVzZXJ2 aW5nIHJpbmcgc2xvdHMsIGFuZCBzaG91bGQNCj4gdHJhbnNmZXIgb3ZlciBmYWlybHkgY2xlYW5s eS4gSSdtIGEgbGl0dGxlIGNvbmNlcm5lZCBhYm91dCB0aGUgcGVyZm9ybWFuY2UNCj4gdmFyaWFi aWxpdHkgaXQgaW50cm9kdWNlcyAoaS5lLiBpZiB0aGUgdGhyZWFkIGdldHMgaW50byAiY2F0Y2gg dXAiIG1vZGUpLCANCklmIGEgdGhyZWFkIGhhcyB0byBjYXRjaCB1cCwgaXQgbWVhbnMgaXQgaXMg dXNpbmcgYSBzdGFsZSAoaGVhZC90YWlsKSBpbmRleA0KKG1vcmUgdGhhbiBvbmUgcmluZyBsYXAg YmVoYWluZCkuIEJldHRlciB0byB0cnkgdG8gbG9hZCBhIGZyZXNoIHZhbHVlIChpZiBvbmUgaXMN CmF2YWlsYWJsZSkgdGhhbiB0byBpdGVyYXRlIG92ZXIgdGhlIHJpbmcgdW50aWwgaXQgaGFzIGNh dWdodCB1cC4gU28gSSB0aGluayB0aGlzDQppcyB0aGUgYmV0dGVyL2Zhc3RlciBkZXNpZ24uDQoN CkNhdGNoIHVwIG1vZGUgaXMgbm90IHRyaWdnZXJlZCBieSBmaW5kaW5nIGFuIG9jY3VwaWVkIHNs b3QgZm9yIHRoZSBjdXJyZW50IGxhcA0KKHRoYXQgd2FzIGp1c3Qgd3JpdHRlbiBieSBzb21lIG90 aGVyIHRocmVhZCkuIE9yIGF0IGxlYXN0IHRoaXMgaXMgdGhlIGlkZWEuIElmDQp3ZSBmaW5kIGEg ZnJlc2hseSB3cml0dGVuIHNsb3QsIHdlIGp1c3QgbW92ZSB0byB0aGUgbmV4dCBzbG90Lg0KDQo+ IHBhcnRpY3VsYXJseSBmb3IgbGFyZ2VyIHJpbmdzLCBzaW5jZSByZWFsLXRpbWUgc29mdHdhcmUg dmFsdWVzIHByZWRpY3RhYmlsaXR5Lg0KPiBXaGF0IGlmIHRoZSByZWxvYWQgY3JpdGVyaWEgd2Fz IGluc3RlYWQgc29tZXRoaW5nIGxpa2U6DQo+IA0KPiAjZGVmaW5lIEVOUV9SRVRSWV9MSU1JVCAz MiAvL2FyYml0cmFyeQ0KPiANCj4gaWYgKG9sZC5lLmlkeCAhPSB0YWlsIC0gc2l6ZSkgew0KPiDC oMKgwqDCoGlmICgrK2ZhaWxfY250IDwgRU5RX1JFVFJZX0xJTUlUKSB7DQo+IMKgwqDCoMKgwqDC oMKgwqB0YWlsKys7DQo+IMKgwqDCoMKgfSBlbHNlIHsNCj4gwqDCoMKgwqDCoMKgwqDCoGZhaWxf Y250ID0gMDsNCj4gwqDCoMKgwqDCoMKgwqDCoHRhaWwgPSBydGVfbGZyaW5nX3JlbG9hZCguLi4p O8KgDQo+IMKgwqDCoMKgfQ0KPiDCoMKgwqDCoGdvdG8gcmVzdGFydDsNCj4gfQ0KPiBmYWlsX2Nu dCA9IDA7DQpUaGVyZSBhcmUgdGhyZWUgY2FzZXMgKHNsb3QgaW5kZXggbXVzdCBiZSBiZXR3ZWVu IHEtPnRhaWwgYW5kIHEtPmhlYWQgKyBxLQ0KPnNpemUpOg0Kc2xvdC5pZHggPT0gdGFpbCAtIHNp emU6IHNsb3QgaXMgZnJlZSwgdHJ5IHRvIHdyaXRlIGl0DQpzbG90LmlkeCA9PSB0YWlsOiBzbG90 IGhhcyBqdXN0IGJlZW4gd3JpdHRlbiAoYnkgb3RoZXIgdGhyZWFkKSwgc2tpcCB0byBuZXh0DQpz bG90ICh0YWlsKyspDQpub25lIG9mIHRoZSBhYm92ZTogdGhyZWFkIGlzIGJlaGluZCAoYXQgbGVh c3Qgb25lIGxhcCksIHJlLWxvYWQgdGFpbCBmcm9tIHEtDQo+dGFpbA0KDQpJIHRoaW5rIHVzaW5n IHRoZSByZXRyeSBjb3VudCBhY3R1YWxseSBkZWxheXMgY2F0Y2hpbmcgdXAgdG8gYSBmcmVzaCBw b3NpdGlvbi4NCg0KPiANCj4gMy4gVXNpbmcgYSB6ZXJvLWxlbmd0aCBhcnJheSB0byBtYXJrIHRo ZSBzdGFydCBvZiB0aGUgcmluZyBpcyBhIG5pY2UgYXBwcm9hY2gNCj4gLS0gSSdsbCBpbmNvcnBv cmF0ZSB0aGF0IGludG8gdGhlIHBhdGNoc2V0Lg0KPiANCj4gQXQgYW4gYWxnb3JpdGhtIGxldmVs LCBJIGRvbid0IHNlZSBhbnkgb3RoZXIgZGlmZmVyZW5jZXMuIEltcGxlbWVudGF0aW9uLXdpc2Us IA0KPiB3ZSdsbCBuZWVkIHRvIG5haWwgdGhlIG1lbW9yeSBvcmRlcmluZyBmbGFncyB0byBiZXN0 IHN1cHBvcnQgd2VhayBjb25zaXN0ZW5jeQ0KPiBtYWNoaW5lcywgYXMgeW91IHBvaW50ZWQgb3V0 IGVsc2V3aGVyZS4NClRoZXJlIGlzIG5vIHByZS1hY3F1aXNpdGlvbiBvZiBzbG90cyBpbiBlbnF1 ZXVlIGFuZCBkZXF1ZXVlLiBUaGF0IHNlcGFyYXRlIHN0ZXANCm1ha2VzIGxvY2stZnJlZWRvbSBp bXBvc3NpYmxlIChJIHRoaW5rKS4NCg0KV2l0aCBhIG1lcmdlZCBpbXBsZW1lbnRhdGlvbiwgSSB0 aGluayB0aGUgTk9OLUJMT0NLSU5HL0xPQ0stRlJFRSBtb2RlIG1vc3QgaGF2ZQ0Kc2VwYXJhdGUg aW1wbGVtZW50YXRpb25zIGFsc28gZm9yIFNQL1NDLiBJbiBub24tYmxvY2tpbmcvbG9jay1mcmVl IG1vZGUgKHdoZXRoZXINCk1QL01DIG9yIFNQL1NDKSwgb25seSBvbmUgc2V0IG9mIGhlYWQvdGFp bCBwb2ludGVycyBpcyB1c2VkLiBJbiBibG9ja2luZyBtb2RlLA0KdHdvIHNldHMgb2YgaGVhZC90 YWlsIGFyZSB1c2VkLiBUaGVyZSBpc24ndCBhIHNldCBvZiBTUC9TQyBjb2RlIHRoYXQgc3VwcG9y dHMNCmJvdGggbm9uLWJsb2NraW5nL2xvY2stZnJlZSBhbmQgYmxvY2tpbmcgYmVoYXZpb3Vycy4N Cg0KPiANCj4gT3V0IG9mIGN1cmlvc2l0eSwgaXMgcDY0X2xmcmluZyBiYXNlZCBvbiB0aGUgbmIg cmluZyBwYXRjaHNldD8gSSBub3RpY2VkIGl0DQo+IHVzZWQgYSBkaWZmZXJlbnQgYWxnb3JpdGht IHVudGlsIHByZXR0eSByZWNlbnRseS4NCkkgY3JlYXRlZCB0aGUgb3JpZ2luYWwgbGZyaW5nIGRl c2lnbiAod2hpY2ggaXNuJ3QgdGhhdCBkaWZmZXJlbnQgSSB0aGluaykgYmFjaw0KaW4gTm92ZW1i ZXIgbGFzdCBhbmQgaXQgc2VlbWVkIHRvIHdvcmsgYnV0IEkgZGlkbid0IHRoaW5rIGl0IGNvdWxk IGd1YXJhbnRlZQ0KRklGTyBvcmRlciBhcyBlbGVtZW50cyB3ZXJlIGVucXVldWVkIGFuZCBkZXF1 ZXVlZCB3aGVyZXZlciBhIHRocmVhZCBmb3VuZCBhDQpzdWl0YWJsZSBzbG90IGFuZCBpbiBteSB1 c2UgY2FzZXMsIEZJRk8gb3JkZXIgaXMgYW4gaW1wb3J0YW50IGNoYXJhY3RlcmlzdGljDQoobmVl ZCB0byBtYWludGFpbiBpbmdyZXNzLXRvLWVncmVzcyBwYWNrZXQgb3JkZXIpLiBBbHJlYWR5IHRo ZW4gSSB3YXMNCmNvbnNpZGVyaW5nIGFkZGluZyB0aGUgaW5kZXggdG8gdGhlIHJpbmcgc2xvdHMg dG8gZW5mb3JjZSBGSUZPIGVucXVldWUvZGVxdWV1ZQ0Kb3JkZXIsIEkga25ldyB0aGlzIHdvdWxk IGJlIHBvc3NpYmxlIG9uIEFSTXY3YSAod2hpY2ggaGFzIDJ4MzIgYml0IENBUyB1c2luZw0KZXhj bHVzaXZlcykgYW5kIEFSTXY4L0FBcmNoNjQgKHdoaWNoIGhhcyAyeDY0LWJpdCBDQVMgdXNpbmcg ZXhjbHVzaXZlcykuIEkgaGFkDQpzZWVuIHRoaXMgZGVzaWduIGlkZWEgb24gdGhlIEludGVybmV0 IGJlZm9yZSAoZS5nLiBoZXJlwqBodHRwczovL3d3dy55b3V0dWJlLmNvbS8NCndhdGNoP3Y9SFAy SW5WcWdCRk0sIEkgYWN0dWFsbHkgc3RvcHBlZCB2aWV3aW5nIHRoaXMgcHJlc2VudGF0aW9uIGhh bGYtd2F5DQpiZWNhdXNlIEkgd2FudGVkIHRvIGlyb24gb3V0IHRoZSBkZXRhaWxzIG15c2VsZiks IGl0J3Mgbm90IGEgbm92ZWwgaWRlYSAoc29ycnkpLg0KSG93ZXZlciBJIGRpZG4ndCBoYXZlIHRp bWUgdG8gZG8gdGhpcyBjaGFuZ2UgYmVmb3JlIENocmlzdG1hcyBob2xpZGF5cyBhbmQganVzdA0K Y2FtZSBiYWNrIHRvIHdvcmsgdHdvIHdlZWtzIGFnby4gU28gSSB3b3VsZCByYXRoZXIgY2FsbCB0 aGlzIHNpbXVsdGFuZW91cw0KImludmVudGlvbiIgKG9yIHB1YmxpY2F0aW9uKS4gRGlmZmljdWx0 IHRvIHByb3ZlIHRoaXMgb2YgY291cnNlLi4uDQoNCj4gDQo+IFRoYW5rcywNCj4gR2FnZQ0KPiAN Cj4gPC9zbmlwPg0KLS0gDQpPbGEgTGlsamVkYWhsLCBOZXR3b3JraW5nIFN5c3RlbSBBcmNoaXRl Y3QsIEFybQ0KUGhvbmUgKzQ2NzA2ODY2MzczLCBTa3lwZSBvbGEubGlsamVkYWhsDQoNCg==