From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2] drm: support hotspot for universal plane cursors Date: Tue, 17 Nov 2015 20:11:23 +0100 Message-ID: <20151117191123.GY16848@phenom.ffwll.local> References: <1447762218-11017-1-git-send-email-john@metanate.com> <1447772734-6480-1-git-send-email-john@metanate.com> <20151117153932.GU4437@intel.com> <20151117155943.1e83b053.john@metanate.com> <20151117162935.GK16848@phenom.ffwll.local> <20151117183132.GU16848@phenom.ffwll.local> <20151117184728.27252360.john@metanate.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f53.google.com (mail-wm0-f53.google.com [74.125.82.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6EA186E2F3 for ; Tue, 17 Nov 2015 11:11:27 -0800 (PST) Received: by wmww144 with SMTP id w144so167700030wmw.1 for ; Tue, 17 Nov 2015 11:11:26 -0800 (PST) Content-Disposition: inline In-Reply-To: <20151117184728.27252360.john@metanate.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: John Keeping Cc: Michel =?iso-8859-1?Q?D=E4nzer?= , LKML , Maling list - DRI developers List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBOb3YgMTcsIDIwMTUgYXQgMDY6NDc6MjhQTSArMDAwMCwgSm9obiBLZWVwaW5nIHdy b3RlOgo+IE9uIFR1ZSwgMTcgTm92IDIwMTUgMTk6MzE6MzIgKzAxMDAsIERhbmllbCBWZXR0ZXIg d3JvdGU6Cj4gCj4gPiBPbiBUdWUsIE5vdiAxNywgMjAxNSBhdCAxMjowNzoyNFBNIC0wNTAwLCBB bGV4IERldWNoZXIgd3JvdGU6Cj4gPiA+IE9uIFR1ZSwgTm92IDE3LCAyMDE1IGF0IDExOjI5IEFN LCBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+Cj4gPiA+IHdyb3RlOiAgCj4gPiA+ID4g T24gVHVlLCBOb3YgMTcsIDIwMTUgYXQgMDM6NTk6NDNQTSArMDAwMCwgSm9obiBLZWVwaW5nIHdy b3RlOiAgCj4gPiA+ID4+IE9uIFR1ZSwgMTcgTm92IDIwMTUgMTc6Mzk6MzIgKzAyMDAsIFZpbGxl IFN5cmrDpGzDpCB3cm90ZToKPiA+ID4gPj4gIAo+ID4gPiA+PiA+IE9uIFR1ZSwgTm92IDE3LCAy MDE1IGF0IDAzOjA1OjM0UE0gKzAwMDAsIEpvaG4gS2VlcGluZyB3cm90ZTogIAo+ID4gPiA+PiA+ ID4gVGhlIHJlcXVlc3QncyBob3RfeCBhbmQgaG90X3kgYXJlIHNldCBjb3JyZWN0bHkgZm9yIGJv dGgKPiA+ID4gPj4gPiA+IERSTV9JT0NUTF9NT0RFX0NVUlNPUiBhbmQgRFJNX0lPQ1RMX01PREVf Q1VSU09SMiBzbyB3ZSBqdXN0Cj4gPiA+ID4+ID4gPiBuZWVkIHRvIHNhdmUgdGhlIHZhbHVlcyBh bmQgdGhlbiBhcHBseSB0aGUgb2Zmc2V0IHRvIHRoZQo+ID4gPiA+PiA+ID4gY3Vyc29yIHBsYW5l IHdoZW4gdGhlIGN1cnNvciBtb3Zlcy4KPiA+ID4gPj4gPiA+Cj4gPiA+ID4+ID4gPiBTaWduZWQt b2ZmLWJ5OiBKb2huIEtlZXBpbmcgPGpvaG5AbWV0YW5hdGUuY29tPgo+ID4gPiA+PiA+ID4gLS0t Cj4gPiA+ID4+ID4gPiB2MjoKPiA+ID4gPj4gPiA+ICAgLSBhZGQga2VybmVsZG9jIGZvciBob3Rf eCBhbmQgaG90X3kgaW4gc3RydWN0IGRybV9jcnRjCj4gPiA+ID4+ID4gPgo+ID4gPiA+PiA+ID4g IGRyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jIHwgMTEgKysrKysrKy0tLS0KPiA+ID4gPj4gPiA+ ICBpbmNsdWRlL2RybS9kcm1fY3J0Yy5oICAgICB8ICA2ICsrKysrKwo+ID4gPiA+PiA+ID4gIDIg ZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPiA+ID4gPj4g PiA+Cj4gPiA+ID4+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMK PiA+ID4gPj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgaW5kZXggNzIwYTE1My4u NDBmNWI4NCAxMDA2NDQKPiA+ID4gPj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0 Yy5jCj4gPiA+ID4+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwo+ID4gPiA+ PiA+ID4gQEAgLTI4MzEsNiArMjgzMSw5IEBAIHN0YXRpYyBpbnQKPiA+ID4gPj4gPiA+IGRybV9t b2RlX2N1cnNvcl91bml2ZXJzYWwoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gPiA+PiA+ID4g RFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIHdyYXAgY3Vyc29yIGJ1ZmZlciBpbiBkcm0KPiA+ID4g Pj4gPiA+IGZyYW1lYnVmZmVyXG4iKTsgcmV0dXJuIFBUUl9FUlIoZmIpOyB9Cj4gPiA+ID4+ID4g PiArCj4gPiA+ID4+ID4gPiArICAgICAgICAgICAgICAgICBjcnRjLT5ob3RfeCA9IHJlcS0+aG90 X3g7Cj4gPiA+ID4+ID4gPiArICAgICAgICAgICAgICAgICBjcnRjLT5ob3RfeSA9IHJlcS0+aG90 X3k7Cj4gPiA+ID4+ID4gPiAgICAgICAgICAgfSBlbHNlIHsKPiA+ID4gPj4gPiA+ICAgICAgICAg ICAgICAgICAgIGZiID0gTlVMTDsKPiA+ID4gPj4gPiA+ICAgICAgICAgICB9Cj4gPiA+ID4+ID4g PiBAQCAtMjg0MSwxMSArMjg0NCwxMSBAQCBzdGF0aWMgaW50Cj4gPiA+ID4+ID4gPiBkcm1fbW9k ZV9jdXJzb3JfdW5pdmVyc2FsKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgfQo+ID4gPiA+PiA+ID4K PiA+ID4gPj4gPiA+ICAgaWYgKHJlcS0+ZmxhZ3MgJiBEUk1fTU9ERV9DVVJTT1JfTU9WRSkgewo+ ID4gPiA+PiA+ID4gLSAgICAgICAgIGNydGNfeCA9IHJlcS0+eDsKPiA+ID4gPj4gPiA+IC0gICAg ICAgICBjcnRjX3kgPSByZXEtPnk7Cj4gPiA+ID4+ID4gPiArICAgICAgICAgY3J0Y194ID0gcmVx LT54IC0gY3J0Yy0+aG90X3g7Cj4gPiA+ID4+ID4gPiArICAgICAgICAgY3J0Y195ID0gcmVxLT55 IC0gY3J0Yy0+aG90X3k7Cj4gPiA+ID4+ID4gPiAgIH0gZWxzZSB7Cj4gPiA+ID4+ID4gPiAtICAg ICAgICAgY3J0Y194ID0gY3J0Yy0+Y3Vyc29yX3g7Cj4gPiA+ID4+ID4gPiAtICAgICAgICAgY3J0 Y195ID0gY3J0Yy0+Y3Vyc29yX3k7Cj4gPiA+ID4+ID4gPiArICAgICAgICAgY3J0Y194ID0gY3J0 Yy0+Y3Vyc29yX3ggLSBjcnRjLT5ob3RfeDsKPiA+ID4gPj4gPiA+ICsgICAgICAgICBjcnRjX3kg PSBjcnRjLT5jdXJzb3JfeSAtIGNydGMtPmhvdF95OyAgCj4gPiA+ID4+ID4KPiA+ID4gPj4gPiBX aHkgZG9lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGhvdHNwb3QgYWZmZWN0IHRoZSBwbGFuZQo+ID4g PiA+PiA+IHBvc2l0aW9uPyAgCj4gPiA+ID4+Cj4gPiA+ID4+IGhvdF97eCx5fSBzcGVjaWZ5IHRo ZSBsb2NhdGlvbiBvZiB0aGUgYWN0aXZlIHBpeGVsIHdpdGhpbiB0aGUKPiA+ID4gPj4gY3Vyc29y IHBsYW5lIGFuZCBjdXJzb3Jfe3gseX0gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGFjdGl2 ZQo+ID4gPiA+PiBwaXhlbCBvbiB0aGUgZGlzcGxheSBzbyB3ZSBuZWVkIHRvIG9mZnNldCB0aGUg cGxhbmUgcG9zaXRpb24gaW4KPiA+ID4gPj4gb3JkZXIgZm9yIHRoZSBhY3RpdmUgcGl4ZWwgdG8g YmUgaW4gdGhlIGNvcnJlY3QgcGxhY2UuICAKPiA+ID4gPgo+ID4gPiA+IE5vcGUsIGhvdF94L3kg aXMganVzdCBmb3IgdmlydHVhbCBtYWNoaW5lcyB0byBpbmRpY2F0ZSB3aGVyZSB0aGUKPiA+ID4g PiBsb2dpY2FsIGN1cnNvciBwb3NpdGlvbiBpcyB3aXRoaW4gdGhlIGN1cnNvciBwbGFuZS4gSXQg c2hvdWxkCj4gPiA+ID4gaGF2ZSAyIGVmZmVjdCBvbiBob3cgc29tZXRoaW5nIGlzIGRpc3BsYXll ZC4gQW5kIG5vLCBJIGhhdmUKPiA+ID4gPiBhYnNvbHV0ZWx5IG5vIGlkZWEgd2h5IHJhZGVvbiBp cyBwdWxsaW5nIHNvbWUgdHJpY2tzIGhlcmUsIHdoaWNoCj4gPiA+ID4gaGF2ZSBiZWVuIGFkZGVk IGluCj4gPiA+ID4KPiA+ID4gPiBjb21taXQgNzhiMWE2MDEwYjQ2YTY5YmNkNDdiNzIzYTgwZjky NjkzZjI2ZDE3Ygo+ID4gPiA+IEF1dGhvcjogTWljaGVsIETDpG56ZXIgPG1pY2hlbC5kYWVuemVy QGFtZC5jb20+Cj4gPiA+ID4gRGF0ZTogICBUdWUgTm92IDE4IDE4OjAwOjA4IDIwMTQgKzA5MDAK PiA+ID4gPgo+ID4gPiA+ICAgICBkcm0vcmFkZW9uOiBVc2UgY3Vyc29yX3NldDIgaG9vayBmb3Ig ZW5hYmxpbmcgLyBkaXNhYmxpbmcgdGhlCj4gPiA+ID4gSFcgY3Vyc29yCj4gPiA+ID4KPiA+ID4g PiBNaWNoZWwvQWxleCwgY2FuIHlvdSBwbGVhc2Ugc2hlZCBzb21lIGxpZ2h0IG9udG8gdGhpcz8g cmFkZW9uIGlzCj4gPiA+ID4gdGhlIG9ubHkgZHJpdmVyIGRvaW5nIHRoaXMsIG1ha2luZyB0aGlz IGludGVyZmFjZSBpbmNvbnNpc3RlbnQuCj4gPiA+ID4gSXMgdGhlIGRkeCBkb2luZyBzb21ldGhp bmcgZnVubnkgY29tcGFyZWQgdG8gLW1vZGVzZXRpbmcgb3IKPiA+ID4gPiB3ZXN0b24/Cj4gPiA+ ID4KPiA+ID4gPiBBdCBsZWFzdCBhIHF1aWNrIGxvb2sgaW4gdGhlIC1hdGkgc291cmNlcyBkaWRu J3QgZXZlbiBzaG93IGEgdXNlcgo+ID4gPiA+IGZvciB0aGlzLCBpdCdzIHN0aWxsIHVzaW5nIHRo ZSBvbGQgY3Vyc29yIGlvY3RsLiBBbmQgdGhlcmUncyBubwo+ID4gPiA+IG90aGVyIGluZGljYXRp b24gaW4gdGhlIGNvbW1pdCBvZiBhIGJ1ZyBvciBhbnl0aGluZy4gQ2FuIHdlCj4gPiA+ID4gcGVy aGFwcyBqdXN0IHJldmVydCB0aGlzPyAgCj4gPiA+IAo+ID4gPiBXZSB1c2UgdGhpcyBpcyB4Zjg2 LXZpZGVvLWF0aS4gIFNlZToKPiA+ID4gaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3hvcmcv ZHJpdmVyL3hmODYtdmlkZW8tYXRpL2NvbW1pdC8/aWQ9YzlmOGY2NDJmZDQ5NTkzNzQwMDYxOGE0 ZmMyNWVjYWUzZjg4ODhmYwo+ID4gPiBPdXIgaHcgY3Vyc29yIGhhcyBhIGhvdHNwb3QgcmVnaXN0 ZXIgdGhhdCBuZWVkcyB0byBiZSBwcm9ncmFtbWVkIGZvcgo+ID4gPiBwcm9wZXIgb3BlcmF0aW9u LiAgSSBkb24ndCByZW1lbWJlciB0aGUgZGV0YWlscyBvZiB0aGUgc3BlY2lmaWMgYnVnLgo+ID4g PiBNaWNoZWwgY2FuIHByb3ZpZGUgbW9yZSBpbmZvLiAgCj4gPiAKPiA+IFllYWggSSB3YXMgYmxp bmQgYW5kIGRpZG4ndCBzcG90IHRoaXMuIEJ1dCBJIGNhbid0IGZpbmQgeW91ciBob3RzcG90Cj4g PiBjdXJzb3IgcmVnIC0gaXQncyBvbmx5IHVzZWQgdG8gYWRqdXN0IHRoZSB4L3kgb2Zmc2V0cyAo c2ltaWxhciB0bwo+ID4gSm9obidzIHBhdGNoKS4gQW5kIGFtZGdwdSBkb2Vzbid0IGRvIHRoaXMg YXQgYWxsLCBpdCdzIG9ubHkKPiA+IHJhZG9lbi5rby4gU3RpbGwgY29uZnVzZWQuCj4gCj4gSGF2 aW5nIGludmVzdGlnYXRlZCBhIGJpdCBtb3JlLCBJIHRoaW5rIHhzZXJ2ZXIgaGFuZGxlcyB0aGUg aG90c3BvdAo+IGl0c2VsZiB3aXRob3V0IHVzaW5nIHRoZSBrZXJuZWwgaG90c3BvdCBoYW5kbGlu ZyBhbmQgeG9yZy12aWRlby1xeGwKPiBjYXJlZnVsbHkgcmV2ZXJzZXMgdGhpcyBpbiBvcmRlciB0 byB0YWtlIGFkdmFudGFnZSBvZgo+IGRybU1vZGVTZXRDdXJzb3IyKCksIHNvIHdpdGggWDExIGRy aXZlcnMgeW91IGRvbid0IG5vdGljZSB0aGF0IHRoZQo+IGtlcm5lbCBoYW5kbGluZyBvZiB0aGlz IGlzIGJyb2tlbiBpbiBuZWFybHkgYWxsIGRyaXZlcnMuCgpXaGVyZSBkaWQgeW91IHNwb3QgdGhp cyBjb2RlIGluIC1xeGw/IEFmYWljcyBpdCBoYXMgdGhlIGV4YWN0IHNhbWUgY29weSBvZgp0aGUg dXN1YWwgZHJtbW9kZS5jIGNvZGUgYXMgZXZlcnlvbmUgZWxzZS4gTm8gYWRqdXN0bWVudHMgb2Yg eC95aG90IHNlZW1zCnRvIGJlIGdvaW5nIG9uIHRoZXJlLCBub3IgaW4gdGhlIHF4bC5rbyBrZXJu ZWwgZHJpdmVyLiBPciBhdCBsZWFzdCBJCmRpZG4ndCBmaW5kIGl0LgoKPiBIZXJlJ3MgYSBzbWFs bCB0ZXN0IHByb2dyYW0gdGhhdCBkZW1vbnN0cmF0ZXMgd2hldGhlciBvciBub3QgY3Vyc29yCj4g aG90c3BvdHMgd29yay4gIFRoZXJlIHNob3VsZCBiZSBhIHNpbmdsZSBjb2xvcmVkIHBpeGVsIGlt bWVkaWF0ZWx5IHRvCj4gdGhlIGxlZnQgb2YgdGhlIHBvaW50ZXIgYnV0IHdpdGggYSBicm9rZW4g ZHJpdmVyIHRoZSB3aGl0ZSBwaXhlbCB3aWxsIGJlCj4gNjQgcGl4ZWxzIHRvIHRoZSBsZWZ0IG9m IHRoZSBwb2ludGVyLgoKSXMgdGhlcmUgYWxzbyBhIHdheSB0byB0ZXN0IHRoaXMgd2l0aCBYPyBJ biB0aGUgZW5kIHRoYXQncyB3aGF0IHdpbGwKbWF0dGVyIGZvciBtb3N0IGVuZCB1c2VycywgYW5k IGlmIHRoZXJlJ3MgZGlmZmVyZW5jZSBpbiBiZWhhdmlvdXIgaW4gdGhlCnZhcmlvdXMgWCBkcml2 ZXJzIHdlJ3JlIHJlYWxseSBzY3Jld2VkIChzaW5jZSBlc3NlbnRpYWxseSB3ZSBjYW4ndCBldmVy CmZpeCBpdCBwcm9wZXJseSBmb3IgdGhlIGxlZ2FjeSBpb2N0bCkuCi1EYW5pZWwKCj4gCj4gQ29t cGlsZSB3aXRoOgo+IAo+ICAgICBjYyAtbyB0ZXN0IC1JL3Vzci9pbmNsdWRlL2xpYmRybSB0ZXN0 LmMgLWxrbXMgLWxkcm0KPiAKPiAtLSA+OCAtLQo+ICNpbmNsdWRlIDxlcnIuaD4KPiAjaW5jbHVk ZSA8cG9sbC5oPgo+ICNpbmNsdWRlIDxzdHJpbmcuaD4KPiAKPiAjaW5jbHVkZSA8c3lzL21tYW4u aD4KPiAKPiAjaW5jbHVkZSA8bGlia21zL2xpYmttcy5oPgo+ICNpbmNsdWRlIDx4Zjg2ZHJtLmg+ Cj4gI2luY2x1ZGUgPHhmODZkcm1Nb2RlLmg+Cj4gCj4gCj4gc3RhdGljIGludCBkcm1fZmQ7Cj4g c3RhdGljIGludCBjcnRjX2lkID0gLTE7Cj4gc3RhdGljIGRybU1vZGVNb2RlSW5mbyBtb2RlX2lu Zm87Cj4gc3RhdGljIHN0cnVjdCBrbXNfZHJpdmVyICprbXM7Cj4gCj4gc3RhdGljIHN0cnVjdCB7 Cj4gCWludCBpZDsKPiAJc2l6ZV90IHNpemU7Cj4gCXVuc2lnbmVkIGNoYXIgKmRhdGE7Cj4gfSBm cmFtZWJ1ZmZlcjsKPiAKPiBzdGF0aWMgc3RydWN0IHsKPiAJaW50IHgsIHk7Cj4gCXN0cnVjdCBr bXNfYm8gKmJ1ZmZlcjsKPiB9IGN1cnNvcjsKPiAKPiAjZGVmaW5lIENVUlNPUl9XSURUSAkyMQo+ ICNkZWZpbmUgQ1VSU09SX0hFSUdIVAkyMQo+ICNkZWZpbmUgQ1VSU09SX0hPVF9YCTIxCj4gI2Rl ZmluZSBDVVJTT1JfSE9UX1kJMAo+IHVuc2lnbmVkIGNoYXIgY3Vyc29yX2RhdGFbXSA9Cj4gICAi XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwIgo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKPiAgICJcMFwwXDBcMFwwXDBc MFwzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDAiCj4gICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wwXDBcMFwzNzdcMFwwXDBcMCIKPiAgICJcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDAiCj4gICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDM3N1wzNzciCj4gICAiXDM3N1wzNzdcMzc3XDM3 N1wzNzdcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww Igo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKPiAgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3 XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCj4gICAiXDM3N1ww XDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwIgo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3NyIKPiAgICJcMzc3XDM3N1wzNzdcMzc3XDM3 N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3NyIK PiAgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDAiCj4gICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCj4gICAiXDM3N1wz NzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMFwwXDBc Mzc3XDBcMFwwIgo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKPiAgICJcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCj4g ICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wz NzdcMzc3XDBcMFwwXDM3N1wwIgo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKPiAgICJcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3 N1wzNzciCj4gICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdc Mzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3Igo+ICAgIlwwXDBcMFwzNzdcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKPiAgICJc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wz NzdcMzc3XDM3N1wzNzciCj4gICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3 XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3Igo+ICAgIlwzNzdcMzc3XDM3N1wz NzdcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MCIKPiAgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdc Mzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciCj4gICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3 N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3Igo+ICAgIlwzNzdc Mzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wwXDBcMFwzNzdcMFww XDBcMFwwXDBcMCIKPiAgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wwXDAiCj4gICAiXDBcMzc3XDBcMFwwXDM3N1ww XDBcMFwzNzdcMFwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3Igo+ ICAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdc Mzc3XDM3N1wwXDBcMFwzNzdcMCIKPiAgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCj4gICAiXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wz NzdcMzc3Igo+ICAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3 XDM3N1wzNzdcMzc3XDM3N1wzNzdcMFwwXDBcMzc3Igo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKPiAg ICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMzc3XDM3N1wzNzdc Mzc3XDM3N1wzNzdcMzc3XDM3NyIKPiAgICJcMFwwXDBcMzc3XDBcMFwwXDM3N1wzNzdcMzc3XDM3 N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3N1wwXDBcMFwwXDAiCj4gICAiXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwIgo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3 XDM3N1wzNzdcMzc3XDBcMFwwXDM3N1wwXDBcMCIKPiAgICJcMFwwXDBcMFwwXDBcMFwwXDM3N1wz NzdcMzc3XDM3N1wzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCj4gICAi XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwIgo+ICAgIlwwXDBcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3 N1wzNzdcMFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKPiAgICJcMFwwXDBcMFwzNzdc MFwwXDBcMzc3XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDAiCj4gICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3 XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3Igo+ICAgIlwzNzdcMzc3XDBcMFwwXDM3N1wwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMzc3XDBcMCIKPiAgICJcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDAiCj4gICAiXDBcMFwwXDBcMFwwXDBcMFwwXDM3N1wzNzdcMzc3XDM3N1wzNzdc Mzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3N1wwXDBcMFwwIgo+ICAgIlwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIK PiAgICJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMzc3XDM3N1wzNzdcMzc3XDM3NyIKPiAgICJcMzc3XDM3N1wzNzdcMzc3XDBcMFwwXDM3N1ww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCj4gICAiXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwIgo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwzNzdcMFwwXDBcMzc3XDM3 N1wzNzdcMzc3XDM3N1wwXDBcMFwzNzdcMFwwXDBcMCIKPiAgICJcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiCj4g ICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwIgo+ICAgIlwwXDBcMFwzNzdcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIKPiAgICJcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDAiCj4gICAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIgo+ICAgIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwIjsKPiAKPiAKPiBzdGF0aWMgdm9pZCBkcmF3X2N1cnNvcih2b2lkKQo+IHsKPiAJdm9pZCAq cmVzdWx0Owo+IAl1bnNpZ25lZCBjaGFyICpwdHI7Cj4gCWludCB4LCB5Owo+IAlpZiAoa21zX2Jv X21hcChjdXJzb3IuYnVmZmVyLCAmcmVzdWx0KSkKPiAJCWVycigxLCAia21zX2JvX21hcCIpOwo+ IAo+IAlwdHIgPSByZXN1bHQ7Cj4gCW1lbXNldChwdHIsIDAsIDY0ICogNjQgKiA0KTsKPiAKPiAJ Zm9yICh5ID0gMDsgeSA8IENVUlNPUl9IRUlHSFQ7IHkrKykKPiAJCW1lbWNweShwdHIgKyA2NCAq IDQgKiB5LCBjdXJzb3JfZGF0YSArIDQgKiBDVVJTT1JfV0lEVEggKiB5LCBDVVJTT1JfV0lEVEgg KiA0KTsKPiAKPiAJa21zX2JvX3VubWFwKGN1cnNvci5idWZmZXIpOwo+IH0KPiAKPiBzdGF0aWMg dm9pZCBzZXR1cF9jdXJzb3Iodm9pZCkKPiB7Cj4gCWNvbnN0IHVuc2lnbmVkIGludCBhdHRyW10g PSB7Cj4gCQlLTVNfQk9fVFlQRSwgS01TX0JPX1RZUEVfQ1VSU09SXzY0WDY0X0E4UjhHOEI4LAo+ IAkJS01TX1dJRFRILCA2NCwKPiAJCUtNU19IRUlHSFQsIDY0LAo+IAkJS01TX1RFUk1JTkFURV9Q Uk9QX0xJU1QKPiAJfTsKPiAJdW5zaWduZWQgaW50IGhhbmRsZTsKPiAJaWYgKGttc19ib19jcmVh dGUoa21zLCBhdHRyLCAmY3Vyc29yLmJ1ZmZlcikpCj4gCQllcnIoMSwgImttc19ib19jcmVhdGUi KTsKPiAKPiAJZHJhd19jdXJzb3IoKTsKPiAKPiAJaWYgKGttc19ib19nZXRfcHJvcChjdXJzb3Iu YnVmZmVyLCBLTVNfSEFORExFLCAmaGFuZGxlKSkKPiAJCWVycigxLCAia21zX2JvX2dldF9wcm9w Iik7Cj4gCj4gCWlmIChkcm1Nb2RlU2V0Q3Vyc29yMihkcm1fZmQsIGNydGNfaWQsIGhhbmRsZSwg NjQsIDY0LCBDVVJTT1JfSE9UX1gsIENVUlNPUl9IT1RfWSkpCj4gCQllcnIoMSwgImRybU1vZGVT ZXRDdXJzb3IyIik7Cj4gCj4gCWlmIChkcm1Nb2RlTW92ZUN1cnNvcihkcm1fZmQsIGNydGNfaWQs IGN1cnNvci54LCBjdXJzb3IueSkpCj4gCQllcnIoMSwgImRybU1vZGVNb3ZlQ3Vyc29yIik7Cj4g fQo+IAo+IHN0YXRpYyB2b2lkIGNyZWF0ZV9mcmFtZWJ1ZmZlcih2b2lkKQo+IHsKPiAJc3RydWN0 IGRybV9tb2RlX2NyZWF0ZV9kdW1iIGNyZXEgPSB7Cj4gCQkud2lkdGggPSBtb2RlX2luZm8uaGRp c3BsYXksCj4gCQkuaGVpZ2h0ID0gbW9kZV9pbmZvLnZkaXNwbGF5LAo+IAkJLmJwcCA9IDMyLAo+ IAkJLmZsYWdzID0gMCwKPiAJfTsKPiAJc3RydWN0IGRybV9tb2RlX21hcF9kdW1iIG1yZXEgPSB7 IDAgfTsKPiAJaWYgKGRybUlvY3RsKGRybV9mZCwgRFJNX0lPQ1RMX01PREVfQ1JFQVRFX0RVTUIs ICZjcmVxKSkKPiAJCWVycigxLCAiRFJNX0lPQ1RMX01PREVfQ1JFQVRFX0RVTUIiKTsKPiAKPiAJ aWYgKGRybU1vZGVBZGRGQihkcm1fZmQsIGNyZXEud2lkdGgsIGNyZXEuaGVpZ2h0LCAyNCwgMzIs IGNyZXEucGl0Y2gsIGNyZXEuaGFuZGxlLCAmZnJhbWVidWZmZXIuaWQpKQo+IAkJZXJyKDEsICJk cm1Nb2RlQWRkRkIiKTsKPiAKPiAJbXJlcS5oYW5kbGUgPSBjcmVxLmhhbmRsZTsKPiAJaWYgKGRy bUlvY3RsKGRybV9mZCwgRFJNX0lPQ1RMX01PREVfTUFQX0RVTUIsICZtcmVxKSkKPiAJCWVycigx LCAiRFJNX0lPQ1RMX01PREVfTUFQX0RVTUIiKTsKPiAKPiAJZnJhbWVidWZmZXIuZGF0YSA9IG1t YXAoMCwgY3JlcS5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBkcm1f ZmQsIG1yZXEub2Zmc2V0KTsKPiAJaWYgKGZyYW1lYnVmZmVyLmRhdGEgPT0gTUFQX0ZBSUxFRCkK PiAJCWVycigxLCAibW1hcCIpOwo+IAo+IAlmcmFtZWJ1ZmZlci5zaXplID0gY3JlcS5zaXplOwo+ IAltZW1zZXQoZnJhbWVidWZmZXIuZGF0YSwgMCwgZnJhbWVidWZmZXIuc2l6ZSk7Cj4gCj4gCS8q IFBhaW50IGN1cnNvciBsb2NhdGlvbiB3aXRoIGEgc2luZ2xlIGNvbG9yZWQgcGl4ZWwuICovCj4g CWZyYW1lYnVmZmVyLmRhdGFbMSArIGN1cnNvci54ICogNCArIGN1cnNvci55ICogY3JlcS5waXRj aF0gPSAnXHhmZic7Cj4gCWZyYW1lYnVmZmVyLmRhdGFbMiArIGN1cnNvci54ICogNCArIGN1cnNv ci55ICogY3JlcS5waXRjaF0gPSAnXHhmZic7Cj4gfQo+IAo+IHN0YXRpYyBpbnQgc2V0dXBfY29u bmVjdG9yKGRybU1vZGVDb25uZWN0b3IgKmNvbm4sIGRybU1vZGVSZXMgKnJlcykKPiB7Cj4gCWRy bU1vZGVNb2RlSW5mbyAqbW9kZSA9IE5VTEw7Cj4gCWludCBpOwo+IAo+IAlpZiAoY29ubi0+Y29u bmVjdGlvbiAhPSBEUk1fTU9ERV9DT05ORUNURUQpCj4gCQlyZXR1cm4gLTE7Cj4gCj4gCWZvciAo aW50IGogPSAwOyBqIDwgY29ubi0+Y291bnRfbW9kZXM7IGorKykgewo+IAkJaWYgKCFtb2RlIHx8 IChjb25uLT5tb2Rlc1tqXS50eXBlICYgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQpKSB7Cj4gCQkJ bW9kZSA9ICZjb25uLT5tb2Rlc1tqXTsKPiAJCQlpZiAoY29ubi0+bW9kZXNbal0udHlwZSAmIERS TV9NT0RFX1RZUEVfUFJFRkVSUkVEKQo+IAkJCQlicmVhazsKPiAJCX0KPiAJfQo+IAo+IAlpZiAo IW1vZGUpCj4gCQlyZXR1cm4gLTE7Cj4gCj4gCWZvciAoaSA9IDA7IGkgPCBjb25uLT5jb3VudF9l bmNvZGVyczsgaSsrKSB7Cj4gCQlpbnQgajsKPiAJCWRybU1vZGVFbmNvZGVyICplbmMgPSBkcm1N b2RlR2V0RW5jb2Rlcihkcm1fZmQsIGNvbm4tPmVuY29kZXJzW2pdKTsKPiAJCWlmICghZW5jKQo+ IAkJCWNvbnRpbnVlOwo+IAo+IAkJZm9yIChqID0gMDsgaiA8IHJlcy0+Y291bnRfY3J0Y3M7IGor Kykgewo+IAkJCWlmIChlbmMtPnBvc3NpYmxlX2NydGNzICYgKDF1IDw8IGopKSB7Cj4gCQkJCWNy dGNfaWQgPSByZXMtPmNydGNzW2pdOwo+IAkJCQlicmVhazsKPiAJCQl9Cj4gCQl9Cj4gCj4gCQlk cm1Nb2RlRnJlZUVuY29kZXIoZW5jKTsKPiAJCWlmIChjcnRjX2lkID49IDApCj4gCQkJYnJlYWs7 Cj4gCX0KPiAKPiAJbWVtY3B5KCZtb2RlX2luZm8sIG1vZGUsIHNpemVvZihtb2RlX2luZm8pKTsK PiAJY3Vyc29yLnggPSBtb2RlLT5oZGlzcGxheSAvIDI7Cj4gCWN1cnNvci55ID0gbW9kZS0+dmRp c3BsYXkgLyAyOwo+IAljcmVhdGVfZnJhbWVidWZmZXIoKTsKPiAKPiAJaWYgKGRybU1vZGVTZXRD cnRjKGRybV9mZCwgY3J0Y19pZCwgZnJhbWVidWZmZXIuaWQsIDAsIDAsICZjb25uLT5jb25uZWN0 b3JfaWQsIDEsIG1vZGUpKQo+IAkJZXJyKDEsICJkcm1Nb2RlU2V0Q3J0YyIpOwo+IAo+IAlyZXR1 cm4gMDsKPiB9Cj4gCj4gc3RhdGljIHZvaWQgc2V0dXBfc2NyZWVuKGRybU1vZGVSZXMgKnJlcykK PiB7Cj4gCWludCBpOwo+IAo+IAlmb3IgKGkgPSAwOyBpIDwgcmVzLT5jb3VudF9jb25uZWN0b3Jz OyBpKyspIHsKPiAJCWludCByZXN1bHQ7Cj4gCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uID0gZHJt TW9kZUdldENvbm5lY3Rvcihkcm1fZmQsIHJlcy0+Y29ubmVjdG9yc1tpXSk7Cj4gCQlpZiAoIWNv bm4pCj4gCQkJY29udGludWU7Cj4gCQlyZXN1bHQgPSBzZXR1cF9jb25uZWN0b3IoY29ubiwgcmVz KTsKPiAJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm4pOwo+IAkJaWYgKCFyZXN1bHQpCj4gCQkJ YnJlYWs7Cj4gCX0KPiAKPiAJaWYgKGNydGNfaWQgPCAwKQo+IAkJZXJyeCgxLCAibm8gc2NyZWVu IGZvdW5kIik7Cj4gfQo+IAo+IHN0YXRpYyB2b2lkIHNldHVwX2RybShjb25zdCBjaGFyICptb2R1 bGUpCj4gewo+IAlkcm1Nb2RlUmVzICpyZXM7Cj4gCj4gCWRybV9mZCA9IGRybU9wZW4obW9kdWxl LCBOVUxMKTsKPiAJaWYgKGRybV9mZCA8IDApCj4gCQllcnIoMSwgImRybU9wZW4iKTsKPiAKPiAJ aWYgKGttc19jcmVhdGUoZHJtX2ZkLCAma21zKSA8IDApCj4gCQllcnIoMSwgImttc19jcmVhdGUi KTsKPiAKPiAJcmVzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOwo+IAlpZiAoIXJlcykK PiAJCWVycigxLCAiZHJtTW9kZUdldFJlc291cmNlcyIpOwo+IAo+IAlzZXR1cF9zY3JlZW4ocmVz KTsKPiB9Cj4gCj4gc3RhdGljIHZvaWQgd2FpdF9mb3JfaW5wdXQodm9pZCkKPiB7Cj4gCXN0cnVj dCBwb2xsZmQgcGZkID0gewo+IAkJLmZkID0gMCwKPiAJCS5ldmVudHMgPSBQT0xMSU4sCj4gCX07 Cj4gCj4gCXBvbGwoJnBmZCwgMSwgLTEpOwo+IH0KPiAKPiBpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQo+IHsKPiAJY29uc3QgY2hhciAqbW9kdWxlID0gInF4bCI7Cj4gCWlmIChhcmdj ID4gMSkKPiAJCW1vZHVsZSA9IGFyZ3ZbMV07Cj4gCj4gCXNldHVwX2RybShtb2R1bGUpOwo+IAlz ZXR1cF9jdXJzb3IoKTsKPiAKPiAJd2FpdF9mb3JfaW5wdXQoKTsKPiAKPiAJcmV0dXJuIDA7Cj4g fQoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9u Cmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==