ZGlmZiAtLWdpdCBhL2ludGVnL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9kaXJlY3RvcnkvYXBpL2xkYXAvbW9kZWwvbmFtZS9TY2hlbWFBd2FyZVJkblRlc3QuamF2YSBiL2ludGVnL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9kaXJlY3RvcnkvYXBpL2xkYXAvbW9kZWwvbmFtZS9TY2hlbWFBd2FyZVJkblRlc3QuamF2YQppbmRleCAyMjllNzM2Li4yNDZhMGVjIDEwMDY0NAotLS0gYS9pbnRlZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvZGlyZWN0b3J5L2FwaS9sZGFwL21vZGVsL25hbWUvU2NoZW1hQXdhcmVSZG5UZXN0LmphdmEKKysrIGIvaW50ZWcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL2RpcmVjdG9yeS9hcGkvbGRhcC9tb2RlbC9uYW1lL1NjaGVtYUF3YXJlUmRuVGVzdC5qYXZhCkBAIC0zNCw4ICszNCw2IEBACiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogCiBpbXBvcnQgb3JnLmFwYWNoZS5kaXJlY3RvcnkuYXBpLmxkYXAubW9kZWwuZXhjZXB0aW9uLkxkYXBFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5kaXJlY3RvcnkuYXBpLmxkYXAubW9kZWwubmFtZS5BdmE7Ci1pbXBvcnQgb3JnLmFwYWNoZS5kaXJlY3RvcnkuYXBpLmxkYXAubW9kZWwubmFtZS5SZG47CiBpbXBvcnQgb3JnLmFwYWNoZS5kaXJlY3RvcnkuYXBpLmxkYXAubW9kZWwuc2NoZW1hLlNjaGVtYU1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5kaXJlY3RvcnkuYXBpLmxkYXAuc2NoZW1hbWFuYWdlci5pbXBsLkRlZmF1bHRTY2hlbWFNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUuZGlyZWN0b3J5LmFwaS51dGlsLlN0cmluZ3M7CkBAIC0yMzQsOCArMjMyLDMyIEBACiAgICAgcHVibGljIHZvaWQgdGVzdFJkblBhaXJDaGFyQXR0cmlidXRlVmFsdWUoKSB0aHJvd3MgTGRhcEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgU3RyaW5nIHJkbiA9IFN0cmluZ3MudXRmOFRvU3RyaW5nKCBuZXcgYnl0ZVtdCi0gICAgICAgICAgICB7ICdsJywgJz0nLCAnXFwnLCAnLCcsICdcXCcsICc9JywgJ1xcJywgJysnLCAnXFwnLCAnPCcsICdcXCcsICc+JywgJyMnLCAnXFwnLCAnOycsICdcXCcsICdcXCcsICdcXCcsICciJywgJ1xcJywKLSAgICAgICAgICAgICAgICAnQycsICczJywgJ1xcJywgJ0EnLCAnOScgfSApOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICdsJywKKyAgICAgICAgICAgICAgICAnPScsCisgICAgICAgICAgICAgICAgJ1xcJywKKyAgICAgICAgICAgICAgICAnLCcsCisgICAgICAgICAgICAgICAgJ1xcJywKKyAgICAgICAgICAgICAgICAnPScsCisgICAgICAgICAgICAgICAgJ1xcJywKKyAgICAgICAgICAgICAgICAnKycsCisgICAgICAgICAgICAgICAgJ1xcJywKKyAgICAgICAgICAgICAgICAnPCcsCisgICAgICAgICAgICAgICAgJ1xcJywKKyAgICAgICAgICAgICAgICAnPicsCisgICAgICAgICAgICAgICAgJyMnLAorICAgICAgICAgICAgICAgICdcXCcsCisgICAgICAgICAgICAgICAgJzsnLAorICAgICAgICAgICAgICAgICdcXCcsCisgICAgICAgICAgICAgICAgJ1xcJywKKyAgICAgICAgICAgICAgICAnXFwnLAorICAgICAgICAgICAgICAgICciJywKKyAgICAgICAgICAgICAgICAnXFwnLAorICAgICAgICAgICAgICAgICdDJywKKyAgICAgICAgICAgICAgICAnMycsCisgICAgICAgICAgICAgICAgJ1xcJywKKyAgICAgICAgICAgICAgICAnQScsCisgICAgICAgICAgICAgICAgJzknIH0gKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCAiMi41LjQuNz1cXCxcXD1cXCtcXDxcXD4jXFw7XFxcXFxcXCJcdTAwZTkiLCBuZXcgUmRuKCBzY2hlbWFNYW5hZ2VyLCByZG4gKS5nZXROb3JtTmFtZSgpICk7CiAgICAgfQogCkBAIC04OTksNyArOTIxLDcgQEAKICAgICB7CiAgICAgICAgIC8vIHNwYWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBlc2NhcGVkIGluIHRoZSBtaWRkbGUgb2YgYSBzdHJpbmcKICAgICAgICAgYXNzZXJ0RXF1YWxzKCAiYSBiIiwgUmRuLmVzY2FwZVZhbHVlKCAiYSBiIiApICk7Ci0gICAgICAgIGFzc2VydEVxdWFscyggIuQgYiBjIiwgUmRuLmVzY2FwZVZhbHVlKCAi5CBiIGMiICkgKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCAiXHUwMGU0IGIgYyIsIFJkbi5lc2NhcGVWYWx1ZSggIlx1MDBlNCBiIGMiICkgKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCAiYSBiIGMgZCIsIFJkbi5lc2NhcGVWYWx1ZSggImEgYiBjIGQiICkgKTsKIAogICAgICAgICAvLyBzcGFjZSBtdXN0IGJlIGVzY2FwZWQgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlIGVuZCBvZiBhIHN0cmluZwpkaWZmIC0tZ2l0IGEvbGRhcC9jb2RlYy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9kaXJlY3RvcnkvYXBpL2xkYXAvY29kZWMvY29udHJvbHMvc29ydC9Tb3J0UmVxdWVzdEdyYW1tYXIuamF2YSBiL2xkYXAvY29kZWMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZGlyZWN0b3J5L2FwaS9sZGFwL2NvZGVjL2NvbnRyb2xzL3NvcnQvU29ydFJlcXVlc3RHcmFtbWFyLmphdmEKaW5kZXggYzA3MjJjNS4uMDkzOGM3OSAxMDA2NDQKLS0tIGEvbGRhcC9jb2RlYy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9kaXJlY3RvcnkvYXBpL2xkYXAvY29kZWMvY29udHJvbHMvc29ydC9Tb3J0UmVxdWVzdEdyYW1tYXIuamF2YQorKysgYi9sZGFwL2NvZGVjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2RpcmVjdG9yeS9hcGkvbGRhcC9jb2RlYy9jb250cm9scy9zb3J0L1NvcnRSZXF1ZXN0R3JhbW1hci5qYXZhCkBAIC05Myw2ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJldmVyc2VPcmRlciA9IEJvb2xlYW5EZWNvZGVyLnBhcnNlKCB2YWx1ZSApOworCiAgICAgICAgICAgICAgICAgICAgIGlmICggSVNfREVCVUcgKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMT0cuZGVidWcoICJSZXZlcnNlT3JkZXIgPSAiICsgcmV2ZXJzZU9yZGVyICk7CkBAIC0xNDIsMTIgKzE0MywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQmVyVmFsdWUgdmFsdWUgPSBjb250YWluZXIuZ2V0Q3VycmVudFRMVigpLmdldFZhbHVlKCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtYXRjaGluZ1J1bGVPaWQgPSBTdHJpbmdzLnV0ZjhUb1N0cmluZyggdmFsdWUuZ2V0RGF0YSgpICk7CisKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggSVNfREVCVUcgKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPRy5kZWJ1ZyggIk1hdGNoaW5nUnVsZU9pZCA9ICIgKyBtYXRjaGluZ1J1bGVPaWQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmdldEN1cnJlbnRLZXkoKS5zZXRNYXRjaGluZ1J1bGVJZCggbWF0Y2hpbmdSdWxlT2lkICk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc2V0R3JhbW1hckVuZEFsbG93ZWQoIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgfSApOwpkaWZmIC0tZ2l0IGEvbGRhcC9tb2RlbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZGlyZWN0b3J5L2FwaS9sZGFwL21vZGVsL21lc3NhZ2UvQmluZFJlcXVlc3RJbXBsLmphdmEgYi9sZGFwL21vZGVsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9kaXJlY3RvcnkvYXBpL2xkYXAvbW9kZWwvbWVzc2FnZS9CaW5kUmVxdWVzdEltcGwuamF2YQppbmRleCAwZmJmYjRmLi42N2UxZWZhIDEwMDY0NAotLS0gYS9sZGFwL21vZGVsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9kaXJlY3RvcnkvYXBpL2xkYXAvbW9kZWwvbWVzc2FnZS9CaW5kUmVxdWVzdEltcGwuamF2YQorKysgYi9sZGFwL21vZGVsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9kaXJlY3RvcnkvYXBpL2xkYXAvbW9kZWwvbWVzc2FnZS9CaW5kUmVxdWVzdEltcGwuamF2YQpAQCAtMjE1LDcgKzIxNSw3IEBACiAgICAgICAgIGNhdGNoICggTGRhcEludmFsaWREbkV4Y2VwdGlvbiBlICkKICAgICAgICAgewogICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBzdGlsbCBiZSBhIHZhbGlkIEROIChXaW5kb3dzIEFEIGJpbmRpbmcgZm9yIGluc3RhbmNlKQotICAgICAgICAgICAgTE9HLmRlYnVnKCAiVW5hYmxlIHRvIGNvbnZlcnQgdGhlIG5hbWUgdG8gYSBETi4iLCBlICk7CisgICAgICAgICAgICBMT0cuZGVidWcoICJVbmFibGUgdG8gY29udmVydCB0aGUgbmFtZSB0byBhIEROLiIgKTsKICAgICAgICAgICAgIHRoaXMuZG4gPSBudWxsOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2xkYXAvbW9kZWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2RpcmVjdG9yeS9hcGkvbGRhcC9tb2RlbC9tZXNzYWdlL2NvbnRyb2xzL1NvcnRLZXkuamF2YSBiL2xkYXAvbW9kZWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2RpcmVjdG9yeS9hcGkvbGRhcC9tb2RlbC9tZXNzYWdlL2NvbnRyb2xzL1NvcnRLZXkuamF2YQppbmRleCA0ZTRmMDJlLi43Y2VmMDM3IDEwMDY0NAotLS0gYS9sZGFwL21vZGVsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9kaXJlY3RvcnkvYXBpL2xkYXAvbW9kZWwvbWVzc2FnZS9jb250cm9scy9Tb3J0S2V5LmphdmEKKysrIGIvbGRhcC9tb2RlbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZGlyZWN0b3J5L2FwaS9sZGFwL21vZGVsL21lc3NhZ2UvY29udHJvbHMvU29ydEtleS5qYXZhCkBAIC0yMCw4ICsyMCw2IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUuZGlyZWN0b3J5LmFwaS5sZGFwLm1vZGVsLm1lc3NhZ2UuY29udHJvbHM7CiAKIAotCi0KIC8qKgogICogRGF0YXN0cnVjdHVyZSB0byBzdG9yZSB0aGUgQXR0cmlidXRlIG5hbWUsIG1hdGNoaW5nIHJ1bGUgSUQgb2YgdGhlIGF0dHJpYnV0ZTxicj4KICAqIGFuZCB0aGUgc29ydCBvcmRlci4KQEAgLTQxLDkgKzM5LDkgQEAKICAgICBwcml2YXRlIFN0cmluZyBtYXRjaGluZ1J1bGVJZDsKIAogICAgIC8qKgotICAgICAqIEEgZmxhZyB0byBzZXQgdG8gdHJ1ZSB0byBnZXQgdGhlIHJlc3VsdCBpbiByZXZlcnNlIG9yZGVyCisgICAgICogQSBmbGFnIHRvIHNldCB0byB0cnVlIHRvIGdldCB0aGUgcmVzdWx0IGluIHJldmVyc2Ugb3JkZXIuIERlZmF1bHQgdG8gZmFsc2UKICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gcmV2ZXJzZU9yZGVyOworICAgIHByaXZhdGUgYm9vbGVhbiByZXZlcnNlT3JkZXIgPSBmYWxzZTsKIAogCiAgICAgLyoqCkBAIC02OCw3ICs2Niw3IEBACiAgICAgICAgIHRoaXMoIGF0dHJpYnV0ZVR5cGVEZXNjLCBtYXRjaGluZ1J1bGVJZCwgZmFsc2UgKTsKICAgICB9CiAKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhIFNvcnRLZXkgZm9yIGEgZ2l2ZSBBdHRyaWJ1dGVUeXBlCiAgICAgICogCkBAIC0xNDgsNyArMTQ2LDcgQEAKICAgICAgICAgc2IuYXBwZW5kKCAiU29ydEtleSA6IFsiICk7CiAKICAgICAgICAgc2IuYXBwZW5kKCBhdHRyaWJ1dGVUeXBlRGVzYyApOwotICAgICAgICAKKwogICAgICAgICBpZiAoIG1hdGNoaW5nUnVsZUlkICE9IG51bGwgKQogICAgICAgICB7CiAgICAgICAgICAgICBzYi5hcHBlbmQoICIsICIgKS5hcHBlbmQoIG1hdGNoaW5nUnVsZUlkICk7Cg==