From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from gandalf.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id D802B5A026D for ; Fri, 5 Apr 2024 08:12:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1712297546; bh=uSokzETY72RwSBYNoJj+9yIZdZMMw+9PELupn+3cZXI=; h=From:To:Cc:Subject:Date:From; b=StA1sAqSpmYIJvR/O4BbkH6Ybl5BozZ7wp/iRsakuPPMfHDze39WlEaz+bkH7Zpsb gdwcEZ8k+8Gi6tY0IuLnrxQZBJUjm+s0C9IA1V6pSDhFg5vug9m1gJt53eoJvKwZdW M9hTcKLZR/PKosaI7YKQDl2c5L6yQozyj5UWtQOAxU+0Q6JlVTI58Kl+X45etAFfaV 7fvTZV/w5kw3Nlw56kCrISWX34uPA5pCsMnRFgFQ+GKZscO7pJCfJpyx3CXBHKLeFf E+4fHVB76FzZhxIPVwlePgoC0r72Zd80KYkwDaU229zN1faovZBhJiT5ewU+tvU5Cb kCY81MZmErFxg== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4V9p6y25dkz4wcv; Fri, 5 Apr 2024 17:12:26 +1100 (AEDT) From: David Gibson To: passt-dev@passt.top, Stefano Brivio Subject: [PATCH v2] RFC: Benchmarking script Date: Fri, 5 Apr 2024 17:12:21 +1100 Message-ID: <20240405061222.15966-1-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.44.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: WMVB7UL3NNUPCUDBA7SXEPGIQAKCFNHD X-Message-ID-Hash: WMVB7UL3NNUPCUDBA7SXEPGIQAKCFNHD X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: QWx0aG91Z2ggd2UgbWFrZSBzb21lIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cyBpbiBvdXIgcmVn dWxhciB0ZXN0c3VpdGUsDQp0aG9zZSBhcmUgZGVzaWduZWQgbW9yZSBmb3IgZ2V0dGluZyBhIHF1 aWNrKGlzaCkgcm91Z2ggaWRlYSBvZiB0aGUNCnBlcmZvcm1hbmNlLCByYXRoZXIgdGhhbiBhIG1v cmUgcHJlY2lzZSBtZWFzdXJlbWVudC4NCg0KVGhpcyBwYXRjaCBhZGRzIGEgUHl0aG9uIHNjcmlw dCBpbiBjb250cmliL2JlbmNobWFyayB3aGljaCBjYW4gbWFrZSBtb3JlDQpkZXRhaWxlZCBiZW5j aG1hcmtzLiAgSXQgY2FuIHRlc3QgYm90aCBwYXNzdCAmIHBhc3RhIHRoZW1zZWx2ZXMsIGJ1dCBh bHNvDQp2YXJpb3VzIG90aGVyIHNjZW5hcmlvcyBmb3IgY29tcGFyaXNvbiwgc3VjaCBhcyBrZXJu ZWwgdmV0aCwgcWVtdSAtbmV0IHRhcA0KYW5kIHNsaXJwIChlaXRoZXIgcWVtdSAtbmV0IHVzZXIg b3Igc2xpcnA0bmV0bnMpLg0KDQpJdCBkb2VzIHNvbWUgYmFzaWMgc3RhdGlzdGljcyBvbiB0aGUg cmVzdWx0cyB0byBnZXQgYXQgbGVhc3QgYSByb3VnaCBlcnJvcg0KZXN0aW1hdGUuDQotLS0NCiBj b250cmliL2JlbmNobWFyay8uZ2l0aWdub3JlICAgfCAgIDMgKw0KIGNvbnRyaWIvYmVuY2htYXJr L2JlbmNobWFyay5weSB8IDQ2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiAy IGZpbGVzIGNoYW5nZWQsIDQ2NSBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvYmVuY2htYXJrLy5naXRpZ25vcmUNCiBjcmVhdGUgbW9kZSAxMDA3NTUgY29udHJpYi9i ZW5jaG1hcmsvYmVuY2htYXJrLnB5DQoNCmRpZmYgLS1naXQgYS9jb250cmliL2JlbmNobWFyay8u Z2l0aWdub3JlIGIvY29udHJpYi9iZW5jaG1hcmsvLmdpdGlnbm9yZQ0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAwLi43ZTlmM2M3Yw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvY29u dHJpYi9iZW5jaG1hcmsvLmdpdGlnbm9yZQ0KQEAgLTAsMCArMSwzIEBADQorKi5qc29uDQorKi5z c2gNCisqLmhvc3RzDQpkaWZmIC0tZ2l0IGEvY29udHJpYi9iZW5jaG1hcmsvYmVuY2htYXJrLnB5 IGIvY29udHJpYi9iZW5jaG1hcmsvYmVuY2htYXJrLnB5DQpuZXcgZmlsZSBtb2RlIDEwMDc1NQ0K aW5kZXggMDAwMDAwMDAuLjBhNjU5OWVlDQotLS0gL2Rldi9udWxsDQorKysgYi9jb250cmliL2Jl bmNobWFyay9iZW5jaG1hcmsucHkNCkBAIC0wLDAgKzEsNDYyIEBADQorIyEgL3Vzci9iaW4vcHl0 aG9uMw0KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXINCisjDQor IyBCZW5jaG1hcmsgZm9yIHBhc3N0L3Bhc3RhIGFuZCBvdGhlciB0aGluZ3MgZm9yIGNvbXBhcmlz b24NCisjDQorIyBDb3B5cmlnaHQgUmVkIEhhdA0KKyMgQXV0aG9yOiBEYXZpZCBHaWJzb24gPGRh dmlkQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4NCisjDQorDQorIyBIb3cgdG8gdXNlDQorIw0KKyMg Rm9yIGJlc3QgcmVzdWx0cywgcnVuIG9uIGFuIGlkbGUgc3lzdGVtIHdpdGggZXh0ZXJuYWwgbmV0 d29ya3MNCisjIGRpc2FibGVkLg0KKyMNCisjICAxLiBBZGp1c3QgVElNRSwgT01JVCwgSU5URVJW QUwgZ2xvYmFscyB0byBzZWxlY3QgdGhlIGxlbmd0aCBvZiB0aGUNCisjICAgICB0ZXN0DQorIyAg Mi4gUnVuDQorIyAgICAgICAgJCAuL2JlbmNobWFyay5weSA8c2NlbmFyaW9zPg0KKyMNCisjIFNj ZW5hcmlvczoNCisjDQorIyBsb29wYmFjayAtIERpcmVjdCB0cmFuc2ZlciBvdmVyIGxvIGludGVy ZmFjZQ0KKyMgICAgUnVuIHdpdGhpbiBhIG5ldHdvcmsgbmFtZXNwYWNlIGJvdGggdG8gaXNvbGF0 ZSBhbmQgcmVtb3ZlIGltcGFjdA0KKyMgICAgb2YgYW55IG5ldGZpbHRlciBydWxlcy4NCisjDQor IyB2ZXRoX3tpbixvdXR9IC0gVHJhbnNmZXIgb3ZlciBrZXJuZWwgdmV0aCBkZXZpY2UNCisjICAg ICdpbicgaXMgZnJvbSBwYXJlbnQgbmV0bnMgdG8gY2hpbGQsICdvdXQnIGlzIHJldmVyc2UNCisj DQorIyBwYXN0YV97aW4sb3V0fSAtIFRyYW5zZmVyIG92ZXIgcGFzdGEgbWFuYWdlZCBuZXRucw0K KyMNCisjIHNsaXJwNG5ldG5zX3tpbixvdXR9IC0gVHJhbnNmZXIgb3ZlciBzbGlycDRuZXRucyBt YW5hZ2VkIG5ldG5zDQorIw0KKyMgcWVtdV91c2VyX3tpbixvdXR9IC0gVHJhbnNmZXIgaG9zdCA8 LT4gcWVtdSBndWVzdCB3aXRoIC1uZXQgdXNlcg0KKyMNCisjIHBhc3N0X3tpbixvdXR9IC0gVHJh bnNmZXIgaG9zdCA8LT4gcWVtdSBndWVzdCB3aXRoIHBhc3N0DQorIw0KKyMgcWVtdV90YXBfe2lu LG91dH0gLSBUcmFuc2ZlciBob3N0IDwtPiBxZW11IGd1ZXN0IHdpdGggLW5ldCB0YXANCisjDQor DQoraW1wb3J0IHN5cw0KK2ltcG9ydCBvcw0KK2ltcG9ydCB0aW1lDQoraW1wb3J0IHNvY2tldA0K K2ltcG9ydCBtYXRoDQoraW1wb3J0IGNvbnRleHRsaWINCitpbXBvcnQganNvbg0KK2ltcG9ydCBz dWJwcm9jZXNzDQoraW1wb3J0IHN0YXRpc3RpY3MNCisNCitUSU1FLCBPTUlULCBJTlRFUlZBTCA9 IDYsIDEsIDENCisjIFRJTUUsIE9NSVQsIElOVEVSVkFMID0gNjAwLCAxMCwgNQ0KKw0KK05TVE9P TCA9ICIuLi8uLi90ZXN0L25zdG9vbCINCitQQVNTVCA9ICIuLi8uLi9wYXNzdCINCitQQVNUQSA9 ICIuLi8uLi9wYXN0YSINCitNQlVUTyA9ICIuLi8uLi90ZXN0L21idXRvLmltZyINCitHVUVTVF9L RVkgPSAiLi4vLi4vdGVzdC9ndWVzdC1rZXkiDQorDQorREVCVUcgPSBUcnVlDQorDQorU0VSVkVS ID0gWyJpcGVyZjMiLCAiLXMiLCAiLTEiLCAiLUkiLCAic2VydmVyLnBpZCJdDQorUE9SVCA9IDUy MDENCisNCitJUDEgPSAiMTkyLjAuMi4xIg0KK0lQMiA9ICIxOTIuMC4yLjIiDQorSVAzID0gIjE5 Mi4wLjIuMyINCitJUDQgPSAiMTkyLjAuMi40Ig0KKw0KKw0KK2RlZiBkYmcoZm10LCAqYXJncywg Kiprd2FyZ3MpOg0KKyAgICBpZiBERUJVRzoNCisgICAgICAgIHByaW50KCJEQkc6ICIgKyBmbXQu Zm9ybWF0KCphcmdzLCAqKmt3YXJncyksIGZpbGU9c3lzLnN0ZGVycikNCisNCisNCisjIEJhc2Ug Y2xhc3MgZm9yIGNvbW1hbmQgcnVubmVycw0KK2NsYXNzIENtZDoNCisgICAgZGVmIHBvcGVuKHNl bGYsIGFyZ3MsICoqa3dhcmdzKToNCisgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKHNl bGYuY21kX3ByZWZpeCArIGFyZ3MsICoqa3dhcmdzKQ0KKw0KKyAgICBkZWYgcnVuKHNlbGYsIGFy Z3MsICoqa3dhcmdzKToNCisgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLnJ1bihzZWxmLmNtZF9w cmVmaXggKyBhcmdzLCAqKmt3YXJncykNCisNCisNCitjbGFzcyBIb3N0Q21kKENtZCk6DQorICAg IGRlZiBfX2luaXRfXyhzZWxmKToNCisgICAgICAgIHNlbGYuY21kX3ByZWZpeCA9IFtdDQorDQor DQorY2xhc3MgTnNUb29sKGNvbnRleHRsaWIuQWJzdHJhY3RDb250ZXh0TWFuYWdlciwgQ21kKToN CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN0bCwgcGFyZW50LCBob2xkcHJlZml4KToNCisgICAg ICAgIHRyeToNCisgICAgICAgICAgICBvcy5yZW1vdmUoY3RsKQ0KKyAgICAgICAgZXhjZXB0IEZp bGVOb3RGb3VuZEVycm9yOg0KKyAgICAgICAgICAgIHBhc3MNCisgICAgICAgIHNlbGYuY3RsID0g Y3RsDQorICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudA0KKyAgICAgICAgc2VsZi5wcm9jID0g cGFyZW50LnBvcGVuKGhvbGRwcmVmaXggKyBbTlNUT09MLCAiaG9sZCIsIGN0bF0sDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwgc3Rk ZXJyPU5vbmUpDQorICAgICAgICBzZWxmLmNtZF9wcmVmaXggPSBbTlNUT09MLCAiZXhlYyIsIGN0 bCwgIi0tIl0NCisNCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToNCisgICAgICAgIHNlbGYucGFy ZW50LnJ1bihbTlNUT09MLCAiaW5mbyIsICItdyIsIHNlbGYuY3RsXSwNCisgICAgICAgICAgICAg ICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMKS5jaGVja19yZXR1cm5jb2RlKCkN CisgICAgICAgIHNlbGYucHJvYy5fX2VudGVyX18oKQ0KKyAgICAgICAgcmV0dXJuIHNlbGYNCisN CisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjayk6 DQorICAgICAgICByZXR1cm4gc2VsZi5wcm9jLl9fZXhpdF9fKGV4Y190eXBlLCBleGNfdmFsdWUs IHRyYWNlYmFjaykNCisNCisgICAgZGVmIHJlbHBpZChzZWxmKToNCisgICAgICAgIG91dCA9IHNl bGYucGFyZW50LnJ1bihbTlNUT09MLCAiaW5mbyIsICItcCIsIHNlbGYuY3RsXSwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQ0KKyAgICAgICAg cmV0dXJuIGludChvdXQuc3Rkb3V0KQ0KKw0KKyAgICBkZWYgc3RvcChzZWxmKToNCisgICAgICAg IHJldHVybiBzZWxmLnBhcmVudC5ydW4oW05TVE9PTCwgInN0b3AiLCBzZWxmLmN0bF0pLmNoZWNr X3JldHVybmNvZGUoKQ0KKw0KKw0KKyMgV2UgcHV0IGV2ZXJ5dGhpbmcgaW50byBhbiBpc29sYXRl ZCBuZXR3b3JrIG5hbWVzcGFjZSBmb3IgYSBmZXcgcmVhc29uczoNCisjIDEuIE1ha2Ugc3VyZSB0 ZXN0IHRyYWZmaWMgZG9lc24ndCBsZWFrIG91dCBvbnRvIGV4dGVybmFsIGludGVyZmFjZXMNCisj IDIuIExldHMgdXMgYWxsb2NhdGUgb3VyIG93biBhZGRyZXNzZXMgZnJlZWx5DQorIyAzLiBBdm9p ZHMgZmlyZXdhbGwgcnVsZXMgd2hpY2ggbWlnaHQgYmUgc2V0IHVwIG9uIHRoZSBob3N0IGFmZmVj dGluZw0KKyMgICAgcGVyZm9ybWFuY2UNCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcg0KK2Rl ZiBpc29sYXRlKGN0bCk6DQorICAgIHdpdGggTnNUb29sKGN0bCwgSG9zdENtZCgpLCBbInVuc2hh cmUiLCAiLVVucnAiXSkgYXMgaXNvbnM6DQorICAgICAgICBpc29ucy5ydW4oWyJpcCIsICJsaW5r IiwgInNldCIsICJsbyIsICJ1cCJdKS5jaGVja19yZXR1cm5jb2RlKCkNCisgICAgICAgIHlpZWxk IGlzb25zDQorICAgICAgICBpc29ucy5zdG9wKCkNCisNCisNCitAY29udGV4dGxpYi5jb250ZXh0 bWFuYWdlcg0KK2RlZiBsb29wYmFjayhpc29ucyk6DQorICAgIHdpdGggaXNvbnMucG9wZW4oU0VS VkVSKToNCisgICAgICAgIHlpZWxkIChpc29ucywgIjEyNy4wLjAuMSIpDQorDQorDQorQGNvbnRl eHRsaWIuY29udGV4dG1hbmFnZXINCitkZWYgdmV0aF9ucyhpc29ucywgaXBfb3V0ZXIsIGlwX2lu bmVyKToNCisgICAgaXNvbnMucnVuKFsiaXAiLCAibGluayIsICJhZGQiLCAidHlwZSIsICJ2ZXRo Il0pDQorICAgIHdpdGggTnNUb29sKCJ2ZXRoX2luLmN0bCIsIGlzb25zLCBbInVuc2hhcmUiLCAi LW4iXSkgYXMgZ3Vlc3RuczoNCisgICAgICAgIGRiZygidmV0aF9ucyBndWVzdCBucyByZWFkeSIp DQorICAgICAgICBpc29ucy5ydW4oWyJpcCIsICJsaW5rIiwgInNldCIsICJ2ZXRoMSIsDQorICAg ICAgICAgICAgICAgICAgICJuZXRucyIsIHN0cihndWVzdG5zLnJlbHBpZCgpKV0pDQorICAgICAg ICBpc29ucy5ydW4oWyJpcCIsICJsaW5rIiwgInNldCIsICJ2ZXRoMCIsICJ1cCJdKQ0KKyAgICAg ICAgaXNvbnMucnVuKFsiaXAiLCAiYWRkciIsICJhZGQiLCBmIntpcF9vdXRlcn0vMjQiLCAiZGV2 IiwgInZldGgwIl0pDQorICAgICAgICBndWVzdG5zLnJ1bihbImlwIiwgImxpbmsiLCAic2V0Iiwg InZldGgxIiwgInVwIl0pDQorICAgICAgICBndWVzdG5zLnJ1bihbImlwIiwgImFkZHIiLCAiYWRk IiwgZiJ7aXBfaW5uZXJ9LzI0IiwgImRldiIsICJ2ZXRoMSJdKQ0KKyAgICAgICAgeWllbGQgZ3Vl c3Rucw0KKyAgICAgICAgZ3Vlc3Rucy5zdG9wKCkNCisNCisNCitAY29udGV4dGxpYi5jb250ZXh0 bWFuYWdlcg0KK2RlZiB2ZXRoX2luKGlzb25zKToNCisgICAgb3V0ZXIgPSBJUDMNCisgICAgaW5u ZXIgPSBJUDQNCisgICAgd2l0aCB2ZXRoX25zKGlzb25zLCBvdXRlciwgaW5uZXIpIGFzIGd1ZXN0 bnM6DQorICAgICAgICBkYmcoInZldGhfaW4gZ3Vlc3RucyByZWFkeSIpDQorICAgICAgICB3aXRo IGd1ZXN0bnMucG9wZW4oU0VSVkVSKToNCisgICAgICAgICAgICB5aWVsZCAoaXNvbnMsIGlubmVy KQ0KKw0KKw0KK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyDQorZGVmIHZldGhfb3V0KGlzb25z KToNCisgICAgb3V0ZXIgPSBJUDMNCisgICAgaW5uZXIgPSBJUDQNCisgICAgd2l0aCB2ZXRoX25z KGlzb25zLCBvdXRlciwgaW5uZXIpIGFzIGd1ZXN0bnM6DQorICAgICAgICBkYmcoInZldGhfaW4g Z3Vlc3RucyByZWFkeSIpDQorICAgICAgICB3aXRoIGlzb25zLnBvcGVuKFNFUlZFUik6DQorICAg ICAgICAgICAgeWllbGQgKGd1ZXN0bnMsIG91dGVyKQ0KKw0KKw0KK2RlZiBwYXNzdF9jb25maWdf aXNvbnMoaXNvbnMpOg0KKyAgICBpc29ucy5ydW4oWyJpcCIsICJsaW5rIiwgImFkZCIsICJ0eXBl IiwgImR1bW15Il0pLmNoZWNrX3JldHVybmNvZGUoKQ0KKyAgICBpc29ucy5ydW4oWyJpcCIsICJs aW5rIiwgInNldCIsICJkdW1teTAiLCAidXAiXSkuY2hlY2tfcmV0dXJuY29kZSgpDQorICAgIGlz b25zLnJ1bihbImlwIiwgImFkZHIiLCAiYWRkIiwgZiJ7SVAxfS8yNCIsDQorICAgICAgICAgICAg ICAgImRldiIsICJkdW1teTAiXSkuY2hlY2tfcmV0dXJuY29kZSgpDQorICAgIGlzb25zLnJ1bihb ImlwIiwgInJvdXRlIiwgImFkZCIsICJkZWZhdWx0IiwgInZpYSIsIHN0cihJUDIpLA0KKyAgICAg ICAgICAgICAgICJkZXYiLCAiZHVtbXkwIl0pLmNoZWNrX3JldHVybmNvZGUoKQ0KKw0KKw0KK0Bj b250ZXh0bGliLmNvbnRleHRtYW5hZ2VyDQorZGVmIHBhc3RhX2luKGlzb25zKToNCisgICAgcGFz c3RfY29uZmlnX2lzb25zKGlzb25zKQ0KKyAgICBjbWQgPSBbUEFTVEEsICItLWNvbmZpZy1uZXQi LCAiLXQiLCBzdHIoUE9SVCksICItLSJdICsgU0VSVkVSDQorICAgIHdpdGggaXNvbnMucG9wZW4o Y21kKToNCisgICAgICAgIHRpbWUuc2xlZXAoMSkNCisgICAgICAgIHlpZWxkIChpc29ucywgSVAx KQ0KKw0KKw0KK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyDQorZGVmIHBhc3RhX291dChpc29u cyk6DQorICAgIHBhc3N0X2NvbmZpZ19pc29ucyhpc29ucykNCisgICAgcGFzdGEgPSBOc1Rvb2wo InBhc3RhX291dC5jdGwiLCBpc29ucywgW1BBU1RBLCAiLS1jb25maWctbmV0IiwgIi0tIl0pDQor ICAgIHdpdGggaXNvbnMucG9wZW4oU0VSVkVSKSwgcGFzdGEgYXMgcGFzdGE6DQorICAgICAgICB0 aW1lLnNsZWVwKDEpDQorICAgICAgICB5aWVsZCAocGFzdGEsIElQMikNCisgICAgICAgIHBhc3Rh LnN0b3AoKQ0KKw0KKw0KK2NsYXNzIFNsaXJwNE5ldE5zKGNvbnRleHRsaWIuQWJzdHJhY3RDb250 ZXh0TWFuYWdlcik6DQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBucywgbmFtZSwgcGlkKToNCisg ICAgICAgIHNlbGYuYXBpcGF0aCA9IGYie25hbWV9LmFwaSINCisgICAgICAgIHNlbGYubnMgPSBu cw0KKyAgICAgICAgc2VsZi5waWQgPSBwaWQNCisNCisgICAgZGVmIGFwaShzZWxmLCByZXEpOg0K KyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19T VFJFQU0pIGFzIHNvY2s6DQorICAgICAgICAgICAgc29jay5jb25uZWN0KHNlbGYuYXBpcGF0aCkN CisgICAgICAgICAgICBzb2NrLnNlbmRhbGwocmVxKQ0KKw0KKyAgICBkZWYgX19lbnRlcl9fKHNl bGYpOg0KKyAgICAgICAgZXhpdF9yLCBleGl0X3cgPSBvcy5waXBlKCkNCisgICAgICAgIHNlbGYu ZXhpdCA9IG9zLmZkb3BlbihleGl0X3csICJ3YiIpDQorICAgICAgICBjbWQgPSBbInNsaXJwNG5l dG5zIiwgIi1jIiwgIi1hIiwgc2VsZi5hcGlwYXRoLCAiLWUiLCBzdHIoZXhpdF9yKSwNCisgICAg ICAgICAgICAgICBzdHIoc2VsZi5waWQpLCAidGFwMCJdDQorICAgICAgICBzZWxmLnByb2MgPSBz ZWxmLm5zLnBvcGVuKGNtZCwgcGFzc19mZHM9KGV4aXRfciwpKQ0KKyAgICAgICAgc2VsZi5wcm9j Ll9fZW50ZXJfXygpDQorICAgICAgICB0aW1lLnNsZWVwKDEpDQorICAgICAgICByZXR1cm4gc2Vs Zg0KKw0KKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2Vi YWNrKToNCisgICAgICAgIHNlbGYuZXhpdC5jbG9zZSgpDQorICAgICAgICByZXR1cm4gc2VsZi5w cm9jLl9fZXhpdF9fKGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaykNCisNCisNCitAY29u dGV4dGxpYi5jb250ZXh0bWFuYWdlcg0KK2RlZiBzbGlycDRuZXRuc19pbihpc29ucyk6DQorICAg IHdpdGggTnNUb29sKCJzbGlycDRuZXRuc19pbi5jdGwiLCBpc29ucywgWyJ1bnNoYXJlIiwgIi1u Il0pIGFzIGd1ZXN0bnM6DQorICAgICAgICB3aXRoIFNsaXJwNE5ldE5zKGlzb25zLCAic2xpcnA0 bmV0bnNfaW4iLCBndWVzdG5zLnJlbHBpZCgpKSBhcyBzbGlycDoNCisgICAgICAgICAgICByZXEg PSBmJycnDQore3sNCisgICAgImV4ZWN1dGUiOiAiYWRkX2hvc3Rmd2QiLA0KKyAgICAiYXJndW1l bnRzIjoge3sNCisgICAgICAgICJwcm90byI6ICJ0Y3AiLA0KKyAgICAgICAgImhvc3RfYWRkciI6 ICIwLjAuMC4wIiwNCisgICAgICAgICJob3N0X3BvcnQiOiB7UE9SVH0sDQorICAgICAgICAiZ3Vl c3RfYWRkciI6ICIxMC4wLjIuMTAwIiwNCisgICAgICAgICJndWVzdF9wb3J0Ijoge1BPUlR9DQor ICAgIH19DQorfX0nJycNCisgICAgICAgICAgICBzbGlycC5hcGkoYnl0ZXMocmVxLCAnVVRGLTgn KSkNCisgICAgICAgICAgICB3aXRoIGd1ZXN0bnMucG9wZW4oU0VSVkVSKToNCisgICAgICAgICAg ICAgICAgeWllbGQgKGlzb25zLCAiMTI3LjAuMC4xIikNCisgICAgICAgICAgICAgICAgZ3Vlc3Ru cy5zdG9wKCkNCisgICAgICAgICAgICBkYmcoImd1ZXN0bnMgY2xvc2VkIikNCisgICAgICAgIGRi Zygic2xpcnAgZXhpdGVkIikNCisNCisNCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcg0KK2Rl ZiBzbGlycDRuZXRuc19vdXQoaXNvbnMpOg0KKyAgICB3aXRoIGlzb25zLnBvcGVuKFNFUlZFUiks IFwNCisgICAgICAgICBOc1Rvb2woInNsaXJwNG5ldG5zX2luLmN0bCIsIGlzb25zLCBbInVuc2hh cmUiLCAiLW4iXSkgYXMgZ3Vlc3RuczoNCisgICAgICAgIHdpdGggU2xpcnA0TmV0TnMoaXNvbnMs ICJzbGlycDRuZXRuc19vdXQiLCBndWVzdG5zLnJlbHBpZCgpKToNCisgICAgICAgICAgICB5aWVs ZCAoZ3Vlc3RucywgIjEwLjAuMi4yIikNCisgICAgICAgICAgICBndWVzdG5zLnN0b3AoKQ0KKw0K Kw0KK2NsYXNzIE1idXRvUWVtdShDbWQsIGNvbnRleHRsaWIuQWJzdHJhY3RDb250ZXh0TWFuYWdl cik6DQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIG5hbWUsIG9wdHMpOg0KKyAgICAg ICAgc2VsZi5ucyA9IHBhcmVudA0KKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQ0KKyAgICAgICAg c2VsZi5zc2hfY29uZmlnID0gZiJ7bmFtZX0uc3NoIg0KKyAgICAgICAgc2VsZi5waWRmaWxlID0g ZiJ7bmFtZX0ucGlkIg0KKw0KKyAgICAgICAgY2lkID0gaGFzaChuYW1lKSAmIDB4ZmZmZmZmZmYN CisgICAgICAgIHNlbGYuaG9zdHMgPSBvcy5wYXRoLnJlYWxwYXRoKGYie25hbWV9Lmhvc3RzIikN CisgICAgICAgIHRyeToNCisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5ob3N0cykNCisgICAg ICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoNCisgICAgICAgICAgICBwYXNzDQorICAgICAg ICBrZXkgPSBvcy5wYXRoLnJlYWxwYXRoKEdVRVNUX0tFWSkNCisNCisgICAgICAgIHdpdGggb3Bl bihzZWxmLnNzaF9jb25maWcsICJ3IikgYXMgYzoNCisgICAgICAgICAgICBjLndyaXRlKGYiIiIN CitIb3N0IHtuYW1lfQ0KKyAgICBVc2VyIHJvb3QNCisgICAgVXNlcktub3duSG9zdHNGaWxlIHtz ZWxmLmhvc3RzfQ0KKyAgICBTdHJpY3RIb3N0S2V5Q2hlY2tpbmcgbm8NCisgICAgSWRlbnRpdHlG aWxlIHtrZXl9DQorICAgIElkZW50aXR5QWdlbnQgbm9uZQ0KKyAgICBQcm94eUNvbW1hbmQgc29j YXQgLSBWU09DSy1DT05ORUNUOntjaWR9OjIyDQorIiIiKQ0KKw0KKyAgICAgICAga2VybmVsID0g ZiIvYm9vdC92bWxpbnV6LXtvcy51bmFtZSgpLnJlbGVhc2V9Ig0KKw0KKyAgICAgICAgc2VsZi5x ZW11X2NtZCA9IFsicWVtdS1rdm0iLCAiLWtlcm5lbCIsIGtlcm5lbCwgIi1pbml0cmQiLCBNQlVU TywNCisgICAgICAgICAgICAgICAgICAgICAgICAgIi1hcHBlbmQiLCAnImNvbnNvbGU9dHR5UzAi JywNCisgICAgICAgICAgICAgICAgICAgICAgICAgIi1ub2RlZmF1bHRzIiwgIi1ub2dyYXBoaWMi LCAiLXNlcmlhbCIsICJzdGRpbyIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICItZGV2aWNl IiwgZiJ2aG9zdC12c29jay1wY2ksZ3Vlc3QtY2lkPXtjaWR9IiwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgIi1waWRmaWxlIiwgc2VsZi5waWRmaWxlXSArIGxpc3Qob3B0cykNCisNCisgICAg ICAgIHNlbGYuY21kX3ByZWZpeCA9IFsic3NoIiwgIi1GIiwgc2VsZi5zc2hfY29uZmlnLCAiLXQi LCBuYW1lLCAiLS0iXQ0KKw0KKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOg0KKyAgICAgICAgZGJn KGYiU3RhcnRpbmcge3NlbGYucWVtdV9jbWR9IikNCisgICAgICAgIHNlbGYucWVtdSA9IHNlbGYu bnMucG9wZW4oc2VsZi5xZW11X2NtZCkNCisgICAgICAgIHNlbGYucWVtdS5fX2VudGVyX18oKQ0K KyAgICAgICAgd2hpbGUgc2VsZi5ydW4oWyI6Il0sIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwp LnJldHVybmNvZGUgIT0gMDoNCisgICAgICAgICAgICBwYXNzDQorDQorICAgICAgICByZXR1cm4g c2VsZg0KKw0KKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJh Y2ViYWNrKToNCisgICAgICAgIHBpZCA9IGludChvcGVuKHNlbGYucGlkZmlsZSwgInIiKS5yZWFk KCkpDQorICAgICAgICBzZWxmLm5zLnJ1bihbImtpbGwiLCBzdHIocGlkKV0pDQorICAgICAgICBy ZXQgPSBzZWxmLnFlbXUuX19leGl0X18oZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKQ0K KyAgICAgICAgb3MucmVtb3ZlKHNlbGYuc3NoX2NvbmZpZykNCisgICAgICAgIG9zLnJlbW92ZShz ZWxmLmhvc3RzKQ0KKyAgICAgICAgcmV0dXJuIHJldA0KKw0KKyAgICBkZWYgZGhjcChzZWxmKToN CisgICAgICAgIHNlbGYucnVuKFsiaXAiLCAibGluayIsICJzZXQiLCAibG8iLCAidXAiXSkuY2hl Y2tfcmV0dXJuY29kZSgpDQorICAgICAgICBzZWxmLnJ1bihbImlwIiwgImxpbmsiLCAic2V0Iiwg ImV0aDAiLCAidXAiXSkuY2hlY2tfcmV0dXJuY29kZSgpDQorICAgICAgICBzZWxmLnJ1bihbImRo Y2xpZW50IiwgIi12IiwgImV0aDAiXSkuY2hlY2tfcmV0dXJuY29kZSgpDQorDQorICAgIGRlZiBz dGF0aWMoc2VsZiwgaXApOg0KKyAgICAgICAgc2VsZi5ydW4oWyJpcCIsICJsaW5rIiwgInNldCIs ICJsbyIsICJ1cCJdKS5jaGVja19yZXR1cm5jb2RlKCkNCisgICAgICAgIHNlbGYucnVuKFsiaXAi LCAibGluayIsICJzZXQiLCAiZXRoMCIsICJ1cCJdKS5jaGVja19yZXR1cm5jb2RlKCkNCisgICAg ICAgIHNlbGYucnVuKFsiaXAiLCAiYWRkciIsICJhZGQiLCBpcCwgImRldiIsICJldGgwIl0pLmNo ZWNrX3JldHVybmNvZGUoKQ0KKw0KKw0KK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyDQorZGVm IHFlbXVfdXNlcl9pbihpc29ucyk6DQorICAgIG9wdHMgPSBbIi1tIiwgIjRHIiwNCisgICAgICAg ICAgICAiLW5ldGRldiIsIGYidXNlcixpZD1zbGlycCxob3N0ZndkPXRjcDoxMjcuMC4wLjE6e1BP UlR9LTp7UE9SVH0iLA0KKyAgICAgICAgICAgICItZGV2aWNlIiwgInZpcnRpby1uZXQtcGNpLG5l dGRldj1zbGlycCJdDQorICAgIHdpdGggTWJ1dG9RZW11KGlzb25zLCAic2xpcnAtcWVtdSIsIG9w dHMpIGFzIHFlbXU6DQorICAgICAgICBxZW11LmRoY3AoKQ0KKyAgICAgICAgd2l0aCBxZW11LnBv cGVuKFNFUlZFUik6DQorICAgICAgICAgICAgdGltZS5zbGVlcCgyKQ0KKyAgICAgICAgICAgIGRi ZygiR3Vlc3Qgc2VydmVyIHJlYWR5IikNCisgICAgICAgICAgICB5aWVsZCAoaXNvbnMsICIxMjcu MC4wLjEiKQ0KKw0KKw0KK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyDQorZGVmIHFlbXVfdXNl cl9vdXQoaXNvbnMpOg0KKyAgICBvcHRzID0gWyItbSIsICI0RyIsICItbmV0ZGV2IiwgInVzZXIs aWQ9c2xpcnAiLA0KKyAgICAgICAgICAgICItZGV2aWNlIiwgInZpcnRpby1uZXQtcGNpLG5ldGRl dj1zbGlycCJdDQorICAgIHdpdGggTWJ1dG9RZW11KGlzb25zLCAic2xpcnAtcWVtdSIsIG9wdHMp IGFzIHFlbXU6DQorICAgICAgICBxZW11LmRoY3AoKQ0KKyAgICAgICAgd2l0aCBpc29ucy5wb3Bl bihTRVJWRVIpOg0KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMikNCisgICAgICAgICAgICB5aWVs ZCAocWVtdSwgIjEwLjAuMi4yIikNCisNCisNCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcg0K K2RlZiBwYXNzdChucywgc29jaywgb3B0cz1bXSk6DQorICAgIHBhc3N0X2NtZCA9IFtQQVNTVCwg Ii1zIiwgc29jaywgIi0xIiwgIi1mIl0gKyBvcHRzDQorICAgIHdpdGggbnMucG9wZW4ocGFzc3Rf Y21kKToNCisgICAgICAgIHlpZWxkDQorICAgIG9zLnJlbW92ZShzb2NrKQ0KKw0KKw0KK0Bjb250 ZXh0bGliLmNvbnRleHRtYW5hZ2VyDQorZGVmIHBhc3N0X3FlbXUobnMsIG5hbWUsIG9wdHM9W10p Og0KKyAgICBzb2NrID0gZiJ7bmFtZX0ucGFzc3QiDQorICAgIHdpdGggcGFzc3QobnMsIHNvY2ss IG9wdHMpOg0KKyAgICAgICAgc3RyZWFtb3B0cyA9IGYiaWQ9cGFzc3Qsc2VydmVyPW9mZixhZGRy LnR5cGU9dW5peCxhZGRyLnBhdGg9e3NvY2t9Ig0KKyAgICAgICAgcWVtdV9vcHRzID0gWyItbSIs ICI0RyIsDQorICAgICAgICAgICAgICAgICAgICAgIi1uZXRkZXYiLCBmInN0cmVhbSx7c3RyZWFt b3B0c30iLA0KKyAgICAgICAgICAgICAgICAgICAgICItZGV2aWNlIiwgInZpcnRpby1uZXQtcGNp LG5ldGRldj1wYXNzdCJdDQorICAgICAgICB3aXRoIE1idXRvUWVtdShucywgbmFtZSwgcWVtdV9v cHRzKSBhcyBxZW11Og0KKyAgICAgICAgICAgIHFlbXUuZGhjcCgpDQorICAgICAgICAgICAgeWll bGQgcWVtdQ0KKw0KKw0KK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyDQorZGVmIHBhc3N0X2lu KGlzb25zKToNCisgICAgcGFzc3RfY29uZmlnX2lzb25zKGlzb25zKQ0KKyAgICB3aXRoIHBhc3N0 X3FlbXUoaXNvbnMsICJwYXNzdF9pbiIsIFsiLXQiLCBzdHIoUE9SVCldKSBhcyBxZW11Og0KKyAg ICAgICAgd2l0aCBxZW11LnBvcGVuKFNFUlZFUik6DQorICAgICAgICAgICAgdGltZS5zbGVlcCgy KQ0KKyAgICAgICAgICAgIGRiZygiR3Vlc3Qgc2VydmVyIHJlYWR5IikNCisgICAgICAgICAgICB5 aWVsZCAoaXNvbnMsICIxMjcuMC4wLjEiKQ0KKw0KKw0KK0Bjb250ZXh0bGliLmNvbnRleHRtYW5h Z2VyDQorZGVmIHBhc3N0X291dChpc29ucyk6DQorICAgIHBhc3N0X2NvbmZpZ19pc29ucyhpc29u cykNCisgICAgd2l0aCBwYXNzdF9xZW11KGlzb25zLCAicGFzc3Rfb3V0IikgYXMgcWVtdToNCisg ICAgICAgIHdpdGggaXNvbnMucG9wZW4oU0VSVkVSKToNCisgICAgICAgICAgICB0aW1lLnNsZWVw KDIpDQorICAgICAgICAgICAgeWllbGQgKHFlbXUsIElQMikNCisNCisNCitAY29udGV4dGxpYi5j b250ZXh0bWFuYWdlcg0KK2RlZiB0YXBfcWVtdShucywgbmFtZSwgb3B0cyk6DQorICAgIG9wdHMg Kz0gWyItbmV0ZGV2IiwgInRhcCxpZD10YXAsc2NyaXB0PW5vLGRvd25zY3JpcHQ9bm8iLA0KKyAg ICAgICAgICAgICAiLWRldmljZSIsICJ2aXJ0aW8tbmV0LXBjaSxuZXRkZXY9dGFwIl0NCisgICAg d2l0aCBNYnV0b1FlbXUobnMsIG5hbWUsIG9wdHMpIGFzIHFlbXU6DQorICAgICAgICBucy5ydW4o WyJpcCIsICJsaW5rIiwgInNldCIsICJ0YXAwIiwgInVwIl0pLmNoZWNrX3JldHVybmNvZGUoKQ0K KyAgICAgICAgbnMucnVuKFsiaXAiLCAiYWRkciIsICJhZGQiLCBmIntJUDN9LzI0IiwNCisgICAg ICAgICAgICAgICAgImRldiIsICJ0YXAwIl0pLmNoZWNrX3JldHVybmNvZGUoKQ0KKyAgICAgICAg cWVtdS5zdGF0aWMoZiJ7SVA0fS8yNCIpDQorICAgICAgICB5aWVsZCBxZW11DQorDQorDQorQGNv bnRleHRsaWIuY29udGV4dG1hbmFnZXINCitkZWYgcWVtdV90YXBfaW4oaXNvbnMpOg0KKyAgICBv cHRzID0gWyItbSIsICI0RyJdDQorICAgIHdpdGggdGFwX3FlbXUoaXNvbnMsICJ0YXBfaW4iLCBv cHRzKSBhcyBxZW11Og0KKyAgICAgICAgd2l0aCBxZW11LnBvcGVuKFNFUlZFUik6DQorICAgICAg ICAgICAgdGltZS5zbGVlcCgyKQ0KKyAgICAgICAgICAgIGRiZygiR3Vlc3Qgc2VydmVyIHJlYWR5 IikNCisgICAgICAgICAgICB5aWVsZCAoaXNvbnMsIElQNCkNCisNCisNCitAY29udGV4dGxpYi5j b250ZXh0bWFuYWdlcg0KK2RlZiBxZW11X3RhcF9vdXQoaXNvbnMpOg0KKyAgICBvcHRzID0gWyIt bSIsICI0RyJdDQorICAgIHdpdGggdGFwX3FlbXUoaXNvbnMsICJ0YXBfb3V0Iiwgb3B0cykgYXMg cWVtdToNCisgICAgICAgIHdpdGggaXNvbnMucG9wZW4oU0VSVkVSKToNCisgICAgICAgICAgICB0 aW1lLnNsZWVwKDIpDQorICAgICAgICAgICAgeWllbGQgKHFlbXUsIElQMykNCisNCisNCitkZWYg YmVuY2hfb25lKG5hbWUsIHNldHVwKToNCisgICAgcHJpbnQoZiJSdW5uaW5nIGJlbmNobWFyayB7 bmFtZX0uLi4iKQ0KKyAgICB3aXRoIHNldHVwIGFzIChjcnVuLCBhZGRyKToNCisgICAgICAgIGRi ZygiU2V0dXAgZm9yIHt9IiwgbmFtZSkNCisgICAgICAgIGNjbWQgPSBbImlwZXJmMyIsICItYyIs IGFkZHIsICItSiIsICItdCIsIHN0cihUSU1FKSwgIi1PIiwgc3RyKE9NSVQpLA0KKyAgICAgICAg ICAgICAgICAiLWkiLCBzdHIoSU5URVJWQUwpLCAiLWwiLCAiMU0iXQ0KKyAgICAgICAgb3V0ID0g Y3J1bi5ydW4oY2NtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPU5vbmUpDQorICAg ICAgICBkYmcoIkNsaWVudCBjb21wbGV0ZWQgZm9yIHt9IiwgbmFtZSkNCisgICAgb3V0LmNoZWNr X3JldHVybmNvZGUoKQ0KKyAgICByZXR1cm4gb3V0LnN0ZG91dA0KKw0KKw0KK2RlZiBzdGF0cyhu YW1lLCBvdXQpOg0KKyAgICBwYXJzZSA9IGpzb24ubG9hZHMob3V0KQ0KKyAgICBpbnRlcnZhbHMg PSBwYXJzZVsnaW50ZXJ2YWxzJ10NCisgICAgc3VtcyA9IFtpWydzdW0nXSBmb3IgaSBpbiBpbnRl cnZhbHNdDQorICAgIHNhbXBsZXMgPSBbc1snYml0c19wZXJfc2Vjb25kJ10gZm9yIHMgaW4gc3Vt cyBpZiBub3Qgc1snb21pdHRlZCddXQ0KKyAgICBtZWFuID0gc3RhdGlzdGljcy5mbWVhbihzYW1w bGVzKQ0KKyAgICBzdGRldiA9IHN0YXRpc3RpY3Muc3RkZXYoc2FtcGxlcykNCisgICAgc3ByZWFk ID0gc3RkZXYgLyBtZWFuDQorICAgIG4gPSBsZW4oc2FtcGxlcykNCisgICAgc3RkZXJyID0gc3Rk ZXYgLyBtYXRoLnNxcnQoZmxvYXQobikpDQorICAgIHJlbGVyciA9IHN0ZGVyciAvIGFicyhtZWFu KQ0KKyAgICBnYnBzID0gbWVhbiAvIDEwMDAwMDAwMDANCisgICAgcHJpbnQoZiJ7bmFtZToxNn06 XHR7Z2Jwczo4LjJmfSBHYnBzIMKxIHtyZWxlcnI6LjElfSAiICsgXA0KKyAgICAgICAgICBmIih7 bn0gaW50ZXJ2YWxzLCB7c3ByZWFkOi4xJX0pIikNCisNCisNCitBTEwgPSBbImxvb3BiYWNrIiwg InZldGhfaW4iLCAidmV0aF9vdXQiLCAicGFzdGFfaW4iLCAicGFzdGFfb3V0IiwNCisgICAgICAg InNsaXJwNG5ldG5zX2luIiwgInNsaXJwNG5ldG5zX291dCIsICJxZW11X3VzZXJfaW4iLCAicWVt dV91c2VyX291dCIsDQorICAgICAgICJxZW11X3RhcF9pbiIsICJxZW11X3RhcF9vdXQiLCAicGFz c3RfaW4iLCAicGFzc3Rfb3V0Il0NCisNCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOg0KKyAg ICByZXN1bHRzID0ge30NCisgICAgY2FzZXMgPSBzeXMuYXJndlsxOl0NCisgICAgaWYgbm90IGNh c2VzOg0KKyAgICAgICAgY2FzZXMgPSBBTEwNCisgICAgZm9yIGNhc2UgaW4gY2FzZXM6DQorICAg ICAgICB3aXRoIGlzb2xhdGUoImlzb2xhdGUuY3RsIikgYXMgaXNvbnM6DQorICAgICAgICAgICAg c2V0dXAgPSBnbG9iYWxzKClbY2FzZV0oaXNvbnMpDQorICAgICAgICAgICAgb3V0ID0gYmVuY2hf b25lKGNhc2UsIHNldHVwKQ0KKyAgICAgICAgICAgIG9wZW4oZiJ7Y2FzZX0uanNvbiIsICJ3YiIp LndyaXRlKG91dCkNCisgICAgICAgICAgICByZXN1bHRzW2Nhc2VdID0gb3V0DQorICAgIGZvciBu YW1lLCBvdXQgaW4gcmVzdWx0cy5pdGVtcygpOg0KKyAgICAgICAgc3RhdHMobmFtZSwgb3V0KQ0K LS0gDQoyLjQ0LjANCg0K