badmfck-api-server 2.6.1 → 2.6.2
Sign up to get free protection for your applications and to get access to all the features.
@@ -43,6 +43,7 @@ const os_1 = __importDefault(require("os"));
|
|
43
43
|
const Liveness_1 = require("./routes/Liveness");
|
44
44
|
const Readiness_1 = require("./routes/Readiness");
|
45
45
|
const http_1 = __importDefault(require("http"));
|
46
|
+
const MysqlService_1 = require("./MysqlService");
|
46
47
|
function getDefaultOptions() {
|
47
48
|
return {
|
48
49
|
port: 8091,
|
@@ -83,7 +84,7 @@ async function Initializer(services) {
|
|
83
84
|
exports.Initializer = Initializer;
|
84
85
|
class APIService extends BaseService_1.BaseService {
|
85
86
|
static nextLogID = 0;
|
86
|
-
version = "2.6.
|
87
|
+
version = "2.6.2";
|
87
88
|
options;
|
88
89
|
monitor;
|
89
90
|
monitorIndexFile;
|
@@ -248,6 +249,8 @@ class APIService extends BaseService_1.BaseService {
|
|
248
249
|
details = e.message;
|
249
250
|
stack = [e];
|
250
251
|
}
|
252
|
+
if ((0, MysqlService_1.isMysqlError)(e))
|
253
|
+
details = e.message;
|
251
254
|
this.sendResponse(req.get("Referer") ?? "", res, { error: { code: 10002, message: "Internal server error", stack: stack, details: `${e}` }, data: null, httpStatus: 500 }, tme, ep, log, httpRequest);
|
252
255
|
return;
|
253
256
|
}
|
@@ -461,4 +464,4 @@ class APIService extends BaseService_1.BaseService {
|
|
461
464
|
}
|
462
465
|
}
|
463
466
|
exports.APIService = APIService;
|
464
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQWtDdkIsU0FBZ0IsaUJBQWlCO0lBQ2hDLE9BQU87UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFlBQVksRUFBRSxPQUFPO1FBQ3JCLGlCQUFpQixFQUFFO1lBQ2xCLHVCQUF1QjtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsU0FBUyxFQUFDLE1BQU07UUFDaEIsWUFBWSxFQUFFLFVBQVUsR0FBNkI7WUFDcEQsSUFBQSxvQkFBTyxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEVBQUMsVUFBUyxHQUFPO1lBQ3ZCLElBQUEscUJBQVEsRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsdUJBQXVCLEVBQUMsS0FBSztRQUM3QixTQUFTLEVBQUMsRUFBRSxHQUFDLElBQUksR0FBQyxJQUFJO1FBQ3RCLFdBQVcsRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxhQUFhLENBQUM7S0FDbkQsQ0FBQTtBQUNGLENBQUM7QUFuQkQsOENBbUJDO0FBRVksUUFBQSxrQkFBa0IsR0FBc0MsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyxvQkFB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LCB7IEFwcGxpY2F0aW9uLCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnXG5pbXBvcnQgeyBCYXNlU2VydmljZSwgSUJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9CYXNlU2VydmljZSdcbmltcG9ydCBjb3JzIGZyb20gJ2NvcnMnXG5pbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UgfSBmcm9tICdodHRwJ1xuaW1wb3J0IHsgQmFzZUVuZHBvaW50LCBJQmFzZUVuZHBvaW50IH0gZnJvbSAnLi9CYXNlRW5kcG9pbnQnXG5pbXBvcnQgRGVmYXVsdEVycm9ycywgeyBFcnJvclV0aWxzIH0gZnJvbSAnLi9zdHJ1Y3R1cmVzL0RlZmF1bHRFcnJvcnMnXG5pbXBvcnQgeyBIVFRQUmVxdWVzdFZPLCBJRXJyb3IsIFRyYW5zZmVyUGFja2V0Vk8gfSBmcm9tICcuL3N0cnVjdHVyZXMvSW50ZXJmYWNlcydcbmltcG9ydCB7UmVxfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIlxuaW1wb3J0IHsgbG9nQ3JpdCwgbG9nRXJyb3IsIGxvZ0luZm8gfSBmcm9tICcuL0xvZ1NlcnZpY2UnXG5pbXBvcnQgeyBNb25pdG9yIH0gZnJvbSAnLi9tb25pdG9yL01vbml0b3InXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IGZpbGVVcGxvYWQgZnJvbSAnZXhwcmVzcy1maWxldXBsb2FkJ1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiXG5pbXBvcnQgeyBMaXZlbmVzcyB9IGZyb20gJy4vcm91dGVzL0xpdmVuZXNzJ1xuaW1wb3J0IHsgUmVhZGluZXNzIH0gZnJvbSAnLi9yb3V0ZXMvUmVhZGluZXNzJ1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCdcbmltcG9ydCB7IEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnYXhpb3MnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJU2VydmljZU5ldHdvcmtMb2dJdGVte1x0XG5cdGlkOm51bWJlcixcblx0Y3JlYXRlZDpudW1iZXIsXG5cdHRpbWU6bnVtYmVyLFxuXHRyZWZlcmVyPzpzdHJpbmcsXG5cdHJlcXVlc3Q6e1trZXk6c3RyaW5nXTphbnl9LFxuXHRyZXNwb25zZTp7W2tleTpzdHJpbmddOmFueX1cblx0ZXJyb3I/OnN0cmluZ3xudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJU2VydmljZU9wdGlvbnN7XG5cdHBvcnQ6bnVtYmVyLFxuXHRiYXNlRW5kUG9pbnQ6c3RyaW5nIC8vIFwiL2FwaS9cIlxuXHRjb3JzSG9zdFdoaXRlTGlzdDpzdHJpbmdbXSxcblx0ZW5kcG9pbnRzOklCYXNlRW5kcG9pbnRbXSxcblx0anNvbkxpbWl0OnN0cmluZyAvLyBcIjEwbWJcIlxuXHRvbk5ldHdvcmtMb2c/OigobG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk9PnZvaWQpfG51bGxcblx0b25FcnJvcj86KCguLi5yZXN0OmFueVtdKT0+dm9pZCl8bnVsbFxuXHRpc1Byb2R1Y3Rpb25FbnZpcm9ubWVudDpib29sZWFuLFxuXHRpbnRlcmNlcHRvcj86SUJhc2VFbmRwb2ludCxcblx0cG9zdHByb2R1Y2VyPzoocmVxOkhUVFBSZXF1ZXN0Vk98dW5kZWZpbmVkfG51bGwscmVzOlJlc3BvbnNlLGRhdGE6VHJhbnNmZXJQYWNrZXRWTzxhbnk+LHJlcXVlc3RUaW1lOm51bWJlcixlbmRwb2ludD86c3RyaW5nLGxvZz86QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwpPT5Qcm9taXNlPFRyYW5zZmVyUGFja2V0Vk8+XG5cdHByZXByb2R1Y2VyPzoocmVxOkhUVFBSZXF1ZXN0Vk98dW5kZWZpbmVkfG51bGwpPT5hbnlcblx0XG5cdG1vbml0b3I/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVtdXG5cdC8vZGVwbG95bWVudD86e2xvZ2luOnN0cmluZyxwYXNzd29yZDpzdHJpbmd9XG5cdGFwcFZlcnNpb24/OnN0cmluZ1xuXG5cdGZpbGVUZW1wRGlyOnN0cmluZztcblx0ZmlsZUxpbWl0Om51bWJlciAvLyBiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpOkFQSVNlcnZpY2VPcHRpb25ze1xuXHRyZXR1cm4ge1xuXHRcdHBvcnQ6IDgwOTEsXG5cdFx0YmFzZUVuZFBvaW50OiAnL2FwaS8nLFxuXHRcdGNvcnNIb3N0V2hpdGVMaXN0OiBbXG5cdFx0XHQnaHR0cDovL2xvY2FsaG9zdDozMDAwJyxcblx0XHRdLFxuXHRcdGVuZHBvaW50czogW10sXG5cdFx0anNvbkxpbWl0OlwiMTBtYlwiLFxuXHRcdG9uTmV0d29ya0xvZzogZnVuY3Rpb24gKGxvZzogQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtKTogdm9pZCB7XG5cdFx0XHRsb2dJbmZvKFwiJHtBUElTZXJ2aWNlLmpzfVwiLGxvZylcblx0XHR9LFxuXHRcdG9uRXJyb3I6ZnVuY3Rpb24oZXJyOmFueSl7XG5cdFx0XHRsb2dFcnJvcihcIiR7QVBJU2VydmljZS5qc31cIixlcnIpO1xuXHRcdH0sXG5cdFx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6ZmFsc2UsXG5cdFx0ZmlsZUxpbWl0OjUwKjEwMjQqMTAyNCxcblx0XHRmaWxlVGVtcERpcjpwYXRoLnJlc29sdmUob3MudG1wZGlyKCksXCJmaWxlVGVtcERpclwiKVxuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBSRVFfQ1JFQVRFX05FVF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0NSRUFURV9ORVRfTE9HXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9IVFRQX0xPRzpSZXE8dm9pZCxBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW1bXT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9IVFRQX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9SRVFVRVNUU19DT1VOVDpSZXE8dm9pZCxudW1iZXI+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9SRVFVRVNUU19DT1VOVFwiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9TRVJWRVI6UmVxPHZvaWQse2V4cHJlc3M6QXBwbGljYXRpb24saHR0cDpodHRwLlNlcnZlcn0+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9TRVJWRVJcIik7XG5leHBvcnQgY29uc3QgUkVRX0lOVEVSTkFMX0NBTEw6UmVxPEhUVFBSZXF1ZXN0Vk8sSUVycm9yfGFueT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9JTlRFUk5BTF9DQUxMXCIpO1xuXG5cbmNvbnN0IGFjdGl2ZVNlcnZpY2VzOlN0cmluZ1tdPVtdXG5jb25zdCBlbnRyeVBvaW50czpTdHJpbmdbXT1bXVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gSW5pdGlhbGl6ZXIoc2VydmljZXM6SUJhc2VTZXJ2aWNlW10pe1xuICAgIGZvciAobGV0IGkgb2Ygc2VydmljZXMpIHsgYXdhaXQgaS5pbml0KCk7YWN0aXZlU2VydmljZXMucHVzaChpLmdldE5hbWUoKSkgfVxuICAgIGZvciAobGV0IGkgb2Ygc2VydmljZXMpIHsgaS5hcHBsaWNhdGlvblJlYWR5KCkgfVxufVxuXG5leHBvcnQgY2xhc3MgQVBJU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcblxuXHQvLyBORVQgTE9HXG5cdHByaXZhdGUgc3RhdGljIG5leHRMb2dJRD0wO1xuXHRwcml2YXRlIHZlcnNpb24gPSBcIjIuNi4xXCJcblx0cHJpdmF0ZSBvcHRpb25zOkFQSVNlcnZpY2VPcHRpb25zO1xuXHRwcml2YXRlIG1vbml0b3I/Ok1vbml0b3Jcblx0cHJpdmF0ZSBtb25pdG9ySW5kZXhGaWxlPzpCdWZmZXJcblx0cHJpdmF0ZSBzdGFydGVkOkRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRwcml2YXRlIHJlcXVlc3RzQ291bnQ9MDtcblx0cHJpdmF0ZSBzZXJ2ZXI9aHR0cFxuXG5cdG5ldExvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW1bXT1bXTtcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zPzpBUElTZXJ2aWNlT3B0aW9uc3xudWxsKSB7XG5cdFx0c3VwZXIoJ0hUVFAgU2VydmljZScpXG5cdFx0dGhpcy5vcHRpb25zPW9wdGlvbnMgPz8gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcblx0XHRpZighdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0KVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0PVtdO1xuXHRcdGNvbnN0IHNlbGYgPSBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIrdGhpcy5vcHRpb25zLnBvcnQ7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5maW5kKHZhbD0+dmFsPT09c2VsZikpXG5cdFx0XHR0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QucHVzaCgpXG5cblx0XHRpZih0aGlzLm9wdGlvbnMubW9uaXRvciAmJiB0aGlzLm9wdGlvbnMubW9uaXRvci5sZW5ndGg+MCl7XG5cdFx0XHR0aGlzLm1vbml0b3I9bmV3IE1vbml0b3IoKTtcblx0XHRcdHRoaXMub3B0aW9ucy5lbmRwb2ludHMucHVzaCh0aGlzLm1vbml0b3IpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJTZXJ2aWNlIE1vbml0b3IgaW5pdGlhbGl6ZWRcIilcblx0XHRcdGNvbnNvbGUud2FybihcIm1vbml0b3IgbGlua3M6XCIpXG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCkuZGlnZXN0KCkudG9TdHJpbmcoXCJoZXhcIilcblx0XHRcdFx0Y29uc29sZS53YXJuKGkubG9naW4rXCIgLT4gL3NtLVwiK2hhc2gpXHRcdFx0XHRcdFx0XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gY3JlYXRlIGxpdmVuZXNzLCByZWFkaW5lc3Ncblx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2gobmV3IExpdmVuZXNzKHRoaXMuc3RhcnRlZCksbmV3IFJlYWRpbmVzcyh0aGlzLnN0YXJ0ZWQpKVxuXHRcdFJFUV9IVFRQX1JFUVVFU1RTX0NPVU5ULmxpc3RlbmVyID0gYXN5bmMgKCkgPT4gdGhpcy5yZXF1ZXN0c0NvdW50O1xuXHR9XG5cblxuXHRvdmVycmlkZSBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuXG5cdFx0UkVRX0hUVFBfTE9HLmxpc3RlbmVyPWFzeW5jIGlnbm9yZT0+dGhpcy5uZXRMb2c7XG5cdFx0UkVRX0NSRUFURV9ORVRfTE9HLmxpc3RlbmVyID0gYXN5bmMgaWdub3JlPT57XG5cdFx0XHRjb25zdCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtID0ge1xuXHRcdFx0XHRjcmVhdGVkOiArbmV3IERhdGUoKSxcblx0XHRcdFx0dGltZTogMCxcblx0XHRcdFx0cmVxdWVzdDoge30sXG5cdFx0XHRcdHJlc3BvbnNlOiB7fSxcblx0XHRcdFx0ZXJyb3I6bnVsbCxcblx0XHRcdFx0aWQ6IEFQSVNlcnZpY2UubmV4dExvZ0lEKytcblx0XHRcdH1cblx0XHRcdHRoaXMubmV0TG9nLnB1c2gobG9nKVxuXHRcdFx0aWYodGhpcy5uZXRMb2cubGVuZ3RoPjEwMDApXG5cdFx0XHRcdHRoaXMubmV0TG9nLnNoaWZ0KClcblx0XHRcdHJldHVybiBsb2c7XG5cdFx0fVxuXG5cdFx0Ly8gaW50ZXJuYWwgY2FsbFxuXHRcdFJFUV9JTlRFUk5BTF9DQUxMLmxpc3RlbmVyID0gYXN5bmMgKHJlcSk9Pntcblx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdFx0aWYoIWkgfHwgIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRmb3IobGV0IGogb2YgaS5lbmRwb2ludHMpe1xuXHRcdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0XHRlcCA9IGVwLnJlcGxhY2VBbGwoXCIvL1wiLFwiL1wiKVxuXHRcdFx0XHRcdGlmKGVwID09PSByZXEuZW5kcG9pbnQpe1xuXHRcdFx0XHRcdFx0cmVxLmludGVybmFsQ2FsbD10cnVlO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpLmV4ZWN1dGUocmVxKVxuXHRcdFx0XHRcdFx0aWYocmVzcG9uc2UuZXJyb3IpXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxkYXRhOm51bGwsaHR0cFN0YXR1czo0MDR9XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBleHByZXNzXG5cdFx0Y29uc3QgYXBwID0gZXhwcmVzcygpXG5cdFx0Y29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcblxuXHRcdFJFUV9IVFRQX1NFUlZFUi5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e3JldHVybiB7ZXhwcmVzczphcHAsaHR0cDpzZXJ2ZXJ9fTtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5pc1Byb2R1Y3Rpb25FbnZpcm9ubWVudClcblx0XHRcdGFwcC5zZXQoXCJlbnZcIiwncHJvZHVjdGlvbicpO1xuXG5cdFx0YXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzEwbWInIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5cdFx0YXBwLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBsaW1pdDogJzEwbWInLCBleHRlbmRlZDogdHJ1ZSB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cblx0XHRhcHAudXNlKGZpbGVVcGxvYWQoe1xuXHRcdFx0bGltaXRIYW5kbGVyOiAocmVxLCByZXMsIG5leHQpPT57XG5cdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5GSUxFX1RPT19MQVJHRSxcblx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0aHR0cFN0YXR1czo0MTMsXG5cdFx0XHRcdH0sK25ldyBEYXRlKCkscmVxLnBhdGgpO1xuXHRcdFx0fSxcblx0XHRcdGxpbWl0czogeyBmaWxlU2l6ZTogdGhpcy5vcHRpb25zLmZpbGVMaW1pdCB9LFxuXHRcdFx0dXNlVGVtcEZpbGVzOiB0cnVlLFxuXHRcdFx0dXJpRGVjb2RlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0dGVtcEZpbGVEaXI6IHRoaXMub3B0aW9ucy5maWxlVGVtcERpcixcblx0XHRcdC8vc2FmZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdGFib3J0T25MaW1pdDp0cnVlXG5cdFx0fSkpXG5cblx0XHRhcHAudXNlKGFzeW5jIChlcnI6YW55LHJlcTphbnkscmVzcDphbnksbmV4dDphbnkpPT57XG5cdFx0XHRcblx0XHRcdGlmKCFlcnIpe1xuXHRcdFx0XHRuZXh0KCk7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XHQvL3JlcXVlc3Qgc3RhcnQgdGltZVxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRjb25zdCBsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0ZGF0YTpcIlwiLFxuXHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcmVzcG9uc2VFcnJvcj1EZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVDtcblx0XHRcdGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyci5zdGF0dXMgPT09IDQwMCAmJiAnYm9keScgaW4gZXJyICYmIGVyci50eXBlID09PSAnZW50aXR5LnBhcnNlLmZhaWxlZCcpIHtcblx0XHRcdFx0cmVzcG9uc2VFcnJvciA9IERlZmF1bHRFcnJvcnMuSlNPTl9NQUxGT1JNRURcblx0XHRcdH1cbiAgICAgIFxuXG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXNwLHtcblx0XHRcdFx0ZXJyb3I6cmVzcG9uc2VFcnJvcixcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwMFxuXHRcdFx0fSx0bWUsXCJcIixsb2cpXG5cblx0XHR9KVxuXG5cdFx0Y29uc3QgY29yc09wdGlvbnMgPSB7XG5cdFx0XHRvcmlnaW46IChvcmlnaW46IGFueSwgY2FsbGJhY2s6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5Jc1doaXRlbGlzdGVkID0gdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmluY2x1ZGVzKG9yaWdpbilcblx0XHRcdFx0Y2FsbGJhY2sobnVsbCwgb3JpZ2luSXNXaGl0ZWxpc3RlZClcblx0XHRcdH0sXG5cdFx0XHRjcmVkZW50aWFsczogdHJ1ZVxuXHRcdH1cblx0XHRhcHAudXNlKGNvcnMoY29yc09wdGlvbnMpKVxuXG5cdFx0Ly8gcmVnaXN0cmF0ZSBlbmRwb2ludHNcblx0XHRCYXNlRW5kcG9pbnQuc2V0RW50cnlQb2ludCh0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50KVxuXHRcdFxuXHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdGF3YWl0IGkuaW5pdCgpO1xuXHRcdFx0aWYoIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XG5cblx0XHRcdFx0Ly8gaW5jb21pbmcgcmVxdWVzdFxuXHRcdFx0XHRhcHAuYWxsKGVwLGFzeW5jIChyZXEscmVzKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHNDb3VudCsrO1xuXHRcdFx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdGxldCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwgPSBudWxsO1xuXHRcdFx0XHRcdGlmKCFpLmlnbm9yZUh0dHBMb2dnaW5nKXtcblx0XHRcdFx0XHRcdGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRcdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdFx0XHRcdHVybDpyZXEudXJsLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEuYm9keSksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEucGFyYW1zKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAoKT0+e1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib2R5ID0gcmVxLmJvZHk7XG5cdFx0XHRcdFx0XHRpZihyZXEucXVlcnkgJiYgdHlwZW9mIHJlcS5xdWVyeSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiByZXEucXVlcnkpe1xuXHRcdFx0XHRcdFx0XHRcdGJvZHlbaV09cmVxLnF1ZXJ5W2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGh0dHBSZXF1ZXN0OkhUVFBSZXF1ZXN0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdHJhdzpyZXEgYXMgSW5jb21pbmdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTpyZXEuYm9keSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXMsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6cmVxLmhlYWRlcnMgYXMgYW55LFxuXHRcdFx0XHRcdFx0XHRlbmRwb2ludDplcCxcblx0XHRcdFx0XHRcdFx0ZmlsZXM6cmVxLmZpbGVzID8/IG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlZmVyZXI6cmVxLmdldChcIlJlZmVyZXJcIiksXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcil7XG5cdFx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlcHJvZHVjZXJSZXN1bHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRpZihwcmVwcm9kdWNlclJlc3VsdClcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVwcm9kdWNlclJlc3VsdCA9IHByZXByb2R1Y2VyUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGRldGFpbHM9YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHN0YWNrOklFcnJvcltdfHVuZGVmaW5lZD11bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKXtcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM9KGUgYXMgYW55KS5tZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFjayA9IFtlIGFzIGFueV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7ZXJyb3I6e2NvZGU6MTAwMDIsbWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLHN0YWNrOnN0YWNrLGRldGFpbHM6YCR7ZX1gfSxkYXRhOm51bGwsaHR0cFN0YXR1czo1MDB9LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRsZXQgcmVzdWx0XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgaW50ZXJjZXB0b3IgaWYgZXhpc3RzXG5cdFx0XHRcdFx0XHRcdGlmKCFqLmlnbm9yZUludGVyY2VwdG9yKXtcblx0XHRcdFx0XHRcdFx0XHRsZXQgaW50ZXJjZXB0b3JSZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLmludGVyY2VwdG9yKXtcblx0XHRcdFx0XHRcdFx0XHRcdGludGVyY2VwdG9yUmVzdWx0PWF3YWl0IHRoaXMub3B0aW9ucy5pbnRlcmNlcHRvci5leGVjdXRlKGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGludGVyY2VwdG9yUmVzdWx0LmVycm9yICYmICFqLmFsbG93SW50ZXJjZXB0b3JFcnJvcil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxpbnRlcmNlcHRvclJlc3VsdCx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QuaW50ZXJjZXB0b3JSZXN1bHQgPSBpbnRlcmNlcHRvclJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIFByZWNoZWNrXG5cdFx0XHRcdFx0XHRcdGlmKGkgPT09IHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVjaGVjaz17ZGF0YTp0aGlzLm9wdGlvbnMubW9uaXRvcn1cblxuXHRcdFx0XHRcdFx0XHRjb25zdCBwcmVjaGVjaz1hd2FpdCBpLnByZWNoZWNrKGh0dHBSZXF1ZXN0KVxuXHRcdFx0XHRcdFx0XHRpZihwcmVjaGVjayAmJiBwcmVjaGVjay5lcnJvcil7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHByZWNoZWNrLHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXByZWNoZWNrO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gSWYgaW50ZXJjZXB0b3IgaGFzIG5vIGVycm9ycywgZXhlY3V0ZSBtYWluIGhhbmRsZXJcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgaS5leGVjdXRlKGh0dHBSZXF1ZXN0KVxuXHRcdFx0XHRcdFx0XHQgXG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoZSlcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRmF0YWxFcnJvcihlcCk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjaGVjayBpZiBlcnJvciBpcyBJRXJyb3Jcblx0XHRcdFx0XHRcdFx0bGV0IGRhdGE6VHJhbnNmZXJQYWNrZXRWTyA9IHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzOmAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKEVycm9yVXRpbHMuaXNFcnJvcihlKSlcblx0XHRcdFx0XHRcdFx0XHRkYXRhID0ge2Vycm9yOmUgYXMgSUVycm9yfVxuXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxkYXRhLHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGV4ZWN1dGUoKVxuXHRcdFx0XHR9KTsvLyBoYW5kbGUgaW5jb21pbmcgcmVxdWVzdFxuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFxuXG5cdFx0Ly8gZmluYWwgaGFuZGxlclxuXHRcdGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG5cdFx0XHRcblx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpXG5cblx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHQvL2NoZWNrIGlmIHJlcXVlc3RpbmcgbW9uaXRvclxuXHRcdFx0XHRpZihyZXEubWV0aG9kPT09XCJHRVRcIil7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0bGV0IG1vbml0b3JSZXF1ZXN0PWZhbHNlO1xuXHRcdFx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCkuZGlnZXN0KCkudG9TdHJpbmcoXCJoZXhcIilcblx0XHRcdFx0XHRcdGlmKHJlcS5vcmlnaW5hbFVybC5lbmRzV2l0aChcIi9zbS1cIitoYXNoKSl7XG5cdFx0XHRcdFx0XHRcdG1vbml0b3JSZXF1ZXN0PXRydWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKG1vbml0b3JSZXF1ZXN0KXtcblx0XHRcdFx0XHRcdC8vIHNlbmQgaW5kZXggVGh1LCAxNiBOb3YgMjAyMyAyMzozMzozNSBHTVRcblx0XHRcdFx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdFx0dHJ5e1xuXHRcdFx0XHRcdFx0XHRpZighdGhpcy5tb25pdG9ySW5kZXhGaWxlKVxuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3JJbmRleEZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKF9fZGlybmFtZSxcIm1vbml0b3JcIixcImluZGV4Lmh0bWxcIikpO1xuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsXCJ0ZXh0L2h0bWxcIilcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIsdGhpcy5tb25pdG9ySW5kZXhGaWxlLmJ5dGVMZW5ndGgpXG5cdFx0XHRcdFx0XHRcdHJlcy5zdGF0dXMoMjAwKS5zZW5kKHRoaXMubW9uaXRvckluZGV4RmlsZSk7XG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29kZToxMDAwMixcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSx0bWUscmVxLnBhdGgpO1x0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0XG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwNFxuXHRcdFx0fSx0bWUscmVxLnBhdGgpO1xuXHRcdH0pXG5cblx0XHRzZXJ2ZXIubGlzdGVuKHRoaXMub3B0aW9ucy5wb3J0LCAoKSA9PiB7XG5cdFx0XHRsb2dDcml0KCcke0FQSVNlcnZpY2UuanN9JywnQVBJIFNlcnZpY2Ugc3RhcnRlZCBhdDogJyt0aGlzLm9wdGlvbnMucG9ydCtcIiwgd2l0aCBiYXNlIGVuZHBvaW50OlwiK3RoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQrXCIsIHZlci46IFwiK3RoaXMudmVyc2lvbilcblx0XHR9KVxuXG5cdFx0LyphcHAubGlzdGVuKHRoaXMub3B0aW9ucy5wb3J0LCAoKSA9PiB7XG5cdFx0XHRsb2dDcml0KCcke0FQSVNlcnZpY2UuanN9JywnQVBJIFNlcnZpY2Ugc3RhcnRlZCBhdDogJyt0aGlzLm9wdGlvbnMucG9ydCtcIiwgd2l0aCBiYXNlIGVuZHBvaW50OlwiK3RoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQrXCIsIHZlci46IFwiK3RoaXMudmVyc2lvbilcblx0XHR9KSovXG5cdH1cblxuXHRhc3luYyBzZW5kUmVzcG9uc2UocmVmOnN0cmluZyxyZXM6UmVzcG9uc2UsZGF0YTpUcmFuc2ZlclBhY2tldFZPPGFueT4scmVxdWVzdFRpbWU6bnVtYmVyLGVuZHBvaW50PzpzdHJpbmcsbG9nPzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCxyZXE/OkhUVFBSZXF1ZXN0Vk8pe1xuXG5cdFx0aWYodGhpcy5vcHRpb25zLnBvc3Rwcm9kdWNlcil7XG5cdFx0XHR0cnl7XG5cdFx0XHRcdGRhdGEgPSBhd2FpdCB0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKHJlcSxyZXMsZGF0YSxyZXF1ZXN0VGltZSxlbmRwb2ludCxsb2cpO1xuXHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRsb2dFcnJvcihcIlBvc3Rwcm9kdWNlciBlcnJvclwiLGUpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGRhdGEpKVxuXHRcdFx0ZGF0YSA9IHtlcnJvcjpkYXRhIGFzIElFcnJvcixkYXRhOm51bGx9XG5cdFx0XG4gICAgICAgIGRhdGEucmVzcG9uc2VUaW1lID0gKCtuZXcgRGF0ZSgpKSAtIHJlcXVlc3RUaW1lO1xuICAgICAgICBkYXRhLmNvcmUgPSB0aGlzLnZlcnNpb25cbiAgICAgICAgZGF0YS5lbmRwb2ludCA9IGVuZHBvaW50ID8/IFwibm9fZW5kcG9pbnRcIlxuXHRcdFxuXHRcdGlmKHRoaXMub3B0aW9ucy5hcHBWZXJzaW9uKVxuXHRcdFx0ZGF0YS52ZXJzaW9uPXRoaXMub3B0aW9ucy5hcHBWZXJzaW9uXG5cblx0XHRcblx0XHRpZihsb2cpe1xuXHRcdFx0bG9nLnRpbWUgPSBkYXRhLnJlc3BvbnNlVGltZVxuXHRcdFx0bG9nLnJlZmVyZXI9cmVmO1xuXHRcdH1cblxuXHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlUmVzcG9uc2UoZGF0YS5lbmRwb2ludCxkYXRhLnJlc3BvbnNlVGltZSlcblxuICAgICAgICBpZihyZXMuZGVzdHJveWVkIHx8IHJlcy5jbG9zZWQpe1xuXG5cdFx0XHRpZihsb2cpXG5cdFx0XHRcdGxvZy5lcnJvciA9IFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZSBmb3I6IFwiK2RhdGEuZW5kcG9pbnRcblx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuICAgICAgICAgICAgXHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNvbm5lY3Rpb24gYWxyZWFkeSBjbG9zZWQsIGNhbid0IHNlbmQgcmVzcG9uc2U6IFwiK2RhdGEuZW5kcG9pbnQsZGF0YSlcbiAgICAgICAgICAgIFxuXHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXG4gICAgICAgIH1lbHNle1xuXHRcdFx0dHJ5e1xuXG5cdFx0XHRcdGlmKGRhdGEuZmlsZSl7XG5cblx0XHRcdFx0XHRyZXMuc2VuZEZpbGUoZGF0YS5maWxlLGVycj0+e1xuXHRcdFx0XHRcdFx0aWYoZXJyKXtcblx0XHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRcdGxvZy5lcnJvciA9IFwiQ2FuJ3Qgc2VuZCBmaWxlOiBcIitkYXRhLmZpbGVcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZSxlcnIpXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiBkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVmLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5DQU5UX1NFTkRfRklMRSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSxyZXF1ZXN0VGltZSxkYXRhLmVuZHBvaW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0pXG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKGRhdGEucmVkaXJlY3Qpe1xuXHRcdFx0XHRcdHJlcy5yZWRpcmVjdChkYXRhLnJlZGlyZWN0KTtcblx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB7cmVkaXJlY3Q6ZGF0YS5yZWRpcmVjdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gc2V0dXAgaGVhZGVyc1xuXHRcdFx0XHRcdGlmKGRhdGEuaGVhZGVycyl7XG5cdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gZGF0YS5oZWFkZXJzKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKGksZGF0YS5oZWFkZXJzW2ldKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cyAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXM+OTkpXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZSA9IGRhdGEuZXJyb3IuaHR0cFN0YXR1c1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlPWRhdGEuaHR0cFN0YXR1cyA/PyAyMDBcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihkYXRhLnJhd1Jlc3BvbnNlKXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEuZGF0YSlcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEpO1xuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXG5cdFx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVBUElFcnJvcihkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNhbid0IHNlbmQgcmVzcG9uc2VcIixlKTtcblx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdGxvZy5lcnJvcj1cIkNhbid0IHNlbmQgcmVzcG9uc2VcIlxuXHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVFcnJvcihkYXRhLmVuZHBvaW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBzaG93IGxvZ1xuXHRcdGlmKHRoaXMub3B0aW9ucy5vbk5ldHdvcmtMb2cgJiYgbG9nKVxuXHRcdFx0dGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyhsb2cpXG4gICAgfVxuXG5cblx0Y2hlY2tEYXRhTGVuZ3RoKGRhdGE6YW55LHJlc3VsdD86YW55LGx2bD86bnVtYmVyKTphbnl7XG5cdFx0XG5cdFx0aWYoIWx2bClcblx0XHRcdGx2bD0wO1xuXG5cdFx0aWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYodHlwZW9mIGRhdGE9PT1cInN0cmluZ1wiICYmIGRhdGEubGVuZ3RoPjEwMjQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnN1YnN0cmluZygwLDEwMDApK1wiLi4uICh0b3RhbDpcIiArIGRhdGEubGVuZ3RoICsgXCIpXCJcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdGlmKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKCFyZXN1bHQpXG5cdFx0XHRcdHJlc3VsdD17fTtcblx0XHRcdGxldCBhcnJjbnQgPSAxMDA7XG5cdFx0XHRmb3IobGV0IGkgaW4gZGF0YSl7XG5cdFx0XHRcdHJlc3VsdFtpXT10aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhW2ldLHJlc3VsdFtpXSxsdmwrMSk7XG5cdFx0XHRcdGFycmNudC0tO1xuXHRcdFx0XHRpZihhcnJjbnQ8PTApe1xuXHRcdFx0XHRcdHJlc3VsdFtcIi4uLlwiXT1cIi4uLiB0b3RhbDogXCIrQXJyYXkuaXNBcnJheShkYXRhKT9kYXRhLmxlbmd0aDpPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdCA/PyBudWxsO1xuXHR9XG5cbn1cbiJdfQ==
|
467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQUV2QixpREFBNkM7QUFrQzdDLFNBQWdCLGlCQUFpQjtJQUNoQyxPQUFPO1FBQ04sSUFBSSxFQUFFLElBQUk7UUFDVixZQUFZLEVBQUUsT0FBTztRQUNyQixpQkFBaUIsRUFBRTtZQUNsQix1QkFBdUI7U0FDdkI7UUFDRCxTQUFTLEVBQUUsRUFBRTtRQUNiLFNBQVMsRUFBQyxNQUFNO1FBQ2hCLFlBQVksRUFBRSxVQUFVLEdBQTZCO1lBQ3BELElBQUEsb0JBQU8sRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQTtRQUNoQyxDQUFDO1FBQ0QsT0FBTyxFQUFDLFVBQVMsR0FBTztZQUN2QixJQUFBLHFCQUFRLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELHVCQUF1QixFQUFDLEtBQUs7UUFDN0IsU0FBUyxFQUFDLEVBQUUsR0FBQyxJQUFJLEdBQUMsSUFBSTtRQUN0QixXQUFXLEVBQUMsY0FBSSxDQUFDLE9BQU8sQ0FBQyxZQUFFLENBQUMsTUFBTSxFQUFFLEVBQUMsYUFBYSxDQUFDO0tBQ25ELENBQUE7QUFDRixDQUFDO0FBbkJELDhDQW1CQztBQUVZLFFBQUEsa0JBQWtCLEdBQXNDLElBQUksb0JBQUcsQ0FBQyxT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UUFDRCxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQzs7QUExZEYsZ0NBNGRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MsIHsgQXBwbGljYXRpb24sIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcydcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL0Jhc2VTZXJ2aWNlJ1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycydcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBCYXNlRW5kcG9pbnQsIElCYXNlRW5kcG9pbnQgfSBmcm9tICcuL0Jhc2VFbmRwb2ludCdcbmltcG9ydCBEZWZhdWx0RXJyb3JzLCB7IEVycm9yVXRpbHMgfSBmcm9tICcuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9ycydcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIElFcnJvciwgVHJhbnNmZXJQYWNrZXRWTyB9IGZyb20gJy4vc3RydWN0dXJlcy9JbnRlcmZhY2VzJ1xuaW1wb3J0IHtSZXF9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gJy4vTG9nU2VydmljZSdcbmltcG9ydCB7IE1vbml0b3IgfSBmcm9tICcuL21vbml0b3IvTW9uaXRvcidcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgZmlsZVVwbG9hZCBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCJcbmltcG9ydCB7IExpdmVuZXNzIH0gZnJvbSAnLi9yb3V0ZXMvTGl2ZW5lc3MnXG5pbXBvcnQgeyBSZWFkaW5lc3MgfSBmcm9tICcuL3JvdXRlcy9SZWFkaW5lc3MnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdheGlvcydcbmltcG9ydCB7IGlzTXlzcWxFcnJvciB9IGZyb20gJy4vTXlzcWxTZXJ2aWNlJ1xuaW1wb3J0IHsgTXlzcWxFcnJvciB9IGZyb20gJ215c3FsJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXtcdFxuXHRpZDpudW1iZXIsXG5cdGNyZWF0ZWQ6bnVtYmVyLFxuXHR0aW1lOm51bWJlcixcblx0cmVmZXJlcj86c3RyaW5nLFxuXHRyZXF1ZXN0Ontba2V5OnN0cmluZ106YW55fSxcblx0cmVzcG9uc2U6e1trZXk6c3RyaW5nXTphbnl9XG5cdGVycm9yPzpzdHJpbmd8bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VPcHRpb25ze1xuXHRwb3J0Om51bWJlcixcblx0YmFzZUVuZFBvaW50OnN0cmluZyAvLyBcIi9hcGkvXCJcblx0Y29yc0hvc3RXaGl0ZUxpc3Q6c3RyaW5nW10sXG5cdGVuZHBvaW50czpJQmFzZUVuZHBvaW50W10sXG5cdGpzb25MaW1pdDpzdHJpbmcgLy8gXCIxMG1iXCJcblx0b25OZXR3b3JrTG9nPzooKGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pPT52b2lkKXxudWxsXG5cdG9uRXJyb3I/OigoLi4ucmVzdDphbnlbXSk9PnZvaWQpfG51bGxcblx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6Ym9vbGVhbixcblx0aW50ZXJjZXB0b3I/OklCYXNlRW5kcG9pbnQsXG5cdHBvc3Rwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPlxuXHRwcmVwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsKT0+YW55XG5cdFxuXHRtb25pdG9yPzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31bXVxuXHQvL2RlcGxveW1lbnQ/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVxuXHRhcHBWZXJzaW9uPzpzdHJpbmdcblxuXHRmaWxlVGVtcERpcjpzdHJpbmc7XG5cdGZpbGVMaW1pdDpudW1iZXIgLy8gYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKTpBUElTZXJ2aWNlT3B0aW9uc3tcblx0cmV0dXJuIHtcblx0XHRwb3J0OiA4MDkxLFxuXHRcdGJhc2VFbmRQb2ludDogJy9hcGkvJyxcblx0XHRjb3JzSG9zdFdoaXRlTGlzdDogW1xuXHRcdFx0J2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG5cdFx0XSxcblx0XHRlbmRwb2ludHM6IFtdLFxuXHRcdGpzb25MaW1pdDpcIjEwbWJcIixcblx0XHRvbk5ldHdvcmtMb2c6IGZ1bmN0aW9uIChsb2c6IEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk6IHZvaWQge1xuXHRcdFx0bG9nSW5mbyhcIiR7QVBJU2VydmljZS5qc31cIixsb2cpXG5cdFx0fSxcblx0XHRvbkVycm9yOmZ1bmN0aW9uKGVycjphbnkpe1xuXHRcdFx0bG9nRXJyb3IoXCIke0FQSVNlcnZpY2UuanN9XCIsZXJyKTtcblx0XHR9LFxuXHRcdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmZhbHNlLFxuXHRcdGZpbGVMaW1pdDo1MCoxMDI0KjEwMjQsXG5cdFx0ZmlsZVRlbXBEaXI6cGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLFwiZmlsZVRlbXBEaXJcIilcblx0fVxufVxuXG5leHBvcnQgY29uc3QgUkVRX0NSRUFURV9ORVRfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9DUkVBVEVfTkVUX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW10+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQ6UmVxPHZvaWQsbnVtYmVyPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlRcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfU0VSVkVSOlJlcTx2b2lkLHtleHByZXNzOkFwcGxpY2F0aW9uLGh0dHA6aHR0cC5TZXJ2ZXJ9PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfU0VSVkVSXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9JTlRFUk5BTF9DQUxMOlJlcTxIVFRQUmVxdWVzdFZPLElFcnJvcnxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSU5URVJOQUxfQ0FMTFwiKTtcblxuXG5jb25zdCBhY3RpdmVTZXJ2aWNlczpTdHJpbmdbXT1bXVxuY29uc3QgZW50cnlQb2ludHM6U3RyaW5nW109W11cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEluaXRpYWxpemVyKHNlcnZpY2VzOklCYXNlU2VydmljZVtdKXtcbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGF3YWl0IGkuaW5pdCgpO2FjdGl2ZVNlcnZpY2VzLnB1c2goaS5nZXROYW1lKCkpIH1cbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGkuYXBwbGljYXRpb25SZWFkeSgpIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFQSVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG5cblx0Ly8gTkVUIExPR1xuXHRwcml2YXRlIHN0YXRpYyBuZXh0TG9nSUQ9MDtcblx0cHJpdmF0ZSB2ZXJzaW9uID0gXCIyLjYuMlwiXG5cdHByaXZhdGUgb3B0aW9uczpBUElTZXJ2aWNlT3B0aW9ucztcblx0cHJpdmF0ZSBtb25pdG9yPzpNb25pdG9yXG5cdHByaXZhdGUgbW9uaXRvckluZGV4RmlsZT86QnVmZmVyXG5cdHByaXZhdGUgc3RhcnRlZDpEYXRlID0gbmV3IERhdGUoKTtcblx0cHJpdmF0ZSByZXF1ZXN0c0NvdW50PTA7XG5cdHByaXZhdGUgc2VydmVyPWh0dHBcblxuXHRuZXRMb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW109W107XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucz86QVBJU2VydmljZU9wdGlvbnN8bnVsbCkge1xuXHRcdHN1cGVyKCdIVFRQIFNlcnZpY2UnKVxuXHRcdHRoaXMub3B0aW9ucz1vcHRpb25zID8/IGdldERlZmF1bHRPcHRpb25zKCk7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdClcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdD1bXTtcblx0XHRjb25zdCBzZWxmID0gXCJodHRwOi8vbG9jYWxob3N0OlwiK3RoaXMub3B0aW9ucy5wb3J0O1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuZmluZCh2YWw9PnZhbD09PXNlbGYpKVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LnB1c2goKVxuXG5cdFx0aWYodGhpcy5vcHRpb25zLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zLm1vbml0b3IubGVuZ3RoPjApe1xuXHRcdFx0dGhpcy5tb25pdG9yPW5ldyBNb25pdG9yKCk7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2godGhpcy5tb25pdG9yKVxuXHRcdFx0Y29uc29sZS53YXJuKFwiU2VydmljZSBNb25pdG9yIGluaXRpYWxpemVkXCIpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJtb25pdG9yIGxpbmtzOlwiKVxuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdGNvbnNvbGUud2FybihpLmxvZ2luK1wiIC0+IC9zbS1cIitoYXNoKVx0XHRcdFx0XHRcdFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNyZWF0ZSBsaXZlbmVzcywgcmVhZGluZXNzXG5cdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKG5ldyBMaXZlbmVzcyh0aGlzLnN0YXJ0ZWQpLG5ldyBSZWFkaW5lc3ModGhpcy5zdGFydGVkKSlcblx0XHRSRVFfSFRUUF9SRVFVRVNUU19DT1VOVC5saXN0ZW5lciA9IGFzeW5jICgpID0+IHRoaXMucmVxdWVzdHNDb3VudDtcblx0fVxuXG5cblx0b3ZlcnJpZGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuXHRcdFJFUV9IVFRQX0xPRy5saXN0ZW5lcj1hc3luYyBpZ25vcmU9PnRoaXMubmV0TG9nO1xuXHRcdFJFUV9DUkVBVEVfTkVUX0xPRy5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e1xuXHRcdFx0Y29uc3QgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSA9IHtcblx0XHRcdFx0Y3JlYXRlZDogK25ldyBEYXRlKCksXG5cdFx0XHRcdHRpbWU6IDAsXG5cdFx0XHRcdHJlcXVlc3Q6IHt9LFxuXHRcdFx0XHRyZXNwb25zZToge30sXG5cdFx0XHRcdGVycm9yOm51bGwsXG5cdFx0XHRcdGlkOiBBUElTZXJ2aWNlLm5leHRMb2dJRCsrXG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ldExvZy5wdXNoKGxvZylcblx0XHRcdGlmKHRoaXMubmV0TG9nLmxlbmd0aD4xMDAwKVxuXHRcdFx0XHR0aGlzLm5ldExvZy5zaGlmdCgpXG5cdFx0XHRyZXR1cm4gbG9nO1xuXHRcdH1cblxuXHRcdC8vIGludGVybmFsIGNhbGxcblx0XHRSRVFfSU5URVJOQUxfQ0FMTC5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRcdGlmKCFpIHx8ICFpLmVuZHBvaW50cylcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XHRpZihlcCA9PT0gcmVxLmVuZHBvaW50KXtcblx0XHRcdFx0XHRcdHJlcS5pbnRlcm5hbENhbGw9dHJ1ZTtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaS5leGVjdXRlKHJlcSlcblx0XHRcdFx0XHRcdGlmKHJlc3BvbnNlLmVycm9yKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB7ZXJyb3I6RGVmYXVsdEVycm9ycy5VTktOT1dOX1JFUVVFU1QsZGF0YTpudWxsLGh0dHBTdGF0dXM6NDA0fVxuXHRcdH1cblxuXHRcdC8vIGluaXRpYWxpemUgZXhwcmVzc1xuXHRcdGNvbnN0IGFwcCA9IGV4cHJlc3MoKVxuXHRcdGNvbnN0IHNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFwcCk7XG5cblx0XHRSRVFfSFRUUF9TRVJWRVIubGlzdGVuZXIgPSBhc3luYyBpZ25vcmU9PntyZXR1cm4ge2V4cHJlc3M6YXBwLGh0dHA6c2VydmVyfX07XG5cblx0XHRpZih0aGlzLm9wdGlvbnMuaXNQcm9kdWN0aW9uRW52aXJvbm1lbnQpXG5cdFx0XHRhcHAuc2V0KFwiZW52XCIsJ3Byb2R1Y3Rpb24nKTtcblxuXHRcdGFwcC51c2UoZXhwcmVzcy5qc29uKHsgbGltaXQ6ICcxMG1iJyB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24vanNvblxuXHRcdGFwcC51c2UoZXhwcmVzcy51cmxlbmNvZGVkKHsgbGltaXQ6ICcxMG1iJywgZXh0ZW5kZWQ6IHRydWUgfSkpIC8vIGZvciBwYXJzaW5nIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxuXG5cdFx0YXBwLnVzZShmaWxlVXBsb2FkKHtcblx0XHRcdGxpbWl0SGFuZGxlcjogKHJlcSwgcmVzLCBuZXh0KT0+e1xuXHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuRklMRV9UT09fTEFSR0UsXG5cdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdGh0dHBTdGF0dXM6NDEzLFxuXHRcdFx0XHR9LCtuZXcgRGF0ZSgpLHJlcS5wYXRoKTtcblx0XHRcdH0sXG5cdFx0XHRsaW1pdHM6IHsgZmlsZVNpemU6IHRoaXMub3B0aW9ucy5maWxlTGltaXQgfSxcblx0XHRcdHVzZVRlbXBGaWxlczogdHJ1ZSxcblx0XHRcdHVyaURlY29kZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdHRlbXBGaWxlRGlyOiB0aGlzLm9wdGlvbnMuZmlsZVRlbXBEaXIsXG5cdFx0XHQvL3NhZmVGaWxlTmFtZXM6IHRydWUsXG5cdFx0XHRhYm9ydE9uTGltaXQ6dHJ1ZVxuXHRcdH0pKVxuXG5cdFx0YXBwLnVzZShhc3luYyAoZXJyOmFueSxyZXE6YW55LHJlc3A6YW55LG5leHQ6YW55KT0+e1xuXHRcdFx0XG5cdFx0XHRpZighZXJyKXtcblx0XHRcdFx0bmV4dCgpO1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdFx0Ly9yZXF1ZXN0IHN0YXJ0IHRpbWVcblx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0Y29uc3QgbG9nID0gYXdhaXQgUkVRX0NSRUFURV9ORVRfTE9HLnJlcXVlc3QoKTtcblx0XHRcdGxvZy5yZXF1ZXN0PXtcblx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdGRhdGE6XCJcIixcblx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXNcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3BvbnNlRXJyb3I9RGVmYXVsdEVycm9ycy5VTktOT1dOX1JFUVVFU1Q7XG5cdFx0XHRpZiAodHlwZW9mIGVyciA9PT0gXCJvYmplY3RcIiAmJiBlcnIuc3RhdHVzID09PSA0MDAgJiYgJ2JvZHknIGluIGVyciAmJiBlcnIudHlwZSA9PT0gJ2VudGl0eS5wYXJzZS5mYWlsZWQnKSB7XG5cdFx0XHRcdHJlc3BvbnNlRXJyb3IgPSBEZWZhdWx0RXJyb3JzLkpTT05fTUFMRk9STUVEXG5cdFx0XHR9XG4gICAgICBcblxuXHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzcCx7XG5cdFx0XHRcdGVycm9yOnJlc3BvbnNlRXJyb3IsXG5cdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0aHR0cFN0YXR1czo0MDBcblx0XHRcdH0sdG1lLFwiXCIsbG9nKVxuXG5cdFx0fSlcblxuXHRcdGNvbnN0IGNvcnNPcHRpb25zID0ge1xuXHRcdFx0b3JpZ2luOiAob3JpZ2luOiBhbnksIGNhbGxiYWNrOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3JpZ2luSXNXaGl0ZWxpc3RlZCA9IHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5pbmNsdWRlcyhvcmlnaW4pXG5cdFx0XHRcdGNhbGxiYWNrKG51bGwsIG9yaWdpbklzV2hpdGVsaXN0ZWQpXG5cdFx0XHR9LFxuXHRcdFx0Y3JlZGVudGlhbHM6IHRydWVcblx0XHR9XG5cdFx0YXBwLnVzZShjb3JzKGNvcnNPcHRpb25zKSlcblxuXHRcdC8vIHJlZ2lzdHJhdGUgZW5kcG9pbnRzXG5cdFx0QmFzZUVuZHBvaW50LnNldEVudHJ5UG9pbnQodGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludClcblx0XHRcblx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRhd2FpdCBpLmluaXQoKTtcblx0XHRcdGlmKCFpLmVuZHBvaW50cylcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRmb3IobGV0IGogb2YgaS5lbmRwb2ludHMpe1xuXHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdGVwID0gZXAucmVwbGFjZUFsbChcIi8vXCIsXCIvXCIpXG5cdFx0XHRcdFxuXG5cdFx0XHRcdC8vIGluY29taW5nIHJlcXVlc3Rcblx0XHRcdFx0YXBwLmFsbChlcCxhc3luYyAocmVxLHJlcyk9Pntcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzQ291bnQrKztcblx0XHRcdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKTtcblx0XHRcdFx0XHRsZXQgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsID0gbnVsbDtcblx0XHRcdFx0XHRpZighaS5pZ25vcmVIdHRwTG9nZ2luZyl7XG5cdFx0XHRcdFx0XHRsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0XHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRcdFx0XHR1cmw6cmVxLnVybCxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGRhdGE6dGhpcy5jaGVja0RhdGFMZW5ndGgocmVxLmJvZHkpLFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6dGhpcy5jaGVja0RhdGFMZW5ndGgocmVxLnBhcmFtcylcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBleGVjdXRlID0gYXN5bmMgKCk9PntcblxuXHRcdFx0XHRcdFx0Y29uc3QgYm9keSA9IHJlcS5ib2R5O1xuXHRcdFx0XHRcdFx0aWYocmVxLnF1ZXJ5ICYmIHR5cGVvZiByZXEucXVlcnkgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gcmVxLnF1ZXJ5KXtcblx0XHRcdFx0XHRcdFx0XHRib2R5W2ldPXJlcS5xdWVyeVtpXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBodHRwUmVxdWVzdDpIVFRQUmVxdWVzdFZPID0ge1xuXHRcdFx0XHRcdFx0XHRyYXc6cmVxIGFzIEluY29taW5nTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGRhdGE6cmVxLmJvZHksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczpyZXEucGFyYW1zLFxuXHRcdFx0XHRcdFx0XHRoZWFkZXJzOnJlcS5oZWFkZXJzIGFzIGFueSxcblx0XHRcdFx0XHRcdFx0ZW5kcG9pbnQ6ZXAsXG5cdFx0XHRcdFx0XHRcdGZpbGVzOnJlcS5maWxlcyA/PyBudWxsLFxuXHRcdFx0XHRcdFx0XHRyZWZlcmVyOnJlcS5nZXQoXCJSZWZlcmVyXCIpLFxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIpe1xuXHRcdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZXByb2R1Y2VyUmVzdWx0ID0gYXdhaXQgdGhpcy5vcHRpb25zLnByZXByb2R1Y2VyKGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0aWYocHJlcHJvZHVjZXJSZXN1bHQpXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlcHJvZHVjZXJSZXN1bHQgPSBwcmVwcm9kdWNlclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBkZXRhaWxzPWAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdGxldCBzdGFjazpJRXJyb3JbXXx1bmRlZmluZWQ9dW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdGlmKEVycm9yVXRpbHMuaXNFcnJvcihlKSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzPShlIGFzIGFueSkubWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhY2sgPSBbZSBhcyBhbnldO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGlzTXlzcWxFcnJvcihlKSlcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHMgPSAoZSBhcyBNeXNxbEVycm9yKS5tZXNzYWdlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtlcnJvcjp7Y29kZToxMDAwMixtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsc3RhY2s6c3RhY2ssZGV0YWlsczpgJHtlfWB9LGRhdGE6bnVsbCxodHRwU3RhdHVzOjUwMH0sdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHRcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBpbnRlcmNlcHRvciBpZiBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYoIWouaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWouYWxsb3dJbnRlcmNlcHRvckVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGludGVyY2VwdG9yUmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5pbnRlcmNlcHRvclJlc3VsdCA9IGludGVyY2VwdG9yUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJlY2hlY2tcblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihlKVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVGYXRhbEVycm9yKGVwKTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGVycm9yIGlzIElFcnJvclxuXHRcdFx0XHRcdFx0XHRsZXQgZGF0YTpUcmFuc2ZlclBhY2tldFZPID0ge1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMCxcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEgPSB7ZXJyb3I6ZSBhcyBJRXJyb3J9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGRhdGEsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxyZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZXhlY3V0ZSgpXG5cdFx0XHRcdH0pOy8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XG5cblx0XHQvLyBmaW5hbCBoYW5kbGVyXG5cdFx0YXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcblx0XHRcdFxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKClcblxuXHRcdFx0aWYodGhpcy5tb25pdG9yICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdC8vY2hlY2sgaWYgcmVxdWVzdGluZyBtb25pdG9yXG5cdFx0XHRcdGlmKHJlcS5tZXRob2Q9PT1cIkdFVFwiKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgbW9uaXRvclJlcXVlc3Q9ZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRcdFx0aWYocmVxLm9yaWdpbmFsVXJsLmVuZHNXaXRoKFwiL3NtLVwiK2hhc2gpKXtcblx0XHRcdFx0XHRcdFx0bW9uaXRvclJlcXVlc3Q9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobW9uaXRvclJlcXVlc3Qpe1xuXHRcdFx0XHRcdFx0Ly8gc2VuZCBpbmRleCBUaHUsIDE2IE5vdiAyMDIzIDIzOjMzOjM1IEdNVFxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGlmKCF0aGlzLm1vbml0b3JJbmRleEZpbGUpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvckluZGV4RmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoX19kaXJuYW1lLFwibW9uaXRvclwiLFwiaW5kZXguaHRtbFwiKSk7XG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcInRleHQvaHRtbFwiKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIix0aGlzLm1vbml0b3JJbmRleEZpbGUuYnl0ZUxlbmd0aClcblx0XHRcdFx0XHRcdFx0cmVzLnN0YXR1cygyMDApLnNlbmQodGhpcy5tb25pdG9ySW5kZXhGaWxlKTtcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHRtZSxyZXEucGF0aCk7XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRcblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDA0XG5cdFx0XHR9LHRtZSxyZXEucGF0aCk7XG5cdFx0fSlcblxuXHRcdHNlcnZlci5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pXG5cblx0XHQvKmFwcC5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pKi9cblx0fVxuXG5cdGFzeW5jIHNlbmRSZXNwb25zZShyZWY6c3RyaW5nLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsLHJlcT86SFRUUFJlcXVlc3RWTyl7XG5cblx0XHRpZih0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKXtcblx0XHRcdHRyeXtcblx0XHRcdFx0ZGF0YSA9IGF3YWl0IHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIocmVxLHJlcyxkYXRhLHJlcXVlc3RUaW1lLGVuZHBvaW50LGxvZyk7XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiUG9zdHByb2R1Y2VyIGVycm9yXCIsZSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSkpXG5cdFx0XHRkYXRhID0ge2Vycm9yOmRhdGEgYXMgSUVycm9yLGRhdGE6bnVsbH1cblx0XHRcbiAgICAgICAgZGF0YS5yZXNwb25zZVRpbWUgPSAoK25ldyBEYXRlKCkpIC0gcmVxdWVzdFRpbWU7XG4gICAgICAgIGRhdGEuY29yZSA9IHRoaXMudmVyc2lvblxuICAgICAgICBkYXRhLmVuZHBvaW50ID0gZW5kcG9pbnQgPz8gXCJub19lbmRwb2ludFwiXG5cdFx0XG5cdFx0aWYodGhpcy5vcHRpb25zLmFwcFZlcnNpb24pXG5cdFx0XHRkYXRhLnZlcnNpb249dGhpcy5vcHRpb25zLmFwcFZlcnNpb25cblxuXHRcdFxuXHRcdGlmKGxvZyl7XG5cdFx0XHRsb2cudGltZSA9IGRhdGEucmVzcG9uc2VUaW1lXG5cdFx0XHRsb2cucmVmZXJlcj1yZWY7XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVSZXNwb25zZShkYXRhLmVuZHBvaW50LGRhdGEucmVzcG9uc2VUaW1lKVxuXG4gICAgICAgIGlmKHJlcy5kZXN0cm95ZWQgfHwgcmVzLmNsb3NlZCl7XG5cblx0XHRcdGlmKGxvZylcblx0XHRcdFx0bG9nLmVycm9yID0gXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlIGZvcjogXCIrZGF0YS5lbmRwb2ludFxuXHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG4gICAgICAgICAgICBcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZTogXCIrZGF0YS5lbmRwb2ludCxkYXRhKVxuICAgICAgICAgICAgXG5cdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cbiAgICAgICAgfWVsc2V7XG5cdFx0XHR0cnl7XG5cblx0XHRcdFx0aWYoZGF0YS5maWxlKXtcblxuXHRcdFx0XHRcdHJlcy5zZW5kRmlsZShkYXRhLmZpbGUsZXJyPT57XG5cdFx0XHRcdFx0XHRpZihlcnIpe1xuXHRcdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdFx0bG9nLmVycm9yID0gXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNhbid0IHNlbmQgZmlsZTogXCIrZGF0YS5maWxlLGVycilcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5tb25pdG9yICYmIGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVBUElFcnJvcihkYXRhLmVuZHBvaW50KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZWYscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLkNBTlRfU0VORF9GSUxFLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHJlcXVlc3RUaW1lLGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fSlcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0aWYoZGF0YS5yZWRpcmVjdCl7XG5cdFx0XHRcdFx0cmVzLnJlZGlyZWN0KGRhdGEucmVkaXJlY3QpO1xuXHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHtyZWRpcmVjdDpkYXRhLnJlZGlyZWN0fVxuXHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHQvLyBzZXR1cCBoZWFkZXJzXG5cdFx0XHRcdFx0aWYoZGF0YS5oZWFkZXJzKXtcblx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiBkYXRhLmhlYWRlcnMpXG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoaSxkYXRhLmhlYWRlcnNbaV0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGRhdGEuZXJyb3IgJiYgZGF0YS5lcnJvci5odHRwU3RhdHVzICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cz45OSlcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlID0gZGF0YS5lcnJvci5odHRwU3RhdHVzXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0cmVzLnN0YXR1c0NvZGU9ZGF0YS5odHRwU3RhdHVzID8/IDIwMFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGRhdGEucmF3UmVzcG9uc2Upe1xuXHRcdFx0XHRcdFx0cmVzLnNlbmQoZGF0YS5kYXRhKVxuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0cmVzLnNlbmQoZGF0YSk7XG5cdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGEpXG5cblx0XHRcdFx0XHRcdGlmKGRhdGEuZXJyb3IgJiYgdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiLGUpO1xuXHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0bG9nLmVycm9yPVwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiXG5cdFx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHNob3cgbG9nXG5cdFx0aWYodGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyAmJiBsb2cpXG5cdFx0XHR0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nKGxvZylcbiAgICB9XG5cblxuXHRjaGVja0RhdGFMZW5ndGgoZGF0YTphbnkscmVzdWx0PzphbnksbHZsPzpudW1iZXIpOmFueXtcblx0XHRcblx0XHRpZighbHZsKVxuXHRcdFx0bHZsPTA7XG5cblx0XHRpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIil7XG5cdFx0XHRpZih0eXBlb2YgZGF0YT09PVwic3RyaW5nXCIgJiYgZGF0YS5sZW5ndGg+MTAyNClcblx0XHRcdFx0cmV0dXJuIGRhdGEuc3Vic3RyaW5nKDAsMTAwMCkrXCIuLi4gKHRvdGFsOlwiICsgZGF0YS5sZW5ndGggKyBcIilcIlxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0aWYodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYoIXJlc3VsdClcblx0XHRcdFx0cmVzdWx0PXt9O1xuXHRcdFx0bGV0IGFycmNudCA9IDEwMDtcblx0XHRcdGZvcihsZXQgaSBpbiBkYXRhKXtcblx0XHRcdFx0cmVzdWx0W2ldPXRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGFbaV0scmVzdWx0W2ldLGx2bCsxKTtcblx0XHRcdFx0YXJyY250LS07XG5cdFx0XHRcdGlmKGFycmNudDw9MCl7XG5cdFx0XHRcdFx0cmVzdWx0W1wiLi4uXCJdPVwiLi4uIHRvdGFsOiBcIitBcnJheS5pc0FycmF5KGRhdGEpP2RhdGEubGVuZ3RoOk9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0ID8/IG51bGw7XG5cdH1cblxufVxuIl19
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
27
|
};
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
|
-
exports.MysqlService = exports.executeQuery = exports.REQ_MYSQL_TROLLBACK = exports.REQ_MYSQL_TCOMMIT = exports.REQ_MYSQL_TQUERY = exports.REQ_MYSQL_TBEGIN = exports.REQ_MYSQL_QUERY = exports.S_MYSQL_STARTED = void 0;
|
29
|
+
exports.MysqlService = exports.isMysqlError = exports.executeQuery = exports.REQ_MYSQL_TROLLBACK = exports.REQ_MYSQL_TCOMMIT = exports.REQ_MYSQL_TQUERY = exports.REQ_MYSQL_TBEGIN = exports.REQ_MYSQL_QUERY = exports.S_MYSQL_STARTED = void 0;
|
30
30
|
const BaseService_1 = require("./BaseService");
|
31
31
|
const badmfck_signal_1 = __importStar(require("badmfck-signal"));
|
32
32
|
const crypto_1 = require("crypto");
|
@@ -42,6 +42,10 @@ exports.REQ_MYSQL_TCOMMIT = new badmfck_signal_1.Req(undefined, "REQ_MYSQL_TCOMM
|
|
42
42
|
exports.REQ_MYSQL_TROLLBACK = new badmfck_signal_1.Req(undefined, "REQ_MYSQL_TROLLBACK");
|
43
43
|
const executeQuery = async (query) => { return await exports.REQ_MYSQL_QUERY.request(query); };
|
44
44
|
exports.executeQuery = executeQuery;
|
45
|
+
const isMysqlError = (e) => {
|
46
|
+
return e.code !== undefined && e.errno !== undefined && e.sql !== undefined && e.name !== undefined && e.message !== undefined;
|
47
|
+
};
|
48
|
+
exports.isMysqlError = isMysqlError;
|
45
49
|
class MysqlService extends BaseService_1.BaseService {
|
46
50
|
reconnectionTimeout = 1000 * 3;
|
47
51
|
reconnecting = false;
|
@@ -766,4 +770,4 @@ const encrypt = (txt) => {
|
|
766
770
|
}
|
767
771
|
};
|
768
772
|
exports.default = MysqlService;
|
769
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBMEQ7QUFDMUQsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFFVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBOEV2SSxNQUFhLFlBQWEsU0FBUSx5QkFBVztJQUV6QyxtQkFBbUIsR0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDO0lBQzNCLFlBQVksR0FBQyxLQUFLLENBQUM7SUFDbkIsSUFBSSxHQUFpQixJQUFJLENBQUM7SUFDMUIsT0FBTyxDQUFxQjtJQUM1QixjQUFjLEdBQUMsS0FBSyxDQUFDO0lBQ3JCLFNBQVMsQ0FBSTtJQUViLEtBQUssR0FBQyxLQUFLLENBQUM7SUFFWixPQUFPLEdBQUMsRUFBRSxDQUFDO0lBQ1gsTUFBTSxDQUFDLGlCQUFpQixHQUFDLENBQUMsQ0FBQztJQUMzQixZQUFZLEdBQWdCLEVBQUUsQ0FBQTtJQUU5QixzQkFBc0IsR0FBRyxJQUFJLEdBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztJQUVuQyxvQkFBb0IsR0FBcUIsSUFBSSxDQUFDO0lBQzlDLHdCQUF3QixHQUFhLElBQUksQ0FBQztJQUMxQyx3QkFBd0IsR0FBUSxDQUFDLENBQUM7SUFFbEMsWUFBWSxPQUEyQjtRQUNuQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUl2QixJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFBO1FBQ3BGLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUE7UUFDcEYsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQTtRQUNoRyxJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFBO1FBRWhHLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0I7WUFDbEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7UUFFdEUsV0FBVyxDQUFDLEdBQUUsRUFBRTtZQUVaLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxNQUFNLFVBQVUsR0FBVSxFQUFFLENBQUM7WUFDN0IsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFDO2dCQUMzQixJQUFHLEdBQUcsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBQztvQkFDM0MsSUFBQSxxQkFBUSxFQUFDLCtDQUErQyxDQUFDLENBQUE7b0JBQ3pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2lCQUN4QjthQUNKO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUUzRSxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBSS9ELENBQUMsRUFBQyxJQUFJLEdBQUMsRUFBRSxDQUFDLENBQUE7UUFFVixXQUFXLENBQUMsR0FBRSxFQUFFO1lBQ1osSUFBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3pCLE9BQU87WUFHWCxJQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBQyxJQUFJLENBQUMsd0JBQXdCLEdBQUMsSUFBSSxHQUFDLEVBQUUsR0FBQyxFQUFFLEVBQUM7Z0JBQ25ELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLG9CQUFvQixHQUFDLElBQUksQ0FBQzthQUNsQztRQUVMLENBQUMsRUFBQyxJQUFJLEdBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFBO1FBRVosSUFBRyxPQUFPLENBQUMsd0JBQXdCLEVBQUM7WUFDaEMsSUFBRztnQkFDQSxJQUFJLENBQUMsWUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFBQztvQkFDaEQsWUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztpQkFDbEQ7YUFDSjtZQUFBLE9BQU0sQ0FBQyxFQUFDO2dCQUNMLE9BQU8sQ0FBQyx3QkFBd0IsR0FBQyxTQUFTLENBQUM7Z0JBQzNDLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQywwQ0FBMEMsQ0FBQyxDQUFBO2FBQzNFO1NBQ0o7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUUsS0FBNkIsSUFBMEIsT0FBTyxNQUFNLHVCQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUUvSCxLQUFLLENBQUMsSUFBSTtRQUNOLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUdiLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFHSCxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxLQUFLLElBQUksRUFBRTtZQUM1QixNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxXQUFXLEdBQVcsS0FBSyxDQUFDO1FBRWhDLE9BQU0sQ0FBQyxXQUFXLEVBQUM7WUFDZixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsc0JBQXNCLENBQUMsQ0FBQTtZQUNwRCxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsSUFBRyxDQUFDLFdBQVcsRUFBQztnQkFDWixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsa0RBQWtELENBQUMsQ0FBQTtnQkFDaEYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBQyxFQUFFLENBQUEsVUFBVSxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO2FBQ3pEO1NBQ0o7UUFFRCx1QkFBZSxDQUFDLFFBQVEsR0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7WUFDbEMsSUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNuQixJQUFJLEdBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixNQUFNLFFBQVEsR0FBQyxFQUFFLENBQUE7WUFDakIsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUM7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsYUFBYSxJQUFJLElBQUksRUFBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssRUFBQyxDQUFDLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDbEk7WUFFRCxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRWhELE1BQU0sTUFBTSxHQUFJLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxLQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBQztnQkFDaEIsSUFBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUNyQjtZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQTtRQUVELHdCQUFnQixDQUFDLFFBQVEsR0FBQyxLQUFLLElBQUcsRUFBRTtZQUNoQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDOUMsSUFBRyxDQUFDLElBQUk7Z0JBQ0osT0FBTyxFQUFDLElBQUksRUFBQyxTQUFTLEVBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsU0FBUyxFQUFDLEtBQUssRUFBQyxDQUFBO1lBRzFILEtBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBQztnQkFDM0IsSUFBRyxDQUFDLENBQUMsSUFBSSxLQUFHLElBQUksRUFBQztvQkFDYixJQUFBLG9CQUFPLEVBQUMsbUNBQW1DLENBQUMsQ0FBQTtvQkFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxDQUFBO2lCQUN2STthQUNKO1lBRUQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDN0MsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFDLEdBQUcsQ0FBQyxDQUFBO1lBRWpELElBQUc7Z0JBR0MsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBRXRDLElBQUcsSUFBSSxDQUFDLEtBQUs7b0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO2FBRXpDO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQ04sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLFNBQVMsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxHQUFHLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFBO2dCQUNwSCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QztZQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNuQixFQUFFLEVBQUMsR0FBRztnQkFDTixTQUFTLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDcEIsSUFBSSxFQUFDLElBQUk7Z0JBQ1QsT0FBTyxFQUFDLEVBQUU7YUFDYixDQUFDLENBQUE7WUFFRixJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBRXhELE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFBO1FBRUQsd0JBQWdCLENBQUMsUUFBUSxHQUFDLEtBQUssRUFBQyxJQUFJLEVBQUEsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELElBQUcsQ0FBQyxHQUFHO2dCQUNILE9BQU8sRUFBQyxHQUFHLEVBQUU7d0JBQ1QsSUFBSSxFQUFDLFFBQVE7d0JBQ2IsS0FBSyxFQUFDLE1BQU07d0JBQ1osS0FBSyxFQUFDLElBQUk7d0JBQ1YsR0FBRyxFQUFDLEVBQUU7d0JBQ04sSUFBSSxFQUFDLFFBQVE7d0JBQ2IsT0FBTyxFQUFDLHVCQUF1QjtxQkFDbEMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxDQUFBO1lBRTNDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RSxJQUFJLEdBQUcsR0FBQyxJQUFJLENBQUM7WUFDYixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFbkIsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUV4RCxJQUFHO2dCQUNDLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pDO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUFDO1lBRWhELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLElBQUcsR0FBRztnQkFDRixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO2dCQUNBLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBRyxDQUFDLEVBQUM7b0JBQ3hELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDL0MsSUFBRzt3QkFDQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQzFELElBQUcsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQzs0QkFDN0MsS0FBSyxHQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBUyxDQUFDLEtBQUssQ0FBQzt5QkFDOUM7cUJBQ0o7b0JBQUEsT0FBTSxDQUFDLEVBQUM7d0JBQ0wsSUFBQSxxQkFBUSxFQUFDLGlDQUFpQyxFQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNqRDtpQkFDSjthQUNKO1lBRUQsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFDLEdBQUcsQ0FBQSxDQUFDLENBQUEsR0FBRyxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUEsV0FBVyxDQUFDLENBQUE7WUFFdEUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxHQUFHLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFBLFdBQVcsRUFBQyxDQUFDLENBQUE7WUFFaEUsT0FBTztnQkFDSCxJQUFJLEVBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUk7Z0JBQzVCLEtBQUssRUFBQyxHQUFHO2dCQUNULEtBQUssRUFBQyxLQUFLO2FBQ2QsQ0FBQztRQUNOLENBQUMsQ0FBQTtRQUVELDJCQUFtQixDQUFDLFFBQVEsR0FBQyxLQUFLLEVBQUUsR0FBVSxFQUFDLEVBQUU7WUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELElBQUcsQ0FBQyxHQUFHLEVBQUM7Z0JBQ0osT0FBTztvQkFDSCxJQUFJLEVBQUMsUUFBUTtvQkFDYixLQUFLLEVBQUMsTUFBTTtvQkFDWixLQUFLLEVBQUMsSUFBSTtvQkFDVixTQUFTLEVBQUMsS0FBSztvQkFDZixHQUFHLEVBQUMsRUFBRTtvQkFDTixJQUFJLEVBQUMsUUFBUTtvQkFDYixPQUFPLEVBQUMsdUJBQXVCO2lCQUNsQyxDQUFBO2FBQ0o7WUFFRCxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUE7UUFFRCx5QkFBaUIsQ0FBQyxRQUFRLEdBQUMsS0FBSyxFQUFFLEdBQVUsRUFBQyxFQUFFO1lBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLEVBQUUsS0FBRyxHQUFHLENBQUMsQ0FBQztZQUNsRCxJQUFHLENBQUMsR0FBRyxFQUFDO2dCQUNKLE9BQU87b0JBQ0gsSUFBSSxFQUFDLFFBQVE7b0JBQ2IsS0FBSyxFQUFDLE1BQU07b0JBQ1osS0FBSyxFQUFDLElBQUk7b0JBQ1YsR0FBRyxFQUFDLEVBQUU7b0JBQ04sSUFBSSxFQUFDLFFBQVE7b0JBQ2IsT0FBTyxFQUFDLHVCQUF1QjtvQkFDL0IsU0FBUyxFQUFDLEtBQUs7aUJBQ2xCLENBQUE7YUFDSjtZQUdELElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7WUFHN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUcsR0FBRyxDQUFDLENBQUM7WUFFNUQsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFDLElBQUksQ0FBQyxZQUFZLENBQUUsQ0FBQTtZQUV2RCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbkMsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLENBQUE7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFnQjtRQUV6QixJQUFHO1lBQ0MsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRXhCLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3RCO1FBQUEsT0FBTSxDQUFDLEVBQUM7WUFDTCxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBRWhCLENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBZ0IsRUFBQyxZQUFxQjtRQUM1RCxJQUFJLEdBQUcsR0FBQyxJQUFJLENBQUM7UUFDYixJQUFHO1lBQ0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ2pELE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFeEIsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsSUFBRyxDQUFDLFlBQVk7Z0JBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBQ3pEO1FBQUEsT0FBTSxDQUFDLEVBQUM7WUFDTCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsNEJBQTRCLEVBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3RFLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxFQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzlDLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTO1FBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBQ3RDLEtBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVk7WUFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhDLElBQUcsSUFBSSxDQUFDLElBQUksRUFBQztZQUNULElBQUc7Z0JBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQUM7WUFBQSxPQUFNLENBQUMsRUFBQztnQkFDL0IsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLHlCQUF5QixDQUFDLENBQUE7YUFDMUQ7U0FDSjtRQUVELElBQUcsSUFBSSxDQUFDLG9CQUFvQjtZQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLG9CQUFvQixHQUFDLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBWTtRQUMxQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNqRSxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUQsVUFBVSxHQUFHLDZCQUE2QixHQUFDLFVBQVUsQ0FBQTtRQUNyRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLHlCQUF5QixDQUFDLEdBQWdCLEVBQUMsT0FBYztRQUUzRCxJQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUM7WUFDN0UsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLDhIQUE4SCxDQUFDLENBQUE7WUFDNUosT0FBTztTQUNWO1FBR0QsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRzVFLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFDLE9BQU8sR0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRixJQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBQztnQkFDekIsSUFBRyxJQUFJLENBQUMsd0JBQXdCLEtBQUcsSUFBSSxFQUFDO29CQUNwQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxvQkFBb0IsR0FBQyxJQUFJLENBQUM7aUJBQ2xDO2FBQ0o7WUFHRCxJQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBQztnQkFDN0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUMsRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLHdCQUF3QixHQUFDLElBQUksQ0FBQzthQUN0QztZQUVELElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBQyxJQUFJLEVBQUMsR0FBRyxDQUFDLE9BQU8sRUFBQyxPQUFPLENBQUMsQ0FBQTtZQUUzRSxJQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQjtnQkFDekIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUMsRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztZQUV2RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxDQUFDLE9BQU8sRUFBQyxJQUFJLEVBQUMsR0FBRyxDQUFDLFNBQVMsRUFBQyxJQUFJLEVBQUMsT0FBTyxFQUFDLENBQUMsR0FBQyxXQUFXLEVBQUMsR0FBRyxDQUFBLEVBQUU7Z0JBQ25ILElBQUcsR0FBRztvQkFDRixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsNkNBQTZDLENBQUMsQ0FBQTs7b0JBRTNFLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyxnQ0FBZ0MsQ0FBQyxDQUFBO1lBQ3RFLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUU5QztRQUdELElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUI7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUdELEtBQUssQ0FBQyxZQUFZO1FBRWQsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLGdDQUFnQyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTdHLElBQUcsSUFBSSxDQUFDLElBQUksRUFBQztZQUNULElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQixJQUFHO2dCQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUFDO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQy9CLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyx5QkFBeUIsQ0FBQyxDQUFBO2FBQzFEO1lBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDcEI7UUFhRCxJQUFHO1lBQ0MsSUFBSSxDQUFDLElBQUksR0FBRSxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2dCQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2dCQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO2dCQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO2dCQUMvQixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2dCQUN2QixlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlO2dCQUM3QyxVQUFVLEVBQUUsRUFBRTtnQkFDZCxrQkFBa0IsRUFBRSxJQUFJO2dCQUV4QixlQUFlLEVBQUMsSUFBSTtnQkFDcEIscUJBQXFCLEVBQUMsQ0FBQyxHQUFDLElBQUk7Z0JBRTVCLFdBQVcsRUFBQyxJQUFJLEdBQUMsRUFBRSxHQUFDLENBQUM7YUFDekIsQ0FBQyxDQUFDO1NBQ047UUFBQSxPQUFNLENBQUMsRUFBQztZQUNMLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyx5QkFBeUIsQ0FBQyxDQUFBO1lBQ3ZELE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdkMsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsMEJBQTBCLENBQUMsQ0FBQTtRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3BDLElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLDJCQUEyQixDQUFDLENBQUE7UUFDakUsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNwQyxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQywyQkFBMkIsQ0FBQyxDQUFBO1FBQ2pFLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUMxQixJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQywyQkFBMkIsQ0FBQyxDQUFBO1FBQ2pFLENBQUMsQ0FBQyxDQUFBO1FBR0YsSUFBRyxJQUFJLENBQUMsS0FBSztZQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUV6QyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxFQUFDLEVBQUU7WUFDdkMsSUFBRztnQkFDQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUE7Z0JBQzdDLElBQUcsSUFBSSxFQUFDO29CQUNKLE1BQU0sQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7b0JBQ2hCLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyxxQkFBcUIsQ0FBQyxDQUFBO29CQUNuRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7aUJBRWhCOztvQkFDRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7YUFDckI7WUFBQSxPQUFNLENBQUMsRUFBQztnQkFDTCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMseUJBQXlCLENBQUMsQ0FBQTtnQkFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQ2pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFUCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixLQUFJLENBQUM7SUFHN0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUE4QyxFQUFDLHNCQUErQjtRQUNoRyxJQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDckIsT0FBTyxNQUFNLENBQUM7UUFDbEIsTUFBTSxHQUFHLEdBQXVCLEVBQUUsQ0FBQztRQUNuQyxLQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBQztZQUNoQixJQUFHLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ04sU0FBUztZQUNiLElBQUcsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFJLFFBQVE7Z0JBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDcEI7Z0JBQ0EsSUFBRyxDQUFDLHNCQUFzQixFQUFDO29CQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFDO3dCQUNSLEtBQUssRUFBQyxDQUFDLENBQUMsS0FBSzt3QkFDYixNQUFNLEVBQUMsQ0FBQyxDQUFDLE1BQU07d0JBQ2YsY0FBYyxFQUFDLENBQUMsQ0FBQyxjQUFjO3dCQUMvQixjQUFjLEVBQUMsQ0FBQyxDQUFDLGNBQWM7d0JBQy9CLFlBQVksRUFBQyxDQUFDLENBQUMsWUFBWTt3QkFDM0IsSUFBSSxFQUFDLENBQUMsQ0FBQyxJQUFJO3FCQUNkLENBQUE7aUJBQ0o7O29CQUNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTthQUMxQjtTQUVKO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUEyQztRQUM3RCxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQW1CLEVBQUUsQ0FBQztRQUNsQyxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBQztZQUNiLElBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBQztnQkFDcEMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBd0QsQ0FBQztnQkFDdkUsSUFBRyxDQUFDLEVBQUUsRUFBQztvQkFDSCxFQUFFLEdBQUM7d0JBQ0MsSUFBSSxFQUFDLENBQUM7d0JBQ04sS0FBSyxFQUFDLElBQUk7d0JBQ1YsTUFBTSxFQUFDLEtBQUs7d0JBQ1osY0FBYyxFQUFDLEtBQUs7d0JBQ3BCLGNBQWMsRUFBQyxLQUFLO3dCQUNwQixZQUFZLEVBQUMsS0FBSztxQkFDckIsQ0FBQTtpQkFDSjtnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNSLElBQUksRUFBQyxFQUFFLENBQUMsSUFBYyxJQUFJLENBQUM7b0JBQzNCLEtBQUssRUFBQyxFQUFFLENBQUMsS0FBSztvQkFDZCxNQUFNLEVBQUMsRUFBRSxDQUFDLE1BQWlCO29CQUMzQixjQUFjLEVBQUMsRUFBRSxDQUFDLGNBQXlCO29CQUMzQyxjQUFjLEVBQUMsRUFBRSxDQUFDLGNBQXlCO29CQUMzQyxZQUFZLEVBQUMsRUFBRSxDQUFDLFlBQXVCO2lCQUMxQyxDQUFDLENBQUE7YUFDTDtpQkFBSTtnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNSLElBQUksRUFBQyxDQUFDO29CQUNOLEtBQUssRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUF5QztpQkFDdkQsQ0FBQyxDQUFBO2FBQ0w7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQVksRUFBQyxNQUE4QztRQUUzRSxJQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDckIsTUFBTSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakQsS0FBSSxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUM7WUFDaEIsTUFBTSxHQUFHLEdBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxZQUFZLEdBQUMsR0FBRyxDQUFDO1lBQ25CLEtBQUssR0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLEdBQUcsR0FBQyxFQUFFLENBQUMsQ0FBQTtTQUM1QztRQUVELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUcsQ0FBQyxDQUFDO1lBQ3JELEtBQUssSUFBRSxZQUFZLENBQUE7UUFFdkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFDLEVBQUUsQ0FBQyxDQUFBO1FBR3ZDLElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBRyxDQUFDLENBQUMsRUFBQztZQUM3QixJQUFJLGdCQUFnQixHQUFDLEVBQUUsQ0FBQTtZQUN2QixJQUFJLGlCQUFpQixHQUFDLEVBQUUsQ0FBQTtZQUN4QixLQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBQztnQkFDaEIsSUFBRyxDQUFDLENBQUMsY0FBYztvQkFDZixTQUFTO2dCQUViLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxFQUFFLENBQUMsR0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDaEcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTthQUN6QztZQUVELEtBQUssR0FBQyxLQUFLO2lCQUNOLFVBQVUsQ0FBQyxTQUFTLEVBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNoRCxVQUFVLENBQUMsU0FBUyxFQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQ3pEO1FBRUQsSUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxFQUFDO1lBQzdCLElBQUksYUFBYSxHQUFDLEVBQUUsQ0FBQTtZQUNwQixJQUFJLGNBQWMsR0FBQyxFQUFFLENBQUE7WUFDckIsS0FBSSxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUM7Z0JBQ2hCLElBQUcsQ0FBQyxDQUFDLGNBQWM7b0JBQ2YsU0FBUztnQkFDYixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUIsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDdEM7WUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQzFHO1FBRUQsSUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFHLENBQUMsQ0FBQyxFQUFDO1lBQy9CLElBQUksUUFBUSxHQUFDLEVBQUUsQ0FBQTtZQUNmLEtBQUksSUFBSSxDQUFDLElBQUksTUFBTSxFQUFDO2dCQUNoQixJQUFHLENBQUMsQ0FBQyxjQUFjO29CQUNmLFNBQVM7Z0JBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxFQUFFLENBQUMsR0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFBO2FBQzdHO1lBQ0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtTQUU3RDtRQUVELElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBRyxDQUFDLENBQUMsRUFBQztZQUNsQyxJQUFJLFdBQVcsR0FBQyxFQUFFLENBQUM7WUFDbkIsS0FBSSxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUM7Z0JBQ2hCLElBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWTtvQkFDZCxTQUFTO2dCQUNiLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFDLEdBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTthQUNoSDtZQUNELEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7U0FDbkU7UUFHRCxPQUFRLEtBQUssQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQTBDLEVBQUMsTUFBZTtRQUNwRixJQUFHLENBQUMsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBQztZQUNwQyxLQUFLLEdBQUcsS0FBSyxDQUFBLENBQUMsQ0FBQSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBO1lBQzlDLElBQUcsS0FBSyxLQUFHLElBQUk7Z0JBQ1gsS0FBSyxHQUFHLEdBQUcsR0FBQyxLQUFLLEdBQUMsR0FBRyxDQUFBOztnQkFFckIsS0FBSyxHQUFHLE1BQU0sQ0FBQTtTQUNyQjtRQUNELElBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUztZQUNwQyxPQUFPLE1BQU0sQ0FBQTtRQUNqQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBR0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFZLEVBQUMsYUFBeUIsRUFBQyxhQUFvQixFQUFDLFNBQWlCLEVBQUMsY0FBc0I7UUFDOUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBZ0MsRUFBQyxNQUFNLEVBQUMsRUFBRTtZQUVoRSxJQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQztnQkFDVixJQUFBLHFCQUFRLEVBQUMsb0JBQW9CLEVBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQ3hDLE9BQU8sQ0FBQztvQkFDSixLQUFLLEVBQUM7d0JBQ0YsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsS0FBSyxFQUFFLE1BQU07d0JBQ2IsS0FBSyxFQUFFLElBQUk7d0JBQ1gsR0FBRyxFQUFFLEtBQUs7d0JBQ1YsSUFBSSxFQUFDLFNBQVM7d0JBQ2QsT0FBTyxFQUFDLHdCQUF3Qjt3QkFDaEMsU0FBUyxFQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxLQUFLO3FCQUNqQztvQkFDRCxJQUFJLEVBQUMsSUFBSTtvQkFDVCxLQUFLLEVBQUMsQ0FBQztpQkFDVixDQUFDLENBQUE7Z0JBQ0YsT0FBTzthQUNWO1lBR0QsSUFBRztnQkFDQyxJQUFJLElBQUksR0FBMkIsSUFBSSxDQUFBO2dCQUN2QyxJQUFHLGFBQWEsSUFBSSxhQUFhLEdBQUMsQ0FBQyxFQUFDO29CQUNoQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFHLGFBQWEsQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUM7b0JBQ3JFLElBQUcsSUFBSSxDQUFDLEtBQUs7d0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7aUJBQ25FO3FCQUFJO29CQUNELElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFDO2dCQUVELElBQUcsSUFBSSxDQUFDLEtBQUs7b0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUcvQyxJQUFHLENBQUMsSUFBSSxFQUFDO29CQUNMLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyx3QkFBd0IsQ0FBQyxDQUFBO29CQUN0RCxPQUFPLENBQUM7d0JBQ0osS0FBSyxFQUFDOzRCQUNGLElBQUksRUFBRSxTQUFTOzRCQUNmLEtBQUssRUFBRSxNQUFNOzRCQUNiLEtBQUssRUFBRSxJQUFJOzRCQUNYLEdBQUcsRUFBRSxLQUFLOzRCQUNWLElBQUksRUFBQyxTQUFTOzRCQUNkLE9BQU8sRUFBQyxnQ0FBZ0M7NEJBQ3hDLFNBQVMsRUFBQyxTQUFTLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSzt5QkFDakM7d0JBQ0QsSUFBSSxFQUFDLElBQUk7d0JBQ1QsS0FBSyxFQUFDLENBQUM7cUJBQ1YsQ0FBQyxDQUFBO29CQUNGLE9BQU87aUJBQ1Y7Z0JBSUQsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFDO29CQUMzQixJQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUcsSUFBSSxFQUFDO3dCQUNiLElBQUEsb0JBQU8sRUFBQyxtQ0FBbUMsQ0FBQyxDQUFBO3dCQUM1QyxNQUFNO3FCQUNUO2lCQUNKO2dCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsYUFBYSxFQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxLQUFLLEVBQUMsY0FBYyxDQUFDLENBQUM7YUFFeEY7WUFBQSxPQUFNLENBQUMsRUFBQztnQkFDTCxJQUFBLHFCQUFRLEVBQUMsb0JBQW9CLEVBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBR2pDLElBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUcsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBRXhCLE9BQU8sQ0FBQztvQkFDSixLQUFLLEVBQUM7d0JBQ0YsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsS0FBSyxFQUFFLE1BQU07d0JBQ2IsS0FBSyxFQUFFLElBQUk7d0JBQ1gsU0FBUyxFQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxLQUFLO3dCQUM5QixHQUFHLEVBQUUsS0FBSzt3QkFDVixJQUFJLEVBQUMsU0FBUzt3QkFDZCxPQUFPLEVBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLFNBQVMsSUFBSSxDQUFRLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBUyxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUEsMkJBQTJCO3FCQUMvRztvQkFDRCxJQUFJLEVBQUMsSUFBSTtvQkFDVCxLQUFLLEVBQUMsQ0FBQztpQkFDVixDQUFDLENBQUE7Z0JBQ0YsT0FBTzthQUNWO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUF5QixFQUFDLEtBQVksRUFBQyxPQUFnQyxFQUFDLFFBQW9CLEVBQUMsU0FBaUIsRUFBQyxjQUFzQjtRQUVqSixJQUFJLFVBQVUsR0FBQyxLQUFLLENBQUM7UUFFckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQSxFQUFFO1lBQ3ZCLFVBQVUsR0FBQyxJQUFJLENBQUM7WUFFaEIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUcsUUFBUTtnQkFDUCxhQUFhLEdBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1lBRTVELElBQUEscUJBQVEsRUFBQyxzQ0FBc0MsRUFBQyxHQUFHLENBQUMsQ0FBQTtZQUdwRCxJQUFHO2dCQUVDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7YUFFakI7WUFBQSxPQUFNLENBQUMsRUFBQyxHQUFFO1lBRVgsT0FBTyxDQUFDO2dCQUNKLEtBQUssRUFBQztvQkFDRixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsS0FBSyxFQUFFLE1BQU07b0JBQ2IsS0FBSyxFQUFFLElBQUk7b0JBQ1gsR0FBRyxFQUFFLEtBQUs7b0JBQ1YsSUFBSSxFQUFDLFVBQVU7b0JBQ2YsT0FBTyxFQUFDLFNBQVMsR0FBQyxHQUFHO29CQUNyQixTQUFTLEVBQUMsU0FBUztpQkFDdEI7Z0JBQ0QsSUFBSSxFQUFDLElBQUk7Z0JBQ1QsYUFBYSxFQUFDLGFBQWE7Z0JBQzNCLEtBQUssRUFBQyxDQUFDO2FBQ1YsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7UUFJRixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUE7UUFHbkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxLQUFLLENBQUMsQ0FBQztRQUd0RCxJQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUM7WUFHZixJQUFJLGFBQWEsR0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBRyxRQUFRO2dCQUNQLGFBQWEsR0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUE7WUFHNUQsSUFBRztnQkFDQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDN0I7WUFBQSxPQUFNLENBQUMsRUFBQyxHQUFFO1lBS1gsSUFBSSxHQUFHLEdBQUMsS0FBSyxDQUFDO1lBQ2QsSUFBRyxXQUFXLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBRyxDQUFDLENBQUM7Z0JBQ3pHLEdBQUcsR0FBQyxJQUFJLENBQUM7WUFFYixJQUFBLHFCQUFRLEVBQUMsaUNBQWlDLEVBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTVELE9BQU8sQ0FBQztnQkFDSixLQUFLLEVBQUMsRUFBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQztnQkFDOUMsSUFBSSxFQUFDLElBQUk7Z0JBQ1QsYUFBYSxFQUFDLGFBQWE7Z0JBQzNCLGdCQUFnQixFQUFDLEdBQUc7Z0JBQ3BCLEtBQUssRUFBQyxDQUFDO2FBQ1YsQ0FBQyxDQUFBO1NBQ0w7UUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFHLGNBQWMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFHLENBQUMsRUFBQztZQUM3QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hFLElBQUcsZ0JBQWdCLENBQUMsR0FBRztnQkFDbkIsSUFBQSxxQkFBUSxFQUFDLGlDQUFpQyxFQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNqRTtnQkFDQSxJQUFHLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQztvQkFDN0QsS0FBSyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7aUJBQzdDO2FBQ0o7U0FDSjtRQUlELElBQUc7WUFDQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUM3QjtRQUFBLE9BQU0sQ0FBQyxFQUFDLEdBQUU7UUFHWCxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFBLENBQUMsQ0FBQSxFQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQztRQUMxRSxPQUFPLENBQUM7WUFDSixLQUFLLEVBQUMsR0FBRztZQUNULElBQUksRUFBQyxXQUFXLENBQUMsT0FBTztZQUN4QixLQUFLLEVBQUMsS0FBSztTQUNkLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFJRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQXlCLEVBQUMsS0FBWTtRQUVuRCxJQUFJLE1BQU0sR0FBQyxJQUFJLENBQUM7UUFDaEIsSUFBRztZQUNDLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEM7UUFBQSxPQUFNLENBQUMsRUFBQztZQUNMLE9BQU8sRUFBQyxHQUFHLEVBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7U0FDOUM7UUFFRCxPQUFPO1lBQ0gsR0FBRyxFQUFDLElBQUk7WUFDUixPQUFPLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNwQixDQUFBO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQU8sRUFBQyxTQUFrQjtRQUM1QyxJQUFHLEdBQUcsSUFBSyxPQUFPLEdBQUcsS0FBRyxRQUFRLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxTQUFTLElBQUksR0FBRyxFQUFDO1lBQ3JILE9BQU87Z0JBQ0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO2dCQUNkLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDaEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO2dCQUNaLElBQUksRUFBQyxHQUFHLENBQUMsSUFBSTtnQkFDYixPQUFPLEVBQUMsR0FBRyxDQUFDLE9BQU87Z0JBQ25CLFNBQVMsRUFBQyxTQUFTLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSzthQUVyQyxDQUFBO1NBQ0o7YUFBSTtZQUNELE9BQU87Z0JBQ0gsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNO2dCQUNiLEtBQUssRUFBRSxJQUFJO2dCQUNYLEdBQUcsRUFBRSxVQUFVO2dCQUNmLElBQUksRUFBQyxXQUFXO2dCQUNoQixPQUFPLEVBQUMsU0FBUyxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQSxDQUFDLENBQUEsRUFBRTtnQkFDOUIsU0FBUyxFQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxLQUFLO2FBQ2pDLENBQUE7U0FDSjtJQUNMLENBQUM7O0FBeDFCTCxvQ0F5MUJDO0FBR0QsTUFBTSxVQUFVLEdBQUMsZ0RBQWdELENBQUE7QUFDakUsTUFBTSxTQUFTLEdBQUMsMENBQTBDLENBQUE7QUFHMUQsTUFBTSxHQUFHLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUNsRixNQUFNLEVBQUUsR0FBRyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBRWhGLE1BQU0sT0FBTyxHQUFFLENBQUMsU0FBZ0IsRUFBYSxFQUFFO0lBQzdDLElBQUc7UUFDQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUEseUJBQWdCLEVBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsU0FBUyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsT0FBTyxTQUFTLENBQUM7S0FDcEI7SUFBQSxPQUFNLENBQUMsRUFBQztRQUNMLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQVUsRUFBYSxFQUFFO0lBQ3hDLElBQUc7UUFDQyxJQUFJLFFBQVEsR0FBRyxJQUFBLHVCQUFjLEVBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFDckQsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRCxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM5RDtJQUFBLE9BQU0sQ0FBQyxFQUFDO1FBQ0wsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUNILENBQUMsQ0FBQTtBQUVELGtCQUFlLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vaW1wb3J0IG15c3FsLCB7IEZpZWxkSW5mbywgTXlzcWxFcnJvciwgUG9vbCwgUG9vbENvbm5lY3Rpb24gfSBmcm9tIFwibXlzcWxcIlxuXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gXCIuL0Jhc2VTZXJ2aWNlXCI7XG5pbXBvcnQgU2lnbmFsLCB7IFJlcSB9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiO1xuaW1wb3J0IHsgY3JlYXRlQ2lwaGVyaXYsIGNyZWF0ZURlY2lwaGVyaXYsIGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCB7IGxvZ0NyaXQsIGxvZ0Vycm9yLCBsb2dJbmZvIH0gZnJvbSBcIi4vTG9nU2VydmljZVwiO1xuaW1wb3J0ICogYXMgbXlzcWwgZnJvbSBcIm15c3FsMi9wcm9taXNlXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgU19NWVNRTF9TVEFSVEVEPW5ldyBTaWduYWw8dm9pZD4oKVxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9RVUVSWSA9IG5ldyBSZXE8TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10sTXlzcWxSZXN1bHRbXT4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1FVRVJZXCIpO1xuLy9leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RSQU5TQUNUSU9OID0gbmV3IFJlcTxNeVNxbFF1ZXJ5W10sTXlzcWxSZXN1bHQ+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTlwiKTtcblxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UQkVHSU4gPSBuZXcgUmVxPHZvaWQsTXlzcWxFcnJvcnxudW1iZXI+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTl9CRUdJTkdcIik7IC8vIHJldHVybiB0cmFuc2FjdGlvbiBpZCBvciBteXNxbCBlcnJvclxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUVVFUlk9bmV3IFJlcTx7cXVlcnk6TXlTcWxRdWVyeSx0aWQ6bnVtYmVyfSxNeXNxbFJlc3VsdD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OX0FERF9PUEVSQVRJT05cIik7IC8vIHRpZCBtZWFucyB0cmFuc2FjdGlvbiBpZFxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UQ09NTUlUPW5ldyBSZXE8bnVtYmVyLE15c3FsRXJyb3J8bnVsbD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RDT01NSVRcIik7IC8vIHRpZFxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUk9MTEJBQ0s9bmV3IFJlcTxudW1iZXIsTXlzcWxFcnJvcnxudWxsPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJPTExCQUNLXCIpOyAvLyB0aWRcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVRdWVyeSA9IGFzeW5jIChxdWVyeTpNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSk6UHJvbWlzZTxNeXNxbFJlc3VsdFtdPj0+e3JldHVybiBhd2FpdCBSRVFfTVlTUUxfUVVFUlkucmVxdWVzdChxdWVyeSl9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxTZXJ2aWNlT3B0aW9uc3tcbiAgICBjb25uZWN0aW9uTGltaXQ6bnVtYmVyLFxuICAgIGhvc3Q6c3RyaW5nLFxuICAgIHVzZXI6c3RyaW5nLFxuICAgIHBhc3N3b3JkOnN0cmluZyxcbiAgICBwb3J0Om51bWJlcixcbiAgICBkYXRhYmFzZTpzdHJpbmcsICBcbiAgICBxdWV1ZUxpbWl0PzpudW1iZXIsXG4gICAgdHJhbnNhY3Rpb25GYWlsUmVwb3J0PzoodHJ4OklUcmFuc2FjdGlvbixtZXNzYWdlOnN0cmluZyk9PnZvaWQsXG4gICAgdHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyPzpzdHJpbmcsXG4gICAgZGVidWc/OmJvb2xlYW4sXG4gICAgbmF4VHJhbnNhY3Rpb25XYWl0VGltZT86bnVtYmVyLFxuXHRtaWdyYXRpb25zPzp7XG5cdFx0ZGlyOnN0cmluZyxcblx0XHRjYWxsYmFjazooKT0+dm9pZFxuXHR9fG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbEVycm9ye1xuICAgIGNvZGU6IHN0cmluZyxcbiAgICBlcnJubzogbnVtYmVyLFxuICAgIHNxbDogc3RyaW5nLFxuICAgIG5hbWU6c3RyaW5nLFxuICAgIG1lc3NhZ2U6c3RyaW5nXG4gICAgZmF0YWw/OmJvb2xlYW4sXG4gICAgdGhyb3dhYmxlOmJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFJlc3VsdHtcbiAgICBlcnJvcj86TXlzcWxFcnJvcnxudWxsLFxuICAgIHJvbGxiYWNrRXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICBpc0R1cGxpY2F0ZUVycm9yPzpib29sZWFuXG4gICAgZGF0YTphbnlcbiAgICBjb3VudDpudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeVNxbFF1ZXJ5e1xuICAgIHF1ZXJ5OnN0cmluZ1xuICAgIGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QsXG4gICAgcm9sbGJhY2tRdWVyeT86c3RyaW5nfG51bGxcbiAgICB0cmFuc2FjdGlvbklEPzpudW1iZXJcbiAgICB0aHJvd2FibGU/OmJvb2xlYW5cbiAgICBjYWxjdWxhdGVDb3VudD86Ym9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsUXVlcnlGaWVsZHtcbiAgICBuYW1lOnN0cmluZyxcbiAgICB2YWx1ZTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQsXG4gICAgc3lzdGVtPzpib29sZWFuLFxuICAgIGlnbm9yZUluSW5zZXJ0Pzpib29sZWFuLFxuICAgIGlnbm9yZUluVXBkYXRlPzpib29sZWFuXG4gICAgdXNlSW5SZXBsYWNlPzpib29sZWFuLFxuICAgIF9wYXJzZWRWYWx1ZT86c3RyaW5nfG51bWJlcnxib29sZWFufG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHJhbnNhY3Rpb257XG4gICAgaWQ6bnVtYmVyXG4gICAgdGltZXN0YW1wOm51bWJlcixcbiAgICBjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLFxuICAgIHF1ZXJpZXM6e3NxbDpzdHJpbmcsc3RhdHVzOnN0cmluZ31bXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsUXVlcnlGaWVsZE9iamVjdCBleHRlbmRzIFJlY29yZDxzdHJpbmcsc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkfHtuYW1lPzpzdHJpbmd8bnVsbCx2YWx1ZTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQsc3lzdGVtPzpib29sZWFuLGlnbm9yZUluSW5zZXJ0Pzpib29sZWFuLGlnbm9yZUluVXBkYXRlPzpib29sZWFuLHVzZUluUmVwbGFjZT86Ym9vbGVhbn0+e1xuXG59XG4gICAgXG5cbi8qKlxuICogTXlzcWwgU2VydmljZXMsIGV4ZWN1dGUgcXVlcmllc1xuICogTXlTcWxRdWVyeS5xdWVyeTpcbiAqIEBmaWVsZHMgLSByZXBsYWNlZCBieSBmaWVsZCdzIG5hbWVzXG4gKiBAdmFsdWVzIC0gcmVwbGFjZWQgYnkgcGFyc2VkIHZhbHVlc1xuICogQG9udXBkYXRlIC0gcmVwYWxjZWQgYnkgcGFpciBmaWVsZCBuYW1lID0gdmFsdWVcbiAqIEBvbmR1cGxpY2F0ZSAtIHJlcGxhY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKi9cblxuZXhwb3J0IGNsYXNzIE15c3FsU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNle1xuXG4gICAgcmVjb25uZWN0aW9uVGltZW91dD0xMDAwKjM7XG4gICAgcmVjb25uZWN0aW5nPWZhbHNlO1xuICAgIHBvb2w6bXlzcWwuUG9vbHxudWxsPW51bGw7XG4gICAgb3B0aW9uczpNeXNxbFNlcnZpY2VPcHRpb25zO1xuICAgIHNlcnZpY2VTdGFydGVkPWZhbHNlO1xuICAgIHRpbWVvdXRJRDphbnlcblxuICAgIGRlYnVnPWZhbHNlO1xuXG4gICAgcXVlcmllcz1bXTsgLy8gVE9ETzogU1RPUkUgUVVFUklFUyBTRU5UUyBCRUZPUkUgVEhFIFNFUlZJQ0UgSVMgU1RBUlRFRCFcbiAgICBzdGF0aWMgbmV4dFRyYW5zYWN0aW9uSUQ9MTtcbiAgICB0cmFuc2FjdGlvbnM6SVRyYW5zYWN0aW9uW109W11cblxuICAgIG1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSAxMDAwKjYwKjE7IC8vIDEgbWluIGFuZCBkZXRlbGV0ZSB0cmFuc2FjdGlvblxuXG4gICAgZmFpbFJlcG9ydEZpbGVTdHJlYW06ZnMuV3JpdGVTdHJlYW18bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZTpzdHJpbmd8bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRMYXN0QWNjZXNzVGltZTpudW1iZXI9MDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucyl7XG4gICAgICAgIHN1cGVyKFwibXlzcWxcIik7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIFxuXG4gICAgICAgIC8vIGRlY3J5cHQgd2hlbiBuZWVkZWRcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmhvc3Quc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuaG9zdCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmhvc3Quc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMuaG9zdFxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudXNlci5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy51c2VyID0gZGVjcnlwdCh0aGlzLm9wdGlvbnMudXNlci5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy51c2VyXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kYXRhYmFzZSA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmRhdGFiYXNlLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXNzd29yZCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnBhc3N3b3JkLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLnBhc3N3b3JkXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmRlYnVnKVxuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9IHRydWVcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWUpXG4gICAgICAgICAgICB0aGlzLm1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSB0aGlzLm9wdGlvbnMubmF4VHJhbnNhY3Rpb25XYWl0VGltZTtcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgLy8gY2hlY2sgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkSURzOm51bWJlcltdPVtdO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKXtcbiAgICAgICAgICAgICAgICBpZihub3ctaS50aW1lc3RhbXA+dGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJSZWxlYXNlIHRyYW5zYWN0aW9uIGNvbm5lY3Rpb24gZHVlIHRvIHRpbWVvdXRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKGksdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRJRHMucHVzaChpLmlkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+IXJlbW92ZWRJRHMuaW5jbHVkZXMoaS5pZCkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZW1vdmVkOiBcIixjb3VudC10aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGgpXG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgIH0sMTAwMCozMClcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgaWYoIXRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gYWZ0ZXIgMTUgbWluIG9mIGluYWN0aXZpdHksIGNsb3NlIGZpbGVcbiAgICAgICAgICAgIGlmKERhdGUubm93KCktdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWU+MTAwMCo2MCoxNSl7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSwxMDAwKjYwKjUpXG5cbiAgICAgICAgaWYob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpe1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKSl7XG4gICAgICAgICAgICAgICAgICAgIGZzLm1rZGlyU3luYyhvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyPXVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjcmVhdGUgdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZGlyXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZXhlY3V0ZVF1ZXJ5IChxdWVyeTpNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSk6UHJvbWlzZTxNeXNxbFJlc3VsdFtdPnsgcmV0dXJuIGF3YWl0IFJFUV9NWVNRTF9RVUVSWS5yZXF1ZXN0KHF1ZXJ5KSB9XG5cbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIHN1cGVyLmluaXQoKTtcblxuICAgICAgICAvLyBzZXR1cCBwcm9jZXNzIGV4aXQgaGFuZGxlcnMgaW50ZXJydXB0IChjdHJsK2MpXG4gICAgICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmluaXNoQXBwKCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAvLyB0ZXJtaW5hdGUgKGtpbGwpXG4gICAgICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmluaXNoQXBwKCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VydmljZVN0YXJ0ZWQ9ZmFsc2U7XG4gICAgICAgIGxldCBwb29sQ3JlYXRlZDpib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUoIXBvb2xDcmVhdGVkKXtcbiAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RpbmcgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICBwb29sQ3JlYXRlZCA9IGF3YWl0IHRoaXMucmVjcmVhdGVQb29sKCk7XG4gICAgICAgICAgICBpZighcG9vbENyZWF0ZWQpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhIFJldHJ5aW5nIGluIDMgc2Vjb25kcy4uLlwiKVxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+c2V0VGltZW91dChyZXNvbHZlLDMwMDApKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgUkVRX01ZU1FMX1FVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGEgPT57XG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShkYXRhKSlcbiAgICAgICAgICAgICAgICBkYXRhPVtkYXRhXTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzPVtdXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgZGF0YSl7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGkucXVlcnksaS5maWVsZHMpO1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5leGVjdXRlKHF1ZXJ5LGkucm9sbGJhY2tRdWVyeSA/PyBudWxsLGkudHJhbnNhY3Rpb25JRCA/PyAwLGkudGhyb3dhYmxlID8/IGZhbHNlLGkuY2FsY3VsYXRlQ291bnQgPz8gZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkV4ZWN1dGUgcXVlcmllczogXCIsZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9ICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICBpZihpLmVycm9yICYmIChpLmVycm9yLmZhdGFsIHx8IGkuZXJyb3IudGhyb3dhYmxlKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVEJFR0lOLmxpc3RlbmVyPWFzeW5jICgpPT57ICBcbiAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKTtcbiAgICAgICAgICAgIGlmKCFjb25uKVxuICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIk5PX1BPT0xcIixlcnJubzoxMDAwMDAsZmF0YWw6dHJ1ZSxzcWw6XCJcIixuYW1lOlwiTk9fUE9PTFwiLG1lc3NhZ2U6XCJNeXNxbCBwb29sIG5vdCBjcmVhdGVkXCIsdGhyb3dhYmxlOmZhbHNlfVxuXG4gICAgICAgICAgICAvLyBmaW5kIGNvbm4gaW4gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpe1xuICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBsb2dJbmZvKFwiWW91ciBjb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIkNPTk5fSU5fVFJYXCIsZXJybm86MTAwMDA1LGZhdGFsOnRydWUsdGhyb3dhYmxlOmZhbHNlLHNxbDpcIlwiLG5hbWU6XCJDT05OX0lOX1RSWFwiLG1lc3NhZ2U6XCJDb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCJ9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0aWQgPSBNeXNxbFNlcnZpY2UubmV4dFRyYW5zYWN0aW9uSUQrKztcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCZWdpbiB0cmFuc2FjdGlvbiB3aXRoIGlkIFwiLHRpZClcblxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIGF3YWl0IGNvbm4uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4ucXVlcnkoXCJTVEFSVCBUUkFOU0FDVElPTlwiKTtcbiAgICAgICAgICAgICAgICAvL2NvbnN0IHJlcyA9IGF3YWl0IGNvbm4ucXVlcnkoXCJTRVQgYXV0b2NvbW1pdD0wXCIpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb24gc3RhcnRlZFwiKVxuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oe2lkOnRpZCxjb25uOmNvbm4sdGltZXN0YW1wOkRhdGUubm93KCkscXVlcmllczpbe3NxbDpcIlNUQVJUIFRSQU5TQUNUSU9OXCIsc3RhdHVzOlwiZXJyb3JcIn1dfSlcbiAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6dGlkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIGNvbm46Y29ubixcbiAgICAgICAgICAgICAgICBxdWVyaWVzOltdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb25zIHBvb2w6IFwiLHRoaXMudHJhbnNhY3Rpb25zKVxuXG4gICAgICAgICAgICByZXR1cm4gdGlkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBSRVFfTVlTUUxfVFFVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGE9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PWRhdGEudGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtlcnI6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzoxMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOnRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIixcbiAgICAgICAgICAgICAgICB9LGRhdGE6bnVsbCxyb2xsYmFja0Vycm9yOm51bGwsY291bnQ6MH1cblxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGRhdGEucXVlcnkucXVlcnksZGF0YS5xdWVyeS5maWVsZHMpO1xuICAgICAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICAgICAgbGV0IHNxbERhdGEgPSBudWxsO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsdHJ4LmlkKVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgc3FsRGF0YSA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1jYXRjaChlKXsgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7fVxuXG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgaWYoZXJyKVxuICAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnF1ZXJ5LmNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50UXVlcnkgPSB0aGlzLnByZXBhcmVDb3VudFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRRdWVyeVJlc3VsdCA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KGNvdW50UXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY291bnRRdWVyeVJlc3VsdCAmJiBjb3VudFF1ZXJ5UmVzdWx0Lmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IChjb3VudFF1ZXJ5UmVzdWx0WzBdIGFzIGFueSkuY291bnQ7IC8vIHRvZG8gOiBjaGVjaywgcHJvYmFibHkgbm90IHdvcmtpbmcgKHdyb25nIGZpZWxkIG9yIHNtdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9LT5xdWVyeSBlcnJvclwiLGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUXVlcnkgZXhlY3V0aW9uIHN0YXR1czpcIixlcnI/ZXJyLm1lc3NhZ2U6XCJjb21wbGV0ZWRcIilcblxuICAgICAgICAgICAgdHJ4LnF1ZXJpZXMucHVzaCh7c3FsOnF1ZXJ5LHN0YXR1czplcnI/ZXJyLm1lc3NhZ2U6XCJjb21wbGV0ZWRcIn0pXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YTpzcWxEYXRhP3NxbERhdGFbMF06bnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjplcnIsXG4gICAgICAgICAgICAgICAgY291bnQ6Y291bnRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVFJPTExCQUNLLmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UQ09NTUlULmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTpmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29tbWl0IHRyYW5zYWN0aW9uOlwiLHRyeC5pZClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbHRlcihpPT5pLmlkIT09dGlkKTtcblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9uIHBvb2w6XCIsdGhpcy50cmFuc2FjdGlvbnMgKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBhd2FpdCB0aGlzLmNvbW1pdCh0cngpO1xuXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY29tbWl0KHRyeDpJVHJhbnNhY3Rpb24pOlByb21pc2U8TXlzcWxFcnJvcnxudWxsPntcbiAgICAgICBcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4uY29tbWl0KCk7XG4gICAgICAgICAgICAvL2F3YWl0IHRyeC5jb25uLnF1ZXJ5KFwiQ09NTUlUXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgfVxuXG4gICAgYXN5bmMgcm9sbGJhY2tUcmFuc2FjdGlvbih0cng6SVRyYW5zYWN0aW9uLGRvbk5vdFJlbW92ZT86Ym9vbGVhbik6UHJvbWlzZTxNeXNxbEVycm9yfG51bGw+e1xuICAgICAgICBsZXQgZXJyPW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUm9sbGJhY2sgc3RhcnRlZFwiLHRyeC5jb25uLnRocmVhZElkKVxuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4ucm9sbGJhY2soKTtcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLmNvbW1pdCgpO1xuICAgICAgICAgICAgLy9hd2FpdCB0cnguY29ubi5xdWVyeShcIlJPTExCQUNLXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICBpZighZG9uTm90UmVtb3ZlKVxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PmkuaWQhPT10cnguaWQpO1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJvbGxiYWNrIGNvbXBsZXRlXCIsdHJ4LmNvbm4udGhyZWFkSWQpXG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJvbGxiYWNrIHRyYW5zYWN0aW9uXCIsdHJ4LnF1ZXJpZXMpXG4gICAgICAgICAgICBlcnIgPSB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlVHJhbnNhY3Rpb25Bc1Byb2JsZW0odHJ4LFwicm9sbGJhY2tcIilcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5pc2hBcHAoKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJGaW5pc2hpbmcgbXlzcWwgc2VydmljZVwiKVxuICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpXG4gICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oaSk7XG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgIH1cblxuICAgIHByZXBhcmVDb3VudFF1ZXJ5KHF1ZXJ5OnN0cmluZyk6c3RyaW5ne1xuICAgICAgICBsZXQgY291bnRRdWVyeSA9IHF1ZXJ5O1xuICAgICAgICBjb3VudFF1ZXJ5ID0gY291bnRRdWVyeS5zdWJzdHJpbmcoMCxjb3VudFF1ZXJ5LmluZGV4T2YoXCJMSU1JVFwiKSk7XG4gICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZyhjb3VudFF1ZXJ5LmluZGV4T2YoXCJGUk9NXCIpKTtcbiAgICAgICAgY291bnRRdWVyeSA9IFwiU0VMRUNUIENPVU5UKDEpIGFzIGBjb3VudGAgXCIrY291bnRRdWVyeVxuICAgICAgICByZXR1cm4gY291bnRRdWVyeTtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpe1xuXG4gICAgICAgIGlmKCF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0ICYmICF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJlcG9ydCBmYWlsZWQgdHJhbnNhY3Rpb24sIG5vIHJlcG9ydCBmdW5jdGlvbjogdHJhbnNhY3Rpb25GYWlsUmVwb3J0IGluIG9wdGlvbnMsIGFuZCB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIgaXNudCBzZXRcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcil7XG4gICAgICAgICAgICBjb25zdCB5eXltbWRkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLDEwKS5yZXBsYWNlQWxsKFwiLVwiLFwiXCIpO1xuXG4gICAgICAgICAgICAvL3N0b3JlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcix5eXltbWRkK1wiLmpzb25cIik7XG4gICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZSE9PWZpbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lKXtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSx7ZmxhZ3M6J2EnfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU9ZmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlN0b3JlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0OiBcIixmaWxlLHRyeC5xdWVyaWVzLG1lc3NhZ2UpXG5cbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS53cml0ZShKU09OLnN0cmluZ2lmeSh7cXVlcmllczp0cngucXVlcmllcyx0aW1lOnRyeC50aW1lc3RhbXAsZGF0ZSxtZXNzYWdlfSkrXCJcXG59RU9Ce1xcblwiLGVycj0+e1xuICAgICAgICAgICAgICAgIGlmKGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgd3JpdGUgdG8gdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZmlsZVwiKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiVHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgc3RvcmVkXCIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydClcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQodHJ4LG1lc3NhZ2UpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgcmVjcmVhdGVQb29sKCk6UHJvbWlzZTxib29sZWFuPntcblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIG15c3FsOiBcXG4gSE9TVDogXCIrdGhpcy5vcHRpb25zLmhvc3QrJ1xcbiBQT1JUOicrdGhpcy5vcHRpb25zLnBvcnQpXG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRoaXMucG9vbC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvb2wgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICAgIC8vIEtlZXAgYWxpdmUgcGFja2V0cyBzaG91bGQgYmUgc2VudFxuICAgICAgICAvKmVuYWJsZUtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgICAgLy8gV2Ugc2hvdWxkIHN0YXJ0IHNlbmRpbmcgdGhlbSBlYXJseVxuICAgICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXk6IDMgKiAxMDAwLCAvLyAzIHNlY29uZHNcbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBpZGxlIGNvbm5lY3Rpb25zLCBidXQgaXQncyBub3QgbWFuZGF0b3J5IGZvciB0aGUgZml4IHRvIHdvcmssIGl0IHNlZW1zXG4gICAgICAgIG1heElkbGU6IDAsXG4gICAgICAgIC8vIElkbGUgdGltZW91dCBtdWNoIGxhcmdlciB0aGFuIGtlZXAgYWxpdmUgZGVsYXkgYW5kIG11Y2ggc21hbGxlciB0aGFuIE15U1FMJ3MgdGltZW91dCBzZXR0aW5nXG4gICAgICAgIGlkbGVUaW1lb3V0OiA1ICogNjAgKiAxMDAwIC8vIDUgbWludXRlc1xuICAgICAgICAqL1xuXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHRoaXMucG9vbCA9bXlzcWwuY3JlYXRlUG9vbCh7XG4gICAgICAgICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgICAgICAgICAsdXNlcjogdGhpcy5vcHRpb25zLnVzZXJcbiAgICAgICAgICAgICAgICAscGFzc3dvcmQ6IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgICAgICAgICxkYXRhYmFzZTogdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgICAgICAgICAgLHBvcnQ6IHRoaXMub3B0aW9ucy5wb3J0XG4gICAgICAgICAgICAgICAgLGNvbm5lY3Rpb25MaW1pdDogdGhpcy5vcHRpb25zLmNvbm5lY3Rpb25MaW1pdFxuICAgICAgICAgICAgICAgICxxdWV1ZUxpbWl0OiAxMFxuICAgICAgICAgICAgICAgICxtdWx0aXBsZVN0YXRlbWVudHM6IHRydWVcblxuICAgICAgICAgICAgICAgICxlbmFibGVLZWVwQWxpdmU6dHJ1ZVxuICAgICAgICAgICAgICAgICxrZWVwQWxpdmVJbml0aWFsRGVsYXk6MyoxMDAwXG4gICAgICAgICAgICAgICAgLy8sbWF4SWRsZTowXG4gICAgICAgICAgICAgICAgLGlkbGVUaW1lb3V0OjEwMDAqNjAqNVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdjb25uZWN0aW9uJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBDUkVBVEVEXCIpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdhY3F1aXJlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBBQ1FVSVJFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdyZWxlYXNlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBSRUxFQVNFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdlbnF1ZXVlJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJNWVNRTCBDT05ORUNUSU9OIEVOUVVFVUVEXCIpXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBjb25uZWN0aW9uXG4gICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNrIG15c3FsIGNvbm5lY3Rpb25cIilcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKVxuICAgICAgICAgICAgICAgIGlmKGNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzLGZdID0gYXdhaXQgY29ubi5xdWVyeShcIlNFTEVDVCAxXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25uPy5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RlZCB0byBNWVNRTCFcIilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBvbkFwcGxpY2F0aW9uUmVhZHkoKSB7fVxuXG5cbiAgICBzdGF0aWMgZmllbGRzVG9PYmplY3QoZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdfE15c3FsUXVlcnlGaWVsZE9iamVjdCxpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzPzpib29sZWFuKTpNeXNxbFF1ZXJ5RmllbGRPYmplY3R7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICBjb25zdCBvYmo6TXlzcWxRdWVyeUZpZWxkT2JqZWN0PXt9O1xuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGlmKCFpLm5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZih0eXBlb2YgaS52YWx1ZSE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWU7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKCFpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2kubmFtZV09e1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6aS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTppLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmkuaWdub3JlSW5JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTppLmlnbm9yZUluVXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOmkudXNlSW5SZXBsYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNlXG4gICAgICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIG9iamVjdFRvRmllbGRzKG9iajpNeXNxbFF1ZXJ5RmllbGRPYmplY3R8TXlzcWxRdWVyeUZpZWxkW10pOk15c3FsUXVlcnlGaWVsZFtde1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KG9iaikpXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICBjb25zdCBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW109W107XG4gICAgICAgIGZvcihsZXQgaSBpbiBvYmope1xuICAgICAgICAgICAgaWYob2JqW2ldICYmIHR5cGVvZiBvYmpbaV0gPT09IFwib2JqZWN0XCIpe1xuICAgICAgICAgICAgICAgIGxldCBtbyA9IG9ialtpXSBhcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZD47XG4gICAgICAgICAgICAgICAgaWYoIW1vKXtcbiAgICAgICAgICAgICAgICAgICAgbW89e1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6bW8ubmFtZSBhcyBzdHJpbmcgPz8gaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6bW8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbTptby5zeXN0ZW0gYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6bW8uaWdub3JlSW5JbnNlcnQgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6bW8uaWdub3JlSW5VcGRhdGUgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOm1vLnVzZUluUmVwbGFjZSBhcyBib29sZWFuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpvYmpbaV0gYXMgc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlUXVlcnkocXVlcnk6c3RyaW5nLGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QpOnN0cmluZ3tcbiAgICAgICAgXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICBmaWVsZHMgPSBNeXNxbFNlcnZpY2Uub2JqZWN0VG9GaWVsZHMoZmllbGRzKTtcblxuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9dGhpcy5wcmVwYXJlUXVlcnlGaWVsZFZhbHVlKGkudmFsdWUsaS5zeXN0ZW0pO1xuICAgICAgICAgICAgaS5fcGFyc2VkVmFsdWU9dmFsO1xuICAgICAgICAgICAgcXVlcnk9cXVlcnkucmVwbGFjZUFsbChcIkBcIitpLm5hbWUsdmFsK1wiXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZih0bXAuaW5kZXhPZihcInNlbGVjdFwiKT09PTAgJiYgdG1wLmluZGV4T2YoXCJsaW1pdFwiKT09PS0xKVxuICAgICAgICAgICAgcXVlcnkrPVwiIExJTUlUIDEwMFwiXG4gICAgICAgIFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJATk9MSU1JVFwiLFwiXCIpXG5cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGZpZWxkc1wiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBpbnNlcnRGaWVsZE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgaW5zZXJ0RmllbGRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGROYW1lcy5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCcpXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlcnk9cXVlcnlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQGZpZWxkcycsaW5zZXJ0RmllbGROYW1lcy5qb2luKFwiLFwiKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQHZhbHVlcycsaW5zZXJ0RmllbGRWYWx1ZXMuam9pbihcIixcIikpXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGluc2VydFwiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbmluc2VydE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgb25pbnNlcnRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uaW5zZXJ0TmFtZXMucHVzaChpLm5hbWUpXG4gICAgICAgICAgICAgICAgb25pbnNlcnRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBpbnNlcnRcIixgKCR7b25pbnNlcnROYW1lcy5qb2luKFwiLFwiKX0pIFZBTFVFUyAoJHtvbmluc2VydFZhbHVlcy5qb2luKFwiLFwiKX0pYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAb251cGRhdGVcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25VcGRhdGU9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5VcGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgID0gJytpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBvbnVwZGF0ZVwiLG9uVXBkYXRlLmpvaW4oXCIgLCBcIikpXG4gICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKCdAb25kdXBsaWNhdGUnKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbkR1cGxpY2F0ZT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKCFpLnVzZUluUmVwbGFjZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25EdXBsaWNhdGUucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AgPSAnK2kuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQG9uZHVwbGljYXRlXCIsb25EdXBsaWNhdGUuam9pbihcIiAsIFwiKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiAgcXVlcnk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByZXBhcmVRdWVyeUZpZWxkVmFsdWUodmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbik6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVke1xuICAgICAgICBpZighc3lzdGVtICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlP3ZhbHVlLnJlcGxhY2VBbGwoJ1wiJywnXFxcXFwiJyk6bnVsbFxuICAgICAgICAgICAgaWYodmFsdWUhPT1udWxsKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gJ1wiJyt2YWx1ZSsnXCInXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIk5VTExcIlxuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gXCJOVUxMXCJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZXhlY3V0ZShxdWVyeTpzdHJpbmcscm9sbGJhY2tRdWVyeTpzdHJpbmd8bnVsbCx0cmFuc2FjdGlvbklEOm51bWJlcix0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKTpQcm9taXNlPE15c3FsUmVzdWx0PntcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyZWplY3QpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBwb29sXG4gICAgICAgICAgICBpZighdGhpcy5wb29sKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTm8gcG9vbFwiKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX1BPT0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fUE9PTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb258bnVsbD1udWxsXG4gICAgICAgICAgICAgICAgaWYodHJhbnNhY3Rpb25JRCAmJiB0cmFuc2FjdGlvbklEPjApe1xuICAgICAgICAgICAgICAgICAgICBjb25uID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dHJhbnNhY3Rpb25JRCk/LmNvbm4gPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsY29ubj8udGhyZWFkSWQpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBhd2FpdCB0aGlzLnBvb2wuZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeVwiLGNvbm4/LnRocmVhZElkKVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgY29ubmVjdGlvbiBub3QgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGlmKCFjb25uKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLGBObyBjb25uZWN0aW9uIGNyZWF0ZWQhYClcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgY2FudCBnZXQgY29ubmVjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgLy8gRG8gc2VuZCBxdWVyeVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIllvdXIgY29ubmVjdGlvbiBpcyBpbiB0cmFuc2FjdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kUXVlcnkoY29ubixxdWVyeSxyZXNvbHZlLHJvbGxiYWNrUXVlcnksdGhyb3dhYmxlP3RydWU6ZmFsc2UsY2FsY3VsYXRlQ291bnQpO1xuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc31cIixlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyByZWNyZWF0ZSBwb29sLCBjb25uZWN0aW9uIGVycm9yXG4gICAgICAgICAgICAgICAgaWYoYCR7ZX1gLmluZGV4T2YoJ0VDT05OUkVGVVNFRCcpIT09LTEpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjcmVhdGVQb29sKCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOihlICYmIHR5cGVvZiBlID09PSBcIm9iamVjdFwiICYmIFwibWVzc2FnZVwiIGluIGUgYXMgYW55KT8oZSBhcyBhbnkpLm1lc3NhZ2U6XCJNeXNxbCBjYW50IGdldCBjb25uZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbmRRdWVyeShjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyxyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyb2xsYmFjazpzdHJpbmd8bnVsbCx0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKXtcbiAgICAgICAgXG4gICAgICAgIGxldCBlcnJDYXRjaGVkPWZhbHNlO1xuXG4gICAgICAgIGNvbm4ub24oXCJlcnJvclwiLGFzeW5jIGVycj0+e1xuICAgICAgICAgICAgZXJyQ2F0Y2hlZD10cnVlO1xuXG4gICAgICAgICAgICBsZXQgcm9sbGJhY2tFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuICAgICAgIFxuICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPmNvbm4ub24oJ2Vycm9yJylcIixlcnIpXG5cbiAgICAgICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICAgICAgdHJ5e1xuXG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICBjb25uLmRlc3Ryb3koKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfWNhdGNoKGUpe31cbiAgICAgXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiQ09OTl9FUlJcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMyxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJDT05OX0VSUlwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiK2VycixcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I6cm9sbGJhY2tFcnJvcixcbiAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG5cblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIscXVlcnkpXG5cbiAgICAgICAgLy8gc2VuZCBxdWVyeVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLHF1ZXJ5KTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcm9sbGJhY2tcbiAgICAgICAgICAgIGxldCByb2xsYmFja0Vycm9yPW51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uZWN0aW9uXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG5cblxuXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgICBsZXQgZHVwPWZhbHNlO1xuICAgICAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVyX2R1cF9lbnRyeVwiKSE9PS0xKVxuICAgICAgICAgICAgICAgIGR1cD10cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixxdWVyeVJlc3VsdC5lcnIpO1xuXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7Li4ucXVlcnlSZXN1bHQuZXJyLHRocm93YWJsZTp0aHJvd2FibGV9LFxuICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yOnJvbGxiYWNrRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNEdXBsaWNhdGVFcnJvcjpkdXAsXG4gICAgICAgICAgICAgICAgY291bnQ6MFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGlmKGNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgIGxldCBjb3VudFF1ZXJ5ID0gdGhpcy5wcmVwYXJlQ291bnRRdWVyeShxdWVyeSk7XG4gICAgICAgICAgICBjb25zdCBjb3VudFF1ZXJ5UmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4sY291bnRRdWVyeSk7XG4gICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0LmVycilcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixjb3VudFF1ZXJ5UmVzdWx0LmVycik7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKGNvdW50UXVlcnlSZXN1bHQucmVzdWx0cyAmJiBjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHMubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50UXVlcnlSZXN1bHQucmVzdWx0c1swXS5jb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25uLnJlbGVhc2UoKTtcbiAgICAgICAgICAgIGNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIH1jYXRjaChlKXt9XG5cbiAgICAgICAgLy8gaGFuZGxlIHN1Y2Nlc3NcbiAgICAgICAgY29uc3QgZXJyID0gcXVlcnlSZXN1bHQuZXJyP3suLi5xdWVyeVJlc3VsdC5lcnIsdGhyb3dhYmxlOnRocm93YWJsZX06bnVsbDtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBlcnJvcjplcnIsXG4gICAgICAgICAgICBkYXRhOnF1ZXJ5UmVzdWx0LnJlc3VsdHMsXG4gICAgICAgICAgICBjb3VudDpjb3VudFxuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgLy8gQXN5bmMgcXVlcnkgd3JhcHBlciB0byBjb25uLnF1ZXJ5XG4gICAgYXN5bmMgcXVlcnlBc3luYyhjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyk6UHJvbWlzZTx7ZXJyOk15c3FsRXJyb3J8bnVsbCxyZXN1bHRzPzphbnl9PntcblxuICAgICAgICBsZXQgcmVzdWx0PW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbm4ucXVlcnkocXVlcnkpO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICByZXR1cm4ge2Vycjp0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyOm51bGwsXG4gICAgICAgICAgICByZXN1bHRzOnJlc3VsdFswXSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZU15c3FsUXVlcnlFcnJvcihlcnI6YW55LHRocm93YWJsZT86Ym9vbGVhbik6TXlzcWxFcnJvcntcbiAgICAgICAgaWYoZXJyICYmICB0eXBlb2YgZXJyPT09XCJvYmplY3RcIiAmJiBcImNvZGVcIiBpbiBlcnIgJiYgXCJlcnJub1wiIGluIGVyciAmJiBcInNxbFwiIGluIGVyciAmJiBcIm5hbWVcIiBpbiBlcnIgJiYgXCJtZXNzYWdlXCIgaW4gZXJyKXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IGVyci5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzogZXJyLmVycm5vLFxuICAgICAgICAgICAgICAgICAgICBzcWw6IGVyci5zcWwsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ZXJyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kZTogXCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAyLFxuICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNxbDogXCJubyBxdWVyeVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6XCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiKyhlcnIpP2VycjpcIlwiLFxuICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmNvbnN0IHNlY3JldF9rZXk9XCJBS0xXa2FqdyVeJmRnd3FodyM5ODQ1M2kyM2JmazIzcm4ya25rbmdscmdqZWl0XCJcbmNvbnN0IHNlY3JldF9pdj1cInJ0aGFkcmZrMjNybjJrbiMqRk5LQUBndDQ0ZGYzdHNscmdqIyMhaXRcIlxuXG4vLyBHZW5lcmF0ZSBzZWNyZXQgaGFzaCB3aXRoIGNyeXB0byB0byB1c2UgZm9yIGVuY3J5cHRpb25cbmNvbnN0IGtleSA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWNyZXRfa2V5KS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCAzMilcbmNvbnN0IGl2ID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlY3JldF9pdikuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpXG5cbmNvbnN0IGRlY3J5cHQgPShlbmNyeXB0ZWQ6c3RyaW5nKTpzdHJpbmd8bnVsbD0+e1xuICB0cnl7XG4gICAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuZnJvbShlbmNyeXB0ZWQsICdiYXNlNjQnKS50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgICBjb25zdCBkZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5LCBpdik7XG4gICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCwgJ2JpbmFyeScsICd1dGY4Jyk7XG4gICAgICBkZWNyeXB0ZWQgKz0gZGVjaXBoZXIuZmluYWwoJ3V0ZjgnKTtcbiAgICAgIHJldHVybiBkZWNyeXB0ZWQ7XG4gIH1jYXRjaChlKXtcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmNvbnN0IGVuY3J5cHQgPSAodHh0OnN0cmluZyk6c3RyaW5nfG51bGw9PntcbiAgdHJ5e1xuICAgICAgbGV0IGVuY2lwaGVyID0gY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5LCBpdiksXG4gICAgICBlbmNyeXB0ZWQgPSBlbmNpcGhlci51cGRhdGUodHh0LCAndXRmOCcsICdiaW5hcnknKTtcbiAgICAgIGVuY3J5cHRlZCArPSBlbmNpcGhlci5maW5hbCgnYmluYXJ5Jyk7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oZW5jcnlwdGVkLCAnYmluYXJ5JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9Y2F0Y2goZSl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNeXNxbFNlcnZpY2U7Il19
|
773
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBMEQ7QUFDMUQsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFFVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBOEJoSSxNQUFNLFlBQVksR0FBQyxDQUFDLENBQUssRUFBaUIsRUFBRTtJQUMvQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUcsU0FBUyxJQUFJ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QUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL2ltcG9ydCBteXNxbCwgeyBGaWVsZEluZm8sIE15c3FsRXJyb3IsIFBvb2wsIFBvb2xDb25uZWN0aW9uIH0gZnJvbSBcIm15c3FsXCJcblxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tIFwiLi9CYXNlU2VydmljZVwiO1xuaW1wb3J0IFNpZ25hbCwgeyBSZXEgfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIjtcbmltcG9ydCB7IGNyZWF0ZUNpcGhlcml2LCBjcmVhdGVEZWNpcGhlcml2LCBjcmVhdGVIYXNoIH0gZnJvbSBcImNyeXB0b1wiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gXCIuL0xvZ1NlcnZpY2VcIjtcbmltcG9ydCAqIGFzIG15c3FsIGZyb20gXCJteXNxbDIvcHJvbWlzZVwiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuZXhwb3J0IGNvbnN0IFNfTVlTUUxfU1RBUlRFRD1uZXcgU2lnbmFsPHZvaWQ+KClcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfUVVFUlkgPSBuZXcgUmVxPE15U3FsUXVlcnl8TXlTcWxRdWVyeVtdLE15c3FsUmVzdWx0W10+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9RVUVSWVwiKTtcbi8vZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUkFOU0FDVElPTiA9IG5ldyBSZXE8TXlTcWxRdWVyeVtdLE15c3FsUmVzdWx0Pih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJBTlNBQ1RJT05cIik7XG5cbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVEJFR0lOID0gbmV3IFJlcTx2b2lkLE15c3FsRXJyb3J8bnVtYmVyPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJBTlNBQ1RJT05fQkVHSU5HXCIpOyAvLyByZXR1cm4gdHJhbnNhY3Rpb24gaWQgb3IgbXlzcWwgZXJyb3JcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVFFVRVJZPW5ldyBSZXE8e3F1ZXJ5Ok15U3FsUXVlcnksdGlkOm51bWJlcn0sTXlzcWxSZXN1bHQ+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTl9BRERfT1BFUkFUSU9OXCIpOyAvLyB0aWQgbWVhbnMgdHJhbnNhY3Rpb24gaWRcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVENPTU1JVD1uZXcgUmVxPG51bWJlcixNeXNxbEVycm9yfG51bGw+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UQ09NTUlUXCIpOyAvLyB0aWRcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVFJPTExCQUNLPW5ldyBSZXE8bnVtYmVyLE15c3FsRXJyb3J8bnVsbD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RST0xMQkFDS1wiKTsgLy8gdGlkXG5cbmV4cG9ydCBjb25zdCBleGVjdXRlUXVlcnkgPSBhc3luYyAocXVlcnk6TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10pOlByb21pc2U8TXlzcWxSZXN1bHRbXT49PntyZXR1cm4gYXdhaXQgUkVRX01ZU1FMX1FVRVJZLnJlcXVlc3QocXVlcnkpfVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsU2VydmljZU9wdGlvbnN7XG4gICAgY29ubmVjdGlvbkxpbWl0Om51bWJlcixcbiAgICBob3N0OnN0cmluZyxcbiAgICB1c2VyOnN0cmluZyxcbiAgICBwYXNzd29yZDpzdHJpbmcsXG4gICAgcG9ydDpudW1iZXIsXG4gICAgZGF0YWJhc2U6c3RyaW5nLCAgXG4gICAgcXVldWVMaW1pdD86bnVtYmVyLFxuICAgIHRyYW5zYWN0aW9uRmFpbFJlcG9ydD86KHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpPT52b2lkLFxuICAgIHRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcj86c3RyaW5nLFxuICAgIGRlYnVnPzpib29sZWFuLFxuICAgIG5heFRyYW5zYWN0aW9uV2FpdFRpbWU/Om51bWJlcixcblx0bWlncmF0aW9ucz86e1xuXHRcdGRpcjpzdHJpbmcsXG5cdFx0Y2FsbGJhY2s6KCk9PnZvaWRcblx0fXxudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxFcnJvcntcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgZXJybm86IG51bWJlcixcbiAgICBzcWw6IHN0cmluZyxcbiAgICBuYW1lOnN0cmluZyxcbiAgICBtZXNzYWdlOnN0cmluZ1xuICAgIGZhdGFsPzpib29sZWFuLFxuICAgIHRocm93YWJsZTpib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBpc015c3FsRXJyb3I9KGU6YW55KTplIGlzIE15c3FsRXJyb3I9PntcbiAgICByZXR1cm4gZS5jb2RlIT09dW5kZWZpbmVkICYmIGUuZXJybm8hPT11bmRlZmluZWQgJiYgZS5zcWwhPT11bmRlZmluZWQgJiYgZS5uYW1lIT09dW5kZWZpbmVkICYmIGUubWVzc2FnZSE9PXVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFJlc3VsdHtcbiAgICBlcnJvcj86TXlzcWxFcnJvcnxudWxsLFxuICAgIHJvbGxiYWNrRXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICBpc0R1cGxpY2F0ZUVycm9yPzpib29sZWFuXG4gICAgZGF0YTphbnlcbiAgICBjb3VudDpudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeVNxbFF1ZXJ5e1xuICAgIHF1ZXJ5OnN0cmluZ1xuICAgIGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QsXG4gICAgcm9sbGJhY2tRdWVyeT86c3RyaW5nfG51bGxcbiAgICB0cmFuc2FjdGlvbklEPzpudW1iZXJcbiAgICB0aHJvd2FibGU/OmJvb2xlYW5cbiAgICBjYWxjdWxhdGVDb3VudD86Ym9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsUXVlcnlGaWVsZHtcbiAgICBuYW1lOnN0cmluZyxcbiAgICB2YWx1ZTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQsXG4gICAgc3lzdGVtPzpib29sZWFuLFxuICAgIGlnbm9yZUluSW5zZXJ0Pzpib29sZWFuLFxuICAgIGlnbm9yZUluVXBkYXRlPzpib29sZWFuXG4gICAgdXNlSW5SZXBsYWNlPzpib29sZWFuLFxuICAgIF9wYXJzZWRWYWx1ZT86c3RyaW5nfG51bWJlcnxib29sZWFufG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHJhbnNhY3Rpb257XG4gICAgaWQ6bnVtYmVyXG4gICAgdGltZXN0YW1wOm51bWJlcixcbiAgICBjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLFxuICAgIHF1ZXJpZXM6e3NxbDpzdHJpbmcsc3RhdHVzOnN0cmluZ31bXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsUXVlcnlGaWVsZE9iamVjdCBleHRlbmRzIFJlY29yZDxzdHJpbmcsc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkfHtuYW1lPzpzdHJpbmd8bnVsbCx2YWx1ZTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQsc3lzdGVtPzpib29sZWFuLGlnbm9yZUluSW5zZXJ0Pzpib29sZWFuLGlnbm9yZUluVXBkYXRlPzpib29sZWFuLHVzZUluUmVwbGFjZT86Ym9vbGVhbn0+e1xuXG59XG4gICAgXG5cbi8qKlxuICogTXlzcWwgU2VydmljZXMsIGV4ZWN1dGUgcXVlcmllc1xuICogTXlTcWxRdWVyeS5xdWVyeTpcbiAqIEBmaWVsZHMgLSByZXBsYWNlZCBieSBmaWVsZCdzIG5hbWVzXG4gKiBAdmFsdWVzIC0gcmVwbGFjZWQgYnkgcGFyc2VkIHZhbHVlc1xuICogQG9udXBkYXRlIC0gcmVwYWxjZWQgYnkgcGFpciBmaWVsZCBuYW1lID0gdmFsdWVcbiAqIEBvbmR1cGxpY2F0ZSAtIHJlcGxhY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKi9cblxuZXhwb3J0IGNsYXNzIE15c3FsU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNle1xuXG4gICAgcmVjb25uZWN0aW9uVGltZW91dD0xMDAwKjM7XG4gICAgcmVjb25uZWN0aW5nPWZhbHNlO1xuICAgIHBvb2w6bXlzcWwuUG9vbHxudWxsPW51bGw7XG4gICAgb3B0aW9uczpNeXNxbFNlcnZpY2VPcHRpb25zO1xuICAgIHNlcnZpY2VTdGFydGVkPWZhbHNlO1xuICAgIHRpbWVvdXRJRDphbnlcblxuICAgIGRlYnVnPWZhbHNlO1xuXG4gICAgcXVlcmllcz1bXTsgLy8gVE9ETzogU1RPUkUgUVVFUklFUyBTRU5UUyBCRUZPUkUgVEhFIFNFUlZJQ0UgSVMgU1RBUlRFRCFcbiAgICBzdGF0aWMgbmV4dFRyYW5zYWN0aW9uSUQ9MTtcbiAgICB0cmFuc2FjdGlvbnM6SVRyYW5zYWN0aW9uW109W11cblxuICAgIG1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSAxMDAwKjYwKjE7IC8vIDEgbWluIGFuZCBkZXRlbGV0ZSB0cmFuc2FjdGlvblxuXG4gICAgZmFpbFJlcG9ydEZpbGVTdHJlYW06ZnMuV3JpdGVTdHJlYW18bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZTpzdHJpbmd8bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRMYXN0QWNjZXNzVGltZTpudW1iZXI9MDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucyl7XG4gICAgICAgIHN1cGVyKFwibXlzcWxcIik7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIFxuXG4gICAgICAgIC8vIGRlY3J5cHQgd2hlbiBuZWVkZWRcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmhvc3Quc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuaG9zdCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmhvc3Quc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMuaG9zdFxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudXNlci5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy51c2VyID0gZGVjcnlwdCh0aGlzLm9wdGlvbnMudXNlci5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy51c2VyXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kYXRhYmFzZSA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmRhdGFiYXNlLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXNzd29yZCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnBhc3N3b3JkLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLnBhc3N3b3JkXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmRlYnVnKVxuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9IHRydWVcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWUpXG4gICAgICAgICAgICB0aGlzLm1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSB0aGlzLm9wdGlvbnMubmF4VHJhbnNhY3Rpb25XYWl0VGltZTtcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgLy8gY2hlY2sgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkSURzOm51bWJlcltdPVtdO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKXtcbiAgICAgICAgICAgICAgICBpZihub3ctaS50aW1lc3RhbXA+dGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJSZWxlYXNlIHRyYW5zYWN0aW9uIGNvbm5lY3Rpb24gZHVlIHRvIHRpbWVvdXRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKGksdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRJRHMucHVzaChpLmlkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+IXJlbW92ZWRJRHMuaW5jbHVkZXMoaS5pZCkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZW1vdmVkOiBcIixjb3VudC10aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGgpXG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgIH0sMTAwMCozMClcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgaWYoIXRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gYWZ0ZXIgMTUgbWluIG9mIGluYWN0aXZpdHksIGNsb3NlIGZpbGVcbiAgICAgICAgICAgIGlmKERhdGUubm93KCktdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWU+MTAwMCo2MCoxNSl7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSwxMDAwKjYwKjUpXG5cbiAgICAgICAgaWYob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpe1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKSl7XG4gICAgICAgICAgICAgICAgICAgIGZzLm1rZGlyU3luYyhvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyPXVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjcmVhdGUgdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZGlyXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZXhlY3V0ZVF1ZXJ5IChxdWVyeTpNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSk6UHJvbWlzZTxNeXNxbFJlc3VsdFtdPnsgcmV0dXJuIGF3YWl0IFJFUV9NWVNRTF9RVUVSWS5yZXF1ZXN0KHF1ZXJ5KSB9XG5cbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIHN1cGVyLmluaXQoKTtcblxuICAgICAgICAvLyBzZXR1cCBwcm9jZXNzIGV4aXQgaGFuZGxlcnMgaW50ZXJydXB0IChjdHJsK2MpXG4gICAgICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmluaXNoQXBwKCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAvLyB0ZXJtaW5hdGUgKGtpbGwpXG4gICAgICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmluaXNoQXBwKCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VydmljZVN0YXJ0ZWQ9ZmFsc2U7XG4gICAgICAgIGxldCBwb29sQ3JlYXRlZDpib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUoIXBvb2xDcmVhdGVkKXtcbiAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RpbmcgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICBwb29sQ3JlYXRlZCA9IGF3YWl0IHRoaXMucmVjcmVhdGVQb29sKCk7XG4gICAgICAgICAgICBpZighcG9vbENyZWF0ZWQpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhIFJldHJ5aW5nIGluIDMgc2Vjb25kcy4uLlwiKVxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+c2V0VGltZW91dChyZXNvbHZlLDMwMDApKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgUkVRX01ZU1FMX1FVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGEgPT57XG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShkYXRhKSlcbiAgICAgICAgICAgICAgICBkYXRhPVtkYXRhXTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzPVtdXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgZGF0YSl7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGkucXVlcnksaS5maWVsZHMpO1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5leGVjdXRlKHF1ZXJ5LGkucm9sbGJhY2tRdWVyeSA/PyBudWxsLGkudHJhbnNhY3Rpb25JRCA/PyAwLGkudGhyb3dhYmxlID8/IGZhbHNlLGkuY2FsY3VsYXRlQ291bnQgPz8gZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkV4ZWN1dGUgcXVlcmllczogXCIsZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9ICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICBpZihpLmVycm9yICYmIChpLmVycm9yLmZhdGFsIHx8IGkuZXJyb3IudGhyb3dhYmxlKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVEJFR0lOLmxpc3RlbmVyPWFzeW5jICgpPT57ICBcbiAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKTtcbiAgICAgICAgICAgIGlmKCFjb25uKVxuICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIk5PX1BPT0xcIixlcnJubzoxMDAwMDAsZmF0YWw6dHJ1ZSxzcWw6XCJcIixuYW1lOlwiTk9fUE9PTFwiLG1lc3NhZ2U6XCJNeXNxbCBwb29sIG5vdCBjcmVhdGVkXCIsdGhyb3dhYmxlOmZhbHNlfVxuXG4gICAgICAgICAgICAvLyBmaW5kIGNvbm4gaW4gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpe1xuICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBsb2dJbmZvKFwiWW91ciBjb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIkNPTk5fSU5fVFJYXCIsZXJybm86MTAwMDA1LGZhdGFsOnRydWUsdGhyb3dhYmxlOmZhbHNlLHNxbDpcIlwiLG5hbWU6XCJDT05OX0lOX1RSWFwiLG1lc3NhZ2U6XCJDb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCJ9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0aWQgPSBNeXNxbFNlcnZpY2UubmV4dFRyYW5zYWN0aW9uSUQrKztcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCZWdpbiB0cmFuc2FjdGlvbiB3aXRoIGlkIFwiLHRpZClcblxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIGF3YWl0IGNvbm4uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4ucXVlcnkoXCJTVEFSVCBUUkFOU0FDVElPTlwiKTtcbiAgICAgICAgICAgICAgICAvL2NvbnN0IHJlcyA9IGF3YWl0IGNvbm4ucXVlcnkoXCJTRVQgYXV0b2NvbW1pdD0wXCIpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb24gc3RhcnRlZFwiKVxuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oe2lkOnRpZCxjb25uOmNvbm4sdGltZXN0YW1wOkRhdGUubm93KCkscXVlcmllczpbe3NxbDpcIlNUQVJUIFRSQU5TQUNUSU9OXCIsc3RhdHVzOlwiZXJyb3JcIn1dfSlcbiAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6dGlkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIGNvbm46Y29ubixcbiAgICAgICAgICAgICAgICBxdWVyaWVzOltdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb25zIHBvb2w6IFwiLHRoaXMudHJhbnNhY3Rpb25zKVxuXG4gICAgICAgICAgICByZXR1cm4gdGlkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBSRVFfTVlTUUxfVFFVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGE9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PWRhdGEudGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtlcnI6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzoxMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOnRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIixcbiAgICAgICAgICAgICAgICB9LGRhdGE6bnVsbCxyb2xsYmFja0Vycm9yOm51bGwsY291bnQ6MH1cblxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGRhdGEucXVlcnkucXVlcnksZGF0YS5xdWVyeS5maWVsZHMpO1xuICAgICAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICAgICAgbGV0IHNxbERhdGEgPSBudWxsO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsdHJ4LmlkKVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgc3FsRGF0YSA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1jYXRjaChlKXsgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7fVxuXG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgaWYoZXJyKVxuICAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnF1ZXJ5LmNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50UXVlcnkgPSB0aGlzLnByZXBhcmVDb3VudFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRRdWVyeVJlc3VsdCA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KGNvdW50UXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY291bnRRdWVyeVJlc3VsdCAmJiBjb3VudFF1ZXJ5UmVzdWx0Lmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IChjb3VudFF1ZXJ5UmVzdWx0WzBdIGFzIGFueSkuY291bnQ7IC8vIHRvZG8gOiBjaGVjaywgcHJvYmFibHkgbm90IHdvcmtpbmcgKHdyb25nIGZpZWxkIG9yIHNtdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9LT5xdWVyeSBlcnJvclwiLGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUXVlcnkgZXhlY3V0aW9uIHN0YXR1czpcIixlcnI/ZXJyLm1lc3NhZ2U6XCJjb21wbGV0ZWRcIilcblxuICAgICAgICAgICAgdHJ4LnF1ZXJpZXMucHVzaCh7c3FsOnF1ZXJ5LHN0YXR1czplcnI/ZXJyLm1lc3NhZ2U6XCJjb21wbGV0ZWRcIn0pXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YTpzcWxEYXRhP3NxbERhdGFbMF06bnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjplcnIsXG4gICAgICAgICAgICAgICAgY291bnQ6Y291bnRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVFJPTExCQUNLLmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UQ09NTUlULmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTpmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29tbWl0IHRyYW5zYWN0aW9uOlwiLHRyeC5pZClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbHRlcihpPT5pLmlkIT09dGlkKTtcblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9uIHBvb2w6XCIsdGhpcy50cmFuc2FjdGlvbnMgKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBhd2FpdCB0aGlzLmNvbW1pdCh0cngpO1xuXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY29tbWl0KHRyeDpJVHJhbnNhY3Rpb24pOlByb21pc2U8TXlzcWxFcnJvcnxudWxsPntcbiAgICAgICBcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4uY29tbWl0KCk7XG4gICAgICAgICAgICAvL2F3YWl0IHRyeC5jb25uLnF1ZXJ5KFwiQ09NTUlUXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgfVxuXG4gICAgYXN5bmMgcm9sbGJhY2tUcmFuc2FjdGlvbih0cng6SVRyYW5zYWN0aW9uLGRvbk5vdFJlbW92ZT86Ym9vbGVhbik6UHJvbWlzZTxNeXNxbEVycm9yfG51bGw+e1xuICAgICAgICBsZXQgZXJyPW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUm9sbGJhY2sgc3RhcnRlZFwiLHRyeC5jb25uLnRocmVhZElkKVxuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4ucm9sbGJhY2soKTtcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLmNvbW1pdCgpO1xuICAgICAgICAgICAgLy9hd2FpdCB0cnguY29ubi5xdWVyeShcIlJPTExCQUNLXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICBpZighZG9uTm90UmVtb3ZlKVxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PmkuaWQhPT10cnguaWQpO1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJvbGxiYWNrIGNvbXBsZXRlXCIsdHJ4LmNvbm4udGhyZWFkSWQpXG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJvbGxiYWNrIHRyYW5zYWN0aW9uXCIsdHJ4LnF1ZXJpZXMpXG4gICAgICAgICAgICBlcnIgPSB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlVHJhbnNhY3Rpb25Bc1Byb2JsZW0odHJ4LFwicm9sbGJhY2tcIilcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5pc2hBcHAoKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJGaW5pc2hpbmcgbXlzcWwgc2VydmljZVwiKVxuICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpXG4gICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oaSk7XG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgIH1cblxuICAgIHByZXBhcmVDb3VudFF1ZXJ5KHF1ZXJ5OnN0cmluZyk6c3RyaW5ne1xuICAgICAgICBsZXQgY291bnRRdWVyeSA9IHF1ZXJ5O1xuICAgICAgICBjb3VudFF1ZXJ5ID0gY291bnRRdWVyeS5zdWJzdHJpbmcoMCxjb3VudFF1ZXJ5LmluZGV4T2YoXCJMSU1JVFwiKSk7XG4gICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZyhjb3VudFF1ZXJ5LmluZGV4T2YoXCJGUk9NXCIpKTtcbiAgICAgICAgY291bnRRdWVyeSA9IFwiU0VMRUNUIENPVU5UKDEpIGFzIGBjb3VudGAgXCIrY291bnRRdWVyeVxuICAgICAgICByZXR1cm4gY291bnRRdWVyeTtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpe1xuXG4gICAgICAgIGlmKCF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0ICYmICF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJlcG9ydCBmYWlsZWQgdHJhbnNhY3Rpb24sIG5vIHJlcG9ydCBmdW5jdGlvbjogdHJhbnNhY3Rpb25GYWlsUmVwb3J0IGluIG9wdGlvbnMsIGFuZCB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIgaXNudCBzZXRcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcil7XG4gICAgICAgICAgICBjb25zdCB5eXltbWRkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLDEwKS5yZXBsYWNlQWxsKFwiLVwiLFwiXCIpO1xuXG4gICAgICAgICAgICAvL3N0b3JlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcix5eXltbWRkK1wiLmpzb25cIik7XG4gICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZSE9PWZpbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lKXtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSx7ZmxhZ3M6J2EnfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU9ZmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlN0b3JlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0OiBcIixmaWxlLHRyeC5xdWVyaWVzLG1lc3NhZ2UpXG5cbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS53cml0ZShKU09OLnN0cmluZ2lmeSh7cXVlcmllczp0cngucXVlcmllcyx0aW1lOnRyeC50aW1lc3RhbXAsZGF0ZSxtZXNzYWdlfSkrXCJcXG59RU9Ce1xcblwiLGVycj0+e1xuICAgICAgICAgICAgICAgIGlmKGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgd3JpdGUgdG8gdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZmlsZVwiKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiVHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgc3RvcmVkXCIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydClcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQodHJ4LG1lc3NhZ2UpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgcmVjcmVhdGVQb29sKCk6UHJvbWlzZTxib29sZWFuPntcblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIG15c3FsOiBcXG4gSE9TVDogXCIrdGhpcy5vcHRpb25zLmhvc3QrJ1xcbiBQT1JUOicrdGhpcy5vcHRpb25zLnBvcnQpXG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRoaXMucG9vbC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvb2wgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICAgIC8vIEtlZXAgYWxpdmUgcGFja2V0cyBzaG91bGQgYmUgc2VudFxuICAgICAgICAvKmVuYWJsZUtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgICAgLy8gV2Ugc2hvdWxkIHN0YXJ0IHNlbmRpbmcgdGhlbSBlYXJseVxuICAgICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXk6IDMgKiAxMDAwLCAvLyAzIHNlY29uZHNcbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBpZGxlIGNvbm5lY3Rpb25zLCBidXQgaXQncyBub3QgbWFuZGF0b3J5IGZvciB0aGUgZml4IHRvIHdvcmssIGl0IHNlZW1zXG4gICAgICAgIG1heElkbGU6IDAsXG4gICAgICAgIC8vIElkbGUgdGltZW91dCBtdWNoIGxhcmdlciB0aGFuIGtlZXAgYWxpdmUgZGVsYXkgYW5kIG11Y2ggc21hbGxlciB0aGFuIE15U1FMJ3MgdGltZW91dCBzZXR0aW5nXG4gICAgICAgIGlkbGVUaW1lb3V0OiA1ICogNjAgKiAxMDAwIC8vIDUgbWludXRlc1xuICAgICAgICAqL1xuXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHRoaXMucG9vbCA9bXlzcWwuY3JlYXRlUG9vbCh7XG4gICAgICAgICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgICAgICAgICAsdXNlcjogdGhpcy5vcHRpb25zLnVzZXJcbiAgICAgICAgICAgICAgICAscGFzc3dvcmQ6IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgICAgICAgICxkYXRhYmFzZTogdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgICAgICAgICAgLHBvcnQ6IHRoaXMub3B0aW9ucy5wb3J0XG4gICAgICAgICAgICAgICAgLGNvbm5lY3Rpb25MaW1pdDogdGhpcy5vcHRpb25zLmNvbm5lY3Rpb25MaW1pdFxuICAgICAgICAgICAgICAgICxxdWV1ZUxpbWl0OiAxMFxuICAgICAgICAgICAgICAgICxtdWx0aXBsZVN0YXRlbWVudHM6IHRydWVcblxuICAgICAgICAgICAgICAgICxlbmFibGVLZWVwQWxpdmU6dHJ1ZVxuICAgICAgICAgICAgICAgICxrZWVwQWxpdmVJbml0aWFsRGVsYXk6MyoxMDAwXG4gICAgICAgICAgICAgICAgLy8sbWF4SWRsZTowXG4gICAgICAgICAgICAgICAgLGlkbGVUaW1lb3V0OjEwMDAqNjAqNVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdjb25uZWN0aW9uJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBDUkVBVEVEXCIpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdhY3F1aXJlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBBQ1FVSVJFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdyZWxlYXNlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBSRUxFQVNFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdlbnF1ZXVlJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJNWVNRTCBDT05ORUNUSU9OIEVOUVVFVUVEXCIpXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBjb25uZWN0aW9uXG4gICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNrIG15c3FsIGNvbm5lY3Rpb25cIilcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKVxuICAgICAgICAgICAgICAgIGlmKGNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzLGZdID0gYXdhaXQgY29ubi5xdWVyeShcIlNFTEVDVCAxXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25uPy5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RlZCB0byBNWVNRTCFcIilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBvbkFwcGxpY2F0aW9uUmVhZHkoKSB7fVxuXG5cbiAgICBzdGF0aWMgZmllbGRzVG9PYmplY3QoZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdfE15c3FsUXVlcnlGaWVsZE9iamVjdCxpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzPzpib29sZWFuKTpNeXNxbFF1ZXJ5RmllbGRPYmplY3R7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICBjb25zdCBvYmo6TXlzcWxRdWVyeUZpZWxkT2JqZWN0PXt9O1xuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGlmKCFpLm5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZih0eXBlb2YgaS52YWx1ZSE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWU7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKCFpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2kubmFtZV09e1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6aS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTppLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmkuaWdub3JlSW5JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTppLmlnbm9yZUluVXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOmkudXNlSW5SZXBsYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNlXG4gICAgICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIG9iamVjdFRvRmllbGRzKG9iajpNeXNxbFF1ZXJ5RmllbGRPYmplY3R8TXlzcWxRdWVyeUZpZWxkW10pOk15c3FsUXVlcnlGaWVsZFtde1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KG9iaikpXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICBjb25zdCBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW109W107XG4gICAgICAgIGZvcihsZXQgaSBpbiBvYmope1xuICAgICAgICAgICAgaWYob2JqW2ldICYmIHR5cGVvZiBvYmpbaV0gPT09IFwib2JqZWN0XCIpe1xuICAgICAgICAgICAgICAgIGxldCBtbyA9IG9ialtpXSBhcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZD47XG4gICAgICAgICAgICAgICAgaWYoIW1vKXtcbiAgICAgICAgICAgICAgICAgICAgbW89e1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6bW8ubmFtZSBhcyBzdHJpbmcgPz8gaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6bW8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbTptby5zeXN0ZW0gYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6bW8uaWdub3JlSW5JbnNlcnQgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6bW8uaWdub3JlSW5VcGRhdGUgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOm1vLnVzZUluUmVwbGFjZSBhcyBib29sZWFuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpvYmpbaV0gYXMgc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlUXVlcnkocXVlcnk6c3RyaW5nLGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QpOnN0cmluZ3tcbiAgICAgICAgXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICBmaWVsZHMgPSBNeXNxbFNlcnZpY2Uub2JqZWN0VG9GaWVsZHMoZmllbGRzKTtcblxuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9dGhpcy5wcmVwYXJlUXVlcnlGaWVsZFZhbHVlKGkudmFsdWUsaS5zeXN0ZW0pO1xuICAgICAgICAgICAgaS5fcGFyc2VkVmFsdWU9dmFsO1xuICAgICAgICAgICAgcXVlcnk9cXVlcnkucmVwbGFjZUFsbChcIkBcIitpLm5hbWUsdmFsK1wiXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZih0bXAuaW5kZXhPZihcInNlbGVjdFwiKT09PTAgJiYgdG1wLmluZGV4T2YoXCJsaW1pdFwiKT09PS0xKVxuICAgICAgICAgICAgcXVlcnkrPVwiIExJTUlUIDEwMFwiXG4gICAgICAgIFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJATk9MSU1JVFwiLFwiXCIpXG5cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGZpZWxkc1wiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBpbnNlcnRGaWVsZE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgaW5zZXJ0RmllbGRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGROYW1lcy5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCcpXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlcnk9cXVlcnlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQGZpZWxkcycsaW5zZXJ0RmllbGROYW1lcy5qb2luKFwiLFwiKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQHZhbHVlcycsaW5zZXJ0RmllbGRWYWx1ZXMuam9pbihcIixcIikpXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGluc2VydFwiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbmluc2VydE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgb25pbnNlcnRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uaW5zZXJ0TmFtZXMucHVzaChpLm5hbWUpXG4gICAgICAgICAgICAgICAgb25pbnNlcnRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBpbnNlcnRcIixgKCR7b25pbnNlcnROYW1lcy5qb2luKFwiLFwiKX0pIFZBTFVFUyAoJHtvbmluc2VydFZhbHVlcy5qb2luKFwiLFwiKX0pYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAb251cGRhdGVcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25VcGRhdGU9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5VcGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgID0gJytpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBvbnVwZGF0ZVwiLG9uVXBkYXRlLmpvaW4oXCIgLCBcIikpXG4gICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKCdAb25kdXBsaWNhdGUnKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbkR1cGxpY2F0ZT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKCFpLnVzZUluUmVwbGFjZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25EdXBsaWNhdGUucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AgPSAnK2kuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQG9uZHVwbGljYXRlXCIsb25EdXBsaWNhdGUuam9pbihcIiAsIFwiKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiAgcXVlcnk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByZXBhcmVRdWVyeUZpZWxkVmFsdWUodmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbik6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVke1xuICAgICAgICBpZighc3lzdGVtICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlP3ZhbHVlLnJlcGxhY2VBbGwoJ1wiJywnXFxcXFwiJyk6bnVsbFxuICAgICAgICAgICAgaWYodmFsdWUhPT1udWxsKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gJ1wiJyt2YWx1ZSsnXCInXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIk5VTExcIlxuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gXCJOVUxMXCJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZXhlY3V0ZShxdWVyeTpzdHJpbmcscm9sbGJhY2tRdWVyeTpzdHJpbmd8bnVsbCx0cmFuc2FjdGlvbklEOm51bWJlcix0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKTpQcm9taXNlPE15c3FsUmVzdWx0PntcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyZWplY3QpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBwb29sXG4gICAgICAgICAgICBpZighdGhpcy5wb29sKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTm8gcG9vbFwiKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX1BPT0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fUE9PTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb258bnVsbD1udWxsXG4gICAgICAgICAgICAgICAgaWYodHJhbnNhY3Rpb25JRCAmJiB0cmFuc2FjdGlvbklEPjApe1xuICAgICAgICAgICAgICAgICAgICBjb25uID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dHJhbnNhY3Rpb25JRCk/LmNvbm4gPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsY29ubj8udGhyZWFkSWQpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBhd2FpdCB0aGlzLnBvb2wuZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeVwiLGNvbm4/LnRocmVhZElkKVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgY29ubmVjdGlvbiBub3QgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGlmKCFjb25uKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLGBObyBjb25uZWN0aW9uIGNyZWF0ZWQhYClcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgY2FudCBnZXQgY29ubmVjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgLy8gRG8gc2VuZCBxdWVyeVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIllvdXIgY29ubmVjdGlvbiBpcyBpbiB0cmFuc2FjdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kUXVlcnkoY29ubixxdWVyeSxyZXNvbHZlLHJvbGxiYWNrUXVlcnksdGhyb3dhYmxlP3RydWU6ZmFsc2UsY2FsY3VsYXRlQ291bnQpO1xuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc31cIixlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyByZWNyZWF0ZSBwb29sLCBjb25uZWN0aW9uIGVycm9yXG4gICAgICAgICAgICAgICAgaWYoYCR7ZX1gLmluZGV4T2YoJ0VDT05OUkVGVVNFRCcpIT09LTEpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjcmVhdGVQb29sKCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOihlICYmIHR5cGVvZiBlID09PSBcIm9iamVjdFwiICYmIFwibWVzc2FnZVwiIGluIGUgYXMgYW55KT8oZSBhcyBhbnkpLm1lc3NhZ2U6XCJNeXNxbCBjYW50IGdldCBjb25uZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbmRRdWVyeShjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyxyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyb2xsYmFjazpzdHJpbmd8bnVsbCx0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKXtcbiAgICAgICAgXG4gICAgICAgIGxldCBlcnJDYXRjaGVkPWZhbHNlO1xuXG4gICAgICAgIGNvbm4ub24oXCJlcnJvclwiLGFzeW5jIGVycj0+e1xuICAgICAgICAgICAgZXJyQ2F0Y2hlZD10cnVlO1xuXG4gICAgICAgICAgICBsZXQgcm9sbGJhY2tFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuICAgICAgIFxuICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPmNvbm4ub24oJ2Vycm9yJylcIixlcnIpXG5cbiAgICAgICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICAgICAgdHJ5e1xuXG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICBjb25uLmRlc3Ryb3koKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfWNhdGNoKGUpe31cbiAgICAgXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiQ09OTl9FUlJcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMyxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJDT05OX0VSUlwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiK2VycixcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I6cm9sbGJhY2tFcnJvcixcbiAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG5cblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIscXVlcnkpXG5cbiAgICAgICAgLy8gc2VuZCBxdWVyeVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLHF1ZXJ5KTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcm9sbGJhY2tcbiAgICAgICAgICAgIGxldCByb2xsYmFja0Vycm9yPW51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uZWN0aW9uXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG5cblxuXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgICBsZXQgZHVwPWZhbHNlO1xuICAgICAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVyX2R1cF9lbnRyeVwiKSE9PS0xKVxuICAgICAgICAgICAgICAgIGR1cD10cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixxdWVyeVJlc3VsdC5lcnIpO1xuXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7Li4ucXVlcnlSZXN1bHQuZXJyLHRocm93YWJsZTp0aHJvd2FibGV9LFxuICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yOnJvbGxiYWNrRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNEdXBsaWNhdGVFcnJvcjpkdXAsXG4gICAgICAgICAgICAgICAgY291bnQ6MFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGlmKGNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgIGxldCBjb3VudFF1ZXJ5ID0gdGhpcy5wcmVwYXJlQ291bnRRdWVyeShxdWVyeSk7XG4gICAgICAgICAgICBjb25zdCBjb3VudFF1ZXJ5UmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4sY291bnRRdWVyeSk7XG4gICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0LmVycilcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixjb3VudFF1ZXJ5UmVzdWx0LmVycik7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKGNvdW50UXVlcnlSZXN1bHQucmVzdWx0cyAmJiBjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHMubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50UXVlcnlSZXN1bHQucmVzdWx0c1swXS5jb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25uLnJlbGVhc2UoKTtcbiAgICAgICAgICAgIGNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIH1jYXRjaChlKXt9XG5cbiAgICAgICAgLy8gaGFuZGxlIHN1Y2Nlc3NcbiAgICAgICAgY29uc3QgZXJyID0gcXVlcnlSZXN1bHQuZXJyP3suLi5xdWVyeVJlc3VsdC5lcnIsdGhyb3dhYmxlOnRocm93YWJsZX06bnVsbDtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBlcnJvcjplcnIsXG4gICAgICAgICAgICBkYXRhOnF1ZXJ5UmVzdWx0LnJlc3VsdHMsXG4gICAgICAgICAgICBjb3VudDpjb3VudFxuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgLy8gQXN5bmMgcXVlcnkgd3JhcHBlciB0byBjb25uLnF1ZXJ5XG4gICAgYXN5bmMgcXVlcnlBc3luYyhjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyk6UHJvbWlzZTx7ZXJyOk15c3FsRXJyb3J8bnVsbCxyZXN1bHRzPzphbnl9PntcblxuICAgICAgICBsZXQgcmVzdWx0PW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbm4ucXVlcnkocXVlcnkpO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICByZXR1cm4ge2Vycjp0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyOm51bGwsXG4gICAgICAgICAgICByZXN1bHRzOnJlc3VsdFswXSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZU15c3FsUXVlcnlFcnJvcihlcnI6YW55LHRocm93YWJsZT86Ym9vbGVhbik6TXlzcWxFcnJvcntcbiAgICAgICAgaWYoZXJyICYmICB0eXBlb2YgZXJyPT09XCJvYmplY3RcIiAmJiBcImNvZGVcIiBpbiBlcnIgJiYgXCJlcnJub1wiIGluIGVyciAmJiBcInNxbFwiIGluIGVyciAmJiBcIm5hbWVcIiBpbiBlcnIgJiYgXCJtZXNzYWdlXCIgaW4gZXJyKXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IGVyci5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzogZXJyLmVycm5vLFxuICAgICAgICAgICAgICAgICAgICBzcWw6IGVyci5zcWwsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ZXJyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kZTogXCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAyLFxuICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNxbDogXCJubyBxdWVyeVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6XCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiKyhlcnIpP2VycjpcIlwiLFxuICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmNvbnN0IHNlY3JldF9rZXk9XCJBS0xXa2FqdyVeJmRnd3FodyM5ODQ1M2kyM2JmazIzcm4ya25rbmdscmdqZWl0XCJcbmNvbnN0IHNlY3JldF9pdj1cInJ0aGFkcmZrMjNybjJrbiMqRk5LQUBndDQ0ZGYzdHNscmdqIyMhaXRcIlxuXG4vLyBHZW5lcmF0ZSBzZWNyZXQgaGFzaCB3aXRoIGNyeXB0byB0byB1c2UgZm9yIGVuY3J5cHRpb25cbmNvbnN0IGtleSA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWNyZXRfa2V5KS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCAzMilcbmNvbnN0IGl2ID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlY3JldF9pdikuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpXG5cbmNvbnN0IGRlY3J5cHQgPShlbmNyeXB0ZWQ6c3RyaW5nKTpzdHJpbmd8bnVsbD0+e1xuICB0cnl7XG4gICAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuZnJvbShlbmNyeXB0ZWQsICdiYXNlNjQnKS50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgICBjb25zdCBkZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5LCBpdik7XG4gICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCwgJ2JpbmFyeScsICd1dGY4Jyk7XG4gICAgICBkZWNyeXB0ZWQgKz0gZGVjaXBoZXIuZmluYWwoJ3V0ZjgnKTtcbiAgICAgIHJldHVybiBkZWNyeXB0ZWQ7XG4gIH1jYXRjaChlKXtcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmNvbnN0IGVuY3J5cHQgPSAodHh0OnN0cmluZyk6c3RyaW5nfG51bGw9PntcbiAgdHJ5e1xuICAgICAgbGV0IGVuY2lwaGVyID0gY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5LCBpdiksXG4gICAgICBlbmNyeXB0ZWQgPSBlbmNpcGhlci51cGRhdGUodHh0LCAndXRmOCcsICdiaW5hcnknKTtcbiAgICAgIGVuY3J5cHRlZCArPSBlbmNpcGhlci5maW5hbCgnYmluYXJ5Jyk7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oZW5jcnlwdGVkLCAnYmluYXJ5JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9Y2F0Y2goZSl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNeXNxbFNlcnZpY2U7Il19
|