From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rusty Russell Subject: Re: [PATCH 1/2] coroutine: New module Date: Tue, 29 Nov 2016 14:17:38 +1030 Message-ID: <87fumbhrqd.fsf@rustcorp.com.au> References: <20161128131830.5605-1-david@gibson.dropbear.id.au> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from ozlabs.org (ozlabs.org [103.22.144.67]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3tSVKb3LxgzDw6c for ; Tue, 29 Nov 2016 15:04:03 +1100 (AEDT) In-Reply-To: <20161128131830.5605-1-david@gibson.dropbear.id.au> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ccan-bounces+gclcc-ccan=m.gmane.org@lists.ozlabs.org Sender: "ccan" To: David Gibson , ccan@lists.ozlabs.org List-Id: ccan@lists.ozlabs.org RGF2aWQgR2lic29uIDxkYXZpZEBnaWJzb24uZHJvcGJlYXIuaWQuYXU+IHdyaXRlczoKPiArICog VGhpcyBjb2RlIGhhcyBoZWxwZXIgZnVuY3Rpb25zIGZvciBpbXBsZW1lbnRpbmcgY28tcm91dGlu ZXMsIHRoYXQKPiArICogaXMsIGV4cGxpY2l0IGNvLW9wZXJhdGl2ZSBjb250ZXh0IHN3aXRjaGlu Zy4gIEl0J3MgaW50ZW5kZWQgdG8KPiArICogcHJvdmlkZSBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkg dG8gCj4gKyAqCj4gKyAqIEF1dGhvcjogRGF2aWQgR2lic29uIDxkYXZpZEBnaWJzb24uZHJvcGJl YXIuaWQuYXU+CgpJIGJlbGlldmUgRGF2aWQgR2lic29uIHByb3ZpZGVzIG1vcmUgZnVuY3Rpb25h bGl0eSB0aGFuIHRoaXMgbW9kdWxlIDopCgo+ICtib29sIGNvcm91dGluZV9zdGFja192YWxpZChz dHJ1Y3QgY29yb3V0aW5lX3N0YWNrICpzdGFjaykKPiArewo+ICsJcmV0dXJuIHN0YWNrCj4gKwkJ JiYgKHN0YWNrLT5tYWdpYyA9PSBDT1JPVVRJTkVfU1RBQ0tfTUFHSUMpCj4gKwkJJiYgKHN0YWNr LT5zaXplID49IENPUk9VVElORV9NSU5fU1RLU1opOwo+ICt9CgpNeSAobG9vc2UpIHN0YW5kYXJk IGhlcmUgaGFzIGJlZW4gYXMgaW4gY2Nhbi9saXN0OiBhIHBhc3MtdGhyb3VnaApmdW5jdGlvbiB3 aGljaCBhYm9ydHMgaWYgYWJvcnRzdHJpbmcgaXMgbm9uLU5VTEw6CgogICAgICAgIHN0cnVjdCBj b3JvdXRpbmVfc3RhY2sgKmNvcm91dGluZV9zdGFja19jaGVjayhjb25zdCBzdHJ1Y3QgY29yb3V0 aW5lX3N0YWNrICpzdGFjaywgY29uc3QgY2hhciAqYWJvcnRzdHIpOwoKVGhlbiBpbiB0aGUgaGVh ZGVyOgoKI2lmZGVmIENDQU5fQ09ST1VUSU5FX0RFQlVHCiNkZWZpbmUgY29yb3V0aW5lX3N0YWNr X2RlYnVnKHMsIGxvYykgY29yb3V0aW5lX3N0YWNrX2NoZWNrKChzKSwgbG9jKQojZGVmaW5lIGNv cm91dGluZV9zdGF0ZV9kZWJ1ZyhzLCBsb2MpIGNvcm91dGluZV9zdGF0ZV9jaGVjaygocyksIGxv YykKI2Vsc2UKI2RlZmluZSBjb3JvdXRpbmVfc3RhY2tfZGVidWcocywgbG9jKSAoKHZvaWQpbG9j LCBzKQojZGVmaW5lIGNvcm91dGluZV9zdGF0ZV9kZWJ1ZyhzLCBsb2MpICgodm9pZClsb2MsIHMp CiNlbmRpZgoKQW5kIHNwcmlua2xlIHRob3NlIGxpYmVyYWxseSB0aHJvdWdoIHlvdXIgY29kZS4g IFRoYXQgbWVhbnMgdGhleSBnZXQgYQpuaWNlIGNyYXNoIGlmIENDQU5fQ09ST1VUSU5FX0RFQlVH IGlzIGRlZmluZWQsIG90aGVyd2lzZSB0aGV5IGNhbiBzdGlsbApjYWxsIGNvcm91dGluZV9zdGFj a19jaGVjaygpIHRoZW1zZWx2ZXMgaWYgdGhleSB3YW50LgoKPiArI2lmIEhBVkVfVUNPTlRFWFQK PiArdm9pZCBjb3JvdXRpbmVfaW5pdChzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICpjcywKPiArCQkg ICAgdm9pZCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsCj4gKwkJICAgIHN0cnVjdCBjb3JvdXRp bmVfc3RhY2sgKnN0YWNrKQo+ICt7Cj4gKwlnZXRjb250ZXh0ICgmY3MtPnVjKTsKPiArCj4gKwlj b3JvdXRpbmVfdWNfc3RhY2soJmNzLT51Yy51Y19zdGFjaywgc3RhY2spOwo+ICsKPiArICAgICAg ICBpZiAoSEFWRV9QT0lOVEVSX1NBRkVfTUFLRUNPTlRFWFQpIHsKPiArICAgICAgICAgICAgICAg IG1ha2Vjb250ZXh0KCZjcy0+dWMsICh2b2lkICopZm4sIDEsIGFyZyk7Cj4gKyAgICAgICAgfSBl bHNlIHsKPiArICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBzaSA9IHB0cjJpbnQoYXJnKTsKPiAr ICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBtYXNrID0gKDFVTCA8PCAoc2l6ZW9mKGludCkgKiA4 KSkgLSAxOwo+ICsgICAgICAgICAgICAgICAgaW50IGxvID0gc2kgJiBtYXNrOwo+ICsgICAgICAg ICAgICAgICAgaW50IGhpID0gc2kgPj4gKHNpemVvZihpbnQpICogOCk7Cj4gKwo+ICsgICAgICAg ICAgICAgICAgbWFrZWNvbnRleHQoJmNzLT51YywgKHZvaWQgKilmbiwgMiwgbG8sIGhpKTsKPiAr ICAgICAgICB9Cj4gKwkKPiArfQo+ICsKPiArdm9pZCBjb3JvdXRpbmVfanVtcChjb25zdCBzdHJ1 Y3QgY29yb3V0aW5lX3N0YXRlICp0bykKPiArewo+ICsJc2V0Y29udGV4dCgmdG8tPnVjKTsKPiAr CWFzc2VydCgwKTsKPiArfQo+ICsKPiArdm9pZCBjb3JvdXRpbmVfc3dpdGNoKHN0cnVjdCBjb3Jv dXRpbmVfc3RhdGUgKmZyb20sCj4gKwkJICAgICAgY29uc3Qgc3RydWN0IGNvcm91dGluZV9zdGF0 ZSAqdG8pCj4gK3sKPiArCWludCByYzsKPiArCj4gKwlyYyA9IHN3YXBjb250ZXh0KCZmcm9tLT51 YywgJnRvLT51Yyk7Cj4gKwlhc3NlcnQocmMgPT0gMCk7Cj4gK30KCgoKPiArI2VuZGlmIC8qIEhB VkVfVUNPTlRFWFQgKi8KPiBkaWZmIC0tZ2l0IGEvY2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmgg Yi9jY2FuL2Nvcm91dGluZS9jb3JvdXRpbmUuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uNmViYTRhMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9jY2FuL2Nvcm91dGlu ZS9jb3JvdXRpbmUuaAo+IEBAIC0wLDAgKzEsMjE5IEBACj4gKy8qIExpY2Vuc2VkIHVuZGVyIExH UEx2Mi4xKyAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMgKi8KPiArI2lmbmRlZiBDQ0FO X0NPUk9VVElORV9ICj4gKyNkZWZpbmUgQ0NBTl9DT1JPVVRJTkVfSAo+ICsjaW5jbHVkZSAiY29u ZmlnLmgiCj4gKwo+ICsjaW5jbHVkZSA8c3RkZGVmLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4K PiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiArI2luY2x1ZGUgPGFzc2VydC5oPgo+ICsKPiArI2lu Y2x1ZGUgPGNjYW4vY29tcGlsZXIvY29tcGlsZXIuaD4KPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3Qg Y29yb3V0aW5lX3N0YWNrCj4gKyAqCj4gKyAqIERlc2NyaWJlcyBhIHN0YWNrIHN1aXRhYmxlIGZv ciBleGVjdXRpbmcgYSBjb3JvdXRpbmUuICBUaGlzCj4gKyAqIHN0cnVjdHVyZSBpcyBhbHdheXMg Y29udGFpbmVkIHdpdGhpbiB0aGUgc3RhY2sgaXQgZGVzY3JpYmVzLgo+ICsgKi8KPiArc3RydWN0 IGNvcm91dGluZV9zdGFjazsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgY29yb3V0aW5lX3N0YXRl Cj4gKyAqCj4gKyAqIERlc2NyaWJlcyB0aGUgc3RhdGUgb2YgYW4gaW4tcHJvZ3Jlc3MgY29yb3V0 aW5lLgo+ICsgKi8KPiArc3RydWN0IGNvcm91dGluZV9zdGF0ZTsKPiArCj4gKy8qCj4gKyAqIFN0 YWNrIG1hbmFnZW1lbnQKPiArICovCj4gKwo+ICsvKioKPiArICogQ09ST1VUSU5FX1NUS19PVkVS SEVBRCAtIGludGVybmFsIHN0YWNrIG92ZXJoZWFkCj4gKyAqCj4gKyAqIE51bWJlciBvZiBieXRl cyBvZiBhIHN0YWNrIHdoaWNoIGNvcm91dGluZSBuZWVkcyBmb3IgaXRzIG93bgo+ICsgKiB0cmFj a2luZyBpbmZvcm1hdGlvbi4KPiArICovCj4gKyNkZWZpbmUgQ09ST1VUSU5FX1NUS19PVkVSSEVB RAkJKHNpemVvZih1aW50NjRfdCkgKyBzaXplb2Yoc2l6ZV90KSkKPiArCj4gKy8qKgo+ICsgKiBD T1JPVVRJTkVfTUlOX1NUS1NaIC0gTWluaW11bSBjb3JvdXRpbmUgc3RhY2sgc2l6ZQo+ICsgKgo+ ICsgKiBDb250YWlucyB0aGUgbWluaW11bSBzaXplIGZvciBhIGNvcm91dGluZSBzdGFjayAobm90 IGluY2x1ZGluZwo+ICsgKiBvdmVyaGVhZCkuICBPbiBzeXN0ZW1zIHdpdGggTUlOU1RLU1osIGd1 YXJhbnRlZWQgdG8gYmUgYXQgbGVhc3QgYXMKPiArICogbGFyZ2UgYXMgTUlOU1RLU1ouCj4gKyAq Lwo+ICsjZGVmaW5lIENPUk9VVElORV9NSU5fU1RLU1oJCTIwNDgKPiArCj4gKy8qKgo+ICsgKiBD T1JPVVRJTkVfU1RBQ0tfTUFHSUMgLSBNYWdpYyBudW1iZXIgZm9yIGNvcm91dGluZSBzdGFja3MK PiArICovCj4gKyNkZWZpbmUgQ09ST1VUSU5FX1NUQUNLX01BR0lDCQkweGMwNDBjMDQwNTc0YzU3 NGMKPiArCj4gKwo+ICsvKioKPiArICogY29yb3V0aW5lX3N0YWNrX2luaXQgLSBQcmVwYXJlIGEg Y29yb3V0aW5lIHN0YWNrIGluIGFuIGV4aXN0aW5nIGJ1ZmZlcgo+ICsgKiBAYnVmOiBidWZmZXIg dG8gdXNlIGZvciB0aGUgY29yb3V0aW5lIHN0YWNrCj4gKyAqIEBidWZzaXplOiBzaXplIG9mIEBi dWYKPiArICogQG1ldGFzaXplOiBzaXplIG9mIG1ldGFkYXRhIHRvIGFkZCB0byB0aGUgc3RhY2sg KG5vdCBpbmNsdWRpbmcKPiArICogICAgICAgICAgICBjb3JvdXRpbmUgaW50ZXJuYWwgb3Zlcmhl YWQpCj4gKyAqCj4gKyAqIFByZXBhcmVzIEBidWYgZm9yIHVzZSBhcyBhIGNvcm91dGluZSBzdGFj aywgcmV0dXJuaW5nIGEKPiArICogY29yb3V0aW5lX3N0YWNrICosIGFsbG9jYXRlZCBmcm9tIHdp dGhpbiB0aGUgYnVmZmVyLiAgUmV0dXJucyBOVUxMCj4gKyAqIG9uIGZhaWx1cmUuCj4gKyAqCj4g KyAqIFRoaXMgd2lsbCBmYWlsIGlmIHRoZSBidWZzaXplIDwgKENPUk9VVElORV9NSU5fU1RLU1og Kwo+ICsgKiBDT1JPVVRJTkVfU1RLX09WRVJIRUFEICsgbWV0YXNpemUpLgo+ICsgKi8KPiArc3Ry dWN0IGNvcm91dGluZV9zdGFjayAqY29yb3V0aW5lX3N0YWNrX2luaXQodm9pZCAqYnVmLCBzaXpl X3QgYnVmc2l6ZSwKPiArCQkJCQkgICAgIHNpemVfdCBtZXRhc2l6ZSk7Cj4gKwo+ICsvKioKPiAr ICogY29yb3V0aW5lX3N0YWNrX2luaXQgLSBTdG9wIHVzaW5nIGEgY29yb3V0aW5lIHN0YWNrCj4g KyAqIEBzdGFjazogY29yb3V0aW5lIHN0YWNrIHRvIHJlbGVhc2UKPiArICoKPiArICogVGhpcyBy ZWxlYXNlcyBAc3RhY2ssIG1ha2luZyBpdCBubyBsb25nZXIgc3VpdGFibGUgZm9yIHVzZSBhcyBh Cj4gKyAqIGNvcm91dGluZSBzdGFjay4KPiArICovCj4gK3ZvaWQgY29yb3V0aW5lX3N0YWNrX3Jl bGVhc2Uoc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2spOwo+ICsKPiArLyoqCj4gKyAqIGNv cm91dGluZV9zdGFja192YWxpZCAtIERldGVybWluZSBpZiBhIGNvcm91dGluZSBzdGFjayBsb29r cyB2YWxpZAo+ICsgKiBAc3RhY2s6IHN0YWNrIHRvIGNoZWNrCj4gKyAqCj4gKyAqIFJldHVybnMg dHJ1ZSBpZiBAc3RhY2sgYXBwZWFycyB0byBiZSBhIHZhbGlkIGNvcm91dGluZSBzdGFjaywgZmFs c2UKPiArICogb3RoZXJ3aXNlLgo+ICsgKi8KPiArYm9vbCBjb3JvdXRpbmVfc3RhY2tfdmFsaWQo c3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2spOwo+ICsKPiArLyoqCj4gKyAqIGNvcm91dGlu ZV9zdGFja190b19tZXRhZGF0YSAtIFJldHVybnMgcG9pbnRlciB0byB1c2VyJ3MgbWV0YWRhdGEK PiArICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkIHdpdGhpbiB0aGUg c3RhY2sKPiArICogQHN0YWNrOiBjb3JvdXRpbmUgc3RhY2sKPiArICogQG1ldGFzaXplOiBzaXpl IG9mIG1ldGFkYXRhCj4gKyAqCj4gKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBtZXRhZGF0 YSBhcmVhIHdpdGhpbiBAc3RhY2suICBUaGlzIGlzIG9mCj4gKyAqIHNpemUgZ2l2ZW4gYXQgaW5p dGlhbGl6YXRpb24gdGltZSwgYW5kIHdvbid0IGJlIG92ZXJ3cml0dGVuIGJ5Cj4gKyAqIGNvcm91 dGluZXMgZXhlY3V0aW5nIG9uIHRoZSBzdGFjay4gIEl0J3MgdXAgdG8gdGhlIGNhbGxlciB3aGF0 IHRvCj4gKyAqIHB1dCBpbiBoZXJlLiBAbWV0YXNpemUgbXVzdCBiZSBlcXVhbCB0byB0aGUgdmFs dWUgcGFzc2VkIHRvCj4gKyAqIGNvcm91dGluZV9zdGFja19pbml0KCkuCj4gKyAqLwo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgKmNvcm91dGluZV9zdGFja190b19tZXRhZGF0YShzdHJ1Y3QgY29yb3V0 aW5lX3N0YWNrICpzdGFjaywKPiArCQkJCQkJc2l6ZV90IG1ldGFzaXplKQo+ICt7Cj4gKyNpZiBI QVZFX1NUQUNLX0dST1dTX1VQV0FSRFMKPiArCXJldHVybiAoY2hhciAqKXN0YWNrIC0gbWV0YXNp emU7Cj4gKyNlbHNlCj4gKwlyZXR1cm4gKGNoYXIgKilzdGFjayArIENPUk9VVElORV9TVEtfT1ZF UkhFQUQ7Cj4gKyNlbmRpZgo+ICt9Cj4gKwo+ICsvKioKPiArICogY29yb3V0aW5lX3N0YWNrX2Zy b21fbWV0YWRhdGEgLSBSZXR1cm5zIHBvaW50ZXIgdG8gY29yb3V0aW5lIHN0YWNrCj4gKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlciBnaXZlbiBwb2ludGVyIHRvIHVz ZXIgbWV0YWRhdGEKPiArICogQG1ldGFkYXQ6IHVzZXIgbWV0YWRhdGEgd2l0aGluIGEgc3RhY2sK PiArICogQG1ldGFzaXplOiBzaXplIG9mIG1ldGFkYXRhCj4gKyAqCj4gKyAqIFJldHVybnMgYSBw b2ludGVyIHRvIHRoZSBjb3JvdXRpbmVfc3RhY2sgaGFuZGxlIHdpdGhpbiBhIHN0YWNrLgo+ICsg KiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIHBvaW50ZXIgcmV0dXJuZWQgYnkKPiArICogY29yb3V0 aW5lX3N0YWNrX3RvX21ldGFkYXRhKCkgYXQgYW4gZWFybGllciB0aW1lLiBAbWV0YXNpemUgbXVz dCBiZQo+ICsgKiBlcXVhbCB0byB0aGUgdmFsdWUgcGFzc2VkIHRvIGNvcm91dGluZV9zdGFja19p bml0KCkuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKgo+ ICtjb3JvdXRpbmVfc3RhY2tfZnJvbV9tZXRhZGF0YSh2b2lkICptZXRhZGF0YSwgc2l6ZV90IG1l dGFzaXplKQo+ICt7Cj4gKyNpZiBIQVZFX1NUQUNLX0dST1dTX1VQV0FSRFMKPiArCXJldHVybiAo c3RydWN0IGNvcm91dGluZV9zdGFjayAqKSgoY2hhciAqKW1ldGFkYXRhICsgbWV0YXNpemUpOwo+ ICsjZWxzZQo+ICsJcmV0dXJuIChzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICopKChjaGFyICopbWV0 YWRhdGEKPiArCQkJCQkgIC0gQ09ST1VUSU5FX1NUS19PVkVSSEVBRCk7Cj4gKyNlbmRpZgo+ICt9 Cj4gKwo+ICsvKioKPiArICogY29yb3V0aW5lX3N0YWNrX3NpemUgLSBSZXR1cm4gc2l6ZSBvZiBh IGNvcm91dGluZSBzdGFjawo+ICsgKiBAc3RhY2s6IGNvcm91dGluZSBzdGFjawo+ICsgKgo+ICsg KiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb3JvdXRpbmUgc3RhY2sgQHN0YWNrLiAgVGhpcyBk b2VzIG5vdAo+ICsgKiBpbmNsdWRlIHRoZSBvdmVyaGVhZCBvZiBzdHJ1Y3QgY29yb3V0aW5lX3N0 YWNrIG9yIG1ldGRhdGEuCj4gKyAqLwo+ICtzaXplX3QgY29yb3V0aW5lX3N0YWNrX3NpemUoY29u c3Qgc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2spOwo+Cj4gKy8qKgo+ICsgKiBjb3JvdXRp bmVfaW5pdCAtIFByZXBhcmUgYSBjb3JvdXRpbmUgZm9yIGV4ZWN1dGlvbgo+ICsgKiBAY3M6IGNv cm91dGluZV9zdGF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQo+ICsgKiBAZm46IGZ1bmN0aW9u IHRvIHN0YXJ0IGV4ZWN1dGluZyBpbiB0aGUgY29yb3V0aW5lCj4gKyAqIEBhcmc6IGFyZ3VtZW50 IGZvciBAZm4KPiArICogQHN0YWNrOiBzdGFjayB0byB1c2UgZm9yIHRoZSBjb3JvdXRpbmUKPiAr ICoKPiArICogUHJlcGFyZXMgQGNzIGFzIGEgbmV3IGNvcm91dGluZSB3aGljaCB3aWxsIGV4ZWN1 dGUgc3RhcnRpbmcgd2l0aAo+ICsgKiBmdW5jdGlvbiBAZm4sIHVzaW5nIHN0YWNrIEBzdGFjay4K PiArICovCj4gK3ZvaWQgY29yb3V0aW5lX2luaXQoc3RydWN0IGNvcm91dGluZV9zdGF0ZSAqY3Ms Cj4gKwkJICAgIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLAo+ICsJCSAgICBzdHJ1Y3Qg Y29yb3V0aW5lX3N0YWNrICpzdGFjayk7CgpNaW5vciBzdWdnZXN0aW9uLCB0eXBlc2FmZSB3cmFw cGVyIG1pZ2h0IGJlIG5pY2UgaGVyZToKCiNpbmNsdWRlIDxjY2FuL3R5cGVzYWZlX2NiL3R5cGVz YWZlX2NiLmg+Cgp2b2lkIGNvcm91dGluZV9pbml0XyhzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICpj cywKCQkgICAgdm9pZCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsCgkJICAgIHN0cnVjdCBjb3Jv dXRpbmVfc3RhY2sgKnN0YWNrKTsKCiNkZWZpbmUgY29yb3V0aW5lX2luaXQoY3MsIGZuLCBhcmcs IHN0YWNrKSBcCgljb3JvdXRpbmVfaW5pdF8oKGNzKSwJCQkJCQlcCgkJICAgICAgIHR5cGVzYWZl X2NiKHZvaWQsIHZvaWQgKiwgKGZuKSwgKGFyZykpLAkJXAoJCSAgICAgICAodm9pZCAqKShhcmcp LCAoc3RhY2spKQoKQnV0IGdlbmVyYWxseSwgdmVyeSBuaWNlLgoKQ2hlZXJzLApSdXN0eS4KX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KY2NhbiBtYWlsaW5n IGxpc3QKY2NhbkBsaXN0cy5vemxhYnMub3JnCmh0dHBzOi8vbGlzdHMub3psYWJzLm9yZy9saXN0 aW5mby9jY2FuCg==