ccgf-game-tool 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +60 -53
- package/dist/registry.js +68 -2
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -61,13 +61,17 @@ function snapshot() {
|
|
|
61
61
|
*/
|
|
62
62
|
let registryCache = null;
|
|
63
63
|
/**
|
|
64
|
-
*
|
|
64
|
+
* **失败不抛异常,也不让面板空着装作"没有模块"**:把原因一起回传,面板显示成提示 ——
|
|
65
|
+
* 这是最初就定下的要求("没有网络就提示就行了")。
|
|
65
66
|
*
|
|
66
|
-
*
|
|
67
|
-
* 这是最初就定下的要求("没有网络就提示就行了")。
|
|
67
|
+
* 远程信息的来源:**逐个 `npm view <name> --json` 精确查询**。
|
|
68
68
|
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
69
|
+
* 曾经用 `npm search` + 关键词,已废弃 —— 搜索对 scoped 包(`@ccgf/*`)很不可靠,
|
|
70
|
+
* 常常搜不到,于是"公共模块远程列表"和"最新版本"都会是空的(实测踩过)。
|
|
71
|
+
* 代价:包名要维护在 registry.ts 的 KNOWN_PACKAGES 里,新增包时加一行。
|
|
72
|
+
*
|
|
73
|
+
* 之所以用 npm 命令而不是自己发 HTTPS 请求:npm 会自动带上工程的 `.npmrc`
|
|
74
|
+
* (私有源、镜像、代理等配置都跟着走),不用我们重复实现一遍。
|
|
71
75
|
*/
|
|
72
76
|
function queryRegistry(force) {
|
|
73
77
|
var _a, _b;
|
|
@@ -75,56 +79,59 @@ function queryRegistry(force) {
|
|
|
75
79
|
if (!force && registryCache && now - registryCache.at < constants_1.REGISTRY_CACHE_MS) {
|
|
76
80
|
return { entries: registryCache.entries, error: registryCache.error };
|
|
77
81
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
else {
|
|
119
|
-
// 注意用**未截断**的 stdout 解析:result.output 是给界面看的尾部(可能被截断)
|
|
120
|
-
const parsed = (0, registry_1.parseSearchResults)(stdout);
|
|
121
|
-
if (parsed.malformed) {
|
|
122
|
-
error = '远程仓库返回的内容不是预期的 JSON 形状';
|
|
82
|
+
// 方案 B:逐个**精确查询**,不再用 npm search。
|
|
83
|
+
// 搜索对 scoped 包(@ccgf/*)很不可靠,常常搜不到 —— 那样"公共模块远程列表"
|
|
84
|
+
// 和"最新版本"都会是空的。名单在 registry.ts 的 KNOWN_PACKAGES 里。
|
|
85
|
+
const entries = [];
|
|
86
|
+
const failures = [];
|
|
87
|
+
for (const name of registry_1.KNOWN_PACKAGES) {
|
|
88
|
+
const command = 'npm view ' + name + ' --json';
|
|
89
|
+
const spawnSpec = (0, shared_1.spawnSpecFor)([process.platform === 'win32' ? 'npm.cmd' : 'npm', ...(0, registry_1.viewArgv)(name)]);
|
|
90
|
+
let stdout = '';
|
|
91
|
+
let result;
|
|
92
|
+
try {
|
|
93
|
+
const spawned = (0, child_process_1.spawnSync)(spawnSpec.command, spawnSpec.args, {
|
|
94
|
+
cwd: projectPath(),
|
|
95
|
+
timeout: shared_1.NPM_TIMEOUT_MS,
|
|
96
|
+
windowsHide: true,
|
|
97
|
+
maxBuffer: 32 * 1024 * 1024,
|
|
98
|
+
windowsVerbatimArguments: spawnSpec.windowsVerbatimArguments,
|
|
99
|
+
});
|
|
100
|
+
stdout = (0, shared_1.decodeProcessOutput)(spawned.stdout);
|
|
101
|
+
result = (0, shared_1.buildNpmResult)({
|
|
102
|
+
command,
|
|
103
|
+
exitCode: typeof spawned.status === 'number' ? spawned.status : null,
|
|
104
|
+
stdout,
|
|
105
|
+
stderr: (0, shared_1.decodeProcessOutput)(spawned.stderr),
|
|
106
|
+
spawnError: spawned.error
|
|
107
|
+
? {
|
|
108
|
+
code: spawned.error.code,
|
|
109
|
+
message: spawned.error.message,
|
|
110
|
+
}
|
|
111
|
+
: null,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
result = (0, shared_1.buildNpmResult)({
|
|
116
|
+
command,
|
|
117
|
+
exitCode: null,
|
|
118
|
+
stdout: '',
|
|
119
|
+
stderr: '',
|
|
120
|
+
spawnError: { message: (err === null || err === void 0 ? void 0 : err.message) ? String(err.message) : String(err) },
|
|
121
|
+
});
|
|
123
122
|
}
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
// 单个包查不到(没发布 / 离线)不该让整份列表失败,只记下来
|
|
124
|
+
if (!result.ok) {
|
|
125
|
+
failures.push(name + ':' + ((_a = result.hint) !== null && _a !== void 0 ? _a : ('退出码 ' + ((_b = result.exitCode) !== null && _b !== void 0 ? _b : '未知'))));
|
|
126
|
+
continue;
|
|
126
127
|
}
|
|
128
|
+
const entry = (0, registry_1.parseViewResult)(stdout);
|
|
129
|
+
if (entry)
|
|
130
|
+
entries.push(entry);
|
|
131
|
+
else
|
|
132
|
+
failures.push(name + ':返回内容不是预期的 JSON 形状');
|
|
127
133
|
}
|
|
134
|
+
const error = entries.length === 0 && failures.length > 0 ? failures.join(';') : null;
|
|
128
135
|
registryCache = { at: now, entries, error };
|
|
129
136
|
return { entries, error };
|
|
130
137
|
}
|
|
@@ -788,4 +795,4 @@ function load() { }
|
|
|
788
795
|
* @zh 卸载扩展时触发的方法
|
|
789
796
|
*/
|
|
790
797
|
function unload() { }
|
|
791
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQW82QkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQTE2QjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQTBDO0FBQzFDLHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUlvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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QUFDLG1CQUFtQixDQUFDLFdBQW1CO1FBQ3pDLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxXQUFtQjtRQUMzQyxPQUFPLGVBQWUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNKLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFnQixJQUFJLEtBQUssQ0FBQztBQUUxQjs7O0dBR0c7QUFDSCxTQUFnQixNQUFNLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcclxuaW1wb3J0IHBhY2thZ2VKU09OIGZyb20gJy4uL3BhY2thZ2UuanNvbic7XHJcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBjb3B5U3luYywgZXhpc3RzU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgcmVtb3ZlU3luYywgc3RhdFN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcy1leHRyYSc7XHJcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcclxuaW1wb3J0IHtcclxuICAgIEdBTUVQTEFZX0RJUixcclxuICAgIExBWUVSUyxcclxuICAgIE1BTkFHRVJfRElSLFxyXG4gICAgUFJFRkFCX1RFTVBMQVRFUyxcclxuICAgIFBSRUZBQl9URU1QTEFURV9MQUJFTFMsXHJcbiAgICBSRUdJU1RSWV9DQUNIRV9NUyxcclxuICAgIFJFU09VUkNFU19ESVIsXHJcbiAgICBUUHJlZmFiVGVtcGxhdGUsXHJcbiAgICBWSUVXU19TVUJESVIsXHJcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBidWlsZE9yZGVyUGxhbiwgbGlzdE1hbmFnZXJzLCBsaXN0TW9kdWxlcywgbGlzdFZpZXdzLCBydW5Eb2N0b3IgfSBmcm9tICcuL2RvY3Rvcic7XHJcbmltcG9ydCB7XHJcbiAgICBJREVOVElGSUVSX1JFLFxyXG4gICAgbm9ybWFsaXplTWFuYWdlck5hbWUsXHJcbiAgICBub3JtYWxpemVNb2R1bGUsXHJcbiAgICBub3JtYWxpemVWaWV3TmFtZSxcclxuICAgIHZpZXdQcmVmYWJQYXRoLFxyXG59IGZyb20gJy4vbmFtaW5nJztcclxuaW1wb3J0IHtcclxuICAgIGNvbGxlY3RTbmFwc2hvdCxcclxuICAgIGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0RpcixcclxuICAgIGxpc3RMb2NhbENhdGFsb2csXHJcbiAgICByZWFkSW5zdGFsbGVkUGFja2FnZSxcclxuICAgIHJlYWRQcm9qZWN0TWFuaWZlc3QsXHJcbn0gZnJvbSAnLi9wcm9qZWN0JztcclxuaW1wb3J0IHtcclxuICAgIGZvcm1hdE5wbVNlYXJjaENvbW1hbmQsXHJcbiAgICBucG1TZWFyY2hBcmd2LFxyXG4gICAgcGFyc2VTZWFyY2hSZXN1bHRzLFxyXG59IGZyb20gJy4vcmVnaXN0cnknO1xyXG5pbXBvcnQge1xyXG4gICAgTlBNX1RJTUVPVVRfTVMsXHJcbiAgICBidWlsZE5wbVJlc3VsdCxcclxuICAgIGJ1aWxkU2hhcmVkU3RhdHVzLFxyXG4gICAgY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZCxcclxuICAgIGNvbGxlY3RJbnN0YWxsU3BlY3MsXHJcbiAgICBkZWNvZGVQcm9jZXNzT3V0cHV0LFxyXG4gICAgZmluZFBhY2thZ2VSZWZzLFxyXG4gICAgZm9ybWF0TnBtQ29tbWFuZCxcclxuICAgIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QsXHJcbiAgICBtZXJnZUNhdGFsb2csXHJcbiAgICBucG1TcGF3blNwZWMsXHJcbiAgICBzcGF3blNwZWNGb3IsXHJcbiAgICBzdW1tYXJpemVOcG1GYWlsdXJlLFxyXG59IGZyb20gJy4vc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICAgIGJ1aWxkTWFuYWdlclNjcmlwdCxcclxuICAgIGJ1aWxkRXZlbnRzU2NyaXB0LFxyXG4gICAgYnVpbGRNb2RlbFNjcmlwdCxcclxuICAgIGJ1aWxkTW9kdWxlU2NyaXB0LFxyXG4gICAgYnVpbGRWaWV3UHJlZmFiLFxyXG4gICAgYnVpbGRWaWV3U2NyaXB0LFxyXG4gICAgaXNQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFRGcmFtZXdvcmtJbXBvcnQsfSBmcm9tICcuL3RlbXBsYXRlcyc7XHJcbmltcG9ydCB7IElGaW5kaW5nLCBJTnBtUnVuUmVzdWx0LCBJSW5zdGFsbGVkUGFja2FnZVZpZXcsIElQcm9qZWN0U25hcHNob3QsIElTaGFyZWRDYXRhbG9nRW50cnkgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5paH5qGIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiDmianlsZXoh6rluKbnmoTkuK3mlofmlofmoYjooajjgIJcclxuICog5a6D5pei5piv44CMa2V5IOWFqOmbhuOAjeeahOadpea6kO+8jOS5n+aYr+e8lui+keWZqCBpMThuIOaLv+S4jeWIsOaXtueahOWFnOW6leOAglxyXG4gKi9cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuY29uc3QgWkhfU1RSSU5HUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHJlcXVpcmUoJy4uL2kxOG4vemguanMnKTtcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5bCP5bel5YW3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKiDlt6XnqIvmoLnnm67lvZUgKi9cclxuZnVuY3Rpb24gcHJvamVjdFBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuUHJvamVjdC5wYXRoO1xyXG59XHJcblxyXG4vKipcclxuICog6L+Z5Liq5bel56iL5byV55So5qGG5p626K+l55So5ZOq56eN5YaZ5rOVOlxyXG4gKiAtIOW8gOWPkeW3peS9nOWMuijku5PlupPph4ws5qGG5p625rqQ56CB5ZyoIGFzc2V0cy9zY3JpcHRzL2ZyYW1ld29yayDkuIspIC0+IOebuOWvuei3r+W+hFxyXG4gKiAtIOijheaIkCBucG0g5YyF55qE5paw5bel56iLIC0+IOWMheWQjSBAY2NnZi9mcmFtZXdvcmtcclxuICpcclxuICog5Yik5o2u5pivXCLmoYbmnrbmupDnoIHlnKjkuI3lnKhcIizkuI4gY29uc3RhbnRzLnRzIOeahCBGUkFNRVdPUktfREVWX0RJUiDlkIzkuIDkuKrlgLzjgIJcclxuICovXHJcbmZ1bmN0aW9uIGZyYW1ld29ya0ltcG9ydE1vZGUoKTogVEZyYW1ld29ya0ltcG9ydCB7XHJcbiAgICByZXR1cm4gZXhpc3RzU3luYyhqb2luKHByb2plY3RQYXRoKCksICdhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsnKSkgPyAnd29ya3NwYWNlJyA6ICdwYWNrYWdlJztcclxufVxyXG5cclxuLyoqIOebuOWvuei3r+W+hCAtPiBkYjovLyDotYTmupAgdXJsICovXHJcbmZ1bmN0aW9uIGRiVXJsKHJlbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnZGI6Ly8nICsgcmVsLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxufVxyXG5cclxuLyoqIHV1aWQgLT4g6aKE5Yi25L2T6YeM6ISa5pys57uE5Lu255qEIF9fdHlwZV9fICovXHJcbmZ1bmN0aW9uIGNvbXByZXNzVXVpZCh1dWlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEVkaXRvci5VdGlscy5VVUlELmNvbXByZXNzVVVJRCh1dWlkLCBmYWxzZSk7XHJcbn1cclxuXHJcbi8qKiDlj5bkuIDku73lt6XnqIvlv6vnhafvvIjkvZPmo4DjgIHliJfooajpg73ln7rkuo7lroPvvIzkv53or4HpnaLmnb/nnIvliLDnmoTlkozkvZPmo4DnnIvliLDnmoTmmK/lkIzkuIDku73mlbDmja7vvIkgKi9cclxuZnVuY3Rpb24gc25hcHNob3QoKTogSVByb2plY3RTbmFwc2hvdCB7XHJcbiAgICByZXR1cm4gY29sbGVjdFNuYXBzaG90KHByb2plY3RQYXRoKCksIGNvbXByZXNzVXVpZCk7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogcmVnaXN0cnkg5pCc57Si57uT5p6c55qE57yT5a2Y44CCXHJcbiAqXHJcbiAqIOS4gOasoeaQnOe0ouWunua1iyAxfjQg56eSIOKAlOKAlCDogIzpnaLmnb/liIfpobXjgIHoo4XlrozliLfmlrDpg73kvJrosIPnlKjmn6Xor6LvvIzkuI3og73mr4/mrKHpg73ljrvmkJzjgIJcclxuICog5pi+5byP54K544CM5Yi35paw44CN5pe255SoIGBmb3JjZWAg57uV6L+H5a6D44CCXHJcbiAqL1xyXG5sZXQgcmVnaXN0cnlDYWNoZTogeyBhdDogbnVtYmVyOyBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbi8qKlxyXG4gKiDku44gcmVnaXN0cnkg5pCc5Ye65YWs5YWx5qih5Z2X77yI5bim57yT5a2Y77yJ44CCXHJcbiAqXHJcbiAqICoq5aSx6LSl5LiN5oqb5byC5bi477yM5Lmf5LiN6K6p6Z2i5p2/56m6552A6KOF5L2cXCLmsqHmnInmqKHlnZdcIioq77ya5oqK5Y6f5Zug5LiA6LW35Zue5Lyg77yM6Z2i5p2/5pi+56S65oiQ5o+Q56S6IOKAlOKAlFxyXG4gKiDov5nmmK/mnIDliJ3lsLHlrprkuIvnmoTopoHmsYLvvIhcIuayoeaciee9kee7nOWwseaPkOekuuWwseihjOS6hlwi77yJ44CCXHJcbiAqXHJcbiAqIOeUqCBgbnBtIHNlYXJjaGAg6ICM5LiN5piv6Ieq5bex5Y+RIEhUVFBT77yabnBtIOS8muiHquWKqOW4puS4iuW3peeoi+eahCBgLm5wbXJjYFxyXG4gKiDvvIhyZWdpc3RyeSAvIOS7o+eQhiAvIOiupOivgSAvIGNhZmlsZe+8ie+8jOengeaciSByZWdpc3RyeSDpnaDnmoTlsLHmmK/ov5nkupvjgIJcclxuICovXHJcbmZ1bmN0aW9uIHF1ZXJ5UmVnaXN0cnkoZm9yY2U6IGJvb2xlYW4pOiB7IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB7XHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgaWYgKCFmb3JjZSAmJiByZWdpc3RyeUNhY2hlICYmIG5vdyAtIHJlZ2lzdHJ5Q2FjaGUuYXQgPCBSRUdJU1RSWV9DQUNIRV9NUykge1xyXG4gICAgICAgIHJldHVybiB7IGVudHJpZXM6IHJlZ2lzdHJ5Q2FjaGUuZW50cmllcywgZXJyb3I6IHJlZ2lzdHJ5Q2FjaGUuZXJyb3IgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb21tYW5kID0gZm9ybWF0TnBtU2VhcmNoQ29tbWFuZCgpO1xyXG4gICAgY29uc3Qgc3Bhd25TcGVjID0gc3Bhd25TcGVjRm9yKFxyXG4gICAgICAgIFtwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ25wbS5jbWQnIDogJ25wbScsIC4uLm5wbVNlYXJjaEFyZ3YoKV0sXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBzdGRvdXQgPSAnJztcclxuICAgIGxldCByZXN1bHQ6IElOcG1SdW5SZXN1bHQ7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHNwYXduZWQgPSBzcGF3blN5bmMoc3Bhd25TcGVjLmNvbW1hbmQsIHNwYXduU3BlYy5hcmdzLCB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvamVjdFBhdGgoKSxcclxuICAgICAgICAgICAgdGltZW91dDogTlBNX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICBtYXhCdWZmZXI6IDMyICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdGRvdXQgPSBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3Rkb3V0KTtcclxuICAgICAgICByZXN1bHQgPSBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgIGNvbW1hbmQsXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiB0eXBlb2Ygc3Bhd25lZC5zdGF0dXMgPT09ICdudW1iZXInID8gc3Bhd25lZC5zdGF0dXMgOiBudWxsLFxyXG4gICAgICAgICAgICBzdGRvdXQsXHJcbiAgICAgICAgICAgIHN0ZGVycjogZGVjb2RlUHJvY2Vzc091dHB1dChzcGF3bmVkLnN0ZGVyciksXHJcbiAgICAgICAgICAgIHNwYXduRXJyb3I6IHNwYXduZWQuZXJyb3JcclxuICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IChzcGF3bmVkLmVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzcGF3bmVkLmVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgIHJlc3VsdCA9IGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgICAgZXhpdENvZGU6IG51bGwsXHJcbiAgICAgICAgICAgIHN0ZG91dDogJycsXHJcbiAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgIHNwYXduRXJyb3I6IHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXSA9IFtdO1xyXG4gICAgbGV0IGVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBpZiAoIXJlc3VsdC5vaykge1xyXG4gICAgICAgIGVycm9yID0gcmVzdWx0LmhpbnQgPz8gYG5wbSBzZWFyY2gg6YCA5Ye656CBICR7cmVzdWx0LmV4aXRDb2RlID8/ICfmnKrnn6UnfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOazqOaEj+eUqCoq5pyq5oiq5patKirnmoQgc3Rkb3V0IOino+aekO+8mnJlc3VsdC5vdXRwdXQg5piv57uZ55WM6Z2i55yL55qE5bC+6YOo77yI5Y+v6IO96KKr5oiq5pat77yJXHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTZWFyY2hSZXN1bHRzKHN0ZG91dCk7XHJcbiAgICAgICAgaWYgKHBhcnNlZC5tYWxmb3JtZWQpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSAn6L+c56iL5LuT5bqT6L+U5Zue55qE5YaF5a655LiN5piv6aKE5pyf55qEIEpTT04g5b2i54q2JztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbnRyaWVzID0gcGFyc2VkLmVudHJpZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdHJ5Q2FjaGUgPSB7IGF0OiBub3csIGVudHJpZXMsIGVycm9yIH07XHJcbiAgICByZXR1cm4geyBlbnRyaWVzLCBlcnJvciB9O1xyXG59XHJcblxyXG4vKipcclxuICog57uE6KOF5YWs5YWx5qih5Z2X55qE5a6M5pW054q25oCB44CCXHJcbiAqXHJcbiAqIOS4ieS4quadpea6kOWQiOi1t+adpeaJjeaYr+WujOaVtOWIl+ihqO+8mlxyXG4gKiAxLiDmnKzmoYbmnrYqKuW8gOWPkeW3peS9nOWMuioq6YeM55qEIGBwYWNrYWdlcy9zaGFyZWQvKmDvvIjlj6rmnInmnKzku5PlupPmiY3orqTvvIzop4FcclxuICogICAgYGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0RpcmDvvInigJTigJQg6IO957uZ5Ye6IGBmaWxlOmAg5a6J6KOF6K+05piO56ym77ybXHJcbiAqIDIuIGBub2RlX21vZHVsZXNgIOmHjOW3sue7j+ijheS6hueahO+8iOmdoOWMhea4heWNlemHjOeahOagh+iusOiupOWHuuadpe+8ie+8m1xyXG4gKiAzLiAqKui/nOeoiyByZWdpc3RyeSoq77yI5oyJ5Y+R546w5YWz6ZSu6K+N5pCc57Si77yJ4oCU4oCUIOimhuebllwi6L+Y5rKh6KOF44CB5L2G5Y+v5Lul6KOFXCLnmoTpgqPkupvjgIJcclxuICpcclxuICog5Yi75oSPKirkuI0qKumdoOWMheWQjeWMuemFjeadpeivhuWIq+WFrOWFseaooeWdl++8mnNjb3BlIOi/mOayoeWumu+8iOingSBST0FETUFQIOeahCBTMWHvvInvvIxcclxuICog5o2i5LiqIHNjb3BlIOWwseiupOS4jeWHuuadpeS6huOAglxyXG4gKi9cclxuZnVuY3Rpb24gcXVlcnlTaGFyZWRTdGF0ZShmb3JjZVJlZ2lzdHJ5ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgY29uc3QgbWFuaWZlc3QgPSByZWFkUHJvamVjdE1hbmlmZXN0KHJvb3QpO1xyXG4gICAgY29uc3QgcHJvamVjdERlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICAgICAgLi4uKG1hbmlmZXN0Py5kZXZEZXBlbmRlbmNpZXMgPz8ge30pLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzaGFyZWREaXIgPSBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXIocm9vdCk7XHJcbiAgICBjb25zdCBsb2NhbCA9IHNoYXJlZERpciA/IGxpc3RMb2NhbENhdGFsb2coc2hhcmVkRGlyLCByb290KSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IGluc3RhbGxlZFNoYXJlZDogSVNoYXJlZENhdGFsb2dFbnRyeVtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMocHJvamVjdERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpZiAocGtnLmluc3RhbGxlZCAmJiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCkpIHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkU2hhcmVkLnB1c2goY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZChuYW1lLCBwa2cubWFuaWZlc3QsIHBrZy52ZXJzaW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcXVlcnlSZWdpc3RyeShmb3JjZVJlZ2lzdHJ5KTtcclxuICAgIGNvbnN0IGNhdGFsb2cgPSBtZXJnZUNhdGFsb2cobWVyZ2VDYXRhbG9nKGxvY2FsLCByZWdpc3RyeS5lbnRyaWVzKSwgaW5zdGFsbGVkU2hhcmVkKTtcclxuXHJcbiAgICAvLyBcIuWPr+abtOaWsFwi6KaB6Z2g6L+c56iL55qE5pyA5paw54mI5pys5Y+377yM6ICMIG1lcmdlQ2F0YWxvZyDorqnmnKzlnLDpobnkvJjlhYjvvIjlkIzlkI3nmoTov5znqIvpobnkvJrooqvnm5bmjonvvInvvIxcclxuICAgIC8vIOaJgOS7pei/memHjOWNleeLrOeVmeS4gOS7veWMheWQjSAtPiDov5znqIvmnIDmlrDniYjmnKzjgIJcclxuICAgIGNvbnN0IHJlZ2lzdHJ5VmVyc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVnaXN0cnkuZW50cmllcykge1xyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnNbZW50cnkubmFtZV0gPSBlbnRyeS52ZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOimgeafpeWunuaXtueKtuaAgeeahOWMhSA9IOWIl+ihqOmHjOeahCArIOWug+S7rOWjsOaYjueahOS+nei1luOAglxyXG4gICAgLy8g5L6d6LWW5Y+v6IO95LiN5Zyo5YiX6KGo6YeM77yI5pmu6YCaIG5wbSDljIXvvInvvIzkvYblroPoo4XmsqHoo4XlkIzmoLfopoHmmL7npLrlh7rmnaXjgIJcclxuICAgIGNvbnN0IHdhbnRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjYXRhbG9nKSB7XHJcbiAgICAgICAgd2FudGVkLmFkZChlbnRyeS5uYW1lKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBPYmplY3Qua2V5cyhlbnRyeS5kZWNsYXJlZERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICAgICAgd2FudGVkLmFkZChkZXApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGluc3RhbGxlZFBhY2thZ2VzOiBSZWNvcmQ8c3RyaW5nLCBJSW5zdGFsbGVkUGFja2FnZVZpZXc+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygd2FudGVkKSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgbmFtZSk7XHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXNbbmFtZV0gPSB7XHJcbiAgICAgICAgICAgIGluc3RhbGxlZDogcGtnLmluc3RhbGxlZCxcclxuICAgICAgICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXHJcbiAgICAgICAgICAgIGlzU2hhcmVkTW9kdWxlOiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgIGNvbnN0IHNvdXJjZXMgPSB7IC4uLnNuYXAuZ2FtZXBsYXlTb3VyY2VzLCAuLi5zbmFwLm1hbmFnZXJTb3VyY2VzIH07XHJcblxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGNhdGFsb2cubWFwKChlbnRyeSkgPT4gYnVpbGRTaGFyZWRTdGF0dXMoZW50cnksIHtcclxuICAgICAgICBwcm9qZWN0RGVwZW5kZW5jaWVzLFxyXG4gICAgICAgIGluc3RhbGxlZFBhY2thZ2VzLFxyXG4gICAgICAgIHJlZmVyZW5jZXM6IHsgW2VudHJ5Lm5hbWVdOiBmaW5kUGFja2FnZVJlZnMoc291cmNlcywgZW50cnkubmFtZSkgfSxcclxuICAgICAgICBjYXRhbG9nLFxyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnMsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtb2R1bGVzLFxyXG4gICAgICAgIC8qKiDmnKzlnLDlronoo4XmupDvvJsqKuWPquacieacrOahhuaetueahOW8gOWPkeS7k+W6k+mHjOaJjemdniBudWxsKirvvIjpnaLlkJHnlKjmiLfnmoTlt6XnqIvph4zmsLjov5zmmK8gbnVsbO+8iSAqL1xyXG4gICAgICAgIGxvY2FsU291cmNlOiBzaGFyZWREaXIsXHJcbiAgICAgICAgLyoqIOW3peeoi+acieWPr+ivu+eahCBwYWNrYWdlLmpzb24g5ZCXICovXHJcbiAgICAgICAgaGFzTWFuaWZlc3Q6IG1hbmlmZXN0ICE9PSBudWxsLFxyXG4gICAgICAgIC8qKiDov5znqIvliJfooajmi4nlj5blpLHotKXnmoTljp/lm6DvvJvkuLogbnVsbCDooajnpLrov5nmrKHmmK/miJDlip/nmoTvvIjmiJbnlKjkuobnvJPlrZjvvIkgKi9cclxuICAgICAgICByZWdpc3RyeUVycm9yOiByZWdpc3RyeS5lcnJvcixcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDot5HkuIDmrKEgbnBt44CCXHJcbiAqXHJcbiAqIOWFqOeoiyoq5LiN5oqb5byC5bi4KirvvJrpgIDlh7rnoIHjgIFzdGRvdXTjgIFzdGRlcnLjgIHku6Xlj4ogc3Bhd24g6Ieq6Lqr55qE5aSx6LSl6YO95pS26L+bIElOcG1SdW5SZXN1bHRcclxuICog5Zue5Lyg57uZ6Z2i5p2/IOKAlOKAlCDnlKjmiLfopoHnnIvnmoTmmK8gbnBtIOiHquW3seivtOeahOivne+8jOiAjOS4jeaYr+S4gOWPpei9rOi/sOeahFwi5a6J6KOF5aSx6LSlXCLjgIJcclxuICovXHJcbmZ1bmN0aW9uIHJ1bk5wbShhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnLCBzcGVjczogc3RyaW5nW10pOiBJTnBtUnVuUmVzdWx0IHtcclxuICAgIGNvbnN0IHNwYXduU3BlYyA9IG5wbVNwYXduU3BlYyhhY3Rpb24sIHNwZWNzKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8gMS4gKirkuI3mjIflrpogZW5jb2RpbmcqKu+8muaLv+WIsOWOn+WniyBCdWZmZXIg6Ieq5bex6Kej56CB77yM5ZCm5YiZIGNtZCDnmoQgR0JLIOa2iOaBr+S8muWPmOS5seegge+8m1xyXG4gICAgICAgIC8vIDIuICoqd2luZG93c1ZlcmJhdGltQXJndW1lbnRzIOW/hemhu+adpeiHqiBzcGF3blNwZWMqKu+8muWwkeS6huWug++8jE5vZGUg5Lya5oqK5oiR5Yqg5aW955qEXHJcbiAgICAgICAgLy8gICAg5byV5Y+35YaN6L2s5LmJ5LiA6YGN77yMY21kIOaUtuWIsCBgXFxcIm5wbS5jbWQgaW5zdGFsbCAuLi5cXFwiYO+8jOS6juaYr+aVtOihjOiiq+W9k+aIkOWRveS7pOWQjVxyXG4gICAgICAgIC8vICAgIO+8iOaKpVwiJ25wbS5jbWQgaW5zdGFsbCAuLi4nIOS4jeaYr+WGhemDqOaIluWklumDqOWRveS7pFwi77yMbnBtIOagueacrOayoeiiq+WQr+WKqO+8ieOAglxyXG4gICAgICAgIGNvbnN0IHNwYXduZWQgPSBzcGF3blN5bmMoc3Bhd25TcGVjLmNvbW1hbmQsIHNwYXduU3BlYy5hcmdzLCB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvamVjdFBhdGgoKSxcclxuICAgICAgICAgICAgdGltZW91dDogTlBNX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICBtYXhCdWZmZXI6IDE2ICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogdHlwZW9mIHNwYXduZWQuc3RhdHVzID09PSAnbnVtYmVyJyA/IHNwYXduZWQuc3RhdHVzIDogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3Rkb3V0KSxcclxuICAgICAgICAgICAgc3RkZXJyOiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3RkZXJyKSxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogc3Bhd25lZC5lcnJvclxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogKHNwYXduZWQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHNwYXduZWQuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgY29tbWFuZDogZm9ybWF0TnBtQ29tbWFuZChhY3Rpb24sIHNwZWNzKSxcclxuICAgICAgICAgICAgZXhpdENvZGU6IG51bGwsXHJcbiAgICAgICAgICAgIHN0ZG91dDogJycsXHJcbiAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgIHNwYXduRXJyb3I6IHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDku6Pot5EgbnBtIOijhSAvIOWNuOS4gOS4quWFrOWFseaooeWdl++8jOeEtuWQjuWbnuS4gOS7veWIt+aWsOi/h+eahOeKtuaAgeOAglxyXG4gKlxyXG4gKiDlj6rmjqXlj5cgY2F0YWxvZyDph4zlrZjlnKjnmoTljIXlkI0g4oCU4oCUIOS4jeaKiuaJqeWxleWPmOaIkFwi5Lu75oSPIG5wbSDlkb3ku6TmiafooYzlmahcIuOAglxyXG4gKi9cclxuZnVuY3Rpb24gcnVuU2hhcmVkQWN0aW9uKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghcGFja2FnZU5hbWUgfHwgdHlwZW9mIHBhY2thZ2VOYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcign57y65bCR5YyF5ZCNJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmVmb3JlID0gcXVlcnlTaGFyZWRTdGF0ZSgpO1xyXG4gICAgY29uc3QgZW50cnkgPSBiZWZvcmUubW9kdWxlcy5maW5kKChtKSA9PiBtLm5hbWUgPT09IHBhY2thZ2VOYW1lKTtcclxuICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICBjb25zdCBrbm93biA9IGJlZm9yZS5tb2R1bGVzLm1hcCgobSkgPT4gbS5uYW1lKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGDkuI3lnKjlj6/lronoo4XliJfooajph4znmoTljIXvvJoke3BhY2thZ2VOYW1lfWBcclxuICAgICAgICAgICAgKyAoa25vd24ubGVuZ3RoID8gYO+8iOW9k+WJjeWIl+ihqO+8miR7a25vd24uam9pbignLCAnKX3vvIlgIDogJ++8iOW9k+WJjeWIl+ihqOS4uuepuu+8iScpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5a6J6KOF6KaB5oqKKirmnKzlnLDog73op6PmnpDliLDnmoTkvp3otZbkuIDotbfluKbkuIoqKu+8muWPquijheWug+S4gOS4queahOivne+8jG5wbSDkvJrljrsgcmVnaXN0cnkg5om+5L6d6LWW77yMXHJcbiAgICAvLyDogIzmnKzlnLDmupDph4znmoTkvp3otZblubbmsqHmnInlj5HluIMg4oCU4oCUIOW/heeEtiBFNDA077yI5a6e5rWL6L+H77yJ44CCXHJcbiAgICAvLyDljbjovb3mjIkqKuWMheWQjSoq77yIbnBtIOiupOWMheWQje+8jOS4jeiupCBmaWxlOiDor7TmmI7nrKbvvInjgIJcclxuICAgIGNvbnN0IHNwZWNzID0gYWN0aW9uID09PSAndW5pbnN0YWxsJ1xyXG4gICAgICAgID8gW2VudHJ5Lm5hbWVdXHJcbiAgICAgICAgOiBjb2xsZWN0SW5zdGFsbFNwZWNzKGVudHJ5LCBiZWZvcmUubW9kdWxlcyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBydW5OcG0oYWN0aW9uLCBzcGVjcyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKUqKuS4jeaKm+W8guW4uCoq77ya6Z2i5p2/6ZyA6KaB5ou/5Yiw57uT5p6E5YyW55qE57uT5p6c77yI5ZG95Luk44CB6YCA5Ye656CB44CB5Y6f5aeL6L6T5Ye677yJ77yMXHJcbiAgICAgICAgICog5omN6IO95Zyo5by556qX6YeM5Y6f5qC35bGV56S6IG5wbSDoh6rlt7Hor7TnmoTor53jgILpnZ7ms5XovpPlhaXku43nhLbmipsg4oCU4oCUIOmCo+aYr+iwg+eUqOaWueWGmemUmeS6huOAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9rOiByZXN1bHQub2ssXHJcbiAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOWksei0peaXtuS4gOWPpSoq5Y2V6KGMKirmkZjopoHvvIjpnaLmnb/mtojmga/ljLrnlKjvvInjgILlrozmlbTovpPlh7rlnKggYHJlc3VsdGAg6YeM77yM55Sx5by556qX5bGV56S6IOKAlOKAlFxyXG4gICAgICAgICAqIOS5i+WJjeaKiuaVtOautSBucG0g6L6T5Ye65aGe6L+b5raI5oGv5Yy677yM5Lya5oqK5Y+z5qCP5oyk5Y+Y5b2i5bm25ZKM5raI5oGv5Y+g5Zyo5LiA6LW344CCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm9rID8gbnVsbCA6IHN1bW1hcml6ZU5wbUZhaWx1cmUoYWN0aW9uLCBwYWNrYWdlTmFtZSwgcmVzdWx0KSxcclxuICAgICAgICAvLyDoo4Xlroznq4vliLvlm57kuIDku73mlrDnirbmgIHvvIzpnaLmnb/kuI3nlKjlho3ot5HkuIDmrKHmn6Xor6JcclxuICAgICAgICAuLi5xdWVyeVNoYXJlZFN0YXRlKCksXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiog6LWE5rqQ5piv5ZCm5a2Y5ZyoICovXHJcbmZ1bmN0aW9uIGFzc2V0RXhpc3RzKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCkudGhlbigoaW5mbzogdW5rbm93bikgPT4gISFpbmZvKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOehruS/neebruW9leWtmOWcqO+8jOS4jeWtmOWcqOWImeWIm+W7ulxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyKGRpclVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIGRpclVybCk7XHJcbiAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBkaXJVcmwsIG51bGwpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiog55uu5b2V5LiN5a2Y5Zyo5YiZ5bu677yM56m655uu5b2V5YiZ5Yig5o6J77yI55Sf5oiQL+WIoOmZpOWQjua4heeQhueUqO+8iSAqL1xyXG5hc3luYyBmdW5jdGlvbiBwcnVuZUVtcHR5RGlyKGFic0Rpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmIChzdGF0U3luYyhhYnNEaXIpLmlzRGlyZWN0b3J5KCkgJiYgcmVhZGRpclN5bmMoYWJzRGlyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmVtb3ZlU3luYyhhYnNEaXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvKiDkuI3lrZjlnKjlsLHnrpfkuoYgKi9cclxuICAgIH1cclxufVxyXG5cclxuLyoqIOaJvuWHuuW8leeUqOS6huaMh+WumiBjaWQg6ZuG5ZCI55qE5bey5bqP5YiX5YyW6LWE5rqQICovXHJcbmZ1bmN0aW9uIGZpbmRBc3NldFJlZnMoc25hcDogSVByb2plY3RTbmFwc2hvdCwgY2lkczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBoaXRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgaWYgKCFjaWRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBoaXRzO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCByZWwgb2YgT2JqZWN0LmtleXMoc25hcC5zZXJpYWxpemVkKSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBzbmFwLnNlcmlhbGl6ZWRbcmVsXTtcclxuICAgICAgICBpZiAoY2lkcy5zb21lKChjaWQpID0+IHRleHQuaW5jbHVkZXMoY2lkKSkpIHtcclxuICAgICAgICAgICAgaGl0cy5wdXNoKHJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhpdHM7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWueazlSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IG1ldGhvZHM6IHsgW2tleTogc3RyaW5nXTogKC4uLmFueTogYW55KSA9PiBhbnkgfSA9IHtcclxuICAgIC8qKlxyXG4gICAgICog5qGG5p625LiO5omp5bGV5ZCE6Ieq55qE54mI5pys5L+h5oGvKOacrOWcsCArIG5wbSDmnIDmlrAp44CCXHJcbiAgICAgKlxyXG4gICAgICog5omp5bGV6Ieq6Lqr54mI5pys6K+75a6D6Ieq5bex55qEIHBhY2thZ2UuanNvbjvmoYbmnrbniYjmnKzor7vlt6XnqIsgbm9kZV9tb2R1bGVzIOmHjOeahOmCo+S7vSDigJTigJRcclxuICAgICAqIOS4pOiAhemDveaYr1wi5a6e6ZmF6KOF5LqG5LuA5LmIXCLnmoTkuovlrp4s5LiN5piv6YWN572u6YeM5YaZ5LqG5LuA5LmI44CCXHJcbiAgICAgKiDmnInmsqHmnInmlrDniYjkuqTnu5npnaLmnb/mr5TovoMgdmVyc2lvbiDkuI4gbGF0ZXN0LOi/memHjOS4jeabv+Wug+WIpOaWrSjlhY3lvpfkuKTovrnlkITlhpnkuIDlpZcp44CCXHJcbiAgICAgKi9cclxuICAgIC8qKlxyXG4gICAgICog5oqKIG5vZGVfbW9kdWxlcyDph4znmoTmianlsZXmi7fov5sgZXh0ZW5zaW9ucy/jgIJcclxuICAgICAqXHJcbiAgICAgKiDnvJbovpHlmagqKuWPquS7juW3peeoi+eahCBleHRlbnNpb25zLyDliqDovb3mianlsZUqKizmiYDku6UgbnBtIGluc3RhbGwg5a6M5b+F6aG76JC96L+Z5LiA55uYLFxyXG4gICAgICog5ZCm5YiZXCLmm7TmlrDmiJDlip9cIuWPquWPkeeUn+WcqCBub2RlX21vZHVsZXMg6YeMLOe8lui+keWZqOmHjOS4gOeCueWPmOWMlumDveayoeacieOAglxyXG4gICAgICog6JC955uY5LmL5ZCO6ZyA6KaB6YeN5ZCv57yW6L6R5Zmo5omN55Sf5pWIIOKAlOKAlCDov5nkuIDngrnnlLHpnaLmnb/mlofmoYjlkYrnn6Us6L+Z6YeM5LiN5YGH6KOF54Ot5pu05paw44CCXHJcbiAgICAgKi9cclxuICAgIHN5bmNFeHRlbnNpb24obmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgZnJvbSA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXNcIiwgbmFtZSk7XHJcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKGZyb20pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgbWVzc2FnZTogXCJub2RlX21vZHVsZXMg6YeM5rKh5pyJIFwiICsgbmFtZSArIFwiLOWFiOWuieijheWGjeiQveebmFwiIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRvID0gam9pbihyb290LCBcImV4dGVuc2lvbnNcIiwgbmFtZS5zcGxpdChcIi9cIikucG9wKCkgYXMgc3RyaW5nKTtcclxuICAgICAgICByZW1vdmVTeW5jKHRvKTtcclxuICAgICAgICBjb3B5U3luYyhmcm9tLCB0byk7XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHBhdGg6IHRvIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHF1ZXJ5VmVyc2lvbnMoZm9yY2VSZWdpc3RyeSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE9mID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoaXQgPSByZWdpc3RyeS5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIGhpdCA/IGhpdC52ZXJzaW9uIDogbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBmcmFtZXdvcmtOYW1lID0gJ0BjY2dmL2ZyYW1ld29yayc7XHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgZnJhbWV3b3JrTmFtZSk7XHJcblxyXG4gICAgICAgIC8qKiDmnKzku5PlupPnmoTlvIDlj5Hlt6XkvZzljLo65qGG5p625piv5rqQ56CB44CB5omp5bGV5bCx5piv6L+Z5LiA5Lu9IOKAlOKAlCDpnaLmnb/mja7mraTmlLnnp7DlkbzlubbnpoHnlKjmm7TmlrAgKi9cclxuICAgICAgICBjb25zdCBpbldvcmtzcGFjZSA9IGV4aXN0c1N5bmMoam9pbihyb290LCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmcmFtZXdvcms6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGZyYW1ld29ya05hbWUsXHJcbiAgICAgICAgICAgICAgICBpbnN0YWxsZWQ6IGZyYW1ld29yay5pbnN0YWxsZWQsXHJcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6IGluV29ya3NwYWNlLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogZnJhbWV3b3JrLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKGZyYW1ld29ya05hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleHRlbnNpb246IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VKU09OLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwYWNrYWdlSlNPTi52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIGxhdGVzdDogbGF0ZXN0T2YocGFja2FnZUpTT04ubmFtZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBvcGVuV29ya2JlbmNoKCkge1xyXG4gICAgICAgIEVkaXRvci5QYW5lbC5vcGVuKGAke3BhY2thZ2VKU09OLm5hbWV9LndvcmtiZW5jaGApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6Z2i5p2/55qE5bGC57qn5LiL5ouJ55Sx5Li76L+b56iL5LiL5Y+R77yM6YG/5YWN5omp5bGV6YeM5Ye6546w56ys5LqM5Lu95bGC57qn5YiX6KGoICovXHJcbiAgICBxdWVyeUxheWVycygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5MQVlFUlNdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOmdouadv+aWh+ahiO+8muS7pSBpMThuL3poLmpzIOeahCBrZXkg5YWo6ZuG5Li65YeG77yM6YCQ5Liq5Lqk57uZ57yW6L6R5ZmoIGkxOG4g6Kej5p6Q5b2T5YmN6K+t6KiA44CCXHJcbiAgICAgKiDov5nmoLfpnaLmnb/kvqfkuI3pnIDopoHliKTmlq3or63oqIDvvIzkuZ/kuI3kvp3otZYgRWRpdG9yLkkxOG4g5piv5ZCm5a2Y5Zyo5LqO6Z2i5p2/5LiK5LiL5paH6YeM44CCXHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5STE4bigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB0YWJsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFpIX1NUUklOR1MpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGwgPSBgJHtwYWNrYWdlSlNPTi5uYW1lfS4ke2tleX1gO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9IFpIX1NUUklOR1Nba2V5XTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpdCA9IEVkaXRvci5JMThuLnQoZnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGl0ICYmIGhpdCAhPT0gZnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBoaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOe8lui+keWZqCBpMThuIOS4jeWPr+eUqOWwseS/neeVmeS4reaWhyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhYmxlW2tleV0gPSB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDpooTliLbkvZPmqKHmnb/liJfooajvvIjkvpvpnaLmnb/kuIvmi4nvvIkgKi9cclxuICAgIHF1ZXJ5VGVtcGxhdGVzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgcmV0dXJuIFBSRUZBQl9URU1QTEFURVMubWFwKChpZCkgPT4gKHsgaWQsIGxhYmVsOiBQUkVGQUJfVEVNUExBVEVfTEFCRUxTW2lkXSB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+iIGdhbWVwbGF5IOS4i+W3suacieeahOaooeWdl+WIl+ihqO+8iOWQqyBvcmRlcu+8ieOAglxyXG4gICAgICog5LiO5L2T5qOA5YWx55SoIGRvY3Rvci5saXN0TW9kdWxlc++8jOS/neivgemdouadv+aYvuekuuWSjOS9k+ajgOWIpOWumuS4gOiHtOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeU1vZHVsZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNb2R1bGVzKHNuYXApLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5kaXIsXHJcbiAgICAgICAgICAgIG9yZGVyOiBtLm9yZGVyID8/IDAsXHJcbiAgICAgICAgICAgIGhhc01vZGVsOiBtLm1vZGVsRmlsZSAhPT0gbnVsbCxcclxuICAgICAgICAgICAgaGFzTW9kdWxlOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyDpnaLmnb/nlKjov5nkuInkuKrot6/lvoTlgZrjgIzkuIDplK7miZPlvIDohJrmnKzjgI3vvJtldmVudHNGaWxlIOWPr+iDveS4uiBudWxs77yI6ICB5qih5Z2X77yJXHJcbiAgICAgICAgICAgIG1vZHVsZUZpbGU6IG0ubW9kdWxlRmlsZSxcclxuICAgICAgICAgICAgbW9kZWxGaWxlOiBtLm1vZGVsRmlsZSxcclxuICAgICAgICAgICAgZXZlbnRzRmlsZTogbS5ldmVudHNGaWxlLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWQr+WKqOmhuuW6j+mihOiniCArIOWxgue6p+WNoOeUqO+8iOW8gOWPkei+heWKqe+8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlPdmVydmlldygpIHtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKTtcclxuICAgICAgICBjb25zdCB1c2FnZSA9IExBWUVSUy5tYXAoKGxheWVyKSA9PiAoe1xyXG4gICAgICAgICAgICBsYXllcixcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLmZpbHRlcigodikgPT4gdi5yZWdpc3RlcmVkTGF5ZXIgPT09IGxheWVyKS5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGxpc3RNb2R1bGVzKHNuYXApO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9yZGVyOiBidWlsZE9yZGVyUGxhbihzbmFwKSxcclxuICAgICAgICAgICAgbGF5ZXJzOiB1c2FnZSxcclxuICAgICAgICAgICAgbW9kdWxlQ291bnQ6IG1vZHVsZXMubGVuZ3RoLFxyXG4gICAgICAgICAgICBtYW5hZ2VyQ291bnQ6IGxpc3RNYW5hZ2VycyhzbmFwKS5sZW5ndGgsXHJcbiAgICAgICAgICAgIHZpZXdDb3VudDogdmlld3MubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDkuIDplK7kvZPmo4AgKi9cclxuICAgIGFzeW5jIHJ1bkRvY3RvcigpOiBQcm9taXNlPHsgZmluZGluZ3M6IElGaW5kaW5nW107IHN1bW1hcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmRpbmdzID0gcnVuRG9jdG9yKHNuYXBzaG90KCksIExBWUVSUyk7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmluZGluZ3MpIHtcclxuICAgICAgICAgICAgc3VtbWFyeVtmLnNldmVyaXR5XSA9IChzdW1tYXJ5W2Yuc2V2ZXJpdHldID8/IDApICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZmluZGluZ3MsIHN1bW1hcnkgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6Lmn5DmqKHlnZfnmoQgVmlldyDliJfooajjgIJcclxuICAgICAqIOavlOaXp+WunueOsOWkmuS6hiBwcmVmYWJFeGlzdHMg4oCU4oCUIOaXp+eJiOaMiee6puWumuaLvCBVUkwg5Y205LuO5LiN5p+l55uY77yMXHJcbiAgICAgKiDkuo7mmK/igJzohJrmnKzlnKjjgIHpooTliLbkvZPkuKLkuobigJ3nmoQgVmlldyDkuZ/kvJrooqvliJflh7rmnaXvvIzngrnkuobmiY3lpLHotKXjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlWaWV3cyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICByZXR1cm4gbGlzdFZpZXdzKHNuYXApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpXHJcbiAgICAgICAgICAgIC5tYXAoKHYpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2LmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIHNjcmlwdFVybDogZGJVcmwodi5zY3JpcHRGaWxlKSxcclxuICAgICAgICAgICAgICAgIHByZWZhYlVybDogdi5yZWdpc3RlcmVkUGF0aCA/IGRiVXJsKGAke1JFU09VUkNFU19ESVJ9LyR7di5yZWdpc3RlcmVkUGF0aH0ucHJlZmFiYCkgOiAnJyxcclxuICAgICAgICAgICAgICAgIHByZWZhYkV4aXN0czogdi5yZWdpc3RlcmVkUGF0aCA/IHNuYXAucHJlZmFic0J5UmVzb3VyY2VQYXRoW3YucmVnaXN0ZXJlZFBhdGhdICE9PSB1bmRlZmluZWQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxheWVyOiB2LnJlZ2lzdGVyZWRMYXllciA/PyAnJyxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFuYWdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAvKiogbWFuYWdlciDliJfooajvvIhhc3NldHMvc2NyaXB0cy9tYW5hZ2VyIOS4i+ebtOWxnueahCAqTWFuYWdlci50c++8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlNYW5hZ2VycygpIHtcclxuICAgICAgICByZXR1cm4gbGlzdE1hbmFnZXJzKHNuYXBzaG90KCkpLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgIGZpbGU6IG0uc2NyaXB0RmlsZSxcclxuICAgICAgICAgICAgZXh0ZW5kc1NpbmdsZXRvbjogbS5leHRlbmRzU2luZ2xldG9uLFxyXG4gICAgICAgICAgICBiYXNlQ2xhc3M6IG0uYmFzZUNsYXNzLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7ogbWFuYWdlcu+8mueUn+aIkOS4gOS4que7p+aJv+ahhuaetiBBU2luZ2xldG9uIOeahOWFqOWxgOWNleS+i+iEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1hbmFnZXJOYW1lIOWQjeWtl++8jOWmgiBcImNvbmZpZ1wiIC8gXCJDb25maWdcIiAvIFwiQ29uZmlnTWFuYWdlclwiXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3QgZGlyVXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHtkaXJVcmx9LyR7Y2xhc3NOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHNjcmlwdFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYW5hZ2VyIOW3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOWug++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0Jywgc2NyaXB0VXJsLCBidWlsZE1hbmFnZXJTY3JpcHQoY2xhc3NOYW1lLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7ogbWFuYWdlciDlpLHotKU6ICR7c2NyaXB0VXJsfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRpclVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBzY3JpcHRVcmwsIGZpbGU6IGAke01BTkFHRVJfRElSfS8ke2NsYXNzTmFtZX0udHNgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDliKDpmaQgbWFuYWdlciDohJrmnKwgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsCBtYW5hZ2VyIOiEmuacrO+8miR7Y2xhc3NOYW1lfS50c2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke01BTkFHRVJfRElSfWApO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgcmVtb3ZlZDogc2NyaXB0VXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X5YmN55qE5byV55So5qOA5p+l77ya5ZOq5Lqb6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pys44CCXHJcbiAgICAgKiDpnaLmnb/lnKjnoa7orqTmoYbph4zlsZXnpLrvvIzpgb/lhY3liKDlroznlZnkuIvmgqznqbrlvJXnlKjjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVSZWZzKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdzID0gbGlzdFZpZXdzKHNuYXApLmZpbHRlcigodikgPT4gdi5tb2R1bGVEaXIgPT09IG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgY2lkcyA9IHZpZXdzLm1hcCgodikgPT4gc25hcC5zY3JpcHRDaWRzW3Yuc2NyaXB0RmlsZV0pLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVDaWQgPSBzbmFwLnNjcmlwdENpZHNbYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkubW9kdWxlQ2xhc3N9LnRzYF07XHJcbiAgICAgICAgY29uc3QgYWxsQ2lkcyA9IG1vZHVsZUNpZCA/IGNpZHMuY29uY2F0KFttb2R1bGVDaWRdKSA6IGNpZHM7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLm1hcCgodikgPT4gdi5jbGFzc05hbWUpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQnk6IGZpbmRBc3NldFJlZnMoc25hcCwgYWxsQ2lkcyksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWcqOe8lui+keWZqOmHjOaJk+W8gOafkOS4quW3peeoi+WGheaWh+S7tu+8iOS9k+ajgOe7k+aenC/mpoLop4jngrnlh7vlrprkvY3nlKjvvIkgKi9cclxuICAgIGFzeW5jIG9wZW5Tb3VyY2UocmVsUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFyZWxQYXRoIHx8IHJlbFBhdGguaW5jbHVkZXMoJy4uJykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTot6/lvoQ6IFwiJHtyZWxQYXRofVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGRiVXJsKHJlbFBhdGgpO1xyXG4gICAgICAgIC8vIOWFiOehruiupOi1hOa6kOWtmOWcqOS4lOW3suiiq+e8lui+keWZqOWvvOWFpe+8jOWGjeiwiOaJk+W8gO+8m+WQpuWImee7meWHuuaYjuehruWOn+WboFxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDotYTmupDkuI3lrZjlnKjmiJbmnKrooqvnvJbovpHlmajlr7zlhaU6ICR7cmVsUGF0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnb3Blbi1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu65qih5Z2X77ya55Sf5oiQIE1vZHVsZSArIE1vZGVsICsg5LqL5Lu25aOw5piOIOS4ieS4quiEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUg5qih5Z2X5ZCN77yM5aaCIFwiYmFnXCIgLyBcIkJhZ1wiIC8gXCJCYWdNb2R1bGVcIlxyXG4gICAgICogQHBhcmFtIG9yZGVyICAgICAg5qih5Z2X5ZCv5Yqo6aG65bqPXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmFtaW5nID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke25hbWluZy5kaXJ9YDtcclxuXHJcbiAgICAgICAgLy8g5YWI5p+l5a2Y5Zyo5oCn77yM57uZ5Ye65piO56Gu5Y6f5Zug77yI5pen54mI5Y+q5ZyoIGNyZWF0ZS1hc3NldCDov5Tlm57nqbrml7bor7TigJzlj6/og73lt7LlrZjlnKjigJ3vvIlcclxuICAgICAgICBjb25zdCBtb2R1bGVVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRzYDtcclxuICAgICAgICBjb25zdCBldmVudHNVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLmV2ZW50c05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kdWxlVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWdl+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kZWxVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qih5Z6L5bey5a2Y5Zyo77yaJHtuYW1pbmcubW9kZWxDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKGV2ZW50c1VybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuovku7blo7DmmI7lt7LlrZjlnKjvvJoke25hbWluZy5ldmVudHNOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIC8qKiDlt7LliJvlu7rmiJDlip/nmoTotYTmupDvvJvku7vkuIDmraXlpLHotKXml7bmjInpgIbluo/lm57mu5rvvIzpgb/lhY3nlZnkuIvljYrmiJDlk4EgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yUm9sbGJhY2sgPSBhc3luYyAodXJsOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgdXJsLCBjb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFhc3NldCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBjcmVhdGVkLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZG9uZSBvZiBjcmVhdGVkLnJldmVyc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIGRvbmUpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgbW9kdWxlRGlyVXJsKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBg5Yib5bu6JHtsYWJlbH3lpLHotKU6ICR7dXJsfSR7Y291bnQgPiAwID8gYO+8iOW3suWbnua7miAke2NvdW50fSDkuKrmlofku7bvvIlgIDogJyd9YCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhcclxuICAgICAgICAgICAgbW9kdWxlVXJsLCBidWlsZE1vZHVsZVNjcmlwdChuYW1pbmcubW9kdWxlQ2xhc3MsIG5hbWluZy5tb2RlbENsYXNzLCBvcmRlciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWdlycsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKG1vZGVsVXJsLCBidWlsZE1vZGVsU2NyaXB0KG5hbWluZy5tb2RlbENsYXNzLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCAn5qih5Z6LJyk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhldmVudHNVcmwsIGJ1aWxkRXZlbnRzU2NyaXB0KG5hbWluZy5kaXIsIG5hbWluZy5tb2R1bGVDbGFzcyksICfkuovku7blo7DmmI4nKTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRpck5hbWU6IG5hbWluZy5kaXIsXHJcbiAgICAgICAgICAgIHByZWZpeDogbmFtaW5nLnByZWZpeCxcclxuICAgICAgICAgICAgbW9kdWxlVXJsLFxyXG4gICAgICAgICAgICBtb2RlbFVybCxcclxuICAgICAgICAgICAgZXZlbnRzVXJsLFxyXG4gICAgICAgICAgICBvcmRlcixcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOabtOaWsOaooeWdl+eahCBvcmRlcu+8muWGmeWbniBNb2R1bGUg6ISa5pys55qEIEBSZWdpc3Rlck1vZHVsZSh7b3JkZXJ9KeOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVNb2R1bGVPcmRlcihtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcblxyXG4gICAgICAgIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmaWxlcyA9IHJlYWRkaXJTeW5jKG1vZHVsZURpclBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfnm67lvZU6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVGaWxlID0gZmlsZXMuZmluZCgoZikgPT4gZi5lbmRzV2l0aCgnTW9kdWxlLnRzJykpO1xyXG4gICAgICAgIGlmICghbW9kdWxlRmlsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsOaooeWdl+iEmuacrDogJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4obW9kdWxlRGlyUGF0aCwgbW9kdWxlRmlsZSk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvb3JkZXJcXHMqOlxccypcXGQrLywgYG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIGlmIChuZXdDb250ZW50ID09PSBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5pyq5ZyoICR7bW9kdWxlRmlsZX0g5Lit5om+5YiwIG9yZGVyIOWtl+autWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3cml0ZUZpbGVTeW5jKGZ1bGxQYXRoLCBuZXdDb250ZW50KTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKGAke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBtb2R1bGVOYW1lOiBtb2R1bGVEaXIsIG9yZGVyIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IFZpZXfvvJrlnKjmjIflrprmqKHlnZfkuIvnlJ/miJDohJrmnKwgKyDpooTliLbkvZPvvIzlubbmiorohJrmnKzmjILovb3liLDpooTliLbkvZPmoLnoioLngrnjgIJcclxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSDpooTliLbkvZPmqKHmnb/vvIzop4EgY29uc3RhbnRzLlBSRUZBQl9URU1QTEFURVNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVmlldyhtb2R1bGVOYW1lOiBzdHJpbmcsIHZpZXdOYW1lOiBzdHJpbmcsIGxheWVyOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcgPSAnZW1wdHknKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIUxBWUVSUy5pbmNsdWRlcyhsYXllciBhcyBhbnkpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5bGC57qnOiBcIiR7bGF5ZXJ9XCLvvIjlkIjms5XlgLzvvJoke0xBWUVSUy5qb2luKCcsICcpfe+8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzUHJlZmFiVGVtcGxhdGUodGVtcGxhdGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6aKE5Yi25L2T5qih5p2/OiBcIiR7dGVtcGxhdGV9XCLvvIjlkIjms5XlgLzvvJoke1BSRUZBQl9URU1QTEFURVMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlBhdGggPSB2aWV3UHJlZmFiUGF0aChtb2R1bGVEaXIsIGNsYXNzTmFtZSk7XHJcblxyXG4gICAgICAgIC8vIOi3qOaooeWdl+mHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8iFZpZXdNYW5hZ2VyIOaMieexu+WQjeWFqOWxgOafpeaJvu+8ie+8jOaPkOWJjeaMoeS9j1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNoID0gbGlzdFZpZXdzKHNuYXApLmZpbmQoXHJcbiAgICAgICAgICAgICh2KSA9PiB2LmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lICYmIHYubW9kdWxlRGlyICE9PSBtb2R1bGVEaXIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY2xhc2gpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYFZpZXcg5ZCN5a2XIFwiJHtjbGFzc05hbWV9XCIg5bey6KKr5qih5Z2XIFwiJHtjbGFzaC5tb2R1bGVEaXJ9XCIg5Y2g55So77ybYCArXHJcbiAgICAgICAgICAgICAgICBg5qGG5p625oyJ57G75ZCN5YWo5bGA5p+l5om+77yM6YeN5ZCN5Lya5Yqg6L296ZSZ6aKE5Yi25L2T77yM6K+35o2i5Liq5ZCN5a2XYCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHZpZXdzRGlyVXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcih2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke3ZpZXdzRGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmlldyDohJrmnKzlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0Q29udGVudCA9IGJ1aWxkVmlld1NjcmlwdChjbGFzc05hbWUsIHByZWZhYlBhdGgsIGxheWVyLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdEFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgc2NyaXB0Q29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXNjcmlwdEFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66ISa5pys5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZWZhYkRpclVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9YDtcclxuICAgICAgICBjb25zdCBwcmVmYWJVcmwgPSBgJHtwcmVmYWJEaXJVcmx9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihwcmVmYWJEaXJVcmwpO1xyXG5cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMocHJlZmFiVXJsKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6aKE5Yi25L2T5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnByZWZhYu+8iOW3suWbnua7muiEmuacrO+8jOWmgumcgOmHjeW7uuivt+WFiOWIoOmZpOivpSBWaWV377yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wcmVzc2VkVXVpZCA9IGNvbXByZXNzVXVpZChzY3JpcHRBc3NldC51dWlkKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGJ1aWxkVmlld1ByZWZhYihjbGFzc05hbWUsIGNvbXByZXNzZWRVdWlkLCB0ZW1wbGF0ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmYWJBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgcHJlZmFiVXJsLCBwcmVmYWJDb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVmYWJBc3NldCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7rpooTliLbkvZPlpLHotKU6ICR7cHJlZmFiVXJsfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyDlm57mu5rohJrmnKzvvIzpgb/lhY3nlZnkuIvigJzmnInohJrmnKzmsqHpooTliLbkvZPigJ3nmoTljYrmiJDlk4FcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0Jywgdmlld3NEaXJVcmwpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHByZWZhYkRpclVybCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBtb2R1bGVEaXIsIHNjcmlwdFVybCwgcHJlZmFiVXJsLCBwcmVmYWJQYXRoLCBsYXllciwgdGVtcGxhdGUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaQgdmlld++8muWPquWIoOiHqui6q++8iOiEmuacrCArIOmihOWItuS9kyArIOWQhOiHqiBtZXRh77yJ77yM5LiN56Kw5YW25LuW6LWE5rqQ44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVWaWV3TmFtZSh2aWV3TmFtZSk7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn0vJHtjbGFzc05hbWV9LnByZWZhYmA7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsZXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHVybCBvZiBbcHJlZmFiVXJsLCBzY3JpcHRVcmxdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkLnB1c2godXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5riF55CG56m655uu5b2V77yI5pen54mI5Lya55WZ5LiLIHJlc291cmNlcy92aWV3cy885qih5Z2XPiDov5nnp43nqbrlo7PvvIlcclxuICAgICAgICBhd2FpdCBwcnVuZUVtcHR5RGlyKGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBkZWxldGVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X77ya5YigIGdhbWVwbGF5LzzmqKHlnZc+LyDkuI4gcmVzb3VyY2VzL3ZpZXdzLzzmqKHlnZc+LyDkuKTkuKrnm67lvZXvvIjov57lkIwgbWV0Ye+8ieOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIEdBTUVQTEFZX0RJUiwgbW9kdWxlRGlyKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBSRVNPVVJDRVNfRElSLCAndmlld3MnLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBbcHJlZmFiRGlyUGF0aCwgbW9kdWxlRGlyUGF0aF0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3luYyhwKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOS4jeWtmOWcqOWImei3s+i/hyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3c2ApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChHQU1FUExBWV9ESVIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlRGlyLCByZW1vdmVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6LlhazlhbHmqKHlnZfvvJrmnKzlnLDlt6XkvZzljLogKyDlt7Llronoo4UgKyDov5znqIsgcmVnaXN0cnnjgIJcclxuICAgICAqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjpnaLmnb/nmoTjgIzliLfmlrDjgI3nlKjvvIlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlTaGFyZWRNb2R1bGVzKGZvcmNlPzogYm9vbGVhbikge1xyXG4gICAgICAgIHJldHVybiBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlID09PSB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlronoo4XkuIDkuKrlhazlhbHmqKHlnZfvvJoqKuebtOaOpeS7o+i3kSBgbnBtIGluc3RhbGxgKirjgIJcclxuICAgICAqIOWksei0peaXtuaKm+WHuueahOmUmeivr+mHjOW4puedgCBucG0g55qE5Y6f5aeL6L6T5Ye677yM6Z2i5p2/5Lya5Y6f5qC35bGV56S644CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ2luc3RhbGwnLCBwYWNrYWdlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDljbjovb3kuIDkuKrlhazlhbHmqKHlnZfvvJrnm7TmjqXku6Pot5EgYG5wbSB1bmluc3RhbGxgICovXHJcbiAgICBhc3luYyB1bmluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lKTtcclxuICAgIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCBUcmlnZ2VyZWQgb24gRXh0ZW5zaW9uIFN0YXJ0dXBcclxuICogQHpoIOaJqeWxleWQr+WKqOaXtuinpuWPkeeahOaWueazlVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoKSB7IH1cclxuXHJcbi8qKlxyXG4gKiBAZW4gTWV0aG9kIHRyaWdnZXJlZCB3aGVuIHVuaW5zdGFsbGluZyB0aGUgZXh0ZW5zaW9uXHJcbiAqIEB6aCDljbjovb3mianlsZXml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWQoKSB7IH1cclxuIl19
|
|
798
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQTI2QkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQWo3QjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQTBDO0FBQzFDLHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUlvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2IsT0FBTyxJQUFBLHlCQUFlLEVBQUMsV0FBVyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELHdFQUF3RTtBQUV4RTs7Ozs7R0FLRztBQUNILElBQUksYUFBYSxHQUFnRixJQUFJLENBQUM7QUFFdEc7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBYzs7SUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLElBQUksQ0FBQyxLQUFLLElBQUksYUFBYSxJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsRUFBRSxHQUFHLDZCQUFpQixFQUFFLENBQUM7UUFDeEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxrREFBa0Q7SUFDbEQsbURBQW1EO0lBQ25ELE1BQU0sT0FBTyxHQUEwQixFQUFFLENBQUM7SUFDMUMsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBRTlCLEtBQUssTUFBTSxJQUFJLElBQUkseUJBQWMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLFdBQVcsR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUEscUJBQVksRUFDMUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFBLG1CQUFRLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FDeEUsQ0FBQztRQUVGLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLE1BQXFCLENBQUM7UUFDMUIsSUFBSSxDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDekQsR0FBRyxFQUFFLFdBQVcsRUFBRTtnQkFDbEIsT0FBTyxFQUFFLHVCQUFjO2dCQUN2QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSTtnQkFDM0Isd0JBQXdCLEVBQUUsU0FBUyxDQUFDLHdCQUF3QjthQUMvRCxDQUFDLENBQUM7WUFDSCxNQUFNLEdBQUcsSUFBQSw0QkFBbUIsRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsTUFBTSxHQUFHLElBQUEsdUJBQWMsRUFBQztnQkFDcEIsT0FBTztnQkFDUCxRQUFRLEVBQUUsT0FBTyxPQUFPLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDcEUsTUFBTTtnQkFDTixNQUFNLEVBQUUsSUFBQSw0QkFBbUIsRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUMzQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0JBQ3JCLENBQUMsQ0FBQzt3QkFDRSxJQUFJLEVBQUcsT0FBTyxDQUFDLEtBQStCLENBQUMsSUFBSTt3QkFDbkQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTztxQkFDakM7b0JBQ0QsQ0FBQyxDQUFDLElBQUk7YUFDYixDQUFDLENBQUM7UUFDUCxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNoQixNQUFNLEdBQUcsSUFBQSx1QkFBYyxFQUFDO2dCQUNwQixPQUFPO2dCQUNQLFFBQVEsRUFBRSxJQUFJO2dCQUNkLE1BQU0sRUFBRSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTthQUM1RSxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFBLE1BQU0sQ0FBQyxJQUFJLG1DQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBQSxNQUFNLENBQUMsUUFBUSxtQ0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRixTQUFTO1FBQ2IsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUEsMEJBQWUsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLEtBQUs7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOztZQUMxQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RGLGFBQWEsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsS0FBSzs7SUFDM0MsTUFBTSxJQUFJLEdBQUcsV0FBVyxFQUFFLENBQUM7SUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBQSw2QkFBbUIsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxNQUFNLG1CQUFtQixtQ0FDbEIsQ0FBQyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxZQUFZLG1DQUFJLEVBQUUsQ0FBQyxHQUM5QixDQUFDLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGVBQWUsbUNBQUksRUFBRSxDQUFDLENBQ3ZDLENBQUM7SUFFRixNQUFNLFNBQVMsR0FBRyxJQUFBLDJDQUFpQyxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBQSwwQkFBZ0IsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVqRSxNQUFNLGVBQWUsR0FBMEIsRUFBRSxDQUFDO0lBQ2xELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7UUFDbEQsTUFBTSxHQUFHLEdBQUcsSUFBQSw4QkFBb0IsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUEsK0JBQXNCLEVBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDeEQsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFBLGtDQUF5QixFQUFDLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUEscUJBQVksRUFBQyxJQUFBLHFCQUFZLEVBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUVyRixxREFBcUQ7SUFDckQseUJBQXlCO0lBQ3pCLE1BQU0sZ0JBQWdCLEdBQTJCLEVBQUUsQ0FBQztJQUNwRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNqRCxDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLG9DQUFvQztJQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ2pDLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0saUJBQWlCLEdBQTBDLEVBQUUsQ0FBQztJQUNwRSxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUEsOEJBQW9CLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ3RCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztZQUN4QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsY0FBYyxFQUFFLElBQUEsK0JBQXNCLEVBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztTQUN2RCxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sT0FBTyxtQ0FBUSxJQUFJLENBQUMsZUFBZSxHQUFLLElBQUksQ0FBQyxjQUFjLENBQUUsQ0FBQztJQUVwRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDBCQUFpQixFQUFDLEtBQUssRUFBRTtRQUM1RCxtQkFBbUI7UUFDbkIsaUJBQWlCO1FBQ2pCLFVBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUEsd0JBQWUsRUFBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xFLE9BQU87UUFDUCxnQkFBZ0I7S0FDbkIsQ0FBQyxDQUFDLENBQUM7SUFFSixPQUFPO1FBQ0gsT0FBTztRQUNQLHFEQUFxRDtRQUNyRCxXQUFXLEVBQUUsU0FBUztRQUN0Qiw0QkFBNEI7UUFDNUIsV0FBVyxFQUFFLFFBQVEsS0FBSyxJQUFJO1FBQzlCLHlDQUF5QztRQUN6QyxhQUFhLEVBQUUsUUFBUSxDQUFDLEtBQUs7S0FDaEMsQ0FBQztBQUNOLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsTUFBTSxDQUFDLE1BQStCLEVBQUUsS0FBZTtJQUM1RCxNQUFNLFNBQVMsR0FBRyxJQUFBLHFCQUFZLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQztRQUNELDREQUE0RDtRQUM1RCxpRUFBaUU7UUFDakUseURBQXlEO1FBQ3pELHNEQUFzRDtRQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFBLHlCQUFTLEVBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3pELEdBQUcsRUFBRSxXQUFXLEVBQUU7WUFDbEIsT0FBTyxFQUFFLHVCQUFjO1lBQ3ZCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFNBQVMsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFDM0Isd0JBQXdCLEVBQUUsU0FBUyxDQUFDLHdCQUF3QjtTQUMvRCxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUEsdUJBQWMsRUFBQztZQUNsQixPQUFPLEVBQUUsSUFBQSx5QkFBZ0IsRUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3BFLE1BQU0sRUFBRSxJQUFBLDRCQUFtQixFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDM0MsTUFBTSxFQUFFLElBQUEsNEJBQW1CLEVBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUMzQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3JCLENBQUMsQ0FBQztvQkFDRSxJQUFJLEVBQUcsT0FBTyxDQUFDLEtBQStCLENBQUMsSUFBSTtvQkFDbkQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTztpQkFDakM7Z0JBQ0QsQ0FBQyxDQUFDLElBQUk7U0FDYixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUNoQixPQUFPLElBQUEsdUJBQWMsRUFBQztZQUNsQixPQUFPLEVBQUUsSUFBQSx5QkFBZ0IsRUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFLEVBQUU7WUFDVixNQUFNLEVBQUUsRUFBRTtZQUNWLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtTQUM1RSxDQUFDLENBQUM7SUFDUCxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxNQUErQixFQUFFLFdBQW1CO0lBQ3pFLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQ1gsY0FBYyxXQUFXLEVBQUU7Y0FDekIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQy9ELENBQUM7SUFDTixDQUFDO0lBRUQscURBQXFEO0lBQ3JELGlDQUFpQztJQUNqQyxtQ0FBbUM7SUFDbkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxLQUFLLFdBQVc7UUFDaEMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxJQUFBLDRCQUFtQixFQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyQztRQUNJOzs7V0FHRztRQUNILEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUNiLE1BQU07UUFDTjs7O1dBR0c7UUFDSCxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLDRCQUFtQixFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLElBRXpFLGdCQUFnQixFQUFFLEVBQ3ZCO0FBQ04sQ0FBQztBQUVELGFBQWE7QUFDYixTQUFTLFdBQVcsQ0FBQyxHQUFXO0lBQzVCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZHLENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxTQUFTLENBQUMsTUFBYztJQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7QUFDTCxDQUFDO0FBRUQsZ0NBQWdDO0FBQ2hDLEtBQUssVUFBVSxhQUFhLENBQUMsTUFBYztJQUN2QyxJQUFJLENBQUM7UUFDRCxJQUFJLElBQUEsbUJBQVEsRUFBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFBLHNCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JFLElBQUEscUJBQVUsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDVCxZQUFZO0lBQ2hCLENBQUM7QUFDTCxDQUFDO0FBRUQsNEJBQTRCO0FBQzVCLFNBQVMsYUFBYSxDQUFDLElBQXNCLEVBQUUsSUFBYztJQUN6RCxNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7SUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsMEVBQTBFO0FBRTdELFFBQUEsT0FBTyxHQUE0QztJQUM1RDs7Ozs7O09BTUc7SUFDSDs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQUMsSUFBWTtRQUN0QixNQUFNLElBQUksR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFBLHFCQUFVLEVBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwQixPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQzFFLENBQUM7UUFDRCxNQUFNLEVBQUUsR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFZLENBQUMsQ0FBQztRQUNyRSxJQUFBLHFCQUFVLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixJQUFBLG1CQUFRLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsYUFBYSxDQUFDLGFBQWEsR0FBRyxLQUFLO1FBQy9CLE1BQU0sSUFBSSxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQVksRUFBaUIsRUFBRTtZQUM3QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNsRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3BDLENBQUMsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLElBQUEsOEJBQW9CLEVBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTVELDhDQUE4QztRQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFBLHFCQUFVLEVBQUMsSUFBQSxXQUFJLEVBQUMsSUFBSSxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztRQUV2RSxPQUFPO1lBQ0gsU0FBUyxFQUFFO2dCQUNQLElBQUksRUFBRSxhQUFhO2dCQUNuQixTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7Z0JBQzlCLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQzFCLE1BQU0sRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDO2FBQ2xDO1lBQ0QsU0FBUyxFQUFFO2dCQUNQLElBQUksRUFBRSxzQkFBVyxDQUFDLElBQUk7Z0JBQ3RCLE9BQU8sRUFBRSxzQkFBVyxDQUFDLE9BQU87Z0JBQzVCLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixNQUFNLEVBQUUsUUFBUSxDQUFDLHNCQUFXLENBQUMsSUFBSSxDQUFDO2FBQ3JDO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFDRCxhQUFhO1FBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxzQkFBVyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxXQUFXO1FBQ1AsT0FBTyxDQUFDLEdBQUcsa0JBQU0sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTO1FBQ0wsTUFBTSxLQUFLLEdBQTJCLEVBQUUsQ0FBQztRQUN6QyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksR0FBRyxHQUFHLHNCQUFXLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUM7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDZixDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1QsdUJBQXVCO1lBQzNCLENBQUM7WUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLGNBQWM7UUFDVixPQUFPLDRCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsa0NBQXNCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxZQUFZO1FBQ2QsTUFBTSxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFBLG9CQUFXLEVBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7O1lBQUMsT0FBQSxDQUFDO2dCQUNqQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUc7Z0JBQ1gsS0FBSyxFQUFFLE1BQUEsQ0FBQyxDQUFDLEtBQUssbUNBQUksQ0FBQztnQkFDbkIsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSTtnQkFDOUIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsNkNBQTZDO2dCQUM3QyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7Z0JBQ3hCLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztnQkFDdEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO2FBQzNCLENBQUMsQ0FBQTtTQUFBLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsS0FBSyxDQUFDLGFBQWE7UUFDZixNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBRyxJQUFBLGtCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsa0JBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakMsS0FBSztZQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNsRixDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sT0FBTyxHQUFHLElBQUEsb0JBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxPQUFPO1lBQ0gsS0FBSyxFQUFFLElBQUEsdUJBQWMsRUFBQyxJQUFJLENBQUM7WUFDM0IsTUFBTSxFQUFFLEtBQUs7WUFDYixXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDM0IsWUFBWSxFQUFFLElBQUEscUJBQVksRUFBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO1lBQ3ZDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTTtTQUMxQixDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVc7SUFDWCxLQUFLLENBQUMsU0FBUzs7UUFDWCxNQUFNLFFBQVEsR0FBRyxJQUFBLGtCQUFTLEVBQUMsUUFBUSxFQUFFLEVBQUUsa0JBQU0sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMvQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFBLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLG1DQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBa0I7UUFDL0IsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLHNCQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsd0JBQWUsRUFBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFBLGtCQUFTLEVBQUMsSUFBSSxDQUFDO2FBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7YUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7O1lBQUMsT0FBQSxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLENBQUMsU0FBUztnQkFDakIsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUM5QixTQUFTLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcseUJBQWEsSUFBSSxDQUFDLENBQUMsY0FBYyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkYsWUFBWSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUNuRyxLQUFLLEVBQUUsTUFBQSxDQUFDLENBQUMsZUFBZSxtQ0FBSSxFQUFFO2FBQ2pDLENBQUMsQ0FBQTtTQUFBLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCwyRUFBMkU7SUFFM0UsMERBQTBEO0lBQzFELEtBQUssQ0FBQyxhQUFhO1FBQ2YsT0FBTyxJQUFBLHFCQUFZLEVBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTO1lBQ2pCLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVTtZQUNsQixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsZ0JBQWdCO1lBQ3BDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztTQUN6QixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQW1CO1FBQ25DLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxzQkFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLFdBQVcsYUFBYSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsNkJBQW9CLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcsUUFBUSx1QkFBVyxFQUFFLENBQUM7UUFDckMsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxNQUFNLElBQUksU0FBUyxLQUFLLENBQUM7UUFDOUMsSUFBSSxNQUFNLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxTQUFTLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3RDLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLElBQUEsOEJBQWtCLEVBQUMsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FDcEgsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyx1QkFBVyxJQUFJLFNBQVMsS0FBSyxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixLQUFLLENBQUMsYUFBYSxDQUFDLFdBQW1CO1FBQ25DLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxzQkFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsNkJBQW9CLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQUcsUUFBUSx1QkFBVyxJQUFJLFNBQVMsS0FBSyxDQUFDO1FBRXhELE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLFNBQVMsS0FBSyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwRSxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsUUFBUSx1QkFBVyxFQUFFLENBQUMsQ0FBQztRQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFrQjtRQUNwQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsc0JBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBZSxFQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBRyxJQUFBLGtCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyx3QkFBWSxJQUFJLFNBQVMsSUFBSSxJQUFBLHdCQUFlLEVBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQztRQUNoSCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUQsT0FBTztZQUNILEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BDLFlBQVksRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztTQUM3QyxDQUFDO0lBQ04sQ0FBQztJQUVELG1DQUFtQztJQUNuQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQWU7UUFDNUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixnQ0FBZ0M7UUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBa0IsRUFBRSxLQUFhO1FBQ2hELElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxzQkFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxVQUFVLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHdCQUFlLEVBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsTUFBTSxZQUFZLEdBQUcsUUFBUSx3QkFBWSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUUxRCwrQ0FBK0M7UUFDL0MsTUFBTSxTQUFTLEdBQUcsR0FBRyxZQUFZLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxDQUFDO1FBQzdELE1BQU0sUUFBUSxHQUFHLEdBQUcsWUFBWSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBRyxHQUFHLFlBQVksSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLENBQUM7UUFDNUQsSUFBSSxNQUFNLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxNQUFNLENBQUMsV0FBVyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxJQUFJLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLE1BQU0sQ0FBQyxVQUFVLG1CQUFtQixDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELElBQUksTUFBTSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsTUFBTSxDQUFDLFVBQVUsbUJBQW1CLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsTUFBTSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFOUIsbUNBQW1DO1FBQ25DLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUM3QixNQUFNLGdCQUFnQixHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsT0FBZSxFQUFFLEtBQWEsRUFBaUIsRUFBRTtZQUMxRixNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUN0QyxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQ2pFLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDN0IsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztvQkFDbkMsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUYsQ0FBQztnQkFDRCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQ1gsS0FBSyxLQUFLLE9BQU8sR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNqRSxDQUFDO1lBQ04sQ0FBQztZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxnQkFBZ0IsQ0FDbEIsU0FBUyxFQUFFLElBQUEsNkJBQWlCLEVBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUMxRyxDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBQSw0QkFBZ0IsRUFBQyxNQUFNLENBQUMsVUFBVSxFQUFFLG1CQUFtQixFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRyxNQUFNLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFBLDZCQUFpQixFQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTdGLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV4RSxPQUFPO1lBQ0gsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1lBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixTQUFTO1lBQ1QsUUFBUTtZQUNSLFNBQVM7WUFDVCxLQUFLO1NBQ1IsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxVQUFrQixFQUFFLEtBQWE7UUFDckQsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLHNCQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUEsd0JBQWUsRUFBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsSUFBQSxXQUFJLEVBQUMsV0FBVyxFQUFFLEVBQUUsd0JBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVuRSxJQUFJLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDO1lBQ0QsS0FBSyxHQUFHLElBQUEsc0JBQVcsRUFBQyxhQUFhLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUEsV0FBSSxFQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFBLHVCQUFZLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksVUFBVSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxVQUFVLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxJQUFBLHdCQUFhLEVBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsR0FBRyx3QkFBWSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFrQixFQUFFLFFBQWdCLEVBQUUsS0FBYSxFQUFFLFdBQW1CLE9BQU87UUFDNUYsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLHNCQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxzQkFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxRQUFRLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQU0sQ0FBQyxRQUFRLENBQUMsS0FBWSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxTQUFTLGtCQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUEsNEJBQWdCLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsUUFBUSxTQUFTLDRCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUEsd0JBQWUsRUFBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBQSwwQkFBaUIsRUFBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBRyxJQUFBLHVCQUFjLEVBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXhELHlDQUF5QztRQUN6QyxNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBRyxJQUFBLGtCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUM5QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQ2hFLENBQUM7UUFDRixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FDWCxZQUFZLFNBQVMsV0FBVyxLQUFLLENBQUMsU0FBUyxPQUFPO2dCQUN0RCwyQkFBMkIsQ0FDOUIsQ0FBQztRQUNOLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxRQUFRLHdCQUFZLElBQUksU0FBUyxJQUFJLHdCQUFZLEVBQUUsQ0FBQztRQUN4RSxNQUFNLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU3QixNQUFNLFNBQVMsR0FBRyxHQUFHLFdBQVcsSUFBSSxTQUFTLEtBQUssQ0FBQztRQUNuRCxJQUFJLE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLFNBQVMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBQSwyQkFBZSxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUMzRixNQUFNLFdBQVcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUM1QyxVQUFVLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQzdFLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsUUFBUSx5QkFBYSxVQUFVLFNBQVMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sU0FBUyxHQUFHLEdBQUcsWUFBWSxJQUFJLFNBQVMsU0FBUyxDQUFDO1FBQ3hELE1BQU0sU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTlCLElBQUksTUFBTSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNGLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxTQUFTLCtCQUErQixDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQztZQUNELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFBLDJCQUFlLEVBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQzVDLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FDN0UsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksU0FBUyxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCx5QkFBeUI7WUFDekIsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzRixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDdkUsTUFBTSxDQUFDLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUV2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDdkYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFrQixFQUFFLFFBQWdCO1FBQ2pELElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxzQkFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsc0JBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBZSxFQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFBLDBCQUFpQixFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sU0FBUyxHQUFHLFFBQVEseUJBQWEsVUFBVSxTQUFTLElBQUksU0FBUyxTQUFTLENBQUM7UUFDakYsTUFBTSxTQUFTLEdBQUcsUUFBUSx3QkFBWSxJQUFJLFNBQVMsSUFBSSx3QkFBWSxJQUFJLFNBQVMsS0FBSyxDQUFDO1FBRXRGLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUM3QixLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0UsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDUCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzlELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNMLENBQUM7UUFFRCx5Q0FBeUM7UUFDekMsTUFBTSxhQUFhLENBQUMsSUFBQSxXQUFJLEVBQUMsV0FBVyxFQUFFLEVBQUUseUJBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUU1RSxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsUUFBUSx5QkFBYSxVQUFVLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdEcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxHQUFHLHdCQUFZLElBQUksU0FBUyxJQUFJLHdCQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakgsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFrQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsc0JBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBZSxFQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVsRCxNQUFNLGFBQWEsR0FBRyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSx3QkFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUEsV0FBSSxFQUFDLFdBQVcsRUFBRSxFQUFFLHlCQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTdFLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUM3QixLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDO2dCQUNELElBQUksSUFBQSxtQkFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQzVCLElBQUEscUJBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQztvQkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1QsWUFBWTtZQUNoQixDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxRQUFRLHlCQUFhLFFBQVEsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsd0JBQVksQ0FBQyxDQUFDLENBQUM7UUFFL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsd0VBQXdFO0lBRXhFOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFlO1FBQ3BDLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQUMsV0FBbUI7UUFDekMsT0FBTyxlQUFlLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFdBQW1CO1FBQzNDLE9BQU8sZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0osQ0FBQztBQUVGOzs7R0FHRztBQUNILFNBQWdCLElBQUksS0FBSyxDQUFDO0FBRTFCOzs7R0FHRztBQUNILFNBQWdCLE1BQU0sS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxyXG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcclxuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IGNvcHlTeW5jLCBleGlzdHNTeW5jLCByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jLCByZW1vdmVTeW5jLCBzdGF0U3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQge1xyXG4gICAgR0FNRVBMQVlfRElSLFxyXG4gICAgTEFZRVJTLFxyXG4gICAgTUFOQUdFUl9ESVIsXHJcbiAgICBQUkVGQUJfVEVNUExBVEVTLFxyXG4gICAgUFJFRkFCX1RFTVBMQVRFX0xBQkVMUyxcclxuICAgIFJFR0lTVFJZX0NBQ0hFX01TLFxyXG4gICAgUkVTT1VSQ0VTX0RJUixcclxuICAgIFRQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFZJRVdTX1NVQkRJUixcclxufSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IGJ1aWxkT3JkZXJQbGFuLCBsaXN0TWFuYWdlcnMsIGxpc3RNb2R1bGVzLCBsaXN0Vmlld3MsIHJ1bkRvY3RvciB9IGZyb20gJy4vZG9jdG9yJztcclxuaW1wb3J0IHtcclxuICAgIElERU5USUZJRVJfUkUsXHJcbiAgICBub3JtYWxpemVNYW5hZ2VyTmFtZSxcclxuICAgIG5vcm1hbGl6ZU1vZHVsZSxcclxuICAgIG5vcm1hbGl6ZVZpZXdOYW1lLFxyXG4gICAgdmlld1ByZWZhYlBhdGgsXHJcbn0gZnJvbSAnLi9uYW1pbmcnO1xyXG5pbXBvcnQge1xyXG4gICAgY29sbGVjdFNuYXBzaG90LFxyXG4gICAgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyLFxyXG4gICAgbGlzdExvY2FsQ2F0YWxvZyxcclxuICAgIHJlYWRJbnN0YWxsZWRQYWNrYWdlLFxyXG4gICAgcmVhZFByb2plY3RNYW5pZmVzdCxcclxufSBmcm9tICcuL3Byb2plY3QnO1xyXG5pbXBvcnQge1xyXG4gICAgS05PV05fUEFDS0FHRVMsXHJcbiAgICBwYXJzZVZpZXdSZXN1bHQsXHJcbiAgICB2aWV3QXJndixcclxufSBmcm9tICcuL3JlZ2lzdHJ5JztcclxuaW1wb3J0IHtcclxuICAgIE5QTV9USU1FT1VUX01TLFxyXG4gICAgYnVpbGROcG1SZXN1bHQsXHJcbiAgICBidWlsZFNoYXJlZFN0YXR1cyxcclxuICAgIGNhdGFsb2dFbnRyeUZyb21JbnN0YWxsZWQsXHJcbiAgICBjb2xsZWN0SW5zdGFsbFNwZWNzLFxyXG4gICAgZGVjb2RlUHJvY2Vzc091dHB1dCxcclxuICAgIGZpbmRQYWNrYWdlUmVmcyxcclxuICAgIGZvcm1hdE5wbUNvbW1hbmQsXHJcbiAgICBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0LFxyXG4gICAgbWVyZ2VDYXRhbG9nLFxyXG4gICAgbnBtU3Bhd25TcGVjLFxyXG4gICAgc3Bhd25TcGVjRm9yLFxyXG4gICAgc3VtbWFyaXplTnBtRmFpbHVyZSxcclxufSBmcm9tICcuL3NoYXJlZCc7XHJcbmltcG9ydCB7XHJcbiAgICBidWlsZE1hbmFnZXJTY3JpcHQsXHJcbiAgICBidWlsZEV2ZW50c1NjcmlwdCxcclxuICAgIGJ1aWxkTW9kZWxTY3JpcHQsXHJcbiAgICBidWlsZE1vZHVsZVNjcmlwdCxcclxuICAgIGJ1aWxkVmlld1ByZWZhYixcclxuICAgIGJ1aWxkVmlld1NjcmlwdCxcclxuICAgIGlzUHJlZmFiVGVtcGxhdGUsXHJcbiAgICBURnJhbWV3b3JrSW1wb3J0LH0gZnJvbSAnLi90ZW1wbGF0ZXMnO1xyXG5pbXBvcnQgeyBJRmluZGluZywgSU5wbVJ1blJlc3VsdCwgSUluc3RhbGxlZFBhY2thZ2VWaWV3LCBJUHJvamVjdFNuYXBzaG90LCBJU2hhcmVkQ2F0YWxvZ0VudHJ5IH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWh+ahiCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICog5omp5bGV6Ieq5bim55qE5Lit5paH5paH5qGI6KGo44CCXHJcbiAqIOWug+aXouaYr+OAjGtleSDlhajpm4bjgI3nmoTmnaXmupDvvIzkuZ/mmK/nvJbovpHlmaggaTE4biDmi7/kuI3liLDml7bnmoTlhZzlupXjgIJcclxuICovXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbmNvbnN0IFpIX1NUUklOR1M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSByZXF1aXJlKCcuLi9pMThuL3poLmpzJyk7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWwj+W3peWFtyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKiog5bel56iL5qC555uu5b2VICovXHJcbmZ1bmN0aW9uIHByb2plY3RQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRWRpdG9yLlByb2plY3QucGF0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi/meS4quW3peeoi+W8leeUqOahhuaetuivpeeUqOWTquenjeWGmeazlTpcclxuICogLSDlvIDlj5Hlt6XkvZzljLoo5LuT5bqT6YeMLOahhuaetua6kOeggeWcqCBhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsg5LiLKSAtPiDnm7jlr7not6/lvoRcclxuICogLSDoo4XmiJAgbnBtIOWMheeahOaWsOW3peeoiyAtPiDljIXlkI0gQGNjZ2YvZnJhbWV3b3JrXHJcbiAqXHJcbiAqIOWIpOaNruaYr1wi5qGG5p625rqQ56CB5Zyo5LiN5ZyoXCIs5LiOIGNvbnN0YW50cy50cyDnmoQgRlJBTUVXT1JLX0RFVl9ESVIg5ZCM5LiA5Liq5YC844CCXHJcbiAqL1xyXG5mdW5jdGlvbiBmcmFtZXdvcmtJbXBvcnRNb2RlKCk6IFRGcmFtZXdvcmtJbXBvcnQge1xyXG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoam9pbihwcm9qZWN0UGF0aCgpLCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpID8gJ3dvcmtzcGFjZScgOiAncGFja2FnZSc7XHJcbn1cclxuXHJcbi8qKiDnm7jlr7not6/lvoQgLT4gZGI6Ly8g6LWE5rqQIHVybCAqL1xyXG5mdW5jdGlvbiBkYlVybChyZWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ2RiOi8vJyArIHJlbC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcbn1cclxuXHJcbi8qKiB1dWlkIC0+IOmihOWItuS9k+mHjOiEmuacrOe7hOS7tueahCBfX3R5cGVfXyAqL1xyXG5mdW5jdGlvbiBjb21wcmVzc1V1aWQodXVpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuVXRpbHMuVVVJRC5jb21wcmVzc1VVSUQodXVpZCwgZmFsc2UpO1xyXG59XHJcblxyXG4vKiog5Y+W5LiA5Lu95bel56iL5b+r54Wn77yI5L2T5qOA44CB5YiX6KGo6YO95Z+65LqO5a6D77yM5L+d6K+B6Z2i5p2/55yL5Yiw55qE5ZKM5L2T5qOA55yL5Yiw55qE5piv5ZCM5LiA5Lu95pWw5o2u77yJICovXHJcbmZ1bmN0aW9uIHNuYXBzaG90KCk6IElQcm9qZWN0U25hcHNob3Qge1xyXG4gICAgcmV0dXJuIGNvbGxlY3RTbmFwc2hvdChwcm9qZWN0UGF0aCgpLCBjb21wcmVzc1V1aWQpO1xyXG59XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5YWs5YWx5qih5Z2XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIHJlZ2lzdHJ5IOaQnOe0oue7k+aenOeahOe8k+WtmOOAglxyXG4gKlxyXG4gKiDkuIDmrKHmkJzntKLlrp7mtYsgMX40IOenkiDigJTigJQg6ICM6Z2i5p2/5YiH6aG144CB6KOF5a6M5Yi35paw6YO95Lya6LCD55So5p+l6K+i77yM5LiN6IO95q+P5qyh6YO95Y675pCc44CCXHJcbiAqIOaYvuW8j+eCueOAjOWIt+aWsOOAjeaXtueUqCBgZm9yY2VgIOe7lei/h+Wug+OAglxyXG4gKi9cclxubGV0IHJlZ2lzdHJ5Q2FjaGU6IHsgYXQ6IG51bWJlcjsgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbCA9IG51bGw7XHJcblxyXG4vKipcclxuICogKirlpLHotKXkuI3mipvlvILluLgs5Lmf5LiN6K6p6Z2i5p2/56m6552A6KOF5L2cXCLmsqHmnInmqKHlnZdcIioqOuaKiuWOn+WboOS4gOi1t+WbnuS8oCzpnaLmnb/mmL7npLrmiJDmj5DnpLog4oCU4oCUXHJcbiAqIOi/meaYr+acgOWIneWwseWumuS4i+eahOimgeaxgihcIuayoeaciee9kee7nOWwseaPkOekuuWwseihjOS6hlwiKeOAglxyXG4gKlxyXG4gKiDov5znqIvkv6Hmga/nmoTmnaXmupA6KirpgJDkuKogYG5wbSB2aWV3IDxuYW1lPiAtLWpzb25gIOeyvuehruafpeivoioq44CCXHJcbiAqXHJcbiAqIOabvue7j+eUqCBgbnBtIHNlYXJjaGAgKyDlhbPplK7or40s5bey5bqf5byDIOKAlOKAlCDmkJzntKLlr7kgc2NvcGVkIOWMhShgQGNjZ2YvKmAp5b6I5LiN5Y+v6Z2gLFxyXG4gKiDluLjluLjmkJzkuI3liLAs5LqO5pivXCLlhazlhbHmqKHlnZfov5znqIvliJfooahcIuWSjFwi5pyA5paw54mI5pysXCLpg73kvJrmmK/nqbrnmoQo5a6e5rWL6Lip6L+HKeOAglxyXG4gKiDku6Pku7c65YyF5ZCN6KaB57u05oqk5ZyoIHJlZ2lzdHJ5LnRzIOeahCBLTk9XTl9QQUNLQUdFUyDph4ws5paw5aKe5YyF5pe25Yqg5LiA6KGM44CCXHJcbiAqXHJcbiAqIOS5i+aJgOS7peeUqCBucG0g5ZG95Luk6ICM5LiN5piv6Ieq5bex5Y+RIEhUVFBTIOivt+axgjpucG0g5Lya6Ieq5Yqo5bim5LiK5bel56iL55qEIGAubnBtcmNgXHJcbiAqICjnp4HmnInmupDjgIHplZzlg4/jgIHku6PnkIbnrYnphY3nva7pg73ot5/nnYDotbApLOS4jeeUqOaIkeS7rOmHjeWkjeWunueOsOS4gOmBjeOAglxyXG4gKi9cclxuZnVuY3Rpb24gcXVlcnlSZWdpc3RyeShmb3JjZTogYm9vbGVhbik6IHsgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHtcclxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICBpZiAoIWZvcmNlICYmIHJlZ2lzdHJ5Q2FjaGUgJiYgbm93IC0gcmVnaXN0cnlDYWNoZS5hdCA8IFJFR0lTVFJZX0NBQ0hFX01TKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogcmVnaXN0cnlDYWNoZS5lbnRyaWVzLCBlcnJvcjogcmVnaXN0cnlDYWNoZS5lcnJvciB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOaWueahiCBCOumAkOS4qioq57K+56Gu5p+l6K+iKios5LiN5YaN55SoIG5wbSBzZWFyY2jjgIJcclxuICAgIC8vIOaQnOe0ouWvuSBzY29wZWQg5YyFKEBjY2dmLyop5b6I5LiN5Y+v6Z2gLOW4uOW4uOaQnOS4jeWIsCDigJTigJQg6YKj5qC3XCLlhazlhbHmqKHlnZfov5znqIvliJfooahcIlxyXG4gICAgLy8g5ZKMXCLmnIDmlrDniYjmnKxcIumDveS8muaYr+epuueahOOAguWQjeWNleWcqCByZWdpc3RyeS50cyDnmoQgS05PV05fUEFDS0FHRVMg6YeM44CCXHJcbiAgICBjb25zdCBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBLTk9XTl9QQUNLQUdFUykge1xyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSAnbnBtIHZpZXcgJyArIG5hbWUgKyAnIC0tanNvbic7XHJcbiAgICAgICAgY29uc3Qgc3Bhd25TcGVjID0gc3Bhd25TcGVjRm9yKFxyXG4gICAgICAgICAgICBbcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICducG0uY21kJyA6ICducG0nLCAuLi52aWV3QXJndihuYW1lKV0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IHN0ZG91dCA9ICcnO1xyXG4gICAgICAgIGxldCByZXN1bHQ6IElOcG1SdW5SZXN1bHQ7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgc3Bhd25lZCA9IHNwYXduU3luYyhzcGF3blNwZWMuY29tbWFuZCwgc3Bhd25TcGVjLmFyZ3MsIHtcclxuICAgICAgICAgICAgICAgIGN3ZDogcHJvamVjdFBhdGgoKSxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IE5QTV9USU1FT1VUX01TLFxyXG4gICAgICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBtYXhCdWZmZXI6IDMyICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IHNwYXduU3BlYy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzdGRvdXQgPSBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3Rkb3V0KTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlOiB0eXBlb2Ygc3Bhd25lZC5zdGF0dXMgPT09ICdudW1iZXInID8gc3Bhd25lZC5zdGF0dXMgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3Rkb3V0LFxyXG4gICAgICAgICAgICAgICAgc3RkZXJyOiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3RkZXJyKSxcclxuICAgICAgICAgICAgICAgIHNwYXduRXJyb3I6IHNwYXduZWQuZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogKHNwYXduZWQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzcGF3bmVkLmVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3Rkb3V0OiAnJyxcclxuICAgICAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgICAgICBzcGF3bkVycm9yOiB7IG1lc3NhZ2U6IGVycj8ubWVzc2FnZSA/IFN0cmluZyhlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKSB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOWNleS4quWMheafpeS4jeWIsCjmsqHlj5HluIMgLyDnprvnur8p5LiN6K+l6K6p5pW05Lu95YiX6KGo5aSx6LSlLOWPquiusOS4i+adpVxyXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmFtZSArICc6JyArIChyZXN1bHQuaGludCA/PyAoJ+mAgOWHuueggSAnICsgKHJlc3VsdC5leGl0Q29kZSA/PyAn5pyq55+lJykpKSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbnRyeSA9IHBhcnNlVmlld1Jlc3VsdChzdGRvdXQpO1xyXG4gICAgICAgIGlmIChlbnRyeSkgZW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICBlbHNlIGZhaWx1cmVzLnB1c2gobmFtZSArICc66L+U5Zue5YaF5a655LiN5piv6aKE5pyf55qEIEpTT04g5b2i54q2Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb3IgPSBlbnRyaWVzLmxlbmd0aCA9PT0gMCAmJiBmYWlsdXJlcy5sZW5ndGggPiAwID8gZmFpbHVyZXMuam9pbignOycpIDogbnVsbDtcclxuICAgIHJlZ2lzdHJ5Q2FjaGUgPSB7IGF0OiBub3csIGVudHJpZXMsIGVycm9yIH07XHJcbiAgICByZXR1cm4geyBlbnRyaWVzLCBlcnJvciB9O1xyXG59XHJcblxyXG4vKipcclxuICog57uE6KOF5YWs5YWx5qih5Z2X55qE5a6M5pW054q25oCB44CCXHJcbiAqXHJcbiAqIOS4ieS4quadpea6kOWQiOi1t+adpeaJjeaYr+WujOaVtOWIl+ihqO+8mlxyXG4gKiAxLiDmnKzmoYbmnrYqKuW8gOWPkeW3peS9nOWMuioq6YeM55qEIGBwYWNrYWdlcy9zaGFyZWQvKmDvvIjlj6rmnInmnKzku5PlupPmiY3orqTvvIzop4FcclxuICogICAgYGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0RpcmDvvInigJTigJQg6IO957uZ5Ye6IGBmaWxlOmAg5a6J6KOF6K+05piO56ym77ybXHJcbiAqIDIuIGBub2RlX21vZHVsZXNgIOmHjOW3sue7j+ijheS6hueahO+8iOmdoOWMhea4heWNlemHjOeahOagh+iusOiupOWHuuadpe+8ie+8m1xyXG4gKiAzLiAqKui/nOeoiyByZWdpc3RyeSoq77yI5oyJ5Y+R546w5YWz6ZSu6K+N5pCc57Si77yJ4oCU4oCUIOimhuebllwi6L+Y5rKh6KOF44CB5L2G5Y+v5Lul6KOFXCLnmoTpgqPkupvjgIJcclxuICpcclxuICog5Yi75oSPKirkuI0qKumdoOWMheWQjeWMuemFjeadpeivhuWIq+WFrOWFseaooeWdl++8mnNjb3BlIOi/mOayoeWumu+8iOingSBST0FETUFQIOeahCBTMWHvvInvvIxcclxuICog5o2i5LiqIHNjb3BlIOWwseiupOS4jeWHuuadpeS6huOAglxyXG4gKi9cclxuZnVuY3Rpb24gcXVlcnlTaGFyZWRTdGF0ZShmb3JjZVJlZ2lzdHJ5ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgY29uc3QgbWFuaWZlc3QgPSByZWFkUHJvamVjdE1hbmlmZXN0KHJvb3QpO1xyXG4gICAgY29uc3QgcHJvamVjdERlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICAgICAgLi4uKG1hbmlmZXN0Py5kZXZEZXBlbmRlbmNpZXMgPz8ge30pLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzaGFyZWREaXIgPSBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXIocm9vdCk7XHJcbiAgICBjb25zdCBsb2NhbCA9IHNoYXJlZERpciA/IGxpc3RMb2NhbENhdGFsb2coc2hhcmVkRGlyLCByb290KSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IGluc3RhbGxlZFNoYXJlZDogSVNoYXJlZENhdGFsb2dFbnRyeVtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMocHJvamVjdERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpZiAocGtnLmluc3RhbGxlZCAmJiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCkpIHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkU2hhcmVkLnB1c2goY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZChuYW1lLCBwa2cubWFuaWZlc3QsIHBrZy52ZXJzaW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcXVlcnlSZWdpc3RyeShmb3JjZVJlZ2lzdHJ5KTtcclxuICAgIGNvbnN0IGNhdGFsb2cgPSBtZXJnZUNhdGFsb2cobWVyZ2VDYXRhbG9nKGxvY2FsLCByZWdpc3RyeS5lbnRyaWVzKSwgaW5zdGFsbGVkU2hhcmVkKTtcclxuXHJcbiAgICAvLyBcIuWPr+abtOaWsFwi6KaB6Z2g6L+c56iL55qE5pyA5paw54mI5pys5Y+377yM6ICMIG1lcmdlQ2F0YWxvZyDorqnmnKzlnLDpobnkvJjlhYjvvIjlkIzlkI3nmoTov5znqIvpobnkvJrooqvnm5bmjonvvInvvIxcclxuICAgIC8vIOaJgOS7pei/memHjOWNleeLrOeVmeS4gOS7veWMheWQjSAtPiDov5znqIvmnIDmlrDniYjmnKzjgIJcclxuICAgIGNvbnN0IHJlZ2lzdHJ5VmVyc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVnaXN0cnkuZW50cmllcykge1xyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnNbZW50cnkubmFtZV0gPSBlbnRyeS52ZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOimgeafpeWunuaXtueKtuaAgeeahOWMhSA9IOWIl+ihqOmHjOeahCArIOWug+S7rOWjsOaYjueahOS+nei1luOAglxyXG4gICAgLy8g5L6d6LWW5Y+v6IO95LiN5Zyo5YiX6KGo6YeM77yI5pmu6YCaIG5wbSDljIXvvInvvIzkvYblroPoo4XmsqHoo4XlkIzmoLfopoHmmL7npLrlh7rmnaXjgIJcclxuICAgIGNvbnN0IHdhbnRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjYXRhbG9nKSB7XHJcbiAgICAgICAgd2FudGVkLmFkZChlbnRyeS5uYW1lKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBPYmplY3Qua2V5cyhlbnRyeS5kZWNsYXJlZERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICAgICAgd2FudGVkLmFkZChkZXApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGluc3RhbGxlZFBhY2thZ2VzOiBSZWNvcmQ8c3RyaW5nLCBJSW5zdGFsbGVkUGFja2FnZVZpZXc+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygd2FudGVkKSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgbmFtZSk7XHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXNbbmFtZV0gPSB7XHJcbiAgICAgICAgICAgIGluc3RhbGxlZDogcGtnLmluc3RhbGxlZCxcclxuICAgICAgICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXHJcbiAgICAgICAgICAgIGlzU2hhcmVkTW9kdWxlOiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgIGNvbnN0IHNvdXJjZXMgPSB7IC4uLnNuYXAuZ2FtZXBsYXlTb3VyY2VzLCAuLi5zbmFwLm1hbmFnZXJTb3VyY2VzIH07XHJcblxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGNhdGFsb2cubWFwKChlbnRyeSkgPT4gYnVpbGRTaGFyZWRTdGF0dXMoZW50cnksIHtcclxuICAgICAgICBwcm9qZWN0RGVwZW5kZW5jaWVzLFxyXG4gICAgICAgIGluc3RhbGxlZFBhY2thZ2VzLFxyXG4gICAgICAgIHJlZmVyZW5jZXM6IHsgW2VudHJ5Lm5hbWVdOiBmaW5kUGFja2FnZVJlZnMoc291cmNlcywgZW50cnkubmFtZSkgfSxcclxuICAgICAgICBjYXRhbG9nLFxyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnMsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtb2R1bGVzLFxyXG4gICAgICAgIC8qKiDmnKzlnLDlronoo4XmupDvvJsqKuWPquacieacrOahhuaetueahOW8gOWPkeS7k+W6k+mHjOaJjemdniBudWxsKirvvIjpnaLlkJHnlKjmiLfnmoTlt6XnqIvph4zmsLjov5zmmK8gbnVsbO+8iSAqL1xyXG4gICAgICAgIGxvY2FsU291cmNlOiBzaGFyZWREaXIsXHJcbiAgICAgICAgLyoqIOW3peeoi+acieWPr+ivu+eahCBwYWNrYWdlLmpzb24g5ZCXICovXHJcbiAgICAgICAgaGFzTWFuaWZlc3Q6IG1hbmlmZXN0ICE9PSBudWxsLFxyXG4gICAgICAgIC8qKiDov5znqIvliJfooajmi4nlj5blpLHotKXnmoTljp/lm6DvvJvkuLogbnVsbCDooajnpLrov5nmrKHmmK/miJDlip/nmoTvvIjmiJbnlKjkuobnvJPlrZjvvIkgKi9cclxuICAgICAgICByZWdpc3RyeUVycm9yOiByZWdpc3RyeS5lcnJvcixcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDot5HkuIDmrKEgbnBt44CCXHJcbiAqXHJcbiAqIOWFqOeoiyoq5LiN5oqb5byC5bi4KirvvJrpgIDlh7rnoIHjgIFzdGRvdXTjgIFzdGRlcnLjgIHku6Xlj4ogc3Bhd24g6Ieq6Lqr55qE5aSx6LSl6YO95pS26L+bIElOcG1SdW5SZXN1bHRcclxuICog5Zue5Lyg57uZ6Z2i5p2/IOKAlOKAlCDnlKjmiLfopoHnnIvnmoTmmK8gbnBtIOiHquW3seivtOeahOivne+8jOiAjOS4jeaYr+S4gOWPpei9rOi/sOeahFwi5a6J6KOF5aSx6LSlXCLjgIJcclxuICovXHJcbmZ1bmN0aW9uIHJ1bk5wbShhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnLCBzcGVjczogc3RyaW5nW10pOiBJTnBtUnVuUmVzdWx0IHtcclxuICAgIGNvbnN0IHNwYXduU3BlYyA9IG5wbVNwYXduU3BlYyhhY3Rpb24sIHNwZWNzKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8gMS4gKirkuI3mjIflrpogZW5jb2RpbmcqKu+8muaLv+WIsOWOn+WniyBCdWZmZXIg6Ieq5bex6Kej56CB77yM5ZCm5YiZIGNtZCDnmoQgR0JLIOa2iOaBr+S8muWPmOS5seegge+8m1xyXG4gICAgICAgIC8vIDIuICoqd2luZG93c1ZlcmJhdGltQXJndW1lbnRzIOW/hemhu+adpeiHqiBzcGF3blNwZWMqKu+8muWwkeS6huWug++8jE5vZGUg5Lya5oqK5oiR5Yqg5aW955qEXHJcbiAgICAgICAgLy8gICAg5byV5Y+35YaN6L2s5LmJ5LiA6YGN77yMY21kIOaUtuWIsCBgXFxcIm5wbS5jbWQgaW5zdGFsbCAuLi5cXFwiYO+8jOS6juaYr+aVtOihjOiiq+W9k+aIkOWRveS7pOWQjVxyXG4gICAgICAgIC8vICAgIO+8iOaKpVwiJ25wbS5jbWQgaW5zdGFsbCAuLi4nIOS4jeaYr+WGhemDqOaIluWklumDqOWRveS7pFwi77yMbnBtIOagueacrOayoeiiq+WQr+WKqO+8ieOAglxyXG4gICAgICAgIGNvbnN0IHNwYXduZWQgPSBzcGF3blN5bmMoc3Bhd25TcGVjLmNvbW1hbmQsIHNwYXduU3BlYy5hcmdzLCB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvamVjdFBhdGgoKSxcclxuICAgICAgICAgICAgdGltZW91dDogTlBNX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICBtYXhCdWZmZXI6IDE2ICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogdHlwZW9mIHNwYXduZWQuc3RhdHVzID09PSAnbnVtYmVyJyA/IHNwYXduZWQuc3RhdHVzIDogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3Rkb3V0KSxcclxuICAgICAgICAgICAgc3RkZXJyOiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3RkZXJyKSxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogc3Bhd25lZC5lcnJvclxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogKHNwYXduZWQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHNwYXduZWQuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgY29tbWFuZDogZm9ybWF0TnBtQ29tbWFuZChhY3Rpb24sIHNwZWNzKSxcclxuICAgICAgICAgICAgZXhpdENvZGU6IG51bGwsXHJcbiAgICAgICAgICAgIHN0ZG91dDogJycsXHJcbiAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgIHNwYXduRXJyb3I6IHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDku6Pot5EgbnBtIOijhSAvIOWNuOS4gOS4quWFrOWFseaooeWdl++8jOeEtuWQjuWbnuS4gOS7veWIt+aWsOi/h+eahOeKtuaAgeOAglxyXG4gKlxyXG4gKiDlj6rmjqXlj5cgY2F0YWxvZyDph4zlrZjlnKjnmoTljIXlkI0g4oCU4oCUIOS4jeaKiuaJqeWxleWPmOaIkFwi5Lu75oSPIG5wbSDlkb3ku6TmiafooYzlmahcIuOAglxyXG4gKi9cclxuZnVuY3Rpb24gcnVuU2hhcmVkQWN0aW9uKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghcGFja2FnZU5hbWUgfHwgdHlwZW9mIHBhY2thZ2VOYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcign57y65bCR5YyF5ZCNJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmVmb3JlID0gcXVlcnlTaGFyZWRTdGF0ZSgpO1xyXG4gICAgY29uc3QgZW50cnkgPSBiZWZvcmUubW9kdWxlcy5maW5kKChtKSA9PiBtLm5hbWUgPT09IHBhY2thZ2VOYW1lKTtcclxuICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICBjb25zdCBrbm93biA9IGJlZm9yZS5tb2R1bGVzLm1hcCgobSkgPT4gbS5uYW1lKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGDkuI3lnKjlj6/lronoo4XliJfooajph4znmoTljIXvvJoke3BhY2thZ2VOYW1lfWBcclxuICAgICAgICAgICAgKyAoa25vd24ubGVuZ3RoID8gYO+8iOW9k+WJjeWIl+ihqO+8miR7a25vd24uam9pbignLCAnKX3vvIlgIDogJ++8iOW9k+WJjeWIl+ihqOS4uuepuu+8iScpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5a6J6KOF6KaB5oqKKirmnKzlnLDog73op6PmnpDliLDnmoTkvp3otZbkuIDotbfluKbkuIoqKu+8muWPquijheWug+S4gOS4queahOivne+8jG5wbSDkvJrljrsgcmVnaXN0cnkg5om+5L6d6LWW77yMXHJcbiAgICAvLyDogIzmnKzlnLDmupDph4znmoTkvp3otZblubbmsqHmnInlj5HluIMg4oCU4oCUIOW/heeEtiBFNDA077yI5a6e5rWL6L+H77yJ44CCXHJcbiAgICAvLyDljbjovb3mjIkqKuWMheWQjSoq77yIbnBtIOiupOWMheWQje+8jOS4jeiupCBmaWxlOiDor7TmmI7nrKbvvInjgIJcclxuICAgIGNvbnN0IHNwZWNzID0gYWN0aW9uID09PSAndW5pbnN0YWxsJ1xyXG4gICAgICAgID8gW2VudHJ5Lm5hbWVdXHJcbiAgICAgICAgOiBjb2xsZWN0SW5zdGFsbFNwZWNzKGVudHJ5LCBiZWZvcmUubW9kdWxlcyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBydW5OcG0oYWN0aW9uLCBzcGVjcyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKUqKuS4jeaKm+W8guW4uCoq77ya6Z2i5p2/6ZyA6KaB5ou/5Yiw57uT5p6E5YyW55qE57uT5p6c77yI5ZG95Luk44CB6YCA5Ye656CB44CB5Y6f5aeL6L6T5Ye677yJ77yMXHJcbiAgICAgICAgICog5omN6IO95Zyo5by556qX6YeM5Y6f5qC35bGV56S6IG5wbSDoh6rlt7Hor7TnmoTor53jgILpnZ7ms5XovpPlhaXku43nhLbmipsg4oCU4oCUIOmCo+aYr+iwg+eUqOaWueWGmemUmeS6huOAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9rOiByZXN1bHQub2ssXHJcbiAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOWksei0peaXtuS4gOWPpSoq5Y2V6KGMKirmkZjopoHvvIjpnaLmnb/mtojmga/ljLrnlKjvvInjgILlrozmlbTovpPlh7rlnKggYHJlc3VsdGAg6YeM77yM55Sx5by556qX5bGV56S6IOKAlOKAlFxyXG4gICAgICAgICAqIOS5i+WJjeaKiuaVtOautSBucG0g6L6T5Ye65aGe6L+b5raI5oGv5Yy677yM5Lya5oqK5Y+z5qCP5oyk5Y+Y5b2i5bm25ZKM5raI5oGv5Y+g5Zyo5LiA6LW344CCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm9rID8gbnVsbCA6IHN1bW1hcml6ZU5wbUZhaWx1cmUoYWN0aW9uLCBwYWNrYWdlTmFtZSwgcmVzdWx0KSxcclxuICAgICAgICAvLyDoo4Xlroznq4vliLvlm57kuIDku73mlrDnirbmgIHvvIzpnaLmnb/kuI3nlKjlho3ot5HkuIDmrKHmn6Xor6JcclxuICAgICAgICAuLi5xdWVyeVNoYXJlZFN0YXRlKCksXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiog6LWE5rqQ5piv5ZCm5a2Y5ZyoICovXHJcbmZ1bmN0aW9uIGFzc2V0RXhpc3RzKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCkudGhlbigoaW5mbzogdW5rbm93bikgPT4gISFpbmZvKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOehruS/neebruW9leWtmOWcqO+8jOS4jeWtmOWcqOWImeWIm+W7ulxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyKGRpclVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIGRpclVybCk7XHJcbiAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBkaXJVcmwsIG51bGwpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiog55uu5b2V5LiN5a2Y5Zyo5YiZ5bu677yM56m655uu5b2V5YiZ5Yig5o6J77yI55Sf5oiQL+WIoOmZpOWQjua4heeQhueUqO+8iSAqL1xyXG5hc3luYyBmdW5jdGlvbiBwcnVuZUVtcHR5RGlyKGFic0Rpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmIChzdGF0U3luYyhhYnNEaXIpLmlzRGlyZWN0b3J5KCkgJiYgcmVhZGRpclN5bmMoYWJzRGlyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmVtb3ZlU3luYyhhYnNEaXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvKiDkuI3lrZjlnKjlsLHnrpfkuoYgKi9cclxuICAgIH1cclxufVxyXG5cclxuLyoqIOaJvuWHuuW8leeUqOS6huaMh+WumiBjaWQg6ZuG5ZCI55qE5bey5bqP5YiX5YyW6LWE5rqQICovXHJcbmZ1bmN0aW9uIGZpbmRBc3NldFJlZnMoc25hcDogSVByb2plY3RTbmFwc2hvdCwgY2lkczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBoaXRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgaWYgKCFjaWRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBoaXRzO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCByZWwgb2YgT2JqZWN0LmtleXMoc25hcC5zZXJpYWxpemVkKSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBzbmFwLnNlcmlhbGl6ZWRbcmVsXTtcclxuICAgICAgICBpZiAoY2lkcy5zb21lKChjaWQpID0+IHRleHQuaW5jbHVkZXMoY2lkKSkpIHtcclxuICAgICAgICAgICAgaGl0cy5wdXNoKHJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhpdHM7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWueazlSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IG1ldGhvZHM6IHsgW2tleTogc3RyaW5nXTogKC4uLmFueTogYW55KSA9PiBhbnkgfSA9IHtcclxuICAgIC8qKlxyXG4gICAgICog5qGG5p625LiO5omp5bGV5ZCE6Ieq55qE54mI5pys5L+h5oGvKOacrOWcsCArIG5wbSDmnIDmlrAp44CCXHJcbiAgICAgKlxyXG4gICAgICog5omp5bGV6Ieq6Lqr54mI5pys6K+75a6D6Ieq5bex55qEIHBhY2thZ2UuanNvbjvmoYbmnrbniYjmnKzor7vlt6XnqIsgbm9kZV9tb2R1bGVzIOmHjOeahOmCo+S7vSDigJTigJRcclxuICAgICAqIOS4pOiAhemDveaYr1wi5a6e6ZmF6KOF5LqG5LuA5LmIXCLnmoTkuovlrp4s5LiN5piv6YWN572u6YeM5YaZ5LqG5LuA5LmI44CCXHJcbiAgICAgKiDmnInmsqHmnInmlrDniYjkuqTnu5npnaLmnb/mr5TovoMgdmVyc2lvbiDkuI4gbGF0ZXN0LOi/memHjOS4jeabv+Wug+WIpOaWrSjlhY3lvpfkuKTovrnlkITlhpnkuIDlpZcp44CCXHJcbiAgICAgKi9cclxuICAgIC8qKlxyXG4gICAgICog5oqKIG5vZGVfbW9kdWxlcyDph4znmoTmianlsZXmi7fov5sgZXh0ZW5zaW9ucy/jgIJcclxuICAgICAqXHJcbiAgICAgKiDnvJbovpHlmagqKuWPquS7juW3peeoi+eahCBleHRlbnNpb25zLyDliqDovb3mianlsZUqKizmiYDku6UgbnBtIGluc3RhbGwg5a6M5b+F6aG76JC96L+Z5LiA55uYLFxyXG4gICAgICog5ZCm5YiZXCLmm7TmlrDmiJDlip9cIuWPquWPkeeUn+WcqCBub2RlX21vZHVsZXMg6YeMLOe8lui+keWZqOmHjOS4gOeCueWPmOWMlumDveayoeacieOAglxyXG4gICAgICog6JC955uY5LmL5ZCO6ZyA6KaB6YeN5ZCv57yW6L6R5Zmo5omN55Sf5pWIIOKAlOKAlCDov5nkuIDngrnnlLHpnaLmnb/mlofmoYjlkYrnn6Us6L+Z6YeM5LiN5YGH6KOF54Ot5pu05paw44CCXHJcbiAgICAgKi9cclxuICAgIHN5bmNFeHRlbnNpb24obmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgZnJvbSA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXNcIiwgbmFtZSk7XHJcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKGZyb20pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgbWVzc2FnZTogXCJub2RlX21vZHVsZXMg6YeM5rKh5pyJIFwiICsgbmFtZSArIFwiLOWFiOWuieijheWGjeiQveebmFwiIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRvID0gam9pbihyb290LCBcImV4dGVuc2lvbnNcIiwgbmFtZS5zcGxpdChcIi9cIikucG9wKCkgYXMgc3RyaW5nKTtcclxuICAgICAgICByZW1vdmVTeW5jKHRvKTtcclxuICAgICAgICBjb3B5U3luYyhmcm9tLCB0byk7XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHBhdGg6IHRvIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHF1ZXJ5VmVyc2lvbnMoZm9yY2VSZWdpc3RyeSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE9mID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoaXQgPSByZWdpc3RyeS5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIGhpdCA/IGhpdC52ZXJzaW9uIDogbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBmcmFtZXdvcmtOYW1lID0gJ0BjY2dmL2ZyYW1ld29yayc7XHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgZnJhbWV3b3JrTmFtZSk7XHJcblxyXG4gICAgICAgIC8qKiDmnKzku5PlupPnmoTlvIDlj5Hlt6XkvZzljLo65qGG5p625piv5rqQ56CB44CB5omp5bGV5bCx5piv6L+Z5LiA5Lu9IOKAlOKAlCDpnaLmnb/mja7mraTmlLnnp7DlkbzlubbnpoHnlKjmm7TmlrAgKi9cclxuICAgICAgICBjb25zdCBpbldvcmtzcGFjZSA9IGV4aXN0c1N5bmMoam9pbihyb290LCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmcmFtZXdvcms6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGZyYW1ld29ya05hbWUsXHJcbiAgICAgICAgICAgICAgICBpbnN0YWxsZWQ6IGZyYW1ld29yay5pbnN0YWxsZWQsXHJcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6IGluV29ya3NwYWNlLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogZnJhbWV3b3JrLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKGZyYW1ld29ya05hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleHRlbnNpb246IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VKU09OLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwYWNrYWdlSlNPTi52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIGxhdGVzdDogbGF0ZXN0T2YocGFja2FnZUpTT04ubmFtZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBvcGVuV29ya2JlbmNoKCkge1xyXG4gICAgICAgIEVkaXRvci5QYW5lbC5vcGVuKGAke3BhY2thZ2VKU09OLm5hbWV9LndvcmtiZW5jaGApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6Z2i5p2/55qE5bGC57qn5LiL5ouJ55Sx5Li76L+b56iL5LiL5Y+R77yM6YG/5YWN5omp5bGV6YeM5Ye6546w56ys5LqM5Lu95bGC57qn5YiX6KGoICovXHJcbiAgICBxdWVyeUxheWVycygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5MQVlFUlNdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOmdouadv+aWh+ahiO+8muS7pSBpMThuL3poLmpzIOeahCBrZXkg5YWo6ZuG5Li65YeG77yM6YCQ5Liq5Lqk57uZ57yW6L6R5ZmoIGkxOG4g6Kej5p6Q5b2T5YmN6K+t6KiA44CCXHJcbiAgICAgKiDov5nmoLfpnaLmnb/kvqfkuI3pnIDopoHliKTmlq3or63oqIDvvIzkuZ/kuI3kvp3otZYgRWRpdG9yLkkxOG4g5piv5ZCm5a2Y5Zyo5LqO6Z2i5p2/5LiK5LiL5paH6YeM44CCXHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5STE4bigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB0YWJsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFpIX1NUUklOR1MpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGwgPSBgJHtwYWNrYWdlSlNPTi5uYW1lfS4ke2tleX1gO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9IFpIX1NUUklOR1Nba2V5XTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpdCA9IEVkaXRvci5JMThuLnQoZnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGl0ICYmIGhpdCAhPT0gZnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBoaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOe8lui+keWZqCBpMThuIOS4jeWPr+eUqOWwseS/neeVmeS4reaWhyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhYmxlW2tleV0gPSB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDpooTliLbkvZPmqKHmnb/liJfooajvvIjkvpvpnaLmnb/kuIvmi4nvvIkgKi9cclxuICAgIHF1ZXJ5VGVtcGxhdGVzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgcmV0dXJuIFBSRUZBQl9URU1QTEFURVMubWFwKChpZCkgPT4gKHsgaWQsIGxhYmVsOiBQUkVGQUJfVEVNUExBVEVfTEFCRUxTW2lkXSB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+iIGdhbWVwbGF5IOS4i+W3suacieeahOaooeWdl+WIl+ihqO+8iOWQqyBvcmRlcu+8ieOAglxyXG4gICAgICog5LiO5L2T5qOA5YWx55SoIGRvY3Rvci5saXN0TW9kdWxlc++8jOS/neivgemdouadv+aYvuekuuWSjOS9k+ajgOWIpOWumuS4gOiHtOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeU1vZHVsZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNb2R1bGVzKHNuYXApLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5kaXIsXHJcbiAgICAgICAgICAgIG9yZGVyOiBtLm9yZGVyID8/IDAsXHJcbiAgICAgICAgICAgIGhhc01vZGVsOiBtLm1vZGVsRmlsZSAhPT0gbnVsbCxcclxuICAgICAgICAgICAgaGFzTW9kdWxlOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyDpnaLmnb/nlKjov5nkuInkuKrot6/lvoTlgZrjgIzkuIDplK7miZPlvIDohJrmnKzjgI3vvJtldmVudHNGaWxlIOWPr+iDveS4uiBudWxs77yI6ICB5qih5Z2X77yJXHJcbiAgICAgICAgICAgIG1vZHVsZUZpbGU6IG0ubW9kdWxlRmlsZSxcclxuICAgICAgICAgICAgbW9kZWxGaWxlOiBtLm1vZGVsRmlsZSxcclxuICAgICAgICAgICAgZXZlbnRzRmlsZTogbS5ldmVudHNGaWxlLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWQr+WKqOmhuuW6j+mihOiniCArIOWxgue6p+WNoOeUqO+8iOW8gOWPkei+heWKqe+8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlPdmVydmlldygpIHtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKTtcclxuICAgICAgICBjb25zdCB1c2FnZSA9IExBWUVSUy5tYXAoKGxheWVyKSA9PiAoe1xyXG4gICAgICAgICAgICBsYXllcixcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLmZpbHRlcigodikgPT4gdi5yZWdpc3RlcmVkTGF5ZXIgPT09IGxheWVyKS5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGxpc3RNb2R1bGVzKHNuYXApO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9yZGVyOiBidWlsZE9yZGVyUGxhbihzbmFwKSxcclxuICAgICAgICAgICAgbGF5ZXJzOiB1c2FnZSxcclxuICAgICAgICAgICAgbW9kdWxlQ291bnQ6IG1vZHVsZXMubGVuZ3RoLFxyXG4gICAgICAgICAgICBtYW5hZ2VyQ291bnQ6IGxpc3RNYW5hZ2VycyhzbmFwKS5sZW5ndGgsXHJcbiAgICAgICAgICAgIHZpZXdDb3VudDogdmlld3MubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDkuIDplK7kvZPmo4AgKi9cclxuICAgIGFzeW5jIHJ1bkRvY3RvcigpOiBQcm9taXNlPHsgZmluZGluZ3M6IElGaW5kaW5nW107IHN1bW1hcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmRpbmdzID0gcnVuRG9jdG9yKHNuYXBzaG90KCksIExBWUVSUyk7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmluZGluZ3MpIHtcclxuICAgICAgICAgICAgc3VtbWFyeVtmLnNldmVyaXR5XSA9IChzdW1tYXJ5W2Yuc2V2ZXJpdHldID8/IDApICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZmluZGluZ3MsIHN1bW1hcnkgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6Lmn5DmqKHlnZfnmoQgVmlldyDliJfooajjgIJcclxuICAgICAqIOavlOaXp+WunueOsOWkmuS6hiBwcmVmYWJFeGlzdHMg4oCU4oCUIOaXp+eJiOaMiee6puWumuaLvCBVUkwg5Y205LuO5LiN5p+l55uY77yMXHJcbiAgICAgKiDkuo7mmK/igJzohJrmnKzlnKjjgIHpooTliLbkvZPkuKLkuobigJ3nmoQgVmlldyDkuZ/kvJrooqvliJflh7rmnaXvvIzngrnkuobmiY3lpLHotKXjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlWaWV3cyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICByZXR1cm4gbGlzdFZpZXdzKHNuYXApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpXHJcbiAgICAgICAgICAgIC5tYXAoKHYpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2LmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIHNjcmlwdFVybDogZGJVcmwodi5zY3JpcHRGaWxlKSxcclxuICAgICAgICAgICAgICAgIHByZWZhYlVybDogdi5yZWdpc3RlcmVkUGF0aCA/IGRiVXJsKGAke1JFU09VUkNFU19ESVJ9LyR7di5yZWdpc3RlcmVkUGF0aH0ucHJlZmFiYCkgOiAnJyxcclxuICAgICAgICAgICAgICAgIHByZWZhYkV4aXN0czogdi5yZWdpc3RlcmVkUGF0aCA/IHNuYXAucHJlZmFic0J5UmVzb3VyY2VQYXRoW3YucmVnaXN0ZXJlZFBhdGhdICE9PSB1bmRlZmluZWQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxheWVyOiB2LnJlZ2lzdGVyZWRMYXllciA/PyAnJyxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFuYWdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAvKiogbWFuYWdlciDliJfooajvvIhhc3NldHMvc2NyaXB0cy9tYW5hZ2VyIOS4i+ebtOWxnueahCAqTWFuYWdlci50c++8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlNYW5hZ2VycygpIHtcclxuICAgICAgICByZXR1cm4gbGlzdE1hbmFnZXJzKHNuYXBzaG90KCkpLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgIGZpbGU6IG0uc2NyaXB0RmlsZSxcclxuICAgICAgICAgICAgZXh0ZW5kc1NpbmdsZXRvbjogbS5leHRlbmRzU2luZ2xldG9uLFxyXG4gICAgICAgICAgICBiYXNlQ2xhc3M6IG0uYmFzZUNsYXNzLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7ogbWFuYWdlcu+8mueUn+aIkOS4gOS4que7p+aJv+ahhuaetiBBU2luZ2xldG9uIOeahOWFqOWxgOWNleS+i+iEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1hbmFnZXJOYW1lIOWQjeWtl++8jOWmgiBcImNvbmZpZ1wiIC8gXCJDb25maWdcIiAvIFwiQ29uZmlnTWFuYWdlclwiXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3QgZGlyVXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHtkaXJVcmx9LyR7Y2xhc3NOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHNjcmlwdFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYW5hZ2VyIOW3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOWug++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0Jywgc2NyaXB0VXJsLCBidWlsZE1hbmFnZXJTY3JpcHQoY2xhc3NOYW1lLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7ogbWFuYWdlciDlpLHotKU6ICR7c2NyaXB0VXJsfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRpclVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBzY3JpcHRVcmwsIGZpbGU6IGAke01BTkFHRVJfRElSfS8ke2NsYXNzTmFtZX0udHNgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDliKDpmaQgbWFuYWdlciDohJrmnKwgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsCBtYW5hZ2VyIOiEmuacrO+8miR7Y2xhc3NOYW1lfS50c2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke01BTkFHRVJfRElSfWApO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgcmVtb3ZlZDogc2NyaXB0VXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X5YmN55qE5byV55So5qOA5p+l77ya5ZOq5Lqb6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pys44CCXHJcbiAgICAgKiDpnaLmnb/lnKjnoa7orqTmoYbph4zlsZXnpLrvvIzpgb/lhY3liKDlroznlZnkuIvmgqznqbrlvJXnlKjjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVSZWZzKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdzID0gbGlzdFZpZXdzKHNuYXApLmZpbHRlcigodikgPT4gdi5tb2R1bGVEaXIgPT09IG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgY2lkcyA9IHZpZXdzLm1hcCgodikgPT4gc25hcC5zY3JpcHRDaWRzW3Yuc2NyaXB0RmlsZV0pLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVDaWQgPSBzbmFwLnNjcmlwdENpZHNbYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkubW9kdWxlQ2xhc3N9LnRzYF07XHJcbiAgICAgICAgY29uc3QgYWxsQ2lkcyA9IG1vZHVsZUNpZCA/IGNpZHMuY29uY2F0KFttb2R1bGVDaWRdKSA6IGNpZHM7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLm1hcCgodikgPT4gdi5jbGFzc05hbWUpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQnk6IGZpbmRBc3NldFJlZnMoc25hcCwgYWxsQ2lkcyksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWcqOe8lui+keWZqOmHjOaJk+W8gOafkOS4quW3peeoi+WGheaWh+S7tu+8iOS9k+ajgOe7k+aenC/mpoLop4jngrnlh7vlrprkvY3nlKjvvIkgKi9cclxuICAgIGFzeW5jIG9wZW5Tb3VyY2UocmVsUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFyZWxQYXRoIHx8IHJlbFBhdGguaW5jbHVkZXMoJy4uJykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTot6/lvoQ6IFwiJHtyZWxQYXRofVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGRiVXJsKHJlbFBhdGgpO1xyXG4gICAgICAgIC8vIOWFiOehruiupOi1hOa6kOWtmOWcqOS4lOW3suiiq+e8lui+keWZqOWvvOWFpe+8jOWGjeiwiOaJk+W8gO+8m+WQpuWImee7meWHuuaYjuehruWOn+WboFxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDotYTmupDkuI3lrZjlnKjmiJbmnKrooqvnvJbovpHlmajlr7zlhaU6ICR7cmVsUGF0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnb3Blbi1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu65qih5Z2X77ya55Sf5oiQIE1vZHVsZSArIE1vZGVsICsg5LqL5Lu25aOw5piOIOS4ieS4quiEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUg5qih5Z2X5ZCN77yM5aaCIFwiYmFnXCIgLyBcIkJhZ1wiIC8gXCJCYWdNb2R1bGVcIlxyXG4gICAgICogQHBhcmFtIG9yZGVyICAgICAg5qih5Z2X5ZCv5Yqo6aG65bqPXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmFtaW5nID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke25hbWluZy5kaXJ9YDtcclxuXHJcbiAgICAgICAgLy8g5YWI5p+l5a2Y5Zyo5oCn77yM57uZ5Ye65piO56Gu5Y6f5Zug77yI5pen54mI5Y+q5ZyoIGNyZWF0ZS1hc3NldCDov5Tlm57nqbrml7bor7TigJzlj6/og73lt7LlrZjlnKjigJ3vvIlcclxuICAgICAgICBjb25zdCBtb2R1bGVVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRzYDtcclxuICAgICAgICBjb25zdCBldmVudHNVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLmV2ZW50c05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kdWxlVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWdl+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kZWxVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qih5Z6L5bey5a2Y5Zyo77yaJHtuYW1pbmcubW9kZWxDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKGV2ZW50c1VybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuovku7blo7DmmI7lt7LlrZjlnKjvvJoke25hbWluZy5ldmVudHNOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIC8qKiDlt7LliJvlu7rmiJDlip/nmoTotYTmupDvvJvku7vkuIDmraXlpLHotKXml7bmjInpgIbluo/lm57mu5rvvIzpgb/lhY3nlZnkuIvljYrmiJDlk4EgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yUm9sbGJhY2sgPSBhc3luYyAodXJsOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgdXJsLCBjb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFhc3NldCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBjcmVhdGVkLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZG9uZSBvZiBjcmVhdGVkLnJldmVyc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIGRvbmUpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgbW9kdWxlRGlyVXJsKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBg5Yib5bu6JHtsYWJlbH3lpLHotKU6ICR7dXJsfSR7Y291bnQgPiAwID8gYO+8iOW3suWbnua7miAke2NvdW50fSDkuKrmlofku7bvvIlgIDogJyd9YCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhcclxuICAgICAgICAgICAgbW9kdWxlVXJsLCBidWlsZE1vZHVsZVNjcmlwdChuYW1pbmcubW9kdWxlQ2xhc3MsIG5hbWluZy5tb2RlbENsYXNzLCBvcmRlciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWdlycsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKG1vZGVsVXJsLCBidWlsZE1vZGVsU2NyaXB0KG5hbWluZy5tb2RlbENsYXNzLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCAn5qih5Z6LJyk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhldmVudHNVcmwsIGJ1aWxkRXZlbnRzU2NyaXB0KG5hbWluZy5kaXIsIG5hbWluZy5tb2R1bGVDbGFzcyksICfkuovku7blo7DmmI4nKTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRpck5hbWU6IG5hbWluZy5kaXIsXHJcbiAgICAgICAgICAgIHByZWZpeDogbmFtaW5nLnByZWZpeCxcclxuICAgICAgICAgICAgbW9kdWxlVXJsLFxyXG4gICAgICAgICAgICBtb2RlbFVybCxcclxuICAgICAgICAgICAgZXZlbnRzVXJsLFxyXG4gICAgICAgICAgICBvcmRlcixcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOabtOaWsOaooeWdl+eahCBvcmRlcu+8muWGmeWbniBNb2R1bGUg6ISa5pys55qEIEBSZWdpc3Rlck1vZHVsZSh7b3JkZXJ9KeOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVNb2R1bGVPcmRlcihtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcblxyXG4gICAgICAgIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmaWxlcyA9IHJlYWRkaXJTeW5jKG1vZHVsZURpclBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfnm67lvZU6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVGaWxlID0gZmlsZXMuZmluZCgoZikgPT4gZi5lbmRzV2l0aCgnTW9kdWxlLnRzJykpO1xyXG4gICAgICAgIGlmICghbW9kdWxlRmlsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsOaooeWdl+iEmuacrDogJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4obW9kdWxlRGlyUGF0aCwgbW9kdWxlRmlsZSk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvb3JkZXJcXHMqOlxccypcXGQrLywgYG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIGlmIChuZXdDb250ZW50ID09PSBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5pyq5ZyoICR7bW9kdWxlRmlsZX0g5Lit5om+5YiwIG9yZGVyIOWtl+autWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3cml0ZUZpbGVTeW5jKGZ1bGxQYXRoLCBuZXdDb250ZW50KTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKGAke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBtb2R1bGVOYW1lOiBtb2R1bGVEaXIsIG9yZGVyIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IFZpZXfvvJrlnKjmjIflrprmqKHlnZfkuIvnlJ/miJDohJrmnKwgKyDpooTliLbkvZPvvIzlubbmiorohJrmnKzmjILovb3liLDpooTliLbkvZPmoLnoioLngrnjgIJcclxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSDpooTliLbkvZPmqKHmnb/vvIzop4EgY29uc3RhbnRzLlBSRUZBQl9URU1QTEFURVNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVmlldyhtb2R1bGVOYW1lOiBzdHJpbmcsIHZpZXdOYW1lOiBzdHJpbmcsIGxheWVyOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcgPSAnZW1wdHknKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIUxBWUVSUy5pbmNsdWRlcyhsYXllciBhcyBhbnkpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5bGC57qnOiBcIiR7bGF5ZXJ9XCLvvIjlkIjms5XlgLzvvJoke0xBWUVSUy5qb2luKCcsICcpfe+8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzUHJlZmFiVGVtcGxhdGUodGVtcGxhdGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6aKE5Yi25L2T5qih5p2/OiBcIiR7dGVtcGxhdGV9XCLvvIjlkIjms5XlgLzvvJoke1BSRUZBQl9URU1QTEFURVMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlBhdGggPSB2aWV3UHJlZmFiUGF0aChtb2R1bGVEaXIsIGNsYXNzTmFtZSk7XHJcblxyXG4gICAgICAgIC8vIOi3qOaooeWdl+mHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8iFZpZXdNYW5hZ2VyIOaMieexu+WQjeWFqOWxgOafpeaJvu+8ie+8jOaPkOWJjeaMoeS9j1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNoID0gbGlzdFZpZXdzKHNuYXApLmZpbmQoXHJcbiAgICAgICAgICAgICh2KSA9PiB2LmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lICYmIHYubW9kdWxlRGlyICE9PSBtb2R1bGVEaXIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY2xhc2gpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYFZpZXcg5ZCN5a2XIFwiJHtjbGFzc05hbWV9XCIg5bey6KKr5qih5Z2XIFwiJHtjbGFzaC5tb2R1bGVEaXJ9XCIg5Y2g55So77ybYCArXHJcbiAgICAgICAgICAgICAgICBg5qGG5p625oyJ57G75ZCN5YWo5bGA5p+l5om+77yM6YeN5ZCN5Lya5Yqg6L296ZSZ6aKE5Yi25L2T77yM6K+35o2i5Liq5ZCN5a2XYCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHZpZXdzRGlyVXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcih2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke3ZpZXdzRGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmlldyDohJrmnKzlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0Q29udGVudCA9IGJ1aWxkVmlld1NjcmlwdChjbGFzc05hbWUsIHByZWZhYlBhdGgsIGxheWVyLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdEFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgc2NyaXB0Q29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXNjcmlwdEFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66ISa5pys5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZWZhYkRpclVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9YDtcclxuICAgICAgICBjb25zdCBwcmVmYWJVcmwgPSBgJHtwcmVmYWJEaXJVcmx9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihwcmVmYWJEaXJVcmwpO1xyXG5cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMocHJlZmFiVXJsKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6aKE5Yi25L2T5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnByZWZhYu+8iOW3suWbnua7muiEmuacrO+8jOWmgumcgOmHjeW7uuivt+WFiOWIoOmZpOivpSBWaWV377yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wcmVzc2VkVXVpZCA9IGNvbXByZXNzVXVpZChzY3JpcHRBc3NldC51dWlkKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGJ1aWxkVmlld1ByZWZhYihjbGFzc05hbWUsIGNvbXByZXNzZWRVdWlkLCB0ZW1wbGF0ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmYWJBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgcHJlZmFiVXJsLCBwcmVmYWJDb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVmYWJBc3NldCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7rpooTliLbkvZPlpLHotKU6ICR7cHJlZmFiVXJsfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyDlm57mu5rohJrmnKzvvIzpgb/lhY3nlZnkuIvigJzmnInohJrmnKzmsqHpooTliLbkvZPigJ3nmoTljYrmiJDlk4FcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0Jywgdmlld3NEaXJVcmwpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHByZWZhYkRpclVybCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBtb2R1bGVEaXIsIHNjcmlwdFVybCwgcHJlZmFiVXJsLCBwcmVmYWJQYXRoLCBsYXllciwgdGVtcGxhdGUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaQgdmlld++8muWPquWIoOiHqui6q++8iOiEmuacrCArIOmihOWItuS9kyArIOWQhOiHqiBtZXRh77yJ77yM5LiN56Kw5YW25LuW6LWE5rqQ44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVWaWV3TmFtZSh2aWV3TmFtZSk7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn0vJHtjbGFzc05hbWV9LnByZWZhYmA7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsZXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHVybCBvZiBbcHJlZmFiVXJsLCBzY3JpcHRVcmxdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkLnB1c2godXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5riF55CG56m655uu5b2V77yI5pen54mI5Lya55WZ5LiLIHJlc291cmNlcy92aWV3cy885qih5Z2XPiDov5nnp43nqbrlo7PvvIlcclxuICAgICAgICBhd2FpdCBwcnVuZUVtcHR5RGlyKGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBkZWxldGVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X77ya5YigIGdhbWVwbGF5LzzmqKHlnZc+LyDkuI4gcmVzb3VyY2VzL3ZpZXdzLzzmqKHlnZc+LyDkuKTkuKrnm67lvZXvvIjov57lkIwgbWV0Ye+8ieOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIEdBTUVQTEFZX0RJUiwgbW9kdWxlRGlyKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBSRVNPVVJDRVNfRElSLCAndmlld3MnLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBbcHJlZmFiRGlyUGF0aCwgbW9kdWxlRGlyUGF0aF0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3luYyhwKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOS4jeWtmOWcqOWImei3s+i/hyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3c2ApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChHQU1FUExBWV9ESVIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlRGlyLCByZW1vdmVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6LlhazlhbHmqKHlnZfvvJrmnKzlnLDlt6XkvZzljLogKyDlt7Llronoo4UgKyDov5znqIsgcmVnaXN0cnnjgIJcclxuICAgICAqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjpnaLmnb/nmoTjgIzliLfmlrDjgI3nlKjvvIlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlTaGFyZWRNb2R1bGVzKGZvcmNlPzogYm9vbGVhbikge1xyXG4gICAgICAgIHJldHVybiBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlID09PSB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlronoo4XkuIDkuKrlhazlhbHmqKHlnZfvvJoqKuebtOaOpeS7o+i3kSBgbnBtIGluc3RhbGxgKirjgIJcclxuICAgICAqIOWksei0peaXtuaKm+WHuueahOmUmeivr+mHjOW4puedgCBucG0g55qE5Y6f5aeL6L6T5Ye677yM6Z2i5p2/5Lya5Y6f5qC35bGV56S644CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ2luc3RhbGwnLCBwYWNrYWdlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDljbjovb3kuIDkuKrlhazlhbHmqKHlnZfvvJrnm7TmjqXku6Pot5EgYG5wbSB1bmluc3RhbGxgICovXHJcbiAgICBhc3luYyB1bmluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lKTtcclxuICAgIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCBUcmlnZ2VyZWQgb24gRXh0ZW5zaW9uIFN0YXJ0dXBcclxuICogQHpoIOaJqeWxleWQr+WKqOaXtuinpuWPkeeahOaWueazlVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoKSB7IH1cclxuXHJcbi8qKlxyXG4gKiBAZW4gTWV0aG9kIHRyaWdnZXJlZCB3aGVuIHVuaW5zdGFsbGluZyB0aGUgZXh0ZW5zaW9uXHJcbiAqIEB6aCDljbjovb3mianlsZXml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWQoKSB7IH1cclxuIl19
|
package/dist/registry.js
CHANGED
|
@@ -18,10 +18,12 @@
|
|
|
18
18
|
* | 一次大约 1~4 秒 | 调用方必须缓存,不能每次刷新面板都去搜 |
|
|
19
19
|
*/
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.REGISTRY_SEARCH_LIMIT = void 0;
|
|
21
|
+
exports.KNOWN_PACKAGES = exports.REGISTRY_SEARCH_LIMIT = void 0;
|
|
22
22
|
exports.npmSearchArgv = npmSearchArgv;
|
|
23
23
|
exports.formatNpmSearchCommand = formatNpmSearchCommand;
|
|
24
24
|
exports.parseSearchResults = parseSearchResults;
|
|
25
|
+
exports.viewArgv = viewArgv;
|
|
26
|
+
exports.parseViewResult = parseViewResult;
|
|
25
27
|
const constants_1 = require("./constants");
|
|
26
28
|
/** 一次搜索最多要多少条 */
|
|
27
29
|
exports.REGISTRY_SEARCH_LIMIT = 250;
|
|
@@ -94,4 +96,68 @@ function parseSearchResults(raw, keyword = constants_1.DISCOVERY_KEYWORD) {
|
|
|
94
96
|
}
|
|
95
97
|
return { entries, malformed: false };
|
|
96
98
|
}
|
|
97
|
-
|
|
99
|
+
/**
|
|
100
|
+
* 已知的、我们自己发布的包。
|
|
101
|
+
*
|
|
102
|
+
* **这里是手工维护的名单** —— 方案 B:不再依赖 `npm search`。
|
|
103
|
+
* 原因:npm 搜索对 scoped 包(`@ccgf/*`)很不可靠,常常搜不到,
|
|
104
|
+
* 于是"公共模块远程列表"和使用者看到的"最新版本"都会是空的。
|
|
105
|
+
* 代价是新增一个包时要在这里加一行 —— 这是明知并接受的。
|
|
106
|
+
*/
|
|
107
|
+
exports.KNOWN_PACKAGES = [
|
|
108
|
+
'@ccgf/framework',
|
|
109
|
+
'@ccgf/pathfinding',
|
|
110
|
+
'@ccgf/flow-field',
|
|
111
|
+
'ccgf-game-tool',
|
|
112
|
+
];
|
|
113
|
+
/** 精确查一个包:`npm view <name> --json`(对比 npmSearchArgv 的模糊搜索) */
|
|
114
|
+
function viewArgv(name) {
|
|
115
|
+
return ['view', name, '--json'];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 解析 `npm view <name> --json` 的结果。
|
|
119
|
+
*
|
|
120
|
+
* 实测 npm 有时给**对象**(单个 manifest),有时给**数组**(多个版本都匹配)——
|
|
121
|
+
* 所以两种都要吃:数组时取**最后一个**(npm 按版本升序返回,末尾即最新)。
|
|
122
|
+
* 形状不对就返回 null,**不要装作"查到了"** —— 上层据此显示"无法确认"。
|
|
123
|
+
*/
|
|
124
|
+
function parseViewResult(text) {
|
|
125
|
+
if (!text)
|
|
126
|
+
return null;
|
|
127
|
+
let data;
|
|
128
|
+
try {
|
|
129
|
+
data = JSON.parse(text);
|
|
130
|
+
}
|
|
131
|
+
catch (_a) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
let manifest = null;
|
|
135
|
+
if (Array.isArray(data)) {
|
|
136
|
+
for (let i = data.length - 1; i >= 0; i--) {
|
|
137
|
+
const item = data[i];
|
|
138
|
+
if (item && typeof item === 'object' && typeof item.version === 'string') {
|
|
139
|
+
manifest = item;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if (data && typeof data === 'object') {
|
|
145
|
+
manifest = data;
|
|
146
|
+
}
|
|
147
|
+
if (!manifest)
|
|
148
|
+
return null;
|
|
149
|
+
const name = typeof manifest.name === 'string' ? manifest.name : null;
|
|
150
|
+
const version = typeof manifest.version === 'string' ? manifest.version : null;
|
|
151
|
+
if (!name || !version)
|
|
152
|
+
return null;
|
|
153
|
+
return {
|
|
154
|
+
name,
|
|
155
|
+
version,
|
|
156
|
+
source: 'registry',
|
|
157
|
+
description: typeof manifest.description === 'string' ? manifest.description : '',
|
|
158
|
+
declaredDependencies: (manifest.dependencies && typeof manifest.dependencies === 'object')
|
|
159
|
+
? manifest.dependencies
|
|
160
|
+
: {},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRzs7O0FBU0gsc0NBU0M7QUFHRCx3REFFQztBQXNCRCxnREFrREM7QUFrQkQsNEJBRUM7QUFTRCwwQ0FnQ0M7QUExSkQsMkNBQWdEO0FBR2hELGlCQUFpQjtBQUNKLFFBQUEscUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRXpDLDBCQUEwQjtBQUMxQixTQUFnQixhQUFhLENBQUMsVUFBa0IsNkJBQWlCO0lBQzdELE9BQU87UUFDSCxRQUFRO1FBQ1IsWUFBWSxPQUFPLEVBQUU7UUFDckIsUUFBUTtRQUNSLGlCQUFpQiw2QkFBcUIsRUFBRTtRQUN4QyxZQUFZO1FBQ1osV0FBVztLQUNkLENBQUM7QUFDTixDQUFDO0FBRUQsd0JBQXdCO0FBQ3hCLFNBQWdCLHNCQUFzQixDQUFDLFVBQWtCLDZCQUFpQjtJQUN0RSxPQUFPLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3JELENBQUM7QUFZRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDOUIsR0FBVyxFQUNYLFVBQWtCLDZCQUFpQjtJQUVuQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsYUFBSCxHQUFHLGNBQUgsR0FBRyxHQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2QsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLE1BQWUsQ0FBQztJQUNwQixJQUFJLENBQUM7UUFDRCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5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QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDku44gbnBtIHJlZ2lzdHJ5IOWPkeeOsOWFrOWFseaooeWdlyDigJTigJQgKirnuq/pgLvovpEqKu+8jOS4jeeisOe9kee7nO+8jOS5n+S4jei1t+i/m+eoi+OAglxuICpcbiAqICMjIOS4uuS7gOS5iOi1sCBgbnBtIHNlYXJjaGAg6ICM5LiN5piv6Ieq5bex5Y+RIEhUVFBTXG4gKlxuICogbnBtIOS8mioq6Ieq5Yqo5bim5LiK5bel56iL55qEIGAubnBtcmNgKirvvIhyZWdpc3RyeeOAgeS7o+eQhuOAgeiupOivgeOAgWNhZmlsZe+8ieKAlOKAlFxuICog6Ieq5bex5Y+R6K+35rGC5bCx5b6X5oqK6L+Z5Lqb5YWo6YOo6YeN5paw5a6e546w5LiA6YGN77yM6ICM56eB5pyJIHJlZ2lzdHJ5IOaBsOaBsOS+nei1luWug+S7rOOAglxuICog5Y+m5aSW6L+Z5Y+w5py65Zmo5LiKIGBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTBgIOaYryBNYWNoaW5lIOe6p+iuvue9ru+8jFxuICog5Lqk57uZIG5wbSDoh7PlsJHog73lkoznlKjmiLflhbblroMgbnBtIOaTjeS9nOS/neaMgeWQjOS4gOWll+ihjOS4uuOAglxuICpcbiAqICMjIOWunua1i+e7k+iuuu+8iOWGs+WumuS6huS4i+mdoui/meWHoOS4que7huiKgu+8iVxuICpcbiAqIHwg5LqL5a6eIHwg5b2x5ZONIHxcbiAqIHwgLS0tIHwgLS0tIHxcbiAqIHwgYGtleXdvcmRzOmAg5pivKirnsr7noa4qKuWMuemFje+8jOe6r+aWh+acrOaYr+aooeeziuWMuemFjSB8IOW/hemhu+W4pumZkOWumuespiDigJTigJQg5ZCm5YiZ5pCcIGBjY2dmLXNoYXJlZGAg5Lya5pCc5Ye6IGBpcy1zaGFyZWQtYXJyYXktYnVmZmVyYCDov5nnp43ml6DlhbPljIUgfFxuICogfCDmsqHmnInnu5Pmnpzml7Ygc3Rkb3V0IOaYr+W5suWHgOeahCBgW11g77yM6YCA5Ye656CBIDAgfCBcIuayoeaQnOWIsFwi5LiOXCLmkJzlpLHotKVcIuW/hemhu+WIhuW8gOWkhOeQhiB8XG4gKiB8IOS4gOasoeWkp+e6piAxfjQg56eSIHwg6LCD55So5pa55b+F6aG757yT5a2Y77yM5LiN6IO95q+P5qyh5Yi35paw6Z2i5p2/6YO95Y675pCcIHxcbiAqL1xuXG5pbXBvcnQgeyBESVNDT1ZFUllfS0VZV09SRCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IElTaGFyZWRDYXRhbG9nRW50cnkgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqIOS4gOasoeaQnOe0ouacgOWkmuimgeWkmuWwkeadoSAqL1xuZXhwb3J0IGNvbnN0IFJFR0lTVFJZX1NFQVJDSF9MSU1JVCA9IDI1MDtcblxuLyoqIOe7hOijhSBgbnBtIHNlYXJjaGAg55qE5Y+C5pWwICovXG5leHBvcnQgZnVuY3Rpb24gbnBtU2VhcmNoQXJndihrZXl3b3JkOiBzdHJpbmcgPSBESVNDT1ZFUllfS0VZV09SRCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnc2VhcmNoJyxcbiAgICAgICAgYGtleXdvcmRzOiR7a2V5d29yZH1gLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgYC0tc2VhcmNobGltaXQ9JHtSRUdJU1RSWV9TRUFSQ0hfTElNSVR9YCxcbiAgICAgICAgJy0tbm8tYXVkaXQnLFxuICAgICAgICAnLS1uby1mdW5kJyxcbiAgICBdO1xufVxuXG4vKiog5bGV56S655So55qE5ZG95Luk6KGM77yI5LiO55yf5q2j5omn6KGM55qE5LiA6Ie077yJICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TnBtU2VhcmNoQ29tbWFuZChrZXl3b3JkOiBzdHJpbmcgPSBESVNDT1ZFUllfS0VZV09SRCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBucG0gJHtucG1TZWFyY2hBcmd2KGtleXdvcmQpLmpvaW4oJyAnKX1gO1xufVxuXG4vKiog6Kej5p6Q57uT5p6cICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpc3RyeVBhcnNlUmVzdWx0IHtcbiAgICBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107XG4gICAgLyoqXG4gICAgICog6L6T5Ye65LiN5piv5oiR5Lus6K6k6K+G55qE5b2i54q244CCXG4gICAgICog6L+ZKirkuI3nrYnkuo5cIuayoeacieaooeWdl1wiKiog4oCU4oCUIOiwg+eUqOaWueimgeaKiuWug+W9k+aIkOWksei0peadpeaPkOekuu+8jOWQpuWImeeUqOaIt+S8muS7peS4uuS7k+W6k+aYr+epuueahOOAglxuICAgICAqL1xuICAgIG1hbGZvcm1lZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiDop6PmnpAgYG5wbSBzZWFyY2ggLS1qc29uYCDnmoTovpPlh7rjgIJcbiAqXG4gKiDlrrnplJnmmK/liLvmhI/nmoTvvJrov5nkuKrovpPlh7rmnaXoh6rlpJbpg6ggcmVnaXN0cnnvvIzlvaLnirbkuI3lj5fmiJHku6zmjqfliLbvvIjlrZfmrrXnvLrlpLHjgIHmoLnmnKzkuI3mmK8gSlNPTuOAgVxuICog55Sa6Iez5LiN5piv5pWw57uE77yJ44CCKirnu53kuI3mipvlvILluLgqKu+8jOS4gOW+i+mZjee6p+aIkFwi5rKh5pyJ5p2h55uuXCLmiJYgYG1hbGZvcm1lZGDjgIJcbiAqXG4gKiBAcGFyYW0ga2V5d29yZCDmnJ/mnJvmr4/mnaHnu5Pmnpzpg73lo7DmmI7nmoTlhbPplK7or43vvIjpu5jorqTlsLHmmK/lj5HnjrDlhbPplK7or43vvInjgIJcbiAqICAgICAgICDnlKjlroPmmK/kuLrkuoblhZzkvY9cInJlZ2lzdHJ5IOW/veeVpeS6hiBga2V5d29yZHM6YCDpmZDlrprnrKblgZrkuobmqKHns4rljLnphY1cIui/meenjeaDheWGte+8m1xuICogICAgICAgIOWunua1i+e6r+aWh+acrOaQnOe0oiBgY2NnZi1zaGFyZWRgIOS8muaKiiBgaXMtc2hhcmVkLWFycmF5LWJ1ZmZlcmAg5pCc5Ye65p2l44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlYXJjaFJlc3VsdHMoXG4gICAgcmF3OiBzdHJpbmcsXG4gICAga2V5d29yZDogc3RyaW5nID0gRElTQ09WRVJZX0tFWVdPUkQsXG4pOiBJUmVnaXN0cnlQYXJzZVJlc3VsdCB7XG4gICAgY29uc3QgdGV4dCA9IChyYXcgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAodGV4dCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogW10sIG1hbGZvcm1lZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiBbXSwgbWFsZm9ybWVkOiB0cnVlIH07XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgIHJldHVybiB7IGVudHJpZXM6IFtdLCBtYWxmb3JtZWQ6IHRydWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyc2VkKSB7XG4gICAgICAgIGlmICghaXRlbSB8fCB0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgcmVjb3JkLm5hbWUgPT09ICdzdHJpbmcnID8gcmVjb3JkLm5hbWUgOiAnJztcbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGtleXdvcmRzID0gQXJyYXkuaXNBcnJheShyZWNvcmQua2V5d29yZHMpID8gcmVjb3JkLmtleXdvcmRzIDogW107XG4gICAgICAgIGlmICgha2V5d29yZHMuaW5jbHVkZXMoa2V5d29yZCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0eXBlb2YgcmVjb3JkLnZlcnNpb24gPT09ICdzdHJpbmcnID8gcmVjb3JkLnZlcnNpb24gOiAnMC4wLjAnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiByZWNvcmQuZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnID8gcmVjb3JkLmRlc2NyaXB0aW9uIDogJycsXG4gICAgICAgICAgICBzb3VyY2U6ICdyZWdpc3RyeScsXG4gICAgICAgICAgICAvLyDmjInljIXlkI3oo4XvvIhucG0g5Lya5Y+W5pyA5paw54mI77yJ77yb5pCc57Si57uT5p6c6YeM5rKh5pyJ5L6d6LWW5L+h5oGv77yM5a6J6KOF5ZCO5YaN5pi+56S6XG4gICAgICAgICAgICBzcGVjOiBuYW1lLFxuICAgICAgICAgICAgbG9jYWxQYXRoOiBudWxsLFxuICAgICAgICAgICAgZGVjbGFyZWREZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgICAgICAgLy8g5pCc57Si57uT5p6c6YeMKirmsqHmnIkqKuS+nei1luS/oeaBryDigJTigJQg55WM6Z2i5b+F6aG75o2u5q2k6K+0XCLlronoo4XlkI7lj6/mn6XnnItcIu+8jOiAjOS4jeaYr1wi5rKh5pyJ5L6d6LWWXCJcbiAgICAgICAgICAgIGRlcGVuZGVuY2llc0tub3duOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZW50cmllcywgbWFsZm9ybWVkOiBmYWxzZSB9O1xufVxuXG4vKipcbiAqIOW3suefpeeahOOAgeaIkeS7rOiHquW3seWPkeW4g+eahOWMheOAglxuICpcbiAqICoq6L+Z6YeM5piv5omL5bel57u05oqk55qE5ZCN5Y2VKiog4oCU4oCUIOaWueahiCBCOuS4jeWGjeS+nei1liBgbnBtIHNlYXJjaGDjgIJcbiAqIOWOn+WboDpucG0g5pCc57Si5a+5IHNjb3BlZCDljIUoYEBjY2dmLypgKeW+iOS4jeWPr+mdoCzluLjluLjmkJzkuI3liLAsXG4gKiDkuo7mmK9cIuWFrOWFseaooeWdl+i/nOeoi+WIl+ihqFwi5ZKM5L2/55So6ICF55yL5Yiw55qEXCLmnIDmlrDniYjmnKxcIumDveS8muaYr+epuueahOOAglxuICog5Luj5Lu35piv5paw5aKe5LiA5Liq5YyF5pe26KaB5Zyo6L+Z6YeM5Yqg5LiA6KGMIOKAlOKAlCDov5nmmK/mmI7nn6XlubbmjqXlj5fnmoTjgIJcbiAqL1xuZXhwb3J0IGNvbnN0IEtOT1dOX1BBQ0tBR0VTID0gW1xuICAgICdAY2NnZi9mcmFtZXdvcmsnLFxuICAgICdAY2NnZi9wYXRoZmluZGluZycsXG4gICAgJ0BjY2dmL2Zsb3ctZmllbGQnLFxuICAgICdjY2dmLWdhbWUtdG9vbCcsXG5dO1xuXG4vKiog57K+56Gu5p+l5LiA5Liq5YyFOmBucG0gdmlldyA8bmFtZT4gLS1qc29uYCjlr7nmr5QgbnBtU2VhcmNoQXJndiDnmoTmqKHns4rmkJzntKIpICovXG5leHBvcnQgZnVuY3Rpb24gdmlld0FyZ3YobmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ3ZpZXcnLCBuYW1lLCAnLS1qc29uJ107XG59XG5cbi8qKlxuICog6Kej5p6QIGBucG0gdmlldyA8bmFtZT4gLS1qc29uYCDnmoTnu5PmnpzjgIJcbiAqXG4gKiDlrp7mtYsgbnBtIOacieaXtue7mSoq5a+56LGhKioo5Y2V5LiqIG1hbmlmZXN0KSzmnInml7bnu5kqKuaVsOe7hCoqKOWkmuS4queJiOacrOmDveWMuemFjSnigJTigJRcbiAqIOaJgOS7peS4pOenjemDveimgeWQgzrmlbDnu4Tml7blj5YqKuacgOWQjuS4gOS4qioqKG5wbSDmjInniYjmnKzljYfluo/ov5Tlm54s5pyr5bC+5Y2z5pyA5pawKeOAglxuICog5b2i54q25LiN5a+55bCx6L+U5ZueIG51bGwsKirkuI3opoHoo4XkvZxcIuafpeWIsOS6hlwiKiog4oCU4oCUIOS4iuWxguaNruatpOaYvuekulwi5peg5rOV56Gu6K6kXCLjgIJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmlld1Jlc3VsdCh0ZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogSVNoYXJlZENhdGFsb2dFbnRyeSB8IG51bGwge1xuICAgIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XG4gICAgbGV0IGRhdGE6IHVua25vd247XG4gICAgdHJ5IHsgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7IH0gY2F0Y2ggeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgbGV0IG1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPSBudWxsO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtpXTtcbiAgICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbWFuaWZlc3QgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtYW5pZmVzdCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIGlmICghbWFuaWZlc3QpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBtYW5pZmVzdC5uYW1lID09PSAnc3RyaW5nJyA/IG1hbmlmZXN0Lm5hbWUgOiBudWxsO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0eXBlb2YgbWFuaWZlc3QudmVyc2lvbiA9PT0gJ3N0cmluZycgPyBtYW5pZmVzdC52ZXJzaW9uIDogbnVsbDtcbiAgICBpZiAoIW5hbWUgfHwgIXZlcnNpb24pIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgc291cmNlOiAncmVnaXN0cnknLFxuICAgICAgICBkZXNjcmlwdGlvbjogdHlwZW9mIG1hbmlmZXN0LmRlc2NyaXB0aW9uID09PSAnc3RyaW5nJyA/IG1hbmlmZXN0LmRlc2NyaXB0aW9uIDogJycsXG4gICAgICAgIGRlY2xhcmVkRGVwZW5kZW5jaWVzOiAobWFuaWZlc3QuZGVwZW5kZW5jaWVzICYmIHR5cGVvZiBtYW5pZmVzdC5kZXBlbmRlbmNpZXMgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgPyBtYW5pZmVzdC5kZXBlbmRlbmNpZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgICAgICAgICAgOiB7fSxcbiAgICB9IGFzIElTaGFyZWRDYXRhbG9nRW50cnk7XG59XG4iXX0=
|