From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v1 08/11] xsplice: Implement support for applying patches Date: Wed, 4 Nov 2015 22:17:39 -0500 Message-ID: <20151105031739.GE3949@x230.dumpdata.com> References: <1446574568-9644-1-git-send-email-ross.lagerwall@citrix.com> <1446574568-9644-8-git-send-email-ross.lagerwall@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1446574568-9644-8-git-send-email-ross.lagerwall@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ross Lagerwall Cc: Kevin Tian , Ian Campbell , Andrew Cooper , xen-devel@lists.xen.org, Jan Beulich , Stefano Stabellini , Jun Nakajima , Aravind Gopalakrishnan , Boris Ostrovsky , Suravee Suthikulpanit List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBOb3YgMDMsIDIwMTUgYXQgMDY6MTY6MDVQTSArMDAwMCwgUm9zcyBMYWdlcndhbGwg d3JvdGU6Cj4gSW1wbGVtZW50IHN1cHBvcnQgZm9yIHRoZSBhcHBseSwgcmV2ZXJ0IGFuZCByZXBs YWNlIGFjdGlvbnMuCj4gCj4gVG8gcGVyZm9ybSBhbmQgYWN0aW9uIG9uIGEgcGF5bG9hZCwgdGhl IGh5cGVyY2FsbCBzZXRzIHVwIGEgZGF0YQo+IHN0cnVjdHVyZSB0byBzY2hlZHVsZSB0aGUgd29y ay4gIEEgaG9vayBpcyBhZGRlZCBpbiBhbGwgdGhlCj4gcmV0dXJuLXRvLWd1ZXN0IHBhdGhzIHRv IGNoZWNrIGZvciB3b3JrIHRvIGRvIGFuZCBleGVjdXRlIGl0IGlmIG5lZWRlZC4KPiBJbiB0aGlz IHdheSwgcGF0Y2hlcyBjYW4gYmUgYXBwbGllZCB3aXRoIGFsbCBDUFVzIGlkbGUgYW5kIHdpdGhv dXQKPiBzdGFja3MuICBUaGUgZmlyc3QgQ1BVIHRvIGRvX3hzcGxpY2UoKSBiZWNvbWVzIHRoZSBt YXN0ZXIgYW5kIHRyaWdnZXJzIGEKPiByZXNjaGVkdWxlIHNvZnRpcnEgdG8gdHJpZ2dlciBhbGwg dGhlIG90aGVyIENQVXMgdG8gZW50ZXIgZG9feHNwbGljZSgpCj4gd2l0aCBubyBzdGFjay4gIE9u Y2UgYWxsIENQVXMgaGF2ZSByZW5kZXp2b3VzZWQsIGFsbCBDUFVzIGRpc2FibGUgSVJRcwo+IGFu ZCBOTUlzIGFyZSBpZ25vcmVkLiBUaGUgc3lzdGVtIGlzIHRoZW4gcXVpc2NpZW50IGFuZCB0aGUg bWFzdGVyCj4gcGVyZm9ybXMgdGhlIGFjdGlvbi4gIEFmdGVyIHRoaXMsIGFsbCBDUFVzIGVuYWJs ZSBJUlFzIGFuZCBOTUlzIGFyZQo+IHJlLWVuYWJsZWQuCj4gCj4gVGhlIGFjdGlvbiB0byBwZXJm b3JtIGlzIG9uZSBvZjoKPiAtIEFQUExZOiBGb3IgZWFjaCBmdW5jdGlvbiBpbiB0aGUgbW9kdWxl LCBzdG9yZSB0aGUgZmlyc3QgNSBieXRlcyBvZiB0aGUKPiAgIG9sZCBmdW5jdGlvbiBhbmQgcmVw bGFjZSBpdCB3aXRoIGEganVtcCB0byB0aGUgbmV3IGZ1bmN0aW9uLgo+IC0gUkVWRVJUOiBDb3B5 IHRoZSBwcmV2aW91c2x5IHN0b3JlZCBieXRlcyBpbnRvIHRoZSBmaXJzdCA1IGJ5dGVzIG9mIHRo ZQo+ICAgb2xkIGZ1bmN0aW9uLgo+IC0gUkVQTEFDRTogUmV2ZXJ0IGVhY2ggYXBwbGllZCBtb2R1 bGUgYW5kIHRoZW4gYXBwbHkgdGhlIG5ldyBtb2R1bGUuCj4gCj4gVG8gcHJldmVudCBhIGRlYWRs b2NrIHdpdGggYW55IG90aGVyIGJhcnJpZXIgaW4gdGhlIHN5c3RlbSwgdGhlIG1hc3Rlcgo+IHdp bGwgd2FpdCBmb3IgdXAgdG8gMzBtcyBiZWZvcmUgdGltaW5nIG91dC4gIEkndmUgdGFrZW4gc29t ZQo+IG1lYXN1cmVtZW50cyBhbmQgZm91bmQgdGhlIHBhdGNoIGFwcGxpY2F0aW9uIHRvIHRha2Ug YWJvdXQgMTAwIM68cyBvbiBhCj4gNzIgQ1BVIHN5c3RlbSwgd2hldGhlciBpZGxlIG9yIGZ1bGx5 IGxvYWRlZC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBSb3NzIExhZ2Vyd2FsbCA8cm9zcy5sYWdlcndh bGxAY2l0cml4LmNvbT4KPiAtLS0KPiAgeGVuL2FyY2gvYXJtL3hzcGxpY2UuYyAgICAgIHwgICA4 ICsrCj4gIHhlbi9hcmNoL3g4Ni9kb21haW4uYyAgICAgICB8ICAgNCArCj4gIHhlbi9hcmNoL3g4 Ni9odm0vc3ZtL3N2bS5jICB8ICAgMiArCj4gIHhlbi9hcmNoL3g4Ni9odm0vdm14L3ZtY3MuYyB8 ICAgMiArCj4gIHhlbi9hcmNoL3g4Ni94c3BsaWNlLmMgICAgICB8ICAxOSArKysrCj4gIHhlbi9j b21tb24veHNwbGljZS5jICAgICAgICB8IDI2NCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLQo+ICB4ZW4vaW5jbHVkZS9hc20tYXJtL25taS5oICAgfCAgMTMgKysr Cj4gIHhlbi9pbmNsdWRlL3hlbi94c3BsaWNlLmggICB8ICAgNyArLQo+ICA4IGZpbGVzIGNoYW5n ZWQsIDMwNiBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEv eGVuL2FyY2gvYXJtL3hzcGxpY2UuYyBiL3hlbi9hcmNoL2FybS94c3BsaWNlLmMKPiBpbmRleCA4 ZDg1ZmE5Li4zYzM0ZWIzIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS94c3BsaWNlLmMKPiAr KysgYi94ZW4vYXJjaC9hcm0veHNwbGljZS5jCj4gQEAgLTMsNiArMywxNCBAQAo+ICAjaW5jbHVk ZSA8eGVuL3hzcGxpY2VfZWxmLmg+Cj4gICNpbmNsdWRlIDx4ZW4veHNwbGljZS5oPgo+ICAKPiAr dm9pZCB4c3BsaWNlX2FwcGx5X2ptcChzdHJ1Y3QgeHNwbGljZV9wYXRjaF9mdW5jICpmdW5jKQo+ ICt7Cj4gK30KPiArCj4gK3ZvaWQgeHNwbGljZV9yZXZlcnRfam1wKHN0cnVjdCB4c3BsaWNlX3Bh dGNoX2Z1bmMgKmZ1bmMpCj4gK3sKPiArfQo+ICsKPiAgaW50IHhzcGxpY2VfdmVyaWZ5X2VsZih1 aW50OF90ICpkYXRhLCBzc2l6ZV90IGxlbikKPiAgewo+ICAgICAgcmV0dXJuIC1FTk9TWVM7Cj4g ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9kb21haW4uYyBiL3hlbi9hcmNoL3g4Ni9kb21haW4u Ywo+IGluZGV4IGZlM2JlMzAuLjQ0MjBjZmMgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L2Rv bWFpbi5jCj4gKysrIGIveGVuL2FyY2gveDg2L2RvbWFpbi5jCj4gQEAgLTM2LDYgKzM2LDcgQEAK PiAgI2luY2x1ZGUgPHhlbi9jcHUuaD4KPiAgI2luY2x1ZGUgPHhlbi93YWl0Lmg+Cj4gICNpbmNs dWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4veHNwbGljZS5oPgo+ICAj aW5jbHVkZSA8cHVibGljL3N5c2N0bC5oPgo+ICAjaW5jbHVkZSA8YXNtL3JlZ3MuaD4KPiAgI2lu Y2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPgo+IEBAIC0xMjAsNiArMTIxLDcgQEAgc3RhdGljIHZv aWQgaWRsZV9sb29wKHZvaWQpCj4gICAgICAgICAgKCpwbV9pZGxlKSgpOwo+ICAgICAgICAgIGRv X3Rhc2tsZXQoKTsKPiAgICAgICAgICBkb19zb2Z0aXJxKCk7Cj4gKyAgICAgICAgZG9feHNwbGlj ZSgpOwo+ICAgICAgfQo+ICB9Cj4gIAo+IEBAIC0xMzYsNiArMTM4LDcgQEAgdm9pZCBzdGFydHVw X2NwdV9pZGxlX2xvb3Aodm9pZCkKPiAgCj4gIHN0YXRpYyB2b2lkIG5vcmV0dXJuIGNvbnRpbnVl X2lkbGVfZG9tYWluKHN0cnVjdCB2Y3B1ICp2KQo+ICB7Cj4gKyAgICBkb194c3BsaWNlKCk7Cj4g ICAgICByZXNldF9zdGFja19hbmRfanVtcChpZGxlX2xvb3ApOwo+ICB9Cj4gIAo+IEBAIC0xNDMs NiArMTQ2LDcgQEAgc3RhdGljIHZvaWQgbm9yZXR1cm4gY29udGludWVfbm9uaWRsZV9kb21haW4o c3RydWN0IHZjcHUgKnYpCj4gIHsKPiAgICAgIGNoZWNrX3dha2V1cF9mcm9tX3dhaXQoKTsKPiAg ICAgIG1hcmtfcmVnc19kaXJ0eShndWVzdF9jcHVfdXNlcl9yZWdzKCkpOwo+ICsgICAgZG9feHNw bGljZSgpOwo+ICAgICAgcmVzZXRfc3RhY2tfYW5kX2p1bXAocmV0X2Zyb21faW50cik7Cj4gIH0K PiAgCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL3N2bS5jIGIveGVuL2FyY2gv eDg2L2h2bS9zdm0vc3ZtLmMKPiBpbmRleCA4ZGU0MWZhLi42NWJmN2U5IDEwMDY0NAo+IC0tLSBh L3hlbi9hcmNoL3g4Ni9odm0vc3ZtL3N2bS5jCj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS9zdm0v c3ZtLmMKPiBAQCAtMjYsNiArMjYsNyBAQAo+ICAjaW5jbHVkZSA8eGVuL2h5cGVyY2FsbC5oPgo+ ICAjaW5jbHVkZSA8eGVuL2RvbWFpbl9wYWdlLmg+Cj4gICNpbmNsdWRlIDx4ZW4veGVub3Byb2Yu aD4KPiArI2luY2x1ZGUgPHhlbi94c3BsaWNlLmg+Cj4gICNpbmNsdWRlIDxhc20vY3VycmVudC5o Pgo+ICAjaW5jbHVkZSA8YXNtL2lvLmg+Cj4gICNpbmNsdWRlIDxhc20vcGFnaW5nLmg+Cj4gQEAg LTEwNzEsNiArMTA3Miw3IEBAIHN0YXRpYyB2b2lkIG5vcmV0dXJuIHN2bV9kb19yZXN1bWUoc3Ry dWN0IHZjcHUgKnYpCj4gIAo+ICAgICAgaHZtX2RvX3Jlc3VtZSh2KTsKPiAgCj4gKyAgICBkb194 c3BsaWNlKCk7Cj4gICAgICByZXNldF9zdGFja19hbmRfanVtcChzdm1fYXNtX2RvX3Jlc3VtZSk7 Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vdm14L3ZtY3MuYyBiL3hl bi9hcmNoL3g4Ni9odm0vdm14L3ZtY3MuYwo+IGluZGV4IDRlYTFhZDEuLmQ5OTZmNDcgMTAwNjQ0 Cj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS92bXgvdm1jcy5jCj4gKysrIGIveGVuL2FyY2gveDg2 L2h2bS92bXgvdm1jcy5jCj4gQEAgLTI1LDYgKzI1LDcgQEAKPiAgI2luY2x1ZGUgPHhlbi9rZXJu ZWwuaD4KPiAgI2luY2x1ZGUgPHhlbi9rZXloYW5kbGVyLmg+Cj4gICNpbmNsdWRlIDx4ZW4vdm1f ZXZlbnQuaD4KPiArI2luY2x1ZGUgPHhlbi94c3BsaWNlLmg+Cj4gICNpbmNsdWRlIDxhc20vY3Vy cmVudC5oPgo+ICAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KPiAgI2luY2x1ZGUgPGFzbS9w cm9jZXNzb3IuaD4KPiBAQCAtMTY4NSw2ICsxNjg2LDcgQEAgdm9pZCB2bXhfZG9fcmVzdW1lKHN0 cnVjdCB2Y3B1ICp2KQo+ICAgICAgfQo+ICAKPiAgICAgIGh2bV9kb19yZXN1bWUodik7Cj4gKyAg ICBkb194c3BsaWNlKCk7Cj4gICAgICByZXNldF9zdGFja19hbmRfanVtcCh2bXhfYXNtX2RvX3Zt ZW50cnkpOwo+ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYveHNwbGljZS5jIGIv eGVuL2FyY2gveDg2L3hzcGxpY2UuYwo+IGluZGV4IGRiZmYwZDUuLjMxZTQxMjQgMTAwNjQ0Cj4g LS0tIGEveGVuL2FyY2gveDg2L3hzcGxpY2UuYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni94c3BsaWNl LmMKPiBAQCAtMyw2ICszLDI1IEBACj4gICNpbmNsdWRlIDx4ZW4veHNwbGljZV9lbGYuaD4KPiAg I2luY2x1ZGUgPHhlbi94c3BsaWNlLmg+Cj4gIAo+ICsjZGVmaW5lIFBBVENIX0lOU05fU0laRSA1 Cj4gKwo+ICt2b2lkIHhzcGxpY2VfYXBwbHlfam1wKHN0cnVjdCB4c3BsaWNlX3BhdGNoX2Z1bmMg KmZ1bmMpCgpEb24ndCB3ZSB3YW50IGZvciBpdCB0byBiZSAnaW50Jwo+ICt7Cj4gKyAgICB1aW50 MzJfdCB2YWw7Cj4gKyAgICB1aW50OF90ICpvbGRfcHRyOwo+ICsKPiArICAgIG9sZF9wdHIgPSAo dWludDhfdCAqKWZ1bmMtPm9sZF9hZGRyOwo+ICsgICAgbWVtY3B5KGZ1bmMtPnVuZG8sIG9sZF9w dHIsIFBBVENIX0lOU05fU0laRSk7CgpBbmQgcGVyaGFwcyB1c2Ugc29tZXRoaW5nIHdoaWNoIGNh biBjYXRjaCBhbiBleGNlcHRpb24gKCNHUCkgc28gdGhhdAp0aGlzIGNhbiBlcnJvciBvdXQ/Cj4g KyAgICAqb2xkX3B0cisrID0gMHhlOTsgLyogUmVsYXRpdmUganVtcCAqLwo+ICsgICAgdmFsID0g ZnVuYy0+bmV3X2FkZHIgLSBmdW5jLT5vbGRfYWRkciAtIFBBVENIX0lOU05fU0laRTsKPiArICAg IG1lbWNweShvbGRfcHRyLCAmdmFsLCBzaXplb2YgdmFsKTsKPiArfQo+ICsKPiArdm9pZCB4c3Bs aWNlX3JldmVydF9qbXAoc3RydWN0IHhzcGxpY2VfcGF0Y2hfZnVuYyAqZnVuYykKPiArewo+ICsg ICAgbWVtY3B5KCh2b2lkICopZnVuYy0+b2xkX2FkZHIsIGZ1bmMtPnVuZG8sIFBBVENIX0lOU05f U0laRSk7Cj4gK30KPiArCj4gIGludCB4c3BsaWNlX3ZlcmlmeV9lbGYodWludDhfdCAqZGF0YSwg c3NpemVfdCBsZW4pCj4gIHsKPiAgCj4gZGlmZiAtLWdpdCBhL3hlbi9jb21tb24veHNwbGljZS5j IGIveGVuL2NvbW1vbi94c3BsaWNlLmMKPiBpbmRleCA1ZTg4YzU1Li40NDc2YmU1IDEwMDY0NAo+ IC0tLSBhL3hlbi9jb21tb24veHNwbGljZS5jCj4gKysrIGIveGVuL2NvbW1vbi94c3BsaWNlLmMK PiBAQCAtMTEsMTYgKzExLDIxIEBACj4gICNpbmNsdWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+Cj4g ICNpbmNsdWRlIDx4ZW4vc3RkYm9vbC5oPgo+ICAjaW5jbHVkZSA8eGVuL3NjaGVkLmg+Cj4gKyNp bmNsdWRlIDx4ZW4vc29mdGlycS5oPgo+ICAjaW5jbHVkZSA8eGVuL2xpYi5oPgo+ICsjaW5jbHVk ZSA8eGVuL3dhaXQuaD4KPiAgI2luY2x1ZGUgPHhlbi94c3BsaWNlX2VsZi5oPgo+ICAjaW5jbHVk ZSA8eGVuL3hzcGxpY2UuaD4KPiAgI2luY2x1ZGUgPHB1YmxpYy9zeXNjdGwuaD4KPiAgCj4gICNp bmNsdWRlIDxhc20vZXZlbnQuaD4KPiArI2luY2x1ZGUgPGFzbS9ubWkuaD4KPiAgCj4gIHN0YXRp YyBERUZJTkVfU1BJTkxPQ0socGF5bG9hZF9saXN0X2xvY2spOwo+ICBzdGF0aWMgTElTVF9IRUFE KHBheWxvYWRfbGlzdCk7Cj4gIAo+ICtzdGF0aWMgTElTVF9IRUFEKGFwcGxpZWRfbGlzdCk7Cj4g Kwo+ICBzdGF0aWMgdW5zaWduZWQgaW50IHBheWxvYWRfY250Owo+ICBzdGF0aWMgdW5zaWduZWQg aW50IHBheWxvYWRfdmVyc2lvbiA9IDE7Cj4gIAo+IEBAIC0yOSwxNSArMzQsMzQgQEAgc3RydWN0 IHBheWxvYWQgewo+ICAgICAgaW50MzJfdCByYzsgICAgICAgICAvKiAwIG9yIC1FWFguICovCj4g IAo+ICAgICAgc3RydWN0IGxpc3RfaGVhZCAgIGxpc3Q7ICAgLyogTGlua2VkIHRvICdwYXlsb2Fk X2xpc3QnLiAqLwo+ICsgICAgc3RydWN0IGxpc3RfaGVhZCAgIGFwcGxpZWRfbGlzdDsgICAvKiBM aW5rZWQgdG8gJ2FwcGxpZWRfbGlzdCcuICovCj4gIAo+ICsgICAgc3RydWN0IHhzcGxpY2VfcGF0 Y2hfZnVuYyAqZnVuY3M7Cj4gKyAgICBpbnQgbmZ1bmNzOwoKdW5zaWduZWQgaW50OwoKPiAgICAg IHZvaWQgKm1vZHVsZV9hZGRyZXNzOwo+ICAgICAgc2l6ZV90IG1vZHVsZV9wYWdlczsKPiAgCj4g ICAgICBjaGFyICBpZFtYRU5fWFNQTElDRV9OQU1FX1NJWkUgKyAxXTsgICAgICAgICAgLyogTmFt ZSBvZiBpdC4gKi8KPiAgfTsKPiAgCj4gKy8qIERlZmluZXMgYW4gb3V0c3RhbmRpbmcgcGF0Y2hp bmcgYWN0aW9uLiAqLwo+ICtzdHJ1Y3QgeHNwbGljZV93b3JrCj4gK3sKPiArICAgIGF0b21pY190 IHNlbWFwaG9yZTsgICAgICAgICAgLyogVXNlZCBmb3IgcmVuZGV6dm91cyAqLwo+ICsgICAgYXRv bWljX3QgaXJxX3NlbWFwaG9yZTsgICAgICAvKiBVc2VkIHRvIHNpZ25hbCBhbGwgSVJRcyBkaXNh YmxlZCAqLwo+ICsgICAgc3RydWN0IHBheWxvYWQgKmRhdGE7ICAgICAgICAvKiBUaGUgcGF5bG9h ZCBvbiB3aGljaCB0byBhY3QgKi8KPiArICAgIHZvbGF0aWxlIGJvb2xfdCBkb193b3JrOyAgICAg LyogU2lnbmFscyB3b3JrIHRvIGRvICovCj4gKyAgICB2b2xhdGlsZSBib29sX3QgcmVhZHk7ICAg ICAgIC8qIFNpZ25hbHMgYWxsIENQVXMgc3luY2hyb25pemVkICovCj4gKyAgICB1aW50MzJfdCBj bWQ7ICAgICAgICAgICAgICAgIC8qIEFjdGlvbiByZXF1ZXN0LiBYU1BMSUNFX0FDVElPTl8qICov CgpOb3cgc2luY2UgeW91IGhhdmUgYSBwb2ludGVyIHRvICdkYXRhJyBjYW4ndCB5b3UgZm9sbG93 IHRoYXQgZm9yIHRoZQpjbWQ/IE9yIGF0IGxlYXN0IHRoZSAnZGF0YS0+c3RhdGUnPwoKTWlzc2lu ZyBmdWxsIHN0b3BzLgo+ICt9Owo+ICsKPiArc3RhdGljIERFRklORV9TUElOTE9DSyh4c3BsaWNl X3dvcmtfbG9jayk7Cj4gKy8qIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBvdXRzdGFuZGluZyBwYXRj aGluZyBhY3Rpb24uICovCj4gK3N0YXRpYyBzdHJ1Y3QgeHNwbGljZV93b3JrIHhzcGxpY2Vfd29y azsKPiArCj4gIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IHBheWxvYWQgKnBheWxvYWQs IHVpbnQ4X3QgKnJhdywgc3NpemVfdCBsZW4pOwo+ICBzdGF0aWMgdm9pZCBmcmVlX21vZHVsZShz dHJ1Y3QgcGF5bG9hZCAqcGF5bG9hZCk7Cj4gK3N0YXRpYyBpbnQgc2NoZWR1bGVfd29yayhzdHJ1 Y3QgcGF5bG9hZCAqZGF0YSwgdWludDMyX3QgY21kKTsKPiAgCj4gIHN0YXRpYyBjb25zdCBjaGFy ICpzdGF0ZTJzdHIoaW50MzJfdCBzdGF0ZSkKPiAgewo+IEBAIC0zNDEsMjggKzM2NSwyMiBAQCBz dGF0aWMgaW50IHhzcGxpY2VfYWN0aW9uKHhlbl9zeXNjdGxfeHNwbGljZV9hY3Rpb25fdCAqYWN0 aW9uKQo+ICAgICAgY2FzZSBYU1BMSUNFX0FDVElPTl9SRVZFUlQ6Cj4gICAgICAgICAgaWYgKCBk YXRhLT5zdGF0ZSA9PSBYU1BMSUNFX1NUQVRFX0FQUExJRUQgKQo+ICAgICAgICAgIHsKPiAtICAg ICAgICAgICAgLyogTm8gaW1wbGVtZW50YXRpb24geWV0LiAqLwo+IC0gICAgICAgICAgICBkYXRh LT5zdGF0ZSA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRDsKPiAtICAgICAgICAgICAgZGF0YS0+cmMg PSAwOwo+IC0gICAgICAgICAgICByYyA9IDA7Cj4gKyAgICAgICAgICAgIGRhdGEtPnJjID0gLUVB R0FJTjsKPiArICAgICAgICAgICAgcmMgPSBzY2hlZHVsZV93b3JrKGRhdGEsIGFjdGlvbi0+Y21k KTsKPiAgICAgICAgICB9Cj4gICAgICAgICAgYnJlYWs7Cj4gICAgICBjYXNlIFhTUExJQ0VfQUNU SU9OX0FQUExZOgo+ICAgICAgICAgIGlmICggKGRhdGEtPnN0YXRlID09IFhTUExJQ0VfU1RBVEVf Q0hFQ0tFRCkgKQo+ICAgICAgICAgIHsKPiAtICAgICAgICAgICAgLyogTm8gaW1wbGVtZW50YXRp b24geWV0LiAqLwo+IC0gICAgICAgICAgICBkYXRhLT5zdGF0ZSA9IFhTUExJQ0VfU1RBVEVfQVBQ TElFRDsKPiAtICAgICAgICAgICAgZGF0YS0+cmMgPSAwOwo+IC0gICAgICAgICAgICByYyA9IDA7 Cj4gKyAgICAgICAgICAgIGRhdGEtPnJjID0gLUVBR0FJTjsKPiArICAgICAgICAgICAgcmMgPSBz Y2hlZHVsZV93b3JrKGRhdGEsIGFjdGlvbi0+Y21kKTsKPiAgICAgICAgICB9Cj4gICAgICAgICAg YnJlYWs7Cj4gICAgICBjYXNlIFhTUExJQ0VfQUNUSU9OX1JFUExBQ0U6Cj4gICAgICAgICAgaWYg KCBkYXRhLT5zdGF0ZSA9PSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQgKQo+ICAgICAgICAgIHsKPiAt ICAgICAgICAgICAgLyogTm8gaW1wbGVtZW50YXRpb24geWV0LiAqLwo+IC0gICAgICAgICAgICBk YXRhLT5zdGF0ZSA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRDsKPiAtICAgICAgICAgICAgZGF0YS0+ cmMgPSAwOwo+IC0gICAgICAgICAgICByYyA9IDA7Cj4gKyAgICAgICAgICAgIGRhdGEtPnJjID0g LUVBR0FJTjsKPiArICAgICAgICAgICAgcmMgPSBzY2hlZHVsZV93b3JrKGRhdGEsIGFjdGlvbi0+ Y21kKTsKPiAgICAgICAgICB9Cj4gICAgICAgICAgYnJlYWs7Cj4gICAgICBkZWZhdWx0Ogo+IEBA IC02MzcsNiArNjU1LDI0IEBAIHN0YXRpYyBpbnQgcGVyZm9ybV9yZWxvY3Moc3RydWN0IHhzcGxp Y2VfZWxmICplbGYpCj4gICAgICByZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIGludCBmaW5k X3NwZWNpYWxfc2VjdGlvbnMoc3RydWN0IHBheWxvYWQgKnBheWxvYWQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmKQo+ICt7Cj4gKyAg ICBzdHJ1Y3QgeHNwbGljZV9lbGZfc2VjICpzZWM7Cj4gKwo+ICsgICAgc2VjID0geHNwbGljZV9l bGZfc2VjX2J5X25hbWUoZWxmLCAiLnhzcGxpY2UuZnVuY3MiKTsKPiArICAgIGlmICggIXNlYyAp Cj4gKyAgICB7Cj4gKyAgICAgICAgcHJpbnRrKFhFTkxPR19FUlIgIi54c3BsaWNlLmZ1bmNzIGlz IG1pc3NpbmdcbiIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICBw YXlsb2FkLT5mdW5jcyA9IChzdHJ1Y3QgeHNwbGljZV9wYXRjaF9mdW5jICopc2VjLT5sb2FkX2Fk ZHI7Cj4gKyAgICBwYXlsb2FkLT5uZnVuY3MgPSBzZWMtPnNlYy0+c2hfc2l6ZSAvIChzaXplb2Yg KnBheWxvYWQtPmZ1bmNzKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQoKVGhhdCBsb29rcyBs aWtlIGl0IHNob3VsZCBiZWxvbmcgdG8gYW5vdGhlciBwYXRjaD8KPiArCj4gIHN0YXRpYyBpbnQg bG9hZF9tb2R1bGUoc3RydWN0IHBheWxvYWQgKnBheWxvYWQsIHVpbnQ4X3QgKnJhdywgc3NpemVf dCBsZW4pCj4gIHsKPiAgICAgIHN0cnVjdCB4c3BsaWNlX2VsZiBlbGY7Cj4gQEAgLTY2Miw2ICs2 OTgsMTAgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgcGF5bG9hZCAqcGF5bG9hZCwg dWludDhfdCAqcmF3LCBzc2l6ZV90IGxlbikKPiAgICAgIGlmICggcmMgKQo+ICAgICAgICAgIGdv dG8gZXJyX21vZHVsZTsKPiAgCj4gKyAgICByYyA9IGZpbmRfc3BlY2lhbF9zZWN0aW9ucyhwYXls b2FkLCAmZWxmKTsKPiArICAgIGlmICggcmMgKQo+ICsgICAgICAgIGdvdG8gZXJyX21vZHVsZTsK PiArCgpEaXR0bz8KPiAgICAgIHJldHVybiAwOwo+ICAKPiAgIGVycl9tb2R1bGU6Cj4gQEAgLTY3 Miw2ICs3MTIsMjA2IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IHBheWxvYWQgKnBh eWxvYWQsIHVpbnQ4X3QgKnJhdywgc3NpemVfdCBsZW4pCj4gICAgICByZXR1cm4gcmM7Cj4gIH0K PiAgCj4gKwo+ICsvKgo+ICsgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBnZXQgdGhlIENQVXMg aW50byBhbiBhcHByb3ByaWF0ZSBzdGF0ZSBhbmQKPiArICogYXBwbHkgKG9yIHJldmVydCkgZWFj aCBvZiB0aGUgbW9kdWxlJ3MgZnVuY3Rpb25zLgoKcy9tb2R1bGUvcGF5bG9hZC8KCj4gKyAqLwo+ ICsKPiArLyoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBoYXZpbmcgYWxsIG90aGVy IENQVXMgd2l0aCBubyBzdGFjayBhbmQgSVJRcwo+ICsgKiBkaXNhYmxlZC4KCldlbGwsIHRoZXJl IGlzIHNvbWUgc3RhY2suIEZvciBleGFtcGxlIGZyb20gJ2NwdV9pZGxlJyAtIHlvdSBoYXZlIHRo ZQonY3B1X2lkbGUnIG9uIHRoZSBzdGFjay4KCj4gKyAqLwo+ICtzdGF0aWMgaW50IGFwcGx5X3Bh eWxvYWQoc3RydWN0IHBheWxvYWQgKmRhdGEpCj4gK3sKPiArICAgIGludCBpOwoKdW5zaWduZWQg aW50Cj4gKwo+ICsgICAgcHJpbnRrKFhFTkxPR19ERUJVRyAiQXBwbHlpbmcgcGF5bG9hZDogJXNc biIsIGRhdGEtPmlkKTsKPiArCj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IGRhdGEtPm5mdW5jczsg aSsrICkKPiArICAgICAgICB4c3BsaWNlX2FwcGx5X2ptcChkYXRhLT5mdW5jcyArIGkpOwoKQW5k IGlmIHRoaXMgcmV0dXJucyBhbiBlcnJvciB0aGVuIHdlIGNvdWxkIHNraXAgYWRkaW5nCml0IHRv IHRoZSBhcHBsaWVkX2xpc3QuLgo+ICsKCkFsc28gdGhlIHBhdGNoaW5nIGluIExpbnV4IHNlZW1z IHRvIGRvIHNvbWUgaWNhY2hlIHB1cmdpbmcuClNob3VsZCB3ZSB1c2UgdGhhdD8KCj4gKyAgICBs aXN0X2FkZF90YWlsKCZkYXRhLT5hcHBsaWVkX2xpc3QsICZhcHBsaWVkX2xpc3QpOwo+ICsKPiAr ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1 dGVkIGhhdmluZyBhbGwgb3RoZXIgQ1BVcyB3aXRoIG5vIHN0YWNrIGFuZCBJUlFzCj4gKyAqIGRp c2FibGVkLgo+ICsgKi8KPiArc3RhdGljIGludCByZXZlcnRfcGF5bG9hZChzdHJ1Y3QgcGF5bG9h ZCAqZGF0YSkKPiArewo+ICsgICAgaW50IGk7Cgp1bnNpZ25lZCBpbnQgaTsKPiArCj4gKyAgICBw cmludGsoWEVOTE9HX0RFQlVHICJSZXZlcnRpbmcgcGF5bG9hZDogJXNcbiIsIGRhdGEtPmlkKTsK PiArCj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IGRhdGEtPm5mdW5jczsgaSsrICkKPiArICAgICAg ICB4c3BsaWNlX3JldmVydF9qbXAoZGF0YS0+ZnVuY3MgKyBpKTsKPiArCj4gKyAgICBsaXN0X2Rl bCgmZGF0YS0+YXBwbGllZF9saXN0KTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiAr LyogTXVzdCBiZSBob2xkaW5nIHRoZSBwYXlsb2FkX2xpc3QgbG9jayAqLwoKTWlzc2luZyBmdWxs IHN0b3AuCgpTaG91bGQgdGhhdCBsb2NrIGJlIGNhbGxlZCBzb21ldGhpbmcgZWxzZSBub3c/IChC ZWNhdXNlIGl0IGlzIGNlcnRhaW5seQpub3QgcHJvdGVjdGluZyB0aGUgbGlzdCBhbnltb3JlIC0g YnV0IGFsc28gdGhlIHNjaGVkdWxpbmcgYWN0aW9uKS4KPiArc3RhdGljIGludCBzY2hlZHVsZV93 b3JrKHN0cnVjdCBwYXlsb2FkICpkYXRhLCB1aW50MzJfdCBjbWQpCj4gK3sKPiArICAgIC8qIEZh aWwgaWYgYW4gb3BlcmF0aW9uIGlzIGFscmVhZHkgc2NoZWR1bGVkICovCj4gKyAgICBpZiAoIHhz cGxpY2Vfd29yay5kb193b3JrICkKPiArICAgICAgICByZXR1cm4gLUVBR0FJTjsKPiArCgo+ICsg ICAgeHNwbGljZV93b3JrLmNtZCA9IGNtZDsKPiArICAgIHhzcGxpY2Vfd29yay5kYXRhID0gZGF0 YTsKPiArICAgIGF0b21pY19zZXQoJnhzcGxpY2Vfd29yay5zZW1hcGhvcmUsIDApOwo+ICsgICAg YXRvbWljX3NldCgmeHNwbGljZV93b3JrLmlycV9zZW1hcGhvcmUsIDApOwo+ICsgICAgeHNwbGlj ZV93b3JrLnJlYWR5ID0gZmFsc2U7Cj4gKyAgICBzbXBfbWIoKTsKPiArICAgIHhzcGxpY2Vfd29y ay5kb193b3JrID0gdHJ1ZTsKPiArICAgIHNtcF9tYigpOwoKU28gdGhpcyBpcyB5b3VyICdHTyBH Tycgc2lnbmFsIHJpZ2h0PyBJIHRoaW5rIHlvdSBtYXkgd2FudAp0byBoYXZlICdzbWJfd21iKCkn Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCgovbWUgbGF1Z2hzLiBXaGF0IGEgd2F5IHRv ICdmaXgnIHRoZSBOTUkgd2F0Y2hkb2cuCgo+ICtzdGF0aWMgaW50IG1hc2tfbm1pX2NhbGxiYWNr KGNvbnN0IHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCBpbnQgY3B1KQo+ICt7Cj4gKyAgICBy ZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmVzY2hlZHVsZV9mbih2b2lkICp1bnVz ZWQpCj4gK3sKPiArICAgIHNtcF9tYigpOyAvKiBTeW5jaHJvbml6ZSB3aXRoIHNldHRpbmcgZG9f d29yayAqLwo+ICsgICAgcmFpc2Vfc29mdGlycShTQ0hFRFVMRV9TT0ZUSVJRKTsKPiArfQo+ICsK PiArLyoKPiArICogVGhlIG1haW4gZnVuY3Rpb24gd2hpY2ggbWFuYWdlcyB0aGUgd29yayBvZiBx dWllc2NpbmcgdGhlIHN5c3RlbSBhbmQKPiArICogcGF0Y2hpbmcgY29kZS4KPiArICovCj4gK3Zv aWQgZG9feHNwbGljZSh2b2lkKQo+ICt7Cj4gKyAgICBpbnQgaWQ7Cgp1bnNpZ25lZCBpbnQgaWQ7 Cj4gKyAgICB1bnNpZ25lZCBpbnQgdG90YWxfY3B1czsKPiArICAgIG5taV9jYWxsYmFja190IHNh dmVkX25taV9jYWxsYmFjazsKPiArCj4gKyAgICAvKiBGYXN0IHBhdGg6IG5vIHdvcmsgdG8gZG8g Ki8KCk1pc3NpbmcgZnVsbCBzdG9wLgo+ICsgICAgaWYgKCBsaWtlbHkoIXhzcGxpY2Vfd29yay5k b193b3JrKSApCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIEFTU0VSVChsb2NhbF9pcnFf aXNfZW5hYmxlZCgpKTsKPiArCj4gKyAgICBzcGluX2xvY2soJnhzcGxpY2Vfd29ya19sb2NrKTsK PiArICAgIGlkID0gYXRvbWljX3JlYWQoJnhzcGxpY2Vfd29yay5zZW1hcGhvcmUpOwo+ICsgICAg YXRvbWljX2luYygmeHNwbGljZV93b3JrLnNlbWFwaG9yZSk7Cj4gKyAgICBzcGluX3VubG9jaygm eHNwbGljZV93b3JrX2xvY2spOwoKQ291bGQgeW91IHVzZSAnYXRvbWljX2luY19hbmRfdGVzdCcg YW5kIHRoZW4geW91IGNhbiBnZXQKcmlkIG9mIHRoZSBzcGlubG9jay4KCj4gKwo+ICsgICAgdG90 YWxfY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOwoKV2hpY2ggY291bGQgY2hhbmdlIGFjcm9zcyB0 aGVzZSBpbnZvY2F0aW9ucy4uIFBlcmhhcHMKZHVyaW5nIHRoZXNlIGNhbGxzIHdlIG5lZWQgdG8g bG9jayB1cCBDUFUgdXAvZG93biBjb2RlPwoKPiArCj4gKyAgICBpZiAoIGlkID09IDAgKQo+ICsg ICAgewoKQ2FuIHlvdSBqdXN0IG1ha2UgdGhpcyBpdHMgb3duIGZ1bmN0aW9uPyBQZXJoYXBzIGNh bGwgaXQKJ3hzcGxpY2VfZG9fc2luZ2xlJyBvciBzdWNoPwoKPiArICAgICAgICBzX3RpbWVfdCB0 aW1lb3V0LCBzdGFydDsKPiArCj4gKyAgICAgICAgLyogVHJpZ2dlciBvdGhlciBDUFVzIHRvIGV4 ZWN1dGUgZG9feHNwbGljZSAqLwoKTWlzc2luZyBmdWxsIHN0b3AuCj4gKyAgICAgICAgc21wX2Nh bGxfZnVuY3Rpb24ocmVzY2hlZHVsZV9mbiwgTlVMTCwgMCk7Cj4gKwo+ICsgICAgICAgIC8qIFdh aXQgZm9yIG90aGVyIENQVXMgd2l0aCBhIHRpbWVvdXQgKi8KCk1pc3NpbmcgZnVsbCBzdG9wLgo+ ICsgICAgICAgIHN0YXJ0ID0gTk9XKCk7Cj4gKyAgICAgICAgdGltZW91dCA9IHN0YXJ0ICsgTUlM TElTRUNTKDMwKTsKCk5haC4gVGhhdCBzaG91bGQgYmUgZ290dGVuIGZyb20gdGhlIFhTUExJQ0Vf QUNUSU9OX0FQUExZICd0aW1lJwpwYXJhbWV0ZXIgLSB3aGljaCBoYXMgYW4gJ3RpbWVvdXQnIGlu IGl0LgoKPiArICAgICAgICB3aGlsZSAoIGF0b21pY19yZWFkKCZ4c3BsaWNlX3dvcmsuc2VtYXBo b3JlKSAhPSB0b3RhbF9jcHVzICYmCj4gKyAgICAgICAgICAgICAgICBOT1coKSA8IHRpbWVvdXQg KQo+ICsgICAgICAgICAgICBjcHVfcmVsYXgoKTsKPiArCj4gKyAgICAgICAgaWYgKCBhdG9taWNf cmVhZCgmeHNwbGljZV93b3JrLnNlbWFwaG9yZSkgPT0gdG90YWxfY3B1cyApCj4gKyAgICAgICAg ewo+ICsgICAgICAgICAgICBzdHJ1Y3QgcGF5bG9hZCAqZGF0YTI7CgpzL2RhdGEyL2RhdGEvID8K PiArCj4gKyAgICAgICAgICAgIC8qICJNYXNrIiBOTUlzICovCj4gKyAgICAgICAgICAgIHNhdmVk X25taV9jYWxsYmFjayA9IHNldF9ubWlfY2FsbGJhY2sobWFza19ubWlfY2FsbGJhY2spOwo+ICsK PiArICAgICAgICAgICAgLyogQWxsIENQVXMgYXJlIHdhaXRpbmcsIG5vdyBzaWduYWwgdG8gZGlz YWJsZSBJUlFzICovCj4gKyAgICAgICAgICAgIHhzcGxpY2Vfd29yay5yZWFkeSA9IHRydWU7Cj4g KyAgICAgICAgICAgIHNtcF9tYigpOwo+ICsKPiArICAgICAgICAgICAgLyogV2FpdCBmb3IgaXJx cyB0byBiZSBkaXNhYmxlZCAqLwo+ICsgICAgICAgICAgICB3aGlsZSAoIGF0b21pY19yZWFkKCZ4 c3BsaWNlX3dvcmsuaXJxX3NlbWFwaG9yZSkgIT0gKHRvdGFsX2NwdXMgLSAxKSApCj4gKyAgICAg ICAgICAgICAgICBjcHVfcmVsYXgoKTsKPiArCj4gKyAgICAgICAgICAgIGxvY2FsX2lycV9kaXNh YmxlKCk7Cj4gKyAgICAgICAgICAgIC8qIE5vdyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUg b25seSBvbmUgb24gYW55IHN0YWNrLgo+ICsgICAgICAgICAgICAgKiBObyBuZWVkIHRvIGxvY2sg dGhlIHBheWxvYWQgbGlzdCBvciBhcHBsaWVkIGxpc3QuICovCj4gKyAgICAgICAgICAgIHN3aXRj aCAoIHhzcGxpY2Vfd29yay5jbWQgKQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAg ICBjYXNlIFhTUExJQ0VfQUNUSU9OX0FQUExZOgo+ICsgICAgICAgICAgICAgICAgICAgICAgICB4 c3BsaWNlX3dvcmsuZGF0YS0+cmMgPSBhcHBseV9wYXlsb2FkKHhzcGxpY2Vfd29yay5kYXRhKTsK PiArICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4c3BsaWNlX3dvcmsuZGF0YS0+cmMgPT0g MCApCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3BsaWNlX3dvcmsuZGF0YS0+c3Rh dGUgPSBYU1BMSUNFX1NUQVRFX0FQUExJRUQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwo+ICsgICAgICAgICAgICAgICAgY2FzZSBYU1BMSUNFX0FDVElPTl9SRVZFUlQ6Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHhzcGxpY2Vfd29yay5kYXRhLT5yYyA9IHJldmVydF9wYXls b2FkKHhzcGxpY2Vfd29yay5kYXRhKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4 c3BsaWNlX3dvcmsuZGF0YS0+cmMgPT0gMCApCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB4c3BsaWNlX3dvcmsuZGF0YS0+c3RhdGUgPSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQ7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgY2FzZSBYU1BM SUNFX0FDVElPTl9SRVBMQUNFOgo+ICsgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2Zvcl9l YWNoX2VudHJ5ICggZGF0YTIsICZwYXlsb2FkX2xpc3QsIGxpc3QgKQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEyLT5z dGF0ZSAhPSBYU1BMSUNFX1NUQVRFX0FQUExJRUQgKQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGEyLT5yYyA9IHJldmVydF9wYXlsb2FkKGRhdGEyKTsKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICggZGF0YTItPnJjID09IDAgKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGEyLT5zdGF0ZSA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRDsKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c3BsaWNlX3dvcmsuZGF0YS0+cmMg PSAtRUlOVkFMOwoKV2h5IG5vdCBjb3B5IHRoZSBlcnJvciBjb2RlIChmcm9tIGRhdGEyLT5yYz8p Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCB4c3BsaWNlX3dvcmsuZGF0YS0+cmMgIT0gLUVJTlZBTCAp CgpBbmQgaGVyZSB5b3UgY2FuIGp1c3QgY2hlY2sgZm9yIHplcm8uCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzcGxpY2Vfd29yay5k YXRhLT5yYyA9IGFwcGx5X3BheWxvYWQoeHNwbGljZV93b3JrLmRhdGEpOwo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCB4c3BsaWNlX3dvcmsuZGF0YS0+cmMgPT0gMCApCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHNwbGljZV93b3JrLmRhdGEtPnN0YXRlID0g WFNQTElDRV9TVEFURV9BUFBMSUVEOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICB9Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgZGVmYXVsdDoK PiArICAgICAgICAgICAgICAgICAgICAgICAgeHNwbGljZV93b3JrLmRhdGEtPnJjID0gLUVJTlZB TDsKPiArICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgICAgIGxvY2FsX2lycV9lbmFibGUoKTsKPiArICAgICAgICAgICAgc2V0X25t aV9jYWxsYmFjayhzYXZlZF9ubWlfY2FsbGJhY2spOwo+ICsgICAgICAgIH0KPiArICAgICAgICBl bHNlCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICB4c3BsaWNlX3dvcmsuZGF0YS0+cmMgPSAt RUJVU1k7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICB4c3BsaWNlX3dvcmsuZG9fd29yayA9 IDA7Cj4gKyAgICAgICAgc21wX21iKCk7IC8qIFN5bmNocm9uaXplIHdpdGggd2FpdGluZyBDUFVz ICovCgpNaXNzaW5nIGZ1bGwgc3RvcC4KPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgIHsKPiAr ICAgICAgICAvKiBXYWl0IGZvciBhbGwgQ1BVcyB0byByZW5kZXp2b3VzICovCgpNaXNzaW5nIGZ1 bGwgc3RvcAo+ICsgICAgICAgIHdoaWxlICggeHNwbGljZV93b3JrLmRvX3dvcmsgJiYgIXhzcGxp Y2Vfd29yay5yZWFkeSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBjcHVfcmVsYXgoKTsK PiArICAgICAgICAgICAgc21wX21iKCk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKiBE aXNhYmxlIElSUXMgYW5kIHNpZ25hbCAqLwoKTWlzc2luZyBmdWxsIHN0b3AuCj4gKyAgICAgICAg bG9jYWxfaXJxX2Rpc2FibGUoKTsKPiArICAgICAgICBhdG9taWNfaW5jKCZ4c3BsaWNlX3dvcmsu aXJxX3NlbWFwaG9yZSk7Cj4gKwo+ICsgICAgICAgIC8qIFdhaXQgZm9yIHBhdGNoaW5nIHRvIGNv bXBsZXRlICovCgpNaXNzaW5nIGZ1bGwgc3RvcC4KPiArICAgICAgICB3aGlsZSAoIHhzcGxpY2Vf d29yay5kb193b3JrICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGNwdV9yZWxheCgpOwo+ ICsgICAgICAgICAgICBzbXBfbWIoKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgbG9jYWxfaXJx X2VuYWJsZSgpOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IF9faW5pdCB4c3BsaWNl X2luaXQodm9pZCkKPiAgewo+ICAgICAgcmVnaXN0ZXJfa2V5aGFuZGxlcigneCcsIHhzcGxpY2Vf cHJpbnRhbGwsICJwcmludCB4c3BsaWNpbmcgaW5mbyIsIDEpOwo+IGRpZmYgLS1naXQgYS94ZW4v aW5jbHVkZS9hc20tYXJtL25taS5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9ubWkuaAo+IGluZGV4 IGE2MDU4N2UuLjgyYWZmMzUgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9ubWku aAo+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vbm1pLmgKPiBAQCAtNCw2ICs0LDE5IEBACj4g ICNkZWZpbmUgcmVnaXN0ZXJfZ3Vlc3Rfbm1pX2NhbGxiYWNrKGEpICAoLUVOT1NZUykKPiAgI2Rl ZmluZSB1bnJlZ2lzdGVyX2d1ZXN0X25taV9jYWxsYmFjaygpICgtRU5PU1lTKQo+ICAKPiArdHlw ZWRlZiBpbnQgKCpubWlfY2FsbGJhY2tfdCkoY29uc3Qgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJl Z3MsIGludCBjcHUpOwo+ICsKPiArLyoqCj4gKyAqIHNldF9ubWlfY2FsbGJhY2sKPiArICoKPiAr ICogU2V0IGEgaGFuZGxlciBmb3IgYW4gTk1JLiBPbmx5IG9uZSBoYW5kbGVyIG1heSBiZQo+ICsg KiBzZXQuIFJldHVybiB0aGUgb2xkIG5taSBjYWxsYmFjayBoYW5kbGVyLgo+ICsgKi8KPiArc3Rh dGljIGlubGluZSBubWlfY2FsbGJhY2tfdCBzZXRfbm1pX2NhbGxiYWNrKG5taV9jYWxsYmFja190 IGNhbGxiYWNrKQo+ICt7Cj4gKyAgICByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiAgI2VuZGlmIC8q IEFTTV9OTUlfSCAqLwo+ICAvKgo+ICAgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gZGlmZiAtLWdpdCBh L3hlbi9pbmNsdWRlL3hlbi94c3BsaWNlLmggYi94ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5oCj4g aW5kZXggYTM5NDZhMy4uNTA3ODI5YyAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS94ZW4veHNw bGljZS5oCj4gKysrIGIveGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaAo+IEBAIC0xMSw3ICsxMSw4 IEBAIHN0cnVjdCB4c3BsaWNlX3BhdGNoX2Z1bmMgewo+ICAgICAgdW5zaWduZWQgbG9uZyBvbGRf YWRkcjsKPiAgICAgIHVuc2lnbmVkIGxvbmcgb2xkX3NpemU7Cj4gICAgICBjaGFyICpuYW1lOwo+ IC0gICAgdW5zaWduZWQgY2hhciB1bmRvWzhdOwo+ICsgICAgdWludDhfdCB1bmRvWzhdOwo+ICsg ICAgdWludDhfdCBwYWRbNTZdOwoKVGhpcyBzaG91bGQgYmUgaW4gYSBkaWZmZXJlbnQgcGF0Y2gu IEFzIHBhcnQgb2YgdGhlCiJ4c3BsaWNlOiBJbXBsZW1lbnQgcGF5bG9hZCBsb2FkaW5nIgoKPiAg fTsKPiAgCj4gIHN0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2Vfb3A7Cj4gQEAgLTE5LDYgKzIwLDgg QEAgaW50IHhzcGxpY2VfY29udHJvbChzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX29wICopOwo+ ICAKPiAgZXh0ZXJuIHZvaWQgeHNwbGljZV9wcmludGFsbCh1bnNpZ25lZCBjaGFyIGtleSk7Cj4g IAo+ICt2b2lkIGRvX3hzcGxpY2Uodm9pZCk7Cj4gKwo+ICAvKiBBcmNoIGhvb2tzICovCj4gIGlu dCB4c3BsaWNlX3ZlcmlmeV9lbGYodWludDhfdCAqZGF0YSwgc3NpemVfdCBsZW4pOwo+ICBpbnQg eHNwbGljZV9wZXJmb3JtX3JlbChzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZiwKPiBAQCAtMjcsNSAr MzAsNyBAQCBpbnQgeHNwbGljZV9wZXJmb3JtX3JlbChzdHJ1Y3QgeHNwbGljZV9lbGYgKmVsZiwK PiAgaW50IHhzcGxpY2VfcGVyZm9ybV9yZWxhKHN0cnVjdCB4c3BsaWNlX2VsZiAqZWxmLAo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhzcGxpY2VfZWxmX3NlYyAqYmFzZSwKPiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKnJlbGEpOwo+ ICt2b2lkIHhzcGxpY2VfYXBwbHlfam1wKHN0cnVjdCB4c3BsaWNlX3BhdGNoX2Z1bmMgKmZ1bmMp Owo+ICt2b2lkIHhzcGxpY2VfcmV2ZXJ0X2ptcChzdHJ1Y3QgeHNwbGljZV9wYXRjaF9mdW5jICpm dW5jKTsKPiAgCj4gICNlbmRpZiAvKiBfX1hFTl9YU1BMSUNFX0hfXyAqLwo+IC0tIAo+IDIuNC4z Cj4gCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K PiBYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Cj4gWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKPiBodHRw Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz Lnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==