ZGlmZiAtLWdpdCBhL3BsYW5ldHN0YWNrL2NvcmUvc3RhdGljL3BhZ2VfYW5hbHl0aWNzLmpzIGIvcGxhbmV0c3RhY2svY29yZS9zdGF0aWMvcGFnZV9hbmFseXRpY3MuanMKaW5kZXggYjlkMGMzNS4uNWY2NWZiMiAxMDA2NDQKLS0tIGEvcGxhbmV0c3RhY2svY29yZS9zdGF0aWMvcGFnZV9hbmFseXRpY3MuanMKKysrIGIvcGxhbmV0c3RhY2svY29yZS9zdGF0aWMvcGFnZV9hbmFseXRpY3MuanMKQEAgLTEsNyArMSw0IEBACi1mdW5jdGlvbiBnZXRPYmplY3RBbmRFdmVudFF1ZXJ5KCkgewotICAgIHZhciBzZWxlY3RlZE5vZGVUeHQgPSAkKCcjY3VycmVudE9yaWdpbmFsTm9kZScpLnRleHQoKTsKLSAgICBzZWxlY3RlZE5vZGVUeHQgPSBzZWxlY3RlZE5vZGVUeHQudHJpbSgpOwotICAgIHNlbGVjdGVkTm9kZVR4dCA9IHNlbGVjdGVkTm9kZVR4dC5zcGxpdCgnICcpLmpvaW4oJycpOy8vc2VsZWN0ZWROb2RlVHh0LnJlcGxhY2UoIiAiLCAiIikKK2Z1bmN0aW9uIGdldFBhZ2VLaW5kKCkgewogICAgIHZhciBwYXJlbnROb2RlVHh0ID0gJCgnI3NlbGVjdGVkTWFpbk5hdicpLnRleHQoKTsKICAgICBwYXJlbnROb2RlVHh0ID0gcGFyZW50Tm9kZVR4dC5yZXBsYWNlKCIvXG4iLCIiKTsKICAgICBwYXJlbnROb2RlVHh0ID0gcGFyZW50Tm9kZVR4dC5yZXBsYWNlKCK7IiwiIik7CkBAIC05LDE1ICs2LDIzIEBACiAgICAgaWYgKHBhcmVudE5vZGVUeHQubGVuZ3RoID4gMCAmJiBwYXJlbnROb2RlVHh0LmNoYXJBdChwYXJlbnROb2RlVHh0Lmxlbmd0aC0xKT09J3MnKSB7CiAgICAgICAgICAgICBwYXJlbnROb2RlVHh0ID0gcGFyZW50Tm9kZVR4dC5zdWJzdHJpbmcoMCwgcGFyZW50Tm9kZVR4dC5sZW5ndGgtMSk7CiAgICAgfQorICAgIHJldHVybiBwYXJlbnROb2RlVHh0OworfQorCitmdW5jdGlvbiBnZXRPYmplY3RRdWVyeSgpIHsKKyAgICB2YXIgc2VsZWN0ZWROb2RlVHh0ID0gJCgnI2N1cnJlbnRPcmlnaW5hbE5vZGUnKS50ZXh0KCk7CisgICAgc2VsZWN0ZWROb2RlVHh0ID0gc2VsZWN0ZWROb2RlVHh0LnRyaW0oKTsKKyAgICBzZWxlY3RlZE5vZGVUeHQgPSBzZWxlY3RlZE5vZGVUeHQuc3BsaXQoJyAnKS5qb2luKCcnKTsvL3NlbGVjdGVkTm9kZVR4dC5yZXBsYWNlKCIgIiwgIiIpCisgICAgcGFyZW50Tm9kZVR4dCA9IGdldFBhZ2VLaW5kKCk7CiAKICAgICBpZiAocGFyZW50Tm9kZVR4dCA9PSAiU2xpY2UiKSB7Ci0gICAgICAgIHJldHVybiAiJmV2ZW50PWxpYnZpcnRfaGVhcnRiZWF0JnNsaWNlPSIgKyBzZWxlY3RlZE5vZGVUeHQ7CisgICAgICAgIHJldHVybiAiJnNsaWNlPSIgKyBzZWxlY3RlZE5vZGVUeHQ7CiAgICAgfSBlbHNlIGlmIChwYXJlbnROb2RlVHh0ID09ICJTaXRlIikgewotICAgICAgICByZXR1cm4gIiZldmVudD1ub2RlX2hlYXJ0YmVhdCZzaXRlPSIgKyBzZWxlY3RlZE5vZGVUeHQ7CisgICAgICAgIHJldHVybiAiJnNpdGU9IiArIHNlbGVjdGVkTm9kZVR4dDsKICAgICB9IGVsc2UgaWYgKHBhcmVudE5vZGVUeHQgPT0gIk5vZGUiKSB7Ci0gICAgICAgIHJldHVybiAiJmV2ZW50PW5vZGVfaGVhcnRiZWF0Jm5vZGU9IiArIHNlbGVjdGVkTm9kZVR4dDsKKyAgICAgICAgcmV0dXJuICImbm9kZT0iICsgc2VsZWN0ZWROb2RlVHh0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAiJmV2ZW50PW5vZGVfaGVhcnRiZWF0IjsKKyAgICAgICAgcmV0dXJuICIiOwogICAgIH0KIH0KIApAQCAtNDgsNyArNTMsNyBAQAogfQogCiBmdW5jdGlvbiB1cGRhdGVQYWdlQW5hbHl0aWNzKCkgewotICAgIHZhciB1cmw9ICcvYW5hbHl0aWNzL2JpZ3F1ZXJ5Lz9hdmc9JWNwdSZjb3VudD0laG9zdG5hbWUmY2FjaGVkPTEnICsgZ2V0T2JqZWN0QW5kRXZlbnRRdWVyeSgpOworICAgIHZhciB1cmw9ICcvYW5hbHl0aWNzL2JpZ3F1ZXJ5Lz9hdmc9JWNwdSZjb3VudD0laG9zdG5hbWUmY2FjaGVkPWRlZmF1bHQnICsgZ2V0T2JqZWN0UXVlcnkoKTsKICAgICBjb25zb2xlLmxvZyh1cmwpOwogICAgICQuYWpheCh7CiAgICAgdXJsOiB1cmwsCkBAIC03NSw3ICs4MCwxMSBAQAogfQogCiBmdW5jdGlvbiB1cGRhdGVQYWdlQmFuZHdpZHRoKCkgewotICAgIHZhciB1cmw9Jy9hbmFseXRpY3MvYmlncXVlcnkvP2NvbXB1dGVkPSVieXRlc19zZW50LyVlbGFwc2VkJmNhY2hlZD0xJyArIGdldE9iamVjdEFuZEV2ZW50UXVlcnkoKTsKKyAgICB2YXIgdXJsPScvYW5hbHl0aWNzL2JpZ3F1ZXJ5Lz9jb21wdXRlZD0lYnl0ZXNfc2VudC8lZWxhcHNlZCZjYWNoZWQ9ZGVmYXVsdCcgKyBnZXRPYmplY3RRdWVyeSgpOworCisgICAgaWYgKGdldFBhZ2VLaW5kKCkhPSJTbGljZSIpIHsKKyAgICAgICAgdXJsID0gdXJsICsgIiZldmVudD1ub2RlX2hlYXJ0YmVhdCI7CisgICAgfQogCiAgICAgJC5hamF4KHsKICAgICB1cmwgOiB1cmwsCmRpZmYgLS1naXQgYS9wbGFuZXRzdGFjay9ocGNfd2l6YXJkL2JpZ3F1ZXJ5X2FuYWx5dGljcy5weSBiL3BsYW5ldHN0YWNrL2hwY193aXphcmQvYmlncXVlcnlfYW5hbHl0aWNzLnB5CmluZGV4IDRlMzc1ZGYuLmEwYTAyNzUgMTAwNjQ0Ci0tLSBhL3BsYW5ldHN0YWNrL2hwY193aXphcmQvYmlncXVlcnlfYW5hbHl0aWNzLnB5CisrKyBiL3BsYW5ldHN0YWNrL2hwY193aXphcmQvYmlncXVlcnlfYW5hbHl0aWNzLnB5CkBAIC0yMTYsNyArMjE2LDggQEAKIAogICAgICAgICAoY29tcHV0ZWRGaWVsZE5hbWVzLCByb3dzKSA9IHNlbGYuZG9fY29tcHV0ZWRfZmllbGRzKHJvd3MsIGNvbXB1dGVkKQogICAgICAgICBzdW0gPSBzdW0gKyBjb21wdXRlZEZpZWxkTmFtZXMKLSAgICAgICAgcm93cyA9IHNlbGYuZ3JvdXBieV9yZXN1bHRzKHJvd3MsIGdyb3VwQnksIHN1bSwgY291bnQsIGF2ZywgbWF4aSkKKyAgICAgICAgaWYgZ3JvdXBCeToKKyAgICAgICAgICAgIHJvd3MgPSBzZWxmLmdyb3VwYnlfcmVzdWx0cyhyb3dzLCBncm91cEJ5LCBzdW0sIGNvdW50LCBhdmcsIG1heGkpCiAgICAgICAgIHJldHVybiByb3dzCiAKICAgICBkZWYgcmVtYXAoc2VsZiwgbWF0Y2gpOgpkaWZmIC0tZ2l0IGEvcGxhbmV0c3RhY2svaHBjX3dpemFyZC9wbGFuZXRzdGFja19hbmFseXRpY3MucHkgYi9wbGFuZXRzdGFjay9ocGNfd2l6YXJkL3BsYW5ldHN0YWNrX2FuYWx5dGljcy5weQppbmRleCA5MWU0Y2UxLi4zYmE3OWE2IDEwMDY0NAotLS0gYS9wbGFuZXRzdGFjay9ocGNfd2l6YXJkL3BsYW5ldHN0YWNrX2FuYWx5dGljcy5weQorKysgYi9wbGFuZXRzdGFjay9ocGNfd2l6YXJkL3BsYW5ldHN0YWNrX2FuYWx5dGljcy5weQpAQCAtNDIsNyArNDIsNyBAQAogCiAgICAgICAgIHJldHVybiBbc2xpY2UubmFtZSBmb3Igc2xpY2UgaW4gc2xpY2VzXQogCi0gICAgZGVmIGNvbXBvc2VfcXVlcnkoc2VsZiwgc2xpY2U9Tm9uZSwgc2l0ZT1Ob25lLCBub2RlPU5vbmUsIHNlcnZpY2U9Tm9uZSwgZXZlbnQ9ImxpYnZpcnRfaGVhcnRiZWF0IiwgdGltZUJ1Y2tldD0iNjAiLCBhdmc9W10sIHN1bT1bXSwgY291bnQ9W10sIGNvbXB1dGVkPVtdLCB2YWw9W10sIGdyb3VwQnk9WyJUaW1lIl0sIG9yZGVyQnk9WyJUaW1lIl0sIHRhYmxlTmFtZT1Ob25lLCBsYXRlc3Q9RmFsc2UsIG1heEFnZT02MCo2MCk6CisgICAgZGVmIGNvbXBvc2VfcXVlcnkoc2VsZiwgZmlsdGVyPXt9LCB0aW1lQnVja2V0PSI2MCIsIGF2Zz1bXSwgc3VtPVtdLCBjb3VudD1bXSwgY29tcHV0ZWQ9W10sIHZhbD1bXSwgZ3JvdXBCeT1bIlRpbWUiXSwgb3JkZXJCeT1bIlRpbWUiXSwgdGFibGVOYW1lPU5vbmUsIGxhdGVzdD1GYWxzZSwgbWF4QWdlPTYwKjYwKToKICAgICAgICAgaWYgdGFibGVOYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICB0YWJsZU5hbWUgPSBzZWxmLnRhYmxlTmFtZQogCkBAIC05OSwxNiArOTksMTYgQEAKIAogICAgICAgICB3aGVyZSA9IFtdCiAKLSAgICAgICAgaWYgc2xpY2U6Ci0gICAgICAgICAgICB3aGVyZS5hcHBlbmQoIiUlc2xpY2U9JyVzJyIgJSBzbGljZSkKLSAgICAgICAgaWYgc2l0ZToKLSAgICAgICAgICAgIHdoZXJlLmFwcGVuZCgiJSVzaXRlPSclcyciICUgc2l0ZSkKLSAgICAgICAgaWYgbm9kZToKLSAgICAgICAgICAgIHdoZXJlLmFwcGVuZCgiJSVob3N0bmFtZT0nJXMnIiAlIG5vZGUpCi0gICAgICAgIGlmIGV2ZW50OgotICAgICAgICAgICAgd2hlcmUuYXBwZW5kKCJldmVudD0nJXMnIiAlIGV2ZW50KQotICAgICAgICBpZiBzZXJ2aWNlOgotICAgICAgICAgICAgc2xpY2VOYW1lcyA9IHNlbGYuc2VydmljZV90b19zbGljZU5hbWVzKHNlcnZpY2UpCisgICAgICAgIGlmIGZpbHRlci5nZXQoInNsaWNlIixOb25lKToKKyAgICAgICAgICAgIHdoZXJlLmFwcGVuZCgiJSVzbGljZT0nJXMnIiAlIGZpbHRlclsic2xpY2UiXSkKKyAgICAgICAgaWYgZmlsdGVyLmdldCgic2l0ZSIsTm9uZSk6CisgICAgICAgICAgICB3aGVyZS5hcHBlbmQoIiUlc2l0ZT0nJXMnIiAlIGZpbHRlclsic2l0ZSJdKQorICAgICAgICBpZiBmaWx0ZXIuZ2V0KCJub2RlIixOb25lKToKKyAgICAgICAgICAgIHdoZXJlLmFwcGVuZCgiJSVob3N0bmFtZT0nJXMnIiAlIGZpbHRlclsibm9kZSJdKQorICAgICAgICBpZiBmaWx0ZXIuZ2V0KCJldmVudCIsTm9uZSk6CisgICAgICAgICAgICB3aGVyZS5hcHBlbmQoImV2ZW50PSclcyciICUgZmlsdGVyWyJldmVudCJdKQorICAgICAgICBpZiBmaWx0ZXIuZ2V0KCJzZXJ2aWNlIixOb25lKToKKyAgICAgICAgICAgIHNsaWNlTmFtZXMgPSBzZWxmLnNlcnZpY2VfdG9fc2xpY2VOYW1lcyhmaWx0ZXJbInNlcnZpY2UiXSkKICAgICAgICAgICAgIGlmIHNsaWNlTmFtZXM6CiAgICAgICAgICAgICAgICAgd2hlcmUuYXBwZW5kKCIoIiArICIgT1IgIi5qb2luKFsiJSVzbGljZT0nJXMnIiAlIHNsaWNlTmFtZSBmb3Igc2xpY2VOYW1lIGluIHNsaWNlTmFtZXNdKSArIikiKQogCkBAIC0yNDEsMTMgKzI0MSwyOSBAQAogICAgICAgICAgICAgY3B1PWZsb2F0KG1heF9jcHUpLzEwMC4wCiAgICAgICAgICAgICByb3dbImhvdG5lc3MiXSA9IG1heCgwLjAsICgoY3B1KlJFRF9MT0FEKSAtIEJMVUVfTE9BRCkvKFJFRF9MT0FELUJMVUVfTE9BRCkpCiAKLSAgICBkZWYgY29tcG9zZV9sYXRlc3RfcXVlcnkoc2VsZiwgZmllbGROYW1lcz1Ob25lLCBncm91cEJ5RmllbGRzPVsiJWhvc3RuYW1lIiwgImV2ZW50Il0pOgorICAgIGRlZiBjb21wb3NlX2NhY2hlZF9xdWVyeShzZWxmLCBxdWVyeVNwZWM9J2RlZmF1bHQnKToKICAgICAgICAgIiIiIENvbXBvc2UgYSBxdWVyeSB0aGF0IHJldHVybnMgdGhlICdtb3N0IHJlY2VudCcgcm93IGZvciBlYWNoIChob3N0bmFtZSwgZXZlbnQpCiAgICAgICAgICAgICBwYWlyLgorCisgICAgICAgICAgICBOb3RlIHRoYXQgZ3JvdXBCeUZpZWxkcyBjYW5ub3QgY29udGFpbiBhbnkgdmFsdWVzIHRoYXQgYXJlICdOdWxsJyBvciB0aG9zZQorICAgICAgICAgICAgcm93cyB3aWxsIGJlIGV4Y2x1ZGVkLiBGb3IgZXhhbXBsZSwgaWYgZ3JvdXBCeUZpZWxkcyBpbmNsdWRlcyBjcCwgdGhlbgorICAgICAgICAgICAgdGhlcmUgd2lsbCBiZSBubyBsaWJ2aXJ0X2V2ZW50IHJvd3MsIHNpbmNlIGxpYnZpcnRfZXZlbnQgZG9lcyBub3QgaGF2ZQorICAgICAgICAgICAgY3AuCisKKyAgICAgICAgICAgIFRoaXMgbWVhbnMgd2UgY2FuJ3QgcmVhbGx5IGhhdmUgJ29uZSBxdWVyeSB0byBydWxlIHRoZW0nLiBTZXR0bGUgb24KKyAgICAgICAgICAgIGhhdmluZyBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgcXVlcmllcywgYW5kIGhhdmUgdGhlIGNhbGxlciBzcGVjaWZ5CisgICAgICAgICAgICB3aGljaCBvbmUgaGUgd2FudHMuCiAgICAgICAgICIiIgogCi0gICAgICAgIGlmIG5vdCBmaWVsZE5hbWVzOgotICAgICAgICAgICAgZmllbGROYW1lcyA9IFsiJWhvc3RuYW1lIiwgIiVieXRlc19zZW50IiwgIiVieXRlc19oaXQiLCAiJWhlYWx0aHkiLCAidGltZSIsICJldmVudCIsICIlc2l0ZSIsICIlZWxhcHNlZCIsICIlc2xpY2UiLCAiJWNwdSJdCisgICAgICAgIGZpZWxkTmFtZXMgPSBbIiVob3N0bmFtZSIsICIlYnl0ZXNfc2VudCIsICIlYnl0ZXNfaGl0IiwgIiVoZWFsdGh5IiwgInRpbWUiLCAiZXZlbnQiLCAiJXNpdGUiLCAiJWVsYXBzZWQiLCAiJWNwdSJdCisKKyAgICAgICAgaWYgcXVlcnlTcGVjPT0iZGVmYXVsdCI6CisgICAgICAgICAgICBncm91cEJ5RmllbGRzID0gWyIlaG9zdG5hbWUiLCAiZXZlbnQiXQorICAgICAgICBlbGlmIChxdWVyeVNwZWM9PSJocGMiKToKKyAgICAgICAgICAgIGZpZWxkTmFtZXMuYXBwZW5kKCIlY3AiKQorICAgICAgICAgICAgZ3JvdXBCeUZpZWxkcyA9IFsiJWhvc3RuYW1lIiwgImV2ZW50IiwgIiVjcCJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIHF1ZXJ5c3BlYyAlcyIgJSBxdWVyeVNwZWMpCiAKICAgICAgICAgZmllbGRzID0gWyJ0YWJsZTEuJXMgQVMgJXMiICUgKHgseCkgZm9yIHggaW4gZmllbGROYW1lc10KICAgICAgICAgZmllbGRzID0gIiwgIi5qb2luKGZpZWxkcykKQEAgLTI5Myw2ICszMDksNyBAQAogICAgICAgICBub2RlID0gcmVxLkdFVC5nZXQoIm5vZGUiLCBOb25lKQogICAgICAgICBzZXJ2aWNlID0gcmVxLkdFVC5nZXQoInNlcnZpY2UiLCBOb25lKQogICAgICAgICBldmVudCA9IHJlcS5HRVQuZ2V0KCJldmVudCIsICJsaWJ2aXJ0X2hlYXJ0YmVhdCIpCisgICAgICAgIGNwID0gcmVxLkdFVC5nZXQoImNwIiwgTm9uZSkKIAogICAgICAgICBmb3JtYXQgPSByZXEuR0VULmdldCgiZm9ybWF0IiwgImpzb25fZGljdHMiKQogCkBAIC0zMTIsNyArMzI5LDE5IEBACiAgICAgICAgIGNhY2hlZCA9IHJlcS5HRVQuZ2V0KCJjYWNoZWQiLCBOb25lKQogICAgICAgICBjYWNoZWRHcm91cEJ5ID0gc2VsZi5nZXRfbGlzdF9mcm9tX3JlcShyZXEsICJjYWNoZWRHcm91cEJ5IiwgWyJkb2Vzbm90ZXhpc3QiXSkKIAotICAgICAgICBxID0gc2VsZi5jb21wb3NlX3F1ZXJ5KHNsaWNlLCBzaXRlLCBub2RlLCBzZXJ2aWNlLCBldmVudCwgdGltZUJ1Y2tldCwgYXZnLCBzdW0sIGNvdW50LCBjb21wdXRlZCwgW10sIGdyb3VwQnksIG9yZGVyQnksIG1heEFnZT1tYXhBZ2UpCisgICAgICAgIGZpbHRlcj17fQorICAgICAgICBpZiBzbGljZToKKyAgICAgICAgICAgIGZpbHRlclsic2xpY2UiXSA9IHNsaWNlCisgICAgICAgIGlmIHNpdGU6CisgICAgICAgICAgICBmaWx0ZXJbInNpdGUiXSA9IHNpdGUKKyAgICAgICAgaWYgbm9kZToKKyAgICAgICAgICAgIGZpbHRlclsiaG9zdG5hbWUiXSA9IG5vZGUKKyAgICAgICAgaWYgZXZlbnQ6CisgICAgICAgICAgICBmaWx0ZXJbImV2ZW50Il0gPSBldmVudAorICAgICAgICBpZiBjcDoKKyAgICAgICAgICAgIGZpbHRlclsiY3AiXSA9IGNwCisKKyAgICAgICAgcSA9IHNlbGYuY29tcG9zZV9xdWVyeShmaWx0ZXIsIHRpbWVCdWNrZXQsIGF2Zywgc3VtLCBjb3VudCwgY29tcHV0ZWQsIFtdLCBncm91cEJ5LCBvcmRlckJ5LCBtYXhBZ2U9bWF4QWdlKQogCiAgICAgICAgIHByaW50IHEKIApAQCAtMzc1LDE3ICs0MDQsNyBAQAogCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBjYWNoZWQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0cyA9IHNlbGYuZ2V0X2NhY2hlZF9xdWVyeV9yZXN1bHRzKHNlbGYuY29tcG9zZV9sYXRlc3RfcXVlcnkoKSkKLQotICAgICAgICAgICAgICAgIGZpbHRlcj17fQotICAgICAgICAgICAgICAgIGlmIHNsaWNlOgotICAgICAgICAgICAgICAgICAgICBmaWx0ZXJbInNsaWNlIl0gPSBzbGljZQotICAgICAgICAgICAgICAgIGlmIHNpdGU6Ci0gICAgICAgICAgICAgICAgICAgIGZpbHRlclsic2l0ZSJdID0gc2l0ZQotICAgICAgICAgICAgICAgIGlmIG5vZGU6Ci0gICAgICAgICAgICAgICAgICAgIGZpbHRlclsiaG9zdG5hbWUiXSA9IG5vZGUKLSAgICAgICAgICAgICAgICBpZiBldmVudDoKLSAgICAgICAgICAgICAgICAgICAgZmlsdGVyWyJldmVudCJdID0gZXZlbnQKKyAgICAgICAgICAgICAgICByZXN1bHRzID0gc2VsZi5nZXRfY2FjaGVkX3F1ZXJ5X3Jlc3VsdHMoc2VsZi5jb21wb3NlX2NhY2hlZF9xdWVyeShjYWNoZWQpKQogCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5wb3N0cHJvY2Vzc19yZXN1bHRzKHJlc3VsdHMsIGZpbHRlcj1maWx0ZXIsIHN1bT1zdW0sIGNvdW50PWNvdW50LCBhdmc9YXZnLCBjb21wdXRlZD1jb21wdXRlZCwgbWF4RGVsdGFUaW1lPTEyMCwgZ3JvdXBCeT1jYWNoZWRHcm91cEJ5KQogICAgICAgICAgICAgZWxzZToKQEAgLTQwOCw3ICs0MjcsNyBAQAogZGVmIG1haW4oKToKICAgICBicSA9IFBsYW5ldFN0YWNrQW5hbHl0aWNzKHRhYmxlTmFtZT0iZGVtb2V2ZW50cyIpCiAKLSAgICBxID0gYnEuY29tcG9zZV9sYXRlc3RfcXVlcnkoZ3JvdXBCeUZpZWxkcz1bIiVob3N0bmFtZSIsICJldmVudCIsICIlc2xpY2UiXSkKKyAgICBxID0gYnEuY29tcG9zZV9jYWNoZWRfcXVlcnkoKQogICAgIHJlc3VsdHMgPSBicS5ydW5fcXVlcnkocSkKIAogICAgICNyZXN1bHRzID0gYnEucG9zdHByb2Nlc3NfcmVzdWx0cyhyZXN1bHRzLApAQCAtNDE4LDcgKzQzNyw5IEBACiAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bT1bImJ5dGVzX3NlbnQiLCAiY29tcHV0ZWRfYnl0ZXNfc2VudF9kaXZfZWxhcHNlZCJdLCBhdmc9WyJjcHUiXSwKICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4RGVsdGFUaW1lPTYwKQogCi0gICAgcmVzdWx0cyA9IGJxLnBvc3Rwcm9jZXNzX3Jlc3VsdHMocmVzdWx0cywgZmlsdGVyPXsic2xpY2UiOiAiSHlwZXJDYWNoZSJ9LCBtYXhpPVsiY3B1Il0sIGNvdW50PVsiaG9zdG5hbWUiXSwgY29tcHV0ZWQ9WyJieXRlc19zZW50L2VsYXBzZWQiXSwgZ3JvdXBCeT1bIlRpbWUiLCAic2l0ZSJdLCBtYXhEZWx0YVRpbWU9ODApCisgICAgI3Jlc3VsdHMgPSBicS5wb3N0cHJvY2Vzc19yZXN1bHRzKHJlc3VsdHMsIGZpbHRlcj17InNsaWNlIjogIkh5cGVyQ2FjaGUifSwgbWF4aT1bImNwdSJdLCBjb3VudD1bImhvc3RuYW1lIl0sIGNvbXB1dGVkPVsiYnl0ZXNfc2VudC9lbGFwc2VkIl0sIGdyb3VwQnk9WyJUaW1lIiwgInNpdGUiXSwgbWF4RGVsdGFUaW1lPTgwKQorCisgICAgcmVzdWx0cyA9IGJxLnBvc3Rwcm9jZXNzX3Jlc3VsdHMocmVzdWx0cyxmaWx0ZXI9eyJldmVudCI6ICJsaWJ2aXJ0X2hlYXJ0YmVhdCJ9LCBhdmc9WyJjcHUiXSwgY291bnQ9WyJob3N0bmFtZSJdLCBncm91cEJ5PVsiZG9lc25vdGV4aXN0Il0pCiAKICAgICBicS5kdW1wX3RhYmxlKHJlc3VsdHMpCiAK