From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v10 04/24] xen-xsplice: Tool to manipulate xsplice payloads Date: Wed, 27 Apr 2016 15:27:01 -0400 Message-ID: <1461785241-4481-5-git-send-email-konrad.wilk@oracle.com> References: <1461785241-4481-1-git-send-email-konrad.wilk@oracle.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 1avVD0-0007dw-JY for xen-devel@lists.xenproject.org; Wed, 27 Apr 2016 19:33:14 +0000 In-Reply-To: <1461785241-4481-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: konrad@kernel.org, xen-devel@lists.xenproject.org, sasha.levin@oracle.com, andrew.cooper3@citrix.com, ross.lagerwall@citrix.com, mpohlack@amazon.de Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org QSBzaW1wbGUgdG9vbCB0aGF0IGFsbG93cyBhbiBzeXN0ZW0gYWRtaW4gdG8gcGVyZm9ybQpiYXNp YyB4c3BsaWNlIG9wZXJhdGlvbnM6CgogLSBVcGxvYWQgYSB4c3BsaWNlIGZpbGUgKHdpdGggYW4g dW5pcXVlIG5hbWUpCiAtIExpc3QgYWxsIHRoZSB4c3BsaWNlIHBheWxvYWRzIGxvYWRlZC4KIC0g QXBwbHksIHJldmVydCwgcmVwbGFjZSwgb3IgdW5sb2FkIHRoZSBwYXlsb2FkIHVzaW5nIHRoZQog ICB1bmlxdWUgbmFtZS4KIC0gRG8gYWxsIHR3byAtIHVwbG9hZCwgYW5kIGFwcGx5IHRoZSBwYXls b2FkIGluIG9uZSBnbyAobG9hZCkuCiAgIEFsc28gd2lsbCB1c2UgdGhlIG5hbWUgb2YgdGhlIGZp bGUgYXMgdGhlIDxuYW1lPgoKU2lnbmVkLW9mZi1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxr b25yYWQud2lsa0BvcmFjbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBSb3NzIExhZ2Vyd2FsbCA8cm9z cy5sYWdlcndhbGxAY2l0cml4LmNvbT4KQWNrZWQtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJp eC5jb20+CgotLS0KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpD YzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgpDYzogV2VpIExp dSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KCnYyOgogLSBSZW1vdmVkIFJFVkVSVEVEIHN0YXRlLgog LSBGaXhlZCBidWdzIGhhbmRsaW5nIFhTUExJQ0VfU1RBVFVTX1BST0dSRVNTLgogLSBTcGxpdCBz dGF0dXMgaW50byBzdGF0ZSBhbmQgZXJyb3IuCiAgIEFkZCBSRVBMQUNFIGFjdGlvbi4KdjM6CiAt IFV0aWxpemUgdGhlIHRpbWVvdXQgYW5kIHVzZSB0aGUgZGVmYXVsdCBvbmUgKGxldCB0aGUgaHlw ZXJ2aXNvcgogICBwaWNrIGl0KS4KIC0gQ2hhbmdlIHRoZSBzL2FsbC9sb2FkIGFuZCBpbmZlciB0 aGUgPGlkPiBmcm9tIG5hbWUgb2YgZmlsZS4KIC0gcy9pZC9uYW1lLwogLSBEb24ndCB1c2UgaHlw ZXJjYWxsIGJ1ZmZlciBpbiB1cGxvYWRfZnVuYywgaW5zdGVhZCBkbyBpdCBpbiBsaWJ4YwogLSBS ZW1vdmUgdGhlIGRlYnVnIHByaW50ay4KIC0gUmVtb3ZlIGdvdG8ncyAocGVyIFdlaSdzIHJldmll dykKIC0gVXNlIGZwcmludGYoc3RkZXJyIGluIGVycm9yIHBhdGhzLgogLSBBZGQgbG9jYWwgdmFy aWFibGUgYmxvY2suCiAtIFN5bnRheCwgZXhwYW5kIGNvbW1lbnQsIGFuZCBkb24ndCBvdmVyd3Jp dGUgcmMgaWYgeGNfeHNwbGljZV91cGxvYWQgZmFpbGVkLgp2NDoKIC0gUmVtb3ZlIExPQURFRCBz dGF0ZS4gT25seSBoYXZlIENIRUNLRUQgc3RhdGUuCnYxMDoKIC0gRHJvcCB0aGUgJ2NoZWNrJyBp biB0aGUgaGVscCBtZXNzYWdlLgotLS0KLS0tCiAuZ2l0aWdub3JlICAgICAgICAgICAgICAgfCAg IDEgKwogdG9vbHMvbWlzYy9NYWtlZmlsZSAgICAgIHwgICA0ICsKIHRvb2xzL21pc2MveGVuLXhz cGxpY2UuYyB8IDQ2MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0NjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHRvb2xzL21pc2MveGVuLXhzcGxpY2UuYwoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8u Z2l0aWdub3JlCmluZGV4IDIwZmZhMmQuLjM5ZWI3NzkgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUK KysrIGIvLmdpdGlnbm9yZQpAQCAtMTgyLDYgKzE4Miw3IEBAIHRvb2xzL21pc2MveGVuX2NwdXBl cmYKIHRvb2xzL21pc2MveGVuLWNwdWlkCiB0b29scy9taXNjL3hlbi1kZXRlY3QKIHRvb2xzL21p c2MveGVuLXRtZW0tbGlzdC1wYXJzZQordG9vbHMvbWlzYy94ZW4teHNwbGljZQogdG9vbHMvbWlz Yy94ZW5wZXJmCiB0b29scy9taXNjL3hlbnBtCiB0b29scy9taXNjL3hlbi1odm1jdHgKZGlmZiAt LWdpdCBhL3Rvb2xzL21pc2MvTWFrZWZpbGUgYi90b29scy9taXNjL01ha2VmaWxlCmluZGV4IGE5 NGRhZDkuLjNhNWY4NDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21pc2MvTWFrZWZpbGUKKysrIGIvdG9v bHMvbWlzYy9NYWtlZmlsZQpAQCAtMzIsNiArMzIsNyBAQCBJTlNUQUxMX1NCSU4gICAgICAgICAg ICAgICAgICAgKz0geGVubG9ja3Byb2YKIElOU1RBTExfU0JJTiAgICAgICAgICAgICAgICAgICAr PSB4ZW5wZXJmCiBJTlNUQUxMX1NCSU4gICAgICAgICAgICAgICAgICAgKz0geGVucG0KIElOU1RB TExfU0JJTiAgICAgICAgICAgICAgICAgICArPSB4ZW53YXRjaGRvZ2QKK0lOU1RBTExfU0JJTiAg ICAgICAgICAgICAgICAgICArPSB4ZW4teHNwbGljZQogSU5TVEFMTF9TQklOICs9ICQoSU5TVEFM TF9TQklOLXkpCiAKICMgRXZlcnl0aGluZyB0byBiZSBpbnN0YWxsZWQgaW4gYSBwcml2YXRlIGJp bi8KQEAgLTEwMyw2ICsxMDQsOSBAQCB4ZW4tbWZuZHVtcDogeGVuLW1mbmR1bXAubwogeGVud2F0 Y2hkb2dkOiB4ZW53YXRjaGRvZ2QubwogCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChMRExJ QlNfbGlieGVuY3RybCkgJChBUFBFTkRfTERGTEFHUykKIAoreGVuLXhzcGxpY2U6IHhlbi14c3Bs aWNlLm8KKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8ICQoTERMSUJTX2xpYnhlbmN0cmwpICQo QVBQRU5EX0xERkxBR1MpCisKIHhlbi1sb3dtZW1kOiB4ZW4tbG93bWVtZC5vCiAJJChDQykgJChM REZMQUdTKSAtbyAkQCAkPCAkKExETElCU19saWJ4ZW5ldnRjaG4pICQoTERMSUJTX2xpYnhlbmN0 cmwpICQoTERMSUJTX2xpYnhlbnN0b3JlKSAkKEFQUEVORF9MREZMQUdTKQogCmRpZmYgLS1naXQg YS90b29scy9taXNjL3hlbi14c3BsaWNlLmMgYi90b29scy9taXNjL3hlbi14c3BsaWNlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxYWI1YQotLS0gL2Rldi9udWxsCisr KyBiL3Rvb2xzL21pc2MveGVuLXhzcGxpY2UuYwpAQCAtMCwwICsxLDQ2MyBAQAorLyoKKyAqIENv cHlyaWdodCAoYykgMjAxNiBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpYmdlbi5o PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3Ry aW5nLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHhlbmN0cmwuaD4KKyNpbmNsdWRlIDx4ZW5zdG9y ZS5oPgorCitzdGF0aWMgeGNfaW50ZXJmYWNlICp4Y2g7CisKK3ZvaWQgc2hvd19oZWxwKHZvaWQp Cit7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAieGVuLXhzcGxpY2U6IFhzcGxp Y2UgdGVzdCB0b29sXG4iCisgICAgICAgICAgICAiVXNhZ2U6IHhlbi14c3BsaWNlIDxjb21tYW5k PiBbYXJnc11cbiIKKyAgICAgICAgICAgICIgPG5hbWU+IEFuIHVuaXF1ZSBuYW1lIG9mIHBheWxv YWQuIFVwIHRvICVkIGNoYXJhY3RlcnMuXG4iCisgICAgICAgICAgICAiQ29tbWFuZHM6XG4iCisg ICAgICAgICAgICAiICBoZWxwICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwXG4i CisgICAgICAgICAgICAiICB1cGxvYWQgPG5hbWU+IDxmaWxlPiAgIHVwbG9hZCBmaWxlIDxmaWxl PiB3aXRoIDxuYW1lPiBuYW1lXG4iCisgICAgICAgICAgICAiICBsaXN0ICAgICAgICAgICAgICAg ICAgIGxpc3QgcGF5bG9hZHMgdXBsb2FkZWQuXG4iCisgICAgICAgICAgICAiICBhcHBseSA8bmFt ZT4gICAgICAgICAgIGFwcGx5IDxuYW1lPiBwYXRjaC5cbiIKKyAgICAgICAgICAgICIgIHJldmVy dCA8bmFtZT4gICAgICAgICAgcmV2ZXJ0IG5hbWUgPG5hbWU+IHBhdGNoLlxuIgorICAgICAgICAg ICAgIiAgcmVwbGFjZSA8bmFtZT4gICAgICAgICBhcHBseSA8bmFtZT4gcGF0Y2ggYW5kIHJldmVy dCBhbGwgb3RoZXJzLlxuIgorICAgICAgICAgICAgIiAgdW5sb2FkIDxuYW1lPiAgICAgICAgICB1 bmxvYWQgbmFtZSA8bmFtZT4gcGF0Y2guXG4iCisgICAgICAgICAgICAiICBsb2FkICA8ZmlsZT4g ICAgICAgICAgIHVwbG9hZCBhbmQgYXBwbHkgPGZpbGU+LlxuIgorICAgICAgICAgICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICBuYW1lIGlzIHRoZSA8ZmlsZT4gbmFtZVxuIiwKKyAgICAgICAg ICAgIFhFTl9YU1BMSUNFX05BTUVfU0laRSk7Cit9CisKKy8qIHdyYXBwZXIgZnVuY3Rpb24gKi8K K3N0YXRpYyBpbnQgaGVscF9mdW5jKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgc2hv d19oZWxwKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQVJSQVlfU0laRShhKSAoc2l6 ZW9mIChhKSAvIHNpemVvZiAoKGEpWzBdKSkKKworc3RhdGljIGNvbnN0IGNoYXIgKnN0YXRlMnN0 cih1bnNpZ25lZCBpbnQgc3RhdGUpCit7CisjZGVmaW5lIFNUQVRFKHgpIFtYU1BMSUNFX1NUQVRF XyMjeF0gPSAjeAorICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0geworICAg ICAgICAgICAgU1RBVEUoQ0hFQ0tFRCksCisgICAgICAgICAgICBTVEFURShBUFBMSUVEKSwKKyAg ICB9OworI3VuZGVmIFNUQVRFCisgICAgaWYgKHN0YXRlID49IEFSUkFZX1NJWkUobmFtZXMpIHx8 ICFuYW1lc1tzdGF0ZV0pCisgICAgICAgIHJldHVybiAidW5rbm93biI7CisKKyAgICByZXR1cm4g bmFtZXNbc3RhdGVdOworfQorCisvKiBUaGlzIHZhbHVlIHdhcyBjaG9vc2VuIGFkaG9jLiBJdCBj b3VsZCBiZSA0MiB0b28uICovCisjZGVmaW5lIE1BWF9MRU4gMTEKK3N0YXRpYyBpbnQgbGlzdF9m dW5jKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgdW5zaWduZWQgaW50IGlkeCwgZG9u ZSwgbGVmdCwgaTsKKyAgICB4ZW5feHNwbGljZV9zdGF0dXNfdCAqaW5mbyA9IE5VTEw7CisgICAg Y2hhciAqbmFtZSA9IE5VTEw7CisgICAgdWludDMyX3QgKmxlbiA9IE5VTEw7CisgICAgaW50IHJj ID0gRU5PTUVNOworCisgICAgaWYgKCBhcmdjICkKKyAgICB7CisgICAgICAgIHNob3dfaGVscCgp OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlkeCA9IGxlZnQgPSAwOworICAgIGlu Zm8gPSBtYWxsb2Moc2l6ZW9mKCppbmZvKSAqIE1BWF9MRU4pOworICAgIGlmICggIWluZm8gKQor ICAgICAgICByZXR1cm4gcmM7CisgICAgbmFtZSA9IG1hbGxvYyhzaXplb2YoKm5hbWUpICogWEVO X1hTUExJQ0VfTkFNRV9TSVpFICogTUFYX0xFTik7CisgICAgaWYgKCAhbmFtZSApCisgICAgewor ICAgICAgICBmcmVlKGluZm8pOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorICAgIGxlbiA9 IG1hbGxvYyhzaXplb2YoKmxlbikgKiBNQVhfTEVOKTsKKyAgICBpZiAoICFsZW4gKSB7CisgICAg ICAgIGZyZWUobmFtZSk7CisgICAgICAgIGZyZWUoaW5mbyk7CisgICAgICAgIHJldHVybiByYzsK KyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZG91dCwiIElEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgc3RhdHVzXG4iCisgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tXG4iKTsKKyAgICBkbyB7 CisgICAgICAgIGRvbmUgPSAwOworICAgICAgICAvKiBUaGUgbWVtc2V0IGlzIGRvbmUgdG8gY2F0 Y2ggZXJyb3JzLiAqLworICAgICAgICBtZW1zZXQoaW5mbywgJ0EnLCBzaXplb2YoKmluZm8pICog TUFYX0xFTik7CisgICAgICAgIG1lbXNldChuYW1lLCAnQicsIHNpemVvZigqbmFtZSAqIE1BWF9M RU4gKiBYRU5fWFNQTElDRV9OQU1FX1NJWkUpKTsKKyAgICAgICAgbWVtc2V0KGxlbiwgJ0MnLCBz aXplb2YoKmxlbikgKiBNQVhfTEVOKTsKKyAgICAgICAgcmMgPSB4Y194c3BsaWNlX2xpc3QoeGNo LCBNQVhfTEVOLCBpZHgsIGluZm8sIG5hbWUsIGxlbiwgJmRvbmUsICZsZWZ0KTsKKyAgICAgICAg aWYgKCByYyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVk IHRvIGxpc3QgJWQvJWQ6ICVkKCVzKSFcbiIsCisgICAgICAgICAgICAgICAgICAgIGlkeCwgbGVm dCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGRvbmU7IGkrKyApCisgICAgICAgIHsKKyAgICAg ICAgICAgIHVuc2lnbmVkIGludCBqOworICAgICAgICAgICAgdWludDMyX3Qgc3o7CisgICAgICAg ICAgICBjaGFyICpzdHI7CisKKyAgICAgICAgICAgIHN6ID0gbGVuW2ldOworICAgICAgICAgICAg c3RyID0gbmFtZSArIChpICogWEVOX1hTUExJQ0VfTkFNRV9TSVpFKTsKKyAgICAgICAgICAgIGZv ciAoIGogPSBzejsgaiA8IFhFTl9YU1BMSUNFX05BTUVfU0laRTsgaisrICkKKyAgICAgICAgICAg ICAgICBzdHJbal0gPSAnXDAnOworCisgICAgICAgICAgICBwcmludGYoIiUtNDBzfCAlcyIsIHN0 ciwgc3RhdGUyc3RyKGluZm9baV0uc3RhdGUpKTsKKyAgICAgICAgICAgIGlmICggaW5mb1tpXS5y YyApCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgKCVkLCAlcylcbiIsIC1pbmZvW2ldLnJjLCBz dHJlcnJvcigtaW5mb1tpXS5yYykpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg IHB1dHMoIiIpOworICAgICAgICB9CisgICAgICAgIGlkeCArPSBkb25lOworICAgIH0gd2hpbGUg KCBsZWZ0ICk7CisKKyAgICBmcmVlKG5hbWUpOworICAgIGZyZWUoaW5mbyk7CisgICAgZnJlZShs ZW4pOworICAgIHJldHVybiByYzsKK30KKyN1bmRlZiBNQVhfTEVOCisKK3N0YXRpYyBpbnQgZ2V0 X25hbWUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqbmFtZSkKK3sKKyAgICBzc2l6ZV90 IGxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKyAgICBpZiAoIGxlbiA+IFhFTl9YU1BMSUNFX05BTUVf U0laRSApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIklEIE1VU1QgYmUgJWQgY2hh cmFjdGVycyFcbiIsIFhFTl9YU1BMSUNFX05BTUVfU0laRSk7CisgICAgICAgIGVycm5vID0gRUlO VkFMOworICAgICAgICByZXR1cm4gZXJybm87CisgICAgfQorICAgIC8qIERvbid0IHdhbnQgYW55 IGZ1bm55IHN0cmluZ3MgZnJvbSB0aGUgc3RhY2suICovCisgICAgbWVtc2V0KG5hbWUsIDAsIFhF Tl9YU1BMSUNFX05BTUVfU0laRSk7CisgICAgc3RybmNweShuYW1lLCBhcmd2WzBdLCBsZW4pOwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwbG9hZF9mdW5jKGludCBhcmdjLCBjaGFy ICphcmd2W10pCit7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgY2hhciBuYW1lW1hFTl9YU1BM SUNFX05BTUVfU0laRV07CisgICAgaW50IGZkID0gMCwgcmM7CisgICAgc3RydWN0IHN0YXQgYnVm OworICAgIHVuc2lnbmVkIGNoYXIgKmZidWY7CisgICAgc3NpemVfdCBsZW47CisKKyAgICBpZiAo IGFyZ2MgIT0gMiApCisgICAgeworICAgICAgICBzaG93X2hlbHAoKTsKKyAgICAgICAgcmV0dXJu IC0xOworICAgIH0KKworICAgIGlmICggZ2V0X25hbWUoYXJnYywgYXJndiwgbmFtZSkgKQorICAg ICAgICByZXR1cm4gRUlOVkFMOworCisgICAgZmlsZW5hbWUgPSBhcmd2WzFdOworICAgIGZkID0g b3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworICAgIGlmICggZmQgPCAwICkKKyAgICB7CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gJXMsIGVycm9yOiAlZCglcylcbiIs CisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAg ICAgICByZXR1cm4gZXJybm87CisgICAgfQorICAgIGlmICggc3RhdChmaWxlbmFtZSwgJmJ1Zikg IT0gMCApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBnZXQgcmln aHQgc2l6ZSAlcywgZXJyb3I6ICVkKCVzKVxuIiwKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSwg ZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0 dXJuIGVycm5vOworICAgIH0KKworICAgIGxlbiA9IGJ1Zi5zdF9zaXplOworICAgIGZidWYgPSBt bWFwKDAsIGxlbiwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworICAgIGlmICggZmJ1 ZiA9PSBNQVBfRkFJTEVEICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCJDb3VsZCBu b3QgbWFwOiAlcywgZXJyb3I6ICVkKCVzKVxuIiwKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSwg ZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgIHJl dHVybiBlcnJubzsKKyAgICB9CisgICAgcHJpbnRmKCJVcGxvYWRpbmcgJXMgKCV6dSBieXRlcylc biIsIGZpbGVuYW1lLCBsZW4pOworICAgIHJjID0geGNfeHNwbGljZV91cGxvYWQoeGNoLCBuYW1l LCBmYnVmLCBsZW4pOworICAgIGlmICggcmMgKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVw bG9hZCBmYWlsZWQ6ICVzLCBlcnJvcjogJWQoJXMpIVxuIiwKKyAgICAgICAgICAgICAgICBmaWxl bmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICBpZiAoIG11bm1hcCggZmJ1Ziwg bGVuKSApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCB1bm1hcCE/ IGVycm9yOiAlZCglcykhXG4iLAorICAgICAgICAgICAgICAgIGVycm5vLCBzdHJlcnJvcihlcnJu bykpOworICAgICAgICBpZiAoICFyYyApCisgICAgICAgICAgICByYyA9IGVycm5vOworICAgIH0K KyAgICBjbG9zZShmZCk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qIFRoZXNlIE1VU1QgbWF0 Y2ggdG8gdGhlICdhY3Rpb25fb3B0aW9uc1tdJyBhcnJheSBzbG90cy4gKi8KK2VudW0geworICAg IEFDVElPTl9BUFBMWSA9IDAsCisgICAgQUNUSU9OX1JFVkVSVCA9IDEsCisgICAgQUNUSU9OX1VO TE9BRCA9IDIsCisgICAgQUNUSU9OX1JFUExBQ0UgPSAzLAorfTsKKworc3RydWN0IHsKKyAgICBp bnQgYWxsb3c7IC8qIFN0YXRlIGl0IG11c3QgYmUgaW4gdG8gY2FsbCBmdW5jdGlvbi4gKi8KKyAg ICBpbnQgZXhwZWN0ZWQ7IC8qIFRoZSBzdGF0ZSB0byBiZSBpbiBhZnRlciB0aGUgZnVuY3Rpb24u ICovCisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBpbnQgKCpmdW5jdGlvbikoeGNfaW50ZXJm YWNlICp4Y2gsIGNoYXIgKm5hbWUsIHVpbnQzMl90IHRpbWVvdXQpOworICAgIHVuc2lnbmVkIGlu dCBleGVjdXRlZDsgLyogSGFzIHRoZSBmdW5jdGlvbiBiZWVuIGNhbGxlZD8uICovCit9IGFjdGlv bl9vcHRpb25zW10gPSB7CisgICAgeyAgIC5hbGxvdyA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRCwK KyAgICAgICAgLmV4cGVjdGVkID0gWFNQTElDRV9TVEFURV9BUFBMSUVELAorICAgICAgICAubmFt ZSA9ICJhcHBseSIsCisgICAgICAgIC5mdW5jdGlvbiA9IHhjX3hzcGxpY2VfYXBwbHksCisgICAg fSwKKyAgICB7ICAgLmFsbG93ID0gWFNQTElDRV9TVEFURV9BUFBMSUVELAorICAgICAgICAuZXhw ZWN0ZWQgPSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQsCisgICAgICAgIC5uYW1lID0gInJldmVydCIs CisgICAgICAgIC5mdW5jdGlvbiA9IHhjX3hzcGxpY2VfcmV2ZXJ0LAorICAgIH0sCisgICAgeyAg IC5hbGxvdyA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRCwKKyAgICAgICAgLmV4cGVjdGVkID0gLUVO T0VOVCwKKyAgICAgICAgLm5hbWUgPSAidW5sb2FkIiwKKyAgICAgICAgLmZ1bmN0aW9uID0geGNf eHNwbGljZV91bmxvYWQsCisgICAgfSwKKyAgICB7ICAgLmFsbG93ID0gWFNQTElDRV9TVEFURV9D SEVDS0VELAorICAgICAgICAuZXhwZWN0ZWQgPSBYU1BMSUNFX1NUQVRFX0FQUExJRUQsCisgICAg ICAgIC5uYW1lID0gInJlcGxhY2UiLAorICAgICAgICAuZnVuY3Rpb24gPSB4Y194c3BsaWNlX3Jl cGxhY2UsCisgICAgfSwKK307CisKKy8qIEdvIGFyb3VuZCAzMDAgKiAwLjEgc2Vjb25kcyA9IDMw IHNlY29uZHMuICovCisjZGVmaW5lIFJFVFJJRVMgMzAwCisvKiBha2EgMC4xIHNlY29uZCAqLwor I2RlZmluZSBERUxBWSAxMDAwMDAKKworaW50IGFjdGlvbl9mdW5jKGludCBhcmdjLCBjaGFyICph cmd2W10sIHVuc2lnbmVkIGludCBpZHgpCit7CisgICAgY2hhciBuYW1lW1hFTl9YU1BMSUNFX05B TUVfU0laRV07CisgICAgaW50IHJjLCBvcmlnaW5hbF9zdGF0ZTsKKyAgICB4ZW5feHNwbGljZV9z dGF0dXNfdCBzdGF0dXM7CisgICAgdW5zaWduZWQgaW50IHJldHJ5ID0gMDsKKworICAgIGlmICgg YXJnYyAhPSAxICkKKyAgICB7CisgICAgICAgIHNob3dfaGVscCgpOworICAgICAgICByZXR1cm4g LTE7CisgICAgfQorCisgICAgaWYgKCBpZHggPj0gQVJSQVlfU0laRShhY3Rpb25fb3B0aW9ucykg KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIGdldF9uYW1lKGFyZ2MsIGFyZ3YsIG5h bWUpICkKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKworICAgIC8qIENoZWNrIGluaXRpYWwgc3Rh dHVzLiAqLworICAgIHJjID0geGNfeHNwbGljZV9nZXQoeGNoLCBuYW1lLCAmc3RhdHVzKTsKKyAg ICBpZiAoIHJjICkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZmFpbGVkIHRv IGdldCBzdGF0dXMgKHJjPSVkLCAlcykhXG4iLAorICAgICAgICAgICAgICAgIG5hbWUsIC1yYywg c3RyZXJyb3IoLXJjKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCBzdGF0 dXMucmMgPT0gLUVBR0FJTiApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGZh aWxlZC4gT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiIsIG5hbWUpOworICAgICAgICBy ZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBzdGF0dXMuc3RhdGUgPT0gYWN0aW9uX29wdGlv bnNbaWR4XS5leHBlY3RlZCApCisgICAgeworICAgICAgICBwcmludGYoIk5vIGFjdGlvbiBuZWVk ZWRcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBQZXJmb3JtIGFjdGlv bi4gKi8KKyAgICBpZiAoIGFjdGlvbl9vcHRpb25zW2lkeF0uYWxsb3cgJiBzdGF0dXMuc3RhdGUg KQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJQZXJmb3JtaW5nICVzOiIsIGFjdGlvbl9vcHRpb25z W2lkeF0ubmFtZSk7CisgICAgICAgIHJjID0gYWN0aW9uX29wdGlvbnNbaWR4XS5mdW5jdGlvbih4 Y2gsIG5hbWUsIDApOworICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgeworICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICIlcyBmYWlsZWQgd2l0aCAlZCglcylcbiIsIG5hbWUsIC1yYywgc3Ry ZXJyb3IoLXJjKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9Cisg ICAgZWxzZQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogaW4gd3Jvbmcgc3RhdGUgKCVzKSwg ZXhwZWN0ZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgIG5hbWUsIHN0YXRlMnN0cihzdGF0dXMu c3RhdGUpLAorICAgICAgICAgICAgICAgc3RhdGUyc3RyKGFjdGlvbl9vcHRpb25zW2lkeF0uZXhw ZWN0ZWQpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG9yaWdpbmFsX3N0YXRl ID0gc3RhdHVzLnN0YXRlOworICAgIGRvIHsKKyAgICAgICAgcmMgPSB4Y194c3BsaWNlX2dldCh4 Y2gsIG5hbWUsICZzdGF0dXMpOworICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgeworICAgICAg ICAgICAgcmMgPSAtZXJybm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg ICAgIGlmICggc3RhdHVzLnN0YXRlICE9IG9yaWdpbmFsX3N0YXRlICkKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBpZiAoIHN0YXR1cy5yYyAmJiBzdGF0dXMucmMgIT0gLUVBR0FJTiApCisg ICAgICAgIHsKKyAgICAgICAgICAgIHJjID0gc3RhdHVzLnJjOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoIi4iKTsKKyAgICAgICAgZmZsdXNoKHN0ZG91 dCk7CisgICAgICAgIHVzbGVlcChERUxBWSk7CisgICAgfSB3aGlsZSAoICsrcmV0cnkgPCBSRVRS SUVTICk7CisKKyAgICBpZiAoIHJldHJ5ID49IFJFVFJJRVMgKQorICAgIHsKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsICIlczogT3BlcmF0aW9uIGRpZG4ndCBjb21wbGV0ZSBhZnRlciAzMCBzZWNv bmRzLlxuIiwgbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZQorICAg IHsKKyAgICAgICAgaWYgKCByYyA9PSAwICkKKyAgICAgICAgICAgIHJjID0gc3RhdHVzLnN0YXRl OworCisgICAgICAgIGlmICggYWN0aW9uX29wdGlvbnNbaWR4XS5leHBlY3RlZCA9PSByYyApCisg ICAgICAgICAgICBwcmludGYoIiBjb21wbGV0ZWRcbiIpOworICAgICAgICBlbHNlIGlmICggcmMg PCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBmYWlsZWQg d2l0aCAlZCglcylcbiIsIG5hbWUsIC1yYywgc3RyZXJyb3IoLXJjKSk7CisgICAgICAgICAgICBy ZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbiB3cm9uZyBzdGF0ZSAoJXMpLCBleHBlY3RlZCAoJXMp XG4iLAorICAgICAgICAgICAgICAgbmFtZSwgc3RhdGUyc3RyKHJjKSwKKyAgICAgICAgICAgICAg IHN0YXRlMnN0cihhY3Rpb25fb3B0aW9uc1tpZHhdLmV4cGVjdGVkKSk7CisgICAgICAgICAgICBy ZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBsb2FkX2Z1bmMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgcmM7Cisg ICAgY2hhciAqbmV3X2FyZ3ZbMl07CisgICAgY2hhciAqcGF0aCwgKm5hbWUsICpsYXN0ZG90Owor CisgICAgaWYgKCBhcmdjICE9IDEgKQorICAgIHsKKyAgICAgICAgc2hvd19oZWxwKCk7CisgICAg ICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgLyogPGZpbGU+ICovCisgICAgbmV3X2FyZ3ZbMV0g PSBhcmd2WzBdOworCisgICAgLyogU3ludGhlc2l6ZSB0aGUgPGlkPiAqLworICAgIHBhdGggPSBz dHJkdXAoYXJndlswXSk7CisKKyAgICBuYW1lID0gYmFzZW5hbWUocGF0aCk7CisgICAgbGFzdGRv dCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKyAgICBpZiAoIGxhc3Rkb3QgIT0gTlVMTCApCisgICAg ICAgICpsYXN0ZG90ID0gJ1wwJzsKKyAgICBuZXdfYXJndlswXSA9IG5hbWU7CisKKyAgICByYyA9 IHVwbG9hZF9mdW5jKDIgLyogPGlkPiA8ZmlsZT4gKi8sIG5ld19hcmd2KTsKKyAgICBpZiAoIHJj ICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBhY3Rpb25fZnVuYygxIC8qIG9ubHkg PGlkPiAqLywgbmV3X2FyZ3YsIEFDVElPTl9BUFBMWSk7CisgICAgaWYgKCByYyApCisgICAgICAg IGFjdGlvbl9mdW5jKDEsIG5ld19hcmd2LCBBQ1RJT05fVU5MT0FEKTsKKworICAgIGZyZWUocGF0 aCk7CisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogVGhlc2UgYXJlIGFsc28gZnVuY3Rpb25z IGluIGFjdGlvbl9vcHRpb25zIHRoYXQgYXJlIGNhbGxlZCBpbiBjYXNlCisgKiBub25lIG9mIHRo ZSBvbmVzIGluIG1haW5fb3B0aW9ucyBtYXRjaC4KKyAqLworc3RydWN0IHsKKyAgICBjb25zdCBj aGFyICpuYW1lOworICAgIGludCAoKmZ1bmN0aW9uKShpbnQgYXJnYywgY2hhciAqYXJndltdKTsK K30gbWFpbl9vcHRpb25zW10gPSB7CisgICAgeyAiaGVscCIsIGhlbHBfZnVuYyB9LAorICAgIHsg Imxpc3QiLCBsaXN0X2Z1bmMgfSwKKyAgICB7ICJ1cGxvYWQiLCB1cGxvYWRfZnVuYyB9LAorICAg IHsgImxvYWQiLCBsb2FkX2Z1bmMgfSwKK307CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCit7CisgICAgaW50IGksIGosIHJldDsKKworICAgIGlmICggYXJnYyAgPD0gMSApCisg ICAgeworICAgICAgICBzaG93X2hlbHAoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg IGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYWluX29wdGlvbnMpOyBpKysgKQorICAgICAg ICBpZiAoIXN0cm5jbXAobWFpbl9vcHRpb25zW2ldLm5hbWUsIGFyZ3ZbMV0sIHN0cmxlbihhcmd2 WzFdKSkpCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmICggaSA9PSBBUlJBWV9TSVpFKG1h aW5fb3B0aW9ucykgKQorICAgIHsKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCBBUlJBWV9TSVpF KGFjdGlvbl9vcHRpb25zKTsgaisrICkKKyAgICAgICAgICAgIGlmICghc3RybmNtcChhY3Rpb25f b3B0aW9uc1tqXS5uYW1lLCBhcmd2WzFdLCBzdHJsZW4oYXJndlsxXSkpKQorICAgICAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgIGlmICggaiA9PSBBUlJBWV9TSVpFKGFjdGlvbl9vcHRpb25z KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5yZWNvZ25pc2Vk IGNvbW1hbmQgJyVzJyAtLSB0cnkgIgorICAgICAgICAgICAgICAgICAgICIneGVuLXhzcGxpY2Ug aGVscCdcbiIsIGFyZ3ZbMV0pOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAg ICB9IGVsc2UKKyAgICAgICAgaiA9IEFSUkFZX1NJWkUoYWN0aW9uX29wdGlvbnMpOworCisgICAg eGNoID0geGNfaW50ZXJmYWNlX29wZW4oMCwwLDApOworICAgIGlmICggIXhjaCApCisgICAgewor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBnZXQgdGhlIGhhbmRsZXJcbiIpOwor ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIGkgPT0gQVJSQVlfU0laRShtYWlu X29wdGlvbnMpICkKKyAgICAgICAgcmV0ID0gYWN0aW9uX2Z1bmMoYXJnYyAtMiwgYXJndiArIDIs IGopOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gbWFpbl9vcHRpb25zW2ldLmZ1bmN0aW9uKGFy Z2MgLTIsIGFyZ3YgKyAyKTsKKworICAgIHhjX2ludGVyZmFjZV9jbG9zZSh4Y2gpOworCisgICAg cmV0dXJuICEhcmV0OworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQwor ICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0 aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuNS4wCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK