From mboxrd@z Thu Jan 1 00:00:00 1970 From: abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [DPU PATCH] drm/msm: Remove dpu_edid_parser Date: Fri, 23 Feb 2018 13:29:03 -0800 Message-ID: References: <20180223191515.155783-1-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180223191515.155783-1-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sean Paul Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-msm-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, abhinavk-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org SSBhbSBPSyB3aXRoIHJlbW92aW5nIHNvbWUgcGFydHMgb2YgdGhlIHBhcnNlciBidXQgbm90IGVu dGlyZWx5LgoKRnVuZGFtZW50YWxseSwgd2Ugd2VudCBhaGVhZCB3aXRoIHRoZSBwYXJzZXIgZm9y IGEgY291cGxlIG9mIHJlYXNvbnM6CgotPiBXZSB3b3VsZCBsaWtlIHRvIGJlIGFibGUgdG8gYXNz b2NpYXRlIHRoZSBjb2xvciBmb3JtYXQgd2l0aCB0aGUgbW9kZS4gClRoaXMgaGVscHMgdXMgZGVj aWRlIHRoYXQgaWYgdGhlIHNhbWUgbW9kZSBzdXBwb3J0cyBib3RoIFJHQi9ZVVYgdGhlbiAKd2hp Y2ggb25lIHdlIGNhbiBwaWNrLgoKLT4gVGhlIHVwc3RyZWFtIHBhcnNlciBjdXJyZW50bHkganVz dCBhZGRzIGl0IHRvIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cyAKb2YgdGhlIHNpbmsgaW5mby0+Y29s b3JfZm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwOyBIb3dldmVyIAp0aGUgbGlu ayBiZXR3ZWVuIHRoZSBtb2RlIGFuZCB0aGUgZm9ybWF0IGl0c2VsZiBpcyB1bmNsZWFyCgpJIHdv dWxkIGxpa2UgdG8ga25vdyBpZiBhbnkgb2YgdGhlIGFib3ZlIGhhdmUgYmVlbiBhZGRyZXNzZWQg c28gZmFyIApiZWZvcmUgcmV2ZXJ0aW5nIHRoaXMuCgpUaGFua3MKCkFiaGluYXYKCgpPbiAyMDE4 LTAyLTIzIDExOjE1LCBTZWFuIFBhdWwgd3JvdGU6Cj4gVXNlIGRybV9lZGlkIHRvIHBhcnNlIHRo ZSBlZGlkIGluc3RlYWQgb2YgdGhlIGhhbmQgcm9sbGVkIGRwdSB2ZXJzaW9uLgo+IAo+IFNpZ25l ZC1vZmYtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgo+IC0tLQo+ICBkcml2 ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgIHwgICAxIC0KPiAgZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9hdWRpby5jICAgICB8ICAyMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2Rpc3BsYXkuYyAgIHwgICA3IC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w YW5lbC5jICAgICB8ICA3NyArKy0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5o ICAgICB8ICAgNyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5jIHwg NjU3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1 X2VkaWRfcGFyc2VyLmggfCAxNjYgLS0tLS0tLQo+ICA3IGZpbGVzIGNoYW5nZWQsIDU1IGluc2Vy dGlvbnMoKyksIDg4MiBkZWxldGlvbnMoLSkKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmMKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZSAKPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUK PiBpbmRleCBmY2Q4NWFlMjhkNjYuLjJmYjliYTExZGYxOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmls ZQo+IEBAIC04Niw3ICs4Niw2IEBAIG1zbS15IDo9IFwKPiAgCWRpc3AvZHB1MS9kcHVfcm0ubyBc Cj4gIAlkaXNwL2RwdTEvZHB1X3ZiaWYubyBcCj4gIAlkcHVfZGJnLm8gXAo+IC0JZHB1X2VkaWRf cGFyc2VyLm8gXAo+ICAJZHB1X2lvX3V0aWwubyBcCj4gIAlkcHVfZGJnX2V2dGxvZy5vIFwKPiAg CWRwdV9wb3dlcl9oYW5kbGUubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfYXVkaW8uYwo+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jCj4gaW5k ZXggNGUwY2RjZDE1YzhjLi5jZTAwYjhiNTI2MzEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9hdWRpby5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9h dWRpby5jCj4gQEAgLTE4LDYgKzE4LDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L21zbV9leHRfZGlz cGxheS5oPgo+IAo+ICAjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fZWRpZC5oPgo+IAo+ICAjaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgo+ICAjaW5jbHVk ZSAiZHBfYXVkaW8uaCIKPiBAQCAtNDgwLDcgKzQ4MSw2IEBAIHN0YXRpYyBpbnQgZHBfYXVkaW9f Z2V0X2VkaWRfYmxrKHN0cnVjdAo+IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiAgewo+ICAJaW50 IHJjID0gMDsKPiAgCXN0cnVjdCBkcF9hdWRpb19wcml2YXRlICphdWRpbzsKPiAtCXN0cnVjdCBk cHVfZWRpZF9jdHJsICplZGlkOwo+IAo+ICAJYXVkaW8gPSBnZXRfYXVkaW9fZ2V0X2RhdGEocGRl dik7Cj4gIAlpZiAoSVNfRVJSKGF1ZGlvKSkgewo+IEBAIC00ODgsMTkgKzQ4OCwyOSBAQCBzdGF0 aWMgaW50IGRwX2F1ZGlvX2dldF9lZGlkX2JsayhzdHJ1Y3QKPiBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYsCj4gIAkJZ290byBlbmQ7Cj4gIAl9Cj4gCj4gLQlpZiAoIWF1ZGlvLT5wYW5lbCB8fCAhYXVk aW8tPnBhbmVsLT5lZGlkX2N0cmwpIHsKPiArCWlmICghYXVkaW8tPnBhbmVsIHx8ICFhdWRpby0+ cGFuZWwtPmVkaWQpIHsKPiAgCQlwcl9lcnIoImludmFsaWQgcGFuZWwgZGF0YVxuIik7Cj4gIAkJ cmMgPSAtRUlOVkFMOwo+ICAJCWdvdG8gZW5kOwo+ICAJfQo+IAo+IC0JZWRpZCA9IGF1ZGlvLT5w YW5lbC0+ZWRpZF9jdHJsOwo+IC0KPiArLyoKPiArICogVE9ETzoKPiArICoJYXVkaW9fZGF0YV9i bGsgc2hvdWxkIGJlIGNoYW5nZWQgdG8gYmUgYSBjZWFfc2FkIGFycmF5Cj4gKyAqCWF1ZGlvX2Rh dGFfYmxrX3NpemUgc2hvdWxkIGJlIGNoYW5nZWQgdG8gY29udGFpbiBhIGNvdW50IG9mIHNhZHMK PiArICoKPiArICoJT25jZSB0aGlzIGlzIGRvbmUsIHVzZSBkcm1fZWRpZF90b19zYWQoKSB0byBl eHRyYWN0IHRoaXMgZnJvbQo+ICsgKglhdWRpby0+cGFuZWwtPmVkaWQuIEknZCBjaGFuZ2UgdGhp cywgYnV0IEkgZG9uJ3QgaGF2ZSB0aGF0IGNvZGUgOi8KPiArICovCj4gKyNpZiAwCj4gIAlibGst PmF1ZGlvX2RhdGFfYmxrID0gZWRpZC0+YXVkaW9fZGF0YV9ibG9jazsKPiAgCWJsay0+YXVkaW9f ZGF0YV9ibGtfc2l6ZSA9IGVkaWQtPmFkYl9zaXplOwo+ICsjZW5kaWYKPiArCj4gKwlibGstPnNw a19hbGxvY19kYXRhX2Jsa19zaXplID0gZHJtX2VkaWRfdG9fc3BlYWtlcl9hbGxvY2F0aW9uKAo+ ICsJCQkJCQlhdWRpby0+cGFuZWwtPmVkaWQsCj4gKwkJCQkJCWJsay0+c3Brcl9hbGxvY19kYXRh X2Jsb2NrKTsKPiAKPiAtCWJsay0+c3BrX2FsbG9jX2RhdGFfYmxrID0gZWRpZC0+c3Brcl9hbGxv Y19kYXRhX2Jsb2NrOwo+IC0JYmxrLT5zcGtfYWxsb2NfZGF0YV9ibGtfc2l6ZSA9IGVkaWQtPnNh ZGJfc2l6ZTsKPiAgZW5kOgo+ICAJcmV0dXJuIHJjOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2Rpc3BsYXkuYwo+IGluZGV4IDZmMmMwNjgwOWJmNS4uODQ2ZWYzM2FlY2JkIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPiBAQCAtMzczLDEyICszNzMsNiBAQCBzdGF0 aWMgaW50IGRwX2Rpc3BsYXlfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gc3RydWN0IGRldmlj ZSAqbWFzdGVyLAo+ICAJCWdvdG8gZW5kOwo+ICAJfQo+IAo+IC0JcmMgPSBkcC0+cGFuZWwtPmRw dV9lZGlkX3JlZ2lzdGVyKGRwLT5wYW5lbCk7Cj4gLQlpZiAocmMpIHsKPiAtCQlwcl9lcnIoIkRS TSBEUCBFRElEIHJlZ2lzdGVyIGZhaWxlZFxuIik7Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+ ICAJcmMgPSBkcC0+cG93ZXItPnBvd2VyX2NsaWVudF9pbml0KGRwLT5wb3dlciwgJnByaXYtPnBo YW5kbGUpOwo+ICAJaWYgKHJjKSB7Cj4gIAkJcHJfZXJyKCJQb3dlciBjbGllbnQgY3JlYXRlIGZh aWxlZFxuIik7Cj4gQEAgLTQxMiw3ICs0MDYsNiBAQCBzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X3Vu YmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICAJfQo+ IAo+ICAJKHZvaWQpZHAtPnBvd2VyLT5wb3dlcl9jbGllbnRfZGVpbml0KGRwLT5wb3dlcik7Cj4g LQkodm9pZClkcC0+cGFuZWwtPmRwdV9lZGlkX2RlcmVnaXN0ZXIoZHAtPnBhbmVsKTsKPiAgCSh2 b2lkKWRwLT5hdXgtPmRybV9hdXhfZGVyZWdpc3RlcihkcC0+YXV4KTsKPiAgCWRwX2Rpc3BsYXlf ZGVpbml0aWFsaXplX2hkY3AoZHApOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfcGFuZWwuYwo+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5j Cj4gaW5kZXggMTFjMzMzOGUyM2IxLi42M2Y5YmY0MDc1MDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9wYW5lbC5jCj4gQEAgLTE2LDYgKzE2LDkgQEAKPiAKPiAgI2luY2x1ZGUgImRwX3BhbmVs LmgiCj4gCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPgo+ICsjaW5jbHVkZSA8ZHJt L2RybV9lZGlkLmg+Cj4gKwo+ICAjZGVmaW5lIERQX1BBTkVMX0RFRkFVTFRfQlBQIDI0Cj4gICNk ZWZpbmUgRFBfTUFYX0RTX1BPUlRfQ09VTlQgMQo+IAo+IEBAIC0xNTEsOSArMTU0LDEwIEBAIHN0 YXRpYyBpbnQgZHBfcGFuZWxfcmVhZF9lZGlkKHN0cnVjdCBkcF9wYW5lbCAKPiAqZHBfcGFuZWws Cj4gIAlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZh dGUsIGRwX3BhbmVsKTsKPiAKPiAgCWRvIHsKPiAtCQlkcHVfZ2V0X2VkaWQoY29ubmVjdG9yLCAm cGFuZWwtPmF1eC0+ZHJtX2F1eC0+ZGRjLAo+IC0JCQkodm9pZCAqKikmZHBfcGFuZWwtPmVkaWRf Y3RybCk7Cj4gLQkJaWYgKCFkcF9wYW5lbC0+ZWRpZF9jdHJsLT5lZGlkKSB7Cj4gKwkJa2ZyZWUo ZHBfcGFuZWwtPmVkaWQpOwo+ICsJCWRwX3BhbmVsLT5lZGlkID0gZHJtX2dldF9lZGlkKGNvbm5l Y3RvciwKPiArCQkJCQkgICAgICAmcGFuZWwtPmF1eC0+ZHJtX2F1eC0+ZGRjKTsKPiArCQlpZiAo IWRwX3BhbmVsLT5lZGlkKSB7Cj4gIAkJCXByX2VycigiRURJRCByZWFkIGZhaWxlZFxuIik7Cj4g IAkJCXJldHJ5X2NudCsrOwo+ICAJCQlwYW5lbC0+YXV4LT5yZWNvbmZpZyhwYW5lbC0+YXV4KTsK PiBAQCAtMTYzLDcgKzE2Nyw3IEBAIHN0YXRpYyBpbnQgZHBfcGFuZWxfcmVhZF9lZGlkKHN0cnVj dCBkcF9wYW5lbCAKPiAqZHBfcGFuZWwsCj4gIAkJfQo+ICAJfSB3aGlsZSAocmV0cnlfY250IDwg bWF4X3JldHJ5KTsKPiAKPiAtCXJldHVybiAtRUlOVkFMOwo+ICsJcmV0dXJuIGRybV9hZGRfZWRp ZF9tb2Rlcyhjb25uZWN0b3IsIGRwX3BhbmVsLT5lZGlkKTsKPiAgfQo+IAo+ICBzdGF0aWMgaW50 IGRwX3BhbmVsX3JlYWRfc2lua19jYXBzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4gQEAg LTE4OCw3ICsxOTIsNyBAQCBzdGF0aWMgaW50IGRwX3BhbmVsX3JlYWRfc2lua19jYXBzKHN0cnVj dCBkcF9wYW5lbAo+ICpkcF9wYW5lbCwKPiAgCX0KPiAKPiAgCXJjID0gZHBfcGFuZWxfcmVhZF9l ZGlkKGRwX3BhbmVsLCBjb25uZWN0b3IpOwo+IC0JaWYgKHJjKSB7Cj4gKwlpZiAocmMgPCAwKSB7 Cj4gIAkJcHJfZXJyKCJwYW5lbCBlZGlkIHJlYWQgZmFpbGVkLCBzZXQgZmFpbHNhZmUgbW9kZVxu Iik7Cj4gIAkJcmV0dXJuIHJjOwo+ICAJfQo+IEBAIC0yMTUsNyArMjE5LDcgQEAgc3RhdGljIHUz MiBkcF9wYW5lbF9nZXRfbWF4X3BjbGsoc3RydWN0IGRwX3BhbmVsIAo+ICpkcF9wYW5lbCkKPiAK PiAgCWxpbmtfaW5mbyA9ICZkcF9wYW5lbC0+bGlua19pbmZvOwo+IAo+IC0JYnBjID0gZHB1X2dl dF9zaW5rX2JwYyhkcF9wYW5lbC0+ZWRpZF9jdHJsKTsKPiArCWJwYyA9IGRwX3BhbmVsLT5jb25u ZWN0b3ItPmRpc3BsYXlfaW5mby5icGM7Cj4gIAlicHAgPSBicGMgKiBudW1fY29tcG9uZW50czsK PiAgCWlmICghYnBwKQo+ICAJCWJwcCA9IERQX1BBTkVMX0RFRkFVTFRfQlBQOwo+IEBAIC0yOTAs OCArMjk0LDggQEAgc3RhdGljIGludCBkcF9wYW5lbF9nZXRfbW9kZXMoc3RydWN0IGRwX3BhbmVs IAo+ICpkcF9wYW5lbCwKPiAgCWlmIChkcF9wYW5lbC0+dmlkZW9fdGVzdCkgewo+ICAJCWRwX3Bh bmVsX3NldF90ZXN0X21vZGUocGFuZWwsIG1vZGUpOwo+ICAJCXJldHVybiAxOwo+IC0JfSBlbHNl IGlmIChkcF9wYW5lbC0+ZWRpZF9jdHJsLT5lZGlkKSB7Cj4gLQkJcmV0dXJuIF9kcHVfZWRpZF91 cGRhdGVfbW9kZXMoY29ubmVjdG9yLCBkcF9wYW5lbC0+ZWRpZF9jdHJsKTsKPiArCX0gZWxzZSBp ZiAoZHBfcGFuZWwtPmVkaWQpIHsKPiArCQlyZXR1cm4gZHBfcGFuZWxfcmVhZF9lZGlkKGRwX3Bh bmVsLCBjb25uZWN0b3IpOwo+ICAJfQo+IAo+ICAJLyogZmFpbC1zYWZlIG1vZGUgKi8KPiBAQCAt MzAwLDYgKzMwNCwyNyBAQCBzdGF0aWMgaW50IGRwX3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHBf cGFuZWwgCj4gKmRwX3BhbmVsLAo+ICAJcmV0dXJuIDE7Cj4gIH0KPiAKPiArc3RhdGljIHU4IGRw X3BhbmVsX2dldF9lZGlkX2NoZWNrc3VtKHN0cnVjdCBlZGlkICplZGlkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZWRpZCAqbGFzdF9ibG9jayA9IE5VTEw7Cj4gKwl1OCAqcmF3X2VkaWQgPSBOVUxMOwo+ICsK PiArCWlmICghZWRpZCkgewo+ICsJCXByX2VycigiaW52YWxpZCBlZGlkIGlucHV0XG4iKTsKPiAr CQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlyYXdfZWRpZCA9ICh1OCAqKWVkaWQ7Cj4gKwlyYXdf ZWRpZCArPSAoZWRpZC0+ZXh0ZW5zaW9ucyAqIEVESURfTEVOR1RIKTsKPiArCWxhc3RfYmxvY2sg PSAoc3RydWN0IGVkaWQgKilyYXdfZWRpZDsKPiArCj4gKwlpZiAobGFzdF9ibG9jaykKPiArCQly ZXR1cm4gbGFzdF9ibG9jay0+Y2hlY2tzdW07Cj4gKwo+ICsJcHJfZXJyKCJJbnZhbGlkIGJsb2Nr LCBubyBjaGVja3N1bVxuIik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQg ZHBfcGFuZWxfaGFuZGxlX3NpbmtfcmVxdWVzdChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQo+ ICB7Cj4gIAlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4gQEAgLTMxMiw3ICszMzcs NyBAQCBzdGF0aWMgdm9pZCBkcF9wYW5lbF9oYW5kbGVfc2lua19yZXF1ZXN0KHN0cnVjdAo+IGRw X3BhbmVsICpkcF9wYW5lbCkKPiAgCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1 Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+IAo+ICAJaWYgKHBhbmVsLT5saW5rLT5z aW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfRURJRF9SRUFEKSB7Cj4gLQkJdTggY2hlY2tzdW0g PSBkcHVfZ2V0X2VkaWRfY2hlY2tzdW0oZHBfcGFuZWwtPmVkaWRfY3RybCk7Cj4gKwkJdTggY2hl Y2tzdW0gPSBkcF9wYW5lbF9nZXRfZWRpZF9jaGVja3N1bShkcF9wYW5lbC0+ZWRpZCk7Cj4gCj4g IAkJcGFuZWwtPmxpbmstPnNlbmRfZWRpZF9jaGVja3N1bShwYW5lbC0+bGluaywgY2hlY2tzdW0p Owo+ICAJCXBhbmVsLT5saW5rLT5zZW5kX3Rlc3RfcmVzcG9uc2UocGFuZWwtPmxpbmspOwo+IEBA IC0zODIsMzYgKzQwNyw2IEBAIHN0YXRpYyBpbnQgZHBfcGFuZWxfdGltaW5nX2NmZyhzdHJ1Y3Qg ZHBfcGFuZWwgCj4gKmRwX3BhbmVsKQo+ICAJcmV0dXJuIHJjOwo+ICB9Cj4gCj4gLXN0YXRpYyBp bnQgZHBfcGFuZWxfZWRpZF9yZWdpc3RlcihzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQo+IC17 Cj4gLQlpbnQgcmMgPSAwOwo+IC0KPiAtCWlmICghZHBfcGFuZWwpIHsKPiAtCQlwcl9lcnIoImlu dmFsaWQgaW5wdXRcbiIpOwo+IC0JCXJjID0gLUVJTlZBTDsKPiAtCQlnb3RvIGVuZDsKPiAtCX0K PiAtCj4gLQlkcF9wYW5lbC0+ZWRpZF9jdHJsID0gZHB1X2VkaWRfaW5pdCgpOwo+IC0JaWYgKCFk cF9wYW5lbC0+ZWRpZF9jdHJsKSB7Cj4gLQkJcHJfZXJyKCJkcHUgZWRpZCBpbml0IGZvciBEUCBm YWlsZWRcbiIpOwo+IC0JCXJjID0gLUVOT01FTTsKPiAtCQlnb3RvIGVuZDsKPiAtCX0KPiAtZW5k Ogo+IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkcF9wYW5lbF9lZGlkX2Rl cmVnaXN0ZXIoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKPiAtewo+IC0JaWYgKCFkcF9wYW5l bCkgewo+IC0JCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+ IC0KPiAtCWRwdV9lZGlkX2RlaW5pdCgodm9pZCAqKikmZHBfcGFuZWwtPmVkaWRfY3RybCk7Cj4g LX0KPiAtCj4gIHN0YXRpYyBpbnQgZHBfcGFuZWxfaW5pdF9wYW5lbF9pbmZvKHN0cnVjdCBkcF9w YW5lbCAqZHBfcGFuZWwpCj4gIHsKPiAgCWludCByYyA9IDA7Cj4gQEAgLTUwMyw4ICs0OTgsNiBA QCBzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsX2dldChzdHJ1Y3QgZHBfcGFuZWxfaW4gCj4gKmlu KQo+ICAJZHBfcGFuZWwgPSAmcGFuZWwtPmRwX3BhbmVsOwo+ICAJcGFuZWwtPmF1eF9jZmdfdXBk YXRlX2RvbmUgPSBmYWxzZTsKPiAKPiAtCWRwX3BhbmVsLT5kcHVfZWRpZF9yZWdpc3RlciA9IGRw X3BhbmVsX2VkaWRfcmVnaXN0ZXI7Cj4gLQlkcF9wYW5lbC0+ZHB1X2VkaWRfZGVyZWdpc3RlciA9 IGRwX3BhbmVsX2VkaWRfZGVyZWdpc3RlcjsKPiAgCWRwX3BhbmVsLT5pbml0X2luZm8gPSBkcF9w YW5lbF9pbml0X3BhbmVsX2luZm87Cj4gIAlkcF9wYW5lbC0+dGltaW5nX2NmZyA9IGRwX3BhbmVs X3RpbWluZ19jZmc7Cj4gIAlkcF9wYW5lbC0+cmVhZF9zaW5rX2NhcHMgPSBkcF9wYW5lbF9yZWFk X3NpbmtfY2FwczsKPiBAQCAtNTI3LDUgKzUyMCw3IEBAIHZvaWQgZHBfcGFuZWxfcHV0KHN0cnVj dCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4gCj4gIAlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5l bCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPiAKPiArCWtmcmVlKGRwX3Bh bmVsLT5lZGlkKTsKPiArCWRwX3BhbmVsLT5lZGlkID0gTlVMTDsKPiAgCWRldm1fa2ZyZWUocGFu ZWwtPmRldiwgcGFuZWwpOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfcGFuZWwuaAo+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oCj4gaW5k ZXggYTk1ZmQwMTU3YTRlLi5kNmViZGI5OGY3NjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9wYW5lbC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w YW5lbC5oCj4gQEAgLTE4LDcgKzE4LDggQEAKPiAgI2luY2x1ZGUgImRwX2F1eC5oIgo+ICAjaW5j bHVkZSAiZHBfbGluay5oIgo+ICAjaW5jbHVkZSAiZHBfdXNicGQuaCIKPiAtI2luY2x1ZGUgImRw dV9lZGlkX3BhcnNlci5oIgo+ICsKPiArc3RydWN0IGVkaWQ7Cj4gCj4gIGVudW0gZHBfbGFuZV9j b3VudCB7Cj4gIAlEUF9MQU5FX0NPVU5UXzEJPSAxLAo+IEBAIC02Myw3ICs2NCw3IEBAIHN0cnVj dCBkcF9wYW5lbCB7Cj4gIAl1OCBkc19wb3J0c1tEUF9NQVhfRE9XTlNUUkVBTV9QT1JUU107Cj4g Cj4gIAlzdHJ1Y3QgZHJtX2RwX2xpbmsgbGlua19pbmZvOwo+IC0Jc3RydWN0IGRwdV9lZGlkX2N0 cmwgKmVkaWRfY3RybDsKPiArCXN0cnVjdCBlZGlkICplZGlkOwo+ICAJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKPiAgCXN0cnVjdCBkcF9wYW5lbF9pbmZvIHBpbmZvOwo+ICAJYm9v bCB2aWRlb190ZXN0Owo+IEBAIC03MSw4ICs3Miw2IEBAIHN0cnVjdCBkcF9wYW5lbCB7Cj4gIAl1 MzIgdmljOwo+ICAJdTMyIG1heF9wY2xrX2toejsKPiAKPiAtCWludCAoKmRwdV9lZGlkX3JlZ2lz dGVyKShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKPiAtCXZvaWQgKCpkcHVfZWRpZF9kZXJl Z2lzdGVyKShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKPiAgCWludCAoKmluaXRfaW5mbyko c3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Cj4gIAlpbnQgKCp0aW1pbmdfY2ZnKShzdHJ1Y3Qg ZHBfcGFuZWwgKmRwX3BhbmVsKTsKPiAgCWludCAoKnJlYWRfc2lua19jYXBzKShzdHJ1Y3QgZHBf cGFuZWwgKmRwX3BhbmVsLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9l ZGlkX3BhcnNlci5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5jCj4g ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMjRmNWY0NGMxNDkyLi4wMDAwMDAwMDAw MDAKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5jCj4gKysrIC9k ZXYvbnVsbAo+IEBAIC0xLDY1NyArMCwwIEBACj4gLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiAtICoKPiAtICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciAKPiBtb2RpZnkKPiAtICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+IC0gKgo+IC0gKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKPiAtICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKPiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+IC0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlIDxkcm0vZHJtX2VkaWQu aD4KPiAtI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KPiAtCj4gLSNpbmNsdWRlICJkcHVfa21zLmgi Cj4gLSNpbmNsdWRlICJkcHVfZWRpZF9wYXJzZXIuaCIKPiAtCj4gLSNkZWZpbmUgREJDX1NUQVJU X09GRlNFVCA0Cj4gLSNkZWZpbmUgRURJRF9EVERfTEVOIDE4Cj4gLQo+IC1lbnVtIGRhdGFfYmxv Y2tfdHlwZXMgewo+IC0JUkVTRVJWRUQsCj4gLQlBVURJT19EQVRBX0JMT0NLLAo+IC0JVklERU9f REFUQV9CTE9DSywKPiAtCVZFTkRPUl9TUEVDSUZJQ19EQVRBX0JMT0NLLAo+IC0JU1BFQUtFUl9B TExPQ0FUSU9OX0RBVEFfQkxPQ0ssCj4gLQlWRVNBX0RUQ19EQVRBX0JMT0NLLAo+IC0JUkVTRVJW RUQyLAo+IC0JVVNFX0VYVEVOREVEX1RBRwo+IC19Owo+IC0KPiAtc3RhdGljIHU4ICpkcHVfZmlu ZF9lZGlkX2V4dGVuc2lvbihzdHJ1Y3QgZWRpZCAqZWRpZCwgaW50IGV4dF9pZCkKPiAtewo+IC0J dTggKmVkaWRfZXh0ID0gTlVMTDsKPiAtCWludCBpOwo+IC0KPiAtCS8qIE5vIEVESUQgb3IgRURJ RCBleHRlbnNpb25zICovCj4gLQlpZiAoZWRpZCA9PSBOVUxMIHx8IGVkaWQtPmV4dGVuc2lvbnMg PT0gMCkKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQkvKiBGaW5kIENFQSBleHRlbnNpb24gKi8K PiAtCWZvciAoaSA9IDA7IGkgPCBlZGlkLT5leHRlbnNpb25zOyBpKyspIHsKPiAtCQllZGlkX2V4 dCA9ICh1OCAqKWVkaWQgKyBFRElEX0xFTkdUSCAqIChpICsgMSk7Cj4gLQkJaWYgKGVkaWRfZXh0 WzBdID09IGV4dF9pZCkKPiAtCQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JaWYgKGkgPT0gZWRpZC0+ ZXh0ZW5zaW9ucykKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQlyZXR1cm4gZWRpZF9leHQ7Cj4g LX0KPiAtCj4gLXN0YXRpYyB1OCAqZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihzdHJ1Y3QgZWRpZCAq ZWRpZCkKPiAtewo+IC0JcmV0dXJuIGRwdV9maW5kX2VkaWRfZXh0ZW5zaW9uKGVkaWQsIERQVV9D RUFfRVhUKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1kcHVfY2VhX2RiX3BheWxvYWRfbGVu KGNvbnN0IHU4ICpkYikKPiAtewo+IC0JcmV0dXJuIGRiWzBdICYgMHgxZjsKPiAtfQo+IC0KPiAt c3RhdGljIGludAo+IC1kcHVfY2VhX2RiX3RhZyhjb25zdCB1OCAqZGIpCj4gLXsKPiAtCXJldHVy biBkYlswXSA+PiA1Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50Cj4gLWRwdV9jZWFfcmV2aXNpb24o Y29uc3QgdTggKmNlYSkKPiAtewo+IC0JcmV0dXJuIGNlYVsxXTsKPiAtfQo+IC0KPiAtc3RhdGlj IGludAo+IC1kcHVfY2VhX2RiX29mZnNldHMoY29uc3QgdTggKmNlYSwgaW50ICpzdGFydCwgaW50 ICplbmQpCj4gLXsKPiAtCS8qIERhdGEgYmxvY2sgb2Zmc2V0IGluIENFQSBleHRlbnNpb24gYmxv Y2sgKi8KPiAtCSpzdGFydCA9IDQ7Cj4gLQkqZW5kID0gY2VhWzJdOwo+IC0JaWYgKCplbmQgPT0g MCkKPiAtCQkqZW5kID0gMTI3Owo+IC0JaWYgKCplbmQgPCA0IHx8ICplbmQgPiAxMjcpCj4gLQkJ cmV0dXJuIC1FUkFOR0U7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtI2RlZmluZSBkcHVfZm9y X2VhY2hfY2VhX2RiKGNlYSwgaSwgc3RhcnQsIGVuZCkgXAo+IC1mb3IgKChpKSA9IChzdGFydCk7 IFwKPiAtKGkpIDwgKGVuZCkgJiYgKGkpICsgZHB1X2NlYV9kYl9wYXlsb2FkX2xlbigmKGNlYSlb KGkpXSkgPCAoZW5kKTsgXAo+IC0oaSkgKz0gZHB1X2NlYV9kYl9wYXlsb2FkX2xlbigmKGNlYSlb KGkpXSkgKyAxKQo+IC0KPiAtc3RhdGljIGJvb2wgZHB1X2NlYV9kYl9pc19oZG1pX2hmX3ZzZGIo Y29uc3QgdTggKmRiKQo+IC17Cj4gLQlpbnQgaGRtaV9pZDsKPiAtCj4gLQlpZiAoZHB1X2NlYV9k Yl90YWcoZGIpICE9IFZFTkRPUl9TUEVDSUZJQ19EQVRBX0JMT0NLKQo+IC0JCXJldHVybiBmYWxz ZTsKPiAtCj4gLQlpZiAoZHB1X2NlYV9kYl9wYXlsb2FkX2xlbihkYikgPCA3KQo+IC0JCXJldHVy biBmYWxzZTsKPiAtCj4gLQloZG1pX2lkID0gZGJbMV0gfCAoZGJbMl0gPDwgOCkgfCAoZGJbM10g PDwgMTYpOwo+IC0KPiAtCXJldHVybiBoZG1pX2lkID09IEhETUlfRk9SVU1fSUVFRV9PVUk7Cj4g LX0KPiAtCj4gLXN0YXRpYyB1OCAqZHB1X2VkaWRfZmluZF9leHRlbmRlZF90YWdfYmxvY2soc3Ry dWN0IGVkaWQgKmVkaWQsIGludCAKPiBibGtfaWQpCj4gLXsKPiAtCXU4ICpkYiA9IE5VTEw7Cj4g LQl1OCAqY2VhID0gTlVMTDsKPiAtCj4gLQlpZiAoIWVkaWQpIHsKPiAtCQlEUFVfRVJST1IoIiVz OiBpbnZhbGlkIGlucHV0XG4iLCBfX2Z1bmNfXyk7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQl9Cj4g LQo+IC0JY2VhID0gZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihlZGlkKTsKPiAtCj4gLQlpZiAoY2Vh ICYmIGRwdV9jZWFfcmV2aXNpb24oY2VhKSA+PSAzKSB7Cj4gLQkJaW50IGksIHN0YXJ0LCBlbmQ7 Cj4gLQo+IC0JCWlmIChkcHVfY2VhX2RiX29mZnNldHMoY2VhLCAmc3RhcnQsICZlbmQpKQo+IC0J CQlyZXR1cm4gTlVMTDsKPiAtCj4gLQkJZHB1X2Zvcl9lYWNoX2NlYV9kYihjZWEsIGksIHN0YXJ0 LCBlbmQpIHsKPiAtCQkJZGIgPSAmY2VhW2ldOwo+IC0JCQlpZiAoKGRwdV9jZWFfZGJfdGFnKGRi KSA9PSBEUFVfRVhURU5ERURfVEFHKSAmJgo+IC0JCQkJKGRiWzFdID09IGJsa19pZCkpCj4gLQkJ CQlyZXR1cm4gZGI7Cj4gLQkJfQo+IC0JfQo+IC0JcmV0dXJuIE5VTEw7Cj4gLX0KPiAtCj4gLXN0 YXRpYyB1OCAqCj4gLWRwdV9lZGlkX2ZpbmRfYmxvY2soc3RydWN0IGVkaWQgKmVkaWQsIGludCBi bGtfaWQpCj4gLXsKPiAtCXU4ICpkYiA9IE5VTEw7Cj4gLQl1OCAqY2VhID0gTlVMTDsKPiAtCj4g LQlpZiAoIWVkaWQpIHsKPiAtCQlEUFVfRVJST1IoIiVzOiBpbnZhbGlkIGlucHV0XG4iLCBfX2Z1 bmNfXyk7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQo+IC0JY2VhID0gZHB1X2ZpbmRfY2Vh X2V4dGVuc2lvbihlZGlkKTsKPiAtCj4gLQlpZiAoY2VhICYmIGRwdV9jZWFfcmV2aXNpb24oY2Vh KSA+PSAzKSB7Cj4gLQkJaW50IGksIHN0YXJ0LCBlbmQ7Cj4gLQo+IC0JCWlmIChkcHVfY2VhX2Ri X29mZnNldHMoY2VhLCAmc3RhcnQsICZlbmQpKQo+IC0JCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQkJ ZHB1X2Zvcl9lYWNoX2NlYV9kYihjZWEsIGksIHN0YXJ0LCBlbmQpIHsKPiAtCQkJZGIgPSAmY2Vh W2ldOwo+IC0JCQlpZiAoZHB1X2NlYV9kYl90YWcoZGIpID09IGJsa19pZCkKPiAtCQkJCXJldHVy biBkYjsKPiAtCQl9Cj4gLQl9Cj4gLQlyZXR1cm4gTlVMTDsKPiAtfQo+IC0KPiAtCj4gLXN0YXRp YyBjb25zdCB1OCAqX2RwdV9lZGlkX2ZpbmRfYmxvY2soY29uc3QgdTggKmluX2J1ZiwgdTMyIAo+ IHN0YXJ0X29mZnNldCwKPiAtCXU4IHR5cGUsIHU4ICpsZW4pCj4gLXsKPiAtCS8qIHRoZSBzdGFy dCBvZiBkYXRhIGJsb2NrIGNvbGxlY3Rpb24sIHN0YXJ0IG9mIFZpZGVvIERhdGEgQmxvY2sgKi8K PiAtCXUzMiBvZmZzZXQgPSBzdGFydF9vZmZzZXQ7Cj4gLQl1MzIgZGJjX29mZnNldCA9IGluX2J1 ZlsyXTsKPiAtCj4gLQlEUFVfRURJRF9ERUJVRygiJXMgKyIsIF9fZnVuY19fKTsKPiAtCS8qCj4g LQkgKiAqIGVkaWQgYnVmZmVyIDEsIGJ5dGUgMiBiZWluZyA0IG1lYW5zIG5vIG5vbi1EVEQvRGF0 YSBibG9jawo+IC0JICogICBjb2xsZWN0aW9uIHByZXNlbnQuCj4gLQkgKiAqIGVkaWQgYnVmZmVy IDEsIGJ5dGUgMiBiZWluZyAwIG1lYW5zIG5vIG5vbi1EVEQvREFUQSBibG9jawo+IC0JICogICBj b2xsZWN0aW9uIHByZXNlbnQgYW5kIG5vIERURCBkYXRhIHByZXNlbnQuCj4gLQkgKi8KPiAtCWlm ICgoZGJjX29mZnNldCA9PSAwKSB8fCAoZGJjX29mZnNldCA9PSA0KSkgewo+IC0JCURQVV9FUlJP UigiRURJRDogbm8gRFREIG9yIG5vbi1EVEQgZGF0YSBwcmVzZW50XG4iKTsKPiAtCQlyZXR1cm4g TlVMTDsKPiAtCX0KPiAtCj4gLQl3aGlsZSAob2Zmc2V0IDwgZGJjX29mZnNldCkgewo+IC0JCXU4 IGJsb2NrX2xlbiA9IGluX2J1ZltvZmZzZXRdICYgMHgxRjsKPiAtCj4gLQkJaWYgKChvZmZzZXQg KyBibG9ja19sZW4gPD0gZGJjX29mZnNldCkgJiYKPiAtCQkgICAgKGluX2J1ZltvZmZzZXRdID4+ IDUpID09IHR5cGUpIHsKPiAtCQkJKmxlbiA9IGJsb2NrX2xlbjsKPiAtCQkJRFBVX0VESURfREVC VUcoImJsb2NrPSVkIGZvdW5kIEAgMHgleCB3LyBsZW49JWRcbiIsCj4gLQkJCQl0eXBlLCBvZmZz ZXQsIGJsb2NrX2xlbik7Cj4gLQo+IC0JCQlyZXR1cm4gaW5fYnVmICsgb2Zmc2V0Owo+IC0JCX0K PiAtCQlvZmZzZXQgKz0gMSArIGJsb2NrX2xlbjsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gTlVMTDsK PiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHB1X2VkaWRfZXh0cmFjdF92ZW5kb3JfaWQoc3RydWN0 IGRwdV9lZGlkX2N0cmwgCj4gKmVkaWRfY3RybCkKPiAtewo+IC0JY2hhciAqdmVuZG9yX2lkOwo+ IC0JdTMyIGlkX2NvZGVzOwo+IC0KPiAtCURQVV9FRElEX0RFQlVHKCIlcyArIiwgX19mdW5jX18p Owo+IC0JaWYgKCFlZGlkX2N0cmwpIHsKPiAtCQlEUFVfRVJST1IoIiVzOiBpbnZhbGlkIGlucHV0 XG4iLCBfX2Z1bmNfXyk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCXZlbmRvcl9pZCA9IGVk aWRfY3RybC0+dmVuZG9yX2lkOwo+IC0JaWRfY29kZXMgPSAoKHUzMillZGlkX2N0cmwtPmVkaWQt Pm1mZ19pZFswXSA8PCA4KSArCj4gLQkJZWRpZF9jdHJsLT5lZGlkLT5tZmdfaWRbMV07Cj4gLQo+ IC0JdmVuZG9yX2lkWzBdID0gJ0EnIC0gMSArICgoaWRfY29kZXMgPj4gMTApICYgMHgxRik7Cj4g LQl2ZW5kb3JfaWRbMV0gPSAnQScgLSAxICsgKChpZF9jb2RlcyA+PiA1KSAmIDB4MUYpOwo+IC0J dmVuZG9yX2lkWzJdID0gJ0EnIC0gMSArIChpZF9jb2RlcyAmIDB4MUYpOwo+IC0JdmVuZG9yX2lk WzNdID0gMDsKPiAtCURQVV9FRElEX0RFQlVHKCJ2ZW5kb3IgaWQgaXMgJXMgIiwgdmVuZG9yX2lk KTsKPiAtCURQVV9FRElEX0RFQlVHKCIlcyAtIiwgX19mdW5jX18pOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCBkcHVfZWRpZF9zZXRfeTQyMF9zdXBwb3J0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCj4gLXUzMiB2aWRlb19mb3JtYXQpCj4gLXsKPiAtCXU4IGNlYV9tb2RlID0gMDsK PiAtCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+IC0JdTMyIG1vZGVfZm10X2ZsYWdz ID0gMDsKPiAtCj4gLQkvKiBOZWVkIHRvIGFkZCBZNDIwIHN1cHBvcnQgZmxhZyB0byB0aGUgbW9k ZXMgKi8KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+cHJvYmVkX21v ZGVzLCBoZWFkKSB7Cj4gLQkJLyogQ2FjaGUgdGhlIGZvcm1hdCBmbGFncyBiZWZvcmUgY2xlYXJp bmcgKi8KPiAtCQltb2RlX2ZtdF9mbGFncyA9IG1vZGUtPmZsYWdzOwo+IC0JCS8qIENsZWFyIHRo ZSBSR0IvWVVWIGZvcm1hdCBmbGFncyBiZWZvcmUgY2FsbGluZyB1cHN0cmVhbSBBUEkgKi8KPiAt CQltb2RlLT5mbGFncyAmPSB+RFBVX0RSTV9NT0RFX0ZMQUdfRk1UX01BU0s7Cj4gLQkJY2VhX21v ZGUgPSBkcm1fbWF0Y2hfY2VhX21vZGUobW9kZSk7Cj4gLQkJLyogUmVzdG9yZSB0aGUgZm9ybWF0 IGZsYWdzICovCj4gLQkJbW9kZS0+ZmxhZ3MgPSBtb2RlX2ZtdF9mbGFnczsKPiAtCQlpZiAoKGNl YV9tb2RlICE9IDApICYmIChjZWFfbW9kZSA9PSB2aWRlb19mb3JtYXQpKSB7Cj4gLQkJCURQVV9F RElEX0RFQlVHKCIlcyBmb3VuZCBtYXRjaCBmb3IgJWQgIiwgX19mdW5jX18sCj4gLQkJCXZpZGVv X2Zvcm1hdCk7Cj4gLQkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfU1VQUE9SVFNfWVVW Owo+IC0JCX0KPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHB1X2VkaWRfcGFyc2VfWTQy MENNREIoCj4gLXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcHVfZWRp ZF9jdHJsICplZGlkX2N0cmwsCj4gLWNvbnN0IHU4ICpkYikKPiAtewo+IC0JdTMyIG9mZnNldCA9 IDA7Cj4gLQl1OCBjbWRiX2xlbiA9IDA7Cj4gLQl1OCBzdmRfbGVuID0gMDsKPiAtCWNvbnN0IHU4 ICpzdmQgPSBOVUxMOwo+IC0JdTMyIGkgPSAwLCBqID0gMDsKPiAtCXUzMiB2aWRlb19mb3JtYXQg PSAwOwo+IC0KPiAtCWlmICghZWRpZF9jdHJsKSB7Cj4gLQkJRFBVX0VSUk9SKCIlczogZWRpZF9j dHJsIGlzIE5VTExcbiIsIF9fZnVuY19fKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JaWYg KCFkYikgewo+IC0JCURQVV9FUlJPUigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVuY19fKTsK PiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQlEUFVfRURJRF9ERUJVRygiJXMgK1xuIiwgX19mdW5jX18p Owo+IC0JY21kYl9sZW4gPSBkYlswXSAmIDB4MWY7Cj4gLQo+IC0JLyogQnl0ZSAzIHRvIEwrMSBj b250YWluIFNWRHMgKi8KPiAtCW9mZnNldCArPSAyOwo+IC0KPiAtCXN2ZCA9IGRwdV9lZGlkX2Zp bmRfYmxvY2soZWRpZF9jdHJsLT5lZGlkLCBWSURFT19EQVRBX0JMT0NLKTsKPiAtCj4gLQlpZiAo c3ZkKSB7Cj4gLQkJLyptb3ZpbmcgdG8gdGhlIG5leHQgYnl0ZSBhcyB2aWMgaW5mbyBiZWdpbnMg dGhlcmUqLwo+IC0JCXN2ZF9sZW4gPSBzdmRbMF0gJiAweDFmOwo+IC0JCSsrc3ZkOwo+IC0JfQo+ IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBzdmRfbGVuOyBpKyssIGorKykgewo+IC0JCXZpZGVvX2Zv cm1hdCA9ICooc3ZkICsgaSkgJiAweDdGOwo+IC0JCWlmIChjbWRiX2xlbiA9PSAxKSB7Cj4gLQkJ CS8qIElmIGNtZGJfbGVuIGlzIDEsIGl0IG1lYW5zIGFsbCBTVkRzIHN1cHBvcnQgWVVWICovCj4g LQkJCWRwdV9lZGlkX3NldF95NDIwX3N1cHBvcnQoY29ubmVjdG9yLCB2aWRlb19mb3JtYXQpOwo+ IC0JCX0gZWxzZSBpZiAoZGJbb2Zmc2V0XSAmICgxIDw8IGopKSB7Cj4gLQkJCWRwdV9lZGlkX3Nl dF95NDIwX3N1cHBvcnQoY29ubmVjdG9yLCB2aWRlb19mb3JtYXQpOwo+IC0KPiAtCQkJaWYgKGog JiAweDgwKSB7Cj4gLQkJCQlqID0gai84Owo+IC0JCQkJb2Zmc2V0Kys7Cj4gLQkJCQlpZiAob2Zm c2V0ID49IGNtZGJfbGVuKQo+IC0JCQkJCWJyZWFrOwo+IC0JCQl9Cj4gLQkJfQo+IC0JfQo+IC0K PiAtCURQVV9FRElEX0RFQlVHKCIlcyAtXG4iLCBfX2Z1bmNfXyk7Cj4gLQo+IC19Cj4gLQo+IC1z dGF0aWMgdm9pZCBkcHVfZWRpZF9wYXJzZV9ZNDIwVkRCKAo+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsLAo+IC1jb25zdCB1 OCAqZGIpCj4gLXsKPiAtCXU4IGxlbiA9IGRiWzBdICYgMHgxZjsKPiAtCXUzMiBpID0gMDsKPiAt CXUzMiB2aWRlb19mb3JtYXQgPSAwOwo+IC0KPiAtCWlmICghZWRpZF9jdHJsKSB7Cj4gLQkJRFBV X0VSUk9SKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwo+IC0JCXJldHVybjsKPiAt CX0KPiAtCj4gLQlEUFVfRURJRF9ERUJVRygiJXMgK1xuIiwgX19mdW5jX18pOwo+IC0KPiAtCS8q IE9mZnNldCB0byBieXRlIDMgKi8KPiAtCWRiICs9IDI7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgbGVu IC0gMTsgaSsrKSB7Cj4gLQkJdmlkZW9fZm9ybWF0ID0gKihkYiArIGkpICYgMHg3RjsKPiAtCQkv Kgo+IC0JCSAqIG1vZGUgd2FzIGFscmVhZHkgYWRkZWQgaW4gZ2V0X21vZGVzKCkKPiAtCQkgKiBv bmx5IG5lZWQgdG8gc2V0IHRoZSBZNDIwIHN1cHBvcnQgZmxhZwo+IC0JCSAqLwo+IC0JCWRwdV9l ZGlkX3NldF95NDIwX3N1cHBvcnQoY29ubmVjdG9yLCB2aWRlb19mb3JtYXQpOwo+IC0JfQo+IC0J RFBVX0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk IGRwdV9lZGlkX3NldF9tb2RlX2Zvcm1hdCgKPiAtc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3Rvciwgc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCkKPiAtewo+IC0JY29uc3QgdTgg KmRiID0gTlVMTDsKPiAtCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+IC0KPiAtCURQ VV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Cj4gLQkvKiBTZXQgWVVWIG1vZGUgc3Vw cG9ydCBmbGFncyBmb3IgWUNiY3I0MjBWREIgKi8KPiAtCWRiID0gZHB1X2VkaWRfZmluZF9leHRl bmRlZF90YWdfYmxvY2soZWRpZF9jdHJsLT5lZGlkLAo+IC0JCQlZNDIwX1ZJREVPX0RBVEFfQkxP Q0spOwo+IC0JaWYgKGRiKQo+IC0JCWRwdV9lZGlkX3BhcnNlX1k0MjBWREIoY29ubmVjdG9yLCBl ZGlkX2N0cmwsIGRiKTsKPiAtCWVsc2UKPiAtCQlEUFVfRURJRF9ERUJVRygiWUNiQ3I0MjAgVkRC IGlzIG5vdCBwcmVzZW50XG4iKTsKPiAtCj4gLQkvKiBTZXQgUkdCIHN1cHBvcnRlZCBvbiBhbGwg bW9kZXMgd2hlcmUgWVVWIGlzIG5vdCBzZXQgKi8KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkobW9k ZSwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7Cj4gLQkJaWYgKCEobW9kZS0+Zmxh Z3MgJiBEUk1fTU9ERV9GTEFHX1NVUFBPUlRTX1lVVikpCj4gLQkJCW1vZGUtPmZsYWdzIHw9IERS TV9NT0RFX0ZMQUdfU1VQUE9SVFNfUkdCOwo+IC0JfQo+IC0KPiAtCj4gLQlkYiA9IGRwdV9lZGlk X2ZpbmRfZXh0ZW5kZWRfdGFnX2Jsb2NrKGVkaWRfY3RybC0+ZWRpZCwKPiAtCQkJWTQyMF9DQVBB QklMSVRZX01BUF9EQVRBX0JMT0NLKTsKPiAtCWlmIChkYikKPiAtCQlkcHVfZWRpZF9wYXJzZV9Z NDIwQ01EQihjb25uZWN0b3IsIGVkaWRfY3RybCwgZGIpOwo+IC0JZWxzZQo+IC0JCURQVV9FRElE X0RFQlVHKCJZQ2JDcjQyMCBDTURCIGlzIG5vdCBwcmVzZW50XG4iKTsKPiAtCj4gLQlEUFVfRURJ RF9ERUJVRygiJXMgLVxuIiwgX19mdW5jX18pOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfZHB1 X2VkaWRfdXBkYXRlX2RjX21vZGVzKAo+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsKQo+IC17Cj4gLQlpbnQgaSwgc3RhcnQs IGVuZDsKPiAtCXU4ICplZGlkX2V4dCwgKmhkbWk7Cj4gLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5m byAqZGlzcF9pbmZvOwo+IC0JdTMyIGhkbWlfZGNfeXV2X21vZGVzID0gMDsKPiAtCj4gLQlEUFVf RURJRF9ERUJVRygiJXMgK1xuIiwgX19mdW5jX18pOwo+IC0KPiAtCWlmICghY29ubmVjdG9yIHx8 ICFlZGlkX2N0cmwpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+IC0JCXJl dHVybjsKPiAtCX0KPiAtCj4gLQlkaXNwX2luZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87 Cj4gLQo+IC0JZWRpZF9leHQgPSBkcHVfZmluZF9jZWFfZXh0ZW5zaW9uKGVkaWRfY3RybC0+ZWRp ZCk7Cj4gLQo+IC0JaWYgKCFlZGlkX2V4dCkgewo+IC0JCURQVV9FUlJPUigibm8gY2VhIGV4dGVu c2lvblxuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCWlmIChkcHVfY2VhX2RiX29mZnNl dHMoZWRpZF9leHQsICZzdGFydCwgJmVuZCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWRwdV9mb3Jf ZWFjaF9jZWFfZGIoZWRpZF9leHQsIGksIHN0YXJ0LCBlbmQpIHsKPiAtCQlpZiAoZHB1X2NlYV9k Yl9pc19oZG1pX2hmX3ZzZGIoJmVkaWRfZXh0W2ldKSkgewo+IC0KPiAtCQkJaGRtaSA9ICZlZGlk X2V4dFtpXTsKPiAtCj4gLQkJCWlmIChkcHVfY2VhX2RiX3BheWxvYWRfbGVuKGhkbWkpIDwgNykK PiAtCQkJCWNvbnRpbnVlOwo+IC0KPiAtCQkJaWYgKGhkbWlbN10gJiBEUk1fRURJRF9ZQ0JDUjQy MF9EQ18zMCkgewo+IC0JCQkJaGRtaV9kY195dXZfbW9kZXMgfD0gRFJNX0VESURfWUNCQ1I0MjBf RENfMzA7Cj4gLQkJCQlEUFVfRURJRF9ERUJVRygiWTQyMCAzMC1iaXQgc3VwcG9ydGVkXG4iKTsK PiAtCQkJfQo+IC0KPiAtCQkJaWYgKGhkbWlbN10gJiBEUk1fRURJRF9ZQ0JDUjQyMF9EQ18zNikg ewo+IC0JCQkJaGRtaV9kY195dXZfbW9kZXMgfD0gRFJNX0VESURfWUNCQ1I0MjBfRENfMzY7Cj4g LQkJCQlEUFVfRURJRF9ERUJVRygiWTQyMCAzNi1iaXQgc3VwcG9ydGVkXG4iKTsKPiAtCQkJfQo+ IC0KPiAtCQkJaWYgKGhkbWlbN10gJiBEUk1fRURJRF9ZQ0JDUjQyMF9EQ180OCkgewo+IC0JCQkJ aGRtaV9kY195dXZfbW9kZXMgfD0gRFJNX0VESURfWUNCQ1I0MjBfRENfMzY7Cj4gLQkJCQlEUFVf RURJRF9ERUJVRygiWTQyMCA0OC1iaXQgc3VwcG9ydGVkXG4iKTsKPiAtCQkJfQo+IC0JCX0KPiAt CX0KPiAtCj4gLQlkaXNwX2luZm8tPmVkaWRfaGRtaV9kY19tb2RlcyB8PSBoZG1pX2RjX3l1dl9t b2RlczsKPiAtCj4gLQlEUFVfRURJRF9ERUJVRygiJXMgLVxuIiwgX19mdW5jX18pOwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCBfZHB1X2VkaWRfZXh0cmFjdF9hdWRpb19kYXRhX2Jsb2NrcygKPiAt CXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwpCj4gLXsKPiAtCXU4IGxlbiA9IDA7Cj4g LQl1OCBhZGJfbWF4ID0gMDsKPiAtCWNvbnN0IHU4ICphZGIgPSBOVUxMOwo+IC0JdTMyIG9mZnNl dCA9IERCQ19TVEFSVF9PRkZTRVQ7Cj4gLQl1OCAqY2VhID0gTlVMTDsKPiAtCj4gLQlpZiAoIWVk aWRfY3RybCkgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBlZGlkX2N0cmxcbiIpOwo+IC0JCXJl dHVybjsKPiAtCX0KPiAtCURQVV9FRElEX0RFQlVHKCIlcyArIiwgX19mdW5jX18pOwo+IC0JY2Vh ID0gZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihlZGlkX2N0cmwtPmVkaWQpOwo+IC0JaWYgKCFjZWEp IHsKPiAtCQlEUFVfREVCVUcoIkNFQSBleHRlbnNpb24gbm90IGZvdW5kXG4iKTsKPiAtCQlyZXR1 cm47Cj4gLQl9Cj4gLQo+IC0JZWRpZF9jdHJsLT5hZGJfc2l6ZSA9IDA7Cj4gLQo+IC0JbWVtc2V0 KGVkaWRfY3RybC0+YXVkaW9fZGF0YV9ibG9jaywgMCwKPiAtCQlzaXplb2YoZWRpZF9jdHJsLT5h dWRpb19kYXRhX2Jsb2NrKSk7Cj4gLQo+IC0JZG8gewo+IC0JCWxlbiA9IDA7Cj4gLQkJYWRiID0g X2RwdV9lZGlkX2ZpbmRfYmxvY2soY2VhLCBvZmZzZXQsIEFVRElPX0RBVEFfQkxPQ0ssCj4gLQkJ CSZsZW4pOwo+IC0KPiAtCQlpZiAoKGFkYiA9PSBOVUxMKSB8fCAobGVuID4gTUFYX0FVRElPX0RB VEFfQkxPQ0tfU0laRSB8fAo+IC0JCQlhZGJfbWF4ID49IE1BWF9OVU1CRVJfQURCKSkgewo+IC0J CQlpZiAoIWVkaWRfY3RybC0+YWRiX3NpemUpIHsKPiAtCQkJCURQVV9ERUJVRygiTm8vSW52YWxp ZCBBdWRpbyBEYXRhIEJsb2NrXG4iKTsKPiAtCQkJCXJldHVybjsKPiAtCQkJfQo+IC0KPiAtCQkJ Y29udGludWU7Cj4gLQkJfQo+IC0KPiAtCQltZW1jcHkoZWRpZF9jdHJsLT5hdWRpb19kYXRhX2Js b2NrICsgZWRpZF9jdHJsLT5hZGJfc2l6ZSwKPiAtCQkJYWRiICsgMSwgbGVuKTsKPiAtCQlvZmZz ZXQgPSAoYWRiIC0gY2VhKSArIDEgKyBsZW47Cj4gLQo+IC0JCWVkaWRfY3RybC0+YWRiX3NpemUg Kz0gbGVuOwo+IC0JCWFkYl9tYXgrKzsKPiAtCX0gd2hpbGUgKGFkYik7Cj4gLQlEUFVfRURJRF9E RUJVRygiJXMgLSIsIF9fZnVuY19fKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgX2RwdV9lZGlk X2V4dHJhY3Rfc3BlYWtlcl9hbGxvY2F0aW9uX2RhdGEoCj4gLQlzdHJ1Y3QgZHB1X2VkaWRfY3Ry bCAqZWRpZF9jdHJsKQo+IC17Cj4gLQl1OCBsZW47Cj4gLQljb25zdCB1OCAqc2FkYiA9IE5VTEw7 Cj4gLQl1OCAqY2VhID0gTlVMTDsKPiAtCj4gLQlpZiAoIWVkaWRfY3RybCkgewo+IC0JCURQVV9F UlJPUigiaW52YWxpZCBlZGlkX2N0cmxcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCURQVV9F RElEX0RFQlVHKCIlcyArIiwgX19mdW5jX18pOwo+IC0JY2VhID0gZHB1X2ZpbmRfY2VhX2V4dGVu c2lvbihlZGlkX2N0cmwtPmVkaWQpOwo+IC0JaWYgKCFjZWEpIHsKPiAtCQlEUFVfREVCVUcoIkNF QSBleHRlbnNpb24gbm90IGZvdW5kXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0Jc2Fk YiA9IF9kcHVfZWRpZF9maW5kX2Jsb2NrKGNlYSwgREJDX1NUQVJUX09GRlNFVCwKPiAtCQlTUEVB S0VSX0FMTE9DQVRJT05fREFUQV9CTE9DSywgJmxlbik7Cj4gLQlpZiAoKHNhZGIgPT0gTlVMTCkg fHwgKGxlbiAhPSBNQVhfU1BLUl9BTExPQ19EQVRBX0JMT0NLX1NJWkUpKSB7Cj4gLQkJRFBVX0RF QlVHKCJOby9JbnZhbGlkIFNwZWFrZXIgQWxsb2NhdGlvbiBEYXRhIEJsb2NrXG4iKTsKPiAtCQly ZXR1cm47Cj4gLQl9Cj4gLQo+IC0JbWVtY3B5KGVkaWRfY3RybC0+c3Brcl9hbGxvY19kYXRhX2Js b2NrLCBzYWRiICsgMSwgbGVuKTsKPiAtCWVkaWRfY3RybC0+c2FkYl9zaXplID0gbGVuOwo+IC0K PiAtCURQVV9FRElEX0RFQlVHKCJzcGVha2VyIGFsbG9jIGRhdGEgU1AgYnl0ZSA9ICUwOHggJXMl cyVzJXMlcyVzJXNcbiIsCj4gLQkJc2FkYlsxXSwKPiAtCQkoc2FkYlsxXSAmIEJJVCgwKSkgPyAi RkwvRlIsIiA6ICIiLAo+IC0JCShzYWRiWzFdICYgQklUKDEpKSA/ICJMRkUsIiA6ICIiLAo+IC0J CShzYWRiWzFdICYgQklUKDIpKSA/ICJGQywiIDogIiIsCj4gLQkJKHNhZGJbMV0gJiBCSVQoMykp ID8gIlJML1JSLCIgOiAiIiwKPiAtCQkoc2FkYlsxXSAmIEJJVCg0KSkgPyAiUkMsIiA6ICIiLAo+ IC0JCShzYWRiWzFdICYgQklUKDUpKSA/ICJGTEMvRlJDLCIgOiAiIiwKPiAtCQkoc2FkYlsxXSAm IEJJVCg2KSkgPyAiUkxDL1JSQywiIDogIiIpOwo+IC0JRFBVX0VESURfREVCVUcoIiVzIC0iLCBf X2Z1bmNfXyk7Cj4gLX0KPiAtCj4gLXN0cnVjdCBkcHVfZWRpZF9jdHJsICpkcHVfZWRpZF9pbml0 KHZvaWQpCj4gLXsKPiAtCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSBOVUxMOwo+ IC0KPiAtCURQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Cj4gLQllZGlkX2N0cmwg PSBremFsbG9jKHNpemVvZigqZWRpZF9jdHJsKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWVkaWRf Y3RybCkgewo+IC0JCURQVV9FUlJPUigiZWRpZF9jdHJsIGFsbG9jIGZhaWxlZFxuIik7Cj4gLQkJ cmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQltZW1zZXQoKGVkaWRfY3RybCksIDAsIHNpemVvZigqZWRp ZF9jdHJsKSk7Cj4gLQlEUFVfRURJRF9ERUJVRygiJXMgLVxuIiwgX19mdW5jX18pOwo+IC0JcmV0 dXJuIGVkaWRfY3RybDsKPiAtfQo+IC0KPiAtdm9pZCBkcHVfZnJlZV9lZGlkKHZvaWQgKippbnB1 dCkKPiAtewo+IC0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCA9IChzdHJ1Y3QgZHB1 X2VkaWRfY3RybCAqKSgqaW5wdXQpOwo+IC0KPiAtCURQVV9FRElEX0RFQlVHKCIlcyArIiwgX19m dW5jX18pOwo+IC0Ja2ZyZWUoZWRpZF9jdHJsLT5lZGlkKTsKPiAtCWVkaWRfY3RybC0+ZWRpZCA9 IE5VTEw7Cj4gLX0KPiAtCj4gLXZvaWQgZHB1X2VkaWRfZGVpbml0KHZvaWQgKippbnB1dCkKPiAt ewo+IC0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCA9IChzdHJ1Y3QgZHB1X2VkaWRf Y3RybCAqKSgqaW5wdXQpOwo+IC0KPiAtCURQVV9FRElEX0RFQlVHKCIlcyArIiwgX19mdW5jX18p Owo+IC0JZHB1X2ZyZWVfZWRpZCgodm9pZCAqKSZlZGlkX2N0cmwpOwo+IC0Ja2ZyZWUoZWRpZF9j dHJsKTsKPiAtCURQVV9FRElEX0RFQlVHKCIlcyAtIiwgX19mdW5jX18pOwo+IC19Cj4gLQo+IC1p bnQgX2RwdV9lZGlkX3VwZGF0ZV9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAo+IC0Jdm9pZCAqaW5wdXQpCj4gLXsKPiAtCWludCByYyA9IDA7Cj4gLQlzdHJ1Y3QgZHB1X2Vk aWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJsICopKGlucHV0KTsKPiAt Cj4gLQlEUFVfRURJRF9ERUJVRygiJXMgKyIsIF9fZnVuY19fKTsKPiAtCWlmIChlZGlkX2N0cmwt PmVkaWQpIHsKPiAtCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29u bmVjdG9yLAo+IC0JCQllZGlkX2N0cmwtPmVkaWQpOwo+IC0KPiAtCQlyYyA9IGRybV9hZGRfZWRp ZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWRfY3RybC0+ZWRpZCk7Cj4gLQkJZHB1X2VkaWRfc2V0X21v ZGVfZm9ybWF0KGNvbm5lY3RvciwgZWRpZF9jdHJsKTsKPiAtCQlfZHB1X2VkaWRfdXBkYXRlX2Rj X21vZGVzKGNvbm5lY3RvciwgZWRpZF9jdHJsKTsKPiAtCQlEUFVfRURJRF9ERUJVRygiJXMgLSIs IF9fZnVuY19fKTsKPiAtCQlyZXR1cm4gcmM7Cj4gLQl9Cj4gLQo+IC0JZHJtX21vZGVfY29ubmVj dG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgTlVMTCk7Cj4gLQlEUFVfRURJRF9E RUJVRygiJXMgbnVsbCBlZGlkIC0iLCBfX2Z1bmNfXyk7Cj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAt Cj4gLXUzMiBkcHVfZ2V0X3NpbmtfYnBjKHZvaWQgKmlucHV0KQo+IC17Cj4gLQlzdHJ1Y3QgZHB1 X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJsICopKGlucHV0KTsK PiAtCXN0cnVjdCBlZGlkICplZGlkID0gZWRpZF9jdHJsLT5lZGlkOwo+IC0KPiAtCWlmICghZWRp ZCkgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBlZGlkIGlucHV0XG4iKTsKPiAtCQlyZXR1cm4g MDsKPiAtCX0KPiAtCj4gLQlpZiAoKGVkaWQtPnJldmlzaW9uIDwgMykgfHwgIShlZGlkLT5pbnB1 dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCWlmIChl ZGlkLT5yZXZpc2lvbiA8IDQpIHsKPiAtCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9ESUdJ VEFMX1RZUEVfRFZJKQo+IC0JCQlyZXR1cm4gODsKPiAtCQllbHNlCj4gLQkJCXJldHVybiAwOwo+ IC0JfQo+IC0KPiAtCXN3aXRjaCAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9ESUdJVEFMX0RFUFRI X01BU0spIHsKPiAtCWNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF82Ogo+IC0JCXJldHVybiA2 Owo+IC0JY2FzZSBEUk1fRURJRF9ESUdJVEFMX0RFUFRIXzg6Cj4gLQkJcmV0dXJuIDg7Cj4gLQlj YXNlIERSTV9FRElEX0RJR0lUQUxfREVQVEhfMTA6Cj4gLQkJcmV0dXJuIDEwOwo+IC0JY2FzZSBE Uk1fRURJRF9ESUdJVEFMX0RFUFRIXzEyOgo+IC0JCXJldHVybiAxMjsKPiAtCWNhc2UgRFJNX0VE SURfRElHSVRBTF9ERVBUSF8xNDoKPiAtCQlyZXR1cm4gMTQ7Cj4gLQljYXNlIERSTV9FRElEX0RJ R0lUQUxfREVQVEhfMTY6Cj4gLQkJcmV0dXJuIDE2Owo+IC0JY2FzZSBEUk1fRURJRF9ESUdJVEFM X0RFUFRIX1VOREVGOgo+IC0JZGVmYXVsdDoKPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtfQo+IC0K PiAtdTggZHB1X2dldF9lZGlkX2NoZWNrc3VtKHZvaWQgKmlucHV0KQo+IC17Cj4gLQlzdHJ1Y3Qg ZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJsICopKGlucHV0 KTsKPiAtCXN0cnVjdCBlZGlkICplZGlkID0gTlVMTCwgKmxhc3RfYmxvY2sgPSBOVUxMOwo+IC0J dTggKnJhd19lZGlkID0gTlVMTDsKPiAtCj4gLQlpZiAoIWVkaWRfY3RybCB8fCAhZWRpZF9jdHJs LT5lZGlkKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVkaWQgaW5wdXRcbiIpOwo+IC0JCXJl dHVybiAwOwo+IC0JfQo+IC0KPiAtCWVkaWQgPSBlZGlkX2N0cmwtPmVkaWQ7Cj4gLQo+IC0JcmF3 X2VkaWQgPSAodTggKillZGlkOwo+IC0JcmF3X2VkaWQgKz0gKGVkaWQtPmV4dGVuc2lvbnMgKiBF RElEX0xFTkdUSCk7Cj4gLQlsYXN0X2Jsb2NrID0gKHN0cnVjdCBlZGlkICopcmF3X2VkaWQ7Cj4g LQo+IC0JaWYgKGxhc3RfYmxvY2spCj4gLQkJcmV0dXJuIGxhc3RfYmxvY2stPmNoZWNrc3VtOwo+ IC0KPiAtCURQVV9FUlJPUigiSW52YWxpZCBibG9jaywgbm8gY2hlY2tzdW1cbiIpOwo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gLWJvb2wgZHB1X2RldGVjdF9oZG1pX21vbml0b3Iodm9pZCAqaW5w dXQpCj4gLXsKPiAtCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAoc3RydWN0IGRw dV9lZGlkX2N0cmwgKikoaW5wdXQpOwo+IC0KPiAtCXJldHVybiBkcm1fZGV0ZWN0X2hkbWlfbW9u aXRvcihlZGlkX2N0cmwtPmVkaWQpOwo+IC19Cj4gLQo+IC12b2lkIGRwdV9nZXRfZWRpZChzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+IC0JCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIg KmFkYXB0ZXIsIHZvaWQgKippbnB1dCkKPiAtewo+IC0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVk aWRfY3RybCA9IChzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqKSgqaW5wdXQpOwo+IC0KPiAtCWVkaWRf Y3RybC0+ZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsIGFkYXB0ZXIpOwo+IC0JRFBVX0VE SURfREVCVUcoIiVzICtcbiIsIF9fZnVuY19fKTsKPiAtCj4gLQlpZiAoIWVkaWRfY3RybC0+ZWRp ZCkKPiAtCQlEUFVfRVJST1IoIkVESUQgcmVhZCBmYWlsZWRcbiIpOwo+IC0KPiAtCWlmIChlZGlk X2N0cmwtPmVkaWQpIHsKPiAtCQlkcHVfZWRpZF9leHRyYWN0X3ZlbmRvcl9pZChlZGlkX2N0cmwp Owo+IC0JCV9kcHVfZWRpZF9leHRyYWN0X2F1ZGlvX2RhdGFfYmxvY2tzKGVkaWRfY3RybCk7Cj4g LQkJX2RwdV9lZGlkX2V4dHJhY3Rfc3BlYWtlcl9hbGxvY2F0aW9uX2RhdGEoZWRpZF9jdHJsKTsK PiAtCX0KPiAtCURQVV9FRElEX0RFQlVHKCIlcyAtXG4iLCBfX2Z1bmNfXyk7Cj4gLX07Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPiBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCBjMDUxYjE4YmI4MTIuLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMTY2ICsw LDAgQEAKPiAtLyoKPiAtICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+IG1vZGlmeQo+ IC0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhbmQKPiAtICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+IC0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCj4gLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4gLSAqCj4gLSAqLwo+IC0KPiAtI2lmbmRlZiBfRFBVX0VESURfUEFSU0VSX0hfCj4gLSNk ZWZpbmUgX0RQVV9FRElEX1BBUlNFUl9IXwo+IC0KPiAtI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ Cj4gLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMu aD4KPiAtI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+IC0jaW5jbHVkZSA8bGludXgvaTJj Lmg+Cj4gLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+IC0jaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+ Cj4gLSNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KPiAtCj4gLQo+IC0jZGVmaW5lIE1BWF9OVU1C RVJfQURCIDUKPiAtI2RlZmluZSBNQVhfQVVESU9fREFUQV9CTE9DS19TSVpFIDMwCj4gLSNkZWZp bmUgTUFYX1NQS1JfQUxMT0NfREFUQV9CTE9DS19TSVpFIDMKPiAtI2RlZmluZSBFRElEX1ZFTkRP Ul9JRF9TSVpFICAgICA0Cj4gLQo+IC0jZGVmaW5lIERQVV9DRUFfRVhUICAgIDB4MDIKPiAtI2Rl ZmluZSBEUFVfRVhURU5ERURfVEFHIDB4MDcKPiAtCj4gLSNkZWZpbmUgRFBVX0RSTV9NT0RFX0ZM QUdfRk1UX01BU0sgKDB4MyA8PCAyMCkKPiAtCj4gLWVudW0gZXh0ZW5kZWRfZGF0YV9ibG9ja190 eXBlcyB7Cj4gLQlWSURFT19DQVBBQklMSVRZX0RBVEFfQkxPQ0sgPSAweDAsCj4gLQlWRU5ET1Jf U1BFQ0lGSUNfVklERU9fREFUQV9CTE9DSyA9IDB4MDEsCj4gLQlIRE1JX1ZJREVPX0RBVEFfQkxP Q0sgPSAweDA0LAo+IC0JSERSX1NUQVRJQ19NRVRBREFUQV9EQVRBX0JMT0NLID0gMHgwNiwKPiAt CVk0MjBfVklERU9fREFUQV9CTE9DSyA9IDB4MEUsCj4gLQlWSURFT19GT1JNQVRfUFJFRkVSRU5D RV9EQVRBX0JMT0NLID0gMHgwRCwKPiAtCVk0MjBfQ0FQQUJJTElUWV9NQVBfREFUQV9CTE9DSyA9 IDB4MEYsCj4gLQlWRU5ET1JfU1BFQ0lGSUNfQVVESU9fREFUQV9CTE9DSyA9IDB4MTEsCj4gLQlJ TkZPRlJBTUVfREFUQV9CTE9DSyA9IDB4MjAsCj4gLX07Cj4gLQo+IC0jaWZkZWYgRFBVX0VESURf REVCVUdfRU5BQkxFCj4gLSNkZWZpbmUgRFBVX0VESURfREVCVUcoZm10LCBhcmdzLi4uKSAgIERQ VV9FUlJPUihmbXQsICMjYXJncykKPiAtI2Vsc2UKPiAtI2RlZmluZSBEUFVfRURJRF9ERUJVRyhm bXQsIGFyZ3MuLi4pICAgRFBVX0RFQlVHKGZtdCwgIyNhcmdzKQo+IC0jZW5kaWYKPiAtCj4gLS8q Cj4gLSAqIHN0cnVjdCBoZG1pX2VkaWRfaGRyX2RhdGEgLSBIRFIgU3RhdGljIE1ldGFkYXRhCj4g LSAqIEBlb3RmOiBFbGVjdHJvLU9wdGljYWwgVHJhbnNmZXIgRnVuY3Rpb24KPiAtICogQG1ldGFk YXRhX3R5cGVfb25lOiBTdGF0aWMgTWV0YWRhdGEgVHlwZSAxIHN1cHBvcnQKPiAtICogQG1heF9s dW1pbmFuY2U6IERlc2lyZWQgQ29udGVudCBNYXhpbXVtIEx1bWluYW5jZQo+IC0gKiBAYXZnX2x1 bWluYW5jZTogRGVzaXJlZCBDb250ZW50IEZyYW1lLWF2ZXJhZ2UgTHVtaW5hbmNlCj4gLSAqIEBt aW5fbHVtaW5hbmNlOiBEZXNpcmVkIENvbnRlbnQgTWluaW11bSBMdW1pbmFuY2UKPiAtICovCj4g LXN0cnVjdCBkcHVfZWRpZF9oZHJfZGF0YSB7Cj4gLQl1MzIgZW90ZjsKPiAtCWJvb2wgbWV0YWRh dGFfdHlwZV9vbmU7Cj4gLQl1MzIgbWF4X2x1bWluYW5jZTsKPiAtCXUzMiBhdmdfbHVtaW5hbmNl Owo+IC0JdTMyIG1pbl9sdW1pbmFuY2U7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3QgZHB1X2VkaWRfc2lu a19jYXBzIHsKPiAtCXUzMiBtYXhfcGNsa19pbl9oejsKPiAtCWJvb2wgc2NkY19wcmVzZW50Owo+ IC0JYm9vbCBzY3JhbWJsZV9zdXBwb3J0OyAvKiBzY3JhbWJsZSBzdXBwb3J0IGZvciBsZXNzIHRo YW4gMzQwTWNzYyAqLwo+IC0JYm9vbCByZWFkX3JlcV9zdXBwb3J0Owo+IC0JYm9vbCBvc2RfZGlz cGFyaXR5Owo+IC0JYm9vbCBkdWFsX3ZpZXdfc3VwcG9ydDsKPiAtCWJvb2wgaW5kX3ZpZXdfc3Vw cG9ydDsKPiAtfTsKPiAtCj4gLXN0cnVjdCBkcHVfZWRpZF9jdHJsIHsKPiAtCXN0cnVjdCBlZGlk ICplZGlkOwo+IC0JdTggcHRfc2Nhbl9pbmZvOwo+IC0JdTggaXRfc2Nhbl9pbmZvOwo+IC0JdTgg Y2Vfc2Nhbl9pbmZvOwo+IC0JdTggYXVkaW9fZGF0YV9ibG9ja1tNQVhfTlVNQkVSX0FEQiAqIE1B WF9BVURJT19EQVRBX0JMT0NLX1NJWkVdOwo+IC0JaW50IGFkYl9zaXplOwo+IC0JdTggc3Brcl9h bGxvY19kYXRhX2Jsb2NrW01BWF9TUEtSX0FMTE9DX0RBVEFfQkxPQ0tfU0laRV07Cj4gLQlpbnQg c2FkYl9zaXplOwo+IC0JYm9vbCBoZHJfc3VwcG9ydGVkOwo+IC0JY2hhciB2ZW5kb3JfaWRbRURJ RF9WRU5ET1JfSURfU0laRV07Cj4gLQlzdHJ1Y3QgZHB1X2VkaWRfc2lua19jYXBzIHNpbmtfY2Fw czsKPiAtCXN0cnVjdCBkcHVfZWRpZF9oZHJfZGF0YSBoZHJfZGF0YTsKPiAtfTsKPiAtCj4gLS8q Kgo+IC0gKiBkcHVfZWRpZF9pbml0KCkgLSBpbml0IGVkaWQgc3RydWN0dXJlLgo+IC0gKiBAZWRp ZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+IC0gKiBSZXR1 cm46IGhhbmRsZSB0byBkcHVfZWRpZF9jdHJsIGZvciB0aGUgY2xpZW50Lgo+IC0gKi8KPiAtc3Ry dWN0IGRwdV9lZGlkX2N0cmwgKmRwdV9lZGlkX2luaXQodm9pZCk7Cj4gLQo+IC0vKioKPiAtICog ZHB1X2VkaWRfZGVpbml0KCkgLSBkZWluaXQgZWRpZCBzdHJ1Y3R1cmUuCj4gLSAqIEBlZGlkX2N0 cmw6ICAgICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCj4gLSAqCj4gLSAqIFJl dHVybjogdm9pZC4KPiAtICovCj4gLXZvaWQgZHB1X2VkaWRfZGVpbml0KHZvaWQgKiplZGlkX2N0 cmwpOwo+IC0KPiAtLyoqCj4gLSAqIGRwdV9nZXRfZWRpZCgpIC0gZ2V0IGVkaWQgaW5mby4KPiAt ICogQGNvbm5lY3RvcjogICBIYW5kbGUgdG8gdGhlIGRybV9jb25uZWN0b3IuCj4gLSAqIEBhZGFw dGVyOiAgICAgaGFuZGxlIHRvIGkyYyBhZGFwdGVyIGZvciBEREMgcmVhZAo+IC0gKiBAZWRpZF9j dHJsOiAgIEhhbmRsZSB0byB0aGUgZWRpZF9jdHJsIHN0cnVjdHVyZS4KPiAtICoKPiAtICogUmV0 dXJuOiB2b2lkLgo+IC0gKi8KPiAtdm9pZCBkcHVfZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKPiAtc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAo+IC12b2lkICoq ZWRpZF9jdHJsKTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfZnJlZV9lZGlkKCkgLSBmcmVlIGVkaWQg c3RydWN0dXJlLgo+IC0gKiBAZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwg c3RydWN0dXJlLgo+IC0gKgo+IC0gKiBSZXR1cm46IHZvaWQuCj4gLSAqLwo+IC12b2lkIGRwdV9m cmVlX2VkaWQodm9pZCAqKmVkaWRfY3RybCk7Cj4gLQo+IC0vKioKPiAtICogZHB1X2RldGVjdF9o ZG1pX21vbml0b3IoKSAtIGRldGVjdCBIRE1JIG1vZGUuCj4gLSAqIEBlZGlkX2N0cmw6ICAgICBI YW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCj4gLSAqCj4gLSAqIFJldHVybjogZXJy b3IgY29kZS4KPiAtICovCj4gLWJvb2wgZHB1X2RldGVjdF9oZG1pX21vbml0b3Iodm9pZCAqZWRp ZF9jdHJsKTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfZ2V0X3NpbmtfYnBjKCkgLSByZXR1cm4gdGhl IGJwYyBvZiBzaW5rIGRldmljZS4KPiAtICogQGVkaWRfY3RybDogICAgIEhhbmRsZSB0byB0aGUg ZWRpZF9jdHJsIHN0cnVjdHVyZS4KPiAtICoKPiAtICogUmV0dXJuOiBicGMgc3VwcG9ydGVkIGJ5 IHRoZSBzaW5rLgo+IC0gKi8KPiAtdTMyIGRwdV9nZXRfc2lua19icGModm9pZCAqZWRpZF9jdHJs KTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfZ2V0X2VkaWRfY2hlY2tzdW0oKSAtIHJldHVybiB0aGUg Y2hlY2tzdW0gb2YgbGFzdCBibG9jayBvZiAKPiBFRElELgo+IC0gKiBAaW5wdXQ6ICAgICBIYW5k bGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCj4gLSAqCj4gLSAqIFJldHVybjogY2hlY2tz dW0gb2YgdGhlIGxhc3QgRURJRCBibG9jay4KPiAtICovCj4gLXU4IGRwdV9nZXRfZWRpZF9jaGVj a3N1bSh2b2lkICppbnB1dCk7Cj4gLQo+IC0vKioKPiAtICogX2RwdV9lZGlkX3VwZGF0ZV9tb2Rl cygpIC0gcG9wdWxhdGUgRURJRCBtb2Rlcy4KPiAtICogQGVkaWRfY3RybDogICAgIEhhbmRsZSB0 byB0aGUgZWRpZF9jdHJsIHN0cnVjdHVyZS4KPiAtICoKPiAtICogUmV0dXJuOiBlcnJvciBjb2Rl Lgo+IC0gKi8KPiAtaW50IF9kcHVfZWRpZF91cGRhdGVfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKPiAtCQkJCQkJCXZvaWQgKmVkaWRfY3RybCk7Cj4gLQo+IC0jZW5kaWYg LyogX0RQVV9FRElEX1BBUlNFUl9IXyAqLwo+IC0KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZnJlZWRyZW5vCg==