From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [RfC PATCH] Add udmabuf misc device Date: Mon, 16 Apr 2018 13:14:17 +0300 Message-ID: <89b044da-8986-d361-f557-26331a3de317@gmail.com> 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> <20180416074302.GG31310@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x244.google.com (mail-wr0-x244.google.com [IPv6:2a00:1450:400c:c0c::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id DC0756E32F for ; Mon, 16 Apr 2018 10:14:21 +0000 (UTC) Received: by mail-wr0-x244.google.com with SMTP id z73so24352222wrb.0 for ; Mon, 16 Apr 2018 03:14:21 -0700 (PDT) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Dongwon Kim , Tomeu Vizoso , "Oleksandr_Andrushchenko@epam.com" , David Airlie , 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 T24gMDQvMTYvMjAxOCAxMjozMiBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiBPbiBNb24sIEFw ciAxNiwgMjAxOCBhdCAxMDoyMiBBTSwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28KPiA8YW5kcjIw MDBAZ21haWwuY29tPiB3cm90ZToKPj4gT24gMDQvMTYvMjAxOCAxMDo0MyBBTSwgRGFuaWVsIFZl dHRlciB3cm90ZToKPj4+IE9uIE1vbiwgQXByIDE2LCAyMDE4IGF0IDEwOjE2OjMxQU0gKzAzMDAs IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+Pj4+IE9uIDA0LzEzLzIwMTggMDY6Mzcg UE0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4+Pj4+IE9uIFdlZCwgQXByIDExLCAyMDE4IGF0IDA4 OjU5OjMyQU0gKzAzMDAsIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+Pj4+Pj4gT24g MDQvMTAvMjAxOCAwODoyNiBQTSwgRG9uZ3dvbiBLaW0gd3JvdGU6Cj4+Pj4+Pj4gT24gVHVlLCBB cHIgMTAsIDIwMTggYXQgMDk6Mzc6NTNBTSArMDMwMCwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28K Pj4+Pj4+PiB3cm90ZToKPj4+Pj4+Pj4gT24gMDQvMDYvMjAxOCAwOTo1NyBQTSwgRG9uZ3dvbiBL aW0gd3JvdGU6Cj4+Pj4+Pj4+PiBPbiBGcmksIEFwciAwNiwgMjAxOCBhdCAwMzozNjowM1BNICsw MzAwLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbwo+Pj4+Pj4+Pj4gd3JvdGU6Cj4+Pj4+Pj4+Pj4g T24gMDQvMDYvMjAxOCAwMjo1NyBQTSwgR2VyZCBIb2ZmbWFubiB3cm90ZToKPj4+Pj4+Pj4+Pj4g ICAgICAgSGksCj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+Pj4gSSBmYWlsIHRvIHNlZSBhbnkgY29t bW9uIGdyb3VuZCBmb3IgeGVuLXpjb3B5IGFuZCB1ZG1hYnVmIC4uLgo+Pj4+Pj4+Pj4+Pj4gRG9l cyB0aGUgYWJvdmUgbWVhbiB5b3UgY2FuIGFzc3VtZSB0aGF0IHhlbi16Y29weSBhbmQgdWRtYWJ1 Zgo+Pj4+Pj4+Pj4+Pj4gY2FuIGNvLWV4aXN0IGFzIHR3byBkaWZmZXJlbnQgc29sdXRpb25zPwo+ Pj4+Pj4+Pj4+PiBXZWxsLCB1ZG1hYnVmIHJvdXRlIGlzbid0IGZ1bGx5IGNsZWFyIHlldCwgYnV0 IHllcy4KPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gU2VlIGFsc28gZ3Z0IChpbnRlbCB2Z3B1KSwg d2hlcmUgdGhlIGh5cGVydmlzb3IgaW50ZXJmYWNlIGlzCj4+Pj4+Pj4+Pj4+IGFic3RyYWN0ZWQK Pj4+Pj4+Pj4+Pj4gYXdheSBpbnRvIGEgc2VwYXJhdGUga2VybmVsIG1vZHVsZXMgZXZlbiB0aG91 Z2ggbW9zdCBvZiB0aGUgYWN0dWFsCj4+Pj4+Pj4+Pj4+IHZncHUKPj4+Pj4+Pj4+Pj4gZW11bGF0 aW9uIGNvZGUgaXMgY29tbW9uLgo+Pj4+Pj4+Pj4+IFRoYW5rIHlvdSBmb3IgeW91ciBpbnB1dCwg SSdtIGp1c3QgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQKPj4+Pj4+Pj4+PiB3aGljaCBvZiB0aGUgdGhy ZWUgei1jb3B5IHNvbHV0aW9ucyBpbnRlcnNlY3QgYW5kIGhvdyBtdWNoCj4+Pj4+Pj4+Pj4+PiBB bmQgd2hhdCBhYm91dCBoeXBlci1kbWFidWY/Cj4+Pj4+Pj4+PiB4ZW4gei1jb3B5IHNvbHV0aW9u IGlzIHByZXR0eSBzaW1pbGFyIGZ1bmRhbWVudGFsbHkgdG8gaHlwZXJfZG1hYnVmCj4+Pj4+Pj4+ PiBpbiB0ZXJtcyBvZiB0aGVzZSBjb3JlIHNoYXJpbmcgZmVhdHVyZToKPj4+Pj4+Pj4+Cj4+Pj4+ Pj4+PiAxLiB0aGUgc2hhcmluZyBwcm9jZXNzIC0gaW1wb3J0IHByaW1lL2RtYWJ1ZiBmcm9tIHRo ZSBwcm9kdWNlciAtPgo+Pj4+Pj4+Pj4gZXh0cmFjdAo+Pj4+Pj4+Pj4gdW5kZXJseWluZyBwYWdl cyBhbmQgZ2V0IHRob3NlIHNoYXJlZCAtPiByZXR1cm4gcmVmZXJlbmNlcyBmb3IKPj4+Pj4+Pj4+ IHNoYXJlZCBwYWdlcwo+Pj4+Pj4+IEFub3RoZXIgdGhpbmcgaXMgZGFudmV0IHdhcyBraW5kIG9m IGFnYWluc3QgdG8gdGhlIGlkZWEgb2YgaW1wb3J0aW5nCj4+Pj4+Pj4gZXhpc3RpbmcKPj4+Pj4+ PiBkbWFidWYvcHJpbWUgYnVmZmVyIGFuZCBmb3J3YXJkIGl0IHRvIHRoZSBvdGhlciBkb21haW4g ZHVlIHRvCj4+Pj4+Pj4gc3luY2hyb25pemF0aW9uCj4+Pj4+Pj4gaXNzdWVzLiBIZSBwcm9wb3Nl ZCB0byBtYWtlIGh5cGVyX2RtYWJ1ZiBvbmx5IHdvcmsgYXMgYW4gZXhwb3J0ZXIgc28KPj4+Pj4+ PiB0aGF0IGl0Cj4+Pj4+Pj4gY2FuIGhhdmUgYSBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgYnVmZmVy LiBJIHRoaW5rIHdlIG5lZWQgdG8gdGFsayBhYm91dAo+Pj4+Pj4+IHRoaXMKPj4+Pj4+PiBmdXJ0 aGVyIGFzIHdlbGwuCj4+Pj4+PiBZZXMsIEkgc2F3IHRoaXMuIEJ1dCB0aGlzIGxpbWl0cyB0aGUg dXNlLWNhc2VzIHNvIG11Y2guCj4+Pj4+PiBGb3IgaW5zdGFuY2UsIHJ1bm5pbmcgQW5kcm9pZCBh cyBhIEd1ZXN0ICh3aGljaCB1c2VzIElPTiB0byBhbGxvY2F0ZQo+Pj4+Pj4gYnVmZmVycykgbWVh bnMgdGhhdCBmaW5hbGx5IEhXIGNvbXBvc2VyIHdpbGwgaW1wb3J0IGRtYS1idWYgaW50bwo+Pj4+ Pj4gdGhlIERSTSBkcml2ZXIuIFRoZW4sIGluIGNhc2Ugb2YgeGVuLWZyb250IGZvciBleGFtcGxl LCBpdCBuZWVkcyB0byBiZQo+Pj4+Pj4gc2hhcmVkIHdpdGggdGhlIGJhY2tlbmQgKEhvc3Qgc2lk ZSkuIE9mIGNvdXJzZSwgd2UgY2FuIGNoYW5nZQo+Pj4+Pj4gdXNlci1zcGFjZQo+Pj4+Pj4gdG8g bWFrZSB4ZW4tZnJvbnQgYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgKG1ha2UgaXQgZXhwb3J0ZXIpLCBi dXQgd2hhdCB3ZQo+Pj4+Pj4gdHJ5Cj4+Pj4+PiB0byBhdm9pZCBpcyB0byBjaGFuZ2UgdXNlci1z cGFjZSB3aGljaCBpbiBub3JtYWwgd29ybGQgd291bGQgaGF2ZQo+Pj4+Pj4gcmVtYWluCj4+Pj4+ PiB1bmNoYW5nZWQgb3RoZXJ3aXNlLgo+Pj4+Pj4gU28sIEkgZG8gdGhpbmsgd2UgaGF2ZSB0byBz dXBwb3J0IHRoaXMgdXNlLWNhc2UgYW5kIGp1c3QgaGF2ZSB0bwo+Pj4+Pj4gdW5kZXJzdGFuZAo+ Pj4+Pj4gdGhlIGNvbXBsZXhpdHkuCj4+Pj4+IEVybSwgd2h5IGRvIHlvdSBuZWVkIGltcG9ydGVy IGNhcGFiaWxpdHkgZm9yIHRoaXMgdXNlLWNhc2U/Cj4+Pj4+Cj4+Pj4+IGd1ZXN0MSAtPiBJT04g LT4geGVuLWZyb250IC0+IGh5cGVydmlzb3IgLT4gZ3Vlc3QgMiAtPiB4ZW4temNvcHkgZXhwb3Nl cwo+Pj4+PiB0aGF0IGRtYS1idWYgLT4gaW1wb3J0IHRvIHRoZSByZWFsIGRpc3BsYXkgaHcKPj4+ Pj4KPj4+Pj4gTm8gd2hlcmUgaW4gdGhpcyBjaGFpbiBkbyB5b3UgbmVlZCB4ZW4temNvcHkgdG8g YmUgYWJsZSB0byBpbXBvcnQgYQo+Pj4+PiBkbWEtYnVmICh3aXRoaW4gbGludXgsIGl0IG5lZWRz IHRvIGltcG9ydCBhIGJ1bmNoIG9mIHBhZ2VzIGZyb20gdGhlCj4+Pj4+IGh5cGVydmlzb3IpLgo+ Pj4+Pgo+Pj4+PiBOb3cgaWYgeW91ciBwbGFuIGlzIHRvIHVzZSB4ZW4temNvcHkgaW4gdGhlIGd1 ZXN0MSBpbnN0ZWFkIG9mIHhlbi1mcm9udCwKPj4+Pj4gdGhlbiB5b3UgaW5kZWVkIG5lZWQgdG8g aW1wb3J0Lgo+Pj4+IFRoaXMgaXMgdGhlIGV4YWN0IHVzZS1jYXNlIEkgd2FzIHJlZmVycmluZyB0 byB3aGlsZSBzYXlpbmcKPj4+PiB3ZSBuZWVkIHRvIGltcG9ydCBvbiBHdWVzdDEgc2lkZS4gSWYg aHlwZXItZG1hYnVmIGlzIHNvCj4+Pj4gZ2VuZXJpYyB0aGF0IHRoZXJlIGlzIG5vIHhlbi1mcm9u dCBpbiB0aGUgcGljdHVyZSwgdGhlbgo+Pj4+IGl0IG5lZWRzIHRvIGltcG9ydCBhIGRtYS1idWYs IHNvIGl0IGNhbiBiZSBleHBvcnRlZCBhdCBHdWVzdDIgc2lkZS4KPj4+Pj4gICAgIEJ1dCB0aGF0 IGltbyBkb2Vzbid0IG1ha2Ugc2Vuc2U6Cj4+Pj4+IC0geGVuLWZyb250IGdpdmVzIHlvdSBjbGVh cmx5IGRlZmluZWQgZmxpcCBldmVudHMgeW91IGNhbiBmb3J3YXJkIHRvIHRoZQo+Pj4+PiAgICAg IGh5cGVydmlzb3IuIHhlbi16Y29weSB3b3VsZCBuZWVkIHRvIGFkZCB0aGF0IGFnYWluLgo+Pj4+ IHhlbi16Y29weSBpcyBhIGhlbHBlciBkcml2ZXIgd2hpY2ggZG9lc24ndCBoYW5kbGUgcGFnZSBm bGlwcwo+Pj4+IGFuZCBpcyBub3QgYSBLTVMgZHJpdmVyIGFzIG9uZSBtaWdodCB0aGluayBvZjog dGhlIERSTSBVQVBJIGl0IHVzZXMgaXMKPj4+PiBqdXN0IHRvIGV4cG9ydCBhIGRtYS1idWYgYXMg YSBQUklNRSBidWZmZXIsIGJ1dCB0aGF0J3MgaXQuCj4+Pj4gRmxpcHBpbmcgZXRjLiBpcyBkb25l IGJ5IHRoZSBiYWNrZW5kIFsxXSwgbm90IHhlbi16Y29weS4KPj4+Pj4gICAgIFNhbWUgZm9yCj4+ Pj4+ICAgICAgaHlwZXJkbWFidWYgKGFuZCByZWFsbHkgd2UncmUgbm90IGdvaW5nIHRvIHNodWZm bGUgc3RydWN0IGRtYV9mZW5jZQo+Pj4+PiBvdmVyCj4+Pj4+ICAgICAgdGhlIHdpcmUgaW4gYSBn ZW5lcmljIGZhc2hpb24gYmV0d2VlbiBoeXBlcnZpc29yIGd1ZXN0cykuCj4+Pj4+Cj4+Pj4+IC0g eGVuLWZyb250IGFscmVhZHkgaGFzIHRoZSBpZGVhIG9mIHBpeGVsIGZvcm1hdCBmb3IgdGhlIGJ1 ZmZlciAoYW5kIGFueQo+Pj4+PiAgICAgIG90aGVyIG1ldGFkYXRhKS4gQWdhaW4sIHhlbi16Y29w eSBhbmQgaHlwZXJkbWFidWYgbGFjayB0aGF0LCB3b3VsZAo+Pj4+PiBuZWVkCj4+Pj4+ICAgICAg dG8gYWRkIGl0IHNob2Vob3JuZWQgaW4gc29tZWhvdy4KPj4+PiBBZ2FpbiwgaGVyZSB5b3UgYXJl IHRhbGtpbmcgb2Ygc29tZXRoaW5nIHdoaWNoIGlzIGltcGxlbWVudGVkIGluCj4+Pj4gWGVuIGRp c3BsYXkgYmFja2VuZCwgbm90IHhlbi16Y29weSwgZS5nLiBkaXNwbGF5IGJhY2tlbmQgY2FuCj4+ Pj4gaW1wbGVtZW50IHBhcmEtdmlydHVhbCBkaXNwbGF5IHcvbyB4ZW4temNvcHkgYXQgYWxsLCBi dXQgaW4gdGhpcyBjYXNlCj4+Pj4gdGhlcmUgaXMgYSBtZW1vcnkgY29weWluZyBmb3IgZWFjaCBm cmFtZS4gV2l0aCB0aGUgaGVscCBvZiB4ZW4temNvcHkKPj4+PiB0aGUgYmFja2VuZCBmZWVkcyB4 ZW4tZnJvbnQncyBidWZmZXJzIGRpcmVjdGx5IGludG8gR3Vlc3QyIERSTS9LTVMgb3IKPj4+PiBX ZXN0b24gb3Igd2hhdGV2ZXIgYXMgeGVuLXpjb3B5IGV4cG9ydHMgcmVtb3RlIGJ1ZmZlcnMgYXMg UFJJTUUgYnVmZmVycywKPj4+PiB0aHVzIG5vIGJ1ZmZlciBjb3B5aW5nIGlzIHJlcXVpcmVkLgo+ Pj4gV2h5IGRvIHlvdSBuZWVkIHRvIGNvcHkgb24gZXZlcnkgZnJhbWUgZm9yIHhlbi1mcm9udD8g SW4gdGhlIGFib3ZlCj4+PiBwaXBlbGluZSwgdXNpbmcgeGVuLWZyb250IEkgc2VlIDAgYXJjaGl0 ZWN0dXJhbCByZWFzb25zIHRvIGhhdmUgYSBjb3B5Cj4+PiBhbnl3aGVyZS4KPj4+Cj4+PiBUaGlz IHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBjb25mdXNpb24gd2UncmUgaGF2aW5nIGhlcmUu Cj4+IE9rLCBzbyBJJ2xsIHRyeSB0byBleHBsYWluOgo+PiAxLiB4ZW4tZnJvbnQgLSBwcm9kdWNl cyBhIGRpc3BsYXkgYnVmZmVyIHRvIGJlIHNob3duIGF0IEd1ZXN0Mgo+PiBieSB0aGUgYmFja2Vu ZCwgc2hhcmVzIGl0cyBncmFudCByZWZlcmVuY2VzIHdpdGggdGhlIGJhY2tlbmQKPj4gMi4geGVu LWZyb250IHNlbmRzIHBhZ2UgZmxpcCBldmVudCB0byB0aGUgYmFja2VuZCBzcGVjaWZ5aW5nIHRo ZQo+PiBidWZmZXIgaW4gcXVlc3Rpb24KPj4gMy4gQmFja2VuZCB0YWtlcyB0aGUgc2hhcmVkIGJ1 ZmZlciAod2hpY2ggaXMgb25seSBhIGJ1ZmZlciBtYXBwZWQgaW50bwo+PiBiYWNrZW5kJ3MgbWVt b3J5LCBpdCBpcyBub3QgYSBkbWEtYnVmL1BSSU1FIG9uZSkgYW5kIG1ha2VzIG1lbWNweSBmcm9t Cj4+IGl0IHRvIGEgbG9jYWwgZHVtYi9zdXJmYWNlCj4gV2h5IGRvIHlvdSBldmVuIGRvIHRoYXQ/ IFRoZSBjb3B5aW5nIGhlcmUgSSBtZWFuIC0gd2h5IGRvbid0IHlvdSBqdXN0Cj4gZGlyZWN0bHkg c2NhbiBvdXQgZnJvbSB0aGUgZ3JhbnQgcmVmZXJlbmNlcyB5b3UgcmVjZWl2ZWQgdGhyb3VnaCB0 aGUKPiBoeXBlcnZpc29yPwpQcm9iYWJseSB0aGUgY29uZnVzaW9uIGNvbWVzIGZyb20gdGhlIGZh Y3QgdGhhdCBLVk0gYW5kIFhlbgppbXBsZW1lbnQgdGhpbmdzIGRpZmZlcmVudGx5IChmb3IgZXhh bXBsZSwgb24gQVJNIHdlIGRvbid0IHVzZSBRRU1VIGF0IGFsbCkuClBsZWFzZSBzZWUgWzFdIGFu ZCBbMl0gZm9yIFhlbiBmcm9udGVuZC9iYWNrZW5kIHBsYWNlbWVudCBpbiB0aGUgcGljdHVyZS4K CldSVCB0byBbMl0geGVuLWZyb250IGlzIGEgUFYgZnJvbnQtZW5kIGRyaXZlciBydW5uaW5nIGlu IGd1ZXN0IE9TCmFuZCBYZW4gZGlzcGxheSBiYWNrZW5kIGlzIGEgdXNlci1zcGFjZSBhcHBsaWNh dGlvbiBydW5uaW5nIGluIERvbTAKKGluIHRoZSBwaWN0dXJlIFsyXSBiYWNrZW5kIHJ1bnMgYXMg YSBEb20wIGtlcm5lbCBkcml2ZXIpLgpTbywgdGhlIHBhcmEtdmlydHVhbGl6ZWQgZGV2aWNlIGlz IG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgaHlwZXJ2aXNvcgppdHNlbGYsIGJ1dCBhcyB1c2VyL2tl cm5lbC1zcGFjZSBwYWlyIGluIGNvcnJlc3BvbmRpbmcgZG9tYWlucy4KVGh1cywgd2hlbiB4ZW4t ZnJvbnQgc2hhcmVzIGdyYW50IHJlZmVyZW5jZXMgb2YgdGhlIHBhZ2VzIG9mIHRoZSBidWZmZXIK d2l0aCB0aGUgWGVuIGRpc3BsYXkgYmFja2VuZCAodXNlci1zcGFjZSkgdGhlIGxhdGVyIGNhbiBv bmx5IG1hcCB0aG9zZQpyZWZlcmVuY2VzIGludG8gRG9tMCBtZW1vcnkgdG8gbWVtY3B5IGludG8g c29tZSBsb2NhbCBkaXNwbGF5IGJ1ZmZlci9kdW1iLgpIZW5jZSwgaHlwZXJ2aXNvciBpcyBub3Qg aW4gdGhlIGVxdWF0aW9uIHdoaWxlIGFjdHVhbGx5IGltcGxlbWVudGluZwpwYXJhLXZpcnR1YWwg ZGlzcGxheSBkZXZpY2UsIGUuZy4gaXQgcHJvdmlkZXMgeW91IHdpdGggQVBJIHRvIHNoYXJlL21h cApwYWdlcywgYnV0IGl0IHdvbid0IGJlIHRoZSBlbnRpdHkgd2hpY2ggd2lsbCBpbXBsZW1lbnQg YWN0dWFsIHBhZ2UgZmxpcHMgCmV0Yy4KU28sIHRoaXMgaXMgd2hlcmUgeGVuLXpjb3B5IGNvbWVz IGludG8gdGhlIHBsYXkgKHJ1bnMgaW4gRG9tMCk6Cml0IG5vdCBvbmx5IG1hcHMgeGVuLWZyb250 J3MgZ3JhbnQgcmVmZXJlbmNlcyBpbnRvIERvbTAsIGJ1dCBhbHNvIGNyZWF0ZXMKYSBQUklNRSBi dWZmZXIsIHNvIHRoaXMgYnVmZmVyIGNhbiBiZSB1c2VkIGJ5IG90aGVyIERSTSBkZXZpY2VzL1dl c3RvbgpydW5uaW5nIGluIERvbTAuCj4gQWxzbyBJJ20gbm90IGNsZWFyIGluIHlvdXIgZXhhbXBs ZSB3aGljaCBzdGVwIGhhcHBlbnMgd2hlcmUgKGd1ZXN0IDEvMgo+IG9yIGh5cGVydmlzb3IpPwpT dGVwcyAxLDIgLSBHdWVzdDIsIGtlcm5lbCBzcGFjZQpTdGVwcyAzLTQgLSBHdWVzdDEsIERvbTAg dXNlci1zcGFjZQpUaGUgaHlwZXJ2aXNvciBoZXJlIG9ubHkgcHJvdmlkZXMgdHJhbnNwb3J0IGFu ZCBtZWFucyB0byBhY2Nlc3MgYnVmZmVycywKYWN0dWFsIGRpc3BsYXkvRFJNIHJlbGF0ZWQgY29k ZSBpcyBpbiB4ZW4tZnJvbnQgYW5kIERvbTAncyBkaXNwbGF5IGJhY2tlbmQKPj4gNC4gQmFja2Vu ZCBmbGlwcyB0aGF0IGxvY2FsIGR1bWIgYnVmZmVyL3N1cmZhY2UKPj4KPj4gSWYgSSBoYXZlIGEg eGVuLXpjb3B5IGhlbHBlciBkcml2ZXIgdGhlbiBJIGNhbiBhdm9pZCBkb2luZyBzdGVwIDMpOgo+ PiAxKSAyKSByZW1haW4gdGhlIHNhbWUgYXMgYWJvdmUKPj4gMykgSW5pdGlhbGx5IGZvciBhIG5l dyBkaXNwbGF5IGJ1ZmZlciwgYmFja2VuZCBjYWxscyB4ZW4temNvcHkgdG8gY3JlYXRlCj4+IGEg bG9jYWwgUFJJTUUgYnVmZmVyIGZyb20gdGhlIGdyYW50IHJlZmVyZW5jZXMgcHJvdmlkZWQgYnkg dGhlIHhlbi1mcm9udAo+PiB2aWEgZGlzcGxpZiBwcm90b2NvbCBbMV06IHdlIG5vdyBoYXZlIGhh bmRsZV96Y29weQo+PiA0KSBCYWNrZW5kIGV4cG9ydHMgdGhpcyBQUklNRSB3aXRoIEhBTkRMRV9U T19GRCBmcm9tIHhlbi16Y29weSBhbmQgaW1wb3J0cwo+PiBpdCBpbnRvIFdlc3Rvbi1LTVMvRFJN IG9yIHJlYWwgSFcgRFJNIGRyaXZlciB3aXRoIEZEX1RPX0hBTkRMRTogd2Ugbm93IGhhdmUKPj4g aGFuZGxlX2xvY2FsCj4+IDUpIE9uIHBhZ2UgZmxpcCBldmVudCBiYWNrZW5kIGZsaXBzIGxvY2Fs IFBSSU1FOiB1c2VzIGhhbmRsZV9sb2NhbCBmb3IgZmxpcHMKPj4KPj4+Pj4gT2ZjIHlvdSB3b24n dCBiZSBhYmxlIHRvIHNob3ZlbCBzb3VuZCBvciBtZWRpYSBzdHJlYW0gZGF0YSBvdmVyIHRvCj4+ Pj4+IGFub3RoZXIKPj4+Pj4gZ3Vlc3QgbGlrZSB0aGlzLCBidXQgdGhhdCdzIHdoYXQgeW91IGhh dmUgeGVuLXY0bCBhbmQgeGVuLXNvdW5kIG9yCj4+Pj4+IHdoYXRldmVyIGVsc2UgZm9yLiBUcnlp bmcgdG8gbWFrZSBhIG5ldyB1YXBpLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgbXVzdAo+Pj4+PiBi ZSBjaGFuZ2VkIGZvciBhbGwgdGhlIGRpZmZlcmVudCB1c2UtY2FzZSwgaW5zdGVhZCBvZiByZXVz aW5nIHN0YW5kYXJkCj4+Pj4+IGxpbnV4IGRyaXZlciB1YXBpICh3aGljaCBqdXN0IGhhcHBlbnMg dG8gc2VuZCB0aGUgZGF0YSB0byBhbm90aGVyCj4+Pj4+IGh5cGVydmlzb3IgZ3Vlc3QgaW5zdGVh ZCBvZiByZWFsIGh3KSBpbW8ganVzdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KPj4+Pj4KPj4+ Pj4gQWxzbywgYXQgbGVhc3QgZm9yIHRoZSBncHUgc3Vic3lzdGVtOiBBbnkgbmV3IHVhcGkgbXVz dCBoYXZlIGZ1bGwKPj4+Pj4gdXNlcnNwYWNlIGF2YWlsYWJsZSBmb3IgaXQsIHNlZToKPj4+Pj4K Pj4+Pj4KPj4+Pj4gaHR0cHM6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnL2RvY3MvZHJtL2dwdS9kcm0t dWFwaS5odG1sI29wZW4tc291cmNlLXVzZXJzcGFjZS1yZXF1aXJlbWVudHMKPj4+Pj4KPj4+Pj4g QWRkaW5nIG1vcmUgdWFwaSBpcyBkZWZpbml0ZWx5IHRoZSBtb3N0IHBhaW5mdWwgd2F5IHRvIGZp eCBhIHVzZS1jYXNlLgo+Pj4+PiBQZXJzb25hbGx5IEknZCBnbyBhcyBmYXIgYW5kIGFsc28gY2hh bmdlIHRoZSB4ZW4temNvcHkgc2lkZSBvbiB0aGUKPj4+Pj4gcmVjZWl2aW5nIGd1ZXN0IHRvIHVz ZSBzb21lIHN0YW5kYXJkIGxpbnV4IHVhcGkuIEUuZy4geW91IGNvdWxkIHdyaXRlIGFuCj4+Pj4+ IG91dHB1dCB2NGwgZHJpdmVyIHRvIHJlY2VpdmUgdGhlIGZyYW1lcyBmcm9tIGd1ZXN0MS4KPj4+ PiBTbywgd2Ugbm93IGtub3cgdGhhdCB4ZW4temNvcHkgd2FzIG5vdCBtZWFudCB0byBoYW5kbGUg cGFnZSBmbGlwcywKPj4+PiBidXQgdG8gaW1wbGVtZW50IG5ldyBVQVBJIHRvIGxldCB1c2VyLXNw YWNlIGNyZWF0ZSBidWZmZXJzIGVpdGhlcgo+Pj4+IGZyb20gR3Vlc3QyIGdyYW50IHJlZmVyZW5j ZXMgKHNvIGl0IGNhbiBiZSBleHBvcnRlZCB0byBHdWVzdDEpIG9yCj4+Pj4gb3RoZXIgd2F5IHJv dW5kLCBlLmcuIGNyZWF0ZSAoZnJvbSBHdWVzdDEgZ3JhbnQgcmVmZXJlbmNlcyB0byBleHBvcnQg dG8KPj4+PiBHdWVzdCAyKS4gRm9yIHRoYXQgcmVhc29uIGl0IGFkZHMgMiBJT0NUTHM6IGNyZWF0 ZSBidWZmZXIgZnJvbSBncmVmcwo+Pj4+IG9yIHByb2R1Y2UgZ3JlZnMgZm9yIHRoZSBidWZmZXIg Z2l2ZW4uCj4+Pj4gT25lIGFkZGl0aW9uYWwgSU9DVEwgaXMgdG8gd2FpdCBmb3IgdGhlIGJ1ZmZl ciB0byBiZSByZWxlYXNlZCBieQo+Pj4+IEd1ZXN0MiB1c2VyLXNwYWNlLgo+Pj4+IFRoYXQgYmVp bmcgc2FpZCwgSSBkb24ndCBxdWl0ZSBzZWUgaG93IHY0bCBjYW4gYmUgdXNlZCBoZXJlIHRvIGlt cGxlbWVudAo+Pj4+IFVBUEkgSSBuZWVkLgo+Pj4gVW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5 b3UgY2FuIG1ha2UgeGVuLWZyb250IHRvIHplcm9jb3B5IGZvciB0aGUKPj4+IGtlcm5lbC0+aHlw ZXJ2aXNvciBwYXRoLCB2NGwgY291bGQgYmUgbWFkZSB0byB3b3JrIGZvciB0aGUKPj4+IGh5cGVy dmlzb3ItPmtlcm5lbCBzaWRlIG9mIHRoZSBwaXBlbGluZS4KPj4+Cj4+PiBCdXQgaXQgc291bmRz IGxpa2Ugd2UgaGF2ZSBhIGNvbmZ1c2lvbiBhbHJlYWR5IG9uIHdoeSBvciB3aHkgbm90IHhlbi1m cm9udAo+Pj4gY2FuIG9yIGNhbm5vdCBkbyB6ZXJvY29weS4KPj4geGVuLWZyb250IHByb3ZpZGVz IGFuIGFycmF5IG9mIGdyYW50IHJlZmVyZW5jZXMgdG8gR3Vlc3QyIChiYWNrZW5kKS4KPj4gSXQn cyB1cCB0byBiYWNrZW5kIHdoYXQgaXQgZG9lcyB3aXRoIHRob3NlIGdyYW50IHJlZmVyZW5jZXMK Pj4gd2hpY2ggYXQgR3Vlc3QyIHNpZGUgYXJlIG5vdCBQUklNRSBvciBkbWEtYnVmLCBidXQganVz dCBhIHNldCBvZiBwYWdlcy4KPj4gVGhpcyBpcyB4ZW4temNvcHkgd2hpY2ggdHVybnMgdGhlc2Ug cGFnZXMgaW50byBhIFBSSU1FLiBXaGVuIHRoaXMgaXMgZG9uZQo+PiBiYWNrZW5kIGNhbiBub3cg dGVsbCBEUk0gZHJpdmVycyB0byB1c2UgdGhlIGJ1ZmZlciBpbiBEUk0gdGVybXMuCj4+Cj4+Pj4+ Pj4gZGFudmV0LCBjYW4geW91IGNvbW1lbnQgb24gdGhpcyB0b3BpYz8KPj4+Pj4+Pgo+Pj4+Pj4+ Pj4gMi4gdGhlIHBhZ2Ugc2hhcmluZyBtZWNoYW5pc20gLSBpdCB1c2VzIFhlbi1ncmFudC10YWJs ZS4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiBBbmQgdG8gZ2l2ZSB5b3UgYSBxdWljayBzdW1tYXJ5IG9m IGRpZmZlcmVuY2VzIGFzIGZhciBhcyBJCj4+Pj4+Pj4+PiB1bmRlcnN0YW5kCj4+Pj4+Pj4+PiBi ZXR3ZWVuIHR3byBpbXBsZW1lbnRhdGlvbnMgKHBsZWFzZSBjb3JyZWN0IG1lIGlmIEkgYW0gd3Jv bmcsCj4+Pj4+Pj4+PiBPbGVrc2FuZHIuKQo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IDEuIHhlbi16Y29w eSBpcyBEUk0gc3BlY2lmaWMgLSBjYW4gaW1wb3J0IG9ubHkgRFJNIHByaW1lIGJ1ZmZlcgo+Pj4+ Pj4+Pj4gd2hpbGUgaHlwZXJfZG1hYnVmIGNhbiBleHBvcnQgYW55IGRtYWJ1ZiByZWdhcmRsZXNz IG9mIG9yaWdpbmF0b3IKPj4+Pj4+Pj4gV2VsbCwgdGhpcyBpcyB0cnVlLiBBbmQgYXQgdGhlIHNh bWUgdGltZSB0aGlzIGlzIGp1c3QgYSBtYXR0ZXIKPj4+Pj4+Pj4gb2YgZXh0ZW5kaW5nIHRoZSBB UEk6IHhlbi16Y29weSBpcyBhIGhlbHBlciBkcml2ZXIgZGVzaWduZWQgZm9yCj4+Pj4+Pj4+IHhl bi1mcm9udC9iYWNrIHVzZS1jYXNlLCBzbyB0aGlzIGlzIHdoeSBpdCBvbmx5IGhhcyBEUk0gUFJJ TUUgQVBJCj4+Pj4+Pj4+PiAyLiB4ZW4temNvcHkgZG9lc24ndCBzZWVtIHRvIGhhdmUgZG1hLWJ1 ZiBzeW5jaHJvbml6YXRpb24gYmV0d2Vlbgo+Pj4+Pj4+Pj4gdHdvIFZNcwo+Pj4+Pj4+Pj4gd2hp bGUgKGFzIGRhbnZldCBjYWxsZWQgaXQgYXMgcmVtb3RlIGRtYWJ1ZiBhcGkgc2hhcmluZykKPj4+ Pj4+Pj4+IGh5cGVyX2RtYWJ1ZiBzZW5kcwo+Pj4+Pj4+Pj4gb3V0IHN5bmNocm9uaXphdGlvbiBt ZXNzYWdlIHRvIHRoZSBleHBvcnRpbmcgVk0gZm9yIHN5bmNocm9uaXphdGlvbi4KPj4+Pj4+Pj4g VGhpcyBpcyB0cnVlLiBBZ2FpbiwgdGhpcyBpcyBiZWNhdXNlIG9mIHRoZSB1c2UtY2FzZXMgaXQg Y292ZXJzLgo+Pj4+Pj4+PiBCdXQgaGF2aW5nIHN5bmNocm9uaXphdGlvbiBmb3IgYSBnZW5lcmlj IHNvbHV0aW9uIHNlZW1zIHRvIGJlIGEgZ29vZAo+Pj4+Pj4+PiBpZGVhLgo+Pj4+Pj4+IFllYWgs IHVuZGVyc3Rvb2QgeGVuLXpjb3B5IHdvcmtzIG9rIHdpdGggeW91ciB1c2UgY2FzZS4gQnV0IEkg YW0ganVzdAo+Pj4+Pj4+IGN1cmlvdXMKPj4+Pj4+PiBpZiBpdCBpcyBvayBub3QgdG8gaGF2ZSBh bnkgaW50ZXItZG9tYWluIHN5bmNocm9uaXphdGlvbiBpbiB0aGlzCj4+Pj4+Pj4gc2hhcmluZyBt b2RlbC4KPj4+Pj4+IFRoZSBzeW5jaHJvbml6YXRpb24gaXMgZG9uZSB3aXRoIGRpc3BsaWYgcHJv dG9jb2wgWzFdCj4+Pj4+Pj4gVGhlIGJ1ZmZlciBiZWluZyBzaGFyZWQgaXMgdGVjaG5pY2FsbHkg ZG1hLWJ1ZiBhbmQgb3JpZ2luYXRvciBuZWVkcyB0bwo+Pj4+Pj4+IGJlIGFibGUKPj4+Pj4+PiB0 byBrZWVwIHRyYWNrIG9mIGl0Lgo+Pj4+Pj4gQXMgSSBhbSB3b3JraW5nIGluIERSTSB0ZXJtcyB0 aGUgdHJhY2tpbmcgaXMgZG9uZSBieSB0aGUgRFJNIGNvcmUKPj4+Pj4+IGZvciBtZSBmb3IgZnJl ZS4gKFRoaXMgbWlnaHQgYmUgb25lIG9mIHRoZSByZWFzb25zIERhbmllbCBzZWVzIERSTQo+Pj4+ Pj4gYmFzZWQgaW1wbGVtZW50YXRpb24gZml0IHZlcnkgZ29vZCBmcm9tIGNvZGUtcmV1c2UgUE9W KS4KPj4+Pj4gSG0sIG5vdCBzdXJlIHdoYXQgdHJhY2tpbmcgeW91IHJlZmVyIHRvIGhlcmUgYWxs IC4uLiBJIGdvdCBsb3N0IGluIGFsbAo+Pj4+PiB0aGUKPj4+Pj4gcmVwbGllcyB3aGlsZSBjYXRj aGluZyB1cC4KPj4+Pj4KPj4+PiBJIHdhcyBqdXN0IHJlZmVycmluZyB0byBhY2NvdW50aW5nIHN0 dWZmIGFscmVhZHkgaW1wbGVtZW50ZWQgaW4gdGhlIERSTQo+Pj4+IGNvcmUsCj4+Pj4gc28gSSBk b24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGRvaW5nIHRoZSBzYW1lIGZvciBidWZmZXJzIHRvIHVu ZGVyc3RhbmQKPj4+PiB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkIGV0Yy4KPj4+Pj4+Pj4+IDMuIDEt bGV2ZWwgcmVmZXJlbmNlcyAtIHdoZW4gdXNpbmcgZ3JhbnQtdGFibGUgZm9yIHNoYXJpbmcgcGFn ZXMsCj4+Pj4+Pj4+PiB0aGVyZSB3aWxsCj4+Pj4+Pj4+PiBiZSBzYW1lICMgb2YgcmVmcyAoZWFj aCA4IGJ5dGUpCj4+Pj4+Pj4+IFRvIGJlIHByZWNpc2UsIGdyYW50IHJlZiBpcyA0IGJ5dGVzCj4+ Pj4+Pj4gWW91IGFyZSByaWdodC4gVGhhbmtzIGZvciBjb3JyZWN0aW9uLjspCj4+Pj4+Pj4KPj4+ Pj4+Pj4+IGFzICMgb2Ygc2hhcmVkIHBhZ2VzLCB3aGljaCBpcyBwYXNzZWQgdG8KPj4+Pj4+Pj4+ IHRoZSB1c2Vyc3BhY2UgdG8gYmUgc2hhcmVkIHdpdGggaW1wb3J0aW5nIFZNIGluIGNhc2Ugb2Yg eGVuLXpjb3B5Lgo+Pj4+Pj4+PiBUaGUgcmVhc29uIGZvciB0aGF0IGlzIHRoYXQgeGVuLXpjb3B5 IGlzIGEgaGVscGVyIGRyaXZlciwgZS5nLgo+Pj4+Pj4+PiB0aGUgZ3JhbnQgcmVmZXJlbmNlcyBj b21lIGZyb20gdGhlIGRpc3BsYXkgYmFja2VuZCBbMV0sIHdoaWNoCj4+Pj4+Pj4+IGltcGxlbWVu dHMKPj4+Pj4+Pj4gWGVuIGRpc3BsYXkgcHJvdG9jb2wgWzJdLiBTbywgZWZmZWN0aXZlbHkgdGhl IGJhY2tlbmQgZXh0cmFjdHMKPj4+Pj4+Pj4gcmVmZXJlbmNlcwo+Pj4+Pj4+PiBmcm9tIGZyb250 ZW5kJ3MgcmVxdWVzdHMgYW5kIHBhc3NlcyB0aG9zZSB0byB4ZW4temNvcHkgYXMgYW4gYXJyYXkK Pj4+Pj4+Pj4gb2YgcmVmcy4KPj4+Pj4+Pj4+ICAgICAgQ29tcGFyZWQKPj4+Pj4+Pj4+IHRvIHRo aXMsIGh5cGVyX2RtYWJ1ZiBkb2VzIG11bHRpcGxlIGxldmVsIGFkZHJlc3NpbmcgdG8gZ2VuZXJh dGUKPj4+Pj4+Pj4+IG9ubHkgb25lCj4+Pj4+Pj4+PiByZWZlcmVuY2UgaWQgdGhhdCByZXByZXNl bnRzIGFsbCBzaGFyZWQgcGFnZXMuCj4+Pj4+Pj4+IEluIHRoZSBwcm90b2NvbCBbMl0gb25seSBv bmUgcmVmZXJlbmNlIHRvIHRoZSBncmVmIGRpcmVjdG9yeSBpcwo+Pj4+Pj4+PiBwYXNzZWQKPj4+ Pj4+Pj4gYmV0d2VlbiBWTXMKPj4+Pj4+Pj4gKGFuZCB0aGUgZ3JlZiBkaXJlY3RvcnkgaXMgYSBz aW5nbGUtbGlua2VkIGxpc3Qgb2Ygc2hhcmVkIHBhZ2VzCj4+Pj4+Pj4+IGNvbnRhaW5pbmcKPj4+ Pj4+Pj4gYWxsCj4+Pj4+Pj4+IG9mIHRoZSBncmVmcyBvZiB0aGUgYnVmZmVyKS4KPj4+Pj4+PiBv aywgZ29vZCB0byBrbm93LiBJIHdpbGwgbG9vayBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBt b3JlIGRldGFpbHMKPj4+Pj4+PiBidXQgaXMKPj4+Pj4+PiB0aGlzIGdyZWYgZGlyZWN0b3J5IChj aGFpbmVkIGdyZWZzKSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYW55Cj4+Pj4+Pj4g Z2VuZXJhbAo+Pj4+Pj4+IG1lbW9yeSBzaGFyaW5nIHVzZSBjYXNlIG9yIGlzIGl0IGpzdXQgZm9y IHhlbi1kaXNwbGF5IChpbiBjdXJyZW50IGNvZGUKPj4+Pj4+PiBiYXNlKT8KPj4+Pj4+IE5vdCB0 byBtaXNsZWFkIHlvdTogb25lIGdyYW50IHJlZiBpcyBwYXNzZWQgdmlhIGRpc3BsaWYgcHJvdG9j b2wsCj4+Pj4+PiBidXQgdGhlIHBhZ2UgaXQncyByZWZlcmVuY2luZyBjb250YWlucyB0aGUgcmVz dCBvZiB0aGUgZ3JhbnQgcmVmcy4KPj4+Pj4+Cj4+Pj4+PiBBcyB0byBpZiB0aGlzIGNhbiBiZSB1 c2VkIGZvciBhbnkgbWVtb3J5OiB5ZXMuIEl0IGlzIHRoZSBzYW1lIGZvcgo+Pj4+Pj4gc25kaWYg YW5kIGRpc3BsaWYgWGVuIHByb3RvY29scywgYnV0IGRlZmluZWQgdHdpY2UgYXMgc3RyaWN0bHkg c3BlYWtpbmcKPj4+Pj4+IHNuZGlmIGFuZCBkaXNwbGlmIGFyZSB0d28gc2VwYXJhdGUgcHJvdG9j b2xzLgo+Pj4+Pj4KPj4+Pj4+IFdoaWxlIHJldmlld2luZyB5b3VyIFJGQyB2MiBvbmUgb2YgdGhl IGNvbW1lbnRzIEkgaGFkIFsyXSB3YXMgdGhhdCBpZgo+Pj4+Pj4gd2UKPj4+Pj4+IGNhbiBzdGFy dCBmcm9tIGRlZmluaW5nIHN1Y2ggYSBnZW5lcmljIHByb3RvY29sIGZvciBoeXBlci1kbWFidWYu Cj4+Pj4+PiBJdCBjYW4gYmUgYSBoZWFkZXIgZmlsZSwgd2hpY2ggbm90IG9ubHkgaGFzIHRoZSBk ZXNjcmlwdGlvbiBwYXJ0Cj4+Pj4+PiAod2hpY2ggdGhlbiBiZWNvbWUgYSBwYXJ0IG9mIERvY3Vt ZW50YXRpb24vLi4ucnN0IGZpbGUpLCBidXQgYWxzbwo+Pj4+Pj4gZGVmaW5lcwo+Pj4+Pj4gYWxs IHRoZSByZXF1aXJlZCBjb25zdGFudHMgZm9yIHJlcXVlc3RzLCByZXNwb25zZXMsIGRlZmluZXMg bWVzc2FnZQo+Pj4+Pj4gZm9ybWF0cywKPj4+Pj4+IHN0YXRlIGRpYWdyYW1zIGV0Yy4gYWxsIGF0 IG9uZSBwbGFjZS4gT2YgY291cnNlIHRoaXMgcHJvdG9jb2wgbXVzdCBub3QKPj4+Pj4+IGJlCj4+ Pj4+PiBYZW4gc3BlY2lmaWMsIGJ1dCBiZSBPUy9oeXBlcnZpc29yIGFnbm9zdGljLgo+Pj4+Pj4g SGF2aW5nIHRoYXQgd2lsbCB0cmlnZ2VyIGEgbmV3IHJvdW5kIG9mIGRpc2N1c3Npb24sIHNvIHdl IGhhdmUgaXQgYWxsCj4+Pj4+PiBkZXNpZ25lZAo+Pj4+Pj4gYW5kIGRpc2N1c3NlZCBiZWZvcmUg d2Ugc3RhcnQgaW1wbGVtZW50aW5nLgo+Pj4+Pj4KPj4+Pj4+IEJlc2lkZXMgdGhlIHByb3RvY29s IHdlIGhhdmUgdG8gZGVzaWduIFVBUEkgcGFydCBhcyB3ZWxsIGFuZCBtYWtlIHN1cmUKPj4+Pj4+ IHRoZSBoeXBlci1kbWFidWYgaXMgbm90IG9ubHkgYWNjZXNzaWJsZSBmcm9tIHVzZXItc3BhY2Us IGJ1dCB0aGVyZSB3aWxsCj4+Pj4+PiBiZQo+Pj4+Pj4gbnVtYmVyCj4+Pj4+PiBvZiBrZXJuZWwt c3BhY2UgdXNlcnMgYXMgd2VsbC4KPj4+Pj4gQWdhaW4sIHdoeSBkbyB5b3Ugd2FudCB0byBjcmVh dGUgbmV3IHVhcGkgZm9yIHRoaXM/IEdpdmVuIHRoZSB2ZXJ5Cj4+Pj4+IHN0cmljdAo+Pj4+PiBy ZXF1aXJlbWVudHMgd2UgaGF2ZSBmb3IgbmV3IHVhcGkgKHNlZSBhYm92ZSBsaW5rKSwgaXQncyB0 aGUgdG91Z2hlc3QKPj4+Pj4gd2F5Cj4+Pj4+IHRvIGdldCBhbnkga2luZCBvZiBzdXBwb3J0IGlu Lgo+Pj4+IEkgZG8gdW5kZXJzdGFuZCB0aGF0IGFkZGluZyBuZXcgVUFQSSBpcyBub3QgZ29vZCBm b3IgbWFueSByZWFzb25zLgo+Pj4+IEJ1dCBoZXJlIEkgd2FzIG1lYW5pbmcgdGhhdCBjdXJyZW50 IGh5cGVyLWRtYWJ1ZiBkZXNpZ24gaXMKPj4+PiBvbmx5IHVzZXItc3BhY2Ugb3JpZW50ZWQsIGUu Zy4gaXQgcHJvdmlkZXMgbnVtYmVyIG9mIElPQ1RMcyB0byBkbyBhbGwKPj4+PiB0aGUgd29yay4g QnV0IEkgbmVlZCBhIHdheSB0byBhY2Nlc3MgdGhlIHNhbWUgZnJvbSB0aGUga2VybmVsLCBzbywg Zm9yCj4+Pj4gZXhhbXBsZSwKPj4+PiBzb21lIG90aGVyIHBhcmEtdmlydHVhbCBkcml2ZXIgY2Fu IGV4cG9ydC9pbXBvcnQgZG1hLWJ1Ziwgbm90IG9ubHkKPj4+PiB1c2VyLXNwYWNlLgo+Pj4gSWYg eW91IG5lZWQgYW4gaW1wb3J0LWV4cG9ydCBoZWxwZXIgbGlicmFyeSwganVzdCBtZXJnZSBpdC4g RG8gbm90IGF0dGFjaAo+Pj4gYW55IHVhcGkgdG8gaXQsIGp1c3QgdGhlIGludGVybmFsIGhlbHBl cnMuCj4+Pgo+Pj4gTXVjaCwgbXVjaCwgbXVjaCBlYXNpZXIgdG8gbGFuZC4KPj4gVGhpcyBjYW4g YmUgZG9uZSwgYnV0IGFnYWluLCBJIHdpbGwgbmVlZCBzb21lIGVudGl0eSB3aGljaAo+PiBiYWNr ZW5kIG1heSB1c2UgdG8gY29udmVydCB4ZW4tZnJvbnQncyBncmFudCByZWZlcmVuY2VzIGludG8K Pj4gYSBQUklNRSBidWZmZXIsIGhlbmNlIHRoZXJlIGlzIFVBUEkgZm9yIHRoYXQuIEluIG90aGVy IHdvcmRzLAo+PiBJJ2xsIG5lZWQgYSB0aGluZXIgeGVuLXpjb3B5IHdoaWNoIHdpbGwgaW1wbGVt ZW50IHRoZSBzYW1lIFVBUEkKPj4gYW5kIHVzZSB0aGF0IGxpYnJhcnkgZm9yIFhlbiByZWxhdGVk IHN0dWZmLgo+Pgo+PiBUaGUgY29uZnVzaW9uIG1heSBhbHNvIGNvbWUgZnJvbSB0aGUgZmFjdCB0 aGF0IHRoZSBiYWNrZW5kIGlzCj4+IGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiwgbm90IGEga2Vy bmVsIG1vZHVsZSAod2UgaGF2ZSAyIG1vZGVzCj4+IG9mIGl0cyBvcGVyYXRpb24gYXMgb2Ygbm93 OiBEUk0gbWFzdGVyIG9yIFdlc3RvbiBjbGllbnQpLCBzbwo+PiBpdCBuZWVkcyBhIHdheSB0byB0 YWxrIHRvIHRoZSBrZXJuZWwuCj4gU28gdGhpcyBpcyBlbnRpcmVseSBhIG1lYW5zIHRvIGltcGxl bWVudCB0aGUgdmlydHVhbCB4ZW4gZGV2aWNlIGluCj4gZG9tMCAob3Igd2hpY2hldmVyIGd1ZXN0 IGltcGxlbWVudHMgaXQpPwo+Cj4gSSdtIGV4dGVybmFsbHkgY29uZnVzZWQgYWJvdXQgd2hhdCB5 b3UgbWVhbiB3aXRoICJiYWNrZW5kIiwgc2luY2UKPiB4ZW4tZnJvbnQgYWxzbyBoYXMgYmFja2Vu ZCBjb2RlLiBCdXQgdGhhdCBiYWNrZW5kIGNvZGUgbGl2ZXMgaW4gdGhlCj4gc2FtZSBndWVzdCBv cyBpbWFnZSAoYWZhaWN0IGF0IGxlYXN0KSwgc2luY2UgaXQgZG9lcyBkaXJlY3QgZnVuY3Rpb24K PiBjYWxscy4KeGVuLWZyb250IGhhcyBubyBiYWNrZW5kIGNvZGUsIGJ1dCBvbmx5IGhhcyBjb2Rl IHdoaWNoIGFsbG93cyBpdAp0byBjcmVhdGUgYSBkdW1iIGJ1ZmZlciBmcm9tIHRoZSBncmFudCBy ZWZlcmVuY2VzIHByb3ZpZGVkIGJ5IHRoZQpiYWNrZW5kLgo+IFBsZWFzZSBiZSBtb3JlIHNwZWNp ZmljIGluIHdoYXQgeW91IG1lYW4gaW5zdGVhZCBvZiBqdXN0ICJiYWNrZW5kIiwKPiB0aGF0J3Mg cmVhbGx5IGNvbmZ1c2luZy4KSG9wZSBbMl0gYmV0dGVyIGV4cGxhaW5zIHRoaXMKPgo+IEJ1dCBl c3NlbnRpYWxseSB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBlcXVpdmFsZW50IG9mIHdoYXQgcWVt dSBkb2VzCj4gZm9yIGt2bSwgYW5kIHRoYXQncyBlbnRpcmVseSBub3QgbXkgcHJvYmxlbS4gTm90 IHJlYWxseSBhIGdwdQo+IHN1YnN5c3RlbSBwcm9ibGVtIEkgdGhpbmsuIEp1c3QgdGFsayB3aXRo IHRoZSB4ZW4gaHlwZXJ2aXNvciBwZW9wbGUKPiBhYm91dCBob3cgZXhhY3RseSB0aGV5IHdhbnQg dG8gZ28gYWJvdXQgY29udmVydGluZyBncmFudCB0YWJsZXMgdG8KPiBkbWEtYnVmLCBzbyB0aGF0 IHlvdXIgdmlydHVhbCBodyBiYWNrZW5kIGluIHVzZXJzcGFjZSBjYW4gbWFrZSB1c2Ugb2YKPiBp dC4KVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHRoZSBkaXNwbGF5IGJhY2tlbmQgdGhlbiB3aWxs IG5lZWQKdG8gdGFsayB0byBEUk0uIEFuZCB3aGF0IGlzIHRoZSBVQVBJIGZvciB0aGF0PyBSaWdo dCwgUFJJTUUKYnVmZmVycy4KPiBBbmQgdGhlbiBtZXJnZSBpdCBzb21ld2hlcmUgaW4gdGhlIHhl biBkaXJlY3Rvcmllcy4gU2luY2UgdGhlCj4gZ3JhbnQgdGFibGVzIGFuZCBldmVyeXRoaW5nIGlz IHZlcnkgeGVuIHNwZWNpZmljLCBJIGRvbid0IHRoaW5rCj4gdGhlcmUncyBtdWNoIHBvaW50IGlu IHRyeWluZyB0byBoYXZlIGEgZmFrZSBnZW5lcmljIHVhcGkgdGhhdCBwcmV0ZW5kcwo+IHRvIHdv cmsgb24gb3RoZXIgaHlwZXJ2aXNvcnMsIGFzIGxvbmcgYXMgdGhleSdyZSBYZW4gOi0pCj4KPiBB bmQgeW91IHByb2JhYmx5IGhhdmUgbm8gbmVlZCBmb3IgYWxsIHRoZSBjYWNoaW5nL2dlbmVyYWwg Ym9vay1rZWVwaW5nCj4gZHJtX3ByaW1lIGRvZXMgKGl0J3MgYWxsIGluIHVzZXJzcGFjZSBJIGd1 ZXNzLCBleGNlcHQgZm9yIHRoZSBtYWdpYwo+IGNvbnZlcnNpb24gZnJvbSBncmFudCByZWZlcmVu Y2VzIHRvIGEgZG1hX2J1ZikuIFNvIHRoZXJlJ3Mgbm8gcG9pbnQKPiB0cnlpbmcgdG8gcmV1c2Ug Y29kZSBpbiBkcm1fcHJpbWUuYy4KPgo+IEFsc28sIHRoaXMgc2hvdWxkIG1ha2UgaXQgdG9ucyBl YXNpZXIgdG8gcmV1c2UgeGVuLXpjb3B5IGZvcgo+IHNvdW5kL3dpcmVsZXNzL3Y0bCBiYWNrZW5k cy4KPgo+Pj4+PiBUaGF0J3Mgd2h5IEkgaGFkIGVzc2VudGlhbGx5IHplcm8gYmlnIHF1ZXN0aW9u cyBmb3IgeGVuLWZyb250IChleGNlcHQKPj4+Pj4gc29tZQo+Pj4+PiBpbXBsZW1lbnRhdGlvbiBp bXByb3ZlbWVudHMsIGFuZCBzdHVmZiB0byBtYWtlIHN1cmUgeGVuLWZyb250IGFjdHVhbGx5Cj4+ Pj4+IGltcGxlbWVudHMgdGhlIHJlYWwgdWFwaSBzZW1hbnRpY3MgaW5zdGVhZCBvZiBpdHMgb3du KSwgYW5kIHdoeSBJJ20KPj4+Pj4gYXNraW5nCj4+Pj4+IG11Y2ggbW9yZSBxdWVzdGlvbnMgb24g dGhpcyBzdHVmZiBoZXJlLgo+Pj4+Pgo+Pj4+Pj4+Pj4gNC4gaW50ZXIgVk0gbWVzc2FnaW5nICho eXBlX2RtYWJ1ZiBvbmx5KSAtIGh5cGVyX2RtYWJ1ZiBoYXMgaW50ZXItdm0KPj4+Pj4+Pj4+IG1z Zwo+Pj4+Pj4+Pj4gY29tbXVuaWNhdGlvbiBkZWZpbmVkIGZvciBkbWFidWYgc3luY2hyb25pemF0 aW9uIGFuZCBwcml2YXRlIGRhdGEKPj4+Pj4+Pj4+IChtZXRhCj4+Pj4+Pj4+PiBpbmZvIHRoYXQg TWF0dCBSb3BlciBtZW50aW9uZWQpIGV4Y2hhbmdlLgo+Pj4+Pj4+PiBUaGlzIGlzIHRydWUsIHhl bi16Y29weSBoYXMgbm8gbWVhbnMgZm9yIGludGVyIFZNIHN5bmMgYW5kIG1ldGEtZGF0YSwKPj4+ Pj4+Pj4gc2ltcGx5IGJlY2F1c2UgaXQgZG9lc24ndCBoYXZlIGFueSBjb2RlIGZvciBpbnRlciBW TSBleGNoYW5nZSBpbiBpdCwKPj4+Pj4+Pj4gZS5nLiB0aGUgaW50ZXIgVk0gcHJvdG9jb2wgaXMg aGFuZGxlZCBieSB0aGUgYmFja2VuZCBbMV0uCj4+Pj4+Pj4+PiA1LiBkcml2ZXItdG8tZHJpdmVy IG5vdGlmaWNhdGlvbiAoaHlwZXJfZG1hYnVmIG9ubHkpIC0gaW1wb3J0aW5nIFZNCj4+Pj4+Pj4+ PiBnZXRzCj4+Pj4+Pj4+PiBub3RpZmllZCB3aGVuIG5ld2RtYWJ1ZiBpcyBleHBvcnRlZCBmcm9t IG90aGVyIFZNIC0gdWV2ZW50IGNhbiBiZQo+Pj4+Pj4+Pj4gb3B0aW9uYWxseQo+Pj4+Pj4+Pj4g Z2VuZXJhdGVkIHdoZW4gdGhpcyBoYXBwZW5zLgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IDYuIHN0cnVj dHVyZSAtIGh5cGVyX2RtYWJ1ZiBpcyB0YXJnZXR0aW5nIHRvIHByb3ZpZGUgYSBnZW5lcmljCj4+ Pj4+Pj4+PiBzb2x1dGlvbiBmb3IKPj4+Pj4+Pj4+IGludGVyLWRvbWFpbiBkbWFidWYgc2hhcmlu ZyBmb3IgbW9zdCBoeXBlcnZpc29ycywgd2hpY2ggaXMgd2h5IGl0Cj4+Pj4+Pj4+PiBoYXMgdHdv Cj4+Pj4+Pj4+PiBsYXllcnMgYXMgbWF0dHJvcGUgbWVudGlvbmVkLCBmcm9udC1lbmQgdGhhdCBj b250YWlucyBzdGFuZGFyZCBBUEkKPj4+Pj4+Pj4+IGFuZCBiYWNrZW5kCj4+Pj4+Pj4+PiB0aGF0 IGlzIHNwZWNpZmljIHRvIGh5cGVydmlzb3IuCj4+Pj4+Pj4+IEFnYWluLCB4ZW4temNvcHkgaXMg ZGVjb3VwbGVkIGZyb20gaW50ZXIgVk0gY29tbXVuaWNhdGlvbgo+Pj4+Pj4+Pj4+PiBObyBpZGVh LCBkaWRuJ3QgbG9vayBhdCBpdCBpbiBkZXRhaWwuCj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+IExv b2tzIHByZXR0eSBjb21wbGV4IGZyb20gYSBkaXN0YW50IHZpZXcuICBNYXliZSBiZWNhdXNlIGl0 IHRyaWVzCj4+Pj4+Pj4+Pj4+IHRvCj4+Pj4+Pj4+Pj4+IGJ1aWxkIGEgY29tbXVuaWNhdGlvbiBm cmFtZXdvcmsgdXNpbmcgZG1hLWJ1ZnMgaW5zdGVhZCBvZiBhIHNpbXBsZQo+Pj4+Pj4+Pj4+PiBk bWEtYnVmIHBhc3NpbmcgbWVjaGFuaXNtLgo+Pj4+Pj4+Pj4gd2Ugc3RhcnRlZCB3aXRoIHNpbXBs ZSBkbWEtYnVmIHNoYXJpbmcgYnV0IHJlYWxpemVkIHRoZXJlIGFyZSBtYW55Cj4+Pj4+Pj4+PiB0 aGluZ3Mgd2UgbmVlZCB0byBjb25zaWRlciBpbiByZWFsIHVzZS1jYXNlLCBzbyB3ZSBhZGRlZAo+ Pj4+Pj4+Pj4gY29tbXVuaWNhdGlvbgo+Pj4+Pj4+Pj4gLCBub3RpZmljYXRpb24gYW5kIGRtYS1i dWYgc3luY2hyb25pemF0aW9uIHRoZW4gcmUtc3RydWN0dXJlZCBpdCB0bwo+Pj4+Pj4+Pj4gZnJv bnQtZW5kIGFuZCBiYWNrLWVuZCAodGhpcyBtYWRlIHRoaW5ncyBtb3JlIGNvbXBpY2F0ZWQuLikg c2luY2UKPj4+Pj4+Pj4+IFhlbgo+Pj4+Pj4+Pj4gd2FzIG5vdCBvdXIgb25seSB0YXJnZXQuIEFs c28sIHdlIHRob3VnaHQgcGFzc2luZyB0aGUgcmVmZXJlbmNlIGZvcgo+Pj4+Pj4+Pj4gdGhlCj4+ Pj4+Pj4+PiBidWZmZXIgKGh5cGVyX2RtYWJ1Zl9pZCkgaXMgbm90IHNlY3VyZSBzbyBhZGRlZCB1 dmVudCBtZWNoYW5pc20KPj4+Pj4+Pj4+IGxhdGVyLgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+PiBZZXMs IEkgYW0gbG9va2luZyBhdCBpdCBub3csIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBmdWxsIHN0 b3J5Cj4+Pj4+Pj4+Pj4gYW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4gQlRXLCBJbnRlbCBndXlzIHdl cmUgYWJvdXQgdG8gc2hhcmUgc29tZQo+Pj4+Pj4+Pj4+IHRlc3QgYXBwbGljYXRpb24gZm9yIGh5 cGVyLWRtYWJ1ZiwgbWF5YmUgSSBoYXZlIG1pc3NlZCBvbmUuCj4+Pj4+Pj4+Pj4gSXQgY291bGQg cHJvYmFibHkgYmV0dGVyIGV4cGxhaW4gdGhlIHVzZS1jYXNlcyBhbmQgdGhlIGNvbXBsZXhpdHkK Pj4+Pj4+Pj4+PiB0aGV5IGhhdmUgaW4gaHlwZXItZG1hYnVmLgo+Pj4+Pj4+Pj4gT25lIGV4YW1w bGUgaXMgYWN0dWFsbHkgaW4gZ2l0aHViLiBJZiB5b3Ugd2FudCB0YWtlIGEgbG9vayBhdCBpdCwK Pj4+Pj4+Pj4+IHBsZWFzZQo+Pj4+Pj4+Pj4gdmlzaXQ6Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4KPj4+ Pj4+Pj4+IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3dub3IvbGludXhfaHlwZXJfZG1hYnVmX3Rlc3Qv dHJlZS94ZW4vc2ltcGxlX2V4cG9ydAo+Pj4+Pj4+PiBUaGFuayB5b3UsIEknbGwgaGF2ZSBhIGxv b2sKPj4+Pj4+Pj4+Pj4gTGlrZSB4ZW4temNvcHkgaXQgc2VlbXMgdG8gZGVwZW5kIG9uIHRoZSBp ZGVhIHRoYXQgdGhlIGh5cGVydmlzb3IKPj4+Pj4+Pj4+Pj4gbWFuYWdlcyBhbGwgbWVtb3J5IGl0 IGlzIGVhc3kgZm9yIGd1ZXN0cyB0byBzaGFyZSBwYWdlcyB3aXRoIHRoZQo+Pj4+Pj4+Pj4+PiBo ZWxwIG9mCj4+Pj4+Pj4+Pj4+IHRoZSBoeXBlcnZpc29yLgo+Pj4+Pj4+Pj4+IFNvLCBmb3IgeGVu LXpjb3B5IHdlIHdlcmUgbm90IHRyeWluZyB0byBtYWtlIGl0IGdlbmVyaWMsCj4+Pj4+Pj4+Pj4g aXQganVzdCBzb2x2ZXMgZGlzcGxheSAoZHVtYikgemVyby1jb3B5aW5nIHVzZS1jYXNlcyBmb3Ig WGVuLgo+Pj4+Pj4+Pj4+IFdlIGltcGxlbWVudGVkIGl0IGFzIGEgRFJNIGhlbHBlciBkcml2ZXIg YmVjYXVzZSB3ZSBjYW4ndCBzZWUgYW55Cj4+Pj4+Pj4+Pj4gb3RoZXIgdXNlLWNhc2VzIGFzIG9m IG5vdy4KPj4+Pj4+Pj4+PiBGb3IgZXhhbXBsZSwgd2UgYWxzbyBoYXZlIFhlbiBwYXJhLXZpcnR1 YWxpemVkIHNvdW5kIGRyaXZlciwgYnV0Cj4+Pj4+Pj4+Pj4gaXRzIGJ1ZmZlciBtZW1vcnkgdXNh Z2UgaXMgbm90IGNvbXBhcmFibGUgdG8gd2hhdCBkaXNwbGF5IHdhbnRzCj4+Pj4+Pj4+Pj4gYW5k IGl0IHdvcmtzIHNvbWV3aGF0IGRpZmZlcmVudGx5IChlLmcuIHRoZXJlIGlzIG5vICJmcmFtZSBk b25lIgo+Pj4+Pj4+Pj4+IGV2ZW50LCBzbyBvbmUgY2FuJ3QgdGVsbCB3aGVuIHRoZSBzb3VuZCBi dWZmZXIgY2FuIGJlICJmbGlwcGVkIikuCj4+Pj4+Pj4+Pj4gQXQgdGhlIHNhbWUgdGltZSwgd2Ug ZG8gbm90IHVzZSB2aXJ0aW8tZ3B1LCBzbyB0aGlzIGNvdWxkIHByb2JhYmx5Cj4+Pj4+Pj4+Pj4g YmUgb25lIG1vcmUgY2FuZGlkYXRlIGZvciBzaGFyZWQgZG1hLWJ1ZnMgc29tZSBkYXkuCj4+Pj4+ Pj4+Pj4+ICAgICAgIFdoaWNoIHNpbXBseSBpc24ndCB0aGUgY2FzZSBvbiBrdm0uCj4+Pj4+Pj4+ Pj4+Cj4+Pj4+Pj4+Pj4+IGh5cGVyLWRtYWJ1ZiBhbmQgeGVuLXpjb3B5IGNvdWxkIG1heWJlIHNo YXJlIGNvZGUsIG9yIGh5cGVyLWRtYWJ1Zgo+Pj4+Pj4+Pj4+PiBidWlsZAo+Pj4+Pj4+Pj4+PiBv biB0b3Agb2YgeGVuLXpjb3B5Lgo+Pj4+Pj4+Pj4+IEhtLCBJIGNhbiBpbWFnaW5lIHRoYXQ6IHhl bi16Y29weSBjb3VsZCBiZSBhIGxpYnJhcnkgY29kZSBmb3IKPj4+Pj4+Pj4+PiBoeXBlci1kbWFi dWYKPj4+Pj4+Pj4+PiBpbiB0ZXJtcyBvZiBpbXBsZW1lbnRpbmcgYWxsIHRoYXQgcGFnZSBzaGFy aW5nIGZ1biBpbiBtdWx0aXBsZQo+Pj4+Pj4+Pj4+IGRpcmVjdGlvbnMsCj4+Pj4+Pj4+Pj4gZS5n LiBIb3N0LT5HdWVzdCwgR3Vlc3QtPkhvc3QsIEd1ZXN0PC0+R3Vlc3QuCj4+Pj4+Pj4+Pj4gQnV0 IEknbGwgbGV0IE1hdHQgYW5kIERvbmd3b24gdG8gY29tbWVudCBvbiB0aGF0Lgo+Pj4+Pj4+Pj4g SSB0aGluayB3ZSBjYW4gZGVmaW5pdGVseSBjb2xsYWJvcmF0ZS4gRXNwZWNpYWxseSwgbWF5YmUg d2UgYXJlCj4+Pj4+Pj4+PiB1c2luZyBzb21lCj4+Pj4+Pj4+PiBvdXRkYXRlZCBzaGFyaW5nIG1l Y2hhbmlzbS9ncmFudC10YWJsZSBtZWNoYW5pc20gaW4gb3VyIFhlbiBiYWNrZW5kCj4+Pj4+Pj4+ PiAodGhhbmtzCj4+Pj4+Pj4+PiBmb3IgYnJpbmdpbmcgdGhhdCB1cCBPbGVrc2FuZHIpLiBIb3dl dmVyLCB0aGUgcXVlc3Rpb24gaXMgb25jZSB3ZQo+Pj4+Pj4+Pj4gY29sbGFib3JhdGUKPj4+Pj4+ Pj4+IHNvbWVob3csIGNhbiB4ZW4temNvcHkncyB1c2VjYXNlIHVzZSB0aGUgc3RhbmRhcmQgQVBJ IHRoYXQKPj4+Pj4+Pj4+IGh5cGVyX2RtYWJ1Zgo+Pj4+Pj4+Pj4gcHJvdmlkZXM/IEkgZG9uJ3Qg dGhpbmsgd2UgbmVlZCBkaWZmZXJlbnQgSU9DVExzIHRoYXQgZG8gdGhlIHNhbWUgaW4KPj4+Pj4+ Pj4+IHRoZSBmaW5hbAo+Pj4+Pj4+Pj4gc29sdXRpb24uCj4+Pj4+Pj4+Pgo+Pj4+Pj4+PiBJZiB5 b3UgdGhpbmsgb2YgeGVuLXpjb3B5IGFzIGEgbGlicmFyeSAod2hpY2ggaW1wbGVtZW50cyBYZW4K Pj4+Pj4+Pj4gZ3JhbnQgcmVmZXJlbmNlcyBtYW5nbGluZykgYW5kIERSTSBQUklNRSB3cmFwcGVy IG9uIHRvcCBvZiB0aGF0Cj4+Pj4+Pj4+IGxpYnJhcnksIHdlIGNhbiBwcm9iYWJseSBkZWZpbmUg cHJvcGVyIEFQSSBmb3IgdGhhdCBsaWJyYXJ5LAo+Pj4+Pj4+PiBzbyBib3RoIHhlbi16Y29weSBh bmQgaHlwZXItZG1hYnVmIGNhbiB1c2UgaXQuIFdoYXQgaXMgbW9yZSwgSSBhbQo+Pj4+Pj4+PiBh Ym91dCB0byBzdGFydCB1cHN0cmVhbWluZyBYZW4gcGFyYS12aXJ0dWFsaXplZCBzb3VuZCBkZXZp Y2UgZHJpdmVyCj4+Pj4+Pj4+IHNvb24sCj4+Pj4+Pj4+IHdoaWNoIGFsc28gdXNlcyBzaW1pbGFy IGNvZGUgYW5kIGdyZWYgcGFzc2luZyBtZWNoYW5pc20gWzNdLgo+Pj4+Pj4+PiAoQWN0dWFsbHks IEkgd2FzIGFib3V0IHRvIHVwc3RyZWFtIGRybS94ZW4tZnJvbnQsIGRybS94ZW4temNvcHkgYW5k Cj4+Pj4+Pj4+IHNuZC94ZW4tZnJvbnQgYW5kIHRoZW4gcHJvcG9zZSBhIFhlbiBoZWxwZXIgbGli cmFyeSBmb3Igc2hhcmluZyBiaWcKPj4+Pj4+Pj4gYnVmZmVycywKPj4+Pj4+Pj4gc28gY29tbW9u IGNvZGUgb2YgdGhlIGFib3ZlIGRyaXZlcnMgY2FuIHVzZSB0aGUgc2FtZSBjb2RlIHcvbyBjb2Rl Cj4+Pj4+Pj4+IGR1cGxpY2F0aW9uKQo+Pj4+Pj4+IEkgdGhpbmsgaXQgaXMgcG9zc2libGUgdG8g dXNlIHlvdXIgZnVuY3Rpb25zIGZvciBtZW1vcnkgc2hhcmluZyBwYXJ0Cj4+Pj4+Pj4gaW4KPj4+ Pj4+PiBoeXBlcl9kbWFidWYncyBiYWNrZW5kICh0aGlzICdiYWNrZW5kJyBtZWFucyB0aGUgbGF5 ZXIgdGhhdCBkb2VzIHBhZ2UKPj4+Pj4+PiBzaGFyaW5nCj4+Pj4+Pj4gYW5kIGludGVyLXZtIGNv bW11bmljYXRpb24gd2l0aCB4ZW4tc3BlY2lmaWMgd2F5LiksIHNvIHdoeSBkb24ndCB3ZQo+Pj4+ Pj4+IHdvcmsgb24KPj4+Pj4+PiAiWGVuIGhlbHBlciBsaWJyYXJ5IGZvciBzaGFyaW5nIGJpZyBi dWZmZXJzIiBmaXJzdCB3aGlsZSB3ZSBjb250aW51ZQo+Pj4+Pj4+IG91cgo+Pj4+Pj4+IGRpc2N1 c3Npb24gb24gdGhlIGNvbW1vbiBBUEkgbGF5ZXIgdGhhdCBjYW4gY292ZXIgYW55IGRtYWJ1ZiBz aGFyaW5nCj4+Pj4+Pj4gY2FzZXMuCj4+Pj4+Pj4KPj4+Pj4+IFdlbGwsIEkgd291bGQgbG92ZSB3 ZSByZXVzZSB0aGUgY29kZSB0aGF0IEkgaGF2ZSwgYnV0IEkgYWxzbwo+Pj4+Pj4gdW5kZXJzdGFu ZCB0aGF0IGl0IHdhcyBsaW1pdGVkIGJ5IG15IHVzZS1jYXNlcy4gU28sIEkgZG8gbm90Cj4+Pj4+ PiBpbnNpc3Qgd2UgaGF2ZSB0byA7KQo+Pj4+Pj4gSWYgd2Ugc3RhcnQgZGVzaWduaW5nIGFuZCBk aXNjdXNzaW5nIGh5cGVyLWRtYWJ1ZiBwcm90b2NvbCB3ZSBvZiBjb3Vyc2UKPj4+Pj4+IGNhbiB3 b3JrIG9uIHRoaXMgaGVscGVyIGxpYnJhcnkgaW4gcGFyYWxsZWwuCj4+Pj4+IEltbyBjb2RlIHJl dXNlIGlzIG92ZXJyYXRlZC4gQWRkaW5nIG5ldyB1YXBpIGlzIHdoYXQgZnJlYWtzIG1lIG91dCBo ZXJlCj4+Pj4+IDotKQo+Pj4+Pgo+Pj4+PiBJZiB3ZSBlbmQgdXAgd2l0aCBkdXBsaWNhdGVkIGlt cGxlbWVudGF0aW9ucywgZXZlbiBpbiB1cHN0cmVhbSwgbWVoLCBub3QKPj4+Pj4gZ3JlYXQsIGJ1 dCBhbHNvIG9rLiBOZXcgdWFwaSwgYW5kIGluIGEgc2ltaWxhciB3YXksIG5ldyBoeXBlcnZpc29y IGFwaQo+Pj4+PiBsaWtlIHRoZSBkbWEtYnVmIGZvcndhcmRpbmcgdGhhdCBoeXBlcmRtYWJ1ZiBk b2VzIGlzIHRoZSBraW5kIG9mIHRoaW5nCj4+Pj4+IHRoYXQgd2lsbCBsb2NrIHVzIGluIGZvciAx MCsgeWVhcnMgKGlmIHdlIG1ha2UgYSBtaXN0YWtlKS4KPj4+Pj4KPj4+Pj4+Pj4gVGhhbmsgeW91 LAo+Pj4+Pj4+PiBPbGVrc2FuZHIKPj4+Pj4+Pj4KPj4+Pj4+Pj4gUC5TLiBBbGwsIGlzIGl0IGEg Z29vZCBpZGVhIHRvIG1vdmUgdGhpcyBvdXQgb2YgdWRtYWJ1ZiB0aHJlYWQgaW50byBhCj4+Pj4+ Pj4+IGRlZGljYXRlZCBvbmU/Cj4+Pj4+Pj4gRWl0aGVyIHdheSBpcyBmaW5lIHdpdGggbWUuCj4+ Pj4+PiBTbywgaWYgeW91IGNhbiBzdGFydCBkZXNpZ25pbmcgdGhlIHByb3RvY29sIHdlIG1heSBo YXZlIGEgZGVkaWNhdGVkCj4+Pj4+PiBtYWlsCj4+Pj4+PiB0aHJlYWQgZm9yIHRoYXQuIEkgd2ls bCB0cnkgdG8gaGVscCB3aXRoIHRoZSBwcm90b2NvbCBhcyBtdWNoIGFzIEkgY2FuCj4+Pj4+IFBs ZWFzZSBkb24ndCBzdGFydCB3aXRoIHRoZSBwcm90b2NvbC4gSW5zdGVhZCBzdGFydCB3aXRoIHRo ZSBjb25jcmV0ZQo+Pj4+PiB1c2UtY2FzZXMsIGFuZCB0aGVuIGZpZ3VyZSBvdXQgd2h5IGV4YWN0 bHkgeW91IG5lZWQgbmV3IHVhcGkuIE9uY2Ugd2UKPj4+Pj4gaGF2ZQo+Pj4+PiB0aGF0IGFuc3dl cmVkLCB3ZSBjYW4gc3RhcnQgdGhpbmtpbmcgYWJvdXQgZmxlc2hpbmcgb3V0IHRoZSBkZXRhaWxz Lgo+Pj4+IE9uIG15IHNpZGUgdGhlcmUgYXJlIG9ubHkgMiB1c2UtY2FzZXMsIEd1ZXN0MiBvbmx5 Ogo+Pj4+IDEuIENyZWF0ZSBhIFBSSU1FIChkbWEtYnVmKSBmcm9tIGdyYW50IHJlZmVyZW5jZXMK Pj4+PiAyLiBDcmVhdGUgZ3JhbnQgcmVmZXJlbmNlcyBmcm9tIFBSSU1FIChkbWEtYnVmKQo+Pj4g U28gdGhlc2UgZ3JhbnQgcmVmZXJlbmNlcywgYXJlIHRob3NlIHVzZXJzcGFjZSB2aXNpYmxlIHRo aW5ncz8KPj4gWWVzLCB0aGUgdXNlci1zcGFjZSBiYWNrZW5kIHJlY2VpdmVzIHRob3NlIGZyb20g eGVuLWZyb250IHZpYSBbMV0KPj4KPj4+IEkgdGhvdWdodAo+Pj4gdGhlIGdyYW50IHJlZmVyZW5j ZXMgd2FzIGp1c3QgdGhlIGtlcm5lbC9oeXBlcnZpc29yIGludGVybmFsIG1hZ2ljIHRvIG1ha2UK Pj4+IHRoaXMgYWxsIHdvcms/Cj4+IFNvLCBJIGNhbiBtYXAgdGhlIGdyYW50IHJlZmVyZW5jZXMg ZnJvbSB1c2VyLXNwYWNlLCBidXQgSSB3b24ndAo+PiBiZSBhYmxlIHRvIHR1cm4gdGhvc2UgaW50 byBhIFBSSU1FIGJ1ZmZlci4gU28sIHRoZSBvbmx5IHVzZSBvZiB0aG9zZQo+PiB3L28geGVuLXpj b3B5IGlzIHRvIG1hcCBncmFudCByZWZzIGFuZCBjb3B5IGludG8gcmVhbCBIVyBkdW1iIG9uIGV2 ZXJ5IHBhZ2UKPj4gZmxpcC4KPiBPaywgdGhhdCBleHBsYWlucy4gSSB0aG91Z2h0IHlvdXIgY3Vy cmVudCB4ZW4tc2lkZSBpbXBsZW1lbnRhdGlvbiBmb3IKPiB4ZW4tZnJvbnQgaXMgYWxyZWFkeSBt YWtpbmcgYWxsIHRoYXQgc3R1ZmYgaGFwcGVuLiBCdXQgSSdtIHN0aWxsIG5vdAo+IHN1cmUgZ2l2 ZW4gYWxsIHRoZSBjb25mdXNpbmcgdGFsayBhYm91dCBiYWNrLWVuZCB3ZSBoYXZlIGluIHRoZXNl Cj4gdGhyZWFkcyAoaHlwZXJkbWFidWYgcGVvcGxlIGFsc28gdGFsa2VkIGFib3V0IGRpZmZlcmVu dCBiYWNrZW5kcyBmb3IKPiBkaWZmZXJlbnQgaHlwZXJ2aXNvcnMsIEkgZ3Vlc3MgdGhhdCdzIGEg ZGlmZmVyZW50IGtpbmQgb2YgYmFja2VuZD8pLgpIb3BlIHRoZSBleHBsYW5hdGlvbiBhYm92ZSBt YWtlcyBpdCBhbGwgY2xlYXJlci4KUGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBzdGlsbCB3YW50 IG1lIHRvIGVsYWJvcmF0ZSBtb3JlCj4gLURhbmllbApbMV0gaHR0cHM6Ly93aWtpLnhlbi5vcmcv d2lraS9QYXJhdmlydHVhbGl6YXRpb25fKFBWKQpbMl0gaHR0cHM6Ly93aWtpLnhlbi5vcmcvd2lr aS9GaWxlOlhlblBWLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK