From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RfC PATCH] Add udmabuf misc device Date: Mon, 16 Apr 2018 09:43:03 +0200 Message-ID: <20180416074302.GG31310@phenom.ffwll.local> References: <20180406090747.gwiegu22z4noj23i@sirius.home.kraxel.org> <9a085854-3758-1500-9971-806c611cb54f@gmail.com> <20180406115730.jtwcbz5okrphlxli@sirius.home.kraxel.org> <7ef89a29-6584-d23c-efd1-f30d9b767a24@gmail.com> <20180406185746.GA4983@downor-Z87X-UD5H> <20180410172605.GA26472@downor-Z87X-UD5H> <20180413153708.GW31310@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x232.google.com (mail-wr0-x232.google.com [IPv6:2a00:1450:400c:c0c::232]) by gabe.freedesktop.org (Postfix) with ESMTPS id 31F136E2C0 for ; Mon, 16 Apr 2018 07:43:08 +0000 (UTC) Received: by mail-wr0-x232.google.com with SMTP id d19so23057294wre.1 for ; Mon, 16 Apr 2018 00:43:08 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Oleksandr Andrushchenko Cc: Dongwon Kim , Tomeu Vizoso , "Oleksandr_Andrushchenko@epam.com" , David Airlie , Daniel Vetter , qemu-devel@nongnu.org, dri-devel , open list , "moderated list:DMA BUFFER SHARING FRAMEWORK" , Gerd Hoffmann , "open list:DMA BUFFER SHARING FRAMEWORK" List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBBcHIgMTYsIDIwMTggYXQgMTA6MTY6MzFBTSArMDMwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gT24gMDQvMTMvMjAxOCAwNjozNyBQTSwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiA+IE9uIFdlZCwgQXByIDExLCAyMDE4IGF0IDA4OjU5OjMyQU0gKzAzMDAsIE9sZWtz YW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+ID4gPiBPbiAwNC8xMC8yMDE4IDA4OjI2IFBNLCBE b25nd29uIEtpbSB3cm90ZToKPiA+ID4gPiBPbiBUdWUsIEFwciAxMCwgMjAxOCBhdCAwOTozNzo1 M0FNICswMzAwLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToKPiA+ID4gPiA+IE9uIDA0 LzA2LzIwMTggMDk6NTcgUE0sIERvbmd3b24gS2ltIHdyb3RlOgo+ID4gPiA+ID4gPiBPbiBGcmks IEFwciAwNiwgMjAxOCBhdCAwMzozNjowM1BNICswMzAwLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5r byB3cm90ZToKPiA+ID4gPiA+ID4gPiBPbiAwNC8wNi8yMDE4IDAyOjU3IFBNLCBHZXJkIEhvZmZt YW5uIHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gICAgIEhpLAo+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ ID4gPiA+ID4gPiA+ID4gSSBmYWlsIHRvIHNlZSBhbnkgY29tbW9uIGdyb3VuZCBmb3IgeGVuLXpj b3B5IGFuZCB1ZG1hYnVmIC4uLgo+ID4gPiA+ID4gPiA+ID4gPiBEb2VzIHRoZSBhYm92ZSBtZWFu IHlvdSBjYW4gYXNzdW1lIHRoYXQgeGVuLXpjb3B5IGFuZCB1ZG1hYnVmCj4gPiA+ID4gPiA+ID4g PiA+IGNhbiBjby1leGlzdCBhcyB0d28gZGlmZmVyZW50IHNvbHV0aW9ucz8KPiA+ID4gPiA+ID4g PiA+IFdlbGwsIHVkbWFidWYgcm91dGUgaXNuJ3QgZnVsbHkgY2xlYXIgeWV0LCBidXQgeWVzLgo+ ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBTZWUgYWxzbyBndnQgKGludGVsIHZncHUp LCB3aGVyZSB0aGUgaHlwZXJ2aXNvciBpbnRlcmZhY2UgaXMgYWJzdHJhY3RlZAo+ID4gPiA+ID4g PiA+ID4gYXdheSBpbnRvIGEgc2VwYXJhdGUga2VybmVsIG1vZHVsZXMgZXZlbiB0aG91Z2ggbW9z dCBvZiB0aGUgYWN0dWFsIHZncHUKPiA+ID4gPiA+ID4gPiA+IGVtdWxhdGlvbiBjb2RlIGlzIGNv bW1vbi4KPiA+ID4gPiA+ID4gPiBUaGFuayB5b3UgZm9yIHlvdXIgaW5wdXQsIEknbSBqdXN0IHRy eWluZyB0byBmaWd1cmUgb3V0Cj4gPiA+ID4gPiA+ID4gd2hpY2ggb2YgdGhlIHRocmVlIHotY29w eSBzb2x1dGlvbnMgaW50ZXJzZWN0IGFuZCBob3cgbXVjaAo+ID4gPiA+ID4gPiA+ID4gPiBBbmQg d2hhdCBhYm91dCBoeXBlci1kbWFidWY/Cj4gPiA+ID4gPiA+IHhlbiB6LWNvcHkgc29sdXRpb24g aXMgcHJldHR5IHNpbWlsYXIgZnVuZGFtZW50YWxseSB0byBoeXBlcl9kbWFidWYKPiA+ID4gPiA+ ID4gaW4gdGVybXMgb2YgdGhlc2UgY29yZSBzaGFyaW5nIGZlYXR1cmU6Cj4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiAxLiB0aGUgc2hhcmluZyBwcm9jZXNzIC0gaW1wb3J0IHByaW1lL2RtYWJ1ZiBm cm9tIHRoZSBwcm9kdWNlciAtPiBleHRyYWN0Cj4gPiA+ID4gPiA+IHVuZGVybHlpbmcgcGFnZXMg YW5kIGdldCB0aG9zZSBzaGFyZWQgLT4gcmV0dXJuIHJlZmVyZW5jZXMgZm9yIHNoYXJlZCBwYWdl cwo+ID4gPiA+IEFub3RoZXIgdGhpbmcgaXMgZGFudmV0IHdhcyBraW5kIG9mIGFnYWluc3QgdG8g dGhlIGlkZWEgb2YgaW1wb3J0aW5nIGV4aXN0aW5nCj4gPiA+ID4gZG1hYnVmL3ByaW1lIGJ1ZmZl ciBhbmQgZm9yd2FyZCBpdCB0byB0aGUgb3RoZXIgZG9tYWluIGR1ZSB0byBzeW5jaHJvbml6YXRp b24KPiA+ID4gPiBpc3N1ZXMuIEhlIHByb3Bvc2VkIHRvIG1ha2UgaHlwZXJfZG1hYnVmIG9ubHkg d29yayBhcyBhbiBleHBvcnRlciBzbyB0aGF0IGl0Cj4gPiA+ID4gY2FuIGhhdmUgYSBmdWxsIGNv bnRyb2wgb3ZlciB0aGUgYnVmZmVyLiBJIHRoaW5rIHdlIG5lZWQgdG8gdGFsayBhYm91dCB0aGlz Cj4gPiA+ID4gZnVydGhlciBhcyB3ZWxsLgo+ID4gPiBZZXMsIEkgc2F3IHRoaXMuIEJ1dCB0aGlz IGxpbWl0cyB0aGUgdXNlLWNhc2VzIHNvIG11Y2guCj4gPiA+IEZvciBpbnN0YW5jZSwgcnVubmlu ZyBBbmRyb2lkIGFzIGEgR3Vlc3QgKHdoaWNoIHVzZXMgSU9OIHRvIGFsbG9jYXRlCj4gPiA+IGJ1 ZmZlcnMpIG1lYW5zIHRoYXQgZmluYWxseSBIVyBjb21wb3NlciB3aWxsIGltcG9ydCBkbWEtYnVm IGludG8KPiA+ID4gdGhlIERSTSBkcml2ZXIuIFRoZW4sIGluIGNhc2Ugb2YgeGVuLWZyb250IGZv ciBleGFtcGxlLCBpdCBuZWVkcyB0byBiZQo+ID4gPiBzaGFyZWQgd2l0aCB0aGUgYmFja2VuZCAo SG9zdCBzaWRlKS4gT2YgY291cnNlLCB3ZSBjYW4gY2hhbmdlIHVzZXItc3BhY2UKPiA+ID4gdG8g bWFrZSB4ZW4tZnJvbnQgYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgKG1ha2UgaXQgZXhwb3J0ZXIpLCBi dXQgd2hhdCB3ZSB0cnkKPiA+ID4gdG8gYXZvaWQgaXMgdG8gY2hhbmdlIHVzZXItc3BhY2Ugd2hp Y2ggaW4gbm9ybWFsIHdvcmxkIHdvdWxkIGhhdmUgcmVtYWluCj4gPiA+IHVuY2hhbmdlZCBvdGhl cndpc2UuCj4gPiA+IFNvLCBJIGRvIHRoaW5rIHdlIGhhdmUgdG8gc3VwcG9ydCB0aGlzIHVzZS1j YXNlIGFuZCBqdXN0IGhhdmUgdG8gdW5kZXJzdGFuZAo+ID4gPiB0aGUgY29tcGxleGl0eS4KPiA+ IEVybSwgd2h5IGRvIHlvdSBuZWVkIGltcG9ydGVyIGNhcGFiaWxpdHkgZm9yIHRoaXMgdXNlLWNh c2U/Cj4gPiAKPiA+IGd1ZXN0MSAtPiBJT04gLT4geGVuLWZyb250IC0+IGh5cGVydmlzb3IgLT4g Z3Vlc3QgMiAtPiB4ZW4temNvcHkgZXhwb3Nlcwo+ID4gdGhhdCBkbWEtYnVmIC0+IGltcG9ydCB0 byB0aGUgcmVhbCBkaXNwbGF5IGh3Cj4gPiAKPiA+IE5vIHdoZXJlIGluIHRoaXMgY2hhaW4gZG8g eW91IG5lZWQgeGVuLXpjb3B5IHRvIGJlIGFibGUgdG8gaW1wb3J0IGEKPiA+IGRtYS1idWYgKHdp dGhpbiBsaW51eCwgaXQgbmVlZHMgdG8gaW1wb3J0IGEgYnVuY2ggb2YgcGFnZXMgZnJvbSB0aGUK PiA+IGh5cGVydmlzb3IpLgo+ID4gCj4gPiBOb3cgaWYgeW91ciBwbGFuIGlzIHRvIHVzZSB4ZW4t emNvcHkgaW4gdGhlIGd1ZXN0MSBpbnN0ZWFkIG9mIHhlbi1mcm9udCwKPiA+IHRoZW4geW91IGlu ZGVlZCBuZWVkIHRvIGltcG9ydC4KPiBUaGlzIGlzIHRoZSBleGFjdCB1c2UtY2FzZSBJIHdhcyBy ZWZlcnJpbmcgdG8gd2hpbGUgc2F5aW5nCj4gd2UgbmVlZCB0byBpbXBvcnQgb24gR3Vlc3QxIHNp ZGUuIElmIGh5cGVyLWRtYWJ1ZiBpcyBzbwo+IGdlbmVyaWMgdGhhdCB0aGVyZSBpcyBubyB4ZW4t ZnJvbnQgaW4gdGhlIHBpY3R1cmUsIHRoZW4KPiBpdCBuZWVkcyB0byBpbXBvcnQgYSBkbWEtYnVm LCBzbyBpdCBjYW4gYmUgZXhwb3J0ZWQgYXQgR3Vlc3QyIHNpZGUuCj4gPiAgIEJ1dCB0aGF0IGlt byBkb2Vzbid0IG1ha2Ugc2Vuc2U6Cj4gPiAtIHhlbi1mcm9udCBnaXZlcyB5b3UgY2xlYXJseSBk ZWZpbmVkIGZsaXAgZXZlbnRzIHlvdSBjYW4gZm9yd2FyZCB0byB0aGUKPiA+ICAgIGh5cGVydmlz b3IuIHhlbi16Y29weSB3b3VsZCBuZWVkIHRvIGFkZCB0aGF0IGFnYWluLgo+IHhlbi16Y29weSBp cyBhIGhlbHBlciBkcml2ZXIgd2hpY2ggZG9lc24ndCBoYW5kbGUgcGFnZSBmbGlwcwo+IGFuZCBp cyBub3QgYSBLTVMgZHJpdmVyIGFzIG9uZSBtaWdodCB0aGluayBvZjogdGhlIERSTSBVQVBJIGl0 IHVzZXMgaXMKPiBqdXN0IHRvIGV4cG9ydCBhIGRtYS1idWYgYXMgYSBQUklNRSBidWZmZXIsIGJ1 dCB0aGF0J3MgaXQuCj4gRmxpcHBpbmcgZXRjLiBpcyBkb25lIGJ5IHRoZSBiYWNrZW5kIFsxXSwg bm90IHhlbi16Y29weS4KPiA+ICAgU2FtZSBmb3IKPiA+ICAgIGh5cGVyZG1hYnVmIChhbmQgcmVh bGx5IHdlJ3JlIG5vdCBnb2luZyB0byBzaHVmZmxlIHN0cnVjdCBkbWFfZmVuY2Ugb3Zlcgo+ID4g ICAgdGhlIHdpcmUgaW4gYSBnZW5lcmljIGZhc2hpb24gYmV0d2VlbiBoeXBlcnZpc29yIGd1ZXN0 cykuCj4gPiAKPiA+IC0geGVuLWZyb250IGFscmVhZHkgaGFzIHRoZSBpZGVhIG9mIHBpeGVsIGZv cm1hdCBmb3IgdGhlIGJ1ZmZlciAoYW5kIGFueQo+ID4gICAgb3RoZXIgbWV0YWRhdGEpLiBBZ2Fp biwgeGVuLXpjb3B5IGFuZCBoeXBlcmRtYWJ1ZiBsYWNrIHRoYXQsIHdvdWxkIG5lZWQKPiA+ICAg IHRvIGFkZCBpdCBzaG9laG9ybmVkIGluIHNvbWVob3cuCj4gQWdhaW4sIGhlcmUgeW91IGFyZSB0 YWxraW5nIG9mIHNvbWV0aGluZyB3aGljaCBpcyBpbXBsZW1lbnRlZCBpbgo+IFhlbiBkaXNwbGF5 IGJhY2tlbmQsIG5vdCB4ZW4temNvcHksIGUuZy4gZGlzcGxheSBiYWNrZW5kIGNhbgo+IGltcGxl bWVudCBwYXJhLXZpcnR1YWwgZGlzcGxheSB3L28geGVuLXpjb3B5IGF0IGFsbCwgYnV0IGluIHRo aXMgY2FzZQo+IHRoZXJlIGlzIGEgbWVtb3J5IGNvcHlpbmcgZm9yIGVhY2ggZnJhbWUuIFdpdGgg dGhlIGhlbHAgb2YgeGVuLXpjb3B5Cj4gdGhlIGJhY2tlbmQgZmVlZHMgeGVuLWZyb250J3MgYnVm ZmVycyBkaXJlY3RseSBpbnRvIEd1ZXN0MiBEUk0vS01TIG9yCj4gV2VzdG9uIG9yIHdoYXRldmVy IGFzIHhlbi16Y29weSBleHBvcnRzIHJlbW90ZSBidWZmZXJzIGFzIFBSSU1FIGJ1ZmZlcnMsCj4g dGh1cyBubyBidWZmZXIgY29weWluZyBpcyByZXF1aXJlZC4KCldoeSBkbyB5b3UgbmVlZCB0byBj b3B5IG9uIGV2ZXJ5IGZyYW1lIGZvciB4ZW4tZnJvbnQ/IEluIHRoZSBhYm92ZQpwaXBlbGluZSwg dXNpbmcgeGVuLWZyb250IEkgc2VlIDAgYXJjaGl0ZWN0dXJhbCByZWFzb25zIHRvIGhhdmUgYSBj b3B5CmFueXdoZXJlLgoKVGhpcyBzZWVtcyB0byBiZSB0aGUgY29yZSBvZiB0aGUgY29uZnVzaW9u IHdlJ3JlIGhhdmluZyBoZXJlLgoKPiA+IE9mYyB5b3Ugd29uJ3QgYmUgYWJsZSB0byBzaG92ZWwg c291bmQgb3IgbWVkaWEgc3RyZWFtIGRhdGEgb3ZlciB0byBhbm90aGVyCj4gPiBndWVzdCBsaWtl IHRoaXMsIGJ1dCB0aGF0J3Mgd2hhdCB5b3UgaGF2ZSB4ZW4tdjRsIGFuZCB4ZW4tc291bmQgb3IK PiA+IHdoYXRldmVyIGVsc2UgZm9yLiBUcnlpbmcgdG8gbWFrZSBhIG5ldyB1YXBpLCB3aGljaCBt ZWFucyB1c2Vyc3BhY2UgbXVzdAo+ID4gYmUgY2hhbmdlZCBmb3IgYWxsIHRoZSBkaWZmZXJlbnQg dXNlLWNhc2UsIGluc3RlYWQgb2YgcmV1c2luZyBzdGFuZGFyZAo+ID4gbGludXggZHJpdmVyIHVh cGkgKHdoaWNoIGp1c3QgaGFwcGVucyB0byBzZW5kIHRoZSBkYXRhIHRvIGFub3RoZXIKPiA+IGh5 cGVydmlzb3IgZ3Vlc3QgaW5zdGVhZCBvZiByZWFsIGh3KSBpbW8ganVzdCBkb2Vzbid0IG1ha2Ug bXVjaCBzZW5zZS4KPiA+IAo+ID4gQWxzbywgYXQgbGVhc3QgZm9yIHRoZSBncHUgc3Vic3lzdGVt OiBBbnkgbmV3IHVhcGkgbXVzdCBoYXZlIGZ1bGwKPiA+IHVzZXJzcGFjZSBhdmFpbGFibGUgZm9y IGl0LCBzZWU6Cj4gPiAKPiA+IGh0dHBzOi8vZHJpLmZyZWVkZXNrdG9wLm9yZy9kb2NzL2RybS9n cHUvZHJtLXVhcGkuaHRtbCNvcGVuLXNvdXJjZS11c2Vyc3BhY2UtcmVxdWlyZW1lbnRzCj4gPiAK PiA+IEFkZGluZyBtb3JlIHVhcGkgaXMgZGVmaW5pdGVseSB0aGUgbW9zdCBwYWluZnVsIHdheSB0 byBmaXggYSB1c2UtY2FzZS4KPiA+IFBlcnNvbmFsbHkgSSdkIGdvIGFzIGZhciBhbmQgYWxzbyBj aGFuZ2UgdGhlIHhlbi16Y29weSBzaWRlIG9uIHRoZQo+ID4gcmVjZWl2aW5nIGd1ZXN0IHRvIHVz ZSBzb21lIHN0YW5kYXJkIGxpbnV4IHVhcGkuIEUuZy4geW91IGNvdWxkIHdyaXRlIGFuCj4gPiBv dXRwdXQgdjRsIGRyaXZlciB0byByZWNlaXZlIHRoZSBmcmFtZXMgZnJvbSBndWVzdDEuCj4gU28s IHdlIG5vdyBrbm93IHRoYXQgeGVuLXpjb3B5IHdhcyBub3QgbWVhbnQgdG8gaGFuZGxlIHBhZ2Ug ZmxpcHMsCj4gYnV0IHRvIGltcGxlbWVudCBuZXcgVUFQSSB0byBsZXQgdXNlci1zcGFjZSBjcmVh dGUgYnVmZmVycyBlaXRoZXIKPiBmcm9tIEd1ZXN0MiBncmFudCByZWZlcmVuY2VzIChzbyBpdCBj YW4gYmUgZXhwb3J0ZWQgdG8gR3Vlc3QxKSBvcgo+IG90aGVyIHdheSByb3VuZCwgZS5nLiBjcmVh dGUgKGZyb20gR3Vlc3QxIGdyYW50IHJlZmVyZW5jZXMgdG8gZXhwb3J0IHRvCj4gR3Vlc3QgMiku IEZvciB0aGF0IHJlYXNvbiBpdCBhZGRzIDIgSU9DVExzOiBjcmVhdGUgYnVmZmVyIGZyb20gZ3Jl ZnMKPiBvciBwcm9kdWNlIGdyZWZzIGZvciB0aGUgYnVmZmVyIGdpdmVuLgo+IE9uZSBhZGRpdGlv bmFsIElPQ1RMIGlzIHRvIHdhaXQgZm9yIHRoZSBidWZmZXIgdG8gYmUgcmVsZWFzZWQgYnkKPiBH dWVzdDIgdXNlci1zcGFjZS4KPiBUaGF0IGJlaW5nIHNhaWQsIEkgZG9uJ3QgcXVpdGUgc2VlIGhv dyB2NGwgY2FuIGJlIHVzZWQgaGVyZSB0byBpbXBsZW1lbnQKPiBVQVBJIEkgbmVlZC4KClVuZGVy IHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IGNhbiBtYWtlIHhlbi1mcm9udCB0byB6ZXJvY29weSBm b3IgdGhlCmtlcm5lbC0+aHlwZXJ2aXNvciBwYXRoLCB2NGwgY291bGQgYmUgbWFkZSB0byB3b3Jr IGZvciB0aGUKaHlwZXJ2aXNvci0+a2VybmVsIHNpZGUgb2YgdGhlIHBpcGVsaW5lLgoKQnV0IGl0 IHNvdW5kcyBsaWtlIHdlIGhhdmUgYSBjb25mdXNpb24gYWxyZWFkeSBvbiB3aHkgb3Igd2h5IG5v dCB4ZW4tZnJvbnQKY2FuIG9yIGNhbm5vdCBkbyB6ZXJvY29weS4KCj4gPiA+ID4gZGFudmV0LCBj YW4geW91IGNvbW1lbnQgb24gdGhpcyB0b3BpYz8KPiA+ID4gPiAKPiA+ID4gPiA+ID4gMi4gdGhl IHBhZ2Ugc2hhcmluZyBtZWNoYW5pc20gLSBpdCB1c2VzIFhlbi1ncmFudC10YWJsZS4KPiA+ID4g PiA+ID4gCj4gPiA+ID4gPiA+IEFuZCB0byBnaXZlIHlvdSBhIHF1aWNrIHN1bW1hcnkgb2YgZGlm ZmVyZW5jZXMgYXMgZmFyIGFzIEkgdW5kZXJzdGFuZAo+ID4gPiA+ID4gPiBiZXR3ZWVuIHR3byBp bXBsZW1lbnRhdGlvbnMgKHBsZWFzZSBjb3JyZWN0IG1lIGlmIEkgYW0gd3JvbmcsIE9sZWtzYW5k ci4pCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAxLiB4ZW4temNvcHkgaXMgRFJNIHNwZWNpZmlj IC0gY2FuIGltcG9ydCBvbmx5IERSTSBwcmltZSBidWZmZXIKPiA+ID4gPiA+ID4gd2hpbGUgaHlw ZXJfZG1hYnVmIGNhbiBleHBvcnQgYW55IGRtYWJ1ZiByZWdhcmRsZXNzIG9mIG9yaWdpbmF0b3IK PiA+ID4gPiA+IFdlbGwsIHRoaXMgaXMgdHJ1ZS4gQW5kIGF0IHRoZSBzYW1lIHRpbWUgdGhpcyBp cyBqdXN0IGEgbWF0dGVyCj4gPiA+ID4gPiBvZiBleHRlbmRpbmcgdGhlIEFQSTogeGVuLXpjb3B5 IGlzIGEgaGVscGVyIGRyaXZlciBkZXNpZ25lZCBmb3IKPiA+ID4gPiA+IHhlbi1mcm9udC9iYWNr IHVzZS1jYXNlLCBzbyB0aGlzIGlzIHdoeSBpdCBvbmx5IGhhcyBEUk0gUFJJTUUgQVBJCj4gPiA+ ID4gPiA+IDIuIHhlbi16Y29weSBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBkbWEtYnVmIHN5bmNocm9u aXphdGlvbiBiZXR3ZWVuIHR3byBWTXMKPiA+ID4gPiA+ID4gd2hpbGUgKGFzIGRhbnZldCBjYWxs ZWQgaXQgYXMgcmVtb3RlIGRtYWJ1ZiBhcGkgc2hhcmluZykgaHlwZXJfZG1hYnVmIHNlbmRzCj4g PiA+ID4gPiA+IG91dCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSB0byB0aGUgZXhwb3J0aW5nIFZN IGZvciBzeW5jaHJvbml6YXRpb24uCj4gPiA+ID4gPiBUaGlzIGlzIHRydWUuIEFnYWluLCB0aGlz IGlzIGJlY2F1c2Ugb2YgdGhlIHVzZS1jYXNlcyBpdCBjb3ZlcnMuCj4gPiA+ID4gPiBCdXQgaGF2 aW5nIHN5bmNocm9uaXphdGlvbiBmb3IgYSBnZW5lcmljIHNvbHV0aW9uIHNlZW1zIHRvIGJlIGEg Z29vZCBpZGVhLgo+ID4gPiA+IFllYWgsIHVuZGVyc3Rvb2QgeGVuLXpjb3B5IHdvcmtzIG9rIHdp dGggeW91ciB1c2UgY2FzZS4gQnV0IEkgYW0ganVzdCBjdXJpb3VzCj4gPiA+ID4gaWYgaXQgaXMg b2sgbm90IHRvIGhhdmUgYW55IGludGVyLWRvbWFpbiBzeW5jaHJvbml6YXRpb24gaW4gdGhpcyBz aGFyaW5nIG1vZGVsLgo+ID4gPiBUaGUgc3luY2hyb25pemF0aW9uIGlzIGRvbmUgd2l0aCBkaXNw bGlmIHByb3RvY29sIFsxXQo+ID4gPiA+IFRoZSBidWZmZXIgYmVpbmcgc2hhcmVkIGlzIHRlY2hu aWNhbGx5IGRtYS1idWYgYW5kIG9yaWdpbmF0b3IgbmVlZHMgdG8gYmUgYWJsZQo+ID4gPiA+IHRv IGtlZXAgdHJhY2sgb2YgaXQuCj4gPiA+IEFzIEkgYW0gd29ya2luZyBpbiBEUk0gdGVybXMgdGhl IHRyYWNraW5nIGlzIGRvbmUgYnkgdGhlIERSTSBjb3JlCj4gPiA+IGZvciBtZSBmb3IgZnJlZS4g KFRoaXMgbWlnaHQgYmUgb25lIG9mIHRoZSByZWFzb25zIERhbmllbCBzZWVzIERSTQo+ID4gPiBi YXNlZCBpbXBsZW1lbnRhdGlvbiBmaXQgdmVyeSBnb29kIGZyb20gY29kZS1yZXVzZSBQT1YpLgo+ ID4gSG0sIG5vdCBzdXJlIHdoYXQgdHJhY2tpbmcgeW91IHJlZmVyIHRvIGhlcmUgYWxsIC4uLiBJ IGdvdCBsb3N0IGluIGFsbCB0aGUKPiA+IHJlcGxpZXMgd2hpbGUgY2F0Y2hpbmcgdXAuCj4gPiAK PiBJIHdhcyBqdXN0IHJlZmVycmluZyB0byBhY2NvdW50aW5nIHN0dWZmIGFscmVhZHkgaW1wbGVt ZW50ZWQgaW4gdGhlIERSTQo+IGNvcmUsCj4gc28gSSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0 IGRvaW5nIHRoZSBzYW1lIGZvciBidWZmZXJzIHRvIHVuZGVyc3RhbmQKPiB3aGVuIHRoZXkgYXJl IHJlbGVhc2VkIGV0Yy4KPiA+ID4gPiA+ID4gMy4gMS1sZXZlbCByZWZlcmVuY2VzIC0gd2hlbiB1 c2luZyBncmFudC10YWJsZSBmb3Igc2hhcmluZyBwYWdlcywgdGhlcmUgd2lsbAo+ID4gPiA+ID4g PiBiZSBzYW1lICMgb2YgcmVmcyAoZWFjaCA4IGJ5dGUpCj4gPiA+ID4gPiBUbyBiZSBwcmVjaXNl LCBncmFudCByZWYgaXMgNCBieXRlcwo+ID4gPiA+IFlvdSBhcmUgcmlnaHQuIFRoYW5rcyBmb3Ig Y29ycmVjdGlvbi47KQo+ID4gPiA+IAo+ID4gPiA+ID4gPiBhcyAjIG9mIHNoYXJlZCBwYWdlcywg d2hpY2ggaXMgcGFzc2VkIHRvCj4gPiA+ID4gPiA+IHRoZSB1c2Vyc3BhY2UgdG8gYmUgc2hhcmVk IHdpdGggaW1wb3J0aW5nIFZNIGluIGNhc2Ugb2YgeGVuLXpjb3B5Lgo+ID4gPiA+ID4gVGhlIHJl YXNvbiBmb3IgdGhhdCBpcyB0aGF0IHhlbi16Y29weSBpcyBhIGhlbHBlciBkcml2ZXIsIGUuZy4K PiA+ID4gPiA+IHRoZSBncmFudCByZWZlcmVuY2VzIGNvbWUgZnJvbSB0aGUgZGlzcGxheSBiYWNr ZW5kIFsxXSwgd2hpY2ggaW1wbGVtZW50cwo+ID4gPiA+ID4gWGVuIGRpc3BsYXkgcHJvdG9jb2wg WzJdLiBTbywgZWZmZWN0aXZlbHkgdGhlIGJhY2tlbmQgZXh0cmFjdHMgcmVmZXJlbmNlcwo+ID4g PiA+ID4gZnJvbSBmcm9udGVuZCdzIHJlcXVlc3RzIGFuZCBwYXNzZXMgdGhvc2UgdG8geGVuLXpj b3B5IGFzIGFuIGFycmF5Cj4gPiA+ID4gPiBvZiByZWZzLgo+ID4gPiA+ID4gPiAgICBDb21wYXJl ZAo+ID4gPiA+ID4gPiB0byB0aGlzLCBoeXBlcl9kbWFidWYgZG9lcyBtdWx0aXBsZSBsZXZlbCBh ZGRyZXNzaW5nIHRvIGdlbmVyYXRlIG9ubHkgb25lCj4gPiA+ID4gPiA+IHJlZmVyZW5jZSBpZCB0 aGF0IHJlcHJlc2VudHMgYWxsIHNoYXJlZCBwYWdlcy4KPiA+ID4gPiA+IEluIHRoZSBwcm90b2Nv bCBbMl0gb25seSBvbmUgcmVmZXJlbmNlIHRvIHRoZSBncmVmIGRpcmVjdG9yeSBpcyBwYXNzZWQK PiA+ID4gPiA+IGJldHdlZW4gVk1zCj4gPiA+ID4gPiAoYW5kIHRoZSBncmVmIGRpcmVjdG9yeSBp cyBhIHNpbmdsZS1saW5rZWQgbGlzdCBvZiBzaGFyZWQgcGFnZXMgY29udGFpbmluZwo+ID4gPiA+ ID4gYWxsCj4gPiA+ID4gPiBvZiB0aGUgZ3JlZnMgb2YgdGhlIGJ1ZmZlcikuCj4gPiA+ID4gb2ss IGdvb2QgdG8ga25vdy4gSSB3aWxsIGxvb2sgaW50byBpdHMgaW1wbGVtZW50YXRpb24gaW4gbW9y ZSBkZXRhaWxzIGJ1dCBpcwo+ID4gPiA+IHRoaXMgZ3JlZiBkaXJlY3RvcnkgKGNoYWluZWQgZ3Jl ZnMpIHNvbWV0aGluZyB0aGF0IGNhbiBiZSB1c2VkIGZvciBhbnkgZ2VuZXJhbAo+ID4gPiA+IG1l bW9yeSBzaGFyaW5nIHVzZSBjYXNlIG9yIGlzIGl0IGpzdXQgZm9yIHhlbi1kaXNwbGF5IChpbiBj dXJyZW50IGNvZGUgYmFzZSk/Cj4gPiA+IE5vdCB0byBtaXNsZWFkIHlvdTogb25lIGdyYW50IHJl ZiBpcyBwYXNzZWQgdmlhIGRpc3BsaWYgcHJvdG9jb2wsCj4gPiA+IGJ1dCB0aGUgcGFnZSBpdCdz IHJlZmVyZW5jaW5nIGNvbnRhaW5zIHRoZSByZXN0IG9mIHRoZSBncmFudCByZWZzLgo+ID4gPiAK PiA+ID4gQXMgdG8gaWYgdGhpcyBjYW4gYmUgdXNlZCBmb3IgYW55IG1lbW9yeTogeWVzLiBJdCBp cyB0aGUgc2FtZSBmb3IKPiA+ID4gc25kaWYgYW5kIGRpc3BsaWYgWGVuIHByb3RvY29scywgYnV0 IGRlZmluZWQgdHdpY2UgYXMgc3RyaWN0bHkgc3BlYWtpbmcKPiA+ID4gc25kaWYgYW5kIGRpc3Bs aWYgYXJlIHR3byBzZXBhcmF0ZSBwcm90b2NvbHMuCj4gPiA+IAo+ID4gPiBXaGlsZSByZXZpZXdp bmcgeW91ciBSRkMgdjIgb25lIG9mIHRoZSBjb21tZW50cyBJIGhhZCBbMl0gd2FzIHRoYXQgaWYg d2UKPiA+ID4gY2FuIHN0YXJ0IGZyb20gZGVmaW5pbmcgc3VjaCBhIGdlbmVyaWMgcHJvdG9jb2wg Zm9yIGh5cGVyLWRtYWJ1Zi4KPiA+ID4gSXQgY2FuIGJlIGEgaGVhZGVyIGZpbGUsIHdoaWNoIG5v dCBvbmx5IGhhcyB0aGUgZGVzY3JpcHRpb24gcGFydAo+ID4gPiAod2hpY2ggdGhlbiBiZWNvbWUg YSBwYXJ0IG9mIERvY3VtZW50YXRpb24vLi4ucnN0IGZpbGUpLCBidXQgYWxzbyBkZWZpbmVzCj4g PiA+IGFsbCB0aGUgcmVxdWlyZWQgY29uc3RhbnRzIGZvciByZXF1ZXN0cywgcmVzcG9uc2VzLCBk ZWZpbmVzIG1lc3NhZ2UgZm9ybWF0cywKPiA+ID4gc3RhdGUgZGlhZ3JhbXMgZXRjLiBhbGwgYXQg b25lIHBsYWNlLiBPZiBjb3Vyc2UgdGhpcyBwcm90b2NvbCBtdXN0IG5vdCBiZQo+ID4gPiBYZW4g c3BlY2lmaWMsIGJ1dCBiZSBPUy9oeXBlcnZpc29yIGFnbm9zdGljLgo+ID4gPiBIYXZpbmcgdGhh dCB3aWxsIHRyaWdnZXIgYSBuZXcgcm91bmQgb2YgZGlzY3Vzc2lvbiwgc28gd2UgaGF2ZSBpdCBh bGwKPiA+ID4gZGVzaWduZWQKPiA+ID4gYW5kIGRpc2N1c3NlZCBiZWZvcmUgd2Ugc3RhcnQgaW1w bGVtZW50aW5nLgo+ID4gPiAKPiA+ID4gQmVzaWRlcyB0aGUgcHJvdG9jb2wgd2UgaGF2ZSB0byBk ZXNpZ24gVUFQSSBwYXJ0IGFzIHdlbGwgYW5kIG1ha2Ugc3VyZQo+ID4gPiB0aGUgaHlwZXItZG1h YnVmIGlzIG5vdCBvbmx5IGFjY2Vzc2libGUgZnJvbSB1c2VyLXNwYWNlLCBidXQgdGhlcmUgd2ls bCBiZQo+ID4gPiBudW1iZXIKPiA+ID4gb2Yga2VybmVsLXNwYWNlIHVzZXJzIGFzIHdlbGwuCj4g PiBBZ2Fpbiwgd2h5IGRvIHlvdSB3YW50IHRvIGNyZWF0ZSBuZXcgdWFwaSBmb3IgdGhpcz8gR2l2 ZW4gdGhlIHZlcnkgc3RyaWN0Cj4gPiByZXF1aXJlbWVudHMgd2UgaGF2ZSBmb3IgbmV3IHVhcGkg KHNlZSBhYm92ZSBsaW5rKSwgaXQncyB0aGUgdG91Z2hlc3Qgd2F5Cj4gPiB0byBnZXQgYW55IGtp bmQgb2Ygc3VwcG9ydCBpbi4KPiBJIGRvIHVuZGVyc3RhbmQgdGhhdCBhZGRpbmcgbmV3IFVBUEkg aXMgbm90IGdvb2QgZm9yIG1hbnkgcmVhc29ucy4KPiBCdXQgaGVyZSBJIHdhcyBtZWFuaW5nIHRo YXQgY3VycmVudCBoeXBlci1kbWFidWYgZGVzaWduIGlzCj4gb25seSB1c2VyLXNwYWNlIG9yaWVu dGVkLCBlLmcuIGl0IHByb3ZpZGVzIG51bWJlciBvZiBJT0NUTHMgdG8gZG8gYWxsCj4gdGhlIHdv cmsuIEJ1dCBJIG5lZWQgYSB3YXkgdG8gYWNjZXNzIHRoZSBzYW1lIGZyb20gdGhlIGtlcm5lbCwg c28sIGZvcgo+IGV4YW1wbGUsCj4gc29tZSBvdGhlciBwYXJhLXZpcnR1YWwgZHJpdmVyIGNhbiBl eHBvcnQvaW1wb3J0IGRtYS1idWYsIG5vdCBvbmx5Cj4gdXNlci1zcGFjZS4KCklmIHlvdSBuZWVk IGFuIGltcG9ydC1leHBvcnQgaGVscGVyIGxpYnJhcnksIGp1c3QgbWVyZ2UgaXQuIERvIG5vdCBh dHRhY2gKYW55IHVhcGkgdG8gaXQsIGp1c3QgdGhlIGludGVybmFsIGhlbHBlcnMuCgpNdWNoLCBt dWNoLCBtdWNoIGVhc2llciB0byBsYW5kLgoKPiA+IFRoYXQncyB3aHkgSSBoYWQgZXNzZW50aWFs bHkgemVybyBiaWcgcXVlc3Rpb25zIGZvciB4ZW4tZnJvbnQgKGV4Y2VwdCBzb21lCj4gPiBpbXBs ZW1lbnRhdGlvbiBpbXByb3ZlbWVudHMsIGFuZCBzdHVmZiB0byBtYWtlIHN1cmUgeGVuLWZyb250 IGFjdHVhbGx5Cj4gPiBpbXBsZW1lbnRzIHRoZSByZWFsIHVhcGkgc2VtYW50aWNzIGluc3RlYWQg b2YgaXRzIG93biksIGFuZCB3aHkgSSdtIGFza2luZwo+ID4gbXVjaCBtb3JlIHF1ZXN0aW9ucyBv biB0aGlzIHN0dWZmIGhlcmUuCj4gPiAKPiA+ID4gPiA+ID4gNC4gaW50ZXIgVk0gbWVzc2FnaW5n IChoeXBlX2RtYWJ1ZiBvbmx5KSAtIGh5cGVyX2RtYWJ1ZiBoYXMgaW50ZXItdm0gbXNnCj4gPiA+ ID4gPiA+IGNvbW11bmljYXRpb24gZGVmaW5lZCBmb3IgZG1hYnVmIHN5bmNocm9uaXphdGlvbiBh bmQgcHJpdmF0ZSBkYXRhIChtZXRhCj4gPiA+ID4gPiA+IGluZm8gdGhhdCBNYXR0IFJvcGVyIG1l bnRpb25lZCkgZXhjaGFuZ2UuCj4gPiA+ID4gPiBUaGlzIGlzIHRydWUsIHhlbi16Y29weSBoYXMg bm8gbWVhbnMgZm9yIGludGVyIFZNIHN5bmMgYW5kIG1ldGEtZGF0YSwKPiA+ID4gPiA+IHNpbXBs eSBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgY29kZSBmb3IgaW50ZXIgVk0gZXhjaGFuZ2Ug aW4gaXQsCj4gPiA+ID4gPiBlLmcuIHRoZSBpbnRlciBWTSBwcm90b2NvbCBpcyBoYW5kbGVkIGJ5 IHRoZSBiYWNrZW5kIFsxXS4KPiA+ID4gPiA+ID4gNS4gZHJpdmVyLXRvLWRyaXZlciBub3RpZmlj YXRpb24gKGh5cGVyX2RtYWJ1ZiBvbmx5KSAtIGltcG9ydGluZyBWTSBnZXRzCj4gPiA+ID4gPiA+ IG5vdGlmaWVkIHdoZW4gbmV3ZG1hYnVmIGlzIGV4cG9ydGVkIGZyb20gb3RoZXIgVk0gLSB1ZXZl bnQgY2FuIGJlIG9wdGlvbmFsbHkKPiA+ID4gPiA+ID4gZ2VuZXJhdGVkIHdoZW4gdGhpcyBoYXBw ZW5zLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gNi4gc3RydWN0dXJlIC0gaHlwZXJfZG1hYnVm IGlzIHRhcmdldHRpbmcgdG8gcHJvdmlkZSBhIGdlbmVyaWMgc29sdXRpb24gZm9yCj4gPiA+ID4g PiA+IGludGVyLWRvbWFpbiBkbWFidWYgc2hhcmluZyBmb3IgbW9zdCBoeXBlcnZpc29ycywgd2hp Y2ggaXMgd2h5IGl0IGhhcyB0d28KPiA+ID4gPiA+ID4gbGF5ZXJzIGFzIG1hdHRyb3BlIG1lbnRp b25lZCwgZnJvbnQtZW5kIHRoYXQgY29udGFpbnMgc3RhbmRhcmQgQVBJIGFuZCBiYWNrZW5kCj4g PiA+ID4gPiA+IHRoYXQgaXMgc3BlY2lmaWMgdG8gaHlwZXJ2aXNvci4KPiA+ID4gPiA+IEFnYWlu LCB4ZW4temNvcHkgaXMgZGVjb3VwbGVkIGZyb20gaW50ZXIgVk0gY29tbXVuaWNhdGlvbgo+ID4g PiA+ID4gPiA+ID4gTm8gaWRlYSwgZGlkbid0IGxvb2sgYXQgaXQgaW4gZGV0YWlsLgo+ID4gPiA+ ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBMb29rcyBwcmV0dHkgY29tcGxleCBmcm9tIGEgZGlz dGFudCB2aWV3LiAgTWF5YmUgYmVjYXVzZSBpdCB0cmllcyB0bwo+ID4gPiA+ID4gPiA+ID4gYnVp bGQgYSBjb21tdW5pY2F0aW9uIGZyYW1ld29yayB1c2luZyBkbWEtYnVmcyBpbnN0ZWFkIG9mIGEg c2ltcGxlCj4gPiA+ID4gPiA+ID4gPiBkbWEtYnVmIHBhc3NpbmcgbWVjaGFuaXNtLgo+ID4gPiA+ ID4gPiB3ZSBzdGFydGVkIHdpdGggc2ltcGxlIGRtYS1idWYgc2hhcmluZyBidXQgcmVhbGl6ZWQg dGhlcmUgYXJlIG1hbnkKPiA+ID4gPiA+ID4gdGhpbmdzIHdlIG5lZWQgdG8gY29uc2lkZXIgaW4g cmVhbCB1c2UtY2FzZSwgc28gd2UgYWRkZWQgY29tbXVuaWNhdGlvbgo+ID4gPiA+ID4gPiAsIG5v dGlmaWNhdGlvbiBhbmQgZG1hLWJ1ZiBzeW5jaHJvbml6YXRpb24gdGhlbiByZS1zdHJ1Y3R1cmVk IGl0IHRvCj4gPiA+ID4gPiA+IGZyb250LWVuZCBhbmQgYmFjay1lbmQgKHRoaXMgbWFkZSB0aGlu Z3MgbW9yZSBjb21waWNhdGVkLi4pIHNpbmNlIFhlbgo+ID4gPiA+ID4gPiB3YXMgbm90IG91ciBv bmx5IHRhcmdldC4gQWxzbywgd2UgdGhvdWdodCBwYXNzaW5nIHRoZSByZWZlcmVuY2UgZm9yIHRo ZQo+ID4gPiA+ID4gPiBidWZmZXIgKGh5cGVyX2RtYWJ1Zl9pZCkgaXMgbm90IHNlY3VyZSBzbyBh ZGRlZCB1dmVudCBtZWNoYW5pc20gbGF0ZXIuCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IFll cywgSSBhbSBsb29raW5nIGF0IGl0IG5vdywgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGZ1bGwg c3RvcnkKPiA+ID4gPiA+ID4gPiBhbmQgaXRzIGltcGxlbWVudGF0aW9uLiBCVFcsIEludGVsIGd1 eXMgd2VyZSBhYm91dCB0byBzaGFyZSBzb21lCj4gPiA+ID4gPiA+ID4gdGVzdCBhcHBsaWNhdGlv biBmb3IgaHlwZXItZG1hYnVmLCBtYXliZSBJIGhhdmUgbWlzc2VkIG9uZS4KPiA+ID4gPiA+ID4g PiBJdCBjb3VsZCBwcm9iYWJseSBiZXR0ZXIgZXhwbGFpbiB0aGUgdXNlLWNhc2VzIGFuZCB0aGUg Y29tcGxleGl0eQo+ID4gPiA+ID4gPiA+IHRoZXkgaGF2ZSBpbiBoeXBlci1kbWFidWYuCj4gPiA+ ID4gPiA+IE9uZSBleGFtcGxlIGlzIGFjdHVhbGx5IGluIGdpdGh1Yi4gSWYgeW91IHdhbnQgdGFr ZSBhIGxvb2sgYXQgaXQsIHBsZWFzZQo+ID4gPiA+ID4gPiB2aXNpdDoKPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3dub3IvbGludXhfaHlwZXJfZG1hYnVmX3Rl c3QvdHJlZS94ZW4vc2ltcGxlX2V4cG9ydAo+ID4gPiA+ID4gVGhhbmsgeW91LCBJJ2xsIGhhdmUg YSBsb29rCj4gPiA+ID4gPiA+ID4gPiBMaWtlIHhlbi16Y29weSBpdCBzZWVtcyB0byBkZXBlbmQg b24gdGhlIGlkZWEgdGhhdCB0aGUgaHlwZXJ2aXNvcgo+ID4gPiA+ID4gPiA+ID4gbWFuYWdlcyBh bGwgbWVtb3J5IGl0IGlzIGVhc3kgZm9yIGd1ZXN0cyB0byBzaGFyZSBwYWdlcyB3aXRoIHRoZSBo ZWxwIG9mCj4gPiA+ID4gPiA+ID4gPiB0aGUgaHlwZXJ2aXNvci4KPiA+ID4gPiA+ID4gPiBTbywg Zm9yIHhlbi16Y29weSB3ZSB3ZXJlIG5vdCB0cnlpbmcgdG8gbWFrZSBpdCBnZW5lcmljLAo+ID4g PiA+ID4gPiA+IGl0IGp1c3Qgc29sdmVzIGRpc3BsYXkgKGR1bWIpIHplcm8tY29weWluZyB1c2Ut Y2FzZXMgZm9yIFhlbi4KPiA+ID4gPiA+ID4gPiBXZSBpbXBsZW1lbnRlZCBpdCBhcyBhIERSTSBo ZWxwZXIgZHJpdmVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc2VlIGFueQo+ID4gPiA+ID4gPiA+IG90aGVy IHVzZS1jYXNlcyBhcyBvZiBub3cuCj4gPiA+ID4gPiA+ID4gRm9yIGV4YW1wbGUsIHdlIGFsc28g aGF2ZSBYZW4gcGFyYS12aXJ0dWFsaXplZCBzb3VuZCBkcml2ZXIsIGJ1dAo+ID4gPiA+ID4gPiA+ IGl0cyBidWZmZXIgbWVtb3J5IHVzYWdlIGlzIG5vdCBjb21wYXJhYmxlIHRvIHdoYXQgZGlzcGxh eSB3YW50cwo+ID4gPiA+ID4gPiA+IGFuZCBpdCB3b3JrcyBzb21ld2hhdCBkaWZmZXJlbnRseSAo ZS5nLiB0aGVyZSBpcyBubyAiZnJhbWUgZG9uZSIKPiA+ID4gPiA+ID4gPiBldmVudCwgc28gb25l IGNhbid0IHRlbGwgd2hlbiB0aGUgc291bmQgYnVmZmVyIGNhbiBiZSAiZmxpcHBlZCIpLgo+ID4g PiA+ID4gPiA+IEF0IHRoZSBzYW1lIHRpbWUsIHdlIGRvIG5vdCB1c2UgdmlydGlvLWdwdSwgc28g dGhpcyBjb3VsZCBwcm9iYWJseQo+ID4gPiA+ID4gPiA+IGJlIG9uZSBtb3JlIGNhbmRpZGF0ZSBm b3Igc2hhcmVkIGRtYS1idWZzIHNvbWUgZGF5Lgo+ID4gPiA+ID4gPiA+ID4gICAgIFdoaWNoIHNp bXBseSBpc24ndCB0aGUgY2FzZSBvbiBrdm0uCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4g PiA+IGh5cGVyLWRtYWJ1ZiBhbmQgeGVuLXpjb3B5IGNvdWxkIG1heWJlIHNoYXJlIGNvZGUsIG9y IGh5cGVyLWRtYWJ1ZiBidWlsZAo+ID4gPiA+ID4gPiA+ID4gb24gdG9wIG9mIHhlbi16Y29weS4K PiA+ID4gPiA+ID4gPiBIbSwgSSBjYW4gaW1hZ2luZSB0aGF0OiB4ZW4temNvcHkgY291bGQgYmUg YSBsaWJyYXJ5IGNvZGUgZm9yIGh5cGVyLWRtYWJ1Zgo+ID4gPiA+ID4gPiA+IGluIHRlcm1zIG9m IGltcGxlbWVudGluZyBhbGwgdGhhdCBwYWdlIHNoYXJpbmcgZnVuIGluIG11bHRpcGxlIGRpcmVj dGlvbnMsCj4gPiA+ID4gPiA+ID4gZS5nLiBIb3N0LT5HdWVzdCwgR3Vlc3QtPkhvc3QsIEd1ZXN0 PC0+R3Vlc3QuCj4gPiA+ID4gPiA+ID4gQnV0IEknbGwgbGV0IE1hdHQgYW5kIERvbmd3b24gdG8g Y29tbWVudCBvbiB0aGF0Lgo+ID4gPiA+ID4gPiBJIHRoaW5rIHdlIGNhbiBkZWZpbml0ZWx5IGNv bGxhYm9yYXRlLiBFc3BlY2lhbGx5LCBtYXliZSB3ZSBhcmUgdXNpbmcgc29tZQo+ID4gPiA+ID4g PiBvdXRkYXRlZCBzaGFyaW5nIG1lY2hhbmlzbS9ncmFudC10YWJsZSBtZWNoYW5pc20gaW4gb3Vy IFhlbiBiYWNrZW5kICh0aGFua3MKPiA+ID4gPiA+ID4gZm9yIGJyaW5naW5nIHRoYXQgdXAgT2xl a3NhbmRyKS4gSG93ZXZlciwgdGhlIHF1ZXN0aW9uIGlzIG9uY2Ugd2UgY29sbGFib3JhdGUKPiA+ ID4gPiA+ID4gc29tZWhvdywgY2FuIHhlbi16Y29weSdzIHVzZWNhc2UgdXNlIHRoZSBzdGFuZGFy ZCBBUEkgdGhhdCBoeXBlcl9kbWFidWYKPiA+ID4gPiA+ID4gcHJvdmlkZXM/IEkgZG9uJ3QgdGhp bmsgd2UgbmVlZCBkaWZmZXJlbnQgSU9DVExzIHRoYXQgZG8gdGhlIHNhbWUgaW4gdGhlIGZpbmFs Cj4gPiA+ID4gPiA+IHNvbHV0aW9uLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+IElmIHlvdSB0aGlu ayBvZiB4ZW4temNvcHkgYXMgYSBsaWJyYXJ5ICh3aGljaCBpbXBsZW1lbnRzIFhlbgo+ID4gPiA+ ID4gZ3JhbnQgcmVmZXJlbmNlcyBtYW5nbGluZykgYW5kIERSTSBQUklNRSB3cmFwcGVyIG9uIHRv cCBvZiB0aGF0Cj4gPiA+ID4gPiBsaWJyYXJ5LCB3ZSBjYW4gcHJvYmFibHkgZGVmaW5lIHByb3Bl ciBBUEkgZm9yIHRoYXQgbGlicmFyeSwKPiA+ID4gPiA+IHNvIGJvdGggeGVuLXpjb3B5IGFuZCBo eXBlci1kbWFidWYgY2FuIHVzZSBpdC4gV2hhdCBpcyBtb3JlLCBJIGFtCj4gPiA+ID4gPiBhYm91 dCB0byBzdGFydCB1cHN0cmVhbWluZyBYZW4gcGFyYS12aXJ0dWFsaXplZCBzb3VuZCBkZXZpY2Ug ZHJpdmVyIHNvb24sCj4gPiA+ID4gPiB3aGljaCBhbHNvIHVzZXMgc2ltaWxhciBjb2RlIGFuZCBn cmVmIHBhc3NpbmcgbWVjaGFuaXNtIFszXS4KPiA+ID4gPiA+IChBY3R1YWxseSwgSSB3YXMgYWJv dXQgdG8gdXBzdHJlYW0gZHJtL3hlbi1mcm9udCwgZHJtL3hlbi16Y29weSBhbmQKPiA+ID4gPiA+ IHNuZC94ZW4tZnJvbnQgYW5kIHRoZW4gcHJvcG9zZSBhIFhlbiBoZWxwZXIgbGlicmFyeSBmb3Ig c2hhcmluZyBiaWcgYnVmZmVycywKPiA+ID4gPiA+IHNvIGNvbW1vbiBjb2RlIG9mIHRoZSBhYm92 ZSBkcml2ZXJzIGNhbiB1c2UgdGhlIHNhbWUgY29kZSB3L28gY29kZQo+ID4gPiA+ID4gZHVwbGlj YXRpb24pCj4gPiA+ID4gSSB0aGluayBpdCBpcyBwb3NzaWJsZSB0byB1c2UgeW91ciBmdW5jdGlv bnMgZm9yIG1lbW9yeSBzaGFyaW5nIHBhcnQgaW4KPiA+ID4gPiBoeXBlcl9kbWFidWYncyBiYWNr ZW5kICh0aGlzICdiYWNrZW5kJyBtZWFucyB0aGUgbGF5ZXIgdGhhdCBkb2VzIHBhZ2Ugc2hhcmlu Zwo+ID4gPiA+IGFuZCBpbnRlci12bSBjb21tdW5pY2F0aW9uIHdpdGggeGVuLXNwZWNpZmljIHdh eS4pLCBzbyB3aHkgZG9uJ3Qgd2Ugd29yayBvbgo+ID4gPiA+ICJYZW4gaGVscGVyIGxpYnJhcnkg Zm9yIHNoYXJpbmcgYmlnIGJ1ZmZlcnMiIGZpcnN0IHdoaWxlIHdlIGNvbnRpbnVlIG91cgo+ID4g PiA+IGRpc2N1c3Npb24gb24gdGhlIGNvbW1vbiBBUEkgbGF5ZXIgdGhhdCBjYW4gY292ZXIgYW55 IGRtYWJ1ZiBzaGFyaW5nIGNhc2VzLgo+ID4gPiA+IAo+ID4gPiBXZWxsLCBJIHdvdWxkIGxvdmUg d2UgcmV1c2UgdGhlIGNvZGUgdGhhdCBJIGhhdmUsIGJ1dCBJIGFsc28KPiA+ID4gdW5kZXJzdGFu ZCB0aGF0IGl0IHdhcyBsaW1pdGVkIGJ5IG15IHVzZS1jYXNlcy4gU28sIEkgZG8gbm90Cj4gPiA+ IGluc2lzdCB3ZSBoYXZlIHRvIDspCj4gPiA+IElmIHdlIHN0YXJ0IGRlc2lnbmluZyBhbmQgZGlz Y3Vzc2luZyBoeXBlci1kbWFidWYgcHJvdG9jb2wgd2Ugb2YgY291cnNlCj4gPiA+IGNhbiB3b3Jr IG9uIHRoaXMgaGVscGVyIGxpYnJhcnkgaW4gcGFyYWxsZWwuCj4gPiBJbW8gY29kZSByZXVzZSBp cyBvdmVycmF0ZWQuIEFkZGluZyBuZXcgdWFwaSBpcyB3aGF0IGZyZWFrcyBtZSBvdXQgaGVyZQo+ ID4gOi0pCj4gPiAKPiA+IElmIHdlIGVuZCB1cCB3aXRoIGR1cGxpY2F0ZWQgaW1wbGVtZW50YXRp b25zLCBldmVuIGluIHVwc3RyZWFtLCBtZWgsIG5vdAo+ID4gZ3JlYXQsIGJ1dCBhbHNvIG9rLiBO ZXcgdWFwaSwgYW5kIGluIGEgc2ltaWxhciB3YXksIG5ldyBoeXBlcnZpc29yIGFwaQo+ID4gbGlr ZSB0aGUgZG1hLWJ1ZiBmb3J3YXJkaW5nIHRoYXQgaHlwZXJkbWFidWYgZG9lcyBpcyB0aGUga2lu ZCBvZiB0aGluZwo+ID4gdGhhdCB3aWxsIGxvY2sgdXMgaW4gZm9yIDEwKyB5ZWFycyAoaWYgd2Ug bWFrZSBhIG1pc3Rha2UpLgo+ID4gCj4gPiA+ID4gPiBUaGFuayB5b3UsCj4gPiA+ID4gPiBPbGVr c2FuZHIKPiA+ID4gPiA+IAo+ID4gPiA+ID4gUC5TLiBBbGwsIGlzIGl0IGEgZ29vZCBpZGVhIHRv IG1vdmUgdGhpcyBvdXQgb2YgdWRtYWJ1ZiB0aHJlYWQgaW50byBhCj4gPiA+ID4gPiBkZWRpY2F0 ZWQgb25lPwo+ID4gPiA+IEVpdGhlciB3YXkgaXMgZmluZSB3aXRoIG1lLgo+ID4gPiBTbywgaWYg eW91IGNhbiBzdGFydCBkZXNpZ25pbmcgdGhlIHByb3RvY29sIHdlIG1heSBoYXZlIGEgZGVkaWNh dGVkIG1haWwKPiA+ID4gdGhyZWFkIGZvciB0aGF0LiBJIHdpbGwgdHJ5IHRvIGhlbHAgd2l0aCB0 aGUgcHJvdG9jb2wgYXMgbXVjaCBhcyBJIGNhbgo+ID4gUGxlYXNlIGRvbid0IHN0YXJ0IHdpdGgg dGhlIHByb3RvY29sLiBJbnN0ZWFkIHN0YXJ0IHdpdGggdGhlIGNvbmNyZXRlCj4gPiB1c2UtY2Fz ZXMsIGFuZCB0aGVuIGZpZ3VyZSBvdXQgd2h5IGV4YWN0bHkgeW91IG5lZWQgbmV3IHVhcGkuIE9u Y2Ugd2UgaGF2ZQo+ID4gdGhhdCBhbnN3ZXJlZCwgd2UgY2FuIHN0YXJ0IHRoaW5raW5nIGFib3V0 IGZsZXNoaW5nIG91dCB0aGUgZGV0YWlscy4KPiBPbiBteSBzaWRlIHRoZXJlIGFyZSBvbmx5IDIg dXNlLWNhc2VzLCBHdWVzdDIgb25seToKPiAxLiBDcmVhdGUgYSBQUklNRSAoZG1hLWJ1ZikgZnJv bSBncmFudCByZWZlcmVuY2VzCj4gMi4gQ3JlYXRlIGdyYW50IHJlZmVyZW5jZXMgZnJvbSBQUklN RSAoZG1hLWJ1ZikKClNvIHRoZXNlIGdyYW50IHJlZmVyZW5jZXMsIGFyZSB0aG9zZSB1c2Vyc3Bh Y2UgdmlzaWJsZSB0aGluZ3M/IEkgdGhvdWdodAp0aGUgZ3JhbnQgcmVmZXJlbmNlcyB3YXMganVz dCB0aGUga2VybmVsL2h5cGVydmlzb3IgaW50ZXJuYWwgbWFnaWMgdG8gbWFrZQp0aGlzIGFsbCB3 b3JrPwotRGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBD b3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK