From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 09/29] xl: split out tmem related code to xl_tmem.c Date: Fri, 24 Feb 2017 16:12:54 +0000 Message-ID: <20170224161314.22154-10-wei.liu2@citrix.com> References: <20170224161314.22154-1-wei.liu2@citrix.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 1chIUj-0004Xt-N8 for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:13:21 +0000 In-Reply-To: <20170224161314.22154-1-wei.liu2@citrix.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 U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94 bC9NYWtlZmlsZSAgICAgfCAgIDIgKwogdG9vbHMveGwveGxfY21kaW1wbC5jIHwgMjI5IC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdG9vbHMveGwveGxfdG1l bS5jICAgIHwgMjUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI1MyBpbnNlcnRpb25zKCspLCAyMjkgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMveGwveGxfdG1lbS5jCgpkaWZmIC0tZ2l0IGEv dG9vbHMveGwvTWFrZWZpbGUgYi90b29scy94bC9NYWtlZmlsZQppbmRleCAyZjc0MGI0Nzg5Li5m NWRmMzY2ZTBhIDEwMDY0NAotLS0gYS90b29scy94bC9NYWtlZmlsZQorKysgYi90b29scy94bC9N YWtlZmlsZQpAQCAtMTYsNiArMTYsOCBAQCBDRkxBR1NfWEwgKz0gJChDRkxBR1NfbGlieGVubGln aHQpCiBDRkxBR1NfWEwgKz0gLVdzaGFkb3cKIAogWExfT0JKUyA9IHhsLm8geGxfY21kaW1wbC5v IHhsX2NtZHRhYmxlLm8geGxfc3hwLm8geGxfdXRpbHMubworWExfT0JKUyArPSB4bF90bWVtLm8K KwogJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbnRvb2xsb2cpCiAkKFhMX09C SlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfWEwpCiAkKFhMX09CSlMpOiBDRkxBR1MgKz0gLWluY2x1 ZGUgJChYRU5fUk9PVCkvdG9vbHMvY29uZmlnLmggIyBsaWJ4bF9qc29uLmggbmVlZHMgaXQuCmRp ZmYgLS1naXQgYS90b29scy94bC94bF9jbWRpbXBsLmMgYi90b29scy94bC94bF9jbWRpbXBsLmMK aW5kZXggYzQ1ZmZlOTQzZi4uM2MwMzdlYjJlYyAxMDA2NDQKLS0tIGEvdG9vbHMveGwveGxfY21k aW1wbC5jCisrKyBiL3Rvb2xzL3hsL3hsX2NtZGltcGwuYwpAQCAtNzYyNCwyMzUgKzc2MjQsNiBA QCBpbnQgbWFpbl91cHRpbWUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIHJldHVybiAwOwog fQogCi1pbnQgbWFpbl90bWVtX2xpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIHVp bnQzMl90IGRvbWlkOwotICAgIGNvbnN0IGNoYXIgKmRvbSA9IE5VTEw7Ci0gICAgY2hhciAqYnVm ID0gTlVMTDsKLSAgICBpbnQgdXNlX2xvbmcgPSAwOwotICAgIGludCBhbGwgPSAwOwotICAgIGlu dCBvcHQ7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiYWwiLCBOVUxMLCAidG1lbS1s aXN0IiwgMCkgewotICAgIGNhc2UgJ2wnOgotICAgICAgICB1c2VfbG9uZyA9IDE7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgJ2EnOgotICAgICAgICBhbGwgPSAxOwotICAgICAgICBicmVhazsK LSAgICB9Ci0KLSAgICBkb20gPSBhcmd2W29wdGluZF07Ci0gICAgaWYgKCFkb20gJiYgYWxsID09 IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3UgbXVzdCBzcGVjaWZ5IC1hIG9yIGEg ZG9tYWluIGlkLlxuXG4iKTsKLSAgICAgICAgaGVscCgidG1lbS1saXN0Iik7Ci0gICAgICAgIHJl dHVybiAxOwotICAgIH0KLQotICAgIGlmIChhbGwpCi0gICAgICAgIGRvbWlkID0gSU5WQUxJRF9E T01JRDsKLSAgICBlbHNlCi0gICAgICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGRvbSk7Ci0KLSAg ICBidWYgPSBsaWJ4bF90bWVtX2xpc3QoY3R4LCBkb21pZCwgdXNlX2xvbmcpOwotICAgIGlmIChi dWYgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLQotICAgIHByaW50Zigi JXNcbiIsIGJ1Zik7Ci0gICAgZnJlZShidWYpOwotICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Ci19 Ci0KLWludCBtYWluX3RtZW1fZnJlZXplKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICB1 aW50MzJfdCBkb21pZDsKLSAgICBjb25zdCBjaGFyICpkb20gPSBOVUxMOwotICAgIGludCBhbGwg PSAwOwotICAgIGludCBvcHQ7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiYSIsIE5V TEwsICJ0bWVtLWZyZWV6ZSIsIDApIHsKLSAgICBjYXNlICdhJzoKLSAgICAgICAgYWxsID0gMTsK LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZG9tID0gYXJndltvcHRpbmRdOwotICAgIGlm ICghZG9tICYmIGFsbCA9PSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IG11c3Qg c3BlY2lmeSAtYSBvciBhIGRvbWFpbiBpZC5cblxuIik7Ci0gICAgICAgIGhlbHAoInRtZW0tZnJl ZXplIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgaWYgKGFs bCkKLSAgICAgICAgZG9taWQgPSBJTlZBTElEX0RPTUlEOwotICAgIGVsc2UKLSAgICAgICAgZG9t aWQgPSB4ZmluZF9kb21haW4oZG9tKTsKLQotICAgIGlmIChsaWJ4bF90bWVtX2ZyZWV6ZShjdHgs IGRvbWlkKSA8IDApCi0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0KLSAgICByZXR1cm4g RVhJVF9TVUNDRVNTOwotfQotCi1pbnQgbWFpbl90bWVtX3RoYXcoaW50IGFyZ2MsIGNoYXIgKiph cmd2KQotewotICAgIHVpbnQzMl90IGRvbWlkOwotICAgIGNvbnN0IGNoYXIgKmRvbSA9IE5VTEw7 Ci0gICAgaW50IGFsbCA9IDA7Ci0gICAgaW50IG9wdDsKLQotICAgIFNXSVRDSF9GT1JFQUNIX09Q VChvcHQsICJhIiwgTlVMTCwgInRtZW0tdGhhdyIsIDApIHsKLSAgICBjYXNlICdhJzoKLSAgICAg ICAgYWxsID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZG9tID0gYXJndltvcHRp bmRdOwotICAgIGlmICghZG9tICYmIGFsbCA9PSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy LCAiWW91IG11c3Qgc3BlY2lmeSAtYSBvciBhIGRvbWFpbiBpZC5cblxuIik7Ci0gICAgICAgIGhl bHAoInRtZW0tdGhhdyIpOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLQot ICAgIGlmIChhbGwpCi0gICAgICAgIGRvbWlkID0gSU5WQUxJRF9ET01JRDsKLSAgICBlbHNlCi0g ICAgICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGRvbSk7Ci0KLSAgICBpZiAobGlieGxfdG1lbV90 aGF3KGN0eCwgZG9taWQpIDwgMCkKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLQotICAg IHJldHVybiBFWElUX1NVQ0NFU1M7Ci19Ci0KLWludCBtYWluX3RtZW1fc2V0KGludCBhcmdjLCBj aGFyICoqYXJndikKLXsKLSAgICB1aW50MzJfdCBkb21pZDsKLSAgICBjb25zdCBjaGFyICpkb20g PSBOVUxMOwotICAgIHVpbnQzMl90IHdlaWdodCA9IDAsIGNhcCA9IDAsIGNvbXByZXNzID0gMDsK LSAgICBpbnQgb3B0X3cgPSAwLCBvcHRfYyA9IDAsIG9wdF9wID0gMDsKLSAgICBpbnQgYWxsID0g MDsKLSAgICBpbnQgb3B0OwotICAgIGludCByYyA9IDA7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9P UFQob3B0LCAiYXc6YzpwOiIsIE5VTEwsICJ0bWVtLXNldCIsIDApIHsKLSAgICBjYXNlICdhJzoK LSAgICAgICAgYWxsID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAndyc6Ci0gICAgICAg IHdlaWdodCA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKLSAgICAgICAgb3B0X3cgPSAxOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlICdjJzoKLSAgICAgICAgY2FwID0gc3RydG9sKG9wdGFy ZywgTlVMTCwgMTApOwotICAgICAgICBvcHRfYyA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgJ3AnOgotICAgICAgICBjb21wcmVzcyA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKLSAg ICAgICAgb3B0X3AgPSAxOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkb20gPSBhcmd2 W29wdGluZF07Ci0gICAgaWYgKCFkb20gJiYgYWxsID09IDApIHsKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJZb3UgbXVzdCBzcGVjaWZ5IC1hIG9yIGEgZG9tYWluIGlkLlxuXG4iKTsKLSAgICAg ICAgaGVscCgidG1lbS1zZXQiKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9 Ci0KLSAgICBpZiAoYWxsKQotICAgICAgICBkb21pZCA9IElOVkFMSURfRE9NSUQ7Ci0gICAgZWxz ZQotICAgICAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihkb20pOwotCi0gICAgaWYgKCFvcHRfdyAm JiAhb3B0X2MgJiYgIW9wdF9wKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiTm8gc2V0IHZh bHVlIHNwZWNpZmllZC5cblxuIik7Ci0gICAgICAgIGhlbHAoInRtZW0tc2V0Iik7Ci0gICAgICAg IHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgaWYgKG9wdF93KQotICAgICAgICBy YyA9IGxpYnhsX3RtZW1fc2V0KGN0eCwgZG9taWQsICJ3ZWlnaHQiLCB3ZWlnaHQpOwotICAgIGlm IChvcHRfYykKLSAgICAgICAgcmMgPSBsaWJ4bF90bWVtX3NldChjdHgsIGRvbWlkLCAiY2FwIiwg Y2FwKTsKLSAgICBpZiAob3B0X3ApCi0gICAgICAgIHJjID0gbGlieGxfdG1lbV9zZXQoY3R4LCBk b21pZCwgImNvbXByZXNzIiwgY29tcHJlc3MpOwotCi0gICAgaWYgKHJjIDwgMCkKLSAgICAgICAg cmV0dXJuIEVYSVRfRkFJTFVSRTsKLQotICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Ci19Ci0KLWlu dCBtYWluX3RtZW1fc2hhcmVkX2F1dGgoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIHVp bnQzMl90IGRvbWlkOwotICAgIGNvbnN0IGNoYXIgKmF1dGhhcmcgPSBOVUxMOwotICAgIGNoYXIg KmVuZHB0ciA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqZG9tID0gTlVMTDsKLSAgICBjaGFyICp1 dWlkID0gTlVMTDsKLSAgICBpbnQgYXV0aCA9IC0xOwotICAgIGludCBhbGwgPSAwOwotICAgIGlu dCBvcHQ7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiYXU6QToiLCBOVUxMLCAidG1l bS1zaGFyZWQtYXV0aCIsIDApIHsKLSAgICBjYXNlICdhJzoKLSAgICAgICAgYWxsID0gMTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAndSc6Ci0gICAgICAgIHV1aWQgPSBvcHRhcmc7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgJ0EnOgotICAgICAgICBhdXRoYXJnID0gb3B0YXJnOwotICAg ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkb20gPSBhcmd2W29wdGluZF07Ci0gICAgaWYgKCFk b20gJiYgYWxsID09IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3UgbXVzdCBzcGVj aWZ5IC1hIG9yIGEgZG9tYWluIGlkLlxuXG4iKTsKLSAgICAgICAgaGVscCgidG1lbS1zaGFyZWQt YXV0aCIpOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIGlmIChh bGwpCi0gICAgICAgIGRvbWlkID0gSU5WQUxJRF9ET01JRDsKLSAgICBlbHNlCi0gICAgICAgIGRv bWlkID0geGZpbmRfZG9tYWluKGRvbSk7Ci0KLSAgICBpZiAodXVpZCA9PSBOVUxMIHx8IGF1dGhh cmcgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIHV1aWQgb3IgYXV0aCBz cGVjaWZpZWQuXG5cbiIpOwotICAgICAgICBoZWxwKCJ0bWVtLXNoYXJlZC1hdXRoIik7Ci0gICAg ICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgYXV0aCA9IHN0cnRvbChhdXRo YXJnLCAmZW5kcHRyLCAxMCk7Ci0gICAgaWYgKCplbmRwdHIgIT0gJ1wwJykgewotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIkludmFsaWQgYXV0aCwgdmFsaWQgYXV0aCBhcmUgPDB8MT4uXG5cbiIp OwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIGlmIChsaWJ4bF90 bWVtX3NoYXJlZF9hdXRoKGN0eCwgZG9taWQsIHV1aWQsIGF1dGgpIDwgMCkKLSAgICAgICAgcmV0 dXJuIEVYSVRfRkFJTFVSRTsKLQotICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Ci19Ci0KLWludCBt YWluX3RtZW1fZnJlZWFibGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCBvcHQ7 Ci0gICAgaW50IG1iOwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ0 bWVtLWZyZWVhYmxlIiwgMCkgewotICAgICAgICAvKiBObyBvcHRpb25zICovCi0gICAgfQotCi0g ICAgbWIgPSBsaWJ4bF90bWVtX2ZyZWVhYmxlKGN0eCk7Ci0gICAgaWYgKG1iID09IC0xKQotICAg ICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotCi0gICAgcHJpbnRmKCIlZFxuIiwgbWIpOwotICAg IHJldHVybiBFWElUX1NVQ0NFU1M7Ci19CiAKIGludCBtYWluX2NwdXBvb2xjcmVhdGUoaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogewpkaWZmIC0tZ2l0IGEvdG9vbHMveGwveGxfdG1lbS5jIGIvdG9v bHMveGwveGxfdG1lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjlk MzU3MGQ0MDQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy94bC94bF90bWVtLmMKQEAgLTAsMCAr MSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOS0yMDE3IENpdHJpeCBMdGQgYW5kIG90aGVy IGNvbnRyaWJ1dG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAq IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGgg dGhlIHNwZWNpYWwKKyAqIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJ Q0VOU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUg PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8bGlieGwuaD4KKwor I2luY2x1ZGUgInhsLmgiCisjaW5jbHVkZSAieGxfdXRpbHMuaCIKKworaW50IG1haW5fdG1lbV9s aXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICB1aW50MzJfdCBkb21pZDsKKyAgICBj b25zdCBjaGFyICpkb20gPSBOVUxMOworICAgIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAgaW50IHVz ZV9sb25nID0gMDsKKyAgICBpbnQgYWxsID0gMDsKKyAgICBpbnQgb3B0OworCisgICAgU1dJVENI X0ZPUkVBQ0hfT1BUKG9wdCwgImFsIiwgTlVMTCwgInRtZW0tbGlzdCIsIDApIHsKKyAgICBjYXNl ICdsJzoKKyAgICAgICAgdXNlX2xvbmcgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdh JzoKKyAgICAgICAgYWxsID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZG9tID0g YXJndltvcHRpbmRdOworICAgIGlmICghZG9tICYmIGFsbCA9PSAwKSB7CisgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiWW91IG11c3Qgc3BlY2lmeSAtYSBvciBhIGRvbWFpbiBpZC5cblxuIik7Cisg ICAgICAgIGhlbHAoInRtZW0tbGlzdCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAg ICBpZiAoYWxsKQorICAgICAgICBkb21pZCA9IElOVkFMSURfRE9NSUQ7CisgICAgZWxzZQorICAg ICAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihkb20pOworCisgICAgYnVmID0gbGlieGxfdG1lbV9s aXN0KGN0eCwgZG9taWQsIHVzZV9sb25nKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAg IHJldHVybiBFWElUX0ZBSUxVUkU7CisKKyAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgIGZy ZWUoYnVmKTsKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitpbnQgbWFpbl90bWVtX2Zy ZWV6ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgdWludDMyX3QgZG9taWQ7CisgICAg Y29uc3QgY2hhciAqZG9tID0gTlVMTDsKKyAgICBpbnQgYWxsID0gMDsKKyAgICBpbnQgb3B0Owor CisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgImEiLCBOVUxMLCAidG1lbS1mcmVlemUiLCAw KSB7CisgICAgY2FzZSAnYSc6CisgICAgICAgIGFsbCA9IDE7CisgICAgICAgIGJyZWFrOworICAg IH0KKworICAgIGRvbSA9IGFyZ3Zbb3B0aW5kXTsKKyAgICBpZiAoIWRvbSAmJiBhbGwgPT0gMCkg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllvdSBtdXN0IHNwZWNpZnkgLWEgb3IgYSBkb21h aW4gaWQuXG5cbiIpOworICAgICAgICBoZWxwKCJ0bWVtLWZyZWV6ZSIpOworICAgICAgICByZXR1 cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIGlmIChhbGwpCisgICAgICAgIGRvbWlkID0g SU5WQUxJRF9ET01JRDsKKyAgICBlbHNlCisgICAgICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGRv bSk7CisKKyAgICBpZiAobGlieGxfdG1lbV9mcmVlemUoY3R4LCBkb21pZCkgPCAwKQorICAgICAg ICByZXR1cm4gRVhJVF9GQUlMVVJFOworCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKwor aW50IG1haW5fdG1lbV90aGF3KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICB1aW50MzJf dCBkb21pZDsKKyAgICBjb25zdCBjaGFyICpkb20gPSBOVUxMOworICAgIGludCBhbGwgPSAwOwor ICAgIGludCBvcHQ7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiYSIsIE5VTEwsICJ0 bWVtLXRoYXciLCAwKSB7CisgICAgY2FzZSAnYSc6CisgICAgICAgIGFsbCA9IDE7CisgICAgICAg IGJyZWFrOworICAgIH0KKworICAgIGRvbSA9IGFyZ3Zbb3B0aW5kXTsKKyAgICBpZiAoIWRvbSAm JiBhbGwgPT0gMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllvdSBtdXN0IHNwZWNpZnkg LWEgb3IgYSBkb21haW4gaWQuXG5cbiIpOworICAgICAgICBoZWxwKCJ0bWVtLXRoYXciKTsKKyAg ICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpZiAoYWxsKQorICAgICAg ICBkb21pZCA9IElOVkFMSURfRE9NSUQ7CisgICAgZWxzZQorICAgICAgICBkb21pZCA9IHhmaW5k X2RvbWFpbihkb20pOworCisgICAgaWYgKGxpYnhsX3RtZW1fdGhhdyhjdHgsIGRvbWlkKSA8IDAp CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNT OworfQorCitpbnQgbWFpbl90bWVtX3NldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAg dWludDMyX3QgZG9taWQ7CisgICAgY29uc3QgY2hhciAqZG9tID0gTlVMTDsKKyAgICB1aW50MzJf dCB3ZWlnaHQgPSAwLCBjYXAgPSAwLCBjb21wcmVzcyA9IDA7CisgICAgaW50IG9wdF93ID0gMCwg b3B0X2MgPSAwLCBvcHRfcCA9IDA7CisgICAgaW50IGFsbCA9IDA7CisgICAgaW50IG9wdDsKKyAg ICBpbnQgcmMgPSAwOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgImF3OmM6cDoiLCBO VUxMLCAidG1lbS1zZXQiLCAwKSB7CisgICAgY2FzZSAnYSc6CisgICAgICAgIGFsbCA9IDE7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3cnOgorICAgICAgICB3ZWlnaHQgPSBzdHJ0b2wob3B0 YXJnLCBOVUxMLCAxMCk7CisgICAgICAgIG9wdF93ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSAnYyc6CisgICAgICAgIGNhcCA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKKyAgICAg ICAgb3B0X2MgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdwJzoKKyAgICAgICAgY29t cHJlc3MgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7CisgICAgICAgIG9wdF9wID0gMTsKKyAg ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZG9tID0gYXJndltvcHRpbmRdOworICAgIGlmICgh ZG9tICYmIGFsbCA9PSAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IG11c3Qgc3Bl Y2lmeSAtYSBvciBhIGRvbWFpbiBpZC5cblxuIik7CisgICAgICAgIGhlbHAoInRtZW0tc2V0Iik7 CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgaWYgKGFsbCkKKyAg ICAgICAgZG9taWQgPSBJTlZBTElEX0RPTUlEOworICAgIGVsc2UKKyAgICAgICAgZG9taWQgPSB4 ZmluZF9kb21haW4oZG9tKTsKKworICAgIGlmICghb3B0X3cgJiYgIW9wdF9jICYmICFvcHRfcCkg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIHNldCB2YWx1ZSBzcGVjaWZpZWQuXG5cbiIp OworICAgICAgICBoZWxwKCJ0bWVtLXNldCIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJF OworICAgIH0KKworICAgIGlmIChvcHRfdykKKyAgICAgICAgcmMgPSBsaWJ4bF90bWVtX3NldChj dHgsIGRvbWlkLCAid2VpZ2h0Iiwgd2VpZ2h0KTsKKyAgICBpZiAob3B0X2MpCisgICAgICAgIHJj ID0gbGlieGxfdG1lbV9zZXQoY3R4LCBkb21pZCwgImNhcCIsIGNhcCk7CisgICAgaWYgKG9wdF9w KQorICAgICAgICByYyA9IGxpYnhsX3RtZW1fc2V0KGN0eCwgZG9taWQsICJjb21wcmVzcyIsIGNv bXByZXNzKTsKKworICAgIGlmIChyYyA8IDApCisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7 CisKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitpbnQgbWFpbl90bWVtX3NoYXJlZF9h dXRoKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICB1aW50MzJfdCBkb21pZDsKKyAgICBj b25zdCBjaGFyICphdXRoYXJnID0gTlVMTDsKKyAgICBjaGFyICplbmRwdHIgPSBOVUxMOworICAg IGNvbnN0IGNoYXIgKmRvbSA9IE5VTEw7CisgICAgY2hhciAqdXVpZCA9IE5VTEw7CisgICAgaW50 IGF1dGggPSAtMTsKKyAgICBpbnQgYWxsID0gMDsKKyAgICBpbnQgb3B0OworCisgICAgU1dJVENI X0ZPUkVBQ0hfT1BUKG9wdCwgImF1OkE6IiwgTlVMTCwgInRtZW0tc2hhcmVkLWF1dGgiLCAwKSB7 CisgICAgY2FzZSAnYSc6CisgICAgICAgIGFsbCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgJ3UnOgorICAgICAgICB1dWlkID0gb3B0YXJnOworICAgICAgICBicmVhazsKKyAgICBjYXNl ICdBJzoKKyAgICAgICAgYXV0aGFyZyA9IG9wdGFyZzsKKyAgICAgICAgYnJlYWs7CisgICAgfQor CisgICAgZG9tID0gYXJndltvcHRpbmRdOworICAgIGlmICghZG9tICYmIGFsbCA9PSAwKSB7Cisg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IG11c3Qgc3BlY2lmeSAtYSBvciBhIGRvbWFpbiBp ZC5cblxuIik7CisgICAgICAgIGhlbHAoInRtZW0tc2hhcmVkLWF1dGgiKTsKKyAgICAgICAgcmV0 dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpZiAoYWxsKQorICAgICAgICBkb21pZCA9 IElOVkFMSURfRE9NSUQ7CisgICAgZWxzZQorICAgICAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihk b20pOworCisgICAgaWYgKHV1aWQgPT0gTlVMTCB8fCBhdXRoYXJnID09IE5VTEwpIHsKKyAgICAg ICAgZnByaW50ZihzdGRlcnIsICJObyB1dWlkIG9yIGF1dGggc3BlY2lmaWVkLlxuXG4iKTsKKyAg ICAgICAgaGVscCgidG1lbS1zaGFyZWQtYXV0aCIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlM VVJFOworICAgIH0KKworICAgIGF1dGggPSBzdHJ0b2woYXV0aGFyZywgJmVuZHB0ciwgMTApOwor ICAgIGlmICgqZW5kcHRyICE9ICdcMCcpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZh bGlkIGF1dGgsIHZhbGlkIGF1dGggYXJlIDwwfDE+LlxuXG4iKTsKKyAgICAgICAgcmV0dXJuIEVY SVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpZiAobGlieGxfdG1lbV9zaGFyZWRfYXV0aChjdHgs IGRvbWlkLCB1dWlkLCBhdXRoKSA8IDApCisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisK KyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitpbnQgbWFpbl90bWVtX2ZyZWVhYmxlKGlu dCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworICAgIGludCBtYjsKKworICAg IFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAidG1lbS1mcmVlYWJsZSIsIDApIHsK KyAgICAgICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIG1iID0gbGlieGxfdG1lbV9m cmVlYWJsZShjdHgpOworICAgIGlmIChtYiA9PSAtMSkKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJ TFVSRTsKKworICAgIHByaW50ZigiJWRcbiIsIG1iKTsKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNT OworfQotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpo dHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==