From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 1/2] drm: Introduce crtc->mode_valid() callback Date: Fri, 28 Apr 2017 15:58:53 +0300 Message-ID: <20170428125853.GZ30290@intel.com> References: <3e1dba0cd5fc053e56f1c9c94d0cb8789ecca4ae.1493203049.git.joabreu@synopsys.com> <20170428114127.GY30290@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2C1CE6E0EF for ; Fri, 28 Apr 2017 12:59:01 +0000 (UTC) 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: Jose Abreu Cc: Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Carlos Palminha List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBBcHIgMjgsIDIwMTcgYXQgMDE6MzA6MTZQTSArMDEwMCwgSm9zZSBBYnJldSB3cm90 ZToKPiBIaSBWaWxsZSwKPiAKPiAKPiBUaGFua3MgZm9yIHRoZSByZXZpZXchIE15IGNvbW1lbnRz IGlubGluZS4KPiAKPiAKPiBPbiAyOC0wNC0yMDE3IDEyOjQxLCBWaWxsZSBTeXJqw6Rsw6Qgd3Jv dGU6Cj4gPiBPbiBXZWQsIEFwciAyNiwgMjAxNyBhdCAxMTo0ODozNEFNICswMTAwLCBKb3NlIEFi cmV1IHdyb3RlOgo+ID4+IFNvbWUgY3J0YydzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBpbiB0aGUg bW9kZSB0aGV5IGNhbiBkaXNwbGF5LiBJbgo+ID4+IHRoaXMgcGF0Y2ggYSBuZXcgY2FsbGJhY2sg KGNydGMtPm1vZGVfdmFsaWQoKSkgaXMgaW50cm9kdWNlZCB0aGF0Cj4gPj4gaXMgY2FsbGVkIGF0 IHRoZSBzYW1lIHN0YWdlIG9mIGNvbm5lY3Rvci0+bW9kZV92YWxpZCgpIGNhbGxiYWNrLgo+ID4+ Cj4gPj4gVGhpcyBzaGFsbCBiZSBpbXBsZW1lbnRlZCBpZiB0aGUgY3J0YyBoYXMgc29tZSBzb3J0 IG9mIHJlc3RyaWN0aW9uCj4gPj4gc28gdGhhdCB3ZSBkb24ndCBwcm9iZSBtb2RlcyB0aGF0IHdp bGwgZmFpbCBpbiB0aGUgY29tbWl0KCkgc3RhZ2UuCj4gPj4gRm9yIGV4YW1wbGU6IEEgZ2l2ZW4g Y3J0YyBtYXkgYmUgcmVzcG9uc2libGUgdG8gc2V0IGEgY2xvY2sgdmFsdWUuCj4gPj4gSWYgdGhl IGNsb2NrIGNhbiBub3QgcHJvZHVjZSBhbGwgdGhlIHZhbHVlcyBmb3IgdGhlIGF2YWlsYWJsZQo+ ID4+IG1vZGVzIHRoZW4gdGhpcyBjYWxsYmFjayBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0aGUg bnVtYmVyIG9mCj4gPj4gcHJvYmJlZCBtb2RlcyB0byBvbmx5IHRoZSBvbmVzIHRoYXQgY2FuIGJl IGRpc3BsYXllZC4KPiA+Pgo+ID4+IElmIHRoZSBjcnRjIGRvZXMgbm90IGltcGxlbWVudCB0aGUg Y2FsbGJhY2sgdGhlbiB0aGUgYmVoYXZpb3VyIHdpbGwKPiA+PiByZW1haW4gdGhlIHNhbWUuIEFs c28sIGZvciBhIGdpdmVuIHNldCBvZiBjcnRjcyB0aGF0IGNhbiBiZSBib3VuZCB0bwo+ID4+IHRo ZSBjb25uZWN0b3IsIGlmIGF0IGxlYXN0IG9uZSBjYW4gZGlzcGxheSB0aGUgbW9kZSB0aGVuIHRo ZSBtb2RlCj4gPj4gd2lsbCBiZSBwcm9iYmVkLgo+ID4+Cj4gPj4gU2lnbmVkLW9mZi1ieTogSm9z ZSBBYnJldSA8am9hYnJldUBzeW5vcHN5cy5jb20+Cj4gPj4gQ2M6IENhcmxvcyBQYWxtaW5oYSA8 cGFsbWluaGFAc3lub3BzeXMuY29tPgo+ID4+IENjOiBBbGV4ZXkgQnJvZGtpbiA8YWJyb2RraW5A c3lub3BzeXMuY29tPgo+ID4+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGlu dXguaW50ZWwuY29tPgo+ID4+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xs LmNoPgo+ID4+IENjOiBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KPiA+PiAtLS0KPiA+ PiAgZHJpdmVycy9ncHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYyAgICAgICB8IDQ0ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gPj4gIGluY2x1ZGUvZHJtL2RybV9tb2Rlc2V0X2hl bHBlcl92dGFibGVzLmggfCAyNiArKysrKysrKysrKysrKysrKysrCj4gPj4gIDIgZmlsZXMgY2hh bmdlZCwgNzAgaW5zZXJ0aW9ucygrKQo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fcHJvYmVfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2JlX2hlbHBl ci5jCj4gPj4gaW5kZXggMWIwYzE0YS4uNjFlYWMzMCAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vZHJtX3Byb2JlX2hlbHBlci5jCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9wcm9iZV9oZWxwZXIuYwo+ID4+IEBAIC04MCw2ICs4MCw0NiBAQAo+ID4+ICAJcmV0dXJuIE1P REVfT0s7Cj4gPj4gIH0KPiA+PiAgCj4gPj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyBk cm1fbW9kZV92YWxpZGF0ZV9jb25uZWN0b3JfY3J0YygKPiA+PiArCQlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAo+ID4+ICsJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ ID4gUHJvYmFibHkgbW9yZSB0eXBpY2FsIHdheSB0byBzcGxpdCB0aGUgbGluZXMgd291bGQgYmU6 Cj4gPiBzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKPiA+IGRybV9tb2RlX3ZhbGlkYXRlX2Nv bm5lY3Rvcl9jcnRjKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAJCQkJIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+IAo+IEFncmVlLgo+IAo+ID4KPiA+IEFsc28g J21vZGUnIHNob3VsZCBiZSBjb25zdC4gTG9va3MgbGlrZSB0aGUgY29ubmVjdG9yLT5tb2RlX3Zh bGlkKCkKPiA+IGhvb2sgaXMgbWlzc2luZyB0aGUgY29uc3QgYXMgd2VsbCwgc28gdGhhdCB0b28g c2hvdWxkIGJlIGZpeGVkLgo+IAo+IFllYWgsIHRoYXRzIHdoeSBJIGRpZG4ndCB1c2UgY29uc3Qg aGVyZS4gSWYgSSBjaGFuZ2UKPiBjb25uZWN0b3ItPm1vZGVfdmFsaWQoKSB0aGVuIEkgd2lsbCBu ZWVkIHRvIGNoYW5nZSBldmVyeSBkcml2ZXIKPiB3aG8gdXNlcyBpdC4gUGxlYXNlIGRvbid0IGdl dCBtZSB3cm9uZyBidXQgSSdtIG5vdCBmdWxseQo+IGFsbG9jYXRlZCB0byBwYXRjaCBzdWJtaXNz aW9uLCBjYW4gd2UgZm9jdXMgb24gZ2V0dGluZyB0aGlzIHBhdGNoCj4gbWVyZ2VkIGZpcnN0IGFu ZCB0aGVuIGNoYW5nZSB0aGUgY29ubmVjdG9yLT5tb2RlX3ZhbGlkKCkgdG8gY29uc3QKPiB3aGVu IEkgaGF2ZSB0aGUgdGltZT8KClNob3VsZCBiZSBhIGdvb2QgY29jY2luZWxsZSBleGVyY2lzZSA7 KSBCdXQgaXQgY2FuIGNlcnRhaW5seSBiZSBkb25lCmxhdGVyLgoKPiAKPiA+Cj4gPiBOb3Qgc3Vy ZSBhYm91dCB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uIEl0IGRvZXNuJ3QgcmVhbGx5IHJlZmxl Y3Qgd2hhdAo+ID4gaXQgZG9lcyBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUuIGRybV9tb2RlX3Zh bGlkYXRlX2Nvbm5lY3Rvcl9wb3NzaWJsZV9jcnRjcygpCj4gPiBwZXJoYXBzPyBCdXQgdGhhdCBp cyBnZXR0aW5nIHF1aXRlIGxvbmcgc28gbm90IHN1cmUgaWYgaXQnIGEgZ29vZCBpZGVhCj4gPiBl aXRoZXIuIEkgZ3Vlc3Mgc2ltcGx5IG1ha2luZyB0aGUgbmFtZSByZWZlciB0byBwbHVyYWwgY3J0 Y3MgbWlnaHQgYmUKPiA+IGEgcmVhc29uYWJsZSBjb21wcm9taXNlLCBpZS4gZHJtX21vZGVfdmFs aWRhdGVfY29ubmVjdG9yX2NydGNzKCk/Cj4gCj4gU291bmRzIGZpbmUgYnkgbWUgOikKPiAKPiA+ Cj4gPj4gK3sKPiA+PiArCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNf ZnVuY3MgPSBOVUxMOwo+ID4+ICsJZW51bSBkcm1fbW9kZV9zdGF0dXMgbW9kZV9zdGF0dXMgPSBN T0RFX0VSUk9SOwo+ID4+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2 Owo+ID4+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ID4+ICsJc3RydWN0IGRybV9j cnRjICpjcnRjOwo+ID4gQSBsb3Qgb2YgdGhlc2UgY2FuIGJlIG1vdmVkIGludG8gdGlnaHRlciBz Y29wZS4KPiAKPiBBZ3JlZS4KPiAKPiA+Cj4gPj4gKwlib29sIGNhbGxiYWNrX2ZvdW5kID0gZmFs c2U7Cj4gPiBJIGRvbid0IHRoaW5rIHlvdSBuZWVkIHRoaXMgdmFyaWFibGUgYXQgYWxsLiBTZWUg YmVsb3cuCj4gPgo+ID4+ICsJaW50IGk7Cj4gPj4gKwo+ID4+ICsJZm9yIChpID0gMDsgaSA8IERS TV9DT05ORUNUT1JfTUFYX0VOQ09ERVI7IGkrKykgewo+ID4+ICsJCWVuY29kZXIgPSBkcm1fZW5j b2Rlcl9maW5kKGRldiwgY29ubmVjdG9yLT5lbmNvZGVyX2lkc1tpXSk7Cj4gPj4gKwo+ID4+ICsJ CWlmICghZW5jb2RlcikKPiA+PiArCQkJY29udGludWU7Cj4gPj4gKwo+ID4+ICsJCWRybV9mb3Jf ZWFjaF9jcnRjKGNydGMsIGRldikgewo+ID4+ICsJCQljcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVy X3ByaXZhdGU7Cj4gPj4gKwo+ID4+ICsJCQlpZiAoIWRybV9lbmNvZGVyX2NydGNfb2soZW5jb2Rl ciwgY3J0YykpCj4gPj4gKwkJCQljb250aW51ZTsKPiA+PiArCQkJaWYgKCFjcnRjX2Z1bmNzIHx8 ICFjcnRjX2Z1bmNzLT5tb2RlX3ZhbGlkKQo+ID4+ICsJCQkJY29udGludWU7Cj4gPj4gKwo+ID4+ ICsJCQkvKiBNT0RFX09LPTAgYW5kIGRlZmF1bHQgbW9kZV9zdGF0dXM9TU9ERV9FUlJPUj0tMQo+ ID4+ICsJCQkgKiBzbyBpZiBhdCBsZWFzdCBvbmUgY3J0YyBhY2NlcHRzIHRoZSBtb2RlIHdlIGdl dAo+ID4+ICsJCQkgKiBNT0RFX09LICovCj4gPj4gKwkJCW1vZGVfc3RhdHVzICY9IGNydGNfZnVu Y3MtPm1vZGVfdmFsaWQoY3J0YywgbW9kZSk7Cj4gPj4gKwkJCWNhbGxiYWNrX2ZvdW5kIHw9IHRy dWU7Cj4gPiBUaGUgbmVlZCBmb3IgYSBjb21tZW50IGhlcmUgdGVsbHMgbWUgdGhhdCBpdCdzIHBy b2JhYmx5IGJldHRlcgo+ID4gdG8gZ290IGZvciBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIGNvZGUu IFNvbWV0aGluZyBsaWtlOgo+ID4KPiA+IG1vZGVfc3RhdHVzID0gY3J0Y19mdW5jcy0+bW9kZV92 YWxpZChjcnRjLCBtb2RlKTsKPiA+IGlmIChtb2RlX3N0YXR5cyA9PSBNT0RFX09LKQo+ID4gCXJl dHVybiBtb2RlX3N0YXR1czsKPiAKPiBBY3R1YWxseSBJIHdhcyBwbGFubmluZyB0byBzZW5kIGEg bmV3IHZlcnNpb24gd2l0aCAicmV0dXJuIiBpbgo+IHRoZSBpbm5lciBsb29wIHRvIGF2b2lkIHVu bmVlZGVkIHdvcmsgYXMgdGhlIG1vZGUgd291bGQgYmUKPiBhY2NlcHRlZCBhbnl3YXksIHNvIHRo YXRzIG1vcmUgdGhhbiBhZ3JlZWQgOikKPiAKPiA+Cj4gPiBBbmQgYXQgdGhlIGVuZCBvZiB0aGUg ZnVuY3Rpb24ganVzdCByZXR1cm4gTU9ERV9FUlJPUiwgb3IKPiA+IHNvbWUgb3RoZXIgZXJyb3Ig dmFsdWUgaWYgd2UgaGF2ZSBzb21ldGhpbmcgc3VpdGFibGUuIEhtbS4KPiA+IFBlcmhhcHMgd2Ug c2hvdWxkIGp1c3QgcmV0dXJuIHRoZSBlcnJvciBmcm9tIHRoZSBmaXJzdCBvciBsYXN0Cj4gPiBj cnRjPyBFaXRoZXIgc2hvdWxkIGJlIHByZXR0eSBlYXN5LCBqdXN0ICJyZXQgPSBtb2RlX3N0YXR1 cyIgd2l0aGluCj4gPiB0aGUgbG9vcCBpZiBpdCBkaWRuJ3QgcmV0dXJuIE1PREVfT0sgYW5kIHRo ZW4gJ3JldHVybiByZXQnIGF0IHRoZQo+ID4gZW5kIG9mIHRoZSBmdW5jdGlvbi4KPiAKPiBXaGVu IEkgd2FzIHdyaXRpbmcgdGhpcyBJIGFsc28gdGhvdWdoIGFib3V0IHdoYXQgZXJyb3Igc2hvdWxk IGJlCj4gcmV0dXJuZWQgb24gZmFpbHVyZS4gSSBsZWZ0IHRoZSAiYW5kIiBtYXNrIGJ1dCBtYXli ZSBNT0RFX0VSUk9SCj4gd291bGQgYmUgbW9yZSBzdWl0YWJsZSBhcyBpdHMgbW9yZSBnZW5lcmFs LiBJJ20gdGhpbmtpbmcgdGhhdCBpZgo+IHdlIHJldHVybiBNT0RFX1NPTUVUSElORyB0aGVuIHVz ZXIgY2FuIGJlICJ0cmlja2VkIiBiZWNhdXNlIG5vdAo+IGFsbCBjcnRjcyBjYW4gYWdyZWUgb24g dGhlIGVycm9yLgoKV2VsbCBpdCB3b3VsZCBtZWFuIHRoYXQgd2Ugd291bGQgYXQgbGVhc3QgZ2l2 ZSBpbmZvcm1hdGlvbiBvbiB3aGF0Cm9uZSBjcnRjIHRob3VnaCB0aGUgZXJyb3Igd2FzLiBPdGhl cndpc2Ugd2UgZG9uJ3QgZ2l2ZSBhbnkKaW5mb3JtYXRpb24gd2h5IHRoZSBtb2RlIHdhcyByZWpl Y3RlZC4gSSdtIHRoaW5raW5nIHNvbWUgaW5mb21hdGlvbiBpcwpiZXR0ZXIgdGhhbiBub25lLgoK PiAKPiA+Cj4gPj4gKwkJfQo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCS8qIFdlIGNhbiByZWFjaCBo ZXJlIHdpdGhvdXQgY2FsbGluZyBtb2RlX3ZhbGlkIGlmIHRoZXJlIGlzIG5vCj4gPj4gKwkgKiBy ZWdpc3RlcmVkIGNydGMgd2l0aCB0aGlzIGNhbGxiYWNrLCBsZXRzIHJldHVybiBNT0RFX09LIGlu IHRoaXMKPiA+PiArCSAqIGNhc2UgKi8KPiA+PiArCXJldHVybiBjYWxsYmFja19mb3VuZCA/IG1v ZGVfc3RhdHVzIDogTU9ERV9PSzsKPiA+PiArfQo+ID4+ICsKPiA+PiAgc3RhdGljIGludCBkcm1f aGVscGVyX3Byb2JlX2FkZF9jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcikKPiA+PiAgewo+ID4+ICAJc3RydWN0IGRybV9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9k ZTsKPiA+PiBAQCAtNDMxLDYgKzQ3MSwxMCBAQCBpbnQgZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf Y29ubmVjdG9yX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPj4gIAkJ aWYgKG1vZGUtPnN0YXR1cyA9PSBNT0RFX09LICYmIGNvbm5lY3Rvcl9mdW5jcy0+bW9kZV92YWxp ZCkKPiA+PiAgCQkJbW9kZS0+c3RhdHVzID0gY29ubmVjdG9yX2Z1bmNzLT5tb2RlX3ZhbGlkKGNv bm5lY3RvciwKPiA+PiAgCQkJCQkJCQkgICBtb2RlKTsKPiA+PiArCj4gPj4gKwkJaWYgKG1vZGUt PnN0YXR1cyA9PSBNT0RFX09LKQo+ID4+ICsJCQltb2RlLT5zdGF0dXMgPSBkcm1fbW9kZV92YWxp ZGF0ZV9jb25uZWN0b3JfY3J0YygKPiA+PiArCQkJCQljb25uZWN0b3IsIG1vZGUpOwo+ID4gSW5k ZW50YXRpb24uCj4gPgo+ID4gQW5kIGFjdHVhbGx5LCBtYXliZSB5b3Ugc2hvdWxkIGFsc28gbW92 ZSB0aGUgY29ubmVjdG9yX2Z1bmNzLT5tb2RlX3ZhbGlkKCkKPiA+IGNhbGwgaW50byB0aGUgbmV3 IGZ1bmN0aW9uLCBhbmQgdGhlbiB5b3UgY291bGQganVzdCBjYWxsIHRoZSBuZXcKPiA+IGZ1bmN0 aW9uIGRybV9tb2RlX3ZhbGlkYXRlX2Nvbm5lY3RvcigpIG9yIHNvbWV0aGluZyBhbG9uZyB0aG9z ZSBsaW5lcy4KPiAKPiAiZHJtX21vZGVfdmFsaWRhdGVfcGlwZWxpbmUiID8gaS5lLiBtYXliZSBp ZiBpbiB0aGUgZnV0dXJlIHdlCj4gaGF2ZSB0aGUgbmVlZCBmb3IgYW4gZW5jb2Rlci0+bW9kZV92 YWxpZD8gKHJlbW90ZSB0aG91Z2h0KQoKV2VsbCwgd2UgcGFzcyBjb25uZWN0b3IgYXMgdGhlIHRo aW5nIHRoYXQgZHJpdmVzIHRoZSB2YWxpZGF0aW9uIGhlcmUsIHNvCmhhdmluZyBjb25uZWN0b3Ig aXMgdGhlIG5hbWUgaXMgYXBwcm9wcmlhdGUgSSB0aGluay4KCj4gCj4gPgo+ID4+ICAJfQo+ID4+ ICAKPiA+PiAgcHJ1bmU6Cj4gPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tb2Rlc2V0 X2hlbHBlcl92dGFibGVzLmggYi9pbmNsdWRlL2RybS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxl cy5oCj4gPj4gaW5kZXggYzAxYzMyOC4uNTlmZmZiYSAxMDA2NDQKPiA+PiAtLS0gYS9pbmNsdWRl L2RybS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oCj4gPj4gKysrIGIvaW5jbHVkZS9kcm0v ZHJtX21vZGVzZXRfaGVscGVyX3Z0YWJsZXMuaAo+ID4+IEBAIC0xMDYsNiArMTA2LDMyIEBAIHN0 cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3Mgewo+ID4+ICAJdm9pZCAoKmNvbW1pdCkoc3RydWN0 IGRybV9jcnRjICpjcnRjKTsKPiA+PiAgCj4gPj4gIAkvKioKPiA+PiArCSAqIEBtb2RlX3ZhbGlk Ogo+ID4+ICsJICoKPiA+PiArCSAqIFRoaXMgY2FsbGJhY2sgc2hvdWxkIGJlIGltcGxlbWVudGVk IGlmIHRoZSBjcnRjIGhhcyBzb21lIHNvcnQgb2YKPiA+PiArCSAqIHJlc3RyaWN0aW9uIGluIHRo ZSBtb2RlcyBpdCBjYW4gZGlzcGxheS4gRm9yIGV4YW1wbGUsIGEgZ2l2ZW4gY3J0Ywo+ID4+ICsJ ICogbWF5IGJlIHJlc3BvbnNpYmxlIHRvIHNldCBhIGNsb2NrIHZhbHVlLiBJZiB0aGUgY2xvY2sg Y2FuIG5vdAo+ID4+ICsJICogcHJvZHVjZSBhbGwgdGhlIHZhbHVlcyBmb3IgdGhlIGF2YWlsYWJs ZSBtb2RlcyB0aGVuIHRoaXMgY2FsbGJhY2sKPiA+PiArCSAqIGNhbiBiZSB1c2VkIHRvIHJlc3Ry aWN0IHRoZSBudW1iZXIgb2YgcHJvYmJlZCBtb2RlcyB0byBvbmx5IHRoZSBvbmVzCj4gPj4gKwkg KiB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQuCj4gPj4gKwkgKgo+ID4+ICsJICogVGhpcyBpcyBkaXJl Y3RseSBjYWxsZWQgYXQgdGhlIHNhbWUgc3RhZ2Ugb2YgY29ubmVjdG9yLT5tb2RlX3ZhbGlkCj4g Pj4gKwkgKiBjYWxsYmFjay4KPiA+PiArCSAqCj4gPj4gKwkgKiBOT1RFOgo+ID4+ICsJICoKPiA+ PiArCSAqIEZvciBhIGdpdmVuIHNldCBvZiBjcnRjJ3MgaW4gYSBkcm1fZGV2aWNlLCBpZiBhdCBs ZWFzdCBvbmUgZG9lcyBub3QKPiA+PiArCSAqIGhhdmUgdGhlIG1vZGVfdmFsaWQgY2FsbGJhY2ss IG9yLCBhdCBsZWFzdCBvbmUgcmV0dXJucyBNT0RFX09LIHRoZW4KPiA+PiArCSAqIHRoZSBtb2Rl IHdpbGwgYmUgcHJvYmJlZC4KPiA+PiArCSAqCj4gPj4gKwkgKiBSRVRVUk5TOgo+ID4+ICsJICoK PiA+PiArCSAqIGRybV9tb2RlX3N0YXR1cyBFbnVtCj4gPj4gKwkgKi8KPiA+PiArCWVudW0gZHJt X21vZGVfc3RhdHVzICgqbW9kZV92YWxpZCkoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4+ICsJ CQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cj4gPiBDb25zdC4gSW5kZW50YXRpb24g bG9va3Mgb2ZmIGFnYWluLgo+IAo+IEFncmVlLgo+IAo+ID4KPiA+PiArCj4gPj4gKwkvKioKPiA+ PiAgCSAqIEBtb2RlX2ZpeHVwOgo+ID4+ICAJICoKPiA+PiAgCSAqIFRoaXMgY2FsbGJhY2sgaXMg dXNlZCB0byB2YWxpZGF0ZSBhIG1vZGUuIFRoZSBwYXJhbWV0ZXIgbW9kZSBpcyB0aGUKPiA+PiAt LSAKPiA+PiAxLjkuMQo+ID4+Cj4gCj4gCj4gQmVzdCByZWdhcmRzLAo+IEpvc2UgTWlndWVsIEFi cmV1CgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK