From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 25/60] drm: Add helper to create a connector for a chain of bridges Date: Tue, 20 Aug 2019 01:16:08 +0300 Message-ID: <20190819221608.GU5011@pendragon.ideasonboard.com> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-22-laurent.pinchart@ideasonboard.com> <20190718170103.GB15868@phenom.ffwll.local> <20190808194843.GB6055@pendragon.ideasonboard.com> <20190814150131.GG7444@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 6BF2B89E1A for ; Mon, 19 Aug 2019 22:16:16 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190814150131.GG7444@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 SGkgRGFuaWVsLAoKT24gV2VkLCBBdWcgMTQsIDIwMTkgYXQgMDU6MDE6MzFQTSArMDIwMCwgRGFu aWVsIFZldHRlciB3cm90ZToKPiBPbiBUaHUsIEF1ZyAwOCwgMjAxOSBhdCAxMDo0ODo0M1BNICsw MzAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gT24gVGh1LCBKdWwgMTgsIDIwMTkgYXQg MDc6MDE6MDNQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+PiBPbiBTdW4sIEp1bCAw NywgMjAxOSBhdCAwOToxOTowMlBNICswMzAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4+ PiBNb3N0IGJyaWRnZSBkcml2ZXJzIGNyZWF0ZSBhIERSTSBjb25uZWN0b3IgdG8gbW9kZWwgdGhl IGNvbm5lY3RvciBhdCB0aGUKPiA+Pj4gb3V0cHV0IG9mIHRoZSBicmlkZ2UuIFRoaXMgbW9kZWwg aXMgaGlzdG9yaWNhbCBhbmQgaGFzIHdvcmtlZCBwcmV0dHkKPiA+Pj4gd2VsbCBzbyBmYXIsIGJ1 dCBjYXVzZXMgc2V2ZXJhbCBpc3N1ZXM6Cj4gPj4+IAo+ID4+PiAtIEl0IHByZXZlbnRzIHN1cHBv cnRpbmcgbW9yZSBjb21wbGV4IGRpc3BsYXkgcGlwZWxpbmVzIHdoZXJlIERSTQo+ID4+PiBjb25u ZWN0b3Igb3BlcmF0aW9ucyBhcmUgc3BsaXQgb3ZlciBtdWx0aXBsZSBjb21wb25lbnRzLiBGb3Ig aW5zdGFuY2UgYQo+ID4+PiBwaXBlbGluZSB3aXRoIGEgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUg RERDIHNpZ25hbHMgdG8gcmVhZCBFRElEIGRhdGEsCj4gPj4+IGFuZCBhbm90aGVyIG9uZSBjb25u ZWN0ZWQgdG8gdGhlIEhQRCBzaWduYWwgdG8gZGV0ZWN0IGNvbm5lY3Rpb24gYW5kCj4gPj4+IGRp c2Nvbm5lY3Rpb24sIHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIHN1cHBvcnQgdGhyb3VnaCB0aGlz IG1vZGVsLgo+ID4+PiAKPiA+Pj4gLSBJdCByZXF1aXJlcyBldmVyeSBicmlkZ2UgZHJpdmVyIHRv IGltcGxlbWVudCBzaW1pbGFyIGNvbm5lY3Rvcgo+ID4+PiBoYW5kbGluZyBjb2RlLCByZXN1bHRp bmcgaW4gY29kZSBkdXBsaWNhdGlvbi4KPiA+Pj4gCj4gPj4+IC0gSXQgYXNzdW1lcyB0aGF0IGEg YnJpZGdlIHdpbGwgZWl0aGVyIGJlIHdpcmVkIHRvIGEgY29ubmVjdG9yIG9yIHRvCj4gPj4+IGFu b3RoZXIgYnJpZGdlLCBidXQgZG9lc24ndCBzdXBwb3J0IGJyaWRnZXMgdGhhdCBjYW4gYmUgdXNl ZCBpbiBib3RoCj4gPj4+IHBvc2l0aW9ucyB2ZXJ5IHdlbGwgKGFsdGhvdWdoIHRoZXJlIGlzIHNv bWUgYWQtaG9jIHN1cHBvcnQgZm9yIHRoaXMgaW4KPiA+Pj4gdGhlIGFuYWxvZ2l4X2RwIGJyaWRn ZSBkcml2ZXIpLgo+ID4+PiAKPiA+Pj4gSW4gb3JkZXIgdG8gc29sdmUgdGhlc2UgaXNzdWVzLCBv d25lcnNoaXAgb2YgdGhlIGNvbm5lY3RvciBuZWVkcyB0byBiZQo+ID4+PiBtb3ZlZCB0byB0aGUg ZGlzcGxheSBjb250cm9sbGVyIGRyaXZlci4KPiA+Pj4gCj4gPj4+IFRvIGF2b2lkIGNvZGUgZHVw bGljYXRpb24gaW4gZGlzcGxheSBjb250cm9sbGVyIGRyaXZlcnMsIGFkZCBhIG5ldwo+ID4+PiBo ZWxwZXIgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYSBEUk0gY29ubmVjdG9yIGJhY2tlZCBieSBhIGNo YWluIG9mCj4gPj4+IGJyaWRnZXMuIEFsbCBjb25uZWN0b3Igb3BlcmF0aW9ucyBhcmUgZGVsZWdh dGluZyB0byB0aGUgYXBwcm9wcmlhdGUKPiA+Pj4gYnJpZGdlIGluIHRoZSBjaGFpbi4KPiA+Pj4g Cj4gPj4+IFNpZ25lZC1vZmYtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRA aWRlYXNvbmJvYXJkLmNvbT4KPiA+Pj4gLS0tCj4gPj4+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUgICAgICAgICAgICAgICB8ICAgMyArLQo+ID4+PiAgZHJpdmVycy9ncHUvZHJtL2RybV9icmlk Z2VfY29ubmVjdG9yLmMgfCAzODUgKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4+PiAgaW5j bHVkZS9kcm0vZHJtX2JyaWRnZV9jb25uZWN0b3IuaCAgICAgfCAgMTggKysKPiA+Pj4gIDMgZmls ZXMgY2hhbmdlZCwgNDA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+Pj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZV9jb25uZWN0b3IuYwo+ID4+ PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmgK PiA+Pj4gCj4gPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+Pj4gaW5kZXggOWYwZDJlZTM1Nzk0Li4xYjc0NjUzYzlk YjkgMTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+Pj4gQEAgLTM3LDcgKzM3LDggQEAgZHJtX3Zy YW1faGVscGVyLXkgOj0gZHJtX2dlbV92cmFtX2hlbHBlci5vIFwKPiA+Pj4gIAkJICAgICBkcm1f dnJhbV9tbV9oZWxwZXIubwo+ID4+PiAgb2JqLSQoQ09ORklHX0RSTV9WUkFNX0hFTFBFUikgKz0g ZHJtX3ZyYW1faGVscGVyLm8KPiA+Pj4gIAo+ID4+PiAtZHJtX2ttc19oZWxwZXIteSA6PSBkcm1f Y3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVyLm8gZHJtX2RzYy5vIGRybV9wcm9iZV9oZWxwZXIu byBcCj4gPj4+ICtkcm1fa21zX2hlbHBlci15IDo9IGRybV9icmlkZ2VfY29ubmVjdG9yLm8gZHJt X2NydGNfaGVscGVyLm8gZHJtX2RwX2hlbHBlci5vIFwKPiA+Pj4gKwkJZHJtX2RzYy5vIGRybV9w cm9iZV9oZWxwZXIubyBcCj4gPj4+ICAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1fZHBfbXN0X3Rv cG9sb2d5Lm8gZHJtX2F0b21pY19oZWxwZXIubyBcCj4gPj4+ICAJCWRybV9rbXNfaGVscGVyX2Nv bW1vbi5vIGRybV9kcF9kdWFsX21vZGVfaGVscGVyLm8gXAo+ID4+PiAgCQlkcm1fc2ltcGxlX2tt c19oZWxwZXIubyBkcm1fbW9kZXNldF9oZWxwZXIubyBcCj4gPj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f YnJpZGdlX2Nvbm5lY3Rvci5jCj4gPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4+IGluZGV4 IDAwMDAwMDAwMDAwMC4uMDlmMmQ2YmZiNTYxCj4gPj4+IC0tLSAvZGV2L251bGwKPiA+Pj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmMKPiA+Pj4gQEAgLTAsMCAr MSwzODUgQEAKPiA+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+ID4+ PiArLyoKPiA+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBMYXVyZW50IFBpbmNoYXJ0IDxsYXVy ZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gPj4+ICsgKi8KPiA+Pj4gKwo+ID4+PiAr I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o Pgo+ID4+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+Pj4gKwo+ID4+PiArI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5oPgo+ID4+PiArI2luY2x1ZGUgPGRybS9kcm1f YnJpZGdlLmg+Cj4gPj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmg+Cj4g Pj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPiA+Pj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2RldmljZS5oPgo+ID4+PiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ID4+PiArI2lu Y2x1ZGUgPGRybS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oPgo+ID4+PiArI2luY2x1ZGUg PGRybS9kcm1fcHJvYmVfaGVscGVyLmg+Cj4gPj4+ICsKPiA+Pj4gKy8qKgo+ID4+PiArICogRE9D OiBvdmVydmlldwo+ID4+PiArICoKPiA+Pj4gKyAqIFRoZSBEUk0gYnJpZGdlIGNvbm5lY3RvciBo ZWxwZXIgb2JqZWN0IHByb3ZpZGVzIGEgRFJNIGNvbm5lY3Rvcgo+ID4+PiArICogaW1wbGVtZW50 YXRpb24gdGhhdCB3cmFwcyBhIGNoYWluIG9mICZzdHJ1Y3QgZHJtX2JyaWRnZS4gVGhlIGNvbm5l Y3Rvcgo+ID4+PiArICogb3BlcmF0aW9ucyBhcmUgZnVsbHkgaW1wbGVtZW50ZWQgYmFzZWQgb24g dGhlIG9wZXJhdGlvbnMgb2YgdGhlIGJyaWRnZXMgaW4KPiA+Pj4gKyAqIHRoZSBjaGFpbiwgYW5k IGRvbid0IHJlcXVpcmUgYW55IGludGVydmVudGlvbiBmcm9tIHRoZSBkaXNwbGF5IGNvbnRyb2xs ZXIKPiA+Pj4gKyAqIGRyaXZlciBhdCBydW50aW1lLgo+ID4+PiArICoKPiA+Pj4gKyAqIFRvIHVz ZSB0aGUgaGVscGVyLCBkaXNwbGF5IGNvbnRyb2xsZXIgZHJpdmVycyBjcmVhdGUgYSBicmlkZ2Ug Y29ubmVjdG9yIHdpdGgKPiA+Pj4gKyAqIGEgY2FsbCB0byBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9p bml0KCkuIFRoaXMgYXNzb2NpYXRlcyB0aGUgbmV3bHkgY3JlYXRlZAo+ID4+PiArICogY29ubmVj dG9yIHdpdGggdGhlIGNoYWluIG9mIGJyaWRnZXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBhbmQg cmVnaXN0ZXJzIGl0Cj4gPj4+ICsgKiB3aXRoIHRoZSBEUk0gZGV2aWNlLiBBdCB0aGF0IHBvaW50 IHRoZSBjb25uZWN0b3IgYmVjb21lcyBmdWxseSB1c2FibGUsIG5vCj4gPj4+ICsgKiBmdXJ0aGVy IG9wZXJhdGlvbiBpcyBuZWVkZWQuCj4gPj4+ICsgKgo+ID4+PiArICogVGhlIERSTSBicmlkZ2Ug Y29ubmVjdG9yIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGJhc2VkIG9uIHRoZSBvcGVyYXRp b25zCj4gPj4+ICsgKiBwcm92aWRlZCBieSB0aGUgYnJpZGdlcyBpbiB0aGUgY2hhaW4uIEVhY2gg Y29ubmVjdG9yIG9wZXJhdGlvbiBpcyBkZWxlZ2F0ZWQKPiA+Pj4gKyAqIHRvIHRoZSBicmlkZ2Ug Y2xvc2VzdCB0byB0aGUgY29ubmVjdG9yIChhdCB0aGUgZW5kIG9mIHRoZSBjaGFpbikgdGhhdAo+ ID4+PiArICogcHJvdmlkZXMgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkuCj4gPj4+ICsgKgo+ ID4+PiArICogVG8gbWFrZSB1c2Ugb2YgdGhpcyBoZWxwZXIsIGFsbCBicmlkZ2VzIGluIHRoZSBj aGFpbiBzaGFsbCByZXBvcnQgYnJpZGdlCj4gPj4+ICsgKiBvcGVyYXRpb24gZmxhZ3MgKCZkcm1f YnJpZGdlLT5vcHMpIGFuZCBicmlkZ2Ugb3V0cHV0IHR5cGUKPiA+Pj4gKyAqICgmZHJtX2JyaWRn ZS0+dHlwZSksIGFuZCBub25lIG9mIHRoZW0gbWF5IGNyZWF0ZSBhIERSTSBjb25uZWN0b3IgZGly ZWN0bHkuCj4gPj4+ICsgKi8KPiA+Pj4gKwo+ID4+PiArLyoqCj4gPj4+ICsgKiBzdHJ1Y3QgZHJt X2JyaWRnZV9jb25uZWN0b3IgLSBBIGNvbm5lY3RvciBiYWNrZWQgYnkgYSBjaGFpbiBvZiBicmlk Z2VzCj4gPj4+ICsgKi8KPiA+Pj4gK3N0cnVjdCBkcm1fYnJpZGdlX2Nvbm5lY3RvciB7Cj4gPj4+ ICsJLyoqCj4gPj4+ICsJICogQGJhc2U6IFRoZSBiYXNlIERSTSBjb25uZWN0b3IKPiA+Pj4gKwkg Ki8KPiA+Pj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBiYXNlOwo+ID4+PiArCS8qKgo+ID4+PiAr CSAqIEBicmlkZ2U6Cj4gPj4+ICsJICoKPiA+Pj4gKwkgKiBUaGUgZmlyc3QgYnJpZGdlIGluIHRo ZSBjaGFpbiAoY29ubmVjdGVkIHRvIHRoZSBvdXRwdXQgb2YgdGhlIENSVEMpLgo+ID4+PiArCSAq Lwo+ID4+PiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7Cj4gPj4+ICsJLyoqCj4gPj4+ICsJ ICogQGJyaWRnZV9lZGlkOgo+ID4+PiArCSAqCj4gPj4+ICsJICogVGhlIGxhc3QgYnJpZGdlIGlu IHRoZSBjaGFpbiAoY2xvc2VzdCB0byB0aGUgY29ubmVjdG9yKSB0aGF0IHByb3ZpZGVzCj4gPj4+ ICsJICogRURJRCByZWFkIHN1cHBvcnQsIGlmIGFueSAoc2VlICZEUk1fQlJJREdFX09QX0VESUQp Lgo+ID4+PiArCSAqLwo+ID4+PiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2VfZWRpZDsKPiA+ Pj4gKwkvKioKPiA+Pj4gKwkgKiBAYnJpZGdlX2hwZDoKPiA+Pj4gKwkgKgo+ID4+PiArCSAqIFRo ZSBsYXN0IGJyaWRnZSBpbiB0aGUgY2hhaW4gKGNsb3Nlc3QgdG8gdGhlIGNvbm5lY3RvcikgdGhh dCBwcm92aWRlcwo+ID4+PiArCSAqIGhvdC1wbHVnIGRldGVjdGlvbiBub3RpZmljYXRpb24sIGlm IGFueSAoc2VlICZEUk1fQlJJREdFX09QX0hQRCkuCj4gPj4+ICsJICovCj4gPj4+ICsJc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZV9ocGQ7Cj4gPj4+ICsJLyoqCj4gPj4+ICsJICogQGJyaWRnZV9k ZXRlY3Q6Cj4gPj4+ICsJICoKPiA+Pj4gKwkgKiBUaGUgbGFzdCBicmlkZ2UgaW4gdGhlIGNoYWlu IChjbG9zZXN0IHRvIHRoZSBjb25uZWN0b3IpIHRoYXQgcHJvdmlkZXMKPiA+Pj4gKwkgKiBjb25u ZWN0b3IgZGV0ZWN0aW9uLCBpZiBhbnkgKHNlZSAmRFJNX0JSSURHRV9PUF9ERVRFQ1QpLgo+ID4+ PiArCSAqLwo+ID4+PiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2VfZGV0ZWN0Owo+ID4+PiAr CS8qKgo+ID4+PiArCSAqIEBicmlkZ2VfZGV0ZWN0Ogo+ID4+PiArCSAqCj4gPj4+ICsJICogVGhl IGxhc3QgYnJpZGdlIGluIHRoZSBjaGFpbiAoY2xvc2VzdCB0byB0aGUgY29ubmVjdG9yKSB0aGF0 IHByb3ZpZGVzCj4gPj4+ICsJICogY29ubmVjdG9yIG1vZGVzIGRldGVjdGlvbiwgaWYgYW55IChz ZWUgJkRSTV9CUklER0VfT1BfTU9ERVMpLgo+ID4+PiArCSAqLwo+ID4+PiArCXN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2VfbW9kZXM7Cj4gPj4+ICsJLyoqCj4gPj4+ICsJICogQGhkbWlfbW9kZTog VmFsaWQgZm9yIEhETUkgY29ubmVjdG9ycyBvbmx5Lgo+ID4+PiArCSAqLwo+ID4+PiArCWJvb2wg aGRtaV9tb2RlOwo+ID4+IAo+ID4+IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGluIGRybV9kaXNw bGF5X2luZm8gc29tZXdoZXJlLCBub3QgaGVyZT8KPiA+IAo+ID4gWWVzLCBhbmQgaXQncyB1bnVz ZWQgaW4gdGhpcyBwYXRjaCwgSSd2ZSBqdXN0IG5vdGljZWQgdGhhdC4gRmllbGQKPiA+IGRyb3Bw ZWQuCj4gPiAKPiA+PiBXcnQgdGhlIG92ZXJhbGwgZGVzaWduIC4uLiB3aHkgZG8gd2UgbmVlZCBh IG5ldyBzdHJ1Y3Q/IElmIHdlIGFzc3VtZSAoYXQKPiA+PiBsZWFzdCBmb3Igbm93KSB0aGF0IHdl IG9ubHkgYWxsb3cgb25lIGVuY29kZXIgZm9yIHN1Y2ggYSBicmlkZ2UgY2hhaW4KPiA+PiAoY3Vy cmVudGx5IHN0aWxsIHRydWUpLCB0aGVuIHlvdSBjYW4gYWx3YXlzIGdvIGZyb20gdGhlIGNvbm5l Y3RvciB0byBpdCdzCj4gPj4gb25seSBwb3NzaWJlbCBlbmNvZGVyLiBBbmQgZnJvbSB0aGVyZSB0 byB0aGUgYnJpZGdlIGNoYWluLgo+ID4+IAo+ID4+IEZ1cnRoZXJtb3JlIGFsbCB0aGUgc3BlY2lh bCBicmlkZ2UgcG9pbnRlcnMgaGVyZSBjYW4ganVzdCBiZSBmb3VuZCBhdAo+ID4+IHJ1bnRpbWUg Ynkgd2Fsa2luZyB0aGUgYnJpZGdlIGxpbmtzLiBBbmQgbm9uZSBvZiB0aGVzZSBwYXRocyBhcmUg aG90Cj4gPj4gZW5vdWdoIHRvIG1ha2UgdGhpcyBhIHByb2JsZW0uCj4gPj4gCj4gPj4gV2l0aCB0 aGF0IHlvdXIgZHJtX2JyaWRnZV9jb25uZWN0b3IgaGVyZSB3b3VsZCBiZWNvbWUganVzdCBhIHBp bGUgb2YKPiA+PiBmdW5jdGlvbnMgYXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIGNvbm5l Y3RvcnMuIE1ha2luZyBpdCBtb3JlCj4gPj4gbW9kdWxhciBhbmQgbW9yZSBoZWxwZXIteSBhbmQg ZWFzaWVyIHRvIHRyYW5zaXRpb24gZ3JhZHVhbGx5Lgo+ID4gCj4gPiBUaGUgbWFpbiBwdXJwb3Nl IG9mIHRoaXMgc3RydWN0dXJlIGlzIGluZGVlZCB0byBjYWNoZSB0aGUgYnJpZGdlCj4gPiBwb2lu dGVycywgd2hpY2ggY291bGQgYmUgcmVjYWxjdWxhdGVkIGF0IHJ1bnRpbWUuIEkgYWdyZWUgdGhl cmUncyBubwo+ID4gcmVhbCBob3QgcGF0aCwgYnV0IGNhY2hpbmcgdGhlbSBzdGlsbCBmZWVscyBu aWNlIDotKQo+IAo+IFdlJ3ZlIHRyZWF0ZWQgYW55dGhpbmcgaW4gYXRvbWljIGFzIG5vdCBhIGhv dC1wYXRoLCBwcmVmZXJyaW5nIGNsZWFuIGNvZGUKPiBvdmVyIGZhc3QuIEV4Y2VwdCBpZiBzb21l b25lIGNhbiBwcm9vZiBvdGhlcndpc2UsIHdoaWNoIHZlcnkgZmV3IGV2ZXIKPiBib3RoZXIgdG8g ZXZlbiB0cnkgOi0pCgpCdXQgZG9lcyBpdCBodXJ0IHRvIGtlZXAgdGhpcyBzdHJ1Y3R1cmUgPyBJ dCdzIGludGVybmFsIHRvCmRybV9icmlkZ2VfY29ubmVjdG9yLmMsIG5vdCB2aXNpYmxlIGZyb20g dGhlIG91dHNpZGUuIEFzIHN1Y2ggaXQncyBhbgppbXBsZW1lbnRhdGlvbiBkZWNpc2lvbiwgYW5k IEkgdGhpbmsgaXQgbWFrZXMgdGhlIGNvZGUgZWFzaWVyIHRvIGZvbGxvdy4KV2hhdCdzIHlvdXIg bWFpbiBjb25jZXJuID8gTm90IG1lbW9yeSB1c2FnZSBJIGFzc3VtZSwgaXMgdGhlcmUgc29tZXRo aW5nCmVsc2UgdGhhdCBib3RoZXJzIHlvdSBpbiBwYXJ0aWN1bGFyID8gRnJvbSBhIGRyaXZlciBw b2ludCBvZiB2aWV3IG9ubHkKZHJtX2Nvbm5lY3RvciBpcyB2aXNpYmxlLgoKPiA+IEhvdyBkbyB5 b3UgZ28gZnJvbSB0aGUgY29ubmVjdG9yIHRvIGl0cyBlbmNvZGVyIHRob3VnaCA/IFRoZQo+ID4g ZHJtX2Nvbm5lY3RvciBlbmNvZGVyIGZpZWxkIGlzIHZhbGlkIGZvciBub24tYXRvbWljIGRyaXZl cnMgb25seSwgYW5kCj4gPiB0aGUgZW5jb2Rlcl9pZHMgZmllbGQgaXMgbWFya2VkIGFzIG5vdCB0 byBiZSBhY2Nlc3NlZCBkaXJlY3RseS4gU2hvdWxkIEkKPiA+IHVzZSBkcm1fY29ubmVjdG9yX2Zv cl9lYWNoX3Bvc3NpYmxlX2VuY29kZXIoKSBhbmQgcGljayB0aGUgZmlyc3QgZW5jb2Rlcgo+ID4g Pwo+IAo+IHBpY2tfc2luZ2xlX2VuY29kZXJfZm9yX2Nvbm5lY3Rvci4gV2FzIG9uY2UgZXhwb3J0 ZWQgZXZlbiAuLi4gSSB0aGluayBmb3IKPiBicmlkZ2Ugd2UgY2FuIGp1c3QgaGFyZC1jb2RlIHRo ZSBhc3N1bXB0aW9uIHRoYXQgdGhlcmUncyBvbmx5IG9uZQo+IGNvbm5lY3RvciBmb3IgYSBicmlk Z2UgY2hhaW4uCgpJIHN1cHBvc2UgSSBjYW4gcmVuYW1lIGl0IHRvCmRybV9hdG9taWNfaGVscGVy X3BpY2tfc2luZ2xlX2VuY29kZXJfZm9yX2Nvbm5lY3RvcigpIGFuZCBleHBvcnQgaXQuIEEKYml0 IG9mIGEgbG9uZyBuYW1lIHRob3VnaCA6LSkKCj4gRm9yIG1vcmUgZmFuY3kgdG9wb2xvZ2llcyB0 aGlzIG9mYyBhbGwgYnJlYWtzIGRvd24sIGJ1dCBtYXliZSB3ZSBjYW4KPiBwb3N0cG9uZSBzb2x2 aW5nIHRoYXQgcHJvYmxlbSAuLi4KClN1cmUsIG5vIGlzc3VlIHdpdGggdGhhdC4KCj4gPj4+ICt9 Owo+ID4+PiArCj4gPj4+ICsjZGVmaW5lIHRvX2RybV9icmlkZ2VfY29ubmVjdG9yKHgpIFwKPiA+ Pj4gKwljb250YWluZXJfb2YoeCwgc3RydWN0IGRybV9icmlkZ2VfY29ubmVjdG9yLCBiYXNlKQo+ ID4+PiArCj4gPj4+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4+PiArICogQnJpZGdlIENv bm5lY3RvciBIb3QtUGx1ZyBIYW5kbGluZwo+ID4+PiArICovCj4gPj4+ICsKPiA+Pj4gK3N0YXRp YyB2b2lkIGRybV9icmlkZ2VfY29ubmVjdG9yX2hwZF9ub3RpZnkoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKPiA+Pj4gKwkJCQkJICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMg c3RhdHVzKQo+ID4+PiArewo+ID4+PiArCXN0cnVjdCBkcm1fYnJpZGdlX2Nvbm5lY3RvciAqYnJp ZGdlX2Nvbm5lY3RvciA9Cj4gPj4+ICsJCXRvX2RybV9icmlkZ2VfY29ubmVjdG9yKGNvbm5lY3Rv cik7Cj4gPj4+ICsJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKPiA+Pj4gKwo+ID4+PiArCWlm IChzdGF0dXMgIT0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpCj4gPj4+ICsJCXJldHVy bjsKPiA+Pj4gKwo+ID4+PiArCS8qCj4gPj4+ICsJICogTm90aWZ5IGFsbCBicmlkZ2VzIGluIHRo ZSBwaXBlbGluZSBvZiBkaXNjb25uZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkCj4gPj4+ICsJICog dG8gbGV0IHRoZSBIRE1JIGVuY29kZXJzIHJlc2V0IHRoZWlyIGludGVybmFsIHN0YXRlIHJlbGF0 ZWQgdG8KPiA+Pj4gKwkgKiBjb25uZWN0aW9uIHN0YXR1cywgc3VjaCBhcyB0aGUgQ0VDIGFkZHJl c3MuCj4gPj4+ICsJICovCj4gPj4+ICsJZm9yIChicmlkZ2UgPSBicmlkZ2VfY29ubmVjdG9yLT5i cmlkZ2U7IGJyaWRnZTsgYnJpZGdlID0gYnJpZGdlLT5uZXh0KSB7Cj4gPj4+ICsJCWlmIChicmlk Z2UtPmZ1bmNzLT5sb3N0X2hvdHBsdWcpCj4gPj4+ICsJCQlicmlkZ2UtPmZ1bmNzLT5sb3N0X2hv dHBsdWcoYnJpZGdlKTsKPiA+PiAKPiA+PiBTbyBsb29raW5nIGF0IHRoaXMgeW91IHByZXR0eSBt dWNoIGltcGxlbWVudCBteSBpZGVhIGZvciBoZHAgaGFuZGxpbmcKPiA+PiBhbHJlYWR5LCBleGNl cHQgeW91J3JlIGNhbGxpbmcgaXQgLT5sb3N0X2hvdHBsdWcgYW5kIG5vdCAtPm5vdGlmeV9ocGQu Cj4gPiAKPiA+IFJlbmFtZWQgYWxyZWFkeSBpbiBteSBwcml2YXRlIHRyZWUsIHdpbGwgYmUgaW4g djIgOi0pCj4gPiAKPiA+PiBQbHVzIHlvdSByZXF1aXJlIHNvbWUgY2FsbGJhY2sgcmVnaXN0cmF0 aW9uLiBFc3NlbnRpYWxseSBteSBkZXNpZ24gKHRoYXQgSQo+ID4+IGV4cGxhaW5lZCBpbiBteSBy ZXBseSB0byB5b3VyIGJyaWRnZSBwYXRjaCkgd291bGQganVzdCBtYWtlCj4gPj4gZHJtX2JyaWRn ZV9jb25uZWN0b3JfaHBkX2NiKCkgdGhlIG9uZSBhbmQgb25seSBocGRfY2IsIGFuZCBwdW50IGFs bCBocGQKPiA+PiBoYW5kbGluZyB0byBicmlkZ2UgZHJpdmVycyBsaWtlIHlvdSBkbyBoZXJlLgo+ ID4+IAo+ID4+IE9mYyB0aGF0IGxlYXZlcyB1cyB3aXRoICJ3aG8ncyBjYWxsaW5nIGRybV9rbXNf aGVscGVyX2hvdHBsdWdfZXZlbnQoKSIsCj4gPj4gYW5kIHRoYXQncyB3aGF0IHRoZSBuZXcgaGRw X25vdGlmeSBvbiB0aGUgZW5jb2RlciBhbmQgdGhlIGdsb2JhbAo+ID4+IGRybV9tb2RlX2NvbmZp Z19oZWxwZXJfZnVuY3Mgd291bGQgYmUgZm9yLgo+ID4gCj4gPiBMZXQncyBkaXNjdXNzIHRoYXQg aW4gdGhlIHJlcGxpZXMgdG8gdGhlIG90aGVyIHBhdGNoLCBhcyB0aGUgZGlzY3Vzc2lvbgo+ID4g aXMgYWxyZWFkeSBsb25nZXIgdGhlcmUuIEknbSBub3Qgb3Bwb3NlZCB0byB5b3VyIHByb3Bvc2Fs LCBidXQgSSd2ZQo+ID4gYXNrZWQgYSBmZXcgcXVlc3Rpb25zIHRvIGNsYXJpZnkgaXQuCj4gPiAK PiA+Pj4gKwl9Cj4gPj4+ICt9Cj4gPj4+ICsKPiA+Pj4gK3N0YXRpYyB2b2lkIGRybV9icmlkZ2Vf Y29ubmVjdG9yX2hwZF9jYih2b2lkICpjYl9kYXRhLAo+ID4+PiArCQkJCQllbnVtIGRybV9jb25u ZWN0b3Jfc3RhdHVzIHN0YXR1cykKPiA+Pj4gK3sKPiA+Pj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZV9j b25uZWN0b3IgKmRybV9icmlkZ2VfY29ubmVjdG9yID0gY2JfZGF0YTsKPiA+Pj4gKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmRybV9icmlkZ2VfY29ubmVjdG9yLT5iYXNlOwo+ ID4+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiA+Pj4gKwll bnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIG9sZF9zdGF0dXM7Cj4gPj4+ICsKPiA+Pj4gKwltdXRl eF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKPiA+Pj4gKwlvbGRfc3RhdHVzID0gY29u bmVjdG9yLT5zdGF0dXM7Cj4gPj4+ICsJY29ubmVjdG9yLT5zdGF0dXMgPSBzdGF0dXM7Cj4gPj4+ ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKPiA+Pj4gKwo+ID4+PiAr CWlmIChvbGRfc3RhdHVzID09IHN0YXR1cykKPiA+Pj4gKwkJcmV0dXJuOwo+ID4+PiArCj4gPj4+ ICsJZHJtX2JyaWRnZV9jb25uZWN0b3JfaHBkX25vdGlmeShjb25uZWN0b3IsIHN0YXR1cyk7Cj4g Pj4+ICsKPiA+Pj4gKwlkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KGRldik7Cj4gPj4+ICt9 Cj4gPj4+ICsKPiA+Pj4gKy8qKgo+ID4+PiArICogZHJtX2JyaWRnZV9jb25uZWN0b3JfZW5hYmxl X2hwZCAtIEVuYWJsZSBob3QtcGx1ZyBkZXRlY3Rpb24gZm9yIHRoZSBjb25uZWN0b3IKPiA+Pj4g KyAqIEBjb25uZWN0b3I6IFRoZSBEUk0gYnJpZGdlIGNvbm5lY3Rvcgo+ID4+PiArICoKPiA+Pj4g KyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBob3QtcGx1ZyBkZXRlY3Rpb24gZm9yIHRoZSBnaXZl biBicmlkZ2UgY29ubmVjdG9yLgo+ID4+PiArICogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBieSBk aXNwbGF5IGRyaXZlcnMgaW4gdGhlaXIgcmVzdW1lIGhhbmRsZXIuCj4gPj4+ICsgKi8KPiA+Pj4g K3ZvaWQgZHJtX2JyaWRnZV9jb25uZWN0b3JfZW5hYmxlX2hwZChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQo+ID4+PiArewo+ID4+PiArCXN0cnVjdCBkcm1fYnJpZGdlX2Nvbm5lY3Rv ciAqYnJpZGdlX2Nvbm5lY3RvciA9Cj4gPj4+ICsJCXRvX2RybV9icmlkZ2VfY29ubmVjdG9yKGNv bm5lY3Rvcik7Cj4gPj4+ICsJc3RydWN0IGRybV9icmlkZ2UgKmhwZCA9IGJyaWRnZV9jb25uZWN0 b3ItPmJyaWRnZV9ocGQ7Cj4gPj4+ICsKPiA+Pj4gKwlpZiAoaHBkKQo+ID4+PiArCQlkcm1fYnJp ZGdlX2hwZF9lbmFibGUoaHBkLCBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9ocGRfY2IsCj4gPj4+ICsJ CQkJICAgICAgYnJpZGdlX2Nvbm5lY3Rvcik7Cj4gPj4+ICt9Cj4gPj4+ICtFWFBPUlRfU1lNQk9M X0dQTChkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9lbmFibGVfaHBkKTsKPiA+Pj4gKwo+ID4+PiArLyoq Cj4gPj4+ICsgKiBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9kaXNhYmxlX2hwZCAtIERpc2FibGUgaG90 LXBsdWcgZGV0ZWN0aW9uIGZvciB0aGUKPiA+Pj4gKyAqIGNvbm5lY3Rvcgo+ID4+PiArICogQGNv bm5lY3RvcjogVGhlIERSTSBicmlkZ2UgY29ubmVjdG9yCj4gPj4+ICsgKgo+ID4+PiArICogVGhp cyBmdW5jdGlvbiBkaXNhYmxlcyBob3QtcGx1ZyBkZXRlY3Rpb24gZm9yIHRoZSBnaXZlbiBicmlk Z2UgY29ubmVjdG9yLgo+ID4+PiArICogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBieSBkaXNwbGF5 IGRyaXZlcnMgaW4gdGhlaXIgc3VzcGVuZCBoYW5kbGVyLgo+ID4+PiArICovCj4gPj4+ICt2b2lk IGRybV9icmlkZ2VfY29ubmVjdG9yX2Rpc2FibGVfaHBkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCj4gPj4+ICt7Cj4gPj4+ICsJc3RydWN0IGRybV9icmlkZ2VfY29ubmVjdG9yICpi cmlkZ2VfY29ubmVjdG9yID0KPiA+Pj4gKwkJdG9fZHJtX2JyaWRnZV9jb25uZWN0b3IoY29ubmVj dG9yKTsKPiA+Pj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqaHBkID0gYnJpZGdlX2Nvbm5lY3Rvci0+ YnJpZGdlX2hwZDsKPiA+Pj4gKwo+ID4+PiArCWlmIChocGQpCj4gPj4+ICsJCWRybV9icmlkZ2Vf aHBkX2Rpc2FibGUoaHBkKTsKPiA+Pj4gK30KPiA+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9i cmlkZ2VfY29ubmVjdG9yX2Rpc2FibGVfaHBkKTsKPiA+Pj4gKwo+ID4+PiArLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPiA+Pj4gKyAqIEJyaWRnZSBDb25uZWN0b3IgRnVuY3Rpb25zCj4gPj4+ICsg Ki8KPiA+Pj4gKwo+ID4+PiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPiA+Pj4g K2RybV9icmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBib29sIGZvcmNlKQo+ID4+PiArewo+ID4+PiArCXN0cnVjdCBkcm1fYnJpZGdlX2Nvbm5l Y3RvciAqYnJpZGdlX2Nvbm5lY3RvciA9Cj4gPj4+ICsJCXRvX2RybV9icmlkZ2VfY29ubmVjdG9y KGNvbm5lY3Rvcik7Cj4gPj4+ICsJc3RydWN0IGRybV9icmlkZ2UgKmRldGVjdCA9IGJyaWRnZV9j b25uZWN0b3ItPmJyaWRnZV9kZXRlY3Q7Cj4gPj4+ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1 cyBzdGF0dXM7Cj4gPj4+ICsKPiA+Pj4gKwlpZiAoZGV0ZWN0KSB7Cj4gPj4+ICsJCXN0YXR1cyA9 IGRldGVjdC0+ZnVuY3MtPmRldGVjdChkZXRlY3QpOwo+ID4+PiArCj4gPj4+ICsJCWRybV9icmlk Z2VfY29ubmVjdG9yX2hwZF9ub3RpZnkoY29ubmVjdG9yLCBzdGF0dXMpOwo+ID4+PiArCX0gZWxz ZSB7Cj4gPj4+ICsJCXN3aXRjaCAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSkgewo+ID4+PiAr CQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EUEk6Cj4gPj4+ICsJCWNhc2UgRFJNX01PREVfQ09O TkVDVE9SX0xWRFM6Cj4gPj4+ICsJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RTSToKPiA+Pj4g KwkJCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+ID4+PiArCQkJYnJlYWs7 Cj4gPj4+ICsJCWRlZmF1bHQ6Cj4gPj4+ICsJCQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX3Vu a25vd247Cj4gPj4+ICsJCQlicmVhazsKPiA+Pj4gKwkJfQo+ID4+PiArCX0KPiA+Pj4gKwo+ID4+ PiArCXJldHVybiBzdGF0dXM7Cj4gPj4+ICt9Cj4gPj4+ICsKPiA+Pj4gK3N0YXRpYyB2b2lkIGRy bV9icmlkZ2VfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKPiA+Pj4gK3sKPiA+Pj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZV9jb25uZWN0b3IgKmJyaWRnZV9j b25uZWN0b3IgPQo+ID4+PiArCQl0b19kcm1fYnJpZGdlX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ ID4+PiArCj4gPj4+ICsJaWYgKGJyaWRnZV9jb25uZWN0b3ItPmJyaWRnZV9ocGQpIHsKPiA+Pj4g KwkJc3RydWN0IGRybV9icmlkZ2UgKmhwZCA9IGJyaWRnZV9jb25uZWN0b3ItPmJyaWRnZV9ocGQ7 Cj4gPj4+ICsKPiA+Pj4gKwkJZHJtX2JyaWRnZV9ocGRfZGlzYWJsZShocGQpOwo+ID4+PiArCX0K PiA+Pj4gKwo+ID4+PiArCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOwo+ID4+ PiArCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwo+ID4+PiArCj4gPj4+ICsJa2Zy ZWUoYnJpZGdlX2Nvbm5lY3Rvcik7Cj4gPj4+ICt9Cj4gPj4+ICsKPiA+Pj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcyA9 IHsKPiA+Pj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCj4g Pj4+ICsJLmRldGVjdCA9IGRybV9icmlkZ2VfY29ubmVjdG9yX2RldGVjdCwKPiA+PiAKPiA+PiBG b3IgdGhhdCBzbW9vaHQgaGVscGVyIGxpYnJhcnkgZmVlbGluZyBJIHRoaW5rIHdlIHNob3VsZCBl eHBvcnQgX2RldGVjdAo+ID4+IGFuZCBnZXRfbW9kZXMgYXQgbGVhc3QuCj4gPiAKPiA+IEFscmVh ZHksIGV2ZW4gd2l0aG91dCBhIHVzZXIgPyBPciBzaG91bGQgd2Ugd2FpdCB1bnRpbCBzb21lb25l IG5lZWRzCj4gPiB0aGVtID8KPiAKPiBJIGZpZ3VyZWQgbW9zdGx5IHRvIGhhdmUgYW4gZXhjdXNl IGZvciB0aGUga2VybmVsZG9jIC4uLgo+IAo+ID4+PiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBl cl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAo+ID4+PiArCS5kZXN0cm95ID0gZHJtX2Jy aWRnZV9jb25uZWN0b3JfZGVzdHJveSwKPiA+Pj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4gPj4+ICsJLmF0 b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lf c3RhdGUsCj4gPj4+ICt9Owo+ID4+PiArCj4gPj4+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ ID4+PiArICogQnJpZGdlIENvbm5lY3RvciBIZWxwZXIgRnVuY3Rpb25zCj4gPj4+ICsgKi8KPiA+ Pj4gKwo+ID4+PiArI2RlZmluZSBNQVhfRURJRCAgNTEyCj4gPj4+ICsKPiA+Pj4gK3N0YXRpYyBp bnQgZHJtX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzX2VkaWQoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKPiA+Pj4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpCj4gPj4+ICt7Cj4gPj4+ICsJc3RydWN0IGRybV9icmlkZ2VfY29ubmVjdG9yICpicmlkZ2Vf Y29ubmVjdG9yID0KPiA+Pj4gKwkJdG9fZHJtX2JyaWRnZV9jb25uZWN0b3IoY29ubmVjdG9yKTsK PiA+Pj4gKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1czsKPiA+Pj4gKwlzdHJ1Y3Qg ZWRpZCAqZWRpZDsKPiA+Pj4gKwlpbnQgbjsKPiA+Pj4gKwo+ID4+PiArCXN0YXR1cyA9IGRybV9i cmlkZ2VfY29ubmVjdG9yX2RldGVjdChjb25uZWN0b3IsIGZhbHNlKTsKPiA+Pj4gKwlpZiAoc3Rh dHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQo+ID4+PiArCQlnb3RvIG5vX2VkaWQ7 Cj4gPj4+ICsKPiA+Pj4gKwllZGlkID0gYnJpZGdlLT5mdW5jcy0+Z2V0X2VkaWQoYnJpZGdlLCBj b25uZWN0b3IpOwo+ID4+PiArCWlmICghZWRpZCB8fCAhZHJtX2VkaWRfaXNfdmFsaWQoZWRpZCkp IHsKPiA+Pj4gKwkJa2ZyZWUoZWRpZCk7Cj4gPj4+ICsJCWdvdG8gbm9fZWRpZDsKPiA+Pj4gKwl9 Cj4gPj4+ICsKPiA+Pj4gKwlkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5l Y3RvciwgZWRpZCk7Cj4gPj4+ICsJbiA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVk aWQpOwo+ID4+PiArCj4gPj4+ICsJYnJpZGdlX2Nvbm5lY3Rvci0+aGRtaV9tb2RlID0gZHJtX2Rl dGVjdF9oZG1pX21vbml0b3IoZWRpZCk7Cj4gPj4+ICsKPiA+Pj4gKwlrZnJlZShlZGlkKTsKPiA+ Pj4gKwlyZXR1cm4gbjsKPiA+Pj4gKwo+ID4+PiArbm9fZWRpZDoKPiA+Pj4gKwlkcm1fY29ubmVj dG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgTlVMTCk7Cj4gPj4+ICsJcmV0dXJu IDA7Cj4gPj4+ICt9Cj4gPj4+ICsKPiA+Pj4gK3N0YXRpYyBpbnQgZHJtX2JyaWRnZV9jb25uZWN0 b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPj4+ICt7Cj4g Pj4+ICsJc3RydWN0IGRybV9icmlkZ2VfY29ubmVjdG9yICpicmlkZ2VfY29ubmVjdG9yID0KPiA+ Pj4gKwkJdG9fZHJtX2JyaWRnZV9jb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+Pj4gKwlzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlOwo+ID4+PiArCj4gPj4+ICsJLyoKPiA+Pj4gKwkgKiBJZiBkaXNw bGF5IGV4cG9zZXMgRURJRCwgdGhlbiB3ZSBwYXJzZSB0aGF0IGluIHRoZSBub3JtYWwgd2F5IHRv Cj4gPj4+ICsJICogYnVpbGQgdGFibGUgb2Ygc3VwcG9ydGVkIG1vZGVzLgo+ID4+PiArCSAqLwo+ ID4+PiArCWJyaWRnZSA9IGJyaWRnZV9jb25uZWN0b3ItPmJyaWRnZV9lZGlkOwo+ID4+PiArCWlm IChicmlkZ2UpCj4gPj4+ICsJCXJldHVybiBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXNf ZWRpZChjb25uZWN0b3IsIGJyaWRnZSk7Cj4gPj4+ICsKPiA+Pj4gKwkvKgo+ID4+PiArCSAqIE90 aGVyd2lzZSBpZiB0aGUgZGlzcGxheSBwaXBlbGluZSByZXBvcnRzIG1vZGVzIChlLmcuIHdpdGgg YSBmaXhlZAo+ID4+PiArCSAqIHJlc29sdXRpb24gcGFuZWwgb3IgYW4gYW5hbG9nIFRWIG91dHB1 dCksIHF1ZXJ5IGl0Lgo+ID4+PiArCSAqLwo+ID4+PiArCWJyaWRnZSA9IGJyaWRnZV9jb25uZWN0 b3ItPmJyaWRnZV9tb2RlczsKPiA+Pj4gKwlpZiAoYnJpZGdlKQo+ID4+PiArCQlyZXR1cm4gYnJp ZGdlLT5mdW5jcy0+Z2V0X21vZGVzKGJyaWRnZSwgY29ubmVjdG9yKTsKPiA+Pj4gKwo+ID4+PiAr CS8qCj4gPj4+ICsJICogV2UgY2FuJ3QgcmV0cmlldmUgbW9kZXMsIHdoaWNoIGNhbiBoYXBwZW4g Zm9yIGluc3RhbmNlIGZvciBhIERWSSBvcgo+ID4+PiArCSAqIFZHQSBvdXRwdXQgd2l0aCB0aGUg RERDIGJ1cyB1bmNvbm5lY3RlZC4gVGhlIEtNUyBjb3JlIHdpbGwgYWRkIHRoZQo+ID4+PiArCSAq IGRlZmF1bHQgbW9kZXMuCj4gPj4+ICsJICovCj4gPj4+ICsJcmV0dXJuIDA7Cj4gPj4+ICt9Cj4g Pj4+ICsKPiA+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVu Y3MgZHJtX2JyaWRnZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+ID4+PiArCS5nZXRfbW9k ZXMgPSBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCj4gPj4+ICsJLyogTm8gbmVlZCBm b3IgLm1vZGVfdmFsaWQoKSwgdGhlIGJyaWRnZXMgYXJlIGNoZWNrZWQgYnkgdGhlIGNvcmUuICov Cj4gPj4+ICt9Owo+ID4+PiArCj4gPj4+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4+PiAr ICogQnJpZGdlIENvbm5lY3RvciBJbml0aWFsaXNhdGlvbgo+ID4+PiArICovCj4gPj4+ICsKPiA+ Pj4gKy8qKgo+ID4+PiArICogZHJtX2JyaWRnZV9jb25uZWN0b3JfaW5pdCAtIEluaXRpYWxpc2Ug YSBjb25uZWN0b3IgZm9yIGEgY2hhaW4gb2YgYnJpZGdlcwo+ID4+PiArICogQGRybTogdGhlIERS TSBkZXZpY2UKPiA+Pj4gKyAqIEBicmlkZ2U6IHRoZSBicmlkZ2UgY2xvc2VzdCB0byB0aGUgQ1JU QyBvdXRwdXQKPiA+Pj4gKyAqCj4gPj4+ICsgKiBBbGxvY2F0ZSwgaW5pdGlhbGlzZSBhbmQgcmVn aXN0ZXIgYSAmZHJtX2JyaWRnZV9jb25uZWN0b3Igd2l0aCB0aGUgQGRybQo+ID4+PiArICogZGV2 aWNlLiBUaGUgY29ubmVjdG9yIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGNoYWluIG9mIGJyaWRnZXMg dGhhdCBzdGFydHMgYXQKPiA+Pj4gKyAqIHRoZSBDUlRDIG91dHB1dCB3aXRoIEBicmlkZ2UuIEFs bCBicmlkZ2VzIGluIHRoZSBjaGFpbiBzaGFsbCByZXBvcnQgYnJpZGdlCj4gPj4+ICsgKiBvcGVy YXRpb24gZmxhZ3MgKCZkcm1fYnJpZGdlLT5vcHMpIGFuZCBicmlkZ2Ugb3V0cHV0IHR5cGUKPiA+ Pj4gKyAqICgmZHJtX2JyaWRnZS0+dHlwZSksIGFuZCBub25lIG9mIHRoZW0gbWF5IGNyZWF0ZSBh IERSTSBjb25uZWN0b3IgZGlyZWN0bHkuCj4gPj4+ICsgKgo+ID4+PiArICogUmV0dXJucyBhIHBv aW50ZXIgdG8gdGhlIG5ldyBjb25uZWN0b3Igb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJv cgo+ID4+PiArICogcG9pbnRlciBvdGhlcndpc2UuCj4gPj4+ICsgKi8KPiA+Pj4gK3N0cnVjdCBk cm1fY29ubmVjdG9yICpkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sCj4gPj4+ICsJCQkJCQlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4+PiArewo+ ID4+PiArCXN0cnVjdCBkcm1fYnJpZGdlX2Nvbm5lY3RvciAqYnJpZGdlX2Nvbm5lY3RvcjsKPiA+ Pj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4+PiArCWludCBjb25uZWN0 b3JfdHlwZTsKPiA+Pj4gKwo+ID4+PiArCWJyaWRnZV9jb25uZWN0b3IgPSBremFsbG9jKHNpemVv ZigqYnJpZGdlX2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwo+ID4+PiArCWlmICghYnJpZGdlX2Nv bm5lY3RvcikKPiA+Pj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPj4+ICsKPiA+Pj4g KwlicmlkZ2VfY29ubmVjdG9yLT5icmlkZ2UgPSBicmlkZ2U7Cj4gPj4+ICsKPiA+Pj4gKwkvKgo+ ID4+PiArCSAqIEluaXRpYWxpc2UgY29ubmVjdG9yIHN0YXR1cyBoYW5kbGluZy4gRmlyc3QgbG9j YXRlIHRoZSBmdXJ0aGVzdAo+ID4+PiArCSAqIGJyaWRnZXMgaW4gdGhlIHBpcGVsaW5lIHRoYXQg c3VwcG9ydCBIUEQgYW5kIG91dHB1dCBkZXRlY3Rpb24uIFRoZW4KPiA+Pj4gKwkgKiBpbml0aWFs aXNlIHRoZSBjb25uZWN0b3IgcG9sbGluZyBtb2RlLCB1c2luZyBIUEQgaWYgYXZhaWxhYmxlIGFu ZAo+ID4+PiArCSAqIGZhbGxpbmcgYmFjayB0byBwb2xsaW5nIGlmIHN1cHBvcnRlZC4gSWYgbmVp dGhlciBIUEQgbm9yIG91dHB1dAo+ID4+PiArCSAqIGRldGVjdGlvbiBhcmUgYXZhaWxhYmxlLCB3 ZSBkb24ndCBzdXBwb3J0IGhvdHBsdWcgZGV0ZWN0aW9uIGF0IGFsbC4KPiA+Pj4gKwkgKi8KPiA+ Pj4gKwljb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duOwo+ID4+PiAr CWZvciAoIDsgYnJpZGdlOyBicmlkZ2UgPSBicmlkZ2UtPm5leHQpIHsKPiA+Pj4gKwkJaWYgKGJy aWRnZS0+b3BzICYgRFJNX0JSSURHRV9PUF9FRElEKQo+ID4+PiArCQkJYnJpZGdlX2Nvbm5lY3Rv ci0+YnJpZGdlX2VkaWQgPSBicmlkZ2U7Cj4gPj4+ICsJCWlmIChicmlkZ2UtPm9wcyAmIERSTV9C UklER0VfT1BfSFBEKQo+ID4+PiArCQkJYnJpZGdlX2Nvbm5lY3Rvci0+YnJpZGdlX2hwZCA9IGJy aWRnZTsKPiA+Pj4gKwkJaWYgKGJyaWRnZS0+b3BzICYgRFJNX0JSSURHRV9PUF9ERVRFQ1QpCj4g Pj4+ICsJCQlicmlkZ2VfY29ubmVjdG9yLT5icmlkZ2VfZGV0ZWN0ID0gYnJpZGdlOwo+ID4+PiAr CQlpZiAoYnJpZGdlLT5vcHMgJiBEUk1fQlJJREdFX09QX01PREVTKQo+ID4+PiArCQkJYnJpZGdl X2Nvbm5lY3Rvci0+YnJpZGdlX21vZGVzID0gYnJpZGdlOwo+ID4+PiArCj4gPj4+ICsJCWlmICgh YnJpZGdlLT5uZXh0KQo+ID4+PiArCQkJY29ubmVjdG9yX3R5cGUgPSBicmlkZ2UtPnR5cGU7Cj4g Pj4+ICsJfQo+ID4+PiArCj4gPj4+ICsJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NP Tk5FQ1RPUl9Vbmtub3duKSB7Cj4gPj4+ICsJCWtmcmVlKGJyaWRnZV9jb25uZWN0b3IpOwo+ID4+ PiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+Pj4gKwl9Cj4gPj4+ICsKPiA+Pj4gKwkv Kgo+ID4+PiArCSAqIFRPRE86IEhhbmRsZSBpbnRlcmxhY2VfYWxsb3dlZCwgZG91Ymxlc2Nhbl9h bGxvd2VkLCBzdGVyZW9fYWxsb3dlZAo+ID4+PiArCSAqIGFuZCB5Y2Jjcl80MjBfYWxsb3dlZC4K PiA+Pj4gKwkgKi8KPiA+Pj4gKwljb25uZWN0b3IgPSAmYnJpZGdlX2Nvbm5lY3Rvci0+YmFzZTsK PiA+Pj4gKwlkcm1fY29ubmVjdG9yX2luaXQoZHJtLCBjb25uZWN0b3IsICZkcm1fYnJpZGdlX2Nv bm5lY3Rvcl9mdW5jcywKPiA+Pj4gKwkJCSAgIGNvbm5lY3Rvcl90eXBlKTsKPiA+Pj4gKwlkcm1f Y29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmZHJtX2JyaWRnZV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzKTsKPiA+Pj4gKwo+ID4+PiArCWlmIChicmlkZ2VfY29ubmVjdG9yLT5icmlkZ2Vf aHBkKQo+ID4+PiArCQljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7 Cj4gPj4+ICsJZWxzZSBpZiAoYnJpZGdlX2Nvbm5lY3Rvci0+YnJpZGdlX2RldGVjdCkKPiA+Pj4g KwkJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVAo+ID4+PiAr CQkJCSAgfCBEUk1fQ09OTkVDVE9SX1BPTExfRElTQ09OTkVDVDsKPiA+Pj4gKwo+ID4+PiArCXJl dHVybiBjb25uZWN0b3I7Cj4gPj4+ICt9Cj4gPj4+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fYnJp ZGdlX2Nvbm5lY3Rvcl9pbml0KTsKPiA+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9i cmlkZ2VfY29ubmVjdG9yLmggYi9pbmNsdWRlL2RybS9kcm1fYnJpZGdlX2Nvbm5lY3Rvci5oCj4g Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uZWMzM2I0 NDk1NGI4Cj4gPj4+IC0tLSAvZGV2L251bGwKPiA+Pj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Jy aWRnZV9jb25uZWN0b3IuaAo+ID4+PiBAQCAtMCwwICsxLDE4IEBACj4gPj4+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8KPiA+Pj4gKy8qCj4gPj4+ICsgKiBDb3B5cmln aHQgKEMpIDIwMTkgTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9h cmQuY29tPgo+ID4+PiArICovCj4gPj4+ICsKPiA+Pj4gKyNpZm5kZWYgX19EUk1fQlJJREdFX0NP Tk5FQ1RPUl9IX18KPiA+Pj4gKyNkZWZpbmUgX19EUk1fQlJJREdFX0NPTk5FQ1RPUl9IX18KPiA+ Pj4gKwo+ID4+PiArc3RydWN0IGRybV9icmlkZ2U7Cj4gPj4+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cjsKPiA+Pj4gK3N0cnVjdCBkcm1fZGV2aWNlOwo+ID4+PiArCj4gPj4+ICt2b2lkIGRybV9icmlk Z2VfY29ubmVjdG9yX2VuYWJsZV9ocGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7 Cj4gPj4+ICt2b2lkIGRybV9icmlkZ2VfY29ubmVjdG9yX2Rpc2FibGVfaHBkKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpOwo+ID4+PiArc3RydWN0IGRybV9jb25uZWN0b3IgKmRybV9i cmlkZ2VfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiA+Pj4gKwkJCQkJ CXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpOwo+ID4+PiArCj4gPj4+ICsjZW5kaWYgLyogX19E Uk1fQlJJREdFX0NPTk5FQ1RPUl9IX18gKi8KCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFy dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=