From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: Re: [PATCH v2 00/25] AMDKFD kernel driver Date: Mon, 21 Jul 2014 22:23:43 +0300 Message-ID: <53CD68BF.4020308@amd.com> References: <53C7D645.3070607@amd.com> <20140720174652.GE3068@gmail.com> <53CD0961.4070505@amd.com> <53CD17FD.3000908@vodafone.de> <53CD1FB6.1000602@amd.com> <20140721155437.GA4519@gmail.com> <53CD5122.5040804@amd.com> <20140721181433.GA5196@gmail.com> <53CD5DBC.7010301@amd.com> <20140721185940.GA5278@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from na01-by2-obe.outbound.protection.outlook.com (mail-by2lp0240.outbound.protection.outlook.com [207.46.163.240]) by gabe.freedesktop.org (Postfix) with ESMTP id 6BCA86E0E0 for ; Mon, 21 Jul 2014 12:23:55 -0700 (PDT) In-Reply-To: <20140721185940.GA5278@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jerome Glisse Cc: Andrew Lewycky , linux-mm , =?UTF-8?B?TWljaGVsIETDpG56ZXI=?= , "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , Evgeny Pinchuk , Alexey Skidanov , Andrew Morton List-Id: dri-devel@lists.freedesktop.org T24gMjEvMDcvMTQgMjE6NTksIEplcm9tZSBHbGlzc2Ugd3JvdGU6Cj4gT24gTW9uLCBKdWwgMjEs IDIwMTQgYXQgMDk6MzY6NDRQTSArMDMwMCwgT2RlZCBHYWJiYXkgd3JvdGU6Cj4+IE9uIDIxLzA3 LzE0IDIxOjE0LCBKZXJvbWUgR2xpc3NlIHdyb3RlOgo+Pj4gT24gTW9uLCBKdWwgMjEsIDIwMTQg YXQgMDg6NDI6NThQTSArMDMwMCwgT2RlZCBHYWJiYXkgd3JvdGU6Cj4+Pj4gT24gMjEvMDcvMTQg MTg6NTQsIEplcm9tZSBHbGlzc2Ugd3JvdGU6Cj4+Pj4+IE9uIE1vbiwgSnVsIDIxLCAyMDE0IGF0 IDA1OjEyOjA2UE0gKzAzMDAsIE9kZWQgR2FiYmF5IHdyb3RlOgo+Pj4+Pj4gT24gMjEvMDcvMTQg MTY6MzksIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4+Pj4+Pj4gQW0gMjEuMDcuMjAxNCAxNDoz Niwgc2NocmllYiBPZGVkIEdhYmJheToKPj4+Pj4+Pj4gT24gMjAvMDcvMTQgMjA6NDYsIEplcm9t ZSBHbGlzc2Ugd3JvdGU6Cj4+Pj4+Pj4+PiBPbiBUaHUsIEp1bCAxNywgMjAxNCBhdCAwNDo1Nzoy NVBNICswMzAwLCBPZGVkIEdhYmJheSB3cm90ZToKPj4+Pj4+Pj4+PiBGb3Jnb3QgdG8gY2MgbWFp bGluZyBsaXN0IG9uIGNvdmVyIGxldHRlci4gU29ycnkuCj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+PiBB cyBhIGNvbnRpbnVhdGlvbiB0byB0aGUgZXhpc3RpbmcgZGlzY3Vzc2lvbiwgaGVyZSBpcyBhIHYy IHBhdGNoIHNlcmllcwo+Pj4+Pj4+Pj4+IHJlc3RydWN0dXJlZCB3aXRoIGEgY2xlYW5lciBoaXN0 b3J5IGFuZCBubyB0b3RhbGx5LWRpZmZlcmVudC1lYXJseS12ZXJzaW9ucwo+Pj4+Pj4+Pj4+IG9m IHRoZSBjb2RlLgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gSW5zdGVhZCBvZiA4MyBwYXRjaGVzLCB0 aGVyZSBhcmUgbm93IGEgdG90YWwgb2YgMjUgcGF0Y2hlcywgd2hlcmUgNSBvZiB0aGVtCj4+Pj4+ Pj4+Pj4gYXJlIG1vZGlmaWNhdGlvbnMgdG8gcmFkZW9uIGRyaXZlciBhbmQgMTggb2YgdGhlbSBp bmNsdWRlIG9ubHkgYW1ka2ZkIGNvZGUuCj4+Pj4+Pj4+Pj4gVGhlcmUgaXMgbm8gY29kZSBnb2lu ZyBhd2F5IG9yIGV2ZW4gbW9kaWZpZWQgYmV0d2VlbiBwYXRjaGVzLCBvbmx5IGFkZGVkLgo+Pj4+ Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gVGhlIGRyaXZlciB3YXMgcmVuYW1lZCBmcm9tIHJhZGVvbl9rZmQg dG8gYW1ka2ZkIGFuZCBtb3ZlZCB0byByZXNpZGUgdW5kZXIKPj4+Pj4+Pj4+PiBkcm0vcmFkZW9u L2FtZGtmZC4gVGhpcyBtb3ZlIHdhcyBkb25lIHRvIGVtcGhhc2l6ZSB0aGUgZmFjdCB0aGF0IHRo aXMgZHJpdmVyCj4+Pj4+Pj4+Pj4gaXMgYW4gQU1ELW9ubHkgZHJpdmVyIGF0IHRoaXMgcG9pbnQu IEhhdmluZyBzYWlkIHRoYXQsIHdlIGRvIGZvcmVzZWUgYQo+Pj4+Pj4+Pj4+IGdlbmVyaWMgaHNh IGZyYW1ld29yayBiZWluZyBpbXBsZW1lbnRlZCBpbiB0aGUgZnV0dXJlIGFuZCBpbiB0aGF0IGNh c2UsIHdlCj4+Pj4+Pj4+Pj4gd2lsbCBhZGp1c3QgYW1ka2ZkIHRvIHdvcmsgd2l0aGluIHRoYXQg ZnJhbWV3b3JrLgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gQXMgdGhlIGFtZGtmZCBkcml2ZXIgc2hv dWxkIHN1cHBvcnQgbXVsdGlwbGUgQU1EIGdmeCBkcml2ZXJzLCB3ZSB3YW50IHRvCj4+Pj4+Pj4+ Pj4ga2VlcCBpdCBhcyBhIHNlcGVyYXRlIGRyaXZlciBmcm9tIHJhZGVvbi4gVGhlcmVmb3JlLCB0 aGUgYW1ka2ZkIGNvZGUgaXMKPj4+Pj4+Pj4+PiBjb250YWluZWQgaW4gaXRzIG93biBmb2xkZXIu IFRoZSBhbWRrZmQgZm9sZGVyIHdhcyBwdXQgdW5kZXIgdGhlIHJhZGVvbgo+Pj4+Pj4+Pj4+IGZv bGRlciBiZWNhdXNlIHRoZSBvbmx5IEFNRCBnZnggZHJpdmVyIGluIHRoZSBMaW51eCBrZXJuZWwg YXQgdGhpcyBwb2ludAo+Pj4+Pj4+Pj4+IGlzIHRoZSByYWRlb24gZHJpdmVyLiBIYXZpbmcgc2Fp ZCB0aGF0LCB3ZSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gbW92ZSBpdAo+Pj4+Pj4+Pj4+IChtYXli ZSB0byBiZSBkaXJlY3RseSB1bmRlciBkcm0pIGFmdGVyIHdlIGludGVncmF0ZSB3aXRoIGFkZGl0 aW9uYWwgQU1EIGdmeAo+Pj4+Pj4+Pj4+IGRyaXZlcnMuCj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+PiBG b3IgcGVvcGxlIHdobyBsaWtlIHRvIHJldmlldyB1c2luZyBnaXQsIHRoZSB2MiBwYXRjaCBzZXQg aXMgbG9jYXRlZCBhdDoKPj4+Pj4+Pj4+PiBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvfmdh YmJheW8vbGludXgvbG9nLz9oPWtmZC1uZXh0LTMuMTctdjIKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+ IFdyaXR0ZW4gYnkgT2RlZCBHYWJiYXloIDxvZGVkLmdhYmJheUBhbWQuY29tPgo+Pj4+Pj4+Pj4K Pj4+Pj4+Pj4+IFNvIHF1aWNrIGNvbW1lbnRzIGJlZm9yZSBpIGZpbmlzaCBnb2luZyBvdmVyIGFs bCBwYXRjaGVzLiBUaGVyZSBpcyBtYW55Cj4+Pj4+Pj4+PiB0aGluZ3MgdGhhdCBuZWVkIG1vcmUg ZG9jdW1lbnRhdGlvbiBlc3BhY2lhbHkgYXMgb2YgcmlnaHQgbm93IHRoZXJlIGlzCj4+Pj4+Pj4+ PiBubyB1c2Vyc3BhY2UgaSBjYW4gZ28gbG9vayBhdC4KPj4+Pj4+Pj4gU28gcXVpY2sgY29tbWVu dHMgb24gc29tZSBvZiB5b3VyIHF1ZXN0aW9ucyBidXQgZmlyc3Qgb2YgYWxsLCB0aGFua3MgZm9y IHRoZQo+Pj4+Pj4+PiB0aW1lIHlvdSBkZWRpY2F0ZWQgdG8gcmV2aWV3IHRoZSBjb2RlLgo+Pj4+ Pj4+Pj4KPj4+Pj4+Pj4+IFRoZXJlIGZldyBzaG93IHN0b3BwZXIsIGJpZ2dlc3Qgb25lIGlzIGdw dSBtZW1vcnkgcGlubmluZyB0aGlzIGlzIGEgYmlnCj4+Pj4+Pj4+PiBubywgdGhhdCB3b3VsZCBu ZWVkIHNlcmlvdXMgYXJndW1lbnRzIGZvciBhbnkgaG9wZSBvZiBjb252aW5jaW5nIG1lIG9uCj4+ Pj4+Pj4+PiB0aGF0IHNpZGUuCj4+Pj4+Pj4+IFdlIG9ubHkgZG8gZ3B1IG1lbW9yeSBwaW5uaW5n IGZvciBrZXJuZWwgb2JqZWN0cy4gVGhlcmUgYXJlIG5vIHVzZXJzcGFjZQo+Pj4+Pj4+PiBvYmpl Y3RzIHRoYXQgYXJlIHBpbm5lZCBvbiB0aGUgZ3B1IG1lbW9yeSBpbiBvdXIgZHJpdmVyLiBJZiB0 aGF0IGlzIHRoZSBjYXNlLAo+Pj4+Pj4+PiBpcyBpdCBzdGlsbCBhIHNob3cgc3RvcHBlciA/Cj4+ Pj4+Pj4+Cj4+Pj4+Pj4+IFRoZSBrZXJuZWwgb2JqZWN0cyBhcmU6Cj4+Pj4+Pj4+IC0gcGlwZWxp bmVzICg0IHBlciBkZXZpY2UpCj4+Pj4+Pj4+IC0gbXFkIHBlciBoaXEgKG9ubHkgMSBwZXIgZGV2 aWNlKQo+Pj4+Pj4+PiAtIG1xZCBwZXIgdXNlcnNwYWNlIHF1ZXVlLiBPbiBLViwgd2Ugc3VwcG9y dCB1cCB0byAxSyBxdWV1ZXMgcGVyIHByb2Nlc3MsIGZvcgo+Pj4+Pj4+PiBhIHRvdGFsIG9mIDUx MksgcXVldWVzLiBFYWNoIG1xZCBpcyAxNTEgYnl0ZXMsIGJ1dCB0aGUgYWxsb2NhdGlvbiBpcyBk b25lIGluCj4+Pj4+Pj4+IDI1NiBhbGlnbm1lbnQuIFNvIHRvdGFsICpwb3NzaWJsZSogbWVtb3J5 IGlzIDEyOE1CCj4+Pj4+Pj4+IC0ga2VybmVsIHF1ZXVlIChvbmx5IDEgcGVyIGRldmljZSkKPj4+ Pj4+Pj4gLSBmZW5jZSBhZGRyZXNzIGZvciBrZXJuZWwgcXVldWUKPj4+Pj4+Pj4gLSBydW5saXN0 cyBmb3IgdGhlIENQICgxIG9yIDIgcGVyIGRldmljZSkKPj4+Pj4+Pgo+Pj4+Pj4+IFRoZSBtYWlu IHF1ZXN0aW9ucyBoZXJlIGFyZSBpZiBpdCdzIGF2b2lkIGFibGUgdG8gcGluIGRvd24gdGhlIG1l bW9yeSBhbmQgaWYgdGhlCj4+Pj4+Pj4gbWVtb3J5IGlzIHBpbm5lZCBkb3duIGF0IGRyaXZlciBs b2FkLCBieSByZXF1ZXN0IGZyb20gdXNlcnNwYWNlIG9yIGJ5IGFueXRoaW5nCj4+Pj4+Pj4gZWxz ZS4KPj4+Pj4+Pgo+Pj4+Pj4+IEFzIGZhciBhcyBJIGNhbiBzZWUgb25seSB0aGUgIm1xZCBwZXIg dXNlcnNwYWNlIHF1ZXVlIiBtaWdodCBiZSBhIGJpdAo+Pj4+Pj4+IHF1ZXN0aW9uYWJsZSwgZXZl cnl0aGluZyBlbHNlIHNvdW5kcyByZWFzb25hYmxlLgo+Pj4+Pj4+Cj4+Pj4+Pj4gQ2hyaXN0aWFu Lgo+Pj4+Pj4KPj4+Pj4+IE1vc3Qgb2YgdGhlIHBpbiBkb3ducyBhcmUgZG9uZSBvbiBkZXZpY2Ug aW5pdGlhbGl6YXRpb24uCj4+Pj4+PiBUaGUgIm1xZCBwZXIgdXNlcnNwYWNlIiBpcyBkb25lIHBl ciB1c2Vyc3BhY2UgcXVldWUgY3JlYXRpb24uIEhvd2V2ZXIsIGFzIEkKPj4+Pj4+IHNhaWQsIGl0 IGhhcyBhbiB1cHBlciBsaW1pdCBvZiAxMjhNQiBvbiBLViwgYW5kIGNvbnNpZGVyaW5nIHRoZSAy RyBsb2NhbAo+Pj4+Pj4gbWVtb3J5LCBJIHRoaW5rIGl0IGlzIE9LLgo+Pj4+Pj4gVGhlIHJ1bmxp c3RzIGFyZSBhbHNvIGRvbmUgb24gdXNlcnNwYWNlIHF1ZXVlIGNyZWF0aW9uL2RlbGV0aW9uLCBi dXQgd2Ugb25seQo+Pj4+Pj4gaGF2ZSAxIG9yIDIgcnVubGlzdHMgcGVyIGRldmljZSwgc28gaXQg aXMgbm90IHRoYXQgYmFkLgo+Pj4+Pgo+Pj4+PiAyRyBsb2NhbCBtZW1vcnkgPyBZb3UgY2FuIG5v dCBhc3N1bWUgYW55dGhpbmcgb24gdXNlcnNpZGUgY29uZmlndXJhdGlvbiBzb21lCj4+Pj4+IG9u ZSBtaWdodCBidWlsZCBhbiBoc2EgY29tcHV0ZXIgd2l0aCA1MTJNIGFuZCBzdGlsbCBleHBlY3Qg YSBmdW5jdGlvbmluZwo+Pj4+PiBkZXNrdG9wLgo+Pj4+IEZpcnN0IG9mIGFsbCwgSSdtIG9ubHkg Y29uc2lkZXJpbmcgS2F2ZXJpIGNvbXB1dGVyLCBub3QgImhzYSIgY29tcHV0ZXIuCj4+Pj4gU2Vj b25kLCBJIHdvdWxkIGltYWdpbmUgd2UgY2FuIGJ1aWxkIHNvbWUgcHJvdGVjdGlvbiBhcm91bmQg aXQsIGxpa2UKPj4+PiBjaGVja2luZyB0b3RhbCBsb2NhbCBtZW1vcnkgYW5kIGxpbWl0IG51bWJl ciBvZiBxdWV1ZXMgYmFzZWQgb24gc29tZQo+Pj4+IHBlcmNlbnRhZ2Ugb2YgdGhhdCB0b3RhbCBs b2NhbCBtZW1vcnkuIFNvLCBpZiBzb21lb25lIHdpbGwgaGF2ZSBvbmx5Cj4+Pj4gNTEyTSwgaGUg d2lsbCBiZSBhYmxlIHRvIG9wZW4gbGVzcyBxdWV1ZXMuCj4+Pj4KPj4+Pgo+Pj4+Pgo+Pj4+PiBJ IG5lZWQgdG8gZ28gbG9vayBpbnRvIHdoYXQgYWxsIHRoaXMgbXFkIGlzIGZvciwgd2hhdCBpdCBk b2VzIGFuZCB3aGF0IGl0IGlzCj4+Pj4+IGFib3V0LiBCdXQgcGlubmluZyBpcyByZWFsbHkgYmFk IGFuZCB0aGlzIGlzIGFuIGlzc3VlIHdpdGggdXNlcnNwYWNlIGNvbW1hbmQKPj4+Pj4gc2NoZWR1 bGluZyBhbiBpc3N1ZSB0aGF0IG9idmlvdXNseSBBTUQgZmFpbHMgdG8gdGFrZSBpbnRvIGFjY291 bnQgaW4gZGVzaWduCj4+Pj4+IHBoYXNlLgo+Pj4+IE1heWJlLCBidXQgdGhhdCBpcyB0aGUgSC9X IGRlc2lnbiBub24tdGhlLWxlc3MuIFdlIGNhbid0IHZlcnkgd2VsbAo+Pj4+IGNoYW5nZSB0aGUg SC9XLgo+Pj4KPj4+IFlvdSBjYW4gbm90IGNoYW5nZSB0aGUgaGFyZHdhcmUgYnV0IGl0IGlzIG5v dCBhbiBleGN1c2UgdG8gYWxsb3cgYmFkIGRlc2lnbiB0bwo+Pj4gc25lYWsgaW4gc29mdHdhcmUg dG8gd29yayBhcm91bmQgdGhhdC4gU28gaSB3b3VsZCByYXRoZXIgcGVuYWxpemUgYmFkIGhhcmR3 YXJlCj4+PiBkZXNpZ24gYW5kIGhhdmUgY29tbWFuZCBzdWJtaXNzaW9uIGluIHRoZSBrZXJuZWws IHVudGlsIEFNRCBmaXggaXRzIGhhcmR3YXJlIHRvCj4+PiBhbGxvdyBwcm9wZXIgc2NoZWR1bGlu ZyBieSB0aGUga2VybmVsIGFuZCBwcm9wZXIgY29udHJvbCBieSB0aGUga2VybmVsLiAKPj4gSSdt IHNvcnJ5IGJ1dCBJIGRvICpub3QqIHRoaW5rIHRoaXMgaXMgYSBiYWQgZGVzaWduLiBTL1cgc2No ZWR1bGluZyBpbgo+PiB0aGUga2VybmVsIGNhbiBub3QsIElNTywgc2NhbGUgd2VsbCB0byAxMDBL IHF1ZXVlcyBhbmQgMTBLIHByb2Nlc3Nlcy4KPiAKPiBJIGFtIG5vdCBhZHZvY2F0aW5nIGZvciBo YXZpbmcga2VybmVsIGRlY2lkZSBkb3duIHRvIHRoZSB2ZXJ5IGxhc3QgZGV0YWlscy4gSSBhbQo+ IGFkdm9jYXRpbmcgZm9yIGtlcm5lbCBiZWluZyBhYmxlIHRvIHByZWVtcHQgYXQgYW55IHRpbWUg YW5kIGJlIGFibGUgdG8gZGVjcmVhc2UKPiBvciBpbmNyZWFzZSB1c2VyIHF1ZXVlIHByaW9yaXR5 IHNvIG92ZXJhbGwga2VybmVsIGlzIGluIGNoYXJnZSBvZiByZXNvdXJjZXMKPiBtYW5hZ2VtZW50 IGFuZCBpdCBjYW4gaGFuZGxlIHJvZ3VlIGNsaWVudCBpbiBwcm9wZXIgZmFzaGlvbi4KPiAKPj4K Pj4+IEJlY2F1c2UgcmVhbGx5IHdoZXJlIHdlIHdhbnQgdG8gZ28gaXMgaGF2aW5nIEdQVSBjbG9z ZXIgdG8gYSBDUFUgaW4gdGVybSBvZiBzY2hlZHVsaW5nCj4+PiBjYXBhY2l0eSBhbmQgb25jZSB3 ZSBnZXQgdGhlcmUgd2Ugd2FudCB0aGUga2VybmVsIHRvIGFsd2F5cyBiZSBhYmxlIHRvIHRha2Ug b3Zlcgo+Pj4gYW5kIGRvIHdoYXRldmVyIGl0IHdhbnRzIGJlaGluZCBwcm9jZXNzIGJhY2suCj4+ IFdobyBkbyB5b3UgcmVmZXIgdG8gd2hlbiB5b3Ugc2F5ICJ3ZSIgPyBBRkFJSywgdGhlIGh3IHNj aGVkdWxpbmcKPj4gZGlyZWN0aW9uIGlzIHdoZXJlIEFNRCBpcyBub3cgYW5kIHdoZXJlIGl0IGlz IGhlYWRpbmcgaW4gdGhlIGZ1dHVyZS4KPj4gVGhhdCBkb2Vzbid0IHByZWNsdWRlIHRoZSBvcHRp b24gdG8gYWxsb3cgdGhlIGtlcm5lbCB0byB0YWtlIG92ZXIgYW5kIGRvCj4+IHdoYXQgaGUgd2Fu dHMuIEkgYWdyZWUgdGhhdCBpbiBLViB3ZSBoYXZlIGEgcHJvYmxlbSB3aGVyZSB3ZSBjYW4ndCBk byBhCj4+IG1pZC13YXZlIHByZWVtcHRpb24sIHNvIHRoZW9yZXRpY2FsbHksIGEgbG9uZyBydW5u aW5nIGNvbXB1dGUga2VybmVsIGNhbgo+PiBtYWtlIHRoaW5ncyBtZXNzeSwgYnV0IGluIENhcnJp em8sIHdlIHdpbGwgaGF2ZSB0aGlzIGFiaWxpdHkuIEhhdmluZwo+PiBzYWlkIHRoYXQsIGl0IHdp bGwgb25seSBiZSB0aHJvdWdoIHRoZSBDUCBIL1cgc2NoZWR1bGluZy4gU28gQU1EIGlzCj4+IF9u b3RfIGdvaW5nIHRvIGFiYW5kb24gSC9XIHNjaGVkdWxpbmcuIFlvdSBjYW4gZGlzbGlrZSBpdCwg YnV0IHRoaXMgaXMKPj4gdGhlIHNpdHVhdGlvbi4KPiAKPiBXZSB3YXMgZm9yIHRoZSBvdmVyYWxs IExpbnV4IGNvbW11bml0eSBidXQgbWF5YmUgaSBzaG91bGQgbm90IHByZXRlbmQgdG8gdGFsawo+ IGZvciBhbnlvbmUgaW50ZXJlc3RlZCBpbiBoYXZpbmcgYSBjb21tb24gc3RhbmRhcmQuCj4gCj4g TXkgcG9pbnQgaXMgdGhhdCBjdXJyZW50IGhhcmR3YXJlIGRvIG5vdCBoYXZlIGFwcHJvcmlhdGUg aGFyZHdhcmUgc3VwcG9ydCBmb3IKPiBwcmVlbXB0aW9uIGhlbmNlLCBjdXJyZW50IGhhcmR3YXJl IHNob3VsZCB1c2UgaW9jdGwgdG8gc2NoZWR1bGUgam9iIGFuZCBBTUQKPiBzaG91bGQgdGhpbmsg YSBiaXQgbW9yZSBvbiBjb21taXRpbmcgdG8gYSBkZXNpZ24gYW5kIGhhbmR3YXZpbmcgYW55IGhh cmR3YXJlCj4gc2hvcnQgY29taW5nIGFzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSB3b3JrIGFyb3Vu ZCBpbiB0aGUgc29mdHdhcmUuIFRoZSBwaW5uaW5nCj4gdGhpbmcgaXMgYnJva2VuIGJ5IGRlc2ln biwgb25seSB3YXkgdG8gd29yayBhcm91bmQgaXQgaXMgdGhyb3VnaCBrZXJuZWwgY21kCj4gcXVl dWUgc2NoZWR1bGluZyB0aGF0J3MgYSBmYWN0LgoKPiAKPiBPbmNlIGhhcmR3YXJlIHN1cHBvcnQg cHJvcGVyIHByZWVtcHRpb24gYW5kIGFsbG93cyB0byBtb3ZlIGFyb3VuZC9ldmljdCBidWZmZXIK PiB1c2Ugb24gYmVoYWxmIG9mIHVzZXJzcGFjZSBjb21tYW5kIHF1ZXVlIHRoZW4gd2UgY2FuIGFs bG93IHVzZXJzcGFjZSBzY2hlZHVsaW5nCj4gYnV0IHVudGlsIHRoZW4gbXkgcGVyc29ubmFsIG9w aW5pb24gaXMgdGhhdCBpdCBzaG91bGQgbm90IGJlIGFsbG93ZWQgYW5kIHRoYXQKPiBwZW9wbGUg d2lsbCBoYXZlIHRvIHBheSB0aGUgaW9jdGwgcHJpY2Ugd2hpY2ggaSBwcm92ZWQgdG8gYmUgc21h bGwsIGJlY2F1c2UKPiByZWFsbHkgaWYgeW91IDEwMEsgcXVldWUgZWFjaCB3aXRoIG9uZSBqb2Is IGkgd291bGQgbm90IGV4cGVjdCB0aGF0IGFsbCB0aG9zZQo+IDEwMEsgam9iIHdpbGwgY29tcGxl dGUgaW4gbGVzcyB0aW1lIHRoYW4gaXQgdGFrZXMgdG8gZXhlY3V0ZSBhbiBpb2N0bCBpZSBieQo+ IGV2ZW4gaWYgeW91IGRvIG5vdCBoYXZlIHRoZSBpb2N0bCBkZWxheSB3aGF0IGV2ZXIgeW91IHNj aGVkdWxlIHdpbGwgaGF2ZSB0bwo+IHdhaXQgb24gcHJldmlvdXNseSBzdWJtaXRlZCBqb2JzLgoK QnV0IEplcm9tZSwgdGhlIGNvcmUgcHJvYmxlbSBzdGlsbCByZW1haW5zIGluIGVmZmVjdCwgZXZl biB3aXRoIHlvdXIKc3VnZ2VzdGlvbi4gSWYgYW4gYXBwbGljYXRpb24sIGVpdGhlciB2aWEgdXNl cnNwYWNlIHF1ZXVlIG9yIHZpYSBpb2N0bCwKc3VibWl0cyBhIGxvbmctcnVubmluZyBrZXJuZWws IHRoYW4gdGhlIENQVSBpbiBnZW5lcmFsIGNhbid0IHN0b3AgdGhlCkdQVSBmcm9tIHJ1bm5pbmcg aXQuIEFuZCBpZiB0aGF0IGtlcm5lbCBkb2VzIHdoaWxlKDEpOyB0aGFuIHRoYXQncyBpdCwKZ2Ft ZSdzIG92ZXIsIGFuZCBubyBtYXR0ZXIgaG93IHlvdSBzdWJtaXR0ZWQgdGhlIHdvcmsuIFNvIEkg ZG9uJ3QgcmVhbGx5CnNlZSB0aGUgYmlnIGFkdmFudGFnZSBpbiB5b3VyIHByb3Bvc2FsLiBPbmx5 IGluIENaIHdlIGNhbiBzdG9wIHRoaXMgd2F2ZQooYnkgQ1AgSC9XIHNjaGVkdWxpbmcgb25seSku IFdoYXQgYXJlIHlvdSBzYXlpbmcgaXMgYmFzaWNhbGx5IEkgd29uJ3QKYWxsb3cgcGVvcGxlIHRv IHVzZSBjb21wdXRlIG9uIExpbnV4IEtWIHN5c3RlbSBiZWNhdXNlIGl0IF9tYXlfIGdldCB0aGUK c3lzdGVtIHN0dWNrLgoKU28gZXZlbiBpZiBJIHJlYWxseSB3YW50ZWQgdG8sIGFuZCBJIG1heSBh Z3JlZSB3aXRoIHlvdSB0aGVvcmV0aWNhbGx5IG9uCnRoYXQsIEkgY2FuJ3QgZnVsZmlsbCB5b3Vy IGRlc2lyZSB0byBtYWtlIHRoZSAia2VybmVsIGJlaW5nIGFibGUgdG8KcHJlZW1wdCBhdCBhbnkg dGltZSBhbmQgYmUgYWJsZSB0byBkZWNyZWFzZSBvciBpbmNyZWFzZSB1c2VyIHF1ZXVlCnByaW9y aXR5IHNvIG92ZXJhbGwga2VybmVsIGlzIGluIGNoYXJnZSBvZiByZXNvdXJjZXMgbWFuYWdlbWVu dCBhbmQgaXQKY2FuIGhhbmRsZSByb2d1ZSBjbGllbnQgaW4gcHJvcGVyIGZhc2hpb24iLiBOb3Qg aW4gS1YsIGFuZCBJIGd1ZXNzIG5vdAppbiBDWiBhcyB3ZWxsLgoKCU9kZWQKCj4gCj4+Pgo+Pj4+ Pj4+Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGFkZCBhIGRyaXZl cnMvZ3B1L2RybS9hbWQgZGlyZWN0b3J5IGFuZCBhZGQgY29tbW9uCj4+Pj4+Pj4+PiBzdHVmZiB0 aGVyZS4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiBHaXZlbiB0aGF0IHRoaXMgaXMgbm90IGludGVuZGVk IHRvIGJlIGZpbmFsIEhTQSBhcGkgQUZBSUNUIHRoZW4gaSB3b3VsZAo+Pj4+Pj4+Pj4gc2F5IHRo aXMgZmFyIGJldHRlciB0byBhdm9pZCB0aGUgd2hvbGUga2ZkIG1vZHVsZSBhbmQgYWRkIGlvY3Rs IHRvIHJhZGVvbi4KPj4+Pj4+Pj4+IFRoaXMgd291bGQgYXZvaWQgY3JhenkgY29tbXVuaWNhdGlv biBidHcgcmFkZW9uIGFuZCBrZmQuCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gVGhlIHdob2xlIGFwZXJ0 dXJlIGJ1c2luZXNzIG5lZWRzIHNvbWUgc2VyaW91cyBleHBsYW5hdGlvbi4gRXNwZWNpYWx5IGFz Cj4+Pj4+Pj4+PiB5b3Ugd2FudCB0byB1c2UgdXNlcnNwYWNlIGFkZHJlc3MgdGhlcmUgaXMgbm90 aGluZyB0byBwcmV2ZW50IHVzZXJzcGFjZQo+Pj4+Pj4+Pj4gcHJvZ3JhbSBmcm9tIGFsbG9jYXRp bmcgdGhpbmdzIGF0IGFkZHJlc3MgeW91IHJlc2VydmUgZm9yIGxkcywgc2NyYXRjaCwKPj4+Pj4+ Pj4+IC4uLiBvbmx5IHNhbmUgd2F5IHdvdWxkIGJlIHRvIG1vdmUgdGhvc2UgbGRzLCBzY3JhdGNo IGluc2lkZSB0aGUgdmlydHVhbAo+Pj4+Pj4+Pj4gYWRkcmVzcyByZXNlcnZlZCBmb3Iga2VybmVs IChzZWUga2VybmVsIG1lbW9yeSBtYXApLgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IFRoZSB3aG9sZSBi dXNpbmVzcyBvZiBsb2NraW5nIHBlcmZvcm1hbmNlIGNvdW50ZXIgZm9yIGV4Y2x1c2l2ZSBwZXIg cHJvY2Vzcwo+Pj4+Pj4+Pj4gYWNjZXNzIGlzIGEgYmlnIE5PLiBXaGljaCBsZWFkcyBtZSB0byB0 aGUgcXVlc3Rpb25hYmxlIHVzZWZ1bGxuZXNzIG9mIHVzZXIKPj4+Pj4+Pj4+IHNwYWNlIGNvbW1h bmQgcmluZy4KPj4+Pj4+Pj4gVGhhdCdzIGxpa2Ugc2F5aW5nOiAiV2hpY2ggbGVhZHMgbWUgdG8g dGhlIHF1ZXN0aW9uYWJsZSB1c2VmdWxuZXNzIG9mIEhTQSIuIEkKPj4+Pj4+Pj4gZmluZCBpdCBh bmFsb2dvdXMgdG8gYSBzaXR1YXRpb24gd2hlcmUgYSBuZXR3b3JrIG1haW50YWluZXIgbmFja2lu ZyBhIGRyaXZlcgo+Pj4+Pj4+PiBmb3IgYSBuZXR3b3JrIGNhcmQsIHdoaWNoIGlzIHNsb3dlciB0 aGFuIGEgZGlmZmVyZW50IG5ldHdvcmsgY2FyZC4gRG9lc24ndAo+Pj4+Pj4+PiBzZWVtIHJlYXNv bmFibGUgdGhpcyBzaXR1YXRpb24gaXMgd291bGQgaGFwcGVuLiBIZSB3b3VsZCBzdGlsbCBwdXQg Ym90aCB0aGUKPj4+Pj4+Pj4gZHJpdmVycyBpbiB0aGUga2VybmVsIGJlY2F1c2UgcGVvcGxlIHdh bnQgdG8gdXNlIHRoZSBIL1cgYW5kIGl0cyBmZWF0dXJlcy4gU28sCj4+Pj4+Pj4+IEkgZG9uJ3Qg dGhpbmsgdGhpcyBpcyBhIHZhbGlkIHJlYXNvbiB0byBOQUNLIHRoZSBkcml2ZXIuCj4+Pj4+Cj4+ Pj4+IExldCBtZSByZXBocmFzZSwgZHJvcCB0aGUgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgaW9j dGwgYW5kIG1vZHVsbyBtZW1vcnkgcGlubmluZwo+Pj4+PiBpIHNlZSBubyBvYmplY3Rpb24uIElu IG90aGVyIHdvcmQsIGkgYW0gbm90IE5BQ0tJTkcgd2hvbGUgcGF0Y2hzZXQgaSBhbSBOQUNLSU5H Cj4+Pj4+IHRoZSBwZXJmb3JtYW5jZSBpb2N0bC4KPj4+Pj4KPj4+Pj4gQWdhaW4gdGhpcyBpcyBh bm90aGVyIGFyZ3VtZW50IGZvciByb3VuZCB0cmlwIHRvIHRoZSBrZXJuZWwuIEFzIGluc2lkZSBr ZXJuZWwgeW91Cj4+Pj4+IGNvdWxkIHByb3Blcmx5IGRvIGV4Y2x1c2l2ZSBncHUgY291bnRlciBh Y2Nlc3MgYWNjcm9zcyBzaW5nbGUgdXNlciBjbWQgYnVmZmVyCj4+Pj4+IGV4ZWN1dGlvbi4KPj4+ Pj4KPj4+Pj4+Pj4KPj4+Pj4+Pj4+IEkgb25seSBzZWUgaXNzdWVzIHdpdGggdGhhdC4gRmlyc3Qg YW5kIGZvcmVtb3N0IGkgd291bGQKPj4+Pj4+Pj4+IG5lZWQgdG8gc2VlIHNvbGlkIGZpZ3VyZXMg dGhhdCBrZXJuZWwgaW9jdGwgb3Igc3lzY2FsbCBoYXMgYSBoaWdoZXIgYW4KPj4+Pj4+Pj4+IG92 ZXJoZWFkIHRoYXQgaXMgbWVhc3VyYWJsZSBpbiBhbnkgbWVhbmluZyBmdWxsIHdheSBhZ2FpbnN0 IGEgc2ltcGxlCj4+Pj4+Pj4+PiBmdW5jdGlvbiBjYWxsLiBJIGtub3cgdGhlIHVzZXJzcGFjZSBj b21tYW5kIHJpbmcgaXMgYSBiaWcgbWFya2V0aW5nIGZlYXR1cmVzCj4+Pj4+Pj4+PiB0aGF0IHBs ZWFzZSBpZ25vcmFudCB1c2Vyc3BhY2UgcHJvZ3JhbW1lci4gQnV0IHJlYWxseSB0aGlzIG9ubHkg YnJpbmdzIGlzc3Vlcwo+Pj4+Pj4+Pj4gYW5kIGZvciBhYnNvbHV0ZWx5IG5vdCB1cHNpZGUgYWZh aWN0Lgo+Pj4+Pj4+PiBSZWFsbHkgPyBZb3UgdGhpbmsgdGhhdCBkb2luZyBhIGNvbnRleHQgc3dp dGNoIHRvIGtlcm5lbCBzcGFjZSwgd2l0aCBhbGwgaXRzCj4+Pj4+Pj4+IG92ZXJoZWFkLCBpcyBf bm90XyBtb3JlIGV4cGFuc2l2ZSB0aGFuIGp1c3QgY2FsbGluZyBhIGZ1bmN0aW9uIGluIHVzZXJz cGFjZQo+Pj4+Pj4+PiB3aGljaCBvbmx5IHB1dHMgYSBidWZmZXIgb24gYSByaW5nIGFuZCB3cml0 ZXMgYSBkb29yYmVsbCA/Cj4+Pj4+Cj4+Pj4+IEkgYW0gc2F5aW5nIHRoZSBvdmVyaGVhZCBpcyBu b3QgdGhhdCBiaWcgYW5kIGl0IHByb2JhYmx5IHdpbGwgbm90IG1hdHRlciBpbiBtb3N0Cj4+Pj4+ IHVzZWNhc2UuIEZvciBpbnN0YW5jZSBpIGRpZCB3cm90ZSB0aGUgbW9zdCB1c2VsZXNzIGtlcm5l bCBtb2R1bGUgdGhhdCBhZGQgdHdvCj4+Pj4+IG51bWJlciB0aHJvdWdoIGFuIGlvY3RsIChodHRw Oi8vcGVvcGxlLmZyZWVkZXNrdG9wLm9yZy9+Z2xpc3NlL2FkZGVyLnRhcikgYW5kCj4+Pj4+IGl0 IHRha2VzIH4wLjM1bWljcm9zZWNvbmRzIHdpdGggaW9jdGwgd2hpbGUgZnVuY3Rpb24gaXMgfjAu MDI1bWljcm9zZWNvbmRzIHNvCj4+Pj4+IGlvY3RsIGlzIDEzIHRpbWVzIHNsb3dlci4KPj4+Pj4K Pj4+Pj4gTm93IGlmIHRoZXJlIGlzIGVub3VnaCBkYXRhIHRoYXQgc2hvd3MgdGhhdCBhIHNpZ25p ZmljYW50IHBlcmNlbnRhZ2Ugb2Ygam9icwo+Pj4+PiBzdWJtaXRlZCB0byB0aGUgR1BVIHdpbGwg dGFrZSBsZXNzIHRoYXQgMC4zNW1pY3Jvc2Vjb25kIHRoZW4geWVzIHVzZXJzcGFjZQo+Pj4+PiBz Y2hlZHVsaW5nIGRvZXMgbWFrZSBzZW5zZS4gQnV0IHNvIGZhciBhbGwgd2UgaGF2ZSBpcyBoYW5k d2F2aW5nIHdpdGggbm8gZGF0YQo+Pj4+PiB0byBzdXBwb3J0IGFueSBmYWN0cy4KPj4+Pj4KPj4+ Pj4KPj4+Pj4gTm93IGlmIHdlIHdhbnQgdG8gc2NoZWR1bGUgZnJvbSB1c2Vyc3BhY2UgdGhhbiB5 b3Ugd2lsbCBuZWVkIHRvIGRvIHNvbWV0aGluZwo+Pj4+PiBhYm91dCB0aGUgcGlubmluZywgc29t ZXRoaW5nIHRoYXQgZ2l2ZXMgY29udHJvbCB0byBrZXJuZWwgc28gdGhhdCBrZXJuZWwgY2FuCj4+ Pj4+IHVucGluIHdoZW4gaXQgd2FudHMgYW5kIG1vdmUgb2JqZWN0IHdoZW4gaXQgd2FudHMgbm8g bWF0dGVyIHdoYXQgdXNlcnNwYWNlIGlzCj4+Pj4+IGRvaW5nLgo+Pj4+Pgo+Pj4+Pj4+Pj4KPiAK PiAtLQo+IFRvIHVuc3Vic2NyaWJlLCBzZW5kIGEgbWVzc2FnZSB3aXRoICd1bnN1YnNjcmliZSBs aW51eC1tbScgaW4KPiB0aGUgYm9keSB0byBtYWpvcmRvbW9Aa3ZhY2sub3JnLiAgRm9yIG1vcmUg aW5mbyBvbiBMaW51eCBNTSwKPiBzZWU6IGh0dHA6Ly93d3cubGludXgtbW0ub3JnLyAuCj4gRG9u J3QgZW1haWw6IDxhIGhyZWY9bWFpbHRvOiJkb250QGt2YWNrLm9yZyI+IGVtYWlsQGt2YWNrLm9y ZyA8L2E+Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=