From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Subject: Re: [PATCH v3 10/15] argo: implement the notify op Date: Thu, 10 Jan 2019 13:21:54 +0100 Message-ID: References: <1546846968-7372-1-git-send-email-christopher.w.clark@gmail.com> <1546846968-7372-11-git-send-email-christopher.w.clark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ghZLc-0000BY-VF for xen-devel@lists.xenproject.org; Thu, 10 Jan 2019 12:22:09 +0000 Received: by mail-ot1-f42.google.com with SMTP id e12so9745135otl.5 for ; Thu, 10 Jan 2019 04:22:06 -0800 (PST) In-Reply-To: <1546846968-7372-11-git-send-email-christopher.w.clark@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Christopher Clark Cc: Stefano Stabellini , Wei Liu , Ross Philipson , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Jason Andryuk , Ian Jackson , Julien Grall , Tim Deegan , Daniel Smith , Rich Persaud , Paul Durrant , Jan Beulich , xen-devel , James McKenzie , Eric Chanudet , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org IE9uIE1vbiwgSmFuIDcsIDIwMTkgYXQgODo0NCBBTSBDaHJpc3RvcGhlciBDbGFyawo8Y2hyaXN0 b3BoZXIudy5jbGFya0BnbWFpbC5jb20+IHdyb3RlOgo+Cj4gUXVlcmllcyBmb3IgZGF0YSBhYm91 dCBzcGFjZSBhdmFpbGFiaWxpdHkgaW4gcmVnaXN0ZXJlZCByaW5ncyBhbmQKPiBjYXVzZXMgbm90 aWZpY2F0aW9uIHRvIGJlIHNlbnQgd2hlbiBzcGFjZSBoYXMgYmVjb21lIGF2YWlsYWJsZS4KPgo+ IFRoZSBoeXBlcmNhbGwgb3AgcG9wdWxhdGVzIGEgc3VwcGxpZWQgZGF0YSBzdHJ1Y3R1cmUgd2l0 aCBpbmZvcm1hdGlvbiBhYm91dAo+IHJpbmcgc3RhdGUsIGFuZCBpZiBpbnN1ZmZpY2VudCBzcGFj ZSBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGluIGEgZ2l2ZW4gcmluZywKCmluc3VmZmljaWVudAoK PiB0aGUgaHlwZXJ2aXNvciB3aWxsIHJlY29yZCB0aGUgZG9tYWluJ3MgZXhwcmVzc2VkIGludGVy ZXN0IGFuZCBub3RpZnkgaXQKPiB3aGVuIGl0IG9ic2VydmVzIHRoYXQgc3BhY2UgaGFzIGJlY29t ZSBhdmFpbGFibGUuCj4KPiBDaGVja3MgZm9yIGZyZWUgc3BhY2Ugb2NjdXIgd2hlbiB0aGlzIG5v dGlmeSBvcCBpcyBpbnZva2VkLCBzbyBpdCBtYXkgYmUKPiBpbnRlbnRpb25hbGx5IGludm9rZWQg d2l0aCBubyBkYXRhIHN0cnVjdHVyZSB0byBwb3B1bGF0ZQo+IChpZS4gYSBOVUxMIGFyZ3VtZW50 KSB0byB0cmlnZ2VyIHN1Y2ggYSBjaGVjayBhbmQgY29uc2VxdWVudCBub3RpZmljYXRpb25zLgo+ Cj4gTGltaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vdGlmeSByZXF1ZXN0cyBpbiBhIHNpbmds ZSBvcGVyYXRpb24gdG8gYQo+IHNpbXBsZSBmaXhlZCBsaW1pdCBvZiAyNTYuCj4KPiBTaWduZWQt b2ZmLWJ5OiBDaHJpc3RvcGhlciBDbGFyayA8Y2hyaXN0b3BoZXIuY2xhcms2QGJhZXN5c3RlbXMu Y29tPgo+IC0tLQo+IHYyIGZlZWRiYWNrIEphbjogZHJvcCBjb29raWUsIGltcGxlbWVudCB0ZWFy ZG93bgo+IHYyIG5vdGlmeTogYWRkIGZsYWcgdG8gaW5kaWNhdGUgcmluZyBpcyBzaGFyZWQKPiB2 MiBhcmd1bWVudCBuYW1lIGZvciBmaWxsX3JpbmdfZGF0YSBhcmcgaXMgbm93IGN1cnJkCj4gdjIg c2VsZjogY2hlY2sgcmluZyBzaXplIHZzIHJlcXVlc3QgYW5kIGZsYWcgZXJyb3IgcmF0aGVyIHRo YW4gcXVldWUgc2lnbmFsCj4gdjIgZmVlZGJhY2sgSmFuOiBkcm9wICdtZXNzYWdlJyBmcm9tICdh cmdvX21lc3NhZ2Vfb3AnCj4gdjIgc2VsZjogc2ltcGxpZnkgc2lnbmFsX2RvbWlkLCBkcm9wIHVu bmVjZXNzYXJ5IGxhYmVsICsgZ290bwo+IHYyIHNlbGY6IHNraXAgdGhlIGNvb2tpZSBjaGVjayBp biBwZW5kaW5nX2NhbmNlbAo+IHYyIHNlbGY6IGltcGxlbWVudCBucGVuZGluZyBsaW1pdCBvbiBu dW1iZXIgb2YgcGVuZGluZyBlbnRyaWVzCj4gdjEgZmVlZGJhY2sgIzE2IEphbjogc2FuaXRpemVf cmluZyBpbiByaW5nYnVmX3BheWxvYWRfc3BhY2UKPiB2MiBzZWxmOiBpbmxpbmUgZmlsbF9yaW5n X2RhdGFfYXJyYXkKPiB2MiBzZWxmOiBhdm9pZCByZXRlc3RpbmcgZHN0X2QgZm9yIHB1dF9kb21h aW4KPiB2MiBzZWxmL0phbjogcmVtb3ZlIHVzZSBvZiBtYWdpYyB2ZXJpZmljYXRpb24gZmllbGQg YW5kIHRpZHkgdXAKPiB2MSBmZWVkYmFjayAjMTYgSmFuOiByZW1vdmUgdGVzdGluZyBvZiBtYWdp YyBpbiBndWVzdC1zdXBwbGllZCBzdHJ1Y3R1cmUKPiB2MiBzZWxmOiBzL2FyZ29fcGVuZGluZ19l bnQvcGVuZGluZ19lbnQvZwo+IHYyIGZlZWRiYWNrIHYxIzEzIFJvZ2VyOiB1c2UgT1Mtc3VwcGxp ZWQgcm91bmR1cDsgZHJvcCBmcm9tIHB1YmxpYyBoZWFkZXIKPiB2MSwyIGZlZWRiYWNrIEphbi9S b2dlci9QYXVsOiBkcm9wIGVycm5vIHJldHVybmluZyBndWVzdCBhY2Nlc3MgZnVuY3Rpb25zCj4g djEgZmVlZGJhY2sgUm9nZXIsIEphbjogZHJvcCBhcmdvIHByZWZpeCBvbiBzdGF0aWMgZnVuY3Rp b25zCj4gdjIgc2VsZjogcmVkdWNlIGluZGVudGF0aW9uIHZpYSBnb3RvIG91dCBpZiBhcmcgTlVM TAo+IHYxIGZlZWRiYWNrICMxMyBKYW46IHJlc29sdmUgY2hlY2tpbmcgb2YgYXJyYXkgaGFuZGxl IGFuZCB1c2Ugb2YgX19jb3B5Cj4KPiB2MSAjNSAoIzE2KSBmZWVkYmFjayBQYXVsOiBub3RpZnkg b3A6IHVzZSBjdXJyZCBpbiBkb19hcmdvX21lc3NhZ2Vfb3AKPiB2MSAjNSAoIzE2KSBmZWVkYmFj ayBQYXVsOiBub3RpZnkgb3A6IHVzZSBjdXJyZCBpbiBhcmdvX25vdGlmeQo+IHYxICM1ICgjMTYp IGZlZWRiYWNrIFBhdWw6IG5vdGlmeSBvcDogdXNlIGN1cnJkIGluIGFyZ29fbm90aWZ5X2NoZWNr X3BlbmRpbmcKPiB2MSAjNSAoIzE2KSBmZWVkYmFjayBQYXVsOiBub3RpZnkgb3A6IHVzZSBjdXJy ZCBpbiBhcmdvX2ZpbGxfcmluZ19kYXRhX2FycmF5Cj4gdjEgIzEzICgjMTYpIGZlZWRiYWNrIFBh dWw6IG5vdGlmeSBvcDogZG8vd2hpbGU6IHJlaW5kZW50IG9ubHkKPiB2MSAjMTMgKCMxNikgZmVl ZGJhY2sgUGF1bDogbm90aWZ5IG9wOiBkby93aGlsZTogZ290bwo+IHYxIDogYWRkIGNvbXBhdCB4 bGF0LmxzdCBlbnRyaWVzCj4gdjE6IGFkZCBkZWZpbml0aW9uIGZvciBjb3B5X2ZpZWxkX2Zyb21f Z3Vlc3RfZXJybm8KPiB2MSAjMTMgZmVlZGJhY2sgSmFuOiBtYWtlICdyaW5nIGRhdGEnIGNvbW1l bnQgY29tcGx5IHdpdGggc2luZ2xlLWxpbmUgc3R5bGUKPiB2MSBmZWVkYmFjayAjMTMgSmFuOiB1 c2UgX19jb3B5OyBzbyBkZWZpbmUgYW5kIHVzZSBfX2NvcHlfZmllbGRfdG9fZ3Vlc3RfZXJybm8K PiB2MTogIzEzIGZlZWRiYWNrIEphbjogcHVibGljIG5hbWVzcGFjZTogcHJlZml4IHdpdGggeGVu Cj4gdjE6ICMxMyBmZWVkYmFjayBKYW46IGFkZCBibGFuayBsaW5lIGFmdGVyIGNhc2UgaW4gZG9f YXJnb19tZXNzYWdlX29wCj4gdjE6IHNlbGY6IHJlbmFtZSBlbnQgaWQgdG8gZG9tYWluX2lkCj4g djE6IHNlbGY6IGVudCBpZC0+IGRvbWFpbl9pZAo+IHYxOiBzZWxmOiBkcm9wIHNpZ25hbCBpZiBk b21haW5fY29va2llIG1pc21hdGNoZXMKPiB2MS4gZmVlZGJhY2sgIzE1IEphbjogbWFrZSBsb29w IGkgdW5zaWduZWQKPiB2MS4gc2VsZjogZHJvcCB1bm5lY2Vzc2FyeSBtYigpIGluIGFyZ29fbm90 aWZ5X2NoZWNrX3BlbmRpbmcKPiB2MS4gc2VsZjogYWRkIGJsYW5rIGxpbmUKPiB2MSAjMTYgZmVl ZGJhY2sgSmFuOiBjb25zdCBkb21haW4gYXJnIHRvICthcmdvX2ZpbGxfcmluZ19kYXRhCj4gdjEu IGZlZWRiYWNrICMxNSBKYW46IGNoZWNrIHVudXN1ZWQgaHlwZXJjYWxsIGFyZ3MgYXJlIHplcm8K PiB2MSBmZWVkYmFjayAjMTYgSmFuOiBhZGQgY29tbWVudCBvbiBzcGFjZSBhdmFpbGFibGUgc2ln bmFsIHBvbGljeQo+IHYxLiBmZWVkYmFjayAjMTYgSmFuOiBtb3ZlIGRlY2xyLCBkcm9wIGJyYWNl cywgbG93ZXIgaW5kZW50Cj4gdjEuIGZlZWRiYWNrICMxOCBKYW46IG1lbGQgdGhlIHJlc291cmNl IGxpbWl0cyBpbnRvIHRoZSBtYWluIGNvbW1pdAo+IHYxLiBmZWVkYmFjayAjMTYgSmFuOiBjbGFy aWZ5IHVzZSBvZiBtYWdpYyBmaWVsZAo+IHYxLiBzZWxmOiB1c2Ugc2luZ2xlIGNvcHkgdG8gcmVh ZCBub3RpZnkgcmluZyBkYXRhIHN0cnVjdAo+IHYxOiBhcmdvX2ZpbGxfcmluZ19kYXRhOiBmaXgg ZHByaW50ayB0eXBlcyBmb3IgcG9ydCBmaWVsZAo+IHYxOiBzZWxmOiB1c2UgJXggZm9yIHByaW50 aW5nIHBvcnQgYXMgcGVyIG90aGVyIHByaW50IHNpdGVzCj4gdjEuIGZlZWRiYWNrIEphbjogYWRk IGNvbW1lbnRzIGV4cGxhaW5pbmcgcmluZyBmdWxsIHZzIGVtcHR5Cj4gdjEuIGZvbGxvd2luZyBK YW46IGZpeCBhcmdvX3JpbmdidWZfcGF5bG9hZF9zcGFjZSBjYWxjdWxhdGlvbiBmb3IgZW1wdHkg cmluZwo+Cj4gIHhlbi9jb21tb24vYXJnby5jICAgICAgICAgfCAzNTkgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICB4ZW4vaW5jbHVkZS9wdWJsaWMvYXJn by5oIHwgIDY3ICsrKysrKysrKwo+ICB4ZW4vaW5jbHVkZS94bGF0LmxzdCAgICAgIHwgICAyICsK PiAgMyBmaWxlcyBjaGFuZ2VkLCA0MjggaW5zZXJ0aW9ucygrKQo+Cj4gZGlmZiAtLWdpdCBhL3hl bi9jb21tb24vYXJnby5jIGIveGVuL2NvbW1vbi9hcmdvLmMKPiBpbmRleCA0NTQ4NDM1Li4zN2Vi MjkxIDEwMDY0NAo+IC0tLSBhL3hlbi9jb21tb24vYXJnby5jCj4gKysrIGIveGVuL2NvbW1vbi9h cmdvLmMKPiBAQCAtMjksNiArMjksNyBAQAo+ICAjaW5jbHVkZSA8cHVibGljL2FyZ28uaD4KPgo+ ICAjZGVmaW5lIE1BWF9SSU5HU19QRVJfRE9NQUlOICAgICAgICAgICAgMTI4VQo+ICsjZGVmaW5l IE1BWF9OT1RJRllfQ09VTlQgICAgICAgICAgICAgICAgMjU2VQo+ICAjZGVmaW5lIE1BWF9QRU5E SU5HX1BFUl9SSU5HICAgICAgICAgICAgIDMyVQo+Cj4gIC8qIEFsbCBtZXNzYWdlcyBvbiB0aGUg cmluZyBhcmUgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgdGhlIHNsb3Qgc2l6ZS4gKi8KPiBAQCAt NDMsNiArNDQsOCBAQCBERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5fYXJnb19pb3ZfdCk7Cj4g IERFRklORV9YRU5fR1VFU1RfSEFORExFKHhlbl9hcmdvX3BhZ2VfZGVzY3JfdCk7Cj4gIERFRklO RV9YRU5fR1VFU1RfSEFORExFKHhlbl9hcmdvX3JlZ2lzdGVyX3JpbmdfdCk7Cj4gIERFRklORV9Y RU5fR1VFU1RfSEFORExFKHhlbl9hcmdvX3JpbmdfdCk7Cj4gK0RFRklORV9YRU5fR1VFU1RfSEFO RExFKHhlbl9hcmdvX3JpbmdfZGF0YV90KTsKPiArREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoeGVu X2FyZ29fcmluZ19kYXRhX2VudF90KTsKPiAgREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoeGVuX2Fy Z29fc2VuZF9hZGRyX3QpOwo+ICBERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5fYXJnb191bnJl Z2lzdGVyX3JpbmdfdCk7Cj4KPiBAQCAtMjMxLDYgKzIzNCwxMyBAQCBzdGF0aWMgREVGSU5FX1JX TE9DSyhhcmdvX2xvY2spOyAvKiBMMSAqLwo+ICAjZGVmaW5lIGFyZ29fZHByaW50ayhmb3JtYXQs IC4uLiApICgodm9pZCkwKQo+ICAjZW5kaWYKPgo+ICtzdGF0aWMgc3RydWN0IGFyZ29fcmluZ19p bmZvICoKPiArcmluZ19maW5kX2luZm8oY29uc3Qgc3RydWN0IGRvbWFpbiAqZCwgY29uc3Qgc3Ry dWN0IGFyZ29fcmluZ19pZCAqaWQpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBhcmdvX3JpbmdfaW5m byAqCj4gK3JpbmdfZmluZF9pbmZvX2J5X21hdGNoKGNvbnN0IHN0cnVjdCBkb21haW4gKmQsIHVp bnQzMl90IHBvcnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgcGFydG5lcl9p ZCk7CgpDYW4geW91IHBsYWNlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIHN1Y2ggdGhhdCB5b3UgZG9u J3QgbmVlZCBwcm90b3R5cGVzIGZvciB0aGVtPwoKPiArCj4gIC8qCj4gICAqIFRoaXMgaGFzaCBm dW5jdGlvbiBpcyB1c2VkIHRvIGRpc3RyaWJ1dGUgcmluZ3Mgd2l0aGluIHRoZSBwZXItZG9tYWlu Cj4gICAqIGhhc2ggdGFibGVzIChkLT5hcmdvLT5yaW5nX2hhc2ggYW5kIGQtPmFyZ29fc2VuZF9o YXNoKS4gVGhlIGhhc2ggdGFibGUKPiBAQCAtMjY1LDYgKzI3NSwxNyBAQCBzaWduYWxfZG9tYWlu KHN0cnVjdCBkb21haW4gKmQpCj4gIH0KPgo+ICBzdGF0aWMgdm9pZAo+ICtzaWduYWxfZG9taWQo ZG9taWRfdCBkb21haW5faWQpCj4gK3sKPiArICAgIHN0cnVjdCBkb21haW4gKmQgPSBnZXRfZG9t YWluX2J5X2lkKGRvbWFpbl9pZCk7CgpOZXdsaW5lLgoKPiArICAgIGlmICggIWQgKQo+ICsgICAg ICAgIHJldHVybjsKPiArCj4gKyAgICBzaWduYWxfZG9tYWluKGQpOwo+ICsgICAgcHV0X2RvbWFp bihkKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAgcmluZ191bm1hcChzdHJ1Y3QgYXJnb19y aW5nX2luZm8gKnJpbmdfaW5mbykKPiAgewo+ICAgICAgdW5zaWduZWQgaW50IGk7Cj4gQEAgLTQ3 Myw2ICs0OTQsNjIgQEAgZ2V0X3Nhbml0aXplZF9yaW5nKHhlbl9hcmdvX3JpbmdfdCAqcmluZywg c3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8pCj4gICAgICByZXR1cm4gMDsKPiAgfQo+ Cj4gK3N0YXRpYyB1aW50MzJfdAo+ICtyaW5nYnVmX3BheWxvYWRfc3BhY2Uoc3RydWN0IGRvbWFp biAqZCwgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8pCj4gK3sKPiArICAgIHhlbl9h cmdvX3JpbmdfdCByaW5nOwo+ICsgICAgdWludDMyX3QgbGVuOwo+ICsgICAgaW50MzJfdCByZXQ7 CgpZb3UgdXNlIGEgc2lnbmVkIHR5cGUgdG8gaW50ZXJuYWxseSBzdG9yZSB0aGUgcmV0dXJuIHZh bHVlLCBidXQgdGhlCnJldHVybiB0eXBlIGZyb20gdGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyB1bnNp Z25lZC4gSXMgaXQgZ3VhcmFudGVlZAp0aGF0IHJldCA8IElOVDMyX01BWCBhbHdheXM/Cgo+ICsK PiArICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcmluZ19pbmZvLT5sb2NrKSk7Cj4gKwo+ICsg ICAgbGVuID0gcmluZ19pbmZvLT5sZW47Cj4gKyAgICBpZiAoICFsZW4gKQo+ICsgICAgICAgIHJl dHVybiAwOwo+ICsKPiArICAgIHJldCA9IGdldF9zYW5pdGl6ZWRfcmluZygmcmluZywgcmluZ19p bmZvKTsKPiArICAgIGlmICggcmV0ICkKPiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICBh cmdvX2RwcmludGsoInNhbml0aXplZCByaW5nYnVmX3BheWxvYWRfc3BhY2U6IHR4X3B0cj0lZCBy eF9wdHI9JWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgcmluZy50eF9wdHIsIHJpbmcucnhfcHRy KTsKPiArCj4gKyAgICAvKgo+ICsgICAgICogcnhfcHRyID09IHR4X3B0ciBtZWFucyB0aGF0IHRo ZSByaW5nIGhhcyBiZWVuIGVtcHRpZWQsIHNvIHJldHVybgo+ICsgICAgICogdGhlIG1heGltdW0g cGF5bG9hZCBzaXplIHRoYXQgY2FuIGJlIGFjY2VwdGVkIC0tIHNlZSBtZXNzYWdlIHNpemUKPiAr ICAgICAqIGNoZWNraW5nIGxvZ2ljIGluIHRoZSBlbnRyeSB0byByaW5nYnVmX2luc2VydCB3aGlj aCBlbnN1cmVzIHRoYXQKPiArICAgICAqIHRoZXJlIGlzIGFsd2F5cyBvbmUgbWVzc2FnZSBzbG90 IChvZiBzaXplIFJPVU5EVVBfTUVTU0FHRSgxKSkgbGVmdAo+ICsgICAgICogYXZhaWxhYmxlLCBw cmV2ZW50aW5nIGEgcmluZyBmcm9tIGJlaW5nIGVudGlyZWx5IGZpbGxlZC4gVGhpcyBlbnN1cmVz Cj4gKyAgICAgKiB0aGF0IG1hdGNoaW5nIHJpbmcgaW5kZXhlcyBhbHdheXMgaW5kaWNhdGUgYW4g ZW1wdHkgcmluZyBhbmQgbm90IGEKPiArICAgICAqIGZ1bGwgb25lLgo+ICsgICAgICogVGhlIHN1 YnRyYWN0aW9uIGhlcmUgd2lsbCBub3QgdW5kZXJmbG93IGR1ZSB0byBtaW5pbXVtIHNpemUgY29u c3RyYWludHMKPiArICAgICAqIGVuZm9yY2VkIG9uIHJpbmcgc2l6ZSBlbHNld2hlcmUuCj4gKyAg ICAgKi8KPiArICAgIGlmICggcmluZy5yeF9wdHIgPT0gcmluZy50eF9wdHIgKQo+ICsgICAgICAg IHJldHVybiBsZW4gLSBzaXplb2Yoc3RydWN0IHhlbl9hcmdvX3JpbmdfbWVzc2FnZV9oZWFkZXIp Cj4gKyAgICAgICAgICAgICAgICAgICAtIFJPVU5EVVBfTUVTU0FHRSgxKTsKCldoeSBub3QgZG8g c29tZXRoaW5nIGxpa2U6CgpyZXQgPSByaW5nLnJ4X3B0ciAtIHJpbmcudHhfcHRyOwppZiAoIHJl dCA8PSAwKQogICAgcmV0ICs9IGxlbjsKCkluc3RlYWQgb2YgdGhpcyBlYXJseSByZXR1cm4/CgpU aGUgb25seSBkaWZmZXJlbmNlIHdoZW4gdGhlIHJpbmcgaXMgZnVsbCBpcyB0aGF0IGxlbiBzaG91 bGQgYmUgdXNlZAppbnN0ZWFkIG9mIHRoZSBwdHIgZGlmZmVyZW5jZS4KCj4gKwo+ICsgICAgcmV0 ID0gcmluZy5yeF9wdHIgLSByaW5nLnR4X3B0cjsKPiArICAgIGlmICggcmV0IDwgMCApCj4gKyAg ICAgICAgcmV0ICs9IGxlbjsKPiArCj4gKyAgICAvKgo+ICsgICAgICogVGhlIG1heGltdW0gc2l6 ZSBwYXlsb2FkIGZvciBhIG1lc3NhZ2UgdGhhdCB3aWxsIGJlIGFjY2VwdGVkIGlzOgo+ICsgICAg ICogKHRoZSBhdmFpbGFibGUgc3BhY2UgYmV0d2VlbiB0aGUgcmluZyBpbmRleGVzKQo+ICsgICAg ICogICAgbWludXMgKHNwYWNlIGZvciBhIG1lc3NhZ2UgaGVhZGVyKQo+ICsgICAgICogICAgbWlu dXMgKHNwYWNlIGZvciBvbmUgbWVzc2FnZSBzbG90KQo+ICsgICAgICogc2luY2UgcmluZ2J1Zl9p bnNlcnQgcmVxdWlyZXMgdGhhdCBvbmUgbWVzc2FnZSBzbG90IGJlIGxlZnQKPiArICAgICAqIHVu ZmlsbGVkLCB0byBhdm9pZCBmaWxsaW5nIHRoZSByaW5nIHRvIGNhcGFjaXR5IGFuZCBjb25mdXNp bmcgYSBmdWxsCj4gKyAgICAgKiByaW5nIHdpdGggYW4gZW1wdHkgb25lLgo+ICsgICAgICogU2lu Y2UgdGhlIHJpbmcgaW5kZXhlcyBhcmUgc2FuaXRpemVkLCB0aGUgdmFsdWUgaW4gcmV0IGlzIGFs aWduZWQsIHNvCj4gKyAgICAgKiB0aGUgc2ltcGxlIHN1YnRyYWN0aW9uIGhlcmUgd29ya3MgdG8g cmV0dXJuIHRoZSBhbGlnbmVkIHZhbHVlIG5lZWRlZDoKPiArICAgICAqLwo+ICsgICAgcmV0IC09 IHNpemVvZihzdHJ1Y3QgeGVuX2FyZ29fcmluZ19tZXNzYWdlX2hlYWRlcik7Cj4gKyAgICByZXQg LT0gUk9VTkRVUF9NRVNTQUdFKDEpOwo+ICsKPiArICAgIHJldHVybiAocmV0IDwgMCkgPyAwIDog cmV0Owo+ICt9Cj4gKwo+ICAvKgo+ICAgKiBpb3ZfY291bnQgcmV0dXJucyBpdHMgY291bnQgb24g c3VjY2VzcyB2aWEgYW4gb3V0IHZhcmlhYmxlIHRvIGF2b2lkCj4gICAqIHBvdGVudGlhbCBmb3Ig YSBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgdG8gYmUgdXNlZCBpbmNvcnJlY3RseQo+IEBAIC04MTIs NiArODg5LDYxIEBAIHBlbmRpbmdfcmVtb3ZlX2FsbChzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJp bmdfaW5mbykKPiAgICAgIHJpbmdfaW5mby0+bnBlbmRpbmcgPSAwOwo+ICB9Cj4KPiArc3RhdGlj IHZvaWQKPiArcGVuZGluZ19ub3RpZnkoc3RydWN0IGhsaXN0X2hlYWQgKnRvX25vdGlmeSkKPiAr ewo+ICsgICAgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpuZXh0Owo+ICsgICAgc3RydWN0IHBl bmRpbmdfZW50ICplbnQ7Cj4gKwo+ICsgICAgQVNTRVJUKHJ3X2lzX2xvY2tlZCgmYXJnb19sb2Nr KSk7Cj4gKwo+ICsgICAgaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnQsIG5vZGUsIG5leHQs IHRvX25vdGlmeSwgbm9kZSkKPiArICAgIHsKPiArICAgICAgICBobGlzdF9kZWwoJmVudC0+bm9k ZSk7Cj4gKyAgICAgICAgc2lnbmFsX2RvbWlkKGVudC0+ZG9tYWluX2lkKTsKPiArICAgICAgICB4 ZnJlZShlbnQpOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtwZW5kaW5nX2Zp bmQoY29uc3Qgc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2lu Zm8sCj4gKyAgICAgICAgICAgICB1aW50MzJfdCBwYXlsb2FkX3NwYWNlLCBzdHJ1Y3QgaGxpc3Rf aGVhZCAqdG9fbm90aWZ5KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5l eHQ7Cj4gKyAgICBzdHJ1Y3QgcGVuZGluZ19lbnQgKmVudDsKPiArCj4gKyAgICBBU1NFUlQocndf aXNfbG9ja2VkKCZkLT5hcmdvLT5sb2NrKSk7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIFRPRE86 IEN1cnJlbnQgcG9saWN5IGhlcmUgaXMgdG8gc2lnbmFsIF9hbGxfIG9mIHRoZSB3YWl0aW5nIGRv bWFpbnMKPiArICAgICAqICAgICAgIGludGVyZXN0ZWQgaW4gc2VuZGluZyBhIG1lc3NhZ2Ugb2Yg c2l6ZSBsZXNzIHRoYW4gcGF5bG9hZF9zcGFjZS4KPiArICAgICAqCj4gKyAgICAgKiBUaGlzIGlz IGxpa2VseSB0byBiZSBzdWJvcHRpbWFsLCBzaW5jZSBvbmNlIG9uZSBvZiB0aGVtIGhhcyBhZGRl ZAo+ICsgICAgICogdGhlaXIgbWVzc2FnZSB0byB0aGUgcmluZywgdGhlcmUgbWF5IHdlbGwgYmUg aW5zdWZmaWNpZW50IHJvb20KPiArICAgICAqIGF2YWlsYWJsZSBmb3IgYW55IG9mIHRoZSBvdGhl cnMgdG8gdHJhbnNtaXQsIG1lYW5pbmcgdGhhdCB0aGV5IHdlcmUKPiArICAgICAqIHdva2VuIGlu IHZhaW4sIHdoaWNoIGNyZWF0ZWQgZXh0cmEgd29yayBqdXN0IHRvIHJlcXVldWUgdGhlaXIgd2Fp dC4KPiArICAgICAqCj4gKyAgICAgKiBSZXRhaW4gdGhpcyBzaW1wbGUgcG9saWN5IGZvciBub3cg c2luY2UgaXQgYXQgbGVhc3QgYXZvaWRzIHN0YXJ2aW5nIGEKPiArICAgICAqIGRvbWFpbiBvZiBh dmFpbGFibGUgc3BhY2Ugbm90aWZpY2F0aW9ucyBiZWNhdXNlIG9mIGEgcG9saWN5IHRoYXQgb25s eQo+ICsgICAgICogbm90aWZpZWQgb3RoZXIgZG9tYWlucyBpbnN0ZWFkLiBJbXByb3ZlbWVudCBt YXkgYmUgcG9zc2libGU7Cj4gKyAgICAgKiBpbnZlc3RpZ2F0aW9uIHJlcXVpcmVkLgo+ICsgICAg ICovCj4gKwo+ICsgICAgc3Bpbl9sb2NrKCZyaW5nX2luZm8tPmxvY2spOwo+ICsgICAgaGxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShlbnQsIG5vZGUsIG5leHQsICZyaW5nX2luZm8tPnBlbmRpbmcs IG5vZGUpCj4gKyAgICB7Cj4gKyAgICAgICAgaWYgKCBwYXlsb2FkX3NwYWNlID49IGVudC0+bGVu ICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGlmICggcmluZ19pbmZvLT5pZC5wYXJ0bmVy X2lkID09IFhFTl9BUkdPX0RPTUlEX0FOWSApCj4gKyAgICAgICAgICAgICAgICB3aWxkY2FyZF9w ZW5kaW5nX2xpc3RfcmVtb3ZlKGVudC0+ZG9tYWluX2lkLCBlbnQpOwo+ICsgICAgICAgICAgICBo bGlzdF9kZWwoJmVudC0+bm9kZSk7Cj4gKyAgICAgICAgICAgIHJpbmdfaW5mby0+bnBlbmRpbmct LTsKPiArICAgICAgICAgICAgaGxpc3RfYWRkX2hlYWQoJmVudC0+bm9kZSwgdG9fbm90aWZ5KTsK PiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBzcGluX3VubG9jaygmcmluZ19pbmZvLT5sb2Nr KTsKPiArfQo+ICsKPiAgc3RhdGljIGludAo+ICBwZW5kaW5nX3F1ZXVlKHN0cnVjdCBhcmdvX3Jp bmdfaW5mbyAqcmluZ19pbmZvLCBkb21pZF90IHNyY19pZCwKPiAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgbGVuKQo+IEBAIC04NzQsNiArMTAwNiwyNyBAQCBwZW5kaW5nX3JlcXVldWUoc3Ry dWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8sIGRvbWlkX3Qgc3JjX2lkLAo+ICB9Cj4KPiAg c3RhdGljIHZvaWQKPiArcGVuZGluZ19jYW5jZWwoc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5n X2luZm8sIGRvbWlkX3Qgc3JjX2lkKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9k ZSwgKm5leHQ7Cj4gKyAgICBzdHJ1Y3QgcGVuZGluZ19lbnQgKmVudDsKPiArCj4gKyAgICBBU1NF UlQoc3Bpbl9pc19sb2NrZWQoJnJpbmdfaW5mby0+bG9jaykpOwo+ICsKPiArICAgIGhsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUoZW50LCBub2RlLCBuZXh0LCAmcmluZ19pbmZvLT5wZW5kaW5nLCBu b2RlKQo+ICsgICAgewo+ICsgICAgICAgIGlmICggZW50LT5kb21haW5faWQgPT0gc3JjX2lkICkK PiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGlmICggcmluZ19pbmZvLT5pZC5wYXJ0bmVyX2lk ID09IFhFTl9BUkdPX0RPTUlEX0FOWSApCj4gKyAgICAgICAgICAgICAgICB3aWxkY2FyZF9wZW5k aW5nX2xpc3RfcmVtb3ZlKGVudC0+ZG9tYWluX2lkLCBlbnQpOwo+ICsgICAgICAgICAgICBobGlz dF9kZWwoJmVudC0+bm9kZSk7Cj4gKyAgICAgICAgICAgIHhmcmVlKGVudCk7Cj4gKyAgICAgICAg ICAgIHJpbmdfaW5mby0+bnBlbmRpbmctLTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkCj4gIHdpbGRjYXJkX3JpbmdzX3BlbmRpbmdfcmVtb3ZlKHN0cnVjdCBk b21haW4gKmQpCj4gIHsKPiAgICAgIHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbmV4dDsKPiBA QCAtOTk0LDYgKzExNDcsOTIgQEAgcGFydG5lcl9yaW5nc19yZW1vdmUoc3RydWN0IGRvbWFpbiAq c3JjX2QpCj4gIH0KPgo+ICBzdGF0aWMgaW50Cj4gK2ZpbGxfcmluZ19kYXRhKGNvbnN0IHN0cnVj dCBkb21haW4gKmN1cnJkLAo+ICsgICAgICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFKHhlbl9h cmdvX3JpbmdfZGF0YV9lbnRfdCkgZGF0YV9lbnRfaG5kKQo+ICt7Cj4gKyAgICB4ZW5fYXJnb19y aW5nX2RhdGFfZW50X3QgZW50Owo+ICsgICAgc3RydWN0IGRvbWFpbiAqZHN0X2Q7Cj4gKyAgICBz dHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbzsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsg ICAgQVNTRVJUKHJ3X2lzX2xvY2tlZCgmYXJnb19sb2NrKSk7Cj4gKwo+ICsgICAgcmV0ID0gX19j b3B5X2Zyb21fZ3Vlc3QoJmVudCwgZGF0YV9lbnRfaG5kLCAxKSA/IC1FRkFVTFQgOiAwOwo+ICsg ICAgaWYgKCByZXQgKQo+ICsgICAgICAgIGdvdG8gb3V0OwoKaWYgKCBfX2NvcHlfZnJvbV9ndWVz dCgmZW50LCBkYXRhX2VudF9obmQsIDEpICkKICAgIHJldHVybiAtRUZBVUxUOwoKQW5kIHlvdSBj YW4gZ2V0IHJpZCBvZiB0aGUgb3V0IGxhYmVsLgoKPiArCj4gKyAgICBhcmdvX2RwcmludGsoImZp bGxfcmluZ19kYXRhOiBlbnQucmluZy5kb21haW49JXUsZW50LnJpbmcucG9ydD0leFxuIiwKPiAr ICAgICAgICAgICAgICAgICBlbnQucmluZy5kb21haW5faWQsIGVudC5yaW5nLnBvcnQpOwo+ICsK PiArICAgIGVudC5mbGFncyA9IDA7CgpQbGVhc2UgbWVtc2V0IGVudCB0byAwIG9yIGluaXRpYWxp emUgaXQgdG8geyB9LCBvciBlbHNlIHlvdSBhcmUKbGVha2luZyBoeXBlcnZpc29yIHN0YWNrIGRh dGEgdG8gdGhlIGd1ZXN0IGluIHRoZSBwYWRkaW5nIGZpZWxkLgoKPiArCj4gKyAgICBkc3RfZCA9 IGdldF9kb21haW5fYnlfaWQoZW50LnJpbmcuZG9tYWluX2lkKTsKPiArICAgIGlmICggZHN0X2Qg KQo+ICsgICAgewo+ICsgICAgICAgIGlmICggZHN0X2QtPmFyZ28gKQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgICAgcmVhZF9sb2NrKCZkc3RfZC0+YXJnby0+bG9jayk7Cj4gKwo+ICsgICAgICAg ICAgICByaW5nX2luZm8gPSByaW5nX2ZpbmRfaW5mb19ieV9tYXRjaChkc3RfZCwgZW50LnJpbmcu cG9ydCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3VycmQtPmRvbWFpbl9pZCk7Cj4gKyAgICAgICAgICAgIGlmICggcmluZ19pbmZvICkKPiArICAg ICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgdWludDMyX3Qgc3BhY2VfYXZhaWw7Cj4gKwo+ ICsgICAgICAgICAgICAgICAgZW50LmZsYWdzIHw9IFhFTl9BUkdPX1JJTkdfREFUQV9GX0VYSVNU UzsKPiArICAgICAgICAgICAgICAgIGVudC5tYXhfbWVzc2FnZV9zaXplID0gcmluZ19pbmZvLT5s ZW4gLQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qg eGVuX2FyZ29fcmluZ19tZXNzYWdlX2hlYWRlcikgLQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJPVU5EVVBfTUVTU0FHRSgxKTsKPiArCj4gKyAgICAgICAgICAgICAgICBp ZiAoIHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCA9PSBYRU5fQVJHT19ET01JRF9BTlkgKQo+ICsg ICAgICAgICAgICAgICAgICAgIGVudC5mbGFncyB8PSBYRU5fQVJHT19SSU5HX0RBVEFfRl9TSEFS RUQ7Cj4gKwo+ICsgICAgICAgICAgICAgICAgc3Bpbl9sb2NrKCZyaW5nX2luZm8tPmxvY2spOwo+ ICsKPiArICAgICAgICAgICAgICAgIHNwYWNlX2F2YWlsID0gcmluZ2J1Zl9wYXlsb2FkX3NwYWNl KGRzdF9kLCByaW5nX2luZm8pOwo+ICsKPiArICAgICAgICAgICAgICAgIGFyZ29fZHByaW50aygi ZmlsbF9yaW5nX2RhdGE6IHBvcnQ9JXggc3BhY2VfYXZhaWw9JXUiCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiBzcGFjZV93YW50ZWQ9JXVcbiIsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmluZ19pbmZvLT5pZC5wb3J0LCBzcGFjZV9hdmFpbCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbnQuc3BhY2VfcmVxdWlyZWQpOwo+ICsKPiArICAgICAgICAg ICAgICAgIC8qIERvIG5vdCBxdWV1ZSBhIG5vdGlmaWNhdGlvbiBmb3IgYW4gdW5hY2hpZXZhYmxl IHNpemUgKi8KPiArICAgICAgICAgICAgICAgIGlmICggZW50LnNwYWNlX3JlcXVpcmVkID4gZW50 Lm1heF9tZXNzYWdlX3NpemUgKQo+ICsgICAgICAgICAgICAgICAgICAgIGVudC5mbGFncyB8PSBY RU5fQVJHT19SSU5HX0RBVEFfRl9FTVNHU0laRTsKPiArICAgICAgICAgICAgICAgIGVsc2UgaWYg KCBzcGFjZV9hdmFpbCA+PSBlbnQuc3BhY2VfcmVxdWlyZWQgKQo+ICsgICAgICAgICAgICAgICAg ewo+ICsgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfY2FuY2VsKHJpbmdfaW5mbywgY3VycmQt PmRvbWFpbl9pZCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgZW50LmZsYWdzIHw9IFhFTl9BUkdP X1JJTkdfREFUQV9GX1NVRkZJQ0lFTlQ7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAg ICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICAgICAg cGVuZGluZ19yZXF1ZXVlKHJpbmdfaW5mbywgY3VycmQtPmRvbWFpbl9pZCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50LnNwYWNlX3JlcXVpcmVkKTsKPiArICAgICAg ICAgICAgICAgICAgICBlbnQuZmxhZ3MgfD0gWEVOX0FSR09fUklOR19EQVRBX0ZfUEVORElORzsK PiArICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICBzcGluX3VubG9jaygm cmluZ19pbmZvLT5sb2NrKTsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoIHNwYWNlX2F2YWls ID09IGVudC5tYXhfbWVzc2FnZV9zaXplICkKPiArICAgICAgICAgICAgICAgICAgICBlbnQuZmxh Z3MgfD0gWEVOX0FSR09fUklOR19EQVRBX0ZfRU1QVFk7Cj4gKwo+ICsgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgIHJlYWRfdW5sb2NrKCZkc3RfZC0+YXJnby0+bG9jayk7Cj4gKyAgICAgICAg fQo+ICsgICAgICAgIHB1dF9kb21haW4oZHN0X2QpOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9 IF9fY29weV9maWVsZF90b19ndWVzdChkYXRhX2VudF9obmQsICZlbnQsIGZsYWdzKSA/IC1FRkFV TFQgOiAwOwo+ICsgICAgaWYgKCByZXQgKQo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsKPiArICAg IHJldCA9IF9fY29weV9maWVsZF90b19ndWVzdChkYXRhX2VudF9obmQsICZlbnQsIG1heF9tZXNz YWdlX3NpemUpID8KPiArICAgICAgICAgICAgICAgIC1FRkFVTFQgOiAwOwo+ICsgb3V0Ogo+ICsg ICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICBmaW5kX3JpbmdfbWZuKHN0 cnVjdCBkb21haW4gKmQsIGdmbl90IGdmbiwgbWZuX3QgKm1mbikKPiAgewo+ICAgICAgcDJtX3R5 cGVfdCBwMm10Owo+IEBAIC0xNTI2LDYgKzE3NjUsMTExIEBAIHJlZ2lzdGVyX3Jpbmcoc3RydWN0 IGRvbWFpbiAqY3VycmQsCj4gICAgICByZXR1cm4gcmV0Owo+ICB9Cj4KPiArc3RhdGljIHZvaWQK PiArbm90aWZ5X3Jpbmcoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGFyZ29fcmluZ19pbmZvICpy aW5nX2luZm8sCj4gKyAgICAgICAgICAgIHN0cnVjdCBobGlzdF9oZWFkICp0b19ub3RpZnkpCj4g K3sKPiArICAgIHVpbnQzMl90IHNwYWNlOwo+ICsKPiArICAgIEFTU0VSVChyd19pc19sb2NrZWQo JmFyZ29fbG9jaykpOwo+ICsgICAgQVNTRVJUKHJ3X2lzX2xvY2tlZCgmZC0+YXJnby0+bG9jaykp Owo+ICsKPiArICAgIHNwaW5fbG9jaygmcmluZ19pbmZvLT5sb2NrKTsKPiArCj4gKyAgICBpZiAo IHJpbmdfaW5mby0+bGVuICkKPiArICAgICAgICBzcGFjZSA9IHJpbmdidWZfcGF5bG9hZF9zcGFj ZShkLCByaW5nX2luZm8pOwo+ICsgICAgZWxzZQo+ICsgICAgICAgIHNwYWNlID0gMDsKPiArCj4g KyAgICBzcGluX3VubG9jaygmcmluZ19pbmZvLT5sb2NrKTsKPiArCj4gKyAgICBpZiAoIHNwYWNl ICkKPiArICAgICAgICBwZW5kaW5nX2ZpbmQoZCwgcmluZ19pbmZvLCBzcGFjZSwgdG9fbm90aWZ5 KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArbm90aWZ5X2NoZWNrX3BlbmRpbmcoc3RydWN0 IGRvbWFpbiAqY3VycmQpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBpOwo+ICsgICAgSExJU1Rf SEVBRCh0b19ub3RpZnkpOwo+ICsKPiArICAgIEFTU0VSVChyd19pc19sb2NrZWQoJmFyZ29fbG9j aykpOwo+ICsKPiArICAgIHJlYWRfbG9jaygmY3VycmQtPmFyZ28tPmxvY2spOwo+ICsKPiArICAg IGZvciAoIGkgPSAwOyBpIDwgQVJHT19IVEFCTEVfU0laRTsgaSsrICkKPiArICAgIHsKPiArICAg ICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7Cj4gKyAgICAgICAgc3RydWN0IGFy Z29fcmluZ19pbmZvICpyaW5nX2luZm87Cj4gKwo+ICsgICAgICAgIGhsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUocmluZ19pbmZvLCBub2RlLCBuZXh0LAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmN1cnJkLT5hcmdvLT5yaW5nX2hhc2hbaV0sIG5vZGUpCj4gKyAgICAgICAg ewo+ICsgICAgICAgICAgICBub3RpZnlfcmluZyhjdXJyZCwgcmluZ19pbmZvLCAmdG9fbm90aWZ5 KTsKPiArICAgICAgICB9CgpObyBuZWVkIGZvciB0aGUgYnJhY2VzLgoKVGhhbmtzLCBSb2dlci4K Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=