From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RfC PATCH] Add udmabuf misc device Date: Fri, 13 Apr 2018 17:37:08 +0200 Message-ID: <20180413153708.GW31310@phenom.ffwll.local> References: <20180406001117.GD31612@mdroper-desk.amr.corp.intel.com> <2411d2c1-33c0-2ba5-67ea-3bb9af5d5ec9@epam.com> <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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x22d.google.com (mail-wr0-x22d.google.com [IPv6:2a00:1450:400c:c0c::22d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8081C6EB10 for ; Fri, 13 Apr 2018 15:37:13 +0000 (UTC) Received: by mail-wr0-x22d.google.com with SMTP id v60so5309040wrc.7 for ; Fri, 13 Apr 2018 08:37:13 -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 , David Airlie , open list , dri-devel , qemu-devel@nongnu.org, "moderated list:DMA BUFFER SHARING FRAMEWORK" , Gerd Hoffmann , "open list:DMA BUFFER SHARING FRAMEWORK" List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBBcHIgMTEsIDIwMTggYXQgMDg6NTk6MzJBTSArMDMwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gT24gMDQvMTAvMjAxOCAwODoyNiBQTSwgRG9uZ3dvbiBLaW0gd3Jv dGU6Cj4gPiBPbiBUdWUsIEFwciAxMCwgMjAxOCBhdCAwOTozNzo1M0FNICswMzAwLCBPbGVrc2Fu ZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToKPiA+ID4gT24gMDQvMDYvMjAxOCAwOTo1NyBQTSwgRG9u Z3dvbiBLaW0gd3JvdGU6Cj4gPiA+ID4gT24gRnJpLCBBcHIgMDYsIDIwMTggYXQgMDM6MzY6MDNQ TSArMDMwMCwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gd3JvdGU6Cj4gPiA+ID4gPiBPbiAwNC8w Ni8yMDE4IDAyOjU3IFBNLCBHZXJkIEhvZmZtYW5uIHdyb3RlOgo+ID4gPiA+ID4gPiAgICBIaSwK PiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBJIGZhaWwgdG8gc2VlIGFueSBjb21tb24gZ3Jv dW5kIGZvciB4ZW4temNvcHkgYW5kIHVkbWFidWYgLi4uCj4gPiA+ID4gPiA+ID4gRG9lcyB0aGUg YWJvdmUgbWVhbiB5b3UgY2FuIGFzc3VtZSB0aGF0IHhlbi16Y29weSBhbmQgdWRtYWJ1Zgo+ID4g PiA+ID4gPiA+IGNhbiBjby1leGlzdCBhcyB0d28gZGlmZmVyZW50IHNvbHV0aW9ucz8KPiA+ID4g PiA+ID4gV2VsbCwgdWRtYWJ1ZiByb3V0ZSBpc24ndCBmdWxseSBjbGVhciB5ZXQsIGJ1dCB5ZXMu Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBTZWUgYWxzbyBndnQgKGludGVsIHZncHUpLCB3aGVy ZSB0aGUgaHlwZXJ2aXNvciBpbnRlcmZhY2UgaXMgYWJzdHJhY3RlZAo+ID4gPiA+ID4gPiBhd2F5 IGludG8gYSBzZXBhcmF0ZSBrZXJuZWwgbW9kdWxlcyBldmVuIHRob3VnaCBtb3N0IG9mIHRoZSBh Y3R1YWwgdmdwdQo+ID4gPiA+ID4gPiBlbXVsYXRpb24gY29kZSBpcyBjb21tb24uCj4gPiA+ID4g PiBUaGFuayB5b3UgZm9yIHlvdXIgaW5wdXQsIEknbSBqdXN0IHRyeWluZyB0byBmaWd1cmUgb3V0 Cj4gPiA+ID4gPiB3aGljaCBvZiB0aGUgdGhyZWUgei1jb3B5IHNvbHV0aW9ucyBpbnRlcnNlY3Qg YW5kIGhvdyBtdWNoCj4gPiA+ID4gPiA+ID4gQW5kIHdoYXQgYWJvdXQgaHlwZXItZG1hYnVmPwo+ ID4gPiA+IHhlbiB6LWNvcHkgc29sdXRpb24gaXMgcHJldHR5IHNpbWlsYXIgZnVuZGFtZW50YWxs eSB0byBoeXBlcl9kbWFidWYKPiA+ID4gPiBpbiB0ZXJtcyBvZiB0aGVzZSBjb3JlIHNoYXJpbmcg ZmVhdHVyZToKPiA+ID4gPiAKPiA+ID4gPiAxLiB0aGUgc2hhcmluZyBwcm9jZXNzIC0gaW1wb3J0 IHByaW1lL2RtYWJ1ZiBmcm9tIHRoZSBwcm9kdWNlciAtPiBleHRyYWN0Cj4gPiA+ID4gdW5kZXJs eWluZyBwYWdlcyBhbmQgZ2V0IHRob3NlIHNoYXJlZCAtPiByZXR1cm4gcmVmZXJlbmNlcyBmb3Ig c2hhcmVkIHBhZ2VzCj4gPiBBbm90aGVyIHRoaW5nIGlzIGRhbnZldCB3YXMga2luZCBvZiBhZ2Fp bnN0IHRvIHRoZSBpZGVhIG9mIGltcG9ydGluZyBleGlzdGluZwo+ID4gZG1hYnVmL3ByaW1lIGJ1 ZmZlciBhbmQgZm9yd2FyZCBpdCB0byB0aGUgb3RoZXIgZG9tYWluIGR1ZSB0byBzeW5jaHJvbml6 YXRpb24KPiA+IGlzc3Vlcy4gSGUgcHJvcG9zZWQgdG8gbWFrZSBoeXBlcl9kbWFidWYgb25seSB3 b3JrIGFzIGFuIGV4cG9ydGVyIHNvIHRoYXQgaXQKPiA+IGNhbiBoYXZlIGEgZnVsbCBjb250cm9s IG92ZXIgdGhlIGJ1ZmZlci4gSSB0aGluayB3ZSBuZWVkIHRvIHRhbGsgYWJvdXQgdGhpcwo+ID4g ZnVydGhlciBhcyB3ZWxsLgo+IFllcywgSSBzYXcgdGhpcy4gQnV0IHRoaXMgbGltaXRzIHRoZSB1 c2UtY2FzZXMgc28gbXVjaC4KPiBGb3IgaW5zdGFuY2UsIHJ1bm5pbmcgQW5kcm9pZCBhcyBhIEd1 ZXN0ICh3aGljaCB1c2VzIElPTiB0byBhbGxvY2F0ZQo+IGJ1ZmZlcnMpIG1lYW5zIHRoYXQgZmlu YWxseSBIVyBjb21wb3NlciB3aWxsIGltcG9ydCBkbWEtYnVmIGludG8KPiB0aGUgRFJNIGRyaXZl ci4gVGhlbiwgaW4gY2FzZSBvZiB4ZW4tZnJvbnQgZm9yIGV4YW1wbGUsIGl0IG5lZWRzIHRvIGJl Cj4gc2hhcmVkIHdpdGggdGhlIGJhY2tlbmQgKEhvc3Qgc2lkZSkuIE9mIGNvdXJzZSwgd2UgY2Fu IGNoYW5nZSB1c2VyLXNwYWNlCj4gdG8gbWFrZSB4ZW4tZnJvbnQgYWxsb2NhdGUgdGhlIGJ1ZmZl cnMgKG1ha2UgaXQgZXhwb3J0ZXIpLCBidXQgd2hhdCB3ZSB0cnkKPiB0byBhdm9pZCBpcyB0byBj aGFuZ2UgdXNlci1zcGFjZSB3aGljaCBpbiBub3JtYWwgd29ybGQgd291bGQgaGF2ZSByZW1haW4K PiB1bmNoYW5nZWQgb3RoZXJ3aXNlLgo+IFNvLCBJIGRvIHRoaW5rIHdlIGhhdmUgdG8gc3VwcG9y dCB0aGlzIHVzZS1jYXNlIGFuZCBqdXN0IGhhdmUgdG8gdW5kZXJzdGFuZAo+IHRoZSBjb21wbGV4 aXR5LgoKRXJtLCB3aHkgZG8geW91IG5lZWQgaW1wb3J0ZXIgY2FwYWJpbGl0eSBmb3IgdGhpcyB1 c2UtY2FzZT8KCmd1ZXN0MSAtPiBJT04gLT4geGVuLWZyb250IC0+IGh5cGVydmlzb3IgLT4gZ3Vl c3QgMiAtPiB4ZW4temNvcHkgZXhwb3Nlcwp0aGF0IGRtYS1idWYgLT4gaW1wb3J0IHRvIHRoZSBy ZWFsIGRpc3BsYXkgaHcKCk5vIHdoZXJlIGluIHRoaXMgY2hhaW4gZG8geW91IG5lZWQgeGVuLXpj b3B5IHRvIGJlIGFibGUgdG8gaW1wb3J0IGEKZG1hLWJ1ZiAod2l0aGluIGxpbnV4LCBpdCBuZWVk cyB0byBpbXBvcnQgYSBidW5jaCBvZiBwYWdlcyBmcm9tIHRoZQpoeXBlcnZpc29yKS4KCk5vdyBp ZiB5b3VyIHBsYW4gaXMgdG8gdXNlIHhlbi16Y29weSBpbiB0aGUgZ3Vlc3QxIGluc3RlYWQgb2Yg eGVuLWZyb250LAp0aGVuIHlvdSBpbmRlZWQgbmVlZCB0byBpbXBvcnQuIEJ1dCB0aGF0IGltbyBk b2Vzbid0IG1ha2Ugc2Vuc2U6Ci0geGVuLWZyb250IGdpdmVzIHlvdSBjbGVhcmx5IGRlZmluZWQg ZmxpcCBldmVudHMgeW91IGNhbiBmb3J3YXJkIHRvIHRoZQogIGh5cGVydmlzb3IuIHhlbi16Y29w eSB3b3VsZCBuZWVkIHRvIGFkZCB0aGF0IGFnYWluLiBTYW1lIGZvcgogIGh5cGVyZG1hYnVmIChh bmQgcmVhbGx5IHdlJ3JlIG5vdCBnb2luZyB0byBzaHVmZmxlIHN0cnVjdCBkbWFfZmVuY2Ugb3Zl cgogIHRoZSB3aXJlIGluIGEgZ2VuZXJpYyBmYXNoaW9uIGJldHdlZW4gaHlwZXJ2aXNvciBndWVz dHMpLgoKLSB4ZW4tZnJvbnQgYWxyZWFkeSBoYXMgdGhlIGlkZWEgb2YgcGl4ZWwgZm9ybWF0IGZv ciB0aGUgYnVmZmVyIChhbmQgYW55CiAgb3RoZXIgbWV0YWRhdGEpLiBBZ2FpbiwgeGVuLXpjb3B5 IGFuZCBoeXBlcmRtYWJ1ZiBsYWNrIHRoYXQsIHdvdWxkIG5lZWQKICB0byBhZGQgaXQgc2hvZWhv cm5lZCBpbiBzb21laG93LgoKT2ZjIHlvdSB3b24ndCBiZSBhYmxlIHRvIHNob3ZlbCBzb3VuZCBv ciBtZWRpYSBzdHJlYW0gZGF0YSBvdmVyIHRvIGFub3RoZXIKZ3Vlc3QgbGlrZSB0aGlzLCBidXQg dGhhdCdzIHdoYXQgeW91IGhhdmUgeGVuLXY0bCBhbmQgeGVuLXNvdW5kIG9yCndoYXRldmVyIGVs c2UgZm9yLiBUcnlpbmcgdG8gbWFrZSBhIG5ldyB1YXBpLCB3aGljaCBtZWFucyB1c2Vyc3BhY2Ug bXVzdApiZSBjaGFuZ2VkIGZvciBhbGwgdGhlIGRpZmZlcmVudCB1c2UtY2FzZSwgaW5zdGVhZCBv ZiByZXVzaW5nIHN0YW5kYXJkCmxpbnV4IGRyaXZlciB1YXBpICh3aGljaCBqdXN0IGhhcHBlbnMg dG8gc2VuZCB0aGUgZGF0YSB0byBhbm90aGVyCmh5cGVydmlzb3IgZ3Vlc3QgaW5zdGVhZCBvZiBy ZWFsIGh3KSBpbW8ganVzdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KCkFsc28sIGF0IGxlYXN0 IGZvciB0aGUgZ3B1IHN1YnN5c3RlbTogQW55IG5ldyB1YXBpIG11c3QgaGF2ZSBmdWxsCnVzZXJz cGFjZSBhdmFpbGFibGUgZm9yIGl0LCBzZWU6CgpodHRwczovL2RyaS5mcmVlZGVza3RvcC5vcmcv ZG9jcy9kcm0vZ3B1L2RybS11YXBpLmh0bWwjb3Blbi1zb3VyY2UtdXNlcnNwYWNlLXJlcXVpcmVt ZW50cwoKQWRkaW5nIG1vcmUgdWFwaSBpcyBkZWZpbml0ZWx5IHRoZSBtb3N0IHBhaW5mdWwgd2F5 IHRvIGZpeCBhIHVzZS1jYXNlLgpQZXJzb25hbGx5IEknZCBnbyBhcyBmYXIgYW5kIGFsc28gY2hh bmdlIHRoZSB4ZW4temNvcHkgc2lkZSBvbiB0aGUKcmVjZWl2aW5nIGd1ZXN0IHRvIHVzZSBzb21l IHN0YW5kYXJkIGxpbnV4IHVhcGkuIEUuZy4geW91IGNvdWxkIHdyaXRlIGFuCm91dHB1dCB2NGwg ZHJpdmVyIHRvIHJlY2VpdmUgdGhlIGZyYW1lcyBmcm9tIGd1ZXN0MS4KCj4gPiBkYW52ZXQsIGNh biB5b3UgY29tbWVudCBvbiB0aGlzIHRvcGljPwo+ID4gCj4gPiA+ID4gMi4gdGhlIHBhZ2Ugc2hh cmluZyBtZWNoYW5pc20gLSBpdCB1c2VzIFhlbi1ncmFudC10YWJsZS4KPiA+ID4gPiAKPiA+ID4g PiBBbmQgdG8gZ2l2ZSB5b3UgYSBxdWljayBzdW1tYXJ5IG9mIGRpZmZlcmVuY2VzIGFzIGZhciBh cyBJIHVuZGVyc3RhbmQKPiA+ID4gPiBiZXR3ZWVuIHR3byBpbXBsZW1lbnRhdGlvbnMgKHBsZWFz ZSBjb3JyZWN0IG1lIGlmIEkgYW0gd3JvbmcsIE9sZWtzYW5kci4pCj4gPiA+ID4gCj4gPiA+ID4g MS4geGVuLXpjb3B5IGlzIERSTSBzcGVjaWZpYyAtIGNhbiBpbXBvcnQgb25seSBEUk0gcHJpbWUg YnVmZmVyCj4gPiA+ID4gd2hpbGUgaHlwZXJfZG1hYnVmIGNhbiBleHBvcnQgYW55IGRtYWJ1ZiBy ZWdhcmRsZXNzIG9mIG9yaWdpbmF0b3IKPiA+ID4gV2VsbCwgdGhpcyBpcyB0cnVlLiBBbmQgYXQg dGhlIHNhbWUgdGltZSB0aGlzIGlzIGp1c3QgYSBtYXR0ZXIKPiA+ID4gb2YgZXh0ZW5kaW5nIHRo ZSBBUEk6IHhlbi16Y29weSBpcyBhIGhlbHBlciBkcml2ZXIgZGVzaWduZWQgZm9yCj4gPiA+IHhl bi1mcm9udC9iYWNrIHVzZS1jYXNlLCBzbyB0aGlzIGlzIHdoeSBpdCBvbmx5IGhhcyBEUk0gUFJJ TUUgQVBJCj4gPiA+ID4gMi4geGVuLXpjb3B5IGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGRtYS1idWYg c3luY2hyb25pemF0aW9uIGJldHdlZW4gdHdvIFZNcwo+ID4gPiA+IHdoaWxlIChhcyBkYW52ZXQg Y2FsbGVkIGl0IGFzIHJlbW90ZSBkbWFidWYgYXBpIHNoYXJpbmcpIGh5cGVyX2RtYWJ1ZiBzZW5k cwo+ID4gPiA+IG91dCBzeW5jaHJvbml6YXRpb24gbWVzc2FnZSB0byB0aGUgZXhwb3J0aW5nIFZN IGZvciBzeW5jaHJvbml6YXRpb24uCj4gPiA+IFRoaXMgaXMgdHJ1ZS4gQWdhaW4sIHRoaXMgaXMg YmVjYXVzZSBvZiB0aGUgdXNlLWNhc2VzIGl0IGNvdmVycy4KPiA+ID4gQnV0IGhhdmluZyBzeW5j aHJvbml6YXRpb24gZm9yIGEgZ2VuZXJpYyBzb2x1dGlvbiBzZWVtcyB0byBiZSBhIGdvb2QgaWRl YS4KPiA+IFllYWgsIHVuZGVyc3Rvb2QgeGVuLXpjb3B5IHdvcmtzIG9rIHdpdGggeW91ciB1c2Ug Y2FzZS4gQnV0IEkgYW0ganVzdCBjdXJpb3VzCj4gPiBpZiBpdCBpcyBvayBub3QgdG8gaGF2ZSBh bnkgaW50ZXItZG9tYWluIHN5bmNocm9uaXphdGlvbiBpbiB0aGlzIHNoYXJpbmcgbW9kZWwuCj4g VGhlIHN5bmNocm9uaXphdGlvbiBpcyBkb25lIHdpdGggZGlzcGxpZiBwcm90b2NvbCBbMV0KPiA+ IFRoZSBidWZmZXIgYmVpbmcgc2hhcmVkIGlzIHRlY2huaWNhbGx5IGRtYS1idWYgYW5kIG9yaWdp bmF0b3IgbmVlZHMgdG8gYmUgYWJsZQo+ID4gdG8ga2VlcCB0cmFjayBvZiBpdC4KPiBBcyBJIGFt IHdvcmtpbmcgaW4gRFJNIHRlcm1zIHRoZSB0cmFja2luZyBpcyBkb25lIGJ5IHRoZSBEUk0gY29y ZQo+IGZvciBtZSBmb3IgZnJlZS4gKFRoaXMgbWlnaHQgYmUgb25lIG9mIHRoZSByZWFzb25zIERh bmllbCBzZWVzIERSTQo+IGJhc2VkIGltcGxlbWVudGF0aW9uIGZpdCB2ZXJ5IGdvb2QgZnJvbSBj b2RlLXJldXNlIFBPVikuCgpIbSwgbm90IHN1cmUgd2hhdCB0cmFja2luZyB5b3UgcmVmZXIgdG8g aGVyZSBhbGwgLi4uIEkgZ290IGxvc3QgaW4gYWxsIHRoZQpyZXBsaWVzIHdoaWxlIGNhdGNoaW5n IHVwLgoKPiA+ID4gPiAzLiAxLWxldmVsIHJlZmVyZW5jZXMgLSB3aGVuIHVzaW5nIGdyYW50LXRh YmxlIGZvciBzaGFyaW5nIHBhZ2VzLCB0aGVyZSB3aWxsCj4gPiA+ID4gYmUgc2FtZSAjIG9mIHJl ZnMgKGVhY2ggOCBieXRlKQo+ID4gPiBUbyBiZSBwcmVjaXNlLCBncmFudCByZWYgaXMgNCBieXRl cwo+ID4gWW91IGFyZSByaWdodC4gVGhhbmtzIGZvciBjb3JyZWN0aW9uLjspCj4gPiAKPiA+ID4g PiBhcyAjIG9mIHNoYXJlZCBwYWdlcywgd2hpY2ggaXMgcGFzc2VkIHRvCj4gPiA+ID4gdGhlIHVz ZXJzcGFjZSB0byBiZSBzaGFyZWQgd2l0aCBpbXBvcnRpbmcgVk0gaW4gY2FzZSBvZiB4ZW4temNv cHkuCj4gPiA+IFRoZSByZWFzb24gZm9yIHRoYXQgaXMgdGhhdCB4ZW4temNvcHkgaXMgYSBoZWxw ZXIgZHJpdmVyLCBlLmcuCj4gPiA+IHRoZSBncmFudCByZWZlcmVuY2VzIGNvbWUgZnJvbSB0aGUg ZGlzcGxheSBiYWNrZW5kIFsxXSwgd2hpY2ggaW1wbGVtZW50cwo+ID4gPiBYZW4gZGlzcGxheSBw cm90b2NvbCBbMl0uIFNvLCBlZmZlY3RpdmVseSB0aGUgYmFja2VuZCBleHRyYWN0cyByZWZlcmVu Y2VzCj4gPiA+IGZyb20gZnJvbnRlbmQncyByZXF1ZXN0cyBhbmQgcGFzc2VzIHRob3NlIHRvIHhl bi16Y29weSBhcyBhbiBhcnJheQo+ID4gPiBvZiByZWZzLgo+ID4gPiA+ICAgQ29tcGFyZWQKPiA+ ID4gPiB0byB0aGlzLCBoeXBlcl9kbWFidWYgZG9lcyBtdWx0aXBsZSBsZXZlbCBhZGRyZXNzaW5n IHRvIGdlbmVyYXRlIG9ubHkgb25lCj4gPiA+ID4gcmVmZXJlbmNlIGlkIHRoYXQgcmVwcmVzZW50 cyBhbGwgc2hhcmVkIHBhZ2VzLgo+ID4gPiBJbiB0aGUgcHJvdG9jb2wgWzJdIG9ubHkgb25lIHJl ZmVyZW5jZSB0byB0aGUgZ3JlZiBkaXJlY3RvcnkgaXMgcGFzc2VkCj4gPiA+IGJldHdlZW4gVk1z Cj4gPiA+IChhbmQgdGhlIGdyZWYgZGlyZWN0b3J5IGlzIGEgc2luZ2xlLWxpbmtlZCBsaXN0IG9m IHNoYXJlZCBwYWdlcyBjb250YWluaW5nCj4gPiA+IGFsbAo+ID4gPiBvZiB0aGUgZ3JlZnMgb2Yg dGhlIGJ1ZmZlcikuCj4gPiBvaywgZ29vZCB0byBrbm93LiBJIHdpbGwgbG9vayBpbnRvIGl0cyBp bXBsZW1lbnRhdGlvbiBpbiBtb3JlIGRldGFpbHMgYnV0IGlzCj4gPiB0aGlzIGdyZWYgZGlyZWN0 b3J5IChjaGFpbmVkIGdyZWZzKSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYW55IGdl bmVyYWwKPiA+IG1lbW9yeSBzaGFyaW5nIHVzZSBjYXNlIG9yIGlzIGl0IGpzdXQgZm9yIHhlbi1k aXNwbGF5IChpbiBjdXJyZW50IGNvZGUgYmFzZSk/Cj4gTm90IHRvIG1pc2xlYWQgeW91OiBvbmUg Z3JhbnQgcmVmIGlzIHBhc3NlZCB2aWEgZGlzcGxpZiBwcm90b2NvbCwKPiBidXQgdGhlIHBhZ2Ug aXQncyByZWZlcmVuY2luZyBjb250YWlucyB0aGUgcmVzdCBvZiB0aGUgZ3JhbnQgcmVmcy4KPiAK PiBBcyB0byBpZiB0aGlzIGNhbiBiZSB1c2VkIGZvciBhbnkgbWVtb3J5OiB5ZXMuIEl0IGlzIHRo ZSBzYW1lIGZvcgo+IHNuZGlmIGFuZCBkaXNwbGlmIFhlbiBwcm90b2NvbHMsIGJ1dCBkZWZpbmVk IHR3aWNlIGFzIHN0cmljdGx5IHNwZWFraW5nCj4gc25kaWYgYW5kIGRpc3BsaWYgYXJlIHR3byBz ZXBhcmF0ZSBwcm90b2NvbHMuCj4gCj4gV2hpbGUgcmV2aWV3aW5nIHlvdXIgUkZDIHYyIG9uZSBv ZiB0aGUgY29tbWVudHMgSSBoYWQgWzJdIHdhcyB0aGF0IGlmIHdlCj4gY2FuIHN0YXJ0IGZyb20g ZGVmaW5pbmcgc3VjaCBhIGdlbmVyaWMgcHJvdG9jb2wgZm9yIGh5cGVyLWRtYWJ1Zi4KPiBJdCBj YW4gYmUgYSBoZWFkZXIgZmlsZSwgd2hpY2ggbm90IG9ubHkgaGFzIHRoZSBkZXNjcmlwdGlvbiBw YXJ0Cj4gKHdoaWNoIHRoZW4gYmVjb21lIGEgcGFydCBvZiBEb2N1bWVudGF0aW9uLy4uLnJzdCBm aWxlKSwgYnV0IGFsc28gZGVmaW5lcwo+IGFsbCB0aGUgcmVxdWlyZWQgY29uc3RhbnRzIGZvciBy ZXF1ZXN0cywgcmVzcG9uc2VzLCBkZWZpbmVzIG1lc3NhZ2UgZm9ybWF0cywKPiBzdGF0ZSBkaWFn cmFtcyBldGMuIGFsbCBhdCBvbmUgcGxhY2UuIE9mIGNvdXJzZSB0aGlzIHByb3RvY29sIG11c3Qg bm90IGJlCj4gWGVuIHNwZWNpZmljLCBidXQgYmUgT1MvaHlwZXJ2aXNvciBhZ25vc3RpYy4KPiBI YXZpbmcgdGhhdCB3aWxsIHRyaWdnZXIgYSBuZXcgcm91bmQgb2YgZGlzY3Vzc2lvbiwgc28gd2Ug aGF2ZSBpdCBhbGwKPiBkZXNpZ25lZAo+IGFuZCBkaXNjdXNzZWQgYmVmb3JlIHdlIHN0YXJ0IGlt cGxlbWVudGluZy4KPiAKPiBCZXNpZGVzIHRoZSBwcm90b2NvbCB3ZSBoYXZlIHRvIGRlc2lnbiBV QVBJIHBhcnQgYXMgd2VsbCBhbmQgbWFrZSBzdXJlCj4gdGhlIGh5cGVyLWRtYWJ1ZiBpcyBub3Qg b25seSBhY2Nlc3NpYmxlIGZyb20gdXNlci1zcGFjZSwgYnV0IHRoZXJlIHdpbGwgYmUKPiBudW1i ZXIKPiBvZiBrZXJuZWwtc3BhY2UgdXNlcnMgYXMgd2VsbC4KCkFnYWluLCB3aHkgZG8geW91IHdh bnQgdG8gY3JlYXRlIG5ldyB1YXBpIGZvciB0aGlzPyBHaXZlbiB0aGUgdmVyeSBzdHJpY3QKcmVx dWlyZW1lbnRzIHdlIGhhdmUgZm9yIG5ldyB1YXBpIChzZWUgYWJvdmUgbGluayksIGl0J3MgdGhl IHRvdWdoZXN0IHdheQp0byBnZXQgYW55IGtpbmQgb2Ygc3VwcG9ydCBpbi4KClRoYXQncyB3aHkg SSBoYWQgZXNzZW50aWFsbHkgemVybyBiaWcgcXVlc3Rpb25zIGZvciB4ZW4tZnJvbnQgKGV4Y2Vw dCBzb21lCmltcGxlbWVudGF0aW9uIGltcHJvdmVtZW50cywgYW5kIHN0dWZmIHRvIG1ha2Ugc3Vy ZSB4ZW4tZnJvbnQgYWN0dWFsbHkKaW1wbGVtZW50cyB0aGUgcmVhbCB1YXBpIHNlbWFudGljcyBp bnN0ZWFkIG9mIGl0cyBvd24pLCBhbmQgd2h5IEknbSBhc2tpbmcKbXVjaCBtb3JlIHF1ZXN0aW9u cyBvbiB0aGlzIHN0dWZmIGhlcmUuCgo+ID4gPiA+IDQuIGludGVyIFZNIG1lc3NhZ2luZyAoaHlw ZV9kbWFidWYgb25seSkgLSBoeXBlcl9kbWFidWYgaGFzIGludGVyLXZtIG1zZwo+ID4gPiA+IGNv bW11bmljYXRpb24gZGVmaW5lZCBmb3IgZG1hYnVmIHN5bmNocm9uaXphdGlvbiBhbmQgcHJpdmF0 ZSBkYXRhIChtZXRhCj4gPiA+ID4gaW5mbyB0aGF0IE1hdHQgUm9wZXIgbWVudGlvbmVkKSBleGNo YW5nZS4KPiA+ID4gVGhpcyBpcyB0cnVlLCB4ZW4temNvcHkgaGFzIG5vIG1lYW5zIGZvciBpbnRl ciBWTSBzeW5jIGFuZCBtZXRhLWRhdGEsCj4gPiA+IHNpbXBseSBiZWNhdXNlIGl0IGRvZXNuJ3Qg aGF2ZSBhbnkgY29kZSBmb3IgaW50ZXIgVk0gZXhjaGFuZ2UgaW4gaXQsCj4gPiA+IGUuZy4gdGhl IGludGVyIFZNIHByb3RvY29sIGlzIGhhbmRsZWQgYnkgdGhlIGJhY2tlbmQgWzFdLgo+ID4gPiA+ IDUuIGRyaXZlci10by1kcml2ZXIgbm90aWZpY2F0aW9uIChoeXBlcl9kbWFidWYgb25seSkgLSBp bXBvcnRpbmcgVk0gZ2V0cwo+ID4gPiA+IG5vdGlmaWVkIHdoZW4gbmV3ZG1hYnVmIGlzIGV4cG9y dGVkIGZyb20gb3RoZXIgVk0gLSB1ZXZlbnQgY2FuIGJlIG9wdGlvbmFsbHkKPiA+ID4gPiBnZW5l cmF0ZWQgd2hlbiB0aGlzIGhhcHBlbnMuCj4gPiA+ID4gCj4gPiA+ID4gNi4gc3RydWN0dXJlIC0g aHlwZXJfZG1hYnVmIGlzIHRhcmdldHRpbmcgdG8gcHJvdmlkZSBhIGdlbmVyaWMgc29sdXRpb24g Zm9yCj4gPiA+ID4gaW50ZXItZG9tYWluIGRtYWJ1ZiBzaGFyaW5nIGZvciBtb3N0IGh5cGVydmlz b3JzLCB3aGljaCBpcyB3aHkgaXQgaGFzIHR3bwo+ID4gPiA+IGxheWVycyBhcyBtYXR0cm9wZSBt ZW50aW9uZWQsIGZyb250LWVuZCB0aGF0IGNvbnRhaW5zIHN0YW5kYXJkIEFQSSBhbmQgYmFja2Vu ZAo+ID4gPiA+IHRoYXQgaXMgc3BlY2lmaWMgdG8gaHlwZXJ2aXNvci4KPiA+ID4gQWdhaW4sIHhl bi16Y29weSBpcyBkZWNvdXBsZWQgZnJvbSBpbnRlciBWTSBjb21tdW5pY2F0aW9uCj4gPiA+ID4g PiA+IE5vIGlkZWEsIGRpZG4ndCBsb29rIGF0IGl0IGluIGRldGFpbC4KPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+IExvb2tzIHByZXR0eSBjb21wbGV4IGZyb20gYSBkaXN0YW50IHZpZXcuICBNYXli ZSBiZWNhdXNlIGl0IHRyaWVzIHRvCj4gPiA+ID4gPiA+IGJ1aWxkIGEgY29tbXVuaWNhdGlvbiBm cmFtZXdvcmsgdXNpbmcgZG1hLWJ1ZnMgaW5zdGVhZCBvZiBhIHNpbXBsZQo+ID4gPiA+ID4gPiBk bWEtYnVmIHBhc3NpbmcgbWVjaGFuaXNtLgo+ID4gPiA+IHdlIHN0YXJ0ZWQgd2l0aCBzaW1wbGUg ZG1hLWJ1ZiBzaGFyaW5nIGJ1dCByZWFsaXplZCB0aGVyZSBhcmUgbWFueQo+ID4gPiA+IHRoaW5n cyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGluIHJlYWwgdXNlLWNhc2UsIHNvIHdlIGFkZGVkIGNvbW11 bmljYXRpb24KPiA+ID4gPiAsIG5vdGlmaWNhdGlvbiBhbmQgZG1hLWJ1ZiBzeW5jaHJvbml6YXRp b24gdGhlbiByZS1zdHJ1Y3R1cmVkIGl0IHRvCj4gPiA+ID4gZnJvbnQtZW5kIGFuZCBiYWNrLWVu ZCAodGhpcyBtYWRlIHRoaW5ncyBtb3JlIGNvbXBpY2F0ZWQuLikgc2luY2UgWGVuCj4gPiA+ID4g d2FzIG5vdCBvdXIgb25seSB0YXJnZXQuIEFsc28sIHdlIHRob3VnaHQgcGFzc2luZyB0aGUgcmVm ZXJlbmNlIGZvciB0aGUKPiA+ID4gPiBidWZmZXIgKGh5cGVyX2RtYWJ1Zl9pZCkgaXMgbm90IHNl Y3VyZSBzbyBhZGRlZCB1dmVudCBtZWNoYW5pc20gbGF0ZXIuCj4gPiA+ID4gCj4gPiA+ID4gPiBZ ZXMsIEkgYW0gbG9va2luZyBhdCBpdCBub3csIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBmdWxs IHN0b3J5Cj4gPiA+ID4gPiBhbmQgaXRzIGltcGxlbWVudGF0aW9uLiBCVFcsIEludGVsIGd1eXMg d2VyZSBhYm91dCB0byBzaGFyZSBzb21lCj4gPiA+ID4gPiB0ZXN0IGFwcGxpY2F0aW9uIGZvciBo eXBlci1kbWFidWYsIG1heWJlIEkgaGF2ZSBtaXNzZWQgb25lLgo+ID4gPiA+ID4gSXQgY291bGQg cHJvYmFibHkgYmV0dGVyIGV4cGxhaW4gdGhlIHVzZS1jYXNlcyBhbmQgdGhlIGNvbXBsZXhpdHkK PiA+ID4gPiA+IHRoZXkgaGF2ZSBpbiBoeXBlci1kbWFidWYuCj4gPiA+ID4gT25lIGV4YW1wbGUg aXMgYWN0dWFsbHkgaW4gZ2l0aHViLiBJZiB5b3Ugd2FudCB0YWtlIGEgbG9vayBhdCBpdCwgcGxl YXNlCj4gPiA+ID4gdmlzaXQ6Cj4gPiA+ID4gCj4gPiA+ID4gaHR0cHM6Ly9naXRodWIuY29tL2Rv d25vci9saW51eF9oeXBlcl9kbWFidWZfdGVzdC90cmVlL3hlbi9zaW1wbGVfZXhwb3J0Cj4gPiA+ IFRoYW5rIHlvdSwgSSdsbCBoYXZlIGEgbG9vawo+ID4gPiA+ID4gPiBMaWtlIHhlbi16Y29weSBp dCBzZWVtcyB0byBkZXBlbmQgb24gdGhlIGlkZWEgdGhhdCB0aGUgaHlwZXJ2aXNvcgo+ID4gPiA+ ID4gPiBtYW5hZ2VzIGFsbCBtZW1vcnkgaXQgaXMgZWFzeSBmb3IgZ3Vlc3RzIHRvIHNoYXJlIHBh Z2VzIHdpdGggdGhlIGhlbHAgb2YKPiA+ID4gPiA+ID4gdGhlIGh5cGVydmlzb3IuCj4gPiA+ID4g PiBTbywgZm9yIHhlbi16Y29weSB3ZSB3ZXJlIG5vdCB0cnlpbmcgdG8gbWFrZSBpdCBnZW5lcmlj LAo+ID4gPiA+ID4gaXQganVzdCBzb2x2ZXMgZGlzcGxheSAoZHVtYikgemVyby1jb3B5aW5nIHVz ZS1jYXNlcyBmb3IgWGVuLgo+ID4gPiA+ID4gV2UgaW1wbGVtZW50ZWQgaXQgYXMgYSBEUk0gaGVs cGVyIGRyaXZlciBiZWNhdXNlIHdlIGNhbid0IHNlZSBhbnkKPiA+ID4gPiA+IG90aGVyIHVzZS1j YXNlcyBhcyBvZiBub3cuCj4gPiA+ID4gPiBGb3IgZXhhbXBsZSwgd2UgYWxzbyBoYXZlIFhlbiBw YXJhLXZpcnR1YWxpemVkIHNvdW5kIGRyaXZlciwgYnV0Cj4gPiA+ID4gPiBpdHMgYnVmZmVyIG1l bW9yeSB1c2FnZSBpcyBub3QgY29tcGFyYWJsZSB0byB3aGF0IGRpc3BsYXkgd2FudHMKPiA+ID4g PiA+IGFuZCBpdCB3b3JrcyBzb21ld2hhdCBkaWZmZXJlbnRseSAoZS5nLiB0aGVyZSBpcyBubyAi ZnJhbWUgZG9uZSIKPiA+ID4gPiA+IGV2ZW50LCBzbyBvbmUgY2FuJ3QgdGVsbCB3aGVuIHRoZSBz b3VuZCBidWZmZXIgY2FuIGJlICJmbGlwcGVkIikuCj4gPiA+ID4gPiBBdCB0aGUgc2FtZSB0aW1l LCB3ZSBkbyBub3QgdXNlIHZpcnRpby1ncHUsIHNvIHRoaXMgY291bGQgcHJvYmFibHkKPiA+ID4g PiA+IGJlIG9uZSBtb3JlIGNhbmRpZGF0ZSBmb3Igc2hhcmVkIGRtYS1idWZzIHNvbWUgZGF5Lgo+ ID4gPiA+ID4gPiAgICBXaGljaCBzaW1wbHkgaXNuJ3QgdGhlIGNhc2Ugb24ga3ZtLgo+ID4gPiA+ ID4gPiAKPiA+ID4gPiA+ID4gaHlwZXItZG1hYnVmIGFuZCB4ZW4temNvcHkgY291bGQgbWF5YmUg c2hhcmUgY29kZSwgb3IgaHlwZXItZG1hYnVmIGJ1aWxkCj4gPiA+ID4gPiA+IG9uIHRvcCBvZiB4 ZW4temNvcHkuCj4gPiA+ID4gPiBIbSwgSSBjYW4gaW1hZ2luZSB0aGF0OiB4ZW4temNvcHkgY291 bGQgYmUgYSBsaWJyYXJ5IGNvZGUgZm9yIGh5cGVyLWRtYWJ1Zgo+ID4gPiA+ID4gaW4gdGVybXMg b2YgaW1wbGVtZW50aW5nIGFsbCB0aGF0IHBhZ2Ugc2hhcmluZyBmdW4gaW4gbXVsdGlwbGUgZGly ZWN0aW9ucywKPiA+ID4gPiA+IGUuZy4gSG9zdC0+R3Vlc3QsIEd1ZXN0LT5Ib3N0LCBHdWVzdDwt Pkd1ZXN0Lgo+ID4gPiA+ID4gQnV0IEknbGwgbGV0IE1hdHQgYW5kIERvbmd3b24gdG8gY29tbWVu dCBvbiB0aGF0Lgo+ID4gPiA+IEkgdGhpbmsgd2UgY2FuIGRlZmluaXRlbHkgY29sbGFib3JhdGUu IEVzcGVjaWFsbHksIG1heWJlIHdlIGFyZSB1c2luZyBzb21lCj4gPiA+ID4gb3V0ZGF0ZWQgc2hh cmluZyBtZWNoYW5pc20vZ3JhbnQtdGFibGUgbWVjaGFuaXNtIGluIG91ciBYZW4gYmFja2VuZCAo dGhhbmtzCj4gPiA+ID4gZm9yIGJyaW5naW5nIHRoYXQgdXAgT2xla3NhbmRyKS4gSG93ZXZlciwg dGhlIHF1ZXN0aW9uIGlzIG9uY2Ugd2UgY29sbGFib3JhdGUKPiA+ID4gPiBzb21laG93LCBjYW4g eGVuLXpjb3B5J3MgdXNlY2FzZSB1c2UgdGhlIHN0YW5kYXJkIEFQSSB0aGF0IGh5cGVyX2RtYWJ1 Zgo+ID4gPiA+IHByb3ZpZGVzPyBJIGRvbid0IHRoaW5rIHdlIG5lZWQgZGlmZmVyZW50IElPQ1RM cyB0aGF0IGRvIHRoZSBzYW1lIGluIHRoZSBmaW5hbAo+ID4gPiA+IHNvbHV0aW9uLgo+ID4gPiA+ IAo+ID4gPiBJZiB5b3UgdGhpbmsgb2YgeGVuLXpjb3B5IGFzIGEgbGlicmFyeSAod2hpY2ggaW1w bGVtZW50cyBYZW4KPiA+ID4gZ3JhbnQgcmVmZXJlbmNlcyBtYW5nbGluZykgYW5kIERSTSBQUklN RSB3cmFwcGVyIG9uIHRvcCBvZiB0aGF0Cj4gPiA+IGxpYnJhcnksIHdlIGNhbiBwcm9iYWJseSBk ZWZpbmUgcHJvcGVyIEFQSSBmb3IgdGhhdCBsaWJyYXJ5LAo+ID4gPiBzbyBib3RoIHhlbi16Y29w eSBhbmQgaHlwZXItZG1hYnVmIGNhbiB1c2UgaXQuIFdoYXQgaXMgbW9yZSwgSSBhbQo+ID4gPiBh Ym91dCB0byBzdGFydCB1cHN0cmVhbWluZyBYZW4gcGFyYS12aXJ0dWFsaXplZCBzb3VuZCBkZXZp Y2UgZHJpdmVyIHNvb24sCj4gPiA+IHdoaWNoIGFsc28gdXNlcyBzaW1pbGFyIGNvZGUgYW5kIGdy ZWYgcGFzc2luZyBtZWNoYW5pc20gWzNdLgo+ID4gPiAoQWN0dWFsbHksIEkgd2FzIGFib3V0IHRv IHVwc3RyZWFtIGRybS94ZW4tZnJvbnQsIGRybS94ZW4temNvcHkgYW5kCj4gPiA+IHNuZC94ZW4t ZnJvbnQgYW5kIHRoZW4gcHJvcG9zZSBhIFhlbiBoZWxwZXIgbGlicmFyeSBmb3Igc2hhcmluZyBi aWcgYnVmZmVycywKPiA+ID4gc28gY29tbW9uIGNvZGUgb2YgdGhlIGFib3ZlIGRyaXZlcnMgY2Fu IHVzZSB0aGUgc2FtZSBjb2RlIHcvbyBjb2RlCj4gPiA+IGR1cGxpY2F0aW9uKQo+ID4gSSB0aGlu ayBpdCBpcyBwb3NzaWJsZSB0byB1c2UgeW91ciBmdW5jdGlvbnMgZm9yIG1lbW9yeSBzaGFyaW5n IHBhcnQgaW4KPiA+IGh5cGVyX2RtYWJ1ZidzIGJhY2tlbmQgKHRoaXMgJ2JhY2tlbmQnIG1lYW5z IHRoZSBsYXllciB0aGF0IGRvZXMgcGFnZSBzaGFyaW5nCj4gPiBhbmQgaW50ZXItdm0gY29tbXVu aWNhdGlvbiB3aXRoIHhlbi1zcGVjaWZpYyB3YXkuKSwgc28gd2h5IGRvbid0IHdlIHdvcmsgb24K PiA+ICJYZW4gaGVscGVyIGxpYnJhcnkgZm9yIHNoYXJpbmcgYmlnIGJ1ZmZlcnMiIGZpcnN0IHdo aWxlIHdlIGNvbnRpbnVlIG91cgo+ID4gZGlzY3Vzc2lvbiBvbiB0aGUgY29tbW9uIEFQSSBsYXll ciB0aGF0IGNhbiBjb3ZlciBhbnkgZG1hYnVmIHNoYXJpbmcgY2FzZXMuCj4gPiAKPiBXZWxsLCBJ IHdvdWxkIGxvdmUgd2UgcmV1c2UgdGhlIGNvZGUgdGhhdCBJIGhhdmUsIGJ1dCBJIGFsc28KPiB1 bmRlcnN0YW5kIHRoYXQgaXQgd2FzIGxpbWl0ZWQgYnkgbXkgdXNlLWNhc2VzLiBTbywgSSBkbyBu b3QKPiBpbnNpc3Qgd2UgaGF2ZSB0byA7KQo+IElmIHdlIHN0YXJ0IGRlc2lnbmluZyBhbmQgZGlz Y3Vzc2luZyBoeXBlci1kbWFidWYgcHJvdG9jb2wgd2Ugb2YgY291cnNlCj4gY2FuIHdvcmsgb24g dGhpcyBoZWxwZXIgbGlicmFyeSBpbiBwYXJhbGxlbC4KCkltbyBjb2RlIHJldXNlIGlzIG92ZXJy YXRlZC4gQWRkaW5nIG5ldyB1YXBpIGlzIHdoYXQgZnJlYWtzIG1lIG91dCBoZXJlCjotKQoKSWYg d2UgZW5kIHVwIHdpdGggZHVwbGljYXRlZCBpbXBsZW1lbnRhdGlvbnMsIGV2ZW4gaW4gdXBzdHJl YW0sIG1laCwgbm90CmdyZWF0LCBidXQgYWxzbyBvay4gTmV3IHVhcGksIGFuZCBpbiBhIHNpbWls YXIgd2F5LCBuZXcgaHlwZXJ2aXNvciBhcGkKbGlrZSB0aGUgZG1hLWJ1ZiBmb3J3YXJkaW5nIHRo YXQgaHlwZXJkbWFidWYgZG9lcyBpcyB0aGUga2luZCBvZiB0aGluZwp0aGF0IHdpbGwgbG9jayB1 cyBpbiBmb3IgMTArIHllYXJzIChpZiB3ZSBtYWtlIGEgbWlzdGFrZSkuCgo+ID4gPiBUaGFuayB5 b3UsCj4gPiA+IE9sZWtzYW5kcgo+ID4gPiAKPiA+ID4gUC5TLiBBbGwsIGlzIGl0IGEgZ29vZCBp ZGVhIHRvIG1vdmUgdGhpcyBvdXQgb2YgdWRtYWJ1ZiB0aHJlYWQgaW50byBhCj4gPiA+IGRlZGlj YXRlZCBvbmU/Cj4gPiBFaXRoZXIgd2F5IGlzIGZpbmUgd2l0aCBtZS4KPiBTbywgaWYgeW91IGNh biBzdGFydCBkZXNpZ25pbmcgdGhlIHByb3RvY29sIHdlIG1heSBoYXZlIGEgZGVkaWNhdGVkIG1h aWwKPiB0aHJlYWQgZm9yIHRoYXQuIEkgd2lsbCB0cnkgdG8gaGVscCB3aXRoIHRoZSBwcm90b2Nv bCBhcyBtdWNoIGFzIEkgY2FuCgpQbGVhc2UgZG9uJ3Qgc3RhcnQgd2l0aCB0aGUgcHJvdG9jb2wu IEluc3RlYWQgc3RhcnQgd2l0aCB0aGUgY29uY3JldGUKdXNlLWNhc2VzLCBhbmQgdGhlbiBmaWd1 cmUgb3V0IHdoeSBleGFjdGx5IHlvdSBuZWVkIG5ldyB1YXBpLiBPbmNlIHdlIGhhdmUKdGhhdCBh bnN3ZXJlZCwgd2UgY2FuIHN0YXJ0IHRoaW5raW5nIGFib3V0IGZsZXNoaW5nIG91dCB0aGUgZGV0 YWlscy4KCkNoZWVycywgRGFuaWVsCgo+IAo+ID4gPiA+ID4gPiBjaGVlcnMsCj4gPiA+ID4gPiA+ ICAgIEdlcmQKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiBUaGFuayB5b3UsCj4gPiA+ID4gPiBPbGVr c2FuZHIKPiA+ID4gPiA+IAo+ID4gPiA+ID4gUC5TLiBTb3JyeSBmb3IgbWFraW5nIHlvdXIgb3Jp Z2luYWwgbWFpbCB0aHJlYWQgdG8gZGlzY3VzcyB0aGluZ3MgbXVjaAo+ID4gPiA+ID4gYnJvYWRl ciB0aGFuIHlvdXIgUkZDLi4uCj4gPiA+ID4gPiAKPiA+ID4gWzFdIGh0dHBzOi8vZ2l0aHViLmNv bS94ZW4tdHJvb3BzL2Rpc3BsX2JlCj4gPiA+IFsyXSBodHRwczovL2VsaXhpci5ib290bGluLmNv bS9saW51eC92NC4xNi1yYzcvc291cmNlL2luY2x1ZGUveGVuL2ludGVyZmFjZS9pby9kaXNwbGlm LmgjTDQ4NAo+ID4gPiBbM10gaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvdjQuMTYt cmM3L3NvdXJjZS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vc25kaWYuaAo+ID4gPiAKPiBbMV0g aHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvdjQuMTYtcmM3L3NvdXJjZS9pbmNsdWRl L3hlbi9pbnRlcmZhY2UvaW8vZGlzcGxpZi5oCj4gWzJdCj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9q ZWN0Lm9yZy9hcmNoaXZlcy9odG1sL3hlbi1kZXZlbC8yMDE4LTA0L21zZzAwNjg1Lmh0bWwKPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApE YW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8v YmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK