ZGlmZiAtLWdpdCBhL01hYy9zY3JpcHRzL2JpbmhleHRyZWUucHkgYi9NYWMvc2NyaXB0cy9iaW5oZXh0cmVlLnB5CmluZGV4IDUzNWJjN2IuLmIzOWNhYzkgMTAwNjQ0Ci0tLSBhL01hYy9zY3JpcHRzL2JpbmhleHRyZWUucHkKKysrIGIvTWFjL3NjcmlwdHMvYmluaGV4dHJlZS5weQpAQCAtMjMsNiArMjMsOCBAQAogCiAjIFdoZXJlIHRvIHB1dCBDVyBwcm9qZWN0cywgcmVsYXRpdmUgdG8gVE9QCiBDV0RJUj0nOk1hYzptd2Vya3M6cHJvamVjdHMnCisjIEZyb20gd2hpY2ggZm9sZGVycyB0byBwdXQgcHJvamVjdHMgdGhlcmUKK0NXRElSRElSUz1bJ2J1aWxkLm1hY3BwYy5zdGFuZCcsICdidWlsZC5tYWNwcGMuc2hhcmVkJywgJ2J1aWxkLm1hYzY4ay5zdGFuZCcsICdidWlsZC5tYWM2OGsuc2hhcmVkJywgJ1BsdWdJbnMnXQogCiAjIEhlbHBlciByb3V0aW5lcwogZGVmIGJpbmhleGl0KHBhdGgsIG5hbWUpOgpAQCAtODAsMTMgKzgyLDE1IEBACiAJCQogCQlpZiBzcmNmaWxlWy0xXSA9PSAntSc6CiAJCQlkc3RmaWxlID0gc3JjZmlsZVs6LTFdKydtdS5ocXgnCisJCWVsaWYgc3JjZmlsZVstM10gPT0gJy5tdSc6CisJCQlkc3RmaWxlID0gc3JjZmlsZSArICcuaHF4JwogCQllbGlmIG9yZChzcmNmaWxlWy0xXSkgPj0gMTI4OgogCQkJZHN0ZmlsZSA9IHNyY2ZpbGVbOi0xXStgb3JkKHNyY2ZpbGVbLTFdKWArJy5ocXgnCiAJCWVsc2U6CiAJCQlkc3RmaWxlID0gc3JjZmlsZSArICcuaHF4JwogCQkJCiAJCWlmIG9zLnBhdGguZXhpc3RzKGRzdGZpbGUpIGFuZCBcCi0JCQkJb3Muc3RhdChkc3RmaWxlKVs4XSA+IG9zLnN0YXQoc3JjZmlsZSlbOF06CisJCQkJb3Muc3RhdChkc3RmaWxlKVs4XSA+PSBvcy5zdGF0KHNyY2ZpbGUpWzhdOgogCQkJcHJpbnQgJ1NraXAnLCBkc3RmaWxlLCctIFVwLXRvLWRhdGUnCiAJCQljb250aW51ZQogCQlwcmludCAnQ29tcGFjdGluZycsIGRzdGZpbGUKQEAgLTEwNCwyMCArMTA4LDI2IEBACiAJZ2xvYmFsIHByb2plY3RfZmlsZXMKIAkKIAlkc3RkaXIgPSBvcy5wYXRoLmpvaW4oVE9QLCBDV0RJUikKLQlpZiBub3Qgb3MucGF0aC5leGlzdHMoZHN0ZGlyKToKLQkJcHJpbnQgZHN0ZGlyCi0JCXByaW50ICdObyBDVy1wcm9qZWN0IGRpciwgc2tpcCcsIG5hbWUKKwlpZiBwYXRoWzpsZW4oZHN0ZGlyKV0gPT0gZHN0ZGlyOgogCQlyZXR1cm4KLQlkc3RmaWxlID0gb3MucGF0aC5qb2luKGRzdGRpciwgbmFtZSkKLQkjIENoZWNrIHRoYXQgd2UncmUgbm90IGluIHRoZSBkZXN0IGRpcmVjdG9yeQotCWlmIGRzdGZpbGUgPT0gcGF0aDoKLQkJcmV0dXJuCisJc3JjZGlyID0gb3MucGF0aC5zcGxpdChwYXRoKVswXQorCXNyY2RpciA9IG9zLnBhdGguc3BsaXQoc3JjZGlyKVsxXQorCWlmIHNyY2RpciBpbiBDV0RJUkRJUlM6CisJCWlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkc3RkaXIpOgorCQkJcHJpbnQgZHN0ZGlyCisJCQlwcmludCAnTm8gQ1ctcHJvamVjdCBkaXIsIHNraXAnLCBuYW1lCisJCQlyZXR1cm4KKwkJZHN0ZmlsZSA9IG9zLnBhdGguam9pbihkc3RkaXIsIG5hbWUpCisJZWxzZToKKwkJaWYgcGF0aFstMjpdICE9ICcutSc6CisJCQlyZXR1cm4KKwkJZHN0ZmlsZSA9IHBhdGhbOi0yXSsgJy5tdScKIAogCSMgSWYgdGhlIGRlc3RpbmF0aW9uIGRvZXNuJ3QgZXhpc3RzIG9yIGlzIG9sZGVyIHRoYXQgdGhlIHNvdXJjZQogCSMgd2UgY29weSBhbmQgcmVtZW1iZXIgaXQKIAkKIAlpZiBvcy5wYXRoLmV4aXN0cyhkc3RmaWxlKSBhbmQgXAotCQkJb3Muc3RhdChkc3RmaWxlKVs4XSA+IG9zLnN0YXQocGF0aClbOF06CisJCQlvcy5zdGF0KGRzdGZpbGUpWzhdID49IG9zLnN0YXQocGF0aClbOF06CiAJCXByaW50ICdOb3QgY29weWluZycsIHBhdGgsJy0gVXAtdG8tZGF0ZScKIAllbHNlOgogCQlwcmludCAnQ29weScsIHBhdGgKQEAgLTEzNiwyMiArMTQ2LDI4IEBACiAJZ2xvYmFsIHByb2plY3RfZmlsZXMKIAkKIAlkc3RkaXIgPSBvcy5wYXRoLmpvaW4oVE9QLCBDV0RJUikKLQlpZiBub3Qgb3MucGF0aC5leGlzdHMoZHN0ZGlyKToKLQkJcHJpbnQgZHN0ZGlyCi0JCXByaW50ICdObyBDVy1wcm9qZWN0IGRpciwgc2tpcCcsIG5hbWUKKwlpZiBwYXRoWzpsZW4oZHN0ZGlyKV0gPT0gZHN0ZGlyOgogCQlyZXR1cm4KLQlkc3RmaWxlID0gb3MucGF0aC5qb2luKGRzdGRpciwgbmFtZSkKKwlzcmNkaXIgPSBvcy5wYXRoLnNwbGl0KHBhdGgpWzBdCisJc3JjZGlyID0gb3MucGF0aC5zcGxpdChzcmNkaXIpWzFdCisJaWYgc3JjZGlyIGluIENXRElSRElSUzoKKwkJaWYgbm90IG9zLnBhdGguZXhpc3RzKGRzdGRpcik6CisJCQlwcmludCBkc3RkaXIKKwkJCXByaW50ICdObyBDVy1wcm9qZWN0IGRpciwgc2tpcCcsIG5hbWUKKwkJCXJldHVybgorCQlkc3RmaWxlID0gb3MucGF0aC5qb2luKGRzdGRpciwgbmFtZSkKKwllbHNlOgorCQlpZiBwYXRoWy02Ol0gIT0gJy61LmV4cCc6CisJCQlyZXR1cm4KKwkJZHN0ZmlsZSA9IHBhdGhbOi02XSArICcubXUuZXhwJwogCWlmIGRzdGZpbGVbLTY6XSA9PSAnLrUuZXhwJzoKIAkJZHN0ZmlsZSA9IGRzdGZpbGVbOi02XSsnLm11LmV4cCcKLQkjIENoZWNrIHRoYXQgd2UncmUgbm90IGluIHRoZSBkZXN0IGRpcmVjdG9yeQotCWlmIGRzdGZpbGUgPT0gcGF0aDoKLQkJcmV0dXJuCiAKIAkjIElmIHRoZSBkZXN0aW5hdGlvbiBkb2Vzbid0IGV4aXN0cyBvciBpcyBvbGRlciB0aGF0IHRoZSBzb3VyY2UKIAkjIHdlIGNvcHkgYW5kIHJlbWVtYmVyIGl0CiAJCiAJaWYgb3MucGF0aC5leGlzdHMoZHN0ZmlsZSkgYW5kIFwKLQkJCW9zLnN0YXQoZHN0ZmlsZSlbOF0gPiBvcy5zdGF0KHBhdGgpWzhdOgorCQkJb3Muc3RhdChkc3RmaWxlKVs4XSA+PSBvcy5zdGF0KHBhdGgpWzhdOgogCQlwcmludCAnTm90IGNvcHlpbmcnLCBwYXRoLCctIFVwLXRvLWRhdGUnCiAJZWxzZToKIAkJcHJpbnQgJ0NvcHknLCBwYXRoCg==