From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH v2 3/5] drm/i915: Move SST DP link retraining into the ->post_hotplug() hook Date: Wed, 28 Feb 2018 11:27:31 -0800 Message-ID: <20180228192730.GA11481@intel.com> References: <20180117192149.17760-1-ville.syrjala@linux.intel.com> <20180117192149.17760-3-ville.syrjala@linux.intel.com> <1517354219.4938.24.camel@redhat.com> <20180131132710.GK5453@intel.com> <20180228071731.GB2386@intel.com> <1519844854.26611.4.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3A2896EB30 for ; Wed, 28 Feb 2018 19:24:34 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1519844854.26611.4.camel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Paul Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBGZWIgMjgsIDIwMTggYXQgMDI6MDc6MzRQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiAKPiBPbiBUdWUsIDIwMTgtMDItMjcgYXQgMjM6MTcgLTA4MDAsIE1hbmFzaSBOYXZhcmUg d3JvdGU6Cj4gPiBWaWxsZSwgIHRoYW5rcyBmb3IgdGhlIHBhdGNoIGFuZAo+ID4gU29ycnkgZm9y IG5vdCBiZWluZyBhYmxlIHRvIHJldmlldyB0aGlzIGVhcmxpZXIuCj4gPiBQbGVhc2UgZmluZCBz b21lIGNvbW1lbnRzIGJlbG93Ogo+ID4gCj4gPiBPbiBXZWQsIEphbiAzMSwgMjAxOCBhdCAwMzoy NzoxMFBNICswMjAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gPiA+IE9uIFR1ZSwgSmFuIDMw LCAyMDE4IGF0IDA2OjE2OjU5UE0gLTA1MDAsIEx5dWRlIFBhdWwgd3JvdGU6Cj4gPiA+ID4gT24g V2VkLCAyMDE4LTAxLTE3IGF0IDIxOjIxICswMjAwLCBWaWxsZSBTeXJqYWxhIHdyb3RlOgo+ID4g PiA+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNv bT4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gRG9pbmcgbGluayByZXRyYWluaW5nIGZyb20gdGhlIHNo b3J0IHB1bHNlIGhhbmRsZXIgaXMgcHJvYmxlbWF0aWMKPiA+ID4gPiA+IHNpbmNlCj4gPiA+ID4g PiB0aGF0IG1pZ2h0IGludHJvZHVjZSBkZWFkbG9ja3Mgd2l0aCBNU1Qgc2lkZWJhbmQgcHJvY2Vz c2luZy4gQ3VycmVudGx5Cj4gPiA+ID4gPiB3ZSBkb24ndCByZXRyYWluIE1TVCBsaW5rcyBmcm9t IHRoaXMgY29kZSwgYnV0IHdlIHdhbnQgdG8gY2hhbmdlIHRoYXQuCj4gPiA+ID4gPiBTbyBiZXR0 ZXIgdG8gbW92ZSB0aGUgZW50aXJlIHRoaW5nIHRvIHRoZSBob3RwbHVnIHdvcmsuIFdlIGNhbiB1 dGlsaXplCj4gPiA+ID4gPiB0aGUgbmV3IGVuY29kZXItPmhvdHBsdWcoKSBob29rIGZvciB0aGlz Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBUaGUgb25seSB0aGluZyB3ZSBsZWF2ZSBpbiB0aGUgc2hv cnQgcHVsc2UgaGFuZGxlciBpcyB0aGUgbGluayBzdGF0dXMKPiA+ID4gPiA+IGNoZWNrLiBUaGF0 IG9uZSBzdGlsbCBkZXBlbmRzIG9uIHRoZSBsaW5rIHBhcmFtZXRlcnMgc3RvcmVkIHVuZGVyCj4g PiA+ID4gPiBpbnRlbF9kcCwgc28gbm8gbG9ja2luZyBhcm91bmQgdGhhdCBidXQgcmFjZXMgc2hv dWxkIGJlIG1vc3RseQo+ID4gPiA+ID4gaGFybWxlc3MKPiA+ID4gPiA+IGFzIHRoZSBhY3R1YWwg cmV0cmFpbmluZyBjb2RlIHdpbGwgcmVjaGVjayB0aGUgbGluayBzdGF0ZSBpZiB3ZQo+ID4gPiA+ ID4gZW5kIHVwIHRoZXJlIGJ5IG1pc3Rha2UuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IHYyOiBSZWJh c2UgZHVlIHRvIC0+cG9zdF9ob3RwbHVnKCkgbm93IGJlaW5nIGp1c3QgLT5ob3RwbHVnKCkKPiA+ ID4gPiA+ICAgICBDaGVjayB0aGUgY29ubmVjdG9yIHR5cGUgdG8gZmlndXJlIG91dCBpZiB3ZSBz aG91bGQgZG8KPiA+ID4gPiA+ICAgICB0aGUgSERNSSB0aGluZyBvciB0aGUgRFAgdGhpbmsgZm9y IERESQo+ID4gPiA+ID4gCj4gPiA+ID4gPiBDYzogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2 YXJlQGludGVsLmNvbT4KPiA+ID4gPiA+IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5s YW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogVmlsbGUg U3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ID4gPiA+IC0tLQo+ ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jIHwgIDEwICstCj4gPiA+ ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyAgfCAxOTYgKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLQo+ID4gPiA+ID4gLS0tLS0tLS0KPiA+ID4gPiA+IC0tLQo+ID4gPiA+ ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIHwgICAyICsKPiA+ID4gPiA+ICAz IGZpbGVzIGNoYW5nZWQsIDEyMCBpbnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMoLSkKPiA+ID4g PiA+IAo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rk aS5jCj4gPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gPiA+ID4g PiBpbmRleCAyNTc5M2JkYzY5MmYuLjVmM2Q1OGYxYWU2ZSAxMDA2NDQKPiA+ID4gPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gPiA+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gPiA+ID4gQEAgLTI4ODAsNyArMjg4MCwxMCBA QCBzdGF0aWMgYm9vbCBpbnRlbF9kZGlfaG90cGx1ZyhzdHJ1Y3QKPiA+ID4gPiA+IGludGVsX2Vu Y29kZXIKPiA+ID4gPiA+ICplbmNvZGVyLAo+ID4gPiA+ID4gIAlkcm1fbW9kZXNldF9hY3F1aXJl X2luaXQoJmN0eCwgMCk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCWZvciAoOzspIHsKPiA+ID4g PiA+IC0JCXJldCA9IGludGVsX2hkbWlfcmVzZXRfbGluayhlbmNvZGVyLCAmY3R4KTsKPiA+ID4g PiA+ICsJCWlmIChjb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUgPT0KPiA+ID4gPiA+IERS TV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSkKPiA+ID4gPiA+ICsJCQlyZXQgPSBpbnRlbF9oZG1pX3Jl c2V0X2xpbmsoZW5jb2RlciwgJmN0eCk7Cj4gPiA+ID4gPiArCQllbHNlCj4gPiA+ID4gPiArCQkJ cmV0ID0gaW50ZWxfZHBfcmV0cmFpbl9saW5rKGVuY29kZXIsICZjdHgpOwo+ID4gPiA+ID4gIAo+ ID4gPiA+ID4gIAkJaWYgKHJldCA9PSAtRURFQURMSykgewo+ID4gPiA+ID4gIAkJCWRybV9tb2Rl c2V0X2JhY2tvZmYoJmN0eCk7Cj4gPiA+ID4gPiBAQCAtMzAwNywxMCArMzAxMCw3IEBAIHZvaWQg aW50ZWxfZGRpX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gPiA+ICpkZXZfcHJp diwKPiA+ID4gPiA+IGVudW0gcG9ydCBwb3J0KQo+ID4gPiA+ID4gIAlkcm1fZW5jb2Rlcl9pbml0 KCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyLCAmaW50ZWxfZGRpX2Z1bmNzLAo+ID4gPiA+ID4gIAkJ CSBEUk1fTU9ERV9FTkNPREVSX1RNRFMsICJEREkgJWMiLAo+ID4gPiA+ID4gcG9ydF9uYW1lKHBv cnQpKTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JaWYgKGluaXRfaGRtaSkKPiA+ID4gPiA+IC0J CWludGVsX2VuY29kZXItPmhvdHBsdWcgPSBpbnRlbF9kZGlfaG90cGx1ZzsKPiA+ID4gPiA+IC0J ZWxzZQo+ID4gPiA+ID4gLQkJaW50ZWxfZW5jb2Rlci0+aG90cGx1ZyA9IGludGVsX2VuY29kZXJf aG90cGx1ZzsKPiA+ID4gPiA+ICsJaW50ZWxfZW5jb2Rlci0+aG90cGx1ZyA9IGludGVsX2RkaV9o b3RwbHVnOwo+ID4gPiA+ID4gIAlpbnRlbF9lbmNvZGVyLT5jb21wdXRlX291dHB1dF90eXBlID0K PiA+ID4gPiA+IGludGVsX2RkaV9jb21wdXRlX291dHB1dF90eXBlOwo+ID4gPiA+ID4gIAlpbnRl bF9lbmNvZGVyLT5jb21wdXRlX2NvbmZpZyA9IGludGVsX2RkaV9jb21wdXRlX2NvbmZpZzsKPiA+ ID4gPiA+ICAJaW50ZWxfZW5jb2Rlci0+ZW5hYmxlID0gaW50ZWxfZW5hYmxlX2RkaTsKPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPiA+ID4g PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+ID4gPiA+IGluZGV4IDZiYmYx NDQxMGMyYS4uMTUyMDE2ZTA5YTExIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHAuYwo+ID4gPiA+ID4gQEAgLTQyNzUsMTIgKzQyNzUsODMgQEAgaW50ZWxfZHBfY2hl Y2tfbXN0X3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAKPiA+ID4gPiA+ICppbnRlbF9kcCkKPiA+ID4g PiA+ICAJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4g LXN0YXRpYyB2b2lkCj4gPiA+ID4gPiAtaW50ZWxfZHBfcmV0cmFpbl9saW5rKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gPiA+ID4gPiArc3RhdGljIGJvb2wKPiA+ID4gPiA+ICtpbnRlbF9k cF9uZWVkc19saW5rX3JldHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiA+ID4gPiA+ ICt7Cj4gPiA+ID4gPiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoIWludGVsX2RwX2dldF9saW5rX3N0YXR1cyhpbnRlbF9k cCwgbGlua19zdGF0dXMpKSB7Cj4gPiA+ID4gPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQg bGluayBzdGF0dXNcbiIpOwo+ID4gPiA+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gPiA+ID4gKwl9 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAqIFZhbGlkYXRlIHRoZSBj YWNoZWQgdmFsdWVzIG9mIGludGVsX2RwLT5saW5rX3JhdGUgYW5kCj4gPiA+ID4gPiArCSAqIGlu dGVsX2RwLT5sYW5lX2NvdW50IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJldHJhaW4uCj4gPiA+ID4g PiArCSAqLwo+ID4gPiA+ID4gKwlpZiAoIWludGVsX2RwX2xpbmtfcGFyYW1zX3ZhbGlkKGludGVs X2RwLCBpbnRlbF9kcC0KPiA+ID4gPiA+ID5saW5rX3JhdGUsCj4gPiA+ID4gPiArCQkJCQlpbnRl bF9kcC0+bGFuZV9jb3VudCkpCj4gPiA+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArCS8qIFJldHJhaW4gaWYgQ2hhbm5lbCBFUSBvciBDUiBub3Qgb2sgKi8KPiA+ ID4gPiA+ICsJcmV0dXJuICFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaW50ZWxf ZHAtCj4gPiA+ID4gPiA+bGFuZV9jb3VudCk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKy8qCj4gPiA+ID4gPiArICogSWYgZGlzcGxheSBpcyBub3cgY29ubmVjdGVkIGNoZWNr IGxpbmtzIHN0YXR1cywKPiA+ID4gPiA+ICsgKiB0aGVyZSBoYXMgYmVlbiBrbm93biBpc3N1ZXMg b2YgbGluayBsb3NzIHRyaWdnZXJpbmcKPiA+ID4gPiA+ICsgKiBsb25nIHB1bHNlLgo+ID4gPiA+ ID4gKyAqCj4gPiA+ID4gPiArICogU29tZSBzaW5rcyAoZWcuIEFTVVMgUEIyODdRKSBzZWVtIHRv IHBlcmZvcm0gc29tZQo+ID4gPiA+ID4gKyAqIHdlaXJkIEhQRCBwaW5nIHBvbmcgZHVyaW5nIG1v ZGVzZXRzLiBTbyB3ZSBjYW4gYXBwYXJlbnRseQo+ID4gPiA+ID4gKyAqIGVuZCB1cCB3aXRoIEhQ RCBnb2luZyBsb3cgZHVyaW5nIGEgbW9kZXNldCwgYW5kIHRoZW4KPiA+ID4gPiA+ICsgKiBnb2lu ZyBiYWNrIHVwIHNvb24gYWZ0ZXIuIEFuZCBvbmNlIHRoYXQgaGFwcGVucyB3ZSBtdXN0Cj4gPiA+ ID4gPiArICogcmV0cmFpbiB0aGUgbGluayB0byBnZXQgYSBwaWN0dXJlLiBUaGF0J3MgaW4gY2Fz ZSBubwo+ID4gPiA+ID4gKyAqIHVzZXJzcGFjZSBjb21wb25lbnQgcmVhY3RlZCB0byBpbnRlcm1p dHRlbnQgSFBEIGRpcC4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtpbnQgaW50ZWxfZHBfcmV0 cmFpbl9saW5rKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gPiA+ID4gKwkJCSAg c3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpCj4gPiA+ID4gPiAgewo+ID4gPiA+ ID4gLQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciA9ICZkcF90b19kaWdfcG9ydChpbnRl bF9kcCktCj4gPiA+ID4gPiA+YmFzZTsKPiA+ID4gPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLQo+ID4gPiA+ID4gPmJhc2UuZGV2KTsKPiA+ ID4gPiA+IC0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGVuY29kZXIt PmJhc2UuY3J0Yyk7Cj4gPiA+ID4gPiArCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNf dG9faW50ZWxfZHAoJmVuY29kZXItPmJhc2UpOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfY29u bmVjdG9yICpjb25uZWN0b3IgPSBpbnRlbF9kcC0KPiA+ID4gPiA+ID5hdHRhY2hlZF9jb25uZWN0 b3I7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwo+ ID4gPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ID4gPiA+ ICsJc3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4gPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCS8qIEZJWE1FIGhhbmRsZSB0aGUgTVNUIGNvbm5lY3RvcnMgYXMgd2Vs bCAqLwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoIWNvbm5lY3RvciB8fCBjb25uZWN0b3It PmJhc2Uuc3RhdHVzICE9Cj4gPiA+ID4gPiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKPiA+ ID4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXQgPSBkcm1fbW9k ZXNldF9sb2NrKCZkZXZfcHJpdi0KPiA+ID4gPiA+ID5kcm0ubW9kZV9jb25maWcuY29ubmVjdGlv bl9tdXRleCwKPiA+ID4gPiA+IGN0eCk7Cj4gPiA+ID4gPiArCWlmIChyZXQpCj4gPiA+ID4gPiAr CQlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwljb25uX3N0YXRlID0gY29ubmVj dG9yLT5iYXNlLnN0YXRlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwljcnRjID0gdG9faW50ZWxf Y3J0Yyhjb25uX3N0YXRlLT5jcnRjKTsKPiA+ID4gPiA+ICsJaWYgKCFjcnRjKQo+ID4gPiA+ID4g KwkJcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldCA9IGRybV9tb2Rlc2V0X2xv Y2soJmNydGMtPmJhc2UubXV0ZXgsIGN0eCk7Cj4gPiA+ID4gPiArCWlmIChyZXQpCj4gPiA+ID4g PiArCQlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwljcnRjX3N0YXRlID0gdG9f aW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJV0FSTl9PTighaW50ZWxfY3J0Y19oYXNfZHBfZW5jb2RlcihjcnRjX3N0YXRlKSk7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArCWlmICghY3J0Y19zdGF0ZS0+YmFzZS5hY3RpdmUpCj4gPiA+ID4g PiArCQlyZXR1cm4gMDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKGNvbm5fc3RhdGUtPmNv bW1pdCAmJgo+ID4gPiA+ID4gKwkgICAgIXRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKCZjb25uX3N0 YXRlLT5jb21taXQtPmh3X2RvbmUpKQo+ID4gPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArCWlmICghaW50ZWxfZHBfbmVlZHNfbGlua19yZXRyYWluKGludGVsX2RwKSkK PiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiA+IAo+ID4gPiA+IE5BSywgdGhpcyBkZWZpbml0 ZWx5IHdvbid0IHdvcmsgZm9yIGltcGxlbWVudGluZyBNU1QgcmV0cmFpbmluZy4gVGhlcmUncwo+ ID4gPiA+IHNvbWUKPiA+ID4gPiBwcmV0dHkgaHVnZSBkaWZmZXJlbmNlcyB3aXRoIGhvdyByZXRy YWluaW5nIG5lZWRzIHRvIGJlIGhhbmRsZWQgb24gU1NUCj4gPiA+ID4gdnMuIE1TVC4KPiA+ID4g PiBBbiBleGFtcGxlIHdpdGggc29tZSBub3JtYWwgU1NUIHNpbmsgdnMuIHdoYXQgaGFwcGVucyBv biBteSBjYWxkaWdpdCBUUzMKPiA+ID4gPiAKPiA+ID4gPiBTU1Q6Cj4gPiA+ID4gICAgIDEuIGNv bW1pdCBtb2Rlc2V0LCBldmVyeXRoaW5nIGlzIE9LCj4gPiA+ID4gICAgIDIuIHNvbWV0aGluZyBo YXBwZW5zLCBzaW5rIHNlbmRzIHNob3J0cHVsc2UgYW5kIGNoYW5nZXMgbGluayBzdGF0dXMKPiA+ ID4gPiByZWdpc3RlcnMKPiA+ID4gPiAgICAgaW4gZHBjZAo+ID4gPiA+ICAgICAzLiBTb3VyY2Ug cmVjZWl2ZXMgc2hvcnQgcHVsc2UsIHRyaWVzIHJldHJhaW5pbmcgZml2ZSB0aW1lcwo+ID4gPiA+ ICAgICA0LiBpZiB0aGlzIHN1Y2NlZWRzOgo+ID4gPiA+ICAgICAgICAgNS4gd2UncmUgZG9uZSBo ZXJlCj4gPiA+ID4gICAgIDYuIGlmIHRoaXMgZmFpbHM6Cj4gPiA+ID4gICAgICAgICA3LiBtYXJr IGxpbmsgc3RhdHVzIGFzIGJhZAo+ID4gPiA+ICAgICAgICAgOC4gZ2V0IGZhbGxiYWNrIHBhcmFt ZXRlcnMKPiA+ID4gPiAgICAgICAgIDkuIGhvdHBsdWcgZXZlbnQKPiA+ID4gPiAKPiA+ID4gPiBN U1QgKGk5MTUgZG9lc24ndCBkbyB0aGlzIHlldCwgYnV0IHRoaXMgaXMgZ2VuZXJhbGx5IGhvdyBp dCBuZWVkcyB0byBiZQo+ID4gPiA+IGhhbmRsZWQpOgo+ID4gPiA+ICAgICAxLiBjb21taXQgbW9k ZXNldCwgZXZlcnl0aGluZyBpcyBPSwo+ID4gPiA+ICAgICAyLiBzb21ldGhpbmcgaGFwcGVucyAo aW4gbXkgY2FzZSwgdGhlIE1TVCBodWIgZGlzY292ZXJzIGl0IGhhZCB0aGUKPiA+ID4gPiB3cm9u ZyBtYXgKPiA+ID4gPiAgICAgbGluayByYXRlL2xhbmUgY291bnQpLCBzaW5rIHNlbmRzIEVTSSBp bmRpY2F0aW5nIGNoYW5uZWwgRVEgaGFzCj4gPiA+ID4gZmFpbGVkCj4gPiA+ID4gICAgIDMuIHJl dHJhaW5pbmcgY29tbWVuY2VzIHdpdGggZml2ZSByZXRyaWVzLgo+ID4gPiA+ICAgICA0LiBpZiB0 aGlzIHN1Y2NlZWRzOgo+ID4gPiA+ICAgICAgICA1LiBjb250aW51ZQo+ID4gPiA+ICAgICA2LiBp ZiB0aGlzIGZhaWxzIChJIGFjdHVhbGx5IGhhdmVuJ3Qgc2VlbiB0aGlzIG9uY2UgeWV0KQo+ID4g PiA+ICAgICAgICAgNy4gbWFyayBsaW5rIHN0YXR1cyBhcyBiYWQgb24gYWxsIGRvd25zdHJlYW0g Y29ubmVjdG9ycwo+ID4gPiA+ICAgICAgICAgOC4gZ2V0IGZhbGxiYWNrIHBhcmFtZXRlcnMKPiA+ ID4gPiAgICAgICAgIDkuIGhvdHBsdWcgZXZlbnQKPiA+ID4gPiAgICAgMTAuIHRoZSByZXRyYWlu IGRpZG4ndCBhY3R1YWxseSB3b3JrIChkZXNwaXRlIHdoYXQgdGhlIFNTVCBsaW5rCj4gPiA+ID4g c3RhdHVzCj4gPiA+ID4gICAgIHJlZ2lzdGVycyB0b2xkIHVzKS4gZ28gYmFjayB0byBzdGVwIDMg Zml2ZSBtb3JlIHRpbWVzCj4gPiA+ID4gICAgIDExLiBpZiB0aGlzIGZhaWxzOgo+ID4gPiA+ICAg ICAgICAgMTIuIG1hcmsgbGluayBzdGF0dXMgYXMgYmFkIG9uIGFsbCBkb3duc3RyZWFtIGNvbm5l Y3RvcnMKPiA+ID4gPiAgICAgICAgIDEzLiBnZXQgZmFsbGJhY2sgcGFyYW1ldGVycwo+ID4gPiA+ ICAgICAgICAgMTQuIGhvdHBsdWcgZXZlbnQKPiA+ID4gPiAKPiA+ID4gPiBzaW1wbHkgcHV0OiB3 ZSByZWFsbHkgc2hvdWxkIGtlZXAgdGhlICJkbyB3ZSBuZWVkIHRvIHJldHJhaW4/IiBsb2dpYyBv dXQKPiA+ID4gPiBvZiB0aGUKPiA+ID4gPiBhY3R1YWwgcmV0cmFpbmluZyBoZWxwZXJzIHNvIHRo YXQgU1NUL01TVCBjb2RlcGF0aHMgY2FuIGRvIHRoZWlyIG93bgo+ID4gPiA+IGNoZWNrcyB0bwo+ ID4gPiA+IGZpZ3VyZSB0aGlzIG91dC4KPiA+ID4gCj4gPiA+IE5vLCB3ZSBuZWVkIGl0IHNpbmNl IHdlIHdhbnQgdG8gY2hlY2sgaXQgKmFmdGVyKiBhbnkgbW9kZXNldCBoYXMKPiA+ID4gZmluaXNo ZWQuIFdpdGggTVNUIEkgdGhpbmsgd2hhdCB3ZSdsbCB3YW50IHRvIGRvIGlzIGZpbmQgYWxsIHRo ZSBwaXBlcwo+ID4gPiBhZmZlY3RlZCBieSB0aGUgbGluayBmYWlsdXJlLCBsb2NrIHRoZW0sIGFu ZCB3YWl0IHVudGlsIHRoZXkncmUgZG9uZQo+ID4gPiB3aXRoIHRoZWlyIG1vZGVzZXRzLCB0aGVu IHdlIGNoZWNrIHRoZSBsaW5rIHN0YXRlLiBJZiBpdCdzIGJhZCB3ZQo+ID4gPiBwcm9jZWVkIHRv IHJldHJhaW4gdGhlIGxpbmsuCj4gPiA+IAo+ID4gPiBTbyBiYXNpY2FsbHkganVzdCB3YWxraW5n IG92ZXIgdGhlIE1TVCBlbmNvZGVycyBpbiBhZGRpdGlvbiB0byB0aGUKPiA+ID4gU1NUIGVuY29k ZXIsIGFuZCByZXBlYXRpbmcgbW9zdCBvZiB0aGUgc3RlcHMgaW4gdGhpcyBjb2RlIGZvciBlYWNo Lgo+ID4gPiBIZW5jZSB0aGUgdGhlIE1TVCBGSVhNRSBJIGxlZnQgaW4gdGhlcmUgOykKPiA+ID4g Cj4gPiAKPiA+IEx5dWRlLAo+ID4gCj4gPiBJIGFncmVlIHdpdGggVmlsbGUgaGVyZSwgY2FuIHdl IGFkZCB0aGUgTVNUIHJldHJhaW4gcmVxdWlyZWQgY2hlY2sgZnJvbQo+ID4gd2l0aGluIHRoZSBp bnRlbF9kcF9yZXRyYWluX2xpbmsoKT8gU28gZm9yIG5vdyB0aGUgRklYTUUgc2hvdWxkIGJlIGxl ZnQKPiA+IHRoZXJlCj4gPiBhbmQgTVNUIHJldHJhaW5pbmcgY2hlY2sgY2FuIGJlIGFkZGVkIGZy b20geW91ciBwYXRjaGVzLgo+ID4gCj4gPiBNYW5hc2kKPiAKPiBZZXAhIFNvcnJ5IEkgcHJvYmFi bHkgc2hvdWxkIGhhdmUgcmVpdGVyYXRlZCB0aGlzIHBhcnQgb3ZlciBlbWFpbCBzaW5jZSBJIG9u bHkKPiBtZW50aW9uZWQgaXQgdG8gdmlsbGUgZGlyZWN0bHk6IHRoaXMgcGFydCBzaG91bGQgZGVm aW5pdGVseSB3b3JrIGZpbmUsIGFuZAo+IGludGVsX2RwX3JldHJhaW5fbGluaygpIGlzIGFjdHVh bGx5IHdoZXJlIHdlIGhhbmRsZSBNU1QgcmV0cmFpbmluZyBpbiB0aGUKPiBsYXRlc3QgdmVyc2lv biBvZiB0aGUgcmV0cmFpbmluZyBzZXJpZXM6Cj4gCj4gamZ5aSwgeW91IGNhbiBmaW5kIHRoYXQg aGVyZToKPiBodHRwczovL2dpdGh1Yi5jb20vTHl1ZGUvbGludXgvdHJlZS93aXAvaTkxNS1tc3Qt ZmFsbGJhY2stYTQKPiBJdCdzIGFsbW9zdCByZWFkeSBmb3IgdGhlIE1MLCBqdXN0IHdhbnQgdG8g Z2V0IHRoZSBvdGhlciBwYXRjaGVzIHRoaXMgaXMgZ29pbmcKPiB0byByZWx5IG9uIGluIGZpcnN0 IGFuZCBmaXggc29tZSBzbWFsbCBjb25jZXJucyBJJ3ZlIGdvdCBhYm91dCB0aGF0IHNlcmllcycK PiBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGhhbmRsaW5nIG1vZGVzZXRzIGFmdGVyIGEgZmFp bGVkIHJldHJhaW4gc2VxdWVuY2UKPiA+CgpHcmVhdCEKQWZ0ZXIgdGhlIGZhaWxlZCByZXRyYWlu IHNlcXVlbmNlLCBpdCB3aWxsIGtlZXAgb24gcmV0cnlpbmcgdW50aWwgaGFzIHRyaWVkIGFsbAp0 aGUgbGluayByYXRlL2xhbmUgY291bnQgY29tYmluYXRpb25zIHVudGlsIFJCUiAxIGxhbmUgYW5k IHRoZW4gZmFpbCB3aXRoIGEgRVJST1IgbWVzc2FnZS4KV2hhdCB3YXMgdGhlIGNvbmNlcm4gb24g dGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgbW9kZXN0ZSBhZnRlciBmYWlsZWQgcmV0cmFp bj8KCk1hbmFzaQogCj4gPiA+ID4gCj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAgCS8qIFN1cHByZXNz IHVuZGVycnVucyBjYXVzZWQgYnkgcmUtdHJhaW5pbmcgKi8KPiA+ID4gPiA+ICAJaW50ZWxfc2V0 X2NwdV9maWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgY3J0Yy0+cGlwZSwKPiA+ID4g PiA+IGZhbHNlKTsKPiA+ID4gPiA+IEBAIC00Mjk4LDUxICs0MzY5LDQ5IEBAIGludGVsX2RwX3Jl dHJhaW5fbGluayhzdHJ1Y3QgaW50ZWxfZHAKPiA+ID4gPiA+ICppbnRlbF9kcCkKPiA+ID4gPiA+ ICAJaWYgKGNydGMtPmNvbmZpZy0+aGFzX3BjaF9lbmNvZGVyKQo+ID4gPiA+ID4gIAkJaW50ZWxf c2V0X3BjaF9maWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwKPiA+ID4gPiA+ICAJCQkJ CQkgICAgICBpbnRlbF9jcnRjX3BjaF8KPiA+ID4gPiA+IHRyYW5zY29kCj4gPiA+ID4gPiBlcihj cnRjKSwgdHJ1ZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiAwOwo+ID4gPiA+ID4g IH0KPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC1zdGF0aWMgdm9pZAo+ID4gPiA+ID4gLWludGVsX2Rw X2NoZWNrX2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiA+ID4gPiAr LyoKPiA+ID4gPiA+ICsgKiBJZiBkaXNwbGF5IGlzIG5vdyBjb25uZWN0ZWQgY2hlY2sgbGlua3Mg c3RhdHVzLAo+ID4gPiA+ID4gKyAqIHRoZXJlIGhhcyBiZWVuIGtub3duIGlzc3VlcyBvZiBsaW5r IGxvc3MgdHJpZ2dlcmluZwo+ID4gPiA+ID4gKyAqIGxvbmcgcHVsc2UuCj4gPiA+ID4gPiArICoK PiA+ID4gPiA+ICsgKiBTb21lIHNpbmtzIChlZy4gQVNVUyBQQjI4N1EpIHNlZW0gdG8gcGVyZm9y bSBzb21lCj4gPiA+ID4gPiArICogd2VpcmQgSFBEIHBpbmcgcG9uZyBkdXJpbmcgbW9kZXNldHMu IFNvIHdlIGNhbiBhcHBhcmVudGx5Cj4gPiA+ID4gPiArICogZW5kIHVwIHdpdGggSFBEIGdvaW5n IGxvdyBkdXJpbmcgYSBtb2Rlc2V0LCBhbmQgdGhlbgo+ID4gPiA+ID4gKyAqIGdvaW5nIGJhY2sg dXAgc29vbiBhZnRlci4gQW5kIG9uY2UgdGhhdCBoYXBwZW5zIHdlIG11c3QKPiA+ID4gPiA+ICsg KiByZXRyYWluIHRoZSBsaW5rIHRvIGdldCBhIHBpY3R1cmUuIFRoYXQncyBpbiBjYXNlIG5vCj4g PiA+ID4gPiArICogdXNlcnNwYWNlIGNvbXBvbmVudCByZWFjdGVkIHRvIGludGVybWl0dGVudCBI UEQgZGlwLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK3N0YXRpYyBib29sIGludGVsX2RwX2hv dHBsdWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiA+ID4gPiArCQkJICAgICBz dHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiA+ID4gPiAgewo+ID4gPiA+ID4g LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+ID4gPiA+ID4gdG9faTkxNShp bnRlbF9kcF90b19kZXYoaW50ZWxfZHApKTsKPiA+ID4gPiA+IC0Jc3RydWN0IGludGVsX2VuY29k ZXIgKmludGVsX2VuY29kZXIgPQo+ID4gPiA+ID4gJmRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0K PiA+ID4gPiA+ID4gYmFzZTsKPiA+ID4gPiA+IAo+ID4gPiA+ID4gLQlzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSA9Cj4gPiA+ID4gPiAtCQlpbnRlbF9kcC0+YXR0YWNoZWRf Y29ubmVjdG9yLT5iYXNlLnN0YXRlOwo+ID4gPiA+ID4gLQl1OCBsaW5rX3N0YXR1c1tEUF9MSU5L X1NUQVRVU19TSVpFXTsKPiA+ID4gPiA+IC0KPiA+ID4gPiA+IC0JV0FSTl9PTighZHJtX21vZGVz ZXRfaXNfbG9ja2VkKCZkZXZfcHJpdi0KPiA+ID4gPiA+ID4gZHJtLm1vZGVfY29uZmlnLmNvbm5l Y3Rpb25fbXV0ZXgpKTsKPiA+ID4gPiA+IAo+ID4gPiA+ID4gLQo+ID4gPiA+ID4gLQlpZiAoIWlu dGVsX2RwX2dldF9saW5rX3N0YXR1cyhpbnRlbF9kcCwgbGlua19zdGF0dXMpKSB7Cj4gPiA+ID4g PiAtCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgbGluayBzdGF0dXNcbiIpOwo+ID4gPiA+ID4g LQkJcmV0dXJuOwo+ID4gPiA+ID4gLQl9Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fbW9kZXNldF9h Y3F1aXJlX2N0eCBjdHg7Cj4gPiA+ID4gPiArCWJvb2wgY2hhbmdlZDsKPiA+ID4gPiA+ICsJaW50 IHJldDsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JaWYgKCFjb25uX3N0YXRlLT5jcnRjKQo+ID4g PiA+ID4gLQkJcmV0dXJuOwo+ID4gPiA+ID4gKwljaGFuZ2VkID0gaW50ZWxfZW5jb2Rlcl9ob3Rw bHVnKGVuY29kZXIsIGNvbm5lY3Rvcik7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCVdBUk5fT04o IWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmY29ubl9zdGF0ZS0+Y3J0Yy0+bXV0ZXgpKTsKPiA+ID4g PiA+ICsJZHJtX21vZGVzZXRfYWNxdWlyZV9pbml0KCZjdHgsIDApOwo+ID4gPiA+ID4gIAo+ID4g PiA+ID4gLQlpZiAoIWNvbm5fc3RhdGUtPmNydGMtPnN0YXRlLT5hY3RpdmUpCj4gPiA+ID4gPiAt CQlyZXR1cm47Cj4gPiA+ID4gPiArCWZvciAoOzspIHsKPiA+IAo+ID4gSGVyZSBpZiB0aGlzIGlz IGdldHRpbmcgZXhlY3V0ZWQgZHVlIHRvIGhwZCBwaW5nIHBvbmcgZHVyaW5nIHRoZSBtb2Rlc2V0 Cj4gPiBhbmQgdGhhdCBtb2Rlc2V0IGlzIGFscmVhZHkgaGFwcGVuaW5nIGF0IGEgbGluayBmYWxs YmFjayBwYXJhbWV0ZXIgdGhlbgo+ID4gd2hpbGUgd2UgY2FsbCByZXRyYWluIGxpbmssIHdlIHNo b3VsZCBhbHNvIHZhbGlkYXRlIHRoZSBsaW5rIHBhcmFtZXRlcnMKPiA+IHNvIHRoYXQgaXQgZG9l c250IHRyeSB0byByZXRyYWluIHdpdGggc3RhbGUgdmFsdWVzLgo+ID4gCj4gPiBJIHRoaW5rIHdl IG5lZWQgdG8gY2FsbCBpbnRlbF9kcF9saW5rX3BhcmFtc192YWxpZCgpIGJlZm9yZSByZXRyYWlu Lgo+ID4gCj4gPiA+ID4gPiArCQlyZXQgPSBpbnRlbF9kcF9yZXRyYWluX2xpbmsoZW5jb2Rlciwg JmN0eCk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCWlmIChjb25uX3N0YXRlLT5jb21taXQgJiYK PiA+ID4gPiA+IC0JICAgICF0cnlfd2FpdF9mb3JfY29tcGxldGlvbigmY29ubl9zdGF0ZS0+Y29t bWl0LT5od19kb25lKSkKPiA+ID4gPiA+IC0JCXJldHVybjsKPiA+ID4gPiA+ICsJCWlmIChyZXQg PT0gLUVERUFETEspIHsKPiA+ID4gPiA+ICsJCQlkcm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgpOwo+ ID4gPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4gIAo+ID4gPiA+ ID4gLQkvKgo+ID4gPiA+ID4gLQkgKiBWYWxpZGF0ZSB0aGUgY2FjaGVkIHZhbHVlcyBvZiBpbnRl bF9kcC0+bGlua19yYXRlIGFuZAo+ID4gPiA+ID4gLQkgKiBpbnRlbF9kcC0+bGFuZV9jb3VudCBi ZWZvcmUgYXR0ZW1wdGluZyB0byByZXRyYWluLgo+ID4gPiA+ID4gLQkgKi8KPiA+ID4gPiA+IC0J aWYgKCFpbnRlbF9kcF9saW5rX3BhcmFtc192YWxpZChpbnRlbF9kcCwgaW50ZWxfZHAtCj4gPiA+ ID4gPiA+bGlua19yYXRlLAo+ID4gPiA+ID4gLQkJCQkJaW50ZWxfZHAtPmxhbmVfY291bnQpKQo+ ID4gPiA+ID4gLQkJcmV0dXJuOwo+ID4gPiA+ID4gKwkJYnJlYWs7Cj4gPiA+ID4gPiArCX0KPiA+ ID4gPiA+ICAKPiA+ID4gPiA+IC0JLyogUmV0cmFpbiBpZiBDaGFubmVsIEVRIG9yIENSIG5vdCBv ayAqLwo+ID4gPiA+ID4gLQlpZiAoIWRybV9kcF9jaGFubmVsX2VxX29rKGxpbmtfc3RhdHVzLCBp bnRlbF9kcC0+bGFuZV9jb3VudCkpIAo+ID4gPiA+ID4gewo+ID4gPiA+ID4gLQkJRFJNX0RFQlVH X0tNUygiJXM6IGNoYW5uZWwgRVEgbm90IG9rLCByZXRyYWluaW5nXG4iLAo+ID4gPiA+ID4gLQkJ CSAgICAgIGludGVsX2VuY29kZXItPmJhc2UubmFtZSk7Cj4gPiA+ID4gPiArCWRybV9tb2Rlc2V0 X2Ryb3BfbG9ja3MoJmN0eCk7Cj4gPiA+ID4gPiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgm Y3R4KTsKPiA+ID4gPiA+ICsJV0FSTihyZXQsICJBY3F1aXJpbmcgbW9kZXNldCBsb2NrcyBmYWls ZWQgd2l0aCAlaVxuIiwgcmV0KTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JCWludGVsX2RwX3Jl dHJhaW5fbGluayhpbnRlbF9kcCk7Cj4gPiA+ID4gPiAtCX0KPiA+ID4gPiA+ICsJcmV0dXJuIGNo YW5nZWQ7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIC8qCj4gPiA+ID4gPiBA QCAtNDQwMCw3ICs0NDY5LDkgQEAgaW50ZWxfZHBfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKPiA+ID4gPiA+ICAJCQlEUk1fREVCVUdfRFJJVkVSKCJDUCBvciBzaW5rIHNw ZWNpZmljIGlycQo+ID4gPiA+ID4gdW5oYW5kbGVkXG4iKTsKPiA+ID4gPiA+ICAJfQo+ID4gPiA+ ID4gIAo+ID4gPiA+ID4gLQlpbnRlbF9kcF9jaGVja19saW5rX3N0YXR1cyhpbnRlbF9kcCk7Cj4g PiA+ID4gPiArCS8qIGRlZmVyIHRvIHRoZSBob3RwbHVnIHdvcmsgZm9yIGxpbmsgcmV0cmFpbmlu ZyBpZiBuZWVkZWQgKi8KPiA+ID4gPiA+ICsJaWYgKGludGVsX2RwX25lZWRzX2xpbmtfcmV0cmFp bihpbnRlbF9kcCkpCj4gPiA+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ID4gPiAgCj4gPiA+ ID4gPiAgCWlmIChpbnRlbF9kcC0+Y29tcGxpYW5jZS50ZXN0X3R5cGUgPT0gRFBfVEVTVF9MSU5L X1RSQUlOSU5HKQo+ID4gPiA+ID4gewo+ID4gPiA+ID4gIAkJRFJNX0RFQlVHX0tNUygiTGluayBU cmFpbmluZyBDb21wbGlhbmNlIFRlc3QKPiA+ID4gPiA+IHJlcXVlc3RlZFxuIik7Cj4gPiA+ID4g PiBAQCAtNDc4NSwyMCArNDg1Niw2IEBAIGludGVsX2RwX2xvbmdfcHVsc2Uoc3RydWN0IGludGVs X2Nvbm5lY3Rvcgo+ID4gPiA+ID4gKmNvbm5lY3RvcikKPiA+ID4gPiA+ICAJCSAqLwo+ID4gPiA+ ID4gIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4gPiA+ID4gPiAg CQlnb3RvIG91dDsKPiA+ID4gPiA+IC0JfSBlbHNlIHsKPiA+ID4gPiA+IC0JCS8qCj4gPiA+ID4g PiAtCQkgKiBJZiBkaXNwbGF5IGlzIG5vdyBjb25uZWN0ZWQgY2hlY2sgbGlua3Mgc3RhdHVzLAo+ ID4gPiA+ID4gLQkJICogdGhlcmUgaGFzIGJlZW4ga25vd24gaXNzdWVzIG9mIGxpbmsgbG9zcwo+ ID4gPiA+ID4gdHJpZ2dlcnJpbmcKPiA+ID4gPiA+IC0JCSAqIGxvbmcgcHVsc2UuCj4gPiA+ID4g PiAtCQkgKgo+ID4gPiA+ID4gLQkJICogU29tZSBzaW5rcyAoZWcuIEFTVVMgUEIyODdRKSBzZWVt IHRvIHBlcmZvcm0gc29tZQo+ID4gPiA+ID4gLQkJICogd2VpcmQgSFBEIHBpbmcgcG9uZyBkdXJp bmcgbW9kZXNldHMuIFNvIHdlIGNhbgo+ID4gPiA+ID4gYXBwYXJlbnRseQo+ID4gPiA+ID4gLQkJ ICogZW5kIHVwIHdpdGggSFBEIGdvaW5nIGxvdyBkdXJpbmcgYSBtb2Rlc2V0LCBhbmQKPiA+ID4g PiA+IHRoZW4KPiA+ID4gPiA+IC0JCSAqIGdvaW5nIGJhY2sgdXAgc29vbiBhZnRlci4gQW5kIG9u Y2UgdGhhdCBoYXBwZW5zIHdlCj4gPiA+ID4gPiBtdXN0Cj4gPiA+ID4gPiAtCQkgKiByZXRyYWlu IHRoZSBsaW5rIHRvIGdldCBhIHBpY3R1cmUuIFRoYXQncyBpbiBjYXNlCj4gPiA+ID4gPiBubwo+ ID4gPiA+ID4gLQkJICogdXNlcnNwYWNlIGNvbXBvbmVudCByZWFjdGVkIHRvIGludGVybWl0dGVu dCBIUEQKPiA+ID4gPiA+IGRpcC4KPiA+ID4gPiA+IC0JCSAqLwo+ID4gPiA+ID4gLQkJaW50ZWxf ZHBfY2hlY2tfbGlua19zdGF0dXMoaW50ZWxfZHApOwo+ID4gPiA+ID4gIAl9Cj4gPiA+ID4gPiAg Cj4gPiA+ID4gPiAgCS8qCj4gPiA+ID4gPiBAQCAtNTM0MCwzNyArNTM5NywxMCBAQCBpbnRlbF9k cF9ocGRfcHVsc2Uoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydAo+ID4gPiA+ID4gKmludGVsX2Rp Z19wb3J0LCBib29sIGxvbmdfaHBkKQo+ID4gPiA+ID4gIAl9Cj4gPiA+ID4gPiAgCj4gPiA+ID4g PiAgCWlmICghaW50ZWxfZHAtPmlzX21zdCkgewo+ID4gPiA+ID4gLQkJc3RydWN0IGRybV9tb2Rl c2V0X2FjcXVpcmVfY3R4IGN0eDsKPiA+ID4gPiA+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IgPSAmaW50ZWxfZHAtCj4gPiA+ID4gPiA+IGF0dGFjaGVkX2Nvbm5lY3Rvci0+YmFz ZTsKPiA+ID4gPiA+IAo+ID4gPiA+ID4gLQkJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4gPiA+ ID4gLQkJaW50IGlyZXQ7Cj4gPiA+ID4gPiAtCQlib29sIGhhbmRsZWQgPSBmYWxzZTsKPiA+ID4g PiA+IC0KPiA+ID4gPiA+IC0JCWRybV9tb2Rlc2V0X2FjcXVpcmVfaW5pdCgmY3R4LCAwKTsKPiA+ ID4gPiA+IC1yZXRyeToKPiA+ID4gPiA+IC0JCWlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZkZXZf cHJpdi0KPiA+ID4gPiA+ID4gZHJtLm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsICZjdHgp Owo+ID4gPiA+ID4gCj4gPiA+ID4gPiAtCQlpZiAoaXJldCkKPiA+ID4gPiA+IC0JCQlnb3RvIGVy cjsKPiA+ID4gPiA+IC0KPiA+ID4gPiA+IC0JCWNydGMgPSBjb25uZWN0b3ItPnN0YXRlLT5jcnRj Owo+ID4gPiA+ID4gLQkJaWYgKGNydGMpIHsKPiA+ID4gPiA+IC0JCQlpcmV0ID0gZHJtX21vZGVz ZXRfbG9jaygmY3J0Yy0+bXV0ZXgsICZjdHgpOwo+ID4gPiA+ID4gLQkJCWlmIChpcmV0KQo+ID4g PiA+ID4gLQkJCQlnb3RvIGVycjsKPiA+ID4gPiA+IC0JCX0KPiA+ID4gPiA+ICsJCWJvb2wgaGFu ZGxlZDsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ICAJCWhhbmRsZWQgPSBpbnRlbF9kcF9zaG9ydF9w dWxzZShpbnRlbF9kcCk7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtZXJyOgo+ID4gPiA+ID4gLQkJ aWYgKGlyZXQgPT0gLUVERUFETEspIHsKPiA+ID4gPiA+IC0JCQlkcm1fbW9kZXNldF9iYWNrb2Zm KCZjdHgpOwo+ID4gPiA+ID4gLQkJCWdvdG8gcmV0cnk7Cj4gPiA+ID4gPiAtCQl9Cj4gPiA+ID4g PiAtCj4gPiA+ID4gPiAtCQlkcm1fbW9kZXNldF9kcm9wX2xvY2tzKCZjdHgpOwo+ID4gPiA+ID4g LQkJZHJtX21vZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOwo+ID4gPiA+ID4gLQkJV0FSTihpcmV0 LCAiQWNxdWlyaW5nIG1vZGVzZXQgbG9ja3MgZmFpbGVkIHdpdGgKPiA+ID4gPiA+ICVpXG4iLCBp cmV0KTsKPiA+ID4gPiA+IC0KPiA+ID4gPiA+ICAJCS8qIFNob3J0IHB1bHNlIGNhbiBzaWduaWZ5 IGxvc3Mgb2YgaGRjcAo+ID4gPiA+ID4gYXV0aGVudGljYXRpb24gKi8KPiA+ID4gPiA+ICAJCWlu dGVsX2hkY3BfY2hlY2tfbGluayhpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yKTsKPiA+ID4g PiA+ICAKPiA+ID4gPiA+IEBAIC02NDAwLDcgKzY0MzAsNyBAQCBib29sIGludGVsX2RwX2luaXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gPiA+ICpkZXZfcHJpdiwKPiA+ID4gPiA+ICAJ CQkgICAgICJEUCAlYyIsIHBvcnRfbmFtZShwb3J0KSkpCj4gPiA+ID4gPiAgCQlnb3RvIGVycl9l bmNvZGVyX2luaXQ7Cj4gPiA+ID4gPiAgCj4gPiA+ID4gPiAtCWludGVsX2VuY29kZXItPmhvdHBs dWcgPSBpbnRlbF9lbmNvZGVyX2hvdHBsdWc7Cj4gPiA+ID4gPiArCWludGVsX2VuY29kZXItPmhv dHBsdWcgPSBpbnRlbF9kcF9ob3RwbHVnOwo+ID4gPiA+ID4gIAlpbnRlbF9lbmNvZGVyLT5jb21w dXRlX2NvbmZpZyA9IGludGVsX2RwX2NvbXB1dGVfY29uZmlnOwo+ID4gPiA+ID4gIAlpbnRlbF9l bmNvZGVyLT5nZXRfaHdfc3RhdGUgPSBpbnRlbF9kcF9nZXRfaHdfc3RhdGU7Cj4gPiA+ID4gPiAg CWludGVsX2VuY29kZXItPmdldF9jb25maWcgPSBpbnRlbF9kcF9nZXRfY29uZmlnOwo+ID4gPiA+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiA+ID4g PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiA+ID4gPiBpbmRleCA1ZWEx ZGMzZjYzYmYuLmRkZjI4YTQ0MmNkNyAxMDA2NDQKPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAo+ID4gPiA+ID4gQEAgLTE2MTEsNiArMTYxMSw4IEBAIGludAo+ID4gPiA+ ID4gaW50ZWxfZHBfZ2V0X2xpbmtfdHJhaW5fZmFsbGJhY2tfdmFsdWVzKHN0cnVjdAo+ID4gPiA+ ID4gaW50ZWxfZHAgKmludGVsX2RwLAo+ID4gPiA+ID4gIAkJCQkJICAgIGludCBsaW5rX3JhdGUs IHVpbnQ4X3QKPiA+ID4gPiA+IGxhbmVfY291bnQpOwo+ID4gPiA+ID4gIHZvaWQgaW50ZWxfZHBf c3RhcnRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiA+ID4gPiA+ICB2 b2lkIGludGVsX2RwX3N0b3BfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsK PiA+ID4gPiA+ICtpbnQgaW50ZWxfZHBfcmV0cmFpbl9saW5rKHN0cnVjdCBpbnRlbF9lbmNvZGVy ICplbmNvZGVyLAo+ID4gPiA+ID4gKwkJCSAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4 ICpjdHgpOwo+ID4gPiA+ID4gIHZvaWQgaW50ZWxfZHBfc2lua19kcG1zKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsIGludCBtb2RlKTsKPiA+ID4gPiA+ICB2b2lkIGludGVsX2RwX2VuY29kZXJf cmVzZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKPiA+ID4gPiA+ICB2b2lkIGludGVs X2RwX2VuY29kZXJfc3VzcGVuZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2Rlcik7 Cj4gPiA+IAo+ID4gPiAtLSAKPiA+ID4gVmlsbGUgU3lyasOkbMOkCj4gPiA+IEludGVsIE9UQwo+ ID4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4g PiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gPiA+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKPiA+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngKPiAtLSAKPiBDaGVlcnMsCj4gCUx5dWRlIFBhdWwKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==