@oflow-ai/oflow-cli 0.1.4 → 0.1.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/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
- function drawStatusBar() {
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
- const statusLine1 = [
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
- ].join(' | ');
72
+ ];
73
+ const statusLine1 = statusParts.join(' | ');
74
+ // 状态栏第二行 - 当前目录
69
75
  const currentDir = process.cwd();
70
- const dirDisplay = currentDir.length > terminalWidth - 10
71
- ? '...' + currentDir.slice(-(terminalWidth - 13))
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
- console.log(chalk_1.default.gray('─'.repeat(Math.min(terminalWidth, 60))));
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, 60))));
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
- // 后台检测更新(不阻塞当前 session)
132
- let updateNoticeShown = false;
133
- (0, updater_1.checkForUpdates)().then(updateInfo => {
134
- if (updateInfo.hasUpdate) {
135
- console.log(chalk_1.default.yellow(' New version available: ' + updateInfo.latestVersion));
136
- console.log(chalk_1.default.gray(' Updating in background...'));
137
- // 后台更新
138
- (0, updater_1.performBackgroundUpdate)((success) => {
139
- if (success && !updateNoticeShown) {
140
- updateNoticeShown = true;
141
- console.log('');
142
- console.log(chalk_1.default.green(' Update completed! Restart oflow to use v' + updateInfo.latestVersion));
143
- console.log('');
144
- }
145
- });
146
- }
147
- }).catch(() => {
148
- // 忽略更新检查错误
149
- });
140
+ // 检测更新
141
+ let updateInfo = null;
142
+ try {
143
+ updateInfo = await (0, updater_1.checkForUpdates)();
144
+ }
145
+ catch {
146
+ // 忽略检测错误
147
+ }
148
+ if (updateInfo && updateInfo.hasUpdate) {
149
+ console.log(chalk_1.default.yellow(' New version available: ' + updateInfo.latestVersion));
150
+ console.log(chalk_1.default.gray(' Run /update to install the latest version'));
151
+ console.log('');
152
+ }
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('\nUsing tool: ' + toolCall.function.name));
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('\nStarting ' + agentType + ' agent...'));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBIQSxvREF3TkM7QUF5REQsNENBdUNDO0FBbGJELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVF3QjtBQUN4Qix5Q0FBaUU7QUFDakUsdUNBQThFO0FBaUI5RSxJQUFJLGVBQWUsR0FBMkIsSUFBSSxDQUFDO0FBQ25ELElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksWUFBWSxHQUFpQjtJQUMvQixjQUFjLEVBQUUsQ0FBQztJQUNqQixTQUFTLEVBQUUsRUFBRTtJQUNiLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO0NBQ3RCLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdEIsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDOUIsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRTVCOztHQUVHO0FBQ0gsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRixNQUFNLFlBQVksR0FBRyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFL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cG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge1xuICBnZXRDb25maWdNYW5hZ2VyLFxuICBjcmVhdGVBSVByb3ZpZGVyLFxuICBDb252ZXJzYXRpb24sXG4gIEFnZW50RmFjdG9yeSxcbiAgQWdlbnRUeXBlLFxuICBjcmVhdGVTYW5kYm94RXhlY3V0b3IsXG4gIFNhbmRib3hFeGVjdXRvclxufSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgeyBpc1NsYXNoQ29tbWFuZCwgZXhlY3V0ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGVzLCBwZXJmb3JtVXBkYXRlLCBnZXRDdXJyZW50VmVyc2lvbiB9IGZyb20gJy4vdXBkYXRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG1vZGVsPzogc3RyaW5nO1xuICB5b2xvPzogYm9vbGVhbjtcbiAgc2FuZGJveD86IGJvb2xlYW47XG4gIHNob3dUaGlua2luZz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTZXNzaW9uU3RhdHMge1xuICB0b29sQ2FsbHNDb3VudDogbnVtYmVyO1xuICBmaWxlc1JlYWQ6IHN0cmluZ1tdO1xuICBmaWxlc1dyaXR0ZW46IHN0cmluZ1tdO1xuICBjb21tYW5kc1J1bjogc3RyaW5nW107XG4gIHN0YXJ0VGltZTogRGF0ZTtcbn1cblxubGV0IHNhbmRib3hFeGVjdXRvcjogU2FuZGJveEV4ZWN1dG9yIHwgbnVsbCA9IG51bGw7XG5sZXQgY3VycmVudFNob3dUaGlua2luZyA9IGZhbHNlO1xubGV0IHNlc3Npb25TdGF0czogU2Vzc2lvblN0YXRzID0ge1xuICB0b29sQ2FsbHNDb3VudDogMCxcbiAgZmlsZXNSZWFkOiBbXSxcbiAgZmlsZXNXcml0dGVuOiBbXSxcbiAgY29tbWFuZHNSdW46IFtdLFxuICBzdGFydFRpbWU6IG5ldyBEYXRlKClcbn07XG5sZXQgY29udGV4dFRva2VucyA9IDA7XG5sZXQgbWF4Q29udGV4dFRva2VucyA9IDEyODAwMDtcbmxldCBjdXJyZW50TW9kZWwgPSAnZ3B0LTRvJztcblxuLyoqXG4gKiDmmL7npLrnirbmgIHmoI/vvIjlm7rlrprlnKjovpPlhaXmoYbkuIrmlrnvvIlcbiAqL1xuZnVuY3Rpb24gc2hvd1N0YXR1c0JhcigpOiB2b2lkIHtcbiAgY29uc3QgdGVybWluYWxXaWR0aCA9IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODA7XG4gIGNvbnN0IGNvbnRleHRQZXJjZW50ID0gTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKChjb250ZXh0VG9rZW5zIC8gbWF4Q29udGV4dFRva2VucykgKiAxMDApKTtcbiAgY29uc3QgY29udGV4dENvbG9yID0gY29udGV4dFBlcmNlbnQgPiA4MCA/IGNoYWxrLnJlZCA6IGNvbnRleHRQZXJjZW50ID4gNTAgPyBjaGFsay55ZWxsb3cgOiBjaGFsay5ncmVlbjtcbiAgY29uc3QgdGhpbmtpbmdTdGF0dXMgPSBjdXJyZW50U2hvd1RoaW5raW5nID8gY2hhbGsuY3lhbignT04nKSA6IGNoYWxrLmdyYXkoJ09GRicpO1xuICBcbiAgLy8g54q25oCB5qCP56ys5LiA6KGMXG4gIGNvbnN0IHN0YXR1c1BhcnRzID0gW1xuICAgIGAke2NoYWxrLmJsdWUoJ01vZGVsOicpfSAke2NoYWxrLndoaXRlKGN1cnJlbnRNb2RlbCl9YCxcbiAgICBgJHtjaGFsay5ibHVlKCdDb250ZXh0OicpfSAke2NvbnRleHRDb2xvcihjb250ZXh0UGVyY2VudCArICclJyl9YCxcbiAgICBgJHtjaGFsay5ibHVlKCdUaGlua2luZzonKX0gJHt0aGlua2luZ1N0YXR1c31gXG4gIF07XG4gIGNvbnN0IHN0YXR1c0xpbmUxID0gc3RhdHVzUGFydHMuam9pbignICB8ICAnKTtcbiAgXG4gIC8vIOeKtuaAgeagj+esrOS6jOihjCAtIOW9k+WJjeebruW9lVxuICBjb25zdCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWF4RGlyTGVuID0gdGVybWluYWxXaWR0aCAtIDg7XG4gIGNvbnN0IGRpckRpc3BsYXkgPSBjdXJyZW50RGlyLmxlbmd0aCA+IG1heERpckxlbiBcbiAgICA/ICcuLi4nICsgY3VycmVudERpci5zbGljZSgtKG1heERpckxlbiAtIDMpKVxuICAgIDogY3VycmVudERpcjtcbiAgY29uc3Qgc3RhdHVzTGluZTIgPSBgJHtjaGFsay5ibHVlKCdEaXI6Jyl9ICR7Y2hhbGsuZ3JheShkaXJEaXNwbGF5KX1gO1xuICBcbiAgLy8g5omT5Y2w54q25oCB5qCPXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgODApKSkpO1xuICBjb25zb2xlLmxvZyhzdGF0dXNMaW5lMSk7XG4gIGNvbnNvbGUubG9nKHN0YXR1c0xpbmUyKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgODApKSkpO1xufVxuXG5mdW5jdGlvbiBzaG93VGFza1N1bW1hcnkoKTogdm9pZCB7XG4gIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHNlc3Npb25TdGF0cy5zdGFydFRpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAvIDYwKTtcbiAgY29uc3Qgc2Vjb25kcyA9IGR1cmF0aW9uICUgNjA7XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJyAgICAgICAgICAgVGFzayBTdW1tYXJ5JykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0R1cmF0aW9uOicpfSAke2NoYWxrLnllbGxvdyhtaW51dGVzICsgJ20gJyArIHNlY29uZHMgKyAncycpfWApO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnVG9vbCBjYWxsczonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50LnRvU3RyaW5nKCkpfWApO1xuICBcbiAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLndoaXRlKCdGaWxlcyByZWFkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0ZpbGVzIG1vZGlmaWVkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnQ29tbWFuZHMgcnVuOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuY29tbWFuZHNSdW4ubGVuZ3RoLnRvU3RyaW5nKCkpfWApO1xuICB9XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBcbiAgc2Vzc2lvblN0YXRzID0ge1xuICAgIHRvb2xDYWxsc0NvdW50OiAwLFxuICAgIGZpbGVzUmVhZDogW10sXG4gICAgZmlsZXNXcml0dGVuOiBbXSxcbiAgICBjb21tYW5kc1J1bjogW10sXG4gICAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydEludGVyYWN0aXZlTW9kZShvcHRpb25zOiBDTElPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG4gIGNvbnN0IGF1dGggPSBjb25maWdNYW5hZ2VyLmdldEF1dGgoKTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ05vdCBhdXRoZW50aWNhdGVkLiBSdW4gYG9mbG93IGF1dGhgIGZpcnN0LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDmmL7npLrlvZPliY3niYjmnKxcbiAgY29uc3QgY3VycmVudFZlcnNpb24gPSBhd2FpdCBnZXRDdXJyZW50VmVyc2lvbigpO1xuICBjb25zdCB2ZXJzaW9uRGlzcGxheSA9ICd2JyArIGN1cnJlbnRWZXJzaW9uO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuYmx1ZSgnICBvZmxvdyBDTEkgJyArIGNoYWxrLndoaXRlKHZlcnNpb25EaXNwbGF5KSkpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFR5cGUgL2hlbHAgZm9yIGNvbW1hbmRzLCAvZXhpdCB0byBxdWl0JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG5cbiAgLy8g5qOA5rWL5pu05pawXG4gIGxldCB1cGRhdGVJbmZvOiB7IGhhc1VwZGF0ZTogYm9vbGVhbjsgbGF0ZXN0VmVyc2lvbjogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgdHJ5IHtcbiAgICB1cGRhdGVJbmZvID0gYXdhaXQgY2hlY2tGb3JVcGRhdGVzKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIOW/veeVpeajgOa1i+mUmeivr1xuICB9XG4gIFxuICBpZiAodXBkYXRlSW5mbyAmJiB1cGRhdGVJbmZvLmhhc1VwZGF0ZSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnICBOZXcgdmVyc2lvbiBhdmFpbGFibGU6ICcgKyB1cGRhdGVJbmZvLmxhdGVzdFZlcnNpb24pKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFJ1biAvdXBkYXRlIHRvIGluc3RhbGwgdGhlIGxhdGVzdCB2ZXJzaW9uJykpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNhbmRib3ggfHwgY29uZmlnTWFuYWdlci5nZXQoJ3NhbmRib3gnKSkge1xuICAgIHRyeSB7XG4gICAgICBzYW5kYm94RXhlY3V0b3IgPSBhd2FpdCBjcmVhdGVTYW5kYm94RXhlY3V0b3IoKTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBjdXJyZW50U2hvd1RoaW5raW5nID0gb3B0aW9ucy5zaG93VGhpbmtpbmcgPz8gY29uZmlnTWFuYWdlci5nZXRTaG93VGhpbmtpbmcoKTtcbiAgY3VycmVudE1vZGVsID0gb3B0aW9ucy5tb2RlbCB8fCBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpIHx8ICdncHQtNG8nO1xuXG4gIGlmIChjdXJyZW50TW9kZWwuaW5jbHVkZXMoJ2dwdC00JykgfHwgY3VycmVudE1vZGVsLmluY2x1ZGVzKCdncHQtNG8nKSkge1xuICAgIG1heENvbnRleHRUb2tlbnMgPSAxMjgwMDA7XG4gIH0gZWxzZSBpZiAoY3VycmVudE1vZGVsLmluY2x1ZGVzKCdkZWVwc2VlaycpKSB7XG4gICAgbWF4Q29udGV4dFRva2VucyA9IDY0MDAwO1xuICB9IGVsc2Uge1xuICAgIG1heENvbnRleHRUb2tlbnMgPSAxMjgwMDA7XG4gIH1cblxuICBsZXQgcHJvdmlkZXI7XG4gIHRyeSB7XG4gICAgcHJvdmlkZXIgPSBjcmVhdGVBSVByb3ZpZGVyKGF1dGgsIGN1cnJlbnRNb2RlbCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdGYWlsZWQgdG8gY3JlYXRlIEFJIHByb3ZpZGVyOiAnICsgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKHtcbiAgICBwcm92aWRlcixcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9jZXNzLmN3ZCgpLFxuICAgIG1heFRva2VuczogY29uZmlnTWFuYWdlci5nZXQoJ21heFRva2VucycpLFxuICAgIHRlbXBlcmF0dXJlOiBjb25maWdNYW5hZ2VyLmdldCgndGVtcGVyYXR1cmUnKSxcbiAgICBzaG93VGhpbmtpbmc6IGN1cnJlbnRTaG93VGhpbmtpbmcsXG4gICAgb25Db250ZW50OiAoY29udGVudCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoY2hhbGsud2hpdGUoY29udGVudCkpO1xuICAgIH0sXG4gICAgb25UaGlua2luZzogKHRoaW5raW5nKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFNob3dUaGlua2luZykge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay5tYWdlbnRhKHRoaW5raW5nKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblRvb2xDYWxsOiAodG9vbENhbGwpID0+IHtcbiAgICAgIHNlc3Npb25TdGF0cy50b29sQ2FsbHNDb3VudCsrO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignXFxuW1Rvb2w6ICcgKyB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lICsgJ10nKSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhcmdzID0gSlNPTi5wYXJzZSh0b29sQ2FsbC5mdW5jdGlvbi5hcmd1bWVudHMpO1xuICAgICAgICBpZiAodG9vbENhbGwuZnVuY3Rpb24ubmFtZSA9PT0gJ3JlYWRfZmlsZScgJiYgYXJncy5hYnNvbHV0ZV9wYXRoKSB7XG4gICAgICAgICAgaWYgKCFzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmluY2x1ZGVzKGFyZ3MuYWJzb2x1dGVfcGF0aCkpIHtcbiAgICAgICAgICAgIHNlc3Npb25TdGF0cy5maWxlc1JlYWQucHVzaChhcmdzLmFic29sdXRlX3BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgodG9vbENhbGwuZnVuY3Rpb24ubmFtZSA9PT0gJ3dyaXRlX2ZpbGUnIHx8IHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICdyZXBsYWNlJykgJiYgYXJncy5maWxlX3BhdGgpIHtcbiAgICAgICAgICBpZiAoIXNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4uaW5jbHVkZXMoYXJncy5maWxlX3BhdGgpKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLnB1c2goYXJncy5maWxlX3BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0b29sQ2FsbC5mdW5jdGlvbi5uYW1lID09PSAncnVuX3NoZWxsX2NvbW1hbmQnICYmIGFyZ3MuY29tbWFuZCkge1xuICAgICAgICAgIHNlc3Npb25TdGF0cy5jb21tYW5kc1J1bi5wdXNoKGFyZ3MuY29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge31cbiAgICB9LFxuICAgIG9uVG9vbFJlc3VsdDogKHJlc3VsdCkgPT4ge1xuICAgICAgY29udGV4dFRva2VucyArPSBNYXRoLmNlaWwocmVzdWx0Lmxlbmd0aCAvIDQpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29udmVyc2F0aW9uLnNldFN5c3RlbVByb21wdChnZXRTeXN0ZW1Qcm9tcHQoKSk7XG5cbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgfSk7XG5cbiAgLyoqXG4gICAqIOaYvuekuui+k+WFpeaPkOekuu+8iOeKtuaAgeagj+WcqOi+k+WFpeahhuS4iuaWue+8iVxuICAgKiDluIPlsYDpobrluo/vvJpcbiAgICogW+WGheWuueWMuuWfn11cbiAgICogW+eKtuaAgeagj11cbiAgICogPiBb6L6T5YWl5qGGXVxuICAgKi9cbiAgY29uc3Qgc2hvd1Byb21wdCA9ICgpID0+IHtcbiAgICBzaG93U3RhdHVzQmFyKCk7XG4gICAgcmwuc2V0UHJvbXB0KGNoYWxrLmdyZWVuKCc+ICcpKTtcbiAgICBybC5wcm9tcHQoKTtcbiAgfTtcblxuICBzaG93UHJvbXB0KCk7XG5cbiAgcmwub24oJ2xpbmUnLCBhc3luYyAobGluZSkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gbGluZS50cmltKCk7XG4gICAgXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhiBzbGFzaCDlkb3ku6RcbiAgICBpZiAoaXNTbGFzaENvbW1hbmQoaW5wdXQpKSB7XG4gICAgICBpZiAoaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJy90aGlua2luZycpIHtcbiAgICAgICAgY3VycmVudFNob3dUaGlua2luZyA9ICFjdXJyZW50U2hvd1RoaW5raW5nO1xuICAgICAgICBjb25maWdNYW5hZ2VyLnNldFNob3dUaGlua2luZyhjdXJyZW50U2hvd1RoaW5raW5nKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1RoaW5raW5nOiAnICsgKGN1cnJlbnRTaG93VGhpbmtpbmcgPyAnT04nIDogJ09GRicpKSk7XG4gICAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJy9zdW1tYXJ5Jykge1xuICAgICAgICBzaG93VGFza1N1bW1hcnkoKTtcbiAgICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnB1dC50b0xvd2VyQ2FzZSgpID09PSAnL3VwZGF0ZScpIHtcbiAgICAgICAgYXdhaXQgcGVyZm9ybVVwZGF0ZShmYWxzZSk7XG4gICAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzaG91bGRDb250aW51ZSA9IGF3YWl0IGV4ZWN1dGVTbGFzaENvbW1hbmQoaW5wdXQsIHtcbiAgICAgICAgY29udmVyc2F0aW9uLFxuICAgICAgICBybCxcbiAgICAgICAgY29uZmlnTWFuYWdlclxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghc2hvdWxkQ29udGludWUpIHtcbiAgICAgICAgcmwuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBzaG93UHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g5aSE55CGIGFnZW50IOiwg+eUqFxuICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKCckJykpIHtcbiAgICAgIGF3YWl0IGhhbmRsZUFnZW50Q2FsbChpbnB1dCwgcHJvdmlkZXIpO1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhiBzaGVsbCDlkb3ku6RcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnIScpKSB7XG4gICAgICBhd2FpdCBleGVjdXRlU2hlbGxDb21tYW5kKGlucHV0LnNsaWNlKDEpLCBzYW5kYm94RXhlY3V0b3IpO1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhuaZrumAmuWvueivnVxuICAgIGNvbnN0IHByb2Nlc3NlZElucHV0ID0gYXdhaXQgcHJvY2Vzc0ZpbGVSZWZlcmVuY2VzKGlucHV0KTtcbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdUaGlua2luZy4uLicpLnN0YXJ0KCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKHByb2Nlc3NlZElucHV0KTtcbiAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgXG4gICAgICBpZiAoc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50ID49IDMpIHtcbiAgICAgICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0VG9rZW5zICs9IE1hdGguY2VpbChyZXNwb25zZS5sZW5ndGggLyA0KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgc2hvd1Byb21wdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0Vycm9yJyk7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3JNZXNzYWdlKSk7XG4gICAgICBcbiAgICAgIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQwMCcpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQ2hlY2sgQVBJIGtleSBhbmQgbW9kZWwgbmFtZSwgb3IgcnVuIFwib2Zsb3cgYXV0aFwiJykpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQwMScpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQXV0aGVudGljYXRpb24gZmFpbGVkLCBydW4gXCJvZmxvdyBhdXRoXCInKSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDI5JykpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdSYXRlIGxpbWl0LCBwbGVhc2Ugd2FpdCBhbmQgcmV0cnknKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJsLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllIVxcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xuXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllIVxcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBZ2VudENhbGwoaW5wdXQ6IHN0cmluZywgcHJvdmlkZXI6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKC9eXFwkKFxcdysoPzotXFx3KykqKVxccyooLiopJC8pO1xuICBcbiAgaWYgKCFtYXRjaCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnSW52YWxpZCBmb3JtYXQuIFVzZTogJGFnZW50LXR5cGUgXCJ0YXNrXCInKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnQWdlbnRzOiBnZW5lcmFsLXB1cnBvc2UsIHBsYW4tYWdlbnQsIGV4cGxvcmUtYWdlbnQsIGNvZGUtcmV2aWV3ZXIsIGZyb250ZW5kLXRlc3RlcicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZ2VudFR5cGUgPSBtYXRjaFsxXSBhcyBBZ2VudFR5cGU7XG4gIGNvbnN0IHRhc2sgPSBtYXRjaFsyXS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICBpZiAoIXRhc2spIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1BsZWFzZSBwcm92aWRlIGEgdGFzay4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZ2VudEZhY3RvcnkgPSBuZXcgQWdlbnRGYWN0b3J5KHByb3ZpZGVyLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICBjb25zdCBhZ2VudCA9IGFnZW50RmFjdG9yeS5jcmVhdGVBZ2VudChhZ2VudFR5cGUpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcbltBZ2VudDogJyArIGFnZW50VHlwZSArICddJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1Rhc2s6ICcgKyB0YXNrICsgJ1xcbicpKTtcblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0FnZW50IHdvcmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50LmV4ZWN1dGUodGFzaywgKHVwZGF0ZSkgPT4ge1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh1cGRhdGUpO1xuICAgICAgc3Bpbm5lci5zdGFydCgpO1xuICAgIH0pO1xuXG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxuQWdlbnQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpKTtcbiAgICAgIGlmIChyZXN1bHQuZmlsZXNNb2RpZmllZCAmJiByZXN1bHQuZmlsZXNNb2RpZmllZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0ZpbGVzIG1vZGlmaWVkOicpKTtcbiAgICAgICAgcmVzdWx0LmZpbGVzTW9kaWZpZWQuZm9yRWFjaChmID0+IGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgLSAnICsgZikpKTtcbiAgICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5wdXNoKC4uLnJlc3VsdC5maWxlc01vZGlmaWVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdcXG5BZ2VudCBlbmNvdW50ZXJlZCBlcnJvcnM6JykpO1xuICAgICAgcmVzdWx0LmVycm9ycz8uZm9yRWFjaChlID0+IGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnICAtICcgKyBlKSkpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQub3V0cHV0KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdcXG5PdXRwdXQ6JykpO1xuICAgICAgY29uc29sZS5sb2cocmVzdWx0Lm91dHB1dCk7XG4gICAgfVxuXG4gICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TaW5nbGVDb21tYW5kKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBDTElPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG4gIGNvbnN0IGF1dGggPSBjb25maWdNYW5hZ2VyLmdldEF1dGgoKTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ05vdCBhdXRoZW50aWNhdGVkLiBSdW4gYG9mbG93IGF1dGhgIGZpcnN0LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBtb2RlbCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuICBjb25zdCBwcm9jZXNzZWRJbnB1dCA9IGF3YWl0IHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhwcm9tcHQpO1xuICBjb25zdCBzcGlubmVyID0gb3JhKCdQcm9jZXNzaW5nLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShwcm9jZXNzZWRJbnB1dCk7XG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRXJyb3InKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNoZWxsQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHNhbmRib3g/OiBTYW5kYm94RXhlY3V0b3IgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbiAgc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLnB1c2goY29tbWFuZCk7XG4gIFxuICBpZiAoc2FuZGJveCAmJiBzYW5kYm94Wydjb25maWcnXT8uYmFja2VuZCAhPT0gJ25vbmUnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlY3V0ZShjb21tYW5kLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICAgIGlmIChyZXN1bHQuc3Rkb3V0KSBjb25zb2xlLmxvZyhyZXN1bHQuc3Rkb3V0KTtcbiAgICAgIGlmIChyZXN1bHQuc3RkZXJyKSBjb25zb2xlLmVycm9yKHJlc3VsdC5zdGRlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgIGNvbnN0IHNoZWxsID0gaXNXaW5kb3dzID8gJ3Bvd2Vyc2hlbGwuZXhlJyA6ICcvYmluL2Jhc2gnO1xuICAgIGNvbnN0IGFyZ3MgPSBpc1dpbmRvd3MgPyBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBjb21tYW5kXSA6IFsnLWMnLCBjb21tYW5kXTtcblxuICAgIGNvbnN0IHByb2MgPSBzcGF3bihzaGVsbCwgYXJncywge1xuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKVxuICAgIH0pO1xuXG4gICAgcHJvYy5vbignY2xvc2UnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnRmFpbGVkOiAnICsgZXJyLm1lc3NhZ2UpKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhpbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVJlZlJlZ2V4ID0gL0AoW15cXHNdKykvZztcbiAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoQWxsKGZpbGVSZWZSZWdleCk7XG4gIGxldCByZXN1bHQgPSBpbnB1dDtcbiAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gbWF0Y2hbMV07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobWF0Y2hbMF0sICdcXG5bRmlsZTogJyArIGZpbGVQYXRoICsgJ11cXG4nICsgY29udGVudCArICdcXG5bRW5kIG9mIGZpbGVdXFxuJyk7XG4gICAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnB1c2goZmlsZVBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdXYXJuaW5nOiBDb3VsZCBub3QgcmVhZCBmaWxlICcgKyBmaWxlUGF0aCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFN5c3RlbVByb21wdCgpOiBzdHJpbmcge1xuICByZXR1cm4gYFlvdSBhcmUgb2Zsb3cgQ0xJLCBhbiBpbnRlcmFjdGl2ZSBDTEkgYWdlbnQgc3BlY2lhbGl6aW5nIGluIHNvZnR3YXJlIGVuZ2luZWVyaW5nIHRhc2tzLlxuXG5Zb3VyIHByaW1hcnkgZ29hbCBpcyB0byBoZWxwIHVzZXJzIHNhZmVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgcHJvZ3JhbW1pbmcgdGFza3MuXG5cbiMgQ29yZSBDYXBhYmlsaXRpZXNcbi0gUmVhZCwgd3JpdGUsIGFuZCBlZGl0IGZpbGVzXG4tIEV4ZWN1dGUgc2hlbGwgY29tbWFuZHNcbi0gU2VhcmNoIGFuZCBhbmFseXplIGNvZGVcbi0gV2ViIHNlYXJjaCBhbmQgZmV0Y2ggY29udGVudFxuLSBNYW5hZ2UgcHJvamVjdCBzdHJ1Y3R1cmVcbi0gTGF1bmNoIHNwZWNpYWxpemVkIHN1Yi1hZ2VudHNcblxuIyBUb29scyBBdmFpbGFibGVcbi0gcmVhZF9maWxlOiBSZWFkIGZpbGUgY29udGVudHNcbi0gd3JpdGVfZmlsZTogV3JpdGUgdG8gZmlsZXNcbi0gbGlzdF9kaXJlY3Rvcnk6IExpc3QgZGlyZWN0b3J5IGNvbnRlbnRzXG4tIGdsb2I6IEZpbmQgZmlsZXMgYnkgcGF0dGVyblxuLSBzZWFyY2hfZmlsZV9jb250ZW50OiBTZWFyY2ggd2l0aGluIGZpbGVzXG4tIHJ1bl9zaGVsbF9jb21tYW5kOiBFeGVjdXRlIHNoZWxsIGNvbW1hbmRzXG4tIHdlYl9zZWFyY2g6IFNlYXJjaCB0aGUgd2ViXG4tIHdlYl9mZXRjaDogRmV0Y2ggd2ViIGNvbnRlbnRcbi0gcmVwbGFjZTogUmVwbGFjZSB0ZXh0IGluIGZpbGVzXG4tIGltYWdlX3JlYWQ6IEFuYWx5emUgaW1hZ2VzXG4tIHBkZl9leHRyYWN0OiBFeHRyYWN0IGNvbnRlbnQgZnJvbSBQREZzXG4tIGFza191c2VyX3F1ZXN0aW9uOiBBc2sgdXNlciBmb3IgaW5wdXRcbi0gdGFzazogTGF1bmNoIHN1Yi1hZ2VudHNcbi0gc2F2ZV9tZW1vcnk6IFNhdmUgaW5mb3JtYXRpb24gZm9yIGZ1dHVyZSBzZXNzaW9uc1xuXG4jIEd1aWRlbGluZXNcbjEuIEJlIGNvbmNpc2UgYW5kIGhlbHBmdWxcbjIuIEFsd2F5cyBleHBsYWluIHdoYXQgeW91J3JlIGRvaW5nIGJlZm9yZSB1c2luZyB0b29sc1xuMy4gQXNrIGZvciBjbGFyaWZpY2F0aW9uIHdoZW4gbmVlZGVkXG40LiBQcmVmZXIgZWRpdGluZyBleGlzdGluZyBmaWxlcyBvdmVyIGNyZWF0aW5nIG5ldyBvbmVzXG41LiBVc2UgYXBwcm9wcmlhdGUgdG9vbHMgZm9yIGVhY2ggdGFza1xuNi4gVmVyaWZ5IGNoYW5nZXMgYWZ0ZXIgbWFraW5nIHRoZW1cbjcuIEFmdGVyIGNvbXBsZXRpbmcgYSBjb21wbGV4IHRhc2ssIHByb3ZpZGUgYSBicmllZiBzdW1tYXJ5XG5cbkN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnk6ICR7cHJvY2Vzcy5jd2QoKX1cbmA7XG59XG4iXX0=
package/dist/updater.d.ts CHANGED
@@ -8,13 +8,16 @@ interface UpdateInfo {
8
8
  */
9
9
  export declare function getCurrentVersion(): Promise<string>;
10
10
  /**
11
- * 检查是否有更新
11
+ * 检查是否有更新(不使用缓存,每次都检查)
12
12
  */
13
13
  export declare function checkForUpdates(): Promise<UpdateInfo>;
14
14
  /**
15
- * 后台执行更新(不阻塞当前 session)
15
+ * 后台执行更新
16
16
  */
17
- export declare function performBackgroundUpdate(onComplete?: (success: boolean) => void): void;
17
+ export declare function performBackgroundUpdate(): Promise<{
18
+ success: boolean;
19
+ message: string;
20
+ }>;
18
21
  /**
19
22
  * 手动执行更新
20
23
  */
@@ -22,8 +25,4 @@ export declare function performUpdate(silent?: boolean): Promise<{
22
25
  success: boolean;
23
26
  message: string;
24
27
  }>;
25
- /**
26
- * 检查更新是否已完成
27
- */
28
- export declare function isUpdateCompleted(): boolean;
29
28
  export {};
package/dist/updater.js CHANGED
@@ -7,21 +7,17 @@ exports.getCurrentVersion = getCurrentVersion;
7
7
  exports.checkForUpdates = checkForUpdates;
8
8
  exports.performBackgroundUpdate = performBackgroundUpdate;
9
9
  exports.performUpdate = performUpdate;
10
- exports.isUpdateCompleted = isUpdateCompleted;
11
10
  const chalk_1 = __importDefault(require("chalk"));
12
11
  const child_process_1 = require("child_process");
13
12
  const util_1 = require("util");
14
13
  const execAsync = (0, util_1.promisify)(child_process_1.exec);
15
14
  const PACKAGE_NAME = '@oflow-ai/oflow-cli';
16
15
  const NPM_REGISTRY = 'https://registry.npmjs.org';
17
- let updateInProgress = false;
18
- let updateCompleted = false;
19
16
  /**
20
17
  * 获取当前安装的版本
21
18
  */
22
19
  async function getCurrentVersion() {
23
20
  try {
24
- // 从已安装的包获取版本
25
21
  const { stdout } = await execAsync(`npm list -g ${PACKAGE_NAME} --depth=0 --json`, {
26
22
  timeout: 5000
27
23
  });
@@ -32,9 +28,9 @@ async function getCurrentVersion() {
32
28
  }
33
29
  }
34
30
  catch {
35
- // 忽略错误,尝试其他方式
31
+ // 忽略错误
36
32
  }
37
- // 备用方案:从本地 package.json 读取
33
+ // 备用:从本地 package.json 读取
38
34
  try {
39
35
  const fs = require('fs');
40
36
  const path = require('path');
@@ -44,9 +40,7 @@ async function getCurrentVersion() {
44
40
  return packageJson.version;
45
41
  }
46
42
  }
47
- catch {
48
- // 忽略错误
49
- }
43
+ catch { }
50
44
  return '0.0.0';
51
45
  }
52
46
  /**
@@ -62,20 +56,25 @@ async function getLatestVersion() {
62
56
  catch {
63
57
  try {
64
58
  const https = require('https');
65
- return new Promise((resolve, reject) => {
66
- https.get(`${NPM_REGISTRY}/${PACKAGE_NAME.replace('/', '%2F')}/latest`, (res) => {
59
+ return new Promise((resolve) => {
60
+ const req = https.get(`${NPM_REGISTRY}/${PACKAGE_NAME.replace('/', '%2F')}/latest`, (res) => {
67
61
  let data = '';
68
62
  res.on('data', (chunk) => { data += chunk; });
69
63
  res.on('end', () => {
70
64
  try {
71
65
  const json = JSON.parse(data);
72
- resolve(json.version);
66
+ resolve(json.version || '0.0.0');
73
67
  }
74
68
  catch {
75
- reject(new Error('Failed to parse response'));
69
+ resolve('0.0.0');
76
70
  }
77
71
  });
78
- }).on('error', reject);
72
+ });
73
+ req.on('error', () => resolve('0.0.0'));
74
+ req.setTimeout(5000, () => {
75
+ req.destroy();
76
+ resolve('0.0.0');
77
+ });
79
78
  });
80
79
  }
81
80
  catch {
@@ -84,7 +83,7 @@ async function getLatestVersion() {
84
83
  }
85
84
  }
86
85
  /**
87
- * 比较版本号
86
+ * 比较版本号,返回 -1 (v1 < v2), 0 (v1 == v2), 1 (v1 > v2)
88
87
  */
89
88
  function compareVersions(v1, v2) {
90
89
  const parts1 = v1.split('.').map(Number);
@@ -100,75 +99,32 @@ function compareVersions(v1, v2) {
100
99
  return 0;
101
100
  }
102
101
  /**
103
- * 检查是否有更新
102
+ * 检查是否有更新(不使用缓存,每次都检查)
104
103
  */
105
104
  async function checkForUpdates() {
106
105
  const currentVersion = await getCurrentVersion();
107
- // 检查缓存(每天只检查一次)
108
- const cacheKey = 'oflow_last_update_check';
109
- const cachedData = getCachedUpdateInfo(cacheKey);
110
- if (cachedData && Date.now() - cachedData.timestamp < 24 * 60 * 60 * 1000) {
111
- return {
112
- hasUpdate: compareVersions(currentVersion, cachedData.latestVersion) < 0,
113
- currentVersion,
114
- latestVersion: cachedData.latestVersion
115
- };
116
- }
117
106
  const latestVersion = await getLatestVersion();
118
- // 缓存结果
119
- setCachedUpdateInfo(cacheKey, {
120
- latestVersion,
121
- timestamp: Date.now()
122
- });
107
+ const hasUpdate = compareVersions(currentVersion, latestVersion) < 0;
123
108
  return {
124
- hasUpdate: compareVersions(currentVersion, latestVersion) < 0,
109
+ hasUpdate,
125
110
  currentVersion,
126
111
  latestVersion
127
112
  };
128
113
  }
129
114
  /**
130
- * 后台执行更新(不阻塞当前 session)
115
+ * 后台执行更新
131
116
  */
132
- function performBackgroundUpdate(onComplete) {
133
- if (updateInProgress || updateCompleted) {
134
- return;
117
+ async function performBackgroundUpdate() {
118
+ try {
119
+ await execAsync(`npm install -g ${PACKAGE_NAME}@latest`, {
120
+ timeout: 60000
121
+ });
122
+ return { success: true, message: 'Update completed' };
123
+ }
124
+ catch (error) {
125
+ const errorMsg = error instanceof Error ? error.message : String(error);
126
+ return { success: false, message: errorMsg };
135
127
  }
136
- updateInProgress = true;
137
- // 使用 spawn 在后台执行更新
138
- const updateProcess = (0, child_process_1.spawn)('npm', ['install', '-g', `${PACKAGE_NAME}@latest`], {
139
- detached: true,
140
- stdio: 'ignore',
141
- shell: true
142
- });
143
- updateProcess.unref();
144
- updateProcess.on('error', () => {
145
- updateInProgress = false;
146
- onComplete?.(false);
147
- });
148
- // 设置超时检查
149
- setTimeout(async () => {
150
- try {
151
- const { stdout } = await execAsync(`npm list -g ${PACKAGE_NAME} --depth=0 --json`, {
152
- timeout: 5000
153
- });
154
- const data = JSON.parse(stdout);
155
- const newVersion = data?.dependencies?.[PACKAGE_NAME]?.version;
156
- if (newVersion) {
157
- const updateInfo = await checkForUpdates();
158
- if (!updateInfo.hasUpdate) {
159
- updateCompleted = true;
160
- updateInProgress = false;
161
- onComplete?.(true);
162
- return;
163
- }
164
- }
165
- }
166
- catch {
167
- // 忽略错误
168
- }
169
- updateInProgress = false;
170
- onComplete?.(false);
171
- }, 30000);
172
128
  }
173
129
  /**
174
130
  * 手动执行更新
@@ -178,7 +134,7 @@ async function performUpdate(silent = false) {
178
134
  console.log(chalk_1.default.cyan('\nUpdating oflow CLI...\n'));
179
135
  }
180
136
  try {
181
- const { stdout, stderr } = await execAsync(`npm install -g ${PACKAGE_NAME}@latest`, {
137
+ await execAsync(`npm install -g ${PACKAGE_NAME}@latest`, {
182
138
  timeout: 60000
183
139
  });
184
140
  if (!silent) {
@@ -196,53 +152,4 @@ async function performUpdate(silent = false) {
196
152
  return { success: false, message: errorMsg };
197
153
  }
198
154
  }
199
- /**
200
- * 检查更新是否已完成
201
- */
202
- function isUpdateCompleted() {
203
- return updateCompleted;
204
- }
205
- /**
206
- * 获取缓存的更新信息
207
- */
208
- function getCachedUpdateInfo(key) {
209
- try {
210
- const fs = require('fs');
211
- const path = require('path');
212
- const os = require('os');
213
- const cacheFile = path.join(os.homedir(), '.oflow', 'update-cache.json');
214
- if (fs.existsSync(cacheFile)) {
215
- const data = JSON.parse(fs.readFileSync(cacheFile, 'utf-8'));
216
- return data[key] || null;
217
- }
218
- }
219
- catch {
220
- // Ignore cache errors
221
- }
222
- return null;
223
- }
224
- /**
225
- * 缓存更新信息
226
- */
227
- function setCachedUpdateInfo(key, value) {
228
- try {
229
- const fs = require('fs');
230
- const path = require('path');
231
- const os = require('os');
232
- const cacheDir = path.join(os.homedir(), '.oflow');
233
- const cacheFile = path.join(cacheDir, 'update-cache.json');
234
- if (!fs.existsSync(cacheDir)) {
235
- fs.mkdirSync(cacheDir, { recursive: true });
236
- }
237
- let data = {};
238
- if (fs.existsSync(cacheFile)) {
239
- data = JSON.parse(fs.readFileSync(cacheFile, 'utf-8'));
240
- }
241
- data[key] = value;
242
- fs.writeFileSync(cacheFile, JSON.stringify(data, null, 2));
243
- }
244
- catch {
245
- // Ignore cache errors
246
- }
247
- }
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91cGRhdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBcUJBLDhDQTZCQztBQXFERCwwQ0E0QkM7QUFLRCwwREE2Q0M7QUFLRCxzQ0F5QkM7QUFLRCw4Q0FFQztBQTFORCxrREFBMEI7QUFDMUIsaURBQTRDO0FBQzVDLCtCQUFpQztBQUVqQyxNQUFNLFNBQVMsR0FBRyxJQUFBLGdCQUFTLEVBQUMsb0JBQUksQ0FBQyxDQUFDO0FBRWxDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDO0FBQzNDLE1BQU0sWUFBWSxHQUFHLDRCQUE0QixDQUFDO0FBUWxELElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQzdCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztBQUU1Qjs7R0FFRztBQUNJLEtBQUssVUFBVSxpQkFBaUI7SUFDckMsSUFBSSxDQUFDO1FBQ0gsYUFBYTtRQUNiLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxlQUFlLFlBQVksbUJBQW1CLEVBQUU7WUFDakYsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDNUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsY0FBYztJQUNoQixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENB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LElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QixFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLElBQUksR0FBd0IsRUFBRSxDQUFDO1FBQ25DLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHNCQUFzQjtJQUN4QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBleGVjLCBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5cbmNvbnN0IGV4ZWNBc3luYyA9IHByb21pc2lmeShleGVjKTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gJ0BvZmxvdy1haS9vZmxvdy1jbGknO1xuY29uc3QgTlBNX1JFR0lTVFJZID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnJztcblxuaW50ZXJmYWNlIFVwZGF0ZUluZm8ge1xuICBoYXNVcGRhdGU6IGJvb2xlYW47XG4gIGN1cnJlbnRWZXJzaW9uOiBzdHJpbmc7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZztcbn1cblxubGV0IHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbmxldCB1cGRhdGVDb21wbGV0ZWQgPSBmYWxzZTtcblxuLyoqXG4gKiDojrflj5blvZPliY3lronoo4XnmoTniYjmnKxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgLy8g5LuO5bey5a6J6KOF55qE5YyF6I635Y+W54mI5pysXG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNBc3luYyhgbnBtIGxpc3QgLWcgJHtQQUNLQUdFX05BTUV9IC0tZGVwdGg9MCAtLWpzb25gLCB7XG4gICAgICB0aW1lb3V0OiA1MDAwXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICBjb25zdCB2ZXJzaW9uID0gZGF0YT8uZGVwZW5kZW5jaWVzPy5bUEFDS0FHRV9OQU1FXT8udmVyc2lvbjtcbiAgICBpZiAodmVyc2lvbikge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyDlv73nlaXplJnor6/vvIzlsJ3or5Xlhbbku5bmlrnlvI9cbiAgfVxuXG4gIC8vIOWkh+eUqOaWueahiO+8muS7juacrOWcsCBwYWNrYWdlLmpzb24g6K+75Y+WXG4gIHRyeSB7XG4gICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb24udmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIOW/veeVpemUmeivr1xuICB9XG5cbiAgcmV0dXJuICcwLjAuMCc7XG59XG5cbi8qKlxuICog5LuObnBt6I635Y+W5pyA5paw54mI5pysXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgZXhlY0FzeW5jKGBucG0gdmlldyAke1BBQ0tBR0VfTkFNRX0gdmVyc2lvbmAsIHtcbiAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBodHRwcy5nZXQoYCR7TlBNX1JFR0lTVFJZfS8ke1BBQ0tBR0VfTkFNRS5yZXBsYWNlKCcvJywgJyUyRicpfS9sYXRlc3RgLCAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBsZXQgZGF0YSA9ICcnO1xuICAgICAgICAgIHJlcy5vbignZGF0YScsIChjaHVuazogc3RyaW5nKSA9PiB7IGRhdGEgKz0gY2h1bms7IH0pO1xuICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgIHJlc29sdmUoanNvbi52ZXJzaW9uKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcGFyc2UgcmVzcG9uc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnMC4wLjAnO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIOavlOi+g+eJiOacrOWPt1xuICovXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnModjE6IHN0cmluZywgdjI6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnRzMSA9IHYxLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gIGNvbnN0IHBhcnRzMiA9IHYyLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChwYXJ0czEubGVuZ3RoLCBwYXJ0czIubGVuZ3RoKTsgaSsrKSB7XG4gICAgY29uc3QgcDEgPSBwYXJ0czFbaV0gfHwgMDtcbiAgICBjb25zdCBwMiA9IHBhcnRzMltpXSB8fCAwO1xuICAgIGlmIChwMSA+IHAyKSByZXR1cm4gMTtcbiAgICBpZiAocDEgPCBwMikgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIOajgOafpeaYr+WQpuacieabtOaWsFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JVcGRhdGVzKCk6IFByb21pc2U8VXBkYXRlSW5mbz4ge1xuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IGdldEN1cnJlbnRWZXJzaW9uKCk7XG4gIFxuICAvLyDmo4Dmn6XnvJPlrZjvvIjmr4/lpKnlj6rmo4Dmn6XkuIDmrKHvvIlcbiAgY29uc3QgY2FjaGVLZXkgPSAnb2Zsb3dfbGFzdF91cGRhdGVfY2hlY2snO1xuICBjb25zdCBjYWNoZWREYXRhID0gZ2V0Q2FjaGVkVXBkYXRlSW5mbyhjYWNoZUtleSk7XG4gIFxuICBpZiAoY2FjaGVkRGF0YSAmJiBEYXRlLm5vdygpIC0gY2FjaGVkRGF0YS50aW1lc3RhbXAgPCAyNCAqIDYwICogNjAgKiAxMDAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc1VwZGF0ZTogY29tcGFyZVZlcnNpb25zKGN1cnJlbnRWZXJzaW9uLCBjYWNoZWREYXRhLmxhdGVzdFZlcnNpb24pIDwgMCxcbiAgICAgIGN1cnJlbnRWZXJzaW9uLFxuICAgICAgbGF0ZXN0VmVyc2lvbjogY2FjaGVkRGF0YS5sYXRlc3RWZXJzaW9uXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxhdGVzdFZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RWZXJzaW9uKCk7XG4gIFxuICAvLyDnvJPlrZjnu5PmnpxcbiAgc2V0Q2FjaGVkVXBkYXRlSW5mbyhjYWNoZUtleSwgeyBcbiAgICBsYXRlc3RWZXJzaW9uLCBcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KCkgXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXBkYXRlOiBjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGxhdGVzdFZlcnNpb24pIDwgMCxcbiAgICBjdXJyZW50VmVyc2lvbixcbiAgICBsYXRlc3RWZXJzaW9uXG4gIH07XG59XG5cbi8qKlxuICog5ZCO5Y+w5omn6KGM5pu05paw77yI5LiN6Zi75aGe5b2T5YmNIHNlc3Npb27vvIlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1CYWNrZ3JvdW5kVXBkYXRlKG9uQ29tcGxldGU/OiAoc3VjY2VzczogYm9vbGVhbikgPT4gdm9pZCk6IHZvaWQge1xuICBpZiAodXBkYXRlSW5Qcm9ncmVzcyB8fCB1cGRhdGVDb21wbGV0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcblxuICAvLyDkvb/nlKggc3Bhd24g5Zyo5ZCO5Y+w5omn6KGM5pu05pawXG4gIGNvbnN0IHVwZGF0ZVByb2Nlc3MgPSBzcGF3bignbnBtJywgWydpbnN0YWxsJywgJy1nJywgYCR7UEFDS0FHRV9OQU1FfUBsYXRlc3RgXSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiAnaWdub3JlJyxcbiAgICBzaGVsbDogdHJ1ZVxuICB9KTtcblxuICB1cGRhdGVQcm9jZXNzLnVucmVmKCk7XG5cbiAgdXBkYXRlUHJvY2Vzcy5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIG9uQ29tcGxldGU/LihmYWxzZSk7XG4gIH0pO1xuXG4gIC8vIOiuvue9rui2heaXtuajgOafpVxuICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNBc3luYyhgbnBtIGxpc3QgLWcgJHtQQUNLQUdFX05BTUV9IC0tZGVwdGg9MCAtLWpzb25gLCB7XG4gICAgICAgIHRpbWVvdXQ6IDUwMDBcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBkYXRhPy5kZXBlbmRlbmNpZXM/LltQQUNLQUdFX05BTUVdPy52ZXJzaW9uO1xuICAgICAgXG4gICAgICBpZiAobmV3VmVyc2lvbikge1xuICAgICAgICBjb25zdCB1cGRhdGVJbmZvID0gYXdhaXQgY2hlY2tGb3JVcGRhdGVzKCk7XG4gICAgICAgIGlmICghdXBkYXRlSW5mby5oYXNVcGRhdGUpIHtcbiAgICAgICAgICB1cGRhdGVDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICBvbkNvbXBsZXRlPy4odHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyDlv73nlaXplJnor69cbiAgICB9XG4gICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIG9uQ29tcGxldGU/LihmYWxzZSk7XG4gIH0sIDMwMDAwKTtcbn1cblxuLyoqXG4gKiDmiYvliqjmiafooYzmm7TmlrBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1VcGRhdGUoc2lsZW50OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0+IHtcbiAgaWYgKCFzaWxlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5VcGRhdGluZyBvZmxvdyBDTEkuLi5cXG4nKSk7XG4gIH1cbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQsIHN0ZGVyciB9ID0gYXdhaXQgZXhlY0FzeW5jKGBucG0gaW5zdGFsbCAtZyAke1BBQ0tBR0VfTkFNRX1AbGF0ZXN0YCwge1xuICAgICAgdGltZW91dDogNjAwMDBcbiAgICB9KTtcbiAgICBcbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbm9mbG93IENMSSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQbGVhc2UgcmVzdGFydCBvZmxvdyB0byB1c2UgdGhlIG5ldyB2ZXJzaW9uLlxcbicpKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZTogJ1VwZGF0ZSBjb21wbGV0ZWQnIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuVXBkYXRlIGZhaWxlZCcpKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1lvdSBjYW4gbWFudWFsbHkgdXBkYXRlIHdpdGg6IG5wbSBpbnN0YWxsIC1nIEBvZmxvdy1haS9vZmxvdy1jbGlAbGF0ZXN0XFxuJykpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgbWVzc2FnZTogZXJyb3JNc2cgfTtcbiAgfVxufVxuXG4vKipcbiAqIOajgOafpeabtOaWsOaYr+WQpuW3suWujOaIkFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVcGRhdGVDb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiB1cGRhdGVDb21wbGV0ZWQ7XG59XG5cbi8qKlxuICog6I635Y+W57yT5a2Y55qE5pu05paw5L+h5oGvXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFVwZGF0ZUluZm8oa2V5OiBzdHJpbmcpOiB7IGxhdGVzdFZlcnNpb246IHN0cmluZzsgdGltZXN0YW1wOiBudW1iZXIgfSB8IG51bGwge1xuICB0cnkge1xuICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICAgIGNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbiAgICBcbiAgICBjb25zdCBjYWNoZUZpbGUgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9mbG93JywgJ3VwZGF0ZS1jYWNoZS5qc29uJyk7XG4gICAgXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoY2FjaGVGaWxlKSkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNhY2hlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgcmV0dXJuIGRhdGFba2V5XSB8fCBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIGVycm9yc1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIOe8k+WtmOabtOaWsOS/oeaBr1xuICovXG5mdW5jdGlvbiBzZXRDYWNoZWRVcGRhdGVJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogeyBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7IHRpbWVzdGFtcDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAgICBjb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG4gICAgXG4gICAgY29uc3QgY2FjaGVEaXIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9mbG93Jyk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKGNhY2hlRGlyLCAndXBkYXRlLWNhY2hlLmpzb24nKTtcbiAgICBcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2FjaGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBcbiAgICBsZXQgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNhY2hlRmlsZSkpIHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjYWNoZUZpbGUsICd1dGYtOCcpKTtcbiAgICB9XG4gICAgXG4gICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgZnMud3JpdGVGaWxlU3luYyhjYWNoZUZpbGUsIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIGVycm9yc1xuICB9XG59Il19
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91cGRhdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBa0JBLDhDQTBCQztBQTBERCwwQ0FXQztBQUtELDBEQVVDO0FBS0Qsc0NBeUJDO0FBOUpELGtEQUEwQjtBQUMxQixpREFBNEM7QUFDNUMsK0JBQWlDO0FBRWpDLE1BQU0sU0FBUyxHQUFHLElBQUEsZ0JBQVMsRUFBQyxvQkFBSSxDQUFDLENBQUM7QUFFbEMsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSxZQUFZLEdBQUcsNEJBQTRCLENBQUM7QUFRbEQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxlQUFlLFlBQVksbUJBQW1CLEVBQUU7WUFDakYsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDNUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTztJQUNULENBQUM7SUFFRCx5QkFBeUI7SUFDekIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbkUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUM7SUFFVixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsZ0JBQWdCO0lBQzdCLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxZQUFZLFlBQVksVUFBVSxFQUFFO1lBQ3JFLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzdCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUMvRixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNqQixJQUFJLENBQUM7NEJBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUM7d0JBQ25DLENBQUM7d0JBQUMsTUFBTSxDQUFDOzRCQUNQLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUN4QixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxlQUFlLENBQUMsRUFBVSxFQUFFLEVBQVU7SUFDN0MsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCLElBQUksRUFBRSxHQUFHLEVBQUU7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxlQUFlO0lBQ25DLE1BQU0sY0FBYyxHQUFHLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztJQUNqRCxNQUFNLGFBQWEsR0FBRyxNQUFNLGdCQUFnQixFQUFFLENBQUM7SUFFL0MsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFckUsT0FBTztRQUNMLFNBQVM7UUFDVCxjQUFjO1FBQ2QsYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsdUJBQXVCO0lBQzNDLElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxDQUFDLGtCQUFrQixZQUFZLFNBQVMsRUFBRTtZQUN2RCxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxRQUFRLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLGFBQWEsQ0FBQyxTQUFrQixLQUFLO0lBQ3pELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxDQUFDLGtCQUFrQixZQUFZLFNBQVMsRUFBRTtZQUN2RCxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLFFBQVEsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDL0MsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgZXhlYywgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuXG5jb25zdCBleGVjQXN5bmMgPSBwcm9taXNpZnkoZXhlYyk7XG5cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAb2Zsb3ctYWkvb2Zsb3ctY2xpJztcbmNvbnN0IE5QTV9SRUdJU1RSWSA9ICdodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZyc7XG5cbmludGVyZmFjZSBVcGRhdGVJbmZvIHtcbiAgaGFzVXBkYXRlOiBib29sZWFuO1xuICBjdXJyZW50VmVyc2lvbjogc3RyaW5nO1xuICBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICog6I635Y+W5b2T5YmN5a6J6KOF55qE54mI5pysXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50VmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjQXN5bmMoYG5wbSBsaXN0IC1nICR7UEFDS0FHRV9OQU1FfSAtLWRlcHRoPTAgLS1qc29uYCwge1xuICAgICAgdGltZW91dDogNTAwMFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0ZG91dCk7XG4gICAgY29uc3QgdmVyc2lvbiA9IGRhdGE/LmRlcGVuZGVuY2llcz8uW1BBQ0tBR0VfTkFNRV0/LnZlcnNpb247XG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8g5b+955Wl6ZSZ6K+vXG4gIH1cblxuICAvLyDlpIfnlKjvvJrku47mnKzlnLAgcGFja2FnZS5qc29uIOivu+WPllxuICB0cnkge1xuICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdwYWNrYWdlLmpzb24nKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgICAgcmV0dXJuIHBhY2thZ2VKc29uLnZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIHt9XG5cbiAgcmV0dXJuICcwLjAuMCc7XG59XG5cbi8qKlxuICog5LuObnBt6I635Y+W5pyA5paw54mI5pysXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgZXhlY0FzeW5jKGBucG0gdmlldyAke1BBQ0tBR0VfTkFNRX0gdmVyc2lvbmAsIHtcbiAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgcmVxID0gaHR0cHMuZ2V0KGAke05QTV9SRUdJU1RSWX0vJHtQQUNLQUdFX05BTUUucmVwbGFjZSgnLycsICclMkYnKX0vbGF0ZXN0YCwgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGEgPSAnJztcbiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoY2h1bms6IHN0cmluZykgPT4geyBkYXRhICs9IGNodW5rOyB9KTtcbiAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICByZXNvbHZlKGpzb24udmVyc2lvbiB8fCAnMC4wLjAnKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICByZXNvbHZlKCcwLjAuMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVxLm9uKCdlcnJvcicsICgpID0+IHJlc29sdmUoJzAuMC4wJykpO1xuICAgICAgICByZXEuc2V0VGltZW91dCg1MDAwLCAoKSA9PiB7XG4gICAgICAgICAgcmVxLmRlc3Ryb3koKTtcbiAgICAgICAgICByZXNvbHZlKCcwLjAuMCcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcwLjAuMCc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICog5q+U6L6D54mI5pys5Y+377yM6L+U5ZueIC0xICh2MSA8IHYyKSwgMCAodjEgPT0gdjIpLCAxICh2MSA+IHYyKVxuICovXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnModjE6IHN0cmluZywgdjI6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnRzMSA9IHYxLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gIGNvbnN0IHBhcnRzMiA9IHYyLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChwYXJ0czEubGVuZ3RoLCBwYXJ0czIubGVuZ3RoKTsgaSsrKSB7XG4gICAgY29uc3QgcDEgPSBwYXJ0czFbaV0gfHwgMDtcbiAgICBjb25zdCBwMiA9IHBhcnRzMltpXSB8fCAwO1xuICAgIGlmIChwMSA+IHAyKSByZXR1cm4gMTtcbiAgICBpZiAocDEgPCBwMikgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIOajgOafpeaYr+WQpuacieabtOaWsO+8iOS4jeS9v+eUqOe8k+WtmO+8jOavj+asoemDveajgOafpe+8iVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JVcGRhdGVzKCk6IFByb21pc2U8VXBkYXRlSW5mbz4ge1xuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IGdldEN1cnJlbnRWZXJzaW9uKCk7XG4gIGNvbnN0IGxhdGVzdFZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RWZXJzaW9uKCk7XG4gIFxuICBjb25zdCBoYXNVcGRhdGUgPSBjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGxhdGVzdFZlcnNpb24pIDwgMDtcblxuICByZXR1cm4ge1xuICAgIGhhc1VwZGF0ZSxcbiAgICBjdXJyZW50VmVyc2lvbixcbiAgICBsYXRlc3RWZXJzaW9uXG4gIH07XG59XG5cbi8qKlxuICog5ZCO5Y+w5omn6KGM5pu05pawXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwZXJmb3JtQmFja2dyb3VuZFVwZGF0ZSgpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjQXN5bmMoYG5wbSBpbnN0YWxsIC1nICR7UEFDS0FHRV9OQU1FfUBsYXRlc3RgLCB7XG4gICAgICB0aW1lb3V0OiA2MDAwMFxuICAgIH0pO1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6ICdVcGRhdGUgY29tcGxldGVkJyB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvck1zZyB9O1xuICB9XG59XG5cbi8qKlxuICog5omL5Yqo5omn6KGM5pu05pawXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwZXJmb3JtVXBkYXRlKHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9PiB7XG4gIGlmICghc2lsZW50KSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignXFxuVXBkYXRpbmcgb2Zsb3cgQ0xJLi4uXFxuJykpO1xuICB9XG4gIFxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNBc3luYyhgbnBtIGluc3RhbGwgLWcgJHtQQUNLQUdFX05BTUV9QGxhdGVzdGAsIHtcbiAgICAgIHRpbWVvdXQ6IDYwMDAwXG4gICAgfSk7XG4gICAgXG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCdcXG5vZmxvdyBDTEkgdXBkYXRlZCBzdWNjZXNzZnVsbHkhJykpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnUGxlYXNlIHJlc3RhcnQgb2Zsb3cgdG8gdXNlIHRoZSBuZXcgdmVyc2lvbi5cXG4nKSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6ICdVcGRhdGUgY29tcGxldGVkJyB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgIGlmICghc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ1xcblVwZGF0ZSBmYWlsZWQnKSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdZb3UgY2FuIG1hbnVhbGx5IHVwZGF0ZSB3aXRoOiBucG0gaW5zdGFsbCAtZyBAb2Zsb3ctYWkvb2Zsb3ctY2xpQGxhdGVzdFxcbicpKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6IGVycm9yTXNnIH07XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oflow-ai/oflow-cli",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "oFlow CLI - AI-powered terminal assistant for developers",
5
5
  "keywords": [
6
6
  "ai",