From mboxrd@z Thu Jan 1 00:00:00 1970 From: moinejf@free.fr (Jean-Francois Moine) Date: Fri, 17 May 2013 19:40:23 +0200 Subject: [RFC 0/8] rmk's Dove DRM/TDA19988 Cubox driver In-Reply-To: <20130517120115.GF18614@n2100.arm.linux.org.uk> References: <20130516192510.GV18614@n2100.arm.linux.org.uk> <20130517133345.7c1368f5@armhf> <20130517120115.GF18614@n2100.arm.linux.org.uk> Message-ID: <20130517194023.0c385ea0@armhf> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Fri, 17 May 2013 13:01:15 +0100 Russell King - ARM Linux wrote: > I already said - I don't support DT. I don't run any DT based ARM > devices, so I have no experience with DT. What I care more about > is a working cubox platform, which afaik DT still can't offer yet. I like the DT concept. All the job I did on the Cubox is based on DT, even when I was still using the aweful Marvell and NXP drivers. I have nothing which is Cubox specific in my kernel, but the driver modules. > > - CMA helper > > > > You don't use DRM_KMS_CMA_HELPER and DRM_GEM_CMA_HELPER which would > > simplify some code. > > Possibly, but the biggest win for me is having cacheable gem objects. > CMA will be a retrograde step for those. I did not think yet about the possible problems which could be raised when the output of the video decoding engine, vMeta, will be the LCD overlay plane. > > - device tree > > > > Our driver depends on the DT and, by this way, it may be used for > > various boards (Cubox, DB-MV88AP510 Development Board, CompuLab > > CM-A510 Board..). Especially, in the Cubox, only a HDMI screen may be > > connected, while the display controller permits connection of a smart > > panel (port A) and a VGA screen (port B). > > I only have a Cubox, so I can't test anything but HDMI. Sebastian has other Dove based machine(s). > Given that there's big questions about the polarity of signals coming > out of the Armada 510 (with the invert bits 0, are the syncs positive > or negative?) I wouldn't like to lead anyone up the path of thinking > that this driver supports anything but the tested HDMI scenario yet. > > As that information is not in any of the Armada 510 TRMs, and can only > be discovered by physically probing the signals with a scope... that's > on my todo list when I feel like dismantling the Cubox and getting the > soldering iron out to separate the two boards so I can get access to > the signals. Yes, from the beginning, Solidrun did not give us any information about their hardware..., nor about their software! It seems Rabeeh is only interested by a closed XBMC. > I've already tried to explain this to Sebastian on IRC, and kept getting > nonsense back from him. "You need to program the whole chain". Yes, > but that makes no sense to the question I was asking. > > The reason is this: > +-----------------------------+ +------------------------+ > | Armada510 | | TDA19988 | > | LCD controller ---> switch ---------> switch --> processing | > | VSYNC/HSYNC | | | > +-----------------------------+ +------------------------+ > > The issue is that each 'switch' point is capable of inverting the sync > signal. If you program both identically then you end up with inversion > following another inversion. Which means no inversion. That's why > I've found Sebastian's answers to be much less than helpful on this > point. > > What I have found with the NXP TDA19988 driver is that you need to get > the input syncs to the TDA19988 set to the correct polarity for the > TDA19988, which _isn't_ what is advertised in the EDID. The TDA19988 > then has its own processing internally which places the appropriate > sync codes onto the output data stream. > > In some cases, getting this wrong shifts the displayed image by a few > pixels/lines. In other cases you get no output or invalid output which > isn't recognised by the connected device. Right. But I found that using Rob's tda988x driver gives me a full image on my TV set while with NXP's driver, I had more than 20 pixels lost on each side (left, right, top and bottom). [snip] > > - module loading (si5351, tda998x) > > > > As our driver is loaded by the Cubox DT, and as the auxilliary drivers > > (external clock, HDMI transmitter) may also be modules, a > > synchronization mechanism (inspired by the tegra drm driver) permits > > the driver to start when all the other drivers are also started. > > The lack of Si5351 already gets tested on every cubox boot I do. That > causes probe deferal, which allows the driver to properly start when > it becomes ready. [snip] That's what we have. I added an escape mechanism in case the si5351 is not present (I was waiting for the driver to be in the kernel). In this case, after a first -EPROBEDEFER, the LCD works with either AXI or the LCD PLL (both work fine with my TV set at 1920x1080p). [snip] > > - hardware cursor > > > > Our driver always proposes the HWC 32 (RGBA 64x64). > > Hardware cursor support is pretty useless. > > In RGBA mode, it's not 64x64 but you get the choice of either 64x32 or > 32x64. This is useless for Xorg's purposes, where it really wants a > 64x64 cursor. And the XF86 Xorg backend really wants RGBA for hardware > cursor, not 2bpp. So my conclusion is that hardware cursor is not worth > any effort and I've a good mind to strip that out from my driver (which > will simplify a few places.) > > I've played with the idea of reducing a RGBA cursor down to 2bpp mode > where we can fit the required size in, but that doesn't work very well. > > Just because the hardware does something doesn't mean you should write > code for it! :) Maybe I did not explain correctly: the colored cursor maybe RGB888 + transparency (64x64) or full ARGB (64x32 or 32x64). I coded the first case. And, yes, I better like a hardware cursor: it asks for less computation, and I get it immediately at graphic starting time! [snip] > > - video overlay > > > > Same as above: the code is in our driver (overlay plane), but it is > > not tested. > > We as a family, have watched many hours of video on mine. :) I wrote the drm driver because there was no easy way to use the video decoding engine with vlc and the Marvell's drivers. Now that the driver runs, the next step was to extend the 'modesetting' X server module to handle the overlay planes (I wonder why nobody did it yet). But, if you already have something running, I'd be glad to get it... [snip] > > What do you think about merging? > > Yes, I think merging the two together would probably be sane. :) OK. The first step is "DT or not DT"? For me, the DT is more flexible (one or two LCDs, smart panel definition, display controller or not..) and permits easy inclusion of out of tree drivers as the private VPU and GPU ones. -- Ken ar c'henta? | ** Breizh ha Linux atav! ** Jef | http://moinejf.free.fr/ From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jean-Francois Moine Subject: Re: [RFC 0/8] rmk's Dove DRM/TDA19988 Cubox driver Date: Fri, 17 May 2013 19:40:23 +0200 Message-ID: <20130517194023.0c385ea0@armhf> References: <20130516192510.GV18614@n2100.arm.linux.org.uk> <20130517133345.7c1368f5@armhf> <20130517120115.GF18614@n2100.arm.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20130517120115.GF18614@n2100.arm.linux.org.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Russell King - ARM Linux Cc: Jason Cooper , David Airlie , dri-devel@lists.freedesktop.org, Rob Clark , Darren Etheridge , linux-arm-kernel@lists.infradead.org, Sebastian Hesselbarth List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCAxNyBNYXkgMjAxMyAxMzowMToxNSArMDEwMApSdXNzZWxsIEtpbmcgLSBBUk0gTGlu dXggPGxpbnV4QGFybS5saW51eC5vcmcudWs+IHdyb3RlOgoKPiBJIGFscmVhZHkgc2FpZCAtIEkg ZG9uJ3Qgc3VwcG9ydCBEVC4gIEkgZG9uJ3QgcnVuIGFueSBEVCBiYXNlZCBBUk0KPiBkZXZpY2Vz LCBzbyBJIGhhdmUgbm8gZXhwZXJpZW5jZSB3aXRoIERULiAgV2hhdCBJIGNhcmUgbW9yZSBhYm91 dAo+IGlzIGEgd29ya2luZyBjdWJveCBwbGF0Zm9ybSwgd2hpY2ggYWZhaWsgRFQgc3RpbGwgY2Fu J3Qgb2ZmZXIgeWV0LgoKSSBsaWtlIHRoZSBEVCBjb25jZXB0LiBBbGwgdGhlIGpvYiBJIGRpZCBv biB0aGUgQ3Vib3ggaXMgYmFzZWQgb24gRFQsCmV2ZW4gd2hlbiBJIHdhcyBzdGlsbCB1c2luZyB0 aGUgYXdlZnVsIE1hcnZlbGwgYW5kIE5YUCBkcml2ZXJzLiBJIGhhdmUKbm90aGluZyB3aGljaCBp cyBDdWJveCBzcGVjaWZpYyBpbiBteSBrZXJuZWwsIGJ1dCB0aGUgZHJpdmVyIG1vZHVsZXMuCgo+ ID4gLSBDTUEgaGVscGVyCj4gPiAKPiA+ICAgWW91IGRvbid0IHVzZSBEUk1fS01TX0NNQV9IRUxQ RVIgYW5kIERSTV9HRU1fQ01BX0hFTFBFUiB3aGljaCB3b3VsZAo+ID4gICBzaW1wbGlmeSBzb21l IGNvZGUuICAKPiAKPiBQb3NzaWJseSwgYnV0IHRoZSBiaWdnZXN0IHdpbiBmb3IgbWUgaXMgaGF2 aW5nIGNhY2hlYWJsZSBnZW0gb2JqZWN0cy4KPiBDTUEgd2lsbCBiZSBhIHJldHJvZ3JhZGUgc3Rl cCBmb3IgdGhvc2UuCgpJIGRpZCBub3QgdGhpbmsgeWV0IGFib3V0IHRoZSBwb3NzaWJsZSBwcm9i bGVtcyB3aGljaCBjb3VsZCBiZSByYWlzZWQKd2hlbiB0aGUgb3V0cHV0IG9mIHRoZSB2aWRlbyBk ZWNvZGluZyBlbmdpbmUsIHZNZXRhLCB3aWxsIGJlIHRoZSBMQ0QKb3ZlcmxheSBwbGFuZS4KCj4g PiAtIGRldmljZSB0cmVlCj4gPiAKPiA+ICAgT3VyIGRyaXZlciBkZXBlbmRzIG9uIHRoZSBEVCBh bmQsIGJ5IHRoaXMgd2F5LCBpdCBtYXkgYmUgdXNlZCBmb3IKPiA+ICAgdmFyaW91cyBib2FyZHMg KEN1Ym94LCBEQi1NVjg4QVA1MTAgRGV2ZWxvcG1lbnQgQm9hcmQsIENvbXB1TGFiCj4gPiAgIENN LUE1MTAgQm9hcmQuLikuIEVzcGVjaWFsbHksIGluIHRoZSBDdWJveCwgb25seSBhIEhETUkgc2Ny ZWVuIG1heSBiZQo+ID4gICBjb25uZWN0ZWQsIHdoaWxlIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIg cGVybWl0cyBjb25uZWN0aW9uIG9mIGEgc21hcnQKPiA+ICAgcGFuZWwgKHBvcnQgQSkgYW5kIGEg VkdBIHNjcmVlbiAocG9ydCBCKS4gICAKPiAKPiBJIG9ubHkgaGF2ZSBhIEN1Ym94LCBzbyBJIGNh bid0IHRlc3QgYW55dGhpbmcgYnV0IEhETUkuCgpTZWJhc3RpYW4gaGFzIG90aGVyIERvdmUgYmFz ZWQgbWFjaGluZShzKS4KCj4gR2l2ZW4gdGhhdCB0aGVyZSdzIGJpZyBxdWVzdGlvbnMgYWJvdXQg dGhlIHBvbGFyaXR5IG9mIHNpZ25hbHMgY29taW5nCj4gb3V0IG9mIHRoZSBBcm1hZGEgNTEwICh3 aXRoIHRoZSBpbnZlcnQgYml0cyAwLCBhcmUgdGhlIHN5bmNzIHBvc2l0aXZlCj4gb3IgbmVnYXRp dmU/KSBJIHdvdWxkbid0IGxpa2UgdG8gbGVhZCBhbnlvbmUgdXAgdGhlIHBhdGggb2YgdGhpbmtp bmcKPiB0aGF0IHRoaXMgZHJpdmVyIHN1cHBvcnRzIGFueXRoaW5nIGJ1dCB0aGUgdGVzdGVkIEhE TUkgc2NlbmFyaW8geWV0Lgo+IAo+IEFzIHRoYXQgaW5mb3JtYXRpb24gaXMgbm90IGluIGFueSBv ZiB0aGUgQXJtYWRhIDUxMCBUUk1zLCBhbmQgY2FuIG9ubHkKPiBiZSBkaXNjb3ZlcmVkIGJ5IHBo eXNpY2FsbHkgcHJvYmluZyB0aGUgc2lnbmFscyB3aXRoIGEgc2NvcGUuLi4gdGhhdCdzCj4gb24g bXkgdG9kbyBsaXN0IHdoZW4gSSBmZWVsIGxpa2UgZGlzbWFudGxpbmcgdGhlIEN1Ym94IGFuZCBn ZXR0aW5nIHRoZQo+IHNvbGRlcmluZyBpcm9uIG91dCB0byBzZXBhcmF0ZSB0aGUgdHdvIGJvYXJk cyBzbyBJIGNhbiBnZXQgYWNjZXNzIHRvCj4gdGhlIHNpZ25hbHMuCgpZZXMsIGZyb20gdGhlIGJl Z2lubmluZywgU29saWRydW4gZGlkIG5vdCBnaXZlIHVzIGFueSBpbmZvcm1hdGlvbiBhYm91dAp0 aGVpciBoYXJkd2FyZS4uLiwgbm9yIGFib3V0IHRoZWlyIHNvZnR3YXJlISBJdCBzZWVtcyBSYWJl ZWggaXMgb25seQppbnRlcmVzdGVkIGJ5IGEgY2xvc2VkIFhCTUMuCgo+IEkndmUgYWxyZWFkeSB0 cmllZCB0byBleHBsYWluIHRoaXMgdG8gU2ViYXN0aWFuIG9uIElSQywgYW5kIGtlcHQgZ2V0dGlu Zwo+IG5vbnNlbnNlIGJhY2sgZnJvbSBoaW0uICAiWW91IG5lZWQgdG8gcHJvZ3JhbSB0aGUgd2hv bGUgY2hhaW4iLiAgWWVzLAo+IGJ1dCB0aGF0IG1ha2VzIG5vIHNlbnNlIHRvIHRoZSBxdWVzdGlv biBJIHdhcyBhc2tpbmcuCj4gCj4gVGhlIHJlYXNvbiBpcyB0aGlzOgo+ICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+IHwgQXJt YWRhNTEwICAgICAgICAgICAgICAgICAgIHwgICAgICB8ICAgVERBMTk5ODggICAgICAgICAgICAg fAo+IHwgTENEIGNvbnRyb2xsZXIgLS0tPiBzd2l0Y2ggLS0tLS0tLS0tPiBzd2l0Y2ggLS0+IHBy b2Nlc3NpbmcgfAo+IHwgICBWU1lOQy9IU1lOQyAgICAgICAgICAgICAgIHwgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICAgfAo+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAg ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+IAo+IFRoZSBpc3N1ZSBpcyB0aGF0IGVhY2gg J3N3aXRjaCcgcG9pbnQgaXMgY2FwYWJsZSBvZiBpbnZlcnRpbmcgdGhlIHN5bmMKPiBzaWduYWwu ICBJZiB5b3UgcHJvZ3JhbSBib3RoIGlkZW50aWNhbGx5IHRoZW4geW91IGVuZCB1cCB3aXRoIGlu dmVyc2lvbgo+IGZvbGxvd2luZyBhbm90aGVyIGludmVyc2lvbi4gIFdoaWNoIG1lYW5zIG5vIGlu dmVyc2lvbi4gIFRoYXQncyB3aHkKPiBJJ3ZlIGZvdW5kIFNlYmFzdGlhbidzIGFuc3dlcnMgdG8g YmUgbXVjaCBsZXNzIHRoYW4gaGVscGZ1bCBvbiB0aGlzCj4gcG9pbnQuCj4gCj4gV2hhdCBJIGhh dmUgZm91bmQgd2l0aCB0aGUgTlhQIFREQTE5OTg4IGRyaXZlciBpcyB0aGF0IHlvdSBuZWVkIHRv IGdldAo+IHRoZSBpbnB1dCBzeW5jcyB0byB0aGUgVERBMTk5ODggc2V0IHRvIHRoZSBjb3JyZWN0 IHBvbGFyaXR5IGZvciB0aGUKPiBUREExOTk4OCwgd2hpY2ggX2lzbid0XyB3aGF0IGlzIGFkdmVy dGlzZWQgaW4gdGhlIEVESUQuICBUaGUgVERBMTk5ODgKPiB0aGVuIGhhcyBpdHMgb3duIHByb2Nl c3NpbmcgaW50ZXJuYWxseSB3aGljaCBwbGFjZXMgdGhlIGFwcHJvcHJpYXRlCj4gc3luYyBjb2Rl cyBvbnRvIHRoZSBvdXRwdXQgZGF0YSBzdHJlYW0uCj4gCj4gSW4gc29tZSBjYXNlcywgZ2V0dGlu ZyB0aGlzIHdyb25nIHNoaWZ0cyB0aGUgZGlzcGxheWVkIGltYWdlIGJ5IGEgZmV3Cj4gcGl4ZWxz L2xpbmVzLiAgSW4gb3RoZXIgY2FzZXMgeW91IGdldCBubyBvdXRwdXQgb3IgaW52YWxpZCBvdXRw dXQgd2hpY2gKPiBpc24ndCByZWNvZ25pc2VkIGJ5IHRoZSBjb25uZWN0ZWQgZGV2aWNlLgoKUmln aHQuIEJ1dCBJIGZvdW5kIHRoYXQgdXNpbmcgUm9iJ3MgdGRhOTg4eCBkcml2ZXIgZ2l2ZXMgbWUg YSBmdWxsCmltYWdlIG9uIG15IFRWIHNldCB3aGlsZSB3aXRoIE5YUCdzIGRyaXZlciwgSSBoYWQg bW9yZSB0aGFuIDIwIHBpeGVscwpsb3N0IG9uIGVhY2ggc2lkZSAobGVmdCwgcmlnaHQsIHRvcCBh bmQgYm90dG9tKS4KCglbc25pcF0KPiA+IC0gbW9kdWxlIGxvYWRpbmcgKHNpNTM1MSwgdGRhOTk4 eCkKPiA+IAo+ID4gICBBcyBvdXIgZHJpdmVyIGlzIGxvYWRlZCBieSB0aGUgQ3Vib3ggRFQsIGFu ZCBhcyB0aGUgYXV4aWxsaWFyeSBkcml2ZXJzCj4gPiAgIChleHRlcm5hbCBjbG9jaywgSERNSSB0 cmFuc21pdHRlcikgbWF5IGFsc28gYmUgbW9kdWxlcywgYQo+ID4gICBzeW5jaHJvbml6YXRpb24g bWVjaGFuaXNtIChpbnNwaXJlZCBieSB0aGUgdGVncmEgZHJtIGRyaXZlcikgcGVybWl0cwo+ID4g ICB0aGUgZHJpdmVyIHRvIHN0YXJ0IHdoZW4gYWxsIHRoZSBvdGhlciBkcml2ZXJzIGFyZSBhbHNv IHN0YXJ0ZWQuICAKPiAKPiBUaGUgbGFjayBvZiBTaTUzNTEgYWxyZWFkeSBnZXRzIHRlc3RlZCBv biBldmVyeSBjdWJveCBib290IEkgZG8uICBUaGF0Cj4gY2F1c2VzIHByb2JlIGRlZmVyYWwsIHdo aWNoIGFsbG93cyB0aGUgZHJpdmVyIHRvIHByb3Blcmx5IHN0YXJ0IHdoZW4KPiBpdCBiZWNvbWVz IHJlYWR5LgoJW3NuaXBdCgpUaGF0J3Mgd2hhdCB3ZSBoYXZlLiBJIGFkZGVkIGFuIGVzY2FwZSBt ZWNoYW5pc20gaW4gY2FzZSB0aGUgc2k1MzUxIGlzCm5vdCBwcmVzZW50IChJIHdhcyB3YWl0aW5n IGZvciB0aGUgZHJpdmVyIHRvIGJlIGluIHRoZSBrZXJuZWwpLiBJbiB0aGlzCmNhc2UsIGFmdGVy IGEgZmlyc3QgLUVQUk9CRURFRkVSLCB0aGUgTENEIHdvcmtzIHdpdGggZWl0aGVyIEFYSSBvciB0 aGUKTENEIFBMTCAoYm90aCB3b3JrIGZpbmUgd2l0aCBteSBUViBzZXQgYXQgMTkyMHgxMDgwcCku CgoJW3NuaXBdCj4gPiAtIGhhcmR3YXJlIGN1cnNvcgo+ID4gCj4gPiAgIE91ciBkcml2ZXIgYWx3 YXlzIHByb3Bvc2VzIHRoZSBIV0MgMzIgKFJHQkEgNjR4NjQpLiAgCj4gCj4gSGFyZHdhcmUgY3Vy c29yIHN1cHBvcnQgaXMgcHJldHR5IHVzZWxlc3MuCj4gCj4gSW4gUkdCQSBtb2RlLCBpdCdzIG5v dCA2NHg2NCBidXQgeW91IGdldCB0aGUgY2hvaWNlIG9mIGVpdGhlciA2NHgzMiBvcgo+IDMyeDY0 LiAgVGhpcyBpcyB1c2VsZXNzIGZvciBYb3JnJ3MgcHVycG9zZXMsIHdoZXJlIGl0IHJlYWxseSB3 YW50cyBhCj4gNjR4NjQgY3Vyc29yLiAgQW5kIHRoZSBYRjg2IFhvcmcgYmFja2VuZCByZWFsbHkg d2FudHMgUkdCQSBmb3IgaGFyZHdhcmUKPiBjdXJzb3IsIG5vdCAyYnBwLiAgU28gbXkgY29uY2x1 c2lvbiBpcyB0aGF0IGhhcmR3YXJlIGN1cnNvciBpcyBub3Qgd29ydGgKPiBhbnkgZWZmb3J0IGFu ZCBJJ3ZlIGEgZ29vZCBtaW5kIHRvIHN0cmlwIHRoYXQgb3V0IGZyb20gbXkgZHJpdmVyICh3aGlj aAo+IHdpbGwgc2ltcGxpZnkgYSBmZXcgcGxhY2VzLikKPiAKPiBJJ3ZlIHBsYXllZCB3aXRoIHRo ZSBpZGVhIG9mIHJlZHVjaW5nIGEgUkdCQSBjdXJzb3IgZG93biB0byAyYnBwIG1vZGUKPiB3aGVy ZSB3ZSBjYW4gZml0IHRoZSByZXF1aXJlZCBzaXplIGluLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsg dmVyeSB3ZWxsLgo+IAo+IEp1c3QgYmVjYXVzZSB0aGUgaGFyZHdhcmUgZG9lcyBzb21ldGhpbmcg ZG9lc24ndCBtZWFuIHlvdSBzaG91bGQgd3JpdGUKPiBjb2RlIGZvciBpdCEgOikKCk1heWJlIEkg ZGlkIG5vdCBleHBsYWluIGNvcnJlY3RseTogdGhlIGNvbG9yZWQgY3Vyc29yIG1heWJlIFJHQjg4 OCArCnRyYW5zcGFyZW5jeSAoNjR4NjQpIG9yIGZ1bGwgQVJHQiAoNjR4MzIgb3IgMzJ4NjQpLiBJ IGNvZGVkIHRoZSBmaXJzdApjYXNlLiBBbmQsIHllcywgSSBiZXR0ZXIgbGlrZSBhIGhhcmR3YXJl IGN1cnNvcjogaXQgYXNrcyBmb3IgbGVzcwpjb21wdXRhdGlvbiwgYW5kIEkgZ2V0IGl0IGltbWVk aWF0ZWx5IGF0IGdyYXBoaWMgc3RhcnRpbmcgdGltZSEKCglbc25pcF0KPiA+IC0gdmlkZW8gb3Zl cmxheQo+ID4gCj4gPiAgIFNhbWUgYXMgYWJvdmU6IHRoZSBjb2RlIGlzIGluIG91ciBkcml2ZXIg KG92ZXJsYXkgcGxhbmUpLCBidXQgaXQgaXMKPiA+ICAgbm90IHRlc3RlZC4gIAo+IAo+IFdlIGFz IGEgZmFtaWx5LCBoYXZlIHdhdGNoZWQgbWFueSBob3VycyBvZiB2aWRlbyBvbiBtaW5lLiA6KQoK SSB3cm90ZSB0aGUgZHJtIGRyaXZlciBiZWNhdXNlIHRoZXJlIHdhcyBubyBlYXN5IHdheSB0byB1 c2UgdGhlIHZpZGVvCmRlY29kaW5nIGVuZ2luZSB3aXRoIHZsYyBhbmQgdGhlIE1hcnZlbGwncyBk cml2ZXJzLiBOb3cgdGhhdCB0aGUgZHJpdmVyCnJ1bnMsIHRoZSBuZXh0IHN0ZXAgd2FzIHRvIGV4 dGVuZCB0aGUgJ21vZGVzZXR0aW5nJyBYIHNlcnZlciBtb2R1bGUgdG8KaGFuZGxlIHRoZSBvdmVy bGF5IHBsYW5lcyAoSSB3b25kZXIgd2h5IG5vYm9keSBkaWQgaXQgeWV0KS4gQnV0LCBpZiB5b3UK YWxyZWFkeSBoYXZlIHNvbWV0aGluZyBydW5uaW5nLCBJJ2QgYmUgZ2xhZCB0byBnZXQgaXQuLi4K Cglbc25pcF0KPiA+IFdoYXQgZG8geW91IHRoaW5rIGFib3V0IG1lcmdpbmc/ICAKPiAKPiBZZXMs IEkgdGhpbmsgbWVyZ2luZyB0aGUgdHdvIHRvZ2V0aGVyIHdvdWxkIHByb2JhYmx5IGJlIHNhbmUu IDopCgpPSy4KClRoZSBmaXJzdCBzdGVwIGlzICJEVCBvciBub3QgRFQiPyBGb3IgbWUsIHRoZSBE VCBpcyBtb3JlIGZsZXhpYmxlCihvbmUgb3IgdHdvIExDRHMsIHNtYXJ0IHBhbmVsIGRlZmluaXRp b24sIGRpc3BsYXkgY29udHJvbGxlciBvciBub3QuLikKYW5kIHBlcm1pdHMgZWFzeSBpbmNsdXNp b24gb2Ygb3V0IG9mIHRyZWUgZHJpdmVycyBhcyB0aGUgcHJpdmF0ZSBWUFUKYW5kIEdQVSBvbmVz LgoKLS0gCktlbiBhciBjJ2hlbnRhw7EJfAkgICAgICAqKiBCcmVpemggaGEgTGludXggYXRhdiEg KioKSmVmCQl8CQlodHRwOi8vbW9pbmVqZi5mcmVlLmZyLwoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QK bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=