@oflow-ai/oflow-cli 0.1.0 → 0.1.1
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 +84 -24
- package/dist/index.js +42 -11
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -44,7 +44,7 @@ const ora_1 = __importDefault(require("ora"));
|
|
|
44
44
|
const core_1 = require("@oflow-ai/core");
|
|
45
45
|
const commands_1 = require("./commands");
|
|
46
46
|
let sandboxExecutor = null;
|
|
47
|
-
let
|
|
47
|
+
let currentShowThinking = false;
|
|
48
48
|
async function startInteractiveMode(options) {
|
|
49
49
|
const configManager = (0, core_1.getConfigManager)();
|
|
50
50
|
const auth = configManager.getAuth();
|
|
@@ -54,26 +54,39 @@ async function startInteractiveMode(options) {
|
|
|
54
54
|
}
|
|
55
55
|
// 初始化沙箱执行器
|
|
56
56
|
if (options.sandbox || configManager.get('sandbox')) {
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
try {
|
|
58
|
+
sandboxExecutor = await (0, core_1.createSandboxExecutor)();
|
|
59
|
+
console.log(chalk_1.default.gray(`Sandbox mode: ${sandboxExecutor ? 'enabled' : 'unavailable'}`));
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.log(chalk_1.default.yellow('Sandbox mode: unavailable'));
|
|
63
|
+
}
|
|
59
64
|
}
|
|
60
65
|
// 获取思考过程显示设置
|
|
61
|
-
|
|
66
|
+
currentShowThinking = options.showThinking ?? configManager.getShowThinking();
|
|
62
67
|
const model = options.model || configManager.getDefaultModel() || 'gpt-4o';
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
let provider;
|
|
69
|
+
try {
|
|
70
|
+
provider = (0, core_1.createAIProvider)(auth, model);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.log(chalk_1.default.red('Failed to create AI provider:', error instanceof Error ? error.message : String(error)));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
65
76
|
const conversation = new core_1.Conversation({
|
|
66
77
|
provider,
|
|
67
78
|
workingDirectory: process.cwd(),
|
|
68
79
|
maxTokens: configManager.get('maxTokens'),
|
|
69
80
|
temperature: configManager.get('temperature'),
|
|
70
|
-
showThinking:
|
|
81
|
+
showThinking: currentShowThinking,
|
|
71
82
|
onContent: (content) => {
|
|
72
83
|
process.stdout.write(chalk_1.default.white(content));
|
|
73
84
|
},
|
|
74
85
|
onThinking: (thinking) => {
|
|
75
86
|
// 显示思考过程,使用不同的颜色
|
|
76
|
-
|
|
87
|
+
if (currentShowThinking) {
|
|
88
|
+
process.stdout.write(chalk_1.default.magenta(thinking));
|
|
89
|
+
}
|
|
77
90
|
},
|
|
78
91
|
onToolCall: (toolCall) => {
|
|
79
92
|
console.log(chalk_1.default.cyan(`\n🔧 Using tool: ${toolCall.function.name}`));
|
|
@@ -88,12 +101,13 @@ async function startInteractiveMode(options) {
|
|
|
88
101
|
console.log(chalk_1.default.bold.blue('║ Welcome to oflow CLI ║'));
|
|
89
102
|
console.log(chalk_1.default.bold.blue('╚═══════════════════════════════════════╝'));
|
|
90
103
|
console.log('');
|
|
104
|
+
console.log(chalk_1.default.gray(`Provider: ${auth.provider}`));
|
|
91
105
|
console.log(chalk_1.default.gray(`Model: ${model}`));
|
|
92
106
|
console.log(chalk_1.default.gray(`Working directory: ${process.cwd()}`));
|
|
93
107
|
if (sandboxExecutor) {
|
|
94
108
|
console.log(chalk_1.default.gray(`Sandbox: enabled`));
|
|
95
109
|
}
|
|
96
|
-
console.log(chalk_1.default.gray(`Thinking: ${
|
|
110
|
+
console.log(chalk_1.default.gray(`Thinking: ${currentShowThinking ? 'ON' : 'OFF'} (use /thinking to toggle)`));
|
|
97
111
|
console.log('');
|
|
98
112
|
console.log(chalk_1.default.gray('Type your message and press Enter to chat.'));
|
|
99
113
|
console.log(chalk_1.default.gray('Type /help for available commands.'));
|
|
@@ -114,6 +128,16 @@ async function startInteractiveMode(options) {
|
|
|
114
128
|
}
|
|
115
129
|
// Check for slash commands
|
|
116
130
|
if ((0, commands_1.isSlashCommand)(input)) {
|
|
131
|
+
// 特殊处理 /thinking 命令
|
|
132
|
+
if (input.toLowerCase() === '/thinking') {
|
|
133
|
+
currentShowThinking = !currentShowThinking;
|
|
134
|
+
configManager.setShowThinking(currentShowThinking);
|
|
135
|
+
console.log('');
|
|
136
|
+
console.log(chalk_1.default.green(`✓ Thinking process display: ${currentShowThinking ? chalk_1.default.cyan('ON') : chalk_1.default.gray('OFF')}`));
|
|
137
|
+
console.log('');
|
|
138
|
+
rl.prompt();
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
117
141
|
const shouldContinue = await (0, commands_1.executeSlashCommand)(input, {
|
|
118
142
|
conversation,
|
|
119
143
|
rl,
|
|
@@ -128,7 +152,7 @@ async function startInteractiveMode(options) {
|
|
|
128
152
|
}
|
|
129
153
|
// Check for agent calls (starting with $)
|
|
130
154
|
if (input.startsWith('$')) {
|
|
131
|
-
await handleAgentCall(input,
|
|
155
|
+
await handleAgentCall(input, provider, options);
|
|
132
156
|
rl.prompt();
|
|
133
157
|
return;
|
|
134
158
|
}
|
|
@@ -150,7 +174,21 @@ async function startInteractiveMode(options) {
|
|
|
150
174
|
}
|
|
151
175
|
catch (error) {
|
|
152
176
|
spinner.fail('Error');
|
|
153
|
-
|
|
177
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
178
|
+
console.log(chalk_1.default.red(errorMessage));
|
|
179
|
+
// 提供更详细的错误信息
|
|
180
|
+
if (errorMessage.includes('400')) {
|
|
181
|
+
console.log(chalk_1.default.yellow('\n可能的解决方案:'));
|
|
182
|
+
console.log(chalk_1.default.gray(' 1. 检查API Key是否正确'));
|
|
183
|
+
console.log(chalk_1.default.gray(' 2. 检查模型名称是否正确'));
|
|
184
|
+
console.log(chalk_1.default.gray(' 3. 运行 "oflow auth" 重新配置'));
|
|
185
|
+
}
|
|
186
|
+
else if (errorMessage.includes('401') || errorMessage.includes('Unauthorized')) {
|
|
187
|
+
console.log(chalk_1.default.yellow('\n认证失败,请运行 "oflow auth" 重新配置'));
|
|
188
|
+
}
|
|
189
|
+
else if (errorMessage.includes('429')) {
|
|
190
|
+
console.log(chalk_1.default.yellow('\n请求过于频繁,请稍后再试'));
|
|
191
|
+
}
|
|
154
192
|
rl.prompt();
|
|
155
193
|
}
|
|
156
194
|
});
|
|
@@ -164,7 +202,7 @@ async function startInteractiveMode(options) {
|
|
|
164
202
|
process.exit(0);
|
|
165
203
|
});
|
|
166
204
|
}
|
|
167
|
-
async function handleAgentCall(input,
|
|
205
|
+
async function handleAgentCall(input, provider, options) {
|
|
168
206
|
// Parse agent call: $agent-type "task description"
|
|
169
207
|
const match = input.match(/^\$(\w+(?:-\w+)*)\s*(.*)$/);
|
|
170
208
|
if (!match) {
|
|
@@ -179,6 +217,7 @@ async function handleAgentCall(input, agentFactory, options) {
|
|
|
179
217
|
return;
|
|
180
218
|
}
|
|
181
219
|
try {
|
|
220
|
+
const agentFactory = new core_1.AgentFactory(provider, process.cwd());
|
|
182
221
|
const agent = agentFactory.createAgent(agentType);
|
|
183
222
|
console.log(chalk_1.default.cyan(`\n🤖 Starting ${agentType} agent...`));
|
|
184
223
|
console.log(chalk_1.default.gray(`Task: ${task}\n`));
|
|
@@ -218,7 +257,12 @@ async function runSingleCommand(prompt, options) {
|
|
|
218
257
|
}
|
|
219
258
|
// 初始化沙箱执行器
|
|
220
259
|
if (options.sandbox || configManager.get('sandbox')) {
|
|
221
|
-
|
|
260
|
+
try {
|
|
261
|
+
sandboxExecutor = await (0, core_1.createSandboxExecutor)();
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// Ignore sandbox errors for single command
|
|
265
|
+
}
|
|
222
266
|
}
|
|
223
267
|
const model = options.model || configManager.getDefaultModel() || 'gpt-4o';
|
|
224
268
|
const provider = (0, core_1.createAIProvider)(auth, model);
|
|
@@ -245,17 +289,22 @@ async function runSingleCommand(prompt, options) {
|
|
|
245
289
|
}
|
|
246
290
|
}
|
|
247
291
|
async function executeShellCommand(command, sandbox) {
|
|
248
|
-
const { spawn } = require('
|
|
292
|
+
const { spawn } = require('child_process');
|
|
249
293
|
if (sandbox && sandbox['config']?.backend !== 'none') {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
294
|
+
try {
|
|
295
|
+
const result = await sandbox.execute(command, process.cwd());
|
|
296
|
+
if (result.stdout)
|
|
297
|
+
console.log(result.stdout);
|
|
298
|
+
if (result.stderr)
|
|
299
|
+
console.error(result.stderr);
|
|
300
|
+
if (result.timedOut)
|
|
301
|
+
console.log(chalk_1.default.yellow('Command timed out'));
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
console.log(chalk_1.default.red(error instanceof Error ? error.message : String(error)));
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
259
308
|
}
|
|
260
309
|
return new Promise((resolve) => {
|
|
261
310
|
const isWindows = process.platform === 'win32';
|
|
@@ -268,6 +317,10 @@ async function executeShellCommand(command, sandbox) {
|
|
|
268
317
|
proc.on('close', () => {
|
|
269
318
|
resolve();
|
|
270
319
|
});
|
|
320
|
+
proc.on('error', (err) => {
|
|
321
|
+
console.log(chalk_1.default.red(`Failed to execute command: ${err.message}`));
|
|
322
|
+
resolve();
|
|
323
|
+
});
|
|
271
324
|
});
|
|
272
325
|
}
|
|
273
326
|
async function processFileReferences(input) {
|
|
@@ -284,6 +337,7 @@ async function processFileReferences(input) {
|
|
|
284
337
|
}
|
|
285
338
|
catch {
|
|
286
339
|
// File not found, keep original reference
|
|
340
|
+
console.log(chalk_1.default.yellow(`Warning: Could not read file ${filePath}`));
|
|
287
341
|
}
|
|
288
342
|
}
|
|
289
343
|
return result;
|
|
@@ -333,7 +387,13 @@ Your primary goal is to help users safely and efficiently complete programming t
|
|
|
333
387
|
6. Verify changes after making them
|
|
334
388
|
7. Provide actionable suggestions
|
|
335
389
|
|
|
390
|
+
# Important Rules
|
|
391
|
+
- When you need to use tools, first explain what you're going to do
|
|
392
|
+
- After using tools, summarize the results
|
|
393
|
+
- If a tool call fails, explain what went wrong and suggest alternatives
|
|
394
|
+
- Always provide clear, actionable responses
|
|
395
|
+
|
|
336
396
|
Current working directory: ${process.cwd()}
|
|
337
397
|
`;
|
|
338
398
|
}
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCQSxvREEySUM7QUE0REQsNENBdUNDO0FBelFELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVV3QjtBQUN4Qix5Q0FBaUU7QUFVakUsSUFBSSxlQUFlLEdBQTJCLElBQUksQ0FBQztBQUNuRCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFFbEIsS0FBSyxVQUFVLG9CQUFvQixDQUFDLE9BQW1CO0lBQzVELE1BQU0sYUFBYSxHQUFHLElBQUEsdUJBQWdCLEdBQUUsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFckMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUMsQ0FBQztRQUNyRSxPQUFPO0lBQ1QsQ0FBQztJQUVELFdBQVc7SUFDWCxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3BELGVBQWUsR0FBRyxNQUFNLElBQUEsNEJBQXFCLEdBQUUsQ0FBQztRQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELGFBQWE7SUFDYixZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7SUFFdkUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxhQUFhLENB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Q0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFDdEIsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBNENvQixPQUFPLENBQUMsR0FBRyxFQUFFO0NBQ3pDLENBQUM7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSAncmVhZGxpbmUnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7XG4gIGdldENvbmZpZ01hbmFnZXIsXG4gIGNyZWF0ZUFJUHJvdmlkZXIsXG4gIENvbnZlcnNhdGlvbixcbiAgTWVzc2FnZSxcbiAgQWdlbnRGYWN0b3J5LFxuICBBZ2VudCxcbiAgQWdlbnRUeXBlLFxuICBjcmVhdGVTYW5kYm94RXhlY3V0b3IsXG4gIFNhbmRib3hFeGVjdXRvclxufSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgeyBpc1NsYXNoQ29tbWFuZCwgZXhlY3V0ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgcmVuZGVyTWFya2Rvd24gfSBmcm9tICcuL3V0aWxzL21hcmtkb3duJztcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHlvbG8/OiBib29sZWFuO1xuICBzYW5kYm94PzogYm9vbGVhbjtcbiAgc2hvd1RoaW5raW5nPzogYm9vbGVhbjtcbn1cblxubGV0IHNhbmRib3hFeGVjdXRvcjogU2FuZGJveEV4ZWN1dG9yIHwgbnVsbCA9IG51bGw7XG5sZXQgc2hvd1RoaW5raW5nID0gZmFsc2U7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydEludGVyYWN0aXZlTW9kZShvcHRpb25zOiBDTElPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG4gIGNvbnN0IGF1dGggPSBjb25maWdNYW5hZ2VyLmdldEF1dGgoKTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ05vdCBhdXRoZW50aWNhdGVkLiBSdW4gYG9mbG93IGF1dGhgIGZpcnN0LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDliJ3lp4vljJbmspnnrrHmiafooYzlmahcbiAgaWYgKG9wdGlvbnMuc2FuZGJveCB8fCBjb25maWdNYW5hZ2VyLmdldCgnc2FuZGJveCcpKSB7XG4gICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgU2FuZGJveCBtb2RlOiAke3NhbmRib3hFeGVjdXRvciA/ICdlbmFibGVkJyA6ICd1bmF2YWlsYWJsZSd9YCkpO1xuICB9XG5cbiAgLy8g6I635Y+W5oCd6ICD6L+H56iL5pi+56S66K6+572uXG4gIHNob3dUaGlua2luZyA9IG9wdGlvbnMuc2hvd1RoaW5raW5nID8/IGNvbmZpZ01hbmFnZXIuZ2V0U2hvd1RoaW5raW5nKCk7XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBtb2RlbCk7XG4gIGNvbnN0IGFnZW50RmFjdG9yeSA9IG5ldyBBZ2VudEZhY3RvcnkocHJvdmlkZXIsIHByb2Nlc3MuY3dkKCkpO1xuXG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIHNob3dUaGlua2luZzogc2hvd1RoaW5raW5nLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9LFxuICAgIG9uVGhpbmtpbmc6ICh0aGlua2luZykgPT4ge1xuICAgICAgLy8g5pi+56S65oCd6ICD6L+H56iL77yM5L2/55So5LiN5ZCM55qE6aKc6ImyXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay5tYWdlbnRhKHRoaW5raW5nKSk7XG4gICAgfSxcbiAgICBvblRvb2xDYWxsOiAodG9vbENhbGwpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbvCflKcgVXNpbmcgdG9vbDogJHt0b29sQ2FsbC5mdW5jdGlvbi5uYW1lfWApKTtcbiAgICB9LFxuICAgIG9uVG9vbFJlc3VsdDogKHJlc3VsdCkgPT4ge1xuICAgICAgLy8gVG9vbCByZXN1bHQgaXMgaGFuZGxlZCBzaWxlbnRseVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2V0IHN5c3RlbSBwcm9tcHRcbiAgY29udmVyc2F0aW9uLnNldFN5c3RlbVByb21wdChnZXRTeXN0ZW1Qcm9tcHQoKSk7XG5cbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5ibHVlKCdcXG7ilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcnKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuYmx1ZSgn4pWRICAgICAgICAgV2VsY29tZSB0byBvZmxvdyBDTEkgICAgICAgICAg4pWRJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmJsdWUoJ+KVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnScpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBNb2RlbDogJHttb2RlbH1gKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYFdvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9YCkpO1xuICBpZiAoc2FuZGJveEV4ZWN1dG9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgU2FuZGJveDogZW5hYmxlZGApKTtcbiAgfVxuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBUaGlua2luZzogJHtzaG93VGhpbmtpbmcgPyAnT04nIDogJ09GRid9ICh1c2UgL3RoaW5raW5nIHRvIHRvZ2dsZSlgKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVHlwZSB5b3VyIG1lc3NhZ2UgYW5kIHByZXNzIEVudGVyIHRvIGNoYXQuJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUeXBlIC9oZWxwIGZvciBhdmFpbGFibGUgY29tbWFuZHMuJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUeXBlICRhZ2VudC1uYW1lIHRvIGNhbGwgYSBzdWItYWdlbnQuJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUeXBlIC9leGl0IG9yIHByZXNzIEN0cmwrQyB0byBleGl0LicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuXG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICAgIHByb21wdDogY2hhbGsuZ3JlZW4oJz4gJylcbiAgfSk7XG5cbiAgcmwucHJvbXB0KCk7XG5cbiAgcmwub24oJ2xpbmUnLCBhc3luYyAobGluZSkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gbGluZS50cmltKCk7XG4gICAgXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHNsYXNoIGNvbW1hbmRzXG4gICAgaWYgKGlzU2xhc2hDb21tYW5kKGlucHV0KSkge1xuICAgICAgY29uc3Qgc2hvdWxkQ29udGludWUgPSBhd2FpdCBleGVjdXRlU2xhc2hDb21tYW5kKGlucHV0LCB7XG4gICAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgICAgcmwsXG4gICAgICAgIGNvbmZpZ01hbmFnZXJcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXNob3VsZENvbnRpbnVlKSB7XG4gICAgICAgIHJsLmNsb3NlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGFnZW50IGNhbGxzIChzdGFydGluZyB3aXRoICQpXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgYXdhaXQgaGFuZGxlQWdlbnRDYWxsKGlucHV0LCBhZ2VudEZhY3RvcnksIG9wdGlvbnMpO1xuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHNoZWxsIGNvbW1hbmRzIChzdGFydGluZyB3aXRoICEpXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgYXdhaXQgZXhlY3V0ZVNoZWxsQ29tbWFuZChpbnB1dC5zbGljZSgxKSwgc2FuZGJveEV4ZWN1dG9yKTtcbiAgICAgIHJsLnByb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBmaWxlIHJlZmVyZW5jZSAoc3RhcnRpbmcgd2l0aCBAKVxuICAgIGNvbnN0IHByb2Nlc3NlZElucHV0ID0gYXdhaXQgcHJvY2Vzc0ZpbGVSZWZlcmVuY2VzKGlucHV0KTtcblxuICAgIC8vIFNlbmQgdG8gQUlcbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdUaGlua2luZy4uLicpLnN0YXJ0KCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKHByb2Nlc3NlZElucHV0KTtcbiAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgXG4gICAgICBjb25zb2xlLmxvZygnJyk7IC8vIE5ldyBsaW5lIGFmdGVyIHJlc3BvbnNlXG4gICAgICBybC5wcm9tcHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdFcnJvcicpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICAgICAgcmwucHJvbXB0KCk7XG4gICAgfVxuICB9KTtcblxuICBybC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuR29vZGJ5ZSEg8J+Ri1xcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xuXG4gIC8vIEhhbmRsZSBDdHJsK0NcbiAgcHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkdvb2RieWUhIPCfkYtcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWdlbnRDYWxsKFxuICBpbnB1dDogc3RyaW5nLCBcbiAgYWdlbnRGYWN0b3J5OiBBZ2VudEZhY3RvcnksXG4gIG9wdGlvbnM6IENMSU9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBQYXJzZSBhZ2VudCBjYWxsOiAkYWdlbnQtdHlwZSBcInRhc2sgZGVzY3JpcHRpb25cIlxuICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKC9eXFwkKFxcdysoPzotXFx3KykqKVxccyooLiopJC8pO1xuICBcbiAgaWYgKCFtYXRjaCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnSW52YWxpZCBhZ2VudCBjYWxsIGZvcm1hdC4gVXNlOiAkYWdlbnQtdHlwZSBcInRhc2tcIicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdBdmFpbGFibGUgYWdlbnRzOiBnZW5lcmFsLXB1cnBvc2UsIHBsYW4tYWdlbnQsIGV4cGxvcmUtYWdlbnQsIGNvZGUtcmV2aWV3ZXIsIGZyb250ZW5kLXRlc3RlcicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZ2VudFR5cGUgPSBtYXRjaFsxXSBhcyBBZ2VudFR5cGU7XG4gIGNvbnN0IHRhc2sgPSBtYXRjaFsyXS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICBpZiAoIXRhc2spIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1BsZWFzZSBwcm92aWRlIGEgdGFzayBmb3IgdGhlIGFnZW50LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGFnZW50ID0gYWdlbnRGYWN0b3J5LmNyZWF0ZUFnZW50KGFnZW50VHlwZSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxu8J+kliBTdGFydGluZyAke2FnZW50VHlwZX0gYWdlbnQuLi5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgVGFzazogJHt0YXNrfVxcbmApKTtcblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0FnZW50IHdvcmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50LmV4ZWN1dGUodGFzaywgKHVwZGF0ZSkgPT4ge1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh1cGRhdGUpO1xuICAgICAgc3Bpbm5lci5zdGFydCgpO1xuICAgIH0pO1xuXG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxuXFxu4pyTIEFnZW50IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKSk7XG4gICAgICBpZiAocmVzdWx0LmZpbGVzTW9kaWZpZWQgJiYgcmVzdWx0LmZpbGVzTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdGaWxlcyBtb2RpZmllZDonKSk7XG4gICAgICAgIHJlc3VsdC5maWxlc01vZGlmaWVkLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgIC0gJHtmfWApKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuXFxu4pyXIEFnZW50IGVuY291bnRlcmVkIGVycm9yczonKSk7XG4gICAgICByZXN1bHQuZXJyb3JzPy5mb3JFYWNoKGUgPT4gY29uc29sZS5sb2coY2hhbGsucmVkKGAgIC0gJHtlfWApKSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5vdXRwdXQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1xcbk91dHB1dDonKSk7XG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQub3V0cHV0KTtcbiAgICB9XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNpbmdsZUNvbW1hbmQocHJvbXB0OiBzdHJpbmcsIG9wdGlvbnM6IENMSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOWIneWni+WMluaymeeuseaJp+ihjOWZqFxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICBzYW5kYm94RXhlY3V0b3IgPSBhd2FpdCBjcmVhdGVTYW5kYm94RXhlY3V0b3IoKTtcbiAgfVxuXG4gIGNvbnN0IG1vZGVsID0gb3B0aW9ucy5tb2RlbCB8fCBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpIHx8ICdncHQtNG8nO1xuICBjb25zdCBwcm92aWRlciA9IGNyZWF0ZUFJUHJvdmlkZXIoYXV0aCwgbW9kZWwpO1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKHtcbiAgICBwcm92aWRlcixcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9jZXNzLmN3ZCgpLFxuICAgIG1heFRva2VuczogY29uZmlnTWFuYWdlci5nZXQoJ21heFRva2VucycpLFxuICAgIHRlbXBlcmF0dXJlOiBjb25maWdNYW5hZ2VyLmdldCgndGVtcGVyYXR1cmUnKSxcbiAgICBvbkNvbnRlbnQ6IChjb250ZW50KSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay53aGl0ZShjb250ZW50KSk7XG4gICAgfVxuICB9KTtcblxuICBjb252ZXJzYXRpb24uc2V0U3lzdGVtUHJvbXB0KGdldFN5c3RlbVByb21wdCgpKTtcblxuICBjb25zdCBwcm9jZXNzZWRJbnB1dCA9IGF3YWl0IHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhwcm9tcHQpO1xuICBjb25zdCBzcGlubmVyID0gb3JhKCdQcm9jZXNzaW5nLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShwcm9jZXNzZWRJbnB1dCk7XG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRXJyb3InKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNoZWxsQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHNhbmRib3g/OiBTYW5kYm94RXhlY3V0b3IgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoJ2NoaWxkX21vZHVsZXMnKTtcbiAgXG4gIGlmIChzYW5kYm94ICYmIHNhbmRib3hbJ2NvbmZpZyddPy5iYWNrZW5kICE9PSAnbm9uZScpIHtcbiAgICAvLyBVc2Ugc2FuZGJveCBleGVjdXRpb25cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWN1dGUoY29tbWFuZCwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgaWYgKHJlc3VsdC5zdGRvdXQpIGNvbnNvbGUubG9nKHJlc3VsdC5zdGRvdXQpO1xuICAgIGlmIChyZXN1bHQuc3RkZXJyKSBjb25zb2xlLmVycm9yKHJlc3VsdC5zdGRlcnIpO1xuICAgIGlmIChyZXN1bHQudGltZWRPdXQpIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQ29tbWFuZCB0aW1lZCBvdXQnKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgIGNvbnN0IHNoZWxsID0gaXNXaW5kb3dzID8gJ3Bvd2Vyc2hlbGwuZXhlJyA6ICcvYmluL2Jhc2gnO1xuICAgIGNvbnN0IGFyZ3MgPSBpc1dpbmRvd3MgPyBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBjb21tYW5kXSA6IFsnLWMnLCBjb21tYW5kXTtcblxuICAgIGNvbnN0IHByb2MgPSBzcGF3bihzaGVsbCwgYXJncywge1xuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKVxuICAgIH0pO1xuXG4gICAgcHJvYy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRmlsZVJlZmVyZW5jZXMoaW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVSZWZSZWdleCA9IC9AKFteXFxzXSspL2c7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaEFsbChmaWxlUmVmUmVnZXgpO1xuICBcbiAgbGV0IHJlc3VsdCA9IGlucHV0O1xuICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbiAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBtYXRjaFsxXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShtYXRjaFswXSwgYFxcbltGaWxlOiAke2ZpbGVQYXRofV1cXG4ke2NvbnRlbnR9XFxuW0VuZCBvZiBmaWxlXVxcbmApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmlsZSBub3QgZm91bmQsIGtlZXAgb3JpZ2luYWwgcmVmZXJlbmNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0U3lzdGVtUHJvbXB0KCk6IHN0cmluZyB7XG4gIHJldHVybiBgWW91IGFyZSBvZmxvdyBDTEksIGFuIGludGVyYWN0aXZlIENMSSBhZ2VudCBzcGVjaWFsaXppbmcgaW4gc29mdHdhcmUgZW5naW5lZXJpbmcgdGFza3MuXG5cbllvdXIgcHJpbWFyeSBnb2FsIGlzIHRvIGhlbHAgdXNlcnMgc2FmZWx5IGFuZCBlZmZpY2llbnRseSBjb21wbGV0ZSBwcm9ncmFtbWluZyB0YXNrcy5cblxuIyBDb3JlIENhcGFiaWxpdGllc1xuLSBSZWFkLCB3cml0ZSwgYW5kIGVkaXQgZmlsZXNcbi0gRXhlY3V0ZSBzaGVsbCBjb21tYW5kc1xuLSBTZWFyY2ggYW5kIGFuYWx5emUgY29kZVxuLSBXZWIgc2VhcmNoIGFuZCBmZXRjaCBjb250ZW50XG4tIE1hbmFnZSBwcm9qZWN0IHN0cnVjdHVyZVxuLSBMYXVuY2ggc3BlY2lhbGl6ZWQgc3ViLWFnZW50c1xuXG4jIFRvb2xzIEF2YWlsYWJsZVxuLSByZWFkX2ZpbGU6IFJlYWQgZmlsZSBjb250ZW50c1xuLSB3cml0ZV9maWxlOiBXcml0ZSB0byBmaWxlc1xuLSBsaXN0X2RpcmVjdG9yeTogTGlzdCBkaXJlY3RvcnkgY29udGVudHNcbi0gZ2xvYjogRmluZCBmaWxlcyBieSBwYXR0ZXJuXG4tIHNlYXJjaF9maWxlX2NvbnRlbnQ6IFNlYXJjaCB3aXRoaW4gZmlsZXNcbi0gcnVuX3NoZWxsX2NvbW1hbmQ6IEV4ZWN1dGUgc2hlbGwgY29tbWFuZHNcbi0gd2ViX3NlYXJjaDogU2VhcmNoIHRoZSB3ZWJcbi0gd2ViX2ZldGNoOiBGZXRjaCB3ZWIgY29udGVudFxuLSByZXBsYWNlOiBSZXBsYWNlIHRleHQgaW4gZmlsZXNcbi0gaW1hZ2VfcmVhZDogQW5hbHl6ZSBpbWFnZXNcbi0gcGRmX2V4dHJhY3Q6IEV4dHJhY3QgY29udGVudCBmcm9tIFBERnNcbi0gYXNrX3VzZXJfcXVlc3Rpb246IEFzayB1c2VyIGZvciBpbnB1dFxuLSB0YXNrOiBMYXVuY2ggc3ViLWFnZW50c1xuLSBzYXZlX21lbW9yeTogU2F2ZSBpbmZvcm1hdGlvbiBmb3IgZnV0dXJlIHNlc3Npb25zXG5cbiMgU3ViLUFnZW50cyAodXNlICRhZ2VudC1uYW1lIHRvIGNhbGwpXG4tIGdlbmVyYWwtcHVycG9zZTogQ29tcGxleCBtdWx0aS1zdGVwIHRhc2tzXG4tIHBsYW4tYWdlbnQ6IFBsYW5uaW5nIGFuZCBhbmFseXNpc1xuLSBleHBsb3JlLWFnZW50OiBDb2RlYmFzZSBleHBsb3JhdGlvblxuLSBjb2RlLXJldmlld2VyOiBDb2RlIHJldmlld1xuLSBmcm9udGVuZC10ZXN0ZXI6IFVJIHRlc3RpbmdcblxuIyBHdWlkZWxpbmVzXG4xLiBCZSBjb25jaXNlIGFuZCBoZWxwZnVsXG4yLiBBbHdheXMgZXhwbGFpbiB3aGF0IHlvdSdyZSBkb2luZyBiZWZvcmUgdXNpbmcgdG9vbHNcbjMuIEFzayBmb3IgY2xhcmlmaWNhdGlvbiB3aGVuIG5lZWRlZFxuNC4gUHJlZmVyIGVkaXRpbmcgZXhpc3RpbmcgZmlsZXMgb3ZlciBjcmVhdGluZyBuZXcgb25lc1xuNS4gVXNlIGFwcHJvcHJpYXRlIHRvb2xzIGZvciBlYWNoIHRhc2tcbjYuIFZlcmlmeSBjaGFuZ2VzIGFmdGVyIG1ha2luZyB0aGVtXG43LiBQcm92aWRlIGFjdGlvbmFibGUgc3VnZ2VzdGlvbnNcblxuQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeTogJHtwcm9jZXNzLmN3ZCgpfVxuYDtcbn0iXX0=
|
|
399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQSxvREFpTEM7QUE2REQsNENBMkNDO0FBblRELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVV3QjtBQUN4Qix5Q0FBaUU7QUFTakUsSUFBSSxlQUFlLEdBQTJCLElBQUksQ0FBQztBQUNuRCxJQUFJLG1CQUFtQixHQUFHLEtBQUssQ0FBQztBQUV6QixLQUFLLFVBQVUsb0JBQW9CLENBQUMsT0FBbUI7SUFDNUQsTUFBTSxhQUFhLEdBQUcsSUFBQSx1QkFBZ0IsR0FBRSxDQUFDO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUVyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsNENBQTRDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU87SUFDVCxDQUFDO0lBRUQsV0FBVztJQUNYLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDO1lBQ0gsZUFBZSxHQUFHLE1BQU0sSUFBQSw0QkFBcUIsR0FBRSxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FB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LFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksUUFBUSxNQUFNLE9BQU8sbUJBQW1CLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsMENBQTBDO1lBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs2QkFrRG9CLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Q0FDekMsQ0FBQztBQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tICdyZWFkbGluZSc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHtcbiAgZ2V0Q29uZmlnTWFuYWdlcixcbiAgY3JlYXRlQUlQcm92aWRlcixcbiAgQ29udmVyc2F0aW9uLFxuICBNZXNzYWdlLFxuICBBZ2VudEZhY3RvcnksXG4gIEFnZW50LFxuICBBZ2VudFR5cGUsXG4gIGNyZWF0ZVNhbmRib3hFeGVjdXRvcixcbiAgU2FuZGJveEV4ZWN1dG9yXG59IGZyb20gJ0BvZmxvdy1haS9jb3JlJztcbmltcG9ydCB7IGlzU2xhc2hDb21tYW5kLCBleGVjdXRlU2xhc2hDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG1vZGVsPzogc3RyaW5nO1xuICB5b2xvPzogYm9vbGVhbjtcbiAgc2FuZGJveD86IGJvb2xlYW47XG4gIHNob3dUaGlua2luZz86IGJvb2xlYW47XG59XG5cbmxldCBzYW5kYm94RXhlY3V0b3I6IFNhbmRib3hFeGVjdXRvciB8IG51bGwgPSBudWxsO1xubGV0IGN1cnJlbnRTaG93VGhpbmtpbmcgPSBmYWxzZTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0SW50ZXJhY3RpdmVNb2RlKG9wdGlvbnM6IENMSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOWIneWni+WMluaymeeuseaJp+ihjOWZqFxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBTYW5kYm94IG1vZGU6ICR7c2FuZGJveEV4ZWN1dG9yID8gJ2VuYWJsZWQnIDogJ3VuYXZhaWxhYmxlJ31gKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnU2FuZGJveCBtb2RlOiB1bmF2YWlsYWJsZScpKTtcbiAgICB9XG4gIH1cblxuICAvLyDojrflj5bmgJ3ogIPov4fnqIvmmL7npLrorr7nva5cbiAgY3VycmVudFNob3dUaGlua2luZyA9IG9wdGlvbnMuc2hvd1RoaW5raW5nID8/IGNvbmZpZ01hbmFnZXIuZ2V0U2hvd1RoaW5raW5nKCk7XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIFxuICBsZXQgcHJvdmlkZXI7XG4gIHRyeSB7XG4gICAgcHJvdmlkZXIgPSBjcmVhdGVBSVByb3ZpZGVyKGF1dGgsIG1vZGVsKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0ZhaWxlZCB0byBjcmVhdGUgQUkgcHJvdmlkZXI6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udmVyc2F0aW9uID0gbmV3IENvbnZlcnNhdGlvbih7XG4gICAgcHJvdmlkZXIsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogcHJvY2Vzcy5jd2QoKSxcbiAgICBtYXhUb2tlbnM6IGNvbmZpZ01hbmFnZXIuZ2V0KCdtYXhUb2tlbnMnKSxcbiAgICB0ZW1wZXJhdHVyZTogY29uZmlnTWFuYWdlci5nZXQoJ3RlbXBlcmF0dXJlJyksXG4gICAgc2hvd1RoaW5raW5nOiBjdXJyZW50U2hvd1RoaW5raW5nLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9LFxuICAgIG9uVGhpbmtpbmc6ICh0aGlua2luZykgPT4ge1xuICAgICAgLy8g5pi+56S65oCd6ICD6L+H56iL77yM5L2/55So5LiN5ZCM55qE6aKc6ImyXG4gICAgICBpZiAoY3VycmVudFNob3dUaGlua2luZykge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay5tYWdlbnRhKHRoaW5raW5nKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblRvb2xDYWxsOiAodG9vbENhbGwpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbvCflKcgVXNpbmcgdG9vbDogJHt0b29sQ2FsbC5mdW5jdGlvbi5uYW1lfWApKTtcbiAgICB9LFxuICAgIG9uVG9vbFJlc3VsdDogKHJlc3VsdCkgPT4ge1xuICAgICAgLy8gVG9vbCByZXN1bHQgaXMgaGFuZGxlZCBzaWxlbnRseVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2V0IHN5c3RlbSBwcm9tcHRcbiAgY29udmVyc2F0aW9uLnNldFN5c3RlbVByb21wdChnZXRTeXN0ZW1Qcm9tcHQoKSk7XG5cbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5ibHVlKCdcXG7ilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcnKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuYmx1ZSgn4pWRICAgICAgICAgV2VsY29tZSB0byBvZmxvdyBDTEkgICAgICAgICAg4pWRJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmJsdWUoJ+KVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnScpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBQcm92aWRlcjogJHthdXRoLnByb3ZpZGVyfWApKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgTW9kZWw6ICR7bW9kZWx9YCkpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBXb3JraW5nIGRpcmVjdG9yeTogJHtwcm9jZXNzLmN3ZCgpfWApKTtcbiAgaWYgKHNhbmRib3hFeGVjdXRvcikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYFNhbmRib3g6IGVuYWJsZWRgKSk7XG4gIH1cbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgVGhpbmtpbmc6ICR7Y3VycmVudFNob3dUaGlua2luZyA/ICdPTicgOiAnT0ZGJ30gKHVzZSAvdGhpbmtpbmcgdG8gdG9nZ2xlKWApKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUeXBlIHlvdXIgbWVzc2FnZSBhbmQgcHJlc3MgRW50ZXIgdG8gY2hhdC4nKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1R5cGUgL2hlbHAgZm9yIGF2YWlsYWJsZSBjb21tYW5kcy4nKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1R5cGUgJGFnZW50LW5hbWUgdG8gY2FsbCBhIHN1Yi1hZ2VudC4nKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1R5cGUgL2V4aXQgb3IgcHJlc3MgQ3RybCtDIHRvIGV4aXQuJykpO1xuICBjb25zb2xlLmxvZygnJyk7XG5cbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gICAgcHJvbXB0OiBjaGFsay5ncmVlbignPiAnKVxuICB9KTtcblxuICBybC5wcm9tcHQoKTtcblxuICBybC5vbignbGluZScsIGFzeW5jIChsaW5lKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBsaW5lLnRyaW0oKTtcbiAgICBcbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICBybC5wcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3Igc2xhc2ggY29tbWFuZHNcbiAgICBpZiAoaXNTbGFzaENvbW1hbmQoaW5wdXQpKSB7XG4gICAgICAvLyDnibnmrorlpITnkIYgL3RoaW5raW5nIOWRveS7pFxuICAgICAgaWYgKGlucHV0LnRvTG93ZXJDYXNlKCkgPT09ICcvdGhpbmtpbmcnKSB7XG4gICAgICAgIGN1cnJlbnRTaG93VGhpbmtpbmcgPSAhY3VycmVudFNob3dUaGlua2luZztcbiAgICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoY3VycmVudFNob3dUaGlua2luZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7Y3VycmVudFNob3dUaGlua2luZyA/IGNoYWxrLmN5YW4oJ09OJykgOiBjaGFsay5ncmF5KCdPRkYnKX1gKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcmwucHJvbXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2hvdWxkQ29udGludWUgPSBhd2FpdCBleGVjdXRlU2xhc2hDb21tYW5kKGlucHV0LCB7XG4gICAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgICAgcmwsXG4gICAgICAgIGNvbmZpZ01hbmFnZXJcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXNob3VsZENvbnRpbnVlKSB7XG4gICAgICAgIHJsLmNsb3NlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGFnZW50IGNhbGxzIChzdGFydGluZyB3aXRoICQpXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgYXdhaXQgaGFuZGxlQWdlbnRDYWxsKGlucHV0LCBwcm92aWRlciwgb3B0aW9ucyk7XG4gICAgICBybC5wcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3Igc2hlbGwgY29tbWFuZHMgKHN0YXJ0aW5nIHdpdGggISlcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnIScpKSB7XG4gICAgICBhd2FpdCBleGVjdXRlU2hlbGxDb21tYW5kKGlucHV0LnNsaWNlKDEpLCBzYW5kYm94RXhlY3V0b3IpO1xuICAgICAgcmwucHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGZpbGUgcmVmZXJlbmNlIChzdGFydGluZyB3aXRoIEApXG4gICAgY29uc3QgcHJvY2Vzc2VkSW5wdXQgPSBhd2FpdCBwcm9jZXNzRmlsZVJlZmVyZW5jZXMoaW5wdXQpO1xuXG4gICAgLy8gU2VuZCB0byBBSVxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1RoaW5raW5nLi4uJykuc3RhcnQoKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UocHJvY2Vzc2VkSW5wdXQpO1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gTmV3IGxpbmUgYWZ0ZXIgcmVzcG9uc2VcbiAgICAgIHJsLnByb21wdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0Vycm9yJyk7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3JNZXNzYWdlKSk7XG4gICAgICBcbiAgICAgIC8vIOaPkOS+m+abtOivpue7hueahOmUmeivr+S/oeaBr1xuICAgICAgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDAwJykpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdcXG7lj6/og73nmoTop6PlhrPmlrnmoYg6JykpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIDEuIOajgOafpUFQSSBLZXnmmK/lkKbmraPnoa4nKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgMi4g5qOA5p+l5qih5Z6L5ZCN56ew5piv5ZCm5q2j56GuJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIDMuIOi/kOihjCBcIm9mbG93IGF1dGhcIiDph43mlrDphY3nva4nKSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDAxJykgfHwgZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCdVbmF1dGhvcml6ZWQnKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1xcbuiupOivgeWksei0pe+8jOivt+i/kOihjCBcIm9mbG93IGF1dGhcIiDph43mlrDphY3nva4nKSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDI5JykpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdcXG7or7fmsYLov4fkuo7popHnuYHvvIzor7fnqI3lkI7lho3or5UnKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJsLnByb21wdCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmwub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkdvb2RieWUhIPCfkYtcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcblxuICAvLyBIYW5kbGUgQ3RybCtDXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllISDwn5GLXFxuJykpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUFnZW50Q2FsbChcbiAgaW5wdXQ6IHN0cmluZywgXG4gIHByb3ZpZGVyOiBhbnksXG4gIG9wdGlvbnM6IENMSU9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBQYXJzZSBhZ2VudCBjYWxsOiAkYWdlbnQtdHlwZSBcInRhc2sgZGVzY3JpcHRpb25cIlxuICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKC9eXFwkKFxcdysoPzotXFx3KykqKVxccyooLiopJC8pO1xuICBcbiAgaWYgKCFtYXRjaCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnSW52YWxpZCBhZ2VudCBjYWxsIGZvcm1hdC4gVXNlOiAkYWdlbnQtdHlwZSBcInRhc2tcIicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdBdmFpbGFibGUgYWdlbnRzOiBnZW5lcmFsLXB1cnBvc2UsIHBsYW4tYWdlbnQsIGV4cGxvcmUtYWdlbnQsIGNvZGUtcmV2aWV3ZXIsIGZyb250ZW5kLXRlc3RlcicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZ2VudFR5cGUgPSBtYXRjaFsxXSBhcyBBZ2VudFR5cGU7XG4gIGNvbnN0IHRhc2sgPSBtYXRjaFsyXS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICBpZiAoIXRhc2spIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1BsZWFzZSBwcm92aWRlIGEgdGFzayBmb3IgdGhlIGFnZW50LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGFnZW50RmFjdG9yeSA9IG5ldyBBZ2VudEZhY3RvcnkocHJvdmlkZXIsIHByb2Nlc3MuY3dkKCkpO1xuICAgIGNvbnN0IGFnZW50ID0gYWdlbnRGYWN0b3J5LmNyZWF0ZUFnZW50KGFnZW50VHlwZSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxu8J+kliBTdGFydGluZyAke2FnZW50VHlwZX0gYWdlbnQuLi5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgVGFzazogJHt0YXNrfVxcbmApKTtcblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0FnZW50IHdvcmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50LmV4ZWN1dGUodGFzaywgKHVwZGF0ZSkgPT4ge1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh1cGRhdGUpO1xuICAgICAgc3Bpbm5lci5zdGFydCgpO1xuICAgIH0pO1xuXG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxuXFxu4pyTIEFnZW50IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKSk7XG4gICAgICBpZiAocmVzdWx0LmZpbGVzTW9kaWZpZWQgJiYgcmVzdWx0LmZpbGVzTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdGaWxlcyBtb2RpZmllZDonKSk7XG4gICAgICAgIHJlc3VsdC5maWxlc01vZGlmaWVkLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgIC0gJHtmfWApKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuXFxu4pyXIEFnZW50IGVuY291bnRlcmVkIGVycm9yczonKSk7XG4gICAgICByZXN1bHQuZXJyb3JzPy5mb3JFYWNoKGUgPT4gY29uc29sZS5sb2coY2hhbGsucmVkKGAgIC0gJHtlfWApKSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5vdXRwdXQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1xcbk91dHB1dDonKSk7XG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQub3V0cHV0KTtcbiAgICB9XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNpbmdsZUNvbW1hbmQocHJvbXB0OiBzdHJpbmcsIG9wdGlvbnM6IENMSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOWIneWni+WMluaymeeuseaJp+ihjOWZqFxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmUgc2FuZGJveCBlcnJvcnMgZm9yIHNpbmdsZSBjb21tYW5kXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBtb2RlbCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuXG4gIGNvbnN0IHByb2Nlc3NlZElucHV0ID0gYXdhaXQgcHJvY2Vzc0ZpbGVSZWZlcmVuY2VzKHByb21wdCk7XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1Byb2Nlc3NpbmcuLi4nKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKHByb2Nlc3NlZElucHV0KTtcbiAgICBzcGlubmVyLnN0b3AoKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdFcnJvcicpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlU2hlbGxDb21tYW5kKGNvbW1hbmQ6IHN0cmluZywgc2FuZGJveD86IFNhbmRib3hFeGVjdXRvciB8IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBzcGF3biB9ID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuICBcbiAgaWYgKHNhbmRib3ggJiYgc2FuZGJveFsnY29uZmlnJ10/LmJhY2tlbmQgIT09ICdub25lJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWN1dGUoY29tbWFuZCwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgICBpZiAocmVzdWx0LnN0ZG91dCkgY29uc29sZS5sb2cocmVzdWx0LnN0ZG91dCk7XG4gICAgICBpZiAocmVzdWx0LnN0ZGVycikgY29uc29sZS5lcnJvcihyZXN1bHQuc3RkZXJyKTtcbiAgICAgIGlmIChyZXN1bHQudGltZWRPdXQpIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQ29tbWFuZCB0aW1lZCBvdXQnKSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGlzV2luZG93cyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMic7XG4gICAgY29uc3Qgc2hlbGwgPSBpc1dpbmRvd3MgPyAncG93ZXJzaGVsbC5leGUnIDogJy9iaW4vYmFzaCc7XG4gICAgY29uc3QgYXJncyA9IGlzV2luZG93cyA/IFsnLU5vUHJvZmlsZScsICctQ29tbWFuZCcsIGNvbW1hbmRdIDogWyctYycsIGNvbW1hbmRdO1xuXG4gICAgY29uc3QgcHJvYyA9IHNwYXduKHNoZWxsLCBhcmdzLCB7XG4gICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpXG4gICAgfSk7XG5cbiAgICBwcm9jLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcblxuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgRmFpbGVkIHRvIGV4ZWN1dGUgY29tbWFuZDogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRmlsZVJlZmVyZW5jZXMoaW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVSZWZSZWdleCA9IC9AKFteXFxzXSspL2c7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaEFsbChmaWxlUmVmUmVnZXgpO1xuICBcbiAgbGV0IHJlc3VsdCA9IGlucHV0O1xuICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbiAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBtYXRjaFsxXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShtYXRjaFswXSwgYFxcbltGaWxlOiAke2ZpbGVQYXRofV1cXG4ke2NvbnRlbnR9XFxuW0VuZCBvZiBmaWxlXVxcbmApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmlsZSBub3QgZm91bmQsIGtlZXAgb3JpZ2luYWwgcmVmZXJlbmNlXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYFdhcm5pbmc6IENvdWxkIG5vdCByZWFkIGZpbGUgJHtmaWxlUGF0aH1gKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0U3lzdGVtUHJvbXB0KCk6IHN0cmluZyB7XG4gIHJldHVybiBgWW91IGFyZSBvZmxvdyBDTEksIGFuIGludGVyYWN0aXZlIENMSSBhZ2VudCBzcGVjaWFsaXppbmcgaW4gc29mdHdhcmUgZW5naW5lZXJpbmcgdGFza3MuXG5cbllvdXIgcHJpbWFyeSBnb2FsIGlzIHRvIGhlbHAgdXNlcnMgc2FmZWx5IGFuZCBlZmZpY2llbnRseSBjb21wbGV0ZSBwcm9ncmFtbWluZyB0YXNrcy5cblxuIyBDb3JlIENhcGFiaWxpdGllc1xuLSBSZWFkLCB3cml0ZSwgYW5kIGVkaXQgZmlsZXNcbi0gRXhlY3V0ZSBzaGVsbCBjb21tYW5kc1xuLSBTZWFyY2ggYW5kIGFuYWx5emUgY29kZVxuLSBXZWIgc2VhcmNoIGFuZCBmZXRjaCBjb250ZW50XG4tIE1hbmFnZSBwcm9qZWN0IHN0cnVjdHVyZVxuLSBMYXVuY2ggc3BlY2lhbGl6ZWQgc3ViLWFnZW50c1xuXG4jIFRvb2xzIEF2YWlsYWJsZVxuLSByZWFkX2ZpbGU6IFJlYWQgZmlsZSBjb250ZW50c1xuLSB3cml0ZV9maWxlOiBXcml0ZSB0byBmaWxlc1xuLSBsaXN0X2RpcmVjdG9yeTogTGlzdCBkaXJlY3RvcnkgY29udGVudHNcbi0gZ2xvYjogRmluZCBmaWxlcyBieSBwYXR0ZXJuXG4tIHNlYXJjaF9maWxlX2NvbnRlbnQ6IFNlYXJjaCB3aXRoaW4gZmlsZXNcbi0gcnVuX3NoZWxsX2NvbW1hbmQ6IEV4ZWN1dGUgc2hlbGwgY29tbWFuZHNcbi0gd2ViX3NlYXJjaDogU2VhcmNoIHRoZSB3ZWJcbi0gd2ViX2ZldGNoOiBGZXRjaCB3ZWIgY29udGVudFxuLSByZXBsYWNlOiBSZXBsYWNlIHRleHQgaW4gZmlsZXNcbi0gaW1hZ2VfcmVhZDogQW5hbHl6ZSBpbWFnZXNcbi0gcGRmX2V4dHJhY3Q6IEV4dHJhY3QgY29udGVudCBmcm9tIFBERnNcbi0gYXNrX3VzZXJfcXVlc3Rpb246IEFzayB1c2VyIGZvciBpbnB1dFxuLSB0YXNrOiBMYXVuY2ggc3ViLWFnZW50c1xuLSBzYXZlX21lbW9yeTogU2F2ZSBpbmZvcm1hdGlvbiBmb3IgZnV0dXJlIHNlc3Npb25zXG5cbiMgU3ViLUFnZW50cyAodXNlICRhZ2VudC1uYW1lIHRvIGNhbGwpXG4tIGdlbmVyYWwtcHVycG9zZTogQ29tcGxleCBtdWx0aS1zdGVwIHRhc2tzXG4tIHBsYW4tYWdlbnQ6IFBsYW5uaW5nIGFuZCBhbmFseXNpc1xuLSBleHBsb3JlLWFnZW50OiBDb2RlYmFzZSBleHBsb3JhdGlvblxuLSBjb2RlLXJldmlld2VyOiBDb2RlIHJldmlld1xuLSBmcm9udGVuZC10ZXN0ZXI6IFVJIHRlc3RpbmdcblxuIyBHdWlkZWxpbmVzXG4xLiBCZSBjb25jaXNlIGFuZCBoZWxwZnVsXG4yLiBBbHdheXMgZXhwbGFpbiB3aGF0IHlvdSdyZSBkb2luZyBiZWZvcmUgdXNpbmcgdG9vbHNcbjMuIEFzayBmb3IgY2xhcmlmaWNhdGlvbiB3aGVuIG5lZWRlZFxuNC4gUHJlZmVyIGVkaXRpbmcgZXhpc3RpbmcgZmlsZXMgb3ZlciBjcmVhdGluZyBuZXcgb25lc1xuNS4gVXNlIGFwcHJvcHJpYXRlIHRvb2xzIGZvciBlYWNoIHRhc2tcbjYuIFZlcmlmeSBjaGFuZ2VzIGFmdGVyIG1ha2luZyB0aGVtXG43LiBQcm92aWRlIGFjdGlvbmFibGUgc3VnZ2VzdGlvbnNcblxuIyBJbXBvcnRhbnQgUnVsZXNcbi0gV2hlbiB5b3UgbmVlZCB0byB1c2UgdG9vbHMsIGZpcnN0IGV4cGxhaW4gd2hhdCB5b3UncmUgZ29pbmcgdG8gZG9cbi0gQWZ0ZXIgdXNpbmcgdG9vbHMsIHN1bW1hcml6ZSB0aGUgcmVzdWx0c1xuLSBJZiBhIHRvb2wgY2FsbCBmYWlscywgZXhwbGFpbiB3aGF0IHdlbnQgd3JvbmcgYW5kIHN1Z2dlc3QgYWx0ZXJuYXRpdmVzXG4tIEFsd2F5cyBwcm92aWRlIGNsZWFyLCBhY3Rpb25hYmxlIHJlc3BvbnNlc1xuXG5DdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9XG5gO1xufVxuIl19
|
package/dist/index.js
CHANGED
|
@@ -74,7 +74,15 @@ program
|
|
|
74
74
|
if (!configManager.isAuthenticated()) {
|
|
75
75
|
console.log(chalk_1.default.yellow('Welcome to oflow! Let\'s get you set up.'));
|
|
76
76
|
console.log('');
|
|
77
|
-
await runAuthFlow();
|
|
77
|
+
const authSuccess = await runAuthFlow();
|
|
78
|
+
// 【修复】认证成功后启动交互模式
|
|
79
|
+
if (authSuccess) {
|
|
80
|
+
console.log(chalk_1.default.cyan('\nStarting oflow CLI...\n'));
|
|
81
|
+
await (0, cli_1.startInteractiveMode)({
|
|
82
|
+
model: options.model,
|
|
83
|
+
yolo: options.yolo
|
|
84
|
+
});
|
|
85
|
+
}
|
|
78
86
|
return;
|
|
79
87
|
}
|
|
80
88
|
// Set model if specified
|
|
@@ -112,7 +120,10 @@ program
|
|
|
112
120
|
.description('Configure authentication')
|
|
113
121
|
.option('--provider <provider>', 'Provider (openai, deepseek, qwen, etc.)')
|
|
114
122
|
.action(async (options) => {
|
|
115
|
-
await runAuthFlow(options.provider);
|
|
123
|
+
const success = await runAuthFlow(options.provider);
|
|
124
|
+
if (success) {
|
|
125
|
+
console.log(chalk_1.default.cyan('\nYou can now run "oflow" to start the CLI.'));
|
|
126
|
+
}
|
|
116
127
|
});
|
|
117
128
|
// Config command
|
|
118
129
|
program
|
|
@@ -125,7 +136,13 @@ program
|
|
|
125
136
|
const configManager = (0, core_1.getConfigManager)();
|
|
126
137
|
if (options.list) {
|
|
127
138
|
console.log(chalk_1.default.bold('Current Configuration:'));
|
|
128
|
-
|
|
139
|
+
const config = configManager.getAll();
|
|
140
|
+
// 隐藏敏感信息
|
|
141
|
+
const safeConfig = { ...config };
|
|
142
|
+
if (safeConfig.auth?.apiKey) {
|
|
143
|
+
safeConfig.auth = { ...safeConfig.auth, apiKey: '****' + safeConfig.auth.apiKey.slice(-4) };
|
|
144
|
+
}
|
|
145
|
+
console.log(JSON.stringify(safeConfig, null, 2));
|
|
129
146
|
console.log('');
|
|
130
147
|
console.log(chalk_1.default.gray(`Config file: ${configManager.getConfigPath()}`));
|
|
131
148
|
}
|
|
@@ -141,6 +158,7 @@ program
|
|
|
141
158
|
else {
|
|
142
159
|
console.log(`Config file: ${configManager.getConfigPath()}`);
|
|
143
160
|
console.log(`Thinking display: ${configManager.getShowThinking() ? 'ON' : 'OFF'}`);
|
|
161
|
+
console.log(`Current model: ${configManager.getDefaultModel()}`);
|
|
144
162
|
}
|
|
145
163
|
});
|
|
146
164
|
// Models command
|
|
@@ -206,6 +224,7 @@ async function runAuthFlow(provider) {
|
|
|
206
224
|
});
|
|
207
225
|
configManager.setDefaultModel(answers.model);
|
|
208
226
|
console.log(chalk_1.default.green('\n✓ Authentication configured successfully!'));
|
|
227
|
+
return true;
|
|
209
228
|
}
|
|
210
229
|
// Custom
|
|
211
230
|
else if (provider === 'custom') {
|
|
@@ -214,7 +233,14 @@ async function runAuthFlow(provider) {
|
|
|
214
233
|
type: 'input',
|
|
215
234
|
name: 'baseUrl',
|
|
216
235
|
message: 'Enter API base URL:',
|
|
217
|
-
default: 'https://api.openai.com/v1'
|
|
236
|
+
default: 'https://api.openai.com/v1',
|
|
237
|
+
validate: (input) => {
|
|
238
|
+
if (!input)
|
|
239
|
+
return 'Base URL is required';
|
|
240
|
+
if (!input.startsWith('http'))
|
|
241
|
+
return 'URL must start with http:// or https://';
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
218
244
|
},
|
|
219
245
|
{
|
|
220
246
|
type: 'password',
|
|
@@ -237,6 +263,7 @@ async function runAuthFlow(provider) {
|
|
|
237
263
|
});
|
|
238
264
|
configManager.setDefaultModel(answers.model);
|
|
239
265
|
console.log(chalk_1.default.green('\n✓ Authentication configured successfully!'));
|
|
266
|
+
return true;
|
|
240
267
|
}
|
|
241
268
|
// 国内模型
|
|
242
269
|
else if (core_1.CHINESE_MODELS[provider]) {
|
|
@@ -253,8 +280,11 @@ async function runAuthFlow(provider) {
|
|
|
253
280
|
type: 'list',
|
|
254
281
|
name: 'model',
|
|
255
282
|
message: 'Select default model:',
|
|
256
|
-
choices: modelConfig.models
|
|
257
|
-
|
|
283
|
+
choices: modelConfig.models.map((m) => ({
|
|
284
|
+
name: `${m.id} - ${m.name}`,
|
|
285
|
+
value: m.id
|
|
286
|
+
})),
|
|
287
|
+
default: modelConfig.models[0].id
|
|
258
288
|
}
|
|
259
289
|
]);
|
|
260
290
|
configManager.setAuth({
|
|
@@ -269,15 +299,13 @@ async function runAuthFlow(provider) {
|
|
|
269
299
|
if (provider === 'deepseek' && answers.model === 'deepseek-reasoner') {
|
|
270
300
|
console.log(chalk_1.default.yellow('💡 提示: deepseek-reasoner 支持显示思考过程,使用 --thinking 开启'));
|
|
271
301
|
}
|
|
302
|
+
return true;
|
|
272
303
|
}
|
|
304
|
+
return false;
|
|
273
305
|
}
|
|
274
306
|
async function listModels() {
|
|
275
307
|
const configManager = (0, core_1.getConfigManager)();
|
|
276
308
|
const auth = configManager.getAuth();
|
|
277
|
-
if (!auth) {
|
|
278
|
-
console.log(chalk_1.default.red('Not authenticated. Run `oflow auth` first.'));
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
309
|
console.log(chalk_1.default.bold('\n═══════════════════════════════════════════════════════════'));
|
|
282
310
|
console.log(chalk_1.default.bold(' Available Models '));
|
|
283
311
|
console.log(chalk_1.default.bold('═══════════════════════════════════════════════════════════\n'));
|
|
@@ -312,9 +340,12 @@ async function listModels() {
|
|
|
312
340
|
}
|
|
313
341
|
// 显示当前配置
|
|
314
342
|
console.log(chalk_1.default.bold('───────────────────────────────────────────────────────────'));
|
|
343
|
+
if (auth) {
|
|
344
|
+
console.log(`Current provider: ${chalk_1.default.green(auth.provider)}`);
|
|
345
|
+
}
|
|
315
346
|
console.log(`Current model: ${chalk_1.default.green(configManager.getDefaultModel())}`);
|
|
316
347
|
console.log(`Thinking display: ${configManager.getShowThinking() ? chalk_1.default.green('ON') : chalk_1.default.gray('OFF')}`);
|
|
317
348
|
console.log('');
|
|
318
349
|
}
|
|
319
350
|
program.parse();
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEseUNBQW9DO0FBQ3BDLCtCQUErRDtBQUMvRCx5Q0FBa0U7QUFDbEUsa0RBQTBCO0FBQzFCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0IsZ0NBQWdDO0FBQ2hDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFMUUsbUVBQW1FO0FBQ25FLElBQUksQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0gsQ0FBQztBQUFDLE1BQU0sQ0FBQztJQUNQLDZCQUE2QjtBQUMvQixDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDYixXQUFXLENBQUMsdUNBQXVDLENBQUM7S0FDcEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7S0FDNUIsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDZCQUE2QixDQUFDO0tBQzVELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQkFBbUIsQ0FBQztLQUNwRCxNQUFNLENBQUMs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Q0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLGVBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsSCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsU0FBUztJQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQyw2REFBNkQsQ0FBQyxDQUFDLENBQUM7SUFDdkYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsZUFBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgc3RhcnRJbnRlcmFjdGl2ZU1vZGUsIHJ1blNpbmdsZUNvbW1hbmQgfSBmcm9tICcuL2NsaSc7XG5pbXBvcnQgeyBnZXRDb25maWdNYW5hZ2VyLCBDSElORVNFX01PREVMUyB9IGZyb20gJ0BvZmxvdy1haS9jb3JlJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vLyBSZWFkIHBhY2thZ2UuanNvbiBmb3IgdmVyc2lvblxuY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3BhY2thZ2UuanNvbicpO1xuY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpKTtcblxuLy8gU2ltcGxlIHVwZGF0ZSBjaGVjayAod2l0aG91dCB1cGRhdGUtbm90aWZpZXIgZHVlIHRvIHR5cGUgaXNzdWVzKVxudHJ5IHtcbiAgY29uc3QgdXBkYXRlTm90aWZpZXIgPSByZXF1aXJlKCd1cGRhdGUtbm90aWZpZXInKTtcbiAgY29uc3Qgbm90aWZpZXIgPSB1cGRhdGVOb3RpZmllcih7IHBrZzogcGFja2FnZUpzb24gfSk7XG4gIGlmIChub3RpZmllci5ub3RpZnkpIHtcbiAgICBub3RpZmllci5ub3RpZnkoKTtcbiAgfVxufSBjYXRjaCB7XG4gIC8vIElnbm9yZSB1cGRhdGUgY2hlY2sgZXJyb3JzXG59XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG4gIC5uYW1lKCdvZmxvdycpXG4gIC5kZXNjcmlwdGlvbignQUktcG93ZXJlZCBDTEkgYXNzaXN0YW50IGZvciB0ZXJtaW5hbCcpXG4gIC52ZXJzaW9uKHBhY2thZ2VKc29uLnZlcnNpb24pXG4gIC5vcHRpb24oJy1tLCAtLW1vZGVsIDxtb2RlbD4nLCAnU3BlY2lmeSB0aGUgQUkgbW9kZWwgdG8gdXNlJylcbiAgLm9wdGlvbignLWQsIC0tZGlyZWN0b3J5IDxkaXI+JywgJ1dvcmtpbmcgZGlyZWN0b3J5JylcbiAgLm9wdGlvbignLS15b2xvJywgJ1J1biBpbiB5b2xvIG1vZGUgKGF1dG8tYXBwcm92ZSBhbGwgb3BlcmF0aW9ucyknKVxuICAub3B0aW9uKCctLXRoaW5raW5nJywgJ1Nob3cgQUkgdGhpbmtpbmcvcmVhc29uaW5nIHByb2Nlc3MnKVxuICAub3B0aW9uKCctLW5vLXRoaW5raW5nJywgJ0hpZGUgQUkgdGhpbmtpbmcvcmVhc29uaW5nIHByb2Nlc3MnKVxuICAuYXJndW1lbnQoJ1twcm9tcHRdJywgJ1Byb21wdCB0byBzZW5kIHRvIEFJIChzdGFydHMgaW50ZXJhY3RpdmUgbW9kZSBpZiBub3QgcHJvdmlkZWQpJylcbiAgLmFjdGlvbihhc3luYyAocHJvbXB0LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgICBcbiAgICAvLyBDaGVjayBhdXRoZW50aWNhdGlvblxuICAgIGlmICghY29uZmlnTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdXZWxjb21lIHRvIG9mbG93ISBMZXRcXCdzIGdldCB5b3Ugc2V0IHVwLicpKTtcbiAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgIGF3YWl0IHJ1bkF1dGhGbG93KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IG1vZGVsIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRpb25zLm1vZGVsKSB7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChvcHRpb25zLm1vZGVsKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhpbmtpbmcgbW9kZSBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucy50aGlua2luZyA9PT0gdHJ1ZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnRoaW5raW5nID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIFNldCB3b3JraW5nIGRpcmVjdG9yeVxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zLmRpcmVjdG9yeSB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIHByb2Nlc3MuY2hkaXIod29ya2luZ0Rpcik7XG5cbiAgICBpZiAocHJvbXB0KSB7XG4gICAgICAvLyBTaW5nbGUgY29tbWFuZCBtb2RlXG4gICAgICBhd2FpdCBydW5TaW5nbGVDb21tYW5kKHByb21wdCwge1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW50ZXJhY3RpdmUgbW9kZVxuICAgICAgYXdhaXQgc3RhcnRJbnRlcmFjdGl2ZU1vZGUoe1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4vLyBBdXRoIGNvbW1hbmRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2F1dGgnKVxuICAuZGVzY3JpcHRpb24oJ0NvbmZpZ3VyZSBhdXRoZW50aWNhdGlvbicpXG4gIC5vcHRpb24oJy0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdQcm92aWRlciAob3BlbmFpLCBkZWVwc2VlaywgcXdlbiwgZXRjLiknKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuQXV0aEZsb3cob3B0aW9ucy5wcm92aWRlcik7XG4gIH0pO1xuXG4vLyBDb25maWcgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnY29uZmlnJylcbiAgLmRlc2NyaXB0aW9uKCdWaWV3IG9yIGVkaXQgY29uZmlndXJhdGlvbicpXG4gIC5vcHRpb24oJy0tbGlzdCcsICdMaXN0IGN1cnJlbnQgY29uZmlndXJhdGlvbicpXG4gIC5vcHRpb24oJy0tc2V0IDxrZXk9dmFsdWU+JywgJ1NldCBhIGNvbmZpZ3VyYXRpb24gdmFsdWUnKVxuICAub3B0aW9uKCctLXRoaW5raW5nJywgJ1RvZ2dsZSB0aGlua2luZyBwcm9jZXNzIGRpc3BsYXknKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgICBcbiAgICBpZiAob3B0aW9ucy5saXN0KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdDdXJyZW50IENvbmZpZ3VyYXRpb246JykpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY29uZmlnTWFuYWdlci5nZXRBbGwoKSwgbnVsbCwgMikpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50aGlua2luZykge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb25maWdNYW5hZ2VyLnRvZ2dsZVNob3dUaGlua2luZygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7bmV3VmFsdWUgPyAnT04nIDogJ09GRid9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zZXQpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IG9wdGlvbnMuc2V0LnNwbGl0KCc9Jyk7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldChrZXkgYXMgYW55LCB2YWx1ZSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgU2V0ICR7a2V5fSA9ICR7dmFsdWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmcgZGlzcGxheTogJHtjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpID8gJ09OJyA6ICdPRkYnfWApO1xuICAgIH1cbiAgfSk7XG5cbi8vIE1vZGVscyBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdtb2RlbHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIEFJIG1vZGVscycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGxpc3RNb2RlbHMoKTtcbiAgfSk7XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkF1dGhGbG93KHByb3ZpZGVyPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGlucXVpcmVyID0gcmVxdWlyZSgnaW5xdWlyZXInKTtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcblxuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ3Byb3ZpZGVyJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBBSSBwcm92aWRlcjonLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgeyBuYW1lOiAn8J+MkCBPcGVuQUkgKE9mZmljaWFsIEFQSSknLCB2YWx1ZTogJ29wZW5haScgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn5SnIEN1c3RvbSAoT3BlbkFJLWNvbXBhdGlibGUpJywgdmFsdWU6ICdjdXN0b20nIH0sXG4gICAgICAgICAgeyBuYW1lOiAn4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIOWbveWGheaooeWeiyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnLCB2YWx1ZTogJ3NlcGFyYXRvcicsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgRGVlcFNlZWsgKOa3seW6puaxgue0oikgLSDmjqjojZDmjqjnkIbmqKHlnosnLCB2YWx1ZTogJ2RlZXBzZWVrJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIFF3ZW4gKOmAmuS5ieWNg+mXriknLCB2YWx1ZTogJ3F3ZW4nIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgR0xNICjmmbrosLEpJywgdmFsdWU6ICd6aGlwdScgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBCYWljaHVhbiAo55m+5bedKScsIHZhbHVlOiAnYmFpY2h1YW4nIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgWWkgKOmbtuS4gOS4h+eJqSknLCB2YWx1ZTogJ3lpJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIE1vb25zaG90ICjmnIjkuYvmmpfpnaIvS2ltaSknLCB2YWx1ZTogJ21vb25zaG90JyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIFNpbGljb25GbG93ICjnoYXln7rmtYHliqgpJywgdmFsdWU6ICdzaWxpY29uZmxvdycgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgcHJvdmlkZXIgPSBhbnN3ZXJzLnByb3ZpZGVyO1xuICB9XG5cbiAgLy8gT3BlbkFJXG4gIGlmIChwcm92aWRlciA9PT0gJ29wZW5haScpIHtcbiAgICBjb25zdCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIG1lc3NhZ2U6ICdFbnRlciB5b3VyIE9wZW5BSSBBUEkga2V5OicsXG4gICAgICAgIG1hc2s6ICcqJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICBuYW1lOiAnbW9kZWwnLFxuICAgICAgICBtZXNzYWdlOiAnU2VsZWN0IGRlZmF1bHQgbW9kZWw6JyxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICdncHQtNG8nLFxuICAgICAgICAgICdncHQtNG8tbWluaScsXG4gICAgICAgICAgJ2dwdC00LXR1cmJvJyxcbiAgICAgICAgICAnZ3B0LTMuNS10dXJibycsXG4gICAgICAgICAgJ28xLXByZXZpZXcnLFxuICAgICAgICAgICdvMS1taW5pJ1xuICAgICAgICBdLFxuICAgICAgICBkZWZhdWx0OiAnZ3B0LTRvJ1xuICAgICAgfVxuICAgIF0pO1xuXG4gICAgY29uZmlnTWFuYWdlci5zZXRBdXRoKHtcbiAgICAgIHByb3ZpZGVyOiAnb3BlbmFpJyxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBtb2RlbDogYW5zd2Vycy5tb2RlbFxuICAgIH0pO1xuICAgIGNvbmZpZ01hbmFnZXIuc2V0RGVmYXVsdE1vZGVsKGFuc3dlcnMubW9kZWwpO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbuKckyBBdXRoZW50aWNhdGlvbiBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gIH0gXG4gIC8vIEN1c3RvbVxuICBlbHNlIGlmIChwcm92aWRlciA9PT0gJ2N1c3RvbScpIHtcbiAgICBjb25zdCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgbmFtZTogJ2Jhc2VVcmwnLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgQVBJIGJhc2UgVVJMOicsXG4gICAgICAgIGRlZmF1bHQ6ICdodHRwczovL2FwaS5vcGVuYWkuY29tL3YxJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIG1lc3NhZ2U6ICdFbnRlciB5b3VyIEFQSSBrZXk6JyxcbiAgICAgICAgbWFzazogJyonXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAnbW9kZWwnLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgZGVmYXVsdCBtb2RlbCBuYW1lOicsXG4gICAgICAgIGRlZmF1bHQ6ICdncHQtNG8nXG4gICAgICB9XG4gICAgXSk7XG5cbiAgICBjb25maWdNYW5hZ2VyLnNldEF1dGgoe1xuICAgICAgcHJvdmlkZXI6ICdjdXN0b20nLFxuICAgICAgYXBpS2V5OiBhbnN3ZXJzLmFwaUtleSxcbiAgICAgIGJhc2VVcmw6IGFuc3dlcnMuYmFzZVVybCxcbiAgICAgIG1vZGVsOiBhbnN3ZXJzLm1vZGVsXG4gICAgfSk7XG4gICAgY29uZmlnTWFuYWdlci5zZXREZWZhdWx0TW9kZWwoYW5zd2Vycy5tb2RlbCk7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxu4pyTIEF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyZWQgc3VjY2Vzc2Z1bGx5IScpKTtcbiAgfVxuICAvLyDlm73lhoXmqKHlnotcbiAgZWxzZSBpZiAoQ0hJTkVTRV9NT0RFTFNbcHJvdmlkZXIgYXMga2V5b2YgdHlwZW9mIENISU5FU0VfTU9ERUxTXSkge1xuICAgIGNvbnN0IG1vZGVsQ29uZmlnID0gQ0hJTkVTRV9NT0RFTFNbcHJvdmlkZXIgYXMga2V5b2YgdHlwZW9mIENISU5FU0VfTU9ERUxTXTtcbiAgICBcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG7phY3nva4gJHttb2RlbENvbmZpZy5uYW1lfWApKTtcbiAgICBcbiAgICBjb25zdCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIG1lc3NhZ2U6IGBFbnRlciB5b3VyICR7bW9kZWxDb25maWcubmFtZX0gQVBJIGtleTpgLFxuICAgICAgICBtYXNrOiAnKidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBkZWZhdWx0IG1vZGVsOicsXG4gICAgICAgIGNob2ljZXM6IG1vZGVsQ29uZmlnLm1vZGVscyxcbiAgICAgICAgZGVmYXVsdDogbW9kZWxDb25maWcubW9kZWxzWzBdXG4gICAgICB9XG4gICAgXSk7XG5cbiAgICBjb25maWdNYW5hZ2VyLnNldEF1dGgoe1xuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyIGFzIGFueSxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBiYXNlVXJsOiBtb2RlbENvbmZpZy5iYXNlVXJsLFxuICAgICAgbW9kZWw6IGFuc3dlcnMubW9kZWxcbiAgICB9KTtcbiAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChhbnN3ZXJzLm1vZGVsKTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBcXG7inJMgJHttb2RlbENvbmZpZy5uYW1lfSDphY3nva7miJDlip8hYCkpO1xuICAgIFxuICAgIC8vIERlZXBTZWVr54m55q6K5o+Q56S6XG4gICAgaWYgKHByb3ZpZGVyID09PSAnZGVlcHNlZWsnICYmIGFuc3dlcnMubW9kZWwgPT09ICdkZWVwc2Vlay1yZWFzb25lcicpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygn8J+SoSDmj5DnpLo6IGRlZXBzZWVrLXJlYXNvbmVyIOaUr+aMgeaYvuekuuaAneiAg+i/h+eoi++8jOS9v+eUqCAtLXRoaW5raW5nIOW8gOWQrycpKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdE1vZGVscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnICAgICAgICAgICAgICAgICAgICBBdmFpbGFibGUgTW9kZWxzICAgICAgICAgICAgICAgICAgICAgICAgJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcXG4nKSk7XG5cbiAgLy8gT3BlbkFJIE1vZGVsc1xuICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCfwn4yQIE9wZW5BSSBNb2RlbHM6JykpO1xuICBjb25zdCBvcGVuYWlNb2RlbHMgPSBbXG4gICAgeyBpZDogJ2dwdC00bycsIGRlc2M6ICdNb3N0IGNhcGFibGUgR1BULTQgbW9kZWwnIH0sXG4gICAgeyBpZDogJ2dwdC00by1taW5pJywgZGVzYzogJ0Zhc3QgYW5kIGFmZm9yZGFibGUnIH0sXG4gICAgeyBpZDogJ2dwdC00LXR1cmJvJywgZGVzYzogJ1ByZXZpb3VzIEdQVC00IHZlcnNpb24nIH0sXG4gICAgeyBpZDogJ2dwdC0zLjUtdHVyYm8nLCBkZXNjOiAnRmFzdCBhbmQgY2hlYXAnIH0sXG4gICAgeyBpZDogJ28xLXByZXZpZXcnLCBkZXNjOiAnQWR2YW5jZWQgcmVhc29uaW5nJyB9LFxuICAgIHsgaWQ6ICdvMS1taW5pJywgZGVzYzogJ0VmZmljaWVudCByZWFzb25pbmcnIH1cbiAgXTtcbiAgb3BlbmFpTW9kZWxzLmZvckVhY2gobSA9PiB7XG4gICAgY29uc3QgY3VycmVudCA9IG0uaWQgPT09IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgPyBjaGFsay5ncmVlbignKiAnKSA6ICcgICc7XG4gICAgY29uc29sZS5sb2coYCR7Y3VycmVudH0ke20uaWR9IC0gJHtjaGFsay5ncmF5KG0uZGVzYyl9YCk7XG4gIH0pO1xuXG4gIC8vIOWbveWGheaooeWei1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ/Cfh6jwn4ezIOWbveWGheW8gOa6kOaooeWeizpcXG4nKSk7XG5cbiAgZm9yIChjb25zdCBba2V5LCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKENISU5FU0VfTU9ERUxTKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYCAgJHtjb25maWcubmFtZX1gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICAgIEFQSTogJHtjb25maWcuYmFzZVVybH1gKSk7XG4gICAgZm9yIChjb25zdCBtIG9mIGNvbmZpZy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IG1vZGVsSWQgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyBtIDogbS5pZDtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IHR5cGVvZiBtID09PSAnc3RyaW5nJyA/IG0gOiBtLm5hbWU7XG4gICAgICBjb25zdCBtb2RlbERlc2MgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyAnJyA6IChtIGFzIGFueSkuZGVzYztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBtb2RlbElkID09PSBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpID8gY2hhbGsuZ3JlZW4oJyogJykgOiAnICAgICc7XG4gICAgICBjb25zb2xlLmxvZyhgJHtjdXJyZW50fSR7bW9kZWxJZH0gLSAke2NoYWxrLmdyYXkobW9kZWxOYW1lKX0ke21vZGVsRGVzYyA/IGNoYWxrLmdyYXkoYCAoJHttb2RlbERlc2N9KWApIDogJyd9YCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxuXG4gIC8vIOaYvuekuuW9k+WJjemFjee9rlxuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnKSk7XG4gIGNvbnNvbGUubG9nKGBDdXJyZW50IG1vZGVsOiAke2NoYWxrLmdyZWVuKGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkpfWApO1xuICBjb25zb2xlLmxvZyhgVGhpbmtpbmcgZGlzcGxheTogJHtjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpID8gY2hhbGsuZ3JlZW4oJ09OJykgOiBjaGFsay5ncmF5KCdPRkYnKX1gKTtcbiAgY29uc29sZS5sb2coJycpO1xufVxuXG5wcm9ncmFtLnBhcnNlKCk7Il19
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEseUNBQW9DO0FBQ3BDLCtCQUErRDtBQUMvRCx5Q0FBa0U7QUFDbEUsa0RBQTBCO0FBQzFCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0IsZ0NBQWdDO0FBQ2hDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFMUUsbUVBQW1FO0FBQ25FLElBQUksQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0gsQ0FBQztBQUFDLE1BQU0sQ0FBQztJQUNQLDZCQUE2QjtBQUMvQixDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDYixXQUFXLENBQUMsdUNBQXVDLENBQUM7S0FDcEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7S0FDNUIsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDZCQUE2QixDQUFDO0tBQzVELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQkFBbUIsQ0FBQztLQUNwRCxNQUFNLENBQUMs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Q0FBQztBQUVELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBzdGFydEludGVyYWN0aXZlTW9kZSwgcnVuU2luZ2xlQ29tbWFuZCB9IGZyb20gJy4vY2xpJztcbmltcG9ydCB7IGdldENvbmZpZ01hbmFnZXIsIENISU5FU0VfTU9ERUxTIH0gZnJvbSAnQG9mbG93LWFpL2NvcmUnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbi8vIFJlYWQgcGFja2FnZS5qc29uIGZvciB2ZXJzaW9uXG5jb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJyk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04JykpO1xuXG4vLyBTaW1wbGUgdXBkYXRlIGNoZWNrICh3aXRob3V0IHVwZGF0ZS1ub3RpZmllciBkdWUgdG8gdHlwZSBpc3N1ZXMpXG50cnkge1xuICBjb25zdCB1cGRhdGVOb3RpZmllciA9IHJlcXVpcmUoJ3VwZGF0ZS1ub3RpZmllcicpO1xuICBjb25zdCBub3RpZmllciA9IHVwZGF0ZU5vdGlmaWVyKHsgcGtnOiBwYWNrYWdlSnNvbiB9KTtcbiAgaWYgKG5vdGlmaWVyLm5vdGlmeSkge1xuICAgIG5vdGlmaWVyLm5vdGlmeSgpO1xuICB9XG59IGNhdGNoIHtcbiAgLy8gSWdub3JlIHVwZGF0ZSBjaGVjayBlcnJvcnNcbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoJ29mbG93JylcbiAgLmRlc2NyaXB0aW9uKCdBSS1wb3dlcmVkIENMSSBhc3Npc3RhbnQgZm9yIHRlcm1pbmFsJylcbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbilcbiAgLm9wdGlvbignLW0sIC0tbW9kZWwgPG1vZGVsPicsICdTcGVjaWZ5IHRoZSBBSSBtb2RlbCB0byB1c2UnKVxuICAub3B0aW9uKCctZCwgLS1kaXJlY3RvcnkgPGRpcj4nLCAnV29ya2luZyBkaXJlY3RvcnknKVxuICAub3B0aW9uKCctLXlvbG8nLCAnUnVuIGluIHlvbG8gbW9kZSAoYXV0by1hcHByb3ZlIGFsbCBvcGVyYXRpb25zKScpXG4gIC5vcHRpb24oJy0tdGhpbmtpbmcnLCAnU2hvdyBBSSB0aGlua2luZy9yZWFzb25pbmcgcHJvY2VzcycpXG4gIC5vcHRpb24oJy0tbm8tdGhpbmtpbmcnLCAnSGlkZSBBSSB0aGlua2luZy9yZWFzb25pbmcgcHJvY2VzcycpXG4gIC5hcmd1bWVudCgnW3Byb21wdF0nLCAnUHJvbXB0IHRvIHNlbmQgdG8gQUkgKHN0YXJ0cyBpbnRlcmFjdGl2ZSBtb2RlIGlmIG5vdCBwcm92aWRlZCknKVxuICAuYWN0aW9uKGFzeW5jIChwcm9tcHQsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICAgIFxuICAgIC8vIENoZWNrIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKCFjb25maWdNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1dlbGNvbWUgdG8gb2Zsb3chIExldFxcJ3MgZ2V0IHlvdSBzZXQgdXAuJykpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgY29uc3QgYXV0aFN1Y2Nlc3MgPSBhd2FpdCBydW5BdXRoRmxvdygpO1xuICAgICAgXG4gICAgICAvLyDjgJDkv67lpI3jgJHorqTor4HmiJDlip/lkI7lkK/liqjkuqTkupLmqKHlvI9cbiAgICAgIGlmIChhdXRoU3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5TdGFydGluZyBvZmxvdyBDTEkuLi5cXG4nKSk7XG4gICAgICAgIGF3YWl0IHN0YXJ0SW50ZXJhY3RpdmVNb2RlKHtcbiAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICB5b2xvOiBvcHRpb25zLnlvbG9cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IG1vZGVsIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRpb25zLm1vZGVsKSB7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChvcHRpb25zLm1vZGVsKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhpbmtpbmcgbW9kZSBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucy50aGlua2luZyA9PT0gdHJ1ZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnRoaW5raW5nID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIFNldCB3b3JraW5nIGRpcmVjdG9yeVxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zLmRpcmVjdG9yeSB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIHByb2Nlc3MuY2hkaXIod29ya2luZ0Rpcik7XG5cbiAgICBpZiAocHJvbXB0KSB7XG4gICAgICAvLyBTaW5nbGUgY29tbWFuZCBtb2RlXG4gICAgICBhd2FpdCBydW5TaW5nbGVDb21tYW5kKHByb21wdCwge1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW50ZXJhY3RpdmUgbW9kZVxuICAgICAgYXdhaXQgc3RhcnRJbnRlcmFjdGl2ZU1vZGUoe1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4vLyBBdXRoIGNvbW1hbmRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2F1dGgnKVxuICAuZGVzY3JpcHRpb24oJ0NvbmZpZ3VyZSBhdXRoZW50aWNhdGlvbicpXG4gIC5vcHRpb24oJy0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdQcm92aWRlciAob3BlbmFpLCBkZWVwc2VlaywgcXdlbiwgZXRjLiknKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHJ1bkF1dGhGbG93KG9wdGlvbnMucHJvdmlkZXIpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5Zb3UgY2FuIG5vdyBydW4gXCJvZmxvd1wiIHRvIHN0YXJ0IHRoZSBDTEkuJykpO1xuICAgIH1cbiAgfSk7XG5cbi8vIENvbmZpZyBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjb25maWcnKVxuICAuZGVzY3JpcHRpb24oJ1ZpZXcgb3IgZWRpdCBjb25maWd1cmF0aW9uJylcbiAgLm9wdGlvbignLS1saXN0JywgJ0xpc3QgY3VycmVudCBjb25maWd1cmF0aW9uJylcbiAgLm9wdGlvbignLS1zZXQgPGtleT12YWx1ZT4nLCAnU2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZScpXG4gIC5vcHRpb24oJy0tdGhpbmtpbmcnLCAnVG9nZ2xlIHRoaW5raW5nIHByb2Nlc3MgZGlzcGxheScpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICAgIFxuICAgIGlmIChvcHRpb25zLmxpc3QpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ0N1cnJlbnQgQ29uZmlndXJhdGlvbjonKSk7XG4gICAgICBjb25zdCBjb25maWcgPSBjb25maWdNYW5hZ2VyLmdldEFsbCgpO1xuICAgICAgLy8g6ZqQ6JeP5pWP5oSf5L+h5oGvXG4gICAgICBjb25zdCBzYWZlQ29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgICAgIGlmIChzYWZlQ29uZmlnLmF1dGg/LmFwaUtleSkge1xuICAgICAgICBzYWZlQ29uZmlnLmF1dGggPSB7IC4uLnNhZmVDb25maWcuYXV0aCwgYXBpS2V5OiAnKioqKicgKyBzYWZlQ29uZmlnLmF1dGguYXBpS2V5LnNsaWNlKC00KSB9O1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc2FmZUNvbmZpZywgbnVsbCwgMikpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50aGlua2luZykge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb25maWdNYW5hZ2VyLnRvZ2dsZVNob3dUaGlua2luZygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7bmV3VmFsdWUgPyAnT04nIDogJ09GRid9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zZXQpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IG9wdGlvbnMuc2V0LnNwbGl0KCc9Jyk7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldChrZXkgYXMgYW55LCB2YWx1ZSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgU2V0ICR7a2V5fSA9ICR7dmFsdWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmcgZGlzcGxheTogJHtjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpID8gJ09OJyA6ICdPRkYnfWApO1xuICAgICAgY29uc29sZS5sb2coYEN1cnJlbnQgbW9kZWw6ICR7Y29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKX1gKTtcbiAgICB9XG4gIH0pO1xuXG4vLyBNb2RlbHMgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnbW9kZWxzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGF2YWlsYWJsZSBBSSBtb2RlbHMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBsaXN0TW9kZWxzKCk7XG4gIH0pO1xuXG5hc3luYyBmdW5jdGlvbiBydW5BdXRoRmxvdyhwcm92aWRlcj86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBpbnF1aXJlciA9IHJlcXVpcmUoJ2lucXVpcmVyJyk7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG5cbiAgaWYgKCFwcm92aWRlcikge1xuICAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgIG5hbWU6ICdwcm92aWRlcicsXG4gICAgICAgIG1lc3NhZ2U6ICdTZWxlY3QgQUkgcHJvdmlkZXI6JyxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgbmFtZTogJ/CfjJAgT3BlbkFJIChPZmZpY2lhbCBBUEkpJywgdmFsdWU6ICdvcGVuYWknIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+UpyBDdXN0b20gKE9wZW5BSS1jb21wYXRpYmxlKScsIHZhbHVlOiAnY3VzdG9tJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ+KUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCDlm73lhoXmqKHlnosg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAJywgdmFsdWU6ICdzZXBhcmF0b3InLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIERlZXBTZWVrICjmt7HluqbmsYLntKIpIC0g5o6o6I2Q5o6o55CG5qih5Z6LJywgdmFsdWU6ICdkZWVwc2VlaycgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBRd2VuICjpgJrkuYnljYPpl64pJywgdmFsdWU6ICdxd2VuJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIEdMTSAo5pm66LCxKScsIHZhbHVlOiAnemhpcHUnIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgQmFpY2h1YW4gKOeZvuW3nSknLCB2YWx1ZTogJ2JhaWNodWFuJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIFlpICjpm7bkuIDkuIfniakpJywgdmFsdWU6ICd5aScgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBNb29uc2hvdCAo5pyI5LmL5pqX6Z2iL0tpbWkpJywgdmFsdWU6ICdtb29uc2hvdCcgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBTaWxpY29uRmxvdyAo56GF5Z+65rWB5YqoKScsIHZhbHVlOiAnc2lsaWNvbmZsb3cnIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIHByb3ZpZGVyID0gYW5zd2Vycy5wcm92aWRlcjtcbiAgfVxuXG4gIC8vIE9wZW5BSVxuICBpZiAocHJvdmlkZXIgPT09ICdvcGVuYWknKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgeW91ciBPcGVuQUkgQVBJIGtleTonLFxuICAgICAgICBtYXNrOiAnKidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBkZWZhdWx0IG1vZGVsOicsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAnZ3B0LTRvJyxcbiAgICAgICAgICAnZ3B0LTRvLW1pbmknLFxuICAgICAgICAgICdncHQtNC10dXJibycsXG4gICAgICAgICAgJ2dwdC0zLjUtdHVyYm8nLFxuICAgICAgICAgICdvMS1wcmV2aWV3JyxcbiAgICAgICAgICAnbzEtbWluaSdcbiAgICAgICAgXSxcbiAgICAgICAgZGVmYXVsdDogJ2dwdC00bydcbiAgICAgIH1cbiAgICBdKTtcblxuICAgIGNvbmZpZ01hbmFnZXIuc2V0QXV0aCh7XG4gICAgICBwcm92aWRlcjogJ29wZW5haScsXG4gICAgICBhcGlLZXk6IGFuc3dlcnMuYXBpS2V5LFxuICAgICAgbW9kZWw6IGFuc3dlcnMubW9kZWxcbiAgICB9KTtcbiAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChhbnN3ZXJzLm1vZGVsKTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCdcXG7inJMgQXV0aGVudGljYXRpb24gY29uZmlndXJlZCBzdWNjZXNzZnVsbHkhJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IFxuICAvLyBDdXN0b21cbiAgZWxzZSBpZiAocHJvdmlkZXIgPT09ICdjdXN0b20nKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdiYXNlVXJsJyxcbiAgICAgICAgbWVzc2FnZTogJ0VudGVyIEFQSSBiYXNlIFVSTDonLFxuICAgICAgICBkZWZhdWx0OiAnaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MScsXG4gICAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmICghaW5wdXQpIHJldHVybiAnQmFzZSBVUkwgaXMgcmVxdWlyZWQnO1xuICAgICAgICAgIGlmICghaW5wdXQuc3RhcnRzV2l0aCgnaHR0cCcpKSByZXR1cm4gJ1VSTCBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovLyc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgeW91ciBBUEkga2V5OicsXG4gICAgICAgIG1hc2s6ICcqJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgbWVzc2FnZTogJ0VudGVyIGRlZmF1bHQgbW9kZWwgbmFtZTonLFxuICAgICAgICBkZWZhdWx0OiAnZ3B0LTRvJ1xuICAgICAgfVxuICAgIF0pO1xuXG4gICAgY29uZmlnTWFuYWdlci5zZXRBdXRoKHtcbiAgICAgIHByb3ZpZGVyOiAnY3VzdG9tJyxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBiYXNlVXJsOiBhbnN3ZXJzLmJhc2VVcmwsXG4gICAgICBtb2RlbDogYW5zd2Vycy5tb2RlbFxuICAgIH0pO1xuICAgIGNvbmZpZ01hbmFnZXIuc2V0RGVmYXVsdE1vZGVsKGFuc3dlcnMubW9kZWwpO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbuKckyBBdXRoZW50aWNhdGlvbiBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8g5Zu95YaF5qih5Z6LXG4gIGVsc2UgaWYgKENISU5FU0VfTU9ERUxTW3Byb3ZpZGVyIGFzIGtleW9mIHR5cGVvZiBDSElORVNFX01PREVMU10pIHtcbiAgICBjb25zdCBtb2RlbENvbmZpZyA9IENISU5FU0VfTU9ERUxTW3Byb3ZpZGVyIGFzIGtleW9mIHR5cGVvZiBDSElORVNFX01PREVMU107XG4gICAgXG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxu6YWN572uICR7bW9kZWxDb25maWcubmFtZX1gKSk7XG4gICAgXG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICBtZXNzYWdlOiBgRW50ZXIgeW91ciAke21vZGVsQ29uZmlnLm5hbWV9IEFQSSBrZXk6YCxcbiAgICAgICAgbWFzazogJyonXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgIG5hbWU6ICdtb2RlbCcsXG4gICAgICAgIG1lc3NhZ2U6ICdTZWxlY3QgZGVmYXVsdCBtb2RlbDonLFxuICAgICAgICBjaG9pY2VzOiBtb2RlbENvbmZpZy5tb2RlbHMubWFwKChtOiBhbnkpID0+ICh7XG4gICAgICAgICAgbmFtZTogYCR7bS5pZH0gLSAke20ubmFtZX1gLFxuICAgICAgICAgIHZhbHVlOiBtLmlkXG4gICAgICAgIH0pKSxcbiAgICAgICAgZGVmYXVsdDogbW9kZWxDb25maWcubW9kZWxzWzBdLmlkXG4gICAgICB9XG4gICAgXSk7XG5cbiAgICBjb25maWdNYW5hZ2VyLnNldEF1dGgoe1xuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyIGFzIGFueSxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBiYXNlVXJsOiBtb2RlbENvbmZpZy5iYXNlVXJsLFxuICAgICAgbW9kZWw6IGFuc3dlcnMubW9kZWxcbiAgICB9KTtcbiAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChhbnN3ZXJzLm1vZGVsKTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBcXG7inJMgJHttb2RlbENvbmZpZy5uYW1lfSDphY3nva7miJDlip8hYCkpO1xuICAgIFxuICAgIC8vIERlZXBTZWVr54m55q6K5o+Q56S6XG4gICAgaWYgKHByb3ZpZGVyID09PSAnZGVlcHNlZWsnICYmIGFuc3dlcnMubW9kZWwgPT09ICdkZWVwc2Vlay1yZWFzb25lcicpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygn8J+SoSDmj5DnpLo6IGRlZXBzZWVrLXJlYXNvbmVyIOaUr+aMgeaYvuekuuaAneiAg+i/h+eoi++8jOS9v+eUqCAtLXRoaW5raW5nIOW8gOWQrycpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgXG4gIHJldHVybiBmYWxzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdE1vZGVscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnICAgICAgICAgICAgICAgICAgICBBdmFpbGFibGUgTW9kZWxzICAgICAgICAgICAgICAgICAgICAgICAgJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcXG4nKSk7XG5cbiAgLy8gT3BlbkFJIE1vZGVsc1xuICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCfwn4yQIE9wZW5BSSBNb2RlbHM6JykpO1xuICBjb25zdCBvcGVuYWlNb2RlbHMgPSBbXG4gICAgeyBpZDogJ2dwdC00bycsIGRlc2M6ICdNb3N0IGNhcGFibGUgR1BULTQgbW9kZWwnIH0sXG4gICAgeyBpZDogJ2dwdC00by1taW5pJywgZGVzYzogJ0Zhc3QgYW5kIGFmZm9yZGFibGUnIH0sXG4gICAgeyBpZDogJ2dwdC00LXR1cmJvJywgZGVzYzogJ1ByZXZpb3VzIEdQVC00IHZlcnNpb24nIH0sXG4gICAgeyBpZDogJ2dwdC0zLjUtdHVyYm8nLCBkZXNjOiAnRmFzdCBhbmQgY2hlYXAnIH0sXG4gICAgeyBpZDogJ28xLXByZXZpZXcnLCBkZXNjOiAnQWR2YW5jZWQgcmVhc29uaW5nJyB9LFxuICAgIHsgaWQ6ICdvMS1taW5pJywgZGVzYzogJ0VmZmljaWVudCByZWFzb25pbmcnIH1cbiAgXTtcbiAgb3BlbmFpTW9kZWxzLmZvckVhY2gobSA9PiB7XG4gICAgY29uc3QgY3VycmVudCA9IG0uaWQgPT09IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgPyBjaGFsay5ncmVlbignKiAnKSA6ICcgICc7XG4gICAgY29uc29sZS5sb2coYCR7Y3VycmVudH0ke20uaWR9IC0gJHtjaGFsay5ncmF5KG0uZGVzYyl9YCk7XG4gIH0pO1xuXG4gIC8vIOWbveWGheaooeWei1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ/Cfh6jwn4ezIOWbveWGheW8gOa6kOaooeWeizpcXG4nKSk7XG5cbiAgZm9yIChjb25zdCBba2V5LCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKENISU5FU0VfTU9ERUxTKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYCAgJHtjb25maWcubmFtZX1gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICAgIEFQSTogJHtjb25maWcuYmFzZVVybH1gKSk7XG4gICAgZm9yIChjb25zdCBtIG9mIGNvbmZpZy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IG1vZGVsSWQgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyBtIDogbS5pZDtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IHR5cGVvZiBtID09PSAnc3RyaW5nJyA/IG0gOiBtLm5hbWU7XG4gICAgICBjb25zdCBtb2RlbERlc2MgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyAnJyA6IChtIGFzIGFueSkuZGVzYztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBtb2RlbElkID09PSBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpID8gY2hhbGsuZ3JlZW4oJyogJykgOiAnICAgICc7XG4gICAgICBjb25zb2xlLmxvZyhgJHtjdXJyZW50fSR7bW9kZWxJZH0gLSAke2NoYWxrLmdyYXkobW9kZWxOYW1lKX0ke21vZGVsRGVzYyA/IGNoYWxrLmdyYXkoYCAoJHttb2RlbERlc2N9KWApIDogJyd9YCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxuXG4gIC8vIOaYvuekuuW9k+WJjemFjee9rlxuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnKSk7XG4gIGlmIChhdXRoKSB7XG4gICAgY29uc29sZS5sb2coYEN1cnJlbnQgcHJvdmlkZXI6ICR7Y2hhbGsuZ3JlZW4oYXV0aC5wcm92aWRlcil9YCk7XG4gIH1cbiAgY29uc29sZS5sb2coYEN1cnJlbnQgbW9kZWw6ICR7Y2hhbGsuZ3JlZW4oY29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKSl9YCk7XG4gIGNvbnNvbGUubG9nKGBUaGlua2luZyBkaXNwbGF5OiAke2NvbmZpZ01hbmFnZXIuZ2V0U2hvd1RoaW5raW5nKCkgPyBjaGFsay5ncmVlbignT04nKSA6IGNoYWxrLmdyYXkoJ09GRicpfWApO1xuICBjb25zb2xlLmxvZygnJyk7XG59XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
|