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 14:31:29 -0800 Message-ID: <0569f6fdbf932942defa603f09867c50@codeaurora.org> References: <20180223191515.155783-1-seanpaul@chromium.org> <20180223215141.GQ223881@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180223215141.GQ223881@art_vandelay> 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 VGhlIGJpdG1hcHMgaW4gZHJtX2hkbWlfaW5mbyBkb250IHNlZW0gdG8gYmUgZXhwb3NlZCB0byB1 c2Vyc3BhY2UuCgpPdXIgbW9kZSBzZWxlY3Rpb24gbG9naWMgaXMgaW4gdXNlcnNwYWNlIGF0IHRo ZSBtb21lbnQgd2hpY2ggbWVhbnMgaXRzIApiZXR0ZXIgdXNlcnNwYWNlIGtub3dzIHdoaWNoIG1v ZGVzIHN1cHBvcnQgd2hhdC4KCklmIHdlIGRlY2lkZSB0byBtb3ZlIG1vZGUgdmFsaWRhdGlvbiBl bnRpcmVseSB0byB0aGUgZHJpdmVyLCB3ZSBjYW4gdXNlIAp0aGVzZSBiaXRtYXBzIHRvIHZhbGlk YXRlLgoKQnV0IHRoaXMgaXMgYWdhaW4gYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB0aGVuLgoKSXMg dGhlcmUgbm8gdXNlLWNhc2Ugc28gZmFyIHdoZXJlIHVzZXJzcGFjZSBoYXMgaGFkIHRvIGtub3cg d2hpY2ggbW9kZXMgCnN1cHBvcnQgd2hpY2ggZm9ybWF0cz8KClRoYW5rcwoKQWJoaW5hdgoKT24g MjAxOC0wMi0yMyAxMzo1MSwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIEZyaSwgRmViIDIzLCAyMDE4 IGF0IDAxOjI5OjAzUE0gLTA4MDAsIGFiaGluYXZrQGNvZGVhdXJvcmEub3JnIAo+IHdyb3RlOgo+ PiBJIGFtIE9LIHdpdGggcmVtb3Zpbmcgc29tZSBwYXJ0cyBvZiB0aGUgcGFyc2VyIGJ1dCBub3Qg ZW50aXJlbHkuCj4+IAo+PiBGdW5kYW1lbnRhbGx5LCB3ZSB3ZW50IGFoZWFkIHdpdGggdGhlIHBh cnNlciBmb3IgYSBjb3VwbGUgb2YgcmVhc29uczoKPj4gCj4+IC0+IFdlIHdvdWxkIGxpa2UgdG8g YmUgYWJsZSB0byBhc3NvY2lhdGUgdGhlIGNvbG9yIGZvcm1hdCB3aXRoIHRoZSAKPj4gbW9kZS4K Pj4gVGhpcyBoZWxwcyB1cyBkZWNpZGUgdGhhdCBpZiB0aGUgc2FtZSBtb2RlIHN1cHBvcnRzIGJv dGggUkdCL1lVViB0aGVuIAo+PiB3aGljaAo+PiBvbmUgd2UgY2FuIHBpY2suCj4+IAo+PiAtPiBU aGUgdXBzdHJlYW0gcGFyc2VyIGN1cnJlbnRseSBqdXN0IGFkZHMgaXQgdG8gdGhlIHN1cHBvcnRl ZCBmb3JtYXRzIAo+PiBvZgo+PiB0aGUgc2luayBpbmZvLT5jb2xvcl9mb3JtYXRzIHw9IERSTV9D T0xPUl9GT1JNQVRfWUNSQ0I0MjA7IEhvd2V2ZXIgdGhlIAo+PiBsaW5rCj4+IGJldHdlZW4gdGhl IG1vZGUgYW5kIHRoZSBmb3JtYXQgaXRzZWxmIGlzIHVuY2xlYXIKPj4gCj4+IEkgd291bGQgbGlr ZSB0byBrbm93IGlmIGFueSBvZiB0aGUgYWJvdmUgaGF2ZSBiZWVuIGFkZHJlc3NlZCBzbyBmYXIg Cj4+IGJlZm9yZQo+PiByZXZlcnRpbmcgdGhpcy4KPiAKPiBUaGUgaW5mb3JtYXRpb24gb2Ygd2hp Y2ggbW9kZXMgc3VwcG9ydCB3aGljaCBmb3JtYXRzIGlzIHN0b3JlZCBpbiAKPiBiaXRtYXBzIHdp dGhpbgo+IGRybV9oZG1pX2luZm8uIFRoZSBkb2N1bWVudGF0aW9uIGlzIGhlcmU6Cj4gCj4gaHR0 cHM6Ly8wMS5vcmcvbGludXhncmFwaGljcy9nZngtZG9jcy9kcm0vZ3B1L2RybS1rbXMuaHRtbD9o aWdobGlnaHQ9ZHJtX2hkbWlfaW5mbyNjLmRybV9oZG1pX2luZm8KPiAKPiBJcyB0aGlzIHN1ZmZp Y2llbnQ/Cj4gCj4gU2Vhbgo+IAo+PiAKPj4gVGhhbmtzCj4+IAo+PiBBYmhpbmF2Cj4+IAo+PiAK Pj4gT24gMjAxOC0wMi0yMyAxMToxNSwgU2VhbiBQYXVsIHdyb3RlOgo+PiA+IFVzZSBkcm1fZWRp ZCB0byBwYXJzZSB0aGUgZWRpZCBpbnN0ZWFkIG9mIHRoZSBoYW5kIHJvbGxlZCBkcHUgdmVyc2lv bi4KPj4gPgo+PiA+IFNpZ25lZC1vZmYtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0u b3JnPgo+PiA+IC0tLQo+PiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAg IHwgICAxIC0KPj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jICAgICB8ICAy MiArLQo+PiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYyAgIHwgICA3IC0K Pj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jICAgICB8ICA3NyArKy0KPj4g PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oICAgICB8ICAgNyArLQo+PiA+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5jIHwgNjU3IC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4+ID4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgg fCAxNjYgLS0tLS0tLQo+PiA+ICA3IGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDg4 MiBkZWxldGlvbnMoLSkKPj4gPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZHB1X2VkaWRfcGFyc2VyLmMKPj4gPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPj4gPgo+PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+PiA+ IGluZGV4IGZjZDg1YWUyOGQ2Ni4uMmZiOWJhMTFkZjE5IDEwMDY0NAo+PiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01h a2VmaWxlCj4+ID4gQEAgLTg2LDcgKzg2LDYgQEAgbXNtLXkgOj0gXAo+PiA+ICAJZGlzcC9kcHUx L2RwdV9ybS5vIFwKPj4gPiAgCWRpc3AvZHB1MS9kcHVfdmJpZi5vIFwKPj4gPiAgCWRwdV9kYmcu byBcCj4+ID4gLQlkcHVfZWRpZF9wYXJzZXIubyBcCj4+ID4gIAlkcHVfaW9fdXRpbC5vIFwKPj4g PiAgCWRwdV9kYmdfZXZ0bG9nLm8gXAo+PiA+ICAJZHB1X3Bvd2VyX2hhbmRsZS5vIFwKPj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jCj4+ID4gYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1ZGlvLmMKPj4gPiBpbmRleCA0ZTBjZGNkMTVjOGMuLmNl MDBiOGI1MjYzMSAxMDA2NDQKPj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1 ZGlvLmMKPj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1ZGlvLmMKPj4gPiBA QCAtMTgsNiArMTgsNyBAQAo+PiA+ICAjaW5jbHVkZSA8bGludXgvbXNtX2V4dF9kaXNwbGF5Lmg+ Cj4+ID4KPj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4+ID4gKyNpbmNsdWRl IDxkcm0vZHJtX2VkaWQuaD4KPj4gPgo+PiA+ICAjaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgo+PiA+ ICAjaW5jbHVkZSAiZHBfYXVkaW8uaCIKPj4gPiBAQCAtNDgwLDcgKzQ4MSw2IEBAIHN0YXRpYyBp bnQgZHBfYXVkaW9fZ2V0X2VkaWRfYmxrKHN0cnVjdAo+PiA+IHBsYXRmb3JtX2RldmljZSAqcGRl diwKPj4gPiAgewo+PiA+ICAJaW50IHJjID0gMDsKPj4gPiAgCXN0cnVjdCBkcF9hdWRpb19wcml2 YXRlICphdWRpbzsKPj4gPiAtCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkOwo+PiA+Cj4+ID4g IAlhdWRpbyA9IGdldF9hdWRpb19nZXRfZGF0YShwZGV2KTsKPj4gPiAgCWlmIChJU19FUlIoYXVk aW8pKSB7Cj4+ID4gQEAgLTQ4OCwxOSArNDg4LDI5IEBAIHN0YXRpYyBpbnQgZHBfYXVkaW9fZ2V0 X2VkaWRfYmxrKHN0cnVjdAo+PiA+IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4gPiAgCQlnb3Rv IGVuZDsKPj4gPiAgCX0KPj4gPgo+PiA+IC0JaWYgKCFhdWRpby0+cGFuZWwgfHwgIWF1ZGlvLT5w YW5lbC0+ZWRpZF9jdHJsKSB7Cj4+ID4gKwlpZiAoIWF1ZGlvLT5wYW5lbCB8fCAhYXVkaW8tPnBh bmVsLT5lZGlkKSB7Cj4+ID4gIAkJcHJfZXJyKCJpbnZhbGlkIHBhbmVsIGRhdGFcbiIpOwo+PiA+ ICAJCXJjID0gLUVJTlZBTDsKPj4gPiAgCQlnb3RvIGVuZDsKPj4gPiAgCX0KPj4gPgo+PiA+IC0J ZWRpZCA9IGF1ZGlvLT5wYW5lbC0+ZWRpZF9jdHJsOwo+PiA+IC0KPj4gPiArLyoKPj4gPiArICog VE9ETzoKPj4gPiArICoJYXVkaW9fZGF0YV9ibGsgc2hvdWxkIGJlIGNoYW5nZWQgdG8gYmUgYSBj ZWFfc2FkIGFycmF5Cj4+ID4gKyAqCWF1ZGlvX2RhdGFfYmxrX3NpemUgc2hvdWxkIGJlIGNoYW5n ZWQgdG8gY29udGFpbiBhIGNvdW50IG9mIHNhZHMKPj4gPiArICoKPj4gPiArICoJT25jZSB0aGlz IGlzIGRvbmUsIHVzZSBkcm1fZWRpZF90b19zYWQoKSB0byBleHRyYWN0IHRoaXMgZnJvbQo+PiA+ ICsgKglhdWRpby0+cGFuZWwtPmVkaWQuIEknZCBjaGFuZ2UgdGhpcywgYnV0IEkgZG9uJ3QgaGF2 ZSB0aGF0IGNvZGUgOi8KPj4gPiArICovCj4+ID4gKyNpZiAwCj4+ID4gIAlibGstPmF1ZGlvX2Rh dGFfYmxrID0gZWRpZC0+YXVkaW9fZGF0YV9ibG9jazsKPj4gPiAgCWJsay0+YXVkaW9fZGF0YV9i bGtfc2l6ZSA9IGVkaWQtPmFkYl9zaXplOwo+PiA+ICsjZW5kaWYKPj4gPiArCj4+ID4gKwlibGst PnNwa19hbGxvY19kYXRhX2Jsa19zaXplID0gZHJtX2VkaWRfdG9fc3BlYWtlcl9hbGxvY2F0aW9u KAo+PiA+ICsJCQkJCQlhdWRpby0+cGFuZWwtPmVkaWQsCj4+ID4gKwkJCQkJCWJsay0+c3Brcl9h bGxvY19kYXRhX2Jsb2NrKTsKPj4gPgo+PiA+IC0JYmxrLT5zcGtfYWxsb2NfZGF0YV9ibGsgPSBl ZGlkLT5zcGtyX2FsbG9jX2RhdGFfYmxvY2s7Cj4+ID4gLQlibGstPnNwa19hbGxvY19kYXRhX2Js a19zaXplID0gZWRpZC0+c2FkYl9zaXplOwo+PiA+ICBlbmQ6Cj4+ID4gIAlyZXR1cm4gcmM7Cj4+ ID4gIH0KPj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5 LmMKPj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCj4+ID4gaW5kZXgg NmYyYzA2ODA5YmY1Li44NDZlZjMzYWVjYmQgMTAwNjQ0Cj4+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2Rpc3BsYXkuYwo+PiA+IEBAIC0zNzMsMTIgKzM3Myw2IEBAIHN0YXRpYyBpbnQgZHBfZGlz cGxheV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4gPiBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs Cj4+ID4gIAkJZ290byBlbmQ7Cj4+ID4gIAl9Cj4+ID4KPj4gPiAtCXJjID0gZHAtPnBhbmVsLT5k cHVfZWRpZF9yZWdpc3RlcihkcC0+cGFuZWwpOwo+PiA+IC0JaWYgKHJjKSB7Cj4+ID4gLQkJcHJf ZXJyKCJEUk0gRFAgRURJRCByZWdpc3RlciBmYWlsZWRcbiIpOwo+PiA+IC0JCWdvdG8gZW5kOwo+ PiA+IC0JfQo+PiA+IC0KPj4gPiAgCXJjID0gZHAtPnBvd2VyLT5wb3dlcl9jbGllbnRfaW5pdChk cC0+cG93ZXIsICZwcml2LT5waGFuZGxlKTsKPj4gPiAgCWlmIChyYykgewo+PiA+ICAJCXByX2Vy cigiUG93ZXIgY2xpZW50IGNyZWF0ZSBmYWlsZWRcbiIpOwo+PiA+IEBAIC00MTIsNyArNDA2LDYg QEAgc3RhdGljIHZvaWQgZHBfZGlzcGxheV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LAo+PiA+ IHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPj4gPiAgCX0KPj4gPgo+PiA+ICAJKHZvaWQpZHAtPnBv d2VyLT5wb3dlcl9jbGllbnRfZGVpbml0KGRwLT5wb3dlcik7Cj4+ID4gLQkodm9pZClkcC0+cGFu ZWwtPmRwdV9lZGlkX2RlcmVnaXN0ZXIoZHAtPnBhbmVsKTsKPj4gPiAgCSh2b2lkKWRwLT5hdXgt PmRybV9hdXhfZGVyZWdpc3RlcihkcC0+YXV4KTsKPj4gPiAgCWRwX2Rpc3BsYXlfZGVpbml0aWFs aXplX2hkY3AoZHApOwo+PiA+ICB9Cj4+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcGFuZWwuYwo+PiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5j Cj4+ID4gaW5kZXggMTFjMzMzOGUyM2IxLi42M2Y5YmY0MDc1MDggMTAwNjQ0Cj4+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jCj4+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9wYW5lbC5jCj4+ID4gQEAgLTE2LDYgKzE2LDkgQEAKPj4gPgo+PiA+ICAj aW5jbHVkZSAiZHBfcGFuZWwuaCIKPj4gPgo+PiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0 b3IuaD4KPj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+PiA+ICsKPj4gPiAgI2RlZmlu ZSBEUF9QQU5FTF9ERUZBVUxUX0JQUCAyNAo+PiA+ICAjZGVmaW5lIERQX01BWF9EU19QT1JUX0NP VU5UIDEKPj4gPgo+PiA+IEBAIC0xNTEsOSArMTU0LDEwIEBAIHN0YXRpYyBpbnQgZHBfcGFuZWxf cmVhZF9lZGlkKHN0cnVjdCBkcF9wYW5lbAo+PiA+ICpkcF9wYW5lbCwKPj4gPiAgCXBhbmVsID0g Y29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwp Owo+PiA+Cj4+ID4gIAlkbyB7Cj4+ID4gLQkJZHB1X2dldF9lZGlkKGNvbm5lY3RvciwgJnBhbmVs LT5hdXgtPmRybV9hdXgtPmRkYywKPj4gPiAtCQkJKHZvaWQgKiopJmRwX3BhbmVsLT5lZGlkX2N0 cmwpOwo+PiA+IC0JCWlmICghZHBfcGFuZWwtPmVkaWRfY3RybC0+ZWRpZCkgewo+PiA+ICsJCWtm cmVlKGRwX3BhbmVsLT5lZGlkKTsKPj4gPiArCQlkcF9wYW5lbC0+ZWRpZCA9IGRybV9nZXRfZWRp ZChjb25uZWN0b3IsCj4+ID4gKwkJCQkJICAgICAgJnBhbmVsLT5hdXgtPmRybV9hdXgtPmRkYyk7 Cj4+ID4gKwkJaWYgKCFkcF9wYW5lbC0+ZWRpZCkgewo+PiA+ICAJCQlwcl9lcnIoIkVESUQgcmVh ZCBmYWlsZWRcbiIpOwo+PiA+ICAJCQlyZXRyeV9jbnQrKzsKPj4gPiAgCQkJcGFuZWwtPmF1eC0+ cmVjb25maWcocGFuZWwtPmF1eCk7Cj4+ID4gQEAgLTE2Myw3ICsxNjcsNyBAQCBzdGF0aWMgaW50 IGRwX3BhbmVsX3JlYWRfZWRpZChzdHJ1Y3QgZHBfcGFuZWwKPj4gPiAqZHBfcGFuZWwsCj4+ID4g IAkJfQo+PiA+ICAJfSB3aGlsZSAocmV0cnlfY250IDwgbWF4X3JldHJ5KTsKPj4gPgo+PiA+IC0J cmV0dXJuIC1FSU5WQUw7Cj4+ID4gKwlyZXR1cm4gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3Rv ciwgZHBfcGFuZWwtPmVkaWQpOwo+PiA+ICB9Cj4+ID4KPj4gPiAgc3RhdGljIGludCBkcF9wYW5l bF9yZWFkX3NpbmtfY2FwcyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+PiA+IEBAIC0xODgs NyArMTkyLDcgQEAgc3RhdGljIGludCBkcF9wYW5lbF9yZWFkX3NpbmtfY2FwcyhzdHJ1Y3QgZHBf cGFuZWwKPj4gPiAqZHBfcGFuZWwsCj4+ID4gIAl9Cj4+ID4KPj4gPiAgCXJjID0gZHBfcGFuZWxf cmVhZF9lZGlkKGRwX3BhbmVsLCBjb25uZWN0b3IpOwo+PiA+IC0JaWYgKHJjKSB7Cj4+ID4gKwlp ZiAocmMgPCAwKSB7Cj4+ID4gIAkJcHJfZXJyKCJwYW5lbCBlZGlkIHJlYWQgZmFpbGVkLCBzZXQg ZmFpbHNhZmUgbW9kZVxuIik7Cj4+ID4gIAkJcmV0dXJuIHJjOwo+PiA+ICAJfQo+PiA+IEBAIC0y MTUsNyArMjE5LDcgQEAgc3RhdGljIHUzMiBkcF9wYW5lbF9nZXRfbWF4X3BjbGsoc3RydWN0IGRw X3BhbmVsCj4+ID4gKmRwX3BhbmVsKQo+PiA+Cj4+ID4gIAlsaW5rX2luZm8gPSAmZHBfcGFuZWwt PmxpbmtfaW5mbzsKPj4gPgo+PiA+IC0JYnBjID0gZHB1X2dldF9zaW5rX2JwYyhkcF9wYW5lbC0+ ZWRpZF9jdHJsKTsKPj4gPiArCWJwYyA9IGRwX3BhbmVsLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5m by5icGM7Cj4+ID4gIAlicHAgPSBicGMgKiBudW1fY29tcG9uZW50czsKPj4gPiAgCWlmICghYnBw KQo+PiA+ICAJCWJwcCA9IERQX1BBTkVMX0RFRkFVTFRfQlBQOwo+PiA+IEBAIC0yOTAsOCArMjk0 LDggQEAgc3RhdGljIGludCBkcF9wYW5lbF9nZXRfbW9kZXMoc3RydWN0IGRwX3BhbmVsCj4+ID4g KmRwX3BhbmVsLAo+PiA+ICAJaWYgKGRwX3BhbmVsLT52aWRlb190ZXN0KSB7Cj4+ID4gIAkJZHBf cGFuZWxfc2V0X3Rlc3RfbW9kZShwYW5lbCwgbW9kZSk7Cj4+ID4gIAkJcmV0dXJuIDE7Cj4+ID4g LQl9IGVsc2UgaWYgKGRwX3BhbmVsLT5lZGlkX2N0cmwtPmVkaWQpIHsKPj4gPiAtCQlyZXR1cm4g X2RwdV9lZGlkX3VwZGF0ZV9tb2Rlcyhjb25uZWN0b3IsIGRwX3BhbmVsLT5lZGlkX2N0cmwpOwo+ PiA+ICsJfSBlbHNlIGlmIChkcF9wYW5lbC0+ZWRpZCkgewo+PiA+ICsJCXJldHVybiBkcF9wYW5l bF9yZWFkX2VkaWQoZHBfcGFuZWwsIGNvbm5lY3Rvcik7Cj4+ID4gIAl9Cj4+ID4KPj4gPiAgCS8q IGZhaWwtc2FmZSBtb2RlICovCj4+ID4gQEAgLTMwMCw2ICszMDQsMjcgQEAgc3RhdGljIGludCBk cF9wYW5lbF9nZXRfbW9kZXMoc3RydWN0IGRwX3BhbmVsCj4+ID4gKmRwX3BhbmVsLAo+PiA+ICAJ cmV0dXJuIDE7Cj4+ID4gIH0KPj4gPgo+PiA+ICtzdGF0aWMgdTggZHBfcGFuZWxfZ2V0X2VkaWRf Y2hlY2tzdW0oc3RydWN0IGVkaWQgKmVkaWQpCj4+ID4gK3sKPj4gPiArCXN0cnVjdCBlZGlkICps YXN0X2Jsb2NrID0gTlVMTDsKPj4gPiArCXU4ICpyYXdfZWRpZCA9IE5VTEw7Cj4+ID4gKwo+PiA+ ICsJaWYgKCFlZGlkKSB7Cj4+ID4gKwkJcHJfZXJyKCJpbnZhbGlkIGVkaWQgaW5wdXRcbiIpOwo+ PiA+ICsJCXJldHVybiAwOwo+PiA+ICsJfQo+PiA+ICsKPj4gPiArCXJhd19lZGlkID0gKHU4ICop ZWRpZDsKPj4gPiArCXJhd19lZGlkICs9IChlZGlkLT5leHRlbnNpb25zICogRURJRF9MRU5HVEgp Owo+PiA+ICsJbGFzdF9ibG9jayA9IChzdHJ1Y3QgZWRpZCAqKXJhd19lZGlkOwo+PiA+ICsKPj4g PiArCWlmIChsYXN0X2Jsb2NrKQo+PiA+ICsJCXJldHVybiBsYXN0X2Jsb2NrLT5jaGVja3N1bTsK Pj4gPiArCj4+ID4gKwlwcl9lcnIoIkludmFsaWQgYmxvY2ssIG5vIGNoZWNrc3VtXG4iKTsKPj4g PiArCXJldHVybiAwOwo+PiA+ICt9Cj4+ID4gKwo+PiA+ICBzdGF0aWMgdm9pZCBkcF9wYW5lbF9o YW5kbGVfc2lua19yZXF1ZXN0KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4+ID4gIHsKPj4g PiAgCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKPj4gPiBAQCAtMzEyLDcgKzMzNyw3 IEBAIHN0YXRpYyB2b2lkIGRwX3BhbmVsX2hhbmRsZV9zaW5rX3JlcXVlc3Qoc3RydWN0Cj4+ID4g ZHBfcGFuZWwgKmRwX3BhbmVsKQo+PiA+ICAJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWws IHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7Cj4+ID4KPj4gPiAgCWlmIChwYW5l bC0+bGluay0+c2lua19yZXF1ZXN0ICYgRFBfVEVTVF9MSU5LX0VESURfUkVBRCkgewo+PiA+IC0J CXU4IGNoZWNrc3VtID0gZHB1X2dldF9lZGlkX2NoZWNrc3VtKGRwX3BhbmVsLT5lZGlkX2N0cmwp Owo+PiA+ICsJCXU4IGNoZWNrc3VtID0gZHBfcGFuZWxfZ2V0X2VkaWRfY2hlY2tzdW0oZHBfcGFu ZWwtPmVkaWQpOwo+PiA+Cj4+ID4gIAkJcGFuZWwtPmxpbmstPnNlbmRfZWRpZF9jaGVja3N1bShw YW5lbC0+bGluaywgY2hlY2tzdW0pOwo+PiA+ICAJCXBhbmVsLT5saW5rLT5zZW5kX3Rlc3RfcmVz cG9uc2UocGFuZWwtPmxpbmspOwo+PiA+IEBAIC0zODIsMzYgKzQwNyw2IEBAIHN0YXRpYyBpbnQg ZHBfcGFuZWxfdGltaW5nX2NmZyhzdHJ1Y3QgZHBfcGFuZWwKPj4gPiAqZHBfcGFuZWwpCj4+ID4g IAlyZXR1cm4gcmM7Cj4+ID4gIH0KPj4gPgo+PiA+IC1zdGF0aWMgaW50IGRwX3BhbmVsX2VkaWRf cmVnaXN0ZXIoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKPj4gPiAtewo+PiA+IC0JaW50IHJj ID0gMDsKPj4gPiAtCj4+ID4gLQlpZiAoIWRwX3BhbmVsKSB7Cj4+ID4gLQkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKPj4gPiAtCQlyYyA9IC1FSU5WQUw7Cj4+ID4gLQkJZ290byBlbmQ7Cj4+ ID4gLQl9Cj4+ID4gLQo+PiA+IC0JZHBfcGFuZWwtPmVkaWRfY3RybCA9IGRwdV9lZGlkX2luaXQo KTsKPj4gPiAtCWlmICghZHBfcGFuZWwtPmVkaWRfY3RybCkgewo+PiA+IC0JCXByX2VycigiZHB1 IGVkaWQgaW5pdCBmb3IgRFAgZmFpbGVkXG4iKTsKPj4gPiAtCQlyYyA9IC1FTk9NRU07Cj4+ID4g LQkJZ290byBlbmQ7Cj4+ID4gLQl9Cj4+ID4gLWVuZDoKPj4gPiAtCXJldHVybiByYzsKPj4gPiAt fQo+PiA+IC0KPj4gPiAtc3RhdGljIHZvaWQgZHBfcGFuZWxfZWRpZF9kZXJlZ2lzdGVyKHN0cnVj dCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4+ID4gLXsKPj4gPiAtCWlmICghZHBfcGFuZWwpIHsKPj4g PiAtCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiA+IC0JCXJldHVybjsKPj4gPiAtCX0K Pj4gPiAtCj4+ID4gLQlkcHVfZWRpZF9kZWluaXQoKHZvaWQgKiopJmRwX3BhbmVsLT5lZGlkX2N0 cmwpOwo+PiA+IC19Cj4+ID4gLQo+PiA+ICBzdGF0aWMgaW50IGRwX3BhbmVsX2luaXRfcGFuZWxf aW5mbyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQo+PiA+ICB7Cj4+ID4gIAlpbnQgcmMgPSAw Owo+PiA+IEBAIC01MDMsOCArNDk4LDYgQEAgc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbF9nZXQo c3RydWN0IGRwX3BhbmVsX2luCj4+ID4gKmluKQo+PiA+ICAJZHBfcGFuZWwgPSAmcGFuZWwtPmRw X3BhbmVsOwo+PiA+ICAJcGFuZWwtPmF1eF9jZmdfdXBkYXRlX2RvbmUgPSBmYWxzZTsKPj4gPgo+ PiA+IC0JZHBfcGFuZWwtPmRwdV9lZGlkX3JlZ2lzdGVyID0gZHBfcGFuZWxfZWRpZF9yZWdpc3Rl cjsKPj4gPiAtCWRwX3BhbmVsLT5kcHVfZWRpZF9kZXJlZ2lzdGVyID0gZHBfcGFuZWxfZWRpZF9k ZXJlZ2lzdGVyOwo+PiA+ICAJZHBfcGFuZWwtPmluaXRfaW5mbyA9IGRwX3BhbmVsX2luaXRfcGFu ZWxfaW5mbzsKPj4gPiAgCWRwX3BhbmVsLT50aW1pbmdfY2ZnID0gZHBfcGFuZWxfdGltaW5nX2Nm ZzsKPj4gPiAgCWRwX3BhbmVsLT5yZWFkX3NpbmtfY2FwcyA9IGRwX3BhbmVsX3JlYWRfc2lua19j YXBzOwo+PiA+IEBAIC01MjcsNSArNTIwLDcgQEAgdm9pZCBkcF9wYW5lbF9wdXQoc3RydWN0IGRw X3BhbmVsICpkcF9wYW5lbCkKPj4gPgo+PiA+ICAJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFu ZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7Cj4+ID4KPj4gPiArCWtmcmVl KGRwX3BhbmVsLT5lZGlkKTsKPj4gPiArCWRwX3BhbmVsLT5lZGlkID0gTlVMTDsKPj4gPiAgCWRl dm1fa2ZyZWUocGFuZWwtPmRldiwgcGFuZWwpOwo+PiA+ICB9Cj4+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaAo+PiA+IGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wYW5lbC5oCj4+ID4gaW5kZXggYTk1ZmQwMTU3YTRlLi5kNmViZGI5OGY3NjcgMTAw NjQ0Cj4+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oCj4+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oCj4+ID4gQEAgLTE4LDcgKzE4LDgg QEAKPj4gPiAgI2luY2x1ZGUgImRwX2F1eC5oIgo+PiA+ICAjaW5jbHVkZSAiZHBfbGluay5oIgo+ PiA+ICAjaW5jbHVkZSAiZHBfdXNicGQuaCIKPj4gPiAtI2luY2x1ZGUgImRwdV9lZGlkX3BhcnNl ci5oIgo+PiA+ICsKPj4gPiArc3RydWN0IGVkaWQ7Cj4+ID4KPj4gPiAgZW51bSBkcF9sYW5lX2Nv dW50IHsKPj4gPiAgCURQX0xBTkVfQ09VTlRfMQk9IDEsCj4+ID4gQEAgLTYzLDcgKzY0LDcgQEAg c3RydWN0IGRwX3BhbmVsIHsKPj4gPiAgCXU4IGRzX3BvcnRzW0RQX01BWF9ET1dOU1RSRUFNX1BP UlRTXTsKPj4gPgo+PiA+ICAJc3RydWN0IGRybV9kcF9saW5rIGxpbmtfaW5mbzsKPj4gPiAtCXN0 cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmw7Cj4+ID4gKwlzdHJ1Y3QgZWRpZCAqZWRpZDsK Pj4gPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4+ID4gIAlzdHJ1Y3QgZHBf cGFuZWxfaW5mbyBwaW5mbzsKPj4gPiAgCWJvb2wgdmlkZW9fdGVzdDsKPj4gPiBAQCAtNzEsOCAr NzIsNiBAQCBzdHJ1Y3QgZHBfcGFuZWwgewo+PiA+ICAJdTMyIHZpYzsKPj4gPiAgCXUzMiBtYXhf cGNsa19raHo7Cj4+ID4KPj4gPiAtCWludCAoKmRwdV9lZGlkX3JlZ2lzdGVyKShzdHJ1Y3QgZHBf cGFuZWwgKmRwX3BhbmVsKTsKPj4gPiAtCXZvaWQgKCpkcHVfZWRpZF9kZXJlZ2lzdGVyKShzdHJ1 Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKPj4gPiAgCWludCAoKmluaXRfaW5mbykoc3RydWN0IGRw X3BhbmVsICpkcF9wYW5lbCk7Cj4+ID4gIAlpbnQgKCp0aW1pbmdfY2ZnKShzdHJ1Y3QgZHBfcGFu ZWwgKmRwX3BhbmVsKTsKPj4gPiAgCWludCAoKnJlYWRfc2lua19jYXBzKShzdHJ1Y3QgZHBfcGFu ZWwgKmRwX3BhbmVsLAo+PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9l ZGlkX3BhcnNlci5jCj4+ID4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5j Cj4+ID4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4+ID4gaW5kZXggMjRmNWY0NGMxNDkyLi4w MDAwMDAwMDAwMDAKPj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNl ci5jCj4+ID4gKysrIC9kZXYvbnVsbAo+PiA+IEBAIC0xLDY1NyArMCwwIEBACj4+ID4gLS8qIENv cHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KPj4gPiAtICoKPj4gPiAtICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gPiAtICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Cj4+ID4gLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+PiA+IC0gKgo+PiA+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gPiAtICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4g PiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQo+PiA+IC0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+PiA+IC0gKi8KPj4gPiAtCj4+ID4gLSNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4K Pj4gPiAtI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KPj4gPiAtCj4+ID4gLSNpbmNsdWRlICJkcHVf a21zLmgiCj4+ID4gLSNpbmNsdWRlICJkcHVfZWRpZF9wYXJzZXIuaCIKPj4gPiAtCj4+ID4gLSNk ZWZpbmUgREJDX1NUQVJUX09GRlNFVCA0Cj4+ID4gLSNkZWZpbmUgRURJRF9EVERfTEVOIDE4Cj4+ ID4gLQo+PiA+IC1lbnVtIGRhdGFfYmxvY2tfdHlwZXMgewo+PiA+IC0JUkVTRVJWRUQsCj4+ID4g LQlBVURJT19EQVRBX0JMT0NLLAo+PiA+IC0JVklERU9fREFUQV9CTE9DSywKPj4gPiAtCVZFTkRP Ul9TUEVDSUZJQ19EQVRBX0JMT0NLLAo+PiA+IC0JU1BFQUtFUl9BTExPQ0FUSU9OX0RBVEFfQkxP Q0ssCj4+ID4gLQlWRVNBX0RUQ19EQVRBX0JMT0NLLAo+PiA+IC0JUkVTRVJWRUQyLAo+PiA+IC0J VVNFX0VYVEVOREVEX1RBRwo+PiA+IC19Owo+PiA+IC0KPj4gPiAtc3RhdGljIHU4ICpkcHVfZmlu ZF9lZGlkX2V4dGVuc2lvbihzdHJ1Y3QgZWRpZCAqZWRpZCwgaW50IGV4dF9pZCkKPj4gPiAtewo+ PiA+IC0JdTggKmVkaWRfZXh0ID0gTlVMTDsKPj4gPiAtCWludCBpOwo+PiA+IC0KPj4gPiAtCS8q IE5vIEVESUQgb3IgRURJRCBleHRlbnNpb25zICovCj4+ID4gLQlpZiAoZWRpZCA9PSBOVUxMIHx8 IGVkaWQtPmV4dGVuc2lvbnMgPT0gMCkKPj4gPiAtCQlyZXR1cm4gTlVMTDsKPj4gPiAtCj4+ID4g LQkvKiBGaW5kIENFQSBleHRlbnNpb24gKi8KPj4gPiAtCWZvciAoaSA9IDA7IGkgPCBlZGlkLT5l eHRlbnNpb25zOyBpKyspIHsKPj4gPiAtCQllZGlkX2V4dCA9ICh1OCAqKWVkaWQgKyBFRElEX0xF TkdUSCAqIChpICsgMSk7Cj4+ID4gLQkJaWYgKGVkaWRfZXh0WzBdID09IGV4dF9pZCkKPj4gPiAt CQkJYnJlYWs7Cj4+ID4gLQl9Cj4+ID4gLQo+PiA+IC0JaWYgKGkgPT0gZWRpZC0+ZXh0ZW5zaW9u cykKPj4gPiAtCQlyZXR1cm4gTlVMTDsKPj4gPiAtCj4+ID4gLQlyZXR1cm4gZWRpZF9leHQ7Cj4+ ID4gLX0KPj4gPiAtCj4+ID4gLXN0YXRpYyB1OCAqZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihzdHJ1 Y3QgZWRpZCAqZWRpZCkKPj4gPiAtewo+PiA+IC0JcmV0dXJuIGRwdV9maW5kX2VkaWRfZXh0ZW5z aW9uKGVkaWQsIERQVV9DRUFfRVhUKTsKPj4gPiAtfQo+PiA+IC0KPj4gPiAtc3RhdGljIGludAo+ PiA+IC1kcHVfY2VhX2RiX3BheWxvYWRfbGVuKGNvbnN0IHU4ICpkYikKPj4gPiAtewo+PiA+IC0J cmV0dXJuIGRiWzBdICYgMHgxZjsKPj4gPiAtfQo+PiA+IC0KPj4gPiAtc3RhdGljIGludAo+PiA+ IC1kcHVfY2VhX2RiX3RhZyhjb25zdCB1OCAqZGIpCj4+ID4gLXsKPj4gPiAtCXJldHVybiBkYlsw XSA+PiA1Owo+PiA+IC19Cj4+ID4gLQo+PiA+IC1zdGF0aWMgaW50Cj4+ID4gLWRwdV9jZWFfcmV2 aXNpb24oY29uc3QgdTggKmNlYSkKPj4gPiAtewo+PiA+IC0JcmV0dXJuIGNlYVsxXTsKPj4gPiAt fQo+PiA+IC0KPj4gPiAtc3RhdGljIGludAo+PiA+IC1kcHVfY2VhX2RiX29mZnNldHMoY29uc3Qg dTggKmNlYSwgaW50ICpzdGFydCwgaW50ICplbmQpCj4+ID4gLXsKPj4gPiAtCS8qIERhdGEgYmxv Y2sgb2Zmc2V0IGluIENFQSBleHRlbnNpb24gYmxvY2sgKi8KPj4gPiAtCSpzdGFydCA9IDQ7Cj4+ ID4gLQkqZW5kID0gY2VhWzJdOwo+PiA+IC0JaWYgKCplbmQgPT0gMCkKPj4gPiAtCQkqZW5kID0g MTI3Owo+PiA+IC0JaWYgKCplbmQgPCA0IHx8ICplbmQgPiAxMjcpCj4+ID4gLQkJcmV0dXJuIC1F UkFOR0U7Cj4+ID4gLQlyZXR1cm4gMDsKPj4gPiAtfQo+PiA+IC0KPj4gPiAtI2RlZmluZSBkcHVf Zm9yX2VhY2hfY2VhX2RiKGNlYSwgaSwgc3RhcnQsIGVuZCkgXAo+PiA+IC1mb3IgKChpKSA9IChz dGFydCk7IFwKPj4gPiAtKGkpIDwgKGVuZCkgJiYgKGkpICsgZHB1X2NlYV9kYl9wYXlsb2FkX2xl bigmKGNlYSlbKGkpXSkgPCAoZW5kKTsgXAo+PiA+IC0oaSkgKz0gZHB1X2NlYV9kYl9wYXlsb2Fk X2xlbigmKGNlYSlbKGkpXSkgKyAxKQo+PiA+IC0KPj4gPiAtc3RhdGljIGJvb2wgZHB1X2NlYV9k Yl9pc19oZG1pX2hmX3ZzZGIoY29uc3QgdTggKmRiKQo+PiA+IC17Cj4+ID4gLQlpbnQgaGRtaV9p ZDsKPj4gPiAtCj4+ID4gLQlpZiAoZHB1X2NlYV9kYl90YWcoZGIpICE9IFZFTkRPUl9TUEVDSUZJ Q19EQVRBX0JMT0NLKQo+PiA+IC0JCXJldHVybiBmYWxzZTsKPj4gPiAtCj4+ID4gLQlpZiAoZHB1 X2NlYV9kYl9wYXlsb2FkX2xlbihkYikgPCA3KQo+PiA+IC0JCXJldHVybiBmYWxzZTsKPj4gPiAt Cj4+ID4gLQloZG1pX2lkID0gZGJbMV0gfCAoZGJbMl0gPDwgOCkgfCAoZGJbM10gPDwgMTYpOwo+ PiA+IC0KPj4gPiAtCXJldHVybiBoZG1pX2lkID09IEhETUlfRk9SVU1fSUVFRV9PVUk7Cj4+ID4g LX0KPj4gPiAtCj4+ID4gLXN0YXRpYyB1OCAqZHB1X2VkaWRfZmluZF9leHRlbmRlZF90YWdfYmxv Y2soc3RydWN0IGVkaWQgKmVkaWQsIGludAo+PiA+IGJsa19pZCkKPj4gPiAtewo+PiA+IC0JdTgg KmRiID0gTlVMTDsKPj4gPiAtCXU4ICpjZWEgPSBOVUxMOwo+PiA+IC0KPj4gPiAtCWlmICghZWRp ZCkgewo+PiA+IC0JCURQVV9FUlJPUigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVuY19fKTsK Pj4gPiAtCQlyZXR1cm4gTlVMTDsKPj4gPiAtCX0KPj4gPiAtCj4+ID4gLQljZWEgPSBkcHVfZmlu ZF9jZWFfZXh0ZW5zaW9uKGVkaWQpOwo+PiA+IC0KPj4gPiAtCWlmIChjZWEgJiYgZHB1X2NlYV9y ZXZpc2lvbihjZWEpID49IDMpIHsKPj4gPiAtCQlpbnQgaSwgc3RhcnQsIGVuZDsKPj4gPiAtCj4+ ID4gLQkJaWYgKGRwdV9jZWFfZGJfb2Zmc2V0cyhjZWEsICZzdGFydCwgJmVuZCkpCj4+ID4gLQkJ CXJldHVybiBOVUxMOwo+PiA+IC0KPj4gPiAtCQlkcHVfZm9yX2VhY2hfY2VhX2RiKGNlYSwgaSwg c3RhcnQsIGVuZCkgewo+PiA+IC0JCQlkYiA9ICZjZWFbaV07Cj4+ID4gLQkJCWlmICgoZHB1X2Nl YV9kYl90YWcoZGIpID09IERQVV9FWFRFTkRFRF9UQUcpICYmCj4+ID4gLQkJCQkoZGJbMV0gPT0g YmxrX2lkKSkKPj4gPiAtCQkJCXJldHVybiBkYjsKPj4gPiAtCQl9Cj4+ID4gLQl9Cj4+ID4gLQly ZXR1cm4gTlVMTDsKPj4gPiAtfQo+PiA+IC0KPj4gPiAtc3RhdGljIHU4ICoKPj4gPiAtZHB1X2Vk aWRfZmluZF9ibG9jayhzdHJ1Y3QgZWRpZCAqZWRpZCwgaW50IGJsa19pZCkKPj4gPiAtewo+PiA+ IC0JdTggKmRiID0gTlVMTDsKPj4gPiAtCXU4ICpjZWEgPSBOVUxMOwo+PiA+IC0KPj4gPiAtCWlm ICghZWRpZCkgewo+PiA+IC0JCURQVV9FUlJPUigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVu Y19fKTsKPj4gPiAtCQlyZXR1cm4gTlVMTDsKPj4gPiAtCX0KPj4gPiAtCj4+ID4gLQljZWEgPSBk cHVfZmluZF9jZWFfZXh0ZW5zaW9uKGVkaWQpOwo+PiA+IC0KPj4gPiAtCWlmIChjZWEgJiYgZHB1 X2NlYV9yZXZpc2lvbihjZWEpID49IDMpIHsKPj4gPiAtCQlpbnQgaSwgc3RhcnQsIGVuZDsKPj4g PiAtCj4+ID4gLQkJaWYgKGRwdV9jZWFfZGJfb2Zmc2V0cyhjZWEsICZzdGFydCwgJmVuZCkpCj4+ ID4gLQkJCXJldHVybiBOVUxMOwo+PiA+IC0KPj4gPiAtCQlkcHVfZm9yX2VhY2hfY2VhX2RiKGNl YSwgaSwgc3RhcnQsIGVuZCkgewo+PiA+IC0JCQlkYiA9ICZjZWFbaV07Cj4+ID4gLQkJCWlmIChk cHVfY2VhX2RiX3RhZyhkYikgPT0gYmxrX2lkKQo+PiA+IC0JCQkJcmV0dXJuIGRiOwo+PiA+IC0J CX0KPj4gPiAtCX0KPj4gPiAtCXJldHVybiBOVUxMOwo+PiA+IC19Cj4+ID4gLQo+PiA+IC0KPj4g PiAtc3RhdGljIGNvbnN0IHU4ICpfZHB1X2VkaWRfZmluZF9ibG9jayhjb25zdCB1OCAqaW5fYnVm LCB1MzIKPj4gPiBzdGFydF9vZmZzZXQsCj4+ID4gLQl1OCB0eXBlLCB1OCAqbGVuKQo+PiA+IC17 Cj4+ID4gLQkvKiB0aGUgc3RhcnQgb2YgZGF0YSBibG9jayBjb2xsZWN0aW9uLCBzdGFydCBvZiBW aWRlbyBEYXRhIEJsb2NrICovCj4+ID4gLQl1MzIgb2Zmc2V0ID0gc3RhcnRfb2Zmc2V0Owo+PiA+ IC0JdTMyIGRiY19vZmZzZXQgPSBpbl9idWZbMl07Cj4+ID4gLQo+PiA+IC0JRFBVX0VESURfREVC VUcoIiVzICsiLCBfX2Z1bmNfXyk7Cj4+ID4gLQkvKgo+PiA+IC0JICogKiBlZGlkIGJ1ZmZlciAx LCBieXRlIDIgYmVpbmcgNCBtZWFucyBubyBub24tRFREL0RhdGEgYmxvY2sKPj4gPiAtCSAqICAg Y29sbGVjdGlvbiBwcmVzZW50Lgo+PiA+IC0JICogKiBlZGlkIGJ1ZmZlciAxLCBieXRlIDIgYmVp bmcgMCBtZWFucyBubyBub24tRFREL0RBVEEgYmxvY2sKPj4gPiAtCSAqICAgY29sbGVjdGlvbiBw cmVzZW50IGFuZCBubyBEVEQgZGF0YSBwcmVzZW50Lgo+PiA+IC0JICovCj4+ID4gLQlpZiAoKGRi Y19vZmZzZXQgPT0gMCkgfHwgKGRiY19vZmZzZXQgPT0gNCkpIHsKPj4gPiAtCQlEUFVfRVJST1Io IkVESUQ6IG5vIERURCBvciBub24tRFREIGRhdGEgcHJlc2VudFxuIik7Cj4+ID4gLQkJcmV0dXJu IE5VTEw7Cj4+ID4gLQl9Cj4+ID4gLQo+PiA+IC0Jd2hpbGUgKG9mZnNldCA8IGRiY19vZmZzZXQp IHsKPj4gPiAtCQl1OCBibG9ja19sZW4gPSBpbl9idWZbb2Zmc2V0XSAmIDB4MUY7Cj4+ID4gLQo+ PiA+IC0JCWlmICgob2Zmc2V0ICsgYmxvY2tfbGVuIDw9IGRiY19vZmZzZXQpICYmCj4+ID4gLQkJ ICAgIChpbl9idWZbb2Zmc2V0XSA+PiA1KSA9PSB0eXBlKSB7Cj4+ID4gLQkJCSpsZW4gPSBibG9j a19sZW47Cj4+ID4gLQkJCURQVV9FRElEX0RFQlVHKCJibG9jaz0lZCBmb3VuZCBAIDB4JXggdy8g bGVuPSVkXG4iLAo+PiA+IC0JCQkJdHlwZSwgb2Zmc2V0LCBibG9ja19sZW4pOwo+PiA+IC0KPj4g PiAtCQkJcmV0dXJuIGluX2J1ZiArIG9mZnNldDsKPj4gPiAtCQl9Cj4+ID4gLQkJb2Zmc2V0ICs9 IDEgKyBibG9ja19sZW47Cj4+ID4gLQl9Cj4+ID4gLQo+PiA+IC0JcmV0dXJuIE5VTEw7Cj4+ID4g LX0KPj4gPiAtCj4+ID4gLXN0YXRpYyB2b2lkIGRwdV9lZGlkX2V4dHJhY3RfdmVuZG9yX2lkKHN0 cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwpCj4+ID4gLXsKPj4gPiAtCWNoYXIgKnZlbmRv cl9pZDsKPj4gPiAtCXUzMiBpZF9jb2RlczsKPj4gPiAtCj4+ID4gLQlEUFVfRURJRF9ERUJVRygi JXMgKyIsIF9fZnVuY19fKTsKPj4gPiAtCWlmICghZWRpZF9jdHJsKSB7Cj4+ID4gLQkJRFBVX0VS Uk9SKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwo+PiA+IC0JCXJldHVybjsKPj4g PiAtCX0KPj4gPiAtCj4+ID4gLQl2ZW5kb3JfaWQgPSBlZGlkX2N0cmwtPnZlbmRvcl9pZDsKPj4g PiAtCWlkX2NvZGVzID0gKCh1MzIpZWRpZF9jdHJsLT5lZGlkLT5tZmdfaWRbMF0gPDwgOCkgKwo+ PiA+IC0JCWVkaWRfY3RybC0+ZWRpZC0+bWZnX2lkWzFdOwo+PiA+IC0KPj4gPiAtCXZlbmRvcl9p ZFswXSA9ICdBJyAtIDEgKyAoKGlkX2NvZGVzID4+IDEwKSAmIDB4MUYpOwo+PiA+IC0JdmVuZG9y X2lkWzFdID0gJ0EnIC0gMSArICgoaWRfY29kZXMgPj4gNSkgJiAweDFGKTsKPj4gPiAtCXZlbmRv cl9pZFsyXSA9ICdBJyAtIDEgKyAoaWRfY29kZXMgJiAweDFGKTsKPj4gPiAtCXZlbmRvcl9pZFsz XSA9IDA7Cj4+ID4gLQlEUFVfRURJRF9ERUJVRygidmVuZG9yIGlkIGlzICVzICIsIHZlbmRvcl9p ZCk7Cj4+ID4gLQlEUFVfRURJRF9ERUJVRygiJXMgLSIsIF9fZnVuY19fKTsKPj4gPiAtfQo+PiA+ IC0KPj4gPiAtc3RhdGljIHZvaWQgZHB1X2VkaWRfc2V0X3k0MjBfc3VwcG9ydChzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+PiA+IC11MzIgdmlkZW9fZm9ybWF0KQo+PiA+IC17Cj4+ ID4gLQl1OCBjZWFfbW9kZSA9IDA7Cj4+ID4gLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZTsKPj4gPiAtCXUzMiBtb2RlX2ZtdF9mbGFncyA9IDA7Cj4+ID4gLQo+PiA+IC0JLyogTmVlZCB0 byBhZGQgWTQyMCBzdXBwb3J0IGZsYWcgdG8gdGhlIG1vZGVzICovCj4+ID4gLQlsaXN0X2Zvcl9l YWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3ItPnByb2JlZF9tb2RlcywgaGVhZCkgewo+PiA+IC0J CS8qIENhY2hlIHRoZSBmb3JtYXQgZmxhZ3MgYmVmb3JlIGNsZWFyaW5nICovCj4+ID4gLQkJbW9k ZV9mbXRfZmxhZ3MgPSBtb2RlLT5mbGFnczsKPj4gPiAtCQkvKiBDbGVhciB0aGUgUkdCL1lVViBm b3JtYXQgZmxhZ3MgYmVmb3JlIGNhbGxpbmcgdXBzdHJlYW0gQVBJICovCj4+ID4gLQkJbW9kZS0+ ZmxhZ3MgJj0gfkRQVV9EUk1fTU9ERV9GTEFHX0ZNVF9NQVNLOwo+PiA+IC0JCWNlYV9tb2RlID0g ZHJtX21hdGNoX2NlYV9tb2RlKG1vZGUpOwo+PiA+IC0JCS8qIFJlc3RvcmUgdGhlIGZvcm1hdCBm bGFncyAqLwo+PiA+IC0JCW1vZGUtPmZsYWdzID0gbW9kZV9mbXRfZmxhZ3M7Cj4+ID4gLQkJaWYg KChjZWFfbW9kZSAhPSAwKSAmJiAoY2VhX21vZGUgPT0gdmlkZW9fZm9ybWF0KSkgewo+PiA+IC0J CQlEUFVfRURJRF9ERUJVRygiJXMgZm91bmQgbWF0Y2ggZm9yICVkICIsIF9fZnVuY19fLAo+PiA+ IC0JCQl2aWRlb19mb3JtYXQpOwo+PiA+IC0JCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFH X1NVUFBPUlRTX1lVVjsKPj4gPiAtCQl9Cj4+ID4gLQl9Cj4+ID4gLX0KPj4gPiAtCj4+ID4gLXN0 YXRpYyB2b2lkIGRwdV9lZGlkX3BhcnNlX1k0MjBDTURCKAo+PiA+IC1zdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsLAo+PiA+IC1j b25zdCB1OCAqZGIpCj4+ID4gLXsKPj4gPiAtCXUzMiBvZmZzZXQgPSAwOwo+PiA+IC0JdTggY21k Yl9sZW4gPSAwOwo+PiA+IC0JdTggc3ZkX2xlbiA9IDA7Cj4+ID4gLQljb25zdCB1OCAqc3ZkID0g TlVMTDsKPj4gPiAtCXUzMiBpID0gMCwgaiA9IDA7Cj4+ID4gLQl1MzIgdmlkZW9fZm9ybWF0ID0g MDsKPj4gPiAtCj4+ID4gLQlpZiAoIWVkaWRfY3RybCkgewo+PiA+IC0JCURQVV9FUlJPUigiJXM6 IGVkaWRfY3RybCBpcyBOVUxMXG4iLCBfX2Z1bmNfXyk7Cj4+ID4gLQkJcmV0dXJuOwo+PiA+IC0J fQo+PiA+IC0KPj4gPiAtCWlmICghZGIpIHsKPj4gPiAtCQlEUFVfRVJST1IoIiVzOiBpbnZhbGlk IGlucHV0XG4iLCBfX2Z1bmNfXyk7Cj4+ID4gLQkJcmV0dXJuOwo+PiA+IC0JfQo+PiA+IC0JRFBV X0VESURfREVCVUcoIiVzICtcbiIsIF9fZnVuY19fKTsKPj4gPiAtCWNtZGJfbGVuID0gZGJbMF0g JiAweDFmOwo+PiA+IC0KPj4gPiAtCS8qIEJ5dGUgMyB0byBMKzEgY29udGFpbiBTVkRzICovCj4+ ID4gLQlvZmZzZXQgKz0gMjsKPj4gPiAtCj4+ID4gLQlzdmQgPSBkcHVfZWRpZF9maW5kX2Jsb2Nr KGVkaWRfY3RybC0+ZWRpZCwgVklERU9fREFUQV9CTE9DSyk7Cj4+ID4gLQo+PiA+IC0JaWYgKHN2 ZCkgewo+PiA+IC0JCS8qbW92aW5nIHRvIHRoZSBuZXh0IGJ5dGUgYXMgdmljIGluZm8gYmVnaW5z IHRoZXJlKi8KPj4gPiAtCQlzdmRfbGVuID0gc3ZkWzBdICYgMHgxZjsKPj4gPiAtCQkrK3N2ZDsK Pj4gPiAtCX0KPj4gPiAtCj4+ID4gLQlmb3IgKGkgPSAwOyBpIDwgc3ZkX2xlbjsgaSsrLCBqKysp IHsKPj4gPiAtCQl2aWRlb19mb3JtYXQgPSAqKHN2ZCArIGkpICYgMHg3RjsKPj4gPiAtCQlpZiAo Y21kYl9sZW4gPT0gMSkgewo+PiA+IC0JCQkvKiBJZiBjbWRiX2xlbiBpcyAxLCBpdCBtZWFucyBh bGwgU1ZEcyBzdXBwb3J0IFlVViAqLwo+PiA+IC0JCQlkcHVfZWRpZF9zZXRfeTQyMF9zdXBwb3J0 KGNvbm5lY3RvciwgdmlkZW9fZm9ybWF0KTsKPj4gPiAtCQl9IGVsc2UgaWYgKGRiW29mZnNldF0g JiAoMSA8PCBqKSkgewo+PiA+IC0JCQlkcHVfZWRpZF9zZXRfeTQyMF9zdXBwb3J0KGNvbm5lY3Rv ciwgdmlkZW9fZm9ybWF0KTsKPj4gPiAtCj4+ID4gLQkJCWlmIChqICYgMHg4MCkgewo+PiA+IC0J CQkJaiA9IGovODsKPj4gPiAtCQkJCW9mZnNldCsrOwo+PiA+IC0JCQkJaWYgKG9mZnNldCA+PSBj bWRiX2xlbikKPj4gPiAtCQkJCQlicmVhazsKPj4gPiAtCQkJfQo+PiA+IC0JCX0KPj4gPiAtCX0K Pj4gPiAtCj4+ID4gLQlEUFVfRURJRF9ERUJVRygiJXMgLVxuIiwgX19mdW5jX18pOwo+PiA+IC0K Pj4gPiAtfQo+PiA+IC0KPj4gPiAtc3RhdGljIHZvaWQgZHB1X2VkaWRfcGFyc2VfWTQyMFZEQigK Pj4gPiAtc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRwdV9lZGlkX2N0 cmwgKmVkaWRfY3RybCwKPj4gPiAtY29uc3QgdTggKmRiKQo+PiA+IC17Cj4+ID4gLQl1OCBsZW4g PSBkYlswXSAmIDB4MWY7Cj4+ID4gLQl1MzIgaSA9IDA7Cj4+ID4gLQl1MzIgdmlkZW9fZm9ybWF0 ID0gMDsKPj4gPiAtCj4+ID4gLQlpZiAoIWVkaWRfY3RybCkgewo+PiA+IC0JCURQVV9FUlJPUigi JXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVuY19fKTsKPj4gPiAtCQlyZXR1cm47Cj4+ID4gLQl9 Cj4+ID4gLQo+PiA+IC0JRFBVX0VESURfREVCVUcoIiVzICtcbiIsIF9fZnVuY19fKTsKPj4gPiAt Cj4+ID4gLQkvKiBPZmZzZXQgdG8gYnl0ZSAzICovCj4+ID4gLQlkYiArPSAyOwo+PiA+IC0JZm9y IChpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgewo+PiA+IC0JCXZpZGVvX2Zvcm1hdCA9ICooZGIg KyBpKSAmIDB4N0Y7Cj4+ID4gLQkJLyoKPj4gPiAtCQkgKiBtb2RlIHdhcyBhbHJlYWR5IGFkZGVk IGluIGdldF9tb2RlcygpCj4+ID4gLQkJICogb25seSBuZWVkIHRvIHNldCB0aGUgWTQyMCBzdXBw b3J0IGZsYWcKPj4gPiAtCQkgKi8KPj4gPiAtCQlkcHVfZWRpZF9zZXRfeTQyMF9zdXBwb3J0KGNv bm5lY3RvciwgdmlkZW9fZm9ybWF0KTsKPj4gPiAtCX0KPj4gPiAtCURQVV9FRElEX0RFQlVHKCIl cyAtIiwgX19mdW5jX18pOwo+PiA+IC19Cj4+ID4gLQo+PiA+IC1zdGF0aWMgdm9pZCBkcHVfZWRp ZF9zZXRfbW9kZV9mb3JtYXQoCj4+ID4gLXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is IHN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwpCj4+ID4gLXsKPj4gPiAtCWNvbnN0IHU4 ICpkYiA9IE5VTEw7Cj4+ID4gLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPj4gPiAt Cj4+ID4gLQlEUFVfRURJRF9ERUJVRygiJXMgK1xuIiwgX19mdW5jX18pOwo+PiA+IC0JLyogU2V0 IFlVViBtb2RlIHN1cHBvcnQgZmxhZ3MgZm9yIFlDYmNyNDIwVkRCICovCj4+ID4gLQlkYiA9IGRw dV9lZGlkX2ZpbmRfZXh0ZW5kZWRfdGFnX2Jsb2NrKGVkaWRfY3RybC0+ZWRpZCwKPj4gPiAtCQkJ WTQyMF9WSURFT19EQVRBX0JMT0NLKTsKPj4gPiAtCWlmIChkYikKPj4gPiAtCQlkcHVfZWRpZF9w YXJzZV9ZNDIwVkRCKGNvbm5lY3RvciwgZWRpZF9jdHJsLCBkYik7Cj4+ID4gLQllbHNlCj4+ID4g LQkJRFBVX0VESURfREVCVUcoIllDYkNyNDIwIFZEQiBpcyBub3QgcHJlc2VudFxuIik7Cj4+ID4g LQo+PiA+IC0JLyogU2V0IFJHQiBzdXBwb3J0ZWQgb24gYWxsIG1vZGVzIHdoZXJlIFlVViBpcyBu b3Qgc2V0ICovCj4+ID4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3ItPnBy b2JlZF9tb2RlcywgaGVhZCkgewo+PiA+IC0JCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR19TVVBQT1JUU19ZVVYpKQo+PiA+IC0JCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFH X1NVUFBPUlRTX1JHQjsKPj4gPiAtCX0KPj4gPiAtCj4+ID4gLQo+PiA+IC0JZGIgPSBkcHVfZWRp ZF9maW5kX2V4dGVuZGVkX3RhZ19ibG9jayhlZGlkX2N0cmwtPmVkaWQsCj4+ID4gLQkJCVk0MjBf Q0FQQUJJTElUWV9NQVBfREFUQV9CTE9DSyk7Cj4+ID4gLQlpZiAoZGIpCj4+ID4gLQkJZHB1X2Vk aWRfcGFyc2VfWTQyMENNREIoY29ubmVjdG9yLCBlZGlkX2N0cmwsIGRiKTsKPj4gPiAtCWVsc2UK Pj4gPiAtCQlEUFVfRURJRF9ERUJVRygiWUNiQ3I0MjAgQ01EQiBpcyBub3QgcHJlc2VudFxuIik7 Cj4+ID4gLQo+PiA+IC0JRFBVX0VESURfREVCVUcoIiVzIC1cbiIsIF9fZnVuY19fKTsKPj4gPiAt fQo+PiA+IC0KPj4gPiAtc3RhdGljIHZvaWQgX2RwdV9lZGlkX3VwZGF0ZV9kY19tb2RlcygKPj4g PiAtc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRwdV9lZGlkX2N0cmwg KmVkaWRfY3RybCkKPj4gPiAtewo+PiA+IC0JaW50IGksIHN0YXJ0LCBlbmQ7Cj4+ID4gLQl1OCAq ZWRpZF9leHQsICpoZG1pOwo+PiA+IC0Jc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmRpc3BfaW5m bzsKPj4gPiAtCXUzMiBoZG1pX2RjX3l1dl9tb2RlcyA9IDA7Cj4+ID4gLQo+PiA+IC0JRFBVX0VE SURfREVCVUcoIiVzICtcbiIsIF9fZnVuY19fKTsKPj4gPiAtCj4+ID4gLQlpZiAoIWNvbm5lY3Rv ciB8fCAhZWRpZF9jdHJsKSB7Cj4+ID4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsK Pj4gPiAtCQlyZXR1cm47Cj4+ID4gLQl9Cj4+ID4gLQo+PiA+IC0JZGlzcF9pbmZvID0gJmNvbm5l Y3Rvci0+ZGlzcGxheV9pbmZvOwo+PiA+IC0KPj4gPiAtCWVkaWRfZXh0ID0gZHB1X2ZpbmRfY2Vh X2V4dGVuc2lvbihlZGlkX2N0cmwtPmVkaWQpOwo+PiA+IC0KPj4gPiAtCWlmICghZWRpZF9leHQp IHsKPj4gPiAtCQlEUFVfRVJST1IoIm5vIGNlYSBleHRlbnNpb25cbiIpOwo+PiA+IC0JCXJldHVy bjsKPj4gPiAtCX0KPj4gPiAtCj4+ID4gLQlpZiAoZHB1X2NlYV9kYl9vZmZzZXRzKGVkaWRfZXh0 LCAmc3RhcnQsICZlbmQpKQo+PiA+IC0JCXJldHVybjsKPj4gPiAtCj4+ID4gLQlkcHVfZm9yX2Vh Y2hfY2VhX2RiKGVkaWRfZXh0LCBpLCBzdGFydCwgZW5kKSB7Cj4+ID4gLQkJaWYgKGRwdV9jZWFf ZGJfaXNfaGRtaV9oZl92c2RiKCZlZGlkX2V4dFtpXSkpIHsKPj4gPiAtCj4+ID4gLQkJCWhkbWkg PSAmZWRpZF9leHRbaV07Cj4+ID4gLQo+PiA+IC0JCQlpZiAoZHB1X2NlYV9kYl9wYXlsb2FkX2xl bihoZG1pKSA8IDcpCj4+ID4gLQkJCQljb250aW51ZTsKPj4gPiAtCj4+ID4gLQkJCWlmIChoZG1p WzddICYgRFJNX0VESURfWUNCQ1I0MjBfRENfMzApIHsKPj4gPiAtCQkJCWhkbWlfZGNfeXV2X21v ZGVzIHw9IERSTV9FRElEX1lDQkNSNDIwX0RDXzMwOwo+PiA+IC0JCQkJRFBVX0VESURfREVCVUco Ilk0MjAgMzAtYml0IHN1cHBvcnRlZFxuIik7Cj4+ID4gLQkJCX0KPj4gPiAtCj4+ID4gLQkJCWlm IChoZG1pWzddICYgRFJNX0VESURfWUNCQ1I0MjBfRENfMzYpIHsKPj4gPiAtCQkJCWhkbWlfZGNf eXV2X21vZGVzIHw9IERSTV9FRElEX1lDQkNSNDIwX0RDXzM2Owo+PiA+IC0JCQkJRFBVX0VESURf REVCVUcoIlk0MjAgMzYtYml0IHN1cHBvcnRlZFxuIik7Cj4+ID4gLQkJCX0KPj4gPiAtCj4+ID4g LQkJCWlmIChoZG1pWzddICYgRFJNX0VESURfWUNCQ1I0MjBfRENfNDgpIHsKPj4gPiAtCQkJCWhk bWlfZGNfeXV2X21vZGVzIHw9IERSTV9FRElEX1lDQkNSNDIwX0RDXzM2Owo+PiA+IC0JCQkJRFBV X0VESURfREVCVUcoIlk0MjAgNDgtYml0IHN1cHBvcnRlZFxuIik7Cj4+ID4gLQkJCX0KPj4gPiAt CQl9Cj4+ID4gLQl9Cj4+ID4gLQo+PiA+IC0JZGlzcF9pbmZvLT5lZGlkX2hkbWlfZGNfbW9kZXMg fD0gaGRtaV9kY195dXZfbW9kZXM7Cj4+ID4gLQo+PiA+IC0JRFBVX0VESURfREVCVUcoIiVzIC1c biIsIF9fZnVuY19fKTsKPj4gPiAtfQo+PiA+IC0KPj4gPiAtc3RhdGljIHZvaWQgX2RwdV9lZGlk X2V4dHJhY3RfYXVkaW9fZGF0YV9ibG9ja3MoCj4+ID4gLQlzdHJ1Y3QgZHB1X2VkaWRfY3RybCAq ZWRpZF9jdHJsKQo+PiA+IC17Cj4+ID4gLQl1OCBsZW4gPSAwOwo+PiA+IC0JdTggYWRiX21heCA9 IDA7Cj4+ID4gLQljb25zdCB1OCAqYWRiID0gTlVMTDsKPj4gPiAtCXUzMiBvZmZzZXQgPSBEQkNf U1RBUlRfT0ZGU0VUOwo+PiA+IC0JdTggKmNlYSA9IE5VTEw7Cj4+ID4gLQo+PiA+IC0JaWYgKCFl ZGlkX2N0cmwpIHsKPj4gPiAtCQlEUFVfRVJST1IoImludmFsaWQgZWRpZF9jdHJsXG4iKTsKPj4g PiAtCQlyZXR1cm47Cj4+ID4gLQl9Cj4+ID4gLQlEUFVfRURJRF9ERUJVRygiJXMgKyIsIF9fZnVu Y19fKTsKPj4gPiAtCWNlYSA9IGRwdV9maW5kX2NlYV9leHRlbnNpb24oZWRpZF9jdHJsLT5lZGlk KTsKPj4gPiAtCWlmICghY2VhKSB7Cj4+ID4gLQkJRFBVX0RFQlVHKCJDRUEgZXh0ZW5zaW9uIG5v dCBmb3VuZFxuIik7Cj4+ID4gLQkJcmV0dXJuOwo+PiA+IC0JfQo+PiA+IC0KPj4gPiAtCWVkaWRf Y3RybC0+YWRiX3NpemUgPSAwOwo+PiA+IC0KPj4gPiAtCW1lbXNldChlZGlkX2N0cmwtPmF1ZGlv X2RhdGFfYmxvY2ssIDAsCj4+ID4gLQkJc2l6ZW9mKGVkaWRfY3RybC0+YXVkaW9fZGF0YV9ibG9j aykpOwo+PiA+IC0KPj4gPiAtCWRvIHsKPj4gPiAtCQlsZW4gPSAwOwo+PiA+IC0JCWFkYiA9IF9k cHVfZWRpZF9maW5kX2Jsb2NrKGNlYSwgb2Zmc2V0LCBBVURJT19EQVRBX0JMT0NLLAo+PiA+IC0J CQkmbGVuKTsKPj4gPiAtCj4+ID4gLQkJaWYgKChhZGIgPT0gTlVMTCkgfHwgKGxlbiA+IE1BWF9B VURJT19EQVRBX0JMT0NLX1NJWkUgfHwKPj4gPiAtCQkJYWRiX21heCA+PSBNQVhfTlVNQkVSX0FE QikpIHsKPj4gPiAtCQkJaWYgKCFlZGlkX2N0cmwtPmFkYl9zaXplKSB7Cj4+ID4gLQkJCQlEUFVf REVCVUcoIk5vL0ludmFsaWQgQXVkaW8gRGF0YSBCbG9ja1xuIik7Cj4+ID4gLQkJCQlyZXR1cm47 Cj4+ID4gLQkJCX0KPj4gPiAtCj4+ID4gLQkJCWNvbnRpbnVlOwo+PiA+IC0JCX0KPj4gPiAtCj4+ ID4gLQkJbWVtY3B5KGVkaWRfY3RybC0+YXVkaW9fZGF0YV9ibG9jayArIGVkaWRfY3RybC0+YWRi X3NpemUsCj4+ID4gLQkJCWFkYiArIDEsIGxlbik7Cj4+ID4gLQkJb2Zmc2V0ID0gKGFkYiAtIGNl YSkgKyAxICsgbGVuOwo+PiA+IC0KPj4gPiAtCQllZGlkX2N0cmwtPmFkYl9zaXplICs9IGxlbjsK Pj4gPiAtCQlhZGJfbWF4Kys7Cj4+ID4gLQl9IHdoaWxlIChhZGIpOwo+PiA+IC0JRFBVX0VESURf REVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7Cj4+ID4gLX0KPj4gPiAtCj4+ID4gLXN0YXRpYyB2b2lk IF9kcHVfZWRpZF9leHRyYWN0X3NwZWFrZXJfYWxsb2NhdGlvbl9kYXRhKAo+PiA+IC0Jc3RydWN0 IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCkKPj4gPiAtewo+PiA+IC0JdTggbGVuOwo+PiA+IC0J Y29uc3QgdTggKnNhZGIgPSBOVUxMOwo+PiA+IC0JdTggKmNlYSA9IE5VTEw7Cj4+ID4gLQo+PiA+ IC0JaWYgKCFlZGlkX2N0cmwpIHsKPj4gPiAtCQlEUFVfRVJST1IoImludmFsaWQgZWRpZF9jdHJs XG4iKTsKPj4gPiAtCQlyZXR1cm47Cj4+ID4gLQl9Cj4+ID4gLQlEUFVfRURJRF9ERUJVRygiJXMg KyIsIF9fZnVuY19fKTsKPj4gPiAtCWNlYSA9IGRwdV9maW5kX2NlYV9leHRlbnNpb24oZWRpZF9j dHJsLT5lZGlkKTsKPj4gPiAtCWlmICghY2VhKSB7Cj4+ID4gLQkJRFBVX0RFQlVHKCJDRUEgZXh0 ZW5zaW9uIG5vdCBmb3VuZFxuIik7Cj4+ID4gLQkJcmV0dXJuOwo+PiA+IC0JfQo+PiA+IC0KPj4g PiAtCXNhZGIgPSBfZHB1X2VkaWRfZmluZF9ibG9jayhjZWEsIERCQ19TVEFSVF9PRkZTRVQsCj4+ ID4gLQkJU1BFQUtFUl9BTExPQ0FUSU9OX0RBVEFfQkxPQ0ssICZsZW4pOwo+PiA+IC0JaWYgKChz YWRiID09IE5VTEwpIHx8IChsZW4gIT0gTUFYX1NQS1JfQUxMT0NfREFUQV9CTE9DS19TSVpFKSkg ewo+PiA+IC0JCURQVV9ERUJVRygiTm8vSW52YWxpZCBTcGVha2VyIEFsbG9jYXRpb24gRGF0YSBC bG9ja1xuIik7Cj4+ID4gLQkJcmV0dXJuOwo+PiA+IC0JfQo+PiA+IC0KPj4gPiAtCW1lbWNweShl ZGlkX2N0cmwtPnNwa3JfYWxsb2NfZGF0YV9ibG9jaywgc2FkYiArIDEsIGxlbik7Cj4+ID4gLQll ZGlkX2N0cmwtPnNhZGJfc2l6ZSA9IGxlbjsKPj4gPiAtCj4+ID4gLQlEUFVfRURJRF9ERUJVRygi c3BlYWtlciBhbGxvYyBkYXRhIFNQIGJ5dGUgPSAlMDh4ICVzJXMlcyVzJXMlcyVzXG4iLAo+PiA+ IC0JCXNhZGJbMV0sCj4+ID4gLQkJKHNhZGJbMV0gJiBCSVQoMCkpID8gIkZML0ZSLCIgOiAiIiwK Pj4gPiAtCQkoc2FkYlsxXSAmIEJJVCgxKSkgPyAiTEZFLCIgOiAiIiwKPj4gPiAtCQkoc2FkYlsx XSAmIEJJVCgyKSkgPyAiRkMsIiA6ICIiLAo+PiA+IC0JCShzYWRiWzFdICYgQklUKDMpKSA/ICJS TC9SUiwiIDogIiIsCj4+ID4gLQkJKHNhZGJbMV0gJiBCSVQoNCkpID8gIlJDLCIgOiAiIiwKPj4g PiAtCQkoc2FkYlsxXSAmIEJJVCg1KSkgPyAiRkxDL0ZSQywiIDogIiIsCj4+ID4gLQkJKHNhZGJb MV0gJiBCSVQoNikpID8gIlJMQy9SUkMsIiA6ICIiKTsKPj4gPiAtCURQVV9FRElEX0RFQlVHKCIl cyAtIiwgX19mdW5jX18pOwo+PiA+IC19Cj4+ID4gLQo+PiA+IC1zdHJ1Y3QgZHB1X2VkaWRfY3Ry bCAqZHB1X2VkaWRfaW5pdCh2b2lkKQo+PiA+IC17Cj4+ID4gLQlzdHJ1Y3QgZHB1X2VkaWRfY3Ry bCAqZWRpZF9jdHJsID0gTlVMTDsKPj4gPiAtCj4+ID4gLQlEUFVfRURJRF9ERUJVRygiJXMgK1xu IiwgX19mdW5jX18pOwo+PiA+IC0JZWRpZF9jdHJsID0ga3phbGxvYyhzaXplb2YoKmVkaWRfY3Ry bCksIEdGUF9LRVJORUwpOwo+PiA+IC0JaWYgKCFlZGlkX2N0cmwpIHsKPj4gPiAtCQlEUFVfRVJS T1IoImVkaWRfY3RybCBhbGxvYyBmYWlsZWRcbiIpOwo+PiA+IC0JCXJldHVybiBOVUxMOwo+PiA+ IC0JfQo+PiA+IC0JbWVtc2V0KChlZGlkX2N0cmwpLCAwLCBzaXplb2YoKmVkaWRfY3RybCkpOwo+ PiA+IC0JRFBVX0VESURfREVCVUcoIiVzIC1cbiIsIF9fZnVuY19fKTsKPj4gPiAtCXJldHVybiBl ZGlkX2N0cmw7Cj4+ID4gLX0KPj4gPiAtCj4+ID4gLXZvaWQgZHB1X2ZyZWVfZWRpZCh2b2lkICoq aW5wdXQpCj4+ID4gLXsKPj4gPiAtCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAo c3RydWN0IGRwdV9lZGlkX2N0cmwgKikoKmlucHV0KTsKPj4gPiAtCj4+ID4gLQlEUFVfRURJRF9E RUJVRygiJXMgKyIsIF9fZnVuY19fKTsKPj4gPiAtCWtmcmVlKGVkaWRfY3RybC0+ZWRpZCk7Cj4+ ID4gLQllZGlkX2N0cmwtPmVkaWQgPSBOVUxMOwo+PiA+IC19Cj4+ID4gLQo+PiA+IC12b2lkIGRw dV9lZGlkX2RlaW5pdCh2b2lkICoqaW5wdXQpCj4+ID4gLXsKPj4gPiAtCXN0cnVjdCBkcHVfZWRp ZF9jdHJsICplZGlkX2N0cmwgPSAoc3RydWN0IGRwdV9lZGlkX2N0cmwgKikoKmlucHV0KTsKPj4g PiAtCj4+ID4gLQlEUFVfRURJRF9ERUJVRygiJXMgKyIsIF9fZnVuY19fKTsKPj4gPiAtCWRwdV9m cmVlX2VkaWQoKHZvaWQgKikmZWRpZF9jdHJsKTsKPj4gPiAtCWtmcmVlKGVkaWRfY3RybCk7Cj4+ ID4gLQlEUFVfRURJRF9ERUJVRygiJXMgLSIsIF9fZnVuY19fKTsKPj4gPiAtfQo+PiA+IC0KPj4g PiAtaW50IF9kcHVfZWRpZF91cGRhdGVfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPj4gPiAtCXZvaWQgKmlucHV0KQo+PiA+IC17Cj4+ID4gLQlpbnQgcmMgPSAwOwo+PiA+ IC0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCA9IChzdHJ1Y3QgZHB1X2VkaWRfY3Ry bCAqKShpbnB1dCk7Cj4+ID4gLQo+PiA+IC0JRFBVX0VESURfREVCVUcoIiVzICsiLCBfX2Z1bmNf Xyk7Cj4+ID4gLQlpZiAoZWRpZF9jdHJsLT5lZGlkKSB7Cj4+ID4gLQkJZHJtX21vZGVfY29ubmVj dG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwKPj4gPiAtCQkJZWRpZF9jdHJsLT5l ZGlkKTsKPj4gPiAtCj4+ID4gLQkJcmMgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBl ZGlkX2N0cmwtPmVkaWQpOwo+PiA+IC0JCWRwdV9lZGlkX3NldF9tb2RlX2Zvcm1hdChjb25uZWN0 b3IsIGVkaWRfY3RybCk7Cj4+ID4gLQkJX2RwdV9lZGlkX3VwZGF0ZV9kY19tb2Rlcyhjb25uZWN0 b3IsIGVkaWRfY3RybCk7Cj4+ID4gLQkJRFBVX0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7 Cj4+ID4gLQkJcmV0dXJuIHJjOwo+PiA+IC0JfQo+PiA+IC0KPj4gPiAtCWRybV9tb2RlX2Nvbm5l Y3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIE5VTEwpOwo+PiA+IC0JRFBVX0VE SURfREVCVUcoIiVzIG51bGwgZWRpZCAtIiwgX19mdW5jX18pOwo+PiA+IC0JcmV0dXJuIHJjOwo+ PiA+IC19Cj4+ID4gLQo+PiA+IC11MzIgZHB1X2dldF9zaW5rX2JwYyh2b2lkICppbnB1dCkKPj4g PiAtewo+PiA+IC0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCA9IChzdHJ1Y3QgZHB1 X2VkaWRfY3RybCAqKShpbnB1dCk7Cj4+ID4gLQlzdHJ1Y3QgZWRpZCAqZWRpZCA9IGVkaWRfY3Ry bC0+ZWRpZDsKPj4gPiAtCj4+ID4gLQlpZiAoIWVkaWQpIHsKPj4gPiAtCQlEUFVfRVJST1IoImlu dmFsaWQgZWRpZCBpbnB1dFxuIik7Cj4+ID4gLQkJcmV0dXJuIDA7Cj4+ID4gLQl9Cj4+ID4gLQo+ PiA+IC0JaWYgKChlZGlkLT5yZXZpc2lvbiA8IDMpIHx8ICEoZWRpZC0+aW5wdXQgJiBEUk1fRURJ RF9JTlBVVF9ESUdJVEFMKSkKPj4gPiAtCQlyZXR1cm4gMDsKPj4gPiAtCj4+ID4gLQlpZiAoZWRp ZC0+cmV2aXNpb24gPCA0KSB7Cj4+ID4gLQkJaWYgKGVkaWQtPmlucHV0ICYgRFJNX0VESURfRElH SVRBTF9UWVBFX0RWSSkKPj4gPiAtCQkJcmV0dXJuIDg7Cj4+ID4gLQkJZWxzZQo+PiA+IC0JCQly ZXR1cm4gMDsKPj4gPiAtCX0KPj4gPiAtCj4+ID4gLQlzd2l0Y2ggKGVkaWQtPmlucHV0ICYgRFJN X0VESURfRElHSVRBTF9ERVBUSF9NQVNLKSB7Cj4+ID4gLQljYXNlIERSTV9FRElEX0RJR0lUQUxf REVQVEhfNjoKPj4gPiAtCQlyZXR1cm4gNjsKPj4gPiAtCWNhc2UgRFJNX0VESURfRElHSVRBTF9E RVBUSF84Ogo+PiA+IC0JCXJldHVybiA4Owo+PiA+IC0JY2FzZSBEUk1fRURJRF9ESUdJVEFMX0RF UFRIXzEwOgo+PiA+IC0JCXJldHVybiAxMDsKPj4gPiAtCWNhc2UgRFJNX0VESURfRElHSVRBTF9E RVBUSF8xMjoKPj4gPiAtCQlyZXR1cm4gMTI7Cj4+ID4gLQljYXNlIERSTV9FRElEX0RJR0lUQUxf REVQVEhfMTQ6Cj4+ID4gLQkJcmV0dXJuIDE0Owo+PiA+IC0JY2FzZSBEUk1fRURJRF9ESUdJVEFM X0RFUFRIXzE2Ogo+PiA+IC0JCXJldHVybiAxNjsKPj4gPiAtCWNhc2UgRFJNX0VESURfRElHSVRB TF9ERVBUSF9VTkRFRjoKPj4gPiAtCWRlZmF1bHQ6Cj4+ID4gLQkJcmV0dXJuIDA7Cj4+ID4gLQl9 Cj4+ID4gLX0KPj4gPiAtCj4+ID4gLXU4IGRwdV9nZXRfZWRpZF9jaGVja3N1bSh2b2lkICppbnB1 dCkKPj4gPiAtewo+PiA+IC0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCA9IChzdHJ1 Y3QgZHB1X2VkaWRfY3RybCAqKShpbnB1dCk7Cj4+ID4gLQlzdHJ1Y3QgZWRpZCAqZWRpZCA9IE5V TEwsICpsYXN0X2Jsb2NrID0gTlVMTDsKPj4gPiAtCXU4ICpyYXdfZWRpZCA9IE5VTEw7Cj4+ID4g LQo+PiA+IC0JaWYgKCFlZGlkX2N0cmwgfHwgIWVkaWRfY3RybC0+ZWRpZCkgewo+PiA+IC0JCURQ VV9FUlJPUigiaW52YWxpZCBlZGlkIGlucHV0XG4iKTsKPj4gPiAtCQlyZXR1cm4gMDsKPj4gPiAt CX0KPj4gPiAtCj4+ID4gLQllZGlkID0gZWRpZF9jdHJsLT5lZGlkOwo+PiA+IC0KPj4gPiAtCXJh d19lZGlkID0gKHU4ICopZWRpZDsKPj4gPiAtCXJhd19lZGlkICs9IChlZGlkLT5leHRlbnNpb25z ICogRURJRF9MRU5HVEgpOwo+PiA+IC0JbGFzdF9ibG9jayA9IChzdHJ1Y3QgZWRpZCAqKXJhd19l ZGlkOwo+PiA+IC0KPj4gPiAtCWlmIChsYXN0X2Jsb2NrKQo+PiA+IC0JCXJldHVybiBsYXN0X2Js b2NrLT5jaGVja3N1bTsKPj4gPiAtCj4+ID4gLQlEUFVfRVJST1IoIkludmFsaWQgYmxvY2ssIG5v IGNoZWNrc3VtXG4iKTsKPj4gPiAtCXJldHVybiAwOwo+PiA+IC19Cj4+ID4gLQo+PiA+IC1ib29s IGRwdV9kZXRlY3RfaGRtaV9tb25pdG9yKHZvaWQgKmlucHV0KQo+PiA+IC17Cj4+ID4gLQlzdHJ1 Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJsICopKGlu cHV0KTsKPj4gPiAtCj4+ID4gLQlyZXR1cm4gZHJtX2RldGVjdF9oZG1pX21vbml0b3IoZWRpZF9j dHJsLT5lZGlkKTsKPj4gPiAtfQo+PiA+IC0KPj4gPiAtdm9pZCBkcHVfZ2V0X2VkaWQoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPj4gPiAtCQkJCSAgc3RydWN0IGkyY19hZGFwdGVy ICphZGFwdGVyLCB2b2lkICoqaW5wdXQpCj4+ID4gLXsKPj4gPiAtCXN0cnVjdCBkcHVfZWRpZF9j dHJsICplZGlkX2N0cmwgPSAoc3RydWN0IGRwdV9lZGlkX2N0cmwgKikoKmlucHV0KTsKPj4gPiAt Cj4+ID4gLQllZGlkX2N0cmwtPmVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCBhZGFwdGVy KTsKPj4gPiAtCURQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Cj4+ID4gLQo+PiA+ IC0JaWYgKCFlZGlkX2N0cmwtPmVkaWQpCj4+ID4gLQkJRFBVX0VSUk9SKCJFRElEIHJlYWQgZmFp bGVkXG4iKTsKPj4gPiAtCj4+ID4gLQlpZiAoZWRpZF9jdHJsLT5lZGlkKSB7Cj4+ID4gLQkJZHB1 X2VkaWRfZXh0cmFjdF92ZW5kb3JfaWQoZWRpZF9jdHJsKTsKPj4gPiAtCQlfZHB1X2VkaWRfZXh0 cmFjdF9hdWRpb19kYXRhX2Jsb2NrcyhlZGlkX2N0cmwpOwo+PiA+IC0JCV9kcHVfZWRpZF9leHRy YWN0X3NwZWFrZXJfYWxsb2NhdGlvbl9kYXRhKGVkaWRfY3RybCk7Cj4+ID4gLQl9Cj4+ID4gLQlE UFVfRURJRF9ERUJVRygiJXMgLVxuIiwgX19mdW5jX18pOwo+PiA+IC19Owo+PiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5oCj4+ID4gYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5oCj4+ID4gZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0Cj4+ID4gaW5kZXggYzA1MWIxOGJiODEyLi4wMDAwMDAwMDAwMDAKPj4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5oCj4+ID4gKysrIC9kZXYvbnVsbAo+PiA+ IEBAIC0xLDE2NiArMCwwIEBACj4+ID4gLS8qCj4+ID4gLSAqIENvcHlyaWdodCAoYykgMjAxNy0y MDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gPiAtICoK Pj4gPiAtICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gPiAtICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ID4gLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+PiA+ IC0gKgo+PiA+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gPiAtICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gPiAtICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiA+IC0g KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiA+IC0gKgo+ PiA+IC0gKi8KPj4gPiAtCj4+ID4gLSNpZm5kZWYgX0RQVV9FRElEX1BBUlNFUl9IXwo+PiA+IC0j ZGVmaW5lIF9EUFVfRURJRF9QQVJTRVJfSF8KPj4gPiAtCj4+ID4gLSNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgo+PiA+IC0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4+ID4gLSNpbmNsdWRlIDxs aW51eC9kZWJ1Z2ZzLmg+Cj4+ID4gLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPj4gPiAt I2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+PiA+IC0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KPj4gPiAt I2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+PiA+IC0jaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+ Cj4+ID4gLQo+PiA+IC0KPj4gPiAtI2RlZmluZSBNQVhfTlVNQkVSX0FEQiA1Cj4+ID4gLSNkZWZp bmUgTUFYX0FVRElPX0RBVEFfQkxPQ0tfU0laRSAzMAo+PiA+IC0jZGVmaW5lIE1BWF9TUEtSX0FM TE9DX0RBVEFfQkxPQ0tfU0laRSAzCj4+ID4gLSNkZWZpbmUgRURJRF9WRU5ET1JfSURfU0laRSAg ICAgNAo+PiA+IC0KPj4gPiAtI2RlZmluZSBEUFVfQ0VBX0VYVCAgICAweDAyCj4+ID4gLSNkZWZp bmUgRFBVX0VYVEVOREVEX1RBRyAweDA3Cj4+ID4gLQo+PiA+IC0jZGVmaW5lIERQVV9EUk1fTU9E RV9GTEFHX0ZNVF9NQVNLICgweDMgPDwgMjApCj4+ID4gLQo+PiA+IC1lbnVtIGV4dGVuZGVkX2Rh dGFfYmxvY2tfdHlwZXMgewo+PiA+IC0JVklERU9fQ0FQQUJJTElUWV9EQVRBX0JMT0NLID0gMHgw LAo+PiA+IC0JVkVORE9SX1NQRUNJRklDX1ZJREVPX0RBVEFfQkxPQ0sgPSAweDAxLAo+PiA+IC0J SERNSV9WSURFT19EQVRBX0JMT0NLID0gMHgwNCwKPj4gPiAtCUhEUl9TVEFUSUNfTUVUQURBVEFf REFUQV9CTE9DSyA9IDB4MDYsCj4+ID4gLQlZNDIwX1ZJREVPX0RBVEFfQkxPQ0sgPSAweDBFLAo+ PiA+IC0JVklERU9fRk9STUFUX1BSRUZFUkVOQ0VfREFUQV9CTE9DSyA9IDB4MEQsCj4+ID4gLQlZ NDIwX0NBUEFCSUxJVFlfTUFQX0RBVEFfQkxPQ0sgPSAweDBGLAo+PiA+IC0JVkVORE9SX1NQRUNJ RklDX0FVRElPX0RBVEFfQkxPQ0sgPSAweDExLAo+PiA+IC0JSU5GT0ZSQU1FX0RBVEFfQkxPQ0sg PSAweDIwLAo+PiA+IC19Owo+PiA+IC0KPj4gPiAtI2lmZGVmIERQVV9FRElEX0RFQlVHX0VOQUJM RQo+PiA+IC0jZGVmaW5lIERQVV9FRElEX0RFQlVHKGZtdCwgYXJncy4uLikgICBEUFVfRVJST1Io Zm10LCAjI2FyZ3MpCj4+ID4gLSNlbHNlCj4+ID4gLSNkZWZpbmUgRFBVX0VESURfREVCVUcoZm10 LCBhcmdzLi4uKSAgIERQVV9ERUJVRyhmbXQsICMjYXJncykKPj4gPiAtI2VuZGlmCj4+ID4gLQo+ PiA+IC0vKgo+PiA+IC0gKiBzdHJ1Y3QgaGRtaV9lZGlkX2hkcl9kYXRhIC0gSERSIFN0YXRpYyBN ZXRhZGF0YQo+PiA+IC0gKiBAZW90ZjogRWxlY3Ryby1PcHRpY2FsIFRyYW5zZmVyIEZ1bmN0aW9u Cj4+ID4gLSAqIEBtZXRhZGF0YV90eXBlX29uZTogU3RhdGljIE1ldGFkYXRhIFR5cGUgMSBzdXBw b3J0Cj4+ID4gLSAqIEBtYXhfbHVtaW5hbmNlOiBEZXNpcmVkIENvbnRlbnQgTWF4aW11bSBMdW1p bmFuY2UKPj4gPiAtICogQGF2Z19sdW1pbmFuY2U6IERlc2lyZWQgQ29udGVudCBGcmFtZS1hdmVy YWdlIEx1bWluYW5jZQo+PiA+IC0gKiBAbWluX2x1bWluYW5jZTogRGVzaXJlZCBDb250ZW50IE1p bmltdW0gTHVtaW5hbmNlCj4+ID4gLSAqLwo+PiA+IC1zdHJ1Y3QgZHB1X2VkaWRfaGRyX2RhdGEg ewo+PiA+IC0JdTMyIGVvdGY7Cj4+ID4gLQlib29sIG1ldGFkYXRhX3R5cGVfb25lOwo+PiA+IC0J dTMyIG1heF9sdW1pbmFuY2U7Cj4+ID4gLQl1MzIgYXZnX2x1bWluYW5jZTsKPj4gPiAtCXUzMiBt aW5fbHVtaW5hbmNlOwo+PiA+IC19Owo+PiA+IC0KPj4gPiAtc3RydWN0IGRwdV9lZGlkX3Npbmtf Y2FwcyB7Cj4+ID4gLQl1MzIgbWF4X3BjbGtfaW5faHo7Cj4+ID4gLQlib29sIHNjZGNfcHJlc2Vu dDsKPj4gPiAtCWJvb2wgc2NyYW1ibGVfc3VwcG9ydDsgLyogc2NyYW1ibGUgc3VwcG9ydCBmb3Ig bGVzcyB0aGFuIDM0ME1jc2MgKi8KPj4gPiAtCWJvb2wgcmVhZF9yZXFfc3VwcG9ydDsKPj4gPiAt CWJvb2wgb3NkX2Rpc3Bhcml0eTsKPj4gPiAtCWJvb2wgZHVhbF92aWV3X3N1cHBvcnQ7Cj4+ID4g LQlib29sIGluZF92aWV3X3N1cHBvcnQ7Cj4+ID4gLX07Cj4+ID4gLQo+PiA+IC1zdHJ1Y3QgZHB1 X2VkaWRfY3RybCB7Cj4+ID4gLQlzdHJ1Y3QgZWRpZCAqZWRpZDsKPj4gPiAtCXU4IHB0X3NjYW5f aW5mbzsKPj4gPiAtCXU4IGl0X3NjYW5faW5mbzsKPj4gPiAtCXU4IGNlX3NjYW5faW5mbzsKPj4g PiAtCXU4IGF1ZGlvX2RhdGFfYmxvY2tbTUFYX05VTUJFUl9BREIgKiBNQVhfQVVESU9fREFUQV9C TE9DS19TSVpFXTsKPj4gPiAtCWludCBhZGJfc2l6ZTsKPj4gPiAtCXU4IHNwa3JfYWxsb2NfZGF0 YV9ibG9ja1tNQVhfU1BLUl9BTExPQ19EQVRBX0JMT0NLX1NJWkVdOwo+PiA+IC0JaW50IHNhZGJf c2l6ZTsKPj4gPiAtCWJvb2wgaGRyX3N1cHBvcnRlZDsKPj4gPiAtCWNoYXIgdmVuZG9yX2lkW0VE SURfVkVORE9SX0lEX1NJWkVdOwo+PiA+IC0Jc3RydWN0IGRwdV9lZGlkX3NpbmtfY2FwcyBzaW5r X2NhcHM7Cj4+ID4gLQlzdHJ1Y3QgZHB1X2VkaWRfaGRyX2RhdGEgaGRyX2RhdGE7Cj4+ID4gLX07 Cj4+ID4gLQo+PiA+IC0vKioKPj4gPiAtICogZHB1X2VkaWRfaW5pdCgpIC0gaW5pdCBlZGlkIHN0 cnVjdHVyZS4KPj4gPiAtICogQGVkaWRfY3RybDogICAgIEhhbmRsZSB0byB0aGUgZWRpZF9jdHJs IHN0cnVjdHVyZS4KPj4gPiAtICogUmV0dXJuOiBoYW5kbGUgdG8gZHB1X2VkaWRfY3RybCBmb3Ig dGhlIGNsaWVudC4KPj4gPiAtICovCj4+ID4gLXN0cnVjdCBkcHVfZWRpZF9jdHJsICpkcHVfZWRp ZF9pbml0KHZvaWQpOwo+PiA+IC0KPj4gPiAtLyoqCj4+ID4gLSAqIGRwdV9lZGlkX2RlaW5pdCgp IC0gZGVpbml0IGVkaWQgc3RydWN0dXJlLgo+PiA+IC0gKiBAZWRpZF9jdHJsOiAgICAgSGFuZGxl IHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+PiA+IC0gKgo+PiA+IC0gKiBSZXR1cm46IHZv aWQuCj4+ID4gLSAqLwo+PiA+IC12b2lkIGRwdV9lZGlkX2RlaW5pdCh2b2lkICoqZWRpZF9jdHJs KTsKPj4gPiAtCj4+ID4gLS8qKgo+PiA+IC0gKiBkcHVfZ2V0X2VkaWQoKSAtIGdldCBlZGlkIGlu Zm8uCj4+ID4gLSAqIEBjb25uZWN0b3I6ICAgSGFuZGxlIHRvIHRoZSBkcm1fY29ubmVjdG9yLgo+ PiA+IC0gKiBAYWRhcHRlcjogICAgIGhhbmRsZSB0byBpMmMgYWRhcHRlciBmb3IgRERDIHJlYWQK Pj4gPiAtICogQGVkaWRfY3RybDogICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUu Cj4+ID4gLSAqCj4+ID4gLSAqIFJldHVybjogdm9pZC4KPj4gPiAtICovCj4+ID4gLXZvaWQgZHB1 X2dldF9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4+ID4gLXN0cnVjdCBp MmNfYWRhcHRlciAqYWRhcHRlciwKPj4gPiAtdm9pZCAqKmVkaWRfY3RybCk7Cj4+ID4gLQo+PiA+ IC0vKioKPj4gPiAtICogZHB1X2ZyZWVfZWRpZCgpIC0gZnJlZSBlZGlkIHN0cnVjdHVyZS4KPj4g PiAtICogQGVkaWRfY3RybDogICAgIEhhbmRsZSB0byB0aGUgZWRpZF9jdHJsIHN0cnVjdHVyZS4K Pj4gPiAtICoKPj4gPiAtICogUmV0dXJuOiB2b2lkLgo+PiA+IC0gKi8KPj4gPiAtdm9pZCBkcHVf ZnJlZV9lZGlkKHZvaWQgKiplZGlkX2N0cmwpOwo+PiA+IC0KPj4gPiAtLyoqCj4+ID4gLSAqIGRw dV9kZXRlY3RfaGRtaV9tb25pdG9yKCkgLSBkZXRlY3QgSERNSSBtb2RlLgo+PiA+IC0gKiBAZWRp ZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+PiA+IC0gKgo+ PiA+IC0gKiBSZXR1cm46IGVycm9yIGNvZGUuCj4+ID4gLSAqLwo+PiA+IC1ib29sIGRwdV9kZXRl Y3RfaGRtaV9tb25pdG9yKHZvaWQgKmVkaWRfY3RybCk7Cj4+ID4gLQo+PiA+IC0vKioKPj4gPiAt ICogZHB1X2dldF9zaW5rX2JwYygpIC0gcmV0dXJuIHRoZSBicGMgb2Ygc2luayBkZXZpY2UuCj4+ ID4gLSAqIEBlZGlkX2N0cmw6ICAgICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUu Cj4+ID4gLSAqCj4+ID4gLSAqIFJldHVybjogYnBjIHN1cHBvcnRlZCBieSB0aGUgc2luay4KPj4g PiAtICovCj4+ID4gLXUzMiBkcHVfZ2V0X3NpbmtfYnBjKHZvaWQgKmVkaWRfY3RybCk7Cj4+ID4g LQo+PiA+IC0vKioKPj4gPiAtICogZHB1X2dldF9lZGlkX2NoZWNrc3VtKCkgLSByZXR1cm4gdGhl IGNoZWNrc3VtIG9mIGxhc3QgYmxvY2sgb2YgRURJRC4KPj4gPiAtICogQGlucHV0OiAgICAgSGFu ZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+PiA+IC0gKgo+PiA+IC0gKiBSZXR1cm46 IGNoZWNrc3VtIG9mIHRoZSBsYXN0IEVESUQgYmxvY2suCj4+ID4gLSAqLwo+PiA+IC11OCBkcHVf Z2V0X2VkaWRfY2hlY2tzdW0odm9pZCAqaW5wdXQpOwo+PiA+IC0KPj4gPiAtLyoqCj4+ID4gLSAq IF9kcHVfZWRpZF91cGRhdGVfbW9kZXMoKSAtIHBvcHVsYXRlIEVESUQgbW9kZXMuCj4+ID4gLSAq IEBlZGlkX2N0cmw6ICAgICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCj4+ID4g LSAqCj4+ID4gLSAqIFJldHVybjogZXJyb3IgY29kZS4KPj4gPiAtICovCj4+ID4gLWludCBfZHB1 X2VkaWRfdXBkYXRlX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4+ID4g LQkJCQkJCQl2b2lkICplZGlkX2N0cmwpOwo+PiA+IC0KPj4gPiAtI2VuZGlmIC8qIF9EUFVfRURJ RF9QQVJTRVJfSF8gKi8KPj4gPiAtCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ZyZWVkcmVubwo=