ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vZXJsYW5nLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vZXJsYW5nLnZpbQppbmRleCA0ODk5MDIwLi5hZjRlOTEwIDEwMDY0NAotLS0gYS9ydW50aW1lL2Z0cGx1Z2luL2VybGFuZy52aW0KKysrIGIvcnVudGltZS9mdHBsdWdpbi9lcmxhbmcudmltCkBAIC0xLDEwICsxLDEwIEBACiAiIFZpbSBmdHBsdWdpbiBmaWxlCiAiIExhbmd1YWdlOiAgICAgRXJsYW5nCi0iIEF1dGhvcjogICAgICAgT3NjYXIgSGVsbHN0csO2bSA8b3NjYXJAb3NjYXJoLm5ldD4KLSIgQ29udHJpYnV0b3JzOiBSaWNhcmRvIENhdGFsaW5hcyBKaW3DqW5leiA8amltZW5lenJpY2tAZ21haWwuY29tPgorIiBBdXRob3I6ICAgICAgIE9zY2FyIEhlbGxzdHL2bSA8b3NjYXJAb3NjYXJoLm5ldD4KKyIgQ29udHJpYnV0b3JzOiBSaWNhcmRvIENhdGFsaW5hcyBKaW3pbmV6IDxqaW1lbmV6cmlja0BnbWFpbC5jb20+CiAiICAgICAgICAgICAgICAgRWR1YXJkbyBMb3BleiAoaHR0cDovL2dpdGh1Yi5jb20vdGFwaWNodSkKICIgTGljZW5zZTogICAgICBWaW0gbGljZW5zZQotIiBWZXJzaW9uOiAgICAgIDIwMTEvMTEvMjEKKyIgVmVyc2lvbjogICAgICAyMDEyLzAxLzI1CiAKIGlmIGV4aXN0cygnYjpkaWRfZnRwbHVnaW4nKQogCWZpbmlzaApAQCAtMjcsMTMgKzI3LDEwIEBACiAJbGV0IGc6ZXJsYW5nX2ZvbGRpbmcgPSAwCiBlbmRpZgogCi0iIExvY2FsIHNldHRpbmdzCi1mdW5jdGlvbiBzOlNldEVybGFuZ09wdGlvbnMoKQotCWNvbXBpbGVyIGVybGFuZwotCWlmIHZlcnNpb24gPj0gNzAwCi0JCXNldGxvY2FsIG9tbmlmdW5jPWVybGFuZ19jb21wbGV0ZSNDb21wbGV0ZQotCWVuZGlmCitsZXQgczplcmxhbmdfZnVuX2JlZ2luID0gJ15cYVx3KiguKiQnCitsZXQgczplcmxhbmdfZnVuX2VuZCAgID0gJ15bXiVdKlwuXHMqXCglLipcKVw/JCcKIAorZnVuY3Rpb24gczpTZXRFcmxhbmdPcHRpb25zKCkKIAlpZiBnOmVybGFuZ19mb2xkaW5nCiAJCXNldGxvY2FsIGZvbGRtZXRob2Q9ZXhwcgogCQlzZXRsb2NhbCBmb2xkZXhwcj1HZXRFcmxhbmdGb2xkKHY6bG51bSkKQEAgLTQ3LDEwNCArNDQsMzUgQEAKIAlsZXQgJmw6a2V5d29yZHByZyA9IGc6ZXJsYW5nX2tleXdvcmRwcmcKIGVuZGZ1bmN0aW9uCiAKLSIgRGVmaW5lIGZvbGRpbmcgZnVuY3Rpb25zCi1pZiAhZXhpc3RzKCcqR2V0RXJsYW5nRm9sZCcpCi0JIiBGb2xkaW5nIHBhcmFtcwotCWxldCBzOmVybGFuZ19mdW5fYmVnaW4gID0gJ15cYVx3KiguKiQnCi0JbGV0IHM6ZXJsYW5nX2Z1bl9lbmQgICAgPSAnXlteJV0qXC5ccypcKCUuKlwpXD8kJwotCWxldCBzOmVybGFuZ19ibGFua19saW5lID0gJ15ccypcKCUuKlwpXD8kJworZnVuY3Rpb24gR2V0RXJsYW5nRm9sZChsbnVtKQorCWxldCBsbnVtID0gYTpsbnVtCisJbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCiAKLQkiIEF1eGlsaWFyeSBmb2xkIGZ1bmN0aW9ucwotCWZ1bmN0aW9uIHM6R2V0TmV4dE5vbkJsYW5rKGxudW0pCi0JCWxldCBsbnVtID0gbmV4dG5vbmJsYW5rKGE6bG51bSArIDEpCi0JCWxldCBsaW5lID0gZ2V0bGluZShsbnVtKQotCQl3aGlsZSBsaW5lID1+IHM6ZXJsYW5nX2JsYW5rX2xpbmUgJiYgMCAhPSBsbnVtCi0JCQlsZXQgbG51bSA9IG5leHRub25ibGFuayhsbnVtICsgMSkKLQkJCWxldCBsaW5lID0gZ2V0bGluZShsbnVtKQotCQllbmR3aGlsZQotCQlyZXR1cm4gbG51bQotCWVuZGZ1bmN0aW9uCisJaWYgbGluZSA9fiBzOmVybGFuZ19mdW5fZW5kCisJCXJldHVybiAnPDEnCisJZW5kaWYKIAotCWZ1bmN0aW9uIHM6R2V0RnVuTmFtZShzdHIpCi0JCXJldHVybiBtYXRjaHN0cihhOnN0ciwgJ15cYVx3KihcQD0nKQotCWVuZGZ1bmN0aW9uCisJaWYgbGluZSA9fiBzOmVybGFuZ19mdW5fYmVnaW4gJiYgZm9sZGxldmVsKGxudW0gLSAxKSA9PSAxCisJCXJldHVybiAnMScKKwllbmRpZgogCi0JZnVuY3Rpb24gczpHZXRGdW5BcmdzKHN0ciwgbG51bSkKLQkJbGV0IHN0ciA9IGE6c3RyCi0JCWxldCBsbnVtID0gYTpsbnVtCi0JCXdoaWxlIHN0ciAhfiAnLT5ccypcKCUuKlwpXD8kJwotCQkJbGV0IGxudW0gPSBzOkdldE5leHROb25CbGFuayhsbnVtKQotCQkJaWYgMCA9PSBsbnVtICIgRU9GCi0JCQkJcmV0dXJuICcnCi0JCQllbmRpZgotCQkJbGV0IHN0ciAuPSBnZXRsaW5lKGxudW0pCi0JCWVuZHdoaWxlCi0JCXJldHVybiBtYXRjaHN0cihzdHIsIAotCQkJXCAnXCheKFxzKlwpXEA8PS4qXChccyopXChcc1wrd2hlblxzXCsuKlwpXD9cc1wrLT5ccypcKCUuKlwpXD8kXClcQD0nKQotCWVuZGZ1bmN0aW9uCisJaWYgbGluZSA9fiBzOmVybGFuZ19mdW5fYmVnaW4KKwkJcmV0dXJuICc+MScKKwllbmRpZgogCi0JZnVuY3Rpb24gczpDb3VudEZ1bkFyZ3MoYXJndW1lbnRzKQotCQlsZXQgcG9zID0gMAotCQlsZXQgYWMgPSAwICIgYXJnIGNvdW50Ci0JCWxldCBhcmd1bWVudHMgPSBhOmFyZ3VtZW50cwotCQkKLQkJIiBDaGFuZ2UgbGlzdCAvIHR1cGxlcyBpbnRvIGp1c3Qgb25lIEEocmd1bWVudCkKLQkJbGV0IGVybGFuZ190dXBsZSA9ICd7XChbQS1aYS16Xyx8PVwtXFtcXV1cfFxzXCkqfScKLQkJbGV0IGVybGFuZ19saXN0ICA9ICdcW1woW0EtWmEtel8sfD1cLXt9XVx8XHNcKSpcXScKKwlyZXR1cm4gJz0nCitlbmRmdW5jdGlvbgogCi0JCSIgRklYTUU6IFVzZSBzZWFyY2hwYWlyPwotCQl3aGlsZSBhcmd1bWVudHMgPX4gZXJsYW5nX3R1cGxlCi0JCQlsZXQgYXJndW1lbnRzID0gc3Vic3RpdHV0ZShhcmd1bWVudHMsIGVybGFuZ190dXBsZSwgJ0EnLCAnZycpCi0JCWVuZHdoaWxlCi0JCSIgRklYTUU6IFVzZSBzZWFyY2hwYWlyPwotCQl3aGlsZSBhcmd1bWVudHMgPX4gZXJsYW5nX2xpc3QKLQkJCWxldCBhcmd1bWVudHMgPSBzdWJzdGl0dXRlKGFyZ3VtZW50cywgZXJsYW5nX2xpc3QsICdBJywgJ2cnKQotCQllbmR3aGlsZQotCQkKLQkJbGV0IGxlbiA9IHN0cmxlbihhcmd1bWVudHMpCi0JCXdoaWxlIHBvcyA8IGxlbiAmJiBwb3MgPiAtMQotCQkJbGV0IGFjICs9IDEKLQkJCWxldCBwb3MgPSBtYXRjaGVuZChhcmd1bWVudHMsICcsXHMqJywgcG9zKQotCQllbmR3aGlsZQotCQlyZXR1cm4gYWMKLQllbmRmdW5jdGlvbgorZnVuY3Rpb24gRXJsYW5nRm9sZFRleHQoKQorCWxldCBsaW5lICAgID0gZ2V0bGluZSh2OmZvbGRzdGFydCkKKwlsZXQgZm9sZGxlbiA9IHY6Zm9sZGVuZCAtIHY6Zm9sZHN0YXJ0ICsgMQorCWxldCBsaW5lcyAgID0gJyAnIC4gZm9sZGxlbiAuICcgbGluZXM6ICcgLiBzdWJzdGl0dXRlKGxpbmUsICJbXCBcdF0qIiwgJycsICcnKQorCWlmIGZvbGRsZW4gPCAxMAorCQlsZXQgbGluZXMgPSAnICcgLiBsaW5lcworCWVuZGlmCisJbGV0IHJldHZhbCA9ICcrJyAuIHY6Zm9sZGRhc2hlcyAuIGxpbmVzCiAKLQkiIE1haW4gZm9sZCBmdW5jdGlvbgotCWZ1bmN0aW9uIEdldEVybGFuZ0ZvbGQobG51bSkKLQkJbGV0IGxudW0gPSBhOmxudW0KLQkJbGV0IGxpbmUgPSBnZXRsaW5lKGxudW0pCi0KLQkJaWYgbGluZSA9fiBzOmVybGFuZ19mdW5fZW5kCi0JCQlyZXR1cm4gJzwxJwotCQllbmRpZgotCi0JCWlmIGxpbmUgPX4gczplcmxhbmdfZnVuX2JlZ2luICYmIGZvbGRsZXZlbChsbnVtIC0gMSkgPT0gMQotCQkJcmV0dXJuICcxJwotCQllbmRpZgotCi0JCWlmIGxpbmUgPX4gczplcmxhbmdfZnVuX2JlZ2luCi0JCQlyZXR1cm4gJz4xJwotCQllbmRpZgotCi0JCXJldHVybiAnPScKLQllbmRmdW5jdGlvbgotCi0JIiBFcmxhbmcgZm9sZCBkZXNjcmlwdGlvbiAoZm9sZHRleHQgZnVuY3Rpb24pCi0JZnVuY3Rpb24gRXJsYW5nRm9sZFRleHQoKQotCQlsZXQgZm9sZGxlbiA9IHY6Zm9sZGVuZCAtIHY6Zm9sZHN0YXJ0Ci0JCWlmIDEgPCBmb2xkbGVuCi0JCQlsZXQgbGluZXMgPSAnbGluZXMnCi0JCWVsc2UKLQkJCWxldCBsaW5lcyA9ICdsaW5lJwotCQllbmRpZgotCQlsZXQgbGluZSA9IGdldGxpbmUodjpmb2xkc3RhcnQpCi0JCWxldCBuYW1lID0gczpHZXRGdW5OYW1lKGxpbmUpCi0JCWxldCBhcmd1bWVudHMgPSBzOkdldEZ1bkFyZ3Moc3RycGFydChsaW5lLCBzdHJsZW4obmFtZSkpLCB2OmZvbGRzdGFydCkKLQkJbGV0IGFyZ2NvdW50ID0gczpDb3VudEZ1bkFyZ3MoYXJndW1lbnRzKQotCQlsZXQgcmV0dmFsID0gJysnIC4gdjpmb2xkZGFzaGVzIC4gJyAnIC4gbmFtZSAuICcvJyAuIGFyZ2NvdW50Ci0JCWxldCByZXR2YWwgLj0gJyAoJyAuIGZvbGRsZW4gLiAnICcgLiBsaW5lcyAuICcpJwotCQlyZXR1cm4gcmV0dmFsCi0JZW5kZnVuY3Rpb24KLWVuZGlmCisJcmV0dXJuIHJldHZhbAorZW5kZnVuY3Rpb24KIAogY2FsbCBzOlNldEVybGFuZ09wdGlvbnMoKQo=