From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jonathan Davies Subject: [PATCH 5/7] oxenstored: move functions that process simple operations Date: Thu, 17 Mar 2016 17:51:13 +0000 Message-ID: <1458237075-13777-6-git-send-email-jonathan.davies@citrix.com> References: <1458237075-13777-1-git-send-email-jonathan.davies@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 1agc5M-0001a1-KI for xen-devel@lists.xenproject.org; Thu, 17 Mar 2016 17:51:48 +0000 In-Reply-To: <1458237075-13777-1-git-send-email-jonathan.davies@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Jonathan Davies , Jon Ludlam , Andrew Cooper , Euan Harris , Dave Scott List-Id: xen-devel@lists.xenproject.org U2VwYXJhdGUgdGhlIGZ1bmN0aW9ucyB3aGljaCBwcm9jZXNzIG9wZXJhdGlvbnMgdGhhdCBjYW4g YmUgZG9uZSBhcyBwYXJ0IG9mIGEKdHJhbnNhY3Rpb24uIFNwZWNpZmljYWxseSwgdGhlc2Ugb3Bl cmF0aW9ucyBhcmU6IHJlYWQsIHdyaXRlLCBybSwgZ2V0cGVybXMsCnNldHBlcm1zLCBnZXRkb21h aW5wYXRoLCBkaXJlY3RvcnksIG1rZGlyLgoKQWxzbyBzcGxpdCBmdW5jdGlvbl9vZl90eXBlIGlu dG8gdHdvIGZ1bmN0aW9uczogb25lIGZvciBwcm9jZXNzaW5nIHRoZSBzaW1wbGUKb3BlcmF0aW9u cyBhbmQgb25lIGZvciBwcm9jZXNzaW5nIHRoZSByZXN0LgoKVGhpcyB3aWxsIGhlbHAgYWxsb3cg cmVwbGF5IG9mIHRyYW5zYWN0aW9ucywgYWxsb3dpbmcgdXMgdG8gaW52b2tlIHRoZSBmdW5jdGlv bnMKdGhhdCBwcm9jZXNzIHRoZSBzaW1wbGUgb3BlcmF0aW9ucyBhcyBwYXJ0IG9mIHRoZSBwcm9j ZXNzaW5nIG9mIHRyYW5zYWN0aW9uX2VuZC4KClNpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIERhdmll cyA8am9uYXRoYW4uZGF2aWVzQGNpdHJpeC5jb20+ClJldmlld2VkLWJ5OiBBbmRyZXcgQ29vcGVy IDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpSZXZpZXdlZC1ieTogSm9uIEx1ZGxhbSA8am9u YXRoYW4ubHVkbGFtQGNpdHJpeC5jb20+ClJldmlld2VkLWJ5OiBFdWFuIEhhcnJpcyA8ZXVhbi5o YXJyaXNAY2l0cml4LmNvbT4KLS0tCiB0b29scy9vY2FtbC94ZW5zdG9yZWQvcHJvY2Vzcy5tbCB8 ICAyMjMgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCAxMjEgaW5zZXJ0aW9ucygrKSwgMTAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rv b2xzL29jYW1sL3hlbnN0b3JlZC9wcm9jZXNzLm1sIGIvdG9vbHMvb2NhbWwveGVuc3RvcmVkL3By b2Nlc3MubWwKaW5kZXggNzU4YWRlMS4uMzlhZTcxYiAxMDA2NDQKLS0tIGEvdG9vbHMvb2NhbWwv eGVuc3RvcmVkL3Byb2Nlc3MubWwKKysrIGIvdG9vbHMvb2NhbWwveGVuc3RvcmVkL3Byb2Nlc3Mu bWwKQEAgLTExOSw5NCArMTE5LDYgQEAgbGV0IGRvX2dldHBlcm1zIGNvbiB0IGRvbWFpbnMgY29u cyBkYXRhID0KIAlsZXQgcGVybXMgPSBUcmFuc2FjdGlvbi5nZXRwZXJtcyB0IChDb25uZWN0aW9u LmdldF9wZXJtIGNvbikgcGF0aCBpbgogCVBlcm1zLk5vZGUudG9fc3RyaW5nIHBlcm1zIF4gIlww MDAiCiAKLWxldCBkb193YXRjaCBjb24gdCBkb21haW5zIGNvbnMgZGF0YSA9Ci0JbGV0IChub2Rl LCB0b2tlbikgPSAKLQkJbWF0Y2ggKHNwbGl0IE5vbmUgJ1wwMDAnIGRhdGEpIHdpdGgKLQkJfCBb bm9kZTsgdG9rZW47ICIiXSAgIC0+IG5vZGUsIHRva2VuCi0JCXwgXyAgICAgICAgICAgICAgICAg ICAtPiByYWlzZSBJbnZhbGlkX0NtZF9BcmdzCi0JCWluCi0JbGV0IHdhdGNoID0gQ29ubmVjdGlv bnMuYWRkX3dhdGNoIGNvbnMgY29uIG5vZGUgdG9rZW4gaW4KLQlQYWNrZXQuQWNrIChmdW4gKCkg LT4gQ29ubmVjdGlvbi5maXJlX3NpbmdsZV93YXRjaCB3YXRjaCkKLQotbGV0IGRvX3Vud2F0Y2gg Y29uIHQgZG9tYWlucyBjb25zIGRhdGEgPQotCWxldCAobm9kZSwgdG9rZW4pID0KLQkJbWF0Y2gg KHNwbGl0IE5vbmUgJ1wwMDAnIGRhdGEpIHdpdGgKLQkJfCBbbm9kZTsgdG9rZW47ICIiXSAgIC0+ IG5vZGUsIHRva2VuCi0JCXwgXyAgICAgICAgICAgICAgICAgICAtPiByYWlzZSBJbnZhbGlkX0Nt ZF9BcmdzCi0JCWluCi0JQ29ubmVjdGlvbnMuZGVsX3dhdGNoIGNvbnMgY29uIG5vZGUgdG9rZW4K LQotbGV0IGRvX3RyYW5zYWN0aW9uX3N0YXJ0IGNvbiB0IGRvbWFpbnMgY29ucyBkYXRhID0KLQlp ZiBUcmFuc2FjdGlvbi5nZXRfaWQgdCA8PiBUcmFuc2FjdGlvbi5ub25lIHRoZW4KLQkJcmFpc2Ug VHJhbnNhY3Rpb25fbmVzdGVkOwotCWxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLmdldF9zdG9yZSB0 IGluCi0Jc3RyaW5nX29mX2ludCAoQ29ubmVjdGlvbi5zdGFydF90cmFuc2FjdGlvbiBjb24gc3Rv cmUpIF4gIlwwMDAiCi0KLWxldCBkb190cmFuc2FjdGlvbl9lbmQgY29uIHQgZG9tYWlucyBjb25z IGRhdGEgPQotCWxldCBjb21taXQgPQotCQltYXRjaCAoc3BsaXQgTm9uZSAnXDAwMCcgZGF0YSkg d2l0aAotCQl8ICJUIiA6OiBfIC0+IHRydWUKLQkJfCAiRiIgOjogXyAtPiBmYWxzZQotCQl8IHgg OjogXyAgIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHgpCi0JCXwgXyAgICAgICAgLT4gcmFp c2UgSW52YWxpZF9DbWRfQXJncwotCQlpbgotCWxldCBzdWNjZXNzID0KLQkJQ29ubmVjdGlvbi5l bmRfdHJhbnNhY3Rpb24gY29uIChUcmFuc2FjdGlvbi5nZXRfaWQgdCkgY29tbWl0IGluCi0JaWYg bm90IHN1Y2Nlc3MgdGhlbgotCQlyYWlzZSBUcmFuc2FjdGlvbl9hZ2FpbjsKLQlpZiBjb21taXQg dGhlbgotCQlwcm9jZXNzX3dhdGNoIChMaXN0LnJldiAoVHJhbnNhY3Rpb24uZ2V0X3BhdGhzIHQp KSBjb25zCi0KLWxldCBkb19pbnRyb2R1Y2UgY29uIHQgZG9tYWlucyBjb25zIGRhdGEgPQotCWlm IG5vdCAoQ29ubmVjdGlvbi5pc19kb20wIGNvbikKLQl0aGVuIHJhaXNlIERlZmluZS5QZXJtaXNz aW9uX2RlbmllZDsKLQlsZXQgKGRvbWlkLCBtZm4sIHBvcnQpID0KLQkJbWF0Y2ggKHNwbGl0IE5v bmUgJ1wwMDAnIGRhdGEpIHdpdGgKLQkJfCBkb21pZCA6OiBtZm4gOjogcG9ydCA6OiBfIC0+Ci0J CQlpbnRfb2Zfc3RyaW5nIGRvbWlkLCBOYXRpdmVpbnQub2Zfc3RyaW5nIG1mbiwgaW50X29mX3N0 cmluZyBwb3J0Ci0JCXwgXyAgICAgICAgICAgICAgICAgICAgICAgICAtPiByYWlzZSBJbnZhbGlk X0NtZF9BcmdzOwotCQlpbgotCWxldCBkb20gPQotCQlpZiBEb21haW5zLmV4aXN0IGRvbWFpbnMg ZG9taWQgdGhlbgotCQkJRG9tYWlucy5maW5kIGRvbWFpbnMgZG9taWQKLQkJZWxzZSB0cnkKLQkJ CWxldCBuZG9tID0gWGVuY3RybC53aXRoX2ludGYgKGZ1biB4YyAtPgotCQkJCURvbWFpbnMuY3Jl YXRlIHhjIGRvbWFpbnMgZG9taWQgbWZuIHBvcnQpIGluCi0JCQlDb25uZWN0aW9ucy5hZGRfZG9t YWluIGNvbnMgbmRvbTsKLQkJCUNvbm5lY3Rpb25zLmZpcmVfc3BlY193YXRjaGVzIGNvbnMgIkBp bnRyb2R1Y2VEb21haW4iOwotCQkJbmRvbQotCQl3aXRoIF8gLT4gcmFpc2UgSW52YWxpZF9DbWRf QXJncwotCWluCi0JaWYgKERvbWFpbi5nZXRfcmVtb3RlX3BvcnQgZG9tKSA8PiBwb3J0IHx8IChE b21haW4uZ2V0X21mbiBkb20pIDw+IG1mbiB0aGVuCi0JCXJhaXNlIERvbWFpbl9ub3RfbWF0Y2gK LQotbGV0IGRvX3JlbGVhc2UgY29uIHQgZG9tYWlucyBjb25zIGRhdGEgPQotCWlmIG5vdCAoQ29u bmVjdGlvbi5pc19kb20wIGNvbikKLQl0aGVuIHJhaXNlIERlZmluZS5QZXJtaXNzaW9uX2Rlbmll ZDsKLQlsZXQgZG9taWQgPQotCQltYXRjaCAoc3BsaXQgTm9uZSAnXDAwMCcgZGF0YSkgd2l0aAot CQl8IFtkb21pZDsiIl0gLT4gaW50X29mX3N0cmluZyBkb21pZAotCQl8IF8gICAgICAgICAgLT4g cmFpc2UgSW52YWxpZF9DbWRfQXJncwotCQlpbgotCWxldCBmaXJlX3NwZWNfd2F0Y2hlcyA9IERv bWFpbnMuZXhpc3QgZG9tYWlucyBkb21pZCBpbgotCURvbWFpbnMuZGVsIGRvbWFpbnMgZG9taWQ7 Ci0JQ29ubmVjdGlvbnMuZGVsX2RvbWFpbiBjb25zIGRvbWlkOwotCWlmIGZpcmVfc3BlY193YXRj aGVzIAotCXRoZW4gQ29ubmVjdGlvbnMuZmlyZV9zcGVjX3dhdGNoZXMgY29ucyAiQHJlbGVhc2VE b21haW4iCi0JZWxzZSByYWlzZSBJbnZhbGlkX0NtZF9BcmdzCi0KLWxldCBkb19yZXN1bWUgY29u IHQgZG9tYWlucyBjb25zIGRhdGEgPQotCWlmIG5vdCAoQ29ubmVjdGlvbi5pc19kb20wIGNvbikK LQl0aGVuIHJhaXNlIERlZmluZS5QZXJtaXNzaW9uX2RlbmllZDsKLQlsZXQgZG9taWQgPQotCQlt YXRjaCAoc3BsaXQgTm9uZSAnXDAwMCcgZGF0YSkgd2l0aAotCQl8IGRvbWlkIDo6IF8gLT4gaW50 X29mX3N0cmluZyBkb21pZAotCQl8IF8gICAgICAgICAgLT4gcmFpc2UgSW52YWxpZF9DbWRfQXJn cwotCQlpbgotCWlmIERvbWFpbnMuZXhpc3QgZG9tYWlucyBkb21pZAotCXRoZW4gRG9tYWlucy5y ZXN1bWUgZG9tYWlucyBkb21pZAotCWVsc2UgcmFpc2UgSW52YWxpZF9DbWRfQXJncwotCiBsZXQg ZG9fZ2V0ZG9tYWlucGF0aCBjb24gdCBkb21haW5zIGNvbnMgZGF0YSA9CiAJbGV0IGRvbWlkID0K IAkJbWF0Y2ggKHNwbGl0IE5vbmUgJ1wwMDAnIGRhdGEpIHdpdGgKQEAgLTMxOSwyOSArMjMxLDMx IEBAIGxldCByZXBseV9ub25lIGZjdCBjb24gdCBkb21zIGNvbnMgZGF0YSA9CiAJKCogbGV0IHRo ZSBmdW5jdGlvbiByZXBseSAqKQogCWZjdCBjb24gdCBkb21zIGNvbnMgZGF0YQogCi1sZXQgZnVu Y3Rpb25fb2ZfdHlwZSB0eSA9CisoKiBGdW5jdGlvbnMgZm9yICdzaW1wbGUnIG9wZXJhdGlvbnMg dGhhdCBjYW5ub3QgYmUgcGFydCBvZiBhIHRyYW5zYWN0aW9uICopCitsZXQgZnVuY3Rpb25fb2Zf dHlwZV9zaW1wbGVfb3AgdHkgPQogCW1hdGNoIHR5IHdpdGgKLQl8IFhlbmJ1cy5YYi5PcC5EZWJ1 ZyAgICAgICAgICAgICAtPiByZXBseV9kYXRhX29yX2FjayBkb19kZWJ1ZworCXwgWGVuYnVzLlhi Lk9wLkRlYnVnCisJfCBYZW5idXMuWGIuT3AuV2F0Y2gKKwl8IFhlbmJ1cy5YYi5PcC5VbndhdGNo CisJfCBYZW5idXMuWGIuT3AuVHJhbnNhY3Rpb25fc3RhcnQKKwl8IFhlbmJ1cy5YYi5PcC5UcmFu c2FjdGlvbl9lbmQKKwl8IFhlbmJ1cy5YYi5PcC5JbnRyb2R1Y2UKKwl8IFhlbmJ1cy5YYi5PcC5S ZWxlYXNlCisJfCBYZW5idXMuWGIuT3AuSXNpbnRyb2R1Y2VkCisJfCBYZW5idXMuWGIuT3AuUmVz dW1lCisJfCBYZW5idXMuWGIuT3AuU2V0X3RhcmdldAorCXwgWGVuYnVzLlhiLk9wLlJlc3RyaWN0 CisJfCBYZW5idXMuWGIuT3AuUmVzZXRfd2F0Y2hlcworCXwgWGVuYnVzLlhiLk9wLkludmFsaWQg ICAgICAgICAgIC0+IGVycm9yICJjYWxsZWQgZnVuY3Rpb25fb2ZfdHlwZV9zaW1wbGVfb3Agb24g b3BlcmF0aW9uICVzIiAoWGVuYnVzLlhiLk9wLnRvX3N0cmluZyB0eSk7CisJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgKFhlbmJ1cy5Y Yi5PcC50b19zdHJpbmcgdHkpKQogCXwgWGVuYnVzLlhiLk9wLkRpcmVjdG9yeSAgICAgICAgIC0+ IHJlcGx5X2RhdGEgZG9fZGlyZWN0b3J5CiAJfCBYZW5idXMuWGIuT3AuUmVhZCAgICAgICAgICAg ICAgLT4gcmVwbHlfZGF0YSBkb19yZWFkCiAJfCBYZW5idXMuWGIuT3AuR2V0cGVybXMgICAgICAg ICAgLT4gcmVwbHlfZGF0YSBkb19nZXRwZXJtcwotCXwgWGVuYnVzLlhiLk9wLldhdGNoICAgICAg ICAgICAgIC0+IHJlcGx5X25vbmUgZG9fd2F0Y2gKLQl8IFhlbmJ1cy5YYi5PcC5VbndhdGNoICAg ICAgICAgICAtPiByZXBseV9hY2sgZG9fdW53YXRjaAotCXwgWGVuYnVzLlhiLk9wLlRyYW5zYWN0 aW9uX3N0YXJ0IC0+IHJlcGx5X2RhdGEgZG9fdHJhbnNhY3Rpb25fc3RhcnQKLQl8IFhlbmJ1cy5Y Yi5PcC5UcmFuc2FjdGlvbl9lbmQgICAtPiByZXBseV9hY2sgZG9fdHJhbnNhY3Rpb25fZW5kCi0J fCBYZW5idXMuWGIuT3AuSW50cm9kdWNlICAgICAgICAgLT4gcmVwbHlfYWNrIGRvX2ludHJvZHVj ZQotCXwgWGVuYnVzLlhiLk9wLlJlbGVhc2UgICAgICAgICAgIC0+IHJlcGx5X2FjayBkb19yZWxl YXNlCiAJfCBYZW5idXMuWGIuT3AuR2V0ZG9tYWlucGF0aCAgICAgLT4gcmVwbHlfZGF0YSBkb19n ZXRkb21haW5wYXRoCiAJfCBYZW5idXMuWGIuT3AuV3JpdGUgICAgICAgICAgICAgLT4gcmVwbHlf YWNrIGRvX3dyaXRlCiAJfCBYZW5idXMuWGIuT3AuTWtkaXIgICAgICAgICAgICAgLT4gcmVwbHlf YWNrIGRvX21rZGlyCiAJfCBYZW5idXMuWGIuT3AuUm0gICAgICAgICAgICAgICAgLT4gcmVwbHlf YWNrIGRvX3JtCiAJfCBYZW5idXMuWGIuT3AuU2V0cGVybXMgICAgICAgICAgLT4gcmVwbHlfYWNr IGRvX3NldHBlcm1zCi0JfCBYZW5idXMuWGIuT3AuSXNpbnRyb2R1Y2VkICAgICAgLT4gcmVwbHlf ZGF0YSBkb19pc2ludHJvZHVjZWQKLQl8IFhlbmJ1cy5YYi5PcC5SZXN1bWUgICAgICAgICAgICAt PiByZXBseV9hY2sgZG9fcmVzdW1lCi0JfCBYZW5idXMuWGIuT3AuU2V0X3RhcmdldCAgICAgICAg LT4gcmVwbHlfYWNrIGRvX3NldF90YXJnZXQKLQl8IFhlbmJ1cy5YYi5PcC5SZXN0cmljdCAgICAg ICAgICAtPiByZXBseV9hY2sgZG9fcmVzdHJpY3QKLQl8IFhlbmJ1cy5YYi5PcC5SZXNldF93YXRj aGVzICAgICAtPiByZXBseV9hY2sgZG9fcmVzZXRfd2F0Y2hlcwotCXwgWGVuYnVzLlhiLk9wLklu dmFsaWQgICAgICAgICAgIC0+IHJlcGx5X2FjayBkb19lcnJvcgogCXwgXyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+IHJlcGx5X2FjayBkb19lcnJvcgogCiBsZXQgaW5wdXRfaGFuZGxl X2Vycm9yIH5jb25zIH5kb21zIH5mY3QgfmNvbiB+dCB+cmVxID0KQEAgLTM2Nyw2ICsyODEsMTEx IEBAIGxldCBpbnB1dF9oYW5kbGVfZXJyb3IgfmNvbnMgfmRvbXMgfmZjdCB+Y29uIH50IH5yZXEg PQogCXwgKEZhaWx1cmUgImludF9vZl9zdHJpbmciKSAgICAtPiByZXBseV9lcnJvciAiRUlOVkFM IgogCXwgRGVmaW5lLlVua25vd25fb3BlcmF0aW9uICAgICAtPiByZXBseV9lcnJvciAiRU5PU1lT IgogCitsZXQgZG9fd2F0Y2ggY29uIHQgZG9tYWlucyBjb25zIGRhdGEgPQorCWxldCAobm9kZSwg dG9rZW4pID0gCisJCW1hdGNoIChzcGxpdCBOb25lICdcMDAwJyBkYXRhKSB3aXRoCisJCXwgW25v ZGU7IHRva2VuOyAiIl0gICAtPiBub2RlLCB0b2tlbgorCQl8IF8gICAgICAgICAgICAgICAgICAg LT4gcmFpc2UgSW52YWxpZF9DbWRfQXJncworCQlpbgorCWxldCB3YXRjaCA9IENvbm5lY3Rpb25z LmFkZF93YXRjaCBjb25zIGNvbiBub2RlIHRva2VuIGluCisJUGFja2V0LkFjayAoZnVuICgpIC0+ IENvbm5lY3Rpb24uZmlyZV9zaW5nbGVfd2F0Y2ggd2F0Y2gpCisKK2xldCBkb191bndhdGNoIGNv biB0IGRvbWFpbnMgY29ucyBkYXRhID0KKwlsZXQgKG5vZGUsIHRva2VuKSA9CisJCW1hdGNoIChz cGxpdCBOb25lICdcMDAwJyBkYXRhKSB3aXRoCisJCXwgW25vZGU7IHRva2VuOyAiIl0gICAtPiBu b2RlLCB0b2tlbgorCQl8IF8gICAgICAgICAgICAgICAgICAgLT4gcmFpc2UgSW52YWxpZF9DbWRf QXJncworCQlpbgorCUNvbm5lY3Rpb25zLmRlbF93YXRjaCBjb25zIGNvbiBub2RlIHRva2VuCisK K2xldCBkb190cmFuc2FjdGlvbl9zdGFydCBjb24gdCBkb21haW5zIGNvbnMgZGF0YSA9CisJaWYg VHJhbnNhY3Rpb24uZ2V0X2lkIHQgPD4gVHJhbnNhY3Rpb24ubm9uZSB0aGVuCisJCXJhaXNlIFRy YW5zYWN0aW9uX25lc3RlZDsKKwlsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5nZXRfc3RvcmUgdCBp bgorCXN0cmluZ19vZl9pbnQgKENvbm5lY3Rpb24uc3RhcnRfdHJhbnNhY3Rpb24gY29uIHN0b3Jl KSBeICJcMDAwIgorCitsZXQgZG9fdHJhbnNhY3Rpb25fZW5kIGNvbiB0IGRvbWFpbnMgY29ucyBk YXRhID0KKwlsZXQgY29tbWl0ID0KKwkJbWF0Y2ggKHNwbGl0IE5vbmUgJ1wwMDAnIGRhdGEpIHdp dGgKKwkJfCAiVCIgOjogXyAtPiB0cnVlCisJCXwgIkYiIDo6IF8gLT4gZmFsc2UKKwkJfCB4IDo6 IF8gICAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCB4KQorCQl8IF8gICAgICAgIC0+IHJhaXNl IEludmFsaWRfQ21kX0FyZ3MKKwkJaW4KKwlsZXQgc3VjY2VzcyA9CisJCUNvbm5lY3Rpb24uZW5k X3RyYW5zYWN0aW9uIGNvbiAoVHJhbnNhY3Rpb24uZ2V0X2lkIHQpIGNvbW1pdCBpbgorCWlmIG5v dCBzdWNjZXNzIHRoZW4KKwkJcmFpc2UgVHJhbnNhY3Rpb25fYWdhaW47CisJaWYgY29tbWl0IHRo ZW4KKwkJcHJvY2Vzc193YXRjaCAoTGlzdC5yZXYgKFRyYW5zYWN0aW9uLmdldF9wYXRocyB0KSkg Y29ucworCitsZXQgZG9faW50cm9kdWNlIGNvbiB0IGRvbWFpbnMgY29ucyBkYXRhID0KKwlpZiBu b3QgKENvbm5lY3Rpb24uaXNfZG9tMCBjb24pCisJdGhlbiByYWlzZSBEZWZpbmUuUGVybWlzc2lv bl9kZW5pZWQ7CisJbGV0IChkb21pZCwgbWZuLCBwb3J0KSA9CisJCW1hdGNoIChzcGxpdCBOb25l ICdcMDAwJyBkYXRhKSB3aXRoCisJCXwgZG9taWQgOjogbWZuIDo6IHBvcnQgOjogXyAtPgorCQkJ aW50X29mX3N0cmluZyBkb21pZCwgTmF0aXZlaW50Lm9mX3N0cmluZyBtZm4sIGludF9vZl9zdHJp bmcgcG9ydAorCQl8IF8gICAgICAgICAgICAgICAgICAgICAgICAgLT4gcmFpc2UgSW52YWxpZF9D bWRfQXJnczsKKwkJaW4KKwlsZXQgZG9tID0KKwkJaWYgRG9tYWlucy5leGlzdCBkb21haW5zIGRv bWlkIHRoZW4KKwkJCURvbWFpbnMuZmluZCBkb21haW5zIGRvbWlkCisJCWVsc2UgdHJ5CisJCQls ZXQgbmRvbSA9IFhlbmN0cmwud2l0aF9pbnRmIChmdW4geGMgLT4KKwkJCQlEb21haW5zLmNyZWF0 ZSB4YyBkb21haW5zIGRvbWlkIG1mbiBwb3J0KSBpbgorCQkJQ29ubmVjdGlvbnMuYWRkX2RvbWFp biBjb25zIG5kb207CisJCQlDb25uZWN0aW9ucy5maXJlX3NwZWNfd2F0Y2hlcyBjb25zICJAaW50 cm9kdWNlRG9tYWluIjsKKwkJCW5kb20KKwkJd2l0aCBfIC0+IHJhaXNlIEludmFsaWRfQ21kX0Fy Z3MKKwlpbgorCWlmIChEb21haW4uZ2V0X3JlbW90ZV9wb3J0IGRvbSkgPD4gcG9ydCB8fCAoRG9t YWluLmdldF9tZm4gZG9tKSA8PiBtZm4gdGhlbgorCQlyYWlzZSBEb21haW5fbm90X21hdGNoCisK K2xldCBkb19yZWxlYXNlIGNvbiB0IGRvbWFpbnMgY29ucyBkYXRhID0KKwlpZiBub3QgKENvbm5l Y3Rpb24uaXNfZG9tMCBjb24pCisJdGhlbiByYWlzZSBEZWZpbmUuUGVybWlzc2lvbl9kZW5pZWQ7 CisJbGV0IGRvbWlkID0KKwkJbWF0Y2ggKHNwbGl0IE5vbmUgJ1wwMDAnIGRhdGEpIHdpdGgKKwkJ fCBbZG9taWQ7IiJdIC0+IGludF9vZl9zdHJpbmcgZG9taWQKKwkJfCBfICAgICAgICAgIC0+IHJh aXNlIEludmFsaWRfQ21kX0FyZ3MKKwkJaW4KKwlsZXQgZmlyZV9zcGVjX3dhdGNoZXMgPSBEb21h aW5zLmV4aXN0IGRvbWFpbnMgZG9taWQgaW4KKwlEb21haW5zLmRlbCBkb21haW5zIGRvbWlkOwor CUNvbm5lY3Rpb25zLmRlbF9kb21haW4gY29ucyBkb21pZDsKKwlpZiBmaXJlX3NwZWNfd2F0Y2hl cyAKKwl0aGVuIENvbm5lY3Rpb25zLmZpcmVfc3BlY193YXRjaGVzIGNvbnMgIkByZWxlYXNlRG9t YWluIgorCWVsc2UgcmFpc2UgSW52YWxpZF9DbWRfQXJncworCitsZXQgZG9fcmVzdW1lIGNvbiB0 IGRvbWFpbnMgY29ucyBkYXRhID0KKwlpZiBub3QgKENvbm5lY3Rpb24uaXNfZG9tMCBjb24pCisJ dGhlbiByYWlzZSBEZWZpbmUuUGVybWlzc2lvbl9kZW5pZWQ7CisJbGV0IGRvbWlkID0KKwkJbWF0 Y2ggKHNwbGl0IE5vbmUgJ1wwMDAnIGRhdGEpIHdpdGgKKwkJfCBkb21pZCA6OiBfIC0+IGludF9v Zl9zdHJpbmcgZG9taWQKKwkJfCBfICAgICAgICAgIC0+IHJhaXNlIEludmFsaWRfQ21kX0FyZ3MK KwkJaW4KKwlpZiBEb21haW5zLmV4aXN0IGRvbWFpbnMgZG9taWQKKwl0aGVuIERvbWFpbnMucmVz dW1lIGRvbWFpbnMgZG9taWQKKwllbHNlIHJhaXNlIEludmFsaWRfQ21kX0FyZ3MKKworbGV0IGZ1 bmN0aW9uX29mX3R5cGUgdHkgPQorCW1hdGNoIHR5IHdpdGgKKwl8IFhlbmJ1cy5YYi5PcC5EZWJ1 ZyAgICAgICAgICAgICAtPiByZXBseV9kYXRhX29yX2FjayBkb19kZWJ1ZworCXwgWGVuYnVzLlhi Lk9wLldhdGNoICAgICAgICAgICAgIC0+IHJlcGx5X25vbmUgZG9fd2F0Y2gKKwl8IFhlbmJ1cy5Y Yi5PcC5VbndhdGNoICAgICAgICAgICAtPiByZXBseV9hY2sgZG9fdW53YXRjaAorCXwgWGVuYnVz LlhiLk9wLlRyYW5zYWN0aW9uX3N0YXJ0IC0+IHJlcGx5X2RhdGEgZG9fdHJhbnNhY3Rpb25fc3Rh cnQKKwl8IFhlbmJ1cy5YYi5PcC5UcmFuc2FjdGlvbl9lbmQgICAtPiByZXBseV9hY2sgZG9fdHJh bnNhY3Rpb25fZW5kCisJfCBYZW5idXMuWGIuT3AuSW50cm9kdWNlICAgICAgICAgLT4gcmVwbHlf YWNrIGRvX2ludHJvZHVjZQorCXwgWGVuYnVzLlhiLk9wLlJlbGVhc2UgICAgICAgICAgIC0+IHJl cGx5X2FjayBkb19yZWxlYXNlCisJfCBYZW5idXMuWGIuT3AuSXNpbnRyb2R1Y2VkICAgICAgLT4g cmVwbHlfZGF0YSBkb19pc2ludHJvZHVjZWQKKwl8IFhlbmJ1cy5YYi5PcC5SZXN1bWUgICAgICAg ICAgICAtPiByZXBseV9hY2sgZG9fcmVzdW1lCisJfCBYZW5idXMuWGIuT3AuU2V0X3RhcmdldCAg ICAgICAgLT4gcmVwbHlfYWNrIGRvX3NldF90YXJnZXQKKwl8IFhlbmJ1cy5YYi5PcC5SZXN0cmlj dCAgICAgICAgICAtPiByZXBseV9hY2sgZG9fcmVzdHJpY3QKKwl8IFhlbmJ1cy5YYi5PcC5SZXNl dF93YXRjaGVzICAgICAtPiByZXBseV9hY2sgZG9fcmVzZXRfd2F0Y2hlcworCXwgWGVuYnVzLlhi Lk9wLkludmFsaWQgICAgICAgICAgIC0+IHJlcGx5X2FjayBkb19lcnJvcgorCXwgXyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+IGZ1bmN0aW9uX29mX3R5cGVfc2ltcGxlX29wIHR5CisK ICgqKgogICogTm90aHJvdyBndWFyYW50ZWUuCiAgKikKLS0gCjEuNy4xMC40CgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2 ZWwK