From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6B86BC47404 for ; Fri, 11 Oct 2019 14:16:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 01418214E0 for ; Fri, 11 Oct 2019 14:16:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=hammerspace.com header.i=@hammerspace.com header.b="APOw2f1Z" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728084AbfJKOQd (ORCPT ); Fri, 11 Oct 2019 10:16:33 -0400 Received: from mail-eopbgr800115.outbound.protection.outlook.com ([40.107.80.115]:2669 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728151AbfJKOQd (ORCPT ); Fri, 11 Oct 2019 10:16:33 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hSwUawacGuHTI2L81pl+l6dtUZLptm69zB9qfkNFFkdiWmZdgC2D2InL95w26mBua4Zsy5GtfCJ79nyF6jDKTfTUCDrxSO4woNyDcC3DHPsE1D0w8zbN4AjXqbjHfM4Vdv5envjpfU8vYfN7MlCI+XB8ihn7XOqWubQKYrks/hkyQ0KSd0yi0oSbGQVWTmozCloM6OsTkgA/L+pZKtdIEicegwYB18cBn3IktDLyVFzEpbldBetrNeZAjAkz2MOsO96NZN+pViIYfAsiXB5lMCB9eHYjiYAwdbU+bI74l8OirsGvE04UiwIb2XeOtET8pfZEF6P5ByoWO7WhoIsPKw== 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=JBOOQnsTXCfENEtBDxQkNx+MR/0XHcS0TywGfbGO+Pk=; b=no4rcuSPkCAMWEpfxEJt8tNMoj124ZKxozaemiIxRyF526X9KnDQiuBlHY0thOotcKOKANevIsvNr3Zqa7gGAdP2+FYMOyQU0GEhU8AH60wfPaoMzBUfL0A9JQVmKSZE+Qd2cQM6iB1cY69IyjBFNGm3RM9GXzgJtsFFoQuSyBKVjFarOL+dZ4tQ3pe1ZNI+/FW26zL+fxbGXfTfH+urPODE4PXebgbzxYy2rmC1WE8bAVaZFwaR9u+ADdAiWTaZsR5GD8Izgs3Nxu6FFcJ65E0AGEmW49SKLzS64dmt4Qkt0YUuhVZ8irfwXwC09bJCLLvUFgnI2f4/qrZQ5XP9IA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hammerspace.com; dmarc=pass action=none header.from=hammerspace.com; dkim=pass header.d=hammerspace.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hammerspace.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JBOOQnsTXCfENEtBDxQkNx+MR/0XHcS0TywGfbGO+Pk=; b=APOw2f1ZtwfWnG1OFUwtouFePslbS1uIBRTrDD6gDJoi0+fkjS6ovOfxkeb06VPgOZOxAxvzC5wC2o9ny3UFKQnnHM5qDvo6srAU5a9QfFTHiuWGUZ4POnJl0607oeXbsxnI7I14Bd00VnznqVAs3vgi4aMcBsicibt9S5EhJuc= Received: from DM5PR13MB1851.namprd13.prod.outlook.com (10.171.159.143) by DM5PR13MB0971.namprd13.prod.outlook.com (10.168.238.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.10; Fri, 11 Oct 2019 14:14:49 +0000 Received: from DM5PR13MB1851.namprd13.prod.outlook.com ([fe80::d1be:764d:9347:764e]) by DM5PR13MB1851.namprd13.prod.outlook.com ([fe80::d1be:764d:9347:764e%10]) with mapi id 15.20.2347.021; Fri, 11 Oct 2019 14:14:49 +0000 From: Trond Myklebust To: "jencce.kernel@gmail.com" CC: "linux-nfs@vger.kernel.org" Subject: Re: [PATCH] NFSv4: fix stateid refreshing when CLOSE racing with OPEN Thread-Topic: [PATCH] NFSv4: fix stateid refreshing when CLOSE racing with OPEN Thread-Index: AQHVfz4Dej3IfeNfekKrfX0XpGLKm6dT9I4AgAEudQCAAFr6gA== Date: Fri, 11 Oct 2019 14:14:49 +0000 Message-ID: References: <20191010074020.o2uwtuyegtmfdlze@XZHOUW.usersys.redhat.com> <20191011084910.joa3ptovudasyo7u@xzhoux.usersys.redhat.com> In-Reply-To: <20191011084910.joa3ptovudasyo7u@xzhoux.usersys.redhat.com> Accept-Language: en-US, en-GB Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=trondmy@hammerspace.com; x-originating-ip: [68.40.189.247] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 74f6cce6-430f-4787-4dbd-08d74e5560ae x-ms-traffictypediagnostic: DM5PR13MB0971: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0187F3EA14 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(136003)(366004)(376002)(39840400004)(396003)(346002)(51914003)(189003)(199004)(66066001)(86362001)(14454004)(478600001)(2351001)(2501003)(118296001)(6916009)(81166006)(81156014)(71190400001)(8936002)(4001150100001)(8676002)(305945005)(7736002)(2906002)(3846002)(6116002)(71200400001)(66946007)(66476007)(66556008)(64756008)(66446008)(25786009)(14444005)(102836004)(6506007)(6512007)(229853002)(36756003)(6246003)(6436002)(5640700003)(76116006)(99286004)(6486002)(4326008)(76176011)(5660300002)(91956017)(316002)(1361003)(446003)(26005)(186003)(11346002)(476003)(2616005)(256004)(486006);DIR:OUT;SFP:1102;SCL:1;SRVR:DM5PR13MB0971;H:DM5PR13MB1851.namprd13.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: hammerspace.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: +2sjdtwcLe4IpGhDdY6DA/rTA7p8FwZB4xJGqPuyRy4osCronnKPHBT/ZcA1XUBOUwrFcIP9OXC+yGNDfm1v2mi7Aaa+JRlqpmaNS3yuSaoFSFVrVvzSU9Pk27It+geutJHrnN9MNR8XvhHqtP7lFHQbwbdr7EIdTwMHS3kcJqCsnHJzfIozAd5oi8YIHxX4THPso+ATdvimFFGzyjjBDcxbGvwulkffdc55L7RMmQN1pghfHmITpnZPSbdu/8ppuXVWbG8+tzOG+cJxeNRzbdHyOHrRuNEiUTJrthtW3daAqNaJFxQQYJRm4nWHkmD3DpeciKbXOY/1JM31vkaC2IdkLNusnNkWWaxFVDy1Y4If4ywyUp/psd3r3DPrAPa77mlmcMuRIgOWRTL+N99kdf8QLLC6HOGCSwfuxmxmhV4= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <9AED17F730CE3445945D1D220D89C9DF@namprd13.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: hammerspace.com X-MS-Exchange-CrossTenant-Network-Message-Id: 74f6cce6-430f-4787-4dbd-08d74e5560ae X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Oct 2019 14:14:49.6187 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0d4fed5c-3a70-46fe-9430-ece41741f59e X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: B0HK6Oq59M3EPltTySd0SeZPiArzpE1Mh3nuiXhDfaxptN3jwplDgukJusQvl2JOp7ztwl+mSzAsR6x7fIZXJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR13MB0971 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org T24gRnJpLCAyMDE5LTEwLTExIGF0IDE2OjQ5ICswODAwLCBNdXJwaHkgWmhvdSB3cm90ZToNCj4g T24gVGh1LCBPY3QgMTAsIDIwMTkgYXQgMDI6NDY6NDBQTSArMDAwMCwgVHJvbmQgTXlrbGVidXN0 IHdyb3RlOg0KPiA+IE9uIFRodSwgMjAxOS0xMC0xMCBhdCAxNTo0MCArMDgwMCwgTXVycGh5IFpo b3Ugd3JvdGU6DQo+ID4gPiBTaW5jZSBjb21taXQ6DQo+ID4gPiAgIFswZTBjYjM1XSBORlN2NDog SGFuZGxlIE5GUzRFUlJfT0xEX1NUQVRFSUQgaW4NCj4gPiA+IENMT1NFL09QRU5fRE9XTkdSQURF DQo+ID4gPiANCj4gPiA+IHhmc3Rlc3RzIGdlbmVyaWMvMTY4IG9uIHY0LjIgc3RhcnRzIHRvIGZh aWwgYmVjYXVzZSByZWZsaW5rIGNhbGwNCj4gPiA+IGdldHM6DQo+ID4gPiAgICtYRlNfSU9DX0NM T05FX1JBTkdFOiBSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQ0KPiA+ID4gDQo+ID4g PiBJbiB0c2hhcmsgb3V0cHV0LCBORlM0RVJSX09MRF9TVEFURUlEIHN0YW5kcyBvdXQgd2hlbiBj b21wYXJpbmcNCj4gPiA+IHdpdGgNCj4gPiA+IGdvb2Qgb25lczoNCj4gPiA+IA0KPiA+ID4gIDUy MTAgICBORlMgNDA2IFY0IFJlcGx5IChDYWxsIEluIDUyMDkpIE9QRU4gU3RhdGVJRDogMHhhZGI1 DQo+ID4gPiAgNTIxMSAgIE5GUyAzMTQgVjQgQ2FsbCBHRVRBVFRSIEZIOiAweDhkNDRhNmIxDQo+ ID4gPiAgNTIxMiAgIE5GUyAyNTAgVjQgUmVwbHkgKENhbGwgSW4gNTIxMSkgR0VUQVRUUg0KPiA+ ID4gIDUyMTMgICBORlMgMzE0IFY0IENhbGwgR0VUQVRUUiBGSDogMHg4ZDQ0YTZiMQ0KPiA+ID4g IDUyMTQgICBORlMgMjUwIFY0IFJlcGx5IChDYWxsIEluIDUyMTMpIEdFVEFUVFINCj4gPiA+ICA1 MjE2ICAgTkZTIDQyMiBWNCBDYWxsIFdSSVRFIFN0YXRlSUQ6IDB4YTgxOCBPZmZzZXQ6IDg1MTk2 OCBMZW46DQo+ID4gPiA2NTUzNg0KPiA+ID4gIDUyMTggICBORlMgMjY2IFY0IFJlcGx5IChDYWxs IEluIDUyMTYpIFdSSVRFDQo+ID4gPiAgNTIxOSAgIE5GUyAzODIgVjQgQ2FsbCBPUEVOIERIOiAw eDhkNDRhNmIxLw0KPiA+ID4gIDUyMjAgICBORlMgMzM4IFY0IENhbGwgQ0xPU0UgU3RhdGVJRDog MHhhZGI1DQo+ID4gPiAgNTIyMiAgIE5GUyA0MDYgVjQgUmVwbHkgKENhbGwgSW4gNTIxOSkgT1BF TiBTdGF0ZUlEOiAweGEzNDINCj4gPiA+ICA1MjIzICAgTkZTIDI1MCBWNCBSZXBseSAoQ2FsbCBJ biA1MjIwKSBDTE9TRSBTdGF0dXM6DQo+ID4gPiBORlM0RVJSX09MRF9TVEFURUlEDQo+ID4gPiAg NTIyNSAgIE5GUyAzMzggVjQgQ2FsbCBDTE9TRSBTdGF0ZUlEOiAweGEzNDINCj4gPiA+ICA1MjI2 ICAgTkZTIDMxNCBWNCBDYWxsIEdFVEFUVFIgRkg6IDB4OGQ0NGE2YjENCj4gPiA+ICA1MjI3ICAg TkZTIDI2NiBWNCBSZXBseSAoQ2FsbCBJbiA1MjI1KSBDTE9TRQ0KPiA+ID4gIDUyMjggICBORlMg MjUwIFY0IFJlcGx5IChDYWxsIEluIDUyMjYpIEdFVEFUVFINCj4gPiA+IA0KPiA+ID4gSXQncyBl YXN5IHRvIHJlcHJvZHVjZS4gQnkgcHJpbnRpbmcgc29tZSBsb2dzLCBmb3VuZCB0aGF0IHdlIGFy ZQ0KPiA+ID4gbWFraW5nDQo+ID4gPiBDTE9TRSBzZXFpZCBsYXJnZXIgdGhlbiBPUEVOIHNlcWlk IHdoZW4gcmFjaW5nLg0KPiA+ID4gDQo+ID4gPiBGaXggdGhpcyBieSBub3QgYnVtcGluZyBzZXFp ZCB3aGVuIGl0J3MgZXF1YWwgdG8gT1BFTiBzZXFpZC4gQWxzbw0KPiA+ID4gcHV0IHRoZSB3aG9s ZSBjaGFuZ2luZyBwcm9jZXNzIGludG8gc2VxbG9jayByZWFkIHByb3RlY3Rpb24gaW4NCj4gPiA+ IGNhc2UNCj4gPiA+IHJlYWxseSBiYWQgbHVjaywgYW5kIHRoaXMgaXMgdGhlIHNhbWUgbG9ja2lu ZyBiZWhhdmlvciB3aXRoIHRoZQ0KPiA+ID4gb2xkIGRlbGV0ZWQgZnVuY3Rpb24uDQo+ID4gPiAN Cj4gPiA+IEZpeGVzOiAwZTBjYjM1YjQxN2YgKCJORlN2NDogSGFuZGxlIE5GUzRFUlJfT0xEX1NU QVRFSUQgaW4NCj4gPiA+IENMT1NFL09QRU5fRE9XTkdSQURFIikNCj4gPiA+IFNpZ25lZC1vZmYt Ynk6IE11cnBoeSBaaG91IDxqZW5jY2Uua2VybmVsQGdtYWlsLmNvbT4NCj4gPiA+IC0tLQ0KPiA+ ID4gIGZzL25mcy9uZnM0cHJvYy5jIHwgMTMgKysrKysrKystLS0tLQ0KPiA+ID4gIDEgZmlsZSBj aGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pDQo+ID4gPiANCj4gPiA+IGRp ZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jDQo+ID4gPiBp bmRleCAxMWVhZmNmLi42ZGI1YTA5IDEwMDY0NA0KPiA+ID4gLS0tIGEvZnMvbmZzL25mczRwcm9j LmMNCj4gPiA+ICsrKyBiL2ZzL25mcy9uZnM0cHJvYy5jDQo+ID4gPiBAQCAtMzMzNCwxMiArMzMz NCwxMyBAQCBzdGF0aWMgdm9pZA0KPiA+ID4gbmZzNF9zeW5jX29wZW5fc3RhdGVpZChuZnM0X3N0 YXRlaWQgKmRzdCwNCj4gPiA+ICAJCQlicmVhazsNCj4gPiA+ICAJCX0NCj4gPiA+ICAJCXNlcWlk X29wZW4gPSBzdGF0ZS0+b3Blbl9zdGF0ZWlkLnNlcWlkOw0KPiA+ID4gLQkJaWYgKHJlYWRfc2Vx cmV0cnkoJnN0YXRlLT5zZXFsb2NrLCBzZXEpKQ0KPiA+ID4gLQkJCWNvbnRpbnVlOw0KPiA+ID4g IA0KPiA+ID4gIAkJZHN0X3NlcWlkID0gYmUzMl90b19jcHUoZHN0LT5zZXFpZCk7DQo+ID4gPiAg CQlpZiAoKHMzMikoZHN0X3NlcWlkIC0gYmUzMl90b19jcHUoc2VxaWRfb3BlbikpIDwgMCkNCj4g PiA+ICAJCQlkc3QtPnNlcWlkID0gc2VxaWRfb3BlbjsNCj4gPiA+ICsNCj4gPiA+ICsJCWlmIChy ZWFkX3NlcXJldHJ5KCZzdGF0ZS0+c2VxbG9jaywgc2VxKSkNCj4gPiA+ICsJCQljb250aW51ZTsN Cj4gPiANCj4gPiBXaGF0J3MgdGhlIGludGVudGlvbiBvZiB0aGlzIGNoYW5nZT8gTmVpdGhlciBk c3Rfc2VxaWQgbm9yIGRzdC0NCj4gPiA+c2VxaWQNCj4gPiBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBz dGF0ZS0+c2VxbG9jayBzbyB3aHkgbW92ZSB0aGlzIGNvZGUgdW5kZXIgdGhlDQo+ID4gbG9jay4N Cj4gDQo+IEJlY2F1c2Ugc2VxaWRfb3BlbiBjb3VsZCBoYXZlIGNoYW5nZWQgd2hlbiB3cml0aW5n IHRvIGRzdC0+c2VxaWQgPw0KPiANCj4gVGhlIG9sZCBuZnM0X3JlZnJlc2hfb3Blbl9zdGF0ZWlk IGZ1bmN0aW9uIHB1dCB0aGUgd3JpdGluZyB1bmRlciB0aGUNCj4gbG9jay4NCg0KVGhlIHZhbHVl IG9mIHN0YXRlLT5vcGVuX3N0YXRlaWQgY291bGQgY2hhbmdlIGJvdGggYmVmb3JlIGFuZCBhZnRl ciB3ZQ0Kd3JpdGUgdG8gZHN0LT5zZXFpZC4gSWYgd2UgaG9sZCBhIGxvY2ssIHRoZW4gaXQgY291 bGQgY2hhbmdlIHRoZSBtb21lbnQNCndlIHJlbGVhc2UgdGhhdCBsb2NrLiBUaGF0J3Mgbm90IHNv bWV0aGluZyB3ZSdyZSBhYmxlIHRvIGNvbnRyb2wuDQoNClRoZSBvbmx5IHRoaW5nIHdlIHNob3Vs ZCBjYXJlIGFib3V0IGhlcmUgaXMgd2hldGhlciBvciBub3QgdGhlIGNhbGwgdG8NCm5mczRfc3Rh dGVfbWF0Y2hfb3Blbl9zdGF0ZWlkX290aGVyKHN0YXRlLCBkc3QpIGFuZCB0aGUgc3RvcmFnZSBv Zg0Kc3RhdGUtPm9wZW5fc3RhdGVpZC5zZXFpZCBpbiBzZXFpZF9vcGVuIGFyZSBiZWluZyBwZXJm b3JtZWQgd2l0aCB0aGUNCnNhbWUgaW5zdGFuY2Ugb2YgdGhlIGZ1bGwgc3RhdGUtPm9wZW5fc3Rh dGVpZC4NCg0KPiANCj4gPiA+ICAJCWJyZWFrOw0KPiA+ID4gIAl9DQo+ID4gPiAgfQ0KPiA+ID4g QEAgLTMzNjcsMTQgKzMzNjgsMTYgQEAgc3RhdGljIGJvb2wNCj4gPiA+IG5mczRfcmVmcmVzaF9v cGVuX29sZF9zdGF0ZWlkKG5mczRfc3RhdGVpZCAqZHN0LA0KPiA+ID4gIAkJCWJyZWFrOw0KPiA+ ID4gIAkJfQ0KPiA+ID4gIAkJc2VxaWRfb3BlbiA9IHN0YXRlLT5vcGVuX3N0YXRlaWQuc2VxaWQ7 DQo+ID4gPiAtCQlpZiAocmVhZF9zZXFyZXRyeSgmc3RhdGUtPnNlcWxvY2ssIHNlcSkpDQo+ID4g PiAtCQkJY29udGludWU7DQo+ID4gPiAgDQo+ID4gPiAgCQlkc3Rfc2VxaWQgPSBiZTMyX3RvX2Nw dShkc3QtPnNlcWlkKTsNCj4gPiA+IC0JCWlmICgoczMyKShkc3Rfc2VxaWQgLSBiZTMyX3RvX2Nw dShzZXFpZF9vcGVuKSkgPj0gMCkNCj4gPiA+ICsJCWlmICgoczMyKShkc3Rfc2VxaWQgLSBiZTMy X3RvX2NwdShzZXFpZF9vcGVuKSkgPiAwKQ0KPiA+ID4gIAkJCWRzdC0+c2VxaWQgPSBjcHVfdG9f YmUzMihkc3Rfc2VxaWQgKyAxKTsNCj4gPiANCj4gPiBUaGlzIG5lZ2F0ZXMgdGhlIHdob2xlIGlu dGVudGlvbiBvZiB0aGUgcGF0Y2ggeW91IHJlZmVyZW5jZSBpbiB0aGUNCj4gPiAnRml4ZXM6Jywg d2hpY2ggd2FzIHRvIGFsbG93IHVzIHRvIENMT1NFIGZpbGVzIGV2ZW4gaWYgc2VxaWQgYnVtcHMN Cj4gPiBoYXZlDQo+ID4gYmVlbiBsb3N0IGR1ZSB0byBpbnRlcnJ1cHRlZCBSUEMgY2FsbHMgZS5n LiB3aGVuIHVzaW5nICdzb2Z0JyBvcg0KPiA+ICdzb2Z0ZXJyJyBtb3VudHMuDQo+ID4gV2l0aCB0 aGUgYWJvdmUgY2hhbmdlLCB0aGUgY2hlY2sgY291bGQganVzdCBiZSB0b3NzZWQgb3V0DQo+ID4g YWx0b2dldGhlciwNCj4gPiBiZWNhdXNlIGRzdF9zZXFpZCB3aWxsIG5ldmVyIGJlY29tZSBsYXJn ZXIgdGhhbiBzZXFpZF9vcGVuLg0KPiANCj4gSG1tLi4gSSBnb3QgaXQgd3JvbmcuIFRoYW5rcyBm b3IgdGhlIGV4cGxhbmF0aW9uLg0KDQpTbyB0byBiZSBjbGVhcjogSSdtIG5vdCBzYXlpbmcgdGhh dCB3aGF0IHlvdSBkZXNjcmliZSBpcyBub3QgYSBwcm9ibGVtLg0KSSdtIGp1c3Qgc2F5aW5nIHRo YXQgdGhlIGZpeCB5b3UgcHJvcG9zZSBpcyByZWFsbHkgbm8gYmV0dGVyIHRoYW4NCnJldmVydGlu ZyB0aGUgZW50aXJlIHBhdGNoLiBJJ2QgcHJlZmVyIG5vdCB0byBkbyB0aGF0LCBhbmQgd291bGQg cmF0aGVyDQpzZWUgdXMgbG9vayBmb3Igd2F5cyB0byBmaXggYm90aCBwcm9ibGVtcywgYnV0IGlm IHdlIGNhbid0IGZpbmQgc3VjaCBhcw0KZml4IHRoZW4gdGhhdCB3b3VsZCBiZSB0aGUgYmV0dGVy IHNvbHV0aW9uLg0KDQo+IA0KPiA+ID4gIAkJZWxzZQ0KPiA+ID4gIAkJCWRzdC0+c2VxaWQgPSBz ZXFpZF9vcGVuOw0KPiA+ID4gKw0KPiA+ID4gKwkJaWYgKHJlYWRfc2VxcmV0cnkoJnN0YXRlLT5z ZXFsb2NrLCBzZXEpKQ0KPiA+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ID4gKw0KPiA+IA0KPiA+IEFn YWluLCB3aHkgdGhpcyBjaGFuZ2UgdG8gY29kZSB0aGF0IGRvZXNuJ3QgYXBwZWFyIHRvIG5lZWQN Cj4gPiBwcm90ZWN0aW9uPw0KPiA+IElmIHRoZSBidW1wIGRvZXMgc3VjY2VlZCBhYm92ZSwgdGhl biBsb29waW5nIGJhY2sgd2lsbCBhY3R1YWxseQ0KPiA+IGNhdXNlDQo+ID4gdW5wcmVkaWN0YWJs ZSBiZWhhdmlvdXIuDQo+IA0KPiBTYW1lIGFzIGFib3ZlLiBUaGlzIGNoYW5nZSBoYXZlIG5vdGhp bmcgdG8gZG8gd2l0aCB0aGUgc3RhdGVpZCByYWNlLg0KPiBJDQo+IGp1c3QgZm91bmQgaXQgd2hl biByZWFkaW5nIHRoZSBwYXRjaC4NCj4gDQo+IFRoYW5rcywNCj4gTQ0KPiA+ID4gIAkJcmV0ID0g dHJ1ZTsNCj4gPiA+ICAJCWJyZWFrOw0KPiA+ID4gIAl9DQotLSANClRyb25kIE15a2xlYnVzdA0K TGludXggTkZTIGNsaWVudCBtYWludGFpbmVyLCBIYW1tZXJzcGFjZQ0KdHJvbmQubXlrbGVidXN0 QGhhbW1lcnNwYWNlLmNvbQ0KDQoNCg==