From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luis R. Rodriguez" Subject: [PATCH v6 07/13] tools/xendomains: move to libexec and use a smaller init helper Date: Thu, 12 Jun 2014 18:18:45 -0700 Message-ID: <1402622331-4282-8-git-send-email-mcgrof@do-not-panic.com> References: <1402622331-4282-1-git-send-email-mcgrof@do-not-panic.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.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WvG9T-00017s-LS for xen-devel@lists.xenproject.org; Fri, 13 Jun 2014 01:19:31 +0000 Received: by mail-pb0-f45.google.com with SMTP id um1so1599893pbc.32 for ; Thu, 12 Jun 2014 18:19:26 -0700 (PDT) In-Reply-To: <1402622331-4282-1-git-send-email-mcgrof@do-not-panic.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Ian Campbell , Stefano Stabellini , "Luis R. Rodriguez" , =?UTF-8?q?Jan=20R=C4=99korajski?= , Ian Jackson , Jacek Konieczny , M A Young List-Id: xen-devel@lists.xenproject.org RnJvbTogIkx1aXMgUi4gUm9kcmlndWV6IiA8bWNncm9mQHN1c2UuY29tPgoKVGhlIHhlbmRvbWFp bnMgc2NyaXB0IGNhbiBiZSByZXVzZWQgd2l0aCBzeXN0ZW1kIHN5c3RlbXMgYXMgaXQKZG9lcyBu b3QgY29udHJvbCBzZXJ2aWNlcyBvciBzb2NrZXRzIHBlciBzZSwgYnV0IGRvZXMgYSBvbmUgc2hv dApzY3JhcGUgb2YgZG9tVXMgaXQgbmVlZHMgc3RhcnQgYnJpbmcgdXAsIHN0b3AsIHJlbG9hZCBz byB3ZSdyZQpnb2luZyB0byByZXVzZSBpdC4gVGhpcyBtb3ZlcyB0aGUgY29yZSBvZiB0aGUgc2Ny aXB0IHRvIGxpYmV4ZWMKYW5kIGxlYXZlcyBvbmx5IGEgaGVscGVyIG9uIGluaXQuCgpDYzogSWFu IEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBTdGVmYW5vIFN0YWJlbGxp bmkgPHN0ZWZhbm8uc3RhYmVsbGluaUBldS5jaXRyaXguY29tPgpDYzogSWFuIENhbXBiZWxsIDxp YW4uY2FtcGJlbGxAY2l0cml4LmNvbT4KQ2M6IEphbiBSxJlrb3JhanNraSA8YmFnZ2luc0BwbGQt bGludXgub3JnPgpDYzogTSBBIFlvdW5nIDxtLmEueW91bmdAZHVyaGFtLmFjLnVrPgpDYzogSmFj ZWsgS29uaWVjem55IDxqYWpjdXNAamFqY3VzLm5ldD4KQ2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5w cm9qZWN0Lm9yZwpTaWduZWQtb2ZmLWJ5OiBMdWlzIFIuIFJvZHJpZ3VleiA8bWNncm9mQHN1c2Uu Y29tPgotLS0KIHRvb2xzL2hvdHBsdWcvTGludXgvTWFrZWZpbGUgICAgICAgICAgfCAgIDMgKwog dG9vbHMvaG90cGx1Zy9MaW51eC9pbml0LmQveGVuZG9tYWlucyB8IDU2NiArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogdG9vbHMvaG90cGx1Zy9MaW51eC94ZW5kb21haW5zICAgICAg ICB8IDU4NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5n ZWQsIDYwMyBpbnNlcnRpb25zKCspLCA1NTAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgdG9vbHMvaG90cGx1Zy9MaW51eC94ZW5kb21haW5zCgpkaWZmIC0tZ2l0IGEvdG9vbHMvaG90 cGx1Zy9MaW51eC9NYWtlZmlsZSBiL3Rvb2xzL2hvdHBsdWcvTGludXgvTWFrZWZpbGUKaW5kZXgg NDg3NGVjNS4uZDVkZTllNiAxMDA2NDQKLS0tIGEvdG9vbHMvaG90cGx1Zy9MaW51eC9NYWtlZmls ZQorKysgYi90b29scy9ob3RwbHVnL0xpbnV4L01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQCBpbmNs dWRlICQoWEVOX1JPT1QpL3Rvb2xzL1J1bGVzLm1rCiAKICMgSW5pdCBzY3JpcHRzLgogWEVORE9N QUlOU19JTklURCA9IGluaXQuZC94ZW5kb21haW5zCitYRU5ET01BSU5TX0xJQkVYRUMgPSB4ZW5k b21haW5zCiBYRU5ET01BSU5TX1NZU0NPTkZJRyA9IGluaXQuZC9zeXNjb25maWcueGVuZG9tYWlu cwogCiBYRU5DT01NT05TX0lOSVREID0gaW5pdC5kL3hlbmNvbW1vbnMKQEAgLTQ1LDYgKzQ2LDgg QEAgaW5zdGFsbDogYWxsIGluc3RhbGwtaW5pdGQgaW5zdGFsbC1zY3JpcHRzIGluc3RhbGwtdWRl dgogaW5zdGFsbC1pbml0ZDoKIAlbIC1kICQoREVTVERJUikkKElOSVREX0RJUikgXSB8fCAkKElO U1RBTExfRElSKSAkKERFU1RESVIpJChJTklURF9ESVIpCiAJWyAtZCAkKERFU1RESVIpJChTWVND T05GSUdfRElSKSBdIHx8ICQoSU5TVEFMTF9ESVIpICQoREVTVERJUikkKFNZU0NPTkZJR19ESVIp CisJWyAtZCAkKERFU1RESVIpJChMSUJFWEVDKSBdIHx8ICQoSU5TVEFMTF9ESVIpICQoREVTVERJ UikkKExJQkVYRUMpCisJJChJTlNUQUxMX1BST0cpICQoWEVORE9NQUlOU19MSUJFWEVDKSAkKERF U1RESVIpJChMSUJFWEVDKQogCSQoSU5TVEFMTF9QUk9HKSAkKFhFTkRPTUFJTlNfSU5JVEQpICQo REVTVERJUikkKElOSVREX0RJUikKIAkkKElOU1RBTExfREFUQSkgJChYRU5ET01BSU5TX1NZU0NP TkZJRykgJChERVNURElSKSQoU1lTQ09ORklHX0RJUikveGVuZG9tYWlucwogCSQoSU5TVEFMTF9Q Uk9HKSAkKFhFTkNPTU1PTlNfSU5JVEQpICQoREVTVERJUikkKElOSVREX0RJUikKZGlmZiAtLWdp dCBhL3Rvb2xzL2hvdHBsdWcvTGludXgvaW5pdC5kL3hlbmRvbWFpbnMgYi90b29scy9ob3RwbHVn L0xpbnV4L2luaXQuZC94ZW5kb21haW5zCmluZGV4IGNhZDkyZGEuLmQwMTIyZmMgMTAwNjQ0Ci0t LSBhL3Rvb2xzL2hvdHBsdWcvTGludXgvaW5pdC5kL3hlbmRvbWFpbnMKKysrIGIvdG9vbHMvaG90 cGx1Zy9MaW51eC9pbml0LmQveGVuZG9tYWlucwpAQCAtMSwxOCArMSwxMyBAQAogIyEvYmluL2Jh c2gKICMKICMgL2V0Yy9pbml0LmQveGVuZG9tYWlucwotIyBTdGFydCAvIHN0b3AgZG9tYWlucyBh dXRvbWF0aWNhbGx5IHdoZW4gZG9tYWluIDAgYm9vdHMgLyBzaHV0cyBkb3duLgorIyBXcmFwcGVy IHRvIHN0YXJ0IC8gc3RvcCBkb21haW5zIGF1dG9tYXRpY2FsbHkgd2hlbiBkb21haW4gMCBib290 cyAvIHNodXRzIGRvd24KICMKICMgY2hrY29uZmlnOiAzNDUgOTkgMDAKLSMgZGVzY3JpcHRpb246 IFN0YXJ0IC8gc3RvcCBYZW4gZG9tYWlucy4KKyMgZGVzY3JpcHRpb246IEhlbHBlciB0byBzdGFy dCAvIHN0b3AgWGVuIGRvbWFpbnMuCiAjCi0jIFRoaXMgc2NyaXB0IG9mZmVycyBmYWlybHkgYmFz aWMgZnVuY3Rpb25hbGl0eS4gIEl0IHNob3VsZCB3b3JrIG9uIFJlZGhhdAotIyBidXQgYWxzbyBv biBMU0ItY29tcGxpYW50IFN1U0UgcmVsZWFzZXMgYW5kIG9uIERlYmlhbiB3aXRoIHRoZSBMU0Ig cGFja2FnZQotIyBpbnN0YWxsZWQuICAoTFNCIGlzIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlKQot IwotIyBCYXNlZCBvbiB0aGUgZXhhbXBsZSBpbiB0aGUgIkRlc2lnbmluZyBIaWdoIFF1YWxpdHkg SW50ZWdyYXRlZCBMaW51eAotIyBBcHBsaWNhdGlvbnMgSE9XVE8iIGJ5IEF2aSBBbGthbGF5Ci0j IDxodHRwOi8vd3d3LnRsZHAub3JnL0hPV1RPL0hpZ2hRdWFsaXR5LUFwcHMtSE9XVE8vPgorIyBU aGlzIHNjcmlwdCBpcyBhIHdyYXBwZXIgaW5pdCBoZWxwZXIgZm9yIHRoZSByZWFsIHdvcmtsb2Fk IGhvcnNlIHNjcmlwdC4KKyMgSXQgc2hvdWxkIHdvcmsgb24gTFNCLWNvbXBsaWFudCBzeXN0ZW1z LgogIwogIyMjIEJFR0lOIElOSVQgSU5GTwogIyBQcm92aWRlczogICAgICAgICAgeGVuZG9tYWlu cwpAQCAtMjIsNTYzICsxNywzNCBAQAogIyBTaG91bGQtU3RvcDogICAgICAgeGVuZAogIyBEZWZh dWx0LVN0YXJ0OiAgICAgMiAzIDUKICMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2Ci0jIFNob3J0 LURlc2NyaXB0aW9uOiBTdGFydC9zdG9wIHNlY29uZGFyeSB4ZW4gZG9tYWlucwotIyBEZXNjcmlw dGlvbjogICAgICAgU3RhcnQgLyBzdG9wIGRvbWFpbnMgYXV0b21hdGljYWxseSB3aGVuIGRvbWFp biAwCi0jICAgICAgICAgICAgICAgICAgICBib290cyAvIHNodXRzIGRvd24uCisjIFNob3J0LURl c2NyaXB0aW9uOiBXcmFwcGVyIHRvIHN0YXJ0L3N0b3Agc2Vjb25kYXJ5IHhlbiBkb21haW5zCisj IERlc2NyaXB0aW9uOiAgICAgICBXcmFwcGVyIGZvciBzdGFydGluZyAvIHN0b3BwaW5nIGRvbWFp bnMgYXV0b21hdGljYWxseQorIyAgICAgICAgICAgICAgICAgICAgd2hlbiBkb21haW4gMCBib290 cyAvIHNodXRzIGRvd24gb24gc3lzdGVtcyB1c2luZyBpbml0LgorIyAgICAgICAgICAgICAgICAg ICAgVGhlICRTQklORElSL3hlbmRvbWFpbnMgaGVscGVyIGlzIHNoYXJlZCBiZXR3ZWVuIGluaXQg YW5kCisjICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kIHN5c3RlbXMuCiAjIyMgRU5EIElOSVQg SU5GTwogCiAuIC9ldGMveGVuL3NjcmlwdHMvaG90cGx1Z3BhdGguc2gKIAotQ01EPSR7U0JJTkRJ Un0veGwKLUhFQURDT01QPSJYZW4gc2F2ZWQgZG9tYWluIgotJENNRCBsaXN0ICY+IC9kZXYvbnVs bAotaWYgdGVzdCAkPyAtbmUgMAotdGhlbgotCWV4aXQgJD8KLWZpCi0KLSRDTUQgbGlzdCAmPiAv ZGV2L251bGwKLWlmIHRlc3QgJD8gLW5lIDAKLXRoZW4KLQlleGl0IDA7Ci1maQotCi0jIENvcnJl Y3QgZXhpdCBjb2RlIHdvdWxkIHByb2JhYmx5IGJlIDUsIGJ1dCBpdCdzIGVub3VnaAotIyBpZiB4 ZW5kIGNvbXBsYWlucyBpZiB3ZSdyZSBub3QgcnVubmluZyBhcyBwcml2aWxlZ2VkIGRvbWFpbgot aWYgISBbIC1lIC9wcm9jL3hlbi9wcml2Y21kIF07IHRoZW4KLQlleGl0IDAKLWZpCi0KLSMgU2Vl IGRvY3MvbWlzYy9kaXN0cm9fbWFwcGluZy50eHQKLWlmIFsgLWQgL3Zhci9sb2NrL3N1YnN5cyBd OyB0aGVuCi0JTE9DS0ZJTEU9L3Zhci9sb2NrL3N1YnN5cy94ZW5kb21haW5zCi1lbHNlCi0JTE9D S0ZJTEU9L3Zhci9sb2NrL3hlbmRvbWFpbnMKLWZpCi0KLWlmIFsgLWQgL2V0Yy9zeXNjb25maWcg XTsgdGhlbgotCVhFTkRPTV9DT05GSUc9L2V0Yy9zeXNjb25maWcveGVuZG9tYWlucwotZWxzZQot CVhFTkRPTV9DT05GSUc9L2V0Yy9kZWZhdWx0L3hlbmRvbWFpbnMKLWZpCi0KLXRlc3QgLXIgJFhF TkRPTV9DT05GSUcgfHwgeyBlY2hvICIkWEVORE9NX0NPTkZJRyBub3QgZXhpc3RpbmciOwotCWlm IFsgIiQxIiA9ICJzdG9wIiBdOyB0aGVuIGV4aXQgMDsKLQllbHNlIGV4aXQgNjsgZmk7IH0KLQot LiAkWEVORE9NX0NPTkZJRwotCi0jIFVzZSB0aGUgU1VTRSByY18gaW5pdCBzY3JpcHQgZnVuY3Rp b25zOwotIyBlbXVsYXRlIHRoZW0gb24gTFNCLCBSSCBhbmQgb3RoZXIgc3lzdGVtcwotaWYgdGVz dCAtZSAvZXRjL3JjLnN0YXR1czsgdGhlbgotICAgICMgU1VTRSByYyBzY3JpcHQgbGlicmFyeQot ICAgIC4gL2V0Yy9yYy5zdGF0dXMKLWVsc2UKLSAgICBfY21kPSQxCi0gICAgZGVjbGFyZSAtYSBf U01TRwotICAgIGlmIHRlc3QgIiR7X2NtZH0iID0gInN0YXR1cyI7IHRoZW4KLQlfU01TRz0ocnVu bmluZyBkZWFkIGRlYWQgdW51c2VkIHVua25vd24pCi0JX1JDX1VOVVNFRD0zCi0gICAgZWxzZQot CV9TTVNHPShkb25lIGZhaWxlZCBmYWlsZWQgbWlzc2VkIGZhaWxlZCBza2lwcGVkIHVudXNlZCBm YWlsZWQgZmFpbGVkKQotCV9SQ19VTlVTRUQ9NgotICAgIGZpCi0gICAgaWYgdGVzdCAtZSAvZXRj L2luaXQuZC9mdW5jdGlvbnM7IHRoZW4KLQkjIFJFREhBVAotCS4gL2V0Yy9pbml0LmQvZnVuY3Rp b25zCi0JZWNob19yYygpCi0JewotCSAgICAjZWNobyAtbiAiICBbJHtfU01TR1ske19SQ19SVn1d fV0gIgotCSAgICBpZiB0ZXN0ICR7X1JDX1JWfSA9IDA7IHRoZW4KLQkJc3VjY2VzcyAiICBbJHtf U01TR1ske19SQ19SVn1dfV0gIgotCSAgICBlbHNlCi0JCWZhaWx1cmUgIiAgWyR7X1NNU0dbJHtf UkNfUlZ9XX1dICIKLQkgICAgZmkKLQl9Ci0gICAgZWxpZiB0ZXN0IC1lIC9saWIvbHNiL2luaXQt ZnVuY3Rpb25zOyB0aGVuCi0JIyBMU0IKLSAgICAJLiAvbGliL2xzYi9pbml0LWZ1bmN0aW9ucwot ICAgICAgICBpZiBhbGlhcyBsb2dfc3VjY2Vzc19tc2cgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsg dGhlbgotCSAgZWNob19yYygpCi0JICB7Ci0JICAgICAgIGVjaG8gIiAgWyR7X1NNU0dbJHtfUkNf UlZ9XX1dICIKLQkgIH0KLSAgICAgICAgZWxzZQotCSAgZWNob19yYygpCi0JICB7Ci0JICAgIGlm IHRlc3QgJHtfUkNfUlZ9ID0gMDsgdGhlbgotCQlsb2dfc3VjY2Vzc19tc2cgIiAgWyR7X1NNU0db JHtfUkNfUlZ9XX1dICIKLQkgICAgZWxzZQotCQlsb2dfZmFpbHVyZV9tc2cgIiAgWyR7X1NNU0db JHtfUkNfUlZ9XX1dICIKLQkgICAgZmkKLQkgIH0KLSAgICAgICAgZmkKLSAgICBlbHNlCi0JIyBl bXVsYXRlIGl0Ci0JZWNob19yYygpCi0JewotCSAgICBlY2hvICIgIFske19TTVNHWyR7X1JDX1JW fV19XSAiCi0JfQotICAgIGZpCi0gICAgcmNfcmVzZXQoKSB7IF9SQ19SVj0wOyB9Ci0gICAgcmNf ZmFpbGVkKCkKLSAgICB7Ci0JaWYgdGVzdCAteiAiJDEiOyB0aGVuCi0JICAgIF9SQ19SVj0xOwot CWVsaWYgdGVzdCAiJDEiICE9ICIwIjsgdGhlbgotCSAgICBfUkNfUlY9JDE7Ci0JZmkKLQlyZXR1 cm4gJHtfUkNfUlZ9Ci0gICAgfQotICAgIHJjX2NoZWNrKCkKLSAgICB7Ci0JcmV0dXJuIHJjX2Zh aWxlZCAkPwotICAgIH0KLSAgICByY19zdGF0dXMoKQotICAgIHsKLQlyY19mYWlsZWQgJD8KLQlp ZiB0ZXN0ICIkMSIgPSAiLXIiOyB0aGVuIF9SQ19SVj0wOyBzaGlmdDsgZmkKLQlpZiB0ZXN0ICIk MSIgPSAiLXMiOyB0aGVuIHJjX2ZhaWxlZCA1OyBlY2hvX3JjOyByY19mYWlsZWQgMzsgc2hpZnQ7 IGZpCi0JaWYgdGVzdCAiJDEiID0gIi11IjsgdGhlbiByY19mYWlsZWQgJHtfUkNfVU5VU0VEfTsg ZWNob19yYzsgcmNfZmFpbGVkIDM7IHNoaWZ0OyBmaQotCWlmIHRlc3QgIiQxIiA9ICItdiI7IHRo ZW4gZWNob19yYzsgc2hpZnQ7IGZpCi0JaWYgdGVzdCAiJDEiID0gIi1yIjsgdGhlbiBfUkNfUlY9 MDsgc2hpZnQ7IGZpCi0JcmV0dXJuICR7X1JDX1JWfQotICAgIH0KLSAgICByY19leGl0KCkgeyBl eGl0ICR7X1JDX1JWfTsgfQotICAgIHJjX2FjdGl2ZSgpCi0gICAgewotCWlmIHRlc3QgLXogIiRS VU5MRVZFTCI7IHRoZW4gcmVhZCBSVU5MRVZFTCBSRVNUIDwgPCgvc2Jpbi9ydW5sZXZlbCk7IGZp Ci0JaWYgdGVzdCAtZSAvZXRjL2luaXQuZC9TWzAtOV1bMC05XSR7MX07IHRoZW4gcmV0dXJuIDA7 IGZpCi0JcmV0dXJuIDEKLSAgICB9Ci1maQotCi1pZiAhIHdoaWNoIHVzbGVlcCA+Ji9kZXYvbnVs bAotdGhlbgotICB1c2xlZXAoKQotICB7Ci0gICAgaWYgWyAtbiAiJDEiIF0KLSAgICB0aGVuCi0g ICAgICBzbGVlcCAkKCggJDEgLyAxMDAwMDAwICkpCi0gICAgZmkKLSAgfQotZmkKLQotIyBSZXNl dCBzdGF0dXMgb2YgdGhpcyBzZXJ2aWNlCi1yY19yZXNldAotCi0jIwotIyBSZXR1cm5zIDAgKHN1 Y2Nlc3MpIGlmIHRoZSBnaXZlbiBwYXJhbWV0ZXIgbmFtZXMgYSBkaXJlY3RvcnksIGFuZCB0aGF0 Ci0jIGRpcmVjdG9yeSBpcyBub3QgZW1wdHkuCi0jCi1jb250YWluc19zb21ldGhpbmcoKQotewot ICBpZiBbIC1kICIkMSIgXSAmJiBbIGAvYmluL2xzICQxIHwgd2MgLWxgIC1ndCAwIF0KLSAgdGhl bgotICAgIHJldHVybiAwCi0gIGVsc2UKLSAgICByZXR1cm4gMQotICBmaQotfQotCi0jIHJlYWQg bmFtZSBmcm9tIHhlbiBjb25maWcgZmlsZQotcmRuYW1lKCkKLXsKLSAgICBOTT0kKCRDTUQgY3Jl YXRlIC0tcXVpZXQgLS1kcnlydW4gLS1kZWZjb25maWcgIiQxIiB8Ci0gICAgICAgICBzZWQgLW4g J3MvXi4qKG5hbWUgXCguKlwpKSQvXDEvcDtzL14uKiJuYW1lIjogIlwoLipcKSIsJC9cMS9wJykK LX0KLQotcmRuYW1lcygpCi17Ci0gICAgTkFNRVM9Ci0gICAgaWYgISBjb250YWluc19zb21ldGhp bmcgIiRYRU5ET01BSU5TX0FVVE8iCi0gICAgdGhlbgotCXJldHVybgotICAgIGZpCi0gICAgZm9y IGRvbSBpbiAkWEVORE9NQUlOU19BVVRPLyo7IGRvCi0JcmRuYW1lICRkb20KLQlpZiB0ZXN0IC16 ICROQU1FUzsgdGhlbgotCSAgICBOQU1FUz0kTk07Ci0JZWxzZQotCSAgICBOQU1FUz0iJE5BTUVT fCROTSIKLQlmaQotICAgIGRvbmUKLX0KLQotTElTVF9HUkVQPScoZG9tYWluXHwoZG9taWRcfChu YW1lXHxeICAgIHskXHwibmFtZSI6XHwiZG9taWQiOicKLXBhcnNlbG4oKQotewotICAgIGlmIFtb ICIkMSIgPX4gJyhkb21haW4nIF1dIHx8IFtbICIkMSIgPSAieyIgXV07IHRoZW4KLSAgICAgICAg bmFtZT07aWQ9Ci0gICAgZWxpZiBbWyAiJDEiID1+ICcobmFtZScgXV07IHRoZW4KLSAgICAgICAg bmFtZT0kKGVjaG8gJDEgfCBzZWQgLWUgJ3MvXi4qKG5hbWUgXCguKlwpKSQvXDEvJykKLSAgICBl bGlmIFtbICIkMSIgPX4gJyhkb21pZCcgXV07IHRoZW4KLSAgICAgICAgaWQ9JChlY2hvICQxIHwg c2VkIC1lICdzL14uKihkb21pZCBcKC4qXCkpJC9cMS8nKQotICAgIGVsaWYgW1sgIiQxIiA9fiAn Im5hbWUiOicgXV07IHRoZW4KLSAgICAgICAgbmFtZT0kKGVjaG8gJDEgfCBzZWQgLWUgJ3MvXi4q Im5hbWUiOiAiXCguKlwpIiwkL1wxLycpCi0gICAgZWxpZiBbWyAiJDEiID1+ICciZG9taWQiOicg XV07IHRoZW4KLSAgICAgICAgaWQ9JChlY2hvICQxIHwgc2VkIC1lICdzL14uKiJkb21pZCI6IFwo LipcKSwkL1wxLycpCi0gICAgZmkKLQotICAgIFsgLW4gIiRuYW1lIiAtYSAtbiAiJGlkIiBdICYm IHJldHVybiAwIHx8IHJldHVybiAxCi19Ci0KLWlzX3J1bm5pbmcoKQotewotICAgIHJkbmFtZSAk MQotICAgIFJDPTEKLSAgICBuYW1lPTtpZD0KLSAgICB3aGlsZSByZWFkIExOOyBkbwotCXBhcnNl bG4gIiRMTiIgfHwgY29udGludWUKLQlpZiB0ZXN0ICRpZCA9IDA7IHRoZW4gY29udGludWU7IGZp Ci0JY2FzZSAkbmFtZSBpbgotCSAgICAoJE5NKQotCQlSQz0wCi0JCTs7Ci0JZXNhYwotICAgIGRv bmUgPCA8KCRDTUQgbGlzdCAtbCB8IGdyZXAgIiRMSVNUX0dSRVAiKQotICAgIHJldHVybiAkUkMK LX0KLQotc3RhcnQoKQotewotICAgIGlmIFsgLWYgJExPQ0tGSUxFIF07IHRoZW4KLQllY2hvIC1l ICJ4ZW5kb21haW5zIGFscmVhZHkgcnVubmluZyAobG9ja2ZpbGUgZXhpc3RzKSIKLQlyZXR1cm47 Ci0gICAgZmkKLQotICAgIHNhdmVkX2RvbWFpbnM9IiAiCi0gICAgaWYgWyAiJFhFTkRPTUFJTlNf UkVTVE9SRSIgPSAidHJ1ZSIgXSAmJgotICAgICAgIGNvbnRhaW5zX3NvbWV0aGluZyAiJFhFTkRP TUFJTlNfU0FWRSIKLSAgICB0aGVuCi0JbWtkaXIgLXAgJChkaXJuYW1lICIkTE9DS0ZJTEUiKQot CXRvdWNoICRMT0NLRklMRQotCWVjaG8gLW4gIlJlc3RvcmluZyBYZW4gZG9tYWluczoiCi0Jc2F2 ZWRfZG9tYWlucz1gbHMgJFhFTkRPTUFJTlNfU0FWRWAKLSAgICAgICAgZm9yIGRvbSBpbiAkWEVO RE9NQUlOU19TQVZFLyo7IGRvCi0gICAgICAgICAgICBpZiBbIC1mICRkb20gXSA7IHRoZW4KLSAg ICAgICAgICAgICAgICBIRUFERVI9YGhlYWQgLWMgMTYgJGRvbSB8IGhlYWQgLW4gMSAyPiAvZGV2 L251bGxgCi0gICAgICAgICAgICAgICAgaWYgWyAiJEhFQURFUiIgPSAiJEhFQURDT01QIiBdOyB0 aGVuCi0gICAgICAgICAgICAgICAgICAgIGVjaG8gLW4gIiAke2RvbSMjKi99IgotICAgICAgICAg ICAgICAgICAgICBYTVI9YCRDTUQgcmVzdG9yZSAkZG9tIDI+JjEgMT4vZGV2L251bGxgCi0gICAg ICAgICAgICAgICAgICAgICMkQ01EIHJlc3RvcmUgJGRvbQotICAgICAgICAgICAgICAgICAgICBp ZiBbICQ/IC1uZSAwIF07IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gLWUgIlxu QW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzdG9yaW5nIGRvbWFpbiAke2RvbSMjKi99OlxuJFhN UiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjX2ZhaWxlZCAkPwotICAgICAgICAgICAgICAg ICAgICAgICAgZWNobyAtZSAnIScKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICAgICAgICAgICAgIyBtdiAkZG9tICR7ZG9tJS8qfS8uJHtkb20jIyovfQotICAgICAgICAg ICAgICAgICAgICAgICAgcm0gJGRvbQotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAg ICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICBkb25lCi0JZWNobyAtZQotICAgIGZp Ci0KLSAgICBpZiBjb250YWluc19zb21ldGhpbmcgIiRYRU5ET01BSU5TX0FVVE8iCi0gICAgdGhl bgotCXRvdWNoICRMT0NLRklMRQotCWVjaG8gLW4gIlN0YXJ0aW5nIGF1dG8gWGVuIGRvbWFpbnM6 IgotCSMgV2UgZXhwZWN0IGNvbmZpZyBzY3JpcHRzIGZvciBhdXRvIHN0YXJ0aW5nIGRvbWFpbnMg dG8gYmUgaW4KLQkjIFhFTkRPTUFJTlNfQVVUTyAtIHRoZXkgY291bGQganVzdCBiZSBzeW1saW5r cyB0byBmaWxlcyBlbHNld2hlcmUKLQotCSMgQ3JlYXRlIGFsbCBkb21haW5zIHdpdGggY29uZmln IGZpbGVzIGluIFhFTkRPTUFJTlNfQVVUTy4KLQkjIFRPRE86IFdlIHNob3VsZCByZWNvcmQgd2hp Y2ggZG9tYWluIG5hbWUgYmVsb25ncwotCSMgc28gd2UgaGF2ZSB0aGUgb3B0aW9uIHRvIHNlbGVj dGl2ZWx5IHNodXQgZG93biAvIG1pZ3JhdGUgbGF0ZXIKLQkjIElmIGEgZG9tYWluIHN0YXRlZmls ZSBmcm9tICRYRU5ET01BSU5TX1NBVkUgbWF0Y2hlcyBhIGRvbWFpbiBuYW1lCi0JIyBpbiAkWEVO RE9NQUlOU19BVVRPLCBkbyBub3QgdHJ5IHRvIHN0YXJ0IHRoYXQgZG9tYWluOyBpZiBpdCBkaWRu J3QKLQkjIHJlc3RvcmUgY29ycmVjdGx5IGl0IHJlcXVpcmVzIGFkbWluaXN0cmF0aXZlIGF0dGVu dGlvbi4KLQlmb3IgZG9tIGluICRYRU5ET01BSU5TX0FVVE8vKjsgZG8KLQkgICAgZWNobyAtbiAi ICR7ZG9tIyMqL30iCi0JICAgIHNob3J0ZG9tPSQoZWNobyAkZG9tIHwgc2VkIC1uICdzL14uKlwv XCguKlwpJC9cMS9wJykKLQkgICAgZWNobyAkc2F2ZWRfZG9tYWlucyB8IGdyZXAgLXcgJHNob3J0 ZG9tID4gL2Rldi9udWxsCi0JICAgIGlmIFsgJD8gLWVxIDAgXSB8fCBpc19ydW5uaW5nICRkb207 IHRoZW4KLQkJZWNobyAtbiAiKHNraXApIgotCSAgICBlbHNlCi0JCVhNQz1gJENNRCBjcmVhdGUg LS1xdWlldCAtLWRlZmNvbmZpZyAkZG9tYAotCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KLQkJICAg IGVjaG8gLWUgIlxuQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgZG9tYWluICR7ZG9t IyMqL306ICRYTUNcbiIKLQkJICAgIHJjX2ZhaWxlZCAkPwotCQkgICAgZWNobyAtZSAnIScKLQkJ ZWxzZQotCQkgICAgdXNsZWVwICRYRU5ET01BSU5TX0NSRUFURV9VU0xFRVAKLQkJZmkKLQkgICAg ZmkKLQlkb25lCi0gICAgZmkKLX0KLQotYWxsX3pvbWJpZXMoKQotewotICAgIG5hbWU9O2lkPQot ICAgIHdoaWxlIHJlYWQgTE47IGRvCi0JcGFyc2VsbiAiJExOIiB8fCBjb250aW51ZQotCWlmIHRl c3QgJGlkID0gMDsgdGhlbiBjb250aW51ZTsgZmkKLQlpZiB0ZXN0ICIkc3RhdGUiICE9ICItYi0t LWQiIC1hICIkc3RhdGUiICE9ICItLS0tLWQiOyB0aGVuCi0JICAgIHJldHVybiAxOwotCWZpCi0g ICAgZG9uZSA8IDwoJENNRCBsaXN0IC1sIHwgZ3JlcCAiJExJU1RfR1JFUCIpCi0gICAgcmV0dXJu IDAKLX0KLQotIyBXYWl0IGZvciBtYXggJFhFTkRPTUFJTlNfU1RPUF9NQVhXQUlUIGZvciAkQ01E ICQxIHRvIGZpbmlzaDsKLSMgaWYgaXQgaGFzIG5vdCBleGl0ZWQgYnkgdGhhdCB0aW1lIGtpbGwg aXQsIHNvIHRoZSBpbml0IHNjcmlwdCB3aWxsCi0jIHN1Y2NlZWQgd2l0aGluIGEgZmluaXRlIGFt b3VudCBvZiB0aW1lOyBpZiAkMiBpcyBub25udWxsLCBpdCB3aWxsCi0jIGtpbGwgdGhlIGNvbW1h bmQgYXMgd2VsbCBhcyBzb29uIGFzIG5vIGRvbWFpbiAoZXhjZXB0IGZvciB6b21iaWVzKQotIyBh cmUgbGVmdCAodXNlZCBmb3Igc2h1dGRvd24gLS1hbGwpLiBUaGlyZCBwYXJhbWV0ZXIsIGlmIGFu eSwgc3VwcHJlc3NlcwotIyBvdXRwdXQgb2YgZG90cyBwZXIgd29ya2luZyBzdGF0ZSAoZm9ybWF0 dGluZyBpc3N1ZXMpCi13YXRjaGRvZ194ZW5jbWQoKQotewotICAgIGlmIHRlc3QgLXogIiRYRU5E T01BSU5TX1NUT1BfTUFYV0FJVCIgLW8gIiRYRU5ET01BSU5TX1NUT1BfTUFYV0FJVCIgPSAiMCI7 IHRoZW4KLQlleGl0Ci0gICAgZmkKLQotICAgIHVzbGVlcCAyMDAwMAotICAgIGZvciBubyBpbiBg c2VxIDAgJFhFTkRPTUFJTlNfU1RPUF9NQVhXQUlUYDsgZG8KLQkjIGV4aXQgaWYgJENNRCBzYXZl L21pZ3JhdGUvc2h1dGRvd24gaXMgZmluaXNoZWQKLQlQU0FYPWBwcyBheGx3IHwgZ3JlcCAiJENN RCAkMSIgfCBncmVwIC12IGdyZXBgCi0JaWYgdGVzdCAteiAiJFBTQVgiOyB0aGVuIGV4aXQ7IGZp Ci0JaWYgISB0ZXN0IC1uICIkMyI7IHRoZW4gZWNobyAtbiAnLic7IGZpCi0Jc2xlZXAgMQotCSMg Z28gdG8ga2lsbCBpbW1lZGlhdGVseSBpZiB0aGVyZSdzIG9ubHkgem9tYmllcyBsZWZ0Ci0JaWYg YWxsX3pvbWJpZXMgJiYgdGVzdCAtbiAiJDIiOyB0aGVuIGJyZWFrOyBmaQotICAgIGRvbmUKLSAg ICBzbGVlcCAxCi0gICAgcmVhZCBQU0YgUFNVSUQgUFNQSUQgUFNQUElEIDwgPChlY2hvICIkUFNB WCIpCi0gICAgIyBraWxsICRDTUQgJDEKLSAgICBraWxsICRQU1BJRCA+L2Rldi9udWxsIDI+JjEK LQotICAgIGVjaG8gLWUgLgotfQotCi1zdG9wKCkKLXsKLSAgICBleGVjIDM+JjIgMj4gL2Rldi9u dWxsCi0KLSAgICAjIENvbGxlY3QgbGlzdCBvZiBkb21haW5zIHRvIHNodXQgZG93bgotICAgIGlm IHRlc3QgIiRYRU5ET01BSU5TX0FVVE9fT05MWSIgPSAidHJ1ZSI7IHRoZW4KLQlyZG5hbWVzCi0g ICAgZmkKLSAgICBlY2hvIC1uICJTaHV0dGluZyBkb3duIFhlbiBkb21haW5zOiIKLSAgICBuYW1l PTtpZD0KLSAgICB3aGlsZSByZWFkIExOOyBkbwotCXBhcnNlbG4gIiRMTiIgfHwgY29udGludWUK LQlpZiB0ZXN0ICRpZCA9IDA7IHRoZW4gY29udGludWU7IGZpCi0JZWNobyAtbiAiICRuYW1lIgot CWlmIHRlc3QgIiRYRU5ET01BSU5TX0FVVE9fT05MWSIgPSAidHJ1ZSI7IHRoZW4KLQkgICAgZXZh bCAiCi0JICAgIGNhc2UgXCJcJG5hbWVcIiBpbgotCQkoJE5BTUVTKQotCQkgICAgIyBub3RoaW5n Ci0JCSAgICA7OwotCQkoKikKLQkJICAgIGVjaG8gLWUgJyhza2lwKScKLQkJICAgIGNvbnRpbnVl Ci0JCSAgICA7OwotCSAgICBlc2FjCi0JICAgICIKLQlmaQotCSMgWEVORE9NQUlOU19TWVNSUSBj aG91bGQgYmUgc29tZXRoaW5nIGxpa2UganVzdCAicyIKLQkjIG9yICJzIGUgaSB1IiBvciBldmVu ICJzIGUgcyBpIHUgbyIKLQkjIGZvciB0aGUgbGF0dGVyLCB5b3Ugc2hvdWxkIHNldCBYRU5ET01B SU5TX1VTTEVFUCB0byAxMjAwMDAwIG9yIHNvCi0JaWYgdGVzdCAtbiAiJFhFTkRPTUFJTlNfU1lT UlEiOyB0aGVuCi0JICAgIGZvciBzeXNycSBpbiAkWEVORE9NQUlOU19TWVNSUTsgZG8KLQkJZWNo byAtbiAiKFNSLSRzeXNycSkiCi0JCVhNUj1gJENNRCBzeXNycSAkaWQgJHN5c3JxIDI+JjEgMT4v ZGV2L251bGxgCi0JCWlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KLQkJICAgIGVjaG8gLWUgIlxuQW4g ZXJyb3Igb2NjdXJyZWQgd2hpbGUgZG9pbmcgc3lzcnEgb24gZG9tYWluOlxuJFhNUlxuIgotCQkg ICAgcmNfZmFpbGVkICQ/Ci0JCSAgICBlY2hvIC1uICchJwotCQlmaQotCQkjIHVzbGVlcCBqdXN0 IGlnbm9yZXMgZW1wdHkgYXJnCi0JCXVzbGVlcCAkWEVORE9NQUlOU19VU0xFRVAKLQkgICAgZG9u ZQotCWZpCi0JaWYgdGVzdCAiJHN0YXRlIiA9ICItYi0tLWQiIC1vICIkc3RhdGUiID0gIi0tLS0t ZCI7IHRoZW4KLQkgICAgZWNobyAtbiAiKHpvbWIpIgotCSAgICBjb250aW51ZQotCWZpCi0JaWYg dGVzdCAtbiAiJFhFTkRPTUFJTlNfTUlHUkFURSI7IHRoZW4KLQkgICAgZWNobyAtbiAiKG1pZ3Ip IgotCSAgICB3YXRjaGRvZ194ZW5jbWQgbWlncmF0ZSAmCi0JICAgIFdET0dfUElEPSQhCi0JICAg IFhNUj1gJENNRCBtaWdyYXRlICRpZCAkWEVORE9NQUlOU19NSUdSQVRFIDI+JjEgMT4vZGV2L251 bGxgCi0JICAgIGlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KLQkJZWNobyAtZSAiXG5BbiBlcnJvciBv Y2N1cnJlZCB3aGlsZSBtaWdyYXRpbmcgZG9tYWluOlxuJFhNUlxuIgotCQlyY19mYWlsZWQgJD8K LQkJZWNobyAtZSAnIScKLQotCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKLQkgICAg ZWxzZQotCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKLQotCQllY2hvIC1lIC4KLQkJ dXNsZWVwIDEwMDAKLQkJY29udGludWUKLQkgICAgZmkKLQlmaQotCWlmIHRlc3QgLW4gIiRYRU5E T01BSU5TX1NBVkUiOyB0aGVuCi0JICAgIGVjaG8gLW4gIihzYXZlKSIKLQkgICAgd2F0Y2hkb2df eGVuY21kIHNhdmUgJgotCSAgICBXRE9HX1BJRD0kIQotCSAgICBta2RpciAtcCAiJFhFTkRPTUFJ TlNfU0FWRSIKLQkgICAgWE1SPWAkQ01EIHNhdmUgJGlkICRYRU5ET01BSU5TX1NBVkUvJG5hbWUg Mj4mMSAxPi9kZXYvbnVsbGAKLQkgICAgaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgotCQllY2hvIC1l ICJcbkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNhdmluZyBkb21haW46XG4kWE1SXG4iCi0JCXJj X2ZhaWxlZCAkPwotCQllY2hvIC1lICchJwotCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+ JjEKLQkgICAgZWxzZQotCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKLQkJZWNobyAt ZSAuCi0JCXVzbGVlcCAxMDAwCi0JCWNvbnRpbnVlCi0JICAgIGZpCi0JZmkKLQlpZiB0ZXN0IC1u ICIkWEVORE9NQUlOU19TSFVURE9XTiI7IHRoZW4KLQkgICAgIyBYRU5ET01BSU5TX1NIVVRET1dO IHNob3VsZCBiZSAiLS13YWl0IgotCSAgICBlY2hvIC1uICIoc2h1dCkiCi0JICAgIHdhdGNoZG9n X3hlbmNtZCBzaHV0ZG93biAmCi0JICAgIFdET0dfUElEPSQhCi0JICAgIFhNUj1gJENNRCBzaHV0 ZG93biAkWEVORE9NQUlOU19TSFVURE9XTiAkaWQgMj4mMSAxPi9kZXYvbnVsbGAKLQkgICAgaWYg dGVzdCAkPyAtbmUgMDsgdGhlbgotCQllY2hvIC1lICJcbkFuIGVycm9yIG9jY3VycmVkIHdoaWxl IHNodXR0aW5nIGRvd24gZG9tYWluOlxuJFhNUlxuIgotCQlyY19mYWlsZWQgJD8KLQkJZWNobyAt ZSAnIScKLQkgICAgZmkKLQkgICAga2lsbCAkV0RPR19QSUQgPi9kZXYvbnVsbCAyPiYxCi0JZmkK LSAgICBkb25lIDwgPCgkQ01EIGxpc3QgLWwgfCBncmVwICIkTElTVF9HUkVQIikKLQotICAgICMg TkIuIHRoaXMgc2h1dHMgZG93biBBTEwgWGVuIGRvbWFpbnMgKHBvbGl0ZWx5KSwgbm90IGp1c3Qg dGhlIG9uZXMgaW4KLSAgICAjIEFVVE9ESVIvKgotICAgICMgVGhpcyBpcyBiZWNhdXNlIGl0J3Mg ZWFzaWVyIHRvIGRvIDstKSBidXQgYXJndWFibHkgaWYgdGhpcyBzY3JpcHQgaXMgcnVuCi0gICAg IyBvbiBzeXN0ZW0gc2h1dGRvd24gdGhlbiBpdCdzIGFsc28gdGhlIHJpZ2h0IHRoaW5nIHRvIGRv LgotICAgIGlmICEgYWxsX3pvbWJpZXMgJiYgdGVzdCAtbiAiJFhFTkRPTUFJTlNfU0hVVERPV05f QUxMIjsgdGhlbgotCSMgWEVORE9NQUlOU19TSFVURE9XTl9BTEwgc2hvdWxkIGJlICItLWFsbCAt LXdhaXQiCi0JZWNobyAtbiAiIFNIVVRET1dOX0FMTCAiCi0Jd2F0Y2hkb2dfeGVuY21kIHNodXRk b3duIDEgZmFsc2UgJgotCVdET0dfUElEPSQhCi0JWE1SPWAkQ01EIHNodXRkb3duICRYRU5ET01B SU5TX1NIVVRET1dOX0FMTCAyPiYxIDE+L2Rldi9udWxsYAotCWlmIHRlc3QgJD8gLW5lIDA7IHRo ZW4KLQkgICAgZWNobyAtZSAiXG5BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzaHV0dGluZyBkb3du IGFsbCBkb21haW5zOiAkWE1SXG4iCi0JICAgIHJjX2ZhaWxlZCAkPwotCSAgICBlY2hvIC1lICch JwotCWZpCi0Ja2lsbCAkV0RPR19QSUQgPi9kZXYvbnVsbCAyPiYxCi0gICAgZmkKLQotICAgICMg VW5jb25kaXRpb25hbGx5IGRlbGV0ZSBsb2NrIGZpbGUKLSAgICBybSAtZiAkTE9DS0ZJTEUKLQot ICAgIGV4ZWMgMj4mMwotfQotCi1jaGVja19kb21haW5fdXAoKQotewotICAgIG5hbWU9O2lkPQot ICAgIHdoaWxlIHJlYWQgTE47IGRvCi0JcGFyc2VsbiAiJExOIiB8fCBjb250aW51ZQotCWlmIHRl c3QgJGlkID0gMDsgdGhlbiBjb250aW51ZTsgZmkKLQljYXNlICRuYW1lIGluCi0JICAgICgkMSkK LQkJcmV0dXJuIDAKLQkJOzsKLQllc2FjCi0gICAgZG9uZSA8IDwoJENNRCBsaXN0IC1sIHwgZ3Jl cCAiJExJU1RfR1JFUCIpCi0gICAgcmV0dXJuIDEKLX0KLQotY2hlY2tfYWxsX2F1dG9fZG9tYWlu c191cCgpCi17Ci0gICAgaWYgISBjb250YWluc19zb21ldGhpbmcgIiRYRU5ET01BSU5TX0FVVE8i Ci0gICAgdGhlbgotICAgICAgcmV0dXJuIDAKLSAgICBmaQotICAgIG1pc3Npbmc9Ci0gICAgZm9y IG5tIGluICRYRU5ET01BSU5TX0FVVE8vKjsgZG8KLQlyZG5hbWUgJG5tCi0JZm91bmQ9MAotCWlm IGNoZWNrX2RvbWFpbl91cCAiJE5NIjsgdGhlbgotCSAgICBlY2hvIC1uICIgJG5hbWUiCi0JZWxz ZQotCSAgICBtaXNzaW5nPSIkbWlzc2luZyAkTk0iCi0JZmkKLSAgICBkb25lCi0gICAgaWYgdGVz dCAtbiAiJG1pc3NpbmciOyB0aGVuCi0JZWNobyAtbiAiIE1JU1MgQVVUTzokbWlzc2luZyIKLQly ZXR1cm4gMQotICAgIGZpCi0gICAgcmV0dXJuIDAKLX0KLQotY2hlY2tfYWxsX3NhdmVkX2RvbWFp bnNfdXAoKQotewotICAgIGlmICEgY29udGFpbnNfc29tZXRoaW5nICIkWEVORE9NQUlOU19TQVZF IgotICAgIHRoZW4KLSAgICAgIHJldHVybiAwCi0gICAgZmkKLSAgICBtaXNzaW5nPWAvYmluL2xz ICRYRU5ET01BSU5TX1NBVkVgCi0gICAgZWNobyAtbiAiIE1JU1MgU0FWRUQ6ICIgJG1pc3NpbmcK LSAgICByZXR1cm4gMQotfQotCi0jIFRoaXMgZG9lcyBOT1QgbmVjZXNzYXJpbHkgcmVzdGFydCBh bGwgcnVubmluZyBkb21haW5zOiBpbnN0ZWFkIGl0Ci0jIHN0b3BzIGFsbCBydW5uaW5nIGRvbWFp bnMgYW5kIHRoZW4gYm9vdHMgYWxsIHRoZSBkb21haW5zIHNwZWNpZmllZCBpbgotIyBBVVRPRElS LiAgSWYgb3RoZXIgZG9tYWlucyBoYXZlIGJlZW4gc3RhcnRlZCBtYW51YWxseSB0aGVuIHRoZXkg d2lsbAotIyBub3QgZ2V0IHJlc3RhcnRlZC4KLSMgQ29tbWVudGVkIG91dCB0byBhdm9pZCBjb25m dXNpb24hCi0KLXJlc3RhcnQoKQotewotICAgIHN0b3AKLSAgICBzdGFydAotfQotCi1yZWxvYWQo KQotewotICAgIHJlc3RhcnQKLX0KLQotCiBjYXNlICIkMSIgaW4KICAgICBzdGFydCkKLQlzdGFy dAotCXJjX3N0YXR1cwotCWlmIHRlc3QgLWYgJExPQ0tGSUxFOyB0aGVuIHJjX3N0YXR1cyAtdjsg ZmkKKwkkU0JJTkRJUi94ZW5kb21haW5zIHN0YXJ0CiAJOzsKLQogICAgIHN0b3ApCi0Jc3RvcAot CXJjX3N0YXR1cyAtdgorCSRTQklORElSL3hlbmRvbWFpbnMgc3RvcAogCTs7Ci0KICAgICByZXN0 YXJ0KQotCXJlc3RhcnQKKwkkU0JJTkRJUi94ZW5kb21haW5zIHJlc3RhcnQKIAk7OwogICAgIHJl bG9hZCkKLQlyZWxvYWQKKwkkU0JJTkRJUi94ZW5kb21haW5zIHJlbG9hZAogCTs7Ci0KICAgICBz dGF0dXMpCi0JZWNobyAtbiAiQ2hlY2tpbmcgZm9yIHhlbmRvbWFpbnM6IgotCWlmIHRlc3QgISAt ZiAkTE9DS0ZJTEU7IHRoZW4KLQkgICAgcmNfZmFpbGVkIDMKLQllbHNlCi0JICAgIGNoZWNrX2Fs bF9hdXRvX2RvbWFpbnNfdXAKLQkgICAgcmNfc3RhdHVzCi0JICAgIGNoZWNrX2FsbF9zYXZlZF9k b21haW5zX3VwCi0JICAgIHJjX3N0YXR1cwotCWZpCi0JcmNfc3RhdHVzIC12CisJJFNCSU5ESVIv eGVuZG9tYWlucyBzdGF0dXMKIAk7OwotCiAgICAgKikKIAllY2hvICJVc2FnZTogJDAge3N0YXJ0 fHN0b3B8cmVzdGFydHxyZWxvYWR8c3RhdHVzfSIKLQlyY19mYWlsZWQgMwotCXJjX3N0YXR1cyAt dgorCWV4aXQgMwogCTs7CiBlc2FjCi0KLXJjX2V4aXQKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL3Rv b2xzL2hvdHBsdWcvTGludXgveGVuZG9tYWlucyBiL3Rvb2xzL2hvdHBsdWcvTGludXgveGVuZG9t YWlucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ5MmRhCi0tLSAvZGV2 L251bGwKKysrIGIvdG9vbHMvaG90cGx1Zy9MaW51eC94ZW5kb21haW5zCkBAIC0wLDAgKzEsNTg0 IEBACisjIS9iaW4vYmFzaAorIworIyAvZXRjL2luaXQuZC94ZW5kb21haW5zCisjIFN0YXJ0IC8g c3RvcCBkb21haW5zIGF1dG9tYXRpY2FsbHkgd2hlbiBkb21haW4gMCBib290cyAvIHNodXRzIGRv d24uCisjCisjIGNoa2NvbmZpZzogMzQ1IDk5IDAwCisjIGRlc2NyaXB0aW9uOiBTdGFydCAvIHN0 b3AgWGVuIGRvbWFpbnMuCisjCisjIFRoaXMgc2NyaXB0IG9mZmVycyBmYWlybHkgYmFzaWMgZnVu Y3Rpb25hbGl0eS4gIEl0IHNob3VsZCB3b3JrIG9uIFJlZGhhdAorIyBidXQgYWxzbyBvbiBMU0It Y29tcGxpYW50IFN1U0UgcmVsZWFzZXMgYW5kIG9uIERlYmlhbiB3aXRoIHRoZSBMU0IgcGFja2Fn ZQorIyBpbnN0YWxsZWQuICAoTFNCIGlzIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlKQorIworIyBC YXNlZCBvbiB0aGUgZXhhbXBsZSBpbiB0aGUgIkRlc2lnbmluZyBIaWdoIFF1YWxpdHkgSW50ZWdy YXRlZCBMaW51eAorIyBBcHBsaWNhdGlvbnMgSE9XVE8iIGJ5IEF2aSBBbGthbGF5CisjIDxodHRw Oi8vd3d3LnRsZHAub3JnL0hPV1RPL0hpZ2hRdWFsaXR5LUFwcHMtSE9XVE8vPgorIworIyMjIEJF R0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgeGVuZG9tYWlucworIyBSZXF1aXJl ZC1TdGFydDogICAgJHN5c2xvZyAkcmVtb3RlX2ZzIHhlbnN0b3JlZCB4ZW5jb25zb2xlZAorIyBT aG91bGQtU3RhcnQ6ICAgICAgeGVuZAorIyBSZXF1aXJlZC1TdG9wOiAgICAgJHN5c2xvZyAkcmVt b3RlX2ZzIHhlbnN0b3JlZCB4ZW5jb25zb2xlZAorIyBTaG91bGQtU3RvcDogICAgICAgeGVuZAor IyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2Cisj IFNob3J0LURlc2NyaXB0aW9uOiBTdGFydC9zdG9wIHNlY29uZGFyeSB4ZW4gZG9tYWlucworIyBE ZXNjcmlwdGlvbjogICAgICAgU3RhcnQgLyBzdG9wIGRvbWFpbnMgYXV0b21hdGljYWxseSB3aGVu IGRvbWFpbiAwCisjICAgICAgICAgICAgICAgICAgICBib290cyAvIHNodXRzIGRvd24uCisjIyMg RU5EIElOSVQgSU5GTworCisuIC9ldGMveGVuL3NjcmlwdHMvaG90cGx1Z3BhdGguc2gKKworQ01E PSR7U0JJTkRJUn0veGwKK0hFQURDT01QPSJYZW4gc2F2ZWQgZG9tYWluIgorJENNRCBsaXN0ICY+ IC9kZXYvbnVsbAoraWYgdGVzdCAkPyAtbmUgMAordGhlbgorCWV4aXQgJD8KK2ZpCisKKyRDTUQg bGlzdCAmPiAvZGV2L251bGwKK2lmIHRlc3QgJD8gLW5lIDAKK3RoZW4KKwlleGl0IDA7CitmaQor CisjIENvcnJlY3QgZXhpdCBjb2RlIHdvdWxkIHByb2JhYmx5IGJlIDUsIGJ1dCBpdCdzIGVub3Vn aAorIyBpZiB4ZW5kIGNvbXBsYWlucyBpZiB3ZSdyZSBub3QgcnVubmluZyBhcyBwcml2aWxlZ2Vk IGRvbWFpbgoraWYgISBbIC1lIC9wcm9jL3hlbi9wcml2Y21kIF07IHRoZW4KKwlleGl0IDAKK2Zp CisKKyMgU2VlIGRvY3MvbWlzYy9kaXN0cm9fbWFwcGluZy50eHQKK2lmIFsgLWQgL3Zhci9sb2Nr L3N1YnN5cyBdOyB0aGVuCisJTE9DS0ZJTEU9L3Zhci9sb2NrL3N1YnN5cy94ZW5kb21haW5zCitl bHNlCisJTE9DS0ZJTEU9L3Zhci9sb2NrL3hlbmRvbWFpbnMKK2ZpCisKK2lmIFsgLWQgL2V0Yy9z eXNjb25maWcgXTsgdGhlbgorCVhFTkRPTV9DT05GSUc9L2V0Yy9zeXNjb25maWcveGVuZG9tYWlu cworZWxzZQorCVhFTkRPTV9DT05GSUc9L2V0Yy9kZWZhdWx0L3hlbmRvbWFpbnMKK2ZpCisKK3Rl c3QgLXIgJFhFTkRPTV9DT05GSUcgfHwgeyBlY2hvICIkWEVORE9NX0NPTkZJRyBub3QgZXhpc3Rp bmciOworCWlmIFsgIiQxIiA9ICJzdG9wIiBdOyB0aGVuIGV4aXQgMDsKKwllbHNlIGV4aXQgNjsg Zmk7IH0KKworLiAkWEVORE9NX0NPTkZJRworCisjIFVzZSB0aGUgU1VTRSByY18gaW5pdCBzY3Jp cHQgZnVuY3Rpb25zOworIyBlbXVsYXRlIHRoZW0gb24gTFNCLCBSSCBhbmQgb3RoZXIgc3lzdGVt cworaWYgdGVzdCAtZSAvZXRjL3JjLnN0YXR1czsgdGhlbgorICAgICMgU1VTRSByYyBzY3JpcHQg bGlicmFyeQorICAgIC4gL2V0Yy9yYy5zdGF0dXMKK2Vsc2UKKyAgICBfY21kPSQxCisgICAgZGVj bGFyZSAtYSBfU01TRworICAgIGlmIHRlc3QgIiR7X2NtZH0iID0gInN0YXR1cyI7IHRoZW4KKwlf U01TRz0ocnVubmluZyBkZWFkIGRlYWQgdW51c2VkIHVua25vd24pCisJX1JDX1VOVVNFRD0zCisg ICAgZWxzZQorCV9TTVNHPShkb25lIGZhaWxlZCBmYWlsZWQgbWlzc2VkIGZhaWxlZCBza2lwcGVk IHVudXNlZCBmYWlsZWQgZmFpbGVkKQorCV9SQ19VTlVTRUQ9NgorICAgIGZpCisgICAgaWYgdGVz dCAtZSAvZXRjL2luaXQuZC9mdW5jdGlvbnM7IHRoZW4KKwkjIFJFREhBVAorCS4gL2V0Yy9pbml0 LmQvZnVuY3Rpb25zCisJZWNob19yYygpCisJeworCSAgICAjZWNobyAtbiAiICBbJHtfU01TR1sk e19SQ19SVn1dfV0gIgorCSAgICBpZiB0ZXN0ICR7X1JDX1JWfSA9IDA7IHRoZW4KKwkJc3VjY2Vz cyAiICBbJHtfU01TR1ske19SQ19SVn1dfV0gIgorCSAgICBlbHNlCisJCWZhaWx1cmUgIiAgWyR7 X1NNU0dbJHtfUkNfUlZ9XX1dICIKKwkgICAgZmkKKwl9CisgICAgZWxpZiB0ZXN0IC1lIC9saWIv bHNiL2luaXQtZnVuY3Rpb25zOyB0aGVuCisJIyBMU0IKKyAgICAJLiAvbGliL2xzYi9pbml0LWZ1 bmN0aW9ucworICAgICAgICBpZiBhbGlhcyBsb2dfc3VjY2Vzc19tc2cgPi9kZXYvbnVsbCAyPi9k ZXYvbnVsbDsgdGhlbgorCSAgZWNob19yYygpCisJICB7CisJICAgICAgIGVjaG8gIiAgWyR7X1NN U0dbJHtfUkNfUlZ9XX1dICIKKwkgIH0KKyAgICAgICAgZWxzZQorCSAgZWNob19yYygpCisJICB7 CisJICAgIGlmIHRlc3QgJHtfUkNfUlZ9ID0gMDsgdGhlbgorCQlsb2dfc3VjY2Vzc19tc2cgIiAg WyR7X1NNU0dbJHtfUkNfUlZ9XX1dICIKKwkgICAgZWxzZQorCQlsb2dfZmFpbHVyZV9tc2cgIiAg WyR7X1NNU0dbJHtfUkNfUlZ9XX1dICIKKwkgICAgZmkKKwkgIH0KKyAgICAgICAgZmkKKyAgICBl bHNlCisJIyBlbXVsYXRlIGl0CisJZWNob19yYygpCisJeworCSAgICBlY2hvICIgIFske19TTVNH WyR7X1JDX1JWfV19XSAiCisJfQorICAgIGZpCisgICAgcmNfcmVzZXQoKSB7IF9SQ19SVj0wOyB9 CisgICAgcmNfZmFpbGVkKCkKKyAgICB7CisJaWYgdGVzdCAteiAiJDEiOyB0aGVuCisJICAgIF9S Q19SVj0xOworCWVsaWYgdGVzdCAiJDEiICE9ICIwIjsgdGhlbgorCSAgICBfUkNfUlY9JDE7CisJ ZmkKKwlyZXR1cm4gJHtfUkNfUlZ9CisgICAgfQorICAgIHJjX2NoZWNrKCkKKyAgICB7CisJcmV0 dXJuIHJjX2ZhaWxlZCAkPworICAgIH0KKyAgICByY19zdGF0dXMoKQorICAgIHsKKwlyY19mYWls ZWQgJD8KKwlpZiB0ZXN0ICIkMSIgPSAiLXIiOyB0aGVuIF9SQ19SVj0wOyBzaGlmdDsgZmkKKwlp ZiB0ZXN0ICIkMSIgPSAiLXMiOyB0aGVuIHJjX2ZhaWxlZCA1OyBlY2hvX3JjOyByY19mYWlsZWQg Mzsgc2hpZnQ7IGZpCisJaWYgdGVzdCAiJDEiID0gIi11IjsgdGhlbiByY19mYWlsZWQgJHtfUkNf VU5VU0VEfTsgZWNob19yYzsgcmNfZmFpbGVkIDM7IHNoaWZ0OyBmaQorCWlmIHRlc3QgIiQxIiA9 ICItdiI7IHRoZW4gZWNob19yYzsgc2hpZnQ7IGZpCisJaWYgdGVzdCAiJDEiID0gIi1yIjsgdGhl biBfUkNfUlY9MDsgc2hpZnQ7IGZpCisJcmV0dXJuICR7X1JDX1JWfQorICAgIH0KKyAgICByY19l eGl0KCkgeyBleGl0ICR7X1JDX1JWfTsgfQorICAgIHJjX2FjdGl2ZSgpCisgICAgeworCWlmIHRl c3QgLXogIiRSVU5MRVZFTCI7IHRoZW4gcmVhZCBSVU5MRVZFTCBSRVNUIDwgPCgvc2Jpbi9ydW5s ZXZlbCk7IGZpCisJaWYgdGVzdCAtZSAvZXRjL2luaXQuZC9TWzAtOV1bMC05XSR7MX07IHRoZW4g cmV0dXJuIDA7IGZpCisJcmV0dXJuIDEKKyAgICB9CitmaQorCitpZiAhIHdoaWNoIHVzbGVlcCA+ Ji9kZXYvbnVsbAordGhlbgorICB1c2xlZXAoKQorICB7CisgICAgaWYgWyAtbiAiJDEiIF0KKyAg ICB0aGVuCisgICAgICBzbGVlcCAkKCggJDEgLyAxMDAwMDAwICkpCisgICAgZmkKKyAgfQorZmkK KworIyBSZXNldCBzdGF0dXMgb2YgdGhpcyBzZXJ2aWNlCityY19yZXNldAorCisjIworIyBSZXR1 cm5zIDAgKHN1Y2Nlc3MpIGlmIHRoZSBnaXZlbiBwYXJhbWV0ZXIgbmFtZXMgYSBkaXJlY3Rvcnks IGFuZCB0aGF0CisjIGRpcmVjdG9yeSBpcyBub3QgZW1wdHkuCisjCitjb250YWluc19zb21ldGhp bmcoKQoreworICBpZiBbIC1kICIkMSIgXSAmJiBbIGAvYmluL2xzICQxIHwgd2MgLWxgIC1ndCAw IF0KKyAgdGhlbgorICAgIHJldHVybiAwCisgIGVsc2UKKyAgICByZXR1cm4gMQorICBmaQorfQor CisjIHJlYWQgbmFtZSBmcm9tIHhlbiBjb25maWcgZmlsZQorcmRuYW1lKCkKK3sKKyAgICBOTT0k KCRDTUQgY3JlYXRlIC0tcXVpZXQgLS1kcnlydW4gLS1kZWZjb25maWcgIiQxIiB8CisgICAgICAg ICBzZWQgLW4gJ3MvXi4qKG5hbWUgXCguKlwpKSQvXDEvcDtzL14uKiJuYW1lIjogIlwoLipcKSIs JC9cMS9wJykKK30KKworcmRuYW1lcygpCit7CisgICAgTkFNRVM9CisgICAgaWYgISBjb250YWlu c19zb21ldGhpbmcgIiRYRU5ET01BSU5TX0FVVE8iCisgICAgdGhlbgorCXJldHVybgorICAgIGZp CisgICAgZm9yIGRvbSBpbiAkWEVORE9NQUlOU19BVVRPLyo7IGRvCisJcmRuYW1lICRkb20KKwlp ZiB0ZXN0IC16ICROQU1FUzsgdGhlbgorCSAgICBOQU1FUz0kTk07CisJZWxzZQorCSAgICBOQU1F Uz0iJE5BTUVTfCROTSIKKwlmaQorICAgIGRvbmUKK30KKworTElTVF9HUkVQPScoZG9tYWluXHwo ZG9taWRcfChuYW1lXHxeICAgIHskXHwibmFtZSI6XHwiZG9taWQiOicKK3BhcnNlbG4oKQorewor ICAgIGlmIFtbICIkMSIgPX4gJyhkb21haW4nIF1dIHx8IFtbICIkMSIgPSAieyIgXV07IHRoZW4K KyAgICAgICAgbmFtZT07aWQ9CisgICAgZWxpZiBbWyAiJDEiID1+ICcobmFtZScgXV07IHRoZW4K KyAgICAgICAgbmFtZT0kKGVjaG8gJDEgfCBzZWQgLWUgJ3MvXi4qKG5hbWUgXCguKlwpKSQvXDEv JykKKyAgICBlbGlmIFtbICIkMSIgPX4gJyhkb21pZCcgXV07IHRoZW4KKyAgICAgICAgaWQ9JChl Y2hvICQxIHwgc2VkIC1lICdzL14uKihkb21pZCBcKC4qXCkpJC9cMS8nKQorICAgIGVsaWYgW1sg IiQxIiA9fiAnIm5hbWUiOicgXV07IHRoZW4KKyAgICAgICAgbmFtZT0kKGVjaG8gJDEgfCBzZWQg LWUgJ3MvXi4qIm5hbWUiOiAiXCguKlwpIiwkL1wxLycpCisgICAgZWxpZiBbWyAiJDEiID1+ICci ZG9taWQiOicgXV07IHRoZW4KKyAgICAgICAgaWQ9JChlY2hvICQxIHwgc2VkIC1lICdzL14uKiJk b21pZCI6IFwoLipcKSwkL1wxLycpCisgICAgZmkKKworICAgIFsgLW4gIiRuYW1lIiAtYSAtbiAi JGlkIiBdICYmIHJldHVybiAwIHx8IHJldHVybiAxCit9CisKK2lzX3J1bm5pbmcoKQoreworICAg IHJkbmFtZSAkMQorICAgIFJDPTEKKyAgICBuYW1lPTtpZD0KKyAgICB3aGlsZSByZWFkIExOOyBk bworCXBhcnNlbG4gIiRMTiIgfHwgY29udGludWUKKwlpZiB0ZXN0ICRpZCA9IDA7IHRoZW4gY29u dGludWU7IGZpCisJY2FzZSAkbmFtZSBpbgorCSAgICAoJE5NKQorCQlSQz0wCisJCTs7CisJZXNh YworICAgIGRvbmUgPCA8KCRDTUQgbGlzdCAtbCB8IGdyZXAgIiRMSVNUX0dSRVAiKQorICAgIHJl dHVybiAkUkMKK30KKworc3RhcnQoKQoreworICAgIGlmIFsgLWYgJExPQ0tGSUxFIF07IHRoZW4K KwllY2hvIC1lICJ4ZW5kb21haW5zIGFscmVhZHkgcnVubmluZyAobG9ja2ZpbGUgZXhpc3RzKSIK KwlyZXR1cm47CisgICAgZmkKKworICAgIHNhdmVkX2RvbWFpbnM9IiAiCisgICAgaWYgWyAiJFhF TkRPTUFJTlNfUkVTVE9SRSIgPSAidHJ1ZSIgXSAmJgorICAgICAgIGNvbnRhaW5zX3NvbWV0aGlu ZyAiJFhFTkRPTUFJTlNfU0FWRSIKKyAgICB0aGVuCisJbWtkaXIgLXAgJChkaXJuYW1lICIkTE9D S0ZJTEUiKQorCXRvdWNoICRMT0NLRklMRQorCWVjaG8gLW4gIlJlc3RvcmluZyBYZW4gZG9tYWlu czoiCisJc2F2ZWRfZG9tYWlucz1gbHMgJFhFTkRPTUFJTlNfU0FWRWAKKyAgICAgICAgZm9yIGRv bSBpbiAkWEVORE9NQUlOU19TQVZFLyo7IGRvCisgICAgICAgICAgICBpZiBbIC1mICRkb20gXSA7 IHRoZW4KKyAgICAgICAgICAgICAgICBIRUFERVI9YGhlYWQgLWMgMTYgJGRvbSB8IGhlYWQgLW4g MSAyPiAvZGV2L251bGxgCisgICAgICAgICAgICAgICAgaWYgWyAiJEhFQURFUiIgPSAiJEhFQURD T01QIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGVjaG8gLW4gIiAke2RvbSMjKi99Igor ICAgICAgICAgICAgICAgICAgICBYTVI9YCRDTUQgcmVzdG9yZSAkZG9tIDI+JjEgMT4vZGV2L251 bGxgCisgICAgICAgICAgICAgICAgICAgICMkQ01EIHJlc3RvcmUgJGRvbQorICAgICAgICAgICAg ICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVj aG8gLWUgIlxuQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzdG9yaW5nIGRvbWFpbiAke2RvbSMj Ki99OlxuJFhNUiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjX2ZhaWxlZCAkPworICAgICAg ICAgICAgICAgICAgICAgICAgZWNobyAtZSAnIScKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgIyBtdiAkZG9tICR7ZG9tJS8qfS8uJHtkb20jIyovfQor ICAgICAgICAgICAgICAgICAgICAgICAgcm0gJGRvbQorICAgICAgICAgICAgICAgICAgICBmaQor ICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisJZWNobyAt ZQorICAgIGZpCisKKyAgICBpZiBjb250YWluc19zb21ldGhpbmcgIiRYRU5ET01BSU5TX0FVVE8i CisgICAgdGhlbgorCXRvdWNoICRMT0NLRklMRQorCWVjaG8gLW4gIlN0YXJ0aW5nIGF1dG8gWGVu IGRvbWFpbnM6IgorCSMgV2UgZXhwZWN0IGNvbmZpZyBzY3JpcHRzIGZvciBhdXRvIHN0YXJ0aW5n IGRvbWFpbnMgdG8gYmUgaW4KKwkjIFhFTkRPTUFJTlNfQVVUTyAtIHRoZXkgY291bGQganVzdCBi ZSBzeW1saW5rcyB0byBmaWxlcyBlbHNld2hlcmUKKworCSMgQ3JlYXRlIGFsbCBkb21haW5zIHdp dGggY29uZmlnIGZpbGVzIGluIFhFTkRPTUFJTlNfQVVUTy4KKwkjIFRPRE86IFdlIHNob3VsZCBy ZWNvcmQgd2hpY2ggZG9tYWluIG5hbWUgYmVsb25ncworCSMgc28gd2UgaGF2ZSB0aGUgb3B0aW9u IHRvIHNlbGVjdGl2ZWx5IHNodXQgZG93biAvIG1pZ3JhdGUgbGF0ZXIKKwkjIElmIGEgZG9tYWlu IHN0YXRlZmlsZSBmcm9tICRYRU5ET01BSU5TX1NBVkUgbWF0Y2hlcyBhIGRvbWFpbiBuYW1lCisJ IyBpbiAkWEVORE9NQUlOU19BVVRPLCBkbyBub3QgdHJ5IHRvIHN0YXJ0IHRoYXQgZG9tYWluOyBp ZiBpdCBkaWRuJ3QKKwkjIHJlc3RvcmUgY29ycmVjdGx5IGl0IHJlcXVpcmVzIGFkbWluaXN0cmF0 aXZlIGF0dGVudGlvbi4KKwlmb3IgZG9tIGluICRYRU5ET01BSU5TX0FVVE8vKjsgZG8KKwkgICAg ZWNobyAtbiAiICR7ZG9tIyMqL30iCisJICAgIHNob3J0ZG9tPSQoZWNobyAkZG9tIHwgc2VkIC1u ICdzL14uKlwvXCguKlwpJC9cMS9wJykKKwkgICAgZWNobyAkc2F2ZWRfZG9tYWlucyB8IGdyZXAg LXcgJHNob3J0ZG9tID4gL2Rldi9udWxsCisJICAgIGlmIFsgJD8gLWVxIDAgXSB8fCBpc19ydW5u aW5nICRkb207IHRoZW4KKwkJZWNobyAtbiAiKHNraXApIgorCSAgICBlbHNlCisJCVhNQz1gJENN RCBjcmVhdGUgLS1xdWlldCAtLWRlZmNvbmZpZyAkZG9tYAorCQlpZiBbICQ/IC1uZSAwIF07IHRo ZW4KKwkJICAgIGVjaG8gLWUgIlxuQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgZG9t YWluICR7ZG9tIyMqL306ICRYTUNcbiIKKwkJICAgIHJjX2ZhaWxlZCAkPworCQkgICAgZWNobyAt ZSAnIScKKwkJZWxzZQorCQkgICAgdXNsZWVwICRYRU5ET01BSU5TX0NSRUFURV9VU0xFRVAKKwkJ ZmkKKwkgICAgZmkKKwlkb25lCisgICAgZmkKK30KKworYWxsX3pvbWJpZXMoKQoreworICAgIG5h bWU9O2lkPQorICAgIHdoaWxlIHJlYWQgTE47IGRvCisJcGFyc2VsbiAiJExOIiB8fCBjb250aW51 ZQorCWlmIHRlc3QgJGlkID0gMDsgdGhlbiBjb250aW51ZTsgZmkKKwlpZiB0ZXN0ICIkc3RhdGUi ICE9ICItYi0tLWQiIC1hICIkc3RhdGUiICE9ICItLS0tLWQiOyB0aGVuCisJICAgIHJldHVybiAx OworCWZpCisgICAgZG9uZSA8IDwoJENNRCBsaXN0IC1sIHwgZ3JlcCAiJExJU1RfR1JFUCIpCisg ICAgcmV0dXJuIDAKK30KKworIyBXYWl0IGZvciBtYXggJFhFTkRPTUFJTlNfU1RPUF9NQVhXQUlU IGZvciAkQ01EICQxIHRvIGZpbmlzaDsKKyMgaWYgaXQgaGFzIG5vdCBleGl0ZWQgYnkgdGhhdCB0 aW1lIGtpbGwgaXQsIHNvIHRoZSBpbml0IHNjcmlwdCB3aWxsCisjIHN1Y2NlZWQgd2l0aGluIGEg ZmluaXRlIGFtb3VudCBvZiB0aW1lOyBpZiAkMiBpcyBub25udWxsLCBpdCB3aWxsCisjIGtpbGwg dGhlIGNvbW1hbmQgYXMgd2VsbCBhcyBzb29uIGFzIG5vIGRvbWFpbiAoZXhjZXB0IGZvciB6b21i aWVzKQorIyBhcmUgbGVmdCAodXNlZCBmb3Igc2h1dGRvd24gLS1hbGwpLiBUaGlyZCBwYXJhbWV0 ZXIsIGlmIGFueSwgc3VwcHJlc3NlcworIyBvdXRwdXQgb2YgZG90cyBwZXIgd29ya2luZyBzdGF0 ZSAoZm9ybWF0dGluZyBpc3N1ZXMpCit3YXRjaGRvZ194ZW5jbWQoKQoreworICAgIGlmIHRlc3Qg LXogIiRYRU5ET01BSU5TX1NUT1BfTUFYV0FJVCIgLW8gIiRYRU5ET01BSU5TX1NUT1BfTUFYV0FJ VCIgPSAiMCI7IHRoZW4KKwlleGl0CisgICAgZmkKKworICAgIHVzbGVlcCAyMDAwMAorICAgIGZv ciBubyBpbiBgc2VxIDAgJFhFTkRPTUFJTlNfU1RPUF9NQVhXQUlUYDsgZG8KKwkjIGV4aXQgaWYg JENNRCBzYXZlL21pZ3JhdGUvc2h1dGRvd24gaXMgZmluaXNoZWQKKwlQU0FYPWBwcyBheGx3IHwg Z3JlcCAiJENNRCAkMSIgfCBncmVwIC12IGdyZXBgCisJaWYgdGVzdCAteiAiJFBTQVgiOyB0aGVu IGV4aXQ7IGZpCisJaWYgISB0ZXN0IC1uICIkMyI7IHRoZW4gZWNobyAtbiAnLic7IGZpCisJc2xl ZXAgMQorCSMgZ28gdG8ga2lsbCBpbW1lZGlhdGVseSBpZiB0aGVyZSdzIG9ubHkgem9tYmllcyBs ZWZ0CisJaWYgYWxsX3pvbWJpZXMgJiYgdGVzdCAtbiAiJDIiOyB0aGVuIGJyZWFrOyBmaQorICAg IGRvbmUKKyAgICBzbGVlcCAxCisgICAgcmVhZCBQU0YgUFNVSUQgUFNQSUQgUFNQUElEIDwgPChl Y2hvICIkUFNBWCIpCisgICAgIyBraWxsICRDTUQgJDEKKyAgICBraWxsICRQU1BJRCA+L2Rldi9u dWxsIDI+JjEKKworICAgIGVjaG8gLWUgLgorfQorCitzdG9wKCkKK3sKKyAgICBleGVjIDM+JjIg Mj4gL2Rldi9udWxsCisKKyAgICAjIENvbGxlY3QgbGlzdCBvZiBkb21haW5zIHRvIHNodXQgZG93 bgorICAgIGlmIHRlc3QgIiRYRU5ET01BSU5TX0FVVE9fT05MWSIgPSAidHJ1ZSI7IHRoZW4KKwly ZG5hbWVzCisgICAgZmkKKyAgICBlY2hvIC1uICJTaHV0dGluZyBkb3duIFhlbiBkb21haW5zOiIK KyAgICBuYW1lPTtpZD0KKyAgICB3aGlsZSByZWFkIExOOyBkbworCXBhcnNlbG4gIiRMTiIgfHwg Y29udGludWUKKwlpZiB0ZXN0ICRpZCA9IDA7IHRoZW4gY29udGludWU7IGZpCisJZWNobyAtbiAi ICRuYW1lIgorCWlmIHRlc3QgIiRYRU5ET01BSU5TX0FVVE9fT05MWSIgPSAidHJ1ZSI7IHRoZW4K KwkgICAgZXZhbCAiCisJICAgIGNhc2UgXCJcJG5hbWVcIiBpbgorCQkoJE5BTUVTKQorCQkgICAg IyBub3RoaW5nCisJCSAgICA7OworCQkoKikKKwkJICAgIGVjaG8gLWUgJyhza2lwKScKKwkJICAg IGNvbnRpbnVlCisJCSAgICA7OworCSAgICBlc2FjCisJICAgICIKKwlmaQorCSMgWEVORE9NQUlO U19TWVNSUSBjaG91bGQgYmUgc29tZXRoaW5nIGxpa2UganVzdCAicyIKKwkjIG9yICJzIGUgaSB1 IiBvciBldmVuICJzIGUgcyBpIHUgbyIKKwkjIGZvciB0aGUgbGF0dGVyLCB5b3Ugc2hvdWxkIHNl dCBYRU5ET01BSU5TX1VTTEVFUCB0byAxMjAwMDAwIG9yIHNvCisJaWYgdGVzdCAtbiAiJFhFTkRP TUFJTlNfU1lTUlEiOyB0aGVuCisJICAgIGZvciBzeXNycSBpbiAkWEVORE9NQUlOU19TWVNSUTsg ZG8KKwkJZWNobyAtbiAiKFNSLSRzeXNycSkiCisJCVhNUj1gJENNRCBzeXNycSAkaWQgJHN5c3Jx IDI+JjEgMT4vZGV2L251bGxgCisJCWlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KKwkJICAgIGVjaG8g LWUgIlxuQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZG9pbmcgc3lzcnEgb24gZG9tYWluOlxuJFhN UlxuIgorCQkgICAgcmNfZmFpbGVkICQ/CisJCSAgICBlY2hvIC1uICchJworCQlmaQorCQkjIHVz bGVlcCBqdXN0IGlnbm9yZXMgZW1wdHkgYXJnCisJCXVzbGVlcCAkWEVORE9NQUlOU19VU0xFRVAK KwkgICAgZG9uZQorCWZpCisJaWYgdGVzdCAiJHN0YXRlIiA9ICItYi0tLWQiIC1vICIkc3RhdGUi ID0gIi0tLS0tZCI7IHRoZW4KKwkgICAgZWNobyAtbiAiKHpvbWIpIgorCSAgICBjb250aW51ZQor CWZpCisJaWYgdGVzdCAtbiAiJFhFTkRPTUFJTlNfTUlHUkFURSI7IHRoZW4KKwkgICAgZWNobyAt biAiKG1pZ3IpIgorCSAgICB3YXRjaGRvZ194ZW5jbWQgbWlncmF0ZSAmCisJICAgIFdET0dfUElE PSQhCisJICAgIFhNUj1gJENNRCBtaWdyYXRlICRpZCAkWEVORE9NQUlOU19NSUdSQVRFIDI+JjEg MT4vZGV2L251bGxgCisJICAgIGlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KKwkJZWNobyAtZSAiXG5B biBlcnJvciBvY2N1cnJlZCB3aGlsZSBtaWdyYXRpbmcgZG9tYWluOlxuJFhNUlxuIgorCQlyY19m YWlsZWQgJD8KKwkJZWNobyAtZSAnIScKKworCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+ JjEKKwkgICAgZWxzZQorCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKKworCQllY2hv IC1lIC4KKwkJdXNsZWVwIDEwMDAKKwkJY29udGludWUKKwkgICAgZmkKKwlmaQorCWlmIHRlc3Qg LW4gIiRYRU5ET01BSU5TX1NBVkUiOyB0aGVuCisJICAgIGVjaG8gLW4gIihzYXZlKSIKKwkgICAg d2F0Y2hkb2dfeGVuY21kIHNhdmUgJgorCSAgICBXRE9HX1BJRD0kIQorCSAgICBta2RpciAtcCAi JFhFTkRPTUFJTlNfU0FWRSIKKwkgICAgWE1SPWAkQ01EIHNhdmUgJGlkICRYRU5ET01BSU5TX1NB VkUvJG5hbWUgMj4mMSAxPi9kZXYvbnVsbGAKKwkgICAgaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgor CQllY2hvIC1lICJcbkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNhdmluZyBkb21haW46XG4kWE1S XG4iCisJCXJjX2ZhaWxlZCAkPworCQllY2hvIC1lICchJworCQlraWxsICRXRE9HX1BJRCA+L2Rl di9udWxsIDI+JjEKKwkgICAgZWxzZQorCQlraWxsICRXRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEK KwkJZWNobyAtZSAuCisJCXVzbGVlcCAxMDAwCisJCWNvbnRpbnVlCisJICAgIGZpCisJZmkKKwlp ZiB0ZXN0IC1uICIkWEVORE9NQUlOU19TSFVURE9XTiI7IHRoZW4KKwkgICAgIyBYRU5ET01BSU5T X1NIVVRET1dOIHNob3VsZCBiZSAiLS13YWl0IgorCSAgICBlY2hvIC1uICIoc2h1dCkiCisJICAg IHdhdGNoZG9nX3hlbmNtZCBzaHV0ZG93biAmCisJICAgIFdET0dfUElEPSQhCisJICAgIFhNUj1g JENNRCBzaHV0ZG93biAkWEVORE9NQUlOU19TSFVURE9XTiAkaWQgMj4mMSAxPi9kZXYvbnVsbGAK KwkgICAgaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgorCQllY2hvIC1lICJcbkFuIGVycm9yIG9jY3Vy cmVkIHdoaWxlIHNodXR0aW5nIGRvd24gZG9tYWluOlxuJFhNUlxuIgorCQlyY19mYWlsZWQgJD8K KwkJZWNobyAtZSAnIScKKwkgICAgZmkKKwkgICAga2lsbCAkV0RPR19QSUQgPi9kZXYvbnVsbCAy PiYxCisJZmkKKyAgICBkb25lIDwgPCgkQ01EIGxpc3QgLWwgfCBncmVwICIkTElTVF9HUkVQIikK KworICAgICMgTkIuIHRoaXMgc2h1dHMgZG93biBBTEwgWGVuIGRvbWFpbnMgKHBvbGl0ZWx5KSwg bm90IGp1c3QgdGhlIG9uZXMgaW4KKyAgICAjIEFVVE9ESVIvKgorICAgICMgVGhpcyBpcyBiZWNh dXNlIGl0J3MgZWFzaWVyIHRvIGRvIDstKSBidXQgYXJndWFibHkgaWYgdGhpcyBzY3JpcHQgaXMg cnVuCisgICAgIyBvbiBzeXN0ZW0gc2h1dGRvd24gdGhlbiBpdCdzIGFsc28gdGhlIHJpZ2h0IHRo aW5nIHRvIGRvLgorICAgIGlmICEgYWxsX3pvbWJpZXMgJiYgdGVzdCAtbiAiJFhFTkRPTUFJTlNf U0hVVERPV05fQUxMIjsgdGhlbgorCSMgWEVORE9NQUlOU19TSFVURE9XTl9BTEwgc2hvdWxkIGJl ICItLWFsbCAtLXdhaXQiCisJZWNobyAtbiAiIFNIVVRET1dOX0FMTCAiCisJd2F0Y2hkb2dfeGVu Y21kIHNodXRkb3duIDEgZmFsc2UgJgorCVdET0dfUElEPSQhCisJWE1SPWAkQ01EIHNodXRkb3du ICRYRU5ET01BSU5TX1NIVVRET1dOX0FMTCAyPiYxIDE+L2Rldi9udWxsYAorCWlmIHRlc3QgJD8g LW5lIDA7IHRoZW4KKwkgICAgZWNobyAtZSAiXG5BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzaHV0 dGluZyBkb3duIGFsbCBkb21haW5zOiAkWE1SXG4iCisJICAgIHJjX2ZhaWxlZCAkPworCSAgICBl Y2hvIC1lICchJworCWZpCisJa2lsbCAkV0RPR19QSUQgPi9kZXYvbnVsbCAyPiYxCisgICAgZmkK KworICAgICMgVW5jb25kaXRpb25hbGx5IGRlbGV0ZSBsb2NrIGZpbGUKKyAgICBybSAtZiAkTE9D S0ZJTEUKKworICAgIGV4ZWMgMj4mMworfQorCitjaGVja19kb21haW5fdXAoKQoreworICAgIG5h bWU9O2lkPQorICAgIHdoaWxlIHJlYWQgTE47IGRvCisJcGFyc2VsbiAiJExOIiB8fCBjb250aW51 ZQorCWlmIHRlc3QgJGlkID0gMDsgdGhlbiBjb250aW51ZTsgZmkKKwljYXNlICRuYW1lIGluCisJ ICAgICgkMSkKKwkJcmV0dXJuIDAKKwkJOzsKKwllc2FjCisgICAgZG9uZSA8IDwoJENNRCBsaXN0 IC1sIHwgZ3JlcCAiJExJU1RfR1JFUCIpCisgICAgcmV0dXJuIDEKK30KKworY2hlY2tfYWxsX2F1 dG9fZG9tYWluc191cCgpCit7CisgICAgaWYgISBjb250YWluc19zb21ldGhpbmcgIiRYRU5ET01B SU5TX0FVVE8iCisgICAgdGhlbgorICAgICAgcmV0dXJuIDAKKyAgICBmaQorICAgIG1pc3Npbmc9 CisgICAgZm9yIG5tIGluICRYRU5ET01BSU5TX0FVVE8vKjsgZG8KKwlyZG5hbWUgJG5tCisJZm91 bmQ9MAorCWlmIGNoZWNrX2RvbWFpbl91cCAiJE5NIjsgdGhlbgorCSAgICBlY2hvIC1uICIgJG5h bWUiCisJZWxzZQorCSAgICBtaXNzaW5nPSIkbWlzc2luZyAkTk0iCisJZmkKKyAgICBkb25lCisg ICAgaWYgdGVzdCAtbiAiJG1pc3NpbmciOyB0aGVuCisJZWNobyAtbiAiIE1JU1MgQVVUTzokbWlz c2luZyIKKwlyZXR1cm4gMQorICAgIGZpCisgICAgcmV0dXJuIDAKK30KKworY2hlY2tfYWxsX3Nh dmVkX2RvbWFpbnNfdXAoKQoreworICAgIGlmICEgY29udGFpbnNfc29tZXRoaW5nICIkWEVORE9N QUlOU19TQVZFIgorICAgIHRoZW4KKyAgICAgIHJldHVybiAwCisgICAgZmkKKyAgICBtaXNzaW5n PWAvYmluL2xzICRYRU5ET01BSU5TX1NBVkVgCisgICAgZWNobyAtbiAiIE1JU1MgU0FWRUQ6ICIg JG1pc3NpbmcKKyAgICByZXR1cm4gMQorfQorCisjIFRoaXMgZG9lcyBOT1QgbmVjZXNzYXJpbHkg cmVzdGFydCBhbGwgcnVubmluZyBkb21haW5zOiBpbnN0ZWFkIGl0CisjIHN0b3BzIGFsbCBydW5u aW5nIGRvbWFpbnMgYW5kIHRoZW4gYm9vdHMgYWxsIHRoZSBkb21haW5zIHNwZWNpZmllZCBpbgor IyBBVVRPRElSLiAgSWYgb3RoZXIgZG9tYWlucyBoYXZlIGJlZW4gc3RhcnRlZCBtYW51YWxseSB0 aGVuIHRoZXkgd2lsbAorIyBub3QgZ2V0IHJlc3RhcnRlZC4KKyMgQ29tbWVudGVkIG91dCB0byBh dm9pZCBjb25mdXNpb24hCisKK3Jlc3RhcnQoKQoreworICAgIHN0b3AKKyAgICBzdGFydAorfQor CityZWxvYWQoKQoreworICAgIHJlc3RhcnQKK30KKworCitjYXNlICIkMSIgaW4KKyAgICBzdGFy dCkKKwlzdGFydAorCXJjX3N0YXR1cworCWlmIHRlc3QgLWYgJExPQ0tGSUxFOyB0aGVuIHJjX3N0 YXR1cyAtdjsgZmkKKwk7OworCisgICAgc3RvcCkKKwlzdG9wCisJcmNfc3RhdHVzIC12CisJOzsK KworICAgIHJlc3RhcnQpCisJcmVzdGFydAorCTs7CisgICAgcmVsb2FkKQorCXJlbG9hZAorCTs7 CisKKyAgICBzdGF0dXMpCisJZWNobyAtbiAiQ2hlY2tpbmcgZm9yIHhlbmRvbWFpbnM6IgorCWlm IHRlc3QgISAtZiAkTE9DS0ZJTEU7IHRoZW4KKwkgICAgcmNfZmFpbGVkIDMKKwllbHNlCisJICAg IGNoZWNrX2FsbF9hdXRvX2RvbWFpbnNfdXAKKwkgICAgcmNfc3RhdHVzCisJICAgIGNoZWNrX2Fs bF9zYXZlZF9kb21haW5zX3VwCisJICAgIHJjX3N0YXR1cworCWZpCisJcmNfc3RhdHVzIC12CisJ OzsKKworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2Fk fHN0YXR1c30iCisJcmNfZmFpbGVkIDMKKwlyY19zdGF0dXMgLXYKKwk7OworZXNhYworCityY19l eGl0Ci0tIAoyLjAuMC5yYzMuMTguZzAwYTViNzkKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=