claude-code-sync 0.1.8 → 0.1.10
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 +122 -6
- package/dist/index.js +65 -29
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -466,6 +466,43 @@ program
|
|
|
466
466
|
// ============================================================================
|
|
467
467
|
// Hook Command (for Claude Code integration)
|
|
468
468
|
// ============================================================================
|
|
469
|
+
// Track session state for title generation (first user prompt)
|
|
470
|
+
const SESSION_STATE_FILE = path.join(process.env.HOME || "~", ".config", "claude-code-sync", "session-state.json");
|
|
471
|
+
function loadSessionState() {
|
|
472
|
+
try {
|
|
473
|
+
if (fs.existsSync(SESSION_STATE_FILE)) {
|
|
474
|
+
return JSON.parse(fs.readFileSync(SESSION_STATE_FILE, "utf-8"));
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
catch {
|
|
478
|
+
// Ignore errors
|
|
479
|
+
}
|
|
480
|
+
return {};
|
|
481
|
+
}
|
|
482
|
+
function saveSessionState(state) {
|
|
483
|
+
try {
|
|
484
|
+
const dir = path.dirname(SESSION_STATE_FILE);
|
|
485
|
+
if (!fs.existsSync(dir)) {
|
|
486
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
487
|
+
}
|
|
488
|
+
fs.writeFileSync(SESSION_STATE_FILE, JSON.stringify(state, null, 2));
|
|
489
|
+
}
|
|
490
|
+
catch {
|
|
491
|
+
// Ignore errors
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
function generateTitle(prompt) {
|
|
495
|
+
// Use first 80 chars of first prompt as title, trim at word boundary
|
|
496
|
+
const trimmed = prompt.slice(0, 80).trim();
|
|
497
|
+
if (prompt.length > 80) {
|
|
498
|
+
const lastSpace = trimmed.lastIndexOf(" ");
|
|
499
|
+
if (lastSpace > 40) {
|
|
500
|
+
return trimmed.slice(0, lastSpace) + "...";
|
|
501
|
+
}
|
|
502
|
+
return trimmed + "...";
|
|
503
|
+
}
|
|
504
|
+
return trimmed;
|
|
505
|
+
}
|
|
469
506
|
program
|
|
470
507
|
.command("hook <event>")
|
|
471
508
|
.description("Handle Claude Code hook events (reads stdin)")
|
|
@@ -488,14 +525,25 @@ program
|
|
|
488
525
|
}
|
|
489
526
|
try {
|
|
490
527
|
const client = new index_1.SyncClient(config);
|
|
528
|
+
const sessionState = loadSessionState();
|
|
491
529
|
switch (event) {
|
|
492
530
|
case "SessionStart": {
|
|
493
531
|
const data = JSON.parse(input);
|
|
532
|
+
// Initialize session state
|
|
533
|
+
sessionState[data.session_id] = {
|
|
534
|
+
model: data.model,
|
|
535
|
+
tokenUsage: { input: 0, output: 0 },
|
|
536
|
+
messageCount: 0,
|
|
537
|
+
};
|
|
538
|
+
saveSessionState(sessionState);
|
|
494
539
|
const session = {
|
|
495
540
|
sessionId: data.session_id,
|
|
496
541
|
source: "claude-code",
|
|
497
542
|
cwd: data.cwd,
|
|
543
|
+
model: data.model,
|
|
498
544
|
permissionMode: data.permission_mode,
|
|
545
|
+
thinkingEnabled: data.thinking_enabled,
|
|
546
|
+
mcpServers: data.mcp_servers,
|
|
499
547
|
startType: data.source === "startup" ? "new" : data.source,
|
|
500
548
|
startedAt: new Date().toISOString(),
|
|
501
549
|
projectPath: data.cwd,
|
|
@@ -506,24 +554,53 @@ program
|
|
|
506
554
|
}
|
|
507
555
|
case "SessionEnd": {
|
|
508
556
|
const data = JSON.parse(input);
|
|
557
|
+
const state = sessionState[data.session_id] || {};
|
|
558
|
+
// Calculate final token usage
|
|
559
|
+
const finalTokenUsage = data.total_token_usage || state.tokenUsage;
|
|
509
560
|
const session = {
|
|
510
561
|
sessionId: data.session_id,
|
|
511
562
|
source: "claude-code",
|
|
563
|
+
title: state.firstPrompt ? generateTitle(state.firstPrompt) : undefined,
|
|
512
564
|
endReason: data.reason,
|
|
565
|
+
messageCount: data.message_count || state.messageCount,
|
|
566
|
+
toolCallCount: data.tool_call_count,
|
|
567
|
+
tokenUsage: finalTokenUsage,
|
|
568
|
+
costEstimate: data.cost_estimate,
|
|
513
569
|
endedAt: new Date().toISOString(),
|
|
514
570
|
};
|
|
515
571
|
await client.syncSession(session);
|
|
572
|
+
// Clean up session state
|
|
573
|
+
delete sessionState[data.session_id];
|
|
574
|
+
saveSessionState(sessionState);
|
|
516
575
|
break;
|
|
517
576
|
}
|
|
518
577
|
case "UserPromptSubmit": {
|
|
519
578
|
const data = JSON.parse(input);
|
|
579
|
+
const state = sessionState[data.session_id] || {};
|
|
580
|
+
// Track first prompt for title generation
|
|
581
|
+
if (!state.firstPrompt) {
|
|
582
|
+
state.firstPrompt = data.prompt;
|
|
583
|
+
sessionState[data.session_id] = state;
|
|
584
|
+
saveSessionState(sessionState);
|
|
585
|
+
// Update session with title
|
|
586
|
+
const session = {
|
|
587
|
+
sessionId: data.session_id,
|
|
588
|
+
source: "claude-code",
|
|
589
|
+
title: generateTitle(data.prompt),
|
|
590
|
+
};
|
|
591
|
+
await client.syncSession(session);
|
|
592
|
+
}
|
|
593
|
+
// Increment message count
|
|
594
|
+
state.messageCount = (state.messageCount || 0) + 1;
|
|
595
|
+
sessionState[data.session_id] = state;
|
|
596
|
+
saveSessionState(sessionState);
|
|
520
597
|
const message = {
|
|
521
598
|
sessionId: data.session_id,
|
|
522
|
-
messageId: `${data.session_id}-${Date.now()}`,
|
|
599
|
+
messageId: `${data.session_id}-user-${Date.now()}`,
|
|
523
600
|
source: "claude-code",
|
|
524
601
|
role: "user",
|
|
525
602
|
content: data.prompt,
|
|
526
|
-
timestamp: new Date().toISOString(),
|
|
603
|
+
timestamp: data.timestamp || new Date().toISOString(),
|
|
527
604
|
};
|
|
528
605
|
await client.syncMessage(message);
|
|
529
606
|
break;
|
|
@@ -532,22 +609,61 @@ program
|
|
|
532
609
|
if (!config.syncToolCalls)
|
|
533
610
|
break;
|
|
534
611
|
const data = JSON.parse(input);
|
|
612
|
+
const state = sessionState[data.session_id] || {};
|
|
535
613
|
const message = {
|
|
536
614
|
sessionId: data.session_id,
|
|
537
|
-
messageId: `${data.session_id}-tool-${Date.now()}`,
|
|
615
|
+
messageId: data.tool_use_id || `${data.session_id}-tool-${Date.now()}`,
|
|
538
616
|
source: "claude-code",
|
|
539
617
|
role: "assistant",
|
|
540
618
|
toolName: data.tool_name,
|
|
541
619
|
toolArgs: data.tool_input,
|
|
542
620
|
toolResult: data.tool_result?.output || data.tool_result?.error,
|
|
621
|
+
durationMs: data.duration_ms,
|
|
543
622
|
timestamp: new Date().toISOString(),
|
|
544
623
|
};
|
|
545
624
|
await client.syncMessage(message);
|
|
546
625
|
break;
|
|
547
626
|
}
|
|
548
627
|
case "Stop": {
|
|
549
|
-
// Stop event
|
|
550
|
-
|
|
628
|
+
// Stop event contains the assistant's response and token usage
|
|
629
|
+
const data = JSON.parse(input);
|
|
630
|
+
const state = sessionState[data.session_id] || {};
|
|
631
|
+
// Update accumulated token usage
|
|
632
|
+
if (data.token_usage) {
|
|
633
|
+
const current = state.tokenUsage || { input: 0, output: 0 };
|
|
634
|
+
state.tokenUsage = {
|
|
635
|
+
input: current.input + data.token_usage.input,
|
|
636
|
+
output: current.output + data.token_usage.output,
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
// Increment message count for assistant response
|
|
640
|
+
state.messageCount = (state.messageCount || 0) + 1;
|
|
641
|
+
sessionState[data.session_id] = state;
|
|
642
|
+
saveSessionState(sessionState);
|
|
643
|
+
// Sync the assistant's response as a message
|
|
644
|
+
if (data.response) {
|
|
645
|
+
const message = {
|
|
646
|
+
sessionId: data.session_id,
|
|
647
|
+
messageId: `${data.session_id}-assistant-${Date.now()}`,
|
|
648
|
+
source: "claude-code",
|
|
649
|
+
role: "assistant",
|
|
650
|
+
content: data.response,
|
|
651
|
+
tokenCount: data.token_usage
|
|
652
|
+
? data.token_usage.input + data.token_usage.output
|
|
653
|
+
: undefined,
|
|
654
|
+
durationMs: data.duration_ms,
|
|
655
|
+
timestamp: new Date().toISOString(),
|
|
656
|
+
};
|
|
657
|
+
await client.syncMessage(message);
|
|
658
|
+
}
|
|
659
|
+
// Update session with accumulated token usage
|
|
660
|
+
const session = {
|
|
661
|
+
sessionId: data.session_id,
|
|
662
|
+
source: "claude-code",
|
|
663
|
+
tokenUsage: state.tokenUsage,
|
|
664
|
+
messageCount: state.messageCount,
|
|
665
|
+
};
|
|
666
|
+
await client.syncSession(session);
|
|
551
667
|
break;
|
|
552
668
|
}
|
|
553
669
|
default:
|
|
@@ -564,4 +680,4 @@ program
|
|
|
564
680
|
});
|
|
565
681
|
// Parse and run
|
|
566
682
|
program.parse();
|
|
567
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHlDQUFvQztBQUNwQyxtREFBcUM7QUFDckMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtQ0FRaUI7QUF5Q2pCLGlDQUFpQztBQUNqQyxTQUFTLFVBQVU7SUFDakIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQWdCLENBQUM7UUFDekUsT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDO0tBQ3hCLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQztLQUM5RCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUV6QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRSxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFB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b0JBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUs7b0JBQy9ELFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtpQkFDcEMsQ0FBQztnQkFDRixNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDLE1BQU07WUFDUixDQUFDO1lBRUQsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNaLGtEQUFrRDtnQkFDbEQsbURBQW1EO2dCQUNuRCxNQUFNO1lBQ1IsQ0FBQztZQUVEO2dCQUNFLHdCQUF3QjtnQkFDeEIsTUFBTTtRQUNWLENBQUM7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsNENBQTRDO1FBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCxnQkFBZ0I7QUFDaEIsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKipcbiAqIENsYXVkZSBDb2RlIFN5bmMgQ0xJXG4gKlxuICogQ29tbWFuZHM6XG4gKiAgIGxvZ2luICAgLSBDb25maWd1cmUgQ29udmV4IFVSTCBhbmQgQVBJIEtleVxuICogICBsb2dvdXQgIC0gQ2xlYXIgc3RvcmVkIGNyZWRlbnRpYWxzXG4gKiAgIHN0YXR1cyAgLSBTaG93IGNvbm5lY3Rpb24gc3RhdHVzXG4gKiAgIGNvbmZpZyAgLSBTaG93IGN1cnJlbnQgY29uZmlndXJhdGlvblxuICovXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwicmVhZGxpbmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHtcbiAgbG9hZENvbmZpZyxcbiAgc2F2ZUNvbmZpZyxcbiAgY2xlYXJDb25maWcsXG4gIFN5bmNDbGllbnQsXG4gIENvbmZpZyxcbiAgU2Vzc2lvbkRhdGEsXG4gIE1lc3NhZ2VEYXRhLFxufSBmcm9tIFwiLi9pbmRleFwiO1xuXG4vLyBUeXBlcyBmb3IgQ2xhdWRlIENvZGUgaG9vayBldmVudCBkYXRhIGZyb20gc3RkaW5cbmludGVyZmFjZSBIb29rU2Vzc2lvblN0YXJ0RGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgY3dkPzogc3RyaW5nO1xuICBwZXJtaXNzaW9uX21vZGU/OiBzdHJpbmc7XG4gIHNvdXJjZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEhvb2tTZXNzaW9uRW5kRGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgcmVhc29uPzogXCJ1c2VyX3N0b3BcIiB8IFwibWF4X3R1cm5zXCIgfCBcImVycm9yXCIgfCBcImNvbXBsZXRlZFwiO1xufVxuXG5pbnRlcmZhY2UgSG9va1VzZXJQcm9tcHREYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICBwcm9tcHQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEhvb2tUb29sVXNlRGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgdG9vbF9uYW1lOiBzdHJpbmc7XG4gIHRvb2xfaW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdG9vbF9yZXN1bHQ/OiB7XG4gICAgb3V0cHV0Pzogc3RyaW5nO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICB9O1xufVxuXG4vLyBUeXBlcyBmb3IgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvblxuaW50ZXJmYWNlIENsYXVkZVNldHRpbmdzIHtcbiAgaG9va3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLy8gVHlwZSBmb3IgcGFja2FnZS5qc29uIHZlcnNpb24gZmllbGRcbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8vIFJlYWQgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwicGFja2FnZS5qc29uXCIpO1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ1BhdGgsIFwidXRmLThcIikpIGFzIFBhY2thZ2VKc29uO1xuICAgIHJldHVybiBwa2cudmVyc2lvbiB8fCBcIjAuMC4wXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcIjAuMC4wXCI7XG4gIH1cbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoXCJjbGF1ZGUtY29kZS1zeW5jXCIpXG4gIC5kZXNjcmlwdGlvbihcIlN5bmMgQ2xhdWRlIENvZGUgc2Vzc2lvbnMgdG8gT3BlblN5bmMgZGFzaGJvYXJkXCIpXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlciBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24ocXVlc3Rpb24sIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFza0FwaUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChrZXkubGVuZ3RoIDw9IDgpIHJldHVybiBcIioqKipcIjtcbiAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMCwgNCkgKyBcIioqKipcIiArIGtleS5zdWJzdHJpbmcoa2V5Lmxlbmd0aCAtIDQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwibG9naW5cIilcbiAgLmRlc2NyaXB0aW9uKFwiQ29uZmlndXJlIENvbnZleCBVUkwgYW5kIEFQSSBLZXlcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBMb2dpblxcblwiKTtcbiAgICBjb25zb2xlLmxvZyhcIkdldCB5b3VyIEFQSSBrZXkgZnJvbSB5b3VyIE9wZW5TeW5jLmRldiBTZXR0aW5ncyBwYWdlLCBzdGFydHMgd2l0aCBvc2tfLiBFbnRlciBpdCBoZXJlOlwiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMS4gR28gdG8gU2V0dGluZ3NcIik7XG4gICAgY29uc29sZS5sb2coXCIgIDIuIENsaWNrICdHZW5lcmF0ZSBBUEkgS2V5J1wiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMy4gQ29weSB0aGUga2V5IChzdGFydHMgd2l0aCBvc2tfKVxcblwiKTtcblxuICAgIGNvbnN0IGNvbnZleFVybCA9IGF3YWl0IHByb21wdChcIkNvbnZleCBVUkwgKGUuZy4sIGh0dHBzOi8veW91ci1wcm9qZWN0LmNvbnZleC5jbG91ZCk6IFwiKTtcblxuICAgIGlmICghY29udmV4VXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvbnZleCBVUkwgaXMgcmVxdWlyZWRcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFjb252ZXhVcmwuaW5jbHVkZXMoXCJjb252ZXguY2xvdWRcIikgJiYgIWNvbnZleFVybC5pbmNsdWRlcyhcImNvbnZleC5zaXRlXCIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IEludmFsaWQgQ29udmV4IFVSTC4gTXVzdCBjb250YWluIGNvbnZleC5jbG91ZCBvciBjb252ZXguc2l0ZVwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcGlLZXkgPSBhd2FpdCBwcm9tcHQoXCJBUEkgS2V5IChvc2tfLi4uKTogXCIpO1xuXG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQVBJIEtleSBpcyByZXF1aXJlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoIWFwaUtleS5zdGFydHNXaXRoKFwib3NrX1wiKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yOiBJbnZhbGlkIEFQSSBLZXkuIE11c3Qgc3RhcnQgd2l0aCBvc2tfXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogQ29uZmlnID0ge1xuICAgICAgY29udmV4VXJsLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXV0b1N5bmM6IHRydWUsXG4gICAgICBzeW5jVG9vbENhbGxzOiB0cnVlLFxuICAgICAgc3luY1RoaW5raW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gVGVzdCBjb25uZWN0aW9uXG4gICAgY29uc29sZS5sb2coXCJcXG5UZXN0aW5nIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICBjb25zdCBjb25uZWN0ZWQgPSBhd2FpdCBjbGllbnQudGVzdENvbm5lY3Rpb24oKTtcblxuICAgIGlmICghY29ubmVjdGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihcIiAgIENoZWNrIHlvdXIgVVJMIGFuZCB0cnkgYWdhaW5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBjb25maWdcbiAgICBzYXZlQ29uZmlnKGNvbmZpZyk7XG4gICAgY29uc29sZS5sb2coXCJcXG5Db25maWd1cmF0aW9uIHNhdmVkIVwiKTtcbiAgICBjb25zb2xlLmxvZyhgICAgVVJMOiAke2NvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgS2V5OiAke21hc2tBcGlLZXkoYXBpS2V5KX1gKTtcbiAgICBjb25zb2xlLmxvZyhcIlxcbk5leHQgc3RlcDogUnVuIHRoZSBzZXR1cCBjb21tYW5kIHRvIGNvbmZpZ3VyZSBDbGF1ZGUgQ29kZSBob29rczpcXG5cIik7XG4gICAgY29uc29sZS5sb2coXCIgICBjbGF1ZGUtY29kZS1zeW5jIHNldHVwXFxuXCIpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcImxvZ291dFwiKVxuICAuZGVzY3JpcHRpb24oXCJDbGVhciBzdG9yZWQgY3JlZGVudGlhbHNcIilcbiAgLmFjdGlvbigoKSA9PiB7XG4gICAgY2xlYXJDb25maWcoKTtcbiAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzIGNsZWFyZWRcIik7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3RhdHVzXCIpXG4gIC5kZXNjcmlwdGlvbihcIlNob3cgY29ubmVjdGlvbiBzdGF0dXNcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBTdGF0dXNcXG5cIik7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJDb25maWd1cmF0aW9uOlwiKTtcbiAgICBjb25zb2xlLmxvZyhgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgY29uc29sZS5sb2coYCAgQVBJIEtleTogICAgJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIEF1dG8gU3luYzogICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZSA/IFwiZW5hYmxlZFwiIDogXCJkaXNhYmxlZFwifWApO1xuICAgIGNvbnNvbGUubG9nKGAgIFRvb2wgQ2FsbHM6ICR7Y29uZmlnLnN5bmNUb29sQ2FsbHMgIT09IGZhbHNlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG4gICAgY29uc29sZS5sb2coYCAgVGhpbmtpbmc6ICAgJHtjb25maWcuc3luY1RoaW5raW5nID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0ZWQgdG8gQ29udmV4IGJhY2tlbmRcXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXFxuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJjb25maWdcIilcbiAgLmRlc2NyaXB0aW9uKFwiU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb25cIilcbiAgLm9wdGlvbihcIi0tanNvblwiLCBcIk91dHB1dCBhcyBKU09OXCIpXG4gIC5hY3Rpb24oKG9wdGlvbnM6IHsganNvbj86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgY29uZmlndXJlZDogZmFsc2UgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZC4gUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXAuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25maWd1cmVkOiB0cnVlLFxuICAgICAgICAgICAgY29udmV4VXJsOiBjb25maWcuY29udmV4VXJsLFxuICAgICAgICAgICAgYXBpS2V5OiBtYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpLFxuICAgICAgICAgICAgYXV0b1N5bmM6IGNvbmZpZy5hdXRvU3luYyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVG9vbENhbGxzOiBjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVGhpbmtpbmc6IGNvbmZpZy5zeW5jVGhpbmtpbmcgPT09IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcXG4gIEN1cnJlbnQgQ29uZmlndXJhdGlvblxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGBDb252ZXggVVJMOiAgJHtjb25maWcuY29udmV4VXJsfWApO1xuICAgICAgY29uc29sZS5sb2coYEFQSSBLZXk6ICAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgQXV0byBTeW5jOiAgICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBUb29sIENhbGxzOiAgJHtjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2V9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmc6ICAgICR7Y29uZmlnLnN5bmNUaGlua2luZyA9PT0gdHJ1ZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5Db25maWcgZmlsZTogfi8uY29uZmlnL2NsYXVkZS1jb2RlLXN5bmMvY29uZmlnLmpzb25cXG5gKTtcbiAgICB9XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic2V0IDxrZXk+IDx2YWx1ZT5cIilcbiAgLmRlc2NyaXB0aW9uKFwiU2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZVwiKVxuICAuYWN0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm90IGNvbmZpZ3VyZWQuIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgZmlyc3QuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkS2V5cyA9IFtcImF1dG9TeW5jXCIsIFwic3luY1Rvb2xDYWxsc1wiLCBcInN5bmNUaGlua2luZ1wiXTtcbiAgICBpZiAoIXZhbGlkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGtleS4gVmFsaWQga2V5czogJHt2YWxpZEtleXMuam9pbihcIiwgXCIpfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb2xWYWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCIxXCIgfHwgdmFsdWUgPT09IFwieWVzXCI7XG4gICAgXG4gICAgLy8gVHlwZS1zYWZlIGNvbmZpZyB1cGRhdGVcbiAgICBpZiAoa2V5ID09PSBcImF1dG9TeW5jXCIpIHtcbiAgICAgIGNvbmZpZy5hdXRvU3luYyA9IGJvb2xWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzeW5jVG9vbENhbGxzXCIpIHtcbiAgICAgIGNvbmZpZy5zeW5jVG9vbENhbGxzID0gYm9vbFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN5bmNUaGlua2luZ1wiKSB7XG4gICAgICBjb25maWcuc3luY1RoaW5raW5nID0gYm9vbFZhbHVlO1xuICAgIH1cblxuICAgIHNhdmVDb25maWcoY29uZmlnKTtcbiAgICBjb25zb2xlLmxvZyhgU2V0ICR7a2V5fSA9ICR7Ym9vbFZhbHVlfWApO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2V0dXAgQ29tbWFuZCAoY29uZmlndXJlcyBDbGF1ZGUgQ29kZSBob29rcylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ2xhdWRlIENvZGUgaG9va3MgY29uZmlndXJhdGlvblxuY29uc3QgQ0xBVURFX0hPT0tTX0NPTkZJRyA9IHtcbiAgaG9va3M6IHtcbiAgICBTZXNzaW9uU3RhcnQ6IFtcbiAgICAgIHtcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFNlc3Npb25TdGFydFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU2Vzc2lvbkVuZDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU2Vzc2lvbkVuZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgVXNlclByb21wdFN1Ym1pdDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgVXNlclByb21wdFN1Ym1pdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgUG9zdFRvb2xVc2U6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2hlcjogXCIqXCIsXG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBQb3N0VG9vbFVzZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU3RvcDogW1xuICAgICAge1xuICAgICAgICBtYXRjaGVyOiBcIipcIixcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFN0b3BcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcInNldHVwXCIpXG4gIC5kZXNjcmlwdGlvbihcIkFkZCBob29rcyB0byBDbGF1ZGUgQ29kZSBzZXR0aW5ncyAoY29uZmlndXJlcyB+Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbilcIilcbiAgLm9wdGlvbihcIi0tZm9yY2VcIiwgXCJPdmVyd3JpdGUgZXhpc3RpbmcgaG9va3MgY29uZmlndXJhdGlvblwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiB7IGZvcmNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiKTtcbiAgICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNldHRpbmdzLmpzb25cIik7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIFNldHVwXFxuXCIpO1xuXG4gICAgLy8gQ2hlY2sgaWYgcGx1Z2luIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkXG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IFBsdWdpbiBub3QgY29uZmlndXJlZCB5ZXQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIGZpcnN0IHRvIHNldCB1cCBjcmVkZW50aWFscy5cXG5cIik7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIC5jbGF1ZGUgZGlyZWN0b3J5IGlmIG5lZWRlZFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhjbGF1ZGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2xhdWRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRlZCB+Ly5jbGF1ZGUgZGlyZWN0b3J5XCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBzZXR0aW5nc1xuICAgIGxldCBleGlzdGluZ1NldHRpbmdzOiBDbGF1ZGVTZXR0aW5ncyA9IHt9O1xuICAgIGxldCBoYXNFeGlzdGluZ0hvb2tzID0gZmFsc2U7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgZXhpc3RpbmdTZXR0aW5ncyA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQ2xhdWRlU2V0dGluZ3M7XG4gICAgICAgIGhhc0V4aXN0aW5nSG9va3MgPSAhIWV4aXN0aW5nU2V0dGluZ3MuaG9va3M7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRm91bmQgZXhpc3Rpbmcgc2V0dGluZ3MuanNvblwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBleGlzdGluZyBzZXR0aW5ncy5qc29uLCB3aWxsIGNyZWF0ZSBuZXcgb25lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBleGlzdGluZyBob29rc1xuICAgIGlmIChoYXNFeGlzdGluZ0hvb2tzICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkV4aXN0aW5nIGhvb2tzIGNvbmZpZ3VyYXRpb24gZm91bmQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBVc2UgLS1mb3JjZSB0byBvdmVyd3JpdGUsIG9yIG1hbnVhbGx5IG1lcmdlIHRoZSBob29rcy5cXG5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlRvIG1hbnVhbGx5IGFkZCwgaW5jbHVkZSB0aGVzZSBob29rcyBpbiB5b3VyIHNldHRpbmdzLmpzb246XCIpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoQ0xBVURFX0hPT0tTX0NPTkZJRywgbnVsbCwgMikpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlIHNldHRpbmdzXG4gICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7XG4gICAgICAuLi5leGlzdGluZ1NldHRpbmdzLFxuICAgICAgLi4uQ0xBVURFX0hPT0tTX0NPTkZJRyxcbiAgICB9O1xuXG4gICAgLy8gV3JpdGUgc2V0dGluZ3NcbiAgICB0cnkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5nc1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld1NldHRpbmdzLCBudWxsLCAyKSk7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNsYXVkZSBDb2RlIGhvb2tzIGNvbmZpZ3VyZWQhXCIpO1xuICAgICAgY29uc29sZS5sb2coYCAgIFNldHRpbmdzIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCJcXG5TZXR1cCBjb21wbGV0ZS4gU2Vzc2lvbnMgd2lsbCBzeW5jIGF1dG9tYXRpY2FsbHkuXFxuXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd3JpdGluZyBzZXR0aW5nczpcIiwgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJ2ZXJpZnlcIilcbiAgLmRlc2NyaXB0aW9uKFwiVmVyaWZ5IGNyZWRlbnRpYWxzIGFuZCBDbGF1ZGUgQ29kZSBjb25maWd1cmF0aW9uXCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiXFxuICBPcGVuU3luYyBTZXR1cCBWZXJpZmljYXRpb25cXG5cIik7XG5cbiAgICAvLyBDaGVjayBjcmVkZW50aWFsc1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBPS1wiKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQVBJIEtleTogJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBOT1QgQ09ORklHVVJFRFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgQ2xhdWRlIENvZGUgY29uZmlnXG4gICAgY29uc3Qgc2V0dGluZ3NQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiLCBcInNldHRpbmdzLmpzb25cIik7XG4gICAgbGV0IGhvb2tzQ29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc2V0dGluZ3NQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhzZXR0aW5nc1BhdGgsIFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDbGF1ZGVTZXR0aW5ncztcbiAgICAgICAgaG9va3NDb25maWd1cmVkID0gISFzZXR0aW5ncy5ob29rcz8uU2Vzc2lvblN0YXJ0O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBwYXJzZSBlcnJvcnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICBpZiAoaG9va3NDb25maWd1cmVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogT0tcIik7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQ29uZmlnIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCIgICBIb29rcyByZWdpc3RlcmVkOiBjbGF1ZGUtY29kZS1zeW5jXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogTk9UIENPTkZJR1VSRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBzZXR1cCcgdG8gY29uZmlndXJlIGhvb2tzXCIpO1xuICAgIH1cblxuICAgIC8vIFRlc3QgY29ubmVjdGlvbiBpZiBjcmVkZW50aWFscyBleGlzdFxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuVGVzdGluZyBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuICAgICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IE9LXFxuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlnICYmIGhvb2tzQ29uZmlndXJlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJSZWFkeSEgU3RhcnQgQ2xhdWRlIENvZGUgYW5kIHNlc3Npb25zIHdpbGwgc3luYyBhdXRvbWF0aWNhbGx5LlxcblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3luYyBUZXN0IENvbW1hbmQgKHRlc3QgY29ubmVjdGl2aXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3luY3Rlc3RcIilcbiAgLmRlc2NyaXB0aW9uKFwiVGVzdCBjb25uZWN0aXZpdHkgYW5kIGNyZWF0ZSBhIHRlc3Qgc2Vzc2lvblwiKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIENvbm5lY3Rpb24gVGVzdFxcblwiKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFxcblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIkNvbmZpZ3VyYXRpb246XCIpO1xuICAgIGNvbnNvbGUubG9nKGAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBBUEkgS2V5OiAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBPS1wiKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgdGVzdCBzZXNzaW9uIHRvIHZlcmlmeSBmdWxsIHN5bmMgd29ya3NcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuQ3JlYXRpbmcgdGVzdCBzZXNzaW9uLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFNlc3Npb24gPSB7XG4gICAgICAgICAgc2Vzc2lvbklkOiBgdGVzdC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIiBhcyBjb25zdCxcbiAgICAgICAgICB0aXRsZTogXCJDb25uZWN0aW9uIFRlc3RcIixcbiAgICAgICAgICBwcm9qZWN0TmFtZTogXCJzeW5jdGVzdFwiLFxuICAgICAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGVuZGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHRlc3RTZXNzaW9uKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJUZXN0IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiXFxuU3luYyB0ZXN0IHBhc3NlZC4gUmVhZHkgdG8gc3luYyBDbGF1ZGUgQ29kZSBzZXNzaW9ucy5cXG5cIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCBzZXNzaW9uIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJcXG5Db25uZWN0aW9uIHdvcmtzIGJ1dCBzeW5jIG1heSBoYXZlIGlzc3Vlcy5cXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNoZWNrIHlvdXIgQ29udmV4IFVSTCBhbmQgQVBJIGtleS5cXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSG9vayBDb21tYW5kIChmb3IgQ2xhdWRlIENvZGUgaW50ZWdyYXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJob29rIDxldmVudD5cIilcbiAgLmRlc2NyaXB0aW9uKFwiSGFuZGxlIENsYXVkZSBDb2RlIGhvb2sgZXZlbnRzIChyZWFkcyBzdGRpbilcIilcbiAgLmFjdGlvbihhc3luYyAoZXZlbnQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICAvLyBFeGl0IHNpbGVudGx5IGlmIG5vdCBjb25maWd1cmVkIChkb24ndCBibG9jayBDbGF1ZGUgQ29kZSlcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmF1dG9TeW5jID09PSBmYWxzZSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIC8vIFJlYWQgSlNPTiBpbnB1dCBmcm9tIHN0ZGluXG4gICAgbGV0IGlucHV0ID0gXCJcIjtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHByb2Nlc3Muc3RkaW4pIHtcbiAgICAgIGlucHV0ICs9IGNodW5rO1xuICAgIH1cblxuICAgIGlmICghaW5wdXQudHJpbSgpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTeW5jQ2xpZW50KGNvbmZpZyk7XG5cbiAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgY2FzZSBcIlNlc3Npb25TdGFydFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tTZXNzaW9uU3RhcnREYXRhO1xuICAgICAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIGN3ZDogZGF0YS5jd2QsXG4gICAgICAgICAgICBwZXJtaXNzaW9uTW9kZTogZGF0YS5wZXJtaXNzaW9uX21vZGUsXG4gICAgICAgICAgICBzdGFydFR5cGU6IGRhdGEuc291cmNlID09PSBcInN0YXJ0dXBcIiA/IFwibmV3XCIgOiAoZGF0YS5zb3VyY2UgYXMgU2Vzc2lvbkRhdGFbXCJzdGFydFR5cGVcIl0pLFxuICAgICAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0UGF0aDogZGF0YS5jd2QsXG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogZGF0YS5jd2QgPyBkYXRhLmN3ZC5zcGxpdChcIi9cIikucG9wKCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiU2Vzc2lvbkVuZFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tTZXNzaW9uRW5kRGF0YTtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICBlbmRSZWFzb246IGRhdGEucmVhc29uLFxuICAgICAgICAgICAgZW5kZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlVzZXJQcm9tcHRTdWJtaXRcIjoge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGlucHV0KSBhcyBIb29rVXNlclByb21wdERhdGE7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogYCR7ZGF0YS5zZXNzaW9uX2lkfS0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgcm9sZTogXCJ1c2VyXCIsXG4gICAgICAgICAgICBjb250ZW50OiBkYXRhLnByb21wdCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlBvc3RUb29sVXNlXCI6IHtcbiAgICAgICAgICBpZiAoIWNvbmZpZy5zeW5jVG9vbENhbGxzKSBicmVhaztcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1Rvb2xVc2VEYXRhO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGAke2RhdGEuc2Vzc2lvbl9pZH0tdG9vbC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICAgIHRvb2xOYW1lOiBkYXRhLnRvb2xfbmFtZSxcbiAgICAgICAgICAgIHRvb2xBcmdzOiBkYXRhLnRvb2xfaW5wdXQsXG4gICAgICAgICAgICB0b29sUmVzdWx0OiBkYXRhLnRvb2xfcmVzdWx0Py5vdXRwdXQgfHwgZGF0YS50b29sX3Jlc3VsdD8uZXJyb3IsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJTdG9wXCI6IHtcbiAgICAgICAgICAvLyBTdG9wIGV2ZW50IGluZGljYXRlcyBDbGF1ZGUgZmluaXNoZWQgcmVzcG9uZGluZ1xuICAgICAgICAgIC8vIFdlIGNvdWxkIHRyYWNrIHRoaXMgYnV0IGZvciBub3cganVzdCBhY2tub3dsZWRnZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBVbmtub3duIGV2ZW50LCBpZ25vcmVcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBMb2cgdG8gc3RkZXJyIGJ1dCBkb24ndCBibG9jayBDbGF1ZGUgQ29kZVxuICAgICAgY29uc29sZS5lcnJvcihgW2NsYXVkZS1jb2RlLXN5bmNdIEVycm9yOiAke2Vycm9yfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cbiAgfSk7XG5cbi8vIFBhcnNlIGFuZCBydW5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
|
|
683
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHlDQUFvQztBQUNwQyxtREFBcUM7QUFDckMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtQ0FRaUI7QUFrRWpCLGlDQUFpQztBQUNqQyxTQUFTLFVBQVU7SUFDakIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQWdCLENBQUM7UUFDekUsT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDO0tBQ3hCLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQztLQUM5RCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUV6QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRSxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFB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O0lBQ2xCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsNENBQTRDO1FBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCxnQkFBZ0I7QUFDaEIsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKipcbiAqIENsYXVkZSBDb2RlIFN5bmMgQ0xJXG4gKlxuICogQ29tbWFuZHM6XG4gKiAgIGxvZ2luICAgLSBDb25maWd1cmUgQ29udmV4IFVSTCBhbmQgQVBJIEtleVxuICogICBsb2dvdXQgIC0gQ2xlYXIgc3RvcmVkIGNyZWRlbnRpYWxzXG4gKiAgIHN0YXR1cyAgLSBTaG93IGNvbm5lY3Rpb24gc3RhdHVzXG4gKiAgIGNvbmZpZyAgLSBTaG93IGN1cnJlbnQgY29uZmlndXJhdGlvblxuICovXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwicmVhZGxpbmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHtcbiAgbG9hZENvbmZpZyxcbiAgc2F2ZUNvbmZpZyxcbiAgY2xlYXJDb25maWcsXG4gIFN5bmNDbGllbnQsXG4gIENvbmZpZyxcbiAgU2Vzc2lvbkRhdGEsXG4gIE1lc3NhZ2VEYXRhLFxufSBmcm9tIFwiLi9pbmRleFwiO1xuXG4vLyBUeXBlcyBmb3IgQ2xhdWRlIENvZGUgaG9vayBldmVudCBkYXRhIGZyb20gc3RkaW5cbmludGVyZmFjZSBIb29rU2Vzc2lvblN0YXJ0RGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgY3dkPzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgcGVybWlzc2lvbl9tb2RlPzogc3RyaW5nO1xuICBzb3VyY2U/OiBzdHJpbmc7XG4gIHRoaW5raW5nX2VuYWJsZWQ/OiBib29sZWFuO1xuICBtY3Bfc2VydmVycz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSG9va1Nlc3Npb25FbmREYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICByZWFzb24/OiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG4gIG1lc3NhZ2VfY291bnQ/OiBudW1iZXI7XG4gIHRvb2xfY2FsbF9jb3VudD86IG51bWJlcjtcbiAgdG90YWxfdG9rZW5fdXNhZ2U/OiB7XG4gICAgaW5wdXQ6IG51bWJlcjtcbiAgICBvdXRwdXQ6IG51bWJlcjtcbiAgfTtcbiAgY29zdF9lc3RpbWF0ZT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEhvb2tVc2VyUHJvbXB0RGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgcHJvbXB0OiBzdHJpbmc7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEhvb2tUb29sVXNlRGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgdG9vbF9uYW1lOiBzdHJpbmc7XG4gIHRvb2xfdXNlX2lkPzogc3RyaW5nO1xuICB0b29sX2lucHV0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRvb2xfcmVzdWx0Pzoge1xuICAgIG91dHB1dD86IHN0cmluZztcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfTtcbiAgZHVyYXRpb25fbXM/OiBudW1iZXI7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSG9va1N0b3BEYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICByZXNwb25zZT86IHN0cmluZztcbiAgdG9rZW5fdXNhZ2U/OiB7XG4gICAgaW5wdXQ6IG51bWJlcjtcbiAgICBvdXRwdXQ6IG51bWJlcjtcbiAgfTtcbiAgZHVyYXRpb25fbXM/OiBudW1iZXI7XG4gIHN0b3BfcmVhc29uPzogc3RyaW5nO1xufVxuXG4vLyBUeXBlcyBmb3IgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvblxuaW50ZXJmYWNlIENsYXVkZVNldHRpbmdzIHtcbiAgaG9va3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLy8gVHlwZSBmb3IgcGFja2FnZS5qc29uIHZlcnNpb24gZmllbGRcbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8vIFJlYWQgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwicGFja2FnZS5qc29uXCIpO1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ1BhdGgsIFwidXRmLThcIikpIGFzIFBhY2thZ2VKc29uO1xuICAgIHJldHVybiBwa2cudmVyc2lvbiB8fCBcIjAuMC4wXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcIjAuMC4wXCI7XG4gIH1cbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoXCJjbGF1ZGUtY29kZS1zeW5jXCIpXG4gIC5kZXNjcmlwdGlvbihcIlN5bmMgQ2xhdWRlIENvZGUgc2Vzc2lvbnMgdG8gT3BlblN5bmMgZGFzaGJvYXJkXCIpXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlciBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24ocXVlc3Rpb24sIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFza0FwaUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChrZXkubGVuZ3RoIDw9IDgpIHJldHVybiBcIioqKipcIjtcbiAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMCwgNCkgKyBcIioqKipcIiArIGtleS5zdWJzdHJpbmcoa2V5Lmxlbmd0aCAtIDQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwibG9naW5cIilcbiAgLmRlc2NyaXB0aW9uKFwiQ29uZmlndXJlIENvbnZleCBVUkwgYW5kIEFQSSBLZXlcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBMb2dpblxcblwiKTtcbiAgICBjb25zb2xlLmxvZyhcIkdldCB5b3VyIEFQSSBrZXkgZnJvbSB5b3VyIE9wZW5TeW5jLmRldiBTZXR0aW5ncyBwYWdlLCBzdGFydHMgd2l0aCBvc2tfLiBFbnRlciBpdCBoZXJlOlwiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMS4gR28gdG8gU2V0dGluZ3NcIik7XG4gICAgY29uc29sZS5sb2coXCIgIDIuIENsaWNrICdHZW5lcmF0ZSBBUEkgS2V5J1wiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMy4gQ29weSB0aGUga2V5IChzdGFydHMgd2l0aCBvc2tfKVxcblwiKTtcblxuICAgIGNvbnN0IGNvbnZleFVybCA9IGF3YWl0IHByb21wdChcIkNvbnZleCBVUkwgKGUuZy4sIGh0dHBzOi8veW91ci1wcm9qZWN0LmNvbnZleC5jbG91ZCk6IFwiKTtcblxuICAgIGlmICghY29udmV4VXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvbnZleCBVUkwgaXMgcmVxdWlyZWRcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFjb252ZXhVcmwuaW5jbHVkZXMoXCJjb252ZXguY2xvdWRcIikgJiYgIWNvbnZleFVybC5pbmNsdWRlcyhcImNvbnZleC5zaXRlXCIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IEludmFsaWQgQ29udmV4IFVSTC4gTXVzdCBjb250YWluIGNvbnZleC5jbG91ZCBvciBjb252ZXguc2l0ZVwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcGlLZXkgPSBhd2FpdCBwcm9tcHQoXCJBUEkgS2V5IChvc2tfLi4uKTogXCIpO1xuXG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQVBJIEtleSBpcyByZXF1aXJlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoIWFwaUtleS5zdGFydHNXaXRoKFwib3NrX1wiKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yOiBJbnZhbGlkIEFQSSBLZXkuIE11c3Qgc3RhcnQgd2l0aCBvc2tfXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogQ29uZmlnID0ge1xuICAgICAgY29udmV4VXJsLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXV0b1N5bmM6IHRydWUsXG4gICAgICBzeW5jVG9vbENhbGxzOiB0cnVlLFxuICAgICAgc3luY1RoaW5raW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gVGVzdCBjb25uZWN0aW9uXG4gICAgY29uc29sZS5sb2coXCJcXG5UZXN0aW5nIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICBjb25zdCBjb25uZWN0ZWQgPSBhd2FpdCBjbGllbnQudGVzdENvbm5lY3Rpb24oKTtcblxuICAgIGlmICghY29ubmVjdGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihcIiAgIENoZWNrIHlvdXIgVVJMIGFuZCB0cnkgYWdhaW5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBjb25maWdcbiAgICBzYXZlQ29uZmlnKGNvbmZpZyk7XG4gICAgY29uc29sZS5sb2coXCJcXG5Db25maWd1cmF0aW9uIHNhdmVkIVwiKTtcbiAgICBjb25zb2xlLmxvZyhgICAgVVJMOiAke2NvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgS2V5OiAke21hc2tBcGlLZXkoYXBpS2V5KX1gKTtcbiAgICBjb25zb2xlLmxvZyhcIlxcbk5leHQgc3RlcDogUnVuIHRoZSBzZXR1cCBjb21tYW5kIHRvIGNvbmZpZ3VyZSBDbGF1ZGUgQ29kZSBob29rczpcXG5cIik7XG4gICAgY29uc29sZS5sb2coXCIgICBjbGF1ZGUtY29kZS1zeW5jIHNldHVwXFxuXCIpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcImxvZ291dFwiKVxuICAuZGVzY3JpcHRpb24oXCJDbGVhciBzdG9yZWQgY3JlZGVudGlhbHNcIilcbiAgLmFjdGlvbigoKSA9PiB7XG4gICAgY2xlYXJDb25maWcoKTtcbiAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzIGNsZWFyZWRcIik7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3RhdHVzXCIpXG4gIC5kZXNjcmlwdGlvbihcIlNob3cgY29ubmVjdGlvbiBzdGF0dXNcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBTdGF0dXNcXG5cIik7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJDb25maWd1cmF0aW9uOlwiKTtcbiAgICBjb25zb2xlLmxvZyhgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgY29uc29sZS5sb2coYCAgQVBJIEtleTogICAgJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIEF1dG8gU3luYzogICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZSA/IFwiZW5hYmxlZFwiIDogXCJkaXNhYmxlZFwifWApO1xuICAgIGNvbnNvbGUubG9nKGAgIFRvb2wgQ2FsbHM6ICR7Y29uZmlnLnN5bmNUb29sQ2FsbHMgIT09IGZhbHNlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG4gICAgY29uc29sZS5sb2coYCAgVGhpbmtpbmc6ICAgJHtjb25maWcuc3luY1RoaW5raW5nID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0ZWQgdG8gQ29udmV4IGJhY2tlbmRcXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXFxuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJjb25maWdcIilcbiAgLmRlc2NyaXB0aW9uKFwiU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb25cIilcbiAgLm9wdGlvbihcIi0tanNvblwiLCBcIk91dHB1dCBhcyBKU09OXCIpXG4gIC5hY3Rpb24oKG9wdGlvbnM6IHsganNvbj86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgY29uZmlndXJlZDogZmFsc2UgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZC4gUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXAuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25maWd1cmVkOiB0cnVlLFxuICAgICAgICAgICAgY29udmV4VXJsOiBjb25maWcuY29udmV4VXJsLFxuICAgICAgICAgICAgYXBpS2V5OiBtYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpLFxuICAgICAgICAgICAgYXV0b1N5bmM6IGNvbmZpZy5hdXRvU3luYyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVG9vbENhbGxzOiBjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVGhpbmtpbmc6IGNvbmZpZy5zeW5jVGhpbmtpbmcgPT09IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcXG4gIEN1cnJlbnQgQ29uZmlndXJhdGlvblxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGBDb252ZXggVVJMOiAgJHtjb25maWcuY29udmV4VXJsfWApO1xuICAgICAgY29uc29sZS5sb2coYEFQSSBLZXk6ICAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgQXV0byBTeW5jOiAgICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBUb29sIENhbGxzOiAgJHtjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2V9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmc6ICAgICR7Y29uZmlnLnN5bmNUaGlua2luZyA9PT0gdHJ1ZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5Db25maWcgZmlsZTogfi8uY29uZmlnL2NsYXVkZS1jb2RlLXN5bmMvY29uZmlnLmpzb25cXG5gKTtcbiAgICB9XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic2V0IDxrZXk+IDx2YWx1ZT5cIilcbiAgLmRlc2NyaXB0aW9uKFwiU2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZVwiKVxuICAuYWN0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm90IGNvbmZpZ3VyZWQuIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgZmlyc3QuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkS2V5cyA9IFtcImF1dG9TeW5jXCIsIFwic3luY1Rvb2xDYWxsc1wiLCBcInN5bmNUaGlua2luZ1wiXTtcbiAgICBpZiAoIXZhbGlkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGtleS4gVmFsaWQga2V5czogJHt2YWxpZEtleXMuam9pbihcIiwgXCIpfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb2xWYWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCIxXCIgfHwgdmFsdWUgPT09IFwieWVzXCI7XG4gICAgXG4gICAgLy8gVHlwZS1zYWZlIGNvbmZpZyB1cGRhdGVcbiAgICBpZiAoa2V5ID09PSBcImF1dG9TeW5jXCIpIHtcbiAgICAgIGNvbmZpZy5hdXRvU3luYyA9IGJvb2xWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzeW5jVG9vbENhbGxzXCIpIHtcbiAgICAgIGNvbmZpZy5zeW5jVG9vbENhbGxzID0gYm9vbFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN5bmNUaGlua2luZ1wiKSB7XG4gICAgICBjb25maWcuc3luY1RoaW5raW5nID0gYm9vbFZhbHVlO1xuICAgIH1cblxuICAgIHNhdmVDb25maWcoY29uZmlnKTtcbiAgICBjb25zb2xlLmxvZyhgU2V0ICR7a2V5fSA9ICR7Ym9vbFZhbHVlfWApO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2V0dXAgQ29tbWFuZCAoY29uZmlndXJlcyBDbGF1ZGUgQ29kZSBob29rcylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ2xhdWRlIENvZGUgaG9va3MgY29uZmlndXJhdGlvblxuY29uc3QgQ0xBVURFX0hPT0tTX0NPTkZJRyA9IHtcbiAgaG9va3M6IHtcbiAgICBTZXNzaW9uU3RhcnQ6IFtcbiAgICAgIHtcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFNlc3Npb25TdGFydFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU2Vzc2lvbkVuZDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU2Vzc2lvbkVuZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgVXNlclByb21wdFN1Ym1pdDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgVXNlclByb21wdFN1Ym1pdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgUG9zdFRvb2xVc2U6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2hlcjogXCIqXCIsXG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBQb3N0VG9vbFVzZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU3RvcDogW1xuICAgICAge1xuICAgICAgICBtYXRjaGVyOiBcIipcIixcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFN0b3BcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcInNldHVwXCIpXG4gIC5kZXNjcmlwdGlvbihcIkFkZCBob29rcyB0byBDbGF1ZGUgQ29kZSBzZXR0aW5ncyAoY29uZmlndXJlcyB+Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbilcIilcbiAgLm9wdGlvbihcIi0tZm9yY2VcIiwgXCJPdmVyd3JpdGUgZXhpc3RpbmcgaG9va3MgY29uZmlndXJhdGlvblwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiB7IGZvcmNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiKTtcbiAgICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNldHRpbmdzLmpzb25cIik7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIFNldHVwXFxuXCIpO1xuXG4gICAgLy8gQ2hlY2sgaWYgcGx1Z2luIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkXG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IFBsdWdpbiBub3QgY29uZmlndXJlZCB5ZXQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIGZpcnN0IHRvIHNldCB1cCBjcmVkZW50aWFscy5cXG5cIik7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIC5jbGF1ZGUgZGlyZWN0b3J5IGlmIG5lZWRlZFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhjbGF1ZGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2xhdWRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRlZCB+Ly5jbGF1ZGUgZGlyZWN0b3J5XCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBzZXR0aW5nc1xuICAgIGxldCBleGlzdGluZ1NldHRpbmdzOiBDbGF1ZGVTZXR0aW5ncyA9IHt9O1xuICAgIGxldCBoYXNFeGlzdGluZ0hvb2tzID0gZmFsc2U7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgZXhpc3RpbmdTZXR0aW5ncyA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQ2xhdWRlU2V0dGluZ3M7XG4gICAgICAgIGhhc0V4aXN0aW5nSG9va3MgPSAhIWV4aXN0aW5nU2V0dGluZ3MuaG9va3M7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRm91bmQgZXhpc3Rpbmcgc2V0dGluZ3MuanNvblwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBleGlzdGluZyBzZXR0aW5ncy5qc29uLCB3aWxsIGNyZWF0ZSBuZXcgb25lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBleGlzdGluZyBob29rc1xuICAgIGlmIChoYXNFeGlzdGluZ0hvb2tzICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkV4aXN0aW5nIGhvb2tzIGNvbmZpZ3VyYXRpb24gZm91bmQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBVc2UgLS1mb3JjZSB0byBvdmVyd3JpdGUsIG9yIG1hbnVhbGx5IG1lcmdlIHRoZSBob29rcy5cXG5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlRvIG1hbnVhbGx5IGFkZCwgaW5jbHVkZSB0aGVzZSBob29rcyBpbiB5b3VyIHNldHRpbmdzLmpzb246XCIpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoQ0xBVURFX0hPT0tTX0NPTkZJRywgbnVsbCwgMikpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlIHNldHRpbmdzXG4gICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7XG4gICAgICAuLi5leGlzdGluZ1NldHRpbmdzLFxuICAgICAgLi4uQ0xBVURFX0hPT0tTX0NPTkZJRyxcbiAgICB9O1xuXG4gICAgLy8gV3JpdGUgc2V0dGluZ3NcbiAgICB0cnkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5nc1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld1NldHRpbmdzLCBudWxsLCAyKSk7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNsYXVkZSBDb2RlIGhvb2tzIGNvbmZpZ3VyZWQhXCIpO1xuICAgICAgY29uc29sZS5sb2coYCAgIFNldHRpbmdzIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCJcXG5TZXR1cCBjb21wbGV0ZS4gU2Vzc2lvbnMgd2lsbCBzeW5jIGF1dG9tYXRpY2FsbHkuXFxuXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd3JpdGluZyBzZXR0aW5nczpcIiwgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJ2ZXJpZnlcIilcbiAgLmRlc2NyaXB0aW9uKFwiVmVyaWZ5IGNyZWRlbnRpYWxzIGFuZCBDbGF1ZGUgQ29kZSBjb25maWd1cmF0aW9uXCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiXFxuICBPcGVuU3luYyBTZXR1cCBWZXJpZmljYXRpb25cXG5cIik7XG5cbiAgICAvLyBDaGVjayBjcmVkZW50aWFsc1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBPS1wiKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQVBJIEtleTogJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBOT1QgQ09ORklHVVJFRFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgQ2xhdWRlIENvZGUgY29uZmlnXG4gICAgY29uc3Qgc2V0dGluZ3NQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiLCBcInNldHRpbmdzLmpzb25cIik7XG4gICAgbGV0IGhvb2tzQ29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc2V0dGluZ3NQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhzZXR0aW5nc1BhdGgsIFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDbGF1ZGVTZXR0aW5ncztcbiAgICAgICAgaG9va3NDb25maWd1cmVkID0gISFzZXR0aW5ncy5ob29rcz8uU2Vzc2lvblN0YXJ0O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBwYXJzZSBlcnJvcnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICBpZiAoaG9va3NDb25maWd1cmVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogT0tcIik7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQ29uZmlnIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCIgICBIb29rcyByZWdpc3RlcmVkOiBjbGF1ZGUtY29kZS1zeW5jXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogTk9UIENPTkZJR1VSRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBzZXR1cCcgdG8gY29uZmlndXJlIGhvb2tzXCIpO1xuICAgIH1cblxuICAgIC8vIFRlc3QgY29ubmVjdGlvbiBpZiBjcmVkZW50aWFscyBleGlzdFxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuVGVzdGluZyBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuICAgICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IE9LXFxuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlnICYmIGhvb2tzQ29uZmlndXJlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJSZWFkeSEgU3RhcnQgQ2xhdWRlIENvZGUgYW5kIHNlc3Npb25zIHdpbGwgc3luYyBhdXRvbWF0aWNhbGx5LlxcblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3luYyBUZXN0IENvbW1hbmQgKHRlc3QgY29ubmVjdGl2aXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3luY3Rlc3RcIilcbiAgLmRlc2NyaXB0aW9uKFwiVGVzdCBjb25uZWN0aXZpdHkgYW5kIGNyZWF0ZSBhIHRlc3Qgc2Vzc2lvblwiKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIENvbm5lY3Rpb24gVGVzdFxcblwiKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFxcblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIkNvbmZpZ3VyYXRpb246XCIpO1xuICAgIGNvbnNvbGUubG9nKGAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBBUEkgS2V5OiAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBPS1wiKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgdGVzdCBzZXNzaW9uIHRvIHZlcmlmeSBmdWxsIHN5bmMgd29ya3NcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuQ3JlYXRpbmcgdGVzdCBzZXNzaW9uLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFNlc3Npb24gPSB7XG4gICAgICAgICAgc2Vzc2lvbklkOiBgdGVzdC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIiBhcyBjb25zdCxcbiAgICAgICAgICB0aXRsZTogXCJDb25uZWN0aW9uIFRlc3RcIixcbiAgICAgICAgICBwcm9qZWN0TmFtZTogXCJzeW5jdGVzdFwiLFxuICAgICAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGVuZGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHRlc3RTZXNzaW9uKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJUZXN0IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiXFxuU3luYyB0ZXN0IHBhc3NlZC4gUmVhZHkgdG8gc3luYyBDbGF1ZGUgQ29kZSBzZXNzaW9ucy5cXG5cIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCBzZXNzaW9uIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJcXG5Db25uZWN0aW9uIHdvcmtzIGJ1dCBzeW5jIG1heSBoYXZlIGlzc3Vlcy5cXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNoZWNrIHlvdXIgQ29udmV4IFVSTCBhbmQgQVBJIGtleS5cXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSG9vayBDb21tYW5kIChmb3IgQ2xhdWRlIENvZGUgaW50ZWdyYXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFRyYWNrIHNlc3Npb24gc3RhdGUgZm9yIHRpdGxlIGdlbmVyYXRpb24gKGZpcnN0IHVzZXIgcHJvbXB0KVxuY29uc3QgU0VTU0lPTl9TVEFURV9GSUxFID0gcGF0aC5qb2luKFxuICBwcm9jZXNzLmVudi5IT01FIHx8IFwiflwiLFxuICBcIi5jb25maWdcIixcbiAgXCJjbGF1ZGUtY29kZS1zeW5jXCIsXG4gIFwic2Vzc2lvbi1zdGF0ZS5qc29uXCJcbik7XG5cbmludGVyZmFjZSBTZXNzaW9uU3RhdGUge1xuICBbc2Vzc2lvbklkOiBzdHJpbmddOiB7XG4gICAgbW9kZWw/OiBzdHJpbmc7XG4gICAgZmlyc3RQcm9tcHQ/OiBzdHJpbmc7XG4gICAgdG9rZW5Vc2FnZT86IHsgaW5wdXQ6IG51bWJlcjsgb3V0cHV0OiBudW1iZXIgfTtcbiAgICBtZXNzYWdlQ291bnQ/OiBudW1iZXI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvYWRTZXNzaW9uU3RhdGUoKTogU2Vzc2lvblN0YXRlIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhTRVNTSU9OX1NUQVRFX0ZJTEUpKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoU0VTU0lPTl9TVEFURV9GSUxFLCBcInV0Zi04XCIpKSBhcyBTZXNzaW9uU3RhdGU7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBzYXZlU2Vzc2lvblN0YXRlKHN0YXRlOiBTZXNzaW9uU3RhdGUpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoU0VTU0lPTl9TVEFURV9GSUxFKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkge1xuICAgICAgZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMoU0VTU0lPTl9TVEFURV9GSUxFLCBKU09OLnN0cmluZ2lmeShzdGF0ZSwgbnVsbCwgMikpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVUaXRsZShwcm9tcHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFVzZSBmaXJzdCA4MCBjaGFycyBvZiBmaXJzdCBwcm9tcHQgYXMgdGl0bGUsIHRyaW0gYXQgd29yZCBib3VuZGFyeVxuICBjb25zdCB0cmltbWVkID0gcHJvbXB0LnNsaWNlKDAsIDgwKS50cmltKCk7XG4gIGlmIChwcm9tcHQubGVuZ3RoID4gODApIHtcbiAgICBjb25zdCBsYXN0U3BhY2UgPSB0cmltbWVkLmxhc3RJbmRleE9mKFwiIFwiKTtcbiAgICBpZiAobGFzdFNwYWNlID4gNDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkLnNsaWNlKDAsIGxhc3RTcGFjZSkgKyBcIi4uLlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJpbW1lZCArIFwiLi4uXCI7XG4gIH1cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJob29rIDxldmVudD5cIilcbiAgLmRlc2NyaXB0aW9uKFwiSGFuZGxlIENsYXVkZSBDb2RlIGhvb2sgZXZlbnRzIChyZWFkcyBzdGRpbilcIilcbiAgLmFjdGlvbihhc3luYyAoZXZlbnQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICAvLyBFeGl0IHNpbGVudGx5IGlmIG5vdCBjb25maWd1cmVkIChkb24ndCBibG9jayBDbGF1ZGUgQ29kZSlcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmF1dG9TeW5jID09PSBmYWxzZSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIC8vIFJlYWQgSlNPTiBpbnB1dCBmcm9tIHN0ZGluXG4gICAgbGV0IGlucHV0ID0gXCJcIjtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHByb2Nlc3Muc3RkaW4pIHtcbiAgICAgIGlucHV0ICs9IGNodW5rO1xuICAgIH1cblxuICAgIGlmICghaW5wdXQudHJpbSgpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTeW5jQ2xpZW50KGNvbmZpZyk7XG4gICAgICBjb25zdCBzZXNzaW9uU3RhdGUgPSBsb2FkU2Vzc2lvblN0YXRlKCk7XG5cbiAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgY2FzZSBcIlNlc3Npb25TdGFydFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tTZXNzaW9uU3RhcnREYXRhO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEluaXRpYWxpemUgc2Vzc2lvbiBzdGF0ZVxuICAgICAgICAgIHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdID0ge1xuICAgICAgICAgICAgbW9kZWw6IGRhdGEubW9kZWwsXG4gICAgICAgICAgICB0b2tlblVzYWdlOiB7IGlucHV0OiAwLCBvdXRwdXQ6IDAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2VDb3VudDogMCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNhdmVTZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlKTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICBjd2Q6IGRhdGEuY3dkLFxuICAgICAgICAgICAgbW9kZWw6IGRhdGEubW9kZWwsXG4gICAgICAgICAgICBwZXJtaXNzaW9uTW9kZTogZGF0YS5wZXJtaXNzaW9uX21vZGUsXG4gICAgICAgICAgICB0aGlua2luZ0VuYWJsZWQ6IGRhdGEudGhpbmtpbmdfZW5hYmxlZCxcbiAgICAgICAgICAgIG1jcFNlcnZlcnM6IGRhdGEubWNwX3NlcnZlcnMsXG4gICAgICAgICAgICBzdGFydFR5cGU6IGRhdGEuc291cmNlID09PSBcInN0YXJ0dXBcIiA/IFwibmV3XCIgOiAoZGF0YS5zb3VyY2UgYXMgU2Vzc2lvbkRhdGFbXCJzdGFydFR5cGVcIl0pLFxuICAgICAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0UGF0aDogZGF0YS5jd2QsXG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogZGF0YS5jd2QgPyBkYXRhLmN3ZC5zcGxpdChcIi9cIikucG9wKCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiU2Vzc2lvbkVuZFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tTZXNzaW9uRW5kRGF0YTtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdIHx8IHt9O1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBmaW5hbCB0b2tlbiB1c2FnZVxuICAgICAgICAgIGNvbnN0IGZpbmFsVG9rZW5Vc2FnZSA9IGRhdGEudG90YWxfdG9rZW5fdXNhZ2UgfHwgc3RhdGUudG9rZW5Vc2FnZTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICB0aXRsZTogc3RhdGUuZmlyc3RQcm9tcHQgPyBnZW5lcmF0ZVRpdGxlKHN0YXRlLmZpcnN0UHJvbXB0KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVuZFJlYXNvbjogZGF0YS5yZWFzb24sXG4gICAgICAgICAgICBtZXNzYWdlQ291bnQ6IGRhdGEubWVzc2FnZV9jb3VudCB8fCBzdGF0ZS5tZXNzYWdlQ291bnQsXG4gICAgICAgICAgICB0b29sQ2FsbENvdW50OiBkYXRhLnRvb2xfY2FsbF9jb3VudCxcbiAgICAgICAgICAgIHRva2VuVXNhZ2U6IGZpbmFsVG9rZW5Vc2FnZSxcbiAgICAgICAgICAgIGNvc3RFc3RpbWF0ZTogZGF0YS5jb3N0X2VzdGltYXRlLFxuICAgICAgICAgICAgZW5kZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENsZWFuIHVwIHNlc3Npb24gc3RhdGVcbiAgICAgICAgICBkZWxldGUgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF07XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlVzZXJQcm9tcHRTdWJtaXRcIjoge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGlucHV0KSBhcyBIb29rVXNlclByb21wdERhdGE7XG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSB8fCB7fTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBUcmFjayBmaXJzdCBwcm9tcHQgZm9yIHRpdGxlIGdlbmVyYXRpb25cbiAgICAgICAgICBpZiAoIXN0YXRlLmZpcnN0UHJvbXB0KSB7XG4gICAgICAgICAgICBzdGF0ZS5maXJzdFByb21wdCA9IGRhdGEucHJvbXB0O1xuICAgICAgICAgICAgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gPSBzdGF0ZTtcbiAgICAgICAgICAgIHNhdmVTZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVXBkYXRlIHNlc3Npb24gd2l0aCB0aXRsZVxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbjogU2Vzc2lvbkRhdGEgPSB7XG4gICAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgICAgdGl0bGU6IGdlbmVyYXRlVGl0bGUoZGF0YS5wcm9tcHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSW5jcmVtZW50IG1lc3NhZ2UgY291bnRcbiAgICAgICAgICBzdGF0ZS5tZXNzYWdlQ291bnQgPSAoc3RhdGUubWVzc2FnZUNvdW50IHx8IDApICsgMTtcbiAgICAgICAgICBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSA9IHN0YXRlO1xuICAgICAgICAgIHNhdmVTZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlKTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBgJHtkYXRhLnNlc3Npb25faWR9LXVzZXItJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgICAgICAgY29udGVudDogZGF0YS5wcm9tcHQsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGRhdGEudGltZXN0YW1wIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJQb3N0VG9vbFVzZVwiOiB7XG4gICAgICAgICAgaWYgKCFjb25maWcuc3luY1Rvb2xDYWxscykgYnJlYWs7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tUb29sVXNlRGF0YTtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdIHx8IHt9O1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGRhdGEudG9vbF91c2VfaWQgfHwgYCR7ZGF0YS5zZXNzaW9uX2lkfS10b29sLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgICAgdG9vbE5hbWU6IGRhdGEudG9vbF9uYW1lLFxuICAgICAgICAgICAgdG9vbEFyZ3M6IGRhdGEudG9vbF9pbnB1dCxcbiAgICAgICAgICAgIHRvb2xSZXN1bHQ6IGRhdGEudG9vbF9yZXN1bHQ/Lm91dHB1dCB8fCBkYXRhLnRvb2xfcmVzdWx0Py5lcnJvcixcbiAgICAgICAgICAgIGR1cmF0aW9uTXM6IGRhdGEuZHVyYXRpb25fbXMsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJTdG9wXCI6IHtcbiAgICAgICAgICAvLyBTdG9wIGV2ZW50IGNvbnRhaW5zIHRoZSBhc3Npc3RhbnQncyByZXNwb25zZSBhbmQgdG9rZW4gdXNhZ2VcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1N0b3BEYXRhO1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVXBkYXRlIGFjY3VtdWxhdGVkIHRva2VuIHVzYWdlXG4gICAgICAgICAgaWYgKGRhdGEudG9rZW5fdXNhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS50b2tlblVzYWdlIHx8IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9O1xuICAgICAgICAgICAgc3RhdGUudG9rZW5Vc2FnZSA9IHtcbiAgICAgICAgICAgICAgaW5wdXQ6IGN1cnJlbnQuaW5wdXQgKyBkYXRhLnRva2VuX3VzYWdlLmlucHV0LFxuICAgICAgICAgICAgICBvdXRwdXQ6IGN1cnJlbnQub3V0cHV0ICsgZGF0YS50b2tlbl91c2FnZS5vdXRwdXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgbWVzc2FnZSBjb3VudCBmb3IgYXNzaXN0YW50IHJlc3BvbnNlXG4gICAgICAgICAgc3RhdGUubWVzc2FnZUNvdW50ID0gKHN0YXRlLm1lc3NhZ2VDb3VudCB8fCAwKSArIDE7XG4gICAgICAgICAgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gPSBzdGF0ZTtcbiAgICAgICAgICBzYXZlU2Vzc2lvblN0YXRlKHNlc3Npb25TdGF0ZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU3luYyB0aGUgYXNzaXN0YW50J3MgcmVzcG9uc2UgYXMgYSBtZXNzYWdlXG4gICAgICAgICAgaWYgKGRhdGEucmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgICAgbWVzc2FnZUlkOiBgJHtkYXRhLnNlc3Npb25faWR9LWFzc2lzdGFudC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGEucmVzcG9uc2UsXG4gICAgICAgICAgICAgIHRva2VuQ291bnQ6IGRhdGEudG9rZW5fdXNhZ2VcbiAgICAgICAgICAgICAgICA/IGRhdGEudG9rZW5fdXNhZ2UuaW5wdXQgKyBkYXRhLnRva2VuX3VzYWdlLm91dHB1dFxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBkYXRhLmR1cmF0aW9uX21zLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVwZGF0ZSBzZXNzaW9uIHdpdGggYWNjdW11bGF0ZWQgdG9rZW4gdXNhZ2VcbiAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICB0b2tlblVzYWdlOiBzdGF0ZS50b2tlblVzYWdlLFxuICAgICAgICAgICAgbWVzc2FnZUNvdW50OiBzdGF0ZS5tZXNzYWdlQ291bnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIFVua25vd24gZXZlbnQsIGlnbm9yZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIExvZyB0byBzdGRlcnIgYnV0IGRvbid0IGJsb2NrIENsYXVkZSBDb2RlXG4gICAgICBjb25zb2xlLmVycm9yKGBbY2xhdWRlLWNvZGUtc3luY10gRXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICB9KTtcblxuLy8gUGFyc2UgYW5kIHJ1blxucHJvZ3JhbS5wYXJzZSgpO1xuIl19
|
package/dist/index.js
CHANGED
|
@@ -139,45 +139,81 @@ class SyncClient {
|
|
|
139
139
|
}
|
|
140
140
|
// Transform session data to backend format
|
|
141
141
|
transformSession(session) {
|
|
142
|
-
|
|
142
|
+
const payload = {
|
|
143
143
|
externalId: session.sessionId,
|
|
144
|
-
title: session.title,
|
|
145
|
-
projectPath: session.projectPath || session.cwd,
|
|
146
|
-
projectName: session.projectName,
|
|
147
|
-
model: session.model,
|
|
148
144
|
source: session.source,
|
|
149
|
-
promptTokens: session.tokenUsage?.input,
|
|
150
|
-
completionTokens: session.tokenUsage?.output,
|
|
151
|
-
cost: session.costEstimate,
|
|
152
|
-
durationMs: session.endedAt && session.startedAt
|
|
153
|
-
? new Date(session.endedAt).getTime() - new Date(session.startedAt).getTime()
|
|
154
|
-
: undefined,
|
|
155
145
|
};
|
|
146
|
+
// Only include fields that are defined
|
|
147
|
+
if (session.title !== undefined)
|
|
148
|
+
payload.title = session.title;
|
|
149
|
+
if (session.projectPath || session.cwd)
|
|
150
|
+
payload.projectPath = session.projectPath || session.cwd;
|
|
151
|
+
if (session.projectName)
|
|
152
|
+
payload.projectName = session.projectName;
|
|
153
|
+
if (session.model)
|
|
154
|
+
payload.model = session.model;
|
|
155
|
+
if (session.tokenUsage?.input !== undefined)
|
|
156
|
+
payload.promptTokens = session.tokenUsage.input;
|
|
157
|
+
if (session.tokenUsage?.output !== undefined)
|
|
158
|
+
payload.completionTokens = session.tokenUsage.output;
|
|
159
|
+
if (session.costEstimate !== undefined)
|
|
160
|
+
payload.cost = session.costEstimate;
|
|
161
|
+
if (session.messageCount !== undefined)
|
|
162
|
+
payload.messageCount = session.messageCount;
|
|
163
|
+
if (session.toolCallCount !== undefined)
|
|
164
|
+
payload.toolCallCount = session.toolCallCount;
|
|
165
|
+
if (session.endReason)
|
|
166
|
+
payload.endReason = session.endReason;
|
|
167
|
+
// Calculate duration if both timestamps exist
|
|
168
|
+
if (session.endedAt && session.startedAt) {
|
|
169
|
+
payload.durationMs = new Date(session.endedAt).getTime() - new Date(session.startedAt).getTime();
|
|
170
|
+
}
|
|
171
|
+
return payload;
|
|
156
172
|
}
|
|
157
173
|
// Transform message data to backend format
|
|
158
174
|
transformMessage(message) {
|
|
159
|
-
|
|
175
|
+
const payload = {
|
|
160
176
|
sessionExternalId: message.sessionId,
|
|
161
177
|
externalId: message.messageId,
|
|
162
178
|
role: message.role,
|
|
163
|
-
textContent: message.content || message.toolResult,
|
|
164
|
-
model: undefined,
|
|
165
|
-
durationMs: message.durationMs,
|
|
166
179
|
source: message.source,
|
|
167
|
-
// Tool use info stored in parts
|
|
168
|
-
parts: message.toolName
|
|
169
|
-
? [
|
|
170
|
-
{
|
|
171
|
-
type: "tool_use",
|
|
172
|
-
content: {
|
|
173
|
-
toolName: message.toolName,
|
|
174
|
-
args: message.toolArgs,
|
|
175
|
-
result: message.toolResult,
|
|
176
|
-
},
|
|
177
|
-
},
|
|
178
|
-
]
|
|
179
|
-
: undefined,
|
|
180
180
|
};
|
|
181
|
+
// Set textContent for user prompts and assistant responses
|
|
182
|
+
if (message.content) {
|
|
183
|
+
payload.textContent = message.content;
|
|
184
|
+
}
|
|
185
|
+
else if (message.toolResult && !message.toolName) {
|
|
186
|
+
// Only use toolResult as textContent if no toolName (fallback)
|
|
187
|
+
payload.textContent = message.toolResult;
|
|
188
|
+
}
|
|
189
|
+
// Include duration if available
|
|
190
|
+
if (message.durationMs !== undefined) {
|
|
191
|
+
payload.durationMs = message.durationMs;
|
|
192
|
+
}
|
|
193
|
+
// Include token count if available
|
|
194
|
+
if (message.tokenCount !== undefined) {
|
|
195
|
+
payload.promptTokens = message.tokenCount;
|
|
196
|
+
}
|
|
197
|
+
// Tool use info stored in parts
|
|
198
|
+
if (message.toolName) {
|
|
199
|
+
payload.parts = [
|
|
200
|
+
{
|
|
201
|
+
type: "tool-call",
|
|
202
|
+
content: {
|
|
203
|
+
toolName: message.toolName,
|
|
204
|
+
args: message.toolArgs,
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
];
|
|
208
|
+
// Add tool result as separate part
|
|
209
|
+
if (message.toolResult) {
|
|
210
|
+
payload.parts.push({
|
|
211
|
+
type: "tool-result",
|
|
212
|
+
content: message.toolResult,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return payload;
|
|
181
217
|
}
|
|
182
218
|
async syncSession(session) {
|
|
183
219
|
try {
|
|
@@ -387,4 +423,4 @@ function createPlugin() {
|
|
|
387
423
|
}
|
|
388
424
|
// Default export for Claude Code plugin system
|
|
389
425
|
exports.default = createPlugin;
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvSUgsZ0NBNEJDO0FBRUQsZ0NBVUM7QUFFRCxrQ0FRQztBQWtLRCxvQ0FxS0M7QUEzZkQsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qix1Q0FBeUI7QUF5SHpCLCtFQUErRTtBQUMvRSxnQkFBZ0I7QUFDaEIsK0VBQStFO0FBRS9FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzFFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXpELFNBQWdCLFVBQVU7SUFDeEIsb0NBQW9DO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7SUFDbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztJQUUvQyxJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNyQixPQUFPO1lBQ0wsU0FBUyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUNyQyxNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixLQUFLLE9BQU87WUFDdkQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEtBQUssT0FBTztZQUM3RCxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsS0FBSyxNQUFNO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLElBQUksQ0FBQztRQUNILElBQUksRUFB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Q3ZHLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0Msa0JBQWUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDbGF1ZGUgQ29kZSBTeW5jIFBsdWdpblxuICpcbiAqIFN5bmNzIENsYXVkZSBDb2RlIHNlc3Npb25zIHRvIE9wZW5TeW5jIGRhc2hib2FyZC5cbiAqIFVzZXMgQVBJIEtleSBhdXRoZW50aWNhdGlvbiAobm8gYnJvd3NlciBPQXV0aCByZXF1aXJlZCkuXG4gKlxuICogSW5zdGFsbDogbnBtIGluc3RhbGwgLWcgY2xhdWRlLWNvZGUtc3luY1xuICogQ29uZmlndXJlOiBjbGF1ZGUtY29kZS1zeW5jIGxvZ2luXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICBjb252ZXhVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIGF1dG9TeW5jPzogYm9vbGVhbjtcbiAgc3luY1Rvb2xDYWxscz86IGJvb2xlYW47XG4gIHN5bmNUaGlua2luZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkRhdGEge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc291cmNlOiBcImNsYXVkZS1jb2RlXCI7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBwcm9qZWN0UGF0aD86IHN0cmluZztcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG4gIGN3ZD86IHN0cmluZztcbiAgZ2l0QnJhbmNoPzogc3RyaW5nO1xuICBnaXRSZXBvPzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgc3RhcnRUeXBlPzogXCJuZXdcIiB8IFwicmVzdW1lXCIgfCBcImNvbnRpbnVlXCI7XG4gIGVuZFJlYXNvbj86IFwidXNlcl9zdG9wXCIgfCBcIm1heF90dXJuc1wiIHwgXCJlcnJvclwiIHwgXCJjb21wbGV0ZWRcIjtcbiAgdGhpbmtpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgcGVybWlzc2lvbk1vZGU/OiBzdHJpbmc7XG4gIG1jcFNlcnZlcnM/OiBzdHJpbmdbXTtcbiAgbWVzc2FnZUNvdW50PzogbnVtYmVyO1xuICB0b29sQ2FsbENvdW50PzogbnVtYmVyO1xuICB0b2tlblVzYWdlPzoge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGNvc3RFc3RpbWF0ZT86IG51bWJlcjtcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBlbmRlZEF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VEYXRhIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIG1lc3NhZ2VJZDogc3RyaW5nO1xuICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIjtcbiAgcm9sZTogXCJ1c2VyXCIgfCBcImFzc2lzdGFudFwiIHwgXCJzeXN0ZW1cIjtcbiAgY29udGVudD86IHN0cmluZztcbiAgdGhpbmtpbmdDb250ZW50Pzogc3RyaW5nO1xuICB0b29sTmFtZT86IHN0cmluZztcbiAgdG9vbEFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdG9vbFJlc3VsdD86IHN0cmluZztcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgdG9rZW5Db3VudD86IG51bWJlcjtcbiAgdGltZXN0YW1wPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xVc2VEYXRhIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHRvb2xOYW1lOiBzdHJpbmc7XG4gIHRvb2xBcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlc3VsdD86IHN0cmluZztcbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIGR1cmF0aW9uTXM/OiBudW1iZXI7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbn1cblxuLy8gQ2xhdWRlIENvZGUgSG9vayBUeXBlc1xuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVDb2RlSG9va3Mge1xuICBTZXNzaW9uU3RhcnQ/OiAoZGF0YTogU2Vzc2lvblN0YXJ0RXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBVc2VyUHJvbXB0U3VibWl0PzogKGRhdGE6IFVzZXJQcm9tcHRFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIFBvc3RUb29sVXNlPzogKGRhdGE6IFRvb2xVc2VFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIFN0b3A/OiAoZGF0YTogU3RvcEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgU2Vzc2lvbkVuZD86IChkYXRhOiBTZXNzaW9uRW5kRXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25TdGFydEV2ZW50IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGN3ZDogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nO1xuICBzdGFydFR5cGU6IFwibmV3XCIgfCBcInJlc3VtZVwiIHwgXCJjb250aW51ZVwiO1xuICB0aGlua2luZ0VuYWJsZWQ/OiBib29sZWFuO1xuICBwZXJtaXNzaW9uTW9kZT86IHN0cmluZztcbiAgbWNwU2VydmVycz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcm9tcHRFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBwcm9tcHQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbFVzZUV2ZW50IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHRvb2xOYW1lOiBzdHJpbmc7XG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXN1bHQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZHVyYXRpb25NczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3BFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICByZXNwb25zZTogc3RyaW5nO1xuICB0b2tlblVzYWdlOiB7XG4gICAgaW5wdXQ6IG51bWJlcjtcbiAgICBvdXRwdXQ6IG51bWJlcjtcbiAgfTtcbiAgZHVyYXRpb25NczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25FbmRFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBlbmRSZWFzb246IFwidXNlcl9zdG9wXCIgfCBcIm1heF90dXJuc1wiIHwgXCJlcnJvclwiIHwgXCJjb21wbGV0ZWRcIjtcbiAgbWVzc2FnZUNvdW50OiBudW1iZXI7XG4gIHRvb2xDYWxsQ291bnQ6IG51bWJlcjtcbiAgdG90YWxUb2tlblVzYWdlOiB7XG4gICAgaW5wdXQ6IG51bWJlcjtcbiAgICBvdXRwdXQ6IG51bWJlcjtcbiAgfTtcbiAgY29zdEVzdGltYXRlOiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgQ09ORklHX0RJUiA9IHBhdGguam9pbihvcy5ob21lZGlyKCksIFwiLmNvbmZpZ1wiLCBcImNsYXVkZS1jb2RlLXN5bmNcIik7XG5jb25zdCBDT05GSUdfRklMRSA9IHBhdGguam9pbihDT05GSUdfRElSLCBcImNvbmZpZy5qc29uXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbmZpZygpOiBDb25maWcgfCBudWxsIHtcbiAgLy8gQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZpcnN0XG4gIGNvbnN0IGVudlVybCA9IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX0NPTlZFWF9VUkw7XG4gIGNvbnN0IGVudktleSA9IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX0FQSV9LRVk7XG5cbiAgaWYgKGVudlVybCAmJiBlbnZLZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udmV4VXJsOiBub3JtYWxpemVDb252ZXhVcmwoZW52VXJsKSxcbiAgICAgIGFwaUtleTogZW52S2V5LFxuICAgICAgYXV0b1N5bmM6IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX0FVVE9fU1lOQyAhPT0gXCJmYWxzZVwiLFxuICAgICAgc3luY1Rvb2xDYWxsczogcHJvY2Vzcy5lbnYuQ0xBVURFX1NZTkNfVE9PTF9DQUxMUyAhPT0gXCJmYWxzZVwiLFxuICAgICAgc3luY1RoaW5raW5nOiBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19USElOS0lORyA9PT0gXCJ0cnVlXCIsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byBjb25maWcgZmlsZVxuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKENPTkZJR19GSUxFKSkge1xuICAgICAgY29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhDT05GSUdfRklMRSwgXCJ1dGYtOFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UoZGF0YSkgYXMgQ29uZmlnO1xuICAgICAgY29uZmlnLmNvbnZleFVybCA9IG5vcm1hbGl6ZUNvbnZleFVybChjb25maWcuY29udmV4VXJsKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBsb2FkaW5nIGNvbmZpZzpcIiwgZXJyb3IpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlQ29uZmlnKGNvbmZpZzogQ29uZmlnKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKENPTkZJR19ESVIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoQ09ORklHX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMoQ09ORklHX0ZJTEUsIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMikpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzYXZpbmcgY29uZmlnOlwiLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQ29uZmlnKCk6IHZvaWQge1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKENPTkZJR19GSUxFKSkge1xuICAgICAgZnMudW5saW5rU3luYyhDT05GSUdfRklMRSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBjbGVhcmluZyBjb25maWc6XCIsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb252ZXhVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBDb252ZXJ0IC5jb252ZXguY2xvdWQgdG8gLmNvbnZleC5zaXRlIGZvciBBUEkgY2FsbHNcbiAgcmV0dXJuIHVybC5yZXBsYWNlKFwiLmNvbnZleC5jbG91ZFwiLCBcIi5jb252ZXguc2l0ZVwiKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3luYyBDbGllbnRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNsYXNzIFN5bmNDbGllbnQge1xuICBwcml2YXRlIGNvbmZpZzogQ29uZmlnO1xuICBwcml2YXRlIHNpdGVVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBzZXNzaW9uQ2FjaGU6IE1hcDxzdHJpbmcsIFBhcnRpYWw8U2Vzc2lvbkRhdGE+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIC8vIE5vcm1hbGl6ZSBVUkwgdG8gLmNvbnZleC5zaXRlIGZvciBIVFRQIGVuZHBvaW50c1xuICAgIC8vIFN1cHBvcnRzIGJvdGggLmNvbnZleC5jbG91ZCBhbmQgLmNvbnZleC5zaXRlIGlucHV0IFVSTHNcbiAgICB0aGlzLnNpdGVVcmwgPSBjb25maWcuY29udmV4VXJsLnJlcGxhY2UoXCIuY29udmV4LmNsb3VkXCIsIFwiLmNvbnZleC5zaXRlXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0KGVuZHBvaW50OiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNpdGVVcmx9JHtlbmRwb2ludH1gO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5jb25maWcuYXBpS2V5fWAsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTeW5jIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9IC0gJHt0ZXh0fWApO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gc2Vzc2lvbiBkYXRhIHRvIGJhY2tlbmQgZm9ybWF0XG4gIHByaXZhdGUgdHJhbnNmb3JtU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uRGF0YSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZXh0ZXJuYWxJZDogc2Vzc2lvbi5zZXNzaW9uSWQsXG4gICAgICB0aXRsZTogc2Vzc2lvbi50aXRsZSxcbiAgICAgIHByb2plY3RQYXRoOiBzZXNzaW9uLnByb2plY3RQYXRoIHx8IHNlc3Npb24uY3dkLFxuICAgICAgcHJvamVjdE5hbWU6IHNlc3Npb24ucHJvamVjdE5hbWUsXG4gICAgICBtb2RlbDogc2Vzc2lvbi5tb2RlbCxcbiAgICAgIHNvdXJjZTogc2Vzc2lvbi5zb3VyY2UsXG4gICAgICBwcm9tcHRUb2tlbnM6IHNlc3Npb24udG9rZW5Vc2FnZT8uaW5wdXQsXG4gICAgICBjb21wbGV0aW9uVG9rZW5zOiBzZXNzaW9uLnRva2VuVXNhZ2U/Lm91dHB1dCxcbiAgICAgIGNvc3Q6IHNlc3Npb24uY29zdEVzdGltYXRlLFxuICAgICAgZHVyYXRpb25Nczogc2Vzc2lvbi5lbmRlZEF0ICYmIHNlc3Npb24uc3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUoc2Vzc2lvbi5lbmRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShzZXNzaW9uLnN0YXJ0ZWRBdCkuZ2V0VGltZSgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gbWVzc2FnZSBkYXRhIHRvIGJhY2tlbmQgZm9ybWF0XG4gIHByaXZhdGUgdHJhbnNmb3JtTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlRGF0YSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Vzc2lvbkV4dGVybmFsSWQ6IG1lc3NhZ2Uuc2Vzc2lvbklkLFxuICAgICAgZXh0ZXJuYWxJZDogbWVzc2FnZS5tZXNzYWdlSWQsXG4gICAgICByb2xlOiBtZXNzYWdlLnJvbGUsXG4gICAgICB0ZXh0Q29udGVudDogbWVzc2FnZS5jb250ZW50IHx8IG1lc3NhZ2UudG9vbFJlc3VsdCxcbiAgICAgIG1vZGVsOiB1bmRlZmluZWQsXG4gICAgICBkdXJhdGlvbk1zOiBtZXNzYWdlLmR1cmF0aW9uTXMsXG4gICAgICBzb3VyY2U6IG1lc3NhZ2Uuc291cmNlLFxuICAgICAgLy8gVG9vbCB1c2UgaW5mbyBzdG9yZWQgaW4gcGFydHNcbiAgICAgIHBhcnRzOiBtZXNzYWdlLnRvb2xOYW1lXG4gICAgICAgID8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRvb2xfdXNlXCIsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICB0b29sTmFtZTogbWVzc2FnZS50b29sTmFtZSxcbiAgICAgICAgICAgICAgICBhcmdzOiBtZXNzYWdlLnRvb2xBcmdzLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogbWVzc2FnZS50b29sUmVzdWx0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzeW5jU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50cmFuc2Zvcm1TZXNzaW9uKHNlc3Npb24pO1xuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiL3N5bmMvc2Vzc2lvblwiLCBwYXlsb2FkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBzeW5jIHNlc3Npb246XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN5bmNNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VEYXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnRyYW5zZm9ybU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCIvc3luYy9tZXNzYWdlXCIsIHBheWxvYWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHN5bmMgbWVzc2FnZTpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3luY0JhdGNoKFxuICAgIHNlc3Npb25zOiBTZXNzaW9uRGF0YVtdLFxuICAgIG1lc3NhZ2VzOiBNZXNzYWdlRGF0YVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFNlc3Npb25zID0gc2Vzc2lvbnMubWFwKChzKSA9PiB0aGlzLnRyYW5zZm9ybVNlc3Npb24ocykpO1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRNZXNzYWdlcyA9IG1lc3NhZ2VzLm1hcCgobSkgPT4gdGhpcy50cmFuc2Zvcm1NZXNzYWdlKG0pKTtcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIi9zeW5jL2JhdGNoXCIsIHtcbiAgICAgICAgc2Vzc2lvbnM6IHRyYW5zZm9ybWVkU2Vzc2lvbnMsXG4gICAgICAgIG1lc3NhZ2VzOiB0cmFuc2Zvcm1lZE1lc3NhZ2VzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gc3luYyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2l0ZVVybH0vaGVhbHRoYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5vaztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXNzaW9uIHN0YXRlIG1hbmFnZW1lbnRcbiAgZ2V0U2Vzc2lvblN0YXRlKHNlc3Npb25JZDogc3RyaW5nKTogUGFydGlhbDxTZXNzaW9uRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbklkKSB8fCB7fTtcbiAgfVxuXG4gIHVwZGF0ZVNlc3Npb25TdGF0ZShcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb25EYXRhPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25JZCkgfHwge307XG4gICAgdGhpcy5zZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25JZCwgeyAuLi5jdXJyZW50LCAuLi51cGRhdGVzIH0pO1xuICB9XG5cbiAgY2xlYXJTZXNzaW9uU3RhdGUoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb25DYWNoZS5kZWxldGUoc2Vzc2lvbklkKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQbHVnaW4gRXhwb3J0XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2xhdWRlIENvZGUgUGx1Z2luIEVudHJ5IFBvaW50XG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgQ2xhdWRlIENvZGUgdG8gcmVnaXN0ZXIgdGhlIHBsdWdpbi5cbiAqIEl0IHJldHVybnMgaG9vayBoYW5kbGVycyB0aGF0IGZpcmUgYXQga2V5IHBvaW50cyBpbiB0aGUgc2Vzc2lvbiBsaWZlY3ljbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQbHVnaW4oKTogQ2xhdWRlQ29kZUhvb2tzIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICBpZiAoIWNvbmZpZykge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJbY2xhdWRlLWNvZGUtc3luY10gTm90IGNvbmZpZ3VyZWQuIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgdG8gc2V0IHVwLlwiXG4gICAgKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb25maWcuYXV0b1N5bmMgPT09IGZhbHNlKSB7XG4gICAgY29uc29sZS5sb2coXCJbY2xhdWRlLWNvZGUtc3luY10gQXV0by1zeW5jIGRpc2FibGVkIGluIGNvbmZpZy5cIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICBsZXQgbWVzc2FnZUNvdW50ZXIgPSAwO1xuICBsZXQgdG9vbENhbGxDb3VudGVyID0gMDtcblxuICBjb25zb2xlLmxvZyhcIltjbGF1ZGUtY29kZS1zeW5jXSBQbHVnaW4gbG9hZGVkLiBTZXNzaW9ucyB3aWxsIHN5bmMgdG8gT3BlblN5bmMuXCIpO1xuXG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gYSBuZXcgc2Vzc2lvbiBzdGFydHNcbiAgICAgKi9cbiAgICBTZXNzaW9uU3RhcnQ6IGFzeW5jIChldmVudDogU2Vzc2lvblN0YXJ0RXZlbnQpID0+IHtcbiAgICAgIG1lc3NhZ2VDb3VudGVyID0gMDtcbiAgICAgIHRvb2xDYWxsQ291bnRlciA9IDA7XG5cbiAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIGN3ZDogZXZlbnQuY3dkLFxuICAgICAgICBtb2RlbDogZXZlbnQubW9kZWwsXG4gICAgICAgIHN0YXJ0VHlwZTogZXZlbnQuc3RhcnRUeXBlLFxuICAgICAgICB0aGlua2luZ0VuYWJsZWQ6IGV2ZW50LnRoaW5raW5nRW5hYmxlZCxcbiAgICAgICAgcGVybWlzc2lvbk1vZGU6IGV2ZW50LnBlcm1pc3Npb25Nb2RlLFxuICAgICAgICBtY3BTZXJ2ZXJzOiBldmVudC5tY3BTZXJ2ZXJzLFxuICAgICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEV4dHJhY3QgcHJvamVjdCBpbmZvIGZyb20gY3dkXG4gICAgICBpZiAoZXZlbnQuY3dkKSB7XG4gICAgICAgIHNlc3Npb24ucHJvamVjdFBhdGggPSBldmVudC5jd2Q7XG4gICAgICAgIHNlc3Npb24ucHJvamVjdE5hbWUgPSBwYXRoLmJhc2VuYW1lKGV2ZW50LmN3ZCk7XG5cbiAgICAgICAgLy8gVHJ5IHRvIGdldCBnaXQgaW5mb1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGdpdERpciA9IHBhdGguam9pbihldmVudC5jd2QsIFwiLmdpdFwiKTtcbiAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhnaXREaXIpKSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkRmlsZSA9IHBhdGguam9pbihnaXREaXIsIFwiSEVBRFwiKTtcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGhlYWRGaWxlKSkge1xuICAgICAgICAgICAgICBjb25zdCBoZWFkID0gZnMucmVhZEZpbGVTeW5jKGhlYWRGaWxlLCBcInV0Zi04XCIpLnRyaW0oKTtcbiAgICAgICAgICAgICAgaWYgKGhlYWQuc3RhcnRzV2l0aChcInJlZjogcmVmcy9oZWFkcy9cIikpIHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLmdpdEJyYW5jaCA9IGhlYWQucmVwbGFjZShcInJlZjogcmVmcy9oZWFkcy9cIiwgXCJcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIElnbm9yZSBnaXQgZXJyb3JzXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2xpZW50LnVwZGF0ZVNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQsIHNlc3Npb24pO1xuICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB1c2VyIHN1Ym1pdHMgYSBwcm9tcHRcbiAgICAgKi9cbiAgICBVc2VyUHJvbXB0U3VibWl0OiBhc3luYyAoZXZlbnQ6IFVzZXJQcm9tcHRFdmVudCkgPT4ge1xuICAgICAgbWVzc2FnZUNvdW50ZXIrKztcblxuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IGAke2V2ZW50LnNlc3Npb25JZH0tbXNnLSR7bWVzc2FnZUNvdW50ZXJ9YCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgICBjb250ZW50OiBldmVudC5wcm9tcHQsXG4gICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGFmdGVyIGVhY2ggdG9vbCB1c2VcbiAgICAgKi9cbiAgICBQb3N0VG9vbFVzZTogYXN5bmMgKGV2ZW50OiBUb29sVXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghY29uZmlnLnN5bmNUb29sQ2FsbHMpIHJldHVybjtcblxuICAgICAgdG9vbENhbGxDb3VudGVyKys7XG4gICAgICBtZXNzYWdlQ291bnRlcisrO1xuXG4gICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogYCR7ZXZlbnQuc2Vzc2lvbklkfS10b29sLSR7dG9vbENhbGxDb3VudGVyfWAsXG4gICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICB0b29sTmFtZTogZXZlbnQudG9vbE5hbWUsXG4gICAgICAgIHRvb2xBcmdzOiBldmVudC5hcmdzLFxuICAgICAgICB0b29sUmVzdWx0OiBldmVudC5yZXN1bHQsXG4gICAgICAgIGR1cmF0aW9uTXM6IGV2ZW50LmR1cmF0aW9uTXMsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBDbGF1ZGUgc3RvcHMgcmVzcG9uZGluZ1xuICAgICAqL1xuICAgIFN0b3A6IGFzeW5jIChldmVudDogU3RvcEV2ZW50KSA9PiB7XG4gICAgICBtZXNzYWdlQ291bnRlcisrO1xuXG4gICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogYCR7ZXZlbnQuc2Vzc2lvbklkfS1tc2ctJHttZXNzYWdlQ291bnRlcn1gLFxuICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgY29udGVudDogZXZlbnQucmVzcG9uc2UsXG4gICAgICAgIHRva2VuQ291bnQ6IGV2ZW50LnRva2VuVXNhZ2UuaW5wdXQgKyBldmVudC50b2tlblVzYWdlLm91dHB1dCxcbiAgICAgICAgZHVyYXRpb25NczogZXZlbnQuZHVyYXRpb25NcyxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICAvLyBVcGRhdGUgc2Vzc2lvbiBzdGF0ZSB3aXRoIHRva2VuIHVzYWdlXG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBjbGllbnQuZ2V0U2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCk7XG4gICAgICBjb25zdCBjdXJyZW50VG9rZW5zID0gY3VycmVudFN0YXRlLnRva2VuVXNhZ2UgfHwgeyBpbnB1dDogMCwgb3V0cHV0OiAwIH07XG4gICAgICBjbGllbnQudXBkYXRlU2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCwge1xuICAgICAgICB0b2tlblVzYWdlOiB7XG4gICAgICAgICAgaW5wdXQ6IGN1cnJlbnRUb2tlbnMuaW5wdXQgKyBldmVudC50b2tlblVzYWdlLmlucHV0LFxuICAgICAgICAgIG91dHB1dDogY3VycmVudFRva2Vucy5vdXRwdXQgKyBldmVudC50b2tlblVzYWdlLm91dHB1dCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHNlc3Npb24gZW5kc1xuICAgICAqL1xuICAgIFNlc3Npb25FbmQ6IGFzeW5jIChldmVudDogU2Vzc2lvbkVuZEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBjbGllbnQuZ2V0U2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCk7XG5cbiAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgZW5kUmVhc29uOiBldmVudC5lbmRSZWFzb24sXG4gICAgICAgIG1lc3NhZ2VDb3VudDogZXZlbnQubWVzc2FnZUNvdW50LFxuICAgICAgICB0b29sQ2FsbENvdW50OiBldmVudC50b29sQ2FsbENvdW50LFxuICAgICAgICB0b2tlblVzYWdlOiBldmVudC50b3RhbFRva2VuVXNhZ2UsXG4gICAgICAgIGNvc3RFc3RpbWF0ZTogZXZlbnQuY29zdEVzdGltYXRlLFxuICAgICAgICBlbmRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICBjbGllbnQuY2xlYXJTZXNzaW9uU3RhdGUoZXZlbnQuc2Vzc2lvbklkKTtcblxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbY2xhdWRlLWNvZGUtc3luY10gU2Vzc2lvbiBzeW5jZWQ6ICR7ZXZlbnQubWVzc2FnZUNvdW50fSBtZXNzYWdlcywgJHtldmVudC50b29sQ2FsbENvdW50fSB0b29sIGNhbGxzYFxuICAgICAgKTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyBEZWZhdWx0IGV4cG9ydCBmb3IgQ2xhdWRlIENvZGUgcGx1Z2luIHN5c3RlbVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUGx1Z2luO1xuIl19
|
|
426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvSUgsZ0NBNEJDO0FBRUQsZ0NBVUM7QUFFRCxrQ0FRQztBQW1NRCxvQ0FxS0M7QUE1aEJELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBeUh6QiwrRUFBK0U7QUFDL0UsZ0JBQWdCO0FBQ2hCLCtFQUErRTtBQUUvRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMxRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUV6RCxTQUFnQixVQUFVO0lBQ3hCLG9DQUFvQztJQUNwQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7SUFFL0MsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7UUFDckIsT0FBTztZQUNMLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDckMsTUFBTSxFQUFFLE1BQU07WUFDZCxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsS0FBSyxPQUFPO1lBQ3ZELGFBQWEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixLQUFLLE9BQU87WUFDN0QsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEtBQUssTUFBTTtTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFJLENBQUM7UUFDSCxJQUFJLEVB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QWE7Z0JBQ2xDLFVBQVUsRUFBRSxLQUFLLENBQUMsZUFBZTtnQkFDakMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUNoQyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDbEMsQ0FBQztZQUVGLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTFDLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsc0NBQXNDLEtBQUssQ0FBQyxZQUFZLGNBQWMsS0FBSyxDQUFDLGFBQWEsYUFBYSxDQUN2RyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLGtCQUFlLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhdWRlIENvZGUgU3luYyBQbHVnaW5cbiAqXG4gKiBTeW5jcyBDbGF1ZGUgQ29kZSBzZXNzaW9ucyB0byBPcGVuU3luYyBkYXNoYm9hcmQuXG4gKiBVc2VzIEFQSSBLZXkgYXV0aGVudGljYXRpb24gKG5vIGJyb3dzZXIgT0F1dGggcmVxdWlyZWQpLlxuICpcbiAqIEluc3RhbGw6IG5wbSBpbnN0YWxsIC1nIGNsYXVkZS1jb2RlLXN5bmNcbiAqIENvbmZpZ3VyZTogY2xhdWRlLWNvZGUtc3luYyBsb2dpblxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgY29udmV4VXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICBhdXRvU3luYz86IGJvb2xlYW47XG4gIHN5bmNUb29sQ2FsbHM/OiBib29sZWFuO1xuICBzeW5jVGhpbmtpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25EYXRhIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiO1xuICB0aXRsZT86IHN0cmluZztcbiAgcHJvamVjdFBhdGg/OiBzdHJpbmc7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuICBjd2Q/OiBzdHJpbmc7XG4gIGdpdEJyYW5jaD86IHN0cmluZztcbiAgZ2l0UmVwbz86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHN0YXJ0VHlwZT86IFwibmV3XCIgfCBcInJlc3VtZVwiIHwgXCJjb250aW51ZVwiO1xuICBlbmRSZWFzb24/OiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG4gIHRoaW5raW5nRW5hYmxlZD86IGJvb2xlYW47XG4gIHBlcm1pc3Npb25Nb2RlPzogc3RyaW5nO1xuICBtY3BTZXJ2ZXJzPzogc3RyaW5nW107XG4gIG1lc3NhZ2VDb3VudD86IG51bWJlcjtcbiAgdG9vbENhbGxDb3VudD86IG51bWJlcjtcbiAgdG9rZW5Vc2FnZT86IHtcbiAgICBpbnB1dDogbnVtYmVyO1xuICAgIG91dHB1dDogbnVtYmVyO1xuICB9O1xuICBjb3N0RXN0aW1hdGU/OiBudW1iZXI7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgZW5kZWRBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRGF0YSB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgc291cmNlOiBcImNsYXVkZS1jb2RlXCI7XG4gIHJvbGU6IFwidXNlclwiIHwgXCJhc3Npc3RhbnRcIiB8IFwic3lzdGVtXCI7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIHRoaW5raW5nQ29udGVudD86IHN0cmluZztcbiAgdG9vbE5hbWU/OiBzdHJpbmc7XG4gIHRvb2xBcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRvb2xSZXN1bHQ/OiBzdHJpbmc7XG4gIGR1cmF0aW9uTXM/OiBudW1iZXI7XG4gIHRva2VuQ291bnQ/OiBudW1iZXI7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sVXNlRGF0YSB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB0b29sTmFtZTogc3RyaW5nO1xuICB0b29sQXJncz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXN1bHQ/OiBzdHJpbmc7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICBkdXJhdGlvbk1zPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG59XG5cbi8vIENsYXVkZSBDb2RlIEhvb2sgVHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlQ29kZUhvb2tzIHtcbiAgU2Vzc2lvblN0YXJ0PzogKGRhdGE6IFNlc3Npb25TdGFydEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgVXNlclByb21wdFN1Ym1pdD86IChkYXRhOiBVc2VyUHJvbXB0RXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBQb3N0VG9vbFVzZT86IChkYXRhOiBUb29sVXNlRXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBTdG9wPzogKGRhdGE6IFN0b3BFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIFNlc3Npb25FbmQ/OiAoZGF0YTogU2Vzc2lvbkVuZEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uU3RhcnRFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBjd2Q6IHN0cmluZztcbiAgbW9kZWw6IHN0cmluZztcbiAgc3RhcnRUeXBlOiBcIm5ld1wiIHwgXCJyZXN1bWVcIiB8IFwiY29udGludWVcIjtcbiAgdGhpbmtpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgcGVybWlzc2lvbk1vZGU/OiBzdHJpbmc7XG4gIG1jcFNlcnZlcnM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyUHJvbXB0RXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJvbXB0OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xVc2VFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB0b29sTmFtZTogc3RyaW5nO1xuICBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVzdWx0OiBzdHJpbmc7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9wRXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcmVzcG9uc2U6IHN0cmluZztcbiAgdG9rZW5Vc2FnZToge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uRW5kRXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZW5kUmVhc29uOiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG4gIG1lc3NhZ2VDb3VudDogbnVtYmVyO1xuICB0b29sQ2FsbENvdW50OiBudW1iZXI7XG4gIHRvdGFsVG9rZW5Vc2FnZToge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGNvc3RFc3RpbWF0ZTogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb25maWd1cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IENPTkZJR19ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBcIi5jb25maWdcIiwgXCJjbGF1ZGUtY29kZS1zeW5jXCIpO1xuY29uc3QgQ09ORklHX0ZJTEUgPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgXCJjb25maWcuanNvblwiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWcoKTogQ29uZmlnIHwgbnVsbCB7XG4gIC8vIENoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlcyBmaXJzdFxuICBjb25zdCBlbnZVcmwgPSBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19DT05WRVhfVVJMO1xuICBjb25zdCBlbnZLZXkgPSBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19BUElfS0VZO1xuXG4gIGlmIChlbnZVcmwgJiYgZW52S2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnZleFVybDogbm9ybWFsaXplQ29udmV4VXJsKGVudlVybCksXG4gICAgICBhcGlLZXk6IGVudktleSxcbiAgICAgIGF1dG9TeW5jOiBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19BVVRPX1NZTkMgIT09IFwiZmFsc2VcIixcbiAgICAgIHN5bmNUb29sQ2FsbHM6IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX1RPT0xfQ0FMTFMgIT09IFwiZmFsc2VcIixcbiAgICAgIHN5bmNUaGlua2luZzogcHJvY2Vzcy5lbnYuQ0xBVURFX1NZTkNfVEhJTktJTkcgPT09IFwidHJ1ZVwiLFxuICAgIH07XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gY29uZmlnIGZpbGVcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhDT05GSUdfRklMRSkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoQ09ORklHX0ZJTEUsIFwidXRmLThcIik7XG4gICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGRhdGEpIGFzIENvbmZpZztcbiAgICAgIGNvbmZpZy5jb252ZXhVcmwgPSBub3JtYWxpemVDb252ZXhVcmwoY29uZmlnLmNvbnZleFVybCk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBjb25maWc6XCIsIGVycm9yKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUNvbmZpZyhjb25maWc6IENvbmZpZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhDT05GSUdfRElSKSkge1xuICAgICAgZnMubWtkaXJTeW5jKENPTkZJR19ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBmcy53cml0ZUZpbGVTeW5jKENPTkZJR19GSUxFLCBKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc2F2aW5nIGNvbmZpZzpcIiwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbmZpZygpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhDT05GSUdfRklMRSkpIHtcbiAgICAgIGZzLnVubGlua1N5bmMoQ09ORklHX0ZJTEUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgY2xlYXJpbmcgY29uZmlnOlwiLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29udmV4VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCAuY29udmV4LmNsb3VkIHRvIC5jb252ZXguc2l0ZSBmb3IgQVBJIGNhbGxzXG4gIHJldHVybiB1cmwucmVwbGFjZShcIi5jb252ZXguY2xvdWRcIiwgXCIuY29udmV4LnNpdGVcIik7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFN5bmMgQ2xpZW50XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjbGFzcyBTeW5jQ2xpZW50IHtcbiAgcHJpdmF0ZSBjb25maWc6IENvbmZpZztcbiAgcHJpdmF0ZSBzaXRlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgc2Vzc2lvbkNhY2hlOiBNYXA8c3RyaW5nLCBQYXJ0aWFsPFNlc3Npb25EYXRhPj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAvLyBOb3JtYWxpemUgVVJMIHRvIC5jb252ZXguc2l0ZSBmb3IgSFRUUCBlbmRwb2ludHNcbiAgICAvLyBTdXBwb3J0cyBib3RoIC5jb252ZXguY2xvdWQgYW5kIC5jb252ZXguc2l0ZSBpbnB1dCBVUkxzXG4gICAgdGhpcy5zaXRlVXJsID0gY29uZmlnLmNvbnZleFVybC5yZXBsYWNlKFwiLmNvbnZleC5jbG91ZFwiLCBcIi5jb252ZXguc2l0ZVwiKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdChlbmRwb2ludDogc3RyaW5nLCBkYXRhOiB1bmtub3duKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5zaXRlVXJsfSR7ZW5kcG9pbnR9YDtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY29uZmlnLmFwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3luYyBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfSAtICR7dGV4dH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIHNlc3Npb24gZGF0YSB0byBiYWNrZW5kIGZvcm1hdFxuICBwcml2YXRlIHRyYW5zZm9ybVNlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBleHRlcm5hbElkOiBzZXNzaW9uLnNlc3Npb25JZCxcbiAgICAgIHNvdXJjZTogc2Vzc2lvbi5zb3VyY2UsXG4gICAgfTtcbiAgICBcbiAgICAvLyBPbmx5IGluY2x1ZGUgZmllbGRzIHRoYXQgYXJlIGRlZmluZWRcbiAgICBpZiAoc2Vzc2lvbi50aXRsZSAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLnRpdGxlID0gc2Vzc2lvbi50aXRsZTtcbiAgICBpZiAoc2Vzc2lvbi5wcm9qZWN0UGF0aCB8fCBzZXNzaW9uLmN3ZCkgcGF5bG9hZC5wcm9qZWN0UGF0aCA9IHNlc3Npb24ucHJvamVjdFBhdGggfHwgc2Vzc2lvbi5jd2Q7XG4gICAgaWYgKHNlc3Npb24ucHJvamVjdE5hbWUpIHBheWxvYWQucHJvamVjdE5hbWUgPSBzZXNzaW9uLnByb2plY3ROYW1lO1xuICAgIGlmIChzZXNzaW9uLm1vZGVsKSBwYXlsb2FkLm1vZGVsID0gc2Vzc2lvbi5tb2RlbDtcbiAgICBpZiAoc2Vzc2lvbi50b2tlblVzYWdlPy5pbnB1dCAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLnByb21wdFRva2VucyA9IHNlc3Npb24udG9rZW5Vc2FnZS5pbnB1dDtcbiAgICBpZiAoc2Vzc2lvbi50b2tlblVzYWdlPy5vdXRwdXQgIT09IHVuZGVmaW5lZCkgcGF5bG9hZC5jb21wbGV0aW9uVG9rZW5zID0gc2Vzc2lvbi50b2tlblVzYWdlLm91dHB1dDtcbiAgICBpZiAoc2Vzc2lvbi5jb3N0RXN0aW1hdGUgIT09IHVuZGVmaW5lZCkgcGF5bG9hZC5jb3N0ID0gc2Vzc2lvbi5jb3N0RXN0aW1hdGU7XG4gICAgaWYgKHNlc3Npb24ubWVzc2FnZUNvdW50ICE9PSB1bmRlZmluZWQpIHBheWxvYWQubWVzc2FnZUNvdW50ID0gc2Vzc2lvbi5tZXNzYWdlQ291bnQ7XG4gICAgaWYgKHNlc3Npb24udG9vbENhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLnRvb2xDYWxsQ291bnQgPSBzZXNzaW9uLnRvb2xDYWxsQ291bnQ7XG4gICAgaWYgKHNlc3Npb24uZW5kUmVhc29uKSBwYXlsb2FkLmVuZFJlYXNvbiA9IHNlc3Npb24uZW5kUmVhc29uO1xuICAgIFxuICAgIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBpZiBib3RoIHRpbWVzdGFtcHMgZXhpc3RcbiAgICBpZiAoc2Vzc2lvbi5lbmRlZEF0ICYmIHNlc3Npb24uc3RhcnRlZEF0KSB7XG4gICAgICBwYXlsb2FkLmR1cmF0aW9uTXMgPSBuZXcgRGF0ZShzZXNzaW9uLmVuZGVkQXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHNlc3Npb24uc3RhcnRlZEF0KS5nZXRUaW1lKCk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIG1lc3NhZ2UgZGF0YSB0byBiYWNrZW5kIGZvcm1hdFxuICBwcml2YXRlIHRyYW5zZm9ybU1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZURhdGEpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBzZXNzaW9uRXh0ZXJuYWxJZDogbWVzc2FnZS5zZXNzaW9uSWQsXG4gICAgICBleHRlcm5hbElkOiBtZXNzYWdlLm1lc3NhZ2VJZCxcbiAgICAgIHJvbGU6IG1lc3NhZ2Uucm9sZSxcbiAgICAgIHNvdXJjZTogbWVzc2FnZS5zb3VyY2UsXG4gICAgfTtcbiAgICBcbiAgICAvLyBTZXQgdGV4dENvbnRlbnQgZm9yIHVzZXIgcHJvbXB0cyBhbmQgYXNzaXN0YW50IHJlc3BvbnNlc1xuICAgIGlmIChtZXNzYWdlLmNvbnRlbnQpIHtcbiAgICAgIHBheWxvYWQudGV4dENvbnRlbnQgPSBtZXNzYWdlLmNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnRvb2xSZXN1bHQgJiYgIW1lc3NhZ2UudG9vbE5hbWUpIHtcbiAgICAgIC8vIE9ubHkgdXNlIHRvb2xSZXN1bHQgYXMgdGV4dENvbnRlbnQgaWYgbm8gdG9vbE5hbWUgKGZhbGxiYWNrKVxuICAgICAgcGF5bG9hZC50ZXh0Q29udGVudCA9IG1lc3NhZ2UudG9vbFJlc3VsdDtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5jbHVkZSBkdXJhdGlvbiBpZiBhdmFpbGFibGVcbiAgICBpZiAobWVzc2FnZS5kdXJhdGlvbk1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBheWxvYWQuZHVyYXRpb25NcyA9IG1lc3NhZ2UuZHVyYXRpb25NcztcbiAgICB9XG4gICAgXG4gICAgLy8gSW5jbHVkZSB0b2tlbiBjb3VudCBpZiBhdmFpbGFibGVcbiAgICBpZiAobWVzc2FnZS50b2tlbkNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBheWxvYWQucHJvbXB0VG9rZW5zID0gbWVzc2FnZS50b2tlbkNvdW50O1xuICAgIH1cbiAgICBcbiAgICAvLyBUb29sIHVzZSBpbmZvIHN0b3JlZCBpbiBwYXJ0c1xuICAgIGlmIChtZXNzYWdlLnRvb2xOYW1lKSB7XG4gICAgICBwYXlsb2FkLnBhcnRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0b29sLWNhbGxcIixcbiAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICB0b29sTmFtZTogbWVzc2FnZS50b29sTmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IG1lc3NhZ2UudG9vbEFyZ3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICAvLyBBZGQgdG9vbCByZXN1bHQgYXMgc2VwYXJhdGUgcGFydFxuICAgICAgaWYgKG1lc3NhZ2UudG9vbFJlc3VsdCkge1xuICAgICAgICAocGF5bG9hZC5wYXJ0cyBhcyBBcnJheTx7IHR5cGU6IHN0cmluZzsgY29udGVudDogdW5rbm93biB9PikucHVzaCh7XG4gICAgICAgICAgdHlwZTogXCJ0b29sLXJlc3VsdFwiLFxuICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UudG9vbFJlc3VsdCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgYXN5bmMgc3luY1Nlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMudHJhbnNmb3JtU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIi9zeW5jL3Nlc3Npb25cIiwgcGF5bG9hZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gc3luYyBzZXNzaW9uOlwiLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzeW5jTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50cmFuc2Zvcm1NZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiL3N5bmMvbWVzc2FnZVwiLCBwYXlsb2FkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBzeW5jIG1lc3NhZ2U6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN5bmNCYXRjaChcbiAgICBzZXNzaW9uczogU2Vzc2lvbkRhdGFbXSxcbiAgICBtZXNzYWdlczogTWVzc2FnZURhdGFbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRTZXNzaW9ucyA9IHNlc3Npb25zLm1hcCgocykgPT4gdGhpcy50cmFuc2Zvcm1TZXNzaW9uKHMpKTtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkTWVzc2FnZXMgPSBtZXNzYWdlcy5tYXAoKG0pID0+IHRoaXMudHJhbnNmb3JtTWVzc2FnZShtKSk7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCIvc3luYy9iYXRjaFwiLCB7XG4gICAgICAgIHNlc3Npb25zOiB0cmFuc2Zvcm1lZFNlc3Npb25zLFxuICAgICAgICBtZXNzYWdlczogdHJhbnNmb3JtZWRNZXNzYWdlcyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHN5bmMgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNpdGVVcmx9L2hlYWx0aGA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2Uub2s7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Vzc2lvbiBzdGF0ZSBtYW5hZ2VtZW50XG4gIGdldFNlc3Npb25TdGF0ZShzZXNzaW9uSWQ6IHN0cmluZyk6IFBhcnRpYWw8U2Vzc2lvbkRhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25JZCkgfHwge307XG4gIH1cblxuICB1cGRhdGVTZXNzaW9uU3RhdGUoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uRGF0YT5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uSWQpIHx8IHt9O1xuICAgIHRoaXMuc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uSWQsIHsgLi4uY3VycmVudCwgLi4udXBkYXRlcyB9KTtcbiAgfVxuXG4gIGNsZWFyU2Vzc2lvblN0YXRlKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXNzaW9uQ2FjaGUuZGVsZXRlKHNlc3Npb25JZCk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGx1Z2luIEV4cG9ydFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENsYXVkZSBDb2RlIFBsdWdpbiBFbnRyeSBQb2ludFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IENsYXVkZSBDb2RlIHRvIHJlZ2lzdGVyIHRoZSBwbHVnaW4uXG4gKiBJdCByZXR1cm5zIGhvb2sgaGFuZGxlcnMgdGhhdCBmaXJlIGF0IGtleSBwb2ludHMgaW4gdGhlIHNlc3Npb24gbGlmZWN5Y2xlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGx1Z2luKCk6IENsYXVkZUNvZGVIb29rcyB8IG51bGwge1xuICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgaWYgKCFjb25maWcpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiW2NsYXVkZS1jb2RlLXN5bmNdIE5vdCBjb25maWd1cmVkLiBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cC5cIlxuICAgICk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29uZmlnLmF1dG9TeW5jID09PSBmYWxzZSkge1xuICAgIGNvbnNvbGUubG9nKFwiW2NsYXVkZS1jb2RlLXN5bmNdIEF1dG8tc3luYyBkaXNhYmxlZCBpbiBjb25maWcuXCIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgbGV0IG1lc3NhZ2VDb3VudGVyID0gMDtcbiAgbGV0IHRvb2xDYWxsQ291bnRlciA9IDA7XG5cbiAgY29uc29sZS5sb2coXCJbY2xhdWRlLWNvZGUtc3luY10gUGx1Z2luIGxvYWRlZC4gU2Vzc2lvbnMgd2lsbCBzeW5jIHRvIE9wZW5TeW5jLlwiKTtcblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgbmV3IHNlc3Npb24gc3RhcnRzXG4gICAgICovXG4gICAgU2Vzc2lvblN0YXJ0OiBhc3luYyAoZXZlbnQ6IFNlc3Npb25TdGFydEV2ZW50KSA9PiB7XG4gICAgICBtZXNzYWdlQ291bnRlciA9IDA7XG4gICAgICB0b29sQ2FsbENvdW50ZXIgPSAwO1xuXG4gICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICBjd2Q6IGV2ZW50LmN3ZCxcbiAgICAgICAgbW9kZWw6IGV2ZW50Lm1vZGVsLFxuICAgICAgICBzdGFydFR5cGU6IGV2ZW50LnN0YXJ0VHlwZSxcbiAgICAgICAgdGhpbmtpbmdFbmFibGVkOiBldmVudC50aGlua2luZ0VuYWJsZWQsXG4gICAgICAgIHBlcm1pc3Npb25Nb2RlOiBldmVudC5wZXJtaXNzaW9uTW9kZSxcbiAgICAgICAgbWNwU2VydmVyczogZXZlbnQubWNwU2VydmVycyxcbiAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICAvLyBFeHRyYWN0IHByb2plY3QgaW5mbyBmcm9tIGN3ZFxuICAgICAgaWYgKGV2ZW50LmN3ZCkge1xuICAgICAgICBzZXNzaW9uLnByb2plY3RQYXRoID0gZXZlbnQuY3dkO1xuICAgICAgICBzZXNzaW9uLnByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZShldmVudC5jd2QpO1xuXG4gICAgICAgIC8vIFRyeSB0byBnZXQgZ2l0IGluZm9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBnaXREaXIgPSBwYXRoLmpvaW4oZXZlbnQuY3dkLCBcIi5naXRcIik7XG4gICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2l0RGlyKSkge1xuICAgICAgICAgICAgY29uc3QgaGVhZEZpbGUgPSBwYXRoLmpvaW4oZ2l0RGlyLCBcIkhFQURcIik7XG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhoZWFkRmlsZSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgaGVhZCA9IGZzLnJlYWRGaWxlU3luYyhoZWFkRmlsZSwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChoZWFkLnN0YXJ0c1dpdGgoXCJyZWY6IHJlZnMvaGVhZHMvXCIpKSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5naXRCcmFuY2ggPSBoZWFkLnJlcGxhY2UoXCJyZWY6IHJlZnMvaGVhZHMvXCIsIFwiXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUgZ2l0IGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNsaWVudC51cGRhdGVTZXNzaW9uU3RhdGUoZXZlbnQuc2Vzc2lvbklkLCBzZXNzaW9uKTtcbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdXNlciBzdWJtaXRzIGEgcHJvbXB0XG4gICAgICovXG4gICAgVXNlclByb21wdFN1Ym1pdDogYXN5bmMgKGV2ZW50OiBVc2VyUHJvbXB0RXZlbnQpID0+IHtcbiAgICAgIG1lc3NhZ2VDb3VudGVyKys7XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBgJHtldmVudC5zZXNzaW9uSWR9LW1zZy0ke21lc3NhZ2VDb3VudGVyfWAsXG4gICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgICAgY29udGVudDogZXZlbnQucHJvbXB0LFxuICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBhZnRlciBlYWNoIHRvb2wgdXNlXG4gICAgICovXG4gICAgUG9zdFRvb2xVc2U6IGFzeW5jIChldmVudDogVG9vbFVzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWNvbmZpZy5zeW5jVG9vbENhbGxzKSByZXR1cm47XG5cbiAgICAgIHRvb2xDYWxsQ291bnRlcisrO1xuICAgICAgbWVzc2FnZUNvdW50ZXIrKztcblxuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IGAke2V2ZW50LnNlc3Npb25JZH0tdG9vbC0ke3Rvb2xDYWxsQ291bnRlcn1gLFxuICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgdG9vbE5hbWU6IGV2ZW50LnRvb2xOYW1lLFxuICAgICAgICB0b29sQXJnczogZXZlbnQuYXJncyxcbiAgICAgICAgdG9vbFJlc3VsdDogZXZlbnQucmVzdWx0LFxuICAgICAgICBkdXJhdGlvbk1zOiBldmVudC5kdXJhdGlvbk1zLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gQ2xhdWRlIHN0b3BzIHJlc3BvbmRpbmdcbiAgICAgKi9cbiAgICBTdG9wOiBhc3luYyAoZXZlbnQ6IFN0b3BFdmVudCkgPT4ge1xuICAgICAgbWVzc2FnZUNvdW50ZXIrKztcblxuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IGAke2V2ZW50LnNlc3Npb25JZH0tbXNnLSR7bWVzc2FnZUNvdW50ZXJ9YCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgIGNvbnRlbnQ6IGV2ZW50LnJlc3BvbnNlLFxuICAgICAgICB0b2tlbkNvdW50OiBldmVudC50b2tlblVzYWdlLmlucHV0ICsgZXZlbnQudG9rZW5Vc2FnZS5vdXRwdXQsXG4gICAgICAgIGR1cmF0aW9uTXM6IGV2ZW50LmR1cmF0aW9uTXMsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgLy8gVXBkYXRlIHNlc3Npb24gc3RhdGUgd2l0aCB0b2tlbiB1c2FnZVxuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gY2xpZW50LmdldFNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQpO1xuICAgICAgY29uc3QgY3VycmVudFRva2VucyA9IGN1cnJlbnRTdGF0ZS50b2tlblVzYWdlIHx8IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9O1xuICAgICAgY2xpZW50LnVwZGF0ZVNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQsIHtcbiAgICAgICAgdG9rZW5Vc2FnZToge1xuICAgICAgICAgIGlucHV0OiBjdXJyZW50VG9rZW5zLmlucHV0ICsgZXZlbnQudG9rZW5Vc2FnZS5pbnB1dCxcbiAgICAgICAgICBvdXRwdXQ6IGN1cnJlbnRUb2tlbnMub3V0cHV0ICsgZXZlbnQudG9rZW5Vc2FnZS5vdXRwdXQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBzZXNzaW9uIGVuZHNcbiAgICAgKi9cbiAgICBTZXNzaW9uRW5kOiBhc3luYyAoZXZlbnQ6IFNlc3Npb25FbmRFdmVudCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gY2xpZW50LmdldFNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQpO1xuXG4gICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgLi4uY3VycmVudFN0YXRlLFxuICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIGVuZFJlYXNvbjogZXZlbnQuZW5kUmVhc29uLFxuICAgICAgICBtZXNzYWdlQ291bnQ6IGV2ZW50Lm1lc3NhZ2VDb3VudCxcbiAgICAgICAgdG9vbENhbGxDb3VudDogZXZlbnQudG9vbENhbGxDb3VudCxcbiAgICAgICAgdG9rZW5Vc2FnZTogZXZlbnQudG90YWxUb2tlblVzYWdlLFxuICAgICAgICBjb3N0RXN0aW1hdGU6IGV2ZW50LmNvc3RFc3RpbWF0ZSxcbiAgICAgICAgZW5kZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgY2xpZW50LmNsZWFyU2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgW2NsYXVkZS1jb2RlLXN5bmNdIFNlc3Npb24gc3luY2VkOiAke2V2ZW50Lm1lc3NhZ2VDb3VudH0gbWVzc2FnZXMsICR7ZXZlbnQudG9vbENhbGxDb3VudH0gdG9vbCBjYWxsc2BcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gRGVmYXVsdCBleHBvcnQgZm9yIENsYXVkZSBDb2RlIHBsdWdpbiBzeXN0ZW1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVBsdWdpbjtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-code-sync",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "Sync your Claude Code sessions to OpenSync dashboard. Track coding sessions, analyze tool usage, and monitor token consumption across projects.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|