From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 09/60] drm/bridge: Add connector-related bridge operations and data Date: Thu, 8 Aug 2019 21:36:31 +0300 Message-ID: <20190808183631.GX6055@pendragon.ideasonboard.com> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-6-laurent.pinchart@ideasonboard.com> <1f98e5f0-d513-d3f2-420d-80e0e0c3c71b@samsung.com> <20190711073548.GD15868@phenom.ffwll.local> <20190808181948.GW6055@pendragon.ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id 161906E8A6 for ; Thu, 8 Aug 2019 18:36:36 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190808181948.GW6055@pendragon.ideasonboard.com> 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: Maxime Ripard , Sebastian Reichel , dri-devel@lists.freedesktop.org, Tomi Valkeinen , Sean Paul List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBBdWcgMDgsIDIwMTkgYXQgMDk6MTk6NDhQTSArMDMwMCwgTGF1cmVudCBQaW5jaGFy dCB3cm90ZToKPiBPbiBUaHUsIEp1bCAxMSwgMjAxOSBhdCAwOTozNTo0OEFNICswMjAwLCBEYW5p ZWwgVmV0dGVyIHdyb3RlOgo+ID4gT24gV2VkLCBKdWwgMTAsIDIwMTkgYXQgMDI6MTI6MTRQTSAr MDIwMCwgQW5kcnplaiBIYWpkYSB3cm90ZToKPiA+PiBIaSBMYXVyZW50LAo+ID4+IAo+ID4+IEkg bGlrZSB0aGUgYXBwcm9hY2gsIGN1cnJlbnQgcHJhY3RpY2Ugd2hlbiBhbG1vc3QgZXZlcnkgYnJp ZGdlIHNob3VsZAo+ID4+IG9wdGlvbmFsbHkgaW1wbGVtZW50IGNvbm5lY3Rvciwgb3IgYWx0ZXJu YXRpdmVseSBkb3duc3RyZWFtIGJyaWRnZSBvcgo+ID4+IHBhbmVsIGlzIHZlcnkgcGFpbmZ1bC4K PiA+IAo+ID4gWWVhaCBJIHRoaW5rIHRoaXMgbG9va3MgbW9zdGx5IHJlYXNvbmFibGUuIFNvbWUg YXBpIGRlc2lnbiBjb21tZW50cyBvbiB0b3AKPiA+IG9mIEFuZHJ6ZWonLCB3aXRoIHRoZSBmYWly IHdhcm5pbmcgdGhhdCBJIGRpZG4ndCBib3RoZXIgdG8gcmVhZCB1cCBvbiBob3cKPiA+IGl0J3Mg YWxsIHVzZWQgaW4gdGhlIGVuZC4gSSBwcm9iYWJseSBzaG91bGQgZ28gYW5kIGRvIHRoYXQsIGF0 IGxlYXN0IHRvCj4gPiBnZXQgYSBmZWVsaW5nIGZvciB3aGF0IHlvdXIgaHBkX2NiIHVzdWFsbHkg ZG9lcy4KPiA+IAo+ID4+IE1vcmUgY29tbWVudHMgaW5saW5lZC4KPiA+PiAKPiA+PiBPbiAwNy4w Ny4yMDE5IDIwOjE4LCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4+PiBUbyBzdXBwb3J0IGlt cGxlbWVudGF0aW9uIG9mIERSTSBjb25uZWN0b3JzIG9uIHRvcCBvZiBEUk0gYnJpZGdlcwo+ID4+ PiBpbnN0ZWFkIG9mIGJ5IGJyaWRnZXMsIHRoZSBkcm1fYnJpZGdlIG5lZWRzIHRvIGV4cG9zZSBu ZXcgb3BlcmF0aW9ucyBhbmQKPiA+Pj4gZGF0YToKPiA+Pj4KPiA+Pj4gLSBPdXRwdXQgZGV0ZWN0 aW9uLCBob3QtcGx1ZyBub3RpZmljYXRpb24sIG1vZGUgcmV0cmlldmFsIGFuZCBFRElECj4gPj4+ ICAgcmV0cmlldmFsIG9wZXJhdGlvbnMKPiA+Pj4gLSBCaXRtYXNrIG9mIHN1cHBvcnRlZCBvcGVy YXRpb25zCj4gPj4gCj4gPj4gCj4gPj4gV2h5IGRvIHdlIG5lZWQgdGhlc2UgYml0bWFzayBhdCBh bGw/IFdoeSBjYW5ub3Qgd2UgcmVseSBvbiBwcmVzZW5jZSBvZgo+ID4+IG9wZXJhdGlvbidzIGNh bGxiYWNrPwo+ID4gCj4gPiBZZWFoIGFsc28gbm90IGEgaHVnZSBmYW4gb2YgdGhlc2UgYml0bWFz a3MuIFNtZWxscyBsaWtlCj4gPiBEUklWRVJfR0VNfERSSVZFUl9NT0RFU0VULCBhbmQgSSBwZXJz b25hbGx5IHJlYWxseSBoYXRlIHRob3NlLiBFYXN5IHRvCj4gPiBhZGQsIGdlbmVyYWxseSBnb29k IGV4Y3VzZSB0byBub3QgaGF2ZSB0byB0aGluayB0aHJvdWdoIHRoZSBkZXNpZ24gYmV0d2Vlbgo+ ID4gZGlmZmVyZW50IHBhcnRzIG9mIGRyaXZlcnMgLSAianVzdCIgYWRkIGFub3RoZXIgZmxhZy4K PiAKPiBUaGUgcmVhc29uIGlzIHRoYXQgYSBicmlkZ2UgbWF5IHN1cHBvcnQgYW4gb3BlcmF0aW9u IChhcyBpbiBpbXBsZW1lbnRlZAo+IGluIHRoZSBicmlkZ2UgaGFyZHdhcmUpLCBidXQgdGhhdCBv cGVyYXRpb24gbWF5IG5vdCBiZSBzdXBwb3J0ZWQgb24gYQo+IHBhcnRpY3VsYXIgYm9hcmQuIEZv ciBpbnN0YW5jZSBhbiBIRE1JIGVuY29kZXIgbWF5IHN1cHBvcnQgcmVhZGluZyBFRElECj4gd2hl biB0aGUgRERDIGxpbmVzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGVuY29kZXIsIGJ1dCBhIGJvYXJk IG1heSBjb25uZWN0Cj4gdGhlIEREQyBsaW5lcyB0byBhbiBJMkMgcG9ydCBvZiB0aGUgU29DLiBX ZSB0aHVzIG5lZWQgdG8gZGVjb3VwbGUKPiBpZiBhIHBhcnRpY3VsYXIgaW5zdGFuY2Ugb2YgdGhl IGRldmljZSBzdXBwb3J0cyB0aGUgb3BlcmF0aW9uIChleHBvc2VkCj4gYnkgdGhlIG9wcyBmbGFn cykgZnJvbSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMuCj4gCj4gV2UgY291bGQgb2YgY291cnNlIGFs bG9jYXRlIHRoZSBkcm1fYnJpZGdlX2Z1bmNzIHN0cnVjdHVyZSBkeW5hbWljYWxseQo+IGZvciBl YWNoIGJyaWRnZSBpbnN0YW5jZSwgYW5kIGZpbGwgaXQgd2l0aCBmdW5jdGlvbiBwb2ludGVycyBt YW51YWxseSwKPiBsZWF2aW5nIHRoZSB1bnVzZWQgb3BzIGFsd2F5cyBOVUxMLCBidXQgdGhhdCB3 b3VsZCByZXF1aXJlIG1ha2luZyB0aGUKPiBzdHJ1Y3R1cmUgd3JpdGFibGUsIHdoaWNoIGlzIGNv bnNpZGVyZWQgYSBzZWN1cml0eSBpc3N1ZS4gVGhhdCdzIHdoeSBJCj4gZGVjaWRlZCB0byBrZWVw IHRoZSBkcm1fYnJpZGdlX2Z1bmNzIHN0cnVjdHVyZSBhcyBhIGdsb2JhbCBzdGF0aWMgY29uc3QK PiBzdHJ1Y3R1cmUsIGFuZCBhZGQgYW4gb3BzIGJpdG1hc2suCj4gCj4gPj4+IC0gQnJpZGdlIG91 dHB1dCB0eXBlCj4gPj4+Cj4gPj4+IEFkZCBhbmQgZG9jdW1lbnQgdGhlc2UuCj4gPj4+Cj4gPj4+ IFRocmVlIG5ldyBicmlkZ2UgaGVscGVyIGZ1bmN0aW9ucyBhcmUgYWxzbyBhZGRlZCB0byBoYW5k bGUgaG90IHBsdWcKPiA+Pj4gbm90aWZpY2F0aW9uIGluIGEgd2F5IHRoYXQgaXMgYXMgdHJhbnNw YXJlbnQgYXMgcG9zc2libGUgZm9yIHRoZQo+ID4+PiBicmlkZ2VzLgo+ID4+IAo+ID4+IERvY3Vt ZW50YXRpb24gb2YgbmV3IG9wc2VzIGRvZXMgbm90IGV4cGxhaW4gaG93IGl0IHNob3VsZCBjb29w ZXJhdGUgd2l0aAo+ID4+IGJyaWRnZSBjaGFpbmluZywgSSBzdXBwb3NlIHRoZXkgc2hvdWxkIGJl IGNoYWluZWQgZXhwbGljaXRseSwgYW0gSQo+ID4+IHJpZ2h0PyBNb3JlIGNvbW1lbnRzIGFib3V0 IGl0IGxhdGVyLgo+IAo+IE5vLCB0aGUgd2hvbGUgcG9pbnQgaXMgdGhhdCB0aGV5IHNob3VsZCBu b3QgYmUgY2hhaW5lZCBhdCBhbGwuIEEgYnJpZGdlCj4gZG9lcyBub3QgaGF2ZSB0byBwcm9wYWdh dGUsIGZvciBpbnN0YW5jZSwgLmdldF9lZGlkKCkgdG8gdGhlIG5leHQKPiBicmlkZ2UuIFRoYXQn cyBvbmUgb2YgdGhlIGNvcmUgZGVzaWduIHByaW5jaXBsZXMgaW4gdGhpcyBzZXJpZXMsIEkgd2Fu dAo+IHRvIGtlZXAgdGhlIGJyaWRnZXMgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLCBhbmQgbW92ZSB0 aGUgY29tcGxleGl0eSBvZgo+IHRoZSBib2lsZXJwbGF0ZSBjb2RlIHRoYXQgaXMgY3VycmVudGx5 IGNvcGllZCBhbGwgYXJvdW5kIHRvIGhlbHBlcnMuIFNlZQo+IHBhdGNoICJkcm06IEFkZCBoZWxw ZXIgdG8gY3JlYXRlIGEgY29ubmVjdG9yIGZvciBhIGNoYWluIG9mIGJyaWRnZXMiIGZvcgo+IG1v cmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoaXMgaXMgdXNlZCwgd2l0aCBhIGhlbHBlciB0aGF0 IGRlbGVnYXRlcwo+IHRoZSBjb25uZWN0b3Igb3BlcmF0aW9ucyB0byB0aGUgY29ycmVjdCBicmlk Z2UgaW4gdGhlIGNoYWluIGJhc2VkIG9uIHRoZQo+IG9wcyByZXBvcnRlZCBieSBlYWNoIGJyaWRn ZS4KPiAKPiA+Pj4gU2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5j aGFydEBpZGVhc29uYm9hcmQuY29tPgo+ID4+PiAtLS0KPiA+Pj4gIGRyaXZlcnMvZ3B1L2RybS9k cm1fYnJpZGdlLmMgfCAgOTIgKysrKysrKysrKysrKysrKysrKwo+ID4+PiAgaW5jbHVkZS9kcm0v ZHJtX2JyaWRnZS5oICAgICB8IDE3MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LQo+ID4+PiAgMiBmaWxlcyBjaGFuZ2VkLCAyNjEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQo+ID4+Pgo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPiA+Pj4gaW5kZXggNTE5NTc3ZjM2M2UzLi4z YzJhMjU1ZGY3YWYgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdl LmMKPiA+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYwo+ID4+PiBAQCAtNzAs NiArNzAsOCBAQCBzdGF0aWMgTElTVF9IRUFEKGJyaWRnZV9saXN0KTsKPiA+Pj4gICAqLwo+ID4+ PiAgdm9pZCBkcm1fYnJpZGdlX2FkZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4+PiAg ewo+ID4+PiArCW11dGV4X2luaXQoJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+Pj4gKwo+ID4+PiAg CW11dGV4X2xvY2soJmJyaWRnZV9sb2NrKTsKPiA+Pj4gIAlsaXN0X2FkZF90YWlsKCZicmlkZ2Ut Pmxpc3QsICZicmlkZ2VfbGlzdCk7Cj4gPj4+ICAJbXV0ZXhfdW5sb2NrKCZicmlkZ2VfbG9jayk7 Cj4gPj4+IEBAIC04Niw2ICs4OCw4IEBAIHZvaWQgZHJtX2JyaWRnZV9yZW1vdmUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKPiA+Pj4gIAltdXRleF9sb2NrKCZicmlkZ2VfbG9jayk7Cj4gPj4+ ICAJbGlzdF9kZWxfaW5pdCgmYnJpZGdlLT5saXN0KTsKPiA+Pj4gIAltdXRleF91bmxvY2soJmJy aWRnZV9sb2NrKTsKPiA+Pj4gKwo+ID4+PiArCW11dGV4X2Rlc3Ryb3koJmJyaWRnZS0+aHBkX211 dGV4KTsKPiA+Pj4gIH0KPiA+Pj4gIEVYUE9SVF9TWU1CT0woZHJtX2JyaWRnZV9yZW1vdmUpOwo+ ID4+PiAgCj4gPj4+IEBAIC00NjMsNiArNDY3LDk0IEBAIHZvaWQgZHJtX2F0b21pY19icmlkZ2Vf ZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+ICB9Cj4gPj4+ICBFWFBPUlRf U1lNQk9MKGRybV9hdG9taWNfYnJpZGdlX2VuYWJsZSk7Cj4gPj4+ICAKPiA+Pj4gKy8qKgo+ID4+ PiArICogZHJtX2JyaWRnZV9ocGRfZW5hYmxlIC0gZW5hYmxlIGhvdCBwbHVnIGRldGVjdGlvbiBm b3IgdGhlIGJyaWRnZQo+ID4+PiArICogQGJyaWRnZTogYnJpZGdlIGNvbnRyb2wgc3RydWN0dXJl Cj4gPj4+ICsgKiBAY2I6IGhvdC1wbHVnIGRldGVjdGlvbiBjYWxsYmFjawo+ID4+PiArICogQGRh dGE6IGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBob3QtcGx1ZyBkZXRlY3Rpb24gY2FsbGJhY2sK PiA+Pj4gKyAqCj4gPj4+ICsgKiBDYWxsICZkcm1fYnJpZGdlX2Z1bmNzLmhwZF9lbmFibGUgYW5k IHJlZ2lzdGVyIHRoZSBnaXZlbiBAY2IgYW5kIEBkYXRhIGFzCj4gPj4+ICsgKiBob3QgcGx1ZyBu b3RpZmljYXRpb24gY2FsbGJhY2suIEZyb20gbm93IG9uIHRoZSBAY2Igd2lsbCBiZSBjYWxsZWQg d2l0aAo+ID4+PiArICogQGRhdGEgd2hlbiBhbiBvdXRwdXQgc3RhdHVzIGNoYW5nZSBpcyBkZXRl Y3RlZCBieSB0aGUgYnJpZGdlLCB1bnRpbCBob3QgcGx1Zwo+ID4+PiArICogbm90aWZpY2F0aW9u IGdldHMgZGlzYWJsZWQgd2l0aCBkcm1fYnJpZGdlX2hwZF9kaXNhYmxlKCkuCj4gPj4+ICsgKgo+ ID4+PiArICogSG90IHBsdWcgZGV0ZWN0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBEUk1f QlJJREdFX09QX0hQRCBmbGFnIGlzIHNldCBpbgo+ID4+PiArICogYnJpZGdlLT5vcHMuIFRoaXMg ZnVuY3Rpb24gc2hhbGwgbm90IGJlIGNhbGxlZCB3aGVuIHRoZSBmbGFnIGlzIG5vdCBzZXQuCj4g Pj4+ICsgKgo+ID4+PiArICogT25seSBvbmUgaG90IHBsdWcgZGV0ZWN0aW9uIGNhbGxiYWNrIGNh biBiZSByZWdpc3RlcmVkIGF0IGEgdGltZSwgaXQgaXMgYW4KPiA+Pj4gKyAqIGVycm9yIHRvIGNh bGwgdGhpcyBmdW5jdGlvbiB3aGVuIGhvdCBwbHVnIGRldGVjdGlvbiBpcyBhbHJlYWR5IGVuYWJs ZWQgZm9yCj4gPj4+ICsgKiB0aGUgYnJpZGdlLgo+ID4+PiArICovCj4gPj4gCj4gPj4gVG8gc2lt cGxpZnkgYXJjaGl0ZWN0dXJlIG1heWJlIHdvdWxkIGJlIGJldHRlciB0byBlbmFibGUgaHBkIGp1 c3Qgb24KPiA+PiBicmlkZ2UgYXR0YWNoOgo+ID4+IAo+ID4+IGJyaWRnZS0+aHBkX2NiID0gY2I7 Cj4gPj4gCj4gPj4gYnJpZGdlLT5ocGRfZGF0YSA9IGRhdGE7Cj4gPj4gCj4gPj4gcmV0ID0gZHJt X2JyaWRnZV9hdHRhY2goLi4uKTsKPiA+IAo+ID4gWWVhaCBJIGxpa2UgdGhpcyBtb3JlLiBUaGUg b3RoZXIgcHJvYmxlbSBoZXJlIGlzLCB3aGF0IGlmIHlvdSBuZWVkIG1vcmUKPiA+IHRoYW4gMSBj YWxsYmFjayByZWdpc3RlcnMgb24gdGhlIHNhbWUgYnJpZGdlIGhkcCBzaWduYWw/Cj4gCj4gVGhh dCdzIHdoeSBJIGRlY2lkZWQgdG8gaGlkZSBoaWRlIEhQRCB0aHJvdWdoIGhlbHBlcnMsCj4gZHJt X2JyaWRnZV9ocGRfZW5hYmxlKCkgYW5kIGRybV9icmlkZ2VfaHBkX2Rpc2FibGUoKSBvbiB0aGUg bGlzdGVuZXIKPiBzaWRlLCBhbmQgZHJtX2JyaWRnZV9ocGRfbm90aWZ5KCkgb24gdGhlIGV2ZW50 IHJlcG9ydGVyIHNpZGUuIFdoaWxlIHRoZQo+IGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbGlt aXRlZCB0byBhIHNpbmdsZSBsaXN0ZW5lciwgb25seSB0aGUgaGVscGVycwo+IHdvdWxkIG5lZWQg dG8gYmUgY2hhbmdlZCB0byBleHRlbmQgdGhhdCB0byBtdWx0aXBsZSBsaXN0ZW5lcnMuCj4gCj4g Tm90ZSB0aGF0IHRoZSAuaHBkX2VuYWJsZSgpIGFuZCAuaHBkX2Rpc2FibGUoKSBvcGVyYXRpb25z IGFsc28gYWxsb3cgdGhlCj4gYnJpZGdlIHRvIGRpc2FibGUgSFBEIGRldGVjdGlvbiB3aGVuIG5v dCB1c2VkLiBEb2luZyBzbyBrZWVwcyB0aGUgYnJpZGdlCj4gc2ltcGxlLCBpdCBvbmx5IG5lZWRz IHRvIGNhcmUgYWJvdXQgcmVwb3J0aW5nIEhQRCBldmVudHMgd2hlbiB0aGV5J3JlCj4gZW5hYmxl ZCwgd2l0aG91dCBjYXJpbmcgd2hvIChpZiBhbnlvbmUpIGlzIGxpc3RlbmluZywgYW5kIGdldHMg Y2xlYXIKPiBpbnN0cnVjdGlvbnMgb24gd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUg SFBEIGhhcmR3YXJlIChpbiBjYXNlCj4gaXQgY2FuIGJlIGRpc2FibGVkKS4KPiAKPiA+PiBUaGlz IHdheSB3ZSBjb3VsZCBhdm9pZCBhZGRpbmcgbmV3IGNhbGxiYWNrcyBocGRfKGVuYWJsZXxkaXNh YmxlKQo+ID4+IHdpdGhvdXQgYmlnIHNhY3JpZmljZXMuCj4gPj4gCj4gPj4gT25lIG1vcmUgdGhp bmc6IEhQRCBpbiBEaXNwbGF5UG9ydC9IRE1JIGJlc2lkZSBzaWduYWxsaW5nIHBsdWcvdW5wbHVn LAo+ID4+IG5vdGlmaWVzIGFib3V0IHNpbmsgc3RhdHVzIGNoYW5nZSwgaG93IGl0IHRyYW5zbGF0 ZXMgdG8gdGhpcyBjYj8KPiAKPiBUaGlzIGlzIHNvbWV0aGluZyB0aGlzIHNlcmllcyBkb2Vzbid0 IGltcGxlbWVudC4gSSBkb24ndCB0aGluayBpdCB3b3VsZAo+IGJlIGEgYmlnIGRlYWwsIGJ1dCBt eSBrbm93bGVkZ2Ugb2YgSFBEIChlc3BlY2lhbGx5IGZvciBEaXNwbGF5UG9ydCkgZW5kcwo+IGhl cmUuIElmIHlvdSBjYW4gZWxhYm9yYXRlIG9uIHdoYXQgd291bGQgYmUgbmVlZGVkLCBJIGNhbiBp bXBsZW1lbnQKPiB0aGF0Lgo+IAo+ID4+PiArdm9pZCBkcm1fYnJpZGdlX2hwZF9lbmFibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+Pj4gKwkJCSAgIHZvaWQgKCpjYikodm9pZCAqZGF0 YSwKPiA+Pj4gKwkJCQkgICAgICBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyksCj4g Pj4+ICsJCQkgICB2b2lkICpkYXRhKQo+ID4+PiArewo+ID4+PiArCWlmICghYnJpZGdlIHx8ICFi cmlkZ2UtPmZ1bmNzLT5ocGRfZW5hYmxlKQo+ID4+PiArCQlyZXR1cm47Cj4gPj4+ICsKPiA+Pj4g KwltdXRleF9sb2NrKCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPj4+ICsKPiA+Pj4gKwlpZiAoV0FS TihicmlkZ2UtPmhwZF9jYiwgIkhvdCBwbHVnIGRldGVjdGlvbiBhbHJlYWR5IGVuYWJsZWRcbiIp KQo+ID4+PiArCQlnb3RvIHVubG9jazsKPiA+Pj4gKwo+ID4+PiArCWJyaWRnZS0+aHBkX2NiID0g Y2I7Cj4gPj4+ICsJYnJpZGdlLT5ocGRfZGF0YSA9IGRhdGE7Cj4gPj4+ICsKPiA+Pj4gKwlicmlk Z2UtPmZ1bmNzLT5ocGRfZW5hYmxlKGJyaWRnZSk7Cj4gPj4+ICsKPiA+Pj4gK3VubG9jazoKPiA+ Pj4gKwltdXRleF91bmxvY2soJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+Pj4gK30KPiA+Pj4gK0VY UE9SVF9TWU1CT0xfR1BMKGRybV9icmlkZ2VfaHBkX2VuYWJsZSk7Cj4gPj4+ICsKPiA+Pj4gKy8q Kgo+ID4+PiArICogZHJtX2JyaWRnZV9ocGRfZGlzYWJsZSAtIGRpc2FibGUgaG90IHBsdWcgZGV0 ZWN0aW9uIGZvciB0aGUgYnJpZGdlCj4gPj4+ICsgKiBAYnJpZGdlOiBicmlkZ2UgY29udHJvbCBz dHJ1Y3R1cmUKPiA+Pj4gKyAqCj4gPj4+ICsgKiBDYWxsICZkcm1fYnJpZGdlX2Z1bmNzLmhwZF9k aXNhYmxlIGFuZCB1bnJlZ2lzdGVyIHRoZSBob3QgcGx1ZyBkZXRlY3Rpb24KPiA+Pj4gKyAqIGNh bGxiYWNrIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIGRybV9icmlkZ2VfaHBkX2VuYWJsZSgp LiBPbmNlIHRoaXMKPiA+Pj4gKyAqIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNhbGxiYWNrIHdpbGwg bm90IGJlIGNhbGxlZCBieSB0aGUgYnJpZGdlIHdoZW4gYW4KPiA+Pj4gKyAqIG91dHB1dCBzdGF0 dXMgY2hhbmdlIG9jY3Vycy4KPiA+Pj4gKyAqCj4gPj4+ICsgKiBIb3QgcGx1ZyBkZXRlY3Rpb24g aXMgc3VwcG9ydGVkIG9ubHkgaWYgdGhlIERSTV9CUklER0VfT1BfSFBEIGZsYWcgaXMgc2V0IGlu Cj4gPj4+ICsgKiBicmlkZ2UtPm9wcy4gVGhpcyBmdW5jdGlvbiBzaGFsbCBub3QgYmUgY2FsbGVk IHdoZW4gdGhlIGZsYWcgaXMgbm90IHNldC4KPiA+Pj4gKyAqLwo+ID4+PiArdm9pZCBkcm1fYnJp ZGdlX2hwZF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gPj4+ICt7Cj4gPj4+ ICsJaWYgKCFicmlkZ2UgfHwgIWJyaWRnZS0+ZnVuY3MtPmhwZF9kaXNhYmxlKQo+ID4+PiArCQly ZXR1cm47Cj4gPj4+ICsKPiA+Pj4gKwltdXRleF9sb2NrKCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4g Pj4+ICsJYnJpZGdlLT5mdW5jcy0+aHBkX2Rpc2FibGUoYnJpZGdlKTsKPiA+Pj4gKwo+ID4+PiAr CWJyaWRnZS0+aHBkX2NiID0gTlVMTDsKPiA+Pj4gKwlicmlkZ2UtPmhwZF9kYXRhID0gTlVMTDsK PiA+Pj4gKwltdXRleF91bmxvY2soJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+Pj4gK30KPiA+Pj4g K0VYUE9SVF9TWU1CT0xfR1BMKGRybV9icmlkZ2VfaHBkX2Rpc2FibGUpOwo+ID4+PiArCj4gPj4+ ICsvKioKPiA+Pj4gKyAqIGRybV9icmlkZ2VfaHBkX25vdGlmeSAtIG5vdGlmeSBob3QgcGx1ZyBk ZXRlY3Rpb24gZXZlbnRzCj4gPj4+ICsgKiBAYnJpZGdlOiBicmlkZ2UgY29udHJvbCBzdHJ1Y3R1 cmUKPiA+Pj4gKyAqIEBzdGF0dXM6IG91dHB1dCBjb25uZWN0aW9uIHN0YXR1cwo+ID4+PiArICoK PiA+Pj4gKyAqIEJyaWRnZSBkcml2ZXJzIHNoYWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB0byByZXBv cnQgaG90IHBsdWcgZXZlbnRzIHdoZW4gdGhleQo+ID4+PiArICogZGV0ZWN0IGEgY2hhbmdlIGlu IHRoZSBvdXRwdXQgc3RhdHVzLCB3aGVuIGhvdCBwbHVnIGRldGVjdGlvbiBoYXMgYmVlbgo+ID4+ PiArICogZW5hYmxlZCBieSB0aGUgJmRybV9icmlkZ2VfZnVuY3MuaHBkX2VuYWJsZSBjYWxsYmFj ay4KPiA+Pj4gKyAqCj4gPj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGNhbGxlZCBpbiBh IGNvbnRleHQgdGhhdCBjYW4gc2xlZXAuCj4gPj4+ICsgKi8KPiA+Pj4gK3ZvaWQgZHJtX2JyaWRn ZV9ocGRfbm90aWZ5KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+ICsJCQkgICBlbnVt IGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cykKPiA+Pj4gK3sKPiA+Pj4gKwltdXRleF9sb2Nr KCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPj4+ICsJaWYgKGJyaWRnZS0+aHBkX2NiKQo+ID4+PiAr CQlicmlkZ2UtPmhwZF9jYihicmlkZ2UtPmhwZF9kYXRhLCBzdGF0dXMpOwo+ID4gCj4gPiBTbyB0 aGlzIGlzbid0IHF1aXRlIHdoYXQgSSBoYWQgaW4gbWluZC4gSW5zdGVhZCBzb21ldGhpbmcgbGlr ZSB0aGlzOgo+ID4gCj4gPiAJLyogaXRlcmF0ZXMgb3ZlciBhbGwgYnJpZGdlcyBpbiB0aGUgY2hh aW4gY29udGFpbmluZyBAYnJpZGdlICovCj4gPiAJZm9yX2VhY2hfYnJpZGdlKHRtcF9icmlkZ2Us IGJyaWRnZSkgewo+ID4gCQlpZiAodG1wX2JyaWRnZSA9PSBicmlkZ2UpCj4gPiAJCQljb250aW51 ZTsKPiA+IAkJaWYgKGJyaWRnZS0+aHBkX25vdGlmeSk7Cj4gPiAJCQlicmlkZ2UtPmhwZF9ub3Rp ZnkodG1wX2JyaWRnZSwgYnJpZGdlLCBzdGF0dXMpOwo+ID4gCX0KPiA+IAo+ID4gCWVuY29kZXIg PSBlbmNvZGVyX2Zvcl9icmlkZ2UoYnJpZGdlKTsKPiA+IAlpZiAoZW5jb2Rlci0+aGVscGVyX3By aXZhdGUtPmJyaWRnZV9ocGRfbm90aWZ5KQo+ID4gCQllbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZS0+ YnJpZGdlX2hwZF9ub3RpZnkoZW5jb2RlciwgYnJpZGdlLCBzdGF0dXMpOwo+ID4gCj4gPiAJZGV2 ID0gYnJpZGdlLT5kZXYKPiA+IAlpZiAoZGV2LT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJpdmF0ZS0+ YnJpZGdlX2hwZF9ub3RpZnkpCj4gPiAJCWRldi0+bW9kZV9jb25maWcuaGVscGVyX3ByaXZhdGUt PmJyaWRnZV9ocGRfbm90aWZ5KGRldiwgYnJpZGdlLCBzdGF0dXMpCj4gPiAKPiA+IE5vIHJlZ2lz dGVyIGNhbGxiYWNrIG5lZWRlZCwgbm8gbG9ja2luZyBuZWVkZWQsIGV2ZXJ5b25lIGdldHMgZXhh Y3RseSB0aGUKPiA+IGhwZCB0aGV5IHdhbnQvbmVlZC4KPiAKPiBJJ2xsIHJlcGx5IHRvIHRoaXMg ZnVydGhlciBkb3duIHRoZSBtYWlsIHRocmVhZCwgdG8gYWRkcmVzcyBhZGRpdGlvbmFsCj4gY29t bWVudHMuCj4gCj4gPj4+ICsJbXV0ZXhfdW5sb2NrKCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPj4+ ICt9Cj4gPj4+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fYnJpZGdlX2hwZF9ub3RpZnkpOwo+ID4+ PiArCj4gPj4+ICAjaWZkZWYgQ09ORklHX09GCj4gPj4+ICAvKioKPiA+Pj4gICAqIG9mX2RybV9m aW5kX2JyaWRnZSAtIGZpbmQgdGhlIGJyaWRnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXZpY2Ug bm9kZSBpbgo+ID4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oIGIvaW5j bHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gPj4+IGluZGV4IDA4ZGMxNWY5M2RlZC4uYjk0NDVhYTVi MWVmIDEwMDY0NAo+ID4+PiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiA+Pj4gKysr IGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gPj4+IEBAIC0yMyw4ICsyMyw5IEBACj4gPj4+ ICAjaWZuZGVmIF9fRFJNX0JSSURHRV9IX18KPiA+Pj4gICNkZWZpbmUgX19EUk1fQlJJREdFX0hf Xwo+ID4+PiAgCj4gPj4+IC0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ID4+PiAgI2luY2x1ZGUg PGxpbnV4L2N0eXBlLmg+Cj4gPj4+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ID4+PiArI2lu Y2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gPj4+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2RlX29iamVj dC5oPgo+ID4+PiAgI2luY2x1ZGUgPGRybS9kcm1fbW9kZXMuaD4KPiA+Pj4gIAo+ID4+PiBAQCAt MzM0LDYgKzMzNSwxMTAgQEAgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgewo+ID4+PiAgCSAqLwo+ ID4+PiAgCXZvaWQgKCphdG9taWNfcG9zdF9kaXNhYmxlKShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlLAo+ID4+PiAgCQkJCSAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ID4+ PiArCj4gPj4+ICsJLyoqCj4gPj4+ICsJICogQGRldGVjdDoKPiA+Pj4gKwkgKgo+ID4+PiArCSAq IENoZWNrIGlmIGFueXRoaW5nIGlzIGF0dGFjaGVkIHRvIHRoZSBicmlkZ2Ugb3V0cHV0Lgo+ID4+ PiArCSAqCj4gPj4+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgaWYgbm90IGltcGxl bWVudGVkIHRoZSBicmlkZ2Ugd2lsbCBiZQo+ID4+PiArCSAqIGNvbnNpZGVyZWQgYXMgYWx3YXlz IGhhdmluZyBhIGNvbXBvbmVudCBhdHRhY2hlZCB0byBpdHMgb3V0cHV0Lgo+ID4+PiArCSAqIEJy aWRnZXMgdGhhdCBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjayBzaGFsbCBzZXQgdGhlCj4gPj4+ICsJ ICogRFJNX0JSSURHRV9PUF9ERVRFQ1QgZmxhZyBpbiB0aGVpciAmZHJtX2JyaWRnZS0+b3BzLgo+ ID4+PiArCSAqCj4gPj4+ICsJICogUkVUVVJOUzoKPiA+Pj4gKwkgKgo+ID4+PiArCSAqIGRybV9j b25uZWN0b3Jfc3RhdHVzIGluZGljYXRpbmcgdGhlIGJyaWRnZSBvdXRwdXQgc3RhdHVzLgo+ID4+ PiArCSAqLwo+ID4+PiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgKCpkZXRlY3QpKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpOwo+ID4+PiArCj4gPj4+ICsJLyoqCj4gPj4+ICsJICogQGdl dF9tb2RlczoKPiA+Pj4gKwkgKgo+ID4+PiArCSAqIEZpbGwgYWxsIG1vZGVzIGN1cnJlbnRseSB2 YWxpZCBmb3IgdGhlIHNpbmsgaW50byB0aGUgJmRybV9jb25uZWN0b3IKPiA+Pj4gKwkgKiB3aXRo IGRybV9tb2RlX3Byb2JlZF9hZGQoKS4KPiA+Pj4gKwkgKgo+ID4+PiArCSAqIFRoZSBAZ2V0X21v ZGVzIGNhbGxiYWNrIGlzIG1vc3RseSBpbnRlbmRlZCB0byBzdXBwb3J0IG5vbi1wcm9iYWJsZQo+ ID4+PiArCSAqIGRpc3BsYXlzIHN1Y2ggYXMgbWFueSBmaXhlZCBwYW5lbHMuIEJyaWRnZXMgdGhh dCBzdXBwb3J0IHJlYWRpbmcKPiA+Pj4gKwkgKiBFRElEIHNoYWxsIGxlYXZlIEBnZXRfbW9kZXMg dW5pbXBsZW1lbnRlZCBhbmQgaW1wbGVtZW50IHRoZQo+ID4+PiArCSAqICZkcm1fYnJpZGdlX2Z1 bmNzLT5nZXRfZWRpZCBjYWxsYmFjayBpbnN0ZWFkLgo+ID4+PiArCSAqCj4gPj4+ICsJICogVGhp cyBjYWxsYmFjayBpcyBvcHRpb25hbC4gQnJpZGdlcyB0aGF0IGltcGxlbWVudCBpdCBzaGFsbCBz ZXQgdGhlCj4gPj4+ICsJICogRFJNX0JSSURHRV9PUF9NT0RFUyBmbGFnIGluIHRoZWlyICZkcm1f YnJpZGdlLT5vcHMuCj4gPj4+ICsJICoKPiA+Pj4gKwkgKiBSRVRVUk5TOgo+ID4+PiArCSAqCj4g Pj4+ICsJICogVGhlIG51bWJlciBvZiBtb2RlcyBhZGRlZCBieSBjYWxsaW5nIGRybV9tb2RlX3By b2JlZF9hZGQoKS4KPiA+Pj4gKwkgKi8KPiA+Pj4gKwlpbnQgKCpnZXRfbW9kZXMpKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+ICsJCQkgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3Rvcik7Cj4gPj4+ICsKPiA+Pj4gKwkvKioKPiA+Pj4gKwkgKiBAZ2V0X2VkaWQ6Cj4gPj4+ICsJ ICoKPiA+Pj4gKwkgKiBSZWFkIGFuZCBwYXJzZSB0aGUgRURJRCBkYXRhIG9mIHRoZSBjb25uZWN0 ZWQgZGlzcGxheS4KPiA+Pj4gKwkgKgo+ID4+PiArCSAqIFRoZSBAZ2V0X2VkaWQgY2FsbGJhY2sg aXMgdGhlIHByZWZlcnJlZCB3YXkgb2YgcmVwb3J0aW5nIG1vZGUKPiA+Pj4gKwkgKiBpbmZvcm1h dGlvbiBmb3IgYSBkaXNwbGF5IGNvbm5lY3RlZCB0byB0aGUgYnJpZGdlIG91dHB1dC4gQnJpZGdl cwo+ID4+PiArCSAqIHRoYXQgc3VwcG9ydCByZWFkaW5kIEVESUQgc2hhbGwgaW1wbGVtZW50IHRo aXMgY2FsbGJhY2sgYW5kIGxlYXZlCj4gPj4+ICsJICogdGhlIEBnZXRfbW9kZXMgY2FsbGJhY2sg dW5pbXBsZW1lbnRlZC4KPiA+Pj4gKwkgKgo+ID4+PiArCSAqIFRoZSBjYWxsZXIgb2YgdGhpcyBv cGVyYXRpb24gc2hhbGwgZmlyc3QgdmVyaWZ5IHRoZSBvdXRwdXQKPiA+Pj4gKwkgKiBjb25uZWN0 aW9uIHN0YXR1cyBhbmQgcmVmcmFpbiBmcm9tIHJlYWRpbmcgRURJRCBmcm9tIGEgZGlzY29ubmVj dGVkCj4gPj4+ICsJICogb3V0cHV0Lgo+ID4+PiArCSAqCj4gPj4+ICsJICogVGhpcyBjYWxsYmFj ayBpcyBvcHRpb25hbC4gQnJpZGdlcyB0aGF0IGltcGxlbWVudCBpdCBzaGFsbCBzZXQgdGhlCj4g Pj4+ICsJICogRFJNX0JSSURHRV9PUF9FRElEIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2UtPm9w cy4KPiA+Pj4gKwkgKgo+ID4+PiArCSAqIFJFVFVSTlM6Cj4gPj4+ICsJICoKPiA+Pj4gKwkgKiBB biBlZGlkIHN0cnVjdHVyZSBuZXdseSBhbGxvY2F0ZWQgd2l0aCBrbWFsbG9jKCkgKG9yIHNpbWls YXIpIG9uCj4gPj4+ICsJICogc3VjY2Vzcywgb3IgTlVMTCBvdGhlcndpc2UuIFRoZSBjYWxsZXIg aXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcKPiA+Pj4gKwkgKiB0aGUgcmV0dXJuZWQgZWRpZCBz dHJ1Y3R1cmUgd2l0aCBrZnJlZSgpLgo+ID4+PiArCSAqLwo+ID4+PiArCXN0cnVjdCBlZGlkICoo KmdldF9lZGlkKShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+PiArCQkJCSBzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+PiAKPiA+PiBJdCBvdmVybGFwcyB3aXRoIGdl dF9tb2RlcywgSSBndWVzcyBwcmVzZW5jZSBvZiBvbmUgb3BzIHNob3VsZCBkaXNhbGxvdwo+ID4+ IHByZXNlbmNlIG9mIGFub3RoZXIgb25lPwo+ID4+IAo+ID4+IEkgYW0gbm90IHJlYWxseSBjb252 aW5jZWQgd2UgbmVlZCB0aGlzIG9wIGF0IGFsbCwgY2Fubm90IHdlIGp1c3QgYXNzaWduCj4gPj4g c29tZSBoZWxwZXIgZnVuY3Rpb24gdG8gLmdldF9tb2RlcyBjYiwgd2hpY2ggd2lsbCBkbyB0aGUg c2FtZT8KPiA+IAo+ID4gUGxhbiBCKTogZGl0Y2ggLT5nZXRfZWRpZCwgcmVxdWlyZSB0aGF0IHRo ZSBkcml2ZXIgaGFzIC0+Z2V0X21vZGVzIGluIHRoYXQKPiA+IGNhc2UsIGFuZCByZXF1aXJlIHRo YXQgaWYgaXQgaGFzIGFuIGVkaWQgaXQgbXVzdCBmaWxsIG91dCBjb25uZWN0b3ItPmluZm8KPiA+ IGFuZCBjb25uZWN0b3ItPmVkaWQgY29ycmVjdGx5Lgo+IAo+IEkgdGhpbmsgdGhhdCdzIGRvYWJs ZSwgSSdsbCBoYXZlIGEgbG9vay4KClNvIEkgaGFkIGEgbG9vaywgYW5kIHdoaWxlIHRoaXMgaXMg ZG9hYmxlLCBpdCB3b3VsZCBlc3NlbnRpYWxseSBtZWFuCnRoYXQgYWxsIGJyaWRnZXMgdGhhdCBy ZXRyaWV2ZSBtb2RlcyBmcm9tIEVESUQgd291bGQgaGF2ZSB0byByb2xsIG91dAp0aGVpciBvd24g dmVyc2lvbiBvZiB0aGUgZm9sbG93aW5nIGNvZGU6CgpzdGF0aWMgaW50IGRybV9icmlkZ2VfY29u bmVjdG9yX2dldF9tb2Rlc19lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCgkJ CQkJICAgICAgIHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCnsKCWVudW0gZHJtX2Nvbm5lY3Rv cl9zdGF0dXMgc3RhdHVzOwoJc3RydWN0IGVkaWQgKmVkaWQ7CglpbnQgbjsKCglzdGF0dXMgPSBk cm1fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3QoY29ubmVjdG9yLCBmYWxzZSk7CglpZiAoc3RhdHVz ICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQoJCWdvdG8gbm9fZWRpZDsKCgllZGlkID0g YnJpZGdlLT5mdW5jcy0+Z2V0X2VkaWQoYnJpZGdlLCBjb25uZWN0b3IpOwoJaWYgKCFlZGlkIHx8 ICFkcm1fZWRpZF9pc192YWxpZChlZGlkKSkgewoJCWtmcmVlKGVkaWQpOwoJCWdvdG8gbm9fZWRp ZDsKCX0KCglkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRp ZCk7CgluID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CgoJa2ZyZWUoZWRp ZCk7CglyZXR1cm4gbjsKCm5vX2VkaWQ6Cglkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3Bl cnR5KGNvbm5lY3RvciwgTlVMTCk7CglyZXR1cm4gMDsKfQoKSXMgdGhpcyBkZXNpcmVkID8KCj4g PiBCdHcgaWYgYSBocGQgaGFwcGVucywgd2hvJ3MgcmVzcG9uaWJsZSBmb3IgbWFraW5nIHN1cmUg dGhlIGVkaWQvbW9kZSBsaXN0Cj4gPiBpbiB0aGUgY29ubmVjdG9yIGlzIHVwLXRvLWRhdGU/IFdp dGggeW91ciBjdXJyZW50IGNhbGxiYWNrIGRlc2lnbiB0aGF0J3MKPiA+IHVwIHRvIHRoZSBjYWxs YmFjaywgd2hpY2ggZG9lc24ndCBmZWVsIGdyZWF0LiBNYXliZSAgZHJtX2JyaWRnZV9ocGRfbm90 aWZ5Cj4gPiBzaG91bGQgZ3VhcmFudGVlIHRoYXQgaXQnbGwgZmlyc3Qgd2FsayB0aGUgY29ubmVj dG9ycyB0byB1cGRhdGUgc3RhdHVzIGFuZAo+ID4gZWRpZC9tb2RlIGxpc3QgZm9yIHRoZSBmaW5h bCBkcm1fY29ubmVjdG9yLiBBbmQgdGhlbiBpbnN0ZWFkIG9mIGp1c3QKPiA+IHBhc3NpbmcgdGhl IHNpbXBsZSAic3RhdHVzIiwgaXQnbGwgcGFzcyB0aGUgY29ubmVjdG9yLCB3aXRoIGV2ZXJ5dGhp bmcKPiA+IGNvcnJlY3RseSB1cGRhdGVkLgo+ID4gCj4gPiBPdGhlcndpc2UgZXZlcnlvbmUgaW50 ZXJlc3RlZCBpbiB0aGF0IGhwZCBzaWduYWwgd2lsbCBnbyBhbmQgcmUtZmV0Y2ggdGhlCj4gPiBl ZGlkLCB3aGljaCBpcyBub3Qgc28gYXdlc29tZSA6LSkKPiAKPiBXaXRoIHRoZSBjdXJyZW50IGRl c2lnbiB0aGVyZSdzIGEgc2luZ2xlIGxpc3RlbmVyLCBzbyBpdCdzIG5vdCBhIGJpZwo+IGRlYWwg Oi0pIEZ1cnRoZXJtb3JlLCB0aGUgbGlzdGVuZXIgaXMgdGhlIGhlbHBlciB0aGF0IGNyZWF0ZXMg YQo+IGNvbm5lY3RvciBvbiB0b3Agb2YgYSBjaGFpbiBvZiBicmlkZ2VzLCBzbyBpdCdzIGEgcHJl dHR5IGdvb2QgcGxhY2UgdG8KPiBoYW5kbGUgdGhpcy4gU2VlIHRoZSBjYWxsIHRvIGRybV9rbXNf aGVscGVyX2hvdHBsdWdfZXZlbnQoKSBpbgo+IGRybV9icmlkZ2VfY29ubmVjdG9yX2hwZF9jYigp Lgo+IAo+IEknbSBhbGwgZm9yIHJld29ya2luZyBIUEQgYW5kIG1vZGUgZmV0Y2hpbmcsIGJ1dCBJ IHRoaW5rIGl0J3MgYSBiaXQgdG9vCj4gYmlnIG9mIGEgcmVxdWlyZW1lbnQgYXMgYSBwcmVyZXF1 aXNpdGUgZm9yIHRoaXMgc2VyaWVzIChvciBhcyBwYXJ0IG9mCj4gdGhpcyBzZXJpZXMpLiBXZSBo YXZlIGhhcmR3YXJlIHRoYXQgY2FuIHJlcG9ydCBIUEQgd2l0aCB2YXJpb3VzIGxldmVsIG9mCj4g ZGV0YWlscyAoZnJvbSAic29tZXRoaW5nIGhhcHBlbmVkIG9uIGEgY29ubmVjdG9yIiB0byAidGhp cyBwYXJ0aWN1bGFyCj4gZXZlbnQgaGFwcGVuZWQgb24gdGhpcyBwYXJ0aWN1bGFyIGNvbm5lY3Rv ciIpLCBhbmQgd2UgY2hhbm5lbCB0aGF0Cj4gdGhyb3VnaCBoZWxwZXJzIHN1Y2ggYXMgZHJtX2tt c19oZWxwZXJfaG90cGx1Z19ldmVudCgpIHRoYXQgbG9zZSB0aGUKPiBkZXRhaWxzIGFuZCBnbyB0 aHJvdWdoIGEgaGVhdnkgbWVjaGFuaXNtIHRvIHJlZmV0Y2ggZXZlcnl0aGluZy4gSQo+IHVuZGVy c3RhbmQgdGhpcyBpcyBuZWVkZWQgaW4gbWFueSBjYXNlcywgYnV0IEkgdGhpbmsgdGhlcmUncyBy b29tIGZvcgo+IGltcHJvdmVtZW50LiBUaGlzIHNlcmllcywgaW4gbXkgb3BpbmlvbiwgZG9lc24n dCBnbyBpbiB0aGUgd3JvbmcKPiBkaXJlY3Rpb24gaW4gdGhhdCByZWdhcmQsIGFzIGl0IGV2ZW50 dWFsbHkgY2FsbHMKPiBkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KCksIHNvIEkgdGhpbmsg aW1wcm92ZW1lbnRzIHdvdWxkIG1ha2Ugc2Vuc2UKPiBvbiB0b3Agb2YgaXQuIEknbSBldmVuIHdp bGxpbmcgdG8gd29yayBvbiB0aGlzLCBwcm92aWRlZCBJIGdldCBmZWVkYmFjawo+IG9uIHdoYXQg aXMgZGVzaXJlZC4KPiAKPiA+Pj4gKwkvKioKPiA+Pj4gKwkgKiBAbG9zdF9ob3RwbHVnOgo+ID4+ PiArCSAqCj4gPj4+ICsJICogTm90aWZ5IHRoZSBicmlkZ2Ugb2YgZGlzcGxheSBkaXNjb25uZWN0 aW9uLgo+ID4+PiArCSAqCj4gPj4+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgaXQg bWF5IGJlIGltcGxlbWVudGVkIGJ5IGJyaWRnZXMgdGhhdAo+ID4+PiArCSAqIG5lZWQgdG8gYmUg bm90aWZpZWQgb2YgZGlzcGxheSBkaXNjb25uZWN0aW9uIGZvciBpbnRlcm5hbCByZWFzb25zLgo+ ID4+PiArCSAqIE9uZSB1c2UgY2FzZSBpcyB0byByZXNldCB0aGUgaW50ZXJuYWwgc3RhdGUgb2Yg Q0VDIGNvbnRyb2xsZXJzIGZvcgo+ID4+PiArCSAqIEhETUkgYnJpZGdlcy4KPiA+Pj4gKwkgKi8K PiA+Pj4gKwl2b2lkICgqbG9zdF9ob3RwbHVnKShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsK PiA+Pj4gKwo+ID4+PiArCS8qKgo+ID4+PiArCSAqIEBocGRfZW5hYmxlOgo+ID4+PiArCSAqCj4g Pj4+ICsJICogRW5hYmxlIGhvdCBwbHVnIGRldGVjdGlvbi4gRnJvbSBub3cgb24gdGhlIGJyaWRn ZSBzaGFsbCBjYWxsCj4gPj4+ICsJICogZHJtX2JyaWRnZV9ocGRfbm90aWZ5KCkgZWFjaCB0aW1l IGEgY2hhbmdlIGlzIGRldGVjdGVkIGluIHRoZSBvdXRwdXQKPiA+Pj4gKwkgKiBjb25uZWN0aW9u IHN0YXR1cywgdW50aWwgaG90IHBsdWcgZGV0ZWN0aW9uIGdldHMgZGlzYWJsZWQgd2l0aAo+ID4+ PiArCSAqIEBocGRfZGlzYWJsZS4KPiA+Pj4gKwkgKgo+ID4+PiArCSAqIFRoaXMgY2FsbGJhY2sg aXMgb3B0aW9uYWwgYW5kIHNoYWxsIG9ubHkgYmUgaW1wbGVtZW50ZWQgYnkgYnJpZGdlcwo+ID4+ PiArCSAqIHRoYXQgc3VwcG9ydCBob3QtcGx1ZyBub3RpZmljYXRpb24gd2l0aG91dCBwb2xsaW5n LiBCcmlkZ2VzIHRoYXQKPiA+Pj4gKwkgKiBpbXBsZW1lbnQgaXQgc2hhbGwgYWxzbyBpbXBsZW1l bnQgdGhlIEBocGRfZGlzYWJsZSBjYWxsYmFjayBhbmQgc2V0Cj4gPj4+ICsJICogdGhlIERSTV9C UklER0VfT1BfSFBEIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2UtPm9wcy4KPiA+Pj4gKwkgKi8K PiA+Pj4gKwl2b2lkICgqaHBkX2VuYWJsZSkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4g Pj4+ICsKPiA+Pj4gKwkvKioKPiA+Pj4gKwkgKiBAaHBkX2Rpc2FibGU6Cj4gPj4+ICsJICoKPiA+ Pj4gKwkgKiBEaXNhYmxlIGhvdCBwbHVnIGRldGVjdGlvbi4gT25jZSB0aGlzIGZ1bmN0aW9uIHJl dHVybnMgdGhlIGJyaWRnZQo+ID4+PiArCSAqIHNoYWxsIG5vdCBjYWxsIGRybV9icmlkZ2VfaHBk X25vdGlmeSgpIHdoZW4gYSBjaGFuZ2UgaW4gdGhlIG91dHB1dAo+ID4+PiArCSAqIGNvbm5lY3Rp b24gc3RhdHVzIG9jY3Vycy4KPiA+Pj4gKwkgKgo+ID4+PiArCSAqIFRoaXMgY2FsbGJhY2sgaXMg b3B0aW9uYWwgYW5kIHNoYWxsIG9ubHkgYmUgaW1wbGVtZW50ZWQgYnkgYnJpZGdlcwo+ID4+PiAr CSAqIHRoYXQgc3VwcG9ydCBob3QtcGx1ZyBub3RpZmljYXRpb24gd2l0aG91dCBwb2xsaW5nLiBC cmlkZ2VzIHRoYXQKPiA+Pj4gKwkgKiBpbXBsZW1lbnQgaXQgc2hhbGwgYWxzbyBpbXBsZW1lbnQg dGhlIEBocGRfZW5hYmxlIGNhbGxiYWNrIGFuZCBzZXQKPiA+Pj4gKwkgKiB0aGUgRFJNX0JSSURH RV9PUF9IUEQgZmxhZyBpbiB0aGVpciAmZHJtX2JyaWRnZS0+b3BzLgo+ID4+PiArCSAqLwo+ID4+ PiArCXZvaWQgKCpocGRfZGlzYWJsZSkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gPj4+ ICB9Owo+ID4+PiAgCj4gPj4+ICAvKioKPiA+Pj4gQEAgLTM3Miw2ICs0NzcsMzggQEAgc3RydWN0 IGRybV9icmlkZ2VfdGltaW5ncyB7Cj4gPj4+ICAJYm9vbCBkdWFsX2xpbms7Cj4gPj4+ICB9Owo+ ID4+PiAgCj4gPj4+ICsvKioKPiA+Pj4gKyAqIGVudW0gZHJtX2JyaWRnZV9vcHMgLSBCaXRtYXNr IG9mIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBicmlkZ2UKPiA+Pj4gKyAqLwo+ID4+PiAr ZW51bSBkcm1fYnJpZGdlX29wcyB7Cj4gPj4+ICsJLyoqCj4gPj4+ICsJICogQERSTV9CUklER0Vf T1BfREVURUNUOiBUaGUgYnJpZGdlIGNhbiBkZXRlY3QgZGlzcGxheXMgY29ubmVjdGVkIHRvCj4g Pj4+ICsJICogaXRzIG91dHB1dC4gQnJpZGdlcyB0aGF0IHNldCB0aGlzIGZsYWcgc2hhbGwgaW1w bGVtZW50IHRoZQo+ID4+PiArCSAqICZkcm1fYnJpZGdlX2Z1bmNzLT5kZXRlY3QgY2FsbGJhY2su Cj4gPj4+ICsJICovCj4gPj4+ICsJRFJNX0JSSURHRV9PUF9ERVRFQ1QgPSBCSVQoMCksCj4gPj4+ ICsJLyoqCj4gPj4+ICsJICogQERSTV9CUklER0VfT1BfRURJRDogVGhlIGJyaWRnZSBjYW4gcmV0 cmlldmUgdGhlIEVESUQgb2YgdGhlIGRpc3BsYXkKPiA+Pj4gKwkgKiBjb25uZWN0ZWQgdG8gaXRz IG91dHB1dC4gQnJpZGdlcyB0aGF0IHNldCB0aGlzIGZsYWcgc2hhbGwgaW1wbGVtZW50Cj4gPj4+ ICsJICogdGhlICZkcm1fYnJpZGdlX2Z1bmNzLT5nZXRfZWRpZCBjYWxsYmFjay4KPiA+Pj4gKwkg Ki8KPiA+Pj4gKwlEUk1fQlJJREdFX09QX0VESUQgPSBCSVQoMSksCj4gPj4+ICsJLyoqCj4gPj4+ ICsJICogQERSTV9CUklER0VfT1BfSFBEOiBUaGUgYnJpZGdlIGNhbiBkZXRlY3QgaG90LXBsdWcg YW5kIGhvdC11bnBsdWcKPiA+Pj4gKwkgKiB3aXRob3V0IHJlcXVpcmluZyBwb2xsaW5nLiBCcmlk Z2VzIHRoYXQgc2V0IHRoaXMgZmxhZyBzaGFsbAo+ID4+PiArCSAqIGltcGxlbWVudCB0aGUgJmRy bV9icmlkZ2VfZnVuY3MtPmhwZF9lbmFibGUgYW5kCj4gPj4+ICsJICogJmRybV9icmlkZ2VfZnVu Y3MtPmRpc2FibGVfaHBkX2NiIGNhbGxiYWNrcy4KPiA+Pj4gKwkgKi8KPiA+Pj4gKwlEUk1fQlJJ REdFX09QX0hQRCA9IEJJVCgyKSwKPiA+Pj4gKwkvKioKPiA+Pj4gKwkgKiBARFJNX0JSSURHRV9P UF9NT0RFUzogVGhlIGJyaWRnZSBjYW4gcmV0cmlldmluZyB0aGUgbW9kZXMgc3VwcG9ydGVkCj4g Pj4+ICsJICogYnkgdGhlIGRpc3BsYXkgYXQgaXRzIG91dHB1dC4gVGhpcyBkb2VzIG5vdCBpbmNs dWRlIHJlYWRpbmQgRURJRAo+ID4+PiArCSAqIHdoaWNoIGlzIHNlcGFyYXRlbHkgY292ZXJlZCBi eSBARFJNX0JSSURHRV9PUF9FRElELiBCcmlkZ2VzIHRoYXQgc2V0Cj4gPj4+ICsJICogdGhpcyBm bGFnIHNoYWxsIGltcGxlbWVudCB0aGUgJmRybV9icmlkZ2VfZnVuY3MtPmdldF9tb2RlcyBjYWxs YmFjay4KPiA+Pj4gKwkgKi8KPiA+Pj4gKwlEUk1fQlJJREdFX09QX01PREVTID0gQklUKDMpLAo+ ID4+PiArfTsKPiA+Pj4gKwo+ID4+PiAgLyoqCj4gPj4+ICAgKiBzdHJ1Y3QgZHJtX2JyaWRnZSAt IGNlbnRyYWwgRFJNIGJyaWRnZSBjb250cm9sIHN0cnVjdHVyZQo+ID4+PiAgICovCj4gPj4+IEBA IC0zOTgsNiArNTM1LDI5IEBAIHN0cnVjdCBkcm1fYnJpZGdlIHsKPiA+Pj4gIAljb25zdCBzdHJ1 Y3QgZHJtX2JyaWRnZV9mdW5jcyAqZnVuY3M7Cj4gPj4+ICAJLyoqIEBkcml2ZXJfcHJpdmF0ZTog cG9pbnRlciB0byB0aGUgYnJpZGdlIGRyaXZlcidzIGludGVybmFsIGNvbnRleHQgKi8KPiA+Pj4g IAl2b2lkICpkcml2ZXJfcHJpdmF0ZTsKPiA+Pj4gKwkvKiogQG9wczogYml0bWFzayBvZiBvcGVy YXRpb25zIHN1cHBvcnRlZCBieSB0aGUgYnJpZGdlICovCj4gPj4+ICsJZW51bSBkcm1fYnJpZGdl X29wcyBvcHM7Cj4gPj4+ICsJLyoqCj4gPj4+ICsJICogQHR5cGU6IFR5cGUgb2YgdGhlIGNvbm5l Y3Rpb24gYXQgdGhlIGJyaWRnZSBvdXRwdXQKPiA+Pj4gKwkgKiAoRFJNX01PREVfQ09OTkVDVE9S XyopLiBGb3IgYnJpZGdlcyBhdCB0aGUgZW5kIG9mIHRoaXMgY2hhaW4gdGhpcwo+ID4+PiArCSAq IGlkZW50aWZpZXMgdGhlIHR5cGUgb2YgY29ubmVjdGVkIGRpc3BsYXkuCj4gPj4+ICsJICovCj4g Pj4+ICsJaW50IHR5cGU7Cj4gPj4+ICsJLyoqIHByaXZhdGU6ICovCj4gPj4+ICsJLyoqCj4gPj4+ ICsJICogQGhwZF9tdXRleDogUHJvdGVjdHMgdGhlIEBocGRfY2IgYW5kIEBocGRfZGF0YSBmaWVs ZHMuCj4gPj4+ICsJICovCj4gPj4+ICsJc3RydWN0IG11dGV4IGhwZF9tdXRleDsKPiA+Pj4gKwkv KioKPiA+Pj4gKwkgKiBAaHBkX2NiOiBIb3QgcGx1ZyBkZXRlY3Rpb24gY2FsbGJhY2ssIHJlZ2lz dGVyZWQgd2l0aAo+ID4+PiArCSAqIGRybV9icmlkZ2VfaHBkX2VuYWJsZSgpLgo+ID4+PiArCSAq Lwo+ID4+PiArCXZvaWQgKCpocGRfY2IpKHZvaWQgKmRhdGEsIGVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMgc3RhdHVzKTsKPiA+Pj4gKwkvKioKPiA+Pj4gKwkgKiBAaHBkX2RhdGE6IFByaXZhdGUg ZGF0YSBwYXNzZWQgdG8gdGhlIEhvdCBwbHVnIGRldGVjdGlvbiBjYWxsYmFjawo+ID4+PiArCSAq IEBocGRfY2IuCj4gPj4+ICsJICovCj4gPj4+ICsJdm9pZCAqaHBkX2RhdGE7Cj4gPj4+ICB9Owo+ ID4+PiAgCj4gPj4+ICB2b2lkIGRybV9icmlkZ2VfYWRkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpOwo+ID4+PiBAQCAtNDI4LDYgKzU4OCwxNCBAQCB2b2lkIGRybV9hdG9taWNfYnJpZGdlX3By ZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+Pj4gIHZvaWQgZHJtX2F0b21p Y19icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+ICAJCQkgICAg ICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ID4+PiAgCj4gPj4+ICt2b2lkIGRy bV9icmlkZ2VfaHBkX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+PiArCQkJ ICAgdm9pZCAoKmNiKSh2b2lkICpkYXRhLAo+ID4+PiArCQkJCSAgICAgIGVudW0gZHJtX2Nvbm5l Y3Rvcl9zdGF0dXMgc3RhdHVzKSwKPiA+Pj4gKwkJCSAgIHZvaWQgKmRhdGEpOwo+ID4+PiArdm9p ZCBkcm1fYnJpZGdlX2hwZF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpOwo+ID4+ PiArdm9pZCBkcm1fYnJpZGdlX2hwZF9ub3RpZnkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwK PiA+Pj4gKwkJCSAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKTsKPiA+Pj4gKwo+ ID4+PiAgI2lmZGVmIENPTkZJR19EUk1fUEFORUxfQlJJREdFCj4gPj4+ICBzdHJ1Y3QgZHJtX2Jy aWRnZSAqZHJtX3BhbmVsX2JyaWRnZV9hZGQoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwsCj4gPj4+ ICAJCQkJCXUzMiBjb25uZWN0b3JfdHlwZSk7CgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hh cnQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs