Return-Path: Received: from us-smtp-delivery-194.mimecast.com ([63.128.21.194]:46431 "EHLO us-smtp-delivery-194.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751635AbdHNUih (ORCPT ); Mon, 14 Aug 2017 16:38:37 -0400 From: Trond Myklebust To: "chuck.lever@oracle.com" CC: "linux-nfs@vger.kernel.org" Subject: Re: [PATCH 1/3] SUNRPC: Don't hold the transport lock across socket copy operations Date: Mon, 14 Aug 2017 20:38:31 +0000 Message-ID: <1502743109.19246.19.camel@primarydata.com> References: <20170814191652.18263-1-trond.myklebust@primarydata.com> <20170814191652.18263-2-trond.myklebust@primarydata.com> <003E7C40-57BD-4F02-9157-97919FA206D5@oracle.com> <1502741277.19246.7.camel@primarydata.com> <55994DBE-0CE4-450A-8B19-B8C8F4CA0B69@oracle.com> In-Reply-To: <55994DBE-0CE4-450A-8B19-B8C8F4CA0B69@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-nfs-owner@vger.kernel.org List-ID: T24gTW9uLCAyMDE3LTA4LTE0IGF0IDE2OjIzIC0wNDAwLCBDaHVjayBMZXZlciB3cm90ZToNCj4g PiBPbiBBdWcgMTQsIDIwMTcsIGF0IDQ6MDcgUE0sIFRyb25kIE15a2xlYnVzdCA8dHJvbmRteUBw cmltYXJ5ZGF0YS5jDQo+ID4gb20+IHdyb3RlOg0KPiA+IA0KPiA+IE9uIE1vbiwgMjAxNy0wOC0x NCBhdCAxNToyOCAtMDQwMCwgQ2h1Y2sgTGV2ZXIgd3JvdGU6DQo+ID4gPiA+IE9uIEF1ZyAxNCwg MjAxNywgYXQgMzoxNiBQTSwgVHJvbmQgTXlrbGVidXN0IDx0cm9uZC5teWtsZWJ1c3RAcA0KPiA+ ID4gPiByaW1hDQo+ID4gPiA+IHJ5ZGF0YS5jb20+IHdyb3RlOg0KPiA+ID4gPiANCj4gPiA+ID4g SW5zdGVhZCBhZGQgYSBtZWNoYW5pc20gdG8gZW5zdXJlIHRoYXQgdGhlIHJlcXVlc3QgZG9lc24n dA0KPiA+ID4gPiBkaXNhcHBlYXINCj4gPiA+ID4gZnJvbSB1bmRlcm5lYXRoIHVzIHdoaWxlIGNv cHlpbmcgZnJvbSB0aGUgc29ja2V0LiBXZSBkbyB0aGlzIGJ5DQo+ID4gPiA+IHByZXZlbnRpbmcg eHBydF9yZWxlYXNlKCkgZnJvbSBmcmVlaW5nIHRoZSBYRFIgYnVmZmVycyB1bnRpbA0KPiA+ID4g PiB0aGUNCj4gPiA+ID4gZmxhZyBSUENfVEFTS19NU0dfUkVDViBoYXMgYmVlbiBjbGVhcmVkIGZy b20gdGhlIHJlcXVlc3QuDQo+ID4gPiA+IA0KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBUcm9uZCBN eWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBwcmltYXJ5ZGF0YS5jb20NCj4gPiA+ID4gPg0KPiA+ ID4gPiAtLS0NCj4gPiA+ID4gaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaCB8ICAyICsrDQo+ ID4gPiA+IGluY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaCAgfCAgMiArKw0KPiA+ID4gPiBuZXQv c3VucnBjL3hwcnQuYyAgICAgICAgICAgIHwgNDINCj4gPiA+ID4gKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gPiA+IG5ldC9zdW5ycGMveHBydHNvY2suYyAg ICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrLS0tLS0NCj4gPiA+ID4gNCBmaWxlcyBj aGFuZ2VkLCA2OCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQ0KPiA+ID4gPiANCj4gPiA+ ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgNCj4gPiA+ID4gYi9p bmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oDQo+ID4gPiA+IGluZGV4IDE1YmMxY2Q2ZWU1Yy4u ZTk3MmQ5ZTA1NDI2IDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9z Y2hlZC5oDQo+ID4gPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgNCj4gPiA+ ID4gQEAgLTE0MSw2ICsxNDEsOCBAQCBzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgew0KPiA+ID4gPiAj ZGVmaW5lIFJQQ19UQVNLX0FDVElWRQkJMg0KPiA+ID4gPiAjZGVmaW5lIFJQQ19UQVNLX01TR19Y TUlUCTMNCj4gPiA+ID4gI2RlZmluZSBSUENfVEFTS19NU0dfWE1JVF9XQUlUCTQNCj4gPiA+ID4g KyNkZWZpbmUgUlBDX1RBU0tfTVNHX1JFQ1YJNQ0KPiA+ID4gPiArI2RlZmluZSBSUENfVEFTS19N U0dfUkVDVl9XQUlUCTYNCj4gPiA+ID4gDQo+ID4gPiA+ICNkZWZpbmUgUlBDX0lTX1JVTk5JTkco dCkJdGVzdF9iaXQoUlBDX1RBU0tfUlVOTklORywNCj4gPiA+ID4gJih0KS0NCj4gPiA+ID4gPiB0 a19ydW5zdGF0ZSkNCj4gPiA+ID4gDQo+ID4gPiA+ICNkZWZpbmUgcnBjX3NldF9ydW5uaW5nKHQp CXNldF9iaXQoUlBDX1RBU0tfUlVOTklORywNCj4gPiA+ID4gJih0KS0NCj4gPiA+ID4gPiB0a19y dW5zdGF0ZSkNCj4gPiA+ID4gDQo+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1 bnJwYy94cHJ0LmgNCj4gPiA+ID4gYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgNCj4gPiA+ ID4gaW5kZXggZWFiMWM3NDllMTkyLi42NWI5ZTAyMjQ3NTMgMTAwNjQ0DQo+ID4gPiA+IC0tLSBh L2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaA0KPiA+ID4gPiArKysgYi9pbmNsdWRlL2xpbnV4 L3N1bnJwYy94cHJ0LmgNCj4gPiA+ID4gQEAgLTM3Miw2ICszNzIsOCBAQCB2b2lkCQkJeHBydF93 cml0ZV9zcGFjDQo+ID4gPiA+IGUoc3QNCj4gPiA+ID4gcnVjdCBycGNfeHBydCAqeHBydCk7DQo+ ID4gPiA+IHZvaWQJCQl4cHJ0X2FkanVzdF9jd25kKHN0cnVjdCBycGNfeHBydA0KPiA+ID4gPiAq eHBydCwNCj4gPiA+ID4gc3RydWN0IHJwY190YXNrICp0YXNrLCBpbnQgcmVzdWx0KTsNCj4gPiA+ ID4gc3RydWN0IHJwY19ycXN0ICoJeHBydF9sb29rdXBfcnFzdChzdHJ1Y3QgcnBjX3hwcnQNCj4g PiA+ID4gKnhwcnQsDQo+ID4gPiA+IF9fYmUzMiB4aWQpOw0KPiA+ID4gPiB2b2lkCQkJeHBydF9j b21wbGV0ZV9ycXN0KHN0cnVjdCBycGNfdGFzaw0KPiA+ID4gPiAqdGFzaywgaW50IGNvcGllZCk7 DQo+ID4gPiA+ICt2b2lkCQkJeHBydF9waW5fcnFzdChzdHJ1Y3QgcnBjX3Jxc3QNCj4gPiA+ID4g KnJlcSk7DQo+ID4gPiA+ICt2b2lkCQkJeHBydF91bnBpbl9ycXN0KHN0cnVjdCBycGNfcnFzdA0K PiA+ID4gPiAqcmVxKTsNCj4gPiA+ID4gdm9pZAkJCXhwcnRfcmVsZWFzZV9ycXN0X2Nvbmcoc3Ry dWN0DQo+ID4gPiA+IHJwY190YXNrDQo+ID4gPiA+ICp0YXNrKTsNCj4gPiA+ID4gdm9pZAkJCXhw cnRfZGlzY29ubmVjdF9kb25lKHN0cnVjdA0KPiA+ID4gPiBycGNfeHBydA0KPiA+ID4gPiAqeHBy dCk7DQo+ID4gPiA+IHZvaWQJCQl4cHJ0X2ZvcmNlX2Rpc2Nvbm5lY3Qoc3RydWN0DQo+ID4gPiA+ IHJwY194cHJ0DQo+ID4gPiA+ICp4cHJ0KTsNCj4gPiA+ID4gZGlmZiAtLWdpdCBhL25ldC9zdW5y cGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMNCj4gPiA+ID4gaW5kZXggNzg4YzFiNjEzOGMy Li42MmMzNzk4NjVmN2MgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL25ldC9zdW5ycGMveHBydC5jDQo+ ID4gPiA+ICsrKyBiL25ldC9zdW5ycGMveHBydC5jDQo+ID4gPiA+IEBAIC04NDQsNiArODQ0LDQ3 IEBAIHN0cnVjdCBycGNfcnFzdCAqeHBydF9sb29rdXBfcnFzdChzdHJ1Y3QNCj4gPiA+ID4gcnBj X3hwcnQgKnhwcnQsIF9fYmUzMiB4aWQpDQo+ID4gPiA+IH0NCj4gPiA+ID4gRVhQT1JUX1NZTUJP TF9HUEwoeHBydF9sb29rdXBfcnFzdCk7DQo+ID4gPiA+IA0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ ICsgKiB4cHJ0X3Bpbl9ycXN0IC0gUGluIGEgcmVxdWVzdCBvbiB0aGUgdHJhbnNwb3J0IHJlY2Vp dmUgbGlzdA0KPiA+ID4gPiArICogQHJlcTogUmVxdWVzdCB0byBwaW4NCj4gPiA+ID4gKyAqDQo+ ID4gPiA+ICsgKiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhpcyBpcyBhdG9taWMgd2l0aCB0aGUgY2Fs bCB0bw0KPiA+ID4gPiB4cHJ0X2xvb2t1cF9ycXN0KCkNCj4gPiA+ID4gKyAqIHNvIHNob3VsZCBi ZSBob2xkaW5nIHRoZSB4cHJ0IHRyYW5zcG9ydCBsb2NrLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ ICt2b2lkIHhwcnRfcGluX3Jxc3Qoc3RydWN0IHJwY19ycXN0ICpyZXEpDQo+ID4gPiA+ICt7DQo+ ID4gPiA+ICsJc2V0X2JpdChSUENfVEFTS19NU0dfUkVDViwgJnJlcS0+cnFfdGFzay0NCj4gPiA+ ID4gPnRrX3J1bnN0YXRlKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ ID4gPiA+ICsgKiB4cHJ0X3VucGluX3Jxc3QgLSBVbnBpbiBhIHJlcXVlc3Qgb24gdGhlIHRyYW5z cG9ydCByZWNlaXZlDQo+ID4gPiA+IGxpc3QNCj4gPiA+ID4gKyAqIEByZXE6IFJlcXVlc3QgdG8g cGluDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQ2FsbGVyIHNob3VsZCBiZSBob2xkaW5nIHRo ZSB4cHJ0IHRyYW5zcG9ydCBsb2NrLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICt2b2lkIHhwcnRf dW5waW5fcnFzdChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlz dHJ1Y3QgcnBjX3Rhc2sgKnRhc2sgPSByZXEtPnJxX3Rhc2s7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KwljbGVhcl9iaXQoUlBDX1RBU0tfTVNHX1JFQ1YsICZ0YXNrLT50a19ydW5zdGF0ZSk7DQo+ID4g PiA+ICsJaWYgKHRlc3RfYml0KFJQQ19UQVNLX01TR19SRUNWX1dBSVQsICZ0YXNrLQ0KPiA+ID4g PiA+dGtfcnVuc3RhdGUpKQ0KPiA+ID4gPiArCQl3YWtlX3VwX2JpdCgmdGFzay0+dGtfcnVuc3Rh dGUsDQo+ID4gPiA+IFJQQ19UQVNLX01TR19SRUNWKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0K PiA+ID4gPiArc3RhdGljIHZvaWQgeHBydF93YWl0X29uX3Bpbm5lZF9ycXN0KHN0cnVjdCBycGNf cnFzdCAqcmVxKQ0KPiA+ID4gPiArX19tdXN0X2hvbGQoJnJlcS0+cnFfeHBydC0+dHJhbnNwb3J0 X2xvY2spDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJc3RydWN0IHJwY190YXNrICp0YXNrID0gcmVx LT5ycV90YXNrOw0KPiA+ID4gPiArCWlmICh0ZXN0X2JpdChSUENfVEFTS19NU0dfUkVDViwgJnRh c2stPnRrX3J1bnN0YXRlKSkgew0KPiA+ID4gPiArCQlzcGluX3VubG9ja19iaCgmcmVxLT5ycV94 cHJ0LT50cmFuc3BvcnRfbG9jayk7DQo+ID4gPiA+ICsJCXNldF9iaXQoUlBDX1RBU0tfTVNHX1JF Q1ZfV0FJVCwgJnRhc2stDQo+ID4gPiA+ID4gdGtfcnVuc3RhdGUpOw0KPiA+ID4gPiANCj4gPiA+ ID4gKwkJd2FpdF9vbl9iaXQoJnRhc2stPnRrX3J1bnN0YXRlLA0KPiA+ID4gPiBSUENfVEFTS19N U0dfUkVDViwNCj4gPiA+ID4gKwkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7DQo+ID4gPiA+ICsJ CWNsZWFyX2JpdChSUENfVEFTS19NU0dfUkVDVl9XQUlULCAmdGFzay0NCj4gPiA+ID4gPiB0a19y dW5zdGF0ZSk7DQo+ID4gPiA+IA0KPiA+ID4gPiArCQlzcGluX2xvY2tfYmgoJnJlcS0+cnFfeHBy dC0+dHJhbnNwb3J0X2xvY2spOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0K PiA+ID4gPiBzdGF0aWMgdm9pZCB4cHJ0X3VwZGF0ZV9ydHQoc3RydWN0IHJwY190YXNrICp0YXNr KQ0KPiA+ID4gPiB7DQo+ID4gPiA+IAlzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSA9IHRhc2stPnRrX3Jx c3RwOw0KPiA+ID4gPiBAQCAtMTMwMSw2ICsxMzQyLDcgQEAgdm9pZCB4cHJ0X3JlbGVhc2Uoc3Ry dWN0IHJwY190YXNrICp0YXNrKQ0KPiA+ID4gPiAJCWxpc3RfZGVsKCZyZXEtPnJxX2xpc3QpOw0K PiA+ID4gPiAJeHBydC0+bGFzdF91c2VkID0gamlmZmllczsNCj4gPiA+ID4gCXhwcnRfc2NoZWR1 bGVfYXV0b2Rpc2Nvbm5lY3QoeHBydCk7DQo+ID4gPiA+ICsJeHBydF93YWl0X29uX3Bpbm5lZF9y cXN0KHJlcSk7DQo+ID4gPiA+IAlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2sp Ow0KPiA+ID4gDQo+ID4gPiBJcyBpdCBPSyB0byBjYWxsIHdhaXRfb25fYml0KFRBU0tfVU5JTlRF UlJVUFRJQkxFKSB3aGlsZSBob2xkaW5nDQo+ID4gPiBhIEJIIHNwaW4gbG9jaz8gVGhpcyBjb3Vs ZCBiZSBwcm9uZSB0byBkZWFkbG9jay4NCj4gPiANCj4gPiBXZSBkcm9wIHRoZSBsb2NrIGluc2lk ZSB4cHJ0X3dhaXRfb25fcGlubmVkX3Jxc3QoKSBpZiB3ZSBuZWVkIHRvDQo+ID4gd2FpdC4NCj4g PiANCj4gPiBUaGUgcmVhc29uIHdoeSB3ZSB3YW50IHRvIGhvbGQgdGhlIGxvY2sgdGhlcmUgaXMg dG8gYXZvaWQgYSB1c2UtDQo+ID4gYWZ0ZXItDQo+ID4gZnJlZSBpbiB4cHJ0X3VucGluX3Jxc3Qo KS4gV2l0aG91dCB0aGUgbG9jaywgdGhlcmUgaXMgYSByaXNrIHRoYXQNCj4gPiB4cHJ0X3JlbGVh c2UoKSBjb3VsZCBjb21wbGV0ZSwgYW5kIHRoZSB0YXNrIGdldCBmcmVlZCBiZWZvcmUgd2UNCj4g PiBoYXZlDQo+ID4gY29tcGxldGVkIHdha2VfdXBfYml0KCkuDQo+IA0KPiBBZ3JlZSB3aXRoIHRo ZSBsYXN0IGJpdC4gSSBoYWQgdGhhdCBjaGFsbGVuZ2Ugd2l0aCB0aGUgb3JkZXIgb2YNCj4gbWVt b3J5IGludmFsaWRhdGlvbiAod2hpY2ggd2FpdHMpIGFuZCB4cHJ0X2xvb2t1cF9ycXN0L2NvbXBs ZXRlX3Jxc3QNCj4gaW4gcnBjcmRtYV9yZXBseV9oYW5kbGVyLg0KPiANCj4gSG93ZXZlciBteSBj b25jZXJuIGlzIHRoYXQgdGhlcmUgYXJlIG1hbnkgb3RoZXIgdXNlcnMgb2YgdGhlDQo+IHRyYW5z cG9ydF9sb2NrLiBEb2VzIGl0IGJlY29tZSBtb3JlIHRyaWNreSBub3QgdG8gaW50cm9kdWNlIGEN Cj4gcHJvYmxlbSBieSBjaGFuZ2luZyBhbnkgb25lIG9mIHRoZSBzaXRlcyB0aGF0IHRha2UgdHJh bnNwb3J0X2xvY2s/DQoNCldoYXQgaXMgeW91ciBjb25jZXJuPyBUaGUgbWFpbiByZWFzb24gZm9y IHRha2luZyB0aGUgdHJhbnNwb3J0IGxvY2sgaW4NCnRoZSBjdXJyZW50IGNvZGUgaXMgdHdvZm9s ZDoNCg0KMSkgUGVyZm9ybSB0aGUgbG9va3VwIG9mIHRoZSByZXF1ZXN0IG9uIHRoZSByZWNlaXZl IGxpc3QNCjIpIEVuc3VyZSB0aGUgcmVxdWVzdCBkb2Vzbid0IGRpc2FwcGVhciB3aGlsZSB3ZSdy ZSB3cml0aW5nIHRvIGl0Lg0KDQo+IERlc3BpdGUgdGhlIGRlYWRsb2NrIGNvbmNlcm4sIEkgZG9u J3QgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gY2FsbA0KPiB3YWl0X29uX2JpdCB3aGlsZSBob2xk aW5nIGEgc3BpbiBsb2NrIHNpbXBseSBiZWNhdXNlIHNwaW4gbG9ja3MgYXJlDQo+IHN1cHBvc2Vk IHRvIGJlIGZvciB0aGluZ3MgdGhhdCBhcmUgcXVpY2ssIGxpa2UgdXBkYXRpbmcgYSBkYXRhDQo+ IHN0cnVjdHVyZS4NCj4gDQo+IHdhaXRfb25fYml0IGNhbiB0YWtlIG1pY3Jvc2Vjb25kczogcHJl cGFyZV90b193YWl0IGFuZCBmaW5pc2hfd2FpdA0KPiBjYW4gYm90aCB0YWtlIGEgaXJxc2F2ZSBz cGluX2xvY2ssIGZvciBleGFtcGxlLiBiaXRfd2FpdCBpcyB0aGUNCj4gYWN0aW9uIHRoYXQgaXMg ZG9uZSBpZiB0aGUgYml0IGlzIG5vdCByZWFkeSwgYW5kIHRoYXQgY2FsbHMNCj4gc2NoZWR1bGUo KS4gT24gYSBidXN5IHN5c3RlbSwgdGhhdCBraW5kIG9mIGNvbnRleHQgc3dpdGNoIGNhbiB0YWtl DQo+IGRvemVucyBvZiBtaWNyb3NlY29uZHMuDQoNCkFncmVlZCwgYnV0IHdlIHNob3VsZCBvbmx5 IHZlcnkgcmFyZWx5IGJlIGhpdHRpbmcgdGhlIHdhaXQgY2FzZS4gSW4gYWxsDQpzdWNjZXNzZnVs IFJQQyBjYWxscywgdGhlIHJlY2VpdmUgd2lsbCBoYXZlIGhhcHBlbmVkIGxvbmcgYmVmb3JlIHdl DQpjYWxsIHhwcnRfcmVsZWFzZSgpLiBJbiBmYWN0LCB0aGUgb25seSAyIGNhc2VzIHdoZXJlIHRo aXMgY2FuIGhhcHBlbg0Kd291bGQgYmUgd2hlbiB0aGUgUlBDIGNhbGwgaXRzZWxmIGlzIGludGVy cnVwdGVkLiBFaXRoZXI6DQoNCjEpIFRoZSB0YXNrIGlzIHN5bmNocm9ub3VzIGFuZCB3YXMgaW50 ZXJydXB0ZWQgYnkgdGhlIHVzZXIuDQoyKSBUaGUgdGFzayBpcyB0ZXJtaW5hdGluZyBlYXJseSBk dWUgdG8gYSBzb2Z0IHRpbWVvdXQuDQoNCkluIGJvdGggdGhvc2UgY2FzZXMsIHdlJ3JlIGluIGEg bm9uLXBlcmZvcm1hbmNlIHBhdGguIEZ1cnRoZXJtb3JlLCB0aGV5DQogd291bGQgY3VycmVudGx5 IGVuZCB1cCBzcGlubmluZyBhZ2FpbnN0IHRoZSB0cmFuc3BvcnQgbG9jay4NCg0KPiBJTU8gaXQg d291bGQgYmUgYSBsb3QgbmljZXIgaWYgd2UgaGFkIGFuIEZTTSBzdGF0ZSBhdmFpbGFibGUgdGhh dA0KPiBjb3VsZCBhbGxvdyBhbm90aGVyIHNsZWVwIHdoaWxlIGFuIFJQQyB0YXNrIGR1cmluZyB4 cHJ0X3JlbGVhc2UuDQoNCldoeSB3b3VsZCB0aGF0IGJlIHByZWZlcmFibGUsIGlmIHRoZSBhcmd1 bWVudCBob2xkcyB0aGF0IHRoaXMgb25seQ0KaGFwcGVucyBpbiB0aGVzZSAyIHJhcmUgZXJyb3Ig Y2FzZXM/DQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50YWlu ZXIsIFByaW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tDQo=