From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fu Wei Subject: Re: [PATCH v3 2/4] arm64: Add xen_boot module file Date: Fri, 30 Oct 2015 16:08:54 +0800 Message-ID: References: <=fu.wei@linaro.org> <1437628583-23667-1-git-send-email-fu.wei@linaro.org> <1437628583-23667-3-git-send-email-fu.wei@linaro.org> <56322CCE.905@gmail.com> Reply-To: The development of GNU GRUB Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <56322CCE.905@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: grub-devel-bounces+gcbgd-grub-devel=m.gmane.org@gnu.org Sender: grub-devel-bounces+gcbgd-grub-devel=m.gmane.org@gnu.org To: =?UTF-8?Q?Vladimir_=27=CF=86=2Dcoder=2Fphcoder=27_Serbinenko?= Cc: The development of GNU GRUB , xen-devel@lists.xensource.com, Ian Campbell , Stefano Stabellini , Andrei Borzenkov , Jon Masters , Leif Lindholm , Ryan Harkin , Linaro UEFI Mailman List List-Id: xen-devel@lists.xenproject.org SGkgVmxhZGltaXIsCgp5ZXMsIFRoYW5rcyBmb3IgeW91ciBtb2RpZmljYXRpb24gOi0pCgpJIGp1 c3QgZm9sbG93IHRoZSB4ZW4gYm9vdCBwcm90b2NvbCA6Cmh0dHA6Ly93aWtpLnhlbi5vcmcvd2lr aS9YZW5fQVJNX3dpdGhfVmlydHVhbGl6YXRpb25fRXh0ZW5zaW9ucy9NdWx0aWJvb3QKCnhlbl9t b2R1bGUgaXMganVzdCBmb3IgIi0tdHlwZSIgb3B0aW9uLCBJIHdpbGwgZGlzY3VzcyB0aGlzIHdp dGggWGVuCmRldmVsb3BlciBmb3IgdGhpcy4KSWYgd2UgbmVlZCB0aGlzIG9wdGlvbiwgSSB3aWxs IHJlc3VibWl0ICBpdCA6LSkKCkdyZWF0IHRoYW5rcyEKCk9uIDI5IE9jdG9iZXIgMjAxNSBhdCAy MjoyNywgVmxhZGltaXIgJ8+GLWNvZGVyL3BoY29kZXInIFNlcmJpbmVua28KPHBoY29kZXJAZ21h aWwuY29tPiB3cm90ZToKPiBDb21taXR0ZWQgd2l0aG91dCB0aGUgeGVuX21vZHVsZSBjb21tYW5k LiBJdHMgYXJndW1lbnQgcGFyc2luZyB3YXMKPiBub24tdHJpdmlhbCBhbmQgSSBkb24ndCBxdWl0 ZSBnZXQgd2hhdCBpdHMgaW50ZW50IGlzLiBDYW4geW91IHJlc3VibWl0Pwo+IE9uIDIzLjA3LjIw MTUgMDc6MTYsIGZ1LndlaUBsaW5hcm8ub3JnIHdyb3RlOgo+PiBGcm9tOiBGdSBXZWkgPGZ1Lndl aUBsaW5hcm8ub3JnPgo+Pgo+PiBncnViLWNvcmUvbG9hZGVyL2FybTY0L3hlbl9ib290LmMKPj4K Pj4gICAtIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgWGVuIGJvb3Qgb24gQVJNIHNwZWNpZmlj YXRpb24gZm9yIGFybTY0Lgo+PiAgIC0gSW50cm9kdWNlIHhlbl9oeXBlcnZpc29yLCB4ZW5fbGlu dXgsIHhlbl9pbml0cmQgYW5kIHhlbl94c20KPj4gICAgIHRvIGxvYWQgZGlmZmVyZW50IGJpbmFy aWVzIGZvciB4ZW4gYm9vdDsKPj4gICAgIEludHJvZHVjZSB4ZW5fbW9kdWxlIHRvIGxvYWQgY29t bW9uIG9yIGN1c3RvbSBtb2R1bGUgZm9yIHhlbiBib290Lgo+PiAgIC0gVGhpcyBYZW4gYm9vdCBz dXBwb3J0IGlzIGEgc2VwYXJhdGVkICBtb2R1bGUgZm9yIGFhcmNoNjQsCj4+ICAgICBidXQgcmV1 c2UgdGhlIGV4aXN0aW5nIGNvZGUgb2YgZGV2aWNldHJlZSBpbiBsaW51eCBtb2R1bGUuCj4+Cj4+ IFNpZ25lZC1vZmYtYnk6IEZ1IFdlaSA8ZnUud2VpQGxpbmFyby5vcmc+Cj4+IC0tLQo+PiAgZ3J1 Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmICAgICAgIHwgICA3ICsKPj4gIGdydWItY29yZS9sb2Fk ZXIvYXJtNjQveGVuX2Jvb3QuYyB8IDY4NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+PiAgMiBmaWxlcyBjaGFuZ2VkLCA2OTIgaW5zZXJ0aW9ucygrKQo+Pgo+PiBkaWZm IC0tZ2l0IGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmIGIvZ3J1Yi1jb3JlL01ha2VmaWxl LmNvcmUuZGVmCj4+IGluZGV4IGE2MTAxZGUuLjc5NmY3ZTkgMTAwNjQ0Cj4+IC0tLSBhL2dydWIt Y29yZS9NYWtlZmlsZS5jb3JlLmRlZgo+PiArKysgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5k ZWYKPj4gQEAgLTE2NDgsNiArMTY0OCwxMyBAQCBtb2R1bGUgPSB7Cj4+ICB9Owo+Pgo+PiAgbW9k dWxlID0gewo+PiArICBuYW1lID0geGVuX2Jvb3Q7Cj4+ICsgIGNvbW1vbiA9IGxpYi9jbWRsaW5l LmM7Cj4+ICsgIGFybTY0ID0gbG9hZGVyL2FybTY0L3hlbl9ib290LmM7Cj4+ICsgIGVuYWJsZSA9 IGFybTY0Owo+PiArfTsKPj4gKwo+PiArbW9kdWxlID0gewo+PiAgICBuYW1lID0gbGludXg7Cj4+ ICAgIHg4NiA9IGxvYWRlci9pMzg2L2xpbnV4LmM7Cj4+ICAgIHhlbiA9IGxvYWRlci9pMzg2L3hl bi5jOwo+PiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2xvYWRlci9hcm02NC94ZW5fYm9vdC5jIGIv Z3J1Yi1jb3JlL2xvYWRlci9hcm02NC94ZW5fYm9vdC5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+IGluZGV4IDAwMDAwMDAuLjMzYTY1ZGQKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9ncnVi LWNvcmUvbG9hZGVyL2FybTY0L3hlbl9ib290LmMKPj4gQEAgLTAsMCArMSw2ODUgQEAKPj4gKy8q Cj4+ICsgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgo+PiArICogIENvcHly aWdodCAoQykgMjAxNCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCj4+ICsgKgo+PiAr ICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQo+PiArICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4+ICsgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKPj4gKyAqICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+PiArICoKPj4gKyAqICBHUlVCIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPj4gKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCj4+ICsgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPj4gKyAqICBhbG9uZyB3aXRoIEdS VUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4+ICsgKi8K Pj4gKwo+PiArI2luY2x1ZGUgPGdydWIvY2FjaGUuaD4KPj4gKyNpbmNsdWRlIDxncnViL2NoYXJz ZXQuaD4KPj4gKyNpbmNsdWRlIDxncnViL2NvbW1hbmQuaD4KPj4gKyNpbmNsdWRlIDxncnViL2Vy ci5oPgo+PiArI2luY2x1ZGUgPGdydWIvZmlsZS5oPgo+PiArI2luY2x1ZGUgPGdydWIvZmR0Lmg+ Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9saW51eC5oPgo+PiArI2luY2x1ZGUgPGdydWIvbGlzdC5oPgo+ PiArI2luY2x1ZGUgPGdydWIvbG9hZGVyLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+Cj4+ ICsjaW5jbHVkZSA8Z3J1Yi9tbS5oPgo+PiArI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KPj4gKyNp bmNsdWRlIDxncnViL2NwdS9saW51eC5oPgo+PiArI2luY2x1ZGUgPGdydWIvZWZpL2VmaS5oPgo+ PiArI2luY2x1ZGUgPGdydWIvZWZpL3BlMzIuaD4gICAvKiByZXF1aXJlZCBieSBzdHJ1Y3QgeGVu X2h5cGVydmlzb3JfaGVhZGVyICovCj4+ICsjaW5jbHVkZSA8Z3J1Yi9pMThuLmg+Cj4+ICsjaW5j bHVkZSA8Z3J1Yi9saWIvY21kbGluZS5oPgo+PiArCj4+ICtHUlVCX01PRF9MSUNFTlNFICgiR1BM djMrIik7Cj4+ICsKPj4gKyNkZWZpbmUgWEVOX0hZUEVSVklTT1JfTkFNRSAgInhlbl9oeXBlcnZp c29yIgo+PiArCj4+ICsjZGVmaW5lIE1PRFVMRV9ERUZBVUxUX0FMSUdOICAoMHgwKQo+PiArI2Rl ZmluZSBNT0RVTEVfSU1BR0VfTUlOX0FMSUdOICBNT0RVTEVfREVGQVVMVF9BTElHTgo+PiArI2Rl ZmluZSBNT0RVTEVfSU5JVFJEX01JTl9BTElHTiAgTU9EVUxFX0RFRkFVTFRfQUxJR04KPj4gKyNk ZWZpbmUgTU9EVUxFX1hTTV9NSU5fQUxJR04gIE1PRFVMRV9ERUZBVUxUX0FMSUdOCj4+ICsjZGVm aW5lIE1PRFVMRV9DVVNUT01fTUlOX0FMSUdOICBNT0RVTEVfREVGQVVMVF9BTElHTgo+PiArCj4+ ICsvKiAjZGVmaW5lIE1PRFVMRV9JTUFHRV9DT01QQVRJQkxFICAieGVuLGxpbnV4LWltYWdlXDB4 ZW4sbW9kdWxlIgo+PiArI2RlZmluZSBNT0RVTEVfSU5JVFJEX0NPTVBBVElCTEUgICJ4ZW4sbGlu dXgtaW1hZ2VcMHhlbixtb2R1bGUiCj4+ICsjZGVmaW5lIE1PRFVMRV9YU01fQ09NUEFUSUJMRSAg Inhlbix4c20tcG9saWN5XDB4ZW4sbW9kdWxlIgo+PiArI2RlZmluZSBNT0RVTEVfQ1VTVE9NX0NP TVBBVElCTEUgICJ4ZW4sbW9kdWxlIiAqLwo+PiArI2RlZmluZSBNT0RVTEVfSU1BR0VfQ09NUEFU SUJMRSAgIm11bHRpYm9vdCxrZXJuZWxcMG11bHRpYm9vdCxtb2R1bGUiCj4+ICsjZGVmaW5lIE1P RFVMRV9JTklUUkRfQ09NUEFUSUJMRSAgIm11bHRpYm9vdCxyYW1kaXNrXDBtdWx0aWJvb3QsbW9k dWxlIgo+PiArI2RlZmluZSBNT0RVTEVfWFNNX0NPTVBBVElCTEUgICJ4ZW4seHNtLXBvbGljeVww bXVsdGlib290LG1vZHVsZSIKPj4gKyNkZWZpbmUgTU9EVUxFX0NVU1RPTV9DT01QQVRJQkxFICAi bXVsdGlib290LG1vZHVsZSIKPj4gKwo+PiArLyogVGhpcyBtYXhpbXVtIHNpemUgaXMgZGVmaW5l ZCBpbiBQb3dlci5vcmcgZVBBUFIgVjEuMQo+PiArICogaHR0cHM6Ly93d3cucG93ZXIub3JnL2Rv Y3VtZW50YXRpb24vZXBhcHItdmVyc2lvbi0xLTEvCj4+ICsgKiAyLjIuMS4xIE5vZGUgTmFtZSBS ZXF1aXJlbWVudHMKPj4gKyAqIG5vZGUtbmFtZUB1bml0LWFkZHJlc3MKPj4gKyAqIDMxICsgMShA KSArIDE2KDY0Yml0IGFkZHJlc3MgaW4gaGV4IGZvcm1hdCkgKyAxKFwwKSA9IDQ5Cj4+ICsgKi8K Pj4gKyNkZWZpbmUgRkRUX05PREVfTkFNRV9NQVhfU0laRSAgKDQ5KQo+PiArCj4+ICsjZGVmaW5l IEFSR19TSElGVChhcmdjLCBhcmd2KSBcCj4+ICsgIGRvIHsgXAo+PiArICAgIChhcmdjKS0tOyBc Cj4+ICsgICAgKGFyZ3YpKys7IFwKPj4gKyAgfSB3aGlsZSAoMCkKPj4gKwo+PiArc3RydWN0IGNv bXBhdF9zdHJpbmdfc3RydWN0Cj4+ICt7Cj4+ICsgIGdydWJfc2l6ZV90IHNpemU7Cj4+ICsgIGNv bnN0IGNoYXIgKmNvbXBhdF9zdHJpbmc7Cj4+ICt9Owo+PiArdHlwZWRlZiBzdHJ1Y3QgY29tcGF0 X3N0cmluZ19zdHJ1Y3QgY29tcGF0X3N0cmluZ19zdHJ1Y3RfdDsKPj4gKyNkZWZpbmUgRkRUX0NP TVBBVElCTEUoeCkgey5zaXplID0gc2l6ZW9mKHgpLCAuY29tcGF0X3N0cmluZyA9ICh4KX0KPj4g Kwo+PiArZW51bSBtb2R1bGVfdHlwZQo+PiArewo+PiArICBNT0RVTEVfSU1BR0UsCj4+ICsgIE1P RFVMRV9JTklUUkQsCj4+ICsgIE1PRFVMRV9YU00sCj4+ICsgIE1PRFVMRV9DVVNUT00KPj4gK307 Cj4+ICt0eXBlZGVmIGVudW0gbW9kdWxlX3R5cGUgbW9kdWxlX3R5cGVfdDsKPj4gKwo+PiArc3Ry dWN0IGZkdF9ub2RlX2luZm8KPj4gK3sKPj4gKyAgbW9kdWxlX3R5cGVfdCB0eXBlOwo+PiArCj4+ ICsgIGNvbnN0IGNoYXIgKmNvbXBhdF9zdHJpbmc7Cj4+ICsgIGdydWJfc2l6ZV90IGNvbXBhdF9z dHJpbmdfc2l6ZTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCB4ZW5faHlwZXJ2aXNvcl9oZWFkZXIK Pj4gK3sKPj4gKyAgc3RydWN0IGdydWJfYXJtNjRfbGludXhfa2VybmVsX2hlYWRlciBlZmlfaGVh ZDsKPj4gKwo+PiArICAvKiBUaGlzIGlzIGFsd2F5cyBQRVwwXDAuICAqLwo+PiArICBncnViX3Vp bnQ4X3Qgc2lnbmF0dXJlW0dSVUJfUEUzMl9TSUdOQVRVUkVfU0laRV07Cj4+ICsgIC8qIFRoZSBD T0ZGIGZpbGUgaGVhZGVyLiAgKi8KPj4gKyAgc3RydWN0IGdydWJfcGUzMl9jb2ZmX2hlYWRlciBj b2ZmX2hlYWRlcjsKPj4gKyAgLyogVGhlIE9wdGlvbmFsIGhlYWRlci4gICovCj4+ICsgIHN0cnVj dCBncnViX3BlNjRfb3B0aW9uYWxfaGVhZGVyIG9wdGlvbmFsX2hlYWRlcjsKPj4gK307Cj4+ICsK Pj4gK3N0cnVjdCB4ZW5fYm9vdF9iaW5hcnkKPj4gK3sKPj4gKyAgc3RydWN0IHhlbl9ib290X2Jp bmFyeSAqbmV4dDsKPj4gKyAgc3RydWN0IHhlbl9ib290X2JpbmFyeSAqKnByZXY7Cj4+ICsgIGNv bnN0IGNoYXIgKm5hbWU7Cj4+ICsKPj4gKyAgZ3J1Yl9hZGRyX3Qgc3RhcnQ7Cj4+ICsgIGdydWJf c2l6ZV90IHNpemU7Cj4+ICsgIGdydWJfc2l6ZV90IGFsaWduOwo+PiArCj4+ICsgIGNoYXIgKmNt ZGxpbmU7Cj4+ICsgIGludCBjbWRsaW5lX3NpemU7Cj4+ICsKPj4gKyAgc3RydWN0IGZkdF9ub2Rl X2luZm8gbm9kZV9pbmZvOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGdydWJfZGxfdCBteV9tb2Q7 Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgeGVuX2Jvb3RfYmluYXJ5ICp4ZW5faHlwZXJ2aXNvcjsK Pj4gK3N0YXRpYyBzdHJ1Y3QgeGVuX2Jvb3RfYmluYXJ5ICptb2R1bGVfaGVhZDsKPj4gK3N0YXRp YyBjb25zdCBncnViX3NpemVfdCBtb2R1bGVfZGVmYXVsdF9hbGlnbltdID0gewo+PiArICBNT0RV TEVfSU1BR0VfTUlOX0FMSUdOLAo+PiArICBNT0RVTEVfSU5JVFJEX01JTl9BTElHTiwKPj4gKyAg TU9EVUxFX1hTTV9NSU5fQUxJR04sCj4+ICsgIE1PRFVMRV9DVVNUT01fTUlOX0FMSUdOCj4+ICt9 Owo+PiArCj4+ICtzdGF0aWMgdm9pZCAqeGVuX2Jvb3RfZmR0Owo+PiArc3RhdGljIGNvbnN0IGNv bXBhdF9zdHJpbmdfc3RydWN0X3QgZGVmYXVsdF9jb21wYXRfc3RyaW5nW10gPSB7Cj4+ICsgIEZE VF9DT01QQVRJQkxFIChNT0RVTEVfSU1BR0VfQ09NUEFUSUJMRSksCj4+ICsgIEZEVF9DT01QQVRJ QkxFIChNT0RVTEVfSU5JVFJEX0NPTVBBVElCTEUpLAo+PiArICBGRFRfQ09NUEFUSUJMRSAoTU9E VUxFX1hTTV9DT01QQVRJQkxFKSwKPj4gKyAgRkRUX0NPTVBBVElCTEUgKE1PRFVMRV9DVVNUT01f Q09NUEFUSUJMRSkKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBfX2lubGluZSBncnViX2FkZHJfdAo+ PiAreGVuX2Jvb3RfYWRkcmVzc19hbGlnbiAoZ3J1Yl9hZGRyX3Qgc3RhcnQsIGdydWJfc2l6ZV90 IGFsaWduKQo+PiArewo+PiArICByZXR1cm4gKGFsaWduID8gKEFMSUdOX1VQIChzdGFydCwgYWxp Z24pKSA6IHN0YXJ0KTsKPj4gK30KPj4gKwo+PiArLyogUGFyc2UgdGhlIG9wdGlvbiBvZiB4ZW5f bW9kdWxlIGNvbW1hbmQuIEZvciBub3csIHdlIHN1cHBvcnQKPj4gKyAgICgxKSAtLXR5cGUgPHRo ZSBjb21wYXRpYmxlIHN0cmVhbT4KPj4gKyAgIFdlIGFsc28gc2V0IHVwIHRoZSB0eXBlIG9mIG1v ZHVsZSBpbiB0aGlzIGZ1bmN0aW9uLgo+PiArICAgSWYgdGhlcmUgYXJlIHNvbWUgIi0tdHlwZSIg b3B0aW9ucyBpbiB0aGUgY29tbWFuZCBsaW5lLAo+PiArICAgd2UgbWFrZSBhIGN1c3RvbSBjb21w YXRpYmxlIHN0cmVhbSBpbiB0aGlzIGZ1bmN0aW9uLiAqLwo+PiArc3RhdGljIGdydWJfZXJyX3QK Pj4gK3NldF9tb2R1bGVfdHlwZSAoZ3J1Yl9jb21tYW5kX3QgY21kLCBzdHJ1Y3QgeGVuX2Jvb3Rf YmluYXJ5ICptb2R1bGUsCj4+ICsgICAgICAgICAgICAgIGludCBhcmdjLCBjaGFyICphcmd2W10s IGludCAqZmlsZV9uYW1lX2luZGV4KQo+PiArewo+PiArICBjaGFyICoqY29tcGF0X3N0cmluZ190 ZW1wX2FycmF5Owo+PiArICBncnViX3NpemVfdCB0b3RhbF9zaXplID0gMDsKPj4gKyAgaW50IG51 bV90eXBlcyA9IDAsIGk7Cj4+ICsgIGNoYXIgKnRlbXAgPSBOVUxMOwo+PiArCj4+ICsgICpmaWxl X25hbWVfaW5kZXggPSAwOwo+PiArCj4+ICsgIGlmICghZ3J1Yl9zdHJjbXAgKGNtZC0+bmFtZSwg Inhlbl9saW51eCIpKQo+PiArICAgIG1vZHVsZS0+bm9kZV9pbmZvLnR5cGUgPSBNT0RVTEVfSU1B R0U7Cj4+ICsgIGVsc2UgaWYgKCFncnViX3N0cmNtcCAoY21kLT5uYW1lLCAieGVuX2luaXRyZCIp KQo+PiArICAgIG1vZHVsZS0+bm9kZV9pbmZvLnR5cGUgPSBNT0RVTEVfSU5JVFJEOwo+PiArICBl bHNlIGlmICghZ3J1Yl9zdHJjbXAgKGNtZC0+bmFtZSwgInhlbl94c20iKSkKPj4gKyAgICBtb2R1 bGUtPm5vZGVfaW5mby50eXBlID0gTU9EVUxFX1hTTTsKPj4gKyAgZWxzZSBpZiAoIWdydWJfc3Ry Y21wIChjbWQtPm5hbWUsICJ4ZW5fbW9kdWxlIikpCj4+ICsgICAgbW9kdWxlLT5ub2RlX2luZm8u dHlwZSA9IE1PRFVMRV9DVVNUT007Cj4+ICsKPj4gKyAgLyogaWYgdGhlcmUgYXJlIHNvbWUgb3B0 aW9ucyB3ZSBuZWVkIHRvIHByb2Nlc3MuICovCj4+ICsgIGlmIChtb2R1bGUtPm5vZGVfaW5mby50 eXBlID09IE1PRFVMRV9DVVNUT00pCj4+ICsgICAgewo+PiArICAgICAgY29tcGF0X3N0cmluZ190 ZW1wX2FycmF5ID0KPj4gKyAgICAgKGNoYXIgKiopIGdydWJfemFsbG9jIChzaXplb2YgKGNoYXIg KikgKiBhcmdjKTsKPj4gKyAgICAgIGlmICghY29tcGF0X3N0cmluZ190ZW1wX2FycmF5KQo+PiAr ICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKPj4gKyAgICAgIC8qIHRoZSBtb2R1bGUgdHlwZSBpcyBz ZXQgYnkgIi0tdHlwZSIoTU9EVUxFX0NVU1RPTSkgKi8KPj4gKyAgICAgIHdoaWxlIChhcmdjID4g MiAmJiAhZ3J1Yl9zdHJjbXAgKGFyZ3ZbMF0sICItLXR5cGUiKSkKPj4gKyAgICAgewo+PiArICAg ICAgIG1vZHVsZS0+bm9kZV9pbmZvLnR5cGUgPSBNT0RVTEVfQ1VTVE9NOwo+PiArICAgICAgIEFS R19TSElGVCAoYXJnYywgYXJndik7Cj4+ICsgICAgICAgdG90YWxfc2l6ZSArPSBncnViX3N0cmxl biAoYXJndlswXSkgKyAxOwo+PiArICAgICAgIGNvbXBhdF9zdHJpbmdfdGVtcF9hcnJheVtudW1f dHlwZXMrK10gPSBhcmd2WzBdOwo+PiArICAgICAgIEFSR19TSElGVCAoYXJnYywgYXJndik7Cj4+ ICsgICAgICAgKCpmaWxlX25hbWVfaW5kZXgpICs9IDI7Cj4+ICsgICAgIH0KPj4gKwo+PiArICAg ICAgaWYgKHRvdGFsX3NpemUpCj4+ICsgICAgIHsKPj4gKyAgICAgICBtb2R1bGUtPm5vZGVfaW5m by5jb21wYXRfc3RyaW5nID0gdGVtcCA9Cj4+ICsgICAgICAgICAoY2hhciAqKSBncnViX3phbGxv YyAodG90YWxfc2l6ZSk7Cj4+ICsgICAgICAgaWYgKCF0ZW1wKQo+PiArICAgICAgICAgewo+PiAr ICAgICAgICAgICBncnViX2ZyZWUgKGNvbXBhdF9zdHJpbmdfdGVtcF9hcnJheSk7Cj4+ICsgICAg ICAgICAgIHJldHVybiBncnViX2Vycm5vOwo+PiArICAgICAgICAgfQo+PiArCj4+ICsgICAgICAg bW9kdWxlLT5ub2RlX2luZm8uY29tcGF0X3N0cmluZ19zaXplID0gdG90YWxfc2l6ZTsKPj4gKyAg ICAgICBmb3IgKGkgPSAwOyBudW1fdHlwZXMgPiAwOyBudW1fdHlwZXMtLSwgaSsrLCB0ZW1wKysp Cj4+ICsgICAgICAgICB7Cj4+ICsgICAgICAgICAgIGdydWJfc3RyY3B5ICh0ZW1wLCBjb21wYXRf c3RyaW5nX3RlbXBfYXJyYXlbaV0pOwo+PiArICAgICAgICAgICB0ZW1wICs9IGdydWJfc3RybGVu IChjb21wYXRfc3RyaW5nX3RlbXBfYXJyYXlbaV0pOwo+PiArICAgICAgICAgfQo+PiArICAgICB9 Cj4+ICsgICAgICBlbHNlCj4+ICsgICAgIHsKPj4gKyAgICAgICBtb2R1bGUtPm5vZGVfaW5mby5j b21wYXRfc3RyaW5nID0KPj4gKyAgICAgICAgIGRlZmF1bHRfY29tcGF0X3N0cmluZ1tNT0RVTEVf Q1VTVE9NXS5jb21wYXRfc3RyaW5nOwo+PiArICAgICAgIG1vZHVsZS0+bm9kZV9pbmZvLmNvbXBh dF9zdHJpbmdfc2l6ZSA9Cj4+ICsgICAgICAgICBkZWZhdWx0X2NvbXBhdF9zdHJpbmdbTU9EVUxF X0NVU1RPTV0uc2l6ZTsKPj4gKyAgICAgfQo+PiArCj4+ICsgICAgICBncnViX2ZyZWUgKGNvbXBh dF9zdHJpbmdfdGVtcF9hcnJheSk7Cj4+ICsgICAgfQo+PiArCj4+ICsgIHJldHVybiBHUlVCX0VS Ul9OT05FOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArcHJlcGFyZV94ZW5f aHlwZXJ2aXNvcl9wYXJhbXMgKHZvaWQpCj4+ICt7Cj4+ICsgIGludCBjaG9zZW5fbm9kZSA9IDA7 Cj4+ICsgIGludCByZXR2YWw7Cj4+ICsKPj4gKyAgeGVuX2Jvb3RfZmR0ID0gZ3J1Yl9saW51eF9n ZXRfZmR0ICgpOwo+PiArICBpZiAoIXhlbl9ib290X2ZkdCkKPj4gKyAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfSU8sICJmYWlsZWQgdG8gZ2V0IEZEVCIpOwo+PiArCj4+ICsgIGNob3Nl bl9ub2RlID0gZ3J1Yl9mZHRfZmluZF9zdWJub2RlICh4ZW5fYm9vdF9mZHQsIDAsICJjaG9zZW4i KTsKPj4gKyAgaWYgKGNob3Nlbl9ub2RlIDwgMCkKPj4gKyAgICBjaG9zZW5fbm9kZSA9IGdydWJf ZmR0X2FkZF9zdWJub2RlICh4ZW5fYm9vdF9mZHQsIDAsICJjaG9zZW4iKTsKPj4gKyAgaWYgKGNo b3Nlbl9ub2RlIDwgMSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfSU8sICJm YWlsZWQgdG8gZ2V0IGNob3NlbiBub2RlIGluIEZEVCIpOwo+PiArCj4+ICsgIGdydWJfZHByaW50 ZiAoInhlbl9sb2FkZXIiLAo+PiArICAgICAgICAgICAgICJYZW4gSHlwZXJ2aXNvciBjbWRsaW5l IDogJXMgQCAlcCBzaXplOiVkXG4iLAo+PiArICAgICAgICAgICAgIHhlbl9oeXBlcnZpc29yLT5j bWRsaW5lLCB4ZW5faHlwZXJ2aXNvci0+Y21kbGluZSwKPj4gKyAgICAgICAgICAgICB4ZW5faHlw ZXJ2aXNvci0+Y21kbGluZV9zaXplKTsKPj4gKwo+PiArICByZXR2YWwgPSBncnViX2ZkdF9zZXRf cHJvcCAoeGVuX2Jvb3RfZmR0LCBjaG9zZW5fbm9kZSwgImJvb3RhcmdzIiwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHhlbl9oeXBlcnZpc29yLT5jbWRsaW5lLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgeGVuX2h5cGVydmlzb3ItPmNtZGxpbmVfc2l6ZSk7Cj4+ICsgIGlm IChyZXR2YWwpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0lPLCAiZmFpbGVk IHRvIGluc3RhbGwvdXBkYXRlIEZEVCIpOwo+PiArCj4+ICsgIHJldHVybiBHUlVCX0VSUl9OT05F Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArcHJlcGFyZV94ZW5fbW9kdWxl X3BhcmFtcyAoc3RydWN0IHhlbl9ib290X2JpbmFyeSAqbW9kdWxlKQo+PiArewo+PiArICBpbnQg cmV0dmFsLCBjaG9zZW5fbm9kZSA9IDAsIG1vZHVsZV9ub2RlID0gMDsKPj4gKyAgY2hhciBtb2R1 bGVfbmFtZVtGRFRfTk9ERV9OQU1FX01BWF9TSVpFXTsKPj4gKwo+PiArICByZXR2YWwgPSBncnVi X3NucHJpbnRmIChtb2R1bGVfbmFtZSwgRkRUX05PREVfTkFNRV9NQVhfU0laRSwgIm1vZHVsZUAl bHgiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICB4ZW5fYm9vdF9hZGRyZXNzX2FsaWduICht b2R1bGUtPnN0YXJ0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtb2R1bGUtPmFsaWduKSk7Cj4+ICsgIGdydWJfZHByaW50ZiAoInhlbl9sb2FkZXIi LCAiTW9kdWxlIG5vZGUgbmFtZSAlcyBcbiIsIG1vZHVsZV9uYW1lKTsKPj4gKwo+PiArICBpZiAo cmV0dmFsIDwgKGludCkgc2l6ZW9mICgibW9kdWxlQCIpKQo+PiArICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9JTywgTl8oImZhaWxlZCB0byBnZXQgRkRUIikpOwo+PiArCj4+ICsgIGNo b3Nlbl9ub2RlID0gZ3J1Yl9mZHRfZmluZF9zdWJub2RlICh4ZW5fYm9vdF9mZHQsIDAsICJjaG9z ZW4iKTsKPj4gKyAgaWYgKGNob3Nlbl9ub2RlIDwgMCkKPj4gKyAgICBjaG9zZW5fbm9kZSA9IGdy dWJfZmR0X2FkZF9zdWJub2RlICh4ZW5fYm9vdF9mZHQsIDAsICJjaG9zZW4iKTsKPj4gKyAgaWYg KGNob3Nlbl9ub2RlIDwgMSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfSU8s ICJmYWlsZWQgdG8gZ2V0IGNob3NlbiBub2RlIGluIEZEVCIpOwo+PiArCj4+ICsgIG1vZHVsZV9u b2RlID0KPj4gKyAgICBncnViX2ZkdF9maW5kX3N1Ym5vZGUgKHhlbl9ib290X2ZkdCwgY2hvc2Vu X25vZGUsIG1vZHVsZV9uYW1lKTsKPj4gKyAgaWYgKG1vZHVsZV9ub2RlIDwgMCkKPj4gKyAgICBt b2R1bGVfbm9kZSA9Cj4+ICsgICAgICBncnViX2ZkdF9hZGRfc3Vibm9kZSAoeGVuX2Jvb3RfZmR0 LCBjaG9zZW5fbm9kZSwgbW9kdWxlX25hbWUpOwo+PiArCj4+ICsgIHJldHZhbCA9IGdydWJfZmR0 X3NldF9wcm9wICh4ZW5fYm9vdF9mZHQsIG1vZHVsZV9ub2RlLCAiY29tcGF0aWJsZSIsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUtPm5vZGVfaW5mby5jb21wYXRfc3RyaW5n LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdydWJfdWludDMyX3QpIG1vZHVsZS0+ Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlX2luZm8uY29tcGF0X3N0cmluZ19z aXplKTsKPj4gKyAgaWYgKHJldHZhbCkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfSU8sIE5fKCJmYWlsZWQgdG8gdXBkYXRlIEZEVCIpKTsKPj4gKwo+PiArICBncnViX2Rwcmlu dGYgKCJ4ZW5fbG9hZGVyIiwgIk1vZHVsZSAlcyBjb21wYXRpYmxlID0gJXMgc2l6ZSA9IDB4JWx4 XG4iLAo+PiArICAgICAgICAgICAgIG1vZHVsZS0+bmFtZSwgbW9kdWxlLT5ub2RlX2luZm8uY29t cGF0X3N0cmluZywKPj4gKyAgICAgICAgICAgICBtb2R1bGUtPm5vZGVfaW5mby5jb21wYXRfc3Ry aW5nX3NpemUpOwo+PiArCj4+ICsgIHJldHZhbCA9IGdydWJfZmR0X3NldF9yZWc2NCAoeGVuX2Jv b3RfZmR0LCBtb2R1bGVfbm9kZSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZW5f Ym9vdF9hZGRyZXNzX2FsaWduIChtb2R1bGUtPnN0YXJ0LAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS0+YWxpZ24pLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS0+c2l6ZSk7Cj4+ICsgIGlmIChyZXR2YWwp Cj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0lPLCBOXygiZmFpbGVkIHRvIHVw ZGF0ZSBGRFQiKSk7Cj4+ICsKPj4gKyAgaWYgKG1vZHVsZS0+Y21kbGluZSAmJiBtb2R1bGUtPmNt ZGxpbmVfc2l6ZSA+IDApCj4+ICsgICAgewo+PiArICAgICAgZ3J1Yl9kcHJpbnRmICgieGVuX2xv YWRlciIsCj4+ICsgICAgICAgICAgICAgICAgICJNb2R1bGUgJXMgY21kbGluZSA6ICVzIEAgJXAg c2l6ZTolZFxuIiwgbW9kdWxlLT5uYW1lLAo+PiArICAgICAgICAgICAgICAgICBtb2R1bGUtPmNt ZGxpbmUsIG1vZHVsZS0+Y21kbGluZSwgbW9kdWxlLT5jbWRsaW5lX3NpemUpOwo+PiArCj4+ICsg ICAgICByZXR2YWwgPSBncnViX2ZkdF9zZXRfcHJvcCAoeGVuX2Jvb3RfZmR0LCBtb2R1bGVfbm9k ZSwgImJvb3RhcmdzIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUt PmNtZGxpbmUsIG1vZHVsZS0+Y21kbGluZV9zaXplICsgMSk7Cj4+ICsgICAgICBpZiAocmV0dmFs KQo+PiArICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfSU8sICJmYWlsZWQgdG8gdXBk YXRlIEZEVCIpOwo+PiArICAgIH0KPj4gKyAgZWxzZQo+PiArICAgIHsKPj4gKyAgICAgIGdydWJf ZHByaW50ZiAoInhlbl9sb2FkZXIiLCAiTW9kdWxlICVzIGhhcyBub3QgYm9vdGFyZ3MhXG4iLAo+ PiArICAgICAgICAgICAgICAgICBtb2R1bGUtPm5hbWUpOwo+PiArICAgIH0KPj4gKwo+PiArICBy ZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4g K2luc3RhbGxfYWxsX3BhcmFtcyAodm9pZCkKPj4gK3sKPj4gKyAgZ3J1Yl9lZmlfZ3VpZF90IGZk dF9ndWlkID0gR1JVQl9FRklfREVWSUNFX1RSRUVfR1VJRDsKPj4gKyAgZ3J1Yl9lZmlfYm9vdF9z ZXJ2aWNlc190ICpiOwo+PiArICBncnViX2VmaV9zdGF0dXNfdCBzdGF0dXM7Cj4+ICsKPj4gKyAg YiA9IGdydWJfZWZpX3N5c3RlbV90YWJsZS0+Ym9vdF9zZXJ2aWNlczsKPj4gKyAgc3RhdHVzID0g Yi0+aW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlICgmZmR0X2d1aWQsIHhlbl9ib290X2ZkdCk7 Cj4+ICsgIGlmIChzdGF0dXMgIT0gR1JVQl9FRklfU1VDQ0VTUykKPj4gKyAgICByZXR1cm4gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfSU8sICJmYWlsZWQgdG8gaW5zdGFsbCBGRFQiKTsKPj4gKwo+PiAr ICBncnViX2RwcmludGYgKCJ4ZW5fbG9hZGVyIiwKPj4gKyAgICAgICAgICAgICAiSW5zdGFsbGVk L3VwZGF0ZWQgRkRUIGNvbmZpZ3VyYXRpb24gdGFibGUgQCAlcFxuIiwKPj4gKyAgICAgICAgICAg ICB4ZW5fYm9vdF9mZHQpOwo+PiArCj4+ICsgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArY2xlYW5fYWxsX3BhcmFtcyAodm9pZCkKPj4g K3sKPj4gKyAgaWYgKHhlbl9ib290X2ZkdCkKPj4gKyAgICB7Cj4+ICsgICAgICBncnViX2VmaV9m cmVlX3BhZ2VzICgoZ3J1Yl9lZmlfcGh5c2ljYWxfYWRkcmVzc190KSB4ZW5fYm9vdF9mZHQsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICBCWVRFU19UT19QQUdFUyAoZ3J1Yl9mZHRfZ2V0X3Rv dGFsc2l6ZQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4ZW5f Ym9vdF9mZHQpKSk7Cj4+ICsgICAgICB4ZW5fYm9vdF9mZHQgPSBOVUxMOwo+PiArICAgIH0KPj4g Kwo+PiArICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGdydWJf ZXJyX3QKPj4gK2ZpbmFsaXplX3BhcmFtc194ZW5fYm9vdCAodm9pZCkKPj4gK3sKPj4gKyAgc3Ry dWN0IHhlbl9ib290X2JpbmFyeSAqbW9kdWxlOwo+PiArCj4+ICsgIGlmICh4ZW5faHlwZXJ2aXNv cikKPj4gKyAgICB7Cj4+ICsgICAgICBpZiAocHJlcGFyZV94ZW5faHlwZXJ2aXNvcl9wYXJhbXMg KCkgIT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICAgZ290byBmYWlsOwo+PiArICAgIH0KPj4gKyAg ZWxzZQo+PiArICAgIHsKPj4gKyAgICAgIGdydWJfZHByaW50ZiAoInhlbl9sb2FkZXIiLCAiRmFp bGVkIHRvIGdldCBYZW4gSHlwZXJ2aXNvciBpbmZvIVxuIik7Cj4+ICsgICAgICBnb3RvIGZhaWw7 Cj4+ICsgICAgfQo+PiArCj4+ICsgIC8qIFNldCBtb2R1bGUgcGFyYW1zIGluZm8gKi8KPj4gKyAg Rk9SX0xJU1RfRUxFTUVOVFMgKG1vZHVsZSwgbW9kdWxlX2hlYWQpCj4+ICsgIHsKPj4gKyAgICBp ZiAobW9kdWxlLT5zdGFydCAmJiBtb2R1bGUtPnNpemUgPiAwKQo+PiArICAgICAgewo+PiArICAg ICBncnViX2RwcmludGYgKCJ4ZW5fbG9hZGVyIiwgIk1vZHVsZSAlcyBAIDB4JWx4IHNpemU6MHgl bHhcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgbW9kdWxlLT5uYW1lLAo+PiArICAgICAgICAg ICAgICAgICAgIHhlbl9ib290X2FkZHJlc3NfYWxpZ24gKG1vZHVsZS0+c3RhcnQsIG1vZHVsZS0+ YWxpZ24pLAo+PiArICAgICAgICAgICAgICAgICAgIG1vZHVsZS0+c2l6ZSk7Cj4+ICsgICAgIGlm IChwcmVwYXJlX3hlbl9tb2R1bGVfcGFyYW1zIChtb2R1bGUpICE9IEdSVUJfRVJSX05PTkUpCj4+ ICsgICAgICAgZ290byBmYWlsOwo+PiArICAgICAgfQo+PiArICAgIGVsc2UKPj4gKyAgICAgIHsK Pj4gKyAgICAgZ3J1Yl9kcHJpbnRmICgieGVuX2xvYWRlciIsICJNb2R1bGUgaW5mbyBlcnJvcjog JXMhXG4iLCBtb2R1bGUtPm5hbWUpOwo+PiArICAgICBnb3RvIGZhaWw7Cj4+ICsgICAgICB9Cj4+ ICsgIH0KPj4gKwo+PiArICBpZiAoaW5zdGFsbF9hbGxfcGFyYW1zICgpID09IEdSVUJfRVJSX05P TkUpCj4+ICsgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICsKPj4gK2ZhaWw6Cj4+ICsgIGNs ZWFuX2FsbF9wYXJhbXMgKCk7Cj4+ICsKPj4gKyAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X0lPLCAiZmFpbGVkIHRvIGluc3RhbGwvdXBkYXRlIEZEVCIpOwo+PiArfQo+PiArCj4+ICsKPj4g K3N0YXRpYyBncnViX2Vycl90Cj4+ICt4ZW5fYm9vdCAodm9pZCkKPj4gK3sKPj4gKyAgZ3J1Yl9l cnJfdCBlcnIgPSBmaW5hbGl6ZV9wYXJhbXNfeGVuX2Jvb3QgKCk7Cj4+ICsgIGlmIChlcnIpCj4+ ICsgICAgcmV0dXJuIGVycjsKPj4gKwo+PiArICByZXR1cm4gZ3J1Yl9hcm02NF91ZWZpX2Jvb3Rf aW1hZ2UgKHhlbl9oeXBlcnZpc29yLT5zdGFydCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4ZW5faHlwZXJ2aXNvci0+c2l6ZSwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB4ZW5faHlwZXJ2aXNvci0+Y21kbGluZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkCj4+ICtzaW5nbGVfYmluYXJ5X3VubG9hZCAoc3RydWN0IHhlbl9ib290X2JpbmFy eSAqYmluYXJ5KQo+PiArewo+PiArICBpZiAoIWJpbmFyeSkKPj4gKyAgICByZXR1cm47Cj4+ICsK Pj4gKyAgaWYgKGJpbmFyeS0+c3RhcnQgJiYgYmluYXJ5LT5zaXplID4gMCkKPj4gKyAgICB7Cj4+ ICsgICAgICBncnViX2VmaV9mcmVlX3BhZ2VzICgoZ3J1Yl9lZmlfcGh5c2ljYWxfYWRkcmVzc190 KSBiaW5hcnktPnN0YXJ0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgQllURVNfVE9fUEFH RVMgKGJpbmFyeS0+c2l6ZSArIGJpbmFyeS0+YWxpZ24pKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAg aWYgKGJpbmFyeS0+Y21kbGluZSAmJiBiaW5hcnktPmNtZGxpbmVfc2l6ZSA+IDApCj4+ICsgICAg ewo+PiArICAgICAgZ3J1Yl9mcmVlIChiaW5hcnktPmNtZGxpbmUpOwo+PiArICAgICAgZ3J1Yl9k cHJpbnRmICgieGVuX2xvYWRlciIsCj4+ICsgICAgICAgICAgICAgICAgICJNb2R1bGUgJXMgY21k bGluZSBtZW1vcnkgZnJlZSBAICVwIHNpemU6ICVkXG4iLAo+PiArICAgICAgICAgICAgICAgICBi aW5hcnktPm5hbWUsIGJpbmFyeS0+Y21kbGluZSwgYmluYXJ5LT5jbWRsaW5lX3NpemUpOwo+PiAr ICAgIH0KPj4gKwo+PiArICBpZiAoYmluYXJ5LT5ub2RlX2luZm8udHlwZSA9PSBNT0RVTEVfQ1VT VE9NKQo+PiArICAgIGdydWJfZnJlZSAoKHZvaWQgKikgYmluYXJ5LT5ub2RlX2luZm8uY29tcGF0 X3N0cmluZyk7Cj4+ICsKPj4gKyAgaWYgKGdydWJfc3RyY21wIChiaW5hcnktPm5hbWUsIFhFTl9I WVBFUlZJU09SX05BTUUpKQo+PiArICAgIGdydWJfbGlzdF9yZW1vdmUgKEdSVUJfQVNfTElTVCAo YmluYXJ5KSk7Cj4+ICsKPj4gKyAgZ3J1Yl9kcHJpbnRmICgieGVuX2xvYWRlciIsCj4+ICsgICAg ICAgICAgICAgIk1vZHVsZSAlcyBzdHJ1Y3QgbWVtb3J5IGZyZWUgQCAlcCBzaXplOiAweCVseFxu IiwKPj4gKyAgICAgICAgICAgICBiaW5hcnktPm5hbWUsIGJpbmFyeSwgc2l6ZW9mIChiaW5hcnkp KTsKPj4gKyAgZ3J1Yl9mcmVlIChiaW5hcnkpOwo+PiArCj4+ICsgIHJldHVybjsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHZvaWQKPj4gK2FsbF9iaW5hcmllc191bmxvYWQgKHZvaWQpCj4+ICt7Cj4+ ICsgIHN0cnVjdCB4ZW5fYm9vdF9iaW5hcnkgKmJpbmFyeTsKPj4gKwo+PiArICBGT1JfTElTVF9F TEVNRU5UUyAoYmluYXJ5LCBtb2R1bGVfaGVhZCkKPj4gKyAgewo+PiArICAgIHNpbmdsZV9iaW5h cnlfdW5sb2FkIChiaW5hcnkpOwo+PiArICB9Cj4+ICsKPj4gKyAgaWYgKHhlbl9oeXBlcnZpc29y KQo+PiArICAgIHNpbmdsZV9iaW5hcnlfdW5sb2FkICh4ZW5faHlwZXJ2aXNvcik7Cj4+ICsKPj4g KyAgcmV0dXJuOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiAreGVuX3VubG9h ZCAodm9pZCkKPj4gK3sKPj4gKyAgZ3J1Yl9saW51eF9zZXRfbG9hZGVkICgwKTsKPj4gKyAgYWxs X2JpbmFyaWVzX3VubG9hZCAoKTsKPj4gKyAgY2xlYW5fYWxsX3BhcmFtcyAoKTsKPj4gKyAgZ3J1 Yl9kbF91bnJlZiAobXlfbW9kKTsKPj4gKwo+PiArICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4g K30KPj4gKwo+PiArc3RhdGljIHZvaWQKPj4gK3hlbl9ib290X2JpbmFyeV9sb2FkIChzdHJ1Y3Qg eGVuX2Jvb3RfYmluYXJ5ICpiaW5hcnksIGdydWJfZmlsZV90IGZpbGUsCj4+ICsgICAgICAgICAg ICAgICAgICAgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPj4gK3sKPj4gKyAgYmluYXJ5LT5zaXpl ID0gZ3J1Yl9maWxlX3NpemUgKGZpbGUpOwo+PiArICBncnViX2RwcmludGYgKCJ4ZW5fbG9hZGVy IiwgIlhlbl9ib290ICVzIGZpbGUgc2l6ZTogMHglbHhcbiIsCj4+ICsgICAgICAgICAgICAgYmlu YXJ5LT5uYW1lLCBiaW5hcnktPnNpemUpOwo+PiArCj4+ICsgIGJpbmFyeS0+c3RhcnQgPSAoZ3J1 Yl9hZGRyX3QpIGdydWJfZWZpX2FsbG9jYXRlX3BhZ2VzICgwLAo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVTX1RPX1BBR0VTCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGJpbmFyeS0+c2l6ZSArCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJpbmFyeS0+YWxpZ24pKSk7Cj4+ICsgIGlmICghYmluYXJ5LT5z dGFydCkKPj4gKyAgICB7Cj4+ICsgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVN T1JZLCBOXygib3V0IG9mIG1lbW9yeSIpKTsKPj4gKyAgICAgIHJldHVybjsKPj4gKyAgICB9Cj4+ ICsKPj4gKyAgZ3J1Yl9kcHJpbnRmICgieGVuX2xvYWRlciIsICJYZW5fYm9vdCAlcyBudW1wYWdl czogMHglbHhcbiIsCj4+ICsgICAgICAgICAgICAgYmluYXJ5LT5uYW1lLCBCWVRFU19UT19QQUdF UyAoYmluYXJ5LT5zaXplICsgYmluYXJ5LT5hbGlnbikpOwo+PiArCj4+ICsgIGlmIChncnViX2Zp bGVfcmVhZCAoZmlsZSwgKHZvaWQgKikgeGVuX2Jvb3RfYWRkcmVzc19hbGlnbiAoYmluYXJ5LT5z dGFydCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiaW5hcnktPmFsaWduKSwKPj4gKyAgICAgICAgICAgICAgICAgICBiaW5hcnkt PnNpemUpICE9IChncnViX3NzaXplX3QpIGJpbmFyeS0+c2l6ZSkKPj4gKyAgICB7Cj4+ICsgICAg ICBzaW5nbGVfYmluYXJ5X3VubG9hZCAoYmluYXJ5KTsKPj4gKyAgICAgIGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9PUywgTl8oInByZW1hdHVyZSBlbmQgb2YgZmlsZSAlcyIpLCBhcmd2WzBdKTsK Pj4gKyAgICAgIHJldHVybjsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgaWYgKGFyZ2MgPiAxKQo+PiAr ICAgIHsKPj4gKyAgICAgIGJpbmFyeS0+Y21kbGluZV9zaXplID0gZ3J1Yl9sb2FkZXJfY21kbGlu ZV9zaXplIChhcmdjIC0gMSwgYXJndiArIDEpOwo+PiArICAgICAgYmluYXJ5LT5jbWRsaW5lID0g Z3J1Yl96YWxsb2MgKGJpbmFyeS0+Y21kbGluZV9zaXplKTsKPj4gKyAgICAgIGlmICghYmluYXJ5 LT5jbWRsaW5lKQo+PiArICAgICB7Cj4+ICsgICAgICAgc2luZ2xlX2JpbmFyeV91bmxvYWQgKGJp bmFyeSk7Cj4+ICsgICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwgTl8o Im91dCBvZiBtZW1vcnkiKSk7Cj4+ICsgICAgICAgcmV0dXJuOwo+PiArICAgICB9Cj4+ICsgICAg ICBncnViX2NyZWF0ZV9sb2FkZXJfY21kbGluZSAoYXJnYyAtIDEsIGFyZ3YgKyAxLCBiaW5hcnkt PmNtZGxpbmUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5LT5jbWRs aW5lX3NpemUpOwo+PiArICAgICAgZ3J1Yl9kcHJpbnRmICgieGVuX2xvYWRlciIsCj4+ICsgICAg ICAgICAgICAgICAgICJYZW5fYm9vdCAlcyBjbWRsaW5lIEAgJXAgJXMsIHNpemU6ICVkXG4iLCBi aW5hcnktPm5hbWUsCj4+ICsgICAgICAgICAgICAgICAgIGJpbmFyeS0+Y21kbGluZSwgYmluYXJ5 LT5jbWRsaW5lLCBiaW5hcnktPmNtZGxpbmVfc2l6ZSk7Cj4+ICsgICAgfQo+PiArICBlbHNlCj4+ ICsgICAgewo+PiArICAgICAgYmluYXJ5LT5jbWRsaW5lX3NpemUgPSAwOwo+PiArICAgICAgYmlu YXJ5LT5jbWRsaW5lID0gTlVMTDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgZ3J1Yl9lcnJubyA9IEdS VUJfRVJSX05PTkU7Cj4+ICsgIHJldHVybjsKPj4gK30KPj4gKwo+PiArc3RhdGljIGdydWJfZXJy X3QKPj4gK2dydWJfY21kX3hlbl9tb2R1bGUgKGdydWJfY29tbWFuZF90IGNtZCwgaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKPj4gK3sKPj4gKwo+PiArICBzdHJ1Y3QgeGVuX2Jvb3RfYmluYXJ5ICpt b2R1bGUgPSBOVUxMOwo+PiArICBpbnQgZmlsZV9uYW1lX2luZGV4ID0gMDsKPj4gKyAgZ3J1Yl9m aWxlX3QgZmlsZSA9IDA7Cj4+ICsKPj4gKyAgaWYgKCFhcmdjKQo+PiArICAgIHsKPj4gKyAgICAg IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8oImZpbGVuYW1lIGV4cGVjdGVk IikpOwo+PiArICAgICAgZ290byBmYWlsOwo+PiArICAgIH0KPj4gKwo+PiArICBpZiAoIWdydWJf bGludXhfZ2V0X2xvYWRlZCAoKSkKPj4gKyAgICB7Cj4+ICsgICAgICBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfQVJHVU1FTlQsCj4+ICsgICAgICAgICAgICAgICBOXygieW91IG5lZWQgdG8gbG9h ZCB0aGUgWGVuIEh5cGVydmlzb3IgZmlyc3QiKSk7Cj4+ICsgICAgICBnb3RvIGZhaWw7Cj4+ICsg ICAgfQo+PiArCj4+ICsgIG1vZHVsZSA9Cj4+ICsgICAgKHN0cnVjdCB4ZW5fYm9vdF9iaW5hcnkg KikgZ3J1Yl96YWxsb2MgKHNpemVvZiAoc3RydWN0IHhlbl9ib290X2JpbmFyeSkpOwo+PiArICBp ZiAoIW1vZHVsZSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKPj4gKwo+PiArICAvKiBwcm9j ZXNzIGFsbCB0aGUgb3B0aW9ucyBhbmQgZ2V0IG1vZHVsZSB0eXBlICovCj4+ICsgIGlmIChzZXRf bW9kdWxlX3R5cGUgKGNtZCwgbW9kdWxlLCBhcmdjLCBhcmd2LCAmZmlsZV9uYW1lX2luZGV4KSAh PQo+PiArICAgICAgR1JVQl9FUlJfTk9ORSkKPj4gKyAgICBnb3RvIGZhaWw7Cj4+ICsgIHN3aXRj aCAobW9kdWxlLT5ub2RlX2luZm8udHlwZSkKPj4gKyAgICB7Cj4+ICsgICAgY2FzZSBNT0RVTEVf SU1BR0U6Cj4+ICsgICAgY2FzZSBNT0RVTEVfSU5JVFJEOgo+PiArICAgIGNhc2UgTU9EVUxFX1hT TToKPj4gKyAgICAgIG1vZHVsZS0+bm9kZV9pbmZvLmNvbXBhdF9zdHJpbmcgPQo+PiArICAgICBk ZWZhdWx0X2NvbXBhdF9zdHJpbmdbbW9kdWxlLT5ub2RlX2luZm8udHlwZV0uY29tcGF0X3N0cmlu ZzsKPj4gKyAgICAgIG1vZHVsZS0+bm9kZV9pbmZvLmNvbXBhdF9zdHJpbmdfc2l6ZSA9Cj4+ICsg ICAgIGRlZmF1bHRfY29tcGF0X3N0cmluZ1ttb2R1bGUtPm5vZGVfaW5mby50eXBlXS5zaXplOwo+ PiArICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICBjYXNlIE1PRFVMRV9DVVNUT006Cj4+ICsgICAg ICAvKiB3ZSBoYXZlIHNldCB0aGUgbm9kZV9pbmZvIGluIHNldF9tb2R1bGVfdHlwZSAqLwo+PiAr ICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICBkZWZhdWx0Ogo+PiArICAgICAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8oImludmFsaWQgYXJndW1lbnQiKSk7Cj4+ ICsgICAgfQo+PiArICBtb2R1bGUtPm5hbWUgPSBtb2R1bGUtPm5vZGVfaW5mby5jb21wYXRfc3Ry aW5nOwo+PiArICBtb2R1bGUtPmFsaWduID0gbW9kdWxlX2RlZmF1bHRfYWxpZ25bbW9kdWxlLT5u b2RlX2luZm8udHlwZV07Cj4+ICsKPj4gKyAgZ3J1Yl9kcHJpbnRmICgieGVuX2xvYWRlciIsICJJ bml0ICVzIG1vZHVsZSBhbmQgbm9kZSBpbmZvOlxuIgo+PiArICAgICAgICAgICAgICJjb21wYXRp YmxlICVzXG5jb21wYXRfc3RyaW5nX3NpemUgMHglbHhcbiIsCj4+ICsgICAgICAgICAgICAgbW9k dWxlLT5uYW1lLCBtb2R1bGUtPm5vZGVfaW5mby5jb21wYXRfc3RyaW5nLAo+PiArICAgICAgICAg ICAgIG1vZHVsZS0+bm9kZV9pbmZvLmNvbXBhdF9zdHJpbmdfc2l6ZSk7Cj4+ICsKPj4gKyAgZmls ZSA9IGdydWJfZmlsZV9vcGVuIChhcmd2W2ZpbGVfbmFtZV9pbmRleF0pOwo+PiArICBpZiAoIWZp bGUpCj4+ICsgICAgZ290byBmYWlsOwo+PiArCj4+ICsgIHhlbl9ib290X2JpbmFyeV9sb2FkICht b2R1bGUsIGZpbGUsIGFyZ2MgLSBmaWxlX25hbWVfaW5kZXgsCj4+ICsgICAgICAgICAgICAgICAg ICAgICBhcmd2ICsgZmlsZV9uYW1lX2luZGV4KTsKPj4gKyAgaWYgKGdydWJfZXJybm8gPT0gR1JV Ql9FUlJfTk9ORSkKPj4gKyAgICBncnViX2xpc3RfcHVzaCAoR1JVQl9BU19MSVNUX1AgKCZtb2R1 bGVfaGVhZCksIEdSVUJfQVNfTElTVCAobW9kdWxlKSk7Cj4+ICsKPj4gK2ZhaWw6Cj4+ICsgIGlm IChmaWxlKQo+PiArICAgIGdydWJfZmlsZV9jbG9zZSAoZmlsZSk7Cj4+ICsgIGlmIChncnViX2Vy cm5vICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgc2luZ2xlX2JpbmFyeV91bmxvYWQgKG1vZHVs ZSk7Cj4+ICsKPj4gKyAgcmV0dXJuIGdydWJfZXJybm87Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBn cnViX2Vycl90Cj4+ICtncnViX2NtZF94ZW5faHlwZXJ2aXNvciAoZ3J1Yl9jb21tYW5kX3QgY21k IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICBpbnQg YXJnYywgY2hhciAqYXJndltdKQo+PiArewo+PiArICBzdHJ1Y3QgeGVuX2h5cGVydmlzb3JfaGVh ZGVyIHNoOwo+PiArICBncnViX2ZpbGVfdCBmaWxlID0gTlVMTDsKPj4gKwo+PiArICBncnViX2Rs X3JlZiAobXlfbW9kKTsKPj4gKwo+PiArICBpZiAoIWFyZ2MpCj4+ICsgICAgewo+PiArICAgICAg Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCBOXygiZmlsZW5hbWUgZXhwZWN0ZWQi KSk7Cj4+ICsgICAgICBnb3RvIGZhaWw7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGZpbGUgPSBncnVi X2ZpbGVfb3BlbiAoYXJndlswXSk7Cj4+ICsgIGlmICghZmlsZSkKPj4gKyAgICBnb3RvIGZhaWw7 Cj4+ICsKPj4gKyAgaWYgKGdydWJfZmlsZV9yZWFkIChmaWxlLCAmc2gsIHNpemVvZiAoc2gpKSAh PSAobG9uZykgc2l6ZW9mIChzaCkpCj4+ICsgICAgZ290byBmYWlsOwo+PiArICBpZiAoZ3J1Yl9h cm02NF91ZWZpX2NoZWNrX2ltYWdlCj4+ICsgICAgICAoKHN0cnVjdCBncnViX2FybTY0X2xpbnV4 X2tlcm5lbF9oZWFkZXIgKikgJnNoKSAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAgIGdvdG8gZmFp bDsKPj4gKyAgZ3J1Yl9maWxlX3NlZWsgKGZpbGUsIDApOwo+PiArCj4+ICsgIC8qIGlmIGFub3Ro ZXIgbW9kdWxlIGhhcyBjYWxsZWQgZ3J1Yl9sb2FkZXJfc2V0LAo+PiArICAgICB3ZSBuZWVkIHRv IG1ha2Ugc3VyZSB0aGF0IGFub3RoZXIgbW9kdWxlIGlzIHVubG9hZGVkIHByb3Blcmx5ICovCj4+ ICsgIGdydWJfbG9hZGVyX3Vuc2V0ICgpOwo+PiArCj4+ICsgIHhlbl9oeXBlcnZpc29yID0KPj4g KyAgICAoc3RydWN0IHhlbl9ib290X2JpbmFyeSAqKSBncnViX3phbGxvYyAoc2l6ZW9mIChzdHJ1 Y3QgeGVuX2Jvb3RfYmluYXJ5KSk7Cj4+ICsgIGlmICgheGVuX2h5cGVydmlzb3IpCj4+ICsgICAg cmV0dXJuIGdydWJfZXJybm87Cj4+ICsKPj4gKyAgeGVuX2h5cGVydmlzb3ItPm5hbWUgPSBYRU5f SFlQRVJWSVNPUl9OQU1FOwo+PiArICB4ZW5faHlwZXJ2aXNvci0+YWxpZ24gPSAoZ3J1Yl9zaXpl X3QpIHNoLm9wdGlvbmFsX2hlYWRlci5zZWN0aW9uX2FsaWdubWVudDsKPj4gKwo+PiArICB4ZW5f Ym9vdF9iaW5hcnlfbG9hZCAoeGVuX2h5cGVydmlzb3IsIGZpbGUsIGFyZ2MsIGFyZ3YpOwo+PiAr ICBpZiAoZ3J1Yl9lcnJubyA9PSBHUlVCX0VSUl9OT05FKQo+PiArICAgIHsKPj4gKyAgICAgIGdy dWJfbG9hZGVyX3NldCAoeGVuX2Jvb3QsIHhlbl91bmxvYWQsIDApOwo+PiArICAgICAgZ3J1Yl9s aW51eF9zZXRfbG9hZGVkICgxKTsKPj4gKyAgICB9Cj4+ICsKPj4gK2ZhaWw6Cj4+ICsgIGlmIChm aWxlKQo+PiArICAgIGdydWJfZmlsZV9jbG9zZSAoZmlsZSk7Cj4+ICsgIGlmIChncnViX2Vycm5v ICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgewo+PiArICAgICAgZ3J1Yl9saW51eF9zZXRfbG9h ZGVkICgwKTsKPj4gKyAgICAgIGFsbF9iaW5hcmllc191bmxvYWQgKCk7Cj4+ICsgICAgICBncnVi X2RsX3VucmVmIChteV9tb2QpOwo+PiArICAgIH0KPj4gKwo+PiArICByZXR1cm4gZ3J1Yl9lcnJu bzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGdydWJfY29tbWFuZF90IGNtZF94ZW5faHlwZXJ2aXNv ciwgY21kX3hlbl9tb2R1bGU7Cj4+ICtzdGF0aWMgZ3J1Yl9jb21tYW5kX3QgY21kX3hlbl9saW51 eCwgY21kX3hlbl9pbml0cmQsIGNtZF94ZW5feHNtOwo+PiArCj4+ICtHUlVCX01PRF9JTklUICh4 ZW5fYm9vdCkKPj4gK3sKPj4gKyAgY21kX3hlbl9oeXBlcnZpc29yID0KPj4gKyAgICBncnViX3Jl Z2lzdGVyX2NvbW1hbmQgKCJ4ZW5faHlwZXJ2aXNvciIsIGdydWJfY21kX3hlbl9oeXBlcnZpc29y LCAwLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgTl8oIkxvYWQgYSB4ZW4gaHlwZXJ2aXNv ci4iKSk7Cj4+ICsgIGNtZF94ZW5fbGludXggPQo+PiArICAgIGdydWJfcmVnaXN0ZXJfY29tbWFu ZCAoInhlbl9saW51eCIsIGdydWJfY21kX3hlbl9tb2R1bGUsIDAsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICBOXygiTG9hZCBhIHhlbiBsaW51eCBrZXJuZWwgZm9yIGRvbTAuIikpOwo+PiAr ICBjbWRfeGVuX2luaXRyZCA9Cj4+ICsgICAgZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kICgieGVuX2lu aXRyZCIsIGdydWJfY21kX3hlbl9tb2R1bGUsIDAsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICBOXygiTG9hZCBhIHhlbiBpbml0cmQgZm9yIGRvbTAuIikpOwo+PiArICBjbWRfeGVuX3hzbSA9 Cj4+ICsgICAgZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kICgieGVuX3hzbSIsIGdydWJfY21kX3hlbl9t b2R1bGUsIDAsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBOXygiTG9hZCBhIHhlbiBzZWN1 cml0eSBtb2R1bGUuIikpOwo+PiArICBjbWRfeGVuX21vZHVsZSA9Cj4+ICsgICAgZ3J1Yl9yZWdp c3Rlcl9jb21tYW5kICgieGVuX21vZHVsZSIsIGdydWJfY21kX3hlbl9tb2R1bGUsIDAsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICBOXygiTG9hZCBhIHhlbiBtb2R1bGUuIikpOwo+PiArICBt eV9tb2QgPSBtb2Q7Cj4+ICt9Cj4+ICsKPj4gK0dSVUJfTU9EX0ZJTkkgKHhlbl9ib290KQo+PiAr ewo+PiArICBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21kX3hlbl9oeXBlcnZpc29yKTsKPj4g KyAgZ3J1Yl91bnJlZ2lzdGVyX2NvbW1hbmQgKGNtZF94ZW5fbGludXgpOwo+PiArICBncnViX3Vu cmVnaXN0ZXJfY29tbWFuZCAoY21kX3hlbl9pbml0cmQpOwo+PiArICBncnViX3VucmVnaXN0ZXJf Y29tbWFuZCAoY21kX3hlbl94c20pOwo+PiArICBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21k X3hlbl9tb2R1bGUpOwo+PiArfQo+Pgo+Cj4KCgoKLS0gCkJlc3QgcmVnYXJkcywKCkZ1IFdlaQpT b2Z0d2FyZSBFbmdpbmVlcgpSZWQgSGF0IFNvZnR3YXJlIChCZWlqaW5nKSBDby4sTHRkLlNoYW5n aGFpIEJyYW5jaApQaDogKzg2IDIxIDYxMjIxMzI2KGRpcmVjdCkKUGg6ICs4NiAxODYgMjAyMCA0 Njg0IChtb2JpbGUpClJvb20gMTUxMiwgUmVndXMgT25lIENvcnBvcmF0ZSBBdmVudWUsTGV2ZWwg MTUsCk9uZSBDb3Jwb3JhdGUgQXZlbnVlLDIyMiBIdWJpbiBSb2FkLEh1YW5ncHUgRGlzdHJpY3Qs ClNoYW5naGFpLENoaW5hIDIwMDAyMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBtYWlsaW5nIGxpc3QKR3J1Yi1kZXZlbEBnbnUub3Jn Cmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dydWItZGV2ZWwK