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: Wed, 14 Aug 2019 16:30:57 +0300 Message-ID: <20190814133057.GN5009@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> <20190808183631.GX6055@pendragon.ideasonboard.com> <20190814130329.GF7444@phenom.ffwll.local> 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 [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id 283586E1EE for ; Wed, 14 Aug 2019 13:31:03 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190814130329.GF7444@phenom.ffwll.local> 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 SGkgRGFuaWVsLAoKT24gV2VkLCBBdWcgMTQsIDIwMTkgYXQgMDM6MDM6MjlQTSArMDIwMCwgRGFu aWVsIFZldHRlciB3cm90ZToKPiBPbiBUaHUsIEF1ZyAwOCwgMjAxOSBhdCAwOTozNjozMVBNICsw MzAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gT24gVGh1LCBBdWcgMDgsIDIwMTkgYXQg MDk6MTk6NDhQTSArMDMwMCwgTGF1cmVudCBQaW5jaGFydCB3cm90ZToKPiA+PiBPbiBUaHUsIEp1 bCAxMSwgMjAxOSBhdCAwOTozNTo0OEFNICswMjAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4+ PiBPbiBXZWQsIEp1bCAxMCwgMjAxOSBhdCAwMjoxMjoxNFBNICswMjAwLCBBbmRyemVqIEhhamRh IHdyb3RlOgo+ID4+Pj4gSGkgTGF1cmVudCwKPiA+Pj4+IAo+ID4+Pj4gSSBsaWtlIHRoZSBhcHBy b2FjaCwgY3VycmVudCBwcmFjdGljZSB3aGVuIGFsbW9zdCBldmVyeSBicmlkZ2Ugc2hvdWxkCj4g Pj4+PiBvcHRpb25hbGx5IGltcGxlbWVudCBjb25uZWN0b3IsIG9yIGFsdGVybmF0aXZlbHkgZG93 bnN0cmVhbSBicmlkZ2Ugb3IKPiA+Pj4+IHBhbmVsIGlzIHZlcnkgcGFpbmZ1bC4KPiA+Pj4gCj4g Pj4+IFllYWggSSB0aGluayB0aGlzIGxvb2tzIG1vc3RseSByZWFzb25hYmxlLiBTb21lIGFwaSBk ZXNpZ24gY29tbWVudHMgb24gdG9wCj4gPj4+IG9mIEFuZHJ6ZWonLCB3aXRoIHRoZSBmYWlyIHdh cm5pbmcgdGhhdCBJIGRpZG4ndCBib3RoZXIgdG8gcmVhZCB1cCBvbiBob3cKPiA+Pj4gaXQncyBh bGwgdXNlZCBpbiB0aGUgZW5kLiBJIHByb2JhYmx5IHNob3VsZCBnbyBhbmQgZG8gdGhhdCwgYXQg bGVhc3QgdG8KPiA+Pj4gZ2V0IGEgZmVlbGluZyBmb3Igd2hhdCB5b3VyIGhwZF9jYiB1c3VhbGx5 IGRvZXMuCj4gPj4+IAo+ID4+Pj4gTW9yZSBjb21tZW50cyBpbmxpbmVkLgo+ID4+Pj4gCj4gPj4+ PiBPbiAwNy4wNy4yMDE5IDIwOjE4LCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4+Pj4+IFRv IHN1cHBvcnQgaW1wbGVtZW50YXRpb24gb2YgRFJNIGNvbm5lY3RvcnMgb24gdG9wIG9mIERSTSBi cmlkZ2VzCj4gPj4+Pj4gaW5zdGVhZCBvZiBieSBicmlkZ2VzLCB0aGUgZHJtX2JyaWRnZSBuZWVk cyB0byBleHBvc2UgbmV3IG9wZXJhdGlvbnMgYW5kCj4gPj4+Pj4gZGF0YToKPiA+Pj4+Pgo+ID4+ Pj4+IC0gT3V0cHV0IGRldGVjdGlvbiwgaG90LXBsdWcgbm90aWZpY2F0aW9uLCBtb2RlIHJldHJp ZXZhbCBhbmQgRURJRAo+ID4+Pj4+ICAgcmV0cmlldmFsIG9wZXJhdGlvbnMKPiA+Pj4+PiAtIEJp dG1hc2sgb2Ygc3VwcG9ydGVkIG9wZXJhdGlvbnMKPiA+Pj4+IAo+ID4+Pj4gCj4gPj4+PiBXaHkg ZG8gd2UgbmVlZCB0aGVzZSBiaXRtYXNrIGF0IGFsbD8gV2h5IGNhbm5vdCB3ZSByZWx5IG9uIHBy ZXNlbmNlIG9mCj4gPj4+PiBvcGVyYXRpb24ncyBjYWxsYmFjaz8KPiA+Pj4gCj4gPj4+IFllYWgg YWxzbyBub3QgYSBodWdlIGZhbiBvZiB0aGVzZSBiaXRtYXNrcy4gU21lbGxzIGxpa2UKPiA+Pj4g RFJJVkVSX0dFTXxEUklWRVJfTU9ERVNFVCwgYW5kIEkgcGVyc29uYWxseSByZWFsbHkgaGF0ZSB0 aG9zZS4gRWFzeSB0bwo+ID4+PiBhZGQsIGdlbmVyYWxseSBnb29kIGV4Y3VzZSB0byBub3QgaGF2 ZSB0byB0aGluayB0aHJvdWdoIHRoZSBkZXNpZ24gYmV0d2Vlbgo+ID4+PiBkaWZmZXJlbnQgcGFy dHMgb2YgZHJpdmVycyAtICJqdXN0IiBhZGQgYW5vdGhlciBmbGFnLgo+ID4+IAo+ID4+IFRoZSBy ZWFzb24gaXMgdGhhdCBhIGJyaWRnZSBtYXkgc3VwcG9ydCBhbiBvcGVyYXRpb24gKGFzIGluIGlt cGxlbWVudGVkCj4gPj4gaW4gdGhlIGJyaWRnZSBoYXJkd2FyZSksIGJ1dCB0aGF0IG9wZXJhdGlv biBtYXkgbm90IGJlIHN1cHBvcnRlZCBvbiBhCj4gPj4gcGFydGljdWxhciBib2FyZC4gRm9yIGlu c3RhbmNlIGFuIEhETUkgZW5jb2RlciBtYXkgc3VwcG9ydCByZWFkaW5nIEVESUQKPiA+PiB3aGVu IHRoZSBEREMgbGluZXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgZW5jb2RlciwgYnV0IGEgYm9hcmQg bWF5IGNvbm5lY3QKPiA+PiB0aGUgRERDIGxpbmVzIHRvIGFuIEkyQyBwb3J0IG9mIHRoZSBTb0Mu IFdlIHRodXMgbmVlZCB0byBkZWNvdXBsZQo+ID4+IGlmIGEgcGFydGljdWxhciBpbnN0YW5jZSBv ZiB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZSBvcGVyYXRpb24gKGV4cG9zZWQKPiA+PiBieSB0aGUg b3BzIGZsYWdzKSBmcm9tIHRoZSBmdW5jdGlvbiBwb2ludGVycy4KPiA+PiAKPiA+PiBXZSBjb3Vs ZCBvZiBjb3Vyc2UgYWxsb2NhdGUgdGhlIGRybV9icmlkZ2VfZnVuY3Mgc3RydWN0dXJlIGR5bmFt aWNhbGx5Cj4gPj4gZm9yIGVhY2ggYnJpZGdlIGluc3RhbmNlLCBhbmQgZmlsbCBpdCB3aXRoIGZ1 bmN0aW9uIHBvaW50ZXJzIG1hbnVhbGx5LAo+ID4+IGxlYXZpbmcgdGhlIHVudXNlZCBvcHMgYWx3 YXlzIE5VTEwsIGJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgbWFraW5nIHRoZQo+ID4+IHN0cnVjdHVy ZSB3cml0YWJsZSwgd2hpY2ggaXMgY29uc2lkZXJlZCBhIHNlY3VyaXR5IGlzc3VlLiBUaGF0J3Mg d2h5IEkKPiA+PiBkZWNpZGVkIHRvIGtlZXAgdGhlIGRybV9icmlkZ2VfZnVuY3Mgc3RydWN0dXJl IGFzIGEgZ2xvYmFsIHN0YXRpYyBjb25zdAo+ID4+IHN0cnVjdHVyZSwgYW5kIGFkZCBhbiBvcHMg Yml0bWFzay4KPiA+PiAKPiA+Pj4+PiAtIEJyaWRnZSBvdXRwdXQgdHlwZQo+ID4+Pj4+Cj4gPj4+ Pj4gQWRkIGFuZCBkb2N1bWVudCB0aGVzZS4KPiA+Pj4+Pgo+ID4+Pj4+IFRocmVlIG5ldyBicmlk Z2UgaGVscGVyIGZ1bmN0aW9ucyBhcmUgYWxzbyBhZGRlZCB0byBoYW5kbGUgaG90IHBsdWcKPiA+ Pj4+PiBub3RpZmljYXRpb24gaW4gYSB3YXkgdGhhdCBpcyBhcyB0cmFuc3BhcmVudCBhcyBwb3Nz aWJsZSBmb3IgdGhlCj4gPj4+Pj4gYnJpZGdlcy4KPiA+Pj4+IAo+ID4+Pj4gRG9jdW1lbnRhdGlv biBvZiBuZXcgb3BzZXMgZG9lcyBub3QgZXhwbGFpbiBob3cgaXQgc2hvdWxkIGNvb3BlcmF0ZSB3 aXRoCj4gPj4+PiBicmlkZ2UgY2hhaW5pbmcsIEkgc3VwcG9zZSB0aGV5IHNob3VsZCBiZSBjaGFp bmVkIGV4cGxpY2l0bHksIGFtIEkKPiA+Pj4+IHJpZ2h0PyBNb3JlIGNvbW1lbnRzIGFib3V0IGl0 IGxhdGVyLgo+ID4+IAo+ID4+IE5vLCB0aGUgd2hvbGUgcG9pbnQgaXMgdGhhdCB0aGV5IHNob3Vs ZCBub3QgYmUgY2hhaW5lZCBhdCBhbGwuIEEgYnJpZGdlCj4gPj4gZG9lcyBub3QgaGF2ZSB0byBw cm9wYWdhdGUsIGZvciBpbnN0YW5jZSwgLmdldF9lZGlkKCkgdG8gdGhlIG5leHQKPiA+PiBicmlk Z2UuIFRoYXQncyBvbmUgb2YgdGhlIGNvcmUgZGVzaWduIHByaW5jaXBsZXMgaW4gdGhpcyBzZXJp ZXMsIEkgd2FudAo+ID4+IHRvIGtlZXAgdGhlIGJyaWRnZXMgYXMgc2ltcGxlIGFzIHBvc3NpYmxl LCBhbmQgbW92ZSB0aGUgY29tcGxleGl0eSBvZgo+ID4+IHRoZSBib2lsZXJwbGF0ZSBjb2RlIHRo YXQgaXMgY3VycmVudGx5IGNvcGllZCBhbGwgYXJvdW5kIHRvIGhlbHBlcnMuIFNlZQo+ID4+IHBh dGNoICJkcm06IEFkZCBoZWxwZXIgdG8gY3JlYXRlIGEgY29ubmVjdG9yIGZvciBhIGNoYWluIG9m IGJyaWRnZXMiIGZvcgo+ID4+IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoaXMgaXMgdXNl ZCwgd2l0aCBhIGhlbHBlciB0aGF0IGRlbGVnYXRlcwo+ID4+IHRoZSBjb25uZWN0b3Igb3BlcmF0 aW9ucyB0byB0aGUgY29ycmVjdCBicmlkZ2UgaW4gdGhlIGNoYWluIGJhc2VkIG9uIHRoZQo+ID4+ IG9wcyByZXBvcnRlZCBieSBlYWNoIGJyaWRnZS4KPiA+PiAKPiA+Pj4+PiBTaWduZWQtb2ZmLWJ5 OiBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4g Pj4+Pj4gLS0tCj4gPj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMgfCAgOTIgKysr KysrKysrKysrKysrKysrKwo+ID4+Pj4+ICBpbmNsdWRlL2RybS9kcm1fYnJpZGdlLmggICAgIHwg MTcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gPj4+Pj4gIDIgZmlsZXMg Y2hhbmdlZCwgMjYxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+Pj4+Pgo+ID4+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jIGIvZHJpdmVycy9ncHUv ZHJtL2RybV9icmlkZ2UuYwo+ID4+Pj4+IGluZGV4IDUxOTU3N2YzNjNlMy4uM2MyYTI1NWRmN2Fm IDEwMDY0NAo+ID4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPiA+Pj4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jCj4gPj4+Pj4gQEAgLTcwLDYgKzcw LDggQEAgc3RhdGljIExJU1RfSEVBRChicmlkZ2VfbGlzdCk7Cj4gPj4+Pj4gICAqLwo+ID4+Pj4+ ICB2b2lkIGRybV9icmlkZ2VfYWRkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gPj4+Pj4g IHsKPiA+Pj4+PiArCW11dGV4X2luaXQoJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+Pj4+PiArCj4g Pj4+Pj4gIAltdXRleF9sb2NrKCZicmlkZ2VfbG9jayk7Cj4gPj4+Pj4gIAlsaXN0X2FkZF90YWls KCZicmlkZ2UtPmxpc3QsICZicmlkZ2VfbGlzdCk7Cj4gPj4+Pj4gIAltdXRleF91bmxvY2soJmJy aWRnZV9sb2NrKTsKPiA+Pj4+PiBAQCAtODYsNiArODgsOCBAQCB2b2lkIGRybV9icmlkZ2VfcmVt b3ZlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gPj4+Pj4gIAltdXRleF9sb2NrKCZicmlk Z2VfbG9jayk7Cj4gPj4+Pj4gIAlsaXN0X2RlbF9pbml0KCZicmlkZ2UtPmxpc3QpOwo+ID4+Pj4+ ICAJbXV0ZXhfdW5sb2NrKCZicmlkZ2VfbG9jayk7Cj4gPj4+Pj4gKwo+ID4+Pj4+ICsJbXV0ZXhf ZGVzdHJveSgmYnJpZGdlLT5ocGRfbXV0ZXgpOwo+ID4+Pj4+ICB9Cj4gPj4+Pj4gIEVYUE9SVF9T WU1CT0woZHJtX2JyaWRnZV9yZW1vdmUpOwo+ID4+Pj4+ICAKPiA+Pj4+PiBAQCAtNDYzLDYgKzQ2 Nyw5NCBAQCB2b2lkIGRybV9hdG9taWNfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlLAo+ID4+Pj4+ICB9Cj4gPj4+Pj4gIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19icmlk Z2VfZW5hYmxlKTsKPiA+Pj4+PiAgCj4gPj4+Pj4gKy8qKgo+ID4+Pj4+ICsgKiBkcm1fYnJpZGdl X2hwZF9lbmFibGUgLSBlbmFibGUgaG90IHBsdWcgZGV0ZWN0aW9uIGZvciB0aGUgYnJpZGdlCj4g Pj4+Pj4gKyAqIEBicmlkZ2U6IGJyaWRnZSBjb250cm9sIHN0cnVjdHVyZQo+ID4+Pj4+ICsgKiBA Y2I6IGhvdC1wbHVnIGRldGVjdGlvbiBjYWxsYmFjawo+ID4+Pj4+ICsgKiBAZGF0YTogZGF0YSB0 byBiZSBwYXNzZWQgdG8gdGhlIGhvdC1wbHVnIGRldGVjdGlvbiBjYWxsYmFjawo+ID4+Pj4+ICsg Kgo+ID4+Pj4+ICsgKiBDYWxsICZkcm1fYnJpZGdlX2Z1bmNzLmhwZF9lbmFibGUgYW5kIHJlZ2lz dGVyIHRoZSBnaXZlbiBAY2IgYW5kIEBkYXRhIGFzCj4gPj4+Pj4gKyAqIGhvdCBwbHVnIG5vdGlm aWNhdGlvbiBjYWxsYmFjay4gRnJvbSBub3cgb24gdGhlIEBjYiB3aWxsIGJlIGNhbGxlZCB3aXRo Cj4gPj4+Pj4gKyAqIEBkYXRhIHdoZW4gYW4gb3V0cHV0IHN0YXR1cyBjaGFuZ2UgaXMgZGV0ZWN0 ZWQgYnkgdGhlIGJyaWRnZSwgdW50aWwgaG90IHBsdWcKPiA+Pj4+PiArICogbm90aWZpY2F0aW9u IGdldHMgZGlzYWJsZWQgd2l0aCBkcm1fYnJpZGdlX2hwZF9kaXNhYmxlKCkuCj4gPj4+Pj4gKyAq Cj4gPj4+Pj4gKyAqIEhvdCBwbHVnIGRldGVjdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBpZiB0aGUg RFJNX0JSSURHRV9PUF9IUEQgZmxhZyBpcyBzZXQgaW4KPiA+Pj4+PiArICogYnJpZGdlLT5vcHMu IFRoaXMgZnVuY3Rpb24gc2hhbGwgbm90IGJlIGNhbGxlZCB3aGVuIHRoZSBmbGFnIGlzIG5vdCBz ZXQuCj4gPj4+Pj4gKyAqCj4gPj4+Pj4gKyAqIE9ubHkgb25lIGhvdCBwbHVnIGRldGVjdGlvbiBj YWxsYmFjayBjYW4gYmUgcmVnaXN0ZXJlZCBhdCBhIHRpbWUsIGl0IGlzIGFuCj4gPj4+Pj4gKyAq IGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGhvdCBwbHVnIGRldGVjdGlvbiBpcyBh bHJlYWR5IGVuYWJsZWQgZm9yCj4gPj4+Pj4gKyAqIHRoZSBicmlkZ2UuCj4gPj4+Pj4gKyAqLwo+ ID4+Pj4gCj4gPj4+PiBUbyBzaW1wbGlmeSBhcmNoaXRlY3R1cmUgbWF5YmUgd291bGQgYmUgYmV0 dGVyIHRvIGVuYWJsZSBocGQganVzdCBvbgo+ID4+Pj4gYnJpZGdlIGF0dGFjaDoKPiA+Pj4+IAo+ ID4+Pj4gYnJpZGdlLT5ocGRfY2IgPSBjYjsKPiA+Pj4+IAo+ID4+Pj4gYnJpZGdlLT5ocGRfZGF0 YSA9IGRhdGE7Cj4gPj4+PiAKPiA+Pj4+IHJldCA9IGRybV9icmlkZ2VfYXR0YWNoKC4uLik7Cj4g Pj4+IAo+ID4+PiBZZWFoIEkgbGlrZSB0aGlzIG1vcmUuIFRoZSBvdGhlciBwcm9ibGVtIGhlcmUg aXMsIHdoYXQgaWYgeW91IG5lZWQgbW9yZQo+ID4+PiB0aGFuIDEgY2FsbGJhY2sgcmVnaXN0ZXJz IG9uIHRoZSBzYW1lIGJyaWRnZSBoZHAgc2lnbmFsPwo+ID4+IAo+ID4+IFRoYXQncyB3aHkgSSBk ZWNpZGVkIHRvIGhpZGUgaGlkZSBIUEQgdGhyb3VnaCBoZWxwZXJzLAo+ID4+IGRybV9icmlkZ2Vf aHBkX2VuYWJsZSgpIGFuZCBkcm1fYnJpZGdlX2hwZF9kaXNhYmxlKCkgb24gdGhlIGxpc3RlbmVy Cj4gPj4gc2lkZSwgYW5kIGRybV9icmlkZ2VfaHBkX25vdGlmeSgpIG9uIHRoZSBldmVudCByZXBv cnRlciBzaWRlLiBXaGlsZSB0aGUKPiA+PiBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIGxpbWl0 ZWQgdG8gYSBzaW5nbGUgbGlzdGVuZXIsIG9ubHkgdGhlIGhlbHBlcnMKPiA+PiB3b3VsZCBuZWVk IHRvIGJlIGNoYW5nZWQgdG8gZXh0ZW5kIHRoYXQgdG8gbXVsdGlwbGUgbGlzdGVuZXJzLgo+ID4+ IAo+ID4+IE5vdGUgdGhhdCB0aGUgLmhwZF9lbmFibGUoKSBhbmQgLmhwZF9kaXNhYmxlKCkgb3Bl cmF0aW9ucyBhbHNvIGFsbG93IHRoZQo+ID4+IGJyaWRnZSB0byBkaXNhYmxlIEhQRCBkZXRlY3Rp b24gd2hlbiBub3QgdXNlZC4gRG9pbmcgc28ga2VlcHMgdGhlIGJyaWRnZQo+ID4+IHNpbXBsZSwg aXQgb25seSBuZWVkcyB0byBjYXJlIGFib3V0IHJlcG9ydGluZyBIUEQgZXZlbnRzIHdoZW4gdGhl eSdyZQo+ID4+IGVuYWJsZWQsIHdpdGhvdXQgY2FyaW5nIHdobyAoaWYgYW55b25lKSBpcyBsaXN0 ZW5pbmcsIGFuZCBnZXRzIGNsZWFyCj4gPj4gaW5zdHJ1Y3Rpb25zIG9uIHdoZXRoZXIgdG8gZW5h YmxlIG9yIGRpc2FibGUgdGhlIEhQRCBoYXJkd2FyZSAoaW4gY2FzZQo+ID4+IGl0IGNhbiBiZSBk aXNhYmxlZCkuCj4gPj4gCj4gPj4+PiBUaGlzIHdheSB3ZSBjb3VsZCBhdm9pZCBhZGRpbmcgbmV3 IGNhbGxiYWNrcyBocGRfKGVuYWJsZXxkaXNhYmxlKQo+ID4+Pj4gd2l0aG91dCBiaWcgc2Fjcmlm aWNlcy4KPiA+Pj4+IAo+ID4+Pj4gT25lIG1vcmUgdGhpbmc6IEhQRCBpbiBEaXNwbGF5UG9ydC9I RE1JIGJlc2lkZSBzaWduYWxsaW5nIHBsdWcvdW5wbHVnLAo+ID4+Pj4gbm90aWZpZXMgYWJvdXQg c2luayBzdGF0dXMgY2hhbmdlLCBob3cgaXQgdHJhbnNsYXRlcyB0byB0aGlzIGNiPwo+ID4+IAo+ ID4+IFRoaXMgaXMgc29tZXRoaW5nIHRoaXMgc2VyaWVzIGRvZXNuJ3QgaW1wbGVtZW50LiBJIGRv bid0IHRoaW5rIGl0IHdvdWxkCj4gPj4gYmUgYSBiaWcgZGVhbCwgYnV0IG15IGtub3dsZWRnZSBv ZiBIUEQgKGVzcGVjaWFsbHkgZm9yIERpc3BsYXlQb3J0KSBlbmRzCj4gPj4gaGVyZS4gSWYgeW91 IGNhbiBlbGFib3JhdGUgb24gd2hhdCB3b3VsZCBiZSBuZWVkZWQsIEkgY2FuIGltcGxlbWVudAo+ ID4+IHRoYXQuCj4gPj4gCj4gPj4+Pj4gK3ZvaWQgZHJtX2JyaWRnZV9ocGRfZW5hYmxlKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+Pj4gKwkJCSAgIHZvaWQgKCpjYikodm9pZCAqZGF0 YSwKPiA+Pj4+PiArCQkJCSAgICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKSwK PiA+Pj4+PiArCQkJICAgdm9pZCAqZGF0YSkKPiA+Pj4+PiArewo+ID4+Pj4+ICsJaWYgKCFicmlk Z2UgfHwgIWJyaWRnZS0+ZnVuY3MtPmhwZF9lbmFibGUpCj4gPj4+Pj4gKwkJcmV0dXJuOwo+ID4+ Pj4+ICsKPiA+Pj4+PiArCW11dGV4X2xvY2soJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+Pj4+PiAr Cj4gPj4+Pj4gKwlpZiAoV0FSTihicmlkZ2UtPmhwZF9jYiwgIkhvdCBwbHVnIGRldGVjdGlvbiBh bHJlYWR5IGVuYWJsZWRcbiIpKQo+ID4+Pj4+ICsJCWdvdG8gdW5sb2NrOwo+ID4+Pj4+ICsKPiA+ Pj4+PiArCWJyaWRnZS0+aHBkX2NiID0gY2I7Cj4gPj4+Pj4gKwlicmlkZ2UtPmhwZF9kYXRhID0g ZGF0YTsKPiA+Pj4+PiArCj4gPj4+Pj4gKwlicmlkZ2UtPmZ1bmNzLT5ocGRfZW5hYmxlKGJyaWRn ZSk7Cj4gPj4+Pj4gKwo+ID4+Pj4+ICt1bmxvY2s6Cj4gPj4+Pj4gKwltdXRleF91bmxvY2soJmJy aWRnZS0+aHBkX211dGV4KTsKPiA+Pj4+PiArfQo+ID4+Pj4+ICtFWFBPUlRfU1lNQk9MX0dQTChk cm1fYnJpZGdlX2hwZF9lbmFibGUpOwo+ID4+Pj4+ICsKPiA+Pj4+PiArLyoqCj4gPj4+Pj4gKyAq IGRybV9icmlkZ2VfaHBkX2Rpc2FibGUgLSBkaXNhYmxlIGhvdCBwbHVnIGRldGVjdGlvbiBmb3Ig dGhlIGJyaWRnZQo+ID4+Pj4+ICsgKiBAYnJpZGdlOiBicmlkZ2UgY29udHJvbCBzdHJ1Y3R1cmUK PiA+Pj4+PiArICoKPiA+Pj4+PiArICogQ2FsbCAmZHJtX2JyaWRnZV9mdW5jcy5ocGRfZGlzYWJs ZSBhbmQgdW5yZWdpc3RlciB0aGUgaG90IHBsdWcgZGV0ZWN0aW9uCj4gPj4+Pj4gKyAqIGNhbGxi YWNrIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIGRybV9icmlkZ2VfaHBkX2VuYWJsZSgpLiBP bmNlIHRoaXMKPiA+Pj4+PiArICogZnVuY3Rpb24gcmV0dXJucyB0aGUgY2FsbGJhY2sgd2lsbCBu b3QgYmUgY2FsbGVkIGJ5IHRoZSBicmlkZ2Ugd2hlbiBhbgo+ID4+Pj4+ICsgKiBvdXRwdXQgc3Rh dHVzIGNoYW5nZSBvY2N1cnMuCj4gPj4+Pj4gKyAqCj4gPj4+Pj4gKyAqIEhvdCBwbHVnIGRldGVj dGlvbiBpcyBzdXBwb3J0ZWQgb25seSBpZiB0aGUgRFJNX0JSSURHRV9PUF9IUEQgZmxhZyBpcyBz ZXQgaW4KPiA+Pj4+PiArICogYnJpZGdlLT5vcHMuIFRoaXMgZnVuY3Rpb24gc2hhbGwgbm90IGJl IGNhbGxlZCB3aGVuIHRoZSBmbGFnIGlzIG5vdCBzZXQuCj4gPj4+Pj4gKyAqLwo+ID4+Pj4+ICt2 b2lkIGRybV9icmlkZ2VfaHBkX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ Pj4+PiArewo+ID4+Pj4+ICsJaWYgKCFicmlkZ2UgfHwgIWJyaWRnZS0+ZnVuY3MtPmhwZF9kaXNh YmxlKQo+ID4+Pj4+ICsJCXJldHVybjsKPiA+Pj4+PiArCj4gPj4+Pj4gKwltdXRleF9sb2NrKCZi cmlkZ2UtPmhwZF9tdXRleCk7Cj4gPj4+Pj4gKwlicmlkZ2UtPmZ1bmNzLT5ocGRfZGlzYWJsZShi cmlkZ2UpOwo+ID4+Pj4+ICsKPiA+Pj4+PiArCWJyaWRnZS0+aHBkX2NiID0gTlVMTDsKPiA+Pj4+ PiArCWJyaWRnZS0+aHBkX2RhdGEgPSBOVUxMOwo+ID4+Pj4+ICsJbXV0ZXhfdW5sb2NrKCZicmlk Z2UtPmhwZF9tdXRleCk7Cj4gPj4+Pj4gK30KPiA+Pj4+PiArRVhQT1JUX1NZTUJPTF9HUEwoZHJt X2JyaWRnZV9ocGRfZGlzYWJsZSk7Cj4gPj4+Pj4gKwo+ID4+Pj4+ICsvKioKPiA+Pj4+PiArICog ZHJtX2JyaWRnZV9ocGRfbm90aWZ5IC0gbm90aWZ5IGhvdCBwbHVnIGRldGVjdGlvbiBldmVudHMK PiA+Pj4+PiArICogQGJyaWRnZTogYnJpZGdlIGNvbnRyb2wgc3RydWN0dXJlCj4gPj4+Pj4gKyAq IEBzdGF0dXM6IG91dHB1dCBjb25uZWN0aW9uIHN0YXR1cwo+ID4+Pj4+ICsgKgo+ID4+Pj4+ICsg KiBCcmlkZ2UgZHJpdmVycyBzaGFsbCBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVwb3J0IGhvdCBw bHVnIGV2ZW50cyB3aGVuIHRoZXkKPiA+Pj4+PiArICogZGV0ZWN0IGEgY2hhbmdlIGluIHRoZSBv dXRwdXQgc3RhdHVzLCB3aGVuIGhvdCBwbHVnIGRldGVjdGlvbiBoYXMgYmVlbgo+ID4+Pj4+ICsg KiBlbmFibGVkIGJ5IHRoZSAmZHJtX2JyaWRnZV9mdW5jcy5ocGRfZW5hYmxlIGNhbGxiYWNrLgo+ ID4+Pj4+ICsgKgo+ID4+Pj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGNhbGxlZCBpbiBh IGNvbnRleHQgdGhhdCBjYW4gc2xlZXAuCj4gPj4+Pj4gKyAqLwo+ID4+Pj4+ICt2b2lkIGRybV9i cmlkZ2VfaHBkX25vdGlmeShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+Pj4+ICsJCQkg ICBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cykKPiA+Pj4+PiArewo+ID4+Pj4+ICsJ bXV0ZXhfbG9jaygmYnJpZGdlLT5ocGRfbXV0ZXgpOwo+ID4+Pj4+ICsJaWYgKGJyaWRnZS0+aHBk X2NiKQo+ID4+Pj4+ICsJCWJyaWRnZS0+aHBkX2NiKGJyaWRnZS0+aHBkX2RhdGEsIHN0YXR1cyk7 Cj4gPj4+IAo+ID4+PiBTbyB0aGlzIGlzbid0IHF1aXRlIHdoYXQgSSBoYWQgaW4gbWluZC4gSW5z dGVhZCBzb21ldGhpbmcgbGlrZSB0aGlzOgo+ID4+PiAKPiA+Pj4gCS8qIGl0ZXJhdGVzIG92ZXIg YWxsIGJyaWRnZXMgaW4gdGhlIGNoYWluIGNvbnRhaW5pbmcgQGJyaWRnZSAqLwo+ID4+PiAJZm9y X2VhY2hfYnJpZGdlKHRtcF9icmlkZ2UsIGJyaWRnZSkgewo+ID4+PiAJCWlmICh0bXBfYnJpZGdl ID09IGJyaWRnZSkKPiA+Pj4gCQkJY29udGludWU7Cj4gPj4+IAkJaWYgKGJyaWRnZS0+aHBkX25v dGlmeSk7Cj4gPj4+IAkJCWJyaWRnZS0+aHBkX25vdGlmeSh0bXBfYnJpZGdlLCBicmlkZ2UsIHN0 YXR1cyk7Cj4gPj4+IAl9Cj4gPj4+IAo+ID4+PiAJZW5jb2RlciA9IGVuY29kZXJfZm9yX2JyaWRn ZShicmlkZ2UpOwo+ID4+PiAJaWYgKGVuY29kZXItPmhlbHBlcl9wcml2YXRlLT5icmlkZ2VfaHBk X25vdGlmeSkKPiA+Pj4gCQllbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZS0+YnJpZGdlX2hwZF9ub3Rp ZnkoZW5jb2RlciwgYnJpZGdlLCBzdGF0dXMpOwo+ID4+PiAKPiA+Pj4gCWRldiA9IGJyaWRnZS0+ ZGV2Cj4gPj4+IAlpZiAoZGV2LT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJpdmF0ZS0+YnJpZGdlX2hw ZF9ub3RpZnkpCj4gPj4+IAkJZGV2LT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJpdmF0ZS0+YnJpZGdl X2hwZF9ub3RpZnkoZGV2LCBicmlkZ2UsIHN0YXR1cykKPiA+Pj4gCj4gPj4+IE5vIHJlZ2lzdGVy IGNhbGxiYWNrIG5lZWRlZCwgbm8gbG9ja2luZyBuZWVkZWQsIGV2ZXJ5b25lIGdldHMgZXhhY3Rs eSB0aGUKPiA+Pj4gaHBkIHRoZXkgd2FudC9uZWVkLgo+ID4+IAo+ID4+IEknbGwgcmVwbHkgdG8g dGhpcyBmdXJ0aGVyIGRvd24gdGhlIG1haWwgdGhyZWFkLCB0byBhZGRyZXNzIGFkZGl0aW9uYWwK PiA+PiBjb21tZW50cy4KPiA+PiAKPiA+Pj4+PiArCW11dGV4X3VubG9jaygmYnJpZGdlLT5ocGRf bXV0ZXgpOwo+ID4+Pj4+ICt9Cj4gPj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9icmlkZ2Vf aHBkX25vdGlmeSk7Cj4gPj4+Pj4gKwo+ID4+Pj4+ICAjaWZkZWYgQ09ORklHX09GCj4gPj4+Pj4g IC8qKgo+ID4+Pj4+ICAgKiBvZl9kcm1fZmluZF9icmlkZ2UgLSBmaW5kIHRoZSBicmlkZ2UgY29y cmVzcG9uZGluZyB0byB0aGUgZGV2aWNlIG5vZGUgaW4KPiA+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtX2JyaWRnZS5oIGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gPj4+Pj4g aW5kZXggMDhkYzE1ZjkzZGVkLi5iOTQ0NWFhNWIxZWYgMTAwNjQ0Cj4gPj4+Pj4gLS0tIGEvaW5j bHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gPj4+Pj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRn ZS5oCj4gPj4+Pj4gQEAgLTIzLDggKzIzLDkgQEAKPiA+Pj4+PiAgI2lmbmRlZiBfX0RSTV9CUklE R0VfSF9fCj4gPj4+Pj4gICNkZWZpbmUgX19EUk1fQlJJREdFX0hfXwo+ID4+Pj4+ICAKPiA+Pj4+ PiAtI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiA+Pj4+PiAgI2luY2x1ZGUgPGxpbnV4L2N0eXBl Lmg+Cj4gPj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gPj4+Pj4gKyNpbmNsdWRlIDxs aW51eC9tdXRleC5oPgo+ID4+Pj4+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2RlX29iamVjdC5oPgo+ ID4+Pj4+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlcy5oPgo+ID4+Pj4+ICAKPiA+Pj4+PiBAQCAt MzM0LDYgKzMzNSwxMTAgQEAgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgewo+ID4+Pj4+ICAJICov Cj4gPj4+Pj4gIAl2b2lkICgqYXRvbWljX3Bvc3RfZGlzYWJsZSkoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSwKPiA+Pj4+PiAgCQkJCSAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp Owo+ID4+Pj4+ICsKPiA+Pj4+PiArCS8qKgo+ID4+Pj4+ICsJICogQGRldGVjdDoKPiA+Pj4+PiAr CSAqCj4gPj4+Pj4gKwkgKiBDaGVjayBpZiBhbnl0aGluZyBpcyBhdHRhY2hlZCB0byB0aGUgYnJp ZGdlIG91dHB1dC4KPiA+Pj4+PiArCSAqCj4gPj4+Pj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9w dGlvbmFsLCBpZiBub3QgaW1wbGVtZW50ZWQgdGhlIGJyaWRnZSB3aWxsIGJlCj4gPj4+Pj4gKwkg KiBjb25zaWRlcmVkIGFzIGFsd2F5cyBoYXZpbmcgYSBjb21wb25lbnQgYXR0YWNoZWQgdG8gaXRz IG91dHB1dC4KPiA+Pj4+PiArCSAqIEJyaWRnZXMgdGhhdCBpbXBsZW1lbnQgdGhpcyBjYWxsYmFj ayBzaGFsbCBzZXQgdGhlCj4gPj4+Pj4gKwkgKiBEUk1fQlJJREdFX09QX0RFVEVDVCBmbGFnIGlu IHRoZWlyICZkcm1fYnJpZGdlLT5vcHMuCj4gPj4+Pj4gKwkgKgo+ID4+Pj4+ICsJICogUkVUVVJO UzoKPiA+Pj4+PiArCSAqCj4gPj4+Pj4gKwkgKiBkcm1fY29ubmVjdG9yX3N0YXR1cyBpbmRpY2F0 aW5nIHRoZSBicmlkZ2Ugb3V0cHV0IHN0YXR1cy4KPiA+Pj4+PiArCSAqLwo+ID4+Pj4+ICsJZW51 bSBkcm1fY29ubmVjdG9yX3N0YXR1cyAoKmRldGVjdCkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSk7Cj4gPj4+Pj4gKwo+ID4+Pj4+ICsJLyoqCj4gPj4+Pj4gKwkgKiBAZ2V0X21vZGVzOgo+ID4+ Pj4+ICsJICoKPiA+Pj4+PiArCSAqIEZpbGwgYWxsIG1vZGVzIGN1cnJlbnRseSB2YWxpZCBmb3Ig dGhlIHNpbmsgaW50byB0aGUgJmRybV9jb25uZWN0b3IKPiA+Pj4+PiArCSAqIHdpdGggZHJtX21v ZGVfcHJvYmVkX2FkZCgpLgo+ID4+Pj4+ICsJICoKPiA+Pj4+PiArCSAqIFRoZSBAZ2V0X21vZGVz IGNhbGxiYWNrIGlzIG1vc3RseSBpbnRlbmRlZCB0byBzdXBwb3J0IG5vbi1wcm9iYWJsZQo+ID4+ Pj4+ICsJICogZGlzcGxheXMgc3VjaCBhcyBtYW55IGZpeGVkIHBhbmVscy4gQnJpZGdlcyB0aGF0 IHN1cHBvcnQgcmVhZGluZwo+ID4+Pj4+ICsJICogRURJRCBzaGFsbCBsZWF2ZSBAZ2V0X21vZGVz IHVuaW1wbGVtZW50ZWQgYW5kIGltcGxlbWVudCB0aGUKPiA+Pj4+PiArCSAqICZkcm1fYnJpZGdl X2Z1bmNzLT5nZXRfZWRpZCBjYWxsYmFjayBpbnN0ZWFkLgo+ID4+Pj4+ICsJICoKPiA+Pj4+PiAr CSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwuIEJyaWRnZXMgdGhhdCBpbXBsZW1lbnQgaXQg c2hhbGwgc2V0IHRoZQo+ID4+Pj4+ICsJICogRFJNX0JSSURHRV9PUF9NT0RFUyBmbGFnIGluIHRo ZWlyICZkcm1fYnJpZGdlLT5vcHMuCj4gPj4+Pj4gKwkgKgo+ID4+Pj4+ICsJICogUkVUVVJOUzoK PiA+Pj4+PiArCSAqCj4gPj4+Pj4gKwkgKiBUaGUgbnVtYmVyIG9mIG1vZGVzIGFkZGVkIGJ5IGNh bGxpbmcgZHJtX21vZGVfcHJvYmVkX2FkZCgpLgo+ID4+Pj4+ICsJICovCj4gPj4+Pj4gKwlpbnQg KCpnZXRfbW9kZXMpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+Pj4gKwkJCSBzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+Pj4+PiArCj4gPj4+Pj4gKwkvKioKPiA+ Pj4+PiArCSAqIEBnZXRfZWRpZDoKPiA+Pj4+PiArCSAqCj4gPj4+Pj4gKwkgKiBSZWFkIGFuZCBw YXJzZSB0aGUgRURJRCBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgZGlzcGxheS4KPiA+Pj4+PiArCSAq Cj4gPj4+Pj4gKwkgKiBUaGUgQGdldF9lZGlkIGNhbGxiYWNrIGlzIHRoZSBwcmVmZXJyZWQgd2F5 IG9mIHJlcG9ydGluZyBtb2RlCj4gPj4+Pj4gKwkgKiBpbmZvcm1hdGlvbiBmb3IgYSBkaXNwbGF5 IGNvbm5lY3RlZCB0byB0aGUgYnJpZGdlIG91dHB1dC4gQnJpZGdlcwo+ID4+Pj4+ICsJICogdGhh dCBzdXBwb3J0IHJlYWRpbmQgRURJRCBzaGFsbCBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjayBhbmQg bGVhdmUKPiA+Pj4+PiArCSAqIHRoZSBAZ2V0X21vZGVzIGNhbGxiYWNrIHVuaW1wbGVtZW50ZWQu Cj4gPj4+Pj4gKwkgKgo+ID4+Pj4+ICsJICogVGhlIGNhbGxlciBvZiB0aGlzIG9wZXJhdGlvbiBz aGFsbCBmaXJzdCB2ZXJpZnkgdGhlIG91dHB1dAo+ID4+Pj4+ICsJICogY29ubmVjdGlvbiBzdGF0 dXMgYW5kIHJlZnJhaW4gZnJvbSByZWFkaW5nIEVESUQgZnJvbSBhIGRpc2Nvbm5lY3RlZAo+ID4+ Pj4+ICsJICogb3V0cHV0Lgo+ID4+Pj4+ICsJICoKPiA+Pj4+PiArCSAqIFRoaXMgY2FsbGJhY2sg aXMgb3B0aW9uYWwuIEJyaWRnZXMgdGhhdCBpbXBsZW1lbnQgaXQgc2hhbGwgc2V0IHRoZQo+ID4+ Pj4+ICsJICogRFJNX0JSSURHRV9PUF9FRElEIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2UtPm9w cy4KPiA+Pj4+PiArCSAqCj4gPj4+Pj4gKwkgKiBSRVRVUk5TOgo+ID4+Pj4+ICsJICoKPiA+Pj4+ PiArCSAqIEFuIGVkaWQgc3RydWN0dXJlIG5ld2x5IGFsbG9jYXRlZCB3aXRoIGttYWxsb2MoKSAo b3Igc2ltaWxhcikgb24KPiA+Pj4+PiArCSAqIHN1Y2Nlc3MsIG9yIE5VTEwgb3RoZXJ3aXNlLiBU aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nCj4gPj4+Pj4gKwkgKiB0aGUgcmV0 dXJuZWQgZWRpZCBzdHJ1Y3R1cmUgd2l0aCBrZnJlZSgpLgo+ID4+Pj4+ICsJICovCj4gPj4+Pj4g KwlzdHJ1Y3QgZWRpZCAqKCpnZXRfZWRpZCkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ Pj4+PiArCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+Pj4+IAo+ID4+ Pj4gSXQgb3ZlcmxhcHMgd2l0aCBnZXRfbW9kZXMsIEkgZ3Vlc3MgcHJlc2VuY2Ugb2Ygb25lIG9w cyBzaG91bGQgZGlzYWxsb3cKPiA+Pj4+IHByZXNlbmNlIG9mIGFub3RoZXIgb25lPwo+ID4+Pj4g Cj4gPj4+PiBJIGFtIG5vdCByZWFsbHkgY29udmluY2VkIHdlIG5lZWQgdGhpcyBvcCBhdCBhbGws IGNhbm5vdCB3ZSBqdXN0IGFzc2lnbgo+ID4+Pj4gc29tZSBoZWxwZXIgZnVuY3Rpb24gdG8gLmdl dF9tb2RlcyBjYiwgd2hpY2ggd2lsbCBkbyB0aGUgc2FtZT8KPiA+Pj4gCj4gPj4+IFBsYW4gQik6 IGRpdGNoIC0+Z2V0X2VkaWQsIHJlcXVpcmUgdGhhdCB0aGUgZHJpdmVyIGhhcyAtPmdldF9tb2Rl cyBpbiB0aGF0Cj4gPj4+IGNhc2UsIGFuZCByZXF1aXJlIHRoYXQgaWYgaXQgaGFzIGFuIGVkaWQg aXQgbXVzdCBmaWxsIG91dCBjb25uZWN0b3ItPmluZm8KPiA+Pj4gYW5kIGNvbm5lY3Rvci0+ZWRp ZCBjb3JyZWN0bHkuCj4gPj4gCj4gPj4gSSB0aGluayB0aGF0J3MgZG9hYmxlLCBJJ2xsIGhhdmUg YSBsb29rLgo+ID4gCj4gPiBTbyBJIGhhZCBhIGxvb2ssIGFuZCB3aGlsZSB0aGlzIGlzIGRvYWJs ZSwgaXQgd291bGQgZXNzZW50aWFsbHkgbWVhbgo+ID4gdGhhdCBhbGwgYnJpZGdlcyB0aGF0IHJl dHJpZXZlIG1vZGVzIGZyb20gRURJRCB3b3VsZCBoYXZlIHRvIHJvbGwgb3V0Cj4gPiB0aGVpciBv d24gdmVyc2lvbiBvZiB0aGUgZm9sbG93aW5nIGNvZGU6Cj4gPiAKPiA+IHN0YXRpYyBpbnQgZHJt X2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzX2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKPiA+IAkJCQkJICAgICAgIHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gPiB7 Cj4gPiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7Cj4gPiAJc3RydWN0IGVkaWQg KmVkaWQ7Cj4gPiAJaW50IG47Cj4gPiAKPiA+IAlzdGF0dXMgPSBkcm1fYnJpZGdlX2Nvbm5lY3Rv cl9kZXRlY3QoY29ubmVjdG9yLCBmYWxzZSk7Cj4gPiAJaWYgKHN0YXR1cyAhPSBjb25uZWN0b3Jf c3RhdHVzX2Nvbm5lY3RlZCkKPiA+IAkJZ290byBub19lZGlkOwo+ID4gCj4gPiAJZWRpZCA9IGJy aWRnZS0+ZnVuY3MtPmdldF9lZGlkKGJyaWRnZSwgY29ubmVjdG9yKTsKPiA+IAlpZiAoIWVkaWQg fHwgIWRybV9lZGlkX2lzX3ZhbGlkKGVkaWQpKSB7Cj4gPiAJCWtmcmVlKGVkaWQpOwo+ID4gCQln b3RvIG5vX2VkaWQ7Cj4gPiAJfQo+ID4gCj4gPiAJZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9w cm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOwo+ID4gCW4gPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29u bmVjdG9yLCBlZGlkKTsKPiA+IAo+ID4gCWtmcmVlKGVkaWQpOwo+ID4gCXJldHVybiBuOwo+ID4g Cj4gPiBub19lZGlkOgo+ID4gCWRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29u bmVjdG9yLCBOVUxMKTsKPiA+IAlyZXR1cm4gMDsKPiA+IH0KPiA+IAo+ID4gSXMgdGhpcyBkZXNp cmVkID8KPiAKPiBXZSBzdG9yZSB0aGUgZWRpZCwgYW5kIHdlIHN0b3JlIGEgbG90IG9mIGRlY29k ZWQgaW5mb3JtYXRpb24gaW4KPiBkcm1fY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uIENhbid0IHRo ZXkganVzdCBsb29rIHRoZXJlPyBSZS1mZXRjaGluZyB0aGUKPiBlZGlkIGRlZmluaXRlbHkgc291 bmRzIGxpa2UgdGhlIHdyb25nIHRoaW5nIHRvIGRvLgo+IAo+IFdlIG1pZ2h0IHJ1biBpbnRvIHNv bWUgb3JkZXJpbmcgaXNzdWUgaGVyZSBJIGd1ZXNzIHdpdGggaG90cGx1Z3MgYW5kIHdobydzCj4g ZmV0Y2hpbmcgdGhlIGVkaWQgYW5kIGV2ZXJ5dGhpbmcgbGlrZSB0aGF0LgoKVGhhdCdzIGV4YWN0 bHkgd2hhdCBJIHdhcyBhYm91dCB0byBhbnN3ZXIgYWZ0ZXIgcmVhZGluZyB5b3VyIGZpcnN0CnBh cmFncmFwaCA6LSkgSSBiZWxpZXZlIGNhY2hpbmcgRURJRCBpcyBhIGdvb2QgaWRlYSwgYnV0IG15 IGZhbWlsaWFyaXR5CndpdGggaG90cGx1Zy1yZWxhdGVkIGlzc3VlcyBpcyBsaW1pdGVkIHRvIGEg aGFuZGZ1bCBvZiBzeXN0ZW1zLCBhbmQgSSdtCnN1cmUgSSdtIG1pc3Npbmcgc29tZSBjb21tb24g cHJvYmxlbXMuIElmIHlvdSBjYW4gdGVsbCBtZSBob3cgeW91IHRoaW5rCnRoaXMgc2hvdWxkIGJl IGRvbmUsIEkgY2FuIGdpdmUgaXQgYSB0cnkuCgo+IEFsc28gbWF5YmUgSSdtIG1pc3NpbmcgdGhl IHBvaW50IGhlcmUsIGFuZCB0aGlua2luZyB0b28gbXVjaCBvZgo+IC0+Z2V0X21vZGVzIG9uIHRo ZSBjb25uZWN0b3IuIEJ1dCB0aGVuIEknbSBub3QgY2xlYXIgb24gd2h5IHRoZSBicmlkZ2UKPiBu ZWVkcyB0aGUgY29ubmVjdG9yLCBhbmQgd2h5IGl0IGluc3RlYWQgY2FuJ3QganVzdCByZXR1cm4g dGhlIGVkaWQgaXQgY2FuCj4gcmVhZCBhbmQgbGV0IHRoZSBjYWxsZXIvY29yZSBmaWd1cmUgb3V0 IGV2ZXJ5dGhpbmcgZWxzZT8KClRoYXQncyBleGFjdGx5IHdoYXQgdGhlIC5nZXRfZWRpZCgpIG9w ZXJhdGlvbiB0aGF0IHlvdSBhc2tlZCBtZSB0bwpyZW1vdmUgZGlkLi4uIDotKSBZb3UgZGlkbid0 IGxpa2UgdGhlIGZhY3QgdGhhdCBpdCBkdXBsaWNhdGVkIHRoZQouZ2V0X21vZGVzKCkgbG9naWMu IFNob3VsZCBJIGFkZCBpdCBiYWNrLCBhbmQgY2xlYXJseSBkb2N1bWVudAouZ2V0X21vZGVzKCkg YXMgYSBmYWxsYmFjayB1c2VkIG9ubHkgd2hlbiB0aGUgY29ubmVjdG9yIGRvZXNuJ3QgdXNlIEVE SUQKPwoKPiA+Pj4gQnR3IGlmIGEgaHBkIGhhcHBlbnMsIHdobydzIHJlc3BvbmlibGUgZm9yIG1h a2luZyBzdXJlIHRoZSBlZGlkL21vZGUgbGlzdAo+ID4+PiBpbiB0aGUgY29ubmVjdG9yIGlzIHVw LXRvLWRhdGU/IFdpdGggeW91ciBjdXJyZW50IGNhbGxiYWNrIGRlc2lnbiB0aGF0J3MKPiA+Pj4g dXAgdG8gdGhlIGNhbGxiYWNrLCB3aGljaCBkb2Vzbid0IGZlZWwgZ3JlYXQuIE1heWJlICBkcm1f YnJpZGdlX2hwZF9ub3RpZnkKPiA+Pj4gc2hvdWxkIGd1YXJhbnRlZSB0aGF0IGl0J2xsIGZpcnN0 IHdhbGsgdGhlIGNvbm5lY3RvcnMgdG8gdXBkYXRlIHN0YXR1cyBhbmQKPiA+Pj4gZWRpZC9tb2Rl IGxpc3QgZm9yIHRoZSBmaW5hbCBkcm1fY29ubmVjdG9yLiBBbmQgdGhlbiBpbnN0ZWFkIG9mIGp1 c3QKPiA+Pj4gcGFzc2luZyB0aGUgc2ltcGxlICJzdGF0dXMiLCBpdCdsbCBwYXNzIHRoZSBjb25u ZWN0b3IsIHdpdGggZXZlcnl0aGluZwo+ID4+PiBjb3JyZWN0bHkgdXBkYXRlZC4KPiA+Pj4gCj4g Pj4+IE90aGVyd2lzZSBldmVyeW9uZSBpbnRlcmVzdGVkIGluIHRoYXQgaHBkIHNpZ25hbCB3aWxs IGdvIGFuZCByZS1mZXRjaCB0aGUKPiA+Pj4gZWRpZCwgd2hpY2ggaXMgbm90IHNvIGF3ZXNvbWUg Oi0pCj4gPj4gCj4gPj4gV2l0aCB0aGUgY3VycmVudCBkZXNpZ24gdGhlcmUncyBhIHNpbmdsZSBs aXN0ZW5lciwgc28gaXQncyBub3QgYSBiaWcKPiA+PiBkZWFsIDotKSBGdXJ0aGVybW9yZSwgdGhl IGxpc3RlbmVyIGlzIHRoZSBoZWxwZXIgdGhhdCBjcmVhdGVzIGEKPiA+PiBjb25uZWN0b3Igb24g dG9wIG9mIGEgY2hhaW4gb2YgYnJpZGdlcywgc28gaXQncyBhIHByZXR0eSBnb29kIHBsYWNlIHRv Cj4gPj4gaGFuZGxlIHRoaXMuIFNlZSB0aGUgY2FsbCB0byBkcm1fa21zX2hlbHBlcl9ob3RwbHVn X2V2ZW50KCkgaW4KPiA+PiBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9ocGRfY2IoKS4KPiA+PiAKPiA+ PiBJJ20gYWxsIGZvciByZXdvcmtpbmcgSFBEIGFuZCBtb2RlIGZldGNoaW5nLCBidXQgSSB0aGlu ayBpdCdzIGEgYml0IHRvbwo+ID4+IGJpZyBvZiBhIHJlcXVpcmVtZW50IGFzIGEgcHJlcmVxdWlz aXRlIGZvciB0aGlzIHNlcmllcyAob3IgYXMgcGFydCBvZgo+ID4+IHRoaXMgc2VyaWVzKS4gV2Ug aGF2ZSBoYXJkd2FyZSB0aGF0IGNhbiByZXBvcnQgSFBEIHdpdGggdmFyaW91cyBsZXZlbCBvZgo+ ID4+IGRldGFpbHMgKGZyb20gInNvbWV0aGluZyBoYXBwZW5lZCBvbiBhIGNvbm5lY3RvciIgdG8g InRoaXMgcGFydGljdWxhcgo+ID4+IGV2ZW50IGhhcHBlbmVkIG9uIHRoaXMgcGFydGljdWxhciBj b25uZWN0b3IiKSwgYW5kIHdlIGNoYW5uZWwgdGhhdAo+ID4+IHRocm91Z2ggaGVscGVycyBzdWNo IGFzIGRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoKSB0aGF0IGxvc2UgdGhlCj4gPj4gZGV0 YWlscyBhbmQgZ28gdGhyb3VnaCBhIGhlYXZ5IG1lY2hhbmlzbSB0byByZWZldGNoIGV2ZXJ5dGhp bmcuIEkKPiA+PiB1bmRlcnN0YW5kIHRoaXMgaXMgbmVlZGVkIGluIG1hbnkgY2FzZXMsIGJ1dCBJ IHRoaW5rIHRoZXJlJ3Mgcm9vbSBmb3IKPiA+PiBpbXByb3ZlbWVudC4gVGhpcyBzZXJpZXMsIGlu IG15IG9waW5pb24sIGRvZXNuJ3QgZ28gaW4gdGhlIHdyb25nCj4gPj4gZGlyZWN0aW9uIGluIHRo YXQgcmVnYXJkLCBhcyBpdCBldmVudHVhbGx5IGNhbGxzCj4gPj4gZHJtX2ttc19oZWxwZXJfaG90 cGx1Z19ldmVudCgpLCBzbyBJIHRoaW5rIGltcHJvdmVtZW50cyB3b3VsZCBtYWtlIHNlbnNlCj4g Pj4gb24gdG9wIG9mIGl0LiBJJ20gZXZlbiB3aWxsaW5nIHRvIHdvcmsgb24gdGhpcywgcHJvdmlk ZWQgSSBnZXQgZmVlZGJhY2sKPiA+PiBvbiB3aGF0IGlzIGRlc2lyZWQuCj4gPj4gCj4gPj4+Pj4g KwkvKioKPiA+Pj4+PiArCSAqIEBsb3N0X2hvdHBsdWc6Cj4gPj4+Pj4gKwkgKgo+ID4+Pj4+ICsJ ICogTm90aWZ5IHRoZSBicmlkZ2Ugb2YgZGlzcGxheSBkaXNjb25uZWN0aW9uLgo+ID4+Pj4+ICsJ ICoKPiA+Pj4+PiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwsIGl0IG1heSBiZSBpbXBs ZW1lbnRlZCBieSBicmlkZ2VzIHRoYXQKPiA+Pj4+PiArCSAqIG5lZWQgdG8gYmUgbm90aWZpZWQg b2YgZGlzcGxheSBkaXNjb25uZWN0aW9uIGZvciBpbnRlcm5hbCByZWFzb25zLgo+ID4+Pj4+ICsJ ICogT25lIHVzZSBjYXNlIGlzIHRvIHJlc2V0IHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiBDRUMgY29u dHJvbGxlcnMgZm9yCj4gPj4+Pj4gKwkgKiBIRE1JIGJyaWRnZXMuCj4gPj4+Pj4gKwkgKi8KPiA+ Pj4+PiArCXZvaWQgKCpsb3N0X2hvdHBsdWcpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpOwo+ ID4+Pj4+ICsKPiA+Pj4+PiArCS8qKgo+ID4+Pj4+ICsJICogQGhwZF9lbmFibGU6Cj4gPj4+Pj4g KwkgKgo+ID4+Pj4+ICsJICogRW5hYmxlIGhvdCBwbHVnIGRldGVjdGlvbi4gRnJvbSBub3cgb24g dGhlIGJyaWRnZSBzaGFsbCBjYWxsCj4gPj4+Pj4gKwkgKiBkcm1fYnJpZGdlX2hwZF9ub3RpZnko KSBlYWNoIHRpbWUgYSBjaGFuZ2UgaXMgZGV0ZWN0ZWQgaW4gdGhlIG91dHB1dAo+ID4+Pj4+ICsJ ICogY29ubmVjdGlvbiBzdGF0dXMsIHVudGlsIGhvdCBwbHVnIGRldGVjdGlvbiBnZXRzIGRpc2Fi bGVkIHdpdGgKPiA+Pj4+PiArCSAqIEBocGRfZGlzYWJsZS4KPiA+Pj4+PiArCSAqCj4gPj4+Pj4g KwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsIGFuZCBzaGFsbCBvbmx5IGJlIGltcGxlbWVu dGVkIGJ5IGJyaWRnZXMKPiA+Pj4+PiArCSAqIHRoYXQgc3VwcG9ydCBob3QtcGx1ZyBub3RpZmlj YXRpb24gd2l0aG91dCBwb2xsaW5nLiBCcmlkZ2VzIHRoYXQKPiA+Pj4+PiArCSAqIGltcGxlbWVu dCBpdCBzaGFsbCBhbHNvIGltcGxlbWVudCB0aGUgQGhwZF9kaXNhYmxlIGNhbGxiYWNrIGFuZCBz ZXQKPiA+Pj4+PiArCSAqIHRoZSBEUk1fQlJJREdFX09QX0hQRCBmbGFnIGluIHRoZWlyICZkcm1f YnJpZGdlLT5vcHMuCj4gPj4+Pj4gKwkgKi8KPiA+Pj4+PiArCXZvaWQgKCpocGRfZW5hYmxlKShz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiA+Pj4+PiArCj4gPj4+Pj4gKwkvKioKPiA+Pj4+ PiArCSAqIEBocGRfZGlzYWJsZToKPiA+Pj4+PiArCSAqCj4gPj4+Pj4gKwkgKiBEaXNhYmxlIGhv dCBwbHVnIGRldGVjdGlvbi4gT25jZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGJyaWRnZQo+ ID4+Pj4+ICsJICogc2hhbGwgbm90IGNhbGwgZHJtX2JyaWRnZV9ocGRfbm90aWZ5KCkgd2hlbiBh IGNoYW5nZSBpbiB0aGUgb3V0cHV0Cj4gPj4+Pj4gKwkgKiBjb25uZWN0aW9uIHN0YXR1cyBvY2N1 cnMuCj4gPj4+Pj4gKwkgKgo+ID4+Pj4+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCBh bmQgc2hhbGwgb25seSBiZSBpbXBsZW1lbnRlZCBieSBicmlkZ2VzCj4gPj4+Pj4gKwkgKiB0aGF0 IHN1cHBvcnQgaG90LXBsdWcgbm90aWZpY2F0aW9uIHdpdGhvdXQgcG9sbGluZy4gQnJpZGdlcyB0 aGF0Cj4gPj4+Pj4gKwkgKiBpbXBsZW1lbnQgaXQgc2hhbGwgYWxzbyBpbXBsZW1lbnQgdGhlIEBo cGRfZW5hYmxlIGNhbGxiYWNrIGFuZCBzZXQKPiA+Pj4+PiArCSAqIHRoZSBEUk1fQlJJREdFX09Q X0hQRCBmbGFnIGluIHRoZWlyICZkcm1fYnJpZGdlLT5vcHMuCj4gPj4+Pj4gKwkgKi8KPiA+Pj4+ PiArCXZvaWQgKCpocGRfZGlzYWJsZSkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gPj4+ Pj4gIH07Cj4gPj4+Pj4gIAo+ID4+Pj4+ICAvKioKPiA+Pj4+PiBAQCAtMzcyLDYgKzQ3NywzOCBA QCBzdHJ1Y3QgZHJtX2JyaWRnZV90aW1pbmdzIHsKPiA+Pj4+PiAgCWJvb2wgZHVhbF9saW5rOwo+ ID4+Pj4+ICB9Owo+ID4+Pj4+ICAKPiA+Pj4+PiArLyoqCj4gPj4+Pj4gKyAqIGVudW0gZHJtX2Jy aWRnZV9vcHMgLSBCaXRtYXNrIG9mIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBicmlkZ2UK PiA+Pj4+PiArICovCj4gPj4+Pj4gK2VudW0gZHJtX2JyaWRnZV9vcHMgewo+ID4+Pj4+ICsJLyoq Cj4gPj4+Pj4gKwkgKiBARFJNX0JSSURHRV9PUF9ERVRFQ1Q6IFRoZSBicmlkZ2UgY2FuIGRldGVj dCBkaXNwbGF5cyBjb25uZWN0ZWQgdG8KPiA+Pj4+PiArCSAqIGl0cyBvdXRwdXQuIEJyaWRnZXMg dGhhdCBzZXQgdGhpcyBmbGFnIHNoYWxsIGltcGxlbWVudCB0aGUKPiA+Pj4+PiArCSAqICZkcm1f YnJpZGdlX2Z1bmNzLT5kZXRlY3QgY2FsbGJhY2suCj4gPj4+Pj4gKwkgKi8KPiA+Pj4+PiArCURS TV9CUklER0VfT1BfREVURUNUID0gQklUKDApLAo+ID4+Pj4+ICsJLyoqCj4gPj4+Pj4gKwkgKiBA RFJNX0JSSURHRV9PUF9FRElEOiBUaGUgYnJpZGdlIGNhbiByZXRyaWV2ZSB0aGUgRURJRCBvZiB0 aGUgZGlzcGxheQo+ID4+Pj4+ICsJICogY29ubmVjdGVkIHRvIGl0cyBvdXRwdXQuIEJyaWRnZXMg dGhhdCBzZXQgdGhpcyBmbGFnIHNoYWxsIGltcGxlbWVudAo+ID4+Pj4+ICsJICogdGhlICZkcm1f YnJpZGdlX2Z1bmNzLT5nZXRfZWRpZCBjYWxsYmFjay4KPiA+Pj4+PiArCSAqLwo+ID4+Pj4+ICsJ RFJNX0JSSURHRV9PUF9FRElEID0gQklUKDEpLAo+ID4+Pj4+ICsJLyoqCj4gPj4+Pj4gKwkgKiBA RFJNX0JSSURHRV9PUF9IUEQ6IFRoZSBicmlkZ2UgY2FuIGRldGVjdCBob3QtcGx1ZyBhbmQgaG90 LXVucGx1Zwo+ID4+Pj4+ICsJICogd2l0aG91dCByZXF1aXJpbmcgcG9sbGluZy4gQnJpZGdlcyB0 aGF0IHNldCB0aGlzIGZsYWcgc2hhbGwKPiA+Pj4+PiArCSAqIGltcGxlbWVudCB0aGUgJmRybV9i cmlkZ2VfZnVuY3MtPmhwZF9lbmFibGUgYW5kCj4gPj4+Pj4gKwkgKiAmZHJtX2JyaWRnZV9mdW5j cy0+ZGlzYWJsZV9ocGRfY2IgY2FsbGJhY2tzLgo+ID4+Pj4+ICsJICovCj4gPj4+Pj4gKwlEUk1f QlJJREdFX09QX0hQRCA9IEJJVCgyKSwKPiA+Pj4+PiArCS8qKgo+ID4+Pj4+ICsJICogQERSTV9C UklER0VfT1BfTU9ERVM6IFRoZSBicmlkZ2UgY2FuIHJldHJpZXZpbmcgdGhlIG1vZGVzIHN1cHBv cnRlZAo+ID4+Pj4+ICsJICogYnkgdGhlIGRpc3BsYXkgYXQgaXRzIG91dHB1dC4gVGhpcyBkb2Vz IG5vdCBpbmNsdWRlIHJlYWRpbmQgRURJRAo+ID4+Pj4+ICsJICogd2hpY2ggaXMgc2VwYXJhdGVs eSBjb3ZlcmVkIGJ5IEBEUk1fQlJJREdFX09QX0VESUQuIEJyaWRnZXMgdGhhdCBzZXQKPiA+Pj4+ PiArCSAqIHRoaXMgZmxhZyBzaGFsbCBpbXBsZW1lbnQgdGhlICZkcm1fYnJpZGdlX2Z1bmNzLT5n ZXRfbW9kZXMgY2FsbGJhY2suCj4gPj4+Pj4gKwkgKi8KPiA+Pj4+PiArCURSTV9CUklER0VfT1Bf TU9ERVMgPSBCSVQoMyksCj4gPj4+Pj4gK307Cj4gPj4+Pj4gKwo+ID4+Pj4+ICAvKioKPiA+Pj4+ PiAgICogc3RydWN0IGRybV9icmlkZ2UgLSBjZW50cmFsIERSTSBicmlkZ2UgY29udHJvbCBzdHJ1 Y3R1cmUKPiA+Pj4+PiAgICovCj4gPj4+Pj4gQEAgLTM5OCw2ICs1MzUsMjkgQEAgc3RydWN0IGRy bV9icmlkZ2Ugewo+ID4+Pj4+ICAJY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgKmZ1bmNz Owo+ID4+Pj4+ICAJLyoqIEBkcml2ZXJfcHJpdmF0ZTogcG9pbnRlciB0byB0aGUgYnJpZGdlIGRy aXZlcidzIGludGVybmFsIGNvbnRleHQgKi8KPiA+Pj4+PiAgCXZvaWQgKmRyaXZlcl9wcml2YXRl Owo+ID4+Pj4+ICsJLyoqIEBvcHM6IGJpdG1hc2sgb2Ygb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYnkg dGhlIGJyaWRnZSAqLwo+ID4+Pj4+ICsJZW51bSBkcm1fYnJpZGdlX29wcyBvcHM7Cj4gPj4+Pj4g KwkvKioKPiA+Pj4+PiArCSAqIEB0eXBlOiBUeXBlIG9mIHRoZSBjb25uZWN0aW9uIGF0IHRoZSBi cmlkZ2Ugb3V0cHV0Cj4gPj4+Pj4gKwkgKiAoRFJNX01PREVfQ09OTkVDVE9SXyopLiBGb3IgYnJp ZGdlcyBhdCB0aGUgZW5kIG9mIHRoaXMgY2hhaW4gdGhpcwo+ID4+Pj4+ICsJICogaWRlbnRpZmll cyB0aGUgdHlwZSBvZiBjb25uZWN0ZWQgZGlzcGxheS4KPiA+Pj4+PiArCSAqLwo+ID4+Pj4+ICsJ aW50IHR5cGU7Cj4gPj4+Pj4gKwkvKiogcHJpdmF0ZTogKi8KPiA+Pj4+PiArCS8qKgo+ID4+Pj4+ ICsJICogQGhwZF9tdXRleDogUHJvdGVjdHMgdGhlIEBocGRfY2IgYW5kIEBocGRfZGF0YSBmaWVs ZHMuCj4gPj4+Pj4gKwkgKi8KPiA+Pj4+PiArCXN0cnVjdCBtdXRleCBocGRfbXV0ZXg7Cj4gPj4+ Pj4gKwkvKioKPiA+Pj4+PiArCSAqIEBocGRfY2I6IEhvdCBwbHVnIGRldGVjdGlvbiBjYWxsYmFj aywgcmVnaXN0ZXJlZCB3aXRoCj4gPj4+Pj4gKwkgKiBkcm1fYnJpZGdlX2hwZF9lbmFibGUoKS4K PiA+Pj4+PiArCSAqLwo+ID4+Pj4+ICsJdm9pZCAoKmhwZF9jYikodm9pZCAqZGF0YSwgZW51bSBk cm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMpOwo+ID4+Pj4+ICsJLyoqCj4gPj4+Pj4gKwkgKiBA aHBkX2RhdGE6IFByaXZhdGUgZGF0YSBwYXNzZWQgdG8gdGhlIEhvdCBwbHVnIGRldGVjdGlvbiBj YWxsYmFjawo+ID4+Pj4+ICsJICogQGhwZF9jYi4KPiA+Pj4+PiArCSAqLwo+ID4+Pj4+ICsJdm9p ZCAqaHBkX2RhdGE7Cj4gPj4+Pj4gIH07Cj4gPj4+Pj4gIAo+ID4+Pj4+ICB2b2lkIGRybV9icmlk Z2VfYWRkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpOwo+ID4+Pj4+IEBAIC00MjgsNiArNTg4 LDE0IEBAIHZvaWQgZHJtX2F0b21pY19icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlLAo+ID4+Pj4+ICB2b2lkIGRybV9hdG9taWNfYnJpZGdlX2VuYWJsZShzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+Pj4+ICAJCQkgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUpOwo+ID4+Pj4+ICAKPiA+Pj4+PiArdm9pZCBkcm1fYnJpZGdlX2hwZF9lbmFi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+Pj4+PiArCQkJICAgdm9pZCAoKmNiKSh2 b2lkICpkYXRhLAo+ID4+Pj4+ICsJCQkJICAgICAgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBz dGF0dXMpLAo+ID4+Pj4+ICsJCQkgICB2b2lkICpkYXRhKTsKPiA+Pj4+PiArdm9pZCBkcm1fYnJp ZGdlX2hwZF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpOwo+ID4+Pj4+ICt2b2lk IGRybV9icmlkZ2VfaHBkX25vdGlmeShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+Pj4+ ICsJCQkgICBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyk7Cj4gPj4+Pj4gKwo+ID4+ Pj4+ICAjaWZkZWYgQ09ORklHX0RSTV9QQU5FTF9CUklER0UKPiA+Pj4+PiAgc3RydWN0IGRybV9i cmlkZ2UgKmRybV9wYW5lbF9icmlkZ2VfYWRkKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLAo+ID4+ Pj4+ICAJCQkJCXUzMiBjb25uZWN0b3JfdHlwZSk7CgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGlu Y2hhcnQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs