From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Edgecombe, Rick P" Subject: Re: [PATCH 1/2] vmalloc: New flag for flush before releasing pages Date: Tue, 4 Dec 2018 23:51:38 +0000 Message-ID: References: <20181128000754.18056-1-rick.p.edgecombe@intel.com> <20181128000754.18056-2-rick.p.edgecombe@intel.com> <4883FED1-D0EC-41B0-A90F-1A697756D41D@gmail.com> <20181204160304.GB7195@arm.com> <51281e69a3722014f718a6840f43b2e6773eed90.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "linux-kernel@vger.kernel.org" , "daniel@iogearbox.net" , "ard.biesheuvel@linaro.org" , "jeyu@kernel.org" , "rostedt@goodmis.org" , "ast@kernel.org" , "linux-mm@kvack.org" , "Dock, Deneen T" , "jannh@google.com" , "kristen@linux.intel.com" , "akpm@linux-foundation.org" , "peterz@infradead.org" , "will.deacon@arm.com" , "mingo@redhat.com" , "luto@kernel.org" , "Keshavamurthy, Anil S" , "kernel-hardening@lists.openwall.com" , "mhiramat@kernel.org" , "naveen.n.rao@l To: "nadav.amit@gmail.com" Return-path: List-Post: List-Help: List-Unsubscribe: List-Subscribe: In-Reply-To: Content-Language: en-US Content-ID: <90C3934C4EC4F747BF99EB8A9E12851E@intel.com> List-Id: netdev.vger.kernel.org T24gVHVlLCAyMDE4LTEyLTA0IGF0IDEyOjM2IC0wODAwLCBOYWRhdiBBbWl0IHdyb3RlOg0KPiA+ IE9uIERlYyA0LCAyMDE4LCBhdCAxMjowMiBQTSwgRWRnZWNvbWJlLCBSaWNrIFAgPHJpY2sucC5l ZGdlY29tYmVAaW50ZWwuY29tPg0KPiA+IHdyb3RlOg0KPiA+IA0KPiA+IE9uIFR1ZSwgMjAxOC0x Mi0wNCBhdCAxNjowMyArMDAwMCwgV2lsbCBEZWFjb24gd3JvdGU6DQo+ID4gPiBPbiBNb24sIERl YyAwMywgMjAxOCBhdCAwNTo0MzoxMVBNIC0wODAwLCBOYWRhdiBBbWl0IHdyb3RlOg0KPiA+ID4g PiA+IE9uIE5vdiAyNywgMjAxOCwgYXQgNDowNyBQTSwgUmljayBFZGdlY29tYmUgPA0KPiA+ID4g PiA+IHJpY2sucC5lZGdlY29tYmVAaW50ZWwuY29tPg0KPiA+ID4gPiA+IHdyb3RlOg0KPiA+ID4g PiA+IA0KPiA+ID4gPiA+IFNpbmNlIHZmcmVlIHdpbGwgbGF6aWx5IGZsdXNoIHRoZSBUTEIsIGJ1 dCBub3QgbGF6aWx5IGZyZWUgdGhlDQo+ID4gPiA+ID4gdW5kZXJseWluZw0KPiA+ID4gPiA+IHBh Z2VzLA0KPiA+ID4gPiA+IGl0IG9mdGVuIGxlYXZlcyBzdGFsZSBUTEIgZW50cmllcyB0byBmcmVl ZCBwYWdlcyB0aGF0IGNvdWxkIGdldCByZS0NCj4gPiA+ID4gPiB1c2VkLg0KPiA+ID4gPiA+IFRo aXMgaXMNCj4gPiA+ID4gPiB1bmRlc2lyYWJsZSBmb3IgY2FzZXMgd2hlcmUgdGhlIG1lbW9yeSBi ZWluZyBmcmVlZCBoYXMgc3BlY2lhbA0KPiA+ID4gPiA+IHBlcm1pc3Npb25zDQo+ID4gPiA+ID4g c3VjaA0KPiA+ID4gPiA+IGFzIGV4ZWN1dGFibGUuDQo+ID4gPiA+IA0KPiA+ID4gPiBTbyBJIGFt IHRyeWluZyB0byBmaW5pc2ggbXkgcGF0Y2gtc2V0IGZvciBwcmV2ZW50aW5nIHRyYW5zaWVudCBX K1gNCj4gPiA+ID4gbWFwcGluZ3MNCj4gPiA+ID4gZnJvbSB0YWtpbmcgc3BhY2UsIGJ5IGhhbmRs aW5nIGtwcm9iZXMgJiBmdHJhY2UgdGhhdCBJIG1pc3NlZCAodGhhbmtzDQo+ID4gPiA+IGFnYWlu DQo+ID4gPiA+IGZvcg0KPiA+ID4gPiBwb2ludGluZyBpdCBvdXQpLg0KPiA+ID4gPiANCj4gPiA+ ID4gQnV0IGFsbCBvZiB0aGUgc3VkZGVuLCBJIGRvbuKAmXQgdW5kZXJzdGFuZCB3aHkgd2UgaGF2 ZSB0aGUgcHJvYmxlbSB0aGF0DQo+ID4gPiA+IHRoaXMNCj4gPiA+ID4gKHlvdXIpIHBhdGNoLXNl dCBkZWFscyB3aXRoIGF0IGFsbC4gV2UgYWxyZWFkeSBjaGFuZ2UgdGhlIG1hcHBpbmdzIHRvDQo+ ID4gPiA+IG1ha2UNCj4gPiA+ID4gdGhlIG1lbW9yeSB3cml0YWJsZSBiZWZvcmUgZnJlZWluZyB0 aGUgbWVtb3J5LCBzbyB3aHkgY2Fu4oCZdCB3ZSBtYWtlIGl0DQo+ID4gPiA+IG5vbi1leGVjdXRh YmxlIGF0IHRoZSBzYW1lIHRpbWU/IEFjdHVhbGx5LCB3aHkgZG8gd2UgbWFrZSB0aGUgbW9kdWxl DQo+ID4gPiA+IG1lbW9yeSwNCj4gPiA+ID4gaW5jbHVkaW5nIGl0cyBkYXRhIGV4ZWN1dGFibGUg YmVmb3JlIGZyZWVpbmcgaXQ/Pz8NCj4gPiA+IA0KPiA+ID4gWWVhaCwgdGhpcyBpcyByZWFsbHkg Y29uZnVzaW5nLCBidXQgSSBoYXZlIGEgc3VzcGljaW9uIGl0J3MgYSBjb21iaW5hdGlvbg0KPiA+ ID4gb2YgdGhlIHZhcmlvdXMgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGFuZCBoeXN0ZXJpY2Fs IHJhaXNpbnMuIFdlIGNhbid0DQo+ID4gPiByZWx5IG9uIG1vZHVsZV9hbGxvYygpIGFsbG9jYXRp bmcgZnJvbSB0aGUgdm1hbGxvYyBhcmVhIChzZWUgbmlvczIpIG5vcg0KPiA+ID4gY2FuIHdlIHJl bHkgb24gZGlzYWJsZV9yb19ueCgpIGJlaW5nIGF2YWlsYWJsZSBhdCBidWlsZCB0aW1lLg0KPiA+ ID4gDQo+ID4gPiBJZiB3ZSAqY291bGQqIHJlbHkgb24gbW9kdWxlIGFsbG9jYXRpb25zIGFsd2F5 cyB1c2luZyB2bWFsbG9jKCksIHRoZW4NCj4gPiA+IHdlIGNvdWxkIHBhc3MgaW4gUmljaydzIG5l dyBmbGFnIGFuZCBkcm9wIGRpc2FibGVfcm9fbngoKSBhbHRvZ2V0aGVyDQo+ID4gPiBhZmFpY3Qg LS0gd2hvIGNhcmVzIGFib3V0IHRoZSBtZW1vcnkgYXR0cmlidXRlcyBvZiBhIG1hcHBpbmcgdGhh dCdzIGFib3V0DQo+ID4gPiB0byBkaXNhcHBlYXIgYW55d2F5Pw0KPiA+ID4gDQo+ID4gPiBJcyBp dCBqdXN0IG5pb3MyIHRoYXQgZG9lcyBzb21ldGhpbmcgZGlmZmVyZW50Pw0KPiA+ID4gDQo+ID4g PiBXaWxsDQo+ID4gDQo+ID4gWWVhIGl0IGlzIHJlYWxseSBpbnRlcnR3aW5lZC4gSSB0aGluayBm b3IgeDg2LCBzZXRfbWVtb3J5X254IGV2ZXJ5d2hlcmUNCj4gPiB3b3VsZA0KPiA+IHNvbHZlIGl0 IGFzIHdlbGwsIGluIGZhY3QgdGhhdCB3YXMgd2hhdCBJIGZpcnN0IHRob3VnaHQgdGhlIHNvbHV0 aW9uIHNob3VsZA0KPiA+IGJlDQo+ID4gdW50aWwgdGhpcyB3YXMgc3VnZ2VzdGVkLiBJdCdzIGlu dGVyZXN0aW5nIHRoYXQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkIE1hc2FtaQ0KPiA+IEhpcmFtYXRz dSByZWZlcmVuY2VkLCBzZXRfbWVtb3J5X254IHdhcyBzdWdnZXN0ZWQgbGFzdCB5ZWFyIGFuZCB3 b3VsZCBoYXZlDQo+ID4gaW5hZHZlcnRlbnRseSBibG9ja2VkIHRoaXMgb24geDg2LiBCdXQsIG9u IHRoZSBvdGhlciBhcmNoaXRlY3R1cmVzIEkgaGF2ZQ0KPiA+IHNpbmNlDQo+ID4gbGVhcm5lZCBp dCBpcyBhIGJpdCBkaWZmZXJlbnQuDQo+ID4gDQo+ID4gSXQgbG9va3MgbGlrZSBhY3R1YWxseSBt b3N0IGFyY2gncyBkb24ndCByZS1kZWZpbmUgc2V0X21lbW9yeV8qLCBhbmQgc28gYWxsDQo+ID4g b2YNCj4gPiB0aGUgZnJvYl8qIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkganVzdCBub29wcy4gSW4g d2hpY2ggY2FzZSBhbGxvY2F0aW5nIFJXWA0KPiA+IGlzDQo+ID4gbmVlZGVkIHRvIG1ha2UgaXQg d29yayBhdCBhbGwsIGJlY2F1c2UgdGhhdCBpcyB3aGF0IHRoZSBhbGxvY2F0aW9uIGlzIGdvaW5n DQo+ID4gdG8NCj4gPiBzdGF5IGF0LiBTbyBpbiB0aGVzZSBhcmNocywgc2V0X21lbW9yeV9ueCB3 b24ndCBzb2x2ZSBpdCBiZWNhdXNlIGl0IHdpbGwgZG8NCj4gPiBub3RoaW5nLg0KPiA+IA0KPiA+ IE9uIHg4NiBJIHRoaW5rIHlvdSBjYW5ub3QgZ2V0IHJpZCBvZiBkaXNhYmxlX3JvX254IGZ1bGx5 IGJlY2F1c2UgdGhlcmUgaXMNCj4gPiB0aGUNCj4gPiBjaGFuZ2luZyBvZiB0aGUgcGVybWlzc2lv bnMgb24gdGhlIGRpcmVjdG1hcCBhcyB3ZWxsLiBZb3UgZG9uJ3Qgd2FudCBzb21lDQo+ID4gb3Ro ZXINCj4gPiBjYWxsZXIgZ2V0dGluZyBhIHBhZ2UgdGhhdCB3YXMgbGVmdCBSTyB3aGVuIGZyZWVk IGFuZCB0aGVuIHRyeWluZyB0byB3cml0ZQ0KPiA+IHRvDQo+ID4gaXQsIGlmIEkgdW5kZXJzdGFu ZCB0aGlzLg0KPiA+IA0KPiA+IFRoZSBvdGhlciByZWFzb25pbmcgd2FzIHRoYXQgY2FsbGluZyBz ZXRfbWVtb3J5X254IGlzbid0IGRvaW5nIHdoYXQgd2UgYXJlDQo+ID4gYWN0dWFsbHkgdHJ5aW5n IHRvIGRvIHdoaWNoIGlzIHByZXZlbnQgdGhlIHBhZ2VzIGZyb20gZ2V0dGluZyByZWxlYXNlZCB0 b28NCj4gPiBlYXJseS4NCj4gPiANCj4gPiBBIG1vcmUgY2xlYXIgc29sdXRpb24gZm9yIGFsbCBv ZiB0aGlzIG1pZ2h0IGludm9sdmUgcmVmYWN0b3Jpbmcgc29tZSBvZiB0aGUNCj4gPiBzZXRfbWVt b3J5XyBkZS1hbGxvY2F0aW9uIGxvZ2ljIG91dCBpbnRvIF9fd2VhayBmdW5jdGlvbnMgaW4gZWl0 aGVyIG1vZHVsZXMNCj4gPiBvcg0KPiA+IHZtYWxsb2MuIEFzIEplc3NpY2EgcG9pbnRzIG91dCBp biB0aGUgb3RoZXIgdGhyZWFkIHRob3VnaCwgbW9kdWxlcyBkb2VzIGENCj4gPiBsb3QNCj4gPiBt b3JlIHN0dWZmIHRoZXJlIHRoYW4gdGhlIG90aGVyIG1vZHVsZV9hbGxvYyBjYWxsZXJzLiBJIHRo aW5rIGl0IG1heSB0YWtlDQo+ID4gc29tZQ0KPiA+IHRob3VnaHQgdG8gY2VudHJhbGl6ZSBBTkQg bWFrZSBpdCBvcHRpbWFsIGZvciBldmVyeQ0KPiA+IG1vZHVsZV9hbGxvYy92bWFsbG9jX2V4ZWMN Cj4gPiB1c2VyIGFuZCBhcmNoLg0KPiA+IA0KPiA+IEJ1dCBmb3Igbm93IHdpdGggdGhlIGNoYW5n ZSBpbiB2bWFsbG9jLCB3ZSBjYW4gYmxvY2sgdGhlIGV4ZWN1dGFibGUgbWFwcGluZw0KPiA+IGZy ZWVkIHBhZ2UgcmUtdXNlIGlzc3VlIGluIGEgY3Jvc3MgcGxhdGZvcm0gd2F5Lg0KPiANCj4gUGxl YXNlIHVuZGVyc3RhbmQgbWUgY29ycmVjdGx5IC0gSSBkaWRu4oCZdCBtZWFuIHRoYXQgeW91ciBw YXRjaGVzIGFyZSBub3QNCj4gbmVlZGVkLg0KT2ssIEkgdGhpbmsgSSB1bmRlcnN0YW5kLiBJIGhh dmUgYmVlbiBwb25kZXJpbmcgdGhlc2Ugc2FtZSB0aGluZ3MgYWZ0ZXIgTWFzYW1pDQpIaXJhbWF0 c3UncyBjb21tZW50cyBvbiB0aGlzIHRocmVhZCB0aGUgb3RoZXIgZGF5Lg0KDQo+IEFsbCBJIGRp ZCBpcyBhc2tpbmcgLSBob3cgY29tZSB0aGUgUFRFcyBhcmUgZXhlY3V0YWJsZSB3aGVuIHRoZXkg YXJlIGNsZWFyZWQNCj4gdGhleSBhcmUgZXhlY3V0YWJsZSwgd2hlbiBpbiBmYWN0IHdlIG1hbmlw dWxhdGUgdGhlbSB3aGVuIHRoZSBtb2R1bGUgaXMNCj4gcmVtb3ZlZC4NCkkgdGhpbmsgdGhlIGRp cmVjdG1hcCB1c2VkIHRvIGJlIFJXWCBzbyBtYXliZSBoaXN0b3JpY2FsbHkgaXRzIHRyeWluZyB0 byByZXR1cm4NCml0IHRvIGl0cyBkZWZhdWx0IHN0YXRlPyBOb3Qgc3VyZS4NCg0KPiBJIHRoaW5r IEkgdHJ5IHRvIGRlYWwgd2l0aCBhIHNpbWlsYXIgcHJvYmxlbSB0byB0aGUgb25lIHlvdSBlbmNv dW50ZXIgLQ0KPiBicm9rZW4gV15YLiBUaGUgb25seSB0aGluZyB0aGF0IGJvdGhlcmVkIG1lIGlu IHJlZ2FyZCB0byB5b3VyIHBhdGNoZXMgKGFuZA0KPiBvbmx5IGFmdGVyIEkgcGxheWVkIHdpdGgg dGhlIGNvZGUpIGlzIHRoYXQgdGhlcmUgaXMgc3RpbGwgYSB0aW1lLXdpbmRvdyBpbg0KPiB3aGlj aCBXXlggaXMgYnJva2VuIGR1ZSB0byBkaXNhYmxlX3JvX254KCkuDQo+IA0KVG90YWxseSBhZ3Jl ZSB0aGVyZSBpcyBvdmVybGFwIGluIHRoZSBmaXhlcyBhbmQgd2Ugc2hvdWxkIHN5bmMuDQoNCldo YXQgZG8geW91IHRoaW5rIGFib3V0IEFuZHkncyBzdWdnZXN0aW9uIGZvciBkb2luZyB0aGUgdmZy ZWUgY2xlYW51cCBpbiB2bWFsbG9jDQp3aXRoIGFyY2ggaG9va3M/IFNvIHRoZSBhbGxvY2F0aW9u IGdvZXMgaW50byB2ZnJlZSBmdWxseSBzZXR1cCBhbmQgdm1hbGxvYyBmcmVlcw0KaXQgYW5kIG9u IHg4NiByZXNldHMgdGhlIGRpcmVjdCBtYXAuDQoNClRoYW5rcywNCg0KUmljaw0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by kanga.kvack.org (Postfix) with ESMTP id 52A9C6B713B for ; Tue, 4 Dec 2018 18:51:42 -0500 (EST) Received: by mail-pf1-f197.google.com with SMTP id u20so15351786pfa.1 for ; Tue, 04 Dec 2018 15:51:42 -0800 (PST) Received: from mga14.intel.com (mga14.intel.com. [192.55.52.115]) by mx.google.com with ESMTPS id h13si15210107pgs.17.2018.12.04.15.51.40 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Dec 2018 15:51:41 -0800 (PST) From: "Edgecombe, Rick P" Subject: Re: [PATCH 1/2] vmalloc: New flag for flush before releasing pages Date: Tue, 4 Dec 2018 23:51:38 +0000 Message-ID: References: <20181128000754.18056-1-rick.p.edgecombe@intel.com> <20181128000754.18056-2-rick.p.edgecombe@intel.com> <4883FED1-D0EC-41B0-A90F-1A697756D41D@gmail.com> <20181204160304.GB7195@arm.com> <51281e69a3722014f718a6840f43b2e6773eed90.camel@intel.com> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <90C3934C4EC4F747BF99EB8A9E12851E@intel.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: owner-linux-mm@kvack.org List-ID: To: "nadav.amit@gmail.com" Cc: "linux-kernel@vger.kernel.org" , "daniel@iogearbox.net" , "ard.biesheuvel@linaro.org" , "jeyu@kernel.org" , "rostedt@goodmis.org" , "ast@kernel.org" , "linux-mm@kvack.org" , "Dock, Deneen T" , "jannh@google.com" , "kristen@linux.intel.com" , "akpm@linux-foundation.org" , "peterz@infradead.org" , "will.deacon@arm.com" , "mingo@redhat.com" , "luto@kernel.org" , "Keshavamurthy, Anil S" , "kernel-hardening@lists.openwall.com" , "mhiramat@kernel.org" , "naveen.n.rao@linux.vnet.ibm.com" , "davem@davemloft.net" , "netdev@vger.kernel.org" , "Hansen, Dave" T24gVHVlLCAyMDE4LTEyLTA0IGF0IDEyOjM2IC0wODAwLCBOYWRhdiBBbWl0IHdyb3RlOg0KPiA+ IE9uIERlYyA0LCAyMDE4LCBhdCAxMjowMiBQTSwgRWRnZWNvbWJlLCBSaWNrIFAgPHJpY2sucC5l ZGdlY29tYmVAaW50ZWwuY29tPg0KPiA+IHdyb3RlOg0KPiA+IA0KPiA+IE9uIFR1ZSwgMjAxOC0x Mi0wNCBhdCAxNjowMyArMDAwMCwgV2lsbCBEZWFjb24gd3JvdGU6DQo+ID4gPiBPbiBNb24sIERl YyAwMywgMjAxOCBhdCAwNTo0MzoxMVBNIC0wODAwLCBOYWRhdiBBbWl0IHdyb3RlOg0KPiA+ID4g PiA+IE9uIE5vdiAyNywgMjAxOCwgYXQgNDowNyBQTSwgUmljayBFZGdlY29tYmUgPA0KPiA+ID4g PiA+IHJpY2sucC5lZGdlY29tYmVAaW50ZWwuY29tPg0KPiA+ID4gPiA+IHdyb3RlOg0KPiA+ID4g PiA+IA0KPiA+ID4gPiA+IFNpbmNlIHZmcmVlIHdpbGwgbGF6aWx5IGZsdXNoIHRoZSBUTEIsIGJ1 dCBub3QgbGF6aWx5IGZyZWUgdGhlDQo+ID4gPiA+ID4gdW5kZXJseWluZw0KPiA+ID4gPiA+IHBh Z2VzLA0KPiA+ID4gPiA+IGl0IG9mdGVuIGxlYXZlcyBzdGFsZSBUTEIgZW50cmllcyB0byBmcmVl ZCBwYWdlcyB0aGF0IGNvdWxkIGdldCByZS0NCj4gPiA+ID4gPiB1c2VkLg0KPiA+ID4gPiA+IFRo aXMgaXMNCj4gPiA+ID4gPiB1bmRlc2lyYWJsZSBmb3IgY2FzZXMgd2hlcmUgdGhlIG1lbW9yeSBi ZWluZyBmcmVlZCBoYXMgc3BlY2lhbA0KPiA+ID4gPiA+IHBlcm1pc3Npb25zDQo+ID4gPiA+ID4g c3VjaA0KPiA+ID4gPiA+IGFzIGV4ZWN1dGFibGUuDQo+ID4gPiA+IA0KPiA+ID4gPiBTbyBJIGFt IHRyeWluZyB0byBmaW5pc2ggbXkgcGF0Y2gtc2V0IGZvciBwcmV2ZW50aW5nIHRyYW5zaWVudCBX K1gNCj4gPiA+ID4gbWFwcGluZ3MNCj4gPiA+ID4gZnJvbSB0YWtpbmcgc3BhY2UsIGJ5IGhhbmRs aW5nIGtwcm9iZXMgJiBmdHJhY2UgdGhhdCBJIG1pc3NlZCAodGhhbmtzDQo+ID4gPiA+IGFnYWlu DQo+ID4gPiA+IGZvcg0KPiA+ID4gPiBwb2ludGluZyBpdCBvdXQpLg0KPiA+ID4gPiANCj4gPiA+ ID4gQnV0IGFsbCBvZiB0aGUgc3VkZGVuLCBJIGRvbuKAmXQgdW5kZXJzdGFuZCB3aHkgd2UgaGF2 ZSB0aGUgcHJvYmxlbSB0aGF0DQo+ID4gPiA+IHRoaXMNCj4gPiA+ID4gKHlvdXIpIHBhdGNoLXNl dCBkZWFscyB3aXRoIGF0IGFsbC4gV2UgYWxyZWFkeSBjaGFuZ2UgdGhlIG1hcHBpbmdzIHRvDQo+ ID4gPiA+IG1ha2UNCj4gPiA+ID4gdGhlIG1lbW9yeSB3cml0YWJsZSBiZWZvcmUgZnJlZWluZyB0 aGUgbWVtb3J5LCBzbyB3aHkgY2Fu4oCZdCB3ZSBtYWtlIGl0DQo+ID4gPiA+IG5vbi1leGVjdXRh YmxlIGF0IHRoZSBzYW1lIHRpbWU/IEFjdHVhbGx5LCB3aHkgZG8gd2UgbWFrZSB0aGUgbW9kdWxl DQo+ID4gPiA+IG1lbW9yeSwNCj4gPiA+ID4gaW5jbHVkaW5nIGl0cyBkYXRhIGV4ZWN1dGFibGUg YmVmb3JlIGZyZWVpbmcgaXQ/Pz8NCj4gPiA+IA0KPiA+ID4gWWVhaCwgdGhpcyBpcyByZWFsbHkg Y29uZnVzaW5nLCBidXQgSSBoYXZlIGEgc3VzcGljaW9uIGl0J3MgYSBjb21iaW5hdGlvbg0KPiA+ ID4gb2YgdGhlIHZhcmlvdXMgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGFuZCBoeXN0ZXJpY2Fs IHJhaXNpbnMuIFdlIGNhbid0DQo+ID4gPiByZWx5IG9uIG1vZHVsZV9hbGxvYygpIGFsbG9jYXRp bmcgZnJvbSB0aGUgdm1hbGxvYyBhcmVhIChzZWUgbmlvczIpIG5vcg0KPiA+ID4gY2FuIHdlIHJl bHkgb24gZGlzYWJsZV9yb19ueCgpIGJlaW5nIGF2YWlsYWJsZSBhdCBidWlsZCB0aW1lLg0KPiA+ ID4gDQo+ID4gPiBJZiB3ZSAqY291bGQqIHJlbHkgb24gbW9kdWxlIGFsbG9jYXRpb25zIGFsd2F5 cyB1c2luZyB2bWFsbG9jKCksIHRoZW4NCj4gPiA+IHdlIGNvdWxkIHBhc3MgaW4gUmljaydzIG5l dyBmbGFnIGFuZCBkcm9wIGRpc2FibGVfcm9fbngoKSBhbHRvZ2V0aGVyDQo+ID4gPiBhZmFpY3Qg LS0gd2hvIGNhcmVzIGFib3V0IHRoZSBtZW1vcnkgYXR0cmlidXRlcyBvZiBhIG1hcHBpbmcgdGhh dCdzIGFib3V0DQo+ID4gPiB0byBkaXNhcHBlYXIgYW55d2F5Pw0KPiA+ID4gDQo+ID4gPiBJcyBp dCBqdXN0IG5pb3MyIHRoYXQgZG9lcyBzb21ldGhpbmcgZGlmZmVyZW50Pw0KPiA+ID4gDQo+ID4g PiBXaWxsDQo+ID4gDQo+ID4gWWVhIGl0IGlzIHJlYWxseSBpbnRlcnR3aW5lZC4gSSB0aGluayBm b3IgeDg2LCBzZXRfbWVtb3J5X254IGV2ZXJ5d2hlcmUNCj4gPiB3b3VsZA0KPiA+IHNvbHZlIGl0 IGFzIHdlbGwsIGluIGZhY3QgdGhhdCB3YXMgd2hhdCBJIGZpcnN0IHRob3VnaHQgdGhlIHNvbHV0 aW9uIHNob3VsZA0KPiA+IGJlDQo+ID4gdW50aWwgdGhpcyB3YXMgc3VnZ2VzdGVkLiBJdCdzIGlu dGVyZXN0aW5nIHRoYXQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkIE1hc2FtaQ0KPiA+IEhpcmFtYXRz dSByZWZlcmVuY2VkLCBzZXRfbWVtb3J5X254IHdhcyBzdWdnZXN0ZWQgbGFzdCB5ZWFyIGFuZCB3 b3VsZCBoYXZlDQo+ID4gaW5hZHZlcnRlbnRseSBibG9ja2VkIHRoaXMgb24geDg2LiBCdXQsIG9u IHRoZSBvdGhlciBhcmNoaXRlY3R1cmVzIEkgaGF2ZQ0KPiA+IHNpbmNlDQo+ID4gbGVhcm5lZCBp dCBpcyBhIGJpdCBkaWZmZXJlbnQuDQo+ID4gDQo+ID4gSXQgbG9va3MgbGlrZSBhY3R1YWxseSBt b3N0IGFyY2gncyBkb24ndCByZS1kZWZpbmUgc2V0X21lbW9yeV8qLCBhbmQgc28gYWxsDQo+ID4g b2YNCj4gPiB0aGUgZnJvYl8qIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkganVzdCBub29wcy4gSW4g d2hpY2ggY2FzZSBhbGxvY2F0aW5nIFJXWA0KPiA+IGlzDQo+ID4gbmVlZGVkIHRvIG1ha2UgaXQg d29yayBhdCBhbGwsIGJlY2F1c2UgdGhhdCBpcyB3aGF0IHRoZSBhbGxvY2F0aW9uIGlzIGdvaW5n DQo+ID4gdG8NCj4gPiBzdGF5IGF0LiBTbyBpbiB0aGVzZSBhcmNocywgc2V0X21lbW9yeV9ueCB3 b24ndCBzb2x2ZSBpdCBiZWNhdXNlIGl0IHdpbGwgZG8NCj4gPiBub3RoaW5nLg0KPiA+IA0KPiA+ IE9uIHg4NiBJIHRoaW5rIHlvdSBjYW5ub3QgZ2V0IHJpZCBvZiBkaXNhYmxlX3JvX254IGZ1bGx5 IGJlY2F1c2UgdGhlcmUgaXMNCj4gPiB0aGUNCj4gPiBjaGFuZ2luZyBvZiB0aGUgcGVybWlzc2lv bnMgb24gdGhlIGRpcmVjdG1hcCBhcyB3ZWxsLiBZb3UgZG9uJ3Qgd2FudCBzb21lDQo+ID4gb3Ro ZXINCj4gPiBjYWxsZXIgZ2V0dGluZyBhIHBhZ2UgdGhhdCB3YXMgbGVmdCBSTyB3aGVuIGZyZWVk IGFuZCB0aGVuIHRyeWluZyB0byB3cml0ZQ0KPiA+IHRvDQo+ID4gaXQsIGlmIEkgdW5kZXJzdGFu ZCB0aGlzLg0KPiA+IA0KPiA+IFRoZSBvdGhlciByZWFzb25pbmcgd2FzIHRoYXQgY2FsbGluZyBz ZXRfbWVtb3J5X254IGlzbid0IGRvaW5nIHdoYXQgd2UgYXJlDQo+ID4gYWN0dWFsbHkgdHJ5aW5n IHRvIGRvIHdoaWNoIGlzIHByZXZlbnQgdGhlIHBhZ2VzIGZyb20gZ2V0dGluZyByZWxlYXNlZCB0 b28NCj4gPiBlYXJseS4NCj4gPiANCj4gPiBBIG1vcmUgY2xlYXIgc29sdXRpb24gZm9yIGFsbCBv ZiB0aGlzIG1pZ2h0IGludm9sdmUgcmVmYWN0b3Jpbmcgc29tZSBvZiB0aGUNCj4gPiBzZXRfbWVt b3J5XyBkZS1hbGxvY2F0aW9uIGxvZ2ljIG91dCBpbnRvIF9fd2VhayBmdW5jdGlvbnMgaW4gZWl0 aGVyIG1vZHVsZXMNCj4gPiBvcg0KPiA+IHZtYWxsb2MuIEFzIEplc3NpY2EgcG9pbnRzIG91dCBp biB0aGUgb3RoZXIgdGhyZWFkIHRob3VnaCwgbW9kdWxlcyBkb2VzIGENCj4gPiBsb3QNCj4gPiBt b3JlIHN0dWZmIHRoZXJlIHRoYW4gdGhlIG90aGVyIG1vZHVsZV9hbGxvYyBjYWxsZXJzLiBJIHRo aW5rIGl0IG1heSB0YWtlDQo+ID4gc29tZQ0KPiA+IHRob3VnaHQgdG8gY2VudHJhbGl6ZSBBTkQg bWFrZSBpdCBvcHRpbWFsIGZvciBldmVyeQ0KPiA+IG1vZHVsZV9hbGxvYy92bWFsbG9jX2V4ZWMN Cj4gPiB1c2VyIGFuZCBhcmNoLg0KPiA+IA0KPiA+IEJ1dCBmb3Igbm93IHdpdGggdGhlIGNoYW5n ZSBpbiB2bWFsbG9jLCB3ZSBjYW4gYmxvY2sgdGhlIGV4ZWN1dGFibGUgbWFwcGluZw0KPiA+IGZy ZWVkIHBhZ2UgcmUtdXNlIGlzc3VlIGluIGEgY3Jvc3MgcGxhdGZvcm0gd2F5Lg0KPiANCj4gUGxl YXNlIHVuZGVyc3RhbmQgbWUgY29ycmVjdGx5IC0gSSBkaWRu4oCZdCBtZWFuIHRoYXQgeW91ciBw YXRjaGVzIGFyZSBub3QNCj4gbmVlZGVkLg0KT2ssIEkgdGhpbmsgSSB1bmRlcnN0YW5kLiBJIGhh dmUgYmVlbiBwb25kZXJpbmcgdGhlc2Ugc2FtZSB0aGluZ3MgYWZ0ZXIgTWFzYW1pDQpIaXJhbWF0 c3UncyBjb21tZW50cyBvbiB0aGlzIHRocmVhZCB0aGUgb3RoZXIgZGF5Lg0KDQo+IEFsbCBJIGRp ZCBpcyBhc2tpbmcgLSBob3cgY29tZSB0aGUgUFRFcyBhcmUgZXhlY3V0YWJsZSB3aGVuIHRoZXkg YXJlIGNsZWFyZWQNCj4gdGhleSBhcmUgZXhlY3V0YWJsZSwgd2hlbiBpbiBmYWN0IHdlIG1hbmlw dWxhdGUgdGhlbSB3aGVuIHRoZSBtb2R1bGUgaXMNCj4gcmVtb3ZlZC4NCkkgdGhpbmsgdGhlIGRp cmVjdG1hcCB1c2VkIHRvIGJlIFJXWCBzbyBtYXliZSBoaXN0b3JpY2FsbHkgaXRzIHRyeWluZyB0 byByZXR1cm4NCml0IHRvIGl0cyBkZWZhdWx0IHN0YXRlPyBOb3Qgc3VyZS4NCg0KPiBJIHRoaW5r IEkgdHJ5IHRvIGRlYWwgd2l0aCBhIHNpbWlsYXIgcHJvYmxlbSB0byB0aGUgb25lIHlvdSBlbmNv dW50ZXIgLQ0KPiBicm9rZW4gV15YLiBUaGUgb25seSB0aGluZyB0aGF0IGJvdGhlcmVkIG1lIGlu IHJlZ2FyZCB0byB5b3VyIHBhdGNoZXMgKGFuZA0KPiBvbmx5IGFmdGVyIEkgcGxheWVkIHdpdGgg dGhlIGNvZGUpIGlzIHRoYXQgdGhlcmUgaXMgc3RpbGwgYSB0aW1lLXdpbmRvdyBpbg0KPiB3aGlj aCBXXlggaXMgYnJva2VuIGR1ZSB0byBkaXNhYmxlX3JvX254KCkuDQo+IA0KVG90YWxseSBhZ3Jl ZSB0aGVyZSBpcyBvdmVybGFwIGluIHRoZSBmaXhlcyBhbmQgd2Ugc2hvdWxkIHN5bmMuDQoNCldo YXQgZG8geW91IHRoaW5rIGFib3V0IEFuZHkncyBzdWdnZXN0aW9uIGZvciBkb2luZyB0aGUgdmZy ZWUgY2xlYW51cCBpbiB2bWFsbG9jDQp3aXRoIGFyY2ggaG9va3M/IFNvIHRoZSBhbGxvY2F0aW9u IGdvZXMgaW50byB2ZnJlZSBmdWxseSBzZXR1cCBhbmQgdm1hbGxvYyBmcmVlcw0KaXQgYW5kIG9u IHg4NiByZXNldHMgdGhlIGRpcmVjdCBtYXAuDQoNClRoYW5rcywNCg0KUmljaw0K