ZGlmZiAtLWdpdCBhL0RlbW8vY2dpL3dpa2kucHkgYi9EZW1vL2NnaS93aWtpLnB5CmluZGV4IGVlMDk0YTguLjJmOTQ0ZDYgMTAwNjQ0Ci0tLSBhL0RlbW8vY2dpL3dpa2kucHkKKysrIGIvRGVtby9jZ2kvd2lraS5weQpAQCAtMTE5LDUgKzExOSw1IEBACiAgICAgICAgICAgICAgICAgZi53cml0ZSgnXG4nKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICByZXR1cm4gIiIKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcmV0dXJuICJJT0Vycm9yOiAlcyIgJSBzdHIoZXJyKQpkaWZmIC0tZ2l0IGEvRGVtby9jb21wYXJpc29ucy9yZWdleHRlc3QucHkgYi9EZW1vL2NvbXBhcmlzb25zL3JlZ2V4dGVzdC5weQppbmRleCBiMjdkNzQxLi4xZmFiMDUyIDEwMDc1NQotLS0gYS9EZW1vL2NvbXBhcmlzb25zL3JlZ2V4dGVzdC5weQorKysgYi9EZW1vL2NvbXBhcmlzb25zL3JlZ2V4dGVzdC5weQpAQCAtMjgsNyArMjgsNyBAQAogICAgIGZvciBmaWxlIGluIHN5cy5hcmd2WzE6XToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGUsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQgIiVzOiAlcyIgJSAoZmlsZSwgbXNnKQogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgbGluZW5vID0gMApkaWZmIC0tZ2l0IGEvRGVtby9jb21wYXJpc29ucy9zeXN0ZW10ZXN0LnB5IGIvRGVtby9jb21wYXJpc29ucy9zeXN0ZW10ZXN0LnB5CmluZGV4IGJiYzMxM2IuLmQzZmM3MmIgMTAwNzU1Ci0tLSBhL0RlbW8vY29tcGFyaXNvbnMvc3lzdGVtdGVzdC5weQorKysgYi9EZW1vL2NvbXBhcmlzb25zL3N5c3RlbXRlc3QucHkKQEAgLTQxLDcgKzQxLDcgQEAKIGRlZiByZXBvcnRib2d1c2xpbmtzKHByZWZpeCk6CiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoJy4nKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50ICIlcyVzOiBjYW4ndCBsaXN0OiAlcyIgJSAocHJlZml4LCAnLicsIG1zZykKICAgICAgICAgcmV0dXJuCiAgICAgbmFtZXMuc29ydCgpCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIGVsaWYgU19JU0RJUihtb2RlKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5jaGRpcihuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHByaW50ICIlcyVzOiBjYW4ndCBjaGRpcjogJXMiICUgXAogICAgICAgICAgICAgICAgICAgICAgIChwcmVmaXgsIG5hbWUsIG1zZykKICAgICAgICAgICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEvRGVtby9wYXJzZXIvdGVzdF9wYXJzZXIucHkgYi9EZW1vL3BhcnNlci90ZXN0X3BhcnNlci5weQppbmRleCBiZTM5YmNhLi4xNTg5ZjNiIDEwMDc1NQotLS0gYS9EZW1vL3BhcnNlci90ZXN0X3BhcnNlci5weQorKysgYi9EZW1vL3BhcnNlci90ZXN0X3BhcnNlci5weQpAQCAtMTcsNyArMTcsNyBAQAogICAgICAgICAjIGFnYWluc3QgYSBsYXJnZSBzb3VyY2UgZmlsZSBsaWtlIFRraW50ZXIucHkuCiAgICAgICAgIGFzdCA9IE5vbmUKICAgICAgICAgbmV3ID0gcGFyc2VyLnR1cGxlMmFzdCh0dXApCi0gICAgZXhjZXB0IHBhcnNlci5QYXJzZXJFcnJvciwgZXJyOgorICAgIGV4Y2VwdCBwYXJzZXIuUGFyc2VyRXJyb3IgYXMgZXJyOgogICAgICAgICBwcmludAogICAgICAgICBwcmludCAncGFyc2VyIG1vZHVsZSByYWlzZWQgZXhjZXB0aW9uIG9uIGlucHV0IGZpbGUnLCBmaWxlTmFtZSArICc6JwogICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKZGlmZiAtLWdpdCBhL0RlbW8vcGFyc2VyL3VucGFyc2UucHkgYi9EZW1vL3BhcnNlci91bnBhcnNlLnB5CmluZGV4IDMyYWNiZWQuLjFjNmU5MzMgMTAwNjQ0Ci0tLSBhL0RlbW8vcGFyc2VyL3VucGFyc2UucHkKKysrIGIvRGVtby9wYXJzZXIvdW5wYXJzZS5weQpAQCAtNDkyLDcgKzQ5Miw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnQgJ1Rlc3RpbmcgJXMnICUgZnVsbG5hbWUKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHJvdW5kdHJpcChmdWxsbmFtZSwgb3V0cHV0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgICAgICBwcmludCAnICBGYWlsZWQgdG8gY29tcGlsZSwgZXhjZXB0aW9uIGlzICVzJyAlIHJlcHIoZSkKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihmdWxsbmFtZSk6CiAgICAgICAgICAgICAgICAgdGVzdGRpcihmdWxsbmFtZSkKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvRlNQcm94eS5weSBiL0RlbW8vcGRpc3QvRlNQcm94eS5weQppbmRleCBhMWFiNjM1Li5kYWQ0MDE1IDEwMDc1NQotLS0gYS9EZW1vL3BkaXN0L0ZTUHJveHkucHkKKysrIGIvRGVtby9wZGlzdC9GU1Byb3h5LnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZzID0gbWFjZnMuRlNTcGVjKG5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGMsIHQgPSBmcy5HZXRDcmVhdG9yVHlwZSgpCiAgICAgICAgICAgICAgICAgICAgIGlmIHQgIT0gJ1RFWFQnOiByZXR1cm4gMAotICAgICAgICAgICAgICAgIGV4Y2VwdCBtYWNmcy5lcnJvciwgbXNnOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBtYWNmcy5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgICAgIHByaW50ICIqKioiLCBuYW1lLCBtc2cKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvY21kZncucHkgYi9EZW1vL3BkaXN0L2NtZGZ3LnB5CmluZGV4IGUyZWRkMGEuLjQ3ZDEzYmMgMTAwNzU1Ci0tLSBhL0RlbW8vcGRpc3QvY21kZncucHkKKysrIGIvRGVtby9wZGlzdC9jbWRmdy5weQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBpZiBhcmdzIGlzIE5vbmU6IGFyZ3MgPSBzeXMuYXJndlsxOl0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJncywgc2VsZi5HbG9iYWxGbGFncykKLSAgICAgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHJldHVybiBzZWxmLnVzYWdlKG1zZykKICAgICAgICAgc2VsZi5vcHRpb25zKG9wdHMpCiAgICAgICAgIGlmIG5vdCBhcmdzOgpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgICAgIGZsYWdzID0gJycKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzWzE6XSwgZmxhZ3MpCi0gICAgICAgICAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi51c2FnZSgKICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJjb21tYW5kICVzOiAiICUgY21kICsgc3RyKG1zZykpCiAgICAgICAgICAgICBzZWxmLnJlYWR5KCkKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvY21wdHJlZS5weSBiL0RlbW8vcGRpc3QvY21wdHJlZS5weQppbmRleCBmYTA2ZjVmLi41MDMxODY5IDEwMDc1NQotLS0gYS9EZW1vL3BkaXN0L2NtcHRyZWUucHkKKysrIGIvRGVtby9wZGlzdC9jbXB0cmVlLnB5CkBAIC0xMzUsNyArMTM1LDcgQEAKIGRlZiBzZW5kZmlsZShsb2NhbCwgcmVtb3RlLCBuYW1lKToKICAgICB0cnk6CiAgICAgICAgIHJlbW90ZS5jcmVhdGUobmFtZSkKLSAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSwgbXNnOgorICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpIGFzIG1zZzoKICAgICAgICAgcHJpbnQgImNhbm5vdCBjcmVhdGU6IiwgbXNnCiAgICAgICAgIHJldHVybgogCkBAIC0xNzEsNyArMTcxLDcgQEAKIGRlZiByZWN2ZmlsZV9yZWFsKGxvY2FsLCByZW1vdGUsIG5hbWUpOgogICAgIHRyeToKICAgICAgICAgbG9jYWwuY3JlYXRlKG5hbWUpCi0gICAgZXhjZXB0IChJT0Vycm9yLCBvcy5lcnJvciksIG1zZzoKKyAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSBhcyBtc2c6CiAgICAgICAgIHByaW50ICJjYW5ub3QgY3JlYXRlOiIsIG1zZwogICAgICAgICByZXR1cm4KIApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9jdnNsb2NrLnB5IGIvRGVtby9wZGlzdC9jdnNsb2NrLnB5CmluZGV4IDhmNmQwMDguLjY0ODRlNzEgMTAwNzU1Ci0tLSBhL0RlbW8vcGRpc3QvY3ZzbG9jay5weQorKysgYi9EZW1vL3BkaXN0L2N2c2xvY2sucHkKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICAgICAgICAgIHNlbGYubG9ja2RpciA9IHNlbGYuY3ZzbGNrCiAgICAgICAgICAgICAgICAgb3MubWtkaXIoc2VsZi5jdnNsY2ssIDA3NzcpCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2NrZGlyID0gTm9uZQogICAgICAgICAgICAgICAgIGlmIG1zZ1swXSA9PSBFRVhJU1Q6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgICBmb3IgciBpbiByZXBvc2l0b3JpZXM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbG9ja3MuYXBwZW5kKFdyaXRlTG9jayhyLCAwKSkKLSAgICAgICAgICAgIGV4Y2VwdCBMb2NrZWQsIGluc3RhbmNlOgorICAgICAgICAgICAgZXhjZXB0IExvY2tlZCBhcyBpbnN0YW5jZToKICAgICAgICAgICAgICAgICBkZWwgbG9ja3MKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9ycmNzLnB5IGIvRGVtby9wZGlzdC9ycmNzLnB5CmluZGV4IDRkMjNlNmMuLjU0MGQyOTYgMTAwNzU1Ci0tLSBhL0RlbW8vcGRpc3QvcnJjcy5weQorKysgYi9EZW1vL3BkaXN0L3JyY3MucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgICAgIHJhaXNlIGdldG9wdC5lcnJvciwgInVua25vd24gY29tbWFuZCIKICAgICAgICAgY29wdHNldCwgZnVuYyA9IGNvbW1hbmRzW2NtZF0KICAgICAgICAgY29wdHMsIGZpbGVzID0gZ2V0b3B0LmdldG9wdChyZXN0LCBjb3B0c2V0KQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHByaW50ICJ1c2FnZTogcnJjcyBbb3B0aW9uc10gY29tbWFuZCBbb3B0aW9uc10gW2ZpbGVdIC4uLiIKICAgICAgICAgcHJpbnQgIndoZXJlIGNvbW1hbmQgY2FuIGJlOiIKQEAgLTQxLDcgKzQxLDcgQEAKICAgICBmb3IgZm4gaW4gZmlsZXM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ1bmMoeCwgY29wdHMsIGZuKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSwgbXNnOgorICAgICAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCAiJXM6ICVzIiAlIChmbiwgbXNnKQogCiBkZWYgY2hlY2tpbih4LCBjb3B0cywgZm4pOgpkaWZmIC0tZ2l0IGEvRGVtby9weXN2ci9weXN2ci5weSBiL0RlbW8vcHlzdnIvcHlzdnIucHkKaW5kZXggM2I2OTJiMy4uYjFiNzU2NSAxMDA3NTUKLS0tIGEvRGVtby9weXN2ci9weXN2ci5weQorKysgYi9EZW1vL3B5c3ZyL3B5c3ZyLnB5CkBAIC0yMSwxNCArMjEsMTQgQEAKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiIikKICAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToKICAgICAgICAgICAgIHJhaXNlIGdldG9wdC5lcnJvciwgIlRvbyBtYW55IGFyZ3VtZW50cy4iCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICB1c2FnZShtc2cpCiAgICAgZm9yIG8sIGEgaW4gb3B0czoKICAgICAgICAgcGFzcwogICAgIGlmIGFyZ3M6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBvcnQgPSBzdHJpbmcuYXRvaShhcmdzWzBdKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICB1c2FnZShtc2cpCiAgICAgZWxzZToKICAgICAgICAgcG9ydCA9IFBPUlQKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgc291cmNlID0gc291cmNlICsgbGluZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb2RlID0gY29tcGlsZV9jb21tYW5kKHNvdXJjZSkKLSAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzb3VyY2UgPSAiIgogICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbihTeW50YXhFcnJvciwgZXJyLCBOb25lLCBmaWxlPXN0ZG91dCkKICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIHNvdXJjZSA9ICIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJ1bl9jb21tYW5kKGNvZGUsIHN0ZGluLCBzdGRvdXQsIGdsb2JhbHMpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBob3c6CisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGhvdzoKICAgICAgICAgICAgIGlmIGhvdzoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGhvdyA9IHN0cihob3cpCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgc3lzLnN0ZGluID0gc3RkaW4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXhlYyhjb2RlLCBnbG9iYWxzKQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgaG93OgorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBob3c6CiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0LCBob3csIHN5cy5leGNfaW5mbygpWzJdCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCmRpZmYgLS1naXQgYS9EZW1vL3JwYy9uZnNjbGllbnQucHkgYi9EZW1vL3JwYy9uZnNjbGllbnQucHkKaW5kZXggOGU1YTE5OS4uMzg5MGFmZiAxMDA2NDQKLS0tIGEvRGVtby9ycGMvbmZzY2xpZW50LnB5CisrKyBiL0RlbW8vcnBjL25mc2NsaWVudC5weQpAQCAtMTk0LDggKzE5NCw3IEBACiAgICAgZmggPSBzZlsxXQogICAgIGlmIGZoOgogICAgICAgICBuY2wgPSBORlNDbGllbnQoaG9zdCkKLSAgICAgICAgYXMgPSBuY2wuR2V0YXR0cihmaCkKLSAgICAgICAgcHJpbnQgYXMKKyAgICAgICAgcHJpbnQgbmNsLkdldGF0dHIoZmgpCiAgICAgICAgIGxpc3QgPSBuY2wuTGlzdGRpcihmaCkKICAgICAgICAgZm9yIGl0ZW0gaW4gbGlzdDogcHJpbnQgaXRlbQogICAgICAgICBtY2wuVW1udChmaWxlc3lzKQpkaWZmIC0tZ2l0IGEvRGVtby9ycGMvcnBjLnB5IGIvRGVtby9ycGMvcnBjLnB5CmluZGV4IDE0MWZlMDkuLmY3MjMxYzEgMTAwNjQ0Ci0tLSBhL0RlbW8vcnBjL3JwYy5weQorKysgYi9EZW1vL3JwYy9ycGMucHkKQEAgLTMzMCw3ICszMzAsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLmJpbmQoKGhvc3QsIGkpKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RfcmVzdl9wb3J0X3RyaWVkCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIChlcnJubywgbXNnKToKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgKGVycm5vLCBtc2cpID0gZQogICAgICAgICAgICAgaWYgZXJybm8gIT0gMTE0OgogICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvciwgKGVycm5vLCBtc2cpCiAgICAgcmFpc2UgUnVudGltZUVycm9yLCAnY2FuXCd0IGFzc2lnbiByZXNlcnZlZCBwb3J0JwpAQCAtNzY1LDcgKzc2Niw3IEBACiAgICAgICAgICAgICAgICAgY2FsbCA9IHJlY3ZyZWNvcmQoc29jaykKICAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcHJpbnQgJ3NvY2tldCBlcnJvcjonLCBtc2cKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgcmVwbHkgPSBzZWxmLmhhbmRsZShjYWxsKQpAQCAtODY2LDcgKzg2Nyw3IEBACiAgICAgcyA9IFMoJycsIDB4MjAwMDAwMDAsIDEsIDApCiAgICAgdHJ5OgogICAgICAgICBzLnVucmVnaXN0ZXIoKQotICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgJ1J1bnRpbWVFcnJvcjonLCBtc2csICcoaWdub3JlZCknCiAgICAgcy5yZWdpc3RlcigpCiAgICAgcHJpbnQgJ1NlcnZpY2Ugc3RhcnRlZC4uLicKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9lcWZpeC5weSBiL0RlbW8vc2NyaXB0cy9lcWZpeC5weQppbmRleCAzNWM0M2FhLi40OTdhYjIwIDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvZXFmaXgucHkKKysrIGIvRGVtby9zY3JpcHRzL2VxZml4LnB5CkBAIC02Miw3ICs2Miw3IEBACiAgICAgYmFkID0gMAogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogY2Fubm90IGxpc3QgZGlyZWN0b3J5OiAlclxuJyAlIChkaXJuYW1lLCBtc2cpKQogICAgICAgICByZXR1cm4gMQogICAgIG5hbWVzLnNvcnQoKQpAQCAtODMsNyArODMsNyBAQAogIyMgICAgICBkYmcoJ2ZpeCglcilcbicgJSAoZGlybmFtZSwpKQogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICdyJykKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogY2Fubm90IG9wZW46ICVyXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICByZXR1cm4gMQogICAgIGhlYWQsIHRhaWwgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICBpZiBnIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBnID0gb3Blbih0ZW1wbmFtZSwgJ3cnKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgZXJyKCclczogY2Fubm90IGNyZWF0ZTogJXJcbicgJSAodGVtcG5hbWUsIG1zZykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCkBAIC0xNDQsMTcgKzE0NCwxNyBAQAogICAgIHRyeToKICAgICAgICAgc3RhdGJ1ZiA9IG9zLnN0YXQoZmlsZW5hbWUpCiAgICAgICAgIG9zLmNobW9kKHRlbXBuYW1lLCBzdGF0YnVmW1NUX01PREVdICYgMDc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogd2FybmluZzogY2htb2QgZmFpbGVkICglcilcbicgJSAodGVtcG5hbWUsIG1zZykpCiAgICAgIyBUaGVuIG1ha2UgYSBiYWNrdXAgb2YgdGhlIG9yaWdpbmFsIGZpbGUgYXMgZmlsZW5hbWV+CiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJ34nKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHdhcm5pbmc6IGJhY2t1cCBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogcmVuYW1lIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICByZXR1cm4gMQogICAgICMgUmV0dXJuIHN1Y2NlcwpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL2Z0cHN0YXRzLnB5IGIvRGVtby9zY3JpcHRzL2Z0cHN0YXRzLnB5CmluZGV4IDVjMTU5OWUuLmM3YzA3NDkgMTAwNzU1Ci0tLSBhL0RlbW8vc2NyaXB0cy9mdHBzdGF0cy5weQorKysgYi9EZW1vL3NjcmlwdHMvZnRwc3RhdHMucHkKQEAgLTI1LDcgKzI1LDcgQEAKICAgICBzZWFyY2ggPSBOb25lCiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdtOnM6JykKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50IG1zZwogICAgICAgICBwcmludCAndXNhZ2U6IGZ0cHN0YXRzIFstbSBtYXhpdGVtc10gW2ZpbGVdJwogICAgICAgICBzeXMuZXhpdCgyKQpAQCAtNDEsNyArNDEsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGUsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQgZmlsZSwgJzonLCBtc2cKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgYnlkYXRlID0ge30KZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9tYm94Y29udmVydC5weSBiL0RlbW8vc2NyaXB0cy9tYm94Y29udmVydC5weQppbmRleCA4YzQ2MmYzLi44ZGEzN2JmIDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvbWJveGNvbnZlcnQucHkKKysrIGIvRGVtby9zY3JpcHRzL21ib3hjb252ZXJ0LnB5CkBAIC0xNiw3ICsxNiw3IEBACiAgICAgZG9maWxlID0gbW1kZgogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnZicpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCclc1xuJyAlIG1zZykKICAgICAgICAgc3lzLmV4aXQoMikKICAgICBmb3IgbywgYSBpbiBvcHRzOgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKGFyZyk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4oYXJnKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCclczogJXNcbicgJSAoYXJnLCBtc2cpKQogICAgICAgICAgICAgICAgIHN0cyA9IDEKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICBmbiA9IG9zLnBhdGguam9pbihkaXIsIG1zZykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyVzOiAlc1xuJyAlIChmbiwgbXNnKSkKICAgICAgICAgICAgIHN0cyA9IDEKICAgICAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvbmV3c2xpc3QucHkgYi9EZW1vL3NjcmlwdHMvbmV3c2xpc3QucHkKaW5kZXggYTYzMTIxNC4uMDExMWFjZSAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL25ld3NsaXN0LnB5CisrKyBiL0RlbW8vc2NyaXB0cy9uZXdzbGlzdC5weQpAQCAtMzMwLDcgKzMzMCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzID0gTk5UUChuZXdzaG9zdCkKICAgICAgICAgY29ubmVjdGVkID0gMQotICAgIGV4Y2VwdCAobm50cGxpYi5lcnJvcl90ZW1wLCBubnRwbGliLmVycm9yX3Blcm0pLCB4OgorICAgIGV4Y2VwdCAobm50cGxpYi5lcnJvcl90ZW1wLCBubnRwbGliLmVycm9yX3Blcm0pIGFzIHg6CiAgICAgICAgIHByaW50ICdFcnJvciBjb25uZWN0aW5nIHRvIGhvc3Q6JywgeAogICAgICAgICBwcmludCAnSVwnbGwgdHJ5IHRvIHVzZSBqdXN0IHRoZSBsb2NhbCBsaXN0LicKICAgICAgICAgY29ubmVjdGVkID0gMApkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3BwLnB5IGIvRGVtby9zY3JpcHRzL3BwLnB5CmluZGV4IDA0OTFmYTkuLjI1MzBlYTMgMTAwNzU1Ci0tLSBhL0RlbW8vc2NyaXB0cy9wcC5weQorKysgYi9EZW1vL3NjcmlwdHMvcHAucHkKQEAgLTM1LDcgKzM1LDcgQEAKIAogdHJ5OgogICAgIG9wdGxpc3QsIEFSR1MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2FjZGU6RjpucCcpCi1leGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CitleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICBzeXMuc3RkZXJyLndyaXRlKHN5cy5hcmd2WzBdICsgJzogJyArIG1zZyArICdcbicpCiAgICAgc3lzLmV4aXQoMikKIApkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3VwZGF0ZS5weSBiL0RlbW8vc2NyaXB0cy91cGRhdGUucHkKaW5kZXggZWFjMWEyMi4uYTk2NWU0YSAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL3VwZGF0ZS5weQorKysgYi9EZW1vL3NjcmlwdHMvdXBkYXRlLnB5CkBAIC0xOSw3ICsxOSw3IEBACiAgICAgICAgIHNlbGYuY2hhbmdlZCA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5saW5lcyA9IG9wZW4oZmlsZW5hbWUsICdyJykucmVhZGxpbmVzKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQgJyoqKiBDYW5cJ3Qgb3BlbiAiJXMiOicgJSBmaWxlbmFtZSwgbXNnCiAgICAgICAgICAgICBzZWxmLmxpbmVzID0gTm9uZQogICAgICAgICAgICAgcmV0dXJuCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJlbmFtZShzZWxmLmZpbGVuYW1lLCBzZWxmLmZpbGVuYW1lICsgJ34nKQogICAgICAgICAgICAgZnAgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICd3JykKLSAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgSU9FcnJvciksIG1zZzoKKyAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgSU9FcnJvcikgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQgJyoqKiBDYW5cJ3QgcmV3cml0ZSAiJXMiOicgJSBzZWxmLmZpbGVuYW1lLCBtc2cKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBwcmludCAnd3JpdGluZycsIHNlbGYuZmlsZW5hbWUKQEAgLTY3LDcgKzY3LDcgQEAKICAgICBpZiBzeXMuYXJndlsxOl06CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gb3BlbihzeXMuYXJndlsxXSwgJ3InKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCAnQ2FuXCd0IG9wZW4gIiVzIjonICUgc3lzLmFyZ3ZbMV0sIG1zZwogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL2dvcGhlci5weSBiL0RlbW8vc29ja2V0cy9nb3BoZXIucHkKaW5kZXggMmM0NmRhNi4uMDYzNWFjMSAxMDA3NTUKLS0tIGEvRGVtby9zb2NrZXRzL2dvcGhlci5weQorKysgYi9EZW1vL3NvY2tldHMvZ29waGVyLnB5CkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAndG9vIG1hbnkgYXJncycKICAgICB0cnk6CiAgICAgICAgIGJyb3dzZV9tZW51KHNlbGVjdG9yLCBob3N0LCBwb3J0KQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgJ1NvY2tldCBlcnJvcjonLCBtc2cKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CkBAIC0yMDIsNyArMjAyLDcgQEAKICAgICAgICAgcCA9IG9zLnBvcGVuKCcke1BBR0VSLW1vcmV9JywgJ3cnKQogICAgICAgICB4ID0gU2F2ZUxpbmVzKHApCiAgICAgICAgIGdldF9hbHRfdGV4dGZpbGUoc2VsZWN0b3IsIGhvc3QsIHBvcnQsIHgud3JpdGVsbikKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgJ0lPRXJyb3I6JywgbXNnCiAgICAgaWYgeDoKICAgICAgICAgeC5jbG9zZSgpCkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICB0cnk6CiAgICAgICAgIGdldF9hbHRfdGV4dGZpbGUoc2VsZWN0b3IsIGhvc3QsIHBvcnQsIHgud3JpdGVsbikKICAgICAgICAgcHJpbnQgJ0RvbmUuJwotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludCAnSU9FcnJvcjonLCBtc2cKICAgICB4LmNsb3NlKCkKIApAQCAtMzExLDcgKzMxMSw3IEBACiAgICAgICAgIGNtZCA9IHNhdmVmaWxlWzE6XS5zdHJpcCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSBvcy5wb3BlbihjbWQsICd3JykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQgcmVwcihjbWQpLCAnOicsIG1zZwogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgcHJpbnQgJ1BpcGluZyB0aHJvdWdoJywgcmVwcihjbWQpLCAnLi4uJwpAQCAtMzIwLDcgKzMyMCw3IEBACiAgICAgICAgIHNhdmVmaWxlID0gb3MucGF0aC5leHBhbmR1c2VyKHNhdmVmaWxlKQogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oc2F2ZWZpbGUsICd3JykKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgcmVwcihzYXZlZmlsZSksICc6JywgbXNnCiAgICAgICAgIHJldHVybiBOb25lCiAgICAgcHJpbnQgJ1NhdmluZyB0bycsIHJlcHIoc2F2ZWZpbGUpLCAnLi4uJwpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL3RlbG5ldC5weSBiL0RlbW8vc29ja2V0cy90ZWxuZXQucHkKaW5kZXggZDUwYzM3Zi4uNmJjOWJjYyAxMDA3NTUKLS0tIGEvRGVtby9zb2NrZXRzL3RlbG5ldC5weQorKysgYi9EZW1vL3NvY2tldHMvdGVsbmV0LnB5CkBAIC01Miw3ICs1Miw3IEBACiAgICAgIwogICAgIHRyeToKICAgICAgICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKLSAgICBleGNlcHQgZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZXJyb3IgYXMgbXNnOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdjb25uZWN0IGZhaWxlZDogJyArIHJlcHIobXNnKSArICdcbicpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgIwpkaWZmIC0tZ2l0IGEvRGVtby90aHJlYWRzL2ZpbmQucHkgYi9EZW1vL3RocmVhZHMvZmluZC5weQppbmRleCAxNDE0OGI4Li42OGNhMTU1IDEwMDY0NAotLS0gYS9EZW1vL3RocmVhZHMvZmluZC5weQorKysgYi9EZW1vL3RocmVhZHMvZmluZC5weQpAQCAtMTMxLDcgKzEzMSw3IEBACiBkZWYgZmluZChkaXIsIHByZWQsIHdxKToKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgcmVwcihkaXIpLCAnOicsIG1zZwogICAgICAgICByZXR1cm4KICAgICBmb3IgbmFtZSBpbiBuYW1lczoKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBuYW1lKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0YXQgPSBvcy5sc3RhdChmdWxsbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwcmludCByZXByKGZ1bGxuYW1lKSwgJzonLCBtc2cKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgcHJlZChkaXIsIG5hbWUsIGZ1bGxuYW1lLCBzdGF0KToKZGlmZiAtLWdpdCBhL0RlbW8vdGhyZWFkcy90ZWxuZXQucHkgYi9EZW1vL3RocmVhZHMvdGVsbmV0LnB5CmluZGV4IDcwN2EzNTMuLjA5ZjNiZDkgMTAwNjQ0Ci0tLSBhL0RlbW8vdGhyZWFkcy90ZWxuZXQucHkKKysrIGIvRGVtby90aHJlYWRzL3RlbG5ldC5weQpAQCAtNTYsNyArNTYsNyBAQAogICAgICMKICAgICB0cnk6CiAgICAgICAgIHMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCi0gICAgZXhjZXB0IGVycm9yLCBtc2c6CisgICAgZXhjZXB0IGVycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnY29ubmVjdCBmYWlsZWQ6ICVyXG4nICUgKG1zZywpKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgICMKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9BdHRyRGlhbG9nLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL0F0dHJEaWFsb2cucHkKaW5kZXggOWZhNjk5ZS4uZDhiMjU3MSAxMDA3NTUKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL0F0dHJEaWFsb2cucHkKKysrIGIvRGVtby90a2ludGVyL2d1aWRvL0F0dHJEaWFsb2cucHkKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gc2VsZi52YXIuZ2V0KCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmRpYWxvZy53aWRnZXQucGFjaygqKntzZWxmLm9wdGlvbjogc2VsZi5jdXJyZW50fSkKLSAgICAgICAgICAgIGV4Y2VwdCBUY2xFcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwcmludCBtc2cKICAgICAgICAgICAgICAgICBzZWxmLnJlZnJlc2goKQogCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFjaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0KSkKLSAgICAgICAgZXhjZXB0IFRjbEVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBUY2xFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCBtc2cKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBkaWN0ID0ge30KQEAgLTIzOSw3ICsyMzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJy0nK3NlbGYub3B0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWFsb2cubWFzdGVyLnRrLm1lcmdlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnQpKQotICAgICAgICAgICAgZXhjZXB0IFRjbEVycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgVGNsRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHByaW50IG1zZwogICAgICAgICAgICAgICAgIHNlbGYucmVmcmVzaCgpCiAKQEAgLTI4NSw3ICsyODUsNyBAQAogICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gc2VsZi52YXIuZ2V0KCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmRpYWxvZy53aWRnZXRbc2VsZi5vcHRpb25dID0gc2VsZi5jdXJyZW50Ci0gICAgICAgICAgICBleGNlcHQgVGNsRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBUY2xFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgICAgICAgICAgc2VsZi5yZWZyZXNoKCkKIApAQCAtMzc0LDcgKzM3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFzdGVyLnNlbmQoc2VsZi5hcHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZycpKQotICAgICAgICBleGNlcHQgVGNsRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50IG1zZwogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGRpY3QgPSB7fQpAQCAtMzk4LDcgKzM5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnJywKICAgICAgICAgICAgICAgICAgICAgICAgICctJytzZWxmLm9wdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudCkKLSAgICAgICAgICAgIGV4Y2VwdCBUY2xFcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwcmludCBtc2cKICAgICAgICAgICAgICAgICBzZWxmLnJlZnJlc2goKQogCkBAIC00NDUsNyArNDQ1LDcgQEAKICAgICAgICAgaWYgd2lkZ2V0ID09ICcuJzogY29udGludWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgUmVtb3RlUGFja0RpYWxvZyhsaXN0LCBsaXN0LmFwcCwgd2lkZ2V0KQotICAgICAgICBleGNlcHQgVGNsRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50IG1zZwogCiB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9NYW5QYWdlLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL01hblBhZ2UucHkKaW5kZXggMjIxYWY4OC4uYjE4OWI2NCAxMDA3NTUKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL01hblBhZ2UucHkKKysrIGIvRGVtby90a2ludGVyL2d1aWRvL01hblBhZ2UucHkKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgICAgIHNlbGYuX3BhcnNlbGluZSgnJykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi50ay5kZWxldGVmaWxlaGFuZGxlcihzZWxmLmZwKQotICAgICAgICBleGNlcHQgVGNsRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5mcC5jbG9zZSgpCiAgICAgICAgIHNlbGYuZnAgPSBOb25lCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vbWJveC5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9tYm94LnB5CmluZGV4IDNjMzZkODguLjQ3YzM4YjkgMTAwNzU1Ci0tLSBhL0RlbW8vdGtpbnRlci9ndWlkby9tYm94LnB5CisrKyBiL0RlbW8vdGtpbnRlci9ndWlkby9tYm94LnB5CkBAIC0yNyw3ICsyNyw3IEBACiAgICAgc2VxID0gJ2FsbCcKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJycpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludCBtc2cKICAgICAgICAgc3lzLmV4aXQoMikKICAgICBmb3IgYXJnIGluIGFyZ3M6CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vdGttYW4ucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vdGttYW4ucHkKaW5kZXggNmIwYjY0MS4uODEwYmRmOCAxMDA3NTUKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL3RrbWFuLnB5CisrKyBiL0RlbW8vdGtpbnRlci9ndWlkby90a21hbi5weQpAQCAtMjE2LDcgKzIxNiw3IEBACiAgICAgICAgICAgICAgICAgcHJvZyA9IHJlLmNvbXBpbGUoc2VhcmNoLCBtYXApCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByb2cgPSByZS5jb21waWxlKHNlYXJjaCkKLSAgICAgICAgZXhjZXB0IHJlLmVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCByZS5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBzZWxmLmZyYW1lLmJlbGwoKQogICAgICAgICAgICAgcHJpbnQgJ1JlZ2V4IGVycm9yOicsIG1zZwogICAgICAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vd2lzaC5weSBiL0RlbW8vdGtpbnRlci9ndWlkby93aXNoLnB5CmluZGV4IDM1ZTAxMmMuLjIzNjdlMjUgMTAwNzU1Ci0tLSBhL0RlbW8vdGtpbnRlci9ndWlkby93aXNoLnB5CisrKyBiL0RlbW8vdGtpbnRlci9ndWlkby93aXNoLnB5CkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgIHRrLnJlY29yZChsaW5lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSB0ay5jYWxsKCdldmFsJywgY21kKQotICAgICAgICBleGNlcHQgX3RraW50ZXIuVGNsRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IF90a2ludGVyLlRjbEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50ICdUY2xFcnJvcjonLCBtc2cKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHJlc3VsdDogcHJpbnQgcmVzdWx0CmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QgYi9Eb2MvaG93dG8vdXJsbGliMi5yc3QKaW5kZXggNjljZTUwOC4uODU4YzliMSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3VybGxpYjIucnN0CisrKyBiL0RvYy9ob3d0by91cmxsaWIyLnJzdApAQCAtMjE0LDcgKzIxNCw3IEBACiAKICAgICA+Pj4gcmVxID0gdXJsbGliMi5SZXF1ZXN0KCdodHRwOi8vd3d3LnByZXRlbmRfc2VydmVyLm9yZycpCiAgICAgPj4+IHRyeTogdXJsbGliMi51cmxvcGVuKHJlcSkKLSAgICA+Pj4gZXhjZXB0IFVSTEVycm9yLCBlOgorICAgID4+PiBleGNlcHQgVVJMRXJyb3IgYXMgZToKICAgICA+Pj4gICAgcHJpbnQgZS5yZWFzb24KICAgICA+Pj4KICAgICAoNCwgJ2dldGFkZHJpbmZvIGZhaWxlZCcpCkBAIC0zMjYsNyArMzI2LDcgQEAKICAgICA+Pj4gcmVxID0gdXJsbGliMi5SZXF1ZXN0KCdodHRwOi8vd3d3LnB5dGhvbi5vcmcvZmlzaC5odG1sJykKICAgICA+Pj4gdHJ5OiAKICAgICA+Pj4gICAgIHVybGxpYjIudXJsb3BlbihyZXEpCi0gICAgPj4+IGV4Y2VwdCBVUkxFcnJvciwgZToKKyAgICA+Pj4gZXhjZXB0IFVSTEVycm9yIGFzIGU6CiAgICAgPj4+ICAgICBwcmludCBlLmNvZGUKICAgICA+Pj4gICAgIHByaW50IGUucmVhZCgpCiAgICAgPj4+IApAQCAtMzU0LDEwICszNTQsMTAgQEAKICAgICByZXEgPSBSZXF1ZXN0KHNvbWV1cmwpCiAgICAgdHJ5OgogICAgICAgICByZXNwb25zZSA9IHVybG9wZW4ocmVxKQotICAgIGV4Y2VwdCBIVFRQRXJyb3IsIGU6CisgICAgZXhjZXB0IEhUVFBFcnJvciBhcyBlOgogICAgICAgICBwcmludCAnVGhlIHNlcnZlciBjb3VsZG5cJ3QgZnVsZmlsbCB0aGUgcmVxdWVzdC4nCiAgICAgICAgIHByaW50ICdFcnJvciBjb2RlOiAnLCBlLmNvZGUKLSAgICBleGNlcHQgVVJMRXJyb3IsIGU6CisgICAgZXhjZXB0IFVSTEVycm9yIGFzIGU6CiAgICAgICAgIHByaW50ICdXZSBmYWlsZWQgdG8gcmVhY2ggYSBzZXJ2ZXIuJwogICAgICAgICBwcmludCAnUmVhc29uOiAnLCBlLnJlYXNvbgogICAgIGVsc2U6CkBAIC0zNzgsNyArMzc4LDcgQEAKICAgICByZXEgPSBSZXF1ZXN0KHNvbWV1cmwpCiAgICAgdHJ5OgogICAgICAgICByZXNwb25zZSA9IHVybG9wZW4ocmVxKQotICAgIGV4Y2VwdCBVUkxFcnJvciwgZToKKyAgICBleGNlcHQgVVJMRXJyb3IgYXMgZToKICAgICAgICAgaWYgaGFzYXR0cihlLCAncmVhc29uJyk6CiAgICAgICAgICAgICBwcmludCAnV2UgZmFpbGVkIHRvIHJlYWNoIGEgc2VydmVyLicKICAgICAgICAgICAgIHByaW50ICdSZWFzb246ICcsIGUucmVhc29uCmRpZmYgLS1naXQgYS9Eb2MvbGliL2VtYWlsLXVucGFjay5weSBiL0RvYy9saWIvZW1haWwtdW5wYWNrLnB5CmluZGV4IGZiMDNlNTguLmU1OTZiOTggMTAwNjQ0Ci0tLSBhL0RvYy9saWIvZW1haWwtdW5wYWNrLnB5CisrKyBiL0RvYy9saWIvZW1haWwtdW5wYWNrLnB5CkBAIC0zNSw3ICszNSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIG9zLm1rZGlyKG9wdHMuZGlyZWN0b3J5KQotICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICMgSWdub3JlIGRpcmVjdG9yeSBleGlzdHMgZXJyb3IKICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CiAgICAgICAgICAgICByYWlzZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJjc3YudGV4IGIvRG9jL2xpYi9saWJjc3YudGV4CmluZGV4IGU5NjVlMzEuLmI4N2JjOWQgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGliY3N2LnRleAorKysgYi9Eb2MvbGliL2xpYmNzdi50ZXgKQEAgLTQyNiw3ICs0MjYsNyBAQAogdHJ5OgogICAgIGZvciByb3cgaW4gcmVhZGVyOgogICAgICAgICBwcmludCByb3cKLWV4Y2VwdCBjc3YuRXJyb3IsIGU6CitleGNlcHQgY3N2LkVycm9yIGFzIGU6CiAgICAgc3lzLmV4aXQoJ2ZpbGUgJXMsIGxpbmUgJWQ6ICVzJyAlIChmaWxlbmFtZSwgcmVhZGVyLmxpbmVfbnVtLCBlKSkKIFxlbmR7dmVyYmF0aW19CiAKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliZ2V0b3B0LnRleCBiL0RvYy9saWIvbGliZ2V0b3B0LnRleAppbmRleCBiMzhmY2Q4Li43OTMwYWNkIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmdldG9wdC50ZXgKKysrIGIvRG9jL2xpYi9saWJnZXRvcHQudGV4CkBAIC0xMjYsNyArMTI2LDcgQEAKIGRlZiBtYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJobzp2IiwgWyJoZWxwIiwgIm91dHB1dD0iXSkKLSAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yLCBlcnI6CisgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciBhcyBlcnI6CiAgICAgICAgICMgcHJpbnQgaGVscCBpbmZvcm1hdGlvbiBhbmQgZXhpdDoKICAgICAgICAgcHJpbnQgc3RyKGVycikgIyB3aWxsIHByaW50IHNvbWV0aGluZyBsaWtlICJvcHRpb24gLWEgbm90IHJlY29nbml6ZWQiCiAgICAgICAgIHVzYWdlKCkKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlic2h1dGlsLnRleCBiL0RvYy9saWIvbGlic2h1dGlsLnRleAppbmRleCA0NDlkNzQxLi4zMDM3ZTBiIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnNodXRpbC50ZXgKKysrIGIvRG9jL2xpYi9saWJzaHV0aWwudGV4CkBAIC0xNDQsNiArMTQ0LDYgQEAKICAgICAgICAgICAgICAgICBjb3B5dHJlZShzcmNuYW1lLCBkc3RuYW1lLCBzeW1saW5rcykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgY29weTIoc3JjbmFtZSwgZHN0bmFtZSkKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBvcy5lcnJvciksIHdoeToKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBvcy5lcnJvcikgYXMgd2h5OgogICAgICAgICAgICAgcHJpbnQgIkNhbid0IGNvcHkgJXMgdG8gJXM6ICVzIiAlIChgc3JjbmFtZWAsIGBkc3RuYW1lYCwgc3RyKHdoeSkpCiBcZW5ke3ZlcmJhdGltfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJzb2NrZXQudGV4IGIvRG9jL2xpYi9saWJzb2NrZXQudGV4CmluZGV4IGYyMGM1NmMuLjY5ODc3ZDMgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlic29ja2V0LnRleAorKysgYi9Eb2MvbGliL2xpYnNvY2tldC50ZXgKQEAgLTgxMywxMyArODEzLDEzIEBACiAgICAgYWYsIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzYSA9IHJlcwogICAgIHRyeToKIAlzID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKIAlzID0gTm9uZQogCWNvbnRpbnVlCiAgICAgdHJ5OgogCXMuYmluZChzYSkKIAlzLmxpc3RlbigxKQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKIAlzLmNsb3NlKCkKIAlzID0gTm9uZQogCWNvbnRpbnVlCkBAIC04NDgsMTIgKzg0OCwxMiBAQAogICAgIGFmLCBzb2NrdHlwZSwgcHJvdG8sIGNhbm9ubmFtZSwgc2EgPSByZXMKICAgICB0cnk6CiAJcyA9IHNvY2tldC5zb2NrZXQoYWYsIHNvY2t0eXBlLCBwcm90bykKLSAgICBleGNlcHQgc29ja2V0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CiAJcyA9IE5vbmUKIAljb250aW51ZQogICAgIHRyeToKIAlzLmNvbm5lY3Qoc2EpCi0gICAgZXhjZXB0IHNvY2tldC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgogCXMuY2xvc2UoKQogCXMgPSBOb25lCiAJY29udGludWUKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlic3VicHJvY2Vzcy50ZXggYi9Eb2MvbGliL2xpYnN1YnByb2Nlc3MudGV4CmluZGV4IGY2Mzk3MTAuLmNiMzA5NzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlic3VicHJvY2Vzcy50ZXgKKysrIGIvRG9jL2xpYi9saWJzdWJwcm9jZXNzLnRleApAQCAtMjg0LDcgKzI4NCw3IEBACiAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIkNoaWxkIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCIsIC1yZXRjb2RlCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiQ2hpbGQgcmV0dXJuZWQiLCByZXRjb2RlCi1leGNlcHQgT1NFcnJvciwgZToKK2V4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiRXhlY3V0aW9uIGZhaWxlZDoiLCBlCiBcZW5ke3ZlcmJhdGltfQogCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnhkcmxpYi50ZXggYi9Eb2MvbGliL2xpYnhkcmxpYi50ZXgKaW5kZXggZDA4NjNkOS4uNTY0NzRiNyAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ4ZHJsaWIudGV4CisrKyBiL0RvYy9saWIvbGlieGRybGliLnRleApAQCAtMjQ2LDYgKzI0Niw2IEBACiBwID0geGRybGliLlBhY2tlcigpCiB0cnk6CiAgICAgcC5wYWNrX2RvdWJsZSg4LjAxKQotZXhjZXB0IHhkcmxpYi5Db252ZXJzaW9uRXJyb3IsIGluc3RhbmNlOgorZXhjZXB0IHhkcmxpYi5Db252ZXJzaW9uRXJyb3IgYXMgaW5zdGFuY2U6CiAgICAgcHJpbnQgJ3BhY2tpbmcgdGhlIGRvdWJsZSBmYWlsZWQ6JywgaW5zdGFuY2UubXNnCiBcZW5ke3ZlcmJhdGltfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJ4bWxycGNsaWIudGV4IGIvRG9jL2xpYi9saWJ4bWxycGNsaWIudGV4CmluZGV4IGM4NzBkMjYuLjdhZjllNzYgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlieG1scnBjbGliLnRleAorKysgYi9Eb2MvbGliL2xpYnhtbHJwY2xpYi50ZXgKQEAgLTM1OCw3ICszNTgsNyBAQAogCiB0cnk6CiAgICAgcHJpbnQgc2VydmVyLmV4YW1wbGVzLmdldFN0YXRlTmFtZSg0MSkKLWV4Y2VwdCBFcnJvciwgdjoKK2V4Y2VwdCBFcnJvciBhcyB2OgogICAgIHByaW50ICJFUlJPUiIsIHYKIFxlbmR7dmVyYmF0aW19CiAKZGlmZiAtLWdpdCBhL0RvYy9saWIvc3FsaXRlMy9jb21wbGV0ZV9zdGF0ZW1lbnQucHkgYi9Eb2MvbGliL3NxbGl0ZTMvY29tcGxldGVfc3RhdGVtZW50LnB5CmluZGV4IDIyNTI1ZTMuLjc2ZWE3ZjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvc3FsaXRlMy9jb21wbGV0ZV9zdGF0ZW1lbnQucHkKKysrIGIvRG9jL2xpYi9zcWxpdGUzL2NvbXBsZXRlX3N0YXRlbWVudC5weQpAQCAtMjMsNyArMjMsNyBAQAogCiAgICAgICAgICAgICBpZiBidWZmZXIubHN0cmlwKCkudXBwZXIoKS5zdGFydHN3aXRoKCJTRUxFQ1QiKToKICAgICAgICAgICAgICAgICBwcmludCBjdXIuZmV0Y2hhbGwoKQotICAgICAgICBleGNlcHQgc3FsaXRlMy5FcnJvciwgZToKKyAgICAgICAgZXhjZXB0IHNxbGl0ZTMuRXJyb3IgYXMgZToKICAgICAgICAgICAgIHByaW50ICJBbiBlcnJvciBvY2N1cnJlZDoiLCBlLmFyZ3NbMF0KICAgICAgICAgYnVmZmVyID0gIiIKIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL2ZpbmRjc3ltcyBiL0RvYy90b29scy9maW5kY3N5bXMKaW5kZXggYWM5Yjc1NC4uZDY4YzNjZSAxMDA3NTUKLS0tIGEvRG9jL3Rvb2xzL2ZpbmRjc3ltcworKysgYi9Eb2MvdG9vbHMvZmluZGNzeW1zCkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgICAgICAgICBwcmludF9saXN0KHVuZG9jdW1lbnRlZCwgIlVuZG9jdW1lbnRlZCBzeW1ib2xzIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHByaW50X2xpc3QoTCkKLSAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQSVBFOgogICAgICAgICAgICAgcmFpc2UKIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL2xpc3Rtb2R1bGVzIGIvRG9jL3Rvb2xzL2xpc3Rtb2R1bGVzCmluZGV4IDAzZTdiNWQuLjg0Njk5NzIgMTAwNzU1Ci0tLSBhL0RvYy90b29scy9saXN0bW9kdWxlcworKysgYi9Eb2MvdG9vbHMvbGlzdG1vZHVsZXMKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoCiAgICAgICAgICAgICBhcmdzLCAiYWJjaGk6IiwKICAgICAgICAgICAgIFsiYW5ub3RhdGUiLCAiYnVpbHQtaW4iLCAiY2F0ZWdvcml6ZSIsICJoZWxwIiwgImlnbm9yZS1mcm9tPSJdKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHByaW50CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvbWtob3d0byBiL0RvYy90b29scy9ta2hvd3RvCmluZGV4IDIxY2Q2ZmIuLjAyYTIxNWQgMTAwNzU1Ci0tLSBhL0RvYy90b29scy9ta2hvd3RvCisrKyBiL0RvYy90b29scy9ta2hvd3RvCkBAIC01OTksNyArNTk5LDcgQEAKICAgICBvcHRpb25zID0gT3B0aW9ucygpCiAgICAgdHJ5OgogICAgICAgICBhcmdzID0gb3B0aW9ucy5wYXJzZShzeXMuYXJndlsxOl0pCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnJvcihvcHRpb25zLCBtc2cpCiAgICAgaWYgbm90IGFyZ3M6CiAgICAgICAgICMgYXR0ZW1wdCB0byBsb2NhdGUgc2luZ2xlIC50ZXggZmlsZSBpbiBjdXJyZW50IGRpcmVjdG9yeToKZGlmZiAtLWdpdCBhL0RvYy90b29scy9ta3NvdXJjZXBrZyBiL0RvYy90b29scy9ta3NvdXJjZXBrZwppbmRleCA0YjIxZjc3Li43ZDViZDczIDEwMDc1NQotLS0gYS9Eb2MvdG9vbHMvbWtzb3VyY2Vwa2cKKysrIGIvRG9jL3Rvb2xzL21rc291cmNlcGtnCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiQWFiZ3R6cSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJhbGwiLCAiYnppcDIiLCAiZ3ppcCIsICJ0b29scyIsICJ6aXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicXVpZXQiLCAiYW5vbnltb3VzIl0pCi0gICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIGU6CisgICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgZToKICAgICAgICAgICB1c2FnZSh3YXJuaW5nPXN0cihlKSkKICAgICAgICAgICBzeXMuZXhpdCgyKQogICAgICBpZiBsZW4oYXJncykgbm90IGluICgxLCAyKToKZGlmZiAtLWdpdCBhL0RvYy90b29scy9wcmVjaG0ucHkgYi9Eb2MvdG9vbHMvcHJlY2htLnB5CmluZGV4IDU3YTQzZmQuLmRiMWY5NjUgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9wcmVjaG0ucHkKKysrIGIvRG9jL3Rvb2xzL3ByZWNobS5weQpAQCAtNDQ4LDcgKzQ0OCw3IEBACiBkZWYgb3BlbmZpbGUoZmlsZSk6CiAgICAgdHJ5OgogICAgICAgICBwID0gb3BlbihmaWxlLCAidyIpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50IGZpbGUsICI6IiwgbXNnCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgcmV0dXJuIHAKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBvcHRsaXN0LCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzLCAnY2twdjonKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHVzYWdlKCkKIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NnbWxjb252L2RvY2ZpeGVyLnB5IGIvRG9jL3Rvb2xzL3NnbWxjb252L2RvY2ZpeGVyLnB5CmluZGV4IDgxNTE5ZWUuLjk2MWUzYjggMTAwNzU1Ci0tLSBhL0RvYy90b29scy9zZ21sY29udi9kb2NmaXhlci5weQorKysgYi9Eb2MvdG9vbHMvc2dtbGNvbnYvZG9jZml4ZXIucHkKQEAgLTEwMzksNyArMTAzOSw4IEBACiAgICAgIwogICAgIHRyeToKICAgICAgICAgd3JpdGVfZXNpcyhmcmFnbWVudCwgb2ZwLCBrbm93bmVtcHR5KQotICAgIGV4Y2VwdCBJT0Vycm9yLCAoZXJyLCBtc2cpOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIChlcnIsIG1zZykgPSBlCiAgICAgICAgICMgSWdub3JlIEVQSVBFOyBpdCBqdXN0IG1lYW5zIHRoYXQgd2hvZXZlciB3ZSdyZSB3cml0aW5nIHRvIHN0b3BwZWQKICAgICAgICAgIyByZWFkaW5nLiAgVGhlIHJlc3Qgb2YgdGhlIG91dHB1dCB3b3VsZCBiZSBpZ25vcmVkLiAgQWxsIG90aGVyIGVycm9ycwogICAgICAgICAjIHNob3VsZCBzdGlsbCBiZSByZXBvcnRlZCwKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zZ21sY29udi9lc2lzMnNnbWwucHkgYi9Eb2MvdG9vbHMvc2dtbGNvbnYvZXNpczJzZ21sLnB5CmluZGV4IGI2ZjlhNDQuLjgxMjk0ZDEgMTAwNzU1Ci0tLSBhL0RvYy90b29scy9zZ21sY29udi9lc2lzMnNnbWwucHkKKysrIGIvRG9jL3Rvb2xzL3NnbWxjb252L2VzaXMyc2dtbC5weQpAQCAtMjU1LDcgKzI1NSw4IEBACiAgICAgICAgIGlmIHhtbCBhbmQgeG1sZGVjbDoKICAgICAgICAgICAgIG9wZi53cml0ZSgnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvODg1OS0xIj8+XG4nKQogICAgICAgICBjb252ZXJ0KGlmcCwgb2ZwLCB4bWw9eG1sLCBhdXRvY2xvc2U9YXV0b2Nsb3NlLCB2ZXJiYXRpbXM9dmVyYmF0aW1zKQotICAgIGV4Y2VwdCBJT0Vycm9yLCAoZXJyLCBtc2cpOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIChlcnIsIG1zZykgPSBlCiAgICAgICAgIGlmIGVyciAhPSBlcnJuby5FUElQRToKICAgICAgICAgICAgIHJhaXNlCiAKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zZ21sY29udi9lc2lzdG9vbHMucHkgYi9Eb2MvdG9vbHMvc2dtbGNvbnYvZXNpc3Rvb2xzLnB5CmluZGV4IDgzM2ZlYTEuLjZkYzVlYWEgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zZ21sY29udi9lc2lzdG9vbHMucHkKKysrIGIvRG9jL3Rvb2xzL3NnbWxjb252L2VzaXN0b29scy5weQpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgZGVmIF9nZXRfdG9rZW4oc2VsZiwgZnApOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgICAgIGUgPSBTQVhFeGNlcHRpb24oIkkvTyBlcnJvciByZWFkaW5nIGlucHV0IHN0cmVhbSIsIGUpCiAgICAgICAgICAgICBzZWxmLmdldEVycm9ySGFuZGxlcigpLmZhdGFsRXJyb3IoZSkKICAgICAgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NnbWxjb252L2xhdGV4MmVzaXMucHkgYi9Eb2MvdG9vbHMvc2dtbGNvbnYvbGF0ZXgyZXNpcy5weQppbmRleCA2NDNlZjJjLi5jYmM5ODI4IDEwMDc1NQotLS0gYS9Eb2MvdG9vbHMvc2dtbGNvbnYvbGF0ZXgyZXNpcy5weQorKysgYi9Eb2MvdG9vbHMvc2dtbGNvbnYvbGF0ZXgyZXNpcy5weQpAQCAtMzk3LDcgKzM5Nyw4IEBACiAgICAgYyA9IENvbnZlcnNpb24oaWZwLCBvZnAsIHRhYmxlKQogICAgIHRyeToKICAgICAgICAgYy5jb252ZXJ0KCkKLSAgICBleGNlcHQgSU9FcnJvciwgKGVyciwgbXNnKToKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAoZXJyLCBtc2cpID0gZQogICAgICAgICBpZiBlcnIgIT0gZXJybm8uRVBJUEU6CiAgICAgICAgICAgICByYWlzZQogCmRpZmYgLS1naXQgYS9Eb2MvdHV0L3R1dC50ZXggYi9Eb2MvdHV0L3R1dC50ZXgKaW5kZXggNGI2YjkzZi4uM2VjYzU3ZiAxMDA2NDQKLS0tIGEvRG9jL3R1dC90dXQudGV4CisrKyBiL0RvYy90dXQvdHV0LnRleApAQCAtMzQ4MCw4ICszNDgwLDkgQEAKICAgICBmID0gb3BlbignbXlmaWxlLnR4dCcpCiAgICAgcyA9IGYucmVhZGxpbmUoKQogICAgIGkgPSBpbnQocy5zdHJpcCgpKQotZXhjZXB0IElPRXJyb3IsIChlcnJubywgc3RyZXJyb3IpOgotICAgIHByaW50ICJJL08gZXJyb3IoJXMpOiAlcyIgJSAoZXJybm8sIHN0cmVycm9yKQorZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAoZXJybm8sIHN0cmVycm9yKSA9IGUKKyAgICBwcmludCAiSS9PIGVycm9yKCVzKTogJXMiICUgKGUuZXJybm8sIGUuc3RyZXJyb3IpCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBwcmludCAiQ291bGQgbm90IGNvbnZlcnQgZGF0YSB0byBhbiBpbnRlZ2VyLiIKIGV4Y2VwdDoKQEAgLTM1MzAsNyArMzUzMSw3IEBACiBcYmVnaW57dmVyYmF0aW19CiA+Pj4gdHJ5OgogLi4uICAgIHJhaXNlIEV4Y2VwdGlvbignc3BhbScsICdlZ2dzJykKLS4uLiBleGNlcHQgRXhjZXB0aW9uLCBpbnN0OgorLi4uIGV4Y2VwdCBFeGNlcHRpb24gYXMgaW5zdDoKIC4uLiAgICBwcmludCB0eXBlKGluc3QpICAgICAjIHRoZSBleGNlcHRpb24gaW5zdGFuY2UKIC4uLiAgICBwcmludCBpbnN0LmFyZ3MgICAgICAjIGFyZ3VtZW50cyBzdG9yZWQgaW4gLmFyZ3MKIC4uLiAgICBwcmludCBpbnN0ICAgICAgICAgICAjIF9fc3RyX18gYWxsb3dzIGFyZ3MgdG8gcHJpbnRlZCBkaXJlY3RseQpAQCAtMzU1OSw3ICszNTYwLDcgQEAKIC4uLiAKID4+PiB0cnk6CiAuLi4gICAgIHRoaXNfZmFpbHMoKQotLi4uIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciwgZGV0YWlsOgorLi4uIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBkZXRhaWw6CiAuLi4gICAgIHByaW50ICdIYW5kbGluZyBydW4tdGltZSBlcnJvcjonLCBkZXRhaWwKIC4uLiAKIEhhbmRsaW5nIHJ1bi10aW1lIGVycm9yOiBpbnRlZ2VyIGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvCkBAIC0zNjE5LDcgKzM2MjAsNyBAQAogLi4uIAogPj4+IHRyeToKIC4uLiAgICAgcmFpc2UgTXlFcnJvcigyKjIpCi0uLi4gZXhjZXB0IE15RXJyb3IsIGU6CisuLi4gZXhjZXB0IE15RXJyb3IgYXMgZToKIC4uLiAgICAgcHJpbnQgJ015IGV4Y2VwdGlvbiBvY2N1cnJlZCwgdmFsdWU6JywgZS52YWx1ZQogLi4uIAogTXkgZXhjZXB0aW9uIG9jY3VycmVkLCB2YWx1ZTogNApkaWZmIC0tZ2l0IGEvR3JhbW1hci9HcmFtbWFyIGIvR3JhbW1hci9HcmFtbWFyCmluZGV4IDA0ZWQ2OGYuLjcwMWExZmYgMTAwNjQ0Ci0tLSBhL0dyYW1tYXIvR3JhbW1hcgorKysgYi9HcmFtbWFyL0dyYW1tYXIKQEAgLTc5LDcgKzc5LDcgQEAKIHdpdGhfc3RtdDogJ3dpdGgnIHRlc3QgWyB3aXRoX3ZhciBdICc6JyBzdWl0ZQogd2l0aF92YXI6ICdhcycgZXhwcgogIyBOQiBjb21waWxlLmMgbWFrZXMgc3VyZSB0aGF0IHRoZSBkZWZhdWx0IGV4Y2VwdCBjbGF1c2UgaXMgbGFzdAotZXhjZXB0X2NsYXVzZTogJ2V4Y2VwdCcgW3Rlc3QgWycsJyB0ZXN0XV0KK2V4Y2VwdF9jbGF1c2U6ICdleGNlcHQnIFt0ZXN0IFsnYXMnIHRlc3RdXQogc3VpdGU6IHNpbXBsZV9zdG10IHwgTkVXTElORSBJTkRFTlQgc3RtdCsgREVERU5UCiAKICMgQmFja3dhcmQgY29tcGF0aWJpbGl0eSBjcnVmdCB0byBzdXBwb3J0OgpkaWZmIC0tZ2l0IGEvTGliL0NHSUhUVFBTZXJ2ZXIucHkgYi9MaWIvQ0dJSFRUUFNlcnZlci5weQppbmRleCBjMTE5YzlhLi5jZTk0MmVmIDEwMDY0NAotLS0gYS9MaWIvQ0dJSFRUUFNlcnZlci5weQorKysgYi9MaWIvQ0dJSFRUUFNlcnZlci5weQpAQCAtMzIwLDcgKzMyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAogICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyID0gc2F2ZV9zdGRlcnIKICAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoc2F2ZV9jd2QpCi0gICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgc3RzOgorICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgc3RzOgogICAgICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJDR0kgc2NyaXB0IGV4aXQgc3RhdHVzICVzIiwgc3RyKHN0cykpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNHSSBzY3JpcHQgZXhpdGVkIE9LIikKZGlmZiAtLWdpdCBhL0xpYi9Db25maWdQYXJzZXIucHkgYi9MaWIvQ29uZmlnUGFyc2VyLnB5CmluZGV4IDY1YzhjZTUuLmJkYzg4Y2YgMTAwNjQ0Ci0tLSBhL0xpYi9Db25maWdQYXJzZXIucHkKKysrIGIvTGliL0NvbmZpZ1BhcnNlci5weQpAQCAtNTY3LDcgKzU2Nyw3IEBACiAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9LRVlDUkUuc3ViKHNlbGYuX2ludGVycG9sYXRpb25fcmVwbGFjZSwgdmFsdWUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICUgdmFycwotICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgc2VjdGlvbiwgcmF3dmFsLCBlWzBdKQogICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9TaW1wbGVYTUxSUENTZXJ2ZXIucHkgYi9MaWIvU2ltcGxlWE1MUlBDU2VydmVyLnB5CmluZGV4IGM2ZjY5NTguLjBhNjJiNDcgMTAwNjQ0Ci0tLSBhL0xpYi9TaW1wbGVYTUxSUENTZXJ2ZXIucHkKKysrIGIvTGliL1NpbXBsZVhNTFJQQ1NlcnZlci5weQpAQCAtMjU5LDcgKzI1OSw3IEBACiAgICAgICAgICAgICByZXNwb25zZSA9IChyZXNwb25zZSwpCiAgICAgICAgICAgICByZXNwb25zZSA9IHhtbHJwY2xpYi5kdW1wcyhyZXNwb25zZSwgbWV0aG9kcmVzcG9uc2U9MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X25vbmU9c2VsZi5hbGxvd19ub25lLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQotICAgICAgICBleGNlcHQgRmF1bHQsIGZhdWx0OgorICAgICAgICBleGNlcHQgRmF1bHQgYXMgZmF1bHQ6CiAgICAgICAgICAgICByZXNwb25zZSA9IHhtbHJwY2xpYi5kdW1wcyhmYXVsdCwgYWxsb3dfbm9uZT1zZWxmLmFsbG93X25vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQogICAgICAgICBleGNlcHQ6CkBAIC0zNTksNyArMzU5LDcgQEAKICAgICAgICAgICAgICAgICAjIFhYWCBBIG1hcnNoYWxsaW5nIGVycm9yIGluIGFueSByZXNwb25zZSB3aWxsIGZhaWwgdGhlIGVudGlyZQogICAgICAgICAgICAgICAgICMgbXVsdGljYWxsLiBJZiBzb21lb25lIGNhcmVzIHRoZXkgc2hvdWxkIGZpeCB0aGlzLgogICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFtzZWxmLl9kaXNwYXRjaChtZXRob2RfbmFtZSwgcGFyYW1zKV0pCi0gICAgICAgICAgICBleGNlcHQgRmF1bHQsIGZhdWx0OgorICAgICAgICAgICAgZXhjZXB0IEZhdWx0IGFzIGZhdWx0OgogICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICB7J2ZhdWx0Q29kZScgOiBmYXVsdC5mYXVsdENvZGUsCiAgICAgICAgICAgICAgICAgICAgICAnZmF1bHRTdHJpbmcnIDogZmF1bHQuZmF1bHRTdHJpbmd9CmRpZmYgLS1naXQgYS9MaWIvX3N0cnB0aW1lLnB5IGIvTGliL19zdHJwdGltZS5weQppbmRleCAzZmI1NjAyLi4yZDliZTM2IDEwMDY0NAotLS0gYS9MaWIvX3N0cnB0aW1lLnB5CisrKyBiL0xpYi9fc3RycHRpbWUucHkKQEAgLTI5MSw3ICsyOTEsNyBAQAogICAgICAgICAgICAgICAgIGZvcm1hdF9yZWdleCA9IHRpbWVfcmUuY29tcGlsZShmb3JtYXQpCiAgICAgICAgICAgICAjIEtleUVycm9yIHJhaXNlZCB3aGVuIGEgYmFkIGZvcm1hdCBpcyBmb3VuZDsgY2FuIGJlIHNwZWNpZmllZCBhcwogICAgICAgICAgICAgIyBcXCwgaW4gd2hpY2ggY2FzZSBpdCB3YXMgYSBzdHJheSAlIGJ1dCB3aXRoIGEgc3BhY2UgYWZ0ZXIgaXQKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXJyOgorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBiYWRfZGlyZWN0aXZlID0gZXJyLmFyZ3NbMF0KICAgICAgICAgICAgICAgICBpZiBiYWRfZGlyZWN0aXZlID09ICJcXCI6CiAgICAgICAgICAgICAgICAgICAgIGJhZF9kaXJlY3RpdmUgPSAiJSIKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2hhdC5weSBiL0xpYi9hc3luY2hhdC5weQppbmRleCA2Zjk5YmExLi4xYWQzMTYxIDEwMDY0NAotLS0gYS9MaWIvYXN5bmNoYXQucHkKKysrIGIvTGliL2FzeW5jaGF0LnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVjdiAoc2VsZi5hY19pbl9idWZmZXJfc2l6ZSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgd2h5OgorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybgogCkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICAgICAgICAgICAgICBpZiBudW1fc2VudDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hY19vdXRfYnVmZmVyID0gc2VsZi5hY19vdXRfYnVmZmVyW251bV9zZW50Ol0KIAotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgd2h5OgorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IoKQogICAgICAgICAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNvcmUucHkgYi9MaWIvYXN5bmNvcmUucHkKaW5kZXggN2IyZjMwMS4uOWViNmQ3ZiAxMDA2NDQKLS0tIGEvTGliL2FzeW5jb3JlLnB5CisrKyBiL0xpYi9hc3luY29yZS5weQpAQCAtMTE5LDcgKzExOSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgciwgdywgZSA9IHNlbGVjdC5zZWxlY3QociwgdywgZSwgdGltZW91dCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IsIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIGlmIGVyclswXSAhPSBFSU5UUjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgICAgICAgICAgICAgcG9sbHN0ZXIucmVnaXN0ZXIoZmQsIGZsYWdzKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByID0gcG9sbHN0ZXIucG9sbCh0aW1lb3V0KQotICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgaWYgZXJyWzBdICE9IEVJTlRSOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByID0gW10KQEAgLTMyMCw3ICszMjAsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgICAgIHJldHVybiBjb25uLCBhZGRyCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHdoeToKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBpZiB3aHlbMF0gPT0gRVdPVUxEQkxPQ0s6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnNvY2tldC5zZW5kKGRhdGEpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHdoeToKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBpZiB3aHlbMF0gPT0gRVdPVUxEQkxPQ0s6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNDcsNyArMzQ3LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gJycKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgd2h5OgorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKICAgICAgICAgICAgICMgd2luc29jayBzb21ldGltZXMgdGhyb3dzIEVOT1RDT05OCiAgICAgICAgICAgICBpZiB3aHlbMF0gaW4gW0VDT05OUkVTRVQsIEVOT1RDT05OLCBFU0hVVERPV05dOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9iYXNlNjQucHkgYi9MaWIvYmFzZTY0LnB5CmluZGV4IDQxYTVlMTQuLjAwOWY5ZjYgMTAwNzU1Ci0tLSBhL0xpYi9iYXNlNjQucHkKKysrIGIvTGliL2Jhc2U2NC5weQpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICBzID0gX3RyYW5zbGF0ZShzLCB7YWx0Y2hhcnNbMF06ICcrJywgYWx0Y2hhcnNbMV06ICcvJ30pCiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQotICAgIGV4Y2VwdCBiaW5hc2NpaS5FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBiaW5hc2NpaS5FcnJvciBhcyBtc2c6CiAgICAgICAgICMgVHJhbnNmb3JtIHRoaXMgZXhjZXB0aW9uIGZvciBjb25zaXN0ZW5jeQogICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQogCkBAIC0zMjgsNyArMzI4LDcgQEAKICAgICBpbXBvcnQgc3lzLCBnZXRvcHQKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2RldXQnKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHByaW50ICIiInVzYWdlOiAlcyBbLWR8LWV8LXV8LXRdIFtmaWxlfC1dCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvZGJ0YWJsZXMucHkgYi9MaWIvYnNkZGIvZGJ0YWJsZXMucHkKaW5kZXggN2Y4NjJkNy4uNzA0YzRkMiAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL2RidGFibGVzLnB5CisrKyBiL0xpYi9ic2RkYi9kYnRhYmxlcy5weQpAQCAtMjYwLDcgKzI2MCw3IEBACiAKICAgICAgICAgICAgIHR4bi5jb21taXQoKQogICAgICAgICAgICAgdHhuID0gTm9uZQotICAgICAgICBleGNlcHQgREJFcnJvciwgZGJlcnJvcjoKKyAgICAgICAgZXhjZXB0IERCRXJyb3IgYXMgZGJlcnJvcjoKICAgICAgICAgICAgIGlmIHR4bjoKICAgICAgICAgICAgICAgICB0eG4uYWJvcnQoKQogICAgICAgICAgICAgcmFpc2UgVGFibGVEQkVycm9yLCBkYmVycm9yWzFdCkBAIC0zMzgsNyArMzM4LDcgQEAKICAgICAgICAgICAgICAgICB0eG4gPSBOb25lCiAKICAgICAgICAgICAgICAgICBzZWxmLl9fbG9hZF9jb2x1bW5faW5mbyh0YWJsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBEQkVycm9yLCBkYmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IERCRXJyb3IgYXMgZGJlcnJvcjoKICAgICAgICAgICAgICAgICBpZiB0eG46CiAgICAgICAgICAgICAgICAgICAgIHR4bi5hYm9ydCgpCiAgICAgICAgICAgICAgICAgcmFpc2UgVGFibGVEQkVycm9yLCBkYmVycm9yWzFdCkBAIC00MDcsNyArNDA3LDcgQEAKICAgICAgICAgICAgIHR4bi5jb21taXQoKQogICAgICAgICAgICAgdHhuID0gTm9uZQogCi0gICAgICAgIGV4Y2VwdCBEQkVycm9yLCBkYmVycm9yOgorICAgICAgICBleGNlcHQgREJFcnJvciBhcyBkYmVycm9yOgogICAgICAgICAgICAgIyBXSUJOSSB3ZSBjb3VsZCBqdXN0IGFib3J0IHRoZSB0eG4gYW5kIHJlLXJhaXNlIHRoZSBleGNlcHRpb24/CiAgICAgICAgICAgICAjIEJ1dCBubywgYmVjYXVzZSBUYWJsZURCRXJyb3IgaXMgbm90IHJlbGF0ZWQgdG8gREJFcnJvciB2aWEKICAgICAgICAgICAgICMgaW5oZXJpdGFuY2UsIHNvIGl0IHdvdWxkIGJlIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUuICBEbyB0aGUgbmV4dApAQCAtNDY2LDcgKzQ2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB0eG4uYWJvcnQoKQogICAgICAgICAgICAgICAgICAgICByYWlzZQogCi0gICAgICAgIGV4Y2VwdCBEQkVycm9yLCBkYmVycm9yOgorICAgICAgICBleGNlcHQgREJFcnJvciBhcyBkYmVycm9yOgogICAgICAgICAgICAgcmFpc2UgVGFibGVEQkVycm9yLCBkYmVycm9yWzFdCiAKICAgICBkZWYgRGVsZXRlKHNlbGYsIHRhYmxlLCBjb25kaXRpb25zPXt9KToKQEAgLTUwMiwxMSArNTAyLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgICAgIHR4bi5jb21taXQoKQogICAgICAgICAgICAgICAgICAgICB0eG4gPSBOb25lCi0gICAgICAgICAgICAgICAgZXhjZXB0IERCRXJyb3IsIGRiZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IERCRXJyb3IgYXMgZGJlcnJvcjoKICAgICAgICAgICAgICAgICAgICAgaWYgdHhuOgogICAgICAgICAgICAgICAgICAgICAgICAgdHhuLmFib3J0KCkKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IERCRXJyb3IsIGRiZXJyb3I6CisgICAgICAgIGV4Y2VwdCBEQkVycm9yIGFzIGRiZXJyb3I6CiAgICAgICAgICAgICByYWlzZSBUYWJsZURCRXJyb3IsIGRiZXJyb3JbMV0KIAogCkBAIC01MjYsNyArNTI2LDcgQEAKICAgICAgICAgICAgIGlmIGNvbHVtbnMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBjb2x1bW5zID0gc2VsZi5fX3RhYmxlY29sdW1uc1t0YWJsZV0KICAgICAgICAgICAgIG1hdGNoaW5nX3Jvd2lkcyA9IHNlbGYuX19TZWxlY3QodGFibGUsIGNvbHVtbnMsIGNvbmRpdGlvbnMpCi0gICAgICAgIGV4Y2VwdCBEQkVycm9yLCBkYmVycm9yOgorICAgICAgICBleGNlcHQgREJFcnJvciBhcyBkYmVycm9yOgogICAgICAgICAgICAgcmFpc2UgVGFibGVEQkVycm9yLCBkYmVycm9yWzFdCiAgICAgICAgICMgcmV0dXJuIHRoZSBtYXRjaGVzIGFzIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMKICAgICAgICAgcmV0dXJuIG1hdGNoaW5nX3Jvd2lkcy52YWx1ZXMoKQpAQCAtNjE2LDcgKzYxNiw3IEBACiAKICAgICAgICAgICAgICAgICAgICAga2V5LCBkYXRhID0gY3VyLm5leHQoKQogCi0gICAgICAgICAgICBleGNlcHQgREJFcnJvciwgZGJlcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBEQkVycm9yIGFzIGRiZXJyb3I6CiAgICAgICAgICAgICAgICAgaWYgZGJlcnJvclswXSAhPSBEQl9OT1RGT1VORDoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtNjM2LDcgKzYzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHJvd2RhdGFbY29sdW1uXSA9IHNlbGYuZGIuZ2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhX2tleSh0YWJsZSwgY29sdW1uLCByb3dpZCkpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBEQkVycm9yLCBkYmVycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgREJFcnJvciBhcyBkYmVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGJlcnJvclswXSAhPSBEQl9OT1RGT1VORDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgICAgICAgICAgcm93ZGF0YVtjb2x1bW5dID0gTm9uZQpAQCAtNzAwLDcgKzcwMCw3IEBACiAgICAgICAgICAgICBpZiB0YWJsZSBpbiBzZWxmLl9fdGFibGVjb2x1bW5zOgogICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9fdGFibGVjb2x1bW5zW3RhYmxlXQogCi0gICAgICAgIGV4Y2VwdCBEQkVycm9yLCBkYmVycm9yOgorICAgICAgICBleGNlcHQgREJFcnJvciBhcyBkYmVycm9yOgogICAgICAgICAgICAgaWYgdHhuOgogICAgICAgICAgICAgICAgIHR4bi5hYm9ydCgpCiAgICAgICAgICAgICByYWlzZSBUYWJsZURCRXJyb3IsIGRiZXJyb3JbMV0KZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfYmFzaWNzLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9iYXNpY3MucHkKaW5kZXggNDhlY2RiOS4uMjgxZTk0MiAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9iYXNpY3MucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9iYXNpY3MucHkKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgICAgIHNlbGYuaG9tZURpciA9IGhvbWVEaXIKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGhvbWVEaXIpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgIyB1bml4IHJldHVybnMgRU5PRU5ULCB3aW5kb3dzIHJldHVybnMgRVNSQ0gKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoZXJybm8uRU5PRU5ULCBlcnJuby5FU1JDSCk6IHJhaXNlCiAgICAgICAgICAgICBvcy5ta2Rpcihob21lRGlyKQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgICAgICMgc2V0X2dldF9yZXR1cm5zX25vbmUoKSB0byBjaGFuZ2UgaXQuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGQuZGVsZXRlKCdhYmNkJykKLSAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgorICAgICAgICBleGNlcHQgZGIuREJOb3RGb3VuZEVycm9yIGFzIHZhbDoKICAgICAgICAgICAgIGFzc2VydCB2YWxbMF0gPT0gZGIuREJfTk9URk9VTkQKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICBlbHNlOgpAQCAtMTgxLDcgKzE4MSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZC5wdXQoJ2FiY2QnLCAndGhpcyBzaG91bGQgZmFpbCcsIGZsYWdzPWRiLkRCX05PT1ZFUldSSVRFKQotICAgICAgICBleGNlcHQgZGIuREJLZXlFeGlzdEVycm9yLCB2YWw6CisgICAgICAgIGV4Y2VwdCBkYi5EQktleUV4aXN0RXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgYXNzZXJ0IHZhbFswXSA9PSBkYi5EQl9LRVlFWElTVAogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCiAgICAgICAgIGVsc2U6CkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICAgICAgICAgICAgICBwcmludCByZWMKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZWMgPSBjLm5leHQoKQotICAgICAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgorICAgICAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciBhcyB2YWw6CiAgICAgICAgICAgICAgICAgaWYgZ2V0X3JhaXNlc19lcnJvcjoKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHZhbFswXSA9PSBkYi5EQl9OT1RGT1VORAogICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKQEAgLTMzMyw3ICszMzMsNyBAQAogICAgICAgICAgICAgICAgIHByaW50IHJlYwogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJlYyA9IGMucHJldigpCi0gICAgICAgICAgICBleGNlcHQgZGIuREJOb3RGb3VuZEVycm9yLCB2YWw6CisgICAgICAgICAgICBleGNlcHQgZGIuREJOb3RGb3VuZEVycm9yIGFzIHZhbDoKICAgICAgICAgICAgICAgICBpZiBnZXRfcmFpc2VzX2Vycm9yOgogICAgICAgICAgICAgICAgICAgICBhc3NlcnQgdmFsWzBdID09IGRiLkRCX05PVEZPVU5ECiAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbApAQCAtMzU3LDcgKzM1Nyw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbiA9IGMuc2V0KCdiYWQga2V5JykKLSAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgorICAgICAgICBleGNlcHQgZGIuREJOb3RGb3VuZEVycm9yIGFzIHZhbDoKICAgICAgICAgICAgIGFzc2VydCB2YWxbMF0gPT0gZGIuREJfTk9URk9VTkQKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICBlbHNlOgpAQCAtMzcxLDcgKzM3MSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbiA9IGMuZ2V0X2JvdGgoJzA0MDQnLCAnYmFkIGRhdGEnKQotICAgICAgICBleGNlcHQgZGIuREJOb3RGb3VuZEVycm9yLCB2YWw6CisgICAgICAgIGV4Y2VwdCBkYi5EQk5vdEZvdW5kRXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgYXNzZXJ0IHZhbFswXSA9PSBkYi5EQl9OT1RGT1VORAogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCiAgICAgICAgIGVsc2U6CkBAIC0zOTksNyArMzk5LDcgQEAKICAgICAgICAgYy5kZWxldGUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZWMgPSBjLmN1cnJlbnQoKQotICAgICAgICBleGNlcHQgZGIuREJLZXlFbXB0eUVycm9yLCB2YWw6CisgICAgICAgIGV4Y2VwdCBkYi5EQktleUVtcHR5RXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgaWYgZ2V0X3JhaXNlc19lcnJvcjoKICAgICAgICAgICAgICAgICBhc3NlcnQgdmFsWzBdID09IGRiLkRCX0tFWUVNUFRZCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCkBAIC00NDUsNyArNDQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kCiAgICAgICAgICAgICAgICAgIyBhIGJ1ZyBtYXkgY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuLi4KICAgICAgICAgICAgICAgICBnZXRhdHRyKGMsIG1ldGhvZCkoKmFyZ3MpCi0gICAgICAgICAgICBleGNlcHQgZGIuREJFcnJvciwgdmFsOgorICAgICAgICAgICAgZXhjZXB0IGRiLkRCRXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgICAgIGFzc2VydCB2YWxbMF0gPT0gMAogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICAgICAgZWxzZToKQEAgLTczMCw3ICs3MzAsNyBAQAogICAgICAgICB0eG4uYWJvcnQoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0eG4uYWJvcnQoKQotICAgICAgICBleGNlcHQgZGIuREJFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IGRiLkRCRXJyb3IgYXMgZToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIkRCVHhuLmFib3J0KCkgY2FsbGVkIGFmdGVyIERCX1RYTiBubyBsb25nZXIgdmFsaWQgdy9vIGFuIGV4Y2VwdGlvbiIKQEAgLTczOSw3ICs3MzksNyBAQAogICAgICAgICB0eG4uY29tbWl0KCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdHhuLmNvbW1pdCgpCi0gICAgICAgIGV4Y2VwdCBkYi5EQkVycm9yLCBlOgorICAgICAgICBleGNlcHQgZGIuREJFcnJvciBhcyBlOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiREJUeG4uY29tbWl0KCkgY2FsbGVkIGFmdGVyIERCX1RYTiBubyBsb25nZXIgdmFsaWQgdy9vIGFuIGV4Y2VwdGlvbiIKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY29tcGFyZS5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY29tcGFyZS5weQppbmRleCBjY2Y4YjgzLi5iM2VhZjNhIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2NvbXBhcmUucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9jb21wYXJlLnB5CkBAIC0yMzQsNyArMjM0LDcgQEAKICAgICAgICAgICAgIHNlbGYuZGIuc2V0X2J0X2NvbXBhcmUgKG15X2NvbXBhcmUpCiAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJ0aGlzIHNldCBzaG91bGQgZmFpbCIKIAotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcGFzcwogCiBkZWYgdGVzdF9zdWl0ZSAoKToKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcGlja2xlLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9waWNrbGUucHkKaW5kZXggMzkxNmU1Yy4uNDY4M2VjNiAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9waWNrbGUucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9waWNrbGUucHkKQEAgLTExLDcgKzExLDcgQEAKIHRyeToKICAgICAjIEZvciBQeXRob25zIHcvZGlzdHV0aWxzIHB5YnNkZGIKICAgICBmcm9tIGJzZGRiMyBpbXBvcnQgZGIKLWV4Y2VwdCBJbXBvcnRFcnJvciwgZToKK2V4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgogICAgICMgRm9yIFB5dGhvbiAyLjMKICAgICBmcm9tIGJzZGRiIGltcG9ydCBkYgogCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIGFzc2VydCBzZWxmLmRiWydzcGFtJ10gPT0gJ2VnZ3MnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZGIucHV0KCdzcGFtJywgJ2hhbScsIGZsYWdzPWRiLkRCX05PT1ZFUldSSVRFKQotICAgICAgICBleGNlcHQgZGIuREJFcnJvciwgZWdnOgorICAgICAgICBleGNlcHQgZGIuREJFcnJvciBhcyBlZ2c6CiAgICAgICAgICAgICBwaWNrbGVkRWdnID0gcGlja2xlLmR1bXBzKGVnZykKICAgICAgICAgICAgICNwcmludCByZXByKHBpY2tsZWRFZ2cpCiAgICAgICAgICAgICByb3R0ZW5FZ2cgPSBwaWNrbGUubG9hZHMocGlja2xlZEVnZykKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcmVjbm8ucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X3JlY25vLnB5CmluZGV4IDM1Mzk5YjUuLjdiZjM2OTUgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcmVjbm8ucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9yZWNuby5weQpAQCAtMjksNyArMjksNyBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6IHJhaXNlCiAKICAgICBkZWYgdGVzdDAxX2Jhc2ljKHNlbGYpOgpAQCAtNjMsNyArNjMsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRhdGEgPSBkWzBdICAjIFRoaXMgc2hvdWxkIHJhaXNlIGEgS2V5RXJyb3IhPyE/IQotICAgICAgICBleGNlcHQgZGIuREJJbnZhbGlkQXJnRXJyb3IsIHZhbDoKKyAgICAgICAgZXhjZXB0IGRiLkRCSW52YWxpZEFyZ0Vycm9yIGFzIHZhbDoKICAgICAgICAgICAgIGFzc2VydCB2YWxbMF0gPT0gZGIuRUlOVkFMCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgZWxzZToKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgIyB0ZXN0IHRoYXQgaGFzX2tleSByYWlzZXMgREIgZXhjZXB0aW9ucyAoZml4ZWQgaW4gcHlic2RkYiA0LjMuMikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZC5oYXNfa2V5KDApCi0gICAgICAgIGV4Y2VwdCBkYi5EQkVycm9yLCB2YWw6CisgICAgICAgIGV4Y2VwdCBkYi5EQkVycm9yIGFzIHZhbDoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiaGFzX2tleSBkaWQgbm90IHJhaXNlIGEgcHJvcGVyIGV4Y2VwdGlvbiIpCkBAIC04Niw3ICs4Niw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZGF0YSA9IGQuZ2V0KDEwMCkKLSAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgorICAgICAgICBleGNlcHQgZGIuREJOb3RGb3VuZEVycm9yIGFzIHZhbDoKICAgICAgICAgICAgIGlmIGdldF9yZXR1cm5zX25vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIGV4Y2VwdGlvbiIpCiAgICAgICAgIGVsc2U6CkBAIC0xNzcsNyArMTc3LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkLmdldCg5OSkKLSAgICAgICAgZXhjZXB0IGRiLkRCS2V5RW1wdHlFcnJvciwgdmFsOgorICAgICAgICBleGNlcHQgZGIuREJLZXlFbXB0eUVycm9yIGFzIHZhbDoKICAgICAgICAgICAgIGlmIGdldF9yZXR1cm5zX25vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIERCS2V5RW1wdHlFcnJvciBleGNlcHRpb24iKQogICAgICAgICAgICAgZWxzZToKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCiAgICAgICAgIHRyeTogICAgICAgICAgICAgICAgICAgICMgdGhpcyBvbmUgd2lsbCBmYWlsCiAgICAgICAgICAgICBkLmFwcGVuZCgnYmFkJyAqIDIwKQotICAgICAgICBleGNlcHQgZGIuREJJbnZhbGlkQXJnRXJyb3IsIHZhbDoKKyAgICAgICAgZXhjZXB0IGRiLkRCSW52YWxpZEFyZ0Vycm9yIGFzIHZhbDoKICAgICAgICAgICAgIGFzc2VydCB2YWxbMF0gPT0gZGIuRUlOVkFMCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfdGhyZWFkLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF90aHJlYWQucHkKaW5kZXggYmYxOWQyMS4uYjNkN2VmOSAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF90aHJlYWQucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF90aHJlYWQucHkKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgc2VsZi5ob21lRGlyID0gaG9tZURpcgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ta2Rpcihob21lRGlyKQotICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOiByYWlzZQogICAgICAgICBzZWxmLmVudiA9IGRiLkRCRW52KCkKICAgICAgICAgc2VsZi5zZXRFbnZPcHRzKCkKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgICAgICAjIGZsdXNoIHRoZW0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZGJ1dGlscy5EZWFkbG9ja1dyYXAoZC5zeW5jLCBtYXhfcmV0cmllcz0xMikKLSAgICAgICAgZXhjZXB0IGRiLkRCSW5jb21wbGV0ZUVycm9yLCB2YWw6CisgICAgICAgIGV4Y2VwdCBkYi5EQkluY29tcGxldGVFcnJvciBhcyB2YWw6CiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50ICJjb3VsZCBub3QgY29tcGxldGUgc3luYygpLi4uIgogCkBAIC0zNjAsNyArMzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogcmVjb3JkcyAlZCAtICVkIGZpbmlzaGVkIiAlIChuYW1lLCBzdGFydCwgeCkKICAgICAgICAgICAgICAgICB0eG4uY29tbWl0KCkKICAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCAoZGIuREJMb2NrRGVhZGxvY2tFcnJvciwgZGIuREJMb2NrTm90R3JhbnRlZEVycm9yKSwgdmFsOgorICAgICAgICAgICAgZXhjZXB0IChkYi5EQkxvY2tEZWFkbG9ja0Vycm9yLCBkYi5EQkxvY2tOb3RHcmFudGVkRXJyb3IpIGFzIHZhbDoKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBwcmludCAiJXM6IEFib3J0aW5nIHRyYW5zYWN0aW9uICglcykiICUgKG5hbWUsIHZhbFsxXSkKICAgICAgICAgICAgICAgICB0eG4uYWJvcnQoKQpAQCAtMzk4LDcgKzM5OCw3IEBACiAgICAgICAgICAgICAgICAgZmluaXNoZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiBkZWxldGVkIHJlY29yZHMgJXMiICUgKG5hbWUsIHJlY3MpCi0gICAgICAgICAgICBleGNlcHQgKGRiLkRCTG9ja0RlYWRsb2NrRXJyb3IsIGRiLkRCTG9ja05vdEdyYW50ZWRFcnJvciksIHZhbDoKKyAgICAgICAgICAgIGV4Y2VwdCAoZGIuREJMb2NrRGVhZGxvY2tFcnJvciwgZGIuREJMb2NrTm90R3JhbnRlZEVycm9yKSBhcyB2YWw6CiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiBBYm9ydGluZyB0cmFuc2FjdGlvbiAoJXMpIiAlIChuYW1lLCB2YWxbMV0pCiAgICAgICAgICAgICAgICAgdHhuLmFib3J0KCkKQEAgLTQyOCw3ICs0MjgsNyBAQAogICAgICAgICAgICAgICAgICAgICBjLmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgdHhuLmNvbW1pdCgpCiAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gVHJ1ZQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoZGIuREJMb2NrRGVhZGxvY2tFcnJvciwgZGIuREJMb2NrTm90R3JhbnRlZEVycm9yKSwgdmFsOgorICAgICAgICAgICAgICAgIGV4Y2VwdCAoZGIuREJMb2NrRGVhZGxvY2tFcnJvciwgZGIuREJMb2NrTm90R3JhbnRlZEVycm9yKSBhcyB2YWw6CiAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJXM6IEFib3J0aW5nIHRyYW5zYWN0aW9uICglcykiICUgKG5hbWUsIHZhbFsxXSkKICAgICAgICAgICAgICAgICAgICAgYy5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvY2dpLnB5IGIvTGliL2NnaS5weQppbmRleCA4MGIzYjdhLi4wY2M1ZmFkIDEwMDc1NQotLS0gYS9MaWIvY2dpLnB5CisrKyBiL0xpYi9jZ2kucHkKQEAgLTk4Miw3ICs5ODIsNyBAQAogICAgIHByaW50ICI8SDM+Q3VycmVudCBXb3JraW5nIERpcmVjdG9yeTo8L0gzPiIKICAgICB0cnk6CiAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgIm9zLmVycm9yOiIsIGVzY2FwZShzdHIobXNnKSkKICAgICBlbHNlOgogICAgICAgICBwcmludCBlc2NhcGUocHdkKQpkaWZmIC0tZ2l0IGEvTGliL2NvZGVjcy5weSBiL0xpYi9jb2RlY3MucHkKaW5kZXggZjgzNGI4ZC4uZTRlMTRjZiAxMDA2NDQKLS0tIGEvTGliL2NvZGVjcy5weQorKysgYi9MaWIvY29kZWNzLnB5CkBAIC0xMyw3ICsxMyw3IEBACiAKIHRyeToKICAgICBmcm9tIF9jb2RlY3MgaW1wb3J0ICoKLWV4Y2VwdCBJbXBvcnRFcnJvciwgd2h5OgorZXhjZXB0IEltcG9ydEVycm9yIGFzIHdoeToKICAgICByYWlzZSBTeXN0ZW1FcnJvcignRmFpbGVkIHRvIGxvYWQgdGhlIGJ1aWx0aW4gY29kZWNzOiAlcycgJSB3aHkpCiAKIF9fYWxsX18gPSBbInJlZ2lzdGVyIiwgImxvb2t1cCIsICJvcGVuIiwgIkVuY29kZWRGaWxlIiwgIkJPTSIsICJCT01fQkUiLApAQCAtNDIyLDcgKzQyMiw3IEBACiAgICAgICAgICAgICBkYXRhID0gc2VsZi5ieXRlYnVmZmVyICsgbmV3ZGF0YQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG5ld2NoYXJzLCBkZWNvZGVkYnl0ZXMgPSBzZWxmLmRlY29kZShkYXRhLCBzZWxmLmVycm9ycykKLSAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IsIGV4YzoKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgICAgIGlmIGZpcnN0bGluZToKICAgICAgICAgICAgICAgICAgICAgbmV3Y2hhcnMsIGRlY29kZWRieXRlcyA9IHNlbGYuZGVjb2RlKGRhdGFbOmV4Yy5zdGFydF0sIHNlbGYuZXJyb3JzKQogICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IG5ld2NoYXJzLnNwbGl0bGluZXMoVHJ1ZSkKZGlmZiAtLWdpdCBhL0xpYi9jb2Rlb3AucHkgYi9MaWIvY29kZW9wLnB5CmluZGV4IDU2MTZkOTIuLjZhYmRlMmUgMTAwNjQ0Ci0tLSBhL0xpYi9jb2Rlb3AucHkKKysrIGIvTGliL2NvZGVvcC5weQpAQCAtODAsMTggKzgwLDE4IEBACiAKICAgICB0cnk6CiAgICAgICAgIGNvZGUgPSBjb21waWxlcihzb3VyY2UsIGZpbGVuYW1lLCBzeW1ib2wpCi0gICAgZXhjZXB0IFN5bnRheEVycm9yLCBlcnI6CisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGVycjoKICAgICAgICAgcGFzcwogCiAgICAgdHJ5OgogICAgICAgICBjb2RlMSA9IGNvbXBpbGVyKHNvdXJjZSArICJcbiIsIGZpbGVuYW1lLCBzeW1ib2wpCi0gICAgZXhjZXB0IFN5bnRheEVycm9yLCBlcnIxOgotICAgICAgICBwYXNzCisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGU6CisgICAgICAgIGVycjEgPSBlCiAKICAgICB0cnk6CiAgICAgICAgIGNvZGUyID0gY29tcGlsZXIoc291cmNlICsgIlxuXG4iLCBmaWxlbmFtZSwgc3ltYm9sKQotICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgZXJyMjoKLSAgICAgICAgcGFzcworICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBlOgorICAgICAgICBlcnIyID0gZQogCiAgICAgaWYgY29kZToKICAgICAgICAgcmV0dXJuIGNvZGUKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlYWxsLnB5IGIvTGliL2NvbXBpbGVhbGwucHkKaW5kZXggYjIxZDk1Zi4uMWU1YzZhNiAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVhbGwucHkKKysrIGIvTGliL2NvbXBpbGVhbGwucHkKQEAgLTY1LDEyICs2NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICBvayA9IHB5X2NvbXBpbGUuY29tcGlsZShmdWxsbmFtZSwgTm9uZSwgZGZpbGUsIFRydWUpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAotICAgICAgICAgICAgICAgIGV4Y2VwdCBweV9jb21waWxlLlB5Q29tcGlsZUVycm9yLGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgcHlfY29tcGlsZS5QeUNvbXBpbGVFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIGlmIHF1aWV0OgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0NvbXBpbGluZycsIGZ1bGxuYW1lLCAnLi4uJwogICAgICAgICAgICAgICAgICAgICBwcmludCBlcnIubXNnCiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlNvcnJ5IiwgZQogICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICBpbXBvcnQgZ2V0b3B0CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdsZnFkOng6JykKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50IG1zZwogICAgICAgICBwcmludCAidXNhZ2U6IHB5dGhvbiBjb21waWxlYWxsLnB5IFstbF0gWy1mXSBbLXFdIFstZCBkZXN0ZGlyXSAiIFwKICAgICAgICAgICAgICAgIlsteCByZWdleHBdIFtkaXJlY3RvcnkgLi4uXSIKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlci9weWNvZGVnZW4ucHkgYi9MaWIvY29tcGlsZXIvcHljb2RlZ2VuLnB5CmluZGV4IDMyNWNhMDYuLjU1ZDI2MTcgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlci9weWNvZGVnZW4ucHkKKysrIGIvTGliL2NvbXBpbGVyL3B5Y29kZWdlbi5weQpAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgICAgICAgICBhc3NlcnQgZ2V0YXR0cihzZWxmLCAnTmFtZUZpbmRlcicpCiAgICAgICAgICAgICBhc3NlcnQgZ2V0YXR0cihzZWxmLCAnRnVuY3Rpb25HZW4nKQogICAgICAgICAgICAgYXNzZXJ0IGdldGF0dHIoc2VsZiwgJ0NsYXNzR2VuJykKLSAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBpbnRybyA9ICJCYWQgY2xhc3MgY29uc3RydWN0aW9uIGZvciAlcyIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IsIGludHJvCiAKZGlmZiAtLWdpdCBhL0xpYi9jb250ZXh0bGliLnB5IGIvTGliL2NvbnRleHRsaWIucHkKaW5kZXggYTgwN2M0Mi4uNzMxYmY4ZiAxMDA2NDQKLS0tIGEvTGliL2NvbnRleHRsaWIucHkKKysrIGIvTGliL2NvbnRleHRsaWIucHkKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmdlbi50aHJvdyh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKQogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZ2VuZXJhdG9yIGRpZG4ndCBzdG9wIGFmdGVyIHRocm93KCkiKQotICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24sIGV4YzoKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4YzoKICAgICAgICAgICAgICAgICAjIFN1cHByZXNzIHRoZSBleGNlcHRpb24gKnVubGVzcyogaXQncyB0aGUgc2FtZSBleGNlcHRpb24gdGhhdAogICAgICAgICAgICAgICAgICMgd2FzIHBhc3NlZCB0byB0aHJvdygpLiAgVGhpcyBwcmV2ZW50cyBhIFN0b3BJdGVyYXRpb24KICAgICAgICAgICAgICAgICAjIHJhaXNlZCBpbnNpZGUgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgZnJvbSBiZWluZyBzdXBwcmVzc2VkCmRpZmYgLS1naXQgYS9MaWIvY3N2LnB5IGIvTGliL2Nzdi5weQppbmRleCA3OWQ3MmI2Li5kOTExMTc1IDEwMDY0NAotLS0gYS9MaWIvY3N2LnB5CisrKyBiL0xpYi9jc3YucHkKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICBkZWYgX3ZhbGlkYXRlKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBfRGlhbGVjdChzZWxmKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFdlIGRvIHRoaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBweTIuMwogICAgICAgICAgICAgcmFpc2UgRXJyb3Ioc3RyKGUpKQogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL21hY2hvbGliL2R5bGQucHkgYi9MaWIvY3R5cGVzL21hY2hvbGliL2R5bGQucHkKaW5kZXggMzc2ZjY1ZC4uMDExYTM3MSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy9tYWNob2xpYi9keWxkLnB5CisrKyBiL0xpYi9jdHlwZXMvbWFjaG9saWIvZHlsZC5weQpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gZHlsZF9maW5kKGZuLCBleGVjdXRhYmxlX3BhdGg9ZXhlY3V0YWJsZV9wYXRoLCBlbnY9ZW52KQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgIHBhc3MKICAgICBmbXdrX2luZGV4ID0gZm4ucmZpbmQoJy5mcmFtZXdvcmsnKQogICAgIGlmIGZtd2tfaW5kZXggPT0gLTE6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkgYi9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKaW5kZXggMmI3NDVjMi4uMjQ1ZGRhNiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQpAQCAtNTcsMTIgKzU3LDEyIEBACiAgICAgZm9yIG1vZG5hbWUgaW4gZmluZF9wYWNrYWdlX21vZHVsZXMocGFja2FnZSwgbWFzayk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZCA9IF9faW1wb3J0X18obW9kbmFtZSwgZ2xvYmFscygpLCBsb2NhbHMoKSwgWycqJ10pCi0gICAgICAgIGV4Y2VwdCBSZXNvdXJjZURlbmllZCwgZGV0YWlsOgorICAgICAgICBleGNlcHQgUmVzb3VyY2VEZW5pZWQgYXMgZGV0YWlsOgogICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQobW9kbmFtZSkKICAgICAgICAgICAgIGlmIHZlcmJvc2l0eSA+IDE6CiAgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIlNraXBwZWQgJXM6ICVzIiAlIChtb2RuYW1lLCBkZXRhaWwpCiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBkZXRhaWw6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZGV0YWlsOgogICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIldhcm5pbmc6IGNvdWxkIG5vdCBpbXBvcnQgJXM6ICVzIiAlIChtb2RuYW1lLCBkZXRhaWwpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBmb3IgbmFtZSBpbiBkaXIobW9kKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weQppbmRleCAyODY3Y2JmLi5jMTdiYTNjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICBkZWYgZ2V0X2V4Y2VwdChzZWxmLCBmdW5jLCAqYXJncywgKiprdyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3cpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGRldGFpbDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBkZXRhaWw6CiAgICAgICAgICAgICByZXR1cm4gZGV0YWlsLl9fY2xhc3NfXywgc3RyKGRldGFpbCkKIAogICAgIGRlZiB0ZXN0X21peGVkXzEoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQppbmRleCA2MTMxNjNkLi4wOTdlMWRhIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKQEAgLTMxMyw3ICszMTMsNyBAQAogICAgIGRlZiBnZXRfZXhjZXB0KHNlbGYsIGZ1bmMsICphcmdzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnVuYygqYXJncykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZGV0YWlsOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGRldGFpbDoKICAgICAgICAgICAgIHJldHVybiBkZXRhaWwuX19jbGFzc19fLCBzdHIoZGV0YWlsKQogCiAKQEAgLTM4OCw3ICszODgsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIFJlY3Vyc2l2ZS5fZmllbGRzXyA9IFsoIm5leHQiLCBSZWN1cnNpdmUpXQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGRldGFpbHM6CisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBkZXRhaWxzOgogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJTdHJ1Y3R1cmUgb3IgdW5pb24gY2Fubm90IGNvbnRhaW4gaXRzZWxmIiBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihkZXRhaWxzKSkKICAgICAgICAgZWxzZToKQEAgLTQwNSw3ICs0MDUsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIFNlY29uZC5fZmllbGRzXyA9IFsoImZpcnN0IiwgRmlyc3QpXQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGRldGFpbHM6CisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBkZXRhaWxzOgogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJfZmllbGRzXyBpcyBmaW5hbCIgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZGV0YWlscykpCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3V0aWwucHkgYi9MaWIvY3R5cGVzL3V0aWwucHkKaW5kZXggMmVlMjk2OC4uZTY1NjQ2YSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy91dGlsLnB5CisrKyBiL0xpYi9jdHlwZXMvdXRpbC5weQpAQCAtNjAsMTIgKzYwLDEyIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKG91dGZpbGUpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGNjb3V0KQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwgdHJhY2UpCmRpZmYgLS1naXQgYS9MaWIvZGlzLnB5IGIvTGliL2Rpcy5weQppbmRleCA4OWNhZjIwLi4xMWUzOGRmIDEwMDY0NAotLS0gYS9MaWIvZGlzLnB5CisrKyBiL0xpYi9kaXMucHkKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgICAgICBwcmludCAiRGlzYXNzZW1ibHkgb2YgJXM6IiAlIG5hbWUKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGRpcyh4MSkKLSAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBtc2c6CisgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgICAgIHByaW50ICJTb3JyeToiLCBtc2cKICAgICAgICAgICAgICAgICBwcmludAogICAgIGVsaWYgaGFzYXR0cih4LCAnY29fY29kZScpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9iY3BwY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2JjcHBjb21waWxlci5weQppbmRleCBjYTUyNGE1Li42OTY4Y2I4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2JjcHBjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2JjcHBjb21waWxlci5weQpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgICAgICAgICAgIyBUaGlzIG5lZWRzIHRvIGJlIGNvbXBpbGVkIHRvIGEgLnJlcyBmaWxlIC0tIGRvIGl0IG5vdy4KICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24gKFsiYnJjYzMyIiwgIi1mbyIsIG9iaiwgc3JjXSkKLSAgICAgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yLCBtc2c6CisgICAgICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvciwgbXNnCiAgICAgICAgICAgICAgICAgY29udGludWUgIyB0aGUgJ2ZvcicgbG9vcAogCkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNwYXduIChbc2VsZi5jY10gKyBjb21waWxlX29wdHMgKyBwcF9vcHRzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRfb3B0LCBvdXRwdXRfb3B0XSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3MgKyBbc3JjXSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvciwgbXNnCiAKICAgICAgICAgcmV0dXJuIG9iamVjdHMKQEAgLTE2NCw3ICsxNjQsNyBAQAogICAgICAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgICAgICMgWFhYIHdoYXQgZ29lcyBoZXJlPwogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24gKFtzZWxmLmxpYl0gKyBsaWJfYXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIExpYkVycm9yLCBtc2cKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxvZy5kZWJ1Zygic2tpcHBpbmcgJXMgKHVwLXRvLWRhdGUpIiwgb3V0cHV0X2ZpbGVuYW1lKQpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAgICAgICAgICBzZWxmLm1rcGF0aCAob3MucGF0aC5kaXJuYW1lIChvdXRwdXRfZmlsZW5hbWUpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24gKFtzZWxmLmxpbmtlcl0gKyBsZF9hcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcmFpc2UgTGlua0Vycm9yLCBtc2cKIAogICAgICAgICBlbHNlOgpAQCAtMzkxLDcgKzM5MSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5ta3BhdGgob3MucGF0aC5kaXJuYW1lKG91dHB1dF9maWxlKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNwYXduKHBwX2FyZ3MpCi0gICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwcmludCBtc2cKICAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IsIG1zZwogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvcmVnaXN0ZXIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvcmVnaXN0ZXIucHkKaW5kZXggMzE3NzQ3Ni4uY2I5NTI1YSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3JlZ2lzdGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9yZWdpc3Rlci5weQpAQCAtMjg0LDExICsyODQsMTEgQEAKICAgICAgICAgZGF0YSA9ICcnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IG9wZW5lci5vcGVuKHJlcSkKLSAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yLCBlOgorICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIHNlbGYuc2hvd19yZXNwb25zZToKICAgICAgICAgICAgICAgICBkYXRhID0gZS5mcC5yZWFkKCkKICAgICAgICAgICAgIHJlc3VsdCA9IGUuY29kZSwgZS5tc2cKLSAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yIGFzIGU6CiAgICAgICAgICAgICByZXN1bHQgPSA1MDAsIHN0cihlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgc2VsZi5zaG93X3Jlc3BvbnNlOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CmluZGV4IDNkZmU2ZjIuLmViMmRiNTAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKQEAgLTMzMyw3ICszMzMsNyBAQAogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5wcm9jZXNzX3RlbXBsYXRlX2xpbmUobGluZSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNUZW1wbGF0ZUVycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzVGVtcGxhdGVFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc2VsZi53YXJuKCIlcywgbGluZSAlZDogJXMiICUgKHRlbXBsYXRlLmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5jdXJyZW50X2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZykpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQppbmRleCA2N2JhMDgwLi43Zjk2YTQ3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKQEAgLTE4NCw3ICsxODQsNyBAQAogICAgICAgICAgICAgaHR0cC5wdXRoZWFkZXIoJ0F1dGhvcml6YXRpb24nLCBhdXRoKQogICAgICAgICAgICAgaHR0cC5lbmRoZWFkZXJzKCkKICAgICAgICAgICAgIGh0dHAuc2VuZChib2R5KQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFubm91bmNlKHN0cihlKSwgbG9nLkVSUk9SKQogICAgICAgICAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29yZS5weSBiL0xpYi9kaXN0dXRpbHMvY29yZS5weQppbmRleCA4NWEyOGZlLi40ZGM4ZWIwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvcmUucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb3JlLnB5CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAjIChpZS4gZXZlcnl0aGluZyBleGNlcHQgZGlzdGNsYXNzKSB0byBpbml0aWFsaXplIGl0CiAgICAgdHJ5OgogICAgICAgICBfc2V0dXBfZGlzdHJpYnV0aW9uID0gZGlzdCA9IGtsYXNzKGF0dHJzKQotICAgIGV4Y2VwdCBEaXN0dXRpbHNTZXR1cEVycm9yLCBtc2c6CisgICAgZXhjZXB0IERpc3R1dGlsc1NldHVwRXJyb3IgYXMgbXNnOgogICAgICAgICBpZiAnbmFtZScgbm90IGluIGF0dHJzOgogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCwgImVycm9yIGluICVzIHNldHVwIGNvbW1hbmQ6ICVzIiAlIFwKICAgICAgICAgICAgICAgICAgIChhdHRyc1snbmFtZSddLCBtc2cpCkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICAjIGZhdWx0LCBzbyB0dXJuIHRoZW0gaW50byBTeXN0ZW1FeGl0IHRvIHN1cHByZXNzIHRyYWNlYmFja3MuCiAgICAgdHJ5OgogICAgICAgICBvayA9IGRpc3QucGFyc2VfY29tbWFuZF9saW5lKCkKLSAgICBleGNlcHQgRGlzdHV0aWxzQXJnRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgRGlzdHV0aWxzQXJnRXJyb3IgYXMgbXNnOgogICAgICAgICByYWlzZSBTeXN0ZW1FeGl0LCBnZW5fdXNhZ2UoZGlzdC5zY3JpcHRfbmFtZSkgKyAiXG5lcnJvcjogJXMiICUgbXNnCiAKICAgICBpZiBERUJVRzoKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICAgICAgZGlzdC5ydW5fY29tbWFuZHMoKQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0LCAiaW50ZXJydXB0ZWQiCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpLCBleGM6CisgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpIGFzIGV4YzoKICAgICAgICAgICAgIGVycm9yID0gZ3Jva19lbnZpcm9ubWVudF9lcnJvcihleGMpCiAKICAgICAgICAgICAgIGlmIERFQlVHOgpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCwgZXJyb3IKIAogICAgICAgICBleGNlcHQgKERpc3R1dGlsc0Vycm9yLAotICAgICAgICAgICAgICAgIENDb21waWxlckVycm9yKSwgbXNnOgorICAgICAgICAgICAgICAgIENDb21waWxlckVycm9yKSBhcyBtc2c6CiAgICAgICAgICAgICBpZiBERUJVRzoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKaW5kZXggNGZkMjNlNi4uNDRiNTg1MCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKQEAgLTE0MiwxMyArMTQyLDEzIEBACiAgICAgICAgICAgICAjIGdjYyBuZWVkcyAnLnJlcycgYW5kICcucmMnIGNvbXBpbGVkIHRvIG9iamVjdCBmaWxlcyAhISEKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNwYXduKFsid2luZHJlcyIsICItaSIsIHNyYywgIi1vIiwgb2JqXSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvciwgbXNnCiAgICAgICAgIGVsc2U6ICMgZm9yIG90aGVyIGZpbGVzIHVzZSB0aGUgQy1jb21waWxlcgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oc2VsZi5jb21waWxlcl9zbyArIGNjX2FyZ3MgKyBbc3JjLCAnLW8nLCBvYmpdICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yLCBtc2cKIAogICAgIGRlZiBsaW5rIChzZWxmLApAQCAtMzc5LDcgKzM3OSw3IEBACiAgICAgICAgIHMgPSBmLnJlYWQoKQogICAgICAgICBmLmNsb3NlKCkKIAotICAgIGV4Y2VwdCBJT0Vycm9yLCBleGM6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgogICAgICAgICAjIGlmIHdlIGNhbid0IHJlYWQgdGhpcyBmaWxlLCB3ZSBjYW5ub3Qgc2F5IGl0IGlzIHdyb25nCiAgICAgICAgICMgdGhlIGNvbXBpbGVyIHdpbGwgY29tcGxhaW4gbGF0ZXIgYWJvdXQgdGhpcyBmaWxlIGFzIG1pc3NpbmcKICAgICAgICAgcmV0dXJuIChDT05GSUdfSF9VTkNFUlRBSU4sCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQppbmRleCA5MmY0OTM0Li4zOThmMjQyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5ta2RpcihoZWFkKQogICAgICAgICAgICAgICAgIGNyZWF0ZWRfZGlycy5hcHBlbmQoaGVhZCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBleGM6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgJyVzJzogJXMiICUgKGhlYWQsIGV4Y1stMV0pCiAKQEAgLTE0Miw3ICsxNDIsOCBAQAogICAgICAgICAgICAgICAiY2Fubm90IGNvcHkgdHJlZSAnJXMnOiBub3QgYSBkaXJlY3RvcnkiICUgc3JjCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc3JjKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgKGVycm5vLCBlcnJzdHIpOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAoZXJybm8sIGVycnN0cikgPSBlCiAgICAgICAgIGlmIGRyeV9ydW46CiAgICAgICAgICAgICBuYW1lcyA9IFtdCiAgICAgICAgIGVsc2U6CkBAIC0yMDksNyArMjEwLDcgQEAKICAgICAgICAgICAgIGFic3BhdGggPSBvcy5wYXRoLmFic3BhdGgoY21kWzFdKQogICAgICAgICAgICAgaWYgYWJzcGF0aCBpbiBfcGF0aF9jcmVhdGVkOgogICAgICAgICAgICAgICAgIGRlbCBfcGF0aF9jcmVhdGVkW2Fic3BhdGhdCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvciksIGV4YzoKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBleGM6CiAgICAgICAgICAgICBsb2cud2Fybihncm9rX2Vudmlyb25tZW50X2Vycm9yKAogICAgICAgICAgICAgICAgICAgICBleGMsICJlcnJvciByZW1vdmluZyAlczogIiAlIGRpcmVjdG9yeSkpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvZGlzdC5weQppbmRleCBkMDk4Y2I5Li5kMjFjNWUyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9kaXN0LnB5CkBAIC0zOTgsNyArMzk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgb3B0LCBzdHJ0b2Jvb2wodmFsKSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgb3B0LCB2YWwpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIG1zZzoKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCBtc2cKIAogICAgICMgcGFyc2VfY29uZmlnX2ZpbGVzICgpCkBAIC01MTUsNyArNTE1LDcgQEAKICAgICAgICAgIyBpdCB0YWtlcy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY21kX2NsYXNzID0gc2VsZi5nZXRfY29tbWFuZF9jbGFzcyhjb21tYW5kKQotICAgICAgICBleGNlcHQgRGlzdHV0aWxzTW9kdWxlRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IERpc3R1dGlsc01vZHVsZUVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0FyZ0Vycm9yLCBtc2cKIAogICAgICAgICAjIFJlcXVpcmUgdGhhdCB0aGUgY29tbWFuZCBjbGFzcyBiZSBkZXJpdmVkIGZyb20gQ29tbWFuZCAtLSB3YW50CkBAIC05MTcsNyArOTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzT3B0aW9uRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJlcnJvciBpbiAlczogY29tbWFuZCAnJXMnIGhhcyBubyBzdWNoIG9wdGlvbiAnJXMnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc291cmNlLCBjb21tYW5kX25hbWUsIG9wdGlvbikpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCBtc2cKIAogICAgIGRlZiByZWluaXRpYWxpemVfY29tbWFuZCAoc2VsZiwgY29tbWFuZCwgcmVpbml0X3N1YmNvbW1hbmRzPTApOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9lbXhjY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQppbmRleCBmNTJlNjMyLi44YWVmMmI3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQpAQCAtNzksMTMgKzc5LDEzIEBACiAgICAgICAgICAgICAjIGdjYyByZXF1aXJlcyAnLnJjJyBjb21waWxlZCB0byBiaW5hcnkgKCcucmVzJykgZmlsZXMgISEhCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbInJjIiwgIi1yIiwgc3JjXSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvciwgbXNnCiAgICAgICAgIGVsc2U6ICMgZm9yIG90aGVyIGZpbGVzIHVzZSB0aGUgQy1jb21waWxlcgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oc2VsZi5jb21waWxlcl9zbyArIGNjX2FyZ3MgKyBbc3JjLCAnLW8nLCBvYmpdICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yLCBtc2cKIAogICAgIGRlZiBsaW5rIChzZWxmLApAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgICAgIHMgPSBmLnJlYWQoKQogICAgICAgICBmLmNsb3NlKCkKIAotICAgIGV4Y2VwdCBJT0Vycm9yLCBleGM6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgogICAgICAgICAjIGlmIHdlIGNhbid0IHJlYWQgdGhpcyBmaWxlLCB3ZSBjYW5ub3Qgc2F5IGl0IGlzIHdyb25nCiAgICAgICAgICMgdGhlIGNvbXBpbGVyIHdpbGwgY29tcGxhaW4gbGF0ZXIgYWJvdXQgdGhpcyBmaWxlIGFzIG1pc3NpbmcKICAgICAgICAgcmV0dXJuIChDT05GSUdfSF9VTkNFUlRBSU4sCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2ZhbmN5X2dldG9wdC5weSBiL0xpYi9kaXN0dXRpbHMvZmFuY3lfZ2V0b3B0LnB5CmluZGV4IDMxY2YwYzUuLjYyYTI0ZTggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZmFuY3lfZ2V0b3B0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZmFuY3lfZ2V0b3B0LnB5CkBAIC0yNTYsNyArMjU2LDcgQEAKICAgICAgICAgc2hvcnRfb3B0cyA9IHN0cmluZy5qb2luKHNlbGYuc2hvcnRfb3B0cykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJncywgc2hvcnRfb3B0cywgc2VsZi5sb25nX29wdHMpCi0gICAgICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNBcmdFcnJvciwgbXNnCiAKICAgICAgICAgZm9yIG9wdCwgdmFsIGluIG9wdHM6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5CmluZGV4IDM3YjE1MmUuLmMyMjVhZDMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5CkBAIC0zMiwyNyArMzIsMzEgQEAKICAgICB0cnk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZzcmMgPSBvcGVuKHNyYywgJ3JiJykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yLCAoZXJybm8sIGVycnN0cik6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgKGVycm5vLCBlcnJzdHIpID0gZQogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IG9wZW4gJyVzJzogJXMiICUgKHNyYywgZXJyc3RyKQogCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRzdCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgKGVycm5vLCBlcnJzdHIpOgorICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgKGVycm5vLCBlcnJzdHIpID0gZQogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGVsZXRlICclcyc6ICVzIiAlIChkc3QsIGVycnN0cikKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmZHN0ID0gb3Blbihkc3QsICd3YicpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgKGVycm5vLCBlcnJzdHIpOgorICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIChlcnJubywgZXJyc3RyKSA9IGUKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAogICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgJyVzJzogJXMiICUgKGRzdCwgZXJyc3RyKQogCiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYnVmID0gZnNyYy5yZWFkKGJ1ZmZlcl9zaXplKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCAoZXJybm8sIGVycnN0cik6CisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAoZXJybm8sIGVycnN0cikgPSBlCiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZWFkIGZyb20gJyVzJzogJXMiICUgKHNyYywgZXJyc3RyKQogCkBAIC02MSw3ICs2NSw4IEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZHN0LndyaXRlKGJ1ZikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgKGVycm5vLCBlcnJzdHIpOgorICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgKGVycm5vLCBlcnJzdHIpID0gZQogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJzogJXMiICUgKGRzdCwgZXJyc3RyKQogCkBAIC0xNDYsNyArMTUxLDcgQEAKICAgICAgICAgaW1wb3J0IG1hY29zdG9vbHMKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFjb3N0b29scy5jb3B5KHNyYywgZHN0LCAwLCBwcmVzZXJ2ZV90aW1lcykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBleGM6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBleGM6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyc6ICVzIiAlIChzcmMsIGRzdCwgZXhjWy0xXSkKIApAQCAtMjE3LDcgKzIyMiw4IEBACiAgICAgY29weV9pdCA9IDAKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRzdCkKLSAgICBleGNlcHQgb3MuZXJyb3IsIChudW0sIG1zZyk6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgIChudW0sIG1zZykgPSBlCiAgICAgICAgIGlmIG51bSA9PSBlcnJuby5FWERFVjoKICAgICAgICAgICAgIGNvcHlfaXQgPSAxCiAgICAgICAgIGVsc2U6CkBAIC0yMjgsNyArMjM0LDggQEAKICAgICAgICAgY29weV9maWxlKHNyYywgZHN0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IsIChudW0sIG1zZyk6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgKG51bSwgbXNnKSA9IGUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZHN0KQogICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9tc3ZjY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL21zdmNjb21waWxlci5weQppbmRleCA5ZWMzNTA4Li45NjhhNGZmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL21zdmNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL21zdmNjb21waWxlci5weQpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zZXRfbWFjcm8oIkZyYW1ld29ya1NES0RpciIsIG5ldCwgInNka2luc3RhbGxyb290djEuMSIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuc2V0X21hY3JvKCJGcmFtZXdvcmtTREtEaXIiLCBuZXQsICJzZGtpbnN0YWxscm9vdCIpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXhjOiAjCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBleGM6ICMKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICgiIiJQeXRob24gd2FzIGJ1aWx0IHdpdGggVmlzdWFsIFN0dWRpbyAyMDAzOwogZXh0ZW5zaW9ucyBtdXN0IGJlIGJ1aWx0IHdpdGggYSBjb21waWxlciB0aGFuIGNhbiBnZW5lcmF0ZSBjb21wYXRpYmxlIGJpbmFyaWVzLgpAQCAtMzcxLDcgKzM3MSw3IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLnNwYXduIChbc2VsZi5yY10gKyBwcF9vcHRzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW291dHB1dF9vcHRdICsgW2lucHV0X29wdF0pCi0gICAgICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IsIG1zZwogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbGlmIGV4dCBpbiBzZWxmLl9tY19leHRlbnNpb25zOgpAQCAtNDAwLDcgKzQwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24gKFtzZWxmLnJjXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiL2ZvIiArIG9ial0gKyBbcmNfZmlsZV0pCiAKLSAgICAgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yLCBtc2c6CisgICAgICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvciwgbXNnCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsc2U6CkBAIC00MTQsNyArNDE0LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNwYXduIChbc2VsZi5jY10gKyBjb21waWxlX29wdHMgKyBwcF9vcHRzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRfb3B0LCBvdXRwdXRfb3B0XSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3MpCi0gICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IsIG1zZwogCiAgICAgICAgIHJldHVybiBvYmplY3RzCkBAIC00NDAsNyArNDQwLDcgQEAKICAgICAgICAgICAgICAgICBwYXNzICAgICAgICAgICAgICAgICAgICAjIFhYWCB3aGF0IGdvZXMgaGVyZT8KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNwYXduIChbc2VsZi5saWJdICsgbGliX2FyZ3MpCi0gICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICByYWlzZSBMaWJFcnJvciwgbXNnCiAKICAgICAgICAgZWxzZToKQEAgLTUxOSw3ICs1MTksNyBAQAogICAgICAgICAgICAgc2VsZi5ta3BhdGggKG9zLnBhdGguZGlybmFtZSAob3V0cHV0X2ZpbGVuYW1lKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNwYXduIChbc2VsZi5saW5rZXJdICsgbGRfYXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIExpbmtFcnJvciwgbXNnCiAKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkgYi9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CmluZGV4IGU1NjU0ZmYuLjZiMDdmNTIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9zcGF3bi5weQpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAjIHNwYXduIGZvciBOVCByZXF1aXJlcyBhIGZ1bGwgcGF0aCB0byB0aGUgLmV4ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYyA9IG9zLnNwYXdudihvcy5QX1dBSVQsIGV4ZWN1dGFibGUsIGNtZCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGV4YzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgIyB0aGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuIHRoZSBjb21tYW5kIGlzbid0IGZvdW5kCiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICJjb21tYW5kICclcycgZmFpbGVkOiAlcyIgJSAoY21kWzBdLCBleGNbLTFdKQpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgICMgc3Bhd252IGZvciBPUy8yIEVNWCByZXF1aXJlcyBhIGZ1bGwgcGF0aCB0byB0aGUgLmV4ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYyA9IG9zLnNwYXdudihvcy5QX1dBSVQsIGV4ZWN1dGFibGUsIGNtZCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGV4YzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgIyB0aGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuIHRoZSBjb21tYW5kIGlzbid0IGZvdW5kCiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICJjb21tYW5kICclcycgZmFpbGVkOiAlcyIgJSAoY21kWzBdLCBleGNbLTFdKQpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgICAgICAjcHJpbnQgImNtZFswXSA9IiwgY21kWzBdCiAgICAgICAgICAgICAjcHJpbnQgImNtZCA9IiwgY21kCiAgICAgICAgICAgICBleGVjX2ZuKGNtZFswXSwgY21kKQotICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInVuYWJsZSB0byBleGVjdXRlICVzOiAlc1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbWRbMF0sIGUuc3RyZXJyb3IpKQogICAgICAgICAgICAgb3MuX2V4aXQoMSkKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIChwaWQsIHN0YXR1cykgPSBvcy53YWl0cGlkKHBpZCwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBleGM6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgICAgICAgICAgaW1wb3J0IGVycm5vCiAgICAgICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlRSOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQppbmRleCA4OTg5ZDkyLi45ZGU3MjM0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQpAQCAtMzQ0LDcgKzM0NCw3IEBACiAgICAgdHJ5OgogICAgICAgICBmaWxlbmFtZSA9IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCiAgICAgICAgIHBhcnNlX21ha2VmaWxlKGZpbGVuYW1lLCBnKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQogICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CiAgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCkBAIC0zNTUsNyArMzU1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGZpbGVuYW1lID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKICAgICAgICAgcGFyc2VfY29uZmlnX2gob3BlbihmaWxlbmFtZSksIGcpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCiAgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQppbmRleCA3NWU4YTUzLi4wNzk1ZjEyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLm1rcGF0aChvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZpbGUpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24ocHBfYXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvciwgbXNnCiAKICAgICBkZWYgX2NvbXBpbGUoc2VsZiwgb2JqLCBzcmMsIGV4dCwgY2NfYXJncywgZXh0cmFfcG9zdGFyZ3MsIHBwX29wdHMpOgpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc3Bhd24oY29tcGlsZXJfc28gKyBjY19hcmdzICsgW3NyYywgJy1vJywgb2JqXSArCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzKQotICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yLCBtc2cKIAogICAgIGRlZiBjcmVhdGVfc3RhdGljX2xpYihzZWxmLCBvYmplY3RzLCBvdXRwdXRfbGlibmFtZSwKQEAgLTE5Niw3ICsxOTYsNyBAQAogICAgICAgICAgICAgaWYgc2VsZi5yYW5saWI6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLnNwYXduKHNlbGYucmFubGliICsgW291dHB1dF9maWxlbmFtZV0pCi0gICAgICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBMaWJFcnJvciwgbXNnCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsb2cuZGVidWcoInNraXBwaW5nICVzICh1cC10by1kYXRlKSIsIG91dHB1dF9maWxlbmFtZSkKQEAgLTI1MCw3ICsyNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBsaW5rZXIgPSBfZGFyd2luX2NvbXBpbGVyX2ZpeHVwKGxpbmtlciwgbGRfYXJncykKIAogICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24obGlua2VyICsgbGRfYXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIExpbmtFcnJvciwgbXNnCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsb2cuZGVidWcoInNraXBwaW5nICVzICh1cC10by1kYXRlKSIsIG91dHB1dF9maWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdXRpbC5weQppbmRleCAxYmNkYTkzLi4xNmQ4YmNiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CkBAIC0yMjksNyArMjI5LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgcmV0dXJuIHJlLnN1YihyJ1wkKFthLXpBLVpfXVthLXpBLVpfMC05XSopJywgX3N1YnN0LCBzKQotICAgIGV4Y2VwdCBLZXlFcnJvciwgdmFyOgorICAgIGV4Y2VwdCBLZXlFcnJvciBhcyB2YXI6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJpbnZhbGlkIHZhcmlhYmxlICckJXMnIiAlIHZhcgogCiAjIHN1YnN0X3ZhcnMgKCkKZGlmZiAtLWdpdCBhL0xpYi9kb2N0ZXN0LnB5IGIvTGliL2RvY3Rlc3QucHkKaW5kZXggNDM1ZTEzYi4uZDEyMGEwMSAxMDA2NDQKLS0tIGEvTGliL2RvY3Rlc3QucHkKKysrIGIvTGliL2RvY3Rlc3QucHkKQEAgLTE2MDQsOCArMTYwNCw4IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSwgJ2ZvbycsICdmb28ucHknLCAwKQogICAgICAgICAgPj4+IHRyeToKICAgICAgICAgIC4uLiAgICAgcnVubmVyLnJ1bih0ZXN0KQotICAgICAgICAgLi4uIGV4Y2VwdCBVbmV4cGVjdGVkRXhjZXB0aW9uLCBmYWlsdXJlOgotICAgICAgICAgLi4uICAgICBwYXNzCisgICAgICAgICAuLi4gZXhjZXB0IFVuZXhwZWN0ZWRFeGNlcHRpb24gYXMgZjoKKyAgICAgICAgIC4uLiAgICAgZmFpbHVyZSA9IGYKIAogICAgICAgICAgPj4+IGZhaWx1cmUudGVzdCBpcyB0ZXN0CiAgICAgICAgICBUcnVlCkBAIC0xNjMyLDggKzE2MzIsOCBAQAogCiAgICAgICAgICA+Pj4gdHJ5OgogICAgICAgICAgLi4uICAgIHJ1bm5lci5ydW4odGVzdCkKLSAgICAgICAgIC4uLiBleGNlcHQgRG9jVGVzdEZhaWx1cmUsIGZhaWx1cmU6Ci0gICAgICAgICAuLi4gICAgcGFzcworICAgICAgICAgLi4uIGV4Y2VwdCBEb2NUZXN0RmFpbHVyZSBhcyBmOgorICAgICAgICAgLi4uICAgIGZhaWx1cmUgPSBmCiAKICAgICAgICBEb2NUZXN0RmFpbHVyZSBvYmplY3RzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSB0ZXN0OgogCkBAIC0yMTQxLDggKzIxNDEsOCBAQAogICAgICAgICAgICAgID4+PiBjYXNlID0gRG9jVGVzdENhc2UodGVzdCkKICAgICAgICAgICAgICA+Pj4gdHJ5OgogICAgICAgICAgICAgIC4uLiAgICAgY2FzZS5kZWJ1ZygpCi0gICAgICAgICAgICAgLi4uIGV4Y2VwdCBVbmV4cGVjdGVkRXhjZXB0aW9uLCBmYWlsdXJlOgotICAgICAgICAgICAgIC4uLiAgICAgcGFzcworICAgICAgICAgICAgIC4uLiBleGNlcHQgVW5leHBlY3RlZEV4Y2VwdGlvbiBhcyBmOgorICAgICAgICAgICAgIC4uLiAgICAgZmFpbHVyZSA9IGYKIAogICAgICAgICAgICBUaGUgVW5leHBlY3RlZEV4Y2VwdGlvbiBjb250YWlucyB0aGUgdGVzdCwgdGhlIGV4YW1wbGUsIGFuZAogICAgICAgICAgICB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uOgpAQCAtMjE3MCw4ICsyMTcwLDggQEAKIAogICAgICAgICAgICAgID4+PiB0cnk6CiAgICAgICAgICAgICAgLi4uICAgIGNhc2UuZGVidWcoKQotICAgICAgICAgICAgIC4uLiBleGNlcHQgRG9jVGVzdEZhaWx1cmUsIGZhaWx1cmU6Ci0gICAgICAgICAgICAgLi4uICAgIHBhc3MKKyAgICAgICAgICAgICAuLi4gZXhjZXB0IERvY1Rlc3RGYWlsdXJlIGFzIGY6CisgICAgICAgICAgICAgLi4uICAgIGZhaWx1cmUgPSBmCiAKICAgICAgICAgICAgRG9jVGVzdEZhaWx1cmUgb2JqZWN0cyBwcm92aWRlIGFjY2VzcyB0byB0aGUgdGVzdDoKIApkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkKaW5kZXggNDNmYjkzYy4uM2JhZjc3OSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3V1X2NvZGVjLnB5CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgICBicmVhawogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkYXRhID0gYTJiX3V1KHMpCi0gICAgICAgIGV4Y2VwdCBiaW5hc2NpaS5FcnJvciwgdjoKKyAgICAgICAgZXhjZXB0IGJpbmFzY2lpLkVycm9yIGFzIHY6CiAgICAgICAgICAgICAjIFdvcmthcm91bmQgZm9yIGJyb2tlbiB1dWVuY29kZXJzIGJ5IC9GcmVkcmlrIEx1bmRoCiAgICAgICAgICAgICBuYnl0ZXMgPSAoKChvcmQoc1swXSktMzIpICYgNjMpICogNCArIDUpIC8gMwogICAgICAgICAgICAgZGF0YSA9IGEyYl91dShzWzpuYnl0ZXNdKQpkaWZmIC0tZ2l0IGEvTGliL2ZpbGVjbXAucHkgYi9MaWIvZmlsZWNtcC5weQppbmRleCA5ODg1NzY1Li41MWE5N2E1IDEwMDY0NAotLS0gYS9MaWIvZmlsZWNtcC5weQorKysgYi9MaWIvZmlsZWNtcC5weQpAQCAtMTQ4LDEyICsxNDgsMTIgQEAKICAgICAgICAgICAgIG9rID0gMQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGFfc3RhdCA9IG9zLnN0YXQoYV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCB3aHk6CisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgICMgcHJpbnQgJ0NhblwndCBzdGF0JywgYV9wYXRoLCAnOicsIHdoeVsxXQogICAgICAgICAgICAgICAgIG9rID0gMAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJfc3RhdCA9IG9zLnN0YXQoYl9wYXRoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCB3aHk6CisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgICMgcHJpbnQgJ0NhblwndCBzdGF0JywgYl9wYXRoLCAnOicsIHdoeVsxXQogICAgICAgICAgICAgICAgIG9rID0gMAogCmRpZmYgLS1naXQgYS9MaWIvZnRwbGliLnB5IGIvTGliL2Z0cGxpYi5weQppbmRleCA5Y2I2N2RkLi43MmY1Yzg5IDEwMDY0NAotLS0gYS9MaWIvZnRwbGliLnB5CisrKyBiL0xpYi9mdHBsaWIucHkKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoYWYsIHNvY2t0eXBlLCBwcm90bykKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuc29jazoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBOb25lCkBAIC0yNzcsNyArMjc3LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQogICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGlmIHNvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQogICAgICAgICAgICAgICAgIHNvY2sgPSBOb25lCkBAIC00OTYsNyArNDk2LDcgQEAKICAgICAgICAgaWYgZGlybmFtZSA9PSAnLi4nOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRjbWQoJ0NEVVAnKQotICAgICAgICAgICAgZXhjZXB0IGVycm9yX3Blcm0sIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcl9wZXJtIGFzIG1zZzoKICAgICAgICAgICAgICAgICBpZiBtc2cuYXJnc1swXVs6M10gIT0gJzUwMCc6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGVsaWYgZGlybmFtZSA9PSAnJzoKZGlmZiAtLWdpdCBhL0xpYi9ob3RzaG90L3N0b25lcy5weSBiL0xpYi9ob3RzaG90L3N0b25lcy5weQppbmRleCBjZDRjNTFkLi43Zjg4NjA2IDEwMDY0NAotLS0gYS9MaWIvaG90c2hvdC9zdG9uZXMucHkKKysrIGIvTGliL2hvdHNob3Qvc3RvbmVzLnB5CkBAIC0xOSw3ICsxOSw3IEBACiAgICAgc3RhdHMuc29ydF9zdGF0cygndGltZScsICdjYWxscycpCiAgICAgdHJ5OgogICAgICAgICBzdGF0cy5wcmludF9zdGF0cygyMCkKLSAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQSVBFOgogICAgICAgICAgICAgcmFpc2UKIApkaWZmIC0tZ2l0IGEvTGliL2h0bWxsaWIucHkgYi9MaWIvaHRtbGxpYi5weQppbmRleCAyNGEyZTJmLi42NTI1MTlmIDEwMDY0NAotLS0gYS9MaWIvaHRtbGxpYi5weQorKysgYi9MaWIvaHRtbGxpYi5weQpAQCAtNDYzLDcgKzQ2Myw3IEBACiAgICAgZWxzZToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3InKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCBmaWxlLCAiOiIsIG1zZwogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIApkaWZmIC0tZ2l0IGEvTGliL2h0dHBsaWIucHkgYi9MaWIvaHR0cGxpYi5weQppbmRleCAxZTAwMzdmLi45M2MwODFhIDEwMDY0NAotLS0gYS9MaWIvaHR0cGxpYi5weQorKysgYi9MaWIvaHR0cGxpYi5weQpAQCAtNjY3LDcgKzY2Nyw3IEBACiAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImNvbm5lY3Q6ICglcywgJXMpIiAlIChzZWxmLmhvc3QsIHNlbGYucG9ydCkKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgICAgIHByaW50ICdjb25uZWN0IGZhaWw6JywgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQogICAgICAgICAgICAgICAgIGlmIHNlbGYuc29jazoKQEAgLTcxMyw3ICs3MTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBkYXRhPXN0ci5yZWFkKGJsb2Nrc2l6ZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwoc3RyKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCB2OgorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHY6CiAgICAgICAgICAgICBpZiB2WzBdID09IDMyOiAgICAgICMgQnJva2VuIHBpcGUKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgIHJhaXNlCkBAIC04NjgsNyArODY4LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9zZW5kX3JlcXVlc3QobWV0aG9kLCB1cmwsIGJvZHksIGhlYWRlcnMpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHY6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgdjoKICAgICAgICAgICAgICMgdHJhcCAnQnJva2VuIHBpcGUnIGlmIHdlJ3JlIGFsbG93ZWQgdG8gYXV0b21hdGljYWxseSByZWNvbm5lY3QKICAgICAgICAgICAgIGlmIHZbMF0gIT0gMzIgb3Igbm90IHNlbGYuYXV0b19vcGVuOgogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC04OTAsNyArODkwLDcgQEAKICAgICAgICAgICAgIHRoZWxlbj1Ob25lCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGhlbGVuPXN0cihsZW4oYm9keSkpCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCB0ZToKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgdGU6CiAgICAgICAgICAgICAgICAgIyBJZiB0aGlzIGlzIGEgZmlsZS1saWtlIG9iamVjdCwgdHJ5IHRvCiAgICAgICAgICAgICAgICAgIyBmc3RhdCBpdHMgZmlsZSBkZXNjcmlwdG9yCiAgICAgICAgICAgICAgICAgaW1wb3J0IG9zCkBAIC0xMDE5LDcgKzEwMTksNyBAQAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJ1ZiA9IHNlbGYuX3NzbC5yZWFkKHNlbGYuX2J1ZnNpemUpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LnNzbGVycm9yLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgc29ja2V0LnNzbGVycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiAoZXJyWzBdID09IHNvY2tldC5TU0xfRVJST1JfV0FOVF9SRUFECiAgICAgICAgICAgICAgICAgICAgIG9yIGVyclswXSA9PSBzb2NrZXQuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgb3IgZXJyWzBdID09IHNvY2tldC5TU0xfRVJST1JfRU9GKToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZXJyOgorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgaWYgZXJyWzBdID09IGVycm5vLkVJTlRSOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGlmIGVyclswXSA9PSBlcnJuby5FQkFERjoKQEAgLTEyMTUsNyArMTIxNSw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYuX2Nvbm4uZ2V0cmVzcG9uc2UoKQotICAgICAgICBleGNlcHQgQmFkU3RhdHVzTGluZSwgZToKKyAgICAgICAgZXhjZXB0IEJhZFN0YXR1c0xpbmUgYXMgZToKICAgICAgICAgICAgICMjIyBobW0uIGlmIGdldHJlc3BvbnNlKCkgZXZlciBjbG9zZXMgdGhlIHNvY2tldCBvbiBhIGJhZCByZXF1ZXN0LAogICAgICAgICAgICAgIyMjIHRoZW4gd2UgYXJlIGdvaW5nIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBzZWxmLnNvY2sKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQ2xhc3NCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvQ2xhc3NCcm93c2VyLnB5CmluZGV4IGU1YTYwYTUuLmQzZjkwNDggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0NsYXNzQnJvd3Nlci5weQorKysgYi9MaWIvaWRsZWxpYi9DbGFzc0Jyb3dzZXIucHkKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkaWN0ID0gcHljbGJyLnJlYWRtb2R1bGVfZXgobmFtZSwgW2Rpcl0gKyBzeXMucGF0aCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgaXRlbXMgPSBbXQogICAgICAgICBzZWxmLmNsYXNzZXMgPSB7fQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5IGIvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CmluZGV4IDE4NDFiMWMuLjQwMGMzMWMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKQEAgLTUwNSw3ICs1MDUsNyBAQAogICAgICAgICAjIFhYWCBPdWdodCB0byBpbnNlcnQgY3VycmVudCBmaWxlJ3MgZGlyZWN0b3J5IGluIGZyb250IG9mIHBhdGgKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgKGYsIGZpbGUsIChzdWZmaXgsIG1vZGUsIHR5cGUpKSA9IF9maW5kX21vZHVsZShuYW1lKQotICAgICAgICBleGNlcHQgKE5hbWVFcnJvciwgSW1wb3J0RXJyb3IpLCBtc2c6CisgICAgICAgIGV4Y2VwdCAoTmFtZUVycm9yLCBJbXBvcnRFcnJvcikgYXMgbXNnOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSW1wb3J0IGVycm9yIiwgc3RyKG1zZyksIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgdHlwZSAhPSBpbXAuUFlfU09VUkNFOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weSBiL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkKaW5kZXggYWIxMzZiYy4uOTlkMmU0ZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgIGZvciBmbiBpbiBsaXN0OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZuKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwcmludCBtc2cKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgbGluZW5vID0gMApAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgZGVmIGZpbmRmaWxlcyhzZWxmLCBkaXIsIGJhc2UsIHJlYyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIgb3Igb3MuY3VyZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50IG1zZwogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIGxpc3QgPSBbXQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5IGIvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CmluZGV4IGRlZWI1YzUuLmUyM2I0MGMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQorKysgYi9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsJ3JiJykKICAgICAgICAgICAgIGNoYXJzID0gZi5yZWFkKCkKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJL08gRXJyb3IiLCBzdHIobXNnKSwgbWFzdGVyPXNlbGYudGV4dCkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCkBAIC0yODksNyArMjg5LDcgQEAKICAgICAgICAgIyBOZXh0IGxvb2sgZm9yIGNvZGluZyBzcGVjaWZpY2F0aW9uCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVuYyA9IGNvZGluZ19zcGVjKGNoYXJzKQotICAgICAgICBleGNlcHQgTG9va3VwRXJyb3IsIG5hbWU6CisgICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvciBhcyBuYW1lOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigKICAgICAgICAgICAgICAgICB0aXRsZT0iRXJyb3IgbG9hZGluZyB0aGUgZmlsZSIsCiAgICAgICAgICAgICAgICAgbWVzc2FnZT0iVGhlIGVuY29kaW5nICclcycgaXMgbm90IGtub3duIHRvIHRoaXMgUHl0aG9uICJcCkBAIC0zODAsNyArMzgwLDcgQEAKICAgICAgICAgICAgIGYuZmx1c2goKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJL08gRXJyb3IiLCBzdHIobXNnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYudGV4dCkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtNDAwLDcgKzQwMCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVuYyA9IGNvZGluZ19zcGVjKGNoYXJzKQogICAgICAgICAgICAgZmFpbGVkID0gTm9uZQotICAgICAgICBleGNlcHQgTG9va3VwRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IExvb2t1cEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIGZhaWxlZCA9IG1zZwogICAgICAgICAgICAgZW5jID0gTm9uZQogICAgICAgICBpZiBlbmM6CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5IGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQppbmRleCAyMGQwMGJlLi40NmVmMjExIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CisrKyBiL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKQEAgLTM4MCw3ICszODAsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYucnBjY2x0ID0gTXlSUENDbGllbnQoYWRkcikKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZXJyOgorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5kaXNwbGF5X3BvcnRfYmluZGluZ19lcnJvcigpCkBAIC0zODksNyArMzg5LDcgQEAKICAgICAgICAgc2VsZi5ycGNjbHQubGlzdGVuaW5nX3NvY2suc2V0dGltZW91dCgxMCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5ycGNjbHQuYWNjZXB0KCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0LCBlcnI6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dCBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmRpc3BsYXlfbm9fc3VicHJvY2Vzc19lcnJvcigpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBzZWxmLnJwY2NsdC5yZWdpc3Rlcigic3RkaW4iLCBzZWxmLnRrY29uc29sZSkKQEAgLTQyMyw3ICs0MjMsNyBAQAogICAgICAgICBzZWxmLnNwYXduX3N1YnByb2Nlc3MoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnJwY2NsdC5hY2NlcHQoKQotICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQsIGVycjoKKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0IGFzIGVycjoKICAgICAgICAgICAgIHNlbGYuZGlzcGxheV9ub19zdWJwcm9jZXNzX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHNlbGYudHJhbnNmZXJfcGF0aCgpCkBAIC0xMzI0LDcgKzEzMjQsNyBAQAogICAgIHN0YXJ0dXAgPSBGYWxzZQogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiYzpkZWlobnI6c3Q6IikKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVycm9yOiAlc1xuIiAlIHN0cihtc2cpKQogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHVzYWdlX21zZykKICAgICAgICAgc3lzLmV4aXQoMikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1NjcmlwdEJpbmRpbmcucHkgYi9MaWIvaWRsZWxpYi9TY3JpcHRCaW5kaW5nLnB5CmluZGV4IDM3NDZlYjguLmE4M2Y3MTUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1NjcmlwdEJpbmRpbmcucHkKKysrIGIvTGliL2lkbGVsaWIvU2NyaXB0QmluZGluZy5weQpAQCAtNjYsMTMgKzY2LDEzIEBACiAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRhYm5hbm55LnByb2Nlc3NfdG9rZW5zKHRva2VuaXplLmdlbmVyYXRlX3Rva2VucyhmLnJlYWRsaW5lKSkKLSAgICAgICAgZXhjZXB0IHRva2VuaXplLlRva2VuRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IHRva2VuaXplLlRva2VuRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgbXNndHh0LCAobGluZW5vLCBzdGFydCkgPSBtc2cKICAgICAgICAgICAgIHNlbGYuZWRpdHdpbi5nb3RvbGluZShsaW5lbm8pCiAgICAgICAgICAgICBzZWxmLmVycm9yYm94KCJUYWJuYW5ueSBUb2tlbml6aW5nIEVycm9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRva2VuIEVycm9yOiAlcyIgJSBtc2d0eHQpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZXhjZXB0IHRhYm5hbm55Lk5hbm55TmFnLCBuYWc6CisgICAgICAgIGV4Y2VwdCB0YWJuYW5ueS5OYW5ueU5hZyBhcyBuYWc6CiAgICAgICAgICAgICAjIFRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHRhYm5hbm55IGFyZSB0b28gY29uZnVzaW5nLi4uCiAgICAgICAgICAgICBzZWxmLmVkaXR3aW4uZ290b2xpbmUobmFnLmdldF9saW5lbm8oKSkKICAgICAgICAgICAgIHNlbGYuZXJyb3Jib3goIlRhYi9zcGFjZSBlcnJvciIsIGluZGVudF9tZXNzYWdlKQpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBjb21waWxlZCBjb2RlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGUoc291cmNlLCBmaWxlbmFtZSwgImV4ZWMiKQotICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgT3ZlcmZsb3dFcnJvciksIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIE92ZXJmbG93RXJyb3IpIGFzIGVycjoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG1zZywgKGVycm9yZmlsZW5hbWUsIGxpbmVubywgb2Zmc2V0LCBsaW5lKSA9IGVycgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXJyb3JmaWxlbmFtZToKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1NlYXJjaEVuZ2luZS5weSBiL0xpYi9pZGxlbGliL1NlYXJjaEVuZ2luZS5weQppbmRleCBjYzQwYTAwLi42NzQ1ZmFmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9TZWFyY2hFbmdpbmUucHkKKysrIGIvTGliL2lkbGVsaWIvU2VhcmNoRW5naW5lLnB5CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICBmbGFncyA9IGZsYWdzIHwgcmUuSUdOT1JFQ0FTRQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwcm9nID0gcmUuY29tcGlsZShwYXQsIGZsYWdzKQotICAgICAgICBleGNlcHQgcmUuZXJyb3IsIHdoYXQ6CisgICAgICAgIGV4Y2VwdCByZS5lcnJvciBhcyB3aGF0OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG1zZywgY29sID0gd2hhdAogICAgICAgICAgICAgZXhjZXB0OgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnVuLnB5IGIvTGliL2lkbGVsaWIvcnVuLnB5CmluZGV4IDYxMzY0YTUuLjZiMjkwMDMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3J1bi5weQorKysgYi9MaWIvaWRsZWxpYi9ydW4ucHkKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBNeVJQQ1NlcnZlcihhZGRyZXNzLCBNeUhhbmRsZXIpCiAgICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcHJpbnQ+PnN5cy5fX3N0ZGVycl9fLCJJRExFIFN1YnByb2Nlc3M6IHNvY2tldCBlcnJvcjogIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGVyclsxXSArICIsIHJldHJ5aW5nLi4uLiIKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2ltYXBsaWIucHkgYi9MaWIvaW1hcGxpYi5weQppbmRleCAwOGUxNTIwLi4xMWUyNjJlIDEwMDY0NAotLS0gYS9MaWIvaW1hcGxpYi5weQorKysgYi9MaWIvaW1hcGxpYi5weQpAQCAtODQ1LDcgKzg0NSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZW5kKCclcyVzJyAlIChkYXRhLCBDUkxGKSkKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIE9TRXJyb3IpLCB2YWw6CisgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBPU0Vycm9yKSBhcyB2YWw6CiAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6ICVzJyAlIHZhbCkKIAogICAgICAgICBpZiBsaXRlcmFsIGlzIE5vbmU6CkBAIC04NzAsNyArODcwLDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNlbmQobGl0ZXJhbCkKICAgICAgICAgICAgICAgICBzZWxmLnNlbmQoQ1JMRikKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBPU0Vycm9yKSwgdmFsOgorICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIE9TRXJyb3IpIGFzIHZhbDoKICAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6ICVzJyAlIHZhbCkKIAogICAgICAgICAgICAgaWYgbm90IGxpdGVyYXRvcjoKQEAgLTg4Myw5ICs4ODMsOSBAQAogICAgICAgICBzZWxmLl9jaGVja19ieWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0eXAsIGRhdGEgPSBzZWxmLl9nZXRfdGFnZ2VkX3Jlc3BvbnNlKHRhZykKLSAgICAgICAgZXhjZXB0IHNlbGYuYWJvcnQsIHZhbDoKKyAgICAgICAgZXhjZXB0IHNlbGYuYWJvcnQgYXMgdmFsOgogICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnY29tbWFuZDogJXMgPT4gJXMnICUgKG5hbWUsIHZhbCkpCi0gICAgICAgIGV4Y2VwdCBzZWxmLmVycm9yLCB2YWw6CisgICAgICAgIGV4Y2VwdCBzZWxmLmVycm9yIGFzIHZhbDoKICAgICAgICAgICAgIHJhaXNlIHNlbGYuZXJyb3IoJ2NvbW1hbmQ6ICVzID0+ICVzJyAlIChuYW1lLCB2YWwpKQogICAgICAgICBzZWxmLl9jaGVja19ieWUoKQogICAgICAgICBpZiB0eXAgPT0gJ0JBRCc6CkBAIC05ODQsNyArOTg0LDcgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuX2dldF9yZXNwb25zZSgpCi0gICAgICAgICAgICBleGNlcHQgc2VsZi5hYm9ydCwgdmFsOgorICAgICAgICAgICAgZXhjZXB0IHNlbGYuYWJvcnQgYXMgdmFsOgogICAgICAgICAgICAgICAgIGlmIF9fZGVidWdfXzoKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZyA+PSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmludF9sb2coKQpAQCAtMTQwMiw3ICsxNDAyLDcgQEAKIAogICAgIHRyeToKICAgICAgICAgb3B0bGlzdCwgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnZDpzOicpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgdmFsOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgdmFsOgogICAgICAgICBvcHRsaXN0LCBhcmdzID0gKCksICgpCiAKICAgICBzdHJlYW1fY29tbWFuZCA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvVGtpbnRlci5weSBiL0xpYi9saWItdGsvVGtpbnRlci5weQppbmRleCBmODUzOGVkLi4xNTdiMDY2IDEwMDY0NAotLS0gYS9MaWIvbGliLXRrL1RraW50ZXIucHkKKysrIGIvTGliL2xpYi10ay9Ua2ludGVyLnB5CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIGZvciBjIGluIF9mbGF0dGVuKGNuZnMpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNuZi51cGRhdGUoYykKLSAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciksIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcikgYXMgbXNnOgogICAgICAgICAgICAgICAgIHByaW50ICJfY25mbWVyZ2U6IGZhbGxiYWNrIGR1ZSB0bzoiLCBtc2cKICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBjLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgIGNuZltrXSA9IHYKQEAgLTE0MDEsNyArMTQwMSw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLnN1YnN0OgogICAgICAgICAgICAgICAgIGFyZ3MgPSBzZWxmLnN1YnN0KCphcmdzKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVuYygqYXJncykKLSAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQsIG1zZzoKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgbXNnOgogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCwgbXNnCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYud2lkZ2V0Ll9yZXBvcnRfZXhjZXB0aW9uKCkKZGlmZiAtLWdpdCBhL0xpYi9saW5lY2FjaGUucHkgYi9MaWIvbGluZWNhY2hlLnB5CmluZGV4IDQ4Mzg2MjUuLjg5MzgzZWEgMTAwNjQ0Ci0tLSBhL0xpYi9saW5lY2FjaGUucHkKKysrIGIvTGliL2xpbmVjYWNoZS5weQpAQCAtNzgsNyArNzgsNyBAQAogICAgIGZ1bGxuYW1lID0gZmlsZW5hbWUKICAgICB0cnk6CiAgICAgICAgIHN0YXQgPSBvcy5zdGF0KGZ1bGxuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMV0KIAogICAgICAgICAjIFRyeSBmb3IgYSBfX2xvYWRlcl9fLCBpZiBhdmFpbGFibGUKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICBmcCA9IG9wZW4oZnVsbG5hbWUsICdyVScpCiAgICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKICAgICAgICAgZnAuY2xvc2UoKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogIyMgICAgICBwcmludCAnKioqIENhbm5vdCBvcGVuJywgZnVsbG5hbWUsICc6JywgbXNnCiAgICAgICAgIHJldHVybiBbXQogICAgIHNpemUsIG10aW1lID0gc3RhdC5zdF9zaXplLCBzdGF0LnN0X210aW1lCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9jb25maWcucHkgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKaW5kZXggYTk5NzBkMC4uNDFkNTc3ZiAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5CisrKyBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQpAQCAtMjg4LDcgKzI4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgdHlwZShlLmFyZ3MpICE9IHR5cGVzLlR1cGxlVHlwZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL21haWxib3gucHkgYi9MaWIvbWFpbGJveC5weQppbmRleCA4ZDFkZjRiLi4yMjkzYTZjIDEwMDc1NQotLS0gYS9MaWIvbWFpbGJveC5weQorKysgYi9MaWIvbWFpbGJveC5weQpAQCAtMjU4LDcgKzI1OCw3IEBACiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRtcF9maWxlLm5hbWUpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG9zLnJlbmFtZSh0bXBfZmlsZS5uYW1lLCBkZXN0KQotICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIG9zLnJlbW92ZSh0bXBfZmlsZS5uYW1lKQogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FRVhJU1Q6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdOYW1lIGNsYXNoIHdpdGggZXhpc3RpbmcgbWVzc2FnZTogJXMnCkBAIC0yODAsNyArMjgwLDcgQEAKICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGtleSkKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTQzNywxMiArNDM3LDEyIEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ3RtcCcsIHVuaXEpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnN0YXQocGF0aCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICBNYWlsZGlyLl9jb3VudCArPSAxCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NyZWF0ZV9jYXJlZnVsbHkocGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBlbHNlOgpAQCAtNDk1LDcgKzQ5NSw3IEBACiAgICAgICAgIE1haWxib3guX19pbml0X18oc2VsZiwgcGF0aCwgZmFjdG9yeSwgY3JlYXRlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAncmIrJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICBpZiBjcmVhdGU6CiAgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICd3YisnKQpAQCAtNjA1LDcgKzYwNSw3IEBACiAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUubmFtZSwgc2VsZi5fcGF0aCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVFWElTVCBvciBcCiAgICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6CiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX3BhdGgpCkBAIC04MzcsNyArODM3LDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC04NTksNyArODU5LDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC04ODUsNyArODg1LDcgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncisnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC05MTIsNyArOTEyLDcgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncisnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC05MzIsNyArOTMyLDcgQEAKICAgICAgICAgIiIiUmV0dXJuIGEgZmlsZS1saWtlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xODQzLDcgKzE4NDMsNyBAQAogICAgICAgICBpZiBmY250bDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYIHwgZmNudGwuTE9DS19OQikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUdBSU4sIGVycm5vLkVBQ0NFUyk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignbG9ja2Y6IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCkBAIC0xODUzLDcgKzE4NTMsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByZV9sb2NrID0gX2NyZWF0ZV90ZW1wb3JhcnkoZi5uYW1lICsgJy5sb2NrJykKICAgICAgICAgICAgICAgICBwcmVfbG9jay5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUNDRVM6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgIyBXaXRob3V0IHdyaXRlIGFjY2VzcywganVzdCBza2lwIGRvdGxvY2tpbmcuCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTE4NjYsNyArMTg2Niw3IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHByZV9sb2NrLm5hbWUsIGYubmFtZSArICcubG9jaycpCiAgICAgICAgICAgICAgICAgICAgIGRvdGxvY2tfZG9uZSA9IFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVFWElTVCBvciBcCiAgICAgICAgICAgICAgICAgICAob3MubmFtZSA9PSAnb3MyJyBhbmQgZS5lcnJubyA9PSBlcnJuby5FQUNDRVMpOgogICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocHJlX2xvY2submFtZSkKZGlmZiAtLWdpdCBhL0xpYi9taGxpYi5weSBiL0xpYi9taGxpYi5weQppbmRleCAxYTkwMzc1Li44YWU2YmFkIDEwMDY0NAotLS0gYS9MaWIvbWhsaWIucHkKKysrIGIvTGliL21obGliLnB5CkBAIC0zNzAsNyArMzcwLDcgQEAKICAgICAgICAgICAgICAgICBjb3VudCA9IGxlbihhbGwpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYW5jaG9yID0gc2VsZi5fcGFyc2VpbmRleChoZWFkLCBhbGwpCi0gICAgICAgICAgICBleGNlcHQgRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc2VxcyA9IHNlbGYuZ2V0c2VxdWVuY2VzKCkKICAgICAgICAgICAgICAgICBpZiBub3QgaGVhZCBpbiBzZXFzOgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgbXNnOgpAQCAtNDA3LDcgKzQwNyw3IEBACiAgICAgICAgICMgTmVpdGhlciBYOlkgbm9yIFgtWTsgbXVzdCBiZSBhIG51bWJlciBvciBhIChwc2V1ZG8tKXNlcXVlbmNlCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG4gPSBzZWxmLl9wYXJzZWluZGV4KHNlcSwgYWxsKQotICAgICAgICBleGNlcHQgRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHNlcXMgPSBzZWxmLmdldHNlcXVlbmNlcygpCiAgICAgICAgICAgICBpZiBub3Qgc2VxIGluIHNlcXM6CiAgICAgICAgICAgICAgICAgaWYgbm90IG1zZzoKQEAgLTQ3MSw3ICs0NzEsNyBAQAogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5yZW5hbWUocGF0aCwgY29tbWFwYXRoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQobXNnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBkZWxldGVkLmFwcGVuZChuKQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIocGF0aCwgdG9wYXRoKQogICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsocGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSwgbXNnOgorICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpIGFzIG1zZzoKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChtc2cpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayh0b3BhdGgpCkBAIC05ODksNyArOTg5LDcgQEAKICAgICAgICAgICAgICAgICAnYWxsJyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRvKCdmLnBhcnNlc2VxdWVuY2UoJXIpJyAlIChzZXEsKSkKLSAgICAgICAgZXhjZXB0IEVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCAiRXJyb3I6IiwgbXNnCiAgICAgICAgIHN0dWZmID0gb3MucG9wZW4oInBpY2sgJXIgMj4vZGV2L251bGwiICUgKHNlcSwpKS5yZWFkKCkKICAgICAgICAgbGlzdCA9IG1hcChpbnQsIHN0dWZmLnNwbGl0KCkpCmRpZmYgLS1naXQgYS9MaWIvbWltZXR5cGVzLnB5IGIvTGliL21pbWV0eXBlcy5weQppbmRleCBiMGQyZjE4Li44MzA3MWQ0IDEwMDY0NAotLS0gYS9MaWIvbWltZXR5cGVzLnB5CisrKyBiL0xpYi9taW1ldHlwZXMucHkKQEAgLTUxMCw3ICs1MTAsNyBAQAogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaGxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydoZWxwJywgJ2xlbmllbnQnLCAnZXh0ZW5zaW9uJ10pCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICB1c2FnZSgxLCBtc2cpCiAKICAgICBzdHJpY3QgPSAxCmRpZmYgLS1naXQgYS9MaWIvbW9kdWxlZmluZGVyLnB5IGIvTGliL21vZHVsZWZpbmRlci5weQppbmRleCA5YzkwZDhkLi4wNGM5YWJmIDEwMDY0NAotLS0gYS9MaWIvbW9kdWxlZmluZGVyLnB5CisrKyBiL0xpYi9tb2R1bGVmaW5kZXIucHkKQEAgLTMxNyw3ICszMTcsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuaW1wb3J0X2hvb2sobmFtZSwgY2FsbGVyLCBsZXZlbD1sZXZlbCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBzZWxmLm1zZygyLCAiSW1wb3J0RXJyb3I6Iiwgc3RyKG1zZykpCiAgICAgICAgICAgICBzZWxmLl9hZGRfYmFkbW9kdWxlKG5hbWUsIGNhbGxlcikKICAgICAgICAgZWxzZToKQEAgLTMyOCw3ICszMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfaG9vayhuYW1lLCBjYWxsZXIsIFtzdWJdLCBsZXZlbD1sZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBtc2c6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1zZygyLCAiSW1wb3J0RXJyb3I6Iiwgc3RyKG1zZykpCiAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IG5hbWUgKyAiLiIgKyBzdWIKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9iYWRtb2R1bGUoZnVsbG5hbWUsIGNhbGxlcikKQEAgLTYwMiw3ICs2MDIsNyBAQAogICAgIGltcG9ydCBnZXRvcHQKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImRtcDpxeDoiKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvbXNpbGliL19faW5pdF9fLnB5IGIvTGliL21zaWxpYi9fX2luaXRfXy5weQppbmRleCA5ZWZlZjkxLi5iMTRiYzMyIDEwMDY0NAotLS0gYS9MaWIvbXNpbGliL19faW5pdF9fLnB5CisrKyBiL0xpYi9tc2lsaWIvX19pbml0X18ucHkKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIlVuc3VwcG9ydGVkIHR5cGUgJXMiICUgZmllbGQuX19jbGFzc19fLl9fbmFtZV9fCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHYuTW9kaWZ5KE1TSU1PRElGWV9JTlNFUlQsIHIpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHJhaXNlIE1TSUVycm9yKCJDb3VsZCBub3QgaW5zZXJ0ICIrcmVwcih2YWx1ZXMpKyIgaW50byAiK3RhYmxlKQogCiAgICAgICAgIHIuQ2xlYXJEYXRhKCkKZGlmZiAtLWdpdCBhL0xpYi9ubnRwbGliLnB5IGIvTGliL25udHBsaWIucHkKaW5kZXggY2M1MWQxZC4uNmU2YTJiNiAxMDA2NDQKLS0tIGEvTGliL25udHBsaWIucHkKKysrIGIvTGliL25udHBsaWIucHkKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICAgICAgZXhjZXB0IE5OVFBQZXJtYW5lbnRFcnJvcjoKICAgICAgICAgICAgICAgICAjIGVycm9yIDUwMCwgcHJvYmFibHkgJ25vdCBpbXBsZW1lbnRlZCcKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgTk5UUFRlbXBvcmFyeUVycm9yLCBlOgorICAgICAgICAgICAgZXhjZXB0IE5OVFBUZW1wb3JhcnlFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIHVzZXIgYW5kIGUucmVzcG9uc2VbOjNdID09ICc0ODAnOgogICAgICAgICAgICAgICAgICAgICAjIE5lZWQgYXV0aG9yaXphdGlvbiBiZWZvcmUgJ21vZGUgcmVhZGVyJwogICAgICAgICAgICAgICAgICAgICByZWFkZXJtb2RlX2FmdGVyYXV0aCA9IDEKZGlmZiAtLWdpdCBhL0xpYi9vcHRwYXJzZS5weSBiL0xpYi9vcHRwYXJzZS5weQppbmRleCBmOGY2NDNkLi5lMWM2NzVhIDEwMDY0NAotLS0gYS9MaWIvb3B0cGFyc2UucHkKKysrIGIvTGliL29wdHBhcnNlLnB5CkBAIC0xMzc2LDcgKzEzNzYsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0b3AgPSBzZWxmLl9wcm9jZXNzX2FyZ3MobGFyZ3MsIHJhcmdzLCB2YWx1ZXMpCi0gICAgICAgIGV4Y2VwdCAoQmFkT3B0aW9uRXJyb3IsIE9wdGlvblZhbHVlRXJyb3IpLCBlcnI6CisgICAgICAgIGV4Y2VwdCAoQmFkT3B0aW9uRXJyb3IsIE9wdGlvblZhbHVlRXJyb3IpIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYuZXJyb3Ioc3RyKGVycikpCiAKICAgICAgICAgYXJncyA9IGxhcmdzICsgcmFyZ3MKZGlmZiAtLWdpdCBhL0xpYi9vcy5weSBiL0xpYi9vcy5weQppbmRleCAzNWY5N2ZiLi45NTk5Y2YzIDEwMDY0NAotLS0gYS9MaWIvb3MucHkKKysrIGIvTGliL29zLnB5CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICBpZiBoZWFkIGFuZCB0YWlsIGFuZCBub3QgcGF0aC5leGlzdHMoaGVhZCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1ha2VkaXJzKGhlYWQsIG1vZGUpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBiZSBoYXBweSBpZiBzb21lb25lIGFscmVhZHkgY3JlYXRlZCB0aGUgcGF0aAogICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFRVhJU1Q6CiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTI4NCw3ICsyODQsNyBAQAogICAgICAgICAjIE5vdGUgdGhhdCBsaXN0ZGlyIGFuZCBlcnJvciBhcmUgZ2xvYmFscyBpbiB0aGlzIG1vZHVsZSBkdWUKICAgICAgICAgIyB0byBlYXJsaWVyIGltcG9ydC0qLgogICAgICAgICBuYW1lcyA9IGxpc3RkaXIodG9wKQotICAgIGV4Y2VwdCBlcnJvciwgZXJyOgorICAgIGV4Y2VwdCBlcnJvciBhcyBlcnI6CiAgICAgICAgIGlmIG9uZXJyb3IgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBvbmVycm9yKGVycikKICAgICAgICAgcmV0dXJuCkBAIC0zOTAsNyArMzkwLDcgQEAKICAgICAgICAgZnVsbG5hbWUgPSBwYXRoLmpvaW4oZGlyLCBmaWxlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdW5jKGZ1bGxuYW1lLCAqYXJncmVzdCkKLSAgICAgICAgZXhjZXB0IGVycm9yLCBlOgorICAgICAgICBleGNlcHQgZXJyb3IgYXMgZToKICAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KICAgICAgICAgICAgIGlmIChlLmVycm5vICE9IEVOT0VOVCBhbmQgZS5lcnJubyAhPSBFTk9URElSCiAgICAgICAgICAgICAgICAgYW5kIHNhdmVkX2V4YyBpcyBOb25lKToKZGlmZiAtLWdpdCBhL0xpYi9wZGIucHkgYi9MaWIvcGRiLnB5CmluZGV4IDg4MzAzZDAuLmFmZTY5ZDIgMTAwNzU1Ci0tLSBhL0xpYi9wZGIucHkKKysrIGIvTGliL3BkYi5weQpAQCAtMzMwLDcgKzMzMCw3IEBACiAgICAgICAgICAgICBhcmcgPSBhcmdbY29sb24rMTpdLmxzdHJpcCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbGluZW5vID0gaW50KGFyZykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcHJpbnQgPj5zZWxmLnN0ZG91dCwgJyoqKiBCYWQgbGluZW5vOicsIGFyZwogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbHNlOgpAQCAtNjE4LDcgKzYxOCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5jdXJmcmFtZS5mX2xpbmVubyA9IGFyZwogICAgICAgICAgICAgICAgIHNlbGYuc3RhY2tbc2VsZi5jdXJpbmRleF0gPSBzZWxmLnN0YWNrW3NlbGYuY3VyaW5kZXhdWzBdLCBhcmcKICAgICAgICAgICAgICAgICBzZWxmLnByaW50X3N0YWNrX2VudHJ5KHNlbGYuc3RhY2tbc2VsZi5jdXJpbmRleF0pCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcHJpbnQgPj5zZWxmLnN0ZG91dCwgJyoqKiBKdW1wIGZhaWxlZDonLCBlCiAgICAgZG9faiA9IGRvX2p1bXAKIApkaWZmIC0tZ2l0IGEvTGliL3BpY2tsZS5weSBiL0xpYi9waWNrbGUucHkKaW5kZXggYjBiM2FhMS4uYjMyZWU4MyAxMDA2NDQKLS0tIGEvTGliL3BpY2tsZS5weQorKysgYi9MaWIvcGlja2xlLnB5CkBAIC04MTYsNyArODE2LDcgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAga2V5ID0gcmVhZCgxKQogICAgICAgICAgICAgICAgIGRpc3BhdGNoW2tleV0oc2VsZikKLSAgICAgICAgZXhjZXB0IF9TdG9wLCBzdG9waW5zdDoKKyAgICAgICAgZXhjZXB0IF9TdG9wIGFzIHN0b3BpbnN0OgogICAgICAgICAgICAgcmV0dXJuIHN0b3BpbnN0LnZhbHVlCiAKICAgICAjIFJldHVybiBsYXJnZXN0IGluZGV4IGsgc3VjaCB0aGF0IHNlbGYuc3RhY2tba10gaXMgc2VsZi5tYXJrLgpAQCAtMTAxOCw3ICsxMDE4LDcgQEAKICAgICAgICAgaWYgbm90IGluc3RhbnRpYXRlZDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGtsYXNzKCphcmdzKQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZXJyOgorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiaW4gY29uc3RydWN0b3IgZm9yICVzOiAlcyIgJSAoCiAgICAgICAgICAgICAgICAgICAgIGtsYXNzLl9fbmFtZV9fLCBzdHIoZXJyKSksIHN5cy5leGNfaW5mbygpWzJdCiAgICAgICAgIHNlbGYuYXBwZW5kKHZhbHVlKQpkaWZmIC0tZ2l0IGEvTGliL3BrZ3V0aWwucHkgYi9MaWIvcGtndXRpbC5weQppbmRleCAzNzczOGU0Li41YjZiMTY5IDEwMDY0NAotLS0gYS9MaWIvcGtndXRpbC5weQorKysgYi9MaWIvcGtndXRpbC5weQpAQCAtNTMyLDcgKzUzMiw3IEBACiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBrZ2ZpbGUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKHBrZ2ZpbGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IG9wZW4gJXM6ICVzXG4iICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2dmaWxlLCBtc2cpKQogICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L3RvcmdiLnB5IGIvTGliL3BsYXQtaXJpeDUvdG9yZ2IucHkKaW5kZXggNTRjODZjNC4uMDJiY2I1MyAxMDA3NTUKLS0tIGEvTGliL3BsYXQtaXJpeDUvdG9yZ2IucHkKKysrIGIvTGliL3BsYXQtaXJpeDUvdG9yZ2IucHkKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgZm5hbWUgPSBmaWxlbmFtZQogICAgIHRyeToKICAgICAgICAgZnR5cGUgPSBpbWdoZHIud2hhdChmbmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgaWYgdHlwZShtc2cpID09IHR5cGUoKCkpIGFuZCBsZW4obXNnKSA9PSAyIGFuZCBcCiAgICAgICAgICAgICAgICAgdHlwZShtc2dbMF0pID09IHR5cGUoMCkgYW5kIHR5cGUobXNnWzFdKSA9PSB0eXBlKCcnKToKICAgICAgICAgICAgIG1zZyA9IG1zZ1sxXQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDYvdG9yZ2IucHkgYi9MaWIvcGxhdC1pcml4Ni90b3JnYi5weQppbmRleCA1NGM4NmM0Li4wMmJjYjUzIDEwMDY0NAotLS0gYS9MaWIvcGxhdC1pcml4Ni90b3JnYi5weQorKysgYi9MaWIvcGxhdC1pcml4Ni90b3JnYi5weQpAQCAtODAsNyArODAsNyBAQAogICAgICAgICBmbmFtZSA9IGZpbGVuYW1lCiAgICAgdHJ5OgogICAgICAgICBmdHlwZSA9IGltZ2hkci53aGF0KGZuYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBpZiB0eXBlKG1zZykgPT0gdHlwZSgoKSkgYW5kIGxlbihtc2cpID09IDIgYW5kIFwKICAgICAgICAgICAgICAgICB0eXBlKG1zZ1swXSkgPT0gdHlwZSgwKSBhbmQgdHlwZShtc2dbMV0pID09IHR5cGUoJycpOgogICAgICAgICAgICAgbXNnID0gbXNnWzFdCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvRWFzeURpYWxvZ3MucHkgYi9MaWIvcGxhdC1tYWMvRWFzeURpYWxvZ3MucHkKaW5kZXggMWJkNDZhOC4uMzQwZTNlZCAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL0Vhc3lEaWFsb2dzLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9FYXN5RGlhbG9ncy5weQpAQCAtNjUxLDcgKzY1MSw3IEBACiAgICAgdHJ5OgogICAgICAgICByciA9IE5hdi5OYXZDaG9vc2VGaWxlKGFyZ3MpCiAgICAgICAgIGdvb2QgPSAxCi0gICAgZXhjZXB0IE5hdi5lcnJvciwgYXJnOgorICAgIGV4Y2VwdCBOYXYuZXJyb3IgYXMgYXJnOgogICAgICAgICBpZiBhcmdbMF0gIT0gLTEyODogIyB1c2VyQ2FuY2VsbGVkRXJyCiAgICAgICAgICAgICByYWlzZSBOYXYuZXJyb3IsIGFyZwogICAgICAgICByZXR1cm4gTm9uZQpAQCAtNzA0LDcgKzcwNCw3IEBACiAgICAgdHJ5OgogICAgICAgICByciA9IE5hdi5OYXZQdXRGaWxlKGFyZ3MpCiAgICAgICAgIGdvb2QgPSAxCi0gICAgZXhjZXB0IE5hdi5lcnJvciwgYXJnOgorICAgIGV4Y2VwdCBOYXYuZXJyb3IgYXMgYXJnOgogICAgICAgICBpZiBhcmdbMF0gIT0gLTEyODogIyB1c2VyQ2FuY2VsbGVkRXJyCiAgICAgICAgICAgICByYWlzZSBOYXYuZXJyb3IsIGFyZwogICAgICAgICByZXR1cm4gTm9uZQpAQCAtNzY0LDcgKzc2NCw3IEBACiAgICAgdHJ5OgogICAgICAgICByciA9IE5hdi5OYXZDaG9vc2VGb2xkZXIoYXJncykKICAgICAgICAgZ29vZCA9IDEKLSAgICBleGNlcHQgTmF2LmVycm9yLCBhcmc6CisgICAgZXhjZXB0IE5hdi5lcnJvciBhcyBhcmc6CiAgICAgICAgIGlmIGFyZ1swXSAhPSAtMTI4OiAjIHVzZXJDYW5jZWxsZWRFcnIKICAgICAgICAgICAgIHJhaXNlIE5hdi5lcnJvciwgYXJnCiAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvTWluaUFFRnJhbWUucHkgYi9MaWIvcGxhdC1tYWMvTWluaUFFRnJhbWUucHkKaW5kZXggNTY5Y2Q3Yi4uMWQ5OTBhZiAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL01pbmlBRUZyYW1lLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9NaW5pQUVGcmFtZS5weQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgbXNnID0gIkhpZ2ggTGV2ZWwgRXZlbnQ6ICVyICVyIiAlIChjb2RlKG1lc3NhZ2UpLCBjb2RlKGggfCAodjw8MTYpKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBBRS5BRVByb2Nlc3NBcHBsZUV2ZW50KGV2ZW50KQotICAgICAgICAgICAgZXhjZXB0IEFFLkVycm9yLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgQUUuRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50ICdBRSBlcnJvcjogJywgZXJyCiAgICAgICAgICAgICAgICAgcHJpbnQgJ2luJywgbXNnCiAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvYWV0b29scy5weSBiL0xpYi9wbGF0LW1hYy9hZXRvb2xzLnB5CmluZGV4IDU1Mjg4YmYuLjdhNTJlYjlhIDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvYWV0b29scy5weQorKysgYi9MaWIvcGxhdC1tYWMvYWV0b29scy5weQpAQCAtNTcsNyArNTcsNyBAQAogZGVmIG1pc3NlZChhZSk6CiAgICAgdHJ5OgogICAgICAgICBkZXNjID0gYWUuQUVHZXRBdHRyaWJ1dGVEZXNjKCdtaXNzJywgJ2tleXcnKQotICAgIGV4Y2VwdCBBRS5FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBBRS5FcnJvciBhcyBtc2c6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgcmV0dXJuIGRlc2MuZGF0YQogCkBAIC04Niw3ICs4Niw3IEBACiAgICAgZm9yIGtleSBpbiBhZWtleXdvcmRzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkZXNjID0gYWUuQUVHZXRBdHRyaWJ1dGVEZXNjKGtleSwgJyoqKionKQotICAgICAgICBleGNlcHQgKEFFLkVycm9yLCBNYWNPUy5FcnJvciksIG1zZzoKKyAgICAgICAgZXhjZXB0IChBRS5FcnJvciwgTWFjT1MuRXJyb3IpIGFzIG1zZzoKICAgICAgICAgICAgIGlmIG1zZ1swXSAhPSAtMTcwMSBhbmQgbXNnWzBdICE9IC0xNzA0OgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2FwcGxlc2luZ2xlLnB5IGIvTGliL3BsYXQtbWFjL2FwcGxlc2luZ2xlLnB5CmluZGV4IDc2YmRiMDYuLmZkZDE2M2QgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9hcHBsZXNpbmdsZS5weQorKysgYi9MaWIvcGxhdC1tYWMvYXBwbGVzaW5nbGUucHkKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgaGVhZGVyID0gZmlsZW9iai5yZWFkKEFTX0hFQURFUl9MRU5HVEgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1hZ2ljLCB2ZXJzaW9uLCBpZywgbmVudHJ5ID0gc3RydWN0LnVucGFjayhBU19IRUFERVJfRk9STUFULCBoZWFkZXIpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBhcmc6CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGFyZzoKICAgICAgICAgICAgIHJhaXNlIEVycm9yLCAiVW5wYWNrIGhlYWRlciBlcnJvcjogJXMiICUgKGFyZywpCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnTWFnaWM6ICAgMHglOC44eCcgJSAobWFnaWMsKQpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICBmb3IgaGRyIGluIGhlYWRlcnM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmVzdHlwZSwgb2Zmc2V0LCBsZW5ndGggPSBzdHJ1Y3QudW5wYWNrKEFTX0VOVFJZX0ZPUk1BVCwgaGRyKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGFyZzoKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGFyZzoKICAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgIlVucGFjayBlbnRyeSBlcnJvcjogJXMiICUgKGFyZywpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50ICJGb3JrICVkLCBvZmZzZXQgJWQsIGxlbmd0aCAlZCIgJSAocmVzdHlwZSwgb2Zmc2V0LCBsZW5ndGgpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvYXJndmVtdWxhdG9yLnB5IGIvTGliL3BsYXQtbWFjL2FyZ3ZlbXVsYXRvci5weQppbmRleCAyZDY2ZjFjLi5mZTllOGY4IDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvYXJndmVtdWxhdG9yLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9hcmd2ZW11bGF0b3IucHkKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgaWYgd2hhdCA9PSBrSGlnaExldmVsRXZlbnQ6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgQUUuQUVQcm9jZXNzQXBwbGVFdmVudChldmVudCkKLSAgICAgICAgICAgIGV4Y2VwdCBBRS5FcnJvciwgZXJyOgorICAgICAgICAgICAgZXhjZXB0IEFFLkVycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBtc2cgPSAiSGlnaCBMZXZlbCBFdmVudDogJXIgJXIiICUgKGhleChtZXNzYWdlKSwgaGV4KGggfCAodjw8MTYpKSkKICAgICAgICAgICAgICAgICBwcmludCAnQUUgZXJyb3I6ICcsIGVycgogICAgICAgICAgICAgICAgIHByaW50ICdpbicsIG1zZwpAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAgICAgICAgIGZzcmVmID0gYWxpYXMuRlNSZXNvbHZlQWxpYXMoTm9uZSlbMF0KICAgICAgICAgICAgICAgICBwYXRobmFtZSA9IGZzcmVmLmFzX3BhdGhuYW1lKCkKICAgICAgICAgICAgICAgICBzeXMuYXJndi5hcHBlbmQocGF0aG5hbWUpCi0gICAgICAgIGV4Y2VwdCAgRXhjZXB0aW9uLCBlOgorICAgICAgICBleGNlcHQgIEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgcHJpbnQgImFyZ3ZlbXVsYXRvci5weSB3YXJuaW5nOiBjYW4ndCB1bnBhY2sgYW4gb3BlbiBkb2N1bWVudCBldmVudCIKICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2J1aWxkdG9vbHMucHkgYi9MaWIvcGxhdC1tYWMvYnVpbGR0b29scy5weQppbmRleCA3YzVkMGY0Li40YTBlZmJmIDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvYnVpbGR0b29scy5weQorKysgYi9MaWIvcGxhdC1tYWMvYnVpbGR0b29scy5weQpAQCAtNzgsNyArNzgsNyBAQAogICAgIGZwLmNsb3NlKCkKICAgICB0cnk6CiAgICAgICAgIGNvZGUgPSBjb21waWxlKHRleHQgKyAnXG4nLCBmaWxlbmFtZSwgImV4ZWMiKQotICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgYXJnOgorICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBhcmc6CiAgICAgICAgIHJhaXNlIEJ1aWxkRXJyb3IsICJTeW50YXggZXJyb3IgaW4gc2NyaXB0ICVzOiAlcyIgJSAoZmlsZW5hbWUsIGFyZykKICAgICBleGNlcHQgRU9GRXJyb3I6CiAgICAgICAgIHJhaXNlIEJ1aWxkRXJyb3IsICJFbmQtb2YtZmlsZSBpbiBzY3JpcHQgJXMiICUgKGZpbGVuYW1lLCkKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9idW5kbGVidWlsZGVyLnB5IGIvTGliL3BsYXQtbWFjL2J1bmRsZWJ1aWxkZXIucHkKaW5kZXggZDIxZmMzZS4uZDU4YWRmMiAxMDA3NTUKLS0tIGEvTGliL3BsYXQtbWFjL2J1bmRsZWJ1aWxkZXIucHkKKysrIGIvTGliL3BsYXQtbWFjL2J1bmRsZWJ1aWxkZXIucHkKQEAgLTc2NCw3ICs3NjQsNyBAQAogICAgIGRpcmVjdG9yeS4gRG9uJ3QgbW9hbiBpZiBhbnkgcGF0aCBlbGVtZW50IGFscmVhZHkgZXhpc3RzLiIiIgogICAgIHRyeToKICAgICAgICAgb3MubWFrZWRpcnMoZGlyKQotICAgIGV4Y2VwdCBPU0Vycm9yLCB3aHk6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICBpZiB3aHkuZXJybm8gIT0gZXJybm8uRUVYSVNUOgogICAgICAgICAgICAgcmFpc2UKIApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2dlbnN1aXRlbW9kdWxlLnB5IGIvTGliL3BsYXQtbWFjL2dlbnN1aXRlbW9kdWxlLnB5CmluZGV4IDUzYzBhNTIuLjdkMDNkOGYgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9nZW5zdWl0ZW1vZHVsZS5weQorKysgYi9MaWIvcGxhdC1tYWMvZ2Vuc3VpdGVtb2R1bGUucHkKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIHRyeToKICAgICAgICAgcHJvY2Vzc2ZpbGUoZmlsZW5hbWUsIGVkaXRfbW9kbmFtZXM9ZWRpdF9tb2RuYW1lcywgYmFzZXBrZ25hbWU9YmFzZXBrZ25hbWUsCiAgICAgICAgIHZlcmJvc2U9c3lzLnN0ZGVycikKLSAgICBleGNlcHQgTWFjT1MuRXJyb3IsIGFyZzoKKyAgICBleGNlcHQgTWFjT1MuRXJyb3IgYXMgYXJnOgogICAgICAgICBwcmludCAiRXJyb3IgZ2V0dGluZyB0ZXJtaW5vbG9neToiLCBhcmcKICAgICAgICAgcHJpbnQgIlJldHJ5LCBtYW51YWxseSBwYXJzaW5nIHJlc291cmNlcyIKICAgICAgICAgcHJvY2Vzc2ZpbGVfZnJvbXJlc291cmNlKGZpbGVuYW1lLCBlZGl0X21vZG5hbWVzPWVkaXRfbW9kbmFtZXMsCkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAgICAgcHJpbnQgPj52ZXJib3NlLCAiXG5BU0tJTkcgRk9SIGFldGUgRElDVElPTkFSWSBJTiIsIHJlcHIoZnVsbG5hbWUpCiAgICAgdHJ5OgogICAgICAgICBhZWRlc2NvYmosIGxhdW5jaGVkID0gT1NBVGVybWlub2xvZ3kuR2V0QXBwVGVybWlub2xvZ3koZnVsbG5hbWUpCi0gICAgZXhjZXB0IE1hY09TLkVycm9yLCBhcmc6CisgICAgZXhjZXB0IE1hY09TLkVycm9yIGFzIGFyZzoKICAgICAgICAgaWYgYXJnWzBdIGluICgtMTcwMSwgLTE5Mik6ICMgZXJyQUVEZXNjTm90Rm91bmQsIHJlc05vdEZvdW5kCiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50ID4+dmVyYm9zZSwgIkdldEFwcFRlcm1pbm9sb2d5IGZhaWxlZCB3aXRoIGVyckFFRGVzY05vdEZvdW5kL3Jlc05vdEZvdW5kLCB0cnlpbmcgbWFudWFsbHkiCkBAIC0yNDQsNyArMjQ0LDcgQEAKICAgICB0YWxrZXIgPSBhZXRvb2xzLlRhbGtUbyhjcikKICAgICB0cnk6CiAgICAgICAgIHRhbGtlci5fc3RhcnQoKQotICAgIGV4Y2VwdCAoTWFjT1MuRXJyb3IsIGFldG9vbHMuRXJyb3IpLCBhcmc6CisgICAgZXhjZXB0IChNYWNPUy5FcnJvciwgYWV0b29scy5FcnJvcikgYXMgYXJnOgogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgPj52ZXJib3NlLCAnV2FybmluZzogc3RhcnQoKSBmYWlsZWQsIGNvbnRpbnVpbmcgYW55d2F5OicsIGFyZwogICAgIHJlcGx5ID0gdGFsa2VyLnNlbmQoImFzY3IiLCAiZ2R0ZSIpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvbWFjcmVzb3VyY2UucHkgYi9MaWIvcGxhdC1tYWMvbWFjcmVzb3VyY2UucHkKaW5kZXggZDU4MzlhMS4uOTFkZmZmYSAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL21hY3Jlc291cmNlLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9tYWNyZXNvdXJjZS5weQpAQCAtNzYsMTQgKzc2LDE0IEBACiAgICAgQXBwbGVTaW5nbGUgZmlsZSIiIgogICAgIHRyeToKICAgICAgICAgcmVmbm8gPSBSZXMuRlNwT3BlblJlc0ZpbGUocGF0aG5hbWUsIDEpCi0gICAgZXhjZXB0IFJlcy5FcnJvciwgYXJnOgorICAgIGV4Y2VwdCBSZXMuRXJyb3IgYXMgYXJnOgogICAgICAgICBpZiBhcmdbMF0gaW4gKC0zNywgLTM5KToKICAgICAgICAgICAgICMgTm8gcmVzb3VyY2UgZm9yay4gV2UgbWF5IGJlIG9uIE9TWCwgYW5kIHRoaXMgbWF5IGJlIGVpdGhlcgogICAgICAgICAgICAgIyBhIGRhdGEtZm9yayBiYXNlZCByZXNvdXJjZSBmaWxlIG9yIGEgQXBwbGVTaW5nbGUgZmlsZQogICAgICAgICAgICAgIyBmcm9tIHRoZSBDVlMgcmVwb3NpdG9yeS4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZWZubyA9IFJlcy5GU09wZW5SZXNvdXJjZUZpbGUocGF0aG5hbWUsIHUnJywgMSkKLSAgICAgICAgICAgIGV4Y2VwdCBSZXMuRXJyb3IsIGFyZzoKKyAgICAgICAgICAgIGV4Y2VwdCBSZXMuRXJyb3IgYXMgYXJnOgogICAgICAgICAgICAgICAgIGlmIGFyZ1swXSAhPSAtMTk5OgogICAgICAgICAgICAgICAgICAgICAjIC0xOTkgaXMgImJhZCByZXNvdXJjZSBtYXAiCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCkBAIC0xMDMsMTQgKzEwMywxNCBAQAogICAgIHRyeToKICAgICAgICAgcmVmbm8gPSBSZXMuRlNwT3BlblJlc0ZpbGUocGF0aG5hbWUsIDEpCiAgICAgICAgIFJlcy5DbG9zZVJlc0ZpbGUocmVmbm8pCi0gICAgZXhjZXB0IFJlcy5FcnJvciwgYXJnOgorICAgIGV4Y2VwdCBSZXMuRXJyb3IgYXMgYXJnOgogICAgICAgICBpZiBhcmdbMF0gaW4gKC0zNywgLTM5KToKICAgICAgICAgICAgICMgTm8gcmVzb3VyY2UgZm9yay4gV2UgbWF5IGJlIG9uIE9TWCwgYW5kIHRoaXMgbWF5IGJlIGVpdGhlcgogICAgICAgICAgICAgIyBhIGRhdGEtZm9yayBiYXNlZCByZXNvdXJjZSBmaWxlIG9yIGEgQXBwbGVTaW5nbGUgZmlsZQogICAgICAgICAgICAgIyBmcm9tIHRoZSBDVlMgcmVwb3NpdG9yeS4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZWZubyA9IFJlcy5GU09wZW5SZXNvdXJjZUZpbGUocGF0aG5hbWUsIHUnJywgMSkKLSAgICAgICAgICAgIGV4Y2VwdCBSZXMuRXJyb3IsIGFyZzoKKyAgICAgICAgICAgIGV4Y2VwdCBSZXMuRXJyb3IgYXMgYXJnOgogICAgICAgICAgICAgICAgIGlmIGFyZ1swXSAhPSAtMTk5OgogICAgICAgICAgICAgICAgICAgICAjIC0xOTkgaXMgImJhZCByZXNvdXJjZSBtYXAiCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvcGltcC5weSBiL0xpYi9wbGF0LW1hYy9waW1wLnB5CmluZGV4IGZmNjk2YjEuLjY5MjdhZDcgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9waW1wLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9waW1wLnB5CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIHVybCA9IERFRkFVTFRfUElNUERBVEFCQVNFX0ZNVCAlIChQSU1QX1ZFUlNJT04sIHN0YXR1cywgcHl2ZXJzLCBvc25hbWUsIHJlbCwgbWFjaGluZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdXJsbGliMi51cmxvcGVuKHVybCkKLSAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yLCBhcmc6CisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvciBhcyBhcmc6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBicmVhawpAQCAtNTg5LDEzICs1ODksMTMgQEAKICAgICAgICAgaW5zdGFsbFRlc3QgPSBzZWxmLl9kaWN0WydJbnN0YWxsLXRlc3QnXS5zdHJpcCgpICsgJ1xuJwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjKGluc3RhbGxUZXN0LCBuYW1lc3BhY2UpCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgYXJnOgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgYXJnOgogICAgICAgICAgICAgcmV0dXJuICJubyIsIHN0cihhcmcpCi0gICAgICAgIGV4Y2VwdCBfc2NyaXB0RXhjX05vdEluc3RhbGxlZCwgYXJnOgorICAgICAgICBleGNlcHQgX3NjcmlwdEV4Y19Ob3RJbnN0YWxsZWQgYXMgYXJnOgogICAgICAgICAgICAgcmV0dXJuICJubyIsIHN0cihhcmcpCi0gICAgICAgIGV4Y2VwdCBfc2NyaXB0RXhjX09sZEluc3RhbGxlZCwgYXJnOgorICAgICAgICBleGNlcHQgX3NjcmlwdEV4Y19PbGRJbnN0YWxsZWQgYXMgYXJnOgogICAgICAgICAgICAgcmV0dXJuICJvbGQiLCBzdHIoYXJnKQotICAgICAgICBleGNlcHQgX3NjcmlwdEV4Y19CYWRJbnN0YWxsZWQsIGFyZzoKKyAgICAgICAgZXhjZXB0IF9zY3JpcHRFeGNfQmFkSW5zdGFsbGVkIGFzIGFyZzoKICAgICAgICAgICAgIHJldHVybiAiYmFkIiwgc3RyKGFyZykKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIikKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy90ZXJtaW5hbGNvbW1hbmQucHkgYi9MaWIvcGxhdC1tYWMvdGVybWluYWxjb21tYW5kLnB5CmluZGV4IDI5MmYwOWMuLmEyZjAwOGMgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy90ZXJtaW5hbGNvbW1hbmQucHkKKysrIGIvTGliL3BsYXQtbWFjL3Rlcm1pbmFsY29tbWFuZC5weQpAQCAtMzUsNyArMzUsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICB0aGVFdmVudC5BRVNlbmQoU0VORF9NT0RFLCBrQUVOb3JtYWxQcmlvcml0eSwga0FFRGVmYXVsdFRpbWVvdXQpCi0gICAgZXhjZXB0IEFFLkVycm9yLCB3aHk6CisgICAgZXhjZXB0IEFFLkVycm9yIGFzIHdoeToKICAgICAgICAgaWYgd2h5WzBdICE9IC02MDA6ICAjIFRlcm1pbmFsLmFwcCBub3QgeWV0IHJ1bm5pbmcKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIG9zLnN5c3RlbShTVEFSVF9URVJNSU5BTCkKZGlmZiAtLWdpdCBhL0xpYi9wbGF0Zm9ybS5weSBiL0xpYi9wbGF0Zm9ybS5weQppbmRleCA1ZmQxM2EzLi5jZjU4ODE5IDEwMDc1NQotLS0gYS9MaWIvcGxhdGZvcm0ucHkKKysrIGIvTGliL3BsYXRmb3JtLnB5CkBAIC00MDQsMTAgKzQwNCwxMCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yLCdjb21tYW5kIGZhaWxlZCcKICAgICAgICAgICAgICMgWFhYIEhvdyBjYW4gSSBzdXByZXNzIHNoZWxsIGVycm9ycyBmcm9tIGJlaW5nIHdyaXR0ZW4KICAgICAgICAgICAgICMgICAgIHRvIHN0ZGVyciA/Ci0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcix3aHk6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAjcHJpbnQgJ0NvbW1hbmQgJXMgZmFpbGVkOiAlcycgJSAoY21kLHdoeSkKICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLHdoeToKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgI3ByaW50ICdDb21tYW5kICVzIGZhaWxlZDogJXMnICUgKGNtZCx3aHkpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3BvcGxpYi5weSBiL0xpYi9wb3BsaWIucHkKaW5kZXggMWNmMTE0YS4uYjdhN2E4YSAxMDA2NDQKLS0tIGEvTGliL3BvcGxpYi5weQorKysgYi9MaWIvcG9wbGliLnB5CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQogICAgICAgICAgICAgICAgIHNlbGYuc29jay5jb25uZWN0KHNhKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5zb2NrOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKQEAgLTI2Miw3ICsyNjIsNyBAQAogICAgICAgICAiIiJTaWdub2ZmOiBjb21taXQgY2hhbmdlcyBvbiBzZXJ2ZXIsIHVubG9jayBtYWlsYm94LCBjbG9zZSBjb25uZWN0aW9uLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ1FVSVQnKQotICAgICAgICBleGNlcHQgZXJyb3JfcHJvdG8sIHZhbDoKKyAgICAgICAgZXhjZXB0IGVycm9yX3Byb3RvIGFzIHZhbDoKICAgICAgICAgICAgIHJlc3AgPSB2YWwKICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKQEAgLTM0Nyw3ICszNDcsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoYWYsIHNvY2t0eXBlLCBwcm90bykKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuc29jazoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBOb25lCkBAIC0zOTksNyArMzk5LDcgQEAKICAgICAgICAgIiIiU2lnbm9mZjogY29tbWl0IGNoYW5nZXMgb24gc2VydmVyLCB1bmxvY2sgbWFpbGJveCwgY2xvc2UgY29ubmVjdGlvbi4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzcCA9IHNlbGYuX3Nob3J0Y21kKCdRVUlUJykKLSAgICAgICAgZXhjZXB0IGVycm9yX3Byb3RvLCB2YWw6CisgICAgICAgIGV4Y2VwdCBlcnJvcl9wcm90byBhcyB2YWw6CiAgICAgICAgICAgICByZXNwID0gdmFsCiAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAgICAgICAgIGRlbCBzZWxmLnNzbG9iaiwgc2VsZi5zb2NrCmRpZmYgLS1naXQgYS9MaWIvcHN0YXRzLnB5IGIvTGliL3BzdGF0cy5weQppbmRleCBiYTBiODA0Li4yYjE1MmMzIDEwMDY0NAotLS0gYS9MaWIvcHN0YXRzLnB5CisrKyBiL0xpYi9wc3RhdHMucHkKQEAgLTYxOCw3ICs2MTgsNyBAQAogICAgICAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBTdGF0cyhsaW5lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBhcmdzOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGFyZ3M6CiAgICAgICAgICAgICAgICAgICAgIHByaW50ID4+IHNlbGYuc3RyZWFtLCBhcmdzWzFdCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIHNlbGYucHJvbXB0ID0gbGluZSArICIlICIKZGlmZiAtLWdpdCBhL0xpYi9wdHkucHkgYi9MaWIvcHR5LnB5CmluZGV4IGQzZWI2NGYuLjhjNjUzMTMgMTAwNjQ0Ci0tLSBhL0xpYi9wdHkucHkKKysrIGIvTGliL3B0eS5weQpAQCAtNTYsNyArNTYsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHR0eV9uYW1lLCBtYXN0ZXJfZmQgPSBzZ2kuX2dldHB0eShvcy5PX1JEV1IsIDA2NjYsIDApCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yLCBtc2cKICAgICAgICAgcmV0dXJuIG1hc3Rlcl9mZCwgdHR5X25hbWUKICAgICBmb3IgeCBpbiAncHFyc3R1dnd4eXpQUVJTVCc6CmRpZmYgLS1naXQgYS9MaWIvcHlfY29tcGlsZS5weSBiL0xpYi9weV9jb21waWxlLnB5CmluZGV4IDFjYjQxZjEuLjIzYzVkMTggMTAwNjQ0Ci0tLSBhL0xpYi9weV9jb21waWxlLnB5CisrKyBiL0xpYi9weV9jb21waWxlLnB5CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgY29kZXN0cmluZyA9IGNvZGVzdHJpbmcgKyAnXG4nCiAgICAgdHJ5OgogICAgICAgICBjb2Rlb2JqZWN0ID0gX19idWlsdGluX18uY29tcGlsZShjb2Rlc3RyaW5nLCBkZmlsZSBvciBmaWxlLCdleGVjJykKLSAgICBleGNlcHQgRXhjZXB0aW9uLGVycjoKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgcHlfZXhjID0gUHlDb21waWxlRXJyb3IoZXJyLl9fY2xhc3NfXyxlcnIuYXJncyxkZmlsZSBvciBmaWxlKQogICAgICAgICBpZiBkb3JhaXNlOgogICAgICAgICAgICAgcmFpc2UgcHlfZXhjCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICBmb3IgZmlsZW5hbWUgaW4gYXJnczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29tcGlsZShmaWxlbmFtZSwgZG9yYWlzZT1UcnVlKQotICAgICAgICBleGNlcHQgUHlDb21waWxlRXJyb3IsZXJyOgorICAgICAgICBleGNlcHQgUHlDb21waWxlRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShlcnIubXNnKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3B5ZG9jLnB5IGIvTGliL3B5ZG9jLnB5CmluZGV4IGQxYWIwMWMuLjg5MmUyNzggMTAwNzU1Ci0tLSBhL0xpYi9weWRvYy5weQorKysgYi9MaWIvcHlkb2MucHkKQEAgLTE0NzksNyArMTQ3OSw3IEBACiAgICAgICAgICAgICBvYmplY3QgPSB0eXBlKG9iamVjdCkKICAgICAgICAgICAgIGRlc2MgKz0gJyBvYmplY3QnCiAgICAgICAgIHBhZ2VyKHRpdGxlICUgZGVzYyArICdcblxuJyArIHRleHQuZG9jdW1lbnQob2JqZWN0LCBuYW1lKSkKLSAgICBleGNlcHQgKEltcG9ydEVycm9yLCBFcnJvckR1cmluZ0ltcG9ydCksIHZhbHVlOgorICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEVycm9yRHVyaW5nSW1wb3J0KSBhcyB2YWx1ZToKICAgICAgICAgcHJpbnQgdmFsdWUKIAogZGVmIHdyaXRlZG9jKHRoaW5nLCBmb3JjZWxvYWQ9MCk6CkBAIC0xNDkxLDcgKzE0OTEsNyBAQAogICAgICAgICBmaWxlLndyaXRlKHBhZ2UpCiAgICAgICAgIGZpbGUuY2xvc2UoKQogICAgICAgICBwcmludCAnd3JvdGUnLCBuYW1lICsgJy5odG1sJwotICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEVycm9yRHVyaW5nSW1wb3J0KSwgdmFsdWU6CisgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRXJyb3JEdXJpbmdJbXBvcnQpIGFzIHZhbHVlOgogICAgICAgICBwcmludCB2YWx1ZQogCiBkZWYgd3JpdGVkb2NzKGRpciwgcGtncGF0aD0nJywgZG9uZT1Ob25lKToKQEAgLTE5MjAsNyArMTkyMCw3IEBACiAgICAgICAgICAgICBpZiBwYXRoIGFuZCBwYXRoICE9ICcuJzoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGxvY2F0ZShwYXRoLCBmb3JjZWxvYWQ9MSkKLSAgICAgICAgICAgICAgICBleGNlcHQgRXJyb3JEdXJpbmdJbXBvcnQsIHZhbHVlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBFcnJvckR1cmluZ0ltcG9ydCBhcyB2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2RvY3VtZW50KHBhdGgsIGh0bWwuZXNjYXBlKHN0cih2YWx1ZSkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBpZiBvYmo6CkBAIC0yMjIzLDcgKzIyMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVkb2MoYXJnKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGhlbHAuaGVscChhcmcpCi0gICAgICAgICAgICBleGNlcHQgRXJyb3JEdXJpbmdJbXBvcnQsIHZhbHVlOgorICAgICAgICAgICAgZXhjZXB0IEVycm9yRHVyaW5nSW1wb3J0IGFzIHZhbHVlOgogICAgICAgICAgICAgICAgIHByaW50IHZhbHVlCiAKICAgICBleGNlcHQgKGdldG9wdC5lcnJvciwgQmFkVXNhZ2UpOgpkaWZmIC0tZ2l0IGEvTGliL3F1b3ByaS5weSBiL0xpYi9xdW9wcmkucHkKaW5kZXggODc4OGFmYy4uMTcxYTU5ZSAxMDA3NTUKLS0tIGEvTGliL3F1b3ByaS5weQorKysgYi9MaWIvcXVvcHJpLnB5CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICBpbXBvcnQgZ2V0b3B0CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICd0ZCcpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVycgogICAgICAgICBwcmludCBtc2cKICAgICAgICAgcHJpbnQgInVzYWdlOiBxdW9wcmkgWy10IHwgLWRdIFtmaWxlXSAuLi4iCkBAIC0yMTgsNyArMjE4LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXM6IGNhbid0IG9wZW4gKCVzKVxuIiAlIChmaWxlLCBtc2cpKQogICAgICAgICAgICAgICAgIHN0cyA9IDEKICAgICAgICAgICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEvTGliL3JlLnB5IGIvTGliL3JlLnB5CmluZGV4IGEzM2UzNGUuLjczODhlNGIgMTAwNjQ0Ci0tLSBhL0xpYi9yZS5weQorKysgYi9MaWIvcmUucHkKQEAgLTIyOSw3ICsyMjksNyBAQAogICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIHN0cmluZyBvciBjb21waWxlZCBwYXR0ZXJuIgogICAgIHRyeToKICAgICAgICAgcCA9IHNyZV9jb21waWxlLmNvbXBpbGUocGF0dGVybiwgZmxhZ3MpCi0gICAgZXhjZXB0IGVycm9yLCB2OgorICAgIGV4Y2VwdCBlcnJvciBhcyB2OgogICAgICAgICByYWlzZSBlcnJvciwgdiAjIGludmFsaWQgZXhwcmVzc2lvbgogICAgIGlmIGxlbihfY2FjaGUpID49IF9NQVhDQUNIRToKICAgICAgICAgX2NhY2hlLmNsZWFyKCkKQEAgLTI0NCw3ICsyNDQsNyBAQAogICAgIHJlcGwsIHBhdHRlcm4gPSBrZXkKICAgICB0cnk6CiAgICAgICAgIHAgPSBzcmVfcGFyc2UucGFyc2VfdGVtcGxhdGUocmVwbCwgcGF0dGVybikKLSAgICBleGNlcHQgZXJyb3IsIHY6CisgICAgZXhjZXB0IGVycm9yIGFzIHY6CiAgICAgICAgIHJhaXNlIGVycm9yLCB2ICMgaW52YWxpZCBleHByZXNzaW9uCiAgICAgaWYgbGVuKF9jYWNoZV9yZXBsKSA+PSBfTUFYQ0FDSEU6CiAgICAgICAgIF9jYWNoZV9yZXBsLmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi9yZXhlYy5weSBiL0xpYi9yZXhlYy5weQppbmRleCAzN2RmZjYyLi42NjVmMjk0IDEwMDY0NAotLS0gYS9MaWIvcmV4ZWMucHkKKysrIGIvTGliL3JleGVjLnB5CkBAIC01NTEsNyArNTUxLDcgQEAKICAgICBpZiBhcmdzIGFuZCBhcmdzWzBdICE9ICctJzoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnAgPSBvcGVuKGFyZ3NbMF0pCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50ICIlczogY2FuJ3Qgb3BlbiBmaWxlICVyIiAlIChzeXMuYXJndlswXSwgYXJnc1swXSkKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgaWYgZnAuaXNhdHR5KCk6CkBAIC01NjYsNyArNTY2LDcgQEAKICAgICAgICAgICAgICAgICByLnNfYXBwbHkoY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucnVuY29kZSwgKHNlbGYsIGNvKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgUmVzdHJpY3RlZENvbnNvbGUoci5tb2R1bGVzWydfX21haW5fXyddLl9fZGljdF9fKS5pbnRlcmFjdCgpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBuOgorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBuOgogICAgICAgICAgICAgcmV0dXJuIG4KICAgICBlbHNlOgogICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCkBAIC01NzQsNyArNTc0LDcgQEAKICAgICAgICAgYyA9IGNvbXBpbGUodGV4dCwgZnAubmFtZSwgJ2V4ZWMnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByLnNfZXhlYyhjKQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgbjoKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgbjoKICAgICAgICAgICAgIHJldHVybiBuCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQpkaWZmIC0tZ2l0IGEvTGliL3NnbWxsaWIucHkgYi9MaWIvc2dtbGxpYi5weQppbmRleCAzYWI1N2MyLi4xNTc0ZjQ0IDEwMDY0NAotLS0gYS9MaWIvc2dtbGxpYi5weQorKysgYi9MaWIvc2dtbGxpYi5weQpAQCAtNTMwLDcgKzUzMCw3IEBACiAgICAgZWxzZToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3InKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCBmaWxlLCAiOiIsIG1zZwogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIApkaWZmIC0tZ2l0IGEvTGliL3NodXRpbC5weSBiL0xpYi9zaHV0aWwucHkKaW5kZXggYzNmZjY4Ny4uN2RhNWNhYyAxMDA2NDQKLS0tIGEvTGliL3NodXRpbC5weQorKysgYi9MaWIvc2h1dGlsLnB5CkBAIC0xMjEsMTggKzEyMSwxOCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjb3B5MihzcmNuYW1lLCBkc3RuYW1lKQogICAgICAgICAgICAgIyBYWFggV2hhdCBhYm91dCBkZXZpY2VzLCBzb2NrZXRzIGV0Yy4/Ci0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpLCB3aHk6CisgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpIGFzIHdoeToKICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHNyY25hbWUsIGRzdG5hbWUsIHN0cih3aHkpKSkKICAgICAgICAgIyBjYXRjaCB0aGUgRXJyb3IgZnJvbSB0aGUgcmVjdXJzaXZlIGNvcHl0cmVlIHNvIHRoYXQgd2UgY2FuCiAgICAgICAgICMgY29udGludWUgd2l0aCBvdGhlciBmaWxlcwotICAgICAgICBleGNlcHQgRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IEVycm9yIGFzIGVycjoKICAgICAgICAgICAgIGVycm9ycy5leHRlbmQoZXJyLmFyZ3NbMF0pCiAgICAgdHJ5OgogICAgICAgICBjb3B5c3RhdChzcmMsIGRzdCkKICAgICBleGNlcHQgV2luZG93c0Vycm9yOgogICAgICAgICAjIGNhbid0IGNvcHkgZmlsZSBhY2Nlc3MgdGltZXMgb24gV2luZG93cwogICAgICAgICBwYXNzCi0gICAgZXhjZXB0IE9TRXJyb3IsIHdoeToKKyAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgIGVycm9ycy5leHRlbmQoKHNyYywgZHN0LCBzdHIod2h5KSkpCiAgICAgaWYgZXJyb3JzOgogICAgICAgICByYWlzZSBFcnJvciwgZXJyb3JzCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICBuYW1lcyA9IFtdCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3IsIGVycjoKKyAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgogICAgICAgICBvbmVycm9yKG9zLmxpc3RkaXIsIHBhdGgsIHN5cy5leGNfaW5mbygpKQogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBuYW1lKQpAQCAtMTcwLDcgKzE3MCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIG9uZXJyb3Iob3MucmVtb3ZlLCBmdWxsbmFtZSwgc3lzLmV4Y19pbmZvKCkpCiAgICAgdHJ5OgogICAgICAgICBvcy5ybWRpcihwYXRoKQpkaWZmIC0tZ2l0IGEvTGliL3NpdGUucHkgYi9MaWIvc2l0ZS5weQppbmRleCAxNTEzODE4Li41YjAzYjVlIDEwMDY0NAotLS0gYS9MaWIvc2l0ZS5weQorKysgYi9MaWIvc2l0ZS5weQpAQCAtMzkxLDcgKzM5MSw3IEBACiAgICAgICAgIGltcG9ydCBzaXRlY3VzdG9taXplCiAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICBwYXNzCi0gICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICBpZiBvcy5lbnZpcm9uLmdldCgiUFlUSE9OVkVSQk9TRSIpOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKZGlmZiAtLWdpdCBhL0xpYi9zbXRwZC5weSBiL0xpYi9zbXRwZC5weQppbmRleCBjNjU2ZWM3Li4zYjgxODU2IDEwMDc1NQotLS0gYS9MaWIvc210cGQucHkKKysrIGIvTGliL3NtdHBkLnB5CkBAIC0zNTcsMTAgKzM1NywxMCBAQAogICAgICAgICAgICAgICAgIHJlZnVzZWQgPSBzLnNlbmRtYWlsKG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzLnF1aXQoKQotICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQUmVjaXBpZW50c1JlZnVzZWQsIGU6CisgICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBSZWNpcGllbnRzUmVmdXNlZCBhcyBlOgogICAgICAgICAgICAgcHJpbnQgPj4gREVCVUdTVFJFQU0sICdnb3QgU01UUFJlY2lwaWVudHNSZWZ1c2VkJwogICAgICAgICAgICAgcmVmdXNlZCA9IGUucmVjaXBpZW50cwotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc210cGxpYi5TTVRQRXhjZXB0aW9uKSwgZToKKyAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUEV4Y2VwdGlvbikgYXMgZToKICAgICAgICAgICAgIHByaW50ID4+IERFQlVHU1RSRUFNLCAnZ290JywgZS5fX2NsYXNzX18KICAgICAgICAgICAgICMgQWxsIHJlY2lwaWVudHMgd2VyZSByZWZ1c2VkLiAgSWYgdGhlIGV4Y2VwdGlvbiBoYWQgYW4gYXNzb2NpYXRlZAogICAgICAgICAgICAgIyBlcnJvciBjb2RlLCB1c2UgaXQuICBPdGhlcndpc2UsZmFrZSBpdCB3aXRoIGEgbm9uLXRyaWdnZXJpbmcKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdCgKICAgICAgICAgICAgIHN5cy5hcmd2WzE6XSwgJ25WaGM6ZCcsCiAgICAgICAgICAgICBbJ2NsYXNzPScsICdub3NldHVpZCcsICd2ZXJzaW9uJywgJ2hlbHAnLCAnZGVidWcnXSkKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBlOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgZToKICAgICAgICAgdXNhZ2UoMSwgZSkKIAogICAgIG9wdGlvbnMgPSBPcHRpb25zKCkKQEAgLTUyOCw3ICs1MjgsNyBAQAogICAgICAgICBub2JvZHkgPSBwd2QuZ2V0cHduYW0oJ25vYm9keScpWzJdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnNldHVpZChub2JvZHkpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FUEVSTTogcmFpc2UKICAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsIFwKICAgICAgICAgICAgICAgICAgICdDYW5ub3Qgc2V0dWlkICJub2JvZHkiOyB0cnkgcnVubmluZyB3aXRoIC1uIG9wdGlvbi4nCmRpZmYgLS1naXQgYS9MaWIvc210cGxpYi5weSBiL0xpYi9zbXRwbGliLnB5CmluZGV4IGE3MzA1Y2UuLmE5NjA4MmEgMTAwNzU1Ci0tLSBhL0xpYi9zbXRwbGliLnB5CisrKyBiL0xpYi9zbXRwbGliLnB5CkBAIC0zMDYsNyArMzA2LDcgQEAKICAgICAgICAgICAgIGFmLCBzb2NrdHlwZSwgcHJvdG8sIGNhbm9ubmFtZSwgc2EgPSByZXMKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLl9nZXRfc29ja2V0KGFmLHNvY2t0eXBlLHByb3RvLHNhKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQ+PnN0ZGVyciwgJ2Nvbm5lY3QgZmFpbDonLCBtc2cKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQppbmRleCBiMDhkYTljLi42ZmU5M2FiIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKQEAgLTMyNiw3ICszMjYsNyBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBUeXBlRXJyb3IiKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHByaW50ICJyYWlzZWQiLCBlLl9fY2xhc3NfXwogICAgICAgICAgICAgc2VsZi5mYWlsKCJyYWlzZWQgd3JvbmcgZXhjZXB0aW9uLiIpCiAKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvaG9va3MucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2hvb2tzLnB5CmluZGV4IDc2MWJkYWEuLmQ2NzAyOGYgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvaG9va3MucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9ob29rcy5weQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb24uY3JlYXRlX2NvbGxhdGlvbigiWCIsIDQyKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBUeXBlRXJyb3IiKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChlLmFyZ3NbMF0sICJwYXJhbWV0ZXIgbXVzdCBiZSBjYWxsYWJsZSIpCiAKICAgICBkZWYgQ2hlY2tDcmVhdGVDb2xsYXRpb25Ob3RBc2NpaShzZWxmKToKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oImNvbGzkIiwgY21wKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3IgYXMgZToKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBDaGVja0NvbGxhdGlvbklzVXNlZChzZWxmKToKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzdWx0ID0gY29uLmV4ZWN1dGUoc3FsKS5mZXRjaGFsbCgpCiAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBlOgorICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGUuYXJnc1swXS5sb3dlcigpLCAibm8gc3VjaCBjb2xsYXRpb24gc2VxdWVuY2U6IG15Y29sbCIpCiAKICAgICBkZWYgQ2hlY2tDb2xsYXRpb25SZWdpc3RlclR3aWNlKHNlbGYpOgpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNvbi5leGVjdXRlKCJzZWxlY3QgJ2EnIGFzIHggdW5pb24gc2VsZWN0ICdiJyBhcyB4IG9yZGVyIGJ5IHggY29sbGF0ZSBteWNvbGwiKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBub3QgZS5hcmdzWzBdLnN0YXJ0c3dpdGgoIm5vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlIik6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBPcGVyYXRpb25hbEVycm9yIHJhaXNlZCIpCiAKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weQppbmRleCBlNDU1ZmI2Li5hN2NkY2FlIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC91c2VyZnVuY3Rpb25zLnB5CkBAIC0yMDUsNyArMjA1LDcgQEAKICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgcmFpc2VleGNlcHRpb24oKSIpCiAgICAgICAgICAgICBjdXIuZmV0Y2hvbmUoKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChlLmFyZ3NbMF0sICd1c2VyLWRlZmluZWQgZnVuY3Rpb24gcmFpc2VkIGV4Y2VwdGlvbicpCiAKICAgICBkZWYgQ2hlY2tQYXJhbVN0cmluZyhzZWxmKToKQEAgLTI3OSw3ICsyNzksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IG5vc3RlcCh0KSBmcm9tIHRlc3QiKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gQXR0cmlidXRlRXJyb3IiKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZS5hcmdzWzBdLCAiJ0FnZ3JOb1N0ZXAnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzdGVwJyIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyTm9GaW5hbGl6ZShzZWxmKToKQEAgLTI4OCw3ICsyODgsNyBAQAogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBub2ZpbmFsaXplKHQpIGZyb20gdGVzdCIpCiAgICAgICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ2ZpbmFsaXplJyBtZXRob2QgcmFpc2VkIGVycm9yIikKIAogICAgIGRlZiBDaGVja0FnZ3JFeGNlcHRpb25JbkluaXQoc2VsZik6CkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgZXhjSW5pdCh0KSBmcm9tIHRlc3QiKQogICAgICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZS5hcmdzWzBdLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdfX2luaXRfXycgbWV0aG9kIHJhaXNlZCBlcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyRXhjZXB0aW9uSW5TdGVwKHNlbGYpOgpAQCAtMzA2LDcgKzMwNiw3IEBACiAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGV4Y1N0ZXAodCkgZnJvbSB0ZXN0IikKICAgICAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCiAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBlOgorICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnc3RlcCcgbWV0aG9kIHJhaXNlZCBlcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyRXhjZXB0aW9uSW5GaW5hbGl6ZShzZWxmKToKQEAgLTMxNSw3ICszMTUsNyBAQAogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBleGNGaW5hbGl6ZSh0KSBmcm9tIHRlc3QiKQogICAgICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZS5hcmdzWzBdLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdmaW5hbGl6ZScgbWV0aG9kIHJhaXNlZCBlcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyQ2hlY2tQYXJhbVN0cihzZWxmKToKQEAgLTM4NCw3ICszODQsNyBAQAogICAgIGRlZiBDaGVja1RhYmxlQWNjZXNzKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgKiBmcm9tIHQyIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5EYXRhYmFzZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgc3FsaXRlLkRhdGFiYXNlRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIG5vdCBlLmFyZ3NbMF0uZW5kc3dpdGgoInByb2hpYml0ZWQiKToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiB0ZXh0OiAlcyIgJSBlLmFyZ3NbMF0pCiAgICAgICAgICAgICByZXR1cm4KQEAgLTM5Myw3ICszOTMsNyBAQAogICAgIGRlZiBDaGVja0NvbHVtbkFjY2VzcyhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IGMyIGZyb20gdDEiKQotICAgICAgICBleGNlcHQgc3FsaXRlLkRhdGFiYXNlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBzcWxpdGUuRGF0YWJhc2VFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgbm90IGUuYXJnc1swXS5lbmRzd2l0aCgicHJvaGliaXRlZCIpOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIHRleHQ6ICVzIiAlIGUuYXJnc1swXSkKICAgICAgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvTGliL3N1YnByb2Nlc3MucHkgYi9MaWIvc3VicHJvY2Vzcy5weQppbmRleCA2MmI3MGJhLi5mNTgwMGZiIDEwMDY0NAotLS0gYS9MaWIvc3VicHJvY2Vzcy5weQorKysgYi9MaWIvc3VicHJvY2Vzcy5weQpAQCAtNzkyLDcgKzc5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbykKLSAgICAgICAgICAgIGV4Y2VwdCBweXdpbnR5cGVzLmVycm9yLCBlOgorICAgICAgICAgICAgZXhjZXB0IHB5d2ludHlwZXMuZXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAjIFRyYW5zbGF0ZSBweXdpbnR5cGVzLmVycm9yIHRvIFdpbmRvd3NFcnJvciwgd2hpY2ggaXMKICAgICAgICAgICAgICAgICAjIGEgc3ViY2xhc3Mgb2YgT1NFcnJvci4gIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5CiAgICAgICAgICAgICAgICAgIyB0cmFuc2xhdGUgZXJybm8gdXNpbmcgX3N5c19lcnJsaXN0IChvciBzaW1saWFyKSwgYnV0CkBAIC0xMTkwLDcgKzExOTAsNyBAQAogICAgIHByaW50ICJUcnlpbmcgYSB3ZWlyZCBmaWxlLi4uIgogICAgIHRyeToKICAgICAgICAgcHJpbnQgUG9wZW4oWyIvdGhpcy9wYXRoL2RvZXMvbm90L2V4aXN0Il0pLmNvbW11bmljYXRlKCkKLSAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgIHByaW50ICJUaGUgZmlsZSBkaWRuJ3QgZXhpc3QuICBJIHRob3VnaHQgc28uLi4iCiAgICAgICAgICAgICBwcmludCAiQ2hpbGQgdHJhY2ViYWNrOiIKZGlmZiAtLWdpdCBhL0xpYi90YWJuYW5ueS5weSBiL0xpYi90YWJuYW5ueS5weQppbmRleCA3NjY2NWFjLi4xZDJjNmRiIDEwMDc1NQotLS0gYS9MaWIvdGFibmFubnkucHkKKysrIGIvTGliL3RhYm5hbm55LnB5CkBAIC00Myw3ICs0Myw3IEBACiAgICAgZ2xvYmFsIHZlcmJvc2UsIGZpbGVuYW1lX29ubHkKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInF2IikKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIGVycnByaW50KG1zZykKICAgICAgICAgcmV0dXJuCiAgICAgZm9yIG8sIGEgaW4gb3B0czoKQEAgLTk1LDcgKzk1LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJycHJpbnQoIiVyOiBJL08gRXJyb3I6ICVzIiAlIChmaWxlLCBtc2cpKQogICAgICAgICByZXR1cm4KIApAQCAtMTA1LDE1ICsxMDUsMTUgQEAKICAgICB0cnk6CiAgICAgICAgIHByb2Nlc3NfdG9rZW5zKHRva2VuaXplLmdlbmVyYXRlX3Rva2VucyhmLnJlYWRsaW5lKSkKIAotICAgIGV4Y2VwdCB0b2tlbml6ZS5Ub2tlbkVycm9yLCBtc2c6CisgICAgZXhjZXB0IHRva2VuaXplLlRva2VuRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnJwcmludCgiJXI6IFRva2VuIEVycm9yOiAlcyIgJSAoZmlsZSwgbXNnKSkKICAgICAgICAgcmV0dXJuCiAKLSAgICBleGNlcHQgSW5kZW50YXRpb25FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJbmRlbnRhdGlvbkVycm9yIGFzIG1zZzoKICAgICAgICAgZXJycHJpbnQoIiVyOiBJbmRlbnRhdGlvbiBFcnJvcjogJXMiICUgKGZpbGUsIG1zZykpCiAgICAgICAgIHJldHVybgogCi0gICAgZXhjZXB0IE5hbm55TmFnLCBuYWc6CisgICAgZXhjZXB0IE5hbm55TmFnIGFzIG5hZzoKICAgICAgICAgYmFkbGluZSA9IG5hZy5nZXRfbGluZW5vKCkKICAgICAgICAgbGluZSA9IG5hZy5nZXRfbGluZSgpCiAgICAgICAgIGlmIHZlcmJvc2U6CmRpZmYgLS1naXQgYS9MaWIvdGFyZmlsZS5weSBiL0xpYi90YXJmaWxlLnB5CmluZGV4IDNmZmRmZjMuLjIwODhlNWMgMTAwNjQ0Ci0tLSBhL0xpYi90YXJmaWxlLnB5CisrKyBiL0xpYi90YXJmaWxlLnB5CkBAIC0xNTQwLDcgKzE1NDAsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuY2hvd24odGFyaW5mbywgcGF0aCkKICAgICAgICAgICAgICAgICBzZWxmLnV0aW1lKHRhcmluZm8sIHBhdGgpCiAgICAgICAgICAgICAgICAgc2VsZi5jaG1vZCh0YXJpbmZvLCBwYXRoKQotICAgICAgICAgICAgZXhjZXB0IEV4dHJhY3RFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBFeHRyYWN0RXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9ybGV2ZWwgPiAxOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xNTY1LDcgKzE1NjUsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfbWVtYmVyKHRhcmluZm8sIG9zLnBhdGguam9pbihwYXRoLCB0YXJpbmZvLm5hbWUpKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGVsc2U6CkBAIC0xNTczLDcgKzE1NzMsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMSwgInRhcmZpbGU6ICVzIiAlIGUuc3RyZXJyb3IpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGJnKDEsICJ0YXJmaWxlOiAlcyAlciIgJSAoZS5zdHJlcnJvciwgZS5maWxlbmFtZSkpCi0gICAgICAgIGV4Y2VwdCBFeHRyYWN0RXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBFeHRyYWN0RXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JsZXZlbCA+IDE6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGVsc2U6CkBAIC0xNjgxLDcgKzE2ODEsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIodGFyZ2V0cGF0aCkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC0xNzQ1LDExICsxNzQ1LDExIEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLl9leHRyYWN0X21lbWJlcihzZWxmLmdldG1lbWJlcihsaW5rcGF0aCksIHRhcmdldHBhdGgpCi0gICAgICAgICAgICBleGNlcHQgKEVudmlyb25tZW50RXJyb3IsIEtleUVycm9yKSwgZToKKyAgICAgICAgICAgIGV4Y2VwdCAoRW52aXJvbm1lbnRFcnJvciwgS2V5RXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAgICAgbGlua3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGxpbmtwYXRoKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKGxpbmtwYXRoLCB0YXJnZXRwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCBlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImxpbmsgY291bGQgbm90IGJlIGNyZWF0ZWQiKQogCiAgICAgZGVmIGNob3duKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMTc3Nyw3ICsxNzc3LDcgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIm9zMmVteCI6CiAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jaG93bih0YXJnZXRwYXRoLCB1LCBnKQotICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IsIGU6CisgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4dHJhY3RFcnJvcigiY291bGQgbm90IGNoYW5nZSBvd25lciIpCiAKICAgICBkZWYgY2htb2Qoc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCk6CkBAIC0xNzg2LDcgKzE3ODYsNyBAQAogICAgICAgICBpZiBoYXNhdHRyKG9zLCAnY2htb2QnKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5jaG1vZCh0YXJnZXRwYXRoLCB0YXJpbmZvLm1vZGUpCi0gICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG1vZGUiKQogCiAgICAgZGVmIHV0aW1lKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMTgwMCw3ICsxODAwLDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51dGltZSh0YXJnZXRwYXRoLCAodGFyaW5mby5tdGltZSwgdGFyaW5mby5tdGltZSkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCBlOgorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG1vZGlmaWNhdGlvbiB0aW1lIikKIAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTgzMyw3ICsxODMzLDcgQEAKIAogICAgICAgICAgICAgICAgIHRhcmluZm8gPSBzZWxmLnByb2NfbWVtYmVyKHRhcmluZm8pCiAKLSAgICAgICAgICAgIGV4Y2VwdCBIZWFkZXJFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBIZWFkZXJFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuaWdub3JlX3plcm9zOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgIjB4JVg6ICVzIiAlIChzZWxmLm9mZnNldCwgZSkpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IEJMT0NLU0laRQpkaWZmIC0tZ2l0IGEvTGliL3RlbG5ldGxpYi5weSBiL0xpYi90ZWxuZXRsaWIucHkKaW5kZXggYTEzZTg1Yy4uNDk2NGQ1OSAxMDA2NDQKLS0tIGEvTGliL3RlbG5ldGxpYi5weQorKysgYi9MaWIvdGVsbmV0bGliLnB5CkBAIC0yMjcsNyArMjI3LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KGFmLCBzb2NrdHlwZSwgcHJvdG8pCiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3Qoc2EpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL3RlbXBmaWxlLnB5IGIvTGliL3RlbXBmaWxlLnB5CmluZGV4IDJlOGNkNmQuLmY0ZjEwNTggMTAwNjQ0Ci0tLSBhL0xpYi90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVtcGZpbGUucHkKQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgICAgICAgICAgIF9vcy51bmxpbmsoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZGVsIGZwLCBmZAogICAgICAgICAgICAgICAgIHJldHVybiBkaXIKLSAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvciksIGU6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZVswXSAhPSBfZXJybm8uRUVYSVNUOgogICAgICAgICAgICAgICAgICAgICBicmVhayAjIG5vIHBvaW50IHRyeWluZyBtb3JlIG5hbWVzIGluIHRoaXMgZGlyZWN0b3J5CiAgICAgICAgICAgICAgICAgcGFzcwpAQCAtMjM2LDcgKzIzNiw3IEBACiAgICAgICAgICAgICBmZCA9IF9vcy5vcGVuKGZpbGUsIGZsYWdzLCAwNjAwKQogICAgICAgICAgICAgX3NldF9jbG9leGVjKGZkKQogICAgICAgICAgICAgcmV0dXJuIChmZCwgX29zLnBhdGguYWJzcGF0aChmaWxlKSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IF9lcnJuby5FRVhJU1Q6CiAgICAgICAgICAgICAgICAgY29udGludWUgIyB0cnkgYWdhaW4KICAgICAgICAgICAgIHJhaXNlCkBAIC0zMjcsNyArMzI3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgX29zLm1rZGlyKGZpbGUsIDA3MDApCiAgICAgICAgICAgICByZXR1cm4gZmlsZQotICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gX2Vycm5vLkVFWElTVDoKICAgICAgICAgICAgICAgICBjb250aW51ZSAjIHRyeSBhZ2FpbgogICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weSBiL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQppbmRleCAzMGMxZTdjLi4wZjEzODZlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKKysrIGIvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CkBAIC01ODUsNyArNTg1LDcgQEAKICAgICAgICAgYmFkcGlja2xlID0gcGlja2xlLlBST1RPICsgY2hyKG9vYikgKyBidWlsZF9ub25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYubG9hZHMoYmFkcGlja2xlKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZGV0YWlsOgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBkZXRhaWw6CiAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyKGRldGFpbCkuc3RhcnRzd2l0aCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbCIpKQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcmVncnRlc3QucHkgYi9MaWIvdGVzdC9yZWdydGVzdC5weQppbmRleCA4YzBmMmU0Li5jZTM5NjQ5IDEwMDc1NQotLS0gYS9MaWIvdGVzdC9yZWdydGVzdC5weQorKysgYi9MaWIvdGVzdC9yZWdydGVzdC5weQpAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXJkaXI9JywgJ25vY292ZXJkaXInLCAncnVubGVha3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h1bnRybGVha3M9JywgJ3ZlcmJvc2UyJywgJ21lbWxpbWl0PScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgdXNhZ2UoMiwgbXNnKQogCiAgICAgIyBEZWZhdWx0cwpAQCAtNTU2LDE5ICs1NTYsMTkgQEAKICAgICAgICAgICAgICAgICBkYXNoX1IodGhlX21vZHVsZSwgdGVzdCwgaW5kaXJlY3RfdGVzdCwgaHVudHJsZWFrcykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAotICAgIGV4Y2VwdCB0ZXN0X3N1cHBvcnQuUmVzb3VyY2VEZW5pZWQsIG1zZzoKKyAgICBleGNlcHQgdGVzdF9zdXBwb3J0LlJlc291cmNlRGVuaWVkIGFzIG1zZzoKICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgcHJpbnQgdGVzdCwgInNraXBwZWQgLS0iLCBtc2cKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICByZXR1cm4gLTIKLSAgICBleGNlcHQgKEltcG9ydEVycm9yLCB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQpLCBtc2c6CisgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgdGVzdF9zdXBwb3J0LlRlc3RTa2lwcGVkKSBhcyBtc2c6CiAgICAgICAgIGlmIG5vdCBxdWlldDoKICAgICAgICAgICAgIHByaW50IHRlc3QsICJza2lwcGVkIC0tIiwgbXNnCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgcmV0dXJuIC0xCiAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICByYWlzZQotICAgIGV4Y2VwdCB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCwgbXNnOgorICAgIGV4Y2VwdCB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCBhcyBtc2c6CiAgICAgICAgIHByaW50ICJ0ZXN0IiwgdGVzdCwgImZhaWxlZCAtLSIsIG1zZwogICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgcmV0dXJuIDAKQEAgLTY0MCw3ICs2NDAsNyBAQAogICAgICAgICAgICAgcHJpbnQgIiVyIGxlZnQgYmVoaW5kICVzICVyIiAlICh0ZXN0bmFtZSwga2luZCwgbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbnVrZXIobmFtZSkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgbXNnOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICgiJXIgbGVmdCBiZWhpbmQgJXMgJXIgYW5kIGl0IGNvdWxkbid0IGJlICIKICAgICAgICAgICAgICAgICAicmVtb3ZlZDogJXMiICUgKHRlc3RuYW1lLCBraW5kLCBuYW1lLCBtc2cpKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zb3J0cGVyZi5weSBiL0xpYi90ZXN0L3NvcnRwZXJmLnB5CmluZGV4IGNjODNlZTQuLjNjOTViODkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NvcnRwZXJmLnB5CisrKyBiL0xpYi90ZXN0L3NvcnRwZXJmLnB5CkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQgImNhbid0IHdyaXRlIiwgZm4sICI6IiwgbXNnCiAgICAgZWxzZToKICAgICAgICAgcmVzdWx0ID0gbWFyc2hhbC5sb2FkKGZwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5IGIvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CmluZGV4IDFhYTY4ZGUuLjIxMTZlYTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQorKysgYi9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKQEAgLTk3MCw3ICs5NzAsNyBAQAogICAgICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgICAgICB5aWVsZCA0ICsgIiIKICAgICAgICAgICAgIHNlbGYuZml4dHlwZSgnICcpLmpvaW4oZigpKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiAnKycgbm90IGluIHN0cihlKToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2pvaW4oKSBhdGUgZXhjZXB0aW9uIG1lc3NhZ2UnKQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ib29sLnB5IGIvTGliL3Rlc3QvdGVzdF9ib29sLnB5CmluZGV4IDgxMjFlMDMuLjk1NDQyM2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYm9vbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Jvb2wucHkKQEAgLTM3MywxMyArMzczLDExIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYWR2YWwKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBib29sKEEoKSkKLSAgICAgICAgICAgIGV4Y2VwdCAoRXhjZXB0aW9uKSwgZV9ib29sOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBsZW4oQSgpKQotICAgICAgICAgICAgZXhjZXB0IChFeGNlcHRpb24pLCBlX2xlbjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlX2Jvb2wpLCBzdHIoZV9sZW4pKQorICAgICAgICAgICAgZXhjZXB0IChFeGNlcHRpb24pIGFzIGVfYm9vbDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxlbihBKCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChFeGNlcHRpb24pIGFzIGVfbGVuOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlX2Jvb2wpLCBzdHIoZV9sZW4pKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCb29sVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9jZmdwYXJzZXIucHkKaW5kZXggMzk3OWYxNS4uMWIyODhiNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jZmdwYXJzZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jZmdwYXJzZXIucHkKQEAgLTE4MSw3ICsxODEsNyBAQAogICAgIGRlZiBnZXRfZXJyb3Ioc2VsZiwgZXhjLCBzZWN0aW9uLCBvcHRpb24pOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNmLmdldChzZWN0aW9uLCBvcHRpb24pCi0gICAgICAgIGV4Y2VwdCBleGMsIGU6CisgICAgICAgIGV4Y2VwdCBleGMgYXMgZToKICAgICAgICAgICAgIHJldHVybiBlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiB0eXBlICVzLiVzIgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jZ2kucHkgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQppbmRleCA1MmU1ZTkxLi45Y2Y2YTEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NnaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAidW5rbm93biBtZXRob2Q6ICVzIiAlIG1ldGhvZAogICAgIHRyeToKICAgICAgICAgcmV0dXJuIGNnaS5wYXJzZShmcCwgZW52LCBzdHJpY3RfcGFyc2luZz0xKQotICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlcnI6CisgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IgYXMgZXJyOgogICAgICAgICByZXR1cm4gQ29tcGFyYWJsZUV4Y2VwdGlvbihlcnIpCiAKICMgQSBsaXN0IG9mIHRlc3QgY2FzZXMuICBFYWNoIHRlc3QgY2FzZSBpcyBhIGEgdHdvLXR1cGxlIHRoYXQgY29udGFpbnMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkgYi9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5CmluZGV4IDMyMDFkZDguLjE3NThmZDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbGFzcy5weQpAQCAtMzcyLDcgKzM3Miw3IEBACiAgICAgYSA9IHByb3BlcnR5KGJvb2gpCiB0cnk6CiAgICAgQSgpLmEgIyBSYWlzZWQgQXR0cmlidXRlRXJyb3I6IEEgaW5zdGFuY2UgaGFzIG5vIGF0dHJpYnV0ZSAnYScKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgeDoKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyB4OgogICAgIGlmIHN0cih4KSAhPSAiYm9vaCI6CiAgICAgICAgIHByaW50ICJhdHRyaWJ1dGUgZXJyb3IgZm9yIEEoKS5hIGdvdCBtYXNrZWQ6Iiwgc3RyKHgpCiAKQEAgLTM4NCw3ICszODQsNyBAQAogICAgIF9faW5pdF9fID0gcHJvcGVydHkoYm9vaCkKIHRyeToKICAgICBJKCkgIyBJbiBkZWJ1ZyBtb2RlLCBwcmludGVkIFhYWCB1bmRldGVjdGVkIGVycm9yIGFuZCByYWlzZXMgQXR0cmlidXRlRXJyb3IKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgeDoKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyB4OgogICAgIHBhc3MKIGVsc2U6CiAgICAgcHJpbnQgImF0dHJpYnV0ZSBlcnJvciBmb3IgSS5fX2luaXRfXyBnb3QgbWFza2VkIgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weQppbmRleCAzYzgwMGY4Li4wNzExOTIzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weQpAQCAtNTk1LDcgKzU5NSw3IEBACiAgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlID4gMHhmZmZmOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MTFceDExXHgwMCIuZGVjb2RlKCJ1bmljb2RlX2ludGVybmFsIikKLSAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IsIGV4OgorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBleDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygidW5pY29kZV9pbnRlcm5hbCIsIGV4LmVuY29kaW5nKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJceDAwXHgwMFx4MDBceDAwXHgwMFx4MTFceDExXHgwMCIsIGV4Lm9iamVjdCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0LCBleC5zdGFydCkKQEAgLTc4Miw3ICs3ODIsNyBAQAogICAgICAgICAgICAgICAgIHByZXBwZWQgPSB1bmljb2RlKHByZXBwZWQsICJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuYW1lcHJlcChvcmlnKSwgcHJlcHBlZCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCgiVGVzdCAzLiVkOiAlcyIgJSAocG9zKzEsIHN0cihlKSkpCiAKIGNsYXNzIElETkFDb2RlY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlci5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZXIucHkKaW5kZXggMmVjZDA5My4uZWJjY2IzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21waWxlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVyLnB5CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIuY29tcGlsZShidWYsIGJhc2VuYW1lLCAiZXhlYyIpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KGUuYXJncykKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gKz0gIltpbiBmaWxlICVzXSIgJSBiYXNlbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgZS5hcmdzID0gdHVwbGUoYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQppbmRleCA3NDc3ODVkLi45MTQyNDI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoMSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB5aWVsZCA0MgotICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yLCBlOgorICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKGUuYXJnc1swXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMSwgNDIsIDk5OV0pCiAgICAgICAgIHdpdGggd29vaG9vKCkgYXMgeDoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29va2llbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb29raWVsaWIucHkKaW5kZXggNTQ0ZjI5Zi4uOWIwNjg2OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb29raWVsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb29raWVsaWIucHkKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGMubG9hZChmaWxlbmFtZT0iZm9yIHRoaXMgdGVzdCB0byB3b3JrLCBhIGZpbGUgd2l0aCB0aGlzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGVuYW1lIHNob3VsZCBub3QgZXhpc3QiKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGV4YzoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKICAgICAgICAgICAgICAgICAjIGV4YWN0bHkgSU9FcnJvciwgbm90IExvYWRFcnJvcgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLl9fY2xhc3NfXywgSU9FcnJvcikKICAgICAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CmluZGV4IGVkOTJiZmUuLjBhOWRiNGUgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CkBAIC0xNiw3ICsxNiw4IEBACiAgICAgZm9yIHN1ZmZpeCBpbiBbJycsICcucGFnJywgJy5kaXInLCAnLmRiJ106CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSArIHN1ZmZpeCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IsIChlcnJubywgc3RyZXJyb3IpOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgKGVycm5vLCBzdHJlcnJvcikgPSBlCiAgICAgICAgICAgICAjIGlmIHdlIGNhbid0IGRlbGV0ZSB0aGUgZmlsZSBiZWNhdXNlIG9mIHBlcm1pc3Npb25zLAogICAgICAgICAgICAgIyBub3RoaW5nIHdpbGwgd29yaywgc28gc2tpcCB0aGUgdGVzdAogICAgICAgICAgICAgaWYgZXJybm8gPT0gMToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQppbmRleCA1MGRmOTNkLi5mOWE5ZTgyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgICAgICAgICAgICAgICBwcmludCAnRXJyb3IgaW4gdGVzdCBjYXNlczonCiAgICAgICAgICAgICAgICAgcHJpbnQgbGluZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBleGNlcHQgRGVjaW1hbEV4Y2VwdGlvbiwgZXhjZXB0aW9uOgorICAgICAgICAgICAgZXhjZXB0IERlY2ltYWxFeGNlcHRpb24gYXMgZXhjZXB0aW9uOgogICAgICAgICAgICAgICAgICNFeGNlcHRpb24gcmFpc2VkIHdoZXJlIHRoZXJlIHNob3Vkbid0IGhhdmUgYmVlbiBvbmUuCiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeGNlcHRpb24gIicrZXhjZXB0aW9uLl9fY2xhc3NfXy5fX25hbWVfXyArICciIHJhaXNlZCBvbiBsaW5lICcrbGluZSkKIApAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Qoc2VsZi5jb250ZXh0LmNyZWF0ZV9kZWNpbWFsKHYpKQogICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTaWduYWxzLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFNpZ25hbHMgYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJhaXNlZCAlcyBpbiAlcyB3aGVuICVzIGRpc2FibGVkIiAlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUsIHMsIGVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yNTgsNyArMjU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZnVuY3QoKnZhbHMpCiAgICAgICAgICAgICAgICAgZXhjZXB0IGVycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZXhjZXB0IFNpZ25hbHMsIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IFNpZ25hbHMgYXMgZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJSYWlzZWQgJXMgaW4gJXMgd2hlbiAlcyBkaXNhYmxlZCIgJSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSwgcywgZXJyb3IpKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHN0cihmdW5jdCgqdmFscykpCiAgICAgICAgICAgICBpZiBmbmFtZSA9PSAnc2FtZV9xdWFudHVtJzoKICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHIoaW50KGV2YWwocmVzdWx0KSkpICMgJ1RydWUnLCAnRmFsc2UnIC0+ICcxJywgJzAnCi0gICAgICAgIGV4Y2VwdCBTaWduYWxzLCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IFNpZ25hbHMgYXMgZXJyb3I6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIlJhaXNlZCAlcyBpbiAlcyIgJSAoZXJyb3IsIHMpKQogICAgICAgICBleGNlcHQ6ICNDYXRjaCBhbnkgZXJyb3IgbG9uZyBlbm91Z2ggdG8gc3RhdGUgdGhlIHRlc3QgY2FzZS4KICAgICAgICAgICAgIHByaW50ICJFUlJPUjoiLCBzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9kZWZhdWx0ZGljdC5weQppbmRleCAxMzRiNWE4Li42MDJlMGQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIE5vbmUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGQyWzE1XQotICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3MsICgxNSwpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJkMlsxNV0gZGlkbid0IHJhaXNlIEtleUVycm9yIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CmluZGV4IDI5NjhlM2QuLjk2ZmY5ZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXNjci5weQpAQCAtOTQ1LDcgKzk0NSw3IEBACiAgICAgZGVmIHJhaXNlcyhleGMsIGV4cGVjdGVkLCBjYWxsYWJsZSwgKmFyZ3MpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjYWxsYWJsZSgqYXJncykKLSAgICAgICAgZXhjZXB0IGV4YywgbXNnOgorICAgICAgICBleGNlcHQgZXhjIGFzIG1zZzoKICAgICAgICAgICAgIGlmIG5vdCBzdHIobXNnKS5zdGFydHN3aXRoKGV4cGVjdGVkKToKICAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCAiTWVzc2FnZSAlciwgZXhwZWN0ZWQgJXIiICUgKHN0cihtc2cpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCkBAIC0xODEzLDcgKzE4MTMsNyBAQAogICAgIG5vID0gTm9XZWFrKCkKICAgICB0cnk6CiAgICAgICAgIHdlYWtyZWYucmVmKG5vKQotICAgIGV4Y2VwdCBUeXBlRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgVHlwZUVycm9yIGFzIG1zZzoKICAgICAgICAgdmVyaWZ5KHN0cihtc2cpLmZpbmQoIndlYWsgcmVmZXJlbmNlIikgPj0gMCkKICAgICBlbHNlOgogICAgICAgICB2ZXJpZnkoMCwgIndlYWtyZWYucmVmKG5vKSBzaG91bGQgYmUgaWxsZWdhbCIpCkBAIC0xODY2LDcgKzE4NjYsNyBAQAogICAgIGZvciBhdHRyIGluICJfX2RvY19fIiwgImZnZXQiLCAiZnNldCIsICJmZGVsIjoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2V0YXR0cihyYXcsIGF0dHIsIDQyKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgaWYgc3RyKG1zZykuZmluZCgncmVhZG9ubHknKSA8IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgid2hlbiBzZXR0aW5nIHJlYWRvbmx5IGF0dHIgJXIgb24gYSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydHksIGdvdCB1bmV4cGVjdGVkIFR5cGVFcnJvciAiCkBAIC0yNDE2LDcgKzI0MTYsNyBAQAogICAgICAgICBmb3IgY29kZSBpbiBjb2RlMSwgY29kZTIsIGNvZGUzOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNhbmRib3gucl9leGVjKGNvZGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGlmIHN0cihtc2cpLmZpbmQoInJlc3RyaWN0ZWQiKSA+PSAwOgogICAgICAgICAgICAgICAgICAgICBvdXRjb21lID0gIk9LIgogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0zNTIzLDcgKzM1MjMsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBELl9fYmFzZXNfXyA9ICgpCi0gICAgZXhjZXB0IFR5cGVFcnJvciwgbXNnOgorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgbXNnOgogICAgICAgICBpZiBzdHIobXNnKSA9PSAiYSBuZXctc3R5bGUgY2xhc3MgY2FuJ3QgaGF2ZSBvbmx5IGNsYXNzaWMgYmFzZXMiOgogICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgIndyb25nIGVycm9yIG1lc3NhZ2UgZm9yIC5fX2Jhc2VzX18gPSAoKSIKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9kaWN0LnB5CmluZGV4IGZmNmNjZGUuLmM3ZmExNWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGljdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RpY3QucHkKQEAgLTQxNCw3ICs0MTQsNyBAQAogICAgICAgICBlID0gRSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVbNDJdCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoNDIsKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbF8oImVbNDJdIGRpZG4ndCByYWlzZSBSdW50aW1lRXJyb3IiKQpAQCAtNDI1LDcgKzQyNSw3IEBACiAgICAgICAgIGYgPSBGKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZls0Ml0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoNDIsKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbF8oImZbNDJdIGRpZG4ndCByYWlzZSBLZXlFcnJvciIpCkBAIC00MzQsNyArNDM0LDcgQEAKICAgICAgICAgZyA9IEcoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBnWzQyXQotICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3MsICg0MiwpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsXygiZ1s0Ml0gZGlkbid0IHJhaXNlIEtleUVycm9yIikKQEAgLTQ0NCw3ICs0NDQsNyBAQAogICAgICAgICBkID0ge30KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZFsoMSwpXQotICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsICgoMSwpLCkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIm1pc3NpbmcgS2V5RXJyb3IiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGwucHkKaW5kZXggYjcwYTRjZi4uOWM3MDQyNyAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9kbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RsLnB5CkBAIC0xOCw3ICsxOCw3IEBACiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAndHJ5aW5nIHRvIG9wZW46JywgcywKICAgICAgICAgbCA9IGRsLm9wZW4ocykKLSAgICBleGNlcHQgZGwuZXJyb3IsIGVycjoKKyAgICBleGNlcHQgZGwuZXJyb3IgYXMgZXJyOgogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgJ2ZhaWxlZCcsIHJlcHIoc3RyKGVycikpCiAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW9mLnB5IGIvTGliL3Rlc3QvdGVzdF9lb2YucHkKaW5kZXggYWFlMzUxOC4uMTE4N2QwNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lb2YucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lb2YucHkKQEAgLTExLDcgKzExLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXZhbCgiIiIndGhpcyBpcyBhIHRlc3RcCiAgICAgICAgICAgICAiIiIpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobXNnKSwgZXhwZWN0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQKQEAgLTIwLDcgKzIwLDcgQEAKICAgICAgICAgZXhwZWN0ID0gIkVPRiB3aGlsZSBzY2FubmluZyB0cmlwbGUtcXVvdGVkIHN0cmluZyAoPHN0cmluZz4sIGxpbmUgMSkiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGV2YWwoIiIiJycndGhpcyBpcyBhIHRlc3QiIiIpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobXNnKSwgZXhwZWN0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQppbmRleCA3NjE5YWFlLi40YTZiOGM1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CkBAIC0yMSwxNyArMjEsMTcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IGV4Y2VwdGlvbnMKICAgICAgICAgICAgIHJlbG9hZChleGNlcHRpb25zKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWxvYWRpbmcgZXhjZXB0aW9uczogJXMiICUgZSkKIAogICAgIGRlZiByYWlzZV9jYXRjaChzZWxmLCBleGMsIGV4Y25hbWUpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYWlzZSBleGMsICJzcGFtIgotICAgICAgICBleGNlcHQgZXhjLCBlcnI6CisgICAgICAgIGV4Y2VwdCBleGMgYXMgZXJyOgogICAgICAgICAgICAgYnVmMSA9IHN0cihlcnIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJhaXNlIGV4Yygic3BhbSIpCi0gICAgICAgIGV4Y2VwdCBleGMsIGVycjoKKyAgICAgICAgZXhjZXB0IGV4YyBhcyBlcnI6CiAgICAgICAgICAgICBidWYyID0gc3RyKGVycikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmMSwgYnVmMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhjLl9fbmFtZV9fLCBleGNuYW1lKQpAQCAtMTE1LDcgKzExNSw3IEBACiAKICAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChFeGNlcHRpb24sICJFeGNlcHRpb24iKQogICAgICAgICB0cnk6IHggPSAxLzAKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZTogcGFzcworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6IHBhc3MKIAogICAgIGRlZiB0ZXN0U3ludGF4RXJyb3JNZXNzYWdlKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgcmlnaHQgZXhjZXB0aW9uIG1lc3NhZ2UgaXMgcmFpc2VkIGZvciBlYWNoIG9mCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgZGVmIGNrbXNnKHNyYywgbXNnKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjb21waWxlKHNyYywgJzxmcmFnbWVudD4nLCAnZXhlYycpCi0gICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIGU6CisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLm1zZyAhPSBtc2c6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgJXMsIGdvdCAlcyIgJSAobXNnLCBlLm1zZykpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX2V4Y2VwdGlvbihCYWRFeGNlcHRpb24sIDEpCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBleGMsIGVyciwgdGIgPSBzeXMuZXhjX2luZm8oKQogICAgICAgICAgICAgICAgIGNvID0gdGIudGJfZnJhbWUuZl9jb2RlCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY28uY29fbmFtZSwgInRlc3RfY2FwaTEiKQpAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX2V4Y2VwdGlvbihCYWRFeGNlcHRpb24sIDApCi0gICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBleGMsIGVyciwgdGIgPSBzeXMuZXhjX2luZm8oKQogICAgICAgICAgICAgICAgIGNvID0gdGIudGJfZnJhbWUuZl9jb2RlCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY28uY29fbmFtZSwgIl9faW5pdF9fIikKQEAgLTI4NSw3ICsyODUsNyBAQAogICAgICAgICBmb3IgZXhjLCBhcmdzLCBleHBlY3RlZCBpbiBleGNlcHRpb25MaXN0OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJhaXNlIGV4YygqYXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICBpZiB0eXBlKGUpIGlzIG5vdCBleGM6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgIyBWZXJpZnkgbW9kdWxlIG5hbWUKQEAgLTM0NCw2ICszNDQsMTYgQEAKICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cihFeGNlcHRpb24oJ2EnKSkpCiAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh1bmljb2RlKEV4Y2VwdGlvbih1J2EnKSkpCiAKKyAgICBkZWYgdGVzdEV4Y2VwdGlvbkNsZWFudXAoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlICJleGNlcHQgViBhcyBOIiBleGNlcHRpb25zIGFyZSBjbGVhbmVkIHVwIHByb3Blcmx5CisgICAgICAgIAorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZSkKKyAgICAgICAgICAgIGRlbCBlCisgICAgICAgIHNlbGYuZmFpbElmKCdlJyBpbiBsb2NhbHMoKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvblRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5CmluZGV4IDI4NGRiYjIuLjExY2Y0M2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXh0Y2FsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkKQEAgLTM1LDIxICszNSwyMSBAQAogCiB0cnk6CiAgICAgZygpCi1leGNlcHQgVHlwZUVycm9yLCBlcnI6CitleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKICAgICBwcmludCAiVHlwZUVycm9yOiIsIGVycgogZWxzZToKICAgICBwcmludCAic2hvdWxkIHJhaXNlIFR5cGVFcnJvcjogbm90IGVub3VnaCBhcmd1bWVudHM7IGV4cGVjdGVkIDEsIGdvdCAwIgogCiB0cnk6CiAgICAgZygqKCkpCi1leGNlcHQgVHlwZUVycm9yLCBlcnI6CitleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKICAgICBwcmludCAiVHlwZUVycm9yOiIsIGVycgogZWxzZToKICAgICBwcmludCAic2hvdWxkIHJhaXNlIFR5cGVFcnJvcjogbm90IGVub3VnaCBhcmd1bWVudHM7IGV4cGVjdGVkIDEsIGdvdCAwIgogCiB0cnk6CiAgICAgZygqKCksICoqe30pCi1leGNlcHQgVHlwZUVycm9yLCBlcnI6CitleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKICAgICBwcmludCAiVHlwZUVycm9yOiIsIGVycgogZWxzZToKICAgICBwcmludCAic2hvdWxkIHJhaXNlIFR5cGVFcnJvcjogbm90IGVub3VnaCBhcmd1bWVudHM7IGV4cGVjdGVkIDEsIGdvdCAwIgpAQCAtNjEsNyArNjEsNyBAQAogY2xhc3MgTm90aGluZzogcGFzcwogdHJ5OgogICAgIGcoKk5vdGhpbmcoKSkKLWV4Y2VwdCBUeXBlRXJyb3IsIGF0dHI6CitleGNlcHQgVHlwZUVycm9yIGFzIGF0dHI6CiAgICAgcGFzcwogZWxzZToKICAgICBwcmludCAic2hvdWxkIHJhaXNlIFR5cGVFcnJvciIKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgcmV0dXJuIDUKIHRyeToKICAgICBnKCpOb3RoaW5nKCkpCi1leGNlcHQgVHlwZUVycm9yLCBhdHRyOgorZXhjZXB0IFR5cGVFcnJvciBhcyBhdHRyOgogICAgIHBhc3MKIGVsc2U6CiAgICAgcHJpbnQgInNob3VsZCByYWlzZSBUeXBlRXJyb3IiCkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIHJldHVybiBzZWxmCiB0cnk6CiAgICAgZygqTm90aGluZygpKQotZXhjZXB0IFR5cGVFcnJvciwgYXR0cjoKK2V4Y2VwdCBUeXBlRXJyb3IgYXMgYXR0cjoKICAgICBwYXNzCiBlbHNlOgogICAgIHByaW50ICJzaG91bGQgcmFpc2UgVHlwZUVycm9yIgpAQCAtMTMyLDc3ICsxMzIsNzcgQEAKIAogdHJ5OgogICAgIGcoMSwgMiwgMywgKip7J3gnOjQsICd5Jzo1fSkKLWV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKK2V4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgogICAgIHByaW50IGVycgogZWxzZToKICAgICBwcmludCAic2hvdWxkIHJhaXNlIFR5cGVFcnJvcjoga2V5d29yZCBwYXJhbWV0ZXIgcmVkZWZpbmVkIgogCiB0cnk6CiAgICAgZygxLCAyLCAzLCBhPTQsIGI9NSwgKig2LCA3KSwgKip7J2EnOjgsICdiJzo5fSkKLWV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKK2V4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgogICAgIHByaW50IGVycgogZWxzZToKICAgICBwcmludCAic2hvdWxkIHJhaXNlIFR5cGVFcnJvcjoga2V5d29yZCBwYXJhbWV0ZXIgcmVkZWZpbmVkIgogCiB0cnk6CiAgICAgZigqKnsxOjJ9KQotZXhjZXB0IFR5cGVFcnJvciwgZXJyOgorZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6CiAgICAgcHJpbnQgZXJyCiBlbHNlOgogICAgIHByaW50ICJzaG91bGQgcmFpc2UgVHlwZUVycm9yOiBrZXl3b3JkcyBtdXN0IGJlIHN0cmluZ3MiCiAKIHRyeToKICAgICBoKCoqeydlJzogMn0pCi1leGNlcHQgVHlwZUVycm9yLCBlcnI6CitleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKICAgICBwcmludCBlcnIKIGVsc2U6CiAgICAgcHJpbnQgInNob3VsZCByYWlzZSBUeXBlRXJyb3I6IHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudDogZSIKIAogdHJ5OgogICAgIGgoKmgpCi1leGNlcHQgVHlwZUVycm9yLCBlcnI6CitleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKICAgICBwcmludCBlcnIKIGVsc2U6CiAgICAgcHJpbnQgInNob3VsZCByYWlzZSBUeXBlRXJyb3I6ICogYXJndW1lbnQgbXVzdCBiZSBhIHR1cGxlIgogCiB0cnk6CiAgICAgZGlyKCpoKQotZXhjZXB0IFR5cGVFcnJvciwgZXJyOgorZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6CiAgICAgcHJpbnQgZXJyCiBlbHNlOgogICAgIHByaW50ICJzaG91bGQgcmFpc2UgVHlwZUVycm9yOiAqIGFyZ3VtZW50IG11c3QgYmUgYSB0dXBsZSIKIAogdHJ5OgogICAgIE5vbmUoKmgpCi1leGNlcHQgVHlwZUVycm9yLCBlcnI6CitleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKICAgICBwcmludCBlcnIKIGVsc2U6CiAgICAgcHJpbnQgInNob3VsZCByYWlzZSBUeXBlRXJyb3I6ICogYXJndW1lbnQgbXVzdCBiZSBhIHR1cGxlIgogCiB0cnk6CiAgICAgaCgqKmgpCi1leGNlcHQgVHlwZUVycm9yLCBlcnI6CitleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKICAgICBwcmludCBlcnIKIGVsc2U6CiAgICAgcHJpbnQgInNob3VsZCByYWlzZSBUeXBlRXJyb3I6ICoqIGFyZ3VtZW50IG11c3QgYmUgYSBkaWN0aW9uYXJ5IgogCiB0cnk6CiAgICAgZGlyKCoqaCkKLWV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKK2V4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgogICAgIHByaW50IGVycgogZWxzZToKICAgICBwcmludCAic2hvdWxkIHJhaXNlIFR5cGVFcnJvcjogKiogYXJndW1lbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkiCiAKIHRyeToKICAgICBOb25lKCoqaCkKLWV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKK2V4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgogICAgIHByaW50IGVycgogZWxzZToKICAgICBwcmludCAic2hvdWxkIHJhaXNlIFR5cGVFcnJvcjogKiogYXJndW1lbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkiCiAKIHRyeToKICAgICBkaXIoYj0xLCoqeydiJzoxfSkKLWV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKK2V4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgogICAgIHByaW50IGVycgogZWxzZToKICAgICBwcmludCAic2hvdWxkIHJhaXNlIFR5cGVFcnJvcjogZGlyKCkgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCAnYiciCkBAIC0yMjYsMTMgKzIyNiwxMyBAQAogcHJpbnQgRm9vLm1ldGhvZCh4LCAqKDEsIDIpKQogdHJ5OgogICAgIHByaW50IEZvby5tZXRob2QoKigxLCAyLCAzKSkKLWV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKK2V4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgogICAgIHBhc3MKIGVsc2U6CiAgICAgcHJpbnQgJ2V4cGVjdGVkIGEgVHlwZUVycm9yIGZvciB1bmJvdW5kIG1ldGhvZCBjYWxsJwogdHJ5OgogICAgIHByaW50IEZvby5tZXRob2QoMSwgKigyLCAzKSkKLWV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKK2V4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgogICAgIHBhc3MKIGVsc2U6CiAgICAgcHJpbnQgJ2V4cGVjdGVkIGEgVHlwZUVycm9yIGZvciB1bmJvdW5kIG1ldGhvZCBjYWxsJwpAQCAtMjc2LDQgKzI3Niw0IEBACiAgICAgICAgICAgICBmb3IgayBpbiBrd2FyZ3M6IGt3ZGljdFtrXSA9IGsgKyBrCiAgICAgICAgICAgICBwcmludCBmdW5jLmZ1bmNfbmFtZSwgYXJncywgc29ydGRpY3Qoa3dkaWN0KSwgJy0+JywKICAgICAgICAgICAgIHRyeTogZnVuYygqYXJncywgKiprd2RpY3QpCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6IHByaW50IGVycgorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6IHByaW50IGVycgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlLnB5CmluZGV4IDIzNDkyMGQuLjUyYzRhMDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgICAgICBiYWRfbW9kZSA9ICJxd2VydHkiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgYmFkX21vZGUpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIGlmIG1zZ1swXSAhPSAwOgogICAgICAgICAgICAgICAgIHMgPSBzdHIobXNnKQogICAgICAgICAgICAgICAgIGlmIHMuZmluZChURVNURk4pICE9IC0xIG9yIHMuZmluZChiYWRfbW9kZSkgPT0gLTE6CkBAIC0xODMsNyArMTgzLDcgQEAKICAgICAgICAgICAgICAgICBkID0gaW50KGYucmVhZCgpKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Vycm9yIHNldHRpbmcgYnVmZmVyIHNpemUgJWQ6ICVzJyAlIChzLCBzdHIobXNnKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkLCBzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CmluZGV4IDhiZjVkNmUuLmFjZTNiYzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CkBAIC0xOTksNyArMTk5LDcgQEAKIGRlZiB0ZXN0X2V4Yyhmb3JtYXRzdHIsIGFyZ3MsIGV4Y2VwdGlvbiwgZXhjbXNnKToKICAgICB0cnk6CiAgICAgICAgIHRlc3Rmb3JtYXQoZm9ybWF0c3RyLCBhcmdzKQotICAgIGV4Y2VwdCBleGNlcHRpb24sIGV4YzoKKyAgICBleGNlcHQgZXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICAgaWYgc3RyKGV4YykgPT0gZXhjbXNnOgogICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICBwcmludCAieWVzIgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkgYi9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weQppbmRleCA2NzM3OTlkLi42NzhiOWE4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weQpAQCAtMTIsMTcgKzEyLDE3IEBACiAKIHRyeToKICAgICBpbXBvcnQgX19oZWxsb19fCi1leGNlcHQgSW1wb3J0RXJyb3IsIHg6CitleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKICAgICByYWlzZSBUZXN0RmFpbGVkLCAiaW1wb3J0IF9faGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KQogCiB0cnk6CiAgICAgaW1wb3J0IF9fcGhlbGxvX18KLWV4Y2VwdCBJbXBvcnRFcnJvciwgeDoKK2V4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgogICAgIHJhaXNlIFRlc3RGYWlsZWQsICJpbXBvcnQgX19waGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KQogCiB0cnk6CiAgICAgaW1wb3J0IF9fcGhlbGxvX18uc3BhbQotZXhjZXB0IEltcG9ydEVycm9yLCB4OgorZXhjZXB0IEltcG9ydEVycm9yIGFzIHg6CiAgICAgcmFpc2UgVGVzdEZhaWxlZCwgImltcG9ydCBfX3BoZWxsb19fLnNwYW0gZmFpbGVkOiIgKyBzdHIoeCkKIAogaWYgc3lzLnBsYXRmb3JtICE9ICJtYWMiOiAgIyBPbiB0aGUgTWFjIHRoaXMgaW1wb3J0IGRvZXMgc3VjY2VlZC4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5IGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKaW5kZXggOWE1ZjgyOS4uMTQzNzQ4OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKQEAgLTI5LDcgKzI5LDcgQEAKICAgICBkZWYgdGVzdF9iYWRmdXR1cmUzKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmUzCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlMyIsICczJykpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQpAQCAtMzcsNyArMzcsNyBAQAogICAgIGRlZiB0ZXN0X2JhZGZ1dHVyZTQoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTQKLSAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmU0IiwgJzMnKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCkBAIC00NSw3ICs0NSw3IEBACiAgICAgZGVmIHRlc3RfYmFkZnV0dXJlNShzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBiYWRzeW50YXhfZnV0dXJlNQotICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm9yX2xvY2F0aW9uKG1zZyksICgiYmFkc3ludGF4X2Z1dHVyZTUiLCAnNCcpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKQEAgLTUzLDcgKzUzLDcgQEAKICAgICBkZWYgdGVzdF9iYWRmdXR1cmU2KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmU2Ci0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlNiIsICczJykpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQpAQCAtNjEsNyArNjEsNyBAQAogICAgIGRlZiB0ZXN0X2JhZGZ1dHVyZTcoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTcKLSAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmU3IiwgJzMnKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCkBAIC02OSw3ICs2OSw3IEBACiAgICAgZGVmIHRlc3RfYmFkZnV0dXJlOChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBiYWRzeW50YXhfZnV0dXJlOAotICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm9yX2xvY2F0aW9uKG1zZyksICgiYmFkc3ludGF4X2Z1dHVyZTgiLCAnMycpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKQEAgLTc3LDcgKzc3LDcgQEAKICAgICBkZWYgdGVzdF9iYWRmdXR1cmU5KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmU5Ci0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlOSIsICczJykpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CmluZGV4IDJmZmQyZjguLjMwZGYwMzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKQEAgLTE1NTQsNyArMTU1NCw3IEBACiAuLi4gICAgIHdoaWxlIFRydWU6CiAuLi4gICAgICAgICB0cnk6CiAuLi4gICAgICAgICAgICAgcHJpbnQgKHlpZWxkKQotLi4uICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsdjoKKy4uLiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIHY6CiAuLi4gICAgICAgICAgICAgcHJpbnQgImNhdWdodCBWYWx1ZUVycm9yICglcykiICUgKHYpLAogPj4+IGltcG9ydCBzeXMKID4+PiBnID0gZigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkgYi9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKaW5kZXggMzRjNTUwZS4uMGQzNmE2MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQpAQCAtNTU0LDcgKzU1NCw3IEBACiAgICAgICAgIGFzc2VydCAxLCBsYW1iZGEgeDp4KzEKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYXNzZXJ0IDAsICJtc2ciCi0gICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciwgZToKKyAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlLmFyZ3NbMF0sICJtc2ciKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgpAQCAtNjEyLDcgKzYxMiw3IEBACiAgICAgZGVmIHRlc3RUcnkoc2VsZik6CiAgICAgICAgICMjIyB0cnlfc3RtdDogJ3RyeScgJzonIHN1aXRlIChleGNlcHRfY2xhdXNlICc6JyBzdWl0ZSkrIFsnZWxzZScgJzonIHN1aXRlXQogICAgICAgICAjIyMgICAgICAgICB8ICd0cnknICc6JyBzdWl0ZSAnZmluYWxseScgJzonIHN1aXRlCi0gICAgICAgICMjIyBleGNlcHRfY2xhdXNlOiAnZXhjZXB0JyBbZXhwciBbJywnIGV4cHJdXQorICAgICAgICAjIyMgZXhjZXB0X2NsYXVzZTogJ2V4Y2VwdCcgW2V4cHIgWydhcycgZXhwcl1dCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIDEvMAogICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CkBAIC02MjEsMTQgKzYyMSwxNCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6IDEvMAogICAgICAgICBleGNlcHQgRU9GRXJyb3I6IHBhc3MKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgbXNnOiBwYXNzCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIG1zZzogcGFzcworICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIG1zZzogcGFzcworICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIG1zZzogcGFzcwogICAgICAgICBleGNlcHQ6IHBhc3MKICAgICAgICAgZWxzZTogcGFzcwogICAgICAgICB0cnk6IDEvMAogICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBUeXBlRXJyb3IsIFplcm9EaXZpc2lvbkVycm9yKTogcGFzcwogICAgICAgICB0cnk6IDEvMAotICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBUeXBlRXJyb3IsIFplcm9EaXZpc2lvbkVycm9yKSwgbXNnOiBwYXNzCisgICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIFR5cGVFcnJvciwgWmVyb0RpdmlzaW9uRXJyb3IpIGFzIG1zZzogcGFzcwogICAgICAgICB0cnk6IHBhc3MKICAgICAgICAgZmluYWxseTogcGFzcwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CmluZGV4IDU4ZGU5NDQuLmYzZDFkNDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBmcm9tICVzIGZhaWxlZDogJXMiICUgKGV4dCwgZXJyKSkKIAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5hLCBhLApAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcmVsb2FkKG1vZCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBmcm9tIC5weWMvLnB5byBmYWlsZWQ6ICVzIiAlIGVycikKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9saW51eGF1ZGlvZGV2LnB5IGIvTGliL3Rlc3QvdGVzdF9saW51eGF1ZGlvZGV2LnB5CmluZGV4IGZlOTAyYjUuLjA1ZTQwNDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGludXhhdWRpb2Rldi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xpbnV4YXVkaW9kZXYucHkKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgYSA9IGxpbnV4YXVkaW9kZXYub3BlbigndycpCi0gICAgZXhjZXB0IGxpbnV4YXVkaW9kZXYuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgbGludXhhdWRpb2Rldi5lcnJvciBhcyBtc2c6CiAgICAgICAgIGlmIG1zZ1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsIGVycm5vLkVOT0RFViwgZXJybm8uRUJVU1kpOgogICAgICAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQsIG1zZwogICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCBtc2cKQEAgLTYyLDI3ICs2MiwyNyBAQAogICAgIG5jaGFubmVscyA9IDEKICAgICB0cnk6CiAgICAgICAgIGEuc2V0cGFyYW1ldGVycygtMSwgc2l6ZSwgbmNoYW5uZWxzLCBmbXQpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50IG1zZwogICAgIHRyeToKICAgICAgICAgYS5zZXRwYXJhbWV0ZXJzKHJhdGUsIC0yLCBuY2hhbm5lbHMsIGZtdCkKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgbXNnOgorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgbXNnCiAgICAgdHJ5OgogICAgICAgICBhLnNldHBhcmFtZXRlcnMocmF0ZSwgc2l6ZSwgMywgZm10KQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CisgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludCBtc2cKICAgICB0cnk6CiAgICAgICAgIGEuc2V0cGFyYW1ldGVycyhyYXRlLCBzaXplLCBuY2hhbm5lbHMsIDE3NykKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgbXNnOgorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgbXNnCiAgICAgdHJ5OgogICAgICAgICBhLnNldHBhcmFtZXRlcnMocmF0ZSwgc2l6ZSwgbmNoYW5uZWxzLCBsaW51eGF1ZGlvZGV2LkFGTVRfVTE2X0xFKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CisgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludCBtc2cKICAgICB0cnk6CiAgICAgICAgIGEuc2V0cGFyYW1ldGVycyhyYXRlLCAxNiwgbmNoYW5uZWxzLCBmbXQpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50IG1zZwogCiBkZWYgdGVzdCgpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9uaXMucHkgYi9MaWIvdGVzdC90ZXN0X25pcy5weQppbmRleCA1OTA4NjhmLi41NWRkMzJjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25pcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X25pcy5weQpAQCAtNiw3ICs2LDcgQEAKICAgICBkZWYgdGVzdF9tYXBzKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtYXBzID0gbmlzLm1hcHMoKQotICAgICAgICBleGNlcHQgbmlzLmVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBuaXMuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgIyBOSVMgaXMgcHJvYmFibHkgbm90IGFjdGl2ZSwgc28gdGhpcyB0ZXN0IGlzbid0IHVzZWZ1bAogICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIihmYWlsaW5nIGJlY2F1c2Ugb2YgdmVyYm9zZSBtb2RlKSAlcyIgJSBtc2cpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkgYi9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkKaW5kZXggMWEyZjVkNi4uMGVlNTFhOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGNvZGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weQpAQCAtNDcsMTIgKzQ3LDEyIEBACiAgICAgICAgIGIgPSBCQ2xhc3MoKQogCiAgICAgICAgIHRyeTogcmFpc2UgQUNsYXNzLCBiCi0gICAgICAgIGV4Y2VwdCBCQ2xhc3MsIHY6CisgICAgICAgIGV4Y2VwdCBCQ2xhc3MgYXMgdjoKICAgICAgICAgICAgIGlmIHYgIT0gYjogc2VsZi5mYWlsKCJ2IT1iIikKICAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQogCiAgICAgICAgIHRyeTogcmFpc2UgYgotICAgICAgICBleGNlcHQgQUNsYXNzLCB2OgorICAgICAgICBleGNlcHQgQUNsYXNzIGFzIHY6CiAgICAgICAgICAgICBpZiB2ICE9IGI6IHNlbGYuZmFpbCgidiE9YiBBQ2xhc3MiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAjI2Vsc2U6IHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIikKIAogICAgICAgICB0cnk6ICByYWlzZSBEQ2xhc3MsIGEKLSAgICAgICAgZXhjZXB0IERDbGFzcywgdjoKKyAgICAgICAgZXhjZXB0IERDbGFzcyBhcyB2OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodiwgRENsYXNzKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CmluZGV4IDQ1ODJmYTcuLjFjNDk3MGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQpAQCAtMTE0LDcgKzExNCw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBleHBlY3RlZF9leGNlcHRpb24sIGVycjoKKyAgICAgICAgZXhjZXB0IGV4cGVjdGVkX2V4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgICAgICBhY3R1YWxfbWVzc2FnZSA9IHN0cihlcnIpCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkX21lc3NhZ2UsIHJldHlwZSk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV4cGVjdGVkX21lc3NhZ2Uuc2VhcmNoKGFjdHVhbF9tZXNzYWdlKSwKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncyhjbWRsaW5lX2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBJbnRlcmNlcHRlZEVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBJbnRlcmNlcHRlZEVycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmVycm9yX21lc3NhZ2UsIGV4cGVjdGVkX291dHB1dCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoImV4cGVjdGVkIHBhcnNlIGZhaWx1cmUiKQpAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZG91dC5nZXR2YWx1ZSgpCiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CiAKLSAgICAgICAgZXhjZXB0IEludGVyY2VwdGVkRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IEludGVyY2VwdGVkRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRfKAogICAgICAgICAgICAgICAgIHR5cGUob3V0cHV0KSBpcyB0eXBlcy5TdHJpbmdUeXBlLAogICAgICAgICAgICAgICAgICJleHBlY3RlZCBvdXRwdXQgdG8gYmUgYW4gb3JkaW5hcnkgc3RyaW5nLCBub3QgJXIiCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gaW50KHZhbHVlWzotMV0pICogX3RpbWVfdW5pdHNbdmFsdWVbLTFdXQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBJbmRleEVycm9yOgorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIEluZGV4RXJyb3I6CiAgICAgICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoCiAgICAgICAgICAgICAnb3B0aW9uICVzOiBpbnZhbGlkIGR1cmF0aW9uOiAlcicgJSAob3B0LCB2YWx1ZSkpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkgYi9MaWIvdGVzdC90ZXN0X29zLnB5CmluZGV4IDFjODdkMDYuLjkzZTUzMGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcy5weQpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgIGltcG9ydCBzdGF0dmZzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IG9zLnN0YXR2ZnMoc2VsZi5mbmFtZSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIE9uIEF0aGVPUywgZ2xpYmMgYWx3YXlzIHJldHVybnMgRU5PU1lTCiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weSBiL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKaW5kZXggNTg2OGVhNy4uMDM3N2U5YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQorKysgYi9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CkBAIC00OCw3ICs0OCw3IEBACiBkZWYgcGxheV9zb3VuZF9maWxlKGRhdGEsIHJhdGUsIHNzaXplLCBuY2hhbm5lbHMpOgogICAgIHRyeToKICAgICAgICAgZHNwID0gb3NzYXVkaW9kZXYub3BlbigndycpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIGlmIG1zZ1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsIGVycm5vLkVOT0RFViwgZXJybm8uRUJVU1kpOgogICAgICAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQsIG1zZwogICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCBtc2cKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBkc3Auc2V0cGFyYW1ldGVycyhmbXQsIGNoYW5uZWxzLCByYXRlLCBUcnVlKQogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNldHBhcmFtZXRlcnM6IGV4cGVjdGVkIE9TU0F1ZGlvRXJyb3IiKQotICAgICAgICBleGNlcHQgb3NzYXVkaW9kZXYuT1NTQXVkaW9FcnJvciwgZXJyOgorICAgICAgICBleGNlcHQgb3NzYXVkaW9kZXYuT1NTQXVkaW9FcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCAic2V0cGFyYW1ldGVyczogZ290IE9TU0F1ZGlvRXJyb3IgYXMgZXhwZWN0ZWQiCiAKIGRlZiB0ZXN0KCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CmluZGV4IDBiZjEyMTguLjM2YmM0ZTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CkBAIC0xNSw3ICsxNSw3IEBACiAgICAgICAgIHQgPSBzdDEudG90dXBsZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0MiA9IHBhcnNlci5zZXF1ZW5jZTJzdCh0KQotICAgICAgICBleGNlcHQgcGFyc2VyLlBhcnNlckVycm9yLCB3aHk6CisgICAgICAgIGV4Y2VwdCBwYXJzZXIuUGFyc2VyRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjb3VsZCBub3Qgcm91bmR0cmlwICVyOiAlcyIgJSAocywgd2h5KSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0LCBzdDIudG90dXBsZSgpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQppbmRleCBmMzA3MDg5Li5mZjcxYmYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgZm4oZmlsZW5hbWUpCiAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCgiRXhwZWN0ZWQgdG8gZmFpbCBjYWxsaW5nICclcyglciknIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChmbi5fX25hbWVfXywgZmlsZW5hbWUpKQotICAgICAgICBleGNlcHQgZXhwZWN0ZWRfZXhjZXB0aW9uLCBkZXRhaWxzOgorICAgICAgICBleGNlcHQgZXhwZWN0ZWRfZXhjZXB0aW9uIGFzIGRldGFpbHM6CiAgICAgICAgICAgICBpZiBjaGVja19mbl9pbl9leGNlcHRpb24gYW5kIGRldGFpbHMuZmlsZW5hbWUgIT0gZmlsZW5hbWU6CiAgICAgICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQoIkZ1bmN0aW9uICclcyglcikgZmFpbGVkIHdpdGggIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBmaWxlbmFtZSBpbiB0aGUgZXhjZXB0aW9uOiAlciIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weSBiL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weQppbmRleCAwNjk4ODE4Li43MzA5MmMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5CkBAIC0xNzcsNyArMTc3LDcgQEAKIHByaW50ICJMZWdhbCB2YWx1ZXMgdGVzdGVkIG8uay4iCiB0cnk6CiAgICAgZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9NDIpCi1leGNlcHQgVHlwZUVycm9yLCBlOgorZXhjZXB0IFR5cGVFcnJvciBhcyBlOgogICAgIHByaW50ICJDYXVnaHQgZXhwZWN0ZWQgVHlwZUVycm9yOiIKICAgICBwcmludCBlCiBlbHNlOgpAQCAtMTg1LDcgKzE4NSw3IEBACiAKIHRyeToKICAgICBleHBhdC5QYXJzZXJDcmVhdGUobmFtZXNwYWNlX3NlcGFyYXRvcj0ndG9vIGxvbmcnKQotZXhjZXB0IFZhbHVlRXJyb3IsIGU6CitleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgIHByaW50ICJDYXVnaHQgZXhwZWN0ZWQgVmFsdWVFcnJvcjoiCiAgICAgcHJpbnQgZQogZWxzZToKQEAgLTMyMSw3ICszMjEsNyBAQAogCiB0cnk6CiAgICAgcGFyc2VyLlBhcnNlKCI8YT48Yj48Yy8+PC9iPjwvYT4iLCAxKQotZXhjZXB0IFJ1bnRpbWVFcnJvciwgZToKK2V4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZToKICAgICBpZiBlLmFyZ3NbMF0gIT0gImEiOgogICAgICAgICBwcmludCAiRXhwZWN0ZWQgUnVudGltZUVycm9yIGZvciBlbGVtZW50ICdhJzsgZm91bmQgJXIiICUgZS5hcmdzWzBdCiBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmUucHkKaW5kZXggMDJmNGRjYS4uZGFmZDgyZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CkBAIC02MzMsNyArNjMzLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmouc2VhcmNoKHMpCi0gICAgICAgICAgICBleGNlcHQgcmUuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCByZS5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcHJpbnQgJz09PSBVbmV4cGVjdGVkIGV4Y2VwdGlvbicsIHQsIHJlcHIobXNnKQogICAgICAgICAgICAgaWYgb3V0Y29tZSA9PSBTWU5UQVhfRVJST1I6CiAgICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gYSBzeW50YXggZXJyb3I7IGZvcmdldCBpdC4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CmluZGV4IDg4ZTk5MDAuLmEzN2VlN2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ydW5weS5weQpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgICBlbnRyeSA9IHBhcnRzWzBdCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2VudHJ5XQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yLCBleDoKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBleDoKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCBleCAjIFBlcnNpc3Qgd2l0aCBjbGVhbmluZyB1cAogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBSZW1vdmVkIHN5cy5tb2R1bGVzIGVudHJpZXMiCiAgICAgICAgIGRlbCBzeXMucGF0aFswXQpAQCAtMTI2LDE4ICsxMjYsMTggQEAKICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZXg6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXg6CiAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IGV4ICMgUGVyc2lzdCB3aXRoIGNsZWFuaW5nIHVwCiAgICAgICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgogICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZXg6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXg6CiAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IGV4ICMgUGVyc2lzdCB3aXRoIGNsZWFuaW5nIHVwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJtZGlyKHRvcCkKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIFJlbW92ZWQgcGFja2FnZSB0cmVlIgotICAgICAgICBleGNlcHQgT1NFcnJvciwgZXg6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4OgogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgZXggIyBQZXJzaXN0IHdpdGggY2xlYW5pbmcgdXAKIAogICAgIGRlZiBfY2hlY2tfbW9kdWxlKHNlbGYsIGRlcHRoKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2F4LnB5IGIvTGliL3Rlc3QvdGVzdF9zYXgucHkKaW5kZXggODNmZmNmMS4uZDM5MzljMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zYXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zYXgucHkKQEAgLTQ3OSw3ICs0NzksNyBAQAogICAgIHNvdXJjZS5zZXRTeXN0ZW1JZChuYW1lKQogICAgIHRyeToKICAgICAgICAgcGFyc2VyLnBhcnNlKHNvdXJjZSkKLSAgICBleGNlcHQgU0FYRXhjZXB0aW9uLCBlOgorICAgIGV4Y2VwdCBTQVhFeGNlcHRpb24gYXMgZToKICAgICAgICAgcmV0dXJuIGUuZ2V0U3lzdGVtSWQoKSA9PSBuYW1lCiAKIGRlZiB0ZXN0X2V4cGF0X2luY29tcGxldGUoKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5IGIvTGliL3Rlc3QvdGVzdF9zZXQucHkKaW5kZXggOWJkMGQ0My4uMGQwOGI3OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZXQucHkKQEAgLTMzMiw3ICszMzIsNyBAQAogICAgICAgICBmb3IgdjEgaW4gWydRJywgKDEsKV06CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zLnJlbW92ZSh2MSkKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHYyID0gZS5hcmdzWzBdCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2MSwgdjIpCiAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQppbmRleCBkZjM3ZjczLi5lMTQxMjU3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJ0ZXN0X2Z1bmMgbXVzdCBiZSBhIGNhbGxhYmxlIGZ1bmN0aW9uIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXN0X2Z1bmMoKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBzdHJlcnJvcjoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBzdHJlcnJvcjoKICAgICAgICAgICAgIHNlbGYucXVldWUucHV0KHN0cmVycm9yKQogICAgICAgICBzZWxmLmNsaWVudFRlYXJEb3duKCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXRfc3NsLnB5IGIvTGliL3Rlc3QvdGVzdF9zb2NrZXRfc3NsLnB5CmluZGV4IDNjOWM5ZjAuLjVkMzA4YzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0X3NzbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldF9zc2wucHkKQEAgLTU4LDcgKzU4LDcgQEAKICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CiAgICAgICAgIGVycm9yX21zZygndGltZWQgb3V0JykKICAgICAgICAgcmV0dXJuCi0gICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZXhjOiAgIyBJbiBjYXNlIGNvbm5lY3Rpb24gaXMgcmVmdXNlZC4KKyAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGV4YzogICMgSW4gY2FzZSBjb25uZWN0aW9uIGlzIHJlZnVzZWQuCiAgICAgICAgIGlmIGV4Yy5hcmdzWzBdID09IGVycm5vLkVDT05OUkVGVVNFRDoKICAgICAgICAgICAgIGVycm9yX21zZygnd2FzIHJlZnVzZWQnKQogICAgICAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CmluZGV4IGU0Y2JiMmIuLjIwMmYyZGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CkBAIC0xNTUsNyArMTU1LDggQEAKICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9hZGRyZXNzID0gaG9zdCwgcG9ydAogICAgICAgICAgICAgICAgIFRDUFNlcnZlci5zZXJ2ZXJfYmluZChzZWxmKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCAoZXJyLCBtc2cpOgorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIChlcnIsIG1zZykgPSBlCiAgICAgICAgICAgICAgICAgaWYgZXJyICE9IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuX19zdGRlcnJfXywgXApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKaW5kZXggZTlkMzgyNi4uMDBmYTIyNyAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICBmb3IgZSBpbiBleHBlY3RhdGlvbnM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IHRpbWUuc3RyZnRpbWUoZVswXSwgbm93KQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyb3I6CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycm9yOgogICAgICAgICAgICAgcHJpbnQgIlN0YW5kYXJkICclcycgZm9ybWF0IGdhdmUgZXJyb3I6IiAlIGVbMF0sIGVycm9yCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiByZS5tYXRjaChlc2NhcGVzdHIoZVsxXSwgYW1wbSksIHJlc3VsdCk6IGNvbnRpbnVlCkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICBmb3IgZSBpbiBub25zdGFuZGFyZF9leHBlY3RhdGlvbnM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IHRpbWUuc3RyZnRpbWUoZVswXSwgbm93KQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgcmVzdWx0OgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyByZXN1bHQ6CiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50ICJFcnJvciBmb3Igbm9uc3RhbmRhcmQgJyVzJyBmb3JtYXQgKCVzKTogJXMiICUgXAogICAgICAgICAgICAgICAgICAgICAgIChlWzBdLCBlWzJdLCBzdHIocmVzdWx0KSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKaW5kZXggZmRkNDMxZC4uNmQ1ZThlNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAgICAgeWllbGQgNCArICIiCiAgICAgICAgICAgICBzZWxmLmZpeHR5cGUoJyAnKS5qb2luKGYoKSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgJysnIG5vdCBpbiBzdHIoZSk6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdqb2luKCkgYXRlIGV4Y2VwdGlvbiBtZXNzYWdlJykKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5CmluZGV4IGJhNjU2NDkuLmRmOTRmN2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weQpAQCAtMjA2LDcgKzIwNiw3IEBACiAgICAgICAgICAgICAgICAgX3N0cnB0aW1lLnN0cnB0aW1lKCIyMDA1IiwgYmFkX2Zvcm1hdCkKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiclcycgcmFpc2VkICVzLCBub3QgVmFsdWVFcnJvciIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiYWRfZm9ybWF0LCBlcnIuX19jbGFzc19fLl9fbmFtZV9fKSkKICAgICAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkgYi9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKaW5kZXggNjRmOGQ0MC4uZmNjMGY0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0pCi0gICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUucmV0dXJuY29kZSwgNDcpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIENhbGxlZFByb2Nlc3NFcnJvciIpCkBAIC00NzUsNyArNDc1LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD0iL3RoaXMvcGF0aC9kb2VzL25vdC9leGlzdCIpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgIyBUaGUgYXR0cmlidXRlIGNoaWxkX3RyYWNlYmFjayBzaG91bGQgY29udGFpbiAib3MuY2hkaXIiCiAgICAgICAgICAgICAgICAgIyBzb21ld2hlcmUuCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLmNoaWxkX3RyYWNlYmFjay5maW5kKCJvcy5jaGRpciIpLCAtMSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VuYXVkaW9kZXYucHkgYi9MaWIvdGVzdC90ZXN0X3N1bmF1ZGlvZGV2LnB5CmluZGV4IGYyMDNkOWEuLjA0MjdkYjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuYXVkaW9kZXYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdW5hdWRpb2Rldi5weQpAQCAtMTYsNyArMTYsNyBAQAogICAgIGZwLmNsb3NlKCkKICAgICB0cnk6CiAgICAgICAgIGEgPSBzdW5hdWRpb2Rldi5vcGVuKCd3JykKLSAgICBleGNlcHQgc3VuYXVkaW9kZXYuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgc3VuYXVkaW9kZXYuZXJyb3IgYXMgbXNnOgogICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCBtc2cKICAgICBlbHNlOgogICAgICAgICBhLndyaXRlKGRhdGEpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKaW5kZXggMmMxOTY5OC4uNjExNTgwMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQpAQCAtMTAyLDcgKzEwMiw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2suYmluZCgoaG9zdCwgcG9ydCkpCiAgICAgICAgICAgICByZXR1cm4gcG9ydAotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCAoZXJyLCBtc2cpOgorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICAoZXJyLCBtc2cpID0gZQogICAgICAgICAgICAgaWYgZXJyICE9IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIHByaW50ID4+c3lzLl9fc3RkZXJyX18sIFwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5IGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKaW5kZXggYTBlYWFjNi4uMmM3MzE1ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKQEAgLTM4Nyw3ICszODcsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29tcGlsZShjb2RlLCBmaWxlbmFtZSwgbW9kZSkKLSAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBpZiBzdWJjbGFzcyBhbmQgbm90IGlzaW5zdGFuY2UoZXJyLCBzdWJjbGFzcyk6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTeW50YXhFcnJvciBpcyBub3QgYSAlcyIgJSBzdWJjbGFzcy5fX25hbWVfXykKICAgICAgICAgICAgIG1vID0gcmUuc2VhcmNoKGVycnRleHQsIHN0cihlcnIpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQppbmRleCBmZGViNTAwLi44OTdjNmIwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGVoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKDQyKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXhjOgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleGM6CiAgICAgICAgICAgICBlaCgqc3lzLmV4Y19pbmZvKCkpCiAKICAgICAgICAgc3lzLnN0ZGVyciA9IHNhdmVzdGRlcnIKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgZGVmIGNsZWFyKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgNDIKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBleGM6CisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleGM6CiAgICAgICAgICAgICAgICAgY2xlYXJfY2hlY2soZXhjKQogCiAgICAgICAgICMgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCBjaGVjayB0aGF0IGl0IGNhbiBiZSBjbGVhcmVkCkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICMgdW5hZmZlY3RlZCBieSBjYWxsaW5nIGV4Y19jbGVhciBpbiBhIG5lc3RlZCBmcmFtZS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgMTMKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGV4YzoKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgdHlwMSwgdmFsdWUxLCB0cmFjZWJhY2sxID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIGNsZWFyKCkKICAgICAgICAgICAgIHR5cDIsIHZhbHVlMiwgdHJhY2ViYWNrMiA9IHN5cy5leGNfaW5mbygpCkBAIC0xMDQsMTYgKzEwNCwxMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHZhbHVlMSBpcyB2YWx1ZTIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydF8odHJhY2ViYWNrMSBpcyB0cmFjZWJhY2syKQogCi0gICAgICAgICMgQ2hlY2sgdGhhdCBhbiBleGNlcHRpb24gY2FuIGJlIGNsZWFyZWQgb3V0c2lkZSBvZiBhbiBleGNlcHQgYmxvY2sKLSAgICAgICAgY2xlYXJfY2hlY2soZXhjKQotCiAgICAgZGVmIHRlc3RfZXhpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuZXhpdCwgNDIsIDQyKQogCiAgICAgICAgICMgY2FsbCB3aXRob3V0IGFyZ3VtZW50CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN5cy5leGl0KDApCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBleGM6CisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGV4YzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4Yy5jb2RlLCAwKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiIpCkBAIC0xMjQsNyArMTIxLDcgQEAKICAgICAgICAgIyBlbnRyeSB3aWxsIGJlIHVucGFja2VkCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN5cy5leGl0KDQyKQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleGM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleGMuY29kZSwgNDIpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKQEAgLTEzNCw3ICsxMzEsNyBAQAogICAgICAgICAjIGNhbGwgd2l0aCBpbnRlZ2VyIGFyZ3VtZW50CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN5cy5leGl0KCg0MiwpKQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleGM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleGMuY29kZSwgNDIpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKQEAgLTE0NCw3ICsxNDEsNyBAQAogICAgICAgICAjIGNhbGwgd2l0aCBzdHJpbmcgYXJndW1lbnQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3lzLmV4aXQoImV4aXQiKQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleGM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleGMuY29kZSwgImV4aXQiKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiIpCkBAIC0xNTQsNyArMTUxLDcgQEAKICAgICAgICAgIyBjYWxsIHdpdGggdHVwbGUgYXJndW1lbnQgd2l0aCB0d28gZW50cmllcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzeXMuZXhpdCgoMTcsIDIzKSkKLSAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQsIGV4YzoKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXhjOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhjLmNvZGUsICgxNywgMjMpKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKaW5kZXggMmIzOTcxNS4uOWFlOTEzZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQpAQCAtNTQ1LDcgKzU0NSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgRXh0cmFjdCAxLUxOS1RZUEUgd2hpY2ggaXMgYSBoYXJkbGluayB0byAwLVJFR1RZUEUKICAgICAgICAgICAgIHNlbGYudGFyLmV4dHJhY3QoIjEtTE5LVFlQRSIsIGRpcm5hbWUoKSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaGFyZGxpbmsgbm90IGV4dHJhY3RlZCBwcm9wZXJseSIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RjbC5weSBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CmluZGV4IGZhMTcwZWYuLjQyNTVkOGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgZmlsZW5hbWUgPSAiZG9lc25vdGV4aXN0cyIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLmV2YWxmaWxlLGZpbGVuYW1lKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZS5weQppbmRleCAwOGFlYzhlLi40MmQxYTRhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkKQEAgLTk3LDcgKzk3LDcgQEAKIGRlZiB0ZXN0X3JhaXNlKCk6CiAgICAgdHJ5OgogICAgICAgICByYWlzZXMoKQotICAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4YzoKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICAgeCA9IDEKIAogdGVzdF9yYWlzZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCkBAIC0xMjcsNyArMTI3LDcgQEAKIGRlZiBzZXR0cmFjZV9hbmRfcmFpc2UodHJhY2VmdW5jKToKICAgICB0cnk6CiAgICAgICAgIF9zZXR0cmFjZV9hbmRfcmFpc2UodHJhY2VmdW5jKQotICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIGV4YzoKKyAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGV4YzoKICAgICAgICAgcGFzcwogCiBzZXR0cmFjZV9hbmRfcmFpc2UuZXZlbnRzID0gWygyLCAnZXhjZXB0aW9uJyksCkBAIC00MzIsNyArNDMyLDcgQEAKICAgICB0cnk6CiAgICAgICAgIG91dHB1dC5hcHBlbmQoMikKICAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgIG91dHB1dC5hcHBlbmQoJ2FmdGVyJyBpbiBzdHIoZSkpCiAKIG5vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcy5qdW1wID0gKDMsIDYpCkBAIC00NDIsNyArNDQyLDcgQEAKICAgICB0cnk6CiAgICAgICAgIG91dHB1dC5hcHBlbmQoMikKICAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgIG91dHB1dC5hcHBlbmQoJ2JlZm9yZScgaW4gc3RyKGUpKQogCiBub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzLmp1bXAgPSAoMywgLTEpCkBAIC00NzIsNyArNDcyLDcgQEAKIGRlZiBub19qdW1wX3RvX2V4Y2VwdF8zKG91dHB1dCk6CiAgICAgdHJ5OgogICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCiAKIG5vX2p1bXBfdG9fZXhjZXB0XzMuanVtcCA9ICgyLCAzKQpAQCAtNDgxLDcgKzQ4MSw3IEBACiBkZWYgbm9fanVtcF90b19leGNlcHRfNChvdXRwdXQpOgogICAgIHRyeToKICAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQotICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgUnVudGltZUVycm9yKSwgZToKKyAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFJ1bnRpbWVFcnJvcikgYXMgZToKICAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCiAKIG5vX2p1bXBfdG9fZXhjZXB0XzQuanVtcCA9ICgyLCAzKQpAQCAtNDkyLDcgKzQ5Miw3IEBACiAgICAgICAgIG91dHB1dC5hcHBlbmQoMikKICAgICAgICAgZm9yIGkgaW4gMSwgMjoKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNCkKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICBvdXRwdXQuYXBwZW5kKCdpbnRvJyBpbiBzdHIoZSkpCiAKIG5vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jay5qdW1wID0gKDIsIDQpCkBAIC01MDMsNyArNTAzLDcgQEAKICAgICAgICAgZm9yIGkgaW4gMSwgMjoKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoMykKICAgICAgICAgb3V0cHV0LmFwcGVuZCg0KQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgIG91dHB1dC5hcHBlbmQoJ2ludG8nIGluIHN0cihlKSkKIAogbm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jay5qdW1wID0gKDQsIDMpCkBAIC01MTYsNyArNTE2LDcgQEAKICAgICAgICAgICAgIHggPSAxCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDYpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgb3V0cHV0LmFwcGVuZCgnZmluYWxseScgaW4gc3RyKGUpKQogCiBub19qdW1wX2ludG9fZmluYWxseV9ibG9jay5qdW1wID0gKDQsIDYpCkBAIC01MjksNyArNTI5LDcgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNSkKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNikKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICBvdXRwdXQuYXBwZW5kKCdmaW5hbGx5JyBpbiBzdHIoZSkpCiAKIG5vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2suanVtcCA9ICg1LCAxKQpAQCAtNTM5LDcgKzUzOSw3IEBACiBkZWYgbm9fanVtcF90b19ub25faW50ZWdlcnMob3V0cHV0KToKICAgICB0cnk6CiAgICAgICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICBvdXRwdXQuYXBwZW5kKCdpbnRlZ2VyJyBpbiBzdHIoZSkpCiAKIG5vX2p1bXBfdG9fbm9uX2ludGVnZXJzLmp1bXAgPSAoMiwgIlNwYW0iKQpAQCAtNTUxLDcgKzU1MSw3IEBACiAgICAgdHJ5OgogICAgICAgICBwcmV2aW91c19mcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2sKICAgICAgICAgcHJldmlvdXNfZnJhbWUuZl9saW5lbm8gPSBwcmV2aW91c19mcmFtZS5mX2xpbmVubwotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICMgVGhpcyBpcyB0aGUgZXhjZXB0aW9uIHdlIHdhbnRlZDsgbWFrZSBzdXJlIHRoZSBlcnJvciBtZXNzYWdlCiAgICAgICAgICMgdGFsa3MgYWJvdXQgdHJhY2UgZnVuY3Rpb25zLgogICAgICAgICBpZiAndHJhY2UnIG5vdCBpbiBzdHIoZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CmluZGV4IDQ4YzVkMTkuLjVjOGE0ZTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CkBAIC0xMiw3ICsxMiw3IEBACiAgICAgZGVmIGdldF9leGNlcHRpb25fZm9ybWF0KHNlbGYsIGZ1bmMsIGV4Yyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ1bmMoKQotICAgICAgICBleGNlcHQgZXhjLCB2YWx1ZToKKyAgICAgICAgZXhjZXB0IGV4YyBhcyB2YWx1ZToKICAgICAgICAgICAgIHJldHVybiB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV4YywgdmFsdWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiY2FsbCBkaWQgbm90IHJhaXNlIGV4Y2VwdGlvbiIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQppbmRleCAwMGNmMjAyLi41MGFjZmY4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CkBAIC0yMzYsNyArMjM2LDcgQEAKICAgICAgICAgICAgIGRlYnVnKHVybCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmID0gdXJsbGliMi51cmxvcGVuKHVybCwgcmVxKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBzb2NrZXQuZXJyb3IsIE9TRXJyb3IpLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIHNvY2tldC5lcnJvciwgT1NFcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgICAgIGRlYnVnKGVycikKICAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF9lcnI6CiAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiRGlkbid0IGdldCBleHBlY3RlZCBlcnJvcihzKSAlcyBmb3IgJXMgJXMsIGdvdCAlcyIgJQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKaW5kZXggNDQ3ZjQzNC4uMjVhYTMwNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgZSA9IEUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlWzQyXQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJncywgKDQyLCkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWxfKCJlWzQyXSBkaWRuJ3QgcmFpc2UgUnVudGltZUVycm9yIikKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICBmID0gRigpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZbNDJdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXJyOgorICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJncywgKDQyLCkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWxfKCJmWzQyXSBkaWRuJ3QgcmFpc2UgS2V5RXJyb3IiKQpAQCAtMTg5LDcgKzE4OSw3IEBACiAgICAgICAgIGcgPSBHKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZ1s0Ml0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoNDIsKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbF8oImdbNDJdIGRpZG4ndCByYWlzZSBLZXlFcnJvciIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3V1LnB5IGIvTGliL3Rlc3QvdGVzdF91dS5weQppbmRleCAxNmE1NWU0Li43MTI4MTQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3V1LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXUucHkKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdXUuZGVjb2RlKGlucCwgb3V0KQogICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gdGhyb3duIikKLSAgICAgICAgZXhjZXB0IHV1LkVycm9yLCBlOgorICAgICAgICBleGNlcHQgdXUuRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiVHJ1bmNhdGVkIGlucHV0IGZpbGUiKQogCiAgICAgZGVmIHRlc3RfbWlzc2luZ2JlZ2luKHNlbGYpOgpAQCAtNTksNyArNTksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB1dS5kZWNvZGUoaW5wLCBvdXQpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiB0aHJvd24iKQotICAgICAgICBleGNlcHQgdXUuRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCB1dS5FcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyB2YWxpZCBiZWdpbiBsaW5lIGZvdW5kIGluIGlucHV0IGZpbGUiKQogCiBjbGFzcyBVVVN0ZElPVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CmluZGV4IDU4MzBmZDYuLjgxYmQ3NjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CkBAIC0xNDIsNyArMTQyLDcgQEAKIGlmIHJlbW90ZV9uYW1lIGlzIG5vdCBOb25lOgogICAgIHRyeToKICAgICAgICAgcmVtb3RlX2tleSA9IENvbm5lY3RSZWdpc3RyeShyZW1vdGVfbmFtZSwgSEtFWV9DVVJSRU5UX1VTRVIpCi0gICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IsIGV4YzoKKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBleGM6CiAgICAgICAgIHByaW50ICJDb3VsZCBub3QgY29ubmVjdCB0byB0aGUgcmVtb3RlIG1hY2hpbmUgLSIsIGV4Yy5zdHJlcnJvcgogICAgICAgICByZW1vdGVfa2V5ID0gTm9uZQogICAgIGlmIHJlbW90ZV9rZXkgaXMgbm90IE5vbmU6CmRpZmYgLS1naXQgYS9MaWIvdGltZWl0LnB5IGIvTGliL3RpbWVpdC5weQppbmRleCAxOTBiOGM1Li41ZGQzY2E5IDEwMDY0NAotLS0gYS9MaWIvdGltZWl0LnB5CisrKyBiL0xpYi90aW1laXQucHkKQEAgLTIwOSw3ICsyMDksNyBAQAogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzLCAibjpzOnI6dGN2aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsibnVtYmVyPSIsICJzZXR1cD0iLCAicmVwZWF0PSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZSIsICJjbG9jayIsICJ2ZXJib3NlIiwgImhlbHAiXSkKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBlcnI6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBlcnI6CiAgICAgICAgIHByaW50IGVycgogICAgICAgICBwcmludCAidXNlIC1oLy0taGVscCBmb3IgY29tbWFuZCBsaW5lIGhlbHAiCiAgICAgICAgIHJldHVybiAyCmRpZmYgLS1naXQgYS9MaWIvdG9haWZmLnB5IGIvTGliL3RvYWlmZi5weQppbmRleCAzYzhhMDJiLi40MzhkMjI1IDEwMDY0NAotLS0gYS9MaWIvdG9haWZmLnB5CisrKyBiL0xpYi90b2FpZmYucHkKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgZnR5cGUgPSBzbmRoZHIud2hhdGhkcihmbmFtZSkKICAgICAgICAgaWYgZnR5cGU6CiAgICAgICAgICAgICBmdHlwZSA9IGZ0eXBlWzBdICMgQWxsIHdlJ3JlIGludGVyZXN0ZWQgaW4KLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgaWYgdHlwZShtc2cpID09IHR5cGUoKCkpIGFuZCBsZW4obXNnKSA9PSAyIGFuZCBcCiAgICAgICAgICAgICAgICAgdHlwZShtc2dbMF0pID09IHR5cGUoMCkgYW5kIHR5cGUobXNnWzFdKSA9PSB0eXBlKCcnKToKICAgICAgICAgICAgIG1zZyA9IG1zZ1sxXQpkaWZmIC0tZ2l0IGEvTGliL3Rva2VuLnB5IGIvTGliL3Rva2VuLnB5CmluZGV4IDI3NzBjZmQuLjQ3NzgyN2FjIDEwMDc1NQotLS0gYS9MaWIvdG9rZW4ucHkKKysrIGIvTGliL3Rva2VuLnB5CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIG91dEZpbGVOYW1lID0gYXJnc1sxXQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGluRmlsZU5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBsaW5lcyA9IGZwLnJlYWQoKS5zcGxpdCgiXG4iKQpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0OgogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKG91dEZpbGVOYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBlcnI6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDIpCiAgICAgZm9ybWF0ID0gZnAucmVhZCgpLnNwbGl0KCJcbiIpCkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICBmb3JtYXRbc3RhcnQ6ZW5kXSA9IGxpbmVzCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4ob3V0RmlsZU5hbWUsICd3JykKLSAgICBleGNlcHQgSU9FcnJvciwgZXJyOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiSS9PIGVycm9yOiAlc1xuIiAlIHN0cihlcnIpKQogICAgICAgICBzeXMuZXhpdCg0KQogICAgIGZwLndyaXRlKCJcbiIuam9pbihmb3JtYXQpKQpkaWZmIC0tZ2l0IGEvTGliL3RyYWNlLnB5IGIvTGliL3RyYWNlLnB5CmluZGV4IGM3ZWQwYTUuLmNhNDRlYWUgMTAwNjQ0Ci0tLSBhL0xpYi90cmFjZS5weQorKysgYi9MaWIvdHJhY2UucHkKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgICAgICAgICAgICAgIGNvdW50cywgY2FsbGVkZnVuY3MsIGNhbGxlcnMgPSBcCiAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZChvcGVuKHNlbGYuaW5maWxlLCAncmInKSkKICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZShzZWxmLl9fY2xhc3NfXyhjb3VudHMsIGNhbGxlZGZ1bmNzLCBjYWxsZXJzKSkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IsIFZhbHVlRXJyb3IpLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yLCBWYWx1ZUVycm9yKSBhcyBlcnI6CiAgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgKCJTa2lwcGluZyBjb3VudHMgZmlsZSAlcjogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuaW5maWxlLCBlcnIpKQogCkBAIC0zMjgsNyArMzI4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcCgoc2VsZi5jb3VudHMsIHNlbGYuY2FsbGVkZnVuY3MsIHNlbGYuY2FsbGVycyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbihzZWxmLm91dGZpbGUsICd3YicpLCAxKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiQ2FuJ3Qgc2F2ZSBjb3VudHMgZmlsZXMgYmVjYXVzZSAlcyIgJSBlcnIKIAogICAgIGRlZiB3cml0ZV9yZXN1bHRzX2ZpbGUoc2VsZiwgcGF0aCwgbGluZXMsIGxub3RhYiwgbGluZXNfaGl0KToKQEAgLTMzNiw3ICszMzYsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG91dGZpbGUgPSBvcGVuKHBhdGgsICJ3IikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgKCJ0cmFjZTogQ291bGQgbm90IG9wZW4gJXIgZm9yIHdyaXRpbmc6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItIHNraXBwaW5nIiAlIChwYXRoLCBlcnIpKQogICAgICAgICAgICAgcmV0dXJuIDAsIDAKQEAgLTQyMiw3ICs0MjIsNyBAQAogICAgICIiIlJldHVybiBkaWN0IHdoZXJlIGtleXMgYXJlIGxpbmUgbnVtYmVycyBpbiB0aGUgbGluZSBudW1iZXIgdGFibGUuIiIiCiAgICAgdHJ5OgogICAgICAgICBwcm9nID0gb3BlbihmaWxlbmFtZSwgInJVIikucmVhZCgpCi0gICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CiAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICgiTm90IHByaW50aW5nIGNvdmVyYWdlIGRhdGEgZm9yICVyOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBlcnIpKQogICAgICAgICByZXR1cm4ge30KQEAgLTY1OCw3ICs2NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY292ZXJkaXI9IiwgImxpc3RmdW5jcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmFja2NhbGxzIl0pCiAKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzOiAlc1xuIiAlIChzeXMuYXJndlswXSwgbXNnKSkKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVHJ5IGAlcyAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzeXMuYXJndlswXSkKQEAgLTc3OCw3ICs3NzgsNyBAQAogICAgICAgICAgICAgICAgICAgb3V0ZmlsZT1jb3VudHNfZmlsZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdC5ydW4oJ2V4ZWNmaWxlKCVyKScgJSAocHJvZ25hbWUsKSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgX2Vycl9leGl0KCJDYW5ub3QgcnVuIGZpbGUgJXIgYmVjYXVzZTogJXMiICUgKHN5cy5hcmd2WzBdLCBlcnIpKQogICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC5weSBiL0xpYi91bml0dGVzdC5weQppbmRleCBiMzRiMzg5Li45MTYzZTg0IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QucHkKKysrIGIvTGliL3VuaXR0ZXN0LnB5CkBAIC03ODMsNyArNzgzLDcgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSAoc2VsZi5kZWZhdWx0VGVzdCwpCiAgICAgICAgICAgICBzZWxmLmNyZWF0ZVRlc3RzKCkKLSAgICAgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KG1zZykKIAogICAgIGRlZiBjcmVhdGVUZXN0cyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIucHkgYi9MaWIvdXJsbGliLnB5CmluZGV4IDI3ZWMyYzkuLmFhY2MzNzMgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIucHkKKysrIGIvTGliL3VybGxpYi5weQpAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgbmFtZSkodXJsKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBuYW1lKSh1cmwsIGRhdGEpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICByYWlzZSBJT0Vycm9yLCAoJ3NvY2tldCBlcnJvcicsIG1zZyksIHN5cy5leGNfaW5mbygpWzJdCiAKICAgICBkZWYgb3Blbl91bmtub3duKHNlbGYsIGZ1bGx1cmwsIGRhdGE9Tm9uZSk6CkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICAgICAgICAgICAgICBoZHJzID0gZnAuaW5mbygpCiAgICAgICAgICAgICAgICAgZGVsIGZwCiAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDJwYXRobmFtZShzcGxpdGhvc3QodXJsMSlbMV0pLCBoZHJzCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZnAgPSBzZWxmLm9wZW4odXJsLCBkYXRhKQogICAgICAgICBoZWFkZXJzID0gZnAuaW5mbygpCkBAIC00NjEsNyArNDYxLDcgQEAKICAgICAgICAgbG9jYWxuYW1lID0gdXJsMnBhdGhuYW1lKGZpbGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0YXRzID0gb3Muc3RhdChsb2NhbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlLmVycm5vLCBlLnN0cmVycm9yLCBlLmZpbGVuYW1lKQogICAgICAgICBzaXplID0gc3RhdHMuc3Rfc2l6ZQogICAgICAgICBtb2RpZmllZCA9IGVtYWlsLlV0aWxzLmZvcm1hdGRhdGUoc3RhdHMuc3RfbXRpbWUsIHVzZWdtdD1UcnVlKQpAQCAtNTQ0LDcgKzU0NCw3IEBACiAgICAgICAgICAgICAgICAgaGVhZGVycyArPSAiQ29udGVudC1MZW5ndGg6ICVkXG4iICUgcmV0cmxlbgogICAgICAgICAgICAgaGVhZGVycyA9IG1pbWV0b29scy5NZXNzYWdlKFN0cmluZ0lPKGhlYWRlcnMpKQogICAgICAgICAgICAgcmV0dXJuIGFkZGluZm91cmwoZnAsIGhlYWRlcnMsICJmdHA6IiArIHVybCkKLSAgICAgICAgZXhjZXB0IGZ0cGVycm9ycygpLCBtc2c6CisgICAgICAgIGV4Y2VwdCBmdHBlcnJvcnMoKSBhcyBtc2c6CiAgICAgICAgICAgICByYWlzZSBJT0Vycm9yLCAoJ2Z0cCBlcnJvcicsIG1zZyksIHN5cy5leGNfaW5mbygpWzJdCiAKICAgICBkZWYgb3Blbl9kYXRhKHNlbGYsIHVybCwgZGF0YT1Ob25lKToKQEAgLTg2MSw3ICs4NjEsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNtZCA9ICdSRVRSICcgKyBmaWxlCiAgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuZnRwLm50cmFuc2ZlcmNtZChjbWQpCi0gICAgICAgICAgICBleGNlcHQgZnRwbGliLmVycm9yX3Blcm0sIHJlYXNvbjoKKyAgICAgICAgICAgIGV4Y2VwdCBmdHBsaWIuZXJyb3JfcGVybSBhcyByZWFzb246CiAgICAgICAgICAgICAgICAgaWYgc3RyKHJlYXNvbilbOjNdICE9ICc1NTAnOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yLCAoJ2Z0cCBlcnJvcicsIHJlYXNvbiksIHN5cy5leGNfaW5mbygpWzJdCiAgICAgICAgIGlmIG5vdCBjb25uOgpAQCAtMTUwMyw3ICsxNTAzLDcgQEAKICAgICBpbXBvcnQgZ2V0b3B0LCBzeXMKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInRoIikKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50IG1zZwogICAgICAgICBwcmludCAiVXNlIC1oIGZvciBoZWxwIgogICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIyLnB5IGIvTGliL3VybGxpYjIucHkKaW5kZXggYTg4MGU2NC4uZDE0OTk2ZCAxMDA2NDQKLS0tIGEvTGliL3VybGxpYjIucHkKKysrIGIvTGliL3VybGxpYjIucHkKQEAgLTEwNzIsNyArMTA3Miw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGgucmVxdWVzdChyZXEuZ2V0X21ldGhvZCgpLCByZXEuZ2V0X3NlbGVjdG9yKCksIHJlcS5kYXRhLCBoZWFkZXJzKQogICAgICAgICAgICAgciA9IGguZ2V0cmVzcG9uc2UoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6ICMgWFhYIHdoYXQgZXJyb3I/CisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOiAjIFhYWCB3aGF0IGVycm9yPwogICAgICAgICAgICAgcmFpc2UgVVJMRXJyb3IoZXJyKQogCiAgICAgICAgICMgUGljayBhcGFydCB0aGUgSFRUUFJlc3BvbnNlIG9iamVjdCB0byBnZXQgdGhlIGFkZGluZm91cmwKQEAgLTEyNTQsNyArMTI1NCw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaG9zdCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3QpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihtc2cpCiAgICAgICAgIHBhdGgsIGF0dHJzID0gc3BsaXRhdHRyKHJlcS5nZXRfc2VsZWN0b3IoKSkKICAgICAgICAgZGlycyA9IHBhdGguc3BsaXQoJy8nKQpAQCAtMTI4MCw3ICsxMjgwLDcgQEAKICAgICAgICAgICAgIHNmID0gU3RyaW5nSU8oaGVhZGVycykKICAgICAgICAgICAgIGhlYWRlcnMgPSBtaW1ldG9vbHMuTWVzc2FnZShzZikKICAgICAgICAgICAgIHJldHVybiBhZGRpbmZvdXJsKGZwLCBoZWFkZXJzLCByZXEuZ2V0X2Z1bGxfdXJsKCkpCi0gICAgICAgIGV4Y2VwdCBmdHBsaWIuYWxsX2Vycm9ycywgbXNnOgorICAgICAgICBleGNlcHQgZnRwbGliLmFsbF9lcnJvcnMgYXMgbXNnOgogICAgICAgICAgICAgcmFpc2UgSU9FcnJvciwgKCdmdHAgZXJyb3InLCBtc2cpLCBzeXMuZXhjX2luZm8oKVsyXQogCiAgICAgZGVmIGNvbm5lY3RfZnRwKHNlbGYsIHVzZXIsIHBhc3N3ZCwgaG9zdCwgcG9ydCwgZGlycyk6CmRpZmYgLS1naXQgYS9MaWIvdXUucHkgYi9MaWIvdXUucHkKaW5kZXggZGE4OWY3Mi4uODg3ZDk5YSAxMDA3NTUKLS0tIGEvTGliL3V1LnB5CisrKyBiL0xpYi91dS5weQpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgd2hpbGUgcyBhbmQgcy5zdHJpcCgpICE9ICdlbmQnOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkYXRhID0gYmluYXNjaWkuYTJiX3V1KHMpCi0gICAgICAgIGV4Y2VwdCBiaW5hc2NpaS5FcnJvciwgdjoKKyAgICAgICAgZXhjZXB0IGJpbmFzY2lpLkVycm9yIGFzIHY6CiAgICAgICAgICAgICAjIFdvcmthcm91bmQgZm9yIGJyb2tlbiB1dWVuY29kZXJzIGJ5IC9GcmVkcmlrIEx1bmRoCiAgICAgICAgICAgICBuYnl0ZXMgPSAoKChvcmQoc1swXSktMzIpICYgNjMpICogNCArIDUpIC8vIDMKICAgICAgICAgICAgIGRhdGEgPSBiaW5hc2NpaS5hMmJfdXUoc1s6bmJ5dGVzXSkKZGlmZiAtLWdpdCBhL0xpYi93YXJuaW5ncy5weSBiL0xpYi93YXJuaW5ncy5weQppbmRleCBiN2ZhYzY5Li5jMGE5NmQ2IDEwMDY0NAotLS0gYS9MaWIvd2FybmluZ3MucHkKKysrIGIvTGliL3dhcm5pbmdzLnB5CkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIF9zZXRvcHRpb24oYXJnKQotICAgICAgICBleGNlcHQgX09wdGlvbkVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBfT3B0aW9uRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiSW52YWxpZCAtVyBvcHRpb24gaWdub3JlZDoiLCBtc2cKIAogIyBIZWxwZXIgZm9yIF9wcm9jZXNzb3B0aW9ucygpCmRpZmYgLS1naXQgYS9MaWIvd2ViYnJvd3Nlci5weSBiL0xpYi93ZWJicm93c2VyLnB5CmluZGV4IDBkNWY0NGYuLjI4ZTZiZGUgMTAwNjQ0Ci0tLSBhL0xpYi93ZWJicm93c2VyLnB5CisrKyBiL0xpYi93ZWJicm93c2VyLnB5CkBAIC02MjUsNyArNjI1LDcgQEAKICAgICAtdDogb3BlbiBuZXcgdGFiIiIiICUgc3lzLmFyZ3ZbMF0KICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ250ZCcpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsIG1zZwogICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsIHVzYWdlCiAgICAgICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS9MaWIveGRybGliLnB5IGIvTGliL3hkcmxpYi5weQppbmRleCA3OTZkZmFmLi4yM2UxZmYyIDEwMDY0NAotLS0gYS9MaWIveGRybGliLnB5CisrKyBiL0xpYi94ZHJsaWIucHkKQEAgLTY4LDEyICs2OCwxMiBAQAogCiAgICAgZGVmIHBhY2tfZmxvYXQoc2VsZiwgeCk6CiAgICAgICAgIHRyeTogc2VsZi5fX2J1Zi53cml0ZShzdHJ1Y3QucGFjaygnPmYnLCB4KSkKLSAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHJhaXNlIENvbnZlcnNpb25FcnJvciwgbXNnCiAKICAgICBkZWYgcGFja19kb3VibGUoc2VsZiwgeCk6CiAgICAgICAgIHRyeTogc2VsZi5fX2J1Zi53cml0ZShzdHJ1Y3QucGFjaygnPmQnLCB4KSkKLSAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHJhaXNlIENvbnZlcnNpb25FcnJvciwgbXNnCiAKICAgICBkZWYgcGFja19mc3RyaW5nKHNlbGYsIG4sIHMpOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9zYXgvX19pbml0X18ucHkgYi9MaWIveG1sL3NheC9fX2luaXRfXy5weQppbmRleCBkNTVmZmI3Li4yNDJjNjg5IDEwMDY0NAotLS0gYS9MaWIveG1sL3NheC9fX2luaXRfXy5weQorKysgYi9MaWIveG1sL3NheC9fX2luaXRfXy5weQpAQCAtNzksNyArNzksNyBAQAogICAgIGZvciBwYXJzZXJfbmFtZSBpbiBwYXJzZXJfbGlzdCArIGRlZmF1bHRfcGFyc2VyX2xpc3Q6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlX3BhcnNlcihwYXJzZXJfbmFtZSkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLGU6CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgogICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgaWYgcGFyc2VyX25hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgICAgICAgICAgIyBUaGUgcGFyc2VyIG1vZHVsZSB3YXMgZm91bmQsIGJ1dCBpbXBvcnRpbmcgaXQKZGlmZiAtLWdpdCBhL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5IGIvTGliL3htbC9zYXgvZXhwYXRyZWFkZXIucHkKaW5kZXggYmI5YzI5NC4uYzRmYjkzMCAxMDA2NDQKLS0tIGEvTGliL3htbC9zYXgvZXhwYXRyZWFkZXIucHkKKysrIGIvTGliL3htbC9zYXgvZXhwYXRyZWFkZXIucHkKQEAgLTIwNSw3ICsyMDUsNyBAQAogICAgICAgICAgICAgIyBkb2N1bWVudC4gV2hlbiBmZWVkaW5nIGNodW5rcywgdGhleSBhcmUgbm90IG5vcm1hbGx5IGZpbmFsIC0KICAgICAgICAgICAgICMgZXhjZXB0IHdoZW4gaW52b2tlZCBmcm9tIGNsb3NlLgogICAgICAgICAgICAgc2VsZi5fcGFyc2VyLlBhcnNlKGRhdGEsIGlzRmluYWwpCi0gICAgICAgIGV4Y2VwdCBleHBhdC5lcnJvciwgZToKKyAgICAgICAgZXhjZXB0IGV4cGF0LmVycm9yIGFzIGU6CiAgICAgICAgICAgICBleGMgPSBTQVhQYXJzZUV4Y2VwdGlvbihleHBhdC5FcnJvclN0cmluZyhlLmNvZGUpLCBlLCBzZWxmKQogICAgICAgICAgICAgIyBGSVhNRTogd2hlbiB0byBpbnZva2UgZXJyb3IoKT8KICAgICAgICAgICAgIHNlbGYuX2Vycl9oYW5kbGVyLmZhdGFsRXJyb3IoZXhjKQpkaWZmIC0tZ2l0IGEvTGliL3htbGxpYi5weSBiL0xpYi94bWxsaWIucHkKaW5kZXggMmExODljZC4uNTlmYmNkMSAxMDA2NDQKLS0tIGEvTGliL3htbGxpYi5weQorKysgYi9MaWIveG1sbGliLnB5CkBAIC04OTYsNyArODk2LDcgQEAKICAgICBlbHNlOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50IGZpbGUsICI6IiwgbXNnCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCkBAIC05MTQsNyArOTE0LDcgQEAKICAgICAgICAgICAgIGZvciBjIGluIGRhdGE6CiAgICAgICAgICAgICAgICAgeC5mZWVkKGMpCiAgICAgICAgICAgICB4LmNsb3NlKCkKLSAgICBleGNlcHQgRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgRXJyb3IgYXMgbXNnOgogICAgICAgICB0MSA9IHRpbWUoKQogICAgICAgICBwcmludCBtc2cKICAgICAgICAgaWYgZG9fdGltZToKZGlmZiAtLWdpdCBhL0xpYi94bWxycGNsaWIucHkgYi9MaWIveG1scnBjbGliLnB5CmluZGV4IGRhM2QzOTYuLmY1ODRhZDcgMTAwNjQ0Ci0tLSBhL0xpYi94bWxycGNsaWIucHkKKysrIGIvTGliL3htbHJwY2xpYi5weQpAQCAtMTQ1NCw3ICsxNDU0LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgcHJpbnQgc2VydmVyLmN1cnJlbnRUaW1lLmdldEN1cnJlbnRUaW1lKCkKLSAgICBleGNlcHQgRXJyb3IsIHY6CisgICAgZXhjZXB0IEVycm9yIGFzIHY6CiAgICAgICAgIHByaW50ICJFUlJPUiIsIHYKIAogICAgIG11bHRpID0gTXVsdGlDYWxsKHNlcnZlcikKQEAgLTE0NjMsNSArMTQ2Myw1IEBACiAgICAgdHJ5OgogICAgICAgICBmb3IgcmVzcG9uc2UgaW4gbXVsdGkoKToKICAgICAgICAgICAgIHByaW50IHJlc3BvbnNlCi0gICAgZXhjZXB0IEVycm9yLCB2OgorICAgIGV4Y2VwdCBFcnJvciBhcyB2OgogICAgICAgICBwcmludCAiRVJST1IiLCB2CmRpZmYgLS1naXQgYS9MaWIvemlwZmlsZS5weSBiL0xpYi96aXBmaWxlLnB5CmluZGV4IDVjM2ZmZjMuLjBmM2JjY2MgMTAwNjQ0Ci0tLSBhL0xpYi96aXBmaWxlLnB5CisrKyBiL0xpYi96aXBmaWxlLnB5CkBAIC04MTIsNyArODEyLDcgQEAKICAgICAgICAgICAgICAgICBwcmludCAiQ29tcGlsaW5nIiwgZmlsZV9weQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlX3B5LCBmaWxlX3B5YywgTm9uZSwgVHJ1ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBweV9jb21waWxlLlB5Q29tcGlsZUVycm9yLGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBweV9jb21waWxlLlB5Q29tcGlsZUVycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBwcmludCBlcnIubXNnCiAgICAgICAgICAgICBmbmFtZSA9IGZpbGVfcHljCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5IGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQppbmRleCA4YmRlYmU2Li4wMzQ4MjhiIDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CisrKyBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKQEAgLTMzNSw3ICszMzUsNyBAQAogICAgIHRyeToKICAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJncywgJz9oYicsCiAgICAgICAgICAgICAgICAgWyAnYnVpbGQtZGlyPScsICd0aGlyZC1wYXJ0eT0nLCAnc2RrLXBhdGg9JyAsICdzcmMtZGlyPSddKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHN5cy5leGl0KDEpCiAKZGlmZiAtLWdpdCBhL01hYy9EZW1vL2FwcGxlc2NyaXB0L21ha2VkaXNrLnB5IGIvTWFjL0RlbW8vYXBwbGVzY3JpcHQvbWFrZWRpc2sucHkKaW5kZXggOTEyMTBlZS4uMDEzMzMxYyAxMDA2NDQKLS0tIGEvTWFjL0RlbW8vYXBwbGVzY3JpcHQvbWFrZWRpc2sucHkKKysrIGIvTWFjL0RlbW8vYXBwbGVzY3JpcHQvbWFrZWRpc2sucHkKQEAgLTcsNyArNyw3IEBACiBmaWxlc3BlYyA9IG1hY2ZzLkZTU3BlYygnbXkgZGlzayBpbWFnZS5pbWcnKQogdHJ5OgogICAgIG9ianJlZiA9IHRhbGtlci5jcmVhdGUoJ215IGRpc2sgaW1hZ2UnLCBzYXZpbmdfYXM9ZmlsZXNwZWMsIGxlYXZlX2ltYWdlX21vdW50ZWQ9MSkKLWV4Y2VwdCBEaXNrX0NvcHkuRXJyb3IsIGFyZzoKK2V4Y2VwdCBEaXNrX0NvcHkuRXJyb3IgYXMgYXJnOgogICAgIHByaW50ICJFUlJPUjogbXkgZGlzayBpbWFnZToiLCBhcmcKIGVsc2U6CiAgICAgcHJpbnQgJ29ianJlZj0nLCBvYmpyZWYKZGlmZiAtLWdpdCBhL01hYy9EZW1vL2ltZ2Jyb3dzZS9pbWdicm93c2UucHkgYi9NYWMvRGVtby9pbWdicm93c2UvaW1nYnJvd3NlLnB5CmluZGV4IDI4ZGZmZDMuLjU3Y2RkZDMgMTAwNjQ0Ci0tLSBhL01hYy9EZW1vL2ltZ2Jyb3dzZS9pbWdicm93c2UucHkKKysrIGIvTWFjL0RlbW8vaW1nYnJvd3NlL2ltZ2Jyb3dzZS5weQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBiYXIgPSBFYXN5RGlhbG9ncy5Qcm9ncmVzc0JhcignUmVhZGluZyBhbmQgY29udmVydGluZy4uLicpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJkciA9IGltZy5yZWFkZXIoaW1nZm9ybWF0Lm1hY3JnYjE2LCBwYXRobmFtZSkKLSAgICAgICAgZXhjZXB0IGltZy5lcnJvciwgYXJnOgorICAgICAgICBleGNlcHQgaW1nLmVycm9yIGFzIGFyZzoKICAgICAgICAgICAgIEVhc3lEaWFsb2dzLk1lc3NhZ2UocmVwcihhcmcpKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHcsIGggPSByZHIud2lkdGgsIHJkci5oZWlnaHQKZGlmZiAtLWdpdCBhL01hYy9EZW1vL21sdGUvbWx0ZWQucHkgYi9NYWMvRGVtby9tbHRlL21sdGVkLnB5CmluZGV4IDMyM2VhNjIuLmY5Y2NkMjEgMTAwNjQ0Ci0tLSBhL01hYy9EZW1vL21sdGUvbWx0ZWQucHkKKysrIGIvTWFjL0RlbW8vbWx0ZS9tbHRlZC5weQpAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpICMgTk9URSBiaW5hcnksIHdlIG5lZWQgY3IgYXMgZW5kLW9mLWxpbmUKICAgICAgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGFyZzoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGFyZzoKICAgICAgICAgICAgICAgICBFYXN5RGlhbG9ncy5NZXNzYWdlKCJJT0VSUk9SOiAlciIgJSAoYXJnLCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9NYWMvRGVtby9yZXNvdXJjZXMvY29weXJlcy5weSBiL01hYy9EZW1vL3Jlc291cmNlcy9jb3B5cmVzLnB5CmluZGV4IGNiMWZhOGUuLmRhNTViMDYgMTAwNjQ0Ci0tLSBhL01hYy9EZW1vL3Jlc291cmNlcy9jb3B5cmVzLnB5CisrKyBiL01hYy9EZW1vL3Jlc291cmNlcy9jb3B5cmVzLnB5CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICBVc2VSZXNGaWxlKG91dHB1dCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXMyID0gR2V0MVJlc291cmNlKHR5cGUsIGlkKQotICAgICAgICAgICAgZXhjZXB0IChSdW50aW1lRXJyb3IsIFJlcy5FcnJvciksIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCAoUnVudGltZUVycm9yLCBSZXMuRXJyb3IpIGFzIG1zZzoKICAgICAgICAgICAgICAgICByZXMyID0gTm9uZQogICAgICAgICAgICAgaWYgcmVzMjoKICAgICAgICAgICAgICAgICBwcmludCAiRHVwbGljYXRlIHR5cGUraWQsIG5vdCBjb3BpZWQiCmRpZmYgLS1naXQgYS9NYWMvRGVtby90ZXh0ZWRpdC9wZWQucHkgYi9NYWMvRGVtby90ZXh0ZWRpdC9wZWQucHkKaW5kZXggM2U5MWIzMi4uOGNkNDcxMyAxMDA2NDQKLS0tIGEvTWFjL0RlbW8vdGV4dGVkaXQvcGVkLnB5CisrKyBiL01hYy9EZW1vL3RleHRlZGl0L3BlZC5weQpAQCAtMjczLDcgKzI3Myw3IEBACiAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpICMgTk9URSBiaW5hcnksIHdlIG5lZWQgY3IgYXMgZW5kLW9mLWxpbmUKICAgICAgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGFyZzoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGFyZzoKICAgICAgICAgICAgICAgICBFYXN5RGlhbG9ncy5NZXNzYWdlKCJJT0VSUk9SOiAlciIgJSAoYXJnLCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9NYWMvc2NyaXB0cy9CdWlsZEFwcGxldC5weSBiL01hYy9zY3JpcHRzL0J1aWxkQXBwbGV0LnB5CmluZGV4IGU3MWViYzEuLjlkZGNkMGIgMTAwNjQ0Ci0tLSBhL01hYy9zY3JpcHRzL0J1aWxkQXBwbGV0LnB5CisrKyBiL01hYy9zY3JpcHRzL0J1aWxkQXBwbGV0LnB5CkBAIC0zMSw3ICszMSw3IEBACiBkZWYgbWFpbigpOgogICAgIHRyeToKICAgICAgICAgYnVpbGRhcHBsZXQoKQotICAgIGV4Y2VwdCBidWlsZHRvb2xzLkJ1aWxkRXJyb3IsIGRldGFpbDoKKyAgICBleGNlcHQgYnVpbGR0b29scy5CdWlsZEVycm9yIGFzIGRldGFpbDoKICAgICAgICAgRWFzeURpYWxvZ3MuTWVzc2FnZShkZXRhaWwpCiAKIApkaWZmIC0tZ2l0IGEvTWFjL3NjcmlwdHMvYnVpbGRwa2cucHkgYi9NYWMvc2NyaXB0cy9idWlsZHBrZy5weQppbmRleCBlNmRjNDc0Li5lNTBjNDA1IDEwMDY0NAotLS0gYS9NYWMvc2NyaXB0cy9idWlsZHBrZy5weQorKysgYi9NYWMvc2NyaXB0cy9idWlsZHBrZy5weQpAQCAtNDUxLDcgKzQ1MSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgc2hvcnRPcHRzLCBsb25nT3B0cykKLSAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yLCBkZXRhaWxzOgorICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IgYXMgZGV0YWlsczoKICAgICAgICAgcHJpbnQgZGV0YWlscwogICAgICAgICBwcmludFVzYWdlKCkKICAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS9NaXNjL0JlT1Mtc2V0dXAucHkgYi9NaXNjL0JlT1Mtc2V0dXAucHkKaW5kZXggOTkxZTYwOC4uNTU2ZGRjNSAxMDA2NDQKLS0tIGEvTWlzYy9CZU9TLXNldHVwLnB5CisrKyBiL01pc2MvQmVPUy1zZXR1cC5weQpAQCAtMTI3LDcgKzEyNyw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYnVpbGRfZXh0LmJ1aWxkX2V4dGVuc2lvbihzZWxmLCBleHQpCi0gICAgICAgIGV4Y2VwdCAoQ0NvbXBpbGVyRXJyb3IsIERpc3R1dGlsc0Vycm9yKSwgd2h5OgorICAgICAgICBleGNlcHQgKENDb21waWxlckVycm9yLCBEaXN0dXRpbHNFcnJvcikgYXMgd2h5OgogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnV0FSTklORzogYnVpbGRpbmcgb2YgZXh0ZW5zaW9uICIlcyIgZmFpbGVkOiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAoZXh0Lm5hbWUsIHN5cy5leGNfaW5mbygpWzFdKSkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKaW5kZXggZDQ3NGE5YS4uZDE1OWI2YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCkBAIC0yMTEwLDggKzIxMTAsOCBAQAogICAgIGlmIChyZXMgJiYgKG5jaCA+IDEpKQogICAgICAgICByZXMgPSB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDEpKTsKICAgICBpZiAocmVzICYmIChuY2ggPT0gNCkpCi0gICAgICAgIHJlcyA9ICh2YWxpZGF0ZV9jb21tYShDSElMRCh0cmVlLCAyKSkKLSAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMykpKTsKKyAgICAgICAgcmVzID0gKHZhbGlkYXRlX25hbWUoQ0hJTEQodHJlZSwgMiksICJhcyIpCisgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9udHlwZShDSElMRCh0cmVlLCAzKSwgTkFNRSkpOwogCiAgICAgcmV0dXJuIChyZXMpOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbXBpbGUuYyBiL1B5dGhvbi9jb21waWxlLmMKaW5kZXggZDIzNzRhOS4uNDgxY2M4NSAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbXBpbGUuYworKysgYi9QeXRob24vY29tcGlsZS5jCkBAIC0xOTU1LDEzICsxOTU1LDY2IEBACiAJCX0KIAkJQURET1AoYywgUE9QX1RPUCk7CiAJCWlmIChoYW5kbGVyLT5uYW1lKSB7CisgICAgICAgICAgICBiYXNpY2Jsb2NrICpjbGVhbnVwX2VuZCwgKmNsZWFudXBfYm9keTsKKyAgICAgICAgICAgIGV4cHJfY29udGV4dF90eSBvcmlnX2N0eDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXNzZXJ0KGhhbmRsZXItPm5hbWUtPmtpbmQgPT0gTmFtZV9raW5kKTsKKworICAgICAgICAgICAgY2xlYW51cF9lbmQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CisgICAgICAgICAgICBjbGVhbnVwX2JvZHkgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CisgICAgICAgICAgICBpZighKGNsZWFudXBfZW5kIHx8IGNsZWFudXBfYm9keSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKIAkJCVZJU0lUKGMsIGV4cHIsIGhhbmRsZXItPm5hbWUpOworICAgICAgICAgICAgQURET1AoYywgUE9QX1RPUCk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIGJvZHkKKyAgICAgICAgICAgICAgICBleGNlcHQgdHlwZSBhcyBuYW1lOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGJvZHkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgbmFtZQorICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgLyogc2Vjb25kIHRyeTogKi8KKyAgICAgICAgICAgIEFERE9QX0pSRUwoYywgU0VUVVBfRklOQUxMWSwgY2xlYW51cF9lbmQpOworCSAgICAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgY2xlYW51cF9ib2R5KTsKKwkgICAgICAgIGlmICghY29tcGlsZXJfcHVzaF9mYmxvY2soYywgRklOQUxMWV9UUlksIGNsZWFudXBfYm9keSkpCisJCSAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIC8qIHNlY29uZCAjIGJvZHkgKi8KKwkgICAgICAgIFZJU0lUX1NFUShjLCBzdG10LCBoYW5kbGVyLT5ib2R5KTsKKwkgICAgICAgIEFERE9QKGMsIFBPUF9CTE9DSyk7CisJICAgICAgICBjb21waWxlcl9wb3BfZmJsb2NrKGMsIEZJTkFMTFlfVFJZLCBjbGVhbnVwX2JvZHkpOworCisgICAgICAgICAgICAvKiBmaW5hbGx5OiAqLworCSAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9Ob25lLCBjb25zdHMpOworCSAgICAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgY2xlYW51cF9lbmQpOworCSAgICAgICAgaWYgKCFjb21waWxlcl9wdXNoX2ZibG9jayhjLCBGSU5BTExZX0VORCwgY2xlYW51cF9lbmQpKQorCQkgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICAvKiBuYW1lID0gTm9uZSAqLworICAgICAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9Ob25lLCBjb25zdHMpOworICAgICAgICAgICAgb3JpZ19jdHggPSBoYW5kbGVyLT5uYW1lLT52Lk5hbWUuY3R4OworICAgICAgICAgICAgaGFuZGxlci0+bmFtZS0+di5OYW1lLmN0eCA9IFN0b3JlOworICAgICAgICAgICAgVklTSVQoYywgZXhwciwgaGFuZGxlci0+bmFtZSk7CisKKyAgICAgICAgICAgIC8qIGRlbCBuYW1lICovICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVyLT5uYW1lLT52Lk5hbWUuY3R4ID0gRGVsOworICAgICAgICAgICAgVklTSVQoYywgZXhwciwgaGFuZGxlci0+bmFtZSk7CisgICAgICAgICAgICBoYW5kbGVyLT5uYW1lLT52Lk5hbWUuY3R4ID0gb3JpZ19jdHg7CisKKwkgICAgICAgIEFERE9QKGMsIEVORF9GSU5BTExZKTsKKwkgICAgICAgIGNvbXBpbGVyX3BvcF9mYmxvY2soYywgRklOQUxMWV9FTkQsIGNsZWFudXBfZW5kKTsKIAkJfQogCQllbHNlIHsKLQkJCUFERE9QKGMsIFBPUF9UT1ApOworICAgICAgICAgICAgQURET1AoYywgUE9QX1RPUCk7CisgICAgICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKKwkJICAgIFZJU0lUX1NFUShjLCBzdG10LCBoYW5kbGVyLT5ib2R5KTsKIAkJfQotCQlBRERPUChjLCBQT1BfVE9QKTsKLQkJVklTSVRfU0VRKGMsIHN0bXQsIGhhbmRsZXItPmJvZHkpOwogCQlBRERPUF9KUkVMKGMsIEpVTVBfRk9SV0FSRCwgZW5kKTsKIAkJY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgZXhjZXB0KTsKIAkJaWYgKGhhbmRsZXItPnR5cGUpCmRpZmYgLS1naXQgYS9QeXRob24vZ3JhbWluaXQuYyBiL1B5dGhvbi9ncmFtaW5pdC5jCmluZGV4IDkzZWU2OWEuLjNmMDIyNDAgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9ncmFtaW5pdC5jCisrKyBiL1B5dGhvbi9ncmFtaW5pdC5jCkBAIC0xMDQ5LDcgKzEwNDksNyBAQAogCXswLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDZfMlsyXSA9IHsKLQl7MjgsIDN9LAorCXs4MywgM30sCiAJezAsIDJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180Nl8zWzFdID0gewpkaWZmIC0tZ2l0IGEvVG9vbHMvYXVkaW9weS9hdWRpb3B5IGIvVG9vbHMvYXVkaW9weS9hdWRpb3B5CmluZGV4IGI4MTdjNWMuLjg2OWQ4N2EgMTAwNzU1Ci0tLSBhL1Rvb2xzL2F1ZGlvcHkvYXVkaW9weQorKysgYi9Ub29scy9hdWRpb3B5L2F1ZGlvcHkKQEAgLTMwOSw3ICszMDksNyBAQAogICAgICAgICBpbmZvLm9fZ2FpbiA9IHNlbGYuX19zY2FsZXZhci5nZXQoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9fZGV2Y3RsLnNldGluZm8oaW5mbykKLSAgICAgICAgZXhjZXB0IHN1bmF1ZGlvZGV2LmVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBzdW5hdWRpb2Rldi5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAjIFRCRDogd2hhdCB0byBkbz8gIGl0J3MgcHJvYmFibHkgdGVtcG9yYXJ5LgogICAgICAgICAgICAgcGFzcwogCkBAIC00OTYsNyArNDk2LDggQEAKICAgICAjIG5vdyBzZXQgdGhlIHZhbHVlcwogICAgIHRyeToKICAgICAgICAgZGV2aWNlLnNldGluZm8oaW5mbykKLSAgICBleGNlcHQgc3VuYXVkaW9kZXYuZXJyb3IsIChjb2RlLCBtc2cpOgorICAgIGV4Y2VwdCBzdW5hdWRpb2Rldi5lcnJvciBhcyBlOgorICAgICAgICAoY29kZSwgbXNnKSA9IGUKICAgICAgICAgaWYgY29kZSA8PiBlcnJuby5FSU5WQUw6CiAgICAgICAgICAgICByYWlzZQogICAgIGRldmljZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9Ub29scy9iZ2VuL2JnZW4vc2NhbnRvb2xzLnB5IGIvVG9vbHMvYmdlbi9iZ2VuL3NjYW50b29scy5weQppbmRleCBkODA5YTY1Li5iYWUyOWEwIDEwMDY0NAotLS0gYS9Ub29scy9iZ2VuL2JnZW4vc2NhbnRvb2xzLnB5CisrKyBiL1Rvb2xzL2JnZW4vYmdlbi9zY2FudG9vbHMucHkKQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgIGRlZiBvcGVucmVwYWlyZmlsZShzZWxmLCBmaWxlbmFtZSA9ICJSRVBBSVIiKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIG9wZW4oZmlsZW5hbWUsICJyVSIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50IHJlcHIoZmlsZW5hbWUpLCAiOiIsIG1zZwogICAgICAgICAgICAgcHJpbnQgIkNhbm5vdCBvcGVuIHJlcGFpciBmaWxlIC0tIGFzc3VtZSBubyByZXBhaXIgbmVlZGVkIgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTQxOSw3ICs0MTksNyBAQAogICAgIGRlZiBvcGVub3V0cHV0KHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmlsZSA9IG9wZW4oZmlsZW5hbWUsICd3JykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGFyZzoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgYXJnOgogICAgICAgICAgICAgcmFpc2UgSU9FcnJvciwgKGZpbGVuYW1lLCBhcmcpCiAgICAgICAgIHNlbGYuc2V0ZmlsZXR5cGUoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiBmaWxlCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICAgICAgIyBJZiBub3Qgb24gdGhlIHBhdGgsIG9yIGFic29sdXRlLCB0cnkgZGVmYXVsdCBvcGVuKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIG9wZW4oZmlsZW5hbWUsICdyVScpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBhcmc6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGFyZzoKICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IsIChhcmcsIGZpbGVuYW1lKQogCiAgICAgZGVmIGdldGxpbmUoc2VsZik6CmRpZmYgLS1naXQgYS9Ub29scy9jb21waWxlci9jb21waWxlLnB5IGIvVG9vbHMvY29tcGlsZXIvY29tcGlsZS5weQppbmRleCA5ZDUwNDI1Li41MWE5ZjBjIDEwMDY0NAotLS0gYS9Ub29scy9jb21waWxlci9jb21waWxlLnB5CisrKyBiL1Rvb2xzL2NvbXBpbGVyL2NvbXBpbGUucHkKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjb21waWxlRmlsZShmaWxlbmFtZSwgRElTUExBWSkKIAotICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50IGVycgogICAgICAgICAgICAgICAgIGlmIGVyci5saW5lbm8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHByaW50IGVyci5saW5lbm8KZGlmZiAtLWdpdCBhL1Rvb2xzL2NvbXBpbGVyL3JlZ3J0ZXN0LnB5IGIvVG9vbHMvY29tcGlsZXIvcmVncnRlc3QucHkKaW5kZXggNDI0NGQ2Mi4uZDg2ZDc0NiAxMDA2NDQKLS0tIGEvVG9vbHMvY29tcGlsZXIvcmVncnRlc3QucHkKKysrIGIvVG9vbHMvY29tcGlsZXIvcmVncnRlc3QucHkKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgICAgIHByaW50IGZpbGUsCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgY29tcGlsZUZpbGUoc291cmNlKQotICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBlcnI6CisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50IGVycgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgLnB5YyBmaWxlIGlzIG5vdCBvdmVyLXdyaXR0ZW4KZGlmZiAtLWdpdCBhL1Rvb2xzL2ZhcXdpei9mYXF3LnB5IGIvVG9vbHMvZmFxd2l6L2ZhcXcucHkKaW5kZXggYTI2ZTBkNi4uMDZkYjEyNSAxMDA3NTUKLS0tIGEvVG9vbHMvZmFxd2l6L2ZhcXcucHkKKysrIGIvVG9vbHMvZmFxd2l6L2ZhcXcucHkKQEAgLTI0LDcgKzI0LDcgQEAKICAgICBvcy5jaGRpcihGQVFESVIpCiAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIFNSQ0RJUikKICAgICBpbXBvcnQgZmFxd2l6Ci1leGNlcHQgU3lzdGVtRXhpdCwgbjoKK2V4Y2VwdCBTeXN0ZW1FeGl0IGFzIG46CiAgICAgc3lzLmV4aXQobikKIGV4Y2VwdDoKICAgICB0LCB2LCB0YiA9IHN5cy5leGNfaW5mbygpCmRpZmYgLS1naXQgYS9Ub29scy9mYXF3aXovZmFxd2l6LnB5IGIvVG9vbHMvZmFxd2l6L2ZhcXdpei5weQppbmRleCBiZGQyNzBjLi5kOGI4Y2Q1IDEwMDY0NAotLS0gYS9Ub29scy9mYXF3aXovZmFxd2l6LnB5CisrKyBiL1Rvb2xzL2ZhcXdpei9mYXF3aXoucHkKQEAgLTM0OCw3ICszNDgsNyBAQAogICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZpbGUoZmlsZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHJhaXNlIE5vU3VjaEZpbGUoZmlsZSwgbXNnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5lbnRyeWNsYXNzKGZwLCBmaWxlLCBzZWNfbnVtKQpAQCAtMzg3LDExICszODcsMTEgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBtZXRoKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJbnZhbGlkRmlsZSwgZXhjOgorICAgICAgICAgICAgZXhjZXB0IEludmFsaWRGaWxlIGFzIGV4YzoKICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCJJbnZhbGlkIGVudHJ5IGZpbGUgbmFtZSAlcyIgJSBleGMuZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hGaWxlLCBleGM6CisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRmlsZSBhcyBleGM6CiAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigiTm8gZW50cnkgd2l0aCBmaWxlIG5hbWUgJXMiICUgZXhjLmZpbGUpCi0gICAgICAgICAgICBleGNlcHQgTm9TdWNoU2VjdGlvbiwgZXhjOgorICAgICAgICAgICAgZXhjZXB0IE5vU3VjaFNlY3Rpb24gYXMgZXhjOgogICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIk5vIHNlY3Rpb24gbnVtYmVyICVzIiAlIGV4Yy5zZWN0aW9uKQogICAgICAgICBzZWxmLmVwaWxvZ3VlKCkKIApAQCAtNzk2LDcgKzc5Niw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGUsICd3JykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIHdoeToKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgc2VsZi5lcnJvcihDQU5UV1JJVEUsIGZpbGU9ZmlsZSwgd2h5PXdoeSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBkYXRlID0gdGltZS5jdGltZShub3cpCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvY2hlY2tleHRlbnNpb25zX3dpbjMyLnB5IGIvVG9vbHMvZnJlZXplL2NoZWNrZXh0ZW5zaW9uc193aW4zMi5weQppbmRleCBhMTk4ZWNmLi5iYTM4NTNjIDEwMDY0NAotLS0gYS9Ub29scy9mcmVlemUvY2hlY2tleHRlbnNpb25zX3dpbjMyLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9jaGVja2V4dGVuc2lvbnNfd2luMzIucHkKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgIGRzcF9wYXRoLCBkc3BfbmFtZSA9IG9zLnBhdGguc3BsaXQoZHNwKQogICAgIHRyeToKICAgICAgICAgbGluZXMgPSBvcGVuKGRzcCwgInIiKS5yZWFkbGluZXMoKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlczogJXNcbiIgJSAoZHNwLCBtc2cpKQogICAgICAgICByZXR1cm4gTm9uZQogICAgIGZvciBsaW5lIGluIGxpbmVzOgpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weSBiL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKaW5kZXggM2U2YTU4MC4uNzg2ZDUzYSAxMDA3NTUKLS0tIGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQorKysgYi9Ub29scy9mcmVlemUvZnJlZXplLnB5CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgaWYgc3lzLmFyZ3ZbcG9zXSA9PSAnLWknOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcGVuKHN5cy5hcmd2W3BvcysxXSkucmVhZCgpLnNwbGl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCB3aHk6CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgdXNhZ2UoIkZpbGUgbmFtZSAnJXMnIHNwZWNpZmllZCB3aXRoIHRoZSAtaSBvcHRpb24gIgogICAgICAgICAgICAgICAgICAgICAgICJjYW4gbm90IGJlIHJlYWQgLSAlcyIgJSAoc3lzLmFyZ3ZbcG9zKzFdLCB3aHkpICkKICAgICAgICAgICAgICMgUmVwbGFjZSB0aGUgJy1pJyBhbmQgdGhlIGZpbGVuYW1lIHdpdGggdGhlIHJlYWQgcGFyYW1zLgpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICAgIyBOb3cgcGFyc2UgdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBleHRyYXMgaW5zZXJ0ZWQuCiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdyOmE6ZEVlOmhtbzpwOlA6cXM6d1g6eDpsOicpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICB1c2FnZSgnZ2V0b3B0IGVycm9yOiAnICsgc3RyKG1zZykpCiAKICAgICAjIHByb2NlcyBvcHRpb24gYXJndW1lbnRzCkBAIC0zMTEsNyArMzExLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIob2RpcikKICAgICAgICAgICAgIHByaW50ICJDcmVhdGVkIG91dHB1dCBkaXJlY3RvcnkiLCBvZGlyCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgdXNhZ2UoJyVzOiBta2RpciBmYWlsZWQgKCVzKScgJSAob2Rpciwgc3RyKG1zZykpKQogICAgIGJhc2UgPSAnJwogICAgIGlmIG9kaXI6CkBAIC0zMzMsNyArMzMzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY3VzdG9tX2VudHJ5X3BvaW50LCBweXRob25fZW50cnlfaXNfbWFpbiA9IFwKICAgICAgICAgICAgICAgICB3aW5tYWtlbWFrZWZpbGUuZ2V0X2N1c3RvbV9lbnRyeV9wb2ludChzdWJzeXN0ZW0pCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCB3aHk6CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIHdoeToKICAgICAgICAgICAgIHVzYWdlKHdoeSkKIAogCmRpZmYgLS1naXQgYS9Ub29scy9pMThuL21zZ2ZtdC5weSBiL1Rvb2xzL2kxOG4vbXNnZm10LnB5CmluZGV4IDY0MzMxMzEuLjM1M2JlOGIgMTAwNzU1Ci0tLSBhL1Rvb2xzL2kxOG4vbXNnZm10LnB5CisrKyBiL1Rvb2xzL2kxOG4vbXNnZm10LnB5CkBAIC0xMTAsNyArMTEwLDcgQEAKIAogICAgIHRyeToKICAgICAgICAgbGluZXMgPSBvcGVuKGluZmlsZSkucmVhZGxpbmVzKCkKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgbXNnCiAgICAgICAgIHN5cy5leGl0KDEpCiAKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBvcGVuKG91dGZpbGUsIndiIikud3JpdGUob3V0cHV0KQotICAgIGV4Y2VwdCBJT0Vycm9yLG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsIG1zZwogCiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaFZvOicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnaGVscCcsICd2ZXJzaW9uJywgJ291dHB1dC1maWxlPSddKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgdXNhZ2UoMSwgbXNnKQogCiAgICAgb3V0ZmlsZSA9IE5vbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL2kxOG4vcHlnZXR0ZXh0LnB5IGIvVG9vbHMvaTE4bi9weWdldHRleHQucHkKaW5kZXggZWFkZDE0OS4uMjRmMWNlMSAxMDA3NTUKLS0tIGEvVG9vbHMvaTE4bi9weWdldHRleHQucHkKKysrIGIvVG9vbHMvaTE4bi9weWdldHRleHQucHkKQEAgLTUxMiw3ICs1MTIsNyBAQAogICAgICAgICAgICAgICdzdHlsZT0nLCAndmVyYm9zZScsICd2ZXJzaW9uJywgJ3dpZHRoPScsICdleGNsdWRlLWZpbGU9JywKICAgICAgICAgICAgICAnZG9jc3RyaW5ncycsICduby1kb2NzdHJpbmdzJywKICAgICAgICAgICAgICBdKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgdXNhZ2UoMSwgbXNnKQogCiAgICAgIyBmb3IgaG9sZGluZyBvcHRpb24gdmFsdWVzCkBAIC02MzUsNyArNjM1LDcgQEAKICAgICAgICAgICAgIGVhdGVyLnNldF9maWxlbmFtZShmaWxlbmFtZSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0b2tlbml6ZS50b2tlbml6ZShmcC5yZWFkbGluZSwgZWF0ZXIpCi0gICAgICAgICAgICBleGNlcHQgdG9rZW5pemUuVG9rZW5FcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCB0b2tlbml6ZS5Ub2tlbkVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJyVzOiAlcywgbGluZSAlZCwgY29sdW1uICVkJyAlICgKICAgICAgICAgICAgICAgICAgICAgZVswXSwgZmlsZW5hbWUsIGVbMV1bMF0sIGVbMV1bMV0pCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9Ub29scy9weWJlbmNoL0NvbW1hbmRMaW5lLnB5IGIvVG9vbHMvcHliZW5jaC9Db21tYW5kTGluZS5weQppbmRleCA2NjAxYmU1Li5kZGY5NThkIDEwMDY0NAotLS0gYS9Ub29scy9weWJlbmNoL0NvbW1hbmRMaW5lLnB5CisrKyBiL1Rvb2xzL3B5YmVuY2gvQ29tbWFuZExpbmUucHkKQEAgLTM0Nyw3ICszNDcsNyBAQAogICAgICAgICAgICAgaWYgcmMgaXMgTm9uZToKICAgICAgICAgICAgICAgICByYyA9IDAKIAotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCxyYzoKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgcmM6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgpAQCAtNDMzLDcgKzQzMyw3IEBACiAgICAgICAgICAgICAgICAgZmlsZXMgPSBsCiAgICAgICAgICAgICBzZWxmLm9wdGlvbmxpc3QgPSBvcHRsaXN0CiAgICAgICAgICAgICBzZWxmLmZpbGVzID0gZmlsZXMgKyBzZWxmLmZpbGVzCi0gICAgICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3Isd2h5OgorICAgICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIHdoeToKICAgICAgICAgICAgIHNlbGYuaGVscCh3aHkpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCmRpZmYgLS1naXQgYS9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkgYi9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkKaW5kZXggMzkyZmY1MC4uZTBmZjczMiAxMDA3NTUKLS0tIGEvVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5CisrKyBiL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weQpAQCAtODY1LDcgKzg2NSw3IEBACiAgICAgICAgICAgICAgICAgYmVuY2gubmFtZSA9IGNvbXBhcmVfdG8KICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgICAgICBjb21wYXJlX3RvID0gYmVuY2gKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCByZWFzb246CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyByZWFzb246CiAgICAgICAgICAgICAgICAgcHJpbnQgJyogRXJyb3Igb3BlbmluZy9yZWFkaW5nIGZpbGUgJXM6ICVzJyAlICgKICAgICAgICAgICAgICAgICAgICAgcmVwcihjb21wYXJlX3RvKSwKICAgICAgICAgICAgICAgICAgICAgcmVhc29uKQpAQCAtODg1LDcgKzg4NSw3IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgYmVuY2gucHJpbnRfYmVuY2htYXJrKGhpZGVub2lzZT1oaWRlbm9pc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdG5hbWVzPWxpbWl0bmFtZXMpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgcmVhc29uOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgcmVhc29uOgogICAgICAgICAgICAgICAgIHByaW50ICcqIEVycm9yIG9wZW5pbmcvcmVhZGluZyBmaWxlICVzOiAlcycgJSAoCiAgICAgICAgICAgICAgICAgICAgIHJlcHIoc2hvd19iZW5jaCksCiAgICAgICAgICAgICAgICAgICAgIHJlYXNvbikKQEAgLTkzMSw5ICs5MzEsOSBAQAogICAgICAgICAgICAgICAgIGJlbmNoLm5hbWUgPSByZXBvcnRmaWxlCiAgICAgICAgICAgICAgICAgcGlja2xlLmR1bXAoYmVuY2gsZikKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCByZWFzb246CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyByZWFzb246CiAgICAgICAgICAgICAgICAgcHJpbnQgJyogRXJyb3Igb3BlbmluZy93cml0aW5nIHJlcG9ydGZpbGUnCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgcmVhc29uOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgcmVhc29uOgogICAgICAgICAgICAgICAgIHByaW50ICcqIEVycm9yIG9wZW5pbmcvd3JpdGluZyByZXBvcnRmaWxlICVzOiAlcycgJSAoCiAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGZpbGUsCiAgICAgICAgICAgICAgICAgICAgIHJlYXNvbikKZGlmZiAtLWdpdCBhL1Rvb2xzL3B5bmNoZS9NYWluLnB5IGIvVG9vbHMvcHluY2hlL01haW4ucHkKaW5kZXggMWZhM2YxNy4uYTBhMmQ4MSAxMDA2NDQKLS0tIGEvVG9vbHMvcHluY2hlL01haW4ucHkKKysrIGIvVG9vbHMvcHluY2hlL01haW4ucHkKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICAgICAgc3lzLmFyZ3ZbMTpdLAogICAgICAgICAgICAgJ2hkOmk6WHYnLAogICAgICAgICAgICAgWydkYXRhYmFzZT0nLCAnaW5pdGZpbGU9JywgJ2lnbm9yZScsICdoZWxwJywgJ3ZlcnNpb24nXSkKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHVzYWdlKDEsIG1zZykKIAogICAgIGlmIGxlbihhcmdzKSA9PSAwOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weSBiL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKaW5kZXggMDk2MTBiMC4uOTk4YjRjMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICAgIHNlbGYuYWRkc3RhdHMoIjxkaXI+IiwgImRpcnMiLCAxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IGxpc3QgJXM6ICVzXG4iICUgKGRpciwgZXJyKSkKICAgICAgICAgICAgIHNlbGYuYWRkc3RhdHMoIjxkaXI+IiwgInVubGlzdGFibGUiLCAxKQogICAgICAgICAgICAgcmV0dXJuCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHNlbGYuYWRkc3RhdHMoZXh0LCAiZmlsZXMiLCAxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3Qgb3BlbiAlczogJXNcbiIgJSAoZmlsZW5hbWUsIGVycikpCiAgICAgICAgICAgICBzZWxmLmFkZHN0YXRzKGV4dCwgInVub3BlbmFibGUiLCAxKQogICAgICAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weSBiL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5CmluZGV4IGJhMzhjYWYuLmI0ZDQzMzUgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5CkBAIC00Myw3ICs0Myw3IEBACiAgICAgZm9yIGZpbGVuYW1lIGluIHN5cy5hcmd2WzE6XToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3QgPSBzdGF0ZnVuYyhmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJjYW4ndCBzdGF0ICVyOiAlclxuIiAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgICAgIHN0YXR1cyA9IDEKICAgICAgICAgICAgIHN0ID0gKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY2hlY2thcHBlbmQucHkgYi9Ub29scy9zY3JpcHRzL2NoZWNrYXBwZW5kLnB5CmluZGV4IGE4NzE0ZDkuLjIwMjViYTkgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY2hlY2thcHBlbmQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jaGVja2FwcGVuZC5weQpAQCAtNTAsNyArNTAsNyBAQAogICAgIGdsb2JhbCB2ZXJib3NlCiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJ2IikKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIGVycnByaW50KHN0cihtc2cpICsgIlxuXG4iICsgX19kb2NfXykKICAgICAgICAgcmV0dXJuCiAgICAgZm9yIG9wdCwgb3B0YXJnIGluIG9wdHM6CkBAIC03Nyw3ICs3Nyw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIGVycnByaW50KCIlcjogSS9PIEVycm9yOiAlcyIgJSAoZmlsZSwgbXNnKSkKICAgICAgICAgcmV0dXJuCiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRva2VuaXplLnRva2VuaXplKHNlbGYuZmlsZS5yZWFkbGluZSwgc2VsZi50b2tlbmVhdGVyKQotICAgICAgICBleGNlcHQgdG9rZW5pemUuVG9rZW5FcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgdG9rZW5pemUuVG9rZW5FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBlcnJwcmludCgiJXI6IFRva2VuIEVycm9yOiAlcyIgJSAoc2VsZi5mbmFtZSwgbXNnKSkKICAgICAgICAgICAgIHNlbGYubmVycm9ycyA9IHNlbGYubmVycm9ycyArIDEKICAgICAgICAgcmV0dXJuIHNlbGYubmVycm9ycyA9PSAwCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NsYXNzZml4LnB5IGIvVG9vbHMvc2NyaXB0cy9jbGFzc2ZpeC5weQppbmRleCBkMzA3MDBmLi5mNjVlNjMwIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2NsYXNzZml4LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvY2xhc3NmaXgucHkKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBiYWQgPSAwCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiBjYW5ub3QgbGlzdCBkaXJlY3Rvcnk6ICVyXG4nICUgKGRpcm5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgbmFtZXMuc29ydCgpCkBAIC04Myw3ICs4Myw3IEBACiAjIyAgZGJnKCdmaXgoJXIpXG4nICUgKGZpbGVuYW1lLCkpCiAgICAgdHJ5OgogICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3InKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiBjYW5ub3Qgb3BlbjogJXJcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgICAgIGlmIGcgaXMgTm9uZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGcgPSBvcGVuKHRlbXBuYW1lLCAndycpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBlcnIoJyVzOiBjYW5ub3QgY3JlYXRlOiAlclxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKQEAgLTEzMCwxNyArMTMwLDE3IEBACiAgICAgdHJ5OgogICAgICAgICBzdGF0YnVmID0gb3Muc3RhdChmaWxlbmFtZSkKICAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwNzc3NykKLSAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCVyKVxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKICAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogd2FybmluZzogYmFja3VwIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICMgTm93IG1vdmUgdGhlIHRlbXAgZmlsZSB0byB0aGUgb3JpZ2luYWwgZmlsZQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiByZW5hbWUgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgIyBSZXR1cm4gc3VjY2VzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NsZWFuZnV0dXJlLnB5IGIvVG9vbHMvc2NyaXB0cy9jbGVhbmZ1dHVyZS5weQppbmRleCAzZjJkYTNhLi4wZTkwY2QzIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL2NsZWFuZnV0dXJlLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvY2xlYW5mdXR1cmUucHkKQEAgLTU5LDcgKzU5LDcgQEAKICAgICBnbG9iYWwgdmVyYm9zZSwgcmVjdXJzZSwgZHJ5cnVuCiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJkcnYiKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgZXJycHJpbnQobXNnKQogICAgICAgICByZXR1cm4KICAgICBmb3IgbywgYSBpbiBvcHRzOgpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICBwcmludCAiY2hlY2tpbmciLCBmaWxlLCAiLi4uIiwKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIGVycnByaW50KCIlcjogSS9PIEVycm9yOiAlcyIgJSAoZmlsZSwgc3RyKG1zZykpKQogICAgICAgICByZXR1cm4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jdnNmaWxlcy5weSBiL1Rvb2xzL3NjcmlwdHMvY3ZzZmlsZXMucHkKaW5kZXggNTNiNDI5NC4uZWFjNTk0NSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9jdnNmaWxlcy5weQorKysgYi9Ub29scy9zY3JpcHRzL2N2c2ZpbGVzLnB5CkBAIC0yMCw3ICsyMCw3IEBACiBkZWYgbWFpbigpOgogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAibjoiKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHByaW50IF9fZG9jX18sCiAgICAgICAgIHJldHVybiAxCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2R1dHJlZS5weSBiL1Rvb2xzL3NjcmlwdHMvZHV0cmVlLnB5CmluZGV4IGQ5MzhhZTEuLmM5ZjZlYTggMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZHV0cmVlLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZHV0cmVlLnB5CkBAIC0xOCw3ICsxOCw3IEBACiAgICAgICAgIHRvdGFsLCBkID0gc3RvcmUoc2l6ZSwgY29tcHMsIHRvdGFsLCBkKQogICAgIHRyeToKICAgICAgICAgZGlzcGxheSh0b3RhbCwgZCkKLSAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQSVBFOgogICAgICAgICAgICAgcmFpc2UKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5IGIvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CmluZGV4IDk3ZjYzMzEuLjhmZGM1MmIgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKQEAgLTIzLDcgKzIzLDcgQEAKIGRlZiBtYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJsaCIpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICB1c2FnZShtc2cpCiAgICAgICAgIHJldHVybiAyCiAgICAgaWYgbm90IGFyZ3M6CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIHJldHVybiBwcm9jZXNzZGlyKGZpbGVuYW1lLCBsaXN0bmFtZXMpCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IG9wZW46ICVzXG4iICUgbXNnKQogICAgICAgICByZXR1cm4gMQogICAgIGcgPSB0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnMoZnAucmVhZGxpbmUpCkBAIC03MCw3ICs3MCw3IEBACiBkZWYgcHJvY2Vzc2RpcihkaXIsIGxpc3RuYW1lcyk6CiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IGxpc3QgZGlyZWN0b3J5OiAlc1xuIiAlIGRpcikKICAgICAgICAgcmV0dXJuIDEKICAgICBmaWxlcyA9IFtdCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5IGIvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQppbmRleCA4ZGQ0YmZiLi5mMjMzMTZkIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKQEAgLTE0LDcgKzE0LDcgQEAKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnJykKICAgICAgICAgaWYgbGVuKGFyZ3MpIDwgMjoKICAgICAgICAgICAgIHJhaXNlIGdldG9wdC5HZXRvcHRFcnJvcignbm90IGVub3VnaCBhcmd1bWVudHMnLCBOb25lKQotICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHByaW50ICd1c2FnZTogZmluZGxpbmtzdG8gcGF0dGVybiBkaXJlY3RvcnkgLi4uJwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maW5kbm9jb2RpbmcucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRub2NvZGluZy5weQppbmRleCA1MzdmMGExLi4yOGEyOTlhIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpbmRub2NvZGluZy5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpbmRub2NvZGluZy5weQpAQCAtNzgsNyArNzgsNyBAQAogCiB0cnk6CiAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnY2QnKQotZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCBtc2cKICAgICBwcmludCA+PnN5cy5zdGRlcnIsIHVzYWdlCiAgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5IGIvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKaW5kZXggNDMzYTQyNS4uMjllMGUxMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKQEAgLTYyLDcgKzYyLDcgQEAKIGRlZiBtYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdjcnM6JykKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignT3B0aW9ucyBlcnJvcjogJyArIHN0cihtc2cpICsgJ1xuJykKICAgICAgICAgdXNhZ2UoKQogICAgICAgICBzeXMuZXhpdCgyKQpAQCAtOTcsNyArOTcsNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihkaXJuYW1lICsgJzogY2Fubm90IGxpc3QgZGlyZWN0b3J5OiAnICsgc3RyKG1zZykgKyAnXG4nKQogICAgICAgICByZXR1cm4gMQogICAgIG5hbWVzLnNvcnQoKQpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICMgRmlsZSByZXBsYWNlbWVudCBtb2RlCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIGVycihmaWxlbmFtZSArICc6IGNhbm5vdCBvcGVuOiAnICsgc3RyKG1zZykgKyAnXG4nKQogICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgICAgIGlmIGcgaXMgTm9uZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGcgPSBvcGVuKHRlbXBuYW1lLCAndycpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBlcnIodGVtcG5hbWUrJzogY2Fubm90IGNyZWF0ZTogJysKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihtc2cpKydcbicpCkBAIC0xNzUsMTcgKzE3NSwxNyBAQAogICAgIHRyeToKICAgICAgICAgc3RhdGJ1ZiA9IG9zLnN0YXQoZmlsZW5hbWUpCiAgICAgICAgIG9zLmNobW9kKHRlbXBuYW1lLCBzdGF0YnVmW1NUX01PREVdICYgMDc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKHRlbXBuYW1lICsgJzogd2FybmluZzogY2htb2QgZmFpbGVkICgnICsgc3RyKG1zZykgKyAnKVxuJykKICAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKGZpbGVuYW1lICsgJzogd2FybmluZzogYmFja3VwIGZhaWxlZCAoJyArIHN0cihtc2cpICsgJylcbicpCiAgICAgIyBOb3cgbW92ZSB0aGUgdGVtcCBmaWxlIHRvIHRoZSBvcmlnaW5hbCBmaWxlCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZpbGVuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihmaWxlbmFtZSArICc6IHJlbmFtZSBmYWlsZWQgKCcgKyBzdHIobXNnKSArICcpXG4nKQogICAgICAgICByZXR1cm4gMQogICAgICMgUmV0dXJuIHN1Y2NlcwpAQCAtMjc2LDcgKzI3Niw3IEBACiBkZWYgYWRkc3Vic3Qoc3Vic3RmaWxlKToKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihzdWJzdGZpbGUsICdyJykKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKHN1YnN0ZmlsZSArICc6IGNhbm5vdCByZWFkIHN1YnN0ZmlsZTogJyArIHN0cihtc2cpICsgJ1xuJykKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBsaW5lbm8gPSAwCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpeGRpdi5weSBiL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CmluZGV4IGIyY2FiODguLjk4YjhhODEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CkBAIC0xNDAsNyArMTQwLDcgQEAKIGRlZiBtYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJobSIpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgogICAgICAgICB1c2FnZShtc2cpCiAgICAgICAgIHJldHVybiAyCiAgICAgZm9yIG8sIGEgaW4gb3B0czoKQEAgLTE4MSw3ICsxODEsNyBAQAogICAgIHByb2cgPSByZS5jb21waWxlKFBBVFRFUk4pCiAgICAgdHJ5OgogICAgICAgICBmID0gb3Blbih3YXJuaW5nc2ZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImNhbid0IG9wZW46ICVzXG4iICUgbXNnKQogICAgICAgICByZXR1cm4KICAgICB3YXJuaW5ncyA9IHt9CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICBhc3NlcnQgbGlzdCAjIGlmIHRoaXMgZmFpbHMsIHJlYWR3YXJuaW5ncygpIGlzIGJyb2tlbgogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJjYW4ndCBvcGVuOiAlc1xuIiAlIG1zZykKICAgICAgICAgcmV0dXJuIDEKICAgICBwcmludCAiSW5kZXg6IiwgZmlsZW5hbWUKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZml4aGVhZGVyLnB5IGIvVG9vbHMvc2NyaXB0cy9maXhoZWFkZXIucHkKaW5kZXggMWJmNWM1Mi4uOGU4YWM1OSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maXhoZWFkZXIucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maXhoZWFkZXIucHkKQEAgLTEyLDcgKzEyLDcgQEAKIGRlZiBwcm9jZXNzKGZpbGVuYW1lKToKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyVzOiBjYW5cJ3Qgb3BlbjogJXNcbicgJSAoZmlsZW5hbWUsIHN0cihtc2cpKSkKICAgICAgICAgcmV0dXJuCiAgICAgZGF0YSA9IGYucmVhZCgpCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgICAgIHJldHVybgogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3JykKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6IGNhblwndCB3cml0ZTogJXNcbicgJSAoZmlsZW5hbWUsIHN0cihtc2cpKSkKICAgICAgICAgcmV0dXJuCiAgICAgc3lzLnN0ZGVyci53cml0ZSgnUHJvY2Vzc2luZyAlcyAuLi5cbicgJSBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZml4bm90aWNlLnB5IGIvVG9vbHMvc2NyaXB0cy9maXhub3RpY2UucHkKaW5kZXggMGFlNDg3Mi4uZWVkZjViYSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maXhub3RpY2UucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maXhub3RpY2UucHkKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaHYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2hlbHAnLCAnb2xkbm90aWNlPScsICduZXdub3RpY2U9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkcnktcnVuJywgJ3ZlcmJvc2UnXSkKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHVzYWdlKDEsIG1zZykKIAogICAgIGZvciBvcHQsIGFyZyBpbiBvcHRzOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maXhwcy5weSBiL1Rvb2xzL3NjcmlwdHMvZml4cHMucHkKaW5kZXggMmZmMTVmNC4uYzg1OGU1OSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maXhwcy5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpeHBzLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAgICAgZm9yIGZpbGVuYW1lIGluIHN5cy5hcmd2WzE6XToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQgZmlsZW5hbWUsICc6IGNhblwndCBvcGVuIDonLCBtc2cKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZnRwbWlycm9yLnB5IGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKaW5kZXggY2FhZGUxNi4uMzllZjE4ZSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBnbG9iYWwgdmVyYm9zZSwgaW50ZXJhY3RpdmUsIG1hYywgcm1vaywgbm9sb2dpbgogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnYTpiaWw6bW5wOnFyczp2JykKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHVzYWdlKG1zZykKICAgICBsb2dpbiA9ICcnCiAgICAgcGFzc3dkID0gJycKQEAgLTEwOCwxMyArMTA4LDEzIEBACiAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICdDcmVhdGluZyBsb2NhbCBkaXJlY3RvcnknLCByZXByKGxvY2FsZGlyKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtYWtlZGlyKGxvY2FsZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50ICJGYWlsZWQgdG8gZXN0YWJsaXNoIGxvY2FsIGRpcmVjdG9yeSIsIHJlcHIobG9jYWxkaXIpCiAgICAgICAgICAgICByZXR1cm4KICAgICBpbmZvZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4obG9jYWxkaXIsICcubWlycm9yaW5mbycpCiAgICAgdHJ5OgogICAgICAgICB0ZXh0ID0gb3BlbihpbmZvZmlsZW5hbWUsICdyJykucmVhZCgpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIHRleHQgPSAne30nCiAgICAgdHJ5OgogICAgICAgICBpbmZvID0gZXZhbCh0ZXh0KQpAQCAtMTkwLDEzICsxOTAsMTMgQEAKICAgICAgICAgICAgICAgICBwcmludCAiQ3JlYXRpbmcgc3ltbGluayAlciAtPiAlciIgJSAoZmlsZW5hbWUsIGxpbmt0bykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGxpbmt0bywgdGVtcG5hbWUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHByaW50ICJDYW4ndCBjcmVhdGUgJXI6ICVzIiAlICh0ZW1wbmFtZSwgbXNnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKHRlbXBuYW1lLCAnd2InKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwcmludCAiQ2FuJ3QgY3JlYXRlICVyOiAlcyIgJSAodGVtcG5hbWUsIG1zZykKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgdmVyYm9zZToKQEAgLTIwOSw3ICsyMDksNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYucmV0cmJpbmFyeSgnUkVUUiAnICsgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwMS53cml0ZSwgOCoxMDI0KQotICAgICAgICAgICAgZXhjZXB0IGZ0cGxpYi5lcnJvcl9wZXJtLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgZnRwbGliLmVycm9yX3Blcm0gYXMgbXNnOgogICAgICAgICAgICAgICAgIHByaW50IG1zZwogICAgICAgICAgICAgdDEgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgYnl0ZXMgPSBmcC50ZWxsKCkKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgICAgICAgICAgcGFzcyAgICAgICAgICAgICMgSWdub3JlIHRoZSBlcnJvcgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50ICJDYW4ndCByZW5hbWUgJXIgdG8gJXI6ICVzIiAlICh0ZW1wbmFtZSwgZnVsbG5hbWUsIG1zZykKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGluZm9bZmlsZW5hbWVdID0gaW5mb3N0dWZmCkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICAgICAgICAgIHByaW50ICdSZW1vdGUgY3dkJywgcmVwcihzdWJkaXIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYuY3dkKHN1YmRpcikKLSAgICAgICAgZXhjZXB0IGZ0cGxpYi5lcnJvcl9wZXJtLCBtc2c6CisgICAgICAgIGV4Y2VwdCBmdHBsaWIuZXJyb3JfcGVybSBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCAiQ2FuJ3QgY2hkaXIgdG8iLCByZXByKHN1YmRpciksICI6IiwgcmVwcihtc2cpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAnTWlycm9yaW5nIGFzJywgcmVwcihsb2NhbHN1YmRpcikKQEAgLTMyMiwxMyArMzIyLDEzIEBACiAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ybWRpcihmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCAiQ2FuJ3QgcmVtb3ZlIGxvY2FsIGRpcmVjdG9yeSAlcjogJXMiICUgKGZ1bGxuYW1lLCBtc2cpCiAgICAgICAgICAgICByZXR1cm4gMAogICAgIGVsc2U6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCAiQ2FuJ3QgcmVtb3ZlIGxvY2FsIGZpbGUgJXI6ICVzIiAlIChmdWxsbmFtZSwgbXNnKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICByZXR1cm4gMQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weSBiL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKaW5kZXggOTk1ZjJlZi4uN2YxNzA0NiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CkBAIC0zMiwxMyArMzIsMTMgQEAKICAgICAgICAgcmV0dXJuIDEKICAgICB0cnk6CiAgICAgICAgIG9zLm1rZGlyKG5ld3RyZWUsIDA3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgbmV3dHJlZSArICc6IGNhbm5vdCBta2RpcjonLCBtc2cKICAgICAgICAgcmV0dXJuIDEKICAgICBsaW5rbmFtZSA9IG9zLnBhdGguam9pbihuZXd0cmVlLCBsaW5rKQogICAgIHRyeToKICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4ob3MucGFyZGlyLCBvbGR0cmVlKSwgbGlua25hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgaWYgbm90IGxpbmtfbWF5X2ZhaWw6CiAgICAgICAgICAgICBwcmludCBsaW5rbmFtZSArICc6IGNhbm5vdCBzeW1saW5rOicsIG1zZwogICAgICAgICAgICAgcmV0dXJuIDEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBpZiBkZWJ1ZzogcHJpbnQgJ2xpbmtuYW1lcycsIChvbGQsIG5ldywgbGluaykKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihvbGQpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgb2xkICsgJzogd2FybmluZzogY2Fubm90IGxpc3RkaXI6JywgbXNnCiAgICAgICAgIHJldHVybgogICAgIGZvciBuYW1lIGluIG5hbWVzOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9sb2dtZXJnZS5weSBiL1Rvb2xzL3NjcmlwdHMvbG9nbWVyZ2UucHkKaW5kZXggZWRmZWMyYy4uZDA3ZGZjNiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9sb2dtZXJnZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2xvZ21lcmdlLnB5CkBAIC0xODAsNiArMTgwLDYgQEAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdHJ5OgogICAgICAgICBtYWluKCkKLSAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQSVBFOgogICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbWQ1c3VtLnB5IGIvVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkKaW5kZXggZTA0NWYxYS4uMTQwYzBiMyAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkKQEAgLTQzLDcgKzQzLDcgQEAKIGRlZiBwcmludHN1bShmaWxlbmFtZSwgb3V0PXN5cy5zdGRvdXQpOgogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCBybW9kZSkKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6IENhblwndCBvcGVuOiAlc1xuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBpZiBmbmZpbHRlcjoKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBtLnVwZGF0ZShkYXRhKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCclczogSS9PIGVycm9yOiAlc1xuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBvdXQud3JpdGUoJyVzICVzXG4nICUgKG0uaGV4ZGlnZXN0KCksIGZpbGVuYW1lKSkKQEAgLTcwLDcgKzcwLDcgQEAKICAgICBnbG9iYWwgZm5maWx0ZXIsIHJtb2RlLCBidWZzaXplCiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzLCAnYmx0czonKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6ICVzXG4lcycgJSAoc3lzLmFyZ3ZbMF0sIG1zZywgdXNhZ2UpKQogICAgICAgICByZXR1cm4gMgogICAgIGZvciBvLCBhIGluIG9wdHM6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL21ldGhmaXgucHkgYi9Ub29scy9zY3JpcHRzL21ldGhmaXgucHkKaW5kZXggYjgxODcxZi4uMTE4NzVhMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9tZXRoZml4LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbWV0aGZpeC5weQpAQCAtNTksNyArNTksNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IGNhbm5vdCBsaXN0IGRpcmVjdG9yeTogJXJcbicgJSAoZGlybmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBuYW1lcy5zb3J0KCkKQEAgLTgwLDcgKzgwLDcgQEAKICMjICBkYmcoJ2ZpeCglcilcbicgJSAoZmlsZW5hbWUsKSkKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IGNhbm5vdCBvcGVuOiAlclxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSkKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgICAgICAgaWYgZyBpcyBOb25lOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZyA9IG9wZW4odGVtcG5hbWUsICd3JykKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgIGVycignJXM6IGNhbm5vdCBjcmVhdGU6ICVyXG4nICUgKHRlbXBuYW1lLCBtc2cpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQpAQCAtMTQxLDE3ICsxNDEsMTcgQEAKICAgICB0cnk6CiAgICAgICAgIHN0YXRidWYgPSBvcy5zdGF0KGZpbGVuYW1lKQogICAgICAgICBvcy5jaG1vZCh0ZW1wbmFtZSwgc3RhdGJ1ZltTVF9NT0RFXSAmIDA3Nzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHdhcm5pbmc6IGNobW9kIGZhaWxlZCAoJXIpXG4nICUgKHRlbXBuYW1lLCBtc2cpKQogICAgICMgVGhlbiBtYWtlIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5hbCBmaWxlIGFzIGZpbGVuYW1lfgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBmaWxlbmFtZSArICd+JykKLSAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBiYWNrdXAgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgIyBOb3cgbW92ZSB0aGUgdGVtcCBmaWxlIHRvIHRoZSBvcmlnaW5hbCBmaWxlCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZpbGVuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHJlbmFtZSBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICAjIFJldHVybiBzdWNjZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkgYi9Ub29scy9zY3JpcHRzL25kaWZmLnB5CmluZGV4IDg4NzEyYjguLjJhZmMxMzIgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9uZGlmZi5weQpAQCAtNjEsNyArNjEsNyBAQAogZGVmIGZvcGVuKGZuYW1lKToKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBvcGVuKGZuYW1lLCAnVScpCi0gICAgZXhjZXB0IElPRXJyb3IsIGRldGFpbDoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBkZXRhaWw6CiAgICAgICAgIHJldHVybiBmYWlsKCJjb3VsZG4ndCBvcGVuICIgKyBmbmFtZSArICI6ICIgKyBzdHIoZGV0YWlsKSkKIAogIyBvcGVuIHR3byBmaWxlcyAmIHNwcmF5IHRoZSBkaWZmIHRvIHN0ZG91dDsgcmV0dXJuIGZhbHNlIGlmZiBhIHByb2JsZW0KQEAgLTg1LDcgKzg1LDcgQEAKICAgICBpbXBvcnQgZ2V0b3B0CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzLCAicXI6IikKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBkZXRhaWw6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBkZXRhaWw6CiAgICAgICAgIHJldHVybiBmYWlsKHN0cihkZXRhaWwpKQogICAgIG5vaXN5ID0gMQogICAgIHFzZWVuID0gcnNlZW4gPSAwCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkgYi9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKaW5kZXggN2Y2ZjE5MS4uYzU5YzBmMiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgIHN5cy5hcmd2WzBdKQogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaTonKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKG1zZyArICdcbicpCiAgICAgICAgIGVycih1c2FnZSkKICAgICAgICAgc3lzLmV4aXQoMikKQEAgLTY4LDcgKzY4LDcgQEAKICAgICBiYWQgPSAwCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiBjYW5ub3QgbGlzdCBkaXJlY3Rvcnk6ICVyXG4nICUgKGRpcm5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgbmFtZXMuc29ydCgpCkBAIC04OSw3ICs4OSw3IEBACiAjIyAgZGJnKCdmaXgoJXIpXG4nICUgKGZpbGVuYW1lLCkpCiAgICAgdHJ5OgogICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3InKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiBjYW5ub3Qgb3BlbjogJXJcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgbGluZSA9IGYucmVhZGxpbmUoKQpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgdGVtcG5hbWUgPSBvcy5wYXRoLmpvaW4oaGVhZCwgJ0AnICsgdGFpbCkKICAgICB0cnk6CiAgICAgICAgIGcgPSBvcGVuKHRlbXBuYW1lLCAndycpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBlcnIoJyVzOiBjYW5ub3QgY3JlYXRlOiAlclxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKQEAgLTEyMiwxNyArMTIyLDE3IEBACiAgICAgdHJ5OgogICAgICAgICBzdGF0YnVmID0gb3Muc3RhdChmaWxlbmFtZSkKICAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwNzc3NykKLSAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCVyKVxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKICAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogd2FybmluZzogYmFja3VwIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICMgTm93IG1vdmUgdGhlIHRlbXAgZmlsZSB0byB0aGUgb3JpZ2luYWwgZmlsZQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiByZW5hbWUgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgIyBSZXR1cm4gc3VjY2VzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkgYi9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKaW5kZXggODllZDllNi4uOWY0NDRmMiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQpAQCAtNDkxLDcgKzQ5MSw3IEBACiAgICAgaW1wb3J0IGdldG9wdAogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnY2Ryczp0OmUnKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnRXJyb3I6ICVzXG4nICUgbXNnKQogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHVzYWdlKQogICAgICAgICBzeXMuZXhpdCgyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9weXNvdXJjZS5weSBiL1Rvb2xzL3NjcmlwdHMvcHlzb3VyY2UucHkKaW5kZXggNzFlMGRlZC4uOThhNzhmMCAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy9weXNvdXJjZS5weQorKysgYi9Ub29scy9zY3JpcHRzL3B5c291cmNlLnB5CkBAIC0zMyw3ICszMyw3IEBACiBkZWYgX29wZW4oZnVsbHBhdGgpOgogICAgIHRyeToKICAgICAgICAgc2l6ZSA9IG9zLnN0YXQoZnVsbHBhdGgpLnN0X3NpemUKLSAgICBleGNlcHQgT1NFcnJvciwgZXJyOiAjIFBlcm1pc3Npb24gZGVuaWVkIC0gaWdub3JlIHRoZSBmaWxlCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOiAjIFBlcm1pc3Npb24gZGVuaWVkIC0gaWdub3JlIHRoZSBmaWxlCiAgICAgICAgIHByaW50X2RlYnVnKCIlczogcGVybWlzc2lvbiBkZW5pZWQ6ICVzIiAlIChmdWxscGF0aCwgZXJyKSkKICAgICAgICAgcmV0dXJuIE5vbmUKIApAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gb3BlbihmdWxscGF0aCwgJ3JVJykKLSAgICBleGNlcHQgSU9FcnJvciwgZXJyOiAjIEFjY2VzcyBkZW5pZWQsIG9yIGEgc3BlY2lhbCBmaWxlIC0gaWdub3JlIGl0CisgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOiAjIEFjY2VzcyBkZW5pZWQsIG9yIGEgc3BlY2lhbCBmaWxlIC0gaWdub3JlIGl0CiAgICAgICAgIHByaW50X2RlYnVnKCIlczogYWNjZXNzIGRlbmllZDogJXMiICUgKGZ1bGxwYXRoLCBlcnIpKQogICAgICAgICByZXR1cm4gTm9uZQogCkBAIC04MSw3ICs4MSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIGNvbXBpbGUoY29kZSwgZnVsbHBhdGgsICJleGVjIikKLSAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6CisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgIHByaW50X2RlYnVnKCIlczogY2Fubm90IGNvbXBpbGU6ICVzIiAlIChmdWxscGF0aCwgZXJyKSkKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcmVkZW1vLnB5IGIvVG9vbHMvc2NyaXB0cy9yZWRlbW8ucHkKaW5kZXggZGU3ZjNjNC4uYjliZmI5NiAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy9yZWRlbW8ucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9yZWRlbW8ucHkKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmbGFncygpKQogICAgICAgICAgICAgYmcgPSBzZWxmLnByb21wdGRpc3BsYXlbJ2JhY2tncm91bmQnXQogICAgICAgICAgICAgc2VsZi5zdGF0dXNkaXNwbGF5LmNvbmZpZyh0ZXh0PSIiLCBiYWNrZ3JvdW5kPWJnKQotICAgICAgICBleGNlcHQgcmUuZXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IHJlLmVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHNlbGYuY29tcGlsZWQgPSBOb25lCiAgICAgICAgICAgICBzZWxmLnN0YXR1c2Rpc3BsYXkuY29uZmlnKAogICAgICAgICAgICAgICAgICAgICB0ZXh0PSJyZS5lcnJvcjogJXMiICUgc3RyKG1zZyksCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5IGIvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQppbmRleCA1YWM5OGM3Li43MDI0MmNjIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKQEAgLTYxLDcgKzYxLDcgQEAKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImRydmgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImRyeXJ1biIsICJyZWN1cnNlIiwgInZlcmJvc2UiLCAiaGVscCJdKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgdXNhZ2UobXNnKQogICAgICAgICByZXR1cm4KICAgICBmb3IgbywgYSBpbiBvcHRzOgpAQCAtOTksNyArOTksNyBAQAogICAgICAgICBwcmludCAiY2hlY2tpbmciLCBmaWxlLCAiLi4uIiwKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIGVycnByaW50KCIlczogSS9PIEVycm9yOiAlcyIgJSAoZmlsZSwgc3RyKG1zZykpKQogICAgICAgICByZXR1cm4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9yZ3JlcC5weSBiL1Rvb2xzL3NjcmlwdHMvcmdyZXAucHkKaW5kZXggYjY0NDIwNi4uOWQzZDU5NSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9yZ3JlcC5weQorKysgYi9Ub29scy9zY3JpcHRzL3JncmVwLnB5CkBAIC0yMywxMSArMjMsMTEgQEAKICAgICBwYXR0ZXJuLCBmaWxlbmFtZSA9IGFyZ3MKICAgICB0cnk6CiAgICAgICAgIHByb2cgPSByZS5jb21waWxlKHBhdHRlcm4sIHJlZmxhZ3MpCi0gICAgZXhjZXB0IHJlLmVycm9yLCBtc2c6CisgICAgZXhjZXB0IHJlLmVycm9yIGFzIG1zZzoKICAgICAgICAgdXNhZ2UoImVycm9yIGluIHJlZ3VsYXIgZXhwcmVzc2lvbjogJXMiICUgc3RyKG1zZykpCiAgICAgdHJ5OgogICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgdXNhZ2UoImNhbid0IG9wZW4gJXM6ICVzIiAlIChyZXByKGZpbGVuYW1lKSwgc3RyKG1zZykpLCAxKQogICAgIGYuc2VlaygwLCAyKQogICAgIHBvcyA9IGYudGVsbCgpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3RleGkyaHRtbC5weSBiL1Rvb2xzL3NjcmlwdHMvdGV4aTJodG1sLnB5CmluZGV4IDNlY2FlZTYuLmQ4NDlkN2MgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvdGV4aTJodG1sLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvdGV4aTJodG1sLnB5CkBAIC01NTQsNyArNTU0LDcgQEAKICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmluY2x1ZGVkaXIsIGZpbGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50ICcqKiogQ2FuXCd0IG9wZW4gaW5jbHVkZSBmaWxlJywgcmVwcihmaWxlKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHByaW50ICchJypzZWxmLmRlYnVnZ2luZywgJy0tPiBmaWxlJywgcmVwcihmaWxlKQpAQCAtMTc5Nyw3ICsxNzk3LDcgQEAKICAgICAgICAgICAgIHByaW50Pj5mcCwgJycKICAgICAgICAgICAgIHNlbGYuZHVtcGZpbGVzKGZwKQogICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCBwcm9qZWN0ZmlsZSwgJzonLCBtc2cKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKQEAgLTE4MjIsNyArMTgyMiw3IEBACiAgICAgICAgICAgICBwcmludD4+ZnAsICc8L0JPRFk+JwogICAgICAgICAgICAgcHJpbnQ+PmZwLCAnPC9IVE1MPicKICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQgY29udGVudGZpbGUsICc6JywgbXNnCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogCkBAIC0xODQ0LDcgKzE4NDQsNyBAQAogICAgICAgICAgICAgcHJpbnQ+PmZwLCAnPC9CT0RZPicKICAgICAgICAgICAgIHByaW50Pj5mcCwgJzwvSFRNTD4nCiAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50IGluZGV4ZmlsZSAgLCAnOicsIG1zZwogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIApAQCAtMjA2Myw3ICsyMDYzLDcgQEAKIAogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZpbGUsICdyJykKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgZmlsZSwgJzonLCBtc2cKICAgICAgICAgc3lzLmV4aXQoMSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weSBiL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKaW5kZXggNGZiMTc5OC4uYTdhMjA5OCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQorKysgYi9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIHByaW50ICJjcmVhdGluZyBzbGF2ZSBkaXJlY3RvcnkiLCBzbGF2ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ta2RpcihzbGF2ZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCAiY2FuJ3QgbWFrZSBzbGF2ZSBkaXJlY3RvcnkiLCBzbGF2ZSwgIjoiLCBtc2cKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weSBiL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKaW5kZXggOWJkZjIzNS4uZTRhMmNjMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQorKysgYi9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CkBAIC0xMiw3ICsxMiw3IEBACiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInQ6IikKICAgICAgICAgaWYgbm90IGFyZ3M6CiAgICAgICAgICAgICByYWlzZSBnZXRvcHQuZXJyb3IsICJBdCBsZWFzdCBvbmUgZmlsZSBhcmd1bWVudCByZXF1aXJlZCIKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50IG1zZwogICAgICAgICBwcmludCAidXNhZ2U6Iiwgc3lzLmFyZ3ZbMF0sICJbLXQgdGFid2lkdGhdIGZpbGUgLi4uIgogICAgICAgICByZXR1cm4KQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCiAgICAgICAgIHRleHQgPSBmLnJlYWQoKQogICAgICAgICBmLmNsb3NlKCkKLSAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQgIiVyOiBJL08gZXJyb3I6ICVzIiAlIChmaWxlbmFtZSwgbXNnKQogICAgICAgICByZXR1cm4KICAgICBuZXd0ZXh0ID0gdGV4dC5leHBhbmR0YWJzKHRhYnNpemUpCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL2NvbXBhcmVjb2RlY3MucHkgYi9Ub29scy91bmljb2RlL2NvbXBhcmVjb2RlY3MucHkKaW5kZXggY2Q0MTdhNC4uYTI5MzI4MyAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9jb21wYXJlY29kZWNzLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvY29tcGFyZWNvZGVjcy5weQpAQCAtMTgsMTEgKzE4LDExIEBACiAgICAgICAgIHUgPSB1bmljaHIoaSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYzEgPSB1LmVuY29kZShlbmNvZGluZzEpCi0gICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3IsIHJlYXNvbjoKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvciBhcyByZWFzb246CiAgICAgICAgICAgICBjMSA9ICc8dW5kZWZpbmVkPicKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYzIgPSB1LmVuY29kZShlbmNvZGluZzIpCi0gICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3IsIHJlYXNvbjoKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvciBhcyByZWFzb246CiAgICAgICAgICAgICBjMiA9ICc8dW5kZWZpbmVkPicKICAgICAgICAgaWYgYzEgIT0gYzI6CiAgICAgICAgICAgICBwcmludCAnICogZW5jb2RpbmcgbWlzbWF0Y2ggZm9yIDB4JTA0WDogJS0xNHIgIT0gJXInICUgXApkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weSBiL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKaW5kZXggZGFiY2Q3Mi4uNDdkODFlYiAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQorKysgYi9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHJldHVybiAnKCcgKyAnLCAnLmpvaW4oWycweCUwKlgnICUgKHByZWNpc2lvbiwgaXRlbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdF0pICsgJyknCi0gICAgZXhjZXB0IFR5cGVFcnJvciwgd2h5OgorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgd2h5OgogICAgICAgICBwcmludCAnKiBmYWlsZWQgdG8gY29udmVydCAlcjogJXMnICUgKHQsIHdoeSkKICAgICAgICAgcmFpc2UKIApAQCAtMzkzLDcgKzM5Myw3IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHB5bWFwKG1hcHBhdGhuYW1lLCBtYXAsIGRpcnByZWZpeCArIGNvZGVmaWxlLG5hbWUsY29tbWVudHMpCiAgICAgICAgICAgICAgICAgbWFyc2hhbG1hcChtYXBwYXRobmFtZSwgbWFwLCBkaXJwcmVmaXggKyBtYXJzaGFsZmlsZSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIHdoeToKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgcHJpbnQgJyogY29udmVyc2lvbiBmYWlsZWQ6ICVzJyAlIHdoeQogICAgICAgICAgICAgcmFpc2UKIApAQCAtNDE0LDcgKzQxNCw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnQgJyogbWFwIGlzIGVtcHR5OyBza2lwcGluZycKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHltYXAobWFwbmFtZSwgbWFwLCBkaXJwcmVmaXggKyBjb2RlZmlsZSxuYW1lLGNvbW1lbnRzKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgd2h5OgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBwcmludCAnKiBjb252ZXJzaW9uIGZhaWxlZDogJXMnICUgd2h5CiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL2xpc3Rjb2RlY3MucHkgYi9Ub29scy91bmljb2RlL2xpc3Rjb2RlY3MucHkKaW5kZXggMTlkMjFlMS4uYzE5NmNlZCAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9saXN0Y29kZWNzLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvbGlzdGNvZGVjcy5weQpAQCAtMjIsNyArMjIsNyBAQAogICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6CiAgICAgICAgICAgICAjIENvZGVjIG5vdCBmb3VuZAogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgcmVhc29uOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIHJlYXNvbjoKICAgICAgICAgICAgICMgUHJvYmFibHkgYW4gZXJyb3IgZnJvbSBpbXBvcnRpbmcgdGhlIGNvZGVjOyBzdGlsbCBpdCdzCiAgICAgICAgICAgICAjIGEgdmFsaWQgY29kZSBuYW1lCiAgICAgICAgICAgICBpZiBfZGVidWc6CmRpZmYgLS1naXQgYS9Ub29scy92ZXJzaW9uY2hlY2svcHl2ZXJzaW9uY2hlY2sucHkgYi9Ub29scy92ZXJzaW9uY2hlY2svcHl2ZXJzaW9uY2hlY2sucHkKaW5kZXggMTQ0NjY1My4uMDBlYTQ5NiAxMDA2NDQKLS0tIGEvVG9vbHMvdmVyc2lvbmNoZWNrL3B5dmVyc2lvbmNoZWNrLnB5CisrKyBiL1Rvb2xzL3ZlcnNpb25jaGVjay9weXZlcnNpb25jaGVjay5weQpAQCAtNDksNyArNDksNyBAQAogICAgICAgICBwcmludCAnICBDaGVja2luZyAlcycldXJsCiAgICAgdHJ5OgogICAgICAgICBmcCA9IHVybGxpYi51cmxvcGVuKHVybCkKLSAgICBleGNlcHQgSU9FcnJvciwgYXJnOgorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGFyZzoKICAgICAgICAgaWYgdmVyYm9zZSA+PSBWRVJCT1NFX0VBQ0hGSUxFOgogICAgICAgICAgICAgcHJpbnQgJyAgICBDYW5ub3Qgb3BlbjonLCBhcmcKICAgICAgICAgcmV0dXJuIC0xLCBOb25lLCBOb25lCmRpZmYgLS1naXQgYS9Ub29scy93ZWJjaGVja2VyL3djZ3VpLnB5IGIvVG9vbHMvd2ViY2hlY2tlci93Y2d1aS5weQppbmRleCA5NmFlZDBhLi5jNmUyMTZjIDEwMDc1NQotLS0gYS9Ub29scy93ZWJjaGVja2VyL3djZ3VpLnB5CisrKyBiL1Rvb2xzL3dlYmNoZWNrZXIvd2NndWkucHkKQEAgLTc0LDcgKzc0LDcgQEAKIGRlZiBtYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICd0Om06cXZhJykKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHN5cy5zdGRvdXQgPSBzeXMuc3RkZXJyCiAgICAgICAgIHByaW50IG1zZwogICAgICAgICBwcmludCBfX2RvY19fJXZhcnMod2ViY2hlY2tlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL3dlYmNoZWNrZXIvd2ViY2hlY2tlci5weSBiL1Rvb2xzL3dlYmNoZWNrZXIvd2ViY2hlY2tlci5weQppbmRleCA5MjNlOGU2Li4xMGU5M2M3IDEwMDc1NQotLS0gYS9Ub29scy93ZWJjaGVja2VyL3dlYmNoZWNrZXIucHkKKysrIGIvVG9vbHMvd2ViY2hlY2tlci93ZWJjaGVja2VyLnB5CkBAIC0xNTMsNyArMTUzLDcgQEAKIAogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnUmQ6bTpucXI6dDp2eGEnKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKICAgICAgICAgcHJpbnQgbXNnCiAgICAgICAgIHByaW50IF9fZG9jX18lZ2xvYmFscygpCkBAIC0zMzUsNyArMzM1LDcgQEAKICAgICAgICAgcnAuc2V0X3VybCh1cmwpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJwLnJlYWQoKQotICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpLCBtc2c6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgbXNnOgogICAgICAgICAgICAgc2VsZi5ub3RlKDEsICJJL08gZXJyb3IgcGFyc2luZyAlczogJXMiLCB1cmwsIG1zZykKIAogICAgIGRlZiBydW4oc2VsZik6CkBAIC00MDIsNyArNDAyLDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwYWdlID0gc2VsZi5nZXRwYWdlKHVybF9wYWlyKQotICAgICAgICBleGNlcHQgc2dtbGxpYi5TR01MUGFyc2VFcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgc2dtbGxpYi5TR01MUGFyc2VFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBtc2cgPSBzZWxmLnNhbml0aXplKG1zZykKICAgICAgICAgICAgIHNlbGYubm90ZSgwLCAiRXJyb3IgcGFyc2luZyAlczogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdF91cmwodXJsX3BhaXIpLCBtc2cpCkBAIC01NDEsNyArNTQxLDcgQEAKICAgICAgICAgdXJsLCBmcmFnbWVudCA9IHVybF9wYWlyCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBzZWxmLnVybG9wZW5lci5vcGVuKHVybCkKLSAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSwgbXNnOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIG1zZzoKICAgICAgICAgICAgIG1zZyA9IHNlbGYuc2FuaXRpemUobXNnKQogICAgICAgICAgICAgc2VsZi5ub3RlKDAsICJFcnJvciAlcyIsIG1zZykKICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZSA+IDA6CkBAIC03NTksNyArNzU5LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5vcGVuX2ZpbGUodXJsICsgImluZGV4Lmh0bWwiKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihwYXRoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190YiA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvciwgbXNnLCBleGNfdGIKICAgICAgICAgICAgIG5hbWVzLnNvcnQoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvd2ViY2hlY2tlci93ZWJzdWNrZXIucHkgYi9Ub29scy93ZWJjaGVja2VyL3dlYnN1Y2tlci5weQppbmRleCBlZjJmYTQ0Li4yMzljYjUyIDEwMDc1NQotLS0gYS9Ub29scy93ZWJjaGVja2VyL3dlYnN1Y2tlci5weQorKysgYi9Ub29scy93ZWJjaGVja2VyL3dlYnN1Y2tlci5weQpAQCAtMjEsNyArMjEsNyBAQAogICAgIHZlcmJvc2UgPSB3ZWJjaGVja2VyLlZFUkJPU0UKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInF2IikKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50IG1zZwogICAgICAgICBwcmludCAidXNhZ2U6Iiwgc3lzLmFyZ3ZbMF0sICJbLXF2XSAuLi4gW3Jvb3R1cmxdIC4uLiIKICAgICAgICAgcmV0dXJuIDIKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCJzYXZlZCAlcyIsIHBhdGgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgiZGlkbid0IHNhdmUgJXM6ICVzIiwgcGF0aCwgc3RyKG1zZykpCiAKICAgICBkZWYgc2F2ZWZpbGVuYW1lKHNlbGYsIHVybCk6CmRpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CmluZGV4IDFmNTI5ZTMuLmI0MTY1MTggMTAwNjQ0Ci0tLSBhL3NldHVwLnB5CisrKyBiL3NldHVwLnB5CkBAIC0xODYsNyArMTg2LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBidWlsZF9leHQuYnVpbGRfZXh0ZW5zaW9uKHNlbGYsIGV4dCkKLSAgICAgICAgZXhjZXB0IChDQ29tcGlsZXJFcnJvciwgRGlzdHV0aWxzRXJyb3IpLCB3aHk6CisgICAgICAgIGV4Y2VwdCAoQ0NvbXBpbGVyRXJyb3IsIERpc3R1dGlsc0Vycm9yKSBhcyB3aHk6CiAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCdXQVJOSU5HOiBidWlsZGluZyBvZiBleHRlbnNpb24gIiVzIiBmYWlsZWQ6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHQubmFtZSwgc3lzLmV4Y19pbmZvKClbMV0pKQogICAgICAgICAgICAgcmV0dXJuCkBAIC0yMDgsNyArMjA4LDcgQEAKICAgICAgICAgICAgIHNlbGYuZ2V0X2V4dF9maWxlbmFtZShzZWxmLmdldF9leHRfZnVsbG5hbWUoZXh0Lm5hbWUpKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wLmxvYWRfZHluYW1pYyhleHQubmFtZSwgZXh0X2ZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIHdoeToKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIHdoeToKICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJyoqKiBXQVJOSU5HOiByZW5hbWluZyAiJXMiIHNpbmNlIGltcG9ydGluZyBpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICVzJyAlIChleHQubmFtZSwgd2h5KSwgbGV2ZWw9MykKICAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5pbnBsYWNlCg==