@oflow-ai/oflow-cli 0.1.4 → 0.1.5
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/cli.js +34 -23
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -56,25 +56,34 @@ let sessionStats = {
|
|
|
56
56
|
let contextTokens = 0;
|
|
57
57
|
let maxContextTokens = 128000;
|
|
58
58
|
let currentModel = 'gpt-4o';
|
|
59
|
-
|
|
59
|
+
/**
|
|
60
|
+
* 显示状态栏(固定在输入框上方)
|
|
61
|
+
*/
|
|
62
|
+
function showStatusBar() {
|
|
60
63
|
const terminalWidth = process.stdout.columns || 80;
|
|
61
64
|
const contextPercent = Math.min(100, Math.round((contextTokens / maxContextTokens) * 100));
|
|
62
65
|
const contextColor = contextPercent > 80 ? chalk_1.default.red : contextPercent > 50 ? chalk_1.default.yellow : chalk_1.default.green;
|
|
63
66
|
const thinkingStatus = currentShowThinking ? chalk_1.default.cyan('ON') : chalk_1.default.gray('OFF');
|
|
64
|
-
|
|
67
|
+
// 状态栏第一行
|
|
68
|
+
const statusParts = [
|
|
65
69
|
`${chalk_1.default.blue('Model:')} ${chalk_1.default.white(currentModel)}`,
|
|
66
70
|
`${chalk_1.default.blue('Context:')} ${contextColor(contextPercent + '%')}`,
|
|
67
71
|
`${chalk_1.default.blue('Thinking:')} ${thinkingStatus}`
|
|
68
|
-
]
|
|
72
|
+
];
|
|
73
|
+
const statusLine1 = statusParts.join(' | ');
|
|
74
|
+
// 状态栏第二行 - 当前目录
|
|
69
75
|
const currentDir = process.cwd();
|
|
70
|
-
const
|
|
71
|
-
|
|
76
|
+
const maxDirLen = terminalWidth - 8;
|
|
77
|
+
const dirDisplay = currentDir.length > maxDirLen
|
|
78
|
+
? '...' + currentDir.slice(-(maxDirLen - 3))
|
|
72
79
|
: currentDir;
|
|
73
80
|
const statusLine2 = `${chalk_1.default.blue('Dir:')} ${chalk_1.default.gray(dirDisplay)}`;
|
|
74
|
-
|
|
81
|
+
// 打印状态栏
|
|
82
|
+
console.log('');
|
|
83
|
+
console.log(chalk_1.default.gray('─'.repeat(Math.min(terminalWidth, 80))));
|
|
75
84
|
console.log(statusLine1);
|
|
76
85
|
console.log(statusLine2);
|
|
77
|
-
console.log(chalk_1.default.gray('─'.repeat(Math.min(terminalWidth,
|
|
86
|
+
console.log(chalk_1.default.gray('─'.repeat(Math.min(terminalWidth, 80))));
|
|
78
87
|
}
|
|
79
88
|
function showTaskSummary() {
|
|
80
89
|
const duration = Math.round((Date.now() - sessionStats.startTime.getTime()) / 1000);
|
|
@@ -106,7 +115,6 @@ function showTaskSummary() {
|
|
|
106
115
|
}
|
|
107
116
|
console.log('');
|
|
108
117
|
console.log(chalk_1.default.bold.cyan('═══════════════════════════════════════'));
|
|
109
|
-
console.log('');
|
|
110
118
|
sessionStats = {
|
|
111
119
|
toolCallsCount: 0,
|
|
112
120
|
filesRead: [],
|
|
@@ -127,26 +135,21 @@ async function startInteractiveMode(options) {
|
|
|
127
135
|
const versionDisplay = 'v' + currentVersion;
|
|
128
136
|
console.log('');
|
|
129
137
|
console.log(chalk_1.default.bold.blue(' oflow CLI ' + chalk_1.default.white(versionDisplay)));
|
|
138
|
+
console.log(chalk_1.default.gray(' Type /help for commands, /exit to quit'));
|
|
130
139
|
console.log('');
|
|
131
140
|
// 后台检测更新(不阻塞当前 session)
|
|
132
|
-
let updateNoticeShown = false;
|
|
133
141
|
(0, updater_1.checkForUpdates)().then(updateInfo => {
|
|
134
142
|
if (updateInfo.hasUpdate) {
|
|
135
143
|
console.log(chalk_1.default.yellow(' New version available: ' + updateInfo.latestVersion));
|
|
136
144
|
console.log(chalk_1.default.gray(' Updating in background...'));
|
|
137
|
-
// 后台更新
|
|
138
145
|
(0, updater_1.performBackgroundUpdate)((success) => {
|
|
139
|
-
if (success
|
|
140
|
-
updateNoticeShown = true;
|
|
146
|
+
if (success) {
|
|
141
147
|
console.log('');
|
|
142
148
|
console.log(chalk_1.default.green(' Update completed! Restart oflow to use v' + updateInfo.latestVersion));
|
|
143
|
-
console.log('');
|
|
144
149
|
}
|
|
145
150
|
});
|
|
146
151
|
}
|
|
147
|
-
}).catch(() => {
|
|
148
|
-
// 忽略更新检查错误
|
|
149
|
-
});
|
|
152
|
+
}).catch(() => { });
|
|
150
153
|
if (options.sandbox || configManager.get('sandbox')) {
|
|
151
154
|
try {
|
|
152
155
|
sandboxExecutor = await (0, core_1.createSandboxExecutor)();
|
|
@@ -188,7 +191,7 @@ async function startInteractiveMode(options) {
|
|
|
188
191
|
},
|
|
189
192
|
onToolCall: (toolCall) => {
|
|
190
193
|
sessionStats.toolCallsCount++;
|
|
191
|
-
console.log(chalk_1.default.cyan('\
|
|
194
|
+
console.log(chalk_1.default.cyan('\n[Tool: ' + toolCall.function.name + ']'));
|
|
192
195
|
try {
|
|
193
196
|
const args = JSON.parse(toolCall.function.arguments);
|
|
194
197
|
if (toolCall.function.name === 'read_file' && args.absolute_path) {
|
|
@@ -212,25 +215,30 @@ async function startInteractiveMode(options) {
|
|
|
212
215
|
}
|
|
213
216
|
});
|
|
214
217
|
conversation.setSystemPrompt(getSystemPrompt());
|
|
215
|
-
console.log(chalk_1.default.gray('Type /help for commands, /exit to quit'));
|
|
216
|
-
console.log('');
|
|
217
218
|
const rl = readline.createInterface({
|
|
218
219
|
input: process.stdin,
|
|
219
220
|
output: process.stdout
|
|
220
221
|
});
|
|
222
|
+
/**
|
|
223
|
+
* 显示输入提示(状态栏在输入框上方)
|
|
224
|
+
* 布局顺序:
|
|
225
|
+
* [内容区域]
|
|
226
|
+
* [状态栏]
|
|
227
|
+
* > [输入框]
|
|
228
|
+
*/
|
|
221
229
|
const showPrompt = () => {
|
|
230
|
+
showStatusBar();
|
|
222
231
|
rl.setPrompt(chalk_1.default.green('> '));
|
|
223
232
|
rl.prompt();
|
|
224
233
|
};
|
|
225
234
|
showPrompt();
|
|
226
235
|
rl.on('line', async (line) => {
|
|
227
236
|
const input = line.trim();
|
|
228
|
-
// 显示状态栏在输入框下面
|
|
229
|
-
drawStatusBar();
|
|
230
237
|
if (!input) {
|
|
231
238
|
showPrompt();
|
|
232
239
|
return;
|
|
233
240
|
}
|
|
241
|
+
// 处理 slash 命令
|
|
234
242
|
if ((0, commands_1.isSlashCommand)(input)) {
|
|
235
243
|
if (input.toLowerCase() === '/thinking') {
|
|
236
244
|
currentShowThinking = !currentShowThinking;
|
|
@@ -261,16 +269,19 @@ async function startInteractiveMode(options) {
|
|
|
261
269
|
showPrompt();
|
|
262
270
|
return;
|
|
263
271
|
}
|
|
272
|
+
// 处理 agent 调用
|
|
264
273
|
if (input.startsWith('$')) {
|
|
265
274
|
await handleAgentCall(input, provider);
|
|
266
275
|
showPrompt();
|
|
267
276
|
return;
|
|
268
277
|
}
|
|
278
|
+
// 处理 shell 命令
|
|
269
279
|
if (input.startsWith('!')) {
|
|
270
280
|
await executeShellCommand(input.slice(1), sandboxExecutor);
|
|
271
281
|
showPrompt();
|
|
272
282
|
return;
|
|
273
283
|
}
|
|
284
|
+
// 处理普通对话
|
|
274
285
|
const processedInput = await processFileReferences(input);
|
|
275
286
|
const spinner = (0, ora_1.default)('Thinking...').start();
|
|
276
287
|
try {
|
|
@@ -326,7 +337,7 @@ async function handleAgentCall(input, provider) {
|
|
|
326
337
|
try {
|
|
327
338
|
const agentFactory = new core_1.AgentFactory(provider, process.cwd());
|
|
328
339
|
const agent = agentFactory.createAgent(agentType);
|
|
329
|
-
console.log(chalk_1.default.cyan('\
|
|
340
|
+
console.log(chalk_1.default.cyan('\n[Agent: ' + agentType + ']'));
|
|
330
341
|
console.log(chalk_1.default.gray('Task: ' + task + '\n'));
|
|
331
342
|
const spinner = (0, ora_1.default)('Agent working...').start();
|
|
332
343
|
const result = await agent.execute(task, (update) => {
|
|
@@ -485,4 +496,4 @@ Your primary goal is to help users safely and efficiently complete programming t
|
|
|
485
496
|
Current working directory: ${process.cwd()}
|
|
486
497
|
`;
|
|
487
498
|
}
|
|
488
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtIQSxvREF3TkM7QUF5REQsNENBdUNDO0FBMWFELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVF3QjtBQUN4Qix5Q0FBaUU7QUFDakUsdUNBQXVHO0FBaUJ2RyxJQUFJLGVBQWUsR0FBMkIsSUFBSSxDQUFDO0FBQ25ELElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksWUFBWSxHQUFpQjtJQUMvQixjQUFjLEVBQUUsQ0FBQztJQUNqQixTQUFTLEVBQUUsRUFBRTtJQUNiLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO0NBQ3RCLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdEIsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDOUIsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRTVCLFNBQVMsYUFBYTtJQUNwQixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDbkQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0YsTUFBTSxZQUFZLEdBQUcsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEtBQUss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O1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQXFDb0IsT0FBTyxDQUFDLEdBQUcsRUFBRTtDQUN6QyxDQUFDO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge1xuICBnZXRDb25maWdNYW5hZ2VyLFxuICBjcmVhdGVBSVByb3ZpZGVyLFxuICBDb252ZXJzYXRpb24sXG4gIEFnZW50RmFjdG9yeSxcbiAgQWdlbnRUeXBlLFxuICBjcmVhdGVTYW5kYm94RXhlY3V0b3IsXG4gIFNhbmRib3hFeGVjdXRvclxufSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgeyBpc1NsYXNoQ29tbWFuZCwgZXhlY3V0ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGVzLCBwZXJmb3JtVXBkYXRlLCBnZXRDdXJyZW50VmVyc2lvbiwgcGVyZm9ybUJhY2tncm91bmRVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBtb2RlbD86IHN0cmluZztcbiAgeW9sbz86IGJvb2xlYW47XG4gIHNhbmRib3g/OiBib29sZWFuO1xuICBzaG93VGhpbmtpbmc/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2Vzc2lvblN0YXRzIHtcbiAgdG9vbENhbGxzQ291bnQ6IG51bWJlcjtcbiAgZmlsZXNSZWFkOiBzdHJpbmdbXTtcbiAgZmlsZXNXcml0dGVuOiBzdHJpbmdbXTtcbiAgY29tbWFuZHNSdW46IHN0cmluZ1tdO1xuICBzdGFydFRpbWU6IERhdGU7XG59XG5cbmxldCBzYW5kYm94RXhlY3V0b3I6IFNhbmRib3hFeGVjdXRvciB8IG51bGwgPSBudWxsO1xubGV0IGN1cnJlbnRTaG93VGhpbmtpbmcgPSBmYWxzZTtcbmxldCBzZXNzaW9uU3RhdHM6IFNlc3Npb25TdGF0cyA9IHtcbiAgdG9vbENhbGxzQ291bnQ6IDAsXG4gIGZpbGVzUmVhZDogW10sXG4gIGZpbGVzV3JpdHRlbjogW10sXG4gIGNvbW1hbmRzUnVuOiBbXSxcbiAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpXG59O1xubGV0IGNvbnRleHRUb2tlbnMgPSAwO1xubGV0IG1heENvbnRleHRUb2tlbnMgPSAxMjgwMDA7XG5sZXQgY3VycmVudE1vZGVsID0gJ2dwdC00byc7XG5cbmZ1bmN0aW9uIGRyYXdTdGF0dXNCYXIoKTogdm9pZCB7XG4gIGNvbnN0IHRlcm1pbmFsV2lkdGggPSBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwO1xuICBjb25zdCBjb250ZXh0UGVyY2VudCA9IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoY29udGV4dFRva2VucyAvIG1heENvbnRleHRUb2tlbnMpICogMTAwKSk7XG4gIGNvbnN0IGNvbnRleHRDb2xvciA9IGNvbnRleHRQZXJjZW50ID4gODAgPyBjaGFsay5yZWQgOiBjb250ZXh0UGVyY2VudCA+IDUwID8gY2hhbGsueWVsbG93IDogY2hhbGsuZ3JlZW47XG4gIGNvbnN0IHRoaW5raW5nU3RhdHVzID0gY3VycmVudFNob3dUaGlua2luZyA/IGNoYWxrLmN5YW4oJ09OJykgOiBjaGFsay5ncmF5KCdPRkYnKTtcbiAgXG4gIGNvbnN0IHN0YXR1c0xpbmUxID0gW1xuICAgIGAke2NoYWxrLmJsdWUoJ01vZGVsOicpfSAke2NoYWxrLndoaXRlKGN1cnJlbnRNb2RlbCl9YCxcbiAgICBgJHtjaGFsay5ibHVlKCdDb250ZXh0OicpfSAke2NvbnRleHRDb2xvcihjb250ZXh0UGVyY2VudCArICclJyl9YCxcbiAgICBgJHtjaGFsay5ibHVlKCdUaGlua2luZzonKX0gJHt0aGlua2luZ1N0YXR1c31gXG4gIF0uam9pbignICB8ICAnKTtcbiAgXG4gIGNvbnN0IGN1cnJlbnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBkaXJEaXNwbGF5ID0gY3VycmVudERpci5sZW5ndGggPiB0ZXJtaW5hbFdpZHRoIC0gMTAgXG4gICAgPyAnLi4uJyArIGN1cnJlbnREaXIuc2xpY2UoLSh0ZXJtaW5hbFdpZHRoIC0gMTMpKVxuICAgIDogY3VycmVudERpcjtcbiAgY29uc3Qgc3RhdHVzTGluZTIgPSBgJHtjaGFsay5ibHVlKCdEaXI6Jyl9ICR7Y2hhbGsuZ3JheShkaXJEaXNwbGF5KX1gO1xuICBcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgNjApKSkpO1xuICBjb25zb2xlLmxvZyhzdGF0dXNMaW5lMSk7XG4gIGNvbnNvbGUubG9nKHN0YXR1c0xpbmUyKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgNjApKSkpO1xufVxuXG5mdW5jdGlvbiBzaG93VGFza1N1bW1hcnkoKTogdm9pZCB7XG4gIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHNlc3Npb25TdGF0cy5zdGFydFRpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAvIDYwKTtcbiAgY29uc3Qgc2Vjb25kcyA9IGR1cmF0aW9uICUgNjA7XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJyAgICAgICAgICAgVGFzayBTdW1tYXJ5JykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0R1cmF0aW9uOicpfSAke2NoYWxrLnllbGxvdyhtaW51dGVzICsgJ20gJyArIHNlY29uZHMgKyAncycpfWApO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnVG9vbCBjYWxsczonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50LnRvU3RyaW5nKCkpfWApO1xuICBcbiAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLndoaXRlKCdGaWxlcyByZWFkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0ZpbGVzIG1vZGlmaWVkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnQ29tbWFuZHMgcnVuOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuY29tbWFuZHNSdW4ubGVuZ3RoLnRvU3RyaW5nKCkpfWApO1xuICB9XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBzZXNzaW9uU3RhdHMgPSB7XG4gICAgdG9vbENhbGxzQ291bnQ6IDAsXG4gICAgZmlsZXNSZWFkOiBbXSxcbiAgICBmaWxlc1dyaXR0ZW46IFtdLFxuICAgIGNvbW1hbmRzUnVuOiBbXSxcbiAgICBzdGFydFRpbWU6IG5ldyBEYXRlKClcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0SW50ZXJhY3RpdmVNb2RlKG9wdGlvbnM6IENMSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOaYvuekuuW9k+WJjeeJiOacrFxuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IGdldEN1cnJlbnRWZXJzaW9uKCk7XG4gIGNvbnN0IHZlcnNpb25EaXNwbGF5ID0gJ3YnICsgY3VycmVudFZlcnNpb247XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5ibHVlKCcgIG9mbG93IENMSSAnICsgY2hhbGsud2hpdGUodmVyc2lvbkRpc3BsYXkpKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcblxuICAvLyDlkI7lj7Dmo4DmtYvmm7TmlrDvvIjkuI3pmLvloZ7lvZPliY0gc2Vzc2lvbu+8iVxuICBsZXQgdXBkYXRlTm90aWNlU2hvd24gPSBmYWxzZTtcbiAgY2hlY2tGb3JVcGRhdGVzKCkudGhlbih1cGRhdGVJbmZvID0+IHtcbiAgICBpZiAodXBkYXRlSW5mby5oYXNVcGRhdGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnICBOZXcgdmVyc2lvbiBhdmFpbGFibGU6ICcgKyB1cGRhdGVJbmZvLmxhdGVzdFZlcnNpb24pKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgVXBkYXRpbmcgaW4gYmFja2dyb3VuZC4uLicpKTtcbiAgICAgIFxuICAgICAgLy8g5ZCO5Y+w5pu05pawXG4gICAgICBwZXJmb3JtQmFja2dyb3VuZFVwZGF0ZSgoc3VjY2VzcykgPT4ge1xuICAgICAgICBpZiAoc3VjY2VzcyAmJiAhdXBkYXRlTm90aWNlU2hvd24pIHtcbiAgICAgICAgICB1cGRhdGVOb3RpY2VTaG93biA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCcgIFVwZGF0ZSBjb21wbGV0ZWQhIFJlc3RhcnQgb2Zsb3cgdG8gdXNlIHYnICsgdXBkYXRlSW5mby5sYXRlc3RWZXJzaW9uKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pLmNhdGNoKCgpID0+IHtcbiAgICAvLyDlv73nlaXmm7TmlrDmo4Dmn6XplJnor69cbiAgfSk7XG5cbiAgaWYgKG9wdGlvbnMuc2FuZGJveCB8fCBjb25maWdNYW5hZ2VyLmdldCgnc2FuZGJveCcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNhbmRib3hFeGVjdXRvciA9IGF3YWl0IGNyZWF0ZVNhbmRib3hFeGVjdXRvcigpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGN1cnJlbnRTaG93VGhpbmtpbmcgPSBvcHRpb25zLnNob3dUaGlua2luZyA/PyBjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpO1xuICBjdXJyZW50TW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG5cbiAgaWYgKGN1cnJlbnRNb2RlbC5pbmNsdWRlcygnZ3B0LTQnKSB8fCBjdXJyZW50TW9kZWwuaW5jbHVkZXMoJ2dwdC00bycpKSB7XG4gICAgbWF4Q29udGV4dFRva2VucyA9IDEyODAwMDtcbiAgfSBlbHNlIGlmIChjdXJyZW50TW9kZWwuaW5jbHVkZXMoJ2RlZXBzZWVrJykpIHtcbiAgICBtYXhDb250ZXh0VG9rZW5zID0gNjQwMDA7XG4gIH0gZWxzZSB7XG4gICAgbWF4Q29udGV4dFRva2VucyA9IDEyODAwMDtcbiAgfVxuXG4gIGxldCBwcm92aWRlcjtcbiAgdHJ5IHtcbiAgICBwcm92aWRlciA9IGNyZWF0ZUFJUHJvdmlkZXIoYXV0aCwgY3VycmVudE1vZGVsKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0ZhaWxlZCB0byBjcmVhdGUgQUkgcHJvdmlkZXI6ICcgKyAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIHNob3dUaGlua2luZzogY3VycmVudFNob3dUaGlua2luZyxcbiAgICBvbkNvbnRlbnQ6IChjb250ZW50KSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay53aGl0ZShjb250ZW50KSk7XG4gICAgfSxcbiAgICBvblRoaW5raW5nOiAodGhpbmtpbmcpID0+IHtcbiAgICAgIGlmIChjdXJyZW50U2hvd1RoaW5raW5nKSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLm1hZ2VudGEodGhpbmtpbmcpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uVG9vbENhbGw6ICh0b29sQ2FsbCkgPT4ge1xuICAgICAgc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50Kys7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5Vc2luZyB0b29sOiAnICsgdG9vbENhbGwuZnVuY3Rpb24ubmFtZSkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXJncyA9IEpTT04ucGFyc2UodG9vbENhbGwuZnVuY3Rpb24uYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICdyZWFkX2ZpbGUnICYmIGFyZ3MuYWJzb2x1dGVfcGF0aCkge1xuICAgICAgICAgIGlmICghc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5pbmNsdWRlcyhhcmdzLmFic29sdXRlX3BhdGgpKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnB1c2goYXJncy5hYnNvbHV0ZV9wYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICd3cml0ZV9maWxlJyB8fCB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lID09PSAncmVwbGFjZScpICYmIGFyZ3MuZmlsZV9wYXRoKSB7XG4gICAgICAgICAgaWYgKCFzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmluY2x1ZGVzKGFyZ3MuZmlsZV9wYXRoKSkge1xuICAgICAgICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5wdXNoKGFyZ3MuZmlsZV9wYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodG9vbENhbGwuZnVuY3Rpb24ubmFtZSA9PT0gJ3J1bl9zaGVsbF9jb21tYW5kJyAmJiBhcmdzLmNvbW1hbmQpIHtcbiAgICAgICAgICBzZXNzaW9uU3RhdHMuY29tbWFuZHNSdW4ucHVzaChhcmdzLmNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfSxcbiAgICBvblRvb2xSZXN1bHQ6IChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnRleHRUb2tlbnMgKz0gTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyA0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1R5cGUgL2hlbHAgZm9yIGNvbW1hbmRzLCAvZXhpdCB0byBxdWl0JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG5cbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgfSk7XG5cbiAgY29uc3Qgc2hvd1Byb21wdCA9ICgpID0+IHtcbiAgICBybC5zZXRQcm9tcHQoY2hhbGsuZ3JlZW4oJz4gJykpO1xuICAgIHJsLnByb21wdCgpO1xuICB9O1xuXG4gIHNob3dQcm9tcHQoKTtcblxuICBybC5vbignbGluZScsIGFzeW5jIChsaW5lKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBsaW5lLnRyaW0oKTtcbiAgICBcbiAgICAvLyDmmL7npLrnirbmgIHmoI/lnKjovpPlhaXmoYbkuIvpnaJcbiAgICBkcmF3U3RhdHVzQmFyKCk7XG4gICAgXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1NsYXNoQ29tbWFuZChpbnB1dCkpIHtcbiAgICAgIGlmIChpbnB1dC50b0xvd2VyQ2FzZSgpID09PSAnL3RoaW5raW5nJykge1xuICAgICAgICBjdXJyZW50U2hvd1RoaW5raW5nID0gIWN1cnJlbnRTaG93VGhpbmtpbmc7XG4gICAgICAgIGNvbmZpZ01hbmFnZXIuc2V0U2hvd1RoaW5raW5nKGN1cnJlbnRTaG93VGhpbmtpbmcpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignVGhpbmtpbmc6ICcgKyAoY3VycmVudFNob3dUaGlua2luZyA/ICdPTicgOiAnT0ZGJykpKTtcbiAgICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnB1dC50b0xvd2VyQ2FzZSgpID09PSAnL3N1bW1hcnknKSB7XG4gICAgICAgIHNob3dUYXNrU3VtbWFyeSgpO1xuICAgICAgICBzaG93UHJvbXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LnRvTG93ZXJDYXNlKCkgPT09ICcvdXBkYXRlJykge1xuICAgICAgICBhd2FpdCBwZXJmb3JtVXBkYXRlKGZhbHNlKTtcbiAgICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3VsZENvbnRpbnVlID0gYXdhaXQgZXhlY3V0ZVNsYXNoQ29tbWFuZChpbnB1dCwge1xuICAgICAgICBjb252ZXJzYXRpb24sXG4gICAgICAgIHJsLFxuICAgICAgICBjb25maWdNYW5hZ2VyXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKCFzaG91bGRDb250aW51ZSkge1xuICAgICAgICBybC5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgICBhd2FpdCBoYW5kbGVBZ2VudENhbGwoaW5wdXQsIHByb3ZpZGVyKTtcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnIScpKSB7XG4gICAgICBhd2FpdCBleGVjdXRlU2hlbGxDb21tYW5kKGlucHV0LnNsaWNlKDEpLCBzYW5kYm94RXhlY3V0b3IpO1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2Nlc3NlZElucHV0ID0gYXdhaXQgcHJvY2Vzc0ZpbGVSZWZlcmVuY2VzKGlucHV0KTtcbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdUaGlua2luZy4uLicpLnN0YXJ0KCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKHByb2Nlc3NlZElucHV0KTtcbiAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgXG4gICAgICBpZiAoc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50ID49IDMpIHtcbiAgICAgICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0VG9rZW5zICs9IE1hdGguY2VpbChyZXNwb25zZS5sZW5ndGggLyA0KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgc2hvd1Byb21wdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0Vycm9yJyk7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3JNZXNzYWdlKSk7XG4gICAgICBcbiAgICAgIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQwMCcpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQ2hlY2sgQVBJIGtleSBhbmQgbW9kZWwgbmFtZSwgb3IgcnVuIFwib2Zsb3cgYXV0aFwiJykpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQwMScpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQXV0aGVudGljYXRpb24gZmFpbGVkLCBydW4gXCJvZmxvdyBhdXRoXCInKSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDI5JykpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdSYXRlIGxpbWl0LCBwbGVhc2Ugd2FpdCBhbmQgcmV0cnknKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJsLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllIVxcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xuXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllIVxcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBZ2VudENhbGwoaW5wdXQ6IHN0cmluZywgcHJvdmlkZXI6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKC9eXFwkKFxcdysoPzotXFx3KykqKVxccyooLiopJC8pO1xuICBcbiAgaWYgKCFtYXRjaCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnSW52YWxpZCBmb3JtYXQuIFVzZTogJGFnZW50LXR5cGUgXCJ0YXNrXCInKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnQWdlbnRzOiBnZW5lcmFsLXB1cnBvc2UsIHBsYW4tYWdlbnQsIGV4cGxvcmUtYWdlbnQsIGNvZGUtcmV2aWV3ZXIsIGZyb250ZW5kLXRlc3RlcicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZ2VudFR5cGUgPSBtYXRjaFsxXSBhcyBBZ2VudFR5cGU7XG4gIGNvbnN0IHRhc2sgPSBtYXRjaFsyXS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICBpZiAoIXRhc2spIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1BsZWFzZSBwcm92aWRlIGEgdGFzay4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZ2VudEZhY3RvcnkgPSBuZXcgQWdlbnRGYWN0b3J5KHByb3ZpZGVyLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICBjb25zdCBhZ2VudCA9IGFnZW50RmFjdG9yeS5jcmVhdGVBZ2VudChhZ2VudFR5cGUpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcblN0YXJ0aW5nICcgKyBhZ2VudFR5cGUgKyAnIGFnZW50Li4uJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1Rhc2s6ICcgKyB0YXNrICsgJ1xcbicpKTtcblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0FnZW50IHdvcmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50LmV4ZWN1dGUodGFzaywgKHVwZGF0ZSkgPT4ge1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh1cGRhdGUpO1xuICAgICAgc3Bpbm5lci5zdGFydCgpO1xuICAgIH0pO1xuXG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxuQWdlbnQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpKTtcbiAgICAgIGlmIChyZXN1bHQuZmlsZXNNb2RpZmllZCAmJiByZXN1bHQuZmlsZXNNb2RpZmllZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0ZpbGVzIG1vZGlmaWVkOicpKTtcbiAgICAgICAgcmVzdWx0LmZpbGVzTW9kaWZpZWQuZm9yRWFjaChmID0+IGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgLSAnICsgZikpKTtcbiAgICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5wdXNoKC4uLnJlc3VsdC5maWxlc01vZGlmaWVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdcXG5BZ2VudCBlbmNvdW50ZXJlZCBlcnJvcnM6JykpO1xuICAgICAgcmVzdWx0LmVycm9ycz8uZm9yRWFjaChlID0+IGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnICAtICcgKyBlKSkpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQub3V0cHV0KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdcXG5PdXRwdXQ6JykpO1xuICAgICAgY29uc29sZS5sb2cocmVzdWx0Lm91dHB1dCk7XG4gICAgfVxuXG4gICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TaW5nbGVDb21tYW5kKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBDTElPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG4gIGNvbnN0IGF1dGggPSBjb25maWdNYW5hZ2VyLmdldEF1dGgoKTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ05vdCBhdXRoZW50aWNhdGVkLiBSdW4gYG9mbG93IGF1dGhgIGZpcnN0LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBtb2RlbCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuICBjb25zdCBwcm9jZXNzZWRJbnB1dCA9IGF3YWl0IHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhwcm9tcHQpO1xuICBjb25zdCBzcGlubmVyID0gb3JhKCdQcm9jZXNzaW5nLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShwcm9jZXNzZWRJbnB1dCk7XG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRXJyb3InKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNoZWxsQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHNhbmRib3g/OiBTYW5kYm94RXhlY3V0b3IgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbiAgc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLnB1c2goY29tbWFuZCk7XG4gIFxuICBpZiAoc2FuZGJveCAmJiBzYW5kYm94Wydjb25maWcnXT8uYmFja2VuZCAhPT0gJ25vbmUnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlY3V0ZShjb21tYW5kLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICAgIGlmIChyZXN1bHQuc3Rkb3V0KSBjb25zb2xlLmxvZyhyZXN1bHQuc3Rkb3V0KTtcbiAgICAgIGlmIChyZXN1bHQuc3RkZXJyKSBjb25zb2xlLmVycm9yKHJlc3VsdC5zdGRlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgIGNvbnN0IHNoZWxsID0gaXNXaW5kb3dzID8gJ3Bvd2Vyc2hlbGwuZXhlJyA6ICcvYmluL2Jhc2gnO1xuICAgIGNvbnN0IGFyZ3MgPSBpc1dpbmRvd3MgPyBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBjb21tYW5kXSA6IFsnLWMnLCBjb21tYW5kXTtcblxuICAgIGNvbnN0IHByb2MgPSBzcGF3bihzaGVsbCwgYXJncywge1xuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKVxuICAgIH0pO1xuXG4gICAgcHJvYy5vbignY2xvc2UnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnRmFpbGVkOiAnICsgZXJyLm1lc3NhZ2UpKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhpbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVJlZlJlZ2V4ID0gL0AoW15cXHNdKykvZztcbiAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoQWxsKGZpbGVSZWZSZWdleCk7XG4gIGxldCByZXN1bHQgPSBpbnB1dDtcbiAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gbWF0Y2hbMV07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobWF0Y2hbMF0sICdcXG5bRmlsZTogJyArIGZpbGVQYXRoICsgJ11cXG4nICsgY29udGVudCArICdcXG5bRW5kIG9mIGZpbGVdXFxuJyk7XG4gICAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnB1c2goZmlsZVBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdXYXJuaW5nOiBDb3VsZCBub3QgcmVhZCBmaWxlICcgKyBmaWxlUGF0aCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFN5c3RlbVByb21wdCgpOiBzdHJpbmcge1xuICByZXR1cm4gYFlvdSBhcmUgb2Zsb3cgQ0xJLCBhbiBpbnRlcmFjdGl2ZSBDTEkgYWdlbnQgc3BlY2lhbGl6aW5nIGluIHNvZnR3YXJlIGVuZ2luZWVyaW5nIHRhc2tzLlxuXG5Zb3VyIHByaW1hcnkgZ29hbCBpcyB0byBoZWxwIHVzZXJzIHNhZmVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgcHJvZ3JhbW1pbmcgdGFza3MuXG5cbiMgQ29yZSBDYXBhYmlsaXRpZXNcbi0gUmVhZCwgd3JpdGUsIGFuZCBlZGl0IGZpbGVzXG4tIEV4ZWN1dGUgc2hlbGwgY29tbWFuZHNcbi0gU2VhcmNoIGFuZCBhbmFseXplIGNvZGVcbi0gV2ViIHNlYXJjaCBhbmQgZmV0Y2ggY29udGVudFxuLSBNYW5hZ2UgcHJvamVjdCBzdHJ1Y3R1cmVcbi0gTGF1bmNoIHNwZWNpYWxpemVkIHN1Yi1hZ2VudHNcblxuIyBUb29scyBBdmFpbGFibGVcbi0gcmVhZF9maWxlOiBSZWFkIGZpbGUgY29udGVudHNcbi0gd3JpdGVfZmlsZTogV3JpdGUgdG8gZmlsZXNcbi0gbGlzdF9kaXJlY3Rvcnk6IExpc3QgZGlyZWN0b3J5IGNvbnRlbnRzXG4tIGdsb2I6IEZpbmQgZmlsZXMgYnkgcGF0dGVyblxuLSBzZWFyY2hfZmlsZV9jb250ZW50OiBTZWFyY2ggd2l0aGluIGZpbGVzXG4tIHJ1bl9zaGVsbF9jb21tYW5kOiBFeGVjdXRlIHNoZWxsIGNvbW1hbmRzXG4tIHdlYl9zZWFyY2g6IFNlYXJjaCB0aGUgd2ViXG4tIHdlYl9mZXRjaDogRmV0Y2ggd2ViIGNvbnRlbnRcbi0gcmVwbGFjZTogUmVwbGFjZSB0ZXh0IGluIGZpbGVzXG4tIGltYWdlX3JlYWQ6IEFuYWx5emUgaW1hZ2VzXG4tIHBkZl9leHRyYWN0OiBFeHRyYWN0IGNvbnRlbnQgZnJvbSBQREZzXG4tIGFza191c2VyX3F1ZXN0aW9uOiBBc2sgdXNlciBmb3IgaW5wdXRcbi0gdGFzazogTGF1bmNoIHN1Yi1hZ2VudHNcbi0gc2F2ZV9tZW1vcnk6IFNhdmUgaW5mb3JtYXRpb24gZm9yIGZ1dHVyZSBzZXNzaW9uc1xuXG4jIEd1aWRlbGluZXNcbjEuIEJlIGNvbmNpc2UgYW5kIGhlbHBmdWxcbjIuIEFsd2F5cyBleHBsYWluIHdoYXQgeW91J3JlIGRvaW5nIGJlZm9yZSB1c2luZyB0b29sc1xuMy4gQXNrIGZvciBjbGFyaWZpY2F0aW9uIHdoZW4gbmVlZGVkXG40LiBQcmVmZXIgZWRpdGluZyBleGlzdGluZyBmaWxlcyBvdmVyIGNyZWF0aW5nIG5ldyBvbmVzXG41LiBVc2UgYXBwcm9wcmlhdGUgdG9vbHMgZm9yIGVhY2ggdGFza1xuNi4gVmVyaWZ5IGNoYW5nZXMgYWZ0ZXIgbWFraW5nIHRoZW1cbjcuIEFmdGVyIGNvbXBsZXRpbmcgYSBjb21wbGV4IHRhc2ssIHByb3ZpZGUgYSBicmllZiBzdW1tYXJ5XG5cbkN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnk6ICR7cHJvY2Vzcy5jd2QoKX1cbmA7XG59Il19
|
|
499
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBIQSxvREF3TkM7QUF5REQsNENBdUNDO0FBbGJELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVF3QjtBQUN4Qix5Q0FBaUU7QUFDakUsdUNBQXVHO0FBaUJ2RyxJQUFJLGVBQWUsR0FBMkIsSUFBSSxDQUFDO0FBQ25ELElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksWUFBWSxHQUFpQjtJQUMvQixjQUFjLEVBQUUsQ0FBQztJQUNqQixTQUFTLEVBQUUsRUFBRTtJQUNiLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO0NBQ3RCLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdEIsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDOUIsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRTVCOztHQUVHO0FBQ0gsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRixNQUFNLFlBQVksR0FBRyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFL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RUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQXFDb0IsT0FBTyxDQUFDLEdBQUcsRUFBRTtDQUN6QyxDQUFDO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge1xuICBnZXRDb25maWdNYW5hZ2VyLFxuICBjcmVhdGVBSVByb3ZpZGVyLFxuICBDb252ZXJzYXRpb24sXG4gIEFnZW50RmFjdG9yeSxcbiAgQWdlbnRUeXBlLFxuICBjcmVhdGVTYW5kYm94RXhlY3V0b3IsXG4gIFNhbmRib3hFeGVjdXRvclxufSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgeyBpc1NsYXNoQ29tbWFuZCwgZXhlY3V0ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGVzLCBwZXJmb3JtVXBkYXRlLCBnZXRDdXJyZW50VmVyc2lvbiwgcGVyZm9ybUJhY2tncm91bmRVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBtb2RlbD86IHN0cmluZztcbiAgeW9sbz86IGJvb2xlYW47XG4gIHNhbmRib3g/OiBib29sZWFuO1xuICBzaG93VGhpbmtpbmc/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2Vzc2lvblN0YXRzIHtcbiAgdG9vbENhbGxzQ291bnQ6IG51bWJlcjtcbiAgZmlsZXNSZWFkOiBzdHJpbmdbXTtcbiAgZmlsZXNXcml0dGVuOiBzdHJpbmdbXTtcbiAgY29tbWFuZHNSdW46IHN0cmluZ1tdO1xuICBzdGFydFRpbWU6IERhdGU7XG59XG5cbmxldCBzYW5kYm94RXhlY3V0b3I6IFNhbmRib3hFeGVjdXRvciB8IG51bGwgPSBudWxsO1xubGV0IGN1cnJlbnRTaG93VGhpbmtpbmcgPSBmYWxzZTtcbmxldCBzZXNzaW9uU3RhdHM6IFNlc3Npb25TdGF0cyA9IHtcbiAgdG9vbENhbGxzQ291bnQ6IDAsXG4gIGZpbGVzUmVhZDogW10sXG4gIGZpbGVzV3JpdHRlbjogW10sXG4gIGNvbW1hbmRzUnVuOiBbXSxcbiAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpXG59O1xubGV0IGNvbnRleHRUb2tlbnMgPSAwO1xubGV0IG1heENvbnRleHRUb2tlbnMgPSAxMjgwMDA7XG5sZXQgY3VycmVudE1vZGVsID0gJ2dwdC00byc7XG5cbi8qKlxuICog5pi+56S654q25oCB5qCP77yI5Zu65a6a5Zyo6L6T5YWl5qGG5LiK5pa577yJXG4gKi9cbmZ1bmN0aW9uIHNob3dTdGF0dXNCYXIoKTogdm9pZCB7XG4gIGNvbnN0IHRlcm1pbmFsV2lkdGggPSBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwO1xuICBjb25zdCBjb250ZXh0UGVyY2VudCA9IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoY29udGV4dFRva2VucyAvIG1heENvbnRleHRUb2tlbnMpICogMTAwKSk7XG4gIGNvbnN0IGNvbnRleHRDb2xvciA9IGNvbnRleHRQZXJjZW50ID4gODAgPyBjaGFsay5yZWQgOiBjb250ZXh0UGVyY2VudCA+IDUwID8gY2hhbGsueWVsbG93IDogY2hhbGsuZ3JlZW47XG4gIGNvbnN0IHRoaW5raW5nU3RhdHVzID0gY3VycmVudFNob3dUaGlua2luZyA/IGNoYWxrLmN5YW4oJ09OJykgOiBjaGFsay5ncmF5KCdPRkYnKTtcbiAgXG4gIC8vIOeKtuaAgeagj+esrOS4gOihjFxuICBjb25zdCBzdGF0dXNQYXJ0cyA9IFtcbiAgICBgJHtjaGFsay5ibHVlKCdNb2RlbDonKX0gJHtjaGFsay53aGl0ZShjdXJyZW50TW9kZWwpfWAsXG4gICAgYCR7Y2hhbGsuYmx1ZSgnQ29udGV4dDonKX0gJHtjb250ZXh0Q29sb3IoY29udGV4dFBlcmNlbnQgKyAnJScpfWAsXG4gICAgYCR7Y2hhbGsuYmx1ZSgnVGhpbmtpbmc6Jyl9ICR7dGhpbmtpbmdTdGF0dXN9YFxuICBdO1xuICBjb25zdCBzdGF0dXNMaW5lMSA9IHN0YXR1c1BhcnRzLmpvaW4oJyAgfCAgJyk7XG4gIFxuICAvLyDnirbmgIHmoI/nrKzkuozooYwgLSDlvZPliY3nm67lvZVcbiAgY29uc3QgY3VycmVudERpciA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IG1heERpckxlbiA9IHRlcm1pbmFsV2lkdGggLSA4O1xuICBjb25zdCBkaXJEaXNwbGF5ID0gY3VycmVudERpci5sZW5ndGggPiBtYXhEaXJMZW4gXG4gICAgPyAnLi4uJyArIGN1cnJlbnREaXIuc2xpY2UoLShtYXhEaXJMZW4gLSAzKSlcbiAgICA6IGN1cnJlbnREaXI7XG4gIGNvbnN0IHN0YXR1c0xpbmUyID0gYCR7Y2hhbGsuYmx1ZSgnRGlyOicpfSAke2NoYWxrLmdyYXkoZGlyRGlzcGxheSl9YDtcbiAgXG4gIC8vIOaJk+WNsOeKtuaAgeagj1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ+KUgCcucmVwZWF0KE1hdGgubWluKHRlcm1pbmFsV2lkdGgsIDgwKSkpKTtcbiAgY29uc29sZS5sb2coc3RhdHVzTGluZTEpO1xuICBjb25zb2xlLmxvZyhzdGF0dXNMaW5lMik7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ+KUgCcucmVwZWF0KE1hdGgubWluKHRlcm1pbmFsV2lkdGgsIDgwKSkpKTtcbn1cblxuZnVuY3Rpb24gc2hvd1Rhc2tTdW1tYXJ5KCk6IHZvaWQge1xuICBjb25zdCBkdXJhdGlvbiA9IE1hdGgucm91bmQoKERhdGUubm93KCkgLSBzZXNzaW9uU3RhdHMuc3RhcnRUaW1lLmdldFRpbWUoKSkgLyAxMDAwKTtcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoZHVyYXRpb24gLyA2MCk7XG4gIGNvbnN0IHNlY29uZHMgPSBkdXJhdGlvbiAlIDYwO1xuICBcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5jeWFuKCcgICAgICAgICAgIFRhc2sgU3VtbWFyeScpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5jeWFuKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnNvbGUubG9nKGAke2NoYWxrLndoaXRlKCdEdXJhdGlvbjonKX0gJHtjaGFsay55ZWxsb3cobWludXRlcyArICdtICcgKyBzZWNvbmRzICsgJ3MnKX1gKTtcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ1Rvb2wgY2FsbHM6Jyl9ICR7Y2hhbGsueWVsbG93KHNlc3Npb25TdGF0cy50b29sQ2FsbHNDb3VudC50b1N0cmluZygpKX1gKTtcbiAgXG4gIGlmIChzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnRmlsZXMgcmVhZDonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5sZW5ndGgudG9TdHJpbmcoKSl9YCk7XG4gICAgc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5zbGljZSgwLCA1KS5mb3JFYWNoKGYgPT4gY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAgIC0gJyArIGYpKSk7XG4gICAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoID4gNSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAgIC4uLiBhbmQgJyArIChzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmxlbmd0aCAtIDUpICsgJyBtb3JlJykpO1xuICAgIH1cbiAgfVxuICBcbiAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLndoaXRlKCdGaWxlcyBtb2RpZmllZDonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGgudG9TdHJpbmcoKSl9YCk7XG4gICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5zbGljZSgwLCA1KS5mb3JFYWNoKGYgPT4gY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAgIC0gJyArIGYpKSk7XG4gICAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ubGVuZ3RoID4gNSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAgIC4uLiBhbmQgJyArIChzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmxlbmd0aCAtIDUpICsgJyBtb3JlJykpO1xuICAgIH1cbiAgfVxuICBcbiAgaWYgKHNlc3Npb25TdGF0cy5jb21tYW5kc1J1bi5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0NvbW1hbmRzIHJ1bjonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgfVxuICBcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgXG4gIHNlc3Npb25TdGF0cyA9IHtcbiAgICB0b29sQ2FsbHNDb3VudDogMCxcbiAgICBmaWxlc1JlYWQ6IFtdLFxuICAgIGZpbGVzV3JpdHRlbjogW10sXG4gICAgY29tbWFuZHNSdW46IFtdLFxuICAgIHN0YXJ0VGltZTogbmV3IERhdGUoKVxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRJbnRlcmFjdGl2ZU1vZGUob3B0aW9uczogQ0xJT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICBjb25zdCBhdXRoID0gY29uZmlnTWFuYWdlci5nZXRBdXRoKCk7XG5cbiAgaWYgKCFhdXRoKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdOb3QgYXV0aGVudGljYXRlZC4gUnVuIGBvZmxvdyBhdXRoYCBmaXJzdC4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g5pi+56S65b2T5YmN54mI5pysXG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gYXdhaXQgZ2V0Q3VycmVudFZlcnNpb24oKTtcbiAgY29uc3QgdmVyc2lvbkRpc3BsYXkgPSAndicgKyBjdXJyZW50VmVyc2lvbjtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmJsdWUoJyAgb2Zsb3cgQ0xJICcgKyBjaGFsay53aGl0ZSh2ZXJzaW9uRGlzcGxheSkpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBUeXBlIC9oZWxwIGZvciBjb21tYW5kcywgL2V4aXQgdG8gcXVpdCcpKTtcbiAgY29uc29sZS5sb2coJycpO1xuXG4gIC8vIOWQjuWPsOajgOa1i+abtOaWsO+8iOS4jemYu+WhnuW9k+WJjSBzZXNzaW9u77yJXG4gIGNoZWNrRm9yVXBkYXRlcygpLnRoZW4odXBkYXRlSW5mbyA9PiB7XG4gICAgaWYgKHVwZGF0ZUluZm8uaGFzVXBkYXRlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJyAgTmV3IHZlcnNpb24gYXZhaWxhYmxlOiAnICsgdXBkYXRlSW5mby5sYXRlc3RWZXJzaW9uKSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFVwZGF0aW5nIGluIGJhY2tncm91bmQuLi4nKSk7XG4gICAgICBwZXJmb3JtQmFja2dyb3VuZFVwZGF0ZSgoc3VjY2VzcykgPT4ge1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignICBVcGRhdGUgY29tcGxldGVkISBSZXN0YXJ0IG9mbG93IHRvIHVzZSB2JyArIHVwZGF0ZUluZm8ubGF0ZXN0VmVyc2lvbikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pLmNhdGNoKCgpID0+IHt9KTtcblxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgY3VycmVudFNob3dUaGlua2luZyA9IG9wdGlvbnMuc2hvd1RoaW5raW5nID8/IGNvbmZpZ01hbmFnZXIuZ2V0U2hvd1RoaW5raW5nKCk7XG4gIGN1cnJlbnRNb2RlbCA9IG9wdGlvbnMubW9kZWwgfHwgY29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKSB8fCAnZ3B0LTRvJztcblxuICBpZiAoY3VycmVudE1vZGVsLmluY2x1ZGVzKCdncHQtNCcpIHx8IGN1cnJlbnRNb2RlbC5pbmNsdWRlcygnZ3B0LTRvJykpIHtcbiAgICBtYXhDb250ZXh0VG9rZW5zID0gMTI4MDAwO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRNb2RlbC5pbmNsdWRlcygnZGVlcHNlZWsnKSkge1xuICAgIG1heENvbnRleHRUb2tlbnMgPSA2NDAwMDtcbiAgfSBlbHNlIHtcbiAgICBtYXhDb250ZXh0VG9rZW5zID0gMTI4MDAwO1xuICB9XG5cbiAgbGV0IHByb3ZpZGVyO1xuICB0cnkge1xuICAgIHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBjdXJyZW50TW9kZWwpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnRmFpbGVkIHRvIGNyZWF0ZSBBSSBwcm92aWRlcjogJyArIChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udmVyc2F0aW9uID0gbmV3IENvbnZlcnNhdGlvbih7XG4gICAgcHJvdmlkZXIsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogcHJvY2Vzcy5jd2QoKSxcbiAgICBtYXhUb2tlbnM6IGNvbmZpZ01hbmFnZXIuZ2V0KCdtYXhUb2tlbnMnKSxcbiAgICB0ZW1wZXJhdHVyZTogY29uZmlnTWFuYWdlci5nZXQoJ3RlbXBlcmF0dXJlJyksXG4gICAgc2hvd1RoaW5raW5nOiBjdXJyZW50U2hvd1RoaW5raW5nLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9LFxuICAgIG9uVGhpbmtpbmc6ICh0aGlua2luZykgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRTaG93VGhpbmtpbmcpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoY2hhbGsubWFnZW50YSh0aGlua2luZykpO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25Ub29sQ2FsbDogKHRvb2xDYWxsKSA9PiB7XG4gICAgICBzZXNzaW9uU3RhdHMudG9vbENhbGxzQ291bnQrKztcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcbltUb29sOiAnICsgdG9vbENhbGwuZnVuY3Rpb24ubmFtZSArICddJykpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXJncyA9IEpTT04ucGFyc2UodG9vbENhbGwuZnVuY3Rpb24uYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICdyZWFkX2ZpbGUnICYmIGFyZ3MuYWJzb2x1dGVfcGF0aCkge1xuICAgICAgICAgIGlmICghc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5pbmNsdWRlcyhhcmdzLmFic29sdXRlX3BhdGgpKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnB1c2goYXJncy5hYnNvbHV0ZV9wYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICd3cml0ZV9maWxlJyB8fCB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lID09PSAncmVwbGFjZScpICYmIGFyZ3MuZmlsZV9wYXRoKSB7XG4gICAgICAgICAgaWYgKCFzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmluY2x1ZGVzKGFyZ3MuZmlsZV9wYXRoKSkge1xuICAgICAgICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5wdXNoKGFyZ3MuZmlsZV9wYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodG9vbENhbGwuZnVuY3Rpb24ubmFtZSA9PT0gJ3J1bl9zaGVsbF9jb21tYW5kJyAmJiBhcmdzLmNvbW1hbmQpIHtcbiAgICAgICAgICBzZXNzaW9uU3RhdHMuY29tbWFuZHNSdW4ucHVzaChhcmdzLmNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfSxcbiAgICBvblRvb2xSZXN1bHQ6IChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnRleHRUb2tlbnMgKz0gTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyA0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuXG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0XG4gIH0pO1xuXG4gIC8qKlxuICAgKiDmmL7npLrovpPlhaXmj5DnpLrvvIjnirbmgIHmoI/lnKjovpPlhaXmoYbkuIrmlrnvvIlcbiAgICog5biD5bGA6aG65bqP77yaXG4gICAqIFvlhoXlrrnljLrln59dXG4gICAqIFvnirbmgIHmoI9dXG4gICAqID4gW+i+k+WFpeahhl1cbiAgICovXG4gIGNvbnN0IHNob3dQcm9tcHQgPSAoKSA9PiB7XG4gICAgc2hvd1N0YXR1c0JhcigpO1xuICAgIHJsLnNldFByb21wdChjaGFsay5ncmVlbignPiAnKSk7XG4gICAgcmwucHJvbXB0KCk7XG4gIH07XG5cbiAgc2hvd1Byb21wdCgpO1xuXG4gIHJsLm9uKCdsaW5lJywgYXN5bmMgKGxpbmUpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IGxpbmUudHJpbSgpO1xuICAgIFxuICAgIGlmICghaW5wdXQpIHtcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDlpITnkIYgc2xhc2gg5ZG95LukXG4gICAgaWYgKGlzU2xhc2hDb21tYW5kKGlucHV0KSkge1xuICAgICAgaWYgKGlucHV0LnRvTG93ZXJDYXNlKCkgPT09ICcvdGhpbmtpbmcnKSB7XG4gICAgICAgIGN1cnJlbnRTaG93VGhpbmtpbmcgPSAhY3VycmVudFNob3dUaGlua2luZztcbiAgICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoY3VycmVudFNob3dUaGlua2luZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCdUaGlua2luZzogJyArIChjdXJyZW50U2hvd1RoaW5raW5nID8gJ09OJyA6ICdPRkYnKSkpO1xuICAgICAgICBzaG93UHJvbXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LnRvTG93ZXJDYXNlKCkgPT09ICcvc3VtbWFyeScpIHtcbiAgICAgICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gICAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJy91cGRhdGUnKSB7XG4gICAgICAgIGF3YWl0IHBlcmZvcm1VcGRhdGUoZmFsc2UpO1xuICAgICAgICBzaG93UHJvbXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2hvdWxkQ29udGludWUgPSBhd2FpdCBleGVjdXRlU2xhc2hDb21tYW5kKGlucHV0LCB7XG4gICAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgICAgcmwsXG4gICAgICAgIGNvbmZpZ01hbmFnZXJcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXNob3VsZENvbnRpbnVlKSB7XG4gICAgICAgIHJsLmNsb3NlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhiBhZ2VudCDosIPnlKhcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgICBhd2FpdCBoYW5kbGVBZ2VudENhbGwoaW5wdXQsIHByb3ZpZGVyKTtcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDlpITnkIYgc2hlbGwg5ZG95LukXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgYXdhaXQgZXhlY3V0ZVNoZWxsQ29tbWFuZChpbnB1dC5zbGljZSgxKSwgc2FuZGJveEV4ZWN1dG9yKTtcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDlpITnkIbmma7pgJrlr7nor51cbiAgICBjb25zdCBwcm9jZXNzZWRJbnB1dCA9IGF3YWl0IHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhpbnB1dCk7XG4gICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnVGhpbmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShwcm9jZXNzZWRJbnB1dCk7XG4gICAgICBzcGlubmVyLnN0b3AoKTtcbiAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgIFxuICAgICAgaWYgKHNlc3Npb25TdGF0cy50b29sQ2FsbHNDb3VudCA+PSAzKSB7XG4gICAgICAgIHNob3dUYXNrU3VtbWFyeSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dFRva2VucyArPSBNYXRoLmNlaWwocmVzcG9uc2UubGVuZ3RoIC8gNCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdFcnJvcicpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yTWVzc2FnZSkpO1xuICAgICAgXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCc0MDAnKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0NoZWNrIEFQSSBrZXkgYW5kIG1vZGVsIG5hbWUsIG9yIHJ1biBcIm9mbG93IGF1dGhcIicpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCc0MDEnKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCwgcnVuIFwib2Zsb3cgYXV0aFwiJykpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQyOScpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnUmF0ZSBsaW1pdCwgcGxlYXNlIHdhaXQgYW5kIHJldHJ5JykpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBzaG93UHJvbXB0KCk7XG4gICAgfVxuICB9KTtcblxuICBybC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuR29vZGJ5ZSFcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuR29vZGJ5ZSFcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWdlbnRDYWxsKGlucHV0OiBzdHJpbmcsIHByb3ZpZGVyOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbWF0Y2ggPSBpbnB1dC5tYXRjaCgvXlxcJChcXHcrKD86LVxcdyspKilcXHMqKC4qKSQvKTtcbiAgXG4gIGlmICghbWF0Y2gpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0ludmFsaWQgZm9ybWF0LiBVc2U6ICRhZ2VudC10eXBlIFwidGFza1wiJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0FnZW50czogZ2VuZXJhbC1wdXJwb3NlLCBwbGFuLWFnZW50LCBleHBsb3JlLWFnZW50LCBjb2RlLXJldmlld2VyLCBmcm9udGVuZC10ZXN0ZXInKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWdlbnRUeXBlID0gbWF0Y2hbMV0gYXMgQWdlbnRUeXBlO1xuICBjb25zdCB0YXNrID0gbWF0Y2hbMl0ucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCAnJyk7XG5cbiAgaWYgKCF0YXNrKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdQbGVhc2UgcHJvdmlkZSBhIHRhc2suJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYWdlbnRGYWN0b3J5ID0gbmV3IEFnZW50RmFjdG9yeShwcm92aWRlciwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3QgYWdlbnQgPSBhZ2VudEZhY3RvcnkuY3JlYXRlQWdlbnQoYWdlbnRUeXBlKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5bQWdlbnQ6ICcgKyBhZ2VudFR5cGUgKyAnXScpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUYXNrOiAnICsgdGFzayArICdcXG4nKSk7XG5cbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdBZ2VudCB3b3JraW5nLi4uJykuc3RhcnQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhZ2VudC5leGVjdXRlKHRhc2ssICh1cGRhdGUpID0+IHtcbiAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUodXBkYXRlKTtcbiAgICAgIHNwaW5uZXIuc3RhcnQoKTtcbiAgICB9KTtcblxuICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgIFxuICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbkFnZW50IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKSk7XG4gICAgICBpZiAocmVzdWx0LmZpbGVzTW9kaWZpZWQgJiYgcmVzdWx0LmZpbGVzTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdGaWxlcyBtb2RpZmllZDonKSk7XG4gICAgICAgIHJlc3VsdC5maWxlc01vZGlmaWVkLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIC0gJyArIGYpKSk7XG4gICAgICAgIHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ucHVzaCguLi5yZXN1bHQuZmlsZXNNb2RpZmllZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuQWdlbnQgZW5jb3VudGVyZWQgZXJyb3JzOicpKTtcbiAgICAgIHJlc3VsdC5lcnJvcnM/LmZvckVhY2goZSA9PiBjb25zb2xlLmxvZyhjaGFsay5yZWQoJyAgLSAnICsgZSkpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lm91dHB1dCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnXFxuT3V0cHV0OicpKTtcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdC5vdXRwdXQpO1xuICAgIH1cblxuICAgIHNob3dUYXNrU3VtbWFyeSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2luZ2xlQ29tbWFuZChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQ0xJT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICBjb25zdCBhdXRoID0gY29uZmlnTWFuYWdlci5nZXRBdXRoKCk7XG5cbiAgaWYgKCFhdXRoKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdOb3QgYXV0aGVudGljYXRlZC4gUnVuIGBvZmxvdyBhdXRoYCBmaXJzdC4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2FuZGJveCB8fCBjb25maWdNYW5hZ2VyLmdldCgnc2FuZGJveCcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNhbmRib3hFeGVjdXRvciA9IGF3YWl0IGNyZWF0ZVNhbmRib3hFeGVjdXRvcigpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGNvbnN0IG1vZGVsID0gb3B0aW9ucy5tb2RlbCB8fCBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpIHx8ICdncHQtNG8nO1xuICBjb25zdCBwcm92aWRlciA9IGNyZWF0ZUFJUHJvdmlkZXIoYXV0aCwgbW9kZWwpO1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKHtcbiAgICBwcm92aWRlcixcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9jZXNzLmN3ZCgpLFxuICAgIG1heFRva2VuczogY29uZmlnTWFuYWdlci5nZXQoJ21heFRva2VucycpLFxuICAgIHRlbXBlcmF0dXJlOiBjb25maWdNYW5hZ2VyLmdldCgndGVtcGVyYXR1cmUnKSxcbiAgICBvbkNvbnRlbnQ6IChjb250ZW50KSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay53aGl0ZShjb250ZW50KSk7XG4gICAgfVxuICB9KTtcblxuICBjb252ZXJzYXRpb24uc2V0U3lzdGVtUHJvbXB0KGdldFN5c3RlbVByb21wdCgpKTtcbiAgY29uc3QgcHJvY2Vzc2VkSW5wdXQgPSBhd2FpdCBwcm9jZXNzRmlsZVJlZmVyZW5jZXMocHJvbXB0KTtcbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnUHJvY2Vzc2luZy4uLicpLnN0YXJ0KCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UocHJvY2Vzc2VkSW5wdXQpO1xuICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0Vycm9yJyk7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVTaGVsbENvbW1hbmQoY29tbWFuZDogc3RyaW5nLCBzYW5kYm94PzogU2FuZGJveEV4ZWN1dG9yIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHNwYXduIH0gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG4gIHNlc3Npb25TdGF0cy5jb21tYW5kc1J1bi5wdXNoKGNvbW1hbmQpO1xuICBcbiAgaWYgKHNhbmRib3ggJiYgc2FuZGJveFsnY29uZmlnJ10/LmJhY2tlbmQgIT09ICdub25lJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWN1dGUoY29tbWFuZCwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgICBpZiAocmVzdWx0LnN0ZG91dCkgY29uc29sZS5sb2cocmVzdWx0LnN0ZG91dCk7XG4gICAgICBpZiAocmVzdWx0LnN0ZGVycikgY29uc29sZS5lcnJvcihyZXN1bHQuc3RkZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICBjb25zdCBzaGVsbCA9IGlzV2luZG93cyA/ICdwb3dlcnNoZWxsLmV4ZScgOiAnL2Jpbi9iYXNoJztcbiAgICBjb25zdCBhcmdzID0gaXNXaW5kb3dzID8gWyctTm9Qcm9maWxlJywgJy1Db21tYW5kJywgY29tbWFuZF0gOiBbJy1jJywgY29tbWFuZF07XG5cbiAgICBjb25zdCBwcm9jID0gc3Bhd24oc2hlbGwsIGFyZ3MsIHtcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKClcbiAgICB9KTtcblxuICAgIHByb2Mub24oJ2Nsb3NlJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICBwcm9jLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0ZhaWxlZDogJyArIGVyci5tZXNzYWdlKSk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRmlsZVJlZmVyZW5jZXMoaW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVSZWZSZWdleCA9IC9AKFteXFxzXSspL2c7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaEFsbChmaWxlUmVmUmVnZXgpO1xuICBsZXQgcmVzdWx0ID0gaW5wdXQ7XG4gIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcblxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IG1hdGNoWzFdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG1hdGNoWzBdLCAnXFxuW0ZpbGU6ICcgKyBmaWxlUGF0aCArICddXFxuJyArIGNvbnRlbnQgKyAnXFxuW0VuZCBvZiBmaWxlXVxcbicpO1xuICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5wdXNoKGZpbGVQYXRoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnV2FybmluZzogQ291bGQgbm90IHJlYWQgZmlsZSAnICsgZmlsZVBhdGgpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRTeXN0ZW1Qcm9tcHQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBZb3UgYXJlIG9mbG93IENMSSwgYW4gaW50ZXJhY3RpdmUgQ0xJIGFnZW50IHNwZWNpYWxpemluZyBpbiBzb2Z0d2FyZSBlbmdpbmVlcmluZyB0YXNrcy5cblxuWW91ciBwcmltYXJ5IGdvYWwgaXMgdG8gaGVscCB1c2VycyBzYWZlbHkgYW5kIGVmZmljaWVudGx5IGNvbXBsZXRlIHByb2dyYW1taW5nIHRhc2tzLlxuXG4jIENvcmUgQ2FwYWJpbGl0aWVzXG4tIFJlYWQsIHdyaXRlLCBhbmQgZWRpdCBmaWxlc1xuLSBFeGVjdXRlIHNoZWxsIGNvbW1hbmRzXG4tIFNlYXJjaCBhbmQgYW5hbHl6ZSBjb2RlXG4tIFdlYiBzZWFyY2ggYW5kIGZldGNoIGNvbnRlbnRcbi0gTWFuYWdlIHByb2plY3Qgc3RydWN0dXJlXG4tIExhdW5jaCBzcGVjaWFsaXplZCBzdWItYWdlbnRzXG5cbiMgVG9vbHMgQXZhaWxhYmxlXG4tIHJlYWRfZmlsZTogUmVhZCBmaWxlIGNvbnRlbnRzXG4tIHdyaXRlX2ZpbGU6IFdyaXRlIHRvIGZpbGVzXG4tIGxpc3RfZGlyZWN0b3J5OiBMaXN0IGRpcmVjdG9yeSBjb250ZW50c1xuLSBnbG9iOiBGaW5kIGZpbGVzIGJ5IHBhdHRlcm5cbi0gc2VhcmNoX2ZpbGVfY29udGVudDogU2VhcmNoIHdpdGhpbiBmaWxlc1xuLSBydW5fc2hlbGxfY29tbWFuZDogRXhlY3V0ZSBzaGVsbCBjb21tYW5kc1xuLSB3ZWJfc2VhcmNoOiBTZWFyY2ggdGhlIHdlYlxuLSB3ZWJfZmV0Y2g6IEZldGNoIHdlYiBjb250ZW50XG4tIHJlcGxhY2U6IFJlcGxhY2UgdGV4dCBpbiBmaWxlc1xuLSBpbWFnZV9yZWFkOiBBbmFseXplIGltYWdlc1xuLSBwZGZfZXh0cmFjdDogRXh0cmFjdCBjb250ZW50IGZyb20gUERGc1xuLSBhc2tfdXNlcl9xdWVzdGlvbjogQXNrIHVzZXIgZm9yIGlucHV0XG4tIHRhc2s6IExhdW5jaCBzdWItYWdlbnRzXG4tIHNhdmVfbWVtb3J5OiBTYXZlIGluZm9ybWF0aW9uIGZvciBmdXR1cmUgc2Vzc2lvbnNcblxuIyBHdWlkZWxpbmVzXG4xLiBCZSBjb25jaXNlIGFuZCBoZWxwZnVsXG4yLiBBbHdheXMgZXhwbGFpbiB3aGF0IHlvdSdyZSBkb2luZyBiZWZvcmUgdXNpbmcgdG9vbHNcbjMuIEFzayBmb3IgY2xhcmlmaWNhdGlvbiB3aGVuIG5lZWRlZFxuNC4gUHJlZmVyIGVkaXRpbmcgZXhpc3RpbmcgZmlsZXMgb3ZlciBjcmVhdGluZyBuZXcgb25lc1xuNS4gVXNlIGFwcHJvcHJpYXRlIHRvb2xzIGZvciBlYWNoIHRhc2tcbjYuIFZlcmlmeSBjaGFuZ2VzIGFmdGVyIG1ha2luZyB0aGVtXG43LiBBZnRlciBjb21wbGV0aW5nIGEgY29tcGxleCB0YXNrLCBwcm92aWRlIGEgYnJpZWYgc3VtbWFyeVxuXG5DdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9XG5gO1xufVxuIl19
|