From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH] xl: move some helper functions to xl_utils.c Date: Mon, 27 Feb 2017 17:44:40 +0000 Message-ID: <20170227174440.8802-1-wei.liu2@citrix.com> References: <22708.19309.203972.821160@mariner.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ciPLu-0001pL-AL for xen-devel@lists.xenproject.org; Mon, 27 Feb 2017 17:44:50 +0000 In-Reply-To: <22708.19309.203972.821160@mariner.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org TW92ZSBzb21lIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25zIHRvIGEgbmV3IGZpbGUuCgpmaW5kX2Rv bWFpbiByZXF1aXJlcyBhY2Nlc3MgdG8gZ2xvYmFsIHZhcmlhYmxlIGNvbW1vbl9kb21uYW1lLiBN YWtlIHRoYXQKbm9uLXN0YXRpYy4KCk5vIGZ1bmN0aW9uYWwgY2hhbmdlLgoKU2lnbmVkLW9mZi1i eTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94bC9NYWtlZmlsZSAg ICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsX2NtZGltcGwuYyB8IDIyMSArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvb2xzL3hsL3hsX3V0aWxzLmMgICB8IDI1OCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdG9vbHMv eGwveGxfdXRpbHMuaCAgIHwgIDI3ICsrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAyODcgaW5zZXJ0 aW9ucygrKSwgMjIxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3hsL3hs X3V0aWxzLmMKCmRpZmYgLS1naXQgYS90b29scy94bC9NYWtlZmlsZSBiL3Rvb2xzL3hsL01ha2Vm aWxlCmluZGV4IDcxMDYwMDlkNjYuLjJmNzQwYjQ3ODkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL01h a2VmaWxlCisrKyBiL3Rvb2xzL3hsL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw3IEBAIExERkxBR1Mg Kz0gJChQVEhSRUFEX0xERkxBR1MpCiBDRkxBR1NfWEwgKz0gJChDRkxBR1NfbGlieGVubGlnaHQp CiBDRkxBR1NfWEwgKz0gLVdzaGFkb3cKIAotWExfT0JKUyA9IHhsLm8geGxfY21kaW1wbC5vIHhs X2NtZHRhYmxlLm8geGxfc3hwLm8KK1hMX09CSlMgPSB4bC5vIHhsX2NtZGltcGwubyB4bF9jbWR0 YWJsZS5vIHhsX3N4cC5vIHhsX3V0aWxzLm8KICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENGTEFH U19saWJ4ZW50b29sbG9nKQogJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX1hMKQogJChY TF9PQkpTKTogQ0ZMQUdTICs9IC1pbmNsdWRlICQoWEVOX1JPT1QpL3Rvb2xzL2NvbmZpZy5oICMg bGlieGxfanNvbi5oIG5lZWRzIGl0LgpkaWZmIC0tZ2l0IGEvdG9vbHMveGwveGxfY21kaW1wbC5j IGIvdG9vbHMveGwveGxfY21kaW1wbC5jCmluZGV4IGQ5ZDk0NzgyN2QuLmRlOWU2YWRkNjUgMTAw NjQ0Ci0tLSBhL3Rvb2xzL3hsL3hsX2NtZGltcGwuYworKysgYi90b29scy94bC94bF9jbWRpbXBs LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlz dGQuaD4KICNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8Z2V0b3B0Lmg+CiAjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5o PgpAQCAtNDgsNyArNDcsNyBAQCBsaWJ4bF9jdHggKmN0eDsKIAogeGxjaGlsZCBjaGlsZHJlbltj aGlsZF9tYXhdOwogCi1zdGF0aWMgY29uc3QgY2hhciAqY29tbW9uX2RvbW5hbWU7Citjb25zdCBj aGFyICpjb21tb25fZG9tbmFtZTsKIHN0YXRpYyBpbnQgZmRfbG9jayA9IC0xOwogCiBzdGF0aWMg Y29uc3QgY2hhciBzYXZlZmlsZWhlYWRlcl9tYWdpY1szMl09CkBAIC0xMjksMjIgKzEyOCw2IEBA IHN0cnVjdCBkb21haW5fY3JlYXRlIHsKICAgICBjaGFyICoqbWlncmF0aW9uX2RvbW5hbWVfcjsg LyogZnJvbSBtYWxsb2MgKi8KIH07CiAKLQotc3RhdGljIHVpbnQzMl90IGZpbmRfZG9tYWluKGNv bnN0IGNoYXIgKnApIF9fYXR0cmlidXRlX18oKHdhcm5fdW51c2VkX3Jlc3VsdCkpOwotc3RhdGlj IHVpbnQzMl90IGZpbmRfZG9tYWluKGNvbnN0IGNoYXIgKnApCi17Ci0gICAgdWludDMyX3QgZG9t aWQ7Ci0gICAgaW50IHJjOwotCi0gICAgcmMgPSBsaWJ4bF9kb21haW5fcXVhbGlmaWVyX3RvX2Rv bWlkKGN0eCwgcCwgJmRvbWlkKTsKLSAgICBpZiAocmMpIHsKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICIlcyBpcyBhbiBpbnZhbGlkIGRvbWFpbiBpZGVudGlmaWVyIChyYz0lZClcbiIsIHAsIHJj KTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICBjb21tb25fZG9tbmFt ZSA9IGxpYnhsX2RvbWlkX3RvX25hbWUoY3R4LCBkb21pZCk7Ci0gICAgcmV0dXJuIGRvbWlkOwot fQotCiBpbnQgY2hpbGRfcmVwb3J0KHhsY2hpbGRudW0gY2hpbGQpCiB7CiAgICAgaW50IHN0YXR1 czsKQEAgLTI1Myw0NyArMjM2LDYgQEAgcmVsZWFzZV9sb2NrOgogICAgIHJldHVybiByYzsKIH0K IAotc3RhdGljIHZvaWQgKnhtYWxsb2Moc2l6ZV90IHN6KSB7Ci0gICAgdm9pZCAqcjsKLSAgICBy ID0gbWFsbG9jKHN6KTsKLSAgICBpZiAoIXIpIHsgZnByaW50ZihzdGRlcnIsInhsOiBVbmFibGUg dG8gbWFsbG9jICVsdSBieXRlcy5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVk IGxvbmcpc3opOyBleGl0KC1FUlJPUl9GQUlMKTsgfQotICAgIHJldHVybiByOwotfQotCi1zdGF0 aWMgdm9pZCAqeGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHN6KSBfX2F0dHJpYnV0ZV9fKCh1bnVz ZWQpKTsKLXN0YXRpYyB2b2lkICp4Y2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc3opIHsKLSAgICB2 b2lkICpyID0gY2FsbG9jKG4sIHN6KTsKLSAgICBpZiAoIXIpIHsKLSAgICAgICAgZnByaW50Zihz dGRlcnIsInhsOiBVbmFibGUgdG8gY2FsbG9jICV6dSBieXRlcy5cbiIsIHN6Km4pOwotICAgICAg ICBleGl0KC1FUlJPUl9GQUlMKTsKLSAgICB9Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB2 b2lkICp4cmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzeikgewotICAgIHZvaWQgKnI7Ci0gICAg aWYgKCFzeikgeyBmcmVlKHB0cik7IHJldHVybiAwOyB9Ci0gICAgICAvKiByZWFsbG9jKG5vbi0w LCAwKSBoYXMgYSB1c2VsZXNzIHJldHVybiB2YWx1ZTsKLSAgICAgICAqIGJ1dCB4cmVhbGxvYyhh bnl0aGluZywgMCkgaXMgbGlrZSBmcmVlCi0gICAgICAgKi8KLSAgICByID0gcmVhbGxvYyhwdHIs IHN6KTsKLSAgICBpZiAoIXIpIHsgZnByaW50ZihzdGRlcnIsInhsOiBVbmFibGUgdG8gcmVhbGxv YyB0byAlbHUgYnl0ZXMuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25n KXN6KTsgZXhpdCgtRVJST1JfRkFJTCk7IH0KLSAgICByZXR1cm4gcjsKLX0KLQotc3RhdGljIGNo YXIgKnhzdHJkdXAoY29uc3QgY2hhciAqeCkKLXsKLSAgICBjaGFyICpyOwotICAgIHIgPSBzdHJk dXAoeCk7Ci0gICAgaWYgKCFyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IFVuYWJs ZSB0byBzdHJkdXAgYSBzdHJpbmcgb2YgbGVuZ3RoICV6dS5cbiIsCi0gICAgICAgICAgICAgICAg c3RybGVuKHgpKTsKLSAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7Ci0gICAgfQotICAgIHJldHVy biByOwotfQogCiAjZGVmaW5lIEFSUkFZX0VYVEVORF9JTklUX19DT1JFKGFycmF5LGNvdW50LGlu aXRmbixtb3JlKSAgICAgICAgICAgICAgICBcCiAgICAgKHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zMTMsNDYg KzI1NSw2IEBAIHN0YXRpYyBjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKngpCiAjZGVmaW5lIEFS UkFZX0VYVEVORF9JTklUX05PREVWSUQoYXJyYXksY291bnQsaW5pdGZuKSBcCiAgICAgQVJSQVlf RVhURU5EX0lOSVRfX0NPUkUoKGFycmF5KSwoY291bnQpLChpbml0Zm4pLCAvKiBub3RoaW5nICov ICkKIAotc3RhdGljIHZvaWQgZG9sb2coY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0 IGNoYXIgKmZ1bmMsIGNoYXIgKmZtdCwgLi4uKQotICAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQo cHJpbnRmLDQsNSkpKTsKLQotc3RhdGljIHZvaWQgZG9sb2coY29uc3QgY2hhciAqZmlsZSwgaW50 IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMsIGNoYXIgKmZtdCwgLi4uKQotewotICAgIHZhX2xpc3Qg YXA7Ci0gICAgY2hhciAqcyA9IE5VTEw7Ci0gICAgaW50IHJjOwotCi0gICAgdmFfc3RhcnQoYXAs IGZtdCk7Ci0gICAgcmMgPSB2YXNwcmludGYoJnMsIGZtdCwgYXApOwotICAgIHZhX2VuZChhcCk7 Ci0gICAgaWYgKHJjID49IDApCi0gICAgICAgIC8qIHdlIGlnbm9yZSB3cml0ZSBlcnJvcnMgc2lu Y2Ugd2UgaGF2ZSBubyB3YXkgdG8gcmVwb3J0IHRoZW07Ci0gICAgICAgICAqIHRoZSBhbHRlcm5h dGl2ZSB3b3VsZCBiZSB0byBhYm9ydCB0aGUgd2hvbGUgcHJvZ3JhbSAqLwotICAgICAgICBsaWJ4 bF93cml0ZV9leGFjdGx5KE5VTEwsIGxvZ2ZpbGUsIHMsIHJjLCBOVUxMLCBOVUxMKTsKLSAgICBm cmVlKHMpOwotfQotCi1zdGF0aWMgdm9pZCB4dmFzcHJpbnRmKGNoYXIgKipzdHJwLCBjb25zdCBj aGFyICpmbXQsIHZhX2xpc3QgYXApCi0gICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50Ziwy LDApKSk7Ci1zdGF0aWMgdm9pZCB4dmFzcHJpbnRmKGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpm bXQsIHZhX2xpc3QgYXApCi17Ci0gICAgaW50IHIgPSB2YXNwcmludGYoc3RycCwgZm10LCBhcCk7 Ci0gICAgaWYgKHIgPT0gLTEpIHsKLSAgICAgICAgcGVycm9yKCJhc3ByaW50ZiBmYWlsZWQiKTsK LSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgeGFz cHJpbnRmKGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLSAgICBfX2F0dHJpYnV0 ZV9fKChmb3JtYXQocHJpbnRmLDIsMykpKTsKLXN0YXRpYyB2b2lkIHhhc3ByaW50ZihjaGFyICoq c3RycCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcDsKLSAgICB2YV9z dGFydChhcCwgZm10KTsKLSAgICB4dmFzcHJpbnRmKHN0cnAsIGZtdCwgYXApOwotICAgIHZhX2Vu ZChhcCk7Ci19Ci0KIHN0YXRpYyB5YWpsX2dlbl9zdGF0dXMgcHJpbnRmX2luZm9fb25lX2pzb24o eWFqbF9nZW4gaGFuZCwgaW50IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29uZmlnICpkX2NvbmZpZykKIHsKQEAgLTM4OSwx OSArMjkxLDYgQEAgb3V0OgogICAgIHJldHVybiBzOwogfQogCi1zdGF0aWMgdm9pZCBmbHVzaF9z dHJlYW0oRklMRSAqZmgpCi17Ci0gICAgY29uc3QgY2hhciAqZmhfbmFtZSA9Ci0gICAgICAgIGZo ID09IHN0ZG91dCA/ICJzdGRvdXQiIDoKLSAgICAgICAgZmggPT0gc3RkZXJyID8gInN0ZGVyciIg OgotICAgICAgICAoYWJvcnQoKSwgKGNvbnN0IGNoYXIqKTApOwotCi0gICAgaWYgKGZlcnJvcihm aCkgfHwgZmZsdXNoKGZoKSkgewotICAgICAgICBwZXJyb3IoZmhfbmFtZSk7Ci0gICAgICAgIGV4 aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KIHN0YXRpYyB2b2lkIHByaW50Zl9pbmZvKGVu dW0gb3V0cHV0X2Zvcm1hdCBvdXRwdXRfZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg aW50IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAq ZF9jb25maWcsIEZJTEUgKmZoKQpAQCAtMzI5NCw0OCArMzE4Myw2IEBAIHN0YXRpYyBpbnQ2NF90 IHBhcnNlX21lbV9zaXplX2tiKGNvbnN0IGNoYXIgKm1lbSkKICAgICByZXR1cm4ga2J5dGVzOwog fQogCi0vKgotICogQ2FsbGVycyBzaG91bGQgdXNlIFNXSVRDSF9GT1JFQUNIX09QVCBpbiBwcmVm ZXJlbmNlIHRvIGNhbGxpbmcgdGhpcwotICogZGlyZWN0bHkuCi0gKi8KLXN0YXRpYyBpbnQgZGVm X2dldG9wdChpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSwKLSAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpvcHRzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciogaGVscHN0ciwgaW50IHJlcWFyZ3MpCi17Ci0gICAgaW50IG9wdDsKLSAgICBjb25zdCBzdHJ1 Y3Qgb3B0aW9uIGRlZl9vcHRpb25zW10gPSB7Ci0gICAgICAgIENPTU1PTl9MT05HX09QVFMKLSAg ICB9OwotCi0gICAgaWYgKCFsb25nb3B0cykKLSAgICAgICAgbG9uZ29wdHMgPSBkZWZfb3B0aW9u czsKLQotICAgIG9wdGVyciA9IDA7Ci0gICAgd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdj LCBhcmd2LCBvcHRzdHJpbmcsIGxvbmdvcHRzLCBOVUxMKSkgPT0gJz8nKSB7Ci0gICAgICAgIGlm IChvcHRvcHQgPT0gJ2gnKSB7Ci0gICAgICAgICAgICBoZWxwKGhlbHBzdHIpOwotICAgICAgICAg ICAgZXhpdCgwKTsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9wdGlvbiBg JWMnIG5vdCBzdXBwb3J0ZWQuXG4iLCBvcHRvcHQpOwotICAgICAgICBleGl0KDIpOwotICAgIH0K LSAgICBpZiAob3B0ID09ICdoJykgewotICAgICAgICBoZWxwKGhlbHBzdHIpOwotICAgICAgICBl eGl0KDApOwotICAgIH0KLSAgICBpZiAob3B0ICE9IC0xKQotICAgICAgICByZXR1cm4gb3B0Owot Ci0gICAgaWYgKGFyZ2MgLSBvcHRpbmQgPD0gcmVxYXJncyAtIDEpIHsKLSAgICAgICAgZnByaW50 ZihzdGRlcnIsICIneGwgJXMnIHJlcXVpcmVzIGF0IGxlYXN0ICVkIGFyZ3VtZW50JXMuXG5cbiIs Ci0gICAgICAgICAgICAgICAgaGVscHN0ciwgcmVxYXJncywgcmVxYXJncyA+IDEgPyAicyIgOiAi Iik7Ci0gICAgICAgIGhlbHAoaGVscHN0cik7Ci0gICAgICAgIGV4aXQoMik7Ci0gICAgfQotICAg IHJldHVybiAtMTsKLX0KLQogc3RhdGljIGludCBzZXRfbWVtb3J5X21heCh1aW50MzJfdCBkb21p ZCwgY29uc3QgY2hhciAqbWVtKQogewogICAgIGludDY0X3QgbWVtb3J5a2I7CkBAIC00MTU1LDU2 ICs0MDAyLDYgQEAgb3V0OgogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfYml0bWFwKHVp bnQ4X3QgKm1hcCwgaW50IG1hcGxlbiwgRklMRSAqc3RyZWFtKQotewotICAgIGludCBpOwotICAg IHVpbnQ4X3QgcG1hcCA9IDAsIGJpdG1hc2sgPSAwOwotICAgIGludCBmaXJzdHNldCA9IDAsIHN0 YXRlID0gMDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBtYXBsZW47IGkrKykgewotICAgICAgICBp ZiAoaSAlIDggPT0gMCkgewotICAgICAgICAgICAgcG1hcCA9ICptYXArKzsKLSAgICAgICAgICAg IGJpdG1hc2sgPSAxOwotICAgICAgICB9IGVsc2UgYml0bWFzayA8PD0gMTsKLQotICAgICAgICBz d2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgY2FzZSAyOgotICAgICAg ICAgICAgaWYgKChwbWFwICYgYml0bWFzaykgIT0gMCkgewotICAgICAgICAgICAgICAgIGZpcnN0 c2V0ID0gaTsKLSAgICAgICAgICAgICAgICBzdGF0ZSsrOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgY29udGludWU7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgY2FzZSAzOgotICAgICAg ICAgICAgaWYgKChwbWFwICYgYml0bWFzaykgPT0gMCkgewotICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RyZWFtLCAiJXMlZCIsIHN0YXRlID4gMSA/ICIsIiA6ICIiLCBmaXJzdHNldCk7Ci0gICAg ICAgICAgICAgICAgaWYgKGkgLSAxID4gZmlyc3RzZXQpCi0gICAgICAgICAgICAgICAgICAgIGZw cmludGYoc3RyZWFtLCAiLSVkIiwgaSAtIDEpOwotICAgICAgICAgICAgICAgIHN0YXRlID0gMjsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQot ICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgZnByaW50 ZihzdHJlYW0sICJub25lIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGlmIChmaXJz dHNldCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICJhbGwiKTsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAzOgotICAg ICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlcyVkIiwgc3RhdGUgPiAxID8gIiwiIDogIiIsIGZp cnN0c2V0KTsKLSAgICAgICAgICAgIGlmIChpIC0gMSA+IGZpcnN0c2V0KQotICAgICAgICAgICAg ICAgIGZwcmludGYoc3RyZWFtLCAiLSVkIiwgaSAtIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgfQotfQotCiBzdGF0aWMgdm9pZCBsaXN0X2RvbWFpbnMoYm9vbCB2ZXJib3NlLCBib29sIGNv bnRleHQsIGJvb2wgY2xhaW0sIGJvb2wgbnVtYSwKICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIGNwdXBvb2wsIGNvbnN0IGxpYnhsX2RvbWluZm8gKmluZm8sIGludCBuYl9kb21haW4pCiB7 CkBAIC01MzMxLDIyICs1MTI4LDYgQEAgaW50IG1haW5fdm1fbGlzdChpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIHZvaWQgc3RyaW5n X3JlYWxsb2NfYXBwZW5kKGNoYXIgKiphY2N1bXVsYXRlLCBjb25zdCBjaGFyICptb3JlKQotewot ICAgIC8qIEFwcGVuZHMgbW9yZSB0byBhY2N1bXVsYXRlLiAgQWNjdW11bGF0ZSBpcyBlaXRoZXIg TlVMTCwgb3IKLSAgICAgKiBwb2ludHMgKGFsd2F5cykgdG8gYSBtYWxsb2MnZCBudWwtdGVybWlu YXRlZCBzdHJpbmcuICovCi0KLSAgICBzaXplX3Qgb2xkbGVuID0gKmFjY3VtdWxhdGUgPyBzdHJs ZW4oKmFjY3VtdWxhdGUpIDogMDsKLSAgICBzaXplX3QgbW9yZWxlbiA9IHN0cmxlbihtb3JlKSAr IDEvKm51bCovOwotICAgIGlmIChvbGRsZW4gPiBTU0laRV9NQVggfHwgbW9yZWxlbiA+IFNTSVpF X01BWCAtIG9sZGxlbikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQWRkaXRpb25hbCBjb25m aWcgZGF0YSBmYXIgdG9vIGxhcmdlXG4iKTsKLSAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7Ci0g ICAgfQotCi0gICAgKmFjY3VtdWxhdGUgPSB4cmVhbGxvYygqYWNjdW11bGF0ZSwgb2xkbGVuICsg bW9yZWxlbik7Ci0gICAgbWVtY3B5KCphY2N1bXVsYXRlICsgb2xkbGVuLCBtb3JlLCBtb3JlbGVu KTsKLX0KLQogaW50IG1haW5fY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAgICBj b25zdCBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CmRpZmYgLS1naXQgYS90b29scy94bC94bF91dGls cy5jIGIvdG9vbHMveGwveGxfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4xZWJlODAwNWFlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMveGwveGxfdXRpbHMu YwpAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTcgQ2l0cml4IEx0 ZCBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLjEg b25seS4gd2l0aCB0aGUgc3BlY2lhbAorICogZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVk IGluIGZpbGUgTElDRU5TRS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor CisjZGVmaW5lIF9HTlVfU09VUkNFCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxz dGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGxpYnhsLmg+CisjaW5j bHVkZSA8bGlieGxfdXRpbHMuaD4KKworI2luY2x1ZGUgInhsLmgiCisjaW5jbHVkZSAieGxfdXRp bHMuaCIKKworZXh0ZXJuIGludCBsb2dmaWxlOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbW1vbl9k b21uYW1lOworCit2b2lkIGRvbG9nKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBj aGFyICpmdW5jLCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIGNoYXIg KnMgPSBOVUxMOworICAgIGludCByYzsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIHJj ID0gdmFzcHJpbnRmKCZzLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIGlmIChyYyA+ PSAwKQorICAgICAgICAvKiB3ZSBpZ25vcmUgd3JpdGUgZXJyb3JzIHNpbmNlIHdlIGhhdmUgbm8g d2F5IHRvIHJlcG9ydCB0aGVtOworICAgICAgICAgKiB0aGUgYWx0ZXJuYXRpdmUgd291bGQgYmUg dG8gYWJvcnQgdGhlIHdob2xlIHByb2dyYW0gKi8KKyAgICAgICAgbGlieGxfd3JpdGVfZXhhY3Rs eShOVUxMLCBsb2dmaWxlLCBzLCByYywgTlVMTCwgTlVMTCk7CisgICAgZnJlZShzKTsKK30KKwor dm9pZCB4dmFzcHJpbnRmKGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXAp Cit7CisgICAgaW50IHIgPSB2YXNwcmludGYoc3RycCwgZm10LCBhcCk7CisgICAgaWYgKHIgPT0g LTEpIHsKKyAgICAgICAgcGVycm9yKCJhc3ByaW50ZiBmYWlsZWQiKTsKKyAgICAgICAgZXhpdChF WElUX0ZBSUxVUkUpOworICAgIH0KK30KKwordm9pZCB4YXNwcmludGYoY2hhciAqKnN0cnAsIGNv bnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgdmFfc3RhcnQoYXAs IGZtdCk7CisgICAgeHZhc3ByaW50ZihzdHJwLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOwor fQorCit2b2lkICp4bWFsbG9jKHNpemVfdCBzeikKK3sKKyAgICB2b2lkICpyOworICAgIHIgPSBt YWxsb2Moc3opOworICAgIGlmICghcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGw6IFVu YWJsZSB0byBtYWxsb2MgJWx1IGJ5dGVzLlxuIiwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQg bG9uZylzeik7CisgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOworICAgIH0KKyAgICByZXR1cm4g cjsKK30KKwordm9pZCAqeGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHN6KQoreworICAgIHZvaWQg KnIgPSBjYWxsb2Mobiwgc3opOworICAgIGlmICghcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVy ciwieGw6IFVuYWJsZSB0byBjYWxsb2MgJXp1IGJ5dGVzLlxuIiwgc3oqbik7CisgICAgICAgIGV4 aXQoLUVSUk9SX0ZBSUwpOworICAgIH0KKyAgICByZXR1cm4gcjsKK30KKwordm9pZCAqeHJlYWxs b2Modm9pZCAqcHRyLCBzaXplX3Qgc3opCit7CisgICAgdm9pZCAqcjsKKyAgICBpZiAoIXN6KSB7 CisgICAgICAgIGZyZWUocHRyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIC8qIHJl YWxsb2Mobm9uLTAsIDApIGhhcyBhIHVzZWxlc3MgcmV0dXJuIHZhbHVlOworICAgICAqIGJ1dCB4 cmVhbGxvYyhhbnl0aGluZywgMCkgaXMgbGlrZSBmcmVlCisgICAgICovCisgICAgciA9IHJlYWxs b2MocHRyLCBzeik7CisgICAgaWYgKCFyKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCJ4bDog VW5hYmxlIHRvIHJlYWxsb2MgdG8gJWx1IGJ5dGVzLlxuIiwKKyAgICAgICAgICAgICAgICAodW5z aWduZWQgbG9uZylzeik7CisgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOworICAgIH0KKyAgICBy ZXR1cm4gcjsKK30KKworY2hhciAqeHN0cmR1cChjb25zdCBjaGFyICp4KQoreworICAgIGNoYXIg KnI7CisgICAgciA9IHN0cmR1cCh4KTsKKyAgICBpZiAoIXIpIHsKKyAgICAgICAgZnByaW50Zihz dGRlcnIsICJ4bDogVW5hYmxlIHRvIHN0cmR1cCBhIHN0cmluZyBvZiBsZW5ndGggJXp1LlxuIiwK KyAgICAgICAgICAgICAgICBzdHJsZW4oeCkpOworICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsK KyAgICB9CisgICAgcmV0dXJuIHI7Cit9CisKK3ZvaWQgZmx1c2hfc3RyZWFtKEZJTEUgKmZoKQor eworICAgIGNvbnN0IGNoYXIgKmZoX25hbWUgPQorICAgICAgICBmaCA9PSBzdGRvdXQgPyAic3Rk b3V0IiA6CisgICAgICAgIGZoID09IHN0ZGVyciA/ICJzdGRlcnIiIDoKKyAgICAgICAgKGFib3J0 KCksIChjb25zdCBjaGFyKikwKTsKKworICAgIGlmIChmZXJyb3IoZmgpIHx8IGZmbHVzaChmaCkp IHsKKyAgICAgICAgcGVycm9yKGZoX25hbWUpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7 CisgICAgfQorfQorCit1aW50MzJfdCBmaW5kX2RvbWFpbihjb25zdCBjaGFyICpwKQoreworICAg IHVpbnQzMl90IGRvbWlkOworICAgIGludCByYzsKKworICAgIHJjID0gbGlieGxfZG9tYWluX3F1 YWxpZmllcl90b19kb21pZChjdHgsIHAsICZkb21pZCk7CisgICAgaWYgKHJjKSB7CisgICAgICAg IGZwcmludGYoc3RkZXJyLCAiJXMgaXMgYW4gaW52YWxpZCBkb21haW4gaWRlbnRpZmllciAocmM9 JWQpXG4iLCBwLCByYyk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAg Y29tbW9uX2RvbW5hbWUgPSBsaWJ4bF9kb21pZF90b19uYW1lKGN0eCwgZG9taWQpOworICAgIHJl dHVybiBkb21pZDsKK30KKworLyoKKyAqIENhbGxlcnMgc2hvdWxkIHVzZSBTV0lUQ0hfRk9SRUFD SF9PUFQgaW4gcHJlZmVyZW5jZSB0byBjYWxsaW5nIHRoaXMKKyAqIGRpcmVjdGx5LgorICovCitp bnQgZGVmX2dldG9wdChpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSwKKyAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpvcHRzdHJpbmcsCisgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IG9wdGlvbiAqbG9uZ29wdHMsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaGVscHN0ciwg aW50IHJlcWFyZ3MpCit7CisgICAgaW50IG9wdDsKKyAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGRl Zl9vcHRpb25zW10gPSB7CisgICAgICAgIENPTU1PTl9MT05HX09QVFMKKyAgICB9OworCisgICAg aWYgKCFsb25nb3B0cykKKyAgICAgICAgbG9uZ29wdHMgPSBkZWZfb3B0aW9uczsKKworICAgIG9w dGVyciA9IDA7CisgICAgd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBvcHRz dHJpbmcsIGxvbmdvcHRzLCBOVUxMKSkgPT0gJz8nKSB7CisgICAgICAgIGlmIChvcHRvcHQgPT0g J2gnKSB7CisgICAgICAgICAgICBoZWxwKGhlbHBzdHIpOworICAgICAgICAgICAgZXhpdCgwKTsK KyAgICAgICAgfQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9wdGlvbiBgJWMnIG5vdCBzdXBw b3J0ZWQuXG4iLCBvcHRvcHQpOworICAgICAgICBleGl0KDIpOworICAgIH0KKyAgICBpZiAob3B0 ID09ICdoJykgeworICAgICAgICBoZWxwKGhlbHBzdHIpOworICAgICAgICBleGl0KDApOworICAg IH0KKyAgICBpZiAob3B0ICE9IC0xKQorICAgICAgICByZXR1cm4gb3B0OworCisgICAgaWYgKGFy Z2MgLSBvcHRpbmQgPD0gcmVxYXJncyAtIDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIn eGwgJXMnIHJlcXVpcmVzIGF0IGxlYXN0ICVkIGFyZ3VtZW50JXMuXG5cbiIsCisgICAgICAgICAg ICAgICAgaGVscHN0ciwgcmVxYXJncywgcmVxYXJncyA+IDEgPyAicyIgOiAiIik7CisgICAgICAg IGhlbHAoaGVscHN0cik7CisgICAgICAgIGV4aXQoMik7CisgICAgfQorICAgIHJldHVybiAtMTsK K30KKwordm9pZCBzdHJpbmdfcmVhbGxvY19hcHBlbmQoY2hhciAqKmFjY3VtdWxhdGUsIGNvbnN0 IGNoYXIgKm1vcmUpCit7CisgICAgLyogQXBwZW5kcyBtb3JlIHRvIGFjY3VtdWxhdGUuICBBY2N1 bXVsYXRlIGlzIGVpdGhlciBOVUxMLCBvcgorICAgICAqIHBvaW50cyAoYWx3YXlzKSB0byBhIG1h bGxvYydkIG51bC10ZXJtaW5hdGVkIHN0cmluZy4gKi8KKworICAgIHNpemVfdCBvbGRsZW4gPSAq YWNjdW11bGF0ZSA/IHN0cmxlbigqYWNjdW11bGF0ZSkgOiAwOworICAgIHNpemVfdCBtb3JlbGVu ID0gc3RybGVuKG1vcmUpICsgMS8qbnVsKi87CisgICAgaWYgKG9sZGxlbiA+IFNTSVpFX01BWCB8 fCBtb3JlbGVuID4gU1NJWkVfTUFYIC0gb2xkbGVuKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy LCJBZGRpdGlvbmFsIGNvbmZpZyBkYXRhIGZhciB0b28gbGFyZ2VcbiIpOworICAgICAgICBleGl0 KC1FUlJPUl9GQUlMKTsKKyAgICB9CisKKyAgICAqYWNjdW11bGF0ZSA9IHhyZWFsbG9jKCphY2N1 bXVsYXRlLCBvbGRsZW4gKyBtb3JlbGVuKTsKKyAgICBtZW1jcHkoKmFjY3VtdWxhdGUgKyBvbGRs ZW4sIG1vcmUsIG1vcmVsZW4pOworfQorCit2b2lkIHByaW50X2JpdG1hcCh1aW50OF90ICptYXAs IGludCBtYXBsZW4sIEZJTEUgKnN0cmVhbSkKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50OF90IHBt YXAgPSAwLCBiaXRtYXNrID0gMDsKKyAgICBpbnQgZmlyc3RzZXQgPSAwLCBzdGF0ZSA9IDA7CisK KyAgICBmb3IgKGkgPSAwOyBpIDwgbWFwbGVuOyBpKyspIHsKKyAgICAgICAgaWYgKGkgJSA4ID09 IDApIHsKKyAgICAgICAgICAgIHBtYXAgPSAqbWFwKys7CisgICAgICAgICAgICBiaXRtYXNrID0g MTsKKyAgICAgICAgfSBlbHNlIGJpdG1hc2sgPDw9IDE7CisKKyAgICAgICAgc3dpdGNoIChzdGF0 ZSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICgo cG1hcCAmIGJpdG1hc2spICE9IDApIHsKKyAgICAgICAgICAgICAgICBmaXJzdHNldCA9IGk7Cisg ICAgICAgICAgICAgICAgc3RhdGUrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGlmICgo cG1hcCAmIGJpdG1hc2spID09IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwg IiVzJWQiLCBzdGF0ZSA+IDEgPyAiLCIgOiAiIiwgZmlyc3RzZXQpOworICAgICAgICAgICAgICAg IGlmIChpIC0gMSA+IGZpcnN0c2V0KQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVh bSwgIi0lZCIsIGkgLSAxKTsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzd2l0Y2gg KHN0YXRlKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAi bm9uZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoZmlyc3RzZXQgPT0gMCkg eworICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiYWxsIik7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGZw cmludGYoc3RyZWFtLCAiJXMlZCIsIHN0YXRlID4gMSA/ICIsIiA6ICIiLCBmaXJzdHNldCk7Cisg ICAgICAgICAgICBpZiAoaSAtIDEgPiBmaXJzdHNldCkKKyAgICAgICAgICAgICAgICBmcHJpbnRm KHN0cmVhbSwgIi0lZCIsIGkgLSAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor CisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6 IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS90 b29scy94bC94bF91dGlscy5oIGIvdG9vbHMveGwveGxfdXRpbHMuaAppbmRleCBlYmI5MzA1Yjdj Li5hMmNmMTM4NTIzIDEwMDY0NAotLS0gYS90b29scy94bC94bF91dGlscy5oCisrKyBiL3Rvb2xz L3hsL3hsX3V0aWxzLmgKQEAgLTE1LDYgKzE1LDggQEAKICNpZm5kZWYgWExfVVRJTFNfSAogI2Rl ZmluZSBYTF9VVElMU19ICiAKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKwogLyogRm9yIGNhbGxzIHdo aWNoIHJldHVybiBhbiBlcnJubyBvbiBmYWlsdXJlICovCiAjZGVmaW5lIENIS19FUlJOT1ZBTCgg Y2FsbCApICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg ICAgIGludCBjaGtfZXJybm92YWwgPSAoY2FsbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCkBAIC0xMTgsNiArMTIwLDMxIEBACiAjZGVmaW5lIENPTU1PTl9MT05HX09Q VFMgeyJoZWxwIiwgMCwgMCwgJ2gnfSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgIHswLCAw LCAwLCAwfQogCitpbnQgZGVmX2dldG9wdChpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSwK KyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wdHN0cmluZywKKyAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciog aGVscHN0ciwgaW50IHJlcWFyZ3MpOworCit2b2lkIGRvbG9nKGNvbnN0IGNoYXIgKmZpbGUsIGlu dCBsaW5lLCBjb25zdCBjaGFyICpmdW5jLCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9f KChmb3JtYXQocHJpbnRmLDQsNSkpKTsKKwordm9pZCB4dmFzcHJpbnRmKGNoYXIgKipzdHJwLCBj b25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50 ZiwyLDApKSk7CisKK3ZvaWQgeGFzcHJpbnRmKGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpmbXQs IC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDIsMykpKTsKKwordm9pZCAqeG1h bGxvYyhzaXplX3Qgc3opOwordm9pZCAqeGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHN6KTsKK3Zv aWQgKnhyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHN6KTsKK2NoYXIgKnhzdHJkdXAoY29uc3Qg Y2hhciAqeCk7Cit2b2lkIHN0cmluZ19yZWFsbG9jX2FwcGVuZChjaGFyICoqYWNjdW11bGF0ZSwg Y29uc3QgY2hhciAqbW9yZSk7CisKK3ZvaWQgZmx1c2hfc3RyZWFtKEZJTEUgKmZoKTsKK3VpbnQz Ml90IGZpbmRfZG9tYWluKGNvbnN0IGNoYXIgKnApIF9fYXR0cmlidXRlX18oKHdhcm5fdW51c2Vk X3Jlc3VsdCkpOworCit2b2lkIHByaW50X2JpdG1hcCh1aW50OF90ICptYXAsIGludCBtYXBsZW4s IEZJTEUgKnN0cmVhbSk7CisKICNlbmRpZiAvKiBYTF9VVElMU19IICovCiAKIC8qCi0tIAoyLjEx LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMu eGVuLm9yZy94ZW4tZGV2ZWwK