ZGlmZiAtLWdpdCBhL0xpYi9pbWFwbGliLnB5IGIvTGliL2ltYXBsaWIucHkKaW5kZXggMWM5YmUyNS4uZjdiMDhhNiAxMDA2NDQKLS0tIGEvTGliL2ltYXBsaWIucHkKKysrIGIvTGliL2ltYXBsaWIucHkKQEAgLTU2NiwxMCArNTY2LDEwIEBACiAgICAgICAgICh0eXAsIFtkYXRhXSkgPSA8aW5zdGFuY2U+LnNvcnQoc29ydF9jcml0ZXJpYSwgY2hhcnNldCwgc2VhcmNoX2NyaXRlcmlhLCAuLi4pCiAgICAgICAgICIiIgogICAgICAgICBuYW1lID0gJ1NPUlQnCi0gICAgICAgICNpZiBub3QgbmFtZSBpbiBzZWxmLmNhcGFiaWxpdGllczoJIyBMZXQgdGhlIHNlcnZlciBkZWNpZGUhCi0gICAgICAgICMJcmFpc2Ugc2VsZi5lcnJvcigndW5pbXBsZW1lbnRlZCBleHRlbnNpb24gY29tbWFuZDogJXMnICUgbmFtZSkKKyAgICAgICAgI2lmIG5vdCBuYW1lIGluIHNlbGYuY2FwYWJpbGl0aWVzOiAgICAgICMgTGV0IHRoZSBzZXJ2ZXIgZGVjaWRlIQorICAgICAgICAjICAgICAgIHJhaXNlIHNlbGYuZXJyb3IoJ3VuaW1wbGVtZW50ZWQgZXh0ZW5zaW9uIGNvbW1hbmQ6ICVzJyAlIG5hbWUpCiAgICAgICAgIGlmIChzb3J0X2NyaXRlcmlhWzBdLHNvcnRfY3JpdGVyaWFbLTFdKSAhPSAoJygnLCcpJyk6Ci0gICAgICAgIAlzb3J0X2NyaXRlcmlhID0gJyglcyknICUgc29ydF9jcml0ZXJpYQorICAgICAgICAgICAgc29ydF9jcml0ZXJpYSA9ICcoJXMpJyAlIHNvcnRfY3JpdGVyaWEKICAgICAgICAgdHlwLCBkYXQgPSBhcHBseShzZWxmLl9zaW1wbGVfY29tbWFuZCwgKG5hbWUsIHNvcnRfY3JpdGVyaWEsIGNoYXJzZXQpICsgc2VhcmNoX2NyaXRlcmlhKQogICAgICAgICByZXR1cm4gc2VsZi5fdW50YWdnZWRfcmVzcG9uc2UodHlwLCBkYXQsIG5hbWUpCiAKQEAgLTU4MCw3ICs1ODAsNyBAQAogICAgICAgICAodHlwLCBbZGF0YV0pID0gPGluc3RhbmNlPi5zdGF0dXMobWFpbGJveCwgbmFtZXMpCiAgICAgICAgICIiIgogICAgICAgICBuYW1lID0gJ1NUQVRVUycKLSAgICAgICAgI2lmIHNlbGYuUFJPVE9DT0xfVkVSU0lPTiA9PSAnSU1BUDQnOgkjIExldCB0aGUgc2VydmVyIGRlY2lkZSEKKyAgICAgICAgI2lmIHNlbGYuUFJPVE9DT0xfVkVSU0lPTiA9PSAnSU1BUDQnOiAgICMgTGV0IHRoZSBzZXJ2ZXIgZGVjaWRlIQogICAgICAgICAjICAgIHJhaXNlIHNlbGYuZXJyb3IoJyVzIHVuaW1wbGVtZW50ZWQgaW4gSU1BUDQgKG9idGFpbiBJTUFQNHJldjEgc2VydmVyLCBvciByZS1jb2RlKScgJSBuYW1lKQogICAgICAgICB0eXAsIGRhdCA9IHNlbGYuX3NpbXBsZV9jb21tYW5kKG5hbWUsIG1haWxib3gsIG5hbWVzKQogICAgICAgICByZXR1cm4gc2VsZi5fdW50YWdnZWRfcmVzcG9uc2UodHlwLCBkYXQsIG5hbWUpCkBAIC02NDcsNyArNjQ3LDcgQEAKICAgICAgICAgUmV0dXJucyByZXNwb25zZSBhcHByb3ByaWF0ZSB0byBleHRlbnNpb24gY29tbWFuZCBgbmFtZScuCiAgICAgICAgICIiIgogICAgICAgICBuYW1lID0gbmFtZS51cHBlcigpCi0gICAgICAgICNpZiBub3QgbmFtZSBpbiBzZWxmLmNhcGFiaWxpdGllczoJIyBMZXQgdGhlIHNlcnZlciBkZWNpZGUhCisgICAgICAgICNpZiBub3QgbmFtZSBpbiBzZWxmLmNhcGFiaWxpdGllczogICAgICAjIExldCB0aGUgc2VydmVyIGRlY2lkZSEKICAgICAgICAgIyAgICByYWlzZSBzZWxmLmVycm9yKCd1bmtub3duIGV4dGVuc2lvbiBjb21tYW5kOiAlcycgJSBuYW1lKQogICAgICAgICBpZiBub3QgQ29tbWFuZHMuaGFzX2tleShuYW1lKToKICAgICAgICAgICAgIENvbW1hbmRzW25hbWVdID0gKHNlbGYuc3RhdGUsKQpkaWZmIC0tZ2l0IGEvTGliL3NyZV9jb21waWxlLnB5IGIvTGliL3NyZV9jb21waWxlLnB5CmluZGV4IGJhMGE4NzEuLjRkYzExYTEgMTAwNjQ0Ci0tLSBhL0xpYi9zcmVfY29tcGlsZS5weQorKysgYi9MaWIvc3JlX2NvbXBpbGUucHkKQEAgLTI4Niw3ICsyODYsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaGVhZGVyLmFwcGVuZChtYXBwaW5nWzIqaV0rMjU2Km1hcHBpbmdbMippKzFdKQogICAgIGRhdGFbMDowXSA9IGhlYWRlcgotICAgIHJldHVybiBbKEJJR0NIQVJTRVQsIGRhdGEpXSAgICAKKyAgICByZXR1cm4gWyhCSUdDSEFSU0VULCBkYXRhKV0KIAogZGVmIF9zaW1wbGUoYXYpOgogICAgICMgY2hlY2sgaWYgYXYgaXMgYSAic2ltcGxlIiBvcGVyYXRvcgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaXJjYWNoZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGlyY2FjaGUucHkKaW5kZXggZDZlM2MyNC4uZmEzZmU1NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaXJjYWNoZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RpcmNhY2hlLnB5CkBAIC0zMSwxNSArMzEsMTUgQEAKICAgICAgICAgICAgIG9zLnJtZGlyKGZuYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQotICAgIAorCiAgICAgZGVmIHRlc3RfbGlzdGRpcihzZWxmKToKICAgICAgICAgIyMgU1VDQ0VTU0ZVTCBDQVNFUwogICAgICAgICBlbnRyaWVzID0gZGlyY2FjaGUubGlzdGRpcihzZWxmLnRlbXBkaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVudHJpZXMsIFtdKQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCBjYWNoZSBpcyBhY3R1YWxseSBjYWNoaW5nLCBub3QganVzdCBwYXNzaW5nIHRocm91Z2guCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikgaXMgZW50cmllcykgCi0gICAgICAgIAorICAgICAgICBzZWxmLmFzc2VydF8oZGlyY2FjaGUubGlzdGRpcihzZWxmLnRlbXBkaXIpIGlzIGVudHJpZXMpCisKICAgICAgICAgIyBTYWRseSwgZGlyY2FjaGUgaGFzIHRoZSBzYW1lIGdyYW51bGFyaXR5IGFzIHN0YXQubXRpbWUsIGFuZCBzbwogICAgICAgICAjIGNhbid0IG5vdGljZSBhbnkgY2hhbmdlcyB0aGF0IG9jY3VyZWQgd2l0aGluIDEgc2VjIG9mIHRoZSBsYXN0CiAgICAgICAgICMgdGltZSBpdCBleGFtaW5lZCBhIGRpcmVjdG9yeS4KQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgZW50cmllcyA9IGRpcmNhY2hlLmxpc3RkaXIoc2VsZi50ZW1wZGlyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlbnRyaWVzLCBbJ3Rlc3QxJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0XyhkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikgaXMgZW50cmllcykKLSAgICAgICAgCisKICAgICAgICAgIyMgVU5TVUNDRVNTRlVMIENBU0VTCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRpcmNhY2hlLmxpc3RkaXIoc2VsZi50ZW1wZGlyKyJfbm9uZXhpc3RlbnQiKSwgW10pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkgYi9MaWIvdGVzdC90ZXN0X29zLnB5CmluZGV4IGMxODg5ZTEuLjQ3MGUzNDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcy5weQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBpZiBub3QgaGFzYXR0cihvcywgInRtcG5hbSIpOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuY2hlY2tfdGVtcGZpbGUob3MudG1wbmFtKCkpCi0gICAgICAgIAorCiAKIAogcnVuX3VuaXR0ZXN0KFRlbXBvcmFyeUZpbGVUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5IGIvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKaW5kZXggNGZjNWY0MC4uZjc5ZWI0ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKQEAgLTUsNyArNSw3IEBACiBmcm9tIHF1b3ByaSBpbXBvcnQgKgogCiAKLQwKKwogRU5DU0FNUExFID0gIiIiXAogSGVyZSdzIGEgYnVuY2ggb2Ygc3BlY2lhbD0yMAogCkBAIC0yNSw4ICsyNSw4IEBACiAiIiIKIAogIyBGaXJzdCBsaW5lIGVuZHMgd2l0aCBhIHNwYWNlCi1ERUNTQU1QTEUgPSAiIiJcCi1IZXJlJ3MgYSBidW5jaCBvZiBzcGVjaWFsIAorREVDU0FNUExFID0gIkhlcmUncyBhIGJ1bmNoIG9mIHNwZWNpYWwgXG4iICsgXAorIiIiXAogCiChoqOkpaanqKkKIKqrrK2ur7CxsrMKQEAgLTQ0LDcgKzQ0LDcgQEAKICIiIgogCiAKLQwKKwogY2xhc3MgUXVvcHJpVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgRWFjaCBlbnRyeSBpcyBhIHR1cGxlIG9mIChwbGFpbnRleHQsIGVuY29kZWQgc3RyaW5nKS4gIFRoZXNlIHN0cmluZ3MgYXJlCiAgICAgIyB1c2VkIGluIHRoZSAicXVvdGV0YWJzPTAiIHRlc3RzLgpAQCAtMTAzLDE1ICsxMDMsMTUgQEAKICAgICAgICAgKCdoZWxsbyB3b3JsZCcsICdoZWxsbz0yMHdvcmxkJyksCiAgICAgICAgICgnaGVsbG9cdHdvcmxkJywgJ2hlbGxvPTA5d29ybGQnKSwKICAgICAgICAgKQotICAgICAgICAKKwogICAgIGRlZiB0ZXN0X2VuY29kZXN0cmluZyhzZWxmKToKICAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5TVFJJTkdTOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVuY29kZXN0cmluZyhwKSA9PSBlKQotICAgICAgICAKKwogICAgIGRlZiB0ZXN0X2RlY29kZXN0cmluZyhzZWxmKToKICAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5TVFJJTkdTOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGRlY29kZXN0cmluZyhlKSA9PSBwKQotICAgICAgICAKKwogICAgIGRlZiB0ZXN0X2lkZW1wb3RlbnRfc3RyaW5nKHNlbGYpOgogICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLlNUUklOR1M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydF8oZGVjb2Rlc3RyaW5nKGVuY29kZXN0cmluZyhlKSkgPT0gZSkKQEAgLTEzNSw1ICsxMzUsNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVuY29kZXN0cmluZyhwLCBxdW90ZXRhYnM9MSkgPT0gZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhkZWNvZGVzdHJpbmcoZSkgPT0gcCkKIAotDAorCiB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFF1b3ByaVRlc3RDYXNlKQo=