[PATCH 1/2] coroutine: New module
David Gibson <[email protected]> Tue, 29 Nov 2016 00:18:29 +1100
| Newsgroups | org.ozlabs.lists.ccan |
|---|---|
| Message-ID | <[email protected]> |
VGhpcyBpcyBlc3NlbnRpYWxseSBhIHdyYXBwZXIgYXJvdW5kIHVjb250ZXh0LmgsIGJ1dCB0aGUg aWRlYSBpcyB0aGF0CmFsdGVybmF0aXZlIGJhY2sgZW5kIGltcGxlbWVudGF0aW9ucyBjb3VsZCBi ZSB1c2VkIGluIGZ1dHVyZS4KClNpZ25lZC1vZmYtYnk6IERhdmlkIEdpYnNvbiA8ZGF2aWRAZ2li c29uLmRyb3BiZWFyLmlkLmF1PgotLS0KIGNjYW4vY29yb3V0aW5lL0xJQ0VOU0UgICAgICB8ICAg MSArCiBjY2FuL2Nvcm91dGluZS9faW5mbyAgICAgICAgfCAgNDAgKysrKysrKysKIGNjYW4vY29y b3V0aW5lL2Nvcm91dGluZS5jICB8IDExNSArKysrKysrKysrKysrKysrKysrKysrKwogY2Nhbi9j b3JvdXRpbmUvY29yb3V0aW5lLmggIHwgMjE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBjY2FuL2Nvcm91dGluZS90ZXN0L2FwaS0xLmMgfCAgNTIgKysrKysr KysrKysKIGNjYW4vY29yb3V0aW5lL3Rlc3QvYXBpLTIuYyB8IDExMCArKysrKysrKysrKysrKysr KysrKysrCiBjY2FuL2Nvcm91dGluZS90ZXN0L2FwaS0zLmMgfCAgOTAgKysrKysrKysrKysrKysr KysrCiA3IGZpbGVzIGNoYW5nZWQsIDYyNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMjAw MDAgY2Nhbi9jb3JvdXRpbmUvTElDRU5TRQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNjYW4vY29yb3V0 aW5lL19pbmZvCiBjcmVhdGUgbW9kZSAxMDA2NDQgY2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjY2FuL2Nvcm91dGluZS9jb3JvdXRpbmUuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNjYW4vY29yb3V0aW5lL3Rlc3QvYXBpLTEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNjYW4vY29yb3V0aW5lL3Rlc3QvYXBpLTIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNjYW4vY29y b3V0aW5lL3Rlc3QvYXBpLTMuYwoKZGlmZiAtLWdpdCBhL2NjYW4vY29yb3V0aW5lL0xJQ0VOU0Ug Yi9jY2FuL2Nvcm91dGluZS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAw MDAuLmRjMzE0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jY2FuL2Nvcm91dGluZS9MSUNFTlNFCkBA IC0wLDAgKzEgQEAKKy4uLy4uL2xpY2Vuc2VzL0xHUEwtMi4xClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQpkaWZmIC0tZ2l0IGEvY2Nhbi9jb3JvdXRpbmUvX2luZm8gYi9jY2FuL2Nvcm91dGlu ZS9faW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTlhMDk5Ci0tLSAv ZGV2L251bGwKKysrIGIvY2Nhbi9jb3JvdXRpbmUvX2luZm8KQEAgLTAsMCArMSw0MCBAQAorI2lu Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+ CisKKy8qKgorICogY29yb3V0aW5lIC0gQ28tcm91dGluZXMKKyAqCisgKiBUaGlzIGNvZGUgaGFz IGhlbHBlciBmdW5jdGlvbnMgZm9yIGltcGxlbWVudGluZyBjby1yb3V0aW5lcywgdGhhdAorICog aXMsIGV4cGxpY2l0IGNvLW9wZXJhdGl2ZSBjb250ZXh0IHN3aXRjaGluZy4gIEl0J3MgaW50ZW5k ZWQgdG8KKyAqIHByb3ZpZGUgc2ltaWxhciBmdW5jdGlvbmFsaXR5IHRvIAorICoKKyAqIEF1dGhv cjogRGF2aWQgR2lic29uIDxkYXZpZEBnaWJzb24uZHJvcGJlYXIuaWQuYXU+CisgKiBMaWNlbnNl OiBMR1BMICh2Mi4xIG9yIGFueSBsYXRlciB2ZXJzaW9uKQorICoKKyAqIENjYW5saW50OgorICoJ Ly8gQ29udGV4dCBzd2l0Y2hpbmcgcmVhbGx5IGNvbmZ1c2VzIHZhbGdyaW5kCisgKgl0ZXN0c19w YXNzX3ZhbGdyaW5kIEZBSUwKKyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK K3sKKwkvKiBFeHBlY3QgZXhhY3RseSBvbmUgYXJndW1lbnQgKi8KKwlpZiAoYXJnYyAhPSAyKQor CQlyZXR1cm4gMTsKKworCWlmIChzdHJjbXAoYXJndlsxXSwgImRlcGVuZHMiKSA9PSAwKSB7CisJ CXByaW50ZigiY2Nhbi9wdHJpbnRcbiIpOworCQlwcmludGYoImNjYW4vY29tcGlsZXJcbiIpOwor CQlwcmludGYoImNjYW4vYnVpbGRfYXNzZXJ0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYg KHN0cmNtcChhcmd2WzFdLCAicG9ydGVkIikgPT0gMCkgeworI2lmICFIQVZFX1VDT05URVhUCisJ CXByaW50ZigiUmVxdWlyZXMgd29ya2luZyB1Y29udGV4dC5oXG4iKTsKKyNlbmRpZgorCQlyZXR1 cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2NjYW4vY29yb3V0aW5lL2Nv cm91dGluZS5jIGIvY2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZmQ0MDg5YgotLS0gL2Rldi9udWxsCisrKyBiL2NjYW4vY29yb3V0 aW5lL2Nvcm91dGluZS5jCkBAIC0wLDAgKzEsMTE1IEBACisvKiBHTlUgTEdQTCB2ZXJzaW9uIDIg KG9yIGxhdGVyKSAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMgKi8KKyNpbmNsdWRlIDxh c3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGNjYW4vcHRyaW50L3B0 cmludC5oPgorI2luY2x1ZGUgPGNjYW4vYnVpbGRfYXNzZXJ0L2J1aWxkX2Fzc2VydC5oPgorI2lu Y2x1ZGUgPGNjYW4vY29yb3V0aW5lL2Nvcm91dGluZS5oPgorCisvKgorICogU3RhY2sgbWFuYWdl bWVudAorICovCisKK3N0cnVjdCBjb3JvdXRpbmVfc3RhY2sgeworCXVpbnQ2NF90IG1hZ2ljOwor CXNpemVfdCBzaXplOworfTsKKworc3RydWN0IGNvcm91dGluZV9zdGFjayAqY29yb3V0aW5lX3N0 YWNrX2luaXQodm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6ZSwKKwkJCQkJICAgICBzaXplX3QgbWV0 YXNpemUpCit7CisJc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2s7CisKKwlCVUlMRF9BU1NF UlQoQ09ST1VUSU5FX1NUS19PVkVSSEVBRCA9PSBzaXplb2YoKnN0YWNrKSk7CisjaWZkZWYgTUlO U0lHU1RLU1oKKwlCVUlMRF9BU1NFUlQoQ09ST1VUSU5FX01JTl9TVEtTWiA+PSBNSU5TSUdTVEtT Wik7CisjZW5kaWYKKworCWlmIChidWZzaXplIDwgKENPUk9VVElORV9NSU5fU1RLU1ogKyBzaXpl b2YoKnN0YWNrKSArIG1ldGFzaXplKSkKKwkJcmV0dXJuIE5VTEw7CisKKyNpZiBIQVZFX1NUQUNL X0dST1dTX1VQV0FSRFMKKwlzdGFjayA9IChjaGFyICopYnVmICsgbWV0YXNpemU7CisjZWxzZQor CXN0YWNrID0gKHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKikKKwkJKChjaGFyICopYnVmICsgYnVm c2l6ZSAtIG1ldGFzaXplKSAtIDE7CisjZW5kaWYKKworCXN0YWNrLT5tYWdpYyA9IENPUk9VVElO RV9TVEFDS19NQUdJQzsKKwlzdGFjay0+c2l6ZSA9IGJ1ZnNpemUgLSBzaXplb2YoKnN0YWNrKSAt IG1ldGFzaXplOworCisJcmV0dXJuIHN0YWNrOworfQorCit2b2lkIGNvcm91dGluZV9zdGFja19y ZWxlYXNlKHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKnN0YWNrKQoreworCW1lbXNldChzdGFjaywg MCwgc2l6ZW9mKCpzdGFjaykpOworfQorCitib29sIGNvcm91dGluZV9zdGFja192YWxpZChzdHJ1 Y3QgY29yb3V0aW5lX3N0YWNrICpzdGFjaykKK3sKKwlyZXR1cm4gc3RhY2sKKwkJJiYgKHN0YWNr LT5tYWdpYyA9PSBDT1JPVVRJTkVfU1RBQ0tfTUFHSUMpCisJCSYmIChzdGFjay0+c2l6ZSA+PSBD T1JPVVRJTkVfTUlOX1NUS1NaKTsKK30KKworc2l6ZV90IGNvcm91dGluZV9zdGFja19zaXplKGNv bnN0IHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKnN0YWNrKQoreworCXJldHVybiBzdGFjay0+c2l6 ZTsKK30KKworI2lmIEhBVkVfVUNPTlRFWFQKK3N0YXRpYyB2b2lkIGNvcm91dGluZV91Y19zdGFj ayhzdGFja190ICp1Y19zdGFjaywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY29yb3V0aW5lX3N0 YWNrICpzdGFjaykKK3sKKwl1Y19zdGFjay0+c3Nfc2l6ZSA9IGNvcm91dGluZV9zdGFja19zaXpl KHN0YWNrKSAtIHNpemVvZigqc3RhY2spOworCisjaWYgSEFWRV9TVEFDS19HUk9XU19VUFdBUkRT CisJdWNfc3RhY2stPnNzX3NwID0gKHZvaWQgKikoc3RhY2sgKyAxKTsKKyNlbHNlCisJdWNfc3Rh Y2stPnNzX3NwID0gKGNoYXIgKilzdGFjayAtIHVjX3N0YWNrLT5zc19zaXplOworI2VuZGlmCit9 CisjZW5kaWYgLyogSEFWRV9VQ09OVEVYVCAqLworCisvKgorICogQ29yb3V0aW5lIHN3aXRjaGlu ZworICovCisKKyNpZiBIQVZFX1VDT05URVhUCit2b2lkIGNvcm91dGluZV9pbml0KHN0cnVjdCBj b3JvdXRpbmVfc3RhdGUgKmNzLAorCQkgICAgdm9pZCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcs CisJCSAgICBzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICpzdGFjaykKK3sKKwlnZXRjb250ZXh0ICgm Y3MtPnVjKTsKKworCWNvcm91dGluZV91Y19zdGFjaygmY3MtPnVjLnVjX3N0YWNrLCBzdGFjayk7 CisKKyAgICAgICAgaWYgKEhBVkVfUE9JTlRFUl9TQUZFX01BS0VDT05URVhUKSB7CisgICAgICAg ICAgICAgICAgbWFrZWNvbnRleHQoJmNzLT51YywgKHZvaWQgKilmbiwgMSwgYXJnKTsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgc2kgPSBwdHIyaW50KGFyZyk7 CisgICAgICAgICAgICAgICAgcHRyZGlmZl90IG1hc2sgPSAoMVVMIDw8IChzaXplb2YoaW50KSAq IDgpKSAtIDE7CisgICAgICAgICAgICAgICAgaW50IGxvID0gc2kgJiBtYXNrOworICAgICAgICAg ICAgICAgIGludCBoaSA9IHNpID4+IChzaXplb2YoaW50KSAqIDgpOworCisgICAgICAgICAgICAg ICAgbWFrZWNvbnRleHQoJmNzLT51YywgKHZvaWQgKilmbiwgMiwgbG8sIGhpKTsKKyAgICAgICAg fQorCQorfQorCit2b2lkIGNvcm91dGluZV9qdW1wKGNvbnN0IHN0cnVjdCBjb3JvdXRpbmVfc3Rh dGUgKnRvKQoreworCXNldGNvbnRleHQoJnRvLT51Yyk7CisJYXNzZXJ0KDApOworfQorCit2b2lk IGNvcm91dGluZV9zd2l0Y2goc3RydWN0IGNvcm91dGluZV9zdGF0ZSAqZnJvbSwKKwkJICAgICAg Y29uc3Qgc3RydWN0IGNvcm91dGluZV9zdGF0ZSAqdG8pCit7CisJaW50IHJjOworCisJcmMgPSBz d2FwY29udGV4dCgmZnJvbS0+dWMsICZ0by0+dWMpOworCWFzc2VydChyYyA9PSAwKTsKK30KKyNl bmRpZiAvKiBIQVZFX1VDT05URVhUICovCmRpZmYgLS1naXQgYS9jY2FuL2Nvcm91dGluZS9jb3Jv dXRpbmUuaCBiL2NjYW4vY29yb3V0aW5lL2Nvcm91dGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjZlYmE0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9jY2FuL2Nvcm91dGlu ZS9jb3JvdXRpbmUuaApAQCAtMCwwICsxLDIxOSBAQAorLyogTGljZW5zZWQgdW5kZXIgTEdQTHYy LjErIC0gc2VlIExJQ0VOU0UgZmlsZSBmb3IgZGV0YWlscyAqLworI2lmbmRlZiBDQ0FOX0NPUk9V VElORV9ICisjZGVmaW5lIENDQU5fQ09ST1VUSU5FX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKwor I2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJv b2wuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPGNjYW4vY29tcGlsZXIvY29t cGlsZXIuaD4KKworLyoqCisgKiBzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrCisgKgorICogRGVzY3Jp YmVzIGEgc3RhY2sgc3VpdGFibGUgZm9yIGV4ZWN1dGluZyBhIGNvcm91dGluZS4gIFRoaXMKKyAq IHN0cnVjdHVyZSBpcyBhbHdheXMgY29udGFpbmVkIHdpdGhpbiB0aGUgc3RhY2sgaXQgZGVzY3Jp YmVzLgorICovCitzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrOworCisvKioKKyAqIHN0cnVjdCBjb3Jv dXRpbmVfc3RhdGUKKyAqCisgKiBEZXNjcmliZXMgdGhlIHN0YXRlIG9mIGFuIGluLXByb2dyZXNz IGNvcm91dGluZS4KKyAqLworc3RydWN0IGNvcm91dGluZV9zdGF0ZTsKKworLyoKKyAqIFN0YWNr IG1hbmFnZW1lbnQKKyAqLworCisvKioKKyAqIENPUk9VVElORV9TVEtfT1ZFUkhFQUQgLSBpbnRl cm5hbCBzdGFjayBvdmVyaGVhZAorICoKKyAqIE51bWJlciBvZiBieXRlcyBvZiBhIHN0YWNrIHdo aWNoIGNvcm91dGluZSBuZWVkcyBmb3IgaXRzIG93bgorICogdHJhY2tpbmcgaW5mb3JtYXRpb24u CisgKi8KKyNkZWZpbmUgQ09ST1VUSU5FX1NUS19PVkVSSEVBRAkJKHNpemVvZih1aW50NjRfdCkg KyBzaXplb2Yoc2l6ZV90KSkKKworLyoqCisgKiBDT1JPVVRJTkVfTUlOX1NUS1NaIC0gTWluaW11 bSBjb3JvdXRpbmUgc3RhY2sgc2l6ZQorICoKKyAqIENvbnRhaW5zIHRoZSBtaW5pbXVtIHNpemUg Zm9yIGEgY29yb3V0aW5lIHN0YWNrIChub3QgaW5jbHVkaW5nCisgKiBvdmVyaGVhZCkuICBPbiBz eXN0ZW1zIHdpdGggTUlOU1RLU1osIGd1YXJhbnRlZWQgdG8gYmUgYXQgbGVhc3QgYXMKKyAqIGxh cmdlIGFzIE1JTlNUS1NaLgorICovCisjZGVmaW5lIENPUk9VVElORV9NSU5fU1RLU1oJCTIwNDgK KworLyoqCisgKiBDT1JPVVRJTkVfU1RBQ0tfTUFHSUMgLSBNYWdpYyBudW1iZXIgZm9yIGNvcm91 dGluZSBzdGFja3MKKyAqLworI2RlZmluZSBDT1JPVVRJTkVfU1RBQ0tfTUFHSUMJCTB4YzA0MGMw NDA1NzRjNTc0YworCisKKy8qKgorICogY29yb3V0aW5lX3N0YWNrX2luaXQgLSBQcmVwYXJlIGEg Y29yb3V0aW5lIHN0YWNrIGluIGFuIGV4aXN0aW5nIGJ1ZmZlcgorICogQGJ1ZjogYnVmZmVyIHRv IHVzZSBmb3IgdGhlIGNvcm91dGluZSBzdGFjaworICogQGJ1ZnNpemU6IHNpemUgb2YgQGJ1Zgor ICogQG1ldGFzaXplOiBzaXplIG9mIG1ldGFkYXRhIHRvIGFkZCB0byB0aGUgc3RhY2sgKG5vdCBp bmNsdWRpbmcKKyAqICAgICAgICAgICAgY29yb3V0aW5lIGludGVybmFsIG92ZXJoZWFkKQorICoK KyAqIFByZXBhcmVzIEBidWYgZm9yIHVzZSBhcyBhIGNvcm91dGluZSBzdGFjaywgcmV0dXJuaW5n IGEKKyAqIGNvcm91dGluZV9zdGFjayAqLCBhbGxvY2F0ZWQgZnJvbSB3aXRoaW4gdGhlIGJ1ZmZl ci4gIFJldHVybnMgTlVMTAorICogb24gZmFpbHVyZS4KKyAqCisgKiBUaGlzIHdpbGwgZmFpbCBp ZiB0aGUgYnVmc2l6ZSA8IChDT1JPVVRJTkVfTUlOX1NUS1NaICsKKyAqIENPUk9VVElORV9TVEtf T1ZFUkhFQUQgKyBtZXRhc2l6ZSkuCisgKi8KK3N0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKmNvcm91 dGluZV9zdGFja19pbml0KHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsCisJCQkJCSAgICAgc2l6 ZV90IG1ldGFzaXplKTsKKworLyoqCisgKiBjb3JvdXRpbmVfc3RhY2tfaW5pdCAtIFN0b3AgdXNp bmcgYSBjb3JvdXRpbmUgc3RhY2sKKyAqIEBzdGFjazogY29yb3V0aW5lIHN0YWNrIHRvIHJlbGVh c2UKKyAqCisgKiBUaGlzIHJlbGVhc2VzIEBzdGFjaywgbWFraW5nIGl0IG5vIGxvbmdlciBzdWl0 YWJsZSBmb3IgdXNlIGFzIGEKKyAqIGNvcm91dGluZSBzdGFjay4KKyAqLwordm9pZCBjb3JvdXRp bmVfc3RhY2tfcmVsZWFzZShzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICpzdGFjayk7CisKKy8qKgor ICogY29yb3V0aW5lX3N0YWNrX3ZhbGlkIC0gRGV0ZXJtaW5lIGlmIGEgY29yb3V0aW5lIHN0YWNr IGxvb2tzIHZhbGlkCisgKiBAc3RhY2s6IHN0YWNrIHRvIGNoZWNrCisgKgorICogUmV0dXJucyB0 cnVlIGlmIEBzdGFjayBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgY29yb3V0aW5lIHN0YWNrLCBmYWxz ZQorICogb3RoZXJ3aXNlLgorICovCitib29sIGNvcm91dGluZV9zdGFja192YWxpZChzdHJ1Y3Qg Y29yb3V0aW5lX3N0YWNrICpzdGFjayk7CisKKy8qKgorICogY29yb3V0aW5lX3N0YWNrX3RvX21l dGFkYXRhIC0gUmV0dXJucyBwb2ludGVyIHRvIHVzZXIncyBtZXRhZGF0YQorICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkIHdpdGhpbiB0aGUgc3RhY2sKKyAqIEBzdGFj azogY29yb3V0aW5lIHN0YWNrCisgKiBAbWV0YXNpemU6IHNpemUgb2YgbWV0YWRhdGEKKyAqCisg KiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWV0YWRhdGEgYXJlYSB3aXRoaW4gQHN0YWNrLiAg VGhpcyBpcyBvZgorICogc2l6ZSBnaXZlbiBhdCBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgd29u J3QgYmUgb3ZlcndyaXR0ZW4gYnkKKyAqIGNvcm91dGluZXMgZXhlY3V0aW5nIG9uIHRoZSBzdGFj ay4gIEl0J3MgdXAgdG8gdGhlIGNhbGxlciB3aGF0IHRvCisgKiBwdXQgaW4gaGVyZS4gQG1ldGFz aXplIG11c3QgYmUgZXF1YWwgdG8gdGhlIHZhbHVlIHBhc3NlZCB0bworICogY29yb3V0aW5lX3N0 YWNrX2luaXQoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICpjb3JvdXRpbmVfc3RhY2tfdG9f bWV0YWRhdGEoc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2ssCisJCQkJCQlzaXplX3QgbWV0 YXNpemUpCit7CisjaWYgSEFWRV9TVEFDS19HUk9XU19VUFdBUkRTCisJcmV0dXJuIChjaGFyICop c3RhY2sgLSBtZXRhc2l6ZTsKKyNlbHNlCisJcmV0dXJuIChjaGFyICopc3RhY2sgKyBDT1JPVVRJ TkVfU1RLX09WRVJIRUFEOworI2VuZGlmCit9CisKKy8qKgorICogY29yb3V0aW5lX3N0YWNrX2Zy b21fbWV0YWRhdGEgLSBSZXR1cm5zIHBvaW50ZXIgdG8gY29yb3V0aW5lIHN0YWNrCisgKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIgZ2l2ZW4gcG9pbnRlciB0byB1c2Vy IG1ldGFkYXRhCisgKiBAbWV0YWRhdDogdXNlciBtZXRhZGF0YSB3aXRoaW4gYSBzdGFjaworICog QG1ldGFzaXplOiBzaXplIG9mIG1ldGFkYXRhCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8g dGhlIGNvcm91dGluZV9zdGFjayBoYW5kbGUgd2l0aGluIGEgc3RhY2suCisgKiBUaGUgYXJndW1l bnQgbXVzdCBiZSBhIHBvaW50ZXIgcmV0dXJuZWQgYnkKKyAqIGNvcm91dGluZV9zdGFja190b19t ZXRhZGF0YSgpIGF0IGFuIGVhcmxpZXIgdGltZS4gQG1ldGFzaXplIG11c3QgYmUKKyAqIGVxdWFs IHRvIHRoZSB2YWx1ZSBwYXNzZWQgdG8gY29yb3V0aW5lX3N0YWNrX2luaXQoKS4KKyAqLworc3Rh dGljIGlubGluZSBzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICoKK2Nvcm91dGluZV9zdGFja19mcm9t X21ldGFkYXRhKHZvaWQgKm1ldGFkYXRhLCBzaXplX3QgbWV0YXNpemUpCit7CisjaWYgSEFWRV9T VEFDS19HUk9XU19VUFdBUkRTCisJcmV0dXJuIChzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICopKChj aGFyICopbWV0YWRhdGEgKyBtZXRhc2l6ZSk7CisjZWxzZQorCXJldHVybiAoc3RydWN0IGNvcm91 dGluZV9zdGFjayAqKSgoY2hhciAqKW1ldGFkYXRhCisJCQkJCSAgLSBDT1JPVVRJTkVfU1RLX09W RVJIRUFEKTsKKyNlbmRpZgorfQorCisvKioKKyAqIGNvcm91dGluZV9zdGFja19zaXplIC0gUmV0 dXJuIHNpemUgb2YgYSBjb3JvdXRpbmUgc3RhY2sKKyAqIEBzdGFjazogY29yb3V0aW5lIHN0YWNr CisgKgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29yb3V0aW5lIHN0YWNrIEBzdGFjay4g IFRoaXMgZG9lcyBub3QKKyAqIGluY2x1ZGUgdGhlIG92ZXJoZWFkIG9mIHN0cnVjdCBjb3JvdXRp bmVfc3RhY2sgb3IgbWV0ZGF0YS4KKyAqLworc2l6ZV90IGNvcm91dGluZV9zdGFja19zaXplKGNv bnN0IHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKnN0YWNrKTsKKworLyoKKyAqIENvcm91dGluZSBz d2l0Y2hpbmcKKyAqLworCisjaWYgSEFWRV9VQ09OVEVYVAorI2luY2x1ZGUgPHVjb250ZXh0Lmg+ CisjZGVmaW5lIENPUk9VVElORV9BVkFJTEFCTEUJCTEKKyNlbHNlCisjZGVmaW5lIENPUk9VVElO RV9BVkFJTEFCTEUJCTAKKyNlbmRpZgorCitzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlIHsKKyNpZiBI QVZFX1VDT05URVhUCisJdWNvbnRleHRfdCB1YzsKKyNlbmRpZiAvKiBIQVZFX1VDT05URVhUICov Cit9OworCisjaWYgQ09ST1VUSU5FX0FWQUlMQUJMRQorCisvKioKKyAqIGNvcm91dGluZV9pbml0 IC0gUHJlcGFyZSBhIGNvcm91dGluZSBmb3IgZXhlY3V0aW9uCisgKiBAY3M6IGNvcm91dGluZV9z dGF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICogQGZuOiBmdW5jdGlvbiB0byBzdGFydCBl eGVjdXRpbmcgaW4gdGhlIGNvcm91dGluZQorICogQGFyZzogYXJndW1lbnQgZm9yIEBmbgorICog QHN0YWNrOiBzdGFjayB0byB1c2UgZm9yIHRoZSBjb3JvdXRpbmUKKyAqCisgKiBQcmVwYXJlcyBA Y3MgYXMgYSBuZXcgY29yb3V0aW5lIHdoaWNoIHdpbGwgZXhlY3V0ZSBzdGFydGluZyB3aXRoCisg KiBmdW5jdGlvbiBAZm4sIHVzaW5nIHN0YWNrIEBzdGFjay4KKyAqLwordm9pZCBjb3JvdXRpbmVf aW5pdChzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICpjcywKKwkJICAgIHZvaWQgKCpmbikodm9pZCAq KSwgdm9pZCAqYXJnLAorCQkgICAgc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2spOworCisv KioKKyAqIGNvcm91dGluZV9qdW1wIC0gSXJyZXZlcnNpYmx5IHN3aXRjaCB0byBleGVjdXRpbmcg YSBjb3JvdXRpbmUKKyAqIEB0bzogY29yb3V0aW5lIHRvIHN3aXRjaCB0bworICoKKyAqIEltbWVk aWF0ZWx5IGp1bXAgdG8gZXhlY3V0aW5nIGNvcm91dGluZSBAdG8gKGF0IHdoYXRldmVyIHBvaW50 IGluCisgKiBleGVjdXRpb24gaXQgd2FzIHVwIHRvKS4gIE5ldmVyIHJldHVybnMuCisgKi8KK3Zv aWQgTk9SRVRVUk4gY29yb3V0aW5lX2p1bXAoY29uc3Qgc3RydWN0IGNvcm91dGluZV9zdGF0ZSAq dG8pOworCisvKioKKyAqIGNvcm91dGluZV9zd2l0Y2ggLSBTd2l0Y2ggY29yb3V0aW5lcworICog QGZyb206IGNvcm91dGluZSBpbiB3aGljaCB0byBzdG9yZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0 ZQorICogQHRvOiBjb3JvdXRpbmUgdG8gc3dpdGNoIHRvCisgKgorICogU3RvcCBleGVjdXRpbmcg dGhlIGN1cnJlbnQgcm91dGluZSwgc2F2aW5nIGl0cyBzdGF0ZSBpbiBAZnJvbSwgYW5kCisgKiBz d2l0Y2ggdG8gZXhlY3V0aW5nIHRoZSBjb3JvdXRpbmUgQHRvLiAgUmV0dXJucyBvbmx5IHdoZW4g c29tZXRoaW5nCisgKiBzd2l0Y2hlcyBvciBqdW1wcyBiYWNrIHRvIEBmcm9tLgorICovCit2b2lk IGNvcm91dGluZV9zd2l0Y2goc3RydWN0IGNvcm91dGluZV9zdGF0ZSAqZnJvbSwKKwkJICAgICAg Y29uc3Qgc3RydWN0IGNvcm91dGluZV9zdGF0ZSAqdG8pOworCisjZWxzZQorCitzdGF0aWMgaW5s aW5lIHZvaWQgY29yb3V0aW5lX2luaXQoc3RydWN0IGNvcm91dGluZV9zdGF0ZSAqY3MsCisJCQkJ ICB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywKKwkJCQkgIHN0cnVjdCBjb3JvdXRpbmVf c3RhY2sgKnN0YWNrKQoreworCWFzc2VydCgwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIE5P UkVUVVJOIGNvcm91dGluZV9qdW1wKGNvbnN0IHN0cnVjdCBjb3JvdXRpbmVfc3RhdGUgKnRvKQor eworCWFzc2VydCgwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcm91dGluZV9zd2l0Y2go c3RydWN0IGNvcm91dGluZV9zdGF0ZSAqZnJvbSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNvcm91 dGluZV9zdGF0ZSAqdG8pCit7CisJYXNzZXJ0KDApOworfQorCisjZW5kaWYgLyogIUNPUk9VVElO RV9BVkFJTEFCTEUgKi8KKworI2VuZGlmIC8qIENDQU5fQ09ST1VUSU5FX0ggKi8KZGlmZiAtLWdp dCBhL2NjYW4vY29yb3V0aW5lL3Rlc3QvYXBpLTEuYyBiL2NjYW4vY29yb3V0aW5lL3Rlc3QvYXBp LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWI0OWYxCi0tLSAvZGV2 L251bGwKKysrIGIvY2Nhbi9jb3JvdXRpbmUvdGVzdC9hcGktMS5jCkBAIC0wLDAgKzEsNTIgQEAK KyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGNjYW4vY29yb3V0aW5lL2Nvcm91dGlu ZS5oPgorI2luY2x1ZGUgPGNjYW4vdGFwL3RhcC5oPgorCitzdGF0aWMgaW50IGdsb2JhbCA9IDA7 CisKK3N0YXRpYyB2b2lkIHRyaXZpYWxfZm4odm9pZCAqcCkKK3sKKwlzdHJ1Y3QgY29yb3V0aW5l X3N0YXRlICpyZXQgPSAoc3RydWN0IGNvcm91dGluZV9zdGF0ZSAqKXA7CisKKwlnbG9iYWwgPSAx OworCisJY29yb3V0aW5lX2p1bXAocmV0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF90cml2aWFs KHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKnN0YWNrKQoreworCXN0cnVjdCBjb3JvdXRpbmVfc3Rh dGUgdCwgbWFzdGVyOworCisJaWYgKCFDT1JPVVRJTkVfQVZBSUxBQkxFKSB7CisJCXNraXAoMSwg IkNvcm91dGluZXMgbm90IGF2YWlsYWJsZSIpOworCQlyZXR1cm47CisJfQorCisJY29yb3V0aW5l X2luaXQoJnQsIHRyaXZpYWxfZm4sICZtYXN0ZXIsIHN0YWNrKTsKKwljb3JvdXRpbmVfc3dpdGNo KCZtYXN0ZXIsICZ0KTsKKworCW9rMShnbG9iYWwgPT0gMSk7Cit9CisKKworaW50IG1haW4odm9p ZCkKK3sKKwljaGFyIGJ1ZltDT1JPVVRJTkVfTUlOX1NUS1NaICsgQ09ST1VUSU5FX1NUS19PVkVS SEVBRF07CisJc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2s7CisKKwkvKiBUaGlzIGlzIGhv dyBtYW55IHRlc3RzIHlvdSBwbGFuIHRvIHJ1biAqLworCXBsYW5fdGVzdHMoNCk7CisKKwlzdGFj ayA9IGNvcm91dGluZV9zdGFja19pbml0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworCW9rMShzdGFj ayAhPSBOVUxMKTsKKwlvazEoY29yb3V0aW5lX3N0YWNrX3ZhbGlkKHN0YWNrKSk7CisJb2sxKGNv cm91dGluZV9zdGFja19zaXplKHN0YWNrKSA9PSBDT1JPVVRJTkVfTUlOX1NUS1NaKTsKKworCXRl c3RfdHJpdmlhbChzdGFjayk7CisKKwljb3JvdXRpbmVfc3RhY2tfcmVsZWFzZShzdGFjayk7CisK KwkvKiBUaGlzIGV4aXRzIGRlcGVuZGluZyBvbiB3aGV0aGVyIGFsbCB0ZXN0cyBwYXNzZWQgKi8K KwlyZXR1cm4gZXhpdF9zdGF0dXMoKTsKK30KZGlmZiAtLWdpdCBhL2NjYW4vY29yb3V0aW5lL3Rl c3QvYXBpLTIuYyBiL2NjYW4vY29yb3V0aW5lL3Rlc3QvYXBpLTIuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5lYzEwMGFjCi0tLSAvZGV2L251bGwKKysrIGIvY2Nhbi9jb3Jv dXRpbmUvdGVzdC9hcGktMi5jCkBAIC0wLDAgKzEsMTEwIEBACisjaW5jbHVkZSA8c3RkbGliLmg+ CisKKyNpbmNsdWRlIDxjY2FuL2Nvcm91dGluZS9jb3JvdXRpbmUuaD4KKyNpbmNsdWRlIDxjY2Fu L3RhcC90YXAuaD4KKworc3RydWN0IHN0YXRlIHsKKwlzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlIGMx LCBjMjsKKwlzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlIG1hc3RlcjsKKwlpbnQgdmFsOworfTsKKwor c3RhdGljIHZvaWQgZjEodm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc3RhdGUgKnN0YXRlID0gKHN0cnVj dCBzdGF0ZSAqKXA7CisKKwljb3JvdXRpbmVfc3dpdGNoKCZzdGF0ZS0+YzEsICZzdGF0ZS0+YzIp OworCisJb2soc3RhdGUtPnZhbCA9PSAxNywgInN0YXRlLT52YWwgPT0gJWQgW2V4cGVjdGVkIDE3 XSIsIHN0YXRlLT52YWwpOworCXN0YXRlLT52YWwgPSAyMzsKKworCWNvcm91dGluZV9zd2l0Y2go JnN0YXRlLT5jMSwgJnN0YXRlLT5jMik7CisKKwlvayhzdGF0ZS0+dmFsID09IDI0LCAic3RhdGUt PnZhbCA9PSAlZCBbZXhwZWN0ZWQgMjRdIiwgc3RhdGUtPnZhbCk7CisKKwljb3JvdXRpbmVfc3dp dGNoKCZzdGF0ZS0+YzEsICZzdGF0ZS0+YzIpOworCisJb2soc3RhdGUtPnZhbCA9PSAyNiwgInN0 YXRlLT52YWwgPT0gJWQgW2V4cGVjdGVkIDI2XSIsIHN0YXRlLT52YWwpOworCisJY29yb3V0aW5l X3N3aXRjaCgmc3RhdGUtPmMxLCAmc3RhdGUtPmMyKTsKKworCW9rKHN0YXRlLT52YWwgPT0gMjks ICJzdGF0ZS0+dmFsID09ICVkIFtleHBlY3RlZCAyOV0iLCBzdGF0ZS0+dmFsKTsKKworCWNvcm91 dGluZV9zd2l0Y2goJnN0YXRlLT5jMSwgJnN0YXRlLT5jMik7Cit9CisKK3N0YXRpYyB2b2lkIGYy KHZvaWQgKnApCit7CisJc3RydWN0IHN0YXRlICpzdGF0ZSA9IChzdHJ1Y3Qgc3RhdGUgKilwOwor CisJc3RhdGUtPnZhbCA9IDE3OworCisJY29yb3V0aW5lX3N3aXRjaCgmc3RhdGUtPmMyLCAmc3Rh dGUtPmMxKTsKKworCW9rKHN0YXRlLT52YWwgPT0gMjMsICJzdGF0ZS0+dmFsID09ICVkIFtleHBl Y3RlZCAyM10iLCBzdGF0ZS0+dmFsKTsKKwlzdGF0ZS0+dmFsICs9IDE7CisKKwljb3JvdXRpbmVf c3dpdGNoKCZzdGF0ZS0+YzIsICZzdGF0ZS0+YzEpOworCisJc3RhdGUtPnZhbCArPSAyOworCisJ Y29yb3V0aW5lX3N3aXRjaCgmc3RhdGUtPmMyLCAmc3RhdGUtPmMxKTsKKworCXN0YXRlLT52YWwg Kz0gMzsKKworCWNvcm91dGluZV9zd2l0Y2goJnN0YXRlLT5jMiwgJnN0YXRlLT5jMSk7CisKKwlj b3JvdXRpbmVfanVtcCgmc3RhdGUtPm1hc3Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3QxKHNp emVfdCBidWZzeikKK3sKKwl2b2lkICpidWYxLCAqYnVmMjsKKwlzdHJ1Y3QgY29yb3V0aW5lX3N0 YWNrICpzdGFjazEsICpzdGFjazI7CisKKwlidWYxID0gbWFsbG9jKGJ1ZnN6KTsKKwlvazEoYnVm MSAhPSBOVUxMKTsKKwlzdGFjazEgPSBjb3JvdXRpbmVfc3RhY2tfaW5pdChidWYxLCBidWZzeiwg MCk7CisJZGlhZygiYnVmMT0lcCBzdGFjazE9JXAgYnVmc3o9MHglenggb3ZlcmhlYWQ9MHglenhc biIsCisJICAgICBidWYxLCBzdGFjazEsIGJ1ZnN6LCBDT1JPVVRJTkVfU1RLX09WRVJIRUFEKTsK KwlvazEoY29yb3V0aW5lX3N0YWNrX3ZhbGlkKHN0YWNrMSkpOworCW9rMShjb3JvdXRpbmVfc3Rh Y2tfc2l6ZShzdGFjazEpID09IGJ1ZnN6IC0gQ09ST1VUSU5FX1NUS19PVkVSSEVBRCk7CisKKwli dWYyID0gbWFsbG9jKGJ1ZnN6KTsKKwlvazEoYnVmMiAhPSBOVUxMKTsKKwlzdGFjazIgPSBjb3Jv dXRpbmVfc3RhY2tfaW5pdChidWYyLCBidWZzeiwgMCk7CisJb2sxKGNvcm91dGluZV9zdGFja192 YWxpZChzdGFjazIpKTsKKwlvazEoY29yb3V0aW5lX3N0YWNrX3NpemUoc3RhY2syKSA9PSBidWZz eiAtIENPUk9VVElORV9TVEtfT1ZFUkhFQUQpOworCisJaWYgKENPUk9VVElORV9BVkFJTEFCTEUp IHsKKwkJc3RydWN0IHN0YXRlIHM7CisKKwkJY29yb3V0aW5lX2luaXQoJnMuYzEsIGYxLCAmcywg c3RhY2sxKTsKKwkJY29yb3V0aW5lX2luaXQoJnMuYzIsIGYyLCAmcywgc3RhY2syKTsKKworCQlj b3JvdXRpbmVfc3dpdGNoKCZzLm1hc3RlciwgJnMuYzEpOworCX0gZWxzZSB7CisJCXNraXAoNSwg IkNvcm91dGluZXMgbm90IGF2YWlsYWJsZSIpOworCX0KKworCW9rKDEsICJDb21wbGV0ZWQgdGVz dDEiKTsKKworCWNvcm91dGluZV9zdGFja19yZWxlYXNlKHN0YWNrMSk7CisJb2sxKCFjb3JvdXRp bmVfc3RhY2tfdmFsaWQoc3RhY2sxKSk7CisJZnJlZShidWYxKTsKKwljb3JvdXRpbmVfc3RhY2tf cmVsZWFzZShzdGFjazIpOworCW9rMSghY29yb3V0aW5lX3N0YWNrX3ZhbGlkKHN0YWNrMikpOwor CWZyZWUoYnVmMik7Cit9CisKKworaW50IG1haW4odm9pZCkKK3sKKwkvKiBUaGlzIGlzIGhvdyBt YW55IHRlc3RzIHlvdSBwbGFuIHRvIHJ1biAqLworCXBsYW5fdGVzdHMoMTQpOworCisJdGVzdDEo ODE5Mik7CisKKwkvKiBUaGlzIGV4aXRzIGRlcGVuZGluZyBvbiB3aGV0aGVyIGFsbCB0ZXN0cyBw YXNzZWQgKi8KKwlyZXR1cm4gZXhpdF9zdGF0dXMoKTsKK30KZGlmZiAtLWdpdCBhL2NjYW4vY29y b3V0aW5lL3Rlc3QvYXBpLTMuYyBiL2NjYW4vY29yb3V0aW5lL3Rlc3QvYXBpLTMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWExMGIxCi0tLSAvZGV2L251bGwKKysrIGIv Y2Nhbi9jb3JvdXRpbmUvdGVzdC9hcGktMy5jCkBAIC0wLDAgKzEsOTAgQEAKKyNpbmNsdWRlIDxz dGRsaWIuaD4KKworI2luY2x1ZGUgPGNjYW4vY29yb3V0aW5lL2Nvcm91dGluZS5oPgorI2luY2x1 ZGUgPGNjYW4vdGFwL3RhcC5oPgorCisvKiBUZXN0IG1ldGFkYXRhICovCisjZGVmaW5lIE1FVEFf TUFHSUMgMHg0ZDg2YWE4MmVjMTg5MmY2CisjZGVmaW5lIEJVRlNJWkUgICAgODE5MgorCitzdHJ1 Y3QgbWV0YWRhdGEgeworCXVpbnQ2NF90IG1hZ2ljOworfTsKKworc3RydWN0IHN0YXRlIHsKKwlz dHJ1Y3QgY29yb3V0aW5lX3N0YXRlIHJldDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsOworfTsKKwor LyogVG91Y2ggYSBidW5jaCBvZiBzdGFjayAqLworc3RhdGljIHZvaWQgY2xvYmJlcih2b2lkICpw KQoreworCXN0cnVjdCBzdGF0ZSAqcyA9IChzdHJ1Y3Qgc3RhdGUgKilwOworCWNoYXIgYnVmW0JV RlNJWkUgLSBDT1JPVVRJTkVfTUlOX1NUS1NaXTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBzaXplb2YoYnVmKTsgaSsrKSB7CisJCWJ1ZltpXSA9IHJhbmRvbSgpICYgMHhmZjsKKwl9CisK KwlkaWFnKCJXcm90ZSByYW5kb20gdG8gYnVmZmVyXG4iKTsKKworCXMtPnRvdGFsID0gMDsKKwlm b3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQlzLT50b3RhbCArPSBidWZbaV07 CisJfQorCisJY29yb3V0aW5lX2p1bXAoJnMtPnJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf bWV0YWRhdGEoc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2spCit7CisJc3RydWN0IG1ldGFk YXRhICptZXRhOworCisJbWV0YSA9IGNvcm91dGluZV9zdGFja190b19tZXRhZGF0YShzdGFjaywg c2l6ZW9mKCptZXRhKSk7CisJb2sxKGNvcm91dGluZV9zdGFja19mcm9tX21ldGFkYXRhKG1ldGEs IHNpemVvZigqbWV0YSkpID09IHN0YWNrKTsKKworCW1ldGEtPm1hZ2ljID0gTUVUQV9NQUdJQzsK KwlvazEobWV0YS0+bWFnaWMgPT0gTUVUQV9NQUdJQyk7CisKKwlpZiAoQ09ST1VUSU5FX0FWQUlM QUJMRSkgeworCQlzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlIHQ7CisJCXN0cnVjdCBzdGF0ZSBzID0g eworCQl9OworCisJCWNvcm91dGluZV9pbml0KCZ0LCBjbG9iYmVyLCAmcywgc3RhY2spOworCQlj b3JvdXRpbmVfc3dpdGNoKCZzLnJldCwgJnQpOworCQlvazEocy50b3RhbCAhPSAwKTsKKwl9IGVs c2UgeworCQlza2lwKDEsICJDb3JvdXRpbmVzIG5vdCBhdmFpbGFibGUiKTsKKwl9CisKKwlvazEo Y29yb3V0aW5lX3N0YWNrX3RvX21ldGFkYXRhKHN0YWNrLCBzaXplb2YoKm1ldGEpKSA9PSBtZXRh KTsKKwlvazEoY29yb3V0aW5lX3N0YWNrX2Zyb21fbWV0YWRhdGEobWV0YSwgc2l6ZW9mKCptZXRh KSkgPT0gc3RhY2spOworCW9rMShtZXRhLT5tYWdpYyA9PSBNRVRBX01BR0lDKTsKK30KKworaW50 IG1haW4odm9pZCkKK3sKKwljaGFyIGJ1ZltCVUZTSVpFXTsKKwlzdHJ1Y3QgY29yb3V0aW5lX3N0 YWNrICpzdGFjazsKKworCS8qIFRoaXMgaXMgaG93IG1hbnkgdGVzdHMgeW91IHBsYW4gdG8gcnVu ICovCisJcGxhbl90ZXN0cyg5KTsKKworCS8qIEZpeCBzZWVkIHNvIHdlIGdldCBjb25zaXN0ZW50 LCB0aG91Z2ggcHNldWRvLXJhbmRvbSByZXN1bHRzICovCQorCXNyYW5kb20oMCk7CisKKwlzdGFj ayA9IGNvcm91dGluZV9zdGFja19pbml0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNpemVvZihzdHJ1Y3Qg bWV0YWRhdGEpKTsKKwlvazEoc3RhY2sgIT0gTlVMTCk7CisJb2sxKGNvcm91dGluZV9zdGFja192 YWxpZChzdGFjaykpOworCW9rMShjb3JvdXRpbmVfc3RhY2tfc2l6ZShzdGFjaykKKwkgICAgPT0g QlVGU0laRSAtIENPUk9VVElORV9TVEtfT1ZFUkhFQUQgLSBzaXplb2Yoc3RydWN0IG1ldGFkYXRh KSk7CisKKwl0ZXN0X21ldGFkYXRhKHN0YWNrKTsKKworCWNvcm91dGluZV9zdGFja19yZWxlYXNl KHN0YWNrKTsKKworCS8qIFRoaXMgZXhpdHMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYWxsIHRlc3Rz IHBhc3NlZCAqLworCXJldHVybiBleGl0X3N0YXR1cygpOworfQotLSAKMi45LjMKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmNjYW4gbWFpbGluZyBsaXN0 CmNjYW5AbGlzdHMub3psYWJzLm9yZwpodHRwczovL2xpc3RzLm96bGFicy5vcmcvbGlzdGluZm8v Y2Nhbgo=