From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH 08/11] drm/msm: Remove hand-rolled out fences Date: Mon, 12 Mar 2018 16:30:28 -0400 Message-ID: <20180312203028.GD223881@art_vandelay> References: <20180228191906.185417-1-seanpaul@chromium.org> <20180228191906.185417-9-seanpaul@chromium.org> <1a1c79ddb6ddabbc72e4624b53460188@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1a1c79ddb6ddabbc72e4624b53460188-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Jeykumar Sankaran Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Sean Paul , abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBNYXIgMDIsIDIwMTggYXQgMDQ6NDQ6NTVQTSAtMDgwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gT24gMjAxOC0wMi0yOCAxMToxOSwgU2VhbiBQYXVsIHdyb3RlOgo+ID4gUmVt b3ZlIHJlbGVhc2Uvb3V0cHV0L3JldGlyZSBmZW5jZXMgZnJvbSB0aGUgZHB1IGRyaXZlci4gVGhl c2UgYXJlCj4gPiBhbHJlYWR5IGF2YWlsYWJsZSB2aWEgZHJtIGNvcmUncyBPVVRfRkVOQ0UgcHJv cGVydHkuCj4gPiAKPiA+IENoYW5nZS1JZDogSWQ0MjM4ZDBiNTQ1N2YyYzhlZTJlODdiYjc4MTRl MTg1MGE1NzM2MjMKPiA+IFNpZ25lZC1vZmYtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21p dW0ub3JnPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nv bm5lY3Rvci5jIHwgIDY2ICstLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY29ubmVjdG9yLmggfCAgMjMgLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2NydGMuYyAgICAgIHwgMTc4ICsrKy0tLS0tLS0tLS0tLS0tLQo+ID4gIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggICAgICB8ICAyOCAtLS0KPiA+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jICAgfCAgIDMgLQo+ID4g IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmggICB8ICAgNCArLQo+ ID4gIC4uLi9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oICB8ICAgOCAt Cj4gPiAgLi4uL2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfY21kLmMgIHwgIDcz ICstLS0tLS0KPiA+ICAuLi4vZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQu YyAgfCAgMTkgLS0KPiA+ICAuLi4vZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c193 Yi5jICAgfCAgMTIgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21z LmMgICAgICAgfCAgMzAgLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAg ICAgICAgICAgICAgIHwgICAzIC0KPiA+ICAxMiBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25z KCspLCA0MTEgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jCj4gPiBpbmRleCA1N2I4NjI3ZWY0MTguLmNjNWJm YTg2MmNiNyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9jb25uZWN0b3IuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2Nvbm5lY3Rvci5jCj4gPiBAQCAtNTIxLDcgKzUyMSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jb25u ZWN0b3JfZGVzdHJveShzdHJ1Y3QKPiA+IGRybV9jb25uZWN0b3IKPiA+ICpjb25uZWN0b3IpCj4g PiAgCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY19jb25uLT5ibF9kZXZpY2UpOwo+ID4g IAlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKPiA+ICAJbXV0ZXhfZGVzdHJv eSgmY19jb25uLT5sb2NrKTsKPiA+IC0JZHB1X2ZlbmNlX2RlaW5pdCgmY19jb25uLT5yZXRpcmVf ZmVuY2UpOwo+ID4gIAlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKPiA+ICAJa2Zy ZWUoY19jb25uKTsKPiA+ICB9Cj4gPiBAQCAtOTA2LDEyICs5MDUsOSBAQCBzdGF0aWMgaW50IGRw dV9jb25uZWN0b3JfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QKPiA+IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwKPiA+ICAJY19zdGF0ZSA9IHRvX2RwdV9jb25uZWN0b3Jfc3RhdGUoc3RhdGUp Owo+ID4gCj4gPiAgCWlkeCA9IG1zbV9wcm9wZXJ0eV9pbmRleCgmY19jb25uLT5wcm9wZXJ0eV9p bmZvLCBwcm9wZXJ0eSk7Cj4gPiAtCWlmIChpZHggPT0gQ09OTkVDVE9SX1BST1BfUkVUSVJFX0ZF TkNFKQo+ID4gLQkJcmMgPSBkcHVfZmVuY2VfY3JlYXRlKCZjX2Nvbm4tPnJldGlyZV9mZW5jZSwg dmFsLCAwKTsKPiA+IC0JZWxzZQo+ID4gLQkJLyogZ2V0IGNhY2hlZCBwcm9wZXJ0eSB2YWx1ZSAq Lwo+ID4gLQkJcmMgPSBtc21fcHJvcGVydHlfYXRvbWljX2dldCgmY19jb25uLT5wcm9wZXJ0eV9p bmZvLAo+ID4gLQkJCQkmY19zdGF0ZS0+cHJvcGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+ ID4gKwkvKiBnZXQgY2FjaGVkIHByb3BlcnR5IHZhbHVlICovCj4gPiArCXJjID0gbXNtX3Byb3Bl cnR5X2F0b21pY19nZXQoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKPiA+ICsJCQkmY19zdGF0ZS0+ cHJvcGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+ID4gCj4gPiAgCS8qIGFsbG93IGZvciBj dXN0b20gb3ZlcnJpZGUgKi8KPiA+ICAJaWYgKGNfY29ubi0+b3BzLmdldF9wcm9wZXJ0eSkKPiA+ IEBAIC05MjMsMzkgKzkxOSw2IEBAIHN0YXRpYyBpbnQgZHB1X2Nvbm5lY3Rvcl9hdG9taWNfZ2V0 X3Byb3BlcnR5KHN0cnVjdAo+ID4gZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gIAlyZXR1 cm4gcmM7Cj4gPiAgfQo+ID4gCj4gPiAtdm9pZCBkcHVfY29ubmVjdG9yX3ByZXBhcmVfZmVuY2Uo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+IC17Cj4gPiAtCWlmICghY29ubmVj dG9yKSB7Cj4gPiAtCQlEUFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKPiA+IC0JCXJl dHVybjsKPiA+IC0JfQo+ID4gLQo+ID4gLQlkcHVfZmVuY2VfcHJlcGFyZSgmdG9fZHB1X2Nvbm5l Y3Rvcihjb25uZWN0b3IpLT5yZXRpcmVfZmVuY2UpOwo+ID4gLX0KPiA+IC0KPiA+IC12b2lkIGRw dV9jb25uZWN0b3JfY29tcGxldGVfY29tbWl0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCj4gPiAtCQlrdGltZV90IHRzKQo+ID4gLXsKPiA+IC0JaWYgKCFjb25uZWN0b3IpIHsKPiA+ IC0JCURQVV9FUlJPUigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwo+ID4gLQkJcmV0dXJuOwo+ID4g LQl9Cj4gPiAtCj4gPiAtCS8qIHNpZ25hbCBjb25uZWN0b3IncyByZXRpcmUgZmVuY2UgKi8KPiA+ IC0JZHB1X2ZlbmNlX3NpZ25hbCgmdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpLT5yZXRpcmVf ZmVuY2UsIHRzLAo+ID4gZmFsc2UpOwo+ID4gLX0KPiA+IC0KPiA+IC12b2lkIGRwdV9jb25uZWN0 b3JfY29tbWl0X3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiBrdGlt ZV90Cj4gPiB0cykKPiA+IC17Cj4gPiAtCWlmICghY29ubmVjdG9yKSB7Cj4gPiAtCQlEUFVfRVJS T1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKPiA+IC0JCXJldHVybjsKPiA+IC0JfQo+ID4gLQo+ ID4gLQkvKiBzaWduYWwgY29ubmVjdG9yJ3MgcmV0aXJlIGZlbmNlICovCj4gPiAtCWRwdV9mZW5j ZV9zaWduYWwoJnRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKS0+cmV0aXJlX2ZlbmNlLCB0cywK PiA+IHRydWUpOwo+ID4gLX0KPiA+IC0KPiA+ICBzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0 YXR1cwo+ID4gIGRwdV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsIGJvb2wgZm9yY2UpCj4gPiAgewo+ID4gQEAgLTEyMTQsMjYgKzExNzcsMTkgQEAgc3Ry dWN0IGRybV9jb25uZWN0b3IgKmRwdV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QKPiA+IGRybV9kZXZp Y2UgKmRldiwKPiA+ICAJCQkiY29ubiV1IiwKPiA+ICAJCQljX2Nvbm4tPmJhc2UuYmFzZS5pZCk7 Cj4gPiAKPiA+IC0JcmMgPSBkcHVfZmVuY2VfaW5pdCgmY19jb25uLT5yZXRpcmVfZmVuY2UsIGNf Y29ubi0+bmFtZSwKPiA+IC0JCQljX2Nvbm4tPmJhc2UuYmFzZS5pZCk7Cj4gPiAtCWlmIChyYykg ewo+ID4gLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBmZW5jZSwgJWRcbiIsIHJjKTsKPiA+ IC0JCWdvdG8gZXJyb3JfY2xlYW51cF9jb25uOwo+ID4gLQl9Cj4gPiAtCj4gPiAgCW11dGV4X2lu aXQoJmNfY29ubi0+bG9jayk7Cj4gPiAKPiA+ICAJcmMgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0 YWNoX2VuY29kZXIoJmNfY29ubi0+YmFzZSwgZW5jb2Rlcik7Cj4gPiAgCWlmIChyYykgewo+ID4g IAkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYXR0YWNoIGVuY29kZXIgdG8gY29ubmVjdG9yLCAlZFxu IiwKPiA+IHJjKTsKPiA+IC0JCWdvdG8gZXJyb3JfY2xlYW51cF9mZW5jZTsKPiA+ICsJCWdvdG8g ZXJyb3JfY2xlYW51cF9jb25uOwo+ID4gIAl9Cj4gPiAKPiA+ICAjaWZkZWYgQ09ORklHX0RSTV9N U01fRFNJX1NUQUdJTkcKPiA+ICAJcmMgPSBkcHVfYmFja2xpZ2h0X3NldHVwKGNfY29ubiwgZGV2 KTsKPiA+ICAJaWYgKHJjKSB7Cj4gPiAgCQlEUFVfRVJST1IoImZhaWxlZCB0byBzZXR1cCBiYWNr bGlnaHQsIHJjPSVkXG4iLCByYyk7Cj4gPiAtCQlnb3RvIGVycm9yX2NsZWFudXBfZmVuY2U7Cj4g PiArCQlnb3RvIGVycm9yX2NsZWFudXBfY29ubjsKPiA+ICAJfQo+ID4gICNlbmRpZgo+ID4gCj4g PiBAQCAtMTI0OCw3ICsxMjA0LDcgQEAgc3RydWN0IGRybV9jb25uZWN0b3IgKmRwdV9jb25uZWN0 b3JfaW5pdChzdHJ1Y3QKPiA+IGRybV9kZXZpY2UgKmRldiwKPiA+ICAJCWlmICghaW5mbykgewo+ ID4gIAkJCURQVV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIGluZm8gYnVmZmVyXG4iKTsKPiA+ ICAJCQlyYyA9IC1FTk9NRU07Cj4gPiAtCQkJZ290byBlcnJvcl9jbGVhbnVwX2ZlbmNlOwo+ID4g KwkJCWdvdG8gZXJyb3JfY2xlYW51cF9jb25uOwo+ID4gIAkJfQo+ID4gCj4gPiAgCQlkcHVfa21z X2luZm9fcmVzZXQoaW5mbyk7Cj4gPiBAQCAtMTI1Niw3ICsxMjEyLDcgQEAgc3RydWN0IGRybV9j b25uZWN0b3IgKmRwdV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QKPiA+IGRybV9kZXZpY2UgKmRldiwK PiA+ICAJCWlmIChyYykgewo+ID4gIAkJCURQVV9FUlJPUigicG9zdC1pbml0IGZhaWxlZCwgJWRc biIsIHJjKTsKPiA+ICAJCQlrZnJlZShpbmZvKTsKPiA+IC0JCQlnb3RvIGVycm9yX2NsZWFudXBf ZmVuY2U7Cj4gPiArCQkJZ290byBlcnJvcl9jbGVhbnVwX2Nvbm47Cj4gPiAgCQl9Cj4gPiAKPiA+ ICAJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKPiA+ IEBAIC0xMzEwLDEwICsxMjY2LDYgQEAgc3RydWN0IGRybV9jb25uZWN0b3IgKmRwdV9jb25uZWN0 b3JfaW5pdChzdHJ1Y3QKPiA+IGRybV9kZXZpY2UgKmRldiwKPiA+ICAJCQkJJmNfY29ubi0+cHJv cGVydHlfaW5mbywgImRwdV9kcm1fcm9pX3YxIiwKPiA+IDB4MCwKPiA+ICAJCQkJMCwgfjAsIDAs IENPTk5FQ1RPUl9QUk9QX1JPSV9WMSk7Cj4gPiAgCX0KPiA+IC0KPiA+IC0JbXNtX3Byb3BlcnR5 X2luc3RhbGxfcmFuZ2UoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgIlJFVElSRV9GRU5DRSIsCj4g PiAtCQkJMHgwLCAwLCBJTlJfT1BFTl9NQVgsIDAsCj4gPiBDT05ORUNUT1JfUFJPUF9SRVRJUkVf RkVOQ0UpOwo+ID4gLQo+ID4gIAltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmY19jb25uLT5w cm9wZXJ0eV9pbmZvLCAiYXV0b3JlZnJlc2giLAo+ID4gIAkJCTB4MCwgMCwgQVVUT1JFRlJFU0hf TUFYX0ZSQU1FX0NOVCwgMCwKPiA+ICAJCQlDT05ORUNUT1JfUFJPUF9BVVRPUkVGUkVTSCk7Cj4g PiBAQCAtMTM1NCwxMCArMTMwNiw4IEBAIHN0cnVjdCBkcm1fY29ubmVjdG9yICpkcHVfY29ubmVj dG9yX2luaXQoc3RydWN0Cj4gPiBkcm1fZGV2aWNlICpkZXYsCj4gPiAgCQlkcm1fcHJvcGVydHlf YmxvYl9wdXQoY19jb25uLT5ibG9iX2RpdGhlcik7Cj4gPiAKPiA+ICAJbXNtX3Byb3BlcnR5X2Rl c3Ryb3koJmNfY29ubi0+cHJvcGVydHlfaW5mbyk7Cj4gPiAtZXJyb3JfY2xlYW51cF9mZW5jZToK PiA+IC0JbXV0ZXhfZGVzdHJveSgmY19jb25uLT5sb2NrKTsKPiA+IC0JZHB1X2ZlbmNlX2RlaW5p dCgmY19jb25uLT5yZXRpcmVfZmVuY2UpOwo+ID4gIGVycm9yX2NsZWFudXBfY29ubjoKPiA+ICsJ bXV0ZXhfZGVzdHJveSgmY19jb25uLT5sb2NrKTsKPiA+ICAJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVw KCZjX2Nvbm4tPmJhc2UpOwo+ID4gIGVycm9yX2ZyZWVfY29ubjoKPiA+ICAJa2ZyZWUoY19jb25u KTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29u bmVjdG9yLmgKPiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rv ci5oCj4gPiBpbmRleCBmNmY0ODM3ZDEzNTkuLmZkYjRkODc2NjU0OSAxMDA2NDQKPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaAo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5oCj4gPiBAQCAtMjEs NyArMjEsNiBAQAo+ID4gICNpbmNsdWRlICJtc21fZHJ2LmgiCj4gPiAgI2luY2x1ZGUgIm1zbV9w cm9wLmgiCj4gPiAgI2luY2x1ZGUgImRwdV9rbXMuaCIKPiA+IC0jaW5jbHVkZSAiZHB1X2ZlbmNl LmgiCj4gPiAKPiA+ICAjZGVmaW5lIERQVV9DT05ORUNUT1JfTkFNRV9TSVpFCTE2Cj4gPiAKPiA+ IEBAIC0yNDcsNyArMjQ2LDYgQEAgc3RydWN0IGRwdV9jb25uZWN0b3JfZXZ0IHsKPiA+ICAgKiBA bW11X3Vuc2VjdXJlOiBNTVUgaWQgZm9yIHVuc2VjdXJlIGJ1ZmZlcnMKPiA+ICAgKiBAbmFtZTog QVNDSUkgbmFtZSBvZiBjb25uZWN0b3IKPiA+ICAgKiBAbG9jazogTXV0ZXggbG9jayBvYmplY3Qg Zm9yIHRoaXMgc3RydWN0dXJlCj4gPiAtICogQHJldGlyZV9mZW5jZTogUmV0aXJlIGZlbmNlIGNv bnRleHQgcmVmZXJlbmNlCj4gPiAgICogQG9wczogTG9jYWwgY2FsbGJhY2sgZnVuY3Rpb24gcG9p bnRlciB0YWJsZQo+ID4gICAqIEBkcG1zX21vZGU6IERQTVMgcHJvcGVydHkgc2V0dGluZyBmcm9t IHVzZXIgc3BhY2UKPiA+ICAgKiBAbHBfbW9kZTogTFAgcHJvcGVydHkgc2V0dGluZyBmcm9tIHVz ZXIgc3BhY2UKPiA+IEBAIC0yNzQsNyArMjcyLDYgQEAgc3RydWN0IGRwdV9jb25uZWN0b3Igewo+ ID4gIAljaGFyIG5hbWVbRFBVX0NPTk5FQ1RPUl9OQU1FX1NJWkVdOwo+ID4gCj4gPiAgCXN0cnVj dCBtdXRleCBsb2NrOwo+ID4gLQlzdHJ1Y3QgZHB1X2ZlbmNlX2NvbnRleHQgcmV0aXJlX2ZlbmNl Owo+ID4gIAlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMgb3BzOwo+ID4gIAlpbnQgZHBtc19tb2Rl Owo+ID4gIAlpbnQgbHBfbW9kZTsKPiA+IEBAIC00NDcsMjYgKzQ0NCw2IEBAIHN0cnVjdCBkcm1f Y29ubmVjdG9yICpkcHVfY29ubmVjdG9yX2luaXQoc3RydWN0Cj4gPiBkcm1fZGV2aWNlICpkZXYs Cj4gPiAgCQlpbnQgY29ubmVjdG9yX3BvbGwsCj4gPiAgCQlpbnQgY29ubmVjdG9yX3R5cGUpOwo+ ID4gCj4gPiAtLyoqCj4gPiAtICogZHB1X2Nvbm5lY3Rvcl9wcmVwYXJlX2ZlbmNlIC0gcHJlcGFy ZSBmZW5jZSBzdXBwb3J0IGZvciBjdXJyZW50Cj4gPiBjb21taXQKPiA+IC0gKiBAY29ubmVjdG9y OiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igb2JqZWN0Cj4gPiAtICovCj4gPiAtdm9pZCBkcHVf Y29ubmVjdG9yX3ByZXBhcmVfZmVuY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7 Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHB1X2Nvbm5lY3Rvcl9jb21wbGV0ZV9jb21taXQgLSBz aWduYWwgY29tcGxldGlvbiBvZiBjdXJyZW50IGNvbW1pdAo+ID4gLSAqIEBjb25uZWN0b3I6IFBv aW50ZXIgdG8gZHJtIGNvbm5lY3RvciBvYmplY3QKPiA+IC0gKiBAdHM6IHRpbWVzdGFtcCB0byBi ZSB1cGRhdGVkIGluIHRoZSBmZW5jZSBzaWduYWxsaW5nCj4gPiAtICovCj4gPiAtdm9pZCBkcHVf Y29ubmVjdG9yX2NvbXBsZXRlX2NvbW1pdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAo+ID4ga3RpbWVfdCB0cyk7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHB1X2Nvbm5lY3Rvcl9j b21taXRfcmVzZXQgLSByZXNldCB0aGUgY29tcGxldGlvbiBzaWduYWwKPiA+IC0gKiBAY29ubmVj dG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igb2JqZWN0Cj4gPiAtICogQHRzOiB0aW1lc3Rh bXAgdG8gYmUgdXBkYXRlZCBpbiB0aGUgZmVuY2Ugc2lnbmFsbGluZwo+ID4gLSAqLwo+ID4gLXZv aWQgZHB1X2Nvbm5lY3Rvcl9jb21taXRfcmVzZXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPiA+IGt0aW1lX3QKPiA+IHRzKTsKPiA+IC0KPiA+ICAvKioKPiA+ICAgKiBkcHVfY29u bmVjdG9yX2dldF9pbmZvIC0gcXVlcnkgZGlzcGxheSBzcGVjaWZpYyBpbmZvcm1hdGlvbgo+ID4g ICAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBvYmplY3QKPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCj4gPiBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKPiA+IGluZGV4IGEyNjEwMjFl NWRlYi4uMmQ0NDk4OWFkZTdhIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NydGMuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NydGMuYwo+ID4gQEAgLTYyOSw3ICs2MjksNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0 Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICAJZHB1X2NwX2NydGNfZGVzdHJv eV9wcm9wZXJ0aWVzKGNydGMpOwo+ID4gIAlfZHB1X2NydGNfZGVzdHJveV9kZXN0X3NjYWxlcihk cHVfY3J0Yyk7Cj4gPiAKPiA+IC0JZHB1X2ZlbmNlX2RlaW5pdCgmZHB1X2NydGMtPm91dHB1dF9m ZW5jZSk7Cj4gPiAgCV9kcHVfY3J0Y19kZWluaXRfZXZlbnRzKGRwdV9jcnRjKTsKPiA+IAo+ID4g IAlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwo+ID4gQEAgLTE2NzEsNjUgKzE2NzAsNiBAQCBzdGF0 aWMgdm9pZCBfZHB1X2NydGNfZGVzdF9zY2FsZXJfc2V0dXAoc3RydWN0Cj4gPiBkcm1fY3J0YyAq Y3J0YykKPiA+ICAJfQo+ID4gIH0KPiA+IAo+ID4gLXZvaWQgZHB1X2NydGNfcHJlcGFyZV9jb21t aXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpv bGRfc3RhdGUpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owo+ID4gLQlzdHJ1 Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+ID4gLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0 ZTsKPiA+IC0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47Cj4gPiAtCXN0cnVjdCBkcm1fY29u bmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7Cj4gPiAtCXN0cnVjdCBkcHVfY3J0Y19yZXRpcmVf ZXZlbnQgKnJldGlyZV9ldmVudCA9IE5VTEw7Cj4gPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4g PiAtCWludCBpOwo+ID4gLQo+ID4gLQlpZiAoIWNydGMgfHwgIWNydGMtPnN0YXRlKSB7Cj4gPiAt CQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7Cj4gPiAtCQlyZXR1cm47Cj4gPiAtCX0KPiA+ IC0KPiA+IC0JZGV2ID0gY3J0Yy0+ZGV2Owo+ID4gLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNy dGMpOwo+ID4gLQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4gPiAt CURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKGNydGMpKTsKPiA+IC0KPiA+IC0JLyogaWRlbnRpZnkg Y29ubmVjdG9ycyBhdHRhY2hlZCB0byB0aGlzIGNydGMgKi8KPiA+IC0JY3N0YXRlLT5udW1fY29u bmVjdG9ycyA9IDA7Cj4gPiAtCj4gPiAtCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRl diwgJmNvbm5faXRlcik7Cj4gPiAtCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uLCAm Y29ubl9pdGVyKQo+ID4gLQkJaWYgKGNvbm4tPnN0YXRlICYmIGNvbm4tPnN0YXRlLT5jcnRjID09 IGNydGMgJiYKPiA+IC0JCQkJY3N0YXRlLT5udW1fY29ubmVjdG9ycyA8IE1BWF9DT05ORUNUT1JT KSB7Cj4gPiAtCQkJY3N0YXRlLT5jb25uZWN0b3JzW2NzdGF0ZS0+bnVtX2Nvbm5lY3RvcnMrK10g PQo+ID4gY29ubjsKPiA+IC0JCQlkcHVfY29ubmVjdG9yX3ByZXBhcmVfZmVuY2UoY29ubik7Cj4g PiAtCQl9Cj4gPiAtCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKPiA+ IC0KPiA+IC0JZm9yIChpID0gMDsgaSA8IERQVV9DUlRDX0ZSQU1FX0VWRU5UX1NJWkU7IGkrKykg ewo+ID4gLQkJcmV0aXJlX2V2ZW50ID0gJmRwdV9jcnRjLT5yZXRpcmVfZXZlbnRzW2ldOwo+ID4g LQkJaWYgKGxpc3RfZW1wdHkoJnJldGlyZV9ldmVudC0+bGlzdCkpCj4gPiAtCQkJYnJlYWs7Cj4g PiAtCQlyZXRpcmVfZXZlbnQgPSBOVUxMOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCWlmIChyZXRpcmVf ZXZlbnQpIHsKPiA+IC0JCXJldGlyZV9ldmVudC0+bnVtX2Nvbm5lY3RvcnMgPSBjc3RhdGUtPm51 bV9jb25uZWN0b3JzOwo+ID4gLQkJZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX2Nvbm5lY3Rv cnM7IGkrKykKPiA+IC0JCQlyZXRpcmVfZXZlbnQtPmNvbm5lY3RvcnNbaV0gPQo+ID4gY3N0YXRl LT5jb25uZWN0b3JzW2ldOwo+ID4gLQo+ID4gLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRwdV9jcnRj LT5zcGluX2xvY2ssIGZsYWdzKTsKPiA+IC0JCWxpc3RfYWRkX3RhaWwoJnJldGlyZV9ldmVudC0+ bGlzdCwKPiA+IC0KPiA+ICZkcHVfY3J0Yy0+cmV0aXJlX2V2ZW50X2xpc3QpOwo+ID4gLQkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZHB1X2NydGMtPnNwaW5fbG9jaywgZmxhZ3MpOwo+ID4gLQl9 IGVsc2Ugewo+ID4gLQkJRFBVX0VSUk9SKCJjcnRjJWQgcmV0aXJlIGV2ZW50IG92ZXJmbG93XG4i LAo+ID4gY3J0Yy0+YmFzZS5pZCk7Cj4gPiAtCQlEUFVfRVZUMzIoRFJNSUQoY3J0YyksIERQVV9F VlRMT0dfRVJST1IpOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCS8qIHByZXBhcmUgbWFpbiBvdXRwdXQg ZmVuY2UgKi8KPiA+IC0JZHB1X2ZlbmNlX3ByZXBhcmUoJmRwdV9jcnRjLT5vdXRwdXRfZmVuY2Up Owo+ID4gLX0KPiA+IC0KPiA+ICAvKioKPiA+ICAgKiAgX2RwdV9jcnRjX2NvbXBsZXRlX2ZsaXAg LSBzaWduYWwgcGVuZGluZyBwYWdlX2ZsaXAgZXZlbnRzCj4gPiAgICogQW55IHBlbmRpbmcgdmJs YW5rIGV2ZW50cyBhcmUgYWRkZWQgdG8gdGhlIHZibGFua19ldmVudF9saXN0Cj4gPiBAQCAtMTc5 OSw0MSArMTczOSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX3ZibGFua19jYih2b2lkICpkYXRh KQo+ID4gIAlEUFVfRVZUMzJfVkVSQk9TRShEUk1JRChjcnRjKSk7Cj4gPiAgfQo+ID4gCj4gPiAt c3RhdGljIHZvaWQgX2RwdV9jcnRjX3JldGlyZV9ldmVudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMs IGt0aW1lX3QgdHMpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHB1X2NydGNfcmV0aXJlX2V2ZW50ICpy ZXRpcmVfZXZlbnQ7Cj4gPiAtCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Cj4gPiAtCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4gPiAtCWludCBpOwo+ID4gLQo+ID4gLQlpZiAoIWNydGMpIHsKPiA+ IC0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbVxuIik7Cj4gPiAtCQlyZXR1cm47Cj4gPiAtCX0K PiA+IC0KPiA+IC0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPiA+IC0Jc3Bpbl9sb2Nr X2lycXNhdmUoJmRwdV9jcnRjLT5zcGluX2xvY2ssIGZsYWdzKTsKPiA+IC0JcmV0aXJlX2V2ZW50 ID0KPiA+IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmZHB1X2NydGMtPnJldGlyZV9ldmVudF9s aXN0LAo+ID4gLQkJCQlzdHJ1Y3QgZHB1X2NydGNfcmV0aXJlX2V2ZW50LCBsaXN0KTsKPiA+IC0J aWYgKHJldGlyZV9ldmVudCkKPiA+IC0JCWxpc3RfZGVsX2luaXQoJnJldGlyZV9ldmVudC0+bGlz dCk7Cj4gPiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRwdV9jcnRjLT5zcGluX2xvY2ssIGZs YWdzKTsKPiA+IC0KPiA+IC0JaWYgKCFyZXRpcmVfZXZlbnQpIHsKPiA+IC0JCURQVV9FUlJPUigi Y3J0YyVkIHJldGlyZSBldmVudCB3aXRob3V0IGtpY2tvZmZcbiIsCj4gPiAtCj4gPiBjcnRjLT5i YXNlLmlkKTsKPiA+IC0JCURQVV9FVlQzMihEUk1JRChjcnRjKSwgRFBVX0VWVExPR19FUlJPUik7 Cj4gPiAtCQlyZXR1cm47Cj4gPiAtCX0KPiA+IC0KPiA+IC0JRFBVX0FUUkFDRV9CRUdJTigic2ln bmFsX3JldGlyZV9mZW5jZSIpOwo+ID4gLQlmb3IgKGkgPSAwOyAoaSA8IHJldGlyZV9ldmVudC0+ bnVtX2Nvbm5lY3RvcnMpICYmCj4gPiAtCQkJCQlyZXRpcmVfZXZlbnQtPmNvbm5lY3RvcnNbaV07 ICsraSkKPiA+IC0JCWRwdV9jb25uZWN0b3JfY29tcGxldGVfY29tbWl0KAo+ID4gLQkJCQkJcmV0 aXJlX2V2ZW50LT5jb25uZWN0b3JzW2ldLCB0cyk7Cj4gPiAtCURQVV9BVFJBQ0VfRU5EKCJzaWdu YWxfcmV0aXJlX2ZlbmNlIik7Cj4gPiAtfQo+ID4gLQo+ID4gIC8qIF9kcHVfY3J0Y19pZGxlX25v dGlmeSAtIHNpZ25hbCBpZGxlIHRpbWVvdXQgdG8gY2xpZW50ICovCj4gPiAgc3RhdGljIHZvaWQg X2RwdV9jcnRjX2lkbGVfbm90aWZ5KHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMpCj4gPiAgewo+ ID4gQEAgLTE5NDUsMTYgKzE4NTAsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19mcmFtZV9ldmVu dF93b3JrKHN0cnVjdAo+ID4ga3RocmVhZF93b3JrICp3b3JrKQo+ID4gIAkJCWZyYW1lX2RvbmUg PSB0cnVlOwo+ID4gIAl9Cj4gPiAKPiA+IC0JaWYgKGZldmVudC0+ZXZlbnQgJiBEUFVfRU5DT0RF Ul9GUkFNRV9FVkVOVF9TSUdOQUxfUkVMRUFTRV9GRU5DRSkKPiA+IHsKPiA+IC0JCURQVV9BVFJB Q0VfQkVHSU4oInNpZ25hbF9yZWxlYXNlX2ZlbmNlIik7Cj4gPiAtCQlkcHVfZmVuY2Vfc2lnbmFs KCZkcHVfY3J0Yy0+b3V0cHV0X2ZlbmNlLCBmZXZlbnQtPnRzLAo+ID4gZmFsc2UpOwo+ID4gLQkJ RFBVX0FUUkFDRV9FTkQoInNpZ25hbF9yZWxlYXNlX2ZlbmNlIik7Cj4gPiAtCX0KPiA+IC0KPiA+ IC0JaWYgKGZldmVudC0+ZXZlbnQgJiBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9TSUdOQUxfUkVU SVJFX0ZFTkNFKQo+ID4gLQkJLyogdGhpcyBhcGkgc2hvdWxkIGJlIGNhbGxlZCB3aXRob3V0IHNw aW5fbG9jayAqLwo+ID4gLQkJX2RwdV9jcnRjX3JldGlyZV9ldmVudChjcnRjLCBmZXZlbnQtPnRz KTsKPiA+IC0KPiA+ICAJaWYgKGZldmVudC0+ZXZlbnQgJiBEUFVfRU5DT0RFUl9GUkFNRV9FVkVO VF9QQU5FTF9ERUFEKQo+ID4gIAkJRFBVX0VSUk9SKCJjcnRjJWQgdHM6JWxsZCByZWNlaXZlZCBw YW5lbCBkZWFkIGV2ZW50XG4iLAo+ID4gIAkJCQljcnRjLT5iYXNlLmlkLCBrdGltZV90b19ucyhm ZXZlbnQtPnRzKSk7Cj4gPiBAQCAtMTk3MSwxMSArMTg2NiwxMSBAQCBzdGF0aWMgdm9pZCBkcHVf Y3J0Y19mcmFtZV9ldmVudF93b3JrKHN0cnVjdAo+ID4ga3RocmVhZF93b3JrICp3b3JrKQo+ID4g IC8qCj4gPiAgICogZHB1X2NydGNfZnJhbWVfZXZlbnRfY2IgLSBjcnRjIGZyYW1lIGV2ZW50IGNh bGxiYWNrIEFQSS4gQ1JUQyBtb2R1bGUKPiA+ICAgKiByZWdpc3RlcnMgdGhpcyBBUEkgdG8gZW5j b2RlciBmb3IgYWxsIGZyYW1lIGV2ZW50IGNhbGxiYWNrcyBsaWtlCj4gPiAtICogcmVsZWFzZV9m ZW5jZSwgcmV0aXJlX2ZlbmNlLCBmcmFtZV9lcnJvciwgZnJhbWVfZG9uZSwgaWRsZV90aW1lb3V0 LAo+ID4gLSAqIGV0Yy4gRW5jb2RlciBtYXkgY2FsbCBkaWZmZXJlbnQgZXZlbnRzIGZyb20gZGlm ZmVyZW50IGNvbnRleHQgLSBJUlEsCj4gPiAtICogdXNlciB0aHJlYWQsIGNvbW1pdF90aHJlYWQs IGV0Yy4gRWFjaCBldmVudCBzaG91bGQgYmUgY2FyZWZ1bGx5Cj4gPiAtICogcmV2aWV3ZWQgYW5k IHNob3VsZCBiZSBwcm9jZXNzZWQgaW4gcHJvcGVyIHRhc2sgY29udGV4dCB0byBhdm9pZAo+ID4g c2NoZWR1bGluZwo+ID4gLSAqIGRlbGF5IG9yIHByb3Blcmx5IG1hbmFnZSB0aGUgaXJxIGNvbnRl eHQncyBib3R0b20gaGFsZiBwcm9jZXNzaW5nLgo+ID4gKyAqIGZyYW1lX2Vycm9yLCBmcmFtZV9k b25lLCBpZGxlX3RpbWVvdXQsIGV0Yy4gRW5jb2RlciBtYXkgY2FsbAo+ID4gZGlmZmVyZW50Cj4g PiBldmVudHMKPiA+ICsgKiBmcm9tIGRpZmZlcmVudCBjb250ZXh0IC0gSVJRLCB1c2VyIHRocmVh ZCwgY29tbWl0X3RocmVhZCwgZXRjLiBFYWNoCj4gPiBldmVudAo+ID4gKyAqIHNob3VsZCBiZSBj YXJlZnVsbHkgcmV2aWV3ZWQgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgaW4gcHJvcGVyIHRhc2sK PiA+IGNvbnRleHQKPiA+ICsgKiB0byBhdm9pZCBzY2hlZHVsaW4gZGVsYXkgb3IgcHJvcGVybHkg bWFuYWdlIHRoZSBpcnEgY29udGV4dCdzIGJvdHRvbQo+ID4gaGFsZgo+ID4gKyAqIHByb2Nlc3Np bmcuCj4gPiAgICovCj4gPiAgc3RhdGljIHZvaWQgZHB1X2NydGNfZnJhbWVfZXZlbnRfY2Iodm9p ZCAqZGF0YSwgdTMyIGV2ZW50KQo+ID4gIHsKPiA+IEBAIC0zNDg0LDE0ICszMzc5LDYgQEAgc3Rh dGljIHZvaWQgZHB1X2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMKPiA+ICpjcnRjKQo+ID4g IAkJZHB1X3Bvd2VyX2hhbmRsZV91bnJlZ2lzdGVyX2V2ZW50KCZwcml2LT5waGFuZGxlLAo+ID4g IAkJCQlkcHVfY3J0Yy0+cG93ZXJfZXZlbnQpOwo+ID4gCj4gPiAtCS8qKgo+ID4gLQkgKiBBbGwg Y2FsbGJhY2tzIGFyZSB1bnJlZ2lzdGVyZWQgYW5kIGZyYW1lIGRvbmUgd2FpdHMgYXJlCj4gPiBj b21wbGV0ZQo+ID4gLQkgKiBhdCB0aGlzIHBvaW50LiBObyBidWZmZXJzIGFyZSBhY2Nlc3NlZCBi eSBoYXJkd2FyZS4KPiA+IC0JICogcmVzZXQgdGhlIGZlbmNlIHRpbWVsaW5lIGlmIHRoZXJlIGlz IGFueSBpc3N1ZS4KPiA+IC0JICovCj4gPiAtCWRwdV9mZW5jZV9zaWduYWwoJmRwdV9jcnRjLT5v dXRwdXRfZmVuY2UsIGt0aW1lX2dldCgpLCB0cnVlKTsKPiA+IC0JZm9yIChpID0gMDsgaSA8IGNz dGF0ZS0+bnVtX2Nvbm5lY3RvcnM7ICsraSkKPiA+IC0JCWRwdV9jb25uZWN0b3JfY29tbWl0X3Jl c2V0KGNzdGF0ZS0+Y29ubmVjdG9yc1tpXSwKPiA+IGt0aW1lX2dldCgpKTsKPiA+IAo+ID4gIAlt ZW1zZXQoZHB1X2NydGMtPm1peGVycywgMCwgc2l6ZW9mKGRwdV9jcnRjLT5taXhlcnMpKTsKPiA+ ICAJZHB1X2NydGMtPm51bV9taXhlcnMgPSAwOwo+ID4gQEAgLTM3MDMsNiArMzU5MCw4IEBAIHN0 YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0Ywo+ID4gKmNydGMs Cj4gPiAgCWludCBtdWx0aXJlY3RfY291bnQgPSAwOwo+ID4gIAljb25zdCBzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpwaXBlX3N0YWdlZFtTU1BQX01BWF07Cj4gPiAgCWludCBsZWZ0X3pwb3NfY250 ID0gMCwgcmlnaHRfenBvc19jbnQgPSAwOwo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0 X2l0ZXIgY29ubl9pdGVyOwo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKPiA+IAo+ ID4gIAlpZiAoIWNydGMpIHsKPiA+ICAJCURQVV9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKPiA+ IEBAIC0zOTU2LDYgKzM4NDUsMTYgQEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfY2hlY2so c3RydWN0IGRybV9jcnRjCj4gPiAqY3J0YywKPiA+ICAJCWdvdG8gZW5kOwo+ID4gIAl9Cj4gPiAK PiA+ICsJLyogaWRlbnRpZnkgY29ubmVjdG9ycyBhdHRhY2hlZCB0byB0aGlzIGNydGMgKi8KPiA+ ICsJY3N0YXRlLT5udW1fY29ubmVjdG9ycyA9IDA7Cj4gPiArCWRybV9jb25uZWN0b3JfbGlzdF9p dGVyX2JlZ2luKGNydGMtPmRldiwgJmNvbm5faXRlcik7Cj4gPiArCWRybV9mb3JfZWFjaF9jb25u ZWN0b3JfaXRlcihjb25uLCAmY29ubl9pdGVyKQo+ID4gKwkJaWYgKGNvbm4tPnN0YXRlICYmIGNv bm4tPnN0YXRlLT5jcnRjID09IGNydGMgJiYKPiA+ICsJCQkJY3N0YXRlLT5udW1fY29ubmVjdG9y cyA8IE1BWF9DT05ORUNUT1JTKSB7Cj4gPiArCQkJY3N0YXRlLT5jb25uZWN0b3JzW2NzdGF0ZS0+ bnVtX2Nvbm5lY3RvcnMrK10gPQo+ID4gY29ubjsKPiA+ICsJCX0KPiA+ICsJZHJtX2Nvbm5lY3Rv cl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwo+ID4gKwo+IAo+IElzIHRoaXMgaHVuayByZWxh dGVkIHRvIHRoaXMgY2hhbmdlPwo+IAoKVGhpcyBjb2RlIGNhbWUgZnJvbSBkcHVfY3J0Y19wcmVw YXJlX2NvbW1pdC4gV2UgdXNlIGNzdGF0ZS0+bnVtX2Nvbm5lY3RvcnMKZWxzZXdoZXJlLCBzbyBp dCBuZWVkZWQgdG8gYmUgcHJlc2VydmVkLgoKU2VhbgoKPiA+ICBlbmQ6Cj4gPiAgCV9kcHVfY3J0 Y19ycF9mcmVlX3VudXNlZCgmY3N0YXRlLT5ycCk7Cj4gPiAgCXJldHVybiByYzsKPiA+IEBAIC00 MDM0LDEzICszOTMzLDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVz KHN0cnVjdAo+ID4gZHJtX2NydGMgKmNydGMsCj4gPiAgCQkiaW5wdXRfZmVuY2VfdGltZW91dCIs IDB4MCwgMCwKPiA+IERQVV9DUlRDX01BWF9JTlBVVF9GRU5DRV9USU1FT1VULAo+ID4gIAkJRFBV X0NSVENfSU5QVVRfRkVOQ0VfVElNRU9VVCwKPiA+IENSVENfUFJPUF9JTlBVVF9GRU5DRV9USU1F T1VUKTsKPiA+IAo+ID4gLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnBy b3BlcnR5X2luZm8sCj4gPiAib3V0cHV0X2ZlbmNlIiwKPiA+IC0JCQkweDAsIDAsIElOUl9PUEVO X01BWCwgMHgwLAo+ID4gQ1JUQ19QUk9QX09VVFBVVF9GRU5DRSk7Cj4gPiAtCj4gPiAtCW1zbV9w cm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiA+IC0JCQki b3V0cHV0X2ZlbmNlX29mZnNldCIsIDB4MCwgMCwgMSwgMCwKPiA+IC0JCQlDUlRDX1BST1BfT1VU UFVUX0ZFTkNFX09GRlNFVCk7Cj4gPiAtCj4gPiAgCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3Jhbmdl KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiA+ICAJCQkiY29yZV9jbGsiLCAweDAsIDAsIFU2 NF9NQVgsCj4gPiAgCQkJZHB1X2ttcy0+cGVyZi5tYXhfY29yZV9jbGtfcmF0ZSwKPiA+IEBAIC00 MzQyLDI5ICs0MjM0LDEyIEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0 eShzdHJ1Y3QKPiA+IGRybV9jcnRjICpjcnRjLAo+ID4gIAkJfQo+ID4gCj4gPiAgCQlpID0gbXNt X3Byb3BlcnR5X2luZGV4KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiA+IHByb3BlcnR5KTsK PiA+IC0JCWlmIChpID09IENSVENfUFJPUF9PVVRQVVRfRkVOQ0UpIHsKPiA+IC0JCQl1aW50MzJf dCBvZmZzZXQgPSBkcHVfY3J0Y19nZXRfcHJvcGVydHkoY3N0YXRlLAo+ID4gLQkJCQkJQ1JUQ19Q Uk9QX09VVFBVVF9GRU5DRV9PRkZTRVQpOwo+ID4gLQo+ID4gLQkJCS8qKgo+ID4gLQkJCSAqIHNl dCB0aGUgb2Zmc2V0IHRvIDAgb25seSBmb3IgY21kIG1vZGUgcGFuZWxzLAo+ID4gc28KPiA+IC0J CQkgKiB0aGUgcmVsZWFzZSBmZW5jZSBmb3IgdGhlIGN1cnJlbnQgZnJhbWUgY2FuIGJlCj4gPiAt CQkJICogdHJpZ2dlcmVkIHJpZ2h0IGFmdGVyIFBQX0RPTkUgaW50ZXJydXB0Lgo+ID4gLQkJCSAq Lwo+ID4gLQkJCW9mZnNldCA9IGlzX2NtZCA/IDAgOiAob2Zmc2V0ICsgY29ubl9vZmZzZXQpOwo+ ID4gLQo+ID4gLQkJCXJldCA9IGRwdV9mZW5jZV9jcmVhdGUoJmRwdV9jcnRjLT5vdXRwdXRfZmVu Y2UsCj4gPiB2YWwsCj4gPiAtCQkJCQkJCQlvZmZzZXQpOwo+ID4gLQkJCWlmIChyZXQpCj4gPiAt CQkJCURQVV9FUlJPUigiZmVuY2UgY3JlYXRlIGZhaWxlZFxuIik7Cj4gPiAtCQl9IGVsc2Ugewo+ ID4gLQkJCXJldCA9Cj4gPiBtc21fcHJvcGVydHlfYXRvbWljX2dldCgmZHB1X2NydGMtPnByb3Bl cnR5X2luZm8sCj4gPiAtCQkJCQkmY3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwKPiA+IC0JCQkJCXBy b3BlcnR5LCB2YWwpOwo+ID4gLQkJCWlmIChyZXQpCj4gPiAtCQkJCXJldCA9IGRwdV9jcF9jcnRj X2dldF9wcm9wZXJ0eShjcnRjLAo+ID4gLQkJCQkJcHJvcGVydHksIHZhbCk7Cj4gPiAtCQl9Cj4g PiArCQlyZXQgPSBtc21fcHJvcGVydHlfYXRvbWljX2dldCgmZHB1X2NydGMtPnByb3BlcnR5X2lu Zm8sCj4gPiArCQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0YXRlLAo+ID4gKwkJCQlwcm9wZXJ0eSwg dmFsKTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJcmV0ID0gZHB1X2NwX2NydGNfZ2V0X3Byb3Bl cnR5KGNydGMsCj4gPiArCQkJCXByb3BlcnR5LCB2YWwpOwo+ID4gIAkJaWYgKHJldCkKPiA+ICAJ CQlEUk1fRVJST1IoImdldCBwcm9wZXJ0eSBmYWlsZWRcbiIpOwo+ID4gIAl9Cj4gPiBAQCAtNDg1 OCwxMCArNDczMyw2IEBAIHN0YXRpYyBpbnQgX2RwdV9jcnRjX2luaXRfZXZlbnRzKHN0cnVjdCBk cHVfY3J0Ywo+ID4gKmRwdV9jcnRjKQo+ID4gIAkJbGlzdF9hZGRfdGFpbCgmZHB1X2NydGMtPmV2 ZW50X2NhY2hlW2ldLmxpc3QsCj4gPiAgCQkJCSZkcHVfY3J0Yy0+ZXZlbnRfZnJlZV9saXN0KTsK PiA+IAo+ID4gLQlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMtPnJldGlyZV9ldmVudF9saXN0KTsK PiA+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB1X2NydGMtPnJldGlyZV9ldmVudHMp OyBpKyspCj4gPiAtCQlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMtPnJldGlyZV9ldmVudHNbaV0u bGlzdCk7Cj4gPiAtCj4gPiAgCXJldHVybiByYzsKPiA+ICB9Cj4gPiAKPiA+IEBAIC00OTIwLDkg KzQ3OTEsNiBAQCBzdHJ1Y3QgZHJtX2NydGMgKmRwdV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZp Y2UKPiA+ICpkZXYsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ID4gIAkJcmV0dXJuIEVSUl9Q VFIocmMpOwo+ID4gIAl9Cj4gPiAKPiA+IC0JLyogaW5pdGlhbGl6ZSBvdXRwdXQgZmVuY2Ugc3Vw cG9ydCAqLwo+ID4gLQlkcHVfZmVuY2VfaW5pdCgmZHB1X2NydGMtPm91dHB1dF9mZW5jZSwgZHB1 X2NydGMtPm5hbWUsCj4gPiBjcnRjLT5iYXNlLmlkKTsKPiA+IC0KPiA+ICAJLyogY3JlYXRlIENS VEMgcHJvcGVydGllcyAqLwo+ID4gIAltc21fcHJvcGVydHlfaW5pdCgmZHB1X2NydGMtPnByb3Bl cnR5X2luZm8sICZjcnRjLT5iYXNlLCBkZXYsCj4gPiAgCQkJcHJpdi0+Y3J0Y19wcm9wZXJ0eSwg ZHB1X2NydGMtPnByb3BlcnR5X2RhdGEsCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY3J0Yy5oCj4gPiBpbmRleCBiNjNkZjI0M2JlMzMuLjcyN2EzNDM0YTRmNiAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKPiA+IEBAIC0y Miw3ICsyMiw2IEBACj4gPiAgI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KPiA+ICAjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiAgI2luY2x1ZGUgIm1zbV9wcm9wLmgiCj4gPiAtI2luY2x1 ZGUgImRwdV9mZW5jZS5oIgo+ID4gICNpbmNsdWRlICJkcHVfa21zLmgiCj4gPiAgI2luY2x1ZGUg ImRwdV9jb3JlX3BlcmYuaCIKPiA+ICAjaW5jbHVkZSAiZHB1X2h3X2Jsay5oIgo+ID4gQEAgLTg1 LDE3ICs4NCw2IEBAIHN0cnVjdCBkcHVfY3J0Y19zbW11X3N0YXRlX2RhdGEgewo+ID4gIAl1aW50 MzJfdCB0cmFuc2l0aW9uX2Vycm9yOwo+ID4gIH07Cj4gPiAKPiA+IC0vKioKPiA+IC0gKiBAY29u bmVjdG9ycyAgICA6IEN1cnJlbnRseSBhc3NvY2lhdGVkIGRybSBjb25uZWN0b3JzIGZvciByZXRp cmUKPiA+IGV2ZW50Cj4gPiAtICogQG51bV9jb25uZWN0b3JzOiBOdW1iZXIgb2YgYXNzb2NpYXRl ZCBkcm0gY29ubmVjdG9ycyBmb3IgcmV0aXJlCj4gPiBldmVudAo+ID4gLSAqIEBsaXN0OglldmVu dCBsaXN0Cj4gPiAtICovCj4gPiAtc3RydWN0IGRwdV9jcnRjX3JldGlyZV9ldmVudCB7Cj4gPiAt CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3JzW01BWF9DT05ORUNUT1JTXTsKPiA+IC0J aW50IG51bV9jb25uZWN0b3JzOwo+ID4gLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4gPiAtfTsK PiA+IC0KPiA+ICAvKioKPiA+ICAgKiBzdHJ1Y3QgZHB1X2NydGNfbWl4ZXI6IHN0b3JlcyB0aGUg bWFwIGZvciBlYWNoIHZpcnR1YWwgcGlwZWxpbmUgaW4KPiA+IHRoZQo+ID4gQ1JUQwo+ID4gICAq IEBod19sbToJTE0gSFcgRHJpdmVyIGNvbnRleHQKPiA+IEBAIC0xNjksNyArMTU3LDYgQEAgc3Ry dWN0IGRwdV9jcnRjX2V2ZW50IHsKPiA+ICAgKiBAZHJtX3JlcXVlc3RlZF92YmxhbmsgOiBXaGV0 aGVyIHZibGFua3MgaGF2ZSBiZWVuIGVuYWJsZWQgaW4gdGhlCj4gPiBlbmNvZGVyCj4gPiAgICog QHByb3BlcnR5X2luZm8gOiBPcGFxdWUgc3RydWN0dXJlIGZvciBnZW5lcmljIHByb3BlcnR5IHN1 cHBvcnQKPiA+ICAgKiBAcHJvcGVydHlfZGVmYXVsdHMgOiBBcnJheSBvZiBkZWZhdWx0IHZhbHVl cyBmb3IgZ2VuZXJpYyBwcm9wZXJ0eQo+ID4gc3VwcG9ydAo+ID4gLSAqIEBvdXRwdXRfZmVuY2Ug IDogb3V0cHV0IHJlbGVhc2UgZmVuY2UgY29udGV4dAo+ID4gICAqIEBzdGFnZV9jZmcgICAgIDog SC93IG1peGVyIHN0YWdlIGNvbmZpZ3VyYXRpb24KPiA+ICAgKiBAZGVidWdmc19yb290ICA6IFBh cmVudCBvZiBkZWJ1Z2ZzIG5vZGUKPiA+ICAgKiBAdmJsYW5rX2NiX2NvdW50IDogY291bnQgb2Yg dmJsYW5rIGNhbGxiYWNrIHNpbmNlIGxhc3QgcmVzZXQKPiA+IEBAIC0xOTAsOCArMTc3LDYgQEAg c3RydWN0IGRwdV9jcnRjX2V2ZW50IHsKPiA+ICAgKiBAZnJhbWVfZXZlbnRzICA6IHN0YXRpYyBh bGxvY2F0aW9uIG9mIGluLWZsaWdodCBmcmFtZSBldmVudHMKPiA+ICAgKiBAZnJhbWVfZXZlbnRf bGlzdCA6IGF2YWlsYWJsZSBmcmFtZSBldmVudCBsaXN0Cj4gPiAgICogQHNwaW5fbG9jayAgICAg OiBzcGluIGxvY2sgZm9yIGZyYW1lIGV2ZW50LCB0cmFuc2FjdGlvbiBzdGF0dXMsCj4gPiBldGMu Li4KPiA+IC0gKiBAcmV0aXJlX2V2ZW50cyAgOiBzdGF0aWMgYWxsb2NhdGlvbiBvZiByZXRpcmUg ZmVuY2UgY29ubmVjdG9yCj4gPiAtICogQHJldGlyZV9ldmVudF9saXN0IDogYXZhaWxhYmxlIHJl dGlyZSBmZW5jZSBjb25uZWN0b3IgbGlzdAo+ID4gICAqIEBmcmFtZV9kb25lX2NvbXAgICAgOiBm b3IgZnJhbWVfZXZlbnRfZG9uZSBzeW5jaHJvbml6YXRpb24KPiA+ICAgKiBAZXZlbnRfdGhyZWFk ICA6IFBvaW50ZXIgdG8gZXZlbnQgaGFuZGxlciB0aHJlYWQKPiA+ICAgKiBAZXZlbnRfd29ya2Vy ICA6IEV2ZW50IHdvcmtlciBxdWV1ZQo+ID4gQEAgLTIyNyw5ICsyMTIsNiBAQCBzdHJ1Y3QgZHB1 X2NydGMgewo+ID4gIAlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgcHJvcGVydHlfZGF0YVtDUlRD X1BST1BfQ09VTlRdOwo+ID4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2JfaW5mbzsK PiA+IAo+ID4gLQkvKiBvdXRwdXQgZmVuY2Ugc3VwcG9ydCAqLwo+ID4gLQlzdHJ1Y3QgZHB1X2Zl bmNlX2NvbnRleHQgb3V0cHV0X2ZlbmNlOwo+ID4gLQo+ID4gIAlzdHJ1Y3QgZHB1X2h3X3N0YWdl X2NmZyBzdGFnZV9jZmc7Cj4gPiAgCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKPiA+IAo+ ID4gQEAgLTI1Myw4ICsyMzUsNiBAQCBzdHJ1Y3QgZHB1X2NydGMgewo+ID4gIAlzdHJ1Y3QgZHB1 X2NydGNfZnJhbWVfZXZlbnQKPiA+IGZyYW1lX2V2ZW50c1tEUFVfQ1JUQ19GUkFNRV9FVkVOVF9T SVpFXTsKPiA+ICAJc3RydWN0IGxpc3RfaGVhZCBmcmFtZV9ldmVudF9saXN0Owo+ID4gIAlzcGlu bG9ja190IHNwaW5fbG9jazsKPiA+IC0Jc3RydWN0IGRwdV9jcnRjX3JldGlyZV9ldmVudAo+ID4g cmV0aXJlX2V2ZW50c1tEUFVfQ1JUQ19GUkFNRV9FVkVOVF9TSVpFXTsKPiA+IC0Jc3RydWN0IGxp c3RfaGVhZCByZXRpcmVfZXZlbnRfbGlzdDsKPiA+ICAJc3RydWN0IGNvbXBsZXRpb24gZnJhbWVf ZG9uZV9jb21wOwo+ID4gCj4gPiAgCS8qIGZvciBoYW5kbGluZyBpbnRlcm5hbCBldmVudCB0aHJl YWQgKi8KPiA+IEBAIC00NzUsMTQgKzQ1NSw2IEBAIGludCBkcHVfY3J0Y192Ymxhbmsoc3RydWN0 IGRybV9jcnRjICpjcnRjLCBib29sCj4gPiBlbik7Cj4gPiAgICovCj4gPiAgdm9pZCBkcHVfY3J0 Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ID4gCj4gPiAtLyoqCj4g PiAtICogZHB1X2NydGNfcHJlcGFyZV9jb21taXQgLSBjYWxsYmFjayB0byBwcmVwYXJlIGZvciBv dXRwdXQgZmVuY2VzCj4gPiAtICogQGNydGM6IFBvaW50ZXIgdG8gZHJtIGNydGMgb2JqZWN0Cj4g PiAtICogQG9sZF9zdGF0ZTogUG9pbnRlciB0byBkcm0gY3J0YyBvbGQgc3RhdGUgb2JqZWN0Cj4g PiAtICovCj4gPiAtdm9pZCBkcHVfY3J0Y19wcmVwYXJlX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gPiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSk7Cj4gPiAtCj4g PiAgLyoqCj4gPiAgICogZHB1X2NydGNfY29tcGxldGVfY29tbWl0IC0gY2FsbGJhY2sgc2lnbmFs bGluZyBjb21wbGV0aW9uIG9mIGN1cnJlbnQKPiA+IGNvbW1pdAo+ID4gICAqIEBjcnRjOiBQb2lu dGVyIHRvIGRybSBjcnRjIG9iamVjdAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXIuYwo+ID4gaW5kZXggNGQxZTM2NTJkYmY0Li5hNTRhZDJjZDU4NTYg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl ci5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5j Cj4gPiBAQCAtMjQ2NSw5ICsyNDY1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkCj4gPiBfZHB1X2Vu Y29kZXJfdHJpZ2dlcl9mbHVzaChzdHJ1Y3QKPiA+IGRybV9lbmNvZGVyICpkcm1fZW5jLAo+ID4g Cj4gPiAgCXBlbmRpbmdfa2lja29mZl9jbnQgPSBkcHVfZW5jb2Rlcl9waHlzX2luY19wZW5kaW5n KHBoeXMpOwo+ID4gCj4gPiAtCWlmIChwaHlzLT5vcHMuaXNfbWFzdGVyICYmIHBoeXMtPm9wcy5p c19tYXN0ZXIocGh5cykpCj4gPiAtCQlhdG9taWNfaW5jKCZwaHlzLT5wZW5kaW5nX3JldGlyZV9m ZW5jZV9jbnQpOwo+ID4gLQo+ID4gIAlpZiAoZXh0cmFfZmx1c2hfYml0cyAmJiBjdGwtPm9wcy51 cGRhdGVfcGVuZGluZ19mbHVzaCkKPiA+ICAJCWN0bC0+b3BzLnVwZGF0ZV9wZW5kaW5nX2ZsdXNo KGN0bCwgZXh0cmFfZmx1c2hfYml0cyk7Cj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKPiA+IGluZGV4IDY5ZmIyNmNiNDNhYi4uODZhMzgw MGFmNjczIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXIuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXIuaAo+ID4gQEAgLTI3LDkgKzI3LDcgQEAKPiA+ICAjZGVmaW5lIERQVV9FTkNPREVSX0ZS QU1FX0VWRU5UX0RPTkUJCQlCSVQoMCkKPiA+ICAjZGVmaW5lIERQVV9FTkNPREVSX0ZSQU1FX0VW RU5UX0VSUk9SCQkJQklUKDEpCj4gPiAgI2RlZmluZSBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9Q QU5FTF9ERUFECQlCSVQoMikKPiA+IC0jZGVmaW5lIERQVV9FTkNPREVSX0ZSQU1FX0VWRU5UX1NJ R05BTF9SRUxFQVNFX0ZFTkNFCUJJVCgzKQo+ID4gLSNkZWZpbmUgRFBVX0VOQ09ERVJfRlJBTUVf RVZFTlRfU0lHTkFMX1JFVElSRV9GRU5DRQlCSVQoNCkKPiA+IC0jZGVmaW5lIERQVV9FTkNPREVS X0ZSQU1FX0VWRU5UX0lETEUJCQlCSVQoNSkKPiA+ICsjZGVmaW5lIERQVV9FTkNPREVSX0ZSQU1F X0VWRU5UX0lETEUJCQlCSVQoMykKPiA+IAo+ID4gICNkZWZpbmUgSURMRV9USU1FT1VUCSg2NiAt IDE2LzIpCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfZW5jb2Rlcl9waHlzLmgKPiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXJfcGh5cy5oCj4gPiBpbmRleCAzYjA1NTY5MDA3ZDIuLjcxY2QyZjI1ODk5NCAx MDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy X3BoeXMuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXJfcGh5cy5oCj4gPiBAQCAtMjQ1LDggKzI0NSw2IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl9pcnEg ewo+ID4gICAqCQkJCXNjaGVkdWxlZC4gRGVjcmVtZW50ZWQgaW4gaXJxIGhhbmRsZXIKPiA+ICAg KiBAcGVuZGluZ19jdGxzdGFydF9jbnQ6CUF0b21pYyBjb3VudGVyIHRyYWNraW5nIHRoZSBudW1i ZXIgb2YgY3RsCj4gPiBzdGFydAo+ID4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGVuZGluZy4KPiA+IC0gKiBAcGVuZGluZ19yZXRpcmVfZmVuY2VfY250OiAgIEF0b21pYyBjb3Vu dGVyIHRyYWNraW5nIHRoZSBwZW5kaW5nCj4gPiByZXRpcmUKPiA+IC0gKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZlbmNlcyB0aGF0IGhhdmUgdG8gYmUgc2lnbmFsbGVkLgo+ID4gICAq IEBwZW5kaW5nX2tpY2tvZmZfd3E6CQlXYWl0IHF1ZXVlIGZvciBibG9ja2luZyB1bnRpbAo+ID4g a2lja29mZiBjb21wbGV0ZXMKPiA+ICAgKiBAaXJxOgkJCUlSUSB0cmFja2luZyBzdHJ1Y3R1cmVz Cj4gPiAgICovCj4gPiBAQCAtMjczLDcgKzI3MSw2IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz IHsKPiA+ICAJYXRvbWljX3QgdW5kZXJydW5fY250Owo+ID4gIAlhdG9taWNfdCBwZW5kaW5nX2N0 bHN0YXJ0X2NudDsKPiA+ICAJYXRvbWljX3QgcGVuZGluZ19raWNrb2ZmX2NudDsKPiA+IC0JYXRv bWljX3QgcGVuZGluZ19yZXRpcmVfZmVuY2VfY250Owo+ID4gIAl3YWl0X3F1ZXVlX2hlYWRfdCBw ZW5kaW5nX2tpY2tvZmZfd3E7Cj4gPiAgCXN0cnVjdCBkcHVfZW5jb2Rlcl9pcnEgaXJxW0lOVFJf SURYX01BWF07Cj4gPiAgfTsKPiA+IEBAIC0zMjMsOSArMzIwLDYgQEAgc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXNfY21kX2F1dG9yZWZyZXNoIHsKPiA+ICAgKgkJCWFmdGVyIGN0bF9zdGFydCBpbnN0 ZWFkIG9mIGJlZm9yZSBuZXh0IGZyYW1lCj4gPiBraWNrb2ZmCj4gPiAgICogQHBwX3RpbWVvdXRf cmVwb3J0X2NudDogbnVtYmVyIG9mIHBpbmdwb25nIGRvbmUgaXJxIHRpbWVvdXQgZXJyb3JzCj4g PiAgICogQGF1dG9yZWZyZXNoOiBhdXRvcmVmcmVzaCBmZWF0dXJlIHN0YXRlCj4gPiAtICogQHBl bmRpbmdfcmRfcHRyX2NudDogYXRvbWljIGNvdW50ZXIgdG8gaW5kaWNhdGUgaWYgcmV0aXJlIGZl bmNlIGNhbgo+ID4gYmUKPiA+IC0gKiAgICAgICAgICAgICAgICAgICAgICBzaWduYWxlZCBhdCB0 aGUgbmV4dCByZF9wdHJfaXJxCj4gPiAtICogQHJkX3B0cl90aW1lc3RhbXA6IGxhc3QgcmRfcHRy X2lycSB0aW1lc3RhbXAKPiA+ICAgKiBAcGVuZGluZ192YmxhbmtfY250OiBBdG9taWMgY291bnRl ciB0cmFja2luZyBwZW5kaW5nIHdhaXQgZm9yIFZCTEFOSwo+ID4gICAqIEBwZW5kaW5nX3ZibGFu a193cTogV2FpdCBxdWV1ZSBmb3IgYmxvY2tpbmcgdW50aWwgVkJMQU5LIHJlY2VpdmVkCj4gPiAg ICovCj4gPiBAQCAtMzM1LDggKzMyOSw2IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX2NtZCB7 Cj4gPiAgCWJvb2wgc2VyaWFsaXplX3dhaXQ0cHA7Cj4gPiAgCWludCBwcF90aW1lb3V0X3JlcG9y dF9jbnQ7Cj4gPiAgCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9hdXRvcmVmcmVzaCBhdXRv cmVmcmVzaDsKPiA+IC0JYXRvbWljX3QgcGVuZGluZ19yZF9wdHJfY250Owo+ID4gLQlrdGltZV90 IHJkX3B0cl90aW1lc3RhbXA7Cj4gPiAgCWF0b21pY190IHBlbmRpbmdfdmJsYW5rX2NudDsKPiA+ ICAJd2FpdF9xdWV1ZV9oZWFkX3QgcGVuZGluZ192Ymxhbmtfd3E7Cj4gPiAgfTsKPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX2Nt ZC5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNf Y21kLmMKPiA+IGluZGV4IGU5MjM4MGExZDVhNC4uNmNjZjM3ODIwYWEyIDEwMDY0NAo+ID4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c19jbWQuYwo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c19j bWQuYwo+ID4gQEAgLTQ0LDEyICs0NCw2IEBACj4gPiAKPiA+ICAjZGVmaW5lIERQVV9FTkNfV1Jf UFRSX1NUQVJUX1RJTUVPVVRfVVMgMjAwMDAKPiA+IAo+ID4gLS8qCj4gPiAtICogVGhyZXNob2xk IGZvciBzaWduYWxsaW5nIHJldGlyZSBmZW5jZXMgaW4gY2FzZXMgd2hlcmUKPiA+IC0gKiBDVExf U1RBUlRfSVJRIGlzIHJlY2VpdmVkIGp1c3QgYWZ0ZXIgUkRfUFRSX0lSUQo+ID4gLSAqLwo+ID4g LSNkZWZpbmUgRFBVX0VOQ19DVExfU1RBUlRfVEhSRVNIT0xEX1VTIDUwMAo+ID4gLQo+ID4gIHN0 YXRpYyBpbmxpbmUgaW50IF9kcHVfZW5jb2Rlcl9waHlzX2NtZF9nZXRfaWRsZV90aW1lb3V0KAo+ ID4gIAkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kICpjbWRfZW5jKQo+ID4gIHsKPiA+IEBA IC0xNzAsOCArMTY0LDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c19jbWRfcHBfdHhf ZG9uZV9pcnEodm9pZAo+ID4gKmFyZywgaW50IGlycV9pZHgpCj4gPiAgCXN0cnVjdCBkcHVfZW5j b2Rlcl9waHlzICpwaHlzX2VuYyA9IGFyZzsKPiA+ICAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdz Owo+ID4gIAlpbnQgbmV3X2NudDsKPiA+IC0JdTMyIGV2ZW50ID0gRFBVX0VOQ09ERVJfRlJBTUVf RVZFTlRfRE9ORSB8Cj4gPiAtCQkJRFBVX0VOQ09ERVJfRlJBTUVfRVZFTlRfU0lHTkFMX1JFTEVB U0VfRkVOQ0U7Cj4gPiArCXUzMiBldmVudCA9IERQVV9FTkNPREVSX0ZSQU1FX0VWRU5UX0RPTkU7 Cj4gPiAKPiA+ICAJaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19lbmMtPmh3X3BwKQo+ID4gIAkJcmV0 dXJuOwo+ID4gQEAgLTIyMSw3ICsyMTQsNiBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlz X2NtZF9wcF9yZF9wdHJfaXJxKHZvaWQKPiA+ICphcmcsIGludCBpcnFfaWR4KQo+ID4gIHsKPiA+ ICAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jID0gYXJnOwo+ID4gIAlzdHJ1Y3Qg ZHB1X2VuY29kZXJfcGh5c19jbWQgKmNtZF9lbmM7Cj4gPiAtCXUzMiBldmVudCA9IDA7Cj4gPiAK PiA+ICAJaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19lbmMtPmh3X3BwKQo+ID4gIAkJcmV0dXJuOwo+ ID4gQEAgLTIyOSwzMCArMjIxLDEwIEBAIHN0YXRpYyB2b2lkCj4gPiBkcHVfZW5jb2Rlcl9waHlz X2NtZF9wcF9yZF9wdHJfaXJxKHZvaWQKPiA+ICphcmcsIGludCBpcnFfaWR4KQo+ID4gIAlEUFVf QVRSQUNFX0JFR0lOKCJyZF9wdHJfaXJxIik7Cj4gPiAgCWNtZF9lbmMgPSB0b19kcHVfZW5jb2Rl cl9waHlzX2NtZChwaHlzX2VuYyk7Cj4gPiAKPiA+IC0JLyoqCj4gPiAtCSAqIHNpZ25hbCBvbmx5 IGZvciBtYXN0ZXIsIHdoZW4gdGhlIGN0bF9zdGFydCBpcnEgaXMKPiA+IC0JICogZG9uZSBhbmQg aW5jcmVtZW50ZWQgdGhlIHBlbmRpbmdfcmRfcHRyX2NudC4KPiA+IC0JICovCj4gPiAtCWlmIChk cHVfZW5jb2Rlcl9waHlzX2NtZF9pc19tYXN0ZXIocGh5c19lbmMpCj4gPiAtCQkgICAgJiYgYXRv bWljX2FkZF91bmxlc3MoJmNtZF9lbmMtPnBlbmRpbmdfcmRfcHRyX2NudCwgLTEsCj4gPiAwKQo+ ID4gLQkJICAgICYmIGF0b21pY19hZGRfdW5sZXNzKAo+ID4gLQkJCQkmcGh5c19lbmMtPnBlbmRp bmdfcmV0aXJlX2ZlbmNlX2NudCwgLTEsCj4gPiAwKSkgewo+ID4gLQo+ID4gLQkJZXZlbnQgPSBE UFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9TSUdOQUxfUkVUSVJFX0ZFTkNFOwo+ID4gLQkJaWYgKHBo eXNfZW5jLT5wYXJlbnRfb3BzLmhhbmRsZV9mcmFtZV9kb25lKQo+ID4gLQkJCXBoeXNfZW5jLT5w YXJlbnRfb3BzLmhhbmRsZV9mcmFtZV9kb25lKAo+ID4gLQkJCQlwaHlzX2VuYy0+cGFyZW50LCBw aHlzX2VuYywgZXZlbnQpOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCURQVV9FVlQzMl9JUlEoRFJNSUQo cGh5c19lbmMtPnBhcmVudCksCj4gPiAtCQkJcGh5c19lbmMtPmh3X3BwLT5pZHggLSBQSU5HUE9O R18wLCBldmVudCwgMHhmZmYpOwo+ID4gLQo+ID4gIAlpZiAocGh5c19lbmMtPnBhcmVudF9vcHMu aGFuZGxlX3ZibGFua192aXJ0KQo+ID4gIAkJcGh5c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX3Zi bGFua192aXJ0KHBoeXNfZW5jLT5wYXJlbnQsCj4gPiAgCQkJcGh5c19lbmMpOwo+ID4gCj4gPiAt CWNtZF9lbmMtPnJkX3B0cl90aW1lc3RhbXAgPSBrdGltZV9nZXQoKTsKPiA+IC0KPiA+ICAJYXRv bWljX2FkZF91bmxlc3MoJmNtZF9lbmMtPnBlbmRpbmdfdmJsYW5rX2NudCwgLTEsIDApOwo+ID4g IAl3YWtlX3VwX2FsbCgmY21kX2VuYy0+cGVuZGluZ192Ymxhbmtfd3EpOwo+ID4gIAlEUFVfQVRS QUNFX0VORCgicmRfcHRyX2lycSIpOwo+ID4gQEAgLTI2Miw5ICsyMzQsNiBAQCBzdGF0aWMgdm9p ZCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9jdGxfc3RhcnRfaXJxKHZvaWQKPiA+ICphcmcsIGludCBp cnFfaWR4KQo+ID4gIHsKPiA+ICAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jID0g YXJnOwo+ID4gIAlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c19jbWQgKmNtZF9lbmM7Cj4gPiAtCXN0 cnVjdCBkcHVfaHdfY3RsICpjdGw7Cj4gPiAtCXUzMiBldmVudCA9IDA7Cj4gPiAtCXM2NCB0aW1l X2RpZmZfdXM7Cj4gPiAKPiA+ICAJaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19lbmMtPmh3X2N0bCkK PiA+ICAJCXJldHVybjsKPiA+IEBAIC0yNzIsNDMgKzI0MSw4IEBAIHN0YXRpYyB2b2lkIGRwdV9l bmNvZGVyX3BoeXNfY21kX2N0bF9zdGFydF9pcnEodm9pZAo+ID4gKmFyZywgaW50IGlycV9pZHgp Cj4gPiAgCURQVV9BVFJBQ0VfQkVHSU4oImN0bF9zdGFydF9pcnEiKTsKPiA+ICAJY21kX2VuYyA9 IHRvX2RwdV9lbmNvZGVyX3BoeXNfY21kKHBoeXNfZW5jKTsKPiA+IAo+ID4gLQljdGwgPSBwaHlz X2VuYy0+aHdfY3RsOwo+ID4gIAlhdG9taWNfYWRkX3VubGVzcygmcGh5c19lbmMtPnBlbmRpbmdf Y3Rsc3RhcnRfY250LCAtMSwgMCk7Cj4gPiAKPiA+IC0JdGltZV9kaWZmX3VzID0ga3RpbWVfdXNf ZGVsdGEoa3RpbWVfZ2V0KCksCj4gPiBjbWRfZW5jLT5yZF9wdHJfdGltZXN0YW1wKTsKPiA+IC0K PiA+IC0JLyogaGFuZGxlIHJldGlyZSBmZW5jZSBiYXNlZCBvbiBvbmx5IG1hc3RlciAqLwo+ID4g LQlpZiAoZHB1X2VuY29kZXJfcGh5c19jbWRfaXNfbWFzdGVyKHBoeXNfZW5jKQo+ID4gLQkJCSYm Cj4gPiBhdG9taWNfcmVhZCgmcGh5c19lbmMtPnBlbmRpbmdfcmV0aXJlX2ZlbmNlX2NudCkpIHsK PiA+IC0JCS8qKgo+ID4gLQkJICogSGFuZGxlIHJhcmUgY2FzZXMgd2hlcmUgdGhlIGN0bF9zdGFy dF9pcnEgaXMgcmVjZWl2ZWQKPiA+IC0JCSAqIGFmdGVyIHJkX3B0cl9pcnEuIElmIGl0IGZhbGxz IHdpdGhpbiBhIHRocmVzaG9sZCwgaXQgaXMKPiA+IC0JCSAqIGd1YXJhbnRlZWQgdGhlIGZyYW1l IHdvdWxkIGJlIHBpY2tlZCB1cCBpbiB0aGUgY3VycmVudAo+ID4gVEUuCj4gPiAtCQkgKiBTaWdu YWwgcmV0aXJlIGZlbmNlIGltbWVkaWF0ZWx5IGluIHN1Y2ggY2FzZS4KPiA+IC0JCSAqLwo+ID4g LQkJaWYgKCh0aW1lX2RpZmZfdXMgPD0gRFBVX0VOQ19DVExfU1RBUlRfVEhSRVNIT0xEX1VTKQo+ ID4gLQkJCSAgICAmJiBhdG9taWNfYWRkX3VubGVzcygKPiA+IC0JCQkJJnBoeXNfZW5jLT5wZW5k aW5nX3JldGlyZV9mZW5jZV9jbnQsIC0xLAo+ID4gMCkpIHsKPiA+IC0KPiA+IC0JCQlldmVudCA9 Cj4gPiBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9TSUdOQUxfUkVUSVJFX0ZFTkNFOwo+ID4gLQo+ ID4gLQkJCWlmIChwaHlzX2VuYy0+cGFyZW50X29wcy5oYW5kbGVfZnJhbWVfZG9uZSkKPiA+IC0J CQkJcGh5c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX2ZyYW1lX2RvbmUoCj4gPiAtCQkJCQlwaHlz X2VuYy0+cGFyZW50LCBwaHlzX2VuYywKPiA+IGV2ZW50KTsKPiA+IC0KPiA+IC0JCS8qKgo+ID4g LQkJICogSW4gaWRlYWwgY2FzZXMsIGN0bF9zdGFydF9pcnEgaXMgcmVjZWl2ZWQgYmVmb3JlIHRo ZQo+ID4gLQkJICogcmRfcHRyX2lycSwgc28gc2V0IHRoZSBhdG9taWMgZmxhZyB0byBpbmRpY2F0 ZSB0aGUKPiA+IGV2ZW50Cj4gPiAtCQkgKiBhbmQgcmRfcHRyX2lycSB3aWxsIGhhbmRsZSBzaWdu YWxsaW5nIHRoZSByZXRpcmUgZmVuY2UKPiA+IC0JCSAqLwo+ID4gLQkJfSBlbHNlIHsKPiA+IC0J CQlhdG9taWNfaW5jKCZjbWRfZW5jLT5wZW5kaW5nX3JkX3B0cl9jbnQpOwo+ID4gLQkJfQo+ID4g LQl9Cj4gPiAtCj4gPiAtCURQVV9FVlQzMl9JUlEoRFJNSUQocGh5c19lbmMtPnBhcmVudCksIGN0 bC0+aWR4IC0gQ1RMXzAsCj4gPiAtCQkJCXRpbWVfZGlmZl91cywgZXZlbnQsIDB4ZmZmKTsKPiA+ IC0KPiA+ICAJLyogU2lnbmFsIGFueSB3YWl0aW5nIGN0bCBzdGFydCBpbnRlcnJ1cHQgKi8KPiA+ ICAJd2FrZV91cF9hbGwoJnBoeXNfZW5jLT5wZW5kaW5nX2tpY2tvZmZfd3EpOwo+ID4gIAlEUFVf QVRSQUNFX0VORCgiY3RsX3N0YXJ0X2lycSIpOwo+ID4gQEAgLTQwOSw4ICszNDMsNyBAQCBzdGF0 aWMgaW50Cj4gPiBfZHB1X2VuY29kZXJfcGh5c19jbWRfaGFuZGxlX3BwZG9uZV90aW1lb3V0KAo+ ID4gIHsKPiA+ICAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kICpjbWRfZW5jID0KPiA+ICAJ CQl0b19kcHVfZW5jb2Rlcl9waHlzX2NtZChwaHlzX2VuYyk7Cj4gPiAtCXUzMiBmcmFtZV9ldmVu dCA9IERQVV9FTkNPREVSX0ZSQU1FX0VWRU5UX0VSUk9SCj4gPiAtCQkJCXwKPiA+IERQVV9FTkNP REVSX0ZSQU1FX0VWRU5UX1NJR05BTF9SRUxFQVNFX0ZFTkNFOwo+ID4gKwl1MzIgZnJhbWVfZXZl bnQgPSBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9FUlJPUjsKPiA+ICAJYm9vbCBkb19sb2cgPSBm YWxzZTsKPiA+IAo+ID4gIAlpZiAoIXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+aHdfcHAgfHwgIXBo eXNfZW5jLT5od19jdGwpCj4gPiBAQCAtMTM0Niw4ICsxMjc5LDYgQEAgc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXMKPiA+ICpkcHVfZW5jb2Rlcl9waHlzX2NtZF9pbml0KAo+ID4gIAlhdG9taWNfc2V0 KCZwaHlzX2VuYy0+dmJsYW5rX3JlZmNvdW50LCAwKTsKPiA+ICAJYXRvbWljX3NldCgmcGh5c19l bmMtPnBlbmRpbmdfa2lja29mZl9jbnQsIDApOwo+ID4gIAlhdG9taWNfc2V0KCZwaHlzX2VuYy0+ cGVuZGluZ19jdGxzdGFydF9jbnQsIDApOwo+ID4gLQlhdG9taWNfc2V0KCZwaHlzX2VuYy0+cGVu ZGluZ19yZXRpcmVfZmVuY2VfY250LCAwKTsKPiA+IC0JYXRvbWljX3NldCgmY21kX2VuYy0+cGVu ZGluZ19yZF9wdHJfY250LCAwKTsKPiA+ICAJYXRvbWljX3NldCgmY21kX2VuYy0+cGVuZGluZ192 YmxhbmtfY250LCAwKTsKPiA+ICAJaW5pdF93YWl0cXVldWVfaGVhZCgmcGh5c19lbmMtPnBlbmRp bmdfa2lja29mZl93cSk7Cj4gPiAgCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNtZF9lbmMtPnBlbmRp bmdfdmJsYW5rX3dxKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKPiA+IGluZGV4IDYyYzZmNWMzNTQ3YS4uZWRh YWQwNDEzOTg3IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXJfcGh5c192aWQuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYwo+ID4gQEAgLTM3MywxMyArMzczLDEwIEBAIHN0 YXRpYyB2b2lkCj4gPiBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9zZXR1cF90aW1pbmdfZW5naW5lKAo+ ID4gIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfdmlkX3ZibGFua19pcnEodm9pZCAqYXJn LCBpbnQgaXJxX2lkeCkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlz X2VuYyA9IGFyZzsKPiA+IC0Jc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfdmlkICp2aWRfZW5jID0K PiA+IC0JCQl0b19kcHVfZW5jb2Rlcl9waHlzX3ZpZChwaHlzX2VuYyk7Cj4gPiAgCXN0cnVjdCBk cHVfaHdfY3RsICpod19jdGw7Cj4gPiAgCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKPiA+ICAJ dTMyIGZsdXNoX3JlZ2lzdGVyID0gMDsKPiA+ICAJaW50IG5ld19jbnQgPSAtMSwgb2xkX2NudCA9 IC0xOwo+ID4gLQl1MzIgZXZlbnQgPSAwOwo+ID4gCj4gPiAgCWlmICghcGh5c19lbmMpCj4gPiAg CQlyZXR1cm47Cj4gPiBAQCAtMzkwLDE4ICszODcsNiBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rl cl9waHlzX3ZpZF92YmxhbmtfaXJxKHZvaWQKPiA+ICphcmcsIGludCBpcnFfaWR4KQo+ID4gCj4g PiAgCURQVV9BVFJBQ0VfQkVHSU4oInZibGFua19pcnEiKTsKPiA+IAo+ID4gLQkvKiBzaWduYWwg b25seSBmb3IgbWFzdGVyLCB3aGVyZSB0aGVyZSBpcyBhIHBlbmRpbmcga2lja29mZiAqLwo+ID4g LQlpZiAoZHB1X2VuY29kZXJfcGh5c192aWRfaXNfbWFzdGVyKHBoeXNfZW5jKQo+ID4gLQkJCSYm IGF0b21pY19hZGRfdW5sZXNzKAo+ID4gLQkJCQkmcGh5c19lbmMtPnBlbmRpbmdfcmV0aXJlX2Zl bmNlX2NudCwgLTEsCj4gPiAwKSkgewo+ID4gLQkJZXZlbnQgPSBEUFVfRU5DT0RFUl9GUkFNRV9F VkVOVF9TSUdOQUxfUkVMRUFTRV9GRU5DRQo+ID4gLQkJCQl8Cj4gPiBEUFVfRU5DT0RFUl9GUkFN RV9FVkVOVF9TSUdOQUxfUkVUSVJFX0ZFTkNFOwo+ID4gLQo+ID4gLQkJaWYgKHBoeXNfZW5jLT5w YXJlbnRfb3BzLmhhbmRsZV9mcmFtZV9kb25lKQo+ID4gLQo+ID4gcGh5c19lbmMtPnBhcmVudF9v cHMuaGFuZGxlX2ZyYW1lX2RvbmUocGh5c19lbmMtPnBhcmVudCwKPiA+IC0JCQkJcGh5c19lbmMs IGV2ZW50KTsKPiA+IC0JfQo+ID4gLQo+ID4gIAlpZiAocGh5c19lbmMtPnBhcmVudF9vcHMuaGFu ZGxlX3ZibGFua192aXJ0KQo+ID4gIAkJcGh5c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX3ZibGFu a192aXJ0KHBoeXNfZW5jLT5wYXJlbnQsCj4gPiAgCQkJCXBoeXNfZW5jKTsKPiA+IEBAIC00MjIs OSArNDA3LDYgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRfdmJsYW5rX2lycSh2 b2lkCj4gPiAqYXJnLAo+ID4gaW50IGlycV9pZHgpCj4gPiAgCQkJCS0xLCAwKTsKPiA+ICAJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZShwaHlzX2VuYy0+ZW5jX3NwaW5sb2NrLCBsb2NrX2ZsYWdzKTsK PiA+IAo+ID4gLQlEUFVfRVZUMzJfSVJRKERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLCB2aWRfZW5j LT5od19pbnRmLT5pZHggLQo+ID4gSU5URl8wLAo+ID4gLQkJCW9sZF9jbnQsIG5ld19jbnQsIGZs dXNoX3JlZ2lzdGVyLCBldmVudCk7Cj4gPiAtCj4gPiAgCS8qIFNpZ25hbCBhbnkgd2FpdGluZyBh dG9taWMgY29tbWl0IHRocmVhZCAqLwo+ID4gIAl3YWtlX3VwX2FsbCgmcGh5c19lbmMtPnBlbmRp bmdfa2lja29mZl93cSk7Cj4gPiAgCURQVV9BVFJBQ0VfRU5EKCJ2YmxhbmtfaXJxIik7Cj4gPiBA QCAtMTAyOCw3ICsxMDEwLDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMKPiA+ICpkcHVfZW5j b2Rlcl9waHlzX3ZpZF9pbml0KAo+ID4gCj4gPiAgCWF0b21pY19zZXQoJnBoeXNfZW5jLT52Ymxh bmtfcmVmY291bnQsIDApOwo+ID4gIAlhdG9taWNfc2V0KCZwaHlzX2VuYy0+cGVuZGluZ19raWNr b2ZmX2NudCwgMCk7Cj4gPiAtCWF0b21pY19zZXQoJnBoeXNfZW5jLT5wZW5kaW5nX3JldGlyZV9m ZW5jZV9jbnQsIDApOwo+ID4gIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwaHlzX2VuYy0+cGVuZGlu Z19raWNrb2ZmX3dxKTsKPiA+ICAJcGh5c19lbmMtPmVuYWJsZV9zdGF0ZSA9IERQVV9FTkNfRElT QUJMRUQ7Cj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfZW5jb2Rlcl9waHlzX3diLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2VuY29kZXJfcGh5c193Yi5jCj4gPiBpbmRleCA5YTZmYTNlMWU4YjQuLjJiYzU4OTQ4 MzljNCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9l bmNvZGVyX3BoeXNfd2IuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXJfcGh5c193Yi5jCj4gPiBAQCAtNjgwLDExICs2ODAsOCBAQCBzdGF0aWMgdm9p ZCBkcHVfZW5jb2Rlcl9waHlzX3diX2RvbmVfaXJxKHZvaWQgKmFyZywKPiA+IGludCBpcnFfaWR4 KQo+ID4gIAlpZiAocGh5c19lbmMtPmVuYWJsZV9zdGF0ZSA9PSBEUFVfRU5DX0RJU0FCTElORykK PiA+ICAJCWdvdG8gY29tcGxldGU7Cj4gPiAKPiA+IC0JZXZlbnQgPSBEUFVfRU5DT0RFUl9GUkFN RV9FVkVOVF9TSUdOQUxfUkVMRUFTRV9GRU5DRQo+ID4gLQkJCXwgRFBVX0VOQ09ERVJfRlJBTUVf RVZFTlRfU0lHTkFMX1JFVElSRV9GRU5DRQo+ID4gLQkJCXwgRFBVX0VOQ09ERVJfRlJBTUVfRVZF TlRfRE9ORTsKPiA+ICsJZXZlbnQgPSBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9ET05FOwo+ID4g Cj4gPiAtCWF0b21pY19hZGRfdW5sZXNzKCZwaHlzX2VuYy0+cGVuZGluZ19yZXRpcmVfZmVuY2Vf Y250LCAtMSwgMCk7Cj4gPiAgCWlmIChwaHlzX2VuYy0+cGFyZW50X29wcy5oYW5kbGVfZnJhbWVf ZG9uZSkKPiA+ICAJCXBoeXNfZW5jLT5wYXJlbnRfb3BzLmhhbmRsZV9mcmFtZV9kb25lKHBoeXNf ZW5jLT5wYXJlbnQsCj4gPiAgCQkJCXBoeXNfZW5jLCBldmVudCk7Cj4gPiBAQCAtODQ3LDEyICs4 NDQsOCBAQCBzdGF0aWMgaW50Cj4gPiBkcHVfZW5jb2Rlcl9waHlzX3diX3dhaXRfZm9yX2NvbW1p dF9kb25lKAo+ID4gIAkJfSBlbHNlIHsKPiA+ICAJCQlEUFVfRVJST1IoIndiOiVkIGtpY2tvZmYg dGltZWQgb3V0XG4iLAo+ID4gIAkJCQkJd2JfZW5jLT53Yl9kZXYtPndiX2lkeCAtIFdCXzApOwo+ ID4gLQkJCWF0b21pY19hZGRfdW5sZXNzKAo+ID4gLQkJCQkmcGh5c19lbmMtPnBlbmRpbmdfcmV0 aXJlX2ZlbmNlX2NudCwgLTEsCj4gPiAwKTsKPiA+IAo+ID4gLQkJCWV2ZW50ID0KPiA+IERQVV9F TkNPREVSX0ZSQU1FX0VWRU5UX1NJR05BTF9SRUxFQVNFX0ZFTkNFCj4gPiAtCQkJCXwKPiA+IERQ VV9FTkNPREVSX0ZSQU1FX0VWRU5UX1NJR05BTF9SRVRJUkVfRkVOQ0UKPiA+IC0JCQkJfCBEUFVf RU5DT0RFUl9GUkFNRV9FVkVOVF9FUlJPUjsKPiA+ICsJCQlldmVudCA9IERQVV9FTkNPREVSX0ZS QU1FX0VWRU5UX0VSUk9SOwo+ID4gIAkJCWlmIChwaHlzX2VuYy0+cGFyZW50X29wcy5oYW5kbGVf ZnJhbWVfZG9uZSkKPiA+ICAJCQkJcGh5c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX2ZyYW1lX2Rv bmUoCj4gPiAgCQkJCQlwaHlzX2VuYy0+cGFyZW50LCBwaHlzX2VuYywKPiA+IGV2ZW50KTsKPiA+ IEBAIC0xMzMzLDcgKzEzMjYsNiBAQCBzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqZHB1X2VuY29k ZXJfcGh5c193Yl9pbml0KAo+ID4gIAlwaHlzX2VuYy0+aW50Zl9tb2RlID0gSU5URl9NT0RFX1dC X0xJTkU7Cj4gPiAgCXBoeXNfZW5jLT5pbnRmX2lkeCA9IHAtPmludGZfaWR4Owo+ID4gIAlwaHlz X2VuYy0+ZW5jX3NwaW5sb2NrID0gcC0+ZW5jX3NwaW5sb2NrOwo+ID4gLQlhdG9taWNfc2V0KCZw aHlzX2VuYy0+cGVuZGluZ19yZXRpcmVfZmVuY2VfY250LCAwKTsKPiA+ICAJSU5JVF9MSVNUX0hF QUQoJndiX2VuYy0+aXJxX2NiLmxpc3QpOwo+ID4gCj4gPiAgCS8qIGNyZWF0ZSBpbnRlcm5hbCBi dWZmZXIgZm9yIGRpc2FibGUgbG9naWMgKi8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2ttcy5jCj4gPiBpbmRleCAzZDgzMDM3ZTgzMDUuLjlkNjgwMzAzNzhhNyAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCj4gPiBAQCAtNTQ1 LDM1ICs1NDUsNiBAQCBzdGF0aWMgdm9pZCBkcHVfa21zX3dhaXRfZm9yX2NvbW1pdF9kb25lKHN0 cnVjdAo+ID4gbXNtX2ttcyAqa21zLAo+ID4gIAl9Cj4gPiAgfQo+ID4gCj4gPiAtc3RhdGljIHZv aWQgZHB1X2ttc19wcmVwYXJlX2ZlbmNlKHN0cnVjdCBtc21fa21zICprbXMsCj4gPiAtCQlzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9j cnRjICpjcnRjOwo+ID4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlOwo+ ID4gLQlpbnQgaSwgcmM7Cj4gPiAtCj4gPiAtCWlmICgha21zIHx8ICFvbGRfc3RhdGUgfHwgIW9s ZF9zdGF0ZS0+ZGV2IHx8Cj4gPiAhb2xkX3N0YXRlLT5hY3F1aXJlX2N0eCkgewo+ID4gLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKPiA+IC0JCXJldHVybjsKPiA+IC0JfQo+ ID4gLQo+ID4gLXJldHJ5Ogo+ID4gLQkvKiBhdHRlbXB0IHRvIGFjcXVpcmUgd3cgbXV0ZXggZm9y IGNvbm5lY3Rpb24gKi8KPiA+IC0JcmMgPQo+ID4gZHJtX21vZGVzZXRfbG9jaygmb2xkX3N0YXRl LT5kZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsCj4gPiAtCQkJICAgICAgIG9sZF9z dGF0ZS0+YWNxdWlyZV9jdHgpOwo+ID4gLQo+ID4gLQlpZiAocmMgPT0gLUVERUFETEspIHsKPiA+ IC0JCWRybV9tb2Rlc2V0X2JhY2tvZmYob2xkX3N0YXRlLT5hY3F1aXJlX2N0eCk7Cj4gPiAtCQln b3RvIHJldHJ5Owo+ID4gLQl9Cj4gPiAtCj4gPiAtCS8qIG9sZF9zdGF0ZSBhY3R1YWxseSBjb250 YWlucyB1cGRhdGVkIGNydGMgcG9pbnRlcnMgKi8KPiA+IC0JZm9yX2VhY2hfb2xkX2NydGNfaW5f c3RhdGUob2xkX3N0YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwgaSkgewo+ID4gLQkJaWYgKGNy dGMtPnN0YXRlLT5hY3RpdmUpCj4gPiAtCQkJZHB1X2NydGNfcHJlcGFyZV9jb21taXQoY3J0Yywg b2xkX2NydGNfc3RhdGUpOwo+ID4gLQl9Cj4gPiAtfQo+ID4gLQo+ID4gIC8qKgo+ID4gICAqIF9k cHVfa21zX2dldF9kaXNwbGF5cyAtIHF1ZXJ5IGZvciB1bmRlcmx5aW5nIGRpc3BsYXkgaGFuZGxl cyBhbmQKPiA+IGNhY2hlCj4gPiB0aGVtCj4gPiAgICogQGRwdV9rbXM6ICAgIFBvaW50ZXIgdG8g ZHB1IGttcyBzdHJ1Y3R1cmUKPiA+IEBAIC0xNzM0LDcgKzE3MDUsNiBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IG1zbV9rbXNfZnVuY3Mga21zX2Z1bmNzID0gewo+ID4gIAkuaXJxX3VuaW5zdGFsbCAg ID0gZHB1X2lycV91bmluc3RhbGwsCj4gPiAgCS5pcnEgICAgICAgICAgICAgPSBkcHVfaXJxLAo+ ID4gIAkucHJlY2xvc2UgICAgICAgID0gZHB1X2ttc19wcmVjbG9zZSwKPiA+IC0JLnByZXBhcmVf ZmVuY2UgICA9IGRwdV9rbXNfcHJlcGFyZV9mZW5jZSwKPiA+ICAJLnByZXBhcmVfY29tbWl0ICA9 IGRwdV9rbXNfcHJlcGFyZV9jb21taXQsCj4gPiAgCS5jb21taXQgICAgICAgICAgPSBkcHVfa21z X2NvbW1pdCwKPiA+ICAJLmNvbXBsZXRlX2NvbW1pdCA9IGRwdV9rbXNfY29tcGxldGVfY29tbWl0 LAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gPiBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gPiBpbmRleCA4Y2FiMzMzZGY3MTcuLmU5MjM3 NmFjYmNmZSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAo+ID4gQEAgLTEzMiw4ICsxMzIs NiBAQCBlbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7Cj4gPiAKPiA+ICAJLyogcmFuZ2UgcHJv cGVydGllcyAqLwo+ID4gIAlDUlRDX1BST1BfSU5QVVRfRkVOQ0VfVElNRU9VVCA9IENSVENfUFJP UF9CTE9CQ09VTlQsCj4gPiAtCUNSVENfUFJPUF9PVVRQVVRfRkVOQ0UsCj4gPiAtCUNSVENfUFJP UF9PVVRQVVRfRkVOQ0VfT0ZGU0VULAo+ID4gIAlDUlRDX1BST1BfRElNX0xBWUVSX1YxLAo+ID4g IAlDUlRDX1BST1BfQ09SRV9DTEssCj4gPiAgCUNSVENfUFJPUF9DT1JFX0FCLAo+ID4gQEAgLTE2 Myw3ICsxNjEsNiBAQCBlbnVtIG1zbV9tZHBfY29ubl9wcm9wZXJ0eSB7Cj4gPiAKPiA+ICAJLyog cmFuZ2UgcHJvcGVydGllcyAqLwo+ID4gIAlDT05ORUNUT1JfUFJPUF9PVVRfRkIgPSBDT05ORUNU T1JfUFJPUF9CTE9CQ09VTlQsCj4gPiAtCUNPTk5FQ1RPUl9QUk9QX1JFVElSRV9GRU5DRSwKPiA+ ICAJQ09OTkVDVE9SX1BST1BfRFNUX1gsCj4gPiAgCUNPTk5FQ1RPUl9QUk9QX0RTVF9ZLAo+ID4g IAlDT05ORUNUT1JfUFJPUF9EU1RfVywKPiAKPiAtLSAKPiBKZXlrdW1hciBTCgotLSAKU2VhbiBQ YXVsLCBTb2Z0d2FyZSBFbmdpbmVlciwgR29vZ2xlIC8gQ2hyb21pdW0gT1MKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlz dApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==