From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 21/29] xl: split out memory related code Date: Fri, 24 Feb 2017 16:13:06 +0000 Message-ID: <20170224161314.22154-22-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.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1chIXv-0006bb-46 for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:39 +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 bC9NYWtlZmlsZSAgICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsX2NtZGltcGwuYyB8IDEzNiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0b29scy94bC94bF9tZW0uYyAg ICAgfCAxNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDMgZmlsZXMgY2hhbmdlZCwgMTY4IGluc2VydGlvbnMoKyksIDEzNyBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy94bC94bF9tZW0uYwoKZGlmZiAtLWdpdCBhL3Rvb2xz L3hsL01ha2VmaWxlIGIvdG9vbHMveGwvTWFrZWZpbGUKaW5kZXggODljZjkwNjllMC4uOTY0ZGE4 ZTcwNSAxMDA2NDQKLS0tIGEvdG9vbHMveGwvTWFrZWZpbGUKKysrIGIvdG9vbHMveGwvTWFrZWZp bGUKQEAgLTE4LDcgKzE4LDcgQEAgQ0ZMQUdTX1hMICs9IC1Xc2hhZG93CiBYTF9PQkpTID0geGwu byB4bF9jbWRpbXBsLm8geGxfY21kdGFibGUubyB4bF9zeHAubyB4bF91dGlscy5vCiBYTF9PQkpT ICs9IHhsX3RtZW0ubyB4bF9wYXJzZS5vIHhsX2NwdXBvb2wubyB4bF9mbGFzay5vCiBYTF9PQkpT ICs9IHhsX3Z0cG0ubyB4bF9ibG9jay5vIHhsX25pYy5vIHhsX3VzYi5vCi1YTF9PQkpTICs9IHhs X3NjaGVkLm8geGxfcGNpLm8geGxfdmNwdS5vIHhsX2NkLm8KK1hMX09CSlMgKz0geGxfc2NoZWQu byB4bF9wY2kubyB4bF92Y3B1Lm8geGxfY2QubyB4bF9tZW0ubwogCiAkKFhMX09CSlMpOiBDRkxB R1MgKz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENG TEFHU19YTCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX2NtZGltcGwuYyBiL3Rvb2xzL3hsL3hs X2NtZGltcGwuYwppbmRleCBlMTViYWFlODYxLi4zNWQ4MTQxN2VjIDEwMDY0NAotLS0gYS90b29s cy94bC94bF9jbWRpbXBsLmMKKysrIGIvdG9vbHMveGwveGxfY21kaW1wbC5jCkBAIC0xMTQ1LDc0 ICsxMTQ1LDYgQEAgdm9pZCBoZWxwKGNvbnN0IGNoYXIgKmNvbW1hbmQpCiAgICAgfQogfQogCi1z dGF0aWMgaW50IHNldF9tZW1vcnlfbWF4KHVpbnQzMl90IGRvbWlkLCBjb25zdCBjaGFyICptZW0p Ci17Ci0gICAgaW50NjRfdCBtZW1vcnlrYjsKLQotICAgIG1lbW9yeWtiID0gcGFyc2VfbWVtX3Np emVfa2IobWVtKTsKLSAgICBpZiAobWVtb3J5a2IgPT0gLTEpIHsKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJpbnZhbGlkIG1lbW9yeSBzaXplOiAlc1xuIiwgbWVtKTsKLSAgICAgICAgcmV0dXJu IEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBpZiAobGlieGxfZG9tYWluX3NldG1heG1lbShj dHgsIGRvbWlkLCBtZW1vcnlrYikpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYW5ub3Qg c2V0IGRvbWlkICV1IHN0YXRpYyBtYXggbWVtb3J5IHRvIDogJXNcbiIsIGRvbWlkLCBtZW0pOwot ICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIHJldHVybiBFWElUX1NV Q0NFU1M7Ci19Ci0KLWludCBtYWluX21lbW1heChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0g ICAgdWludDMyX3QgZG9taWQ7Ci0gICAgaW50IG9wdCA9IDA7Ci0gICAgY2hhciAqbWVtOwotCi0g ICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJtZW0tbWF4IiwgMikgewotICAg ICAgICAvKiBObyBvcHRpb25zICovCi0gICAgfQotCi0gICAgZG9taWQgPSB4ZmluZF9kb21haW4o YXJndltvcHRpbmRdKTsKLSAgICBtZW0gPSBhcmd2W29wdGluZCArIDFdOwotCi0gICAgcmV0dXJu IHNldF9tZW1vcnlfbWF4KGRvbWlkLCBtZW0pOwotfQotCi1zdGF0aWMgaW50IHNldF9tZW1vcnlf dGFyZ2V0KHVpbnQzMl90IGRvbWlkLCBjb25zdCBjaGFyICptZW0pCi17Ci0gICAgaW50NjRfdCBt ZW1vcnlrYjsKLQotICAgIG1lbW9yeWtiID0gcGFyc2VfbWVtX3NpemVfa2IobWVtKTsKLSAgICBp ZiAobWVtb3J5a2IgPT0gLTEpICB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBt ZW1vcnkgc2l6ZTogJXNcbiIsIG1lbSk7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0g ICAgfQotCi0gICAgaWYgKGxpYnhsX3NldF9tZW1vcnlfdGFyZ2V0KGN0eCwgZG9taWQsIG1lbW9y eWtiLCAwLCAvKiBlbmZvcmNlICovIDEpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2Fu bm90IHNldCBkb21pZCAldSBkeW5hbWljIG1heCBtZW1vcnkgdG8gOiAlc1xuIiwgZG9taWQsIG1l bSk7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVY SVRfU1VDQ0VTUzsKLX0KLQotaW50IG1haW5fbWVtc2V0KGludCBhcmdjLCBjaGFyICoqYXJndikK LXsKLSAgICB1aW50MzJfdCBkb21pZDsKLSAgICBpbnQgb3B0ID0gMDsKLSAgICBjb25zdCBjaGFy ICptZW07Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgIm1lbS1zZXQi LCAyKSB7Ci0gICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KLSAgICB9Ci0KLSAgICBkb21pZCA9IHhm aW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwotICAgIG1lbSA9IGFyZ3Zbb3B0aW5kICsgMV07Ci0K LSAgICByZXR1cm4gc2V0X21lbW9yeV90YXJnZXQoZG9taWQsIG1lbSk7Ci19Ci0KIGludCBtYWlu X2NvbnNvbGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogICAgIHVpbnQzMl90IGRvbWlkOwpA QCAtMzA1Niw3NCArMjk4OCw2IEBAIGludCBtYWluX2luZm8oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzaGFyaW5nKGNvbnN0IGxpYnhsX2Rv bWluZm8gKmluZm8sIGludCBuYl9kb21haW4pCi17Ci0gICAgaW50IGk7Ci0KLSAgICBwcmludGYo Ik5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQgICBNZW0gU2hh cmVkXG4iKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBuYl9kb21haW47IGkrKykgewotICAgICAg ICBjaGFyICpkb21uYW1lOwotICAgICAgICB1bnNpZ25lZCBzaHV0ZG93bl9yZWFzb247Ci0gICAg ICAgIGRvbW5hbWUgPSBsaWJ4bF9kb21pZF90b19uYW1lKGN0eCwgaW5mb1tpXS5kb21pZCk7Ci0g ICAgICAgIHNodXRkb3duX3JlYXNvbiA9IGluZm9baV0uc2h1dGRvd24gPyBpbmZvW2ldLnNodXRk b3duX3JlYXNvbiA6IDA7Ci0gICAgICAgIHByaW50ZigiJS00MHMgJTVkICU1bHUgICU1bHVcbiIs Ci0gICAgICAgICAgICAgICAgZG9tbmFtZSwKLSAgICAgICAgICAgICAgICBpbmZvW2ldLmRvbWlk LAotICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoKGluZm9baV0uY3VycmVudF9tZW1r YiArCi0gICAgICAgICAgICAgICAgICAgIGluZm9baV0ub3V0c3RhbmRpbmdfbWVta2IpIC8gMTAy NCksCi0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIChpbmZvW2ldLnNoYXJlZF9tZW1r YiAvIDEwMjQpKTsKLSAgICAgICAgZnJlZShkb21uYW1lKTsKLSAgICB9Ci19Ci0KLWludCBtYWlu X3NoYXJpbmcoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCBvcHQgPSAwOwotICAg IGxpYnhsX2RvbWluZm8gaW5mb19idWY7Ci0gICAgbGlieGxfZG9taW5mbyAqaW5mbywgKmluZm9f ZnJlZSA9IE5VTEw7Ci0gICAgaW50IG5iX2RvbWFpbiwgcmM7Ci0KLSAgICBTV0lUQ0hfRk9SRUFD SF9PUFQob3B0LCAiIiwgTlVMTCwgInNoYXJpbmciLCAwKSB7Ci0gICAgICAgIC8qIE5vIG9wdGlv bnMgKi8KLSAgICB9Ci0KLSAgICBpZiAob3B0aW5kID49IGFyZ2MpIHsKLSAgICAgICAgaW5mbyA9 IGxpYnhsX2xpc3RfZG9tYWluKGN0eCwgJm5iX2RvbWFpbik7Ci0gICAgICAgIGlmICghaW5mbykg ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9saXN0X2RvbWFpbiBmYWlsZWQu XG4iKTsKLSAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICAg ICAgaW5mb19mcmVlID0gaW5mbzsKLSAgICB9IGVsc2UgaWYgKG9wdGluZCA9PSBhcmdjLTEpIHsK LSAgICAgICAgdWludDMyX3QgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsKLSAg ICAgICAgcmMgPSBsaWJ4bF9kb21haW5faW5mbyhjdHgsICZpbmZvX2J1ZiwgZG9taWQpOwotICAg ICAgICBpZiAocmMgPT0gRVJST1JfRE9NQUlOX05PVEZPVU5EKSB7Ci0gICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIkVycm9yOiBEb21haW4gXCclc1wnIGRvZXMgbm90IGV4aXN0LlxuIiwKLSAg ICAgICAgICAgICAgICBhcmd2W29wdGluZF0pOwotICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJ TFVSRTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmMpIHsKLSAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAibGlieGxfZG9tYWluX2luZm8gZmFpbGVkIChjb2RlICVkKS5cbiIsIHJjKTsKLSAg ICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICAgICAgaW5mbyA9 ICZpbmZvX2J1ZjsKLSAgICAgICAgbmJfZG9tYWluID0gMTsKLSAgICB9IGVsc2UgewotICAgICAg ICBoZWxwKCJzaGFyaW5nIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQot Ci0gICAgc2hhcmluZyhpbmZvLCBuYl9kb21haW4pOwotCi0gICAgaWYgKGluZm9fZnJlZSkKLSAg ICAgICAgbGlieGxfZG9taW5mb19saXN0X2ZyZWUoaW5mb19mcmVlLCBuYl9kb21haW4pOwotICAg IGVsc2UKLSAgICAgICAgbGlieGxfZG9taW5mb19kaXNwb3NlKGluZm8pOwotCi0gICAgcmV0dXJu IEVYSVRfU1VDQ0VTUzsKLX0KLQogaW50IG1haW5fZG9taWQoaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogewogICAgIHVpbnQzMl90IGRvbWlkOwpkaWZmIC0tZ2l0IGEvdG9vbHMveGwveGxfbWVtLmMg Yi90b29scy94bC94bF9tZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li43MzZkMWY4ZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMveGwveGxfbWVtLmMKQEAgLTAs MCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOS0yMDE3IENpdHJpeCBMdGQgYW5kIG90 aGVyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQK KyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdp dGggdGhlIHNwZWNpYWwKKyAqIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxl IExJQ0VOU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1 ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8bGlieGwuaD4KKyNpbmNsdWRlIDxsaWJ4bF91dGls cy5oPgorI2luY2x1ZGUgPGxpYnhsdXRpbC5oPgorCisjaW5jbHVkZSAieGwuaCIKKyNpbmNsdWRl ICJ4bF91dGlscy5oIgorI2luY2x1ZGUgInhsX3BhcnNlLmgiCisKK3N0YXRpYyBpbnQgc2V0X21l bW9yeV9tYXgodWludDMyX3QgZG9taWQsIGNvbnN0IGNoYXIgKm1lbSkKK3sKKyAgICBpbnQ2NF90 IG1lbW9yeWtiOworCisgICAgbWVtb3J5a2IgPSBwYXJzZV9tZW1fc2l6ZV9rYihtZW0pOworICAg IGlmIChtZW1vcnlrYiA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImludmFsaWQg bWVtb3J5IHNpemU6ICVzXG4iLCBtZW0pOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwor ICAgIH0KKworICAgIGlmIChsaWJ4bF9kb21haW5fc2V0bWF4bWVtKGN0eCwgZG9taWQsIG1lbW9y eWtiKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBzZXQgZG9taWQgJXUgc3Rh dGljIG1heCBtZW1vcnkgdG8gOiAlc1xuIiwgZG9taWQsIG1lbSk7CisgICAgICAgIHJldHVybiBF WElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworaW50 IG1haW5fbWVtbWF4KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICB1aW50MzJfdCBkb21p ZDsKKyAgICBpbnQgb3B0ID0gMDsKKyAgICBjaGFyICptZW07CisKKyAgICBTV0lUQ0hfRk9SRUFD SF9PUFQob3B0LCAiIiwgTlVMTCwgIm1lbS1tYXgiLCAyKSB7CisgICAgICAgIC8qIE5vIG9wdGlv bnMgKi8KKyAgICB9CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwor ICAgIG1lbSA9IGFyZ3Zbb3B0aW5kICsgMV07CisKKyAgICByZXR1cm4gc2V0X21lbW9yeV9tYXgo ZG9taWQsIG1lbSk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X21lbW9yeV90YXJnZXQodWludDMyX3Qg ZG9taWQsIGNvbnN0IGNoYXIgKm1lbSkKK3sKKyAgICBpbnQ2NF90IG1lbW9yeWtiOworCisgICAg bWVtb3J5a2IgPSBwYXJzZV9tZW1fc2l6ZV9rYihtZW0pOworICAgIGlmIChtZW1vcnlrYiA9PSAt MSkgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIG1lbW9yeSBzaXplOiAlc1xu IiwgbWVtKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpZiAo bGlieGxfc2V0X21lbW9yeV90YXJnZXQoY3R4LCBkb21pZCwgbWVtb3J5a2IsIDAsIC8qIGVuZm9y Y2UgKi8gMSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYW5ub3Qgc2V0IGRvbWlkICV1 IGR5bmFtaWMgbWF4IG1lbW9yeSB0byA6ICVzXG4iLCBkb21pZCwgbWVtKTsKKyAgICAgICAgcmV0 dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQor CitpbnQgbWFpbl9tZW1zZXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHVpbnQzMl90 IGRvbWlkOworICAgIGludCBvcHQgPSAwOworICAgIGNvbnN0IGNoYXIgKm1lbTsKKworICAgIFNX SVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAibWVtLXNldCIsIDIpIHsKKyAgICAgICAg LyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zb b3B0aW5kXSk7CisgICAgbWVtID0gYXJndltvcHRpbmQgKyAxXTsKKworICAgIHJldHVybiBzZXRf bWVtb3J5X3RhcmdldChkb21pZCwgbWVtKTsKK30KKworc3RhdGljIHZvaWQgc2hhcmluZyhjb25z dCBsaWJ4bF9kb21pbmZvICppbmZvLCBpbnQgbmJfZG9tYWluKQoreworICAgIGludCBpOworCisg ICAgcHJpbnRmKCJOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElE ICAgTWVtIFNoYXJlZFxuIik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmJfZG9tYWluOyBpKysp IHsKKyAgICAgICAgY2hhciAqZG9tbmFtZTsKKyAgICAgICAgdW5zaWduZWQgc2h1dGRvd25fcmVh c29uOworICAgICAgICBkb21uYW1lID0gbGlieGxfZG9taWRfdG9fbmFtZShjdHgsIGluZm9baV0u ZG9taWQpOworICAgICAgICBzaHV0ZG93bl9yZWFzb24gPSBpbmZvW2ldLnNodXRkb3duID8gaW5m b1tpXS5zaHV0ZG93bl9yZWFzb24gOiAwOworICAgICAgICBwcmludGYoIiUtNDBzICU1ZCAlNWx1 ICAlNWx1XG4iLAorICAgICAgICAgICAgICAgIGRvbW5hbWUsCisgICAgICAgICAgICAgICAgaW5m b1tpXS5kb21pZCwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKChpbmZvW2ldLmN1 cnJlbnRfbWVta2IgKworICAgICAgICAgICAgICAgICAgICBpbmZvW2ldLm91dHN0YW5kaW5nX21l bWtiKSAvIDEwMjQpLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoaW5mb1tpXS5z aGFyZWRfbWVta2IgLyAxMDI0KSk7CisgICAgICAgIGZyZWUoZG9tbmFtZSk7CisgICAgfQorfQor CitpbnQgbWFpbl9zaGFyaW5nKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0 ID0gMDsKKyAgICBsaWJ4bF9kb21pbmZvIGluZm9fYnVmOworICAgIGxpYnhsX2RvbWluZm8gKmlu Zm8sICppbmZvX2ZyZWUgPSBOVUxMOworICAgIGludCBuYl9kb21haW4sIHJjOworCisgICAgU1dJ VENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJzaGFyaW5nIiwgMCkgeworICAgICAgICAv KiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgaWYgKG9wdGluZCA+PSBhcmdjKSB7CisgICAg ICAgIGluZm8gPSBsaWJ4bF9saXN0X2RvbWFpbihjdHgsICZuYl9kb21haW4pOworICAgICAgICBp ZiAoIWluZm8pIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfbGlzdF9kb21h aW4gZmFpbGVkLlxuIik7CisgICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAg ICB9CisgICAgICAgIGluZm9fZnJlZSA9IGluZm87CisgICAgfSBlbHNlIGlmIChvcHRpbmQgPT0g YXJnYy0xKSB7CisgICAgICAgIHVpbnQzMl90IGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0 aW5kXSk7CisgICAgICAgIHJjID0gbGlieGxfZG9tYWluX2luZm8oY3R4LCAmaW5mb19idWYsIGRv bWlkKTsKKyAgICAgICAgaWYgKHJjID09IEVSUk9SX0RPTUFJTl9OT1RGT1VORCkgeworICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogRG9tYWluIFwnJXNcJyBkb2VzIG5vdCBleGlz dC5cbiIsCisgICAgICAgICAgICAgICAgYXJndltvcHRpbmRdKTsKKyAgICAgICAgICAgIHJldHVy biBFWElUX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2RvbWFpbl9pbmZvIGZhaWxlZCAoY29kZSAlZCkuXG4i LCByYyk7CisgICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAgICB9CisgICAg ICAgIGluZm8gPSAmaW5mb19idWY7CisgICAgICAgIG5iX2RvbWFpbiA9IDE7CisgICAgfSBlbHNl IHsKKyAgICAgICAgaGVscCgic2hhcmluZyIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJF OworICAgIH0KKworICAgIHNoYXJpbmcoaW5mbywgbmJfZG9tYWluKTsKKworICAgIGlmIChpbmZv X2ZyZWUpCisgICAgICAgIGxpYnhsX2RvbWluZm9fbGlzdF9mcmVlKGluZm9fZnJlZSwgbmJfZG9t YWluKTsKKyAgICBlbHNlCisgICAgICAgIGxpYnhsX2RvbWluZm9fZGlzcG9zZShpbmZvKTsKKwor ICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6Cisg KiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmls CisgKiBFbmQ6CisgKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz Lnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=